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/lib/python2.7/site-packages/yum
Viewing File: /usr/lib/python2.7/site-packages/yum/misc.pyc
� � v_c@s�dZddlZddlZddlZddlZddlmZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddgZyddlZejd�Wnek rTdZnXddlmZmZddl Tyddl!Z!ddl"Z!Wnek r�dZ!nXy+ddl#Z#e$d d d d d g�Z%WnNek r&ddl&Z&ddl'Z'e$d d g�Z%ddYd��YZ#nXe$�Z(x�e)e%�D]�Z*ye#j+e*�Wq=e,k r�Z-e.e-e/�r�e0e-�j1d�r�e(j2e*�nej3de4e*�IJe%j5e*�q=Xq=Wx0dZD]Z*e*e%kr�e*gZ6Pq�q�Wed�ddl m7Z7m8Z8ddl9m:Z:m;Z;ia<ia=d�Z>d�Z?da@d�ZAeBd�ZCdaDd�ZEd�ZFd�ZGdaHd�ZId�ZJd�ZKdd[d ��YZLd!d\d"��YZMd]dd%�ZNd&�ZOd'd^d(��YZPd)�ZQd*d+�ZReBd,�ZSd-�ZTd.�ZUddeVd/�ZWd0�ZXdd1�ZYd2eVd3d4�ZZd5�Z[d6�Z\d7�Z]d8�Z^d9�Z_d:�Z`d;�Zad<�Zbd=�Zcd>�Zdd?d@�Zed?dA�ZfdB�ZgdCjhdD�eidE�D��ZjeBdF�ZkdG�ZleBdH�ZmdI�ZndaodJ�ZpddlqZqeVeBdK�ZrdL�ZsdM�ZtdN�ZudO�ZvdeBeBdP�ZweBdQ�ZxeVdR�ZydazdS�Z{dT�Z|dU�Z}dV�Z~dW�ZdX�Z�dS(_s% Assorted utility functions for yum. i����N(tStringIOtgztbz2txz(tstringToVersiont flagToString(t*tmd5tsha1tsha256tsha384tsha512thashlibcBseZed��ZRS(cCs9|dkrtj�S|dkr,tj�Std�dS(NRRsBad checksum type(Rtnewtshat ValueError(talgo((s,/usr/lib/python2.7/site-packages/yum/misc.pyR 4s     (t__name__t __module__t staticmethodR (((s,/usr/lib/python2.7/site-packages/yum/misc.pyR 2ssdisabled for fipssChecksum type %s disabledsbroken hashlib(t MiscErrortFIPSNonCompliantError(tto_utf8t to_unicodecCsGt}t|t�rt}nt|�tjkr7|S|j||�S(s� Take a value and use the same value from the store, if the value isn't in the store this one becomes the shared version. (t_share_data_storet isinstancetunicodet_share_data_store_uttypettypest TupleTypet setdefault(tvaluetstore((s,/usr/lib/python2.7/site-packages/yum/misc.pyt share_data[s  cCsiaiadS(N(RR(((s,/usr/lib/python2.7/site-packages/yum/misc.pyt unshare_datakscCs+tdkr!tjd�jant|�S(s( Tests if a string is a shell wildcard. s [*?]|\[.+\]N(t_re_compiled_glob_matchtNonetretcompiletsearch(ts((s,/usr/lib/python2.7/site-packages/yum/misc.pytre_globrs cs�t��r[y5|rtjp!d}tjtj��|�jSWq[tjk rWq[Xn|rz�j���fd�S�fd�S(s5 Compile shell wildcards, return a 'match' function. ics|j��kS(N(tlower(R)(tpat(s,/usr/lib/python2.7/site-packages/yum/misc.pyt<lambda>�scs |�kS(N((R)(R,(s,/usr/lib/python2.7/site-packages/yum/misc.pyR-�s( R*R&tIR'tfnmatcht translatetmatchterrorR+(R,t ignore_casetflags((R,s,/usr/lib/python2.7/site-packages/yum/misc.pytcompile_pattern{s    cCs+tdkr!tjd�jant|�S(s� Tests if a string could be a filename. We still get negated character classes wrong (are they supported), and ranges in character classes. s[/*?]|\[[^]]*/[^]]*\]N(t_re_compiled_filename_matchR%R&R'R1(R)((s,/usr/lib/python2.7/site-packages/yum/misc.pyt re_filename�s cCs$t|�rtS|dkr tStS(s" Tests if a filename string, can be matched against just primary. Note that this can produce false negatives (Eg. /b?n/zsh) but not false positives (because the former is a perf hit, and the later is a failure). Note that this is a superset of re_primary_dirname(). s/usr/lib/sendmail(tre_primary_dirnametTruetFalse(tfilename((s,/usr/lib/python2.7/site-packages/yum/misc.pytre_primary_filename�s   cCs'd|krtS|jd�r#tStS(s~ Tests if a dirname string, can be matched against just primary. Note that this is a subset of re_primary_filename(). sbin/s/etc/(R9t startswithR:(tdirname((s,/usr/lib/python2.7/site-packages/yum/misc.pyR8�s  cCsdtdkr?tjd�j}tjd�j}||fanxtD]}||�rFtSqFWtS(sC Tests if a string needs a full nevra match, instead of just name. s.*([-.*?]|\[.+\]).s[0-9]+:N(t_re_compiled_full_matchR%R&R'R1R9R:(R)tonettwotrec((s,/usr/lib/python2.7/site-packages/yum/misc.pytre_full_search_needed�s   cCsI|j�}|jd�rtS|jd�r2tS|jd�rEtStS(s8 Tests if a string is a "remote" URL, http, https, ftp. shttp://shttps://sftp://(R+R=R9R:(R)((s,/usr/lib/python2.7/site-packages/yum/misc.pyt re_remote_url�s cCs,t|�}|dkrgSyt|�}Wntk r?n Xt|�Syt|�}|j�Wntk rz~n{X|dks�t�|d}d}}xI||kr�|||kr�||||<}|d7}n|d7}q�W|| Sg}x*|D]"}||kr|j|�qqW|S(s Return a list of the elements in s, but without duplicates. For example, unique([1,2,3,1,2,3]) is some permutation of [1,2,3], unique("abcabc") some permutation of ["a", "b", "c"], and unique(([1, 2], [2, 3], [1, 2])) some permutation of [[2, 3], [1, 2]]. For best speed, all sequence elements should be hashable. Then unique() will usually work in linear time. If not possible, the sequence elements should enjoy a total ordering, and if list(s).sort() doesn't raise TypeError it's assumed that they do enjoy a total ordering. Then unique() will usually work in O(N*log2(N)) time. If that's not possible either, the sequence elements must support equality-testing. Then unique() will usually work in quadratic time. ii(tlentsett TypeErrortlisttsorttAssertionErrortappend(R)tntutttlasttlastititx((s,/usr/lib/python2.7/site-packages/yum/misc.pytunique�s6           t ChecksumscBszeZdZd eed�Zd�Zedd��Zd�Z dd�Z d �Z d d �Z d �Z d d �ZRS(sn Generate checksum(s), on given pieces of data. Producing the Length and the result(s) when complete. cCs|dkrt}ng|_g|_d|_t�}x�|D]�}|dkr[d}n||krmq@n|tkr�tj|�}n4|r�q@n(|t kr�t |��n t d|�|j |�|jj |�|jj |�q@W| r | r t d�ndS(NiRRs(Error Checksumming, bad checksum type %ss*Error Checksumming, no valid checksum type(R%t_default_checksumst _sumalgost _sumtypest_lenRFt_available_checksumsR R t_fips_noncompliantRRtaddRK(tselft checksumstignore_missingt ignore_nonetdonetsumtypetsumalgo((s,/usr/lib/python2.7/site-packages/yum/misc.pyt__init__ s.              cCs|jS(N(RX(R\((s,/usr/lib/python2.7/site-packages/yum/misc.pyt__len__%stfgetcCs|jS(N(RX(R\((s,/usr/lib/python2.7/site-packages/yum/misc.pyR-)scCs:|jt|�7_x|jD]}|j|�qWdS(N(RXRERVtupdate(R\tdataRb((s,/usr/lib/python2.7/site-packages/yum/misc.pyRf+siicCs |j|�}|j|�|S(N(treadRf(R\tfotsizeRg((s,/usr/lib/python2.7/site-packages/yum/misc.pyRh0s cCs@i}x3t|j|j�D]\}}|j�||<qW|S(N(tzipRWRVt hexdigest(R\tretRatsumdata((s,/usr/lib/python2.7/site-packages/yum/misc.pyt hexdigests5s"cCsL|dkr)|jsdS|jd}n|dkr>d}n|j�|S(NiRR(R%RWRo(R\tchecksum((s,/usr/lib/python2.7/site-packages/yum/misc.pyRl;s    cCs@i}x3t|j|j�D]\}}|j�||<qW|S(N(RkRWRVtdigest(R\RmRaRn((s,/usr/lib/python2.7/site-packages/yum/misc.pytdigestsDs"cCsL|dkr)|jsdS|jd}n|dkr>d}n|j�|S(NiRR(R%RWRr(R\Rp((s,/usr/lib/python2.7/site-packages/yum/misc.pyRqJs    Ni(RRt__doc__R%R:RcRdtpropertytlengthRfRhRoRlRrRq(((s,/usr/lib/python2.7/site-packages/yum/misc.pyRTs     tAutoFileChecksumscBs2eZdZeed�Zd�Zdd�ZRS(sk Generate checksum(s), on given file/fileobject. Pretending to be a file object (overrrides read). cCs"||_t|||�|_dS(N(t_foRTR](R\RiR]R^R_((s,/usr/lib/python2.7/site-packages/yum/misc.pyRcXs cCst|j|�S(N(tgetattrRw(R\tattr((s,/usr/lib/python2.7/site-packages/yum/misc.pyt __getattr__\si����cCs|jj|j|�S(N(R]RhRw(R\Rj((s,/usr/lib/python2.7/site-packages/yum/misc.pyRh_s(RRRsR:RcRzRh(((s,/usr/lib/python2.7/site-packages/yum/misc.pyRvTs iicCsy�t|�tjkr!|}nt|d�}t|g�}x5|j||�rv|dk rB|j|krBPqBqBWt|�tjkr�|j �n|dk r�||jkr�d||j |�fS|j |�SWn&t t fk r}t d|�nXdS(s�takes filename, hand back Checksum of it sumtype = md5 or sha/sha1/sha256/sha512 (note sha == sha1) filename = /path/to/file CHUNK=65536 by defaulttrs!%u!%ss#Error opening file for checksum: %sN(RRt StringTypestopenRTRhR%Rut StringTypetcloseRltIOErrortOSErrorR(RatfiletCHUNKtdatasizeRiRgte((s,/usr/lib/python2.7/site-packages/yum/misc.pyRpcs  cCs�t|�}ytj|�}Wn&tk rG}td||f�nXx�|D]�}tjj|d|�r�t|d|||�}qO| s�|| j�d|krOtjj |d|�}|j |�qOqOW|S(sfReturn all files in path matching ext, store them in filelist, recurse dirs return list objects Error accessing directory %s, %st/s%s( REtostlistdirR�Rtpathtisdirt getFileListR+tnormpathRK(R�texttfilelisttextlentdir_listR�tdtnewpath((s,/usr/lib/python2.7/site-packages/yum/misc.pyR��s  "t GenericHoldercBs,eZdZdd�Zd�Zd�ZRS(s�Generic Holder class used to hold other objects of known types It exists purely to be able to do object.somestuff, object.someotherstuff or object[key] and pass object to another function that will understand itcCs ||_dS(N(t_GenericHolder__iter(R\titer((s,/usr/lib/python2.7/site-packages/yum/misc.pyRc�scCs$|jdk r t||j�SdS(N(R�R%R�(R\((s,/usr/lib/python2.7/site-packages/yum/misc.pyt__iter__�scCs)t||�rt||�St|�dS(N(thasattrRxtKeyError(R\titem((s,/usr/lib/python2.7/site-packages/yum/misc.pyt __getitem__�s N(RRRsR%RcR�R�(((s,/usr/lib/python2.7/site-packages/yum/misc.pyR��s  cCs�tjdd|�}t�}d}d}x�|jd�D]�}|jd�rXd}q:|ry|j�dkryd}q:|r�|jd�r�Pq:|r�|jd�r�Pq:|r:|j|d�q:q:Wtj|j ��S( s-Convert ASCII armoured GPG key to binary s ?s is$-----BEGIN PGP PUBLIC KEY BLOCK-----its"-----END PGP PUBLIC KEY BLOCK-----t=( R&tsubRtsplitR=tstriptwritetbase64t decodestringtgetvalue(trawkeytblocktinblockt pastheaderstline((s,/usr/lib/python2.7/site-packages/yum/misc.pyt procgpgkey�s    icCsn|d�}tj|�}|rjgtdt|�|�D]}||||!^q;}dj|�}n|S(s� Given a key_info data from getgpgkeyinfo(), return an ascii fingerprint. Chop every 4 ascii values, as that is what GPG does. t fingerprintit (tbinasciithexlifytrangeREtjoin(tinfotchoptfpRQ((s,/usr/lib/python2.7/site-packages/yum/misc.pytgpgkey_fingerprint_ascii�s  6c Cs�g}ytj|�}Wn%tk r@}tt|���nXt|�dkrbtd��nx|D]}|jj�}i|jd6t j d|�dd6|jj d6|jj d6|j d6td 6td 6}x�|jdD]{}t|tj�sq�n|j�|kr�t|d �r`|jtj�} | d kr]t| d �|d<Pq]q`q�q�W|j|�qiW|r|S|dSd S(s�Return a dict of info for the given ASCII armoured key text Returned dict will have the following keys: 'userid', 'keyid', 'timestamp' Will raise ValueError if there was a problem decoding the key. isNo key found in given key datatuserids>Qtkeyidt timestampR�traw_keythas_sigt valid_sigthashed_subpaksiN(tpgpmsgtdecode_multiple_keyst ExceptionRtstrREt public_keytkey_idtuser_idtstructtunpackR�R�R�R:tuser_idsRt signatureR�tget_hashed_subpaktSIG_SUB_TYPE_CREATE_TIMER%tintRK( R�tmultiplet key_info_objstkeysR�tkeyt keyid_blobR�R�ttspkt((s,/usr/lib/python2.7/site-packages/yum/misc.pyt getgpgkeyinfo�s<       cCs d|d@S(s[Convert an integer representing a GPG key ID to the hex version string used by RPM s%08xl��((R�((s,/usr/lib/python2.7/site-packages/yum/misc.pyt keyIdToRPMVerscCswt|�}xd|jdd�D]P}|d|krt|dd�}||krXdS||krhdSdSqqWd S( sd Return if the GPG key described by the given keyid and timestamp are installed in the rpmdb. The keyid and timestamp should both be passed as integers. The ts is an rpm transaction set object Return values: - -1 key is not installed - 0 key with matching ID and timestamp is installed - 1 key with matching ID is installed but has a older timestamp - 2 key with matching ID is installed but has a newer timestamp No effort is made to handle duplicates. The first matching keyid is used to calculate the return result. tnames gpg-pubkeytversiontreleaseiiiii����(R�tdbMatchR�(ttsR�R�thdrt installedts((s,/usr/lib/python2.7/site-packages/yum/misc.pyt keyInstalled s    cCs�tdkrtS|s#d|}ntjj|�sEtj|�nt|�}|tjd<tj �}t tjj |d�d�}|j d�|j �|j|�|j �|j|�}tjj||tj�|r�|d} tjj| �s�tj| dd�x[tj|d �D]F} tjj| �} | d | } tj| | �tj| d�q'Wt | d d d�}d } |j | �|j �q�ntS(Ns %s/gpgdirt GNUPGHOMEsgpg.conftwbR�s-rotmodei�s/*R�s /gpg.conftws�lock-never no-auto-check-trustdb trust-model direct no-expensive-trust-checks no-permission-warning preserve-permissions (tgpgmeR%R:R�R�texiststmakedirsRtenvirontContextR}R�R�Rtimport_tget_keyteditutilt edit_trusttVALIDITY_ULTIMATEtglobtbasenametshutiltcopytchmodR9(R�R�tcachedirtgpgdirt make_ro_copytkey_fotctxR�tktrodirtfR�tro_ftopts((s,/usr/lib/python2.7/site-packages/yum/misc.pytimport_key_to_pubring*s<           cCs�tdkstjj|� r#gS|tjd<tj�}g}xD|j�D]6}x-|jD]"}|j r_|j |j �q_q_WqOW|S(NR�( R�R%R�R�R�R�R�tkeylisttsubkeystcan_signRKR�(R�R�tkeyidsR�tsubkey((s,/usr/lib/python2.7/site-packages/yum/misc.pytreturn_keyids_from_pubring[s   c CstdkrtS|r<tjj|�s,tS|tjd<nt|d�rT|}nt|d�}t|d�r{|}nt|d�}d}tj �}y|j |||�}Wntj k r�}tSX|s�tS|d} | s�tS| j tj tjtjfkrtStS(sAtakes signature , file that was signed and an optional gpghomedirR�RhR{iN(R�R%R:R�R�R�R�R�R}R�tverifyt GpgmeErrortvalidityt VALIDITY_FULLtVALIDITY_MARGINALR�R9( tsig_filet signed_filetgpghometsigt signed_textt plaintextR�tsigsR�tthissig((s,/usr/lib/python2.7/site-packages/yum/misc.pytvalid_detached_sigis6     s/var/tmpsyum-c Cstj�}y,tj|�}|d}tj|�}Wntk rLdSX|r�d||f}d||f}tt j |��}xZ|D]O}tj |�} t | d�r�t | d�dkr�| d|kr�|Sq�Wnt jd|d|�} | S( sqreturn a path to a valid and safe cachedir - only used when not running as root or when --tempcache is setis%s%s-s%s/%s*i�itprefixtdirN(R�tgeteuidtpwdtgetpwuidturllibtquoteR�R%tsortedR�tlstattS_ISDIRtS_IMODEttempfiletmkdtemp( ttmpdirtreuseR tuidtusertuptusernametdirpatht cachedirstthisdirtstatsR�((s,/usr/lib/python2.7/site-packages/yum/misc.pyt getCacheDir�s"    6 cCs4|j|jkrdS|j|jkr,dSdSdS(s+sorts a list of yum package objects by nameiii����N(R�(tpkg1tpkg2((s,/usr/lib/python2.7/site-packages/yum/misc.pyt sortPkgObj�s cCsn|j�g}|d}xN|D]F}|j|�rG|g}|}q |j|�r |j|�q q W|S(s, Return the newest in the list of packages. i(tpoptverGTtverEQRK(tpkgsRmtnewesttpkg((s,/usr/lib/python2.7/site-packages/yum/misc.pyt newestInList�s    cCsp|\}}}d}|dkr2|d|7}n|dk rO|d|7}n|dk rl|d|7}n|S( s� Convert a tuple representing a package version to a string. @param evrTuple: A 3-tuple of epoch, version, and release. Return the string representation of evrTuple. R�it0s%s:s%ss-%sN(iR,N(R%(tevrTupleR�tvR{R)((s,/usr/lib/python2.7/site-packages/yum/misc.pytversion_tuple_to_string�s   cCsc|\}}}idd6dd6dd6dd6d d 6}|d krH|Sd |||t|�fS( s7returns a text string of the prco from the tuple formatt>tGTs>=tGER�tEQt<tLTs<=tLEs%s %s %sN(R%R/(t prcoTupleR�tflagtevrR4((s,/usr/lib/python2.7/site-packages/yum/misc.pytprco_tuple_to_string�s ) c Cs�t|�tjkr'|\}}}nc|}d}}|ddkr�|jd� r�|j�}t|�dkr�|\}}}q�n|dk r |tjkr |tj kr�yt t |��}Wqt t fk r�}tjd|�qXq tj |}nt|�tjtjtjfkrEt|�\}}}n0t|�tjtjfkru|\}}}n|||||ffS(s:returns a prco tuple (name, flags, (e, v, r)) for a stringiR�sgpg(isInvalid version flag: %sN(RRRR%R=R�REt constantst LETTERFLAGSt SYMBOLFLAGSRR�RRGtErrorsRR~tNoneTypet UnicodeTypeRtListType( t prcoStringRLR�R.t prco_splitR�tprco_etprco_vtprco_r((s,/usr/lib/python2.7/site-packages/yum/misc.pytstring_to_prco_tuple�s(   $cCs7tjd|�r$tj|�}ntj|�}|S(smTakes a search string from the cli for Search or Provides and cleans it up so it doesn't make us vomits[*{}?+]|\[.+\](R&R(R/R0tescape(targtrestring((s,/usr/lib/python2.7/site-packages/yum/misc.pytrefineSearchPatternscCsi|tkr%d|}tj|�n|dkrFtj|d�}nB|dkrgtj|d�}n!|dkr�tj|d�}nt |d�}x�t rPy|j d�}Wn>t t tfk r�}d|t|�f}tj|�nX|s�Pny|j|�Wq�t t fk rL}d |t|�f}tj|�q�Xq�W|j�|j�dS( Ns%s compression not availableRR{RRR�i�sError reading from file %s: %ssError writing to file %s: %s(t_available_compressionR>RRtBZ2FiletlzmatLZMAFiletgziptGzipFileR}R9RhR�R�tEOFErrorR�R�R(tsourcetdesttztypetmsgts_fnt destinationRgR�((s,/usr/lib/python2.7/site-packages/yum/misc.pyt_decompress_chunked s2       cCst||dd�dS(s1 Extract the bzipped contents of source to dest. RURN(RY(RSRT((s,/usr/lib/python2.7/site-packages/yum/misc.pyt bunzipFile/scCs�tj�d}ttjd|��}x�|D]x}|jd|�}x]|D]U}|d}|dd krxd}n t|�}|d|d||d|d fSWq0Wd S( s}This takes the output of uname and figures out the pkgtup of the running kernel (name, arch, epoch, version, release).is/boot/vmlinuz*%s*t basenamestepochR,R�tarchR�R�N(NNNNN(R�tunameRR�R�R%R�(R�tvertfnstfntmithR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytget_running_kernel_pkgtup3s     (cCs2t|�}|ddk r.|d|dfSdS(sgThis takes the output of uname and figures out the (version, release) tuple for the running kernel.iiiN(NN(RdR%(R�tpkgtup((s,/usr/lib/python2.7/site-packages/yum/misc.pyt"get_running_kernel_version_releaseGs s /var/lib/yumc Cs�g}d|df}d|df}tj|�}tj|�}xT|D]L}|jd�rfqKntjj|�}|jdd�}|j|�qKW|j�|S(s�returns a list of the timestamps from the filenames of the unfinished transactions remaining in the yumlibpath specified. s%s/%sstransaction-all*stransaction-done*tdisabledstransaction-all.R�(R�tendswithR�R�R�treplaceRKRI( t yumlibpatht timestampsttsallgttsdonegttsallsttsdonesRattransR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytfind_unfinished_transactionsOs  cCseg}d|d|f}d|d|f}g}tjj|�sH|Stjj|�r�t|d�}|j�}|j�nt|d�}|j�}|j�x-|D]%} | |kr�q�n|j| �q�Wx�|D]} | jdd�} | dkrq�ny| j�\} } Wn)t k rI} d|} t j | �nX|j | | f�q�W|S(sthis function takes the timestamp of the transaction to look at and the path to the yum lib dir (defaults to /var/lib/yum) returns a list of tuples(action, pkgspec) for the unfinished transaction elements. Returns an empty list if none. s%s/%s.%sstransaction-allstransaction-doneR{s R�s(Transaction journal file %s is corrupt.( R�R�R�R}t readlinesRtremoveRiR�RR>RRK(R�Rjtto_complete_itemst tsallpatht tsdonepatht tsdone_itemst tsdone_fottsall_fot tsall_itemsR�tactiontpkgspecR�RV((s,/usr/lib/python2.7/site-packages/yum/misc.pytfind_ts_remainingcs8         cCs~g}t|�}t|�}d}xB||krh||}|j|||!�||7}||8}q'W|j||�|S(sE Given a seq, split into a list of lists of length max_entries each. i(RERHRK(tseqt max_entriesRmtnumtbegtend((s,/usr/lib/python2.7/site-packages/yum/misc.pyt seq_max_split�s    R�ccs'|]}|dkrt|�VqdS(i i i N(i i i (tchr(t.0RQ((s,/usr/lib/python2.7/site-packages/yum/misc.pys <genexpr>�si cCst|�tkrRyt|d�Wq�tk rNt|d�jd�}q�XnGt|�tkrv|jd�}n#|dkr�dStdt|��|j�}|j dt �}|j dd�}|j dd�}|j d d �}|r|j d d �}|j d d�}n|S(s_ Returns xml-friendly utf-8 encoded string. Accepts utf-8, iso-8859-1, or unicode. sutf-8s iso-8859-1R�sString expected, got %st&s&amp;R4s&lt;R0s&gt;t"s&quot;t's&apos;N( RR�RtUnicodeDecodeErrortencodeR%RtreprtrstripR0t _deletecharsRi(R�tattrib((s,/usr/lib/python2.7/site-packages/yum/misc.pytto_xml�s&   cCsXytj|�Wn@tk rS}|jtjtjtjtjfkrT�qTnXdS(s| Call os.unlink, but don't die if the file isn't there. This is the main difference between "rm -f" and plain "rm". N(R�tunlinkR�terrnotENOENTtEPERMtEACCEStEROFS(R;R�((s,/usr/lib/python2.7/site-packages/yum/misc.pytunlink_f�s 'cCsiytj|�SWnQtk rd}|jtjtjfkrBdS|r^|jtjkr^dS�nXdS(sF Call os.stat(), but don't die if the file isn't there. Returns None. N(R�tstatR�R�R�tENOTDIRR%R�(R;t ignore_EACCESR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytstat_f�scCsXytd�}Wntk r$dSX|j�}yt|�SWntk rSdSXdS(s� Get the audit-uid/login-uid, if available. None is returned if there was a problem. Note that no caching is done here. s/proc/self/loginuidN(R}R�R%RhR�R(RiRg((s,/usr/lib/python2.7/site-packages/yum/misc.pyt _getloginuid�s   cCstdkrt�antS(s� Get the audit-uid/login-uid, if available. None is returned if there was a problem. The value is cached, so you don't have to save it. N(t_cached_getloginuidR%R�(((s,/usr/lib/python2.7/site-packages/yum/misc.pyt getloginuid�s  cCs�y3tjtjd�|r2tjtjd�nWnCtjk rx}tjdIJdtjd<tjtjd�nX|r�ddd��Y}|tj tj ��t_ ndS(NR�tCs%Failed to set locale, defaulting to CtLC_ALLt UnicodeStreamcBs#eZd�Zd�Zd�ZRS(cSs||_||_dS(N(tstreamtencoding(R\R�R�((s,/usr/lib/python2.7/site-packages/yum/misc.pyRcs cSs;t|t�r'|j|jd�}n|jj|�dS(NRi(RRR�R�R�R�(R\R)((s,/usr/lib/python2.7/site-packages/yum/misc.pyR�scSst|j|�S(N(RxR�(R\R�((s,/usr/lib/python2.7/site-packages/yum/misc.pyRzs(RRRcR�Rz(((s,/usr/lib/python2.7/site-packages/yum/misc.pyR�s  (( tlocalet setlocaleR�tLC_TIMEtErrortsyststderrR�R�tstdouttgetpreferredencoding(toverride_codecst override_timeR�R�((s,/usr/lib/python2.7/site-packages/yum/misc.pyt setup_locale�s   cCsZytjtj�}Wntk r1}d}nX|dkrGd}ndj|�}|S(NR�t.(NN(NN(R�t getlocalet LC_MESSAGESRR%R�(tmylangR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytget_my_lang_code s   cCsgtj�}g}xNtjd�D]=}|tjj|�krFq"n|jtjj|��q"W|S(s5return list of running processids, excluding this ones/proc/[0123456789]*(R�tgetpidR�R�R�RK(tmypidtpidsRa((s,/usr/lib/python2.7/site-packages/yum/misc.pytreturn_running_pidss c Csrg}d|}yt|d�}Wnttfk r?}|SXx�|D]�}|jd�dkrhqGn|jdd�}|jd�}||}|jdd�}|j�}||krG|j|�qGqGWd |}yt|d�} Wnttfk r }|SX| j�} | jd �dkrn| jd �} x0| D]%} | j d�rB|j| �qBqBWn|S( s returns files open from this pids /proc/%s/mapsR{sfd:i����s R�R�s (deleted)s/proc/%s/cmdlinet( R}R�R�tfindRiR�RKRhR�R=( tpidtfilestmaps_ftmapsR�R�tslashR;tcli_ftclitcmdlinetcmdsRQ((s,/usr/lib/python2.7/site-packages/yum/misc.pytget_open_files$s8        cCs�tjj|�r%t|d�j�Syddlm}Wn&tk ratdd�j�}nXt|��}y4t|d�}|j |�|j �|j �Wnt t fk r�}nX|SdS(swcreate, store and return a uuid. If a stored one exists, report that if it cannot be stored, return a random oneR{i����(tuuid4s/proc/sys/kernel/random/uuidR�N(R�R�R�R}RhtuuidR�t ImportErrorR�R�tflushRR�R�(tsavepathR�tmyidtsfR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytget_uuidGs   cCs�|}|s|}n|jd�rHd}|s�|jdd�}q�n�|jd�sf|jd�r�d}|s�|jd�r�|jdd�}q�|jdd�}q�n7|jd�r�d}|s�|jdd�}q�n|S|rAt|�}t|�}|rA|rAt|j�t|j�kr1|S|r>d SqAn|s�y?t|||�|r�|r�tj||j|jf�nWq�t |��q�Xn|S( s|take a filename and decompress it into the same relative location. if the file is not compressed just return the files.gzRR�s.bzs.bz2Rs.xzRN( RhRiR�R�tst_mtimeR%RYR�tutimeR�(R;RTtfn_onlytcheck_timestampstoutRUtfiRi((s,/usr/lib/python2.7/site-packages/yum/misc.pyt decompress^sF      #  cCsstjj|�d|}yt|d|dt�SWn8ttfk rn}|rh|jtjkrhdS�nXdS(s� This is a wrapper around decompress, where we work out a cached generated name, and use check_timestamps. filename _must_ be from a repo. and generated_name is the type of the file. s/gen/RTR�N( R�R�R>R�R9R�R�R�R�R%(R;tgenerated_nametcachedRTR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytrepo_gen_decompress�scCs�g}x�tj|�D]�}x�t|�D]�}tjd|�rGq)n|j�}|j�}|skq)n|r�|jdd�}|jdd�}|j|j��q)n|j |�q)WqW|S(s'takes a glob of a dir (like /etc/foo.d/*.foo) returns a list of all the lines in all the files matching that glob, ignores comments and blank lines, optional paramater 'line_as_list tells whether to treat each line as a space or comma-separated list, defaults to Trues\s*(#|$)s R�t,( R�R}R&R1R�tlstripRitextendR�RK(tthisglobt line_as_listtresultstfnameR�((s,/usr/lib/python2.7/site-packages/yum/misc.pytread_in_items_from_dot_dir�s   cCsMtdkrIyddlm}Wntk r?ddl}nX|andS(s� Importing xElementTree all the time, when we often don't need it, is a huge timesink. This makes python -c 'import yum' suck. So we hide it behind this function. And have accessors. i����(t cElementTreeN(t__cached_cElementTreeR%t xml.etreeR�R�(R�((s,/usr/lib/python2.7/site-packages/yum/misc.pyt_cElementTree_import�s   cCst�tj|�S(s) Lazily load/run: cElementTree.iterparse (R�R�t iterparse(R;((s,/usr/lib/python2.7/site-packages/yum/misc.pytcElementTree_iterparse�scCst�tj|�S(s% Lazily load/run: cElementTree.parse (R�R�tparse(R;((s,/usr/lib/python2.7/site-packages/yum/misc.pytcElementTree_xmlparse�scCs�|dkr|Sg}xo|D]g}|jdkrbd|jkrGqn|jj|krwqqwn|j|krwqn|j|�qW|S(s� Given a list of packages, filter them for those "in" the repoid. uses from_repo for installed packages, used by repo-pkgs commands. t installedt from_repoN(R%trepoidt yumdb_infoR�RK(R(R�RmR*((s,/usr/lib/python2.7/site-packages/yum/misc.pytfilter_pkgs_repoid�s   cCs=tjtjd}x"|D]}||kr|SqWdSdS(s;Return the first invalid char found in the repoid, or None.s-_.:N(tstringt ascii_letterstdigitsR%(R�t allowed_charstchar((s,/usr/lib/python2.7/site-packages/yum/misc.pytvalidate_repoid�s   cs�d���|�}tjj|�s+|SxZtj|�D]I\�}}�fd�||D�}|t�fd�|D��7}q;W|S(s>Return disk usage of the given filename, recursively for dirs.cSstj|�jdS(Ni(R�R�t st_blocks(R�((s,/usr/lib/python2.7/site-packages/yum/misc.pytusage�sc3s$|]}tjj�|�VqdS(N(R�R�R�(R�tentry(troot(s,/usr/lib/python2.7/site-packages/yum/misc.pys <genexpr>�sc3s|]}�|�VqdS(N((R�R�(R�(s,/usr/lib/python2.7/site-packages/yum/misc.pys <genexpr>�s(R�R�R�twalktsum(R�ttotaltdirsR�tpaths((R�R�s,/usr/lib/python2.7/site-packages/yum/misc.pyt disk_usage�s  $((R ssha1((i((�RsRR�R�tos.patht cStringIORR�R�R�R&R�R>R;R�RR�RR/RRPR�RR�RLRNRKR�R%trpmUtils.miscutilsRRR�R�tgpgme.editutilR RFRYRRRZRHtctypeR R�R�RRR�RhR[R�R�RsRURRti18nRRRRR"R#R$R*R:R5R6R7R<R8R?RCRDRSRTRvRpR�R�R�R�R�R�R�R9R�R�R R!R$R+R/R:RGRKRYRZRdRfRqR}R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�(((s,/usr/lib/python2.7/site-packages/yum/misc.pyt<module>s�                                  $            BO   2  !1  (  # "     .  !   # 4