hyb
2025-11-18 7539e6f48c75dcaeb808359cccfd1c0d0d182ce8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
Ë
ñúhɁãó^—dZddlZddlZddlZddlZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl m Z ddlmZmZddlmZddlmZddlmZmZmZmZdd    lmZmZmZmZmZmZm Z dd
lm!Z"dd lm#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)dd l*m+Z+dd l,m-Z-m.Z.m/Z/m0Z0ddl1m2Z2dZ3ejh«Z5dddœZ6djoejpded¬«d««Z9ejtdk(rd„Z;d„Z#d„Z<d„Z=dHd„Z>d„Z?d„Z@ej‚d „«ZBd!„ZCd"„ZDd#„ZEd$„ZFdHd%„ZGd&„ZHd'„ZId(„ZJd)„ZKd*„ZLd+„ZMd,„ZNd-„ZOePd.«ZQd/„ZRd0„ZSd1„ZTd2„ZUd3„ZVd4„ZWej‚d5„«ZXd6„ZYdId7„ZZd8„Z[dJd9„Z\dKd:„Z]d;„Z^d<„Z_d=jÁd>«Zaead?zZbead@zZcdA„ZddB„ZedC„ZfdD„ZgdE„ZhdF„ZidG„Zjy)Lz”
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Ú is_urllib3_1)Úparse_http_list)Ú proxy_bypassÚproxy_bypass_environmentÚquoteÚstrÚunquoteÚurlparseÚ
urlunparse©Úcookiejar_from_dict)ÚFileModeWarningÚ InvalidHeaderÚ
InvalidURLÚUnrewindableBodyError)ÚCaseInsensitiveDict)z.netrcÚ_netrcéPi»)ÚhttpÚhttpsz, z,\s*T)Úaccept_encodingzaccept-encodingÚwin32có—    ddl}    |j|jd«}t    |j |d«d«}|j |d«d}|r|sy|jd«}td|«}|D]j}|dk(rd|vry    |jdd
«}|jd d «}|jd d«}tj||tj«sŒjy    y#t$rYywxYw#t tf$rYywxYw)NrFz;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)Úhostr1ÚinternetSettingsÚ proxyEnableÚ proxyOverrideÚtests      úMH:\Change_password\venv_build\Lib\site-packages\pip/_vendor/requests/utils.pyÚproxy_bypass_registryrEMs%€ð    Û ð
    Ø%Ÿ~™~Ø×(Ñ(ØNó Ð ô
˜f×1Ñ1Ð2BÀMÓRÐSTÑUÓVˆKà"×/Ñ/Ð0@À/ÓRÐSTÑUˆMñ¡-Øð
&×+Ñ+¨CÓ0ˆ ä˜t ]Ó3ˆ à!ò    ˆDؐyҠؘd‘?ÙØ—<‘<  UÓ+ˆDØ—<‘<  UÓ+ˆDØ—<‘<  TÓ*ˆD܏x‰x˜˜d¤B§D¡DÕ)Ùð    ðøôCò    Ùð    ûôœÐ$ò    Ùð    ús#‚C(‡AC7Ã(    C4Ã3C4Ã7D    ÄD    cóB—t«r t|«St|«S)zšReturn True, if the host should be bypassed.
 
        Checks proxy settings gathered from the environment, if specified,
        or the registry.
        )rrrE)r?s rDrrss €ô "Ô #Ü+¨DÓ1Ð 1ä(¨Ó.Ð .ócó>—t|d«r|j«}|S)z/Returns an internal sequence dictionary update.Úitems)ÚhasattrrI)Úds rDÚdict_to_sequencerLs€ôˆq'ÔØ G‰G‹Iˆà €HrGcóö—d}d}ts!t|t«r|jd«}t    |d«r t |«}n~t    |d«r |j
}net    |d«rY    |j «}tj|«j}d|jvrtjdt«    t    |d«rW    |j#«}t    |d    «r:|€8    |j%dd
«|j#«}|j%|xsd«|€d}t)d||z
«S#tjt f$rYŒ‘wxYw#t&$rd}YŒ?wxYw#t&$r||}YŒRwxYw) 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é)rÚ
isinstancerÚencoderJrPrQÚosÚfstatÚst_sizeÚmodeÚwarningsÚwarnrÚioÚUnsupportedOperationÚAttributeErrorrSrTr7Úmax)ÚoÚ total_lengthÚcurrent_positionrQs    rDÚ    super_lenreˆsy€Ø€LØÐå œJ q¬#Ô.ð H‰HWÓ ˆäˆq)Ôܘ1“v‰ ä    EÔ    Ø—u‘u‰ ä    HÔ    ð    Ø—X‘X“ZˆFôŸ8™8 FÓ+×3Ñ3ˆLð˜!Ÿ&™&Ñ Ü— ‘ ð2ô$õ
ôˆq&Ôð    %Ø Ÿv™v›xÐ ôq˜&Ô! lÐ&:ð    %à—F‘F˜1˜a”LØ#$§6¡6£8Lð—F‘FÐ+Ò0¨qÔ1ðÐØˆ ä ˆq,Ð!1Ñ1Ó 2Ð2øôe×'Ñ'¬Ð8ò    ñ ð        ûôXò%Ø#$’Lð%ûô%ò    0ð
Ð'Ø#/Рùð     0ús6Á*D8ÃE(Ã.7EÄ8EÅEÅ E%Å$E%Å( E8Å7E8cóð—tjjd«}||f}n d„tD«}    ddlm}m}d}|D]D}tj j|«}tj j|«sŒB|}n|€yt|«}    |    j}
    ||«j|
