Ë
    ,Œ:j‰A  ã            
       óÒ  — d Z ddlZddlZddlZddlZddlmZ dZdZdZ	 ej                  d«      Z ej                  d	j                  d
dddd¬«      «      Z ej                  dj                  ddd¬«      «      Z ej                  d
«       ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«      dœZ ej                  d«      Z ej                  d«      Z G d„ dej$                  «      Zd/dedej*                  e   defd„Zdedefd„Zdej*                  ej0                  eef      d edej*                  e   fd!„Zd"ed#ed$eddfd%„Zd"edefd&„Zd'edefd(„Zd0d)ed*edefd+„Zd0d)ed*edefd,„Z d-ejB                  ejD                  eef      defd.„Z#y)1aï  
An implementation of `urlparse` that provides URL validation and normalization
as described by RFC3986.

We rely on this implementation rather than the one in Python's stdlib, because:

* It provides more complete URL validation.
* It properly differentiates between an empty querystring and an absent querystring,
  to distinguish URLs with a trailing '?'.
* It handles scheme, hostname, port, and path normalization.
* It supports IDNA hostnames, normalizing them to their encoded form.
* The API supports passing individual components, as well as the complete URL string.

Previously we relied on the excellent `rfc3986` package to handle URL parsing and
validation, but this module provides a simpler alternative, with less indirection
required.
é    Né   )Ú
InvalidURLi   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z!$&'()*+,;=z%[A-Fa-f0-9]{2}z‚(?:(?P<scheme>{scheme}):)?(?://(?P<authority>{authority}))?(?P<path>{path})(?:\?(?P<query>{query}))?(?:#(?P<fragment>{fragment}))?z([a-zA-Z][a-zA-Z0-9+.-]*)?z[^/?#]*z[^?#]*z[^#]*z.*©ÚschemeÚ	authorityÚpathÚqueryÚfragmentzA(?:(?P<userinfo>{userinfo})@)?(?P<host>{host}):?(?P<port>{port})?z[^@]*z(\[.*\]|[^:]*))ÚuserinfoÚhostÚport)r   r   r   r	   r
   r   r   r   z ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$z^\[.*\]$c                   ó  — e Zd ZU eed<   eed<   eed<   ej                  e   ed<   eed<   ej                  e   ed<   ej                  e   ed<   edefd	„«       Z	edefd
„«       Z
dej                  e   dd fd„Zdefd„Zy)ÚParseResultr   r   r   r   r   r	   r
   Úreturnc                 óð   — dj                  | j                  r| j                  › d�ndd| j                  v rd| j                  › d�n| j                  | j                  �d| j                  › �g«      S dg«      S )NÚ ú@ú:ú[ú])Újoinr   r   r   ©Úselfs    úQ/var/www/html/tokenscope/api/venv/lib/python3.12/site-packages/httpx/_urlparse.pyr   zParseResult.authorityg   sz   € à�w‰wà'+§}¢}�4—=‘=�/ Ñ#¸"Ø$'¨4¯9©9Ñ$4�!�D—I‘I�;˜aÑ ¸$¿)¹)Ø#'§9¡9Ð#8�!�D—I‘I�;�ðó
ð 	
ð ?Aðó
ð 	
ó    c                 ó¸   — dj                  d| j                  v rd| j                  › d�n| j                  | j                  �d| j                  › �g«      S dg«      S )Nr   r   r   r   )r   r   r   r   s    r   ÚnetloczParseResult.netlocq   sd   € à�w‰wà$'¨4¯9©9Ñ$4�!�D—I‘I�;˜aÑ ¸$¿)¹)Ø#'§9¡9Ð#8�!�D—I‘I�;�ðó
ð 	
ð ?Aðó
ð 	
r   Úkwargsc                 ó¶   — |s| S | j                   | j                  | j                  | j                  | j                  dœ}|j                  |«       t        di |¤ŽS )Nr   ©r   )r   r   r   r	   r
   ÚupdateÚurlparse)r   r   Údefaultss      r   Ú	copy_withzParseResult.copy_withz   sR   € ÙØˆKð —k‘kØŸ™Ø—I‘IØ—Z‘ZØŸ™ñ
