Ë
    £2ÚiV  ã                  ó®   — d dl mZ d dlZd dlmZ ddlmZ ddlm	Z	 ddl
mZ dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd	„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
„Z	 	 d	 	 	 	 	 dd„Zy)é    )ÚannotationsN)Úquoteé   )Ú
_plain_int)ÚSecurityError)Ú
uri_to_iric                óº  — | sy	 | j                  d«      d   j                  d«      j                  d«      } t	        |t
        «      r|g}|D ]n  }|j                  d«      r|dd }d	}nd}	 |j                  d«      d   j                  d«      j                  d«      }|| k(  s|sŒY| j                  d|› �«      sŒn y	 y# t        $ r Y yw xY w# t        $ r Y  yw xY w)
zôCheck if a host matches a list of trusted names.

    :param hostname: The name to check.
    :param trusted_list: A list of valid names to match. If a name
        starts with a dot it will match all subdomains.

    .. versionadded:: 0.9
    Fú:r   ÚidnaÚasciiú.é   NT)Ú	partitionÚencodeÚdecodeÚUnicodeEncodeErrorÚ
isinstanceÚstrÚ
startswithÚendswith)ÚhostnameÚtrusted_listÚrefÚsuffix_matchs       úL/var/www/html/acx/venv/lib/python3.12/site-packages/werkzeug/sansio/utils.pyÚhost_is_trustedr      sø   € ñ ØðØ×%Ñ% cÓ*¨1Ñ-×4Ñ4°VÓ<×CÑCÀGÓLˆô �,¤Ô$Ø$�~ˆàò ˆØ�>‰>˜#ÔØ�a�b�'ˆCØ‰Là ˆLð	Ø—-‘- Ó$ QÑ'×.Ñ.¨vÓ6×=Ñ=¸gÓFˆCð �(Š?š|°×0AÑ0AÀAÀcÀUÀ)Õ0LÙðð øô+ ò Ùðûô "ò 	Úð	ús#   …2B> Á+2CÂ>	C
Ã	C
Ã	CÃCc                óä   — d}|�|}n|�|d   }|d   �
|› d|d   › �}| dv r|j                  d«      r|dd }n| d	v r|j                  d
«      r|dd }|�t        ||«      st        d|›d�«      ‚|S )a$  Return the host for the given parameters.

    This first checks the ``host_header``. If it's not present, then
    ``server`` is used. The host will only contain the port if it is
    different than the standard port for the protocol.

    Optionally, verify that the host is trusted using
    :func:`host_is_trusted` and raise a
    :exc:`~werkzeug.exceptions.SecurityError` if it is not.

    :param scheme: The protocol the request used, like ``"https"``.
    :param host_header: The ``Host`` header value.
    :param server: Address of the server. ``(host, port)``, or
        ``(path, None)`` for unix sockets.
    :param trusted_hosts: A list of trusted host names.

    :return: Host, with port if necessary.
    :raise ~werkzeug.exceptions.SecurityError: If the host is not
        trusted.
    Ú Nr   r   r
   >   ÚwsÚhttpz:80éýÿÿÿ>   ÚwssÚhttpsz:443éüÿÿÿzHost z is not trusted.)r   r   r   )ÚschemeÚhost_headerÚserverÚtrusted_hostsÚhosts        r   Úget_hostr*   1   s¨   € ð4 €DàÐØ‰Ø	Ð	Ø�a‰yˆà�!‰9Ð Ø�V˜1˜V A™Y˜KÐ(ˆDà�Ñ D§M¡M°%Ô$8Ø�C�Rˆy‰Ø	Ð#Ñ	#¨¯©°fÔ(=Ø�C�RˆyˆàÐ Ü˜t ]Ô3Ü %¨ xÐ/?Ð @ÓAÐAà€Kó    c                óþ  — | d|g}|€+|j                  d«       t        dj                  |«      «      S |j                  t        |j	                  d«      d¬«      «       |j                  d«       |€t        dj                  |«      «      S |j                  t        |j                  d«      d¬«      «       |r-|j                  d«       |j                  t        |d¬«      «       t        dj                  |«      «      S )aƒ  Recreate the URL for a request. If an optional part isn't
    provided, it and subsequent parts are not included in the URL.

    The URL is an IRI, not a URI, so it may contain Unicode characters.
    Use :func:`~werkzeug.urls.iri_to_uri` to convert it to ASCII.

    :param scheme: The protocol the request used, like ``"https"``.
    :param host: The host the request was made to. See :func:`get_host`.
    :param root_path: Prefix that the application is mounted under. This
        is prepended to ``path``.
    :param path: The path part of the URL after ``root_path``.
    :param query_string: The portion of the URL after the "?".
    z://ú/r   z!$&'()*+,/:;=@%)Úsafeú?z!$&'()*+,/:;=?@%)Úappendr   Újoinr   ÚrstripÚlstrip)r%   r)   Ú	root_pathÚpathÚquery_stringÚurls         r   Úget_current_urlr8   a   sÊ   € ð( �5˜$Ð
€CàÐØ�
‰
�3ŒÜ˜"Ÿ'™' #›,Ó'Ð'ð ‡J�JŒu�Y×%Ñ% cÓ*Ð1BÔCÔDØ‡J�Jˆs„Oà€|Ü˜"Ÿ'™' #›,Ó'Ð'à‡J�JŒu�T—[‘[ Ó%Ð,=Ô>Ô?áØ�
‰
�3ŒØ�
‰
”5˜Ð,>Ô?Ô@ä�b—g‘g˜c“lÓ#Ð#r+   c                ó\   — |dk(  s| €y	 t        dt        | «      «      S # t        $ r Y yw xY w)a¥  Return the ``Content-Length`` header value as an int. If the header is not given
    or the ``Transfer-Encoding`` header is ``chunked``, ``None`` is returned to indicate
    a streaming request. If the value is not an integer, or negative, 0 is returned.

    :param http_content_length: The Content-Length HTTP header.
    :param http_transfer_encoding: The Transfer-Encoding HTTP header.

    .. versionadded:: 2.2
    ÚchunkedNr   )Úmaxr   Ú
ValueError)Úhttp_content_lengthÚhttp_transfer_encodings     r   Úget_content_lengthr?   Œ   s?   € ð  Ò*Ð.AÐ.IØðÜ�1”jÐ!4Ó5Ó6Ð6øÜò Ùðús   Š Ÿ	+ª+)r   r   r   zt.Iterable[str]ÚreturnÚbool)NN)
r%   r   r&   ú
str | Noner'   ztuple[str, int | None] | Noner(   zt.Iterable[str] | Noner@   r   )NNN)r%   r   r)   r   r4   rB   r5   rB   r6   zbytes | Noner@   r   )r=   rB   r>   rB   r@   z
int | None)Ú
__future__r   ÚtypingÚtÚurllib.parser   Ú	_internalr   Ú
exceptionsr   Úurlsr   r   r*   r8   r?   © r+   r   ú<module>rK      sÉ   ðÝ "ã Ý å "Ý &Ý ó#ðR -1Ø,0ð	-Øð-àð-ð *ð-ð *ð	-ð
 	ó-ðf !ØØ!%ð($Øð($à
ð($ð ð($ð ð	($ð
 ð($ð 	ó($ðX '+Ø)-ðØ#ðà&ðð ôr+   