wjs@milton.u.washington.edu (William Jon Shipley) (11/15/90)
Christopher Lane writes: >@begin(pyrotechnics) [...] >Eric's 'stand on my shoulders and reach even farther' comment is right on the >mark. Why aren't the archives loaded with well written, useful object classes >(with source) that others can use to build even more powerful programs? Why >is there a 'binaries' directory at all on the NeXT archive? If 'News' came >with source, maybe others would have fixed the bugs, returned them to the >author and we'd have a version that didn't blow up routinely. The archive >maintainers shouldn't even accept 'binary only' donations (IMHO). [...] Well, I imagine you'll get lots of commentary about the rest of your post, but I felt, as the author of News, gee, I was in a unique position to respond to this paragraph. I guess it hurts a little bit to be flamed for a piece of software I spent quite a bit of time writing, and then just gave away. But, beyond that, I understand your point, and in fact I agree with it. News doesn't have sources because News 0.75 is not a finished program. It has some bugs (crashing is uncool), and it has a couple of really obvious features which I haven't written yet. News is my baby. It's not that I don't trust any other programmer with my code, it's that I don't trust EVERY other programmer with my code. When I implement Save Article, for example, I want News to put the article in your ~/News/comp/sys/next directory, and then every time you enter comp.sys.next with News that article will appear (as read, of course, so you'll only see it if you have the "read articles" button checked). This is the behavior I want for the program that has my name on it. If other people implemented this feature, they might do it differently. There are two possibilities, then. One is the programmer would give away his new News and some people would use it, and I'd add some features to my News and some people would want them and use it, and there'd be a zillion versions floating around all of which work differently. The other possibility is that I could ask everyone to send their changes back to me, and I'd review them. However, I really don't want to incorporate changes that aren't to the specs I've already thought of, so I'd end up telling people what I want them to write. Now, how many people out there in netland want to be taking specs from a 21 year old hacker on how to modify some software that you aren't being paid to work on? Anyone? I'm serious. I've had a couple of offers to help me. I responded to one asking the guy what kind of experience he had, since I *DO* want News to be the kind of code that people can look at and learn from. He didn't respond. The strong feeling I get is no one wants to be tested before doing volunteer work; gift horses themselves resent being looked in the mouth. If someone like Roger Rosner offered his help with News, I'd accept it in a second. Eric Ly looked at my code, for example, but he was too busy to help out (no slight on him, he REALLY was). News is *NOT* a hack. It is a completely new, totally object-oriented piece of software. Each Newsgroup is an object, which has a List of Articles which are also objects. When you read an article, for example, I mark it as read by sending [currentGroup markAsSeen:current]. When you write out your .newsrc, I just send a [newsgroupList sendMessage:@SEL(writeSelf) all:YES] (or whatever that message is, you get the point). The only ugly part of the code is the displaying of articles, and that is because nntp turned out to be too slow to read in all the articles at once, and so I had to hack it to only read in the headers for the articles that are displayed. My point here is that I *AM* trying to write code that's reasonably re-usable and has some possibility of teaching someone something. In fact, one of the new classes I created is a ColumnMatrix, which is like a matrix except 1) it has only one column, and (more importantly) 2) it allows you to hide some of the items in the matrix. (Like, caught-up newsgroups or read articles, peut-etre?) Which items will be hidden is decided in a subclassed method, isItemVisible:(item *)myItem. I've offered this class to the guy at NeXT who was collecting them, I've had no word back after sending him the header file. Wouldn't it be nice if this class were completely cleaned up and documented? You bet. Wouldn't it be nice if William graduated and got a job? Doubly so. Man, I'd love to sit around and write these classes all day (I've got a zillion ideas, write me if you're curious), but I've gotta eat somehow. If the archive people didn't accept binary versions, there'd be no News out there right now. News 0.75 is a demo, to show people what I'm working on and get some feedback. I've now got a list of requested features as long as my arm (YES, I'LL ENABLE PRINTING AND SAVING!), and I'm ready to crank out the final version. Finally, if I may throw out some other comments on this debate.. On shareware: I doubt I'll ever put out a shareware program, because I just don't want people to feel bad about using my software. If someone REALLY wanted to send me money for writing News, he would. I'd rather let the rest use it without always feeling bad. (Yes, I used Stuart, No, I didn't pay, and Yes, I felt bad... By the way, Scott, nice job.) Personally, and this may sound really wierd, what I like about programming is the fame. Go figure. I love to get mail saying, "Hey, I love News!" And, about EPS: He's been rather brusque at times. When I first posted ideas about News on the net (my homegrown format for posting graphics, specifically), he came down pretty hard on me for not going with a standard. But, hey, different people just have different personalities. He sure knows his stuff, and sometimes it's funny watching him toast on people who ask the REALLY obvious questions. I've met him in person, and he seems like a nice guy. Like, much nicer than he did on the network. Anyways, I'd rather have a... less-than-tactful person who's smart and on my side than a really tactful person working for the enemy. -william shipley
mouse@thunder.mcrcim.mcgill.edu (der Mouse) (11/18/90)
In article <11162@milton.u.washington.edu>, wjs@milton.u.washington.edu (William Jon Shipley) writes: > Christopher Lane writes: >> @begin(pyrotechnics) > [...] >> Eric's 'stand on my shoulders and reach even farther' comment is >> right on the mark. Why aren't the archives loaded with well >> written, useful object classes (with source) that others can use to >> build even more powerful programs? Well, I could suggest a few reasons, but let's stick to the point.... >> Why is there a 'binaries' directory at all on the NeXT archive? If >> 'News' came with source, maybe others would have fixed the bugs, >> returned them to the author and we'd have a version that didn't blow >> up routinely. The archive maintainers shouldn't even accept 'binary >> only' donations (IMHO). > Well, I imagine you'll get lots of commentary about the rest of your > post, but I felt, as the author of News, gee, I was in a unique > position to respond to this paragraph. > I guess it hurts a little bit to be flamed for a piece of software I > spent quite a bit of time writing, and then just gave away. I don't feel you were being flamed for the software per se as much as for your choice to make it binary-only. It certainly would never have found its way onto my machine, if I had one capable of running it. I have a hard enough time accepting binary-only software from the hardware vendor; no way am I going to stand for binary-only in a case like that where I don't have to. > When I implement [...description of the way Save Article will work...] > This is the behavior I want for the program that has my name on it. Well, I suppose it's your program. But it seems a little odd to *want* to be known as an author of completely unconfigurable software. (With source, at least it can be configured by hacking on the source, even if there is no run-time configuration.) *I*'d be almost ashamed to release such a thing - and in fact I haven't: I have never released a binary-only program. (Before a few who know me dump on me about mcsh: I am restricted to giving out binary copies by our license with AT&T, I don't consider it distribution software (I don't plug it, for example), and if someone doesn't want a copy because I can't give out source, I will entirely understand. If I could separate out my changes from the licensed code, I would do so, and distribute the changes.) > The strong feeling I get is no one wants to be tested before doing > volunteer work; gift horses themselves resent being looked in the > mouth. As is only natural. (You seem to be a bit of an example of this yourself....) > News is *NOT* a hack. It is a completely new, totally > object-oriented piece of software. [...] If we can't get at the source, it might as well be spaghetti assembly for all the difference it makes. der Mouse old: mcgill-vision!mouse new: mouse@larry.mcrcim.mcgill.edu
eps@toaster.SFSU.EDU (Eric P. Scott) (11/19/90)
I'm swayed by the argument. Well, I only have one binary-only out there now, so if you don't mind a "kids, don't try this at home" lecture, I'll rectify that. Some of you have seen narcissus, and wondered why I didn't release source immediately. Well, there were two reasons; one, because I'm being just a tad naughty (heh heh), and, two, well, never mind, I don't want to talk about vaporware. A couple of people asked about how to change the NeXT logo on top of the dock. This window is really easy to get to, since the Window Package gives it a name--Beepwindow--so named because it's used to display the visual indication if you so chose in Preferences. Aha, you say, just composite an image onto Beepwindow, right? Wrong. It will revert to the NeXT logo the next time you double-click on it. So what's really going on here? Well, those of you who've worked with the Application Kit's Bitmap class know that Bitmaps are rendered to off-screen windows. \Where/ they end up depends on whether they were created with NX_NOALPHABITMAP, NX_ALPHABITMAP, NX_UNIQUEBITMAP, or NX_UNIQUEALPHABITMAP, how big they are, and the order in which they were created. --- the following description is for 1.0/1.0a systems --- Windows in the dock are all of the same type (NX_TOKENSTYLE), and, not too surprisingly, the initial Workspace Manager's tokens all live right next to each other. Of course, when the Workspace Manager starts, all it knows about is the NeXT logo and the black hole. Actually, there isn't one black hole--there are seven of them, and they're all tucked away in a 640x64 window: +----+----+----+----+----+----+----+----+----+..... | Ne | BH | BH | BH | BH | BH | BH | BH | | . | XT |empt|full| A1 | A2 | A3 | A4 | A5 |... | . +----+----+----+----+----+----+----+----+----+..... (sorry, usenet isn't multimedia yet :-) ) The tenth slot is all white. Let me explain how the black hole works before the rumors start: Normally you see one of two black holes: the one with the black center indicates that .NeXTtrash is empty, the one with the crap in it means that it's time to click Utilities>Destroy Deleted Files. The other five provide the animation for when you drag something into the black hole. Does this mean the black hole ISN'T gone forever in 2.0? Heh heh heh. (And if someone would be kind enough to send me the corresponding recycler images, I'd love to stuff them into a running 1.0 system to play a little practical joke on someone...) The other two windows need a little more explanation. The one with the ... in it is the template for "docked Application" tokens. There's no icon in it. The one with the NeXT does double duty: it's not just what appears at the top of the dock: it's also the template for "running Application" tokens. If you overwrite it with too big an icon, you'll know soon enough! ...which brings me to "well, now that I know how it works, how do I find this magic window?" This is where we get into "kids, don't try this at home." Unless, of course, you have a NeXT at home. :-) This is an offscreen bitmap. There is no symbolic name for it. DPS doesn't want to make it easy for you to get at, either. It's easy to find something that's onscreen--you ask for screenlist and you get an array of window numbers, but this isn't onscreen, so it's not in the screen list. There isn't anything that gives you this information; sure, dumpwindows will tell you that there are windows "out there" but it won't give you their handles. So I brute-force it--create a stopped context and take shots in the dark until I hit something. If it's got the right owner and right size, I've probably found it, but I ensure I've found exactly one candidate before saying "yeah, I got The Real McCoy." The rest of this should be pretty straightforward. You should recognize the "compositerect with Dover" from the Draw Example (thanks, Paul!) It's a safe assumption that my call to NXImageBitmap will croak on RGB or RGBA files--I've ripped off Draw here too. The rest is original code--if it looks strangely familiar that's because I used it in the latter half of iwf. This is up for anonymous FTP on sutro.sfsu.edu, but it's small enough that I might as well attach it here. Oh--if you want to see what the token gallery looks like, make a copy of narcwraps.psw, remove everything through (and including) the first defineps, the matching endps and everything beyond, replace the final logowin with = and run pft -f /whatever/filename pft will then display the window number. If, for example, it's 20, say Above 0 20 systemdict /orderwindow get exec You can't just say orderwindow, since the Window Package redefines it, and Bitmap windows don't have window dictionaries, which confuses the redefined orderwindow. Out 0 20 systemdict /orderwindow get exec puts things back. Those of you with 2.0 beta systems, get busy! -=EPS=- ------- begin 644 narcissus-src.tar.Z M'YV03<*L*6,F#9LR`!(J7,BPH<.'$"-*G$@1`(B+-FC0`&'Q(@@9&SM>!,G1 MHTD0,S1>I'$#1LH:,F#0J.&Q1@T8-2Q6W,FSI\^?0(,*'4JTJ-&C2)-.'&*$ M29`C4WJT>*)`@0LX<^ZX>*-#00(2**!,N2(E")04(,"*O=+TZ12T+<*`:/$F MK0H78^Q>S>H5[)`A:/VVA0HW+XF[8[RVD--FKAF]B1-4=1-&SI@T<^;4F:,# M!&7+F#7/V>JY\I@[<L)@W=H7Q5^X<^;6_7PY\^;2H&V/GFT:M>K=<]DX*8.% MRI?8+=C,R3/G^.3>J5=SQ7TZ^FBL=Q0HW<Z]N_?OX,/SI!UZ,U[QZ"=ZS!C2 M)$F1']N?C`$#Y$80+&7*F#'#!L[U,M@P@T[I%6C@@0@FJ.""#HV0AAMCL%$' M&66`P,,<=)"1QALNH.&#`@Y"*"&%%I8AAQQN<.@AB`]&.&&%%](AQX-G=/AA MB"Z2>"%S+]"1!QQEC+8BCB/"N-P<+V`8!ATVLM@&'&_(08>%JL&Q1AITO$"A M&6'4P08=0MZ8QI-13LE#E5=F24<:9IC1I(-D2FDA&5A%F$89;F1)YQQVXLGD MD&-"*2</>_:9YPN^K09HG&9B*$<98;2!I(ER1/EFH&5:Z"BDDB8I(Z=A5N6@ M&6YL"0(;#]*A@))KYC4&&I6!P.<8<Z1!QA9=]"`"$"B,D`)YNN'%!1TQN``# M""A,8<045:!%WPLXO)`##"+LL"H=2Z;A*JQR@##&&W#D,>,9:-"!:P]>B3`$ MN.*F0>Z4,>0P+0ABY`%"$3/F!84+($SQ+1U,7A0$&VR`,&ZYL3TZAXEVE$&& M"URXP84"4I0!1Z5DU#'&FF^X`0*0C&%)A\,?5VJ'K233`>N4*F/F+;L'3YEB MJQ6Z_"BV#SH,L<0*4(&&RW.\808==U16<VP7OW$RA62`P(4(8<2&V=,MM+!9 MA4N"D,<;=73[QAT>SSC'&B%$/+$3=15]8AAYWAF;T2"4@<?%02[<=)0@!(JJ MSA%7"R*>&IJA@!UOV`K"%R/C00<<;*!`A%CKYBGWE!OCP8*WW(*@@AAUF'%Y M'6[4>H8;)+/1\1DO@TY'"@KLX14*A-N:`FI8EH&"#)=S[GGJ>:9@;1]5?1LZ MY9FKL&:;E)[K>@(BH!WWB5&*P$*Z0@1!Q!=4)&&$$5\8\804301!A?3I)A'^ M$45\X<03QGE?A1-$D,]\$$PP\<007Q0AA13?RR^"]^`3G_K8]X4L%,$XS((" M%+Y'A2+$;WK,,T(2F)"^)#PA?_OK'P35]80F0$$*19C"%"SHA`$:QX`(K((" M&>A`$2B@#]92@/`PA+E8M2$/08`#')P0J3*<2P3`$HW?)F<BCZ4*!$[`0A#D M<(8Q6(N(**IAMU2@@B0N\0QVL%8;PO`@%+!N>5#T6.R:=H8RT,%T9_A:%X^H M`C2JT0V^\TH803!&69FQ#G"`7>'($,<$S+&.#U(2P5!P1#?>X4%]3.(4/A4I MS9G!6@FHH_$@^;@I1"YQ4X)#Y2!9R#>D\9!N@&02L[>])+C!#'59TRG?`$E6 M:0N)6"`"0;KTI3E8H0P;P]L-9<DE+X$)!#T`P?(2L`<0-`\+2'@#AJ2'Q"K4 M#P1]@"`QC9E$L?"P#65@IA.<R01H2K.8VWPF\!(`0Z^\*E;':Y-!?"B#&MB@ M"ZV4D<:FQ"I9T0&2,R0>.MED!KG]T`7I])M7DEBQ,V!F9'+@)2W!A((;YG"' M/;S<+F?IRSGTD4W(LB(3Q^`#&:!EF'J4G1DNEBHSH`!#%#K1Y410A3F$H8R= M*4%LMD!*([2@(`?I0M\N5T4E,M$.??0C'K"$@ACT<9RO&V,*'#6&<*$@G3@M MPTI?P(0WC"$,;&!"&L20&CGDX05)V&(9D02%,H#K("\0P44?@P*--M$'1A6F M5Q*`T;;Z%(M;B$$7M@"#7/7@!"\X`5I"RD>F.A6JZ[R<6^V0URX$M0S*J=`P M$T#8I<KHJG1X*C^CJMB[,E:O00T#&2B$AZXDX+1U9>J34&`"Q!YD"XXZB!LT MVZ:HIJ`%->C"Y=(IMQ2P[K2GK2Q3ET1;=1YDM_SL+23)Z95Q0G9A<CWM',\Y MQ3*>T9-=3`%/K0N'.]3!5H3,$PB^R\?E4E=SV(PA:MD:@H:6H0?616-V4V`" M$[07F_`U8W?)BP+K\M>WOHUN<)4ZTAGER:0HI=1*9=J9.Z"A+G#;6AU^L%/- M+3:H0B6J49<[3LHJ=;B9=:U408#-H*:1#A`>K=P@.<[48BO$FTTL"$R`H13P M``8?G6M=*96B'O2@".L#,A7JZ]8Q\*`'<9UL90M<TI-F2,$*$`�:`RKH$` M5C1,D<$(<I"-;<@-(1"8G*I<!Q#(Q0Z1@D,:'D5A-S"SIU<$ZG(SG-D-S[7# MSZT0R"HEA^+:=KERT_!1O5)7)[L`0U]HPQLH9((I?$%[3:!""D+0`T=K#X1' MR/&`]Y@")A_8R2F5PX(YXYDW3$DNC..BQZ):81$_=JAU'C1=V8L",_0@B0&! M@Q'6Z6<9)_$+(+3>$YS`A"P`6,![CE*O#_)J0;.8T+2FPZVQ4#'1UA0%,+C< M[EK[(%1>CK":2T$XF7#L8=95E:AT`:6BY(,>P*"^Z.;0NN7`@[E2ME9Z,.MC M>'NB)*4AWT*C<G)/Q%?'_G;3(B7IIQ.L4F-.6:85AO-/I7E:?LMA"_%6-_3D MX%A`1Q99!%8X'1#\Y(9+F=2@6T.*P`:"FCZ/SR`H`1EV:F^)8Q&YJ]0XGX.: MQ"&8;F&U;G:LGYV`GO_<=F;HHR;I@(<>.`YR'<.DN+EIK5\3H0I22((3CN"5 MI3>]DD-XU)+*<,G)H6"N23R"&17J2RM@M0ZV<Z@.KSGB8R9SF=I%.Q;43@>V M?\GM$HH[#N<>46IBP9H]5*LT$3<YQEVNDGZG`[[X#(5*C2&.OT9"$.!'02E` M.Z-8J.I5V8`$MI'A('+`RZ++0.D]?8%27[AJGB)'NHVAY=<@+$L2IE`$+T+R M!2IH^<^D%IN@G:J'_$(B<:@@JP=[J6E;',CADD@$K%1,4`C]6!W$@*HQA.#[ MFGM!4CD]TCHP=*XBJ*2W]B9>5'&U,O::=V?6]?Q23PF5C'F9&VK/,3=<[L$T M)#\)P'!RT$=+!@?F-P<H@`+GI0+B%GI6A56E5RJHYP)DL"1A@#OV%&J^HWUT M,`8H<`(1<P*70X"8AP7Y`S^:QWGZ\WDH$`)>AQ:!-G1>44E38$9EIS@H$(,[ MD`#`]S$F\C'*!"9C,"-PP"0S(`,Q0&7#ES>Q`3JDXS`DHP+BYX/!5UGJ`X&B M!05A,`9K\%*V(P*@1`9?PX5>"(;%0BT=2(5>$5^>]$:L94B(9"TGX1%U)8=N MX`,X)F`$A4M3XF`F4@;FU3$T=$2'1`8JTP,9\7]EX"[EHH@TH%X)`(B/LA7C M\B`NT'1VM2Y1PD<H<(@JTP(9-R9@Z`*@B`8I\`(RL%R46`:6Z"Z8F`=.UW-O MT(DI@`)HT(CO(HK=QB&D6$8=HHOEDHJK.%>M>&C_YHJG.(M8P(ERP$>C*%;* M:"LJPXJY6(GXYHJYZ(C2MHFU^(PI$(VEN(WOLEP+0P=XY'MZ%U9@*`18LD5Y M9`*MB'/I]HO3B(AH0''B"(SD6"[TZ(O2Z`)B@"5S4%9R,`5I=ESVMH^NZ%)/ M<A`%:2)0D`9X`%GZV(LN8(]7P09L4QF14Q!G<)$YIY%P\&`H9DH(!0>[17&: M-9(!69*F]@8H:2)P8`*_1C]0H'GA,P5+@!8_8&\)0`<KP)#!R(TJ`)1$Z9", M$R0&.9$5R09'"5R4U9+U&)`#"28&B9`/6091"5Q$>8HK<`.IB`/$"`*=`6X. M.&XL*4E35S_?QI9J"7)[%&[C%E2!A"V#A(>REF=RF7`&-G*@!F6G=7*=$30G M8B]M<`*F\XR70X9N<`)3<@)AT#`D5B&']$MA(`9<,R78%'$71DEKP45TD(.9 MQ8,U*!:RY"AOD`=3``==:#LVZ)IC4`9&4"EM0)H[6#F^!4DSB&UQ!#P,$IS" M.9S$69P)0AN)<AU989S=L1XJ`1_OX1[R<1(S``,RL1(M00/[81,U<`/K80,@ M02#,.9[D69[F>9X0\0(O``*[5BI,6"%"8P8MP">/@B<@,(9?<Y_76"%7$"5K M,`>R62$#83%2\TO#41RG\H8*H)X7<2P]X`/V!P*H!#IDL*#KJ8?`!*%OL`86 M:B$."J&*]BA,R#8@T#$5(GL:<H$CHP!;DC-8`0)N^$E=Q`=LI)<*T*`WZAF3 MHR$;`P(O(`1E8#'X>0<@H')?XS&N8Q)`*J0/0H9$FC%P``+'0CHY>A%)>A)0 MZBU=\RAY<J1!^`)XDID'`2M>2"-Q@P>O`@);4J4>L82:(09L>A$M$`-Q*J6\ M0X3UZ0:H0D.5D1KV<BST&:1Z>E!JBD>G@B=GH#(@X*;;!Z-F5*=76H=96DQC ML*5^XJ7=T@?V!"Y`TC216H="&*50`@=U>A'``ZIRA:H7$:;<5P9D>B5N@#IE M$`>IJJH7D:65>B)^,J0\*C->4C"D(TRA"DVE>A*?:JNX:JEY,J2:2:&QL1$R M8#!O0#!V.JMGFJ;'8JVF5ZQU>*RV"@(9$3=QP*V@ZJW?&JKDBJI+V*1R4ZWC M>J[=>JUH,*RG"J\F44RD(ZMH.J^C>J98`DUYTT^1E:XG4:_V6DS]VJ^:RB9Y M1K"FZK#"FK#@0J\!V[#GNK`"NS#D:K#E2K$,.["HBK$66[`2&B5LRK$(.[$B M"[(`RR8YBH<*`#A8414,&G:0,C)FYC'Q.9]%**CWV:3YB6)Y(XU4]@8L2A`N M6GQWE$>LTZ!V&J[A6C$X0SI-,Z2%&J6\6@8G,YN50J$Y^B!8<@;1\3.T\A$H MH:9I8`=V1`=B&P;V8B<ZM"3SBE-L$+.E,K,=NB[A4J)=,[1@B"PN%3KT4@;Y MQ@9H(;0J@S4Z5"DD-78?PY&S.0>7$R&0XC%X=+0%03HO>I=8U3B=)*-PE*.Y MRJ5$`[39<1%N:D9M:R^IBY<E*1?'<BQ0NQ%$H#1!^"UD4BL(Y8<Y.@-G6P,X M``+`FZ-GP"IED*,T\2WA\K)O"$H_6RI?0R%;:R)<4RJ]>[9Z^[9OD+NUDZ-+ MVEVF^[Q.*KW:0KU>>Q&^Z[O9^S+<B[-F("%S@`9M6Y+:,@<YZ@:_2KZSF:,( MU09#:K=[H@!-^IXEVB8\FZ?BFY^M"`+]*0?_&:!%&J2;:Z#+EZ!IU*%V^J`1 M.J'6RZ`8JL$;VJ$WEJ$D%B45HC(D:J+>8GJV,G:8F[2.>EV@BP(T*EYMU+R( ME*,P<+\[JBU3\J,2;+5&RG*?^KU6FZ53>KSW6J?)JJM="C9?RJICVH6PJJ]I MNJ9UR*AP6H=S6J?'\BVJ$ZAXLJ>GMC9_*BL].\:$FJ6RE:CSJL4Q#*G%.JE: MZL0H!L69NJDZ1#+FZA$22ZHA6ZQ]O*J4T:JO:J;6.L@>T<2DRZL^[!EU@)Z2 M/,F47,F6?,F8G,F:O,F<W,F>_,D+020OHBD9LB&7(B*CS`,\IB)B@LHZXB@T M<LHY8B0\XB-`$BJB_,H\PBJ7PBA4HD-IHB4454N]C'V_;"58TB/\5,R90BAU MPGYZ\LQWDB?,/"B%`LV(8AW5W"B,U"GSMLVD+':=LBF1$BHL0BJF@BIY<BW9 MLBVQ,BNU<BNYLBN]\BNF41ZC,0;#DH;(HBS,XBPP`"W20BW6XDKNW"W*VR[O M<B[IDKTQLZCR<BSU<B_Y`@+[TB__$C`@,#`%$S,)$R0,PS<\<WT8,T]?!H0A M`S`DDS1+DS(KPX0ND]`//3/EZX1;-K4B/3$^`S1"0S1PXS(LC3)-\S11XX14 M8S70E342YC4L)S9D8S8*X#QJDQIM$R1F)J)R0S>903)XHS=W\C!]8RTC`#@N M6T>,ISB,\W26%'63XRU,-[G%HSN?$SKN0K4)&JMW^D7C)SNT,S*WDSN=,[G5 MNSJ_$SR$J$]39''*DR[.,V_^4SW74U/=\SWA,SX;9#Y/D3[KTSY/\#X/E"[T M8S_XHS_\(P7^`T"5;4(%=$!?D$`+)`4-]-D1-$$5=$&DK4$-W4$?%$(C-&RJ MC4*MK4*O'=LN5$XR=-A21&*#!U'8]$-!M!E#I#A%E#?B561/)-U1U(`VET4* ML$79U3IRA-UB-)<Q"H<UBL-PQ)OB34=S>8[IJ%3JC5#C;3B<.TB?^T:)A`6+ M),Z.!$F2=$^GN=:2HS@?LTF$UG[H+4K%H3T2M$H"MTKQU,ZP%'FVY(>ZE`<4 M#DP"5DQV-X3:Q$W>-%<<7DU30'<?+D[?U$SBU%SXE#DBM@7M]$[Q)`?S9$]9 M@R'XA-SGQ5MX\$\!I5Y]:%`88B(4WE#+37<2A>'##"9K!7I7Q%$>)6`'^)<D M%VHKU5)@&%,S55,WM4XZY68\]9ESU9MVQER2X6&<9EAYL&QU1U41F%5;U55? MQ8YC]0)E=59ED%9-;E=/#E>:-FM._E.-57`^!EB"U9>%=5F'%6/'!4MQUEB/ M]7%*]F&715PBUEF/#EK+)5JD95KK!;B7M5K<5EOK!%LR(EML?ENYA5S(@P>^ M!93"5>DP1NJ-SN-!-4[.)>ECOMX-&*/9M5WZY5W@=43D%50-F%Y5\>DOZ%[Y M)</S55_W]5[<)>QDT%]W!%X`]N=H[I=-1H"CUF`/=M45(F%M]F9B#EQD?NMS M%>N68>F,/F(EMEPGEF*D170NYNZT/F(TMCHW]N<[=B(]]F-!Y@1#9I-W961( MINU3WNTE)VI1-F5D=F51(S-U\2COZX=?%F8;/6;.9V9TE&9K5@;E'N:>A6'I MSF%C_G')UF>N!FBP5E2R5F@8<FATD&BKUVB/9@21-FF5EO.8]N<+OW`-_^T1 MBFH<^2`2NDZM]NY"!_/V3FNVAFNJL6L'P>:=!6Q%(&S$9FP!-DPKG^HN[VS- MY8+M)6U]:&T,CFW:=CG<MDIO.9=IR4WEIF-LE7'SUF[OUO;I-F_U!EPGE8P! M9W'^!G#[-G`7UU>O[O<A1^6!:7(/-P>>Z5D4%Y2&CW$8.6\=E_+0%?2`Z>T. MAW)N,,0>XW+S%G,S!^8UMUC_J'-1PG/->'1!%_8T:.9&ITQ(IW25XW1@Q]:* MTY9,4'4H>'59MW5=E_M@)W8C@YMZQW>1!WAP9^0/A>2&=W=TH'C+OW9+[OR" M%_V%=TR(ATW6?UIGO3AL\'BHN>23%R659U4G^`4K2`2=YX)))'H2:'H5^"T4 MTGI8\7HG$GML,YH=@__<'A24>X+`[ND]?>0'[33B(ROJ`D?")LGG0#&?^,4U MV`#T$0@5(@M5GSEP?<I$$$)`W$=;?)\PPX:V'1\I/^=G,*D?0S$EW(^<>SE1 M8OY4P*8Q,TI6_A$>_.?+_)\A9$RDB0F")`<H`2V@!O2`Z!_IL7\FP@)A(`WT M`ST0"!)!CZD$-;SV!V2(P/N+?X#N!<4@?S7[;!`.XGVE23?UH!\$,H00AJ!/ M:>`(N8`DM(1:!@.$0D&*:80?K_"#L-#\>P-;B(J!(10@ADR7&?I"920-J94= M,`<30'D#)7$(O<415'6'T)L>^G-]J$>UHD$T/*C;'Z)&:``2,2)N!(DDT3&* M$K#(#60B9N2,/-$IXD4NJ12=(F)DC0+1*S(HHE`6>2-;A(N$$1U`A55I'-E" M5FB,]A,RRC>F"!.2PF\$C3"21CI%K1`;):.B]"Z&H2TB2OT(P)T6]\:TEDL2 MH7-EP!W1`7C$6N;1@\N%P.@4B21PJ(ULX>K32%<I(AVDA"15%I(Q#$A*"2(U M)8IDD=QA*@1&J>8S?"1W,0X!4BF"22=)<L@!E41E6!)1`H@R22#6I)O$!')2 M$-A)/0D$_"2I))2@H2WL2A7G'9:B>,B4)!(]A$JPCBKY0V"4#K,2.\2(E.\> MWB.5$9;&4EDZ2W")FZPEN.?[WI[AB'MN"='1);FW7.I;X]!+1(<O<;XJ)YB8 MQY0Q3%Z%Q"BF3M28.@9D`@&2B3)ADY^%F9H59RH#D2_.])%*<@5$$VXR30D` M\@0)&;&:6M-K4FMF<3;5INWU%753'^E-.*:P@;*Y2!?KHGA`3MH,.]A%A^"< MIE-\*`D>(3K5H>ITG?!#=MI.-L$[803P1`/$TUY\C)`Q,@X%!M6>FD;B*F#R M28QY#*NUP!K8`WM-$8Q`Y0T*AJ#<"`;[4!NL>E4H#X8:0QB#&F$:+$2=,%BA MLX(5BFIA*ZI%::[8<`AGU'D#74U+2O$PQ=&K?)01"U^BKU9=A.,(O9Z4H4IB M;,I;,;)+A<=\E!1S550,D>TK-440ZI06JU-=K`Y]L<&F&<G85?-3=JH\KC%# MU<84%1RS+G(,5=&QT44=24<>PQ"<BH^1JS]6K#C6$K-5U_&0X;5$1K"FX[(R M7<41?U&K8)6RHI1_+%<0RT"6KN;8K$K%LS);E8):92M:)3>PE;C*617J8$$L MC+`19M6(5([V"EVER#9%W4B+NSJ15DI>T2L8*:SRE8SL5S.H964L)98B'Z2M M:I`>:T="+!_9L?Y8D!Q9MFIE::PD2:Z`I)+DD77H2=8I385_3E9T/)(L"V,Q M+]`%P/!6S4)^6$-G&3#-F,"(E-"R1T7KA>W&M96.@F/L`E<;(6J9$55#,HZ8 MH<I:TZMK6:^+`+;8UMBJ7V;+=VD(M76.5M?Z28.N25'1K2YIO_(6N^!;W0)- MGA2V$1O$`.&"+(<KE>0B,[.XP,6,<%RI)G)-KH-`HBZ7;A2-/C&\M$!%*+J4 MU81T4CFJ=1G*UH557I>=DEUQDG;9+H2VO:"$[@I$&^-Z^2[@);QP`/$R7LCK M92ROBX"'RJ3^,E][\FRIKT>)NWQE]UJ.02Q\X<GRI2=#I+0$`>NK6BJ3VB&A 6X)?\^I.TXG[E+ZU5OOB7B?!?ILMN`5J. ` end