home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!gatech!howland.reston.ans.net!ux1.cso.uiuc.edu!uwm.edu!ogicse!news.tek.com!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v17i101: nethack31 - display oriented dungeons & dragons (Ver. 3.1), Patch2z/33
- Message-ID: <1v8iut$j8a@ying.cna.tek.com>
- Date: 11 Jun 93 00:17:33 GMT
- Article-I.D.: ying.1v8iut$j8a
- Organization: Tektronix, Inc, Redmond, OR, USA
- Lines: 1412
- Approved: billr@saab.CNA.TEK.COM
- NNTP-Posting-Host: saab.cna.tek.com
- Xref: uunet comp.sources.games:1764
-
- Submitted-by: izchak@linc.cis.upenn.edu (Izchak Miller)
- Posting-number: Volume 17, Issue 101
- Archive-name: nethack31/Patch2z
- Patch-To: nethack31: Volume 16, Issue 1-116
- Environment: Amiga, Atari, Mac, MS-DOS, Windows-NT, OS2, Unix, VMS, X11
-
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 26 (of 33)."
- # Contents: sys/mac/NHrsrc.hqx sys/unix/snd86unx.shr
- # Wrapped by billr@saab on Thu Jun 10 16:55:07 1993
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'sys/mac/NHrsrc.hqx' -a "${1}" != "-c" ; then
- echo shar: Renaming existing file \"'sys/mac/NHrsrc.hqx'\" to \"'sys/mac/NHrsrc.hqx.orig'\"
- mv -f 'sys/mac/NHrsrc.hqx' 'sys/mac/NHrsrc.hqx.orig'
- fi
- echo shar: Extracting \"'sys/mac/NHrsrc.hqx'\" \(32969 characters\)
- sed "s/^X//" >'sys/mac/NHrsrc.hqx' <<'END_OF_FILE'
- X(This file must be converted with BinHex 4.0)
- X:$%jPG%KKBfXZFR0bB`"bFh*M8P0&4!%!!!!!!!!!AUL0L3!!!!!"!!!!9[d!!&A
- Xp!!!(U`!!!!!0!"!!,3!`S!)!U!!!!!!!&J!i!#F!iBJB8h4[$%jPG%KKBfXZFR0
- XbB`m#!!!!FR0bBe*6483"!2rrrrm!!(*cFQ058d9%!3$rrrrr!!!!!!!!!!!!!!!
- X!!!!!!!!!U""X)J!!!!!!!&kS!!$)!6!!!3!!!!!!!!!!#lN!!!!!&3!!!!!!jJ&
- XF!!%!!!!!!!!!!!Zi!!!!!"8!8!"Z!2S"Z!!"!!!!!!!!!!!(e!!!!!!9!&!!EJ$
- Xk!EJ!!3!!!!!!!!!!"p-!!!!!&3"3!'i!qJ'i!!%!!!!!!!!!!!I5!!!!!"8!8!"
- XZ!2S"Z!!!!"`"#!!)!8S!m!!!!!!!!!!!!!!(6@9cFf&RC6J+!!!!(!%Z!!3"8J(
- X+!!!!!!!!!!!!!!C6G'&dGA0V1!S!!!!@!(`!fJ$i!BS!!!!!!3!!!!!!!%di#J!
- X!!"S![J!'!9!"-J!!!!!"!!!!!!!%5@jQEb!i#J!!!#)!+!!S!)`!SJ!!!!!"!!!
- X!!!!06R9XE#"AD@jNEhFJ)6J+!!!!2!j1G@eLCA)JEfBJDf9jFdp$6P3&+LSU+LT
- X-8e4$"dYPH@0[C'9)3PP8"%0SBA*$5%&5"5SU+LSU6&0843!!!#!!+!!S!8S"lJ!
- X!!!!!!!!!!!!,4(9ZCf9[EL"0BA!i#J!!!#!!+!!S!+`"c!!!!!!"!!!!!!!,4'P
- XKCfj[Fh4TBh-i#J!!!"B!!400B@-J6Q9d5'&MDb")C@a`b5mr!!!!J!!!!!!!!!!
- X!!!!!$rm!!!!!r`$a!I!!!!$lm!m3(`!!!!qr$`%"m!!!!2[r%"$`!!$`$lrrmI!
- X!$`rrqr!2!!!2%"$r[`!!!!m"!I$lm!!!!2!3m!qr!!!!$`%2!2[`!!!!rr!!$lm
- X!!!!!!!!!qr!!!!!!!!!2[`!!!!!!!!$r!!!!J!rrrrrrr`!!$``-$!`2m!!2`-$
- X!`-r2!!m-$!rr$rr`$mr`ca$``2!2$lm2!3m-m!r!qrm3(m$`$``2[rrr$2!2rrr
- Xlm-$!m!ra!Iqr$!c`$r!3m2[``2!2$`(m$lm-m!r!rr$!qr$`$``-$!`2[r!2`-$
- X!`-$lm!rrrrrrrrr`!!!!3!!!!F!ci#R`&IJ,q#AiIT!!Id"qS$j3(bJ1&!!+!!8
- X!!`(!Fq"rm(ri2r`rr(rmrrMrm2r`IrJrr"mq$Km!$`!(!!!!3(r`3"K!&%(H@H*
- X9mN[b4I*qJRp#IU*H8NiU3"C!#RrqIr"rq(rmIrjrrRrqIrjrrRrqIrjrrRrqIrj
- XrrRrqIri!!!%!!!!!!!!2J!!!2q!!%$r`!"`Iq!!+(rJ!#4rm!!5Ir!!#Ir`!!6r
- Xm!!#Ir!!`cr`!IqBB!(rb!!"rq3!!Irb!!(rb3!"rm5!!2r#3!!!rm%J!(rJN!!r
- Xi%J!$i!N!!!!%J!!!!N!!!!%J!!!!N!!!!!")!!!!*!!!!")!!!!+!!!!"!!2J!!
- X!2q!!%(r`!$arq!!q2r`!(crm!"qrrJ!2rri!"rrq!!2rrJ!arri!Irrq!2rrr!$
- XrraJ!rrq!!2rr`!$rrq!!rr[`!(rjq!"rq2`!2raq!"rm2`!2q"q!!q!2`!!!"q!
- X!!!2`!!!"q!!!!2`!!!"q!!!!2`!!!"m!!!!1!!!"!"rrrJ!3!!-!%!!#J"!!!N!
- X3!!)J%!!#%"!$iJJ3"r[i%BIm#"&$r!J4)ri)%*2q#""2rJJ3*ri)%"2q#"-CM!J
- XAr)!)&rj!#"Ir)!JAr*!!#"Im5!J6r#3)%ri5#"(q#3J3I!5)%!!#5"!!!5J3!!#
- XB%!!!5"!!!#J3!!!B(rrrq"rrrJ!Irrm!(rrrJ"rrrm!IrrrJ(rrrm"rrrrJIrrr
- Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
- Xi(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrr
- Xi!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$rrr!!!!!!!!!!!!!!!!$r%"!Im!!
- X!!!!!!!!2!!!!m3%"!3m!!!!!!!!!$rm!!!m3%"!3m!!!!!!!!!$lm!!2!3%"!I!
- X!!!!!!!!!qlm!$a!3%"!I!!!!!!!!!!qlm!m"!3%"$`!!!!!!!!!!qlrr%"!3%"m
- X!!!!!!!!!!!qlm3%"!3%2!!!!!!!!!!!!qlm3%"!3(`!!!!!!!2m!!2qlmIrrm3m
- X!!!!!!!m3rrm3qlr`!!r`!!!!!!!2!3%"!3qlm!!!!!!!!!!!$a!3%"!3qlm!!!!
- X!!!!!!!m"!3%"!Iqlm!!!!!!!!!!2%"!3%"m!qlm!!!!!!!!!$`%"!3%2!!qlm!!
- X!!!!!!!$`%"!3(`!!qlm!!!!!!!!!m3%"!3m!!!qlm!!!!!!!!!m3%"!3m!!!qlm
- X!!!!!!!!!r`%"$r!!!!qlm!!!!!!!!!$rrr!!!!!!qlm!!!!!!!!!!!!!!!!!!!q
- Xlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!!!
- X!qlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!!!!qlm!!!!!!!!!!!!!!!!
- X!!!qlm!!!!!!!!!!!!!!!!!!!qr!!!!!!!!!!!!!!!!!!!!m!!!!#!!!2rrrrrrr
- Xrrrrrm!!!!!!!$``-$!`-$!`-$2m!!!!!!!r!`-$!`-$!`-$mm!!!!!!2$!`-$!`
- X-$!`-r-m!!!!!$m$!`-$!`-$!`2c-m!!!!!m-$!`-$!`-$!cmc-m!!!!2`-$!`-$
- Xrrr$!r-c-m!!!$``-$!`2!3%2r2rrrr!!!!r!cr$!ca!3%2r!`-$`!!!2$!qr$!c
- Xa!3%2$!`-m!!!$m$2Zr$!m"!3%2$!`2!!!!m-$2Zr$2%"!3(m$!c`!!!2`-$2Zrr
- X`%"!3m-$!m!!!$``-$2Zr!3%"!I`-$2!!!!r!`-$2Zr$rra$``-$`!!!2$2m-$rZ
- Xrr!cr$!`-m!!!$mm3rrmIZr$!`-$!`2!!!!m2!3%"!IZr$!`-$!c`!!!2ca!3%"r
- XrZr$!`-$!m!!!$`m"!3%2$2Zr$!`-$2!!!!r2%"!3(m$2Zr$!`-$`!!!2$2%"!3m
- X-$2Zr$!`-m!!!$m$`%"!3m-$2Zr$!`2!!!!m-$r%"!I`-$2Zr$!c`!!!2`-$2rrr
- X!`-$2Zr$!m!!!$``-$!`-$!`-$2Zr$2!!!!r!`-$!`-$!`-$2Zr$`!!!2$!`-$!`
- X-$!`-$2Zrm!!!$m$!`-$!`-$!`-$2Zr!!!!m-$!`-$!`-$!`-$2[`!!!2`-$!`-$
- X!`-$!`-$2m!!!$rrrrrrrrrrrrrrrrr!!!!!!$!"D!'i!lJ'5!)&%4!!!!%`!!J!
- X!!!!!H!$'!)S"%!3#6dX!!!!!!!S!4J"c!4#)(%0[G@aN)'j[G#"H-L"LC@0KGA0
- XP)&i`,L!JAM%!!!!!!!S!&!!U!$5J!J!!!!!"!!!!!!!!!!!!2rrrm#!!!"JJ"m!
- XB)!r`'#-2q"JLKrJB)NIm'#%Rr"JJRr`B)%rm'#!Rr"JQ-aJB,rN!'#rmJ"J[rN!
- XB,rNJ'#riN!!B*rK)'#Im*"JMr")B)2J*'#!!"*JJ!!*B)!!"1#!!!*JJ!!"B)!!
- X!1$rrrrJIrrri!!!!!!!!!!!!!!!!2rrrm$rrrrJrrrri2rrrq$rrrrJrrrri2rr
- Xrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rr
- Xrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq$rrrrJrrrri2rrrq"rrrrJ!!!!!!!!
- X!3!!!Ira$KP['AqC2jRrQIiCraPlQ6RC!2N!H3!jrrMrq!!"rr(rqIrjrrRrqIrj
- XrrRrqIrjrrRrqIrjrrRrq2ri!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!rrrrrrrrrrrrrrrrr`!!!2c-c-c-c-c-c-c-c-r`!!$mc-c-c-rrrmc
- X-c-c2m!!!r-c-c-ca!3(rc-c-cr!!!2c-rmc-m"!3%2c-c-r`!!$mc2[mc-m"!3(
- Xmc-c2m!!!r-cl[mc2%"!3(mc-cr!!!2c-cl[mc`%"!3r-c-r`!!$mc-cl[r!3%"!
- XIc-c2m!!!r-c-cl[a!3%"$mc-cr!!!2c-c-cl[a$rm"r-c-r`!!$mcrc-rl[rc-r
- Xmc-c2m!!!r2!Ira$l[mc-c-c-cr!!!2ca!3%"$l[mc-c-c-r`!!$mm"!3%"rl[mc
- X-c-c2m!!!r2%"!3(mcl[mc-c-cr!!!2c`%"!3r-cl[mc-c-r`!!$mc`%"!Ic-cl[
- Xmc-c2m!!!r-m3%"!Ic-cl[mc-cr!!!2c-r`%"$mc-cl[mc-r`!!$mc-crrrc-c-c
- Xl[mc2m!!!r-c-c-c-c-c-cl[mcr!!!2c-c-c-c-c-c-cl[mr`!!$mc-c-c-c-c-c
- X-cl[rm!!!r-c-c-c-c-c-c-cl[r!!!2c-c-c-c-c-c-c-clr`!!$mc-c-c-c-c-c
- X-c-crm!!!rrrrrrrrrrrrrrrrrr!!!!rrrrrrrrrrrrrrrrr`!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!L!!%!!!!!!&!"4!"N!Ai%!Np,!!!!!!!'!$J!4J&mL!*H-!!!!"J
- X!@J"H!1J"T`!&!!!!!!!!!!!!JJ!"F!S!!!!B!%)!A!$$!GF!"3!!!!!!!!!!!)F
- X!!(!+!!!!'!"#!&`!``(A!!8!!!!!!!!!!!#'!!"`#J!!!"J!3J"F!--"e`!&!!!
- X!!!!!!!!!K3!!F!S!!!"5!!3!!!!!!'-",3"h!@F%!ePPF`!!!!!!!'-!j`"h!5%
- X%!Nj[!!!!!!!,!%`!9!&QL!*H-!!!!!!!$!!8!#`!0+!#!!%!!!!!!&d"+!"p!8L
- X!!!!!!'3!"3!!!!!!B`%Y!(F"C`3$@@9c!!!!!!!!B`$R!(F")33#6Qm!!!!!!'-
- X!S3"h!0X%"&&eDA3!!!!!!!X!6!"8!@D)!Pi`!!!!!!!-!"3!,!!dS!)!!3!!!!!
- X!A3%S!(d"5)!!!!!!GJ!'!!!!!!"M!5d!G`&R"!0CCA-!!!!!!!"M!1F!G`%K"!*
- X1E`!!!!!!B`#K!(F!f`3$3@aX!!!!!!!!B`"E!(F!P33%8A9TG!!!!!!!#`"-!&3
- X"CSJ#AM!!!!!!!!`!&!!X!$5J!J!"!!!!!!"I!5N!I`&*J!!!!!!B!%)!A!$$!GF
- X!"3!!!!!!!!!!!)J!!(!+!!!!K!!(!!!!!!"M!5d!G`&R"!0CCA-!!!!!!!"M!1F
- X!G`%K"!*1E`!!!!!!B`#K!(F!fj!!!!!!!!!!B`"E!(F!P33$3@aXG!!!!!!!B`!
- X9!(F!6`3%8A9TG!!!!!!!#`"-!&3"CSJ#AM!!!!!!!!`!&!!X!$5J!J!"!!!!!!"
- XH!5J!IJ&)J!!!!!"L!!8!!!!!!'S!q3"q!6-%!Np,!!!!!!"U!+8!IJ$I"!C$B@j
- XMC@`!!!!!!!S!93!k!6Z)!Pi`!!!!!!"%!&F!9!%f%!!!!!!!!!S!(!!U!$bJ!J!
- X"!!!!!!"N!23!K!%8J!!!!!!B!,`!QJ%E!A-!"3!!!!!!!!!!!)N!!'J+!!!!E!!
- X&!!!!!!"#!%d!9J#("!*25`!!!!!!3J!,!&B!433'3f&ZBf9X!!!!!!!(!$3!0`$
- X8L!*H-!!!!!!!4!#B!&3!c"!*4@4TG#"8CAKd!!!!!!!!#!!+!#J!+U!#!!%!!!!
- X!!$d!53"G!'Q!!!!!!)!!!!!!!!!!!!rrrrrrrrm!$mc-rrc-cr!2crca$mc2m!r
- X2[r!3r-r`$mclm3(mcr!2rrqrrrc2m!ra!I[mc-r`$r!3rlr-cr!2c`(mqrc2m!r
- X-rrc2[mr`$mc-c-clrr!2c-c-c-qrm!r-c-c-c2r`$rrrrrrrrr!!rrrrrrrrm!!
- X!#BL3!!!!!!$q!!B!!2rh!!B!#`1l!!N!!J!!!$m!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$B!!!!!!!!&%%!!!!!!#P
- X!!!!`!!!D!!!#'%!&DeL*3!IJ183JJ%!%PF"`(!(#&!!9!"3JMm$rm!(i!!!!Fi!
- XJ!!!!!!!J!!!1B!%!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!F!"3L!)B"!%#J+)!"!))J!!!B!"")K0X!!!#+)!!!IL*3!@
- XJ+83JJ%!%P8"3&!&!!9!"3JMm$rm!d)!!!!*%"3![2!!!3J!`!*N!!'e6RX6#!
- X!"FZF,l[ZF!!1Flc[Iqk2$'%BZmlc[aM'-ImD!J3!%"JK--!!!!!#!!!!!+QZq45
- XK*!T3V9c[JHT4&%8k)*4m3N3PSZa!!NNJ"@YBL8!&S#P%))"!"*9!8"3"3K3!&3!
- X8))r!rr!6!$i!0R4F3!Am)")D)!5!#5$dhpDbNUN!"MaLD%!aL##4M'-B`K'+$+'
- XmaM'-54M&83d0!33!%#!J%%!!!!!#!!!!!+V4q!!!'!!!!#-B!S!!!!"'*)+L3!!
- X!-c)!!US!!!(iL8!&S#P%))"!"*9!8"3"3K3!&3!8))r!rr!M!")!#DaL)$hm2j%
- XU*!bi18#9K9,8)A%!#QK#VhJaM9p"l'-)`K#+$5&DaM'-#4M%N45)!(qFph2p-Re
- XRHICraM@-IUJ38jlh[FjcNQ-B1SjcSaM',ZILjmk0Uc*!!99J"@YBq8(p[qPm))"
- X!"29rhrIrIjAi&IJ9q)r!rrGP"mMmL+rLlF[m)(c))(0m+IkAMlP))Dr2LUL0)-4
- X1L)!LVrd)qp2k$L%Cap(cL4M%LL5)!)aM'+4M0'ZBaMQ#4M9843339'-BaM'-8Rr
- Xr9p'-BaM'0B%m50'1CZb2rKPTN!!"ripq-E'2arrrrrqA-``c$#"q"rmRrLIrrrr
- XiT3+&&)LXBaV,r$q4+$q)I%!1N!#&&E8K)3!6+32`a*&iAd6dB`M#%BU0)4M'%BK
- X*'05%4%J!M'%IT'-mDaM'-(*'054)U""hiaM'(rr5BaKqNBaM'-BdKq4)dBaL!3J
- X%)I*0DeMj5rfpq$a!!N!%pIIrGrprJIP"r4Ai6rrm#+-#L45)G'-Gdr`J%KJJF(p
- X!$T!!!&Db%J%!%LSL+-54###!K'-B`K'+M+%BaK'-549Y4)4)!*aK'#4M-QXBaM!
- X+69988+J4*#FjcK#%%Q-B8T'-CcM'0BNZ5G'FBrmB"%"b5!(iL8SPT3!!3!*!"*3
- X8!93"3!!K3#88)%rrr!LM!T-8L#49%&2m2i!)*)!iJ!#3!)!k63`!%'(2h#FiMR8
- X!"(4mlhi1Mh4r',S1LiML4L6q12a[R[HMic&V&hR`mE5+LrkS$L2DeVA[Hp*M(pl
- XZFjVAZFla*%E1E')!i!"`DC9V@)P+*D8!!%!#3!58&!&8!8!!)8!P"2rr`(E3+
- XqjdKcYZ!pr#"rq5!!!)!!m!!3!!!!%#!!!!!!!!%!!!!!!!!!!!!!!!!"!!!!!!!
- X!)!!!!!!!3#!!!%!J!!!!!%"`!R!!!!#!!!!!!!!!!!!!J!3!"N!!!!!!!!!!!!!
- X"q)P+*D8!!%!#3!58&!&8!8!!)8!P"2rr`!)!!!"!!!!!!Krq!!#5!!!!!!!!!
- X!!!!!)!!!!!!!!!)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$J-!!!%!J!!!!!i!
- X!"!!!!!%!!!!!!!!!!!!(!!!!!B!!!!!!!!!!!!9V@)P+*qF!!%!#3!58(!(F!F!
- X!)8!P"2rr`!!!!!"!!!!!"!!!!!#-!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!%!"!!*!!i!%`!B!"S!(3!J!#8!+J!X!$%!-J!f!$X!23"#!%F!6!"4!&B!@`"
- XJ!'8!CJ"S!'X!F!"c!(J!I3##!)F!M!#4!*B!Q`#J!+8!U!#Y!,)!Y`#m!-%!aJ$
- X,!0!!e3$D!0m!j!$T!1i!m`$i!2d!r`%$!38"#!%1!4!"&3%D!4m"*!%T!5d"-J%
- Xh!6J"1`&!!8)"4`&-!9%"9J&E!@!"C3&T!@i"F`&i!Ad"JJ'(!BS"L`'1!C-"N`'
- XB!Cd"SJ'R!D`"X3'f!EX"`!(&!FS"c3(3!G)"e`(F!H%"jJ(V!I!"p3(k!Im#"!)
- X*!Ji#%`)B!Kd#)J)R!L`#-3)c!MJ#23*#!NF#5`*2!P3#@3*H!Q3#DJ*V!R!#G3*
- Xk!Rm#K!+&!SN#M3+5!TF#Q`+J!U-#U!+Y!V)#YJ+k!Vd#``,*!X`#dJ,B!YX#h`,
- XM!ZF#l3,c![F#r3-$!`N$$`-9!aX$(`-L!b8$+3-[!c8$13-m!d)$5!0,!di$9!0
- XD!em$C30U!fm$G30k!i!$K31+!im$P!1C!jm$T31V!l%$YJ1j!l`$[`2$!mJ$c32
- X4!pB$e`2F!q!$j!2R!qd!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
- X'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'"JB#"J%'!!B!"J!'!!B#"J%
- X'!JB!"J!'!3B!"J)'!3B!"J)'!!B!"J!'!!B!"J!'!!B!"J)'!3B""J!'!3B!"J!
- X'!!B!"J!'!!B!"J!'!!B!"J%'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
- X'!!B!"J)'!3B#"J%'!!B""J!'!!B!"J!'!!B""J!'!!B#"J!'!!B""J!'!!B!"J!
- X'!!B!"J!'!3B!"J!'!!B!"J!'!!B#"J)'!3B!"J!!!!B!"J!'!!B!"J!'!!B!"J!
- X'!!B!"J%'!3B""J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!'!!B!"J!
- X'!JB!"J!'!!B!"J%'!3B!"J!'!!B!"J!'!`B!"J!'!!B!"J!'!`B!"J!'!!B!"J!
- X'!!B#"J!'!!B!"J!'!!B$"J!'!!B$"J!'!!B$"J)'!JB#"J!'!!B#"J!'!!B!"J!
- X'!!B!"J)'!`B$"J)'!!B!"J!'!`B!"J!'!!B$"J!'!!B!"J!'!!B!"J!'!!B!"J!
- X'!!B!"J!'!!B!"J!'!!B!"J!'!3B""J-'!!B!"J!'!3B!"J)'!!B!"J!'!3B!"[r
- Xr!!!,hT!!!!!!!2m!"`!!rrd!"`!2"18!$!!$!!!!3J!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$J!!!!
- X!!!!!!!!!!!!'J!!!!!!!9DY@)P!"q!j4#"!#!!L+F!F!F!(""3!!T!!+#"$q!rr
- Xi!!!!!!!!!!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"84!!!!!!!T3!!!-!!!,!!!
- X!))!!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!!!!!!!!!!!!!m!
- X!!#!!!!TJ!!!3!!`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!F(!!!!!!!!!
- X!!!!!!!!!!!!!(!!!!!!'!!!!!%5!!!!!!!!!!!!3!!!!!!!!))!!9DY@)P!"D!T
- X4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rri!!!!!!!i!"J!p#!!!#!!!!f3!!$915a
- X5)!!#jFiAcIFi!!(!1mlhrZM`aK',[1mlmBaM(mJ5!)%!"!B)6!!!!!!!!!!!!#T
- XVJ#)!L3%!J+Fli(X!JL!1L!dI%%L%f,h%!#++!!!"rL*3!@J+83J3!J!)LP!&!&!
- X"338!!+3!#JJ3rJ2rq!li2J!!%FiJ!I`J!#!J!`!j)(hIeV*5U!!$(M%d%"M%##)
- XJ4M'-)4LJbKZ-BaM%NBaM%-J9!%%!"!J)6$!!!!!!J!!!!#Ud9%8S53+85eM'!+5
- X844&4L"#SN!#4#@M'*!!NNJ"9UeBL8!&S#P%)%!)!#)T3"3"3!8%&!!#N!!S)%2i
- X$rrJ45#)!'j)a)!Am)!4-)!5!+8p%e9,5BA%!"43K9#!Ba"!3,dBaM#%)S0)9c'-
- XB`*'-Ba$%')!"!!3)#!33!!!!!)!!!!!U"%!!!!B!!!!)aJ#J!!!!%BN4q*!!!!!
- X-aL!!##!!!!(q)P!"D!T4#"!#!!L+8!8!8!&""3!!T!!+#"$q!rrlF8!3!#3k-4!
- X&r$mLNL3%J#Rr4)8ae#&a!!8d*THm*dDRb&$(d)`K#+$L%DaM'-#4M&844"!!(qF
- Xph2p-RhRHICh4M@-IUJ3Ljlh[FjcNQ-B1SjcSaM',N!")ZI1MDXBN!"C+@P@V9Mj
- X3IfrkA`J3!J!)qPrprprrIq8rJ+Ii#Rm3rJ2rr**(b2a%4M&i(I`J)9)J5cJJ$d5
- X2Q)JKVm!*9%(iBNM'`!5@rM#2[6qJ`K'FI4miNBa)SN)3!#-BaLNBc4V'-BjLNBe
- X9%8N%)aM'-BaM&*M(eIaM'-BaMARr%M4MQEh%rqQDT3!"rq2IM'aMmIrrrrrrLmB
- X`B-B-%"r!Ira(riMrrrrrr**#K54%4r'1kr`rqM!rX(`J$d5&&93K)3q*P)%3BNL
- Xm*mL@aM#-)4LJiK'-B4L%NBa84%)3!#-B4qNBcKV'-BaFNBe*%LS%)rM'-BIrp*r
- Xq&k4M'-BaM4")%M4M')!)J%%V3Y@V9Mj5rfpq$a!!)J!)qRlrqprrIq!rP!Ip#Rm
- X)rrrm!hL54%4M'0Dr`J*"%J5(iJ$d3!&E+K!3!4&3%3BNL%%"!AaM#-)4LSdK'
- X-B4L%NBeL5%%3!#-B4JNBc4V'-B`#NBe*S%)`M'-B3K"*M'&+4M'-BaM4**%M4
- XM'2r`J%*r3S!"rL*5L@P!!"!!)J!)LJ+!#P!"3!!%&!"JJ)rrrm!"N54%4LU
- X1kr`r)2%NX(fJ$d5!9V%5!""4&K%8BNL+L##3!%BaM#%BU-S4M'%Ba*&@iNK"%!!
- XR'-BT'-bDaM'-)T0994JU"'FCcR1-B45BaK@NBaR1-Be55j*dCaL!%3!%#U99UeB
- XL8SPT3!!3!#)!#)S#J!T3!8!!""3!43S)#2rrr!!43U-Na$SUL#[m)!F3`!!iB!"
- X%J$T1NJ!3B1IZ%ja(-S!!MdI1pq$SpdIaLk$SZ)iNBNr!N!"r'qFpb2M-@XAHI"a
- XY)U,rUJ1DjV@YFjlNQ-IZZjcQYHjc[%N4XjXBJ!i!$`TD!!(q)P+*D8!!%!!L!!L
- X+!S!+8!&!!!38!%8+#!Mrrr`!&N+qad)4fh!Grq$i%!!!!#!!I3!3!!`!%#!!!!!
- X!!!#!!!!!!!!!!!!!!!!!3!!!!!!!F2!!!!!!!"!)!!!3#!!!!!!3(!%!!!!!)!!
- X!!!!!!!!!!#!"!!%3!!!!!!!!!!!!9DY@)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8
- X+#!Mrrr`!%!!!"!!3!!!4q!!!%!!!!!!!!!!!!!!!)!!!!!!!!!%!!!!!!!!!!!!
- X!!!!!)!!!!!!!!!!!!!!!!4!)!!!3#!!!!!%3!!%!!!!!)!!!!!!!!!!!!#!!!!(
- XJ!!!!!!!!!!!!!!(q)P+*D8!!%!!L!!L+!S!+8!&!!!38!%8+#!Mrrr`!!!!!"!!
- Xi!!!3!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!1!`!!!!!!!!!!$J!!)!!!!!3!!!!!!!!!!!!F!!!!!!!!!!!!!!!!!!9DY
- X@)P+*qF!!%!!L!!L+!i!1F!(!!!38!%8+#!Mrrr`!!!!!!!!!!!!!!!!!%!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!"!!*!!i!%`!C!"S!(3!J!#8!+J!X!$%
- X!-J!h!$`!2J"$!%J!63"5!&F!A!"K!'B!C`"T!'d!FJ"f!(X!J3#'!)X!N!!!P3#
- XD!*m!T!#T!+`!X3#f!,X!`!$&!-S!c`$8!0N!hJ$M!1J!l3$b!2F!r!%"!33"#3%
- X-!4%"'!%D!4m"*!%T!5i"-`%h!6`"33!88"5J&-!9%"9J&E!@!"C3&U!@m"F`&
- Xi!Ad"JJ'(!B`"N3'8!C8"Q!'G!Cd"SJ'R!D`"X3'f!EX"`!(&!FS"c`(8!GF"fJ(
- XF!H%"jJ(V!I!"p3(k!Im#"!)*!Ji#%`)B!Kd#)J)R!L`#-3)f!MX#23*#!NF#6!*
- X4!PB#@`*J!Q8#DJ*`!RB#G`*m!S%#L!+2!TB#P`+E!Tm#T!+T!Ud#XJ+e!VS#[`,
- X%!XJ#c!,3!YF#hJ,L!ZN#m!,d![N#rJ-$!`S$%3-@!ad$*!-V!c)$130!!d8$530
- X0!e)$@30J!f3$D!0[!hB$HJ0q!i8$L`13!!19!jS$R`1P!kS$X31f!lX$`!2&!mS
- X$c`29!pX$i!2P!qJ$k`2[!r-$q!2p"!%%"J3("!`%%!38""J%'!3I!!F!"`!(!!F
- X!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F!"`!(!!F
- X!"`!(!!F!"`!(!`F#"`%(!3F""`!(!`F#"`)(!3F""`)(!3F$"`%(!3F#"`%(!3F
- X""`%(!3F""`%(!3F$"`)(!3F""`)(!3F!"`%(!3F""`%(!3F""`%(!3F#"`%(!3F
- X""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!3F#"`%(!JF""`!(!`F""`%(!3F
- X""`%(!JF""`%(!`F""`%(!JF""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`%(!JF
- X$"`)(!3F!!!%(!3F""`%(!3F""`%(!3F""`%(!3F#"`)(!JF""`%(!3F""`%(!3F
- X""`%(!3F""`%(!3F""`%(!3F""`%(!3F""`-(!3F""`%(!3F""`%(!3F""`%(!3F
- X""`-(!3F""`!(!!F!"`-(!!F!"`!(!!F!"`!(!JF!"`!(!!F!"`!(!`F!"`!(!`F
- X!"`!(!`F#"`)(!JF!"`!(!JF!"`!(!!F!"`!(!!F#"`-(!`F#"`!(!!F!"`-(!!F
- X!"`!(!`F!"`%(!3F""`%(!3F""`%(!!F""`%(!3F""`%(!3F""`%(!3F""`)(!JF
- X$"`!(!3F""`%(!3F$"`%(!!F!"`%(!!%!"rrr!!!!3J$`!*F!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!3!*!!",L3!-!!"
- X,M!!!!"B!#PPj@fYFG9CS9fpBE&0L9'T9EP)X!!!!&J!+@9PE5ea99NKAEeK-8d*
- X85P918L`!!!"#B!!!Q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!3!"!!N!!$J*!!`!!$J-!!!)`T!!!!!!!1m!#J!!rrB!#J!
- X-!fF!#J!#!!!!0!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!$J%d!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"q"`!!
- X!!!!!!(!F"`"`!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!&4!PP+!!!'!!!!!!!!!!!!!!!!!!!!!!!!!!U!
- X!!!!!&S&!!!!!!)!!8"3&!&!!!!!!!!!!!!!&%!$!`!!!J!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!FB!!!!!!!!!!!!!!!!!!!1!!i!!!!N)&N#4!C!!8N3&*%"-!$J
- X!!H(J!!!!!!!!!!!!&S&1!!!!$3!!8"3&!&!!!99!!!!22!$IZIdP*3!!ZAI&mhh
- X1!!'1%mlRqk--BJjGjhRIM'$'2d+!JJ"!`K-B!!!!"!!!!!90)4hjG DB%+TQf
- XN+TT#UI*$4!pb%KH,3$jfS!#)-rq@q9%!!+!*!!"AP!8!8!!#PN!L3"r$q09@58B
- X5%!&(L)d%"M%%%P%5-C4%B`bM(Q-BaL5-B-BM)d"#!%%#!3J!!!!%!!!!"9BK)aQ
- X-3!!!!!!!!!!!!!!!8Z4"eBh-bY`%8)J%*&5*+AE2B)!d!"%%J&cf"B(B!!+UL&!
- X2Rm-)Mp*3JKq3!!&AS#M'Vk'DU-)a%)`dLV@-BaJ5-95P&)J!EQGZIYbpZERY
- Xr-B-Cp8"bS4@-AGhGfCQEpZCQCTQC693lpBdY#UJq8*UN3[b8L8EXB,j)S"1iK-h
- X$r2m,B!!!!)S`Am-)K6Qj8K*mmN86T"m*ca!%UU[3Mh6r$L*0BqMja)U9%)N5!!C
- XQC5C66*QCR)8U9+NS)(+KeBaQCQCQCQ95QCQCQCP"6NIeYFd+L!MmU"q"*+4*GUr
- XJb9NrS89*IAm0`pb3!!!!2`B`rm-)J"4Q)K83!N8JIKL5)3[T+[i`M%4MM5)-i`M
- X3*)U++*%5!"jLI5C6M*QCQ'8U9%P&32rK%iaQCQCMrre5QCQCQCN"9$[[M5c)!$k
- X3!-UN3[bNL4DS%8pU)U%j8J8"hAj8rr`!!)S`Im-)!&5Q8K!3"%9%44L5)J33*dB
- XaP%4MM+)-i`V+*)N+4*%+!#CQB5C66*QCQ"8N++Q&3)aM%iaQCQCQ)L&5QCQCQCN
- X!j)A&LK)3!"%3L!3N*+8T&UJ+5%TL38)T"3"9!&5!!!!)8LqI``L!14Q*)!%-1IZ
- X%ja(-S!%34mlR`k0dIJaG"dA%F3T%R`Sr(jRC(P-XQ@jiiZ3T&r9!M&haFjhGhGR
- XCR9+@CQChG`"24!@aiH!!!4pb[rmR@qN@Z"XqXD""!q5(!&8!8q!!!!!Kk*r$q!!
- X3!!$!!3!!!!!!!!!J!!i!!!!!!!!!!!!"!!!!!!!"KJ!!!!!%!J!!#"!!!!!"!i!
- X!#!!!!!!!#!!!!!!!!!!!!!!i!!!!!!!!!!!!!!3!!"q!!!!!!!%!!!!!9`"`!!!
- X!!!!J(ri!!!!!!!!#!!!!!!!!!%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"J-!!!
- X)%!!!!!B!!!!3!!!!!!!3!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!!!!!!!!!!J!
- X!!!"`!!!!!!!!!F!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!3!#3!1!"B!(3!
- XH!#%!*!!T!#i!-!!d!$8!13!q!%!!43"+!%m!9!"C!&i!B`"S!'N!D`"Z!(-!GJ"
- Xk!)%!KJ#,!*!!!*8!Q3#G!+)!T`#S!+d!XJ#f!,d!`J$(!-`!d3$@!0X!i!$P!1S
- X!m3$f!2X!r`%"!38""`%+!4!"%J%@!4S"(J%L!5B"+J%Z!6)"0!%h!6X"23&%!8J
- X"6!&3!93"@!&F!9m"B`&S!@m"G!&i!A`"I`'!!B-"L!')!Bd"NJ'A!CX"S!'P!DS
- X"VJ'b!EB"ZJ'q!F)"aJ(+!Fi"dJ(@!GJ"fJ(G!H!"j!(S!H`"m!(d!IJ"r!)!!J3
- X##!),!Jm#&!)C!Ki#)`)S!Ld#03)p!N8#4`*+!Nm#9`*H!Q-#D!*X!R!#G3*k!Ri
- X#J`+*!Si#N3+9!TS#S3+S!Ui#XJ+c!VF#[J,"!XB#b`,4!Y8#f3,I!Z8#k3,[![8
- X#r!-!!`B$#J-1!a!$%J-A!ai$)`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX$+`-V!bX
- X$+`-V!bX$+`-V!bX$+`-a!cF$2J!!!!!!!!!!!!!!!2rrrrrrr`B'rrrrrrrr!!$
- Xrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr!!Irrrrrrrm$!`%$!38""`!'!!N
- X!#!%$!!3!"!%(!!B""!!&!3-""J!'!3B!"J!'!!B!"J!'!!B!"J!'!J3""!%&!!B
- X""3%'!!J""`!'!!B!"J!&!!8!"J!'!3-!"J!'!!8!#!!'!!B!"J!'!!B!"J!'!!B
- X!"J!)!!B!"J!&!33""J%%!!3!"J!$!!8!"3!&!!8!"3!%!!8!"3!$!!3!"3!$!!J
- X!"3!&!!8!"3!&!!8!"!!&!!B!#!!'!!B!"3!%!!)!"!!'!!!!"J%(!!B!"3!'!!B
- X!"J!&!!8!"3!&!!8!"3!&!!8!"3!&!!8!!`!$!!3!"!!&!!8!"3!&!!8!"3!&!!8
- X!"3!&!!3!"3!'!!B!"J!'!!B!"J!*!!N!#3%%!!3!"J!*!!F"#J!'!!8!"3!'!!B
- X!"3!'!!F$#!)&!38!"3!)!3N!"J%'!3-!"3!)!38!"J%(!!J!#!%)!!B!"`-(!!B
- X!#3!)!!8!"`%(!JF""!%%!!B!#!!'!!Rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
- Xrrrrrrrrrrrrrrrrrrrrr!!B!"J!(!!!!!!XQN!!!!!!!l`!2!!$rp!!2!!m%Q3!
- X-!!-!!3!q!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!"`!6)!!!!!"J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X"9!!!!!!!(i$J!!!!!!!!!!!!!!i!1!!!!!!!!!!!!!!!"3!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!SL!*
- X-NN!!!!N!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"D!S!!!!!!!!!!1I1!
- X+!#J!!!!!!!!!!2!!!!8!"!!!-!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!"``!!!!!!!!!!!!!!!!!!!!!!!F!!)J!!!!%)3$C!)JJ'3D*"!0%JJ%!!!!
- X!!!!!!!!!!!&8!!!!!!!@r+!!!!!!$!!!#N5J#J!S!!!*5S!!!`(l`!!&d8jqB8N
- XJ!!6%lm&qGqmm!!$`!)qHmrpk'$$#$LpmpmprKJ`'-Id&!%#!!J-%%``!!!!!!J!
- X!!!!+Q4"alq,d+"+9CJ%%8UEE%)T9L%8VX!ai!mi!!(4D!(jk!!!4!-rrPX5RJ!!
- X%J!L!!!TFS!S!+!!!%Nb!"%B"r#r`"GIeNT&)`!!*,4#$3)!``J!"#H#)BBS3KKJ
- Xa3ai`````L)B-"M%-KS!JJ!)%"!%%!!!!!!)!!!!!#UB3)KKM$#!!!!!!!!!!!!!
- X!!!!!!8N5K!94(KiQi!#JK93!#J!N84EdU%!!!!!4!#!+8+!+!#J!!"+9!%!-!I`
- XS%!@#P*5JKr)!#KB4"8%!8-)%%3S45'#'%))B-N+Y-----!L'$%94&)3!$[1HlRf
- Xh&XeRHIGh4M%BaqU!+&))8``ZFjcR1FjcT5XjcR1M'-9,N!#"k9%K)59!!+#-!)5
- XI4")4&T5`,Z1NJ"%!)!T3TrS!+1i!!!!3T&rer#J3"Br-D%#%`J!5&"-*II"23dJ
- X)&1P2S)B3JKJd3Nd`````#)8558S84!!4M'-8MP-R-jM'1)T'-4M%+S!S8JK6$$'
- X-BaM'-BaP,-BaM'-Ba693HrP5A-bN3"%JP95)4%4a%ADAX$%84)!MXP!+8+3EJ1m
- X4!!!!!44rrI`S%!@&"K#JK5qI%K3JN3-)N!$#%q3P+LKJKpkIq$K#$,$p$mm)K4+
- XSLL4%!!q-)a5-8dBM'-B`JNBUT8453%5+$dX-,h[Hpm)aM'8SaM'-BaM%"6L(q9&
- X5d)!"qIbN!r!r4*!!N8D@-#m8b2`K6Edlpiri-4!!!!IJarqI`S%!@!"5d8K!)
- X!)K4!B3-)N!#q)!*&+LKJKK#''$4#$,$"$3#)K++T4%3N!"'-)r5-8iBM'-B`FN9
- X+SN5+J%5+#%X--BaM'-2rrq8SaM'-BaM%"4#(p9$Fd)!!)L$&9)K%44%4GTIS8I9
- X3KN%!L5M5#8["larri!!#$%2jr#J3"B!&8`L%!J!L&)"rJ`N3JK!%42IiB)B3KK`
- Xb3Ja``3b!L)5K%84%*!!4M#-%M&0')aM'-!T&4%9S$rrJK($$'-BaM#%)3P+-B
- XaM'-Ba!83Hr23dXb!!%)JK!#%K%85%4D8#&%'8B9"-ST2mrP+IbN3!!!!%44'(r`
- XS%!8!&C-85!!!358)J8-*%)3,k!)%'''+%)BF-8)-F-%X8)L%34)NK"3!%BaM&)a
- X6*L-BaM#+6)4)aJU!J`BB4``aM'-BaM'-C5M'-BaR1F`&83AK85%K!!(m)B98!!4
- X&*&%@R!54&&'!J8d&)!!"5J!T%3!!!!#N5!(m+"!&J!k-iNJ!)-$(p`%mm3mj4""
- X"a"qHmr"k'p$q$#p!p#m)H%%5*2`8IircRZ4m8aBM&hR`FE5%5,rUJ)-&lm,cch[
- XHplR1Fk8SZFjcQYDd!lk%!ABH(J!!K$ji!rrNHXr4&S!-cZZ1J)%"r*!!!!&+!#M
- XZ!!!!!%2!!I`[m!8!"!!!-!!J!!!!!!!!!!"!!!!!!!!!!!!!!!!!!!!)!!!!!!!
- X!"J`!!!!!!!J#!!!!3#!!!!!!"!F!!!"!!!!!!!!!%!!!!!!!!!!!!!!"!(J!!!!
- X!!!!!!!&8!!"!!!!@J!!!!!!!!3!!!!!"5J!S!!!!!!!!3!!(i!!&!!!!!!!!3!!
- X!!!!!!!!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#)!J!!!%!J!!!!!%3
- X!!!!!)!!!!!!!!#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!J!!!&S!!!!!!!!%
- X!!!!!!FS!+!!!!!!!"%!!!!!!"3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!F!`!!!!!!!!!!!!i!!!!!%!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!93!!!!!!"q!!!!!!!!#!!!!!!!1!$J!!!!!!!1!!!!!!!8
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!3!#`!3!"F!(`!J!#-!*J!X!$%!-`!i!$N
- X!2J"%!%B!6!"5!&N!A`"P!'X!F3"h!(J!HJ"q!)-!K`#0!*8!R!#L!+J!VJ#c!,J
- X![J$%!-8!b`$4!0B!h3$M!1N!l`$e!2X"!3%)!3i"&3%H!5-"+!%Y!5m"0!%f!6N
- X"33&$!8J"63&5!9F"A!&J!@8"DJ&X!@m"G!&f!Am"K!'*!Bi"N`'B!Cd"S3'Q!DX
- X"Y!'j!Ei"``('!FF"bJ(3!G!"e`(H!H3"k3([!I8"q`)!!J8##J)2!K3#'3)H!L-
- X#+!)Y!M)#0!)f!MN#2!*"!NB#5`*3!P8#@J*I!Q3#D3*Z!R%#G3*k!S!#KJ+-!T)
- X#Q3+K!UN#XJ+d!VF#[3,(!Xm#eJ,E!Ym#i`,S!Zm#p!,k!`%$"J-*!`i$%`-E!b3
- X$+`-`!c%$0J-q!d%$4`01!e3$@30H!f8$E!0a!hJ$I`1)!i`$N`1B!jd$R`1K!kB
- X$V31b!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!lm$[`1r!m8
- X$b`29!!$rr`!!!!!!!!!!rrrrrrrr#!Mrrrrrrrm!!2rrrrrrrrrrrrrrrrrrrrr
- Xrrrrrrrrrrrrrrrrrrrrrrrrrr`3%!3-""3%*!3F"#3!*!3-""3%&!3J""`%%!3F
- X"!`%(!3J$#!%)!3J"#!%)!3J"#!%)!3J"!`%%!3B""`%'!3J"#J%*!3J"#!%)!3F
- X""`%)!3J#"3!(!3J""`%*!3J"#!%)!3J"#!%)!!J"#!%*!3X""`%(!3F""!%(!33
- X""!!)!33""`%(!3F""`%(!3B""`%(!38""J%(!38"#`%(!3F""`%(!3B""`%'!3F
- X""`%,!3F""`%(!38"!`%&!3J!!!%*!3N"#!%(!3J"#!%)!3F""`%(!3F""`%(!3F
- X""`%(!3F""`)&!38""3%&!3F""`%(!3F""`%(!3F""`%(!3F""3%'!3F"#!%)!3J
- X"#!%*!3S"#J%,!33""3%)!3`!#!!,!3F""J%'!3F"#3%(!3J"#3)+!38!"J!'!3S
- X"#`!(!3J#"!%(!3S""3%)!3N"#!%)!JS!#!%*!JN"#!--!3X""J%*!3F""`%%!33
- X""`%*!3J"$rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrm
- X##3)*!!Uff`!!!%3!!!!!!!!!!!!)!!`!HJ""!(S!$!!)!!!!!!!!!!!!!!!!!!!
- X!!!!!!!J!$!"q!(m!IJ!-!!J!!!!!!!!!!!!!!!F!#3!!!%3!!!!!!!!!!!!!!!!
- X!!!!!!!!"`!&!!8!(F!)J!8!!J!!!!!!!!!!!!!!!!!!!!!!!!!(!!F!"`!I`!q!
- X"`!#!!!N!#!!!!%3!!!!!!!!!!!!!%!!`!&i!JJ"H!$!!%!!!!!!!!!!!!!!!!!!
- X!!!!!!!!3!$!!IJ$q!(i!-!!3!!!!!!!!!!!!!!J!"J!!!%3!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!3!#N!&`!*!!N!(`!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!13!I!!m
- X!$`!I!!X!#`!!!%3!!!!!!!!!!!!!!!!!!!!!!!!!!!J!P!$S!*!!!*!!!2J!!!!
- X!!!!!!!!!!!!!!!!!!!!!!!!)!*`!q!$`!2!!q!!!#`!%!!!!42J!N!!!N!!!k!#
- X8!!J!!!!!!!!!!!!!!!!!!!!!!!!!!!$i!2!!m!$i!*`!#!!!!!!!!!!!!!!!!!!
- X!!!!!!!!!!!!%!!3!!!"%!!!!!!r`#"!)%!J3#"!)%!J3#"!)%!J3$r!!!!!!!!!
- X!!!r`(rJB'"JB'"JB'"JB'"JB'"JB'"JIq!r`!!!!!!!(!!F!!!"%!3!#J!4!$Z!
- X#J!+!!i!!!!!!!!!!!!!!!!!!!!!!!!!"!!1!"m!2i!1!!i!$J!!!!!!!!!!!!!!
- X!!!!!!!!!!!!'!!F!!!"%!"m!#3!*!"F!+3!3!!!!!!!!!!!!!!!!!!!!!!!!!!!
- X!(`!2!!m!(`!j!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!%!!X!!!!3$djPG%KKBfX
- XJ9fPZC'phF`!!!#!!-!!3!8)"l3!%!!!!!!!!!!!,4(9ZCf9[EL"0BA!S#J!!!$S
- Xj6Q9d5'&MDb"f-bia,L"*BfpZFb"LH5"%EfjKE'3J6#iJ6Q&cD#!Y)%3Z6Q&cD%"
- XeG'9iBA-ZC@4e!!!!J!rrrrrrr`!!$``-$!`2m!!2crr!rrr2!!m-$!rr$rr`$mr
- X`ca$``2!2$lm2!3m-m!r!qrm3(m$`$``2[rrr$2!2rrrlm-$!m!ra!Iqr$rc`$r!
- X3m2[``2!2$`(m$lm-m!r!rr$!qr$`$`m-$rm2[r!2`-$!`-$lm!rrrrrrrrr`!!!
- X!J!rrrrrrr`!!$``-$``2m!!2cm$lm-r2!!rar2[mrrr`$r!Iqrm3m2!2m3(lm3(
- Xmm!r`(r[r%2$`$r(mqrcar2!2cm$lm-r!m!m-$2[m$!c`$m$`qr$``2!2$!rlr``
- X-m!r!`2[``-$`$``2qrm-$2!2`2$lm2$!m!rrrrrrrrr`!!!!3(r`3"KFp%(H@H*
- XGmNrb4r*rJRrDIZ*HFNik8Gj!$RrqIr"rq(rmIrjrrRrqIrjrrRrqIrjrrRrqIrj
- XrrRrqIri!!!"!Ir"!'&18HVjqqRlkI[TkZP+53S*+SNE#3S*'`NULIrjrm(riIra
- XrrRrqIrjrrRrqIrjrrRrqIrjrrRrqIrjrrJ!!!3!Irri!%!!$!"!!!S!A2I*!%!!
- X#)"!!!K!AZq))%!Ilq"'(r!JAIrq)%52q#"#6rJJAcrr)%#Iq#"!6rJJ6'Bc)&rb
- X!#"Iq3!JArc[)&rb3!!JAr%J)%rrRD"2q%JJ4rJN)&(hFL"!!!NJ3!!%S&mrJQ"!
- X!!%J3!!!S%!!!'"rrrrJIrri!(rrr!"rrri!Irrr!(rrri"rrrr!Irrri(rrrq"r
- XrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"r
- XrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq!!
- X!!3!Irri!%!!$!"%"!S!6!S*!%i+#)"H#JK!A`SIi&r+Ib"rqrqJIr[rS(rlrk"r
- XqrqJIr[rS&r+Ib"I#KmJAJS2)%i+$L"-kZBJ4HVd)%(lm#""qr!J3([!)%!lJ#"!
- X'`!J3$Z!)%"l`#""qr!J3I[`)%(Um#"!kZ!J3!S!)(rrrq"rrrJ!Irrm!(rrrJ"r
- Xrrm!IrrrJ(rrrm"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"r
- XrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"rrrrJIrrri(rrrq"r
- XrrrJIrrri(rrrq"rrrrJIrrri!!!#!!!2rrrrrrrrrrrrm!!!!!!!$``-$!`-$!`
- X-$2m!!!!!!!r!`-$!`-$!`-$mm!!!!!!2$rm-rrm2rrm-r-m!!!!!$m$!`-$!`-$
- X!`2c-m!!!!!m-$!`-$!`-$!cmc-m!!!!2crr`rr$rrr$!r-c-m!!!$``-$!`2!3%
- X2r2rrrr!!!!r!cr$!ca!3%"r!`-$`!!!2$rqrrrra!3%2rr`-m!!!$m$2Zr$!m"!
- X3%2$!`2!!!!m-$2Zr$2%"!3(m$!c`!!!2crrrZrm3%"!3rrr!m!!!$``-$2Zr!3%
- X"!I`-$2!!!!r!`-$2Zr!Ira$``-$`!!!2$2m-$rZrr!cr$2m-m!!!$mm3rr!IZr$
- X!`-$!`2!!!!m2!3%"!IZr$!`-$!c`!!!2ca!3%"$rZrr`rrr!m!!!$`m"!3%2$2Z
- Xr$!`-$2!!!!r2%"!3(m$2Zr$!`-$`!!!2$2%"!3rrrrZrr`rmm!!!$m$`%"!3m-$
- X2Zr$!`2!!!!m-$r%"!I`-$2Zr$!c`!!!2cm$2rrr2rmrrZr$!m!!!$``-$!`-$!`
- X-$2Zr$2!!!!r!`-$!`-$!`-$2Zr$`!!!2$rrr$2rrrr`-$2Zrm!!!$m$!`-$!`-$
- X!`-$2Zr!!!!m-$!`-$!`-$!`-$2[`!!!2`-$!`-$!`-$!`-$2m!!!$rrrrrrrrrr
- Xrrrrrrr!!!!!#!!!2rrrrrrrrrrrrm!!!!!!!$``-$!`-$!`-$2m!!!!!!!r!cm$
- X!`-r!`-$mm!!!!!!2$2m-$!clr!`-r-m!!!!!$m$`m-$!qr$!`2c-m!!!!!m2!I`
- X-$2[m$!cmc-m!!!!2ca!I`-$lm-$2rrrrm!!!$`m"!Im-qr`2m3%2$2!!!!r`%"!
- X3rr[rm"!3%2$`!!!2m3%"!3(lm3%"!3(mm!!!$r!3%"!3qr!3%"!3m2!!!!ra!3%
- X"!I[a!3%"!Ic`!!!2m"!3%2rlrr!3%"$`m!!!$`m"!Im-qr`2m3%2$2!!!!r2%"r
- X!`2[``-m3(m$`!!!2$`(m$!clr!`-m3m-m!!!$m$`m-$!qr$!`2$``2!!!!m-r`c
- Xrr2[mrr`2r!c`!!!2`-r2m2$lm2$rcm$!m!!!$``-$`!Iqrm!(``-$2!!!!r!`-r
- X`!2[`!2r!`-$`!!!2$!`-$`$lm"m-$!`-m!!!$m$!`-$`qr$``-$!`2!!!!m-$!`
- X-$r[r$!`-$!c`!!!2`-$!`2$lm2$!`-$!m!!!$``-$!m!qr!I$!`-$2!!!!r!`-r
- X`!2[`!2r!`-$`!!!2$!`2!"rlr`!I$!`-m!!!$m$!cr$`qr$`rm$!`2!!!!m-$!c
- Xrr2[mrr`-$!c`!!!2`-$!`-$lm-$!`-$!m!!!$rrrrrrrrrrrrrrrrr!!!!!!"d&
- X38%`!!!!!!!!(8d&@43!"!!!!!!G38N9'!!)!!!!!"e4&@&3!!`!!!!!(3Np143!
- X%!!!!!$aZD$-a!!!!!8C548B!"!!!!)!!!3#"!!)!JJ!$!)-!"!#%5801)`!%!!!
- X$k!!"!qN!!J2U!!-$k`!%!q`!!!!1!$i!6J#k!E)6L3!%-!S!!!!9!%)!,J$D!E)
- X!"3!!!!!!!!!!&h!!!!!!X`#"!!!!!!!!!!$rrp8p"%CTE'8)6h"PEL"0BA!!6`!
- X!#P*PC(*KGb"0BA!!8K%!$&"bCACTEh9c)%ecC`"3%3!+8Q9`Eh0TG'P[EJ"1!!!
- X&3fa[Ff8!9`!!!5d!!!!!"e*PCh9XBA)!'mJ!$89ZG'9b)%9iF'a[FQ8!!&J!!5d
- X!!!!!$%p`G'P[EL"&C'Pdb3"&!!!",3!!!!!%8f&fC3"68`!",3!!!!!%8A9TG!"
- X483!!!!!!5!##!!!!!!!!!!$rrrrl"%9NDA3%9@jNE`"D!!!",3!!!!!$3h9d!&J
- X!!!4$Eh"j!%-!!!93BA0dC3"@!!!&3faPBA)!!!!!!!!!!+`!J`!!!!!!!!!!rrr
- Xpr`0,BQ3-3fpZG(*[E#",CAPc!"[*!!Y3G@jMG(9KG'P[EJ!EbJ!)3R*KBfYPG(-
- X!'mX!"@%J,5"Y!"[-!!9Z)#dJHJ!Ec3!&35!Y)%d!'mi!"8iJ,5"D!"[2!!8`)#d
- XJ13!Ed!!",3!!!!!)+'9cBf&`C5N!!!!!"bKcF'&MC5N!!!!!##KNC@aPG'8T!!!
- X!!!JSFQ9dGA*Z+3!!!!!!!!!!F`#%!!!!!!!!!!$rrrrE"%KPE(!(6h"dD@pZF`!
- X!6`!",3!!!!!%5'9XF!!!2`!-4'9cBh*TBQ8J5f9j!!!Q!!%Y!!!!!!G@CA*cD@p
- XZ!!"f!!G)DA0dEh*j!!"@!""@CA*cD@pZ)%CPBA4eFQ9c!!!M!!!!!!!U!)!!!!!
- X!!!!!!2rrrrX"&!j"BQpeG#"1CA4)B@0Vb3!!!!!",3!!!!!!!!!!aJ#&!!!!!!!
- X!!!$rrrh["%PZCQm05@jfC@jdEh*j)%&XE!!!D3!35@jfC@jdEh*j)&0PE'9MG!!
- X!53!'3@4UGA0d!!!M!!%Y!!!!!!P-EfpV)%4[Gfi!!$S!$%4PFf0bD@*P)%pZC3!
- X!1`!04'9cBh*TBQ8J6@&ZH3!!,`!04'9cBh*TBQ8J9(*KF!!!AJ!",3!!!!!-3f&
- XXE#"0EfjcG'9b!!"$!!Y1B@eP)%pLDQ9MG!!!)`!,4'PcBfpfCA*TCA-!!&`!!!!
- X!!*)!KJ!!!!!!!!!!rrrlZ`9&FA9TF!G$GA*bC@jd!"[4!!%Y!!!!!!9AD@9XC!!
- X!G`!&9'KbEhF!!(3!"8&`F'aj!!"K!!%Y!!!!!!TAC@&b)%&bE@pb!!"A!!K8B@Y
- XP)%pQCJ!!9!!+3A0V)&*PE@pfC3!!33!",3!!!!!'8(9d)%pZ!!"3!!C5C@e[GQ8
- X!!&)!!!!!!*-!K`!!!!!!!!!!rrrrH`0"Bh3%9f&TG!!!,J!",3!!!!!)9'9XCA"
- X[FR3!9"%!"%TeEA!!!#-!"de[ER0dCA)!!#-!">F'8!!#-!!5d!!!!!"8&`F'a
- Xj!!"K!!03BAN!!(!!"%YTBfX!4"%!"%0SBA3!!#-!"8pQCQ9b!!!M!!43FQ&j!!!
- XM!!48GA*Z!!!M!!!!!!#j!)J!!!!!!!!!!2rrqpm&6@&RD@-*4(*[F#"*G'9Y!!"
- XN!!Y%FQp`)&0PE'9MG!!!4!!'8'PMDh9`!!!X!!e8EfGRE'8JF'PMDh9`!!"!!!%
- XY!!!!!!0&BA3!!'8!"&*PB@3!!()!"9&eB@CQ!!"a!!0%DA!!!#-!!5d!!!!!#da
- XTFh3J8h"PE'ac!!"i!!T$BA0d)&0`C@aX!!"D!!0DBA!!!(S!"NPZGQpVC3!!)`!
- X$8R9L!!!M!!!!!!#h!)N!!!!!!!!!!2rrZlm%3QPdF`C6C@&bBfJ!!(-!#N0XEh0
- XP)%4[Eh)!!'-!#8p`C@iJ4'p[FJ!!E`!&3A"`E(N!!'%!"%YTBfX!4"%!!5d!!!!
- X!"P9ZG(*KF!!!)`!&4QpbBf8!!#-!"%a[Eh3!!#-!!5d!!!!!"d9ZCh*KGQ8!!%8
- X!!d4TF!!!)`!$8fPd!!!M!!%Y!!!M!JK$E'PYF#"9F!!!2!!+3faTE@)J4'phEJ!
- X!2J!!!!!!L`$+!!!!!!!!!!$rrrrr#h"eEQ0dG@&dD@pZ!L!Z!!!!!!)J,!!!!!!
- X#)$X!!!!!!L!k!!!!!!)J)3!!!!!#)$m!!!!!!L!V!!!!!!)J,3!!!!!#)$d!!!!
- X!!L!M!!!!!!)J*!!!!!!#)%!!!!!!!L!Q!!!!!!)J+J!!!!!#)(i!!!!!!L"I!!!
- X!!!!!!!"i!-X!!!!!!!!!!2rrrrm)BR*KBfYPG(-"@`!!!!!"A3!!!!!"+!!!!!!
- X"+3!!!!!"H`!!!!!"I3!!!!!"2!!!!!!"2J!!!!!"AJ!!!!!"B!!!!!!"*`!!!!!
- X")J!!!!!"A!!!!!!",`!!!!!"I!!!!!!"*3!!!!!!!!!!B`$-!!!!!!!!!!$rrrr
- Xr"@%J,5"Y!@%!!!!!!@)!!!!!!@-!!!!!!@3!!!!!!@8!!!!!!@B!!!!!!@F!!!!
- X!!@J!!!!!!@N!!!!!!@S!!!!!!@X!!!!!!@`!!!!!!@d!!!!!!!!!!'-!c3!!!!!
- X!!!!!rrrrr`9Z)#dJHJ&Z!!!!!!&[!!!!!!&`!!!!!!&a!!!!!!&b!!!!!!&c!!!
- X!!!&d!!!!!!&e!!!!!!&f!!!!!!&h!!!!!!&i!!!!!!&j!!!!!!&k!!!!!!!!!!"
- XM!-i!!!!!!!!!!2rrrrm&35!Y)%d"33!!!!!"3J!!!!!"3`!!!!!"4!!!!!!"43!
- X!!!!"4J!!!!!"4`!!!!!"5!!!!!!"53!!!!!"5J!!!!!"5`!!!!!"6!!!!!!"63!
- X!!!!!!!!!B`$2!!!!!!!!!!$rrrrr"8iJ,5"D!8i!!!!!!8m!!!!!!9!!!!!!!9%
- X!!!!!!9)!!!!!!9-!!!!!!93!!!!!!98!!!!!!9B!!!!!!9F!!!!!!9J!!!!!!9N
- X!!!!!!9S!!!!!!!!!!'S!b3!!!!!!!!!!rrrpr`aMEfjdFQpX)'YPHA-"BJ!a!!!
- X"DJ!b!!!"EJ!c!!!"D!!d!!!"E!!f!!!"H3!h!!!"D`!i!!!"G3!j!!!",3!!!!!
- X"C!"%!!!"F!"3!!!"FJ"5!!!"G!"8!!!!!!!!83$3!!!!!!!!!!$rrrrr"6!J,5!
- Xj!6!!!!!!!6%!!!!!!6)!!!!!!6-!!!!!!63!!!!!!68!!!!!!6B!!!!!!6F!!!!
- X!!6J!!!!!!6N!!!!!!!!!!*%!b!!!!!!!!!!!rrrrr`ChDATKFQ3+3A4dFQPLGA4
- XPF`!!H!!04'9dC@0d)&9ZFf9PEJ!!C3!*4Qa[Eh)J6@&`!!"Q!""(C@jPFQ&dC5"
- X0EfjcG'9b!!"R!!K*C'9ZG'PQH3!!D3!*6'pMBA4TEfjc!!"[!!j-CACPE#"8C@a
- XPF'pbG!!!GJ!%9fPcD!!!G`!!!!!!A`$4!!!!!!!!!!$rrrrr"f0eFR*PER3'9f9
- XKF'pZ!!!T!!9"FQe[FJ!!@`!&8QPZCh-!!$d!"N&YG@aPG!!!)J!&9'p[E(-!!#J
- X!"%G[E'3!!#3!"P0`C@aXF`!!+`!!!!!!,!#!!!S!J!!!!)%!!!##!!!!J`!!!)3
- X!!!#&!!!!KJ!!!)F!!!#)!!!!L3!!!!!!,!$)!!S!b!!!!-N!!!$+!!!!b`!!!-`
- X!!!$0!!!!cJ!!!-m!!!$3!!!!d3!!!!!!N!!!$4'P-M!a)%0[ER4bEf`J5f9jFa#
- XP-M!b)&"eEQ0dG@&dD@pZ$D8b-$-J3R*KBfYPG(-+T6)`0#"K)#dJE3UP-M!e)'i
- XJ,5"k#U8b-$BJ35!Y)%d+T6)`0b"1)#dJ@JUP-M!i)$!J,5!j!U8Y#"ZPCA0MBA"
- XP"b#PFh"KBf8)#+9NC@aPG'8)$D9bCA4eFQi!!!!S!!`-T6)`15"$GA*bC@jd!U8
- XY!AF"G!&K!U8Y!9F"9!&"!U8Y!9!"8J!!!'8!$3F#T@0dE#eL"`UPBh4X,@S($U9
- XMG'`YEJF)T@0dE#eS"`bPBh4X,@`('D9MG'`YH3F,T@0dE#eV"a@PBh4X,A8#T5d
- X("+9MG'`YC!F3T@0dE#e`"a+PBh4X,A)(&+9MG'`YG!!!!#)!%!%Z!5`"1`%k!5%
- X"2`%V!5d"23%M!53"3!%Q!5S"IJ&I!!!!)J!3!9X"A3%S!5N"H`&p!6`"2J&H!@!
- X"*`%L!9`",`&m!58!!!!F!!d"B3&L!@-"C!&P!@B"C`&S!@N"DJ&V!@`"E3!!!"`
- X!$3&Z!@m"F!&a!A)"F`&d!A8"GJ&h!AJ"H3&k!!!!(!!0!8%"3J&$!83"43&'!8F
- X"5!&*!8S"5`&-!8d!!!!F!!d"6J&2!9!"83&5!9-"9!&9!9B"9`&B!9N"@J!!!"B
- X!#J%`!6%"-J%c!63"03%f!6F"1!%j!!!!3J!)"aLPBh4X,AJ("D9MG'`YC3F'T@0
- XdE#eQ"`HPBh4X,@F(#D9MG'`YD3F2T@0dE#e["aDPBh4X,AB(&k9MG'`YG`!!!"!
- X!"`%T!9X"23%L!5J"*!%V!!!!5`XaFh3JE@9ZG5"*4%4A8N3+)b"[CL"048j9Fdp
- X$6P3&+LSU+LT-8e4$"P*PFb"*4%4A8N3)8Q9cCA*fC@4'9e*%"5SU+LSU6&0843!
- X!!#X$%S!!!!!&-bia,M)H8h4TBfKdD@jR)%eKG'KPE@&dDA0MD#"$C@jdFR9Y!!!
- X!+`-5J!!!!!8c,M%Z-Kic,M%Z-JfT-6Ni05da16Nc)%dZ)&0dCA"SC@jcEfi!!!$
- X8!!X!!!!!!(3!rJ#)!@)%"&"XBAN!!!!!!(3!9J#)!,S%"&&eDA3!!!!!!(!!qJ#
- X-!@D!!!!!!!!!6J"j!&m!QJ!!!!!!!!"1!0S!A`$l!!!!!!!!!%i"43"I!@B!!!!
- X!!!!!6J"9!&i!HBJ&8QpXC6S%!!!!!!"1!,S!AJ$DL!46CAJk!!!!!!"1!4N!AJ&
- X&L!90Ef4P1J!!!!!!!"-!93!N!@@)$&GSEb"KFQ8JH@pe2`!!!!!!+3"C!$N"Ba!
- X%6Q&YC3!!!!!!$`!B!#m!1+!#!!%!!!!E!!J"6`+P,3%r!5B#T5d"GJ&@##0fCA*
- XcD@pZ!!!!*J!-!@N"53FMB@4UGA0d!U8Y!6S"1`%[!9i#T5d"3`8MEQ&YC3&F!!!
- X!63!1!5i#T5d)&+8JBh4X,A3&)fTeEA!))fe[ER0dCA)&)hGTF'8#T5d"B3&`"`5
- XPBh4X,@3&)f0SBA3')fpQCQ9b"50`FQ&j"50dGA*Z!!!!,J!2!@3"4!%X!8!#T5d
- X"C3&b!A%%)f4TF!+P,3&i!9S"HJFMD@jfEfYP"#0bG@)!!!!d!!)!!!!!!'F""!"
- Xl!93%!Np,!!!!!!!,!&%!@!&JL!4H-&ia!!!!!!!+!"J!+J!iS!)!!3!!!%3!!`!
- X!!!!!A3%1!(%"5J3#6Qm!!!!!!&d!A3"a!*N%!ePPF`!!!!!!!!S!6`"3!91)!Pi
- X`!!!!!!!+!"B!+J!fS!)!!!!!!!i!4!"%!,)"e3#!4%3`#J!!!!i!5J"U!0-"ea1
- X)!!3`#J!!!%!!%!&c!@-"E`&K"`5PBh4X,@3#T5d()h9ZG(*KF!BMCQpbBf8&)fa
- X[Eh3#T5d"433MC'P`"#0cDA3#T5d"2!%q!!!"!!!!9[d!!&Ap!!!(U`"L!LJ2%!!
- X!!"`'@J!89dP14!!(!+T869"-!!%"#NjeEA!!!3%L38a59!!$!6T%594-!!S"DP0
- X88L-!%3(ZD@0c0!!%!XCTBh-M!!3$!NP$6L-!"!-qD@0X0!!%!hT%6%p(!!B$YNC
- X26P3!!`3+4Np14!!""$T$99*6!!J%8P088L!!!!5qEQJc-3!!"-T'8N9'!!3%eN*
- X14%`!!!85689193!6"4j06P8M!!%'$RCPFR-!!3BQ!)!!,3!!!(J!!!!!!)%!!!!
- X!!!!!!!!!!))!#!!!!#!!!!!!!)-!$`!!!0i!!!!!!)3!&`!!!%!!!!!!!)8!(!!
- X!!&S!!!!!!)B!)3!!!3)!!!!!!)F!Z3!!25i!!!!!!)!!-J!!!*i!!!!!!)%"4J!
- X!8X3!!!!!!)!!0`!!*LJ!!!!!!)%!33!!*N)!!!!!!)(rrb!!#1!!!!!!!)$rr`!
- X!9C8!!!!!%iMrr`!!9DF!!!!!%iRrr`!!4DF!!!!!!)(rrb!!#2!!!!!!!)$rr`!
- X!$)`!!!!!!),rr`!!$[i!!!!!!)Mrr`!!$RB!!!!!!)Arr`!!$5)!!!!!!)Err`!
- X!$AJ!!!!!!)Irr`!!$H!!!!!!!)Rrr`!!$i!!!!!!%iMrr`!!948!!!!!%iRrr`!
- X!98d!!!!!&h$rr`!!8h%!!!!!!)!!Ub!!!5B!BJ%-!)-!e!!!8&X!BJ%8!)3!f!!
- X!9%N!BJ%)!)8!h3!!9'J!BJ%%!)B!iJ!!81m!BJ%!!)F!k!!!9*)!BIqJ!)J!l!!
- X!91-!BJ$i!)N!mJ!!9EN!BJ$d!-N!p`!!84X!BJ$`!-S""!!!8B3!BJ$X!-X"%!!
- X!8DS!BJ$S!-`"'3!!8G!!BJ$N!-d"(`!!8I!!BJ$J!-i"*3!!8K!!BJ$F!-m"+`!
- X!8M!!BJ$B!0!"-3!!8P!!BJ$8!-J"0`!!8QS!BJ$3!0%"2J!!8V!!BJ$-!qMrr`!
- X!!8!!!!!!!qRrr`!!!F3!!!!!!qVrr`!!$r!!!!!!!q[rrb!!2C!!!!!!!!2Xrrm
- XJ!$i8!!!!!!2Srrm!!!*)!!!!!!2Trrm!!!+-!!!!!!2Urrm!!!T%!!!!!!2Vrrm
- XJ!$kB!!!!!!2XrrmJ!$lF!!!!!!2Srrm!!!,3!!!!!!2Trrm!!!28!!!!!!2Urrm
- X!!!P!!!!!!!2VrrmJ!$mJ!!!!!!2XrrmJ!%!N!!!!!!2Srrm!!!6B!!!!!!2Trrm
- X!!!EF!!!!!!2Urrm!!!U)!!!!!!2VrrmJ!%%S!!!!!!2XrrmJ!%-X!!!!!!#)!%N
- X!!!jD!!!!!!#(!&B!!!c1!!!!!!#'!&)!!!cU!!!!!!#&!%m!!!d'!!!!!!#*!&X
- X!!!pN!!!!!!##!'N!!!bb!!!!!"G`!8X!!%@j!!!!!%Z*rrmJ!""d!!!!!%Z-rrm
- X!!"S!!!!!!%`*!)3J!#DL!!!!!%`-!*%J!#pS!!!!!!#A!(!%!#AL!!!!!!#B!(N
- X%!#CF!!!!!!)!rrmJ!$a#!!!!!!)$rrmJ!$b+!!!!!!)%rrmJ!$c5!!!!!!)&rrm
- XJ!$U5!!!!!!)(rrmJ!$VD!!!!!!)"rrmJ!$XL!!!!!!)'rrmJ!$YU!!!!!!))rrm
- XJ!$Zb!!!!!!)#rrmJ!$[k!!!!!!#!!*`!!$dD!!!!!!!!rrmJ!$e5!!!!!!#!rrm
- XJ!%8`!!!!!!#"rrmJ!%8l!!!!!!##rrmJ!%9'!!!!!!#$rrmJ!%94!!!!!!#%rrm
- XJ!%9F!!!!!!#!rrmJ!%9R!!!!!!#"rrm!!%A5!!!!!!##rrm!!%D*!!!!!!#$rrm
- X!!%E9!!!!!!#%rrm!!%H&!!!!!!#!rrm!!%Im!!!!!!#&rrm!!%JU!!!!!!#'rrm
- X!!%Md!!!!!!#(rrm!!%Q+!!!!!!#)rrm!!%SK!!!!!!#*rrm!!%VH!!!!!!$+rrm
- X!!%ZC!!!!!!$,rrm!!%`S!!!!!!$-rrm!!%bN!!!!!!$0rrm!!%d,!!!!!!$1rrm
- X!!%eb!!!!!!$2rrm!!%hC!!!!!!$*rrm!!%j!!!!!!!$3rrm!!%kZ!!!!!!$)rrm
- X!!%m$!!!!!!$4rrm!!%qB!!!!!!#!!-38!%rl!!!!!!#"!-`8!&!V!!!!!!!"rrm
- XJ!&0#!!!!!!!#rrmJ!&-6!!!!!!G0CA0cB@GP"P0dBA4eF`G%G@jRC@pZ"%ePER8
- X%9'9iG!Y%D@&REQpcG'PMF`4198a-"%jeEA!*9@jcD'PQG'9N"e0SD@CdC@3&H@j
- X1BA%#H@i$H@ja"(PZBA%08feKE'`J4f9dE'PZC3C3FQpYF(3)5'&MDdC[ER3+8&0
- X)B@0V4QpZG!a38dKKBfY'Efjd)$N+8&0)B@0V4QpZG!j3FQ9Q)%CTE'8J6Q&YC3e
- X0DA0M,L"6G(*TEQGc#P48@5"AD@jNEhF(E@9ZG@*KFJGcG@*YC@je!dYLC!4)C@a
- X`"%PZCQm&4A&eDA!$3@0d"8eKCfPM"%*TG(--BfpZG(*[E#"VCAPc#h"eEQ0dG@&
- XdD@pZ#'*bB@0VCA4c"@%J,5"Y"@iJ,5"k"8%J,5"0"8iJ,5"D"6!J,5!j"RGTHQ&
- XbC!GMGA*bC@jd"%e195-&8h4KFR4#q!:
- END_OF_FILE
- if test 32969 -ne `wc -c <'sys/mac/NHrsrc.hqx'`; then
- echo shar: \"'sys/mac/NHrsrc.hqx'\" unpacked with wrong size!
- fi
- # end of 'sys/mac/NHrsrc.hqx'
- if test -f 'sys/unix/snd86unx.shr' -a "${1}" != "-c" ; then
- echo shar: Renaming existing file \"'sys/unix/snd86unx.shr'\" to \"'sys/unix/snd86unx.shr.orig'\"
- mv -f 'sys/unix/snd86unx.shr' 'sys/unix/snd86unx.shr.orig'
- fi
- echo shar: Extracting \"'sys/unix/snd86unx.shr'\" \(25319 characters\)
- sed "s/^X//" >'sys/unix/snd86unx.shr' <<'END_OF_FILE'
- X#! /bin/sh
- X# This is a shell archive. Remove anything before this line, then unpack
- X# it by saving it into a file and typing "sh file". To overwrite existing
- X# files, type "sh file -c". You can also feed this as standard input via
- X# unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- X# will see the following message at the end:
- X# "End of shell archive."
- X# Contents: Makefile READ.ME install.bsd spkr.7 spkr.c
- X# Wrapped by billr@saab on Thu Jun 10 16:41:24 1993
- XPATH=/bin:/usr/bin:/usr/ucb ; export PATH
- Xif test -f 'Makefile' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'Makefile'\"
- Xelse
- Xecho shar: Extracting \"'Makefile'\" \(378 characters\)
- Xsed "s/^X//" >'Makefile' <<'END_OF_FILE'
- XX#
- XX# Speaker driver package makefile
- XX#
- XXCFLAGS = -I. -O # -DDEBUG
- XXLDFLAGS = -s
- XX
- XXall: Driver.o
- XX
- XXinstall:
- XX ./Install
- XX
- XXDriver.o: spkr.c
- XX $(CC) $(CFLAGS) -c spkr.c
- XX mv spkr.o Driver.o
- XX
- XXclean:
- XX rm -f Driver.o *~ speaker.shar
- XX
- XXDSP = Files Install Master Name Node Remove Size System
- XXshar:
- XX shar READ.ME install.bsd spkr.7 Makefile spkr.[ch] \
- XX interp.c $(DSP) playtest >speaker.shar
- XEND_OF_FILE
- Xif test 378 -ne `wc -c <'Makefile'`; then
- X echo shar: \"'Makefile'\" unpacked with wrong size!
- Xfi
- X# end of 'Makefile'
- Xfi
- Xif test -f 'READ.ME' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'READ.ME'\"
- Xelse
- Xecho shar: Extracting \"'READ.ME'\" \(1372 characters\)
- Xsed "s/^X//" >'READ.ME' <<'END_OF_FILE'
- XX Console Speaker Driver Package (v1.1)
- XX
- XX by Eric S. Raymond (esr@snark.thyrsus.com)
- XX
- XXThis package gives 80386 machines running SVr3.2 or later the ability to play
- XXtunes on the console speaker. It is structured as a standard installable driver
- XXkit containing the following files:
- XX
- XXDocumentation and examples:
- XXREAD.ME -- this file
- XXspeaker.7 -- man page for the driver
- XXplaytest -- test script exercising familiar tunes
- XX
- XXInstallable driver kit parts:
- XXFiles -- list of driver package file locations
- XXInstall -- installation script for driver kit
- XXMaster -- mdevice entry for speaker driver
- XXName -- name entry foe speaker driver
- XXNode -- /dev node specification file
- XXRemove -- Driver removal script
- XXSize -- installation size data
- XXSystem -- sdevice entry for speaker driver
- XX
- XXDriver source code:
- XXMakefile -- Makefile for driver code
- XXspkr.c -- the driver source
- XXspeaker.h -- ioctl interface file
- XX
- XXTo make the installable code, simply type `make' and wait. The type ./Install
- XXand follow its instructions. You will have to install the man pages by hand.
- XXBe aware that the speaker.7 man page uses tbl(1) constructs.
- XX
- XXInteresting tunes mailed to the author will be periodically posted in batches
- XXand added to the test script for future versions.
- XX
- XX Revision notes
- XX
- XX1.1 -- fixed minor bug in M[LSN] interpretation, added octave-tracking.
- XX Tweaked the playtest examples.
- XEND_OF_FILE
- Xif test 1372 -ne `wc -c <'READ.ME'`; then
- X echo shar: \"'READ.ME'\" unpacked with wrong size!
- Xfi
- X# end of 'READ.ME'
- Xfi
- Xif test -f 'install.bsd' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'install.bsd'\"
- Xelse
- Xecho shar: Extracting \"'install.bsd'\" \(1434 characters\)
- Xsed "s/^X//" >'install.bsd' <<'END_OF_FILE'
- XXCopy spkr.c and interp.c to /sys/i386/isa
- XXCopy spkr.h to /sys/sys
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXFile /sys/i386/conf/YOUR_MACHINE_NAME
- XXadd following line:
- XX
- XXpseudo-device speaker
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXFile /sys/i386/conf/files.i386
- XXadd following line:
- XX
- XXi386/isa/spkr.c optional speaker
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXFile /sys/i386/i386/conf.c
- XX[major number 20 (hex) is registered for spkr driver, don't change it]
- XXadd following code:
- XX
- XX#include "speaker.h"
- XX#if NSPEAKER > 0
- XXint spkropen(),spkrclose(),spkrwrite(),spkrioctl();
- XX#else
- XX#define spkropen enxio
- XX#define spkrclose enxio
- XX#define spkrwrite enxio
- XX#define spkrioctl enxio
- XX#endif
- XX ...
- XX
- XXstruct cdevsw cdevsw[] =
- XX{
- XX ...
- XX
- XX { spkropen, spkrclose, enxio, spkrwrite, /*20*/
- XX spkrioctl, enxio, enxio, NULL,
- XX enxio, enxio, enxio },
- XX ...
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXMake corresponding device:
- XX
- XX mknod /dev/speaker c 32 0
- XX
- XX[major number 32 (20 hex) is registered for spkr driver, don't change it]
- XX
- XX-----------------------------------------------------------------------------
- XX
- XXGo to /sys/i386/conf and type
- XX config YOUR_MACHINE_NAME
- XXthen go to /sys/compile/YOUR_MACHINE_NAME and type
- XX make depend
- XX make
- XX
- XEND_OF_FILE
- Xif test 1434 -ne `wc -c <'install.bsd'`; then
- X echo shar: \"'install.bsd'\" unpacked with wrong size!
- Xfi
- X# end of 'install.bsd'
- Xfi
- Xif test -f 'spkr.7' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'spkr.7'\"
- Xelse
- Xecho shar: Extracting \"'spkr.7'\" \(5193 characters\)
- Xsed "s/^X//" >'spkr.7' <<'END_OF_FILE'
- XX.TH SPKR 7
- XX.SH NAME
- XXspkr \- console speaker device driver
- XX.SH DESCRIPTION
- XXThe speaker device driver allows applications to control the PC console
- XXspeaker on an IBM-PC-compatible machine running UNIX.
- XX.PP
- XXOnly one process may have this device open at any given time; open() and
- XXclose() are used to lock and relinquish it. An attempt to open() when
- XXanother process has the device locked will return -1 with an EBUSY error
- XXindication. Writes to the device are interpreted as 'play strings' in a
- XXsimple ASCII melody notation. An ioctl() for tone generation at arbitrary
- XXfrequencies is also supported.
- XX.PP
- XXSound-generation does \fInot\fR monopolize the processor; in fact, the driver
- XXspends most of its time sleeping while the PC hardware is emitting
- XXtones. Other processes may emit beeps while the driver is running.
- XX.PP
- XXApplications may call ioctl() on a speaker file descriptor to control the
- XXspeaker driver directly; definitions for the ioctl() interface are in
- XXsys/spkr.h. The tone_t structure used in these calls has two fields,
- XXspecifying a frequency (in hz) and a duration (in 1/100ths of a second).
- XXA frequency of zero is interpreted as a rest.
- XX.PP
- XXAt present there are two such ioctls. SPKRTONE accepts a pointer to a
- XXsingle tone structure as third argument and plays it. SPKRTUNE accepts a
- XXpointer to the first of an array of tone structures and plays them in
- XXcontinuous sequence; this array must be terminated by a final member with
- XXa zero duration.
- XX.PP
- XXThe play-string language is modelled on the PLAY statement conventions of
- XXIBM BASIC 2.0. The MB, MF and X primitives of PLAY are not useful in a UNIX
- XXenvironment and are omitted. The `octave-tracking' feature is also new.
- XX.PP
- XXThere are 84 accessible notes numbered 1-83 in 7 octaves, each running from
- XXC to B, numbered 0-6; the scale is equal-tempered A440 and octave 3 starts
- XXwith middle C. By default, the play function emits half-second notes with the
- XXlast 1/16th second being `rest time'.
- XX.PP
- XXPlay strings are interpreted left to right as a series of play command groups;
- XXletter case is ignored. Play command groups are as follows:
- XX.PP
- XXCDEFGAB -- letters A through G cause the corresponding note to be played in the
- XXcurrent octave. A note letter may optionally be followed by an \fIaccidental
- XXsign\fR, one of # + or -; the first two of these cause it to be sharped one
- XXhalf-tone, the last causes it to be flatted one half-tone. It may also be
- XXfollowed by a time value number and by sustain dots (see below). Time values
- XXare interpreted as for the L command below;.
- XX.PP
- XXO <n> -- if <n> is numeric, this sets the current octave. <n> may also be one
- XXof 'L' or 'N' to enable or disable octave-tracking (it is disabled by default).
- XXWhen octave-tracking is on, interpretation of a pair of letter notes will
- XXchange octaves if necessary in order to make the smallest possible jump between
- XXnotes. Thus "olbc" will be played as "olb>c", and "olcb" as "olc<b". Octave
- XXlocking is disabled for one letter note following by >, < and O[0123456].
- XX.PP
- XX> -- bump the current octave up one.
- XX.PP
- XX< -- drop the current octave down one.
- XX.PP
- XXN <n> -- play note n, n being 1 to 84 or 0 for a rest of current time value.
- XXMay be followedv by sustain dots.
- XX.PP
- XXL <n> -- sets the current time value for notes. The default is L4, quarter
- XXnotes. The lowest possible value is 1; values up to 64 are accepted. L1 sets
- XXwhole notes, L2 sets half notes, L4 sets quarter notes, etc..
- XX.PP
- XXP <n> -- pause (rest), with <n> interpreted as for L. May be followed by
- XXsustain dots. May also be written '~'.
- XX.PP
- XXT <n> -- Sets the number of quarter notes per minute; default is 120. Musical
- XXnames for common tempi are:
- XX
- XX.TS
- XXa a a.
- XX Tempo Beats Per Minute
- XXvery slow Larghissimo
- XX Largo 40-60
- XX Larghetto 60-66
- XX Grave
- XX Lento
- XX Adagio 66-76
- XXslow Adagietto
- XX Andante 76-108
- XXmedium Andantino
- XX Moderato 108-120
- XXfast Allegretto
- XX Allegro 120-168
- XX Vivace
- XX Veloce
- XX Presto 168-208
- XXvery fast Prestissimo
- XX.TE
- XX.PP
- XXM[LNS] -- set articulation. MN (N for normal) is the default; the last 1/8th of
- XXthe note's value is rest time. You can set ML for legato (no rest space) or
- XXMS (staccato) 1/4 rest space.
- XX.PP
- XXNotes (that is, CDEFGAB or N command character groups) may be followed by
- XXsustain dots. Each dot causes the note's value to be lengthened by one-half
- XXfor each one. Thus, a note dotted once is held for 3/2 of its undotted value;
- XXdotted twice, it is held 9/4, and three times would give 27/8.
- XX.PP
- XXWhitespace in play strings is simply skipped and may be used to separate
- XXmelody sections.
- XX.SH BUGS
- XXDue to roundoff in the pitch tables and slop in the tone-generation and timer
- XXhardware (neither of which was designed for precision), neither pitch accuracy
- XXnor timings will be mathematically exact. There is no volume control.
- XX.PP
- XXIn play strings which are very long (longer than your system's physical I/O
- XXblocks) note suffixes or numbers may occasionally be parsed incorrectly due
- XXto crossing a block boundary.
- XX.SH FILES
- XX/dev/speaker -- speaker device file
- XX.SH AUTHOR
- XXEric S. Raymond (esr@snark.thyrsus.com) Feb 1990
- XEND_OF_FILE
- Xif test 5193 -ne `wc -c <'spkr.7'`; then
- X echo shar: \"'spkr.7'\" unpacked with wrong size!
- Xfi
- X# end of 'spkr.7'
- Xfi
- Xif test -f 'spkr.c' -a "${1}" != "-c" ; then
- X echo shar: Will not clobber existing file \"'spkr.c'\"
- Xelse
- Xecho shar: Extracting \"'spkr.c'\" \(13871 characters\)
- Xsed "s/^X//" >'spkr.c' <<'END_OF_FILE'
- XX/*
- XX * spkr.c -- device driver for console speaker on 80386
- XX *
- XX * v1.1 by Eric S. Raymond (esr@snark.thyrsus.com) Feb 1990
- XX * modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
- XX */
- XX
- XX#ifdef __386BSD__
- XX#include "speaker.h"
- XX#endif
- XX#if !defined(__386BSD__) || (NSPEAKER > 0)
- XX
- XX#ifdef __386BSD__
- XX#include "types.h"
- XX#include "param.h"
- XX#include "errno.h"
- XX#include "buf.h"
- XX#include "uio.h"
- XX
- XX#define CADDR caddr_t
- XX#define err_ret(x) return(x)
- XX#else /* SYSV */
- XX#include <sys/types.h>
- XX#include <sys/param.h>
- XX#include <sys/dir.h>
- XX#include <sys/signal.h>
- XX#include <sys/errno.h>
- XX#include <sys/ioctl.h>
- XX#include <sys/user.h>
- XX#include <sys/sysmacros.h>
- XX#include <limits.h>
- XX
- XX#include "spkr.h"
- XX
- XX/**************** MACHINE DEPENDENT PART STARTS HERE *************************
- XX *
- XX * This section defines a function tone() which causes a tone of given
- XX * frequency and duration from the 80x86's console speaker.
- XX * Another function endtone() is defined to force sound off, and there is
- XX * also a rest() entry point to do pauses.
- XX *
- XX * Audible sound is generated using the Programmable Interval Timer (PIT) and
- XX * Programmable Peripheral Interface (PPI) attached to the 80x86's speaker. The
- XX * PPI controls whether sound is passed through at all; the PIT's channel 2 is
- XX * used to generate clicks (a square wave) of whatever frequency is desired.
- XX *
- XX * This code requires SVr3.2-compatible inb(), outb(), timeout(), sleep(),
- XX * and wakeup().
- XX */
- XX
- XX/*
- XX * PIT and PPI port addresses and control values
- XX *
- XX * Most of the magic is hidden in the TIMER_PREP value, which selects PIT
- XX * channel 2, frequency LSB first, square-wave mode and binary encoding.
- XX * The encoding is as follows:
- XX *
- XX * +----------+----------+---------------+-----+
- XX * | 1 0 | 1 1 | 0 1 1 | 0 |
- XX * | SC1 SC0 | RW1 RW0 | M2 M1 M0 | BCD |
- XX * +----------+----------+---------------+-----+
- XX * Counter Write Mode 3 Binary
- XX * Channel 2 LSB first, (Square Wave) Encoding
- XX * MSB second
- XX */
- XX#define PPI 0x61 /* port of Programmable Peripheral Interface */
- XX#define PPI_SPKR 0x03 /* turn these PPI bits on to pass sound */
- XX#define PIT_CTRL 0x43 /* PIT control address */
- XX#define PIT_COUNT 0x42 /* PIT count address */
- XX#define PIT_MODE 0xB6 /* set timer mode for sound generation */
- XX
- XX/*
- XX * Magic numbers for timer control.
- XX */
- XX#define TIMER_CLK 1193180L /* corresponds to 18.2 MHz tick rate */
- XX
- XXstatic int endtone()
- XX/* turn off the speaker, ending current tone */
- XX{
- XX wakeup(endtone);
- XX outb(PPI, inb(PPI) & ~PPI_SPKR);
- XX}
- XX
- XXstatic void tone(hz, ticks)
- XX/* emit tone of frequency hz for given number of ticks */
- XXunsigned int hz, ticks;
- XX{
- XX unsigned int divisor = TIMER_CLK / hz;
- XX int sps;
- XX
- XX#ifdef DEBUG
- XX printf("tone: hz=%d ticks=%d\n", hz, ticks);
- XX#endif /* DEBUG */
- XX
- XX /* set timer to generate clicks at given frequency in Hertz */
- XX sps = spl5();
- XX outb(PIT_CTRL, PIT_MODE); /* prepare timer */
- XX outb(PIT_COUNT, (divisor & 0xff)); /* send lo byte */
- XX outb(PIT_COUNT, (divisor >> 8)); /* send hi byte */
- XX splx(sps);
- XX
- XX /* turn the speaker on */
- XX outb(PPI, inb(PPI) | PPI_SPKR);
- XX
- XX /*
- XX * Set timeout to endtone function, then give up the timeslice.
- XX * This is so other processes can execute while the tone is being
- XX * emitted.
- XX */
- XX timeout(endtone, (char *)NULL, ticks);
- XX sleep(endtone, PZERO - 1);
- XX}
- XX
- XXstatic int endrest()
- XX/* end a rest */
- XX{
- XX wakeup(endrest);
- XX}
- XX
- XXstatic void rest(ticks)
- XX/* rest for given number of ticks */
- XXint ticks;
- XX{
- XX /*
- XX * Set timeout to endrest function, then give up the timeslice.
- XX * This is so other processes can execute while the rest is being
- XX * waited out.
- XX */
- XX#ifdef DEBUG
- XX printf("rest: %d\n", ticks);
- XX#endif /* DEBUG */
- XX timeout(endrest, (char *)NULL, ticks);
- XX sleep(endrest, PZERO - 1);
- XX}
- XX
- XX/**************** PLAY STRING INTERPRETER BEGINS HERE **********************
- XX *
- XX * Play string interpretation is modelled on IBM BASIC 2.0's PLAY statement;
- XX * M[LNS] are missing and the ~ synonym and octave-tracking facility is added.
- XX * Requires tone(), rest(), and endtone(). String play is not interruptible
- XX * except possibly at physical block boundaries.
- XX */
- XX
- XXtypedef int bool;
- XX#define TRUE 1
- XX#define FALSE 0
- XX
- XX#define toupper(c) ((c) - ' ' * (((c) >= 'a') && ((c) <= 'z')))
- XX#define isdigit(c) (((c) >= '0') && ((c) <= '9'))
- XX#define dtoi(c) ((c) - '0')
- XX
- XXstatic int octave; /* currently selected octave */
- XXstatic int whole; /* whole-note time at current tempo, in ticks */
- XXstatic int value; /* whole divisor for note time, quarter note = 1 */
- XXstatic int fill; /* controls spacing of notes */
- XXstatic bool octtrack; /* octave-tracking on? */
- XXstatic bool octprefix; /* override current octave-tracking state? */
- XX
- XX/*
- XX * Magic number avoidance...
- XX */
- XX#define SECS_PER_MIN 60 /* seconds per minute */
- XX#define WHOLE_NOTE 4 /* quarter notes per whole note */
- XX#define MIN_VALUE 64 /* the most we can divide a note by */
- XX#define DFLT_VALUE 4 /* default value (quarter-note) */
- XX#define FILLTIME 8 /* for articulation, break note in parts */
- XX#define STACCATO 6 /* 6/8 = 3/4 of note is filled */
- XX#define NORMAL 7 /* 7/8ths of note interval is filled */
- XX#define LEGATO 8 /* all of note interval is filled */
- XX#define DFLT_OCTAVE 4 /* default octave */
- XX#define MIN_TEMPO 32 /* minimum tempo */
- XX#define DFLT_TEMPO 120 /* default tempo */
- XX#define MAX_TEMPO 255 /* max tempo */
- XX#define NUM_MULT 3 /* numerator of dot multiplier */
- XX#define DENOM_MULT 2 /* denominator of dot multiplier */
- XX
- XX/* letter to half-tone: A B C D E F G */
- XXstatic int notetab[8] = {9, 11, 0, 2, 4, 5, 7};
- XX
- XX/*
- XX * This is the American Standard A440 Equal-Tempered scale with frequencies
- XX * rounded to nearest integer. Thank Goddess for the good ol' CRC Handbook...
- XX * our octave 0 is standard octave 2.
- XX */
- XX#define OCTAVE_NOTES 12 /* semitones per octave */
- XXstatic int pitchtab[] =
- XX{
- XX/* C C# D D# E F F# G G# A A# B*/
- XX/* 0 */ 65, 69, 73, 78, 82, 87, 93, 98, 103, 110, 117, 123,
- XX/* 1 */ 131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247,
- XX/* 2 */ 262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494,
- XX/* 3 */ 523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988,
- XX/* 4 */ 1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1975,
- XX/* 5 */ 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 3520, 3729, 3951,
- XX/* 6 */ 4186, 4435, 4698, 4978, 5274, 5588, 5920, 6272, 6644, 7040, 7459, 7902,
- XX};
- XX
- XXstatic void playinit()
- XX{
- XX octave = DFLT_OCTAVE;
- XX whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / DFLT_TEMPO;
- XX fill = NORMAL;
- XX value = DFLT_VALUE;
- XX octtrack = FALSE;
- XX octprefix = TRUE; /* act as though there was an initial O(n) */
- XX}
- XX
- XXstatic void playtone(pitch, value, sustain)
- XX/* play tone of proper duration for current rhythm signature */
- XXint pitch, value, sustain;
- XX{
- XX register int sound, silence, snum = 1, sdenom = 1;
- XX
- XX /* this weirdness avoids floating-point arithmetic */
- XX for (; sustain; sustain--)
- XX {
- XX snum *= NUM_MULT;
- XX sdenom *= DENOM_MULT;
- XX }
- XX
- XX if (pitch == -1)
- XX rest(whole * snum / value * sdenom);
- XX else
- XX {
- XX sound = (whole * snum) / (value * sdenom)
- XX - (whole * (FILLTIME - fill)) / (value * FILLTIME);
- XX silence = whole * (FILLTIME-fill) * snum / (FILLTIME * value * sdenom);
- XX
- XX#ifdef DEBUG
- XX printf("playtone: pitch %d for %d ticks, rest for %d ticks\n",
- XX pitch, sound, silence);
- XX#endif /* DEBUG */
- XX
- XX tone(pitchtab[pitch], sound);
- XX if (fill != LEGATO)
- XX rest(silence);
- XX }
- XX}
- XX
- XXstatic int abs(n)
- XXint n;
- XX{
- XX if (n < 0)
- XX return(-n);
- XX else
- XX return(n);
- XX}
- XX
- XXstatic void playstring(cp, slen)
- XX/* interpret and play an item from a notation string */
- XXchar *cp;
- XXsize_t slen;
- XX{
- XX int pitch, lastpitch = OCTAVE_NOTES * DFLT_OCTAVE;
- XX
- XX#define GETNUM(cp, v) for(v=0; isdigit(cp[1]) && slen > 0; ) \
- XX {v = v * 10 + (*++cp - '0'); slen--;}
- XX for (; slen--; cp++)
- XX {
- XX int sustain, timeval, tempo;
- XX register char c = toupper(*cp);
- XX
- XX#ifdef DEBUG
- XX printf("playstring: %c (%x)\n", c, c);
- XX#endif /* DEBUG */
- XX
- XX switch (c)
- XX {
- XX case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
- XX
- XX /* compute pitch */
- XX pitch = notetab[c - 'A'] + octave * OCTAVE_NOTES;
- XX
- XX /* this may be followed by an accidental sign */
- XX if (cp[1] == '#' || cp[1] == '+')
- XX {
- XX ++pitch;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == '-')
- XX {
- XX --pitch;
- XX ++cp;
- XX slen--;
- XX }
- XX
- XX /*
- XX * If octave-tracking mode is on, and there has been no octave-
- XX * setting prefix, find the version of the current letter note
- XX * closest to the last regardless of octave.
- XX */
- XX if (octtrack && !octprefix)
- XX {
- XX if (abs(pitch-lastpitch) > abs(pitch+OCTAVE_NOTES-lastpitch))
- XX {
- XX ++octave;
- XX pitch += OCTAVE_NOTES;
- XX }
- XX
- XX if (abs(pitch-lastpitch) > abs((pitch-OCTAVE_NOTES)-lastpitch))
- XX {
- XX --octave;
- XX pitch -= OCTAVE_NOTES;
- XX }
- XX }
- XX octprefix = FALSE;
- XX lastpitch = pitch;
- XX
- XX /* ...which may in turn be followed by an override time value */
- XX GETNUM(cp, timeval);
- XX if (timeval <= 0 || timeval > MIN_VALUE)
- XX timeval = value;
- XX
- XX /* ...and/or sustain dots */
- XX for (sustain = 0; cp[1] == '.'; cp++)
- XX {
- XX slen--;
- XX sustain++;
- XX }
- XX
- XX /* time to emit the actual tone */
- XX playtone(pitch, timeval, sustain);
- XX break;
- XX
- XX case 'O':
- XX if (cp[1] == 'N' || cp[1] == 'n')
- XX {
- XX octprefix = octtrack = FALSE;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == 'L' || cp[1] == 'l')
- XX {
- XX octtrack = TRUE;
- XX ++cp;
- XX slen--;
- XX }
- XX else
- XX {
- XX GETNUM(cp, octave);
- XX if (octave >= sizeof(pitchtab) / OCTAVE_NOTES)
- XX octave = DFLT_OCTAVE;
- XX octprefix = TRUE;
- XX }
- XX break;
- XX
- XX case '>':
- XX if (octave < sizeof(pitchtab) / OCTAVE_NOTES - 1)
- XX octave++;
- XX octprefix = TRUE;
- XX break;
- XX
- XX case '<':
- XX if (octave > 0)
- XX octave--;
- XX octprefix = TRUE;
- XX break;
- XX
- XX case 'N':
- XX GETNUM(cp, pitch);
- XX for (sustain = 0; cp[1] == '.'; cp++)
- XX {
- XX slen--;
- XX sustain++;
- XX }
- XX playtone(pitch - 1, value, sustain);
- XX break;
- XX
- XX case 'L':
- XX GETNUM(cp, value);
- XX if (value <= 0 || value > MIN_VALUE)
- XX value = DFLT_VALUE;
- XX break;
- XX
- XX case 'P':
- XX case '~':
- XX /* this may be followed by an override time value */
- XX GETNUM(cp, timeval);
- XX if (timeval <= 0 || timeval > MIN_VALUE)
- XX timeval = value;
- XX for (sustain = 0; cp[1] == '.'; cp++)
- XX {
- XX slen--;
- XX sustain++;
- XX }
- XX playtone(-1, timeval, sustain);
- XX break;
- XX
- XX case 'T':
- XX GETNUM(cp, tempo);
- XX if (tempo < MIN_TEMPO || tempo > MAX_TEMPO)
- XX tempo = DFLT_TEMPO;
- XX whole = (HZ * SECS_PER_MIN * WHOLE_NOTE) / tempo;
- XX break;
- XX
- XX case 'M':
- XX if (cp[1] == 'N' || cp[1] == 'n')
- XX {
- XX fill = NORMAL;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == 'L' || cp[1] == 'l')
- XX {
- XX fill = LEGATO;
- XX ++cp;
- XX slen--;
- XX }
- XX else if (cp[1] == 'S' || cp[1] == 's')
- XX {
- XX fill = STACCATO;
- XX ++cp;
- XX slen--;
- XX }
- XX break;
- XX }
- XX }
- XX}
- XXEND-of-interp.c
- XXecho x - Files
- XXsed 's/^X//' >Files << 'END-of-Files'
- XX/usr/include/sys/spkr.h
- XXEND-of-Files
- XXecho x - Install
- XXsed 's/^X//' >Install << 'END-of-Install'
- XX#
- XX# Speaker driver installation script
- XX#
- XXTMP=/tmp/speaker.err
- XXERR1=" Errors have been written to the file $TMP."
- XXERR2=" The Speaker Driver software was not installed."
- XX
- XXecho "Installing Speaker Driver Software Package"
- XX
- XX/etc/conf/bin/idcheck -p speaker 2>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX echo "The speaker package is already at least partly installed.
- XX Removing the old version now..."
- XX /etc/conf/bin/idinstall -d speaker
- XXfi
- XX
- XX/etc/conf/bin/idinstall -a -k speaker 2>>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during package installation. $ERR1 $ERR2"
- XX exit 1
- XXfi
- XX
- XX/etc/conf/bin/idbuild 2>>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during kernel reconfiguration. $ERR1 $ERR2"
- XX exit 1
- XXfi
- XX
- XXrm -f $TMP
- XX
- XXcp spkr.h /usr/include/sys/spkr.h
- XX
- XXecho "Performing shutdown..."
- XXcd /; exec /etc/shutdown -g0 -y
- XXEND-of-Install
- XXecho x - Master
- XXsed 's/^X//' >Master << 'END-of-Master'
- XXspeaker ocwi iocH spkr 0 0 1 1 -1
- XXEND-of-Master
- XXecho x - Name
- XXsed 's/^X//' >Name << 'END-of-Name'
- XX386 UNIX Speaker Device Driver Package
- XXEND-of-Name
- XXecho x - Node
- XXsed 's/^X//' >Node << 'END-of-Node'
- XXspeaker speaker c 0
- XXEND-of-Node
- XXecho x - Remove
- XXsed 's/^X//' >Remove << 'END-of-Remove'
- XX#
- XX# Speaker driver remove script
- XX#
- XXTMP=/tmp/speaker.err
- XXRERR="Errors have been written to the file $TMP."
- XX
- XXecho "Removing Speaker Driver Software Package"
- XX
- XX/etc/conf/bin/idinstall -d speaker 2>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during package removal. $RERR"
- XX exit 1
- XXfi
- XX
- XX/etc/conf/bin/idbuild 2>>$TMP
- XXif [ $? != 0 ]
- XXthen
- XX message "There was an error during kernel reconfiguration. $RERR"
- XX exit 1
- XXfi
- XX
- XXrm -f /dev/speaker $TMP /usr/include/sys/spkr.h
- XX
- XXexit 0
- XXEND-of-Remove
- XXecho x - Size
- XXsed 's/^X//' >Size << 'END-of-Size'
- XXROOT=1400
- XXUSR=100
- XXEND-of-Size
- XXecho x - System
- XXsed 's/^X//' >System << 'END-of-System'
- XXspeaker Y 1 0 0 0 0 0 0 0
- XXEND-of-System
- XXecho x - playtest
- XXsed 's/^X//' >playtest << 'END-of-playtest'
- XX:
- XX# Test script for the speaker driver
- XX#
- XX# v1.0 by Eric S. Raymond (Feb 1990)
- XX# modified for 386bsd by Andrew A. Chernov <ache@astral.msk.su>
- XX#
- XXreveille="t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f.."
- XXcontact="<cd<a#~<a#>f"
- XXdance="t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagegc.~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf."
- XXloony="t255cf8f8edc<a.>~cf8f8edd#e.~ce8cdce8cd.<a>c8c8c#def8af8."
- XX
- XXcase $1 in
- XXreveille) echo $reveille >/dev/speaker;;
- XXcontact) echo $contact >/dev/speaker;;
- XXdance) echo $dance >/dev/speaker;;
- XXloony) echo $loony >/dev/speaker;;
- XX*)
- XX echo "No such tune. Available tunes are:"
- XX echo
- XX echo "reveille -- Reveille"
- XX echo "contact -- Contact theme from Close Encounters"
- XX echo "dance -- Lord of the Dance (aka Simple Gifts)"
- XX echo "loony -- Loony Toons theme"
- XX ;;
- XXesac
- XXEND-of-playtest
- XXexit
- XEND_OF_FILE
- Xif test 13871 -ne `wc -c <'spkr.c'`; then
- X echo shar: \"'spkr.c'\" unpacked with wrong size!
- Xfi
- X# end of 'spkr.c'
- Xfi
- Xecho shar: End of shell archive.
- Xexit 0
- END_OF_FILE
- if test 25319 -ne `wc -c <'sys/unix/snd86unx.shr'`; then
- echo shar: \"'sys/unix/snd86unx.shr'\" unpacked with wrong size!
- fi
- # end of 'sys/unix/snd86unx.shr'
- echo shar: End of archive 26 \(of 33\).
- cp /dev/null ark26isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 33 archives.
- echo "Now execute ./patchit.sh"
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-