From ba71d2750bcaa8a81d4f1aeb75ae930e6ee9b217 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 23 Apr 2024 22:00:23 -0400 Subject: [PATCH] Load files from manifest for caching --- public/images/pokemon/variant/31_1.png | Bin 36574 -> 31729 bytes src/battle-scene.ts | 20 +++++++++++---- src/data/battle-anims.ts | 14 +++++------ src/data/move.ts | 4 +-- src/data/pokemon-species.ts | 2 +- src/field/pokemon.ts | 4 +-- src/loading-scene.ts | 7 +----- src/main.ts | 18 ++++++++++++-- src/phases.ts | 4 +-- src/plugins/cache-busted-loader-plugin.ts | 21 +++++++++------- src/scene-base.ts | 29 ++++++++++++++-------- 11 files changed, 77 insertions(+), 46 deletions(-) diff --git a/public/images/pokemon/variant/31_1.png b/public/images/pokemon/variant/31_1.png index 082e2a3d1b93666e5a5a6cbf1e35a9c2301b1bbb..d471b062136237880993516dce46777b1518251a 100644 GIT binary patch literal 31729 zcmYhi1yEdFu&zD0yGw8CgRs=l3T6|Xe3A1A&lvtt2E=UDRd7DdeOicsTfZcvv`DIY1!Ui0l*(O$`Ws*kmVfr)mObWYUz4 zr8=}MTBmG0D-#D2rhHEvh>Ay2(@|0_z66nzVKbmmBEFU?G89U!_868(a?Z&Smn22b zw2Ek>* zuuc|jv&v{%6SvX?yZi*z*C0;qM3<|NdOmmQW*Gd}oFPI)zg;G_%`SFV>35>}vAcf8 z8xaxgBR;fpcF~yxyUP6#8*~F(TO-wTa%MY`%!~`*wJ~Tskb?n(uuy3ZaIU@Cttqe zezzm4qY_-=UPGoI9VD*9Rj~2|8tE>77P`NgYYzOC0x#<29hCY+(U2Eri z-#o7q`4U_?B*47(=3XU|10xgLj*qB+bHg6U5nkQM@UdQKy29C#q$GcrC{ie+W zr)57+2EF>~v?#ug;M4fWn8-+SwqUDGoMgP{LUU7qq{Lv3#7GWcaC%^ydaznR7@IKA zpBchoos2j(gK*=ZBq<1R0~+%PlY**@=*!^U^02src^nB{15Gx$`4CtGe;dKBLaDQ( z=L9fbApa4=3<({<#8VG*rH~jQtqc7UN3sh8CxN9(nuJIzAubDzCw82tUPfB+<0#+! zK<|LTmADOrCefUyW{LfT=Y>Gcj#SdC`wPn!uHHz64>2Z$pm+3wlaHJ=sJSQE5yl7e zEJUS0brb6gvS?r_RsbfJKtU8c7Ji?!c)TYK5*B4;9Ci`3mDq9|SrK__q-=cYh#oGy zloW@mViL+2IbP^?K}x=MK2KqV8iHzenaG^h9D_CTEtZnBO~Lr|!~w|lqX1EM6sxpO zUgp$?gZcxk8@?wz_~3k#pByoS{)(h@c=gcrMD--IG5n!KLqETj)PDI-V1e{F5^d1= zm$5BJ6S6m^H?}vNV2p1t^|q^H6Q7~Jka9TlfYzq2BfX=JBTfrZ2lhJV`A>|&>x}y^V}nO!BdP|}bc;0$T{RDX%rtOnL8SRL`6a&B zJ4ao??aAPN91P!<*iwsRcxJF*FwqRDP%+bJopYO$KKgpZhbF;Q0ym{@RoviU8Qj2# z7a5r?-yokOA3f%T$M_+iWE$q+@P_m0+mqXqpcadkidNSV-8|1cb4AVk-?Hyzm-F&- z%k$E6>*ZW?zH_s4&E+2D8?$0oX;vXNyVfVue3h53=yox`Nzbwp_`~*B7eYRbb5nEc zSf0(2PGv33EL_cw%~Z??6y9oPR-fi)S9D4|hujsRYYi*O zc@;P+IY>Ce#y|Xl``bPq#xjMkj4vJqA4Q^wJ)4-`Z)+B#JHrypg2K}NG50Icmq9(d z`lIG2OFM^b`!!47;UC60mKv6`CfAi!=`4#)LwC#iSNa>RmHY0KzV;UO!_6xu9t za==$NBct5)JsMT5j*r3=RwOO*c(_Y=fz$3;x_!$Pn7b8a|aX6&3+@fOt z^P~lM0ZdhcUbARxaVLMr=rFJ{**@Ss6}FADr*Z1Cp)<(~X`c5On_PDY-C*=@@Q-`r zc_V?+g<1{x8&EDb+>;#W`?)9&?(_U-jG*x#sa|19M_HqhySVmiw0)F)kI)`== zkT#1}275Y!BZ4L3oIgJce&S{(ptwZP>6x>U>zXsH{!e{m zebMi%)Kh&PT4d}`W)hI7y7obC$mCqWfMgw*Gh-)3Bk`J!SKwYY$2o`H!Kf8-rSzNr z%J;e(9H`rCFs+xT_p8aswRnH*No%U2xYA4KxQ10%xNFE^Jg_mO(aOf3p@H=yn@=mN zxq(W&_H;%;?XBOjUKC!W)F3ZUi*4CT_%g#1UyIdQNre)*f+sD3LX`ru{D#9{`>u!N zah+sC-{ph`vtNJmZ6~$=Xm2eXudFtIV9;TmWFuc8tLt<@Fp(LJNfk^z=}`Tqqt+bt zOQB9dmq;ICV5ZvGc;xFQe=8fUqvTy>ep<4;*#5n}=Hzl|R=ZS7NB7>o#^`+9tNUpJ zzVJt+Z<;UvGZ~LG@16hnQ(LQCVR^%0zu%VMVPH6n?|97kI7fVcxO7Vj6rc9t`Xd8VieXj`Y|0=aXk>Ph*bB zM2I~bnum)^cf5a}-;>V@YrE+0c|wr-A_{PFmH*~ui6pxn9Ukt^nsh37oo7V|yHv4t zI9%9HL9X|GCbJLkPei}3-@eqMOc2C?O$|=kb{)%Idi?Ts5T3~e;6K0%hLMJ~u?ZTS z5#{juY)3vP&+2s65P2NxF_-B{#R>oL?JA4BrI@Y)Eg{lvRX?oYW8;H*Kt7k_-!y`Lh_n=MP``Jm!3@& z{NVW_w~&}#Iw;EgrvLnB7vjE@pfQH?n` zwL{I{Ws~LD?yWt|1Ba{iy!M<~G|lhek?`j7tn{Z!t{=>O$o2E^w4f)@Qc{@6sw;s& zUUVQ(KnMu*1iTb*00OzOgFr_{Ado;B2t?qR)utu{yn*B>`_%;mLcxB2K+UZAy#Ozg zxJrF-)o?I(_4wv&29hwdb@}c>q2cOgYUMzo>EK}7Te{@~d<;lV^0TIA)@i58PyPAE zPhB6)dSDr)2!&#Eh#A#DNX5b7w=N-6UOhd+BlW^axp?en;TD0HTrIRWmKcW=MLZPY zEVzRK(I3-V&|vO+f~BzvXu}m{v@NOQR#nD&HYlcYZ>Ty^3v{|advC0JEQ$kBV-xfO!o#*G(s z=45(vtVB|-jFOvH4(Es>8hM|M3)OoV+qvG2Jbu$_BGkhc_1=AnlbQDkf+D1J0O6=? z&Y0gU(FnHpd&giv;cg@ksWoYQ`Y-1zNkSDJM0w^Chd_xmqMeRdiJgSb4)bvdb;-#K zJJE=ZnAgzY89vwlJDOmtJ+#>{HV)d_}oFXu3t^naAd>siB|&oyq^ulyFWj za(4QM$=|dNpHK)yK%keCSA?ihUaQ~{bFRZ1Zf~d_oyD$0JG8)|ao`uIU)hB|r>hRN zufxZK_Y>|+{rH5I6K9n+8;V8Qpyun`G})K;3+Ar98D0AGPXn}|Hr(3 zL-d{~{GiRW{ylbvg7MZa+Y5w+z~c7(KtA{mOT@u*V(49#FD;gmW;MTZ+DGf3FtrY zbAdx(o7!aq)UHxCp~Q1fVT+JZAKr9$CX>K55F{~rJKE1KF@k*Sf#MXImdaHT4f1w0 z6ZAw%tU)#jP=b#+ky+aJI_rC*WvgSh!QNkmZ>iA>HD*1+)6^qWQ=LSQfUHt#r)fu(?5oBe7|(o((_k zNYGx<5~Gw+&o}BzRtRJA(I>ccZui$(k$G}#giRV+4GWNPsZx`OB6kFx?a(QltIksf z={gXqK9foE-E4-I+O8O#m@Y1H{Y2Z+q(CSKcEbDbX=AOe>P||R>Zfarbn3|ImH{G= zHXcu(_%ZXIvbCq(hXyzSQ|c%0tt+HI`+~ zxD(?=%4d&f(?cg}f)US(+@O~4i(1E$$JaE8vSwUHEB55R|G<}Tga2w^4%R~wH-BgG zFT8nvnCRC01Kyj*>Y=B7UEfRQB7tir9AOAvLhxiJX#3*e(-f2enyH8xF%i@bjKci99`Z z7MRP#x+M%Wt|0_EJ0;K&eCNop;R#V%J}N6ToN9 z?O9mBxBstZXNR|jw=G{AIr9VGFO1*6nYA;uK4{vlC@vrNg<@PB`1>E;F0(qOaP&|FpUB;M6wX`bW}6J$`XrNh(M~>zl(x!zcYwH%q?P*X(A=V z1NpF=F33&)Csw(Al9AUUCbsalGO2FMQDAVYzWc+<-(qq=jq|mWDn|FYkD%sybkJwTx*V?Re+K0vN30}`B1UZ7g#)Ku$(hV& zL%NVZRs~oOMwI%U*M2X<5^unv={b!5o`MTiXtwtD7@jMVD720mW?!jkNQjD?@ca!8 zGob{dP<`z1B{s`#&BgH^71c=p`Lh$EwpLaAWT9Xc1G$DZJ3dN&R_+=|3NE)RLPn*D zh+@s0X>7K)+q~+_y#T5kZmg3xrVs9iO@~}eGj%E_D%!pU!&mUjxS0$pKNbhnis+9l z%eVdAJEqdx+i`iE=&p{eC07iw@4zzNcYOPGasK>kY1M+Qtz<(bACGKHTll;0g^Ja%ALAqK~uku`}HGz<=3M52lJV}BtiV6FYUzAI%V zsNVt=YHMdiCOt{k2lyrtr;lSrHPybsGC95=^6u}xrj+QIB8PwXG0-qbm%`qj##cbA zI4lFdoks8_TOT_y7@XTYyxML)WY#6WC>lCn)k0<+M8COtiRorK4O>vr=VeqK5$lP4 z_pv&y(mm?ieXy6&)`q6vH5&Us81jC%OB~VUzd8^o!lD-;!5Sw6yQFcT%qNF_?u<|OBXn1gE!ERVclGs-u0n}J3xJ93@&jTWW@fao-|(e zFD9<`c61^@1erR_VQe6GX(Br2{^c~Iv+g#^v*FT27X5V zGf7T7W37nOfQwAYjmZwDP&;NylMM}W=DP6^^)9q@=e4VIeQt|~(R#Gz>jMrllvzm_ zX)}F1>}Fw$_8cQF0o8HsWp8Wc^Y?lzV5=QATX>9yHH;}1k!7Ddq{$~TZoYbXc{!+a zb)^(ulwA?SOi)CPfrP2Z#D<{pFH%-2rI8ec|7Y(yU5gA*wWB=hI zv^nP^Jfc6;ueBehde#-ESH+`d{1CslRf}TM)m9f~>frrJ|A*3B1uH{UZ&I;Ceu4;% zqKeU8+@>oxub#X72H-$|`@AOT;&7Rj<)~Glu(BhfJZZ{h6qbd!dYLYpwGwzTSd-5o zy<=l`{qw#hBU|`~0-M35Jx*o6Hr*ifu2E#+nV+w-rH00=bYDt18uTt{d4;01EGY=g z{}gjXxhHpo?VLAtNaW1OoSo3w(Gk?`dlhV4r}SpO|4WUE+Q@>7sAoO(kQg;%zgY@~ zhbXsCJ0VF?IdslSHPP24KF>t?%Llvf(Se|(exsWxz>(-CgkSM#DFW;|SJIwVfphL#H0!nI_R{n~l( z)Z04shQ^eZzY+G07`-9%XVa@yrl$A9=pykN?QT3S6SntzRsBZ2xCC7RiIO03xbo%J z18y)}9;)h@K@%n#^?*;J{+5U*Cm3BF9qRhj%}txRdoXos$Yuqschf={Y(8{U^u-W} zN$4;=)$-BNLM!Kj2U=ZLe$ZWQVxb2Fjqn@e<7w97Q4So=o3X9anYnmr z+2Jef3RzoO`&cyJOUJa!zKpIU$BX?SE_FK3!*!`qO&Ham8|% zNv3H4C%4}W>ev&p7Dc!vsz7+FxN~-*6S27i>WI;du+IM%6feZF@7fFx7QaOsS@8%%&SZ?)j z_af3!TfuMRC|<|8Nkc8)-(_0PfEyw?w5li&G@Qz2 z1|{MK)pTKLIbxKn8v!_gVt!%6uwhCMRBktX%(Jw0 z?sc5p5Ump_mhWzEr$F%{uQd<~0K=XpBr>078{4>XG%`VA_^%)+{X7uR&l9-5&p%Rv zqr0180(ZEK)CGiMsv%LfW&(1dJ-jf`WAbo>w01b(u=JH?#OD#OaB{ zR!7Ru@8mxi+^vE6(<;cF72W4Yzw-7#uV$iIO}X#yDCpg@iG+-g-^$~#nBOJyMEDsciA zU6S43w4>#iIQ&WlofVkhk-Z-k$C&Oa1Z9Dh5noV4_+-mFUbfUg2O)_r34FctW_e2N zJq`(S0D`DrS19}TP(ZpON6EN(d_xBT*9sDr{90UI9<(f7{QDkZuaQv8o-%c)7v7c` zc5NE;6I2?%7W!_+s~1=e*q(d-1v(OP#VdWmE*!!DV+kVAU`h<@oYF3A=FacCx>)*C zvgKa{VX>VVh}h1Ksvm-TjSea`Ed!O;lw&aEcR$liP$FoQ-7oSuFFGDCNY@fa_EdJf zm>vNY42(nlUkI^$cg>Z5O;Ugq!T*4atN2=E0J% z`)g7|SNMliF}c>u+z#>QS-_~vW_gmlH9bM4CR02g!gt=T`Qnhnma@>_^pP(A+|Rpe zmUMb7oS_PXrB@ij{Y%b2H@XGNGOs9vH8nDbI-^c`dmT3rsIuz9?EN#qEuBsqcV=%y zYjq5BP?Wh(P%n2Za(8yE5s}OZ8K4bxF?P;=QsfonZLax}aU|G^*d?7mNt_xa-;|1O zSKctXHE+izw@FGDHtk;Rp&ks=3PZy#AabP2#GyP9idmfSb71s&MR}6_yM=Yo{`wdK z(1@%*^1goE5!;44?kQ z8V!SYj7v#Le`52i6l;WXl z$4i1-!Hx6t+mD@GTvd|F5b(Fns&87S#dabCxjTYmty%DpD4AnB!4BZML2ogxIp)a4 z#zC&mA}A1UZt3maL(jyv-?P6*X@xoI(^Y3SYiOZ?StLW$u&v8Vee4c7*p?`&mY~}L za=ZN`!V@NAfV{JP;p}MiVVb;FZ;gfz_!1A4q3Rsv0=ehvrRot>PNygrWaGe? z6(B;&yRdk9nYq%LmMAS9V$0^gL`tSgb`y3_s~%yr+vY(Nx6!Au?vlIa2U@oN+I6+?E#zz2=#uL zGu7oNom~@vAt9GUalx>H+5pXL7fN|5(ge`vo)sx~Ah-CKWCPl`c?VmDpdjdIAv4jE zm%usB2m!KRyN>}qVj|Z!VBl8ZhD~q$S1?Q%;G{D}@gX!Eaxme|3UZm9Z%4F3|L$nlWGm>pz{kMQ`E3*@cXCeY=$pHb0zp0q+i~eF)(_zPe9JG(9yo+AI{1UxSVQ$<&c>V0UdZWZlyhb104*idp6^FK z%2BAkN!8sVR{$CP{p;TJeOFK9^|f_U3_brh&FjNXH!*+DZEGt5)X(LJp3^~U>delk z%^Q%%>$FVkjj-$mQc1&nRMPcdnsu4yfxeP;ug}|JLX23JRwuFKFI$L|Sm9~m0~k3O zr>?~iQ?6Moby6VJEBfAa51OsqtaL4yoEK1iQEsM=m5mWgm z`kct5hs~`6<_H}9uvX_OQ!XsNDK_uXTB+XN_T0`|h2?k&4OU+?Z1pn1AoIfNm0?&t zuZS$l=Cu#AnS&d4WeL)U?pu8bEzesH^Y^8nC4U_EQ*bJE+#7akYIZ@n zoGlE4ebZetsv1bEf5;(WtHY}MIy;N71T2fw88uX4FFDy~a9UL?>3MrZVlb|yko`Xx zT8OXCZTx?2 z-3%RBt|Lgmfvrbzw`(jk=h!7qRcme9MTCdg<9TVu@#Q;GmtiL}+#)kJ1|=;bg%#Mc zpvlCpY-Soi4L@mi%aJnR%nEM^>v~NzE~^%x1P>#uf_)O?Aj~SY9FV92nY@#WgVySm zkHyYVPXshAe+{+VWUiZROvZ}VeU4zOaWzP+n>nzX;}cL;9cMJ|tcnSnb;_anm2&O|^0bS#;^AV4+=3I^tSM&Sio5=gkdJtOF$G;LXy?UVF&ZIL7e^#1e=oBxds z=s?P$!qqe1I;6khrR(>110m&7)sT!aKV z55;NuU%SuvnwAlKsrRm&5j8Bu{e_85?e@&#OvMN{T(Yvl2#uS0Q7ArTf>J?4s)~_^ ztF3sTJzV{LJyZ!yY6fgt&0-c1jRU)GVb z*tbaOK?uD1=2d#Kqe1`0=YE5^bSp#g{cG^3Cp;K$bSJ%bI~=8harnO7{#nLEtjA+d zzpJYngKeT$D+8h^wXHkHuw_EN@`cKEP};3%izcHQV=e<{zX-M`D(#(00*Vvbe^mw_ z$@IWrqC=y2*-zmQ)>S1Qrh@N0rm$wCKYdMfkgK_iflRdix%BAPHF`C!OwPLzE_G&y zCvj{K7-bdC8-Yb^3v;_pYbOkJx80%L0WB*qV3D-m0Ryi-_(21}#D!fyOOqJ+@=gd> zp~bi~oITM+Lku z4Fr$`XLrgb=r*oH+XLgcDO>>Y`5q|Bkvl$v{?%f|dmiB?{wO)YlH6X_PU&*Qnw=Ls zANCiz=>`QvdDwmfZVdai<(|KPdD2U0oEEiPP*PQl?A-9g1Zh~eOe*DQoT~Np^C&3k z#6WFUY;_oWuD(6{q%!2TlCWp(YXQf^4o|V%7g^57_$OlA^R&RXcp`a`)ECHMSHF1JKQX5ujPYVe% zz<$Nr?{z9}C<2WR8sX_1HOrvn%C+;mW>)KenLoxzmq&};{ec4p1e7Bp9d0bhU>rZz ztpC5ib|8D~`*>&A*FsAcH(gdO0fxT5JsgwIn?UdNutF~i3P{L)-G6)WUuwTswYmyj zLKd4Q!Ywq`N6>2y6@Z4#TMkK*Z-}fw8+>`m-x^IsSz6T}o}0Uo1+Pl4i!G%QTTm^k zE3)}}YF6P`hRbn4-L4GCZ_g1t&Nn(-jMQTQJJc+v@5R;Q*M@w0sc0CI*pg++MZkuC z75nqA;AnuI`u1W1)FWAMgQ(+y_a`OwgaO73Sa&LU3RYxE+*Eu6>f}?DUePfV#yq)T{{|(e#^dBSIR91d2D*EspPs4jl#tJL``cg_3 zi{@g`s@gUC2QX?uE2lMR>Qi46Uj23CZ*x+0Pcp76R#z`hHx}G~SC|cUJ?)OFB)3;v zUM#5+0^fU^tBtV^Zmh`im0Iyj`Odi{+= z0CACErJ6HWoy}-ot`?yx3SN$`At7mf;LYF(zif4DLM9R6?ua>8u zaENaMeYk1-a|&;5%bT0UG1`Wt?22l*q0A}x`Z`Sh5Q>Bn%BiR*5V1#6HUCjXg9R#p z1Fg6?lRGm#1`{U0WncSe6IFWB?pPy{fEf_4$!r)RspB z3mn7Q#GsSxbjG0=`EAg}*tEx7AOkfyWUbcmF(gs-p(h>S%T-lX#<|d-C4hbc@DiW- zP>~(22osxEsYw+{azL^Xmaeg?5jH6Hx{zE$FCPi0_&sGT#+p$b6KW^u)$JDzA0Vj? zXKc^@W>CNB#V9nLy!1QU0G1+dnK2=?DfXQe8<4HCOyr&wV>FdxR8!TrP_PXegK(|r zS{HxTaBiJLC7r5KT>_c9y1cwhd%c|>hj2fZBGN`gRS29*z`7c4$V6yZHxm1$`h&|V-GbRY zhveCg)2GRrc)oxFf&ZbX`w5p1n_qR?%9K%+sa*ZFib>8TczgH5w(n+a?;leaBcW23 z&3j^YP@-9K#wsdw5gD_{@|ZfM$-3 zY!NroinlKg7pK=lIejx@gM-H@fe&+?UOqAIoc~X6M7RWr80@0hHfK0aLc~a5_D%eY zAiT&eEP+0{>hiecHmqT0eCNR@pd0fDeZ9-~UW}`1plV|aAMw>hQH`B#@3^2ZbavVs z^i_9foOPuW{Deg)JE$%NiC03*5N~a~6Qw@ap&gW5)hyPQ*^rw!R1KwC$?4?jxyqi> zV{-`7-*p&@?azUf!Bu!X?XfZ$NlG!fheiyZD9@?z!Npy3SNo9f0fm2Oh5c& z%A30(((pTICDH+l1X@Q@B35Bg=HDG-Hkk?p%I|tWr?E(W_HxpmnmvvtM+}075FB{2 zhybd&{ivyUFUL`=*#GY|kvwU+*<>b#(+GKaFpjPP7EeM6CmkoSDK3__%t69$=W)jzJ?Tna7O4OC@1#EJRpmidd>p*o$mz_gu==0H%25)RC!mC zcO+%syJ`ZN(s{XTWbdB@Qn`Iv0Vjl#`kZC%(kgLc(VTeM(WeVgwFK)vMenG3V-2yW z$|jfW5QYKyRCiro{_vkgEhB%qs`}iqZ6kfmRMS2dHiElQa;0_kp36f_U`YqgR?MN& z?230I|6>By)LG7EK#nsVYf3BgI zh=rk)8~ImcusFmgf^L|Z4qj;*7pJ@D;}hQSu8LgZUgKM0Fhj0BDj1l;#Zj#S6D0g7 zJcoaXE(Z`c1%_VUus-u&A7oSj|4TEy=v2Q<*hIJzAV$zlofhv+7s0lCFx1M7PV5AA z-+=MFvD$WTjAvYZ(NHVqG(o;O+{woB$v;r2oEY`QdHRu|PMc4bH-f~J#hMb`BI0aU zT&$-^$=SPjcJv0H^nbggm&}2~#}#qvj{}1oGOEu5KU-#4k*X_-WpL|H8<*|1AT_N^ z;l$&7o3^RQ`gjVB$GppV>_kD+2G$#=KSmJi*g*+(Php4?p{2%d%9`*^Z$c z%2s?eI}jf|Ps;#Op-)knxi5G<2Y)$XTSpa9`9sfuVS9j|aoX3i2sTMWwFK#%2(Wg# z4z^HY1lnq+URTauT1m2sB3#rHglV#>pF+*!<^BejlY&uwtXVk)s`Rj2=JLX>m9#!eMd&4Ou|Ce55u}40d+|OEj;Y~?Jra=yrU$FUl&Fh(9=bLu8dbx*e zV=#U(r~Zq=fVwdJY7ta3p23H!BaR<FFpmKczt* zI5#4cmzCTm1&knt%|6`mSR4LcS+Wt8_~@DA;MWVw={lN8Xw=4)@%C!y05`)Z+})%) zN3sHa;5~+bQ+&2uC)#f$7Ci?!2V&PW#SrZYsnlps6%PXFU`)$HI;(nMIa@yV``ZATN9I4$L1rBg#*ygnI?$!W7Dvtyy5bX+E}Bznfd{ULI>s zcFW)av$4^6SE#wn9}4NlSL=}r&2IEG$$bQ9Rv`mU0N|cZlw-gB_hbvFOAzr~ltaTf zZT(em4%g(}B?UAqDP)Q6T#%2AJF~JvLtw2W6dB9B&7BMNC8mbboL9O6c`IrPJ0mg6 zgc1IT=aQ`o2Am*=$Ot$ywY!V;$P@w@MK%7lEaqVvB&1)7*jOznU8SnC>MIpRMf}Zi zPf&mW-BAC`CvFE{)ToDyU1MDn=lWr@RG-fWI<)Nr_y9e>4pTp@Em0PWut?pbiw_t` zRhe*gBITHH3^`-V7e9$_W9w=TA|Xv(rxO!R+Z_Jd1!hj>l+vd-OjVJHWl2<_`;3ZP zMk%bc^I!PZTz-8>0SxV}>SpCxWJV%}TsJkh@LpO6xemJ-0G-smfO0~N3W@UQ00USNucEQW>k;zC6E`#g`aw;+QFc2p93I@hvPGMyt4-iA8o&rN3MH zA=NA)n`PE);#%#W%(!$eg+iV4;RxtT=_4wYN(p9%mP4Wge)Ui^wnfSDyHTPMR4OOL z^I>*<6Q&G_LsV~S-PKDD_SNWVpeSSnN?UTzr;*Df_0}|s2XlSfDpckTd-Y3JkD=$WT!-^b zwsyEaGyJopQqMuaO?(G1vmtwroqa%>&94`0msyd^{FD!5pG!wb+Yw92GGG|BT$ZM^ zq&k)CCX(6$F%_qY&ng7)55gW;kw5t(ifYk0wZ{KEys`8PPUvXVSVyWRUrwsqtXy2s z)~WR{hX>}g!E2y9(%mqKuJ~IWhg-u?>Vg*Z-3RSg=zOKC2qCg^h!=EG4>vRd&VmaJ4eWr24dk_NRhE zTU&j#!(?)|T>J|EUI0mCH#oY=BW-LedA>tJc(GBS^uE!pN3i9yjKo-)ba_G0}`6>Zw)vW4cLrcU=WQ|-mqAQR#g-j*@&vbn}rU&Tr( zQ!okvwc!C!8{$dKwX^~H*x_`@Upi415kr{S2Sli?5IpN+sXu*}T9+{LAO~&7bL?26W@L*|!(khDbmvG)e7)h9{J?Unl zJ{ZWURYBqGi$q;1YRe$$hxE>1JXlXu2mEVz-A(PsTNqCANK znTAl}Au}e%acdCZ0`ED%G!z<-N#QF|GN-Bm7m;>%bzj1b{8@J_&*d~%t}39g?ZdnZ z_`1VyMZpd}vD>&KW3;G{Lpy3g0WLbFd{>~#I{l8eZIj(3+5$cxTF%`yu}pO+V_=eu zU)1O6l-?cddm?wjaJL!sJq*MtOZ%I7(J+l*o17+tiNv;ZqDRiY2w)GNYP$YH=fpJ< z6D#bG+0!(e`Q6;1DH-N!w*oMx_X|zns^-n#`99>;AQx+6-!t-IfB!vhMCScUvF?A1 z{qDs!#rW8WJPIs?Gc9A_D82EUvfyKIrAYO||M=6<*4*uVwHO-XAKrbPHQCQBpv`|e zY*2)>F0(lZxSvFL@2MK_DVGD@&0Q8Y2sKSenb!F>vYm==+krEG?-NZ+RUI?2>ULHF zHQmJA?RNrn<+8{XpH^3+K!0QyuuKQjWS=(6A;!;IMiz_gR9A9omK}DH=e{pX*MRAq z<`^NM>)&6Ra{N=Fp?aAKjB=hl$WIgOp%fHIZ+h>%9LaUXf@`FEA9s9flOo}g)$JCJ zJT_lo_{;sIZ^{YxUDIZwm#%O<53F=-p%);OL?O{O!@;XA_gEwVmBhoR2=nm^b>^Py z8c$tt{r@0$u!D6!S#%s9`?A_LG*$wD^f@DD8x82Ls=8l%5tn9Fu0HYXK^vKJJ$Ef3 zI|_=3yteFc@e8L{Q{SvzrY9l)W637Mg?34DONhC-u9>4*^V7O)9;%q&p#Ka2OdsZzgRRwwfPQsM+y4m3TD+-67@xtf~z_(9NhjZWo_6QeeA{8Tei;8-$qk3Lj9q;RpS$?*SY{ zvu`H+r6F)j1~iuy@`EMn0UuUgOnfUe+%H4RVNk{7 z0zraIKcIt4G!&}h9{&H51q;#s-@A8!+qpm#ea~32`wNSIvQutvJJWBQv*nnF3xX`0 zS$(`ssF1ITn30%>Uaf*M(js14oC-)?Eb}VM>U529Em1vzAJoCRZD0P&0YJ$A6*Qtt z9_a2H8mZBmx=^V!kR#`!Vx1|2Qg>YeGZVDfKH?}mPJF5Sq7yVio0f!ZzUEVgHRopq zj?4c77p^|qO$%c0m*Z%-(s*DdCMw?XE8LiY(zD1R?2@gZ6`Xhn5fwfAyFqZk88DN$ ziM`E%v*nAUn&S1or{R-dX?QAzI_m9+&7Mv~$F)QU_7Tj<7IDv&YrcEiCm6m}N%!yu?RN<&GUIx0pVq1?^G%_rQUoqc%Wh+wH6~ z8(Y^43Go>83|Nl;JJw!Sr2~?;Dk*WQqbr2wV}yuZC2_`&D>z6un>+N&5o-uxsSM#g z;%tZj2?}7RIkZ(8liU??`9nV_NwZ!gY)$W!UIv zDBdpjO+?m1fh_(+Qe-InCoJxKJS5oppC-VDLuL*e-6qPzwcPlK}S)gB%-nKihnWWz;Ub81Hl zaJj7OCn<}_q3_w7?%f`$kr9iCfT9=z_#!0|tXNmu8Uq1WP5iKhMQn7IT*+r? z#3bmg&?dvzgT;42X5d}-_#kLT#je3r5qp=w=V{&aOAW6S!F3i~uHgbiZ=^j+ey~~j z7r^^;BCSZFjktSYgRY zR8}cDzEcv`=m`4(7@Laar<1bWFB}O@aCGTGeNkI>Wr@-;7MbssSw|ysz@;cN0+9It z!DR7+F|oQpb=9l@{r`2b%QG^NXWsUL8$LON&t}4U7b}jp5~Bp1Ezy}`6_8?d4PNkM zAQB6jxB%|wJ^WmehimfJLti@`-E4gdPI}8CKfqB9mB*m$r0&c}kSB;U`2(|*SMKiW z5WTRTu962Iv{oBkMf(XJR|v#V;6W^-v|KbDoPYo@(K83TzLOIUkfSnd3^39Zcn>>} z7YH=LIKBI<|9jV&UU%}};6VBvCMW=+Qiv=$yTO4(=2E=^Ht|hBq^vq&K6Uoe0{&Gb ztSsQy89Q2jG@KakNg~tuZlQ9(U)veNh-*AG&FT3Op&uRm;UiEky@ReT(0EJ-^}|+$ z-g4XLBDXc50Ki5r9j>o8J#@eLMb7{ZkkN1#>-)6#S8xLnqj0Kf zmkc^b9>dBoh92U>zUN0tFjV+am_qjbN+A19HgR-Vq7Bgi`%%WQTPH4AMURZ0c4K75 zHSWKTjW{`l>CA|r*yb`1yFiGeazQFOjX4B2~{AP zW&-x3hX%Q$IubW_?tHNR+P89G`}t<9(h=5{j*hF2iCrxVmN)iPp{%X{c z+A&XYJ7jM!xnS=%JW0HQb3zfTUJ>`Cg5()juRVq&sOR0YFI4?uz=qnjj;O{n(U=mu z+vD&0jK%K}&XBkR@2lfc5lQWa%1n3YpLbvmSY>}3liwcV*GexDBmRJOTZ%PHbsh|o zwxyoWQ8=8wM->LaEfy@+%$_^;eeb=m?{$4{b#r4MloZc`<}tp4T^`j|*t}!G4yz8$*XU+@KzTWgb6jRBKjc4F{$*dwHy{2uZ1{LSzQictKJcdA?{ZQy{8L>7 zCjiansTj|%!`%c*WxGJ|y3|l#UaNb_m`TLYNKoVh&YykED@c$+WmNhm) zf@f$$)wl!QwegyHj(o>;`jpS@-vp7_=H0mInC7iEH8u4?WpgM2X4C!V^}(-KAnvw7 z7LD}d0|y4mC!W^T=EmaVAUJW6%fX+$Wp37XpDui}^P1v)&KJ4!g9C1K7N2C~Pz}r` zaJ;2wUXN;G+G6QoK9j8$RZ~LG&ZqHlffdXqN~Wb-1&Dgy-xK9{L_)WLs)Zv zoJO6J*4ht|8hSquH?3h6kZI%Bp#LaO^^wy9atY%Vp4hBoNES<}D|&%1Lj@0K6>kPo_FF2yF-L1@U%bOTN+lEo_lefkmO>9tcq}U$K^FzC`*+1rszEX z@I=1Wu4)5&@~0Ro7%ecA*r}-T(u7XCz|iN3G&IFJhNo}MbO=Ablwq>_WV{f?!g|+i zSaUATP%~v_8sE*1H|noie;yiOAfqu~*9a!DEEJXM$hr6uP&A;w5Gy1{8@O}nBmVGl zG?hWrKi}7VqqItjbDh-JYEp?Z@98V#3(bN=k_2sk&?t6K0_E^?pyzZUIZ>`6P zDfPTRmG+BhT1F2}CFOEEy;*NE*`Hk|Z{o6cUCz}oAV_Sg%Y{cMZHH4*rG^%u-v@oD zqE7o^h#k6itM9v@Hc`5ECXTLKd#akM7%`OUoFQvv1eGYV9mEoTd9MAw{`X>8s0BRI zA*@QhpB)>XEc(;??1&3wkoJ;3BRa>9Snr*Gw%G0?sW!A&7AFcBp?D@*oNcb>uJMX{Oa*Fv#-OPJQ4$eK=5%8wXNWb`-dJlCVZ^6i;vhB+uR$yxq^f6_vGvpC( ze&{P&YuxE8enkrBqOu6Tz942@F5!m(>sCgHhp<{QUy*vs6-384Q$vrkX5l>pfujXb zbmKlXWppYQEOs2(L#^16=IY)kw05jZP~M)ws;;q!DkU^BbWl;d2|bVNU2I@vHzh4em~B z@I)xBvhoCmX4Xirl7fPdD@X2JWP@DWRJ$I`jf*d7p|h8G=jr3=@E;E{A7<2|Xe3G4 z1LcYCC^r@&

