PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  oY]*@sddddddddgZdd lZdd lZdd lZdd lZdd lZdd lZydd lZ Wne k rdd l Z YnXdd l Z dd lmZd Zd ad d Zee jjZdZddZdZddZdddddddgZdddddd d!d"d#d$d%d&g ZgZx!eD]Zejej qSWd d'd(Z!d d)d*Z"d+d d,d d-d d.d iZ#ej$d/ej%Z&d0d1Z'd2d3Z(ej$d4ej%Z)ej$d5ej*ej%BZ+ej$d6ej,ej%BZ-d7d8Z.ej$d9ej,ej%BZ/d:d;Z0d<d=Z1ej$d>Z2ej$d?Z3ej$d@Z4ej$dAZ5dBdCZ6ej$dDZ7dEdFZ8dGdHZ9dIdJZ:ej$dKej%Z;dLdMZ<dNdOZ=dPdQZ>dRdSZ?ej$dTej%Z@dUdVZAdWdXZBdYdZZCd[d\ZDd]ZEej$d^ZFd_d`ZGdadbZHdcddZIdedfZJGdgddZKGdhddZLGdiddeLZMdjdkZNdldmZOGdndodoZPGdpddZQGdqddeRZSGdrddeQZTdsdtZUGduddeTZVGdvddeTZWd S)wCookie CookieJar CookiePolicyDefaultCookiePolicy FileCookieJar LWPCookieJar LoadErrorMozillaCookieJarN)timegmFcGs8ts dSts+ddl}|jdatj|S)Nr zhttp.cookiejar)debugloggerlogging getLogger)argsr r(/opt/python35/lib/python3.5/cookiejar.py_debug.s  rzQa filename was not supplied (nor was the CookieJar instance initialised with one)cCsgddl}ddl}ddl}|j}|jd||j}|jd|dddS)Nr zhttp.cookiejar bug! %s stacklevel)iowarnings tracebackStringIO print_excgetvaluewarn)rrrfmsgrrr_warn_unhandled_exception<s $  ricCs|dd\}}}}}}|tkrd|koEdknrd|koadknrd|ko}dknrd|kodknrd|kodknrt|SdSdS) N r ;=) EPOCH_YEARr )ttyearmonthZmdayhourminsecrrr_timegmKs "DT r-ZMonZTueZWedZThuZFriZSatZSunZJanZFebZMarZAprZMayZJunZJulZAugZSepZOctZNovZDeccCs\|dkrtjj}ntjj|}d|j|j|j|j|j|jfS)Nz%04d-%02d-%02d %02d:%02d:%02dZ) datetimeutcnowutcfromtimestampr(r)dayr*minutesecond)tdtrrr time2isozYs r6cCsq|dkrtjj}ntjj|}dt|j|jt|jd|j|j |j |j fS)Nz#%s, %02d-%s-%04d %02d:%02d:%02d GMTr ) r.r/r0DAYSZweekdayr1MONTHSr)r(r*r2r3)r4r5rrr time2netscapels !r9ZGMTUTCZUTZz^([-+])?(\d\d?):?(\d\d)?$cCsd}|tkrd}nvtj|}|rdt|jd}|jdru|dt|jd}|jddkr| }|S)Nr ir<r -) UTC_ZONES TIMEZONE_REsearchintgroup)tzoffsetmrrroffset_from_tz_strings  rGc Cst|}|tjkrdSytj|jd}Wndtk ryt|}Wntk rtdSYnXd|kodknr|}ndSYnX|dkrd}|dkrd}|dkrd}t|}t|}t|}t|}|dkrtjtjd}|d} |} ||| }| | } t | dkr| dkr|d}n |d}t |||||||f} | dk r|dkrd}|j }t |} | dkrdS| | } | S)Nr r!r id2r:) rBr.ZMAXYEAR MONTHS_LOWERindexlower ValueErrortime localtimeabsr-upperrG) r1monyrhrr+r,rDZimonZcur_yrrFtmpr4rErrr _str2timesV                  !      rVzV^[SMTWF][a-z][a-z], (\d\d) ([JFMASOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$z+^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*a^ (\d\d?) # day (?:\s+|[-\/]) (\w+) # month (?:\s+|[-\/]) (\d+) # year (?: (?:\s+|:) # separator before clock (\d\d?):(\d\d) # hour:min (?::(\d\d))? # optional seconds )? # optional clock \s* ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone \s* (?:\(\w+\))? # ASCII representation of timezone in parens. \s*$c Cs4tj|}|r|j}tj|djd}t|d|t|dt|dt|dt|df}t|S|j }t j d|d}dgd\}}}}}} } t j|}|dk r|j\}}}}}} } ndSt |||||| | S) Nr rr r<)STRICT_DATE_RErAgroupsrJrKrLrBfloatr-lstrip WEEKDAY_REsubLOOSE_HTTP_DATE_RErV) textrFgrRr'r1rSrTr+r,rDrrr http2times -  " $rda^ (\d{4}) # year [-\/]? (\d\d?) # numerical month [-\/]? (\d\d?) # day (?: (?:\s+|[-:Tt]) # separator before clock (\d\d?):?(\d\d) # hour:min (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) )? # optional clock \s* ([-+]?\d\d?:?(:?\d\d)? |Z|z)? # timezone (Z is "zero meridian", i.e. GMT) \s*$c Cs|j}dgd\}}}}}}}tj|}|dk rp|j\}}}}}}}} ndSt|||||||S)NrZ)r^ ISO_DATE_RErAr\rV) rbr1rRrSrTr+r,rDrF_rrriso2time's " 'rgcCs7|jd\}}|jd||j|dS)Nr )spanstring)matchstartendrrr unmatchedHsrmz^\s*([^=\s;,]+)z&^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"z^\s*=\s*([^\s;,]*)z\\(.)c Csg}xr|D]j}|}g}xB|rctj|}|rt|}|jd}tj|}|rt|}|jd}tjd|}nEtj|}|rt|}|jd}|j}nd}|j ||fq"|j j dr?|j dd}|r6|j |g}q"t j dd|\}} |}q"W|r |j |q W|S)Nr z\1,z^[=\s;]*rY)HEADER_TOKEN_RErArmrCHEADER_QUOTED_VALUE_REHEADER_ESCAPE_REr`HEADER_VALUE_RErstripappendr^ startswithresubn) Z header_valuesresultrbZ orig_textpairsrFnamevalueZnon_junkZ nr_junk_charsrrrsplit_header_wordsQs>.        r|z([\"\\])cCsg}x|D]}g}xk|D]c\}}|dk rvtjd|sftjd|}d|}d||f}|j|q W|r |jdj|q Wdj|S)Nz^\w+$z\\\1z"%s"z%s=%sz; z, )rvrAHEADER_JOIN_ESCAPE_REr`rtjoin)Zlistsheadersryattrkvrrrjoin_header_wordss    rcCsB|jdr|dd}|jdr>|dd}|S)N"r )ruendswith)rbrrr strip_quotess rc Csnd}g}x[|D]S}g}d}xt|jd D]\}}|j}|jd \}} } |j}|s|d kr;Pnq;| r| jnd} |d kr)|j} | |kr| }|dkr| dk rt| } d }n*|dkr)| dk r)tt| } |j|| fq;W|r|sY|jd|j|qW|S)Nexpiresdomainpathsecureversionportmax-ageF;=r T0)rrrrrrr)rr) enumeratesplitstrip partitionrLrrdrt) Z ns_headersZ known_attrsrxZ ns_headerry version_setiiZparamkeysepvallcrrrparse_ns_headerss@ "             rz\.\d+$cCsKtj|rdS|dkr#dS|ddksC|ddkrGdSdS)NFrYr .r Tr)IPV4_RErA)rbrrris_HDN s  rcCs|j}|j}||kr(dSt|s8dS|j|}|dks_|dkrcdS|jdsvdSt|ddsdSdS)NTFr r rr)rLrrfindru)ABirrr domain_matchs    rcCstj|rdSdS)NFT)rrA)rbrrrliberal_is_HDNBsrcCs|j}|j}t|o-t|sD||kr@dSdS|jd}|rl|j|rldS| r||krdSdS)NTFr)rLrrur)rr initial_dotrrruser_domain_matchLs   rz:\d+$cCs_|j}tjj|d}|dkr@|jdd}tjd|d}|jS)Nr rYZHost) get_full_urlurllibparseurlparseZ get_header cut_port_rer`rL)requesturlhostrrr request_hostas   rcCsIt|}}|jddkr?tj| r?|d}||fS)Nrr z.localr)rfindrrA)rerhnreq_hostrrreff_request_hostqs% rcCsJ|j}tjj|}t|j}|jdsFd|}|S)N/)rrrZurlsplit escape_pathrru)rrpartsrrrr request_path|s   rc Csy|j}|jd}|dkro||dd}yt|Wqutk rktd|dSYquXnt}|S)N:r r znonnumeric port: '%s')rrrBrMrDEFAULT_HTTP_PORT)rrrrrrr request_ports     rz%/;:@&=+$,!~*'()z%([0-9a-fA-F][0-9a-fA-F])cCsd|jdjS)Nz%%%sr )rCrQ)rjrrruppercase_escaped_charsrcCs+tjj|t}tjt|}|S)N)rrquoteHTTP_PATH_SAFEESCAPED_CHAR_REr`r)rrrrrs rcCsn|jd}|dkrj||dd}|jd}t|rj|dksb|dkrjd|S|S)Nrr r local)rr)hrbrrrreachs $rcCs0t|}t|t|js(dSdSdS)NTF)rrrZorigin_req_host)rrrrris_third_partys rc@smeZdZdddZddZdddZd d Zdd d Zd dZddZ dS)rFcCs|dk rt|}| dk r6tt| } |dkrZ|dkrZtd||_||_||_||_||_|j|_ ||_ ||_ | |_ | |_ | |_| |_| |_||_||_||_tj||_dS)NTz-if port is None, port_specified must be false)rBr]rMrrzr{rport_specifiedrLrdomain_specifieddomain_initial_dotrpath_specifiedrrdiscardcomment comment_urlrfc2109copy_rest)selfrrzr{rrrrrrrrrrrrrestrrrr__init__s.                  zCookie.__init__cCs ||jkS)N)r)rrzrrrhas_nonstandard_attrszCookie.has_nonstandard_attrNcCs|jj||S)N)rget)rrzdefaultrrrget_nonstandard_attrszCookie.get_nonstandard_attrcCs||j||dkrtj}|jdk r:|j|kr:dSdS)NTF)rNr)rnowrrr is_expireds  zCookie.is_expiredcCsx|jdkrd}n d|j}|j||j}|jdk rad|j|jf}n |j}d||fS)NrYrz%s=%sz)rrrr{rz)rplimitZ namevaluerrr__str__%s   zCookie.__str__cCsg}x:dD]2}t||}|jd|t|fq W|jdt|j|jdt|jd|jjdj|fS)Nrrzr{rrrrrrrrrrrrz%s=%szrest=%sz rfc2109=%sz%s(%s)z, )rrzr{rrrrrrrrrrrr)getattrrtreprrr __class____name__r~)rrrzrrrr__repr__/s !zCookie.__repr__) r __module__ __qualname__rrrrrrrrrrrrs    c@s@eZdZddZddZddZddZd S) rcCs tdS)N)NotImplementedError)rcookierrrrset_okGszCookiePolicy.set_okcCs tdS)N)r)rrrrrr return_okPszCookiePolicy.return_okcCsdS)NTr)rrrrrrdomain_return_okTszCookiePolicy.domain_return_okcCsdS)NTr)rrrrrrpath_return_okYszCookiePolicy.path_return_okN)rrrrrrrrrrrr>s  c@sjeZdZdZdZdZdZeeBZdddddddddedddd Zd d Z d d Z ddZ ddZ ddZ ddZddZddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)6rr rrWr NTFc Cs||_||_||_||_||_||_| |_| |_| |_| |_ |dk rxt ||_ n f|_ |dk rt |}||_ dS)N) netscaperfc2965rfc2109_as_netscape hide_cookie2 strict_domainstrict_rfc2965_unverifiablestrict_ns_unverifiablestrict_ns_domainstrict_ns_set_initial_dollarstrict_ns_set_pathtuple_blocked_domains_allowed_domains) rblocked_domainsallowed_domainsrrrrrrrrrrrrrris              zDefaultCookiePolicy.__init__cCs|jS)N)r)rrrrrsz#DefaultCookiePolicy.blocked_domainscCst||_dS)N)rr)rrrrrset_blocked_domainssz'DefaultCookiePolicy.set_blocked_domainscCs+x$|jD]}t||r dSq WdS)NTF)rr)rrZblocked_domainrrr is_blockedszDefaultCookiePolicy.is_blockedcCs|jS)N)r)rrrrrsz#DefaultCookiePolicy.allowed_domainscCs%|dk rt|}||_dS)N)rr)rrrrrset_allowed_domainss  z'DefaultCookiePolicy.set_allowed_domainscCs>|jdkrdSx$|jD]}t||rdSqWdS)NFT)rr)rrZallowed_domainrrris_not_alloweds z"DefaultCookiePolicy.is_not_allowedcCsWtd|j|jx:d D]2}d|}t||}|||sd SqWd S) Nz - checking cookie %s=%sr verifiabilityrzrrrZset_ok_FT)rrrzrrr)rrzr{r)rrrnfn_namefnrrrrs  zDefaultCookiePolicy.set_okcCs{|jdkr)td|j|jdS|jdkrP|j rPtddS|jdkrw|j rwtddSdS)Nz0 Set-Cookie2 without version attribute (%s=%s)Fr z$ RFC 2965 cookies are switched offz$ Netscape cookies are switched offT)rrrzr{rr)rrrrrrset_ok_versions  z"DefaultCookiePolicy.set_ok_versioncCse|jrat|ra|jdkr;|jr;tddS|jdkra|jratddSdS)Nr z> third-party RFC 2965 cookie during unverifiable transactionFz> third-party Netscape cookie during unverifiable transactionT) unverifiablerrrrr)rrrrrrset_ok_verifiabilitys  z(DefaultCookiePolicy.set_ok_verifiabilitycCsB|jdkr>|jr>|jjdr>td|jdSdS)Nr $z' illegal name (starts with '$'): '%s'FT)rrrzrur)rrrrrr set_ok_names zDefaultCookiePolicy.set_ok_namecCsj|jrft|}|jdks<|jdkrf|jrf|j|j rftd|j|dSdS)Nr z7 path attribute %s is not a prefix of request path %sFT)rrrrrurr)rrrreq_pathrrr set_ok_paths   zDefaultCookiePolicy.set_ok_pathc Cs|j|jr&td|jdS|j|jrLtd|jdS|jrt|\}}|j}|jr|jddkr|jd}|jdd|}|dkr||dd}||d|} | j d$krt |dkrtd|dS|j dr=|dd} n|} | j ddk} | r||dkr|td|dS|j dkr|j| r|j d rd|j| rtd ||dS|j dks|j|j@rt||std!||dS|j dks4|j|j@r|dt | } | j ddkrtj| rtd"| |dSd#S)%Nz" domain %s is in user block-listFz& domain %s is not in user allow-listrrr r coaccomeduorgnetgovmilrBaerobizcatcoopinfojobsmobimuseumrzprotraveleuz& country-code second level domain %sz.localz/ non-local domain %s contains no embedded dotzO effective request-host %s (even with added initial dot) does not end with %sz5 effective request-host %s does not domain-match %sz. host prefix %s for domain %s contains a dotT)rrr r r r r rrBrrrrrrrrrzrrr)rrrrrrrcountrrLlenrurrrrDomainRFC2965MatchrDomainStrictNoDotsrrA) rrrrrrrjZtldZsldZundotted_domainZ embedded_dotsZ host_prefixrrr set_ok_domainsf        z!DefaultCookiePolicy.set_ok_domainc Cs|jrt|}|dkr*d}n t|}xr|jjdD]G}yt|Wn#tk rtd|dSYnX||krIPqIWtd||jdSdS)N80rnz bad port %s (not numeric)Fz$ request port (%s) not found in %sT)rrstrrrrBrMr)rrrreq_portrrrr set_ok_port%s"          zDefaultCookiePolicy.set_ok_portcCsWtd|j|jx:d D]2}d|}t||}|||sd SqWd S) Nz - checking cookie %s=%srrrrrrZ return_ok_FT)rrrrrr)rrzr{r)rrrrrrrrrr:s   zDefaultCookiePolicy.return_okcCsR|jdkr'|j r'tddS|jdkrN|j rNtddSdS)Nr z$ RFC 2965 cookies are switched offFz$ Netscape cookies are switched offT)rrrr)rrrrrrreturn_ok_versionLs  z%DefaultCookiePolicy.return_ok_versioncCse|jrat|ra|jdkr;|jr;tddS|jdkra|jratddSdS)Nr z> third-party RFC 2965 cookie during unverifiable transactionFz> third-party Netscape cookie during unverifiable transactionT)rrrrrr)rrrrrrreturn_ok_verifiabilityUs  z+DefaultCookiePolicy.return_ok_verifiabilitycCs*|jr&|jdkr&tddSdS)NZhttpsz( secure cookie with non-secure requestFT)rtyper)rrrrrrreturn_ok_secureas z$DefaultCookiePolicy.return_ok_securecCs$|j|jr tddSdS)Nz cookie expiredFT)r_nowr)rrrrrrreturn_ok_expiresgs z%DefaultCookiePolicy.return_ok_expirescCsl|jrht|}|dkr'd}x>|jjdD]}||kr:Pq:Wtd||jdSdS)Nr rnz0 request port %s does not match cookie port %sFT)rrrr)rrrr"rrrrreturn_ok_portms     z"DefaultCookiePolicy.return_ok_portcCst|\}}|j}|jdkr^|j|j@r^|j r^||kr^tddS|jdkrt|| rtd||dS|jdkrd|j| rtd||dSdS)Nr zQ cookie with unspecified domain does not string-compare equal to request domainFzQ effective request-host name %s does not domain-match RFC 2965 cookie domain %srz; request-host %s does not match Netscape cookie domain %sT) rrrrDomainStrictNonDomainrrrr)rrrrrrrrrreturn_ok_domain{s    # z$DefaultCookiePolicy.return_ok_domaincCst|\}}|jds+d|}|jdsDd|}|j|p_|j|sfdS|j|rtd|dS|j|rtd|dSdS)NrFz" domain %s is in user block-listz& domain %s is not in user allow-listT)rrurrrr)rrrrrrrrrs    z$DefaultCookiePolicy.domain_return_okcCs@td|t|}|j|s<td||dSdS)Nz- checking cookie path=%sz %s does not path-match %sFT)rrru)rrrrrrrrs   z"DefaultCookiePolicy.path_return_ok)rrrrr+rZ DomainLiberalZ DomainStrictrrrrrrrrrrrrrr#rr$r%r'r)r*r,rrrrrrr_sJ           ;       cCs"t|j}t|j|S)N)sortedkeysmapr)Zadictr.rrrvals_sorted_by_keysr0c csgt|}xT|D]L}d}y |jWntk r>YnXd}t|EdH|s|VqWdS)NFT)r0itemsAttributeError deepvalues)mappingvaluesobjrrrr3s    r3c@seZdZdS)AbsentN)rrrrrrrr7s r7c@sxeZdZejdZejdZejdZejdZejdZ ejdej Z ddd Z d d Z d d ZddZddZddZddZddZddZddZddZddZd d!Zd"d#Zdddd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Z dS)2rz\Wz([\"\\])z\.?[^.]*z[^.]*z^\.+z^\#LWP-Cookies-(\d+\.\d+)NcCs:|dkrt}||_tj|_i|_dS)N)r_policy _threadingRLock _cookies_lock_cookies)rpolicyrrrrs    zCookieJar.__init__cCs ||_dS)N)r8)rr=rrr set_policyszCookieJar.set_policycCsg}|jj||sgStd||j|}x|jD]x}|jj||sdqF||}xM|jD]?}|jj||stdq{td|j|q{WqFW|S)Nz!Checking %s for cookies to returnz not returning cookiez it's a match) r8rrr<r.rr5rrt)rrrcookiesZcookies_by_pathrZcookies_by_namerrrr_cookies_for_domains      zCookieJar._cookies_for_domaincCs=g}x0|jjD]}|j|j||qW|S)N)r<r.extendr@)rrr?rrrr_cookies_for_requestszCookieJar._cookies_for_requestc Cs|jdddddd}g}x|D]}|j}|sgd}|dkrg|jd||jdk r|jj|jr|dkr|jjd |j}n |j}|jdkr|j|jn|jd |j|f|dkr/|j r |jd |j |j j d ru|j }|j rd|j d rd|d d}|jd||jdk r/d}|jr|d|j}|j|q/W|S)NrcSs t|jS)N)rr)arrrsz)CookieJar._cookie_attrs..reverseTFr z $Version=%sz\\\1z%s=%sz $Path="%s"rr z $Domain="%s"z$Portz="%s")sortrrtr{ non_word_rerAquote_rer`rzrrrrurrr) rr?rattrsrrr{rrrrr _cookie_attrss>    !      zCookieJar._cookie_attrsc Cstd|jjzttj|j_|_|j|}|j|}|r|j ds|j ddj ||jj r|jj r|j d rx.|D]&}|jdkr|j ddPqWWd|jjX|jdS)Nadd_cookie_headerrz; ZCookie2r z $Version="1")rr;acquirerBrNr8r(rBrJZ has_headerZadd_unredirected_headerr~rrrreleaseclear_expired_cookies)rrr?rIrrrrrK6s$    zCookieJar.add_cookie_headercCsg}d}d}x|D]}|d \}}d }d } i} i} x|d dD]}\} } | j}||ks||kr|} | |kr| dkrd} | | krqX| dkr| dkrtdd} P| j} | dkr|rqX| dkrtdqX| dkryd}yt| } Wn#tk retdd} PYnXd} |j| } | |ks| |kr| dkr| dkrtd| d} P| | | .no_matching_rfc2965)rZget_allr8rrr\r| Exceptionrrr]rrrzfilterrA) rresponserrZ rfc2965_hdrsZns_hdrsrrr?Z ns_cookiesr^rr_rrr make_cookies)sB            zCookieJar.make_cookiesc Csg|jjzEttj|j_|_|jj||rQ|j|Wd|jjXdS)N) r;rLrBrNr8r(r set_cookierM)rrrrrrset_cookie_if_ok_s  zCookieJar.set_cookie_if_okc Cs|j}|jjzc|j|kr5i||j<||j}|j|kr^i||j<||j}|||jz, )rtrrrr~)rrrrrrrs zCookieJar.__repr__cCsGg}x!|D]}|jt|q Wd|jjdj|fS)Nz<%s[%s]>z, )rtr!rrr~)rrlrrrrrs zCookieJar.__str__)!rrrrvcompilerGrHZstrict_domain_reZ domain_reZdots_reASCIImagic_rerr>r@rBrJrKrVr[r\r]rcrerdrhrXrirNrjrkrrrrrrrs6     ; ! a \ 6      c@seZdZdS)rN)rrrrrrrrs c@sdeZdZdddddZdddddZdddddZdddd d ZdS) rNFc Cs[tj|||dk r?y |dWntdYnX||_t||_dS)NrYzfilename must be string-like)rrrMfilenamerW delayload)rrprqr=rrrrs   zFileCookieJar.__init__cCs tdS)N)r)rrpignore_discardignore_expiresrrrsaveszFileCookieJar.savec Csc|dkr3|jdk r'|j}n ttt|}|j||||WdQRXdS)N)rprMMISSING_FILENAME_TEXTopen _really_load)rrprrrsrrrrloads    zFileCookieJar.loadcCs|dkr3|jdk r'|j}n tt|jjzWtj|j}i|_y|j|||Wnt k r||_YnXWd|jj XdS)N) rprMrur;rLrdeepcopyr<rxOSErrorrM)rrprrrsZ old_staterrrreverts        zFileCookieJar.revert)rrrrrtrxr{rrrrrs  cCs|j|jfd|jfd|jfg}|jdk rR|jd|jf|jrh|jd |jr~|jd|jr|jd|j r|jd|j r|jdt t |j f|j r|jd|jr |jd |jf|jr)|jd |jft|jj}x.|D]&}|j|t|j|fqEW|jd t|jft|gS)Nrrr path_spec port_spec domain_dotrrrrrPr)r|N)r}N)r~N)rN)rN)rzr{rrrrtrrrrrr6r]rrrr-rr.r!rr)rrr.rrrrlwp_cookie_strs6          $rc@sCeZdZddddZdddddZdd ZdS) rTcCsztj}g}xQ|D]I}| r2|jr2q| rK|j|rKq|jdt|qWdj|dgS)NzSet-Cookie3: %s rY)rNrrrtrr~)rrrrsrrlrrrr as_lwp_str>s  zLWPCookieJar.as_lwp_strNFc Csv|dkr3|jdk r'|j}n ttt|d-}|jd|j|j||WdQRXdS)Nwz#LWP-Cookies-2.0 )rprMrurvwriter)rrprrrsrrrrrtNs    zLWPCookieJar.savecCs|j}|jj|s4d|}t|tj}d}d} d} y_xX|j} | dkrqP| j|sqX| t|dj} x t| gD]} | d\} }i}i}x| D]}d||s             8  8 !  U   D  '      # b!R  : x