«} | r| drdnd} | | | dfSy#|tf$r|r‚YywxYw#ttf$rYywxYw)z;Returns the Requests tuple auth for a given url from netrc.ÚNETRCNc3ó&K—|]    }d|›–—Œ y­w)z~/N©)Ú.0Úfs  rDú    <genexpr>z!get_netrc_auth.<locals>.<genexpr>Ösèø€Ò9¨˜R ˜sœ8Ñ9ùs‚r)ÚNetrcParseErrorÚnetrcrrU)rXÚenvironÚgetÚ NETRC_FILESrnrmÚpathÚ
expanduserÚexistsrÚhostnameÚauthenticatorsr7r2r`) ÚurlÚ raise_errorsÚ
netrc_fileÚnetrc_locationsrmrnÚ
netrc_pathrkÚlocÚrir?r$Úlogin_is              rDÚget_netrc_authrÏs€ô—‘—‘ Ó(€JØÐØ%˜-‰á9¬[Ô9ˆð  ß0àˆ
à ò    ˆAÜ—'‘'×$Ñ$ QÓ'ˆC܏w‰w~‰~˜cÕ"Ø 
Ùð        ð Ð Ø ä c‹]ˆØ{‰{ˆð
    Ù˜:Ó&×5Ñ5°dÓ;ˆFÙà% ašy™!¨aØ˜w™¨°©Ð3Ð3ðøð ¤Ð)ò    ñØñð    ûô œÐ (ò Ù ð ús<´A C#ÂC#Â
C#Â"+CÃC ÃC#ÃC àC#Ã#C5Ã4C5có¦—t|dd«}|rBt|t«r1|ddk7r(|ddk7rtjj |«Syyyy)z0Tries to guess the filename of the given object.ÚnameNrú<éÿÿÿÿú>)ÚgetattrrVrrXrrÚbasename)Úobjrs  rDÚguess_filenamerˆûsT€ä 3˜ Ó %€DÙ ”
˜4¤Ô,°°a±¸C²ÀDÈÁHÐPSÂO܏w‰w×Ñ Ó%Ð%ðET°Ð,€trGcóR—tjj|«r|Stjj|«\}}|rytjj|«sZtjj|«\}}|sn5dj    ||g«}|r tjj|«sŒZt j |«s|St j|«}||j«vr|Stj«}tjj    ||jd«d«}tjj|«s6t|«5}|j|j|««ddd«|S|S#1swY|SxYw)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)rXrrrtr9ÚjoinÚzipfileÚ
is_zipfileÚZipFileÚnamelistÚtempfileÚ
gettempdirÚ atomic_openÚwriteÚread)rrÚarchiveÚmemberÚprefixÚzip_fileÚtmpÚextracted_pathÚ file_handlers        rDÚextract_zipped_pathsrœsE€ô
 
‡ww‡~~dÔàˆ ô—g‘g—m‘m DÓ)O€GˆVÙ
œ"Ÿ'™'Ÿ.™.¨Ô1ÜŸ'™'Ÿ-™-¨Ó0‰ˆÙð Ø—‘˜6 6Ð*Ó+ˆñ œ"Ÿ'™'Ÿ.™.¨Õ1ô × Ñ ˜gÔ &؈ 䏉˜wÓ'€HØ X×&Ñ&Ó(Ñ(؈ ô ×
€CÜ—W‘W—\‘\ # v§|¡|°CÓ'8¸Ñ'<Ó=€NÜ 7‰7>‰>˜.Ô )ä ˜Ó (ð    6¨LØ × Ñ ˜xŸ}™}¨VÓ4Ô 5÷    6à Ј>Ð÷    6à Ðús Å/!FÆF&c#óJK—tjtjj    |«¬«\}}    tj
|d«5}|–—ddd«tj ||«y#1swYŒ xYw#t$rtj|«‚wxYw­w)z-Write a file to the disk in an atomic fashion)ÚdirÚwbN)    rÚmkstemprXrrÚdirnameÚfdopenr;Ú BaseExceptionÚremove)ÚfilenameÚtmp_descriptorÚtmp_nameÚ tmp_handlers    rDr’r’'s†èø€ô (×/Ñ/´B·G±G·O±OÀHÓ4MÔNÑ€NHðÜ Y‰Y~ tÓ ,ð    ° ØÒ ÷    ä

‰
8˜XÕ&÷    ð    ûô òÜ
    ‰    (ÔØ ðüs4‚7B#ºBÁA4ÁBÁ3B#Á4A=Á9B B  B#cót—|€yt|ttttf«r t d«‚t |«S)aTake 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)rVrrÚboolr5r8r©Úvalues rDÚfrom_key_val_listr®4s6€ð$ €}Øä%œ#œu¤d¬CÐ0Ô1ÜÐFÓGÐGä uÓ ÐrGcó´—|€yt|ttttf«r t d«‚t|t «r|j«}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ª)    rVrrr«r5r8rrIÚlistr¬s rDÚto_key_val_listr±OsJ€ð" €}Øä%œ#œu¤d¬CÐ0Ô1ÜÐFÓGÐGä%œÔ!Ø— ‘ “ ˆä ‹;ÐrGcó—g}t|«D]5}|dd|ddcxk(rdk(rnnt|dd«}|j|«Œ7|S)aParse 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
    Nrrƒú")Ú_parse_list_headerÚunquote_header_valueÚappend)r­ÚresultÚitems   rDÚparse_list_headerr¹msY€ð.€FÜ" 5Ó)òˆØ ˆ8t˜B˜CyÔ ' CÕ 'Ü'¨¨Q¨r¨
Ó3ˆD؏ ‰ dÕðð €MrGcó¶—i}t|«D]H}d|vrd||<Œ |jdd«\}}|dd|ddcxk(rdk(rnnt|dd«}|||<ŒJ|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
    ú=Nrrƒr³)r´r9rµ)r­r·r¸rs    rDÚparse_dict_headerr¼s}€ð,€FÜ" 5Ó)òˆØ d‰?؈F4‰LØ Ø—j‘j  aÓ(‰ ˆˆeØ !ˆ9˜˜b˜c˜
Ô ) cÕ )Ü(¨¨q°¨Ó5ˆE؈ˆtŠ ðð €MrGcó–—|rF|d|dcxk(rdk(r5n|S|dd}|r|dddk7r"|jdd«jd    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
    rrƒr³rNrUz\\ú\z\")r;)r­Ú is_filenames  rDrµrµ°sd€ñ q‘˜U 2™YÔ-¨#Ô-ð €Lða˜ ˆñ˜e B Q˜i¨6Ò1Ø—=‘= ¨Ó.×6Ñ6°u¸cÓBÐ BØ €LrGcóX—|Dcic]}|j|j“Œ}}|Scc}w)z€Returns a key/value dictionary from a CookieJar.
 
    :param cj: CookieJar object to extract cookies from.
    :rtype: dict
    )rr­)ÚcjÚcookieÚ cookie_dicts   rDÚdict_from_cookiejarrÄÉs/€ð<>Ö>°6—;‘; § ¡ Ñ,Ð>€KÐ>Ø Ðùò?s…'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ÁrÃs  rDÚadd_dict_to_cookiejarrÆÔs€ô ˜{¨BÓ /Ð/rGcó^—tjdt«tjdtj
¬«}tjdtj
¬«}tjd«}|j |«|j |«z|j |«zS)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    rDÚget_encodings_from_contentrÐßs‘€ô
 ‡MMð 1ô    ô ô—‘Ð@ÌÏÉÔM€JÜ—
‘
ÐIÔQS×QUÑQUÔV€IÜ Z‰ZÐ?Ó @€Fð    ×ј7Ó#Ø
˜GÓ
$ñ    %à
.‰.˜Ó
!ñ    "ðrGcóH—|jd«}|dj«|dd}}i}d}|D]m}|j«}|sŒ|d}}|jd«}    |    dk7r+|d|    j|«}||    dzdj|«}|||j«<Œo||fS)    z¦Returns content type and parameters from given header
 
    :param header: string
    :return: tuple containing content type and dictionary of
         parameters
    r-rrNz"' Tr»rƒ)r9ÚstripÚfindÚlower)
ÚheaderÚtokensÚ content_typeÚparamsÚ params_dictÚitems_to_stripÚparamÚkeyr­Úindex_of_equalss
          rDÚ_parse_content_type_headerrÞøsÀð\‰\˜#Ó €FØ! !™9Ÿ?™?Ó,¨f°Q°R¨j&€LØ€KØ€Nàò-ˆØ— ‘ “ ˆÚ Ø ˆCØ#Ÿj™j¨›oˆOØ "Ò$ØÐ,˜_Ð-×3Ñ3°NÓCØ˜o°Ñ1Ð3Ð4×:Ñ:¸>ÓJØ',ˆK˜Ÿ    ™    › Ò $ð-ð ˜Ð $Ð$rGcóŒ—|jd«}|syt|«\}}d|vr|djd«Sd|vryd|vryy)    z}Returns encodings from given HTTP Header Dict.
 
    :param headers: dictionary to extract encoding from.
    :rtype: str
    z content-typeNÚcharsetz'"Útextz
ISO-8859-1zapplication/jsonrN)rprÞrÒ)Úheadersr×rØs   rDÚget_encoding_from_headersrãs`€ð—;‘;˜~Ó.€Lá Øä5°lÓCÑ€L&àFÑØiÑ ×&Ñ& uÓ-Ð-à ÑØà˜\Ñ)àð*rGc#óüK—|j€ |Ed{–—†ytj|j«d¬«}|D]}|j|«}|sŒ|–—Œ|jdd¬«}|r|–—yy7Œe­w)zStream decodes an iterator.Nr;©ÚerrorsrGT)Úfinal)ÚencodingÚcodecsÚgetincrementaldecoderÚdecode)ÚiteratorÚrÚdecoderÚchunkÚrvs     rDÚstream_decode_response_unicoderñ*s„èø€ð    ‡zzÐØ×ÐØà6Œf×*Ñ*¨1¯:©:Ó6¸iÔH€GØòˆØ ^‰^˜EÓ "ˆÚ Ø‹Hðð
‰˜ 4ˆÓ    (€BÙ    Ø‹ð
ð    ús‚A<”A:•AA<Á"A<c#óŽK—d}||dkr t|«}|t|«kr||||z–—||z }|t|«krŒyy­w)z Iterate over slices of a string.rN)rP)ÚstringÚ slice_lengthÚposs   rDÚ iter_slicesrö;sWèø€à
€CØÐ˜|¨qÒ0ܘ6“{ˆ Ø
”F“ Ò
ؐS˜3 Ñ-Ð.Ò.Ø ˆ|ш𠔐F“ Õ
ùs ‚AAÁAcó>—tjdt«g}t|j«}|r    t |j |«S    t |j |d¬«S#t$r|j|«YŒ5wxYw#t$r|j cYSwxYw)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ârrÌÚ UnicodeErrorr¶Ú    TypeError)ríÚtried_encodingsrès   rDÚget_unicode_from_responserûEs›€ô ‡MMð 1ô    ô ð€Oô)¨¯©Ó3€Háð    -ܐq—y‘y (Ó+Ð +ð
ܐ1—9‘9˜h¨yÔ9Ð9øô ò    -Ø × "Ñ " 8Ö ,ð    -ûô ò؏y‰yÒðús#µA$Á BÁ$BÂBÂBÂBzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~có†—|jd«}tdt|««D]l}||dd}t|«dk(rI|j«r9    t    t |d««}|tvr|||ddz||<ŒVd||›||<Œbd||›||<Œnd    j|«S#t $rtd|›d«‚wxYw)
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
    ú%rrrUéz"Invalid percent-escape sequence: 'ú'NÚ)