ˆð 	�‰˜ÔÜÑ'˜hÑ'Ð'r   c                 ó  — | j                   }dj                  | j                  r| j                  › d�nd|rd|› �nd| j                  | j                  �d| j                  › �nd| j
                  �d| j
                  › �g«      S dg«      S )Nr   r   ú//ú?ú#)r   r   r   r   r	   r
   )r   r   s     r   Ú__str__zParseResult.__str__ˆ   s’   € Ø—N‘Nˆ	Ø�w‰wà%)§[¢[�4—;‘;�-˜qÑ!°bÙ$-�"�Y�KÑ °2Ø—	‘	Ø$(§J¡JÐ$:�!�D—J‘J�<Ñ ÀØ'+§}¡}Ð'@�!�D—M‘M�?Ð#ðó
ð 	
ð GIðó
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__ÚtypingÚOptionalÚintÚpropertyr   r   r$   r)   © r   r   r   r   ^   sŸ   … ØƒKØƒMØ
ƒIØ
�/‰/˜#Ñ
ÓØ
ƒIØ�?‰?˜3ÑÓØ�o‰o˜cÑ"Ó"àð
˜3ò 
ó ð
ð ð
˜ò 
ó ð
ð( &§/¡/°#Ñ"6ð (¸=ó (ð

˜ô 

r   r   Úurlr   r   c           	      ó†  — t        | «      t        kD  rt        d«      ‚t        d„ | D «       «      rt        d«      ‚d|v r%|d   }t	        |t
        «      rt        |«      n||d<   d|v r0|j                  d«      xs d}|j                  d«      \  |d<   }|d<   d	|v sd
|v rLt        |j                  d	d«      xs d«      }t        |j                  d
d«      xs d«      }|r|› d|› �n||d<   d|v r7|j                  d«      xs d}|j                  d«      \  |d<   }|d<   |sd |d<   d|v rD|j                  d«      xs d}	d|	v r+|	j                  d«      r|	j                  d«      s	d|	› d�|d<   |j                  «       D ]q  \  }
}|€Œ	t        |«      t        kD  rt        d|
› d�«      ‚t        d„ |D «       «      rt        d|
› d�«      ‚t        |
   j                  |«      rŒdt        d|
› d�«      ‚ t         j#                  | «      }|€J ‚|j%                  «       }|j                  d|d   «      xs d}|j                  d|d   «      xs d}|j                  d|d   «      xs d}|j                  d|d   «      }|j                  d|d   «      }t&        j#                  |«      }|€J ‚|j%                  «       }|j                  d|d   «      xs d}|j                  d|d   «      xs d}	|j                  d|d   «      }|j)                  «       }t        |t*        dz   ¬«      }t-        |	«      }t/        ||«      }|dk7  }|dk7  xs |dk7  xs |d u}t1        |||¬«       |rt3        |«      }t        |t*        dz   ¬«      }|€d nt        |t*        dz   ¬«      }|€d nt        |t*        dz   ¬«      }t5        |||||||«      S ) NzURL too longc              3   ób   K  — | ]'  }|j                  «       xr |j                  «        –— Œ) y ­w©N©ÚisasciiÚisprintable©Ú.0Úchars     r   ú	<genexpr>zurlparse.<locals>.<genexpr>Ÿ   s*   è ø€ Ò
E¸ˆ4�<‰<‹>Ò4 $×"2Ñ"2Ó"4Ð4Ó4Ñ
Eùó   ‚-/z,Invalid non-printable ASCII character in URLr   r   r   r   r   ÚusernameÚpasswordr   Úraw_pathr'   r   r	   r   r   zURL component 'z
' too longc              3   ób   K  — | ]'  }|j                  «       xr |j                  «        –— Œ) y ­wr7   r8   r;   s     r   r>   zurlparse.<locals>.<genexpr>Ì   s*   è ø€ ÒOÀ�4—<‘<“>Ò<¨$×*:Ñ*:Ó*<Ð&<Ó<ÑOùr?   z8Invalid non-printable ASCII character in URL component 'ú'zInvalid URL component 'r   r   r
   ©Úsafe)Ú
