/opt/alt/python311/lib64/python3.11/urllib/__pycache__
NameSizeModeActions
error.cpython-311.opt-1.pyc38980644editdlrm
error.cpython-311.opt-2.pyc32240644editdlrm
error.cpython-311.pyc38980644editdlrm
parse.cpython-311.opt-1.pyc555460644editdlrm
parse.cpython-311.opt-2.pyc449590644editdlrm
parse.cpython-311.pyc555460644editdlrm
request.cpython-311.opt-1.pyc1265490644editdlrm
request.cpython-311.opt-2.pyc1145550644editdlrm
request.cpython-311.pyc1267680644editdlrm
response.cpython-311.opt-1.pyc52060644editdlrm
response.cpython-311.opt-2.pyc46300644editdlrm
response.cpython-311.pyc52060644editdlrm
robotparser.cpython-311.opt-1.pyc133470644editdlrm
robotparser.cpython-311.opt-2.pyc120230644editdlrm
robotparser.cpython-311.pyc133470644editdlrm
__init__.cpython-311.opt-1.pyc1630644editdlrm
__init__.cpython-311.opt-2.pyc1630644editdlrm
__init__.cpython-311.pyc1630644editdlrm
Edit: /opt/alt/python311/lib64/python3.11/urllib/__pycache__/request.cpython-311.opt-1.pyc (126549B)
§ ù3hŽRæXãó>—dZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlmZmZmZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(ddl)m*Z*m+Z+ ddl,Z,dZ-n #e.$rdZ-YnwxYwgd¢Z/d e j0dd …zZ1da2de j3fddddd œd „Z4d „Z5gZ6dgd„Z7d„Z8e j9de j:¦«Z;d„Z<Gd„d¦«Z=Gd„d¦«Z>d„Z?Gd„d¦«Z@Gd„de@¦«ZAGd„de@¦«ZBGd„de@¦«ZCd„ZDGd „d!e@¦«ZEGd"„d#¦«ZFGd$„d%eF¦«ZGGd&„d'eG¦«ZHGd(„d)¦«ZIGd*„d+eIe@¦«ZJGd,„d-eIe@¦«ZKejLZMGd.„d/¦«ZNGd0„d1e@eN¦«ZOGd2„d3e@eN¦«ZPGd4„d5e@¦«ZQGd6„d7eQ¦«ZReSejTd8¦«r#Gd9„d:eQ¦«ZUe/ Vd:¦«Gd;„de@¦«ZXd?„ZYd@„ZZGdA„dBe@¦«Z[dC„Z\GdD„dEe@¦«Z]GdF„dGe]¦«Z^GdH„dIe@¦«Z_dJZ`ejadKkr ddLlbmcZcmdZdndM„ZcdN„ZdiZeGdO„dP¦«ZfGdQ„dRef¦«ZgdahdS„ZidajdT„ZkdaldU„ZmdandV„ZoGdW„dX¦«ZpdY„ZqdhdZ„Zrd[„Zsd\„Zte jud]krdd^lvmwZwmxZxd_„Zyd`„Zzda„Z{db„Z|dSejadKkrdc„Z}dd„Z|de„Z~df„Z{dSeqZ|erZ{dS)ia¡ An extensible library for opening URLs using a variety of protocols The simplest way to use this module is to call the urlopen function, which accepts a string containing a URL or a Request object (described below). It opens the URL and returns the results as file-like object; the returned object has some extra methods described below. The OpenerDirector manages a collection of Handler objects that do all the actual work. Each Handler implements a particular protocol or option. The OpenerDirector is a composite object that invokes the Handlers needed to open the requested URL. For example, the HTTPHandler performs HTTP GET and POST requests and deals with non-error returns. The HTTPRedirectHandler automatically deals with HTTP 301, 302, 303, 307, and 308 redirect errors, and the HTTPDigestAuthHandler deals with digest authentication. urlopen(url, data=None) -- Basic usage is the same as original urllib. pass the url and optionally data to post to an HTTP URL, and get a file-like object back. One difference is that you can also pass a Request instance instead of URL. Raises a URLError (subclass of OSError); for HTTP errors, raises an HTTPError, which can also be treated as a valid response. build_opener -- Function that creates a new OpenerDirector instance. Will install the default handlers. Accepts one or more Handlers as arguments, either instances or Handler classes that it will instantiate. If one of the argument is a subclass of the default handler, the argument will be installed instead of the default. install_opener -- Installs a new opener as the default opener. objects of interest: OpenerDirector -- Sets up the User Agent as the Python-urllib client and manages the Handler classes, while dealing with requests and responses. Request -- An object that encapsulates the state of a request. The state can be as simple as the URL. It can also include extra HTTP headers, e.g. a User-Agent. BaseHandler -- internals: BaseHandler and parent _call_chain conventions Example usage: import urllib.request # set up authentication info authinfo = urllib.request.HTTPBasicAuthHandler() authinfo.add_password(realm='PDQ Application', uri='https://mahler:8092/site-updates.py', user='klem', passwd='geheim$parole') proxy_support = urllib.request.ProxyHandler({"http" : "http://ahad-haam:3128"}) # build a new opener that adds authentication and caching FTP handlers opener = urllib.request.build_opener(proxy_support, authinfo, urllib.request.CacheFTPHandler) # install it urllib.request.install_opener(opener) f = urllib.request.urlopen('https://www.python.org/') éN)ÚURLErrorÚ HTTPErrorÚContentTooShortError)ÚurlparseÚurlsplitÚurljoinÚunwrapÚquoteÚunquoteÚ _splittypeÚ _splithostÚ _splitportÚ _splituserÚ _splitpasswdÚ _splitattrÚ _splitqueryÚ _splitvalueÚ _splittagÚ _to_bytesÚunquote_to_bytesÚ urlunparse)Ú addinfourlÚ addclosehookTF)!ÚRequestÚOpenerDirectorÚ BaseHandlerÚHTTPDefaultErrorHandlerÚHTTPRedirectHandlerÚHTTPCookieProcessorÚ ProxyHandlerÚHTTPPasswordMgrÚHTTPPasswordMgrWithDefaultRealmÚHTTPPasswordMgrWithPriorAuthÚAbstractBasicAuthHandlerÚHTTPBasicAuthHandlerÚProxyBasicAuthHandlerÚAbstractDigestAuthHandlerÚHTTPDigestAuthHandlerÚProxyDigestAuthHandlerÚ HTTPHandlerÚ FileHandlerÚ FTPHandlerÚCacheFTPHandlerÚ DataHandlerÚUnknownHandlerÚHTTPErrorProcessorÚurlopenÚinstall_openerÚ build_openerÚ pathname2urlÚ url2pathnameÚ getproxiesÚ urlretrieveÚ urlcleanupÚ URLopenerÚFancyURLopenerz%d.%dé)ÚcafileÚcapathÚ cadefaultÚcontextcóú—|s|s|ržddl}|jdtd¦«|�td¦«‚tstd¦«‚t jt jj||¬¦«}|  dg¦«t|¬ ¦«}t|¦«} nA|r t|¬ ¦«}t|¦«} nt€t¦«xa } nt} |   |||¦«S) aùOpen the URL url, which can be either a string or a Request object. *data* must be an object specifying additional data to be sent to the server, or None if no such data is needed. See Request for details. urllib.request module uses HTTP/1.1 and includes a "Connection:close" header in its HTTP requests. The optional *timeout* parameter specifies a timeout in seconds for blocking operations like the connection attempt (if not specified, the global default timeout setting will be used). This only works for HTTP, HTTPS and FTP connections. If *context* is specified, it must be a ssl.SSLContext instance describing the various SSL options. See HTTPSConnection for more details. The optional *cafile* and *capath* parameters specify a set of trusted CA certificates for HTTPS requests. cafile should point to a single file containing a bundle of CA certificates, whereas capath should point to a directory of hashed certificate files. More information can be found in ssl.SSLContext.load_verify_locations(). The *cadefault* parameter is ignored. This function always returns an object which can work as a context manager and has the properties url, headers, and status. See urllib.response.addinfourl for more detail on these properties. For HTTP and HTTPS URLs, this function returns a http.client.HTTPResponse object slightly modified. In addition to the three new methods above, the msg attribute contains the same information as the reason attribute --- the reason phrase returned by the server --- instead of the response headers as it is specified in the documentation for HTTPResponse. For FTP, file, and data URLs and requests explicitly handled by legacy URLopener and FancyURLopener classes, this function returns a urllib.response.addinfourl object. Note that None may be returned if no handler handles the request (though the default installed global OpenerDirector uses UnknownHandler to ensure this never happens). In addition, if proxy settings are detected (for example, when a *_proxy environment variable like http_proxy is set), ProxyHandler is default installed and makes sure the requests are handled through the proxy. rNzJcafile, capath and cadefault are deprecated, use a custom context instead.r;zDYou can't pass both context and any of cafile, capath, and cadefaultzSSL support not available)r<r=zhttp/1.1)r?)ÚwarningsÚwarnÚDeprecationWarningÚ ValueErrorÚ _have_sslÚsslÚcreate_default_contextÚPurposeÚ SERVER_AUTHÚset_alpn_protocolsÚ HTTPSHandlerr3Ú_openerÚopen) ÚurlÚdataÚtimeoutr<r=r>r?rAÚ https_handlerÚopeners ú5/opt/alt/python311/lib64/python3.11/urllib/request.pyr1r1‹s/€ðhð�ð˜9ðØˆˆˆØˆŒ ð0Ý1CÀQñ Hô Hð Hà Ð Ýðñôð õð :ÝÐ8Ñ9Ô9Ð 9ÝÔ,­S¬[Ô-DØ4:Ø4:ð<ñ<ô<ˆð ×"Ò" J <Ñ0Ô0Ð0Ý$¨WÐ5Ñ5Ô5ˆ ݘmÑ,Ô,ˆˆØ ðÝ$¨WÐ5Ñ5Ô5ˆ ݘmÑ,Ô,ˆˆÝ ˆÝ'™>œ>Ð)ˆ�&�&åˆØ �;Š;�s˜D 'Ñ *Ô *Ð*ócó —|adS©N)rL)rRs rSr2r2Ús €à€G€G€GrTcóL—t|¦«\}}tjt||¦«¦«5}| ¦«}|dkr/|s-t j |¦«|fcddd¦«S|rt|d¦«}n6tj d¬¦«}|j }t  |¦«|5||f} d} d} d} d} d |vrt|d ¦«} |r || | | ¦« | | ¦«}|sn<| t!|¦«z } | |¦«| d z } |r || | | ¦«ŒT ddd¦«n #1swxYwYddd¦«n #1swxYwY| dkr| | krt%d | | fz| ¦«‚| S)aW Retrieve a URL into a temporary location on disk. Requires a URL argument. If a filename is passed, it is used as the temporary file location. The reporthook argument should be a callable that accepts a block number, a read size, and the total file size of the URL target. The data argument should be valid URL encoded data. If a filename is passed and the URL points to a local resource, the result is a copy from local file to new file. Returns a tuple containing the path to the newly created data file as well as the resulting HTTPMessage object. ÚfileNÚwbF)Údeleteé éÿÿÿÿrúcontent-lengthúContent-LengthTéú1retrieval incomplete: got only %i out of %i bytes)r Ú contextlibÚclosingr1ÚinfoÚosÚpathÚnormpathrMÚtempfileÚNamedTemporaryFileÚnameÚ_url_tempfilesÚappendÚintÚreadÚlenÚwriter)rNÚfilenameÚ reporthookrOÚurl_typereÚfpÚheadersÚtfpÚresultÚbsÚsizermÚblocknumÚblocks rSr7r7ßsŠ€õ   ‘_”_�N€Hˆdå Ô �G C¨Ñ.Ô.Ñ /Ô /ð$3°2Ø—'’'‘)”)ˆð �vÒ Ð  hÐ Ý”7×#Ò# DÑ)Ô)¨7Ð2ð $3ð$3ð$3ð$3ñ$3ô$3ð$3ð$3ð ð ,Ý�x Ñ&Ô&ˆCˆCåÔ-°UÐ;Ñ;Ô;ˆCØ”xˆHÝ × !Ò ! (Ñ +Ô +Ð +à ð 3ð 3ؘwÐ&ˆF؈B؈D؈D؈HØ 7Ð*Ð*ݘ7Ð#3Ô4Ñ5Ô5�àð /Ø� ˜8 R¨Ñ.Ô.Ð.ð 3ØŸš ™ œ �ØðØØ�˜E™ œ Ñ"�Ø— ’ ˜%Ñ Ô Ð Ø˜A‘ �Øð3Ø�J˜x¨¨TÑ2Ô2Ð2ð 3ðð 3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3ð!$3ð$3ð$3ñ$3ô$3ð$3ð$3ð$3ð$3ð$3ð$3øøøð$3ð$3ð$3ð$3ðL ˆq‚y€y�T˜D’[�[Ý"Ø ?Ø�Tˆlñ Ø"ñ$ô$ð $ð €Ms=µ=E8Á?A E8à B E!Å E8Å!E% Å%E8Å(E% Å)E8Å8E<Å?E<cóŽ—tD]'} tj|¦«Œ#t$rYŒ$wxYwtdd…=trdadSdS)z0Clean up temporary files from urlretrieve calls.N)rjrdÚunlinkÚOSErrorrL)Ú temp_files rSr8r8sr€å#ððˆ ð Ý ŒI�iÑ Ô Ð Ð øÝð ð ð Ø ˆDð øøøõ �q�q�qÐåðØˆˆˆððs ‹   -¬-z:\d+$cóÒ—|j}t|¦«d}|dkr| dd¦«}t d|d¦«}| ¦«S)zˆReturn request-host, as defined by RFC 2965. Variation from RFC: returned value is lowercased, for convenient comparison. r_ÚÚHost)Úfull_urlrÚ get_headerÚ _cut_port_reÚsubÚlower)ÚrequestrNÚhosts rSÚ request_hostr‰-sa€ð Ô €CÝ �C‰=Œ=˜Ô €DØ ˆr‚z€zØ×!Ò! &¨"Ñ-Ô-ˆõ × Ò ˜B  aÑ (Ô (€DØ �:Š:‰<Œ<ÐrTcó—eZdZdidddfd„Zed„¦«Zejd„¦«Zejd„¦«Zed„¦«Zejd„¦«Zejd „¦«Zd „Z d „Z d „Z d „Z d„Z d„Zd„Zd„Zdd„Zd„Zd„ZdS)rNFcó—||_i|_i|_d|_||_d|_| ¦«D]\}}| ||¦«Œ|€t|¦«}||_ ||_ |r ||_ dSdSrV) r‚rtÚunredirected_hdrsÚ_datarOÚ _tunnel_hostÚitemsÚ add_headerr‰Úorigin_req_hostÚ unverifiableÚmethod) ÚselfrNrOrtr‘r’r“ÚkeyÚvalues rSÚ__init__zRequest.__init__?s¢€ðˆŒ ؈Œ Ø!#ˆÔ؈Œ ؈Œ Ø ˆÔØ!Ÿ-š-™/œ/ð (ð (‰JˆC�Ø �OŠO˜C Ñ 'Ô 'Ð 'Ð 'Ø Ð "Ý*¨4Ñ0Ô0ˆOØ.ˆÔØ(ˆÔØ ð !Ø ˆDŒKˆKˆKð !ð !rTcó^—|jr d |j|j¦«S|jS)Nz{}#{})ÚfragmentÚformatÚ _full_url©r”s rSr‚zRequest.full_urlQs-€à Œ=ð AØ—>’> $¤.°$´-Ñ@Ô@Ð @ØŒ~ÐrTcó˜—t|¦«|_t|j¦«\|_|_| ¦«dSrV)r r›rr™Ú_parse©r”rNs rSr‚zRequest.full_urlWs:€õ  ™œˆŒÝ(1°$´.Ñ(AÔ(AÑ%ˆŒ˜œ Ø � Š ‰ Œ ˆ ˆ ˆ rTcó0—d|_d|_d|_dS)Nr€)r›r™Úselectorrœs rSr‚zRequest.full_url^s€àˆŒØˆŒ ؈Œ ˆ ˆ rTcó—|jSrV)r�rœs rSrOz Request.datads €àŒzÐrTcó†—||jkr3||_| d¦«r| d¦«dSdSdS)NúContent-length)r�Ú has_headerÚ remove_header)r”rOs rSrOz Request.datahsZ€à �4”:Ò Ð ØˆDŒJð�ŠÐ/Ñ0Ô0ð 5Ø×"Ò"Ð#3Ñ4Ô4Ð4Ð4Ð4ð Ð ð  5ð 5rTcó—d|_dSrV)rOrœs rSrOz Request.datars €àˆŒ ˆ ˆ rTcóö—t|j¦«\|_}|j€td|jz¦«‚t |¦«\|_|_|jrt|j¦«|_dSdS)Nzunknown url type: %r) r r›ÚtyperDr‚r rˆr¡r )r”Úrests rSržzRequest._parsevst€Ý$ T¤^Ñ4Ô4‰ˆŒ �4Ø Œ9Ð ÝÐ3°d´mÑCÑDÔDÐ DÝ#-¨dÑ#3Ô#3Ñ ˆŒ �4”=Ø Œ9ð +Ý ¤ Ñ*Ô*ˆDŒIˆIˆIð +ð +rTcó:—|j�dnd}t|d|¦«S)z3Return a string indicating the HTTP request method.NÚPOSTÚGETr“)rOÚgetattr)r”Údefault_methods rSÚ get_methodzRequest.get_method~s$€à#'¤9Ð#8˜˜¸eˆÝ�t˜X ~Ñ6Ô6Ð6rTcó—|jSrV)r‚rœs rSÚ get_full_urlzRequest.get_full_urlƒs €ØŒ}ÐrTcóx—|jdkr|js |j|_n||_|j|_||_dS)NÚhttps)r©rŽrˆr‚r¡)r”rˆr©s rSÚ set_proxyzRequest.set_proxy†s?€Ø Œ9˜Ò Ð ¨Ô(9Ð Ø $¤ ˆDÔ Ð àˆDŒIØ œMˆDŒM؈Œ ˆ ˆ rTcó"—|j|jkSrV)r¡r‚rœs rSÚ has_proxyzRequest.has_proxyŽs€ØŒ} ¤ Ò-Ð-rTcó>—||j| ¦«<dSrV)rtÚ capitalize©r”r•Úvals rSr�zRequest.add_header‘s€à),ˆŒ �S—^’^Ñ%Ô%Ñ&Ð&Ð&rTcó>—||j| ¦«<dSrV)rŒr¹rºs rSÚadd_unredirected_headerzRequest.add_unredirected_header•s€à36ˆÔ˜sŸ~š~Ñ/Ô/Ñ0Ð0Ð0rTcó&—||jvp||jvSrV)rtrŒ©r”Ú header_names rSr¥zRequest.has_header™s!€Ø˜tœ|Ð+ð6ؘtÔ5Ð5ð 7rTcój—|j ||j ||¦«¦«SrV)rtÚgetrŒ)r”rÀÚdefaults rSrƒzRequest.get_header�s5€ØŒ|×ÒØ Ø Ô "× &Ò & {°GÑ <Ô <ñ>ô>ð >rTcór—|j |d¦«|j |d¦«dSrV)rtÚpoprŒr¿s rSr¦zRequest.remove_header¢s9€Ø Œ ×Ò˜ dÑ+Ô+Ð+Ø Ô×"Ò" ;°Ñ5Ô5Ð5Ð5Ð5rTcód—i|j¥|j¥}t| ¦«¦«SrV)rŒrtÚlistr�)r”Úhdrss rSÚ header_itemszRequest.header_items¦s,€Ø9�$Ô(Ð9¨D¬LÐ9ˆÝ�D—J’J‘L”LÑ!Ô!Ð!rTrV)Ú__name__Ú __module__Ú __qualname__r—Úpropertyr‚ÚsetterÚdeleterrOržr°r²rµr·r�r½r¥rƒr¦rÉ©rTrSrr=s‹€€€€€à!%¨rØ!%°EØð!ð!ð!ð!ð$ððñ„Xðð „_ððñ„_ðð ÔððñÔðð ððñ„Xðð „[ð5ð5ñ„[ð5ð „\ððñ„\ðð+ð+ð+ð7ð7ð7ð ðððððð.ð.ð.ð-ð-ð-ð7ð7ð7ð7ð7ð7ð>ð>ð>ð>ð 6ð6ð6ð"ð"ð"ð"ð"rTrcóJ—eZdZd„Zd„Zd„Zd„Zdejfd„Z d d„Z d„Z dS) rcót—dtz}d|fg|_g|_i|_i|_i|_i|_dS)NúPython-urllib/%sz User-agent)Ú __version__Ú addheadersÚhandlersÚ handle_openÚ handle_errorÚprocess_responseÚprocess_request)r”Úclient_versions rSr—zOpenerDirector.__init__«sH€Ø+­kÑ9ˆØ(¨.Ð9Ð:ˆŒàˆŒ àˆÔØˆÔØ "ˆÔØ!ˆÔÐÐrTcóL—t|d¦«stdt|¦«z¦«‚d}t|¦«D�].}|dvrŒ| d¦«}|d|…}||dzd…}| d¦«ro| d¦«|zdz}||dzd…} t |¦«}n#t$rYnwxYw|j  |i¦«} | |j|<n1|dkr |}|j } n!|d kr |}|j } n|d kr |}|j } nŒé|   |g¦«} | rtj| |¦«n|  |¦«d }�Œ0|r1tj|j|¦«| |¦«dSdS) NÚ add_parentz%expected BaseHandler instance, got %rF)Úredirect_requestÚdo_openÚ proxy_openÚ_r_ÚerrorrMÚresponser‡T)ÚhasattrÚ TypeErrorr©ÚdirÚfindÚ startswithrlrDrØrÂr×rÙrÚÚ setdefaultÚbisectÚinsortrkrÖrÝ) r”ÚhandlerÚaddedÚmethÚiÚprotocolÚ conditionÚjÚkindÚlookuprÖs rSÚ add_handlerzOpenerDirector.add_handler¶s€Ý�w  Ñ-Ô-ð +ÝÐCÝ  ™MœMñ*ñ+ô+ð +ðˆÝ˜‘L”Lð# ñ# ˆDØÐDÐDÐDàà— ’ ˜#‘”ˆAؘB˜Q˜B”xˆHؘQ˜q™S˜T˜Tœ ˆIà×#Ò# GÑ,Ô,ð Ø—N’N 3Ñ'Ô'¨!Ñ+¨aÑ/�ؘA˜a™C˜D˜D”z�ðݘt™9œ9�D�DøÝ!ðððØ�DðøøøàÔ*×.Ò.¨x¸Ñ<Ô<�Ø.4�Ô! (Ñ+Ð+ؘfÒ$Ð$Ø�ØÔ)��ؘjÒ(Ð(Ø�ØÔ.��ؘiÒ'Ð'Ø�ØÔ-��àà×(Ò(¨¨rÑ2Ô2ˆHØð )Ý” ˜h¨Ñ0Ô0Ð0Ð0à—’ Ñ(Ô(Ð(؈E‰Eà ð %Ý ŒM˜$œ-¨Ñ 1Ô 1Ð 1Ø × Ò ˜tÑ $Ô $Ð $Ð $Ð $ð %ð %sÂ3Cà CÃCcó—dSrVrÐrœs rSÚclosezOpenerDirector.closeåó€à ˆrTcór—| |d¦«}|D]}t||¦«}||Ž}|�|cSŒdS)NrÐ)rÂr®) r”ÚchainróÚ meth_nameÚargsrÖrìÚfuncrvs rSÚ _call_chainzOpenerDirector._call_chainés^€ð—9’9˜T 2Ñ&Ô&ˆØð ð ˆGݘ7 IÑ.Ô.ˆDØ�T˜4�[ˆFØÐ!Ø� � � ð"ð ð rTNcó—t|t¦«rt||¦«}n |}|�||_||_|j}|dz}|j |g¦«D]}t||¦«}||¦«}Œtj d|j |j|j |  ¦«¦«| ||¦«} |dz}|j |g¦«D]}t||¦«}||| ¦«} Œ| S)NÚ_requestzurllib.RequestÚ _response)Ú isinstanceÚstrrrOrPr©rÚrÂr®ÚsysÚauditr‚rtr°Ú_openrÙ) r”ÚfullurlrOrPÚreqrðrûÚ processorrîrãs rSrMzOpenerDirector.openôs"€å �g�sÑ #Ô #ð ݘ' 4Ñ(Ô(ˆCˆCàˆCØÐØ�”àˆŒ Ø”8ˆð˜ZÑ'ˆ ØÔ-×1Ò1°(¸BÑ?Ô?ð ð ˆIݘ9 iÑ0Ô0ˆDØ�$�s‘)”)ˆCˆCå Œ Ð" C¤L°#´(¸C¼KÈÏÊÑIYÔIYÑZÔZÐZØ—:’:˜c 4Ñ(Ô(ˆð˜[Ñ(ˆ ØÔ.×2Ò2°8¸RÑ@Ô@ð +ð +ˆIݘ9 iÑ0Ô0ˆDØ�t˜C Ñ*Ô*ˆHˆHàˆrTcóÔ—| |jdd|¦«}|r|S|j}| |j||dz|¦«}|r|S| |jdd|¦«S)NrÃÚ default_openrÚunknownÚ unknown_open)rþr×r©)r”rrOrvrðs rSrzOpenerDirector._opens‘€Ø×!Ò! $Ô"2°IØ"0°#ñ7ô7ˆà ð ØˆMà”8ˆØ×!Ò! $Ô"2°H¸hØ")ñ?*Ø+.ñ0ô0ˆà ð ØˆMà×Ò Ô 0°)Ø .°ñ5ô5ð 5rTcó¼—|dvr|jd}|d}d|z}d}|}n|j}|dz}d}|||f|z}|j|Ž}|r|S|r|dd f|z}|j|ŽSdS) N©Úhttpr´rr;z http_error_%sr_Ú_errorrrÃÚhttp_error_default)rØrþ)r”ÚprotorüÚdictrûÚhttp_errÚ orig_argsrvs rSrâzOpenerDirector.error s²€Ø Ð%Ð %Ð %àÔ$ VÔ,ˆDؘ”GˆEØ'¨%Ñ/ˆI؈H؈IˆIàÔ$ˆDØ Ñ(ˆI؈HØ�e˜YÐ'¨$Ñ.ˆØ!�Ô! 4Ð(ˆØ ð ØˆMà ð +ؘ)Ð%9Ð:¸YÑFˆDØ#�4Ô# TÐ*Ð *ð +ð +rTrV) rÊrËrÌr—rõr÷rþÚsocketÚ_GLOBAL_DEFAULT_TIMEOUTrMrrârÐrTrSrrªs’€€€€€ð "ð "ð "ð-%ð-%ð-%ð^ ð ð ð ð ð ð"&¨vÔ/Mððððð: 5ð 5ð 5ð 5ð+ð+ð+ð+ð+rTrc óÔ—t¦«}ttttt t tttg }ttj d¦«r|  t¦«t¦«}|D]g}|D]b}t!|t"¦«r&t%||¦«r| |¦«Œ=t!||¦«r| |¦«ŒcŒh|D]}| |¦«Œ|D]}| |¦«¦«Œ |D]6}t!|t"¦«r |¦«}| |¦«Œ7|S)a*Create an opener object from a list of handlers. The opener will use several default handlers, including support for HTTP, FTP and when applicable HTTPS. If any of the handlers passed as arguments are subclasses of the default handlers, the default handlers will not be used. ÚHTTPSConnection)rr r/r*rrr,r+r0r.rärÚclientrkrKÚsetrr©Ú issubclassÚaddÚremoverõ)rÖrRÚdefault_classesÚskipÚklassÚcheckÚhs rSr3r39sw€õÑ Ô €FÝ#¥^µ[Ý.Õ0CÝ!¥;Õ0BÝ"ð$€Oõ�tŒ{Ð-Ñ.Ô.ð-Ø×Ò�|Ñ,Ô,Ð,Ý ‰5Œ5€DØ ð ð ˆØð ð ˆEݘ%¥Ñ&Ô&ð ݘe UÑ+Ô+ð$Ø—H’H˜U‘O”O�OøÝ˜E 5Ñ)Ô)ð Ø—’˜‘”�øð  ð ð&ð&ˆØ×Ò˜uÑ%Ô%Ð%Ð%à ð$ð$ˆØ×Ò˜5˜5™7œ7Ñ#Ô#Ð#Ð#à ððˆÝ �a�Ñ Ô ð Ø�‘”ˆAØ×Ò˜1ÑÔÐÐØ €MrTcó$—eZdZdZd„Zd„Zd„ZdS)réôcó—||_dSrV)Úparent)r”r(s rSrÝzBaseHandler.add_parent`s €ØˆŒ ˆ ˆ rTcó—dSrVrÐrœs rSr÷zBaseHandler.closecrørTcóF—t|d¦«sdS|j|jkS)NÚ handler_orderT)rär+)r”Úothers rSÚ__lt__zBaseHandler.__lt__gs,€Ý�u˜oÑ.Ô.ð ð�4ØÔ! EÔ$7Ò7Ð7rTN)rÊrËrÌr+rÝr÷r-rÐrTrSrr]sF€€€€€Ø€Mðððð ð ð ð8ð8ð8ð8ð8rTrcó —eZdZdZdZd„ZeZdS)r0zProcess HTTP error responses.iècó¦—|j|j| ¦«}}}d|cxkrdks!n|j d|||||¦«}|S)NéÈé,r)ÚcodeÚmsgrcr(râ)r”r‡rãr2r3rÈs rSÚ http_responsez HTTPErrorProcessor.http_responsetsg€Ø"œ-¨¬°x·}²}±´�4ˆcˆð�tÐ!Ð!Ò!Ð!˜cÒ!Ð!Ð!Ð!Ø”{×(Ò(ؘ ¨4°°dñ<ô<ˆHðˆrTN)rÊrËrÌÚ__doc__r+r4Úhttps_responserÐrTrSr0r0ps/€€€€€Ø'Ð'Ø€Mð ð ð ð#€N€N€NrTr0có—eZdZd„ZdS)rcó2—t|j||||¦«‚rV)rr‚)r”rrsr2r3rÈs rSrz*HTTPDefaultErrorHandler.http_error_default‚s€Ý˜œ  d¨C°°rÑ:Ô:Ð:rTN)rÊrËrÌrrÐrTrSrr�s#€€€€€ð;ð;ð;ð;ð;rTrcó6—eZdZdZdZd„Zd„ZexZxZxZ Z dZ dS)réé có*‡ —| ¦«}|dvr|dvs"|dvr|dkst|j||||¦«‚| dd¦«}dŠ ˆ fd„|j ¦«D¦«}t |||jd ¬ ¦«S) a­Return a Request or None in response to a redirect. This is called by the http_error_30x methods when a redirection response is received. If a redirection should take place, return a new Request to allow http_error_30x to perform the redirect. Otherwise, raise HTTPError if no-one else should try to handle this url. Return None if you can't but another Handler might. )é-é.é/i3i4)r­ÚHEAD)r=r>r?r¬ú z%20)r]z content-typecóH•—i|]\}}| ¦«‰v¯||“ŒSrÐ)r†)Ú.0ÚkÚvÚCONTENT_HEADERSs €rSú z8HTTPRedirectHandler.redirect_request..¨s;ø€ð;ð;ð;™t˜q !ØŸš™œ¨/Ð9Ð9ð˜Ø9Ð9Ð9rTT)rtr‘r’)r°rr‚Úreplacertr�rr‘) r”rrsr2r3rtÚnewurlÚmÚ newheadersrFs @rSrÞz$HTTPRedirectHandler.redirect_request�sÉø€ð �NŠNÑ Ô ˆØÐ2Ð2Ð2°q¸OÐ7KÐ7KØ�Ð&Ð&¨1°ª;¨;ݘCœL¨$°°W¸bÑAÔAÐ Að—’  UÑ+Ô+ˆà<ˆð;ð;ð;ð; s¤{×'8Ò'8Ñ':Ô':ð;ñ;ô;ˆ å�vØ)Ø'*Ô':Ø$(ð*ñ*ô*ð *rTcór—d|vr |d}nd|vr |d}ndSt|¦«}|jdvrt|||›d|›d�||¦«‚|js|jrt |¦«}d|d<t |¦«}t|dtj ¬ ¦«}t|j |¦«}|  ||||||¦«}|€dSt|d ¦«rf|jx} |_|  |d ¦«|jkst#| ¦«|jkr t|j ||j|z||¦«‚nix} x|_|_|  |d ¦«d z| |<| ¦«| ¦«|j ||j¬ ¦«S)NÚlocationÚuri©rr´Úftpr€z - Redirection to url 'z' is not allowedú/r;z iso-8859-1)ÚencodingÚsafeÚ redirect_dictrr_©rP)rÚschemerreÚnetlocrÇrr ÚstringÚ punctuationrr‚rÞrärTrÂÚ max_repeatsrnÚmax_redirectionsÚinf_msgrmr÷r(rMrP) r”rrsr2r3rtrIÚurlpartsÚnewÚvisiteds rSÚhttp_error_302z"HTTPRedirectHandler.http_error_302³s€ð ˜Ð РؘZÔ(ˆFˆFØ �gРРؘU”^ˆFˆFà ˆFõ˜FÑ#Ô#ˆð Œ?Ð">Ð >Ð >ÝØ˜ØADÀÀÀfÀfÀfÐMؘñôð ð Œ}ð  ¤ð ݘH‘~”~ˆH؈H�Q‰KݘHÑ%Ô%ˆõ Ø ˜\µÔ0BðDñDôDˆå˜œ vÑ.Ô.ˆð ×#Ò# C¨¨T°3¸ÀÑHÔHˆØ ˆ;Ø ˆFõ �3˜Ñ (Ô (ð AØ*-Ô*;Ð ;ˆG�cÔ'Ø— ’ ˜F AÑ&Ô&¨$Ô*:Ò:Ð:Ý�G‘ ”  Ô 5Ò5Ð5Ý ¤ ¨dØ $¤ ¨sÑ 2°G¸RñAôAðAð6ð?AÐ @ˆGÐ @�cÔ'¨#Ô*;Ø!Ÿ+š+ f¨aÑ0Ô0°1Ñ4ˆ�‰ð �Љ Œ ˆ Ø �Љ Œ ˆ àŒ{×Ò ¨S¬[ÐÑ9Ô9Ð9rTzoThe HTTP server returned a redirect error that would lead to an infinite loop. The last 30x error message was: N) rÊrËrÌrZr[rÞr`Úhttp_error_301Úhttp_error_303Úhttp_error_307Úhttp_error_308r\rÐrTrSrr…s\€€€€€ð€KðÐð *ð *ð *ðL::ð::ð::ðxIWÐV€NÐV�^ÐV n°~ð2€G€G€GrTrcóº—t|¦«\}}| d¦«sd}|}n| d¦«std|z¦«‚d|vr,| d¦«}| d|¦«}n| dd¦«}|dkrd}|d|…}t |¦«\}}|�t |¦«\}} ndx}} ||| |fS)a Return (scheme, user, password, host/port) given a URL or an authority. If a URL is supplied, it must have an authority (host:port) component. According to RFC 3986, having an authority component means the URL must have two slashes after the scheme. rQNú//zproxy URL with no authority: %rú@r;r\)r rèrDrçrr) ÚproxyrVÚr_schemeÚ authorityÚhost_separatorÚendÚuserinfoÚhostportÚuserÚpasswords rSÚ _parse_proxyrqös€õ" %Ñ(Ô(Ñ€FˆHØ × Ò ˜sÑ #Ô #ð$àˆØˆ ˆ ð×"Ò" 4Ñ(Ô(ð HÝÐ>ÀÑFÑGÔGÐ Gð �(ˆ?ˆ?Ø%Ÿ]š]¨3Ñ/Ô/ˆNØ—-’-  ^Ñ4Ô4ˆCˆCà—-’-  QÑ'Ô'ˆCØ �"Š9ˆ9؈CؘQ˜s˜U”Oˆ Ý# IÑ.Ô.Ñ€HˆhØÐÝ% hÑ/Ô/‰ˆˆhˆhàЈˆxØ �4˜ 8Ð +Ð+rTcó —eZdZdZdd„Zd„ZdS)r édNcóÌ—|€t¦«}||_| ¦«D]7\}}| ¦«}t |d|z|||jfd„¦«Œ8dS)Nz%s_opencó—||||¦«SrVrÐ)Úrrhr©rîs rSúz'ProxyHandler.__init__..#s€Ø˜˜Q  tÑ,Ô,ðrT)r6Úproxiesr�r†Úsetattrrà)r”rxr©rNs rSr—zProxyHandler.__init__s�€Ø ˆ?Ý ‘l”lˆGàˆŒ Ø Ÿš™œð .ð .‰IˆD�#Ø—:’:‘<”<ˆDÝ �D˜) dÑ*Ø$'¨d¸¼ð-ð-ð-ñ .ô .ð .ð .ð .ð .rTcó—|j}t|¦«\}}}}|€|}|jrt|j¦«rdS|ru|rst |¦«›dt |¦«›�} t j|  ¦«¦« d¦«} |  dd| z¦«t |¦«}|  ||¦«||ks|dkrdS|j   ||j ¬¦«S)Nú:ÚasciiúProxy-authorizationúBasic r´rU)r©rqrˆÚ proxy_bypassr Úbase64Ú b64encodeÚencodeÚdecoder�rµr(rMrP) r”rrhr©Ú orig_typeÚ proxy_typerorprnÚ user_passÚcredss rSràzProxyHandler.proxy_open&s€Ø”Hˆ Ý/;¸EÑ/BÔ/BÑ,ˆ �D˜( HØ Ð Ø"ˆJà Œ8ð �  S¤XÑ.Ô.ð Ø�4à ð D�Hð DÝ#*¨4¡=¤= = =Ý#*¨8Ñ#4Ô#4Ð#4ð6ˆIåÔ$ Y×%5Ò%5Ñ%7Ô%7Ñ8Ô8×?Ò?ÀÑHÔHˆEØ �NŠNÐ0°(¸UÑ2BÑ CÔ CÐ Cݘ8Ñ$Ô$ˆØ � Š �h  Ñ+Ô+Ð+Ø ˜ Ò "Ð " i°7Ò&:Ð&:à�4ð”;×#Ò# C°´Ð#Ñ=Ô=Ð =rTrV)rÊrËrÌr+r—ràrÐrTrSr r s<€€€€€à€Mð .ð .ð .ð .ð>ð>ð>ð>ð>rTr có.—eZdZd„Zd„Zd„Zdd„Zd„ZdS) r!có—i|_dSrV)Úpasswdrœs rSr—zHTTPPasswordMgr.__init__Ds €ØˆŒ ˆ ˆ rTc󯇇—t|t¦«r|g}|‰jvr i‰j|<dD]0Štˆˆfd„|D¦«¦«}||f‰j||<Œ1dS)N©TFc3óD•K—|]}‰ |‰¦«V—ŒdSrV)Ú reduce_uri)rCÚuÚ default_portr”s €€rSú z/HTTPPasswordMgr.add_password..NsBøèè€ð ?ð ?Ø56�—’  <Ñ0Ô0ð ?ð ?ð ?ð ?ð ?ð ?rT)rrrŠÚtuple)r”ÚrealmrNrorŠÚ reduced_urir�s` @rSÚ add_passwordzHTTPPasswordMgr.add_passwordGs¡øø€å �c�3Ñ Ô ð Ø�%ˆCØ ˜œ Ð #Ð #Ø!#ˆDŒK˜Ñ Ø'ð =ð =ˆLÝð ?ð ?ð ?ð ?ð ?Ø:=ð ?ñ ?ô ?ñ?ô?ˆKà/3°V¨nˆDŒK˜Ô ˜{Ñ +Ð +ð =ð =rTcóì—|j |i¦«}dD]U}| ||¦«}| ¦«D](\}}|D] }| ||¦«r|cccSŒ!Œ)ŒVdS)NrŒ©NN)rŠrÂrŽr�Ú is_suburi) r”r“ÚauthuriÚdomainsr�Úreduced_authuriÚurisÚauthinforNs rSÚfind_user_passwordz"HTTPPasswordMgr.find_user_passwordRs €Ø”+—/’/ %¨Ñ,Ô,ˆØ'ð (ð (ˆLØ"Ÿošo¨g°|ÑDÔDˆOØ")§-¢-¡/¤/ð (ð (‘��hØð(ð(�CØ—~’~ c¨?Ñ;Ô;ð(Ø'˜˜˜˜˜˜˜ð(ð(ð (ðˆzrTTcóì—t|¦«}|dr|d}|d}|dpd}nd}|}d}t|¦«\}}|r%|€#|�!dddœ |¦«} | �d || fz}||fS) z@Accept authority or URI and extract only the authority and path.r_rr;rQNéPi»rz%s:%d)rrrÂ) r”rNr�ÚpartsrVrjrerˆÚportÚdports rSrŽzHTTPPasswordMgr.reduce_uri\s¯€õ˜‘ ” ˆØ �Œ8ð à˜1”XˆFؘaœˆIؘ”8�?˜sˆDˆDðˆF؈I؈DÝ  Ñ*Ô*‰ ˆˆdØ ð 4˜D˜L¨VÐ-?ØØ!ððç’s˜6‘{”{ð ðÐ Ø# t¨U mÑ3� ؘ$ˆÐrTcó¦—||krdS|d|dkrdS|d}|dd…dkr|dz }|d |¦«S)zcCheck if test is below base in a URI tree Both args must be URIs in reduced form. TrFr_r\NrQ)rè)r”ÚbaseÚtestÚprefixs rSr˜zHTTPPasswordMgr.is_suburissg€ð �4Š<ˆ<Ø�4Ø �Œ7�d˜1”gÒ Ð Ø�5Ø�a”ˆØ �"�#�#Œ;˜#Ò Ð Ø �c‰MˆFØ�AŒw×!Ò! &Ñ)Ô)Ð)rTN)T)rÊrËrÌr—r•ržrŽr˜rÐrTrSr!r!Bsd€€€€€ðððð =ð =ð =ðððððððð. *ð *ð *ð *ð *rTr!có—eZdZd„ZdS)r"có„—t |||¦«\}}|�||fSt |d|¦«SrV)r!rž)r”r“r™rorps rSržz2HTTPPasswordMgrWithDefaultRealm.find_user_password„sL€Ý(×;Ò;¸DÀ%ØÐ !Ý×1Ò1°$¸¸gÑFÔFÐFrTN)rÊrËrÌržrÐrTrSr"r"‚s(€€€€€ðGðGðGðGðGrTr"có8‡—eZdZˆfd„Zdˆfd„ Zdd„Zd„ZˆxZS)r#cóH•—i|_t¦«j|i|¤ŽdSrV)Ú authenticatedÚsuperr—)r”rüÚkwargsÚ __class__s €rSr—z%HTTPPasswordMgrWithPriorAuth.__init__Žs-ø€ØˆÔØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)rTFcóÈ•—| ||¦«|�$t¦« d|||¦«t¦« ||||¦«dSrV)Úupdate_authenticatedr­r•)r”r“rNrorŠÚis_authenticatedr¯s €rSr•z)HTTPPasswordMgrWithPriorAuth.add_password’sbø€Ø ×!Ò! #Ð'7Ñ8Ô8Ð8à Ð Ý ‰GŒG× Ò   s¨D°&Ñ 9Ô 9Ð 9Ý ‰Œ×Ò˜U C¨¨vÑ6Ô6Ð6Ð6Ð6rTcóŠ—t|t¦«r|g}dD]'}|D]"}| ||¦«}||j|<Œ#Œ(dS©NrŒ)rrrŽr¬)r”rNr²r�r�r”s rSr±z1HTTPPasswordMgrWithPriorAuth.update_authenticated™sr€å �c�3Ñ Ô ð Ø�%ˆCà'ð Cð CˆLØð Cð C�Ø"Ÿošo¨a°Ñ>Ô>� Ø2B�Ô" ;Ñ/Ð/ð Cð Cð CrTcóž—dD]I}| ||¦«}|jD])}| ||¦«r|j|ccSŒ*ŒJdSr´)rŽr¬r˜)r”r™r�r›rNs rSr²z-HTTPPasswordMgrWithPriorAuth.is_authenticated£sz€Ø'ð 3ð 3ˆLØ"Ÿošo¨g°|ÑDÔDˆOØÔ)ð 3ð 3�Ø—>’> # Ñ7Ô7ð3ØÔ-¨cÔ2Ð2Ð2Ð2Ð2Ð2ð3ð 3ð 3ð 3rT)F)rÊrËrÌr—r•r±r²Ú __classcell__)r¯s@rSr#r#Œs}ø€€€€€ð*ð*ð*ð*ð*ð7ð7ð7ð7ð7ð7ðCðCðCðCð3ð3ð3ð3ð3ð3ð3rTr#cóh—eZdZejdej¦«Zd d„Zd„Zd„Z d„Z d„Z d„Z e Z e ZdS) r$z1(?:^|,)[ ]*([^ ,]+)[ ]+realm=(["']?)([^"']*)\2NcóV—|€t¦«}||_|jj|_dSrV)r!rŠr•)r”Ú password_mgrs rSr—z!AbstractBasicAuthHandler.__init__Às-€Ø Ð Ý*Ñ,Ô,ˆLØ"ˆŒ Ø œKÔ4ˆÔÐÐrTc#ó"K—d}tj |¦«D]A}| ¦«\}}}|dvrt jdt d¦«||fV—d}ŒB|s'|r| ¦«d}nd}|dfV—dSdS)NF)ú"ú'zBasic Auth Realm was unquotedéTrr€)r$ÚrxÚfinditerÚgroupsrArBÚ UserWarningÚsplit)r”ÚheaderÚfound_challengeÚmorVr r“s rSÚ _parse_realmz%AbstractBasicAuthHandler._parse_realmÆsÈèè€àˆÝ*Ô-×6Ò6°vÑ>Ô>ð #ð #ˆBØ#%§9¢9¡;¤;Ñ ˆF�E˜5ؘJÐ&Ð&Ý” Ð=Ý)¨1ñ.ô.ð.ð˜5�/Ð !Ð !Ð !à"ˆOˆOàð !Øð ØŸš™œ¨Ô*��à�ؘ4�.Ð Ð Ð Ð Ð ð  !ð !rTcó—| |¦«}|sdSd}|D]U}| |¦«D]=\}}| ¦«dkr|}Œ |�| |||¦«ccSŒ>ŒV|�t d|›�¦«‚dS)NÚbasicz@AbstractBasicAuthHandler does not support the following scheme: )Úget_allrÆr†Úretry_http_basic_authrD) r”ÚauthreqrˆrrtÚ unsupportedrÃrVr“s rSÚhttp_error_auth_reqedz.AbstractBasicAuthHandler.http_error_auth_reqedÚsÛ€ð—/’/ 'Ñ*Ô*ˆØð à ˆFàˆ Øð Hð HˆFØ!%×!2Ò!2°6Ñ!:Ô!:ð Hð H‘ �˜Ø—<’<‘>”> WÒ,Ð,Ø"(�KØàÐ$ð ×5Ò5°d¸CÀÑGÔGÐGÐGÐGÐGÐGð %ð Hð Ð "Ý�*à & ð)ñ*ô*ð *ð #Ð "rTcó†—|j ||¦«\}}|� |›d|›�}dtj| ¦«¦« d¦«z}| |jd¦«|krdS| |j|¦«|j   ||j ¬¦«SdS)Nr{r~r|rU) rŠržr€r�r‚rƒrƒÚ auth_headerr½r(rMrP)r”rˆrr“roÚpwÚrawÚauths rSrÊz.AbstractBasicAuthHandler.retry_http_basic_authôs¹€Ø”;×1Ò1°%¸Ñ>Ô>‰ˆˆbØ ˆ>Ø!˜T˜T 2 2Ð&ˆCØ�fÔ.¨s¯zªz©|¬|Ñ<Ô<×CÒCÀGÑLÔLÑLˆDØ�~Š~˜dÔ.°Ñ5Ô5¸Ò=Ð=Ø�tØ × 'Ò '¨Ô(8¸$Ñ ?Ô ?Ð ?Ø”;×#Ò# C°´Ð#Ñ=Ô=Ð =à�4rTcóô—t|jd¦«r|j |j¦«s|S| d¦«s¬|j d|j¦«\}}d ||¦« ¦«}tj |¦«  ¦«}|  dd |  ¦«¦«¦«|S)Nr²Ú Authorizationz{0}:{1}zBasic {}) rärŠr²r‚r¥ržršr‚r€Ústandard_b64encoderƒr½Ústrip)r”rrorŠÚ credentialsÚauth_strs rSÚ http_requestz%AbstractBasicAuthHandler.http_requestsâ€Ý˜œ Ð%7Ñ8Ô8ð ØŒ{×+Ò+¨C¬LÑ9Ô9ð àˆJà�~Š~˜oÑ.Ô.ð MØœ;×9Ò9¸$ÀÄ ÑMÔM‰LˆD�&Ø#×*Ò*¨4°Ñ8Ô8×?Ò?ÑAÔAˆKÝÔ0°Ñ=Ô=×DÒDÑFÔFˆHØ × 'Ò '¨Ø(2×(9Ò(9¸(¿.º.Ñ:JÔ:JÑ(KÔ(Kñ Mô Mð Màˆ rTcóÜ—t|jd¦«rVd|jcxkrdkr$nn!|j |jd¦«n |j |jd¦«|S)Nr²r0r1TF)rärŠr2r±r‚)r”rrãs rSr4z&AbstractBasicAuthHandler.http_response sx€Ý �4”;Ð 2Ñ 3Ô 3ð FØ�h”mÐ)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)Ð)Ø” ×0Ò0°´¸tÑDÔDÐDÐDà” ×0Ò0°´¸uÑEÔEÐE؈rTrV)rÊrËrÌÚreÚcompileÚIr¾r—rÆrÍrÊrÙr4Ú https_requestr6rÐrTrSr$r$«sš€€€€€ð ˆŒð1ð”Dñ ô €Bð5ð5ð5ð5ð !ð!ð!ð(*ð*ð*ð4 ð ð ð ð ð ðððð!€MØ"€N€N€NrTr$có—eZdZdZd„ZdS)r%rÔcóD—|j}| d|||¦«}|S)Núwww-authenticate)r‚rÍ)r”rrsr2r3rtrNrãs rSÚhttp_error_401z#HTTPBasicAuthHandler.http_error_401s-€ØŒlˆØ×-Ò-Ð.@Ø*-¨s°Gñ=ô=ˆàˆrTN)rÊrËrÌrÏrârÐrTrSr%r%s(€€€€€à!€KðððððrTr%có—eZdZdZd„ZdS)r&r}cóD—|j}| d|||¦«}|S©Núproxy-authenticate)rˆrÍ)r”rrsr2r3rtrjrãs rSÚhttp_error_407z$ProxyBasicAuthHandler.http_error_407)s1€ð ”Hˆ Ø×-Ò-Ð.BØ*3°S¸'ñCôCˆàˆrTN)rÊrËrÌrÏrçrÐrTrSr&r&%s(€€€€€à'€KðððððrTr&có@—eZdZd d„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z dS) r'Ncó€—|€t¦«}||_|jj|_d|_d|_d|_dS©Nr)r!rŠr•ÚretriedÚ nonce_countÚ last_nonce)r”rŠs rSr—z"AbstractDigestAuthHandler.__init__Cs@€Ø ˆ>Ý$Ñ&Ô&ˆF؈Œ Ø œKÔ4ˆÔ؈Œ ØˆÔØˆŒˆˆrTcó—d|_dSrê)rërœs rSÚreset_retry_countz+AbstractDigestAuthHandler.reset_retry_countLs €ØˆŒ ˆ ˆ rTcó„—| |d¦«}|jdkrt|jdd|d¦«‚|xjdz c_|rr| ¦«d}| ¦«dkr| ||¦«S| ¦«dkrtd|z¦«‚dSdS) Néi‘zdigest auth failedr_rÚdigestrÈzEAbstractDigestAuthHandler does not support the following scheme: '%s')rÂrërr‚rÂr†Úretry_http_digest_authrD)r”rÏrˆrrtrËrVs rSrÍz/AbstractDigestAuthHandler.http_error_auth_reqedOs䀨—+’+˜k¨4Ñ0Ô0ˆØ Œ<˜!Ò Ð õ ˜CœL¨#Ð/CØ# Tñ+ô+ð +ð ˆLŒL˜AÑ ˆLŒLØ ð IØ—]’]‘_”_ QÔ'ˆFØ�|Š|‰~Œ~ Ò)Ð)Ø×2Ò2°3¸Ñ@Ô@Ð@Ø—’‘” 7Ò*Ð*Ý ð"?ØAGñ"HñIôIðIð  Ið Ið+Ð*rTcóŽ—| dd¦«\}}ttdt|¦«¦«¦«}| ||¦«}|rid|z}|j |jd¦«|krdS| |j|¦«|j   ||j ¬¦«}|SdS)NrAr_z Digest %srU) rÂÚparse_keqv_listÚfilterÚparse_http_listÚget_authorizationrtrÂrÏr½r(rMrP)r”rrÒÚtokenÚ challengeÚchalÚauth_valÚresps rSróz0AbstractDigestAuthHandler.retry_http_digest_authcsǀ؟:š: c¨1Ñ-Ô-шˆyÝ�v d­O¸IÑ,FÔ,FÑGÔGÑHÔHˆØ×%Ò% c¨4Ñ0Ô0ˆØ ð Ø" TÑ)ˆHØŒ{�Š˜tÔ/°Ñ6Ô6¸(ÒBÐBØ�tØ × 'Ò '¨Ô(8¸(Ñ CÔ CÐ CØ”;×#Ò# C°´Ð#Ñ=Ô=ˆD؈Kð  ð rTcóî—|j›d|›dtj¦«›d�}| d¦«t d¦«z}t j|¦« ¦«}|dd…S)Nr{r|éé)rìÚtimeÚctimer‚Ú _randombytesÚhashlibÚsha1Ú hexdigest)r”ÚnonceÚsÚbÚdigs rSÚ get_cnoncez$AbstractDigestAuthHandler.get_cnonceosi€ð  Ô+Ð+Ð+¨U¨U¨UµD´J±L´L°L°LÐ AˆØ �HŠH�WÑ Ô ¥ ¨Q¡¤Ñ /ˆÝŒl˜1‰oŒo×'Ò'Ñ)Ô)ˆØ�3�B�3ŒxˆrTc óþ— |d}|d}| d¦«}| dd¦«}| dd¦«}n#t$rYdSwxYw| |¦«\}} |€dS|j ||j¦«\} } | €dS|j�| |j|¦«} nd} | ›d|›d| ›�} | ¦«›d|j ›�}|€$| || ¦«|›d||¦«›�¦«}n¡d|  d ¦«vrx||j kr|xj d z c_ nd |_ ||_ d |j z}|  |¦«}|›d|›d|›dd›d||¦«›� }| || ¦«|¦«}ntd |z¦«‚d | ›d|›d|›d|j ›d|›d� }|r|d|zz }| r|d| zz }|d|zz }|r |d|›d|›d�z }|S)Nr“rÚqopÚ algorithmÚMD5Úopaquer{rÒú,r_z%08xzqop '%s' is not supported.z username="z ", realm="z ", nonce="z", uri="z ", response="r»z , opaque="%s"z , digest="%s"z, algorithm="%s"z, qop=auth, nc=z , cnonce=")rÂÚKeyErrorÚget_algorithm_implsrŠržr‚rOÚget_entity_digestr°r¡rÂrírìr r)r”rrûr“rr rrÚHÚKDrorÐÚentdigÚA1ÚA2ÚrespdigÚncvalueÚcnonceÚnoncebitr¥s rSrøz+AbstractDigestAuthHandler.get_authorizationzs¦€ð ؘ”MˆEؘ”MˆEØ—(’(˜5‘/”/ˆCØŸš ¨eÑ4Ô4ˆIð—X’X˜h¨Ñ-Ô-ˆFˆFøÝð ð ð Ø�4�4ð øøøð×(Ò(¨Ñ3Ô3‰ˆˆ2Ø ˆ9Ø�4à”;×1Ò1°%¸¼ÑFÔF‰ˆˆbØ ˆ<Ø�4ð Œ8Ð Ø×+Ò+¨C¬H°dÑ;Ô;ˆFˆFàˆFà˜4˜4   ¨¨Ð +ˆØŸšÑ(Ô(Ð(Ð(àœ ˜ ð&ˆð ˆ;Ø�b˜˜˜2™œ¨5¨5¨5°!°!°B±%´%°%Ð 8Ñ9Ô9ˆGˆGØ �s—y’y ‘~”~Ð %Ð %ؘœÒ'Ð'ØÐ Ô  AÑ%Ð Ô Ð à#$�Ô Ø"'�”ؘtÔ/Ñ/ˆGØ—_’_ UÑ+Ô+ˆFØ+0¨5¨5°'°'°'¸6¸6¸6À6À6À6È1È1ÈRÉ5Ì5È5ÐQˆHØ�b˜˜˜2™œ Ñ)Ô)ˆGˆGõÐ7¸#Ñ=Ñ>Ô>Ð >øð #' $ $¨¨¨¨u¨u¨u°c´l°l°lØ") ' 'ð+ˆð ð -Ø �O fÑ,Ñ ,ˆDØ ð -Ø �O fÑ,Ñ ,ˆDØ Ð" YÑ.Ñ.ˆØ ð IØ ˆD¸¸¸ÀÀÀÐHÑ HˆD؈ s‚AAÁ A"Á!A"cób‡—|dkrd„Šn|dkrd„Šntd|z¦«‚ˆfd„}‰|fS)Nrcót—tj| d¦«¦« ¦«S©Nr|)rÚmd5r‚r©Úxs rSrwz?AbstractDigestAuthHandler.get_algorithm_impls..»s(€�'œ+ a§h¢h¨wÑ&7Ô&7Ñ8Ô8×BÒBÑDÔD€rTÚSHAcót—tj| d¦«¦« ¦«Sr )rrr‚rr"s rSrwz?AbstractDigestAuthHandler.get_algorithm_impls..½s(€�'œ, q§x¢x°Ñ'8Ô'8Ñ9Ô9×CÒCÑEÔE€rTz.Unsupported digest authentication algorithm %rcó$•—‰|›d|›�¦«S)Nr{rÐ)rÚdrs €rSrwz?AbstractDigestAuthHandler.get_algorithm_impls..Âsø€˜!˜! q q q¨!¨!Ð,Ñ-Ô-€rT)rD)r”rrrs @rSrz-AbstractDigestAuthHandler.get_algorithm_impls¸seø€à ˜Ò Ð ØDÐDˆAˆAØ ˜%Ò Ð ØEÐEˆAˆAõð,Ø.7ñ8ñ9ô9ð 9à -Ð -Ð -Ð -ˆØ�"ˆuˆ rTcó—dSrVrÐ)r”rOrûs rSrz+AbstractDigestAuthHandler.get_entity_digestÅs€àˆtrTrV) rÊrËrÌr—rïrÍrór rørrrÐrTrSr'r'8s•€€€€€ððððððððIðIðIð( ð ð ð ð ð ð<ð<ð<ð| ð ð ðððððrTr'có —eZdZdZdZdZd„ZdS)r(z¨An authentication protocol defined by RFC 2069 Digest authentication improves on basic authentication because it does not transmit passwords in the clear. rÔéêcó’—t|j¦«d}| d|||¦«}| ¦«|S)Nr_rá)rr‚rÍrï©r”rrsr2r3rtrˆÚretrys rSrâz$HTTPDigestAuthHandler.http_error_401ÔsL€Ý˜œ Ñ%Ô% aÔ(ˆØ×*Ò*Ð+=Ø+/°°gñ?ô?ˆà ×ÒÑ Ô Ð Øˆ rTN)rÊrËrÌr5rÏr+rârÐrTrSr(r(Ês9€€€€€ððð "€KØ€MðððððrTr(có—eZdZdZdZd„ZdS)r)úProxy-Authorizationr*cól—|j}| d|||¦«}| ¦«|Srå)rˆrÍrïr,s rSrçz%ProxyDigestAuthHandler.http_error_407ás?€ØŒxˆØ×*Ò*Ð+?Ø+/°°gñ?ô?ˆà ×ÒÑ Ô Ð Øˆ rTN)rÊrËrÌrÏr+rçrÐrTrSr)r)Üs-€€€€€à'€KØ€MðððððrTr)có.—eZdZdd„Zd„Zd„Zd„Zd„ZdS) ÚAbstractHTTPHandlerrcó—||_dSrV©Ú _debuglevel)r”Ú debuglevels rSr—zAbstractHTTPHandler.__init__ês€Ø%ˆÔÐÐrTcó—||_dSrVr4)r”Úlevels rSÚset_http_debuglevelz'AbstractHTTPHandler.set_http_debuglevelís€Ø ˆÔÐÐrTcóz—tjj |j| ¦«¦«SrV)rrÚHTTPConnectionÚ_get_content_lengthrOr°©r”r‡s rSr<z'AbstractHTTPHandler._get_content_lengthðs3€ÝŒ{Ô)×=Ò=Ø ŒLØ × Ò Ñ Ô ñ"ô"ð "rTcó`—|j}|std¦«‚|j�Ó|j}t|t¦«rd}t |¦«‚| d¦«s| dd¦«| d¦«sf| d¦«sQ| |¦«}|�$| dt |¦«¦«n| dd¦«|}|  ¦«r)t|j ¦«\}}t|¦«\}} | d¦«s| d|¦«|j jD]D\} } |  ¦«} | | ¦«s| | | ¦«ŒE|S) Nú no host givenz\POST data should be bytes, an iterable of bytes, or a file object. It cannot be of type str.z Content-typeú!application/x-www-form-urlencodedr¤úTransfer-encodingÚchunkedr�)rˆrrOrrrår¥r½r<r·r r¡r r(rÕr¹) r”r‡rˆrOr3Úcontent_lengthÚsel_hostrVÚselÚsel_pathrir–s rSÚ do_request_zAbstractHTTPHandler.do_request_õsâ€ØŒ|ˆØð ,ݘ?Ñ+Ô+Ð +à Œ<Ð #Ø”<ˆDݘ$¥Ñ$Ô$ð %ðD�å ‘n”nÐ$Ø×%Ò% nÑ5Ô5ð 9Ø×/Ò/Ø"Ø7ñ9ô9ð9ð×&Ò&Ð'7Ñ8Ô8ð <Ø#×.Ò.Ð/BÑCÔCð <à!%×!9Ò!9¸'Ñ!BÔ!B�Ø!Ð-Ø×3Ò3Ø,­c°.Ñ.AÔ.AñCôCðCðCð×3Ò3Ø/°ñ<ô<ð<ðˆØ × Ò Ñ Ô ð 1Ý$ WÔ%5Ñ6Ô6‰KˆF�CÝ!+¨C¡¤Ñ ˆH�hØ×!Ò! &Ñ)Ô)ð >Ø × +Ò +¨F°HÑ =Ô =Ð =Øœ;Ô1ð =ð =‰KˆD�%Ø—?’?Ñ$Ô$ˆDØ×%Ò% dÑ+Ô+ð =Ø×/Ò/°°eÑ<Ô<Ð<øàˆrTc ó¬‡ —|j}|std¦«‚||fd|ji|¤Ž}| |j¦«t |j¦«Š ‰  ˆ fd„|j  ¦«D¦«¦«d‰ d<d„‰   ¦«D¦«Š |j r2i}d}|‰ vr‰ |||<‰ |=|  |j |¬¦« |  |  ¦«|j|j‰ | d ¦«¬ ¦«n!#t"$r}t|¦«‚d }~wwxYw| ¦«} n#| ¦«‚xYw|jr |j ¦«d |_| ¦«| _| j| _| S) z•Return an HTTPResponse object for the request, using http_class. http_class must implement the HTTPConnection API from http.client. r?rPcó$•—i|] \}}|‰v¯ ||“Œ SrÐrÐ)rCrDrErts €rSrGz/AbstractHTTPHandler.do_open..)s3ø€ð-ð-ð-¡  AØ GÐ+Ð+ð˜1Ø+Ð+Ð+rTr÷Ú Connectioncó>—i|]\}}| ¦«|“ŒSrÐ)Útitle)rCrir»s rSrGz/AbstractHTTPHandler.do_open..6s&€ÐFÐFÐF©¨¨s�4—:’:‘<”< ÐFÐFÐFrTr/©rtrA)Úencode_chunkedN)rˆrrPÚset_debuglevelr5rrŒÚupdatertr�rŽÚ set_tunnelr‡r°r¡rOr¥r}Ú getresponser÷Úsockr²rNÚreasonr3) r”Ú http_classrÚhttp_conn_argsrˆr$Útunnel_headersÚproxy_auth_hdrÚerrrvrts @rSrßzAbstractHTTPHandler.do_opensø€ð ŒxˆØð ,ݘ?Ñ+Ô+Ð +ð ˆJ�tÐ CÐ C S¤[Ð C°NÐ CÐ CˆØ ×Ò˜Ô)Ñ*Ô*Ð*å�sÔ,Ñ-Ô-ˆØ�Šð-ð-ð-ð-¨¬×):Ò):Ñ)<Ô)<ð-ñ-ô-ñ .ô .ð .ð!(ˆ� ÑØFÐF°g·m²m±o´oÐFÑFÔFˆà Ô ð C؈NØ2ˆNØ Ð(Ð(Ø18¸Ô1H�˜~Ñ.ð˜NÐ+Ø �LŠL˜Ô)°>ˆLÑ BÔ BÐ Bð ð $Ø— ’ ˜#Ÿ.š.Ñ*Ô*¨C¬L¸#¼(ÀGØ),¯ªÐ8KÑ)LÔ)LðñNôNðNðNøåð $ð $ð $ݘs‘m”mÐ#øøøøð $øøøà— ’ ‘”ˆAˆAøð Ø �GŠG‰IŒIˆIØ øøøð Œ6ð Ø ŒF�LŠL‰NŒNˆN؈AŒFà× Ò Ñ"Ô"ˆŒð ”ˆŒØˆs+Ã.A D8Ä7E.Ä8 EÅEÅEÅE.Å.FN©r)rÊrËrÌr—r9r<rGrßrÐrTrSr2r2èsj€€€€€ð&ð&ð&ð&ð!ð!ð!ð"ð"ð"ð $ð$ð$ðL@ð@ð@ð@ð@rTr2có"—eZdZd„ZejZdS)r*cóL—| tjj|¦«SrV)rßrrr;©r”rs rSÚ http_openzHTTPHandler.http_open`s€Ø�|Š|�DœKÔ6¸Ñ<Ô<Ѐ€€€€ð 2ð 2ð 2ð 2ð  Lð Lð Lð,Ô7ˆ ˆ ˆ rTrKcó*—eZdZdd„Zd„Zd„ZeZeZdS)rNcóR—ddl}|€|j ¦«}||_dSrê)Úhttp.cookiejarÚ cookiejarÚ CookieJar)r”rirs rSr—zHTTPCookieProcessor.__init__ws2€ØÐÐÐØ Ð Øœ×0Ò0Ñ2Ô2ˆIØ"ˆŒˆˆrTcó:—|j |¦«|SrV)riÚadd_cookie_headerr=s rSrÙz HTTPCookieProcessor.http_request}s€Ø Œ×(Ò(¨Ñ1Ô1Ð1؈rTcó<—|j ||¦«|SrV)riÚextract_cookies)r”r‡rãs rSr4z!HTTPCookieProcessor.http_response�s€Ø Œ×&Ò& x°Ñ9Ô9Ð9؈rTrV)rÊrËrÌr—rÙr4rÞr6rÐrTrSrrvsL€€€€€ð#ð#ð#ð#ð ðððððð!€MØ"€N€N€NrTrcó—eZdZd„ZdS)r/có4—|j}td|z¦«‚)Nzunknown url type: %s)r©r)r”rr©s rSr zUnknownHandler.unknown_open‰s€ØŒxˆÝÐ-°Ñ4Ñ5Ô5Ð5rTN)rÊrËrÌr rÐrTrSr/r/ˆs#€€€€€ð6ð6ð6ð6ð6rTr/có”—i}|D]B}| dd¦«\}}|ddkr|ddkr |dd…}|||<ŒC|S)z>Parse list of key=value strings where keys are not duplicated.ú=r_rr»r\)rÂ)ÚlÚparsedÚeltrDrEs rSrõrõ�sc€à €FØððˆØ�yŠy˜˜aÑ Ô ‰ˆˆ1Ø ˆQŒ4�3Š;ˆ;˜1˜Rœ5 Cš<˜<Ø�!�B�$”ˆA؈ˆq‰ ˆ Ø €MrTcóþ—g}d}dx}}|D]P}|r||z }d}Œ |r|dkrd}Œ|dkrd}||z }Œ%|dkr| |¦«d}ŒC|dkrd}||z }ŒQ|r| |¦«d„|D¦«S)apParse 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. Neither commas nor quotes count if they are escaped. Only double-quotes count, not single-quotes. r€Fú\Tr»rcó6—g|]}| ¦«‘ŒSrÐ)rÖ)rCÚparts rSú z#parse_http_list..Às €Ð )Ð )Ð )˜TˆD�JŠJ‰LŒLÐ )Ð )Ð )rT)rk)rÚresryÚescaper Úcurs rSr÷r÷—s߀ð €CØ €DàЀFˆUØððˆØ ð Ø �C‰KˆD؈FØ Ø ð Ø�dŠ{ˆ{Ø�ØØ˜’�Ø�Ø �C‰KˆDØ à �#Š:ˆ:Ø �JŠJ�tÑ Ô Ð ØˆDØ à �#Š:ˆ:؈Eà �‰ ˆˆð ðØ � Š �4ÑÔÐà )Ð ) SÐ )Ñ )Ô )Ð)rTcó$—eZdZd„ZdZd„Zd„ZdS)r+cóî—|j}|dd…dkrL|dd…dkr>|jr7|jdkr,|j| ¦«vrtd¦«‚dS| |¦«S)Nr;rfr½rQÚ localhostú-file:// scheme is supported only on localhost)r¡rˆÚ get_namesrÚopen_local_file)r”rrNs rSÚ file_openzFileHandler.file_openÄs�€ØŒlˆØ ˆr�ˆrŒ7�dŠ?ˆ?˜s 1 Q 3œx¨3š˜°C´H˜Ø”˜KÒ'Ð'Ø”8˜tŸ~š~Ñ/Ô/Ð/Ð/ÝÐNÑOÔOÐOð0Ð/ð×'Ò'¨Ñ,Ô,Ð ,rTNcóX—tj€“ ttjd¦«dtjtj¦«¦«dz¦«t_n4#tj$r"tjd¦«ft_YnwxYwtjS)Nr€r;)r+Únamesr’rÚgethostbyname_exÚ gethostnameÚgaierrorÚ gethostbynamerœs rSr‚zFileHandler.get_namesÏs¥€Ý Ô Ð $ð IÝ$)ÝÔ+¨KÑ8Ô8¸Ô;ÝÔ+­FÔ,>Ñ,@Ô,@ÑAÔAÀ!ÔDñEñ%Fô%F• Ô!Ð!øõ”?ð Ið Ið IÝ%+Ô%9¸+Ñ%FÔ%FÐ$H• Ô!Ð!Ð!ð IøøøåÔ Ð sŽAA,Á,.BÂBcób—ddl}ddl}|j}|j}t |¦«} t j|¦«}|j}|j  |j d¬¦«} |  |¦«d} |j d| pd|| fz¦«} |rt|¦«\}} |r%| sRt|¦«| ¦«vr/|r d|z|z} nd|z} t!t#|d¦«| | ¦«Sn!#t$$r}t'|¦«‚d}~wwxYwt'd¦«‚) NrT©Úusegmtz6Content-type: %s Content-length: %d Last-modified: %s ú text/plainúfile://Úrbzfile not on local host)Ú email.utilsÚ mimetypesrˆr¡r5rdÚstatÚst_sizeÚutilsÚ formatdateÚst_mtimeÚ guess_typeÚmessage_from_stringrÚ_safe_gethostbynamer‚rrMr}r)r”rÚemailr’rˆrpÚ localfileÚstatsrxÚmodifiedÚmtypertr¢ÚorigurlÚexps rSrƒzFileHandler.open_local_fileÚss€ØÐÐÐØÐÐÐØŒxˆØ”<ˆÝ  Ñ*Ô*ˆ ð Ý”G˜IÑ&Ô&ˆEØ”=ˆDØ”{×-Ò-¨e¬nÀTÐ-ÑJÔJˆHØ×(Ò(¨Ñ2Ô2°1Ô5ˆEØ/�eÔ/ØKØÐ&˜,¨¨hÐ7ñ8ñ9ô9ˆGðð .Ý'¨Ñ-Ô-‘ ��dØð KØð KÝ1°$Ñ7Ô7¸4¿>º>Ñ;KÔ;KÐKÐKØð3Ø'¨$Ñ.°Ñ9�G�Gà'¨(Ñ2�GÝ!¥$ y°$Ñ"7Ô"7¸À'ÑJÔJÐJøøÝð ð ð ݘ3‘-”-Ð øøøøð øøøåÐ/Ñ0Ô0Ð0s§CDÄ DÄ DÄD)rÊrËrÌr„r†r‚rƒrÐrTrSr+r+ÂsH€€€€€ð-ð-ð-ð €Eð!ð!ð!ð1ð1ð1ð1ð1rTr+cóX— tj|¦«S#tj$rYdSwxYwrV)rrŠr‰)rˆs rSršršõs<€ðÝÔ# DÑ)Ô)Ð)øÝ Œ?ððð؈tˆtðøøøs ‚–)¨)có—eZdZd„Zd„ZdS)r,cóŠ—ddl}ddl}|j}|std¦«‚t |¦«\}}|€|j}nt |¦«}t|¦«\}}|rt|¦«\}}nd}t|¦«}|pd}|pd} tj |¦«}n!#t$r}t|¦«‚d}~wwxYwt|j¦«\} } |  d¦«} t!t#t| ¦«¦«} | dd…| d} } | r| ds | dd…} | ||||| |j¦«} | rdpd}| D]D}t)|¦«\}}| ¦«d kr|d vr| ¦«}ŒE|  | |¦«\}}d}| |j¦«d}|r|d |zz }|�|dkr|d |zz }t5j|¦«}t9|||j¦«S#|j$r}t|¦«|‚d}~wwxYw) Nrúftp error: no host givenr€rQr\r_rÝÚDr©©ÚaÚArïrÝr'r¦zContent-type: %s zContent-length: %d )Úftplibr’rˆrrÚFTP_PORTrlrrr rrŠr}rr¡rÂrÇÚmapÚ connect_ftprPrr†ÚupperÚretrfiler˜r‚r›r™rÚ all_errors)r”rrªr’rˆr¢rorŠr3reÚattrsÚdirsrXÚfwr©Úattrr–rsÚretrlenrtrŸr¡s rSÚftp_openzFTPHandler.ftp_openüsž€Øˆ ˆ ˆ ØÐÐÐØŒxˆØð 7ÝÐ5Ñ6Ô6Ð 6Ý Ñ%Ô%‰ ˆˆdØ ˆ<Ø”?ˆDˆDå�t‘9”9ˆDõ  Ñ%Ô%‰ ˆˆdØ ð Ý'¨Ñ-Ô-‰LˆD�&�&àˆFÝ�t‰}Œ}ˆØˆz�rˆØ�˜2ˆð ÝÔ'¨Ñ-Ô-ˆDˆDøÝð ð ð ݘ3‘-”-Ð øøøøð øøøå  ¤Ñ.Ô.‰ ˆˆeØ�zŠz˜#‰ŒˆÝ•C� Ñ&Ô&Ñ'Ô'ˆØ˜#˜2˜#”Y  R¤ˆdˆØ 𠘘Qœð ؘ˜˜”8ˆDð )Ø×!Ò! $¨°°d¸DÀ#Ä+ÑNÔNˆBØ�<˜CÐ& 3ˆDØð )ð )�Ý)¨$Ñ/Ô/‘ ��eØ—:’:‘<”< 6Ò)Ð)ØÐ:Ð:Ð:Ø Ÿ;š;™=œ=�DøØŸ+š+ d¨DÑ1Ô1‰KˆB�؈GØ×(Ò(¨¬Ñ6Ô6°qÔ9ˆEØð 8ØÐ/°%Ñ7Ñ7�ØÐ" w°!¢| |ØÐ1°GÑ;Ñ;�ÝÔ/°Ñ8Ô8ˆGݘb '¨3¬<Ñ8Ô8Ð 8øØÔ ð )ð )ð )ݘ3‘-”- SÐ (øøøøð )øøøs1 B"Â" CÂ,B;Â;CÄ8C*H#È# IÈ-H=È=Ic ó.—t||||||d¬¦«S)NF)Ú persistent)Ú ftpwrapper)r”rorŠrˆr¢r²rPs rSr­zFTPHandler.connect_ftp0s(€Ý˜$ ¨¨d°D¸'Ø%*ð,ñ,ô,ð ,rTN)rÊrËrÌr¶r­rÐrTrSr,r,ûs3€€€€€ð2)ð2)ð2)ðh,ð,ð,ð,ð,rTr,có2—eZdZd„Zd„Zd„Zd„Zd„Zd„ZdS)r-cóL—i|_i|_d|_d|_d|_dS)Nré<r)ÚcacherPÚsoonestÚdelayÚ max_connsrœs rSr—zCacheFTPHandler.__init__7s)€ØˆŒ ؈Œ ؈Œ ؈Œ ؈ŒˆˆrTcó—||_dSrV)r¿)r”Úts rSÚ setTimeoutzCacheFTPHandler.setTimeout>s €ØˆŒ ˆ ˆ rTcó—||_dSrV)rÀ)r”rJs rSÚ setMaxConnszCacheFTPHandler.setMaxConnsAs €ØˆŒˆˆrTcóP—|||d |¦«|f}||jvr$tj¦«|jz|j|<n?t ||||||¦«|j|<tj¦«|jz|j|<| ¦«|j|S)NrQ)Újoinr½rr¿rPr¹Ú check_cache)r”rorŠrˆr¢r²rPr•s rSr­zCacheFTPHandler.connect_ftpDsž€Ø�D˜$ §¢¨¡¤°Ð7ˆØ �$”*Ð Ð Ý $¤ ¡ ¤ ¨d¬jÑ 8ˆDŒL˜Ñ Ð å(¨¨v°t¸TØ)-¨wñ8ô8ˆDŒJ�s‰Oå $¤ ¡ ¤ ¨d¬jÑ 8ˆDŒL˜Ñ Ø ×ÒÑÔÐØŒz˜#ŒÐrTcó´—tj¦«}|j|krat|j ¦«¦«D]:\}}||kr/|j| ¦«|j|=|j|=Œ;tt|j ¦«¦«¦«|_t|j¦«|j krƒt|j ¦«¦«D]"\}}||jkr|j|=|j|=nŒ#tt|j ¦«¦«¦«|_dSdSrV) rr¾rÇrPr�r½r÷ÚminÚvaluesrnrÀ)r”rÂrDrEs rSrÈzCacheFTPHandler.check_cacheOs8€å ŒI‰KŒKˆØ Œ<˜1Ò Ð Ý˜Tœ\×/Ò/Ñ1Ô1Ñ2Ô2ð (ð (‘��1Ø�q’5�5Ø”J˜q”M×'Ò'Ñ)Ô)Ð)Øœ  1˜ Øœ  Q˜øÝ�4 ¤ × 3Ò 3Ñ 5Ô 5Ñ6Ô6Ñ7Ô7ˆŒ õ ˆtŒz‰?Œ?˜dœnÒ ,Ð ,ݘTœ\×/Ò/Ñ1Ô1Ñ2Ô2ð ð ‘��1ؘœ Ò$Ð$Øœ  1˜ Øœ  Q˜Ø�Eð%õ�t D¤L×$7Ò$7Ñ$9Ô$9Ñ:Ô:Ñ;Ô;ˆDŒLˆLˆLð -Ð ,rTcóÊ—|j ¦«D]}| ¦«Œ|j ¦«|j ¦«dSrV)r½rËr÷ÚclearrP)r”Úconns rSÚ clear_cachezCacheFTPHandler.clear_cachecs\€Ø”J×%Ò%Ñ'Ô'ð ð ˆDØ �JŠJ‰LŒLˆLˆLØ Œ ×ÒÑÔÐØ Œ ×ÒÑÔÐÐÐrTN) rÊrËrÌr—rÃrÅr­rÈrÏrÐrTrSr-r-4sn€€€€€ðððððððððð ð ð ð<ð<ð<ð(ððððrTr-có—eZdZd„ZdS)r.cóÚ—|j}| dd¦«\}}| dd¦«\}}tjd|¦«rt d¦«‚t |¦«}| d¦«rtj|¦«}|dd…}|sd}tj d |t|¦«fz¦«}ttj|¦«||¦«S) Nr{r_rz[\x00-\x1F\x7F]z1Control characters not allowed in data: mediatypez;base64iùÿÿÿútext/plain;charset=US-ASCIIz$Content-type: %s Content-length: %d )r‚rÂrÛÚsearchrDrÚendswithr€Ú decodebytesr›r™rnrÚioÚBytesIO)r”rrNrVrOÚ mediatyperts rSÚ data_openzDataHandler.data_openjsþ€ðŒlˆà—y’y  QÑ'Ô'‰ ˆ�ØŸ*š* S¨Ñ+Ô+‰ˆ �4õ Œ9Ð'¨Ñ 3Ô 3ð EÝØCñEôEð Eõ  Ñ%Ô%ˆØ × Ò ˜iÑ (Ô (ð 'ÝÔ% dÑ+Ô+ˆDØ! # 2 #œˆIàð 6Ø5ˆIåÔ+Ð,TØ �˜D™ œ Ð "ñ-#ñ$ô$ˆõ�"œ* TÑ*Ô*¨G°SÑ9Ô9Ð9rTN)rÊrËrÌrÙrÐrTrSr.r.is#€€€€€ð :ð :ð :ð :ð :rTr.r;Únt)r5r4có —t|¦«S)zOS-specific conversion from a relative URL of the 'file' scheme to a file system path; not recommended for general use.)r ©Úpathnames rSr5r5•s€õ�xÑ Ô Ð rTcó —t|¦«S)zOS-specific conversion from a file system path to a relative URL of the 'file' scheme; not recommended for general use.)r rÜs rSr4r4šs€õ�X‰ŒÐrTcó¨—eZdZdZdZdezZdd„Zd„Zd„Z d„Z d„Z dd „Z dd „Z dd „Zdd „Zd „Zdd„Zdd„Zd„Zerd„Zdd„Zd„Zd„Zd„Zdd„ZdS)r9a,Class to open URLs. This is a class rather than just a subroutine because we may need more than one set of global protocol-specific options. Note -- this is a base class for those who don't want the automatic handling of errors type 302 (relocated) and 401 (authorization needed).NrÓc ól—dd|jjiz}tj|td¬¦«|€t ¦«}||_| d¦«|_| d¦«|_ d|j fdg|_ g|_ tj|_d|_t"|_dS) NzW%(class)s style of invoking requests is deprecated. Use newer urlopen functions/methodsÚclassr½)Ú stacklevelÚkey_fileÚ cert_filez User-Agent)ÚAcceptz*/*)r¯rÊrArBrCr6rxrÂrãräÚversionrÕÚ_URLopener__tempfilesrdr|Ú_URLopener__unlinkÚ tempcacheÚftpcache)r”rxÚx509r3s rSr—zURLopener.__init__°s¨€ð4Ø7>ÀÄÔ@WÐ6XñYˆåŒ �cÕ-¸!Ð<Ñ<Ô<Ð<Ø ˆ?Ý ‘l”lˆGàˆŒ ØŸš Ñ,Ô,ˆŒ ØŸš +Ñ.Ô.ˆŒØ(¨$¬,Ð7Ð9JÐKˆŒØˆÔÝœ ˆŒ ؈Œõ!ˆŒ ˆ ˆ rTcó.—| ¦«dSrV)r÷rœs rSÚ__del__zURLopener.__del__Ês€Ø � Š ‰ Œ ˆ ˆ ˆ rTcó.—| ¦«dSrV)Úcleanuprœs rSr÷zURLopener.closeÍs€Ø � Š ‰ŒˆˆˆrTcóÌ—|jr:|jD](} | |¦«Œ#t$rYŒ%wxYw|jdd…=|jr|j ¦«dSdSrV)rçrèr}rérÍ)r”rXs rSrïzURLopener.cleanupÐs˜€ð Ô ð $ØÔ(ð ð �ðØ—M’M $Ñ'Ô'Ð'Ð'øÝðððØ�DðøøøàÔ    Ð#Ø Œ>ð #Ø ŒN× Ò Ñ "Ô "Ð "Ð "Ð "ð #ð #s ’(¨ 5´5có:—|j |¦«dS)zdAdd a header to be used by the HTTP interface only e.g. u.addheader('Accept', 'sound/basic')N)rÕrk)r”rüs rSÚ addheaderzURLopener.addheaderÞs €ð Œ×Ò˜tÑ$Ô$Ð$Ð$Ð$rTcó.—tt|¦«¦«}t|d¬¦«}|jr:||jvr1|j|\}}t |d¦«}t |||¦«St |¦«\}}|sd}||jvr6|j|}t |¦«\}} t| ¦«\} } | |f}nd}d|z} ||_ |   dd¦«} t|| ¦«r| d kr/|r|  |||¦«S|  ||¦«S |€t|| ¦«|¦«St|| ¦«||¦«S#tt f$r‚t"$r} t#d | ¦«| ‚d} ~ wwxYw) z6Use URLopener().open(file) instead of open(file, 'r').z%/:=&?~#+!$,;'@()*[]|©rSr�rXNÚopen_ú-rárƒz socket error)r rr rérMrr rxr r©rHräÚopen_unknown_proxyÚ open_unknownr®rrr})r”rrOrprtrsÚurltyperNrhÚ proxyhostrˆr¡rir3s rSrMzURLopener.openäsÞ€å� 7Ñ+Ô+Ñ,Ô,ˆÝ˜Ð&=Ð>Ñ>Ô>ˆØ Œ>ð 4˜g¨¬Ð7Ð7Ø $¤¨wÔ 7Ñ ˆH�gÝ�h Ñ%Ô%ˆBݘb '¨7Ñ3Ô3Ð 3Ý! 'Ñ*Ô*‰ ˆ�Øð ؈GØ �d”lÐ "Ð "Ø”L Ô)ˆEÝ!+¨EÑ!2Ô!2Ñ ˆG�YÝ'¨ Ñ2Ô2‰NˆD�(ؘ�/ˆCˆCàˆEØ˜Ñ ˆØˆŒ Ø�|Š|˜C Ñ%Ô%ˆÝ�t˜TÑ"Ô"ð 8 dÐ.?Ò&?Ð&?Øð 8Ø×.Ò.¨u°g¸tÑDÔDÐDà×(Ò(¨°$Ñ7Ô7Ð7ð 8؈|Ø*•w˜t TÑ*Ô*¨3Ñ/Ô/Ð/à*•w˜t TÑ*Ô*¨3°Ñ5Ô5Ð5øÝ�8Ð$ð ð ð Ø Ýð 8ð 8ð 8ݘ.¨#Ñ.Ô.°CÐ 7øøøøð 8øøøsÄ.E#Å E#Å#FÅ>FÆFcóH—t|¦«\}}tdd|¦«‚)ú/Overridable interface to open unknown URL type.ú url errorzunknown url type©r r})r”rrOr©rNs rSrøzURLopener.open_unknowns&€å˜wÑ'Ô'‰ ˆˆcÝ�kÐ#5°tÑ<Ô<Ðð '˜c T¤^Ð3Ð3Ø”> #Ô&Ð &Ý ‘_”_‰ ˆˆdØ Ð  TÐ ¨T°Vª^¨^ð Ø×)Ò)¨$Ñ/Ô/�Ø—w’w‘y”y�Ø—’‘ ” � Ý#¥J¨tÑ$4Ô$4°QÔ$7Ñ8Ô8¸$Ð>Ð>øÝð ð ð Ø�ð øøøà �YŠY�s˜DÑ !Ô !ˆð% Ø—g’g‘i”iˆGØð *ݘ8 TÑ*Ô*��å *¨3¡¤‘ �˜Ý *¨4¨:°2Ñ 6Ô 6‘ �˜Ý +¨D¨J°BÑ 7Ô 7‘ ��gÝ *¨4¨:°2Ñ 6Ô 6‘ ��gÝœ×)Ò)¨$Ñ/Ô/°Ô2�Ý!)Ô!1°&Ñ!9Ô!9‘��XØÔ ×'Ò'¨Ñ1Ô1Ð1Ý”i  DÑ)Ô)�ð Ø! 7Ð*�Ø”>Ð-Ø*0�D”N 3Ñ'Ø�Ø�Ø�Ø�Ø# wÐ.Ð.ݘwÐ'7Ô8Ñ9Ô9�DØð3Ø�J˜x¨¨TÑ2Ô2Ð2ð7ØŸGšG B™KœK�EØ ðØØ�C ™JœJÑ&�DØ—I’I˜eÑ$Ô$Ð$Ø ‘M�HØ!ð7Ø"˜  8¨R°Ñ6Ô6Ð6ð7ðð— ’ ‘ ” � � ø�— ’ ‘ ” � � øøø� à �HŠH‰JŒJˆJˆJøˆB�HŠH‰JŒJˆJˆJøøøð �1Š9ˆ9˜ š˜Ý&ØCؘ�,ñØ &ñ(ô(ð (ðˆ s9ÁA B8Â8 CÃCÃC JÇBI0ÉJÉ0JÊJÊJ5có<—d}d}t|t¦«r8t|¦«\}}|r!t|¦«\}}t |¦«}|}nŠ|\}}t|¦«\}}t |¦«\} } | }d}|  ¦«dkrd}nBt| ¦«\}} |rt|¦«\}}|r | ›d|›| ›�}t|¦«r|}|stdd¦«‚|rIt |¦«}tj |  ¦«¦«  d¦«} nd} |rIt |¦«}tj |  ¦«¦«  d¦«} nd} ||¦«} i}| rd| z|d<| rd| z|d <|r||d <d |d <|j D] \}}|||<Œ |�d |d<|  d|||¦«n|  d||¬¦« |  ¦«}n'#t jj$rt'd¦«‚wxYwd|jcxkrdkr"nnt+||jd|z|j¦«S| ||j|j|j|j|¦«S)a‘Make an HTTP connection using connection_class. This is an internal method that should be called from open_http() or open_https(). Arguments: - connection_factory should take a host name and return an HTTPConnection instance. - url is the url to retrieval or a host, relative-path pair. - data is payload for a POST request or None. Nrz://z http errorr?r|zBasic %sr/rÔr�r÷rJr@z Content-Typer¬r­rMz$http protocol error: bad status liner0r1úhttp:)rrr rr r r†rr}r€r�r‚rƒrÕr‡rRrrÚ BadStatusLinerÚstatusrr3Ú http_errorrsrT)r”Úconnection_factoryrNrOÚ user_passwdÚ proxy_passwdrˆr¡ÚrealhostrùrªÚ proxy_authrÒÚ http_connrtrÃr–rãs rSÚ_open_generic_httpzURLopener._open_generic_httpTs:€ðˆ ؈ Ý �c�3Ñ Ô ð $Ý'¨™_œ_‰NˆD�(Øð %Ý$.¨tÑ$4Ô$4Ñ!� ˜Tݘt‘}”}�؈HˆHà ‰NˆD�(å!+¨DÑ!1Ô!1Ñ ˆL˜$å& xÑ0Ô0‰MˆG�T؈C؈KØ�}Š}‰Œ &Ò(Ð(Ø��å!+¨DÑ!1Ô!1‘�˜$ØðAÝ,6°xÑ,@Ô,@Ñ)�K ØðGØ.5¨g¨g°x°xÀÀÐF�HÝ Ñ)Ô)ð$Ø#�DàÐA�7 <°ÑAÔAÐAà ð Ý" <Ñ0Ô0ˆLÝÔ)¨,×*=Ò*=Ñ*?Ô*?Ñ@Ô@×GÒGÈÑPÔPˆJˆJàˆJà ð Ý! +Ñ.Ô.ˆKÝÔ# K×$6Ò$6Ñ$8Ô$8Ñ9Ô9×@Ò@ÀÑIÔIˆDˆDàˆDØ&Ð& tÑ,Ô,ˆ ØˆØ ð EØ-7¸*Ñ-DˆGÐ)Ñ *Ø ð :Ø(2°TÑ(9ˆG�OÑ $Ø ð 'Ø&ˆG�F‰Oð !(ˆ� Ñà!œ_ð $ð $‰MˆF�EØ#ˆG�F‰OˆOà Ð Ø&IˆG�NÑ #Ø × Ò ˜f h°°gÑ >Ô >Ð >Ð >à × Ò ˜e X°wÐ Ñ ?Ô ?Ð ?ð CØ ×,Ò,Ñ.Ô.ˆHˆHøÝŒ{Ô(ð Cð Cð CåÐAÑBÔBÐ Bð Cøøøð �(”/Ð 'Ð 'Ò 'Ð ' CÒ 'Ð 'Ð 'Ð 'Ð 'ݘh¨¬ °gÀ±mØ&œoñ/ô/ð /ð—?’?Ø�X”[Ø” ¤°(´,ÀñFôFð Fs ÈHÈ$H9cóN—| tjj||¦«S)zUse HTTP protocol.)rrrr;©r”rNrOs rSÚ open_httpzURLopener.open_http°s€à×&Ò&¥t¤{Ô'AÀ3ÈÑMÔMÐMrTcóÊ—d|z}t||¦«r6t||¦«}|€||||||¦«} n|||||||¦«} | r| S| |||||¦«S)zœHandle http errors. Derived class can override this, or provide specific handlers named http_error_DDD where DDD is the 3-digit error code.z http_error_%d)rär®r) r”rNrsÚerrcodeÚerrmsgrtrOrir“rvs rSr zURLopener.http_error´sŒ€ð  Ñ(ˆÝ �4˜Ñ Ô ð %ݘT 4Ñ(Ô(ˆF؈|ؘ  R¨°&¸'ÑBÔB��à˜  R¨°&¸'À4ÑHÔH�ØÐ $˜f�}Ø×&Ò& s¨B°¸ÀÑIÔIÐIrTcóP—| ¦«t||||d¦«‚)z>Default error handler: close the connection and raise OSError.N)r÷r©r”rNrsrrrts rSrzURLopener.http_error_defaultÄs%€à �Љ Œ ˆ ݘ˜W f¨g°tÑ<Ô<ÐÑ?Ô?Ð?Ý Ñ%Ô%‰ ˆˆdÝ Ñ%Ô%‰ ˆˆdØ ð ¥ ¨TÑ 2Ô 2‘��v�v؈fÝ�t‰}Œ}ˆÝ�t�z˜rÑ"Ô"ˆÝ˜˜ 2Ñ&Ô&ˆÝÔ# DÑ)Ô)ˆØð Ø ˆMˆMˆMØ”?ˆDˆDå�t‘9”9ˆDÝ  Ñ&Ô&‰ ˆˆeÝ�t‰}Œ}ˆØ�zŠz˜#‰ŒˆØ˜#˜2˜#”Y  R¤ˆdˆØ Ð0˜˜QœÐ0¨¨Q¨R¨R¬ Ø Ð.˜˜QœÐ.¨3  a¡Ø�D˜$ §¢¨¡¤Ð.ˆå ˆtŒ}Ñ Ô ¥ Ò +Ð +å˜$œ-Ñ(Ô(ð ð �ؘ’8�8Øœ  aÔ(�AØœ  aÐ(Ø—G’G‘I”I�Iøð 9ؘ$œ-Ð'Ð'å˜t V¨T°4¸Ñ>Ô>ð” ˜cÑ"àð  ˜˜Ø�$Øð )ð )�Ý)¨$Ñ/Ô/‘ ��eØ—:’:‘<”< 6Ò)Ð)ØÐ:Ð:Ð:Ø Ÿ;š;™=œ=�DøØ œM¨#Ô.×7Ò7¸¸dÑCÔC‰MˆR�Ø×(Ò(¨°#©Ñ6Ô6°qÔ9ˆE؈GØð 8ØÐ/°%Ñ7Ñ7�ØÐ" w°!¢| |ØÐ1°GÑ;Ñ;�ÝÔ/°Ñ8Ô8ˆGݘb '¨6°C©<Ñ8Ô8Ð 8øÝ‰{Œ{ð 9ð 9ð 9ÝÐ.¨Ð.Ð.Ñ/Ô/°SÐ 8øøøøð 9øøøsÇC7K Ë K2ËK-Ë-K2c óð—t|t¦«std¦«‚ | dd¦«\}}n#t$rt dd¦«‚wxYw|sd}| d¦«}|dkr$d ||d …vr||dzd …}|d |…}nd }g}| d tj d tj tj¦«¦«¦«z¦«| d|z¦«|dkr;tj |  d¦«¦« d¦«}nt|¦«}| dt!|¦«z¦«| d ¦«| |¦«d |¦«}t%j|¦«}t)j|¦«}t-|||¦«S)zUse "data" URL.zEdata error: proxy support for data protocol currently not implementedrr_z data errorz bad data URLrÒú;rrrNr€zDate: %sz%a, %d %b %Y %H:%M:%S GMTzContent-type: %sr€r|zlatin-1zContent-Length: %dú )rrrrÂrDr}ÚrfindrkrÚstrftimeÚgmtimer€rÕr‚rƒr rnrÇr›r™rÖÚStringIOr) r”rNrOr©ÚsemirRr3rtÚfs rSÚ open_datazURLopener.open_data6sî€å˜#�sÑ#Ô#ð dÝÐbÑcÔcÐ cð 8ØŸ9š9 S¨!Ñ,Ô,‰LˆT�4�4øÝð 8ð 8ð 8ݘ,¨Ñ7Ô7Ð 7ð 8øøøàð 1Ø0ˆDØ�zŠz˜#‰ŒˆØ �1Š9ˆ9˜ D¨¨¨¤KÐ/Ð/ؘD ™F˜G˜G”}ˆHؘ˜˜”;ˆDˆDàˆHØˆØ � Š �:�dœmÐ,GÝ,0¬K½¼ ¹ ¼ Ñ,DÔ,DñFôFñFñ Gô Gð Gà � Š Ð%¨Ñ,Ñ-Ô-Ð-Ø �xÒ Ð åÔ% d§k¢k°'Ñ&:Ô&:Ñ;Ô;×BÒBÀ9ÑMÔMˆDˆDå˜4‘=”=ˆDØ � Š Ð'­#¨d©)¬)Ñ3Ñ4Ô4Ð4Ø � Š �2‰ŒˆØ � Š �4ÑÔÐØ�iŠi˜‰nŒnˆÝÔ+¨CÑ0Ô0ˆÝ ŒK˜Ñ Ô ˆå˜!˜W cÑ*Ô*Ð*s ¦AÁArV©NNN)rÊrËrÌr5rçrÔrær—rír÷rïròrMrør÷rrrr rrErr r#rƒr.r8rÐrTrSr9r9£s¢€€€€€ððð€Kà  ;Ñ.€Gð!ð!ð!ð!ð4ðððððð #ð #ð #ð%ð%ð%ð "8ð"8ð"8ð"8ðH=ð=ð=ð=ð IðIðIðIð =ð=ð=ð=ðBZFðZFðZFðxNðNðNðNðJðJðJðJð =ð=ð=ð ðNð Eð Eð Eð  Nð Nð Nð Nð-ð-ð-ð>ð>ð>ð@89ð89ð89ðt'+ð'+ð'+ð'+ð'+ð'+rTr9có’—eZdZdZd„Zd„Zdd„Zd„Zdd„Zdd„Z dd „Z dd „Z dd „Z dd „Z dd„Zdd„Zdd„Zdd„Zdd„Zd„ZdS)r:z?Derived class with handlers for errors we can handle (perhaps).cóZ—tj|g|¢Ri|¤Ži|_d|_d|_dS)Nrr;)r9r—Ú auth_cacheÚtriesÚmaxtries)r”rür®s rSr—zFancyURLopener.__init__cs<€ÝÔ˜4Ð1 $Ð1Ð1Ð1¨&Ð1Ð1Ð1؈ŒØˆŒ ؈Œ ˆ ˆ rTcó,—t||d|z|¦«S)z3Default error handling -- don't raise an exception.r )rrs rSrz!FancyURLopener.http_error_defaultis€å˜"˜g w°¡}°gÑ>Ô>Ð>rTNcó—|xjdz c_ |jrE|j|jkr5t|d¦«r|j}n|j}|||dd|¦«d|_S| ||||||¦«}|d|_S#d|_wxYw)z%Error 302 -- relocated (temporarily).r_Úhttp_error_500r&z)Internal Server Error: Redirect Recursionr)r=r>rärArÚredirect_internal) r”rNrsrrrtrOrîrvs rSr`zFancyURLopener.http_error_302ms¸€à ˆ Œ �a‰ˆ Œ ð ØŒ}ð % ¤¨t¬}Ò!<Ð!<ݘ4Ð!1Ñ2Ô2ð3ØÔ.�D�DàÔ2�DØ�t˜C  SØGØ#ñ%ô%ðˆDŒJˆJð ×+Ò+¨C°°W¸fØ,3°Tñ;ô;ˆFààˆDŒJˆJø˜ˆDŒJˆNˆNˆNˆNs’ABÁB B có$—d|vr |d}nd|vr |d}ndS| ¦«t|jdz|z|¦«}t|¦«}|jdvrt |||d|zz||¦«‚| |¦«S)NrMrNr{rOz( Redirection to url '%s' is not allowed.)r÷rr©rrVrrM) r”rNrsrrrtrOrIr]s rSrBz FancyURLopener.redirect_internalsº€Ø ˜Ð РؘZÔ(ˆFˆFØ �gРРؘU”^ˆFˆFà ˆFØ �Љ Œ ˆ õ˜œ S™¨3Ñ.°Ñ7Ô7ˆå˜FÑ#Ô#ˆð Œ?Ð">Ð >Ð >ݘF GØ"ØFÈÑOñPà# Rñ)ô)ð )ð �yŠy˜Ñ Ô Ð rTcó6—| ||||||¦«S)z*Error 301 -- also relocated (permanently).©r`©r”rNrsrrrtrOs rSrazFancyURLopener.http_error_301›ó €à×"Ò" 3¨¨G°V¸WÀdÑKÔKÐKrTcó6—| ||||||¦«S)z;Error 303 -- also relocated (essentially identical to 302).rErFs rSrbzFancyURLopener.http_error_303ŸrGrTcól—|€| ||||||¦«S| |||||¦«S)z1Error 307 -- relocated, but turn POST into error.)r`rrFs rSrczFancyURLopener.http_error_307£óA€à ˆ<Ø×&Ò& s¨B°¸ÀÈ$ÑOÔOÐ Oà×*Ò*¨3°°G¸VÀWÑMÔMÐ MrTcól—|€| ||||||¦«S| |||||¦«S)z1Error 308 -- relocated, but turn POST into error.)rarrFs rSrdzFancyURLopener.http_error_308ªrJrTFcó*—d|vrt ||||||¦«|d}tjd|¦«} | st ||||||¦«|  ¦«\} } |  ¦«dkrt ||||||¦«|st ||||||¦«d|jzdz} |€t|| ¦«|| ¦«St|| ¦«|| |¦«S)z_Error 401 -- authentication required. This function supports Basic authentication only.ráú![ ]*([^ ]+)[ ]+realm="([^"]*)"rÈÚretry_Ú _basic_auth©r9rrÛÚmatchrÀr†r©r®© r”rNrsrrrtrOr-ÚstuffrQrVr“ris rSrâzFancyURLopener.http_error_401±sN€ð  WÐ ,Ð ,Ý × (Ò (¨¨s°BØ)0°&¸'ñ Cô Cð CàÐ*Ô+ˆÝ”Ð?ÀÑGÔGˆØð CÝ × (Ò (¨¨s°BØ)0°&¸'ñ Cô Cð CàŸ š ™œ‰ ˆ�Ø �<Š<‰>Œ>˜WÒ $Ð $Ý × (Ò (¨¨s°BØ)0°&¸'ñ Cô Cð Càð Ý × (Ò (¨¨s°B¸ÀØñ ô ð à˜$œ)Ñ# mÑ3ˆØ ˆ<Ø%•7˜4 Ñ%Ô% c¨5Ñ1Ô1Ð 1à%•7˜4 Ñ%Ô% c¨5°$Ñ7Ô7Ð 7rTcó*—d|vrt ||||||¦«|d}tjd|¦«} | st ||||||¦«|  ¦«\} } |  ¦«dkrt ||||||¦«|st ||||||¦«d|jzdz} |€t|| ¦«|| ¦«St|| ¦«|| |¦«S)zeError 407 -- proxy authentication required. This function supports Basic authentication only.rærMrÈÚ retry_proxy_rOrPrRs rSrçzFancyURLopener.http_error_407ÊsN€ð  wÐ .Ð .Ý × (Ò (¨¨s°BØ)0°&¸'ñ Cô Cð CàÐ,Ô-ˆÝ”Ð?ÀÑGÔGˆØð CÝ × (Ò (¨¨s°BØ)0°&¸'ñ Cô Cð CàŸ š ™œ‰ ˆ�Ø �<Š<‰>Œ>˜WÒ $Ð $Ý × (Ò (¨¨s°BØ)0°&¸'ñ Cô Cð Càð Ý × (Ò (¨¨s°B¸ÀØñ ô ð à ¤ Ñ)¨MÑ9ˆØ ˆ<Ø%•7˜4 Ñ%Ô% c¨5Ñ1Ô1Ð 1à%•7˜4 Ñ%Ô% c¨5°$Ñ7Ô7Ð 7rTcóæ—t|¦«\}}d|z|z}|jd}t|¦«\}} t| ¦«\} } |  d¦«dz} | | d…} | | || ¦«\} } | s| sdSt | d¬¦«›dt | d¬¦«›d| ›�} d| z| z|jd<|€| |¦«S| ||¦«S)Núhttp://rrgr_r€rôr{©r rxr rçÚget_user_passwdr rM©r”rNr“rOrˆr¡rIrhrùrúÚ proxyselectorrïrorŠs rSÚretry_proxy_http_basic_authz*FancyURLopener.retry_proxy_http_basic_authãs€Ý# C™œ‰ˆˆhؘTÑ! HÑ,ˆØ” ˜VÔ$ˆÝ'¨Ñ.Ô.ш�Ý#-¨iÑ#8Ô#8Ñ ˆ �=Ø �NŠN˜3Ñ Ô  !Ñ #ˆØ˜a˜b˜b”Mˆ Ø×+Ò+¨I°u¸aÑ@Ô@‰ ˆˆfØÐ,˜Ð,¨¨Ý"'¨°2Ð"6Ñ"6Ô"6Ð"6Ð"6Ý"'¨°RÐ"8Ñ"8Ô"8Ð"8Ð"8¸)¸)ðEˆ à(¨9Ñ4°}ÑDˆŒ �VÑØ ˆ<Ø—9’9˜VÑ$Ô$Ð $à—9’9˜V TÑ*Ô*Ð *rTcóæ—t|¦«\}}d|z|z}|jd}t|¦«\}} t| ¦«\} } |  d¦«dz} | | d…} | | || ¦«\} } | s| sdSt | d¬¦«›dt | d¬¦«›d| ›�} d| z| z|jd<|€| |¦«S| ||¦«S)Núhttps://r´rgr_r€rôr{rXrZs rSÚretry_proxy_https_basic_authz+FancyURLopener.retry_proxy_https_basic_authõs€Ý# C™œ‰ˆˆhؘdÑ" XÑ-ˆØ” ˜WÔ%ˆÝ'¨Ñ.Ô.ш�Ý#-¨iÑ#8Ô#8Ñ ˆ �=Ø �NŠN˜3Ñ Ô  !Ñ #ˆØ˜a˜b˜b”Mˆ Ø×+Ò+¨I°u¸aÑ@Ô@‰ ˆˆfØÐ,˜Ð,¨¨Ý"'¨°2Ð"6Ñ"6Ô"6Ð"6Ð"6Ý"'¨°RÐ"8Ñ"8Ô"8Ð"8Ð"8¸)¸)ðEˆ à *¨YÑ 6¸Ñ FˆŒ �WÑØ ˆ<Ø—9’9˜VÑ$Ô$Ð $à—9’9˜V TÑ*Ô*Ð *rTcód—t|¦«\}}| d¦«dz}||d…}| |||¦«\}}|s|sdSt|d¬¦«›dt|d¬¦«›d|›�}d|z|z} |€| | ¦«S| | |¦«S)Nrgr_r€rôr{rW©r rçrYr rM© r”rNr“rOrˆr¡rïrorŠrIs rSrÊz$FancyURLopener.retry_http_basic_auth sÍ€Ý# C™œ‰ˆˆhØ �IŠI�c‰NŒN˜QÑ ˆØ�A�B�BŒxˆØ×+Ò+¨D°%¸Ñ;Ô;‰ ˆˆfØÐ,˜Ð,¨¨Ý" 4¨bÐ1Ñ1Ô1Ð1Ð1Ý" 6°Ð3Ñ3Ô3Ð3Ð3°T°Tð;ˆà˜TÑ! HÑ,ˆØ ˆ<Ø—9’9˜VÑ$Ô$Ð $à—9’9˜V TÑ*Ô*Ð *rTcód—t|¦«\}}| d¦«dz}||d…}| |||¦«\}}|s|sdSt|d¬¦«›dt|d¬¦«›d|›�}d|z|z} |€| | ¦«S| | |¦«S)Nrgr_r€rôr{r^rarbs rSÚretry_https_basic_authz%FancyURLopener.retry_https_basic_auth sÍ€Ý# C™œ‰ˆˆhØ �IŠI�c‰NŒN˜QÑ ˆØ�A�B�BŒxˆØ×+Ò+¨D°%¸Ñ;Ô;‰ ˆˆfØÐ,˜Ð,¨¨Ý" 4¨bÐ1Ñ1Ô1Ð1Ð1Ý" 6°Ð3Ñ3Ô3Ð3Ð3°T°Tð;ˆà˜dÑ" XÑ-ˆØ ˆ<Ø—9’9˜VÑ$Ô$Ð $à—9’9˜V TÑ*Ô*Ð *rTrcóÒ—|dz| ¦«z}||jvr|r |j|=n |j|S| ||¦«\}}|s|r ||f|j|<||fS)Nrg)r†r<Úprompt_user_passwd)r”rˆr“rÏr•rorŠs rSrYzFancyURLopener.get_user_passwd# s„€Ø�c‰k˜DŸJšJ™LœLÑ(ˆØ �$”/Ð !Ð !Øð ,Ø”O CÐ(Ð(à” sÔ+Ð+Ø×.Ò.¨t°UÑ;Ô;‰ ˆˆfØ Ð@�6Ð@°4¸°.˜4œ?¨3Ñ/Ø�Vˆ|ÐrTc ó¼—ddl} td|›d|›d�¦«}| d|›d|›d|›d�¦«}||fS#t$rt¦«YdSwxYw) z#Override this in a GUI environment!rNzEnter username for z at z: zEnter password for z in r—)ÚgetpassÚinputÚKeyboardInterruptÚprint)r”rˆr“rhrorŠs rSrfz!FancyURLopener.prompt_user_passwd. sŽ€àˆˆˆð Ý�5¸E¸E¸EÀ4À4À4ÐHÑIÔIˆDØ—_’_�_Ø���u�u�u˜d˜d˜dð&$ñ%ô%ˆFà˜�<Ð øÝ ð ð ð Ý ‰GŒGˆGØ�:�:ð øøøs†8?¿AÁArV)NFrZ)rÊrËrÌr5r—rr`rBrarbrcrdrârçr\r_rÊrdrYrfrÐrTrSr:r:`sj€€€€€ØIÐIðððð ?ð?ð?ððððð$!ð!ð!ð8LðLðLðLðLðLðLðLðNðNðNðNðNðNðNðNðFJØð8ð8ð8ð8ð2FJØð8ð8ð8ð8ð2+ð+ð+ð+ð$+ð+ð+ð+ð$ +ð +ð +ð +ð +ð +ð +ð +ð ð ð ð ð ð ð ð ð rTr:cóF—t€tjd¦«atS)z8Return the IP address of the magic hostname 'localhost'.Nr€)Ú _localhostrrŠrÐrTrSr€r€> s €õÐÝÔ)¨+Ñ6Ô6ˆ Ý ÐrTcó —t€v ttjtj¦«¦«d¦«an<#tj$r*ttjd¦«d¦«aYnwxYwtS)z,Return the IP addresses of the current host.Nr;r€)Ú _thishostr’rr‡rˆr‰rÐrTrSr&r&F s€€õÐð GÝ�fÔ5µfÔ6HÑ6JÔ6JÑKÔKÈAÔNÑOÔOˆIˆIøÝŒð Gð Gð GÝ�fÔ5°kÑBÔBÀ1ÔEÑFÔFˆIˆIˆIð Gøøøå Ðs‰8AÁ6A;Á:A;có4—t€ ddl}|jatS)z1Return the set of errors raised by the FTP class.Nr)Ú _ftperrorsrªr°)rªs rSr-r-Q s!€õÐØˆ ˆ ˆ ØÔ&ˆ Ý ÐrTcóF—t€tjd¦«atS)z%Return an empty email Message object.Nr€)Ú _noheadersr›r™rÐrTrSÚ noheadersrtZ s €õÐÝÔ.¨rÑ2Ô2ˆ Ý ÐrTcóB—eZdZdZ d d„Zd„Zd„Zd„Zd„Zd „Z d „Z dS) r¹z;Class used by open_ftp() for cache of open FTP connections.NTcóÔ—||_||_||_||_||_||_d|_||_ | ¦«dS#|  ¦«‚xYwrê) rorŠrˆr¢r²rPÚrefcountÚ keepaliveÚinitr÷)r”rorŠrˆr¢r²rPr¸s rSr—zftpwrapper.__init__g si€àˆŒ ؈Œ ؈Œ ؈Œ ؈Œ ؈Œ ؈Œ Ø#ˆŒð Ø �IŠI‰KŒKˆKˆKˆKøð Ø �JŠJ‰LŒLˆLØ øøøs ºAÁA'cóV—ddl}d|_| ¦«|_|j |j|j|j¦«|j |j |j ¦«d  |j ¦«}|j  |¦«dS)NrrQ)rªÚbusyÚFTPrPÚconnectrˆr¢rPÚloginrorŠrÇr²Úcwd)r”rªÚ_targets rSryzftpwrapper.initw sˆ€Øˆ ˆ ˆ ؈Œ Ø—:’:‘<”<ˆŒØ Œ×Ò˜œ D¤I¨t¬|Ñ<Ô<Ð<Ø Œ�Š�t”y $¤+Ñ.Ô.Ð.Ø—(’(˜4œ9Ñ%Ô%ˆØ Œ� Š �WÑÔÐÐÐrTcóD—ddl}| ¦«|dvrd}d}nd|z}d} |j |¦«n>#|j$r1| ¦«|j |¦«YnwxYwd}|rk|si d|z}|j |¦«\}}nE#|j$r8}t|¦«dd…dkrtd |›�¦«|‚Yd}~nd}~wwxYw|s×|j d¦«|rœ|j  ¦«} |j  |¦«n%#|j$r}td |z¦«|‚d}~wwxYw |j  | ¦«n#|j  | ¦«wxYwd |z}nd }|j |¦«\}}d|_ t| d ¦«|j¦«} |xjdz c_| ¦«| |fS)Nr)r'r¦zTYPE Ar_zTYPE zRETR r½Ú550r+z ftp error: %rzLIST ÚLISTr�)rªÚ endtransferrPÚvoidcmdr°ryÚ ntransfercmdÚ error_permrrÚpwdrr{rÚmakefileÚ file_closerwr÷) r”rXr©rªÚcmdÚisdirrÎrµrTrˆÚftpobjs rSr¯zftpwrapper.retrfile€ s�€Øˆ ˆ ˆ Ø ×ÒÑÔÐØ �:Ð Ð  X˜s°q¨u¨uؘd‘Nˆc¨A Eð "Ø ŒH× Ò ˜SÑ !Ô !Ð !Ð !øØÔ ð "ð "ð "Ø �IŠI‰KŒKˆKØ ŒH× Ò ˜SÑ !Ô !Ð !Ð !Ð !ð "øøøðˆØ ð G˜ð Gð GØ ‘n�Ø $¤× 5Ò 5°cÑ :Ô :‘ ��g�gøØÔ$ð Gð Gð GÝ�v‘;”;˜r ˜r”? eÒ+Ð+Ý"Ð#9°Ð#9Ð#9Ñ:Ô:ÀÐFð,Ð+Ð+Ð+Ð+øøøøð Gøøøðð 7à ŒH× Ò ˜XÑ &Ô &Ð &àð Ø”h—l’l‘n”n�ð&ðMØœŸ š  TÑ*Ô*Ð*Ð*øØ!Ô,ðMðMðMÝ& ¸Ñ'?Ñ@Ô@ÀfÐLøøøøðMøøøð+ð”H—L’L Ñ%Ô%Ð%Ð%ø�D”H—L’L Ñ%Ô%Ð%Ð%øøøØ ‘n��à�Ø œH×1Ò1°#Ñ6Ô6‰MˆD�'؈Œ å˜dŸmšm¨DÑ1Ô1°4´?ÑCÔCˆØ ˆ Œ ˜Ñˆ Œ Ø � Š ‰ Œ ˆ à˜Ð Ð sSªAÁ8BÁ?B "B-Â- C/Â7.C*Ã*C/Ä+EÅFÅ E(ÅE#Å#E(Å(FÆF#cóŠ—|jsdSd|_ |j ¦«dS#t¦«$rYdSwxYwrê)r{rPÚvoidrespr-rœs rSr„zftpwrapper.endtransfer¬ s]€ØŒyð Ø ˆF؈Œ ð Ø ŒH× Ò Ñ Ô Ð Ð Ð øÝ‰{Œ{ð ð ð Ø ˆDˆDð øøøs’-­AÁAcóV—d|_|jdkr| ¦«dSdS)NFr)rxrwÚ real_closerœs rSr÷zftpwrapper.closeµ s4€ØˆŒØ Œ=˜AÒ Ð Ø �OŠOÑ Ô Ð Ð Ð ð Ð rTcó¢—| ¦«|xjdzc_|jdkr|js| ¦«dSdSdS)Nr_r)r„rwrxr‘rœs rSrŠzftpwrapper.file_closeº s\€Ø ×ÒÑÔÐØ ˆ Œ ˜Ñˆ Œ Ø Œ=˜AÒ Ð  d¤nÐ Ø �OŠOÑ Ô Ð Ð Ð ð Ð Ð Ð rTcó’—| ¦« |j ¦«dS#t¦«$rYdSwxYwrV)r„rPr÷r-rœs rSr‘zftpwrapper.real_closeÀ sW€Ø ×ÒÑÔÐð Ø ŒH�NŠNÑ Ô Ð Ð Ð øÝ‰{Œ{ð ð ð Ø ˆDˆDð øøøs–1±AÁA)NT) rÊrËrÌr5r—ryr¯r„r÷rŠr‘rÐrTrSr¹r¹d s�€€€€€ØEÐEà?CØ ððððð ððð*!ð*!ð*!ðXðððððð ððð ððððrTr¹cóä—i}tj ¦«D]6\}}| ¦«}|r|dd…dkr |||dd…<Œ7dtjvr| dd¦«tj ¦«D]U\}}|dd…dkrB| ¦«}|r|||dd…<Œ7| |dd…d¦«ŒV|S)aReturn a dictionary of scheme -> proxy server URL mappings. Scan the environment for variables named _proxy; this seems to be the standard convention. If you need a different way, you can pass a proxies dictionary to the [Fancy]URLopener constructor. iúÿÿÿNÚ_proxyÚREQUEST_METHODr)rdÚenvironr�r†rÅ)rxrir–s rSÚgetproxies_environmentr˜È s €ð€Gõ”z×'Ò'Ñ)Ô)ð'ð'‰ ˆˆeØ�zŠz‰|Œ|ˆØ ð '�T˜"˜#˜#”Y (Ò*Ð*Ø!&ˆG�D˜˜"˜”IÑ øð �2œ:Ð%Ð%Ø� Š �F˜DÑ!Ô!Ð!Ý”z×'Ò'Ñ)Ô)ð-ð-‰ ˆˆeØ ���Œ9˜Ò Ð Ø—:’:‘<”<ˆDØð -Ø%*�˜˜S˜b˜Sœ Ñ"Ð"à— ’ ˜D  " œI tÑ,Ô,Ð,øØ €NrTcóè—|€t¦«} |d}n#t$rYdSwxYw|dkrdS| ¦«}t|¦«\}}| d¦«D]‚}| ¦«}|rj| d¦«}| ¦«}||ks||krdSd|z}| |¦«s| |¦«rdSŒƒdS)zÇTest if proxies should not be used for a particular host. Checks the proxy dict for the value of no_proxy, which should be a list of comma separated DNS suffixes, or '*' for all hosts. NÚnoFÚ*Trú.)r˜rr†rrÂrÖÚlstriprÔ)rˆrxÚno_proxyÚhostonlyr¢ris rSÚproxy_bypass_environmentr ç s€ð€Ý(Ñ*Ô*ˆðؘ4”=ˆˆøÝ ððð؈uˆuðøøøð�3‚€ØˆtØ �:Š:‰<Œ<€Då Ñ%Ô%�N€Hˆdà—’˜sÑ#Ô#ð ð ˆØ�zŠz‰|Œ|ˆØ ð Ø—;’;˜sÑ#Ô#ˆDØ—:’:‘<”<ˆDؘ4ÒР4¨4¢< <Ø�t�tؘ‘:ˆDØ× Ò  Ñ&Ô&ð ¨$¯-ª-¸Ñ*=Ô*=ð Ø�t�tøà ˆ5s ’› )¨)cóx—ddlm}ddlm}m}t |¦«\}}d„}d|vr |drdSd} t ||¦«¦«}n #|$rYnwxYw| d d ¦«D]Ê} | sŒtjd | ¦«} | �Ÿ|��||   d ¦«¦«} |   d ¦«} | €/d|   d ¦«  d¦«d zz} nt | d d…¦«} | dks| dkrŒ¦d| z } || z | | z krdSŒ»||| ¦«rdSŒËdS)aj Return True iff this host shouldn't be accessed using a proxy This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. proxy_settings come from _scproxy._get_proxy_settings or get mocked ie: { 'exclude_simple': bool, 'exceptions': ['foo.bar', '*.bar.com', '127.0.0.1', '10.1', '10.0/16'] } r©Úfnmatch)ÚAddressValueErrorÚ IPv4Addresscó —| d¦«}ttt|¦«¦«}t |¦«dkr|gd¢zdd…}|ddz|ddzz|dd zz|d zS) Nrœr:)rrrrrér_rr;rÿr½)rÂrÇr¬rlrn)ÚipAddrr¡s rSÚip2numz,_proxy_bypass_macosx_sysconf..ip2num s€Ø— ’ ˜SÑ!Ô!ˆÝ•S�˜e‘_”_Ñ%Ô%ˆÝ ˆu‰:Œ:˜Š?ˆ?ؘ\˜\˜\Ñ)¨2¨A¨2Ô.ˆEØ�a”˜B‘ 5¨¤8¨r¡>Ñ2°e¸A´hÀ!±mÑDÀuÈQÄxÑOÐOrTrœÚexclude_simpleTNÚ exceptionsrÐz(\d+(?:\.\d+)*)(/\d+)?r_r;rÿé F) r£Ú ipaddressr¤r¥rrlrÂrÛrQÚgroupÚcount) rˆÚproxy_settingsr£r¤r¥rŸr¢r©ÚhostIPr–rJr¥Úmasks rSÚ_proxy_bypass_macosx_sysconfr³ sÅ€ð ÐÐÐÐÐØ8Ð8Ð8Ð8Ð8Ð8Ð8Ð8å Ñ%Ô%�N€HˆdðPðPðPð �$€€Ø Ð*Ô +ð Ø�4à €Fð Ý�[�[ Ñ*Ô*Ñ+Ô+ˆˆøØ ð ð ð Ø ˆð øøøð ×#Ò# L°"Ñ5Ô5ððˆàÐ�hå ŒHÐ.°Ñ 6Ô 6ˆØ ˆ=˜VÐ/Ø�6˜!Ÿ'š' !™*œ*Ñ%Ô%ˆDØ—7’7˜1‘:”:ˆD؈|ؘAŸGšG A™JœJ×,Ò,¨SÑ1Ô1°AÑ5Ñ6��å˜4   œ8‘}”}�à�aŠxˆx˜4 "š9˜9àà˜‘9ˆDà˜$‘ D¨D¡LÒ1Ð1Ø�t�tð2ðˆW�T˜5Ñ !Ô !ð Ø�4�4ð ð ˆ5sµAÁAÁAcóÌ—ddlm}t|¦«\}}| d¦«}|D]3}| ¦«}|dkrd|vrdSŒ$|||¦«rdSŒ4dS)a Return True if the host should bypass the proxy server. The proxy override list is obtained from the Windows Internet settings proxy override registry value. An example of a proxy override value is: "www.example.com;*.example.net; 192.168.0.1" rr¢r0zrœTF)r£rrÂrÖ)rˆÚoverrider£ráÚproxy_overrider¦s rSÚ_proxy_bypass_winreg_overrider·L s™€ð ÐÐÐÐÐå˜ÑÔ�G€Dˆ!Ø—^’^ CÑ(Ô(€NØððˆØ�zŠz‰|Œ|ˆà �9Ò Ð Ø˜$ˆˆØ�t�tðà ˆW�T˜4Ñ Ô ð Ø�4�4ð à ˆ5rTÚdarwin)Ú_get_proxy_settingsÚ _get_proxiescó>—t¦«}t||¦«SrV)r¹r³)rˆr°s rSÚproxy_bypass_macosx_sysconfr¼g s€Ý,Ñ.Ô.ˆÝ+¨D°.ÑAÔAÐArTcó—t¦«S)z±Return a dictionary of scheme -> proxy server URL mappings. This function uses the MacOSX framework SystemConfiguration to fetch the proxy information. )rºrÐrTrSÚgetproxies_macosx_sysconfr¾k s€õ ‰~Œ~ÐrTcó`—t¦«}|rt||¦«St|¦«S)z¸Return True, if host should be bypassed. Checks proxy settings gathered from the environment, if specified, or from the MacOSX framework SystemConfiguration. )r˜r r¼©rˆrxs rSrru s5€õ)Ñ*Ô*ˆØ ð 5Ý+¨D°'Ñ:Ô:Ð :å.¨tÑ4Ô4Ð 4rTcó:—t¦«p t¦«SrV)r˜r¾rÐrTrSr6r6‚ s€Ý%Ñ'Ô'ÐFÕ+DÑ+FÔ+FÐFrTcó*—i} ddl}n#t$r|cYSwxYw | |jd¦«}| |d¦«d}|�r t | |d¦«d¦«}d|vrd|vrd |¦«}| d¦«D]J}| dd ¦«\}}tj d |¦«s|d vrd |z}n |d krd|z}|||<ŒK|  d ¦«rPtj dd|d ¦«}|  d¦«p||d<|  d¦«p||d<|  ¦«n#tttf$rYnwxYw|S)zxReturn a dictionary of scheme -> proxy server URL mappings. Win32 uses the registry to store proxies. rNú;Software\Microsoft\Windows\CurrentVersion\Internet SettingsÚ ProxyEnableÚ ProxyServerrrr0zhttp={0};https={0};ftp={0}r_z (?:[^/:]+)://)rr´rPrWÚsockszsocks://z ^socks://z socks4://rr´)ÚwinregÚ ImportErrorÚOpenKeyÚHKEY_CURRENT_USERÚ QueryValueExrršrÂrÛrQrÂr…ÚCloser}rDrå)rxrÇÚinternetSettingsÚ proxyEnableÚ proxyServerÚprðÚaddresss rSÚgetproxies_registryrÒ‡ s€ð ˆð Ø ˆMˆMˆMˆMøÝð ð ð àˆNˆNˆNð øøøð" Ø%Ÿ~š~¨fÔ.FØNñ Pô PÐ à ×-Ò-Ð.>Ø/<ñ>ô>Ø>?ôAˆKàñ Gå! &×"5Ò"5Ð6FØ7Dñ#Fô#FØFGô#IñJôJ� à˜kÐ)Ð)¨c¸Ð.DÐ.Dà">×"EÒ"EÀkÑ"RÔ"R�KØ$×*Ò*¨3Ñ/Ô/ð 0ð 0�AØ()¯ª°°Q©¬Ñ%�H˜gåœ8 O°WÑ=Ô=ð;à#Ð'?Ð?Ð?à&/°'Ñ&9˜G˜GØ%¨Ò0Ð0Ø&0°7Ñ&:˜GØ(/�G˜HÑ%Ð%à—;’;˜wÑ'Ô'ðGå œf \°;ÀÈÔ@PÑQÔQ�GØ&-§k¢k°&Ñ&9Ô&9Ð&D¸W�G˜F‘OØ'.§{¢{°7Ñ';Ô';Ð'F¸w�G˜GÑ$Ø × "Ò "Ñ $Ô $Ð $Ð $øÝ�¥YÐ/ð ð ð ð ˆDð  øøøð ˆs„ ‰ —œEE6Å6FÆFcó:—t¦«p t¦«S)z¥Return a dictionary of scheme -> proxy server URL mappings. Returns settings gathered from the environment, if specified, or the registry. )r˜rÒrÐrTrSr6r6¸ s€õ&Ñ'Ô'Ð@Õ+>Ñ+@Ô+@Ð@rTcóB— ddl}n#t$rYdSwxYw | |jd¦«}| |d¦«d}t | |d¦«d¦«}n#t $rYdSwxYw|r|sdSt||¦«S)NrFrÃrÄÚ ProxyOverride)rÇrÈrÉrÊrËrr}r·)rˆrÇrÍrÎÚ proxyOverrides rSÚproxy_bypass_registryr×Á sù€ð Ø ˆMˆMˆMˆMøÝð ð ð à�5�5ð øøøð Ø%Ÿ~š~¨fÔ.FØNñ Pô PÐ à ×-Ò-Ð.>Ø/<ñ>ô>Ø>?ôAˆKå × 3Ò 3Ð4DØ5Dñ!Fô!FØFGô!IñJôJˆMˆMøõð ð ð Ø�5�5ð øøøàð  -ð Ø�5Ý,¨T°=ÑAÔAÐAs‚‡ ”™A A:Á: BÂBcó`—t¦«}|rt||¦«St|¦«S)z—Return True, if host should be bypassed. Checks proxy settings gathered from the environment, if specified, or the registry. )r˜r r×rÀs rSrrÕ s5€õ)Ñ*Ô*ˆØ ð /Ý+¨D°'Ñ:Ô:Ð :å(¨Ñ.Ô.Ð .rTr9rV)r5r€rêr›rÚ http.clientrrÖrdÚ posixpathrÛrrXrrrgrarAÚ urllib.errorrrrÚ urllib.parserrrr r r r r rrrrrrrrrrÚurllib.responserrrFrErÈÚ__all__Ú version_inforÔrLrr1r2rjr7r8rÜÚASCIIr„r‰rrr3rr0rrrqr r!r"r#r$r%r&Úurandomrr'r(r)r2r*rärrKrkrr/rõr÷r+ršr,r-r.r,riÚ nturl2pathr5r4rêr9r:rmr€ror&rqr-rsrtr¹r˜r r³r·ÚplatformÚ_scproxyr¹rºr¼r¾rr6rÒr×rÐrTrSúråsù ððCðCðf€ € € Ø € € € Ø € € € Ø€€€ØÐÐÐØ € € € Ø € € € ØÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø€€€ØÐÐÐØ€€€ðCÐBÐBÐBÐBÐBÐBÐBÐBÐBð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð"ð 5Ð4Ð4Ð4Ð4Ð4Ð4Ð4ðØ€J€J€Jð€I€IøððððØ€I€I€Iðøøøð  ð ð €ð$˜Ô(¨¨!¨Ô,Ñ,€ à €Ø FÔ$BðM+Ø 4°5À$ðM+ðM+ðM+ðM+ðM+ð^ððð€ð=ð=ð=ð=ð~ ð ð ðˆrŒz˜( B¤HÑ-Ô-€ ðððð k"ðk"ðk"ðk"ðk"ñk"ôk"ðk"ðZI+ðI+ðI+ðI+ðI+ñI+ôI+ðI+ð^"ð"ð"ðH8ð8ð8ð8ð8ñ8ô8ð8ð&#ð#ð#ð#ð#˜ñ#ô#ð#ð";ð;ð;ð;ð;˜kñ;ô;ð;ðn2ðn2ðn2ðn2ðn2˜+ñn2ôn2ðn2ðb,ð,ð,ðB)>ð)>ð)>ð)>ð)>�;ñ)>ô)>ð)>ðV=*ð=*ð=*ð=*ð=*ñ=*ô=*ð=*ð@GðGðGðGðG oñGôGðGð3ð3ð3ð3ð3Ð#Bñ3ô3ð3ð>k#ðk#ðk#ðk#ðk#ñk#ôk#ðk#ð^ððððÐ3°[ñôðð ð ð ð ð Ð4°kñ ô ð ð Œz€ ðOðOðOðOðOñOôOðOðdðððð˜KÐ)Bñôðð$ ð ð ð ð ˜[Ð*Cñ ô ð ðsðsðsðsðs˜+ñsôsðsðl3ð3ð3ð3ð3Ð%ñ3ô3ð3ð €7ˆ4Œ;Ð)Ñ*Ô*ð#ð 8ð 8ð 8ð 8ð 8Ð*ñ 8ô 8ð 8ð ‡N‚N�>Ñ"Ô"Ð"ð#ð#ð#ð#ð#˜+ñ#ô#ð#ð$6ð6ð6ð6ð6�[ñ6ô6ð6ð ððð)*ð)*ð)*ðV11ð11ð11ð11ð11�+ñ11ô11ð11ðfððð 7,ð7,ð7,ð7,ð7,�ñ7,ô7,ð7,ðr3ð3ð3ð3ð3�jñ3ô3ð3ðj!:ð!:ð!:ð!:ð!:�+ñ!:ô!:ð!:ðL€ ð„7ˆd‚?€?Ø5Ð5Ð5Ð5Ð5Ð5Ð5Ð5Ð5ð!ð!ð!ð ððð €ðz+ðz+ðz+ðz+ðz+ñz+ôz+ðz+ðz XðXðXðXðX�YñXôXðXðz€ ðððð € ðððð€ ðððð€ ððððaðaðaðaðañaôaðaðHððð> ð ð ð ðJ<ð<ð<ð@ððð0„<�8ÒÐØ:Ð:Ð:Ð:Ð:Ð:Ð:Ð:ðBðBðBðððð 5ð 5ð 5ðGðGðGðGðGð„W�‚_€_ð/ð/ð/ðbAðAðAðBðBðBð( /ð /ð /ð /ð /ð(€JØ+€L€L€LsÁ>BÂBÂB