r9ÚrangerPÚisalnumÚchrr5r8r!ÚUNRESERVED_SETr‹)ÚuriÚpartsÚiÚhÚcs     rDÚunquote_unreservedr
rsâ€ð I‰Ic‹N€EÜ 1”c˜%“jÓ !ò &ˆØ !‰HQqˆMˆÜ ˆq‹6QŠ;˜1Ÿ9™9œ;ð LÜœ˜A˜r›
“Oð”NÑ"ؘu Q™x¨¨˜|Ñ+a’à˜u Q™x˜j˜>a’à˜5 ™8˜*~ˆE!ŠHð &ð 7‰75‹>Ðøôò LÜ Ð#EÀaÀSÈÐ!JÓKÐKð Lús ÁB'Â'Ccóp—d}d}    tt|«|¬«S#t$rt||¬«cYSwxYw)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)rr
r!)rÚsafe_with_percentÚsafe_without_percents   rDÚ requote_urirŠsJ€ð/ÐØ0Ðð    5ôÔ'¨Ó,Ð3DÔEÐEøÜ ò5ôSÐ3Ô4Ò4ð    5ús †œ5´5c
ór—tjdtj|««d}|j    d«\}}tjdtjt t |««««d}tjdtj|««d|z}||z||zk(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=LrrŠ)ÚstructÚunpackÚsocketÚ    inet_atonr9Údotted_netmaskr5)ÚipÚnetÚipaddrÚnetaddrÚbitsÚnetmaskÚnetworks       rDÚaddress_in_networkr s˜€ô]‰]˜4¤×!1Ñ!1°"Ó!5Ó 6°qÑ 9€FØ—I‘I˜c“NM€GˆT܏m‰m˜D¤&×"2Ñ"2´>Ä#ÀdÃ)Ó3LÓ"MÓNÈqÑQ€G܏m‰m˜D¤&×"2Ñ"2°7Ó";Ó<¸QÑ?À'ÑI€GØ WÑ  '¨GÑ"3Ñ 4Ð4rGcóp—ddd|z
zdz
z }tjtjd|««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)Úmaskrs  rDrr¯s7€ð ˜˜b 4™i™¨1Ñ,Ñ ,€DÜ × Ñ œFŸK™K¨¨dÓ3Ó 4Ð4rGcóN—    tj|«y#t$rYywxYw)z
    :rtype: bool
    FT)rrr7)Ú    string_ips rDÚis_ipv4_addressr%ºs.€ðÜ×јÔ#ð øô òÙðús ‚˜    $£$có —|jd«dk(rR    t|jd«d«}|dks|dkDry    t    j