has_schemeÚhas_authorityz:/[]@z:?[]@z:/?#[]@)ÚlenÚMAX_URL_LENGTHr   ÚanyÚ
isinstancer1   r-   ÚpopÚ	partitionÚquoteÚgetÚ
startswithÚendswithÚitemsÚCOMPONENT_REGEXÚ	fullmatchÚ	URL_REGEXÚmatchÚ	groupdictÚAUTHORITY_REGEXÚlowerÚ
SUB_DELIMSÚencode_hostÚnormalize_portÚvalidate_pathÚnormalize_pathr   )r4   r   r   r   Ú_r@   rA   rB   Ú	seperatorr   ÚkeyÚvalueÚ	url_matchÚurl_dictr   r   r   r	   r
   Úauthority_matchÚauthority_dictr   Úparsed_schemeÚparsed_userinfoÚparsed_hostÚparsed_portrG   rH   Úparsed_pathÚparsed_queryÚparsed_fragments                                  r   r"   r"   •   s+  € ô
 ˆ3ƒx”.Ò Ü˜Ó(Ð(ô Ñ
EÀÔ
EÔEÜÐGÓHÐHð �ÑØ�f‰~ˆÜ&0°´sÔ&;œ˜TœÀˆˆv‰ð �6ÑØ—‘˜HÓ%Ò+¨ˆØ,2×,<Ñ,<¸SÓ,AÑ)ˆˆv‰˜˜6 &™>ð �VÑ˜z¨VÑ3Ü˜Ÿ™ J°Ó3Ò9°rÓ:ˆÜ˜Ÿ™ J°Ó3Ò9°rÓ:ˆÙ9A ˜z¨¨8¨*Ñ5ÀxˆˆzÑð �VÑØ—:‘:˜jÓ)Ò/¨RˆØ5=×5GÑ5GÈÓ5LÑ2ˆˆv‰˜	 6¨'¡?ÙØ"ˆF�7‰Oð �ÑØ�z‰z˜&Ó!Ò' RˆØ�$‰; §¡°Ô 4¸¿¹ÀsÔ9KØ    a˜[ˆF�6‰Nð
 —l‘l“nò C‰
ˆˆUØÑÜ�5‹zœNÒ*Ü  ?°3°%°zÐ!BÓCÐCô ÑOÈÔOÔOÜ ØNÈsÈeÐSTÐUóð ô
 # 3Ñ'×1Ñ1°%Õ8Ü Ð#:¸3¸%¸qÐ!AÓBÐBðCô" —‘ Ó$€IØÐ Ð Ð Ø×"Ñ"Ó$€Hð �Z‰Z˜ (¨8Ñ"4Ó5Ò;¸€FØ—
‘
˜;¨°Ñ(=Ó>ÒDÀ"€IØ�:‰:�f˜h vÑ.Ó/Ò5°2€DØ�J‰J�w ¨Ñ 1Ó2€EØ�z‰z˜* h¨zÑ&:Ó;€Hô &×+Ñ+¨IÓ6€OØÐ&Ð&Ð&Ø$×.Ñ.Ó0€Nð �z‰z˜* n°ZÑ&@ÓAÒGÀR€HØ�:‰:�f˜n¨VÑ4Ó5Ò;¸€DØ�:‰:�f˜n¨VÑ4Ó5€Dð
  Ÿ™›€MÜ  ´
¸SÑ0@ÔA€OÜ" 4Ó(€KÜ(6°t¸VÓ(D€Kà "Ñ$€Jà˜2ÑÒM °Ñ!2ÒM°kÈÐ6Mð ô �$ :¸]ÕKÙÜ˜dÓ#ˆô ˜T¬
°WÑ(<Ô=€Kð
 �‰¤5¨´ZÀ'Ñ5IÔ#Jð ð
 Ð ‰¤e¨H¼:È	Ñ;QÔ&Rð ô ØØØØØØØóð r   r   c                 ój  — | syt         j                  | «      r	 t        j                  | «       | S t        j                  | «      r	 t        j                  | dd «       | dd S | j                  «       rt        | j                  «       t        ¬«      S 	 t        j                  | j                  «       «      j                  d«      S # t        j                  $ r t        d| ›�«      ‚w xY w# t        j                  $ r t        d| ›�«      ‚w xY w# t        j                  $ r t        d| ›�«      ‚w xY w)	Nr   zInvalid IPv4 address: r   éÿÿÿÿzInvalid IPv6 address: rE   ÚasciizInvalid IDNA hostname: )ÚIPv4_STYLE_HOSTNAMErW   Ú	ipaddressÚIPv4AddressÚAddressValueErrorr   ÚIPv6_STYLE_HOSTNAMEÚIPv6Addressr9   rO   rZ   r[   ÚidnaÚencodeÚdecodeÚ	IDNAError)r   s    r   r\   r\     s(  € ÙØä	×	"Ñ	" 4Ô	(ð	@Ü×!Ñ! $Ô'ð ˆä	×	"Ñ	" 4Ô	(ð	@Ü×!Ñ! $ q¨ *Ô-ð �A�bˆzÐà	�‰Œô �T—Z‘Z“\¬
Ô3Ð3ð=Ü�{‰{˜4Ÿ:™:›<Ó(×/Ñ/°Ó8Ð8øô; ×*Ñ*ò 	@ÜÐ5°d°XÐ>Ó?Ð?ð	@ûô ×*Ñ*ò 	@ÜÐ5°d°XÐ>Ó?Ð?ð	@ûô �>‰>ò =ÜÐ2°4°(Ð;Ó<Ð<ð=ús#   šC ÁC+ Â1D Ã"C(Ã+"DÄ"D2r   r   c                 óž   — | �| dk(  ry 	 t        | «      }ddddddœj                  |«      }||k(  ry |S # t        $ r t        d| ›�«      ‚w xY w)Nr   zInvalid port: é   éP   i»  )ÚftpÚhttpÚhttpsÚwsÚwss)r1   Ú
ValueErrorr   rP   )r   r   Úport_as_intÚdefault_ports       r   r]   r]   L  sv   € ð €|�t˜r’zØð4Ü˜$“iˆð
  r°C¸rÈ#ÑN×RÑRØó€Lð �lÒ"ØØÐøô ò 4Ü˜>¨$¨Ð2Ó3Ð3ð4ús	   Š4 ´Ar   rG   rH   c                 ó¾   — |r | r| j                  d«      st        d«      ‚yy| j                  d«      rt        d«      ‚| j                  d«      r|st        d«      ‚yy)z«
    Path validation rules that depend on if the URL contains a scheme or authority component.

    See https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.3
    ú/z7For absolute URLs, path must be empty or begin with '/'r&   zFURLs with no authority component cannot have a path starting with '//'r   zBURLs with no scheme component cannot have a path starting with ':'N)rQ   r   )r   rG   rH   s      r   r^   r^   i  sp   € ñ ñ ˜Ÿ™¨Ô,ÜÐVÓWÐWð -ˆ4ð
 �?‰?˜4Ô ÜØXóð ð
 �?‰?˜3Ô©
ÜØTóð ð )3Ðr   c                 óÆ   — | j                  d«      }g }|D ]9  }|dk(  rŒ	|dk(  r|sŒ|dgk7  sŒ|j                  «        Œ)|j                  |«       Œ; dj                  |«      S )zˆ
    Drop "." and ".." segments from a URL path.

    For example:

        normalize_path("/path/./to/somewhere/..") == "/path/to"
    rˆ   ú.z..r   )ÚsplitrM   Úappendr   )r   Ú
