HEX
Server: LiteSpeed
System: Linux br-asc-web1845.main-hosting.eu 5.14.0-611.42.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Mar 24 05:30:20 EDT 2026 x86_64
User: u790421558 (790421558)
PHP: 8.2.30
Disabled: system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Upload Files
File: //opt/alt/python311/lib64/python3.11/site-packages/yarl/__pycache__/_url.cpython-311.pyc
�

f�Zg������ddlZddlZddlZddlmZmZddlmZddlm	Z	m
Z
ddlmZddl
mZmZmZmZmZmZddlmZmZmZddlZddlmZmZdd	lmZd
dlm Z m!Z!m"Z"m#Z#m$Z$m%Z%d
dl&m'Z'm(Z(d
d
l)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/d
dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=dddddd�Z>e?e��Z@e?d��ZAejBdejC��ZDed��ZEejFdkrddl
mGZGneZGGd�de��ZHeHjIZJGd�de��ZKGd�ded���ZLdeEd eEfd!�ZMe
d"eNd d#fd$���ZOe
d"eNd d#fd%���ZPe
d&eNd'eNd(eeNdfd)eeNdfd*eNd+eeQdfd,eNd-eNd.eNd d#fd/���ZRd&eNd0eNd,eNd1eNd.eNd d#fd2�ZSe
eS��ZTeMGd3�d#����ZUd4ZVd5ZWe
eV��d6eNd eNfd7���aXe
eV��d*eNd eNfd8���aYe
eW��d*eNd9eZd eNfd:���a[eMdDd;���Z\eMd eKfd<���Z]eMeVeVeJeJeJd=�d>eeQdfd?eeQdfd@eeQdeHfdAeeQdeHfdBeeQdeHfd dfdC���Z^dS)E�N)�Mapping�Sequence)�Enum)�
_CacheInfo�	lru_cache)�
ip_address)�
TYPE_CHECKING�Any�	TypedDict�TypeVar�Union�overload)�SplitResult�	parse_qsl�
uses_relative)�	MultiDict�MultiDictProxy)�under_cached_property�)�USES_AUTHORITY�SplitURLType�make_netloc�split_netloc�	split_url�unsplit_result)�normalize_path�normalize_path_segments)�Query�
QueryVariable�SimpleQuery�
get_str_query�get_str_query_from_iterable�$get_str_query_from_sequence_iterable)
�FRAGMENT_QUOTER�FRAGMENT_REQUOTER�PATH_QUOTER�
PATH_REQUOTER�PATH_SAFE_UNQUOTER�
PATH_UNQUOTER�QS_UNQUOTER�QUERY_QUOTER�QUERY_REQUOTER�QUOTER�REQUOTER�UNQUOTER�human_quote�Pi��)�http�https�ws�wss�ftpa<
        # any character not in the unreserved or sub-delims sets, plus %
        # (validated with the additional check for pct-encoded sequences below)
        [^a-z0-9\-._~!$&'()*+,;=%]
    |
        # % only allowed if it is part of a pct-encoded
        # sequence of 2 hex digits.
        %(?![0-9a-f]{2})
    �_T)��)�Selfc��eZdZdZdZdS)�
UndefinedTypez4Singleton type for use with not set sentinel values.rN)�__name__�
__module__�__qualname__�__doc__�
_singleton���>/opt/alt/python311/lib64/python3.11/site-packages/yarl/_url.pyr=r=Ps������>�>��J�J�JrDr=c�F�eZdZUdZeed<eed<eed<eed<eed<dS)�	CacheInfozHost encoding cache.�idna_encode�idna_decoder�
host_validate�encode_hostN)r>r?r@rAr�__annotations__rCrDrErGrGYsT������������������������������rDrGc�j�eZdZUeed<ded<eed<eed<eed<eed<eedfed	<eedfed
<eedfed<eedfed<eedfed
<eedfed<eedfed<eedfed<eedfed<eedfed<eed<eed<e	e
eefed<ded<eed<eed<eed<eed<eed<eed<e
edfed<e
edfed <ded!<eed"<eed#<eed$<eed%<e
edfed&<e
edfed'<dS)(�_InternalURLCache�_val�URL�_origin�absolute�scheme�
raw_authority�	authorityN�raw_user�user�raw_password�password�raw_host�host�host_subcomponent�host_port_subcomponent�port�
explicit_port�raw_path�path�
_parsed_query�MultiDictProxy[str]�query�raw_query_string�query_string�path_qs�raw_path_qs�raw_fragment�fragment.�	raw_parts�parts�parent�raw_name�name�
raw_suffix�suffix�raw_suffixes�suffixes)r>r?r@rrL�bool�strr
�int�list�tuplerCrDrErNrNcs�������
����
�N�N�N��N�N�N��K�K�K������N�N�N��C��I�����
��T�	�
������T�	�"�"�"�"��C��I������C��I�����
��T�	�
�����S�$�Y�'�'�'�'�!�#�t�)�,�,�,�,�
��T�	�
������d��#�#�#�#��M�M�M�

�I�I�I���c�3�h��(�(�(�(� � � � ���������
�L�L�L����������M�M�M��S�#�X�������c��?�����M�M�M��M�M�M�

�I�I�I��O�O�O��K�K�K���S��/�!�!�!��C��H�o�����rDrNF)�total�obj�returnc��d|_|S)N�yarl)r?)rzs rE�rewrite_moduler~�s���C�N��JrD�url_strrPc�4�i}t|��\}}}}}|sd}n�d|vsd|vsd|vrt|��\}}	}}
ndx}x}	}
|}|� |tvrd|�d�}t|���d}t	|d�	��}d|vr
|d
d�n||d<|
|d
<|	�|�|
�|n|�d|
��}d|d<d|d<nB|rt|��n|}|	rt|	��n|	}
t
||
||
��}||d<|
|d<|r$t|��}|rd|vrt|��}|rt|��}|rt|��}||d<|s|rdn||d<||d<||d<t�t��}||_||_||_||_||_||_|S)zParse unencoded URL.��:�@�[Nz9Invalid URL: host is required for absolute urls with the � schemeF��
validate_hostr���rZr_rVrX�.rS�/r`reri)rr�SCHEME_REQUIRES_HOST�
ValueError�_encode_hostr.rr'rr,r%�object�__new__rP�_scheme�_netloc�_path�_query�	_fragment�_cache)r�cacherS�netlocrardrjr[�usernamerYr^�msgrVrX�selfs               rE�
encode_urlr��sS�� "�E�,5�g�,>�,>�)�F�F�D�%��� 1�����&�=�=�C�6�M�M�S�F�]�]�-9�&�-A�-A�*�H�h��d�d�)-�-�H�-�x�$��D��<��-�-�-�>�.4�>�>�>��!��o�o�%����D��6�6�6��*-��+�+�D��2��J�J�4��j��!%��o����� 0�!�\�T�T�$�/?�/?��/?�/?�F� $�E�*��$(�E�.�!�!�-5�C�x��)�)�)�8�H�19�G�8�H�-�-�-�x�L� ��<��t�D�D�F� (�E�*��$0�E�.�!��(��T�"�"���	(�c�T�k�k�!�$�'�'�D��&��u�%�%���/�$�X�.�.���E�(�O�#'�<�F�<����E�*�� %�E�
��$�E�.���>�>�#���D��D�L��D�L��D�J��D�K��D�N��D�K��KrDc��t�t��}t|��}|\|_|_|_|_|_i|_	|S)zParse pre-encoded URL.)
r�r�rPrr�r�r�r�r�r�)rr��vals   rE�pre_encoded_urlr��sH���>�>�#���D�
�G�
�
�C�JM�G�D�L�$�,��
�D�K����D�K��KrDrSrUrWrYr[r^rarfrjc	�R�t�t��}	||	_|r||	_nZ|rQ|�"|t
�|��krdn|}|�|�|�|n|�d|��|	_nt||||��|	_nd|	_||	_||	_	||	_
i|	_|	S)z#Build a pre-encoded URL from parts.Nr�r�)r�r�rPr�r��
DEFAULT_PORTS�getrr�r�r�r�)
rSrUrWrYr[r^rarfrjr�s
          rE�build_pre_encoded_urlr��s����>�>�#���D��D�L��
� ����	
�����=�#4�#4�V�#<�#<�<�<�4�4�$�D��<�H�,�#'�<�4�4��5E�5E�t�5E�5E�D�L�L�&�t�X�t�T�B�B�D�L�L�����D�J��D�K��D�N��D�K��KrDr�rdc��t�t��}||_||_||_||_||_i|_|S)zCreate a new URL from parts.)	r�r�rPr�r�r�r�r�r�)rSr�rardrjr�s      rE�from_parts_uncachedr��sD���>�>�#���D��D�L��D�L��D�J��D�K��D�N��D�K��KrDc�f	�eZdZUdZeed<eed<eed<eed<eed<efddd	�d
eeede	fde
dee
dfd
dfd�Zedddddddddddd�dededeedfdeedfdedee
dfdedeedfdedede
d
dfd���Zd�Zd
efd�Zd
efd�Zd
efd�Zd ed
e
fd!�Zd
e
fd"�Zd ed
e
fd#�Zd ed
e
fd$�Zd ed
e
fd%�Zd ed
e
fd&�Zd'ed
dfd(�Zded
dfd)�Zd
e
fd*�Zd
eefd+�Z d,�Z!d{d-�Z"d
e
fd.�Z#d
e
fd/�Z$d|d0�Z%e&d
e'fd1���Z(e&d|d2���Z)d|d3�Z*e&d
e
fd4���Z+e&d
efd5���Z,e&d
efd6���Z-e&d
efd7���Z.e&d
eedffd8���Z/e&d
eedffd9���Z0e&d
eedffd:���Z1e&d
eedffd;���Z2e&d
eedffd<���Z3e&d
eedffd=���Z4e&d
eedffd>���Z5e&d
eedffd?���Z6e&d
ee
dffd@���Z7e&d
ee
dffdA���Z8e&d
efdB���Z9e&d
efdC���Z:e&d
efdD���Z;e&d
e<eeeffdE���Z=e&d}dG���Z>e&d
efdH���Z?e&d
efdI���Z@e&d
efdJ���ZAe&d
efdK���ZBe&d
efdL���ZCe&d
efdM���ZDe&d
eedNffdO���ZEe&d
eedNffdP���ZFe&d|dQ���ZGe&d
efdR���ZHe&d
efdS���ZIe&d
efdT���ZJe&d
efdU���ZKe&d
eedNffdV���ZLe&d
eedNffdW���ZMd~dXdYde
d
dfdZ�ZNded
dfd[�ZOdeedfd
dfd\�ZPdeedfd
dfd]�ZQded
dfd^�ZRdee
dfd
dfd_�ZSdddd`�dede
dae
dbe
d
df
dc�ZTeUded
dfdd���ZVeUdeeWd
dfdf���ZVdgeXdeeXd
dfdh�ZVeUded
dfdi���ZYeUdeeWd
dfdj���ZYdgeXdeeXd
dfdk�ZYeUded
dfdl���ZZeUdeeWd
dfdm���ZZdgeXdeeXd
dfdn�ZZdoed
dfdp�Z[deedfd
dfdq�Z\dddr�d'edae
dbe
d
dfds�Z]dddr�dtedae
dbe
d
dfdu�Z^ddw�Z_ddx�d ede
d
dfdy�Z`d
efdz�ZadS)�rP)r�r�r�r�r�r�r�r�r�r�r�FN)�encoded�strictr�r�r�r{c��|�tjd��t|��tur |rt	|��nt|��St|��|ur|St|��tur|std���t|�St|t��r:|rt	t|����ntt|����S|turKt�t��}dx|_x|_x|_x|_|_i|_|St)d���)Nzstrict parameter is ignoredz$Cannot apply decoding to SplitResultr�z#Constructor parameter should be str)�warnings�warn�typerur�r�rr��
from_parts�
isinstance�	UNDEFINEDr�r�rPr�r�r�r�r�r��	TypeError)�clsr�r�r�r�s     rEr�zURL.__new__Ys/�����M�7�8�8�8���9�9����+2�G�?�3�'�'�'�
�3���G���9�9�����J���9�9��#�#��
I� �!G�H�H�H��s�#�#��c�3���	R�07�Q�?�3�s�8�8�,�,�,�Z��C���=Q�=Q�Q��)����>�>�#�&�&�D�VX�X�D�L�X�4�<�X�$�*�X�t�{�T�^��D�K��K��=�>�>�>rDr�)rSrUrWrYr[r^rardrfrjr�rSrUrWrYr[r^rardrfrjc��|r|s|s|s|rtd���|�5t|t��s tdt	|���d����|r|std���|r|	rtd���|�
|�|�|�|	�|
�td���|rt|��pd}	|rt
||||||||	|
�	�	St�t��}||_
d}
|r*t|��\}}}
}|
rt|
d	�
��nd}
n|rt|d�
��}
nd|_
|
�Q|�"|t�|��krdn|}|�|�|�|
n|
�d|��|_
nt!|||
|d��|_
|rt#|��n|}|r7|j
r0d|vrt%|��}|d
dkrd}t|���||_|s|	rt)|	��}	|	|_|
rt-|
��n|
|_i|_|S)zCreates and returns a new URLz@Can't mix "authority" with "user", "password", "host" or "port".Nz$The port is required to be int, got r�z/Can't build URL with "port" but without "host".z6Only one of "query" or "query_string" should be passedz}NoneType is illegal for "scheme", "authority", "host", "path", "query_string", and "fragment" args, use empty string instead.r�Fr�Tr�rr�zCPath in a URL with authority should start with a slash ('/') if set)r�r�rvr�r�r!r�r�r�rPr�rr�r�r�r�rr&rr�r+r�r$r�r�)r�rSrUrWrYr[r^rardrfrjr�r��_hostr�s               rE�buildz	URL.buildvs���$�	�$�	�(�	�d�	�d�	��S���
���J�t�S�$9�$9���R�4��:�:�R�R�R�S�S�S��	Q��	Q��O�P�P�P��	W�\�	W��U�V�V�V��N�� ��|��|��#����Q���
�
�	6�(��/�/�5�2�L��	�(����������
�
�

��~�~�c�"�"�����"&���	�*6�y�*A�*A�'�D�(�E�4�@E�M�L��e�<�<�<�<�2�E�E�
�	� ��T�:�:�:�E�E��D�L�����#�}�'8�'8��'@�'@�@�@�t�t�d���|�� 0�(,��u�u�U�:K�:K�T�:K�:K����*�4��5�$��M�M���$(�2�{�4� � � �d���	&�D�L�	&��d�{�{�%�d�+�+���A�w�#�~�~�6��!��o�o�%���
��	6��	6�'��5�5�L�"���6>�L���2�2�2�H�������rDc�(�td|�d����)NzInheriting a class z from URL is forbidden)r�)r�s rE�__init_subclass__zURL.__init_subclass__�s���K�c�K�K�K�L�L�LrDc�@�|js|jr|js|jrd}n|j}|jx}�G|t
�|j��kr$|j}t|j
|j|d��}n|j}t|j|||j|j��S�Nr�)
r�r�r�r�r_r�r�r�r\rrVrXr)r�rar^r[r�s     rE�__str__zURL.__str__�s����z�	�d�l�	���	�t�~�	��D�D��:�D��&�&�D�3��
�@Q�@Q��L�A
�A
�9
�9
�
�)�D� ����0A�4��N�N�F�F��\�F��d�l�F�D�$�+�t�~�V�V�VrDc�@�|jj�dt|���d�S)Nz('z'))�	__class__r>ru�r�s rE�__repr__zURL.__repr__�s$���.�)�:�:�S��Y�Y�:�:�:�:rDc�F�t|���d��S)N�ascii)ru�encoder�s rE�	__bytes__z
URL.__bytes__�s���4�y�y����(�(�(rD�otherc�$�t|��turtS|js	|jrdn|j}|js	|jrdn|j}|j|jko5|j|jko%||ko|j|jko|j|jkSr�)r�rP�NotImplementedr�r�r�r�r�)r�r��path1�path2s    rE�__eq__z
URL.__eq__�s�����;�;�c�!�!�!�!��:�F�$�,�F���D�J�� �;�I�5�=�I���e�k���L�E�M�)�
2����
�-�
2����
2���u�|�+�
2���%�/�1�	
rDc���|j�d��x}�I|js	|jrdn|j}t	|j|j||j|jf��x}|jd<|S)N�hashr�)r�r�r�r�r�r�r�r�)r��retras   rE�__hash__zURL.__hash__�sn���;�?�?�6�*�*�*�C�3�"�j�I�T�\�I�3�3�t�z�D�(,���t�|�T�4�;���O�)�)�
�C�$�+�f�%��
rDc�\�t|��turtS|j|jkS�N�r�rPr�rO�r�r�s  rE�__le__z
URL.__le__�(����;�;�c�!�!�!�!��y�E�J�&�&rDc�\�t|��turtS|j|jkSr�r�r�s  rE�__lt__z
URL.__lt__	�(����;�;�c�!�!�!�!��y�5�:�%�%rDc�\�t|��turtS|j|jkSr�r�r�s  rE�__ge__z
URL.__ge__r�rDc�\�t|��turtS|j|jkSr�r�r�s  rE�__gt__z
URL.__gt__r�rDroc��t|t��stS|�t|��f��Sr�)r�rur��_make_child�r�ros  rE�__truediv__zURL.__truediv__s6���$��$�$�	"�!�!�����T����-�-�-rDc�,�|�|��Sr�)�update_query�r�rds  rE�__mod__zURL.__mod__s��� � ��'�'�'rDc�T�t|jp|jp
|jp|j��Sr�)rtr�r�r�r�r�s rE�__bool__zURL.__bool__ s'���D�L�O�D�J�O�$�+�O���P�P�PrDc�N�t�t|j��fSr�)rxr�rrOr�s rE�__getstate__zURL.__getstate__#s���
�
�k�4�9�5�5�7�7rDc���|d�*t|dt��r|dd}n|^}}|\|_|_|_|_|_i|_dS)NrrrO)r��dictr�r�r�r�r�r�)r��stater��unuseds    rE�__setstate__zURL.__setstate__&s]����8��
�5��8�T� :� :����(�6�"�C�C� �L�C�&�NQ�K���d�l�D�J���T�^�����rDc�b�|j}t|j��}|\|d<|d<|d<|d<dS)z"Cache the netloc parts of the URL.rVrXrZr_N)r�rr�)r��c�	split_locs   rE�
_cache_netloczURL._cache_netloc/s>���K�� ���.�.�	�NW�K��*�
�q��(�!�J�-��?�9K�9K�9KrDc��|jS)z�A check for absolute URLs.

        Return True for absolute ones (having scheme or starting
        with //), False otherwise.

        Is is preferred to call the .absolute property instead
        as it is cached.
        )rRr�s rE�is_absolutezURL.is_absolute5s���}�rDc�p�|jx}�|jdkS|t�|j��kS)z�A check for default port.

        Return True if port is default for specified scheme,
        e.g. 'http://python.org' or 'http://python.org:80', False
        otherwise.

        Return False for relative URLs.

        Nr�)r_r�r�r�r�)r��explicits  rE�is_default_portzURL.is_default_port@s<���*�*�H�3��<�2�%�%��=�,�,�T�\�:�:�:�:rDc��|jS)z}Return an URL with scheme, host and port parts only.

        user, password, path, query and fragment are removed.

        )rQr�s rE�originz
URL.originQ����|�rDc�B�|j|j|j|j|jfSr�)r�r�r�r�r�r�s rErOzURL._valZs����d�l�D�J���T�^�T�TrDc��|jx}std���|jx}std���d|vr|j}t	dd||j��}n|js|js	|js|St||ddd��S)z|Return an URL with scheme, host and port parts only.

        user, password, path, query and fragment are removed.
        �URL should be absolutezURL should have schemer�Nr�)
r�r�r�r\rr_r�r�r�r�)r�r�rS�encoded_hosts    rErQzURL._origin^s����,�&��	7��5�6�6�6��,�&��	7��5�6�6�6��&�=�=��1�L� ��t�\�4�;M�N�N�F�F���	�D�K�	���	��K��&�&�"�b�"�5�5�5rDc�r�|jstd���tdd|j|j|j��S)zhReturn a relative part of the URL.

        scheme, user, password, host and port are removed.

        r�r�)r�r�r�r�r�r�r�s rE�relativezURL.relativeos9���|�	7��5�6�6�6��"�b�$�*�d�k�4�>�J�J�JrDc��|jdkS)z�A check for absolute URLs.

        Return True for absolute ones (having scheme or starting
        with //), False otherwise.

        r��r�r�s rErRzURL.absoluteys���|�r�!�!rDc��|jS)zdScheme for absolute URLs.

        Empty string for relative URLs or URLs starting with //

        )r�r�s rErSz
URL.scheme�r�rDc��|jS)zQEncoded authority part of URL.

        Empty string for relative URLs.

        r�r�s rErTzURL.raw_authority�r�rDc�N�t|j|j|j|j��S)zQDecoded authority part of URL.

        Empty string for relative URLs.

        )rrWrYr[r^r�s rErUz
URL.authority�s ���4�9�d�m�T�Y��	�J�J�JrDc�D�|���|jdS)zEEncoded user part of URL.

        None if user is missing.

        rV�r�r�r�s rErVzURL.raw_user�s#��	
�������{�:�&�&rDc�6�|jx}�dSt|��S)zEDecoded user part of URL.

        None if user is missing.

        N)rVr/)r�rVs  rErWzURL.user�s$���
�%�H�.��4���!�!�!rDc�D�|���|jdS)zMEncoded password part of URL.

        None if password is missing.

        rXrr�s rErXzURL.raw_password�s#��	
�������{�>�*�*rDc�6�|jx}�dSt|��S)zMDecoded password part of URL.

        None if password is missing.

        N)rXr/)r�rXs  rErYzURL.password�s%��!�-�-�L�6��4���%�%�%rDc�D�|���|jdS)z�Encoded host part of URL.

        None for relative URLs.

        When working with IPv6 addresses, use the `host_subcomponent` property instead
        as it will return the host subcomponent with brackets.
        rZrr�s rErZzURL.raw_host�s#��	
�������{�:�&�&rDc�z�|jx}�dS|r|d���sd|vr|St|��S)zDDecoded host part of URL.

        None for relative URLs.

        Nr�r�)rZ�isdigit�_idna_decode�r��raws  rEr[zURL.host�sN���=� �C�)��4��	�3�r�7�?�?�$�$�	��s�
�
��J��C� � � rDc�0�|jx}�dSd|vrd|�d�n|S)a�Return the host subcomponent part of URL.

        None for relative URLs.

        https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2

        `IP-literal = "[" ( IPv6address / IPvFuture  ) "]"`

        Examples:
        - `http://example.com:8080` -> `example.com`
        - `http://example.com:80` -> `example.com`
        - `https://127.0.0.1:8443` -> `127.0.0.1`
        - `https://[::1]:8443` -> `[::1]`
        - `http://[::1]` -> `[::1]`

        Nr�r��])rZr	s  rEr\zURL.host_subcomponent�s0��$�=� �C�)��4� �C�Z�Z�z�3�z�z�z�z�S�0rDc���|jx}�dS|ddkr|�d��}|j}|�#|t�|j��krd|vrd|�d�n|Sd|vrd|�d|��n|�d|��S)aReturn the host and port subcomponent part of URL.

        Trailing dots are removed from the host part.

        This value is suitable for use in the Host header of an HTTP request.

        None for relative URLs.

        https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2
        `IP-literal = "[" ( IPv6address / IPvFuture  ) "]"`
        https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.3
        port        = *DIGIT

        Examples:
        - `http://example.com:8080` -> `example.com:8080`
        - `http://example.com:80` -> `example.com`
        - `http://example.com.:80` -> `example.com`
        - `https://127.0.0.1:8443` -> `127.0.0.1:8443`
        - `https://[::1]:8443` -> `[::1]:8443`
        - `http://[::1]` -> `[::1]`

        Nr�r�r�r�rz]:)rZ�rstripr_r�r�r�)r�r