|jd«d«yy#t$rYywxYw#t $rYywxYw)zV
    Very simple check of the cidr format in no_proxy variable.
 
    :rtype: bool
    rŠrFrrT)Úcountr5r9r8rrr7)Ústring_networkr"s  rDÚ is_valid_cidrr)Åsœ€ð ×јCÓ  AÒ%ð    Ü~×+Ñ+¨CÓ0°Ñ3Ó4ˆDð !Š8t˜b’yØð    Ü × Ñ ˜^×1Ñ1°#Ó6°qÑ9Ô :ð
ðøôò    Ùð    ûôò    Ùð    ús"–A(¿'A7Á(    A4Á3A4Á7    BÂBc#ó8K—|du}|r2tjj|«}|tj|<    d–—|r(€tj|=y|tj|<yy#|r(€tj|=w|tj|<wwxYw­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)rXrorp)Úenv_namer­Ú value_changedÚ    old_values    rDÚ set_environr.Ýsèø€ð Ð%€MÙÜ—J‘J—N‘N 8Ó,ˆ    Ø$Œ
‰
8Ñð1Û á ØÐ Ü—J‘J˜xÑ(à'0”—
‘
˜8Ò$ð     ø‰=ØÐ Ü—J‘J˜xÑ(à'0”—
‘
˜8Ò$ð     üs‚9B¼A+Á+BÁ+,BÂBcó¾—d„}|}|€|d«}t|«}|j€y|rÙd„|jdd«jd«D«}t    |j«r=|D]7}t |«rt |j|«sŒ%y|j|k(sŒ7yn_|j}|jr|d    |j›z }|D]0}|jj|«s|j|«sŒ0ytd|«5    t|j«}ddd«ryy
#ttjf$rd
}YŒ)wxYw#1swYŒ.xYw) zL
    Returns whether we should bypass proxies or not.
 
    :rtype: bool
    cóž—tjj|«xs-tjj|j««S©N)rXrorpÚupper)rÜs rDÚ    get_proxyz(should_bypass_proxies.<locals>.get_proxyüs-€Üz‰z~‰~˜cÓ"ÒA¤b§j¡j§n¡n°S·Y±Y³[Ó&AÐArGNÚno_proxyTc3ó&K—|]    }|sŒ|–—Œ y­wr1ri)rjr?s  rDrlz(should_bypass_proxies.<locals>.<genexpr> sèø€ÒR˜TÊT”DÑRùs‚Šú rú,ú:F)rrur;r9r%r)rÚportÚendswithr.rrùrÚgaierror)    rwr4r3Ú no_proxy_argÚparsedÚproxy_ipÚhost_with_portr?Úbypasss             rDÚshould_bypass_proxiesrAósZ€òBð
€LØÐÙ˜ZÓ(ˆÜ c‹]€Fà ‡ÐàáñS X×%5Ñ%5°c¸2Ó%>×%DÑ%DÀSÓ%IÔRˆä ˜6Ÿ?™?Ô +Ø$ò  Ü  Ô*Ü)¨&¯/©/¸8ÕDÙ#Ø—_‘_¨Ó0ñ ñ  ð$Ÿ_™_ˆN؏{Š{Ø A f§k¡k ]Ð"3Ñ3à ò  Ø—?‘?×+Ñ+¨DÔ1°^×5LÑ5LÈTÕ5Rñ ð      ô
Z Ó    .ñð    Ü! &§/¡/Ó2ˆF÷ñØà øô œ6Ÿ?™?Ð+ò    ØŠFð    ú÷    ðús*ÄEÄD2Ä2EÅ EÅEÅEÅEcó4—t||¬«riSt«S)zA
    Return a dict of environment proxies.
 
    :rtype: dict
    ©r4)rAr)rwr4s  rDÚget_environ_proxiesrD0s€ô ˜S¨8Õ4؈    ä‹|ÐrGcó.—|xsi}t|«}|j€+|j|j|jd««S|jdz|jz|jd|jzdg}d}|D]}||vsŒ||}|S|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://zall://)rrurpÚscheme)rwÚproxiesÚurlpartsÚ
