0 ,,,qmiª®ªÿ¥¥ÿ((ÆL8i$YHÂe‘ÿ4ÿÎÿÿÿ pÿÿÿÿÿÿÿÿ2Tv˜ºÜþïÍ«‰gE#2Tv˜ºÜþ2Tv˜ºÜþcÉþïœ6cÉþïœ60åï8‘„ÖÿuB·H–-5þÿÿÿþïþï 0!#0!#0!#111!""""1111""""2222111""""1Á1Ã<ÁJ¤¡1¡Á""â23à""îááîîáîîáîîîîáááááááá""âÒ-à""î!‘!R&‘i—©š©šc6‘‘‘¡¡ªª£®ê:#ªª2""111111ÿÿ"þ"±±»»³¶k;#»»2""11""âò/à""î 2"23" 322# 33 3#!!!0!#0!#0!#0!#""""211!#211!#211!#""""2222îàá!#!#!#!#!""2222îîàá!#!"!-!-!""ÒÒ"2î0!#0ÿ0ïÿ0!#2ÿðþÿ2îàá!#!"!/!/!" 3# 3#  3" 3# 3 3 !!!!º«ƒ®ê8  ‘  ¨Š‘1)’1""""#111!#0!#0!#""""1111""""211122233#2""?33?53?ff?#ÿÿ?233#î ""03#.""˜‰¨‰‘ˆˆ‘Ÿùˆˆ¨Š" ?"2#b%Qr&aqî ""0Ò-.""!‘ˆˆ1‰˜!©š©š#©š##©š#"˜‰""ïð"1ÿÿ1î ""0ò/."" 3" 3 3! 3! " 3" 3 3"""ðÿÿðÓ<ðÝÝðÜÌðÓ<033¡±±A"2!qÜÍÁíÞ¬žéÊœªªÉܰ ÍÁ©š‘!!1!1!!!ñÑÁÁ""""233#""""UewgEegUewgffffwgUegEewgUeffff0¡£0¡£0¡£111¡ªªªª1111ªªªª::::111ªªªª  ¡11:£ªªªª !112#"""":ªª::ªª"òò"2î 3 2" 323" 2"!!!àêê ÐÜÜ ÐÜÜ ÐÜÜ pwggpæçpVWpæWpfgpww» 0³»»Ó¬ªª"¢©©"¢©© ªª1AA112"!!"!#!#!#!#!#!#!""222222"0¡£0¡£0¡£0¡£ªªªª:11¡£:11¡£:11¡£ªªªª::::0!""0!#0!#""#2""22""""â²+à""î2333#33333!""3!""31333A333Q53333#3332!3""ò3""ò333ó333ó333ó3ÑÑÑáÑ᪭ڪÊÜͬªªªª™™™™áþïïíÞþÞØíŒÈÈŒ1¢*!š™Â,¡ªªšÉ2Â!#š""gvqWva÷aeVqvgwwpPEeP_UPTUPUU`Uefv""""233#""""¡šª¡©»‘ˆ¨˜‰€ˆ‘™‰ªªªª£111¡£0¡£0¡£ªªªª1111ªªªª:111::0¡ªª0¡£0¡£ªª£""""!112# ªªªª¡11:£  îàá!#!"!+!+!"3a3331333AC33QSS316c3òÿÿ#333233333ó333ó343ô3USó3c3ö3ÿÿÿ33332333#¡!¢*¡3333¡‘¡¡¡™ª@tpTpUWufgWU`eñ?30" 03!# "ÿßÿÿÝ<#Ã#?"2?333330333333!"""vv"!wf"fv"!wv1"" »»©ªªš˜ú®‰ˆ™™ˆ˜ˆˆ‰™™ ªª !!âá21â1"!€ˆ˜˜€é耩¨€é¨€™˜€ˆˆ ðòÿ_??3?## ªªªªÊ̈ˆÊˆÌˆÊ̈ˆªªªª™™™™‰ˆˆˆ™™™™ªªªªˆˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™"²²"2îî ""0²+.""!"2"#3333  0000000!"#""3333 000 00001333""2""""2""""!"""3332!""""""©"™:3"’)""’""3333""""""""3ª:3"™"""’""3Ð""ÑÑ:Ñî)î"á!!!!!!"!"""""""""""""!!!"!!!""!"""""""""!!!!!!"!"""""""""""""!!!"!!!""!"""""""""íÐŒÐîî͈èŽÈØŽè͈íÞŒíˆ Þ€ÜˆÈíÞȈÈíèܺ ‰ »»šˆ¸‹˜¨‹¸šˆº«‰ºˆ «€©ˆ˜º «˜ˆ Š˜º¸Š© þàÍàÿÿÞŒøØìøÞÌþïÍþÌïÀíˆÜþï܈ÎÜþüÎí00000000 0 333300000000 3333!"""!3"3!3"3!3"3!3"3!333!23#!""""""""33"233#2#2#233#2#2#2#2#""""""""23#"33#"3"""3"""33#"23#"""2""""2"""""""""2""22"2232233323333óó3óóÿóóÿÿÿÿÿ2"""2""23"223223333óóóóóóÿóÿÿÿÿÿ2"""2""23"223223333óóóóóóÿóÿÿÿÿÿ2""22"2232233323333óó3óóÿóóÿÿÿÿÿØÜîÈÈ퀀܀€ÜÈÈ€€ÞÜÍÈŒ€Œ€¨©»˜˜º€€©€€©˜˜€€«©š˜‰€‰€ìíÿÜÜþÀÀíÀÀíÜÜÀÀïí ÞÜ ÍÀÍÀ DD@DED@TTT@TeU@TdU@deU`TUeff»» °«º»°«««°«ºª°«›ª°›©ª«ªš™™ !"""!"""!"""!"""!"""!"""!"""""""""1""#""¡""š""¡™"#™"1")"£ª:3’™)"’™"""™""")""")""""""Ò"""£ª3’™"’™"’)"")"")""Ñ"íÿÿÿÿóÿóÿóóóó333ó32233"222""22"""ÿÿÿÿÿóóÿó3óó333ó332332232"222""2ÿÿÿÿÿóóÿó3óó333ó332332232"222""2ÿÿÿÿóÿóÿóóóó333ó32233"222""22"""ÝÐíÐààÐàÐÐîî àÝ àÞ à àà îî ÐîàþàððàðààÿÿðîðïðððÿÿàÌÀÜ ÀÐÐÀÐ À ÀÝÝ ÐÌ ÐÍ Ð ÐÐ ÝÝ À330##30###032"0#"0"#"330##30###03"03"0!"#"13£ª"™2")""2""""!"""#""""""""""""""""""""""""""""""Ò"""""""""""""""""""""""á""Ñ"Ñ"Ñî"î"á""""""""""""!"!"!!!!!""""""""""!""!!!!!!""""""""""""!"!"!!!!!""""""""""!""!!!!!!ªªÚêÊ̈Ýʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™®­ªªÝˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªêúÊ̈îʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™¯®ªªîˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªÊÚÊ̈Ìʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™­¬ªªÌˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™!EeôTôTEe!3333"!"""!!!""!!!""""#!1##32"" àÞ3#»«°»ª  ª™  ˆˆ ˜™‰ˆ288""°« °»š°«™°»š°ª™¸«™¨š™111"©)#˜3" ""ÍÍ "" !#BTPe##qr22"Ã1â2""»»»»©ªªª©îªêª©ª®ª©êªª©îªªªº« «º Êš©¬Ú®ê­©‹¸š€º«ˆˆ º«0333#"#!33!!!!! !""#ˆˆ2©š˜ªª‰ø™™ø¯ú€©š‚!("!"@DDD@TUD@DTT@DEU@TTU@dfU@TUU`fff°»»»°««»°«««°»ºª°«›ª°›šª°«ªª™™™033303230###0#"0#"0"0#""033303"30#3#032"03"0!"0#""03330333032#0#"0"!03""0#""033303330""!0#"03!"03""0#""033303#303"#0#"03"03"0#""‘™‘‘‘™‰‘‰‘‰™™™™™‘™™™‘™‘‘‘ˆ‘‘‘‘‘‘˜‘˜‘˜‘˜‘‘‘™‘‘‘‘‘‘Šº™˜°   € °   3#33"#""#""#""#""#""#""#"3333""""""""""""""""""""""""""""3333""""""""""""""""ÿ"ò/ÿ"ÿ/"òÿ"3333"!""!"!!"!""!"""""3333"!"""""""""""""""""03330#330#2#0#"0#!"0""0#""‘‰‘‰¡‰¡‰ ¡™ ¡™ ±™ ±‰‘‰‘‰‘Š‘ˆˆŠ¨ˆˆš¨ˆˆš¨ˆˆ›¨ˆ‰«ˆŠˆŠ‰Šˆˆ˜Šˆˆ‹‰ˆ™‹ˆˆ‹‘™ª‘ª¡ª¡ª¡»±»°»‘ˆ‘ˆ‘˜‘©‘™‘™‘©ˆ‘‰‘˜¡¨¡¨¨¨Šˆ¡¨Š‰¸¹šˆ¸¹›™¸¹ˆˆŠˆˆš™‰ªˆ™Šªˆ‘‘‘‘¡¡¡¡¡’º¡šª ©»  ©» ˆ¨€˜‰ €€™‰"#""#""#""#""#""#""#""""""""""""""""""""""""""""""ÿ/"òÿ"ÿò/"ÿ""""""""""""""""QQQAQAª¥ZªÊ\Ŭªªªª™™™™ ¸°ˆèº°ˆˆˆ°ˆˆ™°˜˜™°™˜š°¨©ª°™ªšªˆ˜›ˆ™™«™˜˜‹˜˜™‹™™¹›©º«šº›™˜+™™™‹™™»žšªš®©™©é«™©‰ê©©ˆ˜ë« €‰¹˜°ˆˆî™ªŠ»©¹»™šžš™»™©ˆšŠˆ‰ˆ˜±˜ˆ¹‹¨™š©»‰™‰©»šªš©»ºˆ™©‹˜˜‰›ªºèª™ºé™™ºèªºŽè¹®ˆšž‰¨™ˆ€™‰«™šŠ‹ªª™‹Ž©™‹ž»›‹‰©»‹˜™‰›é€ˆˆ(º¡±º±¡àˆ±è(èžé(á«éˆè˜éŠè’è˜è"!"!±¡E‘VD‘g‘áîîáááááááîîîîîîáîîîîáîîááîîááîîîîîîáîîááîîááîîîîîîáááááîîááîîîîáîîááîîááîîîîîî°™šº°ª¹›°ª›©°«©™+™™‰ˆ˜‰€‰™™™‰™™‰‰‰‰€ˆ€ˆˆˆ‰è™êˆáªéˆëšé¨º»é™™¹ë˜¨¹ˆˆ:#š)š‰ÿªªªª™™™™™ªª™™ªª™™ªª™™ˆˆ™™ˆˆ™™ˆˆ™ªªªª™™™™™ªª™™ªª™™ªª™™ˆˆ™™ˆˆ™™ˆˆ™ªªªª™™™™™ªª™™ªª™™ªª™™ˆˆ™™ˆˆ™™ˆˆ™ªªªª™™™™™ªª™™ªª™™ªª™™ˆˆ™™ˆˆ™™ˆˆ™!!1111!ññ!!!!’""!’""!"""!"""3ª:£"™)’"™)""™"""’""""""""""ª333)33#933#2#""2#""233#"33#"")"""""""""1333""2""""2""""!"""3332!""""""©"™:3"’)""’""3333""""""""3ª:3"™"""’""3Ð""ÑÑ:Ñî)î"á!222€€ÌÈÜŒØÀÝÜ€í܈ÌíˆÜÝî €ÎÀ ÞˆÜ ßÜÍßìïÍŒáÞÝŒ™ˆˆ™™ˆˆ™™™™™ˆˆˆˆ‰ˆ‰‰˜ˆ˜˜‰‰‰™™ˆˆ™™ˆˆ™™™™™ˆˆˆˆ‰ˆˆˆ˜˜ˆ˜‰‰ˆ‰™ˆˆ™™ˆˆ™™™™™ˆˆˆˆ‰ˆ‰ˆ˜˜˜˜‰‰‰‰™ˆˆ™™ˆˆ™™™™™ˆˆˆˆ‰ˆˆˆ˜ˆˆ˜‰‰ˆ‰¡£ª3!"™"!"™"!")"!"""!"""!"""!""""""©!""™""™9!"’)"’"©!""’!""""233"233#"22#"22#233#233"""""""""""""""""""""""""""""!"""!!VU!fU!fV!gf!wf!"33""""!fvw!efw!Ufv!Uef!VUf!333"""""""""""""""""""""""""""""""2""""2"""""""""2!3!3!3!32?°2#°2#!!!!«ªÝîÿȈÜ܈ŒÜ€ˆ<ˆ2!3!3!3øïތ݌ŒŒŒŒˆ‚!!!˜ˆ˜™™‰™™™™™™™™™™™™™™™™™™˜™™™™™™™™˜˜˜™™ˆ™™™˜™™™™™™™˜™™™™™™™™™™™™™™˜˜™‰™‰™™™™™™™™™™™™™™™™™™™™™™™™™™˜˜˜‰‰ˆ™™™˜™™™™™™™˜™™™™™™™˜™™‰ˆ™!"""!""í!""!"""!"""!""1""!©!"""’!-""!!""!"""!"""!""""""¢"""’"33"233#2#2#2#2#2#2#""""!""1""""""""¡£š’¡™"“)"")"!"""!"""!"""!"""!"""!"""!"""""""""1""#""¡""š""¡™"#™"1")"£ª:3’™)"’™"""™""")""")""""""""""£ª3’™"’™"’)"")"")""Ñ"í# ## #020!"0˜™™™‰‰™™˜™˜˜‰‰‰‰˜ˆ˜˜‰ˆˆˆˆˆˆˆ€™™™™™™™™™˜™™‰™‰™˜˜˜˜‰ˆ‰‰ˆˆ˜˜€€€™™˜™™™‰™™˜˜˜‰‰ˆ‰˜ˆˆ˜‰ˆˆˆˆˆˆˆ™˜˜˜™‰ˆ‰™ˆˆ˜‰ˆˆˆ˜ˆˆ˜‰ˆˆˆˆˆˆˆ€ˆ!’"!"2!ÐÝîáîááî"""’"""’""""!""""""Þ!""""©3£#)"’")"""""""""""""á""""""Ý áîîîá13£ª"™2")""2""""!"""#""R"""R"""""""""""""""""""%UR%%UR%!!"""""""""""""""""á""Ñ"Ñ"Ñî"î"á 33"0"#0# !#!#!#3""3"2#!!#!#!#23!3"1"#102 122"22"23""3"2"!"1"2"2"š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘 š© ‰™š#š 9¨š ™˜© ‰¨ž ©‰˜ ˆˆ‰ª#™š‰’‰ˆ˜艚š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘!!!!!!"!"""""""""""""!!!"!!!""!"""""""""!!!!!!"!"""""""""""""!!!"!!!""!"""""""""!!!!!!"!"""""""""""""!!!"!!!""!"""""""""!!!!!!"!"""""""""""""!!!"!!!""!"""""""""€‰ˆªˆ‰Š‰Â‰*‰ ˆ™ˆš˜ˆš,˜ˆ“     £*0™ˆª€‰‰Šˆ‰Â™*š š0ª#™ˆš˜ˆˆ,˜“ ‚ €‰¨ªˆ©ˆ©Ì)̪"šª0ª#™‰šˆ‰šÌ™ˆÌ’ 3© ™  £*0€‰ˆªˆ‰Â‰ª‰‰ˆ™ˆš#ˆšɘˆ     £*02""22"2232233323333óó3óóÿóóÿÿÿÿÿ2333!"""!!ˆˆ!ˆˆ!ˆˆ!ˆˆ!233333#"""ˆˆˆˆˆˆˆˆ33#2""22"2232233323333óó3óóÿóóÿÿÿÿÿ2""22"2232233323333óó3óóÿóóÿÿÿÿÿ2333!"""!!ÁÜí!Ñíþ!Ñíþ!ÁÜí!233333#"""ÞÍïÞïÞÞÍ33#2""22"2232233323333óó3óóÿóóÿÿÿÿÿV»©˜™€93“ˆ€333#" ‰™‰8#3#"ˆV»©˜™€93“ˆ€333#" ‰™‰8#3#"ˆ 0ˆ #‚È2#Ü!ÜÁÝ€ÈÜd€Ìªuˆ Œ(2Í2#Í!ÝFÍŒWªÌ ˆ1‰™!‘š‘ʨªì€©™šºÛˆ ™˜©¬ÁªŠÑ™š½«© ÿÿÿÿóÿóÿóóóó333ó32233"222""22"""!"""!""Í!""Œ!""Ü!""È!""!""""""Ü""È""Í""Œ"""""""ÿÿÿÿóÿóÿóóóó333ó32233"222""22"""ÿÿÿÿóÿóÿóóóó333ó32233"222""22"""!"""!""È!""Œ!""Ü!""È!"""!""""""Œ""È""Í""Œ""""""""ÿÿÿÿóÿóÿóóóó333ó32233"222""22""""rg€™€‰ˆ€ppPv‰™‰‰"rg€™‰€‰€‰wvUv‰‰€©ªš€91š˜1˜:€©ˆÌˆ©ªš©“1‰£‰1š̈ˆ©šª›¨©Ãš˜(-<ÊÓÓ€‰,#ˆ™ˆ¹ª©š©<ššÃÒ‚‰==¬‰2˜™ˆˆ""""""""""""!"!"!!!!!""""""""""!""!!!!!!""""""""""""!"!"!!!!!""""""""""!""!!!!!!""""""""""""!"!"!!!!!""""""""""!""!!!!!!""""""""""""!"!"!!!!!""""""""""!""!!!!!!ÀíÞ Ûþï½ê»»®¬¹›Ê­®êÚš©Ù¬ˆˆÊк« ÜÍËíÞ¼Ú»»­¬¹›Ê­­ÚÚœš©É¬ˆˆÊÀº« ËíÞ¼Ú»»­°º«Ë¬¯úÊš©Ù­‚(Ú¬(‚Êк« ™™‘ª™‘»»«º«ºû¸‹¿±»»¡›¹º«™™‘ª™‘»««º»»û¸û¸±»»¡›¹º«™™‘ª™‘º»»»«º‹¿‹¿±»»¡›¹º«™™‘™™‘ª™«»»º»º«»ñ¸‹±»»¡û¿@pFgõVô@ôÿveTÿD@tf÷UVOVô@võ_TÈŒ€ÜÍÈíÞŒÜþïÍÜþïÍÈíÞŒ€ÜÍÈŒVTVTgegegvpVe`ET`ETpVegv`gVV`õö`EF`õF`UVpfg  ™ €˜€Ž™“ ªšˆª™™©9’©ª0™ ‰è9©ˆ©š™ªª"‘  ™ €˜€Ž¡š“ª™ˆ "ª0™ ‰è˜9©ª ˆ™™ªªš)“™™‘™™‘ª™«»»º»º«»ñ¸‹±ÿÿ¡û¿™™‘ª™‘»»«º«ºÛ¾ë½±»»¡›¹º«™™‘ª™‘»»û¿û¿û¸‹¿ñ¿û±‹¸¡‹¸‰˜ˆ˜̈˼̻»¼¼»¡¹¬±¼¼¡¬¸VôgõpF@TevVO÷Utf@_õv@ÐÀ TVTVegeg"ó 3=2" #232"!þ !/ 3ÿ!3#!?22"2ªª2ª"2*32"2™!˜ˆƒƒ"3’™3"‰"‘‘‰80ˆ™)3"˜!"3€!"!€ƒ˜0ˆªª!#"ª!#3¢!#"‘!#™!#‘‰€ˆ088»»º°ª««Üª©í¯ÿ™»›?™‰»«»ºª ªÍ¹ÿùÞ9óº«2ó˜™"3»»º°ª«ÿ›Üª?“íŸ?#º«3"™Š»«»ºª ªÍºúÞš¹»™ÿ¨™1ó"!23("""!!ƒ2(!3""!!!#0"#""#šššššš‰‰‰ "" !""!"!2ÿ!3#"òó33"!""!"!"ÿ#"2333?/º »0¢¨ Š3©)3" 23 !" «¨2"9“ 2# 3 "¡  º#Š"¡9“ 2# !3 "«» Š*¨!š3 "3’3# " ?#!33"!2?2#"’˜©Š™ 33ó"#!2"!" ) š ™‰‰?3‰#2’"!"’© ™ €˜€˜˜2ó)"3#!ó 2€"‰)¨š ™  !333#"00""03232"!"! UfPTUVUfg#qpww711'""27112"2?# óÿ ãã23!"22""22!=222ü22!322""1#ó!!#3!"""##Ó##Ï###3##"##?2"32"!"#2ó#1ÿ?1>>!3#"© À Œ  ™™ ‰ˆ™ À€˜ˆ€  šÈ €  ™  ª3 ª™# ™ˆ‚ˆ#"""˜‰2ÀÐì ÀýÍíá 2!#!2#!ð!/ðñ"2ó23232!2/#0  0 ðððð0  ÁªÙž‘Ï€™ªª ©ššØ‰šÈØÊ!ÞŸ‰ªª1#Ù11È1# ÁªÙž‘Ï€™ ªªš©ššØ‰ ‰ÀØÊ!ÞŸ‰ªª1#Ù11È1#!#!2#!!#" ™‘º©™©»ªºº€©© 2#!!#" ™‘º©™©»ªºº€©© ˜™ `E»»V°««k «šjª«y™šx#ñðDTvDDeEDeUUfffvwww 0  0 ðð00 ðð ‰0È ‰0’33"3!˜ "©ª ™ˆ ‰0È0’3"˜ "©ª ª š™wwVpVUgõTWEUpvÿgpuwgwewUeUUvUUuvÿgvwWˆˆ©€©ª˜ú«¨ºª€©™ª€šˆ©ˆšˆªšªª‰ªªŠª™ššˆ© "" !""!‰ˆˆ«ª©š™ š»»"!"""!ˆ˜ªºˆ™©š»»© 030"2"! !!!2223#""#!!##peffpVevWewgewpVfwVwffVgVewVuwVvfeeww€šè˜€©™™¨š›˜Šˆ€©»ˆ©ˆ‰Ž©™™š¹©Šˆ¨‰»ššˆˆ¹«ª€«š™ š»»¹«ª€«š™ š»»¹«ª€«š™ªº› ™©º»»© ªº› ™©º»»© ªº› ™©º"ƒ!2!!2!!!!!!!ƒ!!2!!28"##!8##b88888888GTIG33Gñ9879CCCG²IGTI888888888G1 1@GðQ''''d4@@$ñ$C0CG4IGTIGIGGÿYXWY"!#"!C""!$1ðT@HH88887;IGTIG#!±IGYXXXWóYYW2YWWYWY"""""!#""! #!21H7IG497988888888888888888887I88799797G%IG%I dC ·T#!HH'YXXGIGó1ICYXXXXWYXXXXW797 9C4$#"$#$QC'C#W'988Gð1IGÿ1TTTTTóI1fV@QYX79XWQG987TTTI:C#"@$$'$"!UUU#GIGñI888888GI''''CYG@@@@IWGQ3TTTIG1$' 79XXW1'IXXW#!YXXXWIG'±IGYXXXXXXXXXXXX"""""IG@±±@IGGYXWTTTICGT#""!0CÿnP3'@4±TTGC666C98887'IGIGIGC1C'IaGIYG@@@@IWW[YXXXCGT"""T1#!$#"""""3'36$66$a333G66b66DIGTIGIGIGIRIWYGG4IGT88888TT1$$$$6T 6$$4aG666Dc±IXXXXXXXXXG97I4WY IGIG79887C@@@GCPITTT#!#""""""""!#"66$33#!337YXXWYXGVI: 1@0IGIG2G987VC@@#""GVV'''I$aTTTT88887%988883T@6$6±0ñFIG1IGYWI333±3VI8887VV9888GGQSVY""WC'''I$$$$@@GI!#""""""""""""""!ð#""""XXXXXXGPI G1IGIñðó±979887QñQ9887TTT97GVYXWIGVCI"""""""""""GI"XX87498888888887IGC1C0I# BYW0VðVTTTYWBXXXXXXXXXXXXXXXGnnnIT33@@GCò1IG0±I 970VVTTT97888888888G6666I21$T$GòTò1IXXXHH[I±YWYXXWQQYXXWTTTYWGQV''''ÿjjGnnnI#!$T$ 2GTòTIGTT4ITTT33B3±=V8IXXXWVVYXXXGGY""""""""GI0@1#"""!1#"""!G3ò3YXXXWYGaTI""""!#"""""!1@GAI2IGIGGP@IGI""""!#"!#n8888888G''I(XXX7U9""""""8798IGIGGI@@6Q6 WYXXXXWYXC@''''CGCCIG'1T'I4GI7CòCII879GGTTQI@VV666888888887979888888@'G@nIG''ISGIP1Q4JI9G&IG''''I7XXXXXXXX#"""""!646GCIGCIG6'6IG97cI$T2$@'T73nIG313IGI1d#WIIGIG''''IG!V#!°#VGA971IG66988GI$T$'Dðñ)' TcnP IG988"""GcI"""!#"G1 I9G4IG''''I7Q3TQ"G1IG6'6666IXXXWYWI@#!'T#W3nIGòTò PIG9888887V988887IQ98GIWY87Q2ñð1V8888888887@9G@YW@IG66YW69888GIG2I!#"!#@'G@nIGCCYXXG1'I97987988887TG±33363IXWYWYXG6'6IG4HIGIC@''''CGCCIXWUYXXXWnYG1 ò33IYWYW3F1G±6cI879798G66IGSn1IGI1""!n#""XXXXXXX8749G1IGò1@I972973#"!G6IG@97@IW'YXXXXXWIG9$T$1G'±òIXXXXXXXXXXXXXXXXXXXXXXX2C3T!V#XWYWIG9887988888887IG$T$@ 2G'±AI1VGIG1YW1@@IGY"!@@G'±IQd3Q TG''QTTIGCIG1$IXXX""""""""""""""""""""""XXXX"""""""""""""""""""""""""""""""""""""""""""""""""""""""""XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX888888888888888888888888j37'9887ð9887@9G3V@3I 4666 IfGTTTI18G'ñ@IG96666#!%#""""W988888887BQ'''1188888887HXXXH988@1397j$7P9GQQIG@1V@@6666#66GTTT1V'''n'V'3YWBHHH3G98887 IG@I33#""16610G$6IW#!#!YG6666`@6666#GYXXWYXW#""!22#""!'''#!5c98WGðH3TTTH987YHHI!#jD66G6IGTIGA6YXXW6TY!1&h#188887 98G98"""P""" IWnYW GñHVHBnfnaHcI""!3YWGI888888G1IG66YW66I""""""""G@IGTIH97@9GGHH7 TTT39HHHHnH I±4""""""""!#!#GIG$$@@$IG#!T#!IXXXX'88888888888GIG3TIWnYBHn@HG@YWYW@H H0IjH33!#G$I8888887±IGI888888888ôYGCc97#""!IG3TIG°I#"!3HHHHH0XXXXXGIXXXXXGIXXWYHn@@cWYG òaIGÿ1IGhH$C97C99Gðñ0IGTIG4I1!@#%%CC°n f@@79GTYXXXXWIG#!#!IG4J66TTn$@GCBYWIGYX88888887:981"""!#"""@220nb06666n888HH±#@1H6IGTIG$$@@$IGT988HHô166TTn1XXXXXWYXXXG1IG9871I`Be2B@n4J66nBG@'9æ## ÿn1IGT9888XXXXXXG11=66TTn@G988887IG1YXXWYXXWI!4!-#"""""""""!#"""""!'#Ge@4Jð""""66'T666H@IG ò4IG#!T#!YXXXWC66C@YXWG1`IXXXXW98879887I"+!!:T888GI'G@'Y!ñ66T'6664Sn ""WYXXXW;I79WYXXWY7G@YXXXXW#""!98888G@@·@@ 988888G9C1T7I GI'XXX±$a6$66'T666#""!@j#7988888G9T'T70QóQIG9887I²888887n9888GB1 IGYXXWYXXW$$$988G1I8ðñTTT3@= PI66G Icnn666666T'666!#G@ IG 'IG$IGC97YXXWIG98879887$$4IW97A988C#!T1#WI66#!@798æ4D3233n06B""""G$ @IGY""!T'T#"XW±±YXXWYXXW'Y7I`GTTTTTTIGIG0 1$$$$YWI7IG33I!#""!TXXXB c@GCCI""!  B±2HA± XXXXWCCI7%9"""XX7(9XX@$@IGCYWIGIXWYXXXXXXXXXXXXXGIG666IG0@ I"""!#!B 8GIB#3$±±88887I7339GTI#XXXXXXXXX@WYXXXXXXXXGI7 9GnIGdIG666IXXWI!#T66GSH098"""@H±4@$17C@@CnI73ó398888888GPI@%G@0IGIG98888888888887nIWIG98887%9TT66G4[YW1I333HXXX#""11=HIG33970B0IXXXô166661XWYXXXXGIG13IG3 987YGB98888887BI""!B ''9HHH8G1QIG0BcI8879880@#WIWYG11I6666661@@%G666987TTTÿIGB'''IG3'']TTI""!''@ @H97 0@2IG$$$$I"""""""""!#""!#"""""GIGjIG11@YW11dI888888#"""""""""""!1f@0G13IG3YXXXXXXXXWnYWnYXW1I!YXXW IXW #""WYXG$$9888888887nn9887nn988887IXGC3CIGHnnnnnHIG@@I$$XXXXXXXXXXXWYWYXXXXX719719G33I@IGIXXW GjIG@1CC1@1CCIG''97c971I6664#""""!n$ #!G9887I7c97IB BIG9"""GIG@66661IG'''I0666%$GIb4Ja66gTT`Ia @G AXXXG@166TTTTTTTT661±IGCCCYWTTTTTYWfI"""""""""""""""""TTTB$$XXXXXX""WYWI""!B XXG$C#!CC#!CCIXXXXXXXXXXXXXXXXXXXXTaT@$ $XXXXXXXXXX"""888XWYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXTTT$#!#"""B @ HIGjI"""$$3 P2IXXX 2004HIA$@""""""""""XXX""""""8888888888888888888888888888888888888888888888888888888888888888888888888888G1P1IG@11988GIG IG I8G2@FVI88888 8GC1R1CI88888887UUUUUFTTIGYWIG01"!@IG@0IGPIG4@20`IGT0TIGIG FTTbTTDHH59879GIG±10@I888WY79GS`c±2`±P`IGFDIGI G@YXHHHH55555H0HIG#nn IGbIG+BIGcIG2@0`IG1FD'IXWYXG1IG9G1111HòH`IGCYXXXXXXGI79G3IGFVIG1ÿ#""!I8XXHHXX88879888GHU#!A#!U@H  HIGA`n I888HYG 97 IG2HHHXXXXXXXXXXXWHnnnYXG1@W 97dIGIG@@IG HFc@cDHYXXH7IG@CI88GaL4IG33F@IG`IGD2IGF G@l4IGTI88888G29888811GH55HIGòIXXXXXWH0IGYXG²YXWYXXXXGBYWMXWAI8HHYXH88WYX88888887T9888888G1IG`2L4n1XWH111HIGfIG±988HH8888WMYXXXHHHXXB²G2IG4J3971±97 Ie1GcI7T9GIG1UIGYXW#"!#""!687IWUUUYWUYXXXXXG0IGI¸8888HHH@979GIQQ8HH8GaH3QI"!4G9G I7CIGFgDIG±2BIGA6G@97555I5WY48887B0IGe&eI22@87`IX7HXW1YHH8;GIGIGBI8875IWYXXXWYG n@G@FD0ò1BGnI:G00IG IQQQQ@V2VIG'IHHHG293@GI887#3! 988GH±1IGI88GIG@ 0GFDðñò179¶GYXWcYXXX!#22@XWIG'IG000HA 2G3H²01HHIGTHIGmIG6GYWD0#""""""![#GI¶88888887-9G#"""!988888#!#!XXXXXGBIGðH@Y!33#""!Gf3'''313''' =1I888GFIGIG6GIXWYB(GgI¶4ZTT2@IG@#ñð@neI²#ðñ6e6!GIGñIXXH""""G3H1H±HIGHTHcI79887n1GH8887%97I4G0I"""!CndIG#"n1I`a6a<4dIG19WYGI2GIXXW3YXXGH±IGD1H@HnnQQ1G22I  WY-!±IG@BYXXWY±`!#!2HHHG97%98G59323#""GIGIGIXXXXXXXXG HTHcHBndn#"""XXXXXXXXWI"+"GInGc1IGI²#!ÿIG TT97FTT2@GY8887° I888HCIGgHG1FH)#"""""87I88888879n0IG111I87;988884#"TTTTTT#XH@9888WY!33#"GH@ðTYGa4JIG HTHHfGH987987IgnC2@IG±cIG@jI;888TTTTTTTT#GIW @I""""HHYXGñ@YWTYXXXXXXXXXXGDHXXn33G±H'T`'I2@IG""""@IG@#!1YXWIG°HB""""""""G2IW@HYG·4UIXXXXXXGTIGBH98HñHG@YXGYXW0YXWI! )C97QQI7@987IG4HYX!G`·IWYHHCHHIXW5IG0IXXHGQÿ ðaG@988H HWYXXXC)  H1IG5H98!0000#GI(gZ11I88798888H%H88888G°H[YX!B#"""!HHPG)IG%IGB  H#nnIGI"!0000#"6XXXXG0I8798G988G±H4I!#330G0I79888XXXXXXHHnnHHXXXXXXXXXXWYXXXXXGjnIG`I!UUU#"G0I)GC2CIG@IGÿ9G4Z·I-B<4!#XXXXXWYG987IG2988888887@988Gnf±nIGITTTG@2fIaG 98871#"""!9887)IXXX@"""!n#""""""mG'dI7!c979887nnI@88855588888876`IG±lBAI@P)FD@@GYXWIG3L4H2 CÿC n1100IG±2`FD@@IP1GH YXXWF ±D1YXXW)I@ #! XXXXXXW°H±YWCTYXWnnIG@YXXXXXXX 3GIWIGF DIGYa """!66#"""G0IXXXXXXXHH\YXXG`IGcg2I11cfGIW9888HUHXXXXXXXXGYXXcHHHH066G2IGS4IG±±YXXG2@`I'''3"+WF 4dIXXX c""""XXXXXXXXXXXXXXXXXG2±I11#""XXXXXXXX""""""""""""""XXXXXXXXXXXXXXXX""""""""""88888888888888888888888888888888888888G2@I1188G''''GA111IG666H #"!I!@A#17HHHHHHHHW88888888HnnHnnHnnHWTIG66@666Hf I@@GP)]B   H7@ @HTIG@66666H I1#WHHHHHHHY7  HTI2@87666669HHXXHHXX@hXXG@H #""""!IP22]3IG01XWUYXXXX9H$ @YX"!#!2#"XXXXXXXW6666IG["5@@98HHHHXWnYXX""""88876666697400666 gn#""""!G0I88888!@#G4D66666 @@ 666!n"!33±GH9888G2²H66666YW66666666666@"+"!@1'cGCCñðI G2H6666IG66 66666166666#"'"""""XWIXXXGc66IG6666666666 n6667H\YX XXXXWTIG6b6n166666n±666YHnnHW'T@H4I88888GTIG6666666#"" n666H@fHTTHaI!#G1IGTIG6666666666!n HH7'TT#"W1IX G@HHW97nIG66666@@@nTT#8711IG1SH4JIGÿ666""""!@H@H!#GCI¤¥¦§¤¥¦§¤¥¦§¤¥¦§¤¥¦§¤¥¦§¤¥¦§¤¥ÐÔÑÐÓÑÒЯÑÒÐãäÐÑÑÑÑÐÑÑÐãÑÑãÑÑÐG@HH7YWIG@@6660 I!19HnnH71GHB1IÏÏÏÏÏÏàááàááâàááâàÕåàááááàááàÕááÕááà-G1IG1IXXWðñYXWYXXaT @IHIXWYXßxyßÇÈÉÊËÌÍÎß|}ß2F XXXXH87IGVVIGI!T'9!HIGnI./ˆ‰×ØÙÚÛÜÝÞŒ./3F g G@IXXXXGITTI!@#""""""""GÿIGSIžÂçèéêëìíî@2F GaIGI 09"!#"GI79./÷øùúûüýþ./#""""""""""G1I88888888887I 9!888888888887IG@1IŸÃA´ej]`HHHH1I!@  I @IGI./0NOh±././NO$d./G666@1I0'9IG1IÄ$$$^_NO$^_$NOB"""±±G666YXW6666YX!@''@$I""""""HH@111IG@I®./NO$NO^_®./˜™./®NONO^_$./®3`°G6666Y8W66666I 'IGIXWIÁÆÅÖ¾>?^_$^_$$¾>?¨©>?¾^_^_$$$>?¾@±±G6666IGeIG166666I'# IG66666666669887Ivtuvwtuvwtuvwpqrstuvwtuvwtuvwu""!UUUU#""G66661IGIG66666I @IG6666666666L4IŽÀ†„…†‡„…†‡„…†‡€‚ƒ„…†‡„…†‡„…†‡… G66669GI7@66666I'!YG6666666666YXXXX–”•–—”•–—”•–—‘’“”•–—”•–—”•–—•! #XXXWHHYXXXX @ $YGh)Iާ¤¥¦§¤¥¦§¤¥¦§ ¡¢£¤¥¦§¤¥¦§¤¥¦§¥""GI"""""!XXXXG@1@IÀnononononono6666nonononononoXXXXXXX"XXXXXXXXXX~~~~~~6666~~~~~~ |005:<>>??????????????????????? € p  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@PPPPPPPPPPPPPPPPPPPPPPPPPPPPPP``````````````````````````````0p00AABBBBBBBBBBBBBBBBBBBBBBBBBB 00@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@‚ PPPQSW\VWY\^][\^_^]\^___^^____QÁ10PaPq0p`pPp0qQaaa2bbQRQSPc@SAT2d"TeVfóWàXÐiÑ:!;!< =!?!J0ê1¡3‚SÕ112$2·RvQP2Î402@R•1ç1¬2é151#1&1U1x0#000 00000ÐðÀ37ë7s75z3º3¶3B4Ã3ö6Õ5£0µ0ç0900¦0Ù0 0 0k0 0l0>0 0L0m0m0Ì0 Ððà` 0@P` 00@@@PPP``pppp pppp3033R„b‡2(11ñQ€a1â11F1XRŠb†2ã3â3â4â56T839!:;ñ<á=Â?¢?Ð?à 0o0^PL0+02÷3Æ4µ5“5‚78:€<€?€?€7€8€:€<€?€?€;€<€>€?€?€=€>€?€|0U4S22238>?;q4q0r0r2r4s5s6s6t7t9t:u;v;vw>x?x?yšPP`%a(a)Q8Q7Q5a#a"a!a"b#R$R%S%S%c%d$eeVWXXYZ[\^ ?p>„.h=z=…LL??{02 3 4 5 55667889:::;;;<<====>>>>>00U010 00ð1à2À3°5 79€<€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€?€ 3024 6 89;=>????????????????????s111RSðVñXâYÒZâ[ò<<985VðYðZà\à]à]Ð>Ð?à?ð==????‹   013579:;<>????????????????????: 515;==>>?????????????????????ø @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ø!!øA!!A!!A!!!!!!A!!A!ø!öAø!!ôA!ø!!!!A!!A!!A!!!ø!ø!ÿ!Aø!!øA!!A!! aaa a a a aaýAýAýa AýA aýA A a A Aa A Aa a A A a AýAûaýA Aùa AýAa A A a A A a A AùaýAýA÷aýAýAøaùaýA Aýa AýA a A Aaaaaa Aaa````````````````````````````````````````````````````````` `` `` `` `""""""""""""""" B`````````````B"B" B"B"B"" "" """" "" """B"B" B"B"B" "" """" "" ""                       B B BBBBB B BB B B B B BB!–!! ! ! ! !–!!!!!£ £ £££££ £ ££ £ £ £ £ ££ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !…e eeeE…e eeE Ee e e ee e eee ee e e ee e e e eee e e e e e…e eeee='D](DL(D='D](DL(Dý"B "B BB "B "B BB4'dT(dO(D4'dT(dO(DôBBB B B BBBB B B B@@€@@€@@€@@€BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBe"e%&e4&e " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " e "e*&e9&e¥ ……………… …¥ ……………… …¥ ……………… …¥ ……………… …&A&A&A&A&A&A&A&A'A'A'A'A'A'A'A'A(A(A(A(A(A(A(A(A'A'A'A'A'A'A'A'AV…pX€PpYpWV…pX€PpYpWw""""~"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""–„Ä„ÁÄF8Ë0K¢4Ë0K¢4Ë0K¢4Ë0K¢4 ÀÀÀEÀ#MÄEÄEÄEÄ#ME%ME%ME%M°0••u•u•…•…•••¥•••µö \\ÞÞ\\ÞGÞG`â``(`(àHàHà â%¥ ¥ ¥I¥IåIåI¥I¥Iå å âh hª‚hª‚+«‚+«‚+ €+ €h €h €ìÀ?""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ŠºŠºŠºŠºŠºŠº™˜™˜™˜™˜™˜™˜ 2"!° ° ° ° ° ° 2"!23"            23" 3 322#€ € € € € € 22# 33!° ° ° ° ° ° 33! 3#!            3#! 3#!šªšªšªšª 3#! 3#! ©»  ©» ‘‘™ ©»  ©» 3#!  ©» í  ©» ™‘‘‘ ©» þ ©»  3"ˆ¨ÐŒÐîހ܈¨™‘‘‘ˆ¨àÍàÿïÀ툨 3" 3#€˜‰ î͈èˆÈ퀘‰ ‘™™‰™™™‘™‘˜‘‘€˜‰ ÿÞŒøˆÜþ€˜‰ 3# 3€€ŽÈØŽÞȈ€€‘‘‘™‘‘˜‘‘€€Øìï܈€€ 3 3è͈íÈ푉™‘‘˜‘øÞÌþÎÜþ 3 !™‰ÞŒíˆèÜ™‰‘‘‰™‘ˆ‘˜‘™‰ïÍþÌüÎ홉 ! 3""ØÜîÞÜ‘‰‘‰ˆ‘™‘ˆ‘˜‘ìíÿïí 3"" 3ÈÈíÍÈ‘‰‘‰ª‘ˆ¡¨‘ÜÜþÞÜ 3 3!"€€ÜŒ€¡‰‘ŠŠˆ‘ª‘˜¡¨‘ÀÀíÍÀ 3!" 3!€€ÜŒ€¡‰‘ˆˆŠŠ‰¡ª‘©¨¨ˆ‘ÀÀíÍÀ 3! "È ¡™¨ˆˆšŠˆˆ˜¡ª‘™Šˆ¡¨ˆŠ¡Ü " 3"È ¡™¨ˆˆšŠˆˆ¡»‘™Š‰¸¹ˆˆš¡¡Ü 3" 3€ ±™¨ˆˆ›‹‰ˆ™±»‘©šˆ¸¹™‰ªˆ¡¡À 3 3€ ±‰¨ˆ‰«‹ˆˆ‹°»ˆ‘‰›™¸¹™Šªˆ’º¡À 3 3#! ¸ªˆ˜›‹™™»°ˆ±›ªºè™‰«™º¡ 3#! 3#!°ˆèºˆ™™«žšªš»ˆˆî˜ˆ¹‹ª™ºéšŠ‹ª±º± 3#! °ˆˆˆ™˜˜‹®©™©™ªŠ»¨™š©™™ºèª™‹Ž¡àˆ±  3"°ˆˆ™˜˜™‹é«™©©¹»™»‰™‰ªºŽè©™‹žè(è 3" 3#°˜˜™™™¹›‰ê©©šžš™©»šª¹®ˆš»›‹‰žé(á 3# 3°™˜š©º«šˆ˜ë«»™©ˆš©»ºž‰¨™©»‹˜«éˆè 3 3°¨©ªº›™˜ €‰¹šŠˆˆ™©‹ˆ€™‰›é˜éŠè 3 !°™ªš+™™™˜‰˜˜‰€ˆˆ(’è˜è ! 3""°™šº™™™‰€ˆ€ˆˆ‰è™ê 3"" 3°ª¹›™™‰ˆˆáªé 3 3!"°ª›©‰‰ˆëšé 3!" 3!°«©™‰¨º»é 3! "+™™‰™™¹ë " 3"ˆ˜‰˜¨¹ 3" 3€‰ˆˆ 3 3 "" " "  "  3 3#!"  """ """"" """ " """ """ " """ """ 3#! 3#!pw   "" "" """ """""""" " "»’ 3#! gg'"  " """""!"""""" 2""""" "©"ªš  3"pæç" "" """23""" """" ""23""" " "" "˜"®‰ 3" 3#pVW 3" 3ˆ™™ˆ 3# 3pæW22#22#˜ˆˆ‰ 3 3pfg 33! 33!™™ 3 !pww 3#! 3#!ªª ! 3"""2333333# 3"" 3""2333333#233#033 3"" 3#3333332 3 3#333333223333 3 3!"ðÿÿ3!3àÞ 3!" 3!"3!3""?!"" 3!" 3!ðÓ<3!""""ò33# 3! 3!3!""""ò333?"vv" 3! "ðÝÝ3!""""ò3 " "3!""""ò353?!wf " 3"ðÜÌ313333ó3 3" 3"313333ó3ff?"fv" 3" 3ðÓ<3A3333ó3 3 33A3333ó3#ÿÿ?!wv 3 30333Q5333ó3 3 33Q5333ó3233#1"" 3 3#!233#233#233#3a3333ó32333333# 3#! 3#!233#3a3333ó3233#2333333# 3#! 3#!222313333ó3#3333332 3#! 3#!2313333ó32#3333332 3#! ""?""?""?3AC343ô33!3  ""?3AC343ô3""?3!3»  3"33?33?33?3QSSUSó33!""""ò3 3" 3"33?3QSSUSó333?3!""""ò30³»» 3" 3#53?53?53?316cc3ö33!""""ò3 3# 3#53?316cc3ö353?3!""""ò3Ó¬ªª 3# 3ff?ff?ff?3òÿÿÿÿÿ3313333ó3 3 3ff?3òÿÿÿÿÿ3ff?313333ó3"¢©© 3 3#ÿÿ?#ÿÿ?#ÿÿ?#33333323A3333ó3 3 3#ÿÿ?#3333332#ÿÿ?3A3333ó3"¢©© 3 !233#233#233#2333333#3Q5333ó3 ! !233#2333333#233#3Q5333ó3 ªª ! 3""2333333#233#2333333#3a3333ó3 3""ÝÝ 3""2333333#2333333#3a3333ó3233# 3"" 3#33333322#3333332313333ó3 3Ð 3#3333332#3333332313333ó32 3! 3!"3!3""?3!33AC343ô3! 3!"íàÞ 3!"!3!33!33AC343ô3""? 3!"!Ee 3!3!""""ò333?3!""""ò33QSSUSó3Ee 3!Ðàà 3!Ee3!""""ò33!""""ò33QSSUSó333? 3!EeôT "3!""""ò353?3!""""ò3316cc3ö3ôT "Ðàà "ôT3!""""ò33!""""ò3316cc3ö353? "ôTôT 3"313333ó3ff?313333ó33òÿÿÿÿÿ3ôT 3"Ðàà 3"ôT313333ó3313333ó33òÿÿÿÿÿ3ff? 3"ôTEe 33A3333ó3#ÿÿ?3A3333ó3#3333332Ee 3Ðîîîî 3Ee3A3333ó33A3333ó3#3333332#ÿÿ? 3Ee! 33Q5333ó3233#3Q5333ó32333333#! 3 àÐ 3!3Q5333ó33Q5333ó32333333#233# 3!! 33a3333ó3233#3a3333ó3233#233#! 3ªªÚê®­ªª 3!3a3333ó33a3333ó3233#233#233# 3!! !313333ó32313333ó322! !Ê̈Ý݈̬ !!313333ó3313333ó3222 !!!2"!3AC343ô3""?3AC343ô3""?""?!2"!ʈ̈ˆÌˆ¬2"!!3AC343ô33AC343ô3""?""?""?2"!!! 33QSSUSó333?3QSSUSó333?33?! 3Ê̈ˆˆˆÌ¬ 3!3QSSUSó33QSSUSó333?33?33? 3!!23"!316cc3ö353?316cc3ö353?53?!23"!ªªªªªªªª23"!!316cc3ö3316cc3ö353?53?53?23"!! ! 2"3òÿÿÿÿÿ3ff?3òÿÿÿÿÿ3ff?ff? ! 2"™™™™™™™™ 2" !3òÿÿÿÿÿ33òÿÿÿÿÿ3ff?ff?ff? 2" !""#3333332#ÿÿ?#3333332#ÿÿ?#ÿÿ?""‰ˆˆˆˆˆˆ˜""#3333332#3333332#ÿÿ?#ÿÿ?#ÿÿ?""2333333#233#2333333#233#233#™™™™™™™™2333333#2333333#233#233#233#133333333333à!!!!!!!""2!"""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2""""""""""á!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!"!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!"""©á!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!"!!!""""""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"2"""™:33ª:3:áî""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""!""""""""""""""""""""""""""""""""""""""""""""""""""""""""’)""™"")î""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!""""’"""’"""à""""""""""""""""""""""""""""""""""""""""""""""""""""2"""2""22"""2"""2""22""22"""2"""2""22""22"""2"""2""2!""""""""""""2""22"""2"""2""22""22"""2"""2""22""22"""2"""2""22"""2""22"222""22""22"222"222""22""22"222"222""22""22"22!3"3"33"23#""22"222""22""22"222"222""22""22"222"222""22""22"222""23"2232233"223"22322332233"223"22322332233"223"223223!3"3233#33#"""32233"223"22322332233"223"22322332233"223"2232233"223223332332233223332333233223322333233323322332233323!3"32#2#3"""""23323322332233323332332233223332333233223322333233223333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó!3"3233#3""""""333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333óóóóóó3óóóóóóóóóóó3óóó3óóóóóóóóóóó3óóó3óóóóóóóóóóó3óó!3332#2#33#""""ó3óóóóóóóóóóó3óóó3óóóóóóóóóóó3óóó3óóóóóóóóóóó3óóóóóóóÿóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿ!23#2#2#23#""""ÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿóÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!"""""""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!""""""£ª:3£ª3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿ!""""""1’™)"’™"óÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿóÿóÿÿóóÿÿóóÿóÿóÿÿóóÿó3óóóóóóó3óóó3óóóóóóóóóóó3óóó3óóóóóóóóóóó3óóó3óóóóóó!"""""#’™""’™"óóóóó3óóó3óóóóóóóóóóó3óóó3óóóóóóóóóóó3óóó3óóóóóóó3óó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó!"""""¡""™""’)"333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó333ó3323322333233323322332233323332332233223332333233223!""""š"")""")"322333233323322332233323332332233223332333233223332332233"22322332233"223"22322332233"223"22322332233"22!""""¡™"")""")3"22322332233"223"22322332233"223"22322332233"2232232"222""22"222"222""22""22"222"222""22""22"222"222""2!"""#™"""""""á2""22"222"222""22""22"222"222""22""22"222"222""22"222""22"""2""22""22"""2"""2""22""22"""2"""2""22""22"""1")"Ò""""î2"""2""22""22"""2"""2""22""22"""2"""2""22""22"""2""2""""""""""""""""""""""""""""""""""""""""""""""""""""13£ª#"""""""à"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""™""""Ò""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"2")""""""""á""""""!"""""""!"""""""!"""""""!"""""""!"""""""!"""!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!"""""""""""á!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!!"!""!!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2"""""""""""áî!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""""î!!!!!!!""""""""""""àUewgUewgUewgUewgEegEegEegEegUewgUewgUewgUewgffffffffffffffffwgUewgUewgUewgUegEegEegEegEe111111111111111111111111111111111111111111111111wgUewgUewgUewgUe111111111111111111111111111111111111111111111111""""""""""""""""""""""""""""""""""""""""""""""""ffffffffffffffff""""""""""""""""""""""""""""""""""""""""""""""""!!!2UewgUewgUewgUewg0!!!!!!!EegEegEegEeg#!!!1112UewgUewgUewgUewg0!111!!!ffffffffffffffff#!!!1112wgUewgUewgUewgUe0!111!!!gEegEegEegEe#!!!!!!2wgUewgUewgUewgUe0!!!!!!!ffffffffffffffff#!!!,0 ,,,qmiª®ª¡Îª}HuH$8i$YHÂe‘ÿ4ÿÎÿÿÿ! 0!#0!#0!#111!""""1111""""2222111""""ˆˆˆˆ˜º«‰ˆˆˆˆááîîáîîáîîîîáááááááለˆˆ˜ºE†ˆˆˆˆ1111ˆˆª€ªˆˆˆˆ˜º2ˆˆˆˆ€ˆ€˜˜˜‰‰€™˜‰˜©™™šš ©™ˆ˜ˆ‰‰ˆ™ˆˆ‰ˆ˜˜ˆˆ‰ˆ0!#0!#0!#0!#""""211!#211!#211!#""""2222ˆ‰Š‹‹Š‰ˆˆ˜¨¸¸¨˜ˆˆ†„…‹Š‰ˆˆ˜¨¸XHhˆ0¡£0ˆ0ˆ0¡£:ˆ€€ˆ:ˆƒ‚‹Š‰ˆ ªš ª©°ª™ «š ª©°ª™ «©°ªš˜ˆ‰ˆ™ˆ‰‰™˜™‰™˜™‰!º«ƒ®ê8  ‘  ¨Š‘1)’1""""#111!#0!#0!#""""1111""""2111222ªª¡ó?*1¢(‚‘‰˜ƒ8‘2#€ˆˆˆˆˆˆˆˆ˜º«‰ˆˆˆˆ˜‰¨‰‘ˆˆ‘Ÿùˆˆ¨Š" ?"2#b%Qr&aqˆˆˆˆhT«‰ˆˆˆˆª€ª1ˆˆ1ˆˆˆˆ#«‰ˆˆˆˆ ª™ ª© ªšª© šš ©™ ª™ šš™˜™™™˜™™™˜™‰™˜™‰"ðÿÿðÓ<ðÝÝðÜÌðÓ<033¡±±A"2!qÜÍÁíÞ¬žéÊœªªÉܰ ÍÁ©š‘™ˆ¡¡±±«‰¡ñÑÁÁˆˆˆˆ2#ˆˆˆˆUewgEegUewgffffwgUegEewgUeffff0¡£0¡£0¡£111¡ªªªª1111ªªªª::::111ªªªª  ¡11:£ªªªª !112#"""":ªª::ªªˆ˜¨¸(8ˆ ©™›š™°»©™°«›™»ºº ª« ª™‰™˜ˆ‰ˆ˜ˆšˆª©‰ºš « àêê ÐÜÜ ÐÜÜ ÐÜÜ Ve`ETpGt`uWVegv» 0³»»Ó¬ªª"¢©©"¢©© ªª±¡¡‘‘™ˆˆ‚ƒƒ‚ˆˆ(88(ˆ0¡£0¡£0¡£0¡£ªªªª:11¡£:11¡£:11¡£ªªªª::::0!""0!#0!#""#2""22""ˆˆˆˆ˜ºº‰ˆˆˆˆª™ ™ˆšˆó ‰"2 )!šÿš8ˆøšƒˆ8™ªˆ™ ?ˆ©#"˜ ’ ñÿ©ˆƒ©ƒˆ8©ÑÑÑáÑ᪭ڪÊÜͬªªªª™™™™áþïïíÞþÞØíŒÈÈŒ1¢*!š™Â,¡ªªšÉ2Â!#š""gvqWva÷aeVqvgwwpPEeP_UPTUPUU`Uefvˆˆˆˆ2#ˆˆˆˆ™ˆ‘‘¡¡±ªªªª£111¡£0¡£0¡£ªªªª1111ªªªª:111:::0¡ªª0¡£0¡£ªª£""""!112# ªªªª¡11:£  ˆ‰‹Š‹Š‰ˆ‰ƒˆƒ‰13ˆ‰"8‰!#‰!"‰‰ˆˆˆ™™™™8ˆ8˜ˆ3˜ƒ"˜2˜"˜˜ˆˆˆ˜™™™™@tpTpUWufgWU`e "ÿßÿÿÝ<#Ã#?"2?333330333333!"""vv"!wf"fv"!wv1"" »»©ªªš˜ú®‰ˆ™™ˆ˜ˆˆ‰™™ ªª 2# ó?ñ 12#!©šº« €¸‹Ѝ ©š˜‰ ðòÿ_??3?## ªªªªÊ̈ˆÊˆÌˆÊ̈ˆªªªª™™™™‰ˆˆˆ™™™™ªªªªˆˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ˆ˜¨¸¨¸˜ˆˆˆˆˆ˜««‰ˆˆˆˆ˜ª‰ˆ°š°š› ™™‰ˆšš˜ š°š°š°‰  ˆˆˆˆ˜™™©ˆ™ªºˆˆ˜©ˆ˜ªš"¢š¹‘™ª13š™ˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ªš™š©©š™ªˆˆˆˆ™š©šš©»™«›™©™¹º›»š©ªª™™©™©™™ˆˆˆˆš™‰ˆªª™ˆª™ª‰™©š‰ªš™ˆš©™‰©™™‰""""""!"2"!3"!3""!22"2323!##!"""3#3223"3##"#3222###""""!""!"" """"""""íÐŒÐîî͈èŽÈØŽè͈íÞŒíˆ Þ€ÜˆÈíÞȈÈíèܺ ‰ »»šˆ¸‹˜¨‹¸šˆº«‰ºˆ «€©ˆ˜º «˜ˆ Š˜º¸Š© þàÍàÿÿÞŒøØìøÞÌþïÍþÌïÀíˆÜþï܈ÎÜþüÎí   ° š š šš‰š‰©   °Šºš «™©›˜ ©©‰™!"ˆˆ‘™™ªªˆ¨™«˜™º»¨ª©ª˜™š©ˆš™ªˆˆˆˆ‰˜™©š™ªª™ª™»ª¹›™¹»¹«ª›š©™ª™šˆˆˆˆ©™™™š™ºª»ª™«™¹º2«ª+ˆš™‚™©š‘ªˆˆˆˆ©™™‰š©™‰ªš™ˆ#©š‰ˆ’ª‰™(™ˆš‰ˆ"!3"!#"!2"!#"2"!""22###"2""##"2""""""!2"2!###2"2!#"!2""#"2""!#"""""#!""!"#!""!"#!""""ØÜîÈÈ퀀܀€ÜÈÈ€€ÞÜÍÈŒ€Œ€¨©»˜˜º€€©€€©˜˜€€«©š˜‰€‰€ìíÿÜÜþÀÀíÀÀíÜÜÀÀïí ÞÜ ÍÀÍÀ UUPUVUPeeUPefUPeeUPeeU`UUeffªª  š©ª ššª š©ª ššª š©ªªªš™™ ˆˆˆˆˆ™™©˜™ªº˜™™©ˆ˜ªš"¢š¹‘™ª13š™ˆˆˆˆš™‰˜ªª™©»™ª™™¹›ªº›»›š©¹ª©™ª™ˆˆˆ™™¡šª«©º™‰»«›ˆª»ª©š©™©ª™©šˆˆˆ™™ˆª™‰˜Šˆˆ©™‰™šªŠš©™‰ª™©ˆ!"2323"2###""##2""""!2"""#""2"""""""2""""""!"""!2"3!23!##!2"ÝÐíÐààÐàÐÐîî àÝ àÞ à àà îî ÐîàþàððàðààÿÿðîðïðððÿÿàÌÀÜ ÀÐÐÀÐ À ÀÝÝ ÐÌ ÐÍ Ð ÐÐ ÝÝ À"" " " "!" " """"" " " "" "" !"""!"ˆˆ‘™©ªª˜ª™ª˜©š™ˆ™©ª˜™š©˜™™šˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ªš™š©©š™ªˆˆˆˆš™‰˜ªª™©»™ª™™¹›ªº›»›š©¹ª©™ª™ˆˆˆˆš™™‰«ª™ˆš‰ˆˆ©ª‰ˆ›©š‰ª™©‰™©™ˆ22"##"22""##3"222""##"""2""""!#!3"23"!33#322#""#!#"2#2333"3222"#"!#""!"""!#"!2"!##2""##!2"!#"!"ªªÚêÊ̈Ýʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™®­ªªÝˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªêúÊ̈îʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™¯®ªªîˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªÊÚÊ̈Ìʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™­¬ªªÌˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™°   « ª‰ª‰šˆ3333"!"""!!!""!!!""""#!1##32"" àÞ3#»«°»ª  ª™  ˆˆ ˜™‰ˆ288""°« °»š°«™°»š°ª™¸«™¨š™111"©)#˜3" ""ÍÍ "" !#BTPe##qr22"Ã1â2""FFFFFFFF»»»»©ªªª©îªêª©ª®ª©êªª©îªªªº« «º Êš©¬Ú®ê­©‹¸š€º«ˆˆ º«0333#"#!33š‰©‰š‰ ™˜˜‰€ˆˆˆˆ#ˆˆ2©š˜ªª‰ø™™ø¯ú€©š‚!("!"UUUUgfffgDDdgfFfgfdfgFffgDDdgfff»»»»©ªªª©®ª®©êꪩª®ª©êꪩ®ª®©ªªª3333!"""!òÿ"!/"/!ÿÿ/!/"/!/"/!"""033303"30#3#032"03"0!"0#""03330333032#0#"0"!03""0#""033303330""!0#"03!"03""0#""033303#303"#0#"03"03"0#""233!#0"#232!#!3!#!#!2"33ˆ!#ˆ™1‚™©"˜©ª™ª»‘©º»ˆˆˆ˜™™™™ªª©ªª»ª»»»»»»»»»»»»»»»ˆˆ™™‰ˆªª™™»ªªš»»»ª»»»»»»»»»»»»3ˆ3!™ˆ2š™(ªš‰"»ª™»«š#3#3222"#!3#23"2ˆˆ€ˆˆ˜‰ ™˜š‰©‰š‰3#33"#""#""#""#""#""#""#"3333""""""""""""""""""""""""""""3333""""""""""""""""ÿ"ò/ÿ"ÿ/"òÿ"3333"!""!"!!"!""!"""""3333"!"""""""""""""""""3333!"""!"/"!"ò"!ÿÿ/!"ò"!"/"!""""!3!#€€"""‚333ƒ"""‚˜ªªª™ªªª™™™©‰ˆˆ˜‰33ƒ™øÿ?™ˆÿÿ™øÿÿ»»»»ªº»»ªªª»™©ªºˆ˜™ª3ƒˆ©ÿ?3˜ÿÿÿ“»»»»»»«ª»ªªª«ªš™ª™‰ˆšˆ83‰3óÿ9ÿÿÿªªª‰ªªª™š™™™‰ˆˆ˜833˜óÿ™ÿÿˆ™ÿÿ™("""8333("""!"32šˆª‰ª‰«    °"#""#""#""#""#""#""#""""""""""""""""""""""""""""""ÿ/"òÿ"ÿò/"ÿ""""""""""""""""QQQAQAª¥ZªÊ\Ŭªªªª™™™™2"2222222€‰ÿÿÿ™ˆÿÿ˜™ˆˆ˜ˆ™™€‰ˆˆ€™™™€‰ˆ˜˜ˆˆÿÿŸºÿÿ©ºˆ˜š¨™˜‰¨ˆ¨‰«‰©ºª‰™ªª‰™™™«ùÿÿ«šÿÿŠ©‰ˆŠ˜‰™º˜Šˆª«š˜ªª™˜™™™˜ÿÿÿ˜ÿÿˆ™ˆˆ™‰™™ˆ‰ˆˆ˜™™™‰ˆ˜ˆˆ‰"#!#!#!#!#!#!#!#"!"!AQþaíÿaÜaqáîîáááááááîîîîîîáîîîîáîîááîîááîîîîîîáîîááîîááîîîîîîáááááîîááîîîîáîîááîîááîîîîîî22222222!22222!™ˆ2˜‰3"™#˜"˜€˜‘™™˜"3˜"3˜‚8™(ƒ™"3ˆ"3€ˆ™™™™‰3"‰3"‰ƒ(‰8‚™3"™3"‘ˆ™™ˆˆ™˜‰!#™"3‰!2‰"!!!#####!#!#!#!#!#!#!#!#:#š)ª‰"ÿ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆˆˆˆˆ˜™™©ˆ™ªºˆˆ˜©ˆ˜ªš˜©š¹˜š™ªˆ™š™ˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ªš™š©©š™ªˆˆˆˆ‰˜™©š™ªª™ª™»ª¹›™¹»¹«ª›š©™ª™šˆˆˆˆš™‰ˆªª™ˆª™ª‰™©š‰ªš™ˆš©™‰©™™‰ˆˆˆˆ˜™™©ˆ™ªºˆˆ˜©ˆ˜ªš"¢š¹‘™ª13š™ˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ªš™š©©š™ªˆˆˆˆ™š©šš©»™«›™©™¹º›»š©ªª™™©™©™™ˆˆˆˆš™‰ˆªª™ˆª™ª‰™©š‰ªš™ˆš©™‰©™™‰!222€€ÌÈÜŒØÀÝÜ€í܈ÌíˆÜÝî €ÎÀ ÞˆÜ ßÜÍßìïÍŒáÞÝŒ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆˆˆˆˆ˜™™™ˆ™ªªˆ¨™«˜™º»¨ª©ª˜™š©ˆš™ªˆˆˆˆš™‰˜ªª™©»™ª™™¹›ªº›»›š©¹ª©™ª™ˆˆˆˆ™™™šª«™©º™ª»»«›™ª»ªºš©™©ª™©šˆˆˆˆš™™‰«ª™ˆš‰ˆˆ©ª‰ˆ›©š‰ª™©‰™©™ˆ!"ˆˆ‘™™ªªˆ¨™«˜™º»¨ª©ª˜™š©ˆš™ªˆˆˆˆ‰˜™©š™ªª™ª™»ª¹›™¹»¹«ª›š©™ª™šˆˆˆˆ©š™U™™VDšiED™VUEšfUUjFDdi@ˆˆˆˆU™™‰De™‰DT–ˆTUe‰UUf‰FDd†@†2!3!3!3!32?°2#°2#!!!!«ªÝîÿȈÜ܈ŒÜ€ˆ<ˆ2!3!3!3øïތ݌ŒŒŒŒˆ‚!!!˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆˆˆˆˆ˜™™©ˆ™ªª˜ª™ª˜©š™ˆ™©šˆ˜™™ˆˆˆˆˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ª™™š™ˆˆˆˆˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ªš™™™ˆˆˆˆˆˆˆˆ™™™‰ªª™ˆº™Šˆ»«™‰ªšš‰š™™ˆˆˆˆˆˆˆˆˆˆ™™©˜™ªº˜™™©ˆ˜ªš"¢š¹‘™ª13š™ˆˆˆˆš™‰˜ªª™©»™ª™™¹›ªº›»›š©¹ª©™ª™HPYŠUU›hfP™‰he«™yfš™yv©š™ˆ„P…UUˆf†ˆV†˜‰f—™Šg—™‰ˆ™©ˆ# ## #020!"0™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ""3#ÿ?3#""!""""3332ÿÿÿ"333!"""""3#ÿ?3#""!""""3332ÿÿÿ"333!"""!"ˆˆ‘™©ªª˜ª™ª˜©š™ˆ™©ª˜™š©˜™™šˆˆˆˆ©™™™š™ºª»ª™«™¹º»«ª»ªš™š©©š™ªˆˆˆˆš™‰˜ªª™©»™ª™™¹›ªº›»›š©¹ª©™ª™ˆˆˆˆš™™‰«ª™ˆš‰ˆˆ©ª‰ˆ›©š‰ª™©‰™©™ˆ 33"0"#0# !#!#!#3""3"2#!!#!#!#23!3"1"#102 122"22"23""3"2"!"1"2"2"š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘 š© ‰™š#š 9¨š ™˜© ‰¨ž ©‰˜ ˆˆ‰ª#™š‰’‰ˆ˜艚š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ€‰ˆªˆ‰Š‰Â‰*‰ ˆ™ˆš˜ˆš,˜ˆ“     £*0™ˆª€‰‰Šˆ‰Â™*š š0ª#™ˆš˜ˆˆ,˜“ ‚ €‰¨ªˆ©ˆ©Ì)̪"šª0ª#™‰šˆ‰šÌ™ˆÌ’ 3© ™  £*0€‰ˆªˆ‰Â‰ª‰‰ˆ™ˆš#ˆšɘˆ     £*0™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™ˆ™ ˆ©€ó "2(!€ÿ€0ð€0ˆˆˆ€?#"€‚ñÿ0˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ˜™ˆ™ ˆ©€ 3#80€ÿ€ðÜü€Ïíýˆˆˆ€!23€ƒðÿÏÍßÞü˜™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆº»©!"23 #333#" "1#3#"º»©!"23 #333#" "1#3#" 0ˆ #‚È2#Ü!ÜÁÝ€ÈÜd€Ìªuˆ Œ(2Í2#Í!ÝFÍŒWªÌ ˆ1‰™!‘š‘ʨªì€©™šºÛˆ ™˜©¬ÁªŠÑ™š½«© ˜™™ ™ªª ©»» ™ªª ˜™™ ˆˆˆˆˆˆ13"0!#!"ˆˆˆˆ00€3€"€2€"€€€ˆˆˆˆ™ˆ š‰°«‰ š‰™ˆ€ˆˆ€ˆˆ˜™™ ™ªª ©»» ™ªª ˜™™ ˆˆˆˆˆˆÜðÿ30 #ˆˆˆˆðÍø€ÿ€3€2€!€€€ˆˆˆˆ™ˆ š‰°«‰ š‰™ˆ€ˆˆ€ˆˆ"rg"ppPv""rg" wvUv€©ªš€91š˜1˜:€©ˆÌˆ©ªš©“1‰£‰1š̈ˆ©šª›¨©Ãš˜(-<ÊÓÓ€‰,#ˆ™ˆ¹ª©š©<ššÃÒ‚‰==¬‰2˜™ˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆ™™ˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆªš‰»«‰ªš‰™™ˆˆˆˆˆˆˆ™™™™ªªª©»»»™ªªª˜™™™ˆˆˆˆˆˆˆˆÀíÞ Ûþï½ê»»®¬¹›Ê­®êÚš©Ù¬ˆˆÊк« ÜÍËíÞ¼Ú»»­¬¹›Ê­­ÚÚœš©É¬ˆˆÊÀº« ËíÞ¼Ú»»­°º«Ë¬¯úÊš©Ù­‚(Ú¬(‚Êк« ™™‘ª™‘»»«º«ºû¸‹¿±»»¡›¹º«™™‘ª™‘»««º»»û¸û¸±»»¡›¹º«™™‘ª™‘º»»»«º‹¿‹¿±»»¡›¹º«™™‘™™‘ª™«»»º»º«»ñ¸‹±»»¡û¿@pFgõVô@ôÿveTÿD@tf÷UVOVô@võ_TÈŒ€ÜÍÈíÞŒÜþïÍÜþïÍÈíÞŒ€ÜÍÈŒVTVTgegegvpVe`ET`ETpVegvETPôOp÷PtGETVe  ™ €˜€Ž™“ ªšˆª™™©9’©ª0™ ‰è9©ˆ©š™ªª"‘  ™ €˜€Ž¡š“ª™ˆ "ª0™ ‰è˜9©ª ˆ™™ªªš)“™™‘™™‘ª™«»»º»º«»ñ¸‹±ÿÿ¡û¿™™‘ª™‘»»«º«ºÛ¾ë½±»»¡›¹º«™™‘ª™‘»»û¿û¿û¸‹¿ñ¿û±‹¸¡‹¸‰˜ˆ˜̈˼̻»¼¼»¡¹¬±¼¼¡¬¸VôgõpF@TevVO÷Utf@_õv@ÐÀ TVTVegeg"ó 3=2" #232"!þ !/ 3ÿ!3#!?22"2ªª2ª"2*32"2™!˜ˆƒƒ"3’™3"‰"‘‘‰80ˆ™)3"˜!"3€!"!€ƒ˜0ˆªª!#"ª!#3¢!#"‘!#™!#‘‰€ˆ088»»º°ª««Üª©í¯ÿ™»›?™‰»«»ºª ªÍ¹ÿùÞ9óº«2ó˜™"3»»º°ª«ÿ›Üª?“íŸ?#º«3"™Š»«»ºª ªÍºúÞš¹»™ÿ¨™1ó"!238"""!!ƒ3(!3""!!!#0"#""#šššššš‰‰‰ "  !"!""!2ÿ!3#"òó33"!"!"!"!ÿ#"2333?/º »0¢¨ Š3©)3" 23 !" «¨2"9“ 2# 3 "¡  º#Š"¡9“ 2# !3 "«» Š*¨!š3 "3’3# " ?#!33"!2?2#"’˜©Š™ 33ó"#!2"!" ) š ™‰‰?3‰#2’"!"’© ™ €˜€˜˜2ó)"3#!ó 2€"‰)¨š ™  !333#"00""03232"!"! UfPTUVUfg#qpww711'""27112"2?# óÿ ãã23!"22""22!=222ü22!322""1#ó!!#3!"""##Ó##Ï###3##"##?2"32"!"#2ó#1ÿ?1>>!3#"© À Œ  ™™ ‰ˆ™ À€˜ˆ€  šÈ €  ™  ª3 ª™# ™ˆ‚ˆ#"""˜‰2ÀÐì ÀýÍíá 2!#!2#!ð!/ðñ"2ó23232!2/#0  0 ðððð0  ÁªÙž‘Ï€™ªª ©ššØ‰šÈØÊ!ÞŸ‰ªª1#Ù11È1# ÁªÙž‘Ï€™ ªªš©ššØ‰ ‰ÀØÊ!ÞŸ‰ªª1#Ù11È1#!#!2#!!#" ™‘º©™©»ªºº€©© 2#!!#" ™‘º©™©»ªºº€©© ˜™ `E»»V°««k «šjª«y™šx#ñðDTvDDeEDeUUfffvwww 0  0 ðð00 ðð ‰0È ‰0’33"3!˜ "©ª ™ˆ ‰0È0’3"˜ "©ª ª š™wwVpVUgõTWEUpvÿgpuwgwewUeUUvUUuvÿgvwWˆˆ©€©ª˜ú«¨ºª€©™ª€šˆ©ˆšˆªšªª‰ªªŠª™ššˆ© "  !"!"˜˜ª©ª™š™»"!"!"!‰!ª‰™ªš»™© 030"2"! !!!2223#""#!!##peffpVevWewgewpVfwVwffVgVewVuwVvfeeww€šè˜€©™™¨š›˜Šˆ€©»ˆ©ˆ‰Ž©™™š¹©Šˆ¨‰»ššˆˆ€¹»ª «ª™š™»€¹»ª «ª™š™»€¹»ª «ª™ª»›™ªº »™© ª»›™ªº »™© ª»›™ªº "ƒ!2!!2!!!!!!!ƒ!!2!!28"##!8##$þ~888888888888888888666666666666666666666666666666666666666666666666666666@ @7009F2TTT2@@9888±±00nTTTT³±e4GTdTTI66666666666666YHHHHHXHW6666666666CGYHnnYXHHnnHWI2FTCT I#n!8888888888888888888T#"""CC"!;88888888HHWI66666666666666C@CH3  3HSH6666666j66 6666 G0Y79WIF2TTT2YXW98#2!G¶@FI4   H'H4I6666666666666C20H g H4H66666666666HmH6CGHò$ $HI!#""""%"""""""G'T'' '@m1G#!QYXWF;33"! 6666 #W#! H0H' LI666j666666666@#41@H H666666666666666666666HPH6666666666Gn@$$ ò$H98798@GT'T·'2')æ887Q IG2YXXXXHD1133c`1HHHH G H222H'YX666666666666#b@HH66666666666#!6HHH6#!6Gn$ @H9GYX!!@@#1G)@ IGID#! @11 '''GµfH2g2HI6666666666666"@H3@3H66666666666@n@66666Cn@6GH$ IXHHWI2'8887%98"!n#""""G#"!UU#""ÿ""""""""!1²3#!1B""""""8HnnH8HnHG98666666666664J@11Y8HH HH8W666666666664&n)ng66G'9W$$$$I7@@9WI'2G6666@I!@B±288888887 @ "" "G666666666H111I66666666666d3@cÿC1H1nn1H666666666"!hn@nh#"G'9HHWò$H$BHI'@H6YXXXWI""""!nó33111H1114Dfn F U#!G 1n1 GB@7666666666H111I66666666666IHH@HHG266666666""C))""G'H  $ò)HI@f IGI1n"""!4HYXXXW#"!Fe#""!GC Bng@73ÿ3HX!666666666H111I6666666666@1@H1nn1HC66666666@@CG\HHWH@$$$H@HI@H988872IPn7;H9G @FD! G² 1n1#""""G9   666666666HI666666666C@9HH@HH76666666C#! #!hGH9WYW@$aY7I!%"""G2I1nG´IG@#"0C!GYWUUUU9G111FDT#"!T#W666666HcI6666666661C@6666666888HHHX729HHHH88888G±H9HHHHHH888HnnH7I2@XXXXXXXó33GbI7 aFG@IG´IHHHHT TG6a'666IXW¶I666666666YWC#2C0666666G00IG2H11  IG°IW2222Y888"""!888ó!#2G1IG0C T#"07IG IG@cFDTMT7666'6IGI666666666I8HH@1@666666G01IGHcHBYHHHWIGIXXWCHTTTHCYXXG2I887-98888873c3988888XXXXXG2n@ðb4D=IG555H4IGY!1666666666I7±I666666666HPYW@A0!66666668HHHHH87339H7HaH IXXXG'IXXXG'IG2&I7@22@@92G2Hc3#"!UUcñ#!#WUIGDA0H°IWðñY'''666666666IG)I666666666IXH1IXW2 36666666G4 D±)nI''G2HYHnnHHHnnHXXXHnnHWH33±G´H@55n"7597D9HGHD1h#W666666'69G¶I666666666IG1IXW01C @6666666GdYXXWYXW33YXWH0H IC2CWH7Y766666666697@@9WHnGCn)@66°nD@IWUY7HHHHH88HHXWcCHI6666666669GH888887C6Q66666XGIG@I@HHH7I2G4JH661666H Hn1nd 4JTGC "!UUB66' nnnIG5HFDB hIGh=)I66666666661Q6666C 66666666GIGðñIA I#""""!XXWnH6g6616)TTnnW#!Y''D666#"n@n1nIGQFD IG²CHHX6666666666!M6666HH@66666666888798WY ±I#H!GH6616666H Hn2±338G@I!S'D!6#UnnYXG1HHHnnnnHH%HG666666I6666666666666666H1H@ @666666687D@2IX""" HHW@@@87IW666666666YW@@Y7'H!#G²IG  @ITT""!6cFn@1@IG11FD11@@IG666666I6666666666666666H BH21#f@6666667@)DQQ98@0 HHAn@@@666IHnnHHHnnH8HnnH7'HG²IXHXXX!TT6#!2#"!YXGRYXXW0198HW6666I6666666666666666666HHaHCh4C6666666GfD2ÿ±3 0HHn1I76666666669G0'I!''''#G49888887hI888! # n@IGTTTI8733#"n±CH6666I66666666666666666H@H1n;06666666W)@DQQ@YX"!@#"!@09HH1#"XWTH66±±±66H0YXXXXW\98"""G666C666 H1I! @#"2XXXG¶P¶IG1nAn6666I6666666666661C 6H0HH#1V66666666XWD@2I&!#"""0H#!#GH66±66HnIG4''''I8HH66C6CH5559G 0 ImUUGCCIG0#"""!Cn6666I666666666661 H66666666XXXWYX4!#3#GT9W66666666Y70IXHHHH%98766HUH´0 H555H@F D2RXXXXW°22H6666I66666666666°±21C666666666R@22GT9HnnHHnnH70IG6666@I3F`D3±FD22G²$CIW6HH66666666666±±C666666666±!#"""""""WTTTTTTY´H6YXXXWIW6H5H6 HUUUH@0#"""""""!VXW2±I46j6666666661 H6666666666"""!H#"""XXXXXXXXXXXXX ³4ZIGIXXW66C6666HUUUYG  I"""VG$YXXb6666666666661 6H2@6666666666!22#!ÿðñ#´H988872IG666666CH0I"""""!PXXXXXXXh66666666666666C666H2C66666666666!²#"""""""""""""""""G2IXXXXXXXXXX""""""6666666666666666666H3@ðñ66666666666"XXXXXXX""""!6666666666666666666666666666688888666666666666666666666666666666666666666666666Gðñ98888888888888888880BG 0066666666666666666666666666666666666666666666666GÿIG@H@@H HIfG1n A4dj000¿00066666666666666666666666666666666666666666666666WBjIGjjnjIH11nn± !0#@G´»»´I66666666666666666662666666666666666666666666j66GIGH@@H@H±±IS``HnnH ±VHH1HG´»´´³´´»´I66666666666666666666666666666666666666666666666GjYH88HHHHHHH1)=TTTa#"""@@@666VB G´´´´´´I666666666666666666QQ666666666666666666666666666GHH@ HH@H±±IHHH´HnnH"HHW@n666nHHH@H1#""""!'XH´HHnnnHH´HX6666666666666666666666666666666666666#"""""""""HHH7jnjj jnj1jI±)TTT22jHn6j6n@11'G±±»@BB@»±±I666666666666666666666666666666j666666G0H HHHI!@#TTT2B2HH7n666nHHHHl@' G²±@@»@@±²I666666j66666666666Q2Q6666666666666666622IXH8HHH8HHH²³ #!#'')66611@1"""!HHnnHHHHnnHH6666666666666666666666666666666666666I@"""  ''#666!±#@ D0000´´´0000F66666666666666666''6666666666666666!jnj`jn''°'''IHH #66666666n\#n `jD0000´´0000F66666666666666666'ÿ '6666666666666666j'I0 @666C66666)4)´±0HUUUUHWYHUUUUH66666666666666666'ehC'6666666666666666HHHCHHH'I ±066C666666nT#' ´´31VgV°&ÿ¶¶¶HH¶¶¶66666666666666666''6666666666666666'IH1#666666666666666nTT'' "!ðµ9HUH7¸6666666666666666666666666666666666666jn'' ''IÿH11±666666666666666666nVT'V±"+""ñ""!00a00#"""""""""""""""""""""""""""""""""""""""""TT'IHj!6j666666666666666´´±G33IX+X"""""""""""""8TeTTdTHHHCHHH'HHHHHH""!!3V6666666666C66666C#U87j98@0 @GBI888888888888'I!1@nC666666YHHHWC66663C666666QQ3b@3 333C0CG4IG0IG66 Ijjj`jn'jI11VQVn6666CYH73P39HW66C36666666nn±@ 0 HH88887;IGUU 9888766±9I1@n666HH7339HH36666j666n±j±nHH!P#!31H7Ib4D27±F )D =·ng±jI"11!V66CnnRn1n666666666QQH`H" 0#!HH'YXX""!B 55YWYW66±Y±FPPD±±$$nj¶""!1!´#33Cn`nn`n6666666663"@H`H3 DC'C#W'988$#WIGIG6611I0)FD)$SHnnnnnHnH¶6C3n1nn1nC66666666666669H70@#"!"!UUU#GI±2W1YXGIXXXXXXQ55Qn4@njn66Cn1nnn666C66C6666666µ±"75559XXW1'I$#""B7988888883QQ31n@1nn1±666666C666YHHQcQHHW66666666666666331TTGC666C98887'9$2G066666IGaIc@1HnnnHn1n16266666666H4ZTTjHC63C3666666C66XW4YX333G66b66FD° 33Q27nnn66973 I))¶¶1nnn162666666CH¶YHHHnHYXHG3CC33CC3666666G33IaG666FDc@Y!3a30>??????????????????????? € p  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@/Ó,ù%` ‘'"b`0 ù%` ‘'"b`0    €   € €   €   € €9'ƒP(0' & à à à€ à à à à à€ à € à à à€ à à à à à à  à€ à à à €9'ƒ ƒY(ƒ ƒ9'ƒ!& ƒ9'ƒ ƒ ƒ ƒY(ƒ ƒ9'ƒ)&ƒ9'ƒ ƒþ%` ‘,"b`0 þ%` ‘,"b`0 >'ƒƒ^(ƒƒ>'ƒ!&ƒ>'ƒƒƒƒ^(ƒƒ>'ƒ.&ƒ>'ƒƒcccccccccccccccc       `       `   `         `             `  a aa a  `  `  `  `  `   `  `  `C cC cC cC cC cC cC cC c a a a a  €  €  €  €  €  €  €  €  €  €  €  €  €  €  €  € FFF FFF FFF F F FF FFF FFF FFF F F FF  €  €  €  €  €  €  €  €  €  €  €  €  €  €àÀ  À   €   € FFF FFF FFF F F FF FFF FFF FFF F F FF F FFF F FF F FF F FFF F FF F FF F FFF F FF F FF F FFF F FFFF FF FFF FF FFF FF FF Ff FFF FF FFF FF FFF FF FF FF F C C C C C C CC C C C C C C CC C C C C C C CC C C C C C C CCCCCCCCC CCCCCCCC CCCCCCCC CCCCCCCC CŸF f fF f fF f fFfff F'"" ` ` ` ` ` `›Fff Fff Fff FfF F F '" "fff fff fff ffffffffff fff fff fffffffCCC CCC CCC CCCCCCCCCC CCC CCC CCCCCCC@@@@€@@@€@@€@@@€ BbbbB B b b bb B % % % %% % % % % % %% % % `  `  `  `  `  `  `  ` àààààààààààààààà%%%% %%%%%%% %%%Ghƒƒƒ ƒƒƒƒ ƒFFFFF FF F F F F FFFFFF FF F F F F F@`@`@`@`@`@`@`@`CCCCC CC C C C C CCCCCC CC C C C C C&F&F&F&F&&F&F&F&F&F&&F&F&F&F&F&&F&F&F&F&FF&& &aaaaa aa a a a a aaaaaa aa a a a a aCcccccccccccccccCccccccccccccccc'''''''''''''''''''''''''''''G''''''''G'                                àààààààààààààààààààààààààààààààà=)b=*b=(b='b8'b8(b8)b8*b8(b8'b ' ' ' ' ' ' ' ' 'G ' ' ' ' ' ' ' ' 'G ' ' ' ' ' ' ' ' ' G ' ' ' ' ' ' ' ' GG='b=(b.–00QQqQ†pPìHH¢È¢È¢LÒH¢ÌÒÈ¢ÀâÎCPDŽDDÎTŽDÎTDÎÖ…Ö…Ö•Ö•Ú–Ú–Ö•Ö•Ú†Ú†€\ç\ç\÷\÷\÷…\÷…\÷‰\÷‰\÷…\÷… 'g gigididigi¢gi¢didi⩺©º¬ú­ú©º©º®º.°¬ú­úöñ ò 1m2m1mã2mç1 à2 ä:mó;mß: ð; ÜL08$$‰umʲªªÿDDÿÆ@8i$YHÂe‘ÿ4ÿÎÿÿÿA 0!#0!#0!#111!""""1111""""2222111""""""â23à""îááîîáîîáîîîîáááááááá""âÒ-à""î1111ÿÿ"þ"""âò/à""îñTaõDVôTðgõDðVôTðgõDUefUvvefwUvvefw0!#0!#0!#0!#""""211!#211!#211!#""""2222îàá!#!#!#!#!""2222îîàá!#!"!-!-!""ÒÒ"2î0!#0ÿ0ïÿ0!#2ÿðþÿ2îàá!#!"!/!/!"ðVôTðgõDðVôTðgõDðVôTðgõDðVôTðgõDUvvefwUvvefwUvvefwUvvefw!º«ƒ®ê8  ‘  ¨Š‘1)’1""""#111!#0!#0!#""""1111""""2111222©ªªšŠˆˆ©Š™™«Šªª«Š¥ª«Šff«š»»«©ªªšî ""03#.""˜‰¨‰‘ˆˆ‘Ÿùˆˆ¨Š" ?"2#b%Qr&aqî ""0Ò-."""ïð"1ÿÿ1î ""0ò/.""ðVôTðgõDðVôTðgõDðVôTðgõDðVôTðgõDUvvefwUvvefwUvvefwUvvefw"ðÿÿðÓ<ðÝÝðÜÌðÓ<033¡±±A"2!qÜÍÁíÞ¬žéÊœªªÉܰ ÍÁ©š‘PAQAQ@ñÑÁÁ""""233#""""UewgEegUewgffffwgUegEewgUeffff0¡£0¡£0¡£111¡ªªªª1111ªªªª::::111ªªªª  ¡11:£ªªªª !112#"""":ªª::ªª"òò"2îðVôTðgõDðVôTgõDQôTñDUvvefwUvvefwUveàêê ÐÜÜ ÐÜÜ ÐÜÜ ePegUf``w» 0³»»Ó¬ªª"¢©©"¢©© ªª1AA112"!!"!#!#!#!#!#!#!""222222"0¡£0¡£0¡£0¡£ªªªª:11¡£:11¡£:11¡£ªªªª::::0!""0!#0!#""#2""22""""â²+à""ªªšªªªªˆˆˆª˜™™ª˜™™ª¨ªªªHªªªX¥ªªªªšªªª©ˆˆ˜ª™™¹ª™™¹ªªªºªªªºªªªºªÑÑÑáÑ᪭ڪÊÜͬªªªª™™™™ÁÁÁÝÜÎ " " "1¢*!š™Â,¡ªªšÉ2Â!#š""gvqWva÷aeVqvgwwpPEeP_UPTUPUU`Uefv""""233#""""¡šª¡©»‘ˆ¨˜‰€ˆ‘™‰ªªªª£111¡£0¡£0¡£ªªªª1111ªªªª:111:::0¡ªª0¡£0¡£ªª£""""!112# ªªªª¡11:£  îàá!#!"!+!+!"ªhªªª¨ªªªHJªªXZZª¨¦jª¹»»šªªª©ªªªªªºªªªºª¤ª´ªUZºªjª¶ª»»»ªªªª©ªªªš@tpTpUWufgWU`e "ÿßÿÿÝ<#Ã#?"2?333330333333!"""vv"!wf"fv"!wv1"" »»©ªªš˜ú®‰ˆ™™ˆ˜ˆˆ‰™™ ªª #0#!3" š š˜ª™ˆ ðòÿ_??3?## ªªªªÊ̈ˆÊˆÌˆÊ̈ˆªªªª™™™™‰ˆˆˆ™™™™ªªªªˆˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™"²²"2îî ""0²+.""  3"     0#!  3š ’ ©ª""©ª"#™ª+3©ªº»©ªªª©ª*"©ª""©ª"#""""3#333333»»»»ªªªª""ªª3#¢*#3¢*""""3###33#³»»»«ªªªª"""¢"22"#33#ªš#!ªš#!ªš#!ªš#!ª™#!ª™#!ªš#!ªš#!!gwg!b&f!R&R!R&R!R%#!R2#!R"3wrvr&"&"2"%#23"322"#"23#233"vwv'fbe"ebU2%R%2%"%32"%2#"%#ww'rv"bf""e"#%#35#2##ÀÜÀí2 ÌÌÍÝ îÍÞ 3ÀÀÜÀí2ÌÌ ÜÌÍÜÝ íÞ îÍÞ 3ÀÜÀíÀí2 ÌÌ ÜÝ íÍ3 š š    3"       *  š  ©ª23©ª32™ª33©ª33©ª33™ª;3™ªº»©ªªª33£:33«º3³ªª3«*¢³ª""«*2"ª232*333#3##3333;333º333ª;33¢º3³#ª»«#¢ªªªš#!ªš#!ªš#!ªš#!ª™#!ªš#!ªš#!ª™#!!b22!#33!#3#!#23!###!3"3!###!33323#""#3#2332"2#2#3#3"2#2332"2"###2#32"33"333"3"#22"#22"#"3"2"2#322####2"#"2"#"#3##23#23#!"!"!3#!!!2!"!"!3#!!!2!"!"!3#!!!2DD@DED@TTT@TeU@TdU@deU`TUeff»» °«º»°«««°«ºª°«›ª°›©ª«ªš™™ ©ªªª©ªª*©ªª2©ª*2©ª"3©ª23™ª23©ª33"33323332333233333333333#33333333"ªª32¢ª32#ª23#¢333"333#33##3333ªš#!ªš#!ª™#!ª™#!ªš#!ªš#!ªš#!ªš#!!2#"!#33!332!#33!3##!332!###!##"23#2"332222"#"#222"32#""323322""32"#2#"""#2##3"23#33222"33223#2#3##"2"3"#33#3###3#32"23#ÝÐíÐààÐàÐÐîî àÝ àÞ à àà îî ÐîàþàððàðààÿÿðîðïðððÿÿàÌÀÜ ÀÐÐÀÐ À ÀÝÝ ÐÌ ÐÍ Ð ÐÐ ÝÝ À330##30###032"0#"0"#"330##30###03"03"0!"#"©ª;3©ªº»©ªªª©ª*"©ª"2©ª"3™ª23™™""3333»»»»ªªªª"""""#33#3333333"#22333³»»»«ªªªª"""¢#3""#3##33##"#""ªš#!ªš#!ªš#!ªš#!ªš#!ª™#!ª™#!™™#!!#"#!###!##"!##"!"#"!""""2#33#"##"##"##3###2""""233#""3233"#33"223"2""""32"32#23#"#"3"""""ªªÚêÊ̈Ýʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™®­ªªÝˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªêúÊ̈îʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™¯®ªªîˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªÊÚÊ̈Ìʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™­¬ªªÌˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™!EeôTôTEe!3333"!"""!!!""!!!""""#!1##32"" àÞ3#»«°»ª  ª™  ˆˆ ˜™‰ˆ288""°« °»š°«™°»š°ª™¸«™¨š™111"©)#˜3" ""ÍÍ "" !#BTPe##qr22"Ã1â2""EeEeEeEeEeEeEeEe»»»»©ªªª©îªêª©ª®ª©êªª©îªªªº« «º Êš©¬Ú®ê­©‹¸š€º«ˆˆ º«0333#"#!333333ÿÿÿÿ3ó33"ó#"ó#ó#!!!!! !""#ˆˆ2©š˜ªª‰ø™™ø¯ú€©š‚!("!"@DDD@TUD@DTT@DEU@TTU@dfU@TUU`fff°»»»°««»°«««°»ºª°«›ª°›šª°«ªª™™™033303230###0#"0#"0"0#""033303"30#3#032"03"0!"0#""03330333032#0#"0"!03""0#""033303330""!0#"03!"03""0#""033303#303"#0#"03"03"0#""233!#0"#232!#!3!#!#!2"33ˆ!#ˆ™1‚™©"˜©ª™ª»‘©º»ˆˆˆ˜™™™™ªª©ªª»ª»»»»»»»»»»»»»»»ˆˆ™™‰ˆªª™™»ªªš»»»ª»»»»»»»»»»»»3ˆ3!™ˆ2š™(ªš‰"»ª™»«š#3#3222"#!3#23"2Šº™˜°   € °   3#33"#""#""#""#""#""#""#"3333""""""""""""""""""""""""""""3333""""""""""""""""ÿ"ò/ÿ"ÿ/"òÿ"3333"!""!"!!"!""!"""""3333"!"""""""""""""""""03330#330#2#0#"0#!"0""0#"""!3!#€€"""‚333ƒ"""‚˜ªªª™ªªª™™™©‰ˆˆ˜‰33ƒ™øÿ?™ˆÿÿ™øÿÿ»»»»ªº»»ªªª»™©ªºˆ˜™ª3ƒˆ©ÿ?3˜ÿÿÿ“»»»»»»«ª»ªªª«ªš™ª™‰ˆšˆ83‰3óÿ9ÿÿÿªªª‰ªªª™š™™™‰ˆˆ˜833˜óÿ™ÿÿˆ™ÿÿ™("""8333("""!"32šª ©»  ©» ˆ¨€˜‰ €€™‰"#""#""#""#""#""#""#""""""""""""""""""""""""""""""ÿ/"òÿ"ÿò/"ÿ""""""""""""""""QQQAQAª¥ZªÊ\Ŭªªªª™™™™2"2222222€‰ÿÿÿ™ˆÿÿ˜™ˆˆ˜ˆ™™€‰ˆˆ€™™™€‰ˆ˜˜ˆˆÿÿŸºÿÿ©ºˆ˜š¨™˜‰¨ˆ¨‰«‰©ºª‰™ªª‰™™™«ùÿÿ«šÿÿŠ©‰ˆŠ˜‰™º˜Šˆª«š˜ªª™˜™™™˜ÿÿÿ˜ÿÿˆ™ˆˆ™‰™™ˆ‰ˆˆ˜™™™‰ˆ˜ˆˆ‰"#!#!#!#!#!#!#!#"!"!AQþaíÿaÜaqáîîáááááááîîîîîîáîîîîáîîááîîááîîîîîîáîîááîîááîîîîîîáááááîîááîîîîáîîááîîááîîîîîî22222222!22222!™ˆ2˜‰3"™#˜"˜€˜‘™™˜"3˜"3˜‚8™(ƒ™"3ˆ"3€ˆ™™™™‰3"‰3"‰ƒ(‰8‚™3"™3"‘ˆ™™ˆˆ™˜‰!#™"3‰!2‰"!!!#####!#!#!#!#!#!#!#!#:#š)ª‰Bÿ‰gwgªš(f™©š™ˆ˜©ªˆ˜™!qˆ!bwrvr&"&"™(%#ª™™™™ªªªˆ™™™ˆˆˆvwv'fbe"ebU˜™™™©ªªªª™™©ªˆˆ™š˜™w˜©ª™©š™ªš‰ˆš‰™ˆ‰"ˆ!"!!!!2222!!!!2222!gwg!b&f!R&R!R&R!R%#!R2#!R"3ww'rv"bf""e"#%#35#2##!!!!2222!!!!2222©ª""©ª"#™ª+3©ªº»©ªªª©ªzw©ªgf©ªVV""""3#333333»»»»ªªªªwwªªff§zVf¦j""""3###33#³»»»«ªªªªwww§fffvfeeeªš#!ªš#!ªš#!ªš#!ª™#!ª™#!ªš#!ªš#!!222€€ÌÈÜŒØÀÝÜ€í܈ÌíˆÜÝî €ÎÀ ÞˆÜ ßÜÍßìïÍŒáÞÝŒ!b""!##"™‰3#ªš‰3™©š™ˆ™™ªˆˆ™!ˆ"""""""""2#2™™™™ªªªª™ˆˆ˜ˆ©š"’ªš"˜ªš#©ºª™ª»ªªª»«©º»«˜º»«ˆ"""#(‚™™™©ªªªªš™š™‰ˆ™ˆˆ‰ˆ!!!!2222!!!!2222!b22!#33!#3#!#23!###!3"3!###!33322####2"#"2"#"#3##23#23#!!!!2222!!!!2222©ªEE©ªEE™ªEE©ªVV©ªgf™ª{w™ªº»©ªªªEe§zUv«ºe·ªªv«*¢·ª""«*2"ª232*333VTTTgUTT{VTTºgeeª{fv¢ºw·#ª»«#¢ªªªš#!ªš#!ªš#!ªš#!ª™#!ªš#!ªš#!ª™#!2!3!3!3!32?°2#°2#!!!!«ªÝîÿȈÜ܈ŒÜ€ˆ<ˆ2!3!3!3øïތ݌ŒŒŒŒˆ‚!!!!"!#""!3""!#33!3#ƒ!33’!##˜!#‚©"""""‚"2‚™#˜™ª™©ªªª™™™šˆˆˆ‰˜º»š™º»™º»«™ªªºš™©ª›ˆ˜©ªˆ™ª!˜ªˆˆ!"""!"#"##(3#92"‰3#!!!!2222!!!!2222!2#"!#33!332!#33!3##!332!###!##"3##"2"3"#33#3###3#32"23#!!!!2222!!!!2222©ªªª©ªª*©ªª2©ª*2©ª"3©ª23™ª23©ª33"33323332333233333333333#33333333"ªª32¢ª32#ª23#¢333"333#33##3333ªš#!ªš#!ª™#!ª™#!ªš#!ªš#!ªš#!ªš#!# ## #020!"0!‚™š!˜©™™©™‰ª™‰ˆ™ˆˆˆ‰!""‰"""""#!"#3"##2!""""‚˜ª"‚˜ª3˜ª3"©š2‚ªš‚©š‰˜ª‰ˆˆ‰ˆ™8"ª™(ªª™™™ªªªˆ™™™ˆˆˆˆ!!!!2222!!!!2222!#"#!###!##"!##"!"#"!"""32"32#23#"#"3"""""!!!!2222!!!!2222©ª;3©ªº»©ªªª©ª*"©ª"2©ª"3™ª23™™""3333»»»»ªªªª"""""#33#3333333"#22333³»»»«ªªªª"""¢#3""#3##33##"#""ªš#!ªš#!ªš#!ªš#!ªš#!ª™#!ª™#!™™#! 33"0"#0# !#!#!#3""3"2#!!#!#!#23!3"1"#102 122"22"23""3"2"!"1"2"2"š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘 š© ‰™š#š 9¨š ™˜© ‰¨ž ©‰˜ ˆˆ‰ª#™š‰’‰ˆ˜艚š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘!gwg!b&f!R&R!R&R!R%#!R2#!R"3wrvr&"&"2"%#23"322"#"23#233"vwv'fbe"ebU2%R%2%"%32"%2#"%#ww'rv"bf""e"#%#35#2##!gwg!b&f!R&R!R&R!R%#!R2#!R"3wrvr&"&"2"%#23"322"#"23#233"vwv'fbe"ebU2%R%2%"%32"%2#"%#ww'rv"bf""e"#%#35#2##€‰ˆªˆ‰Š‰Â‰*‰ ˆ™ˆš˜ˆš,˜ˆ“     £*0™ˆª€‰‰Šˆ‰Â™*š š0ª#™ˆš˜ˆˆ,˜“ ‚ €‰¨ªˆ©ˆ©Ì)̪"šª0ª#™‰šˆ‰šÌ™ˆÌ’ 3© ™  £*0€‰ˆªˆ‰Â‰ª‰‰ˆ™ˆš#ˆšɘˆ     £*0!b22!#33!#3#!#23!###!3"3!###!3332333!"""!!ÑÝ!ÑÝ!ÁÌ!ÁÌ!23#333#"""""""""º*"©)""""22####2"#"2"#"#3##23#23#!b22!#33!#3#!#23!###!3"3!###!3332333!"""!!!!!!23#333#""""""""""""""""22####2"#"2"#"#3##23#23#V»©˜™€93“ˆ€333#" ‰™‰8#3#"ˆV»©˜™€93“ˆ€333#" ‰™‰8#3#"ˆ 0ˆ #‚È2#Ü!ÜÁÝ€ÈÜd€Ìªuˆ Œ(2Í2#Í!ÝFÍŒWªÌ ˆ1‰™!‘š‘ʨªì€©™šºÛˆ ™˜©¬ÁªŠÑ™š½«© !2#"!#33!332!#33!3##!332!###!##"!!!!!!23#!"""""""""""""""""""3##"2"3"#33#3###3#32"23#!2#"!#33!332!#33!3##!332!###!##"!!QU!QU!af!af!23#!""""""""º*"©)""""""""3##"2"3"#33#3###3#32"23#"rg€™€‰ˆ€ppPv‰™‰‰"rg€™‰€‰€‰wvUv‰‰€©ªš€91š˜1˜:€©ˆÌˆ©ªš©“1‰£‰1š̈ˆ©šª›¨©Ãš˜(-<ÊÓÓ€‰,#ˆ™ˆ¹ª©š©<ššÃÒ‚‰==¬‰2˜™ˆˆ!#"#!###!##"!##"!"#"!""""2#33#"##"##"##3###2""""233#""3233"#33"223"2""""32"32#23#"#"3"""""!#"#!###!##"!##"!"#"!""""2#33#"##"##"##3###2""""233#""3233"#33"223"2""""32"32#23#"#"3"""""ÀíÞ Ûþï½ê»»®¬¹›Ê­®êÚš©Ù¬ˆˆÊк« ÜÍËíÞ¼Ú»»­¬¹›Ê­­ÚÚœš©É¬ˆˆÊÀº« ËíÞ¼Ú»»­°º«Ë¬¯úÊš©Ù­‚(Ú¬(‚Êк« ™™‘ª™‘»»«º«ºû¸‹¿±»»¡›¹º«™™‘ª™‘»««º»»û¸û¸±»»¡›¹º«™™‘ª™‘º»»»«º‹¿‹¿±»»¡›¹º«™™‘™™‘ª™«»»º»º«»ñ¸‹±»»¡û¿@pFgõVô@ôÿveTÿD@tf÷UVOVô@võ_TÈŒ€ÜÍÈíÞŒÜþïÍÜþïÍÈíÞŒ€ÜÍÈŒVTVTgegegvpVe`ET`ETpVegvT@TVDU`Pv  ™ €˜€Ž™“ ªšˆª™™©9’©ª0™ ‰è9©ˆ©š™ªª"‘  ™ €˜€Ž¡š“ª™ˆ "ª0™ ‰è˜9©ª ˆ™™ªªš)“™™‘™™‘ª™«»»º»º«»ñ¸‹±ÿÿ¡û¿™™‘ª™‘»»«º«ºÛ¾ë½±»»¡›¹º«™™‘ª™‘»»û¿û¿û¸‹¿ñ¿û±‹¸¡‹¸‰˜ˆ˜̈˼̻»¼¼»¡¹¬±¼¼¡¬¸VôgõpF@TevVO÷Utf@_õv@ÐÀ TVTVegeg"ó 3=2" #232"!þ !/ 3ÿ!3#!?22"2ªª2ª"2*32"2™!˜ˆƒƒ"3’™3"‰"‘‘‰80ˆ™)3"˜!"3€!"!€ƒ˜0ˆªª!#"ª!#3¢!#"‘!#™!#‘‰€ˆ088»»º°ª««Üª©í¯ÿ™»›?™‰»«»ºª ªÍ¹ÿùÞ9óº«2ó˜™"3»»º°ª«ÿ›Üª?“íŸ?#º«3"™Š»«»ºª ªÍºúÞš¹»™ÿ¨™1ó"!238"""!!ƒ3(!3""!!!#0"#""#šššššš‰‰‰ "  !"!""!2ÿ!3#"òó33"!"!"!"!ÿ#"2333?/º »0¢¨ Š3©)3" 23 !" «¨2"9“ 2# 3 "¡  º#Š"¡9“ 2# !3 "«» Š*¨!š3 "3’3# " ?#!33"!2?2#"’˜©Š™ 33ó"#!2"!" ) š ™‰‰?3‰#2’"!"’© ™ €˜€˜˜2ó)"3#!ó 2€"‰)¨š ™  !333#"00""03232"!"! UfPTUVUfg#qpww711'""27112"2?# óÿ ãã23!"22""22!=222ü22!322""1#ó!!#3!"""##Ó##Ï###3##"##?2"32"!"#2ó#1ÿ?1>>!3#"© À Œ  ™™ ‰ˆ™ À€˜ˆ€  šÈ €  ™  ª3 ª™# ™ˆ‚ˆ#"""˜‰2ÀÐì ÀýÍíá 2!#!2#!ð!/ðñ"2ó23232!2/#0  0 ðððð0  ÁªÙž‘Ï€™ªª ©ššØ‰šÈØÊ!ÞŸ‰ªª1#Ù11È1# ÁªÙž‘Ï€™ ªªš©ššØ‰ ‰ÀØÊ!ÞŸ‰ªª1#Ù11È1#!#!2#!!#" ™‘º©™©»ªºº€©© 2#!!#" ™‘º©™©»ªºº€©© ˜™ `E»»V°««k «šjª«y™šx#ñðDTvDDeEDeUUfffvwww 0  0 ðð00 ðð ‰0È ‰0’33"3!˜ "©ª ™ˆ ‰0È0’3"˜ "©ª ª š™wwVpVUgõTWEUpvÿgpuwgwewUeUUvUUuvÿgvwWˆˆ©€©ª˜ú«¨ºª€©™ª€šˆ©ˆšˆªšªª‰ªªŠª™ššˆ© "  !"!"˜˜ª©ª™š™»"!"!"!‰!ª‰™ªš»™© 030"2"! !!!2223#""#!!##peffpVevWewgewpVfwVwffVgVewVuwVvfeeww€šè˜€©™™¨š›˜Šˆ€©»ˆ©ˆ‰Ž©™™š¹©Šˆ¨‰»ššˆˆ€¹»ª «ª™š™»€¹»ª «ª™š™»€¹»ª «ª™ª»›™ªº »™© ª»›™ªº »™© ª»›™ªº "ƒ!2!!2!!!!!!!ƒ!!2!!28"##!8##Oq%úCàÀPªCpúCàÀPªCp € € € € € € € € && && ` ` ` ` ` ` ` ` & & & && & & & && & & & && & & & &&ÿCàÀP¯CpÿCàÀP¯Cp&&&& &&&&& &&&&& &&&&& &HHHHHHHHHHHHHHHHHHHHEEEEEEEEEEEEEEEEEEEE E E E E E E E E E E E E E E E E E E E E eee…ee eee e ee…eøeP õ†††f††¦ †† † †† ††¦¦†††† †† † ††¦¦¦¦¦¦¦¦†¦ ††† †¦† †¦¦¦¦† † †† †ffffffff ` `@@@€€€ ` ` `@@@ ` `@@@` ``` ``` ``ffff† † † †† † †† ††††f fff f†f f†f f†f ff ff fff f†f f†f f† f f fCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C f† † f† † f† † f†† f††† f† † f† † f† † f†† f††† f f f fffffffFFFF F F F F F F ` ` ` ` ` ` ` ` ` `I I  IIII  IIII I I I I I I I I I I ‰ ‰  ‰ ‰ ‰ ‰  ‰  ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰ ‰iiiiiiiiiiiiiiiiiiii````````````````````@@@@@@@@@@@@@@@@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ 'GG 'GG 'GG ' '' G G' G G' G GG'££££££££££££££££e&e$&ed(eCC # #CC # # £ £ £ £ £ £ £ £ £ £ £ £ £ £ £ £ C CC# C CC#J JjjjJ Jjj jt,dddddddddddddddd e e e e e e e e e e e e… ee e e e e e e e e e…………… … ……JJj j jJJj jjw,dddddddddddddddd eeee eeee eeee…e ee eeee eeee … …… … …… … …Nc0QQqQ01QQqQ†pQHHBˆBHBHB,HB04HB8ˆB>!3#"© À Œ  ™™ ‰ˆ™ À€˜ˆ€  šÈ €  ™  ª3 ª™# ™ˆ‚ˆ#"""˜‰2ÀÐì ÀýÍíá 2!#!2#!ð!/ðñ"2ó23232!2/#0  0 ðððð0  ÁªÙž‘Ï€™ªª ©ššØ‰šÈØÊ!ÞŸ‰ªª1#Ù11È1# ÁªÙž‘Ï€™ ªªš©ššØ‰ ‰ÀØÊ!ÞŸ‰ªª1#Ù11È1#!#!2#!!#" ™‘º©™©»ªºº€©© 2#!!#" ™‘º©™©»ªºº€©© ˜™ `E»»V°««k «šjª«y™šx#ñðDTvDDeEDeUUfffvwww 0  0 ðð00 ðð ‰0È ‰0’33"3!˜ "©ª ™ˆ ‰0È0’3"˜ "©ª ª š™wwVpVUgõTWEUpvÿgpuwgwewUeUUvUUuvÿgvwWˆˆ©€©ª˜ú«¨ºª€©™ª€šˆ©ˆšˆªšªª‰ªªŠª™ššˆ© "  !"!"˜˜ª©ª™š™»"!"!"!‰!ª‰™ªš»™© 030"2"! !!!2223#""#!!##peffpVevWewgewpVfwVwffVgVewVuwVvfeeww€šè˜€©™™¨š›˜Šˆ€©»ˆ©ˆ‰Ž©™™š¹©Šˆ¨‰»ššˆˆ€¹»ª «ª™š™»€¹»ª «ª™š™»€¹»ª «ª™ª»›™ªº »™© ª»›™ªº »™© ª»›™ªº "ƒ!2!!2!!!!!!!ƒ!!2!!28"##!8##Œ0 444mmmÿªªÂ>!3#"© À Œ  ™™ ‰ˆ™ À€˜ˆ€  šÈ €  ™  ª3 ª™# ™ˆ‚ˆ#"""˜‰2ÀÐì ÀýÍíá 2!#!2#!ð!/ðñ"2ó23232!2/#0  0 ðððð0  ÁªÙž‘Ï€™ªª ©ššØ‰šÈØÊ!ÞŸ‰ªª1#Ù11È1# ÁªÙž‘Ï€™ ªªš©ššØ‰ ‰ÀØÊ!ÞŸ‰ªª1#Ù11È1#!#!2#!!#" ™‘º©™©»ªºº€©© 2#!!#" ™‘º©™©»ªºº€©© ˜™ `E»»V°««k «šjª«y™šx#ñðDTvDDeEDeUUfffvwww 0  0 ðð00 ðð ‰0È ‰0’33"3!˜ "©ª ™ˆ ‰0È0’3"˜ "©ª ª š™wwVpVUgõTWEUpvÿgpuwgwewUeUUvUUuvÿgvwWˆˆ©€©ª˜ú«¨ºª€©™ª€šˆ©ˆšˆªšªª‰ªªŠª™ššˆ© "  !"!"˜˜ª©ª™š™»"!"!"!‰!ª‰™ªš»™© 030"2"! !!!2223#""#!!##peffpVevWewgewpVfwVwffVgVewVuwVvfeeww€šè˜€©™™¨š›˜Šˆ€©»ˆ©ˆ‰Ž©™™š¹©Šˆ¨‰»ššˆˆ€¹»ª «ª™š™»€¹»ª «ª™š™»€¹»ª «ª™ª»›™ªº »™© ª»›™ªº »™© ª»›™ªº "ƒ!2!!2!!!!!!!ƒ!!2!!28"##!8##¬0 ,,,qmiª®ªÚÚú‰²ÿHPÎ,‰8i$YHÂe‘ÿ4ÿÎÿÿÿ¡ 0ac0ac0ac111affff1111ffff6666111ffff1Á1Ã<ÁJ¤¡1¡Á""""23>.""""ááîîáîîáîîîîáááááááá""""2c6#""""!‘!R&‘i—©š©šc6‘‘‘¡¡ªª£®ê:#ªª2""111111ÿÿfþf±±»»³¶k;#»»2""11""""2ó?#""""!!!"! !2""#"0"!"!!0ac0ac0ac0acffff611ac611ac611acffff6666!"!.!#!.!#!#!#!""222â2â"!"!#!#!&!&!#!#!""22bb22"0ac0ÿ0ïÿ0ac6ÿðþÿ6!"!#!#!/!/!#!#!"""0#ð3"0/#032ð#"032""!"!""!!º«ƒ®ê8  ‘  ¨Š‘1)’1ffffc111ac0ac0acffff1111ffff611166VUUeuwwVuffTu¥ZTu¥ZTuUUTeDDTVUUe""""âã3#""""˜‰¨‰‘ˆˆ‘Ÿùˆˆ¨Š" ?"2#b%Qr&aq""""2c6#""""!‘ˆˆ1‰˜!©š©š#©š##©š#"˜‰"fïðf1ÿÿ1""""2ó?#""""0#"0220## 320##02" """""!"""!"""!"""ðÿÿðÓ<ðÝÝðÜÌðÓ<033qá±A"2!qÜÍÁíÞ¬žéÊœªªÉܰ ÍÁ©š‘!!1!1!!!ñÑÁÁ""""233#""""UewgEegUewgffffwgUegEewgUeffff0¡£0¡£0¡£111¡ªªªª1111ªªªª::::111ªªªª  ¡11:£ªªªª`a116cffff:ªª::ªª"22òò22"02/#"ðÿ2"ð?/"ÿóó03?03"!!#32ó#?àêê ÐÜÜ ÐÜÜ ÐÜÜ pwggpæçpVWpæWpfgpww» 0³»»Ó¬ªª"¢©©"¢©© ªª‘‘™™™’!‰˜‘!"!#!#!#!#!#!#!""222222"0¡£0¡£0¡£0¡£ªªªª:11¡£:11¡£:11¡£ªªªª::::0aff0ac0acffc6ff66ff""""2£:#""""VUUUeUUUUwwwUgffUgffUWµ»UW‹ˆUW‹»UUUeUUUVwwgUffFUffFU»[EUˆ¸EU¸¸EUÑÑÑáÑ᪭ڪÊÜͬªªªª™™™™ÁÁÁÝÜÎ " " "1¢*!š™Â,¡ªªšÉ2Â!#š""gvqWva÷aeVqvgwwpPEeP_UPTUPUU`Uefv""""233#""""¡#312ÿ!0 !€"ªªªª£111¡£0¡£0¡£ªªªª1111ªªªª:111::0¡ªª0¡£0¡£ªª£ffffa116c`ªªªª¡11:£  !"!#!#!*!*!#!#!"UW‹‹UW‹‹UW‹ˆUWµ»UWUUUFDDeUUUVUUU‹¸EU»¸EUˆ¸EU»[EUUUEUDDDUUUUVUUUe¡!¢*¡3333¡‘¡¡¡™ª@tpTpUWufgWU`eñ?30" 03!# "ÿßÿÿÝ<#Ã#?"2?333330333333!"""vv"!wf"fv"!wv1"" »»©ªªš˜ú®‰ˆ™™ˆ˜ˆˆ‰™™ ªª !!âá21â1"!€ˆ˜˜€é耩¨€é¨€™˜€ˆˆ ðòÿ_??3?## ªªªªÊ̈ˆÊˆÌˆÊ̈ˆªªªª™™™™‰ˆˆˆ™™™™ªªªªˆˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™"22¢¢22"""""2£:#""""!"2"#3333  00000!"#""3333   00000!"""!"13!233!1""!2""!2""!2""""""1333333""""""""""""""""""""3133333!!"!!"""""3#333333PeeePVvv`ffgPvvv`ggw`vvvpwwwevPUvwPvgwwvPUgwPfwwPewwPv`gUUUewwwwUeUfveggevvvgwefPUewPevPvve`gwvPvww`wwvpwwwÀÜÀí2 ÌÌÍÝ îÍÞ 3ÀÀÜÀí2ÌÌ ÜÌÍÜÝ íÞ îÍÞ 3ÀÜÀíÀí2 ÌÌ ÜÝ íÍ300000000    333300000000000   3333!1""!2""!2""!2""!2""!1!"!2"!2!!""""""""""""""""""""""""""""!""""""!"""233"2""!2""!2""!2îÍ!2À!!3"!3"3î-3Þ,Þ,3Þ,3UUVVffeggvvvfggvvvgwwvvvUfPvew`wvvpwewvvPUgwPVwwPePvvvvwwvwwwUeeVvvgwgvvvvPUwPUw`eUUUeeeeUveegv!"!"!3#!!!2!"!"!3#!!!2!"!"!3#!!!2DD@DED@TTT@TeU@TdU@deU`TUeff»» °«º»°«««°«ºª°«›ª°›©ª«ªš™™ !2!2!!!1!2!!2!2!!!2!1"!"""!!!""!!!!!!2 Ð!2ÌÝ!2""!2""!2""!!!"""!!""Í,3Í,3Í-Ì-3""3""3""3""ggwvwwgwgwwwPUUPVfPegUe`gevPvvvpwewvvPUewPevwPVwwPewwwvwvwwwUUUeffvvvgggvveewvvveegvvwgwevwuwwvÝÐíÐààÐàÐÐîî àÝ àÞ à àà îî ÐîàþàððàðààÿÿðîðïðððÿÿàÌÀÜ ÀÐÐÀÐ À ÀÝÝ ÐÌ ÐÍ Ð ÐÐ ÝÝ À330##30###032"0#"0"#"330##30###03"03"0!"#"!2"!2"!!2"!1""!"33!"!"!"""!3333!""""""""!!""!!3333"!"""""""3""3""3""33#"""""PvvPfgPvv`wwPvv`wwpwwPvUePeevPvew`wvvPvew`gwwpwvvwggwvwwwgwvwwgwwwwwUUUfeefwUvvveggwvvwwwwwwªªÚêÊ̈Ýʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™®­ªªÝˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªêúÊ̈îʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™¯®ªªîˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™ªªÊÚÊ̈Ìʈ̈Ê̈ˆªªªª™™™™‰ˆˆˆ™™™™­¬ªªÌˆÌ¬ˆÌˆ¬ˆˆÌ¬ªªªª™™™™ˆˆˆ˜™™™™° ª»©º‘ª  © ‘’ €)© 3333"!"""!!!""!!!""""#!1##32"" àÞ3#»«°»ª  ª™  ˆˆ ˜™‰ˆ288""°« °»š°«™°»š°ª™¸«™¨š™111"©)#˜3" ""ÍÍ "" !#BTPe##qr22"Ã1â2""»»»»©ªªª©îªêª©ª®ª©êªª©îªªªº« «º Êš©¬Ú®ê­©‹¸š€º«ˆˆ º«0333#"#!33’¢‘ ©«˜š€ #ˆˆ2©š˜ªª‰ø™™ø¯ú€©š‚!("!"@DDD@TUD@DTT@DEU@TTU@dfU@TUU`fff°»»»°««»°«««°»ºª°«›ª°›šª°«ªª™™™033303230###0#"0#"0"0#""033303"30#3#032"03"0!"0#""03330333032#0#"0"!03""0#""033303330""!0#"03!"03""0#""033303#303"#0#"03"03"0#""233!#0"#232!#!3!#!#!2"33ˆ!#ˆ™1‚™©"˜©ª™ª»‘©º»ˆˆˆ˜™™™™ªª©ªª»ª»»»»»»»»»»»»»»»ˆˆ™™‰ˆªª™™»ªªš»»»ª»»»»»»»»»»»»3ˆ3!™ˆ2š™(ªš‰"»ª™»«š#3#3222"#!3#23"2Šº™˜°   € °   3#33"#""#""#""#""#""#""#"3333""""""""""""""""""""""""""""3333""""""""""""""""ÿ"ò/ÿ"ÿ/"òÿ"3333"!""!"!!"!""!"""""3333"!"""""""""""""""""03330#330#2#0#"0#!"0""0#"""!3!#€€"""‚333ƒ"""‚˜ªªª™ªªª™™™©‰ˆˆ˜‰33ƒ™øÿ?™ˆÿÿ™øÿÿ»»»»ªº»»ªªª»™©ªºˆ˜™ª3ƒˆ©ÿ?3˜ÿÿÿ“»»»»»»«ª»ªªª«ªš™ª™‰ˆšˆ83‰3óÿ9ÿÿÿªªª‰ªªª™š™™™‰ˆˆ˜833˜óÿ™ÿÿˆ™ÿÿ™("""8333("""!"32#302ÿ02ÿ 1!  ""#""#""#""#""#""#""#""""""""""""""""""""""""""""""ÿ/"òÿ"ÿò/"ÿ""""""""""""""""QQQAQAª¥ZªÊ\Ŭªªªª™™™™2"2222222€‰ÿÿÿ™ˆÿÿ˜™ˆˆ˜ˆ™™€‰ˆˆ€™™™€‰ˆ˜˜ˆˆÿÿŸºÿÿ©ºˆ˜š¨™˜‰¨ˆ¨‰«‰©ºª‰™ªª‰™™™«ùÿÿ«šÿÿŠ©‰ˆŠ˜‰™º˜Šˆª«š˜ªª™˜™™™˜ÿÿÿ˜ÿÿˆ™ˆˆ™‰™™ˆ‰ˆˆ˜™™™‰ˆ˜ˆˆ‰"#!#!#!#!#!#!#!#"!"!±¡E‘VD‘g‘áîîáááááááîîîîîîáîîîîáîîááîîááîîîîîîáîîááîîááîîîîîîáááááîîááîîîîáîîááîîááîîîîîî22222222!22222!™ˆ2˜‰3"™#˜"˜€˜‘™™˜"3˜"3˜‚8™(ƒ™"3ˆ"3€ˆ™™™™‰3"‰3"‰ƒ(‰8‚™3"™3"‘ˆ™™ˆˆ™˜‰!#™"3‰!2‰"!!!#####!#!#!#!#!#!#!#!#:#š)ª‰¢ÿ™™™™ªªªª»»»»ªªªª™™™™©ª‹º©ª‹º™š‹º™™™™ªªªª»»»»ªªªª™™™™™¹¨»šº¨»ªº¨»™™™™ªªªª»»»»ªªªª™™™™¨›‹º¨«‹º¨«‹º™™™™ªªªª»»»»ªªªª™™™™™©‹º™™‹ºš™‹ºPeeePVvv`ffgPvww`w`vpw!evPUvwPvgwww`w!UUUewwwwwwv!fPUewPevPvvwpgwvwvwww!"""!"2#!"3!"23!""3!""2!#"""""133#0333333#"""3"""3#""""""133#03333331"!!3""23"""13#03"3#"3""#"3"2!222€€ÌÈÜŒØÀÝÜ€í܈ÌíˆÜÝî €ÎÀ ÞˆÜ ßÜÍßìïÍŒáÞÝŒšš‹ºš™‹ºª©‹º©ª‹º©ª‹º™š‹º™š‹ºš™‹º©¹¨»™¹¨»™¹¨»šº¨»ªº¨»©¹¨»™¹¨»™¹¨»¨«‹º¨›‹º¨›‹º¨«‹º¨«‹º¨«‹º¨›‹º¨›‹ºš™‹ºš™‹ºª™‹º©™‹º©š‹º©ª‹º™ª‹º™ª‹ºUe!Vv2ew2vv2fw2vv2gw2vv2"1122222!!222222UUeUeeev!3"!2##!2#2!2#"!2#"!2#"!2"!#!23"""3#""23"#"3#2"23"#"T"2"!"#""3#"23""3#"23"23#"#v"2"p"#"p2"""3223#13"23"2"2"2"22!3!3!3!32?°2#°2#!!!!«ªÝîÿȈÜ܈ŒÜ€ˆ<ˆ2!3!3!3øïތ݌ŒŒŒŒˆ‚!!!š™‹ºª©‹º©ª‹º©ª‹º™š‹º™š‹º™™‹ºš™‹º™¹¨»šº¨»ªº¨»ªº¨»©¹¨»™¹¨»šº¨»ªº¨»¨«‹º¨«‹º¨«‹º¨›‹º¨›‹º¨›‹º¨›‹º¨«‹º™©‹ºš™‹ºš™‹ºš™‹ºª™‹ºª™‹º©š‹º©ª‹ºgw2vw2gw2ww22Pe2Pv2Pu22222222222222222eveveuv!!2#!!2!2#!2!2#1!23!33"#!1#3#w13"23#"3"2!#""2q2""a2#"f23"#"3#2"23!#"32"2!!#""2"2"2"2"23#2332333# ## #020!"0š™‹ºª©‹ºªª‹º©ª‹º©ª‹º™š‹º™™‹ºš™‹ºªº¨»©¹¨»™¹¨»™¹¨»™¹¨»šº¨»ªº¨»©¹¨»¨«‹º¨«‹º¨«‹º¨›‹º¨›‹º¨›‹º¨›‹º¨›‹º©ª‹º™ª‹ºšª‹ºš©‹ºš™‹ºª™‹ºª™‹ºªš‹ºPv"Pv2Pv"`w"Pv!`wpw!2222!!222!!!Ufewuvewvwvw!3#!23"!2#"!2"2!"""!""!""""23333133# """"""2"!!#23333133# """"""23"33"23#"3!"" """"" 33"0"#0# !#!#!#3""3"2#!!#!#!#23!3"1"#102 122"22"23""3"2"!"1"2"2"š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘 š© ‰™š#š 9¨š ™˜© ‰¨ž ©‰˜ ˆˆ‰ª#™š‰’‰ˆ˜艚š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘š  ‰©š˜™ ™#š 9¨š ‰˜©™¨ž ‰©ˆ˜ ª#‰š‰’‰ˆ™艘PeeePVvv`ffgPvvv`ggw`vvvpwwwevPUvwPvgwwvPUgwPfwwPewwPv`gUUUewwwwUeUfveggevvvgwefPUewPevPvve`gwvPvww`wwvpwwwPeeePVvv`ffgPvvv`ggw`vvvpwwwevPUvwPvgwwvPUgwPfwwPewwPv`gUUUewwwwUeUfveggevvvgwefPUewPevPvve`gwvPvww`wwvpwww€‰ˆªˆ‰Š‰Â‰*‰ ˆ™ˆš˜ˆš,˜ˆ“     £*0™ˆª€‰‰Šˆ‰Â™*š š0ª#™ˆš˜ˆˆ,˜“ ‚ €‰¨ªˆ©ˆ©Ì)̪"šª0ª#™‰šˆ‰šÌ™ˆÌ’ 3© ™  £*0€‰ˆªˆ‰Â‰ª‰‰ˆ™ˆš#ˆšɘˆ     £*0UUVVffeggvvvfggvvvgwwvvv2333!"""!!ÑÝ!ÑÝ!ÁÌ!ÁÌ!23#333#"""""""""º*"©)""""vPUwPUw`eUUUeeeeUveegvUUVVffeggvvvfggvvvgwwvvv2333!"""!!!!!!23#333#""""""""""""""""vPUwPUw`eUUUeeeeUveegvpà° gpfg!ev뻫fÞv"Pg¾»ºpfgæp" vm 0ˆ #‚È2#Ü!ÜÁÝ€ÈÜd€Ìªuˆ Œ(2Í2#Í!ÝFÍŒWªÌ ˆ1‰™!‘š‘ʨªì€©™šºÛˆ ™˜©¬ÁªŠÑ™š½«© ggwvwwgwgwwwPUUPVfPeg!!!!!!23#!"""""""""""""""""""vveewvvveegvvwgwevwuwwvggwvwwgwgwwwPUUPVfPeg!!QU!QU!af!af!23#!""""""""º*"©)""""""""vveewvvveegvvwgwevwuwwv agwwp¡v«fvvv2¶fggg2jzvww€©ªš€91š˜1˜:€©ˆÌˆ©ªš©“1‰£‰1š̈ˆ©šª›¨©Ãš˜(-<ÊÓÓ€‰,#ˆ™ˆ¹ª©š©<ššÃÒ‚‰==¬‰2˜™ˆˆPvvPfgPvv`wwPvv`wwpwwPvUePeevPvew`wvvPvew`gwwpwvvwggwvwwwgwvwwgwwwwwUUUfeefwUvvveggwvvwwwwwwPvvPfgPvv`wwPvv`wwpwwPvUePeevPvew`wvvPvew`gwwpwvvwggwvwwwgwvwwgwwwwwUUUfeefwUvvveggwvvwwwwwwÀíÞ Ûþï½ê»»®¬¹›Ê­®êÚš©Ù¬ˆˆÊк« ÜÍËíÞ¼Ú»»­¬¹›Ê­­ÚÚœš©É¬ˆˆÊÀº« ËíÞ¼Ú»»­°º«Ë¬¯úÊš©Ù­‚(Ú¬(‚Êк« ™™‘ª™‘»»«º«ºû¸‹¿±»»¡›¹º«™™‘ª™‘»««º»»û¸û¸±»»¡›¹º«™™‘ª™‘º»»»«º‹¿‹¿±»»¡›¹º«™™‘™™‘ª™«»»º»º«»ñ¸‹±»»¡û¿@pFgõVô@ôÿveTÿD@tf÷UVOVô@võ_TÈŒ€ÜÍÈíÞŒÜþïÍÜþïÍÈíÞŒ€ÜÍÈŒVTVTgegegvpVe`ET`ETpVegv`gVV`õö`EF`õF`UVpfg  ™ €˜€Ž™“ ªšˆª™™©9’©ª0™ ‰è9©ˆ©š™ªª"‘  ™ €˜€Ž¡š“ª™ˆ "ª0™ ‰è˜9©ª ˆ™™ªªš)“™™‘™™‘ª™«»»º»º«»ñ¸‹±ÿÿ¡û¿™™‘ª™‘»»«º«ºÛ¾ë½±»»¡›¹º«™™‘ª™‘»»û¿û¿û¸‹¿ñ¿û±‹¸¡‹¸‰˜ˆ˜̈˼̻»¼¼»¡¹¬±¼¼¡¬¸VôgõpF@TevVO÷Utf@_õv@ÐÀ TVTVegeg"ó 3=2" #232"!þ !/ 3ÿ!3#!?22"2ªª2ª"2*32"2™!˜ˆƒƒ"3’™3"‰"‘‘‰80ˆ™)3"˜!"3€!"!€ƒ˜0ˆªª!#"ª!#3¢!#"‘!#™!#‘‰€ˆ088»»º°ª««Üª©í¯ÿ™»›?™‰»«»ºª ªÍ¹ÿùÞ9óº«2ó˜™"3»»º°ª«ÿ›Üª?“íŸ?#º«3"™Š»«»ºª ªÍºúÞš¹»™ÿ¨™1ó"!23("""!!ƒ2(!3""!!!#0"#""#šššššš‰‰‰ "  !"!""!2ÿ!3#"òó33"!"!"!"!ÿ#"2333?/º »0¢¨ Š3©)3" 23 !" «¨2"9“ 2# 3 "¡  º#Š"¡9“ 2# !3 "«» Š*¨!š3 "3’3# " ?#!33"!2?2#"’˜©Š™ 33ó"#!2"!" ) š ™‰‰?3‰#2’"!"’© ™ €˜€˜˜2ó)"3#!ó 2€"‰)¨š ™  !333#"00""03232"!"! UfPTUVUfg#qpww711'""27112"2?# óÿ ãã23!"22""22!=222ü22!322""1#ó!!#3!"""##Ó##Ï###3##"##?2"32"!"#2ó#1ÿ?1>>!3#"© À Œ  ™™ ‰ˆ™ À€˜ˆ€  šÈ €  ™  ª3 ª™# ™ˆ‚ˆ#"""˜‰2ÀÐì ÀýÍíá 2!#!2#!ð!/ðñ"2ó23232!2/#0  0 ðððð0  ÁªÙž‘Ï€™ªª ©ššØ‰šÈØÊ!ÞŸ‰ªª1#Ù11È1# ÁªÙž‘Ï€™ ªªš©ššØ‰ ‰ÀØÊ!ÞŸ‰ªª1#Ù11È1#!#!2#!!#" ™‘º©™©»ªºº€©© 2#!!#" ™‘º©™©»ªºº€©© ˜™ `E»»V°««k «šjª«y™šx#ñðDTvDDeEDeUUfffvwww 0  0 ðð00 ðð ‰0È ‰0’33"3!˜ "©ª ™ˆ ‰0È0’3"˜ "©ª ª š™wwVpVUgõTWEUpvÿgpuwgwewUeUUvUUuvÿgvwWˆˆ©€©ª˜ú«¨ºª€©™ª€šˆ©ˆšˆªšªª‰ªªŠª™ššˆ© "  !"!"˜˜ª©ª™š™»"!"!"!‰!ª‰™ªš»™© 030"2"! !!!2223#""#!!##peffpVevWewgewpVfwVwffVgVewVuwVvfeeww€šè˜€©™™¨š›˜Šˆ€©»ˆ©ˆ‰Ž©™™š¹©Šˆ¨‰»ššˆˆ€¹»ª «ª™š™»€¹»ª «ª™š™»€¹»ª «ª™ª»›™ªº »™© ª»›™ªº »™© ª»›™ªº "ƒ!2!!2!!!!!!!ƒ!!2!!28"##!8##ì., $D<@eei‰‰²®¶ÞÚÚÿÿÿ8e‰ªÎêúá 0!#0!#0!#111!""""1111""""2222111""""1Á1Ã<ÁJ¤¡1¡Á""â23à""îááîîáîîáîîîîáááááááá""âÒ-à""î!‘!R&‘i—©š©šc6‘‘‘¡¡ªª£®ê:#ªª2""111111ÿÿ"þ"±±»»³¶k;#»»2""11""âò/à""î 2"23" 322# 33 3#!!!0!#0!#0!#0!#""""211!#211!#211!#""""2222îàá!#!#!#!#!"ÿÿÿðÿÿð"2222îîàá!#!"!-!-!"ðÿÿðððÿðÿÿÿð"ÒÒ"2î0!#0ÿ0ïÿ0!#ÿðÿððÿððÿðÿ2ÿðþÿ2îàá!#!"!/!/!" 3# 3#  3" 3# 3 3 !!!!º«ƒ®ê8  ‘  ¨Š‘1)’1""""#111!#0!#0!#""""1111""""211122233#2""?33?53?ff?#ÿÿ?233#î ""03#.""˜‰¨‰‘ˆˆ‘Ÿùˆˆ¨Š" ?"2#b%Qr&aqî ""0Ò-.""!‘ˆˆ1‰˜!©š©š#©š##©š#"˜‰"ÿÿÿðÿðÿÿðððÿ"ïð"1ÿÿ1ÿÿÿðððÿðÿî ""0ò/."" 3" 3 3! 3! " 3" 3 3"""ðÿÿðÓ<ðÝÝðÜÌðÓ<033¡±±A"2!qÜÍÁíÞ¬žéÊœªªÉܰ ÍÁ©š‘!!1!1!!!ñÑÁÁ""""233#""""UewgEegUewgffffwgUegEewgUeffff0¡£0¡£0¡£111¡ªªªª1111ªªªª::::111ªªªª  ¡11:£ªªªª !112#"""":ªª::ªª"òò"2î 3 2" 323" 2"!!!àêê ÐÜÜ ÐÜÜ ÐÜÜ pwggpæçpVWpæWpfgpww» 0³»»Ó¬ªª"¢©©"¢©© ªª1AA112"!!"!#!#!#!#!#!#!"ÿðÿððÿÿÿÿðÿ"222222"0¡£0¡£0¡£0¡£ªªªª:11¡£:11¡£:11¡£ªªªª::::0!""0!#0!#""#ððÿðÿðÿÿÿ2""22""""â²+à""î2333#33333!""3!""31333A333Q53333#3332!3""ò3""ò333ó333ó333ó3ÝÝÑîîíîîÞÝíÞÝíÞíÞÝîîÝÑîîÝÝáþïïíÞþÞØíŒÈÈŒ1¢*!š™Â,¡ªªšÉ2Â!#š""gvqWva÷aeVqvgwwpPEeP_UPTUPUU`Uefv""""233#""""±©š‘º«° ‘  ©š˜‰ªªªª£111¡£0¡£0¡£ªªªª1111ªªªª:111::0¡ªª0¡£0¡£ªª£""""!112# ªªªª¡11:£  îàá!#!"!+!+!"3a3331333AC33QSS316c3òÿÿ#333233333ó333ó343ô3USó3c3ö3ÿÿÿ33332333#¡!¢*¡3333¡‘¡¡¡™ª@tpTpUWufgWU`eñ?30" 03!# "ÿßÿÿÝ<#Ã#?"2?333330333333!"""vv"!wf"fv"!wv1"" »»©ªªš˜ú®‰ˆ™™ˆ˜ˆˆ‰™™ ªª !!âá21â1"!€ˆ˜˜€é耩¨€é¨€™˜€ˆˆ ðòÿ_??3?## ððððÿðÿÿÿðÿÿÿÿðððÿÿÿÿÿÿÿÿðÿÿÿðÿÿÿÿð"²²"2îî ""0²+.""000000000000000000000000000000001333""2""""2""""!"""3332!""""""©"™:3"’)""’""3333""""""""3ª:3"™"""’""3à""áá:áî)î"à!!!!!!"!"""""""""""""!!!"!!!""!"""""""""!!!!!!"!"""""""""""""!!!"!!!""!"""""""""íÐŒÐîî͈èŽÈØŽè͈íÞŒíˆ Þ€ÜˆÈíÞȈÈíèܺ ‰ »»šˆ¸‹˜¨‹¸šˆº«‰ºˆ «€©ˆ˜º «˜ˆ Š˜º¸Š© þàÍàÿÿÞŒøØìøÞÌþïÍþÌïÀíˆÜþï܈ÎÜþüÎí00000000000000000000000000000000!"""!3"3!3"3!3"3!3"3!333!23#!""""""""33"233#2#2#233#2#2#2#2#""""""""23#"33#"3"""3"""33#"23#"""2""""2"""""""""2""22"2232233323333óó3óóÿóóÿÿÿÿÿ2"""2""23"223223333óóóóóóÿóÿÿÿÿÿ2"""2""23"223223333óóóóóóÿóÿÿÿÿÿ2""22"2232233323333óó3óóÿóóÿÿÿÿÿØÜîÈÈ퀀܀€ÜÈÈ€€ÞÜÍÈŒ€Œ€¨©»˜˜º€€©€€©˜˜€€«©š˜‰€‰€ìíÿÜÜþÀÀíÀÀíÜÜÀÀïí ÞÜ ÍÀÍÀ DD@DED@TTT@TeU@TdU@deU`TUeff»» °«º»°«««°«ºª°«›ª°›©ª«ªš™™ !"""!"""!"""!"""!"""!"""!"""""""""1""#""¡""š""¡™"#™"1")"£ª:3’™)"’™"""™""")""")""""""Ò"""£ª3’™"’™"’)"")"")""á"îÿÿÿÿóÿóÿóóóó333ó32233"222""22"""ÿÿÿÿÿóóÿó3óó333ó332332232"222""2ÿÿÿÿÿóóÿó3óó333ó332332232"222""2ÿÿÿÿóÿóÿóóóó333ó32233"222""22"""ÝÝÝÐÝÝÝíîÝîîÐÝîîÐÝÞíÝÝÝÝÝ îÞÝîîÝîîÝ ÞíÝ îîîàîîîþÿîÿÿàîÿÿàîïþîîîîîÿïîÿÿîÿÿîïþˆ€ˆˆˆØÝˆÝÝ€ˆÝÝ€ˆØˆˆˆˆˆ݈Ý݈Ý݈؈330##30###032"0#"0"#"330##30###03"03"0!"#"13£ª"™2")""2""""!"""#""""""""""""""""""""""""""""""Ò"""""""""""""""""""""""à""á"á"áî"î"à""""""""""""!"!"!!!!!""""""""""!""!!!!!!""""""""""""!"!"!!!!!""""""""""!""!!!!!!ÐÝîÞÐÝÝîÝÝÝÝÝîÐÝÝÝÝÝíîÝ îÝÝ ÝÝÝîÝÝÝÝ ÝÝÝàîÿïàîîÿîîîîîÿàîîîîîþÿîÿîîîîîÿîîîîîî݀ˆˆÝˆˆˆˆˆÝ€ˆˆˆˆˆØÝˆ݈ˆˆˆˆÝˆˆˆˆˆˆˆ!EeôTôTEe!3333"!"""!!!""!!!""""#!1##32"" àÞ3#»«°»ª  ª™  ˆˆ ˜™‰ˆ2882""""°« °»š°«™°»š°ª™¸«™¨š™111"©)#˜3" ""ÍÍ "" !ÿÿðÿððÿÿÿðÿðÿðððððð»»»»©ªªª©îªêª©ª®ª©êªª©îªªªààîî"â". 0333#"#!33ÿðÿÿððððÿ!!!!! !""#ˆˆ2©š˜ªª‰ø™™ø¯ú€©š‚!("!"@DDD@TUD@DTT@DEU@TTU@dfU@TUU`fff°»»»°««»°«««°»ºª°«›ª°›šª°«ªª™™™033303230###0#"0#"0"0#""033303"30#3#032"03"0!"0#""03330333032#0#"0"!03""0#""033303330""!0#"03!"03""0#""033303#303"#0#"03"03"0#""‘™‘‘‘™‰‘‰‘‰™™™™™‘™™™‘™‘‘‘ˆ‘‘‘‘‘‘˜‘˜‘˜‘˜‘‘‘™‘‘‘‘‘‘Šº™˜°   € °   3#33"#""#""#""#""#""#""#"3333""""""""""""""""""""""""""""3333""""""""""""""""ÿ"ò/ÿ"ÿ/"òÿ"3333"!""!"!!"!""!"""""3333"!"""""""""""""""""03330#330#2#0#"0#!"0""0#""‘‰‘‰¡‰¡‰ ¡™ ¡™ ±™ ±‰‘‰‘‰‘Š‘ˆˆŠ¨ˆˆš¨ˆˆš¨ˆˆ›¨ˆ‰«ˆŠˆŠ‰Šˆˆ˜Šˆˆ‹‰ˆ™‹ˆˆ‹‘™ª‘ª¡ª¡ª¡»±»°»‘ˆ‘ˆ‘˜‘©‘™‘™‘©ˆ‘‰‘˜¡¨¡¨¨¨Šˆ¡¨Š‰¸¹šˆ¸¹›™¸¹ˆˆŠˆˆš™‰ªˆ™Šªˆ‘‘‘‘¡¡¡¡¡’º¡©šº« ©ë¾šá‘©±š ë¾ º«©š"#""#""#""#""#""#""#""""""""""""""""""""""""""""""ÿ/"òÿ"ÿò/"ÿ""""""""""""""""ffaUUVUUefVefVeVefUUfaUUff ¸°ˆèº°ˆˆˆ°ˆˆ™°˜˜™°™˜š°¨©ª°™ªšªˆ˜›ˆ™™«™˜˜‹˜˜™‹™™¹›©º«šº›™˜+™™™‹™™»žšªš®©™©é«™©‰ê©©ˆ˜ë« €‰¹˜°ˆˆî™ªŠ»©¹»™šžš™»™©ˆšŠˆ‰ˆ˜±˜ˆ¹‹¨™š©»‰™‰©»šªš©»ºˆ™©‹˜˜‰›ªºèª™ºé™™ºèªºŽè¹®ˆšž‰¨™ˆ€™‰«™šŠ‹ªª™‹Ž©™‹ž»›‹‰©»‹˜™‰›é€ˆˆ(º¡±º±¡àˆ±è(èžé(á«éˆè˜éŠè’è˜èÿÿðððÿÿÿðð±¡E‘VD‘g‘áîîáááááááîîîîîîáîîîîáîîááîîááîîîîîîáîîááîîááîîîîîîáááááîîááîîîîáîîááîîááîîîîîî°™šº°ª¹›°ª›©°«©™+™™‰ˆ˜‰€‰™™™‰™™‰‰‰‰ðÿð€ððððˆðððð€ˆðððÿÿÿˆˆððÿð‰è™êˆáªéˆëšé¨º»é™™¹ë˜¨¹ˆˆððððÿÿÿÿ%-- title: DooM80 Plus -- engine: Bruno Oliveira -- doom: id Software -- author: AnstheRam -- desc: FPS80 made into Doom, but better. New graphics, more levels, awesome features. -- script: lua -- saveid: dm80p --GENERATED CODE. DO NOT EDIT. --how bout i do anyway --Edit the source .lua files instead. --nah fam local sin,cos,PI=math.sin,math.cos,math.pi local floor,ceil,sqrt=math.floor,math.ceil,math.sqrt local min,max,abs,HUGE=math.min,math.max,math.abs,math.huge local random=math.random function clamp(x,lo,hi) return max(min(x,hi),lo) end local SCRW=240 local SCRH=136 local syncBuffer=0 keys=0 local TID={ NONE=0, STONE=116, -- stone wall WOOD=256, -- wood wall DOOR=112, -- door LDOOR=264, -- locked door L2DOOR=14200, L3DOOR=14201, SARG_W1=320, -- pinky walk 1 SARG_ATK=326, -- pinky attack SARG_W2=322, -- pinky walk 2 SARG_PRE=324, -- pinky prepare CYB1=464, -- cyberdemon walk1 CYB2=466, -- cuberdemon walk2 CBOW_N=268, -- shotgun CBOW_D=270, CHGG_N=300, -- chaingun CHGG_D=302, RKTL_N=494, -- rocket launcher PLSM_N=492, -- plasma rifle CHSW_N=460, -- chainsaw CHSW_A=462, CHSW_B=463, BFGG_N=428, -- bfg9000 PISG_N=458, -- pistol PISG_D=459, ARROW=412, -- arrow flying BULLET=412, -- bullet STIM=48, -- stimpack AMMO=64, -- ammo (shells) ZOMB_W1=352, -- zombieman, walk 1 ZOMB_W2=354, -- zombieman, walk 2 KEY_1=65, -- key (on floor, to pick up) KEY_2=399, SKUL_1=384, -- lost soul SKUL_2=385, -- SKUL_3=386, -- FIREBALL=396, FIREBALL_1=392, FIREBALL_2=394, GREN=413, -- grenade PILLAR=14, LEVER=328, -- wall with a lever on it LEVER_P=332, -- wall with a lever on it (pulled) GATE=260, LIGHT=174, PORTAL_1=152,PORTAL_2=154,PORTAL_3=156, HELL_1=120,HELL_2=122,HELL_3=124, SOUL=488, -- soul sphere MEGA=490, -- megasphere BONUS=84, -- health bonus ABON=39, -- armour bonus SKULL=207, HURTF1=397, -- nukage/blood/whatever HURTF2=413, CRATE=78, -- crate FENCE=110, FATTW1=400, -- mancubus FATTW2=402, CACO=356, -- cacodemon CACOBALL=398, PAIN=358, -- pain elemental BOSS=199, -- big boss demon REV1=432, -- revenant REV2=434, AMMO2=66, -- ammo box ARMR=97, -- armour ALMP=100, -- allmap SPDR1=420, -- spider mastermind SPDR2=422, MEDK=99, -- medkit BKPK=101, -- backpack CHAIN=440, -- chaingun pickup SHOTG=456, CLIP=177, -- magazine CLIP2=178, -- more chaingun ammo RKTLNCH=424, -- rocket launcher ROCKETAMMO=180, PLASGUN=426, -- plasmarifle PLASAMMO=182, CHAINSAW=442, -- chainsaw BFG9000=414, -- big freaking gun RSUIT=104, -- radiation suit TELEP=106, } local S3={ ILEAVE=true, VP_L=0,VP_T=0,VP_R=239,VP_B=119, FLOOR_Y=0, CEIL_Y=50, FOG_S=10000, FOG_E=80000, FLIC_AMP=1500, FLIC_FM=0.003, -- frequency multiplier FLOOR_CLR=9, CEIL_CLR=0, TEX={ [TID.NONE]={w=1,h=1}, [TID.STONE]={w=32,h=32}, [TID.WOOD]={w=32,h=32}, [TID.DOOR]={w=32,h=32}, [TID.LDOOR]={w=32,h=32}, [TID.L2DOOR]={w=32,h=32}, [TID.L3DOOR]={w=32,h=32}, [TID.SARG_W1]={w=16,h=16}, [TID.SARG_ATK]={w=16,h=16}, [TID.SARG_W2]={w=16,h=16}, [TID.SARG_PRE]={w=16,h=16}, [TID.CYB1]={w=16,h=16}, [TID.CYB2]={w=16,h=16}, [TID.CBOW_N]={w=16,h=16}, [TID.CBOW_D]={w=16,h=16}, [TID.CHGG_N]={w=16,h=16}, [TID.CHGG_D]={w=16,h=16}, [TID.RKTL_N]={w=16,h=16}, [TID.PLSM_N]={w=16,h=16}, [TID.CHSW_N]={w=16,h=16}, [TID.CHSW_A]={w=8,h=16}, [TID.CHSW_B]={w=8,h=16}, [TID.BFGG_N]={w=32,h=16}, [TID.PISG_N]={w=8,h=16}, [TID.PISG_D]={w=8,h=16}, [TID.ARROW]={w=8,h=8}, [TID.BULLET]={w=8,h=8}, [TID.STIM]={w=8,h=8}, [TID.AMMO]={w=8,h=8}, [TID.ZOMB_W1]={w=16,h=16}, [TID.ZOMB_W2]={w=16,h=16}, [TID.KEY_1]={w=8,h=8}, [TID.KEY_2]={w=8,h=8}, [TID.SKUL_1]={w=8,h=8}, [TID.SKUL_2]={w=8,h=8}, [TID.SKUL_3]={w=8,h=8}, [TID.FIREBALL]={w=8,h=8}, [TID.FIREBALL_1]={w=16,h=16}, [TID.FIREBALL_2]={w=16,h=16}, [TID.GREN]={w=8,h=8}, [TID.PILLAR]={w=16,h=32}, [TID.LEVER]={w=32,h=32}, [TID.LEVER_P]={w=32,h=32}, [TID.GATE]={w=32,h=32}, [TID.LIGHT]={w=8,h=16}, [TID.PORTAL_1]={w=16,h=16}, [TID.PORTAL_2]={w=16,h=16}, [TID.PORTAL_3]={w=16,h=16}, [TID.HELL_1]={w=16,h=16}, [TID.HELL_2]={w=16,h=16}, [TID.HELL_3]={w=16,h=16}, [TID.SOUL]={w=16,h=16}, [TID.MEGA]={w=16,h=16}, [TID.BONUS]={w=8,h=8}, [TID.ABON]={w=8,h=8}, [TID.SKULL]={w=8,h=16}, [TID.HURTF1]={w=8,h=8}, [TID.HURTF2]={w=8,h=8}, [TID.CRATE]={w=16,h=16}, [TID.FENCE]={w=16,h=16}, [TID.FATTW1]={w=16,h=16}, [TID.FATTW2]={w=16,h=16}, [TID.CACO]={w=16,h=16}, [TID.CACOBALL]={w=8,h=8}, [TID.PAIN]={w=16,h=16}, [TID.BOSS]={w=64,h=32}, [TID.REV1]={w=16,h=16}, [TID.REV2]={w=16,h=16}, [TID.AMMO2]={w=8,h=8}, [TID.ARMR]={w=8,h=8}, [TID.ALMP]={w=8,h=8}, [TID.SPDR1]={w=16,h=16}, [TID.SPDR2]={w=16,h=16}, [TID.MEDK]={w=8,h=8}, [TID.BKPK]={w=8,h=8}, [TID.CHAIN]={w=16,h=8}, [TID.SHOTG]={w=16,h=8}, [TID.CLIP]={w=8,h=8}, [TID.CLIP2]={w=8,h=8}, [TID.RKTLNCH]={w=16,h=8}, [TID.ROCKETAMMO]={w=8,h=8}, [TID.PLASGUN]={w=16,h=8}, [TID.PLASAMMO]={w=8,h=8}, [TID.CHAINSAW]={w=16,h=8}, [TID.BFG9000]={w=16,h=8}, [TID.RSUIT]={w=8,h=8}, [TID.TELEP]={w=16,h=8}, }, lastFT=nil, ex=0, ey=0, ez=0, yaw=0, cosMy=0, sinMy=0, termA=0, termB=0, t=0, NCLIP=0.1, FCLIP=1000, walls={}, hbuf={}, clrM={ {1,2,3,15}, {7,6,5,4}, {8,9,10,11} }, clrMR={}, -- computed on init PVS_CELL=50, pvstab={}, stencil={}, bills={}, overs={}, zobills={}, flashes={}, parts={}, partPool={}, } local SND={ ARROW={sfx=58,note="E-4",dur=10,vol=15,spd=0}, LOAD={sfx=51,note="F-5",dur=30,vol=15,spd=0}, HIT={sfx=62,note="E-3",dur=6,vol=15,spd=0}, KILL={sfx=62,note="C-2",dur=12,vol=15,spd=-2}, BONUS={sfx=52,note="C-3",dur=9,vol=15,spd=-2}, HURT={sfx=60,note="D-4",dur=30,vol=15,spd=-2}, DOOR={sfx=59,note="C-2",dur=6,vol=15,spd=-1}, DIE={sfx=58,note="E-2",dur=30,vol=15,spd=-1}, BOOM={sfx=57,note="G-3",dur=30,vol=15,spd=-2}, SPIT={sfx=56,note="E-4",dur=30,vol=15,spd=0}, FAIL={sfx=55,note="C-2",dur=10,vol=15,spd=0}, CHGG={sfx=54,note="B-3",dur=30,vol=15,spd=0}, SOUL={sfx=53,note="A-3",dur=30,vol=15,spd=0}, DEAD={sfx=50,note="A-4",dur=30,vol=15,spd=0}, ARMOUR={sfx=49,note="A-5",dur=30,vol=15,spd=0}, WEPP={sfx=48,note="C-6",dur=30,vol=15,spd=0}, TELE={sfx=47,note="C-3",dur=30,vol=15,spd=0}, RCKT={sfx=43,note="C-3",dur=30,vol=15,spd=4}, BALL={sfx=43,note="D-3",dur=30,vol=15,spd=5}, PLAS={sfx=39,note="D-4",dur=30,vol=15,spd=7}, CHSW={sfx=35,note="F-3",dur=30,vol=15,spd=4}, CHID={sfx=38,note="C-2",dur=15,vol=7,spd=0}, BFGC={sfx=46,note="C-4",dur=70,vol=15,spd=0,chan=3}, BFGF={sfx=42,note="C-5",dur=29,vol=15,spd=-1,chan=3}, BOSSD={sfx=34,note="C-3",dur=70,vol=15,spd=-4,chan=2}, BOSSH={sfx=34,note="A-3",dur=70,vol=15,spd=-1,chan=2}, DHURT={sfx=45,note="C-4",dur=70,vol=12,spd=0,chan=1}, MHURT={sfx=45,note="C-1",dur=15,vol=12,spd=-1,chan=1}, MKILL={sfx=45,note="A-1",dur=15,vol=12,spd=-4,chan=1}, CKILL={sfx=45,note="G-4",dur=70,vol=12,spd=-4,chan=1}, AKILL={sfx=34,note="A-4",dur=70,vol=12,spd=-3,chan=1}, RKILL={sfx=41,note="C-4",dur=70,vol=12,spd=0,chan=1}, } local PFX={ NONE={count=0}, KILL={ count=30,minR=5,maxR=20,minSpd=40,maxSpd=100, fall=true,clr={12,13},ttl=2,size=3, }, HURT={ count=3,minR=5,maxR=20,minSpd=30,maxSpd=60, fall=true,clr={12,13},ttl=2,size=3, }, BLAST={ count=50,minR=5,maxR=20,minSpd=150,maxSpd=200, fall=true,clr={14,15,12,13},ttl=2,size=4, }, SHOT={ count=5,minR=5,maxR=20,minSpd=60,maxSpd=120, fall=false,clr={14,15,12,13},ttl=1,size=3, }, BALL={ count=5,minR=5,maxR=20,minSpd=60,maxSpd=120, fall=false,clr={4,5,6},ttl=1,size=3, }, TELE={ count=100,minR=5,maxR=20,minSpd=100,maxSpd=180, fall=true,clr={5,6},ttl=2,size=2, }, SOULKILL={ count=30,minR=5,maxR=20,minSpd=40,maxSpd=100, fall=true,clr={10,11,14},ttl=2,size=2, }, SPITSOUL={ count=25,minR=5,maxR=20,minSpd=20,maxSpd=60, fall=true,clr={8,12,13},ttl=2,size=3, }, FIRE={ count=1,minR=0,maxR=2,minSpd=0,maxSpd=30, fall=false,clr={12,13,1,2},ttl=1,size=4, }, } function S3Init() _S3InitClr() S3Reset() _S3StencilInit() end function S3Reset() S3SetCam(0,0,0,0) S3.walls={} S3.pvstab={} S3.overs={} S3.bills={} S3.zobills={} S3.flashes={} S3.parts={} S3.partPool={} end function _S3InitClr() for c=15,1,-1 do S3.clrMR[c]=nil end for _,ramp in pairs(S3.clrM) do for i=1,#ramp do local thisC=ramp[i] S3.clrMR[thisC]={ramp=ramp,i=i} end end end function _S3ClrMod(c,f,x,y) if f==1 then return c end local mr=S3.clrMR[c] if not mr then return c end local di=mr.i*f -- desired intensity local int if x then local loi=floor(di) local hii=ceil(di) local fac=di-loi local ent=(x+y)%3 int=fac>0.9 and hii or ((fac>0.5 and ent~=1) and hii or ((fac>0.1 and ent==1) and hii or loi)) else int=S3Round(di) end return int<=0 and 0 or mr.ramp[S3Clamp(int,1,#mr.ramp)] end function S3WallAdd(w) assert(w.lx) assert(w.lz) assert(w.rx) assert(w.rz) assert(w.tid) table.insert(S3.walls,w) _S3WallReg(w.lx,w.lz,w) _S3WallReg(w.rx,w.rz,w) end function S3WallDel(w) w.dead=true end function _S3WallReg(x,z,w) local RADIUS=6 local RADIUS2=RADIUS*RADIUS x,z=S3Round(x),S3Round(z) local centerC,centerR=x//S3.PVS_CELL,z//S3.PVS_CELL for r=centerR-RADIUS,centerR+RADIUS do for c=centerC-RADIUS,centerC+RADIUS do local dist2=(c-centerC)*(c-centerC)+ (r-centerR)*(r-centerR) if dist2<=RADIUS2 then _S3PvsAdd(c,r,w) end end end end function _S3PvsAdd(c,r,w) local t=S3.pvstab[r*32768+c] if not t then t={} S3.pvstab[r*32768+c]=t end for i=1,#t do if t[i]==w then return end -- already in table end table.insert(t,w) end local _S3PvsGet_empty={} function _S3PvsGet(x,z) x,z=S3Round(x),S3Round(z) local c,r=x//S3.PVS_CELL,z//S3.PVS_CELL return S3.pvstab[r*32768+c] or _S3PvsGet_empty; end function S3SetCam(ex,ey,ez,yaw) S3.ex,S3.ey,S3.ez,S3.yaw=ex,ey,ez,yaw S3.cosMy,S3.sinMy=cos(-yaw),sin(-yaw) S3.termA=-ex*S3.cosMy-ez*S3.sinMy S3.termB=ex*S3.sinMy-ez*S3.cosMy end function S3Proj(x,y,z) local c,s,a,b=S3.cosMy,S3.sinMy,S3.termA,S3.termB local px=0.9815*c*x+0.9815*s*z+0.9815*a local py=1.7321*y-1.7321*S3.ey local pz=s*x-z*c-b-0.2 local pw=x*s-z*c-b local ndcx=px/abs(pw) local ndcy=py/abs(pw) return 120+ndcx*120,68-ndcy*68,pz end function S3Rend() local nowMs=time() S3.dt=S3.lastFT and (0.001*(nowMs-S3.lastFT)) or 16 S3.lastFT=nowMs _S3PrepFlashes() local pvs=_S3PvsGet(S3.ex,S3.ez) local hbuf=S3.hbuf _S3PrepHbuf(hbuf,pvs) _S3RendOvers() _S3RendBills() _S3RendHbuf(hbuf) _S3RendFlats(hbuf) _S3PartsUpdate() _S3RendParts() S3.t=S3.t+1 end function _S3ResetHbuf(hbuf) for x=S3.VP_L,S3.VP_R do hbuf[x+1]=hbuf[x+1] or {} local b=hbuf[x+1] b.wall=nil b.z=HUGE end end function _S3PrepFlashes() for i=#S3.flashes,1,-1 do local f=S3.flashes[i] local unused f.sx,unused,f.sz=S3Proj(f.x,S3.ey,f.z) end end function _S3ProjWall(w,boty,topy) topy=topy or S3.CEIL_Y boty=boty or S3.FLOOR_Y local nclip=S3.NCLIP local fclip=S3.FCLIP local lx,lz,rx,rz=w.lx,w.lz,w.rx,w.rz for try=1,2 do -- second try is with z clipping local ltx,lty,ltz=S3Proj(lx,topy,lz) local rtx,rty,rtz=S3Proj(rx,topy,rz) if rtx<=ltx then return false end -- cull back side if rtxS3.VP_R then return false end local lbx,lby,lbz=S3Proj(lx,boty,lz) local rbx,rby,rbz=S3Proj(rx,boty,rz) w.slx,w.slz,w.slty,w.slby=ltx,ltz,lty,lby w.srx,w.srz,w.srty,w.srby=rtx,rtz,rty,rby if w.slzfclip and w.srz>fclip then return false elseif try==2 then return true elseif w.slz=240 and endx>=240 then return nil,nil,nil end startx=max(startx,0) endx=min(endx,239) if not S3.ILEAVE then return startx,endx,1 end if startx%2~=S3.t%2 then return startx+1,endx,2 else return startx,endx,2 end end function _S3PrepHbuf(hbuf,walls) _S3ResetHbuf(hbuf) for i=1,#walls do local w=walls[i] if not w.dead then if _S3ProjWall(w) then _AddWallToHbuf(hbuf,w) end end end for x=S3.VP_L,S3.VP_R do local hb=hbuf[x+1] -- hbuf is 1-indexed if hb.wall then local w=hb.wall hb.ty=S3Round(_S3Interp(w.slx,w.slty,w.srx,w.srty,x)) hb.by=S3Round(_S3Interp(w.slx,w.slby,w.srx,w.srby,x)) end end end function _AddWallToHbuf(hbuf,w) local startx=max(S3.VP_L,S3Round(w.slx)) local endx=min(S3.VP_R,S3Round(w.srx)) local step local nclip,fclip=S3.NCLIP,S3.FCLIP startx,endx,step=_S3AdjHbufIter(startx,endx) if not startx then return end for x=startx,endx,step do local hbx=hbuf[x+1] local z=_S3Interp(w.slx,w.slz,w.srx,w.srz,x) if z>nclip and zz then -- depth test. hbx.z,hbx.wall=z,w -- write new depth. else end end end end function _S3RendHbuf(hbuf) local startx,endx,step=_S3AdjHbufIter(S3.VP_L,S3.VP_R) if not startx then return end for x=startx,endx,step do local hb=hbuf[x+1] -- hbuf is 1-indexed local w=hb.wall if w then if w.tid==TID.L2DOOR then w.tid=TID.LDOOR local tempcmt=w.cmt w.cmt={[4]=15,[5]=3,[6]=2,[7]=1} table.insert(w.cmt,tempcmt) elseif w.tid==TID.L3DOOR then w.tid=TID.LDOOR local tempcmt=w.cmt w.cmt={[4]=11,[5]=10,[6]=9,[7]=8} table.insert(w.cmt,tempcmt) end local z=_S3Interp(w.slx,w.slz,w.srx,w.srz,x) local u=_S3PerspTexU(w,x) _S3RendTexCol(w.tid,x,hb.ty,hb.by,u,z,nil,nil,nil, nil,nil,w.cmt) end end end function _S3StencilInit() for i=1,240*136+1 do S3.stencil[i]=-1 end end function _S3StencilRead(x,y) return S3.stencil[240*y+x+1]==S3.t end function _S3StencilWrite(x,y) if x>=0 and y>=0 and x<240 and y<136 then S3.stencil[240*y+x+1]=S3.t end end function S3BillAdd(bill) assert(bill.x and bill.y and bill.z and bill.w and bill.h and bill.tid) table.insert(S3.bills,bill) return bill end function S3BillDel(bill) local bills=S3.bills for i=1,#bills do if bills[i]==bill then bills[i]=bills[#bills] table.remove(bills) return true end end return false end function S3OverAdd(over) assert(over.sx) assert(over.sy) assert(over.tid) over.scale=over.scale or 1 table.insert(S3.overs,over) return over end function S3FlashAdd(flash) assert(flash.x) assert(flash.z) assert(flash.int) assert(flash.fod2) table.insert(S3.flashes,flash) return flash end function S3FlashDel(flash) for i=1,#S3.flashes do if S3.flashes[i]==flash then S3.flashes[i]=S3.flashes[#S3.flashes] table.remove(S3.flashes) return end end end function _S3RendBill(b) if b.slxS3.VP_R and b.srx>S3.VP_R then return end local lx,rx,z=b.slx,b.srx,b.sz local startx,endx,step=_S3AdjHbufIter(lx,rx) if not startx then return end local tid=b.tid local ty,by=b.sty,b.sby local hbuf=S3.hbuf for x=startx,endx,step do local hb=hbuf[x+1] -- 1-indexed if not hb or not hb.wall or hb.z>z then local u=_S3Interp(lx,0,rx,1,x) if _S3RendTexCol(tid,x,ty,by,u,z,nil,nil, 0,true,b.clrO,b.cmt) then b.vis=true end end end end function _S3RendOvers() local overs=S3.overs for i=1,#overs do _S3RendOver(overs[i]) end end function _S3RendOver(o) local td=S3.TEX[o.tid] assert(td) local scale=o.scale local w=td.w*scale local h=td.h*scale local lx,rx=o.sx,o.sx+w-1 local startx,endx,step=_S3AdjHbufIter(lx,rx) if not startx then return end for x=startx,endx,step do for y=o.sy,o.sy+h-1 do local t=_S3GetTexel(o.tid,(x-lx)//scale, (y-o.sy)//scale) if t>0 then pix(x,y,t) _S3StencilWrite(x,y) end end end end function _S3ProjBill(b) b.sx,b.sy,b.sz=S3Proj(b.x,b.y,b.z) b.sw=117.78*b.w/b.sz b.sh=117.78*b.h/b.sz b.slx,b.srx=S3Round(b.sx-0.5*b.sw), S3Round(b.sx+0.5*b.sw) b.sty,b.sby=S3Round(b.sy-0.5*b.sh), S3Round(b.sy+0.5*b.sh) end function _S3RendBills() local nclip,fclip=S3.NCLIP,S3.FCLIP local bills=S3.bills local r={} for i=1,#bills do local b=bills[i] b.vis=false _S3ProjBill(b) if b.slx<=S3.VP_R and b.srx>=S3.VP_L and b.sz>nclip and b.szb.sz then table.insert(l,i,b) return end end table.insert(l,b) end function _S3LightF(sx,sz) local FOG_S,FOG_E=S3.FOG_S,S3.FOG_E local csx=120-sx -- centered sx local d2=csx*csx+sz*sz if S3.FLIC_AMP>0 then local f=sin(time()*S3.FLIC_FM)*S3.FLIC_AMP d2=d2+f end local f=d20 then p=pool[#pool] table.remove(pool) else p={} end local ux,uy,uz=sin(theta)*cos(phi), sin(theta)*sin(phi),cos(theta) p.x,p.y,p.z=cx+ux*r,cy+uy*r,cz+uz*r local spd=spec.minSpd+ (spec.maxSpd-spec.minSpd)*random() p.vx,p.vy,p.vz=ux*spd,uy*spd,uz*spd p.ax,p.ay,p.az=0,(spec.fall and -200 or 0),0 if #spec.clr then p.clr=spec.clr[random(1,#spec.clr)] else p.clr=spec.clr end p.ttl=spec.ttl p.size=spec.size table.insert(parts,p) end end function _S3PartsUpdate() local parts=S3.parts local pool=S3.partPool local dt=S3.dt local floorY=S3.FLOOR_Y for i=#parts,1,-1 do local p=parts[i] p.ttl=p.ttl-dt p.vx,p.vy,p.vz=p.vx+p.ax*dt,p.vy+p.ay*dt,p.vz+p.az*dt p.x,p.y,p.z=p.x+p.vx*dt,p.y+p.vy*dt,p.z+p.vz*dt if p.ttl<0 or p.yvpL and sx+p.size=vpT and sy+p.sizenclip and szhi and hi or x) end function _S3Interp(x1,y1,x2,y2,x) if x2=x2 and y2 or (y1+(y2-y1)*(x-x1)/(x2-x1))) end function _S3TexSamp(tid,td,u,v) local SX,SY=td.w,td.h local tx=floor(u*SX)%SX local ty=floor(v*SY)%SY return _S3GetTexel(tid,tx,ty) end function _S3GetTexel(tid,texx,texy) local spid=tid+(texy//8)*16+(texx//8) texx=texx%8 texy=texy%8 return peek4(0x8000+spid*64+texy*8+texx) end function S3Dot(ax,az,bx,bz) return ax*bx+az*bz end function S3Norm(x,z) return sqrt(x*x+z*z) end function S3Normalize(x,z) local l=S3Norm(x,z) return x/l,z/l end local D_INVULN=false local D_RETAIN=true local D_SHOWFPS=false local D_STARTGREN=nil local D_HCL=nil local D_HASKEY=false local D_NOAWAKE=false local D_CLEARPMEM=false local D_NOCLIP=false local DIFFICULTY=1 local TSIZE=50 local PLR_CS=20 local FLOOR_Y=S3.FLOOR_Y local CEIL_Y=S3.CEIL_Y local DIFNAMES={"I'm Too Young To Die!","Ultraviolence","Nightmare!"} local ORIG_PAL={ [0]=0x140c1c, [1]=0x2c2c2c, [2]=0x716d69, [3]=0xaaaeaa, [4]=0x04a5ff, [5]=0x044cce, [6]=0x001c75, [7]=0x000440, [8]=0x380000, [9]=0x69241c, [10]=0x9d5948, [11]=0xc28d65, [12]=0x910000, [13]=0xff3400, [14]=0xffce00, [15]=0xffffff, } local BTN={ FWD=0, BACK=1, LEFT=2, RIGHT=3, FIRE=4, WEP=5, STRAFE=6, OPEN=7, } local MODE={ TITLE=0, -- title screen. LVLSEL=1, -- level select screen. PREROLL=2, -- level name preroll. INSTRUX=3, -- instructions screen. PLAY=4, -- playing level. DEAD=5, -- player is dead. MINIMAP=6, -- showing minimap. EOL=7, -- end of level. WIN=8, -- beat entire game. INTER=9, -- text intermission BANKLOAD=10, -- loading banks (before preroll) DIFSEL=11, -- difficuly selection } local bankSend={MODE.TITLE,0,0,0} local MUS={ LVL=-3, -- play level specific music (in Level) KEEP=-2, -- keep playing previous. NONE=-1, -- no music. --some will have the same number if spread across --multiple banks --mostly here for historical reasons E1M1=0, -- "at doom's gate" INTER=1, -- "intermission from doom" SANDY=2, -- "into sandy's city" README=3, -- "doom 2 text cluster" NOBODY=4, -- "nobody told me about id" HALLS=5, -- "dark halls" ADRIAN=6, -- "demons from adrian's pen" SHAWN=7, -- "shawn's got the shotgun" } local MODEMUS={ [MODE.TITLE]=MUS.INTER, [MODE.LVLSEL]=MUS.KEEP, [MODE.PREROLL]=MUS.NONE, [MODE.INSTRUX]=MUS.NONE, [MODE.PLAY]=MUS.LVL, [MODE.DEAD]=MUS.NONE, [MODE.MINIMAP]=MUS.KEEP, [MODE.EOL]=MUS.INTER, [MODE.WIN]=6, [MODE.INTER]=MUS.README, [MODE.BANKLOAD]=MUS.NONE, [MODE.DIFSEL]=MUS.KEEP, } local WL={ CHAINSAW=1, PISTOL=2, SHOTGUN=3, CHAINGUN=4, ROCKETS=5, PLASMA=6, BFG=7, } local A={ -- A for "App" mode=MODE.TITLE, mclk=0, -- time elapsed in current mode lftime=-1, -- last frame time, -1 if none. sel=1, -- current selection in menu } local G=nil -- deep copied from G_INIT local G_INIT={ ex=350, ey=25, ez=350, yaw=30, lftime=-1, -- last frame time clk=0, -- game clock, seconds laclk=0, --last attak time for reloading sound lvlNo=0, LVP=0, --lever glitch fix hp=100, ap=0, as=0.3, ammo={ [WL.SHOTGUN]=0, [WL.CHAINGUN]=20, [WL.ROCKETS]=0, [WL.PLASMA]=0, [WL.CHAINSAW]=666 }, maxam={ [WL.SHOTGUN]=50, [WL.CHAINGUN]=100, [WL.ROCKETS]=10, [WL.PLASMA]=75, [WL.CHAINSAW]=666 }, weps={ [WL.PISTOL]=1, [WL.SHOTGUN]=0, [WL.CHAINGUN]=0, [WL.ROCKETS]=0, [WL.PLASMA]=0, [WL.BFG]=0, [WL.CHAINSAW]=0 }, curWep=WL.PISTOL-1, lvl=nil, iwalls={}, doorAnim=nil, PSPD=170,PASPD=2.5, ents={}, grens=D_STARTGREN or 0, lastGrenT=-999, justHurt=nil, weapOver=nil, atk=0, atke=0, msg="", msgCd=0, gotoSecret=false, --hasKey=D_HASKEY or false, hasKey={false,false,false}, flash=nil, focC=nil,focR=nil, tm=0,ti=0,ts=0, minimapC=0, rsuitTimer=0, mmox,mmoy=0,0, mmseen={}, otiles={}, spawners={}, trigdone={}, enk=0, } local T={ VOID=0, -- void tiles on map (player can't FLOOR=16, -- floor tile on map (space where player TRIGGER=7, -- trigger tile (triggers spawners) SPAWNER=6, -- spawner (spawns entities) SECRET=52, -- secret area tile ETELE=187, } local S={ FLAG=240, META_0=241, HUD_KEY1=65, HUD_KEY2=102, HUD_KEY3=103, HUD_RSUIT=104, LOCK=188, ARROW=187, } local E={ DEMON=32, POTION=48, AMMO=64, ZOMB=49, KEY=65, KEY2=102, KEY3=103, LOSTSOUL=50, PILLAR=51, LIGHT=67, PORTAL=80, SECPOR=230, HELL=81, BIGDEMON=82, ARROW=1000, FIREBALL=1001, GREN=1002, BULLET=1003, SOUL=83, MEGA=38, BONUS=84, ABON=39, SKULL=86, HURTF=54, CRATE=36, FENCE=110, FATT=41, CACO=4, CACOBALL=1004, PAIN=9, SPITSOUL=1005, BOSS=191, TRACER=1006, ARACHPLASMA=1007, REV=96, AMMO2=66, ARMR=97, ARMR2=98, SPDR=10, ARACH=12, MEDKIT=99, ALLMAP=100, BACKPACK=101, CHAINGUN=176, SHOTGUN=255, CLIP=177, CLIP2=178, RKTLNCH=179, ROCKETAMMO=180, PLASGUN=181, PLASAMMO=182, CHAINSAW=183, BFG9000=184, RSUIT=104, PLRROCKET=1008, EROCKET=1009, PLRPLASMA=1010, CHSWBUL=1011, BFGBALL=1012, TELEP=106, SHOTGBUL=1013 } local PLR_WEP_FUNC={ [WL.PISTOL]={ {tid=TID.PISG_D,t=0.0,fire=0,x=8,y=0}, {tid=TID.PISG_D,t=0.2,fire=1,x=8,y=0,snd=SND.CHGG}, {tid=TID.PISG_N,t=0.2,fire=0,x=8,y=0}, {tid=TID.PISG_N,t=0.0,fire=0,x=8,y=0,refire=1} }, [WL.SHOTGUN]={ {tid=TID.CBOW_D,t=0.0,fire=0,y=0}, {tid=TID.CBOW_D,t=0.2,fire=1,y=0,bul=E.SHOTGBUL,snd=SND.ARROW,spray=6,vari=0.2}, {tid=TID.CBOW_N,t=0.1,fire=0,y=1}, {tid=TID.CBOW_N,t=0.1,fire=0,y=3,snd=SND.LOAD}, {tid=TID.CBOW_N,t=0.1,fire=0,y=6}, {tid=TID.CBOW_N,t=0.1,fire=0,y=3}, {tid=TID.CBOW_N,t=0.1,fire=0,y=1}, {tid=TID.CBOW_N,t=0.0,fire=0,y=0} }, [WL.CHAINGUN]={ {tid=TID.CHGG_D,t=0.0,fire=0,y=0}, {tid=TID.CHGG_D,t=0.1,fire=1,y=0,vari=0.05}, {tid=TID.CHGG_D,t=0.1,fire=0,y=2,snd=SND.CHGG}, {tid=TID.CHGG_N,t=0.1,fire=1,y=0,vari=0.05}, {tid=TID.CHGG_N,t=0.1,fire=0,y=2,snd=SND.CHGG}, {tid=TID.CHGG_N,t=0.0,fire=0,y=0,refire=1} }, [WL.ROCKETS]={ {tid=TID.RKTL_N,t=0.0,fire=0,y=0}, {tid=TID.RKTL_N,t=0.2,fire=0,y=4,snd=SND.RCKT}, {tid=TID.RKTL_N,t=0.2,fire=1,y=5,bul=E.PLRROCKET}, {tid=TID.RKTL_N,t=0.2,fire=0,y=3}, {tid=TID.RKTL_N,t=0.2,fire=0,y=1}, {tid=TID.RKTL_N,t=0.0,fire=0,y=0} }, [WL.PLASMA]={ {tid=TID.PLSM_N,t=0.0,fire=0,y=0}, {tid=TID.PLSM_N,t=0.05,fire=1,y=0,ry=4,bul=E.PLRPLASMA,snd=SND.PLAS}, {tid=TID.PLSM_N,t=0.0,fire=0,y=0,refire=1} }, [WL.CHAINSAW]={ {tid=TID.CHSW_A,t=0.0,fire=0,x=8,y=0}, {tid=TID.CHSW_A,t=0.05,fire=1,x=8,y=0,ry=2,bul=E.CHSWBUL,snd=SND.CHSW}, {tid=TID.CHSW_B,t=0.05,fire=1,x=8,y=0,ry=2,bul=E.CHSWBUL,snd=SND.CHSW}, {tid=TID.CHSW_N,t=0.0,fire=0,y=0,ry=1,refire=1,snd=SND.CHID} }, [WL.BFG]={ {tid=TID.BFGG_N,t=0.0,fire=0,x=-16,y=0}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=0,ry=2,snd=SND.BFGC}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.05,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.05,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.05,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.05,fire=0,x=-16,y=0,ry=2}, {tid=TID.BFGG_N,t=0.1,fire=1,x=-16,y=8,bul=E.BFGBALL,snd=SND.BFGF,uam=25}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=7}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=5}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=3}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=2}, {tid=TID.BFGG_N,t=0.1,fire=0,x=-16,y=1}, {tid=TID.BFGG_N,t=0.0,fire=0,x=-16,y=0,uam=25} }, } local MMTILES={ [T.FLOOR]=true, [E.PILLAR]=true, [E.LIGHT]=true, [E.SKULL]=true, [E.HELL]=true, [E.PORTAL]=true, [E.CRATE]=true, [E.FENCE]=true, [E.HURTF]=true, [E.BOSS]=true, [E.TELEP]=6, } local ANIM={ DEMON={inter=0.2,tids={TID.SARG_W1,TID.SARG_W2}}, CYBER={inter=0.2,tids={TID.CYB1,TID.CYB2}}, ZOMB={inter=0.2,tids={TID.ZOMB_W1,TID.ZOMB_W2}}, KEY={inter=0.2,tids={TID.KEY_1,TID.KEY_2}}, SKULL={inter=0.2,tids={TID.SKUL_1, TID.SKUL_2}}, FIREBALL={inter=0.2,tids={TID.FIREBALL_1, TID.FIREBALL_2}}, PORTAL={inter=0.2,tids={TID.PORTAL_1,TID.PORTAL_2, TID.PORTAL_1,TID.PORTAL_3}}, HELL={inter=0.1,tids={TID.HELL_1,TID.HELL_2,TID.HELL_1,TID.HELL_3}}, HURTF={inter=0.1,tids={TID.HURTF1,TID.HURTF2}}, FATTW={inter=0.4,tids={TID.FATTW1,TID.FATTW2}}, REVW={inter=0.1,tids={TID.REV1, TID.REV2}}, SPDR={inter=0.1,tids={TID.SPDR1, TID.SPDR2}}, } local YANCH={ FLOOR=0, -- entity anchors to the floor CENTER=1, -- entity is centered vertically CEIL=2, -- entity anchors to the ceiling } local ECFG_DFLT={ yanch=YANCH.FLOOR, } local ECFG={ [E.DEMON]={ w=50,h=50, anim=ANIM.DEMON, pursues=true, idealDist2=2500, wanderTime=0.5, wanderOnHurt=true, killsnd=SND.DHURT, speed=50, attacks=true, nightmareFast=true, nightmareResp=true, dmgMin=4,dmgMax=10, hp=20, vuln=true, solid=true, asleep=true, countkill=true, attseq={ {t=0.3,tid=TID.SARG_PRE}, {t=0.5,tid=TID.SARG_ATK,dmg=true}, {t=0.8,tid=TID.SARG_W1}, }, }, [E.BIGDEMON]={ w=70,h=70, anim=ANIM.CYBER, --cmt={[8]=7,[9]=6,[10]=5,[11]=4,[14]=13}, pursues=true, idealDist2=5000, wanderTime=0.0, wanderOnHurt=false, speed=90, attacks=false, shoots=true, shot=E.EROCKET, shotInt=1.0, shotSpd=150, shotSnd=SND.RCKT, nightmareShot=true, dmgMin=10,dmgMax=25, hp=100, vuln=true, solid=true, asleep=true, countkill=true, killpfx=PFX.BLAST, }, [E.ZOMB]={ w=40,h=40, anim=ANIM.ZOMB, pursues=true, idealDist2=25000, wanderTime=1.2, speed=50, attacks=false, nightmareResp=true, shoots=true, shot=E.BULLET, shotInt=2.0, shotSpd=200, shotSnd=SND.CHGG, shotPfx=PFX.SHOT, dmgMin=5,dmgMax=15, hp=10, asleep=true, vuln=true, solid=true, countkill=true, }, [E.LOSTSOUL]={ w=20,h=20, yanch=YANCH.CENTER, anim=ANIM.SKULL, pursues=true, idealDist2=2500, wanderTime=4, speed=60, attacks=true, nightmareFast=true, dmgMin=1,dmgMax=4, hp=10, vuln=true, solid=true, asleep=true, countkill=true, hurtpfx=PFX.NONE, killpfx=PFX.SOULKILL, attseq={ {t=0.2,tid=TID.SKUL_3}, {t=0.5,tid=TID.SKUL_3,dmg=true}, {t=0.3,tid=TID.SKUL_3}, }, }, [E.ARROW]={ w=8,h=8, ttl=2, tid=TID.ARROW, yanch=YANCH.CENTER, }, [E.SHOTGBUL]={ w=8,h=8, ttl=2, buldmg=2, tid=TID.ARROW, yanch=YANCH.CENTER, }, [E.PLRROCKET]={ w=8,h=8, ttl=2, lpfx=PFX.FIRE, tid=TID.FIREBALL, yanch=YANCH.CENTER, isgren=true, grendmg=20, fragile=true, }, [E.PLRPLASMA]={ w=16,h=16, anim=ANIM.FIREBALL, bulstun=0.7, ttl=2, yanch=YANCH.CENTER, fragile=true, }, [E.BFGBALL]={ w=40,h=40, anim=ANIM.FIREBALL, ttl=10, bulspd=30, buldmg=20, yanch=YANCH.CENTER, fragile=true, killpfx=PFX.TELE, killsnd=SND.BOOM, bfgball=true, }, [E.CHSWBUL]={ w=16,h=16, tid=TID.NONE, ttl=0.1, bulspd=100, buldmg=2, bulstun=0.9, yanch=YANCH.CENTER, }, [E.EROCKET]={ w=8,h=8, ttl=2, lpfx=PFX.FIRE, tid=TID.FIREBALL, yanch=YANCH.CENTER, isgren=true, grendmg=20, hurtsPlr=true, dmgMin=10, dmgMax=20,collRF=3, enemygren=true, fragile=true, grenblast=2000, }, [E.BULLET]={ w=8,h=8, ttl=2, tid=TID.BULLET, yanch=YANCH.CENTER, hurtsPlr=true, dmgMin=2, dmgMax=6,collRF=3, fragile=true, }, [E.POTION]={ w=16,h=16, tid=TID.STIM, }, [E.SOUL]={ w=32,h=32, tid=TID.SOUL, countitem=true, }, [E.MEGA]={ w=32,h=32, tid=TID.MEGA, countitem=true, }, [E.BONUS]={ w=16,h=16, tid=TID.BONUS, countitem=true, }, [E.ABON]={ w=16,h=16, tid=TID.ABON, countitem=true, }, [E.AMMO]={ w=16,h=16, tid=TID.AMMO, }, [E.AMMO2]={ w=16,h=14, tid=TID.AMMO2, }, [E.ARMR]={ w=32,h=32, tid=TID.ARMR, }, [E.ARMR2]={ w=32,h=32, tid=TID.ARMR, cmt={[4]=15,[5]=3,[6]=2,[7]=1}, }, [E.KEY]={ w=16,h=16, anim=ANIM.KEY, }, [E.KEY2]={ w=16,h=16, anim=ANIM.KEY, cmt={[4]=15,[5]=3,[6]=2,[7]=1}, }, [E.KEY3]={ w=16,h=16, anim=ANIM.KEY, cmt={[4]=11,[5]=10,[6]=9,[7]=8}, }, [E.FIREBALL]={ w=16,h=16, tid=TID.FIREBALL, ttl=2, yanch=YANCH.CENTER, hurtsPlr=true, dmgMin=20, dmgMax=50,collRF=3, fragile=true, -- can't go through solid tiles }, [E.ARACHPLASMA]={ w=16,h=16, anim=ANIM.FIREBALL, ttl=2, yanch=YANCH.CENTER, hurtsPlr=true, dmgMin=1, dmgMax=30,collRF=3, fragile=true, -- can't go through solid tiles }, [E.GREN]={ w=8,h=8, tid=TID.GREN, yanch=YANCH.CENTER, falls=true, fallVy0=40, }, [E.PILLAR]={ w=32,h=64, tid=TID.PILLAR, solid=true, }, [E.PORTAL]={ w=48,h=48, anim=ANIM.PORTAL, }, [E.SECPOR]={ w=48,h=48, anim=ANIM.PORTAL, cmt={[12]=6,[13]=5,[14]=4,[8]=7}, }, [E.LIGHT]={ w=20,h=40, tid=TID.LIGHT, solid=true, }, [E.HELL]={ w=30,h=30, anim=ANIM.HELL, --yanch=YANCH.CENTER, solid=true, }, [E.SKULL]={ w=8,h=16, tid=TID.SKULL, yanch=YANCH.CEIL, }, [E.HURTF]={ w=64,h=16, hurtAmbient=true, anim=ANIM.HURTF, }, [E.CRATE]={ w=70,h=64, tid=TID.CRATE, solid=true, }, [E.FENCE]={ w=70,h=50, tid=TID.FENCE, solid=true, }, [E.FATT]={ w=54,h=60, anim=ANIM.FATTW, pursues=true, idealDist2=25000, --wanderTime=1.2, speed=30, attacks=false, shoots=true, shot=E.FIREBALL, shotInt=2.0, shotSpd=200, shotSnd=SND.SPIT, shotPfx=PFX.SHOT, hurtsnd=SND.MHURT, killsnd=SND.MKILL, nightmareShot=true, dmgMin=15,dmgMax=40, mancSpecial=true, hp=45, asleep=true, vuln=true, solid=true, countkill=true, }, [E.CACOBALL]={ w=16,h=16, tid=TID.CACOBALL, ttl=2, yanch=YANCH.CENTER, hurtsPlr=true, dmgMin=10, dmgMax=30,collRF=3, fragile=true, -- can't go through solid tiles }, [E.CACO]={ w=40,h=40, tid=TID.CACO, pursues=true, yanch=YANCH.CENTER, idealDist2=25000, wanderTime=2, speed=50, attacks=false, nightmareResp=true, shoots=true, shot=E.CACOBALL, shotInt=1.5, shotSpd=200, shotSnd=SND.BALL, shotPfx=PFX.BALL, killsnd=SND.CKILL, nightmareShot=true, dmgMin=10,dmgMax=30, hp=25, asleep=true, vuln=true, solid=true, countkill=true, }, [E.PAIN]={ w=40,h=40, tid=TID.PAIN, pursues=true, yanch=YANCH.CENTER, idealDist2=25000, wanderTime=2, speed=50, attacks=false, nightmareResp=true, dnmclk=750, shoots=true, shot=E.SPITSOUL, shotInt=2, shotSpd=60, shotSnd=SND.SPIT, shotPfx=PFX.SPITSOUL, dmgMin=10,dmgMax=30, hp=15, asleep=true, vuln=true, solid=true, countkill=true, }, [E.SPITSOUL]={ w=20,h=20, yanch=YANCH.CENTER, anim=ANIM.SKULL, pursues=true, idealDist2=2500, wanderTime=4, speed=20, attacks=true, dmgMin=3,dmgMax=6, hp=2, vuln=true, --solid=true, --asleep=true, fragile=true, hurtpfx=PFX.NONE, killpfx=PFX.SOULKILL, attseq={ {t=0.4,tid=TID.SKUL_3}, {t=0.5,tid=TID.SKUL_3,dmg=true}, {t=0.5,tid=TID.SKUL_3}, }, }, [E.BOSS]={ w=140,h=70, tid=TID.BOSS, idealDist2=5000, wanderTime=0.0, wanderOnHurt=false, killEndLvl=true, hurtsnd=SND.BOSSH, killsnd=SND.BOSSD, speed=0, attacks=false, shoots=false, shot=E.FIREBALL, shotInt=1.0, shotSpd=200, shotSnd=SND.SPIT, hp=1000, vuln=true, solid=true, asleep=true, countkill=true, }, [E.TRACER]={ w=16,h=16, anim=ANIM.FIREBALL, ttl=2, yanch=YANCH.CENTER, tracer=true, hurtsPlr=true, dmgMin=10, dmgMax=30,collRF=3, fragile=true, -- can't go through solid tiles }, [E.REV]={ w=56,h=60, anim=ANIM.REVW, pursues=true, idealDist2=25000, --wanderTime=1.2, speed=35, attacks=false, nightmareResp=true, shoots=true, shot=E.TRACER, shotInt=2.0, shotSpd=200, shotSnd=SND.SPIT, shotPfx=PFX.SHOT, killsnd=SND.RKILL, nightmareShot=true, dmgMin=15,dmgMax=40, hp=40, asleep=true, vuln=true, solid=true, countkill=true, }, [E.SPDR]={ w=60,h=60, anim=ANIM.SPDR, pursues=true, idealDist2=25000, wanderTime=1.2, speed=40, attacks=false, shoots=true, shot=E.BULLET, shotInt=0.5, shotSpd=300, shotSnd=SND.SPIT, shotPfx=PFX.SHOT, dmgMin=1,dmgMax=15, hp=90, asleep=true, vuln=true, solid=true, countkill=true, }, [E.ARACH]={ w=40,h=40, anim=ANIM.SPDR, cmt={[12]=6,[13]=5,[14]=4}, pursues=true, idealDist2=25000, wanderTime=1.2, speed=40, attacks=false, nightmareResp=true, dnmclk=750, shoots=true, shot=E.ARACHPLASMA, shotInt=0.8, shotSpd=100, shotSnd=SND.PLAS, shotPfx=PFX.BALL, kilsnd=SND.AKILL, nightmareShot=true, dmgMin=1,dmgMax=15, hp=35, asleep=true, vuln=true, solid=true, countkill=true, }, [E.MEDKIT]={ w=24,h=16, tid=TID.MEDK, }, [E.ALLMAP]={ w=20,h=20, tid=TID.ALMP, }, [E.BACKPACK]={ w=20,h=20, tid=TID.BKPK, }, [E.CHAINGUN]={ w=45,h=25, tid=TID.CHAIN, }, [E.SHOTGUN]={ w=40,h=20, tid=TID.SHOTG, }, [E.CLIP]={ w=16,h=16, tid=TID.CLIP, }, [E.CLIP2]={ w=30,h=20, tid=TID.CLIP2, }, [E.RKTLNCH]={ w=50,h=25, tid=TID.RKTLNCH, }, [E.ROCKETAMMO]={ w=20,h=20, tid=TID.ROCKETAMMO, }, [E.PLASGUN]={ w=50,h=25, tid=TID.PLASGUN, }, [E.PLASAMMO]={ w=20,h=20, tid=TID.PLASAMMO, }, [E.CHAINSAW]={ w=50,h=25, tid=TID.CHAINSAW, }, [E.BFG9000]={ w=64,h=32, tid=TID.BFG9000, }, [E.RSUIT]={ w=30,h=30, tid=TID.RSUIT, }, [E.TELEP]={ w=48,h=12, tid=TID.TELEP, } } local TF={ N=1,E=2,S=4,W=8, NSLD=0x10, DOOR=0x20, LOCKED=0x40, LEVER=0x80, GATE=0x100, PORTAL=0x200, LOCK2=0x400, LOCK3=0x800, } TF.INTEREST=TF.DOOR|TF.LEVER|TF.GATE|TF.PORTAL local TD={ [1]={f=TF.S|TF.E,tid=TID.STONE}, [2]={f=TF.S,tid=TID.STONE}, [3]={f=TF.S|TF.W,tid=TID.STONE}, [17]={f=TF.E,tid=TID.STONE}, [18]={f=TF.N|TF.E|TF.S|TF.W,tid=TID.STONE}, [19]={f=TF.W,tid=TID.STONE}, [33]={f=TF.N|TF.E,tid=TID.STONE}, [34]={f=TF.N,tid=TID.STONE}, [35]={f=TF.N|TF.W,tid=TID.STONE}, [55]={f=TF.S|TF.E,tid=TID.WOOD}, [56]={f=TF.S,tid=TID.WOOD}, [57]={f=TF.S|TF.W,tid=TID.WOOD}, [71]={f=TF.E,tid=TID.WOOD}, [72]={f=TF.N|TF.E|TF.S|TF.W,tid=TID.WOOD}, [73]={f=TF.W,tid=TID.WOOD}, [87]={f=TF.N|TF.E,tid=TID.WOOD}, [88]={f=TF.N,tid=TID.WOOD}, [89]={f=TF.N|TF.W,tid=TID.WOOD}, [5]={f=TF.S|TF.DOOR,tid=TID.DOOR}, [20]={f=TF.E|TF.DOOR,tid=TID.DOOR}, [22]={f=TF.W|TF.DOOR,tid=TID.DOOR}, [37]={f=TF.N|TF.DOOR,tid=TID.DOOR}, [8]={f=TF.S|TF.DOOR|TF.LOCKED,tid=TID.LDOOR}, [23]={f=TF.E|TF.DOOR|TF.LOCKED,tid=TID.LDOOR}, [25]={f=TF.W|TF.DOOR|TF.LOCKED,tid=TID.LDOOR}, [40]={f=TF.N|TF.DOOR|TF.LOCKED,tid=TID.LDOOR}, [11]={f=TF.S|TF.LEVER,tid=TID.LEVER}, [26]={f=TF.E|TF.LEVER,tid=TID.LEVER}, [28]={f=TF.W|TF.LEVER,tid=TID.LEVER}, [43]={f=TF.N|TF.LEVER,tid=TID.LEVER}, [53]={f=TF.S|TF.GATE,tid=TID.GATE}, [68]={f=TF.E|TF.GATE,tid=TID.GATE}, [70]={f=TF.W|TF.GATE,tid=TID.GATE}, [85]={f=TF.N|TF.GATE,tid=TID.GATE}, [59]={f=TF.S|TF.DOOR,tid=TID.STONE}, [74]={f=TF.E|TF.DOOR,tid=TID.STONE}, [76]={f=TF.W|TF.DOOR,tid=TID.STONE}, [91]={f=TF.N|TF.DOOR,tid=TID.STONE}, [58]={f=TF.S|TF.DOOR,tid=TID.WOOD}, [90]={f=TF.E|TF.DOOR,tid=TID.WOOD}, [60]={f=TF.W|TF.DOOR,tid=TID.WOOD}, [92]={f=TF.N|TF.DOOR,tid=TID.WOOD}, [13]={f=TF.S|TF.DOOR|TF.LOCK2,tid=TID.L2DOOR}, [29]={f=TF.E|TF.DOOR|TF.LOCK2,tid=TID.L2DOOR}, [45]={f=TF.N|TF.DOOR|TF.LOCK2,tid=TID.L2DOOR}, [61]={f=TF.W|TF.DOOR|TF.LOCK2,tid=TID.L2DOOR}, [77]={f=TF.S|TF.DOOR|TF.LOCK3,tid=TID.L3DOOR}, [93]={f=TF.E|TF.DOOR|TF.LOCK3,tid=TID.L3DOOR}, [109]={f=TF.N|TF.DOOR|TF.LOCK3,tid=TID.L3DOOR}, [108]={f=TF.W|TF.DOOR|TF.LOCK3,tid=TID.L3DOOR}, [E.PORTAL]={f=TF.PORTAL|TF.NSLD}, [E.SECPOR]={f=TF.PORTAL|TF.NSLD}, } local LVL={ { name="HANGAR", pg=0,pgw=1,pgh=1, floorC=6,ceilC=8, lmus=MUS.E1M1, par=30, gbank=0,pbank=2,mbank=0, }, { name="ENTRYWAY", pg=1,pgw=1,pgh=2, floorC=9,ceilC=1, lmus=7, sRot=90, par=30, gbank=0,pbank=1,mbank=1, wallCmt={ [TID.DOOR]={[2]=6,[1]=7,[3]=5,[15]=4}, [TID.WOOD]={[9]=6,[8]=7,[10]=5}, }, }, { name="UNDERHALLS", pg=2,pgw=1,pgh=2, floorC=5,ceilC=1, lmus=MUS.HALLS, par=80, sRot=115, gbank=2,pbank=2,mbank=0, wallCmt={ [TID.DOOR]={[9]=12}, [TID.LDOOR]={[9]=12}, }, inter={ "You exit the infested starport,", "Only to find that you are no longer", "On Mars. The starport has been", "transported to Hell, and there are", "about a hundered hungry demons after", "humanity.", "They seem to be constructing a tower", "using the portal technology that got", "the base here to begin with.", "You are the last hope for humanity.", }, }, { name="THE TOWER OF BABEL", pg=3,pgw=2,pgh=2, floorC=8,ceilC=0, lmus=MUS.NOBODY, par=50, sRot=270, gbank=1,pbank=1,mbank=0, cyberSpecial=true, wallCmt={ [TID.WOOD]={[8]=7,[9]=6,[10]=5,[11]=4}, }, inter={ "As the remains of the cyberdemon", "crumbles into red giblets before", "your eyes, you see a pathway open", "up infront of you.", "You thought this was the end, but it", "seems the Shores of Hell await you.", }, }, { name="THE SHORES OF HELL", pg=5,pgw=1,pgh=1, floorC=10,ceilC=2, lmus=MUS.ADRIAN, par=30, sRot=135, gbank=1,pbank=0,mbank=0, }, { name="REFINERY", pg=6,pgw=2,pgh=2, floorC=2,ceilC=9, lmus=2, par=100, sRot=180, gbank=2,pbank=1,mbank=1, }, { name="DEAD SIMPLE", pg=8,pgw=1,pgh=1, floorC=9,ceilC=6, lmus=MUS.SHAWN, par=70, sRot=90, gbank=1,pbank=0,mbank=0, mancSpecial=true, wallCmt={ [TID.WOOD]={[9]=2,[8]=1,[10]=3,[11]=15}, [TID.STONE]={[1]=9,[0]=8,[2]=10,[3]=11}, }, }, { name="DEIMOS ANOMALY", pg=16,pgw=2,pgh=2, floorC=10,ceilC=0, lmus=2, par=200, gbank=0,pbank=1,mbank=2, teles={ [006035]={037,039,90}, [036037]={007,040,0}, [013039]={017,041,225}, [012064]={050,055,0}, [050057]={016,062,0}, [034049]={003,057,0}, [003059]={032,050,0}, [013042]={007,040,0}, }, }, { name="HELL KEEP", pg=13,pgw=1,pgh=1, floorC=11,ceilC=7, lmus=MUS.README, par=70, sRot=135, isSecret=true, gbank=3,pbank=1,mbank=0, teles={ [177018]={165,018,270}, [167018]={177,020,180}, }, }, { name="PLUTONIUM", pg=18,pgw=2,pgh=2, floorC=11,ceilC=7, lmus=0, par=170, sRot=180, gbank=1,pbank=3,mbank=1, wallCmt={ [TID.WOOD]={[8]=7,[9]=6,[10]=5,[11]=4}, [TID.LEVER]={[8]=7,[9]=6,[10]=5,[11]=4}, [TID.LEVER_P]={[8]=7,[9]=6,[10]=5,[11]=4}, [TID.STONE]={[0]=13,[1]=12,[2]=0,[3]=1}, [TID.DOOR]={[8]=0,[9]=1,[10]=2,[11]=3}, [TID.LDOOR]={[8]=0,[9]=1,[10]=2,[11]=3,[7]=8,[6]=9,[5]=10,[4]=11}, }, }, { name="DEAD", pg=20,pgw=2,pgh=2, floorC=3,ceilC=7, lmus=3, par=125, sRot=90, gbank=0,pbank=4,mbank=1, wallCmt={ [TID.STONE]={[1]=7,[2]=6,[3]=5,[15]=4}, }, inter={ "You find yourself in a UAC base...", "except this one isn't only crawling", "with demonspawn.", "No, this is the lost starport of", "Deimos, now lying in the deep pits", "of hell.", "There's only one way out.", "Destory anything that moves.", }, }, { name="MINING FACILITY", pg=22,pgw=1,pgh=2, floorC=10,ceilC=6, lmus=4, par=100, sRot=90, gbank=0,pbank=1,mbank=1, wallCmt={ [TID.LEVER_P]={[8]=7,[12]=6,[13]=5,[14]=4}, }, }, { name="HELL TO PAY", pg=23,pgw=1,pgh=2, floorC=0,ceilC=0, lmus=1, par=100, sRot=135, gbank=4,pbank=3,mbank=1, wallCmt={ [TID.STONE]={[0]=5,[1]=0,[2]=1,[3]=2}, [TID.WOOD]={[0]=5,[8]=0,[9]=8,[10]=9,[11]=10}, }, }, { name="MILITARY BASE", pg=32,pgw=2,pgh=2, floorC=2,ceilC=5, lmus=2, isSecret=true, par=190, sRot=90, gbank=0,pbank=3,mbank=1, }, { name="THE DOCKS", pg=34,pgw=1,pgh=2, floorC=11,ceilC=2, lmus=0, par=200, gbank=3,pbank=4,mbank=1, }, { name="LOADING BAY", pg=35,pgw=1,pgh=2, floorC=2,ceilC=0, lmus=MUS.ADRIAN, par=0, sRot=180, gbank=4,pbank=0,mbank=0, }, { name="SPIRAL OF DECAY", pg=36,pgw=2,pgh=2, floorC=0,ceilC=0, lmus=3, par=0, sRot=270, gbank=1,pbank=4,mbank=1, teles={ [171088]={166,094,90}, [165093]={167,091,0}, }, }, { name="DEAD SOULS", pg=38,pgw=1,pgh=2, floorC=2,ceilC=0, lmus=MUS.SANDY, par=280, sRot=180, gbank=1,pbank=3,mbank=0, }, { name="SCARLET HELLFIRE", pg=39,pgw=1,pgh=2, floorC=9,ceilC=3, lmus=6, par=160, sRot=180, gbank=1,pbank=0,mbank=1, wallCmt={ [TID.STONE]={[1]=7,[2]=6,[3]=5}, [TID.WOOD]={[8]=1,[9]=2,[10]=3,[11]=15}, }, inter={ "It's not everyday you end up", "fighting through blood-soaked", "corridors only to find yourself", "in a giant pit.", "At least, you hope that's not normal", "here.", "It looks like there's a whole new", "world of hurt awaiting you, but", "it's up to you whether it's you", "or them getting torn asunder.", "Hold that weapon close, soldier.", }, }, { name="THE CHASM", pg=48,pgw=2,pgh=2, floorC=11,ceilC=0, lmus=5, par=235, sRot=333, gbank=0,pbank=1,mbank=1, wallCmt={ [TID.STONE]={[1]=7,[2]=6,[3]=5,[15]=4}, }, teles={ [009126]={017,111,0}, }, }, { name="COMMAND CONTROL", pg=50,pgw=2,pgh=2, floorC=10,ceilC=2, lmus=7, par=170, sRot=250, gbank=0,pbank=1,mbank=1, wallCmt={ [TID.WOOD]={[8]=7,[9]=6,[10]=5,[11]=4}, }, }, { name="MT. EREBUS", pg=0,pgw=2,pgh=3, floorC=9,ceilC=0, lmus=MUS.SHAWN, par=222, sRot=45, lbank=1, gbank=3,pbank=0,mbank=0, teles={ [042042]={040,033,45}, [056038]={040,033,45}, [016043]={029,046,0}, [006030]={026,032,45}, [008005]={016,010,135}, [056003]={051,015,270}, }, }, { name="AND HELL FOLLOWED", pg=2,pgw=1,pgh=2, floorC=6,ceilC=10, lmus=0, par=250, lbank=1, gbank=3,pbank=1,mbank=1, }, { name="DETECTED", pg=3,pgw=2,pgh=2, floorC=3,ceilC=5, lmus=5, par=420, sRot=90, lbank=1, gbank=2,pbank=1,mbank=1, wallCmt={ [TID.WOOD]={[4]=3,[5]=2,[6]=1,[7]=0}, [TID.STONE]={[4]=3,[5]=2,[6]=1,[7]=0}, }, }, { name="RING OF PAIN", pg=5,pgw=2,pgh=2, floorC=10,ceilC=0, lmus=MUS.SANDY, par=0, --TODO lbank=1, gbank=1,pbank=2,mbank=0, wallCmt={ [TID.STONE]={[0]=13,[1]=12,[2]=8,[3]=0}, }, }, { name="TELEPANIC", pg=18,pgw=1,pgh=2, floorC=6,ceilC=0, lmus=1, par=0, --TODO sRot=135, isSecret=true, mancSpecial=true, lbank=1, gbank=2,pbank=1,mbank=2, wallCmt={ [TID.STONE]={[1]=7,[2]=6,[3]=5}, [TID.WOOD]={[1]=7,[2]=6,[3]=5,[8]=0,[9]=1,[10]=2,[11]=3}, }, teles={ [065037]={075,037,180}, [063039]={063,043,90}, [067045]={063,048,180}, [067041]={067,048,180}, [079041]={083,037,135}, [063053]={083,037,135}, [067053]={083,037,135}, [087037]={077,049,270}, [083041]={081,045,90}, [087041]={061,035,135}, [077045]={081,045,90}, [077053]={061,035,135}, [071049]={063,065,0}, [074065]={061,035,135}, [087053]={063,065,0}, [063046]={080,058,90}, [086058]={082,056,90}, [080056]={061,035,135}, }, }, { name="HANGAR?", pg=24,pgw=2,pgh=1, floorC=6,ceilC=8, lmus=MUS.E1M1, par=90, isSecret=true, lbank=1, gbank=0,pbank=2,mbank=0, teles={ [056055]={047,055,180}, }, }, { name="IRON TOWERS", pg=7,pgw=1,pgh=2, floorC=2,ceilC=12, lmus=2, par=300, lbank=1, gbank=0,pbank=1,mbank=2, wallCmt={ [TID.STONE]={[0]=6,[1]=0,[2]=1,[3]=2,[15]=3}, }, }, { name="THE LIVING END", pg=19,pgw=2,pgh=3, floorC=10,ceilC=0, lmus=MUS.SHAWN, par=425, lbank=1, gbank=3,pbank=4,mbank=0, wallCmt={ [TID.WOOD]={[1]=8,[2]=9,[3]=10,[15]=11,[8]=7,[9]=6,[10]=5,[11]=4}, [TID.GATE]={[1]=8,[2]=9,[3]=10,[15]=11,[8]=7,[9]=6,[10]=5,[11]=4}, }, teles={ [123073]={119,082,0}, [105070]={097,069,270}, [093074]={119,082,0}, [094066]={094,061,15}, [099062]={101,069,300}, [097050]={097,054,90}, [105050]={094,052,0}, [119041]={117,036,90}, [121036]={106,047,0}, [114041]={123,038,135}, [125054]={139,060,0}, [139051]={123,038,135}, [132054]={118,063,270}, [118060]={119,082,0}, }, inter={ "This is it.", "You are about to enter the worst", "pit of hell.", "", "I hope you are prepared." }, }, { name="HUNDEFELSEN", pg=32,pgw=3,pgh=3, floorC=2,ceilC=10, isSecret=true, sRot=90, lmus=4, par=90, lbank=1, gbank=5,pbank=5,mbank=2, }, { name="HANS", pg=43,pgw=1,pgh=3, floorC=2,ceilC=10, isSecret=true, lmus=3, par=25, lbank=1, gbank=5,pbank=0,mbank=2, }, { name="ICON OF SIN", pg=21,pgw=1,pgh=1, floorC=6,ceilC=0, lmus=5, par=150, lbank=1, gbank=1,pbank=1,mbank=2, teles={ [152045]={165,46,0}, }, inter={ "As the visage of the biggest", "demon you've ever seen melts", "in front of your eyes, it's limbs", "thrashing, you see a gap.", "A gap in the fabric of hell,", "allowing you to escape...", "", "...for now." }, } } DEBUGS=nil function EntAdd(etype,x,z) local e=Overlay({}, Overlay(ECFG_DFLT,ECFG[etype] or {})) e.x,e.z=x,z e.y=e.yanch==YANCH.FLOOR and FLOOR_Y+e.h*0.5 or (e.yanch==YANCH.CEIL and CEIL_Y-e.h*0.5 or (FLOOR_Y+CEIL_Y)*0.5) e.tid=e.anim and e.anim.tids[1] or e.tid e.etype=etype e.ctime=G.clk e.bill={x=e.x,y=e.y,z=e.z,w=e.w,h=e.h, tid=e.tid,ent=e,cmt=e.cmt} S3BillAdd(e.bill) table.insert(G.ents,e) return e end function CheckSecPor() local ents=G.ents for i=1,#ents do local e=ents[i] if e.etype==E.SECPOR then if DistSqToPlr(e.x,e.z)<1000 then G.gotoSecret=true end end end end function CheckTeleports() local ents=G.ents for i=1,#ents do local e=ents[i] if e.etype==E.TELEP then if DistSqToPlr(e.x,e.z)<1000 then local c0,r0=MapPageStart(G.lvl.pg) local c,r=floor(e.x/TSIZE),floor(e.z/TSIZE) local tloc=G.lvl.teles[((c+c0)*1000)+(r+r0)] if tloc then G.ex,G.ez=(((tloc[1]-c0)+0.5)*TSIZE),(((tloc[2]-r0)+0.5)*TSIZE) G.yaw=math.rad(-tloc[3]) S3PartsSpawn(G.ex,e.y,G.ez,PFX.TELE) Snd(SND.TELE) else e.dead=true S3PartsSpawn(e.x,e.y,e.z,PFX.SOULKILL) Snd(SND.HIT) Say("It's broken.") end end end end end function CheckEntHits() local ents=G.ents for i=1,#ents do local e=ents[i] local pickupList={ E.KEY,E.KEY2,E.KEY3,E.GREN_BOX,E.SOUL, E.BONUS,E.MEGA,E.ABON,E.AMMO,E.POTION,E.AMMO2,E.ARMR, E.ARMR2,E.MEDKIT,E.ALLMAP,E.BACKPACK,E.CHAINGUN, E.CLIP,E.CLIP2,E.RSUIT,E.RKTLNCH,E.ROCKETAMMO, E.PLASGUN,E.PLASAMMO,E.CHAINSAW,E.BFG9000,E.SHOTGUN, } if e.etype==E.GREN or e.isgren then CheckGrenBlast(e) elseif e.playerBul then CheckArrowHit(e) elseif table.contains(pickupList,e.etype) then CheckPickUp(e) end end end function CalcHitTarget(proj) local ents=G.ents local zob=S3.zobills for i=1,#zob do local e=zob[i].ent if not e.dead and not e.nmdead and e.vuln and e.bill.vis and ProjHitEnt(proj,e) then return e end end return nil end function CheckArrowHit(arrow) local e=CalcHitTarget(arrow) if not e then return end arrow.dead=true if arrow.killpfx then S3PartsSpawn(arrow.x,arrow.y,arrow.z,arrow.killpfx) end if arrow.killsnd then Snd(arrow.killsnd) end --local age=G.clk-arrow.ctime local dmg=arrow.buldmg or 8 --max(1,S3Round(10-age*20)) HurtEnt(e,dmg) if arrow.bulstun then if random(0,10)/10<=arrow.bulstun then e.attStun=true end end end function HurtEnt(e,dmg) if not e.hp then return end e.hp=e.hp-dmg e.hurtT=G.clk if e.hp<0 then if DIFFICULTY==2 and e.nightmareResp then e.nmdead=true e.nmclk=e.dnmclk or 800 else e.dead=true end Snd(e.killsnd or SND.KILL) S3PartsSpawn(e.x,e.y,e.z,e.killpfx or PFX.KILL) if e.countkill then LVLKil=LVLKil+1 end ftmr=-20 if G.lvl.cyberSpecial and e.etype==E.BIGDEMON then G.enk=120 --CheckLevelEnd() end if G.lvl.mancSpecial and e.mancSpecial then local doPullLever=true local ents=G.ents for i=1,#ents do local e0=ents[i] if e0.etype==E.FATT and e0~=e then doPullLever=false end end if doPullLever then PullLever(-1,0) end end if e.killEndLvl then G.enk=120 end else Snd(e.hurtsnd or SND.HIT) S3PartsSpawn(e.x,e.y,e.z,e.hurtpfx or PFX.HURT) if e.wanderOnHurt then EntStartWander(e,0.3) end end end function CheckPickUp(item) if DistSqToPlr(item.x,item.z)<400 then if item.etype==E.POTION and G.hp<100 then G.hp=min(100,G.hp+25) Say("Stimpack +25") item.dead=true Snd(SND.BONUS) elseif item.etype==E.AMMO and G.ammo[WL.SHOTGUN]DistSqXZ(px,pz,e.x,e.z) then return true end end return false end function UpdateEnts() local ents=G.ents UpdateFlash() for i=1,#ents do local e=ents[i] UpdateEnt(e) if not D_NOAWAKE then e.asleep=e.asleep and not e.bill.vis end end for i=#ents,1,-1 do if ents[i].dead then if ents[i].isgren then CheckGrenBlast(ents[i]) end ents[i].bill.ent=nil -- break cycle, help GC S3BillDel(ents[i].bill) ents[i]=ents[#ents] table.remove(ents) end end end function UpdateMisc() if G.etele then G.etelec=G.etelec-1 --Say(G.etelec) if G.etelec==0 then G.etelec=350 local spawntable={E.ZOMB,E.ZOMB,E.ZOMB,E.ZOMB,E.DEMON, E.DEMON,E.CACO,E.ROCKETAMMO,E.AMMO2,E.CLIP2,E.MEDKIT, E.LOSTSOUL,E.ZOMB,E.ZOMB,E.DEMON,E.ROCKETAMMO } local et=G.etele pos={} for tok in string.gmatch(et[G.etelet+1], "[^,]+") do table.insert(pos,tok) end local e=EntAdd(spawntable[math.random(#spawntable)],(tonumber(pos[1])+0.5)*TSIZE,(tonumber(pos[2])+0.5)*TSIZE) e.nightmareResp=false e.ttl=70 S3PartsSpawn(e.x,e.y,e.z,PFX.TELE) Snd(SND.TELE) --Say(pos[1]) G.etelet=(G.etelet+1)%#et end end end function CheckGrenBlast(gren) local BLASTR2=gren.grenblast or 30000 -- blast radius, squared local VBLASTR2=gren.grenbvis or (gren.grenblast or 45000) -- visual blast radius, squared if gren.enemygren then if not gren.dead then return end else local solid=IsInSolidTile(gren.x,gren.z) local et=CalcHitTarget(gren) if not solid and not et and gren.y>FLOOR_Y then return end gren.dead=true end if G.flash then S3FlashDel(G.flash) end G.flash=S3FlashAdd({x=gren.x,z=gren.z, int=10,fod2=VBLASTR2}) if gren.enemygren then local d2=DistSqToPlr(gren.x,gren.z) local dmg=gren.grendmg or 40 if d22500 then e.nmclk=nil e.nmdead=false e.hp=ECFG[e.etype].hp S3PartsSpawn(e.x,e.y,e.z,PFX.TELE) Snd(SND.TELE) end end end function UpdateEntAnim(e) if e.anim then local frs=floor((G.clk-e.ctime)/e.anim.inter) e.tid=e.anim.tids[1+frs%#e.anim.tids] end end function EntBehFragile(e) if IsInSolidTile(e.x,e.z) then e.dead=true if e.killpfx then S3PartsSpawn(e.x,e.y,e.z,e.killpfx) end if e.killsnd then Snd(e.killsnd) end --if e.bfgball then Say(#G.ents) end end end function EntBehPursues(e) if not e.speed then return end local calcSpd=e.speed if e.nightmareFast and DIFFICULTY==2 then calcSpd=calcSpd*2 end local ideald2=e.idealDist2 or 2500 local dist2=DistSqXZ(e.x,e.z,G.ex,G.ez) if dist2>250000 then return end local dt=G.dt if e.pursueWcd then e.pursueWcd=e.pursueWcd-dt if e.pursueWcd<0 then e.pursueWcd=nil end local px,pz=e.x+e.pursueWvx*dt, e.z+e.pursueWvz*dt if IsPosValid(px,pz,e) then e.x,e.z=px,pz return end e.pursueWcd=nil end local bestx,bestz,bestd2,bestmx,bestmz= nil,nil,nil,nil,nil for mz=-1,1 do for mx=-1,1 do local px,pz=e.x+mx*calcSpd*dt, e.z+mz*calcSpd*dt if IsPosValid(px,pz,e) then local d2=DistSqToPlr(px,pz) if not bestd2 or abs(d2-ideald2)e.x then e.vx=e.vx+5 end if G.exe.z then e.vz=e.vz+5 end if G.ez3000 then return end -- too far. e.origAnim=e.anim e.att=1 e.atte=0 -- elapsed e.anim=nil end e.atte=e.atte+G.dt if e.atte>e.attseq[e.att].t then e.att=e.att+1 if e.att>#e.attseq then e.att=nil e.anim=e.origAnim elseif e.attseq[e.att].dmg then HurtPlr(random(e.dmgMin,e.dmgMax)) end end if e.att then e.tid=e.attseq[e.att].tid end if e.attStun then e.attStun=nil end end function EntBehShoots(e) assert(e.shot) assert(e.shotInt) assert(e.shotSpd) e.shootC=(e.shootC or e.shotInt)-G.dt if DIFFICULTY==2 then e.shootC=e.shootC-G.dt end if e.shootC>0 then if e.attStun then e.attStun=nil end return end e.shootC=e.shotInt if e.attStun then e.attStun=nil return end local vx,vz=V2Normalize(G.ex-e.x,G.ez-e.z) local shot=IxEntAdd(e.shot,e.x,e.z) local calcSpd=e.shotSpd if e.nightmareShot and DIFFICULTY==2 then calcSpd=calcSpd*2 end shot.vx,shot.vz=vx*calcSpd,vz*calcSpd if e.shotPfx then S3PartsSpawn(e.x,e.y,e.z,e.shotPfx) end if e.shotSnd and DistSqToPlr(e.x,e.z)<80000 then Snd(e.shotSnd) end end function EntBehHurtsPlr(e) local d2=DistSqToPlr(e.x,e.z) local r=(e.collRF or 1)*e.w*0.5 if d21.5 then G.doorAnim=nil return end end function GetFocusTile() local fx,fz=PlrFwdVec(TSIZE) local c,r= floor((G.ex+fx)/TSIZE),floor((G.ez+fz)/TSIZE) local t=LvlTile(c,r) local td=TD[t] if not td then return nil,nil end if 0~=td.f&TF.INTEREST then return c,r else return nil,nil end end function UpdateFocusTile() G.focC,G.focR=GetFocusTile() end function Interact() if not G.focC then return end local td=TD[LvlTile(G.focC,G.focR)] if td.f&TF.DOOR~=0 then DoorOpen(G.focC,G.focR) elseif td.f&TF.LEVER~=0 then PullLever(G.focC,G.focR) G.LVP=1 end end function LoadLevel(lvlNo) PalSet() if (not D_RETAIN) or G==nil or G.hp==0 then G=DeepCopy(G_INIT) else local rhp,rap,ras=G.hp,G.ap,G.as local ram,mam=DeepCopy(G.ammo),DeepCopy(G.maxam) local wep=DeepCopy(G.weps) G=DeepCopy(G_INIT) G.hp,G.ap,G.as=rhp,rap,ras G.ammo,G.maxam=DeepCopy(ram),DeepCopy(mam) G.weps=DeepCopy(wep) end G.lvlNo=lvlNo G.lvl=LVL[lvlNo] sync(4,G.lvl.lbank) G.tm,G.ti,G.ts=CountTotals() lvlmus=G.lvl.lmus lvlint=G.lvl.inter sec=0 ftmr=0 face=388 sf={} LVLSec=0 LVLKil=0 LVLItm=0 local lvl=G.lvl S3Reset() S3.FLOOR_CLR,S3.CEIL_CLR=lvl.floorC,lvl.ceilC G.ex=nil LoadSpawners() for r=0,lvl.pgh*17-1 do for c=0,lvl.pgw*30-1 do local cx,cz=(c+0.5)*TSIZE,(r+0.5)*TSIZE local t=LvlTile(c,r) local lbl=TileLabel(c,r) local td=TD[t] if td then AddWalls(c,r,td) end if t==S.FLAG then assert(lbl) if lbl==0 then G.ex,G.ez=cx,cz if G.lvl.sRot then G.yaw=math.rad(-G.lvl.sRot) else G.yaw=0 end end end if not D_NOENTS and ECFG[t] then EntAdd(t,cx,cz) end if LvlTile(c,r)==T.ETELE then local ettl=c..","..r if not G.etele then G.etele={} G.etelet=0 G.etelec=300 end if not table.contains(G.etele,ettl) then table.insert(G.etele,ettl) end end end end assert(G.ex,"Start pos flag not found.") G.weapOver=S3OverAdd({sx=104,sy=88,tid=460,scale=2}) end function LoadSpawners() local cols,rows=LvlSize() G.spawners={} for r=0,rows-1 do for c=0,cols-1 do local t=LvlTile(c,r) if t==T.SPAWNER then LoadSpawner(c,r) end end end end function LoadSpawner(c0,r0) local lbl=TileLabel(c0,r0) assert(lbl) LvlTile(c0,r0,T.FLOOR) -- remove spawner from map if not G.spawners[lbl] then G.spawners[lbl]={} end for r=r0-1,r0+1 do for c=c0-1,c0+1 do local t=LvlTile(c,r) if ECFG[t] then LvlTile(c,r,T.FLOOR) local cx,cz=(c+0.5)*TSIZE,(r+0.5)*TSIZE table.insert(G.spawners[lbl],{x=cx,z=cz,eid=t}) end end end end function CheckTriggers() local c,r=floor(G.ex/TSIZE),floor(G.ez/TSIZE) if LvlTile(c,r)==T.SECRET then local secl=c..","..r if not table.contains(sf,secl) then table.insert(sf,secl) sec=50 LVLSec=LVLSec+1 end return end if LvlTile(c,r)~=T.TRIGGER then return end local lbl=TileLabel(c,r) if not lbl or G.trigdone[lbl] then return end G.trigdone[lbl]=true local spawner=G.spawners[lbl] if not spawner then return end for i=1,#spawner do local s=spawner[i] local ent=EntAdd(s.eid,s.x,s.z) ent.asleep=false end end function LvlTile(c,r,newval) local cols,rows=LvlSize() if c>=cols or r>=rows or c<0 or r<0 then return 0 end local val=G.otiles[r*240+c] if not val then local c0,r0=MapPageStart(G.lvl.pg) val=mget(c0+c,r0+r) end if newval then G.otiles[r*240+c]=newval end return val end function LvlSize() return G.lvl.pgw*30,G.lvl.pgh*17 end function LvlTileAtXz(x,z) local c,r=floor(x/TSIZE),floor(z/TSIZE) return LvlTile(c,r) end function CountTotals() local countmons={4,9,10,12,32,41,49,50,82,96} local countitem={38,39,83,84,100} local cols,rows=LvlSize() local tm,ti,ts=0,0,0 for r=0,rows-1 do for c=0,cols-1 do local t=LvlTile(c,r) if table.contains(countitem,t) then ti=ti+1 elseif table.contains(countmons,t) then tm=tm+1 elseif t==52 then ts=ts+1 end end end return tm,ti,ts end function PullLever(c,r) if G.LVP==1 then return end if c>-1 then LvlTile(c,r,T.SOLID) local w=IwallAt(c,r) if w then w.tid=TID.LEVER_P end end local cols,rows=LvlSize() local gatec,gater=nil,nil for r=0,rows-1 do for c=0,cols-1 do local t=LvlTile(c,r) if TD[t] and TD[t].f&TF.GATE~=0 then gatec,gater=c,r assert(gatec) local w=IwallAt(gatec,gater) assert(w) IwallDel(gatec,gater) S3WallDel(w) LvlTile(gatec,gater,T.FLOOR) --break end end end --Say("THE GATE OPENED!") end function GetInteractHint() local c,r=G.focC,G.focR if not c then return end local hint=nil local td=TD[LvlTile(c,r)] if td.f&TF.DOOR~=0 then --if td.f&TF.LOCKED~=0 then -- if G.hasKey[0] then -- return "Press S to unlock" -- else -- return "This door requires a key." -- end --else return "Press S to open door" --end elseif td.f&TF.LEVER~=0 then return "Press S to activate" elseif td.f&TF.GATE~=0 then return "This door requires a switch." elseif td.f&TF.PORTAL~=0 then return "Step into the portal." end return nil end function CheckLevelEnd() local t=LvlTileAtXz(G.ex,G.ez) if G.enk>0 then G.enk=G.enk-1 end if (TD[t] and TD[t].f&TF.PORTAL)or G.enk==1 then SetMode(MODE.EOL) --Snd(SND.EOL) MarkLvlDone(G.lvlNo) sync(16,0) end end function PalSet(tint) tint=tint or {r=0,g=0,b=0,a=0} for c=0,15 do local origR=((ORIG_PAL[3*c])) local origG=((ORIG_PAL[3*c+1])) local origB=((ORIG_PAL[3*c+2])) local r=_S3Interp(0,origR,255,tint.r,tint.a) local g=_S3Interp(0,origG,255,tint.g,tint.a) local b=_S3Interp(0,origB,255,tint.b,tint.a) poke(0x3fc0+3*c,clamp(S3Round(r),0,255)) poke(0x3fc0+3*c+1,clamp(S3Round(g),0,255)) poke(0x3fc0+3*c+2,clamp(S3Round(b),0,255)) end end function OrigPalFill() for c=0,15*3+2 do ORIG_PAL[c]=peek(0x3fc0+c) end end function Rend() S3SetCam(G.ex,G.ey,G.ez,G.yaw) S3Rend() RendHud(true) if G.lvlNo<=1 then RendHint() end if sec>0 then sec=sec-1 PrintC("A secret has been revealed.",120,50,14) end if G.msgCd>0 then G.msgCd=G.msgCd-G.dt print(G.msg,8,100,13) end if DEBUGS then print(DEBUGS,4,12) end end function RendHud(full) local HUDY=120 local BOXW,BOXH,BOXCLR=14,8,2 local HPX,HPY=29,HUDY+7 local APX,APY=61,HUDY+7 local AMMOX,AMMOY=6,HUDY+6 local GRENX,GRENY=23*8,HUDY-1 local FACEX,FACEY=100,HUDY+6 local KEYX,KEYY=19.75*8,HUDY+3 if full then local c0,r0=MapPageStart(63) map(c0,r0,30,2,0,HUDY) print("Hold S",15*8,HUDY+4,1) print("for map",14.5*8,HUDY+10,1) else rect(HPX,HPY,BOXW+5,BOXH,BOXCLR) rect(APX,APY,BOXW+5,BOXH,BOXCLR) rect(AMMOX,AMMOY,BOXW+5,BOXH,BOXCLR) --rect(GRENX,GRENY,BOXW,BOXH,BOXCLR) end if G.hp>20 or Blink(0.3,0.2) then print(G.hp,HPX+2,HPY, G.hp>20 and 15 or 14,true) end print(G.ap,APX+2,APY,15) local ammoID=WeaponAmmoConv(G.curWep+1) if G.ammo[ammoID]~=666 then print(G.ammo[ammoID],AMMOX+2,AMMOY+1,15,true) end spr(TID.CLIP,GRENX,GRENY,0) print(G.ammo[WL.CHAINGUN] or 0,GRENX+8,GRENY+3,15) spr(TID.AMMO,GRENX+24,GRENY,0) print(G.ammo[WL.SHOTGUN] or 0,GRENX+24+8,GRENY+3,15) spr(TID.ROCKETAMMO,GRENX,GRENY+8,0) print(G.ammo[WL.ROCKETS] or 0,GRENX+8,GRENY+3+8,15) spr(TID.PLASAMMO,GRENX+24,GRENY+8,0) print(G.ammo[WL.PLASMA] or 0,GRENX+24+8,GRENY+3+8,15) --print(To2Dig(G.grens),GRENX+2,GRENY+1,15,true) RendFace(FACEX,FACEY) if G.justHurt then print("-"..G.justHurt.hp,100,10,15,true,2) end if G.hasKey[1] then spr(S.HUD_KEY1,KEYX,KEYY-2,0) end if G.hasKey[2] then spr(S.HUD_KEY2,KEYX+6,KEYY,0) end if G.hasKey[3] then spr(S.HUD_KEY3,KEYX+12,KEYY+2,0) end if G.rsuitTimer>0 then spr(S.HUD_RSUIT,8,HUDY-8,0) print(floor(G.rsuitTimer/10),2*8,HUDY-8,12) end if G.lvlNo==1 and G.clk<5 then rect(0,5,200,9,15) print("Z = shoot",2,7,0) end end function RendFace(fx,fy) ftmr=ftmr+1 if G.hp<=0 then face=407 elseif D_INVULN then face=405 elseif G.justHurt then if G.justHurt.hp>19 then face=406 else face=391 end else if ftmr<0 then face=404 elseif ftmr%18==0 and random(0,1)==0 then face=random(388,390) end end spr(face,fx,fy,2) end function RendHint() local hint=GetInteractHint() if hint then local X,Y,W,H=12,5,5.8*string.len(hint),8 rect(X,Y,W,H,15) print(hint,X+2,Y+2,0) end end function To2Dig(n) n=floor(n) return n<0 and "00" or (n<10 and "0"..n or ((n<100) and n or 99)) end function IsPosValid(x,z,ent) local cs=ent and ent.w*0.4 or PLR_CS local solid=IsInSolidTile(x-cs,z-cs) or IsInSolidTile(x-cs,z+cs) or IsInSolidTile(x+cs,z-cs) or IsInSolidTile(x+cs,z+cs) if solid then return false end local ents=G.ents for i=1,#ents do local e=ents[i] if e~=ent and e.solid then if not e.nmdead then local d2=DistSqXZ(e.x,e.z,x,z) if d2<0.25*(cs*cs+e.w*e.w) then return false end end end end if ent and DistSqToPlr(x,z)<2500 then return false end return true end function IsInSolidTile(x,z) if D_NOCLIP then return false end local c,r=floor(x/TSIZE),floor(z/TSIZE) local t=LvlTile(c,r) if t==T.VOID then return true end if t==T.FLOOR then return false end local td=TD[t] if not td then return false end return 0==td.f&TF.NSLD end function RotPoint(ox,oz,px,pz,alpha) local ux,uz=px-ox,pz-oz local c,s=cos(alpha),sin(alpha) return ox+ux*c-uz*s,oz+uz*c+ux*s end function Overlay(a,b) local result=DeepCopy(a) for k,v in pairs(b) do if result[k] and type(result[k])=="table" and type(v)=="table" then result[k]=Overlay(result[k],v) else result[k]=DeepCopy(v) end end return result end function DistSqXZ(x1,z1,x2,z2) return (x1-x2)*(x1-x2)+(z1-z2)*(z1-z2) end function DistXZ(x1,z1,x2,z2) return sqrt(DistSqXZ(x1,z1,x2,z2)) end function DistSqToPlr(x,z) return DistSqXZ(x,z,G.ex,G.ez) end function DistToPlr(x,z) return DistXZ(x,z,G.ex,G.ez) end function PlrFwdVec(scale,myaw) if not myaw then myaw=G.yaw end scale=scale or 1 return -sin(myaw)*scale,-cos(myaw)*scale end function V2Mag(x,z) return sqrt(x*x+z*z) end function V2Normalize(x,z) local mag=V2Mag(x,z) if mag>0.001 then return x/mag,z/mag else return 0,0 end end function DeepCopy(t) if type(t)~="table" then return t end local r={} for k,v in pairs(t) do if type(v)=="table" then r[k]=DeepCopy(v) else r[k]=v end end return r end function MapPageStart(pg) return (pg%8)*30,(pg//8)*17 end function MetaValue(t) if t>=S.META_0 and t<=S.META_0+9 then return t-S.META_0 end end function TileLabel(tc,tr) for c=tc-1,tc+1 do for r=tr-1,tr+1 do local mv=MetaValue(LvlTile(c,r)) if mv then return mv end end end return nil end function Blink(ondur,offdur,phase) ondur=ondur or 0.2 offdur=offdur or ondur phase=phase or 0 return ondur>math.fmod(A.mclk,(ondur+offdur)) end function GetDpad() local dx=btn(BTN.LEFT) and -1 or (btn(BTN.RIGHT) and 1 or 0) local dz=btn(BTN.FWD) and 1 or (btn(BTN.BACK) and -1 or 0) return dx,dz end function GetDpadP() local dx=btnp(BTN.LEFT) and -1 or (btnp(BTN.RIGHT) and 1 or 0) local dz=btnp(BTN.FWD) and 1 or (btnp(BTN.BACK) and -1 or 0) return dx,dz end function PrintC(text,cx,cy,color,fixed,scale) color=color or 15 fixed=fixed or false scale=scale or 1 local w,h=print(text,0,-10,color,fixed,scale),6 print(text,cx-w*0.5,cy-h*0.5,color,fixed,scale) end function IsLvlLocked(l) local hcl=D_HCL or (pmem(0) or 0) return l>hcl+1 end function MarkLvlDone(l) pmem(0,max(pmem(0) or 0,l)) end function Boot() if D_CLEARPMEM then pmem(0,0) end S3Init() SetMode(MODE.TITLE) end function SetMode(m) local old=A.mode A.mode,A.mclk=m,0 OrigPalFill() PalSet() local mus=MODEMUS[m] or MUS.KEEP or MUS.LVL if old==MODE.MINIMAP and m==MODE.PLAY then mus=MUS.KEEP end if mus~=MUS.KEEP then music(mus) end if mus==MUS.LVL then music(lvlmus) end end function cheats() if keys==0 and keyp(9) then keys="I" elseif keys=="I" and keyp(4) then keys="ID" elseif keys=="ID" and keyp(4) then keys="IDD" elseif keys=="IDD" and keyp(17) then keys="IDDQ" elseif keys=="IDDQ" and keyp(4) then keys=0 D_INVULN=not D_INVULN G.hp=max(G.hp,100) if D_INVULN then Say("Degrelessness Mode Activated") else Say("Degrelessness Mode Deactivated") end elseif keys=="ID" and keyp(6) then keys="IDF" elseif keys=="IDF" and keyp(16) then keys="IDFP" elseif keys=="IDFP" and keyp(19) then keys=0 D_SHOWFPS=not D_SHOWFPS if D_SHOWFPS then Say("FPS Display Activated") else Say("FPS Display Deactivated") end elseif keys=="ID" and keyp(14) then keys="IDN" elseif keys=="IDN" and keyp(9) then keys="IDNI" elseif keys=="IDNI" and keyp(14) then keys="IDNIN" elseif keys=="IDNIN" and keyp(10) then keys="IDNINJ" elseif keys=="IDNINJ" and keyp(1) then keys=0 D_NOAWAKE=not D_NOAWAKE if D_NOAWAKE then Say("No Target Activated") else Say("No Target Deactivated") end elseif keys=="IDF" and keyp(1) then keys=0 G.ammo=G.maxam G.weps[WL.SHOTGUN]=1 G.weps[WL.CHAINGUN]=1 G.weps[WL.ROCKETS]=1 G.weps[WL.PLASMA]=1 G.weps[WL.CHAINSAW]=1 G.weps[WL.BFG]=1 G.ap=max(G.ap,100) G.as=max(G.as,0.3) G.hp=max(G.hp,100) Say("Armour & Ammo") elseif keys=="ID" and keyp(11) then keys="IDK" elseif keys=="IDK" and keyp(6) then keys="IDKF" elseif keys=="IDKF" and keyp(1) then keys=0 G.maxam={ [WL.SHOTGUN]=100, [WL.CHAINGUN]=200, [WL.ROCKETS]=20, [WL.PLASMA]=150, [WL.CHAINSAW]=666 } G.ammo={ [WL.SHOTGUN]=100, [WL.CHAINGUN]=200, [WL.ROCKETS]=20, [WL.PLASMA]=150, [WL.CHAINSAW]=666 } G.weps[WL.SHOTGUN]=1 G.weps[WL.CHAINGUN]=1 G.weps[WL.ROCKETS]=1 G.weps[WL.PLASMA]=1 G.weps[WL.CHAINSAW]=1 G.weps[WL.BFG]=1 G.ap=200 G.as=0.5 G.hp=200 G.hasKey={true,true,true} Say("Very Happy Ammo") elseif keys=="ID" and keyp(13) then keys="IDM" elseif keys=="IDM" and keyp(21) then keys="IDMU" elseif keys=="IDMU" and keyp(19) then keys="IDMUS" Say("Input Music ID (0 to 7)") elseif keys=="IDMUS" and keyp(27) then keys=0 music(0) elseif keys=="IDMUS" and keyp(28) then keys=0 music(1) elseif keys=="IDMUS" and keyp(29) then keys=0 music(2) elseif keys=="IDMUS" and keyp(30) then keys=0 music(3) elseif keys=="IDMUS" and keyp(31) then keys=0 music(4) elseif keys=="IDMUS" and keyp(32) then keys=0 music(5) elseif keys=="IDMUS" and keyp(33) then keys=0 music(6) elseif keys=="IDMUS" and keyp(34) then keys=0 music(7) elseif keys=="IDMUS" and keyp() then keys=0 music(lvlmus) elseif keys=="IDM" and keyp(2) then keys="IDMB" Say("Input Music Bank (0 to 1)") elseif keys=="IDMB" and keyp(27) then keys=0 sync(16,0) elseif keys=="IDMB" and keyp(28) then keys=0 sync(16,1) elseif keys=="ID" and keyp(7) then keys="IDG" elseif keys=="IDG" and keyp(2) then keys="IDGB" Say("Input Graphics Bank (0 to 5)") elseif keys=="IDGB" and keyp(27) then keys=0 sync(3,0) elseif keys=="IDGB" and keyp(28) then keys=0 sync(3,1) elseif keys=="IDGB" and keyp(29) then keys=0 sync(3,2) elseif keys=="IDGB" and keyp(30) then keys=0 sync(3,3) elseif keys=="IDGB" and keyp(31) then keys=0 sync(3,4) elseif keys=="IDGB" and keyp(32) then keys=0 sync(3,5) elseif keys=="IDP" and keyp(2) then keys="IDPB" Say("Input Palette Bank (0 to 4)") elseif keys=="IDPB" and keyp(27) then keys=0 sync(32,0) elseif keys=="IDPB" and keyp(28) then keys=0 sync(32,1) elseif keys=="IDPB" and keyp(29) then keys=0 sync(32,2) elseif keys=="IDPB" and keyp(30) then keys=0 sync(32,3) elseif keys=="IDPB" and keyp(31) then keys=0 sync(32,4) elseif keys=="IDK" and keyp(5) then keys="IDKE" elseif keys=="IDKE" and keyp(25) then keys=0 G.hasKey={true,true,true} Say("You're on the list") elseif keys=="ID" and keyp(16) then keys="IDP" elseif keys=="IDP" and keyp(19) then keys=0 D_RETAIN=not D_RETAIN if not D_RETAIN then Say("Pistol Start Mode Activated") else Say("Pistol Start Mode Deactivated") end elseif keys=="IDD" and keyp(20) then keys=0 MinimapAllSeen() Say("Map Revealed") elseif keys=="ID" and keyp(12) then keys="IDL" elseif keys=="IDL" and keyp(22) then keys="IDLV" elseif keys=="IDLV" and keyp(12) then keys=0 for i=1,#LVL do MarkLvlDone(i) end Say("Levels unlocked.") elseif keys=="ID" and keyp(3) then keys="IDC" elseif keys=="IDC" and keyp(12) then keys="IDCL" elseif keys=="IDCL" and keyp(9) then keys="IDCLI" elseif keys=="IDCLI" and keyp(16) then keys=0 D_NOCLIP=not D_NOCLIP if D_NOCLIP then Say("No Clipping Mode Activated") else Say("No Clipping Mode Deactivated") end elseif keyp() then keys=0 end --print(keys,0,0,15) end function TIC() local stime=time() local dtmillis=A.lftime and (stime-A.lftime) or 16 A.lftime=stime A.dt=dtmillis*.001 -- convert to seconds local dt=A.dt A.mclk=A.mclk+dt local f=TICF[A.mode] if f then f() end if D_SHOWFPS then print(S3Round(1000/(time()-stime)).."fps") print(DIFFICULTY,0,8) end end function TICTitle() sync(3,0) local c,r=MapPageStart(62) map(c,r,30,17) PrintC("3D first-person shooter", 120,50,2) if Blink(0.3,0.2) then PrintC("- Press Z to play -",120,80) end if btnp(BTN.FIRE) then SetMode(IsLvlLocked(2) and MODE.INSTRUX or MODE.DIFSEL) A.sel=2 end end function TICDead() Rend() --rect(0,50,240,30,0) print("Press Z to go back to title.",20,60,13) if A.mclk<0.1 then Snd(SND.DEAD) end if A.mclk>0.5 and btn(BTN.FIRE) then syncBuffer=0 bankSend={MODE.TITLE,0,0,0,0} SetMode(MODE.BANKLOAD) return end end function TICWin() cls(0) local inter=G.lvl.inter for i=1,#inter do PrintC(inter[i],120,i*10,13) end if btnp(BTN.FIRE) then bankSend={MODE.TITLE,0,0,0,0} SetMode(MODE.BANKLOAD) end end function TICIntermission() cls(0) local inter=G.lvl.inter for i=1,#inter do PrintC(inter[i],120,i*10,13) end if A.mclk>8 then PrintC("Press Z to continue.",120,120,15) end if btnp(BTN.FIRE) and A.mclk>1 then StartLevel(G.lvlNo+1) end end function TICBankLoad() if syncBuffer==0 then sync(3,bankSend[2]) elseif syncBuffer==1 then sync(16,bankSend[3]) elseif syncBuffer==2 then sync(32,bankSend[4]) OrigPalFill() elseif syncBuffer==3 and bankSend[5] then sync(4,bankSend[5]) else SetMode(bankSend[1]) syncBuffer=0 return end cls() print("Loading..."..syncBuffer,80,20) print(G.lvl.pbank,80,30) syncBuffer=syncBuffer+1 end function TICPreroll() cls(0) PrintC("ENTERING",120,10,13) PrintC(G.lvl.name,120,20,13) if btnp(BTN.FIRE) and A.mclk>1 then EndPreroll() end end function EndPreroll() cls(0) SetMode(MODE.PLAY) RendHud(true) end function TICInstrux() local c,r=MapPageStart(61) cls(0) map(c,r,30,17) print("CONTROLS",100,10,15) local X=88 local Y=32 print("Strafe",X,Y,3) print("Open/Use",X,Y+16,3) print("",X,Y+48,14) print("FIRE",X,Y+64,4) print("Move",168,96,15) print("Mobile",41,113,4) print("Keyboard",41,121,4) if Blink(0.5) then print("PRESS FIRE TO CONTINUE",96,124,15) end if btnp(BTN.FIRE) then SetMode(MODE.DIFSEL) end end function TICDifSel() local mx,my=GetDpadP() A.sel=S3Clamp(A.sel-my,1,#DIFNAMES) local Y=50 local X={50,70,80} cls(0) PrintC("SELECT DIFFICULTY",120,10,15) if Blink(0.3,0.2) then PrintC("PRESS Z TO SELECT.",120,20,3) end for i=0,2 do PrintC(DIFNAMES[i+1],120,Y+(i*8),4+i) end spr(S.ARROW,X[A.sel],(Y+8*(A.sel-1))-4) if btnp(BTN.FIRE) then DIFFICULTY=A.sel-1 SetMode(MODE.LVLSEL) A.sel=1 end end function TICLvlSel() local mx,my=GetDpadP() A.sel=S3Clamp(A.sel-my+(mx*5),1,#LVL) local c,r=MapPageStart(62) cls(0) --map(c,r+10,30,17,0,80) PrintC("SELECT LEVEL",120,10,15) local X,Y=40,20 local RH=10 for i=1,#LVL do local y=Y+RH*i-(A.sel*RH)+20 local locked=IsLvlLocked(i) if i>=A.sel then pcol=(i%8)+4 if locked then spr(S.LOCK,X+10,y-2) end print(i..": "..LVL[i].name,X+20,y, locked and 2 or (i==A.sel and 15 or pcol)) end end spr(S.ARROW,X,2*RH+Y) if btnp(BTN.FIRE) and not IsLvlLocked(A.sel) then StartLevel(A.sel) end if IsLvlLocked(A.sel) then PrintC("THIS LEVEL IS LOCKED.",120,80,2) else if Blink(0.3,0.2) then PrintC("PRESS Z TO SELECT.",120,20,3) end end end function StartLevel(lvlNo) syncBuffer=0 LoadLevel(lvlNo) bankSend={MODE.PREROLL,G.lvl.gbank,G.lvl.mbank,G.lvl.pbank} SetMode(MODE.BANKLOAD) end function TICEol() cls(0) PrintC(G.lvl.name,120,10,13) PrintC("COMPLETED",120,20,13) PrintC(DIFNAMES[DIFFICULTY+1],120,30,12) if G.tm>0 then PrintC("KILLS: "..LVLKil.."/"..G.tm,120,60,13) end if G.ti>0 then PrintC("ITEMS: "..LVLItm.."/"..G.ti,120,70,13) end if G.ts>0 then PrintC("SECRETS: "..LVLSec.."/"..G.ts,120,80,13) end if G.clk<420 then lvt=floor(G.clk) else lvt="SUCKS!" end PrintC("TIME: "..lvt,60,100,13) if G.lvl.par>0 then PrintC("PAR: "..G.lvl.par,180,100,13) end if btnp(BTN.FIRE) and A.mclk>1 then if G.lvlNo>=#LVL then bankSend={MODE.WIN,0,2,0} SetMode(MODE.BANKLOAD) elseif G.lvl.inter~=nil then SetMode(MODE.INTER) else if G.gotoSecret then StartLevel(G.lvlNo+1) else local nextLev=G.lvlNo+1 while LVL[nextLev].isSecret do nextLev=nextLev+1 end StartLevel(nextLev) end end end end function TICPlay() cheats() G.dt=A.dt G.clk=G.clk+A.dt local PSPD=G.PSPD local dt=G.dt local mx,mz=GetDpad() local vx,vz=PlrFwdVec(mz) MovePlr(PSPD*dt,vx,vz) if btn(BTN.STRAFE) then vx=-math.sin(G.yaw-1.5708)*mx vz=-math.cos(G.yaw-1.5708)*mx MovePlr(PSPD*dt,vx,vz) else G.yaw=G.yaw-mx*G.PASPD*dt end if btnp(BTN.OPEN) then Interact() end G.minimapC=btn(BTN.OPEN) and G.minimapC+dt or 0 if G.minimapC>0.5 then G.minimapC=0 MinimapStart() return end DoorAnimUpdate(dt) CheckTriggers() UpdateFocusTile() UpdateJustHurt() UpdatePlrAtk() CheckPlrSwitch() CheckEntHits() UpdateEnts() UpdateMisc() MinimapUpdateOff() if G.lvl.teles then CheckTeleports() end if not gotoSecret then CheckSecPor() end CheckLevelEnd() if G.rsuitTimer>0 then G.rsuitTimer=G.rsuitTimer-1 end Rend() end function TICMinimap() MinimapTick() end function UpdateJustHurt() if not G.justHurt then return end G.justHurt.cd=G.justHurt.cd-G.dt if G.justHurt.cd<0 then PalSet() G.justHurt=nil return end end function CheckPlrSwitch() if (btnp(BTN.WEP) and G.atke==0 and G.atk==0) or G.weps[G.curWep+1]==0 then for i=G.curWep+2,#G.weps do if G.weps[i]==1 then G.curWep=i-1 G.atk=0 G.atke=0 return end end for i=0,G.curWep+1 do if G.weps[i]==1 then G.curWep=i-1 G.atk=0 G.atke=0 return end end end end function FireBullet(wepSP) local vari=0 if wepSP[G.atk].vari then vari=wepSP[G.atk].vari end local dx,dz=PlrFwdVec(4,G.yaw+((vari*random(-10,10))/10)) local arrow=EntAdd(wepSP[G.atk].bul or E.ARROW,G.ex+dx,G.ez+dz) arrow.playerBul=true arrow.y=G.ey-2 if arrow.bfgball then arrow.bfgyaw=G.yaw end arrow.vx,arrow.vz=dx*(arrow.bulspd or 200),dz*(arrow.bulspd or 200) end function FireWeapon(wepSP,ammoID) if G.atk>0 and wepSP[G.atk].fire==1 then if G.ammo[ammoID]>=(wepSP[G.atk].uam or 1) then if G.ammo[ammoID]~=666 then G.ammo[ammoID]=G.ammo[ammoID]-(wepSP[G.atk].uam or 1) end if wepSP[G.atk].spray then for i=1,wepSP[G.atk].spray do FireBullet(wepSP) end else FireBullet(wepSP) end G.laclk=A.mclk else Say("Out of ammo") Snd(SND.FAIL) end end end function WeaponAmmoConv(ammoID) if ammoID==WL.BFG then return WL.PLASMA end if ammoID==WL.PISTOL then return WL.CHAINGUN end return ammoID end function WeaponLogic(wepID) local ammoID=WeaponAmmoConv(wepID) local wepSP=PLR_WEP_FUNC[wepID] if G.atk==0 then if wepSP[#wepSP].refire and A.mclk>1 and btn(BTN.FIRE) or btnp(BTN.FIRE) then if G.ammo[ammoID]>=(wepSP[#wepSP].uam or 1) then G.atk=1 G.atke=0 else Say("Out of ammo") Snd(SND.FAIL) end end else G.atke=G.atke+G.dt if G.atke>wepSP[G.atk].t then G.atk=(G.atk+1)%(#wepSP+1) G.atke=0 if wepSP[G.atk] then if wepSP[G.atk].snd then Snd(wepSP[G.atk].snd) end end FireWeapon(wepSP,ammoID) end end local wepOfs=G.atk or 0 if wepOfs==0 then wepOfs=#wepSP end local wofs=0 if wepSP[wepOfs].ry then wofs=random(0,wepSP[wepOfs].ry) end if G.ammo[ammoID]<(wepSP[#wepSP].uam or 1) then wofs=wofs+8 end G.weapOver.sy=88+(wepSP[wepOfs].y or 0)+wofs G.weapOver.sx=104+(wepSP[wepOfs].x or 0) G.weapOver.tid=wepSP[wepOfs].tid if wepOfs==#wepSP then if wepSP[wepOfs].snd then Snd(wepSP[wepOfs].snd) end end end function UpdatePlrAtk() WeaponLogic(G.curWep+1) end function HurtPlr(hp) if D_INVULN then return end if DIFFICULTY==0 then hp=ceil(hp/2) end if G.ap>0 then G.hp=math.floor(max(G.hp-(hp*(1-G.as)),0)) G.ap=math.floor(max(G.ap-(hp*G.as),0)) tap=math.floor(hp/2) if G.ap<=0 then G.ap=0 G.as=0.3 end else G.hp=max(G.hp-hp,0) tap=hp end if G.hp==0 then SetMode(MODE.DEAD) Snd(SND.DIE) PalSet({r=0,g=0,b=0,a=80}) return end G.justHurt={hp=tap,cd=0.7} PalSet({r=255,g=0,b=0,a=40}) Snd(SND.HURT) end function MovePlr(d,vx,vz) local STEP=1 local ex,ez=G.ex,G.ez while d>0 do local l=min(d,STEP) -- how much to move this step d=d-STEP local ax,az=ex+l*vx,ez+l*vz -- full motion local bx,bz=ex,ez+l*vz -- move only in Z direction local cx,cz=ex+l*vx,ez -- move only in X direction if IsPosValid(ax,az) then ex,ez=ax,az elseif IsPosValid(bx,bz) then ex,ez=bx,bz elseif IsPosValid(cx,cz) then ex,ez=cx,cz else break end -- motion completely blocked end G.ex,G.ez=ex,ez end function Say(msg) G.msg=msg G.msgCd=1 end function Snd(snd) assert(snd.sfx) sfx(snd.sfx,snd.note,snd.dur,snd.chan or 0,snd.vol,snd.spd) end TICF={ [MODE.TITLE]=TICTitle, [MODE.LVLSEL]=TICLvlSel, [MODE.PLAY]=TICPlay, [MODE.DEAD]=TICDead, [MODE.INSTRUX]=TICInstrux, [MODE.MINIMAP]=TICMinimap, [MODE.PREROLL]=TICPreroll, [MODE.WIN]=TICWin, [MODE.EOL]=TICEol, [MODE.INTER]=TICIntermission, [MODE.BANKLOAD]=TICBankLoad, [MODE.DIFSEL]=TICDifSel, } Boot() function MinimapStart() SetMode(MODE.MINIMAP) G.mmox,G.mmoy=90-8*G.ex/TSIZE,68-8*G.ez/TSIZE end function MinimapFromWorld(x,z) return G.mmox+8*x/TSIZE,G.mmoy+8*z/TSIZE end function MinimapUpdateOff() local seen=G.mmseen local c0,r0=floor(G.ex/TSIZE),floor(G.ez/TSIZE) for r=r0-3,r0+3 do for c=c0-3,c0+3 do seen[r*240+c]=true end end end function MinimapTick() CheckPlrSwitch() local mx,my=GetDpad() G.mmox=G.mmox-mx G.mmoy=G.mmoy+my local c0,r0=MapPageStart(G.lvl.pg) local cols,rows=LvlSize() clip(S3.VP_L,S3.VP_T,S3.VP_R-S3.VP_L+1, S3.VP_B-S3.VP_T+1) cls(0) local startx,starty=MinimapFromWorld(0,0) map(c0,r0,cols,rows,S3Round(startx), S3Round(starty),0,1,MinimapRemap) if Blink(0.2,0.1) then local px,py=MinimapFromWorld(G.ex,G.ez) rect(px-1,py-1,3,3,4) local fx,fy=PlrFwdVec(8) line(px,py,px+fx,py+fy,6) end if btnp(BTN.OPEN) then SetMode(MODE.PLAY) end local IX,IY=170,0 local IW,IH=240-IX,110 local X0,Y0=IX+2,IY+2 local R=7 -- row height rect(IX,IY,IW,IH,1) rectb(IX,IY,IW,IH,15) local y=Y0 print("Buttons",X0,y,3) y=y+R print("Z",X0,y,4) print("fire",X0+10,y,6) y=y+R print("X",X0,y,14) print("weapon",X0+10,y,11) y=y+R print("A",X0,y,3) print("strafe",X0+10,y,2) y=y+R print("S",X0,y,3) print("open",X0+10,y,2) y=y+2*R print("Kills:",X0,y,2) y=y+R print(LVLKil.."/"..G.tm,X0,y,2) y=y+R print("Items:",X0,y,2) y=y+R print(LVLItm.."/"..G.ti,X0,y,2) y=y+R print("Secrets:",X0,y,2) y=y+R print(LVLSec.."/"..G.ts,X0,y,2) y=y+R print("Time:",X0,y,2) y=y+R print(floor(G.clk),X0,y,2) y=y+R local wlist={ [WL.PISTOL]=239, [WL.SHOTGUN]=255, [WL.CHAINGUN]=176, [WL.ROCKETS]=179, [WL.PLASMA]=181, [WL.BFG]=184, [WL.CHAINSAW]=183 } for i=1,#wlist do yofs=0 if G.curWep+1==i then yofs=4-((A.mclk*4)%2) end if G.weps[i]==1 then spr(wlist[i],X0+((i-1)*9),y-yofs,1) end end y=y+R print("Press S to close map",2,110,2) print("Level "..G.lvlNo..": "..G.lvl.name,2,2,15) print(DIFNAMES[DIFFICULTY+1],2,12,15) clip() end function MinimapAllSeen() local cols,rows=LvlSize() for c=0,cols do for r=0,rows do G.mmseen[r*240+c]=true end end end function MinimapRemap(t,c,r) local c0,r0=MapPageStart(G.lvl.pg) c,r=c-c0,r-r0 if not G.mmseen[r*240+c] then return T.VOID end if TD[t] then return t end if MMTILES[t] and MMTILES[t]~=true then return MMTILES[t] elseif MMTILES[t] then return t end return t==T.VOID and T.VOID or T.FLOOR end function table.contains(table,element) for _, value in pairs(table) do if value==element then return true end end return false end