componentsÚoutputÚ	components       r   r_   r_   ƒ  si   € ð —‘˜C“€JØ!€FØò %ˆ	Ø˜ÒØØ˜$ÒÚ˜& R D›.Ø—
‘
•à�M‰M˜)Õ$ð%ð �8‰8�FÓÐr   r=   c                 óŒ   — dj                  | j                  d«      D �cg c]  }d|d›�‘Œ
 c}«      j                  «       S c c}w )a  
    Replace a single character with the percent-encoded representation.

    Characters outside the ASCII range are represented with their a percent-encoded
    representation of their UTF-8 byte sequence.

    For example:

        percent_encode(" ") == "%20"
    r   zutf-8ú%Ú02x)r   ry   Úupper)r=   Úbytes     r   Úpercent_encoder•   ™  s;   € ð �7‰7¨t¯{©{¸7Ó/CÖD t�a˜˜S�z’NÒDÓE×KÑKÓMÐMùÒDs   ŸAÚstringrF   c                 ó”   — t         |z   dz   }| D ]  }||vsŒ y | j                  d«      t        t        j	                  | «      «      k(  S )z<
    Determine if a given string is already quote-safe.
    r‘   F)ÚUNRESERVED_CHARACTERSÚcountrI   ÚPERCENT_ENCODED_REGEXÚfindall©r–   rF   ÚNON_ESCAPED_CHARSr=   s       r   Úis_saferž   §  sX   € ô .°Ñ4°sÑ:Ðð ò ˆØÐ(Ò(Ùðð
 �<‰<˜Ó¤Ô$9×$AÑ$AÀ&Ó$IÓ JÑJÐJr   c                 ó˜   — t        | |¬«      r| S t        |z   }dj                  | D �cg c]  }||v r|n
