Path: utzoo!attcan!uunet!decwrl!sun-barr!newstop!grapevine!panarthea.ebay.sun.com From: koreth@panarthea.ebay.sun.com (Steven Grimm) Newsgroups: comp.sources.atari.st Subject: v04i018: popen -- popen(3) call for plain TOS Keywords: arc, uue, C Message-ID: <498@grapevine.EBay.Sun.COM> Date: 27 Oct 90 02:32:18 GMT Sender: news@grapevine.EBay.Sun.COM Reply-To: rosenkra@convex1.convex.com (William Rosencranz) Lines: 550 Approved: koreth@panarthea.ebay.sun.com Submitted-by: rosenkra@convex1.convex.com (William Rosencranz) Posting-number: Volume 4, Issue 18 Archive-name: popen popen(3) for TOS (rosenkra 14 Oct 90) ------------------------------------- This is an implementation of popen(3) and pclose(3) for TOS. It does not rely on MiNT or other multi-tasking systems. It uses temporary files (and is thus limited to maximum number of open pipes as open files). It is farily robust and has worked for me for the things I use it for. Only source is posted here. The source can be run standalone, with a main program (included). Just define STANDALONE in config.h and compile. Run with no args. If you do this, you might as well set debugging on by setting global _pipdebugging to 1 (by #define DEBUG and #define DEBUG_ON in config.h). To install, compile (after #undef STANDALONE and turning debug off) with: cc -c popen.c and add to your library. You can #define DEBUG but #undef DEBUG_ON to compile with debugging in the code but not turned on. The caller can then declare extern int _pipdebugging and set it to 1 to turn it on at run time. Note that popen and pclose use system(3) to invoke the command. I have included my own system(3) here, though it is renamed _xsystem in the source. This system follows the PATH to find an executable, so you can do: system ("grep whatever"); and it will search PATH for grep.ttp, grep.tos, and grep.prg. It does not handle Bourne shell commands, however. If you do not have a decent system(3), pull it out from the source, compile, and add to your library. Note that _xsystem (which should in this case be renamed system) calls a lower level routine _system, which actually does the Pexec. As far as I recall, _xsystem only calls getenv(3) and access(2), and probably string stuff. Nothing fancy. It should be pretty portable between compilers. There is also a system call included called _psystem which attempts to do the command via gulam. I have not tried this (successfully), however. It should be possible, though. The code is setup to use _xsystem. If you want to play with gulam invoking the command, #define SYSTEM to be _psystem. I have not been able to get this to work properly. Maybe someone can explain it to me. It runs, but then the prompt flakes out, oscillating rapidly between the prompt and the emacs "Mark Set" string, effectively locking up the system and requiring a soft (or hard) reboot. If you have an environment variable TMP set, popen puts the tmp files in that directory. Otherwise it uses the current directory. There is a manpage included. Also included is output from executing the standalone code with full debugging (file "out"). Note that the manpage only is setup to make the standalone executable, not any library additions. You can do that pretty easily, though. Finally, before compiling the standalone executable, look at the main program for the commands I execute for the read and write popens. They are specific to my config and may need changing for yours. Enjoy... -Bill Rosenkranz rosenkra%c1yankee@convex.com MANIFEST Name Length Stowage SF Size now Date Time CRC ============ ======== ======== ==== ======== ========= ====== ==== CONFIG.H 1011 Crunched 33% 682 14 Oct 90 5:33p 6a6f MAKEFILE 1905 Crunched 44% 1083 14 Oct 90 5:21p 5804 OUT 4070 Crunched 54% 1897 14 Oct 90 4:10p 4f90 POPEN.3 2915 Crunched 42% 1697 14 Oct 90 4:16p d7f2 POPEN.C 24996 Crunched 54% 11645 14 Oct 90 5:28p 414c POPEN.MAN 2894 Crunched 42% 1698 14 Oct 90 4:17p 4213 README 3003 Crunched 40% 1804 14 Oct 90 5:27p 3876 ==== ======== ==== ======== Total 7 40794 50% 20506 table !"#$%&'()*+,-./0123456789:;<=>? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ begin 644 popensrc.arc M&@A#3TY&24=,K2)47T$X'<.Fw M#LJ<9>;0 =$FC%,08LJP>7,G*MPZ;KPB"6*E"%8G1; DH>)7!5*<.D'4F8,Qv M81D\:>B@2!&8\!O6EF46J+F03>*U:7#F>5,'!)HP=EJOA"V;MENI@?JE=r MJ!^$[H5!AGNQ!>9C334>!9\8>T%VD !B630A&SDo MA$:)-KV16((@S)%&&P!ZB)$(%4(4*Q_^700'8Q"*(-A88UBDXV*>RN$BC >Zn MFL"''@IF''(8M;$H96-AE@8>+<"7WGO](=1&8Q$FRB*ZQ:UX4:X[U0C"'6E0m M:"T<^FIB*$9V#T88DN0#* JV\U.I5T4A01!!%#-$%$ L#.l M45RY(IPY,4972#%:QAN+,(8.7' AAE,MGV$LLFZ$#%>H9@P$&@A-04M%1DE,k M10 #_.P0 $X5IXH$6'$' ,(T"T";.FC)DT;,J ,/-&#@@X;^"4<0,"j MA9,G5(KH /' L\"QN"F$,GC!LR8=AT5%@&3YDQ=4J*20C")!F!)N&$.5,Fi M!*0!*1HH&"$T($HZ939"(C"E#L4G8^B B$%CJ@T=-&#HF&%C:HX<,(J"L%-&h MSIPT'3?&ZH$,'g MCM F09Q "4+8+V*);ER00,&72HK-4_1V#JI@2! JDRL?AHC9Q9@P=!Y'GB)Ef MB&76B@>Z$2IXB)$D3(K<3IPYC)PQ;Y$(_AU\-7$7<]#($5JE2A'FPIVWKE.Ge MC% D18(0*2)EBN4Q'0^><8'F;6WSAS>#%T]^2HK+BI$KP B^O&4Y981!1AL*d M#530031M!ID3M UQWQLQ"45$$E-0@9UY=FW&7WWW@?8>:4\(H01\=N&6V1M"c M^<8$920*Q0011JQX!(D@M#"'BTGLY9=L3DPHQ7DZ<*&;D":!%I=G0DE1A62"b M-;&C DI>5(5A=OD 86P*""46&6D &!5:;LSAPD]%"<6EEW2 .8<.0M$%Q$MHa MO $"'7E(!(((!BJ4$ALBS"FG&'4@)-5F@0U6&&ENPBDGG7;B29!":819$AM\z M^@D"H(*^$"E)>X) J&"$(:E HF/$.6>="CE:T)QED-0G'8NV.B@*A8:*: )Oy MEKHHJG?F"<(8"9GTJIP MO$&61R)H<9+=-PX*JZ*GMJHK\"^(88890T+0K''x M*F3MLE'-4=-)GM(*ZJ%M0JNKM*GZ:MP8VOHZ!X3'Z7D<&FD@NUEOV-V:JZF,w MMOOH2&@8%^_ \]91+\'&+8200J I)T6_Z?Z[Z[0#&v M>E9N==^I %\FVMLSSH3IK**)]Z6XVA(/Eu MOA@CB_>U(.?/)@L]8H>[AAP+)X\850OZ&,*7-C-)/05q M1WM11AMU]!%.;G2MT!UAB$N\R+I?SA$=:)0EIN=$*0!L@&ZP^:P<;90;XM0@p ME&46XI%37M:J=:VRZ&Q^)DD7_LI5JT,Y[WJ$$\J[[+A"_HH6&5:"DS5$Z@P:K W%LJ8Q"I(.94X8PA/&0[4&BHI4IAJA&PI$D!.>n MS#HK%$ITC./"B FF@Q2RD,KL P(?&'%B',S>NG3(0Q.Z 85/#*+60! RS(3Lm M8VEHE>[B9R(7O$%G91S#K]*3AO6T1P$:"$]55 !&24Q% /]I!P 3A56l M@9!/Y@\ QMPJ1QHP/$F#!LV(" \P9.&3L#P"/)A03=AVI0!$3#AFS$@j MY)2ALU GI $V9,2((8-G0Y\@@ I->48'%SIMX'#Y\@5.&H=D7[9,VK4#.BKX@F=.GCETRK0I""4(%20Ih M7; +&8@BS%>.[MA4<;KG#=ZWHAYXX:+Z,]>V:01PT5RF#%S8'.1+4;WTC&Zg MV1Q%Z-HSZ-W#+QZ7@YNTUS-!R^2>6WPT:-UM[@ _/L=A0MUFRI#13:8,]#EMf M%S=^''GRPJ=;0,#HDCD]8\>0)1>$ Q]$#/I\<#:0?>OEYQY_ \0G X#'B48@e M?NWMU]\, );&Q6FIK=::@Q[=QYY^[R4( @T,QC9;;0'A]N"'!_970XF[S;:Bd M@1**: .,O\T888CQW0"C< >Q49V.("(8'PX_)D=DBR+F "-SZ'58X(Y&QC!?c M2A9")U24ZD%8)'Q3 4@=AUVR6.,65)6XY)DQ4)C2<=F-L2:/,9#XIFG>L3%Gb ME2_>R45X9,RI51DIK;3G'"" D-*<,#DDGY1>NG?;&-(ABH(+NTWD AUTP($1a M#(IY2",(DU8*PJ69UN$"''*<\6FH4X)8ZAR68KK2IF_D)A^LD18TJZ4"MG8Kz MIY[NZE$+D!1@$U-EX)$&9(@B6P"D9H+P1:2G'N&5$$DXP0434U3A A540-$7y M"']Y!9989)F%UA=J/15JKR.5%,9)!8' A[9<<.LMN.*2"X5]]-(A$!L%)@"MNY@[AH&+V($5VMP&@JQ@94,,W3HKEQS@6"&4P/48(0000R!T1@DF822w M2GRUA-&@*?%+11-0# 9%$E 4<1A;&-V!1A@Y[;38QV2$7!2022W5%&)1M5G5v MT6>!O!_)4<\P-6%P6+U0"SY\00<97XR,F,DH#^%QU4GO![;89+-L[TF%QJSGu MVEVW_7788W]!\[Y>W9PS63OW_/, ]B$=,AQO]RTTT3KA[37C?)/M1K-%0X* t MY'J+_089;\@&&=92:>T65G&%;/93:*?L44 #%12D0CU!U.! 7)RA%!Q$W8N1s M"'=P=+I(@PU3%W[r M]5L%J*Y@[19V& PQI#<^"'?(@5-I(E_EQJD.H\^UQ&JQ'ZKB!5E=R4Z&LI6Uq M[%XONUUK=%<&WIFD)G^S&TK4;K U (80p M*E(A(0?=5KFRD0QM*%OAWN#VA>(A\'BX8Z #[Y4XMBVN<9:+3LT"-T'"57!]o M[9,AY6BHP1Y4CVIY^V$++X>'S*%0:C+T'.A$9\41BL]^!8G?_ +X0@(&X74"n M$0EDPB 'IJ1N(&=82&%<\!2>G.4+J2L('=Y@,(7@X(GNPF,9Y%(0,LCA#L@Zm M0*)@(!\00.(!C'S"&)A2)__(0 F?6<*@!@NQGPO&j M<,U!^A*8PF0D,5.)@Z>,,,_WWD'/"#+ -QTI#=AD(.HW+.2#%WE0Q^RJ4Y-M" !+>4P-4J5h MCJ)3H2"E 2UC,%(WS, %;&3G1^Z(S91NXH[$0AE3#FNH$YT2Vc M:.,;.FPG-LEQ[G23HQLH.2=WT9D.WHICME^,YQ $4>\X2!2Z*Bb M4G^NQ <7[*D__^$*A40]A6M[APx M!"D4 0KC*M=H2TO$TZ86B?.JE@WQE2@^Q+E?C3$0:$PD,J#!L>"9453*H)X#^&@L93J#?:K3GPH([$(-VI0*B!29,D1*$BA4DCQQ,A,A%(TAQ\SM6.9DF(0E+8HI0^=.F88@q MZ*"Q."8,&S8WST"4\V9,9[91ADZ=YP3FCG590;645E!M-O@$G7!G,%=A<2" D\<(3!;7Qn MQDX/@5!&&J)M5) (.R%H;-'%XDD]DRI'>&\*A2<>-!]$4k MA)),BM04<0F(T1]3H#51Q114[&81;6X1N5M_$$E$41DN,#VFP(1N#?-559'N5DB$CAVAD6NF-06#&i MD*$-$0EC B>FEB$:;WBFGQP9&IE @K02)^-H(7&8@)',#EE<8S0) 5P863)Xh MG1FYMOJ510#.:U:2:%D$HHANIE>EI+9JV=Q)-%%5I!M^CIAK=P\5B&]6^KJ(g M)&PB]9DFO&QT!RA@+5$Q6&,)/!'2JVZTT(9X'L$WQQKSS9&'3V6T<1(*:;C f M*8Y/3)$""\K*.U>1;<#!1LS2$1D&P0@-%W2)7V&*<:L'&S@;4'/A5V)_]@&7e M!KQ$*KJKAF[8D09K;D3W'DT[TAB&&$/CV 04(LDQ;DAM!CG7>ZJ.#5QN>D6QU@&'?R?V_."65.]=b MYW05TY%P=9>=:M'B#/V-D$TXL:$33SX!]8901"'$E5=@0:["B5^,T49Z/;#(a MQDDML"'"7PET]=5Q ZAP:OGG@Y"^"&/HP(48-^'"&>8"!^TTY7UK20F*H@@B&A7[721+T+/)%'-H(w M!*/YF6= H(8LQ6I5#U+?'$3@ C/.$')BLN"/@F0N$,SQ7QT*2?#,,*<^CC$Lv M/!SCUN"" B'&J0<&! T*R&<^L^PK!2G07_I0@$(5A-()56 "$QSX0)I S@QPu MH-%[UA27GVP$6RR"BGC(D(!7Q>HZ<5JC"#CHR@'XAD-PB0$QQ]B'!)+1CVALt MBG_6:$.P*#%%QHFC1>:(QR2)8(!E@ ,?H0G(V0B2,X0DTB$-EDA#TJA6N7%Ds M I@3QGE.$@65;.&I])=)I]RODP]IT3!#V8-1EO*4J5QE!"&(D%?&DCNTS-XMr M ZI+-O#2E^5RYY= 589AP@]RQXP5"I39P6:*<9XR).< ;L(F-)!K(@MYR!SCq MQ,BHM-1'..0H7-9'FZC8A@RL/"/D"N2\T(FIJ-1$ 3A_UZ\4&,>78/(*'51Zp MU'<^+S.J8M5),#J9T_3'*W"0YJT\HJLYMF535)T--=E &3D8QS2Z$DU'X!B&o ML#;D)-K\U=?H$+3+E4&EI:KJ1M>8@#-PYB08&]JY/!,_/EFT.>O3#<:ZHU+4n M#.DDFX'1-M\YG^H(\50/F>0<[T"5X13'CY&&"+''>([_QM!$,*%QC\UJ0Jj M*0)!@L"$*5!H<"1J"@IFL+,1N7?$)789S-J 8I0 &@A03U!%3BY# #_i M?2T $X5G8M,0:1A ,(]*X&<.F#IDR($2,>>/&3)HS+M"(:*" X@L5%$&Hh M2 #G#9PR;EB @$/PS1R$9NH,I).&X1P09M[( 4'ER100*(*P&9.'(0@:+F+0g M@,DFC!V9+B -2)$1HP*-"0(.+'@0!(\Y=,BTC.BC:=,$1I(P*:*QXT@f M"3-3Q<(V;<*X(2-2+5N-=/)\9/ITHT Z(TN>Q!EVK$:LB0(%0M@!"7:&^, <(<<(0Q!DHR@>#&8F6\a M)!UB=1@'PAEA&&S)YAH(98ZK(HDC^O7%EAV&0y M =U!)[H!V!QY8'4F"C.D &&3HZ'P!1Q\^@D@>R"<@>1BT;UD1E&WY0&GD7620<8:M'LJ$4(JESO$2%#8E@<4+03@Q11+,SH%IDM\Av MU)$%1E'>DP2 (.O'$$*>$)F0OE2)8u M)ED8YK8H4DHK;3:'2&70,09S6%$'0K[[JG109@LEAM,7P;U $45275C555D=t M9 97)%M(%4(HDX&C&%PEH-1%,*7XX< 02ZR1R J4_+)56&GU!LL5)7W15U"8s MI%G"()C(DDL!HB772/>Z$:5#I38%] @J"X00$46,1441"20 \EA:PU"$5@4r M,4059Z<=P\A!IV&&ROPR,4063SA!N-MT5.034>&W"D-%I<8[0V1U(#>,TVF&+?Z)S$:\F!PAPI)(#"["ELp M@5BI;N#>0@Q=U(YS43K:-9-T8?RH[,^K.^0V',3#SA;N"9AP.^VZ \F[[\ +o MK\)(0*+[1G2 J0 TWDLKR(1 ZG6IHX#H-BCA2^F2,7Y^@=D[&$MME(&ZZ@HXn M%F!H] 3M4&0/% &+6- & D@<0 5?R,H7S+"#M.'," 6Z&),\=@>9K"%6:$%!m MNLP@& ,Q3P$),%X"&OC ")+A"ROJ7P5QY@06!6A H4+7NPAT+A&.3R5;6H.@l MS)= %;(0@A)\2X_(,,/O#8%'J1(?",J !V"%!R%$1.%?TN;"+XPJ/TT$P176k M JKQV0\G<),;W\Y$D&F^41:"QU:1:7V4P]S6BF^%Q37: X%Y'$L PBd M^2(=^")0/*J @A0QGE.5F*J$2E4I*CAJ0K>HU(0B4&FX3 ^D\HOL)/^$G-85)<4N,8PB10C6>*@K#4W200(2@[4)91R(S8QI7P%E%^)X"C?4$IXZI.\7C+O>,LKy M7E)Z:4A\2!L(^ "^=+7OB" +WXA40 G5($)3%@A??GK7P +N(']_2\3]'M@x M2!C "PU^<(2]P.#Y-M \;6P@S,\8 Q7N,-<:"D!N!#A$(.2Q!HV@(E'_&$$w M?P&41.*PBV$\WP87X,4$B/&03#P 'Q0XP"#@L0_X$ ,=T5?&+VC!D(L,F",?v M.,E+-O)\OSN "_,!QTZV,'WGB^4::SG&7>8#E:W,1SKPH04O./"6^5#F,Z?Yu MR_-M,YK'[$ 1JQF/=OZR4D3\70) 6,OX%;."0"EC$R< Q?0U-!?Z+&/^XCC&t M-G[TE =-@ P+F0\R\%&6Z0ME3&MZTE A] HW'.8[]9[!.^@#:/F[ODYT2P\-; W?F,:"#K6O+ST#[/ZZUU8.r M<[$W7&MHUYG7CE'0J YZ!X1T5(HG88M:!]PMI?p MZ/>&U!YV/_WY3RQ5.R:1Z*H.A/),NU]7-2;9B4+,(8G^1!6:T; )-Q9OT;/0o MK>Z"SV%\'&=M&W3U)1!HB7T4$HD:>.[.00VFVX-M5F(L?K48!&@F,L#:64X'n MP 2VNH!WQ"H<$MJR7PZ(;$*HPA$2J+>/S?0@KH*5A/B2@*^FS0QP"!(=!C2[m MK/"*!0E4B@CBN2H=P*0')8 !#MB AZ'")54]X$,)YL 'H[(H\8MO_,7("'@Rl M<,$-(L ["I5B!L,OT?']2RH9K9G /J#3Z9<3NPR82.J7\'PI/R!$0G++N:I61)^^H D'M+$0X08%*-',&K9%!j M4)K10QG@AWQ"UA'K*2"]%NG.S1X<_^HV:CX(?LSVK_J2;V 7>P(34'9#G;U5i MF5+[&=C>]KP/ .YR1W=%0BC0AUDC 7B"1W@6*!(H8"]K-Q(D>'KJE$"KIQ%XQ#6Cf MT7L(82ZV\1(8@P8(AU'SHT$J@AO0D2X:,SY%@5O"QWIR! =*UD4#XD"G!%4He MI(8^T$5O!1VG5(<)Q1%K*$%'U4 $<$I:E4!RV$5*Y8>GU%6"N(=[%$B&."/Td MYB5YR'#\Y&"GM'5X\WZ'$W\J2']T%T\N^"HPF$!NMUQQ1X,X,8 WF(-\EX!!c M&'B#AP=%B!-(N']*F(>D&("G:(,XF!"K2 9^-X@29 9"^(JQ>(0,08O ^$)Fb M@(&W:(IUMS&[J(,T]8N*^$QR!7F,%XO):(V'-Q?,.(-Z4H/0J(H(Z(LC48U'a MA8U\H(WHR"+?6(KAF(OCR(OE2(US*$%*57GL>(\OI%3OB(O/>'?TN(.LN(UEz M-HQ$B'E&.(N"8I"!](_.B(K1V(M^)XE>@I"PJ)"R>(R"8I%8L80;F$X=^($1y M$X(X 0/B5X))PSDM]5(XM1$&Y08V!5,JT))9U%0%E34[THUT@2Y\<55YA(=1x M%3M.Y4<'Q#E?H9/),U,HXBMRE1!U2%9AV<#!0 YOG.2"$Q9QTr M4$V#U2+C"1A4Y"5"1W3@\2[LB4<+H1*X%34^PAZO%S7[$1[D$H+B!,Q8 /A9WS')U7JAY+SYWYZ']I%XJ;-P!N!TK@V)D!F8H)$9INTC\]Z"2>52"6AWD8J!2S69O-BJ(AA (Kj MNGX*QHRS6:R9*)F;R(DL" >?J'_\]ZS_QYGB^)G6VH>YZI48680%:(Q)>%3Ji MRH0C.4?XBA-'I8J5>JDN$'@S,%>ON9@C6*,H]*)E,*N24ZNWFJT#DXMRP#LXh M(:J"L@(@L*N]ZJKQ :N"(JP>2*Q>!P*:B*SQ.J_,:E//2@#1FJ_4"II9XW?\g MZH,B$H'<:H'?.@#A*I(G6I(I>COGVJ+SMZXQ.[.T6K.72:_#ZG\[ZYD]NZ\Vf MU*_&"0?_NIJ;1P "2XL$:XM)BWI5>X2O(U6A2@?OTJJG= )

K4W.XI;.ZW1Z+7]HXZQF+:E9["VJ:32.0"C\IQ1c M\TTAE!AU\G074Q\FE0(_X*E6AS'CA@(JL%0:VYT(<0)R< +#94_S5[N\FZ=][:T&XIB0*;/N.G_UYXFFFYDOJ[4)J[HYz M:*W5ZW<1-5%-@ *+EP*QR+\%&Y)LJ\!T=\%G4U'[6P=Q*2A\0%^W,R!OJ).Vy M^B8)(0>LZJN$L4 :P:+I6J\2&IG'VJP+K*POZ, X6X"I*Y&:9S,%X+-GX7<5x M# (D3%&^JY-$RP9&FX?@*KOCRK3E^K3IJK:0)+T>6+OX9%?IXI%T0#$68BH-w MXB(O4;TBP5AHD2^B8;]X)%CU#K>-<;W.[J +%3N\GD$u M+!)N5 1G8Z(/W*PDM'(XL8P\RJX^++I*\:$,O*Q$#$I Q#X*ZXX\RKC-^LMM8MEP!UY<"H2,A*M84GFs MXAGXUCZO5;[4R\5;B!B* 2")$7=!,#!)^=P0>P#& \G#=3F\! G*R6*=!ZZZQ&;-"Z.,$)#=?ZDB$!m MLM55?,7^M[86K1087=CF!,8KZ8$D3<;SU)QZ=5AHK,8#P<9ABH4G'<>Z>S$Ml MU\EX/#[J*]/LBQ9]?!+J/,I!3)#08M?-@V%L23C=!-_+N7+==C"]$,"1,?K-<'&]H:K>".i MF4 J$P94';WO'=9XI)9R<(81BMBA^Z[#7;J.3=#-+=GSV-9NX'<37N&_>XSHh M0I6<[8&>W>#HG='JK,/Y5._C1!KPE0XC%5Pg M^%5(J2 -96Y;S92799RC57:O-:># 82_PY9S-$C*9T=.M;G32U#R; =XV9=Of MB<)R29=VF>9LD39'-9=U>9=D]TY?GA^Z$N$>WJ[_'.)GW=^H:^+Z6D(&[M 9e MB> <">$ZSN"S&Z@"QP;ZUF[^V5JO52:W=U@= Z>"Q+L ,D(*E]*!RB#X@\82d MIR<4MX71P],?P1Q(IS51J^5TO;AA8WUS_@_" 9=1"E8E)YFM6@c MD@;8FE%70T4GPDJ;$:ADD"SUC!"T;EJ6SDV5@X7C,&.6BP>H*HT&!ZBT;!1UK\5NFWA%_(47M3KPHa MQ"BAZM=HO ,C8?"R7HDB,:H.V4<=*L88GLOTL\@Y1%A25$(_ -8=7M;;Z,)Oz MR-Q["R1C,!_BC53GR(\PA-?F/0!S8+Q:&*K5Z(_^9Z\>O.!)x M[& 178L%..,%J/,YAILO!V\E0R#!25BH0WR.]H@Z0HDGWT5EAL4$0,Q*?.;HR(B5./E]v M5,N)_<]\S]@B?MUZ2P!.#_4$N'E3?^1 :T-ECQ.(SL%D:S,&T/4&J?)*+/JIu M*/54OW)^1T>IK\%#B >LGWE2#_O?2@!@7[:['_OC;<1M$JH<7;9B7[L-%:E?t M/?1(;_A)3W?./1A);L-%\ 1&\/DP^^%Y5P"ZO-]82_KAS=W*#/G\E?ZP6]$Cs MR5^:I"M^W?U&X/B@Z^>X_/AT2EHH$ +6S=\@8 (F8'"6#,SJ;Q6HI+<%,/\Or M<4KV/\QT6H 8Z__N[XY6@4IZ6P#S_Q*G9/_DSG=QKA/,$\/P\CQ#)O48$WJC:.7D'!=0%F&W5WYXYC9QR=88[O_<$p MD+_2RK\YN'A6$[?446o M+%$EK/IVW?H.YL'XK\5(__QDWR8D8B),HO9;DR)M3^]PCT?VCB1S'T2J7DMXn M7X#6W_>WO(G\5?Z-[?E2[_XJ3YMT.O[NK_*.OGD%,/\O<4KVj MC_\%B+'^G_U(OHS<[_W@?]_33?[5;?XWZV#NK_*T2:?C[_XJ[^B;5P#S_Q*Gi M9/_X?]_3S?^#4?Z-?=T@8 (F8'"6#,SJ;Q6HI+<%,/\O<4KV/\QT6H 8Z__Nh M[XY6@4IZ6P#S_Q*G9/_DS$*.S[TS1@%:/W.;/]'JX$9J.-.2+NXJ>$*.S[TS1@ 3Y*9%4+VGY*0f MQ)(Z]>//M'*5.@=I0Y-$OD[YP4R(.2,D6KG4Q!=.'DEAA4W5>9Q18U@(43G,e M 0)#0"A1TAE;&*+BD2JELHME9Q02B#"E(GRV=+%]A!EHL45'[E!(BGY9ET>6d M^)C2??1*/^(H-.AK'>![1Z*5.P=^]RF8@3HQG@#%OUPI,O!_C_A^=/ CX=<-c MK[P>>.0C6XT3C:3.C)()Q>.E#4GWS2[90@3E9$RW9'&Q'37HTB* $7=O< :Ib M\>GC _3W=M)!GX.:L7-L$!E:Z1Q(1THP!9G, 9Q+ =G8 =\L45L<09C8%5$B55L<09Vx ML 5VK@!N%TB8@19-!4HY2=<8&$B8@19;=.0.A:2#>40S]075&T;TO2@I4KUEw M40SY47 &T;TO2A:";QE_*6;T.PAQ7*BH(,70Z@.E-? /25",/5^TQMT),B0,,I>WRB_?#-J+]L7:#@X@;DJ9- s MSY0QGC;]"1@H$ ,@^>C#AYM**>_*:=DL(2',<:6B@A!GE#PB< ;Q+ (06KLYr MU%3DBB\(\21H@;X$WJC^ :'$1_O1&!<"(9H!$Y-U+1)<( )WP 47&(N630?/q MU ;7EX>@.E->!+Q^'9,X8=ET\$QMT),B(-@I>WRB_?#-J+]L7:#@X@;DJ9.6p MW:A,&>-ITY^ @0(Q )*//GRXV7L992\>\6X*W;N'^NF'!?3<>X0_+5>"DBJ0o M?M+Y=%B6W:CZ5FY\OX0;DR;NB<1YA =;n MK=.C@71'OH7<6X:8 :%D'.^D+AYA =3!P)7>D@3;RH[9%>9+BHG+>^DNNZ!m M*H4H!_#-J+]L'1<"D?N1 4O56R94KA17')<%X2U<*P<8>+L]% ,/OURO1TUPl M*1(Q ,R, ,++TU?4+W,6']FL'WD)TU?4+VN;%-BP+MK8(NTO[K2] 5/', Bk M 9?U%)<%X2U<*P<0J;\SY47 FX,!+!)P64_+-2FZ\O(SY47 "Y*//GRX&?V'j MI9VNGNWO+LLY9-F-:N[D@W!H83\M$JCZ,O$.PK5R@(&8]07S_Q*5V%"A*DU>!+P82/O1&!<"\8L-%:K2g MY$7 *RA 6 +=FKF8]07S3SM\3HKA04TBT-+^HQ27%XL2V?P)T)^ @0(HF5 \f M7MHLJ5,_?BB) J5I0Y-$_I@N@R%681)B(! 4B 9=\9B. \5(4#9, 5IP(B)'VN^'DBA0FA9M0'! \I-$B55CT 8$!R1>b M=4L6%]M1,R)] J7 -1JW.V[?^1*.4A2?KMLQ/=-N]92455QN@,^(X2!6FE&Aa M.M5Q4P,@9Ay M-(L]""LB8\2E')$>0u M4U.VHP*4! M]DK?0CCD*#OM8!?H") J6BV08$!R2NJY%CT 8$!R0@Z>A(>IMXs MM*#>A(>IL$>J;Z%A>P(B*#6JAG2'S>\@5Q 2LBHA2Gp MI +78R2PU'PB= 9HV2$X$'Z&B09?P 9Q 2LBXMHIH\ 5Q 2LB$@*G= 1?T 1!< 1)n M, 3S15_>\@5L$!>P(B(A<$I'\ 5,T 1!< 1), 0=:O3_K-^-[?DDSGF$WK.'m MDBA0^M:M$P,@8BX2U?P 9Q 2MCl ML.#B>M'H[;D)P.,H=)MXY 9O< <].%N1ZDU38YT ?Q$AH!0I= :CJ@*WT^_(k MFP+5)"AT< 9?:4TT&0)*D0"4-*HJ<#N04]S-5TV"(D)G@)8=PJO6=+]C< :Cj MB@+]CKPI4$V"0@=G\)5Y2$FCB@*04]S-5TV"(D)G@)8=PJL&+-U'K_0CCD*#i MOM8!?H") J6B>09BB^@B04EBB^@ VZQ=/P9GL+D;F824! <@Z>A(>IL$&C".h M4A0 DH6GG"IG2'QC< 9P\ 5 >'QN<09PD +QT08$!R3-;_1_SOF!_O#-J+]Lg M?2B) J6B>09P\ 68I9H"? 9P\ 68!9*.CJ2W&=_L7(B.4A0 HA7%W9_.Q1!:f M,34A(1)E4"!A!G<292@I *O9ZH.=;%]A!G<292@c MI ("<1!XX% 7VT>8P9U$"4HJ$"0'@0<.=;%]A!EHX4R) J4.A:17M0 %I11Tb M_N9%I.:LA 9;$ ,P( ,T8.=\&><+(H%;a M$ ,R@ -VCD*) 2M^XBM$61:1$1IYF!BPXB>^0I1EP4IHD(>) 2M^XBM$619Sz MD(>) 2M^XBM$619S$ -YF!BPXB?'\TYID(>) 2M^>&UNZ ELB^'"B"F"IP,H9YT /!\w M#0>LI(6G]'JFBA,B 5!0 5(,-B_RK*H]/ DF5DA% ,R< ,@Z82TBYOR(7+Cv M) J5^!P5!u M0 5(X+H:R4J;8K&.CD*W&84M5W2+)0=G8 3_\KB>8D>KS#20.t M@DG#=[\"/QFG! ,+_Q*5R" +/P=.5XD,8O %-0<(/P(XM=V"P,G@,4# =*L05IT 5^r MC2@Q@,4#@"A.5XDO8;(Q@/GBO]@![?DS']EK'>![AP>) J6_J!1;4 (R0 9=q MX+JMSU]IL/!*L05I$#Q8C+1:;%-IL*,4G0 :R!%*L05IT 5^O;)W$:Q\?N&Up MNZ#:VX>'"B "@<^(X2 _^5R,/)JXK>(@8$"CRA^K55E,0<(/P(XM=Vn M"P,G@,4#P$H2Z-QY&m M@1)F.1W[$D4N$$@ SQ$O<4HF,.>[![l MAP>) J6GW[J*EXT:^?YO1^@]^P5XD"A0^HLO87R*EXT:B2@@Z>B4B;R(8L,Gk MX (GD$ F8 (X$0*(,08[%*H%)P(NT!]P<('S15\A@!ACL$.A6G BX )Q=P87j M.%_T%0*(,08[%*H%)P(NX!]S<(%@;0(FX$X'@0NG-807]*,&$4Ei MLB^P) J5^h MEQNG-807]).c M<$>,^*73L2^PF!<'^@/WXSZR]9?@ >) J5^EQ*/!JX-![AP>) J5^9R)^w MJOH%AY( NWD%, 9M<'U8C+1:;%/U9R)^FA9MT),H:<,N6\1]?LN;N/D![?D%v M&/J$WK,M=6O-V9]8\1(M50 QCO3%C_2(\22 $1]MT),%7X"A3^@]^P5XD"A06I&) J6J;]>M[V!CT ;7A_]:C/3.t M_ 6) J5IT0;7=[0:F($ZGGK.' ,R< ,I"4DLJ5,__@6) J5"SI(Z=3YY,Q48s M8A7&095((S088A4F(08"08%HT!6/Z3B2'&!JLV!!XSA&'0180 5!(!9V(P,Wr M@#?]_@6) J5IT0;DK@! Z19MP$1'"59?L=M7]!+)4X=5GEG6>Yq M-Q._(P,WD):.W![%A1;:W!KA(3:GE6U0$1FW\1+)@QC" AW@ZR+KIB?W0VX p M @6[;7"&TURI,@?#E6U0 4^) J4XH1 Z<+=B(!!W._(N$'@P>1$C52TJB[$1G&%<[M!A)GL"^0JNE/&1D[_>VE$@.H]1)+5BP!A!G<292@I *(,?)JTOPI1)2@E$)Rk MM04Q( ,XT 4LD*0@0"H$=\I1U(?WVT (L" 22.=OGJ0@0"H$=\I1%!D[?;^)j M 2M^XBM$619YF!BPXB?'XU.@Q#MYN%"8Q><77KMBP+OZEKU/^1?CH[U1I+V1i M$1H0FFTE'6]2TBGS42;:>Z@ (A#XC!@.3^*<1^@]^P6) J5^%QD['2>M%"d MPCL++JX7C=Z_(P,W4$])*CYD>(PA0'PJ>>&U>[WH(H$W A)GL"_20>Q2TJCHc MVRDD'QFA<8;$%QFAL04PT 5^O;)L(2B\8Y@B3_(H8 *1$1I; #QUT0;7A_GBb M3YG6S=\/WXSZR]9?D"A0*IIRY7?S%7FQ6(<0J;]L_06) J5^%QFAX7?\I7C9a MJ)$F$!FAL07=8XNT/Y&) J5^%QD[S3M^5P+="M%_(2B1$1I; /!8[&.CJ2Wz MB4=GI"\A "$- BX"<:7ZXKTS8:K R1#JF<9@37Q >'Q_(2A0L-LGZ7FI B<2y M:(3 BN.CG7K.C%DI>8D<^*,JP"[90@3E9$Q'&E.6]!Q\;#$^L>OP)B!T(' >x MPRC7D1V5T1G#E6U0@0)#("A/-!_UH2G'D0,X@ ,B@1S*(;,MT0:*DU%3 "]:w M(QHYPAPZ,1KUH2GKKM G(0>7D:<;LA%20"%>4A]?ZAU19*83\RK9[LM!F:t M!Q5UPATLH1GA'!>XM9L%%T7\<:4]B%N[^<8G->[@%B/0J2!:@1@@%1[>$45Vs M:B)KX 9O< <3."'Q@S_S+2!T(' ;]1%( 5#$$Q.n M0 5)( 1B@4Q9P"].0 0@$!940*13\09WH.N%%)>O.5@N#1AKX 9O< >DILZA:L6XO\>S^j M$\HG!!H(4$]014XN34%. _Z(& !.%2R"$T)."P #"ZH( $!Y0F4(DY i MS A0@1#APU!/''")(F3(@T4N)@RT$F0)A@5P'D#IXP;%B#@C&'S9DX9$"U h MD"PC)PR=-&_]TR=-B;IQ*;S!G7*U1GSOAP)U;N<]=7=c MU!G>FV8;J*^1 8)BQ<6FEAMTA %5<1DM-D=)8]QD1QELY"';@+_Q%UUS[&&Gb M'7?>R3:=6R D\<(3(+3Q!E4HE9&&;S0Q)(=#9KPA1X.,9>6&<38R= >-/=XAa MQXO%A:? >"_9(5P=+RU&1QURN/$="&DP-R =KK7Q7GTQ^F83="1>5X=+ G8Hz MY(LO=0AC1E?YE9> 4,'1G4QF. ?<6M()V*-K IJ!G)8OQM;F6V_*U)V<=!CIy M A109!3$E5G*=-:48N3AGEDF9=1$%5-081UP+)%IG:4:)2%%2H:Y!(*1C_94x MDJ0F35FC7F?>M",(9+P!&PANO$&'A]MU]U(="*;!AIV05D:E@:%^E]$=+Z*!w MVJDJ-;NJH[2]NIJL>^98'$IHO*';A'*@5"6P($YYQV\ZO;@LK%*"%Q2C&0FQv M71ACOK0:")FQL:M\&,KWUVR!O23"C-#AV5QP.HDI:AC,M>L&HAGU:Q]*S1$\u ME\$_RA:QH70@RJ^Q]BG*F5%4?);1$SKUZD8+;>QW4X)SK%'<@'E<548;L:&0t MA@MEN "%4],D0)*KOZ[&)5MP.$O>@A."7%&WC5M8UX6]KLK5,AFM5B$-EKXs MX'9I9$:IA3!BYX8=:2#G!M2_*CED&&+XZQX5332J0(]$/!!1=??)%TY2[@ %?&;[p M4G->%TZE>B!3K$"'L]4Z7VV*/KA44PH\%14;4U5U559O;-65 G;AI=?F*O#Yo MQ1AM"-@#0VS$U@(;(EQV5UX@@%^MYE<_$-Q/!&/0P>3$ )7)G6$QR\.4&_I'n MF+9P#06/V4-&$I =^^AD<0$D0%GVA<'+^%0D$/QF:;H!@1K&]*M/"!%-@PA.Z"P4Qh MH.8&^Q##'LZQD79$)1YKHT&K4ZQJP'-XQEP$YM^^0L\E$S8,F63O^I8C"9;)8Z48G.;b M6;'SG#?KT"AK9:XZ!?(.;O&.O.#8R0VNRUB(R:9&-_C+Q5(/!6A$21AE, .Da MX9!/VO2E0=7X!F*.$KB[W)P87+.&:G:T/L9-Z#DA6H(Y2%,$*$%C<#EJ!O()z M[X6C/>=V9;I!;[(6G*G"ZE=A([1U\2:0Z4764VMCKE]=GK-*,1SHA@"D482Q"8,(4GB*!Bx MJT'!#([&K_2*F,1SR%G53AR4V64$&@A214%$344 04X #_# < $X59HMVw M.+L+ ,<-[ *>,&Q8P4(,R\D0."RI,I(%#(>3.'X!HY84#$J 'BR1@Z('+ v M2-% 00M()4J6I((FS1P0+D&$<0.S#1PV9=H0I!.&3IHW--^8 1%P8,&#,MV0u M(3J&#<4R!A$J9.APB@L024"2>5/FI9LW=$K**<,F#PB@()JD<4+E+$.P:,HPt M;%.'C<\6/.>L2>/F#(@Y>>;0R3GG:E80=2J^'&QS81@Y9LVDP?D2Q4PR)6/2s M09,8!)LT;=(,7DKG#8@V8?" KM,&A!O68N2>'2J0(-$T U^&>5F;IF3**5RHr M5' XIIG'D\U.%),8Y&40:':#N+-P39FE4T^72;@0Q.;MF_F>>9D$<468(*<*q M5_#$3=F_;^K(&;,]9D#!UZ'++;-^95SX\M$'PA@S@1 ;"'+409-@EX7AE!MEp ML#"=:&C(=%H8?!$UT1D8M88"7TW50<9UP8&@1',EC2@9A"!,04403A 1!!-/o M.%$$3#2- 91D9[A0X7,ZVC09?R!(H>"$F[EFVF/C&394'O&!L)5W+@X=Q+=Y#%QE]E:%4&<(=Y9-(EA5D5T^-07"&.$44AAF#,32"@BJV^&*,,]9XXW-TR.?&FGW6X9=09B!T!X4Zk M#)? &&. T$*R11'DPAC#/1<&&:29EB5#GXF!$61791$E@31%.BD(BC+J*',@j MO:J4I.16>L2E3GCW1DFG#HEDA;VFN6:&WVDZHH%U@/052+G* >%20%W%TG8$i MDBH;N%02E&(933VV71EXM$H37R#IR>>9OO[IUW-PHB>OH($6O#%(:/6$X)$^h MZ=2? DZ !5YT(#5+TW-P-/64>=L!AE\;49W,EQUO6!>QIFV@II1AT(5A1QF9g MN1'BB$NU8=8;=RP8&&-%QS66A)O%UZ7),8WE1A@Z+?4%'D(SEFF_<\0W'W_^f MQ11W3MR1RO5B_T$1!!5(G+SB4@5B3'' 88B!DX1U@Y#E@ 5N5:P")26PMX0Z'"W'"(:'MN%,DX7.\d MPR%'CUAIQ9578)44G5*I"F$WBW/$U7J03I-A)717 44]MX8CTc MN0'2YE%=J0 <=8TIVED!)S11:W3;39^I;PCY^*,R47ORM9Y)@[8>DX>KU&PPb M5.I)2=ZVN8C90!RO.80YF:%\>MHB],)'.,&%1@!SK0L?MW&<. MQ?V7R%v M!H7]1T?_TEN9Z@"Z0"6&A7!S)/9!#-0-PF#68:5)%2R@6TX0MI> /7,u M_%5/0N)"5(NRX*(B-.%D![*D-N$8ONV +S:V:5RJ @5%@F$P4-21PQHT5!LYt ME.4J31#G@>JF$Z P+'%X""=?,D,PT\BL>"]SP_70%3&:],N+-DG/.:W#FX!)s MB")CF,PYY>07C.R)#._Y8R#=$,K_H)23_.M73F;X$A%$5*$M*I,(_O+*ODA(r M4F:@F$^F]AZGC&&=?J'FTC97DN>,)0YU2 ,9YY21NK$J(MV)CAS(@)"QB.$-q M8)E9$IX4)59N)W%N*.5$W* 3\X' #L@1Z':HT 0HD(D.$M(940(&./#8)"%#p MFD/5$J@5L4IU(07LR'?D,*SSO.^:C1V0?-16V2*6AEN'W ],1N@T.(0!BI%Do M@XBNX\-%QG:V%FPI'=B7GOF!@(4$!(#& X)6F!$&1:I*>XX2(ST4,**W)FC)1@##'(PTRL4P8@i +Z"BO&'M6_DH"&@!(h g end