digitalmars.D - D language lexer written in D - dlexer.d
- James Dunne (572/572) Dec 18 2004 Hello all,
- Matthew (4/22) Dec 18 2004 Excellent! I shall be checking this out in the new year.
- Ivan Senji (15/32) Dec 18 2004 would
- James Dunne (569/569) Dec 18 2004 I have updated the dlexer.d module, so please use this version.
- J C Calvarese (10/16) Dec 18 2004 It sounds like you want to check out dsource.org.
- Matthew (13/30) Dec 18 2004 James
- James Dunne (77/89) Dec 18 2004 Sure thing Matthew,
- James Dunne (733/733) Dec 18 2004 Hey all again,
- Vincent Risi (2/735) Dec 24 2004 Why not produce a Coco/R for D instead?
- ahiru (54/54) Jan 01 2005 The parser couldn't parse below code.
- James Dunne (5/59) Jan 02 2005 I never said it was complete ;) Thanks for the bugfix, but I dropped th...
- Simon Buchan (25/48) Dec 18 2004 Any particular reason you kept the whole TOK.TOK... naming system? Just ...
- James Dunne (31/41) Dec 19 2004 I kept the TOK.TOK naming scheme out of pure dumb ignorance on my part ;...
- James Dunne (2/10) Dec 19 2004 Lousy kharmic retribution... that's what I get for correcting someone el...
- Brad Anderson (13/17) Dec 20 2004 This may be a good idea. I'd say put them in the Bindings project,
- James Dunne (9/26) Dec 20 2004 As a temporary solution, that sounds great. But I have a few issues wit...
- James Dunne (8/8) Dec 21 2004 Anyone interested in my dlexer and dparser modules will take a look in t...
- Ivan Senji (21/29) Dec 22 2004 the
- James Dunne (32/47) Dec 22 2004 Glad to see someone besides me benefiting from my work! And since dlexe...
- Ivan Senji (25/80) Dec 23 2004 It
Hello all, I thought as a nice Christmas present for you all working so hard on D, I would contribute something some of you might find useful. I've been working hard on a lexer (tokenizer) for the D language. Attached to this post is the lexer module written in D!! I began work on it for code-completion support for my D IDE called Orion (over on dsource.org). Don't bother checking anything out there yet, as its all in ruins right now. ;) I tested this module somewhat, and it successfully lexes its own source code! This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of. Merry Christmas all, enjoy! Regards, James Dunne begin 0644 dlexer.d M;6]D=6QE"61L97AE<CL*"FEM<&]R=`ES=&0N<W1R96%M.PII;7!O<G0)<W1D M+G-T<FEN9SL*:6UP;W)T"7-T9"YC='EP93L*"F5N=6T 5$]+('L*"51/2W)E M<V5R=F5D+`H*"2\O($]T:&5R" E43TML<&%R96XL"51/2W)P87)E;BP*"51/ M2VQB<F%C:V5T+`E43TMR8G)A8VME="P*"51/2VQC=7)L>2P)5$]+<F-U<FQY M+`H)5$]+8V]L;VXL"51/2VYE9RP*"51/2W-E;6EC;VQO;BP)5$]+9&]T9&]T M9&]T+`H)5$]+96]F+`D)5$]+8V%S="P*"51/2VYU;&PL"51/2V%S<V5R="P* M"51/2W1R=64L"51/2V9A;'-E+`H)5$]+87)R87DL"51/2V-A;&PL" E43TMA M9&1R97-S+`E43TMT>7!E9&]T+`H)5$]+='EP92P)5$]+=&AR;W<L" E43TMN M97<L"0E43TMD96QE=&4L" E43TMS=&%R+`E43TMS>6UO9F8L" E43TMV87(L M"0E43TMD;W1V87(L" E43TMD;W1T:2P)5$]+9&]T97AP+`H)5$]+9&]T='EP M92P)5$]+<VQI8V4L" E43TMA<G)A>6QE;F=T:"P)5$]+=F5R<VEO;BP*"51/ M2VUO9'5L92P)5$]+9&]L;&%R+`H)5$]+=&5M<&QA=&4L"51/2VEN<W1A;F-E M+`H)5$]+9&5C;&%R871I;VXL"51/2W1Y<&5O9BP*"51/2W!R86=M82P)5$]+ M9'-Y;6)O;"P*"51/2W1Y<&5I9"P)5$]+=6%D9"P*" DO+R!/<&5R871O<G,* M"51/2VQT+`D)5$]+9W0L" E43TML92P)"51/2V=E+`H)5$]+97%U86PL"51/ M2VYO=&5Q=6%L+`H)5$]+:61E;G1I='DL"51/2VYO=&ED96YT:71Y+`H)5$]+ M:6YD97 L" H)+R\ 3D-%1R!F;&]A=&EN9R!P;VEN="!C;VUP87)E<PH)+R\ M(3P^/2` ("` /#X ("` /#X]("` ("$^("` ("`A/CT ("`A/"` ("` (3P] M("` (3P^" E43TMU;F]R9"Q43TML9RQ43TML96<L5$]+=6QE+%1/2W5L+%1/ M2W5G92Q43TMU9RQ43TMU92P*" E43TMS:&PL"0E43TMS:'(L" E43TMS:&QA M<W,L"51/2W-H<F%S<RP*"51/2W5S:'(L"51/2W5S:')A<W,L" E43TMC870L M"0E43TMC871A<W,L"2\O('X ?CT*"51/2V%D9"P)"51/2VUI;BP)"51/2V%D M9&%S<RP)5$]+;6EN87-S+`H)5$]+;75L+`D)5$]+9&EV+`D)5$]+;6]D+`H) M5$]+;75L87-S+`E43TMD:79A<W,L"51/2VUO9&%S<RP*"51/2V%N9"P)"51/ M2V]R+`D)5$]+>&]R+`H)5$]+86YD87-S+`E43TMO<F%S<RP)5$]+>&]R87-S M+`H)5$]+87-S:6=N+`E43TMN;W0L"0E43TMT:6QD92P*"51/2W!L=7-P;'5S M+`E43TMM:6YU<VUI;G5S+`H)5$]+9&]T+`D)5$]+87)R;W<L"51/2V-O;6UA M+`H)5$]+<75E<W1I;VXL"51/2V%N9&%N9"P)5$]+;W)O<BP*" DO+R!.=6UE M=BP 5$]+=6YS-C1V+`H)5$]+9FQO870S,G8L(%1/2V9L;V%T-C1V+"!43TMF M3TMI;6%G:6YA<GDX,'8L" H)+R\ 0VAA<B!C;VYS=&%N=',*"51/2V-H87)V M+"!43TMW8VAA<G8L(%1/2V1C:&%R=BP*" DO+R!,96%F(&]P97)A=&]R<PH) M5$]+:61E;G1I9FEE<BP)5$]+<W1R:6YG+`H)5$]+=&AI<RP)5$]+<W5P97(L M" H)+R\ 0F%S:6, ='EP97,*"51/2W9O:60L" E43TMI;G0X+"!43TMU;G,X M+`H)5$]+:6YT,38L(%1/2W5N<S$V+`H)5$]+:6YT,S(L(%1/2W5N<S,R+`H) M5$]+:6YT-C0L(%1/2W5N<S8T+`H)5$]+9FQO870S,BP 5$]+9FQO870V-"P M5$]+9FQO870X,"P*"51/2VEM86=I;F%R>3,R+"!43TMI;6%G:6YA<GDV-"P M3TMB:70L" H)+R\ 06=G<F5G871E<PH)5$]+<W1R=6-T+"!43TMC;&%S<RP M5$]+:6YT97)F86-E+"!43TMU;FEO;BP 5$]+96YU;2P 5$]+:6UP;W)T+`H) M5$]+='EP961E9BP 5$]+86QI87,L(%1/2V]V97)R:61E+"!43TMD96QE9V%T M92P 5$]+9G5N8W1I;VXL" E43TMM:7AI;BP*" E43TMA;&EG;BP 5$]+97AT M97)N+"!43TMP<FEV871E+"!43TMP<F]T96-T960L(%1/2W!U8FQI8RP 5$]+ M97AP;W)T+`H)5$]+<W1A=&EC+"`O*E1/2W9I<G1U86PL*B\ 5$]+9FEN86PL M(%1/2V-O;G-T+"!43TMA8G-T<F%C="P 5$]+=F]L871I;&4L" E43TMD96)U M9RP 5$]+9&5P<F5C871E9"P 5$]+:6XL(%1/2V]U="P 5$]+:6YO=70L" E4 M3TMA=71O+"!43TMP86-K86=E+`H*"2\O(%-T871E;65N=',*"51/2VEF+"!4 M3TME;'-E+"!43TMW:&EL92P 5$]+9F]R+"!43TMD;RP 5$]+<W=I=&-H+`H) M5$]+8V%S92P 5$]+9&5F875L="P 5$]+8G)E86LL(%1/2V-O;G1I;G5E+"!4 M3TMW:71H+`H)5$]+<WEN8VAR;VYI>F5D+"!43TMR971U<FXL(%1/2V=O=&\L M(%1/2W1R>2P 5$]+8V%T8V L(%1/2V9I;F%L;'DL" E43TMA<VTL(%1/2V9O M<F5A8V L" H)+R\ 0V]N=')A8W1S" E43TMB;V1Y+"!43TMI;G9A<FEA;G0L M" H)+R\ 5&5S=&EN9PH)5$]+=6YI='1E<W0L"GT*"G-T<G5C="!4;VME;B![ M" EC:&%R6UT):61E;G0[" E43TL)"71O:V5N.PI]" IC:&%R6UT)=&]K=&]S M=');5$]++FUA>"LQ72`](%L*"51/2RY43TMR97-E<G9E9"`Z(")R97-E<G9E M9"(L" H)+R\ 3W1H97(*"51/2RY43TML<&%R96X .B`B*"(L" E43TLN5$]+ M<G!A<F5N(#H (BDB+`H)5$]++E1/2VQB<F%C:V5T(#H (ELB+`H)5$]++E1/ M2W)B<F%C:V5T(#H (ETB+`H)5$]++E1/2VQC=7)L>2`Z(")[(BP*"51/2RY4 M3TMR8W5R;'D .B`B?2(L" E43TLN5$]+8V]L;VX .B`B.B(L" E43TLN5$]+ M;F5G(#H (BTB+`H)5$]++E1/2W-E;6EC;VQO;B`Z("([(BP*"51/2RY43TMD M;W1D;W1D;W0 .B`B+BXN(BP*"51/2RY43TME;V8 .B`B14]&(BP*"51/2RY4 M3TMC87-T(#H (F-A<W0B+`H)5$]++E1/2VYU;&P .B`B;G5L;"(L" E43TLN M5$]+87-S97)T(#H (F%S<V5R="(L" E43TLN5$]+=')U92`Z(")T<G5E(BP* M"51/2RY43TMF86QS92`Z(")F86QS92(L" E43TLN5$]+87)R87D .B`B6UTB M+`H)5$]++E1/2V-A;&P .B`B8V%L;"(L" E43TLN5$]+861D<F5S<R`Z("(C M(BP*"51/2RY43TMT>7!E9&]T(#H (G1Y<&5D;W0B+`H)5$]++E1/2W1Y<&4 M.B`B='EP92(L" E43TLN5$]+=&AR;W< .B`B=&AR;W<B+`H)5$]++E1/2VYE M=R`Z(")N97<B+`H)5$]++E1/2V1E;&5T92`Z(")D96QE=&4B+`H)5$]++E1/ M2W-T87( .B`B*B(L" E43TLN5$]+<WEM;V9F(#H (G-Y;6]F9B(L" E43TLN M5$]+=F%R(#H (G9A<B(L" E43TLN5$]+9&]T=F%R(#H (F1O='9A<B(L" E4 M3TLN5$]+9&]T=&D .B`B9&]T=&DB+`H)5$]++E1/2V1O=&5X<"`Z(")D;W1E M>'`B+`H)5$]++E1/2V1O='1Y<&4 .B`B9&]T='EP92(L" E43TLN5$]+<VQI M8V4 .B`B+BXB+`H)5$]++E1/2V%R<F%Y;&5N9W1H(#H (F%R<F%Y;&5N9W1H M(BP*"51/2RY43TMV97)S:6]N(#H (G9E<G-I;VXB+`H)5$]++E1/2VUO9'5L M92`Z(")M;V1U;&4B+`H)5$]++E1/2V1O;&QA<B`Z("(D(BP*"51/2RY43TMT M96UP;&%T92`Z(")T96UP;&%T92(L" E43TLN5$]+:6YS=&%N8V4 .B`B:6YS M=&%N8V4B+`H)5$]++E1/2V1E8VQA<F%T:6]N(#H (F1E8VQA<F%T:6]N(BP* M"51/2RY43TMT>7!E;V8 .B`B='EP96]F(BP*"51/2RY43TMP<F%G;6$ .B`B M<')A9VUA(BP*"51/2RY43TMD<WEM8F]L(#H (F1S>6UB;VPB+`H)5$]++E1/ M2W1Y<&5I9"`Z(")T>7!E:60B+`H)5$]++E1/2W5A9&0 .B`B=6%D9"(L" H) M+R\ 3W!E<F%T;W)S" E43TLN5$]+;'0 .B`B/"(L" E43TLN5$]+9W0 .B`B M/B(L" E43TLN5$]+;&4 .B`B/#TB+`H)5$]++E1/2V=E(#H (CX](BP*"51/ M2RY43TME<75A;"`Z("(]/2(L" E43TLN5$]+;F]T97%U86P .B`B(3TB+`H) M5$]++E1/2VED96YT:71Y(#H (CT]/2(L" E43TLN5$]+;F]T:61E;G1I='D M.B`B(3T](BP*"51/2RY43TMI;F1E>"`Z(");72(L" H)+R\ 3D-%1R!F;&]A M=&EN9R!P;VEN="!C;VUP87)E<PH)+R\ (3P^/2` ("` /#X ("` /#X]("` M("$^("` ("`A/CT ("`A/"` ("` (3P]("` (3P^" E43TLN5$]+=6YO<F0 M.B`B(3P^/2(L" E43TLN5$]+=64 .B`B(3P^(BP*"51/2RY43TML9R`Z("(\ M/B(L" E43TLN5$]+;&5G(#H (CP^/2(L" E43TLN5$]+=6QE(#H (B$^(BP* M"51/2RY43TMU;"`Z("(A/CTB+`H)5$]++E1/2W5G92`Z("(A/"(L" E43TLN M5$]+=6< .B`B(3P](BP*" E43TLN5$]+<VAL(#H (CP\(BP*"51/2RY43TMS M:'( .B`B/CXB+`H)5$]++E1/2W-H;&%S<R`Z("(\/#TB+`H)5$]++E1/2W-H M<F%S<R`Z("(^/CTB+`H)5$]++E1/2W5S:'( .B`B/CX^(BP*"51/2RY43TMU M<VAR87-S(#H (CX^/CTB+`H)5$]++E1/2V-A="`Z(")^(BP*"51/2RY43TMC M871A<W, .B`B?CTB+`DO+R!^('X]" E43TLN5$]+861D(#H (BLB+`H)5$]+ M+E1/2VUI;B`Z("(M(BP*"51/2RY43TMA9&1A<W, .B`B*STB+`H)5$]++E1/ M2VUI;F%S<R`Z("(M/2(L" E43TLN5$]+;75L(#H (BHB+`H)5$]++E1/2V1I M=B`Z("(O(BP*"51/2RY43TMM;V0 .B`B)2(L" E43TLN5$]+;75L87-S(#H M(BH](BP*"51/2RY43TMD:79A<W, .B`B+STB+`H)5$]++E1/2VUO9&%S<R`Z M("(E/2(L" E43TLN5$]+86YD(#H (B8B+`H)5$]++E1/2V]R(#H (GPB+`H) M5$]++E1/2WAO<B`Z(")>(BP*"51/2RY43TMA;F1A<W, .B`B)CTB+`H)5$]+ M+E1/2V]R87-S(#H (GP](BP*"51/2RY43TMX;W)A<W, .B`B7CTB+`H)5$]+ M+E1/2V%S<VEG;B`Z("(](BP*"51/2RY43TMN;W0 .B`B(2(L" E43TLN5$]+ M=&EL9&4 .B`B?B(L" E43TLN5$]+<&QU<W!L=7, .B`B*RLB+`H)5$]++E1/ M2VUI;G5S;6EN=7, .B`B+2TB+`H)5$]++E1/2V1O="`Z("(N(BP*"51/2RY4 M3TMA<G)O=R`Z("(M/B(L" E43TLN5$]+8V]M;6$ .B`B+"(L" E43TLN5$]+ M<75E<W1I;VX .B`B/R(L" E43TLN5$]+86YD86YD(#H (B8F(BP*"51/2RY4 M3TMO<F]R(#H (GQ\(BP*" DO+R!.=6UE<FEC(&QI=&5R86QS" E43TLN5$]+ M:6YT,S)V(#H M"51/2RY43TMI;G0V-'8 .B`B:6YT-C1V(BP 5$]++E1/2W5N<S8T=B`Z(")U M;G,V-'8B+`H)5$]++E1/2V9L;V%T,S)V(#H (F9L;V%T,S)V(BP 5$]++E1/ M2V9L;V%T-C1V(#H M(BP 5$]++E1/2VEM86=I;F%R>38T=B`Z(")I;6%G:6YA<GDV-'8B+"!43TLN M;VYS=&%N=',*"51/2RY43TMC:&%R=B`Z(")C:&%R=B(L(%1/2RY43TMW8VAA M<G8 .B`B=V-H87)V(BP 5$]++E1/2V1C:&%R=B`Z(")D8VAA<G8B+`H*"2\O M($QE868 ;W!E<F%T;W)S" E43TLN5$]+:61E;G1I9FEE<B`Z(")I9&5N=&EF M:65R(BP)5$]++E1/2W-T<FEN9R`Z(")S=')I;F<B+`H)5$]++E1/2W1H:7, M.B`B=&AI<R(L"51/2RY43TMS=7!E<B`Z(")S=7!E<B(L" H)+R\ 0F%S:6, M='EP97,*"51/2RY43TMV;VED(#H M8GET92(L(%1/2RY43TMU;G,X(#H (G5B>71E(BP*"51/2RY43TMI;G0Q-B`Z M(")S:&]R="(L(%1/2RY43TMU;G,Q-B`Z(")U<VAO<G0B+`H)5$]++E1/2VEN M;G0V-"`Z(")L;VYG(BP 5$]++E1/2W5N<S8T(#H (G5L;VYG(BP*"51/2RY4 M,S( .B`B:69L;V%T(BP 5$]++E1/2VEM86=I;F%R>38T(#H (FED;W5B;&4B M(F-H87(B+"!43TLN5$]+=V-H87( .B`B=V-H87(B+"!43TLN5$]+9&-H87( M.B`B9&-H87(B+"!43TLN5$]+8FET(#H (F)I="(L" H)+R\ 06=G<F5G871E M<PH)5$]++E1/2W-T<G5C="`Z(")S=')U8W0B+"!43TLN5$]+8VQA<W, .B`B M8VQA<W,B+"!43TLN5$]+:6YT97)F86-E(#H (FEN=&5R9F%C92(L(%1/2RY4 M3TMU;FEO;B`Z(")U;FEO;B(L(%1/2RY43TME;G5M(#H (F5N=6TB+"!43TLN M5$]+:6UP;W)T(#H (FEM<&]R="(L" E43TLN5$]+='EP961E9B`Z(")T>7!E M9&5F(BP 5$]++E1/2V%L:6%S(#H (F%L:6%S(BP 5$]++E1/2V]V97)R:61E M(#H (F]V97)R:61E(BP 5$]++E1/2V1E;&5G871E(#H (F1E;&5G871E(BP M5$]++E1/2V9U;F-T:6]N(#H (F9U;F-T:6]N(BP*"51/2RY43TMM:7AI;B`Z M(")M:7AI;B(L" H)5$]++E1/2V%L:6=N(#H (F%L:6=N(BP 5$]++E1/2V5X M=&5R;B`Z(")E>'1E<FXB+"!43TLN5$]+<')I=F%T92`Z(")P<FEV871E(BP M5$]++E1/2W!R;W1E8W1E9"`Z(")P<F]T96-T960B+"!43TLN5$]+<'5B;&EC M(#H (G!U8FQI8R(L(%1/2RY43TME>'!O<G0 .B`B97AP;W)T(BP*"51/2RY4 M3TMS=&%T:6, .B`B<W1A=&EC(BP +RI43TLN5$]+=FER='5A;"`Z(")V:7)T M=6%L(BPJ+R!43TLN5$]+9FEN86P .B`B9FEN86PB+"!43TLN5$]+8V]N<W0 M.B`B8V]N<W0B+"!43TLN5$]+86)S=')A8W0 .B`B86)S=')A8W0B+"!43TLN M5$]+=F]L871I;&4 .B`B=F]L871I;&4B+`H)5$]++E1/2V1E8G5G(#H (F1E M8G5G(BP 5$]++E1/2V1E<')E8V%T960 .B`B9&5P<F5C871E9"(L(%1/2RY4 M3TMI;B`Z(")I;B(L(%1/2RY43TMO=70 .B`B;W5T(BP 5$]++E1/2VEN;W5T M(#H (FEN;W5T(BP*"51/2RY43TMA=71O(#H (F%U=&\B+"!43TLN5$]+<&%C M:V%G92`Z(")P86-K86=E(BP*" DO+R!3=&%T96UE;G1S" E43TLN5$]+:68 M.B`B:68B+"!43TLN5$]+96QS92`Z(")E;'-E(BP 5$]++E1/2W=H:6QE(#H M(G=H:6QE(BP 5$]++E1/2V9O<B`Z(")F;W(B+"!43TLN5$]+9&\ .B`B9&\B M+"!43TLN5$]+<W=I=&-H(#H (G-W:71C:"(L" E43TLN5$]+8V%S92`Z(")C M87-E(BP 5$]++E1/2V1E9F%U;'0 .B`B9&5F875L="(L(%1/2RY43TMB<F5A M:R`Z(")B<F5A:R(L(%1/2RY43TMC;VYT:6YU92`Z(")C;VYT:6YU92(L(%1/ M2RY43TMW:71H(#H (G=I=& B+`H)5$]++E1/2W-Y;F-H<F]N:7IE9"`Z(")S M>6YC:')O;FEZ960B+"!43TLN5$]+<F5T=7)N(#H (G)E='5R;B(L(%1/2RY4 M3TMG;W1O(#H (F=O=&\B+"!43TLN5$]+=')Y(#H (G1R>2(L(%1/2RY43TMC M871C:"`Z(")C871C:"(L(%1/2RY43TMF:6YA;&QY(#H (F9I;F%L;'DB+`H) M5$]++E1/2V%S;2`Z(")A<VTB+"!43TLN5$]+9F]R96%C:"`Z(")F;W)E86-H M5$]+:6YV87)I86YT(#H (FEN=F%R:6%N="(L" H)+R\ 5&5S=&EN9PH)5$]+ M+E1/2W5N:71T97-T(#H (G5N:71T97-T(BP*73L*"B\O(%1H92!$(&QA;F=U M86=E(&QE>&5R("AT;VME;FDZ"F-L87-S($1,97AE<B![" D)<W1A=&EC(%1/ M2UMC:&%R6UU="6ME>7=O<F1S.PH)"2\O($EN:71I86QI>F4 =&AE(&ME>7=O M<F0M/G1O:V5N=F%L=64 04$Z" D)<W1A=&EC('1H:7,H*2![" D)"2\O($%D M9"!A;&P =&AE(&ME>7=O<F1S)R!V86QU97, :6YT;R!T:&4 04$Z" D)"6ME M>7=O<F1S6R)T:&ES(ET /2!43TLN5$]+=&AI<SL*"0D):V5Y=V]R9'-;(G-U M<&5R(ET /2!43TLN5$]+<W5P97([" D)"6ME>7=O<F1S6R)A<W-E<G0B72`] M(%1/2RY43TMA<W-E<G0[" D)"6ME>7=O<F1S6R)N=6QL(ET /2!43TLN5$]+ M;G5L;#L*"0D):V5Y=V]R9'-;(G1R=64B72`](%1/2RY43TMT<G5E.PH)"0EK M97EW;W)D<ULB9F%L<V4B72`](%1/2RY43TMF86QS93L*"0D):V5Y=V]R9'-; M(F-A<W0B72`](%1/2RY43TMC87-T.PH)"0EK97EW;W)D<ULB;F5W(ET /2!4 M3TLN5$]+;F5W.PH)"0EK97EW;W)D<ULB9&5L971E(ET /2!43TLN5$]+9&5L M971E.PH)"0EK97EW;W)D<ULB=&AR;W<B72`](%1/2RY43TMT:')O=SL*"0D) M:V5Y=V]R9'-;(FUO9'5L92)=(#T 5$]++E1/2VUO9'5L93L*"0D):V5Y=V]R M9'-;(G!R86=M82)=(#T 5$]++E1/2W!R86=M83L*"0D):V5Y=V]R9'-;(G1Y M<&5O9B)=(#T 5$]++E1/2W1Y<&5O9CL*"0D):V5Y=V]R9'-;(G1Y<&5I9")= M(#T 5$]++E1/2W1Y<&5I9#L*"0D)" D)"6ME>7=O<F1S6R)T96UP;&%T92)= M(#T 5$]++E1/2W1E;7!L871E.PH)"0EK97EW;W)D<ULB:6YS=&%N8V4B72`] M(%1/2RY43TMI;G-T86YC93L*"0D)" D)"6ME>7=O<F1S6R)V;VED(ET /2!4 M3TLN5$]+=F]I9#L*"0D):V5Y=V]R9'-;(F)Y=&4B72`](%1/2RY43TMI;G0X M.PH)"0EK97EW;W)D<ULB=6)Y=&4B72`](%1/2RY43TMU;G,X.PH)"0EK97EW M;W)D<ULB<VAO<G0B72`](%1/2RY43TMI;G0Q-CL*"0D):V5Y=V]R9'-;(G5S M:&]R=")=(#T 5$]++E1/2W5N<S$V.PH)"0EK97EW;W)D<ULB:6YT(ET /2!4 M3TLN5$]+:6YT,S([" D)"6ME>7=O<F1S6R)U:6YT(ET /2!43TLN5$]+=6YS M,S([" D)"6ME>7=O<F1S6R)L;VYG(ET /2!43TLN5$]+:6YT-C0[" D)"6ME M>7=O<F1S6R)U;&]N9R)=(#T 5$]++E1/2W5N<S8T.PH)"0EK97EW;W)D<ULB M(ET /2!43TLN5$]+9FQO870V-#L*"0D):V5Y=V]R9'-;(G)E86PB72`](%1/ M2V)I=#L*"0D):V5Y=V]R9'-;(F-H87(B72`](%1/2RY43TMC:&%R.PH)"0EK M97EW;W)D<ULB=V-H87(B72`](%1/2RY43TMW8VAA<CL*"0D):V5Y=V]R9'-; M(F1C:&%R(ET /2!43TLN5$]+9&-H87([" D)"0H)"0EK97EW;W)D<ULB:69L M;V%T(ET /2!43TLN5$]+:6UA9VEN87)Y,S([" D)"6ME>7=O<F1S6R)I9&]U M8FQE(ET /2!43TLN5$]+:6UA9VEN87)Y-C0[" D)"6ME>7=O<F1S6R)I<F5A M;")=(#T 5$]++E1/2VEM86=I;F%R>3 P.PH)"0D*"0D):V5Y=V]R9'-;(F-F M;&]A=")=(#T 5$]++E1/2V-O;7!L97 S,CL*"0D):V5Y=V]R9'-;(F-D;W5B M;&4B72`](%1/2RY43TMC;VUP;&5X-C0[" D)"6ME>7=O<F1S6R)C<F5A;")= M(#T 5$]++E1/2V-O;7!L97 X,#L*"0D)" D)"6ME>7=O<F1S6R)D96QE9V%T M92)=(#T 5$]++E1/2V1E;&5G871E.PH)"0EK97EW;W)D<ULB9G5N8W1I;VXB M72`](%1/2RY43TMF=6YC=&EO;CL*"0D)" D)"6ME>7=O<F1S6R)I<R)=(#T M5$]++E1/2VED96YT:71Y.PH)"0EK97EW;W)D<ULB:68B72`](%1/2RY43TMI M9CL*"0D):V5Y=V]R9'-;(F5L<V4B72`](%1/2RY43TME;'-E.PH)"0EK97EW M;W)D<ULB=VAI;&4B72`](%1/2RY43TMW:&EL93L*"0D):V5Y=V]R9'-;(F9O M<B)=(#T 5$]++E1/2V9O<CL*"0D):V5Y=V]R9'-;(F1O(ET /2!43TLN5$]+ M9&\[" D)"6ME>7=O<F1S6R)S=VET8V B72`](%1/2RY43TMS=VET8V [" D) M"6ME>7=O<F1S6R)C87-E(ET /2!43TLN5$]+8V%S93L*"0D):V5Y=V]R9'-; M(F1E9F%U;'0B72`](%1/2RY43TMD969A=6QT.PH)"0EK97EW;W)D<ULB8G)E M86LB72`](%1/2RY43TMB<F5A:SL*"0D):V5Y=V]R9'-;(F-O;G1I;G5E(ET M/2!43TLN5$]+8V]N=&EN=64[" D)"6ME>7=O<F1S6R)S>6YC:')O;FEZ960B M72`](%1/2RY43TMS>6YC:')O;FEZ960[" D)"6ME>7=O<F1S6R)R971U<FXB M72`](%1/2RY43TMR971U<FX[" D)"6ME>7=O<F1S6R)G;W1O(ET /2!43TLN M5$]+9V]T;SL*"0D):V5Y=V]R9'-;(G1R>2)=(#T 5$]++E1/2W1R>3L*"0D) M:V5Y=V]R9'-;(F-A=&-H(ET /2!43TLN5$]+8V%T8V [" D)"6ME>7=O<F1S M6R)F:6YA;&QY(ET /2!43TLN5$]+9FEN86QL>3L*"0D):V5Y=V]R9'-;(G=I M=& B72`](%1/2RY43TMW:71H.PH)"0EK97EW;W)D<ULB87-M(ET /2!43TLN M5$]+87-M.PH)"0EK97EW;W)D<ULB9F]R96%C:")=(#T 5$]++E1/2V9O<F5A M8V [" D)"0H)"0EK97EW;W)D<ULB<W1R=6-T(ET /2!43TLN5$]+<W1R=6-T M.PH)"0EK97EW;W)D<ULB8VQA<W,B72`](%1/2RY43TMC;&%S<SL*"0D):V5Y M=V]R9'-;(FEN=&5R9F%C92)=(#T 5$]++E1/2VEN=&5R9F%C93L*"0D):V5Y M=V]R9'-;(G5N:6]N(ET /2!43TLN5$]+=6YI;VX[" D)"6ME>7=O<F1S6R)E M;G5M(ET /2!43TLN5$]+96YU;3L*"0D):V5Y=V]R9'-;(FEM<&]R=")=(#T M5$]++E1/2VEM<&]R=#L*"0D):V5Y=V]R9'-;(FUI>&EN(ET /2!43TLN5$]+ M;6EX:6X[" D)"6ME>7=O<F1S6R)S=&%T:6,B72`](%1/2RY43TMS=&%T:6,[ M" D)"2\J:V5Y=V]R9'-;(G9I<G1U86PB72`](%1/2RY43TMV:7)T=6%L.RHO M" D)"6ME>7=O<F1S6R)F:6YA;")=(#T 5$]++E1/2V9I;F%L.PH)"0EK97EW M;W)D<ULB8V]N<W0B72`](%1/2RY43TMC;VYS=#L*"0D):V5Y=V]R9'-;(G1Y M<&5D968B72`](%1/2RY43TMT>7!E9&5F.PH)"0EK97EW;W)D<ULB86QI87,B M72`](%1/2RY43TMA;&EA<SL*"0D):V5Y=V]R9'-;(F]V97)R:61E(ET /2!4 M3TLN5$]+;W9E<G)I9&4[" D)"6ME>7=O<F1S6R)A8G-T<F%C=")=(#T 5$]+ M+E1/2V%B<W1R86-T.PH)"0EK97EW;W)D<ULB=F]L871I;&4B72`](%1/2RY4 M3TMV;VQA=&EL93L*"0D):V5Y=V]R9'-;(F1E8G5G(ET /2!43TLN5$]+9&5B M=6<[" D)"6ME>7=O<F1S6R)D97!R96-A=&5D(ET /2!43TLN5$]+9&5P<F5C M871E9#L*"0D):V5Y=V]R9'-;(FEN(ET /2!43TLN5$]+:6X[" D)"6ME>7=O M<F1S6R)O=70B72`](%1/2RY43TMO=70[" D)"6ME>7=O<F1S6R)I;F]U=")= M(#T 5$]++E1/2VEN;W5T.PH)"0EK97EW;W)D<ULB875T;R)=(#T 5$]++E1/ M2V%U=&\[" D)"0H)"0EK97EW;W)D<ULB86QI9VXB72`](%1/2RY43TMA;&EG M;CL*"0D):V5Y=V]R9'-;(F5X=&5R;B)=(#T 5$]++E1/2V5X=&5R;CL*"0D) M:V5Y=V]R9'-;(G!R:79A=&4B72`](%1/2RY43TMP<FEV871E.PH)"0EK97EW M;W)D<ULB<&%C:V%G92)=(#T 5$]++E1/2W!A8VMA9V4[" D)"6ME>7=O<F1S M6R)P<F]T96-T960B72`](%1/2RY43TMP<F]T96-T960[" D)"6ME>7=O<F1S M6R)P=6)L:6,B72`](%1/2RY43TMP=6)L:6,[" D)"6ME>7=O<F1S6R)E>'!O M<G0B72`](%1/2RY43TME>'!O<G0[" D)"0H)"0EK97EW;W)D<ULB8F]D>2)= M(#T 5$]++E1/2V)O9'D[" D)"6ME>7=O<F1S6R)I;G9A<FEA;G0B72`](%1/ M2RY43TMI;G9A<FEA;G0[" D)"6ME>7=O<F1S6R)U;FET=&5S=")=(#T 5$]+ M+E1/2W5N:71T97-T.PH)"0EK97EW;W)D<ULB=F5R<VEO;B)=(#T 5$]++E1/ M2W9E<G-I;VX[" D)?0H)" EP<FEV871E. H)"6-H87);70EF:6QE.PD)+R\ M5&AE(&EN<'5T(&9I;&4*"0EU:6YT"7`["0D)+R\ 0W5R<F5N="!C:&%R86-T M97(*" EP=6)L:6,Z" D)+R\ 26YI=&EA;&EZ92!T:&4 ;&5X97( =VET:"!T M:&4 9G5L;"!S;W5R8V4 8V]D92!A<R!A('-T<FEN9SH*"0ET:&ES*&-H87); M72!F*2![" D)"69I;&4 /2!F.PH)"0EP(#T ,#L*"0E]" H)"2\O(%1/1$\Z M" D)8VAA<EM="7=Y<VEW>6=3=')I;F<H*2![" D)"7)E='5R;B!N=6QL.PH) M"7T*" D)+R\ 5$]$3SH*"0EC:&%R6UT):&5X4W1R:6YG*"D >PH)"0ER971U M<FX ;G5L;#L*"0E]" H)"2\O(%1H:7, 9G5N8W1I;VX 8V]N<W5M97, 82!F M=6QL($0 ;&%N9W5A9V4 =&]K96X 86YD(')E='5R;G, :70 :6X =&AE('-T M<G5C='5R92!4;VME;CH*"0DO+R!N=6QL(&ES(')E='5R;F5D(&EF('1H92!E M;F0 ;V8 =&AE(&9I;&4 :7, <F5A8VAE9"X*"0E4;VME;BH);F5X=%1O:V5N M*"D >PH)"0E4;VME;BH)<F5T=&]K(#T ;F5W(%1O:V5N.PH)"0EU:6YT"7-T M87)T.PH*"0D)<F5T=&]K+FED96YT(#T ;G5L;#L*"0D)<F5T=&]K+G1O:V5N M(#T 5$]++E1/2VED96YT:69I97([" H)"0DO+R!087-T('1H92!E;F0 ;V8 M9FEL93\ 4F5T=7)N(&$ ;G5L;"!T;VME;CH*"0D):68 *'` /CT 9FEL92YL M96YG=& I(')E='5R;B!N=6QL.PH*"0D)+R\ 4F5A9"!U<"!T;R!T:&4 ;F5X M="!W:&ET92US<&%C92!C:&%R. H)"0EW:&EL92`H<"`\(&9I;&4N;&5N9W1H M*2![" D)"0ES=VET8V *&9I;&5;<%TI('L*"0D)"0EC87-E("< )RP )UQN M)RP )UQR)RP )UQV)RP )UQT)RP )UQF)SH*"0D)"0D)*RMP.PH)"0D)"0EB M<F5A:SL*" D)"0D)8V%S92`G+B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I M;&5;<%T /3T )RXG*2![" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL95MP M72`]/2`G+B<I('L*"0D)"0D)"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O:V5N M(#T 5$]++E1/2V1O=&1O=&1O=#L*"0D)"0D)"7T 96QS90H)"0D)"0D)"7)E M='1O:RYT;VME;B`](%1/2RY43TMS;&EC93L*"0D)"0D)?2!E;'-E" D)"0D) M"0ER971T;VLN=&]K96X /2!43TLN5$]+9&]T.PH)"0D)"0ER971U<FX <F5T M=&]K.PH)"0D)"0EB<F5A:SL*" D)"0D)8V%S92`G)B<Z" D)"0D)"2LK<#L* M"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D) M"0ER971T;VLN=&]K96X /2!43TLN5$]+86YD87-S.PH)"0D)"0E](&5L<V4 M:68 *&9I;&5;<%T /3T )R8G*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T M;VLN=&]K96X /2!43TLN5$]+86YD86YD.PH)"0D)"0E](&5L<V4*"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMA;F0[" D)"0D)"7)E='5R;B!R971T M;VL[" H)"0D)"6-A<V4 )WPG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE M6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N M(#T 5$]++E1/2V]R87-S.PH)"0D)"0E](&5L<V4 :68 *&9I;&5;<%T /3T M)WPG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN M5$]+;W)O<CL*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!4 M3TLN5$]+;W([" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 )RTG M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D) M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUI;F%S<SL* M"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<M)RD >PH)"0D)"0D)*RMP M.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUI;G5S;6EN=7,[" D) M"0D)"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUI;CL* M"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G*R<Z" D)"0D)"2LK M<#L*"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D) M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+861D87-S.PH)"0D)"0E](&5L M<V4 :68 *&9I;&5;<%T /3T )RLG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER M971T;VLN=&]K96X /2!43TLN5$]+<&QU<W!L=7,[" D)"0D)"7T 96QS90H) M"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%D9#L*"0D)"0D)<F5T=7)N M(')E='1O:SL*" D)"0D)8V%S92`G/2<Z" D)"0D)"2LK<#L*"0D)"0D):68 M*&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL M95MP72`]/2`G/2<I('L*"0D)"0D)"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O M:V5N(#T 5$]++E1/2VED96YT:71Y.PH)"0D)"0D)?2!E;'-E" D)"0D)"0D) M<F5T=&]K+G1O:V5N(#T 5$]++E1/2V5Q=6%L.PH)"0D)"0E](&5L<V4*"0D) M"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMA<W-I9VX[" D)"0D)"7)E='5R M;B!R971T;VL[" H)"0D)"6-A<V4 )SPG. H)"0D)"0DK*W`[" D)"0D)"6EF M("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K M+G1O:V5N(#T 5$]++E1/2VQE.PD)"2\O(#P]" D)"0D)"7T 96QS92!I9B`H M9FEL95MP72`]/2`G/"<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE M6W!=(#T]("<])RD >PH)"0D)"0D)"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K M96X /2!43TLN5$]+<VAL87-S.PD)+R\ /#P]" D)"0D)"0E](&5L<V4*"0D) M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+<VAL.PD)+R\ /#P*"0D)"0D) M?2!E;'-E(&EF("AF:6QE6W!=(#T]("<^)RD >PH)"0D)"0D)*RMP.PH)"0D) M"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D)*RMP.PH)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TML96<["0DO+R`\/CT*"0D)"0D)"7T M96QS90H)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML9SL)"2\O(#P^ M" D)"0D)"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VQT M.PD)"2\O(#P*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G/B<Z M" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D) M"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+9V4["0D)+R\ M/CT*"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<^)RD >PH)"0D)"0D) M*RMP.PH)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D)*RMP M.PH)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMS:')A<W,["0DO+R`^ M/CT*"0D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G/B<I('L*"0D)"0D) M"0DK*W`[" D)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D) M"2LK<#L*"0D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W5S:')A<W,[ M"2\O(#X^/CT*"0D)"0D)"0E](&5L<V4*"0D)"0D)"0D)<F5T=&]K+G1O:V5N M(#T 5$]++E1/2W5S:'(["0DO+R`^/CX*"0D)"0D)"7T 96QS90H)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMS:'(["0DO+R`^/ H)"0D)"0E](&5L M<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMG=#L)"0DO+R`^" D) M"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 )R$G. H)"0D)"0DK*W`[ M" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D) M"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D)*RMP.PH)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMN;W1I9&5N=&ET>3L)+R\ (3T]" D) M"0D)"0E](&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;F]T M97%U86P["0DO+R`A/0H)"0D)"0E](&5L<V4 :68 *&9I;&5;<%T /3T )SPG M*2![" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL95MP72`]/2`G/B<I('L* M"0D)"0D)"0DK*W`[" D)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D) M"0D)"0D)"2LK<#L*"0D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W5N M;W)D.R`O+R`A/#X]" D)"0D)"0D)?2!E;'-E" D)"0D)"0D)"7)E='1O:RYT M;VME;B`](%1/2RY43TMU93L)+R\ (3P^" D)"0D)"0E](&5L<V4 :68 *&9I M;&5;<%T /3T )STG*2![" D)"0D)"0D)*RMP.PH)"0D)"0D)"7)E='1O:RYT M;VME;B`](%1/2RY43TMU9SL)+R\ (3P]" D)"0D)"0E](&5L<V4*"0D)"0D) M"0ER971T;VLN=&]K96X /2!43TLN5$]+=6=E.PDO+R`A/`H)"0D)"0E](&5L M<V4 :68 *&9I;&5;<%T /3T )SXG*2![" D)"0D)"0DK*W`[" D)"0D)"0EI M9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"0DK*W`[" D)"0D)"0D)<F5T M=&]K+G1O:V5N(#T 5$]++E1/2W5L.PDO+R`A/CT*"0D)"0D)"7T 96QS90H) M"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMU;&4["2\O("$^" D)"0D) M"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VYO=#L)"2\O M("$*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G*B<Z" D)"0D) M"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[ M" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;75L87-S.PH)"0D)"0E] M(&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM=6P[" D)"0D) M"7)E='5R;B!R971T;VL[" D)"0D)8V%S92`G)2<Z" D)"0D)"2LK<#L*"0D) M"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER M971T;VLN=&]K96X /2!43TLN5$]+;6]D87-S.PH)"0D)"0E](&5L<V4*"0D) M"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM;V0[" D)"0D)"7)E='5R;B!R M971T;VL[" D)"0D)8V%S92`G7B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I M;&5;<%T /3T )STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K M96X /2!43TLN5$]+>&]R87-S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O M:RYT;VME;B`](%1/2RY43TMX;W([" D)"0D)"7)E='5R;B!R971T;VL[" D) M"0D)8V%S92`G?B<Z" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T /3T M)STG*2![" D)"0D)"0DK*W`[" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN M5$]+8V%T87-S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`] M(%1/2RY43TMT:6QD93L*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S M92`G*"<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2VQP87)E;CL <F5T M=7)N(')E='1O:SL*"0D)"0EC87-E("<I)SH *RMP.R!R971T;VLN=&]K96X M/2!43TLN5$]+<G!A<F5N.R!R971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )ULG M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("==)RD >PH)"0D) M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%R<F%Y.PH) M"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML8G)A M8VME=#L*"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0EC87-E("==)SH *RMP M.R!R971T;VLN=&]K96X /2!43TLN5$]+<F)R86-K970[(')E='5R;B!R971T M;VL[" D)"0D)8V%S92`G>R<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/ M2VQC=7)L>3L <F5T=7)N(')E='1O:SL*"0D)"0EC87-E("=])SH *RMP.R!R M971T;VLN=&]K96X /2!43TLN5$]+<F-U<FQY.R!R971U<FX <F5T=&]K.PH) M"0D)"6-A<V4 )SHG.B`K*W`[(')E='1O:RYT;VME;B`](%1/2RY43TMC;VQO M;CL <F5T=7)N(')E='1O:SL*"0D)"0EC87-E("<[)SH *RMP.R!R971T;VLN M=&]K96X /2!43TLN5$]+<V5M:6-O;&]N.R!R971U<FX <F5T=&]K.PH)"0D) M"6-A<V4 )S\G.B`K*W`[(')E='1O:RYT;VME;B`](%1/2RY43TMQ=65S=&EO M;CL <F5T=7)N(')E='1O:SL*"0D)"0EC87-E("<L)SH *RMP.R!R971T;VLN M=&]K96X /2!43TLN5$]+8V]M;6$[(')E='5R;B!R971T;VL[" H)"0D)"6-A M<V4 )R\G. H)"0D)"0DK*W`[" D)"0D)"7-W:71C:"`H9FEL95MP72D >PH) M"0D)"0D)8V%S92`G/2<Z" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/ M2V1I=F%S<SL*"0D)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0D)"6-A<V4 M)R\G. H)"0D)"0D)"2\O('-I;F=L92UL:6YE("\O(&-O;6UE;G0Z" D)"0D) M"0D)*RMP.PH)"0D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D) M"0D)"0D):68 *&9I;&5;<%T /3T )UQN)RD 8G)E86L[" D)"0D)"0D)"2LK M<#L*"0D)"0D)"0E]" D)"0D)"0D)8G)E86L[" H)"0D)"0D)8V%S92`G*R<Z M9&4 8V]M;65N="`O*SH*"0D)"0D)"0DK*W`[" D)"0D)"0D)=VAI;&4 *'` M/"!F:6QE+FQE;F=T:"D >PH)"0D)"0D)"0EI9B`H9FEL95MP72`]/2`G*R<I M('L*"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"6EF("AF:6QE6W!=(#T]("<O M)RD >PH)"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"0DM+6YE<W0[" D)"0D) M"0D)"0D):68 *&YE<W0 /"`P*2!B<F5A:SL*"0D)"0D)"0D)"7T*"0D)"0D) M"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<O)RD >PH)"0D)"0D)"0D)*RMP M.PH)"0D)"0D)"0D):68 *&9I;&5;<%T /3T )RLG*2![" D)"0D)"0D)"0D) M*RMP.PH)"0D)"0D)"0D)"2LK;F5S=#L*"0D)"0D)"0D)"7T*"0D)"0D)"0D) M?2!E;'-E("LK<#L*"0D)"0D)"0E]" D)"0D)"0D)8G)E86L[" D)"0D)"0E] M" H)"0D)"0D)8V%S92`G*B<Z" D)"0D)"0D)+R\ ;75L=&DM;&EN92!C;VUM M96YT("\J. H)"0D)"0D)"2LK<#L*"0D)"0D)"0EW:&EL92`H<"`\(&9I;&4N M;&5N9W1H*2![" D)"0D)"0D)"6EF("AF:6QE6W!=(#T]("<J)RD >PH)"0D) M"0D)"0D)*RMP.PH)"0D)"0D)"0D):68 *&9I;&5;<%T /3T )R\G*2![" D) M"0D)"0D)"0D)*RMP.PH)"0D)"0D)"0D)"6)R96%K.PH)"0D)"0D)"0D)?0H) M"0D)"0D)"0E](&5L<V4 *RMP.PH)"0D)"0D)"7T*"0D)"0D)"0EB<F5A:SL* M" D)"0D)"0ED969A=6QT. H)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY4 M3TMD:78[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)?0H)"0D)"0EB M<F5A:SL*" D)"0D)8V%S92`G7"<G.B![" D)"0D)"6-H87);70ET;VL[" D) M"0D)"79E<G-I;VX *&EN=&5R<')E=%]S;&%S:&5S*2![" D)"0D)"0DO+R!) M;G1E<G!R970 =&AE(&5S8V%P960 8VAA<F%C=&5R<R!A;F0 :6YS97)T('1H M96TZ" D)"0D)"0DK*W`[" D)"0D)"0EI9B`H9FEL95MP72`]/2`G7%PG*2![ M"7-W:71C:"`H9FEL95MP72D >PH)"0D)"0D)"0EC87-E("=N)SH =&]K6S!= M(#T )UQN)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 )W(G.B!T;VM;,%T /2`G M7'(G.R!B<F5A:SL*"0D)"0D)"0D)8V%S92`G=B<Z('1O:ULP72`]("=<=B<[ M(&)R96%K.PH)"0D)"0D)"0EC87-E("=T)SH =&]K6S!=(#T )UQT)SL 8G)E M86L[" D)"0D)"0D)"6-A<V4 )V8G.B!T;VM;,%T /2`G7&8G.R!B<F5A:SL* M"0D)"0D)"0D)8V%S92`G7"<G.B!T;VM;,%T /2`G7"<G.R!B<F5A:SL*"0D) M"0D)"0D)8V%S92`G7"(G.B!T;VM;,%T /2`G7"(G.R!B<F5A:SL*"0D)"0D) M"0D)8V%S92`G7%PG.B!T;VM;,%T /2`G7%PG.R!B<F5A:SL*"0D)"0D)"0D) M9&5F875L=#H 8G)E86L[" D)"0D)"0D)?0H)"0D)"0D)"2LK<#L*"0D)"0D) M"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V-H87)V.PH) M"0D)"0D)"7)E='1O:RYI9&5N="`]('1O:SL*"0D)"0D)"0ER971U<FX <F5T M=&]K.PH)"0D)"0D)?2!E;'-E('L*"0D)"0D)"0ET;VLN;&5N9W1H(#T ,3L* M"0D)"0D)"0ET;VM;,%T /2!F:6QE6W!=.PH)"0D)"0D)"2LK<#L*"0D)"0D) M"0DK*W`[" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V-H87)V.PH) M"0D)"0D)"7)E='1O:RYI9&5N="`]('1O:SL*"0D)"0D)"0ER971U<FX <F5T M=&]K.PH)"0D)"0D)?0H)"0D)"0E](&5L<V4 >PH)"0D)"0D)+R\ 2G5S="!C M;W!Y(&]V97( =&AE(&5S8V%P92!S=')I;F=S. H)"0D)"0D)*RMP.PH)"0D) M"0D)<W1A<G0 /2!P.PH)"0D)"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D M>PH)"0D)"0D)"6EF("AF:6QE6W!=(#T]("=<7"<I('L*"0D)"0D)"0D)*RMP M.PH)"0D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G7"<G*2![" D)"0D) M"0D)"6)R96%K.PH)"0D)"0D)"7T*"0D)"0D)"0DK*W`[" D)"0D)"0E]" D) M"0D)"0ER971T;VLN:61E;G0 /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0D) M<F5T=&]K+G1O:V5N(#T 5$]++E1/2V-H87)V.PH)"0D)"0D)*RMP.PH)"0D) M"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)?0H)"0D)"7T*" D)"0D)8V%S92`G M7"(G.B![" D)"0D)"6-H87);70ET;VL[" D)"0D)"79E<G-I;VX *&EN=&5R M<')E=%]S;&%S:&5S*2![" D)"0D)"0DO+R!);G1E<G!R970 =&AE(&5S8V%P M960 8VAA<F%C=&5R<R!A;F0 :6YS97)T('1H96TZ" D)"0D)"0EU:6YT"6P M"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D)"0D)"6EF("AF:6QE M6W!=(#T]("=<7"<I('L*"0D)"0D)"0D)*RMP.PH)"0D)"0D)"0EI9B`H<"`^ M/2!F:6QE+FQE;F=T:"D 8G)E86L[" D)"0D)"0D)"7-W:71C:"`H9FEL95MP M72D >PH)"0D)"0D)"0D)8V%S92`G;B<Z('1O:UML72`]("=<;B<[(&)R96%K M.PH)"0D)"0D)"0D)8V%S92`G<B<Z('1O:UML72`]("=<<B<[(&)R96%K.PH) M"0D)"0D)"0D)8V%S92`G="<Z('1O:UML72`]("=<="<[(&)R96%K.PH)"0D) M"0D)"0D)8V%S92`G=B<Z('1O:UML72`]("=<=B<[(&)R96%K.PH)"0D)"0D) M"0D)8V%S92`G9B<Z('1O:UML72`]("=<9B<[(&)R96%K.PH)"0D)"0D)"0D) M8V%S92`G7"<G.B!T;VM;;%T /2`G7"<G.R!B<F5A:SL*"0D)"0D)"0D)"6-A M<V4 )UPB)SH =&]K6VQ=(#T )UPB)SL 8G)E86L[" D)"0D)"0D)"0EC87-E M("=<7"<Z('1O:UML72`]("=<7"<[(&)R96%K.PH)"0D)"0D)"0D)9&5F875L M=#H*"0D)"0D)"0D)?0H)"0D)"0D)"0DO+R!'<F]W('1H92!T;VME;B!L96YG M=& Z" D)"0D)"0D)"6EF(" K*VP /CT =&]K+FQE;F=T:"D =&]K+FQE;F=T M:"`]('1O:RYL96YG=& *B`R.PH)"0D)"0D)"0DK*W`[" D)"0D)"0D)?2!E M;'-E(&EF("AF:6QE6W!=(#T]("=<(B<I('L*"0D)"0D)"0D)8G)E86L[" D) M"0D)"0D)?2!E;'-E('L*"0D)"0D)"0D)=&]K6VQ=(#T 9FEL95MP73L*"0D) M"0D)"0D)+R\ 1W)O=R!T:&4 =&]K96X ;&5N9W1H. H)"0D)"0D)"0EI9B`H M*RML(#X]('1O:RYL96YG=& I('1O:RYL96YG=& /2!T;VLN;&5N9W1H("H M,CL*"0D)"0D)"0D)*RMP.PH)"0D)"0D)"7T*"0D)"0D)"7T*"0D)"0D)"7)E M='1O:RYT;VME;B`](%1/2RY43TMS=')I;F<[" D)"0D)"0ET;VLN;&5N9W1H M(#T ;#L*"0D)"0D)"7)E='1O:RYI9&5N="`]('1O:SL*"0D)"0D)"2LK<#L* M"0D)"0D)"7)E='5R;B!R971T;VL[" D)"0D)"7T 96QS92![" D)"0D)"0DO M+R!*=7-T(&-O<'D ;W9E<B!T:&4 97-C87!E('-T<FEN9W,Z" D)"0D)"0DK M*W`[" D)"0D)"0ES=&%R="`]('`[" D)"0D)"0EW:&EL92`H<"`\(&9I;&4N M;&5N9W1H*2![" D)"0D)"0D):68 *&9I;&5;<%T /3T )UQ<)RD >PH)"0D) M"0D)"0DK*W`[" D)"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("=<(B<I M('L*"0D)"0D)"0D)8G)E86L[" D)"0D)"0D)?0H)"0D)"0D)"2LK<#L*"0D) M"0D)"7T*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMS=')I;F<[" D) M"0D)"0ER971T;VLN:61E;G0 /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0D) M*RMP.PH)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)?0H)"0D)"7T*" D) M"0D)8V%S92`G<B<Z" D)"0D)"2\O(%=94TE764< <W1R:6YG/PH)"0D)"0DK M*W`[" D)"0D)"6EF("AF:6QE6W!=("$]("=<(B<I('L*"0D)"0D)"2\O($YO M<&4L(&IU<W0 86X :61E;G1I9FEE<CH*"0D)"0D)"7-T87)T(#T M" D)"0D)"0EG;W1O(&-A<V5?:61E;G0[" D)"0D)"7T*"0D)"0D)<F5T=&]K M+G1O:V5N(#T 5$]++E1/2W-T<FEN9SL*"0D)"0D)<F5T=&]K+FED96YT(#T M=WES:7=Y9U-T<FEN9R I.PH)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0EC M87-E("=H)SH*"0D)"0D)+R\ 2$58('-T<FEN9S\*"0D)"0D)*RMP.PH)"0D) M"0EI9B`H9FEL95MP72`A/2`G7"(G*2![" D)"0D)"0ES=&%R="`]('` +2`Q M.PH)"0D)"0D)9V]T;R!C87-E7VED96YT.PH)"0D)"0E]" D)"0D)"7)E='1O M:RYT;VME;B`](%1/2RY43TMS=')I;F<[" D)"0D)"7)E='1O:RYI9&5N="`] M(&AE>%-T<FEN9R I.PH)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0DO+R!) M9&5N=&EF:65R('-T87)T('=I=& 7R!O<B!A+7HL02U:. H)"0D)"6-A<V4 M)V$G+"`G8B<L("=C)RP )V0G+"`G92<L("=F)RP )V<G+"` ("` ("=I)RP M)VHG+"`G:R<L("=L)RP*"0D)"0D)("=M)RP )VXG+"`G;R<L("=P)RP )W$G M+"` ("` ("=S)RP )W0G+"`G=2<L("=V)RP )W<G+"`G>"<L" D)"0D)"2`G M>2<L("=Z)SH*"0D)"0EC87-E("=!)RP )T(G+"`G0R<L("=$)RP )T4G+"`G M1B<L("=')RP )T G+"`G22<L("=*)RP )TLG+"`G3"<L" D)"0D)"2`G32<L M("=.)RP )T\G+"`G4"<L("=1)RP )U(G+"`G4R<L("=4)RP )U4G+"`G5B<L M("=7)RP )U G+`H)"0D)"0D )UDG+"`G6B<L("=?)SH*"0D)"0D)+R\ 4V5T M('1H92!S=&%R=&EN9R!P;VEN="!A="!T:&ES(&-H87)A8W1E<CH*"0D)"0D) M<W1A<G0 /2!P.PH)"0D)"6-A<V5?:61E;G0Z" D)"0D)"2\O($5X=')A8W0 M=&AE(&ED96YT:69I97(Z" D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I M('L*"0D)"0D)"6EF("AI<V%L;G5M*&9I;&5;<%TI('Q\("AF:6QE6W!=(#T] M("=?)RDI" D)"0D)"0D)*RMP.PH)"0D)"0D)96QS90H)"0D)"0D)"6)R96%K M.PH)"0D)"0E]" D)"0D)"2\O($-H96-K<R!F;W( =&AE(&ED96YT:69I97( M:6X =&AE(&ME>7=O<F0 ;&ES="P <F5T=7)N<R!N=6QL(&EF(&YO="!T:&5R M93H*"0D)"0D)8VAA<EM=('1O:R`](&9I;&5;<W1A<G0 +BX <%T[" D)"0D) M"6EF("AT;VL :6X :V5Y=V]R9',I('L*"0D)"0D)"7)E='1O:RYT;VME;B`] M(&ME>7=O<F1S6W1O:UT[" D)"0D)"7T 96QS92![" D)"0D)"0ER971T;VLN M=&]K96X /2!43TLN5$]+:61E;G1I9FEE<CL*"0D)"0D)"7)E='1O:RYI9&5N M="`](&9I;&5;<W1A<G0 +BX <%T[" D)"0D)"7T*"0D)"0D)<F5T=7)N(')E M='1O:SL*" D)"0D)8V%S92`G,"<L("<Q)RP )S(G+"`G,R<L("<T)RP )S4G M+"`G-B<L("<W)RP )S G+"`G.2<Z" D)"0D)"7-T87)T(#T <#L*"0D)"0D) M=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D)"0D):68 *"%I<V%L;G5M M*&9I;&5;<%TI*2!B<F5A:SL*"0D)"0D)"2LK<#L*"0D)"0D)?0H)"0D)"0ER M971T;VLN=&]K96X /2!43TLN5$]+:6YT,S)V.PH)"0D)"0ER971T;VLN:61E M;G0 /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0ER971U<FX <F5T=&]K.PH* M"0D)"0ED969A=6QT. H)"0D)"0DK*W`[" D)"0E]" D)"7T*" D)"7)E='5R M;B!N=6QL.PH)"7T*" D)+R\ 3VYL>2!P965K(&%T('1H92!N97AT('1O:V5N M+"!D;VXG="!C;VYS=6UE(&ET. H)"51O:V5N* EP965K5&]K96XH*2![" D) M"75I;G0)<V%V97` /2!P.PH)"0E4;VME;BH)=&]K(#T ;F5X=%1O:V5N*"D[ M" D)"7` /2!S879E<#L*" D)"7)E='5R;B!T;VL[" D)?0H*"0DO+R!,;V]K M(&9O<B!A;&P 8VQA<W-E<RP :6YT97)F86-E<RP <W1R=6-T<RP =6YI;VYS M+"!E=&,N" D)=F]I9"!G;R I('L*"0D):6YT"0EI;F1E;G0 /2`P.PH*"0D) M* ET;VLL(&YT;VL[" H)"0D)+R\ 1W)A8B!T:&4 ;F5X="!T;VME;B!F<F]M M('1H92!F:6QE+"!A(&YU;&P =&]K96X :7, =&AE(&5N9"!O9B!T:&4 9FEL M93H*"0D)"71O:R`](&YE>'14;VME;B I.PH)"0D):68 *'1O:R!I<R!N=6QL M*2!B<F5A:SL*" D)"0ED96)U9R![" D)"0D)+R\ 5&AI<R!D=6UP<R!O=70 M=&AE('9A<FEO=7, =&]K96YS("AB87-I8V%L;'D <F5F;W)M871S('1H92!S M;W5R8V4I. H)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I M97(I" D)"0D)"7!R:6YT9B B)2XJ<R`B+"!T;VLN:61E;G0I.PH)"0D)"65L M<V4 :68 *'1O:RYT;VME;B`]/2!43TLN5$]+8VAA<G8I" D)"0D)"7!R:6YT M9B B)R4N*G,G("(L('1O:RYI9&5N="D[" D)"0D)96QS92!I9B`H=&]K+G1O M:V5N(#T](%1/2RY43TMS=')I;F<I" D)"0D)"7!R:6YT9B B7"(E+BIS7"( M(BP =&]K+FED96YT*3L*"0D)"0EE;'-E(&EF("AT;VLN=&]K96X /3T 5$]+ M" D)"0D)96QS90H)"0D)"0EP<FEN=&8H(B4N*G, (BP =&]K=&]S=');=&]K M+G1O:V5N72D[" H)"0D)"6YT;VL /2!P965K5&]K96XH*3L*" D)"0D)+R\ M26YD96YT871I;VXZ" D)"0D):68 *"$H;G1O:R!I<R!N=6QL*2D*"0D)"0D) M:68 *'!E96M4;VME;B I+G1O:V5N(#T](%1/2RY43TMR8W5R;'DI" D)"0D) M"0DM+6EN9&5N=#L*" D)"0D):68 *'1O:RYT;VME;B`]/2!43TLN5$]+;&-U M<FQY*2![" D)"0D)"2LK:6YD96YT.PH)"0D)"0EP<FEN=&8H(EQN(BD[" D) M"0D)"69O<B`H:6YT(&D /2`P.R!I(#P :6YD96YT.R`K*VDI('!R:6YT9B B M7'0B*3L*"0D)"0E](&5L<V4 :68 *"AT;VLN=&]K96X /3T 5$]++E1/2W-E M;6EC;VQO;BD ?'P *'1O:RYT;VME;B`]/2!43TLN5$]+<F-U<FQY*2D >PH) M"0D)"0EP<FEN=&8H(EQN(BD[" D)"0D)"69O<B`H:6YT(&D /2`P.R!I(#P M:6YD96YT.R`K*VDI('!R:6YT9B B7'0B*3L*"0D)"0E]" D)"0E](&5L<V4 M>PH)"0D)"2\O(%!A<G-E(&$ ;6]D=6QE. H)"0D)"6EF("AT;VLN=&]K96X M/3T 5$]++E1/2V-L87-S*2![" D)"0D)"0H)"0D)"7T 96QS92!I9B`H=&]K M+G1O:V5N(#T](%1/2RY43TMI;7!O<G0I('L*"0D)"0D)" D)"0D)?2!E;'-E M(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VUO9'5L92D >PH)"0D)"0D*"0D) M"0E]" D)"0E]" D)"7T*"0D)<F5T=7)N.PH)"7T*?0H*+R\ 4VEM<&QE(&UA M:6X <')O9W)A;3H*:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1$QE>&5R M"6QE>#L*"49I;&4)9&9I;&4[" H):68 *&%R9W,N;&5N9W1H(#P M"0EP<FEN=&8H(B4N*G, /&9I;&4N9#Y<;B(L(&%R9W-;,%TI.PH)"7)E='5R M;B`M,3L*"7T*" DO+R!/<&5N('1H92!F:6QE. H)9&9I;&4 /2!N97< 1FEL M92AA<F=S6S%=*3L*"2\O(%-E;F0 :6X =&AE(&)U9F9E<B!T;R!T:&4 ;&5X M97(Z" EC:&%R6UT)<W1R(#T 9&9I;&4N<F5A9%-T<FEN9RAD9FEL92YS:7IE M9FEL92!N;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ` end
Dec 18 2004
Excellent! I shall be checking this out in the new year. :-) Matthew "James Dunne" <jdunne4 bradley.edu> wrote in message news:cq0t39$18b8$1 digitaldaemon.com...Hello all, I thought as a nice Christmas present for you all working so hard on D, I would contribute something some of you might find useful. I've been working hard on a lexer (tokenizer) for the D language. Attached to this post is the lexer module written in D!! I began work on it for code-completion support for my D IDE called Orion (over on dsource.org). Don't bother checking anything out there yet, as its all in ruins right now. ;) I tested this module somewhat, and it successfully lexes its own source code! This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of. Merry Christmas all, enjoy! Regards, James Dunne
Dec 18 2004
"James Dunne" <jdunne4 bradley.edu> wrote in message news:cq0t39$18b8$1 digitaldaemon.com...Hello all, I thought as a nice Christmas present for you all working so hard on D, Iwouldcontribute something some of you might find useful. I've been workinghard on alexer (tokenizer) for the D language. Attached to this post is the lexermodulewritten in D!!Thanks! This is just what of my projects needs. It looks great and looks like it isn't going to be hard to use. You scared me for a moment when i saw TOKdotvar ,TOKdotti, TOKdotexp, and TOKdottype but you don't seem to use them :)I began work on it for code-completion support for my D IDE called Orion(overon dsource.org). Don't bother checking anything out there yet, as its allinruins right now. ;) I tested this module somewhat, and it successfully lexes its own sourcecode!This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of.hooray!Merry Christmas all, enjoy!To you too!Regards, James Dunne
Dec 18 2004
I have updated the dlexer.d module, so please use this version. New features: - line number tracking (line property of DLexer class) - DLexerException class: constructs error message containing filename and current line number - independent module now - more comments! :) TODO: - correct wysiwyg string parsing - correct hex string parsing - correct numeric literal parsing (ints, floats, etc.) I'm glad I could help you all in your project endeavours! If anyone has some extra webspace that they wouldn't mind hosting D code snippets on, please let me know! I've got a bunch of useful ones :) Regards, James Dunne begin 0644 dlexer.d M+R\ 9&QE>&5R("T 1"!L86YG=6%G92!L97AE< T*+R\ *$,I($-O<'ER:6=H M92!T;R!D:7-T<FEB=71E('1H:7, ;6]D=6QE(&EN(&%N>2!F;W)M('EO=2!L M:6ME+B` 22!O;FQY(&%S:R!T:&%T('EO=0T*+R\ 9VEV92!C<F5D:70 =VAE M<F4 8W)E9&ET(&ES(&1U92X (%EO=2!M87D ;6%K92!M;V1I9FEC871I;VYS M<F]V:61E('EO=7( ;6]D:69I8V%T:6]N<R!P=6)L:6-L>2P 8G5T('EO=2!A M"7-T9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T M>7!E.PH-"B\O(%-E="!T:&ES('9E<G-I;VX :61E;G1I9FEE<B!T;R!E;F%B M;&4 :6YT97)P<F5T871I;VX ;V8 97-C87!E9"!C:&%R86-T97)S('=I=&AI M;B!P87)S960 <W1R:6YG<PT*+R\ 268 =&AI<R!I<R!D:7-A8FQE9"P =&AE M('-T<FEN9W, 87)E(&-O<&EE9"!D:7)E8W1L>2P 97-C87!E('-E<75E;F-E M(&9R;VT 1$U$)W, ;&5X97(N:`IE;G5M(%1/2R![" E43TMR97-E<G9E9"P* M" DO+R!/=&AE< H)5$]+;'!A<F5N+`E43TMR<&%R96XL" E43TML8G)A8VME M="P)5$]+<F)R86-K970L" E43TML8W5R;'DL"51/2W)C=7)L>2P*"51/2V-O M;&]N+`E43TMN96<L" E43TMS96UI8V]L;VXL"51/2V1O=&1O=&1O="P*"51/ M2V5O9BP)"51/2V-A<W0L" E43TMN=6QL+`E43TMA<W-E<G0L" E43TMT<G5E M+`E43TMF86QS92P*"51/2V%R<F%Y+`E43TMC86QL+`H)5$]+861D<F5S<RP) M5$]+='EP961O="P*"51/2W1Y<&4L"51/2W1H<F]W+`H)5$]+;F5W+`D)5$]+ M9&5L971E+`H)5$]+<W1A<BP)5$]+<WEM;V9F+`H)5$]+=F%R+`D)5$]+9&]T M=F%R+`H)5$]+9&]T=&DL"51/2V1O=&5X<"P*"51/2V1O='1Y<&4L"51/2W-L M:6-E+`H)5$]+87)R87EL96YG=& L"51/2W9E<G-I;VXL" E43TMM;V1U;&4L M"51/2V1O;&QA<BP*"51/2W1E;7!L871E+`E43TMI;G-T86YC92P*"51/2V1E M8VQA<F%T:6]N+`E43TMT>7!E;V8L" E43TMP<F%G;6$L"51/2V1S>6UB;VPL M" E43TMT>7!E:60L"51/2W5A9&0L" H)+R\ 3W!E<F%T;W)S" E43TML="P) M"51/2V=T+`H)5$]+;&4L"0E43TMG92P*"51/2V5Q=6%L+`E43TMN;W1E<75A M;"P*"51/2VED96YT:71Y+`E43TMN;W1I9&5N=&ET>2P*"51/2VEN9&5X+`H* M(#P^("` (#P^/2` ("`A/B` ("` (3X]("` (3P ("` ("$\/2` ("$\/ H) M5$]+=6YO<F0L5$]+;&<L5$]+;&5G+%1/2W5L92Q43TMU;"Q43TMU9V4L5$]+ M=6<L5$]+=64L" H)5$]+<VAL+`D)5$]+<VAR+`H)5$]+<VAL87-S+`E43TMS M:')A<W,L" E43TMU<VAR+`E43TMU<VAR87-S+`H)5$]+8V%T+`D)5$]+8V%T M87-S+`DO+R!^('X]" E43TMA9&0L"0E43TMM:6XL"0E43TMA9&1A<W,L"51/ M2VUI;F%S<RP*"51/2VUU;"P)"51/2V1I=BP)"51/2VUO9"P*"51/2VUU;&%S M<RP)5$]+9&EV87-S+`E43TMM;V1A<W,L" E43TMA;F0L"0E43TMO<BP)"51/ M2WAO<BP*"51/2V%N9&%S<RP)5$]+;W)A<W,L"51/2WAO<F%S<RP*"51/2V%S M<VEG;BP)5$]+;F]T+`D)5$]+=&EL9&4L" E43TMP;'5S<&QU<RP)5$]+;6EN M=7-M:6YU<RP*"51/2V1O="P)"51/2V%R<F]W+`E43TMC;VUM82P*"51/2W%U M97-T:6]N+`E43TMA;F1A;F0L"51/2V]R;W(L" H)+R\ 3G5M97)I8R!L:71E M<F%L<PH)5$]+:6YT,S)V+"!43TMU;G,S,G8L" E43TMI;G0V-'8L(%1/2W5N M" E43TMI;6%G:6YA<GDS,G8L(%1/2VEM86=I;F%R>38T=BP 5$]+:6UA9VEN M87)V+"!43TMD8VAA<G8L" H)+R\ 3&5A9B!O<&5R871O<G,*"51/2VED96YT M:69I97(L"51/2W-T<FEN9RP*"51/2W1H:7,L"51/2W-U<&5R+`H*"2\O($)A M<VEC('1Y<&5S" E43TMV;VED+`H)5$]+:6YT."P 5$]+=6YS."P*"51/2VEN M+"!43TMU;G,V-"P*"51/2V9L;V%T,S(L(%1/2V9L;V%T-C0L(%1/2V9L;V%T M97 X,"P*"51/2V-H87(L(%1/2W=C:&%R+"!43TMD8VAA<BP 5$]+8FET+`H* M"2\O($%G9W)E9V%T97,*"51/2W-T<G5C="P 5$]+8VQA<W,L(%1/2VEN=&5R M9F%C92P 5$]+=6YI;VXL(%1/2V5N=6TL(%1/2VEM<&]R="P*"51/2W1Y<&5D M968L(%1/2V%L:6%S+"!43TMO=F5R<FED92P 5$]+9&5L96=A=&4L(%1/2V9U M;F-T:6]N+`H)5$]+;6EX:6XL" H)5$]+86QI9VXL(%1/2V5X=&5R;BP 5$]+ M<')I=F%T92P 5$]+<')O=&5C=&5D+"!43TMP=6)L:6,L(%1/2V5X<&]R="P* M"51/2W-T871I8RP +RI43TMV:7)T=6%L+"HO(%1/2V9I;F%L+"!43TMC;VYS M="P 5$]+86)S=')A8W0L(%1/2W9O;&%T:6QE+`H)5$]+9&5B=6<L(%1/2V1E M<')E8V%T960L(%1/2VEN+"!43TMO=70L(%1/2VEN;W5T+`H)5$]+875T;RP M5$]+<&%C:V%G92P*" DO+R!3=&%T96UE;G1S" E43TMI9BP 5$]+96QS92P M5$]+=VAI;&4L(%1/2V9O<BP 5$]+9&\L(%1/2W-W:71C:"P*"51/2V-A<V4L M(%1/2V1E9F%U;'0L(%1/2V)R96%K+"!43TMC;VYT:6YU92P 5$]+=VET:"P* M"51/2W-Y;F-H<F]N:7IE9"P 5$]+<F5T=7)N+"!43TMG;W1O+"!43TMT<GDL M(%1/2V-A=&-H+"!43TMF:6YA;&QY+`H)5$]+87-M+"!43TMF;W)E86-H+`H* M"2\O($-O;G1R86-T<PH)5$]+8F]D>2P 5$]+:6YV87)I86YT+`H*"2\O(%1E M<W1I;F<*"51/2W5N:71T97-T+`I]" T*+R\ 02!T86)L92!C;VYV97)T:6YG M('1O:V5N('9A;'5E<R!I;G1O('-T<FEN9R!R97!R97-E;G1A=&EO;G,Z"F-H M87);70ET;VMT;W-T<EM43TLN;6%X*S%=(#T 6PH)5$]++E1/2W)E<V5R=F5D M(#H (G)E<V5R=F5D(BP*" DO+R!/=&AE< H)5$]++E1/2VQP87)E;B`Z("(H M(BP*"51/2RY43TMR<&%R96X .B`B*2(L" E43TLN5$]+;&)R86-K970 .B`B M6R(L" E43TLN5$]+<F)R86-K970 .B`B72(L" E43TLN5$]+;&-U<FQY(#H M(GLB+`H)5$]++E1/2W)C=7)L>2`Z(")](BP*"51/2RY43TMC;VQO;B`Z("(Z M(BP*"51/2RY43TMN96< .B`B+2(L" E43TLN5$]+<V5M:6-O;&]N(#H (CLB M+`H)5$]++E1/2V1O=&1O=&1O="`Z("(N+BXB+`H)5$]++E1/2V5O9B`Z(")% M3T8B+`H)5$]++E1/2V-A<W0 .B`B8V%S="(L" E43TLN5$]+;G5L;"`Z(")N M=6QL(BP*"51/2RY43TMA<W-E<G0 .B`B87-S97)T(BP*"51/2RY43TMT<G5E M(#H (G1R=64B+`H)5$]++E1/2V9A;'-E(#H (F9A;'-E(BP*"51/2RY43TMA M<G)A>2`Z(");72(L" E43TLN5$]+8V%L;"`Z(")C86QL(BP*"51/2RY43TMA M9&1R97-S(#H (B,B+`H)5$]++E1/2W1Y<&5D;W0 .B`B='EP961O="(L" E4 M3TLN5$]+='EP92`Z(")T>7!E(BP*"51/2RY43TMT:')O=R`Z(")T:')O=R(L M" E43TLN5$]+;F5W(#H (FYE=R(L" E43TLN5$]+9&5L971E(#H (F1E;&5T M92(L" E43TLN5$]+<W1A<B`Z("(J(BP*"51/2RY43TMS>6UO9F8 .B`B<WEM M;V9F(BP*"51/2RY43TMV87( .B`B=F%R(BP*"51/2RY43TMD;W1V87( .B`B M9&]T=F%R(BP*"51/2RY43TMD;W1T:2`Z(")D;W1T:2(L" E43TLN5$]+9&]T M97AP(#H (F1O=&5X<"(L" E43TLN5$]+9&]T='EP92`Z(")D;W1T>7!E(BP* M"51/2RY43TMS;&EC92`Z("(N+B(L" E43TLN5$]+87)R87EL96YG=& .B`B M87)R87EL96YG=& B+`H)5$]++E1/2W9E<G-I;VX .B`B=F5R<VEO;B(L" E4 M3TLN5$]+;6]D=6QE(#H (FUO9'5L92(L" E43TLN5$]+9&]L;&%R(#H (B0B M+`H)5$]++E1/2W1E;7!L871E(#H (G1E;7!L871E(BP*"51/2RY43TMI;G-T M86YC92`Z(")I;G-T86YC92(L" E43TLN5$]+9&5C;&%R871I;VX .B`B9&5C M;&%R871I;VXB+`H)5$]++E1/2W1Y<&5O9B`Z(")T>7!E;V8B+`H)5$]++E1/ M2W!R86=M82`Z(")P<F%G;6$B+`H)5$]++E1/2V1S>6UB;VP .B`B9'-Y;6)O M;"(L" E43TLN5$]+='EP96ED(#H (G1Y<&5I9"(L" E43TLN5$]+=6%D9"`Z M(")U861D(BP*" DO+R!/<&5R871O<G,*"51/2RY43TML="`Z("(\(BP*"51/ M2RY43TMG="`Z("(^(BP*"51/2RY43TML92`Z("(\/2(L" E43TLN5$]+9V4 M.B`B/CTB+`H)5$]++E1/2V5Q=6%L(#H (CT](BP*"51/2RY43TMN;W1E<75A M;"`Z("(A/2(L" E43TLN5$]+:61E;G1I='D .B`B/3T](BP*"51/2RY43TMN M;W1I9&5N=&ET>2`Z("(A/3TB+`H)5$]++E1/2VEN9&5X(#H (EM=(BP*" DO M+R!.0T5'(&9L;V%T:6YG('!O:6YT(&-O;7!A<F5S" DO+R`A/#X]("` ("`\ M/B` ("`\/CT ("` (3X ("` ("$^/2` ("$\("` ("`A/#T ("`A/#X-" D- M" DO+R!.3U1%.B` 5&AE<V4 8V]U;&0 8F4 :&]R<FEB;'D =W)O;F<*"51/ M2RY43TMU;F]R9"`Z("(A/#X](BP*"51/2RY43TMU92`Z("(A/#XB+`H)5$]+ M+E1/2VQG(#H (CP^(BP*"51/2RY43TML96< .B`B/#X](BP*"51/2RY43TMU M;&4 .B`B(3XB+`H)5$]++E1/2W5L(#H (B$^/2(L" E43TLN5$]+=6=E(#H M(B$\(BP*"51/2RY43TMU9R`Z("(A/#TB+`H*"51/2RY43TMS:&P .B`B/#PB M+`H)5$]++E1/2W-H<B`Z("(^/B(L" E43TLN5$]+<VAL87-S(#H (CP\/2(L M" E43TLN5$]+<VAR87-S(#H (CX^/2(L" E43TLN5$]+=7-H<B`Z("(^/CXB M+`H)5$]++E1/2W5S:')A<W, .B`B/CX^/2(L" E43TLN5$]+8V%T(#H (GXB M+`H)5$]++E1/2V-A=&%S<R`Z(")^/2(L"2\O('X ?CT*"51/2RY43TMA9&0 M.B`B*R(L" E43TLN5$]+;6EN(#H (BTB+`H)5$]++E1/2V%D9&%S<R`Z("(K M/2(L" E43TLN5$]+;6EN87-S(#H (BT](BP*"51/2RY43TMM=6P .B`B*B(L M" E43TLN5$]+9&EV(#H (B\B+`H)5$]++E1/2VUO9"`Z("(E(BP*"51/2RY4 M3TMM=6QA<W, .B`B*CTB+`H)5$]++E1/2V1I=F%S<R`Z("(O/2(L" E43TLN M5$]+;6]D87-S(#H (B4](BP*"51/2RY43TMA;F0 .B`B)B(L" E43TLN5$]+ M;W( .B`B?"(L" E43TLN5$]+>&]R(#H (EXB+`H)5$]++E1/2V%N9&%S<R`Z M("(F/2(L" E43TLN5$]+;W)A<W, .B`B?#TB+`H)5$]++E1/2WAO<F%S<R`Z M(")>/2(L" E43TLN5$]+87-S:6=N(#H (CTB+`H)5$]++E1/2VYO="`Z("(A M(BP*"51/2RY43TMT:6QD92`Z(")^(BP*"51/2RY43TMP;'5S<&QU<R`Z("(K M*R(L" E43TLN5$]+;6EN=7-M:6YU<R`Z("(M+2(L" E43TLN5$]+9&]T(#H M(BXB+`H)5$]++E1/2V%R<F]W(#H (BT^(BP*"51/2RY43TMC;VUM82`Z("(L M(BP*"51/2RY43TMQ=65S=&EO;B`Z("(_(BP*"51/2RY43TMA;F1A;F0 .B`B M)B8B+`H)5$]++E1/2V]R;W( .B`B?'PB+`H*"2\O($YU;65R:6, ;&ET97)A M;',*"51/2RY43TMI;G0S,G8 .B`B:6YT,S)V(BP 5$]++E1/2W5N<S,R=B`Z M=6YS-C1V(#H (G5N<S8T=B(L" E43TLN5$]+9FQO870S,G8 .B`B9FQO870S M,G8B+"!43TLN5$]+9FQO870V-'8 .B`B9FQO870V-'8B+"!43TLN5$]+9FQO M870X,'8 .B`B9FQO870X,'8B+`H)5$]++E1/2VEM86=I;F%R>3,R=B`Z(")I M;6%G:6YA<GDS,G8B+"!43TLN5$]+:6UA9VEN87)Y-C1V(#H (FEM86=I;F%R M5$]++E1/2W=C:&%R=B`Z(")W8VAA<G8B+"!43TLN5$]+9&-H87)V(#H (F1C M:&%R=B(L" H)+R\ 3&5A9B!O<&5R871O<G,*"51/2RY43TMI9&5N=&EF:65R M(#H (FED96YT:69I97(B+`E43TLN5$]+<W1R:6YG(#H (G-T<FEN9R(L" E4 M3TLN5$]+=&AI<R`Z(")T:&ES(BP)5$]++E1/2W-U<&5R(#H (G-U<&5R(BP* M" DO+R!"87-I8R!T>7!E<PH)5$]++E1/2W9O:60 .B`B=F]I9"(L" E43TLN M5$]+:6YT."`Z(")B>71E(BP 5$]++E1/2W5N<S .B`B=6)Y=&4B+`H)5$]+ M" E43TLN5$]+:6YT,S( .B`B:6YT(BP 5$]++E1/2W5N<S,R(#H (G5I;G0B M;F<B+`H)5$]++E1/2V9L;V%T,S( .B`B9FQO870B+"!43TLN5$]+9FQO870V M-"`Z(")D;W5B;&4B+"!43TLN5$]+9FQO870X,"`Z(")R96%L(BP*"51/2RY4 M3TMI;6%G:6YA<GDS,B`Z(")I9FQO870B+"!43TLN5$]+:6UA9VEN87)Y-C0 M.B`B:61O=6)L92(L(%1/2RY43TMI;6%G:6YA<GDX,"`Z(")I<F5A;"(L" E4 M+E1/2V-H87( .B`B8VAA<B(L(%1/2RY43TMW8VAA<B`Z(")W8VAA<B(L(%1/ M2RY43TMD8VAA<B`Z(")D8VAA<B(L(%1/2RY43TMB:70 .B`B8FET(BP*" DO M+R!!9V=R96=A=&5S" E43TLN5$]+<W1R=6-T(#H (G-T<G5C="(L(%1/2RY4 M3TMC;&%S<R`Z(")C;&%S<R(L(%1/2RY43TMI;G1E<F9A8V4 .B`B:6YT97)F M86-E(BP 5$]++E1/2W5N:6]N(#H (G5N:6]N(BP 5$]++E1/2V5N=6T .B`B M96YU;2(L(%1/2RY43TMI;7!O<G0 .B`B:6UP;W)T(BP*"51/2RY43TMT>7!E M9&5F(#H (G1Y<&5D968B+"!43TLN5$]+86QI87, .B`B86QI87,B+"!43TLN M5$]+;W9E<G)I9&4 .B`B;W9E<G)I9&4B+"!43TLN5$]+9&5L96=A=&4 .B`B M9&5L96=A=&4B+"!43TLN5$]+9G5N8W1I;VX .B`B9G5N8W1I;VXB+`H)5$]+ M+E1/2VUI>&EN(#H (FUI>&EN(BP*" E43TLN5$]+86QI9VX .B`B86QI9VXB M+"!43TLN5$]+97AT97)N(#H (F5X=&5R;B(L(%1/2RY43TMP<FEV871E(#H M(G!R:79A=&4B+"!43TLN5$]+<')O=&5C=&5D(#H (G!R;W1E8W1E9"(L(%1/ M2RY43TMP=6)L:6, .B`B<'5B;&EC(BP 5$]++E1/2V5X<&]R="`Z(")E>'!O M<G0B+`H)5$]++E1/2W-T871I8R`Z(")S=&%T:6,B+"`O*E1/2RY43TMV:7)T M=6%L(#H (G9I<G1U86PB+"HO(%1/2RY43TMF:6YA;"`Z(")F:6YA;"(L(%1/ M2RY43TMC;VYS="`Z(")C;VYS="(L(%1/2RY43TMA8G-T<F%C="`Z(")A8G-T M<F%C="(L(%1/2RY43TMV;VQA=&EL92`Z(")V;VQA=&EL92(L" E43TLN5$]+ M9&5B=6< .B`B9&5B=6<B+"!43TLN5$]+9&5P<F5C871E9"`Z(")D97!R96-A M=&5D(BP 5$]++E1/2VEN(#H (FEN(BP 5$]++E1/2V]U="`Z(")O=70B+"!4 M3TLN5$]+:6YO=70 .B`B:6YO=70B+`H)5$]++E1/2V%U=&\ .B`B875T;R(L M(%1/2RY43TMP86-K86=E(#H (G!A8VMA9V4B+`H*"2\O(%-T871E;65N=',* M"51/2RY43TMI9B`Z(")I9B(L(%1/2RY43TME;'-E(#H (F5L<V4B+"!43TLN M5$]+=VAI;&4 .B`B=VAI;&4B+"!43TLN5$]+9F]R(#H (F9O<B(L(%1/2RY4 M3TMD;R`Z(")D;R(L(%1/2RY43TMS=VET8V .B`B<W=I=&-H(BP*"51/2RY4 M3TMC87-E(#H (F-A<V4B+"!43TLN5$]+9&5F875L="`Z(")D969A=6QT(BP M5$]++E1/2V)R96%K(#H (F)R96%K(BP 5$]++E1/2V-O;G1I;G5E(#H (F-O M;G1I;G5E(BP 5$]++E1/2W=I=& .B`B=VET:"(L" E43TLN5$]+<WEN8VAR M;VYI>F5D(#H (G-Y;F-H<F]N:7IE9"(L(%1/2RY43TMR971U<FX .B`B<F5T M=7)N(BP 5$]++E1/2V=O=&\ .B`B9V]T;R(L(%1/2RY43TMT<GD .B`B=')Y M(BP 5$]++E1/2V-A=&-H(#H (F-A=&-H(BP 5$]++E1/2V9I;F%L;'D .B`B M9FEN86QL>2(L" E43TLN5$]+87-M(#H (F%S;2(L(%1/2RY43TMF;W)E86-H M(#H (F9O<F5A8V B+`H*"2\O($-O;G1R86-T<PH)5$]++E1/2V)O9'D .B`B M8F]D>2(L(%1/2RY43TMI;G9A<FEA;G0 .B`B:6YV87)I86YT(BP*" DO+R!4 M97-T:6YG" E43TLN5$]+=6YI='1E<W0 .B`B=6YI='1E<W0B+`I=.PH*+R\ M02!L86YG=6%G92!T;VME;CH*<W1R=6-T(%1O:V5N('L-" DO+R!4:&4 :61E M;G1I9FEE<B!O<B!V86QU92!O9B!T:&4 =&]K96XZ" EC:&%R6UT):61E;G0[ M17AC97!T:6]N('1H<F]W;B!D=7)I;F< <&%R<VEN9R!O9B!$(&QA;F=U86=E M. IC;&%S<R!$3&5X97)%>&-E<'1I;VX .B!%<G)O<B![" EP=6)L:6,Z" D) M8W0 86X 97)R;W( ;65S<V%G92!W:71H('1H92!F:6QE;F%M92!A;F0 ;&EN M92!N=6UB97(Z" D)"7-U<&5R*&1L>"YF:6QE;F%M92!^("(H(B!^(&9O<FUA M=" B)60B+"!D;' N;&EN92D ?B`B*2( ?B`B.B`B('X ;7-G*3L*"0E]"GT* M"B\O(%1H92!$(&QA;F=U86=E(&QE>&5R("AT;VME;FEZ97(I. IC;&%S<R!$ M3&5X97( >PH)"7-T871I8R!43TM;8VAA<EM=70EK97EW;W)D<SL*"0DO+R!) M;FET:6%L:7IE('1H92!K97EW;W)D+3YT;VME;G9A;'5E($%!. H)"7-T871I M8R!T:&ES*"D >PH)"0DO+R!!9&0 86QL('1H92!K97EW;W)D<R< =F%L=65S M(&EN=&\ =&AE($%!. H)"0EK97EW;W)D<ULB=&AI<R)=(#T 5$]++E1/2W1H M:7,[" D)"6ME>7=O<F1S6R)S=7!E<B)=(#T 5$]++E1/2W-U<&5R.PH)"0EK M97EW;W)D<ULB87-S97)T(ET /2!43TLN5$]+87-S97)T.PH)"0EK97EW;W)D M<ULB;G5L;")=(#T 5$]++E1/2VYU;&P[" D)"6ME>7=O<F1S6R)T<G5E(ET M/2!43TLN5$]+=')U93L*"0D):V5Y=V]R9'-;(F9A;'-E(ET /2!43TLN5$]+ M9F%L<V4[" D)"6ME>7=O<F1S6R)C87-T(ET /2!43TLN5$]+8V%S=#L*"0D) M:V5Y=V]R9'-;(FYE=R)=(#T 5$]++E1/2VYE=SL*"0D):V5Y=V]R9'-;(F1E M;&5T92)=(#T 5$]++E1/2V1E;&5T93L*"0D):V5Y=V]R9'-;(G1H<F]W(ET M/2!43TLN5$]+=&AR;W<[" D)"6ME>7=O<F1S6R)M;V1U;&4B72`](%1/2RY4 M3TMM;V1U;&4[" D)"6ME>7=O<F1S6R)P<F%G;6$B72`](%1/2RY43TMP<F%G M;6$[" D)"6ME>7=O<F1S6R)T>7!E;V8B72`](%1/2RY43TMT>7!E;V8[" D) M"6ME>7=O<F1S6R)T>7!E:60B72`](%1/2RY43TMT>7!E:60[" H)"0EK97EW M;W)D<ULB=&5M<&QA=&4B72`](%1/2RY43TMT96UP;&%T93L*"0D):V5Y=V]R M9'-;(FEN<W1A;F-E(ET /2!43TLN5$]+:6YS=&%N8V4[" H)"0EK97EW;W)D M<ULB=F]I9")=(#T 5$]++E1/2W9O:60[" D)"6ME>7=O<F1S6R)B>71E(ET M/2!43TLN5$]+:6YT.#L*"0D):V5Y=V]R9'-;(G5B>71E(ET /2!43TLN5$]+ M=6YS.#L*"0D):V5Y=V]R9'-;(G-H;W)T(ET /2!43TLN5$]+:6YT,38[" D) M"6ME>7=O<F1S6R)U<VAO<G0B72`](%1/2RY43TMU;G,Q-CL*"0D):V5Y=V]R M9'-;(FEN=")=(#T M(#T 5$]++E1/2W5N<S,R.PH)"0EK97EW;W)D<ULB;&]N9R)=(#T 5$]++E1/ M"0D):V5Y=V]R9'-;(F9L;V%T(ET /2!43TLN5$]+9FQO870S,CL*"0D):V5Y M=V]R9'-;(F1O=6)L92)=(#T 5$]++E1/2V9L;V%T-C0[" D)"6ME>7=O<F1S M6R)R96%L(ET /2!43TLN5$]+9FQO870X,#L*" D)"6ME>7=O<F1S6R)B:70B M72`](%1/2RY43TMB:70[" D)"6ME>7=O<F1S6R)C:&%R(ET /2!43TLN5$]+ M8VAA<CL*"0D):V5Y=V]R9'-;(G=C:&%R(ET /2!43TLN5$]+=V-H87([" D) M"6ME>7=O<F1S6R)D8VAA<B)=(#T 5$]++E1/2V1C:&%R.PH*"0D):V5Y=V]R M9'-;(FEF;&]A=")=(#T 5$]++E1/2VEM86=I;F%R>3,R.PH)"0EK97EW;W)D M<ULB:61O=6)L92)=(#T 5$]++E1/2VEM86=I;F%R>38T.PH)"0EK97EW;W)D M<ULB:7)E86PB72`](%1/2RY43TMI;6%G:6YA<GDX,#L*" D)"6ME>7=O<F1S M6R)C9FQO870B72`](%1/2RY43TMC;VUP;&5X,S([" D)"6ME>7=O<F1S6R)C M=&4B72`](%1/2RY43TMD96QE9V%T93L*"0D):V5Y=V]R9'-;(F9U;F-T:6]N M(ET /2!43TLN5$]+9G5N8W1I;VX[" H)"0EK97EW;W)D<ULB:7,B72`](%1/ M2RY43TMI9&5N=&ET>3L*"0D):V5Y=V]R9'-;(FEF(ET /2!43TLN5$]+:68[ M" D)"6ME>7=O<F1S6R)E;'-E(ET /2!43TLN5$]+96QS93L*"0D):V5Y=V]R M9'-;(G=H:6QE(ET /2!43TLN5$]+=VAI;&4[" D)"6ME>7=O<F1S6R)F;W(B M72`](%1/2RY43TMF;W([" D)"6ME>7=O<F1S6R)D;R)=(#T 5$]++E1/2V1O M.PH)"0EK97EW;W)D<ULB<W=I=&-H(ET /2!43TLN5$]+<W=I=&-H.PH)"0EK M97EW;W)D<ULB8V%S92)=(#T 5$]++E1/2V-A<V4[" D)"6ME>7=O<F1S6R)D M969A=6QT(ET /2!43TLN5$]+9&5F875L=#L*"0D):V5Y=V]R9'-;(F)R96%K M(ET /2!43TLN5$]+8G)E86L[" D)"6ME>7=O<F1S6R)C;VYT:6YU92)=(#T M5$]++E1/2V-O;G1I;G5E.PH)"0EK97EW;W)D<ULB<WEN8VAR;VYI>F5D(ET M/2!43TLN5$]+<WEN8VAR;VYI>F5D.PH)"0EK97EW;W)D<ULB<F5T=7)N(ET M/2!43TLN5$]+<F5T=7)N.PH)"0EK97EW;W)D<ULB9V]T;R)=(#T 5$]++E1/ M2V=O=&\[" D)"6ME>7=O<F1S6R)T<GDB72`](%1/2RY43TMT<GD[" D)"6ME M>7=O<F1S6R)C871C:")=(#T 5$]++E1/2V-A=&-H.PH)"0EK97EW;W)D<ULB M9FEN86QL>2)=(#T 5$]++E1/2V9I;F%L;'D[" D)"6ME>7=O<F1S6R)W:71H M(ET /2!43TLN5$]+=VET:#L*"0D):V5Y=V]R9'-;(F%S;2)=(#T 5$]++E1/ M2V%S;3L*"0D):V5Y=V]R9'-;(F9O<F5A8V B72`](%1/2RY43TMF;W)E86-H M.PH*"0D):V5Y=V]R9'-;(G-T<G5C=")=(#T 5$]++E1/2W-T<G5C=#L*"0D) M:V5Y=V]R9'-;(F-L87-S(ET /2!43TLN5$]+8VQA<W,[" D)"6ME>7=O<F1S M6R)I;G1E<F9A8V4B72`](%1/2RY43TMI;G1E<F9A8V4[" D)"6ME>7=O<F1S M6R)U;FEO;B)=(#T 5$]++E1/2W5N:6]N.PH)"0EK97EW;W)D<ULB96YU;2)= M(#T 5$]++E1/2V5N=6T[" D)"6ME>7=O<F1S6R)I;7!O<G0B72`](%1/2RY4 M3TMI;7!O<G0[" D)"6ME>7=O<F1S6R)M:7AI;B)=(#T 5$]++E1/2VUI>&EN M.PH)"0EK97EW;W)D<ULB<W1A=&EC(ET /2!43TLN5$]+<W1A=&EC.PH)"0DO M*FME>7=O<F1S6R)V:7)T=6%L(ET /2!43TLN5$]+=FER='5A;#LJ+PH)"0EK M97EW;W)D<ULB9FEN86PB72`](%1/2RY43TMF:6YA;#L*"0D):V5Y=V]R9'-; M(F-O;G-T(ET /2!43TLN5$]+8V]N<W0[" D)"6ME>7=O<F1S6R)T>7!E9&5F M(ET /2!43TLN5$]+='EP961E9CL*"0D):V5Y=V]R9'-;(F%L:6%S(ET /2!4 M3TLN5$]+86QI87,[" D)"6ME>7=O<F1S6R)O=F5R<FED92)=(#T 5$]++E1/ M2V]V97)R:61E.PH)"0EK97EW;W)D<ULB86)S=')A8W0B72`](%1/2RY43TMA M8G-T<F%C=#L*"0D):V5Y=V]R9'-;(G9O;&%T:6QE(ET /2!43TLN5$]+=F]L M871I;&4[" D)"6ME>7=O<F1S6R)D96)U9R)=(#T 5$]++E1/2V1E8G5G.PH) M"0EK97EW;W)D<ULB9&5P<F5C871E9")=(#T 5$]++E1/2V1E<')E8V%T960[ M" D)"6ME>7=O<F1S6R)I;B)=(#T 5$]++E1/2VEN.PH)"0EK97EW;W)D<ULB M;W5T(ET /2!43TLN5$]+;W5T.PH)"0EK97EW;W)D<ULB:6YO=70B72`](%1/ M2RY43TMI;F]U=#L*"0D):V5Y=V]R9'-;(F%U=&\B72`](%1/2RY43TMA=71O M.PH*"0D):V5Y=V]R9'-;(F%L:6=N(ET /2!43TLN5$]+86QI9VX[" D)"6ME M>7=O<F1S6R)E>'1E<FXB72`](%1/2RY43TME>'1E<FX[" D)"6ME>7=O<F1S M6R)P<FEV871E(ET /2!43TLN5$]+<')I=F%T93L*"0D):V5Y=V]R9'-;(G!A M8VMA9V4B72`](%1/2RY43TMP86-K86=E.PH)"0EK97EW;W)D<ULB<')O=&5C M=&5D(ET /2!43TLN5$]+<')O=&5C=&5D.PH)"0EK97EW;W)D<ULB<'5B;&EC M(ET /2!43TLN5$]+<'5B;&EC.PH)"0EK97EW;W)D<ULB97AP;W)T(ET /2!4 M3TLN5$]+97AP;W)T.PH*"0D):V5Y=V]R9'-;(F)O9'DB72`](%1/2RY43TMB M;V1Y.PH)"0EK97EW;W)D<ULB:6YV87)I86YT(ET /2!43TLN5$]+:6YV87)I M86YT.PH)"0EK97EW;W)D<ULB=6YI='1E<W0B72`](%1/2RY43TMU;FET=&5S M=#L*"0D):V5Y=V]R9'-;(G9E<G-I;VXB72`](%1/2RY43TMV97)S:6]N.PH) M"7T*" EP<FEV871E. H)"6-H87);70EF:6QE.PD)+R\ 5&AE(&EN<'5T(&9I M;&4*"0EU:6YT"7`["0D)+R\ 0W5R<F5N="!C:&%R86-T97(*" D)+R\ 5$]$ M3SH*"0EC:&%R6UT)=WES:7=Y9U-T<FEN9R I('L*"0D)<F5T=7)N(&YU;&P[ M" D)?0H*"0DO+R!43T1/. H)"6-H87);70EH97A3=')I;F<H*2![" D)"7)E M='5R;B!N=6QL.PH)"7T*" EP=6)L:6,Z" D)8VAA<EM="69I;&5N86UE.PDO M+R!&:6QE;F%M90H)"75I;G0);&EN93L)"2\O($-U<G)E;G0 ;&EN90H*"0DO M+R!);FET:6%L:7IE('1H92!L97AE<B!W:71H('1H92!F=6QL('-O=7)C92!C M;V1E(&%S(&$ <W1R:6YG. H)"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R M6UT <W)C*2![" D)"69I;&4 /2!S<F,[" D)"71H:7,N9FEL96YA;64 /2!F M<R!F=6YC=&EO;B!C;VYS=6UE<R!A(&9U;&P 1"!L86YG=6%G92!T;VME;B!A M;F0 <F5T=7)N<R!I="!I;B!T:&4 <W1R=6-T=7)E(%1O:V5N. H)"2\O(&YU M;&P :7, <F5T=7)N960 :68 =&AE(&5N9"!O9B!T:&4 9FEL92!I<R!R96%C M:&5D+ H)"51O:V5N* EN97AT5&]K96XH*2![" D)"51O:V5N* ER971T;VL M/2!N97< 5&]K96X[" D)"75I;G0)<W1A<G0[" H)"0ER971T;VLN:61E;G0 M/2!N=6QL.PH)"0ER971T;VLN=&]K96X /2!43TLN5$]+:61E;G1I9FEE<CL* M" D)"2\O(%!A<W0 =&AE(&5N9"!O9B!F:6QE/R!2971U<FX 82!N=6QL('1O M:V5N. H)"0EI9B`H<"`^/2!F:6QE+FQE;F=T:"D <F5T=7)N(&YU;&P[" H) M"0DO+R!296%D('5P('1O('1H92!N97AT('=H:71E+7-P86-E(&-H87(Z" D) M"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"7-W:71C:"`H9FEL95MP M72D >PH)"0D)"6-A<V4 )R`G+"`G7&XG+"`G7'(G+"`G7'8G+"`G7'0G+"`G M7&8G. H)"0D)"0EI9B`H9FEL95MP72`]/2`G7&XG*2`K*VQI;F4[" D)"0D) M"2LK<#L*"0D)"0D)8G)E86L[" H)"0D)"6-A<V4 )RXG. H)"0D)"0DK*W`[ M" D)"0D)"6EF("AF:6QE6W!=(#T]("<N)RD >PH)"0D)"0D)*RMP.PH)"0D) M"0D):68 *&9I;&5;<%T /3T )RXG*2![" D)"0D)"0D)*RMP.PH)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMD;W1D;W1D;W0[" D)"0D)"0E](&5L M<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+<VQI8V4[" D)"0D) M"7T 96QS90H)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V1O=#L*"0D) M"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)8G)E86L[" H)"0D)"6-A<V4 )R8G M. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D) M"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%N9&%S<SL* M"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<F)RD >PH)"0D)"0D)*RMP M.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%N9&%N9#L*"0D)"0D) M?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+86YD.PH)"0D) M"0ER971U<FX <F5T=&]K.PH*"0D)"0EC87-E("=\)SH*"0D)"0D)*RMP.PH) M"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"2LK<#L*"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMO<F%S<SL*"0D)"0D)?2!E;'-E(&EF M("AF:6QE6W!=(#T]("=\)RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K M+G1O:V5N(#T 5$]++E1/2V]R;W([" D)"0D)"7T 96QS90H)"0D)"0D)<F5T M=&]K+G1O:V5N(#T 5$]++E1/2V]R.PH)"0D)"0ER971U<FX <F5T=&]K.PH* M"0D)"0EC87-E("<M)SH*"0D)"0D)*RMP.PH)"0D)"0EI9B`H9FEL95MP72`] M/2`G/2<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/ M2RY43TMM:6YA<W,[" D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G+2<I M('L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMM M:6YU<VUI;G5S.PH)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`] M(%1/2RY43TMM:6X[" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 M)RLG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH) M"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2V%D9&%S M<SL*"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<K)RD >PH)"0D)"0D) M*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W!L=7-P;'5S.PH) M"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMA9&0[ M" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A<V4 )STG. H)"0D)"0DK M*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH) M"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D)*RMP.PH)"0D) M"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMI9&5N=&ET>3L*"0D)"0D)"7T M96QS90H)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TME<75A;#L*"0D) M"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+87-S:6=N M.PH)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0EC87-E("<\)SH*"0D)"0D) M*RMP.PH)"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"2LK<#L* M"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TML93L)"0DO+R`\/0H)"0D) M"0E](&5L<V4 :68 *&9I;&5;<%T /3T )SPG*2![" D)"0D)"0DK*W`[" D) M"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D)"0D)"0DK*W`[" D)"0D) M"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W-H;&%S<SL)"2\O(#P\/0H)"0D) M"0D)?2!E;'-E" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W-H;#L) M"2\O(#P\" D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G/B<I('L*"0D) M"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D) M"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;&5G.PD)+R\ M/#X]" D)"0D)"0E](&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN M5$]+;&<["0DO+R`\/ H)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME M;B`](%1/2RY43TML=#L)"0DO+R`\" D)"0D)"7)E='5R;B!R971T;VL[" H) M"0D)"6-A<V4 )SXG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T] M("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]+ M+E1/2V=E.PD)"2\O(#X]" D)"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G M/B<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD M>PH)"0D)"0D)"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+ M<VAR87-S.PD)+R\ /CX]" D)"0D)"0E](&5L<V4 :68 *&9I;&5;<%T /3T M)SXG*2![" D)"0D)"0D)*RMP.PH)"0D)"0D)"6EF("AF:6QE6W!=(#T]("<] M)RD >PH)"0D)"0D)"0DK*W`[" D)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/ M2RY43TMU<VAR87-S.PDO+R`^/CX]" D)"0D)"0D)?2!E;'-E" D)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMU<VAR.PD)+R\ /CX^" D)"0D)"0E] M(&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+<VAR.PD)+R\ M/CX*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+ M9W0["0D)+R\ / H)"0D)"0ER971U<FX <F5T=&]K.PH*"0D)"0EC87-E("<A M)SH*"0D)"0D)*RMP.PH)"0D)"0EI9B`H9FEL95MP72`]/2`G/2<I('L*"0D) M"0D)"2LK<#L*"0D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D) M"2LK<#L*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;F]T:61E;G1I M='D["2\O("$]/0H)"0D)"0D)?2!E;'-E" D)"0D)"0D)<F5T=&]K+G1O:V5N M(#T 5$]++E1/2VYO=&5Q=6%L.PD)+R\ (3T*"0D)"0D)?2!E;'-E(&EF("AF M:6QE6W!=(#T]("<\)RD >PH)"0D)"0D)*RMP.PH)"0D)"0D):68 *&9I;&5; M<%T /3T )SXG*2![" D)"0D)"0D)*RMP.PH)"0D)"0D)"6EF("AF:6QE6W!= M(#T]("<])RD >PH)"0D)"0D)"0DK*W`[" D)"0D)"0D)"7)E='1O:RYT;VME M;B`](%1/2RY43TMU;F]R9#L +R\ (3P^/0H)"0D)"0D)"7T 96QS90H)"0D) M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+=64["2\O("$\/ H)"0D)"0D) M?2!E;'-E(&EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)"2LK<#L*"0D) M"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+=6<["2\O("$\/0H)"0D)"0D) M?2!E;'-E" D)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2W5G93L)+R\ M(3P*"0D)"0D)?2!E;'-E(&EF("AF:6QE6W!=(#T]("<^)RD >PH)"0D)"0D) M*RMP.PH)"0D)"0D):68 *&9I;&5;<%T /3T )STG*2![" D)"0D)"0D)*RMP M.PH)"0D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMU;#L)+R\ (3X]" D) M"0D)"0E](&5L<V4*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+=6QE M.PDO+R`A/ H)"0D)"0E](&5L<V4*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/ M2RY43TMN;W0["0DO+R`A" D)"0D)"7)E='5R;B!R971T;VL[" H)"0D)"6-A M<V4 )RHG. H)"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD M>PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUU M;&%S<SL*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN M5$]+;75L.PH)"0D)"0ER971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )R4G. H) M"0D)"0DK*W`[" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D) M*RMP.PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2VUO9&%S<SL*"0D) M"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+;6]D.PH) M"0D)"0ER971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )UXG. H)"0D)"0DK*W`[ M" D)"0D)"6EF("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D) M"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/2WAO<F%S<SL*"0D)"0D)?2!E;'-E M" D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+>&]R.PH)"0D)"0ER971U M<FX <F5T=&]K.PH)"0D)"6-A<V4 )WXG. H)"0D)"0DK*W`[" D)"0D)"6EF M("AF:6QE6W!=(#T]("<])RD >PH)"0D)"0D)*RMP.PH)"0D)"0D)<F5T=&]K M+G1O:V5N(#T 5$]++E1/2V-A=&%S<SL*"0D)"0D)?2!E;'-E" D)"0D)"0ER M971T;VLN=&]K96X /2!43TLN5$]+=&EL9&4[" D)"0D)"7)E='5R;B!R971T M;VL[" H)"0D)"6-A<V4 )R G.B`K*W`[(')E='1O:RYT;VME;B`](%1/2RY4 M3TML<&%R96X[(')E='5R;B!R971T;VL[" D)"0D)8V%S92`G*2<Z("LK<#L M<F5T=&]K+G1O:V5N(#T 5$]++E1/2W)P87)E;CL <F5T=7)N(')E='1O:SL* M"0D)"0EC87-E("=;)SH*"0D)"0D)*RMP.PH)"0D)"0EI9B`H9FEL95MP72`] M/2`G72<I('L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='1O:RYT;VME;B`](%1/ M2RY43TMA<G)A>3L*"0D)"0D)?2!E;'-E" D)"0D)"0ER971T;VLN=&]K96X M/2!43TLN5$]+;&)R86-K970[" D)"0D)"7)E='5R;B!R971T;VL[" D)"0D) M8V%S92`G72<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2W)B<F%C:V5T M.R!R971U<FX <F5T=&]K.PH)"0D)"6-A<V4 )WLG.B`K*W`[(')E='1O:RYT M;VME;B`](%1/2RY43TML8W5R;'D[(')E='5R;B!R971T;VL[" D)"0D)8V%S M92`G?2<Z("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2W)C=7)L>3L <F5T M=7)N(')E='1O:SL*"0D)"0EC87-E("<Z)SH *RMP.R!R971T;VLN=&]K96X M/2!43TLN5$]+8V]L;VX[(')E='5R;B!R971T;VL[" D)"0D)8V%S92`G.R<Z M("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2W-E;6EC;VQO;CL <F5T=7)N M(')E='1O:SL*"0D)"0EC87-E("<_)SH *RMP.R!R971T;VLN=&]K96X /2!4 M3TLN5$]+<75E<W1I;VX[(')E='5R;B!R971T;VL[" D)"0D)8V%S92`G+"<Z M("LK<#L <F5T=&]K+G1O:V5N(#T 5$]++E1/2V-O;6UA.R!R971U<FX <F5T M=&]K.PH*"0D)"0EC87-E("<O)SH*"0D)"0D)*RMP.PH)"0D)"0ES=VET8V M*&9I;&5;<%TI('L*"0D)"0D)"6-A<V4 )STG. H)"0D)"0D)"7)E='1O:RYT M;VME;B`](%1/2RY43TMD:79A<W,[" D)"0D)"0D)<F5T=7)N(')E='1O:SL* M" D)"0D)"0EC87-E("<O)SH*"0D)"0D)"0DO+R!S:6YG;&4M;&EN92`O+R!C M;VUM96YT. H)"0D)"0D)"2LK<#L*"0D)"0D)"0EW:&EL92`H<"`\(&9I;&4N M;&5N9W1H*2![" D)"0D)"0D)"6EF("AF:6QE6W!=(#T]("=<;B<I('L*"0D) M"0D)"0D)"2LK;&EN93L-" D)"0D)"0D)"0DK*W`[" D)"0D)"0D)"0EB<F5A M:SL*"0D)"0D)"0D)?0H)"0D)"0D)"0DK*W`[" D)"0D)"0D)?0H)"0D)"0D) M"6)R96%K.PH*"0D)"0D)"6-A<V4 )RLG.B![" D)"0D)"0D):6YT(&YE<W0 M/2`P.PH)"0D)"0D)"2\O(&YE<W1E9"!C;V1E(&-O;6UE;G0 +RLZ" D)"0D) M"0D)*RMP.PH)"0D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D) M"0D)"0D):68 *&9I;&5;<%T /3T )UQN)RD *RML:6YE.PH)"0D)"0D)"0D* M"0D)"0D)"0D):68 *&9I;&5;<%T /3T )RLG*2![" D)"0D)"0D)"0DK*W`[ M" D)"0D)"0D)"0EI9B`H9FEL95MP72`]/2`G+R<I('L*"0D)"0D)"0D)"0DK M*W`[" D)"0D)"0D)"0D)+2UN97-T.PH)"0D)"0D)"0D)"6EF("AN97-T(#P M,"D 8G)E86L[" D)"0D)"0D)"0E]" D)"0D)"0D)"7T 96QS92!I9B`H9FEL M95MP72`]/2`G+R<I('L*"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"6EF("AF M:6QE6W!=(#T]("<K)RD >PH)"0D)"0D)"0D)"2LK<#L*"0D)"0D)"0D)"0DK M*VYE<W0[" D)"0D)"0D)"0E]" D)"0D)"0D)"7T 96QS92`K*W`[" D)"0D) M"0D)?0H)"0D)"0D)"6)R96%K.PH)"0D)"0D)?0H*"0D)"0D)"6-A<V4 )RHG M. H)"0D)"0D)"2\O(&UU;'1I+6QI;F4 8V]M;65N="`O*CH*"0D)"0D)"0DK M*W`[" D)"0D)"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D)"0D) M"0EI9B`H9FEL95MP72`]/2`G7&XG*2`K*VQI;F4[" D)"0D)"0D)"0H)"0D) M"0D)"0EI9B`H9FEL95MP72`]/2`G*B<I('L*"0D)"0D)"0D)"2LK<#L*"0D) M"0D)"0D)"6EF("AF:6QE6W!=(#T]("<O)RD >PH)"0D)"0D)"0D)"2LK<#L* M"0D)"0D)"0D)"0EB<F5A:SL*"0D)"0D)"0D)"7T*"0D)"0D)"0D)?2!E;'-E M("LK<#L*"0D)"0D)"0E]" D)"0D)"0D)8G)E86L[" H)"0D)"0D)9&5F875L M=#H*"0D)"0D)"0ER971T;VLN=&]K96X /2!43TLN5$]+9&EV.PH)"0D)"0D) M"7)E='5R;B!R971T;VL[" D)"0D)"7T*"0D)"0D)8G)E86L[" H)"0D)"6-A M<V4 )UPG)SH >PH)"0D)"0EC:&%R6UT)=&]K.PH)"0D)"0EV97)S:6]N("AI M;G1E<G!R971?<VQA<VAE<RD >PH)"0D)"0D)+R\ 26YT97)P<F5T('1H92!E M<V-A<&5D(&-H87)A8W1E<G, 86YD(&EN<V5R="!T:&5M. H)"0D)"0D)*RMP M.PH)"0D)"0D):68 *&9I;&5;<%T /3T )UQ<)RD >PH)"0D)"0D)"71O:RYL M96YG=& /2`Q.PH)"0D)"0D)"2LK<#L*"0D)"0D)"0ES=VET8V *&9I;&5; M<%TI('L*"0D)"0D)"0D)8V%S92`G;B<Z('1O:ULP72`]("=<;B<[(&)R96%K M.PH)"0D)"0D)"0EC87-E("=R)SH =&]K6S!=(#T )UQR)SL 8G)E86L[" D) M"0D)"0D)"6-A<V4 )W8G.B!T;VM;,%T /2`G7'8G.R!B<F5A:SL*"0D)"0D) M"0D)8V%S92`G="<Z('1O:ULP72`]("=<="<[(&)R96%K.PH)"0D)"0D)"0EC M87-E("=F)SH =&]K6S!=(#T )UQF)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 M)UPG)SH =&]K6S!=(#T )UPG)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 )UPB M)SH =&]K6S!=(#T )UPB)SL 8G)E86L[" D)"0D)"0D)"6-A<V4 )UQ<)SH M=&]K6S!=(#T )UQ<)SL 8G)E86L[" D)"0D)"0D)"61E9F%U;'0Z(&)R96%K M.PH)"0D)"0D)"7T*"0D)"0D)"0DK*W`[" D)"0D)"0D)*RMP.PH)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMC:&%R=CL*"0D)"0D)"0ER971T;VLN M:61E;G0 /2!T;VL[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)"7T M(#T 9FEL95MP73L*"0D)"0D)"0DK*W`[" D)"0D)"0D)*RMP.PH)"0D)"0D) M"7)E='1O:RYT;VME;B`](%1/2RY43TMC:&%R=CL*"0D)"0D)"0ER971T;VLN M:61E;G0 /2!T;VL[" D)"0D)"0D)<F5T=7)N(')E='1O:SL*"0D)"0D)"7T* M"0D)"0D)?2!E;'-E('L*"0D)"0D)"2\O($IU<W0 8V]P>2!O=F5R('1H92!E M<V-A<&4 <W1R:6YG<SH*"0D)"0D)"2LK<#L*"0D)"0D)"7-T87)T(#T <#L* M"0D)"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"0D)"0EI9B`H M9FEL95MP72`]/2`G7%PG*2![" D)"0D)"0D)"2LK<#L*"0D)"0D)"0E](&5L M<V4 :68 *&9I;&5;<%T /3T )UPG)RD >PH)"0D)"0D)"0EB<F5A:SL*"0D) M"0D)"0E]" D)"0D)"0D)*RMP.PH)"0D)"0D)?0H)"0D)"0D)<F5T=&]K+FED M96YT(#T 9FEL95MS=&%R="`N+B!P73L*"0D)"0D)"7)E='1O:RYT;VME;B`] M(%1/2RY43TMC:&%R=CL*"0D)"0D)"2LK<#L*"0D)"0D)"7)E='5R;B!R971T M;VL[" D)"0D)"7T*"0D)"0E]" H)"0D)"6-A<V4 )UPB)SH >PH)"0D)"0EC M:&%R6UT)=&]K.PH)"0D)"0EV97)S:6]N("AI;G1E<G!R971?<VQA<VAE<RD M>PH)"0D)"0D)+R\ 26YT97)P<F5T('1H92!E<V-A<&5D(&-H87)A8W1E<G, M86YD(&EN<V5R="!T:&5M. H)"0D)"0D)=6EN=`EL(#T ,#L*"0D)"0D)"71O M:RYL96YG=& /2`V-#L*"0D)"0D)"2LK<#L*"0D)"0D)"7=H:6QE("AP(#P M9FEL92YL96YG=& I('L*"0D)"0D)"0EI9B`H9FEL95MP72`]/2`G7%PG*2![ M" D)"0D)"0D)"2LK<#L*"0D)"0D)"0D):68 *'` /CT 9FEL92YL96YG=& I M(&)R96%K.PH)"0D)"0D)"0ES=VET8V *&9I;&5;<%TI('L*"0D)"0D)"0D) M"6-A<V4 )VXG.B!T;VM;;%T /2`G7&XG.R!B<F5A:SL*"0D)"0D)"0D)"6-A M<V4 )W(G.B!T;VM;;%T /2`G7'(G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 M)W0G.B!T;VM;;%T /2`G7'0G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 )W8G M.B!T;VM;;%T /2`G7'8G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 )V8G.B!T M;VM;;%T /2`G7&8G.R!B<F5A:SL*"0D)"0D)"0D)"6-A<V4 )UPG)SH =&]K M6VQ=(#T )UPG)SL 8G)E86L[" D)"0D)"0D)"0EC87-E("=<(B<Z('1O:UML M72`]("=<(B<[(&)R96%K.PH)"0D)"0D)"0D)8V%S92`G7%PG.B!T;VM;;%T M/2`G7%PG.R!B<F5A:SL*"0D)"0D)"0D)"61E9F%U;'0Z" D)"0D)"0D)"7T* M"0D)"0D)"0D)+R\ 1W)O=R!T:&4 =&]K96X ;&5N9W1H. H)"0D)"0D)"0EI M9B`H*RML(#X]('1O:RYL96YG=& I('1O:RYL96YG=& /2!T;VLN;&5N9W1H M("H ,CL*"0D)"0D)"0D)*RMP.PH)"0D)"0D)"7T 96QS92!I9B`H9FEL95MP M72`]/2`G7"(G*2![" D)"0D)"0D)"6)R96%K.PH)"0D)"0D)"7T 96QS92![ M" D)"0D)"0D)"71O:UML72`](&9I;&5;<%T[" D)"0D)"0D)"2\O($=R;W< M=&AE('1O:V5N(&QE;F=T:#H*"0D)"0D)"0D):68 *"LK;"`^/2!T;VLN;&5N M9W1H*2!T;VLN;&5N9W1H(#T M<#L*"0D)"0D)"0E]" D)"0D)"0E]" D)"0D)"0ER971T;VLN=&]K96X /2!4 M3TLN5$]+<W1R:6YG.PH)"0D)"0D)=&]K+FQE;F=T:"`](&P[" D)"0D)"0ER M971T;VLN:61E;G0 /2!T;VL[" D)"0D)"0DK*W`[" D)"0D)"0ER971U<FX M<F5T=&]K.PH)"0D)"0E](&5L<V4 >PH)"0D)"0D)+R\ 2G5S="!C;W!Y(&]V M97( =&AE(&5S8V%P92!S=')I;F=S. H)"0D)"0D)*RMP.PH)"0D)"0D)<W1A M<G0 /2!P.PH)"0D)"0D)=VAI;&4 *'` /"!F:6QE+FQE;F=T:"D >PH)"0D) M"0D)"6EF("AF:6QE6W!=(#T]("=<7"<I('L*"0D)"0D)"0D)*RMP.PH)"0D) M"0D)"7T 96QS92!I9B`H9FEL95MP72`]/2`G7"(G*2![" D)"0D)"0D)"6)R M96%K.PH)"0D)"0D)"7T*"0D)"0D)"0DK*W`[" D)"0D)"0E]" D)"0D)"0ER M971T;VLN=&]K96X /2!43TLN5$]+<W1R:6YG.PH)"0D)"0D)<F5T=&]K+FED M96YT(#T 9FEL95MS=&%R="`N+B!P73L*"0D)"0D)"2LK<#L*"0D)"0D)"7)E M='5R;B!R971T;VL[" D)"0D)"7T*"0D)"0E]" H)"0D)"6-A<V4 )W(G. H) M"0D)"0DO+R!765-)5UE'('-T<FEN9S\*"0D)"0D)*RMP.PH)"0D)"0EI9B`H M9FEL95MP72`A/2`G7"(G*2![" D)"0D)"0DO+R!.;W!E+"!J=7-T(&%N(&ED M96YT:69I97(Z" D)"0D)"0ES=&%R="`]('` +2`Q.PH)"0D)"0D)9V]T;R!C M87-E7VED96YT.PH)"0D)"0E]" D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY4 M3TMS=')I;F<[" D)"0D)"7)E='1O:RYI9&5N="`]('=Y<VEW>6=3=')I;F<H M*3L*"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)8V%S92`G:"<Z" D)"0D) M"2\O($A%6"!S=')I;F<_" D)"0D)"2LK<#L*"0D)"0D):68 *&9I;&5;<%T M(3T )UPB)RD >PH)"0D)"0D)<W1A<G0 /2!P("T ,3L*"0D)"0D)"6=O=&\ M8V%S95]I9&5N=#L*"0D)"0D)?0H)"0D)"0ER971T;VLN=&]K96X /2!43TLN M5$]+<W1R:6YG.PH)"0D)"0ER971T;VLN:61E;G0 /2!H97A3=')I;F<H*3L* M"0D)"0D)<F5T=7)N(')E='1O:SL*" D)"0D)+R\ 261E;G1I9FEE<B!S=&%R M="!W:71H(%\ ;W( 82UZ+$$M6CH*"0D)"0EC87-E("=A)RP )V(G+"`G8R<L M("=D)RP )V4G+"`G9B<L("=G)RP ("` ("`G:2<L("=J)RP )VLG+"`G;"<L M" D)"0D)"2`G;2<L("=N)RP )V\G+"`G<"<L("=Q)RP ("` ("`G<R<L("=T M)RP )W4G+"`G=B<L("=W)RP )W G+`H)"0D)"0D )WDG+"`G>B<Z" D)"0D) M8V%S92`G02<L("=")RP )T,G+"`G1"<L("=%)RP )T8G+"`G1R<L("=()RP M)TDG+"`G2B<L("=+)RP )TPG+`H)"0D)"0D )TTG+"`G3B<L("=/)RP )U`G M+"`G42<L("=2)RP )U,G+"`G5"<L("=5)RP )U8G+"`G5R<L("=8)RP*"0D) M"0D)("=9)RP )UHG+"`G7R<Z" D)"0D)"2\O(%-E="!T:&4 <W1A<G1I;F< M<&]I;G0 870 =&AI<R!C:&%R86-T97(Z" D)"0D)"7-T87)T(#T <#L*"0D) M"0EC87-E7VED96YT. H)"0D)"0DO+R!%>'1R86-T('1H92!I9&5N=&EF:65R M. H)"0D)"0EW:&EL92`H<"`\(&9I;&4N;&5N9W1H*2![" D)"0D)"0EI9B`H M:7-A;&YU;2AF:6QE6W!=*2!\?"`H9FEL95MP72`]/2`G7R<I*0H)"0D)"0D) M"2LK<#L*"0D)"0D)"65L<V4*"0D)"0D)"0EB<F5A:SL*"0D)"0D)?0H)"0D) M(&QI<W0L(')E='5R;G, ;G5L;"!I9B!N;W0 =&AE<F4Z" D)"0D)"6-H87); M72!T;VL /2!F:6QE6W-T87)T("XN('!=.PH)"0D)"0EI9B`H=&]K(&EN(&ME M>7=O<F1S*2![" D)"0D)"0ER971T;VLN=&]K96X /2!K97EW;W)D<UMT;VM= M.PH)"0D)"0E](&5L<V4 >PH)"0D)"0D)<F5T=&]K+G1O:V5N(#T 5$]++E1/ M2VED96YT:69I97([" D)"0D)"0ER971T;VLN:61E;G0 /2!F:6QE6W-T87)T M("XN('!=.PH)"0D)"0E]" D)"0D)"7)E='5R;B!R971T;VL[" T*"0D)"0DO M+R!.=6UE<FEC(&QI=&5R86PZ" D)"0D)8V%S92`G,"<L("<Q)RP )S(G+"`G M=&%L+"!D96-I;6%L+"!F;&]A="P 971C+ H)"0D)"0ES=&%R="`]('`[" D) M"0D)"7=H:6QE("AP(#P 9FEL92YL96YG=& I('L*"0D)"0D)"6EF(" A:7-A M;&YU;2AF:6QE6W!=*2D 8G)E86L[" D)"0D)"0DK*W`[" D)"0D)"7T-" T* M"0D)"0D)+R\ 1&5F875L="!T;R!A;B!I;G0S,G8 =&]K96X 9F]R(&%N>2!N M=6UB97(Z" D)"0D)"7)E='1O:RYT;VME;B`](%1/2RY43TMI;G0S,G8[" D) M"0D)"7)E='1O:RYI9&5N="`](&9I;&5;<W1A<G0 +BX <%T[" D)"0D)"7)E M='5R;B!R971T;VL[" H)"0D)"61E9F%U;'0Z" D)"0D)"2LK<#L*"0D)"7T* M"0D)?0H*"0D)<F5T=7)N(&YU;&P[" D)?0H*"0DO+R!/;FQY('!E96L 870 M=&AE(&YE>'0 =&]K96XL(&1O;B=T(&-O;G-U;64 :70Z" D)5&]K96XJ"7!E M96M4;VME;B I('L*"0D)=6EN=`ES879E<"`]('`L('-A=F5L:6YE(#T ;&EN M93L*"0D)5&]K96XJ"71O:R`](&YE>'14;VME;B I.PH)"0EP(#T <V%V97`[ M" D)"6QI;F4 /2!S879E;&EN93L*" D)"7)E='5R;B!T;VL[" D)?0H-" D) M+R\ 4W1A<G0 =&AE('!A<G-I;F< 870 =&AE(&)E9VEN;FEN9R!O9B!T:&4 +/2`Q.PH)"7T*?0IO ` end
Dec 18 2004
James Dunne wrote:I'm glad I could help you all in your project endeavours! If anyone has some extra webspace that they wouldn't mind hosting D code snippets on, please let me know! I've got a bunch of useful ones :) Regards, James DunneIt sounds like you want to check out dsource.org. To start a new project, just post a request in the "Potential Projects" forum (http://www.dsource.org/forums/viewforum.php?f=13). If you just want to make some examples available to the community, you can post an example in the Tutorials section (http://www.dsource.org/tutorials/). -- Justin (a/k/a jcc7) http://jcc_7.tripod.com/d/
Dec 18 2004
James I've not yet had chance to look at the code, but I was wondering whether you could give a quick 2-para precise of the interface for your module? A bit of sample program might be useful? (I've just had a sneak, and seen nextToken(), so I reckon I could work it out, but it'd be nicer and quicker if you can just give us a bit of usage info.) Cheers Matthew P.S. FYI, I wrote a source parser / processor about 4 yrs ago which I used to great effect on a very poorly programmed Java project I was brought in on. I was able to write filters to effect changes to hundreds of thousands of lines of code automatically, which was of great benefit when clearing up after a band of careless programmers. Now I'm sure that such programs will not be needed with D, being as how we're all so cool and all, but it'd be jolly nice to be able to write a server plug-in for D, and use it in the same tool (it uses COM). I shall investigate this in a couple of weeks' time. :-) "James Dunne" <jdunne4 bradley.edu> wrote in message news:cq2dot$2lgq$1 digitaldaemon.com...I have updated the dlexer.d module, so please use this version. New features: - line number tracking (line property of DLexer class) - DLexerException class: constructs error message containing filename and current line number - independent module now - more comments! :) TODO: - correct wysiwyg string parsing - correct hex string parsing - correct numeric literal parsing (ints, floats, etc.) I'm glad I could help you all in your project endeavours! If anyone has some extra webspace that they wouldn't mind hosting D code snippets on, please let me know! I've got a bunch of useful ones :) Regards, James Dunne
Dec 18 2004
Sure thing Matthew, As you have guessed already, nextToken() is your main guy to call. This returns a Token *, representing the current language token. A Token is a structure defined to have only 2 members: 'ident', and 'token'. 'token' is any value from the TOK enumeration which enumerates all the D language tokens available. This lexer works just like the D compiler's lexer, making the longest possible token at all times (greedy). The 'ident' member is used only if the token being parsed has a special meaning, like an identifier, string literal, or a numeric literal. As of right now, the lexer is somewhat limited. It successfully lexes most D language tokens, but does not have support for wysiwyg or hex strings, or for proper numeric literal parsing. All numeric literals are assumed to be int32v tokens. There is no official hexadecimal, octal, or floating-point parsing. However, a cheap hack is in effect to successfully half-assedly parse these, since it ensures the characters in the literal are either alpha or numeric. This means that 0x000 will be parsed as one numeric literal, since it starts with a numeric ('0') and follows with alphas ('x') and numerics ('0'). There are two ways to parse double-quoted strings ("string"), preserving escape-sequences, or interpreting the escape-sequences. Code is in place to perform both methods for convenience. Setting the version identifier 'interpret_slashes' will return the escaped characters in the string as they should be. If this version identifier is disabled, then the string is simply copied and not escaped (this is the default). In order to fully utilize the parser, you would ideally create a child class based on the DLexer class and use its methods. If you encounter errors during your parsing, you may throw a DLexerException(), which will provide you with a fully detailed error message including the filename being parsed, and the current line number being parsed. You must supply the actual error message yourself. Here's an example: You'll find this type of activity common when parsing source code. Writing a convenience wrapper function to 'expect' tokens is a good idea. Here's an example of what that would look like: (within "class DParser : DLexer {" scope) Calling nextToken() will always consume a token and will place the cursor at the next token to be consumed. If you wish to peek ahead of the current token to see what the next token will be without consuming it, call peekToken(). It works exactly like nextToken() but resets the cursor back to its original position. The DLexer class provides the following public methods and variables: this(char[] filename, char[] src) -- give the lexer the name of the file parsing (filename), and the contents of the entire file as a single string (src) Token* nextToken(); -- consumes next token Token* peekToken(); -- peeks at next token without consuming it void restart(); -- restart parsing from the beginning of the module char[] filename -- name of the file being parsed int line -- current line number Hope that helps a bit! The code is pretty self-explanatory and somewhat well-documented. Take a good long gander at it before you try to really use it. In article <cq2o54$2seg$1 digitaldaemon.com>, Matthew says...James I've not yet had chance to look at the code, but I was wondering whether you could give a quick 2-para precise of the interface for your module? A bit of sample program might be useful? (I've just had a sneak, and seen nextToken(), so I reckon I could work it out, but it'd be nicer and quicker if you can just give us a bit of usage info.) Cheers Matthew P.S. FYI, I wrote a source parser / processor about 4 yrs ago which I used to great effect on a very poorly programmed Java project I was brought in on. I was able to write filters to effect changes to hundreds of thousands of lines of code automatically, which was of great benefit when clearing up after a band of careless programmers. Now I'm sure that such programs will not be needed with D, being as how we're all so cool and all, but it'd be jolly nice to be able to write a server plug-in for D, and use it in the same tool (it uses COM). I shall investigate this in a couple of weeks' time. :-)Regards, James Dunne
Dec 18 2004
Hey all again, I thought I'd release my D parser now. This puppy is still very much a work in progress, but will successfully parse relatively simple D programs. Writing a parser isn't very difficult, it's just a lot of work ;). This module uses my dlexer module I released in this thread. And so, it is a good(?) example of how to use the dlexer module. The point of this module is to parse D programs for code-completion purposes. A few simple structures are used to represent the module's information. An example program is supplied which dumps out the parsed module's structs, enums, classes, functions, and variables. I should mention that functionality is somewhat limited: version blocks aren't parsed correctly, and the type parsing on identifiers and functions is somewhat lacking. I do intend to fix these issues in the next couple of days. Test it out on some D programs you have lying around (or the phobos library for a good kick). Regards, James Dunne begin 0644 dtags.d M=&\ 9&ES=')I8G5T92!T:&ES(&UO9'5L92!I;B!A;GD 9F]R;2!Y;W4 ;&EK M92X ($D ;VYL>2!A<VL =&AA="!Y;W4-"B\O(&=I=F4 8W)E9&ET('=H97)E M(&-R961I="!I<R!D=64N("!9;W4 ;6%Y(&UA:V4 ;6]D:69I8V%T:6]N<R!T M;R!T:&ES(&UO9'5L92X ($EF('EO=2!D;PT*+R\ <V\L('EO=2!M87D <')O M=FED92!Y;W5R(&UO9&EF:6-A=&EO;G, <'5B;&EC;'DL(&)U="!Y;W4 87)E M(&YO="!R97%U:7)E9"!T;RX-" T*+R\ 5$]$3R!L:7-T. T*+R\ +2!C;W)R M96-T('!A<G-I;F< ;V8 ='EP92!D96-L87)A=&EO;G, :6X :61E;G1I9FEE M<G, 86YD(&9U;F-T:6]N<PT*+R\ +2!I;G1E<F9A8V4 <&%R<VEN9PT*+R\ M+2!V97)S:6]N('M](&)L;V-K<PT*+R\ +2!C;W)R96-T(&5X=&5R;B`H='EP M92D >R!](&)L;V-K<RP (F5X=&5R;B`H='EP92DZ(B!A;F0 (F5X=&5R;B`H M='EP92D 9&5C;"( =V]R:RX-"B\O("T 8V]M<&QE=&4 86-C97-S(&UO9&EF M:65R<R!O;B!F=6YC=&EO;G,-" T*;6]D=6QE"61T86=S.PH*:6UP;W)T"7-T M9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T>7!E M.PH*:6UP;W)T"61L97AE<CL*"B\O('!U8FQI8RP <')I=F%T92P 971C+B!A M8V-E<W,Z"F5N=6T 86-C97-S4FEG:'1S(#H :6YT('L*"6%R56YD969I;F5D M(#T +3$L" EA<E!U8FQI8RP*"6%R4&%C:V%G92P*"6%R4')O=&5C=&5D+`H) M87)0<FEV871E"GT[" HO+R!C;VYS="P 9FEN86PL(&%U=&\L(&5T8RX ;6]D M:69I97)S. IE;G5M(&%C8V5S<TUO9&EF:65R(#H =6EN="![" EA;4-O;G-T M;V1U;&4 :6UP;W)T. IS=')U8W0 1$EM<&]R="![" EC:&%R6UT)"0EN86UE M.PH)86-C97-S4FEG:'1S"6%C8V5S<SL)"2\O(&UA:6YL>2!F;W( <'5B;&EC M(&%N9"!P<FEV871E('%U86QI9FEE<G,*?3L*"B\O($$ =F%R:6%B;&4Z"G-T M<G5C="!$5F%R('L*"6-H87);70D);F%M93L*"51O:V5N*EM="71Y<&4[" H) M86-C97-S4FEG:'1S"6%C8V5S<SL*"6%C8V5S<TUO9&EF:65R"6UO9&EF:65R M.PDO+R!M86EN;'D 9F]R(&EN+"!O=70L(&%N9"!I;F]U=`I].PH*+R\ 06X M5$]+"0D)='EP93L)"0DO+R!T>7!E(&]F('9A;'5E<R!I;B!E;G5M97)A=&EO M; H*"7-T<G5C="!E;G5M5F%L=64 >PH)"6-H87);70EN86UE.PH)"6-H87); M70EV86QU93L*"7T*"65N=6U686QU95M="79A;'5E<SL*?3L*"B\O($$ <W1R M=6-T=7)E. IS=')U8W0 1%-T<G5C="![" EC:&%R6UT)"6YA;64[" H)1%9A M<BI;70D)=F%R<SL*"41&=6YC*EM="69U;F-S.PT*"413=')U8W0J6UT)<W1R M=6-T<RP =6YI;VYS.PT*?3L*"B\O($$ 9G5N8W1I;VXZ"G-T<G5C="!$1G5N M8R![" EC:&%R6UT)"6YA;64[" E4;VME;BI;70ET>7!E.PT*"6-H87);70D) M;&EN:V%G93L*" E$5F%R*EM="0EP87)M<RP =F%R<SL*"413=')U8W0J6UT) M<W1R=6-T<RP =6YI;VYS.PH)1$5N=6TJ6UT)96YU;7,[" E$1G5N8RI;70EF M=6YC<SL*" EA8V-E<W-2:6=H=',)86-C97-S.PH)86-C97-S36]D:69I97() M;6]D:69I97(["GT[" HO+R!!;B!I;G1E<F9A8V4Z"G-T<G5C="!$26YT97)F M86-E('L*"6-H87);70D)"6YA;64[" EA8V-E<W-2:6=H=',)86-C97-S.PH) M86-C97-S36]D:69I97();6]D:69I97([" H)+R\ 26YH97)I=&5D(&EN=&5R M9F%C97,Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$1G5N8RI;70EF=6YC M<SL*?3L*"B\O($$ 8VQA<W,Z"G-T<G5C="!$0VQA<W, >PH)8VAA<EM="0D) M;F%M93L*"6%C8V5S<U)I9VAT<PEA8V-E<W,[" EA8V-E<W--;V1I9FEE< EM M;V1I9FEE<CL*" DO+R!);FAE<FET960 :6YT97)F86-E<R`H86YD(&-L87-S M97,I+"!C86XG="!D:7-T:6YG=6ES:"!B971W965N(&$ 8VQA<W, ;W( :6YT M97)F86-E(&AE<F4Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$4W1R=6-T M*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM="65N=6US.PH)1$9U;F,J M6UT)9G5N8W,L(&-T;W)S+"!D=&]R<SL*"41687(J6UT)"79A<G,["GT[" HO M+R!!(&UO9'5L93H*<W1R=6-T($1-;V1U;&4 >PH)8VAA<EM="6YA;64[" H) M1$EM<&]R="I;70EI;7!O<G1S.PH)1$-L87-S*EM="6-L87-S97,L(&EN=&5R M9F%C97,[" E$4W1R=6-T*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM= M"65N=6US.PH)1$9U;F,J6UT)9G5N8W,[" E$5F%R*EM="0EV87)S.PI].PH* M8VQA<W, 1%1A9W, .B!$3&5X97( >PH)<')I=F%T93H*"0EA8V-E<W-2:6=H M;G0L(&QN:T1E9F%U;'0[" H)<'5B;&EC. H)"2\O(%1H92!P=6)L:6-L>2!A M=F%I;&%B;&4 ;6]D=6QE('1A9R!S=')U8W1U<F4Z" D)1$UO9'5L92H)9&UO M9'5L93L*" D)+R\ 3&]A9"!U<"!T:&4 ;6]D=6QE('-O=7)C92!C;V1E. H) M"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R6UT <W)C*2![" D)"2\O($QO M860 =7` =&AE('-O=7)C92!F;W( =&AE(&QE>&5R. H)"0ES=7!E<BAF:6QE M;F%M92P <W)C*3L*" D)"2\O($-R96%T92!A(&1E9F%U;'0 ;6]D=6QE('-T M<G5C='5R93H*"0D)9&UO9'5L92`](&YE=R!$36]D=6QE.PH)"0ED;6]D=6QE M+FYA;64 /2!F:6QE;F%M93L*" D)"2\O(%-E="!T:&4 9&5F875L="!A8V-E M<W, <FEG:'1S(&9O<B!N97=L>2!C<F5A=&5D(&ED96YT:69I97)S. H)"0EA M<D1E9F%U;'0 /2!A8V-E<W-2:6=H=',N87)0=6)L:6,[" D)"6%R0W5R<F5N M="`](&%C8V5S<U)I9VAT<RYA<E5N9&5F:6YE9#L-" D)"6QN:T1E9F%U;'0 M" D)+R\ 17AP96-T(&$ =&]K96X 86YD('1H<F]W(&%N(&5X8V5P=&EO;B!I M9B!N;W0 9F]U;F0Z" D)5&]K96XJ"65X<&5C="A43TL =F%L=64L(&-H87); M72!M<V<I('L*"0D)5&]K96XJ"6YT;VL /2!N97AT5&]K96XH*3L*"0D):68 M86QU92D*"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X M<&5C=&5D("( ?B!M<V<I.PH)"0ER971U<FX ;G1O:SL*"0E]" H)"2\O($5X M<&5C="!A('1O:V5N(&%N9"!T:')O=R!A;B!E>&-E<'1I;VX :68 ;F]T(&9O M=6YD. H)"51O:V5N* EE>'!E8W14;VME;BA4;VME;B`J=&]K+"!43TL =F%L M=64L(&-H87);72!M<V<I('L*"0D):68 *'1O:RYT;VME;B`A/2!V86QU92D* M"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X<&5C=&5D M("( ?B!M<V<I.PH)"0ER971U<FX =&]K.PH)"7T-" T*"0DO+R!)<R!T:&ES M('1O:V5N(&$ 8F%S:6, ='EP93\-" D)8F]O;"!I<U1Y<&4H5$]+('9A;'5E M9#H M92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)"6-A<V4 5$]++E1/ M5$]++E1/2W5N<S8T. H)"0D)8V%S92!43TLN5$]+9FQO870S,BP 5$]++E1/ M9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R M93L-" D)"7T-" D)"7)E='5R;B!F86QS93L*"0E]" H)"2\O($=E="!T:&4 M8W5R<F5N="!O<B!D969A=6QT(&%C8V5S<R!R:6=H=#H*"0EA8V-E<W-2:6=H M=',)9V5T06-C97-S*"D >PH)"0EA8V-E<W-2:6=H=',)87( /2!A8V-E<W-2 M:6=H=',N87)5;F1E9FEN960[" D)"6EF("AA<D-U<G)E;G0 (3T 86-C97-S M4FEG:'1S+F%R56YD969I;F5D*2![" D)"0EA<B`](&%R0W5R<F5N=#L*"0D) M"2\O($EN=F%L:61A=&4 =&AE(&-U<G)E;G0 86-C97-S(')I9VAT. H)"0D) M<V4 >PH)"0D)+R\ 57-E('1H92!D969A=6QT(&EF(&YO(&-U<G)E;G0 86-C M97-S('-P96-I9FEE9#H*"0D)"6%R(#T 87)$969A=6QT.PH)"0E]" D)"7)E M875L="!F=6YC=&EO;B!L:6YK86=E. T*"0EC:&%R6UT)9V5T3&EN:V%G92 I M('L-" D)"6-H87);70EL:6YK86=E(#T (D0B.PT*"0D):68 *&QN:T-U<G)E M;G0 :7, ;G5L;"D >PT*"0D)"6QI;FMA9V4 /2!L;FM$969A=6QT.PT*"0D) M?2!E;'-E('L-" D)"0EL:6YK86=E(#T ;&YK0W5R<F5N=#L- M=7)R96YT(#T ;G5L;#L-" D)"7T-" D)"7)E='5R;B!L:6YK86=E.PT*"0E] M" H)"2\O(%-K:7` ;W9E<B!A('-E="!O9B!N97-T960 =&]K96YS. T*"0EV M;VED('-K:7!.97-T*%1/2R!L+"!43TL <BD >PT*"0D):6YT"6YE<W0 /2`P M.PT*"0D)9F]R(" [.RD >PT*"0D)"51O:V5N* ET;VL /2!N97AT5&]K96XH M*3L-" D)"0EI9B`H=&]K(&ES(&YU;&PI(&)R96%K.PT*"0D)"6EF("AT;VLN M=&]K96X /3T ;"D *RMN97-T.PT*"0D)"6EF("AT;VLN=&]K96X /3T <BD M. T*"0EV;VED(')E861087)A;65T97)S*&EN;W5T($1687(J6UT <&%R;7,I M('L-" D)"51O:V5N* D)"71O:SL-" D)"6%C8V5S<TUO9&EF:65R"6YE>'1A M;3L-" T*"0D);F5X=&%M(#T 86-C97-S36]D:69I97(N86U);CL-" T*"0D) M9F]R(" [.RD >PT*"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT M=&-H("AT;VLN=&]K96XI('L-" D)"0D)8V%S92!43TLN5$]+:6XZ"0EN97AT M86T /2!A8V-E<W--;V1I9FEE<BYA;4EN.R!B<F5A:SL-" D)"0D)8V%S92!4 M3TLN5$]+;W5T. EN97AT86T /2!A8V-E<W--;V1I9FEE<BYA;4]U=#L 8G)E M5$]++E1/2W9O:60Z" D)"0D)8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N M<S Z" D)"0D)8V%S92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D) M"0EC87-E(%1/2RY43TMI;G0S,BP 5$]++E1/2W5N<S,R. H)"0D)"6-A<V4 M"6-A<V4 5$]++E1/2VEM86=I;F%R>3,R+"!43TLN5$]+:6UA9VEN87)Y-C0L M(%1/2RY43TMI;6%G:6YA<GDX,#H*"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X M8V%S92!43TLN5$]+8VAA<BP 5$]++E1/2W=C:&%R+"!43TLN5$]+9&-H87(L M(%1/2RY43TMB:70Z" D)"0D)8V%S92!43TLN5$]+:61E;G1I9FEE<CH >PT* M"0D)=VAI;&4 *"AN=&]K(#T ;F5X=%1O:V5N*"DI+G1O:V5N("$](%1/2RY4 M"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I9FEE<BP (FED96YT M:69I97( 869T97( ='EP92(I.PT*"0D)"0D):61E;G0 /2!N=&]K+FED96YT M(&YE=R!$5F%R.PT*"0D)"0D)=F%R+FYA;64 /2!I9&5N=#L-" D)"0D)"79A M<BYT>7!E(#T ='EP93L-" D)"0D)"79A<BYM;V1I9FEE<B`](&YE>'1A;3L- M" T*"0D)"0D)<&%R;7,N;&5N9W1H(#T <&%R;7,N;&5N9W1H("L ,3L-" D) M" T*"0D)"0ED969A=6QT. T*"0D)"7T-" D)"7T-" D)?0T*" D)+R\ 4&%R M<V4 86X :6UP;W)T(&QI;F4Z" D)+R\ 4W1A<G1S(&%F=&5R(&EM<&]R="!T M;VME;BX*"0E$26UP;W)T*B!P87)S94EM<&]R=" I('L*"0D)1$EM<&]R="H) M:6UP.PH)"0EC:&%R6UT)"6ED96YT.PH)"0E4;VME;BH)"6YT;VL[" H)"0DO M+R!'970 =&AE(&EM<&]R="!I9&5N=&EF:65R. H)"0EW:&EL92`H*&YT;VL M/2!N97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH) M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I" D)"0D) M:61E;G0 ?CT ;G1O:RYI9&5N=#L*"0D)"65L<V4 :68 *&YT;VLN=&]K96X M/3T 5$]++E1/2V1O="D*"0D)"0EI9&5N="!^/2`B+B([" D)"7T*" D)"6EM M<"`](&YE=R!$26UP;W)T.PH)"0EI;7`N;F%M92`](&ED96YT.PH)"0EI;7`N M86-C97-S(#T 9V5T06-C97-S*"D[" D)"7)E='5R;B!I;7`[" D)?0H-" D) M+R\ 4&%R<V4 82!C;&%S<R!D969I;FET:6]N. H)"2\O(%-T87)T<R!A9G1E M;&%S<RH)"6-L<SL*"0D)8VAA<EM="0EI9&5N=#L*"0D)5&]K96XJ"0EN=&]K M.PT*"0D):6YT"0D);F5S=#L*" D)"2\O($-R96%T92!T:&4 1$-L87-S('-T M<G5C='5R93H*"0D)8VQS(#T M8VQA<W, :61E;G1I9FEE<CH*"0D)8VQS+FYA;64 /2!E>'!E8W0H5$]++E1/ M2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R(&-L87-S(BDN:61E;G0[ M+R\ 0VAE8VL 9F]R(&%N(&EN=&5R9F%C92!L:7-T. H)"0EN=&]K(#T ;F5X M=%1O:V5N*"D[" D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMC;VQO;BD M>PH)"0D)9F]R(" [.RD >PH)"0D)"6YT;VL /2!E>'!E8W0H5$]++E1/2VED M96YT:69I97(L(")I9&5N=&EF:65R(BD[" H)"0D)"2\O($%D9"!A(&YE=R!I M;G1E<F9A8V4Z" D)"0D)8VQS+FEI;G1E<F9A8V5S+FQE;F=T:"`](&-L<RYI M:6YT97)F86-E<RYL96YG=& *R`Q.PH)"0D)"6-L<RYI:6YT97)F86-E<UML M96YG=& +2`Q72`](&YT;VLN:61E;G0[" H)"0D)"6YT;VL /2!N97AT5&]K M96XH*3L*"0D)"0DO+R!!(&QE9G0M8W5R;'D_($)R96%K+ H)"0D)"6EF("AN M=&]K+G1O:V5N(#T](%1/2RY43TML8W5R;'DI(&)R96%K.PH)"0D)"2\O($UA M:V4 <W5R92!I="=S(&$ 8V]M;6$Z" D)"0D)97AP96-T5&]K96XH;G1O:RP M5$]++E1/2V-O;6UA+"`B)RPG(&]R("=[)R!A9G1E<B!I;G1E<F9A8V4B*3L* M"0D)"7T*"0D)?0H*"0D)+R\ 36%K92!S=7)E('=E)W)E(&%T(&$ ;&5F="UC M=7)L>2UB<F%C92`G>R<Z" D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML M8W5R;'DL("(G>R< 869T97( :6YT97)F86-E(&QI<W0 ;W( 8VQA<W, :61E M;G1I9FEE<B(I.PH-" D)"6YE<W0 /2`P.PH)"0EF;W( *#L M86-E<SH-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![ M("LK;F5S=#L 8V]N=&EN=64[('T-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!4 M4&5E:R!A="!T:&4 ;F5X="!T;VME;B!T;R!S964 :68 :70G<R!A(&-O;&]N M(&]N;'D :68 =V4G<F4 :6X =&AE(&EM;65D:6%T92!C;&%S<R!S8V]P93H- M" D)"0EI9B`H*&YE<W0 /3T ,"D )B8 *'!E96M4;VME;B I+G1O:V5N(#T] M(%1/2RY43TMC;VQO;BDI('L-" D)"0D)+R\ 268 <V\L('1H96X =&AE(&-U M<G)E;G0 =&]K96X <VAO=6QD(&)E(&%N(&%C8V5S<PT*"0D)"0DO+R!M;V1I M9FEE<BX-" D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W!R:79A=&4I M"0D)"0EE;'-E(&EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMP<F]T96-T960I M" D)"0D)"6%R1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D) M"0D)96QS92!I9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<&%C:V%G92D-" D) M"65L<V4-" D)"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP M('L-" D)"0D)+R\ 0VAE8VL =&AE('1O:V5N. T*"0D)"0ES=VET8V *&YT M;VLN=&]K96XI('L-" D)"0D)"2\O(%-E="!T:&4 ;F5X="!U<V5D(&%C8V5S M<R!R:6=H=#H-" D)"0D)"6-A<V4 5$]++E1/2W!R:79A=&4Z"6%R0W5R<F5N M="`](&%C8V5S<U)I9VAT<RYA<E!R:79A=&4[(&)R96%K.PT*"0D)"0D)8V%S M92!43TLN5$]+<')O=&5C=&5D. EA<D-U<G)E;G0 /2!A8V-E<W-2:6=H=',N M87)0<F]T96-T960[(&)R96%K.PT*"0D)"0D)8V%S92!43TLN5$]+<'5B;&EC M" D)"0D)"6-A<V4 5$]++E1/2W!A8VMA9V4Z"6%R0W5R<F5N="`](&%C8V5S M:6UP;&5M96YT871I;VX-" D)"0D)"0EB<F5A:SL-" T*"0D)"0D)+R\ 4W1A M<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D) M"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)8V%S92!43TLN5$]+:6YT."P M9FQO870X,#H*"0D)"0D)8V%S92!43TLN5$]+:6UA9VEN87)Y,S(L(%1/2RY4 M3TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R>3 P. H)"0D)"0EC87-E M(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC;VUP;&5X-C0L(%1/2RY43TMC M<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET. H)"0D)"0EC87-E(%1/2RY4 M/2`Q.PT*"0D)"0D)"71Y<&5;,%T /2!N=&]K.PT*"0D)"0D)"69O<B`H.SLI M('L-" D)"0D)"0D)=&]K(#T M;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I(&)R96%K.PT*"0D)"0D) M"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI(&)R96%K.PT*"0D) M"0D)"0ET>7!E+FQE;F=T:"`]('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D) M9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI('L-" D)"0D)"0D)97AP M96-T*%1/2RY43TMM=6PL("(G*B<B*3L-" D)"0D)"0D):61E;G0 /2!E>'!E M?2!E;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I('L- M" D)"0D)"0D)+R\ 4F5A9"!T:&4 :61E;G1I9FEE<CH-" D)"0D)"0D):61E M8W5R87( /2!G971!8V-E<W,H*3L-" T*"0D)"0D)"71O:R`](&YE>'14;VME M;B I.PT*"0D)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD M* EF=6YC(#T ;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N M=#L-" D)"0D)"0D)9G5N8RYT>7!E(#T M;F,N;&EN:V%G92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E M<W, /2!C=7)A<CL-" T*"0D)"0D)"0DO+R!!9&0 9G5N8W1I;VX =&\ 8VQA M8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-" D) M+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)=&]K M(#T M;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI<W0 =&AE M<F5O9CH-" T*"0D)"0D)"0EF;W( *#L M87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T M"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0D)=F%R+F%C M96YG=& *R`Q.PT*"0D)"0D)"0D)8VQS+G9A<G-;;&5N9W1H("T ,5T /2!V M(&)R96%K.PT*"0D)"0D)"0D)97AP96-T5&]K96XH=&]K+"!43TLN5$]+8V]M M;6$L("(G+"<B*3L-" T*"0D)"0D)"0D)=&]K(#T M"0D)"0D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI9&5N=&EF:65R+"`B M" D)"0D)"0D)"2\O($=E="!N97AT(&-O;6UA(&]R('-E;6EC;VQO;CH-" D) M+E1/2W1H:7,Z('L-" D)"0D)"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL- M" D)"0D)"0E4;VME;BH);G1O:SL-" T*"0D)"0D)"69U;F,N86-C97-S(#T M"0EC;',N8W1O<G,N;&5N9W1H(#T M"0EC87-E(%1/2RY43TMT:6QD93H >PT*"0D)"0D)"65X<&5C="A43TLN5$]+ M=&AI<RP (B=T:&ES)R!A9G1E<B`G?B<B*3L-" T*"0D)"0D)"41&=6YC* EF M=6YC(#T M"0D)+R\ 061D('1H92!D97-T<G5C=&]R. T*"0D)"0D)"6-L<RYD=&]R<RYL M96YG=& /2!C;',N9'1O<G,N;&5N9W1H("L ,3L-" D)"0D)"0EC;',N9'1O M(#T M96XL("(G*"<B*3L-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS M*3L-" T*"0D)"0D)"6YT;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0EI9B`H M;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D) M"0D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML8W5R;'DL("(G>R<B*3L- M" D)"0D)"0ES:VEP3F5S="A43TLN5$]+;&-U<FQY+"!43TLN5$]+<F-U<FQY M*3L-" D)"0D)"7T-" T*"0D)"0D)9&5F875L=#H-" D)"0D)"0D-" D)"0D) M87)T(&%F=&5R('-T<G5C="]U;FEO;B!T;VME;BX-" D)1%-T<G5C="H)<&%R M(#T M86UE(#T ;G5L;#L-" D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT M:69I97(I('L-" D)"0ES="YN86UE(#T =&]K+FED96YT.PT*"0D)"71O:R`] M82!C=7)L>3H-" D)"65X<&5C=%1O:V5N*'1O:RP 5$]++E1/2VQC=7)L>2P M(B=[)R(I.PT*"0D)+R\ 4F5A9"!I;B!A;&P =&AE(&9U;F-T:6]N<RP =F%R M:6%B;&5S+"!S=')U8W1S+"!A;F0 =6YI;VYS. T*"0D)9F]R(" [.RD >PT* M"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT;VLN=&]K96X /3T M82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)"0EC87-E M"0D)8V%S92!43TLN5$]+:6YT,S(L(%1/2RY43TMU;G,S,CH*"0D)"0EC87-E M(%1/2RY43TMI;G0V-"P 5$]++E1/2W5N<S8T. H)"0D)"6-A<V4 5$]++E1/ M"0EC87-E(%1/2RY43TMI;6%G:6YA<GDS,BP 5$]++E1/2VEM86=I;F%R>38T M"6-A<V4 5$]++E1/2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R M+"!43TLN5$]+8FET. H)"0D)"6-A<V4 5$]++E1/2VED96YT:69I97(Z('L- M" D)"0D)"51O:V5N* EN=&]K.PT*"0D)"0D)8VAA<EM="6ED96YT.PT*"0D) M"0D)5&]K96XJ6UT)='EP93L-" T*"0D)"0D)+R\ 0V]N<W1R=6-T('1H92!T M>7!E(&]F('1H92!I9&5N=&EF:65R. T*"0D)"0D)='EP92YL96YG=& /2`Q M.PT*"0D)"0D)='EP95LP72`]('1O:SL-" D)"0D)"7=H:6QE(" H;G1O:R`] M(&YE>'14;VME;B I*2YT;VME;B`A/2!43TLN5$]+:61E;G1I9FEE<BD >PT* M"0D)"0D)"71Y<&4N;&5N9W1H(#T ='EP92YL96YG=& *R`Q.PT*"0D)"0D) M+R!296%D('1H92!I9&5N=&EF:65R. T*"0D)"0D)97AP96-T5&]K96XH;G1O M:RP 5$]++E1/2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R('1Y<&4B M*3L-" D)"0D)"6ED96YT(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D);G1O:R`] M(&YE>'14;VME;B I.PT*"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/ M2VQP87)E;BD >PT*"0D)"0D)"2\O($ET)W, 82!F=6YC=&EO;CH-" D)"0D) M"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-" D)"0D)"0EF=6YC+FYA;64 M/2!I9&5N=#L-" D)"0D)"0EF=6YC+G1Y<&4 /2!T>7!E+F1U<#L-" D)"0D) M(#T <W0N9G5N8W,N;&5N9W1H("L ,3L-" D)"0D)"0ES="YF=6YC<UML96YG M97( ;&ES=#H-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS*3L- M"0D)"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"6EF("AN=&]K+G1O M:V5N(#T M96-T5&]K96XH;G1O:RP 5$]++E1/2VQC=7)L>2P (B=[)R(I.PT*"0D)"0D) M"0D)"0E](&5L<V4 >PT*"0D)"0D)"2\O($ET)W, 82!V87)I86)L92!O<B!L M87(J"79A<B`](&YE=R!$5F%R.PT*"0D)"0D)"0EV87(N;F%M92`](&ED96YT M.PT*"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0EV87(N M86-C97-S(#T M($%D9"!V87)I86)L92!T;R!C;&%S<SH-" D)"0D)"0D)<W0N=F%R<RYL96YG M<R!T:&4 ;&ES=#H-" D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/ M5&]K96XH*3L-" D)"0D)"0D)97AP96-T5&]K96XH;G1O:RP 5$]++E1/2VED M:RYI9&5N=#L-" T*"0D)"0D)"0DO+R!'970 ;F5X="!C;VUM82!O<B!S96UI M<G5C=',N;&5N9W1H("L ,3L-" D)"0D)"7-T+G-T<G5C='-;;&5N9W1H("T M2RY43TMU;FEO;CH >PT*"0D)"0D)1%-T<G5C="H)<W0R(#T <&%R<V53=')U M8W0H*3L-" T*"0D)"0D)<W0N=6YI;VYS+FQE;F=T:"`]('-T+G5N:6]N<RYL M"7T-" D)"7T-" D)"0T*"0D)<F5T=7)N('-T.PT*"0E]" T*"0DO+R!087)S M92!A;B!E;G5M97)A=&EO;CH-" D)+R\ 4W1A<G0 869T97( <W1R=6-T('1O M:V5N+ T*"0E$16YU;2H)<&%R<V5%;G5M*"D >PT*"0D)5&]K96XJ"0ET;VL[ M"0D)=&]K(#T M86QL;W=E9#H-" D)"65N+FYA;64 /2!N=6QL.PT*"0D):68 *'1O:RYT;VME M;B`]/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"2\O(&5N=6T :61E;G1I M('L-" D)"0D)+R\ 96YU;2!I9&5N=&EF:65R(#H ='EP90T*"0D)"0ET;VL M/2!N97AT5&]K96XH*3L-" D)"0D):68 *&ES5'EP92AT;VLN=&]K96XI*2![ M;W< ;F5W($1,97AE<D5X8V5P=&EO;BAT:&ES+"`B97AP96-T960 ='EP92!A M9G1E<B`G.B<B*3L-" D)"0D)=&]K(#T M"0D)?2!E;'-E(&EF("AI<U1Y<&4H=&]K+G1O:V5N*2D >PT*"0D)"2\O(&5N M*#L M;VME;B`]/2!43TLN5$]+<F-U<FQY*2!B<F5A:SL-" T*"0D)"2\O($YE960 M86X :61E;G1I9FEE<CH-" D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI M"69O<B`H.SLI('L-" D)"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"0D) M:68 *'1O:RYT;VME;B`]/2!43TLN5$]+8V]M;6$I(&)R96%K.PT*"0D)"0D) M96QS92!I9B`H=&]K+G1O:V5N(#T](%1/2RY43TMR8W5R;'DI(&)R96%K.PT* M"0D)"0D)96QS92!E=BYV86QU92!^/2!T;VMT;W-T<EMT;VLN=&]K96Y=.PT* M:"D 96XN=F%L=65S+FQE;F=T:"`](&5N+G9A;'5E<RYL96YG=& *B`R.PT* M"0D)"65N+G9A;'5E<UMI72`](&5V.PT*"0D)"2LK:3L-" T*"0D)"6EF("AT M5&]K96XH=&]K+"!43TLN5$]+8V]M;6$L("(G+"<B*3L-" D)"7T-" D)"65N M<'5B;&EC. H)"2\O(%!A<G-E('1H92!M;V1U;&4Z" D)=F]I9"!G;R I('L* M"0D):6YT"0EI;F1E;G0 /2`P.PH*"0D)<F5S=&%R=" I.PH)"0EF;W( *#L[ M*2![" D)"0E4;VME;BH)=&]K+"!N=&]K.PH*"0D)"2\O($=R86( =&AE(&YE M>'0 =&]K96X 9G)O;2!T:&4 9FEL92P 82!N=6QL('1O:V5N(&ES('1H92!E M;F0 ;V8 =&AE(&9I;&4Z" D)"0ET;VL /2!N97AT5&]K96XH*3L*"0D)"6EF M("AT;VL :7, ;G5L;"D 8G)E86L[" H)"0D)9&5B=6< >PH)"0D)"2\O(%1H M:7, 9'5M<', ;W5T('1H92!V87)I;W5S('1O:V5N<R`H8F%S:6-A;&QY(')E M9F]R;6%T<R!T:&4 <V]U<F-E*3H*"0D)"0EI9B`H=&]K+G1O:V5N(#T](%1/ M2RY43TMI9&5N=&EF:65R*0H)"0D)"0EP<FEN=&8H(B4N*G, (BP =&]K+FED M96YT*3L*"0D)"0EE;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2V-H87)V M*0H)"0D)"0EP<FEN=&8H(B<E+BIS)R`B+"!T;VLN:61E;G0I.PH)"0D)"65L M<V4 :68 *'1O:RYT;VME;B`]/2!43TLN5$]+<W1R:6YG*0H)"0D)"0EP<FEN M=&8H(EPB)2XJ<UPB("(L('1O:RYI9&5N="D[" D)"0D)96QS92!I9B`H=&]K M+G1O:V5N(#T](%1/2RY43TMI;G0S,G8I" D)"0D)"7!R:6YT9B B)2XJ<R`B M+"!T;VLN:61E;G0I.PH)"0D)"65L<V4*"0D)"0D)<')I;G1F*"(E+BIS("(L M('1O:W1O<W1R6W1O:RYT;VME;ETI.PH*"0D)"0EN=&]K(#T <&5E:U1O:V5N M*"D[" H)"0D)"2\O($EN9&5N=&%T:6]N. H)"0D)"6EF(" A*&YT;VL :7, M;G5L;"DI" D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+ M<F-U<FQY*0H)"0D)"0D)+2UI;F1E;G0[" H)"0D)"6EF("AT;VLN=&]K96X M/3T 5$]++E1/2VQC=7)L>2D >PH)"0D)"0DK*VEN9&5N=#L*"0D)"0D)<')I M;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN="!I(#T ,#L :2`\(&EN9&5N=#L M*RMI*2!P<FEN=&8H(EQT(BD[" D)"0D)?2!E;'-E(&EF(" H=&]K+G1O:V5N M(#T](%1/2RY43TMS96UI8V]L;VXI('Q\("AT;VLN=&]K96X /3T 5$]++E1/ M2W)C=7)L>2DI('L*"0D)"0D)<')I;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN M="!I(#T ,#L :2`\(&EN9&5N=#L *RMI*2!P<FEN=&8H(EQT(BD[" D)"0D) M?0H*"0D)"7T 96QS92![" H)"0D)"2\O(%!A<G-E(&$ ;6]D=6QE. T*"0D) M"0ES=VET8V *'1O:RYT;VME;BD >PT*"0D)"0D)8V%S92!43TLN5$]+97AT M*%1/2RY43TML<&%R96XL("(G*"<B*3L-" D)"0D)"0EC:&%R6UT);&EN:V%G M92`](&5X<&5C="A43TLN5$]+:61E;G1I9FEE<BP (FED96YT:69I97(B*2YI M9&5N=#L-" D)"0D)"0EE>'!E8W0H5$]++E1/2W)P87)E;BP (B<I)R(I.PT* M"0D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+8V]L;VXI M;'-E(&EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![ M;G0 /2!L:6YK86=E.PT*"0D)"0D)"7T-" D)"0D)"0EB<F5A:SL-" D)"0D) M"7T-" T*"0D)"0D)+R\ 4W1A<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO M;B!D969I;FET:6]N. T*"0D)"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D) M8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N<S Z" D)"0D)"6-A<V4 5$]+ M3TLN5$]+=6YS-C0Z" D)"0D)"6-A<V4 5$]++E1/2V9L;V%T,S(L(%1/2RY4 M:6UA9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I M;F%R>3 P. H)"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC M2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET M"0D)+R\ 0V]N<W1R=6-T('1H92!T>7!E(&]F('1H92!I9&5N=&EF:65R. T* M"0D)"0D)"71Y<&4N;&5N9W1H(#T ,3L-" D)"0D)"0ET>7!E6S!=(#T =&]K M.PT*"0D)"0D)"7=H:6QE(" H;G1O:R`](&YE>'14;VME;B I*2YT;VME;B`A M/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"0D)"0ET>7!E+FQE;F=T:"`] M('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)='EP95ML96YG=& +2`Q72`] M9FEE<CH-" D)"0D)"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I M9FEE<BP (FED96YT:69I97( 869T97( ='EP92(I.PT*"0D)"0D)"6ED96YT M(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D)"2\O($=E="!T:&4 86-C97-S(')I M9VAT<R!F;W( =&AI<R!I9&5N=&EF:65R. T*"0D)"0D)"6-U<F%R(#T 9V5T M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD >PT*"0D)"0D) M;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N=#L-" D)"0D) M"0D)9G5N8RYT>7!E(#T M92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E<W, /2!C=7)A M"0D)"61M;V1U;&4N9G5N8W,N;&5N9W1H(#T 9&UO9'5L92YF=6YC<RYL96YG M9G5N8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H- M"0D)+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D) M;G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`] M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)"0D)"0EE>'!E8W14 M"0D)?2!E;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI M<W0 =&AE<F5O9CH-" T*"0D)"0D)"0EF;W( *#L M5F%R* EV87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T :61E M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" D)"0D)"0D)"6EF("AN=&]K M+G1O:V5N(#T](%1/2RY43TMA<W-I9VXI('L-" D)"0D)"0D)"0EF;W( *#L[ M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D) M"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQB<F%C:V5T+"!43TLN5$]+<F)R86-K M970I.PT*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U M<FQY*0T*"0D)"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]+ M(#T](%1/2RY43TMS96UI8V]L;VXI(&)R96%K.PT*"0D)"0D)"0D)"7T-" D) M"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B M<F5A:SL-" D)"0D)"0D)"7T 96QS92!I9B`H;G1O:RYT;VME;B`A/2!43TLN M5$]+8V]M;6$I('L-" D)"0D)"0D)"0DO+R!-=7-T(&)E(&UO<F4 ='EP93H- M" D)"0D)"0D)"0EF;W( *#L M5&]K96XH*3L-" D)"0D)"0D)"0D)+R\ 5$]$3SH ($AA;F1L92!A9&1I;F< M='EP92!I;F9O+ T*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN M5$]+87-S:6=N*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X M/3T 5$]++E1/2V-O;6UA*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN M?0T*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMS96UI8V]L M;VXI(&)R96%K.PT*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY4 M3TMA<W-I9VXI('L-" D)"0D)"0D)"0D)9F]R(" [.RD >PT*"0D)"0D)"0D) M"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN M=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)"0D)"0D)"7-K:7!. M97-T*%1/2RY43TML8G)A8VME="P 5$]++E1/2W)B<F%C:V5T*3L-" D)"0D) M"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T M"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]++E1/2W)C=7)L M;6$I(&)R96%K.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]+ M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W-E;6EC;VQO;BD 8G)E86L[ M;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0D)"65X<&5C=%1O:V5N*&YT;VLL M(%1/2RY43TMI9&5N=&EF:65R+"`B:61E;G1I9FEE<B(I.PT*"0D)"0D)"0D) M"0D)"7T-" H)"0D)"0EC87-E(%1/2RY43TMC;&%S<SH >PH)"0D)"0D)1$-L M87-S* D)8VQS(#T M8VQA<W, =&\ =&AE(&UO9'5L93H*"0D)"0D)"61M;V1U;&4N8VQA<W-E<RYL M96YG=& /2!D;6]D=6QE+F-L87-S97,N;&5N9W1H("L ,3L*"0D)"0D)"61M M;V1U;&4N8VQA<W-E<UML96YG=& +2`Q72`](&-L<SL-" D)"0D)"0D-" D) M"0D)8G)E86L[" D)"0D)"7T-" D)"0D)"6-A<V4 5$]++E1/2VEM<&]R=#H M>PH)"0D)"0D)1$EM<&]R="H):6UP(#T <&%R<V5);7!O<G0H*3L*" D)"0D) M"0DO+R!!9&0 =&AE(&EM<&]R="!T;R!T:&4 ;6]D=6QE. H)"0D)"0D)9&UO M9'5L92YI;7!O<G1S+FQE;F=T:"`](&1M;V1U;&4N:6UP;W)T<RYL96YG=& M.PT*"0D)"0D)"6)R96%K.PH)"0D)"0E]" D)"0D)"6-A<V4 5$]++E1/2VUO M9'5L93H >PH)"0D)"0D)8VAA<EM="6UO9#L*" D)"0D)"0DO+R!'970 =&AE M(&UO9'5L92=S(&ED96YT:69I97(Z" D)"0D)"0EW:&EL92`H*&YT;VL /2!N M97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)"0D) M"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0H)"0D) M"0D)"0EM;V0 ?CT ;G1O:RYI9&5N=#L*"0D)"0D)"0EE;'-E(&EF("AN=&]K M+G1O:V5N(#T](%1/2RY43TMD;W0I" D)"0D)"0D)"6UO9"!^/2`B+B([" D) M"0D)"0E]" H)"0D)"0D)9&UO9'5L92YN86UE(#T ;6]D.PT*"0D)"0D)"6%R M1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)"0D)"0EB<F5A M;6]D=6QE+G-T<G5C=',N;&5N9W1H(#T 9&UO9'5L92YS=')U8W1S+FQE;F=T M3TMU;FEO;CH >PT*"0D)"0D)"413=')U8W0J"7-T(#T <&%R<V53=')U8W0H M*3L-" T*"0D)"0D)"61M;V1U;&4N=6YI;VYS+FQE;F=T:"`](&1M;V1U;&4N M9W1H("T ,5T /2!S=#L-" D)"0D)"0EB<F5A:SL-" D)"0D)"7T-" D)"0D) M"6-A<V4 5$]++E1/2V5N=6TZ('L-" D)"0D)"0E$16YU;2H)"7-T(#T <&%R M;V1U;&4N96YU;7,N;&5N9W1H("L ,3L-" D)"0D)"0ED;6]D=6QE+F5N=6US M>PT*"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0T*"0D) M;6$M<V5P87)A=&5D(&QI<W0 ;V8 <&%R86UE=&5R<SH-"F-H87);72!P87)M M/2`B+"`B.PT*"0EI9B`H*'!A<FTN;6]D:69I97( )B!A8V-E<W--;V1I9FEE M<BYA;4EN3W5T*2`]/2!A8V-E<W--;V1I9FEE<BYA;4]U="D-" D)"7, ?CT M(F]U="`B.PT*"0EE;'-E(&EF(" H<&%R;2YM;V1I9FEE<B`F(&%C8V5S<TUO M9&EF:65R+F%M26Y/=70I(#T M"0ES('X](")I;F]U="`B.PT*"0ES('X]('1Y<&53=')I;F<H<&%R;2YT>7!E M:60 9'5M<%-T<G5C="A$4W1R=6-T("IS="P :6YT(&EN9&5N="P 8F]O;"!I M:2`\(&EN9&5N=#L *RMI*2!I;F1S='( ?CT (EQT(CL-" T*"7!R:6YT9B B M*'-T+FYA;64 :7, ;G5L;"D-" D)<')I;G1F*")[7&XB*3L*"65L<V4*"0EP M" D)<')I;G1F*"(E+BIS7'0B+"!I;F1S='(I.PT*"0EP<FEN=&8H(B4N*G-< M="4N*G,[7&XB+"!T>7!E4W1R:6YG*'9A<BYT>7!E*2P =F%R+FYA;64I.PT* M"7T-" T*"69O<F5A8V *$1&=6YC*B!F=6YC.R!S="YF=6YC<RD >PT*"0EP M<W,I('L-" D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H M8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 (BD[ M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN M9V4 (3T (D0B*0T*"0D)<')I;G1F*")E>'1E<FX *"4N*G,I("(L(&9U;F,N M<&53=')I;F<H9G5N8RYT>7!E*2P 9G5N8RYN86UE+"!P87)M;&ES="AF=6YC M<FEN=&8H(GU<;EQN(BD["GT-" T*+R\ 4VEM<&QE(&UA:6X <')O9W)A;3H* M:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1%1A9W,);&5X.PH)1FEL90ED M9FEL93L*" EI9B`H87)G<RYL96YG=& /#T ,2D >PH)"7!R:6YT9B B)2XJ M<R`\9FEL92YD/EQN(BP 87)G<ULP72D[" D)<F5T=7)N("TQ.PH)?0H*"2\O M($]P96X =&AE(&9I;&4Z" ED9FEL92`](&YE=R!&:6QE*&%R9W-;,5TI.PH) M+R\ 4V5N9"!I;B!T:&4 8G5F9F5R('1O('1H92!L97AE<CH*"6-H87);70ES M='( /2!D9FEL92YR96%D4W1R:6YG*&1F:6QE+G-I>F4H*2D[" H);&5X(#T M;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ;&]O<V4Z M" EL97 N9V\H*3L*" DO+R!297!O<G0 =&AE(')E<W5L=',Z" H)<')I;G1F M*")M;V1U;&4 )2XJ<R![7&XB+"!L97 N9&UO9'5L92YN86UE*3L*" EP<FEN M=&8H(EQT<'5B;&EC("!I;7!O<G1S("(I.PH)9F]R96%C:"`H:6YT(&DL($1) M;7!O<G0J(&EM.R!L97 N9&UO9'5L92YI;7!O<G1S*2![" D):68 *&EM+F%C M8V5S<R`]/2!A8V-E<W-2:6=H=',N87)0=6)L:6,I('L*"0D):68 *&D /B`P M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L(&EM+FYA;64I.PH) M"7T*"7T*"7!R:6YT9B B.UQN(BD[" H)<')I;G1F*")<='!R:79A=&4 :6UP M;W)T<R`B*3L*"69O<F5A8V *&EN="!I+"!$26UP;W)T*B!I;3L ;&5X+F1M M;V1U;&4N:6UP;W)T<RD >PH)"6EF("AI;2YA8V-E<W, /3T 86-C97-S4FEG M"0D)<')I;G1F*"(E+BIS(BP :6TN;F%M92D[" D)?0H)?0H)<')I;G1F*"([ M7&Y<;B(I.PH*"2\O($5N=6US. H)9F]R96%C:"`H1$5N=6TJ(&5N.R!L97 N M9&UO9'5L92YE;G5M<RD >PH)"7!R:6YT9B B7'1E;G5M("4N*G, >UQN(BP M96XN;F%M92D[" D)9F]R96%C:"`H1$5N=6TN96YU;59A;'5E(&5V.R!E;BYV M86QU97,I('L-" D)"6EF("AE=BYV86QU92!I<R!N=6QL*0T*"0D)"7!R:6YT M9B B7'1<="4N*G,L7&XB+"!E=BYN86UE*3L*"0D)96QS90H)"0D)<')I;G1F M*")<=%QT)2XJ<R`]("4N*G,L7&XB+"!E=BYN86UE+"!E=BYV86QU92D[" D) M?0H)"7!R:6YT9B B7'1]7&Y<;B(I.PH)?0H*"2\O(%-T<G5C=',Z" EF;W)E M86-H("A$4W1R=6-T*B!S=#L ;&5X+F1M;V1U;&4N<W1R=6-T<RD >PT*"0ED M;W)E86-H("A$4W1R=6-T*B!S=#L M. H)9F]R96%C:"`H1%9A<BH =G([(&QE>"YD;6]D=6QE+G9A<G,I('L*"0EP M<FEN=&8H(EQT)2XJ<UQT)2XJ<SM<;B(L('1Y<&53=')I;F<H=G(N='EP92DL M('9R+FYA;64I.PH)?0H):68 *&QE>"YD;6]D=6QE+G9A<G,N;&5N9W1H(#X M,"D <')I;G1F*")<;B(I.PH*"2\O($-L87-S97,Z" EF;W)E86-H("A$0VQA M<W,J(&-L.R!L97 N9&UO9'5L92YC;&%S<V5S*2![" D):6YT"6H /2`P.PH* M"0EP<FEN=&8H(EQT8VQA<W, )2XJ<R(L(&-L+FYA;64I.PH)"6EF("AC;"YI M:6YT97)F86-E<RYL96YG=& /B`P*2!P<FEN=&8H(B`Z("(I.PH*"0EF;W)E M86-H("AC:&%R6UT =CL 8VPN:6EN=&5R9F%C97,I('L*"0D):68 *&H /B`P M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L('8I.PH)"0DK*VH[ M" D)?0H)"7!R:6YT9B B('M<;B(I.PH*"0DO+R!687)I86)L97,Z" D)9F]R M*3L-" D)"7-W:71C:"`H=F%R+F%C8V5S<RD >PT*"0D)"6-A<V4 86-C97-S M"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN=&8H(G!R:79A M=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4')O=&5C M8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN=&8H(G!A8VMA9V4 (BD[(&)R M96%K.PT*"0D)?0T*"0D)<')I;G1F*"(E+BIS7'0E+BIS.UQN(BP ='EP95-T M<FEN9RAV87(N='EP92DL('9A<BYN86UE*3L-" D)?0T*"0EI9B`H8VPN=F%R M;W)S. T*"0EF;W)E86-H("A$1G5N8RH 9G5N8SL 8VPN8W1O<G,I('L-" D) M"7!R:6YT9B B7'1<="(I.PT*"0D)<W=I=&-H("AF=6YC+F%C8V5S<RD >PT* M"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H(G!U8FQI M.B!P<FEN=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S M4FEG:'1S+F%R4')O=&5C=&5D.B!P<FEN=&8H(G!R;W1E8W1E9"`B*3L 8G)E M(G!A8VMA9V4 (BD[(&)R96%K.PT*"0D)?0T*"0D)<')I;G1F*")T:&ES*"4N M*G,I.UQN(BP <&%R;6QI<W0H9G5N8RYP87)M<RDI.PT*"0E]" T*"0DO+R!$ M97-T<G5C=&]R<SH-" D)9F]R96%C:"`H1$9U;F,J(&9U;F,[(&-L+F1T;W)S M<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F M*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R M4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)"0EC87-E M(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 M(BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H M<')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R:6YT9B B M8RYA8V-E<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH M<')I;G1F*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG M:'1S+F%R4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D) M"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T M96-T960 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C M:V%G93H <')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R M:6YT9B B)2XJ<UQT)2XJ<R E+BIS*3M<;B(L('1Y<&53=')I;F<H9G5N8RYT M" D)<')I;G1F*")<='U<;EQN(BD[" E]" T*"2\O($9U;F-T:6]N<SH-" EF M;W)E86-H("A$1G5N8RH 9G5N8SL ;&5X+F1M;V1U;&4N9G5N8W,I('L-" D) M87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F*")P=6)L:6, (BD[ M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN M=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N M87)0<F]T96-T960Z('!R:6YT9B B<')O=&5C=&5D("(I.R!B<F5A:SL-" D) M"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H <')I;G1F*")P86-K86=E M("(I.R!B<F5A:SL-" D)?0T*"0EP<FEN=&8H(B4N*G-<="4N*G,H)2XJ<RD[ M7&XB+"!T>7!E4W1R:6YG*&9U;F,N='EP92DL(&9U;F,N;F%M92P <&%R;6QI '<FX ,#L*?2YP ` end
Dec 18 2004
In article <cq30e7$31fq$1 digitaldaemon.com>, James Dunne says...Hey all again, I thought I'd release my D parser now. This puppy is still very much a work in progress, but will successfully parse relatively simple D programs. Writing a parser isn't very difficult, it's just a lot of work ;). This module uses my dlexer module I released in this thread. And so, it is a good(?) example of how to use the dlexer module. The point of this module is to parse D programs for code-completion purposes. A few simple structures are used to represent the module's information. An example program is supplied which dumps out the parsed module's structs, enums, classes, functions, and variables. I should mention that functionality is somewhat limited: version blocks aren't parsed correctly, and the type parsing on identifiers and functions is somewhat lacking. I do intend to fix these issues in the next couple of days. Test it out on some D programs you have lying around (or the phobos library for a good kick). Regards, James Dunne begin 0644 dtags.d M=&\ 9&ES=')I8G5T92!T:&ES(&UO9'5L92!I;B!A;GD 9F]R;2!Y;W4 ;&EK M92X ($D ;VYL>2!A<VL =&AA="!Y;W4-"B\O(&=I=F4 8W)E9&ET('=H97)E M(&-R961I="!I<R!D=64N("!9;W4 ;6%Y(&UA:V4 ;6]D:69I8V%T:6]N<R!T M;R!T:&ES(&UO9'5L92X ($EF('EO=2!D;PT*+R\ <V\L('EO=2!M87D <')O M=FED92!Y;W5R(&UO9&EF:6-A=&EO;G, <'5B;&EC;'DL(&)U="!Y;W4 87)E M(&YO="!R97%U:7)E9"!T;RX-" T*+R\ 5$]$3R!L:7-T. T*+R\ +2!C;W)R M96-T('!A<G-I;F< ;V8 ='EP92!D96-L87)A=&EO;G, :6X :61E;G1I9FEE M<G, 86YD(&9U;F-T:6]N<PT*+R\ +2!I;G1E<F9A8V4 <&%R<VEN9PT*+R\ M+2!V97)S:6]N('M](&)L;V-K<PT*+R\ +2!C;W)R96-T(&5X=&5R;B`H='EP M92D >R!](&)L;V-K<RP (F5X=&5R;B`H='EP92DZ(B!A;F0 (F5X=&5R;B`H M='EP92D 9&5C;"( =V]R:RX-"B\O("T 8V]M<&QE=&4 86-C97-S(&UO9&EF M:65R<R!O;B!F=6YC=&EO;G,-" T*;6]D=6QE"61T86=S.PH*:6UP;W)T"7-T M9"YS=')E86T["FEM<&]R=`ES=&0N<W1R:6YG.PII;7!O<G0)<W1D+F-T>7!E M.PH*:6UP;W)T"61L97AE<CL*"B\O('!U8FQI8RP <')I=F%T92P 971C+B!A M8V-E<W,Z"F5N=6T 86-C97-S4FEG:'1S(#H :6YT('L*"6%R56YD969I;F5D M(#T +3$L" EA<E!U8FQI8RP*"6%R4&%C:V%G92P*"6%R4')O=&5C=&5D+`H) M87)0<FEV871E"GT[" HO+R!C;VYS="P 9FEN86PL(&%U=&\L(&5T8RX ;6]D M:69I97)S. IE;G5M(&%C8V5S<TUO9&EF:65R(#H =6EN="![" EA;4-O;G-T M;V1U;&4 :6UP;W)T. IS=')U8W0 1$EM<&]R="![" EC:&%R6UT)"0EN86UE M.PH)86-C97-S4FEG:'1S"6%C8V5S<SL)"2\O(&UA:6YL>2!F;W( <'5B;&EC M(&%N9"!P<FEV871E('%U86QI9FEE<G,*?3L*"B\O($$ =F%R:6%B;&4Z"G-T M<G5C="!$5F%R('L*"6-H87);70D);F%M93L*"51O:V5N*EM="71Y<&4[" H) M86-C97-S4FEG:'1S"6%C8V5S<SL*"6%C8V5S<TUO9&EF:65R"6UO9&EF:65R M.PDO+R!M86EN;'D 9F]R(&EN+"!O=70L(&%N9"!I;F]U=`I].PH*+R\ 06X M5$]+"0D)='EP93L)"0DO+R!T>7!E(&]F('9A;'5E<R!I;B!E;G5M97)A=&EO M; H*"7-T<G5C="!E;G5M5F%L=64 >PH)"6-H87);70EN86UE.PH)"6-H87); M70EV86QU93L*"7T*"65N=6U686QU95M="79A;'5E<SL*?3L*"B\O($$ <W1R M=6-T=7)E. IS=')U8W0 1%-T<G5C="![" EC:&%R6UT)"6YA;64[" H)1%9A M<BI;70D)=F%R<SL*"41&=6YC*EM="69U;F-S.PT*"413=')U8W0J6UT)<W1R M=6-T<RP =6YI;VYS.PT*?3L*"B\O($$ 9G5N8W1I;VXZ"G-T<G5C="!$1G5N M8R![" EC:&%R6UT)"6YA;64[" E4;VME;BI;70ET>7!E.PT*"6-H87);70D) M;&EN:V%G93L*" E$5F%R*EM="0EP87)M<RP =F%R<SL*"413=')U8W0J6UT) M<W1R=6-T<RP =6YI;VYS.PH)1$5N=6TJ6UT)96YU;7,[" E$1G5N8RI;70EF M=6YC<SL*" EA8V-E<W-2:6=H=',)86-C97-S.PH)86-C97-S36]D:69I97() M;6]D:69I97(["GT[" HO+R!!;B!I;G1E<F9A8V4Z"G-T<G5C="!$26YT97)F M86-E('L*"6-H87);70D)"6YA;64[" EA8V-E<W-2:6=H=',)86-C97-S.PH) M86-C97-S36]D:69I97();6]D:69I97([" H)+R\ 26YH97)I=&5D(&EN=&5R M9F%C97,Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$1G5N8RI;70EF=6YC M<SL*?3L*"B\O($$ 8VQA<W,Z"G-T<G5C="!$0VQA<W, >PH)8VAA<EM="0D) M;F%M93L*"6%C8V5S<U)I9VAT<PEA8V-E<W,[" EA8V-E<W--;V1I9FEE< EM M;V1I9FEE<CL*" DO+R!);FAE<FET960 :6YT97)F86-E<R`H86YD(&-L87-S M97,I+"!C86XG="!D:7-T:6YG=6ES:"!B971W965N(&$ 8VQA<W, ;W( :6YT M97)F86-E(&AE<F4Z" EC:&%R6UU;70EI:6YT97)F86-E<SL*" E$4W1R=6-T M*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM="65N=6US.PH)1$9U;F,J M6UT)9G5N8W,L(&-T;W)S+"!D=&]R<SL*"41687(J6UT)"79A<G,["GT[" HO M+R!!(&UO9'5L93H*<W1R=6-T($1-;V1U;&4 >PH)8VAA<EM="6YA;64[" H) M1$EM<&]R="I;70EI;7!O<G1S.PH)1$-L87-S*EM="6-L87-S97,L(&EN=&5R M9F%C97,[" E$4W1R=6-T*EM="7-T<G5C=',L('5N:6]N<SL*"41%;G5M*EM= M"65N=6US.PH)1$9U;F,J6UT)9G5N8W,[" E$5F%R*EM="0EV87)S.PI].PH* M8VQA<W, 1%1A9W, .B!$3&5X97( >PH)<')I=F%T93H*"0EA8V-E<W-2:6=H M;G0L(&QN:T1E9F%U;'0[" H)<'5B;&EC. H)"2\O(%1H92!P=6)L:6-L>2!A M=F%I;&%B;&4 ;6]D=6QE('1A9R!S=')U8W1U<F4Z" D)1$UO9'5L92H)9&UO M9'5L93L*" D)+R\ 3&]A9"!U<"!T:&4 ;6]D=6QE('-O=7)C92!C;V1E. H) M"71H:7,H8VAA<EM=(&9I;&5N86UE+"!C:&%R6UT <W)C*2![" D)"2\O($QO M860 =7` =&AE('-O=7)C92!F;W( =&AE(&QE>&5R. H)"0ES=7!E<BAF:6QE M;F%M92P <W)C*3L*" D)"2\O($-R96%T92!A(&1E9F%U;'0 ;6]D=6QE('-T M<G5C='5R93H*"0D)9&UO9'5L92`](&YE=R!$36]D=6QE.PH)"0ED;6]D=6QE M+FYA;64 /2!F:6QE;F%M93L*" D)"2\O(%-E="!T:&4 9&5F875L="!A8V-E M<W, <FEG:'1S(&9O<B!N97=L>2!C<F5A=&5D(&ED96YT:69I97)S. H)"0EA M<D1E9F%U;'0 /2!A8V-E<W-2:6=H=',N87)0=6)L:6,[" D)"6%R0W5R<F5N M="`](&%C8V5S<U)I9VAT<RYA<E5N9&5F:6YE9#L-" D)"6QN:T1E9F%U;'0 M" D)+R\ 17AP96-T(&$ =&]K96X 86YD('1H<F]W(&%N(&5X8V5P=&EO;B!I M9B!N;W0 9F]U;F0Z" D)5&]K96XJ"65X<&5C="A43TL =F%L=64L(&-H87); M72!M<V<I('L*"0D)5&]K96XJ"6YT;VL /2!N97AT5&]K96XH*3L*"0D):68 M86QU92D*"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X M<&5C=&5D("( ?B!M<V<I.PH)"0ER971U<FX ;G1O:SL*"0E]" H)"2\O($5X M<&5C="!A('1O:V5N(&%N9"!T:')O=R!A;B!E>&-E<'1I;VX :68 ;F]T(&9O M=6YD. H)"51O:V5N* EE>'!E8W14;VME;BA4;VME;B`J=&]K+"!43TL =F%L M=64L(&-H87);72!M<V<I('L*"0D):68 *'1O:RYT;VME;B`A/2!V86QU92D* M"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP (F5X<&5C=&5D M("( ?B!M<V<I.PH)"0ER971U<FX =&]K.PH)"7T-" T*"0DO+R!)<R!T:&ES M('1O:V5N(&$ 8F%S:6, ='EP93\-" D)8F]O;"!I<U1Y<&4H5$]+('9A;'5E M9#H M92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D)"6-A<V4 5$]++E1/ M5$]++E1/2W5N<S8T. H)"0D)8V%S92!43TLN5$]+9FQO870S,BP 5$]++E1/ M9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R M93L-" D)"7T-" D)"7)E='5R;B!F86QS93L*"0E]" H)"2\O($=E="!T:&4 M8W5R<F5N="!O<B!D969A=6QT(&%C8V5S<R!R:6=H=#H*"0EA8V-E<W-2:6=H M=',)9V5T06-C97-S*"D >PH)"0EA8V-E<W-2:6=H=',)87( /2!A8V-E<W-2 M:6=H=',N87)5;F1E9FEN960[" D)"6EF("AA<D-U<G)E;G0 (3T 86-C97-S M4FEG:'1S+F%R56YD969I;F5D*2![" D)"0EA<B`](&%R0W5R<F5N=#L*"0D) M"2\O($EN=F%L:61A=&4 =&AE(&-U<G)E;G0 86-C97-S(')I9VAT. H)"0D) M<V4 >PH)"0D)+R\ 57-E('1H92!D969A=6QT(&EF(&YO(&-U<G)E;G0 86-C M97-S('-P96-I9FEE9#H*"0D)"6%R(#T 87)$969A=6QT.PH)"0E]" D)"7)E M875L="!F=6YC=&EO;B!L:6YK86=E. T*"0EC:&%R6UT)9V5T3&EN:V%G92 I M('L-" D)"6-H87);70EL:6YK86=E(#T (D0B.PT*"0D):68 *&QN:T-U<G)E M;G0 :7, ;G5L;"D >PT*"0D)"6QI;FMA9V4 /2!L;FM$969A=6QT.PT*"0D) M?2!E;'-E('L-" D)"0EL:6YK86=E(#T ;&YK0W5R<F5N=#L- M=7)R96YT(#T ;G5L;#L-" D)"7T-" D)"7)E='5R;B!L:6YK86=E.PT*"0E] M" H)"2\O(%-K:7` ;W9E<B!A('-E="!O9B!N97-T960 =&]K96YS. T*"0EV M;VED('-K:7!.97-T*%1/2R!L+"!43TL <BD >PT*"0D):6YT"6YE<W0 /2`P M.PT*"0D)9F]R(" [.RD >PT*"0D)"51O:V5N* ET;VL /2!N97AT5&]K96XH M*3L-" D)"0EI9B`H=&]K(&ES(&YU;&PI(&)R96%K.PT*"0D)"6EF("AT;VLN M=&]K96X /3T ;"D *RMN97-T.PT*"0D)"6EF("AT;VLN=&]K96X /3T <BD M. T*"0EV;VED(')E861087)A;65T97)S*&EN;W5T($1687(J6UT <&%R;7,I M('L-" D)"51O:V5N* D)"71O:SL-" D)"6%C8V5S<TUO9&EF:65R"6YE>'1A M;3L-" T*"0D);F5X=&%M(#T 86-C97-S36]D:69I97(N86U);CL-" T*"0D) M9F]R(" [.RD >PT*"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT M=&-H("AT;VLN=&]K96XI('L-" D)"0D)8V%S92!43TLN5$]+:6XZ"0EN97AT M86T /2!A8V-E<W--;V1I9FEE<BYA;4EN.R!B<F5A:SL-" D)"0D)8V%S92!4 M3TLN5$]+;W5T. EN97AT86T /2!A8V-E<W--;V1I9FEE<BYA;4]U=#L 8G)E M5$]++E1/2W9O:60Z" D)"0D)8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N M<S Z" D)"0D)8V%S92!43TLN5$]+:6YT,38L(%1/2RY43TMU;G,Q-CH*"0D) M"0EC87-E(%1/2RY43TMI;G0S,BP 5$]++E1/2W5N<S,R. H)"0D)"6-A<V4 M"6-A<V4 5$]++E1/2VEM86=I;F%R>3,R+"!43TLN5$]+:6UA9VEN87)Y-C0L M(%1/2RY43TMI;6%G:6YA<GDX,#H*"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X M8V%S92!43TLN5$]+8VAA<BP 5$]++E1/2W=C:&%R+"!43TLN5$]+9&-H87(L M(%1/2RY43TMB:70Z" D)"0D)8V%S92!43TLN5$]+:61E;G1I9FEE<CH >PT* M"0D)=VAI;&4 *"AN=&]K(#T ;F5X=%1O:V5N*"DI+G1O:V5N("$](%1/2RY4 M"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I9FEE<BP (FED96YT M:69I97( 869T97( ='EP92(I.PT*"0D)"0D):61E;G0 /2!N=&]K+FED96YT M(&YE=R!$5F%R.PT*"0D)"0D)=F%R+FYA;64 /2!I9&5N=#L-" D)"0D)"79A M<BYT>7!E(#T ='EP93L-" D)"0D)"79A<BYM;V1I9FEE<B`](&YE>'1A;3L- M" T*"0D)"0D)<&%R;7,N;&5N9W1H(#T <&%R;7,N;&5N9W1H("L ,3L-" D) M" T*"0D)"0ED969A=6QT. T*"0D)"7T-" D)"7T-" D)?0T*" D)+R\ 4&%R M<V4 86X :6UP;W)T(&QI;F4Z" D)+R\ 4W1A<G1S(&%F=&5R(&EM<&]R="!T M;VME;BX*"0E$26UP;W)T*B!P87)S94EM<&]R=" I('L*"0D)1$EM<&]R="H) M:6UP.PH)"0EC:&%R6UT)"6ED96YT.PH)"0E4;VME;BH)"6YT;VL[" H)"0DO M+R!'970 =&AE(&EM<&]R="!I9&5N=&EF:65R. H)"0EW:&EL92`H*&YT;VL M/2!N97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH) M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I" D)"0D) M:61E;G0 ?CT ;G1O:RYI9&5N=#L*"0D)"65L<V4 :68 *&YT;VLN=&]K96X M/3T 5$]++E1/2V1O="D*"0D)"0EI9&5N="!^/2`B+B([" D)"7T*" D)"6EM M<"`](&YE=R!$26UP;W)T.PH)"0EI;7`N;F%M92`](&ED96YT.PH)"0EI;7`N M86-C97-S(#T 9V5T06-C97-S*"D[" D)"7)E='5R;B!I;7`[" D)?0H-" D) M+R\ 4&%R<V4 82!C;&%S<R!D969I;FET:6]N. H)"2\O(%-T87)T<R!A9G1E M;&%S<RH)"6-L<SL*"0D)8VAA<EM="0EI9&5N=#L*"0D)5&]K96XJ"0EN=&]K M.PT*"0D):6YT"0D);F5S=#L*" D)"2\O($-R96%T92!T:&4 1$-L87-S('-T M<G5C='5R93H*"0D)8VQS(#T M8VQA<W, :61E;G1I9FEE<CH*"0D)8VQS+FYA;64 /2!E>'!E8W0H5$]++E1/ M2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R(&-L87-S(BDN:61E;G0[ M+R\ 0VAE8VL 9F]R(&%N(&EN=&5R9F%C92!L:7-T. H)"0EN=&]K(#T ;F5X M=%1O:V5N*"D[" D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMC;VQO;BD M>PH)"0D)9F]R(" [.RD >PH)"0D)"6YT;VL /2!E>'!E8W0H5$]++E1/2VED M96YT:69I97(L(")I9&5N=&EF:65R(BD[" H)"0D)"2\O($%D9"!A(&YE=R!I M;G1E<F9A8V4Z" D)"0D)8VQS+FEI;G1E<F9A8V5S+FQE;F=T:"`](&-L<RYI M:6YT97)F86-E<RYL96YG=& *R`Q.PH)"0D)"6-L<RYI:6YT97)F86-E<UML M96YG=& +2`Q72`](&YT;VLN:61E;G0[" H)"0D)"6YT;VL /2!N97AT5&]K M96XH*3L*"0D)"0DO+R!!(&QE9G0M8W5R;'D_($)R96%K+ H)"0D)"6EF("AN M=&]K+G1O:V5N(#T](%1/2RY43TML8W5R;'DI(&)R96%K.PH)"0D)"2\O($UA M:V4 <W5R92!I="=S(&$ 8V]M;6$Z" D)"0D)97AP96-T5&]K96XH;G1O:RP M5$]++E1/2V-O;6UA+"`B)RPG(&]R("=[)R!A9G1E<B!I;G1E<F9A8V4B*3L* M"0D)"7T*"0D)?0H*"0D)+R\ 36%K92!S=7)E('=E)W)E(&%T(&$ ;&5F="UC M=7)L>2UB<F%C92`G>R<Z" D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML M8W5R;'DL("(G>R< 869T97( :6YT97)F86-E(&QI<W0 ;W( 8VQA<W, :61E M;G1I9FEE<B(I.PH-" D)"6YE<W0 /2`P.PH)"0EF;W( *#L M86-E<SH-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![ M("LK;F5S=#L 8V]N=&EN=64[('T-" D)"0EI9B`H;G1O:RYT;VME;B`]/2!4 M4&5E:R!A="!T:&4 ;F5X="!T;VME;B!T;R!S964 :68 :70G<R!A(&-O;&]N M(&]N;'D :68 =V4G<F4 :6X =&AE(&EM;65D:6%T92!C;&%S<R!S8V]P93H- M" D)"0EI9B`H*&YE<W0 /3T ,"D )B8 *'!E96M4;VME;B I+G1O:V5N(#T] M(%1/2RY43TMC;VQO;BDI('L-" D)"0D)+R\ 268 <V\L('1H96X =&AE(&-U M<G)E;G0 =&]K96X <VAO=6QD(&)E(&%N(&%C8V5S<PT*"0D)"0DO+R!M;V1I M9FEE<BX-" D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W!R:79A=&4I M"0D)"0EE;'-E(&EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMP<F]T96-T960I M" D)"0D)"6%R1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D) M"0D)96QS92!I9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<&%C:V%G92D-" D) M"65L<V4-" D)"0D)"71H<F]W(&YE=R!$3&5X97)%>&-E<'1I;VXH=&AI<RP M('L-" D)"0D)+R\ 0VAE8VL =&AE('1O:V5N. T*"0D)"0ES=VET8V *&YT M;VLN=&]K96XI('L-" D)"0D)"2\O(%-E="!T:&4 ;F5X="!U<V5D(&%C8V5S M<R!R:6=H=#H-" D)"0D)"6-A<V4 5$]++E1/2W!R:79A=&4Z"6%R0W5R<F5N M="`](&%C8V5S<U)I9VAT<RYA<E!R:79A=&4[(&)R96%K.PT*"0D)"0D)8V%S M92!43TLN5$]+<')O=&5C=&5D. EA<D-U<G)E;G0 /2!A8V-E<W-2:6=H=',N M87)0<F]T96-T960[(&)R96%K.PT*"0D)"0D)8V%S92!43TLN5$]+<'5B;&EC M" D)"0D)"6-A<V4 5$]++E1/2W!A8VMA9V4Z"6%R0W5R<F5N="`](&%C8V5S M:6UP;&5M96YT871I;VX-" D)"0D)"0EB<F5A:SL-" T*"0D)"0D)+R\ 4W1A M<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D) M"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D)8V%S92!43TLN5$]+:6YT."P M9FQO870X,#H*"0D)"0D)8V%S92!43TLN5$]+:6UA9VEN87)Y,S(L(%1/2RY4 M3TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I;F%R>3 P. H)"0D)"0EC87-E M(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC;VUP;&5X-C0L(%1/2RY43TMC M<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET. H)"0D)"0EC87-E(%1/2RY4 M/2`Q.PT*"0D)"0D)"71Y<&5;,%T /2!N=&]K.PT*"0D)"0D)"69O<B`H.SLI M('L-" D)"0D)"0D)=&]K(#T M;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I(&)R96%K.PT*"0D)"0D) M"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI(&)R96%K.PT*"0D) M"0D)"0ET>7!E+FQE;F=T:"`]('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D) M9B`H=&]K+G1O:V5N(#T](%1/2RY43TML<&%R96XI('L-" D)"0D)"0D)97AP M96-T*%1/2RY43TMM=6PL("(G*B<B*3L-" D)"0D)"0D):61E;G0 /2!E>'!E M?2!E;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT:69I97(I('L- M" D)"0D)"0D)+R\ 4F5A9"!T:&4 :61E;G1I9FEE<CH-" D)"0D)"0D):61E M8W5R87( /2!G971!8V-E<W,H*3L-" T*"0D)"0D)"71O:R`](&YE>'14;VME M;B I.PT*"0D)"0D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD M* EF=6YC(#T ;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N M=#L-" D)"0D)"0D)9G5N8RYT>7!E(#T M;F,N;&EN:V%G92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E M<W, /2!C=7)A<CL-" T*"0D)"0D)"0DO+R!!9&0 9G5N8W1I;VX =&\ 8VQA M8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H-" D) M+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D)=&]K M(#T M;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI<W0 =&AE M<F5O9CH-" T*"0D)"0D)"0EF;W( *#L M87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T M"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0D)=F%R+F%C M96YG=& *R`Q.PT*"0D)"0D)"0D)8VQS+G9A<G-;;&5N9W1H("T ,5T /2!V M(&)R96%K.PT*"0D)"0D)"0D)97AP96-T5&]K96XH=&]K+"!43TLN5$]+8V]M M;6$L("(G+"<B*3L-" T*"0D)"0D)"0D)=&]K(#T M"0D)"0D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI9&5N=&EF:65R+"`B M" D)"0D)"0D)"2\O($=E="!N97AT(&-O;6UA(&]R('-E;6EC;VQO;CH-" D) M+E1/2W1H:7,Z('L-" D)"0D)"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL- M" D)"0D)"0E4;VME;BH);G1O:SL-" T*"0D)"0D)"69U;F,N86-C97-S(#T M"0EC;',N8W1O<G,N;&5N9W1H(#T M"0EC87-E(%1/2RY43TMT:6QD93H >PT*"0D)"0D)"65X<&5C="A43TLN5$]+ M=&AI<RP (B=T:&ES)R!A9G1E<B`G?B<B*3L-" T*"0D)"0D)"41&=6YC* EF M=6YC(#T M"0D)+R\ 061D('1H92!D97-T<G5C=&]R. T*"0D)"0D)"6-L<RYD=&]R<RYL M96YG=& /2!C;',N9'1O<G,N;&5N9W1H("L ,3L-" D)"0D)"0EC;',N9'1O M(#T M96XL("(G*"<B*3L-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS M*3L-" T*"0D)"0D)"6YT;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0EI9B`H M;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D) M"0D)"65X<&5C=%1O:V5N*&YT;VLL(%1/2RY43TML8W5R;'DL("(G>R<B*3L- M" D)"0D)"0ES:VEP3F5S="A43TLN5$]+;&-U<FQY+"!43TLN5$]+<F-U<FQY M*3L-" D)"0D)"7T-" T*"0D)"0D)9&5F875L=#H-" D)"0D)"0D-" D)"0D) M87)T(&%F=&5R('-T<G5C="]U;FEO;B!T;VME;BX-" D)1%-T<G5C="H)<&%R M(#T M86UE(#T ;G5L;#L-" D)"6EF("AT;VLN=&]K96X /3T 5$]++E1/2VED96YT M:69I97(I('L-" D)"0ES="YN86UE(#T =&]K+FED96YT.PT*"0D)"71O:R`] M82!C=7)L>3H-" D)"65X<&5C=%1O:V5N*'1O:RP 5$]++E1/2VQC=7)L>2P M(B=[)R(I.PT*"0D)+R\ 4F5A9"!I;B!A;&P =&AE(&9U;F-T:6]N<RP =F%R M:6%B;&5S+"!S=')U8W1S+"!A;F0 =6YI;VYS. T*"0D)9F]R(" [.RD >PT* M"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"6EF("AT;VLN=&]K96X /3T M82!V87)I86)L92!O<B!F=6YC=&EO;B!D969I;FET:6]N. T*"0D)"0EC87-E M"0D)8V%S92!43TLN5$]+:6YT,S(L(%1/2RY43TMU;G,S,CH*"0D)"0EC87-E M(%1/2RY43TMI;G0V-"P 5$]++E1/2W5N<S8T. H)"0D)"6-A<V4 5$]++E1/ M"0EC87-E(%1/2RY43TMI;6%G:6YA<GDS,BP 5$]++E1/2VEM86=I;F%R>38T M"6-A<V4 5$]++E1/2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R M+"!43TLN5$]+8FET. H)"0D)"6-A<V4 5$]++E1/2VED96YT:69I97(Z('L- M" D)"0D)"51O:V5N* EN=&]K.PT*"0D)"0D)8VAA<EM="6ED96YT.PT*"0D) M"0D)5&]K96XJ6UT)='EP93L-" T*"0D)"0D)+R\ 0V]N<W1R=6-T('1H92!T M>7!E(&]F('1H92!I9&5N=&EF:65R. T*"0D)"0D)='EP92YL96YG=& /2`Q M.PT*"0D)"0D)='EP95LP72`]('1O:SL-" D)"0D)"7=H:6QE(" H;G1O:R`] M(&YE>'14;VME;B I*2YT;VME;B`A/2!43TLN5$]+:61E;G1I9FEE<BD >PT* M"0D)"0D)"71Y<&4N;&5N9W1H(#T ='EP92YL96YG=& *R`Q.PT*"0D)"0D) M+R!296%D('1H92!I9&5N=&EF:65R. T*"0D)"0D)97AP96-T5&]K96XH;G1O M:RP 5$]++E1/2VED96YT:69I97(L(")I9&5N=&EF:65R(&%F=&5R('1Y<&4B M*3L-" D)"0D)"6ED96YT(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D);G1O:R`] M(&YE>'14;VME;B I.PT*"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/ M2VQP87)E;BD >PT*"0D)"0D)"2\O($ET)W, 82!F=6YC=&EO;CH-" D)"0D) M"0E$1G5N8RH)9G5N8R`](&YE=R!$1G5N8SL-" D)"0D)"0EF=6YC+FYA;64 M/2!I9&5N=#L-" D)"0D)"0EF=6YC+G1Y<&4 /2!T>7!E+F1U<#L-" D)"0D) M(#T <W0N9G5N8W,N;&5N9W1H("L ,3L-" D)"0D)"0ES="YF=6YC<UML96YG M97( ;&ES=#H-" D)"0D)"0ER96%D4&%R86UE=&5R<RAF=6YC+G!A<FUS*3L- M"0D)"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"6EF("AN=&]K+G1O M:V5N(#T M96-T5&]K96XH;G1O:RP 5$]++E1/2VQC=7)L>2P (B=[)R(I.PT*"0D)"0D) M"0D)"0E](&5L<V4 >PT*"0D)"0D)"2\O($ET)W, 82!V87)I86)L92!O<B!L M87(J"79A<B`](&YE=R!$5F%R.PT*"0D)"0D)"0EV87(N;F%M92`](&ED96YT M.PT*"0D)"0D)"0EV87(N='EP92`]('1Y<&4N9'5P.PT*"0D)"0D)"0EV87(N M86-C97-S(#T M($%D9"!V87)I86)L92!T;R!C;&%S<SH-" D)"0D)"0D)<W0N=F%R<RYL96YG M<R!T:&4 ;&ES=#H-" D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/ M5&]K96XH*3L-" D)"0D)"0D)97AP96-T5&]K96XH;G1O:RP 5$]++E1/2VED M:RYI9&5N=#L-" T*"0D)"0D)"0DO+R!'970 ;F5X="!C;VUM82!O<B!S96UI M<G5C=',N;&5N9W1H("L ,3L-" D)"0D)"7-T+G-T<G5C='-;;&5N9W1H("T M2RY43TMU;FEO;CH >PT*"0D)"0D)1%-T<G5C="H)<W0R(#T <&%R<V53=')U M8W0H*3L-" T*"0D)"0D)<W0N=6YI;VYS+FQE;F=T:"`]('-T+G5N:6]N<RYL M"7T-" D)"7T-" D)"0T*"0D)<F5T=7)N('-T.PT*"0E]" T*"0DO+R!087)S M92!A;B!E;G5M97)A=&EO;CH-" D)+R\ 4W1A<G0 869T97( <W1R=6-T('1O M:V5N+ T*"0E$16YU;2H)<&%R<V5%;G5M*"D >PT*"0D)5&]K96XJ"0ET;VL[ M"0D)=&]K(#T M86QL;W=E9#H-" D)"65N+FYA;64 /2!N=6QL.PT*"0D):68 *'1O:RYT;VME M;B`]/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"2\O(&5N=6T :61E;G1I M('L-" D)"0D)+R\ 96YU;2!I9&5N=&EF:65R(#H ='EP90T*"0D)"0ET;VL M/2!N97AT5&]K96XH*3L-" D)"0D):68 *&ES5'EP92AT;VLN=&]K96XI*2![ M;W< ;F5W($1,97AE<D5X8V5P=&EO;BAT:&ES+"`B97AP96-T960 ='EP92!A M9G1E<B`G.B<B*3L-" D)"0D)=&]K(#T M"0D)?2!E;'-E(&EF("AI<U1Y<&4H=&]K+G1O:V5N*2D >PT*"0D)"2\O(&5N M*#L M;VME;B`]/2!43TLN5$]+<F-U<FQY*2!B<F5A:SL-" T*"0D)"2\O($YE960 M86X :61E;G1I9FEE<CH-" D)"0EE>'!E8W14;VME;BAT;VLL(%1/2RY43TMI M"69O<B`H.SLI('L-" D)"0D)"71O:R`](&YE>'14;VME;B I.PT*"0D)"0D) M:68 *'1O:RYT;VME;B`]/2!43TLN5$]+8V]M;6$I(&)R96%K.PT*"0D)"0D) M96QS92!I9B`H=&]K+G1O:V5N(#T](%1/2RY43TMR8W5R;'DI(&)R96%K.PT* M"0D)"0D)96QS92!E=BYV86QU92!^/2!T;VMT;W-T<EMT;VLN=&]K96Y=.PT* M:"D 96XN=F%L=65S+FQE;F=T:"`](&5N+G9A;'5E<RYL96YG=& *B`R.PT* M"0D)"65N+G9A;'5E<UMI72`](&5V.PT*"0D)"2LK:3L-" T*"0D)"6EF("AT M5&]K96XH=&]K+"!43TLN5$]+8V]M;6$L("(G+"<B*3L-" D)"7T-" D)"65N M<'5B;&EC. H)"2\O(%!A<G-E('1H92!M;V1U;&4Z" D)=F]I9"!G;R I('L* M"0D):6YT"0EI;F1E;G0 /2`P.PH*"0D)<F5S=&%R=" I.PH)"0EF;W( *#L[ M*2![" D)"0E4;VME;BH)=&]K+"!N=&]K.PH*"0D)"2\O($=R86( =&AE(&YE M>'0 =&]K96X 9G)O;2!T:&4 9FEL92P 82!N=6QL('1O:V5N(&ES('1H92!E M;F0 ;V8 =&AE(&9I;&4Z" D)"0ET;VL /2!N97AT5&]K96XH*3L*"0D)"6EF M("AT;VL :7, ;G5L;"D 8G)E86L[" H)"0D)9&5B=6< >PH)"0D)"2\O(%1H M:7, 9'5M<', ;W5T('1H92!V87)I;W5S('1O:V5N<R`H8F%S:6-A;&QY(')E M9F]R;6%T<R!T:&4 <V]U<F-E*3H*"0D)"0EI9B`H=&]K+G1O:V5N(#T](%1/ M2RY43TMI9&5N=&EF:65R*0H)"0D)"0EP<FEN=&8H(B4N*G, (BP =&]K+FED M96YT*3L*"0D)"0EE;'-E(&EF("AT;VLN=&]K96X /3T 5$]++E1/2V-H87)V M*0H)"0D)"0EP<FEN=&8H(B<E+BIS)R`B+"!T;VLN:61E;G0I.PH)"0D)"65L M<V4 :68 *'1O:RYT;VME;B`]/2!43TLN5$]+<W1R:6YG*0H)"0D)"0EP<FEN M=&8H(EPB)2XJ<UPB("(L('1O:RYI9&5N="D[" D)"0D)96QS92!I9B`H=&]K M+G1O:V5N(#T](%1/2RY43TMI;G0S,G8I" D)"0D)"7!R:6YT9B B)2XJ<R`B M+"!T;VLN:61E;G0I.PH)"0D)"65L<V4*"0D)"0D)<')I;G1F*"(E+BIS("(L M('1O:W1O<W1R6W1O:RYT;VME;ETI.PH*"0D)"0EN=&]K(#T <&5E:U1O:V5N M*"D[" H)"0D)"2\O($EN9&5N=&%T:6]N. H)"0D)"6EF(" A*&YT;VL :7, M;G5L;"DI" D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+ M<F-U<FQY*0H)"0D)"0D)+2UI;F1E;G0[" H)"0D)"6EF("AT;VLN=&]K96X M/3T 5$]++E1/2VQC=7)L>2D >PH)"0D)"0DK*VEN9&5N=#L*"0D)"0D)<')I M;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN="!I(#T ,#L :2`\(&EN9&5N=#L M*RMI*2!P<FEN=&8H(EQT(BD[" D)"0D)?2!E;'-E(&EF(" H=&]K+G1O:V5N M(#T](%1/2RY43TMS96UI8V]L;VXI('Q\("AT;VLN=&]K96X /3T 5$]++E1/ M2W)C=7)L>2DI('L*"0D)"0D)<')I;G1F*")<;B(I.PH)"0D)"0EF;W( *&EN M="!I(#T ,#L :2`\(&EN9&5N=#L *RMI*2!P<FEN=&8H(EQT(BD[" D)"0D) M?0H*"0D)"7T 96QS92![" H)"0D)"2\O(%!A<G-E(&$ ;6]D=6QE. T*"0D) M"0ES=VET8V *'1O:RYT;VME;BD >PT*"0D)"0D)8V%S92!43TLN5$]+97AT M*%1/2RY43TML<&%R96XL("(G*"<B*3L-" D)"0D)"0EC:&%R6UT);&EN:V%G M92`](&5X<&5C="A43TLN5$]+:61E;G1I9FEE<BP (FED96YT:69I97(B*2YI M9&5N=#L-" D)"0D)"0EE>'!E8W0H5$]++E1/2W)P87)E;BP (B<I)R(I.PT* M"0D)"0D)"6EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+8V]L;VXI M;'-E(&EF("AP965K5&]K96XH*2YT;VME;B`]/2!43TLN5$]+;&-U<FQY*2![ M;G0 /2!L:6YK86=E.PT*"0D)"0D)"7T-" D)"0D)"0EB<F5A:SL-" D)"0D) M"7T-" T*"0D)"0D)+R\ 4W1A<G0 ;V8 82!V87)I86)L92!O<B!F=6YC=&EO M;B!D969I;FET:6]N. T*"0D)"0D)8V%S92!43TLN5$]+=F]I9#H*"0D)"0D) M8V%S92!43TLN5$]+:6YT."P 5$]++E1/2W5N<S Z" D)"0D)"6-A<V4 5$]+ M3TLN5$]+=6YS-C0Z" D)"0D)"6-A<V4 5$]++E1/2V9L;V%T,S(L(%1/2RY4 M:6UA9VEN87)Y,S(L(%1/2RY43TMI;6%G:6YA<GDV-"P 5$]++E1/2VEM86=I M;F%R>3 P. H)"0D)"0EC87-E(%1/2RY43TMC;VUP;&5X,S(L(%1/2RY43TMC M2V-H87(L(%1/2RY43TMW8VAA<BP 5$]++E1/2V1C:&%R+"!43TLN5$]+8FET M"0D)+R\ 0V]N<W1R=6-T('1H92!T>7!E(&]F('1H92!I9&5N=&EF:65R. T* M"0D)"0D)"71Y<&4N;&5N9W1H(#T ,3L-" D)"0D)"0ET>7!E6S!=(#T =&]K M.PT*"0D)"0D)"7=H:6QE(" H;G1O:R`](&YE>'14;VME;B I*2YT;VME;B`A M/2!43TLN5$]+:61E;G1I9FEE<BD >PT*"0D)"0D)"0ET>7!E+FQE;F=T:"`] M('1Y<&4N;&5N9W1H("L ,3L-" D)"0D)"0D)='EP95ML96YG=& +2`Q72`] M9FEE<CH-" D)"0D)"0EE>'!E8W14;VME;BAN=&]K+"!43TLN5$]+:61E;G1I M9FEE<BP (FED96YT:69I97( 869T97( ='EP92(I.PT*"0D)"0D)"6ED96YT M(#T ;G1O:RYI9&5N=#L-" T*"0D)"0D)"2\O($=E="!T:&4 86-C97-S(')I M9VAT<R!F;W( =&AI<R!I9&5N=&EF:65R. T*"0D)"0D)"6-U<F%R(#T 9V5T M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQP87)E;BD >PT*"0D)"0D) M;F5W($1&=6YC.PT*"0D)"0D)"0EF=6YC+FYA;64 /2!I9&5N=#L-" D)"0D) M"0D)9G5N8RYT>7!E(#T M92`](&=E=$QI;FMA9V4H*3L-" D)"0D)"0D)9G5N8RYA8V-E<W, /2!C=7)A M"0D)"61M;V1U;&4N9G5N8W,N;&5N9W1H(#T 9&UO9'5L92YF=6YC<RYL96YG M9G5N8SL-" T*"0D)"0D)"0DO+R!296%D('1H92!P87)A;65T97( ;&ES=#H- M"0D)+R\ 4VMI<"!T:&4 9G5N8W1I;VX 9&5F:6YI=&EO;CH-" D)"0D)"0D) M;G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`] M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" T*"0D)"0D)"0EE>'!E8W14 M"0D)?2!E;'-E('L-" D)"0D)"0D)+R\ 270G<R!A('9A<FEA8FQE(&]R(&QI M<W0 =&AE<F5O9CH-" T*"0D)"0D)"0EF;W( *#L M5F%R* EV87( /2!N97< 1%9A<CL-" D)"0D)"0D)"79A<BYN86UE(#T :61E M/2!43TLN5$]+<V5M:6-O;&]N*2!B<F5A:SL-" D)"0D)"0D)"6EF("AN=&]K M+G1O:V5N(#T](%1/2RY43TMA<W-I9VXI('L-" D)"0D)"0D)"0EF;W( *#L[ M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D) M"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQB<F%C:V5T+"!43TLN5$]+<F)R86-K M970I.PT*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+;&-U M<FQY*0T*"0D)"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]+ M(#T](%1/2RY43TMS96UI8V]L;VXI(&)R96%K.PT*"0D)"0D)"0D)"7T-" D) M"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN5$]+<V5M:6-O;&]N*2!B M<F5A:SL-" D)"0D)"0D)"7T 96QS92!I9B`H;G1O:RYT;VME;B`A/2!43TLN M5$]+8V]M;6$I('L-" D)"0D)"0D)"0DO+R!-=7-T(&)E(&UO<F4 ='EP93H- M" D)"0D)"0D)"0EF;W( *#L M5&]K96XH*3L-" D)"0D)"0D)"0D)+R\ 5$]$3SH ($AA;F1L92!A9&1I;F< M='EP92!I;F9O+ T*"0D)"0D)"0D)"0EI9B`H;G1O:RYT;VME;B`]/2!43TLN M5$]+87-S:6=N*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X M/3T 5$]++E1/2V-O;6UA*2!B<F5A:SL-" D)"0D)"0D)"0D):68 *&YT;VLN M?0T*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMS96UI8V]L M;VXI(&)R96%K.PT*"0D)"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY4 M3TMA<W-I9VXI('L-" D)"0D)"0D)"0D)9F]R(" [.RD >PT*"0D)"0D)"0D) M"0D);G1O:R`](&YE>'14;VME;B I.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN M=&]K96X /3T 5$]++E1/2VQB<F%C:V5T*0T*"0D)"0D)"0D)"0D)"7-K:7!. M97-T*%1/2RY43TML8G)A8VME="P 5$]++E1/2W)B<F%C:V5T*3L-" D)"0D) M"0D)"0D)"6EF("AN=&]K+G1O:V5N(#T M"0D)"0D)"0D)<VMI<$YE<W0H5$]++E1/2VQC=7)L>2P 5$]++E1/2W)C=7)L M;6$I(&)R96%K.PT*"0D)"0D)"0D)"0D):68 *&YT;VLN=&]K96X /3T 5$]+ M"0D):68 *&YT;VLN=&]K96X /3T 5$]++E1/2W-E;6EC;VQO;BD 8G)E86L[ M;VL /2!N97AT5&]K96XH*3L-" D)"0D)"0D)"65X<&5C=%1O:V5N*&YT;VLL M(%1/2RY43TMI9&5N=&EF:65R+"`B:61E;G1I9FEE<B(I.PT*"0D)"0D)"0D) M"0D)"7T-" H)"0D)"0EC87-E(%1/2RY43TMC;&%S<SH >PH)"0D)"0D)1$-L M87-S* D)8VQS(#T M8VQA<W, =&\ =&AE(&UO9'5L93H*"0D)"0D)"61M;V1U;&4N8VQA<W-E<RYL M96YG=& /2!D;6]D=6QE+F-L87-S97,N;&5N9W1H("L ,3L*"0D)"0D)"61M M;V1U;&4N8VQA<W-E<UML96YG=& +2`Q72`](&-L<SL-" D)"0D)"0D-" D) M"0D)8G)E86L[" D)"0D)"7T-" D)"0D)"6-A<V4 5$]++E1/2VEM<&]R=#H M>PH)"0D)"0D)1$EM<&]R="H):6UP(#T <&%R<V5);7!O<G0H*3L*" D)"0D) M"0DO+R!!9&0 =&AE(&EM<&]R="!T;R!T:&4 ;6]D=6QE. H)"0D)"0D)9&UO M9'5L92YI;7!O<G1S+FQE;F=T:"`](&1M;V1U;&4N:6UP;W)T<RYL96YG=& M.PT*"0D)"0D)"6)R96%K.PH)"0D)"0E]" D)"0D)"6-A<V4 5$]++E1/2VUO M9'5L93H >PH)"0D)"0D)8VAA<EM="6UO9#L*" D)"0D)"0DO+R!'970 =&AE M(&UO9'5L92=S(&ED96YT:69I97(Z" D)"0D)"0EW:&EL92`H*&YT;VL /2!N M97AT5&]K96XH*2DN=&]K96X (3T 5$]++E1/2W-E;6EC;VQO;BD >PH)"0D) M"0D)"6EF("AN=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0H)"0D) M"0D)"0EM;V0 ?CT ;G1O:RYI9&5N=#L*"0D)"0D)"0EE;'-E(&EF("AN=&]K M+G1O:V5N(#T](%1/2RY43TMD;W0I" D)"0D)"0D)"6UO9"!^/2`B+B([" D) M"0D)"0E]" H)"0D)"0D)9&UO9'5L92YN86UE(#T ;6]D.PT*"0D)"0D)"6%R M1&5F875L="`](&%C8V5S<U)I9VAT<RYA<E!U8FQI8SL-" D)"0D)"0EB<F5A M;6]D=6QE+G-T<G5C=',N;&5N9W1H(#T 9&UO9'5L92YS=')U8W1S+FQE;F=T M3TMU;FEO;CH >PT*"0D)"0D)"413=')U8W0J"7-T(#T <&%R<V53=')U8W0H M*3L-" T*"0D)"0D)"61M;V1U;&4N=6YI;VYS+FQE;F=T:"`](&1M;V1U;&4N M9W1H("T ,5T /2!S=#L-" D)"0D)"0EB<F5A:SL-" D)"0D)"7T-" D)"0D) M"6-A<V4 5$]++E1/2V5N=6TZ('L-" D)"0D)"0E$16YU;2H)"7-T(#T <&%R M;V1U;&4N96YU;7,N;&5N9W1H("L ,3L-" D)"0D)"0ED;6]D=6QE+F5N=6US M>PT*"0EI9B`H=&]K+G1O:V5N(#T](%1/2RY43TMI9&5N=&EF:65R*0T*"0D) M;6$M<V5P87)A=&5D(&QI<W0 ;V8 <&%R86UE=&5R<SH-"F-H87);72!P87)M M/2`B+"`B.PT*"0EI9B`H*'!A<FTN;6]D:69I97( )B!A8V-E<W--;V1I9FEE M<BYA;4EN3W5T*2`]/2!A8V-E<W--;V1I9FEE<BYA;4]U="D-" D)"7, ?CT M(F]U="`B.PT*"0EE;'-E(&EF(" H<&%R;2YM;V1I9FEE<B`F(&%C8V5S<TUO M9&EF:65R+F%M26Y/=70I(#T M"0ES('X](")I;F]U="`B.PT*"0ES('X]('1Y<&53=')I;F<H<&%R;2YT>7!E M:60 9'5M<%-T<G5C="A$4W1R=6-T("IS="P :6YT(&EN9&5N="P 8F]O;"!I M:2`\(&EN9&5N=#L *RMI*2!I;F1S='( ?CT (EQT(CL-" T*"7!R:6YT9B B M*'-T+FYA;64 :7, ;G5L;"D-" D)<')I;G1F*")[7&XB*3L*"65L<V4*"0EP M" D)<')I;G1F*"(E+BIS7'0B+"!I;F1S='(I.PT*"0EP<FEN=&8H(B4N*G-< M="4N*G,[7&XB+"!T>7!E4W1R:6YG*'9A<BYT>7!E*2P =F%R+FYA;64I.PT* M"7T-" T*"69O<F5A8V *$1&=6YC*B!F=6YC.R!S="YF=6YC<RD >PT*"0EP M<W,I('L-" D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H M8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 (BD[ M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN M9V4 (3T (D0B*0T*"0D)<')I;G1F*")E>'1E<FX *"4N*G,I("(L(&9U;F,N M<&53=')I;F<H9G5N8RYT>7!E*2P 9G5N8RYN86UE+"!P87)M;&ES="AF=6YC M<FEN=&8H(GU<;EQN(BD["GT-" T*+R\ 4VEM<&QE(&UA:6X <')O9W)A;3H* M:6YT(&UA:6XH8VAA<EM=6UT 87)G<RD >PH)1%1A9W,);&5X.PH)1FEL90ED M9FEL93L*" EI9B`H87)G<RYL96YG=& /#T ,2D >PH)"7!R:6YT9B B)2XJ M<R`\9FEL92YD/EQN(BP 87)G<ULP72D[" D)<F5T=7)N("TQ.PH)?0H*"2\O M($]P96X =&AE(&9I;&4Z" ED9FEL92`](&YE=R!&:6QE*&%R9W-;,5TI.PH) M+R\ 4V5N9"!I;B!T:&4 8G5F9F5R('1O('1H92!L97AE<CH*"6-H87);70ES M='( /2!D9FEL92YR96%D4W1R:6YG*&1F:6QE+G-I>F4H*2D[" H);&5X(#T M;W<Z" ED9FEL92YC;&]S92 I.PH*"2\O($QE="!T:&4 ;&5X97( ;&]O<V4Z M" EL97 N9V\H*3L*" DO+R!297!O<G0 =&AE(')E<W5L=',Z" H)<')I;G1F M*")M;V1U;&4 )2XJ<R![7&XB+"!L97 N9&UO9'5L92YN86UE*3L*" EP<FEN M=&8H(EQT<'5B;&EC("!I;7!O<G1S("(I.PH)9F]R96%C:"`H:6YT(&DL($1) M;7!O<G0J(&EM.R!L97 N9&UO9'5L92YI;7!O<G1S*2![" D):68 *&EM+F%C M8V5S<R`]/2!A8V-E<W-2:6=H=',N87)0=6)L:6,I('L*"0D):68 *&D /B`P M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L(&EM+FYA;64I.PH) M"7T*"7T*"7!R:6YT9B B.UQN(BD[" H)<')I;G1F*")<='!R:79A=&4 :6UP M;W)T<R`B*3L*"69O<F5A8V *&EN="!I+"!$26UP;W)T*B!I;3L ;&5X+F1M M;V1U;&4N:6UP;W)T<RD >PH)"6EF("AI;2YA8V-E<W, /3T 86-C97-S4FEG M"0D)<')I;G1F*"(E+BIS(BP :6TN;F%M92D[" D)?0H)?0H)<')I;G1F*"([ M7&Y<;B(I.PH*"2\O($5N=6US. H)9F]R96%C:"`H1$5N=6TJ(&5N.R!L97 N M9&UO9'5L92YE;G5M<RD >PH)"7!R:6YT9B B7'1E;G5M("4N*G, >UQN(BP M96XN;F%M92D[" D)9F]R96%C:"`H1$5N=6TN96YU;59A;'5E(&5V.R!E;BYV M86QU97,I('L-" D)"6EF("AE=BYV86QU92!I<R!N=6QL*0T*"0D)"7!R:6YT M9B B7'1<="4N*G,L7&XB+"!E=BYN86UE*3L*"0D)96QS90H)"0D)<')I;G1F M*")<=%QT)2XJ<R`]("4N*G,L7&XB+"!E=BYN86UE+"!E=BYV86QU92D[" D) M?0H)"7!R:6YT9B B7'1]7&Y<;B(I.PH)?0H*"2\O(%-T<G5C=',Z" EF;W)E M86-H("A$4W1R=6-T*B!S=#L ;&5X+F1M;V1U;&4N<W1R=6-T<RD >PT*"0ED M;W)E86-H("A$4W1R=6-T*B!S=#L M. H)9F]R96%C:"`H1%9A<BH =G([(&QE>"YD;6]D=6QE+G9A<G,I('L*"0EP M<FEN=&8H(EQT)2XJ<UQT)2XJ<SM<;B(L('1Y<&53=')I;F<H=G(N='EP92DL M('9R+FYA;64I.PH)?0H):68 *&QE>"YD;6]D=6QE+G9A<G,N;&5N9W1H(#X M,"D <')I;G1F*")<;B(I.PH*"2\O($-L87-S97,Z" EF;W)E86-H("A$0VQA M<W,J(&-L.R!L97 N9&UO9'5L92YC;&%S<V5S*2![" D):6YT"6H /2`P.PH* M"0EP<FEN=&8H(EQT8VQA<W, )2XJ<R(L(&-L+FYA;64I.PH)"6EF("AC;"YI M:6YT97)F86-E<RYL96YG=& /B`P*2!P<FEN=&8H(B`Z("(I.PH*"0EF;W)E M86-H("AC:&%R6UT =CL 8VPN:6EN=&5R9F%C97,I('L*"0D):68 *&H /B`P M*2!P<FEN=&8H(BP (BD[" D)"7!R:6YT9B B)2XJ<R(L('8I.PH)"0DK*VH[ M" D)?0H)"7!R:6YT9B B('M<;B(I.PH*"0DO+R!687)I86)L97,Z" D)9F]R M*3L-" D)"7-W:71C:"`H=F%R+F%C8V5S<RD >PT*"0D)"6-A<V4 86-C97-S M"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN=&8H(G!R:79A M=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4')O=&5C M8V-E<W-2:6=H=',N87)086-K86=E.B!P<FEN=&8H(G!A8VMA9V4 (BD[(&)R M96%K.PT*"0D)?0T*"0D)<')I;G1F*"(E+BIS7'0E+BIS.UQN(BP ='EP95-T M<FEN9RAV87(N='EP92DL('9A<BYN86UE*3L-" D)?0T*"0EI9B`H8VPN=F%R M;W)S. T*"0EF;W)E86-H("A$1G5N8RH 9G5N8SL 8VPN8W1O<G,I('L-" D) M"7!R:6YT9B B7'1<="(I.PT*"0D)<W=I=&-H("AF=6YC+F%C8V5S<RD >PT* M"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4'5B;&EC.B!P<FEN=&8H(G!U8FQI M.B!P<FEN=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S M4FEG:'1S+F%R4')O=&5C=&5D.B!P<FEN=&8H(G!R;W1E8W1E9"`B*3L 8G)E M(G!A8VMA9V4 (BD[(&)R96%K.PT*"0D)?0T*"0D)<')I;G1F*")T:&ES*"4N M*G,I.UQN(BP <&%R;6QI<W0H9G5N8RYP87)M<RDI.PT*"0E]" T*"0DO+R!$ M97-T<G5C=&]R<SH-" D)9F]R96%C:"`H1$9U;F,J(&9U;F,[(&-L+F1T;W)S M<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F M*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R M4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D)"0EC87-E M(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T96-T960 M(BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H M<')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R:6YT9B B M8RYA8V-E<W,I('L-" D)"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH M<')I;G1F*")P=6)L:6, (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG M:'1S+F%R4')I=F%T93H <')I;G1F*")P<FEV871E("(I.R!B<F5A:SL-" D) M"0EC87-E(&%C8V5S<U)I9VAT<RYA<E!R;W1E8W1E9#H <')I;G1F*")P<F]T M96-T960 (BD[(&)R96%K.PT*"0D)"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C M:V%G93H <')I;G1F*")P86-K86=E("(I.R!B<F5A:SL-" D)"7T-" D)"7!R M:6YT9B B)2XJ<UQT)2XJ<R E+BIS*3M<;B(L('1Y<&53=')I;F<H9G5N8RYT M" D)<')I;G1F*")<='U<;EQN(BD[" E]" T*"2\O($9U;F-T:6]N<SH-" EF M;W)E86-H("A$1G5N8RH 9G5N8SL ;&5X+F1M;V1U;&4N9G5N8W,I('L-" D) M87-E(&%C8V5S<U)I9VAT<RYA<E!U8FQI8SH <')I;G1F*")P=6)L:6, (BD[ M(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N87)0<FEV871E.B!P<FEN M=&8H(G!R:79A=&4 (BD[(&)R96%K.PT*"0D)8V%S92!A8V-E<W-2:6=H=',N M87)0<F]T96-T960Z('!R:6YT9B B<')O=&5C=&5D("(I.R!B<F5A:SL-" D) M"6-A<V4 86-C97-S4FEG:'1S+F%R4&%C:V%G93H <')I;G1F*")P86-K86=E M("(I.R!B<F5A:SL-" D)?0T*"0EP<FEN=&8H(B4N*G-<="4N*G,H)2XJ<RD[ M7&XB+"!T>7!E4W1R:6YG*&9U;F,N='EP92DL(&9U;F,N;F%M92P <&%R;6QI '<FX ,#L*?2YP ` endWhy not produce a Coco/R for D instead?
Dec 24 2004
The parser couldn't parse below code. == import std.stream, std.string; ~ == parseImport() have a bug. --- ../dtags.d 2004-12-25 06:00:53.834500000 +0900 +++ dtags.d 2005-01-01 18:34:57.953125000 +0900 -296,14 +296,28 // Parse an import line: // Starts after import token. + private int parse_import_continue = true; DImport* parseImport() { DImport* imp; char[] ident; Token* ntok; + if (!parse_import_continue) { + parse_import_continue = true; + return null; + } // Get the import identifier: - while ((ntok = nextToken()).token != TOK.TOKsemicolon) { - if (ntok.token == TOK.TOKidentifier) + while (true) { + ntok = nextToken(); + if (ntok.token == TOK.TOKsemicolon) { + parse_import_continue = false; + break; + } + else if (ntok.token == TOK.TOKcomma) { + parse_import_continue = true; + break; + } + else if (ntok.token == TOK.TOKidentifier) ident ~= ntok.ident; else if (ntok.token == TOK.TOKdot) ident ~= "."; -925,11 +939,13 break; } case TOK.TOKimport: { - DImport* imp = parseImport(); + DImport* imp; - // Add the import to the module: - dmodule.imports.length = dmodule.imports.length + 1; - dmodule.imports[length - 1] = imp; + while ((imp = parseImport()) !== null) { + // Add the import to the module: + dmodule.imports.length = dmodule.imports.length + 1; + dmodule.imports[length - 1] = imp; + } break; } case TOK.TOKmodule: {
Jan 01 2005
I never said it was complete ;) Thanks for the bugfix, but I dropped that module a while back. I'm working off the DMD front end C++ parsing code now. It will be pretty much guaranteed to work like the compiler does. I'll let everyone know when I've hammered out all the fine details. In article <cr5sh1$2ida$1 digitaldaemon.com>, ahiru says...The parser couldn't parse below code. == import std.stream, std.string; ~ == parseImport() have a bug. --- ../dtags.d 2004-12-25 06:00:53.834500000 +0900 +++ dtags.d 2005-01-01 18:34:57.953125000 +0900 -296,14 +296,28 // Parse an import line: // Starts after import token. + private int parse_import_continue = true; DImport* parseImport() { DImport* imp; char[] ident; Token* ntok; + if (!parse_import_continue) { + parse_import_continue = true; + return null; + } // Get the import identifier: - while ((ntok = nextToken()).token != TOK.TOKsemicolon) { - if (ntok.token == TOK.TOKidentifier) + while (true) { + ntok = nextToken(); + if (ntok.token == TOK.TOKsemicolon) { + parse_import_continue = false; + break; + } + else if (ntok.token == TOK.TOKcomma) { + parse_import_continue = true; + break; + } + else if (ntok.token == TOK.TOKidentifier) ident ~= ntok.ident; else if (ntok.token == TOK.TOKdot) ident ~= "."; -925,11 +939,13 break; } case TOK.TOKimport: { - DImport* imp = parseImport(); + DImport* imp; - // Add the import to the module: - dmodule.imports.length = dmodule.imports.length + 1; - dmodule.imports[length - 1] = imp; + while ((imp = parseImport()) !== null) { + // Add the import to the module: + dmodule.imports.length = dmodule.imports.length + 1; + dmodule.imports[length - 1] = imp; + } break; } case TOK.TOKmodule: {
Jan 02 2005
On Sat, 18 Dec 2004 09:26:01 +0000 (UTC), James Dunne <jdunne4 bradley.edu> wrote:Hello all, I thought as a nice Christmas present for you all working so hard on D, I would contribute something some of you might find useful. I've been working hard on a lexer (tokenizer) for the D language. Attached to this post is the lexer module written in D!! I began work on it for code-completion support for my D IDE called Orion (over on dsource.org). Don't bother checking anything out there yet, as its all in ruins right now. ;) I tested this module somewhat, and it successfully lexes its own source code! This module could be useful for a few things, like: + code-completion database for D modules + generating CTAGS for the D language + indent-like program for D ..and any other D source code tools you can think of. Merry Christmas all, enjoy! Regards, James DunneAny particular reason you kept the whole TOK.TOK... naming system? Just seemed confusing to me... Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'? Just a small hint, those debug format strings would make a little more sense with wysiwyg strings (ie `"%s"` instead of "\"%s\"") Looks like a good start, though, and works as a beutifier, to boot! :D -- "Unhappy Microsoft customers have a funny way of becoming Linux, Salesforce.com and Oracle customers." - www.microsoft-watch.com: "The Year in Review: Microsoft Opens Up" -- "I plan on at least one critical patch every month, and I haven't been disappointed." - Adam Hansen, manager of security at Sonnenschein Nath & Rosenthal LLP (Quote from http://www.eweek.com/article2/0,1759,1736104,00.asp) -- "It's been a challenge to "reteach or retrain" Web users to pay for content, said Pizey" -Wired website: "The Incredible Shrinking Comic"
Dec 18 2004
Any particular reason you kept the whole TOK.TOK... naming system? Just seemed confusing to me...I kept the TOK.TOK naming scheme out of pure dumb ignorance on my part ;) I didn't realize we had anonymous enumerations. Also, D doesn't allow you to use reserved keywords to declare enumeration values, so the TOK prefix was kept. Tonight I'll run thru and remove the redundant TOK.TOK to be just TOK.Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'?The === operator, AFAIK, is indeed the same as 'is', which I'm sure you meant rather than 'in' (just clarifying for newbies, no offense meant). In the static this() constructor of the DLexer class, you can see the line `keywords["in"] = TOK.TOKidentity` (this is used to convert identifier tokens to reserved keyword tokens). And reversibly, if you use toktostr[TOK.TOKidentity], you get "===" back. Strange, but that's exactly the behavior of the D front-end, and I mindlessly copied it over to my code. I'll fix it if it bugs you ;)Just a small hint, those debug format strings would make a little more sense with wysiwyg strings (ie `"%s"` instead of "\"%s\"")About the wysiwyg strings as a formatting suggestion for the code itself, I'd like to claim ignorance on my part as well. :-D. I often forget about the nice new features of D, since I'm so used to doing things "the old way." I'm sure you can relate ;). Besides, I'm growing accustomed to seeing all the horrible backslashes in strings.Looks like a good start, though, and works as a beutifier, to boot! :DAnd yes, it does work quite famously as a beautifier doesn't it? Except the small side-effect of REMOVING ALL COMMENTS :-D. Of course, that's a small change if this module is to be used as the basis for a beautifier/indenter project. Someone should really take that up, as I've got my hands full right now trying to come up with some preliminary code-completion support for my D IDE. That, and Christmas shopping still... I'll make my changes tonight and ship them out ASAP. I don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect! I think Brad (admin of dsource) is in the process of evaluating replacement PHP systems right now, so he's got enough to do at the moment. Regards, James Dunne
Dec 19 2004
Lousy kharmic retribution... that's what I get for correcting someone else. The line is actually keywords["is"], not keywords["in"].Plus, it seems you still have the === identity token in there, wasn't that replaced with 'in'?The === operator, AFAIK, is indeed the same as 'is', which I'm sure you meant rather than 'in' (just clarifying for newbies, no offense meant). In the static this() constructor of the DLexer class, you can see the line `keywords["in"] = TOK.TOKidentity` ...
Dec 19 2004
James Dunne wrote:I don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect!This may be a good idea. I'd say put them in the Bindings project, because it's read/write for everyone, but your code is not really a binding to C. Perhaps it's time to start a project that has D syntax/grammar/beautifier code (other than DGrammar), and we just start by dropping your work to-date in there. The SVN repos is web-enabled, and you can make project downloads that point directly to the repos, so it will be quite easy to make accessible the two files you have so far. The other approach is to make a project like Bindings that everyone can upload utilities and tools they've created. Thoughts? BA
Dec 20 2004
As a temporary solution, that sounds great. But I have a few issues with that... Seeing how its read/write to everyone, what's to stop someone from simply removing the files there? In SVN, can I be the only one to modify my modules? For now, your solution works ;) I'll throw my stuff in the Bindings project. Keep me informed on anything you'll be doing in this area. Thanks a lot, Brad! In article <cq62nv$2lpp$1 digitaldaemon.com>, Brad Anderson says...James Dunne wrote:Regards, James DunneI don't want to host these projects on dsource.org due to the overhead of the SVN repository (since they're only single modules) and that dsource is (I'm sure) intended for medium-sized to large-scale projects. If there was a code-snippets section, that would be perfect!This may be a good idea. I'd say put them in the Bindings project, because it's read/write for everyone, but your code is not really a binding to C. Perhaps it's time to start a project that has D syntax/grammar/beautifier code (other than DGrammar), and we just start by dropping your work to-date in there. The SVN repos is web-enabled, and you can make project downloads that point directly to the repos, so it will be quite easy to make accessible the two files you have so far. The other approach is to make a project like Bindings that everyone can upload utilities and tools they've created. Thoughts? BA
Dec 20 2004
Anyone interested in my dlexer and dparser modules will take a look in the bindings project over at dsource.org! I've taken to completely rewriting the parser code. I slightly modified the lexer code to work more closely like DMD's front end lexer. I'm gonna do a straight conversion of the C++ code to D for the parser. It's working well so far, just gotta define all those darn classes! I'll throw my work into the bindings project as I go along. Regards, James Dunne
Dec 21 2004
"James Dunne" <jdunne4 bradley.edu> wrote in message news:cqb842$1uud$1 digitaldaemon.com...Anyone interested in my dlexer and dparser modules will take a look in the bindings project over at dsource.org! I've taken to completely rewritingtheparser code. I slightly modified the lexer code to work more closely likeDMD'sfront end lexer. I'm gonna do a straight conversion of the C++ code to Dforthe parser. It's working well so far, just gotta define all those darnclasses!I'll throw my work into the bindings project as I go along.Great work James! I am not only interested in this but also succesfully using your lexer. It is used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers); All i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project. Thanks again for dlexer :)Regards, James Dunne
Dec 22 2004
Great work James! I am not only interested in this but also succesfully using your lexer. It is used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers);Glad to see someone besides me benefiting from my work! And since dlexer is working just like the one in DMD's front end code, it might not be much work at all to convert that parsing routine back to C++ to throw in the compiler itself ;)All i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project.Is that a bug in my code? I was pretty sure I tested all the string parsing routines fairly well.Thanks again for dlexer :)You're very welcome! BTW, I've made an incompatible change to dlexer unfortunately. It is not released yet, but here's the change: The nextToken() function no longer returns a Token *, but returns the token value (TOK...) of the token parsed. The actual token structure is a protected member called 'token' in the DLexer class. Then just check the 'token' member. This eliminates a lot of extra memory allocation and garbage lying around, since we just reuse one Token structure. peekToken() also works similarly, as it should. I've also changed the layout of the Token structure itself. We're now using a new structure Identifier (token.ident) to reference identifiers, and the ustring property to reference string literal tokens (token.ustring). Identifiers are kept in an AA to eliminate duplicates, just as they are (essentially) in DMD's front end. Actually, they're stored in the stringtable, but an AA works similarly for our purposes. Also, numeric parsing works (but still not real number parsing) and returns values in the fields token.(int32value, uns32value, int64value, uns64value, float80value). All integers smaller than an int32 are stored in int32value. But it doesn't matter which member you choose to read from, since they're all in a union ;). I'll throw this new version up to the bindings project now. Sorry to everyone using the old module, but it shouldn't be too hard to convert over to this new Regards, James Dunne
Dec 22 2004
"James Dunne" <jdunne4 bradley.edu> wrote in message news:cqcs5s$118n$1 digitaldaemon.com...ItGreat work James! I am not only interested in this but also succesfully using your lexer.isis used in a translator D+some_new_features->D. I have this working: int[] numbers; numbers.length=100; (each[int index] numbers) = index+1; int sum=0; sum += (each numbers);Glad to see someone besides me benefiting from my work! And since dlexerworking just like the one in DMD's front end code, it might not be muchwork atall to convert that parsing routine back to C++ to throw in the compileritself;)parsingAll i have to do is fix a bug that stops writef("%s\n",(each numbers)); from working and it will be updated to dsource as part of the lr-lalr parser project.Is that a bug in my code? I was pretty sure I tested all the stringroutines fairly well.No! The bug is in my code ;)tokenThanks again for dlexer :)You're very welcome! BTW, I've made an incompatible change to dlexer unfortunately. It is not released yet, but here's the change: The nextToken() function no longer returns a Token *, but returns thevalue (TOK...) of the token parsed. The actual token structure is aprotectedmember called 'token' in the DLexer class. Then just check the 'token'member.This eliminates a lot of extra memory allocation and garbage lying around,sincewe just reuse one Token structure. peekToken() also works similarly, asitshould. I've also changed the layout of the Token structure itself. We're nowusing anew structure Identifier (token.ident) to reference identifiers, and theustringproperty to reference string literal tokens (token.ustring). Identifiersarekept in an AA to eliminate duplicates, just as they are (essentially) inDMD'sfront end. Actually, they're stored in the stringtable, but an AA works similarly for our purposes. Also, numeric parsing works (but still not real number parsing) andreturnsvalues in the fields token.(int32value, uns32value, int64value,uns64value,float80value). All integers smaller than an int32 are stored inint32value.But it doesn't matter which member you choose to read from, since they'reall ina union ;). I'll throw this new version up to the bindings project now. Sorry toeveryoneusing the old module, but it shouldn't be too hard to convert over to thisnewformat. For history purposes, the old dlexer module is in bindingsI'll check it out and make the changes.Regards, James Dunne
Dec 23 2004