skhBaknzi*>$INvT9)&FqS&Y%aR#mo!@jp)edmA#ygEP{|?`Ht;z zbhP`)SX(n8-?Nzvrg@zuhoN0yF~<M$1Bq*@p zCzY;oD@(rP>+Gd|gD}pfXkL%bpC#W~TM#+W){M_yR2GTK6lX{A0{?L*TsAJB_F5dK)jQJ)b&@X_>z5!}O{frE*;@W1iYT;%kLIn$vSJTa^Q~eEdGCQ2iJkB1_)xE+GC$>n(Y}dseOgyE%oqZHwNSSG%GJCP@&`xbCV{(XW;Gxo z=5@ri3Yi4YIiC%cxUB@h9x|k8Xr&Lmv>|*OwItDJXBP622~G6n2vXaT_r55#`nriK z4cz<$0+tsIunr|MxrRD<9`vHM^xeVBi~?@1fzf|2-n?-(63$HC){w(gJq<+|z=~&* z;z~2z1DkGrNYnc^_CH<#-{0L4iQbP)QldrDetaHzlnPeKar>D1P>4F#rd(@HR0%}4 zo0M0G;|2vj4<#Uy22@X*zEgiyH0WGSQ6}el;&bIy`thCoyrJ9h@`ydT+0zhSuB{2< z%G1R9p@Rc>m^4Zp4s+Xn>HNAb*Qsc2@odSPh=8W6lD4p3^X}T=Q;zQJ&qZBDoM4sO zH>&eT`jE*Anz~X5e`2yO_lj6FvuR(%>VZB=JdFDxrtyRnd?xY$5PvE7s4 zJt$9~0IL;ocUQ?Au%zhEn%VTU6>S84_ef6}77t|2`0z_Bp6q%K-829Yl)51)za}x< zRMX_tlMITFI?I#@{Py88$ROR2N#1-ZfTMFE$;Jc{42MlS)xU6ZG` zw1SpQi0B4$8O2U7@K5r`4Y%V^hxCKw5uE|7gh%0(1sg*22$@OdzrU znhJ7hi;mr-0Y^i`mYIe)pNAHD2d=*? z#~$X$a9%z1epPAcO^wEec@@2Cc)4}m{;i$~QD~ixtm@gJb3@GahAme$ZW^uLJzAr~ zbJu_xigb5KzEO;pTps{BSX5mnt!*-TB0pvYeH!g;Q92s9|9ZGg%_#j!zfsxub7a|0 zpdvAx)m)v308*2F*O4weKeYRs9lI5-V%O;HL*|Q4SoK2|vP`hNe6i4*st4+_L(bB! z3zvj0<`Lcg;$VLX{0QU zynV{{FXxEK{7W3DbHsV7ZssO$a4bU@($0gtA39aZ>u#pB|2R**&Z@!bQ})n z(D`=x!T`ylEy!@TxN)Li^i9hbYdii(Lc3>XwpCDJF0y-3SI|dBisQznGOpXu!Wt?M z9DJ5r*BW*{@qPYgR=76jao7c*1V7zLuQqunR4Viv5-xg#i6DlN43m zinaTo+6wP?L(!Zz^V0_>gwG)1u+73*@_vE7-hBz)S-OrV(bw)wYByhIuU+R1oh(Qv zZ4#kv%lR%zf~DkoIaT<1k?n&#I2`2&}$M6ZBB##=P>{dZD3KsdTlH z0kTu=O`5(|d#XHd2XVK|NmQM75;kb#g=m8__MXchl5%?KzyV@D}@1STV=z3JhIljhia!=_f^;38VOaG$!sP|GK) zn2ExixkAtXjRwPYOfwluf?65-FHevl+h)N(fy^#uH(q4LOw8mn$BTQli6HyuWNAlpXXju59V zTzSh6-3m(!aI{_wNsv8Pyw&{pKPUyhwpBQnOo#iw3WnkP<6e3V*L3tucoUyw&j&>g zPM7Q6K`Ea(5l_emc5U+^v5_q7Bz7eXFLsVD5>ujC3w6y=E>}Q81Nqbyk756qh0%wu5ZTtLkL-JP{4@bl(PGV`WChsO_n{Z|tOitz;&Zx=i=`_yS zyrrNVy5DG3LI9J5)Ovu;j-6~CUbNfwmH~EgO7-`K(N>#l8{IIEjNG%t4gp6<(*Uk; zv5!H1{SFTkj|bbsL&PsoAK@-6q|vwHeFgKhj(p!Z`vjt~=y=FFkC(;84@rhI4vu=< zj8Z6y)_I3;Mg(Okoh4!hVI&2COLrc=?pHU@aFmtH#XxDM_H)iFKQ=W|5urtt-Lu5G zddLt^$vhoj%{+7P$-cKQ$B64eJwPyCV)rO1Q8JavlpvfmbDzgrgR0UsTcAUNudrBW zsG1gE!m#6Vw@&_-<7ike=V!=PO(QOG2=mRY1&#O`OCE|%kMBKmx1lGmHCXbYAIM-+ zKu|^`dZyO+u3?fg-4`sWJd=LLB|`F=1#0e)c_5^x2$pDA^J$Y-!DEzFKD4o$&XYW_sBeVat{J z^vVj@2s$HbiO4x}{Z=lLvZorVWDw=t;RU#OC0V8X_ ztHHbOesXPN<0S}iL^R)K+85jLt8)!=l8~Ph)(;X0RgE-E!b*!lE2S?B zmj#L)Gu1TT*sD$`w*m1~8jH50v*Jn%AX{akh0%{8c&LAT2j7dCyHKG?!Z ztJ~uCSO0Q!fwPN9&w#PE_(PD^!)~NZP66T3k~S`9Ty0C+*AIdqd{V{YeOIQ#EPvz| z;kF)J@o#2!nI*)qhViIph~~_cL+69db*M1G9-8+qZA}Hypu^A;etuz|-8mmK8qfo* z4Lh1ytk}r}RYpUER;!B*NP})9f;evX7^DSktLAtHZ@RhtF|eFFO9`|Is6$Kkx%0H) zWV=zqo{9KE2SM&@U#>!9IPvI#&ob_`+?u2PQ8)L2^zpnKVUTd*oW`2Gs0tAywc=gm z#rH`#l#b8iEcpMUKye|=nx|}n>cyD09L*lgKDaIU#LXVIJTt4_jwAHLmcymcCg^lA zL}gwD%;)L&0Vhg>J-V?mrtdSb+|wd91ZHEDO?EfA4ql}b)K(!&ul2EibB2A|BJ{I| z>Ieh`Ay~fd6%vKus}M{a|92I_Liv;ZIkkQ{LwA*RYg6Hps#bR?)YnHg&G~YWy2Kp| zj>r0SFiwwAO@wX(j70ydGEu9JE^tA=;M0MZ+VwuRKM_M*RF`+ZS zpnvg`poWne;Ul$79KOi^VV)-4_{I?80wl_;|E}HZcSOjuNl%hmWV*B9n+U^+1i6CZ=LS2y{uRx!2Yg0Ek`?sVZQXjgZfilJH%g~)M!f<_Eo9hYx+!Xa>68-SJNmqUB~BG%a0Bha z!Ih8|$Qi%CJpSpU51zDFI!$!JYE|lAH(!Y?*?RtR7&bHi)2>3zX=S}_Sh74C+=g#0 zaZT%pfA=1yR&?5`Uc{3ACki_^ix>!i-{ZX=N;({wsl>%gxSWB`wdp8Y`fv#9^Q*ve z^H+R6TJcxz)fZ8No5yA#%FoQ46W=cXVi4Vn`*|FA?3nzn;2UXP6NOKpr+sF^G!gaY ziGCSauGg=%*nDoU6HXz^EqpGeKXWyz5T9Vs9HnXKe=gqkt|7j*X(6DoHCju7;7hXk z-8Fp8U@%+k*X@6-b*-s zJtb&j?NIbh;X_H~v4)BQ7~2;=JUibY;m%=HTGN)1*Y0pEbs8P zsgI~&+sqhFc8_DmYwpJhK5i(?n{Sn-O2dSHj<*SVQj!({6+|;TBvxkxQ8qffb;Q~& z*F)M~s<>fjpFjD{ezHe=$cBdnBUyHB*rV%wo>?+rqup7=AfP}X=P&T#a-n<@rA$jCiEk?N<=>%0bo44lj1ae`P-`$a|;M1VUFQT@rImxT0 z8*0Zo;uUKrkk|f`txzRac3oZ;+|tG>afp16L-stgg%C$!C8ME}U=;2O)`uQ&MFrxC za9LRwU1inzmwJk&Ot?HCeZ<(rFcsv@oKpR_s>n{-tBL}qrlzgU6d!p_Aw^_4q9lCN zI=5CRG#t4g*VEi@!Nv;QY4et!d>*d?14h7Q>gmzjmD@)rK?|8|y1;#6`3^1He}Je@ z8XJ9cZB|uqy5tc@*K3qkUp!A$wM|8tA$}VuHtNdwo^MoJyjxA=8nFlUqWv)lv{O0(zqRWXW~QOU)P(%h`dE>(t`>6 zM*#9>hJrIF;403w`k+?i&`r_DX-xZ4<~Op4&axnN

