§
    bÒ³gSƒ  ã                   óf  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZ dd	lmZmZmZmZmZmZ dd
lm Z! ddlm"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z-m.Z.m/Z/ ddl0m1Z1 dZ2 ej3        ¦   «         Z4dddœZ5d 6                     ej7        d ed¬¦  «        d         ¦  «        ¦  «        Z8ej9        dk    rd„ Z:d„ Z"d„ Z;d„ Z<dJd„Z=d„ Z>d „ Z?ej@        d!„ ¦   «         ZAd"„ ZBd#„ ZCd$„ ZDd%„ ZEdJd&„ZFd'„ ZGd(„ ZHd)„ ZId*„ ZJd+„ ZKd,„ ZLd-„ ZMd.„ ZN eOd/¦  «        ZPd0„ ZQd1„ ZRd2„ ZSd3„ ZTd4„ ZUd5„ ZVej@        d6„ ¦   «         ZWd7„ ZXdKd8„ZYd9„ ZZdLd:„Z[dMd<„Z\d=„ Z]d>„ Z^d? _                    d@¦  «        Z`e`dAz  Zae`dBz  ZbdC„ ZcdD„ ZddE„ ZedF„ ZfdG„ ZgdH„ ZhdI„ ZidS )Nz”
requests.utils
~~~~~~~~~~~~~~

This module provides utility functions that are used within Requests
that are also useful for external consumption.
é    N)ÚOrderedDict)Úmake_headersÚ	parse_urlé   )Úcerts©Ú__version__)Ú_HEADER_VALIDATORS_BYTEÚ_HEADER_VALIDATORS_STRÚHEADER_VALIDATORSÚto_native_string)ÚMappingÚ
basestringÚbytesÚ
getproxiesÚgetproxies_environmentÚinteger_types)Úparse_http_list)Úproxy_bypassÚproxy_bypass_environmentÚquoteÚstrÚunquoteÚurlparseÚ
urlunparse©Úcookiejar_from_dict)ÚFileModeWarningÚInvalidHeaderÚ
InvalidURLÚUnrewindableBodyError)ÚCaseInsensitiveDict)z.netrcÚ_netrcéP   i»  )ÚhttpÚhttpsz, z,\s*T)Úaccept_encodingzaccept-encodingÚwin32c                 ól  — 	 dd l }n# t          $ r Y dS w xY w	 |                     |j        d¦  «        }t	          |                     |d¦  «        d         ¦  «        }|                     |d¦  «        d         }n# t          t          f$ r Y dS w xY w|r|sdS |                     d¦  «        }t          d |¦  «        }|D ]t}|dk    rd| vr d	S | 
                    dd
¦  «        }| 
                    dd¦  «        }| 
                    dd¦  «        }t          j        || t          j        ¦  «        r d	S ŒudS )Nr   Fz;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚProxyEnableÚProxyOverrideú;z<local>ú.Tz\.Ú*z.*ú?)ÚwinregÚImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚintÚQueryValueExÚOSErrorÚ
ValueErrorÚsplitÚfilterÚreplaceÚreÚmatchÚI)Úhostr0   ÚinternetSettingsÚproxyEnableÚproxyOverrideÚtests         úL/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/requests/utils.pyÚproxy_bypass_registryrD   L   s…  € ð	ØˆMˆMˆMˆMøÝð 	ð 	ð 	Ø�5�5ð	øøøð
	Ø%Ÿ~š~ØÔ(ØNñ ô  Ðõ
 ˜f×1Ò1Ð2BÀMÑRÔRÐSTÔUÑVÔVˆKà"×/Ò/Ð0@À/ÑRÔRÐSTÔUˆMˆMøÝ�Ð$ð 	ð 	ð 	Ø�5�5ð	øøøàð 	 -ð 	Ø�5ð
 &×+Ò+¨CÑ0Ô0ˆå˜t ]Ñ3Ô3ˆà!ð 	ð 	ˆDØ�yÒ Ð Ø˜d�?�?Ø˜4˜4Ø—<’<  UÑ+Ô+ˆDØ—<’<  UÑ+Ô+ˆDØ—<’<  TÑ*Ô*ˆDÝŒx˜˜d¥B¤DÑ)Ô)ð Ø�t�tðàˆus   ‚ ‡
”™A A: Á:BÂBc                 óZ   — t          ¦   «         rt          | ¦  «        S t          | ¦  «        S )zšReturn True, if the host should be bypassed.

        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        )r   r   rD   )r>   s    rC   r   r   r   s.   € õ "Ñ#Ô#ð 	/Ý+¨DÑ1Ô1Ð1å(¨Ñ.Ô.Ð.ó    c                 óN   — t          | d¦  «        r|                      ¦   «         } | S )z/Returns an internal sequence dictionary update.Úitems)ÚhasattrrH   )Úds    rC   Údict_to_sequencerK   ~   s(   € õ ˆq�'ÑÔð Ø�GŠG‰IŒIˆà€HrF   c                 ó:  — d }d}t          | t          ¦  «        r|                      d¦  «        } t          | d¦  «        rt	          | ¦  «        }n–t          | d¦  «        r| j        }n~t          | d¦  «        rn	 |                      ¦   «         }t          j        |¦  «        j        }d| j	        vrt          j        dt          ¦  «         n# t          j        t          f$ r Y nw xY wt          | d¦  «        r‘	 |                      ¦   «         }t          | d	¦  «        rW|€U	 |                      dd
¦  «         |                      ¦   «         }|                      |pd¦  «         n'# t$          $ r d}Y nw xY wn# t$          $ r |�|}Y nw xY w|€d}t'          d||z
  ¦  «        S )Nr   úutf-8Ú__len__ÚlenÚfilenoÚba%  Requests has determined the content-length for this request using the binary size of the file: however, the file has been opened in text mode (i.e. without the 'b' flag in the mode). This may lead to an incorrect content-length. In Requests 3.0, support will be removed for files in text mode.ÚtellÚseeké   )Ú
