From 88e3debadf9aa8290374eb8726b22646450221ad Mon Sep 17 00:00:00 2001 From: Dmitry Baltin Date: Sat, 6 Sep 2025 15:18:27 +0200 Subject: [PATCH] docs: update readme --- .docs/ufbt_example.png | Bin 0 -> 53865 bytes .docs/{fbt_icon.png => ufbt_icon.png} | Bin README.md | 22 ++++++++++++---------- package.json | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) create mode 100644 .docs/ufbt_example.png rename .docs/{fbt_icon.png => ufbt_icon.png} (100%) diff --git a/.docs/ufbt_example.png b/.docs/ufbt_example.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1e365e6180f98d39eda8355eefeea208d4655f GIT binary patch literal 53865 zcmb@NbyOQ)yYHd6yL+HWDPEws1u0HxaVHda3KUC$06~gFDQ+!N9EwA5C{m;pFYfLX z0?CE`-uFFcopbMhcdf}Hli7QQnJx3|&-eR8YHKPJ;L_rvpr8=EPyxO~K|uqcprA@% zW8VM5f+x&&{|D9crLsIq#Si+O`yF&!ISn}!lT51RD@Lz5Dnu2_HWx{I*>_jVGU~h74Vf82!XW zR(@T$Qzc#J`8l;Pfw0P~V!SeOC~8FiqtC zLru9>x?@}tc3~_VXH#nWjE+BUe3{=c2hdk?gGp=)3crz|6<7286YX%hDrr~S z$^+-Z2E)J+zYZX7YVrLbM!BC8KKzHZ9WjBrDsNoJ<5tGz=t^gHu>E~&SKJgv`JeuuQ?Y!n$Vl0ECf zFlP*u1n1-&aCl|jwGfR?Xz_n#oh$wm9nV8LIx))0t+J46QW1EFp~p#osI+)0Uba{{ z9#I zE#r{A_}*--l8IGYPVACya%m1YA5L|_L@!s*o(Ug?5{%KeL&7D@Yd2(+*7}QbziSc9 zJ~o{mYxkp0M?~8N91|E#yXMw)lQ(~Sj$9~kwA*xYgoQ4Ogf_ETIe0E4b?4wU1+XqZS-LDcjNkOgm5;0KS$mogQnKA;v-hRsL3coAXO z$aD&~HGtEADlVD7J@3lSMT8&>IbEBWX=oHEeFzu32ezkxSl7RfRu=EpikCh&f*>A~ z;6tS)3rv5P`JvTXAzZ0uQDdDfszviftKe_OB+Xbo7~*vSlTp+^igE8*b5?H~B7QwA9ja@B`(dB5+;w&s!od<0_vEf~_{PBQi3HB1UdE*2rJJbz~cs+IT3ASU5X z5c8mz`b7gm51Fb9)wgKz#0hT(6jDtBTz63CDl{Q4F9iFJIxc7J*OO^yPlpV3s$=W- zY6r0E;PqQ&>lch=iq@e<5t(ARd}*6o9UphM1N zM@^_8Myt2nC^`An%rZ<5%@TF~Fd9#L(MN&Yj%lUGU)xVPL9c&~hq91|kJ%ARp3Ur9 zjwRohAGJhdi>caBj9>$;zP%G(WF12xS6e1UByY{gcEl8Z`V|$5#()vIdqf6^TTAj+*g@=^L=Fs)C>T(_(xof=2B?>+ zhYQRac~x~*7AO;Zlf!&lfblzS!L0$_%Ud9v3s=KxW`8E_zi5GhdE_@Hvr6?7;4i#6 z9UVBzyM&0r{>dletu)vtt`B{%g$>Gd<(qbxS!XdzpG54g`fgUH`2Bd%mLsd>_UfE z-Z55PW+(!1K_a|_SLAaMW2Pm31z{>t+9Bj}e}oDoe?)~S4_JpjW`~oP9c4vias}HU zJd+u2WpolpWnbPscDkH{AUd7f5A4Z`m&5_2b!`?7dfIjdaiU>o2O6Gs0nNBsAuW2S zEFN_NPSf~#y!`o{7&c;C*?I3Oo|=5ALcd8W%C!uW)rQuAFYxO*o@(V39Guy#+uh1Z zbr&kYNw{D2;dUXSq$ed!L!~9$cmX2JWJ;4_an2D%Ir7|R^MUf9ySuR`8u;^5n-^Q0 z4MjIY$YU|uS!VHdSFxDQtYH#Mw6?mGB<&zi($lyWmV;;V#KiC9SXh|wu>#foDAq@p zl+zO=z*9eP!-`2#NcAV=+1#&DS!zI*NTSK_`xZkvickE57ND`~1!n_BV-a^@``4L! zA&@pAvXs%lOPmB{1{TY1e(^$oKIZNNqGT~p#o4hLL%4L+Xmkg5?O4E2*r5yJyu!fy zka3v7v7?6!D_p;HY@sL^VD(H-U@oL2$pJg$t=gy(9rrVFDa4H}L4yT?%vxnekc;+t zcJoTz&E0DY{Gsdzt`|n3_y?Hz1VWCq;iuLU!D`Ts)`0_ zC&77KD9R^$y&r(iBzt|!R`@v6G`w!qfJKneJ!meqP`8%!Ba_OAcqUc13|h%_ejL+_ z{L`ku+Y-YSF@elRvWssDFNblrWySaupdk9P{(V0#59^rq$2E8q9_te7RYAKQ`{@|7 z`<`JfNLBDwrzH2&&34=lgv@mbhS3r<3uV*Br}!#6G+}T2+ibXa(vq3m)Q1z+!73?@ z=vWQzUED;joZyvYyr2EGfk^o6W245LxiM{WX~aw`;8hS?F=1+UAG(4r-|j}ui#Km!xjb&n@m&eA*}HNKE!2h-uPBd%A;SRp+-xb=&i zx>strKmAhv{ko=YEHg|9m|o>9UQ9 zgaXWSsh4C<8(nLNBhy&{Wr`=!EpC@{#0QkD^L-t0;S{LG;7A$hSDSWLwMyw14 zp4LEA*wp>FKub?q+S0$~$i$Ck4u@)2M!hF^8YsWFft@h30i$Oj{TkqsQ!Wo7vWJWL z%Fu(LfrDd-UtyjHv={&$&L6)YdD_B5TtyR+NQ&gTjj@igYP<(H^A}g zw*P2&Q#&JyKa^@Vz0bGwTFCm`IPQMU4o!z5S9ZBaSf=8?7 z$+SUDq-?iH09+gVl`;ySUU$u{6}=GvXeK*#y<{Ah4m-0`HG;C`r1wIFa+B5a*)4_C zc?+j0;}@v~t|fclpZ9OE)Z!Ypn5%#^OS-)i$mLn-2BI6!Y!Aw`p;_sV--F)KL?vPD zBN1zYikef>sF8f}YOjI-EUQ{0FM(g)M4rYsFAzksxL+@9fgmcX8VeT0|7g?$e@hK^{elm?m5>H*<}?{@ipx>wD;LIYFh+r2uC=)T^q zPRlfY_`A$Wo?!(z5j)t?b*8lumyqyf84O){r~c7Rxs(`Z1-wby43dL)SQdLkG5@^E zFGg}a2S9*d?s6=R|Jc4V>Tx38li%oK8V_1$MMfFo+%}1jf5#_D`h}!<{H0?n2D+p} z?49RuVmm23rLdV%=JNh|Bt=Xj1%M|9yq`17m|li3^Q~$2d~8+YNApbCrNi5m=7~8o zgUSdl?^1?&Z05DF$e(NUCRCQ?jI#FjkXvy)!I)oTJmDN)h18|-zb-%rn8}q`C)5u3 zd6pC%6XhYSfya1A&_!tn=t9UR|5ogI=eVak+G504>R1Ek7`*e|XpZ}+{(YSv4+P^n zzEy^(caxe873@;eaQdBm!pO@BB`0n&=}7Ln7;jZ}>?ys>YDU>%20mk2Sp_yWNe;{t zJ*skx`CAPl^X{jRwpj@ghQrCA78@`C!LW9J-xu-p)_Z4cel>orHyo_Mv^w_8W`8Q% zvVE!V)^S*@Hle?;G#i}-lrUCjKAoF1wz-@$U1*)_z23-k{uO!RS@!-s5H_I`I1*ZY zrnHUwyoK>#+LW654D8d$h`ga=i~(DmUvJeJEjR6)kGxw}qJEyISHIe~?rPv~CjROz zyVs&;hx66wl8S+}XhKjeg)j*jyh)5~<@9I3hL-6w1#`~Onvim&EpH4j2)?<_Rsox| zJvuy@wk=|-$RVf5X%_gwxFnj;-j0&xlesOv%_N6YzqCyw1pjn*aAl0lOb1>N zF(&=fchcm6xutSTAfhL=_48dacF$uY6Qmn=PZLhU@uyw0SOKr%@&iIL)=q5eMi;}Y zop44-C2iJMAa;%XQ(b<(tjDyIv zgs*8lGrcD6dqUxeH!0N^aCD$iC$-QXP}wmSxtbEOUk#HR`WBblFrxHX?=dMLrU(1r zMEIF&K=jn8zD3ojtJ=t_UpRxB`7+`lZY(dFHzHwE*2C-3r^UydFhk&`1K-3T;D@Wcy6tDO-M1*&ABRszkh& zoD)O55`>~HDUNcDhCFREbh>NcU81W*yucw*!d~mZ6>;I|F3`%9rhv3yk+Y7Z84D?N zp519VX$8knR2@2ss7rfTo$3jh)EaRDDE)}(&MaCcHyf6mAb|!L_CUjlbb!}y4~srW zg{x}G$xPcYz$sb7ZL(9HOcZ0n49@pSEf6*n_*MyRuDK>(JawY< z>2qJ9u^_zr(8(ffDDN0sBmeTBIGb2hc+VO1mH1r-4sJqUiItf|wI^T;dOW-IDvexh zuur-#3v2o$}NmBgX)1P5ySCF0j>f8 ztn599zQ*@27EwXK&*{7&Q=E5?Sh_CSzZR9HwY@}n7c(B~d#R5q+GXLtuH=sf%X;Xi z(7RpT2`rN?_W|#rf$$w8RibV?Oag2aqp9n6ue0eA(*D7{@ss~61{fN3G{P^K&t0OFV z#9SZ0S2;af{W_?6Tb+jrE-vr&v*%);u{Z@s0b8Zv_jlw^ghR4w)8V7>mk0WKLb-r~ z1_{+xB5Oz&rBS25zZ& zEY5I5!1TFI2fzKm5jSMEYiT@jK=YvyfFAc`PZQ$H{lvEyiz$?Lq+alnn+^EKl5K>O z-Y+ISoVJi3|45oI+D8YPHgP^yq0VBf-Ho|`V9vm{R{ajV%F{ZrxYG@o(S=ON(iz5R zKCN8n>)X}AU+346ez+vFeOX6g1LmeW;z$kv{~AJKlW*0;$k2_8ZGPgDJR{~6XvQ=3hIwOI$DS`_h1{t=*aqtQG7VoO&d{u5iz+aSi}2^@68?ku0E z3S1PDVp?V%*;O!N9n}~3^OJ>$J}0)0isHXartm0%!|AEnG5Qom2?KwxSO@(K-i&I4 zNxQ1T+nmh2;fLop?N1Zig8X00NGHCNCh3W;(SW*n%Kzz60vx7%R8FZiXJP4rjecEz zjYm=ukn-d%OxevWo!IbcxDIz*J~O}~=o1i!B;mQ2WcRRSvd_W*(Nu8TQ~<(XPM#%k zDkko*(z;2m%W;c8GOF6QJ31wHcub_-vDx@#`RlZ~;t+u>WOkGd)vFY%fHs;yALnAx zquU_$BbT1rQk+v!0}Hn39@B_xW5t2Rt*t?f5UVh9K?1e60^x=UhNUxbaTwP@!_w^6 zy^Q^fd9ACZmh%9Bnan(7K&&7^-;S*t$)2K=@{MWMRUY!fF{A`Z3 zvw|^7NT|DuCU6mV4_rt4j)_P1V#E-%v>ovSfPciQ$L#7(Svq1Xx2R2W=Q74J~vi^Eq>AG>pS`ZIvPb0AN(U0yXKnN=IbE= z9Kl@kH2F*2DR0+D&4d#Ew>0ZE82eoI158Zs{nqebEoBGaB+}hTB8$Vnix3N|lDR~9 z4wQc=w*5u200ZOy4%u#2wh}*OWXBrhm-yEDc{Z<3Rdr^3VQj<{0!nJ$@&TA1c{Nt zWS#7|W@{ZC#<{3(j>Pk_yDp}%Cdx`{{*CXi#m*KSNL@gqka1C5Z9Mj_J9sBT#EZ|4 zS#35bD1dE^>FSRYe~ON6ux&ZRPcw-dtsM(#Q1>kc128zS3vtgr*XAO4a-4H4u1_q| zo<941(jlA{{UzEt&2PP9TNUT@b-=~EnY6x)p)N_YOU+jOIKE>BNk!3t-P1*n+dkZ3 zmt?t?&j)0tOiK2$SDTlPlF!-k4w8z4BIo!RBY(uza_>KW?)y8|{!;SI?B2Yme8f|o z)f%xx7Z^30cu?!*24XYEEAJ{0&ty+CCTmLeprVg+Uh{VWLWitRdjRv;_;9IPOl8Rr z+27bs-_jyuK5++&zIicxZHJr;e{tC&P*tq3BT&x}TM}6BJI(iLOINU;0}6B^17y5@ z-3nl(@$>Y^ADoNZ7iG!6Cj}Ls;_|-pKwcRVe!DYnj57^M4Ad4Ry$mk--;fgy+xFPg zavKedT4=Qbfkb7eudx~l`L09L*lu+v>f+zfFpo&ZDlxJo8o4w5Aj_yC|5dXw4Vb=` zGU=~mRZjdPM@9~4kTLG^O``ErpxJA|J=((KR9}_r#rbf;7t|9c<6?t$MhSx%n0{y{ z(?8h|(u`L>Qi(?o8@RExJr2@EH9CzJ@Qx{8nnQQust#RMA;n2}WY`RbbWIFm9^c9X zFD&SrL80>L`=B?^IZ=;;ei1^TmTyo8=S>H=b-U~) z<-j*moJVyLgICv5X7AsW5@TA6oJJ_+`CT%4y$fDr%Ct}%ds@dM#!pVca<%Gy`NxvQ zYCjuxiCIa&340dp0<81 zu>1Y;s{Glx3FOL(%E3H=IHB2Lmdal2-2V1T>#0P6K>n2u!&5^*^6gaU56u@dUxvdn zoa3^)#n)+Vv_*}^&IT|V6owa<9u<}}F^;NFnx0r#=i*0i&0T)(5|Zsh7NRzX_TsNs?Z3 zh)WmP%x}6&h=>2u-WrM*H3*i|dmi)S&CS7I9vfW{@vRnN0{4>f=>DC(AdjNnOqi9S ziJ#34luN*m5|pA#_Pgh%pleLB8>ac?T^+gCx$+~4DN-;$@}Yvt>VPVmGj1i721#R5 zGp0Ojnoh^k7ZE|FI6~$k1%32Y9L47Omue~@XV&U(@MY|kJZtf3aBZgtr-1 zwLO(ibb=ZDGejsq6#q$Xo8tJUt#2@foWyM5CQBbz8eXdTqeR~b_qlYZ6K8KaGRO4T zx1kPlxL*b*PWv=mZK*XQ&Fg| zyP=J{ZO~8qf8^YWHKCk2Ikur!*zHG(h}7IUwy*M25G-wG=%38#!Bm+@$xmRJoF!H*m9#WMyW9&i+1O~u954jY^$rBf z=|?clz)FSKfa+MlftH>_iFig{bED4etw(j?Zc?P5-@JbQaivWhy2?O zeROzP(gCL_Py`|VUt5WY9*XKOuF1}KrE;;y^8Qe{Hz`K{z&1; zSdH|2L|uzfkikD~?G0Kf3V2K76quy4FiUy=Rd(}6z*j9-6#;3wf2rDGR1y+uH5%S2DqM0=Po zn}0z2<;Cx4qO7W^DpYqRMsYMxYT$uz-jNAARR`E5_#Py(ryJzaUYkby1p4@c+hgEh z(F?UbP-TC*SO5Y*V4~H1khXBg1i!AEzhuFVb(V*~vxub=67Z8;J8q-zL;wImQ~CK- zbBl~STw$q?I+M>J!}yky(kBoI^H(aHB;=$19avY}AJJ6vWy2fVaH#BUZy1y|{KR~G z!6|A^)bP(HlwXi4Xsa#OQenTjmD41?sG70==E{toSJgy%iJn9^oPm4sHU0NECUUHk z5fVdQqVsdCvCqyK@r+tf5K}BMZF}w=zn2m3*hl%RS&ZWTnyyQz7@*UcULXuwPu}F% zZ|F`=uF6!^#kCLnHR>fBa@#JlPJuIn)Xi&YzWXDcw@wE5H1-=5W>AQImI8h>w+cNA zK!d3Cb@~lg)H;7tTxPEkvKOmzt;=U$f|*MFro^RgWK=w>p|d`V;>;;`YrDY`EicB4 z0UURNcE@`U$s}W4jdO1Y7TuLH@vd|w(gzzEH8iQ4_yZ;9uVACR<2BxNw26O$*iN+q z0$83hL6kWHyv2MNMV{T<_Hy23VVyZyJiB_0a*6z|#WU8IR!~ckP)>X16O}+##$?R# zx`k%rR|(FLEj7-d9>6ccketyw&JN$aYdkE?;COW4s35KzJ?k1X(>nV%7q zf2;8d_UC|VfifEOLreQ5B%xBWJ-NAp=!s?4V1!79xw`Y?*~@6TULo(f0*8g> zbA|kct?oc@6N%d8UB>wx)7syj17*ICcMm3Bn%(ytXH}b5hVXVK;(q ze77K1oMa6q=5m(7JF+dPVkZU=v~eFJ4w)UyYKSe_p49zz&-R$w*U3}IJcHH=!n^R#qYw=GB$y)LRg!#@1>)Qq#6>P;JvJ~YiEl{o8C0v zSAWTw;5DNco-XFNR96TtTeO42b|_rm9NIa8nfylap{3cIr6Ya+Hg%i? zGD=Hw`ylQ)Qj!c)vHzXb{cCGp8l41`aZi5)va~>Kt2ujnfiRhxZ>@KI2-Oi% zR^cKXk9W^IECs)eSDmA&lc>EHJng=Zm}a7PKO<#dfcO$N>F4Tk6Q~ghJsKk(QxOd~ zj+XoFt$Z(QZy$kBil(!d{c})C!o-#0M3^LAj0i@))L|uqT;iQNgbf_NtX1!Nd6{M# zZ%k1=;u%+b%v&mfC$7UB0l&it&mu6X*)@ zyEk69aN_It}9apcC zo7~O~yXp6e^IH6p8=6>=%@j^K4N6OxIl}zN1X)2Iv-lS^&qe}y~ zVBJm{Dt4+r5*?%|M@I~Ve364tayzrDTn>QSg|j~0c*|@IuExIji769dun1AMKcN?q zjZ20}c2yA09A6_3<$btsnPVSCDkcc%B@^Wm|2|m?n&+dG5R*2Ct2RE%m&Hx>`$B+L zAXq;FDzHfxv+s1kH~~n_^*h6^h5& z!p`>!BB2MXe-Om9*yxt#?T3r_YxWE}<~L|G;R4;yuJGot2o+Lv(Lc3QDc;F+R=V2?5phkhaNbk8*@=VM*~uCmk||ZD|>0W?1ELnuY!fg^{0U4Jq-&P3`n)WoElM zWkJ@cn;)x6F-5HeYih!OqP-oM4MxEsB?U~6Vz7Uuy8mb?Y3PYEXj@;dqWLmatU?9E z4PrTfjk4{s6b72pqK0?R>pldJs3 zC=;}kkSM&v@c^F%C4(hdx-99XdKked@7~Fit56I`_&j^2++%z639|d0t!{*ty7Bul zN1W_MG1+y(Ju5~Zx!Q^sDh&&E?P2@I$h6QFO=SEz&)Hbuv);OIBP~ z8}lzjnQrrclzCQX!+zPM9qR#PPFsv#N0q=o4_sh8vgb5*x84Q#A5jhFmJKM(|ApYn z7@tY0xXoI>aSCIwhdi0>2tLzFsghrSX@F;B^E#rEw1*znd z-D2QqCd7QCp(y=e&nX~ciXPh8^q9IVgxN)!UY9oVUsM$RvPpk2iSaiTzi?5kV7u?!k+C_&fxl|&@B21N>KQ@| z-()vs&7HgStm$%8Ve5@Vcjy*!EfU?5pi)`J9L;F}x5Kis9J_YP!M z;om_olNL_fz~OiCRK1F2#nA!8)gf|v?-)k<5syYEDxV_J)pC7+#f*yA=%UK&qjouM z1lF^p=?xF_-d}}ay7+UTg4%WLCL8Ni}6?sFz(KiOZr52H`&d%PU#y}*m zOMnM%!3T_1_z^iTlSvhx9NE2S=xMckUSwdq=d(BQLY+bhnH{zxOR1FF-Vr(v>jcU& zqet=q*T)tu4g%C>%)Y9rLetn(*Lg;+KTfp?-7lq#gP(}qci<<*z(d>qyqnkym>7Om zfz+T(0YHC?pfwrCU_O@{*=cj_26uNglDE8hw#SUAaJD zWsGuqyus~7HFJlT1je>Vkvv{19wuYM&eg6-KcNL( z+JT1HvVqrjCiea3y2zKGYHgdy$uRA)_Ud^uz6-!+Lv|&>Gynxgr;l^|*8`C!bOd&L zgYpi!()iqx9I#R)Ig9f!I=ST_W@iVMOd-ZN(Cr#S4r}>fNT?`7+KI;yVl!{^5w{6p zm@8l=RMBe^`-mLm2Zi;}@0&dEz6rUalbcV{s(#fGQ5S)jwjX?ejX%^>^@Wk;|}C zU7r6qG!yEhESc#1ua#!`1kTJ+4w!-m+~KNNp5W}6g>$zcH5AmJ2EglUF9q7Gaorq> z3j~hB>h|l8%wzV3X1zVZ9K~$d zLNk^wfx_`W5ASSWU{_@PLfuT#pG!Kpd+b0sPPV3Eh3dNn{MZ$EA(;<7Senegz zb_iMLz%w@)ua3o@CI5_j;NFAiZSb4YziL;MY{XWzjl9Zk)HV`!ak=rfmhgq7@lm z>$d^0SAU1>sc;&2^_vVVo4$7p?b?tPpSH#d=SwM=lrL!ML9lYMoQlZ(y-E32{67_3 zf7KgT!h6l+!Rh?pH4tVN`Bv|Ht%DD(-BI;H!sy9ByD#xzj`pQFHr4&B|VT$&T1Qc?w+sx%T%KmfguWaK*u&7C`^yqB~ z0qfn{0TA_K;37ITJHd5e7=QmCiq(e)d9UashC;AcLKB`9xNQqK&^pAQMun<0W4bcM z$VT2Md~^rj2~zs2vIK^PK?|!NB`wmX30;q}B>bagtuIpm)Ex*1=bHJSiv*vnm_2tS zh{x&TGgT^+cX#B#RO;s!pCs`AMmUiyy7u{&9kWw?ljIpsAl4clru6qeLKD2NcyA@j zTsR@JCdn>l&>jB+2a(Ubl{=W3Qwa-d3?{INQ z5P@bGl}1pvjjykE_#{Kl1R+qjbN=Kw_V}rIyu8_%x}_}0=^NvhRvu-LT^u6;txj3rY~)SX{-ru|sbGd?g8Pv1bpV%Lwdc#p+bAY!My z9UUr1B)G`~%i`s~SeEei9lv2!rKsGb{p=%Z74!@J8ZSuyl8n@cVbhg@1Rwdz z$vTi{E62_*(M$%mLNTuOVu&WM8E^3ml$_0pN^82kUpq6g&*2ldqVk2`uLkdp1Zg)p zo!+ak6~kM;nKv$-X&*NlsKCLowcw?2+a23via+z|Bu2TOQoy}&BxG+L)+z3dGq*1* zn+Aa`T#NNK;x_m=o7;4VHO>9r8o4l%)%LJ$)F-Y6}%=|J={TKCR--eMA}M!a$6IZ%u@ zttBZHGaR9&{h*gCQuWNaNul4>YA<@o2?~anjo5IuMkI`vN4o6oUb!71+$UixZ3i*h zu{Wc?x9Ns0D!*TPuKaJ$G-<)=BL*XBhu#?lsyBy*<6=dTw3e6S2Enr*1nu6%W(=5T zRx19)8lnE}W_81BJ9;wPr1^Q*F?$TE#&-7cL%j3X95UU849lbM5H{Z+b;|TZ-(}ii z#h<+*>QWvSUZ2sgOAjvALj}?W>I~y(TQIUj>C=Mj6s{f_BcUYcfBLm7k6z!qqYu(9 z=f=URSZ6GBn|#~Mb1&czqA)!1Kpv-(Jw#I}}`_$BPw5Q_bw`?FK*gvltlTlNg(b8#vUjI!y+(TaEwgBZz`^3#xD#KCAP z{~{=SQM>P^q6>cg2sa6v{CS=LqBri(Nq@PM#p3D})z`1%KC4gK1Nv|hcNlOI(=LoN zR7->CyP68LE5uj^*O^9$&(-DJT~SKD(PHDxc$=HNKW(SWhn}wCBtQ@h)@AS0!X{I( z@&t$yuZR?`f1&j3>|cC*BU`L5XRra>JiCfF>%I4HPjRzgV?VY$!cR8W1eCwPv$RBg z$wwct8ZCm27M!mIl?-B{(N!d-5hf<84q3lfw|_?L@qNn)^?6GlF1ie7A}aZsN&p(l z(^``ulKw9z^Wqj$Qn?})9leC#q&6Msf#Kf`5cv3?1AVS7gf{hK<~OIPS#3$Zv zFL+rUo3P+UfwYr%R*bGJe8q)Iv#W{gURfQ!pc5~8J4RWx;q#9LS`{X>a`Nq8_GN#> zwct8|o<%%`Qb8?Zjbpz3zSHy|KrO^CzAJSvv-xEZ#7CkNtNbe7r|yNcp;)z3l~1Dg z4>0cvSF)F{+tlVju%`q# zKvl`Z^a*u1lddEHd{!kFJzjSF$6q{mEJmZ%B5>XQsxLh3At4PZGfUP$;L#T$aj#aF41$7f zcO0n!k4~tl01niBU`5YbE{7!$4(3gQCqMNkJlL68f7Qyy5}yh2m;WNmL1j0l#}$Xg zK_;V~s_i6+K^&kx+q}jJl)U$3xT-3yX75jDud$`ypI*OEQ3K42r4mOTjq=l|wDsXe zp8S!sbYgk1Ve{d+lIhF#rI_z8P3NRjWS@2M?-2iE3|@XeI?oIgB%HGLZX<6pMt7<4 z&XbP~h`^cBVn{QsWi}o#WfFMs1>fq5{>K+Qhh5$ES^KrwNp6eiQ^wo*HMr+h*1Opc z)$bIOm-L=j2e|!=YVP1vu=DSbdEUG{&;BC}UUKjAMFc9=I}9&zDQRxs;N?1q7PN}T zBdD-6Eoe0VMV(zUfJ3RS3TW^v7`q54JkeCzWmt?eEK=0dNEP z5KC1H>2o}%yEE-lygPgSKBBRkRO|%MJ-LHN=2jf`o^Zz<|6UW$q%D@K=lpbP9!nev zdBGR9pYga*-!nK-X6)V%j8_Q6ute*Jz86U#j@*Dz{g)3|;K#iINGV@_o`FhS>bCPO zz@JV1UeK78ZCV^QW%?gRV1c=vvlrjP4-&|x=E|oz+GV;2w0*imf5iT2L&k*B{VEQ7 zr#5IfhO}7Uj>#kL&bZ*jk>vh2apiM!Zdx)fY2BAwvhXF35BrxzSex`yc!5|%eYreaIGD{{w>I-)#ktFfx`pp3 zdh#g@g{EWY8^@nT4q1o1*m3I-<+7WT&u;`)@i{jVi?2EGlkj%FVHAogX)@X>_O6}9 z8-}%?29{{)?pB$yg^dm1Mq=kBa|&~(g87BjNIs=M9#q)%5M?8gk6Jmb{$2RyF)@HE zCBl8Hlk3?*?!gt=X}i+!B4>zrxbFuW+sSus=9NIpo~wHi>#wJGcHu&&8_^TH*|Gg7 zf>{^$vmWWUDy#yLe4knxigcb0j^ix|XfM=_Hi;;d(YXj;TUqksT>4A*i3ltAlu}i*cW#A0+s|h%gl6_7^1p7W^ObZ8q~s7(bW|g3h?wR+zkz_H5dvcPOPOK*k-Lz~;BM^= za=9-@iaJOwHzx{!z+Er#f3y1HBahe$^(2qA^!PT}zfQ~T1z}!Q?`a=d)ZE-$Y;=H* zUm`)rba?zQh|V*Y9uUZepa^R>{_K&Q+we`fhVrjCGI}X0(dEF#s1@irrOS@q$?6Nv zLwx3PGdxQj?y4z?LSbFVs-Yv47=p||1s>!+RR6*S+D7p z(@MBPD&E)bjR*Y>3$ET?;LWj@8;BA1xj4LE!AG*#|dESV|R9V>O`>xO3k zeBHjpUeN^bgSQut&dpQ2QH*H;TWxi1NE_T8Ixgh5PAeGy(;~WxW zzd+qLx56a}F2xK?k}4jKTKsY0@rzL1($7yks$}sAs120}`F|&L;oGud6!pg}(-tt@35P~W39MBmJ`ULzy)@bP{ z%z80s+ylR&#tr|<1K;b#Z(>A*yk>m|a3A-zBwcFfr^~;=MQ&o7A*R^r1{ZsCry0)| zq>c=39$mSDA%v#qC)Ddt&wucZHyCrNnpSY)%)yJW-_Hj53fa+r^Ud4%LI+mZD#U4s|g zf@&Yv(Ypb_|KK@+mA94-Z8V2m1nb7iF6&R8Rn%GElz_RGW^2>6ixLKidH-dwm1od0 z88m@IBD4Iw_pVRXBFDFXOXX|L^0Efjo7ROI*t_DU4&09l zDK z-~PKQ^zJ@&JD2yHWg(346MlEgXbVbrAq%XM_)YY7*gsk7Y*;u6Qtu%H-qbIIa3dHC zzT{zY9k~&=>hnK(yh~)-cXu&lu+J5C&d`pT*oUj`=VXU;%*``jp?gY1!GaUG|g@KGl0Tx5fWSd93c7 zA%>6I_wm}ON{e>W@ljQC79S6`)xUwv=C>nZzJj3q>jLe&V@vYE5f><6F5VJC?0w1l z)1NSEiz)y<;4cW+2c-2^TCJUt*?p%BuZKnRbI}wVzO}Y6`N0jn-j6Ye3Mp|oU-Gut zRJ+f&Q`IT{aOwYvUr~|Te-Jlsa{ET0$&bEuKK8Iv9lL%qtAw+6GD(#hGC#_tB8k*T z{hyd-H!cHe@OL_C4Y*gc!V|joX}jZFNZ*w{1#K8v9AwD4ejB`6wV_7sv8NdrI8HKk z>OY3kDV}b7JotpYf9w$hDns;nfQ_fGOV6noJKxbhTil0KQ+ubx2PDlLB=zQMV%%`L8ow0z+w>GEVAPvuTvGAk(7tlA9F$G>oIItJE~+8XCKFF&e5J;?;{s%Ka-GFBh!b< zWjdw)4`**37S+D~?4{fb|~>o}_hi0->j4{r}}he|~^(VlFo>6|CADZZEQ3<>nf zv(LKSm32oyxJ;eP9$C(4Ks&sK&2cq-MAoo*qRxT8aZSd-y4lnLytCl`45ui&FNM*$ z6e-X{k|N{#;Up?ZxrPum8tJHr?hwE1*mQR+3g~0>y$Y}8qQmLsgy-VZU=cdlHswA! z_p#nAM{oe3ph5QXAD|!*_|vDGHra2n=`Eq~kc>zwg%b@+o5O4>N3bUFVD}EkI6wC<8~APMo@86F#ZNo0aY?>ZfYsH3=QQXJ9nwL(ds7sS7kli zr(g*$|4mY6aI1?ey3ifJ;M^Z{-I%u8%mgacX3X;sJ5@gt-Hiib_}L_N8Vv4XJdbaA zDCi0vV%2O?2;+~UsDb+he%B(OVa@k1+aP*YIA)Csl(`$&bC|no_sD@h#IKHp)8hZ? zSeyYL5EpoCgMFZgVR%#?y2)+jwCyJy5H`&HdPDMRp=Q@-)GWxru5n4uL*&Bl0k_u+ zJ>+FQY|BrAtQ*d)=WL4a&`bDogWTGXy&@rRg?rIvMIz&9sbn=TLAc)tT-L2$2wVhS z5PYfDplR0)ck&ln_ri<0?A*i9?>i&4O}~RY6F~vMNJz6sQ=QJDXdzVC@?xw*D_K-? z7T5~?a-cd+*v)W7c;nV*;=HW`L;fvez!W5m0wsmxGbJfO$|4f z!vlsL6G&*4Q|>^N@qX~mBN!?0?Fmy$8K^uVAG2waQ}4GX5yoY_#q^@}sU#!g-({K^ zK?HtJ7;{3*&-H{v-sC{lUzugmi=hX`*SNIQMO>3==`Mr%v6gTzK0I<3-V5syXORK} zX0UeLlTx~hjrU#CAb#TUFW7j!Z~NwGQ5O`MdwaGucWRyAh>~xAa2HAzD9-pZ-n&V} z<4~3D-{4mrgVcjghohl%(sQ&r@j3fR5B#gu)5(wd-&P8gYVptw42{i5UgAq#Oplrd zl#}A0p|$OxeZ>&jHxC2$opu*ziRZxd8?uR4IN`CG`G~#Alno4yOQcL=Iu*uw19q|a zfy~abml1S%K}Y+KdLLXbTAA~SzTNHz0`t=Xu>K?=XCU@KL4H8wt-@)0Q>)tvQaMOl z-2xLcgv0-IfUoqZU%r6%@Pjd>w9JMf2%MnueSe27pthF0vqZAhBX-oqJ_~JJC5m91 zoDt+GjlN@R$=`7r)AXI6h;(ARdSFduIz9vYvnrpHhAq~lb$;DkOH0^{Ylmjo-1iqr zr4ZEZV`WZ0SN|8DNx?uN4izUU^XILSGl!GYd8W?|;^)1iSh(rs^2XUqplay8u$m-C zWYpJy!S4@KE#IX-**)E9L|}cMa&4QT;N}Y^#oKmdqMu@~zv>HQO#A)XMWd#EHWiMB{IZzK$#q=u91Vk&aW0hS^K8U6 z+9rd(@VlGNkQW&E-V}WK!$D)WLF47H9Br;rMr_7#ETOFoN6Id=-gVQy{Kc=htwcU- zGUyK|iOzCd-oKa$q+Zw+^odJhpbYl(k<3RUD$V<2eAneQ1nkZm-L>u(jO2#*N1As0 z23%F|!Asr^ht~59qQ%EGeHLE0%gzR#dM}8^3!nRd<_;ik@S4H!FqY?(@krk{=nfAR zK2!1_Imsr|AIP+n>r#}TZ}^_-`N8n|1o$8M)1G!K-K zpTy|c3|5ZzToqIkkC0&HA27jD*JXWhM)fQPHf%9XE&yHRcM+c93bKOg8_=1=Q z*r#fK0$@S;cB>;l#c+;Yv9=2d+yYYk^TeN#HQ(0V25K`~d^W|0B~ptUeSO6EDeHy! zDZQxxDySLhPb%oSKZDfxnSdJa3tp#Ymh!s6a2@m*PzFL7V7XFQzXgWG{j~#fUxbwXa)~b_ouTdKCCoMELpPS-4 zqJwS&^kKImyq`H&<|xuP@=m3rIQ7Y;^_zxVCSKnTGL6Rhr|aI56v;@v_&6i75}*PQ zI^)u(Mt>qYgb@7jBC>;-he>Hj#6OdZUGBE}jUH)eWp8DpFVK_blyZ>k*lzH*V^z&9 zJn#Amj*?q^&0qRRK{c?~w5fS75US7Y)P!=RG2FOW7h~x5IO=GW)MZrfH=)yk11$cQ zx&Ebso-ear%pMsJ%r1Kpg+~K+P;nmyL*Y1>@pcriiC<*{foNbC9ru^g@8?u^5gg?# zp#&E1i>JlHQQy8dH9%m#lG%B$c_(5Y(%!bmRRz}MXQMVxo4BFb&1(xH$5TKxC3i@5p z9(-VHh<34vepA6;WfKy>Hq9EJA)i_j==L=tT!~k0#wo<%F7osCuJEqrh(uM#RPV+1 zlW4ThZq~u#?y37kYQ8$r0Wws~DYfnJW(WzFRRH3V4jE1TT60v2;j7#D!sKJkXK_Q$ z68hv{n4RNJzmq*!3EpV_gFz8&sIV1oq=Q?Xd))WicFn6G3Z&*$D-mf~HV;-*6$`0% zdggxD8+LN6D&I258YR7dQ9U+e`O{jpb z;EWf6f#6Q~k@$4F~ReEnfM%|~y41xdwr?3BH) zQ=xVLq~N?NM*mT*y6Hx%j6n!opn-p0xK}kO#?=Fqy-)ITR`>w1aLp6cZvfl`GVrdh z|8_^584SHa1iF6IUWfO4({@CV`A{5052HfiQ0|g106o8cdrRnJt8(5zC)h{Viaq+Kx^cPFK5N9jjA&p`uCIv366uL4eNXM&AaNtaD zf&$<#@0PQQKVk=35>wD`2Um>Tcx?s?3@2R9GB*QO+Mm5~Y?6~({7ww|12bqmN!+u2 zXPj?z;-Np?mjWfS`D;;I_mTd7{mbPK{pOH!bLx@Y=z1xyo4IsyTR%1iigHW1Mk_MB zT1+pXANtL_O8wJ*Sax+sK##ZHJd$7g$Yv)wRJ{OW8rg%8E{f6WOV5A3aP5dJ%G+{m z<_D4J&~#P=qn|AGTAnwlYV1~vJ52hPAhWU{3l}-zMD;vJWy{PURMq0wiAGG~^?I*0 z@80FW`ZDOtN1T_BVX0xjm_%hP&8in0=rK8XCl#~hRqZX(_o*+mF#}y-VyNLO8bFA* zaEuj9p@>!CfFr+scd?*6F4@8Vi!)Ng&%%84TW#-Tw8n$OKi#!@UoVEwLj+<5n~?tj zAWX?OIWU4=F{$Ss#f!PqZjC}hLAzo+w~|L~`IMQ#X^^UNw?6q7DiT1U;;#reI+rX>Bpo?|SyYjcBUyDy9h*jF z3%_99r`F-mJII9SO0eY|DmkVa6v;gKLK7h;ysnp?3fIS9z|NpKzPB=^}wH4vC1;Y9-uOIomY5XEXqpXjXE zDW(&oA&@%d-mKYN52dWte-yzgwV$$m+@2cle*MD_m-`(?5lx>Nz$(qHeeN5Yz19@g zfey)XgQMM*P|MarcN*65S&e`|Pucjz@v{+Y!mH&-P!g8%5Gk2ybzK?B7Xcx$GfFY{ zHu;*CS}WtJE>=55*b8mO4vw+o^VSkHeNqDqgrwj&&+q!3mVc`w^z|?oauSm^V8K~w zlsRbI8AO~o2${kO&W4)d@v|pV7ouClg^)R?MV^wjb?cs{r*zM4pbybwGZTV~8?A?@ zJX_DCWf!_BSGg$(p`u$A@~Oi{!_fNJoxS&ht&R5Hi|WN4wIXV`7n4Sr_t5B>p~sc;oJ= zO*@4&un{L@H4R2(e}6GN#j z1CRa|+wfd%*_Npf&*MldL^)wO3PRTXKA?R8GK}P)a_wj8HRka_^vqF}n7Q(}nxS+q zM5`a=Dazi&)h=a!fdDN#U zMNbp%Wb`qE?MDAQ4#uBrj65stJv^!1;}>As#59=)v7=HgXJ2NF{0rWrtmUCmNO?y= z`S4D+o%>AZt1-AnrPBYRvqKk8nE#@&OGDK1&R+9J#mi(vkG=7IAsPh(mG>W>$bQzR zIQOd~Fn@Ocr0Je?E8mBvc1XWu2ZX%l0xntDhqHBD8&_*D;95d+CWLTZsJNxGcmFL# zG9E289yFuSf8sBJ#-Kj~jds}jULLp|BD8iNaZVhfSAC{pV$6kyuNjBk7<7PffSRL# zl!djsgs_H70C^kCfJXXeEPu5qfa_uS7%y16e2`x>e8vXZ z3Um`iTbNTqQNWz{_`^aJ#s7}?iogyucL zD>R}3r;QI5Za zaD%S5mHRMLGH3h?KX|mt1x&tT5a#+sfa#RtR<@*wO~^ZNpASLzQHdI~Z7LA72H3vB zV|SSD!B94A@63=iO67?ONf`&t&H!>JA)klJVyFXAW$2$%UNA>Val}x{3 z(78U2IoA7{Ptq?!FDy*ZT+?1Ff3vya$MKWgC>SJGcmKuxia%3?R1`gLXMVms{n_#E*bX0CI}g1lza;G(-)OGG zkB|-?h%;;Aq>}=!2DRXtIE|H~o4*#0)Ctg+y2!!@J_||DfA^$mbEJN@c;@1&jFd>K z61GVL^p!BImo!OnWg(tqOT-sgqjT6@5z201EX>{wE1|yrAN}a=x@Ajmb)VdP2q9uj zP_uvKCrvo~vq98%iLlYDKIA^Ka2FZNeMAxIU%hFT3_Jzv7*z8Z@yedTVKzXZs(_LM z^PME>pd1Y$e`6Sdzj1E=7_T8&8j76!@w(NWa^1<( zWq|l?VjBgPK)pdM5!9gF7}DKCcZeIJWRQw<%b`SGOWZak7lDm0*|%Gl%)!y&*-SUJ zJZaMV@tqDXu|_w$Wf|ZhBwME7u%+<^4r@Ob>dT!8RF-&(x*?y!Zw{{nd7V^$+oZjJ zwP+L&q`V(Tu-C?K@org2mKVQi_VqO-ai2l+$T5+AnHT_4->c*!R|ZHb%#S+oI)0)e3@^9-w?q{_N$ODm?|d~eh`dC=3s1qS0K zNlyp8m$WdPlT1q>13iZENh>Wpc;fkH2_voQoz2f!D!`3KGvs}HAcmxTJn$PfA;juP zXOW|Fv*%43i=4eIi`Dq!I+Uu@pk5w|XDT$(vM^>ckpFP;>3*s411$KO!eY4`=Qva) zNF$B}9rYV&I+as^Q_oOY_*lOjcxE(goLWJ%lVGQ8lQDZX%=4J^^?=)Z3~_f;-spm4 zRZDv;*!ydX*_*Du_W}kDykpdD)>zk3vFQG{xRWWo`VMV~@R7`1_oVN@sYJoRD|Q0%;57Aq=N0t zxpe)Ihn4{kw2*XupwWETVGt>|z1M~2A1R&tsf%p)wem3AMU z;LDi{ff|PKe(W26W(AS}?~p|X8WA^zp05$Sqt3eHhVQ7A_>(VpYsQ*_Dk3i46z_Yh z`q+pD1J_fq+++Fi1!v8lrZI2fDt}v#e3jbm(7Jv=S(n=dFFod3CN!D1ul2tj&1YElcp8F zt@cR>CT5PXAh(e^AwYgIoB+7tRaYK%txzAAI1urqhOK#;oEo z%Cy>=I{t8&Lw%o%Y!%yDQ)j8Aa=EoDpj#v}!SGAr{C$y*e(HFKBw1tAmwgiVp3xr0 zGVot_jaV%X)dkiwiRYUxtn!=YTCR;{U5|v@Tz`b0Le_nXbOj2Cx{wq5k3v7DnhMC0 zo}^Rlc_&oc3+#MUDB$4NGXB%Zrh7zl_9m9(Te0R`-&!8&ZPe*=w_hPx-Y_#R zvzU*^PON$}mo@}`zZ8yBELt-h@=fVp6vR%(P)|4CGM0m{Wl`@ZJ4V#KCtLPLR>8Rc z+Ls~|0s2z<<}S)>RkX#C4--VX&TX&@k&F6HyOWE?U^%ouG~hjleQ$rBEPJpnG)l|D*B_uL^5>!NxOXF5OkW9HkAwXi)m@T!j$ZPjar4$wvwnYR_4o<_Xh*{sG?La1* z*K`p&AAtimOoaUZ9hUg#y{rG=EdGy8!!la`GG^eU^8G6}^Ijdy=p+bRe8w2wzakl6 z;6iuV@7k393z6Z^5X%6?{?}X#?o@6L5`GMz4h#IbVE3KS=|I(rt&-^vb=Zo`zpBI5 zC>03W4UzsH(AX7-x)BWJP}9&*GUp?BdcoFR9KYXd6=giU@}h4fN5@#bE_{RAQ3WG2>8*)yABg%+R=J&Qt22d9khmUc~# z!O&?2sXCmmIl-f3LFQooSktc^D{KP^4aREx0o=oM246dl+SqMN+U{+EDgJC|NibWC zQ!0i`2;(n{P;2E)J*WQNu;Q=eODyVasoPqm>kWDt1augkG5>prW*03u>;pG8B_$=} z5ZJjRFg^%4>_@*Ak%5d(Id#skV`uAW7@uP7_k4&S^c&X}N!(*J<%E{N`PfHzkMKn~I} zf{hfyk)z?)U(mm4M*T-VW=G?1rXC>QG$cYiozx(l^b0VcrN!Xq;AE#78Sq@xaCv)9 zTuiK&J?eySbNV0o7*Tx+iL5D1oZPSN-Z5*S3<@atrB z)ebCD`(Oa`78nBUEC^mxt7`gsp&4X8lgWwQ{%K2rJe0YM9S=r)OUfJ?#{O!|)-La= z>1{;m#CDmBQM=B?SRSibt;F!@G99fl3pPn&FNu7JcYBXblq>q|F)Isg&YW-8PNx6- zn_FE*Te9{~PR46=!uV^^y2hUhP6*0PYX2reN~+RTWKXjVJw5YqE#ATy;xo)9mD!cx zD^7>FHlL=?kH?lk??(_y5v7T|lDI1cbcH6@S$PMtmvVKZ?mYWrKmgP{>feVBWchPj!%l%N z_$KOPa9A;k@qH(KWL+gR9VY(Q8yU{#RUAr!v&%aJ+ePaq8Av_#au2`!&Jlm z3+j>d-%tW9ZBCGy~G+b}s%D z)JT7sjrvz3)&vO_azV`AY*5Dux%7M|eO0;t^GJwk@h3${c+tr|C7W`d2eY!fsr0=t zn&8j%NP^Df?{?^ed*cH?_qWM`2X3K$ZMgYv#GZlMY|;lvX2Jlrs~b=p1A?dfjjQnc znlvH-9M2dwHhja7bE~3+kmVY%S~=MSGn+yWIiY^r6(*RnoL(2qrLNW(wvfJ5w!$8J%wWn$O`Jh5L^WcLx~>`hcJMF$3nIlvV0R73qK@opV7Zn*ES zJ^yjDwe~M`XB)=0Huzrl^mK)>#`RFF!*oj6|8SW z#xYLzcSc71Aqr1&s@G6R-y_=3sKpI+XbW%fKI?|`00haHDgb3AJr=^bms2%<FP7ZG~K*6$nxhv%d*_q^Cw zUaQ2*FwdD(&ZYQF4RbQWhRB1YZ*?yeuX+a6hnX=Jh=DG}{UD&TA2o$&YFW+)vJ1n_ zV{Vw@I-BJID9G@m;9V3?)(_ZRGo-&vV+m(}%qbzbTXaGKF;zSKplMbnf@20f^U?o zZ{^{Gv-93}v3-m$9&Q{$Xp?>V3VV9`JlDT$b4vMspAmIOtTn9t!!^Abt0kcKICAGmX{8Za(eOHbVrbjeoM_*E%zryD-1PPJ8gaR` z>`cZeu`6j!K{`=y4y>ECo3u$77^mOIJRU&F%gf`xEf^49U@o+@zvAqQZ=v2s5JD|n z4~3%vcUMecQE;BBo#8q5;|kO4ycNNSw2-*hWh`!NF>wS|M>&u8O=m^nde!6?9sAgl zs-|rOgkeq91X^wU2(Gj@>RK>XRsMn4^uU%bqv~1XuceIc#wH}ZU4P+E{Hl%)u;UZs z$SPpEBk~i8{a93_Lr$o{VWvs!nHjOO0ESf|#S*_oqZ-zJ415@h<2Oz#Fm)MFgIZ3l zt?n&>>1{<^!PTcc4s2N`Qu`;a%GSZ0A}Ufx6R1`(MU^nr*`Tm}09-hglE#1S>ebDK z8Ly{tWk^Z^c|Luf zNrU4UjJ&@>EK~4KOeXTYSX&t4c%0?oh?BfLQ9n9x!#8^KKR6W>daK8!iLc_(RKV+j z#l_h7w>sY4mxBUk58&+S@;5!1uFzN(W(uI?DBsjPB8~sPb|BN;`uxU6=WqfQR^gte zOpNt)6Pl)d49FdmwgP`DE4DJvc2#1KR*pp-!MDp`iVzS?sR(xdpcYbm!gKevYvHRZdIkS&Dn`B`x zQ5cPupYX+->F+R8+x7mwW$1tGVXXP}>Ie>w&mVB_48DhdQQzt5{)mlB^Y(P=p18pG zz4qu+Z1J$M+snE`g>`eXwo2!ZZ+2L;tlIGOKG7AjjELliex}OnN?MaSMZZJnnt&5b zF;lFB2`gUk-FdfPj_wmUr$v+3+&i(M`Pq6H@S3IoboRy55_Vmty0R`Tym z@^%>YNi}cD)Zq-#VVl5OtZ()3hiklrTryE0I^;dQS%f}PV*J0fWiW;RSzE^N#p8vt z#Is+~mA;U6x%N!)WU=>nlM31x(SVJf;BL5fg~cgbCH9!i1$Q}_Dsqu)*>H8-5ll<@ z9bxCnc1yKf5Tq}xJATg_b4`cP+916P2toVVzXAygt0sjGFF7eA$?*Z=J168t2%qe7 z*jw~C?dKF8bm?;U(;a#;9FDv;#zcS4V+VNH`=!Jm3tK=H35NyRy|^V3Te18%oSr@V zCg&_r2+ilr71S{;^7+;Od}z_YF6&Qe>BI^r-~P6Q#m-C>3D(1ApJyOYVPf zE*xBS-Mv8y-Z|maziQqr{qp?aP9p<%0mK%uVWqOE*^Vfd(ANC$)hTzM4Sq#&`?wFi z0ota~eS?fb8+I|u<(I86)SC zxP43Hwb7{+)*~MA3#;ubl{}Y_`P5Eg@aGM3{T5BMY+eS6BqDc-!~yBI8Rq+O+jsi0 z(!+ErwWGRD*0}|#m@30n8DR*T#oV(kCeA0DIEmliZlG(PS7KTuQnf}1DocxFDaeGm zGzP@%g?(Fpp&UbNzCmqSF3v?3RPh+zaECyl@5x<<)~g%~mDiWstRK;ooSkRuxk~4! z@V0h1qaNVGu0Wk*J;}P#S{&k;yNgOvMTK_-+?q&gq!{Bu%1K4?c*`LlFJmgt?O?sZ zgTb5Z0_;!9=D!+7YA2fZb|rxz6`?B0GIRu@XKlK@C8=3h-uJ9yzkRIL*(;!4Scyi2 z?;fG9)-QlZWiK!=E{6x%aM>TuS#l^E0un&_M}(aK?mwpb7p7*y$&z`T-9aMEKmHo3 zc><-bU}nC)MEng_Q~G|z7{_4AO^6-_To;?vB^2NiRkQ$OrA~4Sv#$S6o z&5Lqjfs{taykz$$d2&gnz zVi)dNd6RH+Z}r9^{&~-_%|~d5X`@Io>D?LpII$A!SnaY-5xiovg%Lr?v#mARC{gsv z#7s*|H!20m0HOE{rs*=Al4FrwtG!8xVl_-vU?{3a_!fy|&v-|LYXhLua^5yl*!5ojn?xlv^@ zCG~(#nCSF&TQpw&wI}`$yl3wz!>{~^MN{*;;aRvBwdi#1ovp}A{M>})_j6n_IDbKI zfJgs~)iv2>q9=`Umrn!O zFR(C!m21>OtaAxXb#&)radA)N9eGAnRRvnmeq7vVoG5C zPf;OKVs{D%-T&fW$8fw35qTy9GUcgs0;#h2Ft4R0t))#pVDG1oGJ^lz2%_xIO{@5k zCgk;V_8m8dOgJQ!Nme$AV35hw6%oN+DnD#%iAuCeW|BA%`I_8xhTd8InRed8n(C#N{ zuiNWQM?6UmzXOqAG-Qpt$!juUh&T zK;5km(eWJ3(_~lfFpd0w(NGsb01LGQF{-y*`-6EIXvKl%9awWp!uvz`4%-K=^fVoN zz;LHG@|Y4}7Q>#U(4Gl;8L>Q^<8jfJ0ZAB7{)x$AO-x_!a?5fGw*6QhX3@ zo&h7#1fPk0@}DE(VwAd6RfnW+B;NKv0FUXinNf#%>ihr@x5svHFyO=VPq0?q-~O)NS%!caFZD#z$m^*OL7 z>NLY!Ut;hV;LjHxgKWx80|*FJy>ksa>Z$DBW(0S9hto5Fgo|2haCUym3MF1oft?q= zoCMHB+{z}HVE&Z;=&%!5O%wwCVEN30K&>1v(fr{`sh}?3)k~nbMXaHWQT{^f_9>rB zI)ZB|($De~AXQ7u!!X)Sjl%NHDK1FAf6vSJNep(5!C-Qo3-BOq1MX1GKe)6iSl)>_ z+G!9qN~-p56a(eqNN^?TK4JDdmSa{1250>u7J)|3ze!FBi9nNt-QC%oQ~`~9+}&&l z(ob#VaV%=w|4*ezBvDF}X^`?Gm;o>lD>(VG(+PY(FF(hiOVeU}e3;*-l4CfcYh)iv zeHkt(&?pd7kL$VLHu=l5*&QZh=$mR9hT)~va7fSoEp|-rp8@F&EY@6ffAMTic7I|m z((7HA2~1oi{d$d>%GM+OjrI{}WSLjXh<||Din6`R9!X`;Ns{^b`DW*uL|1ewP9H{{ z=9iOO>r@+z2kN&)WVjcRp8TU#M)_@G{Qt4aXwV?UZ{S0<%*cKO-RVgas(}w*zWNIIgH%Xu}kG~ z@=~VR;K|nChlzpisM?=lVmzWsJhlIGxh&<>ng_!5(u_QSH7QMarG0o!qYO9$j=WDy z<%~ky!T;gU9mVbAk6z^$i0Sw_Re2j7mlz`+8QqLlzop}&Yibwq{QAhc*&wa202=vL7;Q-hu3|X9RAbfUEQjX#y|_ zhxn3SMuLzhT>c7U-q`;-6gvxCm#>D+$kucHqK9ezye&ZewKf#EgROG?Qa|n9!zOG* zdrs@(Ham%^9otyA0;GZW|C=tp+86)-z~sMfT7JPFPOT|@$ntQ5OUrYX-t(Ao##pUj zDZj>rGWrf#?bSWfJPUv#qz=<0eQ`5)d5pBs*5EQi#X!vOOPv_G9DlV&BOv_KKS$`| zDqQ0HmO$X!in-w#*_VBC>>G)DBJXLzJ*`b`bCpe>Wqv%935$0%nM&o~pEynf8uJgH zp^W^ZjvbXYJbj=@_uZw_GCyT=N}ScE;e}~Fzs8OS5VJSaG@`SZZ%sg|N~R)03^mN| zXg6JB$L?zA%%Z}F6c;-~iR_5XV2)=BpR?C)Alsg5otIp)$5DP4&PBI!x-Tm zNEV9&hnN5a3>L9sU}}qCkqwwPPL^+b(<}R;f`^6l)yiO7UN6U9h6K{w%ijo;b@td?_vI1~4)Mo(b<|Bn& zHMbn*JKUToS4J|%Nj5ME`%4KASQzWVlt`9Ry6PVcW~8- zD+YMI3avWShODLA95qzDq3Kl&_+*G4vlEzvTHaHzML5jKSAN#Zv%bZ5s8gJ zK(dcoMC|I|VpNi7smM#ID0h?kO`(%gO+i#EG!HXP6m)Ew`?|EmJ?VHvGFzdmm=FCb zUSfT`sB^SG1=dQU{SFtXhjrk{UI<`)!V&Lhr&W5$(VA_(_DK)l+iL1L5AvTOJS!<$ zA?p<)1JGTs&(a7gM?K!GLhyPOi)f>B<~0W#m@n?}=8NkRUv8l$k(5-T|4?IvUE^NR z7is^ac~D{RBSPrdR>gfaBH`K>WG+WgQb6$T6bepdCNp~57!N4oPb{@F}m!QcVw-?gRxXU5#)?CKsl2_z~OpMxV;9+(Y6Ga<)Dy4 zooB@=0|amD3xw-z-bRi%=x=R2L|#9*BvG;MaD)5?v?tD*+HQGZCX3&?TkfDWy~i{a zN~YC{R{rhe4G?)xPY$*Ct~KTvq^$MzPPNA4ob3Dvo+d1vzMWaA#*n*D=Ce2el-ti8 zZAXMOi=~OevQrmG%f94cq4X1u@!4ZS>;m9zsT~wXZml=F8_spIJ}%<9JGb};daEs2 z83XOVms1b!Hwh(r(AbYQ?C^sfZ*%3Kt}Z4d9&N-4Y_QX52U};ge|EFZ0d^ zn1w60y|m}cN(@Hr;XTa9nS8nB2@QTYOZk#7uq&xUwR%S&NonCAs0knEC3`!ZbSY2! zLIph~17?=GXP>T#7ak$@)hX{@OX_`YUbipRt!`9<%KpYc9@enHzO)TN z>0CKq_@Ytj>nOsPllL_sC*a|*kte|3F1Ky1oX|d|E|T(k;!DVhXB@hP5bS;*KFQ{Z z7tXIz?t`@0&7;fBtzpp)!p8h+#s7X4c;7zfZcizE3e-I7+>tKa&j@|*z*!K!%L0hT zF8I#Mo5IC*smtq=O~rp5V;oDM!nf9L<-xM(+-!#dcn*LbyBa!PR^dvCi`(bm09#_F zmj=B@Cn3lg0PBi$lX^8s`VEQFVB?~Kn|%V}rdmO+-6ROuL|b$GSVVO5=bR%)a{kss z*)M|b2C{$|Zu)XHB=L;l(+fTe)^H(OUXMmWrN~$HA4?(MUdCZ*zvKRTKG<`zew@xg zsi@RZRAS0p7NnfbkIE{0QlTOe^6EoomLM=!3vz~ZH?ULMOm=!}#qKeA`2{d+cIeh; zT29Lg{IQzQI(jvz{mD!E>End$v8FUwgTQJ z7Wv!s##os3)P-+adr}&3=G^0L{@bMvtjeuU{-+Pz)pII@EU!{BR({c8so1)+`sdi` z6&eE*2bfe;=$dK14ECATa-bq=^~4LDQD7oO#qWs_UkLqABC!ck?K}Mxyb>AzFn6g@ zx)*!ud8AJy;24=r47|X>Z#=g6mQa13V$hT-2mTRLt4dw!a|)b)o-eb3jvf_duF0U? zt;^GVL{@guqv^IM_7J`GxQN3e6?ZsLj+tC|^ldJ@NTw!xpFZdIZ!ERV$cJX66Oz3( zK`O-iR&MJhG0W>g*=I(KL?3)SH&(bd&jL8oMR&mw%mXufTi)A4})XO4fUy2#7&QEjv zwnOEZb1zlxv_uy;JQj18&u;1WALR@aD61Aq28{p*50MFD4kgxiLQJ%Y z?`_L6-S-KEdkL8oCCEWlT8UNG5DK~W(3~6Z)$tx2^=APz>f=m$#V24`rFLN9BPb_rEA#@3du?g3$e zmuEDMgK;EwR3ZFMd@mPqReI)uW)Fa&r<^@__erUMTk`pMlGHb>0D4Vwj0ZlGRtI(~ z#GnAD&%E%90SdzA)Tggz$2h?jCrU&j!aZ8VK-68%`1k`1B;3O$QwZA~oLG2y!+hfv z_$8$k+tICG_Ww!1OhQW6X?(H7N5kFP?k$kDg z9rAYSn0s+RCL2mSc^)|v@>&{OX}Y(G_APh!y_D1W^ZT4)dbr+5_M_}NQDP0 zGYC6;Vt!0cmVI{k=)s?aCo1YUYj1v|*t}+%6wg$=)V*)LoVo{XOkma{420*he0r2x z2J>aRXs?gR3min)_DfiGswj^l{y8QlM~839W)f&?jho87E8noKW_>mOa`NRoH+DBQ zeY4w(JNAOrDg)uKzGj*`7R!b^m)GFg+>R5ZWtW+r;&Xxa=NdW6shEgRo%seh6cL24 zWg@vMnq0w`EumepiP8RCIX2ns2cg}G$7Ye~#WSZIkB{}u^-Te?(70?DweCV72^^yw_Hc0b zgj(n*1sshLgyaL+Z%A|OIezNjXs~7)GbU{Szq!7Slv%;dexjs{k$#R=NeV?QuokUQ zY2GdksO0mbPUEJ#IN6(Iizk?qGE65Q>`>Qr1}t3Ux$_v4CdYl*+@c0|!l5c;pY9Zj z$?mtH(nLI=2e)Eo%TI5dOdc|FFRsmw44YXm;vsH7A#l_>#=Nxcgn1+b=aS#!T~D?w zP$WxDlnkQ8@V%d5=!58S%lYtfr2B8z!Rc63T z_Gx{)aHN{=pzU1acN)7>(fKITDkv;GKKt2A9vC(->h&Xe|6_wjkteWClI>$z5Zgj$ zThhaqOMy*o^s!RSe)KRJzg60H{f<{+LMj;Xg20UL26_ugm+8yMeN|v}fq^sA)ftj8 z419v3mxr|c8JT~LZD9Wp#0k>&3ag?Yol^HK!OIZ~F}sw(&8YoqID^EzLCjonc<(E+ z_E*Ip>nU2sWDz*i=OI5;gO5ZW$+HNouwQomoLPbY{xV`3Pm_nN{lJGtIrD6v>$AzC zFO%g?V_o}3C(uRPY``_L!{oES?6cI<{wgvrOT9}^^RMl%9{tmPdD$pfiu|&+wcz`s z7he+Y&3jqLwwuWOio~{?5T6=d-spxk0Me!_0aRE6>wb;$ zq~9Quh%#MTd9Hq>Z|GiZXY~X`uDS|_4lSA&&EZrB141JTD=;)uh z6kX<(r(Y|Sq{zehe;cE$Ou8EN_;b`AaF6C%>fdCnXj+Hz%4}(D+CmTD-~O)H4dUt> z=XyLX1#4HPpE?@6%9M*}grzPXl=ApQK0J-Y46-^`e}q0*zPsa6y~U>vT;VVTp7upj z6Dyj)Oe!YNUgOccL@Zzf+Nf;&r3zreBwN-OF3r-|_VhIws%J&yS>BB|KAL+qsI8;r zXI_plEpY|GoCY$DL!J({J78OgH)r{rW6}Bg(!dLmC$~5#SH-(}AxE>Vy4D`AyL`6u4NM zo&nQLalM!>d`kl0Gl;VFPX2=YllH)wn~#Q}8410oJ4$jZkfyo=4e<7yd#~xOZ1!Ef zM*Jqfl6}O~)~PcwAgT=>7YIS$P>k-&E| zJ#&Zo0tNE#Wq^8jyu^HpNRfK|wJx;@I^ftmfA_G6|BDu?rT9hUv!VB+UIV3GdtASwHi|UkSemvE6H$O>Yc;XdD93 z^+x_Ju(A_83zSRDy7BW9?ie7jngRq?&@$2o){%)&zDF<)3z$ZJe+=Gj_5Uo}r|Ek4 z32_dkff1?g-+-D3@K=@4bS8Z>ZJM?a&+6C%Wa0~L95~eOyvpu|O>qQb#o=SGaJL$; zyVj1Y;#J<6A%DTN@_SBJ=zNa})-Ah835VQq>XZLtifSpeqN{NbKSP0nS0nBwyp^Op zlULsDYWOJ^mQ7p=X*J?Mrk~cYY9ZghkDuhRRjiyAyuYwNU>6NcL#6s24n94ndFpV% zm_4nhn0|0DPKmi6>XqH-ht}=f#{hdMvL69vgy}MBXMGGz<59A-F0nN;H2*z1b!>F> z*{ol)>nd4&BoF(14gSgHmm|RE7<1h0_r?kzwP3y&O(-U6?DSx z*y7Hj{P2O0ZB$$PsK_lO4-!v_7^uADesmx$AT#-kA+u0cC*H ze`z3%ZqC=zvf-{)ag=Ty3%MF&>Um*hh7;U)z&@UUm$G|; z*_SE*7ytPu(hOIzMx5A`K}6%e>F$}*s}?2gqx)0?4dX!}fdZeTy?m_H6;^A%P25g1 zcf8el^qDsL>$i-H5%E33A|Els`UTi#ogF>i#i>Y6SrLV?sVIM&2V8!%Gx)Wa5nLaJ zC+JO~7*b13_sq>29g(LvRzC2o6M58(H;uQ_d_5jHmy4xK54F!Z<=9yc#+!*xL*yzo zA^pWX;Ula$2k(977(Aw+&AMIe!fKosZ1sLM?P(h*JiqulX6%aFhLQD%qB-t6PE9H) z$B>cGv*=dyyOEr>fS~|5?BfMH>F3@ecsPX>Nx1H6nqQ#3wd7*A9Fx&3wy2`iO!p&$ zzNgpB><8dQ-BokK)4+nEkqg?lHLCf;ueB14BiCc-=cGP|5#1iU+X1u=0_Te*NgQHY zJD9)`oZBrv7R0y;I*(6v@}K&mAMXi2h^RvMGQ3n!WoER%)KTre@pX)q0n1pdW~wS3 zrqPzB=V8+4fG3PQ4USM4Cl&Rc$7*~5#ijEWtznWahn*>46B5HR1aG@Dz>XukKJG={ zZ0kizs;Z0A%L^LJ4@4Y#Y0f+f^{s_s4c)8@GfS42l3v8H36 z+++f>ycXe8KDtm&xiE@4HUt0Gh?KO)6j+B{hE_dIJ78Zh{DAzPoSPATVgc>A=`qN3 zwF;P$YS!BmP!>TfvLkDFDPZsG0s9AiG)0ooQ>;HY_*r5(Z0cvo>(C#JfXi$8{KRh< zc8(A$-BQ_chc^kQFvMJ{n1+SdAyxwA6+RX?!LZv|L%2u|8 z^B;=&uf^#SI>=vS(Y9JRZ||1oR5mv?WxXeI)tDF%`xsdH^2={Q`Zg+`Oj_CoydOMG zijQUkBx9#+$%4DcHTjVU-!(d32ZxjB+|E6hT;1avs17#1HhM@Lzowq!fT!}VG%Gbhd&ma^PWbjTg%R7)6T)7?iYnPHD|MwRw=UQi@lj_$Tw)lmvx*KZ@lJ zjeWPiQYSsW|G^^3nLj&|bm$Wu=>t^GVQvEhuR9S-2z@@SQ^SqV$(~yqlWcu^VlbzP z&^ABB)+)^?!<&y)Y} zsBb+L)A5~EYMd0}o%6&?vBO`i@x=q0xd}e6?~P$I;N5nk zf*!ztUrdMKD#M~JV(fx_<8;UGLs?l z<;m9Rf**SUrm=F)jTX{Ku!iwo4YN~!Fd;A#18{w&=nJK08k;y>J`ABSf z0AnPe)I5BEub-htJj!cFJO2EH`PuWgC0lNJHm80*=E|pG8!5-r7c=_dWM@CT;uF^G zdPu=1K0okW8ExLvKI)5`*B+2Wp8R>NxwMIFdY31&`SxV+Q+n9*6znE)4++JzmxYr& ztE&W=s@p}99oqhbr#S7flZ(up$*93d#r9%cp`?6cM|sOHxsv97q>9e3;}*|Q6ScDY zmU%rMtAc+{>k9p>uKNFadk=89x^{m!MK3Wr(MAcP_s$qbNrDiG7QNR*7d=KBf+3IS zoe0qhA)=QN!jR~_6M`VR8UHQGdEe)MzUQ3peARWiF0R>otvze6b>F{ouf2Ue-u03G zD3QlM4w=+9bP_&wdwWLf$H~09q9-;cGfC)q9bUet*+t%Duh55=#F_h5`C9X1JNI(1q(9FqrXYu7Eh$l*wWsH6`7T@g z3C}8ThEh5nrA4K149~bI`=^U?H*s=`660s<R=_d8dN>ff!+XmRI(DU9r3B46!>#14qlB3bea_t|)O{Novx#B00F;?>um`_5O` zr=C;0=(f0-=DD2SOC-WutYC&w=uBS7-u#S*3=CblxlTN0URf2JQro|zp0;D<`zXM* zxJWwgm7Ro!9qyA0FXYp$m>z41nA=h6nW^wS%PLgGNvQzsC*mb-d5`c{9>%WpAz8%k zPP#Q=x{cpMvBK+K0lri}_0h^R$zXf*cLJV6Fa;TgU*LRvin=cN+6QNpaAmKEeby0s zIK%W5^5{FsOT1T3TN6jVnc&5v12IHNv-928*-un1$X_>Vy}RL`fu=q_ z#*D48+;i8E`k|5@c=zRsF{>l~*PMGqPe2`L`Q%MYPz6#28#%qNv0mSDg35q7fKV*Q z2m2KjPsQBInp5<5F8X~huJ8H;oUeU7+C;);OV=u*uFG5DEYI>+YM;=jg zj92m{vIIpH26pt^Uwq?DAMcU^UAjTY)~3<#{v8Fps1Uxd?|ghXR6zA>oK(V27nVJzb?hL6!zL4SVf$ZQUqLa1i#&PEdJz`foF?K|K+qb~>}jiEMn zqUK9duhyXepPUeUJx zrZ`VD!t`RFA>iWUmh5_{$2fUhxN0FU3sgZ9U;=yecr;H^u&+7s{{A z2R}O&4lOgm0)}b#WW`I0JDW5ggjL7gV-*(fV^)klT38BK8@STWls=ZoA1vV>P|8Pi zi|Es2(4osLl!K4vG~7d*$xGw4_*zsXQ2-YIDQ7)2Y-CwJp zB5T3?HM!7DD)lvZN}%J|x3B7HV$$UsT}yEI>C|=gC>qAEC3p$XE6~E?yx)q><`{T2 zBZ9i&RBLvlR}bHgZx9s!8+md-?+Brqlh4 zhmS0eBM2Q?h>HSWiE1$RKCR0wyCal6-P!Kmg(Lr75W>J@(=WZ%0oo-x<>T zTnu6K_yx+w{uY}PD`U&s)l$q`9?rZfoc#AS-)R%wT!@FUlS-2^J`I69eUDHN(^^q1 zISNOa2`QA325s|PAFHo)nCb>!TX^$AGGI1r(h@Bbf&}Krn(18hm>7*R&xY2`92yNK z|9{OB6eRc{5K=LR-Snn>OT>6UXUO(8X=?B`UHv}X7h`$t;AzfU@C?@NW6<{g5Vy$` zO&g{q;92U~`_C;wsnt z!Z`QT-)MU7X@c=ZEWzkIXPP-XSPB8%#*Lf`;SL4buTAna(p!2z>!`pgsn2m-I2}Kf zj_dQJ*wMCgBf|7Rx8I$I(QJ}P&P#x0S&2_x@!F>v9~zJh+?~{sKcIBvy%%p~=3K5; z7{;>xI^TKuR$8N4LWOO@UtdC^10gwGvWVkSmblO3RBe_AEv=trSWrC;dp_no^~j{! zu8l5kM+}V%idMTaq-(>67A-{^nx65Z4Igeq!c4$W*oI$2d|cm1x57XG7HDH;3AVL8 zZYOdkTXpO7trbRjqrvU>o=RUCNuE)Ev3Mp){$a{E{H7KMI)qUcYE8w9>xQH4~lS0lbpL z_TA{&@yO_X>5CT@+u?d71GcQ<%2yxh5N*&Jxy~2$HfO!OxYaWMfcF%AlZn`?@9R*| z8~UWCfe<~*n=)CWIUFOH3(cT`)AevMq?tDR2G!*r3)WvWE~OWF1$({TwZs ziY1lhgG6p@J>hj-qaFz%J##TtPkC{6$fp{u)-|%@)BLRid_n8UIfxCEXrui7{QM9H za>;)MJ68aNz-*LVcHGk1L1c;cQ4T4F#SYw&5tH}TW_<-O>kOqEUrJ4)5cqC~=jhgd z#6lGC=wj^GZ|b9;65^Ai3m=yqhR>hBV?U#ha&lQ;nq>);xd7~Y(ii;e-zZxm2UQye zmc2Ybj4}8owXCj5YM*chK&U>~TFeLVP%Klx3U1{e`iZJutebwVHVnWck9v!9h9{$w z0)8NHU)7>%DI)Tml=Lyr7jiX8F_N3OGLbE4E-w1W;+se zE1yR!wdA;*`V5$9=ei}@y*$fI_#039Y&~ek zC?A@|8FG^Q+Lj9hpUnOR$*a29h!C9fw<@3y{VTaL0C+bnTGL#p;|K$mfV0%wHml|k z9v+WZ;xMK(N48K^-1I!(O?Wy+xvxtfIW-v;<*$2W~~psUaJqLF?%^>vPBh zKoP4B_-L4`JehUp0+P@C0}tJ|`{cI3`aU*9cd^IiUZ+g~ zf()NZ?UcRs#p}x1GCHdol;0Y z?#zfNB-kLH@?wZeNR@EH9T>q*vrIFw=3 zTGpFvoRU|lZU!2~E>b-Klf%wLwvRXKml&3jPpcTkU3Q&lUsolcNn;fcPQ;lV?~xz! zOIjS?;f>JS92B+*Qxz(crPH{>d_$g3F|Egc{^%t18RkKt$Xm$5EaWjUUUJFc#sPL> zv&r&e-%D}{L)JOAE9@&>dFqfI%s6L^IMRFUYCjQkDuGKiaRpf`WWiaT*#k^*R0yyCIHc_pE+Q12YBQ_)Jh zN(*ZE?aXtVW&5o&_U$r0^EyEm-+_3`-goou=O)uFQY81umax9P1y&v>X|Y`E3q41#2r&KR$Bsb`%=sf4u0F|Fp8#E~EcY)~a8nh(WLGe`z8^sR z!T&w#ku>4NodUOkZ_i|Ke`a>AKfbMc${^*W1+^yD2C;HTIUC?S5XknK9y+HFwsR+b z@IYR0N5eFB(?6b2unqr6PuOtD_Yt>JUG!44stcV_an~&Sr_I89(42d|4wXiBb=`i zvHkkU`hEWI!Mr>yekSfu??4+$-mB2*!vB=mYBf5S7GH7i$^o)S28xj*mMX{9Kb z9&7#)`CXp7Ag$2(_i+i_Izh)G+k$4@5A6h&e==Wozf4L=%BGQs=j%oDam-HT0xKYv zd^0D$9-lL$SD79+A=YXU*(!%2joGa@WX9LcPI#>S>}QMi)FjC_PEt5MCsC}Ovq7b8 zbkft>ekp~Cb>X7sv%%0k2YhR|f;HXkf~^_E`%LKKi~YmEMHwsH6%p%0v#t$0F6~SX zlPN9Wdx7>i%ZLG=M9uadi{E47guJ_oO71j{M}|X>N~OvffAg{WQW_vPt<+j-XAu^%9 zZ>2V+xg}=z?#ZOYuc4H52?Rw+#Bh|+VB~Go7em#byN}grt3W#`DP8cU zFpLLWSTYygix;Q4Q$mFtQoS`#Ez#eC%f3orDEGcF?TEAY!<$#GI>uqhj5x7Tlg-lW zFEg%Bf;Uhj7vOR1b&-**Y*tR=@Xl!5hs-DB{gjZrQ9tV94^qg$05{T~YmsS#5^m)8 zF5hQ5P58ZkJmacl$GUmb0d*3DQK`voDa2Y7dH;(%$%=dE`UFRWFmyNIrf`=+T*YzV zbR#6r{abfj_OE;BRZ7MdZES$|IDz^bbE1%p=#4`?#eV#RD=XzLxzTXMo6gmie4BMj z`@clN`m4$_$KpmvG?adzX)NJpC%0i|L4S_lsjT&Dx8Qx`D^-}P)a+*cB+H z69~<>&zmv#?dj7a;1{JhIuJP{d|&w0y=AwD(Krc3@H2abT`I%E2j!Rt9Fh>_zGF5q zI67OfJOumYz~N`QXo6$U(#AkXoe&}hTu8A8&A(VZI>!1xEurgoA4Y1^T3tSq;9QzT z{e}y7{KxHG!YEvF&iA-cXtWYwek2MGcwDSpcx!vszp?$qfNqtTBkPa=9=?3JBr>f6 zL4@~}y8N%NzZFqr{Y#NeKi?G%HDLHk-bN;HJ<GZ1K|=hK=;z=_!s| zLPo1O`X^8Nx`2GDuwi-yZO;dYC3zjZKM)IJTAdEM327UekNnWTc2|-2)x{95JNX=sa2)`v4SipEsP|$EOs>)Y;9W-eWt4pq8r<@0^-IHOOVsR% zh9;f5=I6nufKlq@3iq@h&bAw_hyhd+=mOjF!ekKbM{1SSGg??Vdz2zCTnlo>}J8c)Ii^;=XbJ-t%I(`n7 zWHEkMyJQe#+mUkH^(@^tph8sq1^jYVD%HX5K?}k!33{w76D)(sMh}fU{YW2Ndlkt; z#I|{d`b0a`FTu$7=E-Pqj?H&D3Y<;c09?X|PtetclI(L zlLh)?BVv1UKKzC|mfp=xXWOMJQd=0qWboQwySFno3ZLA8Hu}v4gR}!Yu+~m{?O*(~ zVY*4vh{y`H5}%T`LI9Re0SX@N4zD~Qs{O-HHDG*+ZV3uw*&jzO588#N4W$Y9@!~Rn zucs3Q_IA>1q+a-gV<{orLv67adzWD$mPOr3CP=Bq3(t|C*w^yL!_`M(nzPXAAC@=| zh@%UGlnia8sSdkV@nGsFA^gRVF-Gt@Gj{NTcnpl zTx<>5hkPPE#uphS4=LpPgLJ&XnwPbyd1hhu*e8fe5g}eTFQH1)# zTjP?0QSD*+ykw84U~ObBIdSkl<1Cp#Ek`SqEI>%LCQ;k5Lz5uZk zi2O>EPp{!7@GC;Y!q~8%5p1<2Nux@gI-tur+{2*yC;499)<&k^$6fv%_T8HbR(A#W zR~Mk_DV;xg{PLtHYXAA9$`O$m`$vexFZ4)QJ}y7DiNs=DQ3? z;lFdVQpor`GG3eYF!dIY@N0gf1a)o@!#OzxPp3i+(2aM}b0~*dZfndCLXe1f_b8g^ zy!aheUqeHsd*}qD$2!kTi5{1nh^-Uq{6kH>2z2(D0)PhqSxGPuu>Ndoy9nXs4LlX4 zy_@!sXXq4&@&vf#i(rXkc8-ULKUbIs4I^W%gI^o^!MZA6=5508`zT=zYibccmfV6o zoCOm055O~nfwLCJivkieT4H(!_^iX4*gud>7+Yo=0wX2+!XDHBn%6)`2KDMeji*0& zE0N>xYtUBQ0y6*x?sw^Hb z&d2RUjBv|sxlYF-+ zyK|&3=&%8vxPtfP+b<+BbY`@u=%C*>Y!gnF(X%Y%Anx4|NNjH)6>Yq>R4P?$pIHXtMhr8TEyhXHPfU1mX9h-}5}Wi) zcGfV<@*^q}+_WGHQQC)VLN`YNHQ9}eP5?$k9s3XL0KjJYU+TuK@`PFeln9yc7JYx zFOK;A@;vTY!+}oLqo$go<^!AqGM4<+{Cw^~>B7vak+spxVz&&;F_DeRPJL)k?&sPi zi`Yo*vt^lR3Z^Z)$2&wDGb&YWn+IL1xyL_AhvlC|M5vkNZTI?8t@JS2T+NzmMrLCT zWt*#-xMgZOU+r(9bGX^RV9qu8+>bIv&z>%4l&G8DHBd(oA(F%#KKa1E4y6m8nVBbTa znyk7sr1#5@fpS!x?AX(v;!G}+^t?LJmJEs=UGmV55H)8LN9a@|?xaHxe){y>UBa%i z@WvuyT=Am*5p6Lf;_Lno&{jeSKBgR8?HPCzv#L>WbFcmbP>Myurc9v`$aMNN2)Wa8 zR2MzOr-mW$5ov$v%H8(&|&4bHg5&7Lk$34N~nZ4c zhFk-$ok$n=X!SuC@TZ^qEr6;s&n7l!OjNrMn^`Sm8S2V{BUQubuvA7 zZk0)6n4kbx|A_nOev(echJAMIBbkBI%D`zr;oz|Aj5y_G0cWpFX{yZ*Uc0#+%brYl zejX4Qj9HRt{_vPq`#~nIuHWsu0}!Q-ejT3+abR(d`1<>LrxD^t(&_{Uk)Wlq#d8JUtD>R8ET9o$`U4Bex#R{*)YzwB@1JS`+ z3Y|MZg}vDu<^?m|^SK*l)Na{U3BMz~jS1)kx#vCzwHe}h`dHkWIz!KAxXi*N?8+Gu)WyZKo(Lb@+gzz{uVkVs z<`>?Zd4w#3_ozdrd~g#Q)riMNKz-O=aOo%12IPd z@o!qm@9~lkHlXQEGR>)m_F|YK&cCe{$!4H1TYP9p9Sv-}lA9{%=d}^0yFO=odMUWj z_GbRUVLk}d+Qr{lcC6eEWYICJ(l-3Q=qzV=CRjsCWcmCiq80sg?M<*TN*`jn5QO=r zY+Te3k%!Zq0mTBXGYxo;C0pmNcM?*$LIuXLyWtlB!?k-?t?6I9IU7tTr+j#Y+%gr1 z@kvXBS*8=jG){BTpuI6p#DQdkLfl@%xozpwS$#I@V#_=(r`QlktPG{ZZ0CVWol2@g zcuLmKH_3k80y%ow$PdM4+K_YHyE1|u*4ruprNdS%!BC}_gW(@TT5=us^xtV=x_zVS zz6n}@NIK2rfepm#7fg>Hm7<#4C?2!7a~rwNN+2;2tx${nbblC(+`a-4L1{9tuvi%e{THvFiCh|#{ zyo4`AQX9BG)``acArXQZTjjMES6-)XFFn(Rh9w)y#Z3ZFNZp>KeyEiRbGR?+zQ}al zg|-FSdH({zoZVE$z&*ORvU#S)eK~5Rx)z>?3N#A#ieB%I6|g^`#U+PCLCo?Y-#pnT zYkj2})X0P-h8QpC%ywIcbi;l`mJMh_M&hK~u^l=7gksm40hPVvF=$?R_#d&_yM zg&MAm3^&;Bao^dU98&{T-P2GjZy;2eQRdDLM4Y0#{I{h%j?P-oCSStjh=!<`zpKz7YzL)E2-?CL`f%_ICDk6M&Bj}4cG!n+0^NNW^3 zTHnDz7jLL~RYE(P4FYEs4nA3#4HX-bXmrah7u5&3xzymNPH~Uo?w(&g<#GkNY4zXy zG|Rl8FmiH>7OM{i<3H@C&41W)Jp@q3YcN}A;S!hFW4oNu>UgeIMH^FkK0UjRVY=qZ zYg3`VjKa}mid|^Lx{e(BVsS3kSeZye`hZ*71K$gZN1j!@CMw34trDU@LGLb4#I>Dk zT5r&Vq1f0lQF8N*2(0pH8%m$Xq7vBU*jY=UUHKK}+XK5&?3EIO?}3L(H*W7Wohw3g zztuBVSyi19_4Z~UDcKUR0<<`s%}SW>MOIaQ)mMGxYl_a!kxnnVFp!oDEFl%_7-iT` ztBn%Wt5~EhvCE$)7&AK>0HbRSNZOMJv= z0b|U2llBU(frV!=Il+KXs?<|nD}eZMiQ+34`j*<2&O?ZWEM3BH0=7IQz=iYZ4V&ij zEq)sha?Z+iQN*=yUdV0;RHq*C_CKtL_}5;E_eSs&p011`&SN4LZqe-*>a1L{VPKc~ zcZ0N@_?o9 zvsz+}0N#ph7^|0x6seh9`kYX)_CERSTedlzppQF#s-rgWtJ}$J8u6Qt0&@)Y!4lCe zHnHuL0;2-y&wV*RbQX9O;U6)^zod3f*o5yH z!7eL@w2aZa*gpYtLZ%&R#=TUb^@=_l@p)aSvRLmSq~STdXdbWK`ivq-Z(sFEo3|I_ z0WL%vV3`wGz*;he8Z&OMtVH3(x45x}XUEl=420EdgL1)2i~w`Y?PgY@$oQK3(~w)P zF6NXMKQIf*DjT`!(JK^Hc|H{Jy5j^o#~umHlEZmPL_OWI`}eQ*uId#iuq2{Phljj| zl&0_n&=xdI3PFlhB4yxI8{!)Hrkfocl16+kFH(n|VBFg<&erAph{H1dxXU{BERW_g zCPd`Gd$fSl-~?{}8!M&xqbuWDh5}C#2p|7VQj~r(;#|f5jf?)4syV2Do(Tx4|IkI^ zKV}IV!2S%Z z^ga;NL3@WdBy1-{xVAB>0XhbV7X63w_g}v@80Zgw#qb$x!7w`<|A+oc&1rU?UUtd) z6p02?^o7SveAYO(vw3|#cvb1nUw3aAL4eTrd+^t$=ovVnhFbiybNVsul|J96s`n?| z-bs^D4{aW;oq>7K@a7~X`<2B&K;RFHmsAr&{9x_W(+1yE==}I*q}+-9S5s^eQKd?% zJM4)M6Tul4u%iiwkNB%V)6B@Yj^xVf074e;wD?UDHp6b)&z}V>ys&hBVliq=&1BZ! zT^Iw67DQGbM>{@^asU4u+{eWx<&WRxF(K z&_;)q#2ZvS?`4PN`7Wvr8&$A9qMe?A=z~&O9F?XzRrqFrS9*DHRZ3cUU^9hcZj3%Q zvpDHs9cGYZRyT$&*C>-#x})BIW}5r*T?%i4015pl7zf@{@VqXst@)b0$(8KofWD$n zKND=+RrVQZ8ju|zJ;#@d^B{U9hrfFs~!Q6-WwH_JXUr(lbf+>k8=@lb$i@||3d$N9yJVB{lv!Uf;aMYj+Hm| zEIqhXj7_ASp2IO%akJ+Z#~W*QiQ;Rghmc$w=bJ=Ngy=OeKkS*73GsUVLh0P5faMWw z=bv=yTBqJ^IJ}oIeNMu^^kNW($6WdW-t(W;f08>w2VUzfC-Th~vr{~(HH-)B!(HP( zi#!U!1NbkM8HhLl5*vV_QV@ERFT>9eh&oxS$y1m<%9-sVhbcT)5TrGFEc=s%F|7IUsy z_EMG2croZRH>zQ97jzrmfQ6QkN7dy`1G88I=VfECa-eRie|iCqY9HfIo;jC>dU(&C z&e64Js#a~KE;LN0A!;NYJ)k$5Dvoa@nHEi;y>|+E6xVinpB-W zAtmd2_;WwO@<{=6?oSsvS!)DrsNBAI)|GaLqAZ{?OOE;UaU8fk!fk48fc;y1uZfx= zUjGa7^^v&4uSZPqFQag=wS9&oq@r&Lp6Yg0Npm4rw~3i)>j;D>vn?C3O_hrNeMklQ0KEj}fpj(ju^JN>z000sGCl8QwkTSb}`}Hs2|^Lk5Z9 z%07Hrmo2HJ>Vi`|9yT*FuosHX-RAxpRtxnSAZHqKse5 zW7f25l;P?^x;2bvpK=7Y+mByG9hE9-=V3;XcDu*wOgM6ZqR}<1RaiKr5+En zw9jG*pFNo_KLx5Fo1gS(Ud{iE$@r(jM)1pzNWu4tfNXi0Qh7&l$+2 zqdlZL2A`|HhvHHnf$pC58OR%w0_rx9@|MdCXkk?3a8kbAF;2mdJvzgERR?MPvyViE(m2_^-W|$jBl%HOlh9 z8K};p_bfvX`2~<~kn-u7nPvdo1MMZC2MPNOrYXU1&lZ*zYJC2Q`H5>w$d$!v8W;^w zeO3ZgpN-(l(UjC!IFgtdglx6R#nFXNVerYZRe@Ef9YO27VsTxoYjIPwB@FaXCNJD! zK_C^1gch*+*jJ71Fh1Ydz2f=Eh%UyjK#Or<(n&21jHuLEk@7hbP$+fF_TBAPrC#{_ zg-5|9&SZ-7J2B@698~>Y4gUad-LJuleM}2`rpfcle*DLZn*}Sj6_>86PKosQf>Rxe zDV^OJ5^4j0y`30y9qUwQxKUfhm;b*!9RS_4_tRy3471rj{$0PcAH*0?FC`R6$$O8b zZR2CwD=YtbaJBb|>C|oR7Ej}5$$sAxQ=d$_b=m>tlSMkuZ`*a>Z2~YMNA;&)wFAY& z3;JjZ3hn_oomklg&8PP?J49S%L&sJyxp+{v3V}a{H^?F7w77xKsT6t|g|3tdCg5ZV z5h!%PlbBMozxV6_%LyzM1lJI_eRITd%SVHjm{}=+;7(i|jSKs4on5Ie&b6|6rYeT9 zEHJpU=@sth!xeV4G^RJvp)LHRu|C+1E(zxdbN5*Q3(VSUkxxHpXOZA8#jVZLo?B0s zX`JGu?|96*2mO}{8fx5uS zR@thd%6{^A4N&LU2T>_5l|m*YzuIo|H*cOo97NIm4dfI33KD@(+yvnDi@&X*zhPrQ zDEsA@0U-V4|2{~+vJgcY_b)iV4gC%0<^I;@g#4d!7A}c@_uh#AyZ0ZRcx#PO2ER%e ztd9ujV0+X=pXp+c^D05X6-BMtckfkYq!aT>reHfHJ{Gg$URq~=KjQ~I%(5X~I6XD$ zqO|nqH?%Rg!-Hbj=A}UmcwnRh??ojv;MEyMA6qJb3i6%t_cm*_OZFbjJb7a~=p*RE zEZji;@WI}$Gj46^%S2Wu2uzen&|_$b{V`}iORup!7VwBT#Do(b^{fYmy^N*^6OCC{ zkc~ZR4Uo0!SQ>IWrqD|gT=tz#h43|zE*YQno=Z83 zeenvUD$2OLnN!LCWT*YD%I5z9z7J$4VMpbhZYz`ZzM(0Q4t*}EXBTnWMewuN$NYG{ zKuz8S)0pRV&Emg;`HvIN>Wwk2>J-|3*32a@ta^~97qj?0mz1sN@EssZI4O0utAdaA z_T?uD0n=Dw+XW{h9szz? zj;I|I-*C?jbjObT521f3|L?AA{*RW}Zs-34Lk#+VW{5rc!8eVf{U`9R@P;Hm^k7uq z0P9L{&>f3Up$|Iwu6@09dY9h=^uO$WMO7F zd}=Qnz))B0n393w{!Sc0sHUKgoqx#020I-xlkTt|l&J|DSs`9m-!E0WWTk_EcqGTq zLqSU4w*JNbH#C*IC2_&Tubi!zo^iE7gk__<0?2bWdR_4}3h;#Q(g-_<7G+^?7&=^< zFR#fH$OphWXV;C?1X!hSF;v~59(;d6$Zz#k+cmVyd?QkA6MSDtF-tD)ZUUI%kt<6- zR~B2}!`@o6=;c*AdwR1lPIrv?NIKvpnPjWBNK+O^$dzx)ITMHW#N+6iMPk$EmdLH&Dhyw3MMyA*t8~5DRK<*t$c1_oShS)b2=@7(C7CQ@L z9vQ(_?>6{@1aSLT?*aD}CiT6c;O1WX?&qOn&Xp5SEV+|M6Mikkt`FcnmX(!Ds+52G zHnU6kWuXZP`wE`VpHiXuI6`C?-%AD!55V()1nZU*BoHLmvxxS(33$rEqRj<@wVhyj zW!y(ZY$TK+%iD9>a}QT%Id6vyiQqT&`aBl6gA^Tc(g6D;bZyb>-zrC&_#1Dp19<*Zyoe8TS{B`r zgzr@`!8j#5*D*o+tdOk@{~{s~>|eX^pd3+x*_#pFYM|Z6%&)F!<^^ndX#AQv?|~J5 zL`Y6d-$qA}Yjzr#3tqg_J&^lkgLarKIOOF(pHQklIm_lr$^W>%D5{Lyf{I`2X*w#X zW0lO{5lZzvC9o&^Rt`=?2EH#eNa>+cGQ=cZ%gWnS>xnu(Vr6Exs53Oe+!mxQNYCX$^vKN)32$fHU>TEa2PLV zfw?>fKNu1xo_gc2vj{Mrouxj0?Gu8VA-$IhMRn7q^~ChGOGy=DfZG!Om$bO-LFdd6qdujqld2efMlxh4`0tu(+?^jKsft(Lwo zu)a0#sxpvIH!C&8GuiZb$7~kncm2gkGOZnep*=ERjF7R4BDyw0e%NW;_$**v{e~os z6bF=C3$A|F-C!`YY+R}^UuBRqyd^`BOQ+o>7{B{pyEod3)HXWFi zu`jqRK24YQ9o+@{#wylGh&%n>C;;eBTMdLHw$Emfp``a(L%yXO7@iX7W!ixVJ(ZOu z9z-R6Bj?yn-f8+u7U;C}q1f=_&kQ2_r2B5HD}C&UlF19V*T2y{b8o;);d2T zah(cm&}DF4-l8C7`)FD=8U#3T^Q@hb@yqM>LlS^T4uH6@(1WeG|5Swzw*FfcI(%(d zu$hdlTE;Djx5dW|=T_9qU-$`y-@dnWWO3Gc?Uv@$Wr=hhX*M)WA4D7J@9Ud)b@{2W z`obG4mt;{^0V)_!GIgWZ=i1*2&go&*zYESe+-sD9_G=i190q>WOTo2s+?hKHa*m=& z_c0aTI@f_O5avw!pFy|h-#|A751{cj#u{XQB;u^b`&!rdtR>}%?XLoGu0N0)5X3|O zC16+k|0xu||2L`Io9wsL4WQ_Mi{k$!iVi7Lz#~!uzVu~n`F~%o2Gqh`9v1ff$-?o) Z)!1^E-t|d$#1-J@j*1qnT*(~%zW| b.Idle())); ``` -Notes: -- Each tree node is an asynchronous function, not an object. -- The entire tree is also an asynchronous function, not a static object. -- The construction static async (b, c) => await … in each line may look verbose, but it’s a small price to pay for the huge advantages of an asynchronous behavior tree. -- If a node needs to continue execution in the next cycle, it does not return Running. Instead, it suspends itself (e.g., using await UniTask.Yield()). In the example above, this happens inside RangeAttack(). -- Since there is no Running state, nodes simply return a boolean (bool) rather than a Status, which simplifies the logic. -- No closures are used; only static delegates are employed, which avoids additional memory allocations. -- If CancellationToken required it can be added to Blackboard object +Notes: +- **Asynchronous nodes**: Each tree node is an asynchronous function, not an object. +- **Asynchronous tree**: The entire tree is also an asynchronous function. +- **Suspending instead of Running**: Nodes that need to continue execution use await UniTask.Yield() (e.g., RangeAttack()), so there is no Running state. +- **Simplified return**: Nodes return **bool instead of a Status**, which simplifies logic. +- **No closures**: The **static b => …** looks is a bit verbose, but it provides **zero memory allocations** because of using static delegates. +- **Easy to debug**: Breakpoints can be set on any node function or anonymous delegate. The debugger pauses correctly, letting you inspect state at that point. See the example below. +- **CancellationToken support**: Can be added to the Blackboard object if needed. -For a detailed comparison between UnitaskFBT and a classical FBT, see this repository [FbtExample](https://github.com/dmitrybaltin/FbtExample) +![FBT_Logo](.docs/ufbt_example.png) + +Check out a Unity project with examples of using both UnitaskFBT and FBT: [FbtExample](https://github.com/dmitrybaltin/FbtExample) ## Installation diff --git a/package.json b/package.json index 7fa24c3..bded2d7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.baltin.ufbt", - "version": "0.6.2", + "version": "0.6.3", "displayName": "UniTaskFBT", "description": "Async Functional Behavior Tree implementation based on UniTask", "unity": "2021.2",