r^s   rEr]zURL.host_port_subcomponent�s���0�=� �C�)��4��r�7�c�>�>��*�*�S�/�/�C��!���<�4�=�#4�#4�T�\�#B�#B�B�B�!$����:�s�:�:�:�:��4�$'�3�J�J� �3� � �$� � � �s�O�O�T�O�O�CrDc�V�|jx}�|St�|j��S)z�Port part of URL, with scheme-based fallback.

        None for relative URLs or URLs without explicit port and
        scheme without default port substitution.

        )r_r�r�r�)r�r_s  rEr^zURL.port%s.��"�/�/�M�<� � �� � ���.�.�.rDc�D�|���|jdS)zyPort part of URL, without scheme-based fallback.

        None for relative URLs or URLs without explicit port.

        r_rr�s rEr_zURL.explicit_port1s#��	
�������{�?�+�+rDc�0�|js|js|jndS)zNEncoded path of URL.

        / for absolute URLs without path part.

        r�)r�r�r�s rEr`zURL.raw_path;s��"�Z�D�t�|�D�t�z�z��DrDc�N�|jrt|j��n
|jrdndS)zNDecoded path of URL.

        / for absolute URLs without path part.

        r�r�)r�r)r�r�s rErazURL.pathDs,��-1�J�W�}�T�Z�(�(�(�4�<�<W�C�C�UW�WrDc�N�|jrt|j��S|jrdndS)z{Decoded path of URL.

        / for absolute URLs without path part.

        / (%2F) and % (%25) are not decoded

        r�r�)r�r(r�r�s rE�	path_safez
URL.path_safeMs/���:�	2�%�d�j�1�1�1��l�*�s�s��*rDc�.�t|jd���S)zParse query part of URL.T��keep_blank_values)rr�r�s rErbzURL._parsed_queryZs������=�=�=�=rDrcc�D�tt|j����S)z�A MultiDictProxy representing parsed query parameters in decoded
        representation.

        Empty value if URL has no query part.

        )rrrbr�s rErdz	URL.query_s���i��(:�;�;�<�<�<rDc��|jS)zOEncoded query part of URL.

        Empty string if query is missing.

        )r�r�s rErezURL.raw_query_stringis���{�rDc�<�|jrt|j��ndS)zODecoded query part of URL.

        Empty string if query is missing.

        r�)r�r*r�s rErfzURL.query_stringrs ��,0�;�>�{�4�;�'�'�'�B�>rDc�:�|jx}s|jn|j�d|��S)zDecoded path of URL with query.�?)rfra�r��qs  rErgzURL.path_qs{s-��'+�&7�!7��P�t�y�y���>P�>P�Q�>P�>P�PrDc��|jx}r|js|js|j�d|��nd|��S|js|js|jndS)zEncoded path of URL with query.rz/?r�)r�r�r�rs  rErhzURL.raw_path_qs�s^�����1�	W�*.�*�V�D�L�V�d�j�&�&�1�&�&�&�h�ST�h�h�V�!�Z�D�t�|�D�t�z�z��DrDc��|jS)zUEncoded fragment part of URL.

        Empty string if fragment is missing.

        )r�r�s rErizURL.raw_fragment�s���~�rDc�<�|jrt|j��ndS)zUDecoded fragment part of URL.

        Empty string if fragment is missing.

        r�)r�r/r�s rErjzURL.fragment�s ��,0�>�A�x���'�'�'�r�ArD.c�
�|j}|jr%|r!dg|dd��d���RndS|r-|ddkr!dg|dd��d���RSt|�d����S)zjA tuple containing encoded *path* parts.

        ('/',) for absolute URLs if *path* is missing.

        r�rN)r�r)r�r��splitrx)r�ras  rErkz
URL.raw_parts�s����z���<�	C�26�B�C�.�$�q�r�r�(�.�.��-�-�.�.�.�F�B��	/�D��G�s�N�N��.�$�q�r�r�(�.�.��-�-�.�.�.��T�Z�Z��_�_�%�%�%rDc�>�td�|jD����S)zjA tuple containing decoded *path* parts.

        ('/',) for absolute URLs if *path* is missing.

        c3�4K�|]}t|��V��dSr��r/)�.0�parts  rE�	<genexpr>zURL.parts.<locals>.<genexpr>�s(����?�?��X�d�^�^�?�?�?�?�?�?rD)rxrkr�s rErlz	URL.parts�s#���?�?���?�?�?�?�?�?rDc	��|j}|r|dkr-|js|jrt|j|j|dd��S|S|�d��}t|j|jd�|dd���dd��S)z]A new URL with last part of path removed and cleaned up query and
        fragment.

        r�r�Nr�)r�r�r�r�r�r�r#�join)r�rarls   rErmz
URL.parent�s����z���	�t�s�{�{��~�
L���
L�!�$�,���d�B��K�K�K��K��
�
�3�����$�,���c�h�h�u�S�b�S�z�6J�6J�B�PR�S�S�SrDc�Z�|j}|js|dS|dd�}|r|dndS)zThe last part of raw_parts.r�rNr�)rkr�)r�rls  rErnzURL.raw_name�s?������|�	���9���a�b�b�	��!�)�u�R�y�y�r�)rDc�*�t|j��S)zThe last part of parts.)r/rnr�s rErozURL.name�s����
�&�&�&rDc��|j}|�d��}d|cxkrt|��dz
kr
nn
||d�ndS)Nr�rrr�)rn�rfind�len)r�ro�is   rErpzURL.raw_suffix�sU���}���J�J�s�O�O���q�0�0�0�0�3�t�9�9�q�=�0�0�0�0�0�t�A�B�B�x�x�b�8rDc�*�t|j��Sr�)r/rpr�s rErqz
URL.suffix�s�����(�(�(rDc���|j}|�d��rdS|�d��}td�|�d��dd�D����S)Nr�rCc3� K�|]	}d|zV��
dS)r�NrC�r'rqs  rEr)z#URL.raw_suffixes.<locals>.<genexpr>�s&����D�D�f�S�6�\�D�D�D�D�D�DrDr)rn�endswith�lstriprxr#r�s  rErrzURL.raw_suffixes�sc���}���=�=����	��2��{�{�3�����D�D��
�
�3������0C�D�D�D�D�D�DrDc�>�td�|jD����S)Nc3�4K�|]}t|��V��dSr�r&r5s  rEr)zURL.suffixes.<locals>.<genexpr>�s*����F�F�&�X�f�%�%�F�F�F�F�F�FrD)rxrrr�s rErszURL.suffixes�s"���F�F�D�4E�F�F�F�F�F�FrD�pathsz
Sequence[str]c�v�g}d}tt|����D]�\}}|dk}|r|ddkrtd|�d����|r|nt|��}|d|vz}|�d��}|���||s|ddkr
|dd	�n|z
}��|jx}rH|�d��x}	r1|	d
dkr
|	d	d
�n|	}
|
���||
z
}|jx}r#|r!|d
dkr|�d��|���|r|s+t|j
|d�|��dd��Sd�t|����}|r|ddkrd|��}t|j
||dd��S)z�
        add paths to self._path, accounting for absolute vs relative paths,
        keep existing, but do not create new, empty segments
        Frr�zAppending path z! starting from slash is forbiddenr�r�rNr�)
�	enumerate�reversedr�r&r#�reverser�r��appendr�r�r+r)r�r:r��parsed�needs_normalize�idxra�last�segments�old_segments�oldr�s            rEr�zURL._make_child�s
��
�� %��"�8�E�?�?�3�3�	S�	S�I�C���!�8�D��
��Q��3��� �O�d�O�O�O����#�9�4�4��D�(9�(9�D��s�d�{�*�O��z�z�#���H��������$�R�8�A�;�"�3D�3D�h�q�r�r�l�l�(�R�F�F��J��D�	�T�Z�Z��_�_�%D�\�	�(4�B�'7�2�'=�'=�,�s��s�#�#�<�C��K�K�M�M�M��c�M�F��l�"�F�	��	�6�"�:��3C�3C��M�M�"�����������	N�_�	N��d�l�F�C�H�H�V�4D�4D�b�"�M�M�M��x�x�/��7�7�8�8���	�D��G�s�N�N��t�:�:�D��$�,���b�"�=�=�=rDc��t|t��std���|���}|j}|s|t
vrd|�d�}t
|���t|||j|j	|j
��S)z&Return a new URL with scheme replaced.zInvalid scheme typez<scheme replacement is not allowed for relative URLs for the r�)r�rur��lowerr�r�r�r�r�r�r�)r�rS�lower_schemer�r�s     rE�with_schemezURL.with_schemes����&�#�&�&�	3��1�2�2�2��|�|�~�~������	"�,�*>�>�>�?�)5�?�?�?�
��S�/�/�!��,���
�D�K���X�X�XrDc�@�|�d}n;t|t��rt|��}|j}nt	d���|jx}st
d���|jpd}t||||j	��}t|j||j|j
|j��S)z�Return a new URL with user replaced.

        Autoencode user if needed.

        Clear user/password if user is None.

        NzInvalid user typez1user replacement is not allowed for relative URLsr�)r�rur-rXr�r�r�r\rr_r�r�r�r�r�)r�rWrYr�r�s     rE�	with_userz
URL.with_user s����<��H�H�
��c�
"�
"�	1��$�<�<�D��(�H�H��/�0�0�0��,�&��	R��P�Q�Q�Q��-�3����T�8�\�4�;M�N�N���$�,���
�D�K���X�X�XrDc�<�|�n4t|t��rt|��}ntd���|jx}std���|jpd}|j}t|j	|||��}t|j||j|j
|j��S)z�Return a new URL with password replaced.

        Autoencode password if needed.

        Clear password if argument is None.

        NzInvalid password typez5password replacement is not allowed for relative URLsr�)r�rur-r�r�r�r\r_rrVr�r�r�r�r�)r�rYr�r�r^s     rE�
with_passwordzURL.with_password6s������
��#�
&�
&�	5��h�'�'�H�H��3�4�4�4��,�&��	V��T�U�U�U��-�3����!���T�]�H�l�D�I�I���$�,���
�D�K���X�X�XrDc�Z�t|t��std���|jx}st	d���|st	d���|rt|d���nd}|j}t|j|j	||��}t|j||j|j
|j��S)z�Return a new URL with host replaced.

        Autoencode host if needed.

        Changing host for relative URLs is not allowed, use .join()
        instead.

        zInvalid host typez1host replacement is not allowed for relative URLszhost removing is not allowedTr�r�)r�rur�r�r�r�r_rrVrXr�r�r�r�r�)r�r[r�r�r^s     rE�	with_hostz
URL.with_hostLs����$��$�$�	1��/�0�0�0��,�&��	R��P�Q�Q�Q��	=��;�<�<�<�AE�M�|�D��=�=�=�=�2���!���T�]�D�,=�|�T�R�R���$�,���
�D�K���X�X�XrDc��|�jt|t��st|t��stdt	|�������d|cxkrdksntd|�����|jx}std���|jpd}t|j	|j
||��}t|j||j
|j|j��S)z`Return a new URL with port replaced.

        Clear port to default if None is passed.

        Nz port should be int or None, got ri��z&port must be between 0 and 65535, got z1port replacement is not allowed for relative URLsr�)r�rtrvr�r�r�r�r\rrVrXr�r�r�r�r�)r�r^r�r�s    rE�	with_portz
