+Y5W#58OLN!0`Z'X%QT;^``"X`0!0N`(`4.@@#(/$!,=&
XM_$H*ZQR#1OP"BP>)1OJ+7OJ`/P!T"_]&^HH'F`%&_NOMBU[\@S\`==R!?O[:
XMH'0),\!0Z-8&@\0"H0H5B4;PQP8*%0$`,\!0N(D*4.APYX/$!(E&^`O`=`=0
XMZ&3M@\0"BT;PHPH5N*,F4+@"`%#HJ@N+Y5W#CP:2"HX>0`P6HH%1T$ZX'04
XM/")T"#P)=`0\('7K6!8'OH$`ZRM/*_X+_W3QB\]"6XO#`\$%`P`E_O\KX(O\
XM'@8?%@?SI+`@JHO+'[Z!`.L.B\@$!"3^*^"+_+A#(*OSI(O!JHOT%A]0B]R+
XM_JRJ"L!T3CPB=3!.5D;_!DH,K`K`=#T\(G46@'W_7'0/JCOW=0ZLQ@4`"L!T
XM)^O/3ZKKWD?&1?\`Z\3H.@!TOTY61O\&2@RLJ@K`=`CH*`!U]>OAJHOT2TL[
XM\W,(K8<'B43^Z_*+W`O2=0+_!XDF3`SHH`W_)I(*/`ET`CP@PU6+[+@(`.C3
XM`U=6@SX*"P%U3J$("SE&!'X@BUX&T>`#V(L?@#\M=1*+7@:A"`O1X`/8BQ^`
XM?P$`=0:X___IK@&XE`I0BUX&H0@+T>`#V/\WZ,,+@\0$"\!U!O\&"`OKVHM>
XM!J$("]'@`]B+'P,>"@N*!YB+\(DV!!6#_CIT$%;_=@CH:0N#Q`2+^`O_=7^#
XM/@8+`'1/B\:(1OK&1OL*BUX&_S?H%@R#Q`)0BUX&_S>X`@!0Z)@\0&N)<*
XM4.C\"X/$`E"XK`I0N`(`4.A^#X/$!K@"`%"-1OI0N`(`4.AL#X/$!HM>!J$(
XM"]'@`]B+'_\&"@L#'@H+@#\`=0K_!@@+QP8*"P$`N#\`Z>$`1X`].G0#Z:T`
XMBUX&H0@+T>`#V(L?`QX*"X!_`0!T%XM>!J$("_\&"`O1X`/8BP<#!@H+0.MU
XM_P8("Z$("SE&!']9@SX&"P!TJXO&B$;XQD;Y"HM>!O\WZ%4+@\0"4(M>!O\W
XMN`(`4.C6#H/$!KC!"E#H.PN#Q`)0N.,*4+@"`%#HO0Z#Q`:X`@!0C4;X4+@"
XM`%#HJPZ#Q`;I6?^+7@:A"`O_!@@+T>`#V(L'H_04QP8*"P$`ZRF+7@:A"`O1
XMX`/8BQ__!@H+`QX*"X`_`'4*QP8*"P$`_P8("\<&]!0``(O&7E^+Y5W#58OL
XMN`H"Z-\!5H-^"`!T!8M&".L$C8;X_8F&]OW_=@10Z($*@\0$_W8&_[;V_>@9
XM!(/$!(E&^`O`=`/IB`"X#`M0Z.\$@\0"B4;ZZW&+7OJ`/P!T;XN&]OV)1O[K
XM&(`_.W0;BU[^_T;^BW;Z_T;ZB@2(!XA&_(M>^H`_`'7@@'[\7'0/@'[\+W0)
XMBU[^_T;^Q@=<_W8$_W;^Z`D*@\0$_W8&_[;V_>BA`X/$!(E&^`O`=1.+7OJ`
XM/P!T`_]&^H-^^@!UB3/`7HOE7<-5B^R#[`175HMV!HI$!IBI@P!T!O9$!D!T
XM!KC__^G:`/9$!@%T!H!,!B#K[H!,!@*`9`;O,\")1`*+^(E^_O9$!@AU#XI$
XM!YB+V-'C]H>R"P%T,(L\*WP$"_]^$E?_=`2*1`>84.@F#8/$!HE&_HM$!$")
XM!,=$`O\!BUP$BD8$B`?K:O9$!@1U3H'^&@MU+8I$!YA0Z"(6@\0""\!U-<<&
XM1@R;0,=$!.00BD0'F(O8T>/&A[(+`<<$Y1#KN+@``E#H106#Q`*)1`0+P'0&
XM@$P&".N;@$P&!+\!`%>-1@10BD0'F%#HIPR#Q`:)1OXY?OYT`^DQ_XI&!"KD
XM7E^+Y5W#58OLBUX$BP>+5P*+3@;HR!6+7@2)!XE7`EW"!`!9B]PKV'(*.Q[<
XM"W($B^/_X>EH`;^D!8LV`@`K]X'^`!!R`[X`$/J.UX'$'A7[)-@(`C,,KWO?;M$K-
XM(3:,'D`,BS8L`!X6N``US2$VB1[>"S:,!N`+#A^X`"6Z("[-(3:+#F@0XR(V
XMQ09J$(S:,]LV_QYF$',#Z
OEL1VZ
XMZBWKWE6+[(,^1@P`=`3_%D8,_W8$Z(T+B^5=PU6+[(/L`E=6BW8$O___BD0&
XMF*F#`'0H]D0&0'4B5NC)$8/$`HOX5NA>#(/$`HI$!YA0Z+(0@\0""\!]`[__
XM_\9$!@"+QUY?B^5=PU6+[(/L!%=6BW8(BWX$@WX&`'4JZQ)6Z&@+@\0"B4;^
XM0'4).7X$=0XSP.LJBD;^B`5'/`IU",8%`(M&!.L8_TX&=//_3`*#?`(`?,J+
XM'/\$B@5N@6`H/$`HOX
XM"_]U#L<&0@P,`,<&4`P(`.M:B7X$,\!0C4:^4.C"#X/$!(U&OE#HW06#Q`(%
XM`P`[QGP0QP9"#"(`QP90#`$`,\#K*3/`4%"X&0!0Z,$.@\0&!$&(!4?&!3I'
XMQ@5<1XU&OE!7Z'T%@\0$BT8$7E^+Y5W#58OL@^P$5U:+-DX,"_9T.(-^!`!T
XM,O]V!.AX!8/$`HOXZR"+'(`Y/7465_]V!%/H>P6#Q`8+P'4'BQR-00'K"H/&
XM`H,\`'7;,\!>7XOE7<-5B^Q75HM^!(L%BUT"BTT$BU4&BW4(BWT*S2%7BWX&
XMB06)70*)302)50:)=0B/10IR!#/VZPCH#0^^`0"+!8EU#%Y?7<-5B^Q75AZ+
XM?@2+!8M=`HM-!(M5!HMU"/]U"HM^"(X%CET&7\TA5QZ_I`6.WXM^"(P%CT4&
XMBWX&B06)70*)302)50:)=0B/10IR!#/VZPCHL`Z^`0"+!8EU#!]>7UW#,NWC
XM!M'@T=+B^L-5B^R#[`975HMV!+]A`.@G$8E&_NL!1H`\`'7ZZQF+1OXKTKD*
XM`/?Q@,(PB!2+1OXKTO?QB4;^3H`\6'3A1H`\`'4'ZQ>+QT>(!/]V!.@9`(/$
XM`@O`=`F#_WMUZ3/`ZP.+1@1>7XOE7<-5B^S'!D(,```SP%#_=@3HN`N#Q`1`
XM=0N#/D(,`G4$,\#K`[@!`(OE7<-5B^R+7@2`3_X!B^5=PU6+[%97NX8-@S\`
XM=2D>![@%`.C*#'4%,\"9ZR1`)/ZCA@VCB`V6QP0!`(/&!,=$_O[_B3:,#8M.
XM!(S8CL#H=`M?7HOE7<-5B^R#[`)75HMV!+\"``OV="*`/`!T'5;HE`,#YU!6
XM5^@=!X/$!HO'4+BV#E!7Z`\'@\0&H10/.09"#'T3@SY"#`!\#(L>0@S1XXN'
XMR@[K`[BY#HOP5NA6`X/$`E!65^C>!H/$!K@!`%"XQPY05^C/!H/$!EY?B^5=
XMPU6+[(/L!E=6OAH+5NBP"8/$`HOXC48&4/]V!%;H_0^#Q`:)1OI65^@7"H/$
XM!(M&^EY?B^5=PU6+[(/L"%=6OAH+_W8$Z.X"@\0"B_A6Z&\)@\0"B4;^5E>X
XM`0!0_W8$Z#<.@\0(B4;Z5O]V_NC2"8/$!#E^^G4B_TP"@WP"`'P,L`J+'/\$
XMB`+QT\+P'7PBT;^7E^+Y5W#58OL@WX$
XM`G0'N`$`^>D4#*&`#*,6#Z&"#*,8#X-^!@!U#Z%^#*."#*%\#*.`#.LLD(,^
XM?@P`=1FP([0US2&,!GX,B1Y\#+JR,QX.'[0ES2$?BT8&HX`,C,BC@@RA%@^+
XM%A@/.P9\#'4*.Q9^#'4$,\"+T%W#G!Y04KBD!8[8@SYZ#`!U&*&`#(L6@@P]
XM`0!T83D&?`QU,3D6?@QU*X/L!%6+[(/%`K`$BU8$B58`147^R#P`=?*A?`R)
XM1@"A?@R)1@)=6E@?G+?@0>!XO?,\"Y
XM___RKD'WV8I&!HO[\JY/.`5T`C/_B\=?7<-5B^Q75HMV!(M^!AX'B]\SP+G_
XM__*N0??9B_OSIHI$_S/).D7_<@5T!4'K`O?1B\%>7UW#58OL5U:+=@2+?@8>
XM![=!LUJU82KOBB2*!0KD="`*P'0<1D+?@:+]S/`N?__\JY!]]F+
XM?@2+U_.DB\)>7UW#58OL5QX'BWX$,\"Y___RKHO!0$#WV%]=PU6+[%=6'@>+
XM3@CC+XO9BWX$B_7UW#58OL5U8>!XM^!(MV!HO?BTX(XPRL"L!T`ZKB^#+`\ZJ+
XMPUY?7<-5B^Q75AX'BW8&Z&84BW8$,\"L.L1T".B`%'3VB\9(7E]=PU6+[%<>
XM!XM^!#/`N?__\JY!]]E/BD8&_?*N1S@%=`0SP.L"B\?\7UW#58OLBU8$M$'-
XM(>D5"56+[+@*`.@^]E=6BS9,##/`H[00H[(0Z)<&BS9,#.MHBQR`/R)U+U/H
XM_/Z#Q`*+V$N)7O@#'(`_(G4;BP1`4.CG`8/$`@O`=`/IK@"+7O@#',8'`.LO
XMN!X/4/\TZ$C_@\0$B4;\"\!T$%#_-.B1`(/$!`O`=`_I@0#_-.BK`8/$`@O`
XM=76#Q@*#/`!UD\=&^```BSZR$.L&BWT"_T;X"_]U]HM&^-'@0$!0Z(7Z@\0"
XMB4;V"\!T0Z-,#(M&^*-*#(L^LA#K#HM>]H-&]@*+!8D'BWT""_]U[HM>]L<'
XM``#K$8L>LA"+1P*CLA!7Z#7Z@\0"BSZR$`O_=>=>7XOE7<-5B^RX"@#H/O57
XM5HMV!L=&^@``ZPN`/%QT"X`\.G0&3CEV!'7P@#PZ=12+1@1`.\9T#/]V!.CQ
XM`(/$`NGE`(`\7'0%@#PZ=0F+QBM&!$")1OC_=@3H.@6#Q`*+^`O_=-*AM!")
XM1ORX(0]05^@3_8/$!`O`='FX(P]05^@$_8/$!`O`=&J`/%QT(X`\.G0>5^C*
XM$H/$`HE&!`O`=`M0Z(D`@\0""\!T1+C__^MW5^AW_8/$`@-&^$!0Z'?Y@\0"
XMB4;V"\!TXE?_=OC_=@10Z+']@\0&`T;X4.@J_8/$!"M&^%#H10"#Q`(+P'6\
XM_T;Z,\!0Z)T$@\0"B_@+_W0#Z6;_@W[Z`'4#Z2G_@W[\`'0(BU[\BT<"ZP.A
XMLA!0Z%,`@\0",\!>7XOE7<-5B^RX`@#H%?16N`0`4.CX^(/$`HOP"_9U!;C_
XM_^LDBT8$B03'1`(``(,^LA``=`F+'K00B7<"ZP2)-K(0B3:T$#/`7HOE7<-5
XMB^RX!`#HS?-75HMV!`OV="_K)O\T_S7H]?N#Q`0+P'T.BP2)1OR+!8D$BT;\
XMB06+?0(+_W7=BW0"BWP""_]UTUY?B^5=PU6+[(M>!/:'9@P@=`ZX`D(SR8O1
XMS2%S`^E*!O:'9@R`=0/I@0"+3@B+5@8>!S/`_%=6B_"+^N-EN`I`\JYU,E&+
XMSRO*2>,0S2&<`_"=M)"\!T+T:Y`@"Z)@^T0,TALT"\!T&EF+
XMU^O%48O/*\K-(9P#\)US!+0)ZQH+P'46]H=F#$!T"XM>!H`_&G4#^.L$^;@(
XM'%ER`HO&7E_IOP6+3@B+5@:T0,TAOMX^L+P'7G]H=F#$!T"HO:@#\:
XM=0/XZ];YN`@!`KD=`J`?@0`=03&
XM1@3^'L46W@NX`"7-(1^+#F@0XP>[`@#_'F80BT8$M$S-(56+[%:+=@2*1`:8
XMJ8,`=`;V1`9`=`:X___IF@#V1`8"=`:`3`8@Z^Z`3`8!]D0'4IBD0'F(O8
XMT>/VA[(+`74:N``"4.@;]X/$`HE$!`O`=`2P".L"L`0(1`:#?`0`=0R*1`>8
XMT>`%LPN)1`2+1`2)!/9$!@1T!;@!`.L#N``"4/]T!(I$!YA0Z`43@\0&B40"
XM"\!_%0O`=`2P(.L"L!`(1`;'1`(``.EK__],`HL<_P2*!RKD7HOE7<-5B^Q6
XMBW8$BD0&F*F#`'0=]D0&"'07_W0$Z'[V@\0"@&0&]S/`B02)1`2)1`)>B^5=
XMPU6+[(/L!E=6BW8(BUX&B@>8/6$`=$(]<@!T"#UW`'0QZ88`QT;^`0#_1@:+
XM7@:`/RMU!X!._@C_1@:+1OXE!P`]`0!T&CT"`'0T/00`=#3K$,=&_@(`Z]#'
XM1OX$`.O),__W1OX(`'0(@<\"`('G_O^+7@:`/W1U$('/`$#K%K\!`^O>OPD!
XMZ]F+7@:`/V)U!('/`("XI`%05_]V!.BP$(/$!HE&^@O`?00SP.M"]T;^"`!T
XM!L9$!H#K$?=&_@8`=`;&1`8"ZP3&1`8!QP9)M`,L"+7OK1XXB'L@N8B40"
XM,\")!(E$!(I&^HA$!XO&7E^+Y5W#58OL5HMV!('^&@MU//9$!@QU-HI$!YB+
XMV-'C]H>R"P%U)\=$!.00BD0'F(O8T>/&A[(+`<<&1@R;0,=$`@`"BT0$B02X
XM`0#K-('^,@MU+/9$!@QU)HI$!YB+V-'C]H>R"P%U%[@``E#H%O6#Q`*)1`0+
XMP'0&@$P&".NY,\!>B^5=PU6+[%:+=@:#?@0`=$R!_AH+=26*1`>84.B5!8/$
XM`@O`=!96Z),#@\0"BD0'F(O8T>/&A[(+`.L:@?XR"W4;5NAW`X/$`O]T!.BF
XM](/$`H!D!O)1/[KYHO^=`P#^8E,_BO!2(D%ZP4#^?Y,_HO&C-J!^J0%
XM=`4FC!Y8#XE_`L,FQ@9<#P(]_O]T)8O^`_"MJ`%T\HO^2#O!<[V+T`/PK:@!
XM=.(#P@4"`(OWB43^Z^:+1P@+P'0$CMCK$R;^#EP/=!",V#VD!70%)HX>5`^+
XM-^N]BW<&,\#H60`[QG0-)`%`0)CH30!T#?Y-_N@+`'0%EDY.ZYHSP)G#48M%
XM_J@!=`,KR$E!0;K_?R8[%EH/=@31ZG7UB\$#QG(5`\)R#??2(\(KQN@,`'4(
XM]]+1ZG7E,\!9PU)1Z!T`=!A7B_Z+\`/RQT3^_O^)=P:+UBO72HE5_EA96L-3
XM4#/2'E)24+@!`%`&'^B6#(/$"(/Z_Q]:6W0""]+#58OLBF8$BU8&BD8(S2%=
XMPU6+[%8S]KDU`#+D_*PRX.+[@/15_@XU`'4&B"8T`.L1"N1T#;HV`+L"`+D9
XM`+1`S2$RP*(U`%Z+Y5W#58OL@^P(5U:+-DX,ZQ>X#`!0N%X/4/\TZ*KV@\0&
XM"\!T"(/&`H,\`'7D@SP`=#F+/(/'#,=&_@``B@5'F(E&^NL7XOE7<-5B^R+7@2T/LTA
XM<@K&AV8,`,:'4@P`Z1,`58OLB]Z+5@:+=@2T1\TAB_-=PW((,\"+Y5W#0/!-V
XM`K`3NVP/UYBC0@S#BL3K]U6+[%97'OP>!XM.!D&`X?Z+?@0SVXS8/:0%=0.[
XMA@V+5P)/3XOWK5!7)/Z)!0/P._)U`4*MJ`%T!_\%`05(Z^W1ZG,#B7\".PUT
XM+G(?/?[_=2Q'1S/`Z#G^.\9U(>CX_708B]C1X_:'L@L!=">+!"M$!(E&_`O`?AM0_W0$
XMBD0'F%#H@OB#Q`8[1OQT!X!,!B"___^+1`2)!,=$`@``B\=>7XOE7<-5B^R#
XM[`175KX2"S/_ZQ>*1`:8J8,`=`M6Z'G_@\0"0'0!1X/&"#DVV@MSXXO'7E^+
XMY5W#58OL@^P&5U:+=@2+?@J+1@;W9@B)1OJ)1OP+P'0[]D4'4^BD4'F(O8
XMT>/VA[(+`74O_TT"@WT"`'P,B@2+'?\%B`8B]C1X_:'L@L!=0/IHP"#?OP`=0/IB0"+
XM1OPY10)R'%!6_S7HG0J#Q`:+1OPI10*+1OP!!<=&_```Z].#?0(`="'_=0)6
XM_S7H>0J#Q`:+10(!!8M%`BE&_`-U`L=%`@``ZZS_30*#?0(`?`R*!(L=_P6(
XM!RKDZPM7B@284.BTZ8/$!/9%!B!U&$;_3OSI?_]7B@284.B_BUC`#T5`'<^`\"3+O^GF4/_!LH0QP;4$```N`H`4.B'
XM`(/$`NM0N`@`Z_*X$`#K[3/`4.B@`>OIN`$`Z_7_MI[^Z!X"Z]N+_NM!AT-C
XM0XQ#C$.,0Y5#E4.50Y5#E4.50Y5#=4.50Y5#E4-_0Y5#7T.50Y5#>D.#/M`0
XM`'0%H+5P*)1OB)5OJ#
XM!KX0!.LI@S[*$`!T$(L>OA"+!XE&^,=&^@``ZPV+'KX0BP>9B4;XB5;Z@P:^
XM$`*#/M00`'0-BT;X"T;Z=`6+1@3K`C/`H](0BS;"$(,^RA``=2J#?OH`?22#
XM?@0*=1?&!"U&BT;XBU;Z]]B#T@#WVHE&^(E6^L=&]@$`ZP7'1O8``(O]@^\8
XM_W8$5_]V^O]V^.AA"X/$"(,^P!``="!7Z*;P@\0"BP[($"O(B4[^ZP3&!#!&
XMBT;^_T[^"\!_\HH%B`2#/K80`'0'/&%\`X`L($9'@'W_`'7F@S[*$`!U%*'&
XM$`L&N!!T"X-^]@!U!;@!`.L",\!0Z%4"@\0"7E^+Y5W#58OLN`@`Z%WG5U;'
XM!L00(`"#?@0`=!"^`0"AOA"#!KX0`HE&_.LSBQZ^$(L'B4;\@P:^$`(+P'4%
XMQT;\@@__=OSH`O"#Q`*+\(,^P!``=`HY!L@07XOE7<-5B^RX`@#H
XMT>:AOA")1OZ#/L`0`'4&QP;($`8`_S:V$/\VR!#_=@3_-L(0_W;^Z.H%@\0*
XM@WX$9W0&@WX$1W48@S[4$`!U$8,^R!``=`K_-L(0Z-`%@\0"@S[4$`!T$8,^
XMR!``=0K_-L(0Z,(%@\0"@P:^$`C'!M(0``"AQA`+!K@0=!+_=O[HN06#Q`(+
XMP'0%N`$`ZP(SP%#H)`&+Y5W#58OL,\#H,N96@S[0$`!U.(L>NA#_3P*#?P(`
XM?!&*1@2+'KH0BS?_!X@$*N3K#?\VNA#_=@3HY>2#Q`1`=0;_!M`0ZP3_!LX0
XM7HOE7<-5B^RX`@#HY.575H,^T!``=5&+=@0+]GY*ZS.+'KH0_T\"@W\"`'P1
XMH,00BQZZ$(L__P>(!2KDZP[_-KH0_S;$$.B,Y(/$!$!U!/\&T!"+QDX+P'_&
XM@S[0$`!U!XM&!`$&SA!>7XOE7<-5B^RX`@#H>^575HMV!(M^!H,^T!``=4SK
XM-8L>NA#_3P*#?P(`?!**!(L>NA"+#_\'B]F(!RKDZP[_-KH0B@284.@CY(/$
XM!$!U!/\&T!!&B\=/"\!UQ(,^T!``=0>+1@8!!LX07E^+Y5W#58OLN`H`Z!'E
XM5U:+-L(0,\")1OR)1OB+/LP05NC;[8/$`HE&^BOX*WX$H=(0L0/3^"OX@S[6
XM$`!U%8`\+740@S[$$#!U":R84.B4_H/$`H,^Q!`P=`L+_WX'@S[6$`!T&8-^
XM!`!T!O]&^.A>`(,^TA``=`;_1OSH;P"#/M80`'4F5^BH_H/$`H-^!`!T"8-^
XM^`!U`^@T`(,^TA``=`F#?OP`=0/H0@#_=OI6Z.C^@\0$@S[6$`!T#<<&Q!`@
XM`%?H:_Z#Q`)>7XOE7<-5B^PSP.A'Y(,^QA``=`2P*^L"L""84.C[_8OE7<-5
XMB^PSP.@IY+@P`%#HZ/V#Q`*#/M(0$'45@SZV$`!T!+!8ZP*P>)A0Z,S]@\0"
XMB^5=PU6+[+@"`.CVXU=6BW8&@#PJ=0Z+'KX0@P:^$`*+/T;K.C/_@#PP?#.`
XM/#E_+CD^P!!U"X`\,'4&QP;$$#``K)B+S]'AT>$#S]'A`\B#Z3"+^8`\,'P%
XM@#PY?N.+7@2)/XO&7E^+Y5W#58OLN`(`Z([C5KZ)#^L-B@0X1@1U!;@!`.L(
XM1H`\`'7N,\!>B^5=PU6+[+C6`.AFXU=6B_V#[U+_-DX,_W8(_W8&_W8$Z"X%
XM@\0(B4;^0'4J@SY"#`)U(XM>!H`_7'0;@#\`=`:`?P$Z=!"XC@]0Z''F@\0"
XMB_`+]G4&BT;^Z8<`N'\`4%:-ABS_4.A#[(/$!HOPQD:K`+B3#U!6Z#(&@\0$
XMB_`+]G335E?HI^N#Q`17Z,/K@\0"B]B`>?]<=`NXE0]05^C;!8/$!/]V!E?H
XMT06#Q`3_-DX,_W8(5_]V!.B4!(/$"(E&_D!UD(,^0@P"=8FXEP]0,\!0Z-4%
XM@\0$B_`+]G6CZ7/_7E^+Y5W#CP::#XX>0`PSR8O!B^F+^4F+-BP`"_9T"([&
XM\JY%KG7Z19=`)/Z+_='E`\46'^A8XHO/B_P#_8OL%@>.WC/V2>,-B7X`146L
XMJ@K`=?KB\XE.`!8?B29.#/\FF@^_G`^+W[D0`#/`\ZJL"L!T%8OXL0/3[P/[
XML@&*R(#A!]+B"!7KYL-1B_BQ`]/O`_NR`8K(@.$'TN)9,\"$%70!0,-5B^Q7
XMBWX$5^C`ZD!0Z,;F6PO`=0-;ZP=0Z(SJ@\0$7UW#58OL@^P"5KX2"XI$!IBI
XM@P!U%3/`B40"B$0&B40$B03&1`?_B\;K#8O&@\8(.P;:"W77,\!>B^5=PU6+
XM[%97!H-^"`!U.+_F"XM6!HM&!$AU!^A3`'(GZTB+-C8,2'01._=T#8M$`HE&
XM#%;H.@!>L=B]J#PP_1V[$#T^NT2,TAL[]W4)`]FA0`PKV([`M$K-(7(-
XM._=U!(D6X@N2AP2+T<-5B^R+7@2`9P;/7<-5B^SH5>*+Y5W#58OLZ$OBB^5=
XMPU6+[.A!XHOE7<-5B^SH-^*+Y5W#58OLZ"WBB^5=PU6+[%=6'@>+?@2+=@:+
XMUXM."#O^=A2+Q@/!._AS#`/Q`_E.3_WSI/SK(8O'"\;1Z',*B\GSI='KX!1'YZ<+RQ@;9#P&1J0`"=`N+5@2X`$/-(>F@`*D#`'17J0"`=5+V
XM!CL0@'5+L`(*!M@/BU8$M#W-(7+'D[@`1,TA]L*`=2VY__^+T;@"0LTA]]FZ
XMK`^T/\TA"\!T%H`^K`\:=0_WV8O1N`)"S2$SR;1`S2&T/LTABD8&)`,*!M@/
XMBU8$M#W-(7([Z0L%]T8&``%U!K@"`.EH_\8&V0\`_W8(Z$,%68E."#+M]@;8
XM#_]U!_=&!@(`=0.`X?Z+5@2T/,TA
XMPX/Y`70'@#P*=.WKZ/:'9@Q`=!FX`$3-(??"(`!U"HT6V@^T/\TANZ58OLN(H`Z!C>5U:+=@:#?@0"=1#_=@K_
XM=@A6Z-($@\0&Z0(!@SY`!T!/\61@PSP%"-AGC_4#/`4(U&^%"-1OY0_W8*
XM_W8(Z&L!@\0.0'4&N/__Z<\`N%P`4%;H1>>#Q`2+^`O_=0*+_K@N`%!7Z,'E
XM@\0$"\!T&/]V^(V&>/]05O]V!.BV`X/$"(E&^NF)`%;H;.:#Q`(%!0!0Z&WB
XM@\0"B_@+_W4+_W;^Z%#B@\0"ZYZXW`]05E?H(N:#Q`10Z&D`@\0$QP9"#```
XM_W;XC89X_U!7_W8$Z&,#@\0(B4;Z@SY"#`!T*[CA#U"X+@!05^BPYH/$!%#H
XMX^6#Q`3_=OB-AGC_4%?_=@3H,0.#Q`B)1OI7Z.?A@\0"_W;^Z-[A@\0"BT;Z
XM7E^+Y5W#58OL5U8>!XM^!(O7,\"Y___RKD^+]XM^!HO?N?__\JY!]]F+_HOS
XM\Z2+PEY?7<-5B^Q75AX'BW8&Z(SZ@`\!BW8$"_9U!(LVY@\SP*P*P'0MZ)OZ
XM.L1U]$Z+SC/`K(KPZ(SZ.L1T]@KV=0E.._%U"#/`ZPK&1/\`B3;F#XO!7E]=
XMPU6+[+,`Z>D%58OL@^P.5U:#?@8`=0:A3@R)1@:+=@;'1O0``.L0@\8"_W3^
XMZ"3E@\0"0`%&](,\`'7KBT;T0(E&]L=&_!,`BU[\@+]F#`!U"?]._(-^_/]_
XM[8-^_`!\$[CH#U#H[.2#Q`(#1OP%`P`!1O:#?A``=!&+7@3_-^C2Y(/$`@4#
XM``%&]HM&]@4/`%#HRN"#Q`*)1OB+7@B)!PO`=2?@P`=`G_=@SHH>"#Q`+'
XM!D(,#`#'!E`,"`"X___I,@&+1O@%#P`D\(OXBUX*B3^+=@;K&3/`4/\T5^A/
XMY(/$!%#HG>.#Q`1`B_B#Q@*#/`!UXH-^_`!\2C/`4+CU#U!7Z"GD@\0$4.AW
XMXX/$!(OXBD;\_L"(!4?'1O0``(M>]("_9@P`=`:*AV8,ZP*P_X@%1_]&](M&
XM_/]._`O`==[&!0!'Q@4`@WX0`'0/@\<#BUX$_S=7Z-7C@\0$QT;T``"+?@Y'
XMBUX$@S\`='F#?P(`=`?&!2!'_T;TBW8$@\8"@SP`=&'_-.C'XX/$`HE&^@-&
XM]#U]`'XLQP9"#`<`QP90#`H`BUX(_S?HHM^#Q`*#?@P`=0/I!/__=@SHD-^#
XMQ`+I^/Z+1OI``4;T,\!0_S17Z%KC@\0$4.BHXH/$!(OXQ@4@1^N7Q@4-BUX.
XMBD;TB`>+1O9>7XOE7<-5B^S&!M`/]V!NA?`%F)3@:+5@0R[;0\S2%R38O8
XMBU8$N`!#S2'WP0$`=00RR>L"L1#W1@8`0'4.]T8&`(!U"O8&.Q"`=0.`R8`*
XM#M@,D!N`!$S2&+P_;"@'0#@,E`B(]F#,:'4@P`Z>#L58OLH40,]]"+7@0C
XMPX'C`,"H@'4#@,L!B5X$7<,`````````````58OL5E>,V(M>"K$$T^L#PZ,"
XM$(M&"*,$$(P>!A`>!XLV!!!&OQ`0N`$IS2&X`2F_(!#-(54&'BZ,%J!2+HDF
XMGE*[`A"#?@0`=`:P!#/)ZP(RP/B_+@"+-2Z)-J)2BW4"+HDVI%(NC!ZF4E"T
XM"\TA6,<&>@P!`(M6!K1+S2$NCA:@4BZ+)IY2'\<&>@P``+\N`"Z.'J92+HLV
XMI%*)=0(NBS:B4HDU!UU?7G($M$W-(>D'[%6+[+BD`.@HV5=6,__'1O0!`#D^
XM1@QT!/\61@RX7`!0_W8$Z([B@\0$B_`+]G4#BW8$N"X`4%;H">Q`0+P'09
XMN`"`4/]V!.BJ^(/$!(E&YD!U>+C__^E/`O]V!.BQX8/$`@4%`%#HLMV#Q`*+
XM^`O_=.&X,!!0_W8$5^APX8/$!%#HM_N#Q`2X`(!05^AE^(/$!(E&YD!U,+@U
XM$%"X+@!05^@/XH/$!%#H0NQ`2X`(!05^@^^(/$!(E&YD!U"5?H2MV#Q`+K
XMBXE^!(OU@>ZB`+@8`%!6_W;FZ&WY@\0&0'4C"_]T!U?H(]V#Q`+_=N;HW^J#
XMQ`+'!D(,"`#'!E`,"P#I3O^X`@!0*\!04/]VYN@K!8/$"(E&^HE6_`O2?0@S
XMP(E&_(E&^O=&^@\`=!F+1OJ+5ORQ!.BR[04!`(/2`(E&^HE6_.L*L`10C4;Z
XM4.C!U_]VYNAZZH/$`H`\374&@'P!6G01@#Q:=`/IN`"`?`%-=`/IKP#_3O2*
XM1`68L0C3X"K`BDP$*NT#P8E&[L=&\```N"``F5)0C4;N4.AK`8I$"9BQ"-/@
XM*L"*3`@J[0/!*](I1NX95O"*1`.8L0C3X"+%BDP"`\$M``+WV(E&WK$$TV[>
XMBT;>*4;N&5;PBD0/F+$(T^`BQ8I,#@/!B4;@BD01F+$(T^`BQ8I,$`/!B4;R
XMBD05F+$(T^`BQ8I,%`/!B4;HBD07F+$(T^`BQ8I,%@/!B4;^N`$`4(V&7O]0
XM5XU&Y%"-1OA0_W8(_W8&Z(3Z@\0.B4;B0'40"_]T!U?HN]N#Q`*+1N+K3O]V
XM^O]VZ/]V_O]V\O]VX/]V[O]VXO]VY(V&7O]0_W8$Z)/?@\0"0%#_=@3_=O3H
XMH`"#Q!B)1NH+_W0'5^ATVX/$`O]V^.AKVX/$`HM&ZEY?B^5=PU=6BTX*BT8$
XMBU8&BWX(5QX'_),*P'03@_D*=0X+TGD*L"VJ]]N#T@#WVHOWDC/2"\!T`O?Q
XMD_?QDH?3!#`\.78"!">JB\(+PW7BB`5/K(8%B$3_3SOW
XM!/]V"/]V!O]W`O\WZ),#BUX$B0>)5P)=P@8`58OL,]*Y$P"[Y@N#PP2+1P(+
XMP'03CL!3N___M$K-(0/30EN#PP3BYHX&0`R[__^T2LTA`]J`/D@,`G<4=`RZ
XM/!"T"@KV$N#?@0`=`B+3AI!4@8?NH``
XMM!K-(5H?C,`%$`"#?@0`=`0#1AI`0":C+`"_@`"+=@J*#$%!\Z2_7`"1N2``
XM\ZJ_7`"+=@I&N`$IS2$\_W0",L"*R+]L`+@!*
XM$(M.#H-^!`"+ZW1')HL^+`",PRO[4;$$T^>+WX/K$";'!P`!)HQ'`B;'1P2,
XMV";'1P:.P";'1PB+Q8KKL;LFB4\*M?B*SR:)3PQ9)L='#O\OZS"_$`&[``$F
XMB1>#P@@FQT<$C-@FQT<&CL`FQT<(B\4FQT<*NP`FQT<,`?@FQT<._R_\@SY^
XM#`!T%%!2'HX>?@R+%GP,L".T)+``KV$NQ!-/C^H[0B^/[,\!0G`:#PP13C,&X(37-(0:.P5.,PHS9CMJ.
XMP;1)RU6+[(M>!/=&"`"`=$N#?@H`=!HSR8O1N`%"S2%R4/=&"@(`=0X#1@83
XM5@AY*[@!`/GK.XD68!"C8A"+T;@"0LTA`T8&$U8(>0^+#F`0BQ9B$+@`0LTA
XMZ]6+5@:+3@B*1@JT0LTA<@?&AU(,`.L#NO__Z53E58OL5HM&"HM.!/?AB]B+
XM1@B+\/?A`]J6]V8&`]B+TXO&7EW""`````````````````````````````!#
XM($QI8G)A2`E9"!M86ME9FEL97,@86QL
XM;W=E9`!N965D(&$@9FEL96YA;64@869T97(@+68`=6YK;F]W;B!O<'1I;VX@
XM8"5S)PH``%``7@`M`'-T9&EN`'(`*BHJ(')E861I;F<@8"5S)R`J*BH*`&)A
XM9"!L:6YE.B```"5S*&QI;F4@)74I.B`E&ES="!Y970`)3)U+24P,G4M)3`R=2`@)3)U.B4P,G4Z)3`R
XM=0```"4J2!B92!FF5R;R!O2!P2!O=70@;V8@9&%T92!T87)G971S+@!/<'1I;VYS(&UA>2!B
XM92!G2!M86-R;W,@=&AA="!C;VYT86EN('-P86-E&4*`#,N.```<@6]!0(&109T!G4&M`:U!N@&^`85!TD'@0>W!_<'
XM,PAL"*P(K0CN"!,)3@E/"9<)W`D="AX*```N049415(`+D)%1D]210`````M
XM+0`Z(&EL;&5G86P@;W!T:6]N("TM(``Z(&EL;&5G86P@;W!T:6]N("TM(``Z
XM(&]P=&EO;B!R97%U:7)E2!O<&5N(&9I;&5S`````$YO('-P86-E(&QE9G0@;VX@9&5V:6-E
XM``````!-871H(&%R9W5M96YT`%)EP-[0W]#0\.$`X1#A(.'@XP#C$.,@XS#D0.
XM10Y9#EH.6PY<#G0.=0YV#G<.>`ZI<.F`XE````````````*C\`+@`N+@`-
XM"@``````````````````````````````````````````````````````````
XM`````````"```#M#7T9)3$5?24Y&3P```!8"`A@-"0P,#`<(____$@T2`O\`
XM`"AN=6QL*0`K+2`C`%!!5$@`.P!<`#L`````````````````````````````
XM````````````````````````````````````````````````````````````
XM`"YC;VT`+F5X90```#M#7T9)3$5?24Y&3P`[0U]&24Q%7TE.1D\`````````
XMP`^I!=`/J04``````````````````````````````````````````"YC;VT`
XM+F5X90```$5X96,@;F]T(&%V86EL86)L92!O;B!$3U,@,2YX#0HD````````
X0`````````````````````&%V
X`
Xend
END_OF_make.exe.uu
if test 38369 -ne `wc -c makedefs.c <<'END_OF_makedefs.c'
X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
X/* makedefs.c - NetHack version 2.2 */
X
Xstatic char SCCS_Id[] = "@(#)makedefs.c 2.2\t87/11/29";
X
X#include
X#include "config.h"
X
X#ifdef MSDOS
X#undef exit
X#define freopen _freopen
X#define alloc malloc
X#define RDMODE "r"
X#define WRMODE "w"
X#else
X#define RDMODE "r+"
X#define WRMODE "w+"
X#endif
X
X/* construct definitions of object constants */
X#define OBJ_FILE "objects.h"
X#define ONAME_FILE "onames.h"
X#define TRAP_FILE "trap.h"
X#define DATE_FILE "date.h"
X#define RUMOR_FILE "rumors"
X#define DATA_FILE "data"
X
Xchar inline[256], outline[256];
X
Xmain(argc, argv)
X int argc;
X char *argv[];
X{
X char *option;
X
X if(argc == 2) {
X option = argv[1];
X switch (option[1]) {
X
X case 'o':
X case 'O': do_objs();
X break;
X case 't':
X case 'T': do_traps();
X break;
X case 'r':
X case 'R': do_rumors();
X break;
X
X case 'd': do_data();
X break;
X
X case 'D': do_date();
X break;
X default:
X fprintf(stderr, "Unknown option '%c'.\n", option[1]);
X exit(1);
X }
X exit(0);
X } else fprintf(stderr, "Bad arg count (%d).\n", argc-1);
X exit(1);
X}
X
Xdo_traps() {
Xint ntrap, getpid();
Xchar tmpfile[30];
XFILE *freopen();
X
X sprintf(tmpfile, "makedefs.%d", getpid());
X if(freopen(tmpfile, WRMODE, stdout) == NULL) {
X
X perror(tmpfile);
X exit(1);
X }
X if(freopen(TRAP_FILE, RDMODE, stdin) == NULL) {
X
X perror(TRAP_FILE);
X exit(1);
X }
X
X while(gets(inline) != NULL) {
X
X puts(inline);
X if(!strncmp(inline, "/* DO NOT REMOVE THIS LINE */", 29)) break;
X }
X ntrap = 10;
X printf("\n");
X#ifdef NEWTRAPS
X printf("#define\tMGTRP\t\t%d\n", ntrap++);
X printf("#define\tSQBRD\t\t%d\n", ntrap++);
X#endif
X#ifdef SPIDERS
X printf("#define\tWEB\t\t%d\n", ntrap++);
X#endif
X#ifdef NEWCLASS
X printf("#define\tSPIKED_PIT\t%d\n", ntrap++);
X printf("#define\tLEVEL_TELEP\t%d\n", ntrap++);
X#endif
X#ifdef SPELLS
X printf("#define\tANTI_MAGIC\t%d\n", ntrap++);
X#endif
X#ifdef KAA
X printf("#define\tRUST_TRAP\t%d\n", ntrap++);
X# ifdef RPH
X printf("#define\tPOLY_TRAP\t%d\n", ntrap++);
X# endif
X#endif
X printf("\n#define\tTRAPNUM\t%d\n", ntrap);
X fclose(stdin);
X fclose(stdout);
X#ifdef MSDOS
X remove(TRAP_FILE);
X#endif
X rename(tmpfile, TRAP_FILE);
X}
X
X
Xstruct hline {
X struct hline *next;
X char *line;
X} *f_line;
X
Xdo_rumors(){
Xstruct hline *c_line;
Xchar infile[30];
XFILE *freopen();
X
X if(freopen(RUMOR_FILE, WRMODE, stdout) == NULL) {
X
X perror(RUMOR_FILE);
X exit(1);
X }
X#ifdef MSDOS
X sprintf(infile, "%s.bas", RUMOR_FILE);
X#else
X sprintf(infile, "%s.base", RUMOR_FILE);
X#endif
X if(freopen(infile, RDMODE, stdin) == NULL) {
X
X perror(infile);
X exit(1);
X }
X
X while(gets(inline) != NULL) puts(inline);
X
X#ifdef KAA
X sprintf(infile, "%s.kaa", RUMOR_FILE);
X if(freopen(infile, RDMODE, stdin) == NULL) perror(infile);
X
X while(gets(inline) != NULL) puts(inline);
X#endif
X
X#ifdef NEWCLASS
X sprintf(infile, "%s.mrx", RUMOR_FILE);
X if(freopen(infile, RDMODE, stdin) == NULL) perror(infile);
X
X while(gets(inline) != NULL) puts(inline);
X#endif
X fclose(stdin);
X fclose(stdout);
X}
X
Xdo_date(){
Xint getpid();
Xlong clock, time();
Xchar tmpfile[30], cbuf[30], *c, *ctime();
XFILE *freopen();
X
X sprintf(tmpfile, "makedefs.%d", getpid());
X if(freopen(tmpfile, WRMODE, stdout) == NULL) {
X
X perror(tmpfile);
X exit(1);
X }
X if(freopen(DATE_FILE, RDMODE, stdin) == NULL) {
X
X perror(DATE_FILE);
X exit(1);
X }
X
X while(gets(inline) != NULL) {
X
X if(!strncmp(inline, "char datestring[] = ", 20)) break;
X puts(inline);
X }
X time(&clock);
X strcpy(cbuf, ctime(&clock));
X for(c = cbuf; *c != '\n'; c++); *c = 0; /* strip off the '\n' */
X printf("char datestring[] = %c%s%c;\n", '"', cbuf, '"');
X
X fclose(stdin);
X fclose(stdout);
X#ifdef MSDOS
X remove(DATE_FILE);
X#endif
X rename(tmpfile, DATE_FILE);
X}
X
Xdo_data(){
Xint getpid();
Xchar tmpfile[30];
XFILE *freopen();
X
X sprintf(tmpfile, "%s.base", DATA_FILE);
X if(freopen(tmpfile, RDMODE, stdin) == NULL) {
X
X perror(tmpfile);
X exit(1);
X }
X if(freopen(DATA_FILE, WRMODE, stdout) == NULL) {
X
X perror(DATA_FILE);
X exit(1);
X }
X
X while(gets(inline) != NULL) {
X#ifdef KOPS
X if(!strcmp(inline, "K a kobold"))
X printf("K\ta Keystone Kop\n");
X else
X#endif
X#ifdef KAA
X if(!strcmp(inline, "Q a quasit"))
X printf("Q\ta quantum mechanic\n");
X else
X#endif
X#ifdef ROCKMOLE
X if(!strcmp(inline, "r a giant rat"))
X printf("r\ta rockmole\n");
X else
X#endif
X#ifdef SPIDERS
X if(!strcmp(inline, "s a scorpion"))
X printf("s\ta giant spider\n");
X else if (!strcmp(inline, "\" an amulet"))
X printf("\"\tan amulet (or a web)\n");
X else
X#endif
X#ifdef SPELLS
X if (!strcmp(inline, "+ a door"))
X printf("+\ta door (or a spell book)\n");
X else
X#endif
X#ifdef FOUNTAINS
X if(!strcmp(inline, "} water filled area")) {
X puts(inline);
X printf("{\ta fountain\n");
X } else
X#endif
X#ifdef NEWCLASS
X if(!strcmp(inline, "^ a trap")) {
X puts(inline);
X printf("\\\tan opulent throne.\n");
X } else
X#endif
X puts(inline);
X }
X#ifdef SAC
X printf("3\ta soldier\n");
X#endif
X#ifdef RPH
X printf("8\tthe medusa;\n");
X printf("\tThis hideous creature from ancient Greek myth was the doom\n");
X printf("\tof many a valiant adventurer. It is said that one gaze from\n");
X printf("\tits eyes could turn a man to stone. One bite from the nest\n");
X printf("\tof snakes which crown its head could cause instant death.\n");
X printf("\tThe only way to kill this monstrosity is to turn its gaze\n");
X printf("\tback upon itself.\n");
X#endif
X#ifdef KAA
X printf("9\ta giant;\n");
X printf("\tGiants have always walked the earth, though they are rare in\n");
X printf("\tthese times. They range in size from little over nine feet\n");
X printf("\tto a towering twenty feet or more. The larger ones use huge\n");
X printf("\tboulders as weapons, hurling them over large distances. All\n");
X printf("\ttypes of giants share a love for men - roasted, boiled, or\n");
X printf("\tfried. Their table manners are legendary.\n");
X#endif
X fclose(stdin);
X fclose(stdout);
X}
X
X#define LINSZ 1000
X#define STRSZ 40
X
Xint fd;
Xstruct objdef {
X
X struct objdef *next;
X char string[STRSZ];
X} *more, *current;
X
Xdo_objs(){
Xregister int index = 0;
Xregister int propct = 0;
X#ifdef SPELLS
Xregister int nspell = 0;
X#endif
XFILE *freopen();
Xregister char *sp;
Xchar *limit();
Xint skip;
X
X fd = open(OBJ_FILE, 0);
X if(fd < 0) {
X perror(OBJ_FILE);
X exit(1);
X }
X
X if(freopen(ONAME_FILE, WRMODE, stdout) == NULL) {
X perror(ONAME_FILE);
X exit(1);
X }
X
X current = 0; newobj();
X skipuntil("objects[] = {");
X
X while(getentry(&skip)) {
X if(!*(current->string)){
X if (skip) index++;
X continue;
X }
X for(sp = current->string; *sp; sp++)
X if(*sp == ' ' || *sp == '\t' || *sp == '-')
X *sp = '_';
X
X /* Do not process duplicates caused by #ifdef/#else pairs. */
X /* M. Stephenson */
X if (! duplicate()) {
X
X if(!strncmp(current->string, "RIN_", 4))
X propct = specprop(current->string+4, propct);
X for(sp = current->string; *sp; sp++) capitalize(sp);
X /* avoid trouble with stupid C preprocessors */
X if(!strncmp(current->string, "WORTHLESS_PIECE_OF_", 19))
X printf("/* #define\t%s\t%d */\n", current->string, index++);
X else {
X#ifdef SPELLS
X if(!strncmp(current->string, "SPE_", 4)) nspell++;
X printf("#define\t%s\t%d\n", limit(current->string), index++);
X#else
X if(strncmp(current->string, "SPE_", 4))
X printf("#define\t%s\t%d\n", limit(current->string), index++);
X#endif
X }
X newobj();
X }
X }
X printf("\n#define CORPSE DEAD_HUMAN\n");
X#ifdef KOPS
X printf("#define DEAD_KOP DEAD_KOBOLD\n");
X#endif
X#ifdef SPIDERS
X printf("#define DEAD_GIANT_SPIDER DEAD_GIANT_SCORPION\n");
X#endif
X#ifdef ROCKMOLE
X printf("#define DEAD_ROCKMOLE DEAD_GIANT_RAT\n");
X#endif
X#ifndef KAA
X printf("#define DEAD_QUASIT DEAD_QUANTUM_MECHANIC\n");
X printf("#define DEAD_VIOLET_FUNGI DEAD_VIOLET_FUNGUS\n");
X#endif
X printf("#define LAST_GEM (JADE+1)\n");
X printf("#define LAST_RING %d\n", propct);
X#ifdef SPELLS
X printf("#define MAXSPELL %d\n", nspell+1);
X#endif
X printf("#define NROFOBJECTS %d\n", index-1);
X exit(0);
X}
X
Xstatic char temp[32];
X
Xchar *
Xlimit(name) /* limit a name to 30 characters length */
X char *name;
X{
X strncpy(temp, name, 30);
X temp[30] = 0;
X return(temp);
X}
X
Xnewobj()
X{
X extern long *alloc();
X
X more = current;
X current = (struct objdef *)alloc(sizeof(struct objdef));
X current->next = more;
X}
X
Xstruct inherent {
X
X char *attrib,
X *monsters;
X} abilities[] = { "Regeneration", "TVi",
X "See_invisible", "I",
X "Poison_resistance", "abcghikqsuvxyADFQSVWXZ&",
X "Fire_resistance", "gD&",
X "Cold_resistance", "gFY",
X "Teleportation", "LNt",
X "Teleport_control", "t",
X "", "" };
X
Xspecprop(name, count)
X
X char *name;
X int count;
X{
X int i;
X char *tname, *limit();
X
X tname = limit(name);
X capitalize(tname);
X for(i = 0; strlen(abilities[i].attrib); i++)
X if(!strcmp(abilities[i].attrib, tname)) {
X
X printf("#define\tH%s\tu.uprops[%d].p_flgs\n", tname, count);
X printf("#define\t%s\t((H%s) || index(\"%s\", u.usym))\n",
X tname, tname, abilities[i].monsters);
X return(++count);
X }
X
X printf("#define\t%s\tu.uprops[%d].p_flgs\n", tname, count);
X return(++count);
X}
X
Xchar line[LINSZ], *lp = line, *lp0 = line, *lpe = line;
Xint xeof;
X
Xreadline(){
Xregister int n = read(fd, lp0, (line+LINSZ)-lp0);
X if(n < 0){
X printf("Input error.\n");
X exit(1);
X }
X if(n == 0) xeof++;
X lpe = lp0+n;
X}
X
Xchar
Xnextchar(){
X if(lp == lpe){
X readline();
X lp = lp0;
X }
X return((lp == lpe) ? 0 : *lp++);
X}
X
Xskipuntil(s) char *s; {
Xregister char *sp0, *sp1;
Xloop:
X while(*s != nextchar())
X if(xeof) {
X printf("Cannot skipuntil %s\n", s);
X exit(1);
X }
X if(strlen(s) > lpe-lp+1){
X register char *lp1, *lp2;
X lp2 = lp;
X lp1 = lp = lp0;
X while(lp2 != lpe) *lp1++ = *lp2++;
X lp2 = lp0; /* save value */
X lp0 = lp1;
X readline();
X lp0 = lp2;
X if(strlen(s) > lpe-lp+1) {
X printf("error in skipuntil");
X exit(1);
X }
X }
X sp0 = s+1;
X sp1 = lp;
X while(*sp0 && *sp0 == *sp1) sp0++, sp1++;
X if(!*sp0){
X lp = sp1;
X return(1);
X }
X goto loop;
X}
X
Xgetentry(skip) int *skip; {
Xint inbraces = 0, inparens = 0, stringseen = 0, commaseen = 0;
Xint prefix = 0;
Xchar ch;
X#define NSZ 10
Xchar identif[NSZ], *ip;
X current->string[0] = current->string[4] = 0;
X /* read until {...} or XXX(...) followed by ,
X skip comment and #define lines
X deliver 0 on failure
X */
X while(1) {
X ch = nextchar();
X swi:
X if(letter(ch)){
X ip = identif;
X do {
X if(ip < identif+NSZ-1) *ip++ = ch;
X ch = nextchar();
X } while(letter(ch) || digit(ch));
X *ip = 0;
X while(ch == ' ' || ch == '\t') ch = nextchar();
X if(ch == '(' && !inparens && !stringseen)
X if(!strcmp(identif, "WAND") ||
X !strcmp(identif, "RING") ||
X !strcmp(identif, "POTION") ||
X !strcmp(identif, "SPELL") ||
X !strcmp(identif, "SCROLL"))
X (void) strncpy(current->string, identif, 3),
X current->string[3] = '_',
X prefix = 4;
X }
X switch(ch) {
X case '/':
X /* watch for comment */
X if((ch = nextchar()) == '*')
X skipuntil("*/");
X goto swi;
X case '{':
X inbraces++;
X continue;
X case '(':
X inparens++;
X continue;
X case '}':
X inbraces--;
X if(inbraces < 0) return(0);
X continue;
X case ')':
X inparens--;
X if(inparens < 0) {
X printf("too many ) ?");
X exit(1);
X }
X continue;
X case '\n':
X /* watch for #define at begin of line */
X if((ch = nextchar()) == '#'){
X register char pch;
X /* skip until '\n' not preceded by '\\' */
X do {
X pch = ch;
X ch = nextchar();
X } while(ch != '\n' || pch == '\\');
X continue;
X }
X goto swi;
X case ',':
X if(!inparens && !inbraces){
X if(prefix && !current->string[prefix]) {
X#ifndef SPELLS
X *skip = strncmp(current->string, "SPE_", 4);
X#else
X *skip = 1;
X#endif
X current->string[0] = 0;
X }
X if(stringseen) return(1);
X printf("unexpected ,\n");
X exit(1);
X }
X commaseen++;
X continue;
X case '\'':
X if((ch = nextchar()) == '\\') ch = nextchar();
X if(nextchar() != '\''){
X printf("strange character denotation?\n");
X exit(1);
X }
X continue;
X case '"':
X {
X register char *sp = current->string + prefix;
X register char pch;
X register int store = (inbraces || inparens)
X && !stringseen++ && !commaseen;
X do {
X pch = ch;
X ch = nextchar();
X if(store && sp < current->string+STRSZ)
X *sp++ = ch;
X } while(ch != '"' || pch == '\\');
X if(store) *--sp = 0;
X continue;
X }
X }
X }
X}
X
Xduplicate() {
X
X char s[STRSZ];
X register char *c;
X register struct objdef *testobj;
X
X strcpy (s, current->string);
X for(c = s; *c != 0; c++) capitalize(c);
X
X for(testobj = more; testobj != 0; testobj = testobj->next)
X if(! strcmp(s, testobj->string)) return(1);
X
X return(0);
X}
X
Xcapitalize(sp) register char *sp; {
X if('a' <= *sp && *sp <= 'z') *sp += 'A'-'a';
X}
X
Xletter(ch) register char ch; {
X return( ('a' <= ch && ch <= 'z') ||
X ('A' <= ch && ch <= 'Z') );
X}
X
Xdigit(ch) register char ch; {
X return( '0' <= ch && ch <= '9' );
X}
X
X/* a copy of the panic code from hack.pri.c, edited for standalone use */
X
Xboolean panicking = 0;
X
Xpanic(str,a1,a2,a3,a4,a5,a6)
Xchar *str;
X{
X if(panicking++) exit(1); /* avoid loops - this should never happen*/
X fputs(" ERROR: ", stdout);
X printf(str,a1,a2,a3,a4,a5,a6);
X#ifdef DEBUG
X# ifdef UNIX
X if(!fork())
X abort(); /* generate core dump */
X# endif
X#endif
X exit(1);
X}
X
X#if defined(SYSV) || defined(GENIX)
Xrename(oldname, newname)
X char *oldname, *newname;
X{
X if (strcmp(oldname, newname)) {
X
X unlink(newname);
X link(oldname, newname);
X unlink(oldname);
X }
X}
X#endif
X
X#ifdef MSDOS
X/* Get around bug in freopen when opening for writing */
X/* Supplied by Nathan Glasser (nathan@mit-eddie) */
X#undef freopen
XFILE *_freopen(fname, fmode, fp)
Xchar *fname, *fmode;
XFILE *fp;
X{
X if (!strncmp(fmode,"w",1))
X {
X FILE *tmpfp;
X
X if ((tmpfp = fopen(fname,fmode)) == NULL)
X return(NULL);
X if (dup2(fileno(tmpfp),fileno(fp)) < 0)
X return(NULL);
X fclose(tmpfp);
X return(fp);
X }
X else
X return(freopen(fname,fmode,fp));
X}
X
X# ifdef __TURBOC__
Xint getpid() {
X return(1);
X}
X# endif
X#endif
END_OF_makedefs.c
if test 14067 -ne `wc -c