t        |«      ‘Œ c}«      S c c}w )z=
    Use percent-encoding to quote a string if required.
    rE   r   )rž   r˜   r   r•   rœ   s       r   rO   rO   ¶  sR   € ô ˆv˜DÕ!Øˆä-°Ñ4ÐØ�7‰7ØQWÖXÈ�Ð*Ñ*‰´¸tÓ0DÑ	DÒXóð ùÚXs   ¨ArS   c                 óŽ   — dj                  | D ��cg c]#  \  }}t        |d¬«      dz   t        |d¬«      z   ‘Œ% c}}«      S c c}}w )Nú&r   rE   ú=)r   rO   )rS   ÚkÚvs      r   Ú	urlencoder¥   Ã  s=   € ð �8‰8ÈU×SÁTÀQÈ”U˜1 2Ô&¨Ñ,¬u°Q¸RÔ/@Ó@ÓSÓTÐTùÓSs   ‘(A
r    )rˆ   )$Ú__doc__rs   Úrer/   rx   Ú_exceptionsr   rJ   r˜   r[   Úcompilerš   ÚformatrV   rY   rT   rr   rv   Ú
NamedTupler   r-   r0   r"   r\   ÚUnionr1   r]   Úboolr^   r_   r•   rž   rO   ÚListÚTupler¥   r3   r   r   ú<module>r°      s�  ðñó" Û 	Û ã å #à€ð Ið ð €
à"˜Ÿ
™
Ð#4Ó5Ð ð ˆB�J‰Jð	*÷
 �fØ+ØØØØð ó ó€	ð& �"—*‘*àTß�fØØàð	 ó ó	€ð  ˆb�j‰jÐ5Ó6Ø�—‘˜IÓ&ØˆB�J‰J�xÓ ØˆR�Z‰Z˜Ó Ø�—
‘
˜4Ó Ø�—
‘
˜7Ó#ØˆB�J‰JÐ)Ó*ØˆB�J‰J�tÓñ	€ð !�b—j‘jÐ!DÓEÐ Ø �b—j‘j Ó-Ð ô4
�&×#Ñ#ô 4
ñnF�#ð F f§o¡o°cÑ&:ð F¸{ó FðR+=�cð +=˜có +=ð\Ø
�/‰/˜&Ÿ,™, s¨C xÑ0Ñ
1ðØ;>ðà‡_�_�SÑóð:˜ð ¨ð ¸dð Àtó ð4˜ð  ó ð,N˜ð N ó NñK�Cð K˜sð K¨Tó Kñ
�#ð 
˜Sð 
¨3ó 
ðU�V—[‘[ §¡¨c°3¨hÑ!7Ñ8ð U¸Sô Ur   