PNG  IHDRX cHRMz&u0`:pQ<bKGD pHYsodtIME MeqIDATxw]Wug^Qd˶ 6`!N:!@xI~)%7%@Bh&`lnjVF29gΨ4E$|>cɚ{gk= %,a KX%,a KX%,a KX%,a KX%,a KX%,a KX%, b` ǟzeאfp]<!SJmɤY޲ڿ,%c ~ع9VH.!Ͳz&QynֺTkRR.BLHi٪:l;@(!MԴ=žI,:o&N'Kù\vRmJ雵֫AWic H@" !: Cé||]k-Ha oݜ:y F())u]aG7*JV@J415p=sZH!=!DRʯvɱh~V\}v/GKY$n]"X"}t@ xS76^[bw4dsce)2dU0 CkMa-U5tvLƀ~mlMwfGE/-]7XAƟ`׮g ewxwC4\[~7@O-Q( a*XGƒ{ ՟}$_y3tĐƤatgvێi|K=uVyrŲlLӪuܿzwk$m87k( `múcE)"@rK( z4$D; 2kW=Xb$V[Ru819קR~qloѱDyįݎ*mxw]y5e4K@ЃI0A D@"BDk_)N\8͜9dz"fK0zɿvM /.:2O{ Nb=M=7>??Zuo32 DLD@D| &+֎C #B8ַ`bOb $D#ͮҪtx]%`ES`Ru[=¾!@Od37LJ0!OIR4m]GZRJu$‡c=%~s@6SKy?CeIh:[vR@Lh | (BhAMy=݃  G"'wzn޺~8ԽSh ~T*A:xR[ܹ?X[uKL_=fDȊ؂p0}7=D$Ekq!/t.*2ʼnDbŞ}DijYaȲ(""6HA;:LzxQ‘(SQQ}*PL*fc\s `/d'QXW, e`#kPGZuŞuO{{wm[&NBTiiI0bukcA9<4@SӊH*؎4U/'2U5.(9JuDfrޱtycU%j(:RUbArLֺN)udA':uGQN"-"Is.*+k@ `Ojs@yU/ H:l;@yyTn}_yw!VkRJ4P)~y#)r,D =ě"Q]ci'%HI4ZL0"MJy 8A{ aN<8D"1#IJi >XjX֔#@>-{vN!8tRݻ^)N_╗FJEk]CT՟ YP:_|H1@ CBk]yKYp|og?*dGvzنzӴzjֺNkC~AbZƷ`.H)=!QͷVTT(| u78y֮}|[8-Vjp%2JPk[}ԉaH8Wpqhwr:vWª<}l77_~{s۴V+RCģ%WRZ\AqHifɤL36: #F:p]Bq/z{0CU6ݳEv_^k7'>sq*+kH%a`0ԣisqにtү04gVgW΂iJiS'3w.w}l6MC2uԯ|>JF5`fV5m`Y**Db1FKNttu]4ccsQNnex/87+}xaUW9y>ͯ骵G{䩓Գ3+vU}~jJ.NFRD7<aJDB1#ҳgSb,+CS?/ VG J?|?,2#M9}B)MiE+G`-wo߫V`fio(}S^4e~V4bHOYb"b#E)dda:'?}׮4繏`{7Z"uny-?ǹ;0MKx{:_pÚmFמ:F " .LFQLG)Q8qN q¯¯3wOvxDb\. BKD9_NN &L:4D{mm o^tֽ:q!ƥ}K+<"m78N< ywsard5+вz~mnG)=}lYݧNj'QJS{S :UYS-952?&O-:W}(!6Mk4+>A>j+i|<<|;ر^߉=HE|V#F)Emm#}/"y GII웻Jі94+v뾧xu~5C95~ūH>c@덉pʃ1/4-A2G%7>m;–Y,cyyaln" ?ƻ!ʪ<{~h~i y.zZB̃/,雋SiC/JFMmBH&&FAbϓO^tubbb_hZ{_QZ-sύodFgO(6]TJA˯#`۶ɟ( %$&+V'~hiYy>922 Wp74Zkq+Ovn錄c>8~GqܲcWꂎz@"1A.}T)uiW4="jJ2W7mU/N0gcqܗOO}?9/wìXžΏ0 >֩(V^Rh32!Hj5`;O28؇2#ݕf3 ?sJd8NJ@7O0 b־?lldщ̡&|9C.8RTWwxWy46ah嘦mh٤&l zCy!PY?: CJyв]dm4ǜҐR޻RլhX{FƯanшQI@x' ao(kUUuxW_Ñ줮[w8 FRJ(8˼)_mQ _!RJhm=!cVmm ?sFOnll6Qk}alY}; "baӌ~M0w,Ggw2W:G/k2%R,_=u`WU R.9T"v,<\Ik޽/2110Ӿxc0gyC&Ny޽JҢrV6N ``یeA16"J³+Rj*;BϜkZPJaÍ<Jyw:NP8/D$ 011z֊Ⱳ3ι֘k1V_"h!JPIΣ'ɜ* aEAd:ݺ>y<}Lp&PlRfTb1]o .2EW\ͮ]38؋rTJsǏP@芎sF\> P^+dYJLbJ C-xϐn> ι$nj,;Ǖa FU *择|h ~izť3ᤓ`K'-f tL7JK+vf2)V'-sFuB4i+m+@My=O҈0"|Yxoj,3]:cо3 $#uŘ%Y"y죯LebqtҢVzq¼X)~>4L׶m~[1_k?kxֺQ`\ |ٛY4Ѯr!)N9{56(iNq}O()Em]=F&u?$HypWUeB\k]JɩSع9 Zqg4ZĊo oMcjZBU]B\TUd34ݝ~:7ڶSUsB0Z3srx 7`:5xcx !qZA!;%͚7&P H<WL!džOb5kF)xor^aujƍ7 Ǡ8/p^(L>ὴ-B,{ۇWzֺ^k]3\EE@7>lYBȝR.oHnXO/}sB|.i@ɥDB4tcm,@ӣgdtJ!lH$_vN166L__'Z)y&kH;:,Y7=J 9cG) V\hjiE;gya~%ks_nC~Er er)muuMg2;֫R)Md) ,¶ 2-wr#F7<-BBn~_(o=KO㭇[Xv eN_SMgSҐ BS헃D%g_N:/pe -wkG*9yYSZS.9cREL !k}<4_Xs#FmҶ:7R$i,fi!~' # !6/S6y@kZkZcX)%5V4P]VGYq%H1!;e1MV<!ϐHO021Dp= HMs~~a)ަu7G^];git!Frl]H/L$=AeUvZE4P\.,xi {-~p?2b#amXAHq)MWǾI_r`S Hz&|{ +ʖ_= (YS(_g0a03M`I&'9vl?MM+m~}*xT۲(fY*V4x@29s{DaY"toGNTO+xCAO~4Ϳ;p`Ѫ:>Ҵ7K 3}+0 387x\)a"/E>qpWB=1 ¨"MP(\xp߫́A3+J] n[ʼnӼaTbZUWb={~2ooKױӰp(CS\S筐R*JغV&&"FA}J>G֐p1ٸbk7 ŘH$JoN <8s^yk_[;gy-;߉DV{c B yce% aJhDȶ 2IdйIB/^n0tNtџdcKj4϶v~- CBcgqx9= PJ) dMsjpYB] GD4RDWX +h{y`,3ꊕ$`zj*N^TP4L:Iz9~6s) Ga:?y*J~?OrMwP\](21sZUD ?ܟQ5Q%ggW6QdO+\@ ̪X'GxN @'4=ˋ+*VwN ne_|(/BDfj5(Dq<*tNt1х!MV.C0 32b#?n0pzj#!38}޴o1KovCJ`8ŗ_"]] rDUy޲@ Ȗ-;xџ'^Y`zEd?0„ DAL18IS]VGq\4o !swV7ˣι%4FѮ~}6)OgS[~Q vcYbL!wG3 7띸*E Pql8=jT\꘿I(z<[6OrR8ºC~ډ]=rNl[g|v TMTղb-o}OrP^Q]<98S¤!k)G(Vkwyqyr޽Nv`N/e p/~NAOk \I:G6]4+K;j$R:Mi #*[AȚT,ʰ,;N{HZTGMoּy) ]%dHء9Պ䠬|<45,\=[bƟ8QXeB3- &dҩ^{>/86bXmZ]]yޚN[(WAHL$YAgDKp=5GHjU&99v簪C0vygln*P)9^͞}lMuiH!̍#DoRBn9l@ xA/_v=ȺT{7Yt2N"4!YN`ae >Q<XMydEB`VU}u]嫇.%e^ánE87Mu\t`cP=AD/G)sI"@MP;)]%fH9'FNsj1pVhY&9=0pfuJ&gޤx+k:!r˭wkl03׼Ku C &ѓYt{.O.zҏ z}/tf_wEp2gvX)GN#I ݭ߽v/ .& и(ZF{e"=V!{zW`, ]+LGz"(UJp|j( #V4, 8B 0 9OkRrlɱl94)'VH9=9W|>PS['G(*I1==C<5"Pg+x'K5EMd؞Af8lG ?D FtoB[je?{k3zQ vZ;%Ɠ,]E>KZ+T/ EJxOZ1i #T<@ I}q9/t'zi(EMqw`mYkU6;[t4DPeckeM;H}_g pMww}k6#H㶏+b8雡Sxp)&C $@'b,fPߑt$RbJ'vznuS ~8='72_`{q纶|Q)Xk}cPz9p7O:'|G~8wx(a 0QCko|0ASD>Ip=4Q, d|F8RcU"/KM opKle M3#i0c%<7׿p&pZq[TR"BpqauIp$ 8~Ĩ!8Սx\ւdT>>Z40ks7 z2IQ}ItԀ<-%S⍤};zIb$I 5K}Q͙D8UguWE$Jh )cu4N tZl+[]M4k8֦Zeq֮M7uIqG 1==tLtR,ƜSrHYt&QP윯Lg' I,3@P'}'R˪e/%-Auv·ñ\> vDJzlӾNv5:|K/Jb6KI9)Zh*ZAi`?S {aiVDԲuy5W7pWeQJk֤#5&V<̺@/GH?^τZL|IJNvI:'P=Ϛt"¨=cud S Q.Ki0 !cJy;LJR;G{BJy޺[^8fK6)=yʊ+(k|&xQ2`L?Ȓ2@Mf 0C`6-%pKpm')c$׻K5[J*U[/#hH!6acB JA _|uMvDyk y)6OPYjœ50VT K}cǻP[ $:]4MEA.y)|B)cf-A?(e|lɉ#P9V)[9t.EiQPDѠ3ϴ;E:+Օ t ȥ~|_N2,ZJLt4! %ա]u {+=p.GhNcŞQI?Nd'yeh n7zi1DB)1S | S#ًZs2|Ɛy$F SxeX{7Vl.Src3E℃Q>b6G ўYCmtկ~=K0f(=LrAS GN'ɹ9<\!a`)֕y[uՍ[09` 9 +57ts6}b4{oqd+J5fa/,97J#6yν99mRWxJyѡyu_TJc`~W>l^q#Ts#2"nD1%fS)FU w{ܯ R{ ˎ󅃏џDsZSQS;LV;7 Od1&1n$ N /.q3~eNɪ]E#oM~}v֯FڦwyZ=<<>Xo稯lfMFV6p02|*=tV!c~]fa5Y^Q_WN|Vs 0ҘދU97OI'N2'8N֭fgg-}V%y]U4 峧p*91#9U kCac_AFңĪy뚇Y_AiuYyTTYЗ-(!JFLt›17uTozc. S;7A&&<ԋ5y;Ro+:' *eYJkWR[@F %SHWP 72k4 qLd'J "zB6{AC0ƁA6U.'F3:Ȅ(9ΜL;D]m8ڥ9}dU "v!;*13Rg^fJyShyy5auA?ɩGHRjo^]׽S)Fm\toy 4WQS@mE#%5ʈfFYDX ~D5Ϡ9tE9So_aU4?Ѽm%&c{n>.KW1Tlb}:j uGi(JgcYj0qn+>) %\!4{LaJso d||u//P_y7iRJ߬nHOy) l+@$($VFIQ9%EeKʈU. ia&FY̒mZ=)+qqoQn >L!qCiDB;Y<%} OgBxB!ØuG)WG9y(Ą{_yesuZmZZey'Wg#C~1Cev@0D $a@˲(.._GimA:uyw֬%;@!JkQVM_Ow:P.s\)ot- ˹"`B,e CRtaEUP<0'}r3[>?G8xU~Nqu;Wm8\RIkբ^5@k+5(By'L&'gBJ3ݶ!/㮻w҅ yqPWUg<e"Qy*167΃sJ\oz]T*UQ<\FԎ`HaNmڜ6DysCask8wP8y9``GJ9lF\G g's Nn͵MLN֪u$| /|7=]O)6s !ĴAKh]q_ap $HH'\1jB^s\|- W1:=6lJBqjY^LsPk""`]w)󭃈,(HC ?䔨Y$Sʣ{4Z+0NvQkhol6C.婧/u]FwiVjZka&%6\F*Ny#8O,22+|Db~d ~Çwc N:FuuCe&oZ(l;@ee-+Wn`44AMK➝2BRՈt7g*1gph9N) *"TF*R(#'88pm=}X]u[i7bEc|\~EMn}P瘊J)K.0i1M6=7'_\kaZ(Th{K*GJyytw"IO-PWJk)..axӝ47"89Cc7ĐBiZx 7m!fy|ϿF9CbȩV 9V-՛^pV̌ɄS#Bv4-@]Vxt-Z, &ֺ*diؠ2^VXbs֔Ìl.jQ]Y[47gj=幽ex)A0ip׳ W2[ᎇhuE^~q흙L} #-b۸oFJ_QP3r6jr+"nfzRJTUqoaۍ /$d8Mx'ݓ= OՃ| )$2mcM*cЙj}f };n YG w0Ia!1Q.oYfr]DyISaP}"dIӗթO67jqR ҊƐƈaɤGG|h;t]䗖oSv|iZqX)oalv;۩meEJ\!8=$4QU4Xo&VEĊ YS^E#d,yX_> ۘ-e\ "Wa6uLĜZi`aD9.% w~mB(02G[6y.773a7 /=o7D)$Z 66 $bY^\CuP. (x'"J60׿Y:Oi;F{w佩b+\Yi`TDWa~|VH)8q/=9!g߆2Y)?ND)%?Ǐ`k/sn:;O299yB=a[Ng 3˲N}vLNy;*?x?~L&=xyӴ~}q{qE*IQ^^ͧvü{Huu=R|>JyUlZV, B~/YF!Y\u_ݼF{_C)LD]m {H 0ihhadd nUkf3oٺCvE\)QJi+֥@tDJkB$1!Đr0XQ|q?d2) Ӣ_}qv-< FŊ߫%roppVBwü~JidY4:}L6M7f٬F "?71<2#?Jyy4뷢<_a7_=Q E=S1И/9{+93֮E{ǂw{))?maÆm(uLE#lïZ  ~d];+]h j?!|$F}*"4(v'8s<ŏUkm7^7no1w2ؗ}TrͿEk>p'8OB7d7R(A 9.*Mi^ͳ; eeUwS+C)uO@ =Sy]` }l8^ZzRXj[^iUɺ$tj))<sbDJfg=Pk_{xaKo1:-uyG0M ԃ\0Lvuy'ȱc2Ji AdyVgVh!{]/&}}ċJ#%d !+87<;qN޼Nفl|1N:8ya  8}k¾+-$4FiZYÔXk*I&'@iI99)HSh4+2G:tGhS^繿 Kتm0 вDk}֚+QT4;sC}rՅE,8CX-e~>G&'9xpW,%Fh,Ry56Y–hW-(v_,? ; qrBk4-V7HQ;ˇ^Gv1JVV%,ik;D_W!))+BoS4QsTM;gt+ndS-~:11Sgv!0qRVh!"Ȋ(̦Yl.]PQWgٳE'`%W1{ndΗBk|Ž7ʒR~,lnoa&:ü$ 3<a[CBݮwt"o\ePJ=Hz"_c^Z.#ˆ*x z̝grY]tdkP*:97YľXyBkD4N.C_[;F9`8& !AMO c `@BA& Ost\-\NX+Xp < !bj3C&QL+*&kAQ=04}cC!9~820G'PC9xa!w&bo_1 Sw"ܱ V )Yl3+ס2KoXOx]"`^WOy :3GO0g;%Yv㐫(R/r (s } u B &FeYZh0y> =2<Ϟc/ -u= c&׭,.0"g"7 6T!vl#sc>{u/Oh Bᾈ)۴74]x7 gMӒ"d]U)}" v4co[ ɡs 5Gg=XR14?5A}D "b{0$L .\4y{_fe:kVS\\O]c^W52LSBDM! C3Dhr̦RtArx4&agaN3Cf<Ԉp4~ B'"1@.b_/xQ} _߃҉/gٓ2Qkqp0շpZ2fԫYz< 4L.Cyυι1t@鎫Fe sYfsF}^ V}N<_`p)alٶ "(XEAVZ<)2},:Ir*#m_YӼ R%a||EƼIJ,,+f"96r/}0jE/)s)cjW#w'Sʯ5<66lj$a~3Kʛy 2:cZ:Yh))+a߭K::N,Q F'qB]={.]h85C9cr=}*rk?vwV렵ٸW Rs%}rNAkDv|uFLBkWY YkX מ|)1!$#3%y?pF<@<Rr0}: }\J [5FRxY<9"SQdE(Q*Qʻ)q1E0B_O24[U'],lOb ]~WjHޏTQ5Syu wq)xnw8~)c 쫬gٲߠ H% k5dƝk> kEj,0% b"vi2Wس_CuK)K{n|>t{P1򨾜j>'kEkƗBg*H%'_aY6Bn!TL&ɌOb{c`'d^{t\i^[uɐ[}q0lM˕G:‚4kb祔c^:?bpg… +37stH:0}en6x˟%/<]BL&* 5&fK9Mq)/iyqtA%kUe[ڛKN]Ě^,"`/ s[EQQm?|XJ߅92m]G.E΃ח U*Cn.j_)Tѧj̿30ڇ!A0=͜ar I3$C^-9#|pk!)?7.x9 @OO;WƝZBFU keZ75F6Tc6"ZȚs2y/1 ʵ:u4xa`C>6Rb/Yм)^=+~uRd`/|_8xbB0?Ft||Z\##|K 0>>zxv8۴吅q 8ĥ)"6>~\8:qM}#͚'ĉ#p\׶ l#bA?)|g g9|8jP(cr,BwV (WliVxxᡁ@0Okn;ɥh$_ckCgriv}>=wGzβ KkBɛ[˪ !J)h&k2%07δt}!d<9;I&0wV/ v 0<H}L&8ob%Hi|޶o&h1L|u֦y~󛱢8fٲUsւ)0oiFx2}X[zVYr_;N(w]_4B@OanC?gĦx>мgx>ΛToZoOMp>40>V Oy V9iq!4 LN,ˢu{jsz]|"R޻&'ƚ{53ўFu(<٪9:΋]B;)B>1::8;~)Yt|0(pw2N%&X,URBK)3\zz&}ax4;ǟ(tLNg{N|Ǽ\G#C9g$^\}p?556]/RP.90 k,U8/u776s ʪ_01چ|\N 0VV*3H鴃J7iI!wG_^ypl}r*jɤSR 5QN@ iZ#1ٰy;_\3\BQQ x:WJv츟ٯ$"@6 S#qe딇(/P( Dy~TOϻ<4:-+F`0||;Xl-"uw$Цi󼕝mKʩorz"mϺ$F:~E'ҐvD\y?Rr8_He@ e~O,T.(ފR*cY^m|cVR[8 JҡSm!ΆԨb)RHG{?MpqrmN>߶Y)\p,d#xۆWY*,l6]v0h15M˙MS8+EdI='LBJIH7_9{Caз*Lq,dt >+~ّeʏ?xԕ4bBAŚjﵫ!'\Ը$WNvKO}ӽmSşذqsOy?\[,d@'73'j%kOe`1.g2"e =YIzS2|zŐƄa\U,dP;jhhhaxǶ?КZ՚.q SE+XrbOu%\GتX(H,N^~]JyEZQKceTQ]VGYqnah;y$cQahT&QPZ*iZ8UQQM.qo/T\7X"u?Mttl2Xq(IoW{R^ ux*SYJ! 4S.Jy~ BROS[V|žKNɛP(L6V^|cR7i7nZW1Fd@ Ara{詑|(T*dN]Ko?s=@ |_EvF]׍kR)eBJc" MUUbY6`~V޴dJKß&~'d3i WWWWWW
Current Directory: /usr/lib64/python2.7/site-packages/mercurial
Viewing File: /usr/lib64/python2.7/site-packages/mercurial/keepalive.pyc
� Hq�Qc@s�dZddlZddlZddlZddlZddlZdaddlZej dkrlda nda de fd��YZ d e fd ��YZ d e ejfd ��YZd ejfd��YZd�Zd�Zdejfd��YZd�Zd�ad�Zd�Zdd�Zd�Zdd�Zedkr�ddlZddlZy$eejd�ZejdZWn'e e!fk r�dejdGHq�Xeee�ndS(s An HTTP handler for urllib2 that supports HTTP 1.1 and keepalive. >>> import urllib2 >>> from keepalive import HTTPHandler >>> keepalive_handler = HTTPHandler() >>> opener = urllib2.build_opener(keepalive_handler) >>> urllib2.install_opener(opener) >>> >>> fo = urllib2.urlopen('http://www.python.org') If a connection to a given host is requested, and all of the existing connections are still in use, another connection will be opened. If the handler tries to use an existing connection but it fails in some way, it will be closed and removed from the pool. To remove the handler, simply re-run build_opener with no arguments, and install that opener. You can explicitly close connections by using the close_connection() method of the returned file-like object (described below) or you can use the handler methods: close_connection(host) close_all() open_connections() NOTE: using the close_connection and close_all methods of the handler should be done with care when using multiple threads. * there is nothing that prevents another thread from creating new connections immediately after connections are closed * no checks are done to prevent in-use connections from being closed >>> keepalive_handler.close_all() EXTRA ATTRIBUTES AND METHODS Upon a status of 200, the object returned has a few additional attributes and methods, which should not be used if you want to remain consistent with the normal urllib2-returned objects: close_connection() - close the connection to the host readlines() - you know, readlines() status - the return status (i.e. 404) reason - english translation of status (i.e. 'File not found') If you want the best of both worlds, use this inside an AttributeError-catching try: >>> try: status = fo.status >>> except AttributeError: status = None Unfortunately, these are ONLY there if status == 200, so it's not easy to distinguish between non-200 responses. The reason is that urllib2 tries to do clever things with error codes 301, 302, 401, and 407, and it wraps the object upon return. For python versions earlier than 2.4, you can avoid this fancy error handling by setting the module-level global HANDLE_ERRORS to zero. You see, prior to 2.4, it's the HTTP Handler's job to determine what to handle specially, and what to just pass up. HANDLE_ERRORS == 0 means "pass everything up". In python 2.4, however, this job no longer belongs to the HTTP Handler and is now done by a NEW handler, HTTPErrorProcessor. Here's the bottom line: python version < 2.4 HANDLE_ERRORS == 1 (default) pass up 200, treat the rest as errors HANDLE_ERRORS == 0 pass everything up, error processing is left to the calling code python version >= 2.4 HANDLE_ERRORS == 1 pass up 200, treat the rest as errors HANDLE_ERRORS == 0 (default) pass everything up, let the other handlers (specifically, HTTPErrorProcessor) decide what to do In practice, setting the variable either way makes little difference in python 2.4, so for the most consistent behavior across versions, you probably just want to use the defaults, which will give you exceptions on errors. i����NiiiitConnectionManagercBsGeZdZd�Zd�Zd�Zd�Zd�Zdd�Z RS(sV The connection manager must be able to: * keep track of all existing cCs.tj�|_i|_i|_i|_dS(N(tthreadt allocate_lockt_lockt_hostmapt_connmapt _readymap(tself((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt__init__�s  cCss|jj�zQ||jkr/g|j|<n|j|j|�||j|<||j|<Wd|jj�XdS(N(RtacquireRtappendRRtrelease(Rthostt connectiontready((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytadd�s  cCs�|jj�zky|j|}Wntk r4nCX|j|=|j|=|j|j|�|j|sw|j|=nWd|jj�XdS(N(RR RtKeyErrorRRtremoveR (RR R ((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR�s     cCs)y||j|<Wntk r$nXdS(N(RR(RR R((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt set_ready�s cCszd}|jj�zR||jkrdx<|j|D]*}|j|r3d|j|<|}Pq3q3WnWd|jj�X|S(Ni(tNoneRR RRR (RR tconntc((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytget_ready_conn�s   cCs0|rt|jj|g��St|j�SdS(N(tlistRtgettdict(RR ((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytget_all�sN( t__name__t __module__t__doc__RRRRRRR(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR}s    tKeepAliveHandlercBseeZd�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Z d �Z d �Z RS( cCst�|_dS(N(Rt_cm(R((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR�scCs8g|jj�j�D]\}}|t|�f^qS(streturn a list of connected hosts and the number of connections to each. [('foo.com:80', 2), ('bar.org', 1)](RRtitemstlen(RR tli((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytopen_connections�scCs;x4|jj|�D] }|jj|�|j�qWdS(s�close connection(s) to <host> host is the host:port spec, as in 'www.cnn.com:8080' as passed in. no error occurs if there is no connection to that host.N(RRRtclose(RR th((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytclose_connection�scCsUxN|jj�j�D]7\}}x(|D] }|jj|�|j�q)WqWdS(sclose all open connectionsN(RRt iteritemsRR$(RR tconnsR%((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt close_all�s" cCs|jj|d�dS(setells us that this request is now closed and that the connection is ready for another requestiN(RR(RtrequestR R ((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt_request_closed�sicCs'|r|j�n|jj|�dS(N(R$RR(RR R R$((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt_remove_connection�s cCs|jt|�S(N(tdo_opentHTTPConnection(Rtreq((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt http_open�scCs�|j�}|s$tjd��ny�|jj|�}x�|r�|j|||�}|raPn|j�|jj|�|jj|�}q<W||�}tr�tj d|t |��n|jj ||d�|j ||�|j �}Wn.tjtjfk r"}tj|��nX|jr?|jj|�ntratj d|j|j�n||_||_|j�|_||_|j|_|j|_|j|_|jdks�t r�|S|jjd|||j|j|j�SdS(Ns no host givens"creating new connection to %s (%d)isSTATUS: %s, %si�thttp(tget_hostturllib2tURLErrorRRt_reuse_connectionR$RtDEBUGtinfotidRt_start_transactiont getresponsetsocketterrorthttplibt HTTPExceptiont will_closetstatustreasont_handlert_hostt get_full_urlt_urlt _connectiontcodetmsgtheaderst HANDLE_ERRORStparent(Rt http_classR/R R%trterr((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR-�sH            cCs�y |j||�|j�}Wnhtjtjfk rEd}nFtrjtjd|t|��n|j j |�|j ��nX|dks�|j dkr�tr�tj d|t|��nd}n"tr�tj d|t|��n|S(sGstart the transaction with a re-used connection return a response object (r) upon success or None on failure. This DOES not close or remove bad connections in cases where it returns. However, if an unexpected exception occurs, it will close and remove the connection before re-raising. s4unexpected exception - closing connection to %s (%d)i s&failed to re-use connection to %s (%d)sre-using connection to %s (%d)N(R9R:R;R<R=R>RR6R8RRR$tversionR7(RR%R/R RM((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR5s(      c Cs�|jj�}tjdkr1|j|j�n|j|jj�td�|j �D��}i}x7dD]/}||krmd|d|j dd �<qmqmWy�|j �r|j �}|j d |j�|�d |kr�|jd d �nd|kr8|jddt|��q8n|j d|j�|�Wn%tjk r`}tj|��nXx*|j �D]\}} |j|| �qnW|j�|j �r�|j|�ndS(Niicss'|]\}}|j�|fVqdS(N(tlower(t.0tntv((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pys <genexpr>LsR saccept-encodingitskip_t-t_tPOSTs content-types Content-types!application/x-www-form-urlencodedscontent-lengthsContent-lengths%dtGET(ii(shostsaccept-encoding(RItcopytsyst version_infotupdatetunredirected_hdrsRKt addheadersRR treplacethas_datatget_datat putrequestt get_selectort putheaderR!R;R<R3R4t endheaderstsend( RR%R/RIt skipheadersRRtdataRNtkRS((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR9Es4  !         ( RRRR#R&R)R+R,R0R-R5R9(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR�s        4 .t HTTPHandlercBseZRS((RR(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyRjdst HTTPResponsecBsweZddd d�ZejjZd�Zd�Z d�Z d�Z d d�Zd�Z dd �Z dd �ZRS( icCshtjj||||�|j|_d|_d|_d|_d|_d|_ d|_ d|_ dS(Nti�( R=RkRtfilenoRRGt_rbuft _rbufsizeRBRCRERF(Rtsockt debugleveltstricttmethod((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR{s       cCsN|jrJ|jj�d|_|jrJ|jj||j|j�qJndS(N(tfpR$RRBR+RCRF(R((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR$�s     cCs-|jj|j|jdd�|j�dS(NR$i(RBR,RCRFR$(R((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR&�scCs|jS(N(RI(R((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR7�scCs|jS(N(RE(R((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytgeturl�scCs�|jra|dk rat|j�}||kr=||8}qa|j| }|j||_|Sn|j|j|�}d|_|S(NRl(RnRR!t _raw_read(RtamttLts((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytread�s    cCs�|j}d}x[trl|dkr�|jj�}|jd�}|dkr[|| }nyt|d�}Wn*tk r�|j�t j |��nX|dkr�Pq�n|dkr�||j |�7}n�||kr||j |�7}|||_|S||kr9||j |�7}|j d�d|_|S||j |�7}||8}|j d�d}qWx3tr�|jj�}|s�Pn|dkrpPqpqpW|j�|S(NRlt;iiis ( t chunk_lefttTrueRRttreadlinetfindtintt ValueErrorR$R=tIncompleteReadt _safe_read(RRwR|tvaluetlineti((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt _read_chunked�sL                    i����cCs |jjd�}x�|dkr�d|koAt|j�kn r�|j|j�}|scPn|jd�}|dkr�|t|j�}n|j||_qW|dkr�t|j�}n |d}d|ko�t|j�knr�|}n|j| |j|}|_|S(Ns ii(RnRR!RvRo(RtlimitR�tnewRh((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR~�s 5   % cCsfd}g}xStra|j�}|s+Pn|j|�|t|�7}|r||krPqqW|S(Ni(R}R~R R!(RtsizehintttotalRR�((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt readlines�s   N(RRRRR=RkRzRvR$R&R7RuR�R~R�(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyRkgs       8 cCswt|dd�dk rdS|jdkrM|jrA|j�qMtj�n|jdkrndGt|�GHny�d}t|dd�}|dk r�|jdkr�dGHn||�}x9|r�|jj |�||�}q�Wn|jj |�Wn{t j k rr}t }|dt jkrc|jtjkrVd|_|j�|_t}n|j�n|rs�qsnXdS(s`Send `str' to the server. Shamelessly ripped off from httplib to patch a bad behavior. t_broken_pipe_respNissend:i Rzssending a read()able(tgetattrRRpt auto_opentconnectR=t NotConnectedRqtreprtsendallR;R<R}terrnotEPIPEt_HTTPConnection__statet _CS_REQ_SENTR�R:tFalseR$(Rtstrt blocksizeRzRhRStreraise((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytsafesends:          cs"�fd�}�jj|_|S(s>Wraps getresponse in cls with a broken-pipe sane version. cs/t|dd�}|dk r"|S�j|�S(NR�(R�RR:(RRM(tcls(s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytsafegetresponse9s (R:R(R�R�((R�s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytwrapgetresponse6s R.cBs#eZeZeZeej�Z RS(( RRRktresponse_classR�RfR�R=R.R:(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR.Esc Cs!t}t�}tj|�}tj|�idd6dd6}x�d D]�}d|||fGH|ay^tj|�}|j�|j�y|j|j }}Wnt k r�d \}}nXWnt k r�} d| GH�qFXd||fGHqFW|a|j �} dG| GH|j�dS( Ntoffitonis. fancy error handling %s (HANDLE_ERRORS = %i)s EXCEPTION: %ss status = %s, reason = %ssopen connections:(ii(NN(RJRjR3t build_openertinstall_openerturlopenRzR$R@RAtAttributeErrorRtIOErrorR#R)( turltorigtkeepalive_handlertopenertposR�tfoR@RAtethosts((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt error_handlerPs0         cCsHyddlm}Wn!tk r7ddlm}nX|a||�S(Ni����(tmd5(thashlibR�t ImportError(Ryt_md5((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR�ls  cCsDd}tj�}tj|�tj|�}|j�}|j�tj|�}|d|j�fGHtjt ��}tj|�tj|�}|j�}|j�tj|�}|d|j�fGHtj|�}d}x*t r|j �}|r ||}q�Pq�W|j�tj|�}|d|j�fGHdS(Ns%25s: %ss normal urllibskeepalive readRlskeepalive readline( R3R�R�R�RzR$R�R�t hexdigestRjR}R~(R�tformatR�R�tfootmtf((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt continuityus2           cCs�d||fGHtjjd�tj�}tj|�t||�}d|GHtjjd�tjt��}tj|�t||�}d|GHd||GHdS(Ns making %i connections to: %ss( first using the normal urllib handlerss TIME: %.3f ss( now using the keepalive handler s improvement factor: %.2f(RZtstdouttwriteR3R�R�tfetchRj(tNR�R�tt1tt2((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytcomp�s     c Cs�ddl}g}|j�}xnt|�D]`}|rS|dkrS|j|�ntj|�}|j�}|j�|jt|��q+W|j�|} d} x>|dD]2}| d} ||dks�d| |fGHq�q�W| S(Ni����iis+WARNING: inconsistent length on read %i: %i( ttimetrangetsleepR3R�RzR$R R!( R�R�tdelayR�tlenst starttimeR�R�R�tdifftj((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR��s"     cCst}dtfd��Y}|�adGHtj|�}|j�}|j�d}d|GHxH|dkr�tjjd|�tjj �t j d�|d8}qaWtj jd �d GHtj|�}|j�}|j�||kr�d GHnd GH|adS( Nt FakeLoggercBseZd�ZeZZZRS(cWs ||GHdS(N((RRHtargs((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pytdebug�s(RRR�R7twarningR<(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyR��s s- fetching the file to establish a connectionis; waiting %i seconds for the server to close the connectionis %2iis s! fetching the file a second times data are identicals ERROR: DATA DIFFER( R6tobjectR3R�RzR$RZR�R�tflushR�R�tstderr(R�tdbbackupR�R�tdata1R�tdata2((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt test_timeout�s.         i cCsmdGHyt|�Wn tk r5dGHtj�nXHdGHt|�HdGHt||�HdGHt|�dS(Ns-checking error handler (do this on a non-200)s.exiting - exception will prevent further testss>performing continuity test (making sure stuff isn't corrupted)sperforming speed comparisons#performing dropped-connection check(R�R�RZtexitR�R�R�(R�R�((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyttest�s   t__main__s%s <integer> <url>(ii("RR�R=R;RR3RR6RZR[RJR�RRRjRkR�R�R.R�R�R�R�R�R�R�RR�R�targvR�R�t IndexErrorR�(((s9/usr/lib64/python2.7/site-packages/mercurial/keepalive.pyt<module>lsB       ?�� 3   !   #