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/depsolve.pyc
� � v_c@srdZddlZddlZddlZddlZddlZddlm Z m Z ddl Z ddl m Z m Z ddlmZddlZddlmZddlmZddlTddlZddlZddlZejd ej�dd lmZdd lmZmZye d d �d ks;t!�Wnd�Z"d�Z nXiej#d6ej$ej#Bd6ej%d6ej%ej$Bd6ej$d6de&6Z'iZ(xe'D]Z)e)e(e'e)<q�Wdfd��YZ*dfd��YZ+dfd��YZ,dfd��YZ-de.fd��YZ/d e.fd!��YZ0d"e.fd#��YZ1d$e.fd%��YZ2dS(&s' Dependency resolution module for yum. i����N(tarchDifferencet canCoinstall(tuniquetversion_tuple_to_string(tTransactionMember(tListPackageSack(t PackageEVR(t*tignore(tproxy(t_t_rpm_ver_atleastiicGs*x#|D]}||kr|}qqW|S(N((txtargsty((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytmin1s  cGs*x#|D]}||kr|}qqW|S(N((R R R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytmax5s  tGTtGEtLTtLEtEQit_wrap_ayum_getPkgSackcBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.pkgSack because otherwise we take a real reference through the bound method and that is d00m (this applies to YumBase and TransactionInfo, hence why we have a separate class). cCst|�|_dS(N(tweakreftayum(tselfR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt__init__IscCs |jjS(N(RtpkgSack(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt__call__Ks(t__name__t __module__t__doc__RR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRDs t_wrap_ayum_installcBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.install because otherwise we take a real reference through the bound method and that is d00m (this applies to YumBase and TransactionInfo, hence why we have a separate class). cCst|�|_dS(N(RR(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRSscOs|jj||�S(N(Rtinstall(RR tkwargs((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRUs(RRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR Ns t_wrap_ayum_removecBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.remove because otherwise we take a real reference through the bound method and that is d00m (this applies to YumBase and TransactionInfo, hence why we have a separate class). cCst|�|_dS(N(RR(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR\scOs|jj||�S(N(Rtremove(RR R"((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR^s(RRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR#Ws t_wrap_ayum_updatecBs eZdZd�Zd�ZRS(s� This is a wrapper for calling YumBase.update because otherwise we take a real reference through the bound method and that is d00m (this applies to YumBase and TransactionInfo, hence why we have a separate class). cCst|�|_dS(N(RR(RR((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRescOs|jj||�S(N(Rtupdate(RR R"((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRgs(RRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR%`s tDepsolvecBsgeZdZd�Zd�Zed�Zed�Zd�Zd�Z d�Z d�Z d �Z d �Z d d d �Zd�Zd�Zed��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zeed�Zd�Zed��Z d�Z!d�Z"d �Z#d!�Z$d"�Z%d#�Z&e&Z'd%d$�Z)RS(&s#A class for resolving dependencies.cCsyd|_d|_d|_t|_tjd�|_tjd�|_ g|_ g|_ d|_ d|_ t|_dS(Ns yum.Depsolvesyum.verbose.Depsolve(tNonet_tst_tsInfot dsCallbacktFalsetuse_txmbr_in_callbacktloggingt getLoggertloggertverbose_loggertpathtloopstinstalledFileRequirestinstalledUnresolvedFileRequirest_missing_requires(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRms        cCs)tjtd�tjdd�|j�S(s.Sets up the transaction set before it is used.s5doTsSetup() will go away in a future version of Yum. t stackleveli(twarningstwarnR tErrorstYumFutureDeprecationWarningt_getTs(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt doTsSetup}scCs�|jdkrc|jdkrc| r_|jjdkr_t|�}|jj|jd|�ndS|jjs�t j t d��n|j |�|j �dS(s�setup all the transaction set storage items we'll need This can't happen in __init__ b/c we don't know our installroot yetNs4Setting up TransactionSets before config class is up(R*R(R)RRt setDatabasestrpmdbtconft installrootR:t YumBaseErrorR t _getTsInfot initActionTs(Rt remove_onlyt pkgSackCtor((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR<�s   cCs�|jdkr�|j�|_|r3d}d}nd}t|�}|jj|j||�|jj|j_t|�|j_ t |�|j_ t |�|j_ n|jS(s� remove_only param. says if we are going to do _only_ remove(s) in the transaction. If so we don't need to setup the remote repos. N(R*R(t_transactionDataFactoryRR>R?R@tinstallonlypkgsR tinstall_methodR%t update_methodR#t remove_method(RRERRF((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRC�s  cCs ||_dS(N(R*(Rtvalue((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _setTsInfo�scCs d|_dS(N(R(R*(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _delTsInfo�scCs|js|j�n|jS(N(R)RD(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _getActionTs�s  cCst|jjr5tjd�}tjd|jj�ntjj|jj�|_itj d6tj d6tj d6tj d6tj d6tjd6}ttd �r�tj|d <n|jjd �xP|jjD]B}||kr�|jj||�q�|jjtd �|�q�W|jjs9|jtjtj�nd }x|jjD]}||O}qLW|jj|�d S(s>Set up the transaction set that will be used for all the work.s%_install_langss%define _install_langs t noscriptst notriggerstnodocsttesttjustdbt repackagetRPMTRANS_FLAG_NOCONTEXTSt nocontextsis!Invalid tsflag in config file: %sN(R@toverride_install_langstrpmt expandMacrotrpmUtilst transactiontTransactionWrapperRAR)tRPMTRANS_FLAG_NOSCRIPTStRPMTRANS_FLAG_NOTRIGGERStRPMTRANS_FLAG_NODOCStRPMTRANS_FLAG_TESTtRPMTRANS_FLAG_JUSTDBtRPMTRANS_FLAG_REPACKAGEthasattrRVtsetFlagsttsflagst addTsFlagR0tcriticalR tdiskspacecheckt_add_prob_flagstRPMPROB_FILTER_DISKSPACEtRPMPROB_FILTER_DISKNODESttsInfotprobFilterFlagst setProbFilter(Rtold_install_langstts_flags_to_rpmtflagt probfilter((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRD�s2            cCsD|jjtjtd�|�t|jj|||f��}|S(s�Search the packageSacks for what provides the specified feature or file. :param name: a string specifying the file or feature to search for :param flags: flags related to the search :param version: the version to search for :return: a :class:`ListPackagaSack` containing the packages that match the arguments, and may be empty sSearching pkgSack for dep: %s(R1tlogt logginglevelstDEBUG_1R RRtsearchProvides(RtnametflagstversiontdefSack((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt whatProvides�s !cCsMt|jj�}|j|kr%tSx!|jD]}||kr/tSq/WtS(s�Return whether the given package object can be installed multiple times with different versions. For example, this would be true of kernels and kernel modules. :param po: the package object that this function will determine whether can be install multiple times :return: a boolean specifying whether *po* can be installed multiple times (tsetR@RHRxtTruetprovides_namesR,(Rtpotiopkgstprov((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytallowedMultipleInstalls�s  iic CsG|jr|jj�ni}|jjd kr>|j�n|r�x�|jD]�}|j�}|d krud}n|j�|j�||j�|j �f}|j �dkr�d}n|j �dkr�d}nd|||f<qNWnxQ|j j �D]@}|j jtjtd�|�|jd kr�|jdf|krNq�n|jj�} tjj| �r�|jj�} n|j|j�|jj�} |jdkr�|j|j�r�|j jtjtd�|j�d|_t|_q�n|j r |} n | | f} |jj!| | |j�|j jtj"td �|j|j�|jr?|j} | dkr�|j#r�d } n|jj$|j| �q?q�|jdkr�|j|jf|kr�q�n|jj%|jj&�|jr|j'rq�n|jj$|jd�n|j jtj"td �|j�q�q�Wd S(sxPopulate the transaction set. :param test: unused :param keepold: whether to keep old packages t0itiites Member: %stus%s converted to installsAdding Package %s in mode %stdsRemoving Package %sN(R�R�(R�((R+ttransactionPopulationttsR(RDtEtNtAtVtRtTypeRmt getMembersR1RtRutDEBUG_3R tts_statetpkgtupR�tlocalPkgtosR2texiststreturnHeaderFromPackagetdownloadHeadertreturnLocalHeaderR�tDEBUG_2t TS_INSTALLt output_stateR-t addInstallRvt downgradestpkgAddedtaddErasetidxt downgraded_by( RRStkeepoldtts_elemttetepochtpkginfotmodettxmbrtrpmfilethdrtcbkeyt dscb_ts_state((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt populateTs�sj     -           cCsO|js dSt|jd�r5|jj||�n|jj|j|�dS(sW Call the callback for processing requires, call the nicest one available. Nt procReqPo(R+RdR�tprocReqRx(RR�tniceformatneed((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _dscb_procReqEs  c Cs+g}|\}}}tjj|||�}|jjtjtd�||�|j||�yx|j j dkr�|j |||�\}} n|j |||�\}} | r�|j j||j|df�nWnDtjk r} |j j||jt| �f�d}d} nX|| |fS(s�processes a Requires dep from the resolveDeps functions, returns a tuple of (CheckDeps, missingdep, conflicts, errors) the last item is an array of error messagess%s requires: %st installedi����ii(R[t miscutilst formatRequireR1RtRuRvR R�trepotidt_requiringFromTransactiont_requiringFromInstalledtpo_with_problemstaddt _working_poR:tDepErrortstr( RR�t requirementt errormsgstneednameRyt needversionR�t CheckDepst missingdepR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _processReqPs "'" cCs|t|t|�fS(N(RyR(trntrftrv((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_prco_req_nfv2reqsscCs|j|d|d|d�S(Niii(R�(Rtreq((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _prco_req2reqwscCs�t|_t|jd�rR|jj||�}|dk rR|jj||�Sn|\}}}tjj|||�}t d�||fS(Ntformat_missing_requiress%s requires %s( R~R6RdR+R�R(R[R�R�R (RtreqPotreqTuptmsgR�t needflagsR�tui_req((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_err_missing_requireszs   c% s�d}d}|jj�jt�r.||fS�j\}}}} } �\} } } tjj| | | �}d#}d#}g}| | | f|jkr�|j j t j t d��|j| | | f}|g}n�|jjd| �r#|jjd| �}xX|D]}|j|j�qWn7|j j t j t d�|�|jj| | | �}x�|D]�}||_d|j}|j\}}}}}|j j t j t d�|�|jjd|d|d|d |d |�}|d#kr||jjkr|jjd|d|�}n|d#krS||jjkrS|jjd|�}n|d#kr�td �|jj|||||��r�d }q�n|d#k ra|}||j| | | f<|j j t j t d �|||�PqaqaW|j j t j t d�||�|d$kr|j j t j t d���|jj}d|j_|jd�d��}||j_t��fd�}||�s|jd�d��}||dt�s|j���}|j j t j t d���|j��|�Snd}n|d%kr]|j j t j t d���|jd�d��}t} |s�|j���}|j j t j t d��|�n| | tjj| �f}!xE|D]=}|j t!kr�|jj"d|!�r�t} Pq�t} q�q�W|r;| r;|j���}|j j t j t d��|�n| sT|j��|�Sd}n|d&kr�|j j t j t d��| �|j#d��}x|D]}|j$d|�q�Wd}n|d'kr|jd|d|d| d| d��}"|jj�jt�}|"r�|r�|dj t%krd|j j t j t d ��|dj&d�ny|j j t j t d!���xW|dj'D]H}#�t(|j)|#j*d��kr�t||j|#�|�dfSq�Wt}||fS|j j t j t d"�|�|j��|�S|d#kr�|| | d#f}$|j+d#kr_|j��|�S|j���}|j j t j |�d}d}|j|�n||fS((sbprocesses the dependency resolution for a dep where the requiring package is installedis3Needed Require has already been looked up, cheatingRxs4Needed Require is not a package name. Looking up: %ss%s.%s %s:%s-%ssPotential Provider: %starchR�tvertrelcSs|jS(N(t obsoleted_by(R ((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt<lambda>�sR�s!Mode is %s for provider of %s: %ssMode for pkg providing %s: %studs"Trying to update %s to resolve depR�t requiringPocstxm|D]e}|s%|j�jkr�\}}}|t|tjj|�f}||jjkrltSqqWtS(N( Rxt_rflagsR[R�tstringToVersionR�trequiresR~R,(ttxmbrstobsR�tntftvtcreq(R�R�(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_check_update_worked�s   R�s&No update paths found for %s. Failure!itods=No update paths found for %s. Failure due to requirement: %s!R�s+Update for %s. Doesn't fix requirement: %s!R�s/TSINFO: %s package requiring %s marked as eraseR�Rztreleases-TSINFO: Obsoleting %s with %s to resolve dep.s#TSINFO: Updating %s to resolve dep.s*Cannot find an update path for dep for: %sN(R�(R�(R�(R�R�(,RmtgetMembersWithStateR�tTS_REMOVE_STATESR[R�R�R(t cheaterlookupR1RtRuR�R R?tcontainst matchNaevrtappendR�t getProvidesR�tgetModeR@t exactarchlisttfiltert obsoletesR&R,R~R�R�R�R�tTS_INSTALL_STATESt checkPrcoR$tsetAsDept TS_OBSOLETEDR�t updated_bytmapR�t returnPrcoR(%RR�R�t errorlistt checkdepsR�RxR�R�R�R�R�R�R�R�tneedmodetneedpot providerst cheater_poR�R�tinst_potinst_strti_nti_ati_eti_vti_rtthismodetorigobsR�R�tfixedt req_lookupt newupdatestpkgtreqpkg((R�R�s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR��s�        !           %   %      !  !%  cCs�|jdkrtS|dkr(d}nt|�tjtjtjfkrjtj j |�\}}}n0t|�tj tj fkr�|\}}}n|j}|j d|||||ff�r�|jjtd�||�tStS(Nitprovidess"Quick matched %s to require for %s(t _last_reqR(R,ttypettypest StringTypetNoneTypet UnicodeTypeR[R�R�t TupleTypetListTypeR�R1tdebugR R~(RRxRyRztr_etr_vtr_rR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_quickWhatProvides8s  $ $c% Cs�|j\}}}}}|\} } } d} d} i}|j| | | �rX| | fS|j| | | �}x�|j�D]�}|jjd|�r�|jjtj t d�|�|j |�qzng}|j |�sz|j jd|j�}x�|D]�}t|j|jj�s�|jj|�rdt d�|}|jjtj |�|j |�q�q�|jj|�r�|j|jg�j|j�q�q�q�W|jjd|j�}xo|D]d}|j|�r�t|j|j� r�t d�|}|jjtj |�|j |�q�q�q�WqzqzWt|�dkrnd} |j||�}|j|�| | fSx�|j�D]�}|j\}}}}}|j jd|d|d |d |d |�}|dkr{|jjtj t d�|�||_| | fSq{Wg}x�|j�D]�}|jd|d|jd |jd|jd |j �}|j!|�x6|D].}||jkrkt"} ||_| | fSqkWqW|j�}t|�dkr�|d} n&|j#||d| �}!|!dd} |jjd| �r<d} d} |j||�}|j|�| | fS|jjd| jd| j�}"t|"�dkr�|jj$t d�| |f�|j j%| |"d�}|j&d|�d|"dj'kr�|"dj'j(|_(n d|_(t"} | |_n�|jj$t d�| |�t)j*| t+| �| �}#|j,| d|#�}$x_|$D]W}|j&d|�d|_(|j|_|j|krQt-|j j.||j�qQqQW|$s�d} d} |j||�}|j|�nd} | | fS(skprocesses the dependency resolution for a dep where requiring package is in the transaction setiR�sB%s is in providing packages but it is already installed, removing.Rxs8Potential resolving package %s has newer instance in ts.s<Potential resolving package %s has newer instance installed.iR�R�R�R�R�R�s#%s already in ts, skipping this oneR�RzR�s#TSINFO: Marking %s as update for %streasontdeps$TSINFO: Marking %s as install for %st provides_for(R�R�(/R�RR|treturnPackagesR?R�R1RtRuR�R t delPackageR�RmR�RxRR�R�tverGTtverLTt setdefaultR�t searchNevratlenR�R�RtreturnNewestByNameR&R�RzR�textendR~t_compare_providersRt addUpdateR�t yumdb_infoRtmisctstring_to_prco_tupleR�R!R�R$(%RR�R�R�RxR�R�RzR�R�R�R�R�R�tupgradedtprovSackR ttspkgsttspkgR�tdbpkgstdbpkgR�taR�R�trtpkgmodetresultsttresultsR�tpkgstbestt pkgresultstinsttreqtupleR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�Js�    ) %   -         !      !cCsO|js dSt|jd�r5|jj||�n|jj|j|�dS(sW Call the callback for processing requires, call the nicest one available. NtprocConflictPo(R+RdR<t procConflictRx(RR�R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_dscb_procConflict�s  cCs*t}g}|\}}}|j\} } } } } tjj|||�}|j||�t|j�}|tj @r�|j d|j �|jj |jt �}t|j�|kr'|r'||fSn]|tj@r'|j d| �|jj |jt �}t|j�|kr'|r'||fSn|j d|j �|jj |jt �}t|j�|krw|rw||fS|j d| �|jj |jt �}t|j�|kr�|r�||fSd| t|�f}|j|�|jjtj|�t}|jj|||df�||fS(s6processes a Conflict dep from the resolveDeps() methodRxs%s conflicts with %si����(R~R�R[R�R�R>R$RmRYt RPMSENSE_LESSR&RxR�R�tRPMSENSE_GREATERR�R�R1RtRuRvR,R�R�(RR�tconflicttconflicting_poR�R�R�RyR�RxR�R�R�R�R�tlengthR�R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_processConflict�s>       cCs7x0|jD]%}|jr |jj|j�q q WdS(N(RmtisDepR$R�(RR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_undoDepInstalls&s cCs�d}ddl}ddl}|j|�}|j|j�}|j�dGH|jj|�}|j�|j dd�|j d�|S(s Call :func:`resolveDeps`, and profile the call using the hotshot profiler. :return: a tuple containing the result code and a list of result strings. This is simply the return value of :func:`resolveDeps` being passed up. sanaconda.prof.0i����Nsdone running depcheckttimetcallsi( thotshott hotshot.statstProfiletruncallt resolveDepstclosetstatstloadt strip_dirst sort_statst print_stats(RtfnRItproftrcRO((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytprof_resolveDeps,s   cCsddl}ddl}|j�}|j|j�}|jd�dGH|jd�}|j�|jd�|j d�|S(s Call :func:`resolveDeps`, and profile the call using the cprof profiler. :return: a tuple containing the result code and a list of result strings. This is simply the return value of :func:`resolveDeps` being passed up. i����Ntyumprofsdone running depcheckRGi( tcProfiletpstatsRKRLRMt dump_statstStatsRQRRRS(RRYRZRURVtp((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytcprof_resolveDeps@s     cCs�t|j�s"dtd�gfSt�|_d|_d|_|jjdt �t }|}|}d}g}|j r�|j j �nd}x#t r�||j jp�dkr�dtd�gt|�fS|d7}t }x[|r;i|_|j r |j j�n|j|�\}} } } || O}|| O}q�Wd|_|r�t }xI|j�D];\} } |j| | �\}} }||O}||7}q^W|r�|j r�|j j�n|jjtjtd��q�q�nd|_|r�t }xG|j�D]9}|j|�\}}||O}||7}|rPqqWt rm|j�rmt }t }d|_qmn|r�|j r�|j j�n|jjtjtd��q�q�nPq�Wxo|jj�D]^}|j|j�r�|j dkr�|jjtj!td �|j�d |_ t"|_#q�q�W|j rn|j j$sM|j j%�qn| rn| rn|j j%�qnn|jjtjtd ��t |j_&t|�dkr^t|�}t�}x�|jD]�\} }}| |f|kr�q�n|j'| |f�|jjtj(d | | j)f�|j*d d�}|jjtj(d|�q�Wd|fSt|j�s�dtd�gfSdtd�gfS(s1Resolve dependencies for the packages in the current trasaction set. :param full_check: whether to also check removes and installs, as well as dependencies :param skipping_broken: if this is true, a message saying that dependency solving has finished successfully will not be output. This is useful since if there are broken packages that are being skipped, :func:`resolveDeps` will need to be called multiple times before dependency solving is completely finished isSuccess - empty transactionthardi����isDepsolving loop limit reached.sRestarting LoopR�s%s converted to installR�sDependency Process endings.SKIPBROKEN: %s from %s has depsolving problemss s --> sSKIPBROKEN: --> %sisSuccess - deps resolvedN(+R$RmR R}R�R(R�Rt resetResolvedR,R~R+tstartR@tdepsolve_loop_limitRR�ttscheckt_resolveRequirest_checkFileRequiresR�t restartLoopR1RtRuRvt_checkConflictsRDt_checkObsoletesR�R�R�R�R�R�R�t skip_brokentendtchangedR�tDEBUG_4trepoidtreplace(Rt full_checktskipping_brokenR�t CheckRemovest CheckInstallsR�terrorstdepsolve_loop_countt checkinstallst checkremovestmissingR�RtcheckdepR�RAR�tdonetwpoterr((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRMTs�                              c Csit}t}t}t}x>|jj�D]-}|jr�|jr�|j}|jr[d}n|dkry|jryd}n|dkr�|jtkr�d}q�|j s�d}q�n|jj |j |�n|j j tjtd�|f�|j r|jr|jdd|_n |j|_|jtk|jjdkkr]|j|�}t}n|j|�}t}t} x�|D]�\} } |jr�|j| | �} |j j tj| �|j| �|jj| |j|df�d } qn|j| | �\} }}|| O}||7}| |O} qW| sK|jj |�n|| O}q(W||||fS( NR�R�R3toR�sChecking deps for %sii����i(!R,RmtgetUnresolvedMembersR+R�R�t reinstallR�t TS_OBSOLETINGtupdatesR�R�R1RtRuR�R t relatedtoR�R�R�tstateR(t _checkInstallR~t _checkRemoveR�R�R�R�R�R�tmarkAsResolved(RRst any_missingR�RrRqR�R�t thisneedstmissing_in_pkgR�RR�RxRwR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRd�sX         !      cCs�idd6dd6dd6dd6d d 6d d6}|j|dd �}d }|d jd�r�|d jd�s�|d jd�r�d }n||fS(s8 Get a sort key for a package requires from most "narrow" to least, this tries to ensure that if we have two reqs like "libfoo = 1.2.3-4" and "foo-api" (which is also provided by libxyz-foo) that we'll get just libfoo. There are other similar cases this "handles".iRiRiRiRiRici itlibs()s ()(64bit)N(R(tgett startswithtendswith(R�tmappert flagscoret namescore((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _sort_req_key s0 & c Cs�|jjd�}g}|jjsQx*|jD]}|j|jd��q.Wnt|�}g}x&t|d|j�D]}|dj d�r�qyn||kr�qyn|j j t j td�||�|jj|�}| r |jjd|� r |j|j|j|�f�qynxe|D]]}|j|jkrEq'nx<|jjd|jd t�D]} | j|jd t�qdWq'WqyW|S( NR�tstrong_requirestkeyisrpmlib(s%looking for %s as a requirement of %sR R�t output_statestrelonly(R�R�R@trecheck_installed_requiresR�R&R}tsortedR�R�R1RtRuR�R RmR�t inPrcoRangeR�R�RxR�R�R�R�R~( RR�t txmbr_reqstoldreqstoldpotretR�tprovsR�tmember((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�*s0   " "cCsA|j}|jd�}i}x6|j|jD]$}x|jD]}d||<q?Wq/Wg}x�|D]�}|djd�r�qdn||kr�qdnx�|jj|�j�D]�\} } |j j rW|j rW|j t krW|j} | rt| d�r| j|j| �n.| r@t| d�r@| j|j| | �n|jj|j�gS|j jr�|jr�|j t kr�|j} | r�t| d�r�| j| | �n.| r�t| d�r�| j|j| | �n|jj|j�gS|j jrZ|j t krZ|j} | rCt| d�rC| j|j| | �n|jj|j�gSx�| D]�} t} x-|jD]"}|jd| �rwt} PqwqwW| r�qanx-|jD]"}|jd| �r�t} Pq�q�W| r�qan| \}}}|jj|||�sa|j| |j|||�f�qaqaWq�WqdW|S(NR iisrpmlib(trepoPkgRemoveReqt removeReqtgroupRemoveReq(R�R�R�R�R R�Rmt getRequirest iteritemsR@trepopkgsremove_leaf_onlytrepopkgR�tTS_ERASER+RdR�R�R$R�tgroupremove_leaf_onlytgroupsR�tremove_leaf_onlyR,R�R~R�R�R�(RR�R�R�t newpoprovstnewpoR]R�R�R thitstcbthittfoundR�R�R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�Rsp   %     1c Cs�t�}t�}i}g}|jdkrQ|jj�\|_|_|_ng}x||jj�D]k\}}|jj |dt �r�|j |�qg|j |�x'|D]}|j |g�j |�q�WqgWx|D]}|j|=q�W||j8}x|jj dt�D]} g}x�| jjD]�\} } } | jd�r-|j | �| |jkr�t} x6| jD]+}|jd| ddf�rwt} PqwqwW| r�q-q�n| |kr�|j| �n|j| �|j | g�j | jj�q-q-W||j| jj<qWg}x�|jD]u}g}x@|j|D]1}|jj |dt �riqEn|j |�qEW|s�|j |�q+n||j|<q+Wx|D]}|j|=q�W|j}x�|D]�}||jkr�q�n|jj|�}|r7|j |g�jg|D]}|j^q�q�n|jj|�}|r�|j |g�jg|D]}|j^qh�q�n|tjj|�kr�tjj|�}|jj|�}|r�|j |g�jg|D]}|j^q��q�q�nxh||D]\}|jj |t�}|r:|dj}n|j|�}|j ||ddff�q Wq�W|jj |j|j|j|�|S(NR�t/R�it(NNN(!R}R4R(R?tfileRequiresDataR5tinstalledFileProvidersR�R*R�R�R�R&R"R�R�R�R�R,R�R�R~R�R�RmtgetOldProvidesR&tgetNewProvidesR�R2trealpathtgetInstalledPackageObjectttransactionCacheFileRequires(Rt fileRequirest nfileRequirest reverselookupR�ttodelR�tfilestfilenameR�RxRrtevrtalready_brokenR�tfnamet niFP_fnametiFPtoprovR�tnprovR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRe�s�  $  !      &    /// $c Cs1g}g}x|jj�D]�}|jj|jdt�rCqn|jd�}|s^qn|j|�x�|D]�}|\}}}x|jj|||�D]e} | jd|jdkr�| jd|jdkr�q�n|j||j |||�| f�q�WqrWqWx�|jjdt �D]�} | j }t } x�| j jd�D]�}| st|j| j �t } n|\}}}x|jj|||�D]e} | jd|jdkr�| jd|jdkr�q�n|j||j |||�| f�q�WqOWq'Wtd�r|S|jj|�|S(NR�t conflictsiiii (ii i(R?treturnConflictPackagesRmR�R�R�R�R�R�R�R�R�R,R~R�R t transactionCacheConflictPackages( RR�tcpkgsR�R�RAR3R�R�RBR�Ry((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyRgsB  4  4 csNg}t}�fd�}x�jj�D]�}�jj|jdt�rRq+n|jd�}|smq+n|j|�x�|D]�\}}}x��jj d|�D]n} | j j |g�s�q�n|j | j g�r�q�nt d�} �j j| | |�|| �t}q�Wq�Wq+Wx�jjddt�D]�} t} x�| j jD]�} | sw|j| j �t} nx��jj d| �D]�} | jtkr�q�n| j | j kr�q�n| j j | j g�s�q�n| j j | j g�r�q�nt d�} �j j| | | �|| �t}q�WqRWq9W�jj|�|S(NcsY�jj|j��jj|j��jj|j��jpEij|jd�dS(N( RmR$R�RRR�tupR4tpopR((totxmbr(R(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_do_obs?sR�R�Rxs.Removing %s due to obsoletes from installed %ss$Removing %s due to obsoletes from %s(R,R?treturnObsoletePackagesRmR�R�R�R�R�R�R�t obsoletedByR R1twarningR~R(R�tobsoletes_namesR�t transactionCacheObsoletePackages(RtopkgsR�R�R�R�tobs_nameR�R�R�R�R�Rytobs_n((Rs0/usr/lib/python2.7/site-packages/yum/depsolve.pyRh:sR       cCsl|jjd|�}x!|D]}|jtkrtSqWt|�dkrOtS|jjd|�shtStS(s�Return whether the given package in installed. :param pkgname: the name of the package :return: whether the package in installed Rxi( RmR�R�R�R~R$R,R?R�(RtpkgnametlstR�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pytisPackageInstalledus c sm�jjtjtd�t|��dd�}d�}d�}�fd�}d�}i} xI|D]A} | j| kr�| | jj| jkr�qin| | | j<qiW| j�}i} t �} x|D]} d| | <q�W�j j d d | d |�x�| j �D]�} �j jd | j�} | r t| �d }|j| �rc| | cd7<q�|j| �r�| | cd7<q�|j| �r�| | cd8<q�q q W| j �}i}x,|D]$}x�|D]�}||kr�q�n|j|kr�jj|j�d ||j<n||j sG|j||jd� rZ| |cd8<nt}|j|g�r�t}| |cd8<�jjtjtd�||f�n|r�|j�jjf}n�jjf}xw|D]o}||||�}|s q�n�jjtjtd||||f��||kr�| |cd7<q�q�Wq�W| |cd|jjd7<�jjtjtd||jjf��|||�r��jjtjtd||f��| |cd7<n|||�r3�jjtjtd||f��| j|�n�j|j�r��jjtjtd|j|f��| |cd7<n|r�||j|j�}|dkr��jjtjtd|||f��| |c|d7<q�q�q�W|d%k r%t | j��}i�xS|D]K}| ||kr6qn|||�}|d%kr[i�Pn|�|<qWt!��dkr%�jjtjtd�t|��t�d�fd��}xct"|�D]R}�|�|d kr�Pn�jjtjtd�|�| |cd7<q�Wq%nt | j��}i}x.|D]&}| ||kr`qDnd||<qDWt!|�dkrux9|D]1}t#|�}�j$|�}t!|�||<q�Wt%|j��}�jjtjtd �|�x�|D]y}|||kr>�jjtjtd�|�| |cd7<q�||}�jjtjtd!�||f�q�Wnt | j��}xQ|D]I}| ||kr�q�n| |cd7<| |ct!|j�d 7<q�Wt | j��t%| j��d}x| D]}| |c|8<qWt| j&�dd"�d#t�}�jjtjtd$t|���|S(&sotake the list of pkgs and score them based on the requesting package return a dictionary of po=scores"Running compare_providers() for %sicSs`tt|�t|��}x5t|�D]'}||||kr(t||�Sq(Wt||�S(N(RR$trangeR(R Rtminlentnumtoff((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_common_prefix_len�s cSs6t|d�stSt|d�s&tS|j|jkS(Nt sourcerpm(RdR,R�(R R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_common_sourcerpm�s cSs>|dkrtSx'|jD]}|jd|�rtSqWtS(NR (R(R,R�R�R~(R Rtydep((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt _conflict_req�s  cs�t||j�}�jjrQ|dkrQ�jjtjtd�|�|Snt||j�}|dkr�||kr��jjtjtd�|�|S||kr�dS|S(Nisbetter arch in po %s( RR�tmultilibR1RtRuRlR R((R Rtreq_compare_archtx_distty_dist(R(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_compare_arch_distance�s   c Ss�d}xx|jD]m}|\}}\}}}||kr@qn|dkrRqn|dk rbdS|pkd||pwdf}qW|S(s) This converts a package into a specific version tuple for the required provide. The provide _must_ be '=' and epoch=None and release=None == '0'. If there is 0 or 2+ matches, return None. If the req does not == the provide name, return None. RR�N(R(R ( R tprovnameR�R�R�R�R�R�R3((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt_pkg2prov_version�s   itcompare_providerstproviders_dicttreqpoRxi����ii�iis%s obsoletes %ss-archdist compared %s to %s on %s Winner: %sidi s'compare_providers_priority for %s is %sscommon sourcerpm %s and %sisconflict req %s and %ss#base package %s is installed for %ss%common prefix of %s between %s and %ssprovides vercmp: %sR�cst�|�S(N(R(R (t prov_depsolve(s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�fss Winner: %ssrequires minimal: %ds Loser(with %d): %scSs|d|dfS(Nii((R ((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR��streversesBest Order: %sN('R1RtRuRlR R�R�R�tvaluesR}tpluginstruntkeysR?R#RxR�R!tverEQR RR%R,R�R~R�tbestarchtcompare_providers_priorityR�R�tbase_package_nameR(RR$treversedRR�Rtitems( RR7R�R�R�R�R�R�R�tunique_nevra_pkgsR R9tpenalizet rpmdbpkgstnewesttlposR�tnextpot obsoletedtarchestthisarchtrestcpltbestnumR�twinnert rec_depsolvet fake_txmbrtreqsR�tshiftt bestorder((R�Rs0/usr/lib/python2.7/site-packages/yum/depsolve.pyR'�s            #)              !& N(*RRRRR=R,R<RCRMRNRORDR|R�R�R�R�t staticmethodR�R�R�R�RR�R>RDRFRWR^R~RMRdR�R�R�ReRgRhR�t_isPackageInstalledR(R'(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR'jsH        &  F #  �  � )   { > ( M s ( ; tDepCheckcBs)eZdZd�Zd�Zd�ZRS(s-Object that :class:`YumDepsolver` uses to see what things are needed to close the transaction set. The attributes requires and conflicts are lists of requires and conflicts in the current transaction set. Each item in the lists is a :class:`Requires` or :class:`Conflicts` object. cCsg|_g|_dS(N(R�R�(R((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s cCs#t||�}|jj|�dS(sCreate and add a :class:`Requires` object to the list of requires. :param po: the package object involved in the requires :param req_tuple_list: a list of required by *po* that are un-closed in the transaction set N(tRequiresR�R�(RR�treq_tuple_listtreqobj((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt addRequires�s cCs#t||�}|jj|�dS(sCreate and add a :class:`Conflicts` object to the list of conflicts. :param conflict_po_list: a list of conflicting package objects :param conflict_item: what the conflict between the members of *conflict_po_list is. N(t ConflictsR�R�(Rtconflict_po_listt conflict_itemtconfobj((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt addConflicts�s(RRRRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR �s  R cBseZdZd�ZRS(sTA pure data class for holding a package and the list of things it requires. cCs||_||_dS(N(R R�(RR R�((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s (RRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR �sRcBseZdZd�ZRS(s]A pure data class for holding a list packages and what the conflict between them is. cCs||_||_dS(N(tpkglistRA(RRRA((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s (RRRR(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyR�s(3Rtos.pathR�RR.trpmUtils.transactionR[trpmUtils.miscutilst rpmUtils.archRRR*RRttransactioninfoRRYt packageSackRtpackagesRt constantsRuR:R8t simplefilterR;RR tyumR R RtAssertionErrorRR@tRPMSENSE_EQUALR?R(RyR�R�RR R#R%tobjectR'R R R(((s0/usr/lib/python2.7/site-packages/yum/depsolve.pyt<module>s^                      ������L"