From fb8b00b974ccdc16bd13d2c13d453539db6c9d24 Mon Sep 17 00:00:00 2001 From: "Thierry T." <1940947+lepiaf@users.noreply.github.com> Date: Wed, 13 Nov 2024 17:12:56 +0100 Subject: [PATCH] Create 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Add files via upload Optimised images with calibre/image-actions Update 2025-01-22-black-lint.md Update 2025-01-22-black-lint.md Apply suggestions from code review Co-authored-by: ElevenMarianne <84479582+ElevenMarianne@users.noreply.github.com> --- _articles/fr/2025-01-22-black-lint.md | 130 ++++++++++++++++++ .../articles/2025-01-22-black-lint/cover.jpg | Bin 0 -> 678363 bytes 2 files changed, 130 insertions(+) create mode 100644 _articles/fr/2025-01-22-black-lint.md create mode 100644 _assets/articles/2025-01-22-black-lint/cover.jpg diff --git a/_articles/fr/2025-01-22-black-lint.md b/_articles/fr/2025-01-22-black-lint.md new file mode 100644 index 000000000..ccfa7e04d --- /dev/null +++ b/_articles/fr/2025-01-22-black-lint.md @@ -0,0 +1,130 @@ +--- +contentType: article +lang: fr +date: 2025-01-22 +slug: formater-le-code-python-avec-black +title: Formater le code Python avec Black +excerpt: Le formatage du code est une source de querelle entre les membres d'une équipe. Résolvons-le une bonne fois pour toute avec le formateur de code Black. +categories: + - architecture +keywords: + - python + - lint +authors: + - tthuon +cover: + alt: Comment formater son code Python avec l'outil Black ? + path: /imgs/articles/2025-01-22-black-lint/cover.jpg +seo: + title: "Black : le formateur rapide de code python" + description: Reformater tout votre code python, son style et sa vérification, automatiquement avec Black. Gain de temps garanti ! +--- + +Le formatage du code est souvent une source de querelle entre les membres d'une équipe. Il existe pourtant une référence _Python Enhancement Proposals_ qui donne un guide sur le style à adopter : [PEP 8 - Style Guide for Python Code](https://peps.python.org/pep-0008/). Ce guide ne couvre pas tous les cas d'usage. Un même code peut être formaté de deux façons différentes et être conforme à la spécification. + +Un outil avec des règles plus stricte existe : [Black](https://black.readthedocs.io/en/stable/index.html) + +## Black - Le formateur de code sans compromis + +Cet outil va appliquer des règles strictes dans le but d'avoir un code cohérent, généraliste, lisible et avec des différences git réduites. + +Les règles sont disponibles sur cette page : https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html. + +Avec l'aide de pip, installer la bibliothèque : + +```shell +pip install black~=24.8.0 +``` + +Pour appliquer le nouveau style, appeler directement l'outil `black` : + +```shell +black . +``` + +En sortie, si tout va bien : + +```shell +(venv) ➜ my-project git:(main) black . +All done! ✨ 🍰 ✨ +88 files left unchanged. +``` + +Mais si c'est la première fois, alors il y aura beaucoup d'erreur. Black va automatiquement les corriger. Il n'y aura plus qu'à créer et pousser le commit. + +```shell +(venv) ➜ my-project git:(main) black . +reformatted /home/user/script.py + +All done! ✨ 🍰 ✨ +1 file reformatted, 87 files left unchanged. +``` + +Maintenant que Black est installé et utilisé par tous les membres de l'équipe, automatisation et faisons respecter cet outil avec Gitlab CI. + +## Intégration de Black avec Gitlab CI + +Généralement, dans votre fichier `.gitlab-ci.yml` vous avez déjà des tâches pour tester votre code. Ajoutons une étape de plus pour vérifier le formatage du code. + +A la différence de l'exécution en local, nous voulons uniquement faire une vérification et montrer la différence. Cela permet à la personne de corriger plus facilement. + +```yaml +stages: + - tests + +lint: + stage: tests + image: hub.docker.com/python:3.11 + before_script: + - pip install black~=24.8.0 + script: + - black --check --diff . + rules: + - if: $CI_MERGE_REQUEST_IID +``` + +
Uniquement dans le cadre d'une merge request
+ +Ici, cette tâche s'exécute uniquement dans le cadre d'une merge request. Nous voulons nous assurer que le code qui sera fusionné dans la branche principale soit bien formaté. Il n'est pas nécessaire de l'exécuter de nouveau dans la branche principale. +egP`JToy4yD zv#NYdmu%)}d+7mXlIwFbZ4V2G8_p+<1O-K$B#@X|)7gO{!sTq3qxj$HNo+CO+bWTI z6)6aq-N^bHXT}wYmS>%&c^FEMfBKsRJaEvT(mo?JIgjZbMLhJ0?uWRQ`H zqV3bVC`(C^Dk|%=esvND#8!zURNUI3z*ZKPJ?kDDVrOBpXGEK4X90l-cWrGbbd+b9 zNrLJ1GKHCEhp?5AG5w^?stBW%SU_l0>_sr8KshaidL?8`J2X&iJQ44szA~22XJ+UG z@{t!@A4LE0R+_4d!7B=52M?-@u}Q?6uA+=bB>C{N6c%d0B( &z zUAta8Ne_Z5`oQp1^ z8D)_#_r)e8GUu-9D$A^vDfWdKNA)79tVq|}8pE|!|@+`HWtjGr5_btMeGVM`N zwca3qIaO+k5Ku!as94r`bW%@&=Z;hM!6{PgBW&x;IR5K}u2<+6)&uKG1|ZoP82f-< z0oD5zrHYbI6E*b-1{UQFcF{d|qD^n5M+qAUsmx!~88j$98P$+= dL$H%FW<|(}#sJ%7dZF$KBTzgKSt-8=Gefn~Lr1_jzT`)DPyP zDz0J)F 6bu>dxsysoTB?AwlT&!Js07`6dBZp{?E}2JWQ`!?9EQ#%aSt zoGag{zws_{JC;0LzII_w+w^pgVr4D?qR1kyP`V~WJ9-tw3&U_6ASSGiS!^lPvL1F} zKC&ZL@x?{sUgl5z>YXx=$HBQyyNDBs2aX=FiR3l;7eB0lh_@JDI2a>s&VA)~ret#b zE^=nk>l$fs$(MLqvs)2QJBxlifl<@9Z*|939?>?xB*sf633pUiLVUDa=VP?0e8o6V z)5XG`ln_@$F%w;nCCuB`DZgrVn(|Qzm~iq#S>9B;=CAgy)Ly}H_N!tt^pVSaEqStJ zi}DEW?ug);^Idc$%j{oZC2D258hT+#C`<%iG^PC@gC7p<&E&tH&hbz2+o`6)wx3|Y zMeThCWd9(@`Ii5gLgnUz%`NGt9Mklj)Yik~KcX}&SO_YF;G9;}DawyqKP(e?h3RQ* zM$ESO)*l*DpDE$+ouhbX%a(B(m>=nmB9B4EGaz*vzklNkeeG4wn@Xe~%4g-LWOqUD zzv}yieVpj= J} zX?EuqWwx`g+y8n-`{E0xr{ny0d+5 IYl2Bj3cn>6Y)nr?oJ2YWz`UY98W*E@XpK{bCw`* zLNUDci$lwTn#YkH)d0pNZ1K9ySG#Rqe8zs?S$c(?_%yX(PhaHIxCWWBB`41oo5{)w zFfv!++xacaPUF(TqOQC?rJddYrcrQIZ7AdHHP5;gd@+&xm8auM1WCEAuYb@gXA@ti z4q!Y_$c+%vQ<$!D`p!Tcen&)lMM?{HlPGe|`%@FnS}i`+=1Z)~eA}N7jQ&%7&JTrT zIhDT!Y}+^cU#(YAFOu6U>SsB=q573_8o8speu?>tpmm<8CA25)CjY8IL)y?>-Ow0V zQifp>z&TXtJEUqp8l3){5S?b+co5ui2NF4|b&f&HBG(=Aq;&g-ByD!av*~ceT$U2X z%3G-ksmpd|l*0>dlMxSBSmEA?XTVVONP&&2ky*(VcUHF> z-PzKzN`vxrL}ycK&(1XEy5yW*J^zp1n+jN6d41}a!Nk+_7`tg0tX^ O43M8r=tSDL-(dFuV(HA67s#ngGwRZsjc* k zqG{pxQd|}Y;&3q^p8gEj(O(a>b%#NM@-llz_Iun)_iai_k_@?a4k!%^5{|lk&&WG_ zXQ@2s%DN>=a&L*@vMNPmKh&=>7mVSbAS%C>;_@`AO6KxqZ -bI`eK@Xc zgS)1=JnBh9P0^aaJp(QbG1(XrV$shN&=N)9_3*Y!HMN$>%LAdypPG-$vyF@)@~bEj z!+CN?tn@`5q)5}==Bedo?2B!;*qz{#n5mLX$AX=IdT7lP99z{fD5c&sf`P!xn64l0 zWERm!B2Fw6Ob`QtQQk~C)|}0rz?>kW0otC)XMj@Q=Zd$`*ghBCsn=t#h4d}jj&oy9 zme#FowM|jF7S22{Cd $o4)c-85F3sald5ncSP?}uXTcb zef0}wk!soJnWzuJL*IfFmVyw@*L=i^e5oSp`lPQWhJ*Ktj~s3;Z?5@kmvGw4X~&b= zIyd0yiv}X;it_l|Nm~t2l@2XcOQ8Zm?mFiWss$d%SINs{b6P%&ej==%q;h*a0!^Lk zqA;+wPfYU{MP+sBO=47uvijhT;D73+pGl1_Z~;xQP0PO(E%TwGv}xss>UdJn=0*`2 zMPb?u!fTx)aj?nsoj(^3^6a-H(VFW@gm1 rZ*7K(_Q%fBQ;bw2{YHkK=*z8~^$;bQiV-F9cYceqcCIquLrAePy|Cb$CS z2Ul^eK~QeYYI b{)grp6XR_EF_#=Th{Zb)f@}Bd9CVPGaqRCVQ1E zwZ@Szsci07oxA+{=W;io5ZmeI?mkbtJ;!QIpo25RHO*Nbsj8v68vgD40 #v?QtsT32A|jhQ-8Z>$j#6(s;`N>#xJZV zZ7Wh`i>>?X^yx0 hvrc|jQ*smu0aw>K zm~|`(-*PWLkjMN1agu}eCj)RD*0Gt7p~Fg(8u|69YhF@1S95WlI5q-awhRsw1V`05 zZ>U;ohBAtZeCn1u9W h7ukgOQN~yFHcVJN%k?m$13vIuO1>vj#q5PKQ^-Nz)myJ;5)v- zr<(!VeB<$<;^Bl~gO69Ts_;?3@6qkrD;{f3wDgz `!(&ry Ma}OmGsI2B+b1E`;G-h4cVY97#>yshVgH`e78y=m zDbj!x`}U#k-}!FFADNE4XMn;(Wt&emUA-b}0r*TnwAIN`cR_ef!g2O%R9ai8rCSB+R;63fCL@9 zT@-tLG+U$f(`z+XYwz_)TBl|B_9mtSJ_@CN!*Aq`4 l;@X`j-2AqsILo4{=^Rg fnwtO;Vu8Pr%B^G=xb#h-qq`^BFX!_@7|M $quFVac7 zUceVuanMTwhwRmm&%A$nJt_=GSB1xowpnUM^P#QnfnMR@9tSHISNRJq`VZZb`qH?S zd;3ITUi5Tb!#+`f(_{e$5lJ0SCG8j^2laV}zF5h>)!sw$uXWK!c~s!WL4F2gN)HL% z&7TgJ$DTN-Z2?i9{dPTbgGy@zN>)@}VFp+F%zMK@1;sO87(X8AtMM&A1JtLHwzs1i zzO$8!`Dk9hMpqEF@ap$Psl66CWSkX4uIYGNb&H*a>z49&rMjvdFE@TfSK762LaU2s z?izhxlkxoTTYNX}l)S4p5`M60vsnP(q6uD8y9A~B@u%jjJ`}h_G@H?4?*~f%LS8Lu zfd358^wG9{@>Z`uGRnhENZlXv64o~z)1=_>@?5EbW>!%e&DC^n7ccs@{zS$^8*w34 znablkFw#ZH#;YBz8)eibc+w~1n6$1_(h3cV`5S+U?PG>rbyJGbaG>M#cq~MwjtR>y zx*b_xl`FAdN>;7VJNhYn(PQZ2!Ls1_b`WJ4YPneFnOf>0x^H`n^EIC>Z=o-wHumQG z0e)NXc{;*b|50yQ4&&l$(}A60?=@w1GXB-?g2`--Wy8jVw7UwPMYxogSJYjRMAm*- zmT~jklB;q4G!VdilW07BAZqQM|GRL`7;Z3n3{?eCqMkRaxpg&(j4 Xhyh#Z3`Uc%*1>*OM`EoSr#BM H0~V=oA6{Nkq6>9xg8Xsxh(e8g;cr zRSNopzxvTn9wqMf07fAg9w)s=MtdU$@^0fcJ?xC@Y=!9ks{0$Uw7cl}n*&)&6pEq7 zd6iM!8vs5jFO2o_z)@mj7rL-U3Z`!%AE`Ca+do@}zq1_|jTyOg@}$32`sn`jImeXA zM`|G1=uhOR9< DDJPc&Aru}+hS}BOL4--lR$P~SkBa6Y>bS|zcF=J z_gOb3k!!R^3E^l!@r>{vT*2VMsJP?dLdmlO-5A8fHOL0Se|hekySB1N0Hk(@!bK^7 z^pQj6ZKyO@&IW mndEi zuO6(z;kn;;QtxFHedhZsP&xe0A2Y_##5ms%ScNdJpMscxu?f3*4A!P`QhVNF&j8Q1 zAh|Q|OQLq?0Eia8_eJfaDvc}W0418d@xHAu2Wli-`xyIgKGl}jF9&f+hXk3yvzbjZ zhiX(Q?+6mKsOr8rPy#+8 0+Os3ikb2LXKdbzmX8GKnoWhc< zZ;bPHl9>gZl(!X}=aDuL74~9j%}(Zb=`_mgcR(AS@HvoCs{ lDLFt zyG%GK<(Xv3nw}c<2I?ml44euX|7ovsOEoHmb tyPOl@sD)2a`P?z zWT8%Pb hSAZ&5VVs1fl=^4!AtaQV3zLlTYz8b(8@vVyLgg%O3$ zeMmUJW63Uhb9aN;cIKyylIPwL&D+oFmV-mG)E82eMpIP7Yo(xsicPWl9v}aZK0-$c znRa$8-ANfejDWf*R=^O1Nw w06)K2R?=~GbE8fF>YnUF-e@1 zv8X6kk(vzS=^wd1d!~nPqCj VyENh^OAbUP#)voTyeM5|uzli9qT_ zK>rvmTA~OAMZUreVTb`m6h+Yvb!h=*F{8Q|N=}j`v|nfeK!RxTLc|fpgr~NZj8^@1 z@naf^W5IculzEkk;`n5}@G6=M+-JQcZi4Joe}ZM>yA8H!MNkrjN~Ny(Ftd&4jX8j5 zh}=FZc@EfQMB1@N(i!i!L+;ZQ{{wq(RPkMdHMCPsX_F93W+Bf{P8x^teTxt#XR5V5 z(I3o{xJ$xx3|7@72j=p+bVVH1c!RaDsM-u#leJfqp;tGb#F-2Mnl~mfI7Yt`Z0uI& z57}(-?6dd9O_%EyR&*MOk$Q|-UA@SrH$u~eO*I!y913ND7d*2~nNRP!?xuu_FTghQ zZFRMk!T9zRtEd68SjG#{31=T|Ng$|%B_}V~Cg49YUmG=a_J!f3o+lCfr|=U{PGYiv zXy;BoWBTdx$TE5*@8ee4M(iL*QL}(BQ3Wp|>0Y9uD5RC?G5vRN>Cq8;AAE#l;k1j8 zSJ$#9kqR&+BWa{`(g`Hl4oqvnOBG>RICmZl!a5fnVAfjyIaT^6?nv3b7y9^ymmx5k z7n5F^iUtNDLV7JI^+Hm*A5)lTM-i0ta>*}!u#*rd#(<*3#%E=*l`)GFiu534hH8{- z`QKfD@Fs>&=n0$_b1}2h2X;NUYPi4Xqj=L*i9P5Osj3-J34z$k7(Nc&^-)a>u>?{c zAAOXw0;K3=keu`mfpUa3>DJM|vdcPMa$DWXm{ VU%130;r*wNHy{Km)#(MSjDBN zck~VdR0`%6q PpYJK=KptgVwQS* C!pcVm2?9=x QM$cKt(iEsN(bA55A&K5lbqw( 7r7WdR;mc`^7Ce00DPOj}^`HCmfM6={OO0Up_XD)ux# z4VX3&Z@M~Z8DM1^r)do|xOZ38QP!Yix1Krh%wsW09$q_*nNL}6>)d2>?2;A-K)_Mt zRGa$sSQeEv^LKtZ6*%v4Y{Vwt>dK-)>V Ch!`^Pn^C3+^VIIy5dc;DCPRfSJ_df0bcKQlv>gOP1~ zVsk9yhgeW(EZO2FCiKVXnZKsUG^{{C5tW|&8DNJa1&Z~T0Mp8In9BWoRi_m$N3Std zq?prm7isevBc2@d>gU%kFLCvXgz+7iVwe^*kh*sRADPujaY@NGZEf_Q(cqn;=jm`e z0-H*3iI`t{Sm92Wt=FwrTgD50BDg&GolQwxeh>4Sh_cf@ j+4Ur9?HRBw z`X_atzt0TRJw@Y_dXyxwg-9 + z+wy=NZ>9b0;nlxiEc5MmK_;DUqt4W!@ip0!z2r}tCvM(jaZq8r z@3cc?gd~R6N=>+4^OSAVg1(8YB%!C9E#S$F_4MZAxSWx({fmY%s=bo `+-2)hJYWmf)kdSH(fv6*C)9GITubHo(RJf#S&n^zFZq`jPoH?8o z?}dD)Zllp^;hYCr4W(DMEa_}!Yg#POoYMy<18TqLuf{F{oY(VkeFgdoyY#N>j7yMO z1=^GSQoAEg(+l-CcS_51mZVi_`Fy6i6H)%`cIgL8>gpQXh2jEw7VI~MBldBfSkJE0 zCbwlRE>G;ZU?{&lYAMxx#12jwD%vM3!))HT%@g)p)pt0>uDEivu1oPQhED}6?9+l8 z*Q#mXR@QrQaj(Z%R>3Li3H4%~GX$NG)}ypT+tkul(>nx;V#Y?o14cz-!Zr0X^c#gQ zUpZU&W6xL}t?SllR_Ey459c38;iCYyu*n)Kj)S5ezLuNoxg?eTpa`V6Akrt-yx2w< z$xca!MP5W Npjao%I-^CsL2E$=L&nlW#9PJ%^G2jk=qA*Znpt{R?14nqG8_W6e zyDX>kR51LCn)cCKiNM^ltZCV1q@m_3`Hbwgr^KUJu%O5H)AVklgWbhLW^<8<1JF-} zg{zoQ_&V)b{{l&KhbfYOXWHl_9#o%j+-%Hx a?aP=+L zdNo2WIdMTH!I`162}fAx>KA!9x}vPwhWOb^XOhZ_8BHs-Wm_1{*fT&`#4D+9SC>wE zgbwA+H|?I&n#qQ1d2i+hD2V_U@RJ}J(eR|V2O_ShU0%_FsJ*pYEolt6V{r5)`!-)h zwLE3_noT9TL!8pIxjQfH-SXsQ`|_Pj;(~;3r3R0`30TdCLmzK4srh73lLFdICUhR* z9rJcRl+<{E+@aoZOh+J7I)LHdP)(@PU5ucX!4uIBT0C~Q0YCrn$pzz9SGr}K*9UAP z(7WEn#q>~9;iGdUjl-M?CM%5ahoNt5Y^*RRN?k+XL5l0Su+mchQhqmNcjB_aoMrZw zt>-GOFYk*C*TDqP1M@{G JNwA*-fDKb zVA!JXZ8mQb;Arwu(bQGFd2!+DtBvg((QBo3oyqe@by~dHF|n|67abcsQDidhsqP2@ zfn?iiCWmlcghP vR_?W@4WG?Gh)3vy43eKTY$;MfuI&s~#9jk-4 zUoZONC!N!C$#{+OcOpr{jVm&;6TQa=@Ep!M)PspJy4b@#9|z~20geoop+u@G&j9I} zP8$A8(NNXpEzQ%*S)-~)hk?NOdXLvi7Vle)VEdgq>xiRhp5E=_V9yATUQgmjYBRzS zY1{<9!bYj@M5Ky8oEMfm8XGCtMrI@`wp;|hE-~sa3rGZ*K5&`ly%i5t?pyK|e{%Zu zj?IRG^7X^+%p{#|!yjL;?goPDCyQ0e7zH?DA^8qwV=guq#7$0?_D_1Rgw+Lr|62fw z-MlAjx6&;Gp=sWsM8_32Mem_^yTBP)jhLJ~I&%5~;wp42hHPs-lGYsFE>Je;U-OgS z@sbk1VTdx=)%}!x=WM9??ihBj Mb3i?>uz z%W)*w*v1d&^>_cC4u|FUU5l5*uF|x_V;4oN%hP|;WD3>VGz3+DS4}i^h)#(6W !2XY5`;dwAMJTa z`eyrndD;SND+(vp#}-JL%nJ&c`C2Y@=l_aT5t06@M6(HM-AmnNvDZon9697juBwyL zyh$t6h5v@?L*}$p9|T+uT2EBIu{poViMhYOEV9q*{Re^s>hO`2nEK3%dO}k@!#^c4 zpr cB{(hYCVu->ZHeG6NHU1ZgQKz zyRZD6Do8 #2_2&=Rf4)QtPUrrpC7B-;Z)iBT=D}5Lp;Ol uWO~vo8S!|-Os+f2qz5;$vHx;JmQJ$V0~$n2r$XjYM70ii6-k8x8i8r#c MV}YSAXH!nJOU-j2{x67PK04XuPd0F=jC6JhJk{WqNux zEhP6F-!66eiJ$j3zfU@SAGym4>0o<&nYgG;2|Xv+>8&O()&m=3N=Y{Cm>IHfOV@ zsPFDMWwh)<_iXkH+442DEM^a_$Ac!Csy;qs$6Ps0MdHJ{A2QSzN$Dc`C;wuiHH`mN zBQ-C21{jZvWc03*{2ebSIhJTFZS^@W_o-X{Wrcg5_m ;%#tBOQQzi1L z{+Re(fg%}iyMAEgbO42 WX;CT6BOB^Ma (%3fzDm*(Z>GiYaDrID8^<&Fd(0nIh-R&O$xr_+GM}wbqMB72}G08_<7Qqo|5Ke z=AGXz5B!{4-h;o-v`n@={mF627bU-w20DB##HsjNNyi}Ay9OpJJsMJ+&^0ui4^3!w zbT0`tmr5-4@~C@zG%T-VTg5RG;icQLzT3o~rX(A`9fK3r|J9J$25S~wSOZOknBB`> zX!U*ZP0>J9#=&0>i%eFDzIKypnj@^glg`8w61yoes@DK2p)+W3cI+$dwbrkuZe!eH zC;pQ=r*DBM%sYwa{;l>W_2Q)Sx<8JyzL9l^=GoXq*RI%*TR=J0s>T#~M}27U{_2pK zIwPD*6FUCTxb;$nW$E&)#*NZdrft3_?G@K{>cuR^(DGAAeGyELZJ^>B?<)-s1y;&X z=5h{XeR>%g;S3 alZ+nh<3np_XARg8T9(uOl LlR=dDCfVXyi9h+Z+ND=KVHY{mwy0SD<*rZhd#aQ1t$r!R?V4KB;%PyOzAva%Qr_ z80*{Gp!u8v4D^(f(`fSgubdNyGRsR#8c4rv>9i{GA+DOBmtL>Fvs4|tjoGiqXfnWW z?ol)qO|U7D(i Ad0E&ehbZit2Q59>8z}pcvj!xSjH%ya1c7d!aHfg^ifnC!eJx) z%a^FUHpI3ZvUVS1tJO%WBP58j@0LMV4p?9NH}Mt-M$(Z;GTqJjhYE?1@>ppwT`#sO zcQyi0s3Y?oQd2T{yK+=@)l35lq>k&;eUn@x*=KyKACY<$)^yb_QF5d _QVmCE@Ue5c|$p#Nbx?5Dfmp{2XVxRu0Z$gGC&v?sTN7WA>i`^(Ha0!?8%B zA$5IeRYksSW#d>JGi*3_6P9SE_z;{iA6kBIQkhSr`RDGnHEborKe^P?A3$<%w~~&F+qpj4 z)mcx()M%vFlPF%P@hG8l7a*=}8zuY%6!u (jVRyvADWlHYcau~;eB%xDUXyq-0BgL0ae46O zFE`DS+s}(IS!K}CrnY`ka`7j goY+@dzeTGNKv0Jl z8)yiCMHyZEb>%#i@umkjQ?(Ru58A2mMRUTnCU7tEt%wu=#wS<5 +Z#Br z&wH!6dU 2WYBnm$F*blr1VfyH?Cr=IZSwP{ zL(&sFl8IX?<{=U~ZqCJ&8+fM7N6rP8(qjITNj&6%jITe^1gMg6h# h=M<*RZXJ@AA-Ip27h$-ew3NF#pE=a!cXGrZd-TyT) zPb+Uj7ym|YGnD7A{)ONz3V4)|+a!+yB{YEtgIKg>g*I{{&;;#s k73ueiEhJktfGns_wN{}FDba<_I%8)#}}A2Y3Kx~RfOe< z8>apXMrF@X%UYr_jxW&f#s}dai3CLqr+5WN`xD6KDWb_sDDow;*irD7Y%#=JLypV4 z^Kd;#EzXVpZJeASv)Fkjvy?TB-_ph_2oQ0T-9!kdo=s~;Q}Os=9hL=dM0I~kT 4B8}g;BID0IADBg&KFhl@^0yGVAcH&{r?PJ2$m()74KSHBL97g_8ON&Z4v2 z6*$piu*{9c<-fw17@d*vP_Y%so?5($!8Yrk1WjzDWj~!JGhZYtRo3DXpe}vGSg2-x zt#0^=-5kjk- * z_t4nS9+kO>pPqjvf0_0)+uH7()NE-lHp~|!WFn|P*m<|oL QO)G}R p~*mYDvc+t_~Nd~Sv3lQ&|$(U8qp6CzW3ys-^v!qtVs!jnnRFVia|f-Xago%unf zl82GGl!MbcGGKChI;=%LO-}&d-UEA`%UGOZ8-bUN*R7C8m&>cvb(9#ZvKEz};)N9? z*Zq}P^qq9g)_l)^d%4=>*ELWoQQ3Xqn*UiP$D@dOzSPr3%@TZ!#ws}QvfQTVlR$oK z@fPNez7@`k?x3B%W>H`@x;3Y^u=XzDf_Dtt#9f2?bbx`Us?NrXhxei*i;MTCP-PVJ zns>sj24l6YD>Xi;Q*fh|f0yjimQU;cKQ_iD0b+j{ljHhC7dIflpS8)ehr20{Zpq;I zynKqD_(uP3y|gg@PkL`hOu}3_2e_ueBo B)LMUT;B ihp7@MfVn`oeK7?^Z$Ocqv(l{c@onD1FYZxTGhw1yZ#k*~RL HU;hFM;}QT?IQG*=mV;3 zy1)>USrrB&zN8*t5(8T`!aE%s3F*bsz#VO4YswJgRV0fUZYw+q*_Q2GMHP5yi2439 z3fQF&5_5}`ZAP&J#R{3Xx^%jIZ8V4;jJWI+tB+qL+?S<~c_dJb=4#<2qP^Xr!$bo` zCwN7^=;(40bj)lJsw1L94kYFQnZ5eS9fx=sRHIFw&+uu+i66O%^|>C{J%eNe1TDGx z+7(s!Ck=l0t#2I`y$r(_>ZEejwuAEh+%|-X`~q?uG5s)yiYKJ(s>3o)3$f?)J+HHX zaWsJ{rp(gx-68ccZ5$_DU{OsQN4=In=%Gu!2Zpo;TFiPr#*GOnT3ZspQRmGPwD^LyeATIyUap|$8-^@!m1!~ch9|V1wrH; zO;}~EXAawSZ<-fk^IGZVq`t5FMER7tUwy-kUoBmP?(=_R@Q~KI_JMnqmc7R^Q>|w9 z6lq(bP&lxa9Y5&?+D$w{Mky$L4r_*4X3BvdyhjakRej4p6&k069nYM2=XlM_m@R9V zmQ6l{ewWD)tP@BTGC7x1H$BIT_c^XFv-8f!6K$S3s{*|k2dd6A5nW1~-e&7LzCJm6 z^UG{X4%Vom#R^tKm?S)9DQ^^Bo+TmqO-d;?2y(2J6f1-Z Q z&OW;TXA1F%s%8Lgpi06SLHQVOz>+@3vM06K+_?0Cas)cc^YpPHFC+w2Vx0aZmy29{ z=+LWHg= dlFoh^pLK=<@Dyt<(km}$)O!Pq+J}!I*i{HIW&Lbb7zCE;h32)O;>B# z>I#`&EiQiZILh68dOo_rDLu_a%= ZsBYqhQ??!}~#cLQ8*SJV2Ke zycS%Q6M06-I%1>7 >M^X?_tERQH#9v?<*ghMx+K&fIG$$Kfw(W zo9|q#Ye@#IXp)FO<8?KS|MNh)XVuG>jwDeBhuHo#;iq2LbbjSI)}qb!v0Aa(BV>B3 z!rTBhHT=Ny@mis?t!ch7k2uo`rq6K$OG=%UIpHf0f*(CG_(Heukp}KruVy%Co@(kU zix{QVwh;}^*LV)%*Y^r-c7Ie3dLWu!Sx2{d<@ Q-bQ5d@wS6QD$5*-DBRZ#XMeumrbR+rn#Nt2zs3!Rm*r%+T! zIBc$G259@U`nA{Xk7>`aPVRW}v6DHe(h)I1(x?FC$ietPPZQc&j4NGmUT)~3&wiJRJQ}Mid&}{ z{j;(PYab3F2ik@8#~D3OX^nx|xytoTPlpT<6_t;|5z{wrW|GX>5u>x=fex0>0N&)4 z(0<+=RsroWDnrp9yAN97>CB%uzb)yHPimQJEJP^!{D4;&TOlP$6od=@OFxZGf^3Yl z)=R1UL$8nt{>zA)zlFA~An+;tv;9O5CQDUmNz*eR-f-763241nHBp{ZMb2G+HM(CK zK?HphytJV^s_a%`G9Oxp9dyjd-#$azm%umfU!Zn&9%C0tL4(BIZG*Sb5^ha1EbU%# z)Wo~*Se5SNh;jMAJoepS#yucU%yeZVgsAl0@*%CZj_S(}$@@o$|8cqc%*A5rGXNj@ zVV&4->C(Vrs`QN`%a5(M$2ZS_6PZmze!jX;X2vf+hA-pOmq HAjwcIu}?T$s^tB-#ea{f`nb3_`AV`M?{Ze+|s7HqDw zgc9xXC{2wLr0=i8bFTe-RpT5S1~^s)YrB>$O>VFX|N3#|)8^hNU6oe^$2Q_;U|4mY z#w6}%p%ObA)!}6pDBgTKTf%c`JI}}voG38Jb+>Um%A%UmNzKgj&~t^Sy}a#$0zmlC zt!a`e&^t(K?c&RxjgecnQuSbrUxCj6ou%M0fQMvHJY3d6YMC!t83Zgsq{$(45Wj z$Z^!X!1gZ|^&xj;&A(6H{8+J@@^2d|gcW@3W84Hi>=tDVu>ZwhGp-c~2n1nnjD0z^ z4Sa%qFf|uz>yNXAzu2(?=+gh{iYscPs1}z6hGcIfO$N;@aO+& gtB!%E)wUd(62DvX{0sF_Wuu)9l*N!i^X%Cr$k`|PGeV{By^w=PLPAAqbQ*MyX` zK&-!@80({4eWjz{!WG^|?{7LgY;V@>>>xX`jH{`=3B#5(|5Tbo)%yosj^db4FBM^i z$l^Ts8Bd=r6?o`x>x)%bgr5Np23-vOItKHW_NcmoT6lhi58JG`;>sT7W!0@ZD&cs* z>5N?u5 Md poYxPFFTq;m5ZT{=Orv+ptY4SbuS3*d%4)D$ROA%{s3WNjngziycO#RjI%E zBS&msKDBp@!?hNdB~Fdlz$tv=s=%d`xfN?2y&JlbFPV%$lr;9tzVg}*bJimfmmDWY z>NKFnUTx15clIB(%OkT(vjZB4es|@mV9lfSr!95h%3RbX*W6uIeR-pS(b-H%rvf$j z*UBDE1yqX*nYCRMVp)yB3xka$+P+Qw@TaS8$4Ojrfkf@lM5DN(lArYI&&%6(7yqKW z9dT4&Q1%`7J!>&ckv0iYr@zc^FsT~Tyug)IP(A_?ro4zS%KJmf*2;-Nta1kpF0ClY zFo+c~82Wxl)4F3=`vP6u=8X_5<7*TqM&Hx^87OkdUCdAZdwm2-%M{wHNuDpruSa|u zcQ8lju3MZ;aJfrj$LZ5C45a9-a#p6XywKIj<)ts0xGm%6X~kWV|KJOEmZfi+P3tn( zOD({*Q^7?ZC$t+J$W*4Ul&;kbYLtl3BS0Kf@sdJXo6h{={WVOT`UV)YcNipt8=@!8 zbYNhdDHhl _EI^o71Ro1S|AsR (>^Z@yh5}V`V*FRmbJbQ0(Nh>0;BjSCF?VukbnbuDS6p@mS%|HxzdC zw;-{$>n^zyUwjlMT|S&+RCWk)1q$gJ{wOXlIl6`al#@Q4UnZWA4?lKdQ&h(ONY ;}Z-r~lu4DsckSEsxo&ZxrZtmIiF z=j%vKdQ6iYJ#d%MF_gIBxXpKByGePwMq-uee$OVK9dpxV bT4*tes{uHrM+H}(~ zn3RoQSP9Vn$qNRgtFoi)7!5%6L8*3Qg_rpYLkB5l_{psDXZX%G(Vo-DMnAEYc0C>@ zO*Y*UQw54w=4LkCU_F?kZGe#6e{v^!1uc0X5#t?^0*AU}4r{b8d~kDP>WGSA&7sID zn9saZ3Pgpa&3PyIbNQ=a_b{a2pkt>^(dL72y_I|^M|Ig=MO;5!ze!@z+}Nio=UiOT zm~tBjEAQ+)lDzZ={MQTj9J!@;$f{6YreJPLN@{zSazh0XiDF-F3L8z&0X6K|2kBq* zzO|)cKN#66L@X-yd1Y;cW)h=T;NBI7@SxNs(t?6U-b`F;;>waE6+F$ks^5_@8NU6N zdYdTQk!x>e056uz1pFc=Xa11X50B-Q2n>tSLv=>##vgk$>?ZAX*QEG?o{V1@*&%wW znL=rMmFcY_KjybH*ezpdG|Ksy^4z@Bgexn2zJV?ZR+)R9^Rz|ZXIj *hv-Gr;G{1;;&Bk|41xU5jxHB4>RNdF9O&u7gq#>Y=%85}s>Lq-S zJCwziB|r-MiBna#vG;nC*Ne>e4Gnqrx5A2WF5Ph+Tt|E-3}fE#& _}!fL8N#L+!Yvv0)* zGK z~@I2sksJ>A>H1Y&^!jMRpe3bKFMFZ-trk#atJw+_KIasjkin*e|xYD=6N{SO_D! z^QThCI$Nk;_*a&*S7g46W1|J(ha_OI4ed`%U^9cz+HC8UP*^Y1i$eg|d=as~cff zs{W`5ZTMsI>|-O9lyxsy)ZHp1ad{0p3>CCrWRk{jYhQ&6j7d6m8qFpzt!o8H5L8(k$-F6NPkT$wwPd#2Bg%_l2S zpy J3~EgFe?}uT9yi=4B`nG?xId{{W*ch8PQ;2BGC`t*?eS zGD|?he&Li=#%Bo|_^jmOQhusRDy{MYeZ#WzC3MD?x#fo#cOh fM)Ybv-_`ZSgnr&R099wA62v+X8Z> y)33Thcxi5G+jjKVhs*E3>+LPc-ZZ->=Jk59HY~F zRn%KirAx88SgWtHOkILXgr1?&IF}xKB$^HqwAAjFKma8Xtb0tV=&pg05-oFwJoZCD zXyIGz{Wm2}lc1cb3x`U+o&x7aS`NUYu8GR#D*mNXwj~NCA5a6aT2DjUg+Yyk0rQ1M ztD A1hc+*-`L8Oq0c){Ij-cHrj= z(kygyP!}+OH1=3;)R-HG?US749qcw%z|K~f3a_tknU=&zm<)1O-}Khs8HOjg2RQ!# zMTfNLnCEkqsC_@`55Z_--UEJ8dQ*&v-Pa7@&qUDD#rS574C9a#ZSDx7jJV?%;X+Y$ zbvT11;40Tt^{jr2g9tsgD`{H?$%;F!-UP38o8fDoTY!6?D?F;K4RO+cT&Fkt^Qzo( zc{#$XR7~d+zEQ2b0f8o)OP`S#l5#0RhJzGNY!dd!5Nm9OB{Q;RZ0c4swvP=58le ztvaMp@;SqDmZpu;I03oJNsu^^%Cq$Sx7B+x-u#txQeCiSby}6FawilvStKCfoct*R zV{>=Y`W2`2<$@PR*O8y}Q 8P41(%KOu$h=BZq{S;hrHdzat za!-|x2*8cjjE8ZQyM+l2CmB8!cBY)Pk_SBeEjGT9t#0iakHV&1U~3%l!VA}qV<~1% zBn>qarj!5<{nd`$({6ip7L%WZ>!oOf@`Hd!b*@?M5ejka8+; R16K! JKKHE7ZC5O?yly2Rm_ S!`_*Z-N@zOMw zzZ+wfmtQLVSr31lq^}_pXq`POlKZ4)vxB-;Cm%RX0m$)`v|qj#G)}H#<~)XjoQ2SS z`SP1I<)C&-H0}mCRs_ysz?088*%@hZT|~m|)A(tNyMC)mg!M4bi5Td}8-#?B9P{^9 zKfwDAMoME*Od3YqA{t187L3R-5iZ9m?K~O6>CuL}$I5X7gL^AP8H2I%Bied@XwN8A zM$p28XAO^>rqwk$Y2S3vz!4I1V+x~yLS|$D;}~7kNvP~{Q-4j)J7k{d2a_036muLh zZ*cOuG8}Aj5!2Dg@-Wg#_)`=%Nn|6~QEQ>wn5Fuv(~jggW2A8yB|4 >9935A3XTHa0g0NEq*hXoiL; zm^J|AF5wda4Fh4iCP3g!09%%k5L=^+gMctO!g$DIVAz4>aZyypH0~5FRnQFNfsd7w zHmmrP?x *-0Sb4Uij@JNXJqh7QD{-3%aqbtS=!@7)941Uvkz5`$R0z>w4f3=&l5|St3?LMe8XbxV)RhgKg)MKD!N6x_5IN;Ir;xG9 ziWn uYm`KlWl-ptYGt25dKHl*zPl<$QKh-j-rHqXCOk%vm=7aq* zld8J6$XHZi5=}j-*o^C`*wAvT7f71cxa282oz=hQAEK;WYue&>D7IRvyw63UqRt7B z*A_Pi9H<%Ff~6~J1Bt=eL(L{!SDV&4lRajcSPo-%4a(uccH_QR1#(P$LPG@_Bf_F4 zrzaUk8@CA9-A(~ZQc^ca)U{nk!^Fjw1RThMG1(SW^;Nm9jJb*qR%mt=+e=s6s;yfG z6Q8;WVGo2DSZIhr0Hlx-h7dtqkO8_F%0JNovaCq}M7slIF^|<=C1!9pMu7;_k`f3Y zRFVV`K}m2Rf*q8S1P~h_e`O?tln_9vDs>wSk_LgfD^KXIhk~W7p12n`{H14>O+Vr> zYaZQ8(Y-R*&AK4K0mA5LYF5iPiRQoRO?|pr!qjn}GA^&_?Vh5U%@o0p#?EP2&sOyG zmOA&s@=Je|`3u+4%|%UN!?YO-IPzDW{;|s&=7 %A@mg0H<9(GR(`v(ymQ5u7XKN7Kp)DN7j4KOdPnUWUhA(}$}60H`#&Ydy9( zGX&qd3dhzRJ1vI0(|Od#47J!*#H%SogF4h)m!Pt LE;X_ux zNi9;f4-H}8_E0slYH{vW$8^h+8f3`tDsI<9fY%V4TPVw&soX0JZ478=3a0f} kQ!?8a$_o)Um?;FKM+7%@Dqnd*rP9UfV$SY zM|y3_!yHb Hw9Xbw^OLlET=acrr-cI~~AT9J9H#8k$JQ2}$aoI03|=*+SaDw~1PN zA5M&^{vpYR@*gR4j#CP^9Q#hm)8oT;DZGFV5#?8aV@LjMyY^j0?sDQrlJw?+k@88w z!l=U#7bZ$jhB=y8+`H_W)>>OpI~%!iI}XanOKx=~z0){g^SW J3nz97h)2x!{{Vl}UH^0}isAvKM# z6Wr_iW}G`S6P|mGoa0d`F3AdB2wOu;DkQ*v@{cJBC>sk5vtTrCo6R)W8QBzI;lGq1 zsM<1nGqnEz#5+d{JAzh8T~Xc7cl1u-h6)Htce;Gz9u$lXip@%0A#3WKI8bsnQ!lBV zb3c`>yMK9we|LexkMI8g$g|ruZCAO(zZvI%q^j##LqN(n9f!z$$HGn1#cQB1BUMbh zWi_I<%Ush}ERAF>-vsVf`5zVR%pI-reiU{2F>6h^l=Hf#zCh^1asf~`Yl~{8b7|V< z#2tZ;=1bnLp0m9gVBo>+!S0*esU&Ijq{9F?_jgM>1N=1W%yOE_{{R}^{0S`BX=yF- z&r;Coh|Z4*wURk%u8pXuYmGjvl6V8*EgV1M45^Ysp^P2St-86?^wcy>3}6~_jmq0& zhVk};1&&pFJ)g8+sID}UTm*Jl#4Qcd_u~b{MmC>Gbd`>9V@6us{$iwUHrjd_UsrRG zIpAfC`BCktb u>Pk2bEE$l6u-ImXhZ*atZ#)`KX$B+SfJD zXd5&um(qTmrLMSDR9#*e@Zb1&PXzfWZ r^6vpq9o4?>&O1-0t<4YNy9F zLHs;zA}ERWv%Cm1m_ZEj1;^DtwG*Vp3KMEFDQ+>NsU}8Gga;+<)fDM{|%A=5&!4 zKI063e12nET3eO!%=l@jy-4A9@-@7Es@ZKc78opYwZK%u9BLZvvPzbtxXbk8r>-48 zQv_9Y6BkPrOAoYVxc-<~ZAHdvijP*PmpFGq7*mrNZ{wpP9t@Q0tGxFMqum^&Q#sja z1w#ja01O!q{{Su1$I-gyOxWms^)7ZqVD5g(@zUKQZ8UIQ`k2QZ5Ia(n{8#>+mVw+( zOoXPMkO1rY$oox-UZ$`!UYbTwjB6teaOd|<&rwiWY)-Y>n%CC<05wK1qVK&~JylI? z6d+Ps-f Sr7*!q>TXSa3UwTq>(8s+~0QzGt59Ia8f8 z)At+15;h1+qi-cydIHxKlJ6~FRoQALpmjT%#=1UUct721HY)@a_F60DA&!cQLR|Qr zwwC2&uufW5?{sXajz8z^AbL8Qi>H2_U16GlOI7NZJ@PZQ-`Pd=E$-Dt6*PS ?+q z;d&0q_%Fc6TS{3BRHIAUMlpqVTohq@fvT3Zfqta@4XTdb2c;BoHy@Rw04$U19g@xd zBPH5ehYF~fpG#KG#|rmy>gqpALdS`o#uo;#=Qv(q>U;fN;^Q@SQFb2lh_js|!e2{O zo6DH?w%VGpQhA*9{qh^^7TIWBBz}_&azf*P50U*9Iv8b=rMLu@In$jra_Y SPlb|0p*KG{ciytpz6 zo-s^6Gn?eCKc@PE(`UQB#~mrAie_on(T2Bf$v(FK0EeWcmDTZ5%TCcR;og5Z@B+oU zuc_*8byYQS!T4bDrMTsz%B*{;bJP;uWp)APNZfjwqoR8H;|(B&zC)1|k2-+VG7ssH zv#Q$anwpB4s^xUG5Np`1?bBWxiHp@)4)sjN#TNw;4_kT7A2u#G1 z1n7#wsAr9Bml~QXmrDi#kZC6h)6%^iU)8cz&k+m|08EbHpZp0 }u-($J{iSN}fs8+h0T|Aca9JR7Xk73S_x}sjX;#sM#wtIOH&`mR(Byq`ebI0nl z>Y9l3ma{H$%RbTa>`7LibA}v#Csh{-s!PPOIoUnVQ)d$J2LT|=>d6Ow$=q!0MswjQ zxUrorinxu#9joWMlcBXfuw}Un9#i{8h4pOwM1(Q{woi2K=W~XFo%GaT7Y(%p&2$AD z?chXi)oyQUj!*ePM^gotEsqY6`AnT&>bi+0n}3fA4YHYJ*6fn3HkxReN@SOPTcf3h z-Uk8>%2JWNxnma(Bpow@p*xhs>o7)h5B $0gb#FNL>vp8cmaAM J5}A!r*j0FHy%~0x9T0b+taOgs0@Xk)`Pn94_oyF_v_5nQfCf013V>Y zTPv}wZsRtJbyZhNbUBE1H&E8yrv_<>XgmYLueFYnOq`#;bm9tkO5kvCrYUX2X>nn2 z`yzyE4oo;?)2`KsQ(Hq=$2<@Y{3{b_Bc~Bc@A+pRaGupi3+=JU!U15$6cx_prkq8C zk-o{0R h10)FbH2bOw-z&@v>?fx2A(m>m9tT@uC0Pio5tHI z>Ryw4R?o%MJU0V6G0LyLsL|B8MZn=UDHUO?{*#>gkJJLR{{UHkyiZAHvPTR|XnEV^ zXEjx&^XnN1?l&o`K=ocuo(5EK$#Sdp9_IsrCYMAi<&I2U^14EDaz0T<8F5`f6P$n1 zSh{w>HO{T9iNC(c2#n_fIc=*- EIPZ=Xzv=$~ z)232I9Yo+49rWXcVe5yo$7_788gMa@**K1suthx1CFSq0-C#nGA9-B6MMY+ya|mb* zW(F2}KVN!OZ>EoK*;S6M>iMgmBO3P~l6X`pDqZSj&dS@|wS0Rr=+W7zUCuB*(_86_ zJx5T?>En URW!|W3obdwQOvaua3ds-x@rTYf1Ignb%wUBnxl!ur{Ng3OG{iL znS>B{Bb9)R=a|{G5D+_-PKfCz+~p5;ts}r%?Z2X8rGQ95!$xuCFZ8O|!);@WK<=;C zuqiF>AOp7v@I@pd&K1x4fxU-QIlI)dh9btaaj?S5x{MmCmzcf9$AG8$w)SSLk|w`P zbLW(wN>IUDBMgTQKRblk0fxwmSZl?sGvG?Co2DkLt7v<4w5wfrOhrLXPRC_yxtdEm zSaRHvm7jH2SQ?0(9Ag+b2Ph<0Qer%|KBB>ZV6)%9!D|ns;u;R)%AC4=N0HR{jldte z$Es_eB&Ef~?-3ako>3 z*~&`GTGNv{RM3 5iKe+t!T>3J%HPrC$Xg!`myE~zao8OqqK7A8ReGJp@+ zboBZ#6Md75tMxK1_Nx;%qUnK3L3itwEj=U@^u&M;+mfu^OxWU$!J`BXh*@>&^&~~i z$s@vfY)XVds(YI_%!lfKPgk=Ws K{EFAy+DXK zwBVd%1oGQx^eURk0mwX%y$Am9z}j6d0Q_N5I)>5cRXSEQ2JmpYR8?N?Cl6Jrxlr!& zCwfBJN?6>m5(1FwJ8TkDmNB3eTCiN@r;XzraIBOvI=?0P<0#G NV znAFG^0VJ(0j^`5wn(GC+oEE-AkO>JnA#+Z9pDRGL^pvy44v+^srrkl)Z={TuGy~X# z$ tSCqyzG_-j9KfrelE{uA1#ZkS7xG*EZ64l6G8E7B#~e z7&%h)?{B0-NXm}6#$#}E4<0)vGuLWi1fiAp4(UNkjj|@XX2)7&Zrz9-)sDq-0x<1) z_&t_!eXo3V4-Gi)l*-lA1{djji5_y8xG78%7SmS3%z-v~tD`UpI8|GX^tI2@csL5J zSJW?jMXfs#vVp6($tD^djP6%7xLySGHEHw7lb375<&fz(3KB}KPTZ1y6Lad$;23k+ zOxk*Srlho%?e;)9cS+Y8QAw!$Z88}1GAm-v}^&UMR-h2lcFe?(Hr(8_bXSm;uhtn z?y;VVyGC0WaneU@ts0*38zMgO$CTZxxC~BBN*5+uDyspEoQ#D|>Pq&yC$*prlN+y4 zv|zQ}xX&t^c a#VDZ zI0N9Nt+ EV#xkKMd3hwA&y~~N@w!NENXH2$V%^6PLiIUl$@m SB8DRDC-BodNErFb%AqD(I1v$?fOt!@8iqJa7zi9?aMo!c{{T-2g1@{UxgSwP z9N e4)KAr}Mfg|mO0dUd-hA^foDu$9d z!ho-o5_icv;Su_RQgb3Fc9Z9Hn`YCTZhlu%vCnqPxTt230vb;K65$CvLOp>-XCAw> zq@S(FjO9;J*k+Uh=8z9;Df&*9IB0WzQI@0TC1#*@vX4t|mREtK GsA(K-h4nDJ{`N(VP-~I7JAH%v{>`4W?DCojT1xI2-`1bk>+-Xv1(qlW2}1+hmND zk+(a6_bXZZK?M8GO*Bz~u*h7QSi*2d$|}0-);-v8 I0L5x#3o;uTOb7 zf9#+tD_rdInz};c$w}F$`$wzNf!vU(xH-oFl*(D$^MZCM9m(f(U(Jkgm1iy7ZBa*1 zo^p39gUapM!R)x*Vp)U7lo4R(lzq0_3g%%S=(s#@`YzqD$0y3=+$ 1XN*?NshDYY7 -;=%2x9 za074XolOfK;x=oMdNK}{iOxJJdTU-=!BccLq8v8mPtjX8#sR|VQ=tQ~IQpMc1EVRD zTC|MeMOD#h2W6+#TSkMCx~yGj@tuOZw5kUXdS6lAdz2}o((TeeWhq}4m!A8m(mlm+ zu1$t|iY(r K_oM}1B4MPk_34{5LY0FkCaFtq>v%{AUHs&BtIY70pD~G92HWb zBl$rX$qGpZJD`VT0+OMO9>`;Vh0qA_v;?fgzoIeD=n=XlQ&1Ftt`P8mQb;$#9H57s zDI`Dci) CtqX+@I7*`|( z5J%m28*<>F9LmlFQWy*SC0|NIcu#4VG^HNhlk2Blxr&>P=?LcOJFXL&zs^%+lZ+fj zl;mav5wvP>04X|KJyk<>G8d8dDk?K{CSJusmN=1}kWVWpC!}_nV{?AtGb42hl{hlh zgA9WW0)hcaa3Q({0Io<7K?BOEA@)H8706+PV34`WKFdJLin3DP6NswZ(l;S8&d35$ zR_0!e!9aVH5nP- +mo>xQRcj>}c?p!)Sg;SJM(j()KTr|N$o*2!zXvz-llrPF zWgv39Z0_=!UsHcEM)cbAoJ%!b)JgeVR9y9?+1*ANN$$8W`9QZ?%^0spsnl9Yi?Wb& ziXu@Yoy&I`3Iq;BfklOhs6V0ylslsPDwh_f{{Wg5f+pt}Ri=_1l_3RohTxK#(^?a_ zwe^?kP0HZN4o+2KsoJG+94A#(&XKx7ObO5Gv#Gd00!=k0zDzF2BRn9L#A*>nI7E-K zl0l!<1Q06aK!ZGnwkbfTOny3)=}LUI6RbUZ)%Sb9d?4Pa%{G5 zw?C*>$mw0_&8^tj1&;MC>PyXQrFl5)p>;bPlwH-^sB3%bE$RM?r_d7B@?rNxjAtm2 zXIcaT2Pnd+AP69jvbi8b1e9u9rtQwTU0|mGoo-r1EI<%;SSwQP(1mERS6w6wq^EqY zKjj=L>aVA_+IT%@(Z5DBvB_Sl`eo5n*4uOvdO@xu#xS%;TIr;Wwaf$&gj*h(j?yxJ zdCk+lw^%*Y!Y_bENgvc=eCMj9mYzb%SX$=!945qIuT6b@`hQPJ0lH8|8c+Pjw0~9R z$)nQZFot%KmFhW7%*3ONFpc{n!cdKu1T4mL3;QBQfmJRN2qE26xDXtmf|5b@L{Wo} z)e@3Hgf>Qt3Z#a)N0di}azWiIMggmg9yJW4kZZI!IDYC5 %A9Lbp!>- zK4d@Enc i3)_aavPj~5BL!{EBP1uBu4(O1~ z=)>%QL$WmlkkN!glxt#Sz>FeB7KD(|?0ykrWIL;sI~|j#4iiu}3BwM^)$m}SsPxIV zDJQ=pWR|p9+@?3?1SC)#k-C|(LS&R}`lwijTmrcC-8n94!edUmnk%id+pNp2nx8`h zyeG1|1nrb`(ddDo3@%;na_IFuGq(3EVMQ5n%6P$~dBWl`rJ;1^ &GUhN>@sHQhunf{68e43xSY{v-3- Ut8#lQWb6hf6R--qIB2SAZ`lci>1izBfiC?w4wkb#VNTW@MU@lN z{{ZsF`Po0ObBjm?6i+#*%U{fibA3rk yQG3qt7&05F=0hT}h%AtlpYJ?c0~I|yjse(F!D zFHN&kdNB|jMhC)D+Y29UJB?C<9`(bI1MegHzT;0z0j3TBtjtzEN}}p~>(0O=I)dvZ zWkayyMtLPE(=KdtdXr-fN3AvhCXHkvxyL8OTKi2^_!Bil$iU#LjlP|=61~pDV{hgv z%hq?F#5hyO{{S!fl{TWO!JdpK0o?qdTEli@{-0fjo_Htw2 m2Hj0(`V@B==l-kE@ZG2Ny z)HsI6^U4!*{50>(I$#fa-=uUSZl9%!O4iF<{{T*$A9R?`{uGr%p?y=`Q;2C;52v^0 zT-G_Y&W@IipfQRv^B@6?)*j~Vu~cx2f#MgN+!Mk703kb;NvoX5DM4&*Kf02(M-8$G z&16lMW{+Xd3AGF_p{D#) oJ)_DMC|z >WDWlz H z;K eiSV;W64eBF1|{iC1pNoHf*_J__-=RMWiqUa+u65OglGB U*6ht^8R zJdHpTu?f{BfB3CMM6GwDM-b4)H*Hw|0MaE1u!esA&|1ru =~ z!}&r&>vGsx=(H3RtTml|qf2!Vue!kcnTuHGwX!^(23CjF_NrctrloB;^#w=0wE*r% zg#mP_p^ep+>qR-xUIcF^E+8mgp?zoKY3VAZl0geb8uOhc3@IFl%O7!qlf+-Bs;gya zthlwp30wRU@8(f-HrlI{B05TGC6J%W#^kG29iHjdmiXbOgt^pXzRYO*s|B*@LD1bR zT~AFjDsS~($32HFgn0g?Q;yGaC4m 5jUM?4! zw^Y^0M)?eBz;D?$6!TnaA2n3OGX?H@k12&QeN1?bu67-#K2Xmj062tN#&@3JWjvE= zEy-zGH%0WF)LiWq4We;{<*yDs!nbrs)0%qTi4|^X6|VOZ v%MG@s z(?s}O(DxA_+=K9}o!JZ6gZc=u#zB|sPgq%cQ>rTHWtou)BWp_ 8cxi zx4;Z^^)qUX?K|WC>p85beO t>iYI$mUQ| zz(8YmZZN3v^puy5vXbR@s$?uD_;CZc9h9$99FoU@0@_1J0eL6C#Ljv?mDb**rY@PV z%)&JdSi;o0vuu3ym3?Ayro9>TB5GbpER!>gZ@GI=1gePdtwF b+;s^yY`6?NI3j%%zMtcFvvGnk#0wTspe{03E6)6Fky~7{+kjMGA|Jj>DiM z7U|6htT|@;{{SgWyxQACBUuZC#yzq-m85i+ME(~407F~UY!T8=4ntgVxfsS(hTYM& zrt}QeZIu2xou*0OF2p!*{)(}4>(kWs-|+WDBM>ub0p|)52+ID@s#$Q4&Uupd?yI$Q z9mexzgc`O@?}4p4fOeh +ZzC@ufrf_`-Vh(;b;Jk0k%fjRdQVX z &j>EH?X(Fo>1uQvw~Xh4aQk8IT4~!n0D+NB$Y=KOnT} z!g147a7aBl93pE*T<2^QMfUCKzG_Ga^xAnH)5@z#WX^4l`kOW{5%p!tnu6P+pAMbM zt5aC|mu2oGrn1WE3Dj2& BG+;CyQ#G!^pEHfA)*Bz&LC2XS_-$P&XMTq?J&oLVD< =Q>* zJjgYJp9;rnw7rBq>;a>4O75x{T~!<77y$2-Uu>RQP`ML?h|*gaDO&JOvAGG;Ya@b^ zKyVxe0#55!_-2nxjrc05SycBDN$ nw8{pMt#^8uESA5+MWo2#jk#I;(-|Z#;3nKAn;7KI zeNOtobHJ9)r0Q{3N-62d3>zGGROh(4+>@R6Lvx<_M%HR@@xl$awWlo_)9F%yg@zjE z9FdIoOViW7NdRj}J+a+MSuB;8IfQiaJ^l6^D_2BV%)L`jM^FeM_&HjxhHm VYnDxar)_HsE4Rc z#lVQA0AzN@{?T;0oy<@Op0a`!S MyiZVcmqgRWZiu=z>e4f^&VH@* +ZUxE zaL_m_Bl_KNH8Gla!5|!yh0v_Ic2m%veVG&^sreHh{U5sPq-<_*+1gf>)U6M zdB5p>>+m-M$GirExGQ43^)zPM 8D%Q3agZkX#^9o3a;0<9(PJxsbsL?b#(eQYJh2SzjZ|Q@`q|XU<|6YMDCHt zQ6!zt=>qefP-|TC?F67(bJ$~a>8q!xJQO!dItR76Anv&%WC958Gq`w#**c*aor9gz zUf549nfzM@JF8EqOu6`(zWp$@vS_1o$6?uO6|^zONJDnVbxHbRGk*yX#t3N1R(_|t zeioI)4B%yVtSrm`o<^{!32C2o%*LIM83nk;Pi2T+XEIch4%t@@wCYJKA0sn^o&wJ# zl)1+{ z$E>`5C;-knn%PX{Y$>0A6T zz{fs71{No8jJ{ABGn0j=^uJF!YH;Z_42*ymS46~&c$|MyPzYdonq?PJ#aAGWvSfUs zy2Bk@c+Wr8S0T2FHwUmd5!|PL;-EM*;1SMOKp+PzIHk!Lc 8e$q3oDq(A0ayh^rRwsI>YpR}F ztsPN+byJ^`Fna|;sg=^apz16D1&`=zEK8W`8u!NBG@K-7sC1y}CkY0y>EMK;V=lu$ z`AHJQVs!!{oW#QmvyJk*6mKIsNy@NTtnR9jgGo6%EfR;KWPBi&H;t1OX?F~ 4)3L|+XL<0L(^OzOHdrwV+YFG+7#f-zMp@{PefPUV01+5 z9By)|7dy*i1V(f7;Zc9yX 1-4ap~EXR`F%^A=@<@45?S!x$dknRzj+CTTzo)N|cRQCeyza3zNx zNLTKj=;t}?)gImz?%&d}M}p=JyI~0IPpU(yvcP?@C>=A>Z;&*(hdJ&RsbJ}b#Q@a7 z$Auwnw?|IVupO0#mCcSY0#8wY7)W|(-g9BhX%(_4qrhMvqObK89Bij~0AmW@G_4Ig zjH-83R<)G!XC65~p_!YQYn4=RCKK094UzcSq?MA^$^2Jtw7$Hn*DLTwJS?iU=hQp* zN4vO6K7k+5)p|r@eDV~p__5MPNWkMNp&ZT**sje($vdlC2op@cWR=Re%z5Xsi)_a` zZgP`*$>i?1Z#x~;GZQob#Isp$(o?y(Bn~r`XN#$2EiKk@=PNpZ;EWX`PUmBtlPjrk zF%)eg6D@Uj$z;IRN7*rwrb!)=PaafbPT-yJoWjEAbFv#)&D=Ursnk)~apUzw_{jq! z?4&7a3&8L@sRrBqr)=lHg+j7rn*z$q;BY?fJ0QpjI3KE>sG`sg+54tKFxP$7O<3+< zx%PsVlw@wEsp* nWPMcs)pDwx>Tob00Ia0Ko4K2zGc!@)i{ zQLiP(VVw3^e&*6I6uL+`-@<=SQgQi+C$eKnM=Z_&G^;hL!6dlW&y}=Nd4sm)PULpE z9xwsly5+XoiirjoclhOKHvXE!a#^|Wjuh2BjyUv!&({d}1GtM^Tj`nA2TjQ0H87Ls z3eRon-7W#qj1F=Yx*8awV8d~`bC{z5Yzb6I9ZU?LsK}~YL~((Z00+W!V2OjqJEdo- zV>5yZgRi=V6UG)sOuR=`Ge;YU$O(k^DA-514~+7v*IVdgo$d;+aOwh11BdRRaIlF% zZYA=n`4b#TcEg?3dcUZd?)PKH>Wf);d-I3q^-+^nz4_mi7SsXMX>?zCWw`YNq|TQd zebfz2%167Be^nUwxSh)2l1RbX0j@0$w4%o{PUjuULC$eImB=S3!8~DOCKG` IK{{ajE0sa^bR&eJk*NsjQJXxyT_?)WgJyYM(Kw&xCCR zk=(AG$AnS-V1tatGbAna=0|KYt+uOKcAsj4u{Tq|`C3henXW9 ?+?dZww6 zkRmqwBb|@o=k!v4;16#8k;mCx?AG?-xo+MSo;zb)+?I?K)84i5iN;#3xMy_8n{F}k z-9H#lso`rzF^rXOyIUh