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/lib2to3
Viewing File: /usr/lib64/python2.7/lib2to3/pytree.pyc
� {fc@sdZdZddlZddlZddlmZdZiad�Zdefd��YZ d e fd ��YZ d e fd ��YZ d �Z defd��YZ de fd��YZde fd��YZde fd��YZde fd��YZd�ZdS(s� Python parse tree definitions. This is a very concrete parse tree; we need to keep every token and even the comments and whitespace between tokens. There's also a pattern matching implementation here. s#Guido van Rossum <guido@python.org>i����N(tStringIOi���cCshtsXddlm}x?|jj�D]+\}}t|�tkr&|t|<q&q&Wntj||�S(Ni(tpython_symbols(t _type_reprstpygramRt__dict__titemsttypetintt setdefault(ttype_numRtnametval((s&/usr/lib64/python2.7/lib2to3/pytree.pyt type_reprs tBasecBs�eZdZdZdZdZeZeZ d�Z d�Z dZ d�Z d�Zd�Zd�Zd�Zd�Zd �Zd �Zd �Zd �Zd �Zed��Zed��Zd�Zd�Zd�Zejdkr�d�Z nRS(s� Abstract base class for Node and Leaf. This provides some default functionality and boilerplate using the template pattern. A node may be a subnode of at most one parent. cOs%|tk std��tj|�S(s7Constructor that prevents Base from being instantiated.sCannot instantiate Base(R tAssertionErrortobjectt__new__(tclstargstkwds((s&/usr/lib64/python2.7/lib2to3/pytree.pyR2scCs#|j|jk rtS|j|�S(sW Compare two nodes for equality. This calls the method _eq(). (t __class__tNotImplementedt_eq(tselftother((s&/usr/lib64/python2.7/lib2to3/pytree.pyt__eq__7scCs$|j|jk rtS|j|� S(sY Compare two nodes for inequality. This calls the method _eq(). (RRR(RR((s&/usr/lib64/python2.7/lib2to3/pytree.pyt__ne__CscCs t�dS(s_ Compare two nodes for equality. This is called by __eq__ and __ne__. It is only called if the two nodes have the same type. This must be implemented by the concrete subclass. Nodes should be considered equal if they have the same structure, ignoring the prefix string and other context information. N(tNotImplementedError(RR((s&/usr/lib64/python2.7/lib2to3/pytree.pyRMs cCs t�dS(sr Return a cloned (deep) copy of self. This must be implemented by the concrete subclass. N(R(R((s&/usr/lib64/python2.7/lib2to3/pytree.pytcloneXscCs t�dS(sx Return a post-order iterator for the tree. This must be implemented by the concrete subclass. N(R(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt post_order`scCs t�dS(sw Return a pre-order iterator for the tree. This must be implemented by the concrete subclass. N(R(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt pre_orderhscCs#tjdtdd�||_dS(sv Set the prefix for the node (see Leaf class). DEPRECATED; use the prefix property directly. s3set_prefix() is deprecated; use the prefix propertyt stackleveliN(twarningstwarntDeprecationWarningtprefix(RR#((s&/usr/lib64/python2.7/lib2to3/pytree.pyt set_prefixps  cCstjdtdd�|jS(sy Return the prefix for the node (see Leaf class). DEPRECATED; use the prefix property directly. s3get_prefix() is deprecated; use the prefix propertyRi(R R!R"R#(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt get_prefixzs  cCs2|jdk s!tt|���|dk s3t�t|t�sN|g}ng}t}xt|jjD]f}||kr�| s�t|jj||f��|dk r�|j|�nt }qg|j |�qgW|s�t|j||f��|jj �||j_x|D]}|j|_qWd|_dS(s/Replace this node with a new one in the parent.N( tparenttNoneRtstrt isinstancetlisttFalsetchildrentextendtTruetappendtchanged(Rtnewt l_childrentfoundtchtx((s&/usr/lib64/python2.7/lib2to3/pytree.pytreplace�s&!  "     cCs=|}x-t|t�s5|js%dS|jd}q W|jS(s9Return the line number which generated the invocant node.Ni(R)tLeafR,tlineno(Rtnode((s&/usr/lib64/python2.7/lib2to3/pytree.pyt get_lineno�s  cCs&|jr|jj�nt|_dS(N(R&R0R.t was_changed(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyR0�s cCsf|jrbxVt|jj�D]?\}}||kr|jj�|jj|=d|_|SqWndS(s� Remove the node from the tree. Returns the position of the node in its parent's children before it was removed. N(R&t enumerateR,R0R'(RtiR9((s&/usr/lib64/python2.7/lib2to3/pytree.pytremove�s     cCst|jdkrdSxZt|jj�D]F\}}||kr&y|jj|dSWqltk rhdSXq&q&WdS(s� The node immediately following the invocant in their parent's children list. If the invocant does not have a next sibling, it is None iN(R&R'R<R,t IndexError(RR=tchild((s&/usr/lib64/python2.7/lib2to3/pytree.pyt next_sibling�s  cCsh|jdkrdSxNt|jj�D]:\}}||kr&|dkrNdS|jj|dSq&WdS(s� The node immediately preceding the invocant in their parent's children list. If the invocant does not have a previous sibling, it is None. iiN(R&R'R<R,(RR=R@((s&/usr/lib64/python2.7/lib2to3/pytree.pyt prev_sibling�s  ccs4x-|jD]"}x|j�D] }|VqWq WdS(N(R,tleaves(RR@R5((s&/usr/lib64/python2.7/lib2to3/pytree.pyRC�scCs$|jdkrdSd|jj�S(Nii(R&R'tdepth(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyRD�scCs |j}|dkrdS|jS(s� Return the string immediately following the invocant node. This is effectively equivalent to node.next_sibling.prefix uN(RAR'R#(Rtnext_sib((s&/usr/lib64/python2.7/lib2to3/pytree.pyt get_suffix�s  iicCst|�jd�S(Ntascii(tunicodetencode(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt__str__�sN((ii(!t__name__t __module__t__doc__R'RR&R,R+R;t was_checkedRRt__hash__RRRRRR$R%R6R:R0R>tpropertyRARBRCRDRFtsyst version_infoRJ(((s&/usr/lib64/python2.7/lib2to3/pytree.pyR s6            tNodecBs�eZdZdddd�Zd�Zd�ZejdkrHeZ nd�Z d�Z d�Z d �Z d �Zd �Zeee�Zd �Zd �Zd�ZRS(s+Concrete implementation for interior nodes.cCs�|dkst|��||_t|�|_x;|jD]0}|jdksatt|���||_q:W|dk r�||_n|r�||_n d|_dS(s� Initializer. Takes a type constant (a symbol number >= 256), a sequence of child nodes, and an optional context keyword argument. As a side effect, the parent pointers of the children are updated. iN( RRR*R,R&R'treprR#tfixers_applied(RRR,tcontextR#RUR4((s&/usr/lib64/python2.7/lib2to3/pytree.pyt__init__�s  !    cCs#d|jjt|j�|jfS(s)Return a canonical string representation.s %s(%s, %r)(RRKR RR,(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt__repr__ s  cCsdjtt|j��S(sk Return a pretty string representation. This reproduces the input source exactly. u(tjointmapRHR,(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt __unicode__siicCs"|j|jf|j|jfkS(sCompare two nodes for equality.(RR,(RR((s&/usr/lib64/python2.7/lib2to3/pytree.pyRscCs5t|jg|jD]}|j�^qd|j�S(s$Return a cloned (deep) copy of self.RU(RSRR,RRU(RR4((s&/usr/lib64/python2.7/lib2to3/pytree.pyR!s+ccs9x-|jD]"}x|j�D] }|VqWq W|VdS(s*Return a post-order iterator for the tree.N(R,R(RR@R9((s&/usr/lib64/python2.7/lib2to3/pytree.pyR&s ccs9|Vx-|jD]"}x|j�D] }|Vq"WqWdS(s)Return a pre-order iterator for the tree.N(R,R(RR@R9((s&/usr/lib64/python2.7/lib2to3/pytree.pyR-scCs|js dS|jdjS(sO The whitespace and comments preceding this node in the input. ti(R,R#(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyt_prefix_getter4s cCs |jr||jd_ndS(Ni(R,R#(RR#((s&/usr/lib64/python2.7/lib2to3/pytree.pyt_prefix_setter<s cCs4||_d|j|_||j|<|j�dS(s� Equivalent to 'node.children[i] = child'. This method also sets the child's parent attribute appropriately. N(R&R'R,R0(RR=R@((s&/usr/lib64/python2.7/lib2to3/pytree.pyt set_childBs  cCs*||_|jj||�|j�dS(s� Equivalent to 'node.children.insert(i, child)'. This method also sets the child's parent attribute appropriately. N(R&R,tinsertR0(RR=R@((s&/usr/lib64/python2.7/lib2to3/pytree.pyt insert_childLs cCs'||_|jj|�|j�dS(s� Equivalent to 'node.children.append(child)'. This method also sets the child's parent attribute appropriately. N(R&R,R/R0(RR@((s&/usr/lib64/python2.7/lib2to3/pytree.pyt append_childUs N(ii(RKRLRMR'RWRXR[RQRRRJRRRRR]R^RPR#R_RaRb(((s&/usr/lib64/python2.7/lib2to3/pytree.pyRS�s$           R7cBs�eZdZdZdZdZddgd�Zd�Zd�Z e j dkrZe Z nd�Z d�Zd �Zd �Zd �Zd �Zd �Zeee�ZRS(s'Concrete implementation for leaf nodes.R\icCs�d|kodkns(t|��|dk rR|\|_\|_|_n||_||_|dk r|||_n||_dS(s� Initializer. Takes a type constant (a token number < 256), a string value, and an optional context keyword argument. iiN(RR't_prefixR8tcolumnRtvalueRU(RRReRVR#RU((s&/usr/lib64/python2.7/lib2to3/pytree.pyRWhs (     cCsd|jj|j|jfS(s)Return a canonical string representation.s %s(%r, %r)(RRKRRe(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyRX{s cCs|jt|j�S(sk Return a pretty string representation. This reproduces the input source exactly. (R#RHRe(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyR[�sicCs"|j|jf|j|jfkS(sCompare two nodes for equality.(RRe(RR((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�scCs4t|j|j|j|j|jffd|j�S(s$Return a cloned (deep) copy of self.RU(R7RReR#R8RdRU(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�sccs |VdS(N((R((s&/usr/lib64/python2.7/lib2to3/pytree.pyRC�sccs |VdS(s*Return a post-order iterator for the tree.N((R((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�sccs |VdS(s)Return a pre-order iterator for the tree.N((R((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�scCs|jS(sP The whitespace and comments preceding this token in the input. (Rc(R((s&/usr/lib64/python2.7/lib2to3/pytree.pyR]�scCs|j�||_dS(N(R0Rc(RR#((s&/usr/lib64/python2.7/lib2to3/pytree.pyR^�s N(ii(RKRLRMRcR8RdR'RWRXR[RQRRRJRRRCRRR]R^RPR#(((s&/usr/lib64/python2.7/lib2to3/pytree.pyR7_s&           cCsk|\}}}}|s'||jkrTt|�dkrA|dSt||d|�St||d|�SdS(s� Convert raw node information to a Node or Leaf instance. This is passed to the parser driver which calls it whenever a reduction of a grammar rule produces a new complete node, so that the tree is build strictly bottom-up. iiRVN(t number2symboltlenRSR7(tgrtraw_nodeRReRVR,((s&/usr/lib64/python2.7/lib2to3/pytree.pytconvert�s t BasePatterncBs\eZdZdZdZdZd�Zd�Zd�Z dd�Z dd�Z d�Z RS(s� A pattern is a tree matching pattern. It looks for a specific node type (token or symbol), and optionally for a specific content. This is an abstract base class. There are three concrete subclasses: - LeafPattern matches a single leaf node; - NodePattern matches a single node (usually non-leaf); - WildcardPattern matches a sequence of nodes of variable length. cOs%|tk std��tj|�S(s>Constructor that prevents BasePattern from being instantiated.sCannot instantiate BasePattern(RkRRR(RRR((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�scCsht|j�|j|jg}x!|rA|ddkrA|d=q!Wd|jjdjtt |��fS(Ni����s%s(%s)s, ( R RtcontentR R'RRKRYRZRT(RR((s&/usr/lib64/python2.7/lib2to3/pytree.pyRX�s cCs|S(s� A subclass can define this as a hook for optimizations. Returns either self or another node with the same effect. ((R((s&/usr/lib64/python2.7/lib2to3/pytree.pytoptimize�scCs�|jdk r%|j|jkr%tS|jdk r~d}|dk rOi}n|j||�setS|r~|j|�q~n|dk r�|jr�|||j<ntS(s# Does this pattern exactly match a node? Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. Default implementation for non-wildcard patterns. N(RR'R+Rlt _submatchtupdateR R.(RR9tresultstr((s&/usr/lib64/python2.7/lib2to3/pytree.pytmatch�s !  cCs*t|�dkrtS|j|d|�S(s� Does this pattern exactly match a sequence of nodes? Default implementation for non-wildcard patterns. ii(RgR+Rr(RtnodesRp((s&/usr/lib64/python2.7/lib2to3/pytree.pyt match_seqsccs4i}|r0|j|d|�r0d|fVndS(s} Generator yielding all matches for this pattern. Default implementation for non-wildcard patterns. iiN(Rr(RRsRq((s&/usr/lib64/python2.7/lib2to3/pytree.pytgenerate_matches sN( RKRLRMR'RRlR RRXRmRrRtRu(((s&/usr/lib64/python2.7/lib2to3/pytree.pyRk�s     t LeafPatterncBs2eZdddd�Zdd�Zdd�ZRS(cCs�|dk r7d|ko#dkns7t|��n|dk rgt|t�sgtt|���n||_||_||_dS(sp Initializer. Takes optional type, content, and name. The type, if given must be a token type (< 256). If not given, this matches any *leaf* node; the content may still be required. The content, if given, must be a string. If a name is given, the matching node is stored in the results dict under that key. iiN(R'RR)t basestringRTRRlR (RRRlR ((s&/usr/lib64/python2.7/lib2to3/pytree.pyRWs + $  cCs&t|t�stStj|||�S(s*Override match() to insist on a leaf node.(R)R7R+RkRr(RR9Rp((s&/usr/lib64/python2.7/lib2to3/pytree.pyRr,scCs|j|jkS(s� Match the pattern's content to the node's children. This assumes the node type matches and self.content is not None. Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. When returning False, the results dict may still be updated. (RlRe(RR9Rp((s&/usr/lib64/python2.7/lib2to3/pytree.pyRn2s N(RKRLR'RWRrRn(((s&/usr/lib64/python2.7/lib2to3/pytree.pyRvs t NodePatterncBs,eZeZdddd�Zdd�ZRS(cCs�|dk r'|dks't|��n|dk r�t|t� sUtt|���t|�}xYt|�D]H\}}t|t�s�t||f��t|t�rnt |_ qnqnWn||_ ||_ ||_ dS(sd Initializer. Takes optional type, content, and name. The type, if given, must be a symbol type (>= 256). If the type is None this matches *any* single node (leaf or not), except if content is not None, in which it only matches non-leaf nodes that also match the content pattern. The content, if not None, must be a sequence of Patterns that must match the node's children exactly. If the content is given, the type must not be None. If a name is given, the matching node is stored in the results dict under that key. iN(R'RR)RwRTR*R<RktWildcardPatternR.t wildcardsRRlR (RRRlR R=titem((s&/usr/lib64/python2.7/lib2to3/pytree.pyRWFs  " !  cCs�|jrhxXt|j|j�D]A\}}|t|j�kr|dk r\|j|�ntSqWtSt|j�t|j�kr�tSx9t |j|j�D]"\}}|j ||�s�tSq�WtS(s� Match the pattern's content to the node's children. This assumes the node type matches and self.content is not None. Returns True if it matches, False if not. If results is not None, it must be a dict which will be updated with the nodes matching named subpatterns. When returning False, the results dict may still be updated. N( RzRuRlR,RgR'RoR.R+tzipRr(RR9RptcRqt subpatternR@((s&/usr/lib64/python2.7/lib2to3/pytree.pyRncs " "N(RKRLR+RzR'RWRn(((s&/usr/lib64/python2.7/lib2to3/pytree.pyRxBsRycBsheZdZd ded d�Zd�Zd d�Zd d�Zd�Z d�Z d�Z d �Z RS( s A wildcard pattern can match zero or more nodes. This has all the flexibility needed to implement patterns like: .* .+ .? .{m,n} (a b c | d e | f) (...)* (...)+ (...)? (...){m,n} except it always uses non-greedy matching. icCs�d|ko"|ko"tkns9t||f��|dk r�ttt|��}t|�sxtt|���x/|D]$}t|�stt|���qWn||_||_||_ ||_ dS(s� Initializer. Args: content: optional sequence of subsequences of patterns; if absent, matches one node; if present, each subsequence is an alternative [*] min: optional minimum number of times to match, default 0 max: optional maximum number of times to match, default HUGE name: optional name assigned to this match [*] Thus, if content is [[a, b, c], [d, e], [f, g, h]] this is equivalent to (a b c | d e | f g h); if content is None, this is equivalent to '.' in regular expression terms. The min and max parameters work as follows: min=0, max=maxint: .* min=1, max=maxint: .+ min=0, max=1: .? min=1, max=1: . If content is not None, replace the dot with the parenthesized list of alternatives, e.g. (a b c | d e | f g h)* iN( tHUGERR'ttupleRZRgRTRltmintmaxR (RRlR�R�R talt((s&/usr/lib64/python2.7/lib2to3/pytree.pyRW�s9  %   cCs/d}|jdk rWt|j�dkrWt|jd�dkrW|jdd}n|jdkr�|jdkr�|jdkr�td|j�S|dk r�|j|jkr�|j�Sn|jdkr+t|t �r+|jdkr+|j|jkr+t |j|j|j|j|j|j�S|S(s+Optimize certain stacked wildcard patterns.iiR N( R'RlRgR�R�RxR RmR)Ry(RR~((s&/usr/lib64/python2.7/lib2to3/pytree.pyRm�s . !    cCs|j|g|�S(s'Does this pattern exactly match a node?(Rt(RR9Rp((s&/usr/lib64/python2.7/lib2to3/pytree.pyRr�scCsuxn|j|�D]]\}}|t|�kr|dk ri|j|�|jrit|�||j<qintSqWtS(s4Does this pattern exactly match a sequence of nodes?N(RuRgR'RoR R*R.R+(RRsRpR}Rq((s&/usr/lib64/python2.7/lib2to3/pytree.pyRt�s   ccs�|jdkrsxvt|jdtt|�|j��D]4}i}|jra|| ||j<n||fVq8Wn|jdkr�|j|�Vn�tt d�r�t j }t �t _ nz�yOxH|j |d�D]4\}}|jr�|| ||j<n||fVq�WWnYt k rgxI|j|�D]4\}}|jrU|| ||j<n||fVq,WnXWdtt d�r�|t _ nXdS(s" Generator yielding matches for a sequence of nodes. Args: nodes: sequence of nodes Yields: (count, results) tuples where: count: the match comprises nodes[:count]; results: dict containing named submatches. it bare_namet getrefcountiN(RlR'txrangeR�RgR�R t_bare_name_matchesthasattrRQtstderrRt_recursive_matchest RuntimeErrort_iterative_matches(RRstcountRqt save_stderr((s&/usr/lib64/python2.7/lib2to3/pytree.pyRu�s0 /     c cs`t|�}d|jkr)difVng}xO|jD]D}x;t||�D]*\}}||fV|j||f�qOWq9Wx�|r[g}x�|D]�\}} ||kr�||jkr�x�|jD]}xvt|||�D]a\} } | dkr�i}|j| �|j| �|| |fV|j|| |f�q�q�Wq�Wq�q�W|}q�WdS(s(Helper to iteratively yield the matches.iN(RgR�RlRuR/R�Ro( RRstnodelenRpR�R}Rqt new_resultstc0tr0tc1tr1((s&/usr/lib64/python2.7/lib2to3/pytree.pyR��s*       )cCs�d}i}t}t|�}x_| r||krt}x?|jD]4}|dj|||�rD|d7}t}PqDqDWq!W|| ||j<||fS(s(Special optimized matcher for bare_name.ii(R+RgR.RlRrR (RRsR�RqtdoneR�tleaf((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�s   c cs�|jdk st�||jkr2difVn||jkr�x�|jD]�}xwt||�D]f\}}xW|j|||d�D];\}}i}|j|�|j|�|||fVq�WqaWqKWndS(s(Helper to recursively yield the matches.iiN(RlR'RR�R�RuR�Ro( RRsR�R�R�R�R�R�Rq((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�,s'  N( RKRLRMR'RRWRmRrRtRuR�R�R�(((s&/usr/lib64/python2.7/lib2to3/pytree.pyRys #   -  tNegatedPatterncBs/eZdd�Zd�Zd�Zd�ZRS(cCs=|dk r0t|t�s0tt|���n||_dS(s Initializer. The argument is either a pattern or None. If it is None, this only matches an empty sequence (effectively '$' in regex lingo). If it is not None, this matches whenever the argument pattern doesn't have any matches. N(R'R)RkRRTRl(RRl((s&/usr/lib64/python2.7/lib2to3/pytree.pyRW=s $cCstS(N(R+(RR9((s&/usr/lib64/python2.7/lib2to3/pytree.pyRrJscCst|�dkS(Ni(Rg(RRs((s&/usr/lib64/python2.7/lib2to3/pytree.pyRtNsccse|jdkr2t|�dkradifVqan/x!|jj|�D] \}}dSWdifVdS(Ni(RlR'RgRu(RRsR}Rq((s&/usr/lib64/python2.7/lib2to3/pytree.pyRuRs N(RKRLR'RWRrRtRu(((s&/usr/lib64/python2.7/lib2to3/pytree.pyR�;s  c cs�|sdifVn�|d|d}}x�|j|�D]s\}}|sY||fVq9xPt|||�D];\}}i}|j|�|j|�|||fVqmWq9WdS(sR Generator yielding matches for a sequence of patterns and nodes. Args: patterns: a sequence of patterns nodes: a sequence of nodes Yields: (count, results) tuples where: count: the entire sequence of patterns matches nodes[:count]; results: dict containing named submatches. iiN(RuRo( tpatternsRstptrestR�R�R�R�Rq((s&/usr/lib64/python2.7/lib2to3/pytree.pyRu^s    (RMt __author__RQR RRRR RR RSR7RjRkRvRxRyR�Ru(((s&/usr/lib64/python2.7/lib2to3/pytree.pyt<module> s"   �pN V,=�#