ELF4 #4 (444  TTT8888HHHhhh$$Ptd44QtdRtd888/lib/ld-uClibc.so.0GNUZT \$t¬̓LquG2/;j'7vyk4={dJc`6zN_m+hU}[nZY!g %OX|*l-tDrb].ixS\~($p>wH5 #,1" <I?E9Q:RCM)V03oa@W&KA e B8sf^PTF$P!EN( qX|ˊЪŹ@8CE.Ϊ3ݣk4 fUas+-P(7OikԿ(TiJI(HW6tcRf47ZQD) $s&>g^J%|H_zdWMkqr0zz7=9#-PH9PYQD{0bYC0?V=ez.iOl@ p4 Ȳp@7!@pIJ PkН_libc.so.0isuppersnprintfopendirstrncasecmpclockusleepualarmrmdirrenamefputcmktimeacceptfputsisasciidlclosefwritestrerrorgetpidstrcmpfdopenstdingeteuidlstat64socketmkstemp64isalnumdup2getegidisxdigitsetsockoptcallocsigemptysetaccessstderratoifcntl64strncat__stack_chk_failisdigit__assertfprintffgetcdivrecvfromfgetswaitpidcloselogchdirstrpbrkgettimeofdaykillstrtodstrtolexecvpfseekfreeaddrinfolocaltime_rsprintfmalloclseek64sigactionstrdupferrorreadlinkstrstr__ctype_bgetuidreaddir64connectstrptimelocaltimestrlengetgidstrtoulregerrorfileno__fputc_unlockedsscanfclosedirgetenv__errno_location__ctype_toupper_setjmpclearerrispunct__fgetc_unlockedstrtoullisgraphstrncmp__uClibc_maingethostnameabortislowersysinfostrrchrfclosefeofgetcwdisprintutimesfopen64memmovebindmemchrsignalstrncpymkdirgetaddrinfolongjmpregfreereallocinet_ntopopenlogstrcasecmpvforkselectregexectolowerisalphamemcmpsyslogunlinkregcompdlerrorrealpathdlopensetvbufftellfflushsendtofreadstrchrstrftimerandmemcpy_exitiscntrlpipeisspaceqsortlistenstdoutdlsym__environ_edata__bss_start_endIJȲ  $(, 0 4 8 < @DHLPTX\`dhlptx| !"#$%&'()*+İ,Ȱ-̰а.԰/ذ0ܰ123456789:;< =>?@A B$C(D,0E4F8G<H@IDJHLKPLTMXN\O`PdQhlRpStTxU|VWXYZ[\]^_`abcdeıȱf̱gбhԱiرjܱklmnopqrstu vwxy z${(|,}0~48<@DHLPTX\`dUSw [` +,[]5%% h%h%h%h%h % h(%$h0%(h8p%,h@`%0hHP%4hP@%8hX0%<h` %@hh%Dhp%Hhx%Lh%Ph%Th%Xh%\h%`h%dh%hhp%lh`%phP%th@%xh0%|h %h%h%h%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%İhp%Ȱhx%̰h%аh%԰h%ذh%ܰh%h%h%hp%h`%hP%h@%h0%h %h%h%h% h%h%h%h%h % h(%$h0%(h8p%,h@`%0hHP%4hP@%8hX0%<h` %@hh%Dhp%Hhx%Lh%Ph%Th%Xh%\h%`h%dh%hhp%lh`%phP%th@%xh0%|h %h%h%h%h%h%h%h%h %h(%h0%h8p%h@`%hHP%hP@%hX0%h` %hh%ıhp%ȱhx%̱h%бh%Աh%رh%ܱh%h%h%hp%h`%hP%h@%h0%h %h%h%h% h%h%h%h%h % h(%$h0%(h8p%,h@`%0hHP%4hP@%8hX0%<h` %@hh%Dhp%Hhx%Lh%Ph%Th%Xh%\h%`h%dhL$qUWVSQ]_ƅ]IPLe M1H]7vP]Vh)Pe ]hPWC9Pt[L 4VR= TW5TvPPSChL9PuP]HPWh/V4$ hkShPÅts P;y$Y_VSjx@ SjS1Me3 uNeY[^_]aÐt&PPSh [RRPhWFhxjHhJh{1^PTRh hQVh@$øp=pttUhpЃÐÍ&p-pt tUPhp҃Ít&Í&=̲ugUвVSD@@K9st&@вв9rIt hY̲e[^]f Zt#URjhԲhX ffS\$S$$r$誕$r$Z$2$$2$:$$z$$$$ 1[fSHP H%f t*\u6z u0HXBCIXBIHك uыH\uڍ&J@P1[ÐW8VSOxWPtQf{t3}uOtsPJPt,q\t:؀ uPBPfPJGPuԋPI[@({^P,H_Í~0y uXCXJ똍IJ[0H^P_fUWVS NjpPGHOft0<[~h<]<{u/1OuJw,G([W [^_]ÐG@GB%IfC O뎍< t<"uхt͉mOkvEB붍t&Z~&z u_C_IOB돐t&MZt 뀍JIWO [^_]Í&'WVSËpPCx{ti $tx tI"uKJBWKS[^_Ð[t[\u-J~f z uC@CO t&KAKBO{uJs,C("S[^_Í&B؉1{_f뼍UWVSrB^HZZ J ZX{#=:tQށDwu1_t,(tWAz B19uO:zGz[^_]ÐZAK Z:uy:ur r㍴&BzD$$ƅt"OJk*C<\tM<(ta<)t-υuދ\$\$ C)ىJ $ωl$뢍&~OJ몐t&,$E,$뚐t&xn:z jX}tr / $ t&N@}t_ ujEjr9$uݍABf2F2zx(t B sfAMAB j`럍t&UWVSx0XWv {8P" Xp t++MSw$t>PCJPuՃx vK@X[1^_]Í~{$u9uCJPЃx uKJCH@P@ 븐t&h uA{ twCJsvP tP [HAHO&<{ uHCAJH+vPFJH@ 0PH,&FXp @[1^_]@("'WVSËHw8WSw$$x u { C$[^_s C$uSC S)& t$у t ;S@JS u׀ uKAKᐋs$t &py3{P uSBS~\tԃKt&C$RHu!{CC POC{CC[1^_@C$C CCC[1^_Ív[^_HCC뵍vC HCCCCC댍v'T$D$ JRHPÍt&'SӃKR uD$ SR S D$ tRt QQSP҃CC P5CC1[ÍSL$ T$ABYZIJB[Í&'D$ @ Ít&T$D$ JRHP@ x5Ít&D$B)Љ 1Ѝ1ЉH )Љ1ÐS\$Su C SP S[t"1B1ɊJ 9u[Ít&1[Ð1Í'WVS<\$LeD$81CPSRCPh5t$V<j+ CfC*fFGD$,e3u0[^_&jT$$JHÍt&WVSƃ DP\Í&t)QFt}$ K\u)É[^_Íf\r붍f\f릍f\v떍f\n농f\tsv Ch&UWVSËՅH@H L$s`{dS`Kd0xh,tuUBPT$@0@4@8@<@@@(u-@ @@@@ @5X$[^_]Í&1닍t&T$ jLD$@ l$ 8 D$D$vS\$T$t QQKQRЃ\$[t&S\$ CPC[ÍvUWVS]D$tT$ WNjT$N^bL$ t T$T$D$t [^_]1&D$ PT$ R.%ËD$D$D$D$&UWVSB1۽$D$ D<.t- W8 PD$PWU9~ ul$EAuD$ $I)ىډL$։T$ :~@t01-DE tF1@DM t9u(u) $DAD$ D$AAAD$Ay 1[^_]Ã[^_]ÍUWVS,ÉL$Au RT$CD$T$|$\$1Սt&L=<\u&WDD$u<*u t&C<*ttK1[^_]Ív<*tfCC<*tt*>tCCuG?tĉ.t[^_]Ðt&F؅zw9m1뉍t&1Ʌ1ҍCwÅc8u?t1Rt&C&SÃ@u L$ T$ C SP CL$ T$[zv'D$ @ Ít&D$D$vD$D$sv D$PT$Rho[L$QTSD$,\$$PD$PSL$4QT$;t9t1:t[Ít&[Í&'WVSD$\$PT$Rh5S.t@1ɋ=Ot6.t!ցwuAuf.0A[^_Íiu+5fVֈIuA)[^A_Ívnt1ߍ릍t&UWVS@\$TeD$01CPSR|$Wƍh,$ CUWPsD$,e3u<[^_]|Sg\$ PPD$PSD$4T$;t9t1:tL[Í&[Ít&'Kt&'t&'t&'WVSt$ ~W WD$PS 3[^_ D$H)Љ 1Ѝ1ЉH )Љ1ÍvS\$ T$t#1&B1ɊJ 9u[Í&1[ÍD$T$PT$ @@ @@P1É'UWVS,T$D|$@ v9wD$GÉD$9Ӹr ,[^_]Ít&GD$GD$D$HL$QQjPt$ŋt]D$ D$ < F_QT$!ЍDW8FHۉFuыT$ T$ u SED$,/GD$$GD$G D$ GD$(GG,1[^_]Ít&F뤍vD$vD$vUUB}PRÍ&'UWVS|$0t$4G;G  GVo !D$,(uF[t9G @ RQVOQЃtԃ[^_]Í&|$ t j ËŃECG]HUUVGPуG@tkRRL$@QwVЃCG@G1[^_]Ív9nPPjWfHS&SSPWE݉3뎋D$8C럍vUWVSl$0t$4} EV] !‰D$E1f߅ˋE @ RQVMQЃKt̅tpOEHtWWPEPыE@tRRKQuVЃ SEHE1[^_]Í&[^_]Ív9놐ET$ 뇍t&UWVS \$ Ctj1f4*t&C~PtQQPCPҋC@tRRNQSRЃ VCHCuu RCC CC1[^_]Ðt&C뺍vS\$ CP/CD$ [ WVSt$|$^tN FWN !ȃu 2f[t)F@ t%QRWVRЃt؉[^_f1ۉ[^_9WVS\$t$|$PWVS8u [1^_ÍvPPVS_ƋCPtPPFPCPҋC@tRRWKQЃF1[^_f~몍t&'jT$ @@@ Í&T$Bt B BuB @B;A} BtHJ f1Ðt&UWVSD$0|$4hj@@ @@@ 4D$0CEus jQƉ(@@@ v@ A (E(QPRS VuՃ V\_G 3[^_]fVVPS|&UWVSHD$\D$$hu<6V$D$É(@l$@@ t&@UE Squ S4$ID$11ۉ|$l$ t&D$LCq9\$t_|Gu G WP GOtʼnʉL$R|$L$ttC9\$qu& ̓1UŋD$(1h\$%t&t{F;t$h GD$ Cu C SP CL$S uE{MURT$$PQL$$T$,L$$у|A}됐 NQRT$PUcT$$׍DhL$,gQ\$0SPD$ U6T$$$T$<׍D/ 1jt$(F D$$xD$PD$D$`L[^_]&D$@@Í&D$@D$D$É'VSS\$ CQ9S}&/PKQQRP CQt$4X[^Ð ӋT$tHRÍt&1Ðt&T$tRDÍ1Ðt&WVSt$|$~1ېt&F CP׃9[^_S8D$@\$H$D$DD$D$ D$D$D$D$D$ D$D$$D$( D$,t&D$tD$(t< 8%[S\$Cpt)P SpSl@P tBCl[Ð j$Ή'VS$t$0T$\$4CD$1҉$T$ l$ 5M\$ VoD$@ 84XB @Srs41[^ VSQ\$t$C t@t RRSVЃC=tt P'SC tB C tP9^lt(FpCC tX^pX[^Í&FlӍt&'WVSD$t$xG X_ u]O@t& QWH~@|$[^_t&QQRVOC9~ċTHݐt&[^_Ít&PPRV|$[^_8&D$PH~Í&T$ VSS\$t$SH~!SH~X[^ÐT$t$Z[^hQQRV_эv'D$PH~Í&T$/ VSP\$t$H~"St H~"\$X[^NPPRVfQQRV\$X[^ VSQƋBӅtZRHS HCt PXCPSu> S[^Í&B tKRRQVЃ S[^ÍHu`밍PPRVS HjPPRVCZkT$D$ I tÍvS\$L$H~\$[t&PPRQ\$[ UWVSŋB8T$ t0VD$ @/EF)‰V,[^_]Í&H5:RD$)RPL$ Q,[^_]Ã,[^_]ÍSjht$ V~,[^_]ÍvS\$$jh5S[ BJ~[Ít&D$ PPQSD$ [Ð& t&'WVS|$t$ D$PÃu WƉ{sC [^_Í'UWVS NjZ2zuRSj\VBuPSVW [^_]Í& CPى PUWN [^_]ÍvUWVS΋JӉD$u B RP KSL$ T$ j蒸ǍD$`D$TT$L$D$XD$D$\L$$T$(D$0D$4D$8D$<D$@D$DD$,D$HD$L D$PD$ <$<[VD$AD$(D$L$ D$,tD$ l$,HD$ D$$@D$$fD$0uST$ L$$PPD$0)PAD$8PD$TxT$(L$$uD$L$$L$ D$(D$,D$0D$wG  @xGAl$XPƅG~1&D$D‹BD$DEB;l$L|֋D$Dt$P/9t PC t@t RRSL$QЃ{C 4Ĝ1[^_]fD$L$ D$(<[u%Dt&D$T$JHT$L$t(@<[t!<$t~<\uԍAJJHT$L$u1T$I@L$$D$,vD$7HtTD$ XD$ L$PT$ 1҅BT$,x{3D$ D$$x@D$$t&D$D$,D$$D$ PD$HT$D$D$D$( UWVSϋZD$ T$ B u RP F ^t$ = 5nD$pD$hD$dD$l\$4l$8D$@D$DD$HD$LD$PD$Tt$WD$PVD$P|$T$DAPx@ 5D$,[D$(UPD$LD$\$ v|$ D$H\1[^_]Ð< t$,|$4< < uHw=|$$w< u D$(@D$(Bt$$T$ N< < uٍHvщ֋|$(JD$8T$0xD$$^\$ \$,P|$4T$$D$8م<"<\< tvT$$JHL$ T$$uԋ|$8D$0WWt&D$6뼍v hC諡Fpt X PT؅u닞t)C {@t P- Su؃ V/t$@,[^_]&{kGu G WP GRUPh]6ޟ*T$ WWQVSN|T$ HT$ SSQV/T$ HT$ RRQVT$ HT$ PPQVT$ H~T$ PPQVT$ HjT$ PPQVT$ HVT$ PPQVpNT$ HBT$ PPQVLNtT$ H.T$ PPQV(T$ UWVSt$0l$4|$8\$,j(xt$4\$0D$8[^_] D$PD$Pt @@ 1t&D$D$~&'D$@Ð&WVD$t$ |$$Py@ `4@px^_ (D$0D$,\$P;D$@ 84@X,fUWVS(D$<|$DP @ $4@@@@~2\$41ҍ,|$ V D$WT9u݃[^_]ÍvSD$(\$$HPD$0PSd BJ~[Ðt&D$ PPQS#D$ [SD$(\$$HPD$0PS BJ~ 1[ÉD$ PPQSD$ 1[Ít&'S\$${ $4t ڋD$ Ct=t PݤD$( D$CD$SP$([ VSV\$D$t${ $4t1C=tt PjCSFND$[[^鹽'S\${ $4t ڋD$C[ÍUWVS\$4D$0l$8t$<|$@{ $4txQS9BCt=tT$ P迣T$ C|$0[^_] t&뺍t&1벍VS\$$t$({ $4t ڋD$ Cx 9|'D$0u5D$,[^É9}ƋCL$,1[^ÐQjh&6\$,SL$00F 0J~L$ 뚍&D$ PPQT$,RoD$ ׍UWVS,lj֋B Ru VP F =$4t >^t6VjhCW(E(1VW,[^_]à j@@ @@@ 4xKC1ۉD$9\$ jD$(PSVWYjD$,PCPVWDD$8BT$< A RPUtPPD$ PU#L$(J~cHJ~?T$P9\$xF t@t RRVWЃF 3n,1[^_]ÉD$ PPQWD$ fD$ PPQWD$ fD$SSQWD$ UWVS,ƉӉρz $4tuCD$ ~J1 E;l$ t9 jD$,PUSVWD$(P9t҃,[^_]Ðt&,1[^_]ÍUWVS\$4C 4CC|53ou G WP oFOuL$ F VP FL$V{3D$D$ 9uSRQPU螛D$ %D$/v6D$0D$ %D$ l$ [^_]Ðt&PPRV> [^_]Ív'S\$ T$(|$$~=BJPD$(PQSwt@ BJ~@1[Í&h6RjS[Ðt&[ÍD$ PPQS3D$ 몍v' |$t&hD$PjT$R` Ít& Í&WVSD$$t$(Pw:^tZCu C SP C PB1[^_Íh6Vjt$,V[^_Í&Qh6S\$,SGt0^=Cu C SP CRRWP'1Wjh$DD$,P~L$0B 9W~L$ HD$ SSQt$,VԿD$ ֍t&'UWVSl$4\$0|$8EwV F VP VsVwFr$ F VP v$oE$u7T$E UP EoD$ET$u E UP T$MT$L$PjjSL$ŅɋT$X21$9$tB&1ɍz v} RPUS9$uŃ VW&PG)PUS PD$PSG;|$t$ l$)WVPS PUS{UBUH PPRS +1[^_]Íh6WjSJ[^_]fvyÍvL$QjRS*L$ t&T$PjjS$6T$Ѕ;2l$D$ @D$$zՍ4&W $ A89ut&QjRS T$L$VVjh蚄ƋT$L$KvUWVSD$8|$4X{ $4t ڋD$0{[VjjKl$,1[^_]fh6D$LPjV,[^_]ÍD$ PPRV臹f |$t&hD$PjT$R Ít& Í&UWVS,D$\$@PD$ P|$LWS@t ,[^_]fQjjS D$t$~O1f,D$T$H(tjPD$PPSttD$(UPD$PS9t$ T$(RD$AH~D$ ,[^_]ÐPPRS_v'S\$D$uC@[ÍvÍv'D$ÍWVS7|$L,lAvK΃ jjRPW u[^_Ív'UWVS t$(l$ |$$~%1ۍ&tRRUP萂tC9u [^_]Í&D$x 3%ÍD$x $4%ÍUWVSH|$`W菃D$L$XL$h11D$ >fT$ЃT$D PLt$ CƉt$ ,$9l$|D$T2^u‰4$8t 7u0|$|$0Vu F VP VFT뀐8%uE$,$9l$\$L$ ˃ CS|L$t7D$ PPVU:T$ tgQVhtDS[^_]f|$4\$0[^_]Lt&7>u7WPhLDS[^_]Ít&BAPBPVUtXZWU軫CXS\1[^_]ÍVS\$$t$ S 4Cu SR CRRPF:u ~:E QQVP軫tLS tRtD$ PPSL$Q҃D$ UM@C 4CSK[^_]ÍE(uA[^_]Ðd[^_]ÐJZu}11  1ɍt&RRVPXfD$Nh8PPQE ٍUWVS t$ \$(|$$t"h:7SjV< [^_]Ít&KJ7u܋{ou G WP o[Cu C SP Cl$$t$ D$( [^_]'UWVSLeD$<1Bu B RT$P T$BJ)~7L8 u v@8 t u9w t&9tI t))t5PRhDVt$u>u-X x t&C9t _tDM{H@D$'T$ A|$'D$+AD$/A D$3AD$;D$7Pj \$ SW5DžT$ 'UUSPT$ t?hB t@tQQRT$VЃT$ L$\$B 4JZjSRhe7VvS\${ 4tڋD$Ht C[Ð1t&VSP\$t${ 4tڋD$Ht.[t'@Ct Q~ s1Z[^Í&Z[^Í&QQPD$P΍&'S\${ 4tڋD$dHtCtPD$1[f[Í&'VS$D$4\$0t$8Pw7Vt_QFPRSu_{ `4tڋD$@HtCD$ xt|$Du3,1[^_]Ðh7Wj|$LW,[^_]ÍD$DD$SPGPt$LVL$ l$t91ۍD D$(VUC褐9\$L$ u͋D$@AH~D$@0,1[^_]PPRT$LR蔩 S|$Eu+D$X{ `4tڋD$tC1T$B[Ðt&h7\$SjD$Pz[Í'UWVS,\$D|$@CHC4~ `4tNVnCT$l$8@T$T$bD$1҉$T$ l$ 5M\$ W莧D$@ 84@X BSjk1Q~>,[^_]Í$ W9T$@ `4@Ph룍t&$PPVWܧ$,[^_]n'UWVS,\$DC l<C} `4tD$@HtPEUD$T$ `4tD$@Ht&WGT$SD$B}$T#fEHE~8H~,[^_]Ðt&UUWD$LP,[^_]ÍPPUD$LPۦ붍t$D$ ƋT$t$t$ ։t$ 1f D$LPӥT$L$PHB SL$@ `4@JKL$9t&L$D$u )ʉD$D$ 1념t&D$t$!ƋT$D$t$!1D$ ]t&T$L$Љ DD$D$PT$RL$Qt$V?1D$T$  D$T$D$T$ t&L$D$T$ t1D$T$ 1&L$T$D$ tD$T$ 1t$D$1ƋT$t$t$1։t$ 1mt&D$T$؃D$ڋD$T$ ؋T$RPL$Qt$VQy+D$T$؃D$ډT$ 1 k&Pjh7D$LPt$PB1V~ t$@T$T$ D$D$D$PPQD$LPTD$ƍt&'UWVS,D$D\$@Pm|$HwV y`4tsHtnFVD$D$HT$ p~ `4tDHt?~v+t$|$ kWjh7S (E(9W|,[^_]Ðt&$D$D$D$ T$عT$D$9T$wr9$vۉ tWVRP腎D$T$ ׉t$|$ S% |$xBl$@ `49@hW~l,1[^_]h7D$LPjS,[^_]Í`4tH~D$vD$ $PPQSL$뀍t&$D$ WVhj艍)$T$f$VVQS$mUWVS<\$Tl$XC}}G =`4tD$P/H=GW}D$T$ `4tD$PH wD$D$ L$\$ȉ11 HT$ +D$T$ y9ut&D$ yT$D$9`zf+D$T$ى1ʼn1؉)Ή߃\$ l$1͉l$ 1)ȉRPWVيaPjjD$\PD$t$|$1ۍv CD$\P芟D$<px@ `4@XUD$8Pt$|$;\$uD$PMAMHjD$P(<1[^_]f=`4tD$PYHtkwD$D$ D$D$Sv9Rjh0EL$\Q|$`C9W|$P<[^_]Íh 8UjD$\P<[^_]Í=xD$Vjjl$\UŅfPjjD$\P&] { `4tڋD$P#t> `4tHtIGxBS4R)ƒuaC8[^_ÍRjD$PFPod€~t D$ 8tPVh 8S1[^_fC4KjPJt~ҋC4t;Pu뒍&9Pt@,u믍v'UWVS,\$DC =L4=84ku SP kC =`4Vj D$ PU|uMC t@t RRSL$LQЃD$T$C L4CS$T$D$H,$,1[^_]ÍvPPD$PU諎C t@t RRSL$LQЃD$C 84[&CD$H$1,[^_]fkD$H,1[^_]Ðt&SCׁ ? C L4EfVSh/8|$LWG뛍'UWVS<\$TCHC4F =84t'=`4u'C~7n,$#t&Ft1ɉD$PtHuPD$,PVD$\P C7$#&D$(E|$MfD$ fD$l$|$l$|$l$ v D$\P蛙@ `4@xh8 G8Sz{1Q~ <[^_]Ít&$PPVT$\R$<[^_]f<$l$,$$ l$\UD$@ 84@X뀍& %1CvЉT$$ $1<$ȉl$1)ʉ߃t&D$(q&D$(UNt&|$fD$ fD$D$(l$|$l$|$l$ vD$(t&D$(E@%1o_f|$%MfD$ fD$l$|$l$|$l$ 9VSӁz `4tHt1S[^ÐQD$ PSVuD$E@%[^É'UWVS \$$C |,tCD$ ]tEC @CHK4EHE~UH~4H~ 1[^_]ÐPPVT$,R軗1 [^_]ÍQQW\$,S蛗뺍PPUD$,P胗뙍&'UWVS\$4C t , CACHK4D$0Džt!1H~lEHE~|[^_]Ð EC D$&'UWVSL\$dC t,CF =84} 84tK=`4FVD$T$ `4uJEUD$CT$<q$#}t)=`4FVD$T$ 1ɉD$` HuPD$4PVD$lPu0WD$D$0L$8\$ L$lQ?D$@ 84XB L$S@JKL$0&D$0D$81E1t&D$0D$8\$fD$0d$8\$s&D$8D$0E@uEEtGM\$8OS&D$PPQD$lP7D$:\$M\$\vUWVS<$\$(J}Y<$C =`4tډ@HCSl$|$ljRPUWuClj9$~>D$4~ `4tD$H3FV|$Pu)C9$‰ l$ Uk@ `4@pxMBJE1ۃ<[^_]=`4tډkHMs{|$Pt?4$|$,$=MT$($ UD$@ 84@Xvt& U迉ރ@ `4@pxH&hM8QjP<[^_]É$PPQU<$"|$T$ D$l$l$\$(t$ ;$|i\$(C9$t\QVPU0u5D$(D$ |$Pu\$(fPD$,PGPUt<[^_]Ðt&D$(QD$$_PSUÅuD$ |$PtG=MT$($ U荈M@ 84B@D$JX҉~E"T$(뻉$PPQU$܋D$L$ T$D$&D$L$ T$D$&UWVS<1|$PT$$D$Jϻ<$t$ T$L$D$C$$T$$D$9\$D$tB4~ `4ttsFVD$T$ |$Pu$T$C9\$u UGL$\$@ `4@HXMB9WE<1[^_]f,$t$(D$$ $C9\$$~+QVPUuXD$(|$Pu$C9\$$Ճ U识D$@ 84@Xjt&$PPQUT$hT$<[^_]Ív'D$L$ T$D$G&D$L$ T$D$'&VS\$$t$({ 3tڋD$ oucQQV[StPD$,1[^Í&D$0u[^Ít&D$ PVhTET$,RSD$ f붍vUWVS\$0~IÉ1l$ t&GT$ ;|$0t- D$DPUQRS1 tڃ[^_]Ðt&D$41[^_]Ð&WVS\$D$T$L$t$ |$$t|$t$\$[^_]t&1[^_UWVS ƉՉD$jRPÅt7 jD$PWSV t(D$ x^WUhEV9\$ [^_]D$0t;~PPSVS PUV&D$$PWSV" 뷐t&WUhxEV렍UWVSt$0\$4ډ|$8t@dt1u\[^_]Ít&ډ词KS|$0[^_]&CPtn4V4RWPVn4u랐D$ PShEV7D$ [^_]Ð&UWVS01T$T|$Dҋl$LD$PL$LQW&D$D$,ÃYD$ H,|$LD$L1HD$t&D$8F;t${ 3tډLC=tt PP CD$ PD$,PDPSWz tT$Pt^PjjWD$,LS$Fz\$,;t$kD$PPD$PDPSWD$P|$ ~PPT$RW,[^_]ÐQQPWzfPPSW߉D$,ÉD$t&D$PtPjjWD$D$, PD$LPW~}\$iD$Tb&\$Ct=t POD$C@t=t PxOt$FPVD$LPW.E.J~L$,[^_]É$SSQWȁ$UWVS É։變PPFjUjPFPSY Džu sx@H~53 [^_]ÐAt/VRh$FS: [^_]Ðt&UURS?fRjNQS;7tPVhES뒍'UWVS|$0\$4ډl$8ƅdG4ىD$<ƅSu C SP ST$ jF(E@T$ EA::u z:UQL$RD$ PvC L$ t@tL$ RRSWЃL$ D$C 4PCSK[^_]Ë[CuDE@EH~\+[^_]Ã[^_]Ðډ[^_]_4G4PURW_4[^_]Í&QQRWfG8D$UQL$Rv'VSt$$jT$,RV躇 ËT$,ARPV4 Q~[^ÉD$ PPSVD$ [^ÍVS\$T$C8s4C4RL$QS~s4[^Ðt&WVS|$$jL$,QW) jƋ\$0SWB ËAPVWQ~2 Q~[^_ÉD$ PPSWc~D$ [^_Ðt&D$ RRVWC~D$ 븍v'SjhE@$H1҉C<CDCHCLCPC@4[Tǃǃǃǃǃǃ4ǃǃǃǃǃǃ5ǃǃǃǃǃǃ5ǃUY C8jC4hS_$Cx|@ `4@@@$C|{ @ `4@@@CxjCjS薣 jhh8S CxjhSSx CtA S A  A A A BAC|BAhp8h8S hjh8S h8h8S h8h8S h8h8S h8h8S hjh9S$z @ `4@@@Ph*9S$nz @ `4@@@PhD9S[ÍUWVS\$4|$0Cu C SP CS8:iaŅt;QjhLFW%C1V[^_]Ívډ/uCP@D$<9G4t=PT$$D$Pv5D$T=T$$[P F<^^<]^ut&<]t BCDu<]BDD$(GD$BD$ D$,4&L$ 9L$}>D$$1 @9t#x-uH8~P@9u␍t&ut&|$(&D=GhF\$lSjt$lV*L[^_]fD$QD$8u D$D$D$@(t9t&D$H<1t&@;D$1t9uD$@ GD$hpD]sCJʉ<]D$$^W^F]bD$@FcvQjhGht$D$s4[^Ðt&VSt$$jT$,RVzw ËT$,ARPV Q~[^ÉD$ PPSVnD$ [^ÍVS\$T$C8s4C4RL$QS~s4[^Ðt&UWVSD$4l$0Pu0D$8X{ `4tډHtJs{&1PjD$@@PU8Åt>x `4t¹Hu [^_]ÉCSƉ׃; Um @x@ `4pPD$@xWUBUH]1[^_]Ívh9D$ W PUWu։ދ\$)|$\D5l$`D$dD5D$T\$X|$hD$lT$\D$lT$hl$`]1D$Ɛt&1fFuhtu`.u D$ )H}0߀XD$XJHL$TD$X1Z؉D$fFt؃}1u؃tqT>؋t$1tRHt‹J-uNu:1uPp~e\$1t.u 0JtFL$ у-uKqFC݋|$t$ VL$9t$ IL$$~(L$T$,DL$(ϋHPH9uT$,D$$]ED$\$L)AQD$1" VRRPt$ aKJ PUWVS,NjBӋt$DL$9bj$GW4G9B`A'KʼnD$D$HSE0C M(L$MDL$@MH Au4U8E< NsBL$o4k)D$1<$C,9k$01@>QɉT$ D$HL$L$HNDžu F VP N9&SPWVD$ PL$ E;ku<$C LJ RRPWV ƅt@k W4fK V9D$HD$QjhWRkƅ1St&‰$C,‹B jh9VWe S,D$PVWfjh9VWe E;k}jjhVWe9k$uS,$Tjh9VWte S,D$EDPVW]fjh9VWOe ;k|VL$Qh(IW薑[]VWH,[^_]ÍvPjhLIWPB1V,[^_]PPVWet&{C |$D$ 9~)lj|$ L$T$WD$PL$ D$PPD$ PoT$$K,TҋL$$L$QPR|$ WL$ƋW4B,G4D$x1ɉ8Kuml$t$@PPSW Q~2uD@{ $4uԃ ډV} QΉ$PPSWCG$tƃ%_ C_ HD$HBt&jh:VWbcf$L$r4F,B4PjWT$ RT$r4tLPjL$AQT$ R OƋBT$B4H,QWVR>O L$ Mt&<$WPVD$ PCL$ &L$ &D$t$ D$t&GHGwGGyvT$`I#v$PPQWE$8D$PPVD$ PEL$ D$pQQRW~El<$ƋW4'UWVSljՉ˅~ȍ f2F92uVjPW莐ƅWx@@HFFRSUWVD$HtH~14&9tHPPRWD9uD$ [^_]Í&F뭐t&T$ PPQWsDT$ b&PPT$u`{>uZ{.uTKKNKNK!N C%FD$kPj UV3 jUWe8S*QQhX7R Åu\$[ l$D$ D$jmD$ >FFF &;PPWU%;tv V5<Åu܃ Vs,$ :|$$$ D$ |$le3=|[^_]Ðt&D$ [@D$ C1 j+‹GYPPCPh5RT$8 CD$HD$ P@L$8T$(P@ @ D$<CT$@ACXZWL$Q'8|$$BYOxZjQL$8@HD$HT$(HT$,H~dT$0H}QQR\$ S@hCWjPl$$U/6[ t&PPWT$Rc7-vWWRD$ PK@늍PPSD$ P3@T$(HVPPRD$ P@AfPPRT$ R?&'D$!Bt 1Í'WVS\$+ j7 )=,~ !@t[^_et&|w[^_fUWVS8t$LT$PT$l$XL$$\$(|$TV[$T$ AÉ htUBUPSD$ PP~44$=ŋ@@ 4UE]wu G WP wO~l$ D$1 &l$D}uD_@t9~_uۈT@uCl$ ,[^_] VST$$\$ D$(Jw7pHtL@ PVQS B1V~31[^Ðh;PjS{[^Ít&j봍t&D$ PPQS{=D$ fUWVSt$0|$4!11@ue Vl<xB@ `4@9hW~kFptf X P\ ^p؅u1[^_]Íʼnh\$ `4t%Ht G[^_Ã[^_Ðt&Sjh;VCD$w S\$$jh!;SCKxD$D$XZjQ؍L$([Ít&2~ÐUWVS@ËjPSDtmVuD$T$ RVWP1AD$ ^_l$\UD$\P؋T$L$ /J<[^_]Í&<[^_]Ív T$PI V@WPAE^_D$\PD$\P؋T$D$H,$QD$ <[^_]fWVSru[^_ÉӋBljPPD$PQKSƋHPPSW9&UWVS\D$pǀD$t@ =$49|$tB=4uGD$@t1ɋT$tD$pID$t@D$D$pXx+E+H&D$pD$$D$<$@D$*D$1D$h Eh $9D$Dx@|$D$A|$ED$0D$D$$D$ 1 V5$'PD$0PBPD$|Pl \$,H@D$4$$@$$9D$q|$ QjD$St$|V2Å@D$ppxBHQD$pKɉ0t$pCWD$ PD$ PD$|PSƋHD$pP$0|$p@, G( PPBPD$|PRD$pf@{ $4t ڋD$pL{ D$L$9L$D8#RRPL$QD$4$D$ D$S41fS 9D$ u$$H$H$D$D8D$Ft&RD$p Å%t&$|$tTHKuD$|$9t PMD$4$N<$D$p@ D$t@ t@tUUT$|RL$|QЃD$tt$@ 4p:QjZSt$|VÃPZCvD$tt$tD$H'$\[^_]Ít&PPRKD$|P5 fBEpy޿D$T j$:HWvPPSD$|P4?v PD$D$ Pt$ VQ& ED$POD$D$0D$vD$tH+D$tAvSSt$|V|$|W3$\[^_]ÐVVR|$|W3vD$pxt&@ x 4@Xx hD$@x 4RjPL$|Q胮Å08D$HL$$^D$XD$pǀBPHD$pL$XHHoWjjl$|UY$BA D$@A D$pnu F VP nh8q}lD$pt$+PjUD$|P: PD$xPD$|PZ SD$xPT$|RkZYl$|U@1 @ `4@pxPD$xPD$|P3ZCu C SP kt D$p@ D$pHD$pL$p@xCڋD$p3D$0$D$D$nD$p@ WWRD$|PG1QQ\$$SD$ pVL$T$$ s C SP KD$pt$}gCu C SP CHD$py $4tʉL$FL$AD$ jD$~~CuE d5E0F0 Q_ED$(ERRVL$Q3*HPPRD$P*&UWVS \$$l$(|$,{ 4t\ڋD$ 7s F A@ VF WD$0V JEV Q~& %[^_]Ít&s;~u몍PPST$,Rk)EōvVS$ÉD$J2jD$ PNQS9uRL$ ؋BVjjL$,1V~$[^fD$ PPQS(D$ $[^Í$1[^Ð&UWVS\\$t{ d.tڋD$pQuustn"F@ F> RmD$,D$(F|$(|$ 1ۍ< 8wX$$(\[^_]ÍvICL$L$T$*E*l$UT$T$T$9 8vT$ D$$WWT$ Rl$|U.T$4C9 FSt&PPACPD$|PD$p(L$E(T$jl$l$9~OFb&UjAPD$|POD$$L$BCT$jl$l$9l$~OʍE~ |$xD$ 1;T$ D$ R3D$\[^_]Ít&QD$pTD$x^K^\$L$1ۅ~ŋ|$p t&C9\$~%4HPPVWb&T$(C9\$ۉct&jCD$PAPD$|P2D$Fx7 V|$(B|$ V|$D$vF"uWjhUD$|PԠ|$xB1t&;VL$JVT$A wFWHt FxOF@FD$(D$D$ D$NT$ IN&8RjHQ\$|St x `4tFP PD$pu@|v@|$xB1pSjxWl$|U袟tx `4uxXFP xt7tz `4uFJR@w$d(D$pQjRt$|<뵋F9|9r1tD$p<11 %11 %Ӹ9|9s9|9v미9|9w랍WVSD$|$$PD$,PWÅuW|u)t$;AQ93W~o [^_h+;t$3BT$I~`D$T$ PPVSD$T$ =t&D$DH9RRL$P QSUWVS\̓D$ L$pD$(T$PjhD$PD$0BT$ ZDD$@D$y $4tʋD$ L$T)L$AFzWjh;\$S (E(JaL$ D$D$ptt$(D$Ht$ D$H D$(PZL$0QD$\[^_]fh JUj\$SOD$D$\[^_]Í&D$,T$D$D$4l$\$D$l$t$$x1ۃ jD$XPGSPD$(P;U ;V}k jD$\PRT$DPD$(P;D$lBPL$PQD$PӐL$\D$$T$,H/L$BCU%t&PD$$PD$PPT$R苐C9H9l$4)PPD$8PD$PD$$t;l$pBD$pD$t$Nt$t&T$WjjD$P 8D$8BT$SSt$(V|$W&UUD$0PD$P&D$SSQt$VD$vPPQD$P{T$,D$ L$pɋt+L$(BQ~AD$ L$(D$CL$ Yx3F3Q~%D$ D$.WWPl$URRPL$QWD$0t$0P'8 D$L$ T$D$G&D$L$ T$D$'&UWVSL\$`l$hD$<|$dt"h;UjSLL[^_]fRRMQSDžuPD$@PEPS{ƅD$<My d.Bʉ؉L$腷L$)D$D$E D$x 4 T$1ɉ;D$P:;|$0D$8#BD$xD$H9At ID$T$Ph;D$ p S .T$PPD$@pBp,D$@P T$xT$D$D$@SXT$ S\T$$D$QjPS譈D$x `4tT$`HD$P@D$D$T$ D$(T$,t$D$t?RjPSEƅx `4t¹`HttFVD$T$D$(T$,D$T$;T$ a ;D$UPPuS?D$$9C\t&PPE PSuhQD$@uPVSSt&sxBH3fD$D$t&PPEPStT$<t׉ƍ@‹L$tD$HD$tL$D$HV&PPRS 3it&AD$D$t&PBt$FL$… …rD$Hat&T$PPD$ PS? T$8vT$QQl$ US T$5vƍ@… qD$ 9CX5Pjt$ Sƅ@ >~s=`4t.^HFVD$T$ S T$L$ @ `4@PHPt$ S`=`4uFVD$FFT$ V=tt PxF~z `4tT$f]HD$@T$D$JRT$L$D$xUWVS,D$D\$@l$HQu~ `4t\HFVu $T$~ `4t\HF}D$v|$DBD$D$ PEPEPSL$ |$l$HL$5v9T$v5|$ urUUD$PS,>L$$9}ËL$$9|6~.u;sxBH3,1[^_]Í&9T$s̀|$tŅtPv,[^_]Í&||$f뛐h;UjSE,[^_]f `4D$H@x 4tRW|$$PS|$u^$T$GGWt=t|$ P|$D$HG@x 4UWPS舆,[^_]QjD$PxWSoT$NjD$D$T$t ?- Sd|$l$ @x@ `4hPD$$D$PxWST$ED$QQRSD$,f `4tAZH=GWD$T$ }t&PPRS1&WVS\$ t$(|$ |$$u_PWFPSu%D$ t$QQFPSt҃t tȃ[^_ËsxBH~-31[^_fh<VjSZC[^_ÍvPPRSōv'UWVSe$1$D$ $PVnCPPhhV…'l$D D$HT$ EPWT$RT$UjPT$RT$pT$ R +USWy jVWk BEMEAE 5ML$ aÃD$<[7<<{t3<D$L$ Ph?j$RT$xT$$VL$ Qhz<WPME HE7PPUWY)t&[ PPVhA<WM $e3 Ĝ[^_]f R$W[(UPVh]<WL f RGfwtotQQUW!Ãt7uW BW EwtHE^"t&<GHGʋ_GG]'VS \$C8s4C4D$PSSs4[^Ív'S|$u=D$XCu C SP CSSPD$P t2[Ðt&h<D$PjD$P@[Ðt&1[É'WVS|$t$|$RjNQWMÅtT@tMCtFC(@BC(D$NVVPGxjPѼƋC(HC(Hu$ډSPFPh<WJ[^_fh<VjWB?[^_Ít&UWVS\$(Ch@ChD$0HD$,jPCxPCShJƉShuK+}u E UP }CD$(D$,Qh<PSjF$/~$^& jT$8RjPS'jD$ t$VhJ=vt&UWVS,\$@t$H|$D|$Dt'hl=VjSl.,[^_]Í&PPjjD$,PFh+PS ŅT$Fx5QjPS<T$1tH11 S xB@ `4@9pW,[^_]ÐD$FWjPSCk$Y1ҋ (@ `4EP(@9@W~%,1[^_]Í&,[^_]ÐD$ VVQSD$ fD$ PPQSD$ Jt&11&v=v'UWVS,t$@|$Dl$|$DteD$DHD$ l$uG;|$ t4PPjjUh(+D$`PV uXD$uG;|$ uSUD$PT$LLQVu)\$BJ~G,[^_]Ív,[^_]Ívhz=D$LPjV+,[^_]ÉD$ PPQVaD$ 룍UWVS,l$@t$H|$D~jWWjh=D$,PFh+PU Åu4|$$|(N Vjt$ VPgf,[^_]Ðh=VjU"+,[^_]Ã|$Dh>VjU*,[^_]Ðt&|$D5WjFPUxhtSjh3>UVL$XQRPU [|$Dh={v|$DmD$DVT$t$U@HKuD$D1|$DuF QP^SUp3|$DD$DVT$1 U@ `4@pxMBJEbt&D$DRD$HPVUD$(AMJzEt&|$D Vz 3trPjh>dt&|$DIh=&h=WWjjD$TPF vPVU4g fWWjD$PDPD$Tfh=>h>h=vÅ*Fp U#p@ `4@pzN Vjt$ VPdd%14D$ PPQUD$ PPPRUD$ PPQUwD$ mfUWVS\l$p\$xD$<|$t~zPPjjD$PPCh*PU( DžuCD$@w?$(&|$t9|$t hd>t&SjU?'\[^_]Ðt&hM>SjU'\[^_]ËL$tQ01|$tus Sz  MBJE\[^_]Í|$tU[S u P5t ډsu C SP sC D$@PD$Ê f %FPi%ZYPS%ÊuQ\$ St$Vt&|$t[Su C SP  [UX@ `4@XMBJ$VVQU/$t&|$t|$th~>|$t|$th?|$tMs ~ `4t;;HFV$T$PjhU ƃ|$V $T$t&$T$PCPVUD$T$!AuՋUCH uY|$tEs^u F VP ^v FP0~& J C9uRVPUE}|$tMCPC PCPUs@v|$t7h>v|$t|$th>D$tD$HsF$! F VP FD$C HL$R P PD$R D$s@ND$u F VP C vPu P PD$R D$ H|$t T$@D$ D$H 9D$Ɋ\$B |$ 7 )!ЉËD$؉L$9 )؉|$ l$p<$݉&E;l$=P+VWPau|$ ދl$pv U/@ `4@Xph6VVjjD$LPCh|*PU ?D$h>h>h>vPD$LPC PUzDžesNu- F VP NsFu $ F VP  $D$Hvw yD$H9uPjhU:rL$H9r|$ gL$\A9T $|$ l$pߊ ň fO98uPVWD$ P螩u߉D$ڋ|$ )‹l$p։1Ph?S RU4D$ttQQjh?[D$TPh@*SU Fu F VP F~\$D $(%ƍ8t&F9 PӃu UËU@ `4@@@@HR]_끻wНm@cPYpOPD$LPVU0B1u8"%ƃ UÉp@ `4@p3UF3Hv]1@߁~ `4t1ɉ1H%ǃ UlUx@ `4@xH PPRU u%Df|$ l$pD$D$ |$@PPS RKQP5t ډ@su C SP C D$@sPxD$Ê"t& %FP1%ZYPSÊu<$C HL$v@ɉ93v$QQSU$_sV뫍&L$ PD$LPCPU\uD$HL$ yȅD$HT$@D$ QQRUf&9QQRUK$) UX@ `4@1U|$tC@CHPPRU[su $ C SP  $D$HRjPUËAEQTVVPUC U@ `4@@@Qjh\LUEQ~]NQQRUyRRPU ԍUWVSl$$$$D$LHD$PD$D$XD$D\$HHti$D$ &,PPjjD$,P.h *PSo 8|$wD$$$)fD$LG;|$|WW$lUSML$0‰Ɖ3A J3l[^_]Ðt&9|$ D.D$LD$DG닍vD$P{vD$PkvD$L[v9|$ PD$XPD.PSEruRD$XG(D$LVjhLS BJD$PPQS5D$l[^_]ÉD$RRQSD$h*?VjSRl[^_]fD$PPVSD$l[^_]QjhL\&UWVS\t$p|$tD$tD$HD$LD$,D$ D$0D$D$ D$(D$$D$l$x&<PPjjD$PD=h)PV D$LSL=g$@)ӉD$ f;\$|D$D$8L|$ D$,tA{ $4t ډkD$LT$(D$D$l$!D$D$1ۉD$4l$$t&T$ ORQD$TPV+1҃…D$4uUD$T$< tI V/T$LL$81@ `4P@PT$RPL$@QVCD$T$9\$ jD$PSPVv D$ (D$ t  L$,QD$\PGPD$DPVB …Mf1|$(9_L$0D$L.D$ ӉD$(t&ӉD$0D$$t& L$,D$ L=fD$$D$0D$D$ PD$PPGPV$…9t&1+&D$$D$$\[^_]Ít& V_T$ L$$@ `4@PH0vhLD$|PjVVD$$D$$\[^_]Í&L$uhD$$@l$0L$,dD$HSPPT$4RV>UjjVD$HD$8BHGD$8D$$Sjh"=VD$<eC9WD$$CvD$8D$$,RRPVvD$xD$ D$(D$8xD$,D$ D$0D$$D$ VL$8H@ `4@H8G8J?D$SSQV<D$& VW@ `4@@@PPRV&WVSǃӁz `4tE1V&ƃt?C ST$ t@t RRSWЃD$ C 3C1[^_ø`4ŐPPjjD$Ph3SWy u C 먐t&QShXMW;뵍S\${ 3tڋD$Dt D$S1[ UWVS,D$D|$@HD$3D$HD$1D$XD$DD$D$ .f+} 3tm9t$ t@PhCCPWluPhV;CPWUtvD$9t$ uD$ 9D$Dt9D$th|MD$LPjWD$DD$T$ Go9T$,[^_]Ðt&Pha;CPWtD$.RhO;KQWD$x `4tT$$HtD$@D$PPh9?WA_t&D$HL$BH~P,[^_]ÉT$D$G8_4G4Qt$VhA;WP_4PPRW뢃D$D$ wD$1t$ RD$D$D$1C UWVS\eD$L1\$pt$x|$t~vQQjh=D$$~Ph@+WS1 Ņu,|$w($d)|$thb?VjS_ L$Le3  \[^_]Ít&hL?VjS% $D$t!D$ |$tuFD$ PjjSD$$Vs4<$u ;s8 jWlj7GGG v W?ƅj<$HD$ t 1臾tˋPjRSg PD$PS8뫍v$t&|$tf|$tQv~ `4t !H* FS4 u fR, 9Bu9S8G $PjjS` T$NjB0PWS T$JDQT$WStT$rH$t$t$:T$L$ @ `4@PHPWS3 @H;t&$t&|$ts|$t'v~ `4t H}v Sp@ `4@pt&8 G8J93fQjjS-$D$ ƍl$FFF |$,$> @JQRPh5WjWS PUS Vul$ VD$8G8H$g|$th?;vjHjh?t$'V荖 jVSt&D$tG$|$tVjjSD$D$ jӐǍC<GGG t& Wƅ<$D$t1ɋD$tNjPjRSƃ<$QVt$VSf|$tdst~ 41ɉFp@H3 D$t+VBu B RT$P T$BQR|$WRP^$D$T$PA@ `4 @PJ+|$ ||$tqPjWS PV RSPHQPPh?S{: t&PPh?SS|$t.vF = 5?=4{x$D$PjjS WPS$L$T$ H@ `4@PPVS @HiWWQSh3gWWRSU3TWjFPSNC$d1҃ ‰PB@ `4@@J$VVQS|PPQS;F@t& WD$8G8HD$htWvF@D$QjRSPPVS PPVS+svC8 p j W_D$ BHLD$ hho?h?VVRSPjFPSxT$\p Wh?ahv?WC4 pS@ `4@pxPjjS7I?D$1l$ 1[fՋ3T$ S px@ `4@PD$PS jUS- PD$PST$u$l$ AHVVRSy FHD1NL$QjjSZD$^Gu G WP GRRhj?Pg/WjD$PS^<$9<$RL$ Qt$VS38?IRjP~v4$t$PPRSJȅC8sPVh9?S= ^$PPQSI$FPuSpx4$t$PpVz4B0WPSQvVhMS 1ɉfF܊PPt$S@xSD$ L$fvI1҈Ã?fˀf=wY[Ít&f ?ʀQY[Ít&[fffffffWVS\$t$|$WVh USĜWVPS{ [^_Ít&T$H~ft&'VSS\$p@H~31Z[^QQRS31Z[^Ít&[*t&'VSD$(jjT$RhTT$@SPf uËD$ ttRt.[^Íh jjR觇؃[^Ít&jjjQ芇؃[^Í&h jjPg؃[^ÍWVS t$0D$4_t8PD$ PD$@PVuSD$u[PSjGP_ RRSV AJ~& 1[^_Ív [^_Ít&룍vD$ PPQV#D$ čv'S$\$,RZ RPSA J~1[ÍD$ PPQSD$ 1[Ít&'jD$$PoZYPD$P1ÍS$\$,RJ RPSA J~1[ÍD$ PPQSD$ 1[Ít&'VSP\$t$SH~aC tKStPPPVa)CtPPPVL)C tRR QV7)\$X[^騲 Q PPRV둍v'UWVSTӉ͉D$j:RنPP)PSƍGD$T$ 1׹D$D$$PRjV辊DžtE D$P#ffE4$ ShND$PL[^_]Ív\$PKSRQUD$pS$|[D$PffE4$葱L[^_]Ít& hM蓱Ɖ\$"t&UWVS,Njt$@l$DD$u)tBH,1[^_]Ðt&ՅtL$ PPPW'L$ L$ PPD$$PD$TPD$L$ tD$HBSSuhPhQVW& 1,[^_]ÍPPRW^t&D$JL$t&D$JL$t&D$JL$t&Sà R誁 jPS^A J~ [Ít&D$ PPQSüD$ [Ðt&t,VSQ谈 PEPShNVh$[^fkt&'UWVSt$0|$4\$8t*1PD$PPVaÅtH[^_]ÐRhhKQVuPh NCPVt2룍vPWT$MRQ@uU 떐PhACPV]rt&VS\$Q)@t 1҉Z[^ÍvVZ[^ÍvUWVSLƋE} }e=}18EG]8  Uj( E$ÍxU- M1EE$!UCSQQjP}CEC$F @F PW}j WhShWVFjWVBSY1ue35e[^_]Ðt&]fEKt&xtMPPSQpEM}Muv]A MQ%؋]SҸl]QQSVE躹ER&MRRjP{Y_SPEM뀃 j(}$Íx1tftE$者 UCSjjPz~C CCRRQVEEfEEf@xE#t&@x#H&f=vWVSt$ |$(|$$tkRRT$RPF Q|$ WjP6 ;D$ tS[^_Í&x4tP;Ps_JH 1[^_Ðt&Rh6PVt[PPD$PGPĿRL$ QjP贃 ;D$ z1믍vQQPj &@_1RRPj .SUWVS,$H$@D$ e$1pD$PjjV赿Ǎ\$.f$$ hSWVƄ$_QEPhSD|u UR!tD$t &$DBHK>1ۉ؋$e3 ,[^_]Íڋ !%t驀1)tЍR| PSWV9PWD$PV5Å W URPVBJ%t&1)r]t&PPWV藵UXEPSSWVbfPPRVO&PSWV@ MQ{%D$WWQVD$S{'UWVS,$@$De $1ɉD$$HPjjT$RD$t$PhjVE~n S|H$DD$(E(D$HMD$L$1$e3 ,[^_]fPD$VL$Q\$SkD$ =kOfPh6RL$QB$D DŽ$DPD$PPD$PfD$\$PjjT$R̻D$ۍt$݁~PUjV|9t Pu}ZQx~8 PPD$Pt$VҲWvPPD$PD$P臺T$ O| DT$BD$ HBR)f$DH$D$D$DPjjD$P袺D$DŽ$DvPD$VD$PD$PD$)9wt&VVR|$WӱWjhQt$V)(E(J~L$rD$SSQt$V肱D$xt&VS\$$D$PD$0PSot [^ÍvPPT$NRQxz…t܉[^Ít&'WVS \$0eD$1D$D$ RT$ ORPQ(xxA$Pjh(NSh/NW1h2NP7 L$e3 u [^_Éi}w'UWVSD|$`\$XeD$41wjVZT$$RL$,t|$,e3=<[^_]fPPD$PPǷL$(T$$L$T$XEP|ZYL$QT$(RjT$RWPx xJRRPS<A 9W~kD$PPQSsD$Pt&ؾD:Zvv'UWVSĀeE1u]EEPQS,t%Ћue35ye[^_]Í xE@P͡ME|XMPM{}ZUY|W}QjWRPt xMUWPQS;BUI} K}Ej5WP1fEPUz !%t驀fEf%PhDNjRrjWSS PFPS,…vRRWSE购UEO MQ褠}dtUWVST$T$,e$1׋E$T$ D$D$ $:hND$$PjSh$e3=[^_]ÐPhNEPST$ uePPjhND$(PRURS謸 ¸usx@H3$uSt$$T&PjhNS´ 8G89W-t&VV}jW|$L$$Tf$t$L T$0R‰kuD$tRjPj+rDžQD$(PVW!pHNhfPPRS&D$ VVQScD$ &UjhNvQjjjqǸHNMh/N1VPQt&$ D$0P5rYuh >jhNV1ҋL$4]uBPjjS RPSMhjjhNQ1ҋL$H 1 D$0PwXD$4PwEH$ t$L T$0R‰1|$@RjPjrpDžM jD$,PjjWqD$(PVWq+|$LTNt&$fD$LPh2^jlt$ZVqn jjjoDž Vu PD$TPW+qPPjWrsN$fD$LPh2^jlt$ZVm jjjWoDžx6 VUu PD$TPWCmu cNt&eU WuJjpPPjWqD Wu D$ P3VS PD$ ~3PPQS3D$  oUWVSD$4t$0\$8Pw] >PPCjP蚯 Sh%ORVtGIJCWjUP'[^_]Ít&hOSjV[^_]fPh+OCPV8t!렐QQ{jW ZPh2OCPVtȲeQQkjUˮŀ8|t O1D$ VSQt$jhOhOVNuA jjh.h:OVjjh@)hOVhjD$,PCPWV)jD$(PjUD$`RV 9\$ ,[^_]ÍvWjhWVz(E(J~/,[^_]PWD$PPV ,[^_]ÍD$ SSQV軡D$ f1뉍WVSt$\$|$PjRSt&OtVT$D$\$[^_$t&1t&[1^_fUWVS0|$L\$DjPSFƃ|$DtJUhBGPSŅu1PPjD$$PjjVS t~,[^_]Í& Vot8AH3,1[^_]Í,1[^_]Ít& VG|ifD$PD$ PD$ PS{ƅ`tz|$@H~V; D$(P76&PPRSS&RRVS$k&PPRSןfQjjSD$D$tt&9l$~gj D$ PWL$RS8L$tPD$ PD$L$PS D$ L$ DPD$PS땐t&D$ 8G8H~ D$ QQRSvUWVS,\$@t$H|$DtPhBFPSھtPj1PS5,[^_]RjQS_]jT$$RjjPS t,[^_]fD$PD$ PD$ PSDžuPjjSD$D$~X1 t&;l$}Gj D$ PFL$PSؼL$u͋D$TR QD$PS밃 D$(P T$RQSv'VSQt$jhOhWVBHu jhXhhWVO Z[^fffUWVSX\$lt$tjhD$ ~hXWSDPP|$WD$PhNXZjQ XZjQ WUPit8t6Wjh4YSh (E(J~UL[^_]Í Wd RPSW B9W~*L1[^_]ÍD$ VVQS胜D$ fD$ PPQSkD$ fz&S$\$,jf RPS BJ~1[Ðt&D$ PPQSD$ 1[ÍvWVSĀeD$|1$$$X$QD$PSVÅt؋T$|e3[^_ËD$ D$D$PePWjd|$4WgjWV蹣BJ~6fPhXCPVt9WWCjPSfD$ PPQVD$ St&FavUWVS4t$HjD$$Pd L$ʉ݉)ӺMbl$ D$ )‰SQVBS~,1[^_]ÍvD$ PPQV+D$ ,1[^_]Ð&WVS(\$8jD$$P:d @Bt$ l$RPSy B9W~  1[^_ÐD$ PPQS諙D$  1[^_É'VSQt$jhOhXVDu jh`ZhhXV Z[^fffT$H~f+t&'UWVS |$$t$ _t*fC kt RRKQVЃ Su؋_ t)Ck$t RRK QVЃ SNju؉|$ [^_]鰋WV[T$ RPkƒ8u-Rj T$RPtuD$T$ ^_Í&UWVS4\$Hh[SjŋC8{4C4XZL$LQS^Ɖ{4tEt,[^_]Ðt&Pjh[SRD$(T$, A:G:jPS"tWD$PjSStY SD\]XjPh PȲh![P4_ jhSԟ B9W~GT$H~PT$H0PPRS&MAM&D$ WWQSD$ fQQRSft&'Sh[D$P$诉T$$T$(PT$,PT$4P T$0PSPC[ WVS|$t$SSh[W蘼PtZ;2uEt&C93tډÅu[^_Ðt&BC t RRKQWЃ\$[^_Xԉ'UWVS4t$L|$Ph[D$LPL$D$QT$QZYjD$$P_\$,Mb؋l$($()ډT$}ËT$D$s SCjhWVʼnkjhWV谀t$( L$ C=~ E-kCD$Li CD$TCD$PC t'{1 P$ƅt1;x| uP9S}uk$$Y T$,[^_]Ðt&P$S$X$T$$,[^_]ÍUWVS$t$@|$RMƍ\$VhjSYMJPPD$ PWUT$(~| tS VM1$e3 uE,[^_]fPD$SWU諟D$ =t뙍v뼐GWHG Jt&'UWVSD$ T$L$D$XD$(D$LD$PD$T|$\PuD$0thw~]$ t& NtJCtPjWPF@tEU @T9t JKRSH NEu&$t $$t $D$DŽ$DŽ$.HD$4D$D$<D$(D$,D$$D$D$8D$1ۉD$0&PPj4D$0PHŃ<<<><2Bt.\jD$@9t 9\$0JPjh]|$ WpB9WL$ |$,WsD$D$Ĝ[^_]fE<<e<@MD$,L$$uBC9\$QUh(]\$ SZ딐t&PPjD$D0P>D$4&9\$~D$CD$9\$SjhBt$ V]ŅRRPL$ Q#Ã,$<D8$rD$lǃ) KC1ۉD$`& 4j$PVUFD$0Psj$PaD$d$$PVUD$0PBj$P0t$\%MD$(L$1<&uL$yA|$<@uT$D$(JBL$u$C9\$yPPjD$D0P҄D$ D$D$4D$(D$<~t$8\$Ft$8|$L$ G,b}>UE<@<>}D$<|$4$C9\$QQjD$t0V7D$DvED$,D$$EED$(D$EED$,D$$EkED$<D$4EmD$XWWQl$ U{D$Xv}tLED$<D$4D$dfPjhT]t$ VB1V~&t$D$<DD$\LD$xUUQD$ PJ{D$xD$Dt$ D$|D$h 9|)t$h|$t$ t& 9|iC9\$t1ۋt$t9t$D$HD$lD$P8tD$lD$D1FÅD$@t SSjP>@D$lt QQjP(@D$Dt RRjP@|$@ƒ|$lu|$D~* SvGC9\$l9\$@u9\$D}ۋt$hD$ VVS;WG +ȲUh\PA$RF$c $PA$$D$H$DŽ$DŽ$PjD$,P|$ WXZVWY]VWZytE SE$bDD$P{AE P=PD$HPh7\D$0P $t'$t P,F$$t'$t PE$$t PE$t PE\$Lt`L$~H1l$Lt&\t.D$p~1ҍA ;u 9 ;Xt.B9uG;|$|ƒ D$XP%kD$!t&QQ̋$1ҋD$+D$Dà PB$\$DT$$D$D$@Kjt$4PSjt$$D$l"Sjt$V|$ WP]XVWUXZVWv SV=$B$AD$X*D$\y\$t1ۀy&B 0V;P|$$Wh7\l$0U: D]B S:Pt$8VhA<|$0W D$Ht) P3AD$T@D$@D$4+Oqp\D$T\D$VVjj %>t$PV;VuVQk QRPhV RBt$|$@@D$PPD$LD$|D$Dt t$LB|$lt t$xrB$DŽ$D$@D$@DŽ$D$D$t@D$hD$hD$t]\D$&UWVSLD$h\$dl$`H~$L$ RLhBQU萔L$ SSD$8PD$8PD$DPD$$QPjhU|MB9WT$0ED$D$4D$,D$8D$(D$D$D$(L$D$ D$D$D$31[^_]f)RPVSrA 9W~ 1[^_]Ít&WWRSjfD$ PPQSjD$ ʐ&VS\$(jD$40VqZYj/PM1tv9t*)QPVS'r BJ~/1[^fVjhASq B1VщD$ PPQShiD$ 1[^Í&Qjh`뉍WVSÃhhP]6-5Ƌt4uaPPD$PS-ucT$@uQ`[^_fQQj/SV0Džt9u9RRhS5tu`[^_Ít&1볍t&Fu/봍'UWVS \$$t$(u kvKtbWW.jU&p$n[ʼn<$=[t14 P,PRhDaL$MD$tPPjPDD$4XZL>D$XZD$@Pt$QDƋD$D8 D$< jhUED$D$@PS|$WUXD$@L$D)؉D$$L$(1D$ PD$PPj2L$,Q\$8S vT$ L$@BT$ Q\$S|$WUXD$81Yv\ >BЃ wV11T@t(DDt)PD$RD$PU2X&9\$8~J{&u1뵍\&~D>jPD$PUW9\$8vD$D|$)Nj\$É|$D$\$L$t~tzD$$D$ u<^titCjRD$PUWPjQD$PUjW:fj|$WL$QUFW@D$$L$ujD$PT$RU$W|$(t@D$BUHD$1ۉET$4x_9T$0PD$ PD$4PUIÅufPD$$RPU`ƃ@EQ~QuDD$09nD$01_PPRU9YQQt$VU98WWPU9fS\$ CPoCD$ [, VSQt$jhOh"=Vu3 jjhh"=VZjjhhhVY Z[^fWVL$ 0H H^_ÍvL$11  ( , Љ (,S(|$4t%hX\$wF[^_]Ít&C@t* SZYVPuރ[^_]Ít&RjhpjU =AMJ~EjWPUP냉D$ PPQUd4D$ Սt&'UWVS,T$Dl$@t$HB^iu<‰…x T$ WD$ PSU$T$ },[^_]PPjS;j^)ʃ҅tj)҅tuhjVjUp,[^_]fSSRt$(V;pRjhjU;AM9W~ E?t&D$ PPQU#3D$ ލv'WVS\$ |$$t1< u!( (, ,1[^_ËS(K, S(K,P jPS; 0F09W~V[^_PPjD$4PP:‰'xUoD$ PPQS+2D$ fUWVS<ƉӅͅ1l$ t$l$Pvtktf G9|$ QQtjV9‹D$sƅ 9tąu t RjPV>뛐  RPD$$PVj<1[^_]ÍD$ D$4PD$fPjjV XBJ t&G@t9 u W jPV$9 P.UVXf<[^_]ÍvQj- h{#  D$^D$PPQVT0D$b&T$ D$L$T$1 'T$ D$L$T$&T$ D$L$T$UWVS \$4t$8|$jhTPS>D0[^_Í&T$ D$RRQS_&T$ D$fUWVS4\$HjD$XQ.|$HD$L|$HpPhГVSEŅt D$LpPhVSEQQD$$PV-D$D$T|$DD$ RPVSEPD$ PPD$P8D$ L$LT$DؿHu,[^_]ÍvWjhS- (E(J#T$DعA,H[^_]fWhVSDRhГVSDŅ`|$ L$ |$ %D$HPG 9~Gf$L$HQ9PjhVS, BJ OD$X0VjhT;WS1A vQjhSr, 0F0JD$Dt$D|$LFu NP[Ft jPhPSMA jhPS:A륐t&PjhȓS+ BJ OD$X0VGt jP hQS@ ,H[^_]ÍvD$VVQS"D$&T$ --t&VVD$TxWD$X(UT$T1@t&PjhS* BJUUjhnVhs6PS@ 1jh}VhVhPS? D$RRQS"D$$&QQD$Th8pVD$X8W;D$PPQS!D$cD$UUQS!D$hD$UUQS!D$Uv'S\$tlSCu+PD$ PD$ PD$P҃x%[Í&PD$ PD$ PD$P҃yۋD$ڋD$V[Ít&[Í&'WVS\$t$|$WVPSWVPSI [^_fUWVS,t$H\$@|$Dl$L~cGt\Qh֓EPS@)UjhS( BJ$Wع1,[^_]ÐG 9}GfN91ɉOPPUjR'Y^jh;PhWS= ,[^_]fPhEPS?RjhȓS/(A JH ؍OjEW1tD$ jRhPS1= D$ st&PhURS@?uPhГEPS)?ГT$ PjhS'D$ jT$RSs'D$$t ED$D$oPVUSXZL$QS^_l$US1f&PhГEPS>PhEPSp>-BvnD$ PPQSSD$ &D$ VVQS3D$ fffUWVS$$D$,e$1D$DP$R%\$LD$ÉƉ\$ jhW3&D$9D$(D$ D$D$$1@;t$<D$; n>%uV^%j1ҡPoD$CD$ $9$CD$`%L$;t$aD$w($D$FE^1ۊ]CvބD$DX7*~D$HD$.u1E]D$X)*EhD$1҃l-it(x$(FE^1۲0]Wt&dD$D1D$D$$ $QT$\RPW*@T$DF9}‹D$tD$HZ;T$( D$hPT$hRD$tPSL$fffUWVS,\$DL$@D$HT$LD$ޅyكD$ۉމׅy ؃ډ׉‰D$L$t$ uӉ9vaT$ D$ 1 9vȉL$t؃ڃ,[^_]ÐǃD$uT9L$9L$D$T$ 뼍t&\$u 1D$\$1D$T$ yf \$ˆ)ڋl$ ؈щl$ l$ L$T$d$ ʼn9ru9s +D$ щ)ˊL$ߋl$ t&D$+D$T$ D$fffUWVS,1\$DL$@D$HT$L$y كۉ$։l$ y؃|$ ډ։ljL$ȋ$u 9D$D$1L$$9vAΉD$1ɉȋL$ T$t؃څtރߋL$P1y,[^_]fƃD$uT;4$1;|$t$뤍&u 1Nj$1҉ËD$\$D$Qv T$È)Ӊى\$ ƈщt$4$D$؉t$ t$t$$Ét$d$ljT$9$ru9s+D$T$YT$Nj$L$D$)T$<$L$ $ ΊL$׉D$t&D$$)D$fffffffUWVST$ 0} { SetStorageDelay $flags(stordelay) } if {[lindex $argv 0] == "--symlink-name"} { puts -nonewline [SymLinkName [lindex $argv 1]] SafeExit } Log "Raw parameters: $argv" set device "noname" if {[lindex $argv 0] == "--switch-mode"} { if [string length [lindex $argv 1]] { set arg1 [lindex $argv 1] } else { Log "\nNo data from udev. Exit" SafeExit } } else { Log "\nNo command given. Exit" SafeExit } if {![regexp {(.*?):.*$} $arg1 d device]} { if {![regexp {([0-9]+-[0-9]+\.?[0-9]*.*)} $arg1 d device]} { Log "Could not determine device dir from udev values! Exit" SafeExit } } set flags(logwrite) 1 set setup(dbdir) /usr/share/usb_modeswitch set setup(dbdir_etc) /etc/usb_modeswitch.d if {![file exists $setup(dbdir)] && ![file exists $setup(dbdir_etc)]} { Log "\nError: no config database found in /usr/share or /etc. Exit" SafeExit } set bindir /usr/sbin set devList1 {} set devList2 {} set ifChk 0 set devdir /sys/bus/usb/devices/$device if {![file isdirectory $devdir]} { Log "Top device directory not found ($devdir)! Exit" SafeExit } Log "Use top device dir $devdir" set iface 0 Log "Check class of first interface ..." set config(class) [IfClass 0 $devdir] if {$config(class) < 0} { Log " No access to interface 0. Exit" SafeExit } Log " Interface 0 class is $config(class)." set ifdir [file tail [IfDir $iface $devdir]] regexp {:([0-9]+\.[0-9]+)$} $ifdir d iface set match(sVe) scsi(vendor) set match(sMo) scsi(model) set match(sRe) scsi(rev) set match(uMa) usb(manufacturer) set match(uPr) usb(product) set match(uSe) usb(serial) if {![ReadUSBAttrs $devdir]} { Log "USB attributes not found in sysfs tree. Exit" SafeExit } set config(vendor) $usb(idVendor) set config(product) $usb(idProduct) if $flags(logging) { Log "\n----------------\nUSB values from sysfs:" foreach attr {manufacturer product serial} { Log " $attr\t$usb($attr)" } Log "----------------" } if $flags(noswitching) { SysLog "usb_modeswitch: switching disabled, no action for $usb(idVendor):$usb(idProduct)" Log "\nSwitching globally disabled. Exit" SafeExit } if {$usb(bNumConfigurations) == "1"} { set configParam "-u -1" Log "bNumConfigurations is 1 - don't check for active configuration" } else { set configParam "" } set flags(os) "linux" if {$usb(idVendor) == "12d1" && [regexp -nocase {android} [exec cat /proc/version]]} { set flags(os) "android" } if {$flags(os) == "android"} { set configList [ConfigGet conflist $usb(idVendor):#android] } else { set configList [ConfigGet conflist $usb(idVendor):$usb(idProduct)] } if {[llength $configList] == 0} { Log "Aargh! Config file missing for $usb(idVendor):$usb(idProduct)! Exit" SafeExit } Log "ConfigList: $configList" set scsiNeeded 0 if {[llength $configList] > 1} { if [regexp {:s} $configList] { set scsiNeeded 1 } } if $scsiNeeded { if [ReadSCSIAttrs $devdir:$iface] { Log "----------------\nSCSI values from sysfs:" foreach attr {vendor model rev} { Log " $attr\t$scsi($attr)" } Log "----------------" } else { Log "Could not get SCSI attributes, exclude devices with SCSI match" } } else { Log "SCSI attributes not needed, move on" } set report "" foreach mconfig $configList { if [regexp {\.(dpkg|rpm)} $mconfig] {continue} Log "Check config: $mconfig" if [MatchDevice $mconfig] { Log "! matched. Read config data" set flags(config) [ConfigGet conffile $mconfig] break } else { Log "* no match, don't use this config" } } if {$flags(config) == ""} { Log "No matching config file found. Exit" SafeExit } ParseDeviceConfig $flags(config) if [regexp -nocase {0x([0-9a-f]+)} $config(TargetClass) d tc] { if {$tc == $config(class)} { Log "Class of interface 0 matches target. Do nothing" set report "ok:busdev" } } if [string length $usb(busnum)] { set busParam "-b [string trimleft $usb(busnum) 0]" set devParam "-g [string trimleft $usb(devnum) 0]" } else { set busParam "" set devParam "" } if [regexp -nocase $flags(os) $flags(config)] { Log "Note: Using generic manufacturer configuration for \"$flags(os)\"" } if $flags(althuawei) { regsub {HuaweiNewMode} $flags(config) {HuaweiAltMode} flags(config) Log "Alternative Huawei mode set globally, modify config" } if $flags(nombim) { set config(NoMBIMCheck) 1 } if {$config(NoMBIMCheck)==0 && $usb(bNumConfigurations) > 1} { Log "Device may have an MBIM configuration, check driver ..." if [CheckMBIM] { Log " driver for MBIM devices is available" Log "Find MBIM configuration number ..." if [catch {set cfgno [exec /usr/sbin/usb_modeswitch -j -Q $busParam $devParam -v $usb(idVendor) -p $usb(idProduct)]} err] { Log "Error when trying to find MBIM configuration, switch to legacy modem mode" } else { set cfgno [string trim $cfgno] if {$cfgno > 0} { set config(Configuration) $cfgno set flags(config) "Configuration=$cfgno" } else { Log " No MBIM configuration found, switch to legacy modem mode" } } } else { Log " no MBIM driver found, switch to legacy modem mode" } } if [PantechAutoSwitch] { Log "Waiting for Pantech auto-modeswitch" set report "ok:busdev" } if {$config(Configuration) == 0} { Log "Config file contains dummy method, do nothing. Exit" SafeExit } after 500 if {$config(WaitBefore) != ""} { Log "Delay time of $config(WaitBefore) seconds" append config(WaitBefore) "000" after $config(WaitBefore) } if {$report == ""} { if $flags(logging) { Log "Command line:\nusb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f \$flags(config)" catch {set report [exec /usr/sbin/usb_modeswitch -W -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report Log "\nVerbose debug output of usb_modeswitch and libusb follows" Log "(Note that some USB errors are to be expected in the process)" Log "--------------------------------" Log $report Log "--------------------------------" Log "(end of usb_modeswitch output)\n" } else { catch {set report [exec /usr/sbin/usb_modeswitch -Q -D $configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f "$flags(config)" 2>@1]} report } } if {$config(Configuration) != ""} { set ifdir [regsub {(\d):\d+\.0} $ifdir "\\1:$config(Configuration).0"] } if [regexp {ok:busdev} $report] { if [CheckSuccess $devdir] { Log "Mode switching was successful, found $usb(idVendor):$usb(idProduct) ($usb(manufacturer): $usb(product))" SysLog "usb_modeswitch: switched to $usb(idVendor):$usb(idProduct) on [format %03d $usb(busnum)]/[format %03d $usb(devnum)]" } else { Log "\nTarget config not matching - current values are" LogAttributes Log "\nMode switching may have failed. Exit" SafeExit } } else { if {![file isdirectory $devdir]} { Log "Device directory in sysfs is gone! Something went wrong, abort" SafeExit } if {![regexp {ok:} $report]} { Log "\nCore program reported switching failure. Exit" SafeExit } if {![file exists $devdir/idProduct]} { after 1000 } ReadUSBAttrs $devdir $ifdir } if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} { if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) usb(idProduct)]} { Log "No target vendor/product ID found or given, can't continue. Abort" SafeExit } } after 500 if {[llength [glob -nocomplain $devdir/$ifdir/ttyUSB*]] > 0} { Log "Serial USB driver bound to interface 0\n will try to guess and symlink modem port on next connect" AddToList link_list $usb(idVendor):$usb(idProduct) } if [regexp {ok:} $report] { Log "Check for AVOID_RESET_QUIRK kernel attribute" if [file exists $devdir/avoid_reset_quirk] { if [catch {exec echo "1" >$devdir/avoid_reset_quirk 2>/dev/null} err] { Log " Error setting the attribute: $err" } else { Log " AVOID_RESET_QUIRK activated" } } else { Log " not present in this kernel" } } Log "\nAll done, exit\n" SafeExit } proc {ReadSCSIAttrs} {topdir} { global scsi set counter 0 set sysdir $topdir Log "Check storage tree in sysfs ..." while {$counter < 20} { Log " loop $counter/20" if {![file isdirectory $sysdir]} { Log " sysfs device tree is gone; abort SCSI value check" return 0 } if {[set dirList [glob -nocomplain $topdir/host*]] != ""} { set sysdir [lindex $dirList 0] if {[set dirList [glob -nocomplain $sysdir/target*]] != ""} { set sysdir [lindex $dirList 0] regexp {.*target(.*)} $sysdir d subdir if {[set dirList [glob -nocomplain $sysdir/$subdir*]] != ""} { set sysdir [lindex $dirList 0] if [file exists $sysdir/vendor] { Log " Storage tree is ready" break } } } } after 500 incr counter } if {$counter == 20} { Log "SCSI tree not found; you may want to check if this path/file exists:" Log "$sysdir/vendor\n" return 0 } Log "Read SCSI values ..." foreach attr {vendor model rev} { if [file exists $sysdir/$attr] { set rc [open $sysdir/$attr r] set scsi($attr) [read -nonewline $rc] close $rc } else { set scsi($attr) "" Log "Warning: SCSI attribute \"$attr\" not found." } } return 1 } proc {ReadUSBAttrs} {dir args} { global usb set attrList {idVendor idProduct bConfigurationValue manufacturer product serial devnum busnum bNumConfigurations} set mandatoryList {idVendor idProduct bNumConfigurations} set result 1 if {$args != ""} { lappend attrList "$args/bInterfaceClass" lappend mandatoryList "$args/bInterfaceClass" } foreach attr $attrList { if [file exists $dir/$attr] { set rc [open $dir/$attr r] set usb($attr) [string trim [read -nonewline $rc]] close $rc } else { set usb($attr) "" if {[lsearch $mandatoryList $attr] > -1} { set result 0 } if {$attr == "serial"} {continue} Log " Warning: USB attribute \"$attr\" not found" } } return $result } proc {MatchDevice} {config} { global scsi usb match set devinfo [file tail $config] set infoList [split $devinfo :] set stringList [lrange $infoList 2 end] if {[llength $stringList] == 0} {return 1} foreach teststring $stringList { if {$teststring == "?"} {return 0} set tokenList [split $teststring =] set id [lindex $tokenList 0] set matchstring [lindex $tokenList 1] set blankstring "" regsub -all {_} $matchstring { } blankstring Log "match $match($id)" Log " string1 (exact): $matchstring" Log " string2 (blanks): $blankstring" Log " device string: [set $match($id)]" if {!([string match *$matchstring* [set $match($id)]] || [string match *$blankstring* [set $match($id)]])} { return 0 } } return 1 } proc {ParseGlobalConfig} {} { global flags set configFile "" set places [list /etc/usb_modeswitch.conf /etc/sysconfig/usb_modeswitch /etc/default/usb_modeswitch] foreach cfg $places { if [file exists $cfg] { set configFile $cfg break } } if {$configFile == ""} {return} set rc [open $configFile r] while {![eof $rc]} { gets $rc line if [regexp {^#} [string trim $line]] {continue} if [regexp {DisableMBIMGlobal\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {1|yes|true} $val] { set flags(nombim) 1 } } if [regexp {DisableSwitching\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {1|yes|true} $val] { set flags(noswitching) 1 } } if [regexp {EnableLogging\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {0|no|false} $val] { set flags(logging) 0 } } if [regexp {SetStorageDelay\s*=\s*([^\s]+)} $line d val] { if [regexp {\d+} $val] { set flags(stordelay) $val } } if [regexp {HuaweiAltModeGlobal\s*=\s*([^\s]+)} $line d val] { if [regexp -nocase {1|yes|true} $val] { set flags(althuawei) 1 } } } return "Use global config file: $configFile" } proc ParseDeviceConfig {cfg} { global config set config(WaitBefore) "" set config(TargetVendor) "" set config(TargetProduct) "" set config(TargetClass) "" set config(Configuration) "" set config(NoMBIMCheck) 0 set config(PantechMode) 0 set config(CheckSuccess) 20 foreach pname [lsort [array names config]] { if [regexp -line "^\[^# \]*?$pname.*?= *(0x(\\w+)|\"(\[0-9a-fA-F,\]+)\"|(\[0-9\]+)) *\$" $cfg d config($pname)] { } } set config(WaitBefore) [string trimleft $config(WaitBefore) 0] } proc ConfigGet {command config} { global setup usb flags switch $command { conflist { set configList [lsort -decreasing [glob -nocomplain $setup(dbdir_etc)/$config*]] set configList [concat $configList [lsort -decreasing [glob -nocomplain $setup(dbdir)/$config*]]] eval lappend configList [glob -nocomplain $setup(dbdir)/$usb(idVendor):#$flags(os)] if [file exists $setup(dbdir)/configPack.tar.gz] { Log "Found packed config collection $setup(dbdir)/configPack.tar.gz" if [catch {set packedList [exec tar -tzf $setup(dbdir)/configPack.tar.gz 2>/dev/null]} err] { Log "Error: problem opening config package; tar returned\n $err" return {} } set packedList [split $packedList \n] set packedConfigList [lsort -decreasing [lsearch -glob -all -inline $packedList $config*]] lappend packedConfigList [lsearch -inline $packedList $usb(idVendor):#$flags(os)] foreach packedConfig $packedConfigList { lappend configList "pack/$packedConfig" } } return $configList } conffile { if [regexp {^pack/} $config] { set config [regsub {pack/} $config {}] Log "Extract config $config from collection $setup(dbdir)/configPack.tar.gz" set configContent [exec tar -xzOf $setup(dbdir)/configPack.tar.gz $config 2>/dev/null] } else { if [regexp [list $setup(dbdir_etc)] $config] { Log "Use config file from override folder $setup(dbdir_etc)" SysLog "usb_modeswitch: use overriding config file $config; make sure this is intended" SysLog "usb_modeswitch: please report any new or corrected settings; otherwise, check for outdated files" } set rc [open $config r] set configContent [read $rc] close $rc } return $configContent } } } proc {Log} {msg} { global flags device loginit if {$flags(logging) == 0} {return} if $flags(logwrite) { if [string length $loginit] { exec echo "\nUSB_ModeSwitch log from [clock format [clock seconds]]" >/var/log/usb_modeswitch_$device exec echo "$loginit" >>/var/log/usb_modeswitch_$device set loginit "" } exec echo $msg >>/var/log/usb_modeswitch_$device } else { append loginit "\n$msg" } } proc {SafeExit} {} { global flags set flags(logwrite) 1 Log "" exit } proc {SymLinkName} {path} { global device flags proc {hasInterrupt} {ifDir} { if {[llength [glob -nocomplain $ifDir/ttyUSB*]] == 0} { Log " no ttyUSB interface - skip endpoint check" return 0 } foreach epDir [glob -nocomplain $ifDir/ep_*] { set e [file tail $epDir] Log " check $e ..." if [file exists $epDir/type] { set rc [open $epDir/type r] set type [read $rc] close $rc if [regexp {Interrupt} $type] { Log " $e has interrupt transfer type" return 1 } } } return 0 } set loginit "usb_modeswitch called with --symlink-name\n parameter: $path\n" set linkpath /sys$path/device if [file exists $linkpath] { if {[file type $linkpath] == "link"} { set rawpath [file readlink $linkpath] set trimpath [regsub -all {\.\./} $rawpath {}] if [file isdirectory /sys/$trimpath] { append loginit "\n Use path $path\n" set path /$trimpath } } } if {![regexp {([0-9]+-[0-9]+[\.0-9]*:[^/]*).*(ttyUSB[0-9]+)} $path d myDev myPort]} { if $flags(logging) { set device [clock clicks] set flags(logwrite) 1 Log "$loginit\nThis is not a ttyUSB port. Abort" } return "" } set device ttyUSB_$myDev set flags(logwrite) 1 Log "$loginit\nMy name is $myPort\n" if {![regexp {(.*?[0-9]+)\.([0-9]+)/ttyUSB} /sys$path d ifRoot ifNum]} { Log "Could not find interface in path\n $path. Abort" return "" } set ifDir $ifRoot.$ifNum Log "Check my endpoints ...\n in $ifDir" if [hasInterrupt $ifDir] { Log "\n--> I am an interrupt port" set rightPort 1 } else { Log "\n--> I am not an interrupt port\n" set rightPort 0 } if { $rightPort && ($ifNum > 0) } { Log "\nLook for lower ports with interrupt endpoints" for {set i 0} {$i < $ifNum} {incr i} { set ifDir $ifRoot.$i Log " in ifDir $ifDir ..." if [hasInterrupt $ifDir] { Log "\n--> found an interrupt interface below me\n" set rightPort 0 break } } } if {$rightPort == 0} { Log "Return empty name and exit" return "" } Log "\n--> No interrupt interface below me\n" cd /dev set idx 2 set symlinkName "gsmmodem" while {$idx < 256} { if {![file exists $symlinkName]} { set placeholder [open /dev/$symlinkName w] close $placeholder break } set symlinkName gsmmodem$idx incr idx } if {$idx == 256} {return ""} Log "Return symlink name \"$symlinkName\" and exit" return $symlinkName } proc {AddToList} {name id} { set listfile /var/lib/usb_modeswitch/$name if [file exists $listfile] { set rc [open $listfile r] set buffer [read $rc] close $rc if [string match *$id* $buffer] { return } set idList [split [string trim $buffer] \n] } lappend idList $id set buffer [join $idList "\n"] if [catch {set lc [open $listfile w]}] {return} puts $lc $buffer close $lc } proc {CheckSuccess} {devdir} { global config usb flags if {$usb(idVendor) == "1307" && $usb(idProduct) == "1169"} { set devdir [string range $devdir 0 end-1]2 } set ifdir [file tail [IfDir 0 $devdir]] if {[string length $config(TargetClass)] || [string length $config(Configuration)]} { set config(TargetVendor) $usb(idVendor) set config(TargetProduct) $usb(idProduct) } Log "Check success of mode switch for max. $config(CheckSuccess) seconds ..." set expected 1 for {set i 1} {$i <= $config(CheckSuccess)} {incr i} { after 1000 if {![file isdirectory $devdir]} { Log " Wait for device file system ($i sec.) ..." continue } else { Log " Read attributes ..." } set ifdir [IfDir 0 $devdir] if {$ifdir == ""} {continue} set ifdir [file tail $ifdir] if {![ReadUSBAttrs $devdir $ifdir]} { Log " Essential attributes are missing, continue wait ..." continue } if [string length $config(Configuration)] { if {$usb(bConfigurationValue) != $config(Configuration)} {continue} } if [string length $config(TargetClass)] { if {![regexp -nocase $usb($ifdir/bInterfaceClass) $config(TargetClass)]} { if {$config(class) != $usb($ifdir/bInterfaceClass} { set expected 0 } else {continue} } } if {![regexp -nocase $usb(idVendor) $config(TargetVendor)]} { if {![regexp -nocase $usb(idVendor) $config(vendor)]} { set expected 0 } else {continue} } if {![regexp -nocase $usb(idProduct) $config(TargetProduct)]} { if {![regexp -nocase $usb(idProduct) $config(product)]} { set expected 0 } else {continue} } if $expected { Log " All attributes matched" } else { if [regexp -nocase {/[0-9a-f]+:#} $flags(config)] { Log " idProduct has changed after generic mode-switch, assume success" } else { if [regexp {HuaweiAltMode} $flags(config)] { Log " Alternative target attributes found, assume success" } else { Log " Attributes are different but target values are unexpected:" LogAttributes } } } break } if {$i > 20} {return 0} else {return 1} } proc {IfDir} {iface devdir} { set allfiles [glob -nocomplain $devdir/*] set files [glob -nocomplain $devdir/*.$iface] if {[llength $files] == 0} { return "" } set ifdir [lindex $files 0] if {![file isdirectory $ifdir]} { return "" } return $ifdir } proc {IfClass} {iface devdir} { set ifdir [IfDir $iface $devdir] if {![file exists $ifdir/bInterfaceClass]} { return -1 } set rc [open $ifdir/bInterfaceClass r] set c [read $rc] close $rc return [string trim $c] } proc {SysLog} {msg} { global flags if {![info exists flags(logger)]} { set flags(logger) "" foreach fn {/bin/logger /usr/bin/logger} { if [file exists $fn] { set flags(logger) $fn } } Log "Logger is $flags(logger)" } if {$flags(logger) == ""} { Log "Can't add system message, no syslog helper found" return } catch {exec $flags(logger) -p syslog.notice "$msg" 2>/dev/null} } proc {SetStorageDelay} {secs} { Log "Adjust delay for USB storage devices ..." set attrib /sys/module/usb_storage/parameters/delay_use if {![file exists $attrib]} { Log "Error: could not find delay_use attribute" return } if [catch {set ch [open $attrib r+]} err] { Log "Error: could not access delay_use attribute: $err" return } if {[read $ch] < $secs} { seek $ch 0 start puts -nonewline $ch $secs Log " Delay set to $secs seconds\n" } else { Log " Current value is higher than $secs. Leave it alone\n" } close $ch } proc {CheckMBIM} {} { set kversion [exec uname -r] if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/cdc_mbim*]] {return 1} if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1} return 0 } proc {CheckQMI} {} { set kversion [exec uname -r] if [llength [glob -nocomplain /lib/modules/$kversion/kernel/drivers/net/usb/qmi_wwan*]] {return 1} if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1} return 0 } proc {PantechAutoSwitch} {} { global config flags if {$config(PantechMode) == 3} {return 1} if {$config(PantechMode) == 1} { if {"$config(vendor):$config(product)" == "10a9:6080"} { set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=2"] Log " PantechMode changed to 2" return 0 } elseif [CheckQMI] { set flags(config) [regsub {PantechMode *= *1} $flags(config) "PantechMode=4"] Log " PantechMode changed to 4" return 0 } else { return 1 } } else {return 0} } proc {LogAttributes} {} { global flags usb if $flags(logging) { set attrList {idVendor idProduct bConfigurationValue manufacturer product serial} foreach attr [lsort [array names usb]] { Log " [format %-26s $attr:] $usb($attr)" } } } proc {HasFF} {devdir} { set i 0 while {[set dir [IfDir $i $devdir]] != ""} { set c [exec cat $dir/bInterfaceClass] if {$c == "ff"} {return 1} incr i } return 0 } Main $argv $argc interp != ((void *)0) && "Could not create interpreter!"{%s} set argv {%s} set argc %d dispatcher.cEvaluation returned error %d mainMMMMMMMMMMMMMMMMMMMMMMhMMMHMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMhخ0خвؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼXXXXXXXXؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼؼH8ؼؼؼ(ؼؼؼؼؼؼؼؼؼؼؼh`ؼhPXH8vvvvvvvvvvvvvvvvvvvv0111@1P0P01111110p1/<=(=8<8<<<8<===8=h=H=8=;E(E\J8G G\J\J\J\JFDGExGPG\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J0F\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J0FI(J\JJJ\J\J\J\JI0IHHI`I\J\J\J\J\J\J\J\J\J\J\J\J\J\J\JPI\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\J\JPI(HpHHHH`HH::::::؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀؀ȁ      xePP0hx`xppP0xxxxxxxxxxȮh`ȮȮȮȮȮȮȮȮѲx0(HHppG=3)z@`X     p p  X h h      ` `8??;==!=??)=?;??)=@@@@@?)@$C@@"@(@/@7@=@C@;I@M@T@\@b@:h@86ABB>r@>x@}@@@@@@A7r9@>@8>@@@;@@r9@P;@@AAAA<?,>o?"A-A>AJA)=UA[A`AdAhAlApAtAxA|AAAAAAAiAAScriptObjAddTokensAl7nA0NOBO=:MAM; hA0[A0AA;pA4?A {AtAAAPkAzA0wAAiBB0 BBB0BVAp'B@ .B5B];B0]6PYPBB0-GBPPBMB)TB([B (dB@7$lB`qB@\;@r9pwB}B+YB`^[PBvB,Bo?B864 Cp2B@BB B@pBpBpCApCB.=:dpC0NdpCBZ.BZ.BZ.BZ.c7PpCBPpCBPpCBPpCBFpCBFpCB2.B1.B0.B  `B `AB  P@ `A9@?8p>BpCB<h<H:7B7B,`;B,-,`;,`;9@`;C`;$C`;C`; C0 C-CI?[.BBB jBBB> lBp@@4?p$CC`9@`  7  <*=`,>@+Co?6C 60FC`SC```.%020lld>end%d%.12gunsupportedexpandjim.cscript->len < countlist index out of range(null)%p (%d) %-10s: '%.20s' FILE %s LINE %d (%d)wrong # args: should be "formatString ?arg arg ...??-nonewline? string-nonewline string ?splitChars?message ?stacktrace?list ?joinString?unset%#srenamedeleteinvalid command name "%#s"oldName newNamenew procedure>><=>===!=^&&||**eqni!~absroundsrandreturn-codecoerced-doublescriptlinecompared-stringinterpolateddict-substitution -------------------------------------Objects still in the free list:------------------------------------- invalid dictionary value: must be a list with an even number of elementsThe second argument must be -nonewlinecan't %s "%s": command doesn't existcan't rename to "%s": command already exists%s name contains embedded nullexpected reference but got "%#s"expected integer but got "%#s"Integer value too big to be representedInvalid (infinite?) range specifiedkey "%#s" not found in dictionarycan't read "%#s(%#s)": variable isn't arraycan't read "%#s(%#s)": no such element in arraycan't read "%#s": no such variablecan't unset "%#s": no such element in arraycan't %s "%#s": variable isn't arrayDict key syntax invalid as link sourcecan't upvar from variable to itself?level? otherVar localVar ?otherVar localVar ...?string format ?varName varName ...?cannot mix "%" and "%n$" conversion specifiersvariable is assigned by multiple "%n$" conversion specifiersfield width may not be specified in %c conversion"%n$" argument index out of rangedifferent numbers of variable names and field specifiersvariable is not assigned by any conversion specifierscan't unset "%#s": no such variablebad index "%#s": must be integer?[+-]integer? or end?[+-]integer?list first last ?element element ...?list index element ?element ...?Expression has bad operands to %ssyntax error in expression: "%#s"wrong # args: should be "%#s%#s"Too many nested calls. Infinite recursion??-?no?code ... --? script ?resultVarName? ?optionVarName?%lld microseconds per iterationcondition ?then? trueBody ?elseif ...? ?else? falseBodyvarList list ?varList list ...? scriptenvironment variable "%#s" does not existvariable for initialization of static "%#s" not found in the local contextstatic variable name "%#s" duplicated in statics listtoo many fields in static specifier "%#s"procedure has argument with no nameprocedure has argument with too many fieldsprocedure has 'args' specified more than once?options? string pattern body ... ?default body? or {pattern body ?pattern body ...?}bad option "%#s": must be -exact, -glob, -regexp, -command procname or --no body specified for pattern "%#s"list must contain an even number of elements"-command" option must be followed by comparison command"-index" option must be followed by list index?-exact|-glob|-regexp|-command 'command'? ?-bool|-inline? ?-not? ?-nocase? ?-all? list valueexpected return code but got "%#s"?-code code? ?-errorinfo stacktrace? ?-level level? ?result?command "%#s" is not a procedureA??0.0.0.0Not a valid address: %s%#s: %scurrentacceptr+aio.sockstream%ld:%daio.sock%ldaio.socksrv%ldaio.sockunix%ldaio.sockunixsrv%ld-ipv6ipv6 not supported?-ipv6? type ?address?aio.pipe%ldUnsupported socket typeunix.serverdgramdgram.serverstream.serveraio.handle%ldfilename ?mode?stdinstdoutstderrpopenNot a filehandle: "%#s"error while reading: %serror while writing: %s1.0aiosocketnoneread?-nonewline? ?len?copytohandle ?size?gets?var??-nonewline? strrecvfromlen ?addrvar?sendtostr addresslistenbacklogflushFlush the streamReturns 1 if stream is at eofcloseCloses the streamseekoffset ?start|current|endtellReturns the original filenamendelay?0|1?none|line|fullSets buffering?readable-script??writable-script?onexception?exception-script?invalid parameter: negative lenopen stdin; open stdout; open stderrRead and return bytes from the stream. To eof if no len.Copy up to 'size' bytes to the given filehandle, or to eof if no size.Read one line and return it or store it in the varWrite the string, with newline unless -nonewlineReceive up to 'len' bytes on the socket. Sets 'addrvar' with receive address, if setSend 'str' to the given address (dgram only)Server socket only: Accept a connection and return streamSet the listen backlog for server socketSeeks in the stream (default 'current')Returns the current seek positionSet O_NDELAY (if arg). Returns current/new setting.Returns script, or invoke readable-script when readable, {} to removeReturns script, or invoke writable-script when writable, {} to removeReturns script, or invoke exception-script when oob data, {} to remove8NNN-PN\))p+)))+--*h,*h,+OhPOO!dQOO0QOO QAO ROOp'PROPP&R(N%RPP@%SP#PNP@4PRPXPjPoP@@SPhSPPPPSPP P_PS_P`TPQ@PTlist must have an even number of elementsArray contents as name value listarrayNameDoes array exist?arrayName ?pattern?namesArray keys as a listarrayName listSet array from listNumber of elements in arrayUnset elements of an arrayr9NW3XW@jW`5,W~WjW5WAW3W@NW2W7jW7W-format%a %b %d %H:%M:%S %Z %Yclockclicksmicrosecondsmillisecondsseconds ?-format format?Format the given timestr -format formatFailed to parse time according to formatReturns the current time as seconds since the epochReturns the current time in 'clicks'Returns the current time in microsecondsReturns the current time in millisecondsDetermine the time according to the given formatX`:`YX<YX<YX;Y+YX: YBY09Zafter#eventloopbgerror%s timeridleoption ?arg ...?argumentscript ?script ...?id|commandafter#%lldevent "%#s" doesn't exist?id?non-waitable filehandle?idletasks?vwaitupdateafteridletaskscancel[[\;+[%s: %scouldn't create temp filecouldn't write temp file|&%s=%scouldn't write file "%s": %scouldn't create output pipecouldn't create pipecouldn't fork child processcouldn't exec "%s"killedCHILDKILLEDsuspendedCHILDSUSPCHILDSTATUSchild %s by signal %sexecillegal use of | or |& in commandcan't specify "%s" as last word in commanddidn't specify command to executeerror reading from output pipecouldn't readlink "%#s": %s-forcecouldn't delete file "%s": %sfile delete forcefile copyPath too longdirnameFailed to get pwdcould not read "%#s": %scan't set time on "%#s": %s/tmp/tcl.tmp.XXXXXXFailed to create tempfilecharacterSpecialblockSpecialfifodevinomodenlinkatimemtimectimecdLast access timename ?time??-force? source destDirectory part of the namerootnameName without any extensiontailLast component of the namenormalizeNormalized path of namename ?name ...?Join multiple path componentsIs file readableIs file writableIs file executableDoes file exist?-force|--? name ...mkdirdir ...Creates the directories?template?Creates a temporary filenameRenames a filereadlinkValue of the symbolic linkSize of filename varlstatReturns type of the fileownedisdirectoryisfileReturns 1 if name is a fileerror renaming "%#s" to "%#s": target existserror renaming "%#s" to "%#s": %scan't create directory "%#s": %scouldn't change working directory to "%s": %scan't set "%#s(dev)": variables isn't arrayGet or set last modification timeCopy source file to destination fileLast extension including the dotDeletes the files or directories (must be empty unless -force)Stores results of stat in var arrayStores results of lstat in var arrayReturns 1 if owned by the current ownerReturns 1 if name is a directory^u=u^^^va]^oa^u=l^_u=l _1_u=pkb;_u=x@_[_u=qe_}B}_p__u=@j__u= j__u=j_r9u=i_7_n4b` `@n`v^+`x6`7^`jS`b`u=hk`@u=@u```|tb``}bNu=|``u=Pvb`u=tb`u= t`error loading extension "%s": %sNo %s symbol found in extension %sJim_%.*sInitlibaryFileloadpackage "%s" was already providedIndicates that the current script provides the given packageLoads the given package by looking in standard places%s/%s.so%s/%s.tcl%#s%sCan't load package %spackageprovidename ?version?requireLists all known packagesffЁfffXf4?fother?-nohang? pid-nohangeuidegidposixos.forkos.waitos.getidsos.uptime?-nocomplain? dirPathreaddircouldn't compile regular expression pattern: %s?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?regexp match variables not allowed when using -inlineerror while matching pattern: %s?switches? exp string subSpec ?varName?regsub-line-start-indicesБ;h?h<:h;h??h<:"=SIGABRTSIGALRMSIGBUSSIGCHLDSIGCONTSIGFPESIGHUPSIGILLSIGINTSIGIOSIGKILLSIGPIPESIGPROFSIGQUITSIGSEGVSIGSTOPSIGSYSSIGTRAPSIGTERMunknown signalSIGPWRSIGXFSZSIGXCPUSIGWINCHSIGVTALRMSIGUSR2SIGUSR1SIGURGSIGTTOUSIGTTINSIGTSTPsigunknown signal ?SIG|-0? pid-0-clearalarmkillsleepignorecheck?-clear? ?signals ...?throw?signal?kill: Failed to deliver signalLists handled signals, or adds to handled signalsLists ignored signals, or adds to ignored signalsLists defaulted signals, or adds to defaulted signalsReturns ignored signals which have occurred, and optionally clearing themRaises the given signal (default SIGINT)jjjj0k2=jpdkjjkjjk$tI?-facility cron|daemon|...? ?-ident string? ?-options int? ?debug|info|...? message-facilityUnknown facility-options-identUnknown priorityargv0syslogemergalertcritwarningnoticekernelusermaildaemonlprnewsuucpcronauthprivlocal0local1local2local3local4local5local6local7QmWm]m[bmjm\;Bqmxm}mmJmmmmmmmmmmmmmmglob.tcl package require readdir proc glob {args} { local proc glob.readdir_pattern {dir pattern} { set result {} if {$pattern in {. ..}} { return $pattern } if {[string match {*[*?]*} $pattern]} { set files [readdir -nocomplain $dir] } elseif {[file isdir $dir] && [file exists $dir/$pattern]} { set files [list $pattern] } else { set files "" } foreach name $files { if {[string match $pattern $name]} { if {[string index $name 0] eq "." && [string index $pattern 0] ne "."} { continue } lappend result $name } } return $result } proc glob.expandbraces {pattern} { if {[set fb [string first "\{" $pattern]] < 0} { return $pattern } if {[set nb [string first "\}" $pattern $fb]] < 0} { return $pattern } set before [string range $pattern 0 $fb-1] set braced [string range $pattern $fb+1 $nb-1] set after [string range $pattern $nb+1 end] lmap part [split $braced ,] { set pat $before$part$after } } proc glob.glob {pattern} { set dir [file dirname $pattern] if {$dir eq $pattern} { return [list $dir] } set dirlist [glob.glob $dir] set pattern [file tail $pattern] set result {} foreach dir $dirlist { set globdir $dir if {[string match "*/" $dir]} { set sep "" } elseif {$dir eq "."} { set globdir "" set sep "" } else { set sep / } foreach pat [glob.expandbraces $pattern] { foreach name [glob.readdir_pattern $dir $pat] { lappend result $globdir$sep$name } } } return $result } set nocomplain 0 if {[lindex $args 0] eq "-nocomplain"} { set nocomplain 1 set args [lrange $args 1 end] } set result {} foreach pattern $args { lappend result {*}[glob.glob $pattern] } if {$nocomplain == 0 && [llength $result] == 0} { return -code error "no files matched glob patterns" } return $result } stdlibstdlib.tcl proc alias {name args} { set prefix $args proc $name args prefix { tailcall {*}$prefix {*}$args } } proc lambda {arglist args} { set name [ref {} function lambda.finalizer] tailcall proc $name $arglist {*}$args } proc lambda.finalizer {name val} { rename $name {} } proc curry {args} { set prefix $args lambda args prefix { tailcall {*}$prefix {*}$args } } proc function {value} { return $value } proc lassign {list args} { lappend list {} uplevel 1 [list foreach $args $list break] lrange $list [llength $args] end-1 } proc stacktrace {} { set trace {} foreach level [range 1 [info level]] { lassign [info frame -$level] p f l lappend trace $p $f $l } return $trace } proc stackdump {stacktrace} { set result {} set count 0 foreach {l f p} [lreverse $stacktrace] { if {$count} { append result \n } incr count if {$p ne ""} { append result "in procedure '$p' " if {$f ne ""} { append result "called " } } if {$f ne ""} { append result "at file \"$f\", line $l" } } return $result } proc errorInfo {msg {stacktrace ""}} { if {$stacktrace eq ""} { set stacktrace [info stacktrace] } lassign $stacktrace p f l if {$f ne ""} { set result "Runtime Error: $f:$l: " } append result "$msg\n" append result [stackdump $stacktrace] string trim $result } proc {info nameofexecutable} {} { if {[info exists ::jim_argv0]} { if {[string match "*/*" $::jim_argv0]} { return [file join [pwd] $::jim_argv0] } foreach path [split [env PATH ""] $::tcl_platform(pathSeparator)] { set exec [file join [pwd] $path $::jim_argv0] if {[file executable $exec]} { return $exec } } } return "" } proc {dict with} {dictVar args script} { upvar $dictVar dict set keys {} foreach {n v} [dict get $dict {*}$args] { upvar $n var_$n set var_$n $v lappend keys $n } catch {uplevel 1 $script} msg opts if {[info exists dict] && [dict exists $dict {*}$args]} { foreach n $keys { if {[info exists var_$n]} { dict set dict {*}$args $n [set var_$n] } else { dict unset dict {*}$args $n } } } return {*}$opts $msg } proc {dict merge} {dict args} { foreach d $args { dict size $d foreach {k v} $d { dict set dict $k $v } } return $dict } tclcompattclcompat.tcl set env [env] if {[info commands stdout] ne ""} { foreach p {gets flush close eof seek tell} { proc $p {chan args} {p} { tailcall $chan $p {*}$args } } unset p proc puts {{-nonewline {}} {chan stdout} msg} { if {${-nonewline} ni {-nonewline {}}} { tailcall ${-nonewline} puts $msg } tailcall $chan puts {*}${-nonewline} $msg } proc read {{-nonewline {}} chan} { if {${-nonewline} ni {-nonewline {}}} { tailcall ${-nonewline} read {*}${chan} } tailcall $chan read {*}${-nonewline} } proc fconfigure {f args} { foreach {n v} $args { switch -glob -- $n { -bl* { $f ndelay $v } -bu* { $f buffering $v } -tr* { } default { return -code error "fconfigure: unknown option $n" } } } } } proc case {var args} { if {[lindex $args 0] eq "in"} { set args [lrange $args 1 end] } if {[llength $args] == 1} { set args [lindex $args 0] } if {[llength $args] % 2 != 0} { return -code error "extra case pattern with no body" } local proc case.checker {value pattern} { string match $pattern $value } foreach {value action} $args { if {$value eq "default"} { set do_action $action continue } elseif {[lsearch -bool -command case.checker $value $var]} { set do_action $action break } } if {[info exists do_action]} { set rc [catch [list uplevel 1 $do_action] result opts] if {$rc} { incr opts(-level) } return {*}$opts $result } } proc fileevent {args} { tailcall {*}$args } proc parray {arrayname {pattern *} {puts puts}} { upvar $arrayname a set max 0 foreach name [array names a $pattern]] { if {[string length $name] > $max} { set max [string length $name] } } incr max [string length $arrayname] incr max 2 foreach name [lsort [array names a $pattern]] { $puts [format "%-${max}s = %s" $arrayname\($name\) $a($name)] } } proc {file copy} {{force {}} source target} { try { if {$force ni {{} -force}} { error "bad option \"$force\": should be -force" } set in [open $source] if {$force eq "" && [file exists $target]} { $in close error "error copying \"$source\" to \"$target\": file already exists" } set out [open $target w] $in copyto $out $out close } on error {msg opts} { incr opts(-level) return {*}$opts $msg } finally { catch {$in close} } } proc popen {cmd {mode r}} { lassign [socket pipe] r w try { if {[string match "w*" $mode]} { lappend cmd <@$r & set pids [exec {*}$cmd] $r close set f $w } else { lappend cmd >@$w & set pids [exec {*}$cmd] $w close set f $r } lambda {cmd args} {f pids} { if {$cmd eq "pid"} { return $pids } if {$cmd eq "close"} { $f close foreach p $pids { os.wait $p } return } tailcall $f $cmd {*}$args } } on error {error opts} { $r close $w close error $error } } local proc pid {{chan {}}} { if {$chan eq ""} { tailcall upcall pid } if {[catch {$chan tell}]} { return -code error "can not find channel named \"$chan\"" } if {[catch {$chan pid} pids]} { return "" } return $pids } proc try {args} { set catchopts {} while {[string match -* [lindex $args 0]]} { set args [lassign $args opt] if {$opt eq "--"} { break } lappend catchopts $opt } if {[llength $args] == 0} { return -code error {wrong # args: should be "try ?options? script ?argument ...?"} } set args [lassign $args script] set code [catch -eval {*}$catchopts [list uplevel 1 $script] msg opts] set handled 0 foreach {on codes vars script} $args { switch -- $on \ on { if {!$handled && ($codes eq "*" || [info returncode $code] in $codes)} { lassign $vars msgvar optsvar if {$msgvar ne ""} { upvar $msgvar hmsg set hmsg $msg } if {$optsvar ne ""} { upvar $optsvar hopts set hopts $opts } set code [catch [list uplevel 1 $script] msg opts] incr handled } } \ finally { set finalcode [catch [list uplevel 1 $codes] finalmsg finalopts] if {$finalcode} { set code $finalcode set msg $finalmsg set opts $finalopts } break } \ default { return -code error "try: expected 'on' or 'finally', got '$on'" } } if {$code} { incr opts(-level) return {*}$opts $msg } return $msg } proc throw {code {msg ""}} { return -code $code $msg } proc {file delete force} {path} { foreach e [readdir $path] { file delete -force $path/$e } file delete $path } ": should be command "Usage: "wrong # args: must be " command ..." -help command" for help -help" or "-usage -commandsambiguousUsage: -help-subcommands-subhelp-subusage$handle -help" for help Use "dummy command ... ", where command is one of: Эformat string ended in middle of field specifiernot enough arguments for all format specifiers.%ldbad field specifier "%s"йййȹp````````````````````````````````````````````````````````````````````x`x``````````````````````````xxx`````````````G;0L)p +,.0zR|  X F J tx?;*2$"<@T):AA AAC0 AA AAF <T*AA AAC@ AA AAB <+AA AAC@ AA AAC -AA AAC0@ AA AAE q AA AAC I AA AAC M AA AAG   o(  0H֚&6FVfvƛ֛&6FVfvƜ֜&6FVfvƝ֝&6FVfvƞ֞&6FVfvƟ֟&6FVfvƠ֠&6FVfvơ֡&6FVfvƢ֢&6FVfvƣ֣&6.shstrtab.interp.note.gnu.build-id.gnu.hash.dynsym.dynstr.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.dynamic.got.plt.data.bss TThh$*&o((0  8@ 0I BRM X@@$"^  Gd  G l4zHH88@@HH hhh"p" p"