From 74f6226fe7fa5e562beea5889024027f202882e0 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 3 Jul 2018 00:37:15 -0400 Subject: [PATCH] tfv: hookup magic --- gr-sim/tfv/tfv.c | 2 +- gr-sim/tfv/tfv_battle.c | 115 +++++++++++++++++++++++++++++++++++++- gr-sim/tfv/tfv_sprites.c | 37 ++++++++++++ gr-sim/tfv/tfv_sprites.h | 6 ++ gr-sim/tfv/tfv_worldmap.c | 10 ++-- tfv/art/sprites.png | Bin 7877 -> 7873 bytes 6 files changed, 163 insertions(+), 7 deletions(-) diff --git a/gr-sim/tfv/tfv.c b/gr-sim/tfv/tfv.c index 45927466..5c06f87a 100644 --- a/gr-sim/tfv/tfv.c +++ b/gr-sim/tfv/tfv.c @@ -14,7 +14,7 @@ unsigned char level=0; unsigned char hp=100,max_hp=100; unsigned char mp=50,max_mp=50; -unsigned char limit=2; +unsigned char limit=1; unsigned char money=0,experience=0; unsigned char time_hours=0,time_minutes=0; unsigned char items1=0xff,items2=0xff; diff --git a/gr-sim/tfv/tfv_battle.c b/gr-sim/tfv/tfv_battle.c index f5123080..d2ddaccc 100644 --- a/gr-sim/tfv/tfv_battle.c +++ b/gr-sim/tfv/tfv_battle.c @@ -93,7 +93,7 @@ struct enemy_type { static struct enemy_type enemies[8]={ [0]= { .name="Killer Crab", - .hp_base=10, + .hp_base=50, .hp_mask=0x1f, .attack_name="Pinch", .weakness=MAGIC_MALAISE, @@ -443,6 +443,16 @@ static int damage_enemy(int value) { } +static int heal_self(int value) { + + hp+=value; + if (hp>max_hp) hp=max_hp; + + return 0; + +} + + static int damage_tfv(int value) { if (hp>value) hp-=value; @@ -636,8 +646,111 @@ static int rotate_intro(void) { return 0; } +#define MENU_MAGIC_HEAL 0 +#define MENU_MAGIC_ICE 1 +#define MENU_MAGIC_FIRE 2 +#define MENU_MAGIC_MALAISE 3 +#define MENU_MAGIC_BOLT 4 + + static void magic_attack(int which) { + int ax=34,ay=20; + int mx,my; + int damage=20; + int i; + + unsigned char *sprite; + + if (which==MENU_MAGIC_HEAL) { + sprite=magic_health; + mx=34; + my=20; + } + if (which==MENU_MAGIC_FIRE) { + sprite=magic_fire; + mx=2; + my=20; + } + if (which==MENU_MAGIC_ICE) { + sprite=magic_ice; + mx=2; + my=20; + } + + + // FIXME: damage based on weakness of enemy + // FIXME: disallow if not enough MP + + /* cast the magic */ + i=0; + while(i<10) { + + gr_copy_to_current(0xc00); + + grsim_put_sprite(tfv_victory,34,20); + + grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20); + + draw_battle_bottom(enemy_type); + + page_flip(); + + i++; + + usleep(20000); + } + + ax=34; + ay=20; + i=0; + + /* Actually put the magic */ + + while(i<=20) { + + gr_copy_to_current(0xc00); + + grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20); + + grsim_put_sprite(tfv_stand_left,ax,ay); + grsim_put_sprite(tfv_led_sword,ax-5,ay); + + grsim_put_sprite(sprite,mx+(i&1),my); + + draw_battle_bottom(enemy_type); + + page_flip(); + + i++; + + usleep(100000); + } + + mp-=5; + + gr_copy_to_current(0xc00); + + grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20); + + grsim_put_sprite(tfv_stand_left,ax,ay); + grsim_put_sprite(tfv_led_sword,ax-5,ay); + + draw_battle_bottom(enemy_type); + + if (which!=MENU_MAGIC_HEAL) { + damage_enemy(damage); + gr_put_num(2,10,damage); + } + else { + heal_self(damage); + } + draw_battle_bottom(enemy_type); + page_flip(); + + for(i=0;i<20;i++) { + usleep(100000); + } } static void limit_break(int which) { diff --git a/gr-sim/tfv/tfv_sprites.c b/gr-sim/tfv/tfv_sprites.c index fc6f84cc..263ba2d3 100644 --- a/gr-sim/tfv/tfv_sprites.c +++ b/gr-sim/tfv/tfv_sprites.c @@ -418,3 +418,40 @@ unsigned char big_tree[]={ 0xc0,0xCC,0xCC,0xCC,0xc0, 0x00,0x00,0x88,0x00,0x00, }; + +unsigned char magic_health[]={ + 0x5,0x6, + 0x00,0x00,0x0E,0x00,0x0C, + 0x00,0x0e,0x00,0x0c,0x00, + 0x0e,0x00,0x0c,0x00,0x0e, + 0x00,0x0c,0x00,0x0e,0x00, + 0x0c,0x00,0x0e,0x00,0x0c, + 0x00,0x0e,0x00,0x0c,0x00, +}; + +unsigned char magic_fire[]={ + 0x5,0x6, + 0x00,0x00,0xf0,0x00,0x00, + 0xf0,0x00,0xff,0x00,0xf0, + 0x0f,0xf0,0xff,0xf0,0x0f, + 0x00,0xff,0xfe,0xff,0x00, + 0xff,0x00,0xff,0x00,0xff, + 0x00,0x00,0xff,0x00,0x00, +}; + +unsigned char magic_ice[]={ + 0x5,0x6, + 0x00,0x0d,0xd0,0x00,0x00, + 0x00,0xdd,0xdd,0xdd,0xd0, + 0xd0,0xdd,0x9d,0xdd,0xdd, + 0xdd,0xdd,0x99,0x99,0xdd, + 0x00,0x99,0x99,0x99,0xdd, + 0x00,0x0d,0x99,0x99,0x0d, +}; + +//unsigned char magic_bolt[]={ +//}; + +//unsigned char magic_malaise[]={ +//}; + diff --git a/gr-sim/tfv/tfv_sprites.h b/gr-sim/tfv/tfv_sprites.h index fb081a23..12603849 100644 --- a/gr-sim/tfv/tfv_sprites.h +++ b/gr-sim/tfv/tfv_sprites.h @@ -39,3 +39,9 @@ extern unsigned char numbers[10][11]; extern unsigned char small_tree[]; extern unsigned char medium_tree[]; extern unsigned char big_tree[]; + +extern unsigned char magic_health[]; +extern unsigned char magic_fire[]; +extern unsigned char magic_ice[]; +extern unsigned char magic_bolt[]; +extern unsigned char magic_malaise[]; diff --git a/gr-sim/tfv/tfv_worldmap.c b/gr-sim/tfv/tfv_worldmap.c index b1a03d85..89b68b87 100644 --- a/gr-sim/tfv/tfv_worldmap.c +++ b/gr-sim/tfv/tfv_worldmap.c @@ -135,7 +135,7 @@ int world_map(void) { int ch; int direction=1; - int i,limit; + int i,tree_limit; int newx=0,newy=0,moved; int special_destination=NOEXIT,destination_type=LOCATION_PLACE; @@ -400,9 +400,9 @@ done_entry: /* Draw Background Trees */ if (map_info[map_location].land_type&LAND_FOREST) { for(i=10;ifP0TCX)AQk+7{`-ah;!hnlhT6vL ztM|yCy6Vct4>NxK`Fc#Te!lx8sYrrIynbd#l*{PTFyVTm<+9z5oJa``+r%g8IA zPgAPC(#xZ)asxfe<(f_*vjE64)H!|URr=-ou4((!_wyCvpL_G8v4yL(Pnjnhw79=6v0M6ut@7z} z;dL$6@Qu7Q?)L>)5ch5@CKWmmdnzsU6i3b@CF(fokFoMxYTk4pwU%!RkKTZOnlrQR z&3i`ryni;g{Pi@{LL(X@GHA^zMzd;d;AhkchOCuVLu;+K(PmrCdg-;d-uvj{C>v$e z(MBI*%&~^eGV5%!&oSp*(^g&u3Tvyc5!PI5nQ>F&(#E@uSD5X*%dWfazQ>+>Z9Bl{ z)YDEs~Y&&))s&+&}g$wE7?QE&pBTf?D_g(Yc`3eRu9(`}P-IyY^9(@@bH! zP$M;sjjXQF7k8F0`;tv(_K)Kg-kGcaC;;D3=SD zXqSt~<^?c1qd9vXKPM6E7DV?r69V z8)yI*JBPLQ|AQxVtpH1tmpKB(u1;D z=oPO&D>-_fx3PoGT(hvgGBsk6zS*i9PZ;pN>uhv?_}ezozJHZwJ41@ws}Dd}{KQl! zgCQ~bW(RPdKsIPU6Pc;Uj6Jkd2M}vJ*Z9_@2JRr^QL&x-7VLaOzq>soilL(pd9Kg^ z!)kE|5)~47beYP=W{ZU`S|POVyJ=q@8kpXeU1vDW`)H6m?2=~?%`iYft=eMk)$`r; z-hGS$m6huTC4VJ%>YWOkShqhA()`*<9l%}6a$U%t4L5Wn!%dUs&CD2>cP0fnFJ+`W zYo3tLnI8R})ZSv?6JruzbN;h8!W^~l$A))-dp87hEbdV<`pX;2d>f{C;TYDroYxK0bDJ|jYa_y? zH=oBVj(-Qlwr=-uAJls{XML3O?g1sYc^`zi!X7JKs<&CoO+H|1!hme_EJrrs#mZf1 zDnJqRA4r9YtI?gEMk}<1?uI({#VU*hDq(_M%&D?N5i50PxwA3L0|Hk&dW8UP9qPML z9vjW;=BFEmukL=k>>2mk?_`<<69W&H)@i<7)_5Q7bBqnn*s!v;d9qBb}arU_sL_5vg$P zYeV!n4`BxcvCe}CoEMoV1cM$wgDBZWBFEv_;0)uxipNN`DbxL%k06bnK`Rt^x4@`W zfe0u-ckNaJ0}=VaipcCbd_Pf&FpGaM>T*xGp47L)ht=ziud<@dxZLQKk|F=s@_$A2 zL~L4SPQ*5PLer82f+183@D6(MlrFG2dOU-@hEu_n8|J4M5JN;ni1&cL-aeNdGro>s z;umi%&ibmxgKAD`2}o@-;~|Mzyyqf)o%eJ!;4JQ+YnKB7EbtsFZHtT72&Z$IE9-Nf zaxa4DdEU@6m?{R^VBa?qZVh56@_&Hh52y#mfviai5H~`RaXdX8?(v`+^Jxtr^Z=#b z+$lSx$-B$@7)%HN5u@PD{lV*uf`h_kIgtcYx8-{eK@RxgDdC|KDl+=u2rAh+%ESEu zBMeuoQ|x1y703&DpmAMBqnKm}hC;I|j%P!Wz5{R1kn}<=$U}2&B_Ng^3xA{0KL(i2 z^95-eP-ImM&zQ&qi=%XI6M;AoTb6KP8rH)U1BAu>@05#00rA6}v% z*H!Bdv58W{!U0a)k>yrOb*a@DOSu=ThXameagn8S588+`ldOyjSo`POA}WKfTqjD) ziaMbU$GW9h20bBwi@uMWpMU5B!&Um+a_*8_L;(}cKDG{2HX#u92@dacGBz`t;Y@@O zOL-tKf_wMpnNk;`@Xcn5VQ_%a99i9<{Cff_B-b{uX@H*JAus{%u5|Sa@ zI4O;Y5R}3cbAQskZ7c>BX=wjB%p4^NkTBQ25I!{^Wn(?9L7veMVUV~8J0Uxw=)LP= zBH_=X^jTRKssD*sDxpSa6AZMRc$9@X(yJ)ju1bL8ib=wt0i_FLlHkZ2Os7&i%tg2T z;x$8;%^4fHfz0#f?sQr;7}z2pk4c+YsEnP)yDiK!>3?B&9Ws;w!B-p*^&F^3B@a#D z_prwsOFg9bKmwZ%B^{7VjEj=i@?Of2!sm>(!;z_UN<%toOEltx!n~Ss?C}%2v4;p6 zxb6q|13@Q*ZbAvf4lAp8s2kSlPTp9e~ z(d$N-J-|P8%7PYINnAeciJdn^5Aw?ei&@O<-T?fnuw{EVS(r~)!H}V!kYj){7&3+x zXEQHE4`t!<_fnq0sl#`4ACaB1kJur02c(EfM2RMVQ9O$^5T)d2D_94EBzeH2Lm>nd z!helEF>}jx3{b%aV_6jhbgDy|q0o3g{F)(0niqCcbv{w?$>3QT5r({Y!a;l?@}ZqY zsh8Boim4{?j`!=tI=NkC$tcSTI1w zpGJ4g|ZPNdEek6Cz>PQ=7=QPP zOQ8L`ko}=npk1IFD#QCgW*|<}e8PL7YKPzH?2jx*5P`cfuxAtXUFW0$L)2SR+uL&D@N8D(n>5!6Pzu(L$XHVvvz%g`ozCIT*leOYR%qONnoJpfHu0;I}zcWmjntu&}^>l$b z?=8PB!Zj?g++O7)brz!N=2G}t=sl_5aU|;vDKQEKE*@NhBe^~6^r>!~A8bZ?f&8Hn zu1?H3Ss^;hyTekh7aiD<8X1BQ62RNaP~Idm%alMH@D7-PWdb0=^ctzG;aU09J4Qkb zpVz;gN_h-_{R=}dSti~~R)0h%=&%HF9g8s5B$%O4*a}?m%gmJ+lK4*$WUZAPJrx^p zEC&brNJ$+ZTtQYLuAZBKAh~aUQUd&iB9gskq^$5!l8-CpK{#mbA}_pq4m2~com);2 zxtffoj*>f=>9QOQJR%j7zjc(yvUN_3iRnc;g@0!s)D>WFlTc%$ zkPw{&b&N4qR#}po1ZkCm4=B^ev|W@po0TeqBh_yyW>z*C6d0WF9MO|A6(bS*s+q3Q zdq6GVvm=VuG=37a>2-kIHVl~5=2@Du6z-g{U^Su_B`?-oh4k2iK3-6rNbiCv*Tt_A zFLMVuYwV4v26Mt^DJ!m%=b6Ah*X1E9lK%(_nf$S^=imBA1I@+{}sv5Z)oJ4}HI zrNjy`JF-Wjtwf1nZOl9(jFRRZc#1ShXv_FlL~ZWM2rL<83}nm1Q`na+Cjv6tLO*yF z_1D7AVKWH?*a^y;CF{JETnnQpj1Ea7BaR3AU=r*<#9KsGK7TS^uhe2;U192H9T^Om zn08U~QfVal(dTB!H&a%0To|8n;a1qGa4Ux5ay8!n33)MNK=cW(AB+~xKFUgv5h2po zju;u!z?|acu$Ul%$^Sa)&Sydt&YYi!ds&(6uYSgm2sId6h}lSMy|=u$38@%{qCgk_ zM?KW5?RNugoqxqN3dSsC^n)oMBpXFhyhBkm!;+GXWf#SrbId|J$3&JWKamH)Tv^9S z*k0Oo7y5^e44rnJ8O)Q?1y*8XSz$7wk`x&?r6df#bo}77YXUPGPPmfKAOnQ1{qF@x1g5eO{02EJ=7R%B;EFmEq4BQt zAVR%}99T$qe2yldb9^}j_KXhAA1Q*)V;(n@HO+tpbNj_}xSS?Hur|pGmIC%% zn&x}xAFl*QGv<=7J`+UF$h^~sK9jI6EaKAGD7;x@EGPkJERisUp{b<2pZ5ybeBEpl zaIobcmxk>@(Mc+3duH~bB+@FgQX>~nI>mE+1b-Oyp(Ct_BGnr{pGoTP0ftCI(Lp0j zI8;}33;a9@%h;9mK7AHKKSjkmYO`1o$o-wbejW)I|GE5r$gFpuhsnuDt_?k^Ls7&5 zW5s(jbAPxhLB1LDx&t%J9FrX&u}oPt1eoQtKj)KNk>SKL!#;o*r?0aPeUhuyL|~!E ziBB^N&`YQKee3%6hgE;CS)cBXPsdpH{QFA-uBs*{?!-)U@3Oh+eK~#9! z?VMj|9LF8UM|+Y^s--)hO`fA}(ufdZIh@~2;T|^NhmZ)v1<{8h{IGs&grJ__7ac)O zH$n+XAjMlKHGQ$TxL7oWLbj%cBw)<7741{2ZgYq}^dX!TIpnC@bTa>TcK2@gZg218 zo4NB(+<)xobZ6gu_WS$IZ+<(s033@=mb8V5lQR`Ct~PgPdNp%)_T8}sFu#|ppV7z5CBYzyjqUe_J;zkfJwnyU&;gRXO||NN<^UtRg&x0^Cf zgRTJJ`cl9ld~cpc@qWMr69M83GvK<60BmpEtVc&o0qoz#034k>*$7#kj;`j}odn~T z+4=cV*SP{5hXeTQ_xFIq0MH?WEK_g}Z~&jJYi7l`P|GiGf9|l0iZ@vAGSO62jEa24B7gs(wCtna0 z00@Bq06d8=Xlxo60A_v)U$684KntY-%Tvo>r7T|%6aat#pci8R;PG0OG-q1!o!$Y=Q2^wm2kgJ7Qu zC=Oczb&zku^(B-H0JWLmG?*d=gcUICX@CNN8;2m*i@OMy=}iFglYq7XhG0!zbL&256tP!+!;!eedGpT1Nn=m(pfcyjA;w3RByF0aSee)$*^@ z006Y5W=8-fGLtKy>c6#mu{{jNw8I4e@-YA!_1*ylU7#Ah7I0)*3q%6Q`IS$NdH{+8 z;Lifw0?&6@3pjGD1=!r47t^4QykZBUf5rfyUciqS0C%^&q2Jx^IuJkqFMsluWd@R@ z!U#f$klqRaLfs}!3;}Cj-|7lrj^=$d2W0smZ-=S?BnwKfHi#E$~NIv}lF3V*<--3NeZG++SqjsWoJDTA&6__+_ZOb7A+0Kx?zV}SuQ zXd>K*0dTMC0jS<=0Wj5?2h5R^PxJq9E0F?79DoD>qyS)d07L=Im;!Le1HilOYk~Gw zA^?C$AV+@JNke7<3V_Z6?JFUw0B$$C20m&+7z_Y3j1YhtmcXt5{^21B0kHtc zntJI-g&l*j`vf}yxPOHX^XMT5z=|gz<9F2p;KYuf5V%jqPY476)b8C_%dTaw;uUcx z0MESk^(C1BMD7!eQh?E_08HQ(LJ#ryYZ*~JqAq~Dz6(eXAZnjrSO6HoeaJdt0JYkm z|3@#4WJL9d0Dwn@B`5$a9T6XpUIF2Kf(88JndQv_7HU<1xPLa35!E9=y3gA0lP(3Y zxc=Q!i|Z-?2)Tei{x|?3%ZTa`?S5l_&NFOn5w1V`K5pa$5VKFPP>56j>Ht7gkBAH8 zG*>%dE|4cU2n|X1iO1{{EEGCaP-6k;9soRe41vdhGY8NA<;;P!E)ca(FcbljSw<93 za5qQ02f7D9*MB7j5VcP*MG_wZa6r3fbTu+vZ;zDC_eklfK6ge`kFX1@lRQ|PZ1imL^{&!;b=h$mLa& z0$^PRAdmj@OPmBDTS5XkCV$qtT>(rQMv2x8jR*t}baHhWnluKmt``I5rTyYi2!Ka` zpQr|C+2l~iXaB-xDF%S{fUJfKWIaq*gX`}tHRUgfTFQ8tniGflkvPCICeuge4$< z4B+)HlLD|QfClO?4R!_K6-9YhEd|)V0@?*I@_zuxVz6@z=mJ2+OJg}Y1F~5#44@W~ z2e9#X+FGyw=#nBO01tq{(^_&uxeLVR0SN$rD=OVFg8?vrNbPw&1Vtx;i2!J72_W6V zspFR=H1OCSn~Jiok1K%S_h!4<#8WR`e)GdW-XAFdH~}zCbBtZUAmi_YfTq~I->v{| zNq^tKZlK}Y^r{*+$%t0~9lo7h0#>+Uo~!5l_^Dm~^1S=elUHN2-&V*5pYJgZ_JK*wVh5_&+`PPoh*e%w_t6YK(@qvcT(Lb!ntKPq_- zX-y|L&ngtse5pCtXqL<64ZOBuMn%@azoM6!UV;3$ zHf{i>H^^q9F2E z0gq!qdH`cT3p}cVNJ&-zkE$RdEr95PNNM1oTv`CpZ;={+G2)gARp=&P-p=vX`^t2= zZqRlw#esfp^f+9=A72?o-sVgYKp_Blx`X0RFy((4&Hm8=K;eEl{D*SO=Wh+2N=WXU zSw*O`nqVIvC~Q;9#~1`r(i0Z^N)1r}jJiDvO73REb%E#)3gcZM^rmhK=qh{^FOlGr z;TsSf*EERQ^xZ!GR>uv-02CAddN}RwP+~wI27%i4EgT$5wwJa^$^ZZW07*qoM6N<$ Ef+?+iLjV8( delta 7798 zcmV-+9*N<>J;gncB!A+1R9JLUVRs;Ka&Km7Y-J#Hd2nSQWq4_3004N}t(j?(9654@ z|Kk)o0`}!N4!~ii8|e7@URIGDcK5XP$iyTolUWg1e0d8Z`2YO(3;)HRI%*8HjoDZ4 zkw10Sm5mQGe*O7+PqBV}{`ix>zy0m|Fn|3z#lm~}`fvBI_kU!3-+tXN>i75i_wU0v z-{Z{hfqu;VJz&wyTEq8s^LwC@zrIi3{}1c?KCAz-o$r5Td~M^$#ee)iv03#tzAQOp zFR4U+X3bJqL7ByPAD^F@i}W&nSNPe=`s>(*pCA7ay!vlq7w!9s@_Q&k?B5skKg8(! z`_%qAcAp6S>wk*UkB|BHUvy8u68?wSy?5t({2F ze~r)M^IE(nTRa5)lFiNQgtSs7+Aq~~lcksZ^M2A{i8Xs3yytv!`FuCa$Sa>uQmS6* z$Xem+{BteoGw=G$chY3$o47J3220%Wr+-)Yt1tgAub%_Gr_v?B^OO4Y zmEf!bWEskwesYz5`MzV?KJop$Li{~9KN4FQt$o5g*`US!HNM4$#M@qzTk{@H`xzxPLKx!@D6dt)LrIVbQH8=N+^tm>- z{Pi`^LVqG!>9oxxLq@V{ZPd@GlNz#CS`DqW-bR~kHS49<-g@t&3!`k5QAZnnj4{U= zHp{HD%|6GRb4^=$6(FpwzD8Jct!2if#?Z#y#ua8e@3QM|yYI2*UfT}kbLwfQpK<0{ z$8Nsm(*C#K5$?R}nkT1}yn6HQ!>2E|N3Ff`>VIpmzwzc<&wgg@JFCBEE&U;Lf1kDV zoi$~wey$t8vc}hA{1_q$PMUH?#&S($d?*7HbXLydOtofZPC1K9K-Dr?OHIkSNf{%9 z)l+US{mk93%>8ZNLaYB#-txc8Tu|!%KQb4Ty6?>WId6ZFwQC7LC zE*#|^F9o{ynw`SmWm%=rdYj{bl{-yfWX0l8soIl40~>!(j5q^{iT7B_I<(uqX`FOD zzDZ3SCN6cov~D<+gq5lt?wDE9X*oLxy7%@rGK*RF*jV7>pyQnQ_w){*a;_TYDtR5s zu7fSzJLfyrGbwLO$xPF=qrwEw8X@P_b%BL-nzjD8|13{$-#OaZp8Y|=$Q9S0l^nj$ z+t|UTuUS}MnHaH1-)z;5FO2fO>uh*`_}ez&zLkGwJ41}ys}G8>_=%|y27_Yq%}&92 zqOz&>GohJ!%-BOabx>k$=NjL-#K4`(ctmXHzEyUD}m#|z{WzU8hx{>B4N%LlUjGA{k1v)Qfq&#b$fX|s8 z{hid_qTv&55?^!v+8bex+V^9_yMVnL06G^PNSjmZNQgrBE{dZwJV3MFynZjB2849L z0pPK6e1^3Lh@HzkqNqz_k&rgvEIU?-6J>vR=+E7+O}b`2+W*bLibu(70$cPh^0;J( z@|;FzGs?Cd+0_9_Dz&)!@t4aZ#lS3!zb86#zD7!h(fDM1P`qV^{KzRKR_j;Jz(8u=V3@O=CDnHtlsr}^fot`bH<0-@Nb$lkq;om18=~hnr-9angiCKek5_*b z4;9>>*WWtM;Sx72{qSAj< zDo|XF?CdmJAuVJ#)Uhv8VI-;&B-q8AC_50bQg@a+8@)ULaHXSH0N~c4yc^-M(Y$Ux z-7tK0_uD1Um}|e2Nft;Ojf^=pAh#?aD3g5L;D~h#e~1LyEwGrc!~k9&z3S za;HUT+gDafurDoHDciD1kswUV1741gogXNtz;Qiokwo+CjlNnh*OvlSJq4&p7$OdI zx>qP>y*23Z?nD@%F#384S_yx^L84oRt%x*iBKjQD0x-r$GCe7R1x&wWrJ&l^2Ix^9 zsvRnbbsk9IyhuMm807dFK*=r=J`TkOW*C1f8Y9&vPxlYssWfs1tPtSc0 z*KWlyV37}~2+gj;&lAN6v-qb*UFr$dllpe>uzJ1mRaTT~mm9qjGU$K*TE38;fKAKH z3EM_aNLms>(1c0>+Cdjj@dBG8$1~V#C>2z>A%1$HVz7u1@gBg}+vl=l+SegW^y00> zSzlFq5X~trp;Ft-Xh>`p_gtv2b5Dl@&SL&tyA%k;0?x70wivudFr8tpq|bTsy%3`3 zc|*(8R57Xz^nD|t)&PHoA`K|~0D3?iz#69ja6=Rs#naPajtA73PiquH4?z0Oov;I% z++E&BU;+S;7y+m64_apw6cj4Uu_TDPE!}%Ca+DvM5*#X_LZc6iAd;=aJj_oqf^fAu z!9Ipq0lc6G64xa(iiw6mC^);Kcs3B}J8*jjq!(;~ADU~+0kMDVSZIy@5x``g7ocsF zBCDc##)KYN9HDcY5X1r4vWN@OupXkALRidyr&KHqh|WgjfFkRa2qHpF=bVxlSE)PL zCPEDg2QYC*mRkwcC01iB`CgH?)G=)+ z)-A>|;0Xd;o z@7^FoR=lr2ml|g+G*)a6!gYx(jScqQju>^+yGvgs9TfX&2pav45Ud69#nsQP^YtFZrm^#m;vsH)D{qr z$v_osRBw3Fc69?a_%8IBWG_YaW-{1->p;W80!=Wq5imf%`9VumG*}U;A*3?Ce^;t^ zTY)2=4Jf1_G$Q82E9!vaC!MXs-Bb`g3uVU(<?s23atwC*<27G49lhLpm zj79|r>fwLrcV&-GZc-B%2K4oihDEypq-mp?b7%->KpVA)4?_j2$xyrET8eHJoDIBz zgvAO_U0h8k)0LGlCCW(3oVMJ7T`5?*4a^}X4x)lRo87Xdk!`U{^d%|#QUat33|~=p zhmHa$R(jkM9&1EkxD6mAwM#lKdAUn2LUt3QS>=DR2-4^qWEv4AQJC3iIqOYmhhig7 zVy#W)lz-qvI(`6~XKikxh-)+{!XxD|1i9K962Z{QiQd|5?qOoCzeJa$wD6fwE8pTaC@+Dq5)|`dIpEN18Nh&ve*m?kC?LMhV;VjVv+&eI0=n_ zkSc!#Ddr@5+gJ=J(%}Ac=s7|X0Aa?y06sCmWg|VU0iMwhW)QmwIzc;v=)LQrBf-xi z_gPsNuKx*GDyBwf6Ew7xc$9=W;;Sgxu1HYF6_JEMqm(X)iG#y$(4BJaAQ##8i`EQX zGG}b)1~AW?*~zqGFpx!*JR)r(p)ztB?Y4gq&$x%(b;wW#0AEo+#B;zR6+bj7zlS{D zNa`WJrzDW+K+>U-v2jt7(5?fZ;DFDR8-6lxXVtNl6wu)^SYI>{F_g9ly&wh)REm zd@V#1ExXt{#5DgZPB=k0=OWPA4G~@+f24PPv$oar~g=vyBDQypv^M=ns7Mz$(Pzup81(hx( zP*{ri0qk25Ukcc^(C?EtH6bxgsJ?#~I<_4Wd&J0O;UOyY3$Bu3K#B>PESCp=X!N=v zW)I*`osytMQWBL9dLrjd)&u`?sl_a0c5f8?s-R_iC|QtCwSpjnKLN)8WYAUD9qV9ch&194!Da#4q+!@j)d59CC{xffi9qB<6b}3go)7XY zvc1?gmP|PDcigWd>*Q+Uzz(SiGKa#w^GeLr=?f?t_RFK;!B{HB$DZv)CU+ zxuE@vbZt!R$1Va*v;Z!n1;NvH%1qu7fQ#P8)Cg1@Ucm=O7!8w#@F9PpRC!i+FM0!| z99yR`Fz+}tq@~ACqb2SXb`qZ8SB-|4EBalfgeP=}t)`c8Y|Q)6TtFXyf|NjPK;+Qv zDOgzwsOy+0bqh3%A(mFt5!-utT|GRJ+$Xg8#f~b2K`*f?RZ8?#)&}}T>@q-#WA~N^ zHVb`{SvX}2vvO_PHIIMWbYwATaH5Scfn{;ja65H7_F5<_co0EO5TV;2-_18W{7LM2LQ zk?Ms$GFjY+=<3+zi0`HNP;fe<=H`JsUMavNeG?R?SI8G#dIx{4PPnH$E2da9@;O^- zxC548Lq{FIhJYa{hXDRcgyKMeFAxcqjhBp}26gaDv5Kw_Tvdng5Fh{P?)y2Vb5jf9 z3Tj}~suP!p(1?N|qd^2eh(+*@%ME740xoRMY~nu*;7L*y53-bcf3D{ujhaP+#;ZST zw)1UGI!=HaaNIH&^nGxTE1-3p1YU|({y_fq?%fL2BI>6mdK;VoMx|F02 z$#ukwbHcK%LEGpw?C4mTrPf!N0c}h-FIsYyp;LR3jYEcSpo1Jp!#hY!z8)>2 zKw)Bz%9MYB^+f5_rISiDx*k*jK`3p&6Bt8hf-@1vp=xRKBgB9c^k$Hw?NPC*rBmj> z_tQyr>;nnxpb0*9z%g5=Q79|{mx9zP1g3{3@H*x;fXzS+9D&_+Y=n-B4cMnmo{q%f zD4G?kJSzf193oG4pvR7c{7?^wUT9jiq)nCu2_b(OSn?@)g0i47ZTX|@B?xrxM?GLe zN`o;_kwi`+8~ScJtcweLxLO@y(2dZ!gkRCwsLpNkmfXUVC-kvSIwrWB`)1i7iUA4- zDwWVub9}7KOd{7&z+@9{USvEf38bDn^15Y0)96(|5!E6~;H(miTRFxaP*9x~f`W0Q z6pnwv#ZSkPYmq&NY~=~irv2a-c2sRmU}Y}&Lr01`N;`P~(l9#IB>BfPeje2HrBK!f((2hIj}0SZh*tp zGjttxGl7Q-@@X5C-@`S)Tld54ZP!L6#lF^-)zk5;)I1UkvqcHwJWhnhi#QigOUL7d z;^vN1LBw?Ot0%Rss80kk~iSgy_FcN_dlUcx*jicv)cxNUAr6T3R_P($V zFG|@;dO|D`6{r*SGl(=gHW;RbUgwd%rXFR`{d2CyM(0x3;Fyfwt&$crdTDxkg>VLl zFtWd9TH$-D)%DC!N)33>Vb~$T__}|Np3|dwlC$Khqa49A))htTfED-!w6B0zTM}$g zc){+%q2xG1mB6B&DL9zaBIupQdX$#5jKJ7GXAF9Rs+`9Z?&kyDs$+mAKwDTKDs0hM zXg4ImWz*Kj#3M#Me!2fTF8tCL|AN3rCuNA=b~c-!4bUbL`w0Z;jDdQ=P-9y+Q2hMw z;iT8rvqZoKL&Ljgp8?a+^f<^qzq$C&arqgRSZ**q zW`=m+W&5xj(m_w&)muOw017%u zL_t(|+U=ZQh#SWp$LCh}x4x4sn>^>bO>=}2pM(5n3VPUpA4+o=6plWW!w>7X<~XP) z_~k^nwwvP;l0b^LP-^<(LviuZ6bjv%8j^r9YJ0R#?R8sm^q~(yzMMlu-9MB0x3hn= zE3H;KYew?#(CmMlPO>$h{r-OQo8OKWfD^IFvbH#JdbSG2)#mR_ujS6qy)(7|7WVUv zQ+r>z$zX`5&s=!*^`HFq??-(R3nydN;ZM1VNMEVwBn0NWck>(LQY00(z507oZJHbd5+qpN#% zFU9y}c7A@;b*=!%;Q;>p&3)i70CdP;hAB7?IDk)9cRB!AP$Ul!0NPxDD!}yt%)sxj z1Oa@qYFU3f$pGepX@I0b&?Uxuo&t0>i7m1R|Gh!S9|l0iZ@u-mL;w@PEa1#@msj7v zAYTv^00@Bq06d8=YHS)80A_y#U$6E6KntY-D^n|AwIW{-6aat#pqCN=;PG13^Z>y0 zno1!6xR&KB;M6a_u}2;O0CP92t(SKRfwTbBFgt(RONs$h09JMYCE7Y|eR%I4EnmrO7s0H;JwIzH{eRuyZ^k+Z*bi73E&yLSNd6aYEt z__TkQ{C21c@N@g_ul*O+KlK1?+u!8?J~j;FTRkbj2`Zp8Yy~t5Es~fOj`As93xp5& zL9kB+l!mQ<1}L=P#xhC=fZA+u8q5#_!U`DnG(Z8s%_ETS#a)EU^rnEASpWm54_N`A zaJ+oHm;`_p^>kL*iviH1;S=s>1GLZD;R1iqzJ7UWy(0kBOKGzv-l}~^g{f`80BSyf zTIJ_z007!@t0Mptnduc!^WR##+#UuK+Tj8Kg#-Z2M(+TEE>MeK3pg^Z1!4i@{mQ3C zJpd&E@Mi&Tf#{x4HtDr+FXE0a-rC+o37|3B!Ge#SS?DouX)H zXp4Hy8uBLF;l%AhL%e(r-U(}6qyfN%lG zSYQB6ng}-&06eI90BW}*0H&gOz&ttmH2)8`5-EVh0Z0Hq3IKKoKor1?DFAmo0KD72 z7HDrJ0sx2v^5l1&G-MW_0O%~xz7nDe;C8!f5R}o{0Fddg87%>Dd+5FP|2}_!U+gdZ zwN@kTr~vTtfF1zcx}E_*rBacWN(=zQ0{|lci1=?^SJwsl1wex!1+cr*BY=v;0K(fq z(kkGil4l_2cSppM0qkyn;5fg*nZWIjMDYaVG;D}8qcVQOU;vz>=;bkC)f$V9dv(GK#w^9Ry+YYzpEAiCvp6Qz(X>ALLdO3{@~X7%=*lA zydv%d;Q80SxFR!v*nNU=3NWGyzy$6f^cau7o)gt0>H@gyyMXin;`RxK1%MGegsc+= zP_O^-zx2{bPE?Nw0C-$nh62FyG4TQE6%gJhSj0b`S>7yQp{N4HwV{8Us2%~*eZhW@ zbSZ$Pjjx_r+E4*N$OZiICjkgqPE?O*_kZ?3c!sSl!HpN*!;PE(67~rei?Iqo9RP^x z5pjXM=4yw`1quWQp&{u$@q~SX#bSpFY9avL1AqsQA@CS*?(oGwoja7)1>*Jzh9W>Z z%ZcI%?&fLtQ1<}ny2O6~;`RwEK)^Cr5&lr*!kME0T~nTvlvjkEwJ%ah+G!;b@i z$mLa&0$^PRpn(4UGn@n=TS5YPCV$qtT>(rQMw!+OjTi)vbaHhWnluKmt``Fqr2XPh z2!Ka`pQt8?Y;tJevwvx;oB%+3L{`H^vL2?Z!Hsv9Tk@C0@+L6xfwf*nn55Kymcitu zDvbdN0Cd-8%VB@qebHWqy7Y-qo{k)_mMsbp{b2%VMqQvhTLm-*uo_X&bPB*l9stta zPy&E$*l_@2V!&h>klpj~vw+5?L4-sefLc&~7YLk8*R`n+uvL7!04M-Lpwl#n2|$qu zVF}0|19-j5qyTIRpouz6gIxi5MN!^WO98g804jj`SOI?^i^0w@pbG#MFOB8t49I4| zFo1eY9>B)mX=}ayy(@~806YK&Pix5uJLBo{lk$0fD-`IG{@Kl3^M*c2xyAU z`|S$gmiB)Q>;@XXO|PkOlZ<2q(Ba$ZC18as=J`h6kDuDr&n~(jK6_2)$3;aHVD#bx z5dejwz(tSg&9isygO^$+Kdz~v04f5pZ*zg(`pL4=0tjC8pZVg_$=hdbu|^tfRj!DKwH%OP?x)F6FVsJ<9QYH06HG4n9>8ncFJYu@Z+9}nP3+H9j$;`5W-D_ z_)*DwNNYN|c~-HQ_TsOv-;6vt^EtiD z^a|w1^>G6*y-98>_Ay=!vg6vg0nn~~e$SnM<(kfqsuYXLg9D&kL1fS_pj<&@z(G*G zg2-S2C|D55Zn+o$3Km5Auv6`ckb(t~0W*J5uOKq0S#hLN;c{juBe59j2f#=yhx-9A z5(SZ`3V0d=vI7|VS>Q<(M9Q)Pcv1xsX#vC+M9KsI>gxjLo~6ehbs=uO=e&{g;- zSt7wF!#5x}sc8_k>AQXWQO6C&0F)5_dN}RwP+~wI27%i4CAT0