From 1df473f067a90724cf094a5076d7cb196443350e Mon Sep 17 00:00:00 2001 From: Jianzhu Guo Date: Wed, 1 Jan 2025 18:10:01 +0800 Subject: [PATCH] feat: update animals model (#470) * chore: updare the animals model version * chore: remove duplicate line * chore: update readme * chore: update readme * chore: update changelog * chore: update changelog * chore: update changelog * chore: update changelog * chore: update changelog --- app_animals.py | 1 + assets/docs/changelog/2025-01-01.md | 29 ++++++++++++++++++++++++++++ assets/examples/source/s33.jpg | Bin 0 -> 55047 bytes inference.py | 3 ++- inference_animals.py | 3 ++- readme.md | 3 ++- src/config/inference_config.py | 10 ++++++---- src/utils/animal_landmark_runner.py | 2 +- src/utils/cropper.py | 4 +--- 9 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 assets/docs/changelog/2025-01-01.md create mode 100644 assets/examples/source/s33.jpg diff --git a/app_animals.py b/app_animals.py index 361044a..ea7326d 100644 --- a/app_animals.py +++ b/app_animals.py @@ -96,6 +96,7 @@ with gr.Blocks(theme=gr.themes.Soft(font=[gr.themes.GoogleFont("Plus Jakarta San [osp.join(example_portrait_dir, "s30.jpg")], [osp.join(example_portrait_dir, "s31.jpg")], [osp.join(example_portrait_dir, "s32.jpg")], + [osp.join(example_portrait_dir, "s33.jpg")], [osp.join(example_portrait_dir, "s39.jpg")], [osp.join(example_portrait_dir, "s40.jpg")], [osp.join(example_portrait_dir, "s41.jpg")], diff --git a/assets/docs/changelog/2025-01-01.md b/assets/docs/changelog/2025-01-01.md new file mode 100644 index 0000000..ad5263d --- /dev/null +++ b/assets/docs/changelog/2025-01-01.md @@ -0,0 +1,29 @@ +## 2025/01/01 + +**Weโ€™re thrilled that cats ๐Ÿฑ are now speaking and singing across the internet!** ๐ŸŽถ + +In this update, weโ€™ve improved the [Animals model](https://huggingface.co/KwaiVGI/LivePortrait/tree/main/liveportrait_animals/base_models_v1.1) with more data. While you might notice only a slight improvement for cats (if at all ๐Ÿ˜ผ), dogs have gotten a slightly better upgrade. For example, the model is now better at recognizing their mouths instead of mistaking them for noses. ๐Ÿถ + + + + + + + + + +
Before vs. After (v1.1)
+ +
+ + +The new version (v1.1) Animals Model has been updated on [HuggingFace](https://huggingface.co/KwaiVGI/LivePortrait/tree/main/liveportrait_animals/base_models_v1.1). The new version is enabled by default. + +> [!IMPORTANT] +> Note: Make sure to update your weights to use the new version. + +If you prefer to use the original version, simply modify the configuration in [inference_config.py](../../../src/config/inference_config.py#L29) +```python +version_animals = "" # old version +# version_animals = "_v1.1" # new (v1.1) version +``` diff --git a/assets/examples/source/s33.jpg b/assets/examples/source/s33.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c76b18e74198d2763483728485f8c8d4c155923e GIT binary patch literal 55047 zcmbTdWn3HI);1ixrAUF|k``^7;##you~JIW;K41p25)I`D->yIv0|l2io3hJ1t(bW zpuyk#&pG#fo)6E5=l8D6?76aL&D!hQd(X_Cy=U%b?p6SO3NSls06$#U?mU|6_v-0N_&n*FMY+fd3zRtj~Xm@_+vSdrR~M z03gC@@c9G;_~UW@jd5`C0Ga=z=jY?g#QCqsOx*wRh;x~V_g|bt_#c~pW%5sQw~8yN zA}T(WgN+~eg_(HibwDE6t{~Tpz;qD^){{7p3 z@c(T8!T*)BseeiW02t@~$5(YdZOIXp#c4|5*})&ylYsx){a+EWrIot{cF#3-m9ubh z^T3wrD=dER?cwqd#uf+QksCHBEYA4{+x#2X{DaN^jR*c^qpc~AwOPjE#}>9`mRN3B z2zX)sf9P%g5A5jR`A@$8$Uo7OSUKrvVYi&vl?k8;umV^BcmR(9DgbSO4uBi0c?^)l zVjh4ffDiBzs}aVQ+5g>#(7$}h1DpXa03U!Gzz$#oumyNvJ;-7;E&vCt_kTP){VR_b zSS*0`DF6`or|hxEV&!b|KV|yjzdGk%0D#yj0D$-9zdG~p06=vJ06>TMuZ}$v03iPi z08|aTn7Nt#%N-sz#T8ov0JaVR0NRIGKUn;z!QEO=;9vW3NaO$jg2lVLV=RB7uK>W! zm%F>GUw3ym+1UK%0e}{#yE(vTY?Jv%aIp&>E-o$}J|0%^3Gx3CLL$O{3DJM#-oNDj zKl0#z1?Qim@bCz*%Y%D__x@M^{|xRHur2)YT?>HX9xk?m@o-oHxD+^e6gYPsIN0LB zA^3NM|00D=uyNuO5E9+HPyFB^02c=j4;LSgfB+vKyC>kElM0`Lfbt2yEFqPK84;`N zBY}_cS@+oFN?WNlM-SNr&E10U6VuSr(KB#xay@aXma+`RnX1%JxQD=Mq1 zYijG-+B-VCx_f&2#>OWmr>19S5i6_6we^k7Ez~yp==kLH>>P7(i9O5zO$VF)o6-Nl zhXTt77at!FpXeVxIJn;bkfp#Uc*0LeDXT$b=1RpX@bTUwx%jNo*86ONnupZpZllCB z>_RIX=zl2vi_!lZq2T{tjQ*F<|MIy*07&p~uoZ?!0gwS)r>K65mfrxrnI4byX&n+f zhlgZghL8j~CBbvZ^0u0Vag?6WP|a3A@v5V2ZiVv43-BfQo6$ma5M5djlHY^1K7A>g?_{wVV@u?_3!9*I#ywlR&35 zcB2jy#B3ML9lkul(ABel2dJ#fmC*FY+tI6*=9w<0yXRy%JXJgEZ)du&lm5fFJo#;C zE@Q0nLC}gNrVS^&WIm|nkDfF?>~i*2O%}74dd%5e9Vk!ydHCKM-yg1cAOvQEyaUAD zw(-L*?f|}xl)Q1xlw`@r3b1*y(55$s)aylM0YCpriNS3XWto4p<>(sBR}wfziC`n~ z?pP2efv&6Vu6(?%bik8_bpa|f$Il1Gc!IE)d1N#0JnnM(cyX*u zM5S=*oN*lf=Eq+H+rZPH_5h6UDoX#S#Sz@~uzPQ5Ij>SDU5CkA_2%ofO2=Qima%E(+hycZ)lIfP9zQAbs_9kat&(Gd`|7umdk5^@Q`N<{ z9I&BBEXKQ^&{;i3;kUJW(&89_pzqFX*PSZAuMG~3JAdre$BCgjgE)1U7$pPjj&hN= zo)sCu+b8&QXZbQQuWBi7G-14}yrJ}KI%zM@sZp-5X}PbAHg5wIf;dt|_qfnhZ)ECg z+%ePcR#y;z)eq4_OKJDRp3D5{@mI-x`$`{tOkGTtZN_FQhT4Jjmwdl+yjCc;a(+3q z}B7qn7i(1BdFt0ObdvwpUu=4s7geMZ#|2em$Pr5DG>$+Hv(0#^^|1v z8Fx!N%PphckL~2q3WLB6;@V`qc{vAxy_*s37{3M{Y8;UHe3Fu`tn6L0*(s=wVt$rk z^=|S4?2N56s>8-^#zgXB&(xs3GFq^!|bBWiJDNtJQMx<6DS1Mk5 zAmr-sXkB2MBKj(lcwLI@fnM&aHnofGpUrh6@b^1F+x($?8%OXSIZ~(iRutoCeblga z-HBJa138TQy{D6RxMBEFzYg57L}m|kTOmgpQ^MM1zwQs@qklb17!6;1#D!6CHQ~T` zGw+o?aanqErV4pzM;ZO1FNh&^b-xS7-{^|bnfbJSKninOo!Z$Q;FACs%6#6OZHs;G zM_m@BJ5NVp(rfP+EnAJ3%KnAr(c;52!Z%aYL!YORWJxFQG95qb6Sx|Y&TFWPJb&?# zMS(L46!YghTzIm9+nuw7eGYXAo-vRK+skGAk>LPlE78|)Em(aeI99?hU%SSS30&*= zU4Y1wX8s;{0)yu?fL4;~;tgK+z~8e_jsw^E;p-1zzpZiKJxjS=TyH`>ZMKiA(?{y+~bh_uF4;xZQRltA!-%# z9?u13?nZ6}zZxT?^K>)Zpj*?OO%U7)0A*KWng;SW zgpbDZx=_aNQgD^OnW?bGpGc>mtB^|d#|cJP9&oi!XJ6}T!YEavr#nQ?N+aA}c4}Vn zn^WJX%TCc8J=@KoFShxyC!j2-WpwROokmT8j>IIs*0ylXf#uA#GcY`gD_82Qw-K|U zwv*;E=xtL5t>g!z8J}*X=4(Z-TM8A)UgAKJ^*-cx0FxqhWWO!h_+k@bSO>#k7O+7& z$^4*094W`+Kb#`=t0iDNU1B^Z&Uz)|jR%Wxxz-0o(D6QyY8%D+rRVIaNhM-tx>=LOXUh~2(r&c4!_D?w6()VFwff{&&)0oMzaB%BAd=NH7AgZo$bl7s%(a$ zbk{`+lNJtsoc-awrl)fK$9#qH{_m?yydz(9_zgIyY%A!KTwEA5h{!~o4T#y-lXvtp zE&nZKj)R8mn@c1nfXp8h7P+huqj!Memqyu6D`Q2f=m+m~XBfg<-LhwzD-N<(tQ-QM z2GbqBIiQg5-AEG-@;ITX(K`+K>31~1Kw%QyMb&=uVikS{> zFV>5Y#$50GshX-7enHwUq!+6jK%aX%68LhQcCFq5TT{?0Fy?ap*kcn7Pu6;0`o%v- zOBbqm`vgpBq<^-Uc4dv(m>^%`zlK&-+|*no(SPJdaqn*~*K% zg2ECOonOWVF`O2X&mnbVaI5XF^CJK<22BDLMNIkICdJq*GrsMUi&mLj>#gR)_l5Vl z=J+}T95DKc`+ylzg-uU8Jd6vfM;h87RjMwjz2TU%G1dvj8tUl^@qqo#y5oSFoU2sQLk~A>RG6?Z4Wz@P?QvgZ8x?FzbPM{NY&(K z=@DkMh-Ro{-X)*70d*!Hc^-`A8*8Fuh@H*J?WnQ?5PwTPY&7Ufd7+dbeI?zi4}N;0 zG~?~kkx+J7pU$_$=}D{cm~>bdLvj0R?T_e_+^5Mo!^UgD>eN{l0cT!aVsN@Uz~|cW ztn6DVU6VAsr#ZrGbJmF}Ps}m*PC|?#vApP*p|M(D}h53(tiYC!kN>^~xfHkYS2e-jnS0B*d0VdNEpB9G= zy1#EZ`tk`|x#MpSi`Nc)$i9P_$lbvWFRfO%ofgz4#|+hC?@LO)$;iYEO`gcmp$4gY z>A-B`xqc3iG9|=FKj-wvu1Vq=$*JeI{$a@ETxZ_>Md6hiA)~E3fNdp}!86LI7s<`C z*N#^}sKJXNZkzqTL95z3WV<(|psmOmLf(DBW}ZY%7u9Hze079yWf zwyIC?9};LbjpZ1ZKE6tS%*@P2l0h9G^neG$U{Q<9dBBOx@% zUcG{{`_U|X-z#9dSD8ngBC_6{V1Pe#w%dNNLuJddsW9NdL%K2E@Pm(6r+-q}&!;wE z@6#F!<=cS|uJu~0T!e4REuKw-4h9+-scWJDdTyqpgr zuI7!|KgU%mX69Y-4rj_gOJH;s!u@dkB`^sXDb2hsj{B$VfO`bT!2R`)@)xk%^?O~4 zAi3#PwM}|+@?74qKnf^gKuL3A1TmY>sfhac-af3YiOIXF>|+VDG=$Hs^0_X7drsKu z;KcoqFC`#F-sp1zpD$>Lj6E%S;f;atOkR0A0G9V{4KZ^W2#o&fv`{m(3!&!%g?x#; zc>L1jr}pT=n_uZU$AY`Ifx_GOWTsZDOff641{!#n+HP~3s}@hb3zD9cQPtttCx~CDHu4a+l~1EACQL|{l1zs zuAHmf9Qf6mb*UiQ1$t21Fl&h%tIr_zHyY*sCOP&S-Y10SK)5!QD6Q@(^44`|avznS zE*>CFLc9Z61xm&tvM?^BdWeJRdrl)Hq8Xp6OSI+Sg&Qc4Jp3}`&+?m#%kk2b=Q7z3 zWMZ4>`~xo(yuE-7l26znJ6{sS@gRc+{*b9vKvWoVF@wAtLNV8*yIy+wN8iGfS@ciHX>r z+u$H8UgCBnsXa|i*FyUz40vw~6(iun!Wq08gff_D17G_BU1NA_0+6 z<$t;dzzl+~uDmARZzU+tm6|LCWE&iCQD=~4kl5fwf(8B3pSkDLS$2u*1eJZ90Jb%z zBISb>7wvyw?D1k6CKXWTXOe-cZ=(r>Rd?O+THrQ8By#tD4~MKs1-)<=@;ku2@)OoV^%cAKxY?2K6w-}v zlF3=WT{^+w@50*MRr}y?O0hNrqdzOGzpy9@p#&?4zoEdy0!iCp?QUW75tm@C9E=la zQg4lJPruKLA15iGj}Rfk+@>{#LbuZG)8^-AY902z>YpicI{)QFHvwH;p~nZn+Ze- z%1cMyI{fIRt(cr4i=*q|bhn5>U6i(0bs`~{nGd?_{29TSWsdeqt#ElK4dEW9Kc_x9 z{~*n@h0slM{sjx&=36G`o@>SfhWG}SUa|Kh)A)7*Dbk-=RbTZxPsF2)Jhwa9>e57^ z3@mtu!*L~WwhUE6C}vV|J%n!_yiMM^AU&=Dlm}K87|p>#$7c8DK+SQDCfxo8#_#^XyoR}IF^pLYhLr>SLg-kr zZQ8{Kb^V*~JQV@DG7n+qK!Mi3oY5u9gMkQtevHO%RCT{|;p~2}Mt6S~XzNGNhjhxn zwSM7jEZXfGF(23tsgc7HX9gnP4@Z7 z{PL}by9>b@DKa5JaxBakv*lqDwcF^(M;W!TpwV5SB{I9Cl#17{d|L3RKi9<0G28(x zf!$%9a157qS{V+d7 zQr+RKdI~N6CRZ5&YIBgWZpO8(@)kFu;GK0M^GctbR*FD6zUBCu(Js?*FbmNf*$o`E za+(7StG~Heza`!N^~96Aoadn79xC#7uL%^`nNENv4`mNiu2L8LO?M6-cE(25Dv_?t z_CxKX(vS076GCxtLD=wCzv7U1?c3?LAa>N@{sxh=2wq&SO?BIXfo5qdj^hG9WSpx* z9m8dkYx+2VXNJ-@T30&e4uHRomaMCwIUwxmVcJ6(XCO`-{k{d+=*(seJ67-R_;@;! zRz{NwPh3B2ZZ|3LyJE$ZoT&zpqC{e+NpQU9j()>;$d|jXsq)*>AC;>v1oDmhre5}S zpJ`wqHc^Jjx1wt&6dU-UmPk+GF6Cbyku zfsd#CQQVRLLDoQOf2Cx@!X2Mtq<{Th-*tZTSf!-W z)sscLFFaol?*Qte=i}8W8`Seui_ImfK{Hid2Wo0;?;^N=4G)c8=R4<9&me9GoA5EN z&bMKfW%C}ur<{2{6TUQmNp2OK?f@3?hvl*i-7(h3@bzd4r}m%e9|J(5YBxXOr?Alz zXEGxRWjvp+PoHN`qaf3k8D(*wDjjy3o|LJEdCf~s;`5F$TzDhBzMCy$AnoadW1WLj zgMUnAEB#C(*?#8jhP|kp%jk!9KxQ`~W4jD}Al)xtll8j$@=+*A#u8-%1#Rf(I;b8! zhci-P8GI6fW?YHua5Uy*AoL)K@07= zn+ECDtO-$NGQ|E$S@QYcR*tG@jb}=9D#}?Na0JG{;44i@QpjzFq{MjmA+CfkI1##t zJHAoXJ&OQ{$&L%7#!Fjyy1NdnKbyMly=Qz;qGWJMgIr1Kr(}BzFE&*@ygX(4qv&ej zHXoHvcNWd?rDYjhs=6H2;dH)B$xNoW|zoq zl19T5@mS4#>_flpqf70V{z&RA=apKvTZVzJ?I|yNAY)O)TS#0%V7=P&*)3=p3owmn zAT-@0S>ycaI(-)a(}|ycI^LApvgxSv^_{~q@gtQDC4R|hs>rrvF#Vu+aqj**5aFhB zJdSCFp10Cdt{1KlaNv-aoTIe}n`GpLgPwTPSR-_=c{c1#g0VTr+`L!OuKwlevY&G) zisG~tx6!a&)Ox3bX3Du&s3ak0-5QU@j8<9wUe0M1ttZW`)F8Eq6zHJPk*K_89I_;6gA?)vuQyy`6`eGBS8 z(iORh)GeUvcT-^}ZOH>In-_-CZAM0mnogWiWQKWDKW_V(I!qY?(9TmN7G>}nTNPq6 z%P2OXyJcwAcRz=98tMCK)@msBt<-c%+xCX@R@?uM#o#q()33woU46761cnTI_q{!x`O#j{_B(#V zRJp_q`OP3aTj=keC#ef8oXgApOCf&txBcRI_2vk8uttv6T6Zk;^v78cc7)IXR&6xq z-=7P`4i|>iLdN=>qhe?^Kh_=mP`QRC8L!8BiKFpQ^b7|XB)^#(gnLsii z{|=D3bNS*Z-=$!9C-QVq=1g!>(k@@22= z-p=;YZ2YQ#&A}g){I&DX)|rOE!mE~>k*v~P0-vu#nj<^8DMq&<(oBK<46(&Uoh!_q z1`qN~i#VA!nzk}-?}x17nWskCS#KkR@f-j6w*>0kIBdz3F10gWuufd7WX|QDnBob! zhOkFoDz#_azvf-}0olEJN?qL3s)(2ClY|Lgc(<)@9JdBs+1#bix4-nY%U4fImPv8w zzZ(5Ghk{sK^I@a2FqwnQZKu=LrjPft`3sa1yY7N6d20`8KM0|kmY`N70ysmHxV2FW zeo7Nb+d018@ zJ^D7yEJdI{DgA8b<5hDal4&|=yP1MuJaLg;(1h84L(3~-L7hiqGOZ7jFE@S%aD58o zQnz1jP(m{d-S?8a13W>Q@S|Cc6{mzJPuw@MfC6#8hkgt0n)T5Z(wRV66CL~UAM*$K za{SV1_2^|q+J_nZ5+5hPvYD6-QnhFe7T4}df7N`bZ&GrmfqFXURsVG4c8YfW$idic zFWOPm$ZL?I&Y)aH0caf5X2tz^V@fX2x!%wP*2!beH!u@8c^uMJC{k#~RCZG&k7{ad2J(v6NMA#H*dil(%ScWfHIw zRB2}7O~dku88OH@&fQihs+M9SMj2wHxnM8OT~w<)!DQ-c^4|YdD0?y|%Bc9P($%e) zU*@d_iKCsJTRH=C+`GvJCk~s+C?=0RBR5#8p?=QKv>ECiJ>}rpk^^$kbzxi_L_Fp~ zIn)s;WuLaVTS=#sb$amm+L7TEPstGN$aFcXN$~HLXzCrHUiahx@_<>*qCBG7KP>Y! zKZB{))h&6X^a#28?AZ__mAFfC&kgaoq%#%oY*7z=Ns4;u7|+I)byk?!ustTFP5P;- zE#hojF4K29fT;5Z1gnm8?D*+oKg9_x_ff*5z>&oS+az^g;H|!v~`7f5%>|rHd=TxgyM;zjAtBL3z#bT7RbBeA~H(JBW^j2 z2Wc}nDht1!N8oQX5n-CI7%_OudtnGq>f}{Dna|#A*U-zP+Jr^ecZyf+7PpZ+;WC0&|}r%omsPT!pi761OXVswVUfoFY-z!j0wD)qql zJ#QvoEfa|;_%y00sP&~ZBWhG?Fp*%*z2DUJ1RmKW;}5{t9fr2<^I8ZDR_rNs1@VA( z`Mx)>$FG3<*O?uHgr#{g{LWcQXQV)?mpc{iCf0$}M!d8d7hE?@pcBLH9d|z;$xEHM z+10lpJ?*LJG$o};)>7KbB2KzErEjL-M)`+1ajYH)Kj7o}Yr)E3?!8YZ)WiLU`$X$n zC-6L8Cm{tnE7O)BmuT>dlqyQcZOG*0Xv?VNBzNc5T)sN-Zp9AC8n zkYi~Pr5DrQhf^zz>n5P&Nq=&wvMMmZ54<(G`S~%|{&Xy6T(&ywiEd1cg~f7&zXYq% zhqk8On?#{Uj&9ujC`400H%G%4O;1M9He+8PfE?-mW&6|$iGnu=ITbbqx9>L)^1>T-d zAV1OXQwYlra&cTydh8zE7OeXkUn6_ISR~jv<>Bq?Lg#6ieRboNLto|^O(?{=frRs= z6qGspVqKLLzooFHFD9|}$L~b;QCT#qF)d)O3zjk&Mr(!wp7%AMD_C@kyd$ueeab@< zuVGW-&vp0*Q{PE*sf9ZiCp*>b6i9;Y9ZO1bqg8Z=v_yVzj^NFIC`gb1ufp47!0Mx( zKMdzyazvtyy_T1)n=6+v9Oto;638HO0|e|y!p;iuoj3AWkOW)?Rz7usS&8_Fw!~qc zq^;+cZF^OVr0}@tv@QqAHJb$z-?mA!W4!GgElRqrBz3PXpWRkosx0rZwWsp@V1T*& zQutV@BzvKobO#9Et3Y3MArVcqj2XQWKqYw`{3@|#GJoJ<(?=%Pn^>CXg6F;gph;6h zM!nAFM9I?e@gw-lud6&M_5EO?owpFWIpe=Gu91g-Y$y}vcVh{RPAXI0YLwBP-8{3X z!8rnjs9`4x7vh8kwx^VFD8s!fIb=hc1(Wcn#2&BBNh8 zn7~7eV(8UB6s-p)Rz`+jNA~kWRhU!4C4HQQiXyLMl3-_*t28wi-l5UwgZ`VVap6=8 zM&DS)m_eVa(F><()3dyE7mh7bf7rZhN3ty@BvnhOd4A8}Wpbq+(KnbL4VH<59!n?> z)0I?hQxtTWfJur3=se*J(hQ2S@8;BDJ5F2dv#DZP(dE6!Vy>n48Y5Bwp&~c}p%L_ShyYV}mZBGiSmh zcIT`Ju5n@DcbU%{4C#x$Nl9?`$2>GKoo|5J~scgs$8D zOZf`_PsKi;>r$1R&QR^agiv_pXm&3Cn&ushRz8@I;;8bPa7}c0u^X{Z_3IdfcayAJHS}|AVW{%U$fgX`SVw~&kgh{ zb=bCnxR|B)J{A?@Ns%YqvF;EP+jLI9r<$r4a!h1&N1#=5vh9eK2MWq;OJ3W2>e!wb z@lHk1L+<%K=}JL1sn_KK<&|Kz0h-<#h4ZEoj1pbl}^&Wu526bbT?yzd4d6z8Mezg85U?84quV?f~Qs z`d*&ulygzlQaLyw&Rb35W8n`&Nfv+Ag-r5rUi=8z1x>dib4kg>YYYp4IM=UlLK-OG ziz*@!`SNrp2tLp;=qw7`F|)%I8g;NRrQD|*PEdK!y#g5%&OOvheykm1m9rRg%vuhf zG!?97<|sX$JUR)Y0|O7=!ec1<4(DYba9Kq&FD3cJMFp9uGhfS;b1n|_`!AoZ1U-Sw z1Fu;Zf$V=jin3rfYDm48n?F_BF8VlXr_fGbZK`y4oCS zY28HWe6mTsBCm*vaQ^+kj^e1B`eyJt;O4VGSCRf;(YKUAz@ElfGv||=81Nf3W%YxUWL$&O^|-$YTRWnp;mEvFJWf-`24$Q?VlTTrn?cCFg@C5KPB#h3iH zGDzu6rrbKB;%wgP%f7h7lA5+nlET@UTlt`shnQ^g z#fq=MH^m}9(3EpGj)~3Zz3{zs@|hniA?FKa;Xy4*7)_(VmLO6mLWsKT9RPM+u&v# zA=P^hsX7rZq6~fZL*3@yauB&ku84*Q-O`$+bnq^+l7(j;c`@4TNF zuaS)bgI8Sow3DOXEC`##>MONiILtdIjA!r0X;d+Nac|lbw{DcjR`?NJU}n%;4VQg?~wHD)W|`P+>MAAIMObK>3FQkHS}xjhJgU#^SW%w9}fwxg%Qg-*^q|IVP^q@-HDp22>i`<@XqJiPdEw9sf5 z@g+C~bG6EoVNbr$!c6pLt$@njjxq2tIyA|HIYINY2lcUfq@;2ec?Ji=d8t}^?jx~~UL`FsX7MZI7cRs@8 zdVkKni|9>@A2f|c@#@*l?4EIae%4o;%&jJ&>W42h*C;-KA00g0MtJVk@B_bj!Py&| zBf`ErymDSGQP-N_b;yZT>+TP{O`PRY^OR7R5U(0bQ?OJhRLQGXrAkYis=W}tZ{9eY z(Ih}#X|^q%G5a&LRq0W9?Y@Chv_;KF^R#M0AaA8PG&O2~qdJj;1YpuV?T%P0{~O%18EtV`#BCrlTKSdLEkQ?} zLh4s1lwC41>&vQ=Fd)-T2Rn>`Q~`) z&XZ{;jw%|jU2mDAtd;Je098Ar(j@uvv3Q#-71Pgl&zCp9CH^|?; zXK&;?tr9%IpFZ+*}Mxx&(InlA7+Usm%&7i=y2VB#LMue0>fBT_g$9*1h z;-;i^--nT1ttENR-|KWjCW~FB$J53+W$#NRrF_K6LRg3L6QJd2mL3w1@sa_xd;3^g zhi9L$pV@V)>Gc?I<+CQubOX^hyVpHg;p}4{Za*LEz00uBYucPQp~i%nQ6p}?g`6G} zf>7L4T|tgjEV_$IT970JXEr|g*~Z%eLL$zlpNC-)>@LaMYdFyq^SZ8%R3M;*Oe7C$ z!1v+tTs3E;1MdK))5o)}af0~m2iF~aQD4W-Dod(oCEM-^O6&zCzb}cGx-|fzQXW$* ze4(3+bky+ZoXLH2rW#<3Ey{$mF;s`Sv9K)pN%3sIxCWvd@l`f&hr*%uqD-76X^lk) zW0$F(ukKaKO4<18k2q~)$q(WM&;*V4gu`1Zk^*KB>SzF=kq~nt>2Hn8n{_d}A_Ew@ z6#AhPW_o$ImU9`MPs?d@Flz@XUn ztCtzVw&_F@qyF9a40~VYQ>i<42K^FsDLVN7>T;GlKYBVq^yWk-7C%U)`A|1vYPv;G z>5D)P_~@ghj;`#sT95|tP*2U8?wV%=O8!Pw_>niYcM=r1h)R1@zUqY^cs9h%uFDCG2$Y9xn6S@P) zADJ@dgo23ROI-nRi_%LAg4mgCI_d);-g|hYg*G#(54){oE)r#eKE&Dp9UZL(;3{(4qTEA%BNM&8IEa=Nu9-nxzi^L#OtJW3hN`Q~2!g zjLq4zDS!7814F2R`W)*E(W?26M!;RaD-lfls&Hi?#_xRuo13WIE|<;Svr%(sZBM=dRkcOP`{);l8L_7Wlx)0 zl_Sr$M>ROEibe~my0qW)U1%9iWY^Y9`|m6IGHm`N{k5x52$@}+r%s7;ovQ8e7_^pv z3#!*!(BCqx)~P;|6y>KFY-Jww5@FCyRLXb|Oq5kv8L`1%u`_70AkxnnAZX0)J2)4U zf+w@0!>c>SiJkraI_d0GgzZviZAfQ?IF3;5dw|V5n>-|pE_Gf{IM{rw@LNe+@qJi`uB*qc~pO%l3^6~{mWPV3M; zd3M_j!pC8Fkq_g0^asV_`pm+px5N!4=5i7MUZ!AlVr#me z5_n*#is{#eWZ#g8nn692Zl@~bPmhwwy;Q@R5^|zko9(y7{*DoSe>N&KUhA_!RwWMh zB;2MlfhXzO$hB2?f6F!!cDiA)2vH(8R_4W=3fnv9r~H|?)<3e_AvVv@a(18E;#_z|~ETuQu+r8C^qVoG0} z{1cZeHB;9B;o}wCGqK2peU^8~yT0!J6`NE__}hv72C+i=#xE;JGy*?3h8Rcs>G!0`Bdl?Pgbz%L4 z=ZZJsmLa|eOXU%Hu!k#@4tw)B9>Igi+qt1i=YZdH%(lf!A_J|pX8IeZ_K{An97HE(!W(o*4wH~>9=+DGq0kqS9xF9l?enW_ur}tZ*CtN5nJj+$ozCq*;6bH}KiSJ8jeNmt9a$)S`Z$xMO`#$$S-p)0^&+3#?{lAaI$?^rtB#x!qs)K85(BX> z1;?oBPcmmJJ+1tjxs`lYjg#k4dtgKvGgMLJhn<~?%tX2XVmNG(rgpXxrm+h?j4j|_(km5dS*<}SPIJy*io(H9_Qa5Ak@foa`F0@ zN~QIp6iBC1q&i$VP?uTinVPK;#moXGbXSHul(|qqouU1cm6zNBoOPk4qn}4x!NL9My9v-~J9U=hZ)u^kp{I*`&8Q_`o znpcR!dDV!#N0&<1GRfmgq#^AW-k)@kh^kVE$xsscj_|?xN!e@0Se>){8;=Wm~ z=Dz7vV4*I4SL{=B+^POcW|-|{_|2wge}~~kigb={Q0S?kORiuK%2)$?1xr652zR3V z`)k4^K*KsEOADM?o|IX$v=oogC5#O|z z2XSTnQ5dA@8EA$!^s*!^8tTmp(T7E!Q1^G0wMCWhBXgZe&GoXi<1%h5<-gE_X}~~R zik^3i82UeV0P{vsIcDjlP^2qer^ggSV{x>j`|qRfN}>+U#N!#jy$hnuEIziY7X~lv zFQY#+8&~EMMWe&V?`4lQWa!a~M~7NFR6E=EmzUM5$oTQEhA}1#{}#%iy>Mr1Tk`{t zNIyasjVqEg^8rKrgH{ToXgn%^{=AGgS;^N|b1s9vRFohdRbXWgp!W&L-S%oRQu?p} z?UK}5q1&C?t7Gp}xn)V3(A!4#9vx7z>*`h(%q1?+T{S{&E8P3DHoc^uqY0u{geA-J zbN#G8qG=SPpEt?O3a=d5BRo61Mv&u#b%PR$;|Ep?ZKCHP21~MHg+OZz`Rb>fRS9^? zSkw9;Q3uRgdFXnR`hqB*GdpkIVPT_l=A;E)D9wZkM|3mRvxrX@eCiw~=Xjd##C4yc z)b_@_YKpb4noJ@Z4f!Ect<*8&FTC9UZS?F*SYv?73Xqomoqs{92z2DQ4U+Ob4Ya@DCmW2Fw2#JBY{Jgc5&_T;_ySV#mS-3 z%3Z&%g5QRSwn30%XTZYMBX!c7p7?hzlNS&)*yMI7BKxYjy)!T)s8xJq(H7-#y?F;H z)~6iCesJ-A^}?hff0d?K`UjPAK4GJte?z{(5qU(isHljIIaOUP$D`TtzDt&e*a<*k zkT<^Qn=?4k4$EUScj|(j{7@^Rui@tnsJDs5pL6Q=i9I~m4o!)SO}a9>qQ&MGC~RQ= z#op_TTcH2bdeQ}yp)yO&ekfAg@)GzI#<-FaC23rRFnsyTT#5bm6Lc>JYqUDBagi}wc38i0w z){iAGf6~5C55h@S*|F#fBns@6A-koXX)`O2efgfeWqK;+H;RGe-rt9Op!UiP=8GS< zeHh^8SdD5x;Mwi&i?JkncyPytR-xdwovAik>B(MqH0A0GT%3~Uek+nc))SY{N~Cow zX|i&D7T{)$3kQgZW%$=)$EV+WE4t|lG(dhEDmeKJ2|_5YWvAE@ye_JKpTYAR0^s_F zhC*L5rF^)kFHmTrsuyLR8Ovsb4vEPW~0xYAZ3X_+jk=sl+Wx(qWoJ>tHNR|6H+m!cn46bMfgS@2hl*M87#ROnoc#Q z>YM58`ErWjG+ivGN7XTv;W=R3k67?P#Hbj`=kK~JVB~E|>LK%Si6?NEQFJ~^ zAZx93wbl??Xv{OdyA})|LFURk7QN;a8F24{hL)XwP7hPC+_)dTKomIH3;SxQAn=Zi zkdI$SIL&?c3_shy^8@xy?AO6Ckx<{AE|S{))%Za~KPJrZ0gV2gH`>5}x_^T3Mk}tgMEU3f>H&W*t` zWMI@!eiR05a5~MYqMX^f7AE0uLiyYQcEBoDn*qNZl|9})1XJZTcDOa{OY3!k8b+O- zq&%RwnOU2nVIB(K2HI4`5+c)P{(w`h;Rkdg=Fya(2X$9!P#Y! zk6KT+?9|fZvO1Y$HQpV~XV{;`k=Xs6e=1> z9r3(GJg_sbt}p5L5D8$zkze@8R8X_IV zYepFjUvr#?^hQ%%YCkA6Tojph%toc=7F0$ed%wyYGK_r}RLX}1b=1Z5lMA=uKvZBn z`+n7s=R0^K(_N|fy58=ekEP8JjrsD%T57Z01!BzG1M1a6OBJI1g8L=V&SbD|X+@Qi z3v*%eVO$iPJ?8Zv87kw>n>)bV!}Ra@RL|J`yMOn(ZZZ}+F{{5sQcuEcy2oeBItyZI zml=vz2c=b?y`AQF={_Joq;6hmCP4*qj9*6|DG^aOO7+I?`pQHVr&I7b^I7Ej4u?py zp@!MLHrLPKX+le(h?FpMJ631mpd^dM%E6dE)tWAMlrgpW#apn&>A}i*1ouXWoCvlx z#>M$l{qmO^fxK%19B7Jr!iO_HXHYnC>pV_>3ul@}NCVNSCLQcC$A-)3qwLaQ2w8q^ zT${`s*V+9EAvL)m3e1~UYx(30KkzDVhfL@q=V3$f*^c!qvU_ZF@cq6!z?ERf$PX!% zM}=fLu8&HN73;OaVcJB(py`T$FBxc^00UmtlYi}KNry~gZ7QQnbpyXeOGRgAD}BYdQU*~d z(BB@y7a<=R9CR1&hZ@DQLDnIW8Zb895$p%Hw%_kPKH`UX{C^ak_ahYkAIFtMgj8o_ zhWO-+>`l`wLY#eNbM`zOlB}~r$WB(~S%)}h?|t^>>^SbsGyC56*Y_Xre!pMO@pwVS zR~MGTP)cdf9G5A&S2Q!~XeH#c;~wQv>Pd}M$U6UOcKk=SobKmd7_yxBbNX4(4e(G< z1k6YTe*9zFeQ1@uDM*_nOKWFSFB)DdRA;HdpT_t_dzTKZ1(B*cpqeY$eSXH#^K%e} zlUC{OHu~wrr!mPN1Ngq@T#r|kLp_ym1TriThmE7O6BsUL9$Jyy_VdZBgrJW>UyXgf zdS2-nhSE;!JH~IDbBME3i;kbV8mj7cZ-RHjNdeh5qEuaS!>UPxM6h89OBdvvpD2o# zZp)@AsJ^oAC8KW==53y+N4~Lhr+)%Ck-jn^+~aV9=a( z-<(-1!A}hGiZymmi*(+rsv@9`TBDXr;`<(#l6viEfrjyH+_MsO2Y!nzWV-jrpttJN->Cy%2bGj(x`_s`XQpNYWGn!L+bvNu-#dqu z`{wz-?2@rh=5w;y;xv*6En7BUz#F;nwoS4|n*uF=3BC;-R zu@i8Wx*AjOQrYr;1$ykQI?>y{=Wt?5w_i;x8=#xl4QxToFm?Et%1U;E_;KmBJeNYN z06WGuJQY=p%Z4citS^;t7;*rQq*uO9{v(^={%bYe`eHE9#=*l3>Z3Q%@;T{vxLqXj zB&C5feuK784wOr45H9&Hu1Hek;T?ht+Yc_nY*8=P(z#!07nTm$5V=o0dz_)k(7F(- z2vnNGGBgB#t5t!P+hYXiUu^>s4>T){y_YMn^_dsN0)Ji)fUwh{sjW~Wlt@Q$|(HF5WdHo$epFIuqIb5}XE()=)R z7cTtRrFVE9An-eGu=+x<{fRg{Sxxxyp+Y=Tdt39@S;B%OvTvoB>sUZ-<5Kx&yDg3B zvtE|s6Tg6gI%n&1N}?Ftm$E5pm&;iJ(+Ao?YWGoweLey1Bak zut&nz(Q{;Gt`UK0lGlmFFn_5P=O-t}RJ(j)lIr5!qSSb+n!KIZPSYJnFr|4C!H=1- z=-NBRrkOW7avRckAzqD18nRCcwUe_e3h+<{+_gH-vLsNph)NbU*|a}fAcDHjH-0+u zL!>TBz&U9CH2DQ#@1TYU@XH}$yqmA3zv38OCMDAI!2GdBL9LtR-&EGT1Hsg*d9}TNBU&Nn4j$w$$&9-SuKysx}>WLhnHd{I?*M87nIK;Qsyn||Y(fzh@2aS%KHw1aWB zHY?s#W=IC{ylQezbzExxa#Ye!`c%taNL#2Df1SVLpOheSY_x5Dy1dV<4XHG}L>Bty z%tFq6(?(oYW!OLoRixs@kcHRNkS++_n~{+Vo;QU2%no?8$~%9X#3Ez!*7g2F>dUDV zQZ9a=y0noZ;K4Fygu39<4YZ$bq3-*nk$iP^#{dd!P)IgC%GYXS$3Ul{;t25_Wp+Vz z$^9qRpl)o$?cj6M&dvf;=VYDejd~HJr>0*@(YG1E{)$Ixx3}*^RnLiX#{R6x^_}B& zb>aM6QK~;34w)qf%3c4+$WYqLjejWCtMj-r7@3(7xNh@`s``lh0gE>ZmN(HaiMPooeH`>pxGT7!sP9pzl2dfMHPAyI@^bqr`NCKp*hi)$@IL}yPWjS1!RVKD+WAnx z5!0jC0*N{L%;{xpb>Z8sbak_=?qy~S7BBHiMlk@mKl~MaKgF~@)}9%seWC_f%O(%9 zX}oCEglt>SFx`GTHMyujNKVIhw{uQsu{|#@3E>CiCd7vGAuQ{sE?=xH(YzKaOa+lo z)gv;ld0^VrWNVVn7GMHvDbg5&JXEGm^=25B5k91cOCcI9VbxCu7N#9nd=PV_* zRxN{oa|kvxp@JR{aiSpuHQvdPQ0mSoH}fDYg0Y=a(&Y_G|HmcKDR+^4pL>m>en1plZnhzF16xbZ|U@4=t=V zIAIvh4BQvHA~S;G&^+A_BpA84wzH5cAZbY8yWMWta?4KhC$Wcm&vGaMHk%!OTIqS= z=@f*P;(U$$m*w$^#q)D)neBjeb8gfjvx=)8d&yT~B*7aquFl?gt7Q$;c`bgGGutC( zRL9+9%;LG&&Hh$HwI22kzmX`^XsYs@6c<>Rce!UyWHM%m^m!q|f{Xh{rtdpcccEbh zevbG3!4Zanm=eEvl>}v8mgaI|J0eM0=@2 zI}vT+(**?_Glj1s^=Wv>vyxgP+v@E+F{Pz`f!W3LCa=r>$`&($#1`HusOYvtpi#1xy^=HF#{xL8BD5quX=r`9udaP z;oej*{A#jD!+}>h(`ewYd)*|aarN=0!;FU3Oe)0Vx`(|bOFbY zb~2@aGPq4;l)3D_>DI_05hm^ffX}~84}g|~jVhlhl#M)NS1j3f((@{&;m;IIqSz!F(2{VgEr+GI@JK2KNa|NPE= zgrROF(}`Q4u>mh?j$7Hk|ErhRq%x`He5%XO>~N;4h|68Ad}FHfL7pJKmP(R3Tl4<9 zB`%H{+PN218gpH84l3SKzK2^y-ALbXtKLo{()D+SYyF8XS;^B$+wt6I%0{MF^Pi(t zS5zw>7MpPv`8>)>_sV;?(61V+2wC2b9+{gKm%^RlwoUvvJJk1ny-t1^2|sj!FA9uq z)+jgYwj=KsS_ycJA2!`y)0WEv^Glxiv}=n=8F;sJ!f0238x763@2OED1Im_Pcsv9O zHVe7;$+4%*WIIEh){@BRq^^J!6P}w{?NT%wYI1PG(k)`_)91BG;RguFmuDZ8s1(zY zA2U-$^txSyI3Uqxi8Ou|4NJ5O^M)4e7h@GASv)oMUs+RbB%=;!jUjis_o}kcNe$wa zdv#3ZlXJ^$b@{&95o@*I<6&qMi$->Sy+@(tODNH9hr?lJ2i-aG=ruo!+T5ZTwK+Y~ zi)NMfWTYc6b{g>_eRa7u)MA`TH1?RF3`adbIjCyU@S{HPz2*XI9N0@|i`A(BmH;_@ z!*kkU%4|nbi2vI8)}1Gg^K^)>x)>YR-l%>$4GpA%@e)6K&Wve~tBiGxZG#IrXDy96G$hZAG99E9xi3~0Q-AkWF1%pPxjqOnLx(Oq zQEJpNp6C<@+y-XS?Fe0%~&}>zskc*3U|Ftvy;h*9pnB%Kyd==!yLQ$adSY zE=UsxCElvRs&6ega`^Q(30l74_E`m;mjH(MbeW>&+IX7fq|+}bWu|lm3$EOCQk=Gc z7>Wq8HBro@x1P64ye(mzaT zVt+^~dKg&$NCF3Gtb4I)(sE4X(lqFS75f9|&5b!!5sMnXxk3=X5gJ$7N{rHQn9fPq z*DAU)b9+dh*^Xb^TqAAXf$Ar4zA}Y`JS~linnW8D`G(tKEqv{@mT6x%M#IyEoM`Vk z7nC$A3phg(x;v*D7FJDEh!GDG!A6&w1T%D!)v&+tQVQVAmH@(9o!03ZZ!<70bUiOu z0?F>$r3gCu?nlDhoK{*!AI~;j?QHA=p#R7|5N?GE&F43qmPd8?J&d`7p2+X#Tt?7L z#-I!EvlRv;7Cv@X>4@T}^Y*2U~0P%P~S0bdKV=^b<6YS29z zp{ErsSQSHVA$H}P#Q;8osq{if)Wl| z2I&nHxU`rgiNoqt=~g_SnMk@W4}PJuGtEKgvNK{ZFz$07&%=zk*e)BblgMo_J^|9u zCpnqoyc_a|OYdly5p1aSZHKGFgqdWb6^0vDV;;Wl;ynWN>=-BE=0(f8qzlR79F7G( zu0VKwj|h5AGpEB}F5lgseF?wNbCpF@pcJtWgi762xn$l`1nOQYOd*5?-+T|>Ftx-Z zP_VmGQwEIlS1saj;_edluK*76dz(2YBzM!xyXgga*7HqFlYjf{+r!nqmmZzIlKVht^lni|75}HNc;4g8=w86vc4;nkS4K_96 zt=-A+>U4$%wI$=fC-*q7U2Y}^jN%|d(a>d>5*oRpY4-M-2 z9gN=`-o&>9j;2HB&!YfBK4{)1Te=u^b?9J3)0A0!zO5<(ylW@0RwZ zukIq30;84TiO4}_QwV}$xcSsCCI&^qdA{`bW^?kXNvema4yLWwR4RWj`nCXE6N$QJ zG-B90anEHzV6L>=5{H>)AKqk&?}SpuC_J(Bx0P(X+smi2q_GtuHhmd6aj)GKAXjFJ z+4#WOy!>eQnwu!M|7vp0R`<7@o4L4uQNTA`QtfKK*BEFdvS;s@HR^}=5UUI`<%s^E ze1|;K{zryh#D75#@~RjU-gD1I`%lU9M`0^MH|Fm;%vD|i(aeyH#NuB8Ui@*T5}8lm z9yqZ=FH1W333szZn-^#@BLW~;5#~#1lQF*_nO@Fc<_Sw_mrwA@IPxO;gijSdq-J4UD3~=3655eh z)TK%UrGtgPd&+NPe;p}nI&VI@DRfm5u!!8dzDW$dU46^DG1y%R2jf~|csyQ{(RI;O zQi`XKx-Va!Hnr|H4ocJwi5xEo7{z9OC=U2>*Y*IxGJc#YWE40UQn&x;$izQWx$_ZA z?DFmpI{F+$w!#bBQfQ#heHh^%nLkp%n$I5*a;g3>R_P;+_eqJl;um0 zal?4Tty+wei?#;NOFKeudS>;*I;f~@YtLick5d*}dxcHKAylZApCK}jH4(yF#nMX1 zJq`(iOV8U&DHp&|^~(=J_}8N4%74j0HzB2$(<%+oN` zbIdd?LEN>!1>r!nCs=%B5QcV%n==up{To>~E_9vWLsyX=k8amF3g3$G_C7a2{#OuF zG;YjUY|cTrPAPr;*n*q`h^lF_i||Zz#lbHZNsXJpPFJ*9+p6TzKeDh(CxuGh7hy8n zreZO%>0nD-^Ic-B9f<)Hj6r|KU)Q8iQ#sco!aRlSDoi=GlJ?PblXt8I14^nXm3?_q z9%wI+x?fkF_>J6hW1@y=F?;NTy|{eX3V{Y}e`=BtK;d;QOo*Q4Oa3M*rXBknkp|O7 zC}LO}3#b>o|B-22$~BsvDuZ(KbO!(WeVx2({cRZ(yK}yAb)Yt_vxr1G`CRB|YE8$; zQ4_9w48k^61VMW~-T9XO)vA1c%I%H7GFzipG_bG7IQZ4Q(aTqPM3AbXV|Y4utlAb3 zs~qlg@5gEl#&YKGG~zeTa{@UQ1%B2~_ockHm8od?9~t1%`ZuInqsl#N9@O)wc&YYm zH|GF5BrO^6g1}@}QE^`oUU_R+2%M=5KtJn#XsbE4&dlzOX@9|^-k-xCdz`7%HP9{* zoabs8{bZklt|eSkYk}Ry9Bm(Aeq4d}`0=@q^&AX|z& zddTV+9oHe?Dwuv}J@aL)QWCC#1K}uD`6Lh-jh&&y7@QA`@qhnmd9F`$rLxAJWitZB zqV_}>I=BvUlHPp$`)Kv1{*#6Mv~|}?l(*F73oMnT8y&9IZ|WPd0 zipWGx-lrJXr6)CG3Gch@SO9152qoPjzf-Elh=9}mPBVIa zf&!+S;jy~pfzxKoMe4#pu?gVh5BFCmkIh4K+h0mIYip$+h-t{4B2@9UMHKKL+eJ2E z)fKbuXf&gPvDwLv%rM8qreAiL7t70F^3srcL}QG;6MbAJ3!h(Mgf%8;g+u6JKhHV& z82s#7^rR%A`{(u*a014HZ|->1gxR}WG|!1i1bUD8}X&YX@s(TTe6oU6(78)GNyv*=f5`1zb{1rZBcEa|>`f8cC8_~k( zURQWfMH%o;IV0y|%ANpV<(S0kL;s{lRrR~>z!gS_#mz%~iT#^@1A|g|0>-*AO>(S? z>Uz(-k4sJp_C~OudVhaUlQdzwDvwAWdmQgwtEdPpk3H9WasettFIyzk5yV*pwf4GmIo`rkU!I1+=%PK!?_3GIa1tES<@~NQ?y8zL z4|TS6d^hga>EUxtgZx(ACl^bG@T-XE=Arp4Q~YQ$=~jj0V4_uQTk%Ht=eRo+!8opN z4Sd`Km|UW^hp%hnf%Xa*EEF@ZiEKEZ0+!kn7P>}<#Nlq4sS1VblwDvl!@spIavjpK zG5}IBmSCxl9!1JBW{wn7X9mw;viP^377g3kccY7)pRhN{CRVf4GTUGsmyjD6$m zDhfZ}UkR)e&J5!4U&SK^-Nqj!#Z~6$;@@7q8&xnIws_ptOKDtK4*d~jQBAu#*5o_U zG~G0UZTgIJy)F8_X}+$~S)qb$DxH~~HVQDA?Ix1RaBx*3(s^1{@ExN9YaIjh|9uqg z*3*{dB%?Sm2GZaw3gq)kS|#XJM>Zm+!~7)#wdIIXG;G#S3*G-du zI-zW!#B%u-Bl$Z)L_8}Kvb#??ukx2S^zhrWH-Q{5xk;O`^80of2dX!l-v!b``|KxW ztSph0L<0$lAAffq{F}IFG$ZJs|J+`U21O9}LA6QVucwENk6j|Yn`c-K#%w4*fw^}; zC5qdJ8UJxK0rB0phbPX?A2)Pf-@Q5wI9r&ePB*xD?Z*6#DzS*2 zsx)s>VJ8&h`HSbdtF{Lm^Dx1}@xo;#@5ET(Nz-T0w`Fl@0pR#080+h4CY0`8U4MyA z!e-Ow#%W_1N}GKjlk=BZ!d^@YbJtkcJJ!m9ID`wEtRNcveL<`+doK@~B8x|Ful3LN zu|{Kq_8FU5kiQ}kbt1pDhP|h$wIt=zI{&T}mAFyF-+dU-`xJJrzjT9zX$n!lo z_@{&x|B?0fAhc3mhCCm|s8?<zj7_;Kv+diy--5<3HU4K1vyb9O_ zrM)e3I|VuUi-h6gJulUn$z4oAIbj2A9Gi-MqHfCn!GiEC!sYo=qj%{-ngJ^efy1qv zS4V6iV}Og05~2p?_-lOYAx8^Hu9?d5k#=qGz58@-@N+rY^<2x&lH`IDWf9n8ykR>m z{z-H4Zxks~zv!7AW{C^3F>EythU^egx09=xQpq;SquosW_(M9*f28uX7_W8M-j8o$ zyK4zaQMwCb8zU(z!1t)1Y1QL}TB6f7@hkm`?6<7%jxmJb%(`M$)Df(M)T95%n#^ve zJ0=IobNR}rZKs`>KtsyKl)r))YEoU)@t2HGBmL-(bALlaG%$J=Ra2DyWq&=?BU?Y5 zl&UL;Nopq5tFs~&Bx#&C>H)J@?V`{vsD#6|hvsBJCkDN7IR8-FV(i;CQY$CgCwW`;2%&VY1HGnC+l&7pV>#1LW0!mYkEeeA5xlo@abXajocyF}?fiA4&yCjOZByr> zy!nb}!lV`+iM}~xS58s&pV!GzdF|vL`%A%kY9cmOjo>}X|3ylDWchq*kkm#*-Ea7= zg*MKTz2%Ll_oDGN^X_>VyloCf5dH3i;o7rA_3s??q&k!aiGXVnZIH~T>sdq74BY?7 zyqg&mJn)Hz;~14tSRMQ4UEqc4Rj$&*7o}Tcit}o7A8^=a>Ps&?93y1z@>DdWj(ifm z|8!7arX*W2rsdG|+D|fw4jR%f{aT&HER*n|d4+c>OPQ;#|FbCkDu|HX0+kfI$f3j| zD6>xt2T%JsZt$>yrbh>h>a(RmB58h{nNsI;`M+hn;+~KSh;mF{CFf|6D7aMLVGCjc zK?+G!jjQNOGhR%%jetfUA$Hq;8rgH}*G*5es{qrPGWDVzW25;@gdy2%FlvH_1jFoK zSp!oq#Ax%ag;~=!zPi>#_L5B;&vJ71$JVlOl{fzU;hs-DjmYW}3mu4ey`X*Xa(D1Y ze?BHEb>m&4tso*5^BMQ#3?`N$R^B{iby8|7X|FkIIJn$GgUGo~%3V6p!p*hd>bDv6 z8i)3(Ch6)%9HHgV))z`{H?C9x>uD)bu!V~rpt(*7^q0LB?=296S4m${Q~LT*`Crc= z5YI0H;Hr|pk1N3+1k8slS)%9Z9v%Za9pp~7-w3*w{Qqyir56+JTOJ^^62zXV^nUf5 zKlQoZ%5aBXzJuj3sg9+(0w&v@ay9-~V#NVmxTFnYU-i9Fp^Z;l?cDVoRR+U^N~R(B zuo_n}86Ko(H4$_Ad?6pgz!Y&5I6)9;7qT?K*y=g2e`AQ>2K#Iomxrvzh+Ie;>Bs8U z8%VCHV&&2r6g)aXCrtHePZkSv=_U@lBg@h4&^pE$@Va^XD(?1Sn_O_6?19HY9eyeV zir((H`Ci%|z8^KRDVI$HZH@jiO9CoEW)v>e%2imNk#lMg*UaC!)k18hw`ZHQTd$@6 ze2|(F`r~&GA`mgbsR4B!Fi~g2uO}*&?CpQ8YczPkyljD{#7i~O^i-~jW|5AULQn7T zykS%S;x?A=)|R*-omiv&Z}OrYn|bLsu5$4B;MrMV5?(b%$i}~|@-CMG7F|+F5WE(` zXZXYyJh1JP$D+*$y9JZmSbnmpRm0-IAz0xy)ZRm7GjVC28GE7FXdTA}(!-M;{))vV znz9$D`jma?pQSNkH2n9q7MKzsO~inl9c2cuwK0ifsdGpE(^#1W_{R6r*rY$lg`rtP zdm|=x>en$$eOBF+9LHtiZcXN=bznQZ_5J!r+kr=@2=-O~)JKs$PEBA#~D9pZH}1wWE{9de7>+ zbrZ0eK0n@lw&PKDB;#7CUgo7Muo$0@P9{q>92Y$XV0{{L{6oA19FJCGfwt{n2G1U^ z8@6s^mq!R=rUV)OoKyY~r@`Gwz_*vpedrp@rMxv`R@io11$)Vc%hyK@W-p)AR6mxB zE(h+!ND3WO=x0(tI0G^AyrbmUcxAW#z|)rp>A`gVFy&U2n|aqHy$c5qYs>1iK6KY{ z@BMFZ7OE+AjKXrGWZ|}9EV~cAMo)m;;0->-uYS>>T1cAEe#TqNoAoAhr+)d)C04c5-!8SZ*{RSBjl)$Mhe&jPNJSd-s#z=hElXt{rO$>7QDti_oEgQk) zGiIMm4f=_EldTVS+d2Lq{%asMx)cVLw9bsf`^K9cMDD15?0wQCwpj?G?RQqj8cg09Xo`$CIy{Lyfjll9k5`%ux?qzxZ5U#;vBl8o{-RF%T4P*t+T`iCl^@G& zetw`&){r9cveY40;P3RVMYa@aD#DL0`6+#AIO^#wV31Q~HfOu3ZoB?$*HDe0xYF30 zB!)?zfsd9PHCH0f(O+!+bEgm$MG^?Ww5GR#%6od5VaaI|Xl(a;R;QCZNUL`#8lmI) zR7;*sa-urFUEP-BIkwDx>NL5e_EUDD!*P_z?%*4xeloKTFLod~2ydPXc`7Q>H<4U4 zlT`RZ&^Z^ys=aMEd-9F1)>=EMG9Eshh7F=q-cOO)gwKshHkvsr&ff&)s6TVF9n2EP z+`rJsVm+p`h$mV!3n=klN>yFY+kbko{%4cD#io}zM+y?qdcL=0H!^uL_k?ciKL z>sj&XffQGfzQv?bK{K`8-WV!mu|kj*k(5xR8s+%#I7hMNH%fb@(yOp)_dOFbfRzzR z+te`E&vAUrjoR-JGx~dX$<{2qzTDx*pPsEy=61{Ver0kab)amQKv>C&liXm}=s9S_ z;9N99Jc;=T&_ayT_yg^KEgBp0@Fi$oZ-g+{A6CKf!8WYiZhOi&kyBLKwh*x8M$~oE zSQ9K&Mf!DzqgmfQ3Nu&Dhv0WDZD9EU_@jYP>KoY(BnkB)RBA^ny0*QJ?IY-~*>L-g zOSOBpGzRsc+x%{p45yWR3l5HJAAj5RYvl6x_)+f3FB4MHz>F@_esj)Olf*ux$7+Z1 zRW?H+R-cCSbOEC=gtc(XIucM;eSs~?pXJ`$Y{}AYdQO^s^Yj(=Pd^(}4XE4kh^Hvg zvhDAy__8w51zw|N#dB(G2m6t?@>}#HV(j9!g>JjsO?1haFn1Q$s8lyes2nHSBk1KM zhbBoMg?gAs84G}go`)nABZ6KzhvztONM5|9U0Gu4+~^4WkbTh{149sa!B9_DuPa<5 ztY>v^71Pw;8N5HPNvAyf3aq?y{+CIPqsoKEwd`v4sHmi))!Ds4p~MHW$@MtY!OrJ> z{#bXGwu3gEk%`fwWK`{ktFga8olAwuhN}AI2Zn|d;#>P+?xJZDiF+H(ADV5i1cpvO z)W+(x0>Np@caQRY;_Qw{uImz6JPs+t78_REK9_0Q%>aCn{cq}oKA3|Cvk$wSj1d*) z;qu}$wgEv=|K$acWC#Ok&>+I*JsF0c(0G2oFQ9zCaY zDp;CUc_>uY+0?>F-3&XR2=K=roGiT@c~h1^^_iKUxfhWrp&5`CB|Mx_OA+9dV+U%U zElf$FolgyRF>_bElaX5e?GJ!4TDir3HzhMSz z>UW!g48BLjy_9D)E~}AZNH6$1u_lLdTeNhCAJad4mhegfhoqzi_KP?humG&KNHn_t zQpdezom3|0dOvYd+HJ$vNvwZwA9LWvyABOP(MA2Br`%BCEvc#oM4coC#$5ZS8O_Ad z*~*jQX1>7b&7ZEnsJfNX&KimCC!y9$-8{QQ!A4v0Mkq3kbdzm!Y5dNMU{6t(6& zjS%q9d^Wv;^lV&o4GsKNzn}s1W?HAI@Bsq zei$`Lu8-05r{1s{-5WbyT_>+V_z@`Jg~|fKXH!`Vcdc*lW~JNN<;98H@6|DHn3ep6 zjKL@iTZ_P|jMA`a$sTlwQ2PUMY4b32CQ*C&w`adKDqhKEGYyj(J%n-M88ob!lW38| zr3r;V{Z-Yzlax&U&?BgUrN@8f@)K9a8&CN}-<+!E1D^CnFC&Gv?+NG2*y6U$hjWGj z#X=~DoNxqS`IT8MW@XyM9vA)LTsdlwW93ctnw1wqsB=6y{KHY?kvH8}&8nm-#qWSKA{Iyq-GSF@@Mb`UE&z+iX7 zRW}9r1zY0NljM=J-9YJ?GI|8cgRt`kgE3PAeod6^YLi8TqI?L>LVoLxN3DE>8Rhed zLtMh&DQV7Gxu!0L29F){`1~!#c!nZVjbfA&5S+8(UjI^H>&%!qB@{dMiZB&jTJ~KH zhBV)EGn)qkki2&Ll9VQ)=45|?eK1X|$ldLe7>I|fm7vUK0kA!>+uM8Y*XOX;+YJrq z679%`{aqkLV6UWtEhH%o)Dm!mf;8JPc(+0>9m z;^SIR+-%Kf08@A(S_MvbUOYR9?k-4jz$@S0VM$ zKK&!3`4ND?-FQi{rP|~d9*UM}5uQM>eX1|bPaK`?BqgBVUOgKLU)!u-|%J<^0tMVhFj~Zb!9JwuZmUHJwGT+0eY%5-}Gigqp)9n9CiadtH zw~)UiV_hW2uY~d1U91SIx8Ww4)XTOTIIu00b5$e^W#&-#PVTTpYonPGgmrL8zT;9x zo99Zkns%Zbx^(ZTneOk%ye4m+Er}9%n3{68Q#I|sql(ndg}lIK;;|r-`E_kc&6Q{; zG@xu7<9ssUowExp#m7aLUfLGs!1Y_f-46%-+j_RF>L_|n5W}J}zB-w4r8$u?YRPRKLaE4h^i&HRJx)@u_bnVU8mOO13p#yti%MBA1x4+a);_da{n=99z^=jE?BSRb zS0;D)Rq<-$C&N*q|}m`1i39HPO0gu zf8<)N1Dvf8G+!rbjMEMPlN6zdAX>dtBR0vW2aVYhJJg^4biX*)U$}j#a;78iLVBQy55p0ASVrxnxVPRD%3U@O?YG0PvFB+Vcexzop1p@8=9xq6Lv&J{4u`$R)V$=y^wV9rb~ z5d;hpIGbwoYaJ89NXk-<%{HaKCEPvi`u${eY!*d*p6M!2s-a?T6CVRE%A+&3ydx;xOT}9Zabh;>XR`uI)y7c-zd@nwm`4T9s_Y3%H zH;AaoJFS3r7~puqK)cuZ1{UH(cqw^ivJRXA`0EiEsOv;D=vNI7OLj zmoY9rMnz8f<2EZ1DJbCT9~xhgQ`UUH`^4nVIr{%-x8JXim)HfU=Mk}ceXs2{1XfuP zWePV44U&=Ek+r4k#_cQ+ zeLB-L=MAy4qFHi}4ojMRK8%eQq(8O^N!Hr}9$L16IV4SF7)h{_;$s#>;iVA4V9LZ0 zK`!z`bx2V)|DD>?u7L;*o$0HVt5_wVy)pV*?RjEoJe}M*XgdjAWbNZp|Ir$X*aV&! z5ndaEI;MrRRv+$CY2~I}e|AKaE~%+NH7--Pap3Q6!VD@-c>zN@#sn40NCT=hWt+H- zbBjNn9hECTLZU4YU}*9T*v`{S;p0i(SZLYN+)V9hCoEHl<)~baLmhi1%nnwoul}}4 zhHaKr(9ekh>L*BCp8$_JO_0c%23Hcy_dHONz}fMRaq^w9+QRc&SxK{-9uj}F0bZiB zyp^9jpKs&LvcDd)YMv!C%|^?`IjnjKk$V`#;BimF`M=4{2b)w-a(sYT-7@cjGWc``(jxX^{?)~ z{XqXpe`Um}{c>#Y9~pGw%#rcQqS||ZA?sle_ELX%O1Bp9HO(7KV?}OBv&j|)oSxGk zIC~|I_k8LJCtTR0c9Bu%s1y9|U7v5lWBw8SvWNs(@cpe6CY_puP-P8bICd$V%WzGI zc~$bHE)v-oOgC-8gU6z6h@pMYdQ{--RkyfKC< zx&gYI^?9lQrZaNf4?OwypjvUKch|z+ip2aPndHR;@n6HL_|DdvR3rL6QXqUd#09pc zXWt16&7aeDswiji2Q@=A4IpL_sv2hl8so>ml4_K4YvTs$HnVjM(-wp6f6ra!TGDG& z7c7=e5{Btj%2sccOIHzgG(ye8Bzbarh#HeS8h`FR_%3-O-5wx(F z*3IeH*q{F2<{$fc=NFiIPKF=YKJHLJH-$$r!8;dAr@MCE zX++MIp-4B$0S^t=ybbgbUV(A)i`Z9E6}z0zASO;JuG0gzbO)^VH%i>KJSfPmsEEQz2BCz zCs;|W?WLQkCn&92b;IPBaKLt4*$!iOz^d@@b4Xb6_#*wws{w;^ai%1n0AS|zOtx;l zVc80))DJK6A&_f*JG*CchVk6SG-TiHC~@|B_uA3CzVl6~QQhq?iK>zLqLu6oAlsi% zsi6hfMdF5l$DqaRi>s#p{9P70n$%Y%F<=L`?a3g^h-kVRKAM;L6KmoQN^g~UHCrx$ zBNB}X$&EbkDc?>-cO)*(KaIfYZJUqg%oSBL^oZB^l+~)}PHeey@Ev~ky*>yYnd(~< zsZH4P_Ie&%vaQTA=$F14&U}Fag)Q1M)vYz2;7o59S2d+e z+6O6_XZ}K!_vJj0RrnCdIAVP$rlUsLM7pnP3d$Aa@ds2T0ZuAqdqL@v8QT+hrX9jX!l37fQ1 z(iF7(CR>iMv)vsX*2Z2O|KSsTNk<%W5(%gHrdEjLnNJZ4`QEfnUogDX(qWRFZe#$_V zqtj)H4$^*6ho|z8!nMJyC#>It<5#vNEYaN2U|Y|LlmpatIFA_!9zD6SuYOe|5u{KR zeFf=-fv~ME;zrwr9C@HDTJZa{_isaEq1_rt+Pmo{oMwikWdUB@>67RrqCSCa?gm?x z)l{ogqG?&F##uk;50RZ?Apv&S$!hodXWSg;7iEU8O1xvpbR*Fxjj>5rtvE*eeE=SfY=H-@t#6%qgh^f1TiPvucuU+z+dXWBy6aTT2-Hx z`uK3jq7%WqqWTM8C^gRGTG5YVulvMq*f0-4urtDI0q^o+$;2S@N}LW;$rv)a5qWRK zK*H&8tqJEFB4)&FThklG+^~v4>k^}KQ$NM&>vz9h_C^#s3$N8<^4`q_vjysJj!eJ8 znsNKfrff#D(f=%)40Gb-j?qwOGgiMxeVbfws=Y;eR)|eJ$h++CEbU-9>k&%|EAD&$&Rr>g@l)Y3wis;&RK-^Bvb9i=V_5Jiw zfm3zWP`|62uFYZr?<@ehn_8EYYu;9ZjxR7|Pc)< zB*Y?7WTD^se&WL@T!?8#TIdzx(*HAw_c;GfTD!LG$53Dr-yDTw)pEeo@2-B6b-zi= zo44KrP7xFY>y9m!li=;#Ts#=K?FU*=lEv&9-+qSU$e8NR`tO~}5I$<5G->~pVFtB-8o`+^n1KPsT$u^ z9zQEo{pd9A&JN?0qtNDiUG$4l;at%$+Jh-1ROy&E)iSaYe(=XvD;1c#_l|O0I}mMn zlTE@9(UiTuW)EAnndAx*IQC557;FM6uLP!2Uh*)Wk?+N=n@yJFA(AdC!G)jni*lDM zIXi6sVJ>J42v1ff5;500X-KU#46wZG*p=3z|d?x?w1u zgxnJ~9mhCy+kObr1XpI`SeJ!7Rus%x>SpUke|?cptZmR{+xfNLr}F=$CWlO<7A78S zHVIRws~D>~nZtq0ml)8G`hR^nlzK%6JQU_`bGKlNKb2KeSn}R zs31;K;g2tnBtt)BH$n%}A*nWW(EbI|o=?-)%TYt3%zh!z6|KJtRe?GID3iJ#(yyEAyA{5$Ec$*Vxxe!J;Ps&>z^if|$|su}`W9sgII0U1+7n*T zvFg@J!Ul4LDgOQ+MQ7m%_y5OnD@+d4wM}eu)7>-8FfoV2iA|l()59=%Vwj%kIH$Yo z#MFt?<8(JCzrXwa51-GwUeD*_0W1gn^CSHdxA^qO=tq5zuVZO0GATz+VXFo@>M27& z6bpUWG)fp+Ar0wi5hOWujP9o1y=F<_n0{8*0T_W>R&u}dS@Rhpyw_1VD}D1H9*&HV z>`hSndE(WCgC#|CNaU7%VU6Jj&|l=N5@a+@Wr?GdnUh$7(wit8y=#&jzLMS=u+Cts z*3sUr7nX&#k7CQr#f{-7+}{ZGN4u~$NSCI$3b{!1jW5^K8RT5C#o$V2kjgx?q&dLW!(Tn*fXEZ%jdueHyipKDX)J@kRhWfp+^!U95PE90i8a)^sdW+ny(&)DW#_ z^V_E8$2SAbM;!ft%Fj<(!|iTNSxv8%hppP5-VS0fwa~(|uR%XrYD|?I5V5t*;0j|Q zfoI~FcBOlcUJ_ju=Kt{gUrN%lc7ij&wC);;(Zfztk}$hF8H!8o<8r^UbzzmYhN#Pr zxXb{~lKOpO@0Vsr^EEI#(7~>PGC@VoR2sm8*}<&W|D6?9OEvwc{%o)_+j(1qDbjoy zQx58I1lfC34)_Yzj?u|vY$@ZpX!l-5`RL6_XVi%}axg--KRP5I(HE||l;xEVMbA#F zdRE%@OHxDzW3=Uo=uMVQ*H#k?_3qec z1$7m_PON7JB!ArV$=w>wAe+nOlzA_X+h$geO8%;17|nn< zOjWUN|fi zd2Dur)*1c^;oO3bNT6SSg(@|_z+d0 z8L5@;??Kvg9YR=OT(r#nW#=E+8C+Wd)g>UAMR?0qJhdgxO`iN>oadI;Su>G8`6-#* z-h@-4Kth?XMJu`S(XA0jMaeKiuiN5;R!;BB~GFw!3v2qG$J9F#tJ7Q}PUTaI`P1wJPPxqV@{3PJKiDrjt3AE8lg_0zTfN=JfMen1?u zg+iDSD|!|0m$^IH-LqbFh|6bFEMTJsoVc{42|htK$Z1W%PwBvjfsFsBYkrs~ct#3Q zu)?96QAnIgzx1`shhLjO5w9 zBvZ9GoF@Ke?0Rc1wh<`v(f19p`K z2kFvH2up^CtcnaCHu+@EV65(ahwwH1N^`S`ykTua%KFRD0Cm52lX+E>tC9agSB0<)_}JX;Qm`(u{x@-pkDU;Qb)UqKy~VV1diZ;SG`w5FPVOC{mxw8F zY?ZeU8{$S7dx}9Xma6&h5@}2Pge{HE@UD)2lVU5BXF7d7m;PW)4EG#z_#a+GHnS8l z=JP}1UVD#M?QzV29){Q`*XlX7fr`zL$ji(}7vGL)k|67jwt@?lXNX691O7FQqoAk1 zTmh{0S(3-up_H_Zr+wpKiPw?l#{qDbh?P$~)|NPe=mt&wad(dd>dIB}!FJjiEAFg8 z;dIN2`QG~c3G*6X1wpbyTirJ3PSyv-of82D^9`V9_KU6^Ng z>823>yF*&T8$W`i#R--TRy*e=dk))Z@n3catDSCKGqTOv3tfGU0XYUFZKv5E8_ZuZ zSYWjBy|cs5e|*{x#Vem94RH39JK3ytp2UsJq*>K#rg`~Z%UH5xR+=nD{kcmp7ao5M z3rO0W6JGCeCTOtd-vf-fgYe_-3Qja~yvxLud=!SLV^Ul2oXk&dfawN`7xTqD#%m$d zhy^>E%L9k_mfr2yBs+Td8!^99kn?XcXIprf?RFJ+4cS&EfiXH5I_P~)Jgv7y>bvLj z+PvcYkUZvWM}THeSg?RB21avXn0qjF;X z$@+6(A47vz9x=&vj5;+z|c_-BTijgoU z^%I37bFfV)#c%ew9ujbSbf0+zoAL=4O$H^7)J9VW@kiG?0#4fdSZI!42cHX;nZCEY zu}Gzsrfk>f);yL`t9j?=yNU>>HIkkmaLmgU_LiFaQYka=9G36D0zu3`gD2;f`lMm` z<_mtJM;k5s>kE(FnRq17ACgid3v*8Jla}w4b$=?7Sd*KyWIf96<|iKNJ|&AX9WSwa z29+3p_vf>KB@T4QH!Tc-n<${U<7`?7)>Qhk0&DyD8n%rQ5sZU2aDNH31_@(6V}rJ_ zV@038O`&$LvQFdY*en#^s~;>$wZ&LFw7xu_(^C8iEZ@Q|e&9)-138m^c({j6K?IyP zkjR%fAI8~K=W96k6rU*Lb3k^e&r;=zH!nIMOSIywoDT~&Qhg{yniUeu_4h)8l?c1B z*)1|kp0deyeSt7IQigeC+HLM7C(j7?V8JU^@W5h)`uG(x!R^Q!#_lE3BOLS>o|GS| zFE^OgGfiz)=Jd3g<@iR@V8^HsCe$jaA8uv~%nt;y679J!5_BXFosz~QhOofX(;FHr z(Gb$~b@kLo7VxZ!|IAA1^}DL33HMBVVyS@R=VVz^#~B*hT*ig%iMxWM9@0AWhYWPD zI!2Ao0twa3W~xd0AmNQoS=Y1hf}^}pa&F^m9~`)F5$BKkl$T5jQ(p1Cf3rct`Q0oYqto{y8UBQ<7+!pYz&a zZqn~_VMnltd4@#;x2lkXg~-xveXaB5JN3+6?36FBaNb-@G+Hf%r%!|B?J@bvcbyT` zY{B0XLh93t*5x}bt$G=YL%Dsh=RZSJC8!@9S{TI!aovEHj^!F{avQKMn^>!YyraB* zz4K6Gvcz+(pdQ=&0oP5(?(8N&!i3O}obyL1aX2g0TwBtSA5FbZ zN%BUU@pw(L_tXnru+uFg*2Al4m?`1y=jF7copEVGP2`L${_UGSeqXNJ-@wIo63bxO z=SKhG5deDq>T{Rov37mj5>o_&;=*U-oy`&FLE2r? zP)5194)KKv)&oZ=B&-n?MBcJwO&we#zQ2m~B*A5osJH)BmIpiDK6&0WXyN?~cU#nA zgsLqu)_s02a)uZcv^7$mF{5pQr8u~gMulSPxX&6K63J%S>Hux`gTbP&G=HK|WxxEQ zdi~A{-F>yEn7(@z(@^*V4b8n?e5drhp7!0|m^n}^`Vwq~7yB>Y9AE&4eW*ZxF{uPa zQ!KS+e@OGzb}UaM4jT5m%v}J@TBw&fA~Y({!+Rg*_4zA0&*NBfBVu5j^VgEwl(~DLUunldm+!FwH8cea-qQJ{}WLvKaD7g*^G!!{QyIk!ABA&b6yX z_l+gqp=>6_yN3N+Tk3E-kYk0j08|(W{cSvCyTLmYx@!o=;eJ#E2Gv>qRGqh4=~{h6 z+B~9z7eUy+YHxXuUX>5LhXTZy2qWXv#6E*VwUmdKdHd*XJn#V}7 z7c;6<*@^1a8>8!z5&ZG}jfSZ}uXi!Hc|Yy3*X>K6%>1r7<%{C?Ynuo0U`TN37Z`qv z{a(Q9-FV~e%M*vI2aW_EiF&h5S|$=i49WjW`v4nmO^)^#%j?jNf{ckZ4|<{amHG6a zzeHQL>K(*BmA2QJ6b3-{#fAV@&H>3s@7$)8RQJ3tg zN0_I6axtKoeOenR9!_n2_m+_M5#6qi(V|mQ^{vnZ`&?tBXoxwp1dwYyN{I&_;BfGC z1tMW0J=-$NxPDgrGY+PJ^)0TgMW#aoJ^*GIdz$=gz9a~JWfr48*#WCQZ^mrZ7Jd~z z_&ra4r9PV5Nk06e-g=hXh<0L+1rVLe6;PUiH`IziuICUR@gb0|oH%M42_Y zxF-Q#*^?VG>44CPGIu9|-GPt1!V6&A52&6|j)q@v_Iu5?(}Z$$NZFWJruICirvVOY zH1upt=**j26;U!b=GgI4G@c9yX%zR1n`U;4czHw%YbD0 z3_)>B8>wC_`s<{BciS|K6~a`lJm`!K#t~`VYy%3|&Uf`Z9OQ&mA{$ANzsn9Ifi8ny za}6)sc1eIyw$}x@#4G8qnyx;Mpg{A(Jn#Di>nHVDaxi@)2@?;0 z+UdTp>O_8g0Sr-VOKqN;GA$gMT3Ky9Hcgsb=<>)hBKDtJ^1;Bf?6((b=<4xq7(bs) zoTCSWOeN{;Q|Eb{XR0vftR{`-1PzFssi-+w$9s(%bMJFc_h*<*t!!GoMar-6QbNsC zJyFziT@_~zj2``pbiKZ^5t#bmmAsKKr2E+$9eZC9p`rEfhBZ(e?OkQd@ zgov>W`7K*@)&LK@LO|>qxIx~vWuc0}88*++%g89IkJVud-SN?mqjp`SoNq-u>t&zl zaENNbP?^@!g`wsU&=QWztNZTdP{2iG#)##y!3cZy1 zdzU60R*!zN-tE7KbJ?W+-lcK8>Fm4%97nC>4w*|)@)G5dkp`qdS#C!yiQf*0QJ2$Ixh}8Vfhd$=xFs2vc?Cw&O|ex|nwh7t zTfv(t<4?0vbB%Y%;+4oikvE_VcdSzRZ&HzEW20Mxvt4gn>Nh2EmMN*uq2f)H!Q$|n#>^^Z^Ior}$F!^D zu>@*EZB>miCoPt9HSWbrA1KoCJhwks_^=!=?|yUA9T7L5Ym1R%1RXi6Y=e2Qe1+K+ z?xSkgrRu>3XA|#i69|mDYTUUV+KPAy#w?k3v<~3T##Sj#E^lMLx%%RAD({`j8%O1_ zM3;f#AcyJ=(c#Dy$G%~<{AnrSLgXXwr=xIaTj}z=Z;B{oaPd;xk7in0cEqoTX(xvi z+r#Zc5vST3U?si$oKwg4oY`3gjhul!KwoV$GY+ zv$d}JU+^(`VCvcWmr)AM^_<$lviTMurK)7H4*ce9Dx1UHMI1No4RbruiUUa^s6J(Y zT4AO_*k5K&ie zIor{LzP+b?rSi@Inj{bZrCosB>S^-Ax*Vrzj-N$R)B7!au ziBb=Ww$S=@hX9PIc%<$a{|;b>RCMLOttqtiBK>qmL^R0Mku&Gthe+$C%6V)cI8+$U z{^KCy%ZpWS#P9p(&_C|~;mI}W|0wE{CPZXO(XI>?m6_F0T-7ZY;HX- z%BzNYnj+i4k1g7`N+z$ld|6I~{|Xv8u#rYCbJsqO`eXyDM6PJnPUkh$cZG!NXx6`>Pz&hgH!&gH52 zxOrk9mc9{?lv=Vgegz5%quVxF?2F0Oa;mpk!xfSXyIqa?hwU__1r<3{$wb6Rjpj9) zlhSM&WzK`Fb2~}08|he*$}UpWWGwafxi$SE-XFCic3H{4CtnisquNzuD3L{r3K2}{ z)TO7{ou0>KooiPvk#`TVTI`7}BGU)&#WpHFKg}Q?VHO3;QZ-hj&_jv2p@t&ZF*lQ0V>>@rTWNypQ6wlCs6ItZEHaEvimR592!# zW2~X|7eLp%*bi6GPclhIeYptyOcZimxN!v+a<8L;S6Zarzkt}Y@SATISyU{|F|gva zY%jlJ>x&=~)-z5s6@8@MQa$RDDw(?sbR2Fs?Wk7r?f~k^S|t`^g=-hZKk+s_Rf_*& zr_KnvTdi+o+?%}#Rhr)-)i#v7xott5`15-J#JJyUZ>yEZBzhjyRCaUB6bpBqcQLpv zET`=$mV3+Yd_H^W#) z8-u5GWVrfx0q+d)^3;6_^-rq0^^SffVAL;Ld@pk^*+2e3=`U z``E`_u?0;I-1!wvj88lzTp!n+65?G0`Ps_qe>vu%(?vWC4fX^b^MkX{B1Mcpmap7zxB=gZ2mAUTw!fpV!xu{ zAvL{)GeA%Eo$F!4%jZ5*(oTl8>fp1FG~4IbKzO({wT+E8S@jAbQ##yHj!D~i@}iPx{hSpbp}x@jFrkA z7JJVQEdap3Y}HlX{u&yXc>t!l)te^08?T=Td-cPCpqkw7+7d(Edu^glT0?KWyAS5V zmIE77-@W+Q-|AnweRNd0I^~lkj-Loscfzo?CvE`-Z`F(DP5n#Fk%te9?f^3_%0889 zO#yqN^07E=BS+l?rYQ_Xanse!f@#LM2>ya;wASf9SI_Jr@nx79MP zV#j55w?t`Q2zpX)`%o>mhim;59qf+ZdSYf|Xl%5gid*|d{d{yk^O!`n38rn#t5h7p z)179>FfAVCRO)q;Ip_&Z-PAAp+mYw(q{Frxr8^SAA#WZl$4^jqKwaG@ZViNShrq^U zs{jS*;1;x5^%z1f@a1d}GnubGOZ4f|c6{Hjmzni< zZW$WCe%QZ4FSX&Yi5m+8L=L_2lpGVtZA3w6`7WJF~hF-qb z35f@=#(gjYRI^L$z-)?J=^*{nHF~SPbCj$XSF0)D8DJtEXTj;6R#(>#GNC4;mAArv zN5d?+g}6x}<3v%fugUkiruhiRID0lG91M23m4&^Q;}75sQ}N*$LT*AzTB^ReY;*u^ zvj@RN!BcDepWyq-hPAx35lOfBOa_=eYbW?X)W1wMAGvbN?BSO8L27-GZr60G(6rN^ zXw+)nzjUMW`99lh!5N1?filRsO1WYcw<)k;MoAXuwKlgK;w7mOZj(}z^&ChsOiQ_J zeXk$t?Vxp1xng6JmvS^1l5)Y{A{s|Ee}oWVXx(Z`P`CVbq)Gk)IJP8OSJl-0l5p97 z!2^-jqRU@d+0anWXyB{_81F94sHI;H5IwGoMHw5|!PZpVPGhr^{64Qfbu{PoDjc}@ zrL1H$jxAors|QjnzFi{qTgVcba=*#E_@O3iAplq?)EpPrY38+K;cW3kvJ(j1;bt!3 z3o%4NyP%6Xc*+m-<dqm-5$Up_z^VtiU^`RC2LSyglVQ=9=F;%4<-oub!WUb7B*yQSGZqxWi! z%Uh!l5b4@10y3zlK@?oQwEjpjQR|#`zTkFnf*S`c(J%L}1>Pkv6V&X4BoE)>*jcc$U~hqmCi@y zdi@bNCemH7T9%!4AzgW?686h^UXuz)-{$7^>gYDR9k($F0 zAL=u%D4VCkOSp2W<=B^o8^x)nKC#YMP0T#^8)ENkba8hDAN-)ArKlhG^WyVaNkeZL zbt86I9$_CHU1}!3nzk@hBGa?X4`>Y-F=f<{St4|YQgVDESft0aiD8*nNLhP;+5=wV zTzt-jwE_LNqP0iiVeTsXHR~)^_)j|#S$`|_HCWncVhh0@l12uBc_M_&fK6Uzfdl?)(D)blY9L+aYg;I`icpqkfzc{1sGLPI_-o%in;eM$5DT_7JCKu0vIHi(pphq0g0MhQ z*05v;&N;$F`vlh1wxn&(C5GneMv-J2{kK1>10J?q>Y^=C%M!*~5xL9$ZyJmK4o0mZ00bKS{{UXP155p)3C zNZQ9gg3rO;N&Z~+LscRk{`i)ERNV@de;wfzHZ6Md3p++(Qy*T1Q11qCruVoG-9?#s ze&EYjwA;F;0z8>{n)pmd!>%mCS@`y;gCHd9V=l!LrU2?i+mokKD$}Uj%FbA6yYO#9 z-sgbrLb-}icIHB?uu-eorq znRwxefb~ckUu;jAz(Gz|y5lQRHa*juTcn14Ydc^*m=pT@`NC0s}`U4gx@|HR8dFPM~@F&1FDz8rRMw#FnmtN)1t{MK80MnKJ~KfRswyu6pH=4pa{JU>l+kwB~Fnff&YDRFWX< zf#Ypr6H?7Tr{K@_8W~~rwchsEZl*G8k_PSwZQSFSqMfs+e*H$^*^djD-C5KdtCQQ( z-hXu4JAj1NM575t$Hk#D_#$rY3%_(#!n-UtY$fYgmM^ZZ{ytQF_+Z=QqezsHucf5Q zwn6eGzraC98d#^K6u7N0a$L+;Z1n@RqV1-av)itI{ zlk3wQzh(UgFX}vBMwclU6Z!2Wd($rjUioe*68^^=oBl-rl^h{UfyW${>*4vrmZ{k! z&KkzP9x+ll@vg)sXXZ-wP!vau1GTFo%12?N};n)fGezU zW%it&EQgq~3^3I5xw&$CWi{u&v0KyevssQHBF=ljw3IA;E!$`e9&;sF3JS!SG#Qnd zldGL;5cg0)5=*-H6P~z?T0(pO$!{?}#bgE<#QCm9UcjDgQSIm|y{wKI32aU~B`1Um zILNJ1nJCk(21EA2cvvUZv6rB*MoL^;*83JP(xX@7E?F^#*4-t?JzA61657Z8vJCp= z`eF59TmN{CqyxUN_rd4Ud_VdeKb4jmb8CW(s0p}_Mqy9X@?)B9w#}ObbpPs~HGeXO z{_8|zG{{^|N08Iyy6%EU}d9|L|&1xw6otkL^b@S!<|YA7>`ajht-+vCr27 zcS$S3*_j#hJ&e}(2H{MB+}=FJ{>~2w(oWN74kN`DA&*(kUFS|cKtepY9|J$%Q*EkH+3nRR3xMD-K++S}TD4dql^<{>u zq1XqQQP|~~1&07+tv~k>x^HZuD@PO{YKILT_}b8HI9MFvEsn^!r{66>D=hxG<{94x zsnJFZPu_eL<`sFcj+>{bi%*+%Hau)F5xJPtY13Z2fJ|M3=6Z;a50w1u%o zoWC`Yc<)@AcB<0yVa`tARq)!i2STnDRTw!xk{a}H22Bu{2fE5ZC-?(ONtsheL3&?J z?7SF)45ma??w~7*+S98UMt8w8G+np*_tc99hTGE=sR#d9ZEYWsPd5^;8uDqHn?q-XaG zHz~6`E`-6|#pa%yz}dWQ2y(U{TSxITr(9X8IQWDusq?63$;%)TDDzUA!m;e^i)oW( z@S>5zU*KI1s&xWG9$U6jdn3i&SVet|b~yyUTlgzmd9GeMeU)ZRoOF;IpbT}V6gga@0LyJnFhDnN z1Tm<7w&~!l>c@U3KzQrRH0s{Xda!f-?q?K;6oC}_l%ZQ zYI-g18~077rZebYPH;Fa7IJIve@6D(_{mOUCJJwu{)+a?90owDu}+1?wryepru;N1 zJw*Py9zst(o*#y_J(zUxD2>od z2`~93*6TmIy#24+ik+3uOcW+(DtF}DV)_|lbZbGwzM7d#F(t%Xy6&3y zdQq`mEmH2W*F=A>Ryd?d&Rk&pu=(2x_E`b z>2;&0Vr;0^6vc=8-8ok-eSpoK+{uD#2H;aCYiG-*t6WF%voiIeUoFya8tSf=1G?)V zd6O0sU%z#FWCUfP6L)~0=8!yDvs`W!^$5Ez3agaLNo*SkG|awa6ztlF7(_%H-OTU0 z{>B0J_YPUG2To*APnGx%vwS7MXlvKw`*6oKL9rzp3u=R1R^355t~ z7V(lNzU;hvo6jQi9ao6seSNU5Q#hAz=^5t`y%sz5eSC^GXWPeQ_4|-pBs!Y7vX+e0 zTR*cz{pswBTR>fH8-abiUqK@i@yA^=iJy<6qut^25cQ!7QBMC|GNhijb6Fz}x~wq4 zLrra@^Bm!LhDmrfM9MtP#@)UDNsOg7z2q)N_j12uU;i9NQ6cu3$(;_tJuR%>=(-0` zh|gFb8=b0EPmH(EAo~Usq$$#O*~As+F6!RxGmnC|O}+1MM!hGPJBXb&#hF!5v4C1E zV+bzT4>k@N`s|5R!@mBAKA=#RBD&xv?m?+D?Ar@WA6seZ9^SDURFO4*>GjDh$gviB z`3KV`fpvn*Nrt(#++3r_DNOq8i51@WT7TZsW3!yUl}Yo=aa(I!xFNcbl%^3&w2&RT z2KJkhwWrp~urggD%FbkERD#16w5ZpnC12o_b+<2Su(Ip(5!?ra9otQn8bbRyiv;zcT2Nh{|J2aOSC zR#HgWcj5Bk-)Q@Jl=M^F&~H>cR%UY%*Yy-Mw`P2;sEuYzy9RX{C8s5F=Vw3m+6N26 z>g8vWz2!V! zB{igzI+)7g3K^({o49(`Yt?f6iI3M3&k=945@vpyR5$uJmNDyC z6FPfK11vnlp3E?^Uzkn}?EuH#H)q!x(GP1mtrccF`{20wc28Z3HMy4=^*pSkh{mTp zT%7;$cQDg5FbDQf&CLxwtU|_*h+%5KJN745Ny^sSHhDBu)pIH_yA1nybw`yJmup%Q zen0L5U}9u@(6GR&fA6vi+B&dc4-by`*5(C1nNN@sZM)Z$DJ{M?*e-6ab9+nrxL6h3 zTW^SA%(!DY`Jg!aF_?Qdo5IbH6}V8lJ*gwvaongt~TXwHTPVg9Iw~IJo8MTtVWu`QD=?FSaD~&}{;eM(;>0+PsdlBR-x=>A&O4=0_H-QlI^j@X76m&%|zm zYfv+_$BROR?eD|dY_Sm-QbC<5l5J!{v!4H3k2_a|EEAA!T#_Q2lid|e`}ote(|RWB zH$rXGJN!T1wN&^os-6 zz&TtVHh^^0$(Exx&w&q#M}lc_>S`zRpj+3uSl1-C+b;YO6)~z4rDZviGsYICEo2rX zDl?UY;g*2@=9JoKE2zdo0>&@~n&gYC`Bsa5e67i>JQ&VVR6d4nJcU7mRT%1~nm91e zDJPZI?gF81LA)v+K)AEuO}?YG_uNzd7-VRa5`yrH|Dj1xtJaga_YNAHRW0ZI`e{s$ zXZeAUmVjcM+pA@uatT&uhnVn7Fk2!za^Jl@>^gL)=4|z{p=y~eY1WtoV%z1wlGy6LaSP=a z_~G%}yGO)ECvK7S4($6E!{E`4EC{Nk zGtd6L2xed0L4%esY#XmFYExHZG(7fS>5UkPyJ3k=rP+GP?S{U5c?nv7*}A)BsX4AM zE-`a?N89U@AC?s`3g7`@HM|Irm#FQXdh6kiK5*LA$Y#&9odV7Nw-5qq$59X@U6&w!ZGghq9S-1Qjk_`XdOB+m|Q3Oi{YcOw3Gzp`!>+cJjR8 zKRkn1gaq=@pAq%uN{6kc4!qGkFTX3}zy~tvrTG(1aX3{7&5N;VVO2{`%YXSUyd^{I zTUD-bU1+SgUch=40d=3!B{#cH+Xq~QVh_NW^(xHJK6~(E80%n5!M>w8*URNgmf+U4 zA&7S#0AyCN0|=Vj-=F?K_@HvGCjSM0&Bae-hcv(rsn=A~NEm~r4)W#hjcLj?b6jQ! z(W-B2Y*u|lnG2^(F+X9oz7?A!@f_b5vywtj`&eEzseX1;xlcNl4U!pO1NgY$P%|Rp z95q@(o@Mx%k+@b4?|!Y;yM*T~i%>*s%cFo06+?-7rZjBVs@#`2lX)_?G2lcX`9Yxu z#iva%>R};wT_4u}Q1>E!yhkBD4EXTpZbpBt9-Hl7K`ulu{IE`|kQ+K3gLoj!LIT)v zPmF4NIm_+?i!nW1mwNX;E9pAsMhbd56vJKZvO(eiq(iX4fzN&7aG9Q4*&`r0cKFLF zJ()`a6rnRN^K9p$D&jzxuK$d?_lxai+nXtKawj)-$lb!RX?UKEQO426j*h>p4?4-T z+79Uc18O-$MuH?dyD1doEz7sgSmUhjbPm9vDk4@(W0wveNx z7+c&W1ZB1i9Ko!O0!f+OC8M~VbZ&UBmHPpI{mjdhnnPr?YE=;sf#D<|5kbCp=vn0m zvETtB9RbLe3y%%w_6k z#*jr7B_|u>zHVsvkMq_?pJHyeH7{}Sbkh)Z`Ph8P9YOH1-gR=68&Nj@I(rclI%_M7 zv0(zE4p#~FT;ukbgUl;Fl>bU6wzarh4(pz<(`K(`?x6_U2B}jfhiP})S=q!_H9Tq; z-oIAd=_!F5OQ(d-(I>8NG@VTpeqVFuH+3-DXO1gKki3|5?`^gJuuo$W6O-}S_Jj$UhKD<=!u2gK|%XRwwuwiI^pJL`!$?6H> z*@VY@@vEA;*9+xuwQ;u)Nt?5`7FXjc)IPH0P#u-q=@edem~t_YAb6$nmoDP z6Qf?g2OPNrjUZhiU$VO4zG5U`C2wq*aGeC}189jlBZQFnkP?@odE$>eYCF)7@6mD+ z9W4Jwo*(dat0|@+sd#>S+3%u<3YWf#StkE+@xfy<`J)QoZ*sed=h4o`lXv1+FX@<{ zC$kFgZSE~deMWMM4eU=>?Nxr^vQ$SSF{>Kr_?_f%$g&g5pVoA>W7@fer`6$18R&sk zm}9iN%pcqm4J+rNwm)G1Yqok)B9UAz1k{AZ#0+NJ9r-g{wV*+k{f;;gYyMP=s!f`p zs`Gz%ZQvA^4&e6*`-3P|>RanoZ*FcDNzXp$GNuh5+r6sFTgFj4GA(@vnYeYps3((+ zXB3_wU@g|rrr&IV>!!&>N%efCGskeHiw$m}Vd6S3S7}JlH1F_ti2FaG1hVYK@||P0 zO4OR7ecipFsa%ol90N%GPscfa>%4CvyGbfU6aBG$mrPR5+<cDJPjSFr-u-p{dd*+^iUsAHkHo2)s`BnC zAd!DWBG6FJ?PU*MTnDULG37P%wUf_L48MUu{2WdKh2~M3Du*iT>c?o9=Qbx=1cx*V zk3*da_acnffzi_>>zgFMR(vO?fjYf!^q9H!Er{K!jg1bB6T;&^J0RSXz-I+BJ`Peu zW2x}9R7d#8sP>pXYs49V+d_~tTgnEz?zU}&)bZqMTEFdy1zVfz*cP+bQ-C@K z7zE9(F)eeDOu2)#x|#(-u>nl0V22EAW7av3Q|xE&UdfrlI=+rA}b^9+*pM zwAvjJFC|<)Le=jQ{Ju{D*nkz)Phx-d*_eE~k;{ZxZ~VWB`@oh*D~O1V1w)A1sbJCL zitV|!5v<11(RO|C#f7cD_C9XTMjj@GkBWFnfqza{9yZa{#wgz;0=7Hi>a0dbsas}D zl${$mOqG4r;lEX;p4v`H+s|cNQa?HF5N;<6D%gAYx}%Q|pgG_D%=lUCzc<^a_S=~? zYfjrTY<0m7^Ksb$f0_wzjS?Kel1{k6_@)3++d^b|_dWGQ?$?GmtJWyZpYjBW4_7P7*V*HTUj2tR^TL=_)DD5?iK%ms zYKDN~ybhTwjrZzatpuX1=kNRB(hPm5xleoEn^-yo-YhIr)b<%@Igjy?E0#(?*eG=7fdOp{6sP8Ca!e-p&jqL zZx+(7E|>2UOCc$To*gx2J}zl@>sa(rNOwDxpTL||B~juOh^hDjk#zg=h*usPXg@9T zLS)G;cItc#IbjfBS~%Jw)S5pUdp=CFLF~lIUyqJFGI8y?7H=DGSjFXjx3VK|UsaD_ zKXUlBueKA@$>?eQWSLsOgP4#TWy*T#z`DmSX}aD@kOBVHlqzbklDOV8|7!_bqo_QUn*z>kKqg#p3y(jx8^Tx_$$ zPu}Y;*OgL06VPzXQ*t6-lVM%!eV3FtAaZCl{kU37qZYt&s8(1qP~phgr0Y2FOs?0p zDXDGa?ampZ*5(M#T^3y1D%Yu;c6(NbT=OZbI{(ruIvTuk30OkSrgR+{D)&(qVcBiA7mvhgWX0tZ#NfEL2k-H-gqK4ySlm_S2g1+#v+y z-qn8$GCnVli?ZdY^N=$G&;~zOEl1qNO~x-$y6^1P4|FgmpD5zYDy$VakC-sScAEmW-yOrE{C z;~Bf9jxuf8(f~*7*zc8Uq|wQu&dO$-O6uT+G@t=Zv(x{*`fQ^Gb8=#Bkyu0`4HyH_ z%U$xFi+zcddu=O@DF!LNOmxkHcn>ZaeGOmS{xk=2i8s_sP*!;5e*Nx*j}S5;)NIHx z{~BSp;;s%}A^|pI-82kE`WBuXnmVY1SYbh#@{I^YQ(xr{Rzp?hUUbi(bt!{Fu}e+1cugB0pMy9d9gookWoGi8iC z=|wGlq6ZX^^<+KuD&FM@GsxydY#ZIzGZ(!$7lTJh^P5{fk5v6%0P7JH?jEAHzq0Kk z+PLY@0;$PZs2bK$nRZ;a-XrF(d+-zy-m&?1q5*@7@f|YVo<&SyYw14>*rkn(P{;D; zt#inCwuhx!MAnL{2*yozv)w{`xY%S6I@dkn_)PEQOme-d-l3%4B>w=r%cV)ARrE)H zVjz+bkqiNjovYJ)H9pCb+0QlSIu*H!%_Is(t$II)<@0ajl11cTR~=@K%UJ)^{!$nI z3LWtoZk=t{3WtxIt}D0j=lm37;wxN##KF9{$6uPiGZVr3pqF$2=jlyv2l$3|{o=MW zSW1j~opGps+W1%g3RiO@h{U^q;OEx9pYUh=6duy!VASpkXMtbOZ-@R9>z7(#y=U^( z4o*7suTj!&yo*(`iWv*Tft-EpR|X>w8)$do>L1gehd*kM59=``-e{B&k>0z@Uytx= zWZEj>Yx(f_VdBpb*;^?vJZLylGI_7Fz8vbG5S~T6)d5&#!Ax_<(!O6Chq67)H0*w* z#p5_`-w_{})yu2DD&Nkz@BB64UJ<`Gs|C&I-zmlxy{F1+(6Y=r_OFe_Q?t4BI9V$m zKjLefyNJrfxL!?oo~I1b%vJl>)7tKk&73w9xE1BsdL%JRn8rnU(bb*lqsSxBu4R-6 zmkZvzD<2O=iUa;tzde(oSnb9$ThxO9yza_Ztwg*qai`_u%=mf&(9(&aj_P& zoCdoy>0Luv4H=9aj8~3ogADSwL(;5RYjE7hxtg){xg@$jA>-1yZ#{>|juTdbJAvd5 z_2S+y@PD499-T)O?vdHeEznKF1FcopwBc|JW74&S*2A(#%N`%mrm(#79DIaVrpKiK zq0r*DZ+t#uQL%8tntg?=sG(&1s+^dta+fyK!rwP~;r08^C2(69uT<8VA%K}XSIqwa z5%tSkXalR`J;in5py#77sO+wJ)~({`?lr&c@c!IaX`s%eeAV%Wsj1vs__W+4godwp z@aK%9FavOUabCpm){3#o8ndYPgcelAgHw864~9u%l;K|ON(g^7>;Y3*)vxp zc}?hG>{xMJUX|jzeK*8uX(`%siuO%YPk_SgIO4ue*X{hz7Bisl(wC(*d_Q_OE5qd@8oF45%3B1$0noVmUYCn$j4%GdD!?n~#SUdaak0cMv%C zt#1wZ8%5DhZ6R3LagZz8A+%WSO8VEHYV9VL#&zU%#c3>LnzA#E7_Ci@E<0;>bm#_u zD)UWt?PmSh8RngF;>n~QRAcW}bF)hz-QORDMJ@f|yB>Qb=h<(I&c7%>rCyUz()BFM z3oh_D&$U_C^!Z)N1?Vfw@9ibi^2r}H*%_o|I2_lC)@YU4p#YrVt$4NUqD{rd2;#kl z_f)$8`J+2{8Lm#{^vy?;7+E{lL?@s|nZRk2NF@6^bo8$CP1909GBZ^yw2NVMWWW{c zng)!d#uQ{4=C3=OMOdSx_(;$LMzD{{+p`-* za$M5-9NmVUE}eDfFDg2U^xJ#L4X4^;0a$j$Ryt(PH*Mh7)|;WktYMUHOj5c7nV#xP zv$;h&ZBlDXPn#b~?rgk23g%doC@YrneY9{{^w_j3J&H`@7f`#q&LqG!kEq$B#$6;k zx>e0OYboI{#gN0=sa$DyK6eI_cGz%7Hx;$ea$n{mx~(5d`$6+ARP*guw2M}G{FPjq z_5Bw`8@%g~0;sGfGggjIL-4d@9YW-AodtRpou|(ah99Jye&C@^s)&4T< zd{1W#qDd`>2c>#Fr;2nvxzdN!Xm-McBsXCnZ1u3GT2Hm5yL zv3vurUU>^;_B25FVdybmPxx2FmnwX@u0$uIfsU2%w}!k!s9Oby$~>^RC;O(oOTc_8&9 z>8z4C_(6*E5!VIK^LTV9P>Cd3+_kgXI2ahKcV2ShH5ne&r){L%OoB-pX!Na>?Wi2n z!-mT8D!-KzNIcE}uCjeRMfXN)5v;CdB&zXI?FNyTd4H$cfrZ}H$6a6CO(|<}vyRo) z%i;Fjz1#4r5?EVVuK8b{)ud{48;VB>{hDMX-kg)oJuF~^ZG|gp?^3mm@fS5j-d)x1&{3_hf7?ABT)k2)G16_&eu016HOt!eyccWHMMJDsh?W6x^J9f0~* zDX+#}$9T?CvV;>fld`$%TE~rKvqeU399N$-X6pOx#~(lRt{7jo)q;`J2_JRn zn#I1Zf<_<;>)}Wa0x%Wv9*^T4Ledn5C&G%^y!f@L+ozKe~f}~>M~miS6d%&Uu)LTLGygL zuOZibPxip@#fJwq;(DjVX>|z|5s%Hm6?4OXYPg-494YBqM-R%iCQ{c!qOpeI8_keo zoY!Mwi!`4w!LFZ0vWiI7IglLSS5AB(Zb+6Nm%kMf9gZ4(EISA5#d2DTNrit%gRGB~e4clnC?j^|Oeo>qrY zfE@R(U3@2@-`p1uuzFWYsbm(h<+^T%CDWusjMvb*CxqTOViwpZ`Bgg)2DDOzv1}mk ziuS(_Xp3tW^Cxdg#&fvrXK0=nHsRz^^X9wlFT>A)CUISskp+|%WITD}tw|Nlg``29 zK;w$$sXJ_K80cEI(Nx5Ug9FyJn@1M#`8J%f?@iKtP?ySJjxqApsIM-h-pre87}Q|n zVuUs;VIPtk%88Bk5b#&Z1nAjP$O9?9&w_9ogwr>L!O6Sm1ubblC#HgK_U(jiXwb zG_f4qG@Mqd_;xt0g!f%BoL0_>r`z9ZD6jslakN$sa{3)!g`h$9G#hZM+N^3CeWkhc z@w9ZWM$)vXg}DkqIL0bFjULMX0By9syke)FC1I$T-WSv2WFi58d9PQC!!X}z#@oI) zsC+-+bEmk34%}C(XQasy266n&Vn!^e>{HxGsiZLQxMg|G|s~Yyg zM%7N``LkU_Hl|xs7ArX`4FA^t3gGc2eQ{hs_cX!@LbjJAR}Am?#AvtO*g3ANa@`=M`T2ILr3{u~PVOxmxy(msPP zj;WuaejT)h?Gx-vgdkUU4v{LrHW8ZQyeTXeHt|_X-#*`!M{4vauRQ+%+}n?v&{yX8 zr1_7vr7v{nuI*AN&hxm|7|`yuCK(t?^>{opEQ%(%<2|bR(*#N*JONzE9T7abFA2d2 z3Y@h~{ek5m$QbWlj@Cpm+AyOP&s}CPRk;-{=re}7va?0ycpYnpzq^juvckJ-vDLiO zksd&+D-#Zr|4&tto z3+Q=Wo{v1=JFRXT0dAZOV!IErv2QI$UgL~aTe~Q2^DK>$2NmB+CKGyC;dL|-MdrT* zbgvijKBJioS>%fJUlZz%$oV}70|LBKXeYY4MwhF$KML-r8yvD{qIfGzklU-c&f{La z7K+|TAY!EO4~LrS)-?;AxE1QR`ariUYB)8|Rq7TzKUmRNKu+B8UR!mgZiUGmE9=c; zL;F36W*N%YgxlDOwFzy=>zagUwmwkt7MOg}gkV?CJ~XuQqmo1z+H37^8tB_@l_U8^ zMr-D;9cej=>M%NI^sdShvqm*zq45`uEyG%Uq9NC=D^uaQ^Yr2e@SIhvn_+jR&jvHM zAXEMn*_h>)(oV*`hc9s>gOKz_w(}Gy{A{jcOLQu#y+$!!nWb%- z5T?A#N`geh1Msg$(Cy@cLFXRgxcQarZOhQ3ty{ytCyeom^4&t$Gc;u@-uz3Y$uui9 zy4MLliFVNWj-1n#gOTEoJ4o4z0HY76KsEF=Ba8h+G-j$^|*V%d>#bT+ee z2D=$9g71j%1}o3*Z!T8kI~~rwPo-3A``eqNIe(F8=CY7h8kC}Q`rs)l`*DA`#d!lK?NX?vq+PbTc3#3tfwl1A;E0yrn@?0^tfMlNa z?zUD9ab~E%4gjuaAhPIG&@Gm0eZXb5f%LB5OVUleOEDbo=BaphOp@C3VHg$Yi)SY; zodC^RVBL=`*EG3hzjuUfA$Y3#JQGEflaPAXwSU4omo}?%-*}qmZ}f3zbB(wLrg3Dc Hrhot0_kjNQ literal 0 HcmV?d00001 diff --git a/inference.py b/inference.py index 5c80818..97c1436 100644 --- a/inference.py +++ b/inference.py @@ -1,6 +1,7 @@ # coding: utf-8 + """ -for human +The entrance of humans """ import os diff --git a/inference_animals.py b/inference_animals.py index 8fddf7b..20f8452 100644 --- a/inference_animals.py +++ b/inference_animals.py @@ -1,6 +1,7 @@ # coding: utf-8 + """ -for animal +The entrance of animal """ import os diff --git a/readme.md b/readme.md index 0347dba..ba1f690 100644 --- a/readme.md +++ b/readme.md @@ -41,6 +41,7 @@ ## ๐Ÿ”ฅ Updates +- **`2025/01/01`**: ๐Ÿถ We updated a new version of the Animals model with more data, see [**here**](./assets/docs/changelog/2025-01-01.md). - **`2024/10/18`**: โ— We have updated the versions of the `transformers` and `gradio` libraries to avoid security vulnerabilities. Details [here](https://github.com/KwaiVGI/LivePortrait/pull/421/files). - **`2024/08/29`**: ๐Ÿ“ฆ We update the Windows [one-click installer](https://huggingface.co/cleardusk/LivePortrait-Windows/blob/main/LivePortrait-Windows-v20240829.zip) and support auto-updates, see [changelog](https://huggingface.co/cleardusk/LivePortrait-Windows#20240829). - **`2024/08/19`**: ๐Ÿ–ผ๏ธ We support **image driven mode** and **regional control**. For details, see [**here**](./assets/docs/changelog/2024-08-19.md). @@ -247,7 +248,7 @@ Discover the invaluable resources contributed by our community to enhance your L | Repo (sorted by created timestamp) | Description | Author | |------|------|--------| -| [**AdvancedLivePortrait-WebUI**](https://github.com/jhj0517/AdvancedLivePortrait-WebUI) | Dedicated gradio based WebUI started from [ComfyUI-AdvancedLivePortrait](https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait) | [@jhj0517](https://github.com/jhj0517) | +| [**AdvancedLivePortrait-WebUI**](https://github.com/jhj0517/AdvancedLivePortrait-WebUI) | Dedicated gradio based WebUI started from [ComfyUI-AdvancedLivePortrait](https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait) | [@jhj0517](https://github.com/jhj0517) | | [**FacePoke**](https://github.com/jbilcke-hf/FacePoke) | A real-time head transformation app, controlled by your mouse! | [@jbilcke-hf](https://github.com/jbilcke-hf) | | [**FaceFusion**](https://github.com/facefusion/facefusion) | FaceFusion 3.0 integregates LivePortrait as `expression_restorer` and `face_editor` processors. | [@henryruhs](https://github.com/henryruhs) | | [**sd-webui-live-portrait**](https://github.com/dimitribarbot/sd-webui-live-portrait) | WebUI extension of LivePortrait, adding atab to the original Stable Diffusion WebUI to benefit from LivePortrait features. | [@dimitribarbot](https://github.com/dimitribarbot) | diff --git a/src/config/inference_config.py b/src/config/inference_config.py index c9ed197..2d9f365 100644 --- a/src/config/inference_config.py +++ b/src/config/inference_config.py @@ -26,10 +26,12 @@ class InferenceConfig(PrintableConfig): checkpoint_S: str = make_abs_path('../../pretrained_weights/liveportrait/retargeting_models/stitching_retargeting_module.pth') # path to checkpoint to S and R_eyes, R_lip # ANIMAL MODEL CONFIG, NOT EXPORTED PARAMS - checkpoint_F_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/appearance_feature_extractor.pth') # path to checkpoint of F - checkpoint_M_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/motion_extractor.pth') # path to checkpoint pf M - checkpoint_G_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/spade_generator.pth') # path to checkpoint of G - checkpoint_W_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/warping_module.pth') # path to checkpoint of W + # version_animals = "" # old version + version_animals = "_v1.1" # new (v1.1) version + checkpoint_F_animal: str = make_abs_path(f'../../pretrained_weights/liveportrait_animals/base_models{version_animals}/appearance_feature_extractor.pth') # path to checkpoint of F + checkpoint_M_animal: str = make_abs_path(f'../../pretrained_weights/liveportrait_animals/base_models{version_animals}/motion_extractor.pth') # path to checkpoint pf M + checkpoint_G_animal: str = make_abs_path(f'../../pretrained_weights/liveportrait_animals/base_models{version_animals}/spade_generator.pth') # path to checkpoint of G + checkpoint_W_animal: str = make_abs_path(f'../../pretrained_weights/liveportrait_animals/base_models{version_animals}/warping_module.pth') # path to checkpoint of W checkpoint_S_animal: str = make_abs_path('../../pretrained_weights/liveportrait/retargeting_models/stitching_retargeting_module.pth') # path to checkpoint to S and R_eyes, R_lip, NOTE: use human temporarily! # EXPORTED PARAMS diff --git a/src/utils/animal_landmark_runner.py b/src/utils/animal_landmark_runner.py index c66efe4..dd91aa5 100644 --- a/src/utils/animal_landmark_runner.py +++ b/src/utils/animal_landmark_runner.py @@ -60,7 +60,7 @@ class XPoseRunner(object): def get_unipose_output(self, image, instance_text_prompt, keypoint_text_prompt, box_threshold, IoU_threshold): instance_list = instance_text_prompt.split(',') - + if len(keypoint_text_prompt) == 9: # torch.Size([1, 512]) torch.Size([9, 512]) ins_text_embeddings, kpt_text_embeddings = self.ins_text_embeddings_9, self.kpt_text_embeddings_9 diff --git a/src/utils/cropper.py b/src/utils/cropper.py index 97e26c7..64fd75e 100644 --- a/src/utils/cropper.py +++ b/src/utils/cropper.py @@ -207,12 +207,10 @@ class Cropper(object): vy_ratio=crop_cfg.vy_ratio, flag_do_rot=crop_cfg.flag_do_rot, ) - lmk = self.human_landmark_runner.run(frame_rgb, lmk) - ret_dct["lmk_crop"] = lmk # update a 256x256 version for network input ret_dct["img_crop_256x256"] = cv2.resize(ret_dct["img_crop"], (256, 256), interpolation=cv2.INTER_AREA) - ret_dct["lmk_crop_256x256"] = ret_dct["lmk_crop"] * 256 / crop_cfg.dsize + ret_dct["lmk_crop_256x256"] = ret_dct["pt_crop"] * 256 / crop_cfg.dsize trajectory.frame_rgb_crop_lst.append(ret_dct["img_crop_256x256"]) trajectory.lmk_crop_lst.append(ret_dct["lmk_crop_256x256"])