proxy_keysÚproxyÚ    proxy_keys      rDÚ select_proxyrM<s¯€ð Šm˜€Gܘ‹}€HØ×ÑР؏{‰{˜8Ÿ?™?¨G¯K©K¸Ó,>Ó?Ð?ð    ‰˜%Ñ (×"3Ñ"3Ñ3؏‰Ø8×$Ñ$Ñ$Ø ð    €Jð €EØòˆ    Ø ˜Ò ؘIÑ&ˆEØ à €Lð ð
€LrGcó8—||ni}|j}t|«j}|jd«}|j    «}|rOt ||¬«sBt ||¬«}|j||jd««}|r|j||«|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
    r4rCrF)rwrrGrpÚcopyrArDÚ
setdefault)    ÚrequestrHÚ    trust_envrwrGr4Ú new_proxiesÚenviron_proxiesrKs             rDÚresolve_proxiesrUVs€ð!Ð,‰g°"€GØ
+‰+€CÜ c‹]× !Ñ !€F؏{‰{˜:Ó&€HØ—,‘,“.€KáÔ.¨s¸XÕFÜ-¨c¸HÔEˆà×#Ñ# F¨O×,?Ñ,?ÀÓ,FÓGˆá Ø × "Ñ " 6¨5Ô 1Ø ÐrGcó—|›dt›S)zO
    Return a string representing the default user agent.
 
    :rtype: str
    rŠr)rs rDÚdefault_user_agentrWqs€ð ˆV1”[MÐ "Ð"rGcó:—tt«tdddœ«S)z9
    :rtype: requests.structures.CaseInsensitiveDict
    z*/*z
keep-alive)z
User-AgentzAccept-EncodingÚAcceptÚ
Connection)r#rWÚDEFAULT_ACCEPT_ENCODINGrirGrDÚdefault_headersr\zs%€ô ä,Ó.Ü6ØØ&ñ        
ó ðrGcóÄ—g}d}|j|«}|s|Stjd|«D]Š}    |jdd«\}}d|jd«i}|jd«D]:}    |jd«\}}|j|«||j|«<Œ<|j    |«ŒŒ|S#t$r|d}}YŒ…wxYw#t$rYŒ4wxYw)    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-rrrwz<> '"r»)rÒr<r9r8r¶)    r­ÚlinksÚ replace_charsÚvalrwrØÚlinkrÛrÜs             rDÚparse_header_linksrbˆsý€ð €Eà€Mà K‰K˜ Ó &€E٠؈ äx‰x˜ Ó&òˆð    "ØŸ)™) C¨Ó+‰KˆCðs—y‘y Ó*Ð+ˆà—\‘\ #Ó&ò    HˆEð Ø"Ÿ[™[¨Ó-‘
Uð.3¯[©[¸Ó-GˆD—‘˜=Ó)Ò *ð     Hð     ‰ TÕð!ð$ €Løôò    "ؘrŠCð    "ûôò Úð ús#´B?Á1CÂ? CÃCà   CÃCúÚasciirUécóŒ—|dd}|tjtjfvry|ddtjk(ry|ddtjtj
fvry|j t«}|dk(ry    |dk(r |ddd…tk(ry
|d dd…tk(ry |dk(r|ddtk(ry |d dtk(ryy)z
    :rtype: str
    Nézutf-32rez    utf-8-sigrUzutf-16rrNz    utf-16-berz    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   rDÚguess_json_utfrs³sՀð"1ˆX€FØ ”&×%Ñ%¤v×':Ñ':Ð;Ñ;ØØ ˆbˆq€z”V—_‘_Ò$ØØ ˆbˆq€z”f×)Ñ)¬6×+>Ñ+>Ð?Ñ?ØØ— ‘ œUÓ#€IؐA‚~ØØA‚~Ø ‘#A#‰;œ&Ò  ØØ !$Q$‰<œ6Ò !ØàA‚~Ø "1ˆ:œÒ ØØ !"ˆ:œÒ Øà rGcó¬—t|«}|\}}}}}}}    |j}
|
s||
}}
|rdj||
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
    ú@r)rÚnetlocr‹r) rwÚ
new_schemer=rGÚauthr?r9rrÚqueryÚfragmentrvs            rDÚprepend_scheme_if_neededr{Ós{€ô s‹^€FØ6<Ñ3€FˆD$˜˜d E¨8ð ]‰]€F٠ؘVˆá 𗑘4 ˜.Ó)ˆØ €~ØˆØ €|Øˆä v˜v t¨R°¸ÐAÓ BÐBrGcó¢—t|«}    t|j«t|j«f}|S#tt
f$rd}Y|SwxYw)z{Given a url with authentication components, extract them into a tuple of
    username,password.
 
    :rtype: (str,str)
    )rr)rrÚusernameÚpasswordr`rù)rwr=rxs   rDÚget_auth_from_urlrðsU€ô c‹]€FðܘŸ™Ó(¬'°&·/±/Ó*BÐCˆð €Køô œIÐ &òØ‰à €Kðús*9¹AÁ AcóB—|\}}t||d«t||d«y)z§Verifies that header parts don't contain leading whitespace
    reserved characters, or return characters.
 
    :param header: tuple, in the format (name, value).
    rrN)Ú_validate_header_part)rÕrr­s   rDÚcheck_header_validityr‚s%€ð K€Dˆ%ܘ& $¨Ô*ܘ& %¨Õ+rGc
óü—t|t«r
t|}n7t|t«r
t|}nt d|›d|›dt |«›«‚|j|«s|dk(rdnd}t d|›d|›«‚y)    Nz Header part (z) from z# must be of type str or bytes, not rrr­zTInvalid leading whitespace, reserved character(s), or return character(s) in header z: )rVrr rr
r Útyper=)rÕÚ header_partÚheader_validator_indexÚ    validatorÚ header_kinds     rDrr s €Ü+œsÔ#Ü*Ð+AÑB‰    Ü    K¤Ô    'Ü+Ð,BÑC‰    äؘK˜?¨'°&°ð:1Ü15°kÓ1BÐ0Cð Eó
ð    
ð
?‰?˜;Ô 'Ø 6¸!Ò ;‘fÀˆ Üð&Ø&1 ]°"°[°Oð Eó
ð    
ð (rGcó~—t|«\}}}}}}|s||}}|jdd«d}t|||||df«S)zW
    Given a url remove the fragment and the authentication part.
 
    :rtype: str
    rurrƒr)rÚrsplitr)rwrGrvrrrØryrzs       rDÚ urldefragauthr‹sU€ô 5=¸S³MÑ1€FˆFD˜& %¨ñ ؘVˆà ]‰]˜3 Ó " 2Ñ &€Fä v˜v t¨V°U¸BÐ?Ó @Ð@rGcó֗t|jdd«}|.t|jt«r    ||j«yt d«‚#t
$r t d«‚wxYw)zfMove file pointer back to its recorded starting position
    so it can be read again on redirect.
    rTNz;An error occurred when rewinding request body for redirect.z+Unable to rewind request body for redirect.)r…ÚbodyrVÚ_body_positionrr7r")Úprepared_requestÚ    body_seeks  rDÚ rewind_bodyr‘/st€ôÐ(×-Ñ-¨v°tÓ<€IØÐ¤Ø×'Ñ'¬ô"ð    Ù Ð&×5Ñ5Õ 6ô $Ð$QÓRÐRøô ò    Ü'ØMóð ð    ús µAÁA()Fr1)T)zpython-requests)kÚ__doc__réÚ
contextlibr^rXr<rrÚsysrr\rŒÚ collectionsrÚpip._vendor.urllib3.utilrrrrr    Ú_internal_utilsr
r r r Úcompatrrrrrrrrr´rrrrrrrÚcookiesrÚ
exceptionsrr r!r"Ú
structuresr#rqÚwhereÚDEFAULT_CA_BUNDLE_PATHÚ DEFAULT_PORTSr‹r9r[ÚplatformrErLrerrˆrœÚcontextmanagerr’r®r±r¹r¼rµrÄrÆrÐrÞrãrñrörûÚ    frozensetrr
rrrr%r)r.rArDrMrUrWr\rbrWrmrnrorsr{rr‚rr‹r‘rirGrDú<module>r¢s ðñóÛÛ    Û    Û    Û Û Û
ÛÛÛÝ#ç<åÝ$÷ó÷ ÷ñõ:÷÷ñõ)÷óõ ,à"€ à$˜Ÿ™›Ðà cÑ*€ ðŸ)™)Ø €B‡HHˆW‘l°4Ô8Ð9JÑKÓLóÐð
‡<<7Òò$òL    /ò òD3óN) òX&ò"ðJ ×Ññ    óð    òò6ò<ò@óFò2ò0òò2%ò2ò2ò"ò$ñPØMó€ò
ò05ò, 5ò5òòð0 ×Ññ1óð1ò*:óz    òó4ó6#ò ò"ðL     ‰ gӀؠ   ‰€Ø    ‰€òò@Cò: ò ,ò
ò&Aó"SrG