From 4e8ca9c46f9fe3cb1e4d56b37916ef64bfdf98f9 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Wed, 23 Nov 2022 11:47:52 +0100 Subject: [PATCH] [flutter] Batching of render commands. --- spine-flutter/example/lib/flame_example.dart | 2 +- .../lib/assets/libspine_flutter.wasm | Bin 386043 -> 388037 bytes spine-flutter/lib/spine_flutter.dart | 4 +- spine-flutter/src/spine_flutter.cpp | 117 +++++++++++++----- 4 files changed, 89 insertions(+), 34 deletions(-) diff --git a/spine-flutter/example/lib/flame_example.dart b/spine-flutter/example/lib/flame_example.dart index ac8582afa..3acc95ec9 100644 --- a/spine-flutter/example/lib/flame_example.dart +++ b/spine-flutter/example/lib/flame_example.dart @@ -116,7 +116,7 @@ class PreloadAndShareSpineDataExample extends FlameGame { // gets their own SkeletonDrawable copy derived from the cached data. The // SkeletonDrawable copies do not own the underlying skeleton data and atlas. final rng = Random(); - for (int i = 0; i < 50; i++) { + for (int i = 0; i < 100; i++) { final drawable = SkeletonDrawable(cachedAtlas, cachedSkeletonData, false); final scale = 0.1 + rng.nextDouble() * 0.2; final position = Vector2(rng.nextDouble() * size.x, rng.nextDouble() * size.y); diff --git a/spine-flutter/lib/assets/libspine_flutter.wasm b/spine-flutter/lib/assets/libspine_flutter.wasm index 5d976a17d90f4d85bb9724ff895e082b252df10d..1036cda212c6b02f1304f69232326b9ba39cb144 100755 GIT binary patch delta 88391 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 N!SznOCQO<)>%ZhwohbkS delta 85964 zcmd44349bq`ZwNH-E(ASl61&@_e>H9Nq}&O;ZV{F$|>M|unR~~2ngZO1&^J8hzKZ0 zq3sR0xT2zhpwSft6xUn96BQ6vyj=lx*AsZZPgT!k5@6T;z59QEfBBg1x}SRPdaA1D z`S-Gac_Dl4b6o$s?#}YMQK5PMj=)4P8vI7x;9ii zm6pebiFebA`0y&RBt1)f)W#!f+ZZCV%{YE$#LWun+F7x8S?sxN{0!}EF}#f>K5r9Z z=ise?nx!Crd5I+M~|5>O}j`e&de9zqzCzkFjWsGl!}IoTya81mRO#VV@?}8edOp# z<1ZUMef;D}+Q>?=GNU9A2V|63kx|A+s}Xl)WbljIqe7lY&NSH=fSxUOWuzO^v^oru znHLyy`P8XnCr#JJ7E#g*a7Sx{07+YZNvQ<-^~_X$X{CH^%nB~e>cPh;uUB|$%<_q~Szb0ltSiVCucOYyVqxZGi6gm5x;ChY-h&NO$6hgh^5vje9;JN~ zCr@tBF3Ve5;J!{OkxeFNr|`)o$Ti1Jo>(_B-m0OHiUa6m?9^#vwJC+D5>HKSC)@s# z-G)zVhXPTS(}qvamzhIzy!`Tf8m4aS#L+XgD@1Buj(8)>7qR(a$n1Ojg{aU7=pOoj-=P&|4Y4pT~aig{C zn1W|g%FmF`NjG| zCaDr2mX>(9Q5?<>vzvrfP{uA1;evE=K|vb7RMIh7GX6xG(IN)4e@1TRQp*svNZd!+K7wPK zwpwhrWWm)IWLk}Orxj%PV|LfJ&wMgRF`MqFz$NS^64QE@A71_lH=!SkZ)V zn*J~=p=6te(bLC`95Z>+G-!|UlQ7yN04vigC%6_syxX*haCpv^RTN6qOaTXT-_) zyGi`MEH`g>mLdwIb`q!oid->y;^h##&0Cr+NKJr9nhT9exb#hq=_#f@!K*$d*Xwqf?7*wnU6e+h`9@?YAT z`pbm0wi)T8r%xX}X53{owp7}$$UZW~z;*%lsyL@zF?&s1-tKp4ud@u7c|b@4b7^^| z__19o+a~k@7>dE}cG3drx$3U&wZdS?#ktGqm?vrWjt4 zq0i7hKu!)HE|YAg*oMBgl^da{lcy{Du!R*+%|JZkSy5e4fQBE6w2C6O6R9FL7w-l7 zOznE4vi;-8D$UU5Av2!1p}AzHHlIoYvf4~-0gDivODj{^E@4)dvE8D3Wr_X~E2VKo zLuH!2M@`bFFtk@JuPk7H6B{e@yL}uJL9jH-g7FJhRN^(RgSXOEmddE_4^Pn}q&eJLKTDq~-X z9r*jTI9!#d{~ba$rE{jJ?vSB>6Mt_5EbJFkI*8uG&4kg3RcC0MSz;bRJ5$@zB9H3L z)SeZ!9rM_S;-Zdu`8%1*^YIxfk(;5-6^lFO=3jrD@|nQ@;*QxMso5#FaE3O&MLim4 znoFkzVt2=EfPIyy>XgH-7X3Pf*#U8Br%3ie)+S*Nk{2!saIij@w1;r z`!4x~zqDX+0tPHTdd&3kSB%wu6{EY<|lLGoIuHFxHHAJ6o zUVSz%6H~h7h*8~A*tKGEx6W*iSlP|u!wbc%?ggMHJE0(nkV||m^E}{YNHR4#`GjQs zL%gGAFs@B@GO_N&Lb2xruK|vxL~aVrF~;QA$IAVDo-9pnE}f~}Ak6NiupDOhJTbI; zKqp;7LtWWB$gUEND7#vubuSc?PV(~WI9_u_uWkW-E~Z7*s(K~q*K^gR>cpTvk4s2X zXa>{9PPu&Sq%mVL#;6n9>+@B$5EV_n8UP_MpGO@TvIlP?3J#x|sC*v-kIB}$_>~G=a)Iyxm z)1RWMOV}KYC$oD6M0HP(ek)*7)k6AhypZ1G^SGV2i*+IH>>1GS;1US2sb`8f&@-3V zgWV+#_KfIv^CDT3u(=$VRU-uT6+ju@TViviXzW$a?ukRKY}Lri#!efj{mC5yQ2WN# zT?#aS_+AiWMufVRYE`lIqaOZL28>^Zpr9@8QGeN5!_DQ1t0 zo_(rvn|RDYfI}%|Rk@Z=h-jZ&{YfBhbDwPSXrD^>OuPFO>QA9ht2R@l*Vg4OZPAw4 zPO+2_i)+Kh8+o461?0&|gP7>#JuSA?X27HRq_(@h31sVI=ZPA-9s9c&Wk>XHd=)Zh zxt+!~i*Ucr$Z=ePdup=@=yBN(W*4z>aLj(m~xs{h$)r`l3Op zVg=q+Q-2JAe~6WXPT+6yrGq*s&vT|WbLpTkH8GW@c0HY$+LeH^ECuFsDwgijfWE~g z-~`<5gG2mnVA2KdwZTdJ9ZHsoLxYp_ccC5Fp!`@w<`X7Xo>3sKIy(SnDiL8US}z|` z&F_`j$<0FfXD}ue?jPdgL&~TJQFTrb%Y@=Hs$g@&{R_pWq5dRk4##RAs9yg*l*lt2 zBedn4o3mh3#ep;0v1i4$p>4&}QXLFJv47sJS0B&c5#Pz@Ot(BFfpAh13^Hw7$LF1DSOFEOmxZtbvk`fAJ}mJ4>n_-uH&{v5B0=MEa4 zqVJIDVsRDTpNI6vT0A&BS$|)qi^T_c|A1G-%aYCv={L!AajHVW$jc_zjnzKn9piPt zB*aJjD#|J*7J^ORer5py8EBY1ZM=+PU4yLl{Euy8%>vUJMvoak=~699S;fIv@>|wk zR)GYl70p=ffXph9;&D){9Tp~0g*$h-ST_tpHGpVw1>P;0Pp+$*4^f#>fZnp26-@29 zu-NAqu97Jd+s@7t_nch`CF7R3@(b&Ab_pM1iBad|k+y+$iBRR{3B50Ve@+>Ev9Ro8 z#W~O;kiv8Fl43L23{cfzwPysOs42A>Ltlmz)(2&HXjLj&+@(k)sM1!UTui2B;szEIuFNvDp6Cs;qee!RBdmvo(%X*LVa(tW$V zAM<_uQ~nwMf`7@s=6~nk@PhsP06)mTjq>mK_xvCHpZo{@BOmY+ANVsr%#ZM2`7iuB z{YHJEzCvH1uhi%3_vkn1f70jatMu#jd-c`&{raEv2lPh$A%or@)E|<059@37NA)9o zgZ`NQxZb2cp+BiVjr3FcOZv19{)xU*-=+Ue|5)Fve~u15)xXle)W6UV=-=wU>c8kW89(cbjGy$y#*g|E z;|G1I@lRbC|In8i-|IIU-|4p)4;ptEj&YlDx3S!~)40!AZQNt5GVV40Z0tpU_Zvs} zBgT;^UvE5V{Kfc~KV@t*o;IE_o-?)@n~Z0T7mb&U=ZzPPSB=+=myI392gYm08^(vm zPGhg}H)EHv+xW=XgRVX|_8XrXUl<3BgT_ANTjMk1J7bn-w&#d3$8)`Bp65Exe9w)Z zMV`f;C7z`o;aTQc=(*Xmz;lb|cF!H2sN=cKbGK)?=T6T(o+EsP=TDydJgYqqcs}O$ zdmi&_@I3Az^fq~(l+V9-Hp=JIo=u)Do@YIO^}OJD&hxzICC@9KmpyNI-t@ff+2+~h zdCT*T=VQ-4&u-5i&tA_bo=-hrc)s#{>G=lz9^v~v-+TVyIpF!$^UtW~2hY!*Upzm0 ze)TkZXL;{1W_#y&X~^rm*L&xC7kKA+7kL+Zmw1yHt+4;yS>Z3 zE4-V%&w5vSS9$;By%&6TpZ9+6TJL)AquvePd%VwiS9`a5*Lk1!{?+?}_f79x-gmt3 zVvP5^?|VP;?)Co78@P?H;i}8%`?p(wBt)h5jZuDJWp8eu7c8Yc)*X(Vvm#xdtrV{n2>{Jc^ znLisfNWO{!{9nOi8E8Vynls);2L5l(*n^Dcg68*z{W;!t725l5X68Q(`v6iqqeb>k zmHZLO2ji(ZH#7UYVrsMyZ*S+@$e>2IA|+DneYeQe3Z&K-*lSd3HBx^L#A>cZYFEI< z=+tf_QnL%}w^c7&kvbTr-lMPL_2zgZl-rvNV;urA``Xf2BY3M7 z-y?NbFqZlisWtJ`oLiWEC@BWkLQ2I)SQbTcXV?Zn)XkkpJr!@b3aP)x%P>j%euuw@wOGIXX2?>k@_Z%gSU}d7>r?LCsLv?8k-L=YTuedDES(1Z^x1PJyKiZ zsb7)0r_i3`NO1A6zb}Xpa3NA#h3tg_aXIqVXWrYNPV6!M~-6FKO*^QL5wXL zZ)Nst@fplR>dts-F;er3V<6v()ZwC7Y6Vg^#cQrcYE``ETBMwKYUgdt-ghe_?p_wf zdj;Nt-585PT9~C_Plwk+beQ>`FQO%bA(pXnu0=Eh;*{1#3$b9()U=?b1p}H5NilbO z^MZFU#-qH}-k~aUqt@OjU&9OyDBCtnulW~Uil1GI_w{-N;hu{-1yIqF;Or1zUR=r= zMe3M>3e{0_H@sChvVrVIoHM2ig4FZI^vAx*_A%#2@Ap}}oSXg7_-jG1=K-*&t?{Tm zFKjkpRuK${lq$8g{-`-G44tq-F!Mnljg*iKM%Zb|TAsx)<ciMWTU=jQ z_!u@YrU3 zINjprZn1pA!~_6_iR&jO1LT`0o^5XQb?4O<`Yq?>R?yriewsKdu(^A^o%wYyGxK4>0U;UDZ&IxvgqA6@Nc(=$Lo6FONF*hXcVl;DLV08lbJ7 zl82p*K~v84uhS!jg$X&uweX;ynKJNFPzDkJtk|z==5q9bQw`nuLhvC`XbztCimL9| zh64$${nF{&!${4d1@{;KyR2@2ypM4+7{S*9XUy}fr_;}b~Y&-kHnHC#rCG{S>nP!w&mYDV)h>^0?@cX{wg3@ zJpM;g13Ug$ob{sDZL)$}K0+!@$0rVcn=Y)VHyJi1)+L%9oSQWWNvoc04XNkPVf5SB z(AGP>=0QE|=e1TFds~+IcZeB;5lLqMCCApx{a%p7U(TOk5e_YDaY;X`F(Mw1nn6J3 zB|7*q#`b7c38)^FZQqBUkGEaZs%@86?Fz+}jj7qxHU=`Dpf8YuepfVJ2IQs8Du~jY zxaB=PSqE#u+e=cO-7+_4%jC3^(yI* zm$MQkuuo3F2aPCazjjt9K(uF8fy5?{Lk(bKnXq*(K~*NW{hZn5#Si=3Y!JInRM^q}Rp_mJOi`DnBRf)!TpW0u#F<{rLFy(wwH>;=hc^1w|w-@zh2qP%1> z@waOw_2e3Ws9rp$DkxjEvA+tLe;4P@8He#V&Dm89&hdhk+zEiOEiVlZPF8e%>bi;u z&C{>&a7Yiwkb}CgJdu!`*~A5fKwjD0GSUvr&JlZOXNbDF)uC31Yga*?X;vHA9saD~ z^=2Gdgzs{`n#a*qgifb88Gv>9n}y+KT-k4HBpFYUWQ0RtglCEg7b5wEFmWx^jDmjA z^%d>pyhC6~A|#Oewzu^ZymAVAt}jd@-u0ooyJGApQs!mn9)PZ>;5o}ke^Y6kf5pl3 zvZKU|r857k2-vf+k7Unsne%!=PL<5rM>)`6)T&zMJe`o!4ZVMsZC{rIsSJbU#9TEH zRWD_2@DZVW@aVt}_G8&9$O(q?~_rILBJj?}f5o5K5HDuIJ*1kqPe4*6;}u=TCC zr`8+e9dg+SSO9jmkmJP6mqf)4-Lac8`i2fb{-PV^OLmEf-t!-4`^8TSC7J^T+)m; zNF0%UQ@GR$n78SX5WhyIX)@yJ8&AMFp(TsT;GE>%)D7=v+|(8Cvu{%Q#l8^8OEq_^ z(#6@LVo@6s%NG3}_Wb*P+xkk}zH%4Kkrr16e)0wZ>c#+Me%|5=l8sP|XiqP$2us-@ zQbEQ295Yoe$&@C+eEVR&%3l0nk?E0a7?5n}gEfx$?6>k_%m?jdukgp1&u8xhmx{V2 zCxey#w4|eCrHJ@`Nj=_1E`28%((AKQV$y31$yU%>N_xYqEpej=luIZ{?EuQTo-k|4 zS`yA?vwGwSPq`!z`n@&Pu|9HRptb-u&*IJkb<;V@RUf z)=uxKRm+@B)A@&TfA38efTNNLzR;kCqwiYg3&XnfXqv4$LCzY>jmzX0Pl4j@`JD$h_!=h)BI>BHoB& z@4n}m|A7*_>wjB`W&F975*zbpV%v2Ku-p3Q|25Th_}{6n4(Z3xTjGt?`RQaY?b%@% z9>k!0_PartokOd0y2|{!r0)dxMn)s5NgKPBX=TT3c=m3lY}fz(c0**l*U<|ZyF55t z=+kw$;33)z$iIS5#o<$RQ@S#d|B0Pa?A=*0UAgi8_Be?6>HU?ZD84~PqAnm_{`PyT_Y?et9$GmE+>N>A){C@=WSmS}; zg6lcQf?FhS^NW<7`_eB_3<(PkH8-#a-S$E*zdJ>ONoZi`z`pvwdB>N+AC>A zeEt(s5E2|K>3g;ihQoR|sikKng&{6lF#nz>izh;NFu8u?waxz!Uwb*F`{t9w zk4A2QJka>^N~CNl@dW;ZMO8+Osgo%vypA!wT7J1rR}uF9Q(~K87=6L1pu}Gt=zL$Y8OZ7z-e;gxiU+ z0P;zA3zw-}=B&yoB%5&xJe8PhghR=;3WXt8Jp4>)5jcp}>R8VrSVL=dTH}@Tt7YE1 z;=nV-#{YycC;aacr8vf1A-UEp=eM#*!17W|OL4@LPh;h{MMg8hYcYaVouG_ei!cT@ z_1rK9p$3M7+bX~qN35{F&lNX3n+mgh+p{O7U{xC+Ux3@ckTTf!EU}&W+(P_4A5gs!h4_V3*FszE0vwO^?LmMVC$*KFM9s;_OBpTT+TN_AAl~~3~~v$-KgB=?tCqS zqT%*+$>{s0=gEsSpTkMi=gEsa;K|3%imSBknBc z{aKP)9I)vo@WNY>CKh4xii6K&iLYO3cZ_}qyzKUSGWAQiygl5!;Gneux9<;w_ucj7 z@YZ8vgOElS+g@%D0Dpe@I{a;X<sr7t>a}CR@bqgg4DAU9ZvSKfFYYYj5jPdX zZKl=h6=jeTK;ZgB^CNPj_AP%myTxgHgYrzx78nQ4`g&D9;0^_y`mS1 zP7nKZ_M2md`Ivbu77s>7XbWqDoO<&s!yWyP+iCQhw*P-JI;8LEHzVoqAXG&=W!UPH z+Ju|i#J6vD9x+$PZWp4#6fSII-wys&dq4<~Zq@3s`-4`d`KnYyCKd>CU&4YdbC&_H z$r8T|-eHnlueEC^g#MMs+$o}ONfVwB8nki{9*SucqMQnZnnyfh%1fjp5G_ANNrBH^ z7m%{qott1WpFJxUBf?rI1K|4XWfUzSCM77XNQjiW+Bf+9+ttJ~2*N6be%srXrKHe# zt!x6Uh7_^e48W$6fqyg+3-z!U@ z(T8F3T*kH6Z+@?s6}|2aXIMIs|7<*D4LW`>A|fMu&dERMIR(1CO;g^KE|&<^RHH`K z5S`yAZ))iK6q8e}NU+#^U4|(5AdR+if>yvvvPu9|b-j7WgC_<3-LZq@$&pA0rAUkV4?=R$$VI2U z*<##xeL_ibG+5kOI~jL5KlmkO>4!x_6TqDBg2}O83|O!Cg@a&Vua!m{)dBm-Vwbpp z9>cF@^>B~fJq_s`S*R}Tk0ac?K`i;OEJD*n#UHi$W(6!OV(uY(a~|ft^)_o@6N7)=DK3m&KyPsr;5}sGZPDbbqh`sXYR^9 zUhlQF=)D}hhtT^?yJi|U_^bf1bs@~~#BXtTX3^h*V)5>i67h3y96$O*;AertPe9?v zdo28Tjd`&FUwgoWfyBND$y_nvOCSF$CM=0F z;jB-}#0mT2cyG58e{F3lbg{OX!A0uGvj=-BGao(Ku$$7`C z*GTo+V-_X|z2(dEVuVJ2V#KGhfo6P_bG!~VQwNpkAV&%Tz9aG3J+0W`;vY*CJ19=r z7pJQCKc=b_fn!s(?|(v3x1WDS(ZCnKjiST9IRALK`A?{MTne?IBq(&;!4fG++ySB; zP0gEj9fLwO>p%Q@qC6^O*d@;L9DKlL>^GwdvB{(?gh@IThq7FA2sL4eRnq8tY?0y6<>en&vaFoTN`T|G`LS}|3@a<4rQlmUYwm|e<}kC z4!4JInRevFq(1i(xjzmSynnmb5(j6{=G zf@JgdaJUS~_}=i%16li#-+J?rC%1*arNe%5JNR3#`2iAgfdeDi!r+!7nb2c9B;!50 z%jj@9%%dUAqw}i43S){ZDeh||Tk5zOEC_)FC(Vg^Sc!82V_jmZ3$>jojKLB)^BH>x z`eaEd>*<`}XPwM^Xd5eEdX{*zH#+M$I}To*kj~OtAokj$5UX@dtxmej`Mu80jK)xF z06O@yUh`H1sBM9W5+s{9HN)gH#kV58;R+0^W@V^?Y`uKy%9=Y5|jg3N3v(3-?1ZV!*?Wl4m(~&jr`{hsOVP}%baX4tBesI-8zH4 zlJMxH%$eV+Y*RwnAuns6*sj_q+YRus;p}$j4j&ttz&9s{Hg2Yaui*f06r?$O(^<)J ztdSpr2WvCO2%9ZMu$47x%1L6=8HTtqz{))oyh(Gcta!IlXONLAaO$&IiaH^qf&A1v z{+RMmooi}oA(#`1575$#N~`272(oEiT(hKHs=p+;s@_U9=O$Pt8J4!pa$c2hzTsfo z6gI_aNM?1}tK{wkq}pgUKB?xlw&!}J@nswF z%f^&ue)&12B`VBozZD51MSG?QN&u7#$u;Co1GnYxASWnD{Di+fm-#?b)A~JwqZpwhL8=; zKn$TT9?1Sl4CARq++@_D`_HUV;sRygU=vQ@Nzl_x<6Y~7-{ zAIN7l?lgW&>pq2UYvVVxPHjClJT*18=Qypq#pfFUCzRS=s+Vu2fUwuLiqc6r)gwu` z(y_gor8{30;V#>5=f|REb+x3JE$ji$CCTNKk38YDmb^jCWJ=~)icKy$p`zo)k6r^j zuW-(_SQ&6~wZ%HK<<7$vvyghjVmH$bq7?LrZS0>iompWvLsctr3L`8fS#H*(+TT(9 z2{KgUiMCitvZ#ZOhqmYhZReU2Q5AYutNCBvkRB84N1UH z5rvWuI=jnQ`*w77soF}jH&95JLP8{NKnE0XfkX~D{`L;1V_Vi$p(EeH1r%%vI$ySB zrvOnM+DWvX)s8h1q9_8%9fSh2oP+IPQI^SGko{r2knXHYW;xEg9avT=C{|1q zdq>BvDBk>$6iKEeFmmirvea}fj9>4LvCx9+%rzQeLSsVUJHDRs(-aMaEk*IK9hyGu z$WA7oF0Y!E(;21sAYQTeP)>S6NF-*j{xegkhVA^mdPj7ODCfcdh^X&HWPkes`e zM1&jW9*7b0)&*#N1~x{_pKeX0U_Zw)DtHDQrW$U7l~S;uLv>&W;IWaY6-4Adz1&08 zBdJ&bK!ab$tW;NnJGXXb1%yN>GRP*eXlGVgBRvRoR8C7lbo(fU^4;UcmduIo++gTZ zwb#JS51dFBR;P$wpf(H)=dmtq4EwW_+ZB?r)2Z#s>DJ7@I{)m>!gQCdox02R0=L>p9MXlla65#cH#yx- zWbHDZAelv-cT?=wVwc&R$tSWC*be936IrAhH!<^}Xn8%|xWgNXdcOUl6m{rR(3WnO zq4}5897^kl6WJTtxcQWBrQ4fvE(g>CSR1&N4sz|PVYp1`gnF>53RR~ZMcCPi*TpRj z7IMoALhVC`r zb~c~S=qTpz2GSgw-amyssk1Fj;xx7`-tXN0vfo|<*t;1m`t_n;T+MRI2C^{wF|jLr z4+RG?&D)$=1KB(Lu*W%n5bJ+3eaQhq1`=Jr{H%jtB|4O@%WA3}!cw@x%Z`)>JvhYD zn;7dk98hv@I-g|$nr8A?tAQiV*7Mj?sdDr^8V&z`tKr!V5@+P=qc6vP zjHmmFcSvH@$iWNPa<;;G@B)~~l@12Ua&}$7e#Jl^T*zklV*_12hHX^?ZIc82&}yJ; zdAj>J^Mu8ExQ;#k+b4JfYbqSa9`mq=oVPAxqsS3R!k(+w>BCuO)38a*gAkT;?qqf* z;3GD5UYyMC*KuURd8&c6E1q4h)cG3lV>l%gq?1Wdxf$@X>1c!Vmj+hN);M1^urQrH zK#>u_CVlKAlT$o}b!Ky$hED-fTnscVn#$@KwCvB*SRXukPG`lW+@WK-NwKe+9#Zj?nbv8x@DeVJA$ewEXCBZ-se_hFPhACMg}balNm zc?~=FmRal;c0-dh3;KkuX?k!rtM-EXcFtpOHCJ5_s~T~hU&D%=q4U`Z!5eYmFWkmT z?w1^JR?cGCPU?+ps*|$-!KO7$GZwJb2D{M-FJ^Dx&H-SjA+dw$ahA+y*E?sdU}5Lp zC2SR2)--S_*4k*Z1!uVeY?(9vZuU_L9URBk5X=b?vlLbsJ|0eum=A#7Rw1qi;;_p$ zXW?=v`c+L&Eyn^Xc)I~`f&`A2z`5O-d>=I5lPlRGbUol6R-1&pr`}_h^T31bsph#Y zqPg7wZuw~qTaT&_J;ZJ$c|GkBv^3UuLMe`2#>ySD4^MIe>)<7>bIc8_kK?Rklknbo z2di@SJc_kQzeihS%!*Z9xnAa@5ruE9%Z&o3@n>c_H?3zWO+Rj6?F|aF;;u2w{e8OC z-F(;+!j}y4m1eqI2KH6y8Y+Fn6H1Dgu1qL>#4Yv5OYco6eZr&s6?E>4S9m~Gz?U#E z_ET;R41kk}?(mN!bn#4c1;iHI3fT3CLw}fJZ}5pQ23!QUg4&r-6PQIi->85g;7Gd_ zp7EzQcQGecqp8bZ*ff?E?_2IT$)-Ut(cbqMPWv?lH?lgNXi43}oo<@B3DTZ~u)W91 zgkU=MOOW{&x3E#5Z2M=~wYnlom9zL~7IZdop648Xo(&>8b7#+|EZj8duk5cpfH;Hd z^46x4Ut;q)yS?e9SJ+yPZmxVi&P$gA1knF>Mn6Y^{Z_@ARoxV1RFN60nXxG_&pBEVzOy@Fy8DluhX!G zWjAH*X83)Md!3?>;ADQ$bnQp%UJ|ADdrADhaNhic%}tnbsAe@c72@fDK? z?t)e&b|FF(jYW72>f?B7q^bAUSjBjNu_PRonGY*?jgR}AHvXN>VIr_ zlen~NY6v0=?K9R9SC;glR^xtPL9hgoO6 z04qh@KO`SFBv*5^+JQjLUZJqOHFR#JlBQNi$yxtaE;4ZkK zjOm*YDUw&no%74h>484Ji+$jf`#Gt_`qO!Vv)<3AV4YKzgiG=}o&HH2w6n~Zk3YET-knx8ltC*~Ia~KT1k!jFVHh09B&?ObI0D!0km5a4}e=oBBcn6e<TdZC9$8zG@gG_BNnLsV7g{$bU08;rM2ku$TN<*2kLrey`W$sBc(emgMBXTSx_V4RE`5^kYCIe1YapjIHa7lxZDZr+KKOJW zGUp+aof2)4%asQpzuku_bEuugL;w$bNo975GwAL{a}&9xrej&}<~hr9dF2qOQ;Lmf z=4L%i-#e2>t>uvbsumiGyH0p!SR5PV^fjxn$NpZkUv6W+C?g$ci_ff3TRfh3LU|k) z>zs@7=&&o$DLcgRXIeJOv(zCZ(2+%jLFYgTr#lUM!@St(5awOdDI1F+;3Nj6?j#rU z%BY+Mu{AzhL;zWG<`g-wC|Mc?AT)hU9_{fhqZe}Q-SDd=6Pjt96f0szgujGds^h)L zAZ54X_R@iPS#{Gbj#b$aunNB%)~6Y>*EzKXJg1hT-UKfolZXU?2$8s_st}1!XGui9 zLx=?3uwuiF0KyC%#@~06b87(~P_6jLgY_X6WZvVj5gpHWxyVT?>#5a%=y$*u4b!zA%&q|V$HNMqMto^Q z?hzzk+Ya9~fBJ)9noB9fk%>}h=1lpP=M9B`s8xgkVu{ zi5jp<4Oo55@m!j=8m}+Z1oc)04~^Ke>R97JhhW<=al95>d7Tp~=2dm5W0>=snX)#{ zPEzjr9+#b(xv6iQn`A#OH#PIpeBz~S=femVXB&&TA1f(yBiP*4T3~l#7jAFtLXyLY zaFA7{+E9pTcE`8)@YX@A?x_)O@z%MgR!DCZyc>PWOup67cXM=VQEuL{{fANOvws8q&yLey_Hz{d7sTnGc0AHIo^UMECz8@-feKzlA5D_vu8tEP zEC9hGW&jI-%JkN|hCU=x!E0fXBojastS&G?ID&-PDzyLqo(TpkCK#rez$HnX35xrj ztrWpvmkkCViwy=#LLQe57AQ9Oy%>wW_p)Wz9A_9HjG49E(xx4F>y zu8g-o9{HDHOYdmOZzliEaMq;;kYshqUmGWX-#GdE6Zt{(!IJ3imm#G_xtcUel-wdN zZ9#)lG!vDgsdIBjsoW7N_iQ(Jn93cja{Icu&;q2YdaGP;m+TkZMSc!64iuPn15>4Q z@FWrY_gv@nZpR}%nmH8G1RTPoDxQ@ZX8>6yrEjFn!$C;YH-kdZEM%UN5c6g-uA2?* zmjTGoO9hM ztveEwwUAL2EUj*ZCIRxP9XVi@hZsm!P}z$WbAV@_4sNq^$j3h*eR+fENV^$$AYx6H z$Aqoi)0MD<)1i3cTZfhrp=$W}E4BOH(h2L_5RuM(}l7xciuky%SFjPXK0G8qLa&`bg1U4IZP=ne2r&?l7evB{DRe zujpLKbD|_Yo0)3A5l`x11EtrZV69uQ#w}PyX=<^8Uhaf-(`j6HczmW&m0}qn;aP|$ z^#{IE1&waO)hd5FKKp5}I*GpEs@ZSjIZ?G6r;0}*wG6o<@Z9PgsN|XTbSj{~s?=9i z>W$O}RH{+A-BfNBQdGBG<(8`40;FiT9F?1)azjYbFhH8UVKb&fSe@fcuHr>H{6A-L z74Mw{Im5LByU}oF-K3{GpI7mccpg`I?K&jnsd^c&LQ2ptNTWEBZfHAKcHqT%i-ARu z)o#R7BQa)nqx=}^E6(~3{DK;~n-lCnC5U8MJUBeQq zZ%01Rx%O+;##zykdz_m(@(~W}#51Ba2KoXE%!NxVJEBjb27?FhVZ0)0U4tOMH6hZb zRO7W+(c=INhKfCNA~@NNE0oYuc)@8Hz*HZ>RZlGpfkzl1j4xagxE>l{M+{OLz+zT@ zeK>yv+JIq9Y9CUfiu<3$rpQ2;lbU;QB|V@1ADAD>r;c9HsB^&Kr;Th6^a-_AotWfG z2c+w6I;=0Zq9%s$56P$d?ij|-z?y*ogrgu449!SjyQowcpp_EU$JYW>*UF~~0SHD@ zB-cJ5A$K8lryc|h*!J}A8vDJ$p zfu@ZhRMSb9WcPTTnZ~qa;0Aa$Z}b97_`Z1*{eeQUIGrC=YP#Zgi(2R@_6%!)qL`4lD@=e^dj3W~B52>E8 zpP^fRvP{&<^3&vOh=%2l8zwT}=UJSs^4?SUdIOS?0eT%u^%l(*3 zzhp9n?-@r=rUHn-Zj77_Kqb_6qtB)w!bF)0BFV3Q$*<0hm*EGz-MOJ1%`FG}a|EzE zJ@rLmwVZcnhdm|Cgq#C8JKdcf;zBKEhY8d8vJx0CHW4#TopQrL)hjS_Zbsjf7YWR_ zureSr00p#-3%qs%FNAZzFL#3t43`~@Wfq8NECW|WPhA$Nq!7~3-&yq3v{6$CIhFU* zsnytkk_+(D1rl?>I_ZqwVSJL9{^3A)Z@!1o{Y=vWruHz%lZ-@_ zp}lZ^d>*!lP+OugKxnLt!bdSxbc$NRWm3|PnKUD^S=y;D^rJi&(?+z66oi#5yCql0 zN_J6-w>U~6KFJ^>ZI#G{1`w*kh8by5!l=2>Ynfnv6Q41U_`_br5pk^F;t_<#4V+`e zfmX6cXj27;Ed|(*Frp#0o@in3$96XfAAuhr@Nv#gIy=M%hz=zsusNI*^n#Okc$DKq z>p7|uc*HPKNi+?J5

!$rkqqler^MH`r27q7m>dZpcxb)9BPhEN~=8!0+i2rv+q( z*bsw4jmc3UjuuJ86q^slI)DL-(4Ir`6=>CvD0QTrf)xHJiBINfGpjyb`Vu-Sx2FznNvDTj?N zQIC~g-$BzL6h13$C}!rN2ZWIx1W-mie1a==5q(Iq2bsFfrbcpxB-3GG`Yg7xM^qtY zNU{%^5Sgiw+#$(+S%D|T$+ zWVjj$P-wbLbU`9JmcVTx3tvW-B@x^RvT|dIDiQ8x!RNPfVmX~exCWPzI*4!&U@c&! z4owch2;xm*fNU?W(+^FiqskeI_g#=N=~QIONn?IkhDcE)a3Wo;9?L8OBL-lk(&{9Z zS=G3pR4JA%U8+LBlxi~runoD*gLIMh;7cO-q|!n?311T6 zbBw;cFdKX=v4^o;2%$rP=;B(e+~VL7h7@oLH9%GZ?pl<@KqI8Vo&s$UXC=WnwMi-n zA1fIO)#tPFZDhx%Fi_HzH&;<~4!pMy3rC>h3o>7fl zN@(m9(%1&rUUF)Zm8zgfOPC&}VkLFbSTEF+Z+b6{R(1jM7SM%HDt#+mwM4Xkf)#}F zf-k5{MS`VBCxSr7)b~)Pg4^&utl;SovDVdbq8g?}s%>hZ>f`r%nhu`CFJkGb0{}A} zdE-#xidUVHefX(WL0bnPG)}naY`H{*6q(z<7zP!zG6u`v)f&!2jWJ6&5@K&ve zIM|8_Jo(zLz)MfoAT#j=Z zNRd;DrwML`1WTFcwW=oKc&Le%_~8Hqi>0R_Z;PQZ@efx2_^l?|XN{R>%OH-1xbQ(( zEW$>3%aiyh)S^M0hbG|nscE}yl3Md4k7)C%I=I2jK+jp&KNhi(RJ$?_nU$JC=>t&LMQY%;@7R`t+J_k%bCNA zqDDz_=GkY+pSa2a;qaS0axhCLMHr(D4NZGR4S*6+iKV%A58B(sSucun$e&#@&_Bh{ zh=303$Mc~ z*>btq^&}B5Ll$bl1Jk9Gi_xUFNp4{!N~LX~1UY}H)H>!c%1u8?ki!^r&cfsoN}qsA zI?>`8*Lv_n*KL_lo?yP^KONtcrk=4-*We6BdUUipEu$2o0&+}3rPt8<0Ma9Iy)XGR7bn+#~N%1`i>6<_Jx;2 z1eEA*?p}>Au^F^F5dd&IXrB`gzZ6_KkP#oq`SnR7D31lkr!`WJ#8k^xBUuPQX><;k z&TA+b&@-az#2l&+Q6Gv6DGdiSO3e|HTFxE&@K|?}_z)Te^6+ab@PgR}qo5OprVnu< z8$X~W2Ovg|PZCV+W>Q0tVbuT}YVuw}6#4)MQwDIK2jii)XD-Cyl>C7_DX3b|UYg-_ z8pzw9sVl`T;i`+!%GSaUJ~2q8A`rY}C~gRqD=rq7iW^jqD{ekYxzb)aBi)J5$kpD> zGwOjE)u|bcaA!24<&4xcUHvU*3SI%0ZyCW04A>CvSR;5|GLt}H5(BVUarU1In-HIO zRbL*&fgCyK^ZN2+=a~^WpT?Y=!Mp$)kP#l&NEBcPvq{AUo~tL12Y#1S(1i6mB%vAO zr(Iy(D0TpoLv7#=Cbm&x!YK5Ke2PqxG(($8IU$v4*)NQgvHIrKHpxhwkELpdb3vRe z$FwTrLW8riL7Tyw0z`6X(iDcQK-;d&lIvNY^W#|FIfO}(Y?1s@7N6z5b_ErA6K*)2dpgVM&c{DbNyb20;8f#IS9~OPYUTzh| z##BYw8Og@2hru?9j1c1sUlMQ%j$vy}T{@LpGE$IS2$ZTKF^X$sAFjZV9ia7}Wayx@ z0@4B_8Y3bI)sW%tg0M>jZ=I}aGP;PuNTb_B(?;ckNZ4n<-E3Q@#bG*ah)JUgMJ@g0 zV_K1zsmy^D!Jb8nSRX~vl#M2fqWvcprPEow(#fcEEy^`#abKDYm;gVdVJH^OWmLp@ z;4GZhO|&js&f-N;inK~rgXQa&O#U7t&V_XW`{h_z0ddk^U=l15kY&-jB7)172K{0r z<$%k`A;X)A#Wn*d+4C8r4s3bdrVnc$&%I738yhzvbQQ}XC^+9V7`;6&mipLCq6 z&_?-F)dKM|-SwxsER*M3BXkT`I#rQQRu@Sl9D6k)J*-M16p@dDeaH)id(p!m?urjea)(p!gB~K~RJwSeFk>ThawTXF%SHM1V*714&Nx zR9xs9a+;BxM#O-FBR7PbdFNaNm~f_6b-+nz;YyNQD3>J4bEIC?*|ONc4l>62gsO*)Y~?!cZw>%b_f=WFYFv$p$S_QN&SJB~}w1!qrY~ zCB7}w_ygjn$U;mxTtyBBkR-hyxkW-Ln2ghsQ$oy{lFuVf?fHD|Ef;Wa6gvciDPn^v z2+V5~wF`Tc`1#SsgMbz+0G3cBhvcb8q_~=Kc0}WJD|G^Wo&&q2Vfx;-G#a$`N=>X3 ziks25^RRnSZ?h>%Y)ycN0C6;?Er4TE!4b*lQVGdO0zyxe2!s)GW>y+L;ufkuQ0s*g|s>SM1BqAxo-_Q0Sgd6FRq;R>WzhO*Da|%>yIg>=K7MNC>|mHG}q~H7n&`l19>& zFx|XVkr5Y=TB;`IhWjJVQxlYlOK%x|X(p2mVQvwFIc5ZgG6^_EMP>XU(jdEZ~#2+W(ov~0t=Po zEJ3=k=D=nOphVDAEzDs7<-&XjT(OXfrMe4q)S}%2wJ@hO2Kh_0g$)9=D5DX`gC*XF z6(&fWi>C075fm8z>CiE4CoMCa!sdZnmr(C=*kpnznKtG3v54Q<_ z;JRwjV7LseJ5U&<>fcunhTEccHLNMjGz|B#jz%$mlc&J{k{( z4~5GI)6>9r;BgKk6sDgS$iV-FmKi|?uoR}!2)s|I$gNC0SGms(aK5Y}_>suQM@GVF z&XN+nqcHzyM0HYt5kQh>m0N{~iNW{mgi|^?;%oK9XD6csIq+UcDN{}#l><+V)H>x* zYn+<_6Un5Fq}15DOrApZsnjo%rve*|eZY3PNJcgCyyUA4boGPoqI?aW7jxgbipXip zu(O%urhAFV>0o?St((;mJD@j*`%?T%g!=<0*$^+nhJ|flxK8DK6$>YU7(HM`yMa-9 zfq`qlK3%~h9Xf`)pb38b8SZx)(6dc49-4>L4)FhB?M(o5s{a4+=iYPfES?!IGh-Gr zJhNahm|?70<`G%4q;+XD&4TifK za0BC%O3lfFbuqS$;T|PGP!t-ADKK>v8mN;{*$^{@BKuvU$p6va>?+zDlodFm_V$n} zM=j7yB^UVnX0}kxjB25jK>Y?{J+z?d8;tnMBM^Uy;pHh#Nv$xfYI5N$t)?fejyl=_ zI!Vv+w2ekO=dAeBum5j9qc89;p&27fc1#9#=PZ#`xy@S zL}^hVFxcKqt-@Bwp;&odlCXDZfrPLfWG{S>5JY?Oopy3`bEH+oEPu3~nc4viZ>yQ9 z9dX>g`OGP)*;r#tiJE94CPVTum^ADz%2=Hn8^)r41zJEPtPhnpftWCVH`;JoUAFF5dnYMyk;`=}MlZ+zhOF!^5Q7lI z+(fh@7-IYcLrxGta#mn+X!spw433+El83ffa{}-Z0`c4Qqj3WOEI2>TN(D#!rq2L5 zt49g>xGs(Dog$*(Zv>dbNg1OS5vOE2IV{*B$CQg#Da3w?0}0ftxNm>G3{b4>b|Jq4 zDYa_Zx`!nO{y1l>bR1~%rk*xnf;}CJJRKmVXb+CLXl7cDeNJA!wawG5c)&U$yfso4 zd0HW!`D0JcES7Dwnvs&)1f!^WUBem7V8d(B)pwXpE;VF#{@;d-DJ}nyDFD#|QZyb7 zYCQwU{vQwCP!?SPSJ(cZ1L!2Wgq5d(DklV}dIG3=RRpSDJwu@?2T;{(R$2~2 zRcf0`0~#IzRQ~nZKDa*HD+GS2@x6GBs1@g5BW(iXt7N8XZL*bKaD3sDPOVK&=?0*o zjR3S9aAG0t3ir3GO|V^U7;kuIhOMd<9DG!(5C+4ZAMO-fspSCJRaNEaf%h-mi{qef zs<`e#n)3JS?tctN5ZwOPaAJ=JQl4d`M1kpDeyQ39VCxKYSQzHneVal*$X7s8MwC&9P z?HAQ|G1^uYDIj#>G!QB^4QS%VN@xr%J2rG?6PWJDON83XKmy0G#HDrkThHPa~FcssrI5xzT9>vnH7q;i*SS z514gss;MNHjK{bn;i(CyL`xN}aS7$K-NIU|H_Xfc}#qj8uP7KzZyBh1X2;DbV1 z2e2l)m6=cr4Fl1Zin1`!Y|m1Y_WuX=p~|&x?Wjolp@o>9%a8|-tH?-WPidO>g1H0M z#uK9;SYjXoQwq9|<5noceK+;K#%!QA!?+bHd^JpE;6)mY2aFX!9am44wPSJMOc$qG zpiUXODfK}!E>*Pval3GG5mliI@V}}VdqOK1`=D7pAIbI_m>5+$bQo#|nUTZ65tcVX zIH~+C>{Yd)M2scum3f?0Ry`G7DDr}58aYO%#5#EhM6|91e%06=C5U7^OAYXs?#z61 zz5&G<0*cT_z!ZyQ0isNfGo*qF25>==!!|K&c&Gr3fv5>M2^M#!RUeLE1rP{MQyiFM z5sRGFkczXU)zEAmnyHLy;HYxAr}O2meCE8ndb(jN23HN*sJo{L80fUDq8T{3F%wZe zm}0sD5)K4FSCv)d=>!#s2b(wSj2XNzv@mLBq&D2s1?fCqj=ww*&z3uo+MUU{^lo>+!PaHM9k)ph{}uycQ#Dg8WVR?} z43sLWq*Rz!Kp)^t3l1s5c1WG*LEs3yYSVjgqa&b{ChDBXi_|Nd%~l79W^ch4fGOagsC-+wkVlmZX=@nQkO1y5eaT^LmsDdXigRcR5S7)3M1^DGgU{bJl)TH>=PGC~<_ozv! zxO^B8|8DtUo=~1sKNgk0eydXbr3O%f0#(&c41gcl+i9SS^ycfyfx-miu0b5f{}~_| zlCOv4gsjPvkpLwwYfW3SRCMAH5P+RWb4|zULv__XT2!EP$u>eonsJK4h*yK zs@6_q=-R=t7<8jwbUY&**1w|2Ee4-j!Ls$Q9vz5DF^B8r!AqLKyH7OKw+!ll|5!i# zJIlRKbRti;6KATm5zA{M7NSKlyqX4l>_~~cTfEEKsvY^ZJvEGF3OKTbHx{+2b7;1= z9Fj^LC$yhquh{(H{Rez&H9Yy)0DShc7fsWfVfO&4f!LfSlF@b#CPw&My+UK7#2I!E z7QgY4GJZf(!-NkOaQJwGcU z1`iYD`1}nbAc94#^}PwBJsDnm^aGv--U$3{_yEes*~L-lqLM;I1Mx#ni%kw9{Cvhv z5#DnbE?htg=vGq`1n5=`;}JkX+#4J;^U4Q8J|aRtqC!9H(2v;AkA%>VWdBFLlH>@S zVTl-yvxZvp;$gGiKr@_rF<3B>f{YYkfMu=m89D?DG#&(=9?ZNNnshI`#(6yHb+iSD zKGzA#B;AdJrO3`_P966rbQP>}sd<5!lkdUUrpDpyrJ}y{309XnuBct;t2;Ls+f;HV zUrV{ieDO-J3FecK5CeeFWnMQ1_M22jsvH1q7ZX@6Iy!+Bva3aP`uH0Y_x;js z*NLRmLt*ar>~YAYd#O*=yBL%qcvHUmIGG9ebLLa#Q0o+v@8q2i;qVhrnN5wCY4uZP zJvc(%`;^%-;Axh9+*NzpY*2^cQYtrnjB-r&y{*VSPH-g>csPNo4aR2N|8Zz3H(K(W zuwSO>Pn+z#dhil6K}h)ED}P$K$m8!YmE#co^t9Q%I!cC7iLwTPJt7s(#w_0Yj2YGt zH83%aNQgL5vNW&}tKEKBWU zotuVoc)^C0W2tiLPBfF^*wZ1ytcOo3ql1_>+vn>u(Y(?yUZOdZ%-*$Ep*+SHurC2* zqtiW5=xX|7lGzZWnm*aggbT*rli>z&EsdFMHZs=vmQ6O3;BJ=6pEbL}JEk?o9Hzh0 zeAB0xc?O*4YO6xH*zgwn4n1e~s}x2E8%ZmtnH@Wyoy{j+(K>ak9QCVnuqUewEm7x+ zkrvlg^8$;oPf-0rv%PV`H@MKe-N5|snr>ci{6TeQmH*|qLOnZ{TfPQ@WA#tTDJm`wu6({0bE!dY;txRy4~GP@a@>GxS? z!;H0ImHqe41(Zv7b_?HI0x+^4cE*zlZ|oo=4`WG{FX4R zxd5xqF>z!y018fF9vIPBB* zINF6Y@!Pn3eG@vKmCCmOxbekigOqJy?j~rr|`jpAuXKUbA54Vd0B>v%LV#Lg(cB|T6i9SjW@a%qVm!w@BUS*Ni85=~1rG4z4{(t@)2a%Xfep9e zw)6g_0L<^GXsMZ&45zxxR${&@AQ+90JA7;=CaWz*N7~FOg6`0J3u;j=;KNk8hsaZ^ z{eNoYNcWeTsj;Cbk#Up2@*rcE8LNHB>jD%m{IK-jbTQoNA{8w&2N}h5b{VkOMoNEP z^{o5za4h~E-SNDcW2_{4-fV5mr?;OslR|4vVNa)g8IpGGs(J=s(ON$jT*<~s-X*Ec za8Qq*ema@2R#YO`ZQ zB}IUF9yW9MfN*Tiw0W+Bs@d7Yue5QsIUITFtwGjBbo(0fLL7VAz_juX9vnLQVVj7H zR^){Nh=ZT>aQa}a*(|?U;X25r{Wt@wl*20fJXQ2jB|oPeRyiHx&dOo)s;Gm*kd9K; znXSlN2g~{W>&(R3yNV3urFEfj-{i*=3k6Mo%}mYIH$NaWc=Ln$@ZbEPK5+8`^;mCS zYcCR^7`#N1ce5EwvMg(%WTbZG3^^z}la^ z!E9rkyhQfm4gT!78*hV|pvy?1*cVN{k*#t;adhvCX6pqQ8W+wf1(MCBD+iQe-DV%$4Fq>5xPkoObXe5Q| zKmh%Yy~3fFKt)7o;B>~7Zg|P8pEeH_R33=eLk8mY|6c~;R7i=Z{w-)>AmVAn%K)PJ z^ei6cf-ncLUN)D-`Dbs3436~-_H~54QQB$h+Iy1-45s+&|H0KC?&Xo!Bvx z5T(fy<`|ii2bKu8IV!NT?!d>hhH2zW|);Xviir-_6W~4p=}ZHvwdKQS>Wj zLL|0reAw9Bo4sPzx6VuNxmI-JD`pFhVG0&8GhZ>&otVw9m|4-F08DI_ke~2AfA$q~ zdZfw+VPFwuziQ^t_E*h}kT70^vp1VFokEH?n@bh;`-Sqh;JmH&V1rY6*h}>$?59k% zhZe+$$}uM$>eS1vbn&k0&vVuv1LCh@%w9$3!mtV3tUCdbnqZ;rhnq? z0|=FUP`sb=x0@}EceNw#cY$jv7xJEtdasJ8_f=H-`zosPNPQeKF(0dm`RAL<_;T|W z@u76nTibEWt=bN=FtF?=h7>zd72EOO&3DCZc!%nOv4hfHGj9U?J-XFw{m1$?d zM#&)@OPr$ofH5>mHh?^Y{jK7$wV4-FSTTyveqyI4utMm@n2YJg?`H2Z)h(lbvQtrw zIlC%T*D02weQC}vvj9X{((B+IpQP(vH($jbY42A1Z0Fr(JA6I5+q@2scXZ%iyOFYt z+Pwj`ql}(-L#15v2GDOA?R$fFWIFMNnTreMN3BQ@E>MPT_n7@dI}?tuWqZtzaQ(*P z|24Cif5x*OUG}ya>3jE0Gu$w~^nLOctlE&`^j@6;&w4(jsAgCSBT=t+P}e7P$2;a_ z#+S7C9dmGvGLgh&Db64j zFFpf{fGrWSDVKf9_x*k#8MH3$J=Mvs?TsW%?-|hp8FeV?*X+4$KC)SUkh? z4P;(MyWck(FkgyI#<0JZ;6=bFID};gYs)iG{{ypuRm2!oA@O=sn3acU!E07VyQM18 zgb%>>FZQkbz&vc!`W{$2rRW z8XFulgviE!G0ZB6-z2{o_NU=)ck-pOB9_K{2J&{`0doTcCiW+08)2LvJp0hBgV6t- zpdp`|C&Rvja35CyUVF%VPe;f3Ivh4TSzwmNd}V%*u;E{uA9FGb$+{m?G%8;X(G)Bb zx4uU}j>nE7D|z39G{KSQ9X(;DWHFQFa$ot+bEv!6T&URk#vI6-qw-7*pr)EWhmRtTW@bsGJx*)U!^ zrR2#;1;7H{9U)8eZX&6L>J$dU&D4|qv&n-}QMk$3|3M3@OokEQ0z1;1-(Wdu@o9z= zR-u0^@V%%KC#B`GT`qT+%X_5AaL;!-%e*cROgX*uokDjz)`=8~KB>5ddMC{mcKJm` zo-|XODLF(>oiyher+lfW%yCA_1dxPa;Q087@&u?rRvEuV+7oE|_ey5i=(Kr@oGPLu zO_y*MI`1@usuO7aX~^)(=+JbLO!?n{5Ndh`;|2?10B#XU#_OOqBhKrYVUq zV7U-FlnA?+I{j=mLBYd+RzLW>S{C#InT>l=hLpp; zVfoq(_=e3iyN19rmID?jSCxgwxh&fDo8m$_J238<->@CwvWFA68v&v}f7&Rd)mLz! zxY#r$kOm|`YN)jojJ)(70TT$F4R>|k{yU_nH0XRlDS!$lpI2Kf%l`58dg#~eKLb%0 zYY+Ickc(jd;$+;&i;|(wZkCqYPw^IKe@;FBG&?A8qDg<6d4TXY|HQ_De*gTJ+9ES9 zm>F>lK5)>%QWcPTu@2_JEp`c3HSQw4`zMqY&s{M4Mh79!uusy73+8BJ!mNQJ9e>A( zLB@`kj*83p(l0E4delLRX~sO-D@7CBGj~pkrjTeYx|)*L*R4^dFS|EvXBI! zN5e!5aD}nqViHTC`4A;TIa68TxF;(uoWF4T4^rsO;TYHPs5O?p4HtDG7K@C)M14nD z5#nl;oF5_L>?#MTN{mzGs8^Yif$gG!4`8-E=L48cGG?0{DVWe=C{W+jDH!0^s1K;@ zL=jzx1eJ0IH^duzD5IKa;wgn?lNK|X?r@&dRZ`FGDyipoWHqq^Gn(TTR~RvCH5UoY z<%N+F3q;rYCP#_BhIIyLvM2S=k}=iSOX!9{fwaYjaH1*w6)lpDQmRv3Ofojm4>d$8 z?XE5cn&*nBZ{l@x7%Av-!|WHS#1<`L53=`Y4%6vVU2g1B$86Cse?>DjsJf#d20+fJv+#W15X5)k zZYG{IgQ)}36dwoTh&6RkPr2N6SyhDkRTjK}wD~xkv*YDpIG3!*4C#UvgPB6_ey2{1 ze}@UPl+`uxL}){>nh-e!ac;;DW})%$;pKkb;Mu^n7aCL8w0*Kns9D@x^}rho^&wm_ z*^B6hn&P;zlRl{>uB)|3z?#GbDxuWD=#bp{NGIRfK;f4nGiWFwIY z;!*RwqzMUPEBe?aQ8eT>B#I0?rX`B>8fdD;=Lk?tCKtOSQML9|qPRA15f7ouHSj-b zEcpe;KHT2W)-$2ctry&Sh;Wbr_E;D_^lA-_OA=)b&v9o#>md;Cc`))b(2w(S3L1Sa zrU}%yDuZsSBXXQ(PpcyuB{1%SD`>9+SgickWH+{~q!ui~=RFI5-F*YJ6TF?P-RqM1 znuO$IQVif-4DhbQ>tV%Z3W8a&!lcwDx-D6BhyZ&4ShA{t=Ha;2$+X|K=+hLD+-{$Mp_DShL#eosIk09ybbZ3s zML-K!&evfT8Q$Vr-v6qbolN^J`Xoi9ppAJgLOq*jm0qN^73r~(ARlSG^aUr zvA31d8+FAE7@~Uh#Ji17IQSqlKtDN@h|UIB%?%+|8tTbhVpXEHIWgv@B0mt=Cc%Fu=B8G@A| zA7+UA^;a6*T_0k@MZU@P#TUH8zuR1-(X>V!MrDnVdI$a7NIZj>v5iF@0=G35W1-IO z&_whH{WG|7nq)yURq4@Y;Lu@V@1}(_q`oa^yYh_5v#CEE*VVe9Jq7PT{a>2s@mo!os|wzQM?*X&3PgKNBt&*Yfke%SCA# zYm^EMEGvCM3fMEl;lHLBA#hM%!2uJkqmh;~-H+!PkkY_(ndajT3izR`ND3y!W}%V} z#`6f0qMA(eo+?WP#!*SH!V`{!b*VTiuLx@{6(o;CHFtHA=HZz)LKoUQq|ji>Tqk8V zp76@5TH2w?GDE0q=08;fW!j2x!MstXyAys+y! zzQb%2{n<@qTAOC^YvU_KgL*u48EDTYy@1$dvl^D{Dto|}Md-4WbA6Q(N9)z7FkkE} z&%ew{%Tu||tGqk`?UCI@7r8*BR_9~6nN;w$l)f?DMQy_<_RZ)aX7Dw$1N&kDb?+k{ zU{M1W1;45SiIh&UIo-EAIk!KQY#>vci15l((3M0mh$w2Jws(=d^|+ zT2MQR0pd^|kBJEN=+I=HHWpv!FiN)mWWfgnTFxeLLJuG3W=87-a!+6=Mxh0Ga`+>j zL<}AxM(gnVb@1Kz+C%-W5^?dH5P7YRyh=y*z}E^IbCqagp39+)SBZZ4PEDX()1>As zafzJ6gTilmm<~g|dB_V_mwrz51H4A)$gl7ksbA0HwVHlqSMzT5nrW5;&;<&}G-3Lx zELTCnrm~AIda^%OJG`}xRovmx{$MH8S3+Z#7q*n3vJAcBa^K5&49=lje47dv=0N-O z+f?p>S7T3yto3Te`pvmoq&Ove0;_8xm*5}HOta8m!Vk#9*RLWL^*n-yGqjl)aHkgL zS?ejzOs7&qjm7{EDCY_aY*nJjV3R=-dYy^LGzW*46cJ3M<^?5T?Xw@|0KJh=&*62s zQ6a#^{@gDWF2XgE5J8lW2znH@=#z44uAS%n^DhkASMO~DPt^MA)LctKT zet{kPM`y=Ac|G>805ja<2627xYd?P#_!;FJZw&o9!e6KSad+Po8h7R; z2qe-0j|2k(x$>_I8U$Ky1k-B**vft zDw)ng&G(17BQY9GrQ6P1dsi$IsC!A?B_0Hu^VnS=NEXrJyF^-zMWQG*9M;BBpn6yt z{oY+-h~_eU?d}GL4hD6=Fmbc7)aM%}78%A;x?zM!HFo+Q9RcfL^JFX9a*r5j5GCC! z>NZ{zUW5UbIKv6XrwF`@Su_I$gQhdwidRa7i8bhWP(4HL6$N4ESUYx(PTVU}Am;G;1dJ$1_sgf<8PxQrw5fcOylHVw@rX&iWEctY1Hcp%|x#DjBCx!lcT4 zEkp7-lluWC_b6Kk7-M-p0Dg)sV9JBpf+H=c{CjS}4wbS&sJ|AglT zabr@oOn>8+(Ed@Pqp{3a{Q=Qj#vMde@oLt+FiBQm?k(_L{g7B|z!KAVL_8GtRWJ!_ zb$BJfQSX#T!1!*WUXMZ&w2|gKDq7>Q|51?`ryK#FX~|&6o;@J6aKRe%uSdmXAj(OP zi7aG$`7z*^jTAjbW$QXdT#2v3F(L<#*T#V5ff#j+=#;ddi*aA20bSp<22nf*((s99 zvvf>Gl)q=d)7M-oVV#Nzd7L}@)6(2wGB*mjyHp6dK_fD@Kk(|_xX>HD58VD-s3`ha387ms!&4UCUyFl3Gy!b!@oCfSFYX@&Zu3EC7jh)&~ z2whth5l(GjvD}?QYGYvF+DfSN6QV;*u(sX)+Gy$%KoVuN^@)qm(0J~CIh`sH`7Kz_k0JJ!@}U$qes$S82qPB!Fubb~ zuLEe|IMFml7XyIPW5HA&O`9d-EZkiO3B&M${LV<`h z7ou2n^Eo{`9$Qlx{V`rKx1A@5W)?nAKMT&FaFU-hz@0118PuDsI0F^AXR;WLgwWt5 z(@oEcSvu2ff6$UCiV<)8oG3!j_UD8T4}7K3oT=gw9aN8Urir=NeIjePS&8p=6F`ocnZZ8%+_E} zrGCd{9E~dk^RtkO3q@c5JgWoC&J05!8JuBg#DX6v*FH@N(?v7CGiQCBI4znXEE+al zjRUj|OD~Ro6dhH1h_*Au1iWvZDT=BoUdsZM!Qjp#Ys36q%yS19-dhwuOTj?&ahX6@ z&r*wT+$^Xp7Se`UqOY zP#eyx!rlkD7eJrIhS*u57q-6>?kv4V0a?$^7EMh3Opjn)Id=OAzAtBse%QZ#EsI4B z6Pw@VbHx=b{CIY*7{*)bFKkD823zDj(TBIsk+2tK`3Af&VNlo5;(1~)Ok&LWVska@ zs(Rm^N%zka9y&f>ROdXu&KKzk*pXRuj9lmiNPxEH-EL2!y_;Gr5IwoZu?xg_N8Az) zaSK&jD6WLT8qzCL;MRqrk-uUVi%wt275jdKfvS-S>OlaAaHR{btU?}K#Er*H3`8O% zyZq-y{+>yL7ouI=N<_+~+w)k7xGb>!>x+p0{q|pFzUT_uKjkeJZHy1-k;Nd5%IKrT zA`f5jO8_Qi)MJTwj$t1vS=t^3*gvyG!~%S*rPw~dqW(+86TAm66}2PBL46GADUK(c zUJ8ETNlGeJYk7UCq6`n0in~x?_hq6H@{d|3hT!XiWe}^C(bdmmhh9ke&kN;V3X?}a zEEh2XEEv7^JXCRI1QmD^by%({@4pR*g*a|Dv!|uhZFtc$_aSR%`e&)$aThZys@vh_tuKuNKkK`$kOLL{PKI3Lf(V>RqMb{X z!=yRMFUmwt(#G&^8lkfKG1btb9UxMBqp#@(F~)?M`pS)BJsvl|Bzg}&_nJ#NtYZZO zA5mdHSl$yl(5;lKm$&+TYKI~qxzMi#3gJ$fZMaJeU~gQZYU30-&nVzpFx9W@y0RF7 zGwpA9Cy@QJsO_9dX!5eCr)=PUrG77qW+94QL+d*s^;grm#L`s3f|tcAG`Xiw++acS zi6aWjd|<{-(Q%)6#wqkan_xf0hIPOC=5B&~iH)ciH%z}-E|ei!B?tT zi>c0LAe_b2bF-L($CsP2To+T+7H}hr>CG(w*Tr;Z3)q*%v}h~1)y1@Xs~860&E6&k z4OAv5d`@3W@UVuty?ffICCLs*m1LHsqyAH%uv=hEUlZzC;8WEcUi!=iZbCM!B(~nt z_9G{^iKIwB#MYqZt3^GV%f4tmUMv#gvMx#%5bjKN=5NV%aT~fK%SF@pi8==`qs9^H zv?3^^PA6nivTB51-v%rKQh+gnmOHZ~GH8!A-eAhhFPgRS_W!Nq2L1uy^*2T6!ZBis zFlN4_0FCh$Q{IjM*3?2c$Za3pA=rM1F=<6I`M~Vg{8Vy+0G6cO*Ay|uDIL)#<4i`# zZPj>SH((P2O*Asv)b>G`K#dcoTiiScqpWB{W$R&AHDIS`<=_?O2OYdpMQoMQq$;Pd z%9K^YL?ex{u*zUf@6Oh%EWkQ;#VW%f=HYRG`tK5Hd`krek~zp?h7O=6<{){V^He%* zFnPd%63DeR@Y>)bls#lsF%J7xiU#!74XCip&#A)H2AoVk?gB~VU-3Eyb^n_cUu7nz zmAvAW5_vUkdtD?dtqbp(7z2Q)CIKMnZ>#sRDfG+hkVBMFx7{Mw$VP&V=73t?1!a2Km~{&(IIZBcZ@UePRGTMJ*T*zdDfDK+liE546c z_RlrE@UsvL-)X$GZBGrB z`=IZOeSCgYo86;al=s`)qJdX6i2b!8)5T?5+yQnkWOY%RdcB_U8g%ght8iW%Tr6(U1q9jo%;V8#?eTFti~e?K&*jmjA+Gh~O6ba*l|* zOjv2n`2ySsH1c04Hr4zRk!6(orK)wnmm(Km)4zlezv9+Wqpwl$LAvd0kvl-2!cdHFgyP!aEP=UT|H(o1fs=!L zat^#CtO*O?+=T70EE`8}v*Eo;%_nNsT(kaD2wOlMO?0{KA>Vi5X^AVhcY_zop>>Ry_Fiv*HC+E!!i<1nGxR> zIef34go*)!b?lUaiTLl8Ama*tETjj&7cH1Wg)bZWAsNQY<=+ddHVKc2;A5Ng*k8ws6HtAjDpe5XT%I{2$=twWk1E! z_h*!#2Eh$!?hk4OK7JO4qz!)*H(>#e`w>-@QQ41T1|ElgM$GL$DPBkAh(4>H@060;%4dJSc1VO~enuBKnl8WSeycvojP>GUgfbr?)NE&!5{8E0c; zO{HNRd zK)yr23h4(pWCM7dI`=nt1Q6GNzCEm%UVvQ+B_Clifv@;C7~3#90^FjJx|q6=_p^(6 z0Nq00)qjYZDgn+vp`%D}-+7^Zknrgl_Tr`83h|C_HFdG~mq>fPZ{vCR+`@F6`BTAT z>R&wnv)+;EIMsx5Y0O_hn`LyrkV%PwG3N~h%ZoM9dWZ%YlCc=0tTe24gZ)85SmsR_ z!5bM4)Ik8LQZj6tl=H2qO?@wb-YTP!7gWV17ewC%TB=+@hUbS&C4zPsNovH54+dBTv_GKbE0yP9ma zMW+pU722FWnXeSa1&r)R~MgsYFU_iWF^0w#4dh$r57{m>O3dFs5cVY^b@c8iY?1xvuAEs9QRl12(M^wO`C}%eAP! zN0e-)z0=rGapH1l`&+)xk>N(&^%Rj7p~(W2t1z9Y0W|hvl&r7OpAHOj$b(;_2-{o~|xi8!!2`R+m>B#%iB!%PaxcGaX~(dSe-VA0v6E%#4+15t$Mv7czWr zsVzHU$NZzV++ytUZHkw-n=qG7PLhog**!^KrqBJbOeoOWn?_)3zbjjX=1I&wHa zlT&1ME(+ht)V;3!UQ4!NqN-doY6X zq6*7ag`ucysC3kjaGQ#o%Jx-Nty8P2x&Nx_b4}$y^FTYgZKrHl4J<3u*Knpm-dqT^ z7c>KN2AxPVnFlcYshMo%IHI!JyE0(D3yL{JUcsE*0rEnVjl?Ya02Uv?4{dOz1tHi% z-4(?g|07!)-kSYlM{wjgk?w8-h6YTKvJxx;9`I<6JXs5**;epGI~tq~Yw{pxzKf=0 z%gp{K+9~!6!dkVNyKI>IDZ}V0BA6H4W13Rw{+WV=go$ZI7R(g3*Mg@4vU21t=;CcT z^0S0MC}I`U6>62xI7Gcri7DiKD!pI2%=SdhFjPup_+QNwhPjCa`Q8lgyRqID>XKhH z1h=d6rflz_BQ4}!$45X}OBs{$3CM7!%CUc98&sT<@)4y^>K<(=W5YjSAl@%&oB)AX zBUiGhzeBEMO~jqK*i6>)?Yu16W`+~oODuFfWi*EqE~MSLK%HguXRf@R``=2oQnasj z?WDZRB{+w|R=1KVjd>m=-(v!eL`7s&W$#-CWH500;yxoxfoWg|FBPZ$ZcH|B1q1Lb zp}f|zZR92lCc{7pjcYCM@M|L3z812?5EUc_JV>=dfQooW40}{TgkR*EY{Nk00x_@Fij;{%%S(j+g@1YDow(T zAxGVi_0_gA16f(V5mYxD?PNwPfT&V8$BwYybEL@c`9VUdn`1{n-5dz|E)o}sMNwh8 zXg>QD+(A;2wa=4Hc<&7;h70l(9+{OVA43oOcadq- z!YfDXJ&$c)`9fma>6OpvXk``4XC|B&dAVF%l~T6Cbow>4wC{51iQWs^wZMQX7AWH& z{eHPjPKLD%?&IZ2i13~OjC6oDQk|2EfDLPluGr~I>7K5Tu9VSpU1c|;gx>E8I4B{I zQ><6pafM9r-PBE1Gg!flEg6DoNi|=UF;sAcY+0SDco&AII=D2f5+wiAR$=V=(l79R zySu`R-*lHLC^@_b)>@e_r-y85G~=|;kFprap>Lssc1|Q>-~)mVxC~`RZAMRd#L*l) z+)EzT#3c?G(Yr0-({J>ZvNTHhm|$8Eys|H&x5OF#GRo?ssD=CcfVhK)p1#*WIDl<(a2@>T<%H{2+f;q%WMWitt4 z3sz9we4_?RC?U(J&mg%%!v`ir!$+;ba$=;OIJP>@y-f~4LKZtG={*8x=Vmy9#wwFJ ziZyMx=g6B+v}bv9e-y+z&=65`#fWr`jiyHOr&Evz?OcW25TBI9Z0Fj+q!p!~)WP`-Y*e4knmku_CxtpKwA3dkBu z?&NGbGE62`huSQ{dlqMoGO_3mQ221bdnx4%SF7ym;aFt{sCYP5*#UZgIIl9FF+w(E z0BCfN>{p#-FTA9p^pZkc3N5`y9&t?M!-MMzXfr|Zc&xn_E9(I5y;rTQU+%@qisNE% zT83Aa(tg5a4G8VUO^p~xJ=9{lVWhkhm2Mje3Ll2~_sf^`S9|I+O0s4cK_kO)?hi!M zNnhpz5))hIYx*B~r30)t(z~NEWl&*1C`%)CkC`0W_n^E9p&?KTMc_0CN~=ufKpgh1O0$PzNpvb)NFvh-=nm(fD zrSBuMU+hUBS2pDW%47)9r@PA@!QdXEcOH>xk-8ArsL=0^1o{|gyrx`!cc5kbqw+SG zmwx>y4!e@j7yj}g3?5Bt{g`YS#i4wuowVmG9cN2g@fe8WGWzi`$%pNGj*-m-mJRDa z(`msNnE>?p@)*o+8GVa5&?AYD%c1cl9TX+SM?usko8@e>4n4Z=@xaPJKSGSpgVd?g zQy2IL@;nBzw>nr`fiGB3H;lztmC~9gKLTM3pT`E4%2TWr{0D0)_=o`<0sz_NJRt~I-*9)Wo)d7OHi9uE zxOw;Tpz`qpj@RVSetwt4t;tInagi(tlJP3!wdkz*lRHJFeD#MRqxp zf(^xS453f~%nlF%yuc_y5h-e%9g|b=E7$#BvUl+BIE=iU27GX-25{g0cLV-ic1%f- z#{|b`X^s!Z2^M!%+H>grr)9@3Rmc?mRHu?DR-i{+O%EyJKXed z%7GONw*Zb3Sg@fA#8lv%7KcOoh(P=gZkPldCLDi8_DNOdB+91(Vmn~33t|4WsmXN{ zrM6P*!Tb!9t(Pojz@>}f$rdid zJ>JwXgW_OPtjjCrmkFITWp&m8g<}62FAZJeL5whkGkt(e>ev+|ry3*RQj;L0YKsWQ zACDt3(*=*<3D!@i4anasa$(IU%M4z&6&E8{rDwqzH)h(KBAH^=1zkY~$vRj@9Wb&Ti9 zJq0^s5w)KpSxs_sDhRD2+B!u^oDWXHUS34MPXWgYr^wHNf2|@zTLF7{I`y2&5;aw2 zX*^YB={^-iLls#rS;x3(s*YvTWV3MYGvp{#Z;ot9(S?wPmQiw{YTpfovM!?pHr`?m zh#j*l^*Zi#0M`gE-K$0nk)n|)+b}v{?^aRJ#w)`hDk}uzUgZ0+5JFsI9W9+9$D@l4 zXUaAB`f#Rv6_phh$w863oUz_W=ZfTNQ0mKO$&NvD7pyXnH)mjGt~ZSYsykao2JIBG z6u_}xuuNWv&M6P3)^RuFlOj%=%z4kE7B+W)za1b`8a*5F%E~;!)>ekv;t*#Wa*06= zq7OeBod$wYMyt}9JbFPpW_-v>V zYQSii@2@mQLmsR>pQ|hAG47Q;pX&@^o?4#xfjI7R(?Z$ADS6UDs7+p_-3uXwpF=r| zWLvPI!xza$E&ccvH(fEK5WuNy0uPeZV`+Z|aQkTiRiN=8Tz4;$S#|s#(~+c`Qu#6@ z48_$Z_A?Y+0!7F(l4;hKzFSHlIRF88=VJLmyFcX2w5S=W5hf%q5XD~3K0gLAo#lqO zSV^*P!3S;`nWv`G1TpOn4iSwS9cL2_f3-GVbuKO)} z7429KY0zr=Xt~VA!@WYL+gro1X2R^3bSmfvI<1iX>O=ZuY4ak>*$gbN-V7}4N1%}R zvImw8D`bN!*FiYBf*m*kvxC-C*|3{fYInkJq9Q=(sR(QomVcvA5uox^#N!A*K~ZmZ=rLfX1+l}yYpC8Md!1z8Jtcx9CZBn4;k zN_zt0Qdx|_&=)TTyO%*V{`BxUj|ILX-QEE!GR_2GaJlT`EO4`vlQ^Z$gH-I0+I=~Q z^N_+(pV!6iintoc6#OhMmwJ&qE6xWddGupfL8i83qAeS!PQYLWILPqMh_+7w{&+ue zv&0aWNx@>Dw_x?w7L6ae0Sk5!&DkKAL!{?@QK>uEy(;U|^cUqw41uvx&a25K<3b)q zTk*x&MYLuk)LM|AZ$$Po`hBBPVXk{gmgDRGmnGpbXcJUk={`9H@9TX^?TesesOE}S zlu`oKw53(AD2X4cxxbo6+y0wC!%x2IPonHh;82Lp^ubxGTQ|!Q>L?~RrwHHzyD^?N zZ3YJ~bQ$oez&D@+XYi##Obw#N%1x%$C_@qEEFo+Om~w4srX^%>Hm_)73=kKPi-#Um z6yThfSA>95001ITfCUE{O3FqPwy5oN?-t3&J>XI%h3?uacV#}M^fHVO@^SqlW(mg9 z3`*>zmetBOuUl5dT(eDft-lA3CDe^Q{)McK<22RJZAQ{Vv}K!2PdyWct=HxK7U#a~ zGw|kA1P2Obik*@?F5WG(x68ETGhxu9%8*p4)c_!fcC$HD>Dv{y@p z5!k?aEQPl`xJM6JT~O~ozFqb~uio4axpFZ@m1Fv$EiRY+vYl3}!rg2BR-jSaS%s?` z<+fi6Z4{N4%LYxHRt0lGqaj0br7BAi-N>3dWQxC$VSz@%ioS_8RQ2gN>4x1S7vqHNEXweic}Rh(quP zT(^_PiB5*mBDTI%m4KJ&rHZ%=$+{F26r30I^INiU!>{y^x^eM~HsaS1;{*qNU%(e_ zQj=JRu|@^%?*AY|d`JdoJV7B><@4`sXF9qUbXzI?wHFlp2Aa4}j%|1niE)sy(zzB! zGoe#aL|Jdc30l9=deO>SD9B^n`=DW_LuKUHHpD6MJwG=u%faVbq@rI18Gwu>>Kg0&a^W8&P&H zp1CTeb1EVznh3I$nNGPGctVb?ip>rYVg%JVY&*f-24-SoPA$GsPGKB14sT6Z)uCcL zo#?HPq`rPDc+gDCGe7tJ{*ipoFkYm62jnz727V$3>PH40{sdZ571V$_e+uqNy*H#q zpMtm9NH2UUyTG&MsZT)>ou!=5piJ3B`#%FPZlY8AQSBf&i=Qd;pzId``rgD&@e}1A z1gUeD)*qBNa3F6VKT(a(v0{94u#N6KBw ze8&QyfFyY4YqjuR{#tg;)`CVRT7d*%CgeYCU%@O=NhtM6d}@45<^*!({(Y_vusl&k z(zD0F9Q%IV`1GRs{GRjp#GU}?OoE{ zD#6`qhOhT`pnc(YXWRKo=3<33?<6GZrL_5^LcPk}>Yb;sfF`QMPzg;tsVwB+kM%Yh z_Px>@sZ=k1k5q+J^R%oJ9g33oQ@hjPN=kiqotD=yO5S`%ervR;fReQ`S#U2&xi%0C*w zduq$_j|RQsw~(k z#4|h<$R&^q19qG){2{l|LnlFWuBV>A$Yk3yp^e~E7ZUshxVcg?|CBSZi_iK~4r#Qa z*l^#=zBt$fAw;jslym5quP4u6vLlB4*1zN@&JPX8;UHo&k1 zdh2v11Ub-_3-URq7JpePRfSsoCC(aU-4%8Uwj$mL8aYU0P|t_q6#4uaS&Oy~5|O@E zhE-tZ1HS$9=XZ6?#+?;sl-wC-tS90qR_y6Wi%`1_~NnSOx3Kji-mHt}xjo_{cIAyol( z?tqoYDT14?MwJ0)bd=T1ytPWef$3WXR8SFcDuD?@4k$yWas2?tkfXq4b`7gd6OEz# z-Pe$C5pr-2!3?PpfQ`S)5DFWwp^pCx7HVSu8z@<1TQ@s{|91@wMRNd^2EN`kty+xd z2gO(|@R$)}H8hHSuf|xDjhMon>gYWN8xn~b@bKj=@!b$-wKIX-rpH@(M!E03c`b<18il?aQmkadm`kJUT5a%HUDv7`GcO#5 zX-t`5%lyYbsa5WAZAJnW=ZAa6sOnHcnsAP9G!YRtN^xH2I{BR7DN4-2N#^+$)U&3E?DfhWI%FpL#V&!< z6}NX&F*BJ6)h`J37!PnnISojM>Y#+4NVm%1fh{}3YE)~9a)R#a>eBygdkKxmupIU096WKd+?2;h(r$`2le&(HUEBTWV-q^tOQ~gj zE2~8*cLkL6GS&SExXOUevzm9$x2`6_Ut>hx5^urN=%TB{d*UgYUf*igxV&#N1Qg_<)4Lm3^^N6pvVoPDueyQmpj#Nt{hx599%G63 zfO<0y#7}jj3)B-0L|NW*I=%OddLmG4 zO$%ENm817ejoPDN$X5QTYq+Ymq@*O(04KbM<~Fn*#%$Kgv_6V1nF$IU<+#vHI7-g6 z#z22Is*zO)<0P}ObspCwTxe{ysy#P+N~(+DO!@(Ndx<@ldNsim&!hXASgqpbhWk_a zL77u*YGP#|#pg||CYN0dyYrkp4#c7WEC~K!P{tR_=@g99R7o{38gFEhZJ#$rGC5G=B0;4jmA!9<_VW?3C$km z5O{fAObeS?xyC+vznOKHv5hWkZjHuceRHdUvCa2!bE~uAeow))E-W=CP*}elMDC?& zIj}n17Y2;z_)X){&;v=Sy$k3S1W5+^?f*jgVAO0Gp4H7KnEfTKXbW6)jNa6blWncewLTB$7WhlN(Ahph9ot!rjL+eC+qxC~+TG5| zs)?@rhkcCJw6{E{`)!nve*y^`i8Dr8IzP`DX&GH` z5W_yqhl9O=?g6~LN67w-P1k@JY^794R)}VEvd46?x%%;HXRE+gwQ#o}FD(p1RlV{s-p6P}o|UE} z3otSM$OVW@!cd@Q1BzEq@kMvBI-BO1snoYCXo0V2M^`Hmv7dESaB#k>)i6mFU2YBc zcmO{F6NWPam@vye=IhwaN--ouC*695l>m@@_zJ6GiUwEVEkUL;k6vb5>`tcUyl4v{C<`H z0O#M<-Dmj% zFctQ+G7|!8gsG`Bm^B`^8umN1zo*p)a*VpYK=|#W{=KY$c&zJXjjX|06iEBA&y`kh zXbK;@66ko5@6{_o`61&Uy{#4s;lhV1<@Ql%ZcHDm2TIx1$7)lH(ZA{40ic2=-D~%Z z7L2W&UQe65vZOre$6TDRdefcrXp?Wc~{A>~AR>pJURJ|b{E zcFT|HK7Q<@rPpJy57JlHqm+Hr;0Eg!prI#kunZ&Y({RWKKcz`GTI1o!F8U_xDLiK0 zWIZ3b6-W+aZf~V7H(S}kPv4lEt>#7@A5IFhp!{Q;0b`8Im+vr7ZQxAz>$g}Rp)K0}$BpR_n6l091KI7h`OyP{g_?>gH&dcOn(tYPE=c zHGH`;kOMxhrl2#ze%1Hst-x&H4}KeD4FW{nG#GID8a*}G`VUB}-v$FUyyi=~&1%Um zj{6S5=QbKS#9E0*;_cRQoT=P#I|gDKiJ{iB_?k8p+u}R))=+D(@wzYT4r`KO9+^tM zJFVl!Zd!B~Xu0hae>e8~H)z=1n1K(e>~2ig8+7h&D=YEC@U$pTB>c~N!mq@%{Nq`CK5ORA|#V>~qxe8osBJw~TnBCVZN{b7K~Zff)}Kz1kH`ml97zFvFS>XCzNVVY=kd!ip;gD8Kda2EB1 zdH9S#*a*=2aQo4#4$8Xh5vxgC)hrtZU-k$LBg2+E6>dU!ki)!@!@ZGeoH>B|sG6+% zxbP8cI_l1T)GA;=*zl5lzNP=E&zjlj3yUY6Gs>VhbXt4suV=7vW20RUdG# z>_LUJ^BJosyFv_7spGJ$^#Y1wGK*DXV5X7TTl@mlD)h`mbfuVfPPB?rije^e2n`lq zE+{RmyBa!FWFMf>ldQ%@5iOczWm!7!{z!?bF?_7zc$XDEPxzi?ttoz8fYO-~`k*nL!rZRA>3EITVZAxP` zHV*}+mLD)G0WTKpL#rv)mBz=uaZ^z9UH%b3hjnK37@1jq3bQ!;;Q_##GXO7ul67@K zE7v>?Su-fsaI7+RIQxTTMCP;ZIxP&S1L*x@#y{#xHZTpJ`u=*(vW&n?@G8O(OtVt- z*!WsZ!^8%n!HpyO#zKEIJyvKns*f!Mhu%;h))W8~?ev1_$M)k1?^(xY%PFpCPoWiQ zf&qJP2EgnPWzMu7tAP!(8pP0md;>J?*HktWsP+)`EV9Rbt+qgEHDfsXrDFSPD7(ASs} z>uEgZmVkyn?<*6542O-J$rQlZ=>U6}^!z&>91Sj%rfv6!4 zw27-3e$DaA#xDoI7D&<59oG`Cx%johuQh&7)Wl})xHkA~i(fnZAjxeT8j z@T*(J&y7oyoFp9)-N}`YE9~%+ho2X}F8CqMIn;1DUYRlPhF`EKT;}GEy8=Po@#}$K zPyBk}cO}eFn!D@w#%mw^`r_9QzpL=;kKfh!U4!4X_+5wIHFwv%9 z7^G*rt()rnjez>k}FCw_Oa*@D}; z8?VDq4_;}E^tl?(2~r||kTe$U`H5x+_J zO~&t87cM<;tAeKB^Ev#uR;QqXmO5%Gf~HlBDrxD~^%o+1dd0Z%mTqeXf@Wf7@M_|< z2=(A~7G7rq%J52fEe4e3y5r{HbuNDM@SBgH)8`UIEx_kO{1)L?f}ayrp6jl^m`863 zeoOHy#cvsYci~rl;lc$xT+idT9F^s|trd7(iOO2J6JNmVD*RUCw+6qp_^rclJuEX? zxvet1Zh-9vUg_EGmZx{lD+qZNzt3v)%=@gyfAiQG?U818bU~2%w;6x8;I|dOZTMlz zOIo`lx8t=Oza1#7wY%4Ac-=|S>0{Pc|BM6%mDfX`0=NqGGfub<)IHC}lJ z4g!eq`Z-_F0vI&p*TJ1?F3rdLMUk|*u&N5JttUy*qJBq<$1s7{l4#=n2{U=SF>rsoRmD%@fEBOC&|2KPF)C|5}T8SV(6 z05^a@=)m2Ce+x6u6->A3{Jw)&J)(MTVtPFq7Z;BU1EMkD-i_H{L+OywBL90cG6Hqb+7^_GBXgD~k!;p)C8wWe&QLc`-7ZJY%ybQc@kK?Z$VTt!n^&pk41obMg3Rr!w45#p6aBC312CM~M zALZ(Zdjs*`fpx(8QO*ml-c*J}Iq)X%)~}@c+#>A~9Zp?PSX{17uJ1D~|1jndoH zMiv;J+s2Z^9mCL2uJCg3HfNA#-QM)y;3;=T?T1zMnUl3y=Tnu7*x;nq;S*1}WABQE z3$hbK^B`8@%@8#xK^}w@AAq<~zDmRROf4p-Ta&`O9_hcS* z?<@)5RnckIS7s22aR&^wO#7!cEa$=F049VQ){Bc|0!Xngv7&T zd@oy3pyr74JQ`K&-d#Ck)4rmqJXwaC98}eop@`dMtja?P$t$I=P?pUHmQ?iKm~ZGt|MY=hZW!2qDNa7@PDy{^eBuLH&}g z2gNfr#mAawW!lsW+8&@b#G0cvOVE%i**+T;`Kh&4W;u*a+61Ax{oOqikBZ0NS<%xsJ=8|NNNtFX-F|5P;$vd@Bi1PuKPGFF@DS_d zjha#y86Uq5dBcs(Jhcb+&`$n%4@)m`eEP>&P2zw2HS>2oHb$GMrymLuv9e|6 z7H^aI&HaT%N9Kl>QBABuY;5q@%{4!Wrzd}M^!30Xz5BxRJ+V$+iw0Q7NisfusfP~P zhdlBEOIzyPf}u<1*=Mfxio54uHnmlaSkHf1}p$`<}UI$(YKE~xDfl99L%#-MEFirRh~&HT{%*`mW|#H9_!Zwf6*8fzz3BDU}Bg9nmZ#Lwhiff?Nq8k6pRohqgs_kpYNcc;QEImQ_hhA7>FY0PIdsb|J`OAn&LR3RFztzj0GWaX_>^_$H z$lmRGK|e-U@D*%AJZ*{k5IIKO9Xx_NOEtJd^l#@?eJmw%=MKcUP29`feJo?#X@t=! zs830uM|?%<3N}@u2KSFUxxSyJMmA7r(iNPjf2f}o8)o72cR|l|1vRjSxAD4u1Wxn@ nye_^2M9@7K-Vn4?703WA!@Hfk_$4>|2!{|}jr%n7vkQL#-9O6S diff --git a/spine-flutter/lib/spine_flutter.dart b/spine-flutter/lib/spine_flutter.dart index 33d8f5608..32a268ea2 100644 --- a/spine-flutter/lib/spine_flutter.dart +++ b/spine-flutter/lib/spine_flutter.dart @@ -3342,8 +3342,8 @@ class RenderCommand { // https://github.com/flutter/engine/blob/5c60785b802ad2c8b8899608d949342d5c624952/lib/ui/painting/vertices.cc#L21 vertices = Vertices.raw(VertexMode.triangles, positions, textureCoordinates: uvs, - colors: _bindings.spine_render_command_get_colors(nativeCmd).asTypedList(numVertices), - indices: _bindings.spine_render_command_get_indices(nativeCmd).asTypedList(numIndices)); + colors: colors, + indices: indices); } else { // On the web, rendering is done through CanvasKit, which requires copies of the native data. final positionsCopy = Float32List.fromList(positions); diff --git a/spine-flutter/src/spine_flutter.cpp b/spine-flutter/src/spine_flutter.cpp index c4e2c717c..4e772c55b 100644 --- a/spine-flutter/src/spine_flutter.cpp +++ b/spine-flutter/src/spine_flutter.cpp @@ -49,7 +49,6 @@ struct Block { uint8_t* allocate(int numBytes) { uint8_t *ptr = memory + allocated; - memset(ptr, 0, numBytes); allocated += numBytes; return ptr; } @@ -150,14 +149,25 @@ typedef struct _spine_vector { float x, y; } _spine_vector; -typedef struct _spine_skeleton_drawable { +typedef struct _spine_skeleton_drawable : public SpineObject { spine_skeleton skeleton; spine_animation_state animationState; spine_animation_state_data animationStateData; spine_animation_state_events animationStateEvents; void *clipping; - _spine_render_command *renderCommand; BlockAllocator *allocator; + Vector worldVertices; + Vector quadIndices; + Vector<_spine_render_command *> renderCommands; + + _spine_skeleton_drawable() { + quadIndices.add(0); + quadIndices.add(1); + quadIndices.add(2); + quadIndices.add(2); + quadIndices.add(3); + quadIndices.add(0); + } } _spine_skeleton_drawable; typedef struct _spine_skin_entry { @@ -619,7 +629,7 @@ static _spine_render_command *spine_render_command_create(BlockAllocator &alloca // SkeletonDrawable spine_skeleton_drawable spine_skeleton_drawable_create(spine_skeleton_data skeletonData) { - _spine_skeleton_drawable *drawable = SpineExtension::calloc<_spine_skeleton_drawable>(1, __FILE__, __LINE__); + _spine_skeleton_drawable *drawable = new (__FILE__, __LINE__) _spine_skeleton_drawable(); drawable->skeleton = (spine_skeleton) new (__FILE__, __LINE__) Skeleton((SkeletonData *) skeletonData); AnimationStateData *stateData = new (__FILE__, __LINE__) AnimationStateData((SkeletonData *) skeletonData); drawable->animationStateData = (spine_animation_state_data) stateData; @@ -646,25 +656,76 @@ void spine_skeleton_drawable_dispose(spine_skeleton_drawable drawable) { SpineExtension::free(drawable, __FILE__, __LINE__); } +static _spine_render_command *batch_sub_commands(BlockAllocator &allocator, Vector<_spine_render_command*> &commands, int first, int last, int numVertices, int numIndices) { + _spine_render_command *batched = spine_render_command_create(allocator, numVertices, numIndices, commands[0]->blendMode, commands[0]->atlasPage); + float *positions = batched->positions; + float *uvs = batched->uvs; + int32_t *colors = batched->colors; + uint16_t *indices = batched->indices; + int indicesOffset = 0; + for (int i = first; i <= last; i++) { + _spine_render_command *cmd = commands[i]; + memcpy(positions, cmd->positions, sizeof(float) * 2 * cmd->numVertices); + memcpy(uvs, cmd->uvs, sizeof(float) * 2 * cmd->numVertices); + memcpy(colors, cmd->colors, sizeof(int32_t) * cmd->numVertices); + for (int ii = 0; ii < cmd->numIndices; ii++) + indices[ii] = cmd->indices[ii] + indicesOffset; + indicesOffset += cmd->numVertices; + positions += 2 * cmd->numVertices; + uvs += 2 * cmd->numVertices; + colors += cmd->numVertices; + indices += cmd->numIndices; + } + return batched; +} + +static _spine_render_command *batch_commands(BlockAllocator &allocator, Vector<_spine_render_command*> &commands) { + if (commands.size() == 0) return nullptr; + + _spine_render_command *root = nullptr; + _spine_render_command *last = nullptr; + + _spine_render_command *first = commands[0]; + int startIndex = 0; + int i = 1; + int numVertices = first->numVertices; + int numIndices = first->numIndices; + while (i <= commands.size()) { + _spine_render_command *cmd = i < commands.size() ? commands[i] : nullptr; + if (cmd != nullptr && cmd->atlasPage == first->atlasPage && + cmd->blendMode == first->blendMode && + numIndices + cmd->numIndices < 0xffff) { + numVertices += cmd->numVertices; + numIndices += cmd->numIndices; + } else { + _spine_render_command *batched = batch_sub_commands(allocator, commands, startIndex, i - 1, numVertices, numIndices); + if (!last) { + root = last = batched; + } else { + last->next = batched; + last = batched; + } + if (i == commands.size()) break; + first = commands[i]; + startIndex = i; + numVertices = first->numVertices; + numIndices = first->numIndices; + } + i++; + } + return root; +} + spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable drawable) { _spine_skeleton_drawable *_drawable = (_spine_skeleton_drawable *) drawable; if (!_drawable) return nullptr; if (!_drawable->skeleton) return nullptr; _drawable->allocator->compress(); - _drawable->renderCommand = nullptr; + _drawable->renderCommands.clear(); - Vector quadIndices; - quadIndices.add(0); - quadIndices.add(1); - quadIndices.add(2); - quadIndices.add(2); - quadIndices.add(3); - quadIndices.add(0); - Vector worldVertices; SkeletonClipping &clipper = *(SkeletonClipping *) _drawable->clipping; Skeleton *skeleton = (Skeleton *) _drawable->skeleton; - _spine_render_command *lastCommand = nullptr; for (unsigned i = 0; i < skeleton->getSlots().size(); ++i) { Slot &slot = *skeleton->getDrawOrder()[i]; @@ -677,7 +738,9 @@ spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable draw continue; } - Vector *vertices = &worldVertices; + Vector *worldVertices = &_drawable->worldVertices; + Vector *quadIndices = &_drawable->quadIndices; + Vector *vertices = worldVertices; int32_t verticesCount; Vector *uvs; Vector *indices; @@ -695,11 +758,11 @@ spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable draw continue; } - worldVertices.setSize(8, 0); - regionAttachment->computeWorldVertices(slot, worldVertices, 0, 2); + worldVertices->setSize(8, 0); + regionAttachment->computeWorldVertices(slot, *worldVertices, 0, 2); verticesCount = 4; uvs = ®ionAttachment->getUVs(); - indices = &quadIndices; + indices = quadIndices; indicesCount = 6; pageIndex = ((AtlasRegion *) regionAttachment->getRegion())->page->index; @@ -713,8 +776,8 @@ spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable draw continue; } - worldVertices.setSize(mesh->getWorldVerticesLength(), 0); - mesh->computeWorldVertices(slot, 0, mesh->getWorldVerticesLength(), worldVertices.buffer(), 0, 2); + worldVertices->setSize(mesh->getWorldVerticesLength(), 0); + mesh->computeWorldVertices(slot, 0, mesh->getWorldVerticesLength(), worldVertices->buffer(), 0, 2); verticesCount = (int32_t) (mesh->getWorldVerticesLength() >> 1); uvs = &mesh->getUVs(); indices = &mesh->getTriangles(); @@ -735,7 +798,7 @@ spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable draw uint32_t color = (a << 24) | (r << 16) | (g << 8) | b; if (clipper.isClipping()) { - clipper.clipTriangles(worldVertices, *indices, *uvs, 2); + clipper.clipTriangles(*worldVertices, *indices, *uvs, 2); vertices = &clipper.getClippedVertices(); verticesCount = (int32_t) (clipper.getClippedVertices().size() >> 1); uvs = &clipper.getClippedUVs(); @@ -744,24 +807,16 @@ spine_render_command spine_skeleton_drawable_render(spine_skeleton_drawable draw } _spine_render_command *cmd = spine_render_command_create(*_drawable->allocator, verticesCount, indicesCount, (spine_blend_mode) slot.getData().getBlendMode(), pageIndex); - + _drawable->renderCommands.add(cmd); memcpy(cmd->positions, vertices->buffer(), (verticesCount << 1) * sizeof(float)); memcpy(cmd->uvs, uvs->buffer(), (verticesCount << 1) * sizeof(float)); for (int ii = 0; ii < verticesCount; ii++) cmd->colors[ii] = color; memcpy(cmd->indices, indices->buffer(), indices->size() * sizeof(uint16_t)); - - if (!lastCommand) { - _drawable->renderCommand = lastCommand = cmd; - } else { - lastCommand->next = cmd; - lastCommand = cmd; - } - clipper.clipEnd(slot); } clipper.clipEnd(); - return (spine_render_command) _drawable->renderCommand; + return (spine_render_command) batch_commands(*_drawable->allocator, _drawable->renderCommands); } spine_skeleton spine_skeleton_drawable_get_skeleton(spine_skeleton_drawable drawable) {