XHH o`M_ri7X ( @ (//(  0/80@0?/8 0( ?G@POWOXOP?H0@/7@O_``h_hPX 0(P_oppxow_g@O/8'' 7p`o?G/7 0??H/8`/o?GOX@H0?/pOW?H/8 7OP?G/7( P0@PX@O0@ 0O @H/@' 00@@P0?'_OP@H( 7/7' ^^^^^^^^^^^^^^^^^^^^^^^^^^TeeBBBBeTT^^^^^^^eBDJ33333JJDBeZ^^^^TD33==#####==3JDBT^^^^eJ=###=3DeZ^^TB3# #=3JBZ^^T3#  #=JBT^^J# Sll #=JBZ^T# %,68??86,/@A*< ##45('.6787-9%:;*<=#$+&,--.,/01)2 3 $%&&'%($!)* ##  !"#     ??dGd@ sound_midi2X.midAllusion World.mid* xWY/b5Dq26 6BB !1DF@l5(KZ[lpfn6!9JU僘#BνS{M*& !4}M?&r_CSj&QWƝ}nS/<9ܬs[Zpg2"=[ȴ}J='Kf?:<>X|~.7)W=ʳo?Rȇ\"eRh%pkSL!EOW7#T~OLt*⫮K#7gu4ϼ:zWMsn~M^uo=xk{#z+Bb" )u!k(ϻ0>c%R `" bBs sB[cDFD ϼ N ~BD0%T*$LoAxsVm HpqV*H n bD'"+?#ZAHp[D b!As/AH0T1 \ k<]^} WY9qS8gb]\gݲ"vYWvֺ,keeٙjqf16 1 n'$$)qĩ VXNLz–zLףUZ&zZ)z&$AȤE111}+oH)+c=B2%b U?U30mVVYDY&ڢYmAt5*Nu~&[yԙ\.`{sԤLJXgDtu\?L%fJDbѨ%ַ7o.SG5QKq[ X.YZ&S[yqOM,| zP}/aKҕnU?7xK[ݶlgg&Vvwt;-i47'x T:|[RoUfu`cyCUC>%=mﶿ~~;tjM]N=^vcܻ[Bu\w.跄z c U}B(accE) }B.S\kٻ8]?G=#%>Bo@?gOwR} B>ƷA =]t}3( =-ПK%/>Ʒ@^g7C_cK蒥1藅 }RǨA5kBu5]'fQh}3ZRk,p3ŠY s|[H]V 2zVV.{ZWkZ֫F{VӿX[=o>Rk_E|sH"ˢN">A8[;Nՙ#!>)!zPJ$|U?80~%1>/wwV"i~1b'e+VJP4:m%Q!kPw~OkM#7XR6OJ*_bf?Y[mη)/CHCR4T0)H0B)))CH oYl՗vn:s#kGy׉z__^u?՗vͫU_^W})w.һ́?o7-|iwu۬f6sd]=2<*vːMzƆ^W3.]椅40m`&f5060ma`"qx(C,sf2I0=Q0 $d8 3a`20~0^ &m``:9Gs`np2*Vx)00'(+0[` L cc`f 4}DC`ren9Ù `|匏2/՘Q<=>r֬3d=ޏ,!gfgf !gfnp dGσN箯}h4Z߯|sh_~5z[ߧ=5^mW-|y2^7򾁗eʑ gCdP.B; 1 z؆j|wHW>A ݰnsI[6x0=~n^aeYa+Alنyޜa!wy'V,n0 掲  W\!L"c|Ɯ}Ng؃p vV*Θa2o# #t<#&^0\[24,{GYMDCӚniQ?43]jwv._;ݯE΢vkgQY~((\? snd_explosionX.wav explosion.wav'xmz"~[F{$(pҁ4MMMgpHMM-TvY" k0[{^{Vo՟׽~??Fg<7#ۭ(IDօVݨGINaEvm^^ҶU: %\%erki3h:, %I[WWFXvSM]qk z'a``,:S)L=V<]QJMCQ %Ajd_Wwo82tZt6rq=43@\:҇ K6R6~LFnԂ@Y5;KUW61Pf(w*+v5Hr)=:p/Sˉ-x n?Z®JQі=ZCpb_P /,igs:zݱ,(vivI((%TɬKf@yb=tl> z҉ti4x9 kD̞UZ Gp>SM>@u}Tjݨ^^Nyr^Y;Mv&gpݺD͗[Ĕ'Q=༘l_2"8 \'JTY`2KW1mۍ\(59V )pp͢Mce2x5CD{-"6iJ+-QwdQP*PƒhA s8[RJwgEJ4Sb-)&T`mH㕔`5EɅֽcٹTE]=){؃.陴] 0QI \ENնqrp I1ۊ gk~]{I(=inLcinE0_הh L| ZBc]*/" ][]ItWMyؔq[AMg!mMu5,i2|bSF8`kn9 Ne<ޠ|TMCe|d-gOnb 氺/|$mк .XR7rj)"+_S2Ux8t{JqPf ̖&Sbx7LV Ӱ8A0E#aQJϔ]<1x˷vpգuV˱KQ@w iCr H<  g'o+ ja=r+nKWX0"~/]7aOB k;i3Jd=i:KKw5]rԔƒu-=vÁxrcqPs}V*}r9w%T`2UܜJY{")W?Iwzl% |}sշrH_Diͥ$?gn ۢwfqPN6?qbɋUF"}6nl'~wʍaORBwD._ᬒM>PuJ63h%)Mhq;xp +B=mNt}ގZ1i-^ Fմzp/m>[ 9j zD Rt8] @y'lZ5IW=5N>l/ׇ^~T=<4?fZ o u? <趧|19U~9DXnw0%7FܞV L-yt3PO%k!Yta7- m aiEtCYoɁEaI}mqQKx"\zȱ"NzޟgVĶ#m7Fl!5q6d<{^m2U((L+{_ż+oZ:Vr(q,AAiX[5~Z5zҡE7%PZܱztypG~oU"i Aގ(cտUh)!MΏwƦ$(MI;lCF6ORj>U^46a4ޝKj*pȣKxʥCV='AT7ADLdžGu Oq?Q΁ E|@k(Bk ;[+׋Iڮg+U㳴A'|ԓ]Gb}ܯb)r95: j4> u+Z-3!IޒP.M9-e*c̒]r ڊ;w:NorxJzd>"4I ]11p쇠cA&p{)r2q]Ns=ec[t̛KW$qK˚y E 9)i>(T)rAly-B:ijM^0%>8/f -^3kB@.0Se[ ,А_\Z>g@5zM[?hvܧQfF03a ;(V,[)p?Е 5L*Ǯϳ(6H9R9:0)WJ[Gz[~`j 12ʳ1C)W>+ <*S|~') KM񰃊G^H¥5),Efny:o>)נ5b_ AkIw.=y>qݢVk(cյ9qYҍ{{4Eom<}HՠWsRoV=_^P<.rZveχmo,Ndz`} Gr5̔+r XpY kU,LTHOa=&aAjK{I~Q:0f|(u[Ul)-I枆zJ]_@A Aڄc<3[G}(C6'>ӥ4+#e#Evc^II)(C $)0eɩ஦t1 >A-0K^;x]#䉴J\{%Y2Ld(b]nZr+lswr˟.Tgu f-24@0,4 dI4 J|Z E>)ug^Wema<2ˏoFK2t<<=ۣNpu9Ԃy2}=If%]+C;t Ja.s!^9%K6OoxPe~,^~Fs̺B}G2YmHQoSKS#/QґT!.vYqȃ?6E v|ݫy?dE P|xBY .xW32 iĿO޼z`۳ۈa|EVUe5Qy݀I+;$lzT :GlX 'TaÅ: B['\G^gem!; ]3h",'}&ؕӡ؝.[bꍱ-?ߨ'kϽ8>.b&Э$DK.BצU?6GX':_j u_Ф2YӘǗ&F$FZ+8~;375VQкg2CY: #sھs>.Z6سi'iloqI{ߟÄ|Z0JKM[B-5!Ɗpa'O OPeG2kH$U草np_ WB4W{Ir MxA jRA}%LF%SdHY#sd6(殓"Y*6͟X]ƫH[<66p-P#spx_1=4r3^*o3hRޔƠ{8zЁ -Xەr0z{MiCDs]hJ:`/+c J'1X:J} q66kSq㶑z\dnu 9KI(:O.&zPauޜsPm.cm*^-n[q+ j4wgk־Ѧe(Dn;-aLN)n׿3ô Va'ws}nx49" =ɸCXY_/=paְ.P˨Wn Qվg wC a OYrvY",znpShY.Z:h'}_| \a~P/OV0{h(u•!z?h3Y&wt>Cah+7ov03eW0G?vϺ&kGԻ{+#Ƶ6wvy6v:*\vn gf+ mVb37|6z'k.sGrf߾MON[~6 *:4ͧOoӧ?R+6 }\0k'.fwa_Ogꄮ*P$8Og/0;0v_:J;m\6'2\{~mXp /=\菫_矮q;G-Kc ((Ȣ `* 9Y-fq.Ao?]e/{gN#V%ߝE]{ET 藹OK}oO8po^W~:xCZ1@o afsT}"XLp$3@@03\"&w=fe'⊑m8X`.Ãi2.!ˠ9dK(L@Lc@}"A%g /ˢQ Tg?crHGs ҲtPMl dVHad'fRI94`8~'3?X[)&09r<||i²xJV 'd2 ٕ_esY0*.,r8[⌀3T lxgHEua4BbH #K< t)&`A4l BVldT3)#$ML l1A79TfIA HT8";rQ,<$PJ0gӄiHCY5Y2c CXT2/]>9>dH0bLÜE|k*"pѧci2l.3$LړA;̅}Ah%K Ot0-j,AMHAx1 rN#xddx"IY!@t)RL@4OJA] ql݅ÒOD{7 L{xL3 9rO{wf玃>jk0<9aO^}vOZw7;=s~/~'\o=ڙ|#K.\7ɯNڹ}>/Or?(ǝOg%?]9xt|SvKbN:ËW;w?ɑ<-,6D_t_Vqo׫[>غ^c܌оg>?~/zK+Ʌ'~zɻX͟_jhth_roz; q79WGޮO>x#,|ȉYhy G<|:934+^g}~['^%AO:՗O7ܸ_~t7珜yG0~[zGs~teyȣsV7o_xkkQ;83ç'+:WW6k*kg]lwӼ9᧟96qz碻1v/ݹz0]?kKS93`|U Rᨪջ~J#T^8z̴^ -l7s .vw1d4lpza/٥JX.>1ou^Ngce}[R03SlZ:1;}jol.팮^4R^ف s'gsӞlov̨5Yͪc^ 6g^{ x>BF]ڋTq;bc;A+Fae1D5n:=ryX%hk-j@v}yD+ʕ zfv'v+012`١0, 0󤷼P:ġJkZY35ӶMqYoYI; ڱc$ׇMxr/ eyz׻M? by$$ &@#fa.F8PKz 0Y>=aRxg$ɣ(*PAfk;K8|QT@]. Ap([OK?>`,c4R€!CIP5|d%N@CBm IszF~MB@3bHaV$bx(Ɓi1M>VB4xOfpd8S>T*Bp1x' \b@6+s]tAB7qrC<t'm#<sp3?}dV񁹐\ S|G  ܌C}uRA=1t#?z@ңA  YqÔ7(w)m LHIJ:f!"$ bTz{[s- "2Qi5dQأ&"ϮRe2[iv&5q*J'EѴٶfgHc)7ח{Q*7-Kjք{"!]w5md6S@D:-րqTYf5,DVq7*{Sq읉.T >E::cZiv7fK#%ՄV9$bzXg3Zg^ A!øKf jPiϲLkdc=͸ 27t{oL&RՌ 7m3TDl61f~O˦FP]hDKǂ76W4.wegdpolqEgGsi~2"k1峷~%٘ ԥ,BͳQpVz{|4beFjv~%=񏌭 {Q#s^jIf*uy/t8 ?7ct:nuW2KK?'b>r|mT[07.J]zi􂶟D:ۻ|>3+4配  [jaj*q\1v ZxV8?8spr_FPS_horwall  Hxs5cf3 b bF TL)JTq*@s9Pn- G:|4M:2spr_FPS_vertwall  Fxs5cf3 b VbF T!4.T TEI !*5*>*N qDDēnsspr_FPS_camera  xs]f@P /ʣ2ѠKā<#> S  T *ahۈK# 4ͩŝ06AK!h$(#FDH4 @Wn$Z/?YJuspr_FPS_pillar  ]xs]f@P /ʣt`U 4K zш ^#v 9FG@ 3Kz&bspr_sound_source  Hxn0;%J #헻*ie[;}z?N/s>p-}+hub)Zkr}sFe*֯sͯW1QBP8e'cs3QU|'}q$s,Ƹ>IK9T}X-PI^3c m[eR0F$4M4*-dʏm;2nS", T<дD( CuNxTҾK 90f *Sd͟Gbd|اspr_sound_listener   x}Pwplj(=+:3Ӭ]y9cA#T40!%+ŧe %hb CCK%"FQeY}{}?ߏ(aZt>p]ZvpFpT6)Ļ;aPwU^rGcd.` .HqU7?jkjq(i uʢYTO~YE$gD_YS %g{%e= IZQHQ 2' "Qohz(1hK[H1E!ӀcMg k*.NG3;^3_֤TJEVwF6h9zo;V6ET N\1WvǫH z_*g8&_C+qyEŬ*hw<$Tm/WUu(2C'=[R: PClo,^ PWb8C#J7:Z|P˷J/HMk@(ֆB'2Tπ$\|ƱlN;~*cS!i>YzŃN^eW@%Ύ\[Zpwy>3K,ڨO_5eu>nnq|{/=೩RnZ-}Ȅk~uPҔTHWW.|y9|i h&G qGs%ӌ:n85 hspr_sound_source2  xՕ=N@D" uHT9knsp A+PR%cM&o gɲj8^v}7>,Ϯ-lhH__{{xxubnf~7k $!qQ ޻|8HF>LUQ%Z~/B #,,Z*Oi;UȤ|u% Ȅ-Buzh#(UHd|}d67)J[LDQ:@B ._9fh| m%_a׹%R翟d۱Y|} HF) #Owl_ (篇lkoy3~'$ )`@R1Sj%ɽ$0 `*FUҩ.+Uy9#c 8 EA1*v9BՕY!1 0s)xn*D 䔬,-QMm\ҼhkM|_.9爸Z yGkzqxhF s=FSZLqY5TBI[TϽw ߼qx8l]4^ Z)ʠ2bL}R %G6'QX0'0?]l8 ,Y%4j!*FQ!~dTSaiQ%x\iM!A1S_QaXS#iԓ. l% |%An\g?V@|Aws bCŨfV›4K?V`&gzSPZ(Z֗hy"-(7~iayzCl{cWym2?"A/n(-0]H=[{|ugr}0_k}([]J2C}ۚ>0xd0FkQ4FA xs5a3 b(fdH@Q(EhQhT`T6>l#5dpECpr܀j> dp2^@v02,r7 HLV`Ef <ީ 0ճ(Eh"/mn\ x? q7#SwQ=F8G*"$m~vȨWu@g4 `6FU}rSΤT&\슈rp"ieLl".t ݍ㫄oS8,> !E#EH@c)e8|ۜ?@7Lx@N}O1B. 6w猨43/]a75pAO]4/Ω܂A{7pK Xx=0g; [*Z+q# >B|tx J12}ff /\¯tۗ Oş|In`ASvpj!ۑ$[e X=ۏ7V9J>-Ձɳ`}m9Od=<ħ;o}Ou0i#IDs#UW8{.7CwunM6"K@-{kW.EץR|S;BֶdJdR#(ET{#,>0 / 44q6l˷%Frs۷1s|}Z txU1v [Gǎ;e5{ zG9qD;/@%}!"NãIz0Ȼ-%y yv#,R>26H;KK)LTFwgdϞT xhңDxq&j^]BՐ@Kƽ@19[ȧcػDh/BaOLZٶN.6uLl\삼 c—q,;{<2Q.M۞)Q3,Oq- (D 㬻 ^͌ІZh ƌWMa_jqQG]4(chOҥ.LD-8S`a; L0B<+_déR:IAN^N#9m>]h6r1D#|Y9?W5Zn"/3< u/"b_Sz!Z rF߇U>wh1.ЂN->g\`dx㝡î&z<]M7e  xVq0 D:cʔ*ٕ[粂G^#x4KuPH4Dw^w&Eh >m u*Jf9xyT,-Wy)ܫ~b{pQTqqo0a4zfzc fBf^-DN \,d"[昭 \@Pw]99?WV@0g '+\X?X ۋo_B-6Ħ|;?@B#P!>I"τhNOigLb"J%'XٿdPYbrF_pAc B*̹+dشslਜ])8Yc[hf>|gȞUCuA/l;#5Dg1 %Mw pa[=~I }ǀ@o,JB)VoxgEHm g; ȟ \|HRP '%XĴZHYƺ-*!=P\RGu_(.q!G9HȒ%d@0o ^^@#e:i~4zS[͇n69/ط9˨a=!f|W*t,[Ⓤ3[$.t(3H.e;9 g1ЎˁFN廾?x dUl&Pd8YެbXzk8 aӓE9$y g3]Fɭ϶Hyd$2/dc-NNb[m% I m*ep4Y^"/b[">9yv!8s%_q~ K9k8BYo,r+j/C @~wXdU%G&EkmspfETJ6գF' 'RP/mXٞ/i?m8507Μe.W~F#g>TG x픽m0 ELשFHT^AV!D$EQNEtߣ)\Ώ@)!xjFq?߮iDt9fchR17w÷MQmTi9%o >/_"aʍT23VNl;B@aEVspgAJ!*$l5l²gmԛY X>enk[EuX& g_?b]F&NƐ?se}d&.M>%Azf)y^9Tg9(7t<Pߨw~WQ|Go]TV[~o'>??*{7 p9 x;N@.ҸLKtX9Wؒn#pyڳ P"Ulc7O{HWkl=/p/!|'ËCDUE@^YgI)uWh2…Ͼ>ZeFv§;lRYrhD6I3_?X&јe<%dKxwZ,,QeB+/AŸNCUi;`(5%>`nZΪ?8]Yӟe*ul{IB/P;!=|j2F#Own.\wsa|&;UL#b4իTO.>\}xγt~;W77 Jx=j0'qRe:uK:AGt_)G4?DB34Tt3M-紽RH[Z!C, _ *8b*ցP.9\kN}Hǣ(z8֏7,e*;RQk~=tȻ)IȎ&pZs:$sp;\'<94[ O^̶c<~B q?̏/843WHeC¡!Y$#lQ~gj(/HHp3[u_U\ 憆jHs}ҥk xs5a3 b(fdH@Q=Y=I4lp~`OMC4pJ;TLVƏ/R( dG%K긜z1 ~hHiC(Q4F(!z '=;8M Ixs5a3 b(fdH@Q=T$!N"j<5%nEhQ4F(E ;xs5a3 b(fdH@Q= ETD;F(EhQ4 spr_FPS_ball  axs]f@P /ʣtt M/DX zqB3S/1ѴCY;zI>nz*mP)G_ c spr_FPS_splat2IT$ dxɱ@DAP¯@l')A싮 'zڧ%(scG&Eo{B!B!B!B!B!B!B!B!accv4s-{{{{\ӎܹSQQ}}}WSqF4}Q8x"Qxϟ?P(Յ555\8::5^obU@aa!QhooDžПHgff\o )sk׮۷oݺU]]dʿzǂ˗/#~CC痔Qqq1Fljddz c8\pay9sʕ`0H ^zɾ{Ejf)aGBYY16bϐC#/VЈ).ˣ^Wp~a =(%k<}<\'p Py͑(7""`F`0[ZZm,gΜ<}s粲Eii)(5k?3j>ǎ;~8l#>SǏ?vfee[MOOGywBxhhhzzիW0۳yO8C8rN9=#L!`ufii޽{ s8o߾ԃE#"A/D"x";ן b>1@!PL;B\h[s%⬮b#}}}?PRRѾ7 1~bĉ~ 㻼iKK S  2q${(d0wR,aW qv GRm p$g򩯯]=.HH$b[`2#E" O%x}·oߘQcy0r@L(sfT]׫gzzz~~T h&8æ!jdhhɓvL!v155E͍1a``ٳgt*m-:5BB(bۓ4%{\o|ٱ+'p/ꂠvm;K jIe~bbfzdgl͛7 s]^ôIs~7hn'4aRB0}'I,纇%Kg{v}Kv!B!B!B!B!B!B!27 cx[OY1 CQ", TB)j9S@ӅD"Q $xxa ^ɷ}|^kw~7'?ݼu!B!B!B!B!B!B!B!B!s!\k]lGq~:;; KKK}>㣣Fx<~rrb;"988쇆&''{zz~?)wvv 1ѿÃikk'&&渟vH$6N 7\{=BP$1AXMCCC?~_iV \`766+:y 722^^^^YY_k[[hccc8Stvv"lss3)PSS22R[[A8<{ +**hҁbmv0eGg6"SEEEyyy|x̻wnhX\\Y^`^&cwYO3g KJJ  (Ή[noF2aSK ہ;mxr <'(xT>R?999)))-- ;b‚,wϭ-VJ񑚂7߼yI}AvXП_wgbƒ᧧S\/ isہ;$WVV#jiF#ȧOl?)0_uNͧz`At @ H$# _|U-,P+mLl~? |-Uٜ8qeg.wdb_]XX` г-%:N 84Mda||Naێ>|D 92,ùl> GLꞞwM*oGd꼵/", vԎ`>I0Sv8D@'A8l_ {KK yF ~gG Ba;d0是p.+3,d`RS! eo`(\|\<Չ~^,3߶;m7wwwQ&ri;@xyii Y___XX8>>fӞ1_|17߾};;;xD6h}}hi.B!B!B!B!B!B!Bq ; _ ax]OSY1/#_#0"%"-P`TD m-Ec5RBza%"$$擳u2?f$=99ʻ~Z]'yk(F7FD5GoiimG DA|ˣ͛䅎D>k$&3~?<q!ZKvwwc퐝qƵkHDuu5Lv($̟`;d0sNGCCWUUQ󝝝<,Vϟ?i:E^xaӣџG:2`zzzkkS_)޿?`dDzW^q~o;dF]??)@W9Y࡙2҇l+++lUt^FMnYYYqqqII˗`.a#cs퐝" 2ް[1P𥥥W\z%RtP(g?{RA؏PEEE/^D8kkk߾}߷;`&ϟ?gd1yy9Õ,0ˤivNa2yvHWoooǚb>-@Q(l4GboSSaGM$)!;Ç>}[L.Pd5laf2/8f(F -X"̓UUU1yy/ N^d;d`1 Uuo r:fggm4VRzK/ H/|H55޽K6,Eyk53 MxY@Bqrѣ~ `dd;99spp`;X0l6d2\D~/G6MF޼yc;^!{> XP2Ih0Nsk::ӈ߽{G~Iz""""""""""""""""""""""""""""""""""""?e:vrrb:Tt}}g:XGGG00񏏏evgfff!~? Lhgh4H |p8|>dG1[211&,ASD"cvm gZ[[#v`:L;#T|y;>>κpqua1ۛSZLOO[300@_0=1mjۣԔUWWs@S^[[ ֆϥR^dkIf0 1|}SS+**UUU\1b1*Fj| /++#2uss35z}}=::RsgggdgÓ"\\\L݁#\j:XZYY'shBib]S0ŧǏ̜N%xt6 s3Ovv6OOO IŮ./sH~nn. J2 Q[O@I>璒$`m~hh>KY-U`;Eb8&Y=??0jZoIT$x<%`oS);GLD}}};77/;C~O ig |G)tDvwwC?٦s/pFx6 X~J[t2 Q(;Ҩ~+T! y@|(M[EmV[߼|>&V  )_^^rX@ @QbPxkmmч%;;;b!Q" KKKxxO񹽽n/oonn T+ѥgf6Tϯwb,Ԧ̋ȿ'p x/k[q8^=vh-ժjkzp%B‹^$v~'g$]Yed9p:~}qSO篼s/~ o:o*NqM]///Me#j5.--R)}4]L&ST nLf JҮ]*uo:4;99QZXX^YYh4>Y 󍌌xPHtt֧S#ּ:v\jz)tttƆRӮ柁 @@?::R 0ũrp8FG>%Y#u<W 2*>Mf JEN*[.Mɿ3-j5uɤq4`:4hggg: dY|ԂMe#fT*%zd:;ҚLJXqۨ xj"Q[ D61NхIPP" n-ܺrHg߻ +%8S㏷/̲?7[~\f:vNaooohl6[({*Au"xD"r H&tZu.]|||Aوp8,Gl|>WKRDL&^:.~>tʋ0\Byӓ_vn:E/#(ߐ)d2l6Bbvh4*jf9eT*Lu.]l6X,&#X!+X`չ }^v.K|hZ2ed22:FEZK_^^vVSJ/qNVu>eGT'h4V+PHGE~׫ ># ) zxֿjbA[#(BDDe1hR0nml-wq3S!T*ϯv9///f3vǃ`>???Β8Vzn;bIzTv8ɲõX*vv*AfYh{>Vry^ءdلrt:N;TT*L&JGP \.sfd2 O@P 2S, Bx·(YVUbނt;Q\0at{|>YvN~ٸT xաnPa{jIIi i%SdSR DWva_q/9?W[|0a^x]z\bW$,\uD5MSx.vK~v5u̡ ~IG fxVDo/ k }#]ՠA(5$?3O[p^v?Άu$~|S8MO>1@ g43:O[VE /ef\6/)$Ypߋv|:${QQj+n[o /"eE\}oW2m:9eOۿNEֱs t[.ۼATfAX=od|fW'&@Pcsڂ5n hW \G~ǔj5\45χ@^]vF` ͇/5*Bd-#ƿ쑸Q'gz߉lksAYGH *?rHspr_FPS_hugeball&&%% x 0 87''Ukk_Zɏ>[}g o1spr_fps_toobig@@ xAN`Ea܅Kpsԥ3$BEPIwOs;jB;iY|۝|Y/hn{mvEx5<_kI(8 8W| 70ȟWaSH0u?&Yy<\<* \cBys&L >@|0` g&M?/>@_|0l}Wg.&___|6MӿlO'Oӟ+0_o_æ-3\___/7?o_, X|&`M7o_, p9Ax# %(?'h_?F.:0s6x40Xi\x'z~j[qB!d_ _Cl;5.c:V!back_ceilingtex VxiXr$j5@UY+QTk;xCʍ`VkQ%#7plG;_?{wvt4>Ozr9ۋwlבxhq EieL^Gqϙ| mz>?Fo6"*uޞq_eS}>?蠏I8:~6xw~M;'KƦzgIWW:r2xqN&WGޏO#?iEK꠮sv50:wq}<;~n mol}NMgAП'nT O|_+ lH|@5L8Wtep[ a h2u^.~ܢooNNK&x~ +beE~o|jk ~j=}y/~ NNqDbntu$wޜ]h{{oi'$hܺYꢊ?MBouOy'i*r$2kpu >rIZ?yGYثcD'pBtWK.0Pß֐O姎ތM\y#73/z :u"xڍ+[D'>[8[MW K$Pk'py$t$Vmuݸos.'FN/NFWڴs:9iS\DҦΗ*dS'Hx\vråKϲ^m'WSm ɓeU0?!h<ߥ0䮮|>z$b:b:q];Mop qt=}5{3֟f["s7/Z5! 4}3y.Wڴk_3Bڑx#~W$}G9rm@5ntyz/z ddAjO=ѣ.Fo~ҭV~W-n~m7^NJ[Aou>?>}ҫNiǏz[63j:sthcGoKu6Gç'ι]Gt\'?>nw?j<=lϟ}ӶIoW:w᠓Oz]6:tBwwj>>nom$zz LOn'廫ٻtuIŢ6j|u>]^nNG.ztq۳tk?:itP'1F @XudmR^^uKΧ aCPGEa [8b^y8S;/NuiGwm[X{ul՚;s;hݺzzIro'p:;q4A/C: D¦XLJwմ?י:B-jgϟ'}D߮+Rҁdŧ%_,~"lURµ$~~Apl67}//v; FTxZP| Bidv6_Vci,h\HJ#eKX0ZmGRiGoA~;ս:M6;vO0Zz}7?uwuWn>}?#ma>0BdBuбB NGK|W[Jm&Kޢ{mlWkzs8u׽@xk_;ۧϛOÃzBAqx;H-H?!YK)MѫMGw}4۩.__۵۴ǯ:?ݱhg9tޖ^B:8A *DĴmW[zZ5v;{ݷ_ 9hU:Voorv2lno۷l! ţgݷݮԑ/Zz_>#%&Z#{X¿~{3Z.6|0]^iJϦ5-abswt[_HJ&[mz'm^oon {2q13ᓶY%l:_GfXT= . @ Xr}@oub tZT9׫ f_OAL -1xIߎodbI)Ӿ#3C2QڑֆjR}^~!^C=\Uv{Rb~ӴiOxBn5/#)96l-p|EVG۲šϏo oBouY)7gf/MZ((Wˋdv88ecV,ގflwy, #B H韴魞&k^.WVX-voZ{}K6[Bҽ>Q\>K|^>+#,=ڼhdEߩ%{Cx, $KrLtu-;,Dp9ZjB#uL,,@_v0ڱ11cY@.zL%m> 0s񳐏ݎ!z@WzN6_߱O{9z}S°&Kt2W>M? ^Xr{+XyI%#s1 oFfޥۅ|Y:~/kG8׫DA #WE 1T*Pa衃[F2a hi&(ϲr]綅tAR'}/"\ʟ ֲMDVjdK Q i;Nu0¿-:7^_ë>X8#U8Mgx'u{rՃ9//)׫p./oY,z :M4;<u[ԨT1Z7(5AצAA?h)؄-5N.2u) O:_OŠFT B^q o~^a!t^j=ddd7LH;WbREXeOj_2uj (lV? -,@!\3R {[[)mAw;jQ,kgQjľt\r,-*/[.ׯ#OR)ww0dᪿՆc+xk~j_;WNT{"  zd=c@>?~׎UccUB.m<,U\j8-hvp_z(`5lZ*02m) SWbOu8+ž.Nd8¶~~6:~~mFM:x5 Bpaɦ8|+9?~i-`f sª-.|D}^ZUo#0UM}q$BL77?8?ٜ ޽eh-9F; (bͩ41*Λ[mIUe)]%Ñ"i~*gAᚈ6YGHꀾB]U9=LT&Ҕ>H8K"wW7tsGj=p ߃m&ꠃ'!^%U 9m`c{Ը0cEBCƏ7,%Wfl yUi stM"_sA?O4b>^,vͤeZ)pڭڗ/=/a\־ ,uMF>}ᄕ˗$v Y9aEO ?,%y V ,"?8]I4;l-%\+w=v`iG%'2JTcېaj@K;:Kp؉>r5o¿ۯ?"e_3MH{}6",HHjU6Xf\l}9 Ќ ^ODHbI鳎 ip sp[LWa|/ L΅s Scҳؘ4|Ì`h g$69=@ SY*:H ˠO`lr2!Mn3d%/3B!/b " d?7T?YTq=$[+R:ŕ dwˬ]ۯ{]do΃}>%kjyK7n>. q(b}qY_?كo9}\LVn??"MOo/¼$,F@qC1o!U&mĂV- c02|㰒XG(bpkq$s ~%lA'ڗd:9<]`f/|Ծp1ېmߜ&'10b~86L}y$)|JP@%(CLZaHi)m @vEDj+:\`ڗT "ξt'w|2 ϧHh.w-b* +@Dž|mBB9mkbz"bNby(kr`&?:Nc39qGR88z"CL5IG@C!P kl6EfqG7':&8-kʢ?"$W_D͉i< V=h{fO31|d |VԢJcmi*ӫB rXB!wXKz$ko2Nc?UI. 1-1y"๾=dW,+Ix8z#.C6}~h@t5`FQ ;> yv:8fFg`1Ul*;X#J"uLs'4L,6q'::g4|=x-B-D rBf"-FG@][u u+ya7A8&V? u_pPy~ĺiΩGn9/bGPb 8mcEEHRW(|"6942VOPL^GCo e\b!-f#"MX OH/ȟ6O^#l8sJa ; %!Uzge f6Σ싂'&9ć T쟰]pwyjz6_WLa4ԩ:Hpleo#ԣFLH[z/NE[h !C2#G*ɢqF",y@ed8o3~=$ +/!\ϟaV?Z6nw:,pv\G8<6p~x6#a4ZtTD[l`~`}y^>`b9\_ $c741rx ?6iwjUq] dGo?2?V9~Z}vߌ!Ο&vȦ(vG2Acu|2-\c 6f^uD;mq$w|JN GvpkAme_OX-ˊy¿ 7׆砍'E BgY5&8j.>B`%Ϸ`H''7ִ2BD&n#l Zȼۨiw!p./I>6(4 ׆2F{mhn@'PHFV[b6` !ËSNŲނkh J6CpOݧ'>'rS^ؤX < .奾4>2戡yk*'c!P]Ҵm\NV xڑ7q+R᠙BTUf9~- ME;z /*N?oۯ?*Ш1*N{'?Fq[3V` WKl4co7!u. j[>_?~ź}m_ɟi-k h3-,ί:K]LAg"pu`m( A}¢8G9)#/CtBw;Z.HG#YG- IQ|~NreQ%>mu_'Uw@f[5yк~fl,Z/HhGpD_ B#|.ԑ_9?CqY?^#њDSIZjW;:f&&ocx G!xvn)`iȺ3uM9O:Sfv|dhVXA#~ZW:wBe b89r"\r|F?PccπydaX%Dޡ$;+}.c9XAkAu "6#v4j,@ #Yw΃hn|'gTqp/$c&;fSB2־ (MF9:)-5dHA1N.="1`,&B!潐ylG&׏nCuL?֒N\]OՉ]D؛-c. ̶rINZ $YCT13IݱGZxg\\+sJ#zP>F&&C)>K%NFv$b,49VSaY ,K•3ԃo%]$1#;o"/6m5*gWS:GC]FhD*6A"!wiY%nIUG`)So7"N5-I ,g!쟇_+qrYUtxulf:!+ .rЛI^ձZyN: t?JYGD2S)!'1ABJ'G a&=^n}` :6ed-r١} ^%]9KvjG/qzͅAo`Y@, ZBSPbOjV°.#R4$OךI՗- dotI1PǏC(%43+%HW0iU0l'B $'xbh~Wr uȮ##zk"QC[TϟϟfL,TPk~,37БWBDE8آ+[|'.j|!KLx$X(4d4 UU[EQ_l l8 ' 󨼀؆Mx号 ;\-Y\I&YmޮX8}|Pxд@A6\;N&'QEXLE\Zh?#EQPͦZ̘0)~ɴr6 ȲPWr-PiaB@Eۛ/|"p",؈r(S lFCIZ˻:>͓paÿvN'7$'ÒG٬){!OG^@YReX2.]f0q +T]a?Τ~]ȳ/`-!D'I TU5qj[ I^/wlvY>SK>yζ_VlI\ NlL˙Yl g==XdK.(շq _K.[zo:[L9Dͱ4ĎvuYHkԕ\=IajI <;q#H1V7z{zGx&].$_2lF iȅmf)>eM&ϡ#f8c8h\N/9חꃾu8|B\wטB^((a,")D o á3vi&WGhOSb@<(t'q ';&d4^ ;5(]ECtʬFWF?JR@57x Y lx-ٖK>9k?ˬ+a4~Gl{:^jC}V/}&{O'V ϫDZ3yw:_j?yi <GQw`V3 N隒||_] }-#~z/'׫pmßmd^R- i0^Lm %Z|Pg!#ՌmVqƆ<P@Ǿu*9%:܄8 t6!1kZ?er=~֗a bE6u(7ƍbzycD}am9xF5/^s51M~]@cۋs?F?VIYn 'mTRED/d^d~^}v sq{xI|V 8ۨ5*ٝ;Dnhe#]īigĥs,OuRt j@WW)B͘-_#b8m튃]i)33"|>ơTJWێĦL u.S6bEi;'aŭl60a &HntfZG؇@!-^oQXU"Y]NFnYD$$ۤSE0O@5!@50[A;S<o/;(Y^g-ON,-= 賺S}gVI2䞛ތE 4?Ƥ(oX$ۥ! !}uF*\9ڇd(fG=NqKnr|tv'uw>ݬz!B ]Ϩwą-^ya]h[Opn,`TXt(=<)QܟEeSfZ  sYMZO Ċ6:g-UJse {2 L~B n]I,DjXz[jxt$sq'.PqL܉Ԇ05 h{ξ< H F#ւ4Q>=zؼe{ ~Cd^yٍȹjG.n2X෱4xpeLAfLDeV ı 8dnwS5|gZ>V?O/3{=+s]F]|]V7u&g>ڨ,`h|"—VevCgғi2yB.ebf4NJ,SJ]XXoG_gIulUw_80 ant<&kݒg:'so ↴ȏn_Yltf/nu#h(j;Xy+.0Fl@~f ?~K>P\tKk>j" @guDv]S'"m/k ;MŒA[]ZrP%{x kIWm\&,Z!8O \Ma򨖧w ߔV W:{^XMZc9`e>R΂ӱ/P- 6~=hUkSjw [0Y=)ˉa?v)l{9A'O@h0ffD ##?2RxhUx&?Cf5YL9F_z#X*V׊[*Q>õˡW,K]֟À|3afNqGσBX;EȾ64WYNtVrz6[amctɗ=jHy٭mEݙ3?$a;h.v~.cvv 0 aD/5U*Yj_7h6mHdm'ncv)(SNc9kʁPz Dc U!E0? zU6p#oAHī6IK-"ɨ4tGK&pڗ zCαq=*pdxOX.qZ(hR [2w9ԒR .[/{ ]ޢ:gֶ,$8,^/pyvgvpq첼΋ȺZ}NeݑX C炾QwhsH7ak3ڱfËxq3ä-v%G-(QhEp:qٷ^Liur߂@7&f"OE֕%eomd`0j,?l$a:ArJ趚@El M*Ho<_tY)%}?m^UƓ'. Bk]1QdaاCRPœVvlkݞ8DSݹƔ4Jj9=>4 c )B@E 8_?\&`5y=uյN?Ӵex[C06SfM[iǐeq}&k!jQvH_o}<4R[`C r !kmv1w_s&e"h_r^5iЦPsfU|csv&k6YRgZW PwSlJƭttΑq0*FT;*m3KF1 ݼuv=tzzs7g_{ֶ"GyTI(GtI~>rنx~ͧ(>ɣ(:y^.\ͦƤIJr<Dx34"?y:j=ܟI?$ 趬jt{if{~Q"or2V,ˬaϚA pQy"C;^ _n.q{JmPWsP}ia ̙X`~r$q< `1V׺5:ʁ4j}8Qhy#:DwUr۫qu"< {`q?R`1MAq XlAj&\HJ >a]\e/ʕ_DYXYe+ẹ}0f96C]עfVui,<[X%Yچ G'<nFD,SXwm[tHÄ|?|CK cE;C>UPf/rsFr'y *{1-Z69^zu CJ'-"4([z]EŒYWM17Ė?Yõ E41]k\,;Tݲ6㌉:c׆5{]ɍ]d_Zۿ.IƗW,{t@z`ɀR˜uNrdVaNHjVsJfub{[7xw$)]?jxԆwC0-`ƍ}rYvZ I90udo&g鷡Ify;Ptz &d$H׃Lycmsb_<.ձN="j?z%ԱI8;*|-Z2~(w?b #J0&G~rwf֥l|5tl]R>LѡE7 Z%۰Q<u;.-ĵN]].%{>i1AH WWDRs\( FC>Ԣ"XQF*UY߲#1:caXOвE~c C_S87 [M[tWIYTw_u!dM 6]/ kojc:|54 u[ je1kO7S 4 @dSjFA5U2GWؼ9-OwKAO|^C![ vk1`Cj9ft՞̿$/GKvyw&pF .d7:#E}Y$3r} m {*Tͻ^%h?+EsۡT0uabOOk 0OxG[_"_@kC׈({Újg[4سêy+Y^j֓r{lz*3Vxs0㯿Q7mZQi];ҌaJ?-cI:C" \MqG%c6O_rmt])ڔy2iWBUH ښ)W#\8]WK=*p%@7/B?]ƿey04QUib禴I_"í@KS9%$$iD6bOrE3+He28#SCƿeOb}eȪpa{^u]M9\KW,pWGҡqELNvB)63Mr{+mr}` >:Klju' ]F[)(ܕ,|w #T"Mɝ8kzH]4Aԗigֵ` e ` Oo9b%ǀP]hjMJ,&(β'F Mk̡Ԫp(?#y/ܵn u]cUo} kK؁3)?&u?VwWCXAuߛo7aq̔Mj/=y]s9oes e͊lbۏCPG~^!o͢(a읁62ߣهdGgnKmQtݥ*p8Tjei1+D}҂j?6l;3cVf1l2)쀪jǬ2.K wϡN$w-A@BnÏbvL=FxL 9 {y]SFY8EvUts Mw9w_J/p1ӯiCL pAJ7}x,WX f#K>_Eqdt^GhwǴ)3(g0 p_Y󮳇Qm^d- nW Do[݄ 8^%=/VUCV> 4v.j?xW2Grp}W ~h|wKiZasX-B~^d#z }UV9}ջ<4\bM((2m3ԃ&p a 6SjV]gěru5Fp&ˋ.'3mǢ@gW:\U 8_dqWι ?X]) Q7TD;~z~mhIP^4ɠX c=-yз{CТ?F\Yfhz[-N{9)Z9~uH}4,a[gJrehc`spkC bbj޶Q3Ͱ+ SB1pMf.;ѹft6 LM9Cvl9eqW6Guc{%[)o3Þy/fSRy5Bj?o;n S>(0s2&|R30ً6osr>`S˘%mR7ٳ&8܅[$X]Cu? =6Z fakɡnHR|G W># 'V{Aϕ,z<,4 Tׇ[g:gGri$(LԂrj_3j<]ihͳ(i3(̖2jK57']u2t Bv7)\J^g 'R\jR?]2+{{t#K "Z4Gj:QcŃMYRp xZzueKV:JeɪPJٔ/Gh;κ0hQt{|ϲ<jCLJA+.Oph|i8(E^.m5Ye<(]¬m/_W H 8ݖRaJXAA B;"oKDe DuЂ F[ެwsk k /oęE:wH±fXeuiB~phZ\ ō]ضӴ !acmZI^;R CxmR%e sޏ^nz *ڎ:; }|JTGVU wATZ;ϊ2íBo zyӗFV*6_Bk2 J_ szx9qGTף)CwFۿN/h>3kPfuMܵ-39k53.lte-]gwi`;pdގ}y Pv%?ХJp5˨!^z|1ߜ7g'ty}lǻ3jILC.cpU`%5O;);+[7ʾ=z(~6ۗe8Su&]n 6hòɃgxI".$V#gҭD !Z]896a\Q8>bY}%QkjN:z@c ]`չ=9"YԒT|.5o@Oˮ6h};2 'jy oRKJzc˪/gGπXUu[z,qssmNVmfzqYUhH/ad"Ə?\vyEhf{c}S w7~Ϳ|R W% 'ዤn8fC+ *(gD635J4@v EpE[?9'ApXtGbx@.0T$FKѲשUISk*hsMj`&a[us_5kd"uvF L4({i_ALY=>&ku\Dk~EtmA."/7yo=zNo?ј%Gp\n^|./lv!$f.zq q9Nkp%c/f[†e =`gþw%K{w:/qzŊ[ ;g5\ ,8(jbS ^pUH, ޙW9vmj<&ǂ3m^vm|D1 NhYĄ(&DvVS>:;/rnvq\Nkῦyv05Y~o=*8&v9e2buw)b]AeLi6 -,Gk+#ُ[{,,Di$!#7vy6rq^ W.iq˃cgFpx SE.B17y h^&Zz=m峌Zevpcޜo.ƣ| [٥iWjY==xXIeSW©YTw6fbX:)|N~ۛl*Ÿ`Ssx̛%ŤY^R\A5̪`|u%ӽ*|mVǯK!u$"0 _Ʊwru0ـs]#Ϗ }qeG25~?Z\/Jy;CSӵsOLdc.\j̳K [oW5#~:k Q *;n6A38UtZbz40qFImdv(I_5lW߻ʚ K7xMyڽf8JH"Nׅh7Ġ& p'= 7FVXDMaا撸n("Z$;n2\Y"5^OOnt[<Ŀ@ n]DJ:ϝnG2YŔ Q)47_{;Q}R*}j5:y$6t^Gx}gxMmsQ$*wUik0|x~O 6|'4*/o|uV)zІ]`/ǛWizb]ez|f;}ۜtihȎ04Ɠa١d/ #qy4?ɒgtOm!#6-Z)<_NtdQJHCo]'KMt~n w^ED> FƉqCSA]?BmGtI18 2ff^|L:;lJ~g͡tvhbh[&M A/%)M&g[ycQ 6|(8?UmjzAjl[_yqeB=ܜp,GQAχIL{rg 8:P6a }]QW1$@АhO?>5^Kഗ\ ?}Ǡ5haWͳR9VXf&`Ӈ |v_˶VN+ 9Aq|7$!u )3V-a*UB_"98_D?p %%4?w1wr$_.HD$Q/GfLPIRC ^U/V}`/뻌#nu] +7Ϥp[6OH?O;4'r1+^kfw]X/^k}ҷi k`\K_m 9noM"kK5LED pT*`P}!HP\bGm8JR~t :Jc!.^X_q>_A%Gok'ϗ'FڰY&5%b\DvTH iG;{X;|Y #> ^_pSD+i3%ywY4!}|2$<gwlI?7Eſ2s=!5mZuUkӪʤfi$nǨwbBqqcHqfbE4h8f<`S>jDcG(+AOVm 6oljab#:'hF J[4cnnIm59𴆹^Ty<Ҕx"sHiw"ٮ1snڗB2żl{PXo, hzd*̪_9z%+yh><?m7%T=bRUa n*ާ1S^%d1/e@KB]i l{"bօ2=RP[Qpr} kW">YUr|4k sڪ'!)9w/"3o4%a[Z9]:%c3#D ٯDJ/x>mĚyQ%RB&׎%<#8=N;aܷ w_~r2?x34mt Zpu"Թ$X&-UR('M̒s?ETQ_`/K:g` ]Mh*K篍'-*b\-roZ!Dm$ދbuv k UKr<*!ۼtPZ6ӯa{-MS4~=B@+P + (uf].0{\Luf:/m[)?ډy@=-(u6<( hgX8Rk^l&okLk6%V*Ī`Yp\tݞo/ UB>}5 YjMT`c 9>-v4=.@ Ю U/67i6fec3,r.ҕP-IMKNM(I"tÉ֑/ wx&gq‚hGhJx#?;)--cFA?¿^6P4(@{Fvjpyw͞x.b!ۘrREif: }-u祀P֯Eׅ}~< o81ckjXP1Yd!|~kaf,Tu}h/j7F;oy=[ӫhQ"}\ tcӕeGv&8orc&X qUy^bɹHErqwIdKjw4gLl?VP|y\YUT;er7؉$'>(mMnV"?؈s5?*wz-?W=Zi `:؝V8?jslN;GE)48Bm,dʭTȑ =gk"$WA ݀s^_ܕ{cˇvɝT͛Lr+{>hr!.Jɮ0'?g 󚗲-݁ X~&d7WÏ@f&խ_TkG #݀~A>cS0׏Dt볛x% j!?xvAcPCXs0B ¡Jg!j9(|=hDRtGw}$=NAX>|5*wָ SrwKCw柶N҈ۡu|ܭs.ݕI}KŊdvt>HkN^&'x1L|w+ "F4kAX?@o) x14fSmI ji!Н\\f_mtDin bi0OrsX8j6G8?q95r~k :`qKۄWʡʢ\Hб׆*W$s櫣jsLr6 W{uۑL/d^IM>8\nBQ&\6poX^ x, @~s\u^ M8̮Z2PbM&48+ٝY ?,*P=_zJ r ڱ[3Ň$)l{r\7qyj'XW:o; P[Ft9e RZ;#:O?~Pb cZ06F<px lGv46 ;V戆aoI\8FDԽj]G!vQg٤G3OIt&-Ɛ]V_RA9?X0A~Ժ`jQj *6ZZ4WsRjZ_؀f]R0pkZ51Luw0b;0p+pE0 lkGˁ/#_7RK/:d8h~Lf[pu^{NW i'O/5#[*=L. Iߗq0%~f+ɟqH%h?Ujdk p(p.bXt2AYwVKlZ毼i&Z2C@LMpH|5,w.xD;W)J-{xǷ\h>nObhywyS)׺ta.+|kGGj>s⥉Ηe2sX؉TZ0|(עB3JDȥ<>̹}+bf9ʅ`j-͐PwI+g(C "dva|,|;n#WCH% ɯ vϣ `2R/D3Yq {bXIٺì.CB!mfq5ˍңsg6k<9tZ]JOՌ0Sm<-_]@smOK.8_76PqR$̺3F )wi;Mά1.fHܙ:?%qL.p0q!7,M{rwxx{3@/6JpJOX:K'gW[F[CgV><U*:/l;h\Wncf{$GYw3JAdw[xQ=јLp􌺓\D۔i0/==? UQflrvuD8MH\sҐ"`o~~ 7ZPzZKg*_PXvBW:jR7Q{IÙ?\l Ť?ޮ צL.ԞF pub;&cU< PXZOR̻LխtRES Z\+u_T"ey{@ zxGolg%c/TPܷ9Rˡʢ 1B`6ژaQMRBu K*ޔbg%y#ʱ+ݖqH|y-;XF"ۼ$.|ٿ[mon8vy~'_i͟lc1yCU`GUm LxtU|1;.HMˌ\>B6tG=%O2U.S@w/ c+)ZZf* ruf jNX"/ðengٯDs_W .پ'_h4&HI7j%©XܘڗdKWZ_juz(XV0s9O}u[k2+9+'[4by{uьߎݧE[i]sSV/ٹiͻt}:N'ݿ1@tpju,\̷糍5R\fŵםELϳ]'b%Ybzͩ՜92xq`o^GĤc\c9h2BM9 2{;͇A~ue4lu«d|v)O{|QBV\ |i΂oԕӶ 3|(C͛@hj"\&o3Es,{9ۇO?>aA|-mkMֈݹ(PX%^U۫{vu gv NYfvgZގ:41띓7{mg!F=2flncf:o2;w1EC 嗀sn]JLiH,9{|ٟӈJ:дRw~\wov927~bzZ ײB] 3;\kpڢf2Ի&x-:ϊ(ʎ{h8NJsYpnhP73s}[QPOff?ж2n}|Pt,<ݺŻӳ?.ߜO|. ؘջlSX>nn?}X6\GJDp :1#̪Ͷ۪B-qV]"uWW91J`AZMuzAjck|cwOcnXAqx>ߘ#|O>[\.db|eOlLw ǻ[u԰<ޟǶbG-^?Q <E `"'3x8l-Bww[ v{v{ wZ,Ooglq_ =nϹ6o;L~I~p=; {?kziswm3EDpnl g.կ׃WBy[%ɯgy=۟? rowrg;lo˃i̭Fo(T^<*&r5(o18ǑbuE,+>I|E;3x/v!ѕV# pa73?-6GvO ldԩZ'\w,J :ȓ~LByv|kGi%NxυYiv%P907Z&ī>-!ɮ 9x>CcZ> tClC|z:ȞٙtqK=K_cA{QV##rrɬ,JʻF2dv'dE˼}ho!r˲mgm>}l+}dm77p̿kv.=vvbf>\zZnAsxfKM\=KhW|mbs48c{7KgXywف}e&L폡fLޙybNex=>lnk;{Ц=r\^,vJ-²kbD>^=btބCO |1CoLaOon[@~ȮN1F;\}Bph*9X2/:;/?~`˗aӷ6v6çOMȎL{ϟ|d`gێɕgE+]OOOnP73;A.P`-JknW7]'pǞ_)}t^#O/;kO"TՈ6|,fQ.뙝U;g73;th{,oQ'#wx} sRktߘ>3JpZ ΃LcbJԋh缞v%37!9:vy?@e?3iKǰ֎:77v9dh6[UsQoÒlvrkzĞ`vd:co||uzhhAGkeTqOANAꋊFܹԓJ?d>r .eO6 Z])=_ߟ|ycgգ]NTx~@v 8fueUSʲnځǐDUk 7`Y/ zzup}yt- ӻ'otM;vH驮LތE\Yd81o.l 0 Ҿ?yWV<}3>ޭ~U=F~ 8oڧ\O&uvUl #Ɵ"ى]4r;faw8Cph7#}oNW#r#k5rquظ3x,&xg'uw0af`ip"}M8DkåoW{Dvz8t߿V+F5hOa BT;E<?X7P[!FU6'f'J4?Aڊ1/l7Dv$BGAR V@؀Ӷa! !86*g|Brv>|wǗGKWNO`9?D(+4+vS/ڃ0ڡxCHU[ٻqp^-t|]LߞqzݵfUBoϏG4͝j=^b[0n? =J~Y~d}l)v<|F}ڨD? x5$SyVo:$BQ)Dvk/^d.}#UzϦ|5Y,.nn1Wp3kye*dK;n/;άޮ;V}Azvbv]*@Vy!h'NR$8Jj 'st ):Z$$>'$(V$5vz/[;s͌b;j|h`#^և|Ylv%Zb6'dRm2Q"\/A#].boǥp6_I i1f33<ݚ;#}`*(^cB?D x/nB^r^\: v˟v=F(;]݂]|9+p!u#/E%lX ѵg_UFd*1RODeB_{HC'^HRBʣ~Wm!iP]3{ù //GK]j{+Ma'/t}#N(yOFV:_ٜy{{EPA1hH%φk:Ha?.&r3MكԈ Q_{e+UHE*h},ll=cԞGQz?3¹b" ASi#Zff٢)TN%e@ImLTm#P\h_>_%ZV(9Wz|J%Qå="I2~'`|-ߞv;>UoLJegǻ[7un0".<fw<=vXJOs@SIZ;ۀ//١(b(БB$GD-@d cf[M~ Ivdk\*p3+6=0(֕ mjbrG9ӻǸ{PKUkj=YFըH _TO[*PS'_@=Rq!BīƸ4Fh?ԡgғE[㴷-ݕy |, #Va6fN-l|dKv=LrIC#Bl?-d${.ѯv$W[Ox+/&h'iur9*|Ҳt#^YFDaޥkqZ dWϯZXUeQkTt䘼etf)vF,- Qz fEL>>k;? ??ٻN Z`$8{[UJJQs>LE‹a^޺ã6,aj [!5(KhΟ.E;{>` 0_Nľj+(vH>³q{9IhDƆ{[K Z@Vdzi Bۓ?5enGYf,Yz6습 B4HyLrr HejjfR2ߧhj5iV0Q%YZ2*K@rgᰫ:V/{UlmtOyfvyu1Ik3Z $sjcm9X (h"ϟT h|_ի\)u,FWxx7D6F 2'y{3}leKEr0{_'%=L%JF Qa$2zpc\^cOf Q1ꨒkY UdNnV'3|3P}c[^Ќ#'_{*g'#<]j(jj_fY~QhZ3Q4ـEԂ@rDRͪ:?2Iz6KeORV 8Cۃu!@qKmΒaOR$ F) yɈ&T4zU/ERyQGn%k/KTJjV4WS oU!f^ t ^*) RHS":@ԥ_=Dw=Mm E*3I,"D"-AȇOl t#5DQ50>n^~ſp䯰C`0<[b'77X>Rf չYrBC\I2e4LUxSghWJs~>w.2UItHoG҂ #jVfPy>+l:"ghh}4a8|WOƯ]' |^zpW3* k;A.cr:)Ѿw⛈ 1?=5߶·4)Qy0F@"/$Y {CoB va-?or<4ji$~f\|)X^CX}]tE26jhx:lQ_E FU5%`?D܏/Ԩ ?Cѩd̼5C\$ha:9j4y>p]힢 -0yH_W*ϰ䋖EyGD}'1K"饼\me?\?4Bo/XEQVH1:i-؄sLc*;Χ-CuykHk}^h` ŹRW.6_ח-%l |o slzy;LKTѧNORȣy/p$3̇U߮+E=K͘B.٘v9X=@iK]+ R-kzQmBLYȿAk͋JT쵶>DQ\yd5L{H#ϛߦ,GU 2M,TŌYLsl Ηh;G5@7ޮ 1v{F9'^EN &p3<`')&ycig! h@h Ƴ(^f9}(ђmJ "QvM`!wc64rB-x $QURVd 둎S``e[TJ`UzJc;PNK9KZA1?~\rh79Wb2#;_p "OGǬ^vY!?W4^i!XkQB>s,V,H7K#I(aH,2l W DP6Ar)?0VCsVv؇\r=ςPoLt-Y4#"עRcME4;_Dyif(.̆R@ys O_sԚ/'&ɠë˙CE @<lg%EV@*򪤥Dh ATߦT^[;'Epfvg!`'3(B͉jFհ@X2YPnbv$$]#5կEpiV[Jy 3=Mү-4=hݐ'ZCfk0 zDX^4`۵%zi~:0at͊<,8ObYhq= _~8|J9b$H`F8d|3E@)`Ͽиe5s kM7isCbEb:W!Xuɀ;,Q$q<"-ltW; !&3:jr 4V)ѽ M ß_θ(<퇳Īda;`_ :sCmA |CV+H>ul\]+_:=[;OOB(4еAx &?<lOg5 R#zTOAf@z}$WЎ bqM5wf/5?8gCܰpf5|aj5-#y$jA<05Rޱ݋$'f{p4OϋSWF@§-gFEDf >h{oA~#$в 䣲 ͚7;vv (>/cTo4edŝ,T7%~n4E:QAWjc2(QBXAA,n\egP]h2GGFW(q?-q7GlI;G &U-0?_15&Mig]_~6m4Ԣ ÛGjH=0[ 'r|A_vQ^mh4V: ZL#n JBPݾE ?Mr80*i䷨#J&l:)iCQ+*PQX ڿT*:|_I!V[1?Y3HB3)r7xdYDQY rZ#5`jF2ջTE*SVZT=h!۴q B-ʋ0* "*%1}`9J1]Z8Öe*_X}Pצ)r6[{>&|# A? ۭ rըX{:_q6WcI9??EQqn'Q\X潻hB&^i[{[DrW%fygVWFJώ@' KoqIÖ>JwAK"H]9ZJ[-Y pBB!`U"KE *RX [oO5S D 7kBMwv?cMڜbl99Z_!!%*f?1̮=O[ PaZ(q]@# g@*L l哯Iu/vhHTIAN01/!A:Sےnzɑ5pX/Vxrb@[9XO=&׈Tu:T im%MԥLRۊx?[~.C_]bU-};xuYn;"u/K~Rȅ*>[Lk:ndX>H"HѴO]4 wpx'HUbvi7*3[PcD=,[mXCkBю@YuaտTlm[2]Fޘ9Bkg %^T ,!(LV_eSEEЬ߬ >֞`ЍeW, )LB)M)oϻ(ħ?emZ&|J8RqeTAaoq}W_> 2Re[,_cY lgsG57V_-Đ:; Yʋ.DʊQ m"0WU6B"f؆bK ь8EZqSy"XJ.=t|s"i%?e)WNH|=9*uhN]WZfVD ??;Vz͆y 1sfLB?9'D䋜S[Ρ4%[{ LzTIi1wxAJ0$GMnG\.)>p9@.B6.ǨdP)2Ea^8c4wo1 fL$ 6hDp|Z̈*(@$dΏRӴvfr+S;kP_oUZg4NS Zr#VDz/sP]8ϗ6lspؐ*TW_y_QS7WnɰI{ ҈/\2T0{s( yK?6h"(~Uf..qlCUJkʯ|"%*kNuL 9ߟ2/}{?ݫ<} ):^ m!J#-oIZ9EpsNBO Q̧T[r&iLYZϊ"5N.44H+ ) D2N8+k\&j@fEWcd8TT4fi16:mJ&eQ5UN[ˬk IKl-MMˤ/*|J~ XuWM ۱d>j0KE&.'.*%`迸XTd$A?{5re3F 꽹iONMr%? f<#p8sۺi>-c %JCVp@vƦ.kd&ߔQ%6]>"Gٲm*b$ PsB2}aHw`21]Â'N~EEӪ>J-ؤTkV_Mۧy5kU%b}LUa iE("WTĥ.y0Qͤky~,D@K"ƨqA)"੽Qg:XM1sVkF®^?8>dZw~}QiO#FC \\QPțtMS$nK>?O-SJڬ'ĄEUJgVla4 꿗FY.[ 'WYrs4]]2rXj┵&2.], EO$ T d.0/|ۮ*}IA\>ajTsi?g X1jeYů^y.FvUr;fVA&5ڣy dN^wo 9:X FAk|ż5Hq*",@"&r9K, PJ)ٿwhR+ۏ篩{rM|ְydڻE˯5&uXg슜FoYQN._z7cXoi` ( =tOjn[ jt`B#Ty -=?XB/:K0%|[uLlVN͖s.>cnx&<Ϭ(iQw>=:z[Dܦb?bfҶ-Ajĭ`2D;d}䣼=.'WC ^snTF ,򌰐_UE0_ K1X Ds=_֞q,y>8mvi\H"ՃTn+1 d* s5+G=:{lHTUf M]`~ɝ-ݼඏ7(ɟL/-3fvB4'HZ|3j~h RC4WUvWnGET#Pc]%d*Q#*Ślfw̿#$on0AQdR Pշ۽o/(FUЅ. UBb"K8l=Ny]}1hn͑&A@nM]/?5čJn*0i cg,xbQzC#eJ(OJ3%@o#o$-.PU0b sy{Y#L%n= 뉥R@D3`n6?By~]]^N& ?v>D`'*˪ 9ϗ]-OQSy~iܮ-6Wxٞ.kSZKӢ"n<9`9N,%`AgKk]BQ4/s |kלk!OA݇Ūspڌjɧ b++w%jSN_i@l@HؿtZ-0ټm;T JWPpn\\r Ĺ:"L7\D% x}(|\|`q/]R&BT`Q}7 IchG. _cy` vZAS6UiTǓԁvWѵ49J3KgS"m"TUQl+45[Tf55oCͳקS+Ҧ%! J nTs+ ,ޚ)A F<XeAy %jH9N7^P+yeyL3t63gޠz ye~umgs,0&1B˔Xv|?W˃hlQ,S` rkڿ ~]X+'ia#LVnS%irЪr}bVYg^th^GY[/nFδ5ĴC~#S@6rj1CG0dٱpJZkb Sl4,O#̋ fZT+(ϳwH>m"Kp}W*cǬYJ0j-ThYFRn'Żٟu?ݔ~"N5Ok6#s>m[+5)J8$}X&uQ9 d|Nfݽ9s 89riR*Y]ZZ#uJH_]b6 ɶ4ךopY}\e*QP(My5G _?GakAlB.g^lu<3U0 l6f39$9߀:*?V*Pr\h:&1.IJ荲yqH 8 jݛZeeͩKGH:ZjRHOg gYgmk_݈VYm Ji.J?5ݥt~uYq$ >__+kg&j!3ao' !!?ytSo>DAGaN "iAX!֞5~}cΫl,vuo7#<'_ 0-:6S9eu}7!#bgU_kyxcwTAnѺEW?wJ/{!5djƌOW.}mў$ItɵޥRձҼ(fjOQVFyP^ef<QG2C@ B&D>/z4O DUR&^ i]x+ٷ_fQs OOm:"\k]zlPt̀Cfe{ bu_ ?Bp騡rjЛW4NJj)k.E8P,%-&UDb: Wu=)x-5$ -`1G% IZA}v(AW:3iԄ:f_sb$n14{ !E%n3;)BsiLQUӣ )P\ ]!AG aFe7opC  2Ю&Q@DwM-y@8T*U%r*^Im뤎-|BYx]G wD,&/RlbBզ.#Rqzm$T|nm \]!P=r9 <ߛ:ݑ}D` {Tef-!}'m6 }:nP\%TPUҋMkȜ§B6.a//SN! ];Rث34aRB_?uz늎DՑqnX>wϒ&Y寬*QTy +/ZsQ蘯.>M]c2ilF K"]f>7\r(%ϧN4K:5$&Ԝ{Rfc6+gCv(H|r-8.1ZVnmz\*I2" bʆdaؿ&MtugRjűjΟpXQRqikv|C']%|q-rꟛ2JЅ\NrtнhiяjwUA&!'&9u"rzoD@u$%ëj5e-!RenJbs!qzF9,S [uN9,"%,g99.GBÁjॷ5F+8mդ[HAHԀqGt! `/fEuZgL3UP&+_d|~/h9o-N3]>bOewZOFQj?(Up(LJN+G~UΟ)qqA,oPhY~% :'"g\UG!H^0+ "ƟSH~†B*MLC4Жb$ ,3H!Pl)NC"aծR[Sxt%hRϋXļq}^L7ΗoP_-M /Ɓ2w5})au:M>PgK-Yzn#nV$eUm<ƒ6ifx/3? m?b󟖛XM)'(+uغlM سQ/?y7ہt$cm]r \k >ճW@)ޣNQ0Ks%ĸh~ZrAvBź8[?ߗFj|؃0ـCDįc)7kQ |Fp_lSTK`VP~Vgٿ."nML?{S>LL LQb_>)2.6ő9T92ݪYdT\1=%0ҫ6%ENaWzVDzS&Q[)QjۋZ{yy7UxgmS/C4XM)v'>Jḓ]Q= @P~v3A =6ٙk%eT4 39am!xXеBQ+mhϲv/l[lgK@iq3F1ЫRbGF6/[L">ݺX9K=U_e?Vк̠u9\&}W |2>u.6=nWP[gxw^+UF/FUGqPfmQPBc B2d8 ɱU֥ylv^h㪟|mpqzj_q :ȎF}L g}ј0ч4~qd?A*)AQּ"4&wzjoG  a!*ËSGY>^_c\j]tZ5F  [sx;n,N)j}[8vIdž9?,!Ƃ'|ĒmvR ٷ#E'SOMV]k4 T"(\f)qFfOXl&+Gh< vlxw>QUQYe--LB;;c"':ۜR@Ҏg#s˹RȬLʫB].ٞb3ephe^5Arć4›" ocigB?k&i4SaL9^a<1|pd+t)R+KVa.d*[U0Zö+  'GJ#IE v9G" ѳm$!S1©AxH@.u3s^S@ڂ7Pp,Ag/&`< 4{Ԯݥ~u۵}ݟvḻrxu~U:)Ft!;y*(f r= &SsIX3oAjRQAםkJ0l~ZIE%9*h_wY*GS xG#ɇ'l`稺ѥ桔֡t/JQ×b@%j_T8+o2UO57SE9 [_ձzgcobٜ='nY ʤy']f = 5o:v.YS*iuRΛƞ֦ZiRJ]2g$VX2UZG .Fy!^g? ;O $2<Β :gm[j~'_/%Rm+zM{*K -'Tsisح2% bԩYm2dq 0 C4/G7E=sہvƯQ?+D*4o"5~鋖]l`~f©K;;:zUc8d-X_`*V٥b̆O{s8'v{$hZ|uƨB&Gql7p]\D6#e)Vj βm`y[ 46E;N-Qrؠv-O]B(yvΙ#ĽCw8 Ǟ9 0zW>0* (26SmͿGRI(3MķR YGGdձغHʐ?  i?m?w w| h-m B&i8R%{_<A;Crw}3X[/׹ի vh)/e)˷,''>` =C*oA&+IJ P^`oN+.mʶ|UBl[ ,g%/l}Y%RdL`c="VH W#EtロɅެ}}*Zi@ 7DUizԼ.C I?CF%ZZ'JL\~ݥ* x%VKHAM7c߰ bЖJ {Ŵxz>ھ<ED}JeB_B~2vHeqaS^C)>g;\u[_ſ]hq1FXxr-e{ b|^F=)U51?QsRus!pS 0i˃˼mꁃF)ԥHEaٛ5c㜱;[z)3* ٌ"of鍏uY9Gr67@ D , <56\+q@8@>ӃTf\)ʌ [99 V)85?hU-yV".2&p3ch$sá0؝f69s* Tvh3פ9vڔ$ ]_29ؼnCrtBܘ!GT 1m]?˚(3U@1Ώ0n[WS VNa#vs8=.$w͗/m}Jg(ѱ,%s%V" I)e[s9Eݣz}W?FG]ɍw?@$e5ܑ0$H¹_[js& %&-\@VJA3ڳ S+UcY2b*`*/ tq 㔒ݝo?4/ ʠ=.}a H( fσBqLE,A^PhUPЙnEj,:֥[1XmC4yVGi(<ho.Νw'$$ mQ]5[V3:kۺr!}Mvu;꾲 5:Jx[a^]Z$vJ5%ZbTQj_.eO_v??.Gr2hL})̞vGWSKCS$BGiz}DG'9 QY4R綖 aXekkٗXτ/p y_Ry^.'"\ӢpPD̮,vMT#8r+y0su򍼛ç;_Erfe*k B^U!6E"ʜjd*U^!/5a>B8\]_?`RIFU K3>&n'jbg~U_ez;3*o H< VsVSoC WCfL =P!ʏvgm(<'&~lsza1p.Ǯ ,%P}gª'[uY"S0QTiSV}[Lj5nm2B@U|]*nr\i]墐<~:@njiU<^Zvx{L#`I]~~x+GqY"@8쟼(됓Uv)T>3"TUxK]$J@*S5:9puk8b&ir@2| N?;LK ?~'Dž1zJHJ,Gk L/$pӛܶS^Sҗ*"AM 9L~kĘH?9.VsKv\~C ~%O /߅g+낻`@jEm0\];( UйRz^&T] OZ|W Eg+WuU:|M^,Z%xB>K}Ba˜2f_@"#0ORN5ބX14}>$e&`ҿ%ޥؐ."%f֭K?韓C}Y&Ua][#(egG&Hł=14GR 6bdn`(<ȫ>p8UNZd&PGě`wv[1a"-⋶#󭓂z s|7/&bI'Îÿ|f17KJoYd~rL@*E* +H9zvaӪ遇~!#W:`iOyc~t:8ދpخIcD [ޞn)!*PR-Wp;[3 -jg(2*@LwC[z ċ/mn]X5Յ@2lf_?fJy"Z.46Y0է_0exE( 9W46FUًa_QU *fСMYtrfb\yxa˴Jf,"r{]}I Yiq?;X vVCns}7)) '8m?]vEsdEUo 4T]M:db[3`xR#GG\8ʾf4 E!`s1_ʇfx|33O.@;&  $#0ct~a42FѪòHܛ]$LW5ϣm+tG?2Z@ ,FnXaQT#MIWT nr< o,[MRIQ?mAmGOEOQ\ppP/!RS*%{{<]كZQUKy1|dB*Ruw`UYvE, ^(@;'K0 sfrfOlEa;E2`i-)t4p08B>;rzNkfF@ڍQ;'n)ly_rr1=>GH )= W9 \eZMeTS%k6t;دמ۹c" ء4HM<>ߞiO (?9I),gZm17,<* +BC =,Jc]Gy/s[ ^9$N/L;:=ݎQg򹳉la= 3|flEhwְ`A ɯ8 /rв98[gA-iiGPA[`B!dMm]ky$ %ΐ]nrxR[-S.c ?'Nd5^s(|[k;H ?8fν.O;0~!-"v @_LPl9*3#ҭ>$ad)҅y9j_u>lcHdCCiU  ;*v@lr^Ono??dDD^xׅ-Ơ8o{^sdy<~},8ϾQ}\%]ꂂU"$^?ˬO+8TӘOH1;f=q ȞDhb> emUɁC@)$ "pK/ݩ5mCA\jR}V٘Mp( )~B^c1K{`e[+Y$EbWl\|ߑeח*$H@|U(@}~cW~iS]uENᨓҫVzݤ.?_U:S('6as o:F ί_,sRBUY@lKsF$afcO>D/"sB l;x72TJ+Q[S%uhDz SqacK^~7W;#RٿÎEa v |(y a$`*^0'.sJ XZd{#y@_akfWٵ* p@pȌV&$G)U~~"3FSʱ>'"4ZFt@2+wMsiB2֓@RI7µiLS)T.%BY ~~3jJ:"%L4o٦Y;-WfL{?^\N&& ⠜YGATliF 2Ab(#ո߾f}SZS1OrĈVeJJ)Ӡ`O_6Z\y1|{s%W.ޙl' ٿsJ z>g WQcWcN +[f_r[f7.1C3@8wQPXhAU+\"h#Ob,A=5 xvŲ ݚIܺow%mQ<:Qݚ0unUY>Bljy\o>xч0{?.ma)lX G}){O ҉D8^V-hy 0ow =/(Ӕ^6!>&# A?Ѷ?F!I>_9fؿ6˅// [@789-Dc?BF мN['? :W8R"aȩ$} FKwaWiK'*TVy38q>)xEG|}z;\seյٿ6~HL#)9a+c}P;ClbR ҋl1F3Fe$r?-#m$ؙw`s=M"P_W^%]݈D`ߓ?- ٿ濷LΓݟ=<_bjr{@ y=s8J_(hdк_>/2!a6a8y2ՆUq˴Q)YN^9HQۗr>Z̛Vo3g'c 0_QzxO{ʴI@{ ԈRaQyEEX%!2$9`[K5z!0]][ U{4UY!0VA_wsq@ǰ?o_^6vZ0?E5{52`ljaHF"N3J"z[ Qeɩ6FU*w#F|sf,.q_j8f??*Yg17s~umw|t2O€i᳭]DSazS0`:e`b7e|Qċ.+"u?cWvŲ{%?-/p>OE~Erz }݀|a5>~ 9<ݷp%:l?g)\BaYmhPXRղ=-ul~ɜUo?p=M"\} A?m`w̼%J"?Xb{fff/_p@F/M&R86(-J (#Jt,ޔ&RR.}*ayDZ{m{xUI‹G)WEp)V<7{Ďxh9鸷7g;xem?0ٺ~r&&o}}PV掴$43l^ؿQS+Ծ?V]qBqOFd1Mhkv(6][.S?"DJ1#Iq{mm;<"D]V`0p NHj!]r٫A+*eُCmwEwWcDrbXY+V×P !I'OgbUBr~AҘ{wgeW4[n}:!R)gr!{sr`B *lPkek(}*ZB _=Ѵ4?-Zao7Cj>T`m^xC,J.I29P2,Ku> Vf'eͷc?FN: #vPA b!wcMQ9+c"Zȑ2> ^4D .8"K;p'Ia^0l.z f&m )[EMW[pZ+6E:GA8ߢ׾ҵr]*ڦ)χUlΏ. P$۫ -ȏE{>IpU0Y_j "G_x:tE L6;؀ʵ^8'+&78),AI</jWFK ^.D/%d 4.Ù/Z2=] 3:]pNף/`4"@ȡenl]ɥ+3>Tu!G-S'&[(:>>K kVxO_ս>r o:0Qgi:/؋k_ltE,Mn996@C e뿰}+׏z=cA<&T4ב,A.W⇥6'ce#z+1К`,E?KK8JVf=k79q'p'm/C|acv6`/,k^.A&}ʮRMpѾϙ\3BXSӜ  PgVM ງpb5a=k}Z+Ms>Wp^$sBnY;lw< EmnXRS@"t.-L4'taM~@*vm/ _0;+FYD?}럞/)#(J@41T'{VHi+ŎsA-X wqKkF.0- ~IO 2̢ .KU}+4(d^#*m } !*" 3i*>:UGK?90ED0K14*l uCK @@_9®2mKn/m iWF-E#uhA|!><-xd1 ku )ИmHG~{zD۳?_?Ih3]t |wߐv6dE= '_Uw@D >Wf:Җy2Ɗ0?阤ژ(׃ΒV@;{2HM4<5llDBmLIMJnw0.J¹*!gr7`e@L=rizMR,"̈́`r]t@Ku9'wbKnm0>]BwFƕ~TF1 v!x@@zr3d=ׇZJURu'¿pn@Ј %s!\5|ESn"PBZPK*1u1} I%AQ]# J(CΔP7X|]IEpCi ˲y> $edK" jsWw8D_`BE""=PD,Ðr g3 2 fGZx&舨{Qx=+?vsO1^¿&ڊ,Tp^6Ѕdc &:ה D\BftnH2sOk%J]AA/EHŢ \hTz&"rDVc`n"FoPS<) W0,KueA=ŖuBXJ{I+AòjBre ohpdHb?(M}=(z|lꍔ_d^[Y] B ~Wo4{_âM"T~ X\a[ FьS[X,;C Qp&hhȮ} ?n[&}ɭOEz-Xj*!_/"e_NEQ6Rc_T?U%4DRIi>R7hg4XtM}*[vrhhv@)::,fwGؤ/ Cܺκ??Hx{ _PGGD$?nwHDW V;QPo[BFsuLس K8FKvp}p`rc97*&&}7H/_*ﮈ|,88ŴQ6_8;_hp_U:.0O^g D<7ݪΜHOZ0s&~3alrO`)]+|a"thlw#Ut:a_@;$d! $ݲC" fU@TV6?ZVT_.᰻^lZ}1PQ*)2P!7yqܡ9׏ aϚQϡ ;{: &ٚ.iR\OĚsF?'8c!x :&Tm{0et~鿒OJ )T(Ux:N Ƕ$+@ .QژVӬZ_}-DmlyUu9 1ٞ$K?Td;==؆0 W/a|$LVVCPݳ8rފ^tڧdqiA.ws>k }!~+6+~(XیIJemQ!5;mǏ<1BܖN<axyw b5rd7lqZŎhʖ9ykvnaks< 6"H,x4mQqf3lAU~ZB~?JbRP`v!nm03;a+_i}'t{q5_} ^EbјmA\qKdlm j+?,-`սdB%q~IJ>ww󴺋% Bpag-O aXHW5]p4tf"I?Nv smr]>r:uq.W^Ȩ4V8<3=6΃ l[ۭ1_?-f`s855 Q)f4N#:Ni2o R9 6OtPA(WbVEppM&:~'$-&~͋Q#Ir* L@ζk!C>2펒8Fmt]{ ͅfvj,)-QbD 3z#W& mq-_! vi~III@~M,^:He{9d; K:D5\G"1UӶEEKט7kQ:,O5FW6qISW%Z2qtm4&*lP%s9&^BiQ7S?#0nE**#S}$%h*:%L$PHCsD:IyБzviЁUtp?w4%C~kE8V[YR>}zBFo%@᫕u'2(Ԉ 6d?2D/ M@#VpP5x;[Ux}U,6lհS G70!TH 2..#Oh.Я›-WɏiHфrM425ERZ&:saXv5Ȑ'.^E9N fZ"'|?7!|]aN\ 6r>urUK/q ˳dy ~oo~DH{w>o.ZCsƼ M*!B_*^a'ή*#\оG@>Xr+ __n,uӫk\_86E ,]tz㚚`#Ia`sr5hz>k58?|I?`/_ȗ"{ZEr"d="K:<ϳw):Zzh\?%љDWvA£ԧާqc>ݨ[>]_PRG Pv"uPhxt|>En۽;4L?3~)wI.H@/Eˤ<oMzJ$!fn)Xbu,>w9 ˕ԝEYׅOU&2 I-5jcyZDPxJp`4ipxK}]9/ D9z^ѓz)Av%7TrO%OnN󜋌NC?ʡM>W _sR8o.Ӹ+L{;%ǣ,Ŀ'P%i-b T*^$M7O)vQHۣx8j\-HGodڳ=arK~-N*3FB~deǩM#9)y_7tsfwQ#O@&s^8F/0A,ƏN*dcxU;]x_/ VƳo%FBy'|D ~EfS=j1YVRNA[?S)hgq 8ml|~6>NA[?S)hgq 8ml|fl\utO ˧CF;[ن\fCӮ >N 5jγخa<#cs+>*x<-a#'"f)kT8^՜.NLc ǔ?LYpbD\pljE5g.b3c~M_÷Jbg6EuKݶrߟ t SVdbϵ~} [Heyu=$O0Y~c#)υM6cIijq ~yz±-wa4_p.u. N)D Ǧ/KVw7;UdO'?ǷoY֐)6{L,PO5Xݯ؛v(_S)hgq 8ml|~6>NA[?S)hgq 8ml|~6>NA[?S)hg?=l8path1 /n@u@Y@n@z@Y@^@z@Y@Z@s@Y@\@i@Y@b@e@Y@h@m@Y@m@e@Y@s@d@Y@t@b@Y@v@^@Y@w@a@Y@y@f@Y@{@f@Y@}@f@Y@}@a@Y@|@^@Y@z@b@Y@}@h@Y@}@k@Y@~@m@Y@@@j@Y@@g@Y@@@f@Y@@@^@Y@@f@Y@@f@Y@@e@Y@@i@Y@@q@Y@@s@Y@@v@Y@@@y@Y@@~@Y@@@@Y@@@~@Y@@@Y@x@@Y@w@@Y@g@~@Y@X@@Y@\@@@Y@H@@Y@D@{@Y@@@\@Y@P@@@Y@p@P@Y@Jscr_draw_messagef// // Draws a text that is in argument0 // { var ww,hh; ww = room_width - 40; draw_set_font(fnt_message); draw_set_halign(fa_center); draw_set_valign(fa_top); hh = string_height_ext(argument0,-1,ww) + string_height('A'); draw_set_alpha(0.7); draw_set_color(11135725); draw_roundrect(15,15,15+ww+10,15+hh+10,false); draw_set_color(0); draw_roundrect(15,15,15+ww+10,15+hh+10,true); draw_text_ext(room_width div 2, 20,argument0,-1,ww); // draw_set_color(c_red); // draw_text(room_width div 2, 20+hh-string_height('A'),'Press to Continue'); }  rebound_3dvar d,a,b,dx,dy,dz; dx=other.x-x; dy=other.y-y; dz=other.z-z; //d=point_distance(0,0,dx,dy); d=sqrt(sqr(dx)+sqr(dy)+sqr(dz)); if d<=(radius+other.radius) { a=((hspeed-other.hspeed)*dx+(vspeed-other.vspeed)*dy+(zspeed-other.zspeed)*dz)*0.8+d; if a>0 and d>0 { b=a*2/(sqr(d)*(mass+other.mass)); hspeed-=dx*b*other.mass; vspeed-=dy*b*other.mass; zspeed-=dz*b*other.mass; other.hspeed+=dx*b*mass; other.vspeed+=dy*b*mass; other.zspeed+=dz*b*mass; } } rebound_2d-var d,a,b,dx,dy; dx=other.x-x; dy=other.y-y; d=point_distance(0,0,dx,dy); a=((hspeed-other.hspeed)*dx+(vspeed-other.vspeed)*dy)*0.8+d; if a>0 and d>0 { b=a*2/(sqr(d)*(mass+other.mass)); hspeed-=dx*b*other.mass; vspeed-=dy*b*other.mass; other.hspeed+=dx*b*mass; other.vspeed+=dy*b*mass; } distance3d_notwork?Preturn (sqr(other.x-x)+sqr(other.y-y)+sqr(other.z-z))< sqr(radius+other.radius);hit_wall_slided// Simple platform movement code // Oliver Broad 2004 // This code goes in the End_Step event // // First test if a collision occured // Note this version should be more reliable in games where // collision events can modify speed and direction // however it may lead to slightly inconsistant collision handling // /* x=xprevious y=yprevious if place_free(x+hspeed,y+vspeed) { x+=hspeed y+=vspeed } else { */ //Move horizontally, testing for contact if hspeed<>0 { move_contact_solid(180*(hspeed<0),abs(hspeed)) if not place_free(x+sign(hspeed),y) { hspeed=0 } } //Move vertically, testing for contact if vspeed<>0 { move_contact_solid(90+180*(vspeed>0),abs(vspeed)) if not place_free(x,y+sign(vspeed)) { vspeed=0 } } /* } */  rebound_weakvar d,a,b,dx,dy,dz; dx=other.x-x; dy=other.y-y; dz=other.z-z; //d=point_distance(0,0,dx,dy); d=sqrt(sqr(dx)+sqr(dy)+sqr(dz)); if d<=(radius+other.radius) { a=((hspeed-other.hspeed)*dx+(vspeed-other.vspeed)*dy+(zspeed-other.zspeed)*dz)*0.4+d; if a>0 and d>0 { b=a*2/(sqr(d)*(mass+other.mass)); hspeed-=dx*b*other.mass; vspeed-=dy*b*other.mass; zspeed-=dz*b*other.mass; other.hspeed+=dx*b*mass; other.vspeed+=dy*b*mass; other.zspeed+=dz*b*mass; } } step_update_z// code to update z position zspeed+=zgravity; z+=zspeed; if zglobal.roof-radius { if zspeed>0 { zspeed=min(-zspeed*0.9-min(zgravity,0),0); }; z=global.roof-radius; }; if z=radius { friction=rollfriction; } else { friction=0; /* hspeed*=0.99; vspeed*=0.99; zspeed*=0.99;*/ }; bounce_boundryT// simple boundry code to make objects bounce back into play if x=room_width-radius { x=room_width-radius; hspeed=-abs(hspeed); }; if y=room_height-radius { y=room_height-radius; vspeed=-abs(vspeed) }; $quaternion_documentation_placeholder /** \file Quaternions.gml * * A collection of Gamemaker scripts for rotation using simplified * quaternion algebra. * * Quaternions are derived from complex numbers, and whereas a unit * complex number can describe an orientation in a 2D space a * quaternion can describe any orientation in a 3D space and * provides a code-efficient means to transform orientations * particularly in Gamemaker where the more usual matrix algebra * would require a larger number of operations for the same result * * Quaternions have many of the characteristics of rotation matrices * and indeed the same results could be obtained from matrices, however * as Gamemaker does not have vectorised math functions (matrix functions) * quaternions appear preferable due to requiring less operations. * */ !d3d_quaternion_set_projection_neg/** \def d3d_quaternion_set_projection_neg(x,y,z,q0,q1,q2,q3) * * Set a camera orientation from a quaternion * This script treats -x as the base direction, eg looking LEFT on the map, * which is inconsistant with the rest of Gamemaker but was convenient in * d3d as on a textured sphere the middle of the texture faces left. * This function will be replaced, for consistancy with 2D games where * zero degrees means looking right. * * */ //Optimised vectorisation for camera? //Formulae obtained by expanding out q.v.q* formula to give formulae //for the object's x and z vectors //precalculate common expressions var t1,t2; t1=sqr(argument3)-sqr(argument5) t2=sqr(argument4)-sqr(argument6) d3d_set_projection(argument0,argument1,argument2,argument0-(t1+t2),argument1-2*(argument4*argument5+argument3*argument6),argument2-2*(argument4*argument6-argument3*argument5),2*(argument4*argument6+argument3*argument5),2*(argument5*argument6-argument3*argument4),t1-t2); "d3d_quaternion_light_direction_neg/** \def d3d_quaternion_light_direction_neg(ind,q0,q1,q2,q3,color) * Arguments are ind,q0,q1,q2,q3,color * * Applies a directional light according to a quaternion * * Script treats -x as the base direction. */ //vectorisation of -x direction //Formulae obtained bargument2 expanding out q.v.q* formula; d3d_light_define_direction(argument0,-(sqr(argument1)+sqr(argument2)-sqr(argument3)-sqr(argument4)),-2*(argument2*argument3+argument1*argument4),-2*(argument2*argument4-argument1*argument3),argument5); quaternion_ball_roll_simple/** \def quaternion_ball_roll_simple(radius) * * This function implements a simple rolling motion * by converting the object's hspeed,vspeed into * a rotation and applying that to the object's * orientation (q0,q1,q2,q3). */ var t0,t1,t2,t3,vx,vy,vz,radius,temp,temp1; radius=argument0; // ang=degtorad(-5)/2; // note that this function takes advantage of the fact that // the angle in radians that the object has rolled is // equal to the linear distance divided by the radius // also note that the factor of 2 that turns up repeatedly // is because quaternion rotations require the angle to be halved // sinc(x)=sin(x)/x but fiddled such that sinc(0)=1 // it is used to prevent division-by-zero errors /*if speed*100>radius { temp=sin(speed/(radius*2))/speed; } else { temp=1/(radius*2); } */ /* movement vector is (hspeed,vspeed,0) the cross-product of this and the vector pointing to the point of contact: (0,0,-1) yields (-vspeed,hspeed,0) */ vx=-vspeed/(radius*2); vy=hspeed/(radius*2); vz=0; temp=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); temp1=sinc(temp); t0=cos(temp); t1=vx*temp1; t2=vy*temp1; t3=vz; // We use a LEFT multiply to carry out the rotation relative to the games // reference not the object's reference multiply_quaternion_left(t0,t1,t2,t3); d3d_add_rotation_quaternion/** \def d3d_add_rotation_quaternion(q0,q1,q2,q3) * * Function to apply quaternion q0,q1,q2,q3 to the current drawing state * using a rotation about an axis. * The function uses d3d_transform_add_rotation_axis * * note that although I do not have mathematical proof it appears * as though any orientation may be expressed as a single rotation about * an axis, and therefore that any combination of rotations about multiple * axes may be combined into one rotation about new axis */ // The commented version is the code written out in full for clarity //var q0,q1,q2,q3,mag,theta; //q0=argument0; //q1=argument1; //q2=argument2; //q3=argument3; //mag=sqrt(sqr(q1)+sqr(q2)+sqr(q3)); //theta=radtodeg(arctan2(mag,q0))*2; //d3d_transform_add_rotation_axis(q1,q2,q3,theta); d3d_transform_add_rotation_axis(argument1,argument2,argument3,-radtodeg(arctan2(sqrt(sqr(argument1)+sqr(argument2)+sqr(argument3)),argument0))*2); init_quaternion/** \def init_quaternion() * * Sets the variables q0,q1,q2,q3 to the basic unit * quaternion (1,0,0,0); */ q0=1; q1=0; q2=0; q3=0; init_quaternion_randomA/** \def init_quaternion_random() * * Sets the variables q0,q1,q2,q3 to a random orientation * quaternion. This is done by generating random angles * and converting the result to a quaternion * note the special distribution of "theta" needed to * prevent bias towards certain orientations */ var phi,theta,psi; phi=pi*(random(2)-1); theta=arcsin(random(2)-1); psi=pi*(random(2)-1); //it should give an even spread and not favour the "poles" //as a flat spread of angles would multiply_quaternion(cos(phi/2),sin(phi/2),0,0,cos(theta/2),0,sin(theta/2),0); multiply_quaternion_right(cos(psi/2),0,0,sin(phi/2)); /* Picture a globe, phi is longitude, theta is latitude and psi is which way you are facing. Phi and Psi can be simply random but if theta is a simple random number then if you are near the poles the lines of longitude are closer together. This skews things Starting from the equator on a radius 1 globe the area of the northen hemisphere is 2*pi and the length of a line of latitude is 2*pi*cos(theta). The area between the equator is 2*pi*sin(theta) (basic integral, only works in radians otherwise it gets ugly) and from this I infer that sin(theta) should have a flat distribution and so if theta=arcsin(random) then sin(theta)=sin(arcsin(random)) so sin(theta)=random (provided random lies in the range -1 to +1. */ normalise_quaternion/** \def normalise_quaternion() * * Normalises (q0,q1,q2,q3) * Ensures that math errors have not shifted the absolute value * away from 1. Note that this function uses slow math functions * but the optimised math form uses more code and so would * run slower in Gamemaker. */ var temp; temp=1/sqrt(sqr(q0)+sqr(q1)+sqr(q2)+sqr(q3)); q0*=temp; q1*=temp; q2*=temp; q3*=temp; quaternion_fly_roll6/** \def quaternion_fly_roll(angle) * roll manouver script for aircraft-like movement * * causes an object to roll by an amount angle * * using multiply right carries out the rotation in the object's reference * frame instead of the room's frame */ /* this is old code left in for reference var ang,vx,vy,vz,t0,t1,t2,t3; ang=degtorad(argument0)/2; vx=1; vy=0; vz=0; t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); */ var ang; ang=degtorad(argument0)/2; multiply_quaternion_right(cos(ang),sin(ang),0,0); quaternion_fly_pitch9/** \def quaternion_fly_pitch(angle) * pitch manouver script for aircraft-like movement * * causes an object to pitch by an amount angle * * using multiply right carries out the rotation in the object's reference * frame instead of the room's frame */ /* this is old code left in for reference var ang,vx,vy,vz,t0,t1,t2,t3; ang=degtorad(argument0)/2; vx=0; vy=1; vz=0; t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); */ var ang; ang=degtorad(argument0)/2; multiply_quaternion_right(cos(ang),0,sin(ang),0); quaternion_fly_yaw8/** \def quaternion_fly_yaw(angle) * yaw manouver script for aircraft-like movement * * causes an object to yaw by an amount angle * * using multiply right carries out the rotation in the object's reference * frame instead of the room's frame */ /* this is old code left in for reference pitchvar ang,vx,vy,vz,t0,t1,t2,t3; ang=degtorad(argument0)/2; vx=0; vy=0; vz=1; t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); */ var ang; ang=degtorad(argument0)/2; multiply_quaternion_right(cos(ang),0,0,sin(ang)); quaternion_rotate_vector6/** \def quaternion_rotate_vector(x,y,z) * script to rotate a vector by an object's quaternion * * arguments are the x,y,z components of the vector * the result is put into variables vx,vy,vz * * this can be called with (1,0,0) to obtain a vector * pointing the way the object is facing. Use (-1,0,0) * if you are using the _neg functions */ var qq0,qq1,qq2,qq3; qq0=q0; qq1=q1; qq2=q2; qq3=q3; multiply_quaternion_right(0,argument0,argument1,argument2); multiply_quaternion_right(qq0,-qq1,-qq2,-qq3); vx=q1; vy=q2; vz=q3; q0=qq0; q1=qq1; q2=qq2; q3=qq3; sinc/** \def sinc(x) * The sinc(x) function (unnormalised)=sin(x)/x * is used by the quaternion_roll function * sinc(x) is used for converting a vector into a rotation * axis because it is valid for x=0 and so it won't cause * divide by zero errors * * note that for very small x sinc(x) is close to 1-sqr(x)/6 * for larger x sin(x)/x is used instead */ if abs(argument0)>0.00001 { return sin(argument0)/argument0; }; return 1-sqr(argument0)*0.16666666666666666666666666666667; multiply_quaternion/** \def multiply_quaternion(r0,r1,r2,r3,s0,s1,s2,s3) * multiply two quaternions r and s * arguments are real,i,j,k,real2,i2,j2,k2 * result is returned in variables q0,q1,q2,q3 * * note that the order of the two quaternions is very * important. multiply_quaternion(s,r) is not the same as * multiply_quaternion(r,s) */ q0=argument0*argument4-argument1*argument5-argument2*argument6-argument3*argument7; q1=argument0*argument5+argument1*argument4+argument2*argument7-argument3*argument6; q2=argument0*argument6+argument2*argument4+argument3*argument5-argument1*argument7; q3=argument0*argument7+argument3*argument4+argument1*argument6-argument2*argument5; multiply_quaternion_left/** \def multiply_quaternion_left(q0,q1,q2,q3) * * multiply a quaternion argument by q0,q1,q2,q3 * argument is on the left (the order is important with quaternions) * arguments are real,i,j,k * multiplies argument by (q0,q1,q2,q3) */ var qq0,qq1,qq2,qq3; qq0=q0; qq1=q1; qq2=q2; qq3=q3; q0=argument0*qq0-argument1*qq1-argument2*qq2-argument3*qq3; q1=argument0*qq1+argument1*qq0+argument2*qq3-argument3*qq2; q2=argument0*qq2+argument2*qq0+argument3*qq1-argument1*qq3; q3=argument0*qq3+argument3*qq0+argument1*qq2-argument2*qq1; multiply_quaternion_right/** \def multiply_quaternion_right(r0,r1,r2,r3) * multiply two quaternions q (from object) and r (arguments) * arguments are real,i,j,k * result is returned in variables q0,q1,q2,q3 * * note that the order of the two quaternions is very * important. * */ // multiply q0,q1,q2,q3 by a quaternion argument // argument is on the right (the order is important with quaternions) // arguments are real,i,j,k // multiplies q*argument var qq0,qq1,qq2,qq3; qq0=q0; qq1=q1; qq2=q2; qq3=q3; q0=qq0*argument0-qq1*argument1-qq2*argument2-qq3*argument3; q1=qq0*argument1+qq1*argument0+qq2*argument3-qq3*argument2; q2=qq0*argument2+qq2*argument0+qq3*argument1-qq1*argument3; q3=qq0*argument3+qq3*argument0+qq1*argument2-qq2*argument1;  fnt_messageArial   fnt_text1Arial0 : obj_message Yaction_execute_script 0 themessage000000 action_if_next_room00000000action_next_room0000000000000000Kaction_restart_game00000000obj_message_3D [{ d3d_transform_set_identity(); d3d_set_projection_ortho(0,0,room_width,room_height,0); d3d_set_hidden(false); d3d_set_lighting(false); }0000000Yaction_execute_script 0 themessage000000obj_sound_midi1  action_sound01000000action_end_sound00000000obj_sound_midi2  action_sound11000000action_end_sound10000000obj_sound_listener [{ sound_3d_set_sound_distance(sound_wave1,10,200) sound_3d_set_sound_distance(sound_midi1,10,300) sound_3d_set_sound_distance(sound_midi2,10,300) sound_3d_set_sound_position(sound_wave1,obj_sound_wave1.x-x,0,obj_sound_wave1.y-y); sound_3d_set_sound_position(sound_midi1,obj_sound_midi1.x-x,0,obj_sound_midi1.y-y); sound_3d_set_sound_position(sound_midi2,obj_sound_midi2.x-x,0,obj_sound_midi2.y-y); }0000000(maction_move_to04000000'maction_move_to40000000&maction_move_to0-4000000%maction_move_to-40000000obj_sound_wave1  action_sound21000000action_end_sound20000000obj_FPS_bullet  action_sound40000000[mass=0.5 radius=30000000+ action_ifH(sqr(other.x-x)+sqr(other.y-y)+sqr(other.z-z)< sqr(radius+other.radius))0000000action_kill_object00000000[{ var ss,cc,rr; cc = obj_FPS_camera.x-x; ss = -(obj_FPS_camera.y-y); rr = point_distance(0,0,ss,cc); ss=ss/rr; cc=cc/rr; draw_set_alpha(0.8); d3d_draw_wall(x-3*ss,y-3*cc,z-3,x+3*ss,y+3*cc,z+3,sprite_get_texture(spr_FPS_bullet,0),1,1); draw_set_alpha(1); }0000000obj_FPS_explosion  action_sound30000000action_kill_object00000000[%{ var ss,cc,rr; cc = obj_FPS_camera.x-x; ss = -(obj_FPS_camera.y-y); rr = point_distance(0,0,ss,cc); ss=ss/rr; cc=cc/rr; draw_set_alpha(0.7); d3d_draw_wall(x-8*ss,y-8*cc,2,x+8*ss,y+8*cc,18,sprite_get_texture(spr_FPS_explosion,image_index),1,1); draw_set_alpha(1); }0000000 obj_particles Yaction_execute_script 230000000Yaction_execute_script 280000000Yaction_execute_script 270000000obj_FPS_q_ball" cradius10000000[q0=0; q1=1; q2=0; q3=0; 0000000Y[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=0; vy=0; vz=1; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion(t0,t1,t2,t3,q0,q1,q2,q3); 0000000W[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000T[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion(t0,t1,t2,t3,q0,q1,q2,q3); 0000000S[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000R[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=1; vy=0; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion(t0,t1,t2,t3,q0,q1,q2,q3); 0000000Q[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=1; vy=0; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000H[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=0; vy=0; vz=1; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion(t0,t1,t2,t3,q0,q1,q2,q3); 0000000G[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion(t0,t1,t2,t3,q0,q1,q2,q3); 0000000F[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=1; vy=0; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion(t0,t1,t2,t3,q0,q1,q2,q3); 0000000E[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=0; vy=0; vz=1; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000D[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=0; vy=0; vz=1; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000A[ var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=1; vy=0; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000[p{ draw_set_color(c_gray); // d3d_set_lighting(true); d3d_transform_set_identity() d3d_add_rotation_quaternion(q0,q1,q2,q3); d3d_transform_add_translation(x,y,radius) d3d_draw_ellipsoid(-radius,-radius,-radius,+radius,+radius,+radius,background_get_texture(background13),1,1,24); /* diagnostic section, var qq0,qq1,qq2,qq3,vx,vy,vz; qq0=q0; qq1=q1; qq2=q2; qq3=q3; multiply_quaternion(q0,-q1,-q2,-q3,0,0,0,1); multiply_quaternion_right(qq0,qq1,qq2,qq3); vx=q1; vy=q2; vz=q3; q0=qq0; q1=qq1; q2=qq2; q3=qq3; d3d_transform_set_identity() d3d_transform_add_translation(x,y,radius) d3d_transform_add_translation(radius*vx,radius*vy,radius*vz) d3d_draw_ellipsoid(-2,-2,-2,+2,+2,+2,background_get_texture(background13),1,1,24); */ d3d_transform_set_identity() draw_set_color(c_white); }0000000obj_FPS_abstract_ball [ if variable_global_exists("roof") { z=radius+random(global.roof-radius*2); }; hspeed=random(3)-1; vspeed=random(3)-1; zspeed=random(3)-1; //zspeed=0; zgravity=-0.0; rollfriction=0.00;0000000[=//q0=1; //q1=0; //q2=0; //q3=0; init_quaternion_random();0000000laction_set_friction rollfriction0000000Yaction_execute_script 550000000Yaction_execute_script 61radius000000+Yaction_execute_script 320000000" action_ifH(sqr(other.x-x)+sqr(other.y-y)+sqr(other.z-z)< sqr(radius+other.radius))000000000000000[Kvar angle,angle2,qq0,qq1,qq2,qq3,s0,s1,s2,s3,temp; // determine the angle we were hit from. -x is zero degrees. angle=arctan2(y-other.y,x-other.x); // and the elevation from horizontal temp=sqrt(sqr(y-other.y)+sqr(x-other.x)); angle2=arctan2(other.z-z,temp); // construct a quaternion to rotate a splat (a transparent ball with a blob on it) to the correct angle. // this formula was obtained by multiplying two axis rotations. s0=cos(angle/2)*cos(angle2/2); s1=-sin(angle/2)*sin(angle2/2); s2=cos(angle/2)*sin(angle2/2); s3=sin(angle/2)*cos(angle2/2); qq0=q0; qq1=q1; qq2=q2; qq3=q3; // now we translate the resulting quaternion into the axis of the ball. multiply_quaternion(q0,-q1,-q2,-q3,s0,s1,s2,s3); // later the operation // multiply_quaternion(q0,q1,q2,q3,s0,s1,s2,s3); // will give us the orientation of the splat in game axis, and will follow // the movement of the ball temp=instance_create(x,y,obj_fps_splat); temp.r0=q0; temp.r1=q1; temp.r2=q2; temp.r3=q3; temp.master=id; temp.radius=radius+0.2; q0=qq0; q1=qq1; q2=qq2; q3=qq3; 0000000Yaction_execute_script 32000000000000000[// This is a "Fix", if the ball is in the room at the start then // the variable "roof" will not exist yet as it is set by room creation // code which runs after objects are created. The create event will // leave z undefined or use the wrong value but it will be set here. // If a ball is created during play the create event will set z correctly // and this code isn't needed z=radius+random(global.roof-radius*2); 0000000Yaction_execute_script 560000000[u{ d3d_transform_set_identity() d3d_add_rotation_quaternion(q0,q1,q2,q3); d3d_transform_add_translation(x,y,z); draw_set_color(c_white); d3d_draw_ellipsoid(-radius,-radius,-radius,+radius,+radius,+radius,background_get_texture(background13),1,1,24); /* d3d_draw_ellipsoid(-radius,-radius,-radius,+radius,+radius,+radius,sprite_get_texture(sprite38,0),1,1,24); draw_set_color(make_color_rgb(10,0,0) ); d3d_set_lighting(false); d3d_draw_ellipsoid(+radius,-radius,-radius,-radius,+radius,+radius,-1,1,1,24); d3d_set_lighting(true); */ d3d_transform_set_identity() draw_set_color(c_white); }0000000 obj_fps_splat# action_sprite_set3510.02500000action_kill_object00000000[if instance_exists(master) { x=master.x; y=master.y; z=master.z; radius=master.radius+0.5; multiply_quaternion(master.q0,master.q1,master.q2,master.q3,r0,r1,r2,r3,); }; 0000000[{ draw_set_color(c_gray); // d3d_set_lighting(true); d3d_transform_set_identity() d3d_add_rotation_quaternion(q0,q1,q2,q3); d3d_transform_add_translation(x,y,z); d3d_draw_ellipsoid(-radius,-radius,-radius,+radius,+radius,+radius,sprite_get_texture(spr_FPS_splat,image_index),1,1,24); d3d_transform_set_identity() draw_set_color(c_white); }0000000obj_FPS_bigball$+ cradius14000000cmass2000000\action_inherited00000000obj_FPS_camera obj_FPS_eye_ball"+ [Nmass = 1; radius = 5; z=radius; zspeed=0; zgravity=0; rollfriction=0.050000000[q0=1; q1=0; q2=0; q3=0; 0000000laction_set_friction rollfriction0000000Yaction_execute_script 550000000W[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000S[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000Q[ var qq0,qq1,qq2,qq3,vx,vy,vz; qq0=q0; qq1=q1; qq2=q2; qq3=q3; multiply_quaternion(q0,q1,q2,q3,0,-1,0,0); multiply_quaternion_right(qq0,-qq1,-qq2,-qq3); vx=q1; vy=q2; vz=q3; q0=qq0; q1=qq1; q2=qq2; q3=qq3; hspeed+=vx*0.4; vspeed+=vy*0.4; zspeed+=vz*0.4; 0000000D[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=1; vy=0; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000A[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(5)/2; vx=1; vy=0; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000[w{ d3d_transform_set_identity() d3d_add_rotation_quaternion(q0,q1,q2,q3); d3d_transform_add_translation(x,y,z); draw_set_color(c_white); d3d_draw_ellipsoid(-radius,-radius,-radius,+radius,+radius,+radius,sprite_get_texture(spr_FPS_eye_ball,0),1,1,24); /* d3d_draw_ellipsoid(-radius,-radius,-radius,+radius,+radius,+radius,sprite_get_texture(sprite38,0),1,1,24); draw_set_color(make_color_rgb(10,0,0) ); d3d_set_lighting(false); d3d_draw_ellipsoid(+radius,-radius,-radius,-radius,+radius,+radius,-1,1,1,24); d3d_set_lighting(true); */ d3d_transform_set_identity() draw_set_color(c_white); }0000000 obj_FPS_q_cam 0 [{ d3d_start(); d3d_set_fog(false,c_gray,0,400); d3d_set_lighting(true); d3d_set_culling(true); d3d_light_define_direction(1,-1,1,-1,c_white); d3d_light_enable(1,true); }0000000[mass = 1; radius = 5; if variable_global_exists("roof") { z=global.roof/2 }; zspeed=0; zgravity=0; rollfriction=0.00;0000000Yaction_execute_script 630000000laction_set_friction rollfriction0000000Yaction_execute_script 550000000[T// Very crude aerodynamics code, gives object a tendancy to "fly" in the // direction it is pointing var t; //extract object's "z" vector quaternion_rotate_vector(0,0,1); //take a dot product with velocity t=(hspeed*vx+vspeed*vy+zspeed*vz)*0.20; //adjust velocity accordingly hspeed-=vx*t; vspeed-=vy*t; zspeed-=vz*t; 0000000+Yaction_execute_script 320000000m[Xquaternion_rotate_vector(-1,0,0); hspeed-=vx*0.4; vspeed-=vy*0.4; zspeed-=vz*0.4; 0000000k[Xquaternion_rotate_vector(-1,0,0); hspeed+=vx*0.4; vspeed+=vy*0.4; zspeed+=vz*0.4; 0000000(Yaction_execute_script 675000000'Yaction_execute_script 665000000&Yaction_execute_script 67-500000000000000[var ang,vx,vy,vz,t0,t1,t2,t3,qq0,qq1,qq2,t; ang=degtorad(-5)/2; vx=0; vy=1; vz=0; /* t=sqrt(sqr(vx)+sqr(vy)+sqr(vz)); vx=vx/t; vy=vy/t; vz=vz/t; */ t0=cos(ang); t1=vx*sin(ang); t2=vy*sin(ang); t3=vz*sin(ang); multiply_quaternion_right(t0,t1,t2,t3); 0000000%Yaction_execute_script 66-5000000[&{ // End 3D mode d3d_end(); } 0000000[// This is a "Fix", if the ball is in the room at the start then // the variable "roof" will not exist yet as it is set by room creation // code which runs after objects are created. The create event will // leave z undefined or use the wrong value but it will be set here. // If a ball is created during play the create event will set z correctly // and this code isn't needed z=global.roof/2; 0000000Yaction_execute_script 560000000[{ d3d_set_hidden(true); // set the projection /* redundant commented code is replaced by a single script call var qq0,qq1,qq2,qq3,vx,vy,vz;//,zx,zy,zz; qq0=q0; qq1=q1; qq2=q2; qq3=q3; multiply_quaternion(q0,q1,q2,q3,0,-1,0,0); multiply_quaternion_right(qq0,-qq1,-qq2,-qq3); vx=q1; vy=q2; vz=q3; multiply_quaternion(qq0,qq1,qq2,qq3,0,0,0,1); multiply_quaternion_right(qq0,-qq1,-qq2,-qq3); zx=q1; zy=q2; zz=q3; q0=qq0; q1=qq1; q2=qq2; q3=qq3; d3d_set_projection(x,y,z, x+vx,y+vy,z+vz, zx,zy,zz); */ d3d_quaternion_set_projection_neg(x,y,z,q0,q1,q2,q3); d3d_quaternion_light_direction_neg(0,q0,q1,q2,q3,c_gray); d3d_light_enable(0,true); // d3d_light_define_direction(0,vx,vy,vz,c_gray); // draw floor and ceiling d3d_set_lighting(true); draw_set_alpha(1); draw_set_color(c_white); // draw an inside out cube d3d_draw_block(room_width,room_height,global.roof,0,0,0,background_get_texture(back_ceilingtex),10,10); // d3d_draw_floor(800,0,0,0,600,0,background_get_texture(back_floortex),16,12); // d3d_draw_floor(0,0,global.roof,800,600,global.roof,background_get_texture(back_ceilingtex),8,6); } 0000000obj_FPS_hugeball4+ cradius20000000\action_inherited00000000cmass4000000[hspeed=0; vspeed=0; zspeed=0;0000000obj_FPS_toobig7+ cradius64000000\action_inherited00000000cmass10000000[!hspeed=0; vspeed=0; zspeed=0; 0000000room_FPSA First Person ShooterXXglobal.roof=600;        (2؉0P9ى9ډ 9ۉ9މ9߉p99`9@9pP90- 5055‰5É@05ĉ5ʼn05ȉ55p05055@5555`055`5`5p55@P5P50`55p500-qthemessage='Flying camera demo. Cursor keys to Pitch and Roll#Keypad + and - to accelerate forward and backward';XDemo InformationX{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Arial;}{\f1\fnil Arial;}} {\colortbl ;\red255\green0\blue0;\red0\green0\blue0;} \viewkind4\uc1\pard\cf1\fs48 FLY DEMO BY OLIVER BROAD \par \par Heavily modified version of Registered Features Demo \par \cf2\fs24 \par Basic FPS code by Mark Overmars. \par \par Quaternion math and almost-Newtonian rebounds by Oliver Broad. \par \par This program uses the code of the registered features demo as a template, as I wasn't sure I could get 3D working from scratch. \par \par Fly around using the cursor keys. Accelerate using +, accelerate backwards using - \par \par Most of the demo uses quaternion math, in particular the orientation of the balls is stored as a quaternion. \par \f1 \par \lang2057\f0 Quirks of orientation: \par \par Currently the base orientation (1,0,0,0) is assumed to be upright facing in the negative x direction. Owing to the odd symetry of quaternions this is equivalent to (-1,0,0,0). The add_rotation_quaternion script does nothing for (1,0,0,0) and (-1,0,0,0). \par \par The default orientation might be changed to positive x to be more like 2D GM, however a sphere drawn from (-r,-r,-r) to (+r,+r,+r) is drawn with the middle of the texture facing to negative x and this is convenient. Sphere textures appear to be mirrored horizontally, though elsewhere they may be drawn flipped vertically. \par \par \lang1033\f1 \par }  Spritessoundspr_sound_sourcespr_sound_source2spr_sound_listenerFPSspr_FPS_horwall spr_FPS_vertwallspr_FPS_bullet spr_FPS_camera spr_FPS_logospr_FPS_bulletspr_FPS_pillar" spr_FPS_ball4spr_FPS_hugeball'spr_FPS_monster$spr_fps_bigballspr_FPS_explosion# spr_FPS_splat7spr_fps_toobig(spr_FPS_eye_ballSounds sound_midi2 snd_explosionsnd_shot Backgrounds back_ceilingtex background13Pathspath1Scripts scr_draw_message rebound_3d3 rebound_weak* rebound_2d+distance3d_notwork?1hit_wall_slide8bounce_boundry7 step_update_z quaternions:$quaternion_documentation_placeholder;!d3d_quaternion_set_projection_neg<"d3d_quaternion_light_direction_neg=quaternion_ball_roll_simple>d3d_add_rotation_quaternion?init_quaternion@init_quaternion_randomAnormalise_quaternionBquaternion_fly_rollCquaternion_fly_pitchDquaternion_fly_yawEquaternion_rotate_vectorFsincGmultiply_quaternionHmultiply_quaternion_leftImultiply_quaternion_right Fonts fnt_message  fnt_text1 Time LinesObjectsobj_message_3D obj_messagesoundobj_sound_midi1obj_sound_midi2 obj_sound_wave1obj_sound_listenerFPS 0obj_FPS_camera2 obj_FPS_q_cam*obj_FPS_q_ball, obj_fps_splat+obj_FPS_abstract_ball-obj_FPS_bigball5obj_FPS_hugeball9obj_FPS_toobig1obj_FPS_eye_ball$obj_FPS_explosion"obj_FPS_bullet( obj_particlesRooms room_FPS Game Information Global Game Settings