PK W#R .DS_StoreUT ueeux Bud1hicsdsclGraphicsdsclboolLuadsclboolSoundsdsclboolSpritesdsclbool  @ @ @ @ EDSDB ` @ @ @PK ଖW7rwwKL_ajnebs_items_1.0.pk3UT eeux PKpT3Tl Credits.txtUT tapepeux ==n0 *`Α&EZZ-%RO~);YpAQ|};<"Kh*2C\a\*8YVHY_*q)cJvjB3hcA$/^H-'-4tiHT5a9 B2:ʰdGm (|r'(Sքn3y3Y4neCQx^/ -ۙu0`ȼ:|DIކ(i&YRmf (xeX? /#A05nvA9YH0GT'&;l9^/Cq$V/հL:ΖGzE[pi '4'yd߬~nPK7wlPKpT3T __MACOSX/._Credits.txtUT tapeeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PK|W Graphics/UT <eepeux PK|W __MACOSX/._GraphicsUT <eeeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PK|W Graphics/.DS_StoreUT <ee<eux 1n@E8.,Q%^pΑ#+Ε(TDInvw f qB/CFGkD:ѵx?@G:ѵۘ9]Ёtk7-a|qB@G:B\ 灠C&U8pH'v0 =PKLPK|Wx __MACOSX/Graphics/._.DS_StoreUT <eeeux c`cg`b`MLVVP'@S 8A0]PK 85xPKU3T Graphics/xItemTeleporter/UT aaeux PKU3T# __MACOSX/Graphics/._xItemTeleporterUT aaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PK *T % Graphics/xItemTeleporter/K_TELPRT.lmpUT aaeux Vo7e,Ybؒ,))|$Q)`8Eoi蚎tI to;d!@2u褾#N,0#_|ԙ8^oBLox ni m!~7xdGgKhK/߁x <gW@wӄui^JJ^ظ=݌ۿȵ]kVI2NEo7[2~dNop} !ҫd6{f;20q4}>Uv3?0 c_.siEVEgq;.Gչ˰}VP r(h6f$IUz a$S"W'k#R+.|O`:0%ϯp֖B IbJjYBgPX+ST#NcC\^#'|f=b?!eI"<|PmQFE#NcȒlj$ÕiDa=v%0@=IWNRU%gVGEy ν(~E鴗P9j-댆Jl<:%ma3b*k*W\*z]`/k" '^oi ;xȸLL^CSH /2:%Ê.ݢ[NOY>E@+$-?%|)`.SqKTFOZb2v`Ԃ$O[(=9:ZhW_u&N?~WPKCW >@_k't=B.c3t :}Uwf%E+臔̖eq pҞD2.n BP'ժ[tvedDqvck~C; QBEF V9ϵ)VϘh@,]< 6}hMFZp3??H$KB@DErHY'BN`␞ P. \/5@=לhu|y@,NCOTT*qmNHy]N=$<~F%h47؁(B'5*0p]E4JHRC\2-C4jQ0únv=7kZ0)16"'+0Qo#Ʌ'Ƥ!!ۺbHxƓuhEyQQ&=yCO#Rq{C1VPK mPK&T0 __MACOSX/Graphics/xItemTeleporter/._H_XITELE.lmpUT dkadkaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PK&T% Graphics/xItemTeleporter/K_MINPRT.lmpUT dkadkaeux mN@Nmp Rxhԋ Vo=ʥ@*y\y ę@=ov ^K_׌Wt =@9t]C{ꇌ>CW >@_k't=B.c3t :}Uwf%E+臔̖eq pҞD2.n BP'ժ[tvedDqvck~C; QBEF V9ϵ)VϘh@,]< 6}hMFZp3??H$KB@DErHY'BN`␞ P. \/5@=לhu|y@,NCOTT*qmNHy]N=$<~F%h47؁(B'5*0p]E4JHRC\2-C4jQ0únv=7kZ0)16"'+0Qo#Ʌ'Ƥ!!ۺbHxƓuhEyQQ&=yCO#Rq{C1VPK mPK&T0 __MACOSX/Graphics/xItemTeleporter/._K_MINPRT.lmpUT dkadkaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PKW Lua/UT eeeux PKW __MACOSX/._LuaUT eeeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PKv+T[ Lua/icnFreeslot.luaUT aeeux en0 @D?@(_.lUiMikGD+ѿZCl?%tȺ=U`l&(l}m†CL-yT_m{ہג-(N[LH~ӢsM^ގ`]^=CRT\tx́>Ǟ;ϙʔ s#|R"pKB]`I!Fl~5<IiǮ3PK*[PKv+Tq __MACOSX/Lua/._icnFreeslot.luaUT aeeux c`cg`b`MLVVP'100i (auhJ Rz9z9%ũ))%Po؃.719b e`E&%d20Te hV>[\nQ>7Uώ8B}# Ck3S 4#k̢Դ k#K cs3s]S''7]S]KCG']KsKCcc#WsPKV_qPKW Lua/.DS_StoreUT eeeux 혽@[徂oOpT>f *Z)z>>Hf&Iw C4Jh UjP׶!~õ|3˧Eۃ-Bqnk_C냧]F'tzQhO6%tJg=2q0>8=d!VnBi hPﵾ sv$0@:  PK="PKWx __MACOSX/Lua/._.DS_StoreUT eeeux c`cg`b`MLVVP'@S 8A0]PK 85xPKU3T Lua/xItemTeleporter/UT aaeux PKU3T __MACOSX/Lua/._xItemTeleporterUT aaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PK΢WQ Lua/xItemLib_v112r5.luaUT eeeux kwG(YYKI&"xyXx|h#IwKoՀd9|w1|zed8jpA@<0TyraC>Zh&0 _D7uQx7Q|m̽$i46@0%ލ?O``&<2K zIh` L98sQ L?LW7\Mum4P- 4eXM]S(h4I[&o_aMoa~w_/$ ;)ᆱ7]^2}tyuNzK8f-~B:Y99p9=hm0@@,Q?ajiV`C$gnA'P7O<:QpœsϟAo2RIUu?sX 8YP  ]α&@:K 0MG:?S]bs]hkG4 \i/Z3$@820ؘD¸k7srl4j]@+{癿&! FKp[cAs>>ilB4Kh4KX$dA؊i~Ϫ{ن9YDZ ''8ڨg ރ7sy='̝YuOCZ}u0?wгq<hM,ҳBu}=(x>m6)=?7͓p3W"j"Ʀs /:?lD :Sˋ٫u{X` {/_./ۭsfqو6^sh *k`!=rcz>w@j،66ACaƣ|}>?iJh5gf+ޟ#} [j׭ hü]#C!]u|]ubHWyx$%]6{v:D w}b Q8c)̿ /7B_?M:Z}p LG84P#ʬWpt.o}Bͳ:?22N3T FE8QHnEitCo]hEIJe.2FQO"A"SAX>""PCg( Ls8'*0#]L At qO] .?qͯ 0Ӱuq$8_ =օQa"w9 4P7)9jd._jx'tHDƤ I04L1$ G,~$MamoPO,f2G@Y:RS1 d # )⧕u^,)..ϣp0IPNDzL\/_8 _Jo1ѴZPnʱm$p]-2%GqvVwytiuRU x]Ϣ|֤*h | 4#v/J%up6~l_r:k]TTk^yV֓,`WM@os_˵I *0GҤ 18R.J lA63R*0rNj4\Ѭ9YQdJ*h',돿y>=j]i]<9TV~/s5]&WhP|P?Z=9U"Slr] -W3+O,ȩCPA"b]\op;)\W"IvMaIHHrŪݴUÀg:st;qL$1nRl]?Ѳ{]L5\ ; , 8H BK"EgݴBPEhՐ(BD}`́[NBv\/}\\ 3#{ Az9aWOe U]_ \s uŨlZAOB=J9$hҵ 0I܁,ޤ2"dWdP\&[եS.<)sf6؄U⒣|&Ye&wgL\3c4&bD A9TeUNxHyOn.{P&ld#kRHhު4$BEG0/gAJBڇX7ݶ6zaBEcB GAyܒt3쯅;SK8#6r"ˢ`0~ͩiq{:zPb {/"QBL>%uüCj /S>B(1-w @M$Y*Ǽْsq6A_}-&^!:~'hz? D`ÀNy c /3VW(I|as B^ 8T:IF#q$c&1ۢ11`kqڝk2  i$zry͜#DNp@I(@]wa(k'lX<@ebٜD|7>6T& m"ͨqЈTv7Ul6oZy!L3[s=kR[J2J!UPKx:D PyH>41M> ڒ̲(4/ck'q^%u8#5E0mtyr 7@rQFߠB0eVE(&}`&'|sQE}){'T; rFۓb2^͓H;,^hLb!=ʂb85lbw|2_ T]jp<|>Ӯtc7 Zk]n&.SIҰn?~] OF(\T{/*v^><Cح&V 3?O vvžqփv*ͅSi$:M=-o[c_'wq- E! xON*m,9WHj%1Uq3!nSīB.F_:mM`d[Dı6T34lG 62U;Jb)HZimK/6ݑQE=0 % F/ݫp+Lݩ`5xNZt~R8W6hD +Zśn^Q""  F4Shp.5,1Пw'޺[\Կ:2i8|*"E7|TܡUbu] &*ԝpgGP N~=c1sL-Cգ洯 Nĸ:|*ޗnRfA%?{p]uIG'jha2D& bB""#H-OunxȓuL?NR*9/0C ?BG1]o>ta鄅5RS'(874ɼsEmj%8X>2Bs6`pY:޺FD_Eb#Tۻoy|ONGG{dj`Gh})B[= 1JIct>@&)cuk0fͳ31d0!EPժ^9׀Pʹ?k20RHd]s0%e5EgevlW@ng  ZQYɼ2(ʫ ,7A9b ֖ISAgx+flҋ1>tJZx*r/^s;BT廲W> Tq 7v~azY*ߺȫyԇ\4B-!a^S9Q\p!,**soR_E+fg6ZX M`'B4SysڦSS=df"ȧ{%ҭ(]:z,D̘_5{.Oʼnv~l%R 9mEA3a"U+'8el* Q $E_W Kt%!,ULK.bz.?wKgz~Y%KӻMW$ s=zG[,_rzHQp8|3oazqλip!x"Pos hP, -#?e vWŀg'ݐk* |j6sL}fr3]iW֎##xqJ':կ{%4 #q"Vɥh`d;Cy؝6bnR@$A"mQ%+,"GyQ:_ӵFҫİ64OWu!NfB*PΏ.{ 5>k0uV{VbBHjcSf:|B kܵ5bnx oIjNeDk1Q*1O&萋{v0ڨZtŸڨ`U"/ag?ۂOMQ@I;nίͱl8~ܡlޗg ]y4RsT{/gJEVo<7M8Wz]AQ>aG f1z.!/-p*׍J8OQ806~.x3'a燳auГd3[9LJj b]`S@:g^"H΀!b-)g[ ]E\827A—h!t噉JF*8hXp,^>kTomvX=0>h ~kd=B#1XMEF)c4bY3 E s8fķ>9AaN34 >3 B sms̵ǷPGG6A>s#SV4Px+I8 ylLٟ֎`z,^ӳWM ^7T BkE,2  U&ߖU^a)(Hߎ|=,tfAitG|eŭKM~]"w2zˎaQ\6"=R4lʴ>LBt*Hx`-)x]Vl 5O11>uD@>.7EO|jyc/БȬʓLт,?W ީ2>01 }|ģ3S:BMqI#A>˺Kw9ɭ"J͟-LgJyǟ_ L]h=JRaŃ *3C |a&O$2 ~(e u('p<􎣯zv#T6#r!U~zl6 !,vH'//r${ؘgEՐ4-H$$.A(*(mq>s%ϵ|\;ͦq]!J.q[ .WlYכЫh @TND<Æ Go<1?ڌr$BD03(\ۅѼs7{%#̥4*D[> ]OlMkcQ4ODpC ntK8 `hYq nR.ٜEcJ!-MĤ6l"re2tx6ECV/M{ݶG|/%W(W#T"asQ',`-X6+fkHpzẍCtmRB,!OZ)ԌdCm|A n8{ގ(|)^/)I#-.4 Aӽ & cHw^a4\#ae3@dЪ5If7| 2Znuq,Fmݫ'^m>ݨͧU|k~6m{Fm~S6oFm>WߨͿ#h8U5+pIlKD& R3c`A"Kg4Ejre@7ToPSn!7u*J6*v^ RDw:+WCì{4f )윟k.|^!mC+G n-N IIVYc  d0 D]Yx ]zZo(\KŹyO`\A/tȎ@H@OFok$cd<J7q-ĝ(͞]`\5#dH?g5֬(э@C)Z6́$vB|Gϥu:8։|B,d70rYoGB7C"Kk` ODW6Ͻ=Ϳ++8(F@aY;GLsy:2x!rˬ{ Hh|fM 5!YwYUa;_k WVŘwb;| ϔy5efdkw7Qk.)ߚ#{Z,h ZCK^3;VyQLI&lvRzLST]6{+Ɩ=lw'Cъ` 0/<3S\džx.*˽,a0扣TSaP '5-_8ZX*wrY *f3߮1rbAMge(HpܕDuJ4 R}TIXr`sAa$ˉ^^ᳪD>ZZFx 0_!4x gHJO:¦WK$N͘G>%x82CzY~5?{jt!R-IƦ]4_Ta8IĞ046!Cl!#ePۧBYall"O4PEѬ PeSl{7~<4mn&~To.hȁ`o! «.WVgR4a0'[%8 +SISɴQ UOY-@V8lz25NM iVݩVi̧X(ikSa`y.(wv>]$X(Itt}d+PSe rDE^ :MˍuҬSP`}AW>_AҋNaݳ, |kw8n'BAOx3`g xQNp{vo?~@J7!x/~D}ltGo_:#Mu zXg˫ B﯈̑35H vY F:9U rnf#w '@ .O!?$$*.3q0A)2;^oDQΊlJVLE'V+]\ |N"< 4f%!b}،2jh}x3Yh\ހ:{W1~K?>uCNUuF+b6Jћ ?:>f*:O,׼x,{-3@M_2]n?L\V:C}ϣrE`9;RVG?ir~]w9TeL?$֑H6 -X`v)VSŢ-*?hPTꇶtJY<'0]6g)_ ]. ڪn"iu!P.H%] 0 jdWUd绚4GdYbUPIrhNd_V‹,E՚Ҧ ʘ/h4I>jT|oggpu9 *\qǰƁͣ4\@"ܖGv)nD`✴OaoH؟vzj>Ű"p݄Wc>ՂÂssi½&8|^3e@Ƕp*=UTJ"i&+Ln+a{`>NQx'A8`نNCFnԽcm z(fuNR}u (]]\R5[Z+> CE_u|aN[JCq]_yfñTMI ^/@]㿍cDpZQ^XY Z$`:@ߛr)†W">[!4D/wXkϳ=C ]6N)jiͶIRa~Όy Gқ~Њ<[)뮢G!SXF89؎ۼ(Ҡ[>'Ӭ-O>U<ؼFPȮ +&!7 k@nz9,1 {(6|vH oE\K8*RfJV=2}Mk‡6TD´'}\ƔV|@6m38c)sњ-{>CKqsμlް9Y0 YggI,1M >_Ir3Q\OnK*8,l4\ Or^VtQY=Sƨ2bC؆j,SL.߂v j1-g0,f>E 9jOP5o;.;&`=o-ւ C6ON:?nwxt7ՓGK[VD}=ԕ|H%jB7C{V]9=ULn3}vR<}%1ogIQtnxLAPE&&(Jiq~LQETu?-!Z1( z%Hdo{;J>kQ`w|b4zğ :)W vOݹFlwWS9_pC7rex*\ K;RoqѥwƎ NOcc# Ħc fY0N=>0|ϒ;L4xTd_qY&q..ͮ3$ ֲЫ< ⴜ 4TYW;Ŀk!( ?W;tQ ˊZg^x]jM!`R?)ur6bmNu%7q:2DZ&@%^`l]N0}g^I^RDEE߆r]3ҋ F'/xzrBRR1Xn'SPbôL<ʂ_9u}k<'=ٓ]]5#[d?OwYU:N/#vbBi#L Hjt*U8 }NEH8r?Pr`)F%de-Wom;Gpa8 pWAAPLJSF<"` bl.Dzh%ߚSð+X 2պdݴrh~nd[ d%,dO~5(.l~5ͺov;>}$uM\V$FO=\},Õy03tmW^5Ǥ)+k*AEZdGRu p&[-"Q;BQ.`T1bo=R+q"d@pbO-$6Ә Bdb2"`92|a:uFjOTvsKS@A FD ]i[d\eTv QsOU5[MdN/miCw4J[Im˽/.qtL`!^{tG `azًl3.:cSD>AwufC0dwlu#F*36#&A9c/.Fz !felέ?,̍/nCJqA ߆xz* C)@[׆i*nKfF/e&+si<M! X=JHD d.?Lp@mHcԸHHH#4c#3{* v7H=h uQQ[Nb3 :bdV,z0J"A{ypJG~#”0C^lFpJz5;;e@T +吡-1OSk޿楢);:⿍8l fܟ#ƺ &*qч);#?@`'A\!Ybz+n;{?0?f Dc, 4!UB`w9z{6RP6\`1ذ?C/ YKt%$ K}>{='LJ&M+ ΆM<%>\y-8îlAF_ף^2 ȓKy\k,% N|S=]~^XDL{bo^fVyÀVk7xUvpNCя;W}D|a߁]`L*jC؏kt>X1d bj:Ls1u\sN΀Fr2N%x׼c8meӍj!u,䧺d!rȽPo_-DtIUvm=Gu]*oaxš~v2 EFp!S1ޞ>~oa2{p~u#дr_g#MnVF^޻[Cq)@[Gc6҇Vyη^e#D~0mPEPHǃY =HJJ½C'OsZU e` Q,8n_: ^;6h}9l+:rI LUt|i9K9ϙŚYG棸eٿՙb,$;PxEFѬ,*HwuR: .t,1μE4`_hM6O ;)+i \L+ TMöMx(0(}lӒ:t˰-ɔCzѫAd`a$oV|q(j\ԕW{0J6=T}EL.X{P/c9#+O~U֦f59 U%Tyj%MjA2T#-WE0U])*UY׺|Z{rܤ,3q\MI#s a CVxSD1N 'E4I]QZ r; o˞YXtI w=E tg,fzg4>+WR=H{Idq{yәm6ͶZ/3)Օ1޼]/*Dt=D<7`!\ڶiMчq6< ̕6d!?r nFes8<`x%= pexjPEWY6M"/X&:G<[gzpSyO 0^wtpw'T`gtNG 3swx:xsy FoakeL #nׂKuN>óVMRYst򾒇ArCF d)H 8:) x1I(!5YTzv\5 Fqbئg~ʾn`X0np wM Vdհ>Rd2zp]dσO6St.Qб~u Nx l; f L@ ot1k@| J_~*j Áb(pƸcƀIș4j&}Tnܨ]j$"k!djb :8c ;"p-saJ*1 %~4_`KDٔVRc}d탥B$V=^^0i!bN{%G5bHq@ޯd:EAl;oO<] .^Dlу}q}}ITjOŶҊHydlNˏVzhnMX{`X>PI½F@bˍ]/\YKL Y j;ݠ{2ZWZ|պ(ݤ}Rp߻o^}PpCޝt.g׽ ϥ?>Aҟÿ}+sts V>dSkUxmwtlG@8,n-=5MVJ BYEPKnTZShcELC^[؀;Rҹ해޶,\)*S$IFQ97t*Ef3Vl4b!$n=,f?=8WT&wytigHř`"f'lU7(!Jf,Es*z |a?>~\?hDyɭ5jߊh^\t~xp?AՑǶC܋߿eR؍Št^e%~wo5??wDڰlu/.2W,~..:Z=#d es}#~nq-z#)[!j<U7~ Ѷ,E=-(Y/ {phk45 wbÓiӖٴi;mW{sd]JCH aP@a3~?JHHwuh3JGQx3= c/ՎT;RR?Z;DLCE[:R% >ȾyOgtLwv''/;ǼyE2xF6zeM^Yv#\d {Ol0ΥBr׳ThVʙh`9~!.F}8+Zdb@.@ZQAP;}y>{E;bsJ_lwq Aۀd5䠄E(y{vqc%KCg]!h8vk-_ O;DpK`ď]ld-ft8e3DyROS4>^vĎ]4ʮǑUaDC&jG^K': C>]bYWR{ý lm-2i:!:ٱw#j>?iBւd2I\M•JtØ sPos;o]ם56}?ZgGC7T}֬6@[&xTqZc?7⟽ۯ;ݔ6٘ph>uDa]{)#.S|ejl4ZΡA(;|*" Nk׃ϥ׆3]WgdWk':Z(0wV۟/!f<~lY,PK}>`dYQPK΢W" __MACOSX/Lua/._xItemLib_v112r5.luaUT eeeux P=KP](]&HM,8A v+/ɋ MҗXgDpt]Wg'G_m$sTz4%=ؒf(O2Zy?-7- Ty0-e% iI=dň <-ZUvs,Yt qϓ(1S*`TyqPk KDÐgpjAS!ԜcM(b!]7A!N(NX[ aOz-?|hxPכ †e[V Yu-xPu☪i lj{8#'PK @PKU3Tj( Lua/xItemTeleporter/xItem_Teleporter.luaUT aeeux mVmo8 Zps}(uwƒ4aa0[Nؒ!mbۏߒcMzqԆIJ,!f5Íb$ rEԠ?g2[Mo>a@[Qh9@ҍ2oVUM5]1_󌛃9S`[QQoL/0_1rCv~2JvNbZ i.Kamlc2]|yP7d ٝ}Vtv7ܙ TH 6+*t&h u er}Aܕ1-El},cTQ8OWn.[Ɏ*MVrr?a }DYf`A/1;'ئRcօv!)]]PZ].JFH:WCk8Qw!c NQ&QUchVKwߊЊSGF MC,j;ױHWrq5Te ~1u8fZ$`- `V7P .0,޺a#7[w_74߅!< ﮢЛyU譆An*4h\??q{8+<W֦*d^mvgT^jBLn!xѭܬe/H%@6/n/pl\BZ̈T0=[F"Sl{峵W͛rsaO"&MVi{ %Ih 881#,;9 /(zܠ@r;L4{X 94쎹C{l;PKǎjPKU3T93 __MACOSX/Lua/xItemTeleporter/._xItem_Teleporter.luaUT aeeux c`cg`b`MLVVP'100i ђ(aulV4%LPq\ĂT e`E&%d220rowzvĹ YZZXeWXYZX:9隸Z::Z[3PKT9PKv+T[ Lua/icnFreeslot.luaUT aeeux en0 @D?@(_.lUiMikGD+ѿZCl?%tȺ=U`l&(l}m†CL-yT_m{ہג-(N[LH~ӢsM^ގ`]^=CRT\tx́>Ǟ;ϙʔ s#|R"pKB]`I!Fl~5<IiǮ3PK*[PKv+Tq __MACOSX/Lua/._icnFreeslot.luaUT aeeux c`cg`b`MLVVP'100i (auhJ Rz9z9%ũ))%Po؃.719b e`E&%d20Te hV>[\nQ>7Uώ8B}# Ck3S 4#k̢Դ k#K cs3s]S''7]S]KCG']KsKCcc#WsPKV_qPK΢WQ Lua/xItemLib_v112r5.luaUT eeeux kwG(YYKI&"xyXx|h#IwKoՀd9|w1|zed8jpA@<0TyraC>Zh&0 _D7uQx7Q|m̽$i46@0%ލ?O``&<2K zIh` L98sQ L?LW7\Mum4P- 4eXM]S(h4I[&o_aMoa~w_/$ ;)ᆱ7]^2}tyuNzK8f-~B:Y99p9=hm0@@,Q?ajiV`C$gnA'P7O<:QpœsϟAo2RIUu?sX 8YP  ]α&@:K 0MG:?S]bs]hkG4 \i/Z3$@820ؘD¸k7srl4j]@+{癿&! FKp[cAs>>ilB4Kh4KX$dA؊i~Ϫ{ن9YDZ ''8ڨg ރ7sy='̝YuOCZ}u0?wгq<hM,ҳBu}=(x>m6)=?7͓p3W"j"Ʀs /:?lD :Sˋ٫u{X` {/_./ۭsfqو6^sh *k`!=rcz>w@j،66ACaƣ|}>?iJh5gf+ޟ#} [j׭ hü]#C!]u|]ubHWyx$%]6{v:D w}b Q8c)̿ /7B_?M:Z}p LG84P#ʬWpt.o}Bͳ:?22N3T FE8QHnEitCo]hEIJe.2FQO"A"SAX>""PCg( Ls8'*0#]L At qO] .?qͯ 0Ӱuq$8_ =օQa"w9 4P7)9jd._jx'tHDƤ I04L1$ G,~$MamoPO,f2G@Y:RS1 d # )⧕u^,)..ϣp0IPNDzL\/_8 _Jo1ѴZPnʱm$p]-2%GqvVwytiuRU x]Ϣ|֤*h | 4#v/J%up6~l_r:k]TTk^yV֓,`WM@os_˵I *0GҤ 18R.J lA63R*0rNj4\Ѭ9YQdJ*h',돿y>=j]i]<9TV~/s5]&WhP|P?Z=9U"Slr] -W3+O,ȩCPA"b]\op;)\W"IvMaIHHrŪݴUÀg:st;qL$1nRl]?Ѳ{]L5\ ; , 8H BK"EgݴBPEhՐ(BD}`́[NBv\/}\\ 3#{ Az9aWOe U]_ \s uŨlZAOB=J9$hҵ 0I܁,ޤ2"dWdP\&[եS.<)sf6؄U⒣|&Ye&wgL\3c4&bD A9TeUNxHyOn.{P&ld#kRHhު4$BEG0/gAJBڇX7ݶ6zaBEcB GAyܒt3쯅;SK8#6r"ˢ`0~ͩiq{:zPb {/"QBL>%uüCj /S>B(1-w @M$Y*Ǽْsq6A_}-&^!:~'hz? D`ÀNy c /3VW(I|as B^ 8T:IF#q$c&1ۢ11`kqڝk2  i$zry͜#DNp@I(@]wa(k'lX<@ebٜD|7>6T& m"ͨqЈTv7Ul6oZy!L3[s=kR[J2J!UPKx:D PyH>41M> ڒ̲(4/ck'q^%u8#5E0mtyr 7@rQFߠB0eVE(&}`&'|sQE}){'T; rFۓb2^͓H;,^hLb!=ʂb85lbw|2_ T]jp<|>Ӯtc7 Zk]n&.SIҰn?~] OF(\T{/*v^><Cح&V 3?O vvžqփv*ͅSi$:M=-o[c_'wq- E! xON*m,9WHj%1Uq3!nSīB.F_:mM`d[Dı6T34lG 62U;Jb)HZimK/6ݑQE=0 % F/ݫp+Lݩ`5xNZt~R8W6hD +Zśn^Q""  F4Shp.5,1Пw'޺[\Կ:2i8|*"E7|TܡUbu] &*ԝpgGP N~=c1sL-Cգ洯 Nĸ:|*ޗnRfA%?{p]uIG'jha2D& bB""#H-OunxȓuL?NR*9/0C ?BG1]o>ta鄅5RS'(874ɼsEmj%8X>2Bs6`pY:޺FD_Eb#Tۻoy|ONGG{dj`Gh})B[= 1JIct>@&)cuk0fͳ31d0!EPժ^9׀Pʹ?k20RHd]s0%e5EgevlW@ng  ZQYɼ2(ʫ ,7A9b ֖ISAgx+flҋ1>tJZx*r/^s;BT廲W> Tq 7v~azY*ߺȫyԇ\4B-!a^S9Q\p!,**soR_E+fg6ZX M`'B4SysڦSS=df"ȧ{%ҭ(]:z,D̘_5{.Oʼnv~l%R 9mEA3a"U+'8el* Q $E_W Kt%!,ULK.bz.?wKgz~Y%KӻMW$ s=zG[,_rzHQp8|3oazqλip!x"Pos hP, -#?e vWŀg'ݐk* |j6sL}fr3]iW֎##xqJ':կ{%4 #q"Vɥh`d;Cy؝6bnR@$A"mQ%+,"GyQ:_ӵFҫİ64OWu!NfB*PΏ.{ 5>k0uV{VbBHjcSf:|B kܵ5bnx oIjNeDk1Q*1O&萋{v0ڨZtŸڨ`U"/ag?ۂOMQ@I;nίͱl8~ܡlޗg ]y4RsT{/gJEVo<7M8Wz]AQ>aG f1z.!/-p*׍J8OQ806~.x3'a燳auГd3[9LJj b]`S@:g^"H΀!b-)g[ ]E\827A—h!t噉JF*8hXp,^>kTomvX=0>h ~kd=B#1XMEF)c4bY3 E s8fķ>9AaN34 >3 B sms̵ǷPGG6A>s#SV4Px+I8 ylLٟ֎`z,^ӳWM ^7T BkE,2  U&ߖU^a)(Hߎ|=,tfAitG|eŭKM~]"w2zˎaQ\6"=R4lʴ>LBt*Hx`-)x]Vl 5O11>uD@>.7EO|jyc/БȬʓLт,?W ީ2>01 }|ģ3S:BMqI#A>˺Kw9ɭ"J͟-LgJyǟ_ L]h=JRaŃ *3C |a&O$2 ~(e u('p<􎣯zv#T6#r!U~zl6 !,vH'//r${ؘgEՐ4-H$$.A(*(mq>s%ϵ|\;ͦq]!J.q[ .WlYכЫh @TND<Æ Go<1?ڌr$BD03(\ۅѼs7{%#̥4*D[> ]OlMkcQ4ODpC ntK8 `hYq nR.ٜEcJ!-MĤ6l"re2tx6ECV/M{ݶG|/%W(W#T"asQ',`-X6+fkHpzẍCtmRB,!OZ)ԌdCm|A n8{ގ(|)^/)I#-.4 Aӽ & cHw^a4\#ae3@dЪ5If7| 2Znuq,Fmݫ'^m>ݨͧU|k~6m{Fm~S6oFm>WߨͿ#h8U5+pIlKD& R3c`A"Kg4Ejre@7ToPSn!7u*J6*v^ RDw:+WCì{4f )윟k.|^!mC+G n-N IIVYc  d0 D]Yx ]zZo(\KŹyO`\A/tȎ@H@OFok$cd<J7q-ĝ(͞]`\5#dH?g5֬(э@C)Z6́$vB|Gϥu:8։|B,d70rYoGB7C"Kk` ODW6Ͻ=Ϳ++8(F@aY;GLsy:2x!rˬ{ Hh|fM 5!YwYUa;_k WVŘwb;| ϔy5efdkw7Qk.)ߚ#{Z,h ZCK^3;VyQLI&lvRzLST]6{+Ɩ=lw'Cъ` 0/<3S\džx.*˽,a0扣TSaP '5-_8ZX*wrY *f3߮1rbAMge(HpܕDuJ4 R}TIXr`sAa$ˉ^^ᳪD>ZZFx 0_!4x gHJO:¦WK$N͘G>%x82CzY~5?{jt!R-IƦ]4_Ta8IĞ046!Cl!#ePۧBYall"O4PEѬ PeSl{7~<4mn&~To.hȁ`o! «.WVgR4a0'[%8 +SISɴQ UOY-@V8lz25NM iVݩVi̧X(ikSa`y.(wv>]$X(Itt}d+PSe rDE^ :MˍuҬSP`}AW>_AҋNaݳ, |kw8n'BAOx3`g xQNp{vo?~@J7!x/~D}ltGo_:#Mu zXg˫ B﯈̑35H vY F:9U rnf#w '@ .O!?$$*.3q0A)2;^oDQΊlJVLE'V+]\ |N"< 4f%!b}،2jh}x3Yh\ހ:{W1~K?>uCNUuF+b6Jћ ?:>f*:O,׼x,{-3@M_2]n?L\V:C}ϣrE`9;RVG?ir~]w9TeL?$֑H6 -X`v)VSŢ-*?hPTꇶtJY<'0]6g)_ ]. ڪn"iu!P.H%] 0 jdWUd绚4GdYbUPIrhNd_V‹,E՚Ҧ ʘ/h4I>jT|oggpu9 *\qǰƁͣ4\@"ܖGv)nD`✴OaoH؟vzj>Ű"p݄Wc>ՂÂssi½&8|^3e@Ƕp*=UTJ"i&+Ln+a{`>NQx'A8`نNCFnԽcm z(fuNR}u (]]\R5[Z+> CE_u|aN[JCq]_yfñTMI ^/@]㿍cDpZQ^XY Z$`:@ߛr)†W">[!4D/wXkϳ=C ]6N)jiͶIRa~Όy Gқ~Њ<[)뮢G!SXF89؎ۼ(Ҡ[>'Ӭ-O>U<ؼFPȮ +&!7 k@nz9,1 {(6|vH oE\K8*RfJV=2}Mk‡6TD´'}\ƔV|@6m38c)sњ-{>CKqsμlް9Y0 YggI,1M >_Ir3Q\OnK*8,l4\ Or^VtQY=Sƨ2bC؆j,SL.߂v j1-g0,f>E 9jOP5o;.;&`=o-ւ C6ON:?nwxt7ՓGK[VD}=ԕ|H%jB7C{V]9=ULn3}vR<}%1ogIQtnxLAPE&&(Jiq~LQETu?-!Z1( z%Hdo{;J>kQ`w|b4zğ :)W vOݹFlwWS9_pC7rex*\ K;RoqѥwƎ NOcc# Ħc fY0N=>0|ϒ;L4xTd_qY&q..ͮ3$ ֲЫ< ⴜ 4TYW;Ŀk!( ?W;tQ ˊZg^x]jM!`R?)ur6bmNu%7q:2DZ&@%^`l]N0}g^I^RDEE߆r]3ҋ F'/xzrBRR1Xn'SPbôL<ʂ_9u}k<'=ٓ]]5#[d?OwYU:N/#vbBi#L Hjt*U8 }NEH8r?Pr`)F%de-Wom;Gpa8 pWAAPLJSF<"` bl.Dzh%ߚSð+X 2պdݴrh~nd[ d%,dO~5(.l~5ͺov;>}$uM\V$FO=\},Õy03tmW^5Ǥ)+k*AEZdGRu p&[-"Q;BQ.`T1bo=R+q"d@pbO-$6Ә Bdb2"`92|a:uFjOTvsKS@A FD ]i[d\eTv QsOU5[MdN/miCw4J[Im˽/.qtL`!^{tG `azًl3.:cSD>AwufC0dwlu#F*36#&A9c/.Fz !felέ?,̍/nCJqA ߆xz* C)@[׆i*nKfF/e&+si<M! X=JHD d.?Lp@mHcԸHHH#4c#3{* v7H=h uQQ[Nb3 :bdV,z0J"A{ypJG~#”0C^lFpJz5;;e@T +吡-1OSk޿楢);:⿍8l fܟ#ƺ &*qч);#?@`'A\!Ybz+n;{?0?f Dc, 4!UB`w9z{6RP6\`1ذ?C/ YKt%$ K}>{='LJ&M+ ΆM<%>\y-8îlAF_ף^2 ȓKy\k,% N|S=]~^XDL{bo^fVyÀVk7xUvpNCя;W}D|a߁]`L*jC؏kt>X1d bj:Ls1u\sN΀Fr2N%x׼c8meӍj!u,䧺d!rȽPo_-DtIUvm=Gu]*oaxš~v2 EFp!S1ޞ>~oa2{p~u#дr_g#MnVF^޻[Cq)@[Gc6҇Vyη^e#D~0mPEPHǃY =HJJ½C'OsZU e` Q,8n_: ^;6h}9l+:rI LUt|i9K9ϙŚYG棸eٿՙb,$;PxEFѬ,*HwuR: .t,1μE4`_hM6O ;)+i \L+ TMöMx(0(}lӒ:t˰-ɔCzѫAd`a$oV|q(j\ԕW{0J6=T}EL.X{P/c9#+O~U֦f59 U%Tyj%MjA2T#-WE0U])*UY׺|Z{rܤ,3q\MI#s a CVxSD1N 'E4I]QZ r; o˞YXtI w=E tg,fzg4>+WR=H{Idq{yәm6ͶZ/3)Օ1޼]/*Dt=D<7`!\ڶiMчq6< ̕6d!?r nFes8<`x%= pexjPEWY6M"/X&:G<[gzpSyO 0^wtpw'T`gtNG 3swx:xsy FoakeL #nׂKuN>óVMRYst򾒇ArCF d)H 8:) x1I(!5YTzv\5 Fqbئg~ʾn`X0np wM Vdհ>Rd2zp]dσO6St.Qб~u Nx l; f L@ ot1k@| J_~*j Áb(pƸcƀIș4j&}Tnܨ]j$"k!djb :8c ;"p-saJ*1 %~4_`KDٔVRc}d탥B$V=^^0i!bN{%G5bHq@ޯd:EAl;oO<] .^Dlу}q}}ITjOŶҊHydlNˏVzhnMX{`X>PI½F@bˍ]/\YKL Y j;ݠ{2ZWZ|պ(ݤ}Rp߻o^}PpCޝt.g׽ ϥ?>Aҟÿ}+sts V>dSkUxmwtlG@8,n-=5MVJ BYEPKnTZShcELC^[؀;Rҹ해޶,\)*S$IFQ97t*Ef3Vl4b!$n=,f?=8WT&wytigHř`"f'lU7(!Jf,Es*z |a?>~\?hDyɭ5jߊh^\t~xp?AՑǶC܋߿eR؍Št^e%~wo5??wDڰlu/.2W,~..:Z=#d es}#~nq-z#)[!j<U7~ Ѷ,E=-(Y/ {phk45 wbÓiӖٴi;mW{sd]JCH aP@a3~?JHHwuh3JGQx3= c/ՎT;RR?Z;DLCE[:R% >ȾyOgtLwv''/;ǼyE2xF6zeM^Yv#\d {Ol0ΥBr׳ThVʙh`9~!.F}8+Zdb@.@ZQAP;}y>{E;bsJ_lwq Aۀd5䠄E(y{vqc%KCg]!h8vk-_ O;DpK`ď]ld-ft8e3DyROS4>^vĎ]4ʮǑUaDC&jG^K': C>]bYWR{ý lm-2i:!:ٱw#j>?iBւd2I\M•JtØ sPos;o]ם56}?ZgGC7T}֬6@[&xTqZc?7⟽ۯ;ݔ6٘ph>uDa]{)#.S|ejl4ZΡA(;|*" Nk׃ϥ׆3]WgdWk':Z(0wV۟/!f<~lY,PK}>`dYQPK΢W" __MACOSX/Lua/._xItemLib_v112r5.luaUT eeeux P=KP](]&HM,8A v+/ɋ MҗXgDpt]Wg'G_m$sTz4%=ؒf(O2Zy?-7- Ty0-e% iI=dň <-ZUvs,Yt qϓ(1S*`TyqPk KDÐgpjAS!ԜcM(b!]7A!N(NX[ aOz-?|hxPכ †e[V Yu-xPu☪i lj{8#'PK @PKU3T Lua/xItemTeleporter/UT aaeux PKU3T __MACOSX/Lua/._xItemTeleporterUT aaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PKU3Tj( Lua/xItemTeleporter/xItem_Teleporter.luaUT aeeux mVmo8 Zps}(uwƒ4aa0[Nؒ!mbۏߒcMzqԆIJ,!f5Íb$ rEԠ?g2[Mo>a@[Qh9@ҍ2oVUM5]1_󌛃9S`[QQoL/0_1rCv~2JvNbZ i.Kamlc2]|yP7d ٝ}Vtv7ܙ TH 6+*t&h u er}Aܕ1-El},cTQ8OWn.[Ɏ*MVrr?a }DYf`A/1;'ئRcօv!)]]PZ].JFH:WCk8Qw!c NQ&QUchVKwߊЊSGF MC,j;ױHWrq5Te ~1u8fZ$`- `V7P .0,޺a#7[w_74߅!< ﮢЛyU譆An*4h\??q{8+<W֦*d^mvgT^jBLn!xѭܬe/H%@6/n/pl\BZ̈T0=[F"Sl{峵W͛rsaO"&MVi{ %Ih 881#,;9 /(zܠ@r;L4{X 94쎹C{l;PKǎjPKU3T93 __MACOSX/Lua/xItemTeleporter/._xItem_Teleporter.luaUT aeeux c`cg`b`MLVVP'100i ђ(aulV4%LPq\ĂT e`E&%d220rowzvĹ YZZXeWXYZX:9隸Z::Z[3PKT9PKU3Tj( Lua/xItemTeleporter/xItem_Teleporter.luaUT aeeux mVmo8 Zps}(uwƒ4aa0[Nؒ!mbۏߒcMzqԆIJ,!f5Íb$ rEԠ?g2[Mo>a@[Qh9@ҍ2oVUM5]1_󌛃9S`[QQoL/0_1rCv~2JvNbZ i.Kamlc2]|yP7d ٝ}Vtv7ܙ TH 6+*t&h u er}Aܕ1-El},cTQ8OWn.[Ɏ*MVrr?a }DYf`A/1;'ئRcօv!)]]PZ].JFH:WCk8Qw!c NQ&QUchVKwߊЊSGF MC,j;ױHWrq5Te ~1u8fZ$`- `V7P .0,޺a#7[w_74߅!< ﮢЛyU譆An*4h\??q{8+<W֦*d^mvgT^jBLn!xѭܬe/H%@6/n/pl\BZ̈T0=[F"Sl{峵W͛rsaO"&MVi{ %Ih 881#,;9 /(zܠ@r;L4{X 94쎹C{l;PKǎjPKU3T93 __MACOSX/Lua/xItemTeleporter/._xItem_Teleporter.luaUT aeeux c`cg`b`MLVVP'100i ђ(aulV4%LPq\ĂT e`E&%d220rowzvĹ YZZXeWXYZX:9隸Z::Z[3PKT9PKyW Sounds/UT 6e6epeux PKyW __MACOSX/._SoundsUT 6e6eeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PKyW Sounds/.DS_StoreUT 6ee6eux 혽@[徂oOpT>f *Z)z>>Hf&Iw C4Jh UjP׶!~õ|3˧Eۃ-Bqnk_C냧]F'tzQhO6%tJg=2q0>8=d!VnBi hPﵾ sv$0@:  PK="PKyWx __MACOSX/Sounds/._.DS_StoreUT 6eeeux c`cg`b`MLVVP'@S 8A0]PK 85xPKU3T Sounds/xItemTeleporter/UT aaeux PKU3T! __MACOSX/Sounds/._xItemTeleporterUT aaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PK *T}# Sounds/xItemTeleporter/DSTELPRT.oggUT dadaeux uX_0z !HJH 1 ҍtψ"HKHK 1(-Hww50q=|w|ug{}k}h8?%7% vuaq5AW+\ ~ Pc[(N@ݖų?ljl qX[yYڻز)xۻ8[x\$~(EKmqV$K]Cxey IǠz? `>""<)حjھ/?9)TS[Lǽƽ SB C&BMB-SσϮWg9IZEcF|ϐT xCoU6TGwՔJmWS) c>V׬eyK>t̯{~7?QG'Eaf@wXB?~C KMD,'AA , ~_?ځ(:ŏwq lϦv 4RsC@ts$z[6@,}"oȃ8kl({-kݯx}o\{{rbv|z6NmQ"i/;0xVSW$y i].wZAI =-I= }ڻJJI#0s K|Q/B3` Ǯk,}w̘SRX~P FU|ІmDREUDL퍪[@8V,ԅ,I>Zh(>d'QAGa~=u$|ly::<c@8,뜊k Ȧ*I8Z)9|+,^FvpxbQu727&eO|_ːĎ#vRD;ȧހ^; Xvgї疥5w>E_͕֌JԹE:c,^@E]ϱCl4cJ \ztYӀ!ו7cۛL,@^beh/7:?`} g-џ;T:qX`Ա)+"_@bUK¶|-ooBV߄kJ99x;DepTii,6Τ"u(jjeJ*7r&k Y)PS !!(OIHRK!{qW3JXUrb7,khh^8 )ve0XS[W(S dxډ6xT54!T$R 1`%$ra}s ku+7uy #,pX8:p5 )9Z? Wc"!mmȕ[P7¸a00F˜bʘ zVU$yAдWxiuufp#ܞ`:Te/Jrĭ"Fԩ|.8+QV4z"WNg{Ym5F.{2),ٖ Yy͋ʳ|"(hP5zfK52|ٗhac7LJ=rAkrZ7׍Nm7=6 yCޜ%Q̰.v ;pr:}o_ilۚ\ CI6.V]l[ _J>u=_5H]Ϥc6YiҡixuΠ`PJPxv%1:zbCu]`o\K5b8SEq@Ȝ8GaM\%҆Hd$8/ouu$3XahX{Bnr}GR<huRՠb{b0˅ʜvI~ʷWamw?4 |S`#0%!n,S;J)k91Gm{3_DĘ2orI>QE:Fn[Q\݈e#7/o)v|B>,Pх0JtTo`i=iGp7Q9fyXPE̋z oG!۷_ B"\<8Íq@p*KyP|e@Vy x('gmg,j9,S}-;Wl>]i%J|b 3SOvڲ-=5<剴`uxׄE%TMaTPS 3&KRx =EZ, cW{FS7aWn3 ,)1K)!#G{(,.Ċ DSƼ1J}.o̲nmp> p=^]ƕnȢ ODaǗ΄:ג7N'4c}`uNϛ"jwp}߄>f eM|-O[;+F6emwKCr$GLɥǴYZG2XeGSV:7Z͜0|xH:UP>1{*:ޝl~jSYhn9vF9p X;7Ϋ[[!8:I3D-jq) "l+X\f+:L1"@zOӊ3z\hzFX9~?o]B~wR<[3zZ׳Hk̏ʌ/l۞ޖuvҍt79"];7mr}f5+"4?9tcqOg@@W{}TrF1ii"Sj;N6k~v mp{[090?~(kE4_h+$O u6I@fM)&KKZ 氜ɓڌt[۞d%nasjK`@K5}|U?t(9XJZb̯ [_ -u8.}:w dA]C_^dсv"vYXJtyKmmbb =EaeT1ƗId򎫮HC@:JFȓ:cNJv#g_1U$Yc @F@ o{rm Ԗ9v6e!brJ^dO\٩/}&9?ce~M6AK&-;BO0zI++;PBS.l%큩ǂTXuey(|pB;>dx!Ї6(k8b2\c}'dN9)*U[ZNm'fo_3?wH:k8!/O8+~WGkE˿Q;b`7{~)n5h4Ґɶ!0߱TZ8O?wXB.?O+a?eyk6RcE9ÜS_Ìe0Ҫ>gY/dJ"+pD*]Mo Ls?8+QRSGux.Pta`5ղ) bC"͹>3)g8:Gkajz_>^&T077Xp9G/{5ʖi-: _Tٙ1Cі<ERYU<^ik@п(<k4e$z=Uػ$~*jɎ#Dm3opVSO&6X6OYNaq^m!\`3sF~~I3PdCqV7RɀK_@ZGh_kg=o5^ c9O (" /}:q֫qo~ՠL0LL$z\؏X=Dbbʗ ~ĈQ?$yIz^ʕ48w7Dſ #t0{>;/6\{ SjS=\ [tw5Ph=&:m(hj`ֽ#wW(所p7 ip"CoTlQtvae![PJs6PR !Lh tI~}JƼ(l2js)> (1Ll%ǧk^tk3fh)V4]VtM1@Xj*42ƙ4 0\]4R~JKW$/-K]<ΉZ z1lDZ>_g OL}uMں3[ǫ.f?|&˲Qpj=5k$)y-*S-9"RzrV!DK3Bj&'Bb+;pT nĴy}x,}ozx0UvZRb&-/hl :;{& jaN) НgOKSjo=ÐG[/Ng !X>|)ckǜEXiw3=X٨,EoA9{*8#]Ï>[E`6zL@VXb]=lWBSpE"`wA<6HK˾o)1ֲ~8RgYw[$65gc-KO$Hj2K>Yo}פM4Hp*m=4R|2!Qi7nFWY3g! ߺ BqAPHKkxOA@;3atTVaiϫ8p2D,3qTVRg?ncV)|jM:pюw#K#1ݑn6  .A3lW97h~qI NN/?B&^. "EN@j~鞻0Ϙj{=7OHY)0+j5>0Xxl0s{MtǯLԙk;q?reǓL&hي OulnJN`˱9 EI|hxI) 9nK4%}bb2mN߉#@r9l0G!`>+YeyRRbxV  2 t!O 0@a ~Y`NVqlV,C)iz|EɅJx ⠹o^lY OaӃ3v _'W#\=c1t=ֱ0پ22jieLeMI!j%ѿ:ͅ&_8A |QiO/V&kxiU޻ޏܹnIɻ M]3Փm5seCjgۄu?h*a, F=s` >1_<>u=jH'4 ͳ~&9e& /zDe]c\ <|NX {bxF==@irÆ9ou]wWtӮ hrZ8Pz"P|d6Iقh!Du|pQd cnB 6&9HLφ67>.&z?W\yLFH(GpA7 75ұ{+ȕδׂm̓EK,8_YnG~ȫ9X\Gu<ױu C Y#A|Q~}@FY@v, r@y{Z ->s!' -Q==9QTU c7q=P=`O>A%1=uذ" :D0z@ϩfh0sp ִ~Lm115Ccbh]nx3*Ɯ m (>7An&:n`2bIDO擂nK@u! yH.XZ^F{T1k3??^kFC;(娣=+/[m*Q?7X4,ohq/[PB9CU+Lo|w׈` -#6+9],΍K@k 9뾖눾zwuVLfy|`ڣ c"n U?_XCzY7L @z3aYHD q.>Pv">Yvix L~޲]JUX 萗R;EKAl$tk;/ 11R4Σ:$J2t/>\m זѢ%)M2}c(`_m}&o<}Q"\vJ9.V|!sWNܴ7M^qšo* e7ߝ9z@¨BS=Ygf381GQLwʽcK; @㭭1N_-/}j>,gm ʺ3nɱ8jmaQAM {|>hUАFR8ѩώoTIZ]ʚg0QNu~/pC~ 6J~Hqȁ}$<ūhIj^jӪ{+:zmho,Ό QzC]v*`IJI9~oP1RAA&{GdtD`e}upWކđ?}?#5e@ `zz ɕBwOe]ij)}geVí]*j5K+< %u{ J%z@mF`ch'ʄ_0/_+'pp,`bOčwh2_ |y$l;re3xsVT+np wM̛tf.F0:,C'ܹ]ƌ/?+:t+WL$l'y:piЩvq OͦIӤA &&e{a0z@i B`7R#wGsV9FVtQo_(e{ٶ吐}7Y} $&P~?37}"48R"ېut ظI X䪯\履ƧUy d Ťo &< ߢ}Z|oH6,c*o\*EeQ^3|1Sg1gU ĕ/gnaM$uߴCWឍ&0C㰤);Ǐ^eOO)WН~6}0RPH:"[<쫻l%jE$-JJ" z\y컈ʍ%"ud-,)D<*( 5՗)wAaxxÙO+r_Qߞ7i} ʶ 9?#F|g\mS;OԮfag8k3]vRuuo9H#Cnm'!MHNs_ Ckjf6+׵`gM#,kG7O׋j8\ZM+8a2Y 0Bb`֮3Y\LA"8+=g,}9")Pein-C~ k~ZުoqA`:v햏I0 )Z`P7ø=v5w #S˝,T=/-$yv]A9jfmgGXoLb2#X`2X-=8ML6|w vPLo 4T=X^'n4{Thܦ %}v.HSNLEQźd盰;O:zmyt7!WӶGW+G.]$0r_%uY!fFAF#GYRւ- j?kifO]qCC?Mfwn EZ~5ycʴJDYA){Szv(ҽBXB\*n~_MѦ%`c }gl8l`Sw/[[5inV=[ ̞qfrz֚sve*]]j/%dlT>6?Tv~4+<hHvsW%Kx6LQ0.oZٹ̅>r21=zg{ 1&/ܴRѕ)r"gc;7MSD!`<{*8P3z==XSߔ ]Gs^bqҷ7/SKAbAqOme\MQ v$_ϱ;_x=1ֱbecagni ;gkmokmgE eɾCGo{^s3wos#!%m|ɠٲ:3OAy@EKòF3P통o5@;Iْ$qPϒD|-?y'dfi奦dxsꬅ ATJ3>^r(}b//1TXP|yR,Rub_gضmVCX*%jIV{qe<@A, d.Hl"shyzďY`m}9Տ˧krpn5 י%F[GEOW߻%Uy8P aې zs,z^*>D=;;mPb\N lm9}[ !t2X͹{כOn-3d~̉kLwXk_یgX |ޅ%llRС %2Pл8ptryܼ>Kj<2b\O<)*G`3hж̍MTՈOa@opF!9?}; / ʷ"'WWq]B,<[du4.g"=3 Q{ ji\fr=exByF}&`Ds,AoT<~ .zĻl 퐟+(E/2c~Ț,3X*Q@ɉ6R/u*v^o$>> NNk7QGЖBU ._£}As:cUgv`E3>u/h5p$,ˆOolc{%tuA>[p}Yj!g=EЕ-Pģ;ĀGwg""_I)+t:~`UYHdM r"htbRmyQQma[RZ@u<SQeGT6ᓦ;w}>%gH- 7^<=F0]DHI 'Ô8 1z\EhX]"GVa1%V[6ӏ'Zhɟ=C޶QTSO'ǃ+'] 7Ryno"ٻH`JSH]t& stzRxơ5x/YwP:c&Ȗsx53CxtFpDGytX:+,I+B1YdfcSV)p ңt}'v*)(OR )ѿ(o9-t\#d^]|J@-/g|5I%kbz'$dZNmۂ2kHd U!}3TGgԑ_I<9@ I146V9i(Uk>]1iy,tuQIZ&\ecfcGCQ_QS*ߛ^9{IL!MARQ8Η\qW͌N{\6BU^?xe՜-sd&?hh/teCX2S2^GWYPzR6nRu)YuKc=TR9+:Bת2_w" )͢.oG:z]ӟ]$/!q\Ә{p (_JӨ Bc~o-V]c)R{ݧG4w4,iHzϬ5XܯU9|ւP)qFs _lb;Z&"&;5}h qk/)?]$L~6]$p?'?$(8TՆj4hݒ06`xn0>>T0:& UrfJ) լƅpi|^Y~~$ۨ0H M[_7*xBOb#'̱d^|R ?<1: lEyyYfZ?, Huf3|l )7ogc23UN=T/C\"@$HXM>=NLm@ѳ>8ЙlUKC4 hs[gVd=7Μx5 HߠhNωimq/r }LyỸ)~WVͱMǕvdҐ kO_G>eŜم&,{1!c9E!C5%yi]LWyD7rM]:w򡃻׻\vj1p.yByIּxZĄvHK!yTD授lk>=eب=2΄TnwԤobWa-lI]>>3VcOgfݽ3 Y{E ]ԗbm1:$C8iC1?^kT>ڥRL7jn(CV3`ǥZe+ zɰ tN#N猗5 Z/m~h>H8wd_.&ʟ yWkǺF\vߘh-ܛq& l2>tSQś//^kfʸ~%Za;6@GHl_64sΰpQӋKl(g\$ʌ=Ȳ?da- -Z6x|$4|Z=fc^):YA˛<_ڪT <+b=5ݷfA 2v79DBD?gQUdh-q!X+ꋇYX#{dRn7~̈́6`Tw?n%wd̐; Fk>ePڡ;xK̸|3pvBjȭ ?Yy-ivu"k&9.~7ßJ%m 4 2{ց~tMz˟!D76ms\T;`Sb*o;qu7[Ýk6x{{wb7lR?^: WBa'MP0%aB}: pqeJHzV 4@5 95;qvہ1Ok粃x?,d,C@֞kQj\=X¨VD Gt[ʯ7.rՆܪ;]VW2 0 N>nʂhem٫mq=*1E#jV[/!T;GgRs[&sceL^es.P ndԈRL$=޵)0^`V 7 8P \oub,c#ޥ웾x'}̙@" :)WsX"7bL>O_)>4~>z v!p~xgQcpCE#枟DI w0VK靡*d\kk,\ n\G^kFAJOkՀA/;>PCSo38 Kut٨`Ʋv:a7C[~{µ = 1ir)?Y'7K@sjoi֯gӅ[c-i6u i_:(Ht4ݥ%-1C !tJJ ̀t !1t 0swiǽNYk E=T*2xH&V @d+X EWWv;DKn ^ :za'[yvKnE/'Z'<"u"w]8eT_{p.X5؋zQe ~q&~F(Ϥ I÷ Wa9j)#y@Q6Gm6qu>[o>@V2YKMl?XA8ٿvN ]"~J P.'&1M]u Ht4B ‚BG;c4uUsN[@<ת./BY_rӄsfP/o_2t͒\tu b{c`xQ8^cJa̜Jk$OZ/ }>[IT@A,!#=9-0p7Q%XNaKЙ mW:YY`N&T$f;*\Il"RS-g!Dw3m&µN{Aoh7+^ךn!8V'CdgR+]ˇhXGqc}=wu2<,21p,nbF^}JA y#DQRCg9 ".jhh}f3k IC[`>,WhO B b23\%[gN!C~q%qȥI]&1B^@'Zg6+nF:]$ZpE1bf0'FDjrbFe<2&Йs[[p C'@:qi~%3QNK/83N{ۅvLmdH P.Ssfg Ͻ}PxiKyuy3 ųJF{ m347M%&]6x[ʋ0=2I)w%'`E)U(R)G4>qf;)p]|/#賰 /{yzYUu]'{8zd搮ZfhaEQВ g!B݆xZ/.O@=>k(C^,2l#zCE&ҲZR[2OZX&.988q2y:pMg~Ĭ ԁ:CDAW:Ц=StB5HmZ׽kf&n)W7oGehcO#~Cz2_k}ѻ^nE{!*~S}\l>ݰwmbu~)cqx38&8id3O{oH1lE9ܳvM-ҠXw(j嫜Kuxgk -ͫ.5"8!i R$Rڠrb\O.[qF]Y@5†i_ +#5D@/b$c֔3lٲE/*TtD'E 88rɛOTUvZ7bZ6B>ړKMzFL<;&O5?ߊ̐VN!] ?i[)Ȟiޟ&JM4l{9V"[Ct#nԈ]r2 $$_?r((f@mM1 ;bXGtB<'ෳ,V:w; [L#Z5&o!w֒FE.eԞ~k:' ^"Lb^jUcܔl YL41,՝0w^+cx :f; v!Z8@&wR-puM .z(45kfV r] \b*!^WX^8< =)?pC0^8D!6WoZ#?uV nѝrqѝz4`QӯY<:<֧kO˕\Ex OZW\"dH*y9w15-P,zkL45kk2Hcm:c({ƱƼI};I fX/W?.ީ ?FuDȿrn5 -;} 8L .ʺQ:S O-FD=xSIIhq.Co)V41ŇP;+۟]nj~|yԕlF1jR_J|-~3E΋7Zy%# WdQ 4h<-_TS'^-> ,Rwx D/5ڟvm]H&;絢lT3+ o&ة:3~{ r֙a>OFG~C^.6x8νc L+tO.ߘL׉P[HXL]sy-UbMK,:xE[oeٯTQ2^O8zB` 裉'1dFb7D@55 }FÞ;%VNRQ+C^묾(ᰤF&!'\V8OW}}#aR4$UXAeѻ`ᕖ&&()[axR}}dRe{onuS<.b1㠟)$1BDKx%>2߿UL?x jVwBiŔb*1-6Ӌ4Bu޷c܀ $z!uͻ3n_^Oqi>s.4>O>^t'\;߬g[}&A&* WA|f88J+YKoRT݈0c56n&u")bOV5tî{T[¦",pmd_thZ1>^YrzY.]xEz’ud7{ٟb4t#pL&P\UŌCw:Vg$VQoVΚF S)(HjX8h7r2ݫ>l1\nݬʠI* >7~xET//&z_TJcB## z' ~a+)(ZnJ7]9sƼ0(aO\Y={sQ)C+d X1p}1lD1u$b@3ώq$4u KR};=/8.lZa@{J"P!1L-i2SpU-ɪYvW3FQ1< M$]TK,ist[|5e/xZu;PP|1մc=s+ɯ(VUͧXly=5dx5?+Z[q-.b[:YT-G|J3ob)x1#5P) ͛ֆbi&p5 ~ >幨 wr\tx|O&9sT11#$X?=󜷜Lc8f[2MW>FKZcD(%tIg{Բ\LȞCq=>||`>6ߊߚHF8STۻX@ LrU; le[\4u8o1>36XXE ^|KL\{b.8!:ٖ1I9kF,n%zOʷlML5W\[%`si-{q_.AgBXXRc1յ6|^7fvgm5JFw4]r+uQ<<&Vxw뒗I_Ic@.T>_cRDҖ`ݡ> cﲹ,;qYg"H{h3TD' "(3/v2ZRXΞ:ߜd\˝BNFaJ /տv6ow[_Q;~=jp]Ʒ!~t{'NkԔ:'v \ m2OYr?;z;0( o+ow(|#g#kMctsttxzDG 2V)pCK% |gIsZ^RYQlUUS <S'q6&! q=g1x$*&rt˱hB^ae2N_r)z ܄MkU)$6*I#fxuH[mmQVG9<Ρ^CA zٸ?jeQ x v xgdJU(ӾSu}Y\ni˸( uwo4(>0ъP`1hfkP|_ʶЕ% {8q>|ˀ?vGozM =+b5|Y86_ -X:dGz,8cFv6<H!<:N [+9w$4}&Cx9)z(5ҵ|ާrOzjYvȱd-_ ɚ萾ST4.- l##=5.nnHhrglej |qsJh iS^g W`!DC3|78ʳ@F:x+96Z3EAd":FT (.zmŠ3UfEA$gcgz'`*4BBN#ElM opԱ?v]i,֣O(|>z}R\xFHQA?D+ ,!r!*5QϙtrD*WzytZSbٕ hL p׵z+Y9ܱ J[K>^' Ɔ&">JpHJ(A9Z$v6Fhb/-V ?)o}$60uR(%Zӕk凜mAxWPrG}·Liӄ3FsEpD^_N?t (yV!A;2+5¶ml,@ʘL|5aST}[(-jA(bHg*6b8hLPn#;}M_i<ʧ^ A)/%≬?+!WJ]6_ ?2o$+o%2I kܪ:8~=z=woEokM.י7nTL:EQTDӳ4M|WFsm|8 %xr&gM!PY*4T߅nۜeӠ$V+ͤxUo!@/.Q> ^rW* e 6|jL%aQpա(HXc}I]#>e]=qd?zfpɗNte3I( ,d_֦$++PڍS$I̯ l6 6mo;Q4Ӽ6xС&Ql-ㄐph'-B2}_nFgچQg ?.!k~:{OQ/٭B6?Q#UhŸ6 W٘mKR`v+lUE)04u4 gȞJo?9Z>HM&n(4s^GP5zw-NMZ^hx]u/T^lN|pMRUW}gr\YDA5՚VTLE4 i8YS&cDt^Y4/f)!fC;4V)_L%/5n2ߩiƨNakď!|/щTT5>&mAna/([ ꭀǘzS3sXLr7/wO6[@{/f&/\P.Z.-PEfgVl Ou UEHL?UN_\?6)M)]\9W,8FGm-DA~500ۜ[-(@'\_Oih :eF4]lxӗ^^?(8w[45jj& p<*3~P_1TR2cu np֝ӥ[ZXH.40XN3XҰhB$_fE!IqQЃvXv$:Kp]yQCNe$S0?HX9$hR1[a_m]GY4}o%Ur_R)Ϡ/ՕSbn~LNJ]t?IU[ᅤ7ӤbkpϒKW>J F¥ zVA&yE1`156Ǎ!px;UFOZH[}WZ딿u>LfDj2t_˰FU17#~VrSjCzv|:nԂRam?͞{/X  ]` 2۽aҾ{dwl{ϯ 2a'#mD# ]Qv!=-QƯj i̻y7vNknh'zKgL˃ ӳ-/D$_ѸSov_'>yZۤd9n(5.ȰU@_Q͸Nغ̟֊=iݤqVCK?'oV]m#? nj¿QRW+ɒ!vIfg""y9 d8 0ʹ@L= L(uES bcTXvM~[˴:_TB5jQR5-5\~ڝ#rmq0,=TlY&}2J~pHYˍPҬ3cm9@Hw P4sC,D͈` ]"NB#=;!od+@BWO$,-}8ϲ-kv)ӀHbyDpSuϼӢYqeȲ* KzmgsݮnН$ -(~ aakEgWyhS~_?>{@Ht<齂f_&6\!5ْJFn 3),b'?ɩRL٢ [Qك= _Bfnwe1l#&M76Tw1)_67(WT\@ZPjV+&`NyQBEeq_k,m2TA_wl[ߗ3rW,esfq1VqCR:پ%c녍,ͳS(E㈎+d4+uy (wFD(؁* k:" FWWo;5֎Cp)hc\ylך 懆+#ăH,Z2V_նhmhpvsaޗq[#rZJgvȗ0\CzDu5v0(J(/T! "SMz\İ O_e5~xܑ\,rWc#8-618Gc ;?v?9Dxh8 u3Dm:bPɺ {sR\&KS\G~r: 0>[q~sPLɈJq /(-Kfz%Q U7 ׁQ>Mi_ps+>T6*5(G ūJP=ƨ4tKO':+/u6Eҽ.w.o?TjL?f3B1S7FVƦ6$s_H\Ⱦ.%`eaQUC35 C7=,ӀVó >Wn/q^ 0.g.nR#(WF)֬,povr)7w^یݷU QtȵqɍyRMq D"݌ $oSfq@=tj|uѨ#6{׳7T!i ~cUx}\n6ݰI1&6;#)gKA+l]E >FbD: KK |jjêun x%%[#5R3?Jm@Al9t澓 KZZ1=o@K_ 3-ـCMpjzEXe"tRѯ2R=6xV.?W[l. RM4>Qr1RAWLfdZb?~L8 nY_JGh[OWB'}"3c[_q+c7.dj+Z2֌jwyꂉ<ϵWʟ o99>Xp&{ɤ)k'JL pMD.S"G[onG8ٔlY=Yrv rg6cr^*OePę"R"*xgpDv)*Ņ@6ˤnŠu2Ar\]Wح_kr)m ψe(#VB;Hrvvd+SغM$1$aJǎucگI!S,bna}_m0,WU mi_Tթ٭紭2Yߧ>\IZAråH\eVL`C}?Nxx8:ǑGȹ4UeUMP9׫#I I^p#-$gdr5^OGEvBVs66) ʳ)OuE?]! Տ];ސ"]cD>XW($v<py:'8|ِW_2A.OFf7avšә8L*](QgUwcu5d.77ϘIa[< 3zIn3 KU퓗!KM!%ښ5ݻzcEbM2Kb$(6 1e`LA[{,0tu2ʨn>dO)5Q}XgsFL1ƼfH]'d@֮$v/cоj$/cdVpKAl d yġp֊z4{%Z˰cï܊T3 i+[|}PYEK¢C< _%$1 ySFQ2ǯ< =CӴ&v(+ѕEWLFP }EE5g{Q( rFWSlfUcu<ְj>Q|<اVxm.Pj6=mM-hM!x'KniĚf߾B2ѶYaJ?>}Mgz$noݻiX`YGTf-p(:eB6m"A3nUj;</rYNB\7g&U(k0 {=?W:/i{q:h}E>r| i:%HRezx)Ɠ'1RX]߾O'N=LPr;Pix9ռi||W觪[6 N#XȱORX[$J"IkGq8|!wѻ`p"nxU!j#&ޮ9:eBou7Y”=v8~hӡkW%}?u}:`[E/N?eE ",mt?KXMW$h^{Q_6 k$tt:i9L .U9߾Gh765Ժr_I_\?g&Gb\%D9ڻN ".Beyn 9'7gܩr4oH[I yR~pyy/mAt3mw rm%=m;7?,~ b&feT&&5ӿ`TX[Q&T0 ̀ HBbbJ {;Rӷ@cLCɯvD{l+b>|!/d:r}>$Nz U.n@4U Lyy-D5iQqMՆR DS1w4>Ÿ~`8<{nA @Ccd$ftdܳ7!MY")ᨄbT<岮܊RRuO!F{pTV"P*ouzLPXE3Ȣd5N1`X}MjiYRͷ#1|9}R ܦ9]nG{0iXg;҄A&j miKp ^;mT`tL*+M%/ǓoZP-:eBMC`kv4$7\Nw^5 !\tNh@]W93[e-Y>RVo<ɡ *mlUO5"5晪j_aUݏ+l"eZ+gsߝ?\BO˿_"w^Myv{bHw$T \=].OVrbG}Пkm*O(}O)ȉl5PʂHJ7gK^FK 'ҧFg;F*#Qߟ"Wk%TݰHȓ5D,eV~i7~pϳK?uM9,sy)JjwVqtDellR |=PQWN 辷DC{5Zv%/JX[4^jL2t:K*`W `4&vq{E9 N9Jzc+<.J=̬Aj"-Md3EIO/ : 2; ||-,+QUroܮ7Ͼ#z\rv)%h&惕΁:vIw$ߨB*բ+spz؟N5wڻ*}1꒰;rEI5E飼o=5Rg0JݶpyXC[GE}QE iDBQDR TTzDACn`azwzwZ9uw|q~f"ʸ`fn<(T'DN15r;* &!2kqꪎ(ϋٌbXor٬OK_!&#67VgOG$:GY AK=5gABO]'7oO:Chy͒ǏHN^8~Kb oAa"a/ TO5*/Di@ꁧ i?kc3yR4jN* m "ϧ@CܧNa.I!;?m[-(/hc%]jN5q{>Gu~NIoNb.ON5 ې!2ǻ0R'~zvm-z-UD @ 5a-RDCBJRnqGZloϴ[0Y<ʪy^!R^mjս5gOe5tLЩa{{QIͯ]8DT!~]^J">4Ey'AX^?1j)z}%@RH d=?7sބ+B/3Eke{[K|4kJ7&|`,9cCJQN3lT]}!|7 jV_D w!ǒ7ESPUp'Kنr_D#Hr<Lqzuz.2[LW\!qEQ>2U'z٣5ٻ>[w|.e:uHn"utYz7PXq)dޏG4bm*׽(f1gqSC*M񙅡}94$(zf*\hBГ^|žUPa҂aLb'QO>tnЎN}-.voxSԼ'g73 s]oؕfk 3(ˎG? v#yp_2-ǏLҺnl!sLŗiɢ{ Qg&#t\yȰ#Fc:ke5V[`hB9ͧ=r+:OiP|~w\Leam]1>\1.e, 4;LY,y<9ZE2$$%M&QbSn()>F?\c")ꌜ VJ%JG"o{?+'7D3'%i|8Ͽs$b/:f}j{vTF}z[JIb٥𘠨4Bm(w;>9Y -dO+#n ; v|4g 8_&*͙cjD1Ivo~s IkYcDIdsr:+ Ahlf3ƛԯV [/])T: < ^~Hb@2-H+n:-f3;pwOoE,6Sj-GNv\kkSɶF,oWx-M7TσJE&,H4£GOEl=t%vJ~S?ҁ^R>Nw̰)C@Œ׿u٬ù*q be]'dw7ovL f1"[إ V IҦsn/-UxDK^Z}ξt"-BJ} tLO~wۀKv,=-mxxkqcCʚcw5h%k2 uX/[>bmgqd/.R|wk`Eu&}׸SA mk{?;Q%,@i*BL Cۈ![QB$ߔ֪oqdT$-# %u1i<8"H VBxZY9a:_nüI (3 wW5\;mQ=FliW<58t"( g.DS`c> ,m=༵&׃\6OL:ge*F>pji,¿cxH8MGdożq̓W+#c&]xZXn%ٺZ3dK4WMoA ^)r@H''7Q؊0VSg[$_$uޑ|}Rj` ҉KSNI[ yc~~ S֔?X3Bt+OQdgofF +78G;NjƳH<ӈ[Lw}:MsquwBs L**ν<~u7*v#ãv; @msSrtڐTa'&'SܕT泭[z8V 3[mYGwE?jG煮ٙ8vej2Ø0w{=²;ArTG~o;4Ϧؐ=<[Ƅ4S#ꨃ~ g]I IxW>h,WkLjL*ܩk!sY=s<Ŗr-V֋奻9?^Z|ܜ`ϝ5dURG(-֚TKCj#'V|(#)^TLmלb}Nn"-U|H^4zxb?X~_&W]dFc7})Fs݀.Yڵ7'Ub5 %xز ?[Q cqFf"-y./.cSEX4)%y0J-,&W|$G߷f?2gtmZcێ柑=pُSDV&Ǡ (3m5û҂60mEX+.פ zf;6yc$Z18ߌqBlJk]¼G_]ĐfCSiSLȢ׹q0G7:Å]5Paڟ=3r 4#*pOȤKvz?8+q\Q*-]`Kxje~kg5=9iGw>H|uB ]~i7=xBqi$DY$_t ֢m<3 c?s*?}jMK qVjV0G&$?K}+`Y}SŁބ98ҝ=] Wz6%/8ݬ S2gYӵ<; Bݴ <0ۙ^f+-0N>Ѻd/ZC;i{_!W++O'X|d -r$l=*nFd`"OX3Wv$]b蟍yѼz,w&?}їd綂"r-GT}Q'iv #<cqWj -10QI 4br$] v7*(_u߬+\޲ioT 5&cT)*j99Ⱥ(Soƛfj6DX1v/\cƖ2kZ,c|(3ïo\N>>ݬlkA-{f[xk0(@4+ R_s =&Kd./|IuZyy#oh?Pkɥ2j "U]xtk#9 :2m:ytY(FSG&"LtwQ#b\ t7C/-z\֝ 8Eo$U;6^5{0SMQ!*Xᘆ~hV7X}F|fv'Y\nQ1 i{^7s/O&F%)3+ζ%H"`Pd%0jTo9nD>T:8(ܕf[Q%(!=X#i(.wgScOmml$`'lS&)3w[Y"'G6EOsZ㧁;ns&fUjU/F:cFk;>Kj)LɇiSGFQ;Iشl:ܻ$xǨp72r)3݆#@-a1IXu# #.l~"Aޱ4]\UÖ́ii1.ov nڹ7-CcUT'̬-oCv4pUT-vmum͚8y Nѿ)5v5Ɗ;l}7r#BTJUyAU7F%'g@>iʥH܍xxBz\e6 ,E@[{ivJh7 ^.-o3F<ɳ7F4&-3xFQ_|m,8v̝R޳meeTzw#ߠ) - >xSkk| ByƼjf\KG𛚗Myt#X.J!E 9AG/) L:emG43]忋L_/JO=O0ݱIύHykiA<ܠ P@D bZ%ctz,%Ƹ HQGCK^^0fLyQQDΟ윰Ŋ *HĆSޯ>ىVIao400,_QVlW_L먻~op[ܪ=Zݺ c~Zm Xkjߗm<~.ZmڐlqeoM <.9~E rW$ o \-&F 0bp+}YrTIv N^~lХjAAIT:Se= >&݆6j4M%0 ܚ"O`mzxZh.s臓i_R=q~눎/. tqӐSteͭ_=r'aM]`2xH$%h ['[_M~s=70ɢ# hQDFXMٕ!lEՖb<{ys9,ĩثm?$dwT4ŗr_d'v8ɛ/)w #wڎʞжPUpn£*e`52Yx}kQ!ONܯf{?{b9)$ 鵬bT Hϼ xFSp?Ú+]6 Zz͂Ī/0RS|J/cj1(]\yec(xRPc'/s|m*B^k稳-Un܈S3@Pmsn}Q(h쭖B]cD+z㢝s+xGUh/UΧ9gER>z.ZV)􍰗!SGdΰEt_S4QfQ:)n]é${Z1}@Gm)ZO1`g=.{pY Fz\i{ XuO{'0F54/F!2Ix38yWV- '4J0UJr>S_ Gc/mZ~)󪰬!m#@^Vpԭ{qX_<8eKxW*C:)PAv}dzZ 'őŐSjPZxraLa>90-Ф*/fW40QaCUOrڍY9u&.uuxĕmק^rq.B_wA0f:ȝuE5#˛92X[mNRԋ'h+ąjLCϣJy꼰? Jos9 n0H_Ȁs\DM4ѝ/YRx6O/2u;![#6~^A^n}нZZV@ooOt4KyjA&?/]\׍6 ]ېA6T@]$}FU^AںdV;N|~}z}C= ծ3\#SӾ3-3~QT2qW(TzqV"VаIܿa~p6TY=X=I&iB5f-}ɳז끧ЄaT)%~寞2%GYӧVX}޶ p]ڶ{Q4:DHljPk&aޢ9Ao3BJ-Ɔ޼S|к\Vإl0BR[h6=t8`] 9&H5R>u)w:WuȃhSk-k&w y {^H+B%Stm * ݦz*|O_kJcz$y{CKWL|Ɉ.L yhqLe'߯!« "FBd AzA~׼2 j@QDB,ZPxәc2nyn[* v4@l.kVO'1FY{ϰ//:?nhyt߉ ELW[_Q<:m"L5A0le+m@RAbϬ<;M2ROh57vrz}j~x%0rF#C4lW4I>A"x pؒT ({6ϙj$$`<0|B@K)((oxJd~{,hBe1vtǯE~ ~ w_L D >@05?&7{rBLٳe%6|!| jɧuCQ1{ut_2Lhٹb oP$|)x-W;:ئ 2#S[rC΀,aߏ# lJnk[[3ɨ^4 S ,rapa9Z C>F%[ vY}OC,ӈp!06X`P+,Mlez-AT9kNbV g_?]w c:6WCWxzhpVtG֊*֏+) |EU8cx}?ɰyV(?JSRX_d}Clӏ>Lfj6ĬJ KZ=43# G7W9hKͬj`wWcQ͋VEaftGz}{uj9wڬ wdE/l{fq":4]B+/ i`aGLADX. _m6/*bB e_2۫N|\r 1ij]1X-L8cFق5id?#~O]R0nΨ M3srTeV]fZs+5(񥇌h2Y v!W9iZYzWREsw3d?; ƄYS싖rDH%KNt&\y^:aw;,Y(_l]%no?}yGBbD )@ l yz0pF1 PcA *r;)XZHDzy>{Qϡ}ar,iR32huv\o8=^ شd)BVUmw|=J_hrC]\EJ1FX+ߓZ9D6>Dm+(_Ԯ%iFf(wʩqBIZU!הjpﱐC\h1~m,oj(בr>W2)l%0YQG-lQJX^vY9%~7']xɊ]i̛QjoTԫvV{|H]1Ý͸ $;WJ}0kYk"Q_=G?5gs.œb9ɴr?k5+v;O e  =!tK۞7h>=HNQClx!e\aPOX)wG j$rqJP?ՌN@v^'v"2q/3v8h7U oaS9:؈mn_O(Q"Ĥ_#5Rs:9KѦR͖4s?.ۊ-C0mK3V5doZap҇O[.b̻ۢjc&U='i? t6rw}Pވ761C.+2䋍wJ> R/Ԧf``XE'!1 ?&=apM{UDvTѻdEs+WbCGCH&6 I3>ݽQ pnlue޸{_ft&XbVZ fA&ruͲt̀wWoSٶ( U~NԌ[;@]]4=|+c x"#"|&0t6B{P8cE#gDPxu*bcPT QPe)gaяyè:YQՖ:Hhٿi5VM&~W3;R#r#S8OZ%oGͻg_f ledL^ ̼KV=+2#j)8ш?VRF4[*겲,śC -v%Mƌ]ԡ E=(ӏR[6BR.ݼ:gHH RL G?YzЮbmCQMUȫnԺ\|20M"A<݃,hHyJ'WSEvbWpTwR1`VrRo'пmqI;5f+_$y9ZZ5ݚRx:eZchuѱ^z(_T+{n,寱ѿ ?xԺR:Թ4, $#GB bNĺ཭jKxP;Wv-н`?Q~Q]N78V3x{Q+cwm Ft@uvƝűz/%o9/rcm,ZKrG×˞i;m]%A!?&յ{=F?E:)&$~G(Y<$UgbE] c %Π><;ʟ8~ѷf|ߤ6i5zPTdz+_d8*亂}#]\^ >4{"`-) .x9?=-2f/P.3yj 6xIR[uh<)1_#tőĠɛy>qE\!7{Xv;ym| Gzw>*]epKOupQ#gv4SoY:2mX-G((wKqZE\ /o |!`D^ܷ:O̠>E[~16U!"ރ?lezW\v|ӭ?WRc<*~+U~PNKa:Ū'tI5|&\TJU)pSxra'L'~W/ ~(߉Ka5YBC]\;> 覟r{.Ŋ' 8;{*x ӟbO/Ҕ |V۱{9;84RiA #-5z~p%Uꛡ0dģ6 ">F}'&2LnO-7#6!.OmᏊ"6лnKICC73ǘ|v9P7 K`PؕXR}eI$NV^7JrO?eg6Az۱njȼ 'm4EP7~)bL~[#T69{3,w'qYNـ`EbE靷rM:os~[WMa%'ZntVR ;hKhz1IE;9͒YLo>sZ޳ GHk8(7eba[<pEqR(O{lrgI.&ӓw4W%>"m^3VՄI(x׊)vԅR[F_qGF5Y (~Ҹuvj3'Kۈk p1] Hl&S*VώZi0a\pMbM lD̡2&ERχ18v0D.$G{:UUOf?r[|ˈ5Y{a6x9-ǹFV`ۏ=ި8jaݒF qRE"["2{g۶yOm$Hғғ:Y+ߡ')u~D?*S x4wd̲diM2xiS> i,QS^J%Dw(;njڨ@WtH0C-jv;Z4Wx߿ _S<"?P3yAZi#I[vI7r~< mYIw 0ʫ^4 sEm-O}_y5G:;jo^,v=uf.{S&iq @0t<'gl;h>V5P^48<}yX];Mzb$Q}n?hƒ Uܬ}5,Chߋ1c#|Cy߼9 OGQWۏVhٌn K9h+ə'7L-~ŴHEEb"ep4\OB$\!n-ZjojaXmt52 // u:n.''f+.x Xe4]J"yFt2+&?,V9NCw1f`xY*/r~<VV`^E f4A}|Y.=џHXqL^bM^P{v[LYO 5)_@ヌB_: BW#k?epSdS^̏S˧ҫU3CUY̛~<)Q]#T@׃AEu]7`r2ax""9>"}p9݋aRo+SwjO O-8lƣSL&.3̎>n :z~݇KwsO@yxE@4a7|? !:n~']FK3/<=pܕ}eDOPΰS3xPO0Jو6O莆p]:p"v=Eod Y^v~3Vww>M͉}T;a?M >697{y$M@\EdE"?8B`T'@f< 2HuRTt}YOggSDž|l W SQd^8wɈ@CM7 L"\[X5Q0 L`б>eJ]`7t9a6GQ}=~ ![ᦒ}W,{giӲo1lyۯ秼1*?!\'rmN,ՑU f:P5ζ`[н.}#R<ܚ)G9~zaiN,@9塕ŏl)J7-?MWK?7{7vMD#iz teHjzMRMN}>8{k~HqL~\aki5]>{΋_-φ,rda9RB)_`Aqb`q\:ӻ6?Q Fd6WNGywۡ3VZp6O=GBvd޸{۽<Ρ h\ \V'݆bkroW> @Tq:wyoKQO͂W3sMϿwgFd | ,` mlwGQjf \_clo_jHag|YNOveFY.Qέ*_ HWcjNŇ)\ -71^PK; d}PK *Td. __MACOSX/Sounds/xItemTeleporter/._DSTELPRT.oggUT dadaeux c`cg`b`MLVVP'1001Ϙ@p :4%Pq\ĂT> +(/KKKNɫ [Ģļ̼TV_;EKmqV$K]Cxey IǠz? `>""<)حjھ/?9)TS[Lǽƽ SB C&BMB-SσϮWg9IZEcF|ϐT xCoU6TGwՔJmWS) c>V׬eyK>t̯{~7?QG'Eaf@wXB?~C KMD,'AA , ~_?ځ(:ŏwq lϦv 4RsC@ts$z[6@,}"oȃ8kl({-kݯx}o\{{rbv|z6NmQ"i/;0xVSW$y i].wZAI =-I= }ڻJJI#0s K|Q/B3` Ǯk,}w̘SRX~P FU|ІmDREUDL퍪[@8V,ԅ,I>Zh(>d'QAGa~=u$|ly::<c@8,뜊k Ȧ*I8Z)9|+,^FvpxbQu727&eO|_ːĎ#vRD;ȧހ^; Xvgї疥5w>E_͕֌JԹE:c,^@E]ϱCl4cJ \ztYӀ!ו7cۛL,@^beh/7:?`} g-џ;T:qX`Ա)+"_@bUK¶|-ooBV߄kJ99x;DepTii,6Τ"u(jjeJ*7r&k Y)PS !!(OIHRK!{qW3JXUrb7,khh^8 )ve0XS[W(S dxډ6xT54!T$R 1`%$ra}s ku+7uy #,pX8:p5 )9Z? Wc"!mmȕ[P7¸a00F˜bʘ zVU$yAдWxiuufp#ܞ`:Te/Jrĭ"Fԩ|.8+QV4z"WNg{Ym5F.{2),ٖ Yy͋ʳ|"(hP5zfK52|ٗhac7LJ=rAkrZ7׍Nm7=6 yCޜ%Q̰.v ;pr:}o_ilۚ\ CI6.V]l[ _J>u=_5H]Ϥc6YiҡixuΠ`PJPxv%1:zbCu]`o\K5b8SEq@Ȝ8GaM\%҆Hd$8/ouu$3XahX{Bnr}GR<huRՠb{b0˅ʜvI~ʷWamw?4 |S`#0%!n,S;J)k91Gm{3_DĘ2orI>QE:Fn[Q\݈e#7/o)v|B>,Pх0JtTo`i=iGp7Q9fyXPE̋z oG!۷_ B"\<8Íq@p*KyP|e@Vy x('gmg,j9,S}-;Wl>]i%J|b 3SOvڲ-=5<剴`uxׄE%TMaTPS 3&KRx =EZ, cW{FS7aWn3 ,)1K)!#G{(,.Ċ DSƼ1J}.o̲nmp> p=^]ƕnȢ ODaǗ΄:ג7N'4c}`uNϛ"jwp}߄>f eM|-O[;+F6emwKCr$GLɥǴYZG2XeGSV:7Z͜0|xH:UP>1{*:ޝl~jSYhn9vF9p X;7Ϋ[[!8:I3D-jq) "l+X\f+:L1"@zOӊ3z\hzFX9~?o]B~wR<[3zZ׳Hk̏ʌ/l۞ޖuvҍt79"];7mr}f5+"4?9tcqOg@@W{}TrF1ii"Sj;N6k~v mp{[090?~(kE4_h+$O u6I@fM)&KKZ 氜ɓڌt[۞d%nasjK`@K5}|U?t(9XJZb̯ [_ -u8.}:w dA]C_^dсv"vYXJtyKmmbb =EaeT1ƗId򎫮HC@:JFȓ:cNJv#g_1U$Yc @F@ o{rm Ԗ9v6e!brJ^dO\٩/}&9?ce~M6AK&-;BO0zI++;PBS.l%큩ǂTXuey(|pB;>dx!Ї6(k8b2\c}'dN9)*U[ZNm'fo_3?wH:k8!/O8+~WGkE˿Q;b`7{~)n5h4Ґɶ!0߱TZ8O?wXB.?O+a?eyk6RcE9ÜS_Ìe0Ҫ>gY/dJ"+pD*]Mo Ls?8+QRSGux.Pta`5ղ) bC"͹>3)g8:Gkajz_>^&T077Xp9G/{5ʖi-: _Tٙ1Cі<ERYU<^ik@п(<k4e$z=Uػ$~*jɎ#Dm3opVSO&6X6OYNaq^m!\`3sF~~I3PdCqV7RɀK_@ZGh_kg=o5^ c9O (" /}:q֫qo~ՠL0LL$z\؏X=Dbbʗ ~ĈQ?$yIz^ʕ48w7Dſ #t0{>;/6\{ SjS=\ [tw5Ph=&:m(hj`ֽ#wW(所p7 ip"CoTlQtvae![PJs6PR !Lh tI~}JƼ(l2js)> (1Ll%ǧk^tk3fh)V4]VtM1@Xj*42ƙ4 0\]4R~JKW$/-K]<ΉZ z1lDZ>_g OL}uMں3[ǫ.f?|&˲Qpj=5k$)y-*S-9"RzrV!DK3Bj&'Bb+;pT nĴy}x,}ozx0UvZRb&-/hl :;{& jaN) НgOKSjo=ÐG[/Ng !X>|)ckǜEXiw3=X٨,EoA9{*8#]Ï>[E`6zL@VXb]=lWBSpE"`wA<6HK˾o)1ֲ~8RgYw[$65gc-KO$Hj2K>Yo}פM4Hp*m=4R|2!Qi7nFWY3g! ߺ BqAPHKkxOA@;3atTVaiϫ8p2D,3qTVRg?ncV)|jM:pюw#K#1ݑn6  .A3lW97h~qI NN/?B&^. "EN@j~鞻0Ϙj{=7OHY)0+j5>0Xxl0s{MtǯLԙk;q?reǓL&hي OulnJN`˱9 EI|hxI) 9nK4%}bb2mN߉#@r9l0G!`>+YeyRRbxV  2 t!O 0@a ~Y`NVqlV,C)iz|EɅJx ⠹o^lY OaӃ3v _'W#\=c1t=ֱ0پ22jieLeMI!j%ѿ:ͅ&_8A |QiO/V&kxiU޻ޏܹnIɻ M]3Փm5seCjgۄu?h*a, F=s` >1_<>u=jH'4 ͳ~&9e& /zDe]c\ <|NX {bxF==@irÆ9ou]wWtӮ hrZ8Pz"P|d6Iقh!Du|pQd cnB 6&9HLφ67>.&z?W\yLFH(GpA7 75ұ{+ȕδׂm̓EK,8_YnG~ȫ9X\Gu<ױu C Y#A|Q~}@FY@v, r@y{Z ->s!' -Q==9QTU c7q=P=`O>A%1=uذ" :D0z@ϩfh0sp ִ~Lm115Ccbh]nx3*Ɯ m (>7An&:n`2bIDO擂nK@u! yH.XZ^F{T1k3??^kFC;(娣=+/[m*Q?7X4,ohq/[PB9CU+Lo|w׈` -#6+9],΍K@k 9뾖눾zwuVLfy|`ڣ c"n U?_XCzY7L @z3aYHD q.>Pv">Yvix L~޲]JUX 萗R;EKAl$tk;/ 11R4Σ:$J2t/>\m זѢ%)M2}c(`_m}&o<}Q"\vJ9.V|!sWNܴ7M^qšo* e7ߝ9z@¨BS=Ygf381GQLwʽcK; @㭭1N_-/}j>,gm ʺ3nɱ8jmaQAM {|>hUАFR8ѩώoTIZ]ʚg0QNu~/pC~ 6J~Hqȁ}$<ūhIj^jӪ{+:zmho,Ό QzC]v*`IJI9~oP1RAA&{GdtD`e}upWކđ?}?#5e@ `zz ɕBwOe]ij)}geVí]*j5K+< %u{ J%z@mF`ch'ʄ_0/_+'pp,`bOčwh2_ |y$l;re3xsVT+np wM̛tf.F0:,C'ܹ]ƌ/?+:t+WL$l'y:piЩvq OͦIӤA &&e{a0z@i B`7R#wGsV9FVtQo_(e{ٶ吐}7Y} $&P~?37}"48R"ېut ظI X䪯\履ƧUy d Ťo &< ߢ}Z|oH6,c*o\*EeQ^3|1Sg1gU ĕ/gnaM$uߴCWឍ&0C㰤);Ǐ^eOO)WН~6}0RPH:"[<쫻l%jE$-JJ" z\y컈ʍ%"ud-,)D<*( 5՗)wAaxxÙO+r_Qߞ7i} ʶ 9?#F|g\mS;OԮfag8k3]vRuuo9H#Cnm'!MHNs_ Ckjf6+׵`gM#,kG7O׋j8\ZM+8a2Y 0Bb`֮3Y\LA"8+=g,}9")Pein-C~ k~ZުoqA`:v햏I0 )Z`P7ø=v5w #S˝,T=/-$yv]A9jfmgGXoLb2#X`2X-=8ML6|w vPLo 4T=X^'n4{Thܦ %}v.HSNLEQźd盰;O:zmyt7!WӶGW+G.]$0r_%uY!fFAF#GYRւ- j?kifO]qCC?Mfwn EZ~5ycʴJDYA){Szv(ҽBXB\*n~_MѦ%`c }gl8l`Sw/[[5inV=[ ̞qfrz֚sve*]]j/%dlT>6?Tv~4+<hHvsW%Kx6LQ0.oZٹ̅>r21=zg{ 1&/ܴRѕ)r"gc;7MSD!`<{*8P3z==XSߔ ]Gs^bqҷ7/SKAbAqOme\MQ v$_ϱ;_x=1ֱbecagni ;gkmokmgE eɾCGo{^s3wos#!%m|ɠٲ:3OAy@EKòF3P통o5@;Iْ$qPϒD|-?y'dfi奦dxsꬅ ATJ3>^r(}b//1TXP|yR,Rub_gضmVCX*%jIV{qe<@A, d.Hl"shyzďY`m}9Տ˧krpn5 י%F[GEOW߻%Uy8P aې zs,z^*>D=;;mPb\N lm9}[ !t2X͹{כOn-3d~̉kLwXk_یgX |ޅ%llRС %2Pл8ptryܼ>Kj<2b\O<)*G`3hж̍MTՈOa@opF!9?}; / ʷ"'WWq]B,<[du4.g"=3 Q{ ji\fr=exByF}&`Ds,AoT<~ .zĻl 퐟+(E/2c~Ț,3X*Q@ɉ6R/u*v^o$>> NNk7QGЖBU ._£}As:cUgv`E3>u/h5p$,ˆOolc{%tuA>[p}Yj!g=EЕ-Pģ;ĀGwg""_I)+t:~`UYHdM r"htbRmyQQma[RZ@u<SQeGT6ᓦ;w}>%gH- 7^<=F0]DHI 'Ô8 1z\EhX]"GVa1%V[6ӏ'Zhɟ=C޶QTSO'ǃ+'] 7Ryno"ٻH`JSH]t& stzRxơ5x/YwP:c&Ȗsx53CxtFpDGytX:+,I+B1YdfcSV)p ңt}'v*)(OR )ѿ(o9-t\#d^]|J@-/g|5I%kbz'$dZNmۂ2kHd U!}3TGgԑ_I<9@ I146V9i(Uk>]1iy,tuQIZ&\ecfcGCQ_QS*ߛ^9{IL!MARQ8Η\qW͌N{\6BU^?xe՜-sd&?hh/teCX2S2^GWYPzR6nRu)YuKc=TR9+:Bת2_w" )͢.oG:z]ӟ]$/!q\Ә{p (_JӨ Bc~o-V]c)R{ݧG4w4,iHzϬ5XܯU9|ւP)qFs _lb;Z&"&;5}h qk/)?]$L~6]$p?'?$(8TՆj4hݒ06`xn0>>T0:& UrfJ) լƅpi|^Y~~$ۨ0H M[_7*xBOb#'̱d^|R ?<1: lEyyYfZ?, Huf3|l )7ogc23UN=T/C\"@$HXM>=NLm@ѳ>8ЙlUKC4 hs[gVd=7Μx5 HߠhNωimq/r }LyỸ)~WVͱMǕvdҐ kO_G>eŜم&,{1!c9E!C5%yi]LWyD7rM]:w򡃻׻\vj1p.yByIּxZĄvHK!yTD授lk>=eب=2΄TnwԤobWa-lI]>>3VcOgfݽ3 Y{E ]ԗbm1:$C8iC1?^kT>ڥRL7jn(CV3`ǥZe+ zɰ tN#N猗5 Z/m~h>H8wd_.&ʟ yWkǺF\vߘh-ܛq& l2>tSQś//^kfʸ~%Za;6@GHl_64sΰpQӋKl(g\$ʌ=Ȳ?da- -Z6x|$4|Z=fc^):YA˛<_ڪT <+b=5ݷfA 2v79DBD?gQUdh-q!X+ꋇYX#{dRn7~̈́6`Tw?n%wd̐; Fk>ePڡ;xK̸|3pvBjȭ ?Yy-ivu"k&9.~7ßJ%m 4 2{ց~tMz˟!D76ms\T;`Sb*o;qu7[Ýk6x{{wb7lR?^: WBa'MP0%aB}: pqeJHzV 4@5 95;qvہ1Ok粃x?,d,C@֞kQj\=X¨VD Gt[ʯ7.rՆܪ;]VW2 0 N>nʂhem٫mq=*1E#jV[/!T;GgRs[&sceL^es.P ndԈRL$=޵)0^`V 7 8P \oub,c#ޥ웾x'}̙@" :)WsX"7bL>O_)>4~>z v!p~xgQcpCE#枟DI w0VK靡*d\kk,\ n\G^kFAJOkՀA/;>PCSo38 Kut٨`Ʋv:a7C[~{µ = 1ir)?Y'7K@sjoi֯gӅ[c-i6u i_:(Ht4ݥ%-1C !tJJ ̀t !1t 0swiǽNYk E=T*2xH&V @d+X EWWv;DKn ^ :za'[yvKnE/'Z'<"u"w]8eT_{p.X5؋zQe ~q&~F(Ϥ I÷ Wa9j)#y@Q6Gm6qu>[o>@V2YKMl?XA8ٿvN ]"~J P.'&1M]u Ht4B ‚BG;c4uUsN[@<ת./BY_rӄsfP/o_2t͒\tu b{c`xQ8^cJa̜Jk$OZ/ }>[IT@A,!#=9-0p7Q%XNaKЙ mW:YY`N&T$f;*\Il"RS-g!Dw3m&µN{Aoh7+^ךn!8V'CdgR+]ˇhXGqc}=wu2<,21p,nbF^}JA y#DQRCg9 ".jhh}f3k IC[`>,WhO B b23\%[gN!C~q%qȥI]&1B^@'Zg6+nF:]$ZpE1bf0'FDjrbFe<2&Йs[[p C'@:qi~%3QNK/83N{ۅvLmdH P.Ssfg Ͻ}PxiKyuy3 ųJF{ m347M%&]6x[ʋ0=2I)w%'`E)U(R)G4>qf;)p]|/#賰 /{yzYUu]'{8zd搮ZfhaEQВ g!B݆xZ/.O@=>k(C^,2l#zCE&ҲZR[2OZX&.988q2y:pMg~Ĭ ԁ:CDAW:Ц=StB5HmZ׽kf&n)W7oGehcO#~Cz2_k}ѻ^nE{!*~S}\l>ݰwmbu~)cqx38&8id3O{oH1lE9ܳvM-ҠXw(j嫜Kuxgk -ͫ.5"8!i R$Rڠrb\O.[qF]Y@5†i_ +#5D@/b$c֔3lٲE/*TtD'E 88rɛOTUvZ7bZ6B>ړKMzFL<;&O5?ߊ̐VN!] ?i[)Ȟiޟ&JM4l{9V"[Ct#nԈ]r2 $$_?r((f@mM1 ;bXGtB<'ෳ,V:w; [L#Z5&o!w֒FE.eԞ~k:' ^"Lb^jUcܔl YL41,՝0w^+cx :f; v!Z8@&wR-puM .z(45kfV r] \b*!^WX^8< =)?pC0^8D!6WoZ#?uV nѝrqѝz4`QӯY<:<֧kO˕\Ex OZW\"dH*y9w15-P,zkL45kk2Hcm:c({ƱƼI};I fX/W?.ީ ?FuDȿrn5 -;} 8L .ʺQ:S O-FD=xSIIhq.Co)V41ŇP;+۟]nj~|yԕlF1jR_J|-~3E΋7Zy%# WdQ 4h<-_TS'^-> ,Rwx D/5ڟvm]H&;絢lT3+ o&ة:3~{ r֙a>OFG~C^.6x8νc L+tO.ߘL׉P[HXL]sy-UbMK,:xE[oeٯTQ2^O8zB` 裉'1dFb7D@55 }FÞ;%VNRQ+C^묾(ᰤF&!'\V8OW}}#aR4$UXAeѻ`ᕖ&&()[axR}}dRe{onuS<.b1㠟)$1BDKx%>2߿UL?x jVwBiŔb*1-6Ӌ4Bu޷c܀ $z!uͻ3n_^Oqi>s.4>O>^t'\;߬g[}&A&* WA|f88J+YKoRT݈0c56n&u")bOV5tî{T[¦",pmd_thZ1>^YrzY.]xEz’ud7{ٟb4t#pL&P\UŌCw:Vg$VQoVΚF S)(HjX8h7r2ݫ>l1\nݬʠI* >7~xET//&z_TJcB## z' ~a+)(ZnJ7]9sƼ0(aO\Y={sQ)C+d X1p}1lD1u$b@3ώq$4u KR};=/8.lZa@{J"P!1L-i2SpU-ɪYvW3FQ1< M$]TK,ist[|5e/xZu;PP|1մc=s+ɯ(VUͧXly=5dx5?+Z[q-.b[:YT-G|J3ob)x1#5P) ͛ֆbi&p5 ~ >幨 wr\tx|O&9sT11#$X?=󜷜Lc8f[2MW>FKZcD(%tIg{Բ\LȞCq=>||`>6ߊߚHF8STۻX@ LrU; le[\4u8o1>36XXE ^|KL\{b.8!:ٖ1I9kF,n%zOʷlML5W\[%`si-{q_.AgBXXRc1յ6|^7fvgm5JFw4]r+uQ<<&Vxw뒗I_Ic@.T>_cRDҖ`ݡ> cﲹ,;qYg"H{h3TD' "(3/v2ZRXΞ:ߜd\˝BNFaJ /տv6ow[_Q;~=jp]Ʒ!~t{'NkԔ:'v \ m2OYr?;z;0( o+ow(|#g#kMctsttxzDG 2V)pCK% |gIsZ^RYQlUUS <S'q6&! q=g1x$*&rt˱hB^ae2N_r)z ܄MkU)$6*I#fxuH[mmQVG9<Ρ^CA zٸ?jeQ x v xgdJU(ӾSu}Y\ni˸( uwo4(>0ъP`1hfkP|_ʶЕ% {8q>|ˀ?vGozM =+b5|Y86_ -X:dGz,8cFv6<H!<:N [+9w$4}&Cx9)z(5ҵ|ާrOzjYvȱd-_ ɚ萾ST4.- l##=5.nnHhrglej |qsJh iS^g W`!DC3|78ʳ@F:x+96Z3EAd":FT (.zmŠ3UfEA$gcgz'`*4BBN#ElM opԱ?v]i,֣O(|>z}R\xFHQA?D+ ,!r!*5QϙtrD*WzytZSbٕ hL p׵z+Y9ܱ J[K>^' Ɔ&">JpHJ(A9Z$v6Fhb/-V ?)o}$60uR(%Zӕk凜mAxWPrG}·Liӄ3FsEpD^_N?t (yV!A;2+5¶ml,@ʘL|5aST}[(-jA(bHg*6b8hLPn#;}M_i<ʧ^ A)/%≬?+!WJ]6_ ?2o$+o%2I kܪ:8~=z=woEokM.י7nTL:EQTDӳ4M|WFsm|8 %xr&gM!PY*4T߅nۜeӠ$V+ͤxUo!@/.Q> ^rW* e 6|jL%aQpա(HXc}I]#>e]=qd?zfpɗNte3I( ,d_֦$++PڍS$I̯ l6 6mo;Q4Ӽ6xС&Ql-ㄐph'-B2}_nFgچQg ?.!k~:{OQ/٭B6?Q#UhŸ6 W٘mKR`v+lUE)04u4 gȞJo?9Z>HM&n(4s^GP5zw-NMZ^hx]u/T^lN|pMRUW}gr\YDA5՚VTLE4 i8YS&cDt^Y4/f)!fC;4V)_L%/5n2ߩiƨNakď!|/щTT5>&mAna/([ ꭀǘzS3sXLr7/wO6[@{/f&/\P.Z.-PEfgVl Ou UEHL?UN_\?6)M)]\9W,8FGm-DA~500ۜ[-(@'\_Oih :eF4]lxӗ^^?(8w[45jj& p<*3~P_1TR2cu np֝ӥ[ZXH.40XN3XҰhB$_fE!IqQЃvXv$:Kp]yQCNe$S0?HX9$hR1[a_m]GY4}o%Ur_R)Ϡ/ՕSbn~LNJ]t?IU[ᅤ7ӤbkpϒKW>J F¥ zVA&yE1`156Ǎ!px;UFOZH[}WZ딿u>LfDj2t_˰FU17#~VrSjCzv|:nԂRam?͞{/X  ]` 2۽aҾ{dwl{ϯ 2a'#mD# ]Qv!=-QƯj i̻y7vNknh'zKgL˃ ӳ-/D$_ѸSov_'>yZۤd9n(5.ȰU@_Q͸Nغ̟֊=iݤqVCK?'oV]m#? nj¿QRW+ɒ!vIfg""y9 d8 0ʹ@L= L(uES bcTXvM~[˴:_TB5jQR5-5\~ڝ#rmq0,=TlY&}2J~pHYˍPҬ3cm9@Hw P4sC,D͈` ]"NB#=;!od+@BWO$,-}8ϲ-kv)ӀHbyDpSuϼӢYqeȲ* KzmgsݮnН$ -(~ aakEgWyhS~_?>{@Ht<齂f_&6\!5ْJFn 3),b'?ɩRL٢ [Qك= _Bfnwe1l#&M76Tw1)_67(WT\@ZPjV+&`NyQBEeq_k,m2TA_wl[ߗ3rW,esfq1VqCR:پ%c녍,ͳS(E㈎+d4+uy (wFD(؁* k:" FWWo;5֎Cp)hc\ylך 懆+#ăH,Z2V_նhmhpvsaޗq[#rZJgvȗ0\CzDu5v0(J(/T! "SMz\İ O_e5~xܑ\,rWc#8-618Gc ;?v?9Dxh8 u3Dm:bPɺ {sR\&KS\G~r: 0>[q~sPLɈJq /(-Kfz%Q U7 ׁQ>Mi_ps+>T6*5(G ūJP=ƨ4tKO':+/u6Eҽ.w.o?TjL?f3B1S7FVƦ6$s_H\Ⱦ.%`eaQUC35 C7=,ӀVó >Wn/q^ 0.g.nR#(WF)֬,povr)7w^یݷU QtȵqɍyRMq D"݌ $oSfq@=tj|uѨ#6{׳7T!i ~cUx}\n6ݰI1&6;#)gKA+l]E >FbD: KK |jjêun x%%[#5R3?Jm@Al9t澓 KZZ1=o@K_ 3-ـCMpjzEXe"tRѯ2R=6xV.?W[l. RM4>Qr1RAWLfdZb?~L8 nY_JGh[OWB'}"3c[_q+c7.dj+Z2֌jwyꂉ<ϵWʟ o99>Xp&{ɤ)k'JL pMD.S"G[onG8ٔlY=Yrv rg6cr^*OePę"R"*xgpDv)*Ņ@6ˤnŠu2Ar\]Wح_kr)m ψe(#VB;Hrvvd+SغM$1$aJǎucگI!S,bna}_m0,WU mi_Tթ٭紭2Yߧ>\IZAråH\eVL`C}?Nxx8:ǑGȹ4UeUMP9׫#I I^p#-$gdr5^OGEvBVs66) ʳ)OuE?]! Տ];ސ"]cD>XW($v<py:'8|ِW_2A.OFf7avšә8L*](QgUwcu5d.77ϘIa[< 3zIn3 KU퓗!KM!%ښ5ݻzcEbM2Kb$(6 1e`LA[{,0tu2ʨn>dO)5Q}XgsFL1ƼfH]'d@֮$v/cоj$/cdVpKAl d yġp֊z4{%Z˰cï܊T3 i+[|}PYEK¢C< _%$1 ySFQ2ǯ< =CӴ&v(+ѕEWLFP }EE5g{Q( rFWSlfUcu<ְj>Q|<اVxm.Pj6=mM-hM!x'KniĚf߾B2ѶYaJ?>}Mgz$noݻiX`YGTf-p(:eB6m"A3nUj;</rYNB\7g&U(k0 {=?W:/i{q:h}E>r| i:%HRezx)Ɠ'1RX]߾O'N=LPr;Pix9ռi||W觪[6 N#XȱORX[$J"IkGq8|!wѻ`p"nxU!j#&ޮ9:eBou7Y”=v8~hӡkW%}?u}:`[E/N?eE ",mt?KXMW$h^{Q_6 k$tt:i9L .U9߾Gh765Ժr_I_\?g&Gb\%D9ڻN ".Beyn 9'7gܩr4oH[I yR~pyy/mAt3mw rm%=m;7?,~ b&feT&&5ӿ`TX[Q&T0 ̀ HBbbJ {;Rӷ@cLCɯvD{l+b>|!/d:r}>$Nz U.n@4U Lyy-D5iQqMՆR DS1w4>Ÿ~`8<{nA @Ccd$ftdܳ7!MY")ᨄbT<岮܊RRuO!F{pTV"P*ouzLPXE3Ȣd5N1`X}MjiYRͷ#1|9}R ܦ9]nG{0iXg;҄A&j miKp ^;mT`tL*+M%/ǓoZP-:eBMC`kv4$7\Nw^5 !\tNh@]W93[e-Y>RVo<ɡ *mlUO5"5晪j_aUݏ+l"eZ+gsߝ?\BO˿_"w^Myv{bHw$T \=].OVrbG}Пkm*O(}O)ȉl5PʂHJ7gK^FK 'ҧFg;F*#Qߟ"Wk%TݰHȓ5D,eV~i7~pϳK?uM9,sy)JjwVqtDellR |=PQWN 辷DC{5Zv%/JX[4^jL2t:K*`W `4&vq{E9 N9Jzc+<.J=̬Aj"-Md3EIO/ : 2; ||-,+QUroܮ7Ͼ#z\rv)%h&惕΁:vIw$ߨB*բ+spz؟N5wڻ*}1꒰;rEI5E飼o=5Rg0JݶpyXC[GE}QE iDBQDR TTzDACn`azwzwZ9uw|q~f"ʸ`fn<(T'DN15r;* &!2kqꪎ(ϋٌbXor٬OK_!&#67VgOG$:GY AK=5gABO]'7oO:Chy͒ǏHN^8~Kb oAa"a/ TO5*/Di@ꁧ i?kc3yR4jN* m "ϧ@CܧNa.I!;?m[-(/hc%]jN5q{>Gu~NIoNb.ON5 ې!2ǻ0R'~zvm-z-UD @ 5a-RDCBJRnqGZloϴ[0Y<ʪy^!R^mjս5gOe5tLЩa{{QIͯ]8DT!~]^J">4Ey'AX^?1j)z}%@RH d=?7sބ+B/3Eke{[K|4kJ7&|`,9cCJQN3lT]}!|7 jV_D w!ǒ7ESPUp'Kنr_D#Hr<Lqzuz.2[LW\!qEQ>2U'z٣5ٻ>[w|.e:uHn"utYz7PXq)dޏG4bm*׽(f1gqSC*M񙅡}94$(zf*\hBГ^|žUPa҂aLb'QO>tnЎN}-.voxSԼ'g73 s]oؕfk 3(ˎG? v#yp_2-ǏLҺnl!sLŗiɢ{ Qg&#t\yȰ#Fc:ke5V[`hB9ͧ=r+:OiP|~w\Leam]1>\1.e, 4;LY,y<9ZE2$$%M&QbSn()>F?\c")ꌜ VJ%JG"o{?+'7D3'%i|8Ͽs$b/:f}j{vTF}z[JIb٥𘠨4Bm(w;>9Y -dO+#n ; v|4g 8_&*͙cjD1Ivo~s IkYcDIdsr:+ Ahlf3ƛԯV [/])T: < ^~Hb@2-H+n:-f3;pwOoE,6Sj-GNv\kkSɶF,oWx-M7TσJE&,H4£GOEl=t%vJ~S?ҁ^R>Nw̰)C@Œ׿u٬ù*q be]'dw7ovL f1"[إ V IҦsn/-UxDK^Z}ξt"-BJ} tLO~wۀKv,=-mxxkqcCʚcw5h%k2 uX/[>bmgqd/.R|wk`Eu&}׸SA mk{?;Q%,@i*BL Cۈ![QB$ߔ֪oqdT$-# %u1i<8"H VBxZY9a:_nüI (3 wW5\;mQ=FliW<58t"( g.DS`c> ,m=༵&׃\6OL:ge*F>pji,¿cxH8MGdożq̓W+#c&]xZXn%ٺZ3dK4WMoA ^)r@H''7Q؊0VSg[$_$uޑ|}Rj` ҉KSNI[ yc~~ S֔?X3Bt+OQdgofF +78G;NjƳH<ӈ[Lw}:MsquwBs L**ν<~u7*v#ãv; @msSrtڐTa'&'SܕT泭[z8V 3[mYGwE?jG煮ٙ8vej2Ø0w{=²;ArTG~o;4Ϧؐ=<[Ƅ4S#ꨃ~ g]I IxW>h,WkLjL*ܩk!sY=s<Ŗr-V֋奻9?^Z|ܜ`ϝ5dURG(-֚TKCj#'V|(#)^TLmלb}Nn"-U|H^4zxb?X~_&W]dFc7})Fs݀.Yڵ7'Ub5 %xز ?[Q cqFf"-y./.cSEX4)%y0J-,&W|$G߷f?2gtmZcێ柑=pُSDV&Ǡ (3m5û҂60mEX+.פ zf;6yc$Z18ߌqBlJk]¼G_]ĐfCSiSLȢ׹q0G7:Å]5Paڟ=3r 4#*pOȤKvz?8+q\Q*-]`Kxje~kg5=9iGw>H|uB ]~i7=xBqi$DY$_t ֢m<3 c?s*?}jMK qVjV0G&$?K}+`Y}SŁބ98ҝ=] Wz6%/8ݬ S2gYӵ<; Bݴ <0ۙ^f+-0N>Ѻd/ZC;i{_!W++O'X|d -r$l=*nFd`"OX3Wv$]b蟍yѼz,w&?}їd綂"r-GT}Q'iv #<cqWj -10QI 4br$] v7*(_u߬+\޲ioT 5&cT)*j99Ⱥ(Soƛfj6DX1v/\cƖ2kZ,c|(3ïo\N>>ݬlkA-{f[xk0(@4+ R_s =&Kd./|IuZyy#oh?Pkɥ2j "U]xtk#9 :2m:ytY(FSG&"LtwQ#b\ t7C/-z\֝ 8Eo$U;6^5{0SMQ!*Xᘆ~hV7X}F|fv'Y\nQ1 i{^7s/O&F%)3+ζ%H"`Pd%0jTo9nD>T:8(ܕf[Q%(!=X#i(.wgScOmml$`'lS&)3w[Y"'G6EOsZ㧁;ns&fUjU/F:cFk;>Kj)LɇiSGFQ;Iشl:ܻ$xǨp72r)3݆#@-a1IXu# #.l~"Aޱ4]\UÖ́ii1.ov nڹ7-CcUT'̬-oCv4pUT-vmum͚8y Nѿ)5v5Ɗ;l}7r#BTJUyAU7F%'g@>iʥH܍xxBz\e6 ,E@[{ivJh7 ^.-o3F<ɳ7F4&-3xFQ_|m,8v̝R޳meeTzw#ߠ) - >xSkk| ByƼjf\KG𛚗Myt#X.J!E 9AG/) L:emG43]忋L_/JO=O0ݱIύHykiA<ܠ P@D bZ%ctz,%Ƹ HQGCK^^0fLyQQDΟ윰Ŋ *HĆSޯ>ىVIao400,_QVlW_L먻~op[ܪ=Zݺ c~Zm Xkjߗm<~.ZmڐlqeoM <.9~E rW$ o \-&F 0bp+}YrTIv N^~lХjAAIT:Se= >&݆6j4M%0 ܚ"O`mzxZh.s臓i_R=q~눎/. tqӐSteͭ_=r'aM]`2xH$%h ['[_M~s=70ɢ# hQDFXMٕ!lEՖb<{ys9,ĩثm?$dwT4ŗr_d'v8ɛ/)w #wڎʞжPUpn£*e`52Yx}kQ!ONܯf{?{b9)$ 鵬bT Hϼ xFSp?Ú+]6 Zz͂Ī/0RS|J/cj1(]\yec(xRPc'/s|m*B^k稳-Un܈S3@Pmsn}Q(h쭖B]cD+z㢝s+xGUh/UΧ9gER>z.ZV)􍰗!SGdΰEt_S4QfQ:)n]é${Z1}@Gm)ZO1`g=.{pY Fz\i{ XuO{'0F54/F!2Ix38yWV- '4J0UJr>S_ Gc/mZ~)󪰬!m#@^Vpԭ{qX_<8eKxW*C:)PAv}dzZ 'őŐSjPZxraLa>90-Ф*/fW40QaCUOrڍY9u&.uuxĕmק^rq.B_wA0f:ȝuE5#˛92X[mNRԋ'h+ąjLCϣJy꼰? Jos9 n0H_Ȁs\DM4ѝ/YRx6O/2u;![#6~^A^n}нZZV@ooOt4KyjA&?/]\׍6 ]ېA6T@]$}FU^AںdV;N|~}z}C= ծ3\#SӾ3-3~QT2qW(TzqV"VаIܿa~p6TY=X=I&iB5f-}ɳז끧ЄaT)%~寞2%GYӧVX}޶ p]ڶ{Q4:DHljPk&aޢ9Ao3BJ-Ɔ޼S|к\Vإl0BR[h6=t8`] 9&H5R>u)w:WuȃhSk-k&w y {^H+B%Stm * ݦz*|O_kJcz$y{CKWL|Ɉ.L yhqLe'߯!« "FBd AzA~׼2 j@QDB,ZPxәc2nyn[* v4@l.kVO'1FY{ϰ//:?nhyt߉ ELW[_Q<:m"L5A0le+m@RAbϬ<;M2ROh57vrz}j~x%0rF#C4lW4I>A"x pؒT ({6ϙj$$`<0|B@K)((oxJd~{,hBe1vtǯE~ ~ w_L D >@05?&7{rBLٳe%6|!| jɧuCQ1{ut_2Lhٹb oP$|)x-W;:ئ 2#S[rC΀,aߏ# lJnk[[3ɨ^4 S ,rapa9Z C>F%[ vY}OC,ӈp!06X`P+,Mlez-AT9kNbV g_?]w c:6WCWxzhpVtG֊*֏+) |EU8cx}?ɰyV(?JSRX_d}Clӏ>Lfj6ĬJ KZ=43# G7W9hKͬj`wWcQ͋VEaftGz}{uj9wڬ wdE/l{fq":4]B+/ i`aGLADX. _m6/*bB e_2۫N|\r 1ij]1X-L8cFق5id?#~O]R0nΨ M3srTeV]fZs+5(񥇌h2Y v!W9iZYzWREsw3d?; ƄYS싖rDH%KNt&\y^:aw;,Y(_l]%no?}yGBbD )@ l yz0pF1 PcA *r;)XZHDzy>{Qϡ}ar,iR32huv\o8=^ شd)BVUmw|=J_hrC]\EJ1FX+ߓZ9D6>Dm+(_Ԯ%iFf(wʩqBIZU!הjpﱐC\h1~m,oj(בr>W2)l%0YQG-lQJX^vY9%~7']xɊ]i̛QjoTԫvV{|H]1Ý͸ $;WJ}0kYk"Q_=G?5gs.œb9ɴr?k5+v;O e  =!tK۞7h>=HNQClx!e\aPOX)wG j$rqJP?ՌN@v^'v"2q/3v8h7U oaS9:؈mn_O(Q"Ĥ_#5Rs:9KѦR͖4s?.ۊ-C0mK3V5doZap҇O[.b̻ۢjc&U='i? t6rw}Pވ761C.+2䋍wJ> R/Ԧf``XE'!1 ?&=apM{UDvTѻdEs+WbCGCH&6 I3>ݽQ pnlue޸{_ft&XbVZ fA&ruͲt̀wWoSٶ( U~NԌ[;@]]4=|+c x"#"|&0t6B{P8cE#gDPxu*bcPT QPe)gaяyè:YQՖ:Hhٿi5VM&~W3;R#r#S8OZ%oGͻg_f ledL^ ̼KV=+2#j)8ш?VRF4[*겲,śC -v%Mƌ]ԡ E=(ӏR[6BR.ݼ:gHH RL G?YzЮbmCQMUȫnԺ\|20M"A<݃,hHyJ'WSEvbWpTwR1`VrRo'пmqI;5f+_$y9ZZ5ݚRx:eZchuѱ^z(_T+{n,寱ѿ ?xԺR:Թ4, $#GB bNĺ཭jKxP;Wv-н`?Q~Q]N78V3x{Q+cwm Ft@uvƝűz/%o9/rcm,ZKrG×˞i;m]%A!?&յ{=F?E:)&$~G(Y<$UgbE] c %Π><;ʟ8~ѷf|ߤ6i5zPTdz+_d8*亂}#]\^ >4{"`-) .x9?=-2f/P.3yj 6xIR[uh<)1_#tőĠɛy>qE\!7{Xv;ym| Gzw>*]epKOupQ#gv4SoY:2mX-G((wKqZE\ /o |!`D^ܷ:O̠>E[~16U!"ރ?lezW\v|ӭ?WRc<*~+U~PNKa:Ū'tI5|&\TJU)pSxra'L'~W/ ~(߉Ka5YBC]\;> 覟r{.Ŋ' 8;{*x ӟbO/Ҕ |V۱{9;84RiA #-5z~p%Uꛡ0dģ6 ">F}'&2LnO-7#6!.OmᏊ"6лnKICC73ǘ|v9P7 K`PؕXR}eI$NV^7JrO?eg6Az۱njȼ 'm4EP7~)bL~[#T69{3,w'qYNـ`EbE靷rM:os~[WMa%'ZntVR ;hKhz1IE;9͒YLo>sZ޳ GHk8(7eba[<pEqR(O{lrgI.&ӓw4W%>"m^3VՄI(x׊)vԅR[F_qGF5Y (~Ҹuvj3'Kۈk p1] Hl&S*VώZi0a\pMbM lD̡2&ERχ18v0D.$G{:UUOf?r[|ˈ5Y{a6x9-ǹFV`ۏ=ި8jaݒF qRE"["2{g۶yOm$Hғғ:Y+ߡ')u~D?*S x4wd̲diM2xiS> i,QS^J%Dw(;njڨ@WtH0C-jv;Z4Wx߿ _S<"?P3yAZi#I[vI7r~< mYIw 0ʫ^4 sEm-O}_y5G:;jo^,v=uf.{S&iq @0t<'gl;h>V5P^48<}yX];Mzb$Q}n?hƒ Uܬ}5,Chߋ1c#|Cy߼9 OGQWۏVhٌn K9h+ə'7L-~ŴHEEb"ep4\OB$\!n-ZjojaXmt52 // u:n.''f+.x Xe4]J"yFt2+&?,V9NCw1f`xY*/r~<VV`^E f4A}|Y.=џHXqL^bM^P{v[LYO 5)_@ヌB_: BW#k?epSdS^̏S˧ҫU3CUY̛~<)Q]#T@׃AEu]7`r2ax""9>"}p9݋aRo+SwjO O-8lƣSL&.3̎>n :z~݇KwsO@yxE@4a7|? !:n~']FK3/<=pܕ}eDOPΰS3xPO0Jو6O莆p]:p"v=Eod Y^v~3Vww>M͉}T;a?M >697{y$M@\EdE"?8B`T'@f< 2HuRTt}YOggSDž|l W SQd^8wɈ@CM7 L"\[X5Q0 L`б>eJ]`7t9a6GQ}=~ ![ᦒ}W,{giӲo1lyۯ秼1*?!\'rmN,ՑU f:P5ζ`[н.}#R<ܚ)G9~zaiN,@9塕ŏl)J7-?MWK?7{7vMD#iz teHjzMRMN}>8{k~HqL~\aki5]>{΋_-φ,rda9RB)_`Aqb`q\:ӻ6?Q Fd6WNGywۡ3VZp6O=GBvd޸{۽<Ρ h\ \V'݆bkroW> @Tq:wyoKQO͂W3sMϿwgFd | ,` mlwGQjf \_clo_jHag|YNOveFY.Qέ*_ HWcjNŇ)\ -71^PK; d}PK *Td. __MACOSX/Sounds/xItemTeleporter/._DSTELPRT.oggUT dadaeux c`cg`b`MLVVP'1001Ϙ@p :4%Pq\ĂT> +(/KKKNɫ [Ģļ̼TV_;EKmqV$K]Cxey IǠz? `>""<)حjھ/?9)TS[Lǽƽ SB C&BMB-SσϮWg9IZEcF|ϐT xCoU6TGwՔJmWS) c>V׬eyK>t̯{~7?QG'Eaf@wXB?~C KMD,'AA , ~_?ځ(:ŏwq lϦv 4RsC@ts$z[6@,}"oȃ8kl({-kݯx}o\{{rbv|z6NmQ"i/;0xVSW$y i].wZAI =-I= }ڻJJI#0s K|Q/B3` Ǯk,}w̘SRX~P FU|ІmDREUDL퍪[@8V,ԅ,I>Zh(>d'QAGa~=u$|ly::<c@8,뜊k Ȧ*I8Z)9|+,^FvpxbQu727&eO|_ːĎ#vRD;ȧހ^; Xvgї疥5w>E_͕֌JԹE:c,^@E]ϱCl4cJ \ztYӀ!ו7cۛL,@^beh/7:?`} g-џ;T:qX`Ա)+"_@bUK¶|-ooBV߄kJ99x;DepTii,6Τ"u(jjeJ*7r&k Y)PS !!(OIHRK!{qW3JXUrb7,khh^8 )ve0XS[W(S dxډ6xT54!T$R 1`%$ra}s ku+7uy #,pX8:p5 )9Z? Wc"!mmȕ[P7¸a00F˜bʘ zVU$yAдWxiuufp#ܞ`:Te/Jrĭ"Fԩ|.8+QV4z"WNg{Ym5F.{2),ٖ Yy͋ʳ|"(hP5zfK52|ٗhac7LJ=rAkrZ7׍Nm7=6 yCޜ%Q̰.v ;pr:}o_ilۚ\ CI6.V]l[ _J>u=_5H]Ϥc6YiҡixuΠ`PJPxv%1:zbCu]`o\K5b8SEq@Ȝ8GaM\%҆Hd$8/ouu$3XahX{Bnr}GR<huRՠb{b0˅ʜvI~ʷWamw?4 |S`#0%!n,S;J)k91Gm{3_DĘ2orI>QE:Fn[Q\݈e#7/o)v|B>,Pх0JtTo`i=iGp7Q9fyXPE̋z oG!۷_ B"\<8Íq@p*KyP|e@Vy x('gmg,j9,S}-;Wl>]i%J|b 3SOvڲ-=5<剴`uxׄE%TMaTPS 3&KRx =EZ, cW{FS7aWn3 ,)1K)!#G{(,.Ċ DSƼ1J}.o̲nmp> p=^]ƕnȢ ODaǗ΄:ג7N'4c}`uNϛ"jwp}߄>f eM|-O[;+F6emwKCr$GLɥǴYZG2XeGSV:7Z͜0|xH:UP>1{*:ޝl~jSYhn9vF9p X;7Ϋ[[!8:I3D-jq) "l+X\f+:L1"@zOӊ3z\hzFX9~?o]B~wR<[3zZ׳Hk̏ʌ/l۞ޖuvҍt79"];7mr}f5+"4?9tcqOg@@W{}TrF1ii"Sj;N6k~v mp{[090?~(kE4_h+$O u6I@fM)&KKZ 氜ɓڌt[۞d%nasjK`@K5}|U?t(9XJZb̯ [_ -u8.}:w dA]C_^dсv"vYXJtyKmmbb =EaeT1ƗId򎫮HC@:JFȓ:cNJv#g_1U$Yc @F@ o{rm Ԗ9v6e!brJ^dO\٩/}&9?ce~M6AK&-;BO0zI++;PBS.l%큩ǂTXuey(|pB;>dx!Ї6(k8b2\c}'dN9)*U[ZNm'fo_3?wH:k8!/O8+~WGkE˿Q;b`7{~)n5h4Ґɶ!0߱TZ8O?wXB.?O+a?eyk6RcE9ÜS_Ìe0Ҫ>gY/dJ"+pD*]Mo Ls?8+QRSGux.Pta`5ղ) bC"͹>3)g8:Gkajz_>^&T077Xp9G/{5ʖi-: _Tٙ1Cі<ERYU<^ik@п(<k4e$z=Uػ$~*jɎ#Dm3opVSO&6X6OYNaq^m!\`3sF~~I3PdCqV7RɀK_@ZGh_kg=o5^ c9O (" /}:q֫qo~ՠL0LL$z\؏X=Dbbʗ ~ĈQ?$yIz^ʕ48w7Dſ #t0{>;/6\{ SjS=\ [tw5Ph=&:m(hj`ֽ#wW(所p7 ip"CoTlQtvae![PJs6PR !Lh tI~}JƼ(l2js)> (1Ll%ǧk^tk3fh)V4]VtM1@Xj*42ƙ4 0\]4R~JKW$/-K]<ΉZ z1lDZ>_g OL}uMں3[ǫ.f?|&˲Qpj=5k$)y-*S-9"RzrV!DK3Bj&'Bb+;pT nĴy}x,}ozx0UvZRb&-/hl :;{& jaN) НgOKSjo=ÐG[/Ng !X>|)ckǜEXiw3=X٨,EoA9{*8#]Ï>[E`6zL@VXb]=lWBSpE"`wA<6HK˾o)1ֲ~8RgYw[$65gc-KO$Hj2K>Yo}פM4Hp*m=4R|2!Qi7nFWY3g! ߺ BqAPHKkxOA@;3atTVaiϫ8p2D,3qTVRg?ncV)|jM:pюw#K#1ݑn6  .A3lW97h~qI NN/?B&^. "EN@j~鞻0Ϙj{=7OHY)0+j5>0Xxl0s{MtǯLԙk;q?reǓL&hي OulnJN`˱9 EI|hxI) 9nK4%}bb2mN߉#@r9l0G!`>+YeyRRbxV  2 t!O 0@a ~Y`NVqlV,C)iz|EɅJx ⠹o^lY OaӃ3v _'W#\=c1t=ֱ0پ22jieLeMI!j%ѿ:ͅ&_8A |QiO/V&kxiU޻ޏܹnIɻ M]3Փm5seCjgۄu?h*a, F=s` >1_<>u=jH'4 ͳ~&9e& /zDe]c\ <|NX {bxF==@irÆ9ou]wWtӮ hrZ8Pz"P|d6Iقh!Du|pQd cnB 6&9HLφ67>.&z?W\yLFH(GpA7 75ұ{+ȕδׂm̓EK,8_YnG~ȫ9X\Gu<ױu C Y#A|Q~}@FY@v, r@y{Z ->s!' -Q==9QTU c7q=P=`O>A%1=uذ" :D0z@ϩfh0sp ִ~Lm115Ccbh]nx3*Ɯ m (>7An&:n`2bIDO擂nK@u! yH.XZ^F{T1k3??^kFC;(娣=+/[m*Q?7X4,ohq/[PB9CU+Lo|w׈` -#6+9],΍K@k 9뾖눾zwuVLfy|`ڣ c"n U?_XCzY7L @z3aYHD q.>Pv">Yvix L~޲]JUX 萗R;EKAl$tk;/ 11R4Σ:$J2t/>\m זѢ%)M2}c(`_m}&o<}Q"\vJ9.V|!sWNܴ7M^qšo* e7ߝ9z@¨BS=Ygf381GQLwʽcK; @㭭1N_-/}j>,gm ʺ3nɱ8jmaQAM {|>hUАFR8ѩώoTIZ]ʚg0QNu~/pC~ 6J~Hqȁ}$<ūhIj^jӪ{+:zmho,Ό QzC]v*`IJI9~oP1RAA&{GdtD`e}upWކđ?}?#5e@ `zz ɕBwOe]ij)}geVí]*j5K+< %u{ J%z@mF`ch'ʄ_0/_+'pp,`bOčwh2_ |y$l;re3xsVT+np wM̛tf.F0:,C'ܹ]ƌ/?+:t+WL$l'y:piЩvq OͦIӤA &&e{a0z@i B`7R#wGsV9FVtQo_(e{ٶ吐}7Y} $&P~?37}"48R"ېut ظI X䪯\履ƧUy d Ťo &< ߢ}Z|oH6,c*o\*EeQ^3|1Sg1gU ĕ/gnaM$uߴCWឍ&0C㰤);Ǐ^eOO)WН~6}0RPH:"[<쫻l%jE$-JJ" z\y컈ʍ%"ud-,)D<*( 5՗)wAaxxÙO+r_Qߞ7i} ʶ 9?#F|g\mS;OԮfag8k3]vRuuo9H#Cnm'!MHNs_ Ckjf6+׵`gM#,kG7O׋j8\ZM+8a2Y 0Bb`֮3Y\LA"8+=g,}9")Pein-C~ k~ZުoqA`:v햏I0 )Z`P7ø=v5w #S˝,T=/-$yv]A9jfmgGXoLb2#X`2X-=8ML6|w vPLo 4T=X^'n4{Thܦ %}v.HSNLEQźd盰;O:zmyt7!WӶGW+G.]$0r_%uY!fFAF#GYRւ- j?kifO]qCC?Mfwn EZ~5ycʴJDYA){Szv(ҽBXB\*n~_MѦ%`c }gl8l`Sw/[[5inV=[ ̞qfrz֚sve*]]j/%dlT>6?Tv~4+<hHvsW%Kx6LQ0.oZٹ̅>r21=zg{ 1&/ܴRѕ)r"gc;7MSD!`<{*8P3z==XSߔ ]Gs^bqҷ7/SKAbAqOme\MQ v$_ϱ;_x=1ֱbecagni ;gkmokmgE eɾCGo{^s3wos#!%m|ɠٲ:3OAy@EKòF3P통o5@;Iْ$qPϒD|-?y'dfi奦dxsꬅ ATJ3>^r(}b//1TXP|yR,Rub_gضmVCX*%jIV{qe<@A, d.Hl"shyzďY`m}9Տ˧krpn5 י%F[GEOW߻%Uy8P aې zs,z^*>D=;;mPb\N lm9}[ !t2X͹{כOn-3d~̉kLwXk_یgX |ޅ%llRС %2Pл8ptryܼ>Kj<2b\O<)*G`3hж̍MTՈOa@opF!9?}; / ʷ"'WWq]B,<[du4.g"=3 Q{ ji\fr=exByF}&`Ds,AoT<~ .zĻl 퐟+(E/2c~Ț,3X*Q@ɉ6R/u*v^o$>> NNk7QGЖBU ._£}As:cUgv`E3>u/h5p$,ˆOolc{%tuA>[p}Yj!g=EЕ-Pģ;ĀGwg""_I)+t:~`UYHdM r"htbRmyQQma[RZ@u<SQeGT6ᓦ;w}>%gH- 7^<=F0]DHI 'Ô8 1z\EhX]"GVa1%V[6ӏ'Zhɟ=C޶QTSO'ǃ+'] 7Ryno"ٻH`JSH]t& stzRxơ5x/YwP:c&Ȗsx53CxtFpDGytX:+,I+B1YdfcSV)p ңt}'v*)(OR )ѿ(o9-t\#d^]|J@-/g|5I%kbz'$dZNmۂ2kHd U!}3TGgԑ_I<9@ I146V9i(Uk>]1iy,tuQIZ&\ecfcGCQ_QS*ߛ^9{IL!MARQ8Η\qW͌N{\6BU^?xe՜-sd&?hh/teCX2S2^GWYPzR6nRu)YuKc=TR9+:Bת2_w" )͢.oG:z]ӟ]$/!q\Ә{p (_JӨ Bc~o-V]c)R{ݧG4w4,iHzϬ5XܯU9|ւP)qFs _lb;Z&"&;5}h qk/)?]$L~6]$p?'?$(8TՆj4hݒ06`xn0>>T0:& UrfJ) լƅpi|^Y~~$ۨ0H M[_7*xBOb#'̱d^|R ?<1: lEyyYfZ?, Huf3|l )7ogc23UN=T/C\"@$HXM>=NLm@ѳ>8ЙlUKC4 hs[gVd=7Μx5 HߠhNωimq/r }LyỸ)~WVͱMǕvdҐ kO_G>eŜم&,{1!c9E!C5%yi]LWyD7rM]:w򡃻׻\vj1p.yByIּxZĄvHK!yTD授lk>=eب=2΄TnwԤobWa-lI]>>3VcOgfݽ3 Y{E ]ԗbm1:$C8iC1?^kT>ڥRL7jn(CV3`ǥZe+ zɰ tN#N猗5 Z/m~h>H8wd_.&ʟ yWkǺF\vߘh-ܛq& l2>tSQś//^kfʸ~%Za;6@GHl_64sΰpQӋKl(g\$ʌ=Ȳ?da- -Z6x|$4|Z=fc^):YA˛<_ڪT <+b=5ݷfA 2v79DBD?gQUdh-q!X+ꋇYX#{dRn7~̈́6`Tw?n%wd̐; Fk>ePڡ;xK̸|3pvBjȭ ?Yy-ivu"k&9.~7ßJ%m 4 2{ց~tMz˟!D76ms\T;`Sb*o;qu7[Ýk6x{{wb7lR?^: WBa'MP0%aB}: pqeJHzV 4@5 95;qvہ1Ok粃x?,d,C@֞kQj\=X¨VD Gt[ʯ7.rՆܪ;]VW2 0 N>nʂhem٫mq=*1E#jV[/!T;GgRs[&sceL^es.P ndԈRL$=޵)0^`V 7 8P \oub,c#ޥ웾x'}̙@" :)WsX"7bL>O_)>4~>z v!p~xgQcpCE#枟DI w0VK靡*d\kk,\ n\G^kFAJOkՀA/;>PCSo38 Kut٨`Ʋv:a7C[~{µ = 1ir)?Y'7K@sjoi֯gӅ[c-i6u i_:(Ht4ݥ%-1C !tJJ ̀t !1t 0swiǽNYk E=T*2xH&V @d+X EWWv;DKn ^ :za'[yvKnE/'Z'<"u"w]8eT_{p.X5؋zQe ~q&~F(Ϥ I÷ Wa9j)#y@Q6Gm6qu>[o>@V2YKMl?XA8ٿvN ]"~J P.'&1M]u Ht4B ‚BG;c4uUsN[@<ת./BY_rӄsfP/o_2t͒\tu b{c`xQ8^cJa̜Jk$OZ/ }>[IT@A,!#=9-0p7Q%XNaKЙ mW:YY`N&T$f;*\Il"RS-g!Dw3m&µN{Aoh7+^ךn!8V'CdgR+]ˇhXGqc}=wu2<,21p,nbF^}JA y#DQRCg9 ".jhh}f3k IC[`>,WhO B b23\%[gN!C~q%qȥI]&1B^@'Zg6+nF:]$ZpE1bf0'FDjrbFe<2&Йs[[p C'@:qi~%3QNK/83N{ۅvLmdH P.Ssfg Ͻ}PxiKyuy3 ųJF{ m347M%&]6x[ʋ0=2I)w%'`E)U(R)G4>qf;)p]|/#賰 /{yzYUu]'{8zd搮ZfhaEQВ g!B݆xZ/.O@=>k(C^,2l#zCE&ҲZR[2OZX&.988q2y:pMg~Ĭ ԁ:CDAW:Ц=StB5HmZ׽kf&n)W7oGehcO#~Cz2_k}ѻ^nE{!*~S}\l>ݰwmbu~)cqx38&8id3O{oH1lE9ܳvM-ҠXw(j嫜Kuxgk -ͫ.5"8!i R$Rڠrb\O.[qF]Y@5†i_ +#5D@/b$c֔3lٲE/*TtD'E 88rɛOTUvZ7bZ6B>ړKMzFL<;&O5?ߊ̐VN!] ?i[)Ȟiޟ&JM4l{9V"[Ct#nԈ]r2 $$_?r((f@mM1 ;bXGtB<'ෳ,V:w; [L#Z5&o!w֒FE.eԞ~k:' ^"Lb^jUcܔl YL41,՝0w^+cx :f; v!Z8@&wR-puM .z(45kfV r] \b*!^WX^8< =)?pC0^8D!6WoZ#?uV nѝrqѝz4`QӯY<:<֧kO˕\Ex OZW\"dH*y9w15-P,zkL45kk2Hcm:c({ƱƼI};I fX/W?.ީ ?FuDȿrn5 -;} 8L .ʺQ:S O-FD=xSIIhq.Co)V41ŇP;+۟]nj~|yԕlF1jR_J|-~3E΋7Zy%# WdQ 4h<-_TS'^-> ,Rwx D/5ڟvm]H&;絢lT3+ o&ة:3~{ r֙a>OFG~C^.6x8νc L+tO.ߘL׉P[HXL]sy-UbMK,:xE[oeٯTQ2^O8zB` 裉'1dFb7D@55 }FÞ;%VNRQ+C^묾(ᰤF&!'\V8OW}}#aR4$UXAeѻ`ᕖ&&()[axR}}dRe{onuS<.b1㠟)$1BDKx%>2߿UL?x jVwBiŔb*1-6Ӌ4Bu޷c܀ $z!uͻ3n_^Oqi>s.4>O>^t'\;߬g[}&A&* WA|f88J+YKoRT݈0c56n&u")bOV5tî{T[¦",pmd_thZ1>^YrzY.]xEz’ud7{ٟb4t#pL&P\UŌCw:Vg$VQoVΚF S)(HjX8h7r2ݫ>l1\nݬʠI* >7~xET//&z_TJcB## z' ~a+)(ZnJ7]9sƼ0(aO\Y={sQ)C+d X1p}1lD1u$b@3ώq$4u KR};=/8.lZa@{J"P!1L-i2SpU-ɪYvW3FQ1< M$]TK,ist[|5e/xZu;PP|1մc=s+ɯ(VUͧXly=5dx5?+Z[q-.b[:YT-G|J3ob)x1#5P) ͛ֆbi&p5 ~ >幨 wr\tx|O&9sT11#$X?=󜷜Lc8f[2MW>FKZcD(%tIg{Բ\LȞCq=>||`>6ߊߚHF8STۻX@ LrU; le[\4u8o1>36XXE ^|KL\{b.8!:ٖ1I9kF,n%zOʷlML5W\[%`si-{q_.AgBXXRc1յ6|^7fvgm5JFw4]r+uQ<<&Vxw뒗I_Ic@.T>_cRDҖ`ݡ> cﲹ,;qYg"H{h3TD' "(3/v2ZRXΞ:ߜd\˝BNFaJ /տv6ow[_Q;~=jp]Ʒ!~t{'NkԔ:'v \ m2OYr?;z;0( o+ow(|#g#kMctsttxzDG 2V)pCK% |gIsZ^RYQlUUS <S'q6&! q=g1x$*&rt˱hB^ae2N_r)z ܄MkU)$6*I#fxuH[mmQVG9<Ρ^CA zٸ?jeQ x v xgdJU(ӾSu}Y\ni˸( uwo4(>0ъP`1hfkP|_ʶЕ% {8q>|ˀ?vGozM =+b5|Y86_ -X:dGz,8cFv6<H!<:N [+9w$4}&Cx9)z(5ҵ|ާrOzjYvȱd-_ ɚ萾ST4.- l##=5.nnHhrglej |qsJh iS^g W`!DC3|78ʳ@F:x+96Z3EAd":FT (.zmŠ3UfEA$gcgz'`*4BBN#ElM opԱ?v]i,֣O(|>z}R\xFHQA?D+ ,!r!*5QϙtrD*WzytZSbٕ hL p׵z+Y9ܱ J[K>^' Ɔ&">JpHJ(A9Z$v6Fhb/-V ?)o}$60uR(%Zӕk凜mAxWPrG}·Liӄ3FsEpD^_N?t (yV!A;2+5¶ml,@ʘL|5aST}[(-jA(bHg*6b8hLPn#;}M_i<ʧ^ A)/%≬?+!WJ]6_ ?2o$+o%2I kܪ:8~=z=woEokM.י7nTL:EQTDӳ4M|WFsm|8 %xr&gM!PY*4T߅nۜeӠ$V+ͤxUo!@/.Q> ^rW* e 6|jL%aQpա(HXc}I]#>e]=qd?zfpɗNte3I( ,d_֦$++PڍS$I̯ l6 6mo;Q4Ӽ6xС&Ql-ㄐph'-B2}_nFgچQg ?.!k~:{OQ/٭B6?Q#UhŸ6 W٘mKR`v+lUE)04u4 gȞJo?9Z>HM&n(4s^GP5zw-NMZ^hx]u/T^lN|pMRUW}gr\YDA5՚VTLE4 i8YS&cDt^Y4/f)!fC;4V)_L%/5n2ߩiƨNakď!|/щTT5>&mAna/([ ꭀǘzS3sXLr7/wO6[@{/f&/\P.Z.-PEfgVl Ou UEHL?UN_\?6)M)]\9W,8FGm-DA~500ۜ[-(@'\_Oih :eF4]lxӗ^^?(8w[45jj& p<*3~P_1TR2cu np֝ӥ[ZXH.40XN3XҰhB$_fE!IqQЃvXv$:Kp]yQCNe$S0?HX9$hR1[a_m]GY4}o%Ur_R)Ϡ/ՕSbn~LNJ]t?IU[ᅤ7ӤbkpϒKW>J F¥ zVA&yE1`156Ǎ!px;UFOZH[}WZ딿u>LfDj2t_˰FU17#~VrSjCzv|:nԂRam?͞{/X  ]` 2۽aҾ{dwl{ϯ 2a'#mD# ]Qv!=-QƯj i̻y7vNknh'zKgL˃ ӳ-/D$_ѸSov_'>yZۤd9n(5.ȰU@_Q͸Nغ̟֊=iݤqVCK?'oV]m#? nj¿QRW+ɒ!vIfg""y9 d8 0ʹ@L= L(uES bcTXvM~[˴:_TB5jQR5-5\~ڝ#rmq0,=TlY&}2J~pHYˍPҬ3cm9@Hw P4sC,D͈` ]"NB#=;!od+@BWO$,-}8ϲ-kv)ӀHbyDpSuϼӢYqeȲ* KzmgsݮnН$ -(~ aakEgWyhS~_?>{@Ht<齂f_&6\!5ْJFn 3),b'?ɩRL٢ [Qك= _Bfnwe1l#&M76Tw1)_67(WT\@ZPjV+&`NyQBEeq_k,m2TA_wl[ߗ3rW,esfq1VqCR:پ%c녍,ͳS(E㈎+d4+uy (wFD(؁* k:" FWWo;5֎Cp)hc\ylך 懆+#ăH,Z2V_նhmhpvsaޗq[#rZJgvȗ0\CzDu5v0(J(/T! "SMz\İ O_e5~xܑ\,rWc#8-618Gc ;?v?9Dxh8 u3Dm:bPɺ {sR\&KS\G~r: 0>[q~sPLɈJq /(-Kfz%Q U7 ׁQ>Mi_ps+>T6*5(G ūJP=ƨ4tKO':+/u6Eҽ.w.o?TjL?f3B1S7FVƦ6$s_H\Ⱦ.%`eaQUC35 C7=,ӀVó >Wn/q^ 0.g.nR#(WF)֬,povr)7w^یݷU QtȵqɍyRMq D"݌ $oSfq@=tj|uѨ#6{׳7T!i ~cUx}\n6ݰI1&6;#)gKA+l]E >FbD: KK |jjêun x%%[#5R3?Jm@Al9t澓 KZZ1=o@K_ 3-ـCMpjzEXe"tRѯ2R=6xV.?W[l. RM4>Qr1RAWLfdZb?~L8 nY_JGh[OWB'}"3c[_q+c7.dj+Z2֌jwyꂉ<ϵWʟ o99>Xp&{ɤ)k'JL pMD.S"G[onG8ٔlY=Yrv rg6cr^*OePę"R"*xgpDv)*Ņ@6ˤnŠu2Ar\]Wح_kr)m ψe(#VB;Hrvvd+SغM$1$aJǎucگI!S,bna}_m0,WU mi_Tթ٭紭2Yߧ>\IZAråH\eVL`C}?Nxx8:ǑGȹ4UeUMP9׫#I I^p#-$gdr5^OGEvBVs66) ʳ)OuE?]! Տ];ސ"]cD>XW($v<py:'8|ِW_2A.OFf7avšә8L*](QgUwcu5d.77ϘIa[< 3zIn3 KU퓗!KM!%ښ5ݻzcEbM2Kb$(6 1e`LA[{,0tu2ʨn>dO)5Q}XgsFL1ƼfH]'d@֮$v/cоj$/cdVpKAl d yġp֊z4{%Z˰cï܊T3 i+[|}PYEK¢C< _%$1 ySFQ2ǯ< =CӴ&v(+ѕEWLFP }EE5g{Q( rFWSlfUcu<ְj>Q|<اVxm.Pj6=mM-hM!x'KniĚf߾B2ѶYaJ?>}Mgz$noݻiX`YGTf-p(:eB6m"A3nUj;</rYNB\7g&U(k0 {=?W:/i{q:h}E>r| i:%HRezx)Ɠ'1RX]߾O'N=LPr;Pix9ռi||W觪[6 N#XȱORX[$J"IkGq8|!wѻ`p"nxU!j#&ޮ9:eBou7Y”=v8~hӡkW%}?u}:`[E/N?eE ",mt?KXMW$h^{Q_6 k$tt:i9L .U9߾Gh765Ժr_I_\?g&Gb\%D9ڻN ".Beyn 9'7gܩr4oH[I yR~pyy/mAt3mw rm%=m;7?,~ b&feT&&5ӿ`TX[Q&T0 ̀ HBbbJ {;Rӷ@cLCɯvD{l+b>|!/d:r}>$Nz U.n@4U Lyy-D5iQqMՆR DS1w4>Ÿ~`8<{nA @Ccd$ftdܳ7!MY")ᨄbT<岮܊RRuO!F{pTV"P*ouzLPXE3Ȣd5N1`X}MjiYRͷ#1|9}R ܦ9]nG{0iXg;҄A&j miKp ^;mT`tL*+M%/ǓoZP-:eBMC`kv4$7\Nw^5 !\tNh@]W93[e-Y>RVo<ɡ *mlUO5"5晪j_aUݏ+l"eZ+gsߝ?\BO˿_"w^Myv{bHw$T \=].OVrbG}Пkm*O(}O)ȉl5PʂHJ7gK^FK 'ҧFg;F*#Qߟ"Wk%TݰHȓ5D,eV~i7~pϳK?uM9,sy)JjwVqtDellR |=PQWN 辷DC{5Zv%/JX[4^jL2t:K*`W `4&vq{E9 N9Jzc+<.J=̬Aj"-Md3EIO/ : 2; ||-,+QUroܮ7Ͼ#z\rv)%h&惕΁:vIw$ߨB*բ+spz؟N5wڻ*}1꒰;rEI5E飼o=5Rg0JݶpyXC[GE}QE iDBQDR TTzDACn`azwzwZ9uw|q~f"ʸ`fn<(T'DN15r;* &!2kqꪎ(ϋٌbXor٬OK_!&#67VgOG$:GY AK=5gABO]'7oO:Chy͒ǏHN^8~Kb oAa"a/ TO5*/Di@ꁧ i?kc3yR4jN* m "ϧ@CܧNa.I!;?m[-(/hc%]jN5q{>Gu~NIoNb.ON5 ې!2ǻ0R'~zvm-z-UD @ 5a-RDCBJRnqGZloϴ[0Y<ʪy^!R^mjս5gOe5tLЩa{{QIͯ]8DT!~]^J">4Ey'AX^?1j)z}%@RH d=?7sބ+B/3Eke{[K|4kJ7&|`,9cCJQN3lT]}!|7 jV_D w!ǒ7ESPUp'Kنr_D#Hr<Lqzuz.2[LW\!qEQ>2U'z٣5ٻ>[w|.e:uHn"utYz7PXq)dޏG4bm*׽(f1gqSC*M񙅡}94$(zf*\hBГ^|žUPa҂aLb'QO>tnЎN}-.voxSԼ'g73 s]oؕfk 3(ˎG? v#yp_2-ǏLҺnl!sLŗiɢ{ Qg&#t\yȰ#Fc:ke5V[`hB9ͧ=r+:OiP|~w\Leam]1>\1.e, 4;LY,y<9ZE2$$%M&QbSn()>F?\c")ꌜ VJ%JG"o{?+'7D3'%i|8Ͽs$b/:f}j{vTF}z[JIb٥𘠨4Bm(w;>9Y -dO+#n ; v|4g 8_&*͙cjD1Ivo~s IkYcDIdsr:+ Ahlf3ƛԯV [/])T: < ^~Hb@2-H+n:-f3;pwOoE,6Sj-GNv\kkSɶF,oWx-M7TσJE&,H4£GOEl=t%vJ~S?ҁ^R>Nw̰)C@Œ׿u٬ù*q be]'dw7ovL f1"[إ V IҦsn/-UxDK^Z}ξt"-BJ} tLO~wۀKv,=-mxxkqcCʚcw5h%k2 uX/[>bmgqd/.R|wk`Eu&}׸SA mk{?;Q%,@i*BL Cۈ![QB$ߔ֪oqdT$-# %u1i<8"H VBxZY9a:_nüI (3 wW5\;mQ=FliW<58t"( g.DS`c> ,m=༵&׃\6OL:ge*F>pji,¿cxH8MGdożq̓W+#c&]xZXn%ٺZ3dK4WMoA ^)r@H''7Q؊0VSg[$_$uޑ|}Rj` ҉KSNI[ yc~~ S֔?X3Bt+OQdgofF +78G;NjƳH<ӈ[Lw}:MsquwBs L**ν<~u7*v#ãv; @msSrtڐTa'&'SܕT泭[z8V 3[mYGwE?jG煮ٙ8vej2Ø0w{=²;ArTG~o;4Ϧؐ=<[Ƅ4S#ꨃ~ g]I IxW>h,WkLjL*ܩk!sY=s<Ŗr-V֋奻9?^Z|ܜ`ϝ5dURG(-֚TKCj#'V|(#)^TLmלb}Nn"-U|H^4zxb?X~_&W]dFc7})Fs݀.Yڵ7'Ub5 %xز ?[Q cqFf"-y./.cSEX4)%y0J-,&W|$G߷f?2gtmZcێ柑=pُSDV&Ǡ (3m5û҂60mEX+.פ zf;6yc$Z18ߌqBlJk]¼G_]ĐfCSiSLȢ׹q0G7:Å]5Paڟ=3r 4#*pOȤKvz?8+q\Q*-]`Kxje~kg5=9iGw>H|uB ]~i7=xBqi$DY$_t ֢m<3 c?s*?}jMK qVjV0G&$?K}+`Y}SŁބ98ҝ=] Wz6%/8ݬ S2gYӵ<; Bݴ <0ۙ^f+-0N>Ѻd/ZC;i{_!W++O'X|d -r$l=*nFd`"OX3Wv$]b蟍yѼz,w&?}їd綂"r-GT}Q'iv #<cqWj -10QI 4br$] v7*(_u߬+\޲ioT 5&cT)*j99Ⱥ(Soƛfj6DX1v/\cƖ2kZ,c|(3ïo\N>>ݬlkA-{f[xk0(@4+ R_s =&Kd./|IuZyy#oh?Pkɥ2j "U]xtk#9 :2m:ytY(FSG&"LtwQ#b\ t7C/-z\֝ 8Eo$U;6^5{0SMQ!*Xᘆ~hV7X}F|fv'Y\nQ1 i{^7s/O&F%)3+ζ%H"`Pd%0jTo9nD>T:8(ܕf[Q%(!=X#i(.wgScOmml$`'lS&)3w[Y"'G6EOsZ㧁;ns&fUjU/F:cFk;>Kj)LɇiSGFQ;Iشl:ܻ$xǨp72r)3݆#@-a1IXu# #.l~"Aޱ4]\UÖ́ii1.ov nڹ7-CcUT'̬-oCv4pUT-vmum͚8y Nѿ)5v5Ɗ;l}7r#BTJUyAU7F%'g@>iʥH܍xxBz\e6 ,E@[{ivJh7 ^.-o3F<ɳ7F4&-3xFQ_|m,8v̝R޳meeTzw#ߠ) - >xSkk| ByƼjf\KG𛚗Myt#X.J!E 9AG/) L:emG43]忋L_/JO=O0ݱIύHykiA<ܠ P@D bZ%ctz,%Ƹ HQGCK^^0fLyQQDΟ윰Ŋ *HĆSޯ>ىVIao400,_QVlW_L먻~op[ܪ=Zݺ c~Zm Xkjߗm<~.ZmڐlqeoM <.9~E rW$ o \-&F 0bp+}YrTIv N^~lХjAAIT:Se= >&݆6j4M%0 ܚ"O`mzxZh.s臓i_R=q~눎/. tqӐSteͭ_=r'aM]`2xH$%h ['[_M~s=70ɢ# hQDFXMٕ!lEՖb<{ys9,ĩثm?$dwT4ŗr_d'v8ɛ/)w #wڎʞжPUpn£*e`52Yx}kQ!ONܯf{?{b9)$ 鵬bT Hϼ xFSp?Ú+]6 Zz͂Ī/0RS|J/cj1(]\yec(xRPc'/s|m*B^k稳-Un܈S3@Pmsn}Q(h쭖B]cD+z㢝s+xGUh/UΧ9gER>z.ZV)􍰗!SGdΰEt_S4QfQ:)n]é${Z1}@Gm)ZO1`g=.{pY Fz\i{ XuO{'0F54/F!2Ix38yWV- '4J0UJr>S_ Gc/mZ~)󪰬!m#@^Vpԭ{qX_<8eKxW*C:)PAv}dzZ 'őŐSjPZxraLa>90-Ф*/fW40QaCUOrڍY9u&.uuxĕmק^rq.B_wA0f:ȝuE5#˛92X[mNRԋ'h+ąjLCϣJy꼰? Jos9 n0H_Ȁs\DM4ѝ/YRx6O/2u;![#6~^A^n}нZZV@ooOt4KyjA&?/]\׍6 ]ېA6T@]$}FU^AںdV;N|~}z}C= ծ3\#SӾ3-3~QT2qW(TzqV"VаIܿa~p6TY=X=I&iB5f-}ɳז끧ЄaT)%~寞2%GYӧVX}޶ p]ڶ{Q4:DHljPk&aޢ9Ao3BJ-Ɔ޼S|к\Vإl0BR[h6=t8`] 9&H5R>u)w:WuȃhSk-k&w y {^H+B%Stm * ݦz*|O_kJcz$y{CKWL|Ɉ.L yhqLe'߯!« "FBd AzA~׼2 j@QDB,ZPxәc2nyn[* v4@l.kVO'1FY{ϰ//:?nhyt߉ ELW[_Q<:m"L5A0le+m@RAbϬ<;M2ROh57vrz}j~x%0rF#C4lW4I>A"x pؒT ({6ϙj$$`<0|B@K)((oxJd~{,hBe1vtǯE~ ~ w_L D >@05?&7{rBLٳe%6|!| jɧuCQ1{ut_2Lhٹb oP$|)x-W;:ئ 2#S[rC΀,aߏ# lJnk[[3ɨ^4 S ,rapa9Z C>F%[ vY}OC,ӈp!06X`P+,Mlez-AT9kNbV g_?]w c:6WCWxzhpVtG֊*֏+) |EU8cx}?ɰyV(?JSRX_d}Clӏ>Lfj6ĬJ KZ=43# G7W9hKͬj`wWcQ͋VEaftGz}{uj9wڬ wdE/l{fq":4]B+/ i`aGLADX. _m6/*bB e_2۫N|\r 1ij]1X-L8cFق5id?#~O]R0nΨ M3srTeV]fZs+5(񥇌h2Y v!W9iZYzWREsw3d?; ƄYS싖rDH%KNt&\y^:aw;,Y(_l]%no?}yGBbD )@ l yz0pF1 PcA *r;)XZHDzy>{Qϡ}ar,iR32huv\o8=^ شd)BVUmw|=J_hrC]\EJ1FX+ߓZ9D6>Dm+(_Ԯ%iFf(wʩqBIZU!הjpﱐC\h1~m,oj(בr>W2)l%0YQG-lQJX^vY9%~7']xɊ]i̛QjoTԫvV{|H]1Ý͸ $;WJ}0kYk"Q_=G?5gs.œb9ɴr?k5+v;O e  =!tK۞7h>=HNQClx!e\aPOX)wG j$rqJP?ՌN@v^'v"2q/3v8h7U oaS9:؈mn_O(Q"Ĥ_#5Rs:9KѦR͖4s?.ۊ-C0mK3V5doZap҇O[.b̻ۢjc&U='i? t6rw}Pވ761C.+2䋍wJ> R/Ԧf``XE'!1 ?&=apM{UDvTѻdEs+WbCGCH&6 I3>ݽQ pnlue޸{_ft&XbVZ fA&ruͲt̀wWoSٶ( U~NԌ[;@]]4=|+c x"#"|&0t6B{P8cE#gDPxu*bcPT QPe)gaяyè:YQՖ:Hhٿi5VM&~W3;R#r#S8OZ%oGͻg_f ledL^ ̼KV=+2#j)8ш?VRF4[*겲,śC -v%Mƌ]ԡ E=(ӏR[6BR.ݼ:gHH RL G?YzЮbmCQMUȫnԺ\|20M"A<݃,hHyJ'WSEvbWpTwR1`VrRo'пmqI;5f+_$y9ZZ5ݚRx:eZchuѱ^z(_T+{n,寱ѿ ?xԺR:Թ4, $#GB bNĺ཭jKxP;Wv-н`?Q~Q]N78V3x{Q+cwm Ft@uvƝűz/%o9/rcm,ZKrG×˞i;m]%A!?&յ{=F?E:)&$~G(Y<$UgbE] c %Π><;ʟ8~ѷf|ߤ6i5zPTdz+_d8*亂}#]\^ >4{"`-) .x9?=-2f/P.3yj 6xIR[uh<)1_#tőĠɛy>qE\!7{Xv;ym| Gzw>*]epKOupQ#gv4SoY:2mX-G((wKqZE\ /o |!`D^ܷ:O̠>E[~16U!"ރ?lezW\v|ӭ?WRc<*~+U~PNKa:Ū'tI5|&\TJU)pSxra'L'~W/ ~(߉Ka5YBC]\;> 覟r{.Ŋ' 8;{*x ӟbO/Ҕ |V۱{9;84RiA #-5z~p%Uꛡ0dģ6 ">F}'&2LnO-7#6!.OmᏊ"6лnKICC73ǘ|v9P7 K`PؕXR}eI$NV^7JrO?eg6Az۱njȼ 'm4EP7~)bL~[#T69{3,w'qYNـ`EbE靷rM:os~[WMa%'ZntVR ;hKhz1IE;9͒YLo>sZ޳ GHk8(7eba[<pEqR(O{lrgI.&ӓw4W%>"m^3VՄI(x׊)vԅR[F_qGF5Y (~Ҹuvj3'Kۈk p1] Hl&S*VώZi0a\pMbM lD̡2&ERχ18v0D.$G{:UUOf?r[|ˈ5Y{a6x9-ǹFV`ۏ=ި8jaݒF qRE"["2{g۶yOm$Hғғ:Y+ߡ')u~D?*S x4wd̲diM2xiS> i,QS^J%Dw(;njڨ@WtH0C-jv;Z4Wx߿ _S<"?P3yAZi#I[vI7r~< mYIw 0ʫ^4 sEm-O}_y5G:;jo^,v=uf.{S&iq @0t<'gl;h>V5P^48<}yX];Mzb$Q}n?hƒ Uܬ}5,Chߋ1c#|Cy߼9 OGQWۏVhٌn K9h+ə'7L-~ŴHEEb"ep4\OB$\!n-ZjojaXmt52 // u:n.''f+.x Xe4]J"yFt2+&?,V9NCw1f`xY*/r~<VV`^E f4A}|Y.=џHXqL^bM^P{v[LYO 5)_@ヌB_: BW#k?epSdS^̏S˧ҫU3CUY̛~<)Q]#T@׃AEu]7`r2ax""9>"}p9݋aRo+SwjO O-8lƣSL&.3̎>n :z~݇KwsO@yxE@4a7|? !:n~']FK3/<=pܕ}eDOPΰS3xPO0Jو6O莆p]:p"v=Eod Y^v~3Vww>M͉}T;a?M >697{y$M@\EdE"?8B`T'@f< 2HuRTt}YOggSDž|l W SQd^8wɈ@CM7 L"\[X5Q0 L`б>eJ]`7t9a6GQ}=~ ![ᦒ}W,{giӲo1lyۯ秼1*?!\'rmN,ՑU f:P5ζ`[н.}#R<ܚ)G9~zaiN,@9塕ŏl)J7-?MWK?7{7vMD#iz teHjzMRMN}>8{k~HqL~\aki5]>{΋_-φ,rda9RB)_`Aqb`q\:ӻ6?Q Fd6WNGywۡ3VZp6O=GBvd޸{۽<Ρ h\ \V'݆bkroW> @Tq:wyoKQO͂W3sMϿwgFd | ,` mlwGQjf \_clo_jHag|YNOveFY.Qέ*_ HWcjNŇ)\ -71^PK; d}PK *Td. __MACOSX/Sounds/xItemTeleporter/._DSTELPRT.oggUT dadaeux c`cg`b`MLVVP'1001Ϙ@p :4%Pq\ĂT> +(/KKKNɫ [Ģļ̼TV_;f *Z)z>>Hf&Iw C4Jh UjP׶!~õ|3˧Eۃ-Bqnk_C냧]F'tzQhO6%tJg=2q0>8=d!VnBi hPﵾ sv$0@:  PK="PKyWx __MACOSX/Sprites/._.DS_StoreUT 6eeeux c`cg`b`MLVVP'@S 8A0]PK 85xPKU3T Sprites/xItemTeleporter/UT aaeux PKU3T" __MACOSX/Sprites/._xItemTeleporterUT aaeux c`cg`b`MLVVP'b 2CBL@l!.XPWXXWPo`dahmfjafdbY_amdiaalnfkkbjkikini``hlljPK0݈PKUv+T Sprites/xItemTeleporter/XITZALARUT BaBaeux Vo7e,Ybؒ,))|$Q)`8Eoi蚎tI to;d!@2u褾#N,0#_|ԙ8^oBLox ni m!~7xdGgKhK/߁x <gW@wӄui^JJ^ظ=݌ۿȵ]kVI2NEo7[2~dNop} !ҫd6{f;20q4}>Uv3?0 c_.siEVEgq;.Gչ˰}VP r(h6f$IUz a$S"W'k#R+.|O`:0%ϯp֖B IbJjYBgPX+ST#NcC\^#'|f=b?!eI"<|PmQFE#NcȒlj$ÕiDa=v%0@=IWNRU%gVGEy ν(~E鴗P9j-댆Jl<:%ma3b*k*W\*z]`/k" '^oi ;xȸLL^CSH /2:%Ê.ݢ[NOY>E@+$-?%|)`.SqKTFOZb2v`Ԃ$O[(=9:ZhW_u&N?~WPKUv3?0 c_.siEVEgq;.Gչ˰}VP r(h6f$IUz a$S"W'k#R+.|O`:0%ϯp֖B IbJjYBgPX+ST#NcC\^#'|f=b?!eI"<|PmQFE#NcȒlj$ÕiDa=v%0@=IWNRU%gVGEy ν(~E鴗P9j-댆Jl<:%ma3b*k*W\*z]`/k" '^oi ;xȸLL^CSH /2:%Ê.ݢ[NOY>E@+$-?%|)`.SqKTFOZb2v`Ԃ$O[(=9:ZhW_u&N?~WPKUv3?0 c_.siEVEgq;.Gչ˰}VP r(h6f$IUz a$S"W'k#R+.|O`:0%ϯp֖B IbJjYBgPX+ST#NcC\^#'|f=b?!eI"<|PmQFE#NcȒlj$ÕiDa=v%0@=IWNRU%gVGEy ν(~E鴗P9j-댆Jl<:%ma3b*k*W\*z]`/k" '^oi ;xȸLL^CSH /2:%Ê.ݢ[NOY>E@+$-?%|)`.SqKTFOZb2v`Ԃ$O[(=9:ZhW_u&N?~WPK`dYQ ~Lua/xItemLib_v112r5.luaUT eeeux PK΢W @" __MACOSX/Lua/._xItemLib_v112r5.luaUT eeeux PKU3T ALua/xItemTeleporter/UT aaeux PKU3T0݈ __MACOSX/Lua/._xItemTeleporterUT aaeux PKU3Tǎj( Lua/xItemTeleporter/xItem_Teleporter.luaUT aeeux PKU3TT93 __MACOSX/Lua/xItemTeleporter/._xItem_Teleporter.luaUT aeeux PKU3Tǎj( FLua/xItemTeleporter/xItem_Teleporter.luaUT aeeux PKU3TT93 __MACOSX/Lua/xItemTeleporter/._xItem_Teleporter.luaUT aeeux PKyW ASounds/UT 6e6epeux PKyW0݈ __MACOSX/._SoundsUT 6e6eeux PKyW=" Sounds/.DS_StoreUT 6ee6eux PKyW 85x -__MACOSX/Sounds/._.DS_StoreUT 6eeeux PKU3T ASounds/xItemTeleporter/UT aaeux PKU3T0݈! __MACOSX/Sounds/._xItemTeleporterUT aaeux PK *T; d}# Sounds/xItemTeleporter/DSTELPRT.oggUT dadaeux PK *Tۮ;d. __MACOSX/Sounds/xItemTeleporter/._DSTELPRT.oggUT dadaeux PKU3T A6Sounds/xItemTeleporter/UT aaeux PKU3T0݈! 큋__MACOSX/Sounds/._xItemTeleporterUT aaeux PK *T; d}# Sounds/xItemTeleporter/DSTELPRT.oggUT dadaeux PK *Tۮ;d. W|__MACOSX/Sounds/xItemTeleporter/._DSTELPRT.oggUT dadaeux PK *T; d}# }Sounds/xItemTeleporter/DSTELPRT.oggUT dadaeux PK *Tۮ;d. vE__MACOSX/Sounds/xItemTeleporter/._DSTELPRT.oggUT dadaeux PKyW AFSprites/UT 6e6epeux PKyW0݈ G__MACOSX/._SpritesUT 6e6eeux PKyW=" GSprites/.DS_StoreUT 6ee6eux PKyW 85x 2I__MACOSX/Sprites/._.DS_StoreUT 6eeeux PKU3T AISprites/xItemTeleporter/UT aaeux PKU3T0݈" 'J__MACOSX/Sprites/._xItemTeleporterUT aaeux PKUv+T`QQLua/xItemLib_v112r5.luaUT eeux --xItemLib --modular custom item library --written by minenice, with help from the [REDACTED] (if you know what this is thanks a bunch lmao) --don't expect this to be compatible with vanilla replays you fuck --this is expected to be loaded as a packaged library (bundled with mods that need it), not as a dependancy (loaded outside of the mods that need it) --however this does work as it's own standalone mod, if you just want the enhancements --current library version (release, major, minor) local currLibVer = 112 --current library revision (internal testing use) local currRevVer = 5 --item flags, people making custom items can copy/paste this over to their lua scripts local XIF_POWERITEM = 1 --is power item (affects final odds) local XIF_COOLDOWNONSTART = 2 --can't be obtained on start cooldown local XIF_UNIQUE = 4 --only one can exist in anyone's slot local XIF_LOCKONUSE = 8 --locks the item slot when the item is used, slot must be unlocked manually by setting player.xItemData.xItem_itemSlotLocked to false local XIF_COOLDOWNINDIRECT = 16 --checks if indirectitemcooldown is 0 local XIF_COLPATCH2PLAYER = 32 --map hud patch colour to player prefcolor local XIF_ICONFORAMT = 64 --item icon and dropped item frame changes depending on the item amount (animation frames become amount frames) local XIF_SMUGGLECHECK = 128 --item contributes to the smuggle detection -- Ashnal: for debug logging local lastpdis -- Ashnal: I've moved vanilla item odds and flags up here for easy reference, this table is referenced much later when initializing vanilla items local vanillaItemProps = {} -- xItem useodds 1 2 3 4 5 6 7 8 9 10 vanillaItemProps["KITEM_SNEAKER"] = {raceodds = {20, 0, 0, 4, 6, 7, 0, 0, 0, 0 }, battleodds = { 2, 1 }, flags = XIF_SMUGGLECHECK } vanillaItemProps["KITEM_ROCKETSNEAKER"] = {raceodds = { 0, 0, 0, 0, 0, 1, 4, 5, 3, 0 }, battleodds = { 0, 0 }, flags = XIF_POWERITEM|XIF_SMUGGLECHECK } vanillaItemProps["KITEM_INVINCIBILITY"] = {raceodds = { 0, 0, 0, 0, 0, 1, 4, 6,10, 0 }, battleodds = { 2, 1 }, flags = XIF_POWERITEM|XIF_COOLDOWNONSTART|XIF_SMUGGLECHECK } vanillaItemProps["KITEM_BANANA"] = {raceodds = { 0, 9, 4, 2, 1, 0, 0, 0, 0, 0 }, battleodds = { 1, 0 }, flags = nil } vanillaItemProps["KITEM_EGGMAN"] = {raceodds = { 0, 3, 2, 1, 0, 0, 0, 0, 0, 0 }, battleodds = { 1, 0 }, flags = nil } vanillaItemProps["KITEM_ORBINAUT"] = {raceodds = { 0, 7, 6, 4, 2, 0, 0, 0, 0, 0 }, battleodds = { 8, 0 }, flags = XIF_ICONFORAMT } vanillaItemProps["KITEM_JAWZ"] = {raceodds = { 0, 0, 3, 2, 1, 1, 0, 0, 0, 0 }, battleodds = { 8, 1 }, flags = XIF_POWERITEM } vanillaItemProps["KITEM_MINE"] = {raceodds = { 0, 0, 2, 2, 1, 0, 0, 0, 0, 0 }, battleodds = { 4, 1 }, flags = XIF_POWERITEM|XIF_COOLDOWNONSTART } vanillaItemProps["KITEM_BALLHOG"] = {raceodds = { 0, 0, 0, 2, 1, 0, 0, 0, 0, 0 }, battleodds = { 2, 1 }, flags = XIF_POWERITEM } vanillaItemProps["KITEM_SPB"] = {raceodds = { 0, 0, 1, 2, 3, 4, 2, 2, 0,20 }, battleodds = { 0, 0 }, flags = XIF_COOLDOWNINDIRECT } vanillaItemProps["KITEM_GROW"] = {raceodds = { 0, 0, 0, 0, 0, 0, 2, 5, 7, 0 }, battleodds = { 2, 1 }, flags = XIF_POWERITEM|XIF_COOLDOWNONSTART|XIF_SMUGGLECHECK } vanillaItemProps["KITEM_SHRINK"] = {raceodds = { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0 }, battleodds = { 0, 0 }, flags = XIF_POWERITEM|XIF_COOLDOWNONSTART|XIF_COOLDOWNINDIRECT } vanillaItemProps["KITEM_THUNDERSHIELD"] = {raceodds = { 0, 1, 2, 0, 0, 0, 0, 0, 0, 0 }, battleodds = { 0, 0 }, flags = XIF_POWERITEM|XIF_COOLDOWNONSTART|XIF_UNIQUE } vanillaItemProps["KITEM_HYUDORO"] = {raceodds = { 0, 0, 0, 0, 1, 2, 1, 0, 0, 0 }, battleodds = { 2, 0 }, flags = XIF_COOLDOWNONSTART|XIF_UNIQUE } vanillaItemProps["KITEM_POGOSPRING"] = {raceodds = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, battleodds = { 2, 0 }, flags = nil } vanillaItemProps["KITEM_KITCHENSINK"] = {raceodds = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, battleodds = { 0, 0 }, flags = nil } vanillaItemProps["KRITEM_TRIPLESNEAKER"] = {raceodds = { 0, 0, 0, 0, 3, 7, 9, 2, 0, 0 }, battleodds = { 0, 1 }, flags = XIF_POWERITEM } vanillaItemProps["KRITEM_TRIPLEBANANA"] = {raceodds = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, battleodds = { 1, 0 }, flags = XIF_POWERITEM } vanillaItemProps["KRITEM_TENFOLDBANANA"] = {raceodds = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, battleodds = { 0, 1 }, flags = XIF_POWERITEM } vanillaItemProps["KRITEM_TRIPLEORBINAUT"] = {raceodds = { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, battleodds = { 2, 0 }, flags = XIF_POWERITEM } vanillaItemProps["KRITEM_QUADORBINAUT"] = {raceodds = { 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 }, battleodds = { 1, 1 }, flags = XIF_POWERITEM } vanillaItemProps["KRITEM_DUALJAWZ"] = {raceodds = { 0, 0, 0, 1, 2, 0, 0, 0, 0, 0 }, battleodds = { 2, 1 }, flags = XIF_POWERITEM } local XBT_ATTACKDISABLED = 1<<7 --apparently this makes shit faster? wtf? local TICRATE = TICRATE local FRACUNIT = FRACUNIT local MAXSKINCOLORS = MAXSKINCOLORS local ANG1 = ANG1 local k_sneakertimer = k_sneakertimer local k_spinouttimer = k_spinouttimer local k_wipeoutslow = k_wipeoutslow local k_driftboost = k_driftboost local k_floorboost = k_floorboost local k_startboost = k_startboost local k_itemamount = k_itemamount local k_itemtype = k_itemtype local k_rocketsneakertimer = k_rocketsneakertimer local k_hyudorotimer = k_hyudorotimer local k_drift = k_drift local k_speedboost = k_speedboost local k_accelboost = k_accelboost local k_invincibilitytimer = k_invincibilitytimer local k_growshrinktimer = k_growshrinktimer local k_driftcharge = k_driftcharge local k_position = k_position local k_roulettetype = k_roulettetype local k_itemroulette = k_itemroulette local k_bumper = k_bumper local k_eggmanheld = k_eggmanheld local k_itemheld = k_itemheld local k_squishedtimer = k_squishedtimer local k_respawn = k_respawn local k_stolentimer = k_stolentimer local k_stealingtimer = k_stealingtimer --desperate times call for desperate measures local FixedMul = FixedMul local FixedDiv = FixedDiv local R_PointToDist2 = R_PointToDist2 local type = type local table = table local pcall = pcall local min = min local max = max --"lol," he said. "lmao." --also rip kartmp dropped item fuse freeslot( "MT_FLOATINGXITEM", "MT_XITEMPLAYERARROW" ) mobjinfo[MT_FLOATINGXITEM] = { doomednum = -1, spawnstate = S_ITEMICON, deathsound = sfx_itpick, spawnhealth = 1, radius = 24*FRACUNIT, height = 32*FRACUNIT, mass = 100, flags = MF_SLIDEME|MF_SPECIAL|MF_DONTENCOREMAP } mobjinfo[MT_XITEMPLAYERARROW] = { doomednum = -1, spawnstate = S_PLAYERARROW, spawnhealth = 1000, radius = 36*FRACUNIT, height = 37*FRACUNIT, mass = 16, flags = MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP } --one (nested) table per splitscreen player local availableItems = {{}, {}, {}, {}} --only for player 1 local debuggerDistributions = {it = {}, odds = {}, totalodds = 0, useodds = 0} local function K_FlipFromObject(mo, master) mo.eflags = (mo.eflags & ~MFE_VERTICALFLIP)|(master.eflags & MFE_VERTICALFLIP) mo.flags2 = (mo.flags2 & ~MF2_OBJECTFLIP)|(master.flags2 & MF2_OBJECTFLIP) if (mo.eflags & MFE_VERTICALFLIP) then mo.z = $ + (master.height - FixedMul(master.scale, mo.height)) end end local function K_GetItemPatch(id, small) local libdat = xItemLib local libfn = libdat.func if id <= 0 or libdat.xItemData[id] == nil then return nil end local ret, idx = libdat.xItemData[id].getItemPatchSingle(small, 0) return ret end local function smuggleDetection() local group = {} local itemData = {} local itemFlags = 0 for p in players.iterate if not p.spectator then table.insert(group, p) end end for i=1, #group itemFlags = 0 if group[i].kartstuff[k_itemtype] then itemData = xItemLib.func.getItemDataById(group[i].kartstuff[k_itemtype]) if itemData then itemFlags = itemData.flags end end if group[i].kartstuff[k_position] <= 2 and ( (itemFlags and (itemFlags & XIF_SMUGGLECHECK)) or group[i].kartstuff[k_invincibilitytimer] > 0 or group[i].kartstuff[k_growshrinktimer] > 0 or (HugeQuest and group[i].hugequest.huge > 0) ) then --print("SMUGGLER DETECTED") return true end end return false end local function findSplitPlayerNum(p) if not p then return end local splitplaynum = 0 local si = 1 for dp in displayplayers.iterate do if dp and dp == p then return si end si = $+1 end return 0 end --new solution for vanilla item toggles --thanks yoshimo local cvarTbl = {} local function getCVar(name) local cvar = cvarTbl[name] if not cvar then cvar = CV_FindVar(name) cvarTbl[name] = cvar end return cvar.value end local function getItemDataById(id) return xItemLib.xItemData[id] end local function getItemDataByName(namespace) return xItemLib.xItemData[xItemLib.xItemNamespaces[namespace]] end local function getLoadedItemAmount() return table.maxn(xItemLib.xItemData) end local function addXItemMod(namespace, iName, defDat) --mod namespace, friendly name, default (placeholder) item data table.insert(xItemLib.xItemModNamespaces, namespace) xItemLib.xItemCrossData.modData[namespace] = {iName = iName or namespace, defDat = defDat or {}} print("Added mod "..iName.." ("..namespace..") to xItem mods") local t = xItemLib.xItemCrossData.itemData -- id -1 is used for anything "global" if not t[-1] then t[-1] = {} end t[-1][namespace] = defDat or {} print("Added global mod data from mod "..iName) for itm = 1, xItemLib.func.countItems() do if not t[itm][namespace] then t[itm][namespace] = defDat or {} print("Added item mod data to item "..itm.." from mod "..iName) end --added mod, run init if wanted local fn = xItemLib.func.getXItemModValue(#xItemLib.xItemModNamespaces, itm, "itemaddedfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, itm) if not status then error(err, 2) end end end local function setXItemModData(namespace, item, data) local crossDat = xItemLib.xItemCrossData if type(item) == "string" then item = xItemLib.func.findItemByNamespace(item, true) end if crossDat.itemData[item] then if crossDat.modData[namespace] then crossDat.itemData[item][namespace] = data print("Set mod "..namespace.."'s item data for item"..item) else print("Can't find mod "..namespace.." in xItem mods!") end else print("Can't find item "..item.." in xItems!") end end local function getXItemModData(namespace, item) local crossDat = xItemLib.xItemCrossData if type(item) == "string" then item = xItemLib.func.findItemByNamespace(item, true) end if crossDat.modData[namespace] and crossDat.itemData[item] then return crossDat.itemData[item][namespace] end return nil end local function getXItemModValue(mod, it, key) local libdat = xItemLib local libfn = libdat.func local id = libdat.xItemModNamespaces[mod] local crossMod = libfn.getXItemModData(id, it) if crossMod and type(crossMod) == "table" and crossMod[key] then return crossMod[key] end --now try mod's global data (fallback), only if we weren't checking global data to begin with if it ~= -1 then crossMod = libfn.getXItemModData(id, -1) if crossMod and type(crossMod) == "table" and crossMod[key] then return crossMod[key] end end --nothing found, continue return nil end --rework to use OOP a bit more local function ClassXItem(num, namespace, iName, bigpatch, smallpatch, flags, raceodds, battleodds, getfunc, usefunc, hudfunc, oddsfunc, resultfunc, droppedstate, showInRoulette, preusefunc, droppedfunc) --set item patch local itemPatch = {} if type(bigpatch) == "string" then itemPatch.bigTics = false itemPatch.bigP = bigpatch elseif type(bigpatch) == "table" then itemPatch.bigTics = bigpatch[1] itemPatch.bigP = {} for i = 2, #bigpatch do table.insert(itemPatch.bigP, bigpatch[i]) end end if type(smallpatch) == "string" then itemPatch.smallTics = false itemPatch.smallP = smallpatch elseif type(smallpatch) == "table" then itemPatch.smallTics = smallpatch[1] itemPatch.smallP = {} for i = 2, #smallpatch do table.insert(itemPatch.smallP, smallpatch[i]) end end --set item dropped sprite local itemSprite = {} if not droppedstate then itemSprite = {tics = 0, pics = {{SPR_ITEM, 0}}} end if type(droppedstate) == "number" then itemSprite.tics = 0 itemSprite.pics = {{droppedstate, A}} elseif type(droppedstate) == "table" then -- format as either {tics between frames, {sprite, frame}, {sprite, frame}, ...} or {0, {sprite, frame}} itemSprite.tics = droppedstate[1] itemSprite.pics = {} for i = 2, #droppedstate do table.insert(itemSprite.pics, droppedstate[i]) end end local ret = { id = num, --numerical item ID nameInternal = namespace, --internal item name flags = flags, --item flags name = iName, --"friendly" item name that can be used in other mods for display reasons defaultRaceOdds = raceodds or {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, --item's default race odds defaultBattleOdds = battleodds or {0, 0}, --item's default battle odds getfunc = getfunc or nil, --function that fires when the item is first rolled, function(player, itemNum) usefunc = usefunc or nil, --function that fires when using the item, function(player, cmd) hudfunc = hudfunc or nil, --hud function that runs as long as the item is in the player's item slot, function(v, player, consoleplayer) oddsfunc = oddsfunc or nil, --function that runs when finalizing item odds, function(newodds, oddsPos, mashed, spbrush, player, secondist, pingame, pexiting), expected to return a newodds override resultfunc = resultfunc or nil, --function that runs when getting the item type, function(player, itemNum), expected to return itemNum and itemAmount overrides droppedstate = itemSprite, --table of sprites to use when item is dropped droppedfunc = droppedfunc or nil, --function that runs when the dropped item first spawns upon a strip, function(droppedMo, item, itemAmount), can return a spriteframe override showInRoulette = showInRoulette or nil, --function or boolean that determines wether to show the item in the roulette if function expected to return a boolean preusefunc = preusefunc or nil, --function that runs when th player is holding the attack button, before the item is used. the usefunc will run when the button is released instead of when pressed. function(player, cmd, ticsAttackHeld, playerJustPressedAttack?) toggled = true, patches = itemPatch, } function ret.getItemPatch(small) if small then return (ret.patches.smallTics or false), (ret.patches.smallP or "K_ISSAD") else return (ret.patches.bigTics or false), (ret.patches.bigP or "K_ITSAD") end end function ret.getItemPatchSingle(small, anime) local atics, get = ret.getItemPatch(small) local idx if atics then if ret.flags and (ret.flags & XIF_ICONFORAMT) then idx = max(min(anime, table.maxn(get)), 1) return get[idx], table.maxn(get) else idx = (leveltime/atics) % table.maxn(get) return get[idx + 1], 1 end else return get, 1 end end function ret.getItemDropSprite(animate) if animate and ret.droppedstate.tics > 0 then local anf = 1 if ret.flags and (ret.flags & XIF_ICONFORAMT) then anf = max(min(animate, #ret.droppedstate.pics), 1) else anf = ((animate/ret.droppedstate.tics) % #ret.droppedstate.pics) + 1 end local pic = ret.droppedstate.pics[anf] return pic[1], pic[2] else local pic = ret.droppedstate.pics[1] return pic[1], pic[2] end end return ret end local function addXItem(namespace, iName, bigpatch, smallpatch, flags, raceodds, battleodds, getfunc, usefunc, hudfunc, oddsfunc, resultfunc, droppedstate, showInRoulette, preusefunc, droppedfunc) local item = xItemLib.func.countItems() + 1 if type(namespace) ~= "table" then if type(namespace) ~= "string" then error("Tried to add item "..item..", first argument isn't a table or string", 2) end else namespace, iName, bigpatch, smallpatch, flags, raceodds, battleodds, getfunc, usefunc, hudfunc, oddsfunc, resultfunc, droppedstate, showInRoulette, preusefunc, droppedfunc = unpack(namespace, 1, 16) if type(namespace) ~= "string" then error("Tried to add item "..item..", first element in the passed table isn't a string", 2) end end --allocate an item object xItemLib.xItemData[item] = ClassXItem(item, namespace, iName, bigpatch, smallpatch, flags, raceodds, battleodds, getfunc, usefunc, hudfunc, oddsfunc, resultfunc, droppedstate, showInRoulette, preusefunc, droppedfunc) --default odds are nothing --this is separate for special "gobally set odds" functionality table.insert(xItemLib.xItemOddsRace, raceodds or {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}) table.insert(xItemLib.xItemOddsBattle, battleodds or {0, 0}) ----legacy behaviour for backwards compat (to be deprecated?)---- xItemLib.xItemNamespaces[namespace] = item if flags then xItemLib.xItemFlags[item] = flags end xItemLib.toggles.xItemToggles[item] = true ----end legacy behaviour---- --add extension data xItemLib.xItemCrossData.itemData[item] = {} local t = xItemLib.xItemCrossData.itemData[item] for i = 1, #xItemLib.xItemModNamespaces do local id = xItemLib.xItemModNamespaces[i] if not t[id] then t[id] = xItemLib.xItemCrossData.modData.defDat print("Added item mod data to item "..item.." from mod "..xItemLib.xItemCrossData.modData[id].iName) end --added mod, run init if wanted local fn = xItemLib.func.getXItemModValue(i, item, "itemaddedfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, item) if not status then error(err, 2) end end print("Added item "..item.." named "..namespace.." to xItems") print(xItemLib.func.countItems().." items are loaded ("..table.maxn(xItemLib.xItemData).." item objects)") end --must be exact match local function findItemByNamespace(name, ignoreErrs) ignoreErrs = $ or false local i = 0 if type(name) == "string" then --item namespace i = xItemLib.xItemNamespaces[name] if not i then if not ignoreErrs then error("can't find item "..name, 2) end return 0 end return i end if not ignoreErrs then error("passed non-string to xItem findItemByNamespace()", 2) end end --simple matching, doesn't check for case local function findItemByFriendlyName(name, ignoreErrs) ignoreErrs = $ or false local libdat = xItemLib local itdat = libdat.xItemData local libfn = libdat.func name = string.lower(name) local compName local possible = {} for i = 1, libfn.countItems() do compName = string.lower(itdat[i].name) if compName:find(name) then table.insert(possible, i) end end if #possible > 0 then return possible else if not ignoreErrs then error("can't find item "..name, 2) end return 0 end end local dat --item ID 0 will fully reset all odds local function resetOddsForItem(item, p, battle) if not p then return end if not p.xItemData then return end dat = p.xItemData if item == 0 then dat.xItem_battleOdds = nil dat.xItem_raceOdds = nil else local i = item if type(item) == "string" then --item namespace i = xItemLib.xItemNamespaces[item] if not i then print("can't find item "..item) return end end if battle then dat.xItem_battleOdds[i] = xItemLib.xItemData[i].defaultBattleOdds else dat.xItem_raceOdds[i] = xItemLib.xItemData[i].defaultRaceOdds end end end local function setPlayerOddsForItem(item, p, raceOdds, battleOdds) if not p then return end if not p.xItemData then return end dat = p.xItemData if raceOdds then if not dat.xItem_raceOdds then dat.xItem_raceOdds = {} end dat.xItem_raceOdds[item] = raceOdds end if battleOdds then if not dat.xItem_battleOdds then dat.xItem_battleOdds = {} end dat.xItem_battleOdds[item] = battleOdds end end local starttime = 6*TICRATE + (3*TICRATE/4) local function playerScaling(spbrush, playersInGame) return (8 - (spbrush and 2 or playersInGame)) end local function checkStartCooldown() if leveltime < 30*TICRATE + starttime then return true end return false end local function checkPowerItemOdds(odds, mashed, spbrush, playersInGame) if (franticitems) then odds = $ * 2 end odds = FixedMul($*FRACUNIT, FRACUNIT + ((xItemLib.func.getPlayerScaling(spbrush, playersInGame)*FRACUNIT) / 25))/FRACUNIT if (mashed > 0) then odds = FixedDiv(odds*FRACUNIT, FRACUNIT + mashed)/FRACUNIT end return odds end local function floatingItemThinker(mo) if not (mo and mo.valid) then return end local f = P_SpawnMobj(mo.x, mo.y, mo.z, MT_FLOATINGXITEM) f.momx = mo.momx f.momy = mo.momy f.momz = mo.momz f.scale = mo.scale f.destscale = mo.destscale f.threshold = mo.threshold f.movecount = mo.movecount f.flags = mo.flags f.flags2 = mo.flags2 P_SpawnShadowMobj(f) P_RemoveMobj(mo) end local function floatingItemSpecial(s, t) --if t.player and t.player.xItemData and (t.player.xItemData.xItem_roulette or t.player.xItemData.xItem_itemSlotLocked) then return true --end end local function floatingXItemThinker(mo) if not (mo and mo.valid) then return end if (mo.flags & MF_NOCLIPTHING) then if (P_CheckDeathPitCollide(mo)) then P_RemoveMobj(mo) return elseif (P_IsObjectOnGround(mo)) then mo.momx = 1 mo.momy = 0 mo.flags = MF_SLIDEME|MF_SPECIAL|MF_DONTENCOREMAP|MF_NOGRAVITY end else mo.angle = $ + 4 * ANG1 if (mo.flags2 & MF2_NIGHTSPULL) then if (not (mo.tracer) or not (mo.tracer.health) or mo.scale <= mapobjectscale >> 4) then P_RemoveMobj(mo) return end --fuck P_InstaThrust(mo, R_PointToAngle2(mo.x, mo.y, mo.tracer.x, mo.tracer.y), R_PointToDist2(mo.x, mo.y, mo.tracer.x, mo.tracer.y) >> 2) else local adj = FixedMul(FRACUNIT - cos(mo.angle), (mapobjectscale >> 3)) if (mo.eflags & MFE_VERTICALFLIP) then mo.z = mo.ceilingz - mo.height - adj else mo.z = mo.floorz + adj end end end local i = mo.threshold local amt = mo.movecount local sprite, frame = SPR_ITEM, 0 local idat = xItemLib.func.getItemDataById(mo.threshold) --set spriteframe here local anim = 0 if idat.flags and (idat.flags & XIF_ICONFORAMT) then anim = amt else anim = leveltime end --run droppedfunc function if it exists if idat.droppedfunc then sprite, frame = idat.droppedfunc(mo, i, amt) else sprite, frame = idat.getItemDropSprite(anim) end --crossmod "hooks" for j = 1, #xItemLib.xItemModNamespaces do local fn = xItemLib.func.getXItemModValue(j, item, "droppedfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, mo, i, amt) if not status then error(err, 2) end end if mo and mo.valid then mo.sprite = sprite mo.frame = frame|FF_PAPERSPRITE end end local function floatingXItemSpecial(s, t) if not t.player then return end local libdat = xItemLib local libfunc = libdat.func local p = t.player local kartstuff = p.kartstuff --hell if p.xItemData and (p.xItemData.xItem_roulette > 0 or p.xItemData.xItem_itemSlotLocked or kartstuff[k_stealingtimer] > 0 or kartstuff[k_stolentimer] > 0 or kartstuff[k_growshrinktimer] > 0 or kartstuff[k_rocketsneakertimer] > 0 or kartstuff[k_eggmanexplode] > 0 or (kartstuff[k_itemtype] and kartstuff[k_itemtype] ~= s.threshold) or kartstuff[k_itemheld]) then return true end if (G_BattleGametype() and kartstuff[k_bumper] <= 0) return true end -- Issue #12 -- Only kick in if floating item spawner is loaded + item is from spawner. -- The bug we're trying to fix is from pickup limiting, don't run this if not the case. if floatingitemspawner and s.spawnedbyspawner and s.limitpickup then -- Don't run the collision hook if we'd be picking more than we have. if kartstuff[k_itemamount] >= s.movecount then return true end -- Adjust to get the desired amount from the limited amount of pickups. s.movecount = $ - kartstuff[k_itemamount] end kartstuff[k_itemtype] = s.threshold kartstuff[k_itemamount] = $ + s.movecount local it = libfunc.getItemDataById(s.threshold) --crossmod "hooks" for j = 1, #libdat.xItemModNamespaces do local fn = libfunc.getXItemModValue(j, s.threshold, "pickupfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, s, t) if not status then error(err, 2) end end -- nah --if (kartstuff[k_itemamount] > 255) then -- kartstuff[k_itemamount] = 255 --end --run getfunc here too if it and it.getfunc then local status, err = pcall(it.getfunc, p, s.threshold) if not status then error(err, 2) end --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfunc.getXItemModValue(i, s.threshold, "getfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, s.threshold) if not status then error(err, 2) end end end S_StartSound(special, s.info.deathsound, p) s.tracer = t s.flags2 = $ | MF2_NIGHTSPULL s.destscale = mapobjectscale >> 4 s.scalespeed = $ << 1 s.flags = $ & ~MF_SPECIAL return true end local function itemBoxSpecial(s, t) if t.player and t.player.xItemData and (t.player.xItemData.xItem_roulette or t.player.xItemData.xItem_itemSlotLocked) then return true end end local function P_IsLocalPlayer(player) local i if player == consoleplayer then return true elseif splitscreen then for i = 1, splitscreen do -- Skip P1 if player == displayplayers[i] then return true end end end return false end --thanks yoshimo for porting all this stuff over local function playerArrowUnsetPositionThinking(mobj, scale) P_MoveOrigin(mobj, mobj.target.x, mobj.target.y, mobj.target.z + mobj.height + 16*FRACUNIT) mobj.angle = R_PointToAngle(mobj.x, mobj.y) + ANGLE_90 -- literally only happened because i wanted to ^L^R the SPR_ITEM's if not splitscreen and displayplayers[0].mo then scale = mobj.target.scale + FixedMul(FixedDiv(abs(R_PointToDist2(displayplayers[0].mo.x, displayplayers[0].mo.y, mobj.target.x, mobj.target.y)), RING_DIST), mobj.target.scale) if scale > 16*mobj.target.scale then scale = 16*mobj.target.scale end end mobj.destscale = scale K_FlipFromObject(mobj, mobj.target) return scale end local function vanillaArrowThinker(mo) local libdat = xItemLib local libfunc = libdat.func local status local err = false --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfunc.getXItemModValue(i, -1, "playerArrowSpawn") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, mo, mo.target) if not status then error(err, 2) end end local f = P_SpawnMobj(mo.x, mo.y, mo.z, MT_XITEMPLAYERARROW) f.threshold = mo.threshold f.movecount = mo.movecount f.flags = mo.flags f.flags2 = mo.flags2 f.target = mo.target --f.tracer = mo.tracer f.scale = mo.scale f.destscale = mo.destscale f.state = mo.state mo.state = S_NULL end local function playerArrowThinker(mobj) if mobj and mobj.valid and mobj.target and mobj.target.health and mobj.target.player and not mobj.target.player.spectator and mobj.target.player.health and mobj.target.player.playerstate ~= PST_DEAD -- and displayplayers[0].mo and not displayplayers[0].spectator then local mtrace = mobj.tracer local tm = mobj.target local tp = mobj.target.player local kartstuff = mobj.target.player.kartstuff local xitdat = mobj.target.player.xItemData if not xitdat then return true end local scale = 3*tm.scale mobj.color = tm.color K_MatchGenericExtraFlags(mobj, tm) if (G_RaceGametype() or kartstuff[k_bumper] <= 0) --#if 1 -- Set to 0 to test without needing to host or ((tp == displayplayers[0]) or P_IsLocalPlayer(tp)) --#endif then mobj.flags2 = $ | MF2_DONTDRAW end --P_UnsetThingPosition(mobj) if mobj.flags & MF_NOCLIP then scale = playerArrowUnsetPositionThinking(mobj, scale) else mobj.flags = $ | MF_NOCLIP scale = playerArrowUnsetPositionThinking(mobj, scale) mobj.flags = $ & ~MF_NOCLIP end --P_SetThingPosition(mobj) if not mtrace then local overlay = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_OVERLAY) mobj.tracer = overlay overlay.target = mobj overlay.state = S_PLAYERARROW_ITEM overlay.destscale = mobj.scale P_SetScale(overlay, (overlay.destscale)) mtrace = mobj.tracer end -- Do this in an easy way if xitdat.xItem_roulette then mtrace.color = tp.skincolor mtrace.colorized = true else mtrace.color = SKINCOLOR_NONE mtrace.colorized = false end if not (mobj.flags2 & MF2_DONTDRAW) then local idat = xItemLib.func.getItemDataById(kartstuff[k_itemtype]) local numberdisplaymin = 2 if idat.flags and (idat.flags & XIF_ICONFORAMT) then numberdisplaymin = idat.droppedstate.tics + 1 end -- Set it to use the correct states for its condition if xitdat.xItem_roulette then i = ((xitdat.xItem_roulette % (xItemLib.func.countItems() * 3)) / 3) + 1 local sprite, frame = idat.getItemDropSprite(0) mobj.state = S_PLAYERARROW_BOX mtrace.sprite = sprite mtrace.frame = FF_FULLBRIGHT|frame mtrace.flags2 = $ & ~MF2_DONTDRAW elseif kartstuff[k_stolentimer] > 0 then mobj.state = S_PLAYERARROW_BOX mtrace.sprite = SPR_ITEM mtrace.frame = FF_FULLBRIGHT|KITEM_HYUDORO if leveltime & 2 then mtrace.flags2 = $ & ~MF2_DONTDRAW else mtrace.flags2 = $ | MF2_DONTDRAW end elseif (kartstuff[k_stealingtimer] > 0) and (leveltime & 2) then mobj.state = S_PLAYERARROW_BOX mtrace.sprite = SPR_ITEM mtrace.frame = FF_FULLBRIGHT|KITEM_HYUDORO mtrace.flags2 = $ & ~MF2_DONTDRAW elseif kartstuff[k_eggmanexplode] > 1 then mobj.state = S_PLAYERARROW_BOX mtrace.sprite = SPR_ITEM mtrace.frame = FF_FULLBRIGHT|KITEM_EGGMAN if leveltime & 1 then mtrace.flags2 = $ & ~MF2_DONTDRAW else mtrace.flags2 = $ | MF2_DONTDRAW end elseif kartstuff[k_rocketsneakertimer] > 1 then --itembar = kartstuff[k_rocketsneakertimer] -- not today satan mobj.state = S_PLAYERARROW_BOX mtrace.sprite = SPR_ITEM mtrace.frame = FF_FULLBRIGHT|KITEM_ROCKETSNEAKER if leveltime & 1 then mtrace.flags2 = $ & ~MF2_DONTDRAW else mtrace.flags2 = $ | MF2_DONTDRAW end elseif kartstuff[k_growshrinktimer] > 0 then mobj.state = S_PLAYERARROW_BOX mtrace.sprite = SPR_ITEM mtrace.frame = FF_FULLBRIGHT|KITEM_GROW if leveltime & 1 then mtrace.flags2 = $ & ~MF2_DONTDRAW else mtrace.flags2 = $ | MF2_DONTDRAW end elseif kartstuff[k_itemtype] and kartstuff[k_itemamount] > 0 then mobj.state = S_PLAYERARROW_BOX --find sprite to use local sprite, frame if idat.flags and (idat.flags & XIF_ICONFORAMT) then sprite, frame = idat.getItemDropSprite(kartstuff[k_itemamount]) else sprite, frame = idat.getItemDropSprite(leveltime) end --set correct sprite BEFORE THE GAME DOES IT FFS mobj.state = S_PLAYERARROW_BOX mtrace.sprite = sprite mtrace.frame = FF_FULLBRIGHT|frame if kartstuff[k_itemheld] then if leveltime & 1 then mtrace.flags2 = $ & ~MF2_DONTDRAW else mtrace.flags2 = $ | MF2_DONTDRAW end else mtrace.flags2 = $ & ~MF2_DONTDRAW end else mobj.state = S_PLAYERARROW mtrace.state = S_PLAYERARROW_ITEM end mtrace.destscale = scale if kartstuff[k_itemamount] >= numberdisplaymin and kartstuff[k_itemamount] <= 10 -- Meh, too difficult to support greater than this; convert this to a decent HUD object and then maybe :V then local number = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_OVERLAY) local numx = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_OVERLAY) number.target = mobj number.state = S_PLAYERARROW_NUMBER P_SetScale(number, mtrace.scale) number.destscale = scale number.frame = FF_FULLBRIGHT|(kartstuff[k_itemamount]) numx.target = mobj numx.state = S_PLAYERARROW_X P_SetScale(numx, mtrace.scale) numx.destscale = scale end if K_IsPlayerWanted(tp) and mobj.movecount ~= 1 then local wanted = P_SpawnMobj(mobj.x, mobj.y, mobj.z, MT_PLAYERWANTED) wanted.target = tm wanted.tracer = mobj P_SetScale(wanted, mobj.scale) wanted.destscale = scale mobj.movecount = 1 elseif not K_IsPlayerWanted(tp) then mobj.movecount = 0 end else mtrace.flags2 = $ | MF2_DONTDRAW end elseif mobj.health > 0 then P_KillMobj(mobj, nil, nil) return true end end --odds functions start local function xItem_GetItemResult(p, getitem, onlyReturn, skipGetFunc) if not p then return end local libdat = xItemLib local libfn = libdat.func local it = libfn.getItemDataById(getitem) local kartstuff = p.kartstuff local itr, amtr = 0, 0 if it and it.resultfunc then itr, amtr = it.resultfunc(p, getitem) if not (onlyReturn) then kartstuff[k_itemtype], kartstuff[k_itemamount] = itr, amtr end else if (getitem <= 0 or getitem > libfn.countItems()) then -- Sneaker (Fallback) (xItem doesn't implement SadFace) if (getitem ~= 0) then print("ERROR: xItem_GetItemResult - Item roulette gave bad item "..getitem.." :(") end itr = 1 if not (onlyReturn) then kartstuff[k_itemtype] = itr end else itr = getitem if not (onlyReturn) then kartstuff[k_itemtype] = itr end end amtr = 1 if not (onlyReturn) then kartstuff[k_itemamount] = amtr end end if skipGetFunc then return itr, amtr end --custom on get functions if it and it.getfunc then local status, err = pcall(it.getfunc, p, getitem) if not status then error(err, 2) end --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, getitem, "getfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, getitem) if not status then error(err, 2) end end end return itr, amtr end local function xItem_GetOdds(pos, item, mashed, spbrush, p, custTable) local distvar = 64*14 local newodds = 0 local pingame = 0 local pexiting = 0 local first local second local secondist = 0 local libfn = xItemLib.func local itdat = libfn.getItemDataById(item) local kartstuff = p.kartstuff if not p then return end if not p.xItemData then return end dat = p.xItemData local itemenabled = { libfn.getCVar("sneaker"), libfn.getCVar("rocketsneaker"), libfn.getCVar("invincibility"), libfn.getCVar("banana"), libfn.getCVar("eggmanmonitor"), libfn.getCVar("orbinaut"), libfn.getCVar("jawz"), libfn.getCVar("mine"), libfn.getCVar("ballhog"), libfn.getCVar("selfpropelledbomb"), libfn.getCVar("grow"), libfn.getCVar("shrink"), libfn.getCVar("thundershield"), libfn.getCVar("hyudoro"), libfn.getCVar("pogospring"), libfn.getCVar("kitchensink"), libfn.getCVar("triplesneaker"), libfn.getCVar("triplebanana"), libfn.getCVar("decabanana"), libfn.getCVar("tripleorbinaut"), libfn.getCVar("quadorbinaut"), libfn.getCVar("dualjawz") } if item <= 0 then return 0 end if custTable then if (not custTable[item]) or (not custTable[item][pos]) then if (G_BattleGametype()) then if dat.xItem_battleOdds and dat.xItem_battleOdds[item] then newodds = dat.xItem_battleOdds[item][pos] else newodds = xItemLib.xItemOddsBattle[item][pos] end else if dat.xItem_raceOdds and dat.xItem_raceOdds[item] then newodds = dat.xItem_raceOdds[item][pos] else newodds = xItemLib.xItemOddsRace[item][pos] end end else newodds = custTable[item][pos] end else if (G_BattleGametype()) then if dat.xItem_battleOdds and dat.xItem_battleOdds[item] then newodds = dat.xItem_battleOdds[item][pos] else newodds = xItemLib.xItemOddsBattle[item][pos] end else if dat.xItem_raceOdds and dat.xItem_raceOdds[item] then newodds = dat.xItem_raceOdds[item][pos] else newodds = xItemLib.xItemOddsRace[item][pos] end end end --print("got odds "..newodds) if newodds then newodds = $ << 2 end if item <= table.maxn(itemenabled) and not itemenabled[item] then newodds = 0 end if not xItemLib.toggles.xItemToggles[item] then newodds = 0 end if newodds then for pi in players.iterate do local piks = pi.kartstuff --print("checking player " + pi.name) if pi.spectator then continue end if (not G_BattleGametype()) or piks[k_bumper] then pingame = $+1 end if pi.exiting or (pi.pflags & PF_TIMEOVER == PF_TIMEOVER) then pexiting = $+1 end if pi.mo then local checkItem = piks[k_itemtype] if itdat.flags and (itdat.flags & XIF_UNIQUE == XIF_UNIQUE) and checkItem == item then newodds = 0 end if (not G_BattleGametype()) then if (piks[k_position] == 1 and (first == nil)) first = pi.mo --print("got first") end if (piks[k_position] == 2 and (second == nil)) second = pi.mo --print("got second") end end end end if (first and second) then --print("getting secondist") local p1 = first local p2 = second secondist = R_PointToDist2(0, p1.x, R_PointToDist2(p1.y, p1.z, p2.y, p2.z), p2.x) / mapobjectscale if (franticitems) then secondist = (15 * $) / 14 end secondist = ((28 + (8-min(pingame, 16))) * $) / 28 end --replaces the switch-case with a table of flags, for modularity if itdat.flags then if (itdat.flags & XIF_POWERITEM == XIF_POWERITEM) then newodds = libfn.getPowerOdds($, mashed, spbrush, pingame) end if (itdat.flags & XIF_COOLDOWNINDIRECT == XIF_COOLDOWNINDIRECT) then if (indirectitemcooldown > 0) then newodds = 0 end end if (itdat.flags & XIF_COOLDOWNONSTART == XIF_COOLDOWNONSTART) then if libfn.getStartCountdown() then newodds = 0 end end end end local status = true --special cases, custom items if itdat and itdat.oddsfunc then status, newodds = pcall(itdat.oddsfunc, $2, pos, mashed, spbrush, p, secondist, pingame, pexiting, item) if not status then error(newodds, 2) return 0 end end --crossmod "hooks" for i = 1, #xItemLib.xItemModNamespaces do local fn = libfn.getXItemModValue(i, item, "oddsfunc") if fn == nil or (not type(fn) == "function") then continue end status, newodds = pcall(fn, $2, pos, mashed, spbrush, p, secondist, pingame, pexiting, item) if not status then error(newodds, 2) end end newodds = tonumber($) or 0 distvar = nil pingame = nil pexiting = nil first = nil second = nil secondist = nil return newodds end local function setupDistTable(odds, num, disttable, distlen) local a = 0 for i = num, 1, -1 do a = $+1 disttable[distlen + a] = odds end return a end local aggressiondistance = 600 local function xItem_FindUseOdds(p, mashed, pingame, spbrush, dontforcespb) if not p then return end local distvar = 64*14 local i local pdis = 0 local useodds = 1 local oddsvalid = {} local disttable = {} local distlen = 0 local FAUXPOS = G_BattleGametype() and 2 or 10 local libdat = xItemLib local libfn = libdat.func local pks = p.kartstuff --make faux positions valid or not for i = 1, FAUXPOS do local available = false for j = 1, libfn.countItems() do if libfn.getOdds(i, j, mashed, spbrush, p) > 0 then available = true break end end oddsvalid[i] = available end --calc distances (honestly kinda weiiiirdddd) if xItemLib.cvars.bItemDistCalcConga.value then -- conga line calc, inspired by Sal's rr-item-cruncher branch if (p.mo and p.mo.valid) then local playerMoList = {} for q in players.iterate do if not (q.mo and q.mo.valid) then continue end playerMoList[q.kartstuff[k_position]] = q.mo end local toposition = p.kartstuff[k_position] - 1 while toposition > 0 do local from = playerMoList[toposition + 1] local to = nil while not to and toposition > 0 do -- Ensures that if somehow the list has any gaps we skip over them, and prevent infinite looping to = playerMoList[toposition] toposition = $-1 end if to and from then -- if somehow 1st isn't in the list, to would end up nil, so we need to catch that --local dist = (FixedHypot(FixedHypot(from.x - to.x, from.y - to.y), from.z - to.z)) --print("from "..skins[from.skin].name.." to "..skins[to.skin].name.." is "..dist) pdis = $ + FixedHypot(FixedHypot(from.x/4 - to.x/4, from.y/4 - to.y/4), from.z/4 - to.z/4) -- trying to not overflow FixedHypot with large distances if toposition+1 == p.kartstuff[k_position] then -- When we check only the player immmediately ahead local ahead = FixedHypot(FixedHypot(from.x/4 - to.x/4, from.y/4 - to.y/4), from.z/4 - to.z/4)*4 to = playerMoList[toposition+2] if to then local behind = FixedHypot(FixedHypot(from.x/4 - to.x/4, from.y/4 - to.y/4), from.z/4 - to.z/4)*4 local closerange = aggressiondistance*mapobjectscale from.xitemcloserange = not (ahead > closerange and behind > closerange) end end end end pdis = ($ / mapobjectscale)*2 -- Scale it. This results in pdis values a bit weaker in smaller games, and a bit stronger in larger games than the original formula pdis = ((130 + 8 - min(pingame, 16)) * $) / 130 -- Again, but this time base it on playercount, same form as the following vanilla adjustment, but much weaker since it stacks with it end else -- original vanilla calc for p2 in players.iterate do if p.mo and p2 and (not p2.spectator) and p2.mo and (p2.kartstuff[k_position] ~= 0) and p2.kartstuff[k_position] < pks[k_position] then pdis = $ + FixedHypot(FixedHypot(p.mo.x/4 - p2.mo.x/4, p.mo.y/4 - p2.mo.y/4), p.mo.z/4 - p2.mo.z/4)*4 / mapobjectscale * (pingame - p2.kartstuff[k_position]) / max(1, ((pingame - 1) * (pingame + 1) / 3)) end end end --set up distributions if (G_BattleGametype()) then if (pks[k_roulettetype] == 1 and oddsvalid[2]) -- 1 is the extreme odds of player-controlled "Karma" items useodds = 2 else useodds = 1 if (oddsvalid[1] == false and oddsvalid[2]) -- try to use karma odds as a fallback useodds = 2 end end else if oddsvalid[2] then distlen = $ + libfn.setupDist(2, 1, disttable, distlen) end if oddsvalid[3] then distlen = $ + libfn.setupDist(3, 1, disttable, distlen) end if oddsvalid[4] then distlen = $ + libfn.setupDist(4, 1, disttable, distlen) end if oddsvalid[5] then distlen = $ + libfn.setupDist(5, 2, disttable, distlen) end if oddsvalid[6] then distlen = $ + libfn.setupDist(6, 2, disttable, distlen) end if oddsvalid[7] then distlen = $ + libfn.setupDist(7, 3, disttable, distlen) end if oddsvalid[8] then distlen = $ + libfn.setupDist(8, 3, disttable, distlen) end if oddsvalid[9] then distlen = $ + libfn.setupDist(9, 1, disttable, distlen) end if (franticitems) then -- Frantic items make the distances between everyone artifically higher, for crazier items pdis = (15 * $) / 14 end if (spbrush) then -- SPB Rush Mode: It's 2nd place's job to catch-up items and make 1st place's job hell pdis = (3 * $) >> 1 end if xItemLib.cvars.bSmugglerBonus.value and smuggleDetection() and pks[k_position] > 1 then -- Haha, FUCK YOU pdis = (6*$)/5 end pdis = ((28 + 8 - min(pingame, 16)) * $) / 28 if pingame == 1 and oddsvalid[1] then -- Record Attack, or just alone useodds = 1 elseif pdis <= 0 then -- (64*14) * 0 = 0 useodds = disttable[1] elseif pks[k_position] == 2 and oddsvalid[10] and (spbplace == -1) and (not indirectitemcooldown) and (not dontforcespb) and (pdis > distvar*6) then -- Force SPB in 2nd useodds = 10 elseif pdis > distvar * ((12 * distlen) / 14) then -- (64*14) * 12 = 10752 useodds = disttable[distlen] else for i = 1, 12 do if pdis <= distvar * ((i * distlen) / 14) then useodds = disttable[((i * distlen) / 14)] + 1 break end end end end lastpdis = pdis distvar = nil i = nil pdis = nil distlen = nil return useodds end local function xItem_ItemRoulette(p, cmd) if not p then return end if not p.xItemData then return end dat = p.xItemData local i local pingame = 0 local roulettestop local useodds = 0 local spawnchance = {} local totalspawnchance = 0 local bestbumper = 0 local mashed = 0 local dontforcespb = false local spbrush = false local kartstuff = p.kartstuff local libdat = xItemLib local libfn = libdat.func if leveltime == 0 or p.spectator then dat.xItem_roulette = 0 kartstuff[k_roulettetype] = 0 libfn.resetItemOdds(0, p) end --stripped during roulette clears our fake one if dat.xItem_roulette and kartstuff[k_itemroulette] == 0 then dat.xItem_roulette = 0 kartstuff[k_roulettetype] = 0 end if kartstuff[k_itemroulette] and dat.xItem_roulette == 0 then dat.xItem_roulette = kartstuff[k_itemroulette] kartstuff[k_itemroulette] = 4 for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "startitemroll") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p) if not status then error(err, 2) end end if dat.xItem_resetOddsNextRoll == -1 then libfn.resetItemOdds(0, p) dat.xItem_resetOddsNextRoll = 0 end end if kartstuff[k_itemroulette] and kartstuff[k_itemroulette] < 4 and (kartstuff[k_roulettetype] == 2) then dat.xItem_roulette = kartstuff[k_itemroulette] kartstuff[k_itemroulette] = 4 kartstuff[k_roulettetype] = 2 if dat.xItem_resetOddsNextRoll == -1 then libfn.resetItemOdds(0, p) dat.xItem_resetOddsNextRoll = 0 end end if dat.xItem_roulette and p.mo and p.mo.health then kartstuff[k_itemroulette] = 4 dat.xItem_roulette = $+1 else return end -- Gotta check how many players are active at this moment. for p in players.iterate do if p.spectator then continue end pingame = $+1 p.spawntowaypoint = true if (p.exiting) then dontforcespb = true end if (kartstuff[k_bumper] > bestbumper) bestbumper = kartstuff[k_bumper] end end if (pingame <= 2) dontforcespb = true end -- This makes the roulette produce the random noises. if P_IsLocalPlayer(p) and dat.xItem_roulette % 3 == 1 and p.mo and p.mo.health then S_StartSound(nil, sfx_itrol1 + ((dat.xItem_roulette / 3) % 8), p) end roulettestop = TICRATE + (3*(pingame - kartstuff[k_position])) if (G_RaceGametype()) spbrush = (spbplace ~= -1 and kartstuff[k_position] == spbplace+1) end local splitplaynum = p.splitscreenindex + 1 if P_IsLocalPlayer(p) and ((dat.xItem_roulette < 4) or (dat.xItem_roulette % 3 == 0)) then useodds = libfn.findUseOdds(p, 0, pingame, spbrush, dontforcespb) availableItems[splitplaynum] = libfn.hudFindRouletteItems(p, useodds, 0, spbrush) end if (p and p.mo and p.mo.health and not (p.spectator or p.exiting)) and ((cmd.buttons & BT_ATTACK) or (cmd.buttons & XBT_ATTACKDISABLED)) and libdat.toggles.debugItem and libdat.cvars.bXRig.value then kartstuff[k_itemroulette] = TICRATE*3 dat.xItem_roulette = TICRATE*3 end if (((cmd.buttons & BT_ATTACK) or (cmd.buttons & XBT_ATTACKDISABLED)) and not (kartstuff[k_eggmanheld] or kartstuff[k_itemheld]) and dat.xItem_roulette >= roulettestop and not modeattacking) then -- Mashing reduces your chances for the good items mashed = FixedDiv(dat.xItem_roulette*FRACUNIT, ((TICRATE*3)+roulettestop)*FRACUNIT) - FRACUNIT elseif (not(dat.xItem_roulette >= (TICRATE*3))) then i = nil pingame = nil roulettestop = nil useodds = nil totalspawnchance = nil bestbumper = nil mashed = nil dontforcespb = nil spbrush = nil return end useodds = libfn.findUseOdds(p, mashed, pingame, spbrush, dontforcespb) if (kartstuff[k_roulettetype] == 2) then -- Fake items kartstuff[k_eggmanexplode] = max($, 4*TICRATE) --in case this runs after stuff like egg panic S_StartSound(nil, sfx_itrole, p) dat.xItem_itemSlotLocked = false --just in case if dat.xItem_resetOddsNextRoll == 1 then libfn.resetItemOdds(0, p) dat.xItem_resetOddsNextRoll = 0 end for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "enditemroll") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, useodds, mashed, spbrush) if not status then error(err, 2) end end kartstuff[k_itemroulette] = 0 dat.xItem_roulette = 0 kartstuff[k_roulettetype] = 0 i = nil pingame = nil roulettestop = nil useodds = nil totalspawnchance = nil bestbumper = nil mashed = nil dontforcespb = nil spbrush = nil return end --debugitem if (libdat.toggles.debugItem ~= 0 and not modeattacking) then local di = min(libdat.toggles.debugItem, libfn.countItems()) libfn.getItemResult(p, di, false) kartstuff[k_itemamount] = libdat.cvars.dItemDebugAmt.value S_StartSound(nil, sfx_dbgsal, p) if dat.xItem_resetOddsNextRoll == 1 then libfn.resetItemOdds(0, p) dat.xItem_resetOddsNextRoll = 0 end for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "enditemroll") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, useodds, mashed, spbrush) if not status then error(err, 2) end end kartstuff[k_itemblink] = TICRATE kartstuff[k_itemblinkmode] = 2 kartstuff[k_itemroulette] = 0 dat.xItem_roulette = 0 kartstuff[k_roulettetype] = 0 di = nil i = nil pingame = nil roulettestop = nil useodds = nil totalspawnchance = nil bestbumper = nil mashed = nil dontforcespb = nil spbrush = nil return end for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "enditemroll") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, useodds, mashed, spbrush) if not status then error(err, 2) end end for i = 1, libfn.countItems() do local o = libfn.getOdds(useodds, i, mashed, spbrush, p) if o > 0 then totalspawnchance = $ + o end spawnchance[i] = totalspawnchance end -- Award the player whatever power is rolled if (totalspawnchance > 0) then local spawnidx = P_RandomKey(totalspawnchance) for i = 1, libfn.countItems() do if spawnchance[i] > spawnidx then if xItemLib.cvars.bServerLogRolls.value and consoleplayer == server then local itdat = libfn.getItemDataById(i) local racetime = max(leveltime - starttime, 0) -- we useodds-1 here to use the vanilla 0 based odds numbering print("Player "..#p.." "..p.name.." got "..itdat.name.." with position "..p.kartstuff[k_position].." of "..pingame.." and useodds "..(useodds-1).." and pdis "..lastpdis.." and spbrush "..tostring(spbrush).." at leveltime "..leveltime.." aka "..G_TicsToMinutes(racetime)..":"..G_TicsToSeconds(racetime)..":"..G_TicsToCentiseconds(racetime)) end libfn.getItemResult(p, i, false) break end end spawnidx = nil else -- failsafe if no item could be obtained if xItemLib.cvars.bServerLogRolls.value and consoleplayer == server then local itdat = libfn.getItemDataById(1) local racetime = max(leveltime - starttime, 0) -- we useodds-1 here to use the vanilla 0 based odds numbering print("FAILSAFE: Player "..#p.." "..p.name.." got failsafe "..itdat.name.." with position "..p.kartstuff[k_position].." of "..pingame.." and useodds "..(useodds-1).." and pdis "..lastpdis.." and spbrush "..tostring(spbrush).." at leveltime "..leveltime.." aka "..G_TicsToMinutes(racetime)..":"..G_TicsToSeconds(racetime)..":"..G_TicsToCentiseconds(racetime)) end libfn.getItemResult(p, 1, false) end if dat.xItem_resetOddsNextRoll == 1 then libfn.resetItemOdds(0, p) dat.xItem_resetOddsNextRoll = 0 end S_StartSound(nil, ((kartstuff[k_roulettetype] == 1) and sfx_itrolk or (mashed and sfx_itrolm or sfx_itrolf)), p) kartstuff[k_itemblink] = TICRATE kartstuff[k_itemblinkmode] = ((kartstuff[k_roulettetype] == 1) and 2 or (mashed and 1 or 0)) kartstuff[k_itemroulette] = 0 dat.xItem_roulette = 0 --Since we're done, clear the roulette number kartstuff[k_roulettetype] = 0 --This too i = nil pingame = nil roulettestop = nil useodds = nil totalspawnchance = nil bestbumper = nil mashed = nil dontforcespb = nil spbrush = nil end local function xItem_handleDistributionDebugger(pa) if not pa then return end local libdat = xItemLib local libfn = libdat.func if (libdat.cvars.bItemDebugDistrib.value or libdat.cvars.bItemDebugDistribReplayOnly.value and replayplayback) and displayplayers[0] == pa then local pingame = 0 local dontforcespb = false local spbrush = false local kartstuff = pa.kartstuff local bestbumper = 0 for p in players.iterate do if p.spectator then continue end if not p then continue end pingame = $+1 if (p.exiting) then dontforcespb = true end if (kartstuff[k_bumper] > bestbumper) bestbumper = kartstuff[k_bumper] end end if (pingame <= 2) dontforcespb = true end if (G_RaceGametype()) spbrush = (spbplace ~= -1 and kartstuff[k_position] == spbplace+1) end local useodds = libfn.findUseOdds(pa, 0, pingame, spbrush, dontforcespb) debuggerDistributions = libfn.findItemDistributions(pa, useodds, 0, spbrush) end end local function canUseItem(p) return (p and p.mo and p.mo.health > 0 and (not p.spectator) and (not p.exiting) and p.kartstuff[k_spinouttimer] == 0 and p.kartstuff[k_squishedtimer] == 0 and p.kartstuff[k_respawn] == 0 and not(p.xItemData.xItem_attackedDuringRoll or p.xItemData.xItem_itemSlotLockedTimer)) end local function playerCmdHook(p, cmd) if not p then return end if p.xItemData and p.xItemData.xItem_itemSlotLockedTimer then if cmd.buttons & BT_ATTACK then cmd.buttons = ($|XBT_ATTACKDISABLED) & ~BT_ATTACK end end end local function playerSpawn(p) if not p then return end if p.spectator or p.exiting then return end if not p.xItemData then return end dat = p.xItemData if dat.xItem_roulette and leveltime then -- restart the roulette if we have any roulette time dat.xItem_roulette = 1 p.kartstuff[k_itemroulette] = 1 end end local function mapChange() for p in players.iterate do if not p.xItemData then continue end p.xItemData.xItem_roulette = 0 p.kartstuff[k_itemroulette] = 0 xItemLib.func.resetItemOdds(0, p) end end local function setPlayerItemCooldown(p, time, force) if p and p.xItemData and not(p.spectator or p.exiting) then force = $ or false if force then p.xItemData.xItem_itemSlotLockedTimerMax = time p.xItemData.xItem_itemSlotLockedTimer = time else if time >= p.xItemData.xItem_itemSlotLockedTimer then p.xItemData.xItem_itemSlotLockedTimerMax = time p.xItemData.xItem_itemSlotLockedTimer = time end end end end local function xItem_BasicItemHandler(p, cmd) if not p then return end if not p.xItemData then return end dat = p.xItemData local kartstuff = p.kartstuff local libdat = xItemLib local libfunc = libdat.func local cv = libdat.cvars local item = kartstuff[k_itemtype] local itdat = libfunc.getItemDataById(item) local canUseItem = libfunc.canUseItem local attackJustDown = (((cmd.buttons & BT_ATTACK) or (cmd.buttons & XBT_ATTACKDISABLED)) and dat.xItem_pressedUse == 0) local attackDown = ((cmd.buttons & BT_ATTACK) or (cmd.buttons & XBT_ATTACKDISABLED)) local attackReleased = ((dat.xItem_pressedUse) and not ((cmd.buttons & BT_ATTACK) or (cmd.buttons & XBT_ATTACKDISABLED))) local noHyudoro = (p.kartstuff[k_stolentimer] == 0 and p.kartstuff[k_stealingtimer] == 0) local status, err if itdat and itdat.preusefunc then if canUseItem(p) and noHyudoro then if attackDown then status, err = pcall(itdat.preusefunc, p, cmd, dat.xItem_pressedUse, attackJustDown) if not status then error(err, 2) end --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfunc.getXItemModValue(i, item, "preusefunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, cmd, dat.xItem_pressedUse, attackJustDown) if not status then error(err, 2) end end elseif attackReleased then if itdat and itdat.usefunc then status, err = pcall(itdat.usefunc, p, cmd) if not status then error(err, 2) end end if itdat.flags and (itdat.flags & XIF_LOCKONUSE == XIF_LOCKONUSE) then dat.xItem_itemSlotLocked = true end --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfunc.getXItemModValue(i, item, "usefunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, cmd) if not status then error(err, 2) end end end end elseif itdat and canUseItem(p) and attackJustDown and noHyudoro then --print("using item "..item) if itdat.flags and (itdat.flags & XIF_LOCKONUSE == XIF_LOCKONUSE) then dat.xItem_itemSlotLocked = true end if itdat and itdat.usefunc then --print("has a function") status, err = pcall(itdat.usefunc, p, cmd) if not status then error(err, 2) end end --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfunc.getXItemModValue(i, item, "usefunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, cmd) if not status then error(err, 2) end end elseif (not item) and (not dat.xItem_lastItem) and attackJustDown and libdat.toggles.debugItem and cv.bXRig.value then kartstuff[k_itemroulette] = TICRATE*3 end if attackDown and (dat.xItem_roulette > 0 or p.kartstuff[k_respawn] ~= 0) then dat.xItem_attackedDuringRoll = true end if (not attackDown) and dat.xItem_roulette == 0 and p.kartstuff[k_respawn] == 0 and dat.xItem_attackedDuringRoll then dat.xItem_attackedDuringRoll = false end p.findwaypoint, p.racebot = nil, nil if ((dat.xItem_pressedUse) and not attackDown) then dat.xItem_pressedUse = 0 elseif attackDown then dat.xItem_pressedUse = $+1 end if dat.xItem_itemSlotLockedTimer then dat.xItem_itemSlotLockedTimer = $ - 1 if dat.xItem_itemSlotLockedTimer == 0 then dat.xItem_itemSlotLockedTimerMax = 0 end end dat.xItem_lastItem = item end --port of item hud to lua --now even more modular and extensible, and specifically made for xItemLib local splitplayers = {} local function splitnum(p) for i = 1, #splitplayers do if splitplayers[i] == p return i-1 end end end local BASEVIDWIDTH = 320 local BASEVIDHEIGHT = 200 local ITEM_X = 5 local ITEM_Y = 5 local ITEM1_X = -9 local ITEM1_Y = -8 local ITEM2_X = BASEVIDWIDTH-39 local ITEM2_Y = -8 local colormode = TC_RAINBOW local localcolor = SKINCOLOR_NONE local function xItem_FindHudFlags(v, p, c) if splitscreen < 2 then -- don't change shit for THIS splitscreen. local ITEM_Y_OFF = ITEM_Y if splitscreen == 1 then ITEM_Y_OFF = 3 end -- Apply insignificantly small offset for 2P splitscreen. if c.pnum == 1 then return ITEM_X, ITEM_Y_OFF, V_SNAPTOTOP|V_SNAPTOLEFT, false else return ITEM_X, ITEM_Y_OFF, V_SNAPTOLEFT|V_SPLITSCREEN, false end else -- now we're having a fun game. if c.pnum == 1 or c.pnum == 3 then -- If we are P1 or P3... return ITEM1_X, ITEM1_Y, (c.pnum == 3 and V_SPLITSCREEN or V_SNAPTOTOP)|V_SNAPTOLEFT, false -- flip P3 to the bottom. else -- else, that means we're P2 or P4. return ITEM2_X, ITEM2_Y, (c.pnum == 4 and V_SPLITSCREEN or V_SNAPTOTOP)|V_SNAPTORIGHT, true end end end local function xItem_DrawItemBox(v, p, c, fill) fill = $ or false local fx, fy, fflags = xItemLib.func.hudFindFlags(v, p, c) local localbg = {v.cachePatch("K_ITBG"), v.cachePatch("K_ISBG")} if splitscreen < 2 then -- don't change shit for THIS splitscreen. if fill then local rectTopX, rectTopY, rectSize = 10, 10, 30 v.drawFill(fx + rectTopX, fy + rectTopY, rectSize, rectSize, 25|fflags) end v.draw(fx, fy, localbg[1], V_HUDTRANS|fflags) else -- now we're having a fun game. if fill then local rectTopX, rectTopY, rectSize = 16, 15, 16 v.drawFill(fx + rectTopX, fy + rectTopY, rectSize, rectSize, 25|fflags) end v.draw(fx, fy, localbg[2], V_HUDTRANS|fflags) end end local function xItem_DrawTimerBar(v, p, c) if not p then return end if not p.xItemData then return end dat = p.xItemData local fx, fy, fflags = xItemLib.func.hudFindFlags(v, p, c) local kp_itemtimer = {v.cachePatch("K_ITIMER"), v.cachePatch("K_ISIMER")} local itembar = dat.xItem_timerBar local maxitembar = dat.xItem_maxTimerBar if itembar > 0 then local offset = 1 local barlength = 26 local height = 2 local x = 11 local y = 35 if splitscreen > 1 then offset = 2 barlength = 12 height = 1 x = 17 y = 27 end local fill = ((itembar*barlength)/maxitembar) local length = min(barlength, fill) v.draw(fx+x, fy+y, kp_itemtimer[offset], V_HUDTRANS|fflags) -- The left dark "AA" edge if length == 2 then v.drawFill(fx+x+1, fy+y+1, 2, height, 12|fflags) else v.drawFill(fx+x+1, fy+y+1, 1, height, 12|fflags) end -- The bar itself if (length > 2) then v.drawFill(fx+x+length, fy+y+1, 1, height, 12|fflags) -- the right one if (height == 2) then v.drawFill(fx+x+2, fy+y+2, length-2, 1, 8|fflags) -- the dulled underside end v.drawFill(fx+x+2, fy+y+1, length-2, 1, 120|fflags) -- the shine end end dat.xItem_timerBar = 0 dat.xItem_maxTimerBar = 0 end local function xItem_DrawItemMinecraftCooldown(v, p, c) if not p then return end if not p.xItemData then return end dat = p.xItemData if leveltime % 2 then return end if not(dat.xItem_itemSlotLockedTimer or dat.xItem_itemSlotLockedTimerMax) then return end local fx, fy, fflags = xItemLib.func.hudFindFlags(v, p, c) local rectTop = 5 local rectSize = 40 local localbg = {v.cachePatch("K_ITBG"), v.cachePatch("K_ISBG")} local itembar = dat.xItem_itemSlotLockedTimer local maxitembar = dat.xItem_itemSlotLockedTimerMax local length = min(rectSize, ((itembar*rectSize)/maxitembar)) if splitscreen < 2 then -- don't change shit for THIS splitscreen. v.drawFill(fx + rectTop, fy + rectTop + (rectSize - length), rectSize, length, 2|fflags) else -- now we're having a fun game. local rectTopV = 13 rectTop = 14 rectSize = 20 length = min(rectSize, ((itembar*rectSize)/maxitembar)) v.drawFill(fx + rectTop, fy + rectTopV + (rectSize - length), rectSize, length, 2|fflags) end end local function xItem_DrawCooldownItemBox(v, p, c) local libfn = xItemLib.func libfn.hudDrawItemBox(v, p, c, true) libfn.hudDrawItemCooldown(v, p, c) end local function xItem_DrawItem(v, p, c, i, blink, disableBox) if not p then return end if not p.xItemData then return end disableBox = $ or false local fx, fy, fflags, flipamount = xItemLib.func.hudFindFlags(v, p, c) local itTflags = V_HUDTRANS local offset = ((splitscreen > 1) and 2 or 1) local get local kp_itemx = v.cachePatch("K_ITX") local localmul = {v.cachePatch("K_ITMUL"), v.cachePatch("K_ISMUL")} local kp_itemtimer = {v.cachePatch("K_ITIMER"), v.cachePatch("K_ISIMER")} local rouletteAnim = false local libdat = xItemLib local libfn = libdat.func local kartstuff = p.kartstuff if i == nil then i = kartstuff[k_itemtype] end local itdat = libfn.getItemDataById(i) local colour = v.getColormap(TC_DEFAULT, SKINCOLOR_NONE) if i and p and itdat.flags and (itdat.flags & XIF_COLPATCH2PLAYER == XIF_COLPATCH2PLAYER) then colour = v.getColormap(TC_DEFAULT, p.skincolor) end local s, icn if i > 0 then local idx = 0 if itdat.flags and (itdat.flags & XIF_ICONFORAMT) then idx = kartstuff[k_itemamount] else idx = leveltime end s, get = itdat.getItemPatchSingle(splitscreen >= 2, idx) icn = v.cachePatch(s) end if icn == nil then icn = v.cachePatch("K_ITSAD") end if p.xItemData.xItem_roulette then colormode = TC_RAINBOW localcolor = p.skincolor or SKINCOLOR_GREY colour = v.getColormap(colormode, localcolor) if libdat.cvars.bRouletteAnim.value then rouletteAnim = true end end if kartstuff[k_itemblink] and leveltime%2 == 1 then colormode = TC_BLINK if kartstuff[k_itemblinkmode] == 2 then localcolor = 1 + (leveltime % (MAXSKINCOLORS-1)) elseif kartstuff[k_itemblinkmode] == 1 then localcolor = SKINCOLOR_RED else localcolor = SKINCOLOR_WHITE end colour = v.getColormap(colormode, localcolor) end if not disableBox then libfn.hudDrawItemBox(v, p, c) end local yShift = ((leveltime%3)-1) if splitscreen < 2 then if rouletteAnim then fy = $ + 10*yShift if yShift then itTflags = V_HUDTRANSHALF end end else if rouletteAnim then fy = $ + 4*yShift if yShift then itTflags = V_HUDTRANSHALF end end end local drawAmt = (not (itdat.flags and (itdat.flags & XIF_ICONFORAMT))) or (itdat.flags and (itdat.flags & XIF_ICONFORAMT) and kartstuff[k_itemamount] > get) --fuck me if kartstuff[k_itemamount] > 1 and drawAmt then v.draw(fx + (flipamount and 48 or 0), fy, localmul[offset], V_HUDTRANS|fflags|(flipamount and V_FLIP or 0)) if (blink and leveltime % blink == 0) or (not blink) and blink ~= -1 then v.draw(fx, fy, icn, itTflags|fflags, colour) end if offset == 2 then if flipamount then -- reminder that this is for 3/4p's right end of the screen. v.drawString(fx+2, fy+31, "x" + kartstuff[k_itemamount], V_ALLOWLOWERCASE|V_HUDTRANS|fflags) else v.drawString(fx+24, fy+31, "x" + kartstuff[k_itemamount], V_ALLOWLOWERCASE|V_HUDTRANS|fflags) end else v.draw(fx+28, fy+41, kp_itemx, V_HUDTRANS|fflags) v.drawKartString(fx+38, fy+36, kartstuff[k_itemamount], V_HUDTRANS|fflags) end else if (blink and leveltime % blink == 0) or (not blink) and blink ~= -1 then v.draw(fx, fy, icn, itTflags|fflags, colour) end end --timer bar libfn.xItem_DrawTimerBar(v, p, c) if not disableBox then libfn.hudDrawItemCooldown(v, p, c) end end --had a look at eggpanic to make sure this works clean with that too out of the box local function xItem_drawEggTimer(v, p, c) local fx, fy, fflags = xItemLib.func.hudFindFlags(v, p, c) if splitscreen < 2 then -- don't change shit for THIS splitscreen. v.draw(fx+17, fy+13, v.cachePatch("K_EGGN" .. min(G_TicsToSeconds(p.kartstuff[k_eggmanexplode]), 5)), fflags|V_HUDTRANS) else -- now we're having a fun game. v.draw(fx+17, fy+13, v.cachePatch("K_EGGN" .. min(G_TicsToSeconds(p.kartstuff[k_eggmanexplode]), 5)), fflags|V_HUDTRANS) end end local function xItem_drawSad(v, p, c) local fx, fy, fflags = xItemLib.func.hudFindFlags(v, p, c) if splitscreen < 2 then v.draw(fx, fy, v.cachePatch("K_ITSAD"), fflags|V_HUDTRANS) else v.draw(fx, fy+13, v.cachePatch("K_ISSAD"), fflags|V_HUDTRANS) end end local function findItemDistributions(p, useodds, spbrush) local distributions = { totalodds = 0, it = {}, odds = {}, useodds = {} } distributions.pdis = lastpdis local libdat = xItemLib local libfn = xItemLib.func local cv = libdat.cvars local tg = libdat.toggles if tg.debugItem then local di = min(tg.debugItem, libfn.countItems()) distributions.it = {di} distributions.odds = {1} distributions.totalodds = 1 distributions.useodds = useodds or 0 return distributions end for i = 1, libfn.countItems() do local odds = libfn.getOdds(useodds, i, 0, spbrush, p) if odds > 0 then table.insert(distributions.it, i) table.insert(distributions.odds, odds) distributions.totalodds = $ + odds end end -- failsafe odds if distributions.totalodds == 0 then distributions.totalodds = 1 distributions.it = {1} distributions.odds = {1} end distributions.useodds = useodds or 0 return distributions end local function xItem_drawDistributions(v, p, c) if not (xItemLib.cvars.bItemDebugDistrib.value or xItemLib.cvars.bItemDebugDistribReplayOnly.value and replayplayback) then return end if p ~= displayplayers[0] then return end local libdat = xItemLib local libfn = xItemLib.func local fx = 40 local fy = -10 local totalodds = debuggerDistributions.totalodds for i = 1, #(debuggerDistributions.it) do local it = debuggerDistributions.it[i] local odds = debuggerDistributions.odds[i] local perc = FixedMul(10000*FRACUNIT, FixedDiv(odds, totalodds)) >> FRACBITS local s, get = libfn.getItemDataById(it).getItemPatchSingle(true, 1) local icn = v.cachePatch(s) v.draw(fx + 28 * ((i-1) % 10), fy + 30 * ((i-1) / 10), icn, V_SNAPTOTOP|V_SNAPTOLEFT|V_50TRANS) v.drawString(fx + 28 * ((i-1) % 10) + 38, fy + 30 * ((i-1) / 10) + 26, (perc/100) + "." + (perc%100) + "%", V_SNAPTOTOP|V_SNAPTOLEFT|V_50TRANS, "small-right") end -- God fixing this to use vanilla useodds number display to reduce confusion v.drawString(fx, fy + 12, "useodds : " + (debuggerDistributions.useodds-1) + " pdis : " + debuggerDistributions.pdis, V_SNAPTOTOP|V_SNAPTOLEFT|V_50TRANS, "small") end local function findAvailableRoulettePatches(p, useodds, spbrush) local available = {} local libdat = xItemLib local libfn = xItemLib.func local cv = libdat.cvars local tg = libdat.toggles if cv.bEnhancedRoulette.value and tg.debugItem then local di = min(tg.debugItem, libfn.countItems()) available = {di} return available end for i = 1, libfn.countItems() do local dat = libfn.getItemDataById(i).showInRoulette if not dat then continue end if type(dat) == "function" then if dat(p) then table.insert(available, i) continue end else table.insert(available, i) continue end end --CTGP-7 roulette if cv.bEnhancedRoulette.value and useodds then local eav = {} for j = 1, #available do if libfn.getOdds(useodds, available[j], 0, spbrush, p) > 0 then table.insert(eav, available[j]) continue end end available = eav end return available end local leveltimeEven = 0 local function xItem_hudMain(v, p, c) if not p then return end if not p.xItemData then return end dat = p.xItemData local libdat = xItemLib local libfn = libdat.func local dat = p.xItemData hud.disable("item") local status local err = false for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "hudoverride") --print(type(fn)) if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, v, p, c) if not status then error(err, 1) end end if dat then splitplayers[#splitplayers+1] = p local kartstuff = p.kartstuff local itdat = libfn.getItemDataById(kartstuff[k_itemtype]) if p.xItemData.enableHud then --handle vanilla special cases first if kartstuff[k_stolentimer] > 0 then libfn.hudDrawItem(v, p, c, 14, 2) elseif kartstuff[k_stealingtimer] > 0 and leveltime % 2 then libfn.hudDrawItem(v, p, c, 14) elseif kartstuff[k_eggmanexplode] then libfn.hudDrawItem(v, p, c, 5, 2) libfn.hudDrawEgg(v, p, c) elseif kartstuff[k_rocketsneakertimer] then libfn.hudDrawItem(v, p, c, 2, 2) dat.xItem_timerBar = kartstuff[k_rocketsneakertimer] dat.xItem_maxTimerBar = 8*3*TICRATE elseif kartstuff[k_growshrinktimer] > 0 then libfn.hudDrawItem(v, p, c, 11, 2) if kartstuff[k_growcancel] > 0 then dat.xItem_timerBar = kartstuff[k_growcancel] dat.xItem_maxTimerBar = 26 end elseif kartstuff[k_sadtimer] or kartstuff[k_itemtype] == -1 then libfn.hudDrawItem(v, p, c, 0, -1) if leveltime % 2 then libfn.hudDrawSad(v, p, c) end --draw the roulette elseif dat.xItem_roulette then local av = availableItems[p.splitscreenindex + 1] if leveltimeEven != leveltime % 2 and not (av and table.maxn(av)) then local pingame = 0 local useodds = 0 local dontforcespb = false local spbrush = false for p in players.iterate do if p.spectator then continue end pingame = $+1 if (p.exiting) then dontforcespb = true end end if (pingame <= 2) dontforcespb = true end if (G_RaceGametype()) spbrush = (spbplace ~= -1 and kartstuff[k_position] == spbplace+1) end useodds = libfn.findUseOdds(p, 0, pingame, spbrush, dontforcespb) av = libfn.hudFindRouletteItems(p, useodds, 0, spbrush) leveltimeEven = leveltime % 2 end --print(splitnum(p)) if av and table.maxn(av) then libfn.hudDrawItem(v, p, c, av[((dat.xItem_roulette/3) % table.maxn(av)) + 1]) end --draw the held item elseif kartstuff[k_itemtype] then --custom item hud drawer here (this only runs when the item is still in the slot, if special timers are involved like above the mod should handle that by itself) if itdat and itdat.hudfunc then pcall(itdat.hudfunc, v, p, c) else if kartstuff[k_itemheld] then libfn.hudDrawItem(v, p, c, kartstuff[k_itemtype], 2) else libfn.hudDrawItem(v, p, c, kartstuff[k_itemtype]) end end elseif dat.xItem_itemSlotLockedTimer then libfn.hudDrawItemCooldownBox(v, p, c) end --crossmod "hooks" for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, kartstuff[k_itemtype], "itemhudfunc") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, v, p, c) if not status then error(err, 2) end end end --debugger goes last libfn.xItem_drawDistributions(v, p, c) end end local function setDebugItem(p, cv) local i = tonumber(cv) local t if not i then i = tostring(cv) --for all the calls here we're ignoring errors --first search by friendly name t = xItemLib.func.findItemByFriendlyName(i, true) if t then if #t == 1 then xItemLib.toggles.debugItem = t[1] print("Set debugitem to \x82"..xItemLib.xItemData[t[1]].name.."\x80") return else table.sort(t) local s = "" CONS_Printf(p, "Found too many items! Did you mean:") for x, it in ipairs(t) do s = $..(xItemLib.xItemData[it].name.." (ID \x82".. it.."\x80)") if x ~= #t then s = $..", \n" end end CONS_Printf(p, s) s = nil return end end --then by internal t = xItemLib.func.findItemByNamespace(i, true) if t > 0 then xItemLib.toggles.debugItem = t print("Set debugitem to \x82"..xItemLib.xItemData[t].name.."\x80") return end end --then just vanilla kart behaviour i = max(min(tonumber(i) or 0, xItemLib.func.countItems()), 0) xItemLib.toggles.debugItem = i if i > 0 then print("Set debugitem to \x82"..xItemLib.xItemData[i].name.."\x80") else print("Disabled debugitem") end t = nil i = nil end local function toggleItem(p, cv) local i = tonumber(cv) local t if not i then i = tostring(cv) t = xItemLib.func.findItemByFriendlyName(i, true) if t then if #t == 1 then xItemLib.toggles.xItemToggles[t[1]] = (not $) xItemLib.toggles.allToggle = true print("\x82"..xItemLib.xItemData[t[1]].name.."\x80 is now "..(xItemLib.toggles.xItemToggles[t[1]] and "enabled" or "disabled")) return else table.sort(t) local s = "" CONS_Printf(p, "Found too many items! Did you mean:") for x, it in ipairs(t) do s = $..(xItemLib.xItemData[it].name.." (ID \x82".. it.."\x80)") if x ~= #t then s = $..", \n" end end CONS_Printf(p, s) s = nil return end end --then by internal t = xItemLib.func.findItemByNamespace(i, true) if t > 0 then xItemLib.toggles.xItemToggles[t] = (not $) xItemLib.toggles.allToggle = true print("\x82"..xItemLib.xItemData[t].name.."\x80 is now "..(xItemLib.toggles.xItemToggles[t] and "enabled" or "disabled")) return end end --then just vanilla kart behaviour (or all items if no argument) i = max(min(tonumber(i) or 0, xItemLib.func.countItems()), 0) if i > 0 then xItemLib.toggles.xItemToggles[i] = (not $) xItemLib.toggles.allToggle = true print("\x82"..xItemLib.xItemData[i].name.."\x80 is now "..(xItemLib.toggles.xItemToggles[i] and "enabled" or "disabled")) else xItemLib.toggles.allToggle = (not $) for i = 1, xItemLib.func.countItems() do xItemLib.toggles.xItemToggles[i] = xItemLib.toggles.allToggle end print("Toggled all xItems to " .. (xItemLib.toggles.allToggle and "enabled (".."\x82".."all items".."\x80".." can appear)" or "disabled (only ".."\x82".."the first loaded item".."\x80".." will appear)")) end t = nil i = nil end local function listItem(p) CONS_Printf(p, "\n\3\135xItemLib\n\128by \130minenice\128") CONS_Printf(p, "Library version \130"..currLibVer.." (revision "..currRevVer..")") CONS_Printf(p, "\nNow listing all loaded xItems:\n----------------") local ndat = xItemLib.xItemNamespaces local itdat = xItemLib.xItemData local idat local nsp = "" for i = 1, xItemLib.func.countItems() do idat = itdat[i] for k, v in pairs(ndat) do if i == v then nsp = k end end if xItemLib.toggles.xItemToggles[i] then CONS_Printf(p, "\x83"..idat.name.."\x80 (Item ID \x82"..i.."\x80, namespaced \134"..nsp.."\x80)") else CONS_Printf(p, "\x85"..idat.name.."\x80 (Item ID \x82"..i.."\x80, namespaced \134"..nsp.."\x80)") end end end local function playerThinkFrame(p) local libdat = xItemLib local libfn = libdat.func if not p.xItemData then p.xItemData = { xItem_lastItem = 0, xItem_roulette = 0, xItem_rouletteType = 0, xItem_attackedDuringRoll = false, xItem_raceOdds = nil, xItem_battleOdds = nil, xItem_resetOddsNextRoll = 0, --0 = no, -1 = before rolling for an item, 1 = after rolling for an item xItem_blink = 0, xItem_blinkMode = 0, xItem_timerBar = 0, xItem_maxTimerBar = 0, xItem_pressedUse = 0, xItem_itemSlotLocked = false, xItem_itemSlotLockedTimer = 0, xItem_itemSlotLockedTimerMax = 0, xItem_Hud_availableItems = {}, enableHud = true, --enables / disables the xItemLib item hud, as a replacement for hud.disable("item") and hud.enable("item") } --quick init step even though this may not do much libfn.getCVar("sneaker") libfn.getCVar("rocketsneaker") libfn.getCVar("invincibility") libfn.getCVar("banana") libfn.getCVar("eggmanmonitor") libfn.getCVar("orbinaut") libfn.getCVar("jawz") libfn.getCVar("mine") libfn.getCVar("ballhog") libfn.getCVar("selfpropelledbomb") libfn.getCVar("grow") libfn.getCVar("shrink") libfn.getCVar("thundershield") libfn.getCVar("hyudoro") libfn.getCVar("pogospring") libfn.getCVar("kitchensink") libfn.getCVar("triplesneaker") libfn.getCVar("triplebanana") libfn.getCVar("decabanana") libfn.getCVar("tripleorbinaut") libfn.getCVar("quadorbinaut") libfn.getCVar("dualjawz") end for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "preplayerthink") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, p.cmd) if not status then error(err, 1) end end libfn.xItem_handleDistributionDebugger(p) libfn.attackHandler(p, p.cmd) libfn.doRoulette(p, p.cmd) for i = 1, #libdat.xItemModNamespaces do local fn = libfn.getXItemModValue(i, -1, "postplayerthink") if fn == nil or (not type(fn) == "function") then continue end local status, err = pcall(fn, p, p.cmd) if not status then error(err, 1) end end end if not xItemLib then print("\3\135xItemLib\n\128by \130minenice\128") print("Initial xItemLib loading...") print("Library version \130"..currLibVer.." (revision "..currRevVer..")") rawset(_G, "xItemLib", { gLibVersion = currLibVer, gRevVersion = currRevVer, func = {}, xItems = {}, xItemNamespaces = {}, xItemData = {}, --holds an item name, functions (on get (when rolled), on use, hud function), default raceodds, default battleodds xItemPatch = {}, --format is {{tics, bigpatch1, bigpatch2, ...}, {tics, smallpatch1, smallpatch2, ...}} xItemFlags = {}, --extra item data xItemModNamespaces = {}, xItemCrossData = { modData = {}, itemData = {}, }, xItemOddsRace = {}, xItemOddsBattle = {}, cvars = {}, --not netsynched localAvailableItems = availableItems, toggles = { debugItem = 0, allToggle = true, xItemToggles = {}, } }) rawset(_G, "K_FlipFromObject", K_FlipFromObject) rawset(_G, "K_GetItemPatch", K_GetItemPatch) xItemLib.func.countItems = getLoadedItemAmount xItemLib.func.addItem = addXItem xItemLib.func.resetItemOdds = resetOddsForItem xItemLib.func.setPlayerOddsForItem = setPlayerOddsForItem xItemLib.func.getPlayerScaling = playerScaling xItemLib.func.getStartCountdown = checkStartCooldown xItemLib.func.getPowerOdds = checkPowerItemOdds xItemLib.func.floatingItemThinker = floatingItemThinker xItemLib.func.floatingItemSpecial = floatingItemSpecial xItemLib.func.itemBoxSpecial = itemBoxSpecial xItemLib.func.getItemResult = xItem_GetItemResult xItemLib.func.getOdds = xItem_GetOdds xItemLib.func.setupDist = setupDistTable xItemLib.func.findUseOdds = xItem_FindUseOdds xItemLib.func.doRoulette = xItem_ItemRoulette xItemLib.func.attackHandler = xItem_BasicItemHandler xItemLib.func.hudFindFlags = xItem_FindHudFlags xItemLib.func.hudDrawItemBox = xItem_DrawItemBox xItemLib.func.xItem_DrawTimerBar = xItem_DrawTimerBar xItemLib.func.hudDrawItem = xItem_DrawItem xItemLib.func.hudDrawEgg = xItem_drawEggTimer xItemLib.func.hudDrawSad = xItem_drawSad xItemLib.func.hudDrawItemCooldown = xItem_DrawItemMinecraftCooldown xItemLib.func.hudDrawItemCooldownBox = xItem_DrawCooldownItemBox xItemLib.func.hudMain = xItem_hudMain xItemLib.func.playerThinker = playerThinkFrame xItemLib.func.hudFindRouletteItems = findAvailableRoulettePatches xItemLib.func.findItemByNamespace = findItemByNamespace xItemLib.func.findItemByFriendlyName = findItemByFriendlyName xItemLib.func.getCVar = getCVar xItemLib.func.findItemDistributions = findItemDistributions xItemLib.func.xItem_drawDistributions = xItem_drawDistributions xItemLib.func.xItem_handleDistributionDebugger = xItem_handleDistributionDebugger xItemLib.func.xItem_setPlayerItemCooldown = setPlayerItemCooldown xItemLib.func.playerCmdHook = playerCmdHook xItemLib.func.playerSpawn = playerSpawn xItemLib.func.mapChange = mapChange --here you go yoshimo lmao xItemLib.func.canUseItem = canUseItem --a xItemLib.func.floatingXItemThinker = floatingXItemThinker xItemLib.func.floatingXItemSpecial = floatingXItemSpecial xItemLib.func.playerArrowThinker = playerArrowThinker xItemLib.func.vanillaArrowThinker = vanillaArrowThinker --crossmod support xItemLib.func.addXItemMod = addXItemMod xItemLib.func.setXItemModData = setXItemModData xItemLib.func.getXItemModData = getXItemModData xItemLib.func.getXItemModValue = getXItemModValue --OOP stuff xItemLib.func.getItemDataById = getItemDataById xItemLib.func.getItemDataByName = getItemDataByName --console commands xItemLib.func.setDebugItem = setDebugItem xItemLib.func.toggleItem = toggleItem xItemLib.func.listItem = listItem COM_AddCommand("xitemdebugitem", xItemLib.func.setDebugItem, 1) --equivalent to kartdebugitem, can also take item names COM_AddCommand("togglexitem", xItemLib.func.toggleItem, 1) --toggles specified items, or all if none specified COM_AddCommand("listxitem", xItemLib.func.listItem, 4) --prints all item names to the console xItemLib.cvars.dItemDebugAmt = CV_RegisterVar({ --equivalent to kartdebugamount name = "xitemdebugamount", defaultvalue = "1", flags = CV_NETVAR, possiblevalue = CV_Natural }) xItemLib.cvars.bXRig = CV_RegisterVar({ --rig 2 name = "xitemdebugrig", defaultvalue = "Yes", flags = CV_NETVAR, possiblevalue = CV_YesNo }) xItemLib.cvars.bEnhancedRoulette = CV_RegisterVar({ --enables the CTGP-7 style enhanced roulette name = "xitemroulette", defaultvalue = "No", possiblevalue = CV_YesNo }) xItemLib.cvars.bRouletteAnim = CV_RegisterVar({ --enables the fancy roulette animation name = "xitemrouletteanim", defaultvalue = "No", possiblevalue = CV_YesNo }) xItemLib.cvars.bItemDebugDistrib = CV_RegisterVar({ --distribution debugger name = "xitemdebugdistributions", defaultvalue = "No", flags = CV_NETVAR, possiblevalue = CV_YesNo }) -- Ashnal: Couple new cvars -- This is a non-netvar that allows you to view the distribution debugger within replays, without allowing it in netgames that the replays come from xItemLib.cvars.bItemDebugDistribReplayOnly = CV_RegisterVar({ --distribution debugger name = "xitemdebugdistributionsreplay", defaultvalue = "No", flags = nil, possiblevalue = CV_YesNo }) -- This one logs all item rolls in the server players log, nice for dedicated servers, but requires hostmod to properly set consoleplayer xItemLib.cvars.bServerLogRolls = CV_RegisterVar({ --distribution debugger name = "xitemserverlogrolls", defaultvalue = "No", flags = nil, possiblevalue = CV_YesNo }) xItemLib.cvars.bItemDistCalcConga = CV_RegisterVar({ -- conga line option name = "xitemdistcalcconga", defaultvalue = "No", flags = CV_NETVAR, possiblevalue = CV_YesNo }) xItemLib.cvars.bSmugglerBonus = CV_RegisterVar({ -- smuggler bonus name = "xitemsmugglerbonus", defaultvalue = "No", flags = CV_NETVAR, possiblevalue = CV_YesNo }) local function spbOdds(newodds, pos, mashed, rush, p, secondist, pingame, pexiting) local nod = newodds local distvar = 64*14 if ((indirectitemcooldown > 0) or (pexiting > 0) or (secondist/distvar < 3)) and (pos ~= 10) then -- Force SPB nod = 0 else nod = $ * min((secondist/distvar)-4, 3) end return nod end local function hyuuOdds(newodds, pos, mashed, rush, p, secondist, pingame, pexiting) local nod = newodds if (hyubgone > 0) or (pingame-1 <= pexiting) then nod = 0 end return nod end local function shrinkOdds(newodds, pos, mashed, rush, p, secondist, pingame, pexiting) local nod = newodds if (indirectitemcooldown > 0) or (pingame-1 <= pexiting) then nod = 0 end return nod end local function getSpb(p, i) K_SetIndirectItemCooldown(20*TICRATE) end local function getHyuu(p, i) K_SetHyudoroCooldown(5*TICRATE) end local function getTripleShoe(p, i) return xItemLib.xItemNamespaces["KITEM_SNEAKER"], 3 end local function getTripleBanana(p, i) return xItemLib.xItemNamespaces["KITEM_BANANA"], 3 end local function getDecaBanana(p, i) return xItemLib.xItemNamespaces["KITEM_BANANA"], 10 end local function getTripleOrbi(p, i) return xItemLib.xItemNamespaces["KITEM_ORBINAUT"], 3 end local function getQuadOrbi(p, i) return xItemLib.xItemNamespaces["KITEM_ORBINAUT"], 4 end local function getDualJawz(p, i) return xItemLib.xItemNamespaces["KITEM_JAWZ"], 2 end local function showPogo(p) if (G_BattleGametype()) then return true else return false end end hud.add(function(v, p, c) xItemLib.func.hudMain(v, p, c) end, "game") addHook("ThinkFrame", do for i = 0, #players-1 do if players[i] then xItemLib.func.playerThinker(players[i]) end end end) addHook("PlayerCmd", function(p, cmd) xItemLib.func.playerCmdHook(p, cmd) end) addHook("PlayerSpawn", function(p) xItemLib.func.playerSpawn(p) end) addHook("MapChange", function() xItemLib.func.mapChange() end) --dropped item behaviour addHook("MobjThinker", function(mo) xItemLib.func.floatingItemThinker(mo) end, MT_FLOATINGITEM) addHook("TouchSpecial", function(s, t) xItemLib.func.floatingItemSpecial(s, t) end, MT_FLOATINGITEM) addHook("TouchSpecial", function(s, t) xItemLib.func.itemBoxSpecial(s, t) end, MT_RANDOMITEM) addHook("MobjThinker", function(mo) xItemLib.func.floatingXItemThinker(mo) end, MT_FLOATINGXITEM) addHook("TouchSpecial", function(s, t) xItemLib.func.floatingXItemSpecial(s, t) end, MT_FLOATINGXITEM) addHook("MobjThinker", function(mo) xItemLib.func.playerArrowThinker(mo) end, MT_XITEMPLAYERARROW) addHook("MobjThinker", function(mo) xItemLib.func.vanillaArrowThinker(mo) end, MT_PLAYERARROW) xItemLib.func.addItem{"KITEM_SNEAKER", "Sneaker", "K_ITSHOE", "K_ISSHOE", vanillaItemProps["KITEM_SNEAKER"].flags, vanillaItemProps["KITEM_SNEAKER"].raceodds, vanillaItemProps["KITEM_SNEAKER"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 1}}, true, nil, nil} xItemLib.func.addItem{"KITEM_ROCKETSNEAKER", "Rocket Sneaker", "K_ITRSHE", "K_ISRSHE", vanillaItemProps["KITEM_ROCKETSNEAKER"].flags, vanillaItemProps["KITEM_ROCKETSNEAKER"].raceodds, vanillaItemProps["KITEM_ROCKETSNEAKER"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 2}}, true, nil, nil} xItemLib.func.addItem{"KITEM_INVINCIBILITY", "Invincibility", {3, "K_ITINV1", "K_ITINV2", "K_ITINV3", "K_ITINV4", "K_ITINV5", "K_ITINV6", "K_ITINV7"}, {3, "K_ISINV1", "K_ISINV2", "K_ISINV3", "K_ISINV4", "K_ISINV5", "K_ISINV6"}, vanillaItemProps["KITEM_INVINCIBILITY"].flags,vanillaItemProps["KITEM_INVINCIBILITY"].raceodds, vanillaItemProps["KITEM_INVINCIBILITY"].battleodds, nil, nil, nil, nil, nil, {3, {SPR_ITMI, A}, {SPR_ITMI, B}, {SPR_ITMI, C}, {SPR_ITMI, D}, {SPR_ITMI, E}, {SPR_ITMI, F}, {SPR_ITMI, G}}, true, nil, nil} xItemLib.func.addItem{"KITEM_BANANA", "Banana", "K_ITBANA", "K_ISBANA", vanillaItemProps["KITEM_BANANA"].flags, vanillaItemProps["KITEM_BANANA"].raceodds, vanillaItemProps["KITEM_BANANA"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 4}}, true, nil, nil} xItemLib.func.addItem{"KITEM_EGGMAN", "Eggman Monitor", "K_ITEGGM", "K_ISEGGM", vanillaItemProps["KITEM_EGGMAN"].flags, vanillaItemProps["KITEM_EGGMAN"].raceodds, vanillaItemProps["KITEM_EGGMAN"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 5}}, true, nil, nil} xItemLib.func.addItem{"KITEM_ORBINAUT", "Orbinaut", {35, "K_ITORB1", "K_ITORB2", "K_ITORB3", "K_ITORB4"}, "K_ISORBN", vanillaItemProps["KITEM_ORBINAUT"].flags, vanillaItemProps["KITEM_ORBINAUT"].raceodds, vanillaItemProps["KITEM_ORBINAUT"].battleodds, nil, nil, nil, nil, nil, {4, {SPR_ITMO, A}, {SPR_ITMO, B}, {SPR_ITMO, C}, {SPR_ITMO, D}}, true, nil, nil} xItemLib.func.addItem{"KITEM_JAWZ", "Jawz", "K_ITJAWZ", "K_ISJAWZ", vanillaItemProps["KITEM_JAWZ"].flags, vanillaItemProps["KITEM_JAWZ"].raceodds, vanillaItemProps["KITEM_JAWZ"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 7}}, true, nil, nil} xItemLib.func.addItem{"KITEM_MINE", "Mine", "K_ITMINE", "K_ISMINE", vanillaItemProps["KITEM_MINE"].flags, vanillaItemProps["KITEM_MINE"].raceodds, vanillaItemProps["KITEM_MINE"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 8}}, true, nil, nil} xItemLib.func.addItem{"KITEM_BALLHOG", "Ballhog", "K_ITBHOG", "K_ISBHOG", vanillaItemProps["KITEM_BALLHOG"].flags, vanillaItemProps["KITEM_BALLHOG"].raceodds, vanillaItemProps["KITEM_BALLHOG"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 9}}, true, nil, nil} xItemLib.func.addItem{"KITEM_SPB", "Self-Propelled Bomb", "K_ITSPB", "K_ISSPB", vanillaItemProps["KITEM_SPB"].flags, vanillaItemProps["KITEM_SPB"].raceodds, vanillaItemProps["KITEM_SPB"].battleodds, getSpb, nil, nil, spbOdds, nil, {0, {SPR_ITEM, 10}}, true, nil, nil} xItemLib.func.addItem{"KITEM_GROW", "Grow", "K_ITGROW", "K_ISGROW", vanillaItemProps["KITEM_GROW"].flags, vanillaItemProps["KITEM_GROW"].raceodds, vanillaItemProps["KITEM_GROW"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 11}}, true, nil, nil} xItemLib.func.addItem{"KITEM_SHRINK", "Shrink", "K_ITSHRK", "K_ISSHRK", vanillaItemProps["KITEM_SHRINK"].flags, vanillaItemProps["KITEM_SHRINK"].raceodds, vanillaItemProps["KITEM_SHRINK"].battleodds, getSpb, nil, nil, shrinkOdds, nil, {0, {SPR_ITEM, 12}}, true, nil, nil} xItemLib.func.addItem{"KITEM_THUNDERSHIELD", "Thunder Shield", "K_ITTHNS", "K_ISTHNS", vanillaItemProps["KITEM_THUNDERSHIELD"].flags, vanillaItemProps["KITEM_THUNDERSHIELD"].raceodds, vanillaItemProps["KITEM_THUNDERSHIELD"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 13}}, true, nil, nil} xItemLib.func.addItem{"KITEM_HYUDORO", "Hyudoro", "K_ITHYUD", "K_ISHYUD", vanillaItemProps["KITEM_HYUDORO"].flags, vanillaItemProps["KITEM_HYUDORO"].raceodds, vanillaItemProps["KITEM_HYUDORO"].battleodds, getHyuu, nil, nil, hyuuOdds, nil, {0, {SPR_ITEM, 14}}, true, nil, nil} xItemLib.func.addItem{"KITEM_POGOSPRING", "Pogo Spring", "K_ITPOGO", "K_ISPOGO", vanillaItemProps["KITEM_POGOSPRING"].flags, vanillaItemProps["KITEM_POGOSPRING"].raceodds, vanillaItemProps["KITEM_POGOSPRING"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 15}}, showPogo, nil, nil} --what if I throw in a sneaky pogo lmao xItemLib.func.addItem{"KITEM_KITCHENSINK", "Kitchen Sink", "K_ITSINK", "K_ISSINK", vanillaItemProps["KITEM_KITCHENSINK"].flags, vanillaItemProps["KITEM_KITCHENSINK"].raceodds, vanillaItemProps["KITEM_KITCHENSINK"].battleodds, nil, nil, nil, nil, nil, {0, {SPR_ITEM, 16}}, false, nil, nil} xItemLib.func.addItem{"KRITEM_TRIPLESNEAKER", "Triple Sneaker", "K_ITSHOE", "K_ISSHOE", vanillaItemProps["KRITEM_TRIPLESNEAKER"].flags, vanillaItemProps["KRITEM_TRIPLESNEAKER"].raceodds, vanillaItemProps["KRITEM_TRIPLESNEAKER"].battleodds, nil, nil, nil, nil, getTripleShoe, {0, {SPR_ITEM, 1}}, false, nil, nil} xItemLib.func.addItem{"KRITEM_TRIPLEBANANA", "Triple Banana", "K_ITBANA", "K_ISBANA", vanillaItemProps["KRITEM_TRIPLEBANANA"].flags, vanillaItemProps["KRITEM_TRIPLEBANANA"].raceodds, vanillaItemProps["KRITEM_TRIPLEBANANA"].battleodds, nil, nil, nil, nil, getTripleBanana, {0, {SPR_ITEM, 4}}, false, nil, nil} xItemLib.func.addItem{"KRITEM_TENFOLDBANANA", "Deca Banana", "K_ITBANA", "K_ISBANA", vanillaItemProps["KRITEM_TENFOLDBANANA"].flags, vanillaItemProps["KRITEM_TENFOLDBANANA"].raceodds, vanillaItemProps["KRITEM_TENFOLDBANANA"].battleodds, nil, nil, nil, nil, getDecaBanana, {0, {SPR_ITEM, 5}}, false, nil, nil} xItemLib.func.addItem{"KRITEM_TRIPLEORBINAUT", "Triple Orbinaut", "K_ITORB3", "K_ISORBN", vanillaItemProps["KRITEM_TRIPLEORBINAUT"].flags, vanillaItemProps["KRITEM_TRIPLEORBINAUT"].raceodds, vanillaItemProps["KRITEM_TRIPLEORBINAUT"].battleodds, nil, nil, nil, nil, getTripleOrbi, {0, {SPR_ITMO, C}}, false, nil, nil} xItemLib.func.addItem{"KRITEM_QUADORBINAUT", "Quad Orbinaut", "K_ITORB4", "K_ISORBN", vanillaItemProps["KRITEM_QUADORBINAUT"].flags, vanillaItemProps["KRITEM_QUADORBINAUT"].raceodds, vanillaItemProps["KRITEM_QUADORBINAUT"].battleodds, nil, nil, nil, nil, getQuadOrbi, {0, {SPR_ITMO, D}}, false, nil, nil} xItemLib.func.addItem{"KRITEM_DUALJAWZ", "Dual Jawz", "K_ITJAWZ", "K_ISJAWZ", vanillaItemProps["KRITEM_DUALJAWZ"].flags, vanillaItemProps["KRITEM_DUALJAWZ"].raceodds, vanillaItemProps["KRITEM_DUALJAWZ"].battleodds, nil, nil, nil, nil, getDualJawz, {0, {SPR_ITEM, 7}}, false, nil, nil} xItemLib.func.addXItemMod("XITEM_CORE", "xItemLib", {lib = "by minenice"}) addHook("NetVars", function(net) xItemLib.toggles = net(xItemLib.toggles) end) end if xItemLib.gLibVersion < currLibVer or (xItemLib.gLibVersion == currLibVer and (xItemLib.gRevVersion ~= nil and xItemLib.gRevVersion < currRevVer)) then print("\3\135xItemLib\n\128by \130minenice\128") print("Updating to library version \130"..currLibVer.." (revision "..currRevVer..")") xItemLib.func = {} xItemLib.func.countItems = getLoadedItemAmount xItemLib.func.addItem = addXItem xItemLib.func.resetItemOdds = resetOddsForItem xItemLib.func.setPlayerOddsForItem = setPlayerOddsForItem xItemLib.func.getPlayerScaling = playerScaling xItemLib.func.getStartCountdown = checkStartCooldown xItemLib.func.getPowerOdds = checkPowerItemOdds xItemLib.func.floatingItemThinker = floatingItemThinker xItemLib.func.floatingItemSpecial = floatingItemSpecial xItemLib.func.itemBoxSpecial = itemBoxSpecial xItemLib.func.getItemResult = xItem_GetItemResult xItemLib.func.getOdds = xItem_GetOdds xItemLib.func.setupDist = setupDistTable xItemLib.func.findUseOdds = xItem_FindUseOdds xItemLib.func.doRoulette = xItem_ItemRoulette xItemLib.func.attackHandler = xItem_BasicItemHandler xItemLib.func.hudFindFlags = xItem_FindHudFlags xItemLib.func.hudDrawItemBox = xItem_DrawItemBox xItemLib.func.hudDrawItem = xItem_DrawItem xItemLib.func.hudDrawEgg = xItem_drawEggTimer xItemLib.func.hudDrawSad = xItem_drawSad xItemLib.func.hudMain = xItem_hudMain xItemLib.func.playerThinker = playerThinkFrame xItemLib.func.hudFindRouletteItems = findAvailableRoulettePatches xItemLib.func.findItemByNamespace = findItemByNamespace xItemLib.func.findItemByFriendlyName = findItemByFriendlyName xItemLib.func.canUseItem = canUseItem xItemLib.func.floatingXItemThinker = floatingXItemThinker xItemLib.func.floatingXItemSpecial = floatingXItemSpecial xItemLib.func.playerArrowThinker = playerArrowThinker xItemLib.func.vanillaArrowThinker = vanillaArrowThinker xItemLib.func.addXItemMod = addXItemMod xItemLib.func.setXItemModData = setXItemModData xItemLib.func.getXItemModData = getXItemModData xItemLib.func.getXItemModValue = getXItemModValue xItemLib.func.getCVar = getCVar xItemLib.func.findItemDistributions = findItemDistributions xItemLib.func.xItem_drawDistributions = xItem_drawDistributions xItemLib.func.xItem_handleDistributionDebugger = xItem_handleDistributionDebugger xItemLib.func.xItem_setPlayerItemCooldown = setPlayerItemCooldown xItemLib.func.hudDrawItemCooldown = xItem_DrawItemMinecraftCooldown xItemLib.func.hudDrawItemCooldownBox = xItem_DrawCooldownItemBox xItemLib.func.playerCmdHook = playerCmdHook xItemLib.func.playerSpawn = playerSpawn xItemLib.func.mapChange = mapChange xItemLib.func.xItem_DrawTimerBar = xItem_DrawTimerBar xItemLib.func.getItemDataById = getItemDataById xItemLib.func.getItemDataByName = getItemDataByName xItemLib.func.setDebugItem = setDebugItem xItemLib.func.toggleItem = toggleItem xItemLib.func.listItem = listItem -- first time I'm doing this if (xItemLib.gLibVersion < 112) then COM_AddCommand("xitemdebugitem", xItemLib.func.setDebugItem, 1) --equivalent to kartdebugitem, can also take item names COM_AddCommand("togglexitem", xItemLib.func.toggleItem, 1) COM_AddCommand("listxitem", xItemLib.func.listItem, 4) rawset(_G, "K_FlipFromObject", K_FlipFromObject) xItemLib.xItemData[xItemLib.xItemNamespaces["KITEM_INVINCIBILITY"]].flags = XIF_POWERITEM|XIF_COOLDOWNONSTART|XIF_SMUGGLECHECK xItemLib.xItemData[xItemLib.xItemNamespaces["KITEM_MINE"]].flags = XIF_POWERITEM|XIF_COOLDOWNONSTART xItemLib.cvars.bXRig = CV_RegisterVar({ --rig 2 name = "xitemdebugrig", defaultvalue = "Yes", flags = CV_NETVAR, possiblevalue = CV_YesNo }) end if (xItemLib.gLibVersion < 112 and xItemLib.gRevVersion < 3) then -- todo: update to 113 -- Ashnal: Couple new cvars -- This is a non-netvar that allows you to view the distribution debugger within replays, without allowing it in netgames that the replays come from xItemLib.cvars.bItemDebugDistribReplayOnly = CV_RegisterVar({ --distribution debugger name = "xitemdebugdistributionsreplay", defaultvalue = "No", flags = nil, possiblevalue = CV_YesNo }) -- This one logs all item rolls in the server players log, nice for dedicated servers, but requires hostmod to properly set consoleplayer xItemLib.cvars.bServerLogRolls = CV_RegisterVar({ --distribution debugger name = "xitemserverlogrolls", defaultvalue = "No", flags = nil, possiblevalue = CV_YesNo }) xItemLib.cvars.bItemDistCalcConga = CV_RegisterVar({ -- conga line option name = "xitemdistcalcconga", defaultvalue = "No", flags = CV_NETVAR, possiblevalue = CV_YesNo }) rawset(_G, "K_GetItemPatch", K_GetItemPatch) end if (xItemLib.gLibVersion < 112 or xItemLib.gLibVersion == 112 and xItemLib.gRevVersion < 4) then xItemLib.cvars.bSmugglerBonus = CV_RegisterVar({ -- smuggler bonus name = "xitemsmugglerbonus", defaultvalue = "No", flags = CV_NETVAR, possiblevalue = CV_YesNo }) end xItemLib.gLibVersion = currLibVer xItemLib.gRevVersion = currRevVer else print("xItemLib is to date") end PK pT3T7ll Credits.txtUT tapeux Hey! I'm ajnebs and this is my first coding project ever. I'm really happy with how it turned out, and I hope you enjoy it. I repurposed the code to find the next racer from the blueshell in the XitemLib sampler pack, afaik it's not used for anything, so I figured it'd be alright to make this item with it! The teleporter sprite is by blick blanks on deviantart, just used the first frame lol Overall, I wanna thank minenice so much for this awesome piece of tech, I was so surprised when I saw that nobody had made extra items with it yet, and I'm glad I could be among the first. Thanks for downloading!PK yWSounds/UT 6e6eux PK yW="Sounds/.DS_StoreUT 6eeux Bud1mTelepxItemTeleporterdsclbool  @ @ @ @ EDSDB ` @ @ @PK U3TSounds/xItemTeleporter/UT aaux PK *T; }}#Sounds/xItemTeleporter/DSTELPRT.oggUT dadaux OggS|ldvorbisDqOggS|l{1<`vorbis4Xiph.Org libVorbis I 20200704 (Reducing Environment) DATE=2006 GENRE=Bluesvorbis)BCV1L ŀАU`$)fI)(yHI)0c1c1c 4d( Ij9g'r9iN8 Q9 &cnkn)% Y@H!RH!b!b!r!r * 2 L2餓N:騣:(B -JL1Vc]|s9s9s BCV BdB!R)r 2ȀАU GI˱$O,Q53ESTMUUUUu]Wvevuv}Y[}Y[؅]aaaa}}} 4d #9)"9d ")Ifjihm˲,˲ iiiiiiifYeYeYeYeYeYeYeYeYeYeYeYeY@h*@@qq$ER$r, Y@R,r4Gs4s@BDFHJLNP@OggS.|lW[pUV[V@ZQSN^/UdL L}ɒ_v`[]֊ȤW2 hOY(5RCjYu]M`m 4  QL$/3?VJpQv??ߟFRQk>+'cYX,{__ rdˀJZɤ3+AMZD|BJej&nC_av<>'4!II@י{ؗH&WԤ2Ö[oeߨ+73ׁ>?^zB;w3b8z_LAn8dH.>O>6_u23}uFf?] p6FZ{ u=9^-e$Rg&p$íIIgi t5sߘcigs"`w@3ϳq` @1\pi)`{`D+E[W!P(\|fP +':4YXX): t+q̳y3_lpE>|j0vrv`yt*}xzរ+ߵFfWP =;N*]Tm~E0Cyb'.Ld@' wn@n@^1sOH67s` A1 6a @0uwfFLe2b>0H.p38I󞝩iy6yOYW`&%wn⨉LϘA0$^ #hV_3q]M\t? ܱ3>6ЀO,W U,`py1NL=mW(=9S&jA˔"BX^TcܵE[|kJÊ#gtU(ImgU&czG$ȇJ*}Am$%q /03')-H|8]wlg?{@FOU{D-'k>>`v֌k /r某;ߛSn3wπ;s~taosk0-h&7AJ@'@Ι2\ AqQu❨!IV ȷ^UgV@986 0s5;Vd vOCgn_Lp9rJlmZ>@3Iv+-xSQܳ^EM\,T1uY&$H^1?ݹzj03U&s9 Mur^ ;Ov}iӝ=ŽmanP SAE`/T1AuOfKZO;`Y6!$"^ R"- 4a8^A*S/kZ<CP8Ȝ8q>}WQۈPU[ltWz^ WJ+(kھDq_lӴ Kō0\̤;g/ET%=ml+;(]%%fFu30Н}Pw$8.A͟)2 Ek;v^^&lf.ΜyL?O@p~ >34H=^'ߧizz03 ^Iً e3= o`Yy? gf֑<28, @$O: 3 uۮϾ>̅+ A?0mrdzA 3iWCdj*%B/^־FB}:C *icmOڢ^\x(]'F{E-cB:SLQ\d p xPW@ 2x[ |)-iq όa3`pЭiρ p3\t_yYm]9~џ=WUٻ̪ckUZ7 lPngL s7^s:~z4@{UZb1AX&wa WĂHfd~[udsN^cHF|Q) N!.cp af*\&_h`k/o{9mNoԳoL>?C+^!? `{zfY3f`cC705b Mwo4ݚ$AնIUqJ.X@^,pkui5EcRoZc);wƱ3EGE iCu1xb&l^V}OOڶOl/d2uجg|SWVCv@'@ې\cd*U/'o @n+ާΐ$[;#yxy >شg gd WPNhFQmȰMV%|RfTW u>T׊"ɬ"s)Xv-G}}swݝ 홝]$TU!S8v~-1yV q [n^,{ D q 8}mƸ[b j_w@it4D"#$%r* ܿis/tnV^ƻfGND:Bw_y872X\.*Lupt{Hv-G$[{ a`;IHW["n]i4 ݗi`:>;0𓀛{#u_x.:؂TdG8=8m d׍.Y[ET8Х{~JqcuGb$صPNUG a%NwkUqw ڱ4k-,LK/ n_x\6_km0a .UIR~:?M4%Fg\4i!3E:f@gFUEN7L3=JUrz=/ އ,_A0d测 , *hrE1u~ uP32 \Ι=ھ_;3ٝ@}90Tѵda`;y=; I{{sb:Y@ɗ [-/$3_g[8xUACXźjF{~PUJd ͸OꇮBhi$A~ /Ǿx`Oӭq?ф//e=y: mSZC@rv&dp#bO$g*uU3[S@ajF{ ٸhOtkρ23# {&Dr<'@v2LoH8x.E0#P ?maszho>?[rؽx`+&akBՂgv?h}e,cgT%>!V`;̇dZ#<ܝd:!%.E(ӧe}GKpvKc[ca@@# ٷ7}e$IC KΗq44v{ MԄ˜&_69S?dψ{(PX%.(y;>:oz!E\"kYtk˴g#{>-t4xy9]ӕ8@^SQ]]g L#zdfy50_5} ֻ,7_PEĕ\ n#?,CdPp@`bFg7C3d L_y&"OggS@O|l=!#aXUPRa_gbcN`d`TcddUVUcgecdf^?j$$zn|O$ CgzW>Iy>ƿqc'vy md+ Ƨ]}\ozJfV'{ C@GΌPUpL Ȉ @ {nD@Ss `MCX`45w1 KQ0ewc*HZv8Y+@7UP@H2 M]nf Kf oS4#kwlabaCQb1[ݖ?Vkgĕp'C2>0S\fG]%ƻ3/>ƷonKt?iJ61NwN~8ڿ{]ywbQ3O DS) ӏUjiS]qB9 R 8͛'ίDvb>慒©yѠt17<9udS7=HG|x/7 grc3. ބ03=$TGwr3z+aPf{j0J ˫Q-Q|?eHM)ן:ΈMR f@0Uhu{H! i.X)Hr닿oψ$s*L "|M%*>* /߼x(D~k_ltVxhtkM ׿B)jkN7wϯI;מ5.es!/,=/ S׀ћX Jt"WFGݵ̹c*ԝъW=v{)ޟSGBu}_F|NーzśL4x6 _٪;z5)mS>Ď&僟/.ܝ|K8\_C)ߩ8;.,:v]!3⊔_1$DEl;mȹDM\o\fٴgy:xXex|sޒ{?;MuIgg~;[C |xWehjU66CC|EFE~P|sOzkN7-}r|hV~K}l薂@Kw?6pPt%1{_o|_0E'P2so@qe< ϯ[&Ҙwn֙MkA(D9e) .w|O##*&p[`lph IAkn=paWKN+h$SPhihq'3ef-=-&SΙW~u_3= OkuW܊cB@C"r=–I;m;uHv>_uw?9d|wܻ!l¯Ǹyqv~`:$>@NV x{. o_JfW=*ˏǾstOY_O\7Sv7|n쯿*{ hv0AA8z?6o˷cZEysj$έݦC]{3k@zE@zk/uW 8? ^#K'>?Uog+E&;΋>⚟|x1=_營1}=F?Ҝ.0{ݝc}\$iF6>@YL"ᛴ{:rjvJ#ޛ7;r9|NވF=}LOW~X~#J]ǻ@˷䆅 ~P/uX.XtvAج{pۧy&v=o>˵h??wY~|SGo$,N p.>bA< N;bI{VD.*7X4]-/N~w|vO6F;>RrE5 O#J Om϶Do-_{w^ֵ,=p*[ߵru;gԠ_ߪqm@Gc,Rjوon`6A<{iّP1N~ﰭWR^N+͓*}j;j.ROf)faGeـnHg Ŝ5E7a|ż]Z]==7=..\f.Xӵ>2^EXD=0r%>y-rŁもdV{씓%ovzzUOn>Ӫ={/w|MoWEsOL, ,Nux Xi]7H"tw-Y=ts}7϶"eA~_@wX96J yd*8z%]칶@9}dȷ˿xogo_-ޑW_;< Jzv=E[Y(pYzғσjz.Ѻr! 6rCJ7Ïv޵$lj+|Ewl`r< r.@"6*/7ÝSsa4.xӻ,O]:R/}|$sݹJ&F9./c[Է< T {db\!"w]ޛV4XԹ<(>}v;3}8MǷLځoć<{wSk@?γ8P[Uؽ^jh4lO`.|YAS7YKf:\!}=t>MF,>kwr9~t&QKc sX2#>˳> /0>۱8_S_[}ե~~Eaڶ 8tS7_$D][mu4=]^k S=̄IeϠrI8;`33LuE=_kf.dRdҿv"wߪMzw7{ b?KpM鳑Z}O}]"%̯E~C^h:SsEoK1}l6o͒G VA]-"wtm'l[fYs]PpN5:sͣol|ca뢚M>]36cT=|Ͳ"@6$7z^!/ʒ"+xu6;% zcXXBȶ4awO@OggSg|lv,QURRYdaeRcghWQdfacMU`cgQhc^f_cghgeidSeheQedab ]jx{Q_w։Z4[*Ch}?t_<^7s-3Q-;_q+@I  9!V3u+3=Q?&^cMNٷ'&aNj/S@D:Fm5 .v\bii~ߏa.x)yc:/?RÃ]ghYj9 1ȼ<[sv} "D f)<_\rmL ̥?{>]o> yII87`vRB'n9/qv0ᆂ`eUX;uFҕKGeɽɆ lX-/="T6p\jŞ_>oLJ,B`t{Ыb;+v*͛Cݖg:3{5Qm>W)Y otC:*+F@_d_w{~Ylwu\\fU9ۿ5.?o˅5'2M9$Z|(3փ$ 23_RAI'_>ȭ0[g]Mtk~&/Ev!ONK*(|g?ެ#_f=]cAU !>Sr,Kƫ//OG.=esx*/(7VԆn̥KL/ #a c1/Ų>͏ zwəTKhg{K+ ܊u8 EAR^jd)\rӢ>e~z)+w8i2/z28KgL%]ɽbvdyC:H6FEz ]{ !`:oZ׉) ɯ>:\94*'Mn:;هC#U'#WX꧛Qz{j TgwP" ʷK[s5|Ύ){Wx",ؗv[.M0Wg_f8',kĨYs v{xL*Sm.C_v=(wc`;ւ$1ƊBco{|z>Wt̶Ͳ}y96M8K0! Ů=*?8 /xMVI:M^8=/!ay-~)_?#~x9zy  L`1\F3خC iNT:Af8sTC7O^~ m6¼Pk<|׌_^<{m$ ^;r4:!p(R05OoMl?ޟG?;z~7o)_;Q[, q֛D^ sڛp. mTW&Bqw$Ңrwla7av?iwj̒ h buCjN,p SCFG-[:Y_%̋ms;*q )3 jcLD+@{j&yo\1vN|hF kOrw5#(E we,_~7yݿkNC#^$1z}fĽ0a}𵟞op_h=3-/ez?;}-=-//GOMXFFO"?{~\`~UjYp\4eJ[]#ಁ+X[͛,\ -:^?̧_{ݼgԿw8n'fol,~J@5a#,ئ {Tn/M´2{~ht,CÙs ?&?=.\f ˱$zÆ:rdd5 'f.z_$׳ֽsMk=u˟u=Y3}ZCN^~+œ8k$ k`~@yzœ}vӶ*qgw>{f~m[%ގG?0sG!Dž_Kr=|1.{Bo6LfW{VGݺ4ܟmcY{KtpXJϾ(t׳üh ZA@aUl䆩ɀEr`Za mGYmvvolOwrnrT^Js9֯)~&3Mqo}$Ă sSڻ<&30gIXݯoi]Oݧ ]_eUe1_mr3/!-۝+&}Ju '$;l  yr'FRӽw^_/.z]Yls>6>,ϦWOnP.|V?&A4?Gcl@ct<zϬmlĈ6@oˇClcϯg?Ͽz#%p|(=</}8< kAfBx*R4ܷkasͿ2=-SzܟxY\>;x?O^|@}po~=s|AW8<$v )=`2/@׉Q/i*cW<}uwC?wwvs$AexUE$Xy3uGBewՂ~= q ;rmݺԝxvy}f8m͟,~?u׳O@o߯m Hp.KıWqN^̍ ̶,v&!/@B 6XǺ]ɉ_{{f{]1nb.(;~CvgFo{K֭'"_r`b%>hq0P @A߲ `N7&#Ͽds?KdRi*ߟʝpyd2Ftdj}{7|g]rN #Mn,lΉN'>|.Gt|x8%~9z/csYޛ Kl :,~;[ZFNA/a;>^8^>vxboușDaΡg-"[v1B ^]@JoXv.0Ϛ}A-py~'߾eH';CӳV)Fϝזڿ~(kd'<OggS|lvնgRicfhh`h S]%r|uXn:ǛI|N7Secy,?3>M"GWz:[Z <(  TA/@.<1L_;ޜbO08ŧܳM7#ɬvn}3pW@lad!Jy=j"'0y܅F[??|yi9<_A[sOwZGӟI.]Lּ4u{Ab0틌y⏋3MEUkn:_|y:kWoc۲\։q7(~$N{{ :jk/l^.wQp{ׁC^ZX;~~Pll6%O6#>vq2y8O-'jR]c;ϲnz*p'х u[1}CTjeIur&wziþv_ ucwYeh?~D!hRJvO tA/e#Ob<zz ^˚(OOo睩%:1[f'fĤo r@2 6B@o7Mܜ_t͋wa مnwwŻa#2u͵!kl~L}yGsEi` H"svSoՔ=s6vZI 'Cɚ29x̧tKV4G`XRp :[I$vI)–W9©f/oy @  etq`{Pzvy_cX9lsFu5՚ipOޖ/dݴ; PWnoOŸ9ީν֙1{m8]ͬu|x6쇉{.pl=ǥgw&_q{ 9]9<Ǒ89B{[{ɝ5+rzgo z 3LD_;)u:gWuwI'Џ{|?3͐[IGtgY;~ xSMR}iKoN SsCEA4i޽"~?h7fd>TOAk ?AU^9 3>V0Ϗ_GU[jp7 B$ L@nl0B *]C~ˆ/4n/|9JI!Qal j8 fx 80g*$lEm+v_׆CR؃mQg0LBI,VۇʡUUS_jq{NDxrwgJ^CcٽhۊEi W(5̬ [Co;3OSk(S& q>3!ečH駾mS^D3Ѝ%7-]u/CV^9 hg=#op'=4S+`IU6o\<21XS7=Trh, ??`4?Ti2f`ri`؅(AfkrMhlcE$8YRK.[mi*Y/,Ll毄(h lH@{,4`}|y1Qq8:JEsˣggG mJez&; lg΃XL-_Tex1vLÛy==S/j=qkӄ ap&e&'Pd@/HGTrN9s"0qJ80KnLx6AB_VrN۩'*Wz9ԅ-3]0Lf d|1wv`6mCoPɟ@XmC[PMۡ;h$Xϸu*`bM9ovٳgR.${uI 7 ƍw;3.&+ \$(*YHjzǛF-X@H2n 󗩊- +tJԣ4A|6 ` <`I ;JA{߽:}8m&C4ZYDuU2 :lw sm;Vt~mKّUIy9߰X2w<_2 Kf{=M\gTU:`bg lq\2 p~X1u~\6ּ֔~G^N]${OO eZ;/gATメDq,5 zή]SH̥'0b w(ݺ[j\cf1J(F1L>t`ƿXO颒$h7 h=%Ԓ캍 j DƿMW~ #HT4I:oPx K@\`nξrkG9?XuvVªJmufr`>wy4{ѶgQ a+Vb(Ӵ{y Q;*p]?C nr%-d;=?|cV^w}{mN0+ԉYzۻї{qɐJ-UZ{H]6 Sh<ڛmTrL$Ke" 7P!ؚ&ܻUSu&+38֕zn0˟Lٲcjԟ;td04N$k` Xi!- yZ])iHI`ؒ92 0!EXkR A܃H b+.ݣln~vs:Ǹjhjʂ`|9>;Oo:Y2lч"?o i2e(osn;v;ie9 gq cdl&׮qd98c  1{ٷRQ3$yR3똍 KߥGnv+󷼰+VʾspӼt^::j:f-уڝ}~ w|rLAo77;9fa?9xE(gf3= ݹ́ʡR%켋]dO7L׷bȔ,Oef)6}@!{@scXƂHʄVeedJ5pF/܅b)P H6D~  2=0`ÊZ/7F>:nI}fn &@V9dBЙBZ_CWC] +竔m34E^_o0w˴=OqnNMv]UUѭ2ApC{6 \grՇ釵3"{%agK7'_859sbۧ)$=ykszϯ :%Sd3 CHO%l"{u`I6>? &<4)fG8cLC5/ gf"s;R5U۞A :k6g0۵rq7k4#z$IXc7@bjH(@h$3_ }/ l*l_0#GVAOggS|lWxGbLo'/_˻opwo?%Ict>ǜ,TU#h&8Q}2p|KW'GӇ+Kvc\膯4.JXĶ w3nJ9 oҼ?w,zQ!'9' 7 1\4QK\8>Wu68C,C_ݠj0tMLSl`ϋL:"]Hu~O;ӳPyզO~o\bL'UM TN;]4c)ߙ`Lw,Mj_@feY&:5@VMbôDҗT )UٱXA6ՀZ?THtIhLgt7ls_I)`# ` 0|_*׀{/11vh9iϡjj(jIϴ|3?|.?q1۩.q{tvK𴋳_O;^|)IA<.!HSUӉd;7F .w{k !w?Y嶓O~nιUv礓5s^o\;w=96HYcH k=\O-{Cәזab:J+7{]T%?<3;>g2gGt&r/}=PΝ3@RHHڳn*֬@c8PM#H ",͆O3aUD lbф~ <_Rd `L9Ӳr zp|흳~꾿~|x_:hJ,8iowb\ Wݸ>/|w2&Y;DIwG-}tzQs%ЄV6QKT$\Aƿ]$JM@tN=NfL[Kdǿ+Lo I ?0XIPR|;w)( ej1{nꍬ6Á٦տ3v.( M v#Z%V.W㽥{eIWEҏ6\g!1*b5L݊g>:hV :l2/9``Zw ֱMGoT5jJ>Y[?%gM6i{S֗z\lԭTTH_}6OqxOX.2e{Uh2o<ҋᆪX>2!cj}L}ioϥ}4xMo=`=C*ӫ/~ꎕTJ{>:eS {AvEv8}>[ש{Yp i%g{koΞ" I`Kk{*_D7#RooOL#\I)*&kh&yefO\zfAL $<"pN ^Bq0-\Bg0)|owwz֟_qem;ݝ gD2dԋl՚nR84wkgyjז;GbZݍF'|$6h/~ڏ `9_^k$bJS~:76vup<3WtgnvmHΣ}vS^/:-fطCn*a~}.jq?CMN=osFO_Kos&%+w3ǟ弥]MWnwS9ŏeax\l-?dwI)VyC͍㍟.Pzߵ b vCPН0_ײܧ#,`GA }cgYln6bdaDEBw H%B]@6PJ@ƒt*%b !@r%rû=z;&x@>gh&0Rqn~s3{Q{Q3O ~ k?iA_ޒgsry6}|Q$>.'K$}9in4%_0|ar{+Ooaz ٙ@jj<3yzO <9IwD}柂ߴȈj;8n{gP?@ԋ;8'܇K4Y?OSV u(CNGinnV|p2g]c7;=LC'k\??.d\ݕR0s薭?(;yhoc@P!- _0 ƘKp[U\%[4%6!4_mhy}EBUZC"ŸGLq9aypo~B֫a:f {y1L -UJ+_3n?qڗnX;){/ɞϗ?-_n_$LBa$wu>.o? h0;{rIVykeL}VHaI&t9-Ǚú dqzi)$HrLHn{˧-A{f[">:BC>u3G L Ղ<' [z:]dr}΁L)^|o>I|~!0E5"b'b:.vTGF$I$VlH6*5! (ߘT FI @їDޠ+ )0PU@` {w1~:>:owS ZISJzl݃c4j6~\Y.Ηk_G-m풓i7@Bj.})"%ffOg䵹|dX{t<"1eܽ'sXI>tr\99|Ij{ށt4%vuZuy큈` 9IFm]urIfK= !dM3ٹ;-w|MG"zsΙe,A4M}9\Sn7 p͘)>?iHZr++Ξ$k蹪z];M6 '{oajb! NH+(GQ}F+*5Ka2*DV%+ 3wM r4hN IIR^EA `/crσ9.^dݱFlqb_Gq!VmYV53*^8F/\fۗ~Vo!fma7mN{-%OF喇^Do61ϑmc >l?} 'N*3kR<b1u09Y8Չ}g:W-}xy@Ԝ42uOC&Xw/$͝-j?t`s\WCBLd0{vԮg= '0G}ZUJJYmX1WmK֜Ln7\"o6qW iq@ !BKΡ>O.$Q3+*Pi~k_|v0ǫg. .QfҒ{ uaM"hRTH%;ys} 4a08=\q;SyO鈆>#k6.~2f sPUJn_lh\Nfا8y/B_v~ݼ!~(6 hgoBGH-'qo?Yvc8[(|6/*bS zB8t31&h65?{w%5?ST]onJJ s)t6 &=3Y3M5rϳ+{{7)>Y[;_~qW?%U%Iti%p~#pjyvM7!po^T3H%PCT4ܘM9'1۷iY1\uV:"e,-@_۲: 6N z- He7 Z)IH2) ]$pVx%A I<70(~yq>u{?>^o@g6oQj$1unkj9.qJڭUw3AU2| PX*~'_p%5(&/oݝMŶiOQxWyB82sh(oX* UvP1\ BI龍o&un=]OѺ4+'-iY@|Bï.ct ] :d"ve<ƹ܆@􉦫DvS *S,6.[(vBfY$ ,X $RM "l4>y,o .c' ʪDL, BEQ!^G帚)^fdzPl#/ݾ'`lsn׋rTJMm^Lꛃї|t⻖s/^oɨ ^|ץsM֗YMhv?.z A<yx/P4!㐯ꎋw[20uTt8&DOoֽ;[Kniɣp*`m.vgNf:H$38@Aǎ(ڀW%QTd$\~yZ`?^1(Sf姊2nφIg;OP4 *NSD@1CEPt=zf?79Pz4e}N)IVu&wA=((J(o#D|B*IArU !4{{(֪()(S@ЂBЀ8r}?o=pNpspm7kXk0Uܮ+aojCq`two[QS~ܗ贈1CQSrv-B1rOA:w`\.s$_q?`3>fkڷe}}{PݷfSu tTYN&3_&mwn|Pd;9IiW^)*Eu=f"IiIy-$ Gw9=s|lǜD6ytuGv+9\|h\Cg/K,yuvT;Iw6Q2=*]5U>l6ɀE#¤h.(He .$~4$и6`  K:, tB'x0dJaPɤ@b;g$ak{<۳ՔKFּ>4e|-yg{nN\ߦ^|{wy\5:s $w]f4 o_=[!5cY&q^.:YZNW|gc˿Yc83V= 8:Tc. vPX־n/O<|_5/GyoWԬ?,˹$ ֙ӹ_sf~kje[i'Y@=hf_^Rơ[k~0/+۳ȿh_s)<|? &K_,g>(©4E^}ֆy'4߆~>u[8]?޻F.󛯽kboѽDFP*ɷ cmcE _omvJOC_> o)?a cehD߷W-&l翿v4L9kGF#,i?["|[>7}.wn d+_϶ot]LvZHJGs%ҕ's $/Pա'7"{a~W11u[ϋd0--9 /,eY$7:$QR|Z[ڭrrd-<뙝sߔC7- 훥~&rKɅ`[m;خJA`#ה+g`/XR`'u cMApkJ$ t/M@6v=^B x_,+}I!B_;m9HwE(Ȉg7E= &%jő=II!g4/m:s;'@>7Ð e{Ym{03|1U伓;Qa(*U8(j:'ַǣ}<;TZ/&t4솦]K]fIUk ZAiP@JW$B\T7qL#!^@0TR"?2?^ܘ?h%1"AtL8 MGq9ҋOkbsw ^T~,W,"S7_=Wޮx=j!20䴊 KQw`; 6/KL_*|-=bB܁/ .y5zsT-C81Qn2I1>^.3F$A4$cgW}`醴tU8d[4yd.z"f{C}ݗ=ny [Cf\9~)#{wgϜ:ðRh\ .?S5q2Fid;g0LO''s>2JOʲB?-@AB74hAF䛈?prh&,"Ҥ>38OggS|lPRS\YTV^ Ֆ ho:F :Ӫ뽯ض=*lkEjDE) .vϴӷe \~+>tz'^M2Lu%?9Fg<^vF>.:*9x>mf-a_nF&B_/%DuE~q| 43?~~]cIMhH'B6M|!W:wW0Ԓ7yWrJD}>ٻc.P7?x{7b3_=I"M:T]=(^yJ_6ʡϻ?]ìz {)"e;8p 2!˿ DtP$IOv>A|pȚIC3)șL槡ߚeC'}ۙZZ{6.Ȣ@ (aG+0Ȁ~pd(4%ШXJRǥ&E6Y60P "O~@ EwIEJQ&CFw{ !~^fPbXǽtSar gܗ܌o{^25gM/x|sôtwf~g|Q)3c;ƒ0P;Ӄk9gay BkTl70⪺&oRMԔ+ w(=45Njӯه@xٴ}x<'KINι h~_thŧӜz7U@,OD_vza8]@wtlsY2Oϻ4Kav?X G@{0a_<0j*!$K~!%@X `xfJ&Qa 2l"q^+@C_K>(YDvmUD U՚Z53Z_>n5S(Kt[M:mvѶ㜁\}׏sya|{>tD}=l?oVE"VZMT_erUKߪ Wn}|'OJ[@O{a8iOՃ2}gDx:oSL}J?y%D}ݺL"yM2_~_)ˤ:5Mj:'Իxs10ԟ M;b7- ?}N1gn3t늧ޟq,9wkiN=_3ݒ~?럽 VOTvQ6 |&ę|uwdCt%ӳPPwnn |)"b7 l@?vݴ [\gQSv֓B 0܄e#գ0`= 5cU^ yi@rznG>no>YZmmA&˾1mts[$0|{s8_E+}z}<~iX[^F]n8ke/$Ϟ JG`/[u}m_**~}l:%NzbtT܋V\Wv?7*[k${u ^;KQ9]}IwvUC{8[|H;|G gX=!'ޝr"sac#^y>O: "ʁd7ͮd2+qnxhM*Sp{h.%3jѶ`2pf7o 9oiNLs_?7ѷm?zi]t = =f녰KOFY1.駾u,i~fn͞twrr|@PGMSOV$Yk)ˢCG\ @Xgp2zAB@t``H5Nw HDK.nT6hՐ\"Btƾ[Q CjEIxKNw^싼R`49&듦!rIYU9max>lU9IώbgbA_b{՘ rп̃"0pv_xge_]/W `_{v$gQ@ {G+)48G`سuۍ'7}//q9t|$h~vag o@OggS@|l B˂XjhSVZSjnnSXhnۼj |1 d8Cu u7rQ 杣3av;'wMpϩ7j""ƿhN06̓w?-fuLPa xC㇮b͙鷳>G?ؗ⮔gS5^k:7OoglŜwmǹox_tWI U`/;V(p)Mw1U~|[Y˻uX~NP|*:yXVQ~ќpNښpmo.uʋCf.zDZ~4UJ`э|56I'=s.DLofT|m3lgelisδSng|6#p|Ң՟+YvtUy|WW`;>) o=s6N&5lH'a7:;CW]u 5烞ar$>3CteYU}^֙xJ SViiNZvb짩3M00s7@?hfƦ̞~M6C$J6/Ĝ"}؉'ca&\>o!C )D8F _ly%mΖ l0旹Zt{uL>l 2eYYM`2vXA^ @ @h{ (/VcUR(ܒѶ:62 -erxb-WZjȃkCGLicGg߯%[H\q%"L^? >[ l!C:2}rr/~"<~l}hzDSϯE\jr/9lIDC }W}ٽqM%LU^d=2軳肩JW6Jl)$_:]=Q&Ӵ>]n$޵1=Ӟ:{}}D/IӳIg;w}jfþ'ܧɾL4Ȕ)|sg_- =  nr<~s#"|FرzG?$-3#/^m!#Fm3_%K oކ, ʍD:Bmv۵p ml7*d~ʙ|L?-ˬ}tZӡS$U*Eη6f&Hp7oe?֎li_>5xєqtE{o}fHr+)1k =|?%4RČʺc{T&_A&QْgT4C,Jn!+:ߟ>YY̧g$N2arUw@gQ_U[ O~+I* 9; 7GQi 03榿| u'7-@4${4!R " נ44R5Y+(X(ك__m:~^mGTV.Oowʏ+=t~?&K̓*_H-b=ApUU3:i<_\t_BPbz6Μ]uw/Y3ENf*/Z W&תQ=WË1x1,b9wDlr7"" X}fYj\^#Gc)b+ 9ҾZ??MmR3{kնo;tԩ(#s0Oy*&uH([gt&Ef*ZW5FL". kԽkך`U=?->̬p[9KZ_~YyZod[8`ZP ci ܬg0!iiKvkn)}ӗŋåK_"wZ!9?#> r/?'=۬P s`CQFkp; ?lQ{-|?7]+O0^71"2cLqXyv9/-n`Y;ׂz16!AT  ?Wo0w?cmzR^}̳~%fLwm8˛Sy~}No:.*!rij |J=.({j]tE7yxd>M^5]mie6g6*?tˡdaZrbO^?\qw3R˔tzC}HO{=m[!3]{VgtOfAZfrHO׃Ԯa@Z?`y "A5|)*Y@cjg֚zy7?g״R@f„phz oh7E}i/ 9bm My'wB丿/ |_ Pc .@FB`0qa"_i1 $HzDcڤpp6;YP }N@Fw.J'~ # 5hp~q|<׍e]=?!j÷ڙT_F蜲ߥg\prt5LExy[O=/]|S׻GY*'}.R9ɚB{#~dCx\OF_웢WL!OݧCbgryo4sT^גX3zޣKLN9={=թ@zQY6|Ï"d +dh}ߟaڙ0M/>ER93 k`f8On&O! 9o~D,f j몂үz8]gw 8۳O1}{,<)O?S 0#<1"@Öh͇GziLHV|7XB #@d KhtAn PD+Ļ ?T4V5Y+$C9:"?sL=.]tnW~.ɍgol-."٬ue؎p_aUyjEy9"}w3-/΄MOĒ[!/[_[86C*g|4clUWw9_Nݲ$k7G׾o6mʌf~/>sM\kqMzh4vLRJv@Nu H)B Wz&<x' R<섫MwŪcCԟ+11):,'WS>:Pq?g J.a[ ZPHv3| sϭw13.طuf:maP %\tvb86K-Jphoǝϣ\FAm㟼bK_ Tˮ)FvԫYם-?x8S}FVu[uͮ ׿S8H}:\\\V^5tuR>Z7ؑp"dwi? s%byݷcO r8doJ |\,#fnl4i5UU SOa3T3U5']|eUBQ5S"I;ݹXP15)O}[<qև{7,HJD5F#EB W[u'bF K0*60#!WC;ؼ<[*W@)p:#0 ^IIOggS@;|l K%@+PwH{[zFYxt:8n7mrwy_0=ꍒ$/}qzlhof./VoR3c>$ax=kQ !4ӯwnzM6qۗp2[|.gkZ~KĤl^8K8иs?\0;I퐝`3Nq9YM{KnƗGϥ}gpqd  A2r7E| =w>}6O4 #+F KUxfUƁnQg|gx7lx];yl^ZJqv?/&~>[5C䲖 |-46-?jSutwOMZR.EVo;}"7<*t;^ؚv|A-g}aX}f8׻*~&GMvw´艷Ŭ Ƚ[e  $2Qg'T!%SWY[9Z7׉""=NJseO]m2;ݜݱ;(x㔿5ME٣j?;q=_QY=0 IM~?"q@[pIf_0.t'l_~ze6бJ _(}n1(Utȃt"l$ 1$H.մvmn @@֥Ir\P4:;kRY7SVzۦ1~>'/\NU 5[w?q5S^\7qk<GVJ~dcg{6P04hy*1dF/cm5uQ0[l͋U4 ,pٌPTf3=BvR|u08oly -iƝ)|q}MwVLUQN$c{=Y5]9~oz 9'h>lFuꁳ[NHw^=/>;؇`_gw` U u&7s l{7@ 1` |l G!) y!ِÇ?M,$ZK|K(At s!HA"("x}-+.NkdkfR~s^}}3ry7ڳf=:fԎ{mWuyf>y;n)"xB[~sX5E=d*K-WfY=Yg4Jed;]ho} ฽4},l=g)x3/eŸv!(X&[tb"z|sއG|+ o6Ϻ[csQsݸӦOcH栗It;Z0Em(r@!uT4T^oLav6V Z#OLiZw WЍUn0A7CeIz@ONT;He._X+"f /F~uhA@f? `u > Z[_H=O5TM P ~[">| nTzҺU:H+jo۶mI5lҴTI`١p}>8ôIs<(a5O]6LL|H 7=5}wY;B*:swQv j#_~vSJfj/n}טSlQ`Xڵ}a6&G:Kqi8X1:ufK LZ_@xG/$wL8a5x;_n'ߧo-#[nb rt|r? 0 !Hs7wf `9r8$З?a4 q 3L7/o̶TYu}ϋ< @xj `c݈z|syE^%8] *V7p^ PbV`|s>yE{Rs@;oxo̪@>!s\{EKN(Խ_xn]_$+] h+R-Şm}D32@w;fϟс;9WCOn8a-g,{TG2tw+y}1}?~*_8n&岁mA%|~܀|I?kY]S= /S<5tRyJ:Edf4eYz5,&U Aziݾb_7j7+ -|ȦÖg}k_G#4JV$c޹|w3o2Y{a>;V{/fRD]`|xm{d=)[wdžms;9U7i ;_6Cy [n uB7$}1x;[};g_}_0<ͧɘS#@Ven藚9tмɽ1؎lwgD;#:e:-/rw:4=wwy}AZܰ9:ޟ}dl@u%nc5`o'0z7KB6&!jCyjqPG@6H| @ 1v;x Pxz. Iy@ ,-Tv T%K >,y)c)pXmȟ|x|<7e:8wY)^ĔJP~W&ؾm'&NlP^]tB!D_lpi!D|]O_.[O2[ُKiu ]No=ԫz=[D8\s^[etIrAhuD楡9ݹut$|R^]sMbt 3G"7\kTQ>o̱nL;_̉4C{#Yz{[009\x7c ~%$tf; /NWmVxλL`Gn7[2x@2m PB5y)kѻmEs2r.$E Bғ)D`OggS@Z|l -_Zifpinkjokgeni%A @@o\*0Κ?9ZxleT& ߼"|ڰF[x")fIO:@7߻\fT;kEϹ(nrCv:}NFe DǞfC~xio-3:<5؞|@tqx^ڥyp/''螑\G̿1\g@܈輙g?<Kè9i29ErG۹ea۱scr$A _)O'M-a r }A'Uρ,}6ݥ&caL{(CCחPrηf0І>) nՋlv,݀Pl{dw?}%x(T (+EPz^,Ded.u%&!+5[jbq8G])s|TYf`dZ0Sx4?`s_nvS_'57G{ͷnp2fo|Gtp32^䛥oS~3$']ib9wU_94y_?KECG=Տ~UrZ_D}@԰|~!A{uPʃ]<5;/|U3 Ӹ }bq$Z~o[d0t,~W4g}xʸ20H ? 5q4>4hmy2k% + ?)d .z2If j4U_sV@T'l) ;h?2p\ ` 8Fr Ԕbq; A? _ 35-< GDVUe6GtFR6Hz%VRM0jF_|_YkG~ԋX~!r}䬿?Cվvڢy;=SM |<]{1aڻìYCKwL}G2y `ibGbxK6 J£u=];шʊ` 2oh74DOznDeAM]$s/Tsrw{6Ns2ttfp;3cֻ޲/-AO?RsY˞$G7߽ ؒ)3ayY])śʚaa01PӭacsJ^QS%2## <(&|#" -_1b~UUh3v5P!Pef΀Zd.JQC}Zg~4&8j""Zw6R".o<^a6YWPK/|kiAj^T}V  eG@;[aDvi Z:!GKx]ȾڸeG|1~-3~3D;99oO?{R҃^x:d:j)\:_>.wL'?NKqeqs^Ee8q֊R "C еE|αLptƏ.o~y}?E9+ʷm/G9[(å͉,l?<՜YB^΀P0V}*1vU'L Ew hWc%4~0ySi=Q@q̇N,h% J =Rh˱x.QJ+queo"hO/&LqΕo"?f|^}Rn5jioCG~xwJޕb z'Y#izյv:t;O+<5崧3 &_3z#B3&eYo~sV6!8> R@N̶Y@z/@rҜ,T3x{.#xcAom۷ߛx{e/AFdj\ZK RkW qPRou;l4/Hv.ѡi?ο;B]e{.~7^[اC+R}IH"TY,mOO>q{wFFY]fo~Lb7d=B/H?w-17ҩ,gݱ/rr5^:խ?{ qJnuguј/9ULw>aZVQ>};4~doVw*VΈjTpc(k q^sVEɪ u3W7VOʵ}7!h^>V%{{-og;⛕'lںR/ "SBo%W2m۸׈>,ȇ3I-oF)c Rq{8sk8)OO}MzkL7>fVp>Y._Q>NϚvblfl/2FմmUŖ7Y9zpn0_MAq>hߟX꓇ތ+ R^U_Q='G9 H5;~kS: mSPƜܽ3U=`M&I}(ȩIB|j\ g7<$9kMܗh^ՙI-g2J ._m$ φ7K0wݽP.[% m7Oa޻%XnлY KV'՝c>ٻ_2ˡFkrt5ĶAvl d^2c$p(v϶iڧ\ȿ_$%<l.6+}zIbyXF]T+5=4Iwwcűuq>m[ΙG1L24Zo뺟ja|+0s : "M= ; zɸn@m30|& eCϠ޲V2=~E*tr溴qi w Lz)0/7JZ'Jw۞v}pʏqCT= xٝQ {؞>OMrdsMnϒdzqmt}~y)kIξh?I@[|d>⃆ >- 4緵wB1䇦a0ݿ%3g6 yQK0³,I%-5 ϐw[@^=)kEg4R,Fz䃓LJA3Pm&s)jcdwmp9Of65rpr#"jfxpI?/9 %'<1(d̮GbYn6ΈoM6:I7L:ZjlwSv_(U$(2xQ[3Jo/@䗏IЃ$E{S],9i?TU$|E&R-U`V >,$-@Ǎ1` w¾lGd~(>\F5r7r<\@ >kfS$`±+#,=\R(X޼.i\4pu݄g[I"8Fr8s:=Ւ\[?4a@#?1?I!t_sm=~b+%!{!*t~t0ۧeagCn6D@o7;rŒ׸lt۟e7CޮM?{!c/.v<&#BNž:Ooއ#GA,Ǐ2MYfRXV^L]cf*Zdgn]*ꮥ27b3tGK?e9C=*۶̞Uی0%@t嗅SU N.N 9Isj"p) ֏㷧Jhb&|5v`\ V9]*P7*%iQJRh.dq/F9gN^EX_o}}N{h`Ȓβl 7w8No|f52)~g~/n}}0æT{mCq뵖L!ixCle>.8ıb1onP(;i5*&bSl7nEU>9Co3:=n9>?.V nb'vqFs94In(OS#7.N౛bx鳄Di&a)^sh8yWm|ӹ7& |&^2*+p3,PMF 3Q9Lu8TNbEN/@^F$q-4 a0(eЋkX}~ut9>SWKs|+ xek( :YF6zLX5ʢCCw S8C M(΀zP}xxƨm>}ڥ،s)/v篙eW: LX92-س _l~w[(@y{\o(Z|ܵۮRewwy̓sJCsnV-ϻ >;QO7w\8əo+6K?;o{J9cO.uIJפ-O.5Mx^̖NN8̢wgV~s{:9EE7f ( m o4k(--=T ;6 d5ʪZn A}Ʀ,`rM1R tp!7+?)cwo:k^"k&,`1d2 bsB4=f]#Ha_n^xM.A35wwq]7Yb^|w8퍻2٫$0ʭ$4iCz?7o K?z|--rܿT=yܤ{o(XmYNd; lwc$A?BEkn :z~݇KwsO@yxE@4a7|? !:n~']FK3/<=pܕ}eDOPΰS3xPO0Jو6O莆p]:p"v=Eod Y^v~3Vww>M͉}T;a?M >697{y$M@\EdE"?8B`T'@f< 2HuRTt}YOggSDž|l W SQd^8wɈ@CM7 L"\[X5Q0 L`б>eJ]`7t9a6GQ}=~ ![ᦒ}W,{giӲo1lyۯ秼1*?!\'rmN,ՑU f:P5ζ`[н.}#R<ܚ)G9~zaiN,@9塕ŏl)J7-?MWK?7{7vMD#iz teHjzMRMN}>8{k~HqL~\aki5]>{΋_-φ,rda9RB)_`Aqb`q\:ӻ6?Q Fd6WNGywۡ3VZp6O=GBvd޸{۽<Ρ h\ \V'݆bkroW> @Tq:wyoKQO͂W3sMϿwgFd | ,` mlwGQjf \_clo_jHag|YNOveFY.Qέ*_ HWcjNŇ)\ -71^PK yWSprites/UT 6e6eux PK yW="Sprites/.DS_StoreUT 6eeux Bud1mTelepxItemTeleporterdsclbool  @ @ @ @ EDSDB ` @ @ @PK U3TSprites/xItemTeleporter/UT aaux PK Uv+Tn(X!T&\$U 5e 2 Z    ' *'&9'-O777=('9( (7'? %'N7',9 &('&N7 &'&&&&8 ('&&&( (''&&(; OO'((&'((+ ((&(7(. ('((7(. O'(7', O'(((7'(/ &(((((7''- ''(('(''7(-  OOO'('''(''77,  ''&&((''77+ !OOO'&%%'('&'77+ !'(&%%('''77, "('&&(''''77, "'(''('''+ 7(&'(''''(( (&'(('''8( %''((''(( %''''(. (&'(''' ((%'''''' (&''''&'( (O''((''&'( (N&((((&''' 7N&(((&''&9 7O&&%&'&7 %7(''%&'7'-- ((('&7'??78&''??O('>%78& ((((8$$  ((%    PK |W Graphics/UT <eeux PK |WLGraphics/.DS_StoreUT <eeux Bud1mTelepxItemTeleporterdsclbool  @ @ @ @ EDSDB ` @ @ @PK U3TGraphics/xItemTeleporter/UT aaux PK *Tn(X!T&\$U 5e 2 Z    ' *'&9'-O777=('9( (7'? %'N7',9 &('&N7 &'&&&&8 ('&&&( (''&&(; OO'((&'((+ ((&(7(. ('((7(. O'(7', O'(((7'(/ &(((((7''- ''(('(''7(-  OOO'('''(''77,  ''&&((''77+ !OOO'&%%'('&'77+ !'(&%%('''77, "('&&(''''77, "'(''('''+ 7(&'(''''(( (&'(('''8( %''((''(( %''''(. (&'(''' ((%'''''' (&''''&'( (O''((''&'( (N&((((&''' 7N&(((&''&9 7O&&%&'&7 %7(''%&'7'-- ((('&7'??78&''??O('>%78& ((((8$$  ((%    PK &T m%Graphics/xItemTeleporter/H_XITELE.lmpUT dkadkaux  :]2X{9\.Qr    %-= += (7; '7; &77 &'&7 O''&': (''7:>> O((7- OO'(7+>> OO%'(''(*== O'(''(7/O&&&''(7/ (&&''(8- (''''()- '(('''%. '''''/ &('' ''''' '('''  ''''  &7(  *.'  &,<(  &7$)   &&&   PK &T m%Graphics/xItemTeleporter/K_MINPRT.lmpUT dkadkaux  :]2X{9\.Qr    %-= += (7; '7; &77 &'&7 O''&': (''7:>> O((7- OO'(7+>> OO%'(''(*== O'(''(7/O&&&''(7/ (&&''(8- (''''()- '(('''%. '''''/ &('' ''''' '('''  ''''  &7(  *.'  &,<(  &7$)   &&&   PK W#R .DS_StoreUTueux PK ଖW7rwwGKL_ajnebs_items_1.0.pk3UTeux PK WA{Lua/UTeux PK v+T*[[Lua/icnFreeslot.luaUTaux PK W=" aLua/.DS_StoreUTeux PK U3TALua/xItemTeleporter/UTaux PK U3Tǎjj(Lua/xItemTeleporter/xItem_Teleporter.luaUTaux PK ϢW}>`QQƳLua/xItemLib_v112r5.luaUTeux PK pT3T7ll hOCredits.txtUTtaux PK yWARSounds/UT6eux PK yW="ZRSounds/.DS_StoreUT6eux PK U3TAjSounds/xItemTeleporter/UTaux PK *T; }}#jSounds/xItemTeleporter/DSTELPRT.oggUTdaux PK yWA9Sprites/UT6eux PK yW=":Sprites/.DS_StoreUT6eux PK U3TAdRSprites/xItemTeleporter/UTaux PK Uv+T