Nbt_1_ccebz5sM-`22qo)Zza@RoiPJu(>ynR!8obw&%v6OGaj z1{vstWGB6L3)$5CB5Pu6R_8NtRD2*;jugwy+(NlHC`sj!E&TrIszTJQ`W6yPJoZ^_ zQLo+!n&9Eze%*pcaV5&f|H$+YtA2>g8@yFwk~~5^wnUWSxXVpTYF6)d?VW4XAjQUoN0~;@?tL`y;UUVf+ulxB#U_IfGxk&19>?^aZscVf z&RxseXeRBXyg@7uef-UC@4i;L=OlSJd_bRPS-I5ocIh-S&xam;zfbA9i35Z78j}Zp zAhqdQ#{1X#Kevw;%fJT(Z>weKNm>n&Cy&?944NV7-0msS2b}JleEc^eFz-g#)dZg8>H)e!**FwwyO zG7Q^W$O++Pnz;Cv_|^ULbwl(su-|y#iiG+*m_v5=U%e%8uIPs(m#KjI@72HxT-Veo$zu7f0u$m;iS&n)%ZgDX6xYcaApUEJ^!~cNQOwqJNt<=`lC=^#4 zBJOf|CV3)7TJtmc#*q5O7rtkga{DMTafNb%WIf|x5yW@nPA-8p!=xs8^vV&Q?jsbk>C8{vvOnF6M!Y;Jk^WhJW zbY@21MD;2Mu)Bji^p$KoVv~Zv_jb%6nzQF&U&y~IZ6^sMFB#_sgj3lxW_R}QT9 z$IGP}8UnMLQKL4QY$6&Ff(%Mn5tH8_m7NLe_Kc6R_MOQ9P$_omhJ8;#tP_(A) zcY|P6~Xm1JH<`F0cfnkG`dqm>gD49;;8>z0^1^W^zr6#5!i z9;#DjX_FGO|B-Mlg`(?odAtane#;=ou*C94K_HK7FLCVN+mA5J`HV@Rv(QZaQX`=s zx_47qY?=D=xD*H%3=N4-mMgzx+UD?>d$cDu$rG9pl}RPvBJu-oaNdz?eCX%bS9$;Bl)PAq!Biyoc*WgEhG0~6qv=ee^z}DW z{1o;Sd|9Gw(vXolhBod~m>LPE9uKuIxzCNePDEi{CHrU=J8s0vROdp#)SrI1N`9#2 zJzDKWjwl7=l*InK9TN@{AJ@LKnsxs=@kFT`%^sWgfo<^j=`o;;{do7cN`|UcQ z(&E0-EpMyIc{j-_g<$rDe_fpL^O|XH_f7rObqa*V@c10v%?Ve**L#MvHEGl~+d|sj z5qg+*;Ye`l!}J=+zDWOO zcjF8ES8IRHN^G7e8Kf>am>?t&&!Z6zAB=3vwpYx5rqGR1et+{|xx8U0%-M8OWKzI27Q` zIolk~c}R!jEoYp0Aflf2cH?_lO<`%3x&uk9Rj90EUvXw)ogVM97{uo>0igo_bNN)6 zt2wuE=^s5)Xj^}UomL9+Ot@^i1ST{eBEo1S^~CMD*)JK`n;#s{WU|Fc?Ap;IG>Xwz z3l;L?p1~t=Z2CnRfp1(%s~8%J^dHWWAN13INJHQ;urP)pV%qNGqMB)v}j z2Y5!-QVRCP7WN8RGb`pb%=jPH$L&+?2&wR-JCpq|x_N6`h5H%qVxy_L>5mQhwZip^ z5#!EFN4!(ornj1L-n5)e{YkA&`BJiRAHmv|hz1518fcf(Ad=9H=I>V~w98EB45k99 zg#RawC~kkBorleTlKt zKa50xtXpim5Eyg8bb3xVh`V`dZzV9Q7HyjRIH;)nHFs=4=u%9tROo(I8Y81(WotA5 zJ-?Z{bPHZ9C1dTtHZ!Z4fI!$;zF^`4Y&F?E#!=FDN6>?*D7Ar`Rx1 z9~opMxbXX6CgCwELPjRdh~q@eV(|E-51Z2PSS^h2d?G=Tvc6s0&f%ZNzM?N^I_v~Z zAiRe5Ls z%K#i+(*ITRs3C0Us9v9}2PX6qnIy^QwtJMyJ1)P&R6qTVq+Wl%r%>o+9hZk+D;W(X z=F0D!LX5As3Ga81NSITwE2(u1fB++nRBv5Smf9IG+ob1`)aqpV+IJi!| z;BdrW1(}Yg8%GAJsk#BuDp0A~dtZvL=AZP81hTJynM~aIITZ86?|G3f9Q);{91r4s zml>=PS!wR#M|2E<5snPfZXc*A1#~2P$aYK?{-mUFu9^Jd_59y zgYsGaa1$*Ggn=l>{j;9X!`{4s(+`O(K|CHD<}F(3(<8VNe@u#|#DsdxDnO*O_+|c| zhWeR7b#6~Co^(eGULGZSE)w1W+~$#iWW6Vj-Sq!Zo5lV|ZC)M>CSj5Soa`Dp0iU#F zQXurpNsu8$N^&m1mnrB8p)*KXJ_d$1;2` z6YcWy0*0tY00fvUoe!3Pnx!%K!4ImIk+?-z{M_5$yUB{(_2snADmZ!1N`r_h7bD~S zyB?u-ZE$~qZhHyi;zXQlrED4LkE>X}U6d12yXJ>fu-}}r7pu4N0@JR<%VAeR#{loe zdpF~1zEKDe6l`x!{{5rhv6p6Mb$ylsQnLQ--oD!~-3+WS2kZ(T6F1%qUK?;6wEY8M zv4QDv`Q!}9nnlH_rw0`~7fHY^8Z?SUi*#@j{ zUdQ)U9g{yI|1XcYnsgp-MDJ_Rzd?_fwz=l)l0>95EM-uUc^R*yDyI3OnBVja#ANb{ zCLk1O1}%f!{fYH&ffH0Tkopo{E>MOL%68bCVi)tTr>cEzLiE^aO?eL+<3-aN(`!+| zU3UN8{-m)^W4jJ2f<;H6Pr6ec1aOL{qu(t&uSaMqAi%-30G=t|{5vFkaty%gv2g@M zB}lS~W2-f{fOK4V_w?lpkGZBd;Bf&!eF|Jxc6-e{A2V3uHZVtDvNb(fAk6YWKv?Jl2p-8G|GKDJ zyXs6@sk?ATU`QtfLpB6RmF<@3%>LyA1hizJaGlwtgk*<$a%QIC*gt%NiEt$+cq*A< zw@!`{Tp+_mRNp~3(Jobd=z!BZn=(-uS*Qe)zjMbz_Q~0i4V_e9QuAf5!~0Mwk3ero z)d+6#r}A1z*E)rfhbmH>$6a)PfRFo5JytbafQ8-K zSj2QyaOQwu?`v)OJMN;j41dCHO$8%8xPZP7Xq&g)6EEssZ@ZG+{lf;&r{E&Q2=&;g zXR598DzyQC1#?QsZZ-k2+8X4AQ5IX54%U;?&?m5X&Ydg4Bk&lhBZGS6_4HPG-%Ed> ztHs?r6M%irNErcu)DiJ^^-NFWPF7YXNlwB=Yx z?m5gom+_~5!8$XcZVFq_GppIR$7hMhy@)`TX`MWLZ|(D24e!qA#iw*ZvZRPQaT2}c zm{{eSO~!RNI_hJzkfv@9r!8g=27VuctoId(5_yy*4*GD#j_nBD)O9bZ_VV(GPhl)p zSkOzwxB)`E-jmD(9;8N%2Gcx(l`aL6ef^1FqD{aMD?#qw!NBK1h>^+@^rI~YVx4S@ zfsCBL2>VZ^u~gu>IMJ7qHJQvT7(2r5S~i@=*P0o_35M;VD_OK8EA&Hz{xNAz_x#zp z_<$03+jt1IUqJIT3n*g5>DE3{a?FfrKwxZK*WCOb)$Q0rmrE=)2`E`#z>Y#~cJ?*YhG(MDU&6;Bt;9q#KgluOIz zn(wUn&gkoe3;HmaoeinA7;@%RnopH(%I8g1Ia-WfD8Gfm4|%_XJ8CoCU03A3uTY6W z3&bh&Q!{_6ZX{n%jJeOOInb*>?ojHq&7=-x3}=MKB|c?!I7fUG_hn*$Qr)FRJ~mH| zxjg;iVY)Mccff2`a8emxu!0YWrd~nwL-`O}>x@CEGsY@8>g{ADB(ZNi$@GL3+wL&< zqiB6chI#IBz3M%+%ezF}L`2N??7{?}l{(6NTzH+38J!SD2Wk_*_VG}EN{82OQ?#X2 zc}|0SY(u4+tqcZtCX5w$2Gc*FLl$AwQq(8a z`+>IzLN6yY9ebFmsh E1JL?NCH@q3D(XB&I^z7kmC*EvOH(W)dk=9!1RW!E&F8t zHMbts${UY1C+h!_F?=>W{;NtA!p9*n^_s_v?edodW_M4-%m`+)*uc^^#CMlxpXfU4 z6Vp+iJ9Q45(0F-)RFD4Z{bzsA@1Y8wAjMg#@4WyJh%;HB_^Wbl)n>^mO{iz?r9K{I zBtlI=4&p_6AKgMGFyttuP~?$gA{SyTZN2rn zK4EGpcvudLRi)=@+guBEh51Q`u}2{1FT$yEIqepZt;yd{N*Uqr=lne*0R|SAcObo( z)UB;N#(k^BpA=0}C?GYsfU0QcFn!~Nsg_M&^Bz>bj-{u+_?4ElH6P=-eE zGUG)X9I9;$M zMk*bN>lE`1QJ)K_w$sh?7E7l(3Ju}u`jf6sAf&Z-TPPJJrYD(WNBlUXkIdryq4{L9 zYQy23z_jXJH6MBg1<)PV{$}!j8|#RW?707vi!bxbQB-B2XWkqUKVnOqg}v5Rgx%9k zspVBvN8AzZ1pB7G!1C|63RZ zK1;ul5R?%+eSP7&%Yrc{vZkz+Vgk8po-Z<7RDCpE$Tff9TD@!Nbnv|FbK~&asKmj) zAh5KGU-Sd>kduA)iL@N$AJ!;4+hk4lOiTLBH8ZbO4*Giml|PIy4_aJpmy$;cImytG z*~$gN7iCJ&;-gCu{KWkUpAwQ241;bwT>ae%cZ5!O(EgFwvrg|IW}<$m3W)d!OOgNv#vApXXs|ulFuP>|7QC@hKU@?Z z)(X%H4DprbYhW5?mv;?1M=JC#cIQYHEMHl`fFL`gw8jX?3Xka?w1jgDr4A|c9>k9Q zgDHS9W)PM=DFp_b=t^^5hP2+>qW++zvp67?FvgM(jhiUOpxot^h}d=sLg(y{mk7#Ugr|MBtlza(4(HpeOB_TZ6; i5K8;|h)3Gm5JB)aDfq#^rVOz7UkDYXa4=00001b5ch_0Itp) z=>PyA07*naRCr$Py`l2?dT`}EYi9+gJSrG+A zk=;D2@_c!|@r^OZnDhNv>s{ZwZub7xdVl78=9tg;opXNE#s1k5*b&$f*b&$)0^hWy zmVf@EzjNQV_k+Lw6PxP85_l^v|NZ~)ofrT6Z-4IMcmC^hHxd^sBR3rn${TU{Bh&$%nEqmg(vIU#^8 zjeO1%RI#z7WtE#^bdH!n4*vT8{hJH8#6R>u{?7-iQmyNohDS6ftN}y?Pa?Z1Mvt|^ z&v8yz8CadfK~R{C{9tlE`?=pZxO$wdANt7;AAbH{|F?G^{{6#0eCG1{zx=&#K7Ge16V)~&=-6t6C@-19b`r21iw>Owtz=Z2%)9eX#5bj zkKFm8YjbDocti#uc>(<+$LM$GnkSl_#3OeXlEjG_O+A5*W>B&~X9l!v$7dj0GaR|~UQ2hy9IYAJh@ zGn$w$zW(gBc2gj?I5~+8Nh`udi3`|(uoNRp-~$G9xfU}!tY)M6250R36q$f2}3F^IoT2(R-vh)&y>7k+amE(#$&1% z9~ppD=>L50p+ksvYu-o3C-{9)5^qgRZ*peB$N@QJVaz~h;>m^)ERk!-K%W^A`6K`O zBL{+GJaj9<8d>8AJHb`Pzd!wJKYsD$d-pDW>F0j^N`jLzWQiPdqB4T(wv0!n>D!`S!`OQ^+$jCe_THL&ig-m@)OhwpdD?CMR8^sL@-Uoam27;!0YuAQT%*TAJk4 zgx6LksE(=1i4s*M2F&N26CUW3H+Nb}-g+k<9$U(jv^;q9wW7qf>V=FF`Kp$psAi!1b|8bB69u7chI9xV?Z z?eFp8JuemCZE>Dt^I~=qx7JmU`|CB93tjZLIkuK;t)9$48~vTwz?$gA1yu*{dg$pZ zuU2g4z=RK90~=djNV3sT8^{=c<6pas+9NA(T;{}ObliLH^SqND&%_!7bI+TezVu$( zQeZts4(A2N9`eIbES|A7d8lAGJBi!LX{~5ZNY?psaw5s89}t#D;8O+yZR4Qc{;i)q z#GFyO_R4c#S!E9v4;zj9d)N>cBxqiE;l)cLx7bV(PP7YF>)YS{_WKZc#paPmADvxB zFoqTjSkv$M`?r?Ww?41F>pw0oCs`Yo`u(OGKy!uHvhkTRSF&dx5=f9c!5^WuxI{N~~RckjMcN(RDWQo;kKcOdMNe~{O?|7h*zOA_dor3CR@ya?cg~tJo}wi`}d#Bk>52IpxHYwbn|)IVbHL1`xfqxeXxn z(^K+u$_MjBBc3Y9A?mjsr;)ib=UC7AtdPVhxcainj)5wOTxo}AL=zMf6CWn@NLcTF z_eZX{L8F5}^427v4m7MzezJJkC?gi-JGOlaXV!LC{prsVZwx_Crft4u9Z{k z#kZ6?pWicAc+VPP#*w*njl{iTd&cBA!K-A>$r&{a1pe{w|F*-=&%f=>17W@K#%mX^ zzkY9)i5XcoJw%0Pz)N`P*}Lwt@ZRlk8PZXbQm=$q0UOr3DlQRe^$2Bzi$~(U1U@S0 z4C%1{u=>c7X{5_^}VX^Wa8mMMW=} zqcJbP{M+~c`a@qhv@4sO*!v>;a5pnt2U4k0;3JLcDi^wxs(g5<5{2T@l$8iY*s48E29f+J2C0qp9dX7inxV}Q-ErTZuHC7b* zNdHIgxklo)90#rpD>(2HTN>vrGKolpByK0>lg~eYa8vN1Yg8d|TF^RCZAluB^~wP9 ztZ_}`5EneJg~`aGn~1a?_}DLB!zB|?^n-QMb1ApXOW~p|Dtjv@Ed}SvisGSU<;h8g zhbkkLZ7Ms(C{y}Y-c%9v8bCc>isF$OKzHtZs#y>aDYdx`plrTnzoXCGFUPyqhEVjH z3U}aokH{;bMv{1Ms4?sF=!rQtWd$Jtmvsl{J-J>5{F0P$w-DpHYpUVDkhO7uo>}cb-|rpHQVBIiA=s>6OZTAf1WhOhvM{NX1bJ`91iJgWj)Rcp>lWH!e zm%!+OJoM15L$O2lsm>35&Z&7ISs%UMuaP(|vc!e&(AgG|tJTf(6YWXcu*5-DUw!#o zFG>8?Gv7D_87>kA0w3$gKSCS zs^CcC#D$okO%X1cvckQbycH7nu+d5m;=*UOFrffy>7NZC`a zb!;_@M6N!+^1m4^cakWEBZ0P?$k?B6aQMZp7k z^OH?ZTvr(o#(=qmT>s^}dXf{s1NXIJ>K;bKB*IS#T(5!q2)7s?9Ei{&tZ2gacp|oa z88#KtYRODXxp92a23TN_6P1y}I3y(AA~D6q!zfaK)kNfo!q1eNp58vE0pyL*90t%x zRTtV4d93&?nk(!Bh#Vhpu2jAGo;g#MhYEL2y=E2?Ct1-=j;uQ+aS#>jKar>yot#{) zg_tQmw21icrGohSo*?|YH?!QU*erp2%8m8M>MmMbMhFX-ASq-k6{y^(kVsf0?GbEx zaltz@^b*MmNgUUY%8E{2VnR8iyimdGM6$}d>apP&qj&>ey;u%vskf~%mdVjd=zG{6|-4LCW(Zs~}Okm(()9Ay= zsbqEM&KGCj2gbg?7ZWCgTgt71%LpcxtW>#?Y0{mA8n*mB6cppta0xn6X8s zJqmr4lzZ=UOAJ|!P$4ZPaSdazA=LKxmq|QNgW86-G%BhWus_1uBu?@>2+P-x0P_I% z6dSIygk>jZhD&RrT1+U=Ybm$hP?Plv6vtj!$#A(;7`H!h_-{nyR=F{3)H|sv^M>+Z zWyw=&>cQfA&ojaIP--pX2iL4&08OpxQX*HvT|${Dhd`Ol6@u-RnJL#FNE|}Pfr#qtc#9aBr$^=}e37U+^ zBVpvkwC#DvJHBW3a7wfM&e82GHL)(*?TeqYfufK9ukkRpscNB0A)%{`{z~cpuOsqc;49@ z%FL4Zn&dmzyDmvw46kz`dmC+@S-z-!k7 z%_=snt5#fEn2g|JF;NR+4uR2rWJjOr@?~A<ZqJ5iF=-Wi^NYwnawfpvS(acuTesVR<`$`CS2kCN8)qhVy(`WQp0cRjakLU-|??k zjW89LHA#HL0HWM`^ULBkTjAopa-2 ztxkGuRqsTJoa7y0g5M+ZQib0uE5rq5dUMIjhyg^IurkxD=<%Ek4_vdR0i^R|q*@2} z+pRw4_FC}{7(Fa+J}8@@a%n2bE`9%%W%sSsd){x+hFBSywJZyCn0sQ_&T}BG)y{k7 znv{HR<_=oL)>^dDA}hYHg-e8qouDKsK644OvRe|XHAzC(GBf>MWkWZ=@&rAbxD{DZ zlGFV+o_OLXXUU;dNNP<3$gAp#!YE59dT$)F_&D#;MP}Y^f|)#!7b;$>N8)pOtxFTP zKL45^TcK>N;PN&(QnJrhqG?00prN(AoY#5-$;A(Ilemp@YkMPHBE^=S*6s~@6_dzn zog0^ouzJV}ZLTObiwh5yuF49^#_Zl3b1F8r&y$s&xl_dh^3S?%zMCss@pptvivX9v zBOC2?eaTlL-}9rcR-A%t4mH}c%* zo`}eMCMd{?xGaGQ+HP0%(Mp{gmlhs)XOG9G*Y_y=>i9AQW~)0WFIjT7`W{}l8$i8? z`PWxSyrs-q3jS1-**r+S^^~S1-Xbd72uwmAVWhud-;3Mt{nf)lpKKvQ)-hZ7&+Dfw zlg{4hS)UbLta8&M>J$^ae=c0?^7*B3nak=_On}3jxJ0so_t=9^<|6YR11R%imr(X= z8$j9I@_x6n)uY_2p6i<4{0IiU_k??=P}nPk#g}>;KG9|723Vtn)w46*+)HC^Os@wM zU=!`5f<9rgR#w_Y1MA@uZQ?W+E+dLfCu0;6Sz1;&7E6)1;?g4{=V}1;k`b=AB)+CH zn>!pk(*Kcrn#mnn78QX6as1Vv{_UX+x{tUv3abh$`(1b)=^=64KNn$XTdbv(9p^>T zXyF3l!hx`J;u4YgoVaB1@kkg!SRnCCR&>|8Ud4Y*Sy6>wnKu;!i1Vfw2R^&9^Cz!e zV%}7ViOF!DJD{tNN9Tuqcgvgi7A;oWe$4BdByN|WMh&H<>7D4K_h4e;v=e;n8F`fr zue|qL!qUB&?P|EGK=)eY6WNOtCyOSy5b6Rz@-Ltnei;p^VLG z04<^DTXW%9M6L%xX!~?4;;nhDQ#q${f2qu>Wp#N(6kQL*9OSniC zq;a}aPcqq{^*^Q zIv4$X_oc3Ljg46I)g{-*3Q*rSy!LzXOy~X9y z0{r?;Y-?iz9IR}3ZLqjRp*P+7p&~1k4gAYJ=JoxVtSluba~MD^MUOsi$pC7}C9tZ5 z9=S4k4sU*q(BlX(_uNw^aeb%?W+h~RdsPcE_GBj~-+@(BSUts$uJGhpl=v+>7!~iC zJEY=~xJOo4odh`sziZc7l-}~ltTCbtp(?&Edm`vh4p_(M_B@a9c2*6;uuv!OMM{sQx+qBmH zoXM)Jef*uF1@4pV?Ux*tpN-<;Srk!w*CO$j6&kherpOAz2Rd);W@`~fkP#f9&E?}2 zCC_J7!fjL(bIqMB`8~yJooWb1^Kc1eR^^Z0>n4+Uw!a7))H5oFGdob<$#NP}{4@h=EtuA1l` zP;qSwm)0U7C9NJ@q6u$36Z}1wg*A!^+iLG`?V@SVXSMfQd7-kX$jLGA$f|i-%05$U zr)&UOqmMa~QIF(Yz4@NGH5-XnNQ4c`h)O%4JFG>-h{+FO;D==Y$mkUqCUI(0Zr+oH z2vk^Xm_v!VhirKt3H#w&w=T!$fd?MAGFCm$?HOdfRx!c%UK~%o5n@K7ig4*^yJDH) z((~L=Oi18*7(}!JmlIQQu?J0SJ6i3JR!o8vP_B4vWsj1(ilX;0Q4F?h0NF8`J0we- z=*@ecPsCf%oSZTbmb!Py5=TYKV;^|up-rzm_mwNBQfouiW##uvXf_pw>Li~VP{jlx z94akq5qg-QE$51hRcx&-6o7-pYmOvrOR*hG+3UHhH`xH1;*sc9##Lpum5^)?KXsG1 zk`-KXUAUnCXCrh{EL*3%NKs(cW(qHEybp>`llZIscWYJk=)NsUNWVob43aKT=CFF zK&{ZD=iSd$d3I_c*%40bCh_Pc7!WRvK8A}r()l&+iEueLg0fh)6dPjo%wHfjeN&Zv z)c`t2S=l|3`PgSR5+6-Y&exUGeA14~^>Mj>|Neb^yDR&*u(@dl(C(4U%T=?H_`J=! z{xrJ}2diR^QQy0CUwfZ#v6&+o*xQEv`qM+e+q>qJW#gtPv$-VZiEa%*7%oX!=O>crTZ zY-TgM92FaF^Rlb^xN*yuKWD|;76WV zeZH?f_tbm82?P#&XCG8`VQegyL`7n@#KiAOR#=vdkKHo^8@X>Sv5CGzS;4C2!Ucv% zI4P~b>#9B_a1R$Amb*pe)|%+nJ5kRKSSoRylfw5fp`7S(e)vDVSd|fCfxSgIU+~Ox zlMltohF^CQA5ftrD%{Emrtw?~p|vP!d6Jm%JBSK<1@oiZYd&-Pj}KPqmaHr)Fpcjc zeB@c!?6bE$XN1cZ6&w1Q#VvWPm*=@*{H=1^vck^{Aa8j-Fe0nG-^2WBr z5k39YYiGB_J+i_JDP*mNa@7{d{KeOwy>=;yoFooH+tNY^RdVcHbS5c(SE8~6t_p6e ziVfb0Dt!$zc^-gApr92Bw^&QT@V&JT-E{2vZmF))|r zRc~p(y`;Y?u`MXCUW+@rei0If)})rSFNT$+`v7CdLwvBComWDq*K%81#QwHug?qR# zgAObE)1Q9+az7E^5@DhiIfWI~DO<#ZR+e3nOXbE%-BS2oD1o?~I(g~*@D{h}?-eYp zqTd1zTJX@5_y;zOf497lEzgY#(XUG4N?4El>yKP%pRI3gHGa!v#l<_GD~LYpp$QQt zEHT9O=cw3dg=0d0*AINhK@^a*gp$Jt+xdFfY#Eo9;e$S_@oDi@r2qgR07*naRMW!3 zk~rrX@jBJH6M1A=9DqyocFKlN=8+*c^1%20cf(<|bGE`4vBWKjw+KsF z?A3Su$19{}6QBCyDGOvvi=sxniU*!!F?rWRPhUxVZXJ_oL63%sKtL7m1ov!Jx#`Y> z?7QwSgzxMIaGspCj2>Kns`Dlz@kmKm!fNME;ERwr9?JbLD2S2O$-(*3w}0ma5?FWd zzEypI4-yis&s2fb#RF@FB0yTe0@gM^&p!BQXp!4}Kwfy^#fx)NZkg9cY}7jeSg(D{ zA6&r<%I%y;9Ax~%zxaI@4?g(Fm43eQ#%mXU^ecaMxqy^s;S z>^)@?x7*5AU#_HO2@53t@$dh(!=s*m+na|vU|1WkzkcsxF2Yjs*2P2^bj0Ox^7@)2 zZgFd2a_gCA&Yr|EK2-KCnWDnC${zR3B`Z~#UgA39z%t709h@ijx}`nXtX;joPbs_A zcV#4wYkLj9-o6~``fDT(VS*L#(zACjkN!gAyppe8%k|}#fBXJlf9MN`z8*p-ANtzV;2uS zbnBqd@X4%A?H7~AmBgKz*I>bgvC-K4iJfn#P03GY)OyL!1rsAmnCs}BzQl)lAcfs z`(yFo_e$uIcY0(@SnQo0Xzo zJv=NXTrjg%_>CvOV~M@)3+~B2`j3wqBCR@IBB=NFSwUPHGRq$Sgy65~qH zwLG!P81kBHB>u_IeDpH@Z3(co=t4KE@;0u*vnY&knGizIuz^S36|$;!RuiE1o@#uM zNnhOW)jT9I{Y9w)7`}mVjmJFOKM~zGBOD%^ z1kjPh;O=y2{A;hhd~xT_r!Kf~!|PCwP}=*W30k$lIlv4p5hL7B#aB^sk%FUzqk@ac zicbrZ7IE1=>)%xp&&Zr4&b`mG914{=i2`lHq=^ndc=GATFNd;4-WA2h39J^I&7Yv$ zF|+9Oo|ckp)jwO$q($Jwj3my!LOw=i!_JT1JkpXLiLNtgaawP;?$PBp4-exRdx)aIp#wEBR2WhI{FD_lB78Zd4|IDEg}3}Z<1OoraUZ88ys@k;Q-60WF*LbZeE~Hy`&sQ z;5vPeC2>#D;ht9IP9?F)DhgFxEcKN!tu|;4i z=N=igLT-46SK(!M9_&@}Bl8CLU}-;<{D^{&JQ7cdF*nxAjd1>WUKzc39jD9_se10c zUI^My^~S3FIpw;roUWJ1t>AkTK_?^{?U6XX$3h1jsnq&#fVg+WojYF)6%t9-l6tQ@ zWD~!(eHAUvdpvw_KV4>GL*+(X@NWwn#RZl)CpZ*b6h`oHt}3|*6ZX#%c@%<+h^s~7 zBjjaCyjQtpxRAtIrb{oa;+=STC5sm=ajVcquxOFEC8|h9JdXrr%DDc`zxcr8k-i@N8;7F5b+3QbO~>43Mu#A+az(4U*(}XX}LFvjV)RdCy{&4&q4_5VliwG z5jmdEP!a#F^vPa>35xhPK2hGF^<3-1DLzWz#08~RO5%KW3mf7>0_WrgHr8rxwY8cn zASPT4){Co#m^`n*k~quHrYbjB;-1pgiY%`$S@~4u79O6GM;k2`RRahl zPWiAKXSE6eNbuwb#f1IGZ#MaVXsbE=8%gdgl!W{2DfZP+W3{ra*AuCDsl9Vy^!oC` z77~E>qR66E(txJb+Gu@_XH`(RyjUNeqa>x|)*|vzkf;QBKl|I8JJ1-SVgu{YThI~V z5@ADJBBDbcf^D~iPA>(q!QK$lXdWd~YF>SGFDAgslNTsLl@*n5YkX7{8s3$8Yq%!! z*sO(U6+Go|E-WZd)?16_ONNKe3+6~N1*Y$!N7C{_tc+(yAD-`p8>6sV7ES;B+HB1=ll4TeuMa zM;>|NT1K7ZH5IcSE1&IA?+uEBc#`Bi<<^4<-xDb}OXRAoHK)>p&0OA^=3Al)jj32z z3!c>;2U3^(k*IFKmeFoVkBr?+~e)dVFxU-#68O*(ySR-c|}Npp+Hf237yD0 zVY}B-a23TC;X^Dbi#@nx-U)tRL+O*mQA6A!!$_ViHarw#2`p@=PUnv2sZ|Ip3$HOu zV|Nq<9xczz%cn&ce))y3g;U;!8>z^>NQ0-yvT)jxToXO}8j0h=jL5CFrF*3%LQ%y* z)f)E(qD53BDYU=Ga+(Wt6@qLvShV0L+9N|Pu1L8({NA@;>k4;3#19%unXAv4Vp9@R za`Nz*L%DetSfOR=qJ#agoTgg!a;Ns`dO!64zs})WYV?w6rzmr&`r!)^T5Jbz-)uPvjD*Kyx5T zR%;TK1(ka&WP|CE74K;&I9{XssOY;gFXvd;R7oJhrKAZ!lQJ*fi>KRMnifJVEh8CcWWQe_@#tcbHGXHj ztCeNX7I4ri(7JAXhw`b`@_XJFDS%@U6(?Qh!Jz#u5~r)@^>53#px>?hNeh=2CMvHZ z%55!q@sg&!Avg4OijrS@?u?K*G4WP@dwuUIh&ZKOT1Lvfzn4keCMzmS%zGNcm3i6H zeN_OudTp%<>GjDTG3MnID$9ELYzUlHaHF{3nR8>qzEpE3Xal`Fdygj7TPt28Ph)G! zt>T$Piat|lks?#MiVTFMLXbV-B!(=ixipW&qctXLht+zxZ|b#|C5B#B84qvOi?%j= zBI#$F^o(?Xr9ztQn473*9cDzu>r}}RGu+!l-XmD(J$7#g{x;VHwUtSu*jQXDo*VjN zm*C^OQRTLTyi6Ux%u{PA`BTKARkmrdYK4+AFC@zujpPF67|XSuacu)EYjL+~S|bwI zcosT>JyLGJ_g4?A5wnE|S;wPoL3IbV3b|zO(GUr*jh^c%Krah#iOAbWC2Lpoduunt zN>xGSy;{YD>nkA=u2{tN`hT^ysw7@%qj$~H%5Ah=-hHib+Z^xlu$W89x7ycQXM+3K zhEXqs?>^%L2Sl&X1*8Unww@R@+#;DdW~o>!39bgg z8dzj?-y?D|dQU}xX{gbLQ}N!&GixROPt_}{;+UT7Q#sm@#IuSW_A3h=0T&1tHumvwp;bG@Q|VD~QwS^~a$@0y-!d|?VG{M+ zM&v|=KikcaN~bzure0?~JnP+AixpU~illeG*tU9DoKoprg~YW_DmUjAR_l?obknHH z!?@oAcOT_gXaPtENbA#mX1ZZFqS<97rfJwc!mk?@xpF8 zmMsg^J3O~X=|_rfPKA%YWXjQ2D|w!pr_ekSx09ZD*h4csBM5l3=FS@AMiS3*X=uMz zqGih4Bf~5dOZi=+-=kz5-ItO$ZqzuPXO+_}%VM8)V;k;p<~1%m7!~(q1deOCkh_%9$sMO-p`=X=@k7(1qvo-D)2}5?io+j8vCnw)MN?4Y_JtFrA z9Ph=wI0}v*ZdO#qrWFF4s@N14{NEl`mrY<*`mM>UGLsS4RK+$06R(oVR_p*1Z^4}P z)NoytOR9Qm6)fBgn_lA*hPix!Vtr2<261Rh5Gw6uv zMFiCvP)ug-i-3at3PI7zwB*4_;#Eh?F(@NMu4JY7WUd`aT+blw!A42dk_Rp3sfta< zwGwjE>nq*~uD3XOMBc01T8AKyVv<$tpf6DpoYwdpo?4Z>Ifp6-LXUW`trAL=16=p) z=YHcFMI0lnrpD*gf`}d^HpjI?B<@XMtsC|l<_R$-4G+G}HpJpH;V!olGTvUsBZBDl z!R`lH$2EWG`-=fI*hzN4N=YmuBLbZK1t=!f5Pr5UXf+$ia9`%ww2sS(Kg z=gN=t%$qr`orT0R*WFr!v`o0Yq{cC|Q%dZ-rh57apEGJ*wZN?|C#EItO<>Ps;5+eK zh7GQ@_*Ai30u#19BQu>amb5Ytg^JDgJ(~!ga>1MemxjVl!*M_j^x;PvoIgaIs{TmC@O@ z&Vfs7A(W?-)By6xj#jb$R>8uOdoLDK6k6{hxfYQx8CLW5i6Y)p`ad#9rra}`#38gO z($A74*196m;(Of#frQQPS%reQHp!r6)hdDGWO|%1(rZnO0_tt@Q?ayEAyq;Kz=W6) zAKd_q?T^knoGVArgOeA6n$v6Z+F})dtG#nh+DK_xLT-6#9(l9X^kH|@?`rDKQl6HW^aQCH`4qrcf z>(=GZ4?OU|mA4sPUZ`ZU`>gYN zDtT4*(Zry;jNi4AX9-L++!oD+Y=0uF?B`r^N zE|09&17UyWRO(X*x^nLjiNjrb>;vySJpYyFzH<2<4vGo`v+qlS<5|FX-yDKi0a34s zHu3Q`>+xcJqeSAx<}neN1p4y5dlxvomkJO6UmG7Px6E_X2~1h)ZEM9Eq_vCpE$y|T zJ?w*4@>H-;Mdld;Du3P?nJq6_6&jV=Tt*h27mWko>v@nI7jN$MdLi&YD&DZZYfA)< zc6XDw5;%y!TG$XuEK+&uv7frOxM6GHj1V{`oR`$`5;t>_INPcUE%Q)%iLn=tOu2EP zi=9AoS;$cp5tW-&YO~ueTQPR+t6CiZ7!?ODz{^X-aK#3!$GkkiBI*^tb&X@wIvl=wM19R zn;|F9+qa&G^?K}zVjE)AC;=1Aqd2e4J42Ru)JO;>1>%_T=wpCry%X!c(Om~|eBl>< z_evAbUBR`Kn^kOMgV z{;lzAc_JG6C4tZFiA`JbIwD(6bkx)9+s2HAbx-3Q7Fj$s6O_Qf{i)qR<lL)sv6ZTRSID&4!ZHJ5a0Gem})4i>&{j{uE>j+Q>sWCvxgh?6it*TIemyCBgcGr*`hSq$sqe7BS?BC-vA((B||+ z@E+uiju~33a7cE|W=LEY5MaLrEYID-Mm0CtLy3g%CWhYjT+&s~%;t@<(ApB72;}pa zp|y;htG}N#i7Rp2{S~%A;MGC6Y1i$F?HeP0Qxw|N(ArJ#Tt|7}~l>=R!%djI{; zed*9HO+ZFVaY;r`fB5GwGxV&TRR)$?)41**Cn@ zbDa-X24*L5yucDUzEca^HbPhM@wXRWfA*TZlE|OA{l^zr-oK?}M^+Ze@DZ^fiPM@? zMF(QSNB11ZIfLg&Se|mj;tyDw^z_s_11`Gt0saQ2=RTo#MfMh50EaDAuVqTP^82DB zjt1DIWUEmiA&?cqC~AdUYaArb>$XJXfA{DAaNi3tQSn)9bcsHRiXkSRP0D*f;`nV# zcyQ9;--u*;lpFeQw>3T|&n@yuC^630L3L(P- z5ISsfV?Sz%Z;iy&JJAr6#Y+3^ow;Z|6kVBhFxTS}*r)w_ZQMb`x?)ln)If-LzcDA|$TKH=TsALh0&o5_;}0zH5b3D4bie zJUI#VbZ?TmhDt1HDN%Wt;ChhORxv@}qx^}7i-z8)dJW>bpZ@gohq1!O zP+ECmN!(f%Te8Ac7#ZWWxdJU2Wa1KvEekPmvSOk#tgw}E3filiAt@&Kt)<{HT(%@H zSw&aokx;&(P#Z%^TaFRa;^rwwUKmMpBIlF~$*l5ONxWr+GfstAH;9|t)#3mNe6aD4 z6;|D2nR^10=(j46wge1)XPC))C~w^Trz_(}a<}<{NB;Fk4hnFqiY+2?;E`3HFf3;= zv0fXlJ7wiI)gw8FkWxfeHk`y7c$E*E6FHY$NJikZTjEOMB&NusvWFr>`zd>!*eY3h zN{%>r9*Xr&G?bucabm}}tzv>cc{!9wv3a34&l25|CBBqLvIPt@7vQZdC4qYzWJMvh zEteu!NZVesm?f@Sa-?AzQsDix%um^(YW3A4ad;>QBYf()pSk9tc-~3${H=N>k@rSi zzUv3RTH?I0weXQgLN5)!pQ4PQ?3Ugr{?$Ezba7y`&w6WN z;8shKd--y961OV~y%V-GtJ_-X+NmvX^hCnSyp-x70;hAp!|Sic!!xhVE5$rj((?LR z2}4%$NO(5m;-CNgi&qrcDdXXVk|GaY@oVKpG@N#d%BwoZE7vVX;6@HLijy_u?a@|_j>latmRSDi&r(0Z&X9>L8_ed^05AM`uB`e9D>XB?E1Q}W5 znj2}ABts^&qD{j{TM4K2@TFcmJBjn*w{JgnpXGzC#=$Co{q=j-E;%<6S8Ib|5KT_P za(vI<|INkIZ@hZJgO)3Y=MuP6Co4||tOaJT!Q?}1yGrg`Byse4E^mZH#?{RDdkY>( zwm1;|KyD<Y;~jT_N)pdE>qpUU=~$iivOC@~n_I`}ovre{!K= zrVN);ov1Bgb%d07*naRNkcyPtDpl<#*-`_zYT` z`b-cNK9;QB{qB!kRves@H4Ycp!@>%kMSwb8%&Z!-l|d6bBS{|+z8A3cuRXdp=Fd7>vcvo0!#q#RwIZ*WXbeiQJcLk99oY`ba2#d&3rZAqSt;8+s9AR5VtEXH?0uuLo z?}+`3>E`9v?9A3!-DCK2(e#wx_`6(%M?x+5{=x4v-#&950|{#n&*u9%@?{k1vKKqI z1D2I22YHT$zI7^`=sH_YTspwQo+&M{f{uD~{5? z70f7XOMTDzxG9Gcqm%FKIC z{?s7_y;0Y0X{*5RXiqePUO8ImkyLH2DD>;Nt-O!mvid4BZO zV!%;~P#Qw3m7Jw~tt^V>yjINEJ)<>7*R%Rgd$>-ky~z)a6b~#k#_3L~zO_v4o(S#u zA0_niY6{rC?ml$wYv^hkOAhFLbUP+2q@>3A?!g+_2E3kW z%7C~5npHp?EM^p2dD~YA%IaCX9PPRM^D{_Ul8NC;$NavB83Q4NhEJ*|6+5179isGY zlXOno0_A>MwI_13uW#@Z&j1+PY9e|!FG3~_FlHY4rIw*(cskZbgzxVR!>E0X1N-Fx_VQJcwk1^{(R?#KTS$T`8k%a&K4s0k4@G2oKOufolC z%$r0q@xbQNTom8o=aAvoLQ{q;QFlDDC-#ODo;2e zPOs7Cm;wLBLq{6D0w&#e`NFKG>XSYVGt8Sa-+F2M9EQ7^P!o45=JXuYvv4y&jvFtPl$<=T3xAAqVC4EQmqa{ZQXTn(a2vM%KpwIr%l}s(SGIAK`t#9zhG#yE zxnIjIkdydbU9#yedLS!-xkLF_RMVQ%GZawnq=lkn_nCIboGRhm`|fIL`B}}Fs(y|D z#T{OARiaRw*FgxTrnkl!J*oKMU@gh*f$@ySZ@DV_se`iVnb3CvVkoFXuKoqyhqR%X z-H3y)Db{zjx*uwsq|h0;`B3f|1SxL-mouOa9}1TQmCCW}pgs*XM%e-CPtlR=Q~u}i zzvtFnCY{(Q+pe+oMbE3&mt9Eu9-Uo7A74*sifJDejmH-=Usv(+64g^Vs_@~)El`7f ztw84GRy|OP;rI0#&Z}8c`hJ^Q&zE8_o(BP3=($5h74ynCq@n?}dCq2-@r9q1f#MR# zEr7Xdsx27_hb1r72EYKl{Sq_J{6h3=_oeWmdw$^F*Q=UvG?1 znm9Hz{l)6CWoh6l0;uLk>2(O8&ry6L8Q+I*bIK+#k$(7%dR-9LZ5$tJ<6_61loZ7m zd_|FB0xuk=0@s3AZL7En`*7uSsBW!T+ebToV%J7I0wgnoS%`5jRRsK+O1VsN0uFO; zA^QF;tW^IXDGcnkKpxg}VHHN!c7F6o@9klh&I#&wrx(&y>V~Q2)t4+WV2|mgyXyD0 zzx7q@u*zG4awE#66#Qrcb<1*~)(YYMLihrzHVC{A`@YnYD*bMqe5v+`qFMOyhkiFv zrFy2Px3H>VBs@{K&TGER&gJt<`pZ?fPD?1g5L57zB`{=4%px(jNKMKiKUCC?RTB-3 z!StkyEDNndF<-1si51G%nL8`oT*O%c;AEgnvojz^cfRE-MM!qmo;1 zb*UaI-ifNk{!s9#p^<6DQ|fY?6s`#{#hH!3Z-R~tSYHs+zm<#2e~U0%;TXBg({+|l z%(M|KsE}T`fkP&NRn)?vl<)D|bK5Wy-19hV5)6)}1=bl)PrHr2pV{Xq(=dk|>OCOJ zCYq{3ZHVFM5ceizxAHk#rF8WneoI;aZPT3%@HkbCDV7ip>9E#mIKL&7UQ?2<7^NiO zBP!zY-hY{_OWF(cd^c*CSu~X$O-aT*8}(u8;ft^|VYE=jSl6BIFy_G9K>s&I1js)Y zv<2e)jGbRpkOThRgs;k^Lkh!j*qB(kmWYbFmPcr3)C=`(NQ8pjbSQhi{7^AYw9D;@ z9O7}yFT@MV=LtUk;`>yRw~C>qm(n%_Jr= z5L;teIb5l+WMEN%z{I>h+lWbE(4RTEmAJr;7{QHrxX7Z8yDV2(Sk0m<=5HOBj5DeN3)oVDFih30Ur;U)=*^0g zSPJu|vr0N+>|Y~gE$8TP&ZDQH9g)T1n`ZI0w5%D1;qSvH%6{f)&?ZY>yn#2it=?Po z%DCVQs#nNZHb{vstVYJ*B}sE;#ap5rzx4Mt2Dvx$X-`^UB|z}{VYL1YQW>Bx=k**H$iJ2;KW)rqiA%*C4He^HO+vJr$nx>@y~+De4076h z_|fKFA_k=Dl{Zj)ClZLu;=@nUnynIl9MT3zdV~#~ca^E%!zpOa)feW(HOwiwgfy{} z7J8=W1B2*R)n}>CQjaxINd$`(%ieLeF1TDNd5H9}suqKvEE>5pz$4vr6MK|Gr-`kn zN6!^N!Hj@52E_D!T<_4Uar>&Px{>ipdr82QU-MdPa2AV2-f4E2L>bPcXW`MHpltbc z-Y(oF!BhY}_tStzdRtNiJ%_P1 zFGtRbt|!7aC&qVp6Xhy}5GBxsRG;*QXBghO%iM|D7`(3=R!SI^CW@Z)#tiY)#bvAC zQq#L%`plYzc39v;+4R>`;Xit$Q*|OOs@HPH@(HN01?skCR-)6v(XZ}`L?N@%57f3? zQ1UJo2S-B$wOkYB7R05Kjqm*}tlHuAkiyqj9V$3lD=ru;KjIUX37o2H2P#zqIa$8kh?E4Y z=`jm)wh77{>t<7FvSz0E0;LT^@Z9zru-MlmLJ_-%)zU0gn@JpUN{`zETgGV$UGgtg zz`mPo$zHP36D>`qJo;Gzo@_I8wlAjhWuE)7t*rn!?&SU`;YM>1>XH>qUK1N>-o|ld z>Et45-B_S-PF6x>qCGa#K(k-x1 zN=07MvlBCTvl(P7%Yk)*;ss10SzeRSHDu(Bt12Tzl2>@2P|n@*>KqP>hRGRu^6`Y0 zc?|>U)iVYdEf4&7e#$YCmius7Xi6~AAIf#Fy*`kOHGjkDLH(iUBNSG(sz@3TRuL2&`w>0z#|-1s}?HV}@r2ad9Fl)Kgy+4&XLN zXr+n>z>?W!2UN97TyBags91DAFSFjs@X2&SL_zcW5fxf~ppWe(cDU0Mx06{a^ql=j z;>DX4bPjuzTFjXj`cjm79u^HtD-pChQgPRwDZeg zXCj@&uvb#SIy*qE6L$oDGHd<{id8~+k&_v|E*UG97`&esw5DcrfTuJf&$oa-Vy(ZQeYuxvdD@9z zIgv#|TFj89)MLTr9iE9`VUke}E>BJWG&m_ecil?Ca8tUnj1e4D3bzOOTs*4xd4Wc* zhx;jz7F+xM7?u^YMA8U(c&f48H|X!!&R|GN?7o-b$@3_xt(btSMfXHcE>VcSwiBf6 z;E`6Ct2Z3BTL=BnDA{USO8nrKaF1D~p;i37SZ7G!g{iN~9X6gRfhGG!d zxE%E7Ke}UfwLa4zp6QXgG}7(w=Eq0#dgdZ&eNQLJ&=_(yRv)~<= z(==Vu`4DsVsKIN4IcJA{M9l@VvYkG-w8ve-z551q04{J_1~? zZ@iA41S}R1EpPbDO4xvor45Jz87rr{+{TKCw z8Lgv-WQh?URt^RVY`^I;WQ?x0OQvxPR=+_2dz8`jHEL_vuMdw}>7tpckG?=-daSlV z!#yUohxbeHU-CWHi=HJ$6uA&TlEN8!-37A6wv+_wrd%vv#8tf=ZCJ(K7fE>Mh)!sDJ&fioi*!vh0GQl%7kry*z7MF0XC^cG-tw3bhW{O zRUd~QY~Fj{jq)0HHPVPrDbVkpTFuaJJ`GJrDQV%o9kYC7bkEMS4+)vMO%~2Yx(h(= zobo##tgqZ5f?*_H&-6u1suFxgK4O{yf1SdUQJWa=fDHWUbFHo2mqPvOnBMkfWv2-l z!MbcA(eh%`IL);gnF0&Hqo-;ssGQgk`~LOPq?g895S|a}9kHPc648TacC_o02#P`* zBaxe?vph#VUQsdb+1m>b5<7~0^EIkkv0(m(c=g+w)jr&az@6o?n|Q`sYMXsq0m`5% zv9Tct%hlEaboMIHc+4)9Hb-ygDkn3Rf_8b4~yCo{U<*?cBz?knmd;yw;CRg7Ub5gd9gn4Tz5Vb%oJITD+*Z#tn&@W zzD8|k4HXicr40%QlW=E{+f_7WX4r!Jy(CM}ckT4k^C2f2+OQ}Wfoc)KTj_?kzH*Dv zH7d|UQ@jiK`IEeclbjcGwQp8@vuPRC#rS}3>{@*r&{!d?98a#ik`QXxkwO2di$V@AoQ=!^6w$64Zr~#7L zoMQUQb;#qXELuqXYnZAsXAGyeE^Vl^h3~#lgp4ce2dX}J?M&SRirXo3|5(my$T6># z&A)^edPw%d(SMTdv0gKbqL!O_M%sYl8>abmvWUOFq%MZqVUkJ_A#rf3CI!)O3-OWM za5<_Dtzg^{kh8b>Jbo|_0!ov0YEJz&&5bF1GLY@W#8zbz1Y1`FJoY}mc~fM)C`#mb z_Amz9C(X7hALtgw*=GI?!=-VuX$qwDQkzJink~zfb`w@BpKX9fO85?0N7Bo`kHsr+ zv%UD*JkKD|BFUJeqQOTyrzTM>| zqGv1MN_=se3~0FLp360jOliCp zUTO2D+uo+{=>!u0y-1*Oo~QXPVvInsx&m??5_nJO@z(15DelGN<=Ly5D5tUgkM&gk zoBii-gae!EtD8^^(L&Dwi{7^J7G-ihD12J{vKr>9rF{YZu< zx|aaZ7flTesr;}<=rrNk@NWpO&lWF2jO)#^c5zs#kG|ffa=SqowM~YuFBfoocA9C8VjYPxi#A8DJo@|>lhF&Ua zU%WkOYV{3(xlbtn{AY)}Y_X0`tj{f|oRA-bK2BS6f%R;*x=I5!)s7rmUxkSn)P^9@ zF57RX$Dnj`y%Agte#|_9^`XO`%^p@zv;8?f|MU~nXQ18+j!}a!@~i08`VQ=IGlvEM#J(07hB2V%1MLC)wO|d1dG*;{5s~ znO5dkIaw9C#_9v>|75J@O<;fHW*FmpL0N_Sigv2v9e};Bksq1fOyQpR<)}{?^B6WpIQ-LdmgXobN+LFQK?K<(xCjs zB#q1?%bq}KV6oNptb&ip>1>?7%zVVhSbC->c7}$P?o4o?@_P42R^G4qJ6}@pF9fi> z5-9-%MBSpBfray5mld|pT_IuQHcSh1u5E$1EUQN1NfgKy%GMm2u4M`Vqvk}IAQLDSjP_8GZMR!z(z23v~Vhil~Sng#_g)?A|>D66^Xu)eWeucE7!$?!Tl z)UJ|9a(vJ7@iAS$spU_d{x$eSV@S(ilC0ETU&1nvJo1TXW9oDTzJiGX*>4w3^0ri= z`lVBIK5$)T2GD!GRWn0J`^JNJnV_S}?h6D+_dE_6ZA}{ZYixw0=N6mIOxtwZ{UlzQ zrYEL?35gL(#Q0Hph7^rFfGKlWd}F&1|7*~n_DuG(2&+QLBPEVDsOWL@{G=HRS=mv3 z7|8>@FY|YEoY8YME(kP)?ei+xd8B`Is*l>zmRKY!e)ywlg>e^o`9y_u73k9|AxLL9 zSrvmXUU??U8vyp%gBY&ci)fV-JSv&Vocj+A^gdw@8*^vi9{A>nbbg*BVzL@r9(F?! zpITwD^>&$whNE>SxA?XTfq2za3fBr;@3+xq6^y>n_^42-5bdso`%q1fzRt!UsQqk2 z*_SAUG-=f;KZG^w%zUq!3d{0rs{*%swVE~s1g5g-0~RsPKH2_4?B(Q9bUb2~d8#Bx z(S(w|8C$@Jxh=vp{aM3q_a(Bn|^?{fv697j9@Y4oecG6D={x-(ooEBp_fbaOrPeU{$fbpMM-{; z44Xx+-6tmPX?x-^7SNlyOAle;8J=^9I~@R%WVRAe+fha3Mq*L&s+v5uGHvzju-jIv zRdvPDPO<%>7G8#6McrIamDo$go2@#N=fi4k(Ax3&or!K2L$$@8@o%-;UhCctI}Ux* z7CH$}e$Rq%T)+7b8=ea1q7rfushtt*g%vWVtP1w>YamCsPKR1lH3;=}b!r|7?peUO z1}1J3fW77aMXXbc|1V-qdsALlpYC#l+U49F7^Pr}DyMP<$!WGMf-+O%wi)Uemx z8C`cetW`>{4OR*?ZeQ%Ys!x=A@`o6eJW9hoF}(}_iZ;v0M1nnWFaI%<&_(3haL|jy z3+7t=p!X|9@QzGfO3*-s&LbNk>Cwg!CO|ynQ(hh-Ob(wGN8BpD^L)8? z)YmX^xVbum#}cp(ZQMxF?syGAuXYp0vyRH(HfqWgu$?hcQNcP)jF_G+LSBw+ z+(dQ87smy~S%#BWO@!#T*18E`MXW}<1kPq>C`9UO5DX2D0cs(Dz4XX0)(KYF72(e| z2^WRy{+Fd)KziYTmGic>%IlGVF106zMJWCWvg)jYw&mW+1eT*d$WMd9Mke+mI=TI< z6nx^4a!En&z<{~!oZ^Vxm$R&P$tOM+>^y2k(4Kwmbnq+W^_WMao{R6=MZf1})>-f9 z9HM&kWb7M3)CnO`EY&|gsF%7>MjJ@v#NuzO_+FM?mY7xc1W8(*JW$;+sz01oiI}Rp z8t|&0jN?ga-8*vP^we5dAT1gA0FNZh-8-0u-Ew9~d3UP+^_>3aht6=%RVz^Mez|NM zgcB#-liwUvNpG^z&5%zIX$)7j`{Es8gz)3o=}P9u>EUF><>imW&eZz>(iX*X_kZcO zJhdwzacCCJA~TvY)4QwKf}4#SEI?jQTOQ-~&_f?SC6qrGfmBp9ymns00w1vgiI7s9 zY+}BPQjWW;d2#JKM0u;&333*><`F1M@*FC=x3(P~BZl_e7$mOUeLzu+Z z(8)ivATJ8eM}*w3GHu?$n0B0j{|&0$0=ajDaVX2BXm^q766olkTfK|tt!8M%C!(-i zAN?ZJoC)bvtb(gIWx_RBE5F&5a1z0WSYHzbl{sHCqh^4)`cx~t5}f_>Ol1A$N*%aF zMtiB>E0r+eCowX%foV7}d+qi)nYuvcx zMZ`vSMBb*j|MO0qPJwm zJMmzPd1>a3JRs+S(EOvchzY^vc_SIm8U{y^f5Xr=vb+Vy>xEJV@@Vpyt9X*C&2luX zW2Y=W@!n?TZ4DaXMz1~!<)|<*G;r4bwKAiCwrpu;+K-PkV6oZanrVD2CW9t`7uDADf-AjaO-O2< zOQ*3|ua-gyBc)R$?A>{rpNLnP#HsK)@EiA$KoW*#7c8tb4W~m|rO>BEMa8nw!I;?Q z(3&LNo7}W>f%D2_nrwl%J5;@~svOz-q(YfgN9AH~c52-|>pVLjDnzwqS*`cKdqF^ybD&yjI?N7{rxo_hr2 zvzHR^h)o4z8U$7Lb#wt~aNh>rjmVof&_6hB!ZkijKiO{Y12Wku#w$I>u`s7aL_As@ z6!Raxr%or=j}+7ITsdc|TakvvNS&zNAiw73>*9R7JOa|KmIrf2rMy4Y=e}Xm0VbN; z*N=2N?`o;3MY5Cfl0gJ0AquoFAqjUt3DQF&<8`CE6Ax8q-WwvO#Om zw!;cb7-{zEM=ikLHTy@Xn!F0$n~CnGH31A5Py2FIv5+^Kb6UG7Hp!p-kr zrvt^+--r2mF_om&U^``7(>n8g=#onAB?j}L>pupmkh4p>z6(oB-lG3o(evn^h&G*~ zejqjpT4_8YVN7abW&p7FLq;v4__OQy>6s`SZDW7A)sH?)hR$x_dAZz0LvHku?O zuO z&Xzb*xW~h`%U1w*C130hdftVCSYiVBNW`NNTrZ{GmR#zo^z(yt*WvMp~S)bDRig}oE=P>Xm$aQL8_yD0hPaBpZ z`9v_p@`(AiVV(-0@Ey#z)#h>K+BGS=v?lpvwtmJWK?LKZ*2=%wEy5KAr1}(*CJ_<* z!`%)@iEH%Kn88dMei#;qoB0rm2e@>-1my8 zM|PdKnvD=Z`;{M}_)5T4!u}-3DB@H+^VKEESt95U5d;T*Dl_$PZ1XL&rAPavnh4d- zAZT{X;vTpfiJ%1rVkcuZ5D--kv%EV8{Gw36Ia#&^mBJSXh|r{c5x%v++fDb$<>AHZ z0g=g0iz+e5V_UzOpgv&R930ebs;ph}DM%5X7h~@r?Krz3cxFtdIpKz5PP~5HhEm{~!EBXf(d~*NAvK6_kph$Ff z?Ic$-&p>QINb6UvRc}__6r4Nb^KWfCB9GYh8uPcaN&xlUBnk}U8)U7AJlRt_i4A3G z&b0lF-UW;-BhTbTm9@>n*c1SWd4+ygtrer>ckm`VVlXZr4D`LzCIkA+Z1sI`%M%NK z3sa&{$i4o_va;NOL~Xx5X%QovGh^tCE2?YK9)F~5+%hwb0PPDj^=Z|jpYzMl*Hl2) zT4@6spl?58TiIQIKAfQLXfZ|yUHEzNI)2}VL@R0KgZ9Hxq^>k_F_f)*C-;mKeBG>aP?6ks0KL3PSkP08r2 z#ET7oFupr&*z9psX+)miO2Ww)8mDOe0fk^rzD97w^lq&!`}p>?a#qbj+(!PP)1j z@0#AF)aua5_07$trcHmHzX$VNSh)e2%VunN4hUzsf2{xYkwrd`YF)*|F>Zirfj$v8 zKkXtS;il6rEY|L)4tXHh-1%s(-w|tFG^QQG;p+-lU_?*yrfl z99wU^6pUXH=hgr@?Bs6MISQgun4V(gCPD@&%rCJrGTGlsFc*D3KF!yd=_@o>6kJ9i z3}Q2}n#7m66pVYX00O_Cbl5-fQU&-g+z3@H^cix^!M&&oM zr-M0JpP4TEKR;Lt)hd1miF&pAvoimSu%;?p?vn|?q%-QK&;xdObravG`wO?MGXW1u z@Xa%{^SQSdv5@4{OqBs08j=?4F%-YCXJwLmswkV&y8eCMyN>CS6)zn@7Dq27g<6$t zN2QCydy_w@oLlgC=n|MOK<=@B)h2xgj~f`0V(~Xkaq-L(Owk8F#4O6!*})mK}Xpe5buWo^rjIk(5Wm`2y?h)y@*&@I_)<5CxE| z2=*$MR22|U;gsAi@+m+1?YPzpU;bqBd*qE)c;(S9S;0EM)1*YX*-0M0lz!W4EAC9M z$e%p?zl5(en)@J=#F*04!(wp<8+T^eRNW(Kj4lx`8JRMt9E|cyVa@S|68Go21{6#* zAXH*oAsUW^>-l!R->8a}91?xP8U)F^&oJ;ta~!q+LHV8xNKah5Xa`){`4pcxoI<4% z^j{kg(im>y#g*W%&$~;0FPOzbS0~4tmC;VT)4i?**`lE0HnnBGo#S3UPhC=I1z3J0})ptrd}P zb#P(cFXWFes=Bhd_{Xd1m>vvBaEmZS(^f43C))5#lt??vm_EdLa!w#QWEXJ6pHX^# z?Q!|nahq>4dKne@RB;2bsXkgAW~$X7YO{`F>{hof8O(Vh`<^3Hd>@5~*1U(UV zOL4CDp9ZaIh`(id9xd!)P3nxKij^QUuK{0soC2*H%|yuPP5qh&dyELe>PXRJI&qP6 z49~$wB_U*43{6a;hrGkavNNKrRS7B9HkV9h$39gGal&jbcM@%<^twq$;%#$-sab5X ztr^VURjEXe;Sy#Bt!iaP&fKkct@D(Ik9o6AtkLEpM#DXijm~(E#Z?o1yGbB94Jo_( z{YfNAsSyWO65!(0*p9oOBUn+q_nd!=hf;xnE*&#uT-n2+Q7~g@29?>SE!^%w_`=Jg&TfV2|2kC z~hU_Vm$c6wl`&Vs>5{>Y5VWMDzCS zDP;`Wq&se}S0RxEreuz@O!~~j(7>%Skzf=aeJ)zg$jFv*Zzp$2woR656MMhvBx~ya zi%szKp0`(MN?EzL-!Z8ZiYKa4Q2O^LjFC-UOWD%TE8-Zv+TB&TM!iU_S|ka_WYN=& z6l)Z%&q`>OXw#-GlR1eNgbufc%Nvs>HQL!}KTq|3&oW@5!p8Q-50 z5Y5tJ1x+WJtl;g*fTti=$+6LnqDjGbD=X?M9oLo|#n>$dZqv$G41x`{^X_d{goz9C zXRwX@8S|14H#8Cp1KkzifPHyAVFBx~i^g(0y>aDkvPh7Y*wu}C03Rj0*H2TC$WpUc z$uBViIOtC?u00gYC~L;bC(i;vSqk;qE8{qsBqzQS`vA;%u`WCKCFZQF$@Si^$m@vH z`kUzU-Jj1)oZ_tM1*Am_{^L0Ht$Pg}8{&?t_j6W!c`Uy9lcmwGH{xHc8%X#|RWRPm z)Rrfg7ndsa4JtdAysLYpQFzz7tBt1_BZ!`Bgi&VhAwpy&4EKMxsjQSR1^&m9vMp1I zZS=C##|$_wGl`wZp&75Jrd) z^kZG)v|v+VtF&G}ypvq&rCgK7OS4Y4gR%VKy01L_RDZuH@X6Cws`{ql%e}rK8^%6* z@7a1|Ike2vh`ZEsWQ$tcZ9g~Ov*;aS3a^H3)dFRq6o{NE9#=S+Bc?B%V@H zX(2DWgj7+SgGLg|$QBr#JonABlr6*~NlLHB*?QQ*$i=>#(YOnSD0{H-)AomLmAR%K zQ<_T>jpcWF5+|6Ko!s!LA9N){no4W)PHs#y$yPud6+a&f-)&+Y%T3|WCfSz*%ST3@ zq-}c-Cr|&YqiLNpI!TX-9J$U`zB@wCCU(;2VTHc;_Y5-SW%PWve17knV57WptyvYG zw|#1eV^~3*FA-PCnBL-nL;=Z?t1fj69ocz=sP8TuCeO)ZWNZ4A;wO#jxeCD$=@Bhu zWI6L6_8<2LI9`a8u>2ijdhW!ex@E5L{Eq{zGhgBbJB?hLy$|!R<`Wm_WA61v-XQH4 zZw}gE@oUtd4_i!t0aZ|%tRV7irP#`1G?p;9SP`o#fynKHO#fr$l%2 zx#Ne-XR!ECP~exfr>EL^SMUP4z!eH_CAIqx|=z^-`4<_P(>?LG2ZIo~Asmb4TG z1)HAMiiDj^d%3++x2A*)q;OVvBt>!e6ch(cjcR80(>^Ee0&#NrrB{I6Ub<|{W3=9W zoRmz#HM6lZ&FS>miCpkL&5$~v60YOM%p7owRh&O3<8$AK^#IcjYKg(^y>G|XH!miKT z3r#{=HG#Fk23!Ixkx8 zmpg>-I%*K}Lm6lE4fY>sLY>~gF<%P?$^7^C_Z^-Z3UoeOL!)#Yjl_AX?J5efhDv6k zfXt#WDxV59HE(zS&}Ecdx%REdJ1=V3$Q229Ho{w^!o{(#h8=>_X0;>KFMJpk%y z^0|3lCydOP6tKHRS0(R1?2|mKMiroLIsT9<2zgXfXo8Z-D<(9SOrwfI)5tcrdlZJo z)g+Gf@AEZDMWEK!i_BZ@pszpC6~;zA3*+`J)s!=LV#pxYMpit$nTl6D^O{N&mB08G z5=X3m&n~>vmL?ypQM>$TNvXRLtX;IB_eK5$o}vtMP4{ZCF6Z_J{^Q^1ct!lKn}gi{ zaQwBVh9%#z@>XGE*`$9;C9RnW-%O<#4A(|QvY!XnK(rfmR}B6XOeq_5S4UiTo=|2j zJyg1&`B9PbIJct#x%3b%OMj@rJ}DbXolCY~7GBf-uN!gM%(S~Gg$4M+%G2@6+X=Mq z%U8BEu6#5g%)@PB-WaZ#{P>!v1+A*kyO$%LG~x!e%Zrr}3r_}QSb;DfaeN658+HBd zdMefRFCnit_qw@Laq3GBGOKPiyo!Vh`fhmR#j|zz;N8WKOmUC$%)ioFt>v0Rd~(#+ z{&U3&wpU^<2v$WR5evq(uw%Zm!v>Wm82jPKIdFD$`N#2hgX~5*w2oHePhKWZz zqV@zHQwD!zRD?Qc;aI=IdnF9k=p1IWJyDk_G}K@RnELu&WWojJ^WqLzh;~}@ia+z= zrItOP2ewmjX{Ky&6zDQMtMXVKlH7NoTGjQK%mqNY9}dW6{ogefT^ zvIpyps@?D-eL+okNN>6BOc|3d)eD%f9S|x+`6=n*wZ;Rd@4KKlmOAElpeul%uuSC06SEa>KdFgv@67j}KMqMWgVKdG-3f18e5=WGL5_Xy0E5D90z{{A2k@Ra_}EKaY6aw3;je2R7MRZRf`L2tc}dvN97@6g&zmr82&RPLrOfTrSIjL(K#`xknRG= zRfn*#2Q)%Ww{EvGqWFm|iJv`MF8&oDq6D^cm#k3&*}-$xZ3pIP_m-v@#0K(~WGtv- z)Lv^P>iVB*CW{uPK;X8O0f1bE^LUO}Ms&0k63G+!6Ca0(`uksZ(7vIp_BSvvAztK z>=ZC<#RN2N)50Oi8Z%jJ=&^?#pG9t~wlSFR`0{6a*Qs`g{~3m@tD2AG%5koSy#IA6 z2(kcs(j|ZNpZVaNL8Pj!9t&9v$fNj&a{pC2&LnUIlIQOHIlibWylB!`)7sE$-0x2f zUAy_T;V$v43eJy-eQPa!$ee53>M4Vh1GHAL=RSO_24>ogcgT4&>cybjoUVa2>Qu=e z!q>mdE0?b6RYZIn$ZUB4j&?BjR>?(0GCPYz< zAv2#~W972dWe`s*kjw3gM0_!d-^|oA8huE`M`-vb zP_BOT&Q342@6|PZV~cbeeOoJ^-p(x2WhcxS&yNK5St{It55vsxz#$U!77#P%7tC7mk-U5(ayMM;dUlYR9Kg^ zCjRSIybZ%EMjas_UGWnQ;RgpN(*v!RiysQ+d>NVq3^@8+2prH| znd4k8t=#4HI3PP3G+nR$i(miI`h!*k{budU?R&24E7=v2mEDi0{g9RVqN7s>$cJES zE5Pep<{^E^>9<2cgTy`=Rh6}wZ3CFA(^BqgHf-O=F3qfNDk&PMdZQIpHL~V2a4=N( zQAD_{ENR!_nu_epZY*?87x(26SPicPaZ$*g;i4XeQm`e(0t&PW5(Tm>y zc{5jcp%xAy0Qu|}T{5^o`&wf6EY67qqO9DA3G^u`Tr`rZcxMGhV8dI9HX9$82oK5J!Xf4UmF2SO#&ojB zvfSC8Xx-Cl}hL^Z2^NKKR%Ia8AOL7@y$tT0;!YT99bg0bMyU zJah}!j8E%Safda>J`0wy?~R`E;FK|^n1EhLm>gOL{=6;5F~;_Mo3iZ)tnciEaseGK zq>O0!@i|Nh`0^WRxbK`7fn4Jmt_M9P>Uu2@mGp@=NcgJ<_Ow{`nsNO zhw}ICWAMb9#tbf1Y%KCm?O(=J%fHpXG;kFP0I< zE)O_me8|trNdy>#5-e1keWUiC`35Kqoe(G54_{tOO5vDPvr+!L)#bs7HtGmCU3Y8C z(9 zT)%dp5_2m)Sv~pja%fWv9VoL?t#H2R`ar z^ZzgL!OGm8bW{f%{2{`ir36TK_$HQ-d~V(BNyY4oWu={2L0q5m@+s8ZjO}*R(vIe$ zvvp&ujE|?n0vfTFidWDUT$Tm1@3%;#;LA02N0f6__lI*!fdhn}Ndu7Lils&1Iy~Sk z@M+8w=t@kOU8?g5)yHf)AMI>@GbZ{}Sw*BunEUl43(!U?$%g=*!Lwq1S(tN_Q+x!5 zm@wV#Cw8&-T|acUM%Gg?@k-qECVqHF9{}VPp};}c($lk}w}=B>^^jovgzIa=IE?J2oN9BawGnkuukw)w z0mY9~Q`Wg)vw*5LpX&B$m%=&`umil2K9Rf2SUYmLCF#q>Yo3FJ^@ThG$D8B+s{Z(B#e&yb!_4S&Q^v~8 zc4CL}ThXV$+Sa|pd`n|j3Z@hPWU_SOs9&qT{0aj)b9QaXkwfZ?1ja%&rMx^?XASY5 zWsm0ba<(vi)qyiTTudf0qLcgD`yp&IgCNrg16(T;I3S+1)E4#G{>$!E4@Cj-=WtLM ziRDju(iV^?q!PCo6q9dQx5Ww!65}EPdGI$4olc%7k?pPx-|xrxnnj{rYKVVDmvlar zZVIBhw+QrQ)+JRS@E;P2U4E~$G8tuQSev^navNNKQAseBH@dNzD0h&L z&g!AG_L48(Y|eIEc(&&t<2A1vTG|pY$HcHjfD3@+V0}>rkGGH6&~MehrKEl9@+n}E z7>yJ*n@xkZ=gf(>Sl6fnes3g+B^^NJC%&xcqiWqNu! zhGi`j-!6kEpMpGiFLXms;-ElvEgSsj&~Gu&2bRp=2#jKpVL#PJZ4Lzn#5|Ejk0}hj zepS9pFJbqr5xT-ensc3nMvvb>*Y~Wi&0v~HqdfA4{vjKQgx>N?TH^T~v!BtWJi0B~ zY9B`>28jUeW3!rr;X&=<>yBTOD6*%~M4B|Fn1I?`)-Q zxSwUJ%oGV)t$mB7_9<;?xr7oVN~qdWRVl4~DG`I#QfqAyOKX`a8d4Ekg_csoXBW%V zE(oS}qH3w7-)s6Oe80}QuXCOA{PMi-xz2lC@A5p)ec!Q4&bWxcVBO>6@sIWi`8V*O z5|K1-VK4ImilZ-zd>?0z-vzp6m|2j&dEJK|tE2kc;il%CUr_b;xQ@U8*bQ-^cp7zk zJR0i}vKGGFY8;#QW($zu!v7Xz`y4vbQoLOMhZE&fJeq` z==S~Bj0mhcN=e{%S8+R}MCp%6O0nDXC=>m88NW~{Vk+PHRcr5e)yF350t*k+tvKCS z&U#Op6lr7^Kv*tkVTO~Ju3Ow2pHgLkoQIj-UZYjgh444gjLhv@V7zQh82B|KWj(3W zv9he7`(gH}JI{tK-E5R{qv3#lME63r`}Dj}ye6aUeaqLgy2=t$sU?Cd-U`|v+jYxQ9hEHz|Iq$0@sSQJt1_u#w*D>n@NmY_Ic5v2|&`D(#2S zOF&Q^`Qg1v{BQ?8wJfPG<8_~yPcRMiqi@||$bL&mf#{@r3KrSJl2`rhT-%?-=Bt$s z!&l1bfUyK;SR6JhrqUQy>Rp!S`>kwM#DWg*G--G>d1I%NwsY}wyWBe|w$oZ*QGx!3 zYf=n{;Dt8&wqQ7wMne4-Oj$VFlzCke;(&h$_wfYF+yFc*H&G}hYyhQdCIaNI%^Rvh z(rCd^ATA=j8y@#-lVWt{<-VBH*FvQ0stQYPA{zV+o|9&D9ZN?0W94%V%p7^A-Q!JO z&)CcK^%C(;ZbV|{pz-_9o0Ga5uE}c9;N|MQWXM&@N{`3ffrJBjZ&+FXEIAbPu0v3a%+!7u>pev5Ng3>$lbW3_w*G z6tt(V+&^qblosPINQBF+wolB+LmF54W-S-AvIg%eMzkE&6v|xLtV)P@w1>Q&(cw`o zW*V42P^p{YK1a1|t3{elV&15l{d^CB8xFe3T+}#SZ~&henm?1cduhG(^_d>iBPFUa zvoAlTWc~WLUrlc-L+HLa%f-L*UTU+hBr9t3)#X3hu*)s%@(M)5Tr|@4mRP8YYnFOM zwV}T@Upl4EwY_{e=AR$(EIAe_g#V)0puyub(e9W4&Osc>w+B5_*l5#CrN>OMG&ffx zh!6iw9=RzLVZ=yKA;`tv3_XQ*=)NHpo#v8w$(LHNc-JR8p3Z_01=HBWb5k>~)U1Jq zxm8T(C#8#t@PPo6fpc^nNx4salVC}j*;LPt zdS986)UkFf-)yI{q_?PN8H>!{)nvx;J+O}$4O>>+c)QCbzd*v1~QBf=4WUVT$ z08)6-JXvDq)|Eyf86|i&o}yI}n7sR**q|HD1ql74oAt}i{@49Ts5Zoe$6}#b<hq_RJmb`Qy|GIZK1~HYab-_4821VZ0ERVM5Ob zAV(eX1tjBmFNOU2yvuuiieMsAF@|knh@G$NbKtxtB|zNLviIZD_3TK|6gOsEmJ$j| zwB&nFnk@T-@PJw2lx4HhUaz%Zfchtl2!+77R9Wast))`;Gvut;-|tzf16Hn90bcB* z<5uaNlA`{Vxxs`8j*+8$8XwR(96Rg5T?5${kYX7KzZl&IT#vB?>-7)Yg9|IHT`R(0 zP&teG(#J^V=Gms=g~=gC+3P$n!#HLoZ$p4h+q2-%E@d-wV+JBar*dxQUUx9rxTC*s z5b#*nqPJjn*`0&|&*ExEHDPawoCFHHye=n{-;5RQF=BGVI-f=#ZBiVv^iDL#ZBsWS z+Z5nJd5rtJAG0Um_g;Ek%3N@}T~DEmj^3CV+Cuq?DqH-*$qH93a&1?V?&%o68`Z(` zrUONVf+TQ8ke+qESMCqgo=UqEYhWNQIYNnHNcq#Y-dq)uJ;w0H(Blm*o5kh~=VpCA zESH49p0b~Bed#qO&g`#<`={vYFlgOipe4q&=m0ya`_aD3%Zs_gl{;*ur}Hr zYTB8LmCH3)q%8j-KZfUI+rEVd$Ax?iGJ68D_`cQ<)3A$DetGAY$6LsekNZ-8lIu{S zhb{C^%W^GeJh5go&Te_v{le9$y8Osm&5GBEIHGRg)65~(r4Y^N&s5kafLwtSvZXjB zl+kfty=e8>B-!17pUO!-*+ofa9=XSNg#0WfNEko_Y3-Rm5(E|aE{1=p=yY(T?|d6F zE%}wduCuFmMd$t}W$G^``PJ!QE`IW#KYiM{8}kmXWQOK z{wq$v)SIdtbEuWB07#XpAmF$M!ax4ws(A^RdrQf^j4IKmClGj=*NTqY;rZbTbq<&o z!Ja#rYh0@UMO>>g`35z2PaIW9`@REa_`CbnG|zwfDPiOcV+p)Eiu~bf=)@cnec6cp z(N6_7op=)8+PM=)t6aG%!2I`<|NYDV$G|?0$f0kvV#najQ($X}y@PmwM4nOv?_A(M SxdzdMlLx{GWms res.json()).then(v => Object.keys(v).forEach(k => variantData[k] = v[k])); + await this.cachedFetch('./images/pokemon/variant/_masterlist.json').then(res => res.json()).then(v => Object.keys(v).forEach(k => variantData[k] = v[k])); } create() { @@ -468,8 +468,8 @@ export default class BattleScene extends SceneBase { Promise.all([ Promise.all(loadPokemonAssets), - initCommonAnims().then(() => loadCommonAnimAssets(this, true)), - Promise.all([ Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE ].map(m => initMoveAnim(m))).then(() => loadMoveAnimAssets(this, defaultMoves, true)), + initCommonAnims(this).then(() => loadCommonAnimAssets(this, true)), + Promise.all([ Moves.TACKLE, Moves.TAIL_WHIP, Moves.FOCUS_ENERGY, Moves.STRUGGLE ].map(m => initMoveAnim(this, m))).then(() => loadMoveAnimAssets(this, defaultMoves, true)), this.initStarterColors() ]).then(() => { this.pushPhase(new LoginPhase(this)); @@ -505,19 +505,29 @@ export default class BattleScene extends SceneBase { async initExpSprites(): Promise { if (expSpriteKeys.length) return; - fetch('./exp-sprites.json').then(res => res.json()).then(keys => { + this.cachedFetch('./exp-sprites.json').then(res => res.json()).then(keys => { if (Array.isArray(keys)) expSpriteKeys.push(...keys); Promise.resolve(); }); } + cachedFetch(url: string, init?: RequestInit): Promise { + const manifest = this.game['manifest']; + if (manifest) { + const timestamp = manifest[`/${url.replace('./', '')}`]; + if (timestamp) + url += `?t=${timestamp}`; + } + return fetch(url, init); + } + initStarterColors(): Promise { return new Promise(resolve => { if (starterColors) return resolve(); - fetch('./starter-colors.json').then(res => res.json()).then(sc => { + this.cachedFetch('./starter-colors.json').then(res => res.json()).then(sc => { starterColors = {}; Object.keys(sc).forEach(key => { starterColors[key] = sc[key]; diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 8118f385fc3..db00ea600fd 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -424,14 +424,14 @@ export const moveAnims = new Map() export const chargeAnims = new Map(); export const commonAnims = new Map(); -export function initCommonAnims(): Promise { +export function initCommonAnims(scene: BattleScene): Promise { return new Promise(resolve => { const commonAnimNames = Utils.getEnumKeys(CommonAnim); const commonAnimIds = Utils.getEnumValues(CommonAnim); const commonAnimFetches = []; for (let ca = 0; ca < commonAnimIds.length; ca++) { const commonAnimId = commonAnimIds[ca]; - commonAnimFetches.push(fetch(`./battle-anims/common-${commonAnimNames[ca].toLowerCase().replace(/\_/g, '-')}.json`) + commonAnimFetches.push(scene.cachedFetch(`./battle-anims/common-${commonAnimNames[ca].toLowerCase().replace(/\_/g, '-')}.json`) .then(response => response.json()) .then(cas => commonAnims.set(commonAnimId, new AnimConfig(cas)))); } @@ -439,7 +439,7 @@ export function initCommonAnims(): Promise { }); } -export function initMoveAnim(move: Moves): Promise { +export function initMoveAnim(scene: BattleScene, move: Moves): Promise { return new Promise(resolve => { if (moveAnims.has(move)) { if (moveAnims.get(move) !== null) @@ -460,7 +460,7 @@ export function initMoveAnim(move: Moves): Promise { const defaultMoveAnim = allMoves[move] instanceof AttackMove ? Moves.TACKLE : allMoves[move] instanceof SelfStatusMove ? Moves.FOCUS_ENERGY : Moves.TAIL_WHIP; const moveName = Moves[move].toLowerCase().replace(/\_/g, '-'); const fetchAnimAndResolve = (move: Moves) => { - fetch(`./battle-anims/${moveName}.json`) + scene.cachedFetch(`./battle-anims/${moveName}.json`) .then(response => { if (!response.ok) { console.error(`Could not load animation file for move '${moveName}'`, response.status, response.statusText); @@ -477,7 +477,7 @@ export function initMoveAnim(move: Moves): Promise { populateMoveAnim(move, ba); const chargeAttr = allMoves[move].getAttrs(ChargeAttr).find(() => true) as ChargeAttr || allMoves[move].getAttrs(DelayedAttackAttr).find(() => true) as DelayedAttackAttr; if (chargeAttr) - initMoveChargeAnim(chargeAttr.chargeAnim).then(() => resolve()); + initMoveChargeAnim(scene, chargeAttr.chargeAnim).then(() => resolve()); else resolve(); }); @@ -487,7 +487,7 @@ export function initMoveAnim(move: Moves): Promise { }); } -export function initMoveChargeAnim(chargeAnim: ChargeAnim): Promise { +export function initMoveChargeAnim(scene: BattleScene, chargeAnim: ChargeAnim): Promise { return new Promise(resolve => { if (chargeAnims.has(chargeAnim)) { if (chargeAnims.get(chargeAnim) !== null) @@ -502,7 +502,7 @@ export function initMoveChargeAnim(chargeAnim: ChargeAnim): Promise { } } else { chargeAnims.set(chargeAnim, null); - fetch(`./battle-anims/${ChargeAnim[chargeAnim].toLowerCase().replace(/\_/g, '-')}.json`) + scene.cachedFetch(`./battle-anims/${ChargeAnim[chargeAnim].toLowerCase().replace(/\_/g, '-')}.json`) .then(response => response.json()) .then(ca => { if (Array.isArray(ca)) { diff --git a/src/data/move.ts b/src/data/move.ts index 9445b188b0b..48714d00c07 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -3096,7 +3096,7 @@ export class RandomMoveAttr extends OverrideMoveEffectAttr { : [ moveTargets.targets[user.randSeedInt(moveTargets.targets.length)] ]; user.getMoveQueue().push({ move: moveId, targets: targets, ignorePP: true }); user.scene.unshiftPhase(new MovePhase(user.scene, user, targets, new PokemonMove(moveId, 0, 0, true), true)); - initMoveAnim(moveId).then(() => { + initMoveAnim(user.scene, moveId).then(() => { loadMoveAnimAssets(user.scene, [ moveId ], true) .then(() => resolve(true)); }); @@ -3239,7 +3239,7 @@ export class NaturePowerAttr extends OverrideMoveEffectAttr { user.getMoveQueue().push({ move: moveId, targets: [target.getBattlerIndex()], ignorePP: true }); user.scene.unshiftPhase(new MovePhase(user.scene, user, [target.getBattlerIndex()], new PokemonMove(moveId, 0, 0, true), true)); - initMoveAnim(moveId).then(() => { + initMoveAnim(user.scene, moveId).then(() => { loadMoveAnimAssets(user.scene, [ moveId ], true) .then(() => resolve(true)); }); diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index ed55bbf4d74..ceeca373b97 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -394,7 +394,7 @@ export abstract class PokemonSpeciesForm { return new Promise(resolve => { if (variantColorCache.hasOwnProperty(key)) return resolve(); - fetch(`./images/pokemon/variant/${spritePath}.json`).then(res => res.json()).then(c => { + scene.cachedFetch(`./images/pokemon/variant/${spritePath}.json`).then(res => res.json()).then(c => { variantColorCache[key] = c; resolve(); }); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0989c769f0f..97b228a24ca 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -275,7 +275,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { loadAssets(ignoreOverride: boolean = true): Promise { return new Promise(resolve => { const moveIds = this.getMoveset().map(m => m.getMove().id); - Promise.allSettled(moveIds.map(m => initMoveAnim(m))) + Promise.allSettled(moveIds.map(m => initMoveAnim(this.scene, m))) .then(() => { loadMoveAnimAssets(this.scene, moveIds); this.getSpeciesForm().loadAssets(this.scene, this.getGender() === Gender.FEMALE, this.formIndex, this.shiny, this.variant); @@ -317,7 +317,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (variantSet && variantSet[this.variant] === 1) { if (variantColorCache.hasOwnProperty(key)) return resolve(); - fetch(`./images/pokemon/variant/${battleSpritePath}.json`).then(res => res.json()).then(c => { + this.scene.cachedFetch(`./images/pokemon/variant/${battleSpritePath}.json`).then(res => res.json()).then(c => { variantColorCache[key] = c; resolve(); }); diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 74deaa5fdbd..38f82ff060e 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -19,12 +19,7 @@ export class LoadingScene extends SceneBase { } preload() { - const indexFile = Array.from(document.querySelectorAll('script')).map(s => s.src).find(s => /\/index/.test(s)); - if (indexFile) { - const buildIdMatch = /index\-(.*?)\.js$/.exec(indexFile); - if (buildIdMatch) - this.load['cacheBuster'] = buildIdMatch[1]; - } + this.load['manifest'] = this.game['manifest']; if (!isMobile()) this.load.video('intro_dark', 'images/intro_dark.mp4', true); diff --git a/src/main.ts b/src/main.ts index 13aa5076ff4..6a00693fc71 100644 --- a/src/main.ts +++ b/src/main.ts @@ -76,7 +76,21 @@ Phaser.GameObjects.Rectangle.prototype.setPositionRelative = setPositionRelative document.fonts.load('16px emerald').then(() => document.fonts.load('10px pkmnems')); -const game = new Phaser.Game(config); -game.sound.pauseOnBlur = false; +let game; + +const startGame = () => { + game = new Phaser.Game(config); + game.sound.pauseOnBlur = false; +}; + +fetch('/manifest.json') + .then(res => res.json()) + .then(jsonResponse => { + startGame(); + game['manifest'] = jsonResponse.manifest; + }).catch(() => { + // Manifest not found (likely local build) + startGame(); + }); export default game; diff --git a/src/phases.ts b/src/phases.ts index 62e53d79717..09595cc0ee6 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2613,7 +2613,7 @@ export class MoveAnimTestPhase extends BattlePhase { } else if (player) console.log(Moves[moveId]); - initMoveAnim(moveId).then(() => { + initMoveAnim(this, moveId).then(() => { loadMoveAnimAssets(this.scene, [ moveId ], true) .then(() => { new MoveAnim(moveId, player ? this.scene.getPlayerPokemon() : this.scene.getEnemyPokemon(), (player !== (allMoves[moveId] instanceof SelfStatusMove) ? this.scene.getEnemyPokemon() : this.scene.getPlayerPokemon()).getBattlerIndex()).play(this.scene, () => { @@ -3675,7 +3675,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { if (emptyMoveIndex > -1) { pokemon.setMove(emptyMoveIndex, this.moveId); - initMoveAnim(this.moveId).then(() => { + initMoveAnim(this, this.moveId).then(() => { loadMoveAnimAssets(this.scene, [ this.moveId ], true) .then(() => { this.scene.ui.setMode(messageMode).then(() => { diff --git a/src/plugins/cache-busted-loader-plugin.ts b/src/plugins/cache-busted-loader-plugin.ts index e1ee78709df..449c99454c2 100644 --- a/src/plugins/cache-busted-loader-plugin.ts +++ b/src/plugins/cache-busted-loader-plugin.ts @@ -1,26 +1,29 @@ -let cacheBuster = ''; - -const ignoredFiles = [ 'intro_dark' ]; +let manifest: object; export default class CacheBustedLoaderPlugin extends Phaser.Loader.LoaderPlugin { constructor(scene: Phaser.Scene) { super(scene) } - get cacheBuster() { - return cacheBuster + get manifest() { + return manifest; } - set cacheBuster(version) { - cacheBuster = version + set manifest(manifestObj: object) { + manifest = manifestObj; } addFile(file): void { if (!Array.isArray(file)) file = [ file ]; - if (!ignoredFiles.includes(file?.key) && cacheBuster) - file.forEach(item => item.url += '?v=' + cacheBuster); + file.forEach(item => { + if (manifest) { + const timestamp = manifest[`/${item.url.replace(/\/\//g, '/')}` ]; + if (timestamp) + item.url += `?t=${timestamp}`; + } + }); super.addFile(file); } diff --git a/src/scene-base.ts b/src/scene-base.ts index 1098788c42e..a990492f57b 100644 --- a/src/scene-base.ts +++ b/src/scene-base.ts @@ -5,25 +5,35 @@ export class SceneBase extends Phaser.Scene { super(config); } + getCachedUrl(url: string): string { + const manifest = this.game['manifest']; + if (manifest) { + const timestamp = manifest[`/${url}`]; + if (timestamp) + url += `?t=${timestamp}`; + } + return url; + } + loadImage(key: string, folder: string, filename?: string) { if (!filename) filename = `${key}.png`; - this.load.image(key, `images/${folder}/${filename}`); + this.load.image(key, this.getCachedUrl(`images/${folder}/${filename}`)); if (folder.startsWith('ui')) { legacyCompatibleImages.push(key); folder = folder.replace('ui', 'ui/legacy'); - this.load.image(`${key}_legacy`, `images/${folder}/${filename}`); + this.load.image(`${key}_legacy`, this.getCachedUrl(`images/${folder}/${filename}`)); } } loadSpritesheet(key: string, folder: string, size: integer, filename?: string) { if (!filename) filename = `${key}.png`; - this.load.spritesheet(key, `images/${folder}/${filename}`, { frameWidth: size, frameHeight: size }); + this.load.spritesheet(key, this.getCachedUrl(`images/${folder}/${filename}`), { frameWidth: size, frameHeight: size }); if (folder.startsWith('ui')) { legacyCompatibleImages.push(key); folder = folder.replace('ui', 'ui/legacy'); - this.load.spritesheet(`${key}_legacy`, `images/${folder}/${filename}`, { frameWidth: size, frameHeight: size }); + this.load.spritesheet(`${key}_legacy`, this.getCachedUrl(`images/${folder}/${filename}`), { frameWidth: size, frameHeight: size }); } } @@ -32,11 +42,11 @@ export class SceneBase extends Phaser.Scene { filenameRoot = key; if (folder) folder += '/'; - this.load.atlas(key, `images/${folder}${filenameRoot}.png`, `images/${folder}/${filenameRoot}.json`); + this.load.atlas(key, this.getCachedUrl(`images/${folder}${filenameRoot}.png`), this.getCachedUrl(`images/${folder}/${filenameRoot}.json`)); if (folder.startsWith('ui')) { legacyCompatibleImages.push(key); folder = folder.replace('ui', 'ui/legacy'); - this.load.atlas(`${key}_legacy`, `images/${folder}${filenameRoot}.png`, `images/${folder}/${filenameRoot}.json`); + this.load.atlas(`${key}_legacy`, this.getCachedUrl(`images/${folder}${filenameRoot}.png`), this.getCachedUrl(`images/${folder}/${filenameRoot}.json`)); } } @@ -49,14 +59,13 @@ export class SceneBase extends Phaser.Scene { folder += '/'; if (!Array.isArray(filenames)) filenames = [ filenames ]; - for (let f of filenames as string[]) { - this.load.audio(key, `audio/se/${folder}${f}`); - } + for (let f of filenames as string[]) + this.load.audio(key, this.getCachedUrl(`audio/se/${folder}${f}`)); } loadBgm(key: string, filename?: string) { if (!filename) filename = `${key}.mp3`; - this.load.audio(key, `audio/bgm/${filename}`); + this.load.audio(key, this.getCachedUrl(`audio/bgm/${filename}`)); } } \ No newline at end of file