HH__PAGEZEROx__TEXT__text__TEXTP 1P __stubs__TEXT__stub_helper__TEXT@z@__const__TEXTL!__cstring__TEXT __unwind_info__TEXT.l.__eh_frame__TEXTXA>XA__DATA __program_vars__DATA(__got__DATA(H(u__nl_symbol_ptr__DATApp~__la_symbol_ptr__DATA__mod_init_func__DATA(( __const__DATA00__data__DATA__bss__DATA__common__DATA؈H__LINKEDIT!!"0XX `pH  P}8 /usr/lib/dyldU߭+8$ *P  8h/usr/lib/libstdc++.6.dylib 8/usr/lib/libSystem.B.dylib&ЛX)( jHHH}HuHHHH9uH UHAWAVAUATSHHIADžXƅ\Dž`DždHHhHEHEHEHHEHNsH81IEHPsHH `L%_HPLmDuNH HP&H|zAE11H=踵E1DLHH ivNH4IcLHxrHHEHerH0LLHULH5zgLH5cHr|LH5ELH5.LH5LL5LHH$1H5jHiH jLoMHHHE11H=\H_eHSqHHEH@qH8 H%HP `IHqH8 HHP9Nd HpII?HeHPI;hƅ\DžXH|pH0LpLHULH5LH5zHpLL5LYHp11H5L}HHHpE11H=HֲH=j E1HoH= E1Hoe|H@H@HH xHAyEA,HwaEAHwOE11H=H9HpHxH9u AEJHHPJHwAHHxH9AELmDuHPH}uHNvH8E1HwnH8H-vH`H51AoHTnH0HHUHH5HiH5_HNH5tH3pH5qH^H5HLH5H:H5H(H5HH5HH5HvH5 H[W)PHDž`H-q1LP1H(HXH`H9tH HHXfLH52H{(uHHP苹HHHt H=1躭H=6HJH5HE11HH5H1HxH5H1H`H5H1HHH5H1H0H5H1HH5H1HH5.H.1HH5FHI1HXL5oOL5oFL5o=L5p4L5/p+L5Np"L5mpL5pL5pL5pLuHHxH;=jE1H}LmDutHkHcMlA)AHjEtHMHt,H}uH=1HHMHDuLmHEHt xHhAH qHHHHKHMH=ffff.AAd#H HfHHCHH  HuHpHHU@HHuHU螭HpHVHhIL9HH_itlH`LLLHpLL`IWHLHU)\t)LL\tE1%E1Hh%E1 E1LHu\AHZHpHxH9zEt \Dt@DEHUHztHu1H=薫AxHEHEfWf)pHEHPuHUHpLEq Ho0H`HpH`LLHhHpLIrVHpH9xtB1H4LHUZuHuH~HHpHxH)HH9r1H`L[t[H=E1H`gHu1H=]iAHtHcLHuZE1HguTHu1H=,S1ҹH}H50&HDA1H=کAHfHWHpHtHEHxH9uYHHHuUHAWAVATSH0AIH5H}HU)I$Hxt{I$L}LH5LH]HLL}HLLHHEHxH;=\MHEHxH;=\XH[HHEM$XIT$HuHMLQtVHuH~t#H=1HEHPH}11;Et=HuHULʷu\HuH=JFHuHUH=s115ID$xu(HuHULpuHuH=T11HHEHxH;=[u HEHxH;=[u(H0[A\A^A_]ùHHuFǹHHu-뿹HHuHHuDUHIȉHGHHH$]ffff.UHAWAVAUATSHHAH}AHHLZE1L%YE1Dfffff.ADHLrttgAtH=$EHYLc E)EtEuH=1uHuHVHHH1E~JHHDEtDEHH蝛趠H}HuHXHhHĘ[A\A]A^A_]UHAWAVSHXW)EHEHXHHEHELEHHttHEHEHEHEHEHEHEHEH]E1H;]Ⱦt#L}fHHxLHH;]uHuH}HuH=\1fAHEHxH;=1XuH}HtDHX[A^A_]ùHHubf.UHAWAVAUATSHHIW)EHEtaHWHHEHELELHHHEHxH;=WHHuмvI$hI;$ptdM$XL}f.H3Lt1HuH;ut HHHELHffffff.HI;$puH]HHELmHEHEI91IXHVH@HEL5IuLTIMHEHEIuH}HUÃuHu1H=z膙IEH0AAW9LwHjLOLD1H=5蔽A~*1IGHH01LoHIcGH9|߿ eHEHxH;=Ut9H+Hu3 ff.IEH01H=IL;m1(HuH=1觘HEHxH;=xUu$H}Ht_HH[A\A]A^A_]ùHHu衺fUHAVSHW)EHEH UHHEHELEHH/ HxHEHEHEHEHDžxHEHEHEHEHEHEHEHEHEHEHpH]H;]t(Lpfff.H3LHH;]uHpHH}Hu_HuH 1HuH=1HEHxH;=SuH}HtչHĀ[A^]ùHHpffffff.UHAWAVAUATSHHHMH}1(HcHEHgSH@HEL-L= L%16fDH1H;M|%HHu{HEHEHEHMH4H}HU IM3I61H=(6LuI^HMHH01H=HCHKHH)H~sE1H)HHcSPH)HcSLHH)L9LH=HFL9HH=HFL9HFJH1L袹IHCHKHH)HHcI9|H=苹HEHX H@(E1H9tqH La(L;a0t)I$H01LCIHL;`0uHEH@(HH9uL%$/Hu1H=辔A fDL%HEHxH;=zQDEHM"H=1rHH[A\A]A^A_]fffff.UHAWAVAUATSHXỈH}AXI4$LuHUL薶H5aL?t|H5SH}+H5AH}H}H5HH E11.HHHu?H=E11H芓7H5^PHHu| I\$HH}HH賵HuH~L}HEHEHEHEHEL}L}HELppH@xHEI9LeHuM>IH8HWHFH9H9HBиB蠶E؅u>Mo(M;o0t4ffffff.IuLIIL;h0uHEH@xHEIL;uuH]L}HAI|$lA\HELppH@xE1AI9L%E1fffff.IHY(H;Y0t.HH0HH1L.HIH;Y0uHEH@xII9u1HELppH@x II9IHYH;YtfDHHxu H8ԵIHH;YuHEH@xAuH=E11NAWL fff.H{ }HѳHL9uHuH}HEHxH;=ME1A1HEHxH;=MEtsHMHHEHuHH}HUuHuH~tH=1蓐H}11DH}HtJHEHxH;=?MuHX[A\A]A^A_]ùHHu{ֹHLHu^>1"HHu7fff.UHAWAVAUATSHHIωUH}W)EHE1LuH]1HEHuHH)EHrHHELHPaH}HuH)Hu A8"t78t-8"C[dHELhpH@xI9]AH]DIMHQH;Q}E1ffffff.IMH9K4mAu ,1H=tβH]@ȲH"tȃ\tuffffff.\薲1H=4vIu1H}H]ffff.XH"tȃ\tuffffff.\&HEHxH;=J1H=IEH@HHffff.رH"tȃ\tuffffff.\覱E11H=f胱H]II9o-H`HuXRffff.HEH@xII9H= 51%ܯ8mHH=1H軌H}Ht脯HH[A\A]A^A_]UHSPHt&HqtHH[]fff.UHAWAVAUATSPE1L=j AɃ sCLDdH4@EENE1E~!E11fff.A?'D9|AGIDŽEu1H[A\A]A^A_]ÐUHAWAVSPHIHt+ff.HsLL{HTMLuH[A^A_]DUHAWAVAUATSPIIMtTL- HL}H,Lj"fLHsLLcHC HxL9uHԭMuH[A\A]A^A_]@UHAWAVAUATSH(MHHUItVLcE1HEJ4LLMHEHtiHsH;st HHC HHUdIM9|?ILeLLLrpHLH}HtIEHx1H([A\A]A^A_]f.UHAVSH IH}HtxHuLtgH}H_%fffff.HHxLHH}H;_unu)HuH}1{H}HEHxH;=cFu H [A^]ùHHu觫ffffff.UHAWAVAUATSPIIM9M4$M|$M)LHI}IEH)HH9vFHH=L߫ILLLʬI}Ht贫MeIIEIEHIEHEIUH)HHLH9s荬I}HI+uI4$IT$H)LlHEHI]HLH[A\A]A^A_]fff.UHAWAVAUATSHhIIH]HUH諪HuHL 1ۄHuH^Ht8~x H}4HuD^u HvHH}1>AHuE1E1IHVLcgHHt0EHC H;C(H8HG(H;G0WHsULeHuLXL-ADIEHEHEHEHpHH]H賩H5HuHLpLeLH蝩H5JLGLLTHEHxL9HEHxH;=CHEHxH;=C)H5H}ߨH5H}ǨgHuLgI1McHEHEIHpHH]H¨H5H脨HLL}LH謨H5LVLLQHEHxL9HEH5Z L%BID$HEHEHpHH]H#H5HHuHߧLxLH H5L賧LLHxHxL9HEHxH;=Bt-HHufH5LV1HEHxH;=AuHHh[A\A]A^A_]ùHHuչHHuHHuצHHu跦HHu藦HLHuw>H5H=p1RfUHAWAVAUATSHIHHCH;Ct0HHHH{HGHCHHWL)H)L豧IHUHH+HHHHҾHEH9sH H9HuH<[IL+MM)LLLCKHuޛ3fDLHsLLkHC(HxL9uHC HxL9uH7MuH[A\A]A^A_]UHAWAVAUATSPIIMtTL-6L}H,LJ"fLHsLLcHC HxL9uH贛MuH[A\A]A^A_]ÐUHAWAVATSHpLAH5HHEHuHUH}莜}虛}1蕛=W)EHEHNHpH}Hp1HEHuH -HxH9tHHuHHuH}HxlHuHHEH;utHHuHHuH}HU9HuH;utHEHHuHHuH}HU HuHHEH;utHHuHHuH}HUHuH;utHEHHE H}HUE~DL}LeHHEHuH;utHHEDLLuHAuHEHuH;uuH}HUM HHEHuH>H=裚H}Hq裙H=mH=prHW3HH;EubHp[A\A^A_]Ë}聙}H5ǟH= H=e%}Q1\H=  ffffff.UHAWAVAUATSHIHL;JHCHCCHC(HCHHC@HC8HC0HC(HC8HC@H{PH} HCpHHCxHǃIcOHHǃH@HEȿIHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃHǃ@艗ILHL4IO|5]KD5LHHHLHHHHLH}ǃH8tHEH=D裗HH BHEHKpH[A\A]A^A_]f.UH]fDUHw]UHAVSHIHH+CLuEH{ HuBCLHu{Pt HL3L+tHPH H[A^]ffff.UHAWAVAUATSHXIIIED AH5'L}HULsH}LL"HEHxH;=/gAt HEH@Hu_H5L}HUL%H]HLLH}HHEHxH;=V/HEHxH;=A/A}u&LHGIIFIIUpLuLL;H]HL蚔LuHLOLHVHEHxH;=.HEHxH;=.IPH]HuHBALHHEHxH;=p.HEHxH;=[.HX[A\A]A^A_]ùHHu葓yHWHuqIHLHuQ>HjHu1\H_HuQHDHu6H9Huђ+fDUHAWAVAUATSHXMMHMAIHgECHs(H]H{0HHtAHHf.L9a sHIHuffffff.HyHHuHH9Ht L9a HGHϋO(AH]+CAE蠒H誒HKHLt H{P1cH8_Lou HL`EH`,HHHMM|$(M;|$0HHMH]L5Lm HIHu>I7H賑HLaLH\HEHxH;=+uIM;|$0uHEH]HMLsPHMHpHH]H<H5HHuHLmLH%H5LϐLL(HEHxH;=I+CHEHxH;=4+NLm1LLH]HL輐H5HfLHHEHxH;=*HEHxH;=*H]!HEHxH;=*,HEHHxtvH*HHEȀ{PH[PtH}Hu1LuLHu&zH}LޏHEHxH;=K*HuH HEHxH;=**uHX[A\A]A^A_]ùHHuhعHHuKHHu+HHu HHuHHuˎH Hu諎UHAVSH HHP1HH5LuHUL诎HLHEHxH;=(u H [A^]ùHHu7ffffff.UHAWAVAUATSHhIHxH(HHEH(HHEHy(EHHHEHuHHELu*fff.HE@L`MBL8IA]%tHHELxMgL;`w xL~H}L菍HEHHffffff.AuFۃPIH HcHHEHXLcL;`w xH~H}L+HEHH%HE@L`MLI8H]sH}~H]H!?H+fHnfbqf\yf|Y} LHhHEH HEDxEH]H>H+fHnfbf\f|Yf."uWA*EH}t>HMH+fHnfbf\ĭf|YȭM^f(AxHMkAdy 1LHӍHEHHHH )%HEHHEHHEH+Hf 1LHf耍HHE@x f.*uz1LH"SLH)@f.LLH}LHI?HuHxH HEHxH;=O%u"HN%HH;Eu9HHh[A\A]A^A_]ùHHuzH=1df+@UHSHH9shshHC`H+C@HKHH+KPHHHC(HK8HH)HHTH;Su;HH9tH(H{0GHC@HHHK@H@HC0HHK8HC(H{:H+CfHnfbNf\Vf|YZHsHHKXHH9tHHsHLKPL9Hsf)EHC HK`H+KHH)HwH{1/蛈HK`HAHCHf(EHC`HHHK`LHLKPIHCXLKHLHC`HPJHK(f.u{aH{8LC`LH+S@HL)HHH)HHDfHnfb @f\ Hf|L9u IpV\^ H[]fffff.UHHGHG(HG HGHGHGHGHG HG8HGXHGPHGHHG@HG8HGHHGPHG`]f.UHHGHG(HG HGHGHGHGHG HG8HGXHGPHGHHG@HG8HGHHGPHG`]f.UHSHHW)EHEHUHH}Ht腆H[]UHAWAVAUATSHhIHIH]LsMHMtHL1{L-* M}L}ID$I9$HXL}HHpH LuL芅H5 LLLHGH]HLtH5HH}H*HEHxL9HEHxH;=H]L}HHpHLuLL=LL跄LH貄H]HL߄HL荄LuLHHuLxH]HL襄H5Ǽ%HOH}H[HEHxL9THEHxH;=_HEHxH;=jHEHxH;=uHEHxH;=x1A~Ht11LxEHxL1AՀ{t5x(u/@(AGdLMt LLLuAG`EtvIt$I;t$tHEHID$ HULI^I;^t9fDH3MLLL}L(u IHxuHI;^MuID$1Hh[A\A]A^A_]ùHHu轂HHu蝂HHu}vHyHu]kHnHu=`H+HuH HufUHG]UHAWAVATSH0IHuHLzL9t'HFf.H H9AtHI9u11L9W)EHEI)MILH=LHEN$LeHHLLeH}HULHEHUHH;JtMHpH9tH)H跂HEHUHHUH;UtHHHE1}H}HHH5jLހH}H;}tDL=oHfff.H9tLL藀H3L蒀HH}H;]uHtH0[A\A^A_]贀@UHAWAVSPIHuIF8IV@HHt@HHfH9s sH[Huffffff.HSHHuHH9tH9s vCI0L~A tLM4LLH[A^A_]X4L4HULH/H[A^A_]fDUHAVSHE1H{XtHs8H{HLw HHKXL[A^]UHAWAVAUATSPUIIM~IVHLt:LHL9` sH@Huffffff.HPHHuHL9Mt L9` MLFA](t I|$L73I|$Iv0Y3}uItANdLL*H4IN(AD$HI\$(H3L%HI;\$0uH[A\A]A^A_]ff.UHAWAVAUATSPIIMn M;n(Mgf.IOHLtGIELHf.H9C sH[Huffffff.HKHHufHL9tHI}H;{ IBL9t7肾t.{(Iut LLL=ffff.IM;n(RH[A\A]A^A_]UHAWAVAUATSH(HMIHuA@M` M;`(LoLEH}HOHLtGI$LHf.H9C sH[Huffffff.HKHHufHL9dI$H;C IBL9O{(ExI;LpLxHc@PHI)1LLH-H}LEL9M9trIM)IIOȃH9u1=HHL)1HI6t~ ;z ~HHIvt~ ;z ~HIHuHtHItH ;J ~HEI4$H}HMLE螴}uSI<$Lw(fDII<$L;w0tIH}HuHM.uGC(HEHduHEH`LEH}DIM;`(2H([A\A]A^A_]1ffff.UHAWAVAUATSPIAv(H=ij1}MnI^L9t11IGIwHS(H9tH HIG fL8HzHL9uLH[A^A_]f.UHH]rfUHSPHLKLCHsLH)H{p+{PHKXH+K`HHSHH+S8HD A;@})L9t$WfA.@s-eHCHf.1H[]fUHAWAVAUATSH(HILeE11LMoHLLNrHtHEH]IǰHuL+AHEHxH;=uDH([A\A]A^A_]ùHHuxffffff.UHAWAVATSIII^ff.HtIMuH8rt1LhAGI_LUmHHxIIHHtEHHfffff.L9` sH@Huffffff.HPHHuHH9Ht L;` HBHHG(IzxHxILhLmx[A\A^A_]fDUHAWAVSPIHH3LsHCHC8HC0HC(HC HCHC(HC0HCHHChHC`HCXHCPHCHHCXHC`HCxHCpLHLHLLwILLLH[A^A_]ffff.UHAWAVSPIHH3LsHCHC8HC0HC(HC HCHC(HC0HCHHChHC`HCXHCPHCHHCXHC`HCxHCpLHLHLLvILLLH[A^A_]ffff.UHSPH2H{xHtHPH{@HsPHs H{H[]UHAWAVAUATSH8HHsxH[HH}P(H{xHP0LuL;u,L-$HHu?u@I6H}脻IL`(ff.IIL;`0IEHEHHI4$HUPAAuHu1H={RHEI4$HxuD9~ t HHP0HEHxL9tHvHuthHEHxtHHHuP0HEHxL9IL;uLuMtLtH8[A\A]A^A_]DUHSPHbH{xHtHPH{@HsPHs H{H[]UHAWAVAUATSH8IIHH;I4$HV1IMtvMgMt&HLL#1A|$Hu?HW)EHEHUHLLjH}Hts1LL- IEHEI$HpHH]H7sH5ȫHrHLrL}LH!sH5ΞLrLLrHEHxL9u"HEHxH;=8 u*1H8[A\A]A^A_]ùHHutrŹHHu[rUHAWAVAUATSHIIII_HtIHL軥tAA{Hu;IW)EHEHULLL AH}Ht trE1DH[A\A]A^A_]ÐUHt~p]ff.UHAWAVAUATSHXHuHHKpHLcEt$ H{xA|$XqIH_I@qHEqHEIGPIGHIG@IG8IG0IG(IG IGIGIGIG@nqIMgIGL,IK,HEEqK,HUIW0IG HIO(IWPIG@IOHIGIG8H}qH}pppIHIMgIgIILJILJILJILJILJIIH{xL9tHtHPL{xL{LcHEH\ H@HEfLLP{t{pEtbH{xHPtTH{htMH{XLo LoHoHKhMt,HLHU L貨zEDmElHEHEHEH{xHHuP }t@4uHHxH;={H5?H HUHNgHxLHH HxH;=ZHEHxHlHHEHUHxLPLMLL#uBA|$u:Ml$ID$HxtH5L~fHuLxfAD$HEHxH;=#IA|$IL$LELtL]A|$IGIw HHtBHHff.L9q sHIHuffffff.HqHHuHH9tL9q HFx(t I~LI~I@L0A~H5HhHUHeLH3AIGXHhHxH;=_E12I^(I;^0$IGHHME1fffff.IHH3HUPH9B uHHLHMhA HI;^0uE1AI^IFIcNPHH)E1H9At?E1IHH3HUP3D9DMHIFIcNPHH)H9uH}L蚪E`HEHxEIHhHxH;=EE1ILH}LbHEHxtH*uIHHuP0IHtUtLE!HEAHx`IGxRIF(HIHHHUP+IHPHމ^H5L@HULUcc8eeHL8LL@cHNeLHHbH}LbH8HxH;=^H@|H5L0HULbVc8dHL(LLbHdLHHjbH}LvbH(HxH;=H0HxH;=E1HEHxH;=HxHxH;=HEHxH;=HPHthbH`DH[A\A]A^A_]ùHsHxabHHusaHdHuSaVHYHx0aHHHuaHHu`E1HHu`HHu`E1HHP}`H>Hu]`0HHu=`E1 HEHxtKIHHuHUPD9EDMu%6H*Hu_EIAOpH1EHEHxH;=OuE1HHu_@UHAWAVAUATSHMMIIHH}H5LD_|MH5L*_H3H}|HEHxMHMXHHHEHHHuHULPAuIHP11L^HEHxW)E)pHEHpHuLnPAbH]HEHH)IILH=FI$IL$H)HL9sxI\$H)HHHhHH`^HXHH`H_I<$Ht^HXI $HhHID$JID$H]HEH9Lu@H;HHLL{=HEH8HsHMH0It$I;t$tHID$ffffff.LH0HH;]uHE18HEHHHuP0H5LHHUL/]]8?_HL@LL]H(_LHH\H5ԔLPHUL\H8HL\HL\LH\H8HxH;=HPHxH;=H@HxH;=HHHxH;=AH}Ht\1HEHxH;=|HjHp[YLxHEHEHEHEHDžxLuLuH%HHEHHpHMHLM@JHuHp[H]L9L}tjL I?Hs HV{H It$I;t$tHID$ffff.LL蕴HO[HL9uHEHxH;=fHuHpWH5\H(HUHZLHZH(HxH;=uyA1HEHxH;=uDEu+'HEHxH;=HuHp莬1ۈHĸ[A\A]A^A_]ùHHpZ령HuHpYdHHuYHiHuY[H+HuYH#HudYHHuDY HHu$YI6H=15H=%zYfff.UHSPHHHHHHHH[]QUHSPHHpHHHZH{QHH[]YUHAWAVAUATSPAIHHSHHCHs(II)IOd5IK $H9vAL)H?H!HH 1EIEL4HI9H)LYDEL9HIBL|LH=J<lXLL)H?H!H4I1ɋUԄIEL4Hs(HSHHH)L.YH;XL#L{KHHpH`H0H@H8LXLH0x HtLho ?ILH`>IEHHHH L(It$ HL HLH> HHHEuE}HHMAE|*LpEuAE1H2@IGEuHpH)HIGH`HxH;=*u)HHH(u$HHHK=u)H1H5G_Hg?9HHHH)ھ H>IMAH=AIHL) LJ>IMtjA$IHL) L#>IMtCLY=AAEIHL) L=HHjffff.HHHLXHP=Ht_~e|MH@9~;AD$03H5uFHx;HP<HhH8*>H4H5HH;Eu7H[A\A]A^A_]ùHPHX;?<UHAWAVAUATSH(HUIIM$M9$s"I$HtM$HI$AI\$I $H <HI$MlM$M$LH)ھ H5<IHLI|$H}MI)L}II)MHLHM <ML)I $L;LL}I$H}I$H) HH;HMI$IHHMH1H([A\A]A^A_]ff.UHHHHEH@HEHuH1HtHAH]fff.UHAWAVATSHIMwIG IGIGIGH[HHHH)Hff.HH~HHH94sAH =\H9tL LH=ui1Mt1J<9HIHt~9I_I_JIGLHEHMLH(IG H[A\A^A_]H=}9UHAWAVAUATSHIHIM?MeIEL)HL9Lms@HM+eIHL)L9HMM9MMBMIL1LH)IIM9JHUMI)LL9HEHMHHI)M)LHLi9JHHJȃH9t>HHH)fffff.L3LsLsLsLs Ls(Ls0Ls8H@HuH0Hff.L3HHuLL)LtxH9Lt@I| L)Lfff.L6LvLvLvLv Lv(Lv0Lv8H@HuHtHffffff.L6HHuHMHIHLnD5Ir IUHHHyAAL9uL`LLIzH)Lf.i1[1i[i[1iY[1i[i[1HHuMti [1iΕ[i[1HHH)ILIHtHtHuQ1Q1 1i[ 1iɕ[11IIE1Ht.E1DL9kuH{LLI5t HHuILLH[A\A]A^A_]DUHAWAVAUATSH(IIEI+EHHEH9gHUAHHHH)Hfffff.HH~HHH94sH #VH9tL MN5!L;eHE1MAt5LH=J<H}]3HH]N4HHuX3JHEH}}LuI}E1H]9f. 1iȕ[11IIJHILI}NMMKMsDD1IMILHHHAAL9uL]fIJH)LfDDi([DD1i[iҕ[1iX[1i[iҕ[1HHuMti[1i[iҕ[1LHI)MLMAH]It$ItIAA1AA1A1iЕ[IL;EHELuI}I]IMIEHMMuHt1H([A\A]A^A_]81UHAWAVAUATSHLFLNM)L*LrEAIr M^LHHYAAL9uLdMLMzI)Li[1iە[Aiĕ[1Dia[DD1iە[Di[A1HIuMti [1iȕ[Ei[A1LHI)IL IIH}HuHUt ItIu!AA1QA1 D1Di[D D1iɕ[11IHM$Mt/Mff.M9wuILL0tQM?Mu߿ /HUHJHHH HRHPHHL HUHJHHB HMHHQAHEL8HHEHAAHH[A\A]A^A_]fffff.UHAWAVAUATSHIHIIFI;Ft|HHHPHPHIFHHINIMIUHUHMHHH)H~.HHff.HPHpHpHH@HHHEHMHKHHI+HHHHALEI9sI I9fIL.IIH9MLCI)LHH~AAL9uLIyH)Lf.HHPHVHHHHPHVHNHH HP(HV(HN HH0HP8HV8HN0HH@HPHHVHHN@HHPHPXHVXHNPHH`HPhHVhHN`HHpHPxHVxHNpHHHpMt&IHHPHVHHHIuIOdIEIMIL$I$IMFI9t$II)LHHrH9uLMHqH)LH;HCHBH:HCH{HzHBHC H{(Hz(HB HC0H{8Hz8HB0HC@H{HHzHHB@HCPH{XHzXHBPHC`H{hHzhHB`HCpH{xHzxHBpHHHpMHt#HDHHsHrHHHHuIOdI>HtK,M.MfMMnH[A\A]A^A_]+ffff.UHAWAVAUATSH(IMGMOM)L&HuH^5Hr L[LHHqAAL9uLZIL~IrH)L@i[1iו[i[1iQ[1iו[i[1HHuMti [1iʕ[i[1LHI)IL IItItIuQ1Q1 1i[ 1iɕ[11IM4E1MIE1HHUtL}1HMMHMsL!ffff.II9_uILH+t IHMu.IIELt*IEHEL}IO HHMHYuL}HMLmI9^u1I~H1H6+uIIOHUHL*IIO LH([A\A]A^A_]ÐUHSPHH3HSHCHC8HC0HC(HC HCHC(HC0HCHHChHC`HCXHCPHCHHCXHC`Cp)H HHHCxǃH[]@UHSPHH3HSHCHC8HC0HC(HC HCHC(HC0HCHHChHC`HCXHCPHCHHCXHC`Cp(H pHHHCxǃH[]@UHH7HWHGHG8HG0HG(HG HGHG(HG0HGHHGhHG`HGXHGPHGHHGXHG`GpHOxLJ]fDUHH7HWHGHG8HG0HG(HG HGHG(HG0HGHHGhHG`HGXHGPHGHHGXHG`GpHOxLJ]fDUHHxHH@0]fffff.UHSHHPHHEHxHHUPÃuHuH=7O1AHEHxH;=u H[]ùHHuS&ff.UHGpHGHt&tHHtH6H=`1] (]DUHAWAVAUATSHIII\$H<IL$H9 IHLɂID$xHCHHEI|$xHHULPAAuHuH=$N1.HEHxH;=EAD$pID$Ht{tLtqI6H=_1''^I|$xHLP0t?uGAD$pID$Ht5tLt+I6H=y_1H[A\A]A^A_]&ADŽ$H[A\A]A^A_]ùHIHu$;@UHSPHH{ HH9H[]ffff.UHAVSH HIH}jHEHxt HuL/H}HkHEHxtHuL HEHxH;=uHEHxH;=u"H [A^]ùHHu#͹HHu#ffffff.UHSPHHC8uH[]H= ^1}%HCHttHHt  H[]R%fUHHG8u]ËwpH=]1]#%ffffff.UHAWAVAUATSHAIADŽ$AD$pI|$I\$It$ 0uI\$(ID$ I\$0ID$8I|$@I\$HIt$PtI\$XID$PI\$`ID$hID$8t@H=]1p$ID$HttHHt  J$I$LhXII$L;h`I}[uEu?M}H]HH5^HU3"LHaAHEHxH;=tu8EuIuH^(H3LHIuH;^0uL?jHHu!ID$8tAt$pH=\1h#A$H[A\A]A^A_]ffff.UHAVSHǃCpH{LsHs tsLs(HC Ls0HC8H{@LsHHsPrLsXHCPLs`HCh[A^]fffff.UHAWAVATSHIIL}MwMLZuLLLLI^IFH9M|$HfH3I|$PHLtCLHf.H9q sHIHuffffff.HyHHufHL9t H;q IBL9u L3IFHH9uI@HuL& H[A\A^A_]fUHAWAVSPIHǃCpH{L{Hs qL{(HC L{0HC8H{@L{HHsPuqL{XHCPL{`HChHC8t?H=Y1:!HCHttHHt  !HL:HC8tspH=Y1 H[A^A_]ffffff.UHAWAVSPIHǃCpH{L{Hs pL{(HC L{0HC8H{@L{HHsPupL{XHCPL{`HChL;L LLHHtHHd H=X1LǃH[A^A_]ÐUHAWAVAUATSPIAHǃCpH{LcHs pLc(HC Lc0HC8H{@LcHHsPoLcXHCPLc`HChHC8t?H=X1cHCHttHHt  >EDM.L#LvLLHtIMtLHCHt%tHHt1H=WLHL)fffff.1H=^WL_ǃIAhHC8tspH=!W1rH[A\A]A^A_]fUHAWAVAUATSPHuIM/I]XfHI;]`~L3IH8HWHEH0HFH9EH9HBиDBDEEuMf(M;f0tf.I4$LH3LYIHL;`0uM/tH[A\A]A^A_]DUHAWAVSPIHǃCpH{L{Hs mL{(HC L{0HC8H{@L{HHsPEmL{XHCPL{`HChHC8t?H=U1 HCHttHHt  HLzHC8tspH=cU1H[A^A_]ffffff.UHAWAVATSH IHǃCpH{L{Hs lL{(HC L{0HC8H{@L{HHsP@lL{XHCPL{`HChL;IpLeHULL@LL/IHEHxH;=uEMtHL? H=T1LvǃH [A\A^A_]ùHHu뢐UHAWAVAUATSH(IAHǃCpH{LcHs kLc(HC Lc0HC8H{@LcHHsP+kLcXHCPLc`HChHC8t?H=S1HCHttHHt  EH]HJHu?M.HHpLeLLHUHLX.IHEHxH;=uMtOH]HCHt%tHHt1H= SLHL,ffff.1H=RLH]ǃIADHC8tspH=mR1H([A\A]A^A_]DUHAWAVAUATSHHuLHGHLtvHML!Ml$E1L}L}HÐH{ HWL9EI9IBEBLDEEyH[HufHCHH]L}uH]L}L9t8HEH8HWHs HFH9E1H9HBDCsDEELILH[A\A]A^A_]fDUHAWAVAUATSPIIMl$IT$Ht5If.HHK HSHsH9HBHHuH9IsLI;\$tPHIII9F s8LmI9AtH;C Aſ(IIIF ALHHM91AI9ݰt IH;C Eп(IIIF }LHLTID$(LH[A\A]A^A_]ff.UHAWAVAUATSH(HIH}H5oPLmHULM'Mt$HHxIDH3H^HcI9~ LtH5JHUH]Hj0ITBHƒ tL)I9rRHH]HLJHEHxH;=uHH([A\A]A^A_]ùHHuH=k[2fffff.UHAWAVATSIM&A|$x8LM&A|$x%LlIL{I߃{xLTI M|$MLM9t&ffffff.A<$IHM9uH5O1ҹ LHHuH5O1ҹLH[A\A^A_]fUHAWAVATSHPIM'A|$x8LM'A|$x%LILsIރ{xLI Mt$MLM9t"ff.A<$(IHM9uH5pNH]HUHtLHGAH5FNH]HUHGLHAutH5!NH]HUHLHAu:H5MH]HUHLHAHEHxH;=6HEHxH;=!udHEHxH;=u:HEHxH;=uDHP[A\A^A_]ùHHu<׹HHu#뭹HHu 냹H`HuRfUHAWAVSHHHHHIH3HH+Vs1ZH9rH}HHL}MwIWH3HFH9H9HBлCL E؅L;5u H[A^A_]øAGHuL:H=WfDUHAWAVAUATSHhLEHMHUHH}E1LeH]fff.HH5LLIIHH@LDL9LL)LHLH]HLHUHEHxL5IFHELeLH~LHuHUAtLHxHHu{HHxHxL9E1u H}Hu mL5HEHxL9*ELenffffff.H]HLHHEHxL58L9u*H]HLHH5GtL5HEHHHI9sB8 I1I9sB8 DMDMHEHxL9uHEHxL9u1H]HHuL5t¹HHu붹HHuL57HHu}L5HJHuVF$1HA$$I뷐_w+[w=)f*wf$(Ht~f|wPHr^]sFF"wyH^ȃ } Hu_HfCHB<8x)I9LcLL!ȃZw$r4*u-rA t# ]r|tHA$\AD$IHA$IHHM)E~0LH HHH AD:uEd$E1EEAEu EA$u6IcLmHEHUHrH;r t@HEHMHNHHBGHEH8IcHt#H9PuUL tGH}HUL(HPHEH9AL}t(H5FLH5aF!H}/ 1H8[A\A]A^A_]UHSPHH{Ht HCH{(Hto H{HHt[][ []fff.UHSPHH{Ht HCH[]f.UHSPHH{Htq HCH{(Ht H{HHt[] []fff.UHAWAVSPIHIA?tLHLH;H5sE$ IGH11ҹH I I1 I Hu>IOH=-  Ht0IOH=- HtI t' 8 HH LHHP 1H[A^A_]DUHAWAVAUATSHxHIIЫuuH=ū teHEL(E1Mt@H5DLxHUL LLeIHxHxH;=@;L%[H=\; H5HHhDI~Htn IFLeLLH5fD LGH} EHEHEHEHEHEHEHEH}LHIFIvH9HH)HHVуH9tvHQH)fffff.H0F8HpF8HpF8HpF8Hp F8Hp(F8Hp0F8Hp8F8H@HuHtHHB8HHuIF(IN0HH)HH]~q1Leffff.L,Mt8IFH4 t'IFH4IUMEHH LHIF(IN0HH)HHcH9|H}Ht IF(IN0HEEHEMHMIF8AN0HEANUAVMIF AF HEI?xH}I7Hy(8lHHgH}HH1H}HtHEH}HtjH}Ht\HEHxH;=Qu7HhCHx[A\A]A^A_]H}HtHE1딹HHug밹HHuJffffff.UHHLILH)HE1L9LE] ff.UHAWAVAUATSHMAAHI{8x1LHH]EDm~8Mc1ffffff.I4߃~8yLmHL9|܀LmudIcE8Hx[IV(Iv0H)H9}HHHt?H;Eu7H D9u.EHRIc1HI;uHH9|BE=r"1 EINH}ľ(HAE8EINH}оHEԉEINH}HtxE~CIcE1ffffff.K@8EINH}Ht?II9|I~It11111111IŋEAEEeIcĹHHHAcIEEIHAtvADA)tJ1HIUItHtIUItHtIUItHtIUIt Ht HQA9uHtIUI4H4HuHEȋp8LLH[A\A]A^A_]ffffff.UHAWAVATSHIIL}IL`DDD))ˉ؃)ADE=rh"1INH}ؾHtzI?IcINHtetHcINH=%HtLI^I+^HЉEINH}ܾqHtI~'t1=1915111-HEЉX8IvI;v t HIFIHULtZH[A\A^A_]DUHHcN81HxHW(Hw0H)H19}H]fDUHAWAVATSHI։L(HG(Hw0HH)HH93SLcHEHLH)s J HO0HMLILcJHtH{HtHHIN4H[A\A^A_]UHAWAVAUATSHxIHIIH]HHEЊhuxH=]FthHHE1HtCH5:LpHLHL IHpHxH;=$L5H=H5ݡH`I<$H5E;HHbDžHHHHHHNH5"H3*LLHIHHE1HcIEHE1DžHffff.MHًAADHL9AHAEIMB-EHcHHDHHHDHc1HHHxB-MIuHI+UH9H^H8I;u cHIEifDLHHH EAAFIAA_HcùHHH@HpIGA MHcIUH HDHȃH)tN1f.HIwHcI]HHEHxHxH;=?u7HEHxH;=.tH Hu{1ۈH [A^]ùHHuUffff.UHAWAVAUATSHIHIM?MeIEL)HL9Lms@HM+eIHL)L9HMM9MMBMIL1LH)IIM9JHUMI)LL9HEHMHHI)M)LHLJHHJȃH9t>HHH)fffff.L3LsLsLsLs Ls(Ls0Ls8H@HuH0Hff.L3HHuLL)LtxH9Lt@I| L)Lfff.L6LvLvLvLv Lv(Lv0Lv8H@HuHtHffffff.L6HHuHMHIHH5.HHtPI?HWHIH;AsNM6J8HH=.E11LH#HcTI8HH=u.)H>Au)I8}HH=.E11HHDH[A^A_]UHAVSHH;Ay38t)H8HH=h.E11HH_D[A^]UHHHHnE]fff.UHSPHH;q1y=H9t+H8HH=-1HHH[]UH]f.UH]f.UH]rUHAWAVAUATSHHAAԹH}LGHuH^II M| 1LH H]LMt8LEH>8ILILLLH]LEйHHAAHL)L)ѸHH1ҾfHnfsfo 7fo?foGHrfHnfpDfoffoffofffpfpflfpfpflltHH9uMtHHf.H9uEAFEIcHEHGHEALuH}fDMrHELHEHAHUDEDDD:G3DEAEt$D9HJA9HLʋ 9OD9tHJA9HLʋ 9NHHA͉uDDLuEtD9#L;UMRH]H}9HEHH}Ћ]HH[A\A]A^A_]UHAWAVSPIHIH{LHKH9tH(LHG*HshHtHLLPH51#HULLH[A^A_]ffffff.UHSPHHHHH[]ffff.UHAWAVAUATSHHIHOH}HGHHMeM|$E1HLmHMHUHfDH{ HWL9EI9IBEBLDEEyH[HufHCHHLmHMu H]LmHMH9t3I}HWHs HFH9E1H9HBDC?DEEylL5/IFHELeLLH}HuH}HL HHEHxL9u8HEHxH;=݆u@HEHxH;=̆uHH(HHH[A\A]A^A_]ùHHu믹HHu맹HHufUHSPHH8HH[]@UHAWAVAUATSH8IHOH}HGHHMeM|$E1HLmHMHUHfDH{ HWL9EI9IBEBLDEEyH[HufHCHHLmHMu H]LmHMH9t3I}HWHs HFH9E1H9HBDC_DEEy:LeLLHEH}HL0HHEHxH;=uH(HH8[A\A]A^A_]ùHHuUffff.UHSPHH{8H@1H9tHH(HH[]DUHAWAVSPIHE1ffff.H{8LtHK@H9u H[hHuLp(LH[A^A_]fffff.UHSPHHHHH[]mffff.UHAWAVAUATSHHIHOH}HGHII]L{E1HLmHMHUII|$ HWL9EI9IBEBHDEEyMd$MuID$HLLmHMu LeLmHMI9t4I}HWIt$ HFH91H9HBC?E؅H]HLHEHEHEH}LHIH]L}L9tGL-Lu!HL1fHHxL9uHI9uH]HtHHEHxH;=uI(LHH[A\A]A^A_]ùHHuf.UHSPHH{H1H9H@(HEHH[]UHAVSHH5E$dAH56$HJH5'$H3H5HttH5 $H taH5$HtNH5#Ht;H5#Ht(H5#HtH5#HAD[A^]fUHHG8]fDUHAWAVAUATSPMIIHIH{LHKH9tH(LH?MtLLLJ*HshHtHLLPH5rHULPLH[A\A]A^A_]fff.UHAWAVAUATSHIIIHoH@III;_ttLmff.{tJI$LLHPLLHEHxH;= t)HHumDLHgHI;_uLH[A\A]A^A_]fUHAVSH II~I9>t HtH}HMEHHHEH}Hu-EI^I;^tHuHE؉CIFHULHHEHxH;=7u+HEHxH;=&u3H [A^]HH [A^]vHHuY뼹HHu@UHAVSH IHtH}HMXH~HHEH}Hu@EI^I;^tHuH#E؉CIFHULHHEHxH;=J~uHEHxH;=9~u"H [A^]ùHHu}͹HHudfff.UHAWAVAUATSPIIH}HIII;^tdL%O L-L LL {uLH5 LHLLHI;^uLH[A\A]A^A_]ffffff.UHSPHH8HH{8HsHEHsHHH[]:Ff.UHSPHHHH{8HsHEH{HsFHH[]DUHAWAVAUATSH(IIM9MuI}H}L)HHM<$ID$L)HH9HUHH<ecILmM9t.Lfff.HLAFCIHM9uI$Mt$L9tPLeL-|Le"H LRf.HHxL9uHI9uLeI$HtHMD$M<$HUHHIM|$}MD$LeMd$LL)HHH9sYHLEHUHÐLLAFAGHIIHMuIMHEL8LhMHULEOHMIHZfLLyAFAGIHIHMM TMHMM)MHI9MIHfLLSAD$AEIII9uLeLMkIM9t\HtzLuL+H)LELILELDIHxH9uIM9uLe LeLeLHI$ILH([A\A]A^A_]fDUHAWAVAUATSHHuLHGHLtvHML!Ml$E1L}L}HÐH{ HWL9EI9IBEBLDEEyH[HufHCHH]L}uH]L}L9t8HEH8HWHs HFH9E1H9HBDC#DEELILH[A\A]A^A_]fDUHAWAVAUATSHIHHCH9H]LeM$$M|$Lv I^I9HuE1L9LHBDBLLDEEL9EI9IB߸DBLLHiDEEHEH{(t;Ls I~ HWI4$HFH9E1H9HBDCDEEHLL}HEI9GILII|$ HWLuI6HFH91H9HBCE؅LLRLeLmM9l$ tLhIL}I?HWIv HFH91H9HBCbE؅xPLLPH[A\A]A^A_]1HLLVLLI|$t.LLL+1LLHM-I}tLLLL1LLL 1LLLH[A\A]A^A_] ff.UHAWAVAUATSPIIIIFHAHEu8L9t3I}HWIt$ HFH9E1H9HBDCiDEA0_HH{ LH{(ILAHLHMIF(HH[A\A]A^A_]ffffff.UHAWAVAUATSHIHGHH}t^L}M'I\$E1IIv HVH9EH9HCEBLDEIFINEHHHHuEML}yLwH}L;wtDL7II|$ HWI7HFH9E1H9HBAB>E؅y1H}1LLbIALDH[A\A]A^A_]UHAWAVAUATSHIHHCH9H]LeM$$M|$Lv I^I9HuE1L9LHBDBLLDEEL9EI9IB߸DBLLHiDEEHEH{(t;Ls I~ HWI4$HFH9E1H9HBDCDEEHLL}HEI9GILII|$ HWLuI6HFH91H9HBCE؅LLRLeLmM9l$ tLhIL}I?HWIv HFH91H9HBCbE؅xPLL@H[A\A]A^A_]1HLLVLLI|$t.LLL+1LLHM-I}tLLLL1LLL 1LLLH[A\A]A^A_] ff.UHAWAVAUATSPIIIIFHAHEu8L9t3I}HWIt$ HFH9E1H9HBDCiDEA0_HH{ LIEHC(AHLHMIF(HH[A\A]A^A_]UHAWAVAUATSHIHGHH}t^L}M'I\$E1IIv HVH9EH9HCEBLDEIFINEHHHHuEML}yLwH}L;wtDLGII|$ HWI7HFH9E1H9HBABNE؅y1H}1LLrIALDH[A\A]A^A_]UHAWAVAUATSHHuLHGHLtvHML!Ml$E1L}L}HÐH{ HWL9EI9IBEBLDEEyH[HufHCHH]L}uH]L}L9t8HEH8HWHs HFH9E1H9HBDCCDEELILH[A\A]A^A_]fDUHAWAVAUATSHIHHCH9H]LeM$$M|$Lv I^I9HuE1L9LHBDBLLDEEL9EI9IB߸DBLLHDEEHEH{(t;Ls I~ HWI4$HFH9E1H9HBDC>DEEHLL}HEI9GILII|$ HWLuI6HFH91H9HBCE؅LLRLeLmM9l$ tLIL}I?HWIv HFH91H9HBCE؅xPLLPH[A\A]A^A_]1HLLVLLI|$t.LLL+1LLHM-I}tLLLL1LLL 1LLLH[A\A]A^A_] ff.UHAWAVAUATSPIIIIFHAHEu8L9t3I}HWIt$ HFH9E1H9HBDCDEA@HH{ LH{(IL8AHLHM5IF(HH[A\A]A^A_]ffffff.UHAWAVAUATSHIHGHH}t^L}M'I\$E1IIv HVH9EH9HCEBLDEIFINEHHHHuEML}yLwH}L;wtDLWII|$ HWI7HFH9E1H9HBAB^E؅y1H}1LLbIALDH[A\A]A^A_]UHAWAVAUATSPIIII+?E1HHIFIFIt'HH<}IM&MfHLI^IMoL9tDLuM}E1@K<4J43ABD3CD4JD3IL9uI)IOd<LuMfH[A\A]A^A_]UHAWAVAUATSHHuLHGHLtvHML!Ml$E1L}L}HÐH{ HWL9EI9IBEBLDEEyH[HufHCHH]L}uH]L}L9t8HEH8HWHs HFH9E1H9HBDCDEELILH[A\A]A^A_]fDUHAWAVAUATSH8IIII^I;^HsHCCIFH}LAD$EI^LsM)M~,IIHfH{HhCCIHIHuLIEAGHEHxH;=iHHuHI+HHHHɺHEH9LesH H9UHHUHFILuM6M9Mt=Mo1fDI<I4ADADIDHL9uM)IOl,LH]HCAEILuI^L9tVHCHEE1ffff.K|5K47PCD7CD5KD7IH9uHEL)HMlLuM~IL9tFL5ch!HHuHHxL9uHI9uLuM>MtLM&MnLeMfH8[A\A]A^A_]UHAWAVAUATSH(IIIpujH=ptZHupL(1Mt6H5; H]HUH6LH}HHEHxH;=wguYHoH=ovH5oLmL|I$LLLPAG L-}H([A\A]A^A_]ùHHukUHAWAVAUATSH(IIIfAEHI](IE0 DHH9tH; uIvLt2IE0I~LLtLu1#IHxt11LuAEIMuE1M;uLL}E1fM&A|$ HEHpLHU=mM&It$HtH}HU +M&NAD$ u1H n t$HeH8I$1H5rjM&AD$ AD$fff.ID$Ht xHuAEHIMIELH)HHH)HIcMPH)H9vSA|$t0H n9t=HfeH8I$1H5IEMtAL$ A;O ff.MII9MuqH}LI](I;]0t=L}LufDLLLLLuHI;]0u1 11ɉHEHxH;=dIE(Iu0H9HH)HHVуH9tGHQH)tH0FtHpFtHpFtHpFH HuHt&Hffffff.tHBHHut IMH; cu IMI;Mt AEH1H([A\A]A^A_]ùHHuUHAWAVAUATSHhHUIIH5bLxHUL HjH]HEHEHELeEEH}HuL H]H]LuL9tXLeML- cL}$H"LTfff.HHxL9uHI9uH]MLeHtHHxHxH;=bu{HEHxtLL?H}L9HEHxtHULLHM9HEHxH;=Hbu[HEHxH;=7bu1Hh[A\A]A^A_]ùHsHuoeHHuS붹HHu:fUHAWAVAUATSHHMIHIH}Ls(L;s0t5LmfDMLHLL|u IL;s0uHEHEHxH;=VauH[A\A]A^A_]ùHHuf.UHHH;`]ffff.UHAWAVAUATSHxAHIH5L`HULnL%gLeHEHEHEH]H]EEHuLLLeH]LuL9tYD|ML-e`LeHLHHxL9uHI9uH]MD|HtH H`HxH;=_vE[H5XLhHULwHfHH]HEHEHEHEHEEEH}HuL H]H]LuL9tDL%t_L}HLfDHHxL9uHI9uH]HtH&HhHxH;=_HEHpHtdL5^IFHpH HpHvH5 H8HuH2LH'HpHxL9u|HEHxH;=^uRLHx[A\A]A^A_]ùHxHujH>Hu0HHu땹HrHutdfUHAWAVAUATSHHMIHHH;]El$ EH}HME1M]E1E;n PH5L}HUL2HLHEH8HLHUHzH;=V]KE1HDhHIHCH;CkA|$ _He8OH]H8I$H5'He8&H\H8I$H51^HEHxH;=\HWE1AF A9}IE(ff.I} HULmI}uGHEH8H5WoIM}Iw0I;w8t L.IG0LH(HUj AGHL}IIcD$I9`AE1E1DH[A\A]A^A_]ÐUHAWAVAUATSHIIIH}IVu{H=>VtkMHVHE1Ht@H5L@HULXHLcIH@HxH;=MfL5UH=U葳MH5UH(bL=`MI_H]HEHxHHULLPuIEHP11L躲HEHxW)E)EHEHpH}HuHp1H}HuHHHHHɺHEH9sH H9<HUH<FIL9IHELutILmMgMI)E1f.J<0J43豧HEIM9uI)INd LuLmLL腧IMvMM)t3I1ېI<I4aHI9uM)IOd4LmM}LmI]L9t@L5AHHuͦDHHxL9uHI9uM}MtL6HMIMMeHEHIEH8[A\A]A^A_]Φfffff.UHAWAVAUATSHIHIM?MeIEL)HL9Lms@HM+eIHL)L9HMM9MMBMIL1LH)IIM9JHUMI)LLYHEHMHHI)M)LHL9JHHJȃH9t>HHH)fffff.L3LsLsLsLs Ls(Ls0Ls8H@HuH0Hff.L3HHuLL)LtxH9Lt@I| L)Lfff.L6LvLvLvLv Lv(Lv0Lv8H@HuHtHffffff.L6HHuHMHIHfffff.UHAWAVAUATSH(IHuIFIVHHt9HHfH9q sHIHuffffff.HQHHuHH9tH9q HGH9SH}螢H]ȃ{Hx%H}:H]ȃ{xH}'HUHHBHH9tf \u/HH9uHUHuH=^1HuL+HEH@HEHIN8I~@HHt7HHH9B sHRHuffffff.HzHHuHH9tH;B HBH9RI~0Hu,HuHFHNH)HLuu;HN(HV0H)Hu*HHHHH=1HHULrHHH=1HUHZ(H;Z0t7L=ffffff.H 1LHHHHUH;Z0uLrL;rtZL%nL-L=nHBHJLH)HH)HHcBPH)H9LIFI61L]IHUL;ruHZL9Lut'fffff.H3LUHHEH;XuHEHxH;=:uH([A\A]A^A_]ùHHufffff.UHH=֡H=ʡH=辡H=]鱡ff.UHH=]镡ffffff.UHAWAVAUATSHHIIH9HHELgHG(I9s0Lfffff.H LDH9rD)E1HDEHWHtH7HH HH h9HHHH1AHHxH;=.9HHݠLHH艞HHL觞H5wHQLHLHHxH;=8AEFf1AT ҃ HHA\  HHA\ n bHHA N BHHA\ - !HHA\   HHA\  AT ҃ HHHIHHHHHHL+LHHHxH;=f7tH5mL踜H H菜HPHl?HHHHHHHLLH>HHxH;=6H52L IcHH H<LHHHxH;=e6u8H5) L軛HP6HH;Euv1HH[A\A]A^A_]ùHHw묹HIHW8HzH4i@UHAVSIHHCHCHCHLPH ^H HCLsHCLs HC([A^]ÐUHH7HWHOLGHO HG(]ffffff.UHAVSIHHCHCHCHLH H HCLsHCLs HC([A^]ÐUHwHcH <H]1]UHH HSHD]DUHSHHHF(Ht u H5HU H5>HUHHH[]fUHHG(HG ]fUHLO A Z#   LwEDBHƒ t 1Ƀ#It`ff.#IQAAI4ffff.AHI[MQ5f.A@I tфuMx Miwawp_eaMJSrp3A@o<A@oA@lIPAHH5 cA@uA@iA@lA@dIPAHH51$z tA@uA@b7A@nsA@iA@nA@jA@aIPAHH5 r'MeZA@eA@fA@aA@uA@lA@tIPAHH5|IPA@IH|HD 9-;/@- L AA LIQMIPgMMA@uA@lA@eIPAHH5/ "iMMIQs<;]IQM H¸.J HMIQLO(HW ]IPzIPqIPhIP_IPVA@nA@cA@lA@uA@dA@eIPAHH5>sWIQMMMIPIPIPIPIPIPAsIQ1MAAMIQlIPfIP`IPZIPTIPNIPHIPBIPH[A^A_]HHu܊@UHHt HH]ŠH g%H H]fffff.UHAWAVATSIH{tDHCHxt9L{LcLLm LaHCHP11Lq{u={tH{H5C H$HH=&NIHPHt+{tH{HH $H HIHQHt D C[A\A^A_]fDUHAWAVATSH H@K9@t=H5LuHUL蔉HLHEHxH;=#CvCL{HLLsHCHxt.LeLLISHL HEHxH;=~#uSIHP11LIHP11LH [A\A^A_]ùHeHu蔈WHHuxUHH7HWHG0HG(HG HGOHGLHpHw]@UHH7HWHG0HG(HG HGOHGLHpHw]@UHAWAVAUATSHhHMHUII*uoH=*it_H+L0E1Mt:H5LmHULЇLL38IHEHxH;="zL-\*H=]* H5I*Hp7L-!I]H]H]I|$HHUHMLPH]IHpH H]H/H5t HHLLuLHH5PLÆH]HLHuH讆LuLH豆HEHxL9 HEHxH;= !H]HEHxH;= HteL}LL舆HLLHEHxH;= 11HEHpHH]1H$LLHHM(1HEHxH;=s u.HEHxH;=b u6HpT6Hh[A\A]A^A_]ùHHu蒅빹HHuy뱹HHu\HHu<HHuHHuHtHpلcfffff.UHAWAVAUATSHxHMH}LgH6HFH LALHL53L=IGHEH}Hu H}Hu(LHEHEW)EHEH]HLmLLmLHM>+HSH}LIH}H5h̓uLrH{HuLHEHxL9tE11H}HU+H}HufH}Hu!H}HU=+1H]LmL9Eu5HHu HHxL9uHI9uH]HtHvHEHxL9u EuFCHHu谂۹HHu蓂LÉ؃w9AIcLHhHLaLHHUAHhyH5LxHUL^HLpLLNH\LHHLLHUkAHpHxH;=fu[HxHxH;=Rt5H'Hu蟁E1E1E1 E1E1E1DHx[A\A]A^A_]ùHHuX@UHAWAVAUATSHIHL=IGHEHELkHuLSHL*H;Hu<H#HEHPHEHpHHPH讀H57HpHuHjL(LH蔀H5AL>LLLAH(HxL9HP2H5L HUL,LLLlAH HxH;=gtHHuE1HEHxH;=:ADHĸ[A\A]A^A_]øHxLHLhH`DHEHpW)EHEHHpHHUL]&EHH5~HEHXHpHpHLXLLH5~LH~H8HL~HH5~LHL AH8HxL9yHXHxL9HHuDE1H`HPH}Hu LmL~1HxyLH0HH5HU~HhHL[AH0HxL9 LmMI}L9ff.LmH]I9u#;H Hup}IEHxL9uIL9uLm]MtL}HpHxL9u"LHLhH`[HHu|ŹHuHu|gAE(Hu|HHu|f.LLxEL3@|HHuH|CD{ H-2HCHCHC8HC0HC(HC HCHC(HC0LHJ4A9HJ4;wBD;CD>JD;IL9uHHH)HMtL}MwHLm fhE&HLHU#HxHxE1H]L}L9u"9HHXv@HHxL9uHI9uH]L}HtHwE=A 1HxH`Lt JHH@HEHXHXL)H`HxHXHCHW)EHEALHuLGHEH}AH9H7LL;H)HHIFIFIAt-HH9uIM&MfHLI^H]LmL9tVIEHhE1fff.K<HL'kڹH1Hu k#AL`I>H&IHEIG@H5ɧHH0HjH}LH訯HHxH;=6HEHxH]tI>Hu%HuIGHLLH)HHHHH=Mw(IG8L)HH9L}sMg0M)LHHPH<jILLLkHEHx(HttjHMLy(HPIHA0IHA8HLMHI)ILL}H]1HIHPHH]HPHLHUbHEHELHpHGH`H;HUHJDpHu*E1'HCHHEHHEHpHLLiLH5̬hLL}LhHHLhHH5hH}HLHHxHH9HHxH9 AEiH}HLEAHHHHuHu1H=4DHxHcI9)HxHuL}HEHxH9u%HEHxH9u;EI#HHpgH븹HHukg묹HHuNgHHHu'gHHHugH]H]Ls(HL;s0H`HHxCTLHIM)ILI9ALsHK L)HL9srL{M)LHHxJ<gHHLLgHEHxHtfHMHYHxHHAJHA LHI9LeH]`IL;H]uOHHpeH_HHueLLHUHEHELHpH!Dt'H`H8HUHJDpHu%E1H}HLEAHEHxHH92HEHxH9KEHEHHEHpHLLeH5LdHuLdLLLdH5LdHLL EHHxH;=HHxH;=>H,HuHhH]CLHHCPH5LH8L_LHL贿AHHxL9H@HxL91LpLxM9u$?H!Hu^fIEHxL9uIM9uLpLPMtL+_H`HxL9uL0HHumHHpT^͹H-Hu7^H!Hu^fff.LCHhHH5LHUL^HL;tHH;HAH5LHUL]HhHLtHH;HHHxH;=@A0HHxH;=HEtZH5wLHULj]LLL誽AH H9Hp\(H5L HUL]HhL?sL0L`H HxH;=FM9HHt;HxHXpAH.Hpd\H5ğL(HUL\LLLAH(!HHp \HHp[H*Hp[fUHAWAVAUATSHxIHW)EHEH{HuH}LHhLuHELuH;EL=IGHpLmLhmffff.HEH;ELhuOH,HuZHHZff.IVH]HHutHpHEHHuH]H>9t:I>HuHVHt#D|LeH]L9tTM:f.H}HLѺAE1\HHu(Z IHxL9uIL9uLeH}HuLmL~AD|E H]HEHxL9HEHxL9EvLuE1qH5CH`HUHYH}HHU AH`HxH;=t0H"HuUYLLmALuH]M>L9tFEL%LuHL YfHHxL9uHI9uH]EHtHsYDHx[A\A]A^A_]DUHAWAVATSH IIHLcLt(HLte1LLLSH5H]HUHXLHL۸HEHxH;=tH Hu'X1ۈH [A\A^A_]fffff.UHAWAVAUATSHxIAHW)EHEL{HuLLOHSH}HuqHHKSHH`HpHEHEHEHDžxUEHpHhEpWHKHHHHPH@0H@(H@ H@H@HP HP(HP@H@`H@XH@PH@HH@@HPPHPXHHh E1NHCHhH`HuLLtHLAE1HEHxH;=u{H]LeL9tOL-L`&H$LFVfffff.HHxL9uHI9uH]HtHVDHx[A\A]A^A_]ùHsH`UbDUHAWAVAUATSHHI։IILAAA9'LuH5H}HUU]JIL}LHuULWLLH]UHEHxH;=H5RLuHULgUDHL}LLYUHgWLHHUH}LTHEHxH;=zHEHxH;=e]襺HHWLuLHHTLLHUAHEHxH;=urDHH[A\A]A^A_]ùHHuNTH]Hu.TOHUHuTGHHuSrUHAWAVAUATSHHHIIII;tlLeHw/L}IGL+L{LL)IIW)EHEt|LH<TILuLuIMLeL+L{NIHH)HHHH H9H ALEI9H]IE1M9t?Mg1I<It0SADADIDHL9uM)IOt&LuHELpIFL}L)H~;HHHHHIƸI~LTpHIHHuL;pH]L}L9tGL%Lu!HL1RfHHxL9uHI9uH]HPHRCI9IJH<@RIIL9Lut Lu@LH5HII9uLHuII_L9t+ffffff.LLIIL9uMgIL9LmL}L-LeDL;LcM9u$:H Hu!QfIHxL9uIM9uL;LeMtLQHL9uL}M'LmMtLbQHMIMwKDmHIGHH[A\A]A^A_]Pf.UHSHHH3Ht"H}1QxHiE@BHcMHHKH[]Q8RHH=1H3,UHSHHH3Ht"H}1QxHiE@BHcMHHKH[]P8ERHH=\1H+UHSHHHHt,@H}1.Qx!HiE@BHcMHH+KHHHH[]JP8QHH=1Hi+fUH]fDUHAWAVSPIIOHHHHH]HL:OCHCIvI;vt HIF HUL'HEH[A^A_]UHAWAVATSIIIv1H9HH)HHVуH9u1ZHQH)1f.H8L@H?_9LI0v9MHpH6v9MHpH6v9MH HuHtHِHHR9MHHuH=FHRH RLQL S1OM&M;ftTL=Effff.I$WH*@f(^ 'uHW*^HLOIM;fu[A\A^A_]UHHH}1NxHiM@BHcEHH]N8OHH=1H4)@UHHH}1Nx1HiM@BHcEHHS㥛 HHH?HHH]M8:OHH=Q1H(UHAWAVAUATSHIHHCH;Ct0HHHH{HGHCHHWL)H)L!NIHUHH+HHHHҾHEH9sH H9HuH<LIL+MM)LLLMKHE)HHUHٗHHHEL%IL$HMHpHH]H%>H5jH=HuH=L}LH>H5iL=LL=HEHxL9u1HEHxH;=%u9HEHxH;=uA1H0[A\A^A_]ùHHuR=붹HHu9=뮹HHu =UHAWAVAUATSPIIIID$ID$I$MoXIG`I9fffff.IMHY(H;Y0tDfHHH H;H(u#It$I;t$t HID$ LH1HIEH;X0uIG`II9uI9GXtI$I;D$uH5-L^<LH[A\A]A^A_]fffff.UHAWAVAUATSPIIIIH9tZHH)IIIFIFItALH=uim<IM&MfKIFMnIILLMIE1H)LH$=LI]LH[A\A]A^A_];fff.UHAVSHIIFINH)t&H1ffffff.H4HuHH9rHELu1HuLuH]DHF@ @H HuHuIFXIv`H9HH)HHVуH9t_HQH)ffffff.H0FHHpFHHpFHHpFHHp FHHp(FHHp0FHHp8FHH@HuHt"Hffffff.HBHHHuH[A^]UHAWAVAUATSHIIFINH)t H1fHHuHH9rHELuaHULuL%L=H]L-cHBH0x LtxLH xHEыH81Lu;HHUHuI~PH=R_;Mf@I0M9~L-nM|$(I7H~tWIWHH 1H=~ ;I_(I/fffff. :H{ LzHD9HL9uL49IM9uH[A\A]A^A_]ff.UHAWAVSPHIHt+ff.HsLL{H9MLuH[A^A_]DUHAWAVSPHIHt.ff.HsLL{LHMLuH[A^A_]fUHAWAVAUATSHII^(Mf0L9tHL-xL}"H L7f.HHxL9uHI9uI^(HtH&8IF HxH;=uL 8H[A\A]A^A_]ùHHuQ7fUHAWAVAUATSPIIMoIOHt7II~ I4$At?LmI9AtI<$Hs AAſ(D7II$IF ALHHM;1BI9ݰt I<$Hs AEп(7II$IF }LHL6IG(LH[A\A]A^A_]fUHAWAVATSHIMwIG IGIGIGHc]HHHH)Hff.HH~HHH94sAH ]H9tL LH=ui1Mt1J<6HIHt5I_I_JIGLHEHMLH(IG H[A\A^A_]H=@z5UHAWAVAUATSHIHIM?MeIEL)HL9Lms@HM+eIHL)L9HMM9MMBMIL1LH)IIM9JHUMI)LL 6HEHMHHI)M)LHL5JHHJȃH9t>HHH)fffff.L3LsLsLsLs Ls(Ls0Ls8H@HuH0Hff.L3HHuLL)LtxH9Lt@I| L)Lfff.L6LvLvLvLv Lv(Lv0Lv8H@HuHtHffffff.L6HHuHMHIH2DEEHLL}HEI9GIL0II|$ HWLuI6HFH91H9HBC1E؅LLRLeLmM9l$ tL0IL}I?HWIv HFH91H9HBC1E؅xPLL@H[A\A]A^A_]1HLLVLLI|$t.LLL+1LLHM-I}tLLLL1LLL 1LLLH[A\A]A^A_] ff.UHAWAVAUATSPIIIIFHAHEu8L9t3I}HWIt$ HFH9E1H9HBDC0DEA0/HH{ L/IEHC(AHLHM=/IF(HH[A\A]A^A_]UHAWAVAUATSHIHGHH}t^L}M'I\$E1IIv HVH9EH9HCEBL/DEIFINEHHHHuEML}yLwH}L;wtDLg.II|$ HWI7HFH9E1H9HBABn/E؅y1H}1LLrIALDH[A\A]A^A_]UHAWAVAUATSHHuLHGHLtvHML!Ml$E1L}L}HÐH{ HWL9EI9IBEBL.DEEyH[HufHCHH]L}uH]L}L9t8HEH8HWHs HFH9E1H9HBDCc.DEELILH[A\A]A^A_]fDUHAWAVAUATSHIHHs HLCH]LKM)M&LuI^5Hr L[LHHqAAL9u LWIL~IrH)L@i[1iו[i[1iQ[1iו[i[1HHuMti [1iʕ[i[1LHI)IL IItItIuQ1Q1 1i[ 1iɕ[11IHUM,Mt+M@I9_uMwI>LH,tHM?Muܿ +HUHJHHH HRHPHHL(HUHJHuHLpHB LH[A\A]A^A_]f.UHAWAVAUATSH(IIEI+EHHEH9gHRAHHHH)Hfffff.HH~HHH94sH RH9tL MN5!L;eHE1MAt5LH=J<H}*HH]N4HHu*JHEH}}LuI}E1H]9f. 1iȕ[11IIJHILI}NMMKMsDD1IMILHHHAAL9uL]fIJH)LfDDi([DD1i[iҕ[1iX[1i[iҕ[1HHuMti[1i[iҕ[1LHI)MLMAH]It$ItIAA1AA1A1iЕ[IL;EHELuI}I]IMIEHMMuHt(H([A\A]A^A_](UHAWAVAUATSPIMFMNM)L>LnD5Ir IUHHHyAAL9uL`LLIzH)Lf.i1[1i[i[1iY[1i[i[1HHuMti [1iΕ[i[1HHH)ILIHtHtHuQ1Q1 1i[ 1iɕ[11IIE1Ht.E1DL9kuH{LLi(t HHuILLH[A\A]A^A_]DUHAVSH H5[H]HUH&H=H&L5TL5HHHHHHfHnfpDHEHxH;=H=H5BH3@&H5fkH]HUH%H=XH%NHL5EHbHOH<H)HHfHnfpD HEHxH;=οH=QH5Hs?%H5jH]HUH9%H=H6%HHHHHHfHnfpDHEHxH;=)ucH=H5aH>-%H [A^]ùHjHuO$\H Hu/$HHu$널UHAVSHIt))P)`)p)])e)m)u)}LHL@H8H0H(HHH H=i$H HEHEHEE0EH;HUL%H3 $:$UHAVSHIt))P)`)p)])e)m)u)}LHL@H8H0H(HpHHEHjH H=h#H HEHEHEE0EH;HUL$H3 #HHH;Eu H[A^]#UHAVSHIt))P)`)p)])e)m)u)}LHL@H8H0H(HHHEHzH H=g #H HEHEHEE0EH;HUL$H3 "HHH;Eu H[A^]"UHAWAVAUATSH(IIHPuoH=E!t_HuL(E1Mt:H5FgLeHUL5!LLIHEHxH;=vL%H=q!H5H}}HHHHM1HtxHx H H;HuLLXtHu1H 1H}H([A\A]A^A_]ùHdHu1 VfDUHAWAVAUATSH(IHIIHHHEЊH= tvLH&L0E1MtCH5fLHLLLCIHHxH;=L-H= LH5HIHt&LAIW/IEH9s*HpE1HH5|e L'1 H@.uDLJI9It A9/Mu,HEa.ZYHAYHH9HrbAIcHAD:Hƒ/t @9HH9u[/HSIcAHHHHHHH;Eu7H([A\A]A^A_]ùH>H-lH= d1Lffffff.UHAWAVAUATSPIIIHHHtI1H@<@ۃ r@߀ÿۃrՃ4w'Hs!HH9rLLH[A\A]A^A_]IEHXL{L;xw xH~LLIEHH'IE@LxH ND9D|IHYE1HtYD}L=DI̐A$'u+IEHpMI)1LLLjLIHuIL@D}HIIEHpI)1L[IEHXLsL;pw xH~LL;IEHH'IE@LpD|H[A\A]A^A_]fDUHAWAVAUATSPIIIHHHt$1fffff.4"t!HH9rLLH[A\A]A^A_]IL`I\$H;Xw xL~LHIHH"I@HXH ŵBT IHYE1HۈUtuE1Ifffff.A$"t\u>IHHt [A^A_][A^A_] 8 HH=[Q8 HH=3Q1Hffffff.UHAWAVAUATSPIIIGH9ffffff.H yu1+y 5ܫI IGHH9uIH9L-7Lu!HQLGfL#MtBI|$xJA|$ H tLI$HxL9uLIGHH9uII_H[A\A]A^A_]UH]fDUHAWAVATSHAIIvHHdHHCC D{H]HLLIvI;vt HIF HULHEH[A\A^A_]UHAWAVAUATSHIW)E)E)E)E)E)p)`)PIEIU1H9t@1fff.HHcIHxHH Pq9NHH9uMHP11E1t1EH}tUEԨu6@u=tQE58hH=N1_i] H=%@%B%D%F%H%J%L%N%P%R%T%V%X%Z%\%^%`%b%d%f%h%j%l%n%p%r%t%v%x%z%|%~%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%›%ě%ƛ%ț%ʛ%̛%Λ%Л%қ%ԛ%֛%؛%ڛ%ܛ%ޛ%L1AS%!hh#hGhahxhhhhh h$h>xhXnhpdhZhPhFhh_ hhh hAhghhhh8hThdhyhh~hthjh`hVhLhBh8h.h!$h0h>hKhZhihwhhhhhhhhhhhzh)ph8fhL\haRhoHh~>h4h*h hh hhhhhh?hhhhhhhh>hahpvhlhbhXhNhDh:h0h&h h h' h6 hK hZ hk hz h h h h h h h h #!/usr/bin/env python # # Copyright 2001 Google Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Simple web server for browsing dependency graph data. This script is inlined into the final executable and spawned by it when needed. """ from __future__ import print_function try: import http.server as httpserver except ImportError: import BaseHTTPServer as httpserver import argparse import os import socket import subprocess import sys import webbrowser try: from urllib.request import unquote except ImportError: from urllib2 import unquote from collections import namedtuple Node = namedtuple('Node', ['inputs', 'rule', 'target', 'outputs']) # Ideally we'd allow you to navigate to a build edge or a build node, # with appropriate views for each. But there's no way to *name* a build # edge so we can only display nodes. # # For a given node, it has at most one input edge, which has n # different inputs. This becomes node.inputs. (We leave out the # outputs of the input edge due to what follows.) The node can have # multiple dependent output edges. Rather than attempting to display # those, they are summarized by taking the union of all their outputs. # # This means there's no single view that shows you all inputs and outputs # of an edge. But I think it's less confusing than alternatives. def match_strip(line, prefix): if not line.startswith(prefix): return (False, line) return (True, line[len(prefix):]) def parse(text): lines = iter(text.split('\n')) target = None rule = None inputs = [] outputs = [] try: target = next(lines)[:-1] # strip trailing colon line = next(lines) (match, rule) = match_strip(line, ' input: ') if match: (match, line) = match_strip(next(lines), ' ') while match: type = None (match, line) = match_strip(line, '| ') if match: type = 'implicit' (match, line) = match_strip(line, '|| ') if match: type = 'order-only' inputs.append((line, type)) (match, line) = match_strip(next(lines), ' ') match, _ = match_strip(line, ' outputs:') if match: (match, line) = match_strip(next(lines), ' ') while match: outputs.append(line) (match, line) = match_strip(next(lines), ' ') except StopIteration: pass return Node(inputs, rule, target, outputs) def create_page(body): return ''' ''' + body def generate_html(node): document = ['

%s

' % node.target] if node.inputs: document.append('

target is built using rule %s of

' % node.rule) if len(node.inputs) > 0: document.append('
') for input, type in sorted(node.inputs): extra = '' if type: extra = ' (%s)' % type document.append('%s%s
' % (input, input, extra)) document.append('
') if node.outputs: document.append('

dependent edges build:

') document.append('
') for output in sorted(node.outputs): document.append('%s
' % (output, output)) document.append('
') return '\n'.join(document) def ninja_dump(target): cmd = [args.ninja_command, '-f', args.f, '-t', 'query', target] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True) return proc.communicate() + (proc.returncode,) class RequestHandler(httpserver.BaseHTTPRequestHandler): def do_GET(self): assert self.path[0] == '/' target = unquote(self.path[1:]) if target == '': self.send_response(302) self.send_header('Location', '?' + args.initial_target) self.end_headers() return if not target.startswith('?'): self.send_response(404) self.end_headers() return target = target[1:] ninja_output, ninja_error, exit_code = ninja_dump(target) if exit_code == 0: page_body = generate_html(parse(ninja_output.strip())) else: # Relay ninja's error message. page_body = '

%s

' % ninja_error self.send_response(200) self.end_headers() self.wfile.write(create_page(page_body).encode('utf-8')) def log_message(self, format, *args): pass # Swallow console spam. parser = argparse.ArgumentParser(prog='ninja -t browse') parser.add_argument('--port', '-p', default=8000, type=int, help='Port number to use (default %(default)d)') parser.add_argument('--no-browser', action='store_true', help='Do not open a webbrowser on startup.') parser.add_argument('--ninja-command', default='ninja', help='Path to ninja binary (default %(default)s)') parser.add_argument('-f', default='build.ninja', help='Path to build.ninja file (default %(default)s)') parser.add_argument('initial_target', default='all', nargs='?', help='Initial target to show (default %(default)s)') args = parser.parse_args() port = args.port httpd = httpserver.HTTPServer(('',port), RequestHandler) try: hostname = socket.gethostname() print('Web server running on %s:%d, ctl-C to abort...' % (hostname,port) ) print('Web server pid %d' % os.getpid(), file=sys.stderr ) if not args.no_browser: webbrowser.open_new('http://%s:%s' % (hostname, port) ) httpd.serve_forever() except KeyboardInterrupt: print() pass # Swallow console spam. 0C0E0C0Eư># ninja log v%d 5a 0`   0 ` Y0`# ninjadeps /@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@``@``````````@@@@@@@``````````````````````````@@@@`@``````````````````````````@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ࠀ@@5a 0`   0 ` Y0`'\'build.ninjaninja: Entering directory `%s' chdir to '%s' - %s%srebuilding '%s': %smanifest '%s' still dirty after %d tries helpversiond:f:j:k:l:nt:vw:C:hinvalid -j parameter-k parameter not numeric; did you mean -k 0?-l parameter not numeric: did you mean -l 0.0?liststatsexplainkeepdepfilekeeprspnostatcacheunknown debug setting '%s', did you mean '%s'?unknown debug setting '%s'browsebrowse dependency graph in a web browsercleanclean built filescommandslist all commands required to rebuild given targetsdepsshow dependencies stored in the deps loggraphoutput graphviz dot file for targetsqueryshow inputs/outputs for a pathtargetslist targets by their rule or depth in the DAGcompdbdump JSON compilation database to stdoutrecompactrecompacts ninja-internal data structuresurtle%10s %s unknown tool '%s', did you mean '%s'?unknown tool '%s'hgrexpected a rule to clean'' has no out edgeedge has no outputsunknown target ', did you mean 'ninja -t clean'?, did you mean 'ninja -h'?, did you mean ''?%s: deps not found %s: #deps %d, deps mtime %d (%s) STALEVALID %s expected a target to query%s: input: %s | || %s%s ruledepthallunknown target tool mode '%s', did you mean '%s'?unknown target tool mode '%s'%s: %s cannot determine working directory: %s { "directory": "", "command": "", "file": "" } ]vector::_M_fill_insert 13 ,3;2!2; 8 ,;<11!; 5 `'<10!(2`'2! 11 ,6;, `\. `\9 .,c13$ec,. 6 ,2;11!>; `. ,;!2> .e8$2".2 "?7$e. <:<8!'` 2.3,.2` ,3!' ;,(?7";2!2'<; `?6$PF ,;, 2 `'4!8;<3;5! J2$b,`!>;2!:2!`,d?b`!> 26 `'-;,(<9!> $F3 )3.:!.2 d"2 ) !> 30 7`2'<3!- "=-='5 .2 `2-=",!> 25 .ze9$er2 .,cd16$bc.' 22 .e14$,26$. 21 z45$c . 20 J50$c 20 14$P"`?34$b 20 14$ dbc `2"?22$?7$c 20 ?18$c.6 4"8?4" c8$P 9 .2,.8 "20$c.3 ._14 J9$ .2,2c9$bec,.2 `?21$c.3`4%,3%,3 c8$P" 22$c2 2"?21$bc2,.2` .2,c7$P2",cb 23$b bc,.2"2?14$2F2"5?2",J5$P" ,zd3$ 24$ ?$3?%3 `2"2?12$bcucd3$P3"2 2=7$ 23$P" ,3;<5!>2;,. `4"6?2"2 ,9;, `"?2$ dupbuild=errdupbuild=warnunknown warning flag '%s', did you mean '%s'?unknown warning flag '%s'usage: ninja [options] [targets...] if targets are unspecified, builds the 'default' target (see manual). options: --version print ninja version ("%s") -C DIR change to DIR before doing anything else -f FILE specify input build file [default=build.ninja] -j N run N jobs in parallel [default=%d, derived from CPUs available] -k N keep going until N jobs fail [default=1] -l N do not start new jobs if the load average is greater than N -n dry run (don't run commands but act like they succeeded) -v show all command lines while building -d MODE enable debugging (use -d list to list modes) -t TOOL run a subtool (use -t list to list subtools) terminates toplevel options; further flags are passed to the tool -w FLAG adjust warnings (use -w list to list warnings) builddir/.creating build directory %s: %s.ninja_log/loading build log %s: %sfailed recompaction: %sopening build log: %s.ninja_depsloading deps log %s: %sopening deps log: %sninja: build stopped: %s. interrupted by userpath->node hash load %.2f (%d entries / %d buckets) ninja: no work to do.debugging modes: stats print operation counts/timing info explain explain what caused a command to execute keepdepfile don't delete depfiles after they're read by ninja keeprsp don't delete @response files on success multiple modes can be enabled via -d FOO -d BARninja subtools:warning flags: dupbuild={err,warn} multiple build lines for one targetusage: ninja -t clean [options] [targets] options: -g also clean files marked as ninja generator output -r interpret targets as a list of rules to clean instead outputs:ninja: pipeninja: forkninja: dup2python---ninja-command-fninja: execvpninja: writeNINJA_STATUS[%f/%t] FAILED: %d%.1f%3i%%%.3funknown placeholder '%%%c' in $NINJA_STATUS, needed by '', missing and no known rule to make itdependency cycle: pending: %d want ready: %d unknown target: 'subcommands failedsubcommand failedcannot make progress due to previous errorsstuck [this is a bug]StartEdgecommand '' failed.FinishCommandError writing to build log: Error writing to deps log: msvcgccedge with deps=gcc but no depfile makes no sensedeleting depfile: unknown deps type '%s'?.ninja_log loadrbuild log version invalid, perhaps due to being too old; starting over%d %d %d %s %llx .ninja_log recompactwbRemove %s Cleaning...%d files. unknown target '%s'Target %s unknown rule '%s'Rule %s Note: including file: program filesmicrosoft visual studio.c.cc.cxx.cpp depfile has multiple output pathsexpected ':' in depfileab.ninja_deps loaddeps log version change; rebuildingbad deps log signature or version; starting overpremature end of file; recovering.ninja_deps recompact.recompactstat(): wWriteFile(%s): Unable to create file. %sWriteFile(%s): Unable to write to the file. %sWriteFile(%s): Unable to close the file. %smkdir(%s): %sremove(%s): %scommanddepfiledescriptiongeneratorpoolrestatrspfilerspfile_contentmsvc_deps_prefix[$]node statninja explain: %s has no in-edge and is missing ninja explain: %s is dirty ninja explain: output %s of phony edge with no inputs doesn't exist ninja explain: output %s doesn't exist ninja explain: %soutput %s older than most recent input %s (%d vs %d) restat of ninja explain: command line changed for %s ninja explain: command line not found in log for %s inin_newlineout -> cycle in rule variables: ;rspfile=%s[ %s --%s-> (in pool '%s')(null pool?)] 0x%p %s <%s 0x%p> mtime: %d%s, (:%s), (:missing) dirty cleanin-edge: +- depfile loadninja explain: depfile '%s' is missing : ninja explain: expected depfile '%s' to mention '%s', got '%s' ninja explain: deps for '%s' are missing ninja explain: stored deps info out of date for '%s' (%d vs %d) no in-edge out edges:"%p" [label="%s"] "%p" -> "%p" [label=" %s"] "%p" [label="%s", shape=ellipse] "%p" -> "%p" style=dotted"%p" -> "%p" [arrowhead=none%s] digraph ninja {rankdir="LR"node [fontsize=10, shape=box, height=0.25]edge [fontsize=10]}%s:%d: ^ near hereinputlexing error'build'':''default''='identifier'include'indentnewline'||''|''pool''rule''subninja'eof ($ also escapes ':')tabs are not allowed, use spacesunexpected EOFbad $-escape (literal $ must be written as $$):TERMdumb.ninja parseloading '': ninja_required_versionunexpected expected pool nameduplicate pool 'invalid pool depthunexpected variable 'expected 'depth =' lineexpected rule nameduplicate rule 'rspfile and rspfile_content need to be both specifiedexpected 'command =' lineexpected variable nameexpected target nameexpected pathexpected build command nameunknown build rule 'unknown pool name 'multiple rules generate [-w dupbuild=err]multiple rules generate %s. builds involving this target will not be correct; continuing anyway [-w dupbuild=warn]multiple outputs aren't (yet?) supported by depslog; bring this up on the mailing list if it affects youexpected , got vector::reserve%-*s %-6s %-9s %s metriccountavg (us)total (ms)%-*s %-6d %-8.1f %.1f gettimeofday: %s%s (%d/%d) -> consolephonylookup nodecould not determine root nodes of build graph%s %s [id:%d] dirtyunknownresource_pools:ninja: fatal: ninja: warning: ninja: error: canonicalize strcanonicalize pathempty pathpath has too many components : %srbfcntl(F_GETFD)fcntl(F_SETFD)...basic_string::substr1.7.1ninja executable version (%s) greater than build file ninja_required_version (%s); versions may be incompatible.ninja version (%s) incompatible with build file ninja_required_version version (%s).pipe: %sposix_spawn_file_actions_init: %sposix_spawn_file_actions_addclose: %sposix_spawnattr_init: %sposix_spawnattr_setsigmask: %s/dev/nullposix_spawn_file_actions_addopen: %sposix_spawn_file_actions_adddup2: %sposix_spawnattr_setflags: %s/bin/sh-cposix_spawn: %sposix_spawnattr_destroy: %sposix_spawn_file_actions_destroy: %sread: %swaitpid(%d): %sninja: sigpendingsigprocmask: %ssigaction: %sninja: pselect44Xa! P XXp& XX @pP **`++--055:<P> A@C`CCJ0K@P0R0SpS`WpWYYZ^@_P__`apcc@eegg`@p  p@PpPP@`пp0P 0 PPp``P @ 0  T\P0  `$p$$%@%%,-2@3P3`446@7pf0gnoo`pqprsst0u`uvww@yzz{|}`~  0  0Ю0p` 00@иPzRx ,AC P,LAC M,|-AC K,+AC K$#AC ,@AC P$4AC I,\AC M$(AC J,bAC M,dAC M,IAC M$D0DAC B,lXAC J$KAC F,|AC J,0AC M$$AC G,LhAC J,|8>AC M,HAC M,8AC J$ KAC F,4@AC M,dAC M,AC J,0AC M,AC M$$AC I$LXAC F,t |AC J,pAC M,|AC JzRx ,(AC KzRx ,AC M$L AC $t AC $psAC G,AC M,H AC M$$8qAC G,LAC M$|pAC E$8vAC $vAC $@AC E,AC M$L AC ,tAC K$AC F$9AC C,AC J,$AC J,TH#AC M,HAC J$AC F$ AC $~AC B,,P AC M,\ AC G$!AC F$x"AC F$@#=AC B,X#AC M$4$=AC B,\$}AC M, &AC M$&AC ,x&AC M,8,tAC M,D/AC P,t8AC P$h>8AC B$>=AC B,>QAC J$$?KAC F$L?pAC F$t8@mAC F$@AC $h@AC C$@lAC B$(A AC $< AAC ,dAQAC J$8BKAC F,`BAC J,PCAC J, @DAC J,L EAC J,| PGAC JzRx $(H[AC $DI AC $lhI AC ,PIAAC J,pIAAC J$I5AC E$I5AC E$DIAC F$lHJ&AC B$PJ AC ,8JAC G,JAC M,O}AC M$LQDAC ,t0QhAC P,pVUAC M$W4AC ,W AC K,,XAC M,\[{AC J,H]AC M,_AC M,aCAC M,dAC MzRx $fAC B$DgAC B$lgAC $hAC $phAC $hhuAC E$ h;AC ,4hlAC M$dj#AC B$ jAC G$j^AC B$j!AC ,jAC M$4lrAC C,\lAC K$mAC F$nAC F,@oAC J, pAC J$<@qAC F,drAC K,rAC M,tAC M,huAC JzRx ,0vAC M,LwAC G,|wAC K$`yAC I,yAC MzRx ,|AC MzRx $DAC B$D&AC B$lDAC B$ AC F,ȀAC M$%AC ,AC M,D`KAC K$t*AC ,AC K,AC P$AC G,$@AC MzRx $GAC G,DAC P$tAC F$ȕYAC C$$AC $]AC B$@AC $<(AC $d AC zRx ,AC MzRx $8qAC F$D#AC B,lAC M$(AC B, SAC M$P+AC B$XRAC F$D#AC B,lAC M$8-AC B$@AC C$ AC ,AC J,DPAC M$tAC G$AC G,pAC J$6AC B$;AC B,D AC M,tAC M,5AC M,AC J, AC M,45AC M,dAC J,AC M,PAC M,5AC M,$ AC J,TAC M,AC J, AC M,lAC MzRx ,AC M,LȳYAC M,|AC M,AC M$AC ,AC M,4!AC M,dAC K$AAC ,ؿ@AC M,'AC M,dAC G,L(AC M,|AC J,(AC M,AC M$ AC F$4AC $\AC B$AC F,hAC M,AC P$ [AC G$4@aAC G,\AC J,AC M,<AC M,2AC M,AC MzRx ,@AC M$L5AC $t(AC zRx ,LAC P$L(_AC C$t`!AC $h_AC C$AC $AC $GAC E$<AC $doAC $oAC $0*AC C$8AC C, AC MzRx $AC I$D0 AC $l AC I$2AC ,AC G, AC KzRx $<AC $D<AC ,l"AC M,pAC M,pAC P,AC P,,AC P,\@AC M,AC K,+AC M,AC M,P!FAC MzRx $X$]AC E$D$]AC E$l$gAC E$% AC $$xAC F,P%IAC G$p&LAC $<&hAC ,d&AC MzRx $'AC $D'AC $l'AC ,'AC J$0(qAC F$(+AC $(FAC B$<(FAC B$d(AC G$H*AC B$@*AC G,+SAC M$ ,+AC B$4,AC G,\x- AC M$X.AC I, /AC M$/\AC C$ 0oAC E$4@1XAC B,\x1AC K,2AC J,3AC J$849AC G,P5eAC M$D6KAC F$l6NAC F,6AC M,p7AC J,`8 AC K,$@9AC M,T<5AC M,>AC J,0?AC M,@AC M,@AC M,D`BAC M,tD{AC J$0FAC GzRx $HAC J$D8IAC J$lJAC J,J*AC M,KAC P,8NAC J,$OAC J,THQVAC N$xRSAC B,RAC M,SAC P, UAC M$<UAC $dUaAC , V~AC K$pWFAC CzRx ,WAC M$LPXAC GzRx $X&AC $DX&AC $lX\AC B$(YxAC B$Y\AC B$YAC I$ \AC H$4\ AC $\\ AC $\ AC $\cAC $\jAC I$@^ AC $$(^AC F,L_AC J$|_ AC ,_AC K,(`~AC P$xbaAC C,,bAC J,\pcAC M,`dQAC J؈HPZdnx",6@JT^hr|&0:DNXblv  *4>HR\fpz$.8BLV`jt~h%%0'$)P(RX+},/3 6= 7Gk llkkPЏp@@@pp+9&','4'8'B'F'Q'['b'o'j's'z'''m,@__ZNSs4_Rep11_S_terminalEQr8@__ZNSs4_Rep20_S_empty_rep_storageE@__ZdaPv@__ZdlPv@__Znam@__Znwm@___stack_chk_guard@___stderrp@___stdoutp@_optarg@_optind@dyld_stub_binder@__ZdaPvQr@__ZdlPv@__Znam@__Znwmr@__ZNKSs12find_last_ofEPKcmmr@__ZNKSs13find_first_ofEPKcmmr@__ZNKSs4findEPKcmmr@__ZNKSs4findEcmr@__ZNKSs7compareEPKcr@__ZNSs12_M_leak_hardEvr@__ZNSs4_Rep10_M_destroyERKSaIcEr@__ZNSs6appendEPKcmr@__ZNSs6appendERKSsr@__ZNSs6appendEmcr@__ZNSs6assignEPKcmr@__ZNSs6assignERKSsr@__ZNSs6resizeEmcr@__ZNSs7replaceEmmPKcmr@__ZNSs7reserveEmr@__ZNSs9_M_mutateEmmmr@__ZNSsC1EPKcRKSaIcEr@__ZNSsC1EPKcmRKSaIcEr@__ZNSsC1ERKSsr@__ZNSsC1ERKSsmmr@__ZNSsC1EmcRKSaIcEr@__ZSt17__throw_bad_allocvr@__ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_baser@__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_baser@__ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_baser@__ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_baser@__ZSt20__throw_length_errorPKcr@__ZSt20__throw_out_of_rangePKcr@__ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS_r@__ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_r@___cxa_guard_acquirer@___cxa_guard_releaser@___bzeror@___cxa_atexitr@___errorr@___stack_chk_failr@___tolowerr@__exitr@_atoir@_atolr@_chdirr@_closer@_dup2r@_execvpr@_exitr@_fcloser@_fcntlr@_feofr@_ferrorr@_fflushr@_fgetsr@_filenor@_fopenr@_forkr@_fprintfr@_fputcr@_freadr@_fseekr@_ftellr@_fwriter@_getcwdr@_getenvr@_getloadavgr@_getoptr@_getopt_longr@_gettimeofdayr@_ioctlr@_isattyr@_killr@_memchrr@_memcmpr@_memcpyr@_memmover@_memsetr@_mkdirr@_perrorr@_piper@_posix_spawnr@_posix_spawn_file_actions_addcloser@_posix_spawn_file_actions_adddup2r@_posix_spawn_file_actions_addopenr@_posix_spawn_file_actions_destroyr@_posix_spawn_file_actions_initr@_posix_spawnattr_destroyr@_posix_spawnattr_initr@_posix_spawnattr_setflagsr@_posix_spawnattr_setsigmaskr@_printfr@_pselect$1050r@_putcharr@_putsr@_readr@_remover@_renamer@_setvbufr@_sigactionr@_sigpendingr@_sigprocmaskr@_snprintfr@_sscanfr@_stat$INODE64r@_strcmpr@_strerrorr@_strlenr@_strtodr@_strtolr@_strtoullr@_sysconfr@_truncater@_unlinkr@_vfprintfr@_waitpidr@_write__mh_execute_header@&0PPP @@@@  @@Pppp PPP@@0 P @ @0`0P0P00 `0`0 0`00@@ Pp  `p@ `0` P p0 @@@ 2 ``pPp 0PP 0p`PP`pP00``ppD[DPd<<BEa4Qdt"3FYjL}\,7BMTZ`gnt| !/6>DLT\emt|(G`v&4<FNV^hq{  !"#$%()&'*+/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ,-.VW~@  !"#$%()&'*+/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}__mh_execute_header__ZNKSs12find_last_ofEPKcmm__ZNKSs13find_first_ofEPKcmm__ZNKSs4findEPKcmm__ZNKSs4findEcm__ZNKSs7compareEPKc__ZNSs12_M_leak_hardEv__ZNSs4_Rep10_M_destroyERKSaIcE__ZNSs4_Rep11_S_terminalE__ZNSs4_Rep20_S_empty_rep_storageE__ZNSs6appendEPKcm__ZNSs6appendERKSs__ZNSs6appendEmc__ZNSs6assignEPKcm__ZNSs6assignERKSs__ZNSs6resizeEmc__ZNSs7replaceEmmPKcm__ZNSs7reserveEm__ZNSs9_M_mutateEmmm__ZNSsC1EPKcRKSaIcE__ZNSsC1EPKcmRKSaIcE__ZNSsC1ERKSs__ZNSsC1ERKSsmm__ZNSsC1EmcRKSaIcE__ZSt17__throw_bad_allocv__ZSt18_Rb_tree_decrementPKSt18_Rb_tree_node_base__ZSt18_Rb_tree_decrementPSt18_Rb_tree_node_base__ZSt18_Rb_tree_incrementPKSt18_Rb_tree_node_base__ZSt18_Rb_tree_incrementPSt18_Rb_tree_node_base__ZSt20__throw_length_errorPKc__ZSt20__throw_out_of_rangePKc__ZSt28_Rb_tree_rebalance_for_erasePSt18_Rb_tree_node_baseRS___ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS___ZdaPv__ZdlPv__Znam__Znwm___bzero___cxa_atexit___cxa_guard_acquire___cxa_guard_release___error___stack_chk_fail___stack_chk_guard___stderrp___stdoutp___tolower__exit_atoi_atol_chdir_close_dup2_execvp_exit_fclose_fcntl_feof_ferror_fflush_fgets_fileno_fopen_fork_fprintf_fputc_fread_fseek_ftell_fwrite_getcwd_getenv_getloadavg_getopt_getopt_long_gettimeofday_ioctl_isatty_kill_memchr_memcmp_memcpy_memmove_memset_mkdir_optarg_optind_perror_pipe_posix_spawn_posix_spawn_file_actions_addclose_posix_spawn_file_actions_adddup2_posix_spawn_file_actions_addopen_posix_spawn_file_actions_destroy_posix_spawn_file_actions_init_posix_spawnattr_destroy_posix_spawnattr_init_posix_spawnattr_setflags_posix_spawnattr_setsigmask_printf_pselect$1050_putchar_puts_read_remove_rename_setvbuf_sigaction_sigpending_sigprocmask_snprintf_sscanf_stat$INODE64_strcmp_strerror_strlen_strtod_strtol_strtoull_sysconf_truncate_unlink_vfprintf_waitpid_writedyld_stub_binderradr://5614542