URL.with_portas������$��%�%�
Q�Z��c�-B�-B�
Q�� O�4��:�:� O� O�P�P�P���&�&�&�&��&�&�&�&� �!P�$�!P�!P�Q�Q�Q��,�&��	R��P�Q�Q�Q��-�3����T�]�D�,=�|�T�R�R���$�,���
�D�K���X�X�XrD)r��
keep_query�
keep_fragmentrSrTc���|j}|s&t|��}|rd|vrt|��n|}|r|ddkrd|��}|r|jnd}|r|jnd}t|j||||��S)z$Return a new URL with path replaced.r�rr�r�)r�r&rr�r�r�r�)r�rar�rSrTr�rdrjs        rE�	with_pathz
URL.with_pathss�������	E��t�$�$�D��
E�/2�d�{�{�~�d�+�+�+����	�D��G�s�N�N��t�:�:�D�)�1����r��%2�:�4�>�>����$�,���e�X�F�F�FrDc��dSr�rCr�s  rE�
with_queryzURL.with_query�s��14�rD�kwargsc��dSr�rC�r�rYs  rErXzURL.with_query�s��<?�CrD�argsc�l�t|i|��pd}t|j|j|j||j��S)a[Return a new URL with query part replaced.

        Accepts any Mapping (e.g. dict, multidict.MultiDict instances)
        or str, autoencode the argument if needed.

        A sequence of (key, value) pairs is supported as well.

        It also can take an arbitrary number of keyword arguments.

        Clear query if None is passed.

        r�)r!r�r�r�r�r�)r�r\rYrds    rErXzURL.with_query�s@���t�.�v�.�.�4�"��"��L�$�,��
�E�4�>�
�
�	
rDc��dSr�rCr�s  rE�extend_queryzURL.extend_query����36�3rDc��dSr�rCr[s  rEr_zURL.extend_query����>A�crDc��t|i|��x}s|S|jx}r||ddkr|nd|��z
}n|}t|j|j|j||j��S)a&Return a new URL with query part combined with the existing.

        This method will not remove existing query parameters.

        Example:
        >>> url = URL('http://example.com/?a=1&b=2')
        >>> url.extend_query(a=3, c=4)
        URL('http://example.com/?a=1&b=2&a=3&c=4')
        r��&)r!r�r�r�r�r�r�)r�r\rY�	new_queryrds     rEr_zURL.extend_query�s���+�D�;�F�;�;�;�	�	��K��K��5�	�
�%��)�s�"2�"2�Y�Y��I���G�E�E��E�"��L�$�,��
�E�4�>�
�
�	
rDc��dSr�rCr�s  rEr�zURL.update_query�r`rDc��dSr�rCr[s  rEr�zURL.update_query�rbrDc���|r|rd}t|���|}n+t|��dkr	|d}ntd���|�d}�n}|s	|j}�nrt|t��rLt|j��}|�|��t|�	����}�nt|t��rZt|j��}|�t|d�����t|�	����}n�t|tttf��rd}t!|���t|t"��rKt|j��}|�|��t|�	����}nt!d	���t%|j|j|j||j��S)
aReturn a new URL with query part updated.

        This method will overwrite existing query parameters.

        Example:
        >>> url = URL('http://example.com/?a=1&b=2')
        >>> url.update_query(a=3, c=4)
        URL('http://example.com/?a=3&b=2&c=4')
        z7Either kwargs or single query parameter must be presentrrNr�TrzAInvalid query type: bytes, bytearray and memoryview are forbiddenzRInvalid query type: only str, mapping or sequence of (key, value) pairs is allowed)r�r0r�r�rrrb�updater#�itemsrurr"�bytes�	bytearray�
memoryviewr�rr�r�r�r�r�)	r�r\rYr��in_queryrd�qm�qstr�qss	         rEr�zURL.update_query�s����	X��
&�O�� ��o�o�%��H�H�
��Y�Y�!�^�^��A�w�H�H��V�W�W�W����E�E��	��K�E�E�
��'�
*�
*�	�+4�T�5G�+H�+H�B��I�I�h����8������D�D�E�E�
��#�
&�
&�	�#,�T�-?�#@�#@�D��K�K�	�(�d�C�C�C�D�D�D�/��
�
���=�=�E�E�
��5�)�Z�"@�
A�
A�	�U�C��C�.�.� �
��(�
+�
+�	�
*3�4�3E�)F�)F�B��I�I�h����/����
�
�;�;�E�E��<���
�#��L�$�,��
�E�4�>�
�
�	
rD�query_paramsc����t|��|j���z��s|S|�t	�fd�|j���D������S)z4Remove some keys from query part and return new URL.c3�.�K�|]\}}|�v�	||fV��dSr�rC)r'ro�value�params_to_removes   �rEr)z+URL.without_query_params.<locals>.<genexpr>�sC��������D�%��/�/�/��u�
�/�/�/�/��rD)�setrd�keysrXrxrj)r�rrrvs  @rE�without_query_paramszURL.without_query_params�s�����|�,�,�t�z���/@�/@�@���	��K���������#'�:�#3�#3�#5�#5����
�
�
�
�	
rDc���|�d}n3t|t��std���t|��}|j|kr|St|j|j|j|j	|��S)z�Return a new URL with fragment replaced.

        Autoencode fragment if needed.

        Clear fragment to default if None is passed.

        Nr�zInvalid fragment type)
r�rur�r$r�r�r�r�r�r�)r�rjris   rE�
with_fragmentzURL.with_fragmentsv�����L�L��H�c�*�*�	5��3�4�4�4�*�8�4�4�L��>�\�)�)��K���L�$�,��
�D�K��
�
�	
rD�rSrTc��t|t��std���d|vrtd���t	|��}|dvrtd���t|j��}|jx}r4t|��dkr|�	|��n||d<d|d	<n||d<|d	dkrd|d	<|r|j
nd}|r|jnd}t|j
|d�|��||��S)
z�Return a new URL with name (last part of path) replaced.

        Query and fragment parts are cleaned up.

        Name is encoded if needed.

        zInvalid name typer�zSlash in name is not allowed)r�z..z. and .. values are forbiddenrr�r�r)r�rur�r�r&rwrkr�r0r?r�r�r�r�r+)r�rorSrTrlr�rdrjs        rE�	with_namez
URL.with_names���$��$�$�	1��/�0�0�0��$�;�;��;�<�<�<��4� � ���;����<�=�=�=��T�^�$�$���\�!�6�		��5�z�z�Q������T�"�"�"�"� ��b�	��E�!�H�H��E�"�I��Q�x�3�����a��)�1����r��%2�:�4�>�>����$�,����������Q�Q�QrDrqc�N�t|t��std���|r|ddkr|dkrtd|�����|j}|st|�d����|j}|s||zn|dt
|���|z}|�|||���S)z�Return a new URL with suffix (file extension of name) replaced.

        Query and fragment parts are cleaned up.

        suffix is encoded if needed.
        zInvalid suffix typerr�zInvalid suffix z has an empty nameNr|)r�rur�r�rnrpr0r~)r�rqrSrTro�
old_suffixs      rE�with_suffixzURL.with_suffix?s����&�#�&�&�	3��1�2�2�2��	;�&��)�s�*�*�f��m�m��9�v�9�9�:�:�:��}���	<���:�:�:�;�;�;��_�
�$.�U�t�f�}�}�D�9K�C�
�O�O�;K�9K�4L�v�4U���~�~�d�z��~�W�W�WrD�urlc��t|��turtd���|jp|j}||jks	|tvr|S|jx}r+|tvr"t|||j|j	|j
��S|j}|jx}r|ddkr|}nZ|sd|��}nR|ddkr|�|��}n?d�g|jdd��d���|z}|ddkr
|dd�}d|vrt|��n|}n|}t||j||s|j	r|j	n|j	|s|j
r|j
n|j
��S)	u_Join URLs

        Construct a full (“absolute”) URL by combining a “base URL”
        (self) with another URL (url).

        Informally, this uses components of the base URL, in
        particular the addressing scheme, the network location and
        (part of) the path, to provide missing components in the
        relative URL.

        zurl should be URLrr�r�Nr�rr�)r�rPr�r��
USES_RELATIVEr�rr�r�r�r�r+rlr)r�r�rS�join_netloc�	orig_path�	join_pathras       rEr+zURL.joinXs�����9�9�C����/�0�0�0���,�����T�\�!�!�V�=�%@�%@��J��;�&�K�	Y�F�n�,D�,D��f�k�3�9�c�j�#�-�X�X�X��J�	��	�!�9�	���|�s�"�"� ����
$�&�9������2��#�%�%�#�0�Y�0�0����x�x� 6�$�*�S�b�S�/� 6�2� 6�7�7�)�C���Q�<�3�&�&�����8�D�+.�$�;�;�>�$�'�'�'�D�D�D��D����L��#�B�s�z�B�C�J�J�t�{�&�K�#�-�K�C�M�M�T�^�
�
�	
rD�r�c�0�|�||���S)zAReturn a new URL with the elements in other appended to the path.r�)r�)r�r�r�s   rE�joinpathzURL.joinpath�s������w��7�7�7rDc���t|jd��}t|jd��}|jx}r
d|vrd|�d�}t|jd��}t
r|�J�d�d�|j���D����}t|j	d	��}t
r|�J�t||||j��}t|j
||||��S)
z<Return decoded human readable string for URL representation.z#/:?@[]r�r�rz#?Nrdc3�K�|]9\}}d�t|d��t|d����V��:dS)z{}={}z#&+;=N)�formatr0)r'�k�vs   rEr)z!URL.human_repr.<locals>.<genexpr>�s\���� 
� 
���1�
�N�N�;�q�'�2�2�K��7�4K�4K�L�L� 
� 
� 
� 
� 
� 
rDr�)r0rWrYr[rar	r+rdrjrjrr_rr�)r�rWrYr[rarfrjr�s        rE�
human_reprzURL.human_repr�s����4�9�i�0�0���t�}�i�8�8���I��D�	�3�$�;�;��t�;�;�;�D��4�9�d�+�+���	$��#�#�#��x�x� 
� 
��
�(�(�*�*� 
� 
� 
�
�
���t�}�b�1�1���	(��'�'�'��T�8�T�4�3E�F�F���d�l�F�D�,��Q�Q�QrD�r{N)r{rP)r{rc)F)r�rPr{rP)br>r?r@�	__slots__rurLr�r
rr=rtr��classmethodrvrr�r�r�r�rkr�r�r�r�r�r�r�r�r�r�r�rxr�r�r�r�r�r��cached_propertyrrOrQr�rRrSrTrUrVrWrXrYrZr[r\r]r^r_r`rarrwrbrdrerfrgrhrirjrkrlrmrnrorprqrrrsr�rJrLrNrPrRrVrrXrr
r_r�ryr{r~r�r+r�r�rCrDrErPrP
s;�������NQ�I�
�L�L�L�
�L�L�L��J�J�J��K�K�K��N�N�N�>G�?��$(�?�?�?�
�3��U�M�9�
:�?��	?�
�d�D�j�!�?�
�
?�?�?�?�:���!%�%)��!%��$(����\�\�\��\��	\�
�C��I��\���T�	�"�
\��\��C��I��\��\��U�D�[�!�\��\��\��\�
�\�\�\��[�\�|M�M�M�W��W�W�W�W� ;�#�;�;�;�;�)�5�)�)�)�)�
�F�
�t�
�
�
�
��#�����'�F�'�t�'�'�'�'�
&�F�&�t�&�&�&�&�
'�F�'�t�'�'�'�'�
&�F�&�t�&�&�&�&�
.��.��.�.�.�.�
(�U�(�u�(�(�(�(�Q�$�Q�Q�Q�Q�8�e�K�0�8�8�8�8����X�X�X�X�	�T�	�	�	�	�;��;�;�;�;�"�����U�l�U�U�U��_�U��6�6�6��_�6� K�K�K�K��"�$�"�"�"��_�"��������_����s�����_���K�3�K�K�K��_�K��'�%��T�	�*�'�'�'��_�'��"�e�C��I�&�"�"�"��_�"��+�e�C��I�.�+�+�+��_�+��&�%��T�	�*�&�&�&��_�&��'�%��T�	�*�'�'�'��_�'��!�e�C��I�&�!�!�!��_�!��1�5��d��#3�1�1�1��_�1�*�#D��c�4�i�(8�#D�#D�#D��_�#D�J�	/�e�C��I�&�	/�	/�	/��_�	/��,�u�S�$�Y�/�,�,�,��_�,��E�#�E�E�E��_�E��X�c�X�X�X��_�X��
+�3�
+�
+�
+��_�
+��>�t�E�#�s�(�O�4�>�>�>��_�>��=�=�=��_�=���#�����_���?�c�?�?�?��_�?��Q��Q�Q�Q��_�Q��E�S�E�E�E��_�E���c�����_���B�#�B�B�B��_�B��&�5��c��?�&�&�&��_�&��@�u�S�#�X��@�@�@��_�@��T�T�T��_�T��*�#�*�*�*��_�*��'�c�'�'�'��_�'��9�C�9�9�9��_�9�
�)��)�)�)��_�)��E�e�C��H�o�E�E�E��_�E��G�%��S��/�G�G�G��_�G�->�->��->�4�->�E�->�->�->�->�^
Y�#�
Y�%�
Y�
Y�
Y�
Y�Y�e�C��I�.�Y�5�Y�Y�Y�Y�,Y�e�C��I�&6�Y�5�Y�Y�Y�Y�,Y�c�Y�e�Y�Y�Y�Y�*Y�e�C��I�.�Y�5�Y�Y�Y�Y�,� �#�
G�G�G��G��	G�
�G��
G�
�G�G�G�G�(�4��4�%�4�4�4��X�4�
�?�=�?�U�?�?�?��X�?�
��
�s�
�u�
�
�
�
�&�6�%�6�E�6�6�6��X�6�
�A�]�A�u�A�A�A��X�A�
�#�
��
��
�
�
�
�,�6�%�6�E�6�6�6��X�6�
�A�]�A�u�A�A�A��X�A�3
�#�3
��3
��3
�3
�3
�3
�j
�#�
�%�
�
�
�
�
�e�C��I�&6�
�5�
�
�
�
�2!�#�$R�$R�$R��$R��	$R�
�$R�
�
$R�$R�$R�$R�T!�#�X�X�X��X��	X�
�X�
�
X�X�X�X�22
�2
�2
�2
�h5:�8�8�8�s�8�T�8�e�8�8�8�8�R�C�R�R�R�R�R�RrD�ir
c���	tj|�d����S#t$r+|�d���d��cYSwxYw)Nr��idna)r��decoder��UnicodeError)r
s rErr�sd��2��{�3�:�:�g�.�.�/�/�/���2�2�2��z�z�'�"�"�)�)�&�1�1�1�1�1�2���s�&)�2A�Ac���	tj|d����d��S#t$r+|�d���d��cYSwxYw)NT)�uts46r�r�)r�r�r�r�)r[s rE�_idna_encoder��sk��3��{�4�t�,�,�,�3�3�G�<�<�<���3�3�3��{�{�6�"�"�)�)�'�2�2�2�2�2�3���s�(+�2A �A r�c
�~�|r�|d���sd|vrg|�d��\}}}	t|��}|j}|jdkr|r	d|�d|�d�nd|�d�S|r|�d|��n|S#t
$rYnwxYw|���r�|���}|r|t�	|��x}r`|�
��|���d}	}}|dks|dkrd||d	�vrd
}	td|�d|�d
|�d|	����d	�|St|��S)zEncode host part of URL.r�r��%�r�rr�r�NzQ, if the value includes a username or password, use 'authority' instead of 'host'zHost z cannot contain z (at position �))
r�	partitionr�
compressed�versionr��isasciirH�NOT_REG_NAME�search�group�startr�)
r[r��raw_ip�sep�zone�ip�invalidru�pos�extras
          rEr�r��s���
�5��b��!�!�#�#�5�s�d�{�{� �N�N�3�/�/����T�&
	5��F�#�#�B��=�D��z�Q���-0�A�)�4�)�)�$�)�)�)�)�k�$�k�k�k�A�'*�4�d�#�#�T�#�#�#��4���	�	�	��D�	�����|�|�~�~���z�z�|�|���
	��)<�)<�T�)B�)B�B�g�
	� '�
�
��������"��3�E���|�|�������S�T�T�
�1B�1B�8���T��T�T��T�T�s�T�T�U�T�T����
�������s�A8�8
B�Bc��t���t���t���dS)zClear all LRU caches.N)r��cache_clearrr�rCrDrEr�r��s@���������������������rDc��t���t���t���t���t���d�S)zReport cache statistics.)rHrIrrJrK)r��
cache_inforr�rCrDrEr�r��s^��$�.�.�0�0�#�.�.�0�0�"�-�-�/�/�%�0�0�2�2�#�.�.�0�0���rD)�idna_encode_size�idna_decode_size�ip_address_size�host_validate_size�encode_host_sizer�r�r�r�r�c�l�|tus	|turtjdtd���|�||fD]j}|�d}�|tur|tur|}�|turEtr.t|t��sJ�t|t��sJ�t||��}�k|turt}trt|t��rJ�t|��tj��at|��tj��a
t|��tj��adS)zConfigure LRU cache sizes.z�cache_configure() no longer accepts the ip_address_size or host_validate_size arguments, they are used to set the encode_host_size instead and will be removed in the future�)�
stacklevelN)r�r�r��DeprecationWarningr	r�rv�max�_DEFAULT_ENCODE_SIZEr�rr��__wrapped__rr�)r�r�r�r�r��sizes      rE�cache_configurer�s_���i�'�'�+=�Y�+N�+N��
�
0�
��
	
�	
�	
�	
��#�$�&8�9�
	?�
	?�D��|�#'� � �!�Y�.�.��y�(�(�'+�$���Y�&�&� �=�%�d�C�0�0�0�0�0�%�&6��<�<�<�<�<�#&�t�-=�#>�#>� ���y�(�(�3���8��.��7�7�7�7�7�.�9�-�.�.�|�/G�H�H�L�.�9�-�.�.�|�/G�H�H�L�.�9�-�.�.�|�/G�H�H�L�L�LrDr�)_�re�sysr��collections.abcrr�enumr�	functoolsrr�	ipaddressr�typingr	r
rrr
r�urllib.parserrrr��	multidictrr�
propcache.apirr��_parserrrrrrr�rrr�rrr r!r"r#�_quotersr$r%r&r'r(r)r*r+r,r-r.r/r0r��	frozensetr�r��compile�VERBOSEr�r8�version_infor;r=rBr�rGrNr~rur�r�rvr�r�r�rP�_DEFAULT_IDNA_SIZEr�rr�rtr�r�r�r�rCrDrE�<module>r�s���	�	�	�	�
�
�
�
�����-�-�-�-�-�-�-�-�������+�+�+�+�+�+�+�+� � � � � � �J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�>�>�>�>�>�>�>�>�>�>�����/�/�/�/�/�/�/�/�B�B�B�B�B�B�����������������;�:�:�:�:�:�:�:����������������������������������������������� �c��C��K�K�
��	�-�(�(�
�!�y�!F�G�G���r�z���J����
�W�T�]�]����w�����������D������D����
�$�	������	����#�#�#�#�#�	��#�#�#�#�L���r�����
�<��<��<�<�<���<�~��S��U���������������T�	�
���C��I��	�
����T�	�
�
��������������@�����$'��03��?B��
������Y�*�
+�
+�
��VR�VR�VR�VR�VR�VR�VR���VR�r$���������2�c�2�c�2�2�2���2������3�s�3�s�3�3�3���3���� � �6�s�6�4�6�C�6�6�6�!� �6�r���������I��������*<�);�7@�:C�8A�
)I�)I�)I��C��I�&�)I��C��I�&�)I��3��m�3�4�	)I�
�c�4��6�7�)I��C��}�4�5�
)I�
�)I�)I�)I���)I�)I�)IrD