isinstancer   ÚencoderI   rO   rP   ÚosÚfstatÚst_sizeÚmodeÚwarningsÚwarnr   ÚioÚUnsupportedOperationÚAttributeErrorrR   rS   r6   Úmax)ÚoÚtotal_lengthÚcurrent_positionrP   s       rC   Ú	super_lenrd   ‡   sñ  € Ø€LØÐå�!•SÑÔð Ø�HŠH�WÑÔˆåˆq�)ÑÔð Ý˜1‘v”vˆˆå	��EÑ	Ô	ð Ø”uˆˆå	��HÑ	Ô	ð ð	Ø—X’X‘Z”ZˆFõ œ8 FÑ+Ô+Ô3ˆLð ˜!œ&Ð Ð Ý”ð2õ $ñ
ô 
ð 
øøõ Ô'­Ð8ð 	ð 	ð 	ð ˆDð		øøøõ. ˆq�&ÑÔð %ð	%Ø Ÿvšv™xœxÐõ �q˜&Ñ!Ô!ð % lÐ&:ð	%à—F’F˜1˜a‘L”L�LØ#$§6¢6¡8¤8�Lð —F’FÐ+Ð0¨qÑ1Ô1Ð1Ð1øÝð %ð %ð %Ø#$�L�L�Lð%øøøøøõ% ð 	0ð 	0ð 	0ð
 Ð'Ø#/Ð øøð	0øøøð* ÐØˆåˆq�,Ð!1Ñ1Ñ2Ô2Ð2s7   Á8C	 Ã	C"Ã!C"Ã6E2 ÄAE ÅE.Å-E.Å2FÆFFc                 óÒ  — t           j                             d¦  «        }|�|f}nd„ t          D ¦   «         }	 ddlm}m} d}|D ]X}	 t           j                             |¦  «        }n# t          $ r Y  dS w xY wt           j         	                    |¦  «        r|} nŒY|€dS t          | ¦  «        }	d}
t          | t          ¦  «        r|
                     d¦  «        }
|	j                             |
¦  «        d         }	  ||¦  «                             |¦  «        }|r|d         rdnd}||         |d	         fS dS # |t"          f$ r |r‚ Y dS w xY w# t$          t&          f$ r Y dS w xY w)
z;Returns the Requests tuple auth for a given url from netrc.ÚNETRCNc              3   ó    K  — | ]	}d |› �V — Œ
dS )z~/N© )Ú.0Úfs     rC   ú	<genexpr>z!get_netrc_auth.<locals>.<genexpr>Ó   s(   è è € Ð9Ð9¨˜8 ˜8˜8Ð9Ð9Ð9Ð9Ð9Ð9rF   r   )ÚNetrcParseErrorÚnetrcó   :Úasciir   rT   )rW   ÚenvironÚgetÚNETRC_FILESrm   rl   ÚpathÚ
expanduserÚKeyErrorÚexistsr   rU   r   ÚdecodeÚnetlocr8   Úauthenticatorsr6   r1   r_   )ÚurlÚraise_errorsÚ
netrc_fileÚnetrc_locationsrl   rm   Ú
netrc_pathrj   ÚlocÚriÚsplitstrr>   r#   Úlogin_is                 rC   Úget_netrc_authrƒ   Ì   sí  € õ ”—’ Ñ(Ô(€JØÐØ%˜-ˆˆà9Ð9­[Ð9Ñ9Ô9ˆð-Ø0Ð0Ð0Ð0Ð0Ð0Ð0Ð0àˆ
à ð 	ð 	ˆAðÝ”g×(Ò(¨Ñ+Ô+��øÝð ð ð ð ���ð	øøøõ Œw�~Š~˜cÑ"Ô"ð Ø �
Ø�ðð
 ÐØˆFå�c‰]Œ]ˆð ˆÝ�c�3ÑÔð 	0Ø—’ wÑ/Ô/ˆHØŒy�Š˜xÑ(Ô(¨Ô+ˆð
	Ø�U˜:Ñ&Ô&×5Ò5°dÑ;Ô;ˆFØð 4à% aœyÐ/˜!˜!¨a�Ø˜wœ¨°¬Ð3Ð3ð4ð 4øð  ¥Ð)ð 	ð 	ð 	ð ð Øðð ð ð	øøøøõ �Ð(ð ð ð ØˆˆðøøøsZ   ¸E ÁA'Á&E Á'
A6Á1E Á5A6Á6)E Â!AE Ã=;D; Ä;EÅ
E ÅEÅE ÅE&Å%E&c                 óÐ   — t          | dd¦  «        }|rLt          |t          ¦  «        r9|d         dk    r/|d         dk    r%t          j                             |¦  «        S dS dS dS dS )z0Tries to guess the filename of the given object.ÚnameNr   ú<éÿÿÿÿú>)ÚgetattrrU   r   rW   rs   Úbasename)Úobjr…   s     rC   Úguess_filenamerŒ     sw   € å�3˜ Ñ%Ô%€DØð &•
˜4¥Ñ,Ô,ð &°°a´¸C²°ÀDÈÄHÐPSÂOÀOÝŒw×Ò Ñ%Ô%Ð%ð&ð &ð &ð &°°ÀOÀOrF   c                 ó€  — t           j                             | ¦  «        r| S t           j                             | ¦  «        \  }}|r|t           j                             |¦  «        s]t           j                             |¦  «        \  }}|sn8d                     ||g¦  «        }|rt           j                             |¦  «        ¯]t          j        |¦  «        s| S t          j        |¦  «        }||                     ¦   «         vr| S t          j
        ¦   «         }t           j                             ||                     d¦  «        d         ¦  «        }t           j                             |¦  «        sOt          |¦  «        5 }|                     |                     |¦  «        ¦  «         ddd¦  «         n# 1 swxY w Y   |S )zÄReplace nonexistent paths that look like they refer to a member of a zip
    archive with the location of an extracted copy of the target, or else
    just return the provided path unchanged.
    ú/r‡   N)rW   rs   rv   r8   ÚjoinÚzipfileÚ
is_zipfileÚZipFileÚnamelistÚtempfileÚ
gettempdirÚatomic_openÚwriteÚread)rs   ÚarchiveÚmemberÚprefixÚzip_fileÚtmpÚextracted_pathÚfile_handlers           rC   Úextract_zipped_pathsr      sÅ  € õ
 
„w‡~‚~�dÑÔð àˆõ ”g—m’m DÑ)Ô)�O€GˆVØ
ð ,�"œ'Ÿ.š.¨Ñ1Ô1ð ,Ýœ'Ÿ-š-¨Ñ0Ô0‰ˆ�Øð 	ð Ø—’˜6 6Ð*Ñ+Ô+ˆð ð ,�"œ'Ÿ.š.¨Ñ1Ô1ð ,õ Ô˜gÑ&Ô&ð ØˆåŒ˜wÑ'Ô'€HØ�X×&Ò&Ñ(Ô(Ð(Ð(Øˆõ Ô
Ñ
Ô
€CÝ”W—\’\ # v§|¢|°CÑ'8Ô'8¸Ô'<Ñ=Ô=€NÝŒ7�>Š>˜.Ñ)Ô)ð 6å˜Ñ(Ô(ð 	6¨LØ×Ò˜xŸ}š}¨VÑ4Ô4Ñ5Ô5Ð5ð	6ð 	6ð 	6ñ 	6ô 	6ð 	6ð 	6ð 	6ð 	6ð 	6ð 	6øøøð 	6ð 	6ð 	6ð 	6àÐs   Å>)F3Æ3F7Æ:F7c              #   óH  K  — t          j        t          j                             | ¦  «        ¬¦  «        \  }}	 t          j        |d¦  «        5 }|V — ddd¦  «         n# 1 swxY w Y   t          j        || ¦  «         dS # t          $ r t          j        |¦  «         ‚ w xY w)z-Write a file to the disk in an atomic fashion)ÚdirÚwbN)	r”   ÚmkstemprW   rs   ÚdirnameÚfdopenr:   ÚBaseExceptionÚremove)ÚfilenameÚtmp_descriptorÚtmp_nameÚtmp_handlers       rC   r–   r–   1  sé   è è € õ  (Ô/µB´G·O²OÀHÑ4MÔ4MÐNÑNÔNÑ€N�HðÝŒY�~ tÑ,Ô,ð 	°ØÐÐÐð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	å
Œ
�8˜XÑ&Ô&Ð&Ð&Ð&øÝð ð ð Ý
Œ	�(ÑÔÐØðøøøs/   ¹B ÁAÁB ÁA#Á#B Á&A#Á'B Â B!c                 ó–   — | €dS t          | t          t          t          t          f¦  «        rt          d¦  «        ‚t          | ¦  «        S )a  Take an object and test to see if it can be represented as a
    dictionary. Unless it can not be represented as such, return an
    OrderedDict, e.g.,

    ::

        >>> from_key_val_list([('key', 'val')])
        OrderedDict([('key', 'val')])
        >>> from_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples
        >>> from_key_val_list({'key': 'val'})
        OrderedDict([('key', 'val')])

    :rtype: OrderedDict
    Nú+cannot encode objects that are not 2-tuples)rU   r   r   Úboolr4   r7   r   ©Úvalues    rC   Úfrom_key_val_listr²   >  sG   € ð$ €}Øˆtå�%�#�u¥d­CÐ0Ñ1Ô1ð HÝÐFÑGÔGÐGå�uÑÔÐrF   c                 óè   — | €dS t          | t          t          t          t          f¦  «        rt          d¦  «        ‚t          | t          ¦  «        r|                      ¦   «         } t          | ¦  «        S )aÂ  Take an object and test to see if it can be represented as a
    dictionary. If it can be, return a list of tuples, e.g.,

    ::

        >>> to_key_val_list([('key', 'val')])
        [('key', 'val')]
        >>> to_key_val_list({'key': 'val'})
        [('key', 'val')]
        >>> to_key_val_list('string')
        Traceback (most recent call last):
        ...
        ValueError: cannot encode objects that are not 2-tuples

    :rtype: list
    Nr®   )	rU   r   r   r¯   r4   r7   r   rH   Úlistr°   s    rC   Úto_key_val_listrµ   Y  sd   € ð" €}Øˆtå�%�#�u¥d­CÐ0Ñ1Ô1ð HÝÐFÑGÔGÐGå�%�Ñ!Ô!ð Ø—’‘”ˆå�‰;Œ;ÐrF   c                 óÆ   — g }t          | ¦  «        D ]N}|dd…         |dd…         cxk    rdk    rn nt          |dd…         ¦  «        }|                     |¦  «         ŒO|S )a  Parse lists as described by RFC 2068 Section 2.

    In particular, parse comma-separated lists where the elements of
    the list may include quoted-strings.  A quoted-string could
    contain a comma.  A non-quoted string could have quotes in the
    middle.  Quotes are removed automatically after parsing.

    It basically works like :func:`parse_set_header` just that items
    may appear multiple times and case sensitivity is preserved.

    The return value is a standard :class:`list`:

    >>> parse_list_header('token, "quoted value"')
    ['token', 'quoted value']

    To create a header from the :class:`list` again, use the
    :func:`dump_header` function.

    :param value: a string with a list header.
    :return: :class:`list`
    :rtype: list
    Nr   r‡   ú")Ú_parse_list_headerÚunquote_header_valueÚappend)r±   ÚresultÚitems      rC   Úparse_list_headerr½   w  s�   € ð. €FÝ" 5Ñ)Ô)ð ð ˆØ���Œ8�t˜B˜C˜C”yÐ'Ð'Ò'Ð' CÒ'Ð'Ð'Ð'Ð'Ý'¨¨Q¨r¨T¬
Ñ3Ô3ˆDØ�Š�dÑÔÐÐØ€MrF   c                 óì   — i }t          | ¦  «        D ]a}d|vrd||<   Œ|                     dd¦  «        \  }} | dd…         | dd…         cxk    rdk    rn nt          | dd…         ¦  «        } | ||<   Œb|S )a^  Parse lists of key, value pairs as described by RFC 2068 Section 2 and
    convert them into a python dict:

    >>> d = parse_dict_header('foo="is a fish", bar="as well"')
    >>> type(d) is dict
    True
    >>> sorted(d.items())
    [('bar', 'as well'), ('foo', 'is a fish')]

    If there is no value for a key it will be `None`:

    >>> parse_dict_header('key_without_value')
    {'key_without_value': None}

    To create a header from the :class:`dict` again, use the
    :func:`dump_header` function.

    :param value: a string with a dict header.
    :return: :class:`dict`
    :rtype: dict
    ú=Nr   r‡   r·   )r¸   r8   r¹   )r±   r»   r¼   r…   s       rC   Úparse_dict_headerrÀ   —  s£   € ð, €FÝ" 5Ñ)Ô)ð ð ˆØ�dˆ?ˆ?ØˆF�4‰LØØ—j’j  aÑ(Ô(‰ˆˆeØ��!�Œ9˜˜b˜c˜cœ
Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)Ð)Ý(¨¨q°¨t¬Ñ5Ô5ˆEØˆˆt‰ˆØ€MrF   c                 óÊ   — | r`| d         | d         cxk    rdk    rGn nD| dd…         } |r| dd…         dk    r*|                       dd¦  «                              d	d¦  «        S | S )
zçUnquotes a header value.  (Reversal of :func:`quote_header_value`).
    This does not use the real unquoting but what browsers are actually
    using for quoting.

    :param value: the header value to unquote.
    :rtype: str
    r   r‡   r·   r   NrT   z\\ú\z\")r:   )r±   Úis_filenames     rC   r¹   r¹   º  s‹   € ð ð C��q”˜U 2œYÐ-Ð-Ò-Ð-¨#Ò-Ð-Ð-Ð-Ð-ð
 �a˜�d”ˆð ð 	C˜e B Q Bœi¨6Ò1Ð1Ø—=’= ¨Ñ.Ô.×6Ò6°u¸cÑBÔBÐBØ€LrF   c                 ó   — d„ | D ¦   «         }|S )z€Returns a key/value dictionary from a CookieJar.

    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    c                 ó(   — i | ]}|j         |j        “ŒS rh   )r…   r±   )ri   Úcookies     rC   ú
<dictcomp>z'dict_from_cookiejar.<locals>.<dictcomp>Ú  s   € Ð>Ð>Ð>°�6”; ¤Ð>Ð>Ð>rF   rh   ©ÚcjÚcookie_dicts     rC   Údict_from_cookiejarrË   Ó  s   € ð ?Ð>¸2Ð>Ñ>Ô>€KØÐrF   c                 ó"   — t          || ¦  «        S )zÂReturns a CookieJar from a key/value dictionary.

    :param cj: CookieJar to insert cookies into.
    :param cookie_dict: Dict of key/values to insert into CookieJar.
    :rtype: CookieJar
    r   rÈ   s     rC   Úadd_dict_to_cookiejarrÍ   Þ  s   € õ ˜{¨BÑ/Ô/Ð/rF   c                 ó`  — t          j        dt          ¦  «         t          j        dt          j        ¬¦  «        }t          j        dt          j        ¬¦  «        }t          j        d¦  «        }|                     | ¦  «        |                     | ¦  «        z   |                     | ¦  «        z   S )zlReturns encodings from given content string.

    :param content: bytestring to extract encodings from.
    z¤In requests 3.0, get_encodings_from_content will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)z!<meta.*?charset=["\']*(.+?)["\'>])Úflagsz+<meta.*?content=["\']*;?charset=(.+?)["\'>]z$^<\?xml.*?encoding=["\']*(.+?)["\'>])r[   r\   ÚDeprecationWarningr;   Úcompiler=   Úfindall)ÚcontentÚ
charset_reÚ	pragma_reÚxml_res       rC   Úget_encodings_from_contentr×   é  s¦   € õ
 „Mð1õ 	ñô ð õ ”Ð@ÍÌÐMÑMÔM€JÝ”
ÐIÕQSÔQUÐVÑVÔV€IÝŒZÐ?Ñ@Ô@€Fð 	×Ò˜7Ñ#Ô#Ø
×
Ò
˜GÑ
$Ô
$ñ	%à
�.Š.˜Ñ
!Ô
!ñ	"ðrF   c                 ó   — |                       d¦  «        }|d                              ¦   «         |dd…         }}i }d}|D ]‹}|                     ¦   «         }|rs|d}}|                     d¦  «        }	|	dk    r=|d|	…                              |¦  «        }||	dz   d…                              |¦  «        }|||                     ¦   «         <   ŒŒ||fS )	z¦Returns content type and parameters from given header

    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    r,   r   r   Nz"' Tr¿   r‡   )r8   ÚstripÚfindÚlower)
ÚheaderÚtokensÚcontent_typeÚparamsÚparams_dictÚitems_to_stripÚparamÚkeyr±   Úindex_of_equalss
             rC   Ú_parse_content_type_headerrå     sä   € ð �\Š\˜#ÑÔ€FØ! !œ9Ÿ?š?Ñ,Ô,¨f°Q°R°R¬j�&€LØ€KØ€Nàð -ð -ˆØ—’‘”ˆØð 	-Ø �ˆCØ#Ÿjšj¨™oœoˆOØ "Ò$Ð$ØÐ,˜_Ð,Ô-×3Ò3°NÑCÔC�Ø˜o°Ñ1Ð3Ð3Ô4×:Ò:¸>ÑJÔJ�Ø',ˆK˜Ÿ	š	™œÑ$øØ˜Ð$Ð$rF   c                 ó²   — |                       d¦  «        }|sdS t          |¦  «        \  }}d|v r|d                              d¦  «        S d|v rdS d|v rdS dS )	z}Returns encodings from given HTTP Header Dict.

    :param headers: dictionary to extract encoding from.
    :rtype: str
    zcontent-typeNÚcharsetz'"Útextz
ISO-8859-1zapplication/jsonrM   )rq   rå   rÙ   )ÚheadersrÞ   rß   s      rC   Úget_encoding_from_headersrê     s€   € ð —;’;˜~Ñ.Ô.€Làð Øˆtå5°lÑCÔCÑ€L�&à�FÐÐØ�iÔ ×&Ò& uÑ-Ô-Ð-à�ÐÐØˆ|à˜\Ð)Ð)àˆwð *Ð)rF   c              #   óð   K  — |j         €
| E d{V —† dS  t          j        |j         ¦  «        d¬¦  «        }| D ]}|                     |¦  «        }|r|V — Œ|                     dd¬¦  «        }|r|V — dS dS )zStream decodes an iterator.Nr:   ©ÚerrorsrF   T)Úfinal)ÚencodingÚcodecsÚgetincrementaldecoderrw   )ÚiteratorÚrÚdecoderÚchunkÚrvs        rC   Ústream_decode_response_unicoder÷   4  s²   è è € ð 	„zÐØÐÐÐÐÐÐÐØˆà6�fÔ*¨1¬:Ñ6Ô6¸iÐHÑHÔH€GØð ð ˆØ�^Š^˜EÑ"Ô"ˆØð 	ØˆHˆHˆHøØ	�Š˜ 4ˆÑ	(Ô	(€BØ	ð Øˆˆˆˆˆðð rF   c              #   ó´   K  — d}|�|dk    rt          | ¦  «        }|t          | ¦  «        k     r)| |||z   …         V — ||z  }|t          | ¦  «        k     °'dS dS )z Iterate over slices of a string.r   N)rO   )ÚstringÚslice_lengthÚposs      rC   Úiter_slicesrü   E  s{   è è € à
€CØÐ˜|¨qÒ0Ð0Ý˜6‘{”{ˆØ
•�F‘”Ò
Ð
Ø�S˜3 Ñ-Ð-Ô.Ð.Ð.Ð.Øˆ|Ñˆð •�F‘”Ò
Ð
Ð
Ð
Ð
Ð
rF   c                 ó:  — t          j        dt          ¦  «         g }t          | j        ¦  «        }|r;	 t          | j        |¦  «        S # t          $ r |                     |¦  «         Y nw xY w	 t          | j        |d¬¦  «        S # t          $ r
 | j        cY S w xY w)zâReturns the requested content back in unicode.

    :param r: Response object to get unicode content from.

    Tried:

    1. charset from content-type
    2. fall back and replace all unicode characters

    :rtype: str
    z£In requests 3.0, get_unicode_from_response will be removed. For more information, please see the discussion on issue #2266. (This warning should only appear once.)r:   rì   )
r[   r\   rÐ   rê   ré   r   rÓ   ÚUnicodeErrorrº   Ú	TypeError)ró   Útried_encodingsrï   s      rC   Úget_unicode_from_responser  O  sÓ   € õ „Mð1õ 	ñô ð ð €Oõ )¨¬Ñ3Ô3€Hàð -ð	-Ý�q”y (Ñ+Ô+Ð+øÝð 	-ð 	-ð 	-Ø×"Ò" 8Ñ,Ô,Ð,Ð,Ð,ð	-øøøðÝ�1”9˜h¨yÐ9Ñ9Ô9Ð9øÝð ð ð ØŒyÐÐÐðøøøs#   ´A	 Á	A+Á*A+Á/B ÂBÂBzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c                 óþ  — |                       d¦  «        }t          dt          |¦  «        ¦  «        D ]¶}||         dd…         }t          |¦  «        dk    rƒ|                     ¦   «         ro	 t	          t          |d¦  «        ¦  «        }n!# t          $ r t          d|› d�¦  «        ‚w xY w|t          v r|||         dd…         z   ||<   Œ™d||         › �||<   Œ¨d||         › �||<   Œ·d	 	                    |¦  «        S )
z¨Un-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.

    :rtype: str
    ú%r   r   rT   é   z"Invalid percent-escape sequence: 'ú'NÚ )
r8   ÚrangerO   ÚisalnumÚchrr4   r7   r    ÚUNRESERVED_SETr�   )ÚuriÚpartsÚiÚhÚcs        rC   Úunquote_unreservedr  |  s  € ð �IŠI�c‰NŒN€EÝ�1•c˜%‘j”jÑ!Ô!ð &ð &ˆØ�!ŒH�Q�q�SŒMˆÝˆq‰6Œ6�QŠ;ˆ;˜1Ÿ9š9™;œ;ˆ;ðLÝ�˜A˜r™
œ
‘O”O��øÝð Lð Lð LÝ Ð!JÀaÐ!JÐ!JÐ!JÑKÔKÐKðLøøøð •NÐ"Ð"Ø˜u Qœx¨¨¨œ|Ñ+��a‘�à)˜u Qœx˜>˜>��a‘�à%˜5 œ8�~�~ˆE�!‰HˆHØ�7Š7�5‰>Œ>Ðs   Á-BÂB)c                 óŠ   — d}d}	 t          t          | ¦  «        |¬¦  «        S # t          $ r t          | |¬¦  «        cY S w xY w)z¬Re-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.

    :rtype: str
    z!#$%&'()*+,/:;=?@[]~z!#$&'()*+,/:;=?@[]~)Úsafe)r   r  r    )r  Úsafe_with_percentÚsafe_without_percents      rC   Úrequote_urir  ”  sk   € ð /ÐØ0Ðð	5õ Õ'¨Ñ,Ô,Ð3DÐEÑEÔEÐEøÝð 5ð 5ð 5õ �SÐ3Ð4Ñ4Ô4Ð4Ð4Ð4ð	5øøøs   †$ ¤AÁAc           
      ó’  — t          j        dt          j        | ¦  «        ¦  «        d         }|                     d¦  «        \  }}t          j        dt          j        t          t          |¦  «        ¦  «        ¦  «        ¦  «        d         }t          j        dt          j        |¦  «        ¦  «        d         |z  }||z  ||z  k    S )zïThis function allows you to check if an IP belongs to a network subnet

    Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24
             returns False if ip = 192.168.1.1 and net = 192.168.100.0/24

    :rtype: bool
    z=Lr   rŽ   )ÚstructÚunpackÚsocketÚ	inet_atonr8   Údotted_netmaskr4   )ÚipÚnetÚipaddrÚnetaddrÚbitsÚnetmaskÚnetworks          rC   Úaddress_in_networkr#  ª  s¢   € õ Œ]˜4¥Ô!1°"Ñ!5Ô!5Ñ6Ô6°qÔ9€FØ—I’I˜c‘N”N�M€GˆTÝŒm˜D¥&Ô"2µ>Å#ÀdÁ)Ä)Ñ3LÔ3LÑ"MÔ"MÑNÔNÈqÔQ€GÝŒm˜D¥&Ô"2°7Ñ";Ô";Ñ<Ô<¸QÔ?À'ÑI€GØ�WÑ '¨GÑ"3Ò4Ð4rF   c                 ól   — ddd| z
  z  dz
  z  }t          j        t          j        d|¦  «        ¦  «        S )z�Converts mask from /xx format to xxx.xxx.xxx.xxx

    Example: if mask is 24 function returns 255.255.255.0

    :rtype: str
    l   ÿÿ r   é    z>I)r  Ú	inet_ntoar  Úpack)Úmaskr   s     rC   r  r  ¹  s8   € ð ˜˜b 4™i™¨1Ñ,Ñ,€DÝÔ�FœK¨¨dÑ3Ô3Ñ4Ô4Ð4rF   c                 óT   — 	 t          j        | ¦  «         n# t          $ r Y dS w xY wdS )z
    :rtype: bool
    FT)r  r  r6   )Ú	string_ips    rC   Úis_ipv4_addressr+  Ä  sB   € ðÝÔ˜Ñ#Ô#Ð#Ð#øÝð ð ð Øˆuˆuðøøøàˆ4s   ‚ —
%¤%c                 óN  — |                       d¦  «        dk    r‰	 t          |                      d¦  «        d         ¦  «        }n# t          $ r Y dS w xY w|dk     s|dk    rdS 	 t	          j        |                      d¦  «        d         ¦  «         n# t          $ r Y dS w xY wdS dS )zV
    Very simple check of the cidr format in no_proxy variable.

    :rtype: bool
    rŽ   r   Fr%  r   T)Úcountr4   r8   r7   r  r  r6   )Ústring_networkr(  s     rC   Úis_valid_cidrr/  Ï  sØ   € ð ×Ò˜CÑ Ô  AÒ%Ð%ð	Ý�~×+Ò+¨CÑ0Ô0°Ô3Ñ4Ô4ˆDˆDøÝð 	ð 	ð 	Ø�5�5ð	øøøð �!Š8ˆ8�t˜b’y�yØ�5ð	ÝÔ˜^×1Ò1°#Ñ6Ô6°qÔ9Ñ:Ô:Ð:Ð:øÝð 	ð 	ð 	Ø�5�5ð	øøøð ˆuØˆ4s#   ›(A Á
AÁAÁ$-B Â
B ÂB c              #   ó  K  — |du}|r.t           j                             | ¦  «        }|t           j        | <   	 dV — |r"|€t           j        | = dS |t           j        | <   dS dS # |r|€t           j        | = n|t           j        | <   w xY w)zÎSet the environment variable 'env_name' to 'value'

    Save previous value, yield, and then restore the previous value stored in
    the environment variable 'env_name'.

    If 'value' is None, do nothingN)rW   rp   rq   )Úenv_namer±   Úvalue_changedÚ	old_values       rC   Úset_environr4  ç  s´   è è € ð  Ð%€MØð %Ý”J—N’N 8Ñ,Ô,ˆ	Ø$�Œ
�8Ñð1Øˆˆˆàð 	1ØÐ Ý”J˜xÐ(Ð(Ð(à'0•”
˜8Ñ$Ð$Ð$ð		1ð 	1øˆ=ð 	1ØÐ Ý”J˜xÐ(Ð(à'0•”
˜8Ñ$Ð0Ð0Ð0Ð0s   ¸A" Á"#Bc                 óÈ  — d„ }|}|€ |d¦  «        }t          | ¦  «        }|j        €dS |rÕd„ |                     dd¦  «                             d¦  «        D ¦   «         }t	          |j        ¦  «        r<|D ]8}t          |¦  «        rt          |j        |¦  «        r dS Œ*|j        |k    r dS Œ9nR|j        }|j        r|d	|j        › �z  }|D ]4}|j                             |¦  «        s|                     |¦  «        r dS Œ5t          d|¦  «        5  	 t          |j        ¦  «        }n# t          t          j        f$ r d
}Y nw xY wddd¦  «         n# 1 swxY w Y   |rdS d
S )zL
    Returns whether we should bypass proxies or not.

    :rtype: bool
    c                 ó¢   — t           j                             | ¦  «        p0t           j                             |                      ¦   «         ¦  «        S ©N)rW   rp   rq   Úupper)rã   s    rC   Ú	get_proxyz(should_bypass_proxies.<locals>.get_proxy  s1   € ÝŒz�~Š~˜cÑ"Ô"ÐA¥b¤j§n¢n°S·Y²Y±[´[Ñ&AÔ&AÐArF   NÚno_proxyTc              3   ó   K  — | ]}|¯|V — Œ	d S r7  rh   )ri   r>   s     rC   rk   z(should_bypass_proxies.<locals>.<genexpr>  s'   è è € ÐRÐR˜TÈTÐR�DÐRÐRÐRÐRÐRÐRrF   ú r  ú,ú:F)r   Úhostnamer:   r8   r+  r/  r#  ÚportÚendswithr4  r   rÿ   r  Úgaierror)	rz   r:  r9  Úno_proxy_argÚparsedÚproxy_ipÚhost_with_portr>   Úbypasss	            rC   Úshould_bypass_proxiesrH  ý  s#  € ðBð Bð Bð
 €LØÐØ�9˜ZÑ(Ô(ˆÝ�c‰]Œ]€Fà„Ðàˆtàð  ð SÐR X×%5Ò%5°c¸2Ñ%>Ô%>×%DÒ%DÀSÑ%IÔ%IÐRÑRÔRˆå˜6œ?Ñ+Ô+ð 	 Ø$ð  ð  �Ý  Ñ*Ô*ð  Ý)¨&¬/¸8ÑDÔDð $Ø#˜t˜tð$à”_¨Ò0Ð0ð  ˜4˜4ð 1ð	 ð $œ_ˆNØŒ{ð 4ØÐ"3 f¤kÐ"3Ð"3Ñ3�à ð  ð  �Ø”?×+Ò+¨DÑ1Ô1ð  °^×5LÒ5LÈTÑ5RÔ5Rð  ð  ˜4˜4ð õ
 
�Z Ñ	.Ô	.ð ð ð	Ý! &¤/Ñ2Ô2ˆFˆFøÝ�6œ?Ð+ð 	ð 	ð 	ØˆFˆFˆFð	øøøð	ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð Øˆtàˆ5s6   ÄEÄD)Ä(EÄ)EÅEÅEÅEÅEÅEc                 óD   — t          | |¬¦  «        ri S t          ¦   «         S )zA
    Return a dict of environment proxies.

    :rtype: dict
    ©r:  )rH  r   )rz   r:  s     rC   Úget_environ_proxiesrK  :  s(   € õ ˜S¨8Ð4Ñ4Ô4ð Øˆ	å‰|Œ|ÐrF   c                 ó  — |pi }t          | ¦  «        }|j        €.|                     |j        |                     d¦  «        ¦  «        S |j        dz   |j        z   |j        d|j        z   dg}d}|D ]}||v r
||         } nŒ|S )z­Select a proxy for the url, if applicable.

    :param url: The url being for the request
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    NÚallz://zall://)r   r?  rq   Úscheme)rz   ÚproxiesÚurlpartsÚ
proxy_keysÚproxyÚ	proxy_keys         rC   Úselect_proxyrT  F  s­   € ð ˆm˜€GÝ˜‰}Œ}€HØÔÐ Ø�{Š{˜8œ?¨G¯KªK¸Ñ,>Ô,>Ñ?Ô?Ð?ð 	Œ˜%Ñ (Ô"3Ñ3ØŒØ�8Ô$Ñ$Øð	€Jð €EØð ð ˆ	Ø˜ÐÐØ˜IÔ&ˆEØˆEð  ð €LrF   c                 ód  — |�|ni }| j         }t          |¦  «        j        }|                     d¦  «        }|                     ¦   «         }|rct          ||¬¦  «        sRt          ||¬¦  «        }|                     ||                     d¦  «        ¦  «        }|r|                     ||¦  «         |S )a©  This method takes proxy information from a request and configuration
    input to resolve a mapping of target proxies. This will consider settings
    such as NO_PROXY to strip proxy configurations.

    :param request: Request or PreparedRequest
    :param proxies: A dictionary of schemes or schemes and hosts to proxy URLs
    :param trust_env: Boolean declaring whether to trust environment configs

    :rtype: dict
    Nr:  rJ  rM  )rz   r   rN  rq   ÚcopyrH  rK  Ú
setdefault)	ÚrequestrO  Ú	trust_envrz   rN  r:  Únew_proxiesÚenviron_proxiesrR  s	            rC   Úresolve_proxiesr\  `  s»   € ð !Ð,ˆgˆg°"€GØ
Œ+€CÝ�c‰]Œ]Ô!€FØ�{Š{˜:Ñ&Ô&€HØ—,’,‘.”.€Kàð 2Õ.¨s¸XÐFÑFÔFð 2Ý-¨c¸HÐEÑEÔEˆà×#Ò# F¨O×,?Ò,?ÀÑ,FÔ,FÑGÔGˆàð 	2Ø×"Ò" 6¨5Ñ1Ô1Ð1ØÐrF   úpython-requestsc                 ó   — | › dt           › �S )zO
    Return a string representing the default user agent.

    :rtype: str
    rŽ   r   )r…   s    rC   Údefault_user_agentr_  {  s   € ð Ð"Ð"•[Ð"Ð"Ð"rF   c                  óL   — t          t          ¦   «         t          dddœ¦  «        S )z9
    :rtype: requests.structures.CaseInsensitiveDict
    z*/*z
keep-alive)z
User-AgentzAccept-EncodingÚAcceptÚ
Connection)r"   r_  ÚDEFAULT_ACCEPT_ENCODINGrh   rF   rC   Údefault_headersrd  „  s2   € õ å,Ñ.Ô.Ý6ØØ&ð		
ð 	
ñô ð rF   c                 ó  — g }d}|                       |¦  «        } | s|S t          j        d| ¦  «        D ]Ë}	 |                     dd¦  «        \  }}n# t          $ r |d}}Y nw xY wd|                      d¦  «        i}|                     d¦  «        D ]X}	 |                     d¦  «        \  }} n# t          $ r Y  n0w xY w|                       |¦  «        ||                      |¦  «        <   ŒY|                     |¦  «         ŒÌ|S )	z¼Return a list of parsed link headers proxies.

    i.e. Link: <http:/.../front.jpeg>; rel=front; type="image/jpeg",<http://.../back.jpeg>; rel=back;type="image/jpeg"

    :rtype: list
    z '"z, *<r,   r   r  rz   z<> '"r¿   )rÙ   r;   r8   r7   rº   )	r±   ÚlinksÚreplace_charsÚvalrz   rß   Úlinkrâ   rã   s	            rC   Úparse_header_linksrj  ’  sA  € ð €Eà€Mà�KŠK˜Ñ&Ô&€EØð ØˆåŒx˜ Ñ&Ô&ð ð ˆð	"ØŸ)š) C¨Ñ+Ô+‰KˆC��øÝð 	"ð 	"ð 	"Ø˜r�ˆCˆCˆCð	"øøøð �s—y’y Ñ*Ô*Ð+ˆà—\’\ #Ñ&Ô&ð 	Hð 	HˆEðØ"Ÿ[š[¨Ñ-Ô-‘
��U�UøÝð ð ð Ø��ðøøøð .3¯[ª[¸Ñ-GÔ-GˆD�—’˜=Ñ)Ô)Ñ*Ð*à�Š�TÑÔÐÐà€Ls#   ¶AÁA!Á A!ÂB,Â,
B:Â9B:ú ro   rT   é   c                 óÖ  — | dd…         }|t           j        t           j        fv rdS |dd…         t           j        k    rdS |dd…         t           j        t           j        fv rdS |                     t          ¦  «        }|dk    rd	S |dk    r,|ddd…         t          k    rd
S |ddd…         t          k    rdS |dk    r*|dd…         t          k    rdS |dd…         t          k    rdS dS )z
    :rtype: str
    Né   zutf-32rl  z	utf-8-sigrT   zutf-16r   rM   z	utf-16-ber   z	utf-16-lez	utf-32-bez	utf-32-le)
rð   ÚBOM_UTF32_LEÚBOM_UTF32_BEÚBOM_UTF8ÚBOM_UTF16_LEÚBOM_UTF16_BEr-  Ú_nullÚ_null2Ú_null3)ÚdataÚsampleÚ	nullcounts      rC   Úguess_json_utfrz  ½  s  € ð �"�1�"ŒX€FØ•&Ô%¥vÔ':Ð;Ð;Ð;ØˆxØˆbˆqˆb„z•V”_Ò$Ð$Øˆ{Øˆbˆqˆb„z•fÔ)­6Ô+>Ð?Ð?Ð?ØˆxØ—’�UÑ#Ô#€IØ�A‚~€~ØˆwØ�A‚~€~Ø�#�#�A�#Œ;�&Ò Ð Ø�;Ø�!�$�Q�$Œ<�6Ò!Ð!Ø�;à�A‚~€~Ø�"�1�"Œ:�ÒÐØ�;Ø�!�"�"Œ:�ÒÐØ�;àˆ4rF   c                 óº   — t          | ¦  «        }|\  }}}}}}}	|j        }
|
s||
}}
|rd                     ||
g¦  «        }
|€|}|€d}t          ||
|d||	f¦  «        S )zªGiven a URL that may or may not have a scheme, prepend the given scheme.
    Does not replace a present scheme with the one provided as an argument.

    :rtype: str
    ú@Nr  )r   rx   r�   r   )rz   Ú
new_schemerD  rN  Úauthr>   r@  rs   ÚqueryÚfragmentrx   s              rC   Úprepend_scheme_if_neededr�  Ý  s‹   € õ �s‰^Œ^€FØ6<Ñ3€FˆD�$˜˜d E¨8ð Œ]€FØð $Ø˜V�ˆàð *ð —’˜4 ˜.Ñ)Ô)ˆØ€~ØˆØ€|Øˆå�v˜v t¨R°¸ÐAÑBÔBÐBrF   c                 óª   — t          | ¦  «        }	 t          |j        ¦  «        t          |j        ¦  «        f}n# t          t
          f$ r d}Y nw xY w|S )z{Given a url with authentication components, extract them into a tuple of
    username,password.

    :rtype: (str,str)
    )r  r  )r   r   ÚusernameÚpasswordr_   rÿ   )rz   rD  r~  s      rC   Úget_auth_from_urlr…  ú  sd   € õ �c‰]Œ]€FðÝ˜œÑ(Ô(­'°&´/Ñ*BÔ*BÐCˆˆøÝ�IÐ&ð ð ð Øˆˆˆðøøøð €Ks   ‘(: ºAÁAc                 óT   — | \  }}t          | |d¦  «         t          | |d¦  «         dS )z§Verifies that header parts don't contain leading whitespace
    reserved characters, or return characters.

    :param header: tuple, in the format (name, value).
    r   r   N)Ú_validate_header_part)rÜ   r…   r±   s      rC   Úcheck_header_validityrˆ  
  s7   € ð �K€Dˆ%Ý˜& $¨Ñ*Ô*Ð*Ý˜& %¨Ñ+Ô+Ð+Ð+Ð+rF   c           
      óD  — t          |t          ¦  «        rt          |         }nHt          |t          ¦  «        rt          |         }n%t          d|›d| › dt          |¦  «        › �¦  «        ‚|                     |¦  «        s|dk    rdnd}t          d|› d|›�¦  «        ‚d S )	NzHeader part (z) from z# must be of type str or bytes, not r   r…   r±   zTInvalid leading whitespace, reserved character(s), or return character(s) in header z: )rU   r   r   r   r
   r   Útyper<   )rÜ   Úheader_partÚheader_validator_indexÚ	validatorÚheader_kinds        rC   r‡  r‡    sô   € Ý�+�sÑ#Ô#ð 
Ý*Ð+AÔBˆ	ˆ	Ý	�K¥Ñ	'Ô	'ð 
Ý+Ð,BÔCˆ	ˆ	åðE˜Kð Eð E°&ð Eð EÝ15°kÑ1BÔ1BðEð Eñ
ô 
ð 	
ð
 �?Š?˜;Ñ'Ô'ð 
Ø 6¸!Ò ;Ð ;�f�fÀˆÝðEØ&1ðEð EØ5@ðEð Eñ
ô 
ð 	
ð
ð 
rF   c                 óœ   — t          | ¦  «        \  }}}}}}|s||}}|                     dd¦  «        d         }t          |||||df¦  «        S )zW
    Given a url remove the fragment and the authentication part.

    :rtype: str
    r|  r   r‡   r  )r   Úrsplitr   )rz   rN  rx   rs   rß   r  r€  s          rC   Úurldefragauthr‘  (  sb   € õ 5=¸S±M´MÑ1€FˆF�D˜& %¨ð ð $Ø˜V�ˆà�]Š]˜3 Ñ"Ô" 2Ô&€Få�v˜v t¨V°U¸BÐ?Ñ@Ô@Ð@rF   c                 óä   — t          | j        dd¦  «        }|�Jt          | j        t          ¦  «        r0	  || j        ¦  «         dS # t
          $ r t          d¦  «        ‚w xY wt          d¦  «        ‚)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    rS   Nz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r‰   ÚbodyrU   Ú_body_positionr   r6   r!   )Úprepared_requestÚ	body_seeks     rC   Úrewind_bodyr—  9  s–   € õ Ð(Ô-¨v°tÑ<Ô<€IØÐ¥ØÔ'­ñ"ô "Ðð	ØˆIÐ&Ô5Ñ6Ô6Ð6Ð6Ð6øÝð 	ð 	ð 	Ý'ØMñô ð ð	øøøõ
 $Ð$QÑRÔRÐRs   ´A ÁA )Fr7  )T)r]  )jÚ__doc__rð   Ú
contextlibr]   rW   r;   r  r  Úsysr”   r[   r�   Úcollectionsr   Úurllib3.utilr   r   r  r   r	   Ú_internal_utilsr
   r   r   r   Úcompatr   r   r   r   r   r   r   r¸   r   r   r   r   r   r   r   Úcookiesr   Ú
exceptionsr   r   r    r!   Ú
structuresr"   rr   ÚwhereÚDEFAULT_CA_BUNDLE_PATHÚDEFAULT_PORTSr�   r8   rc  ÚplatformrD   rK   rd   rƒ   rŒ   r    Úcontextmanagerr–   r²   rµ   r½   rÀ   r¹   rË   rÍ   r×   rå   rê   r÷   rü   r  Ú	frozensetr
  r  r  r#  r  r+  r/  r4  rH  rK  rT  r\  r_  rd  rj  rV   rt  ru  rv  rz  r�  r…  rˆ  r‡  r‘  r—  rh   rF   rC   ú<module>r¨     s˜  ððð ð €€€Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø 
€
€
€
Ø €€€Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð :Ð 9Ð 9Ð 9Ð 9Ð 9ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +à"€à$˜œ™œÐ à cÐ*Ð*€ð Ÿ)š)Ø€B„HˆW�l�l°4Ð8Ñ8Ô8Ð9JÔKÑLÔLñô Ð ð
 „<�7ÒÐð$ð $ð $ðL	/ð 	/ð 	/ðð ð ðB3ð B3ð B3ðJ6ð 6ð 6ð 6ðr&ð &ð &ð"ð "ð "ðJ Ôð	ð 	ñ Ôð	ðð ð ð6ð ð ð<ð ð ð@ð ð ðFð ð ð ð2ð ð ð0ð 0ð 0ðð ð ð2%ð %ð %ð2ð ð ð2ð ð ð"ð ð ð$ð $ð $ðP �ØMñô €ð
ð ð ð05ð 5ð 5ð,5ð 5ð 5ð5ð 5ð 5ðð ð ðð ð ð0 Ôð1ð 1ñ Ôð1ð*:ð :ð :ðz	ð 	ð 	ð 	ðð ð ð4ð ð ð ð6#ð #ð #ð #ðð ð ð"ð "ð "ðL 	�Š�gÑÔ€Ø	�‰€Ø	�‰€ðð ð ð@Cð Cð Cð:ð ð ð ,ð ,ð ,ð
ð 
ð 
ð&Að Að Að"Sð Sð Sð Sð SrF   