From ac6beef06554ba0ca5195ce88ea888f30def8031 Mon Sep 17 00:00:00 2001 From: noaOrMlnx <58519608+noaOrMlnx@users.noreply.github.com> Date: Sun, 10 Dec 2023 16:07:15 +0200 Subject: [PATCH] CMIS Module Management Enhancement HLD (#1453) Add design document to enhance host_tx_ready set process to State DB, to have full synchronization between asic and module configuration. --- .../cmis-module-enhancement.md | 224 ++++++++++++++++++ doc/cmis-module-enhancement/img/E2E-Flow.svg | 1 + .../img/Host-Tx-Ready-Flow.png | Bin 0 -> 203366 bytes .../img/Host-Tx-Signal-Enable-Flow.png | Bin 0 -> 281478 bytes .../img/The-Current-Flow.png | Bin 0 -> 38425 bytes .../img/The-High-Level-Flow.png | Bin 0 -> 54240 bytes 6 files changed, 225 insertions(+) create mode 100644 doc/cmis-module-enhancement/cmis-module-enhancement.md create mode 100644 doc/cmis-module-enhancement/img/E2E-Flow.svg create mode 100644 doc/cmis-module-enhancement/img/Host-Tx-Ready-Flow.png create mode 100644 doc/cmis-module-enhancement/img/Host-Tx-Signal-Enable-Flow.png create mode 100644 doc/cmis-module-enhancement/img/The-Current-Flow.png create mode 100644 doc/cmis-module-enhancement/img/The-High-Level-Flow.png diff --git a/doc/cmis-module-enhancement/cmis-module-enhancement.md b/doc/cmis-module-enhancement/cmis-module-enhancement.md new file mode 100644 index 0000000000..f7005513b0 --- /dev/null +++ b/doc/cmis-module-enhancement/cmis-module-enhancement.md @@ -0,0 +1,224 @@ +# Enhancement of CMIS module management + +## Table of Content + +## 1. Revision + + + | Rev | Date | Author | Change Description | + |:---:|:-----------:|:------------------:|-----------------------------------| + | 0.1 | July 2023 | Noa Or | Initial version | + +## 2. Scope + +This section describes an enhancment of the synchronization between ASIC port and module configuration. + +## 3. Definitions/Abbreviations + +N/A + +## 4. Overview + +Configuration of the ASIC side (port SERDES) is handled by the SWSS docker (Ports Orch Agent) interacting with the vendor SAI via SAI calls, whereas the modules supporting the CMIS protocol are configured by PMON docker (Xcvrd daemon). + +These initialization processes should be synchronized and the configuration of CMIS module should start only after the ASIC is initialized and per CMIS 5.2 it started sending the high-speed signal toward a module. + +Currently, SONIC uses the "host_tx_ready" flag in the PORT table in STATE DB for synchronization. This flag is set by Ports OA right after the SAI API for setting the Admin status to UP returns with OK/Success status. PMON registers for changes of this flag in Redis DB and starts the CMIS initialization for a particular module when this flag is set. + +Current design has some gaps with synchronization between ASIC and module configuration. +This document purpose is to introduce an enhacement that will address the gaps and find a backward compatible solution. + + +## 5. Requirements + +* SONiC shall have backward compatibility for platforms that don't support the proposed enhancement. + +* Vendor SDK/FW shall start sending high-speed signal to module, only when admin status is up, and it has an indication that module was plugged in. + +* Vendor SDK/FW shall support asynchronous notification of start/stop of sending high-speed signal from ASIC to module. + +* PortsOrch shall set host_tx_ready in state DB, only when it recieved notification that the high-speed signal is sent. + +## 6. High-Level Design + +Current Flow: +
+
+
+
+
+
+
+
+
+
+
;|a*ybcy#K)bgOmrtu}R#c=^u$J1_LuFc- z@!CjzJ1w%u;V|*bBeP~u)YTDmcCKZX@`zTMFzsN0KV86|tTyfQ_fT=%tJzuSAs;2W zg6^pA)#{2Oh2`rjiiGEXkL5tYWo1T!#;tRW8`yzF?q@G3@b_1slkp`?!t3f8b91Hh zN1~o7ZVN!^8uWllM8K@pCT(rf4ARU29hFhjWgd{T4{w?PHbdAfv@6mA*VOo+F#e0ln{U;&A@R z36SwOUryT(48W#-19_^l$6w!K zw&OmJWa`%-mAoA|f-A^40crfPu}HIZlrTD3Tu|+N183d5P~+j(;OESvrlj8_z5lj+ z+F^* XKwdJ&LkY7CsF)C@J7!VmcilwBLh+e=iMpfg^^FU7gU z>)-zyS&j!n7cNl_V_AB=k?cb4#}fc&6Gi>e`}YU?4 ^};{(#icV(NK$M?qpQHtKQb%1>Q?yYB#GR81GysJ*pXJM J?8#{y%crt`BjUr7(4$`=_k70YbU`+1B z1f=1;h!Pk@kEEmkkRV o#EGinYBrox5Mj6vOReW5O&qFr9U-g5muUhiPwvNcqn zms+0pjb|BF$Po+_Y4fKhfs%U3T6F!wf@>y74r&Q^t3d$esSY#Z(OCWB_BmdoW%nR6 zyB0-eZ?|2_5Mto{B_x&71Z(>RXQJu)t;NYN?RbD!^7_9THP~*zs`L$vTGRh`)utI} zMo BB?+d62`;fZ}v&ywRqp-(D53wc7vbgXtq?i8gG>y)9b|tVgP8K|o`=(n`xT1VK zeys?-Hm&BEvRp=Thj}5=*{1`czUL5jE^ZOuPfr5JvJxd)RK67>XY7RKfci}Pcsvj_ zYX*72lXn9!Q>3Zez_LX_K^GiNzUQ(ZG!fy?volO@wniv;K_kpIeE>=-P@y_OghC8` zS3_edA|f!^%_MsI=iPpN9y#5L@-Ic~DgafyIxX@!@+m Ysa>C^}vKJD-rBcl_!BgJ4*W$DXyv{#@ESfegOBAqTq9@T5(<6GtzR=Nvq4 zo<5Q=L7rV@+gh(o;l~FJhLRBg)9?oYUS~QxTB*=3nR$}JR}4`4w{8628IUAcG`G3_ z07Wml*LVwLR5GyBvM#Ibrfs1OKDFsw9SB?ZXr_$uOTPQ;5-8)@9YB`@DFqi|_oq=n zs_1p&%CkH2uFiN=LdB}wy9rgV=d&gNX_3a|`uT+DaoIK}83nl|kS=KgH^^G3-Rs>G z6F&YvgX!oMSWSB&;@Lfq+Vk5$4Mw##$OvyHiqvx|5k7?nX&!&a4!eRpXoQOF!xNr_ zggGv%%8J>j-NV;=;m_~P3juI^W$%Q~ !UEyjcu;4hb{M~(Hki}VCO1`rjRF#2Tm^B6*fSY+<$g7e6j3i7HK!0#*yt$! z6Z{5Ikmn+xYYp&5p|M0y?p>ePl<18j4jM9xoRqvE#5e3P0L#)#+%e72xf(2%?oGGc zP8EM$U!ydGsx3IzwfdYk&-Bi+K&1xA^1`yEml|ykIiX1JwQl*j9?) ^;-XFJ0in0Dr!D}Fm0FnT-=<~wl`&C$T
3sQ^{&bHew)u*JJyR=n-^5~!A3 ztdXrb>ou}aDRx07*t15|v4ef;mLwPseT@S;>pntW-I|($!c8@OezWPebcC)RwgbGI zKSi5-Vnv4cIjiQgyY-nh8m@3z)$nE)*e`${R*2l+-0MALy1J%xm}pdkg2U(;dD)ox z_K8XV&et5k=u6_DwI_GZpC-u|?@KXlaIN$9NRO*v8Vi1ihM}h#784KJ`@FQHEoH{4 zY@iguR^hF|o+25=m98)rt@_nn V?&?*aQX3b4e<` |KYP*R*eq_8rt*~31P{G*VQv7`vVHKp5# zy}v_N#Tfy(kJ0Ze>f$_q`Fu`UqiTikyk*auq)yb@A`?vIsy#ySlsfE$P2Uk<5_?>$ zy(-pvONawk+$&xpiLZfUkS=D))k}zeJ#2KiJ!%ASbnC`Gh`*h3D0+Y#cU-KmijB2A z-ji$%R@d3sFwNk%mj%d?+46MsZKe@ivmk>0DC!%NCO7km4XHNY22poUd*jy00o_T% z`clZi2p!MB-4?sx3xzw^J&&)!pJ)Wjoq;xnvSoz<0lJOM{=KspIKnn^r+bMhpC38t?j(xy{9x8uZ=2xsKhbW%=B2&uC^EI5f zg2MD;J%HGsA^_Y+Biw9wwVa*;SEol7A3UWro^NZ($lsKnP?NWMX-%z5-w*4Ho<840 zRWG>_kZ(nq<90d&@TaY0u^bRYV<=)Qtb>iAU@IV617LNf&ARHu8jGm3G(pf_FR|D= ztmu1QMpj>vsFw;LGzyCtPUH$-iBgd3-s^x-H;R%~t&S~9fUYJV#mzv1M=^sIrlwJt zcfG%0i6LBDZ+eMrTEqNYUH$ca5El%NC7N^IA+y46qzb+{C`8BoUgWA@p7z%2z1l?h zOQhf$Nnqv`?3YPP{c;0@ SzTT+b^Aq+@5W0`0@;l zp|RT2BbrMb{Ag(V4$W*c9Ew9*OxqiER5)9p`F^!ZzhbSy!6a*?oTVQHqc^k6c{(`U zmX@~PZaL`3yav>VEJ($vFq#8 ^On6peboDXM`pXG_CYmHjnr7H|I=r_cDwq9 z|8(eeY{*KagK)4y|3gk3nf_En*oT#;0s?!&LM#QsPk{`QoUH2NzS8Din2Z67QdMy~ znAdjRP(%aB?i>8pTMlXgZgN4#>&iwUCbfdfkjYck??B0aSm2FrVx*X}Fzwhd-q_A= zIAzx2L>ig#W0jEVz-0kEm{b)+C0hTk*5=O=$P}RZ$tm#p_9yT3sxiS)Q4<=EpEC`5 z9ZpSje6SBXF}sXk`oE6bwPR|jk)$$m0#i_n*EONkkpH$Yv)!mpzN3FSFjITCwksj& zU9VC9;TpQ=c!t<1Cr4x;9G_~Y#;8HSdc+AxuorsO6!iT}#Cxi#ckMRO1mvN{+2>Co zn&Tck@<+=D#j~@e>6?dDf; ~Q#VToURE6|S4m86sUMT{~xuA10WOEn0nv%Z4M700vE%q`L(mSYMi`rfh zP5sAp$Y4vd =I!0li6|!y_rjOj)2c%s94}4( 4Zm+_14-vHRj&MpK%#^aoOgt1sjfT2N4_C&4SYIw+LX|eR3FhAeW zQ^W3canLYP?1*O3{zBVE!wUF?U^&ed7m$-JhY;Aefal{G)d{tYqkUYCTV6tyw?Meo0r z)H4EmIXP5{bwC;ULacESIO`brJ0gC89nI%8$Fp7-yw *)pKBoyqKm4>uA) z2d*>OGA+)_Vv=HOpG@!KN!SYT{;t@DHo5u+t@RkzKD#C~#C%%*cdGc+AxL}+ueWJy z=+(bX`%mzm@2R#ty)MyHS8qS)sOpeX2AMwF-S)Eh^=pK3bg`a&Xt2fiw7|Z?^cr=$ zf*No2F&Qa5Tsm*|a?W)U^ nbzh-ia`|gsTX(8Q4vmTlxu&4U% zOpN>WK-M&Le(5wgo~OPxv7#jL4|3UB*7i&V7^PpeCM|V4Gj;rhAJxCs(<@wvxV#tM ztkxTWvE*}+@7(i@xxed}Q-p&+=XUlsbL9}!2*5v_o-HKC6VVa>X@JZNt{~OR7N$i% zIgHf49?w-U`W;0vJG=Y=mj}w5Z3|fAUNQW_Bmgo?8Z%h?V;t;rfXSmrQOA6IQ%->9 zRkp~-z%@C6MkCSuhDwD?O9h`|#(hqsr^1s(@{a0_NDf(}+xg@8V*t=LdLMV+;QN`8 zvMjSIj^YUjX8y^ML)(mUlIK0?*G8qc3?=mfG+ZT293ZyK3TGQX_HMO!vg?5pw@V1X zjH9E_tvyiRl*6NHkAsB*`-YjNW|oPq&ks#z%2G*4ENLjV`2ds8q4-(Wu!X?zE;Bu^ z_jnGruj32nIj-&NbKVkt)uTU6)1HHJQPi=G?ToNO+BX()Z9Q8){@0%v>R7b|e|k8} zpbI%Kzr!DG8zaO*F@~d~kXuI{yUaXXA~AEq#MfsBLIAgVPuzk1q_`JL-f>pkKB1T~ zwBdQWkjsD!d&Ml9_&Q@QPbt00T|q%!m>JSq`Ffr!9dOEq0Q3VX=_v&t(h+r+?{(zU zcB js;Uj%`XP1)Ij;Z~C5 2 zcl{Oy@*eM&d@Ip*`4ym RvW>oJ%vo1RJ+XOn$y z&z~CWhUK>x%v$Zqkn7r>4w*qtbZY->Ax*xci12ps?*Y53>@GIvmE$q3dW+b59)&?7 z4$c;}*f=NDTV|w+b%nPHY1dWQoGg5JNDWdXP*YnJ9-5d$E4$## w$o)bH0Cts z;lvb7DOPK~TT5#`G-S}VJxo*MdwvG^8M>ETw7~ptRLT(}Wt&g6w;+g+>iA~iYlG`o zW-Dk33E>H^1v11zQ(w?O3Ob~Lw)O=y*GlqzC(Zkr1ZMWEN2!Yq?YH27oq^Ltg#4j& zm)d4=`}AmE;@{W&q=XrZ?U|h+8D|U-}0#EZdg)-f`=Ibz7?#q3ycQu(ug-Ra={x -uhKPMQ^&goJ{N z!iKy8Ul7RXV7`XoC7ihxOVp-Jx7z Mw5959F89|;9*zw z_tWd F~ 0VH$6DC@$={0z1d+; z_mwAAoz8&jRADAL2pgJ7GnV5b>;br(nTpIdK*x%C^&51_-sE-=h>&MM<1njQYIb}m z>j2b^c?CcQO;2Nwb!sM*%KpG~d0^J;61_%~dHTR=+r>)x{aBSk6z6_};RnZ>$o^ tTMmKqVvL5jzyOn}Y740^58cTp+lbEV z-8v#~CBSvb7ipR?q156QfA?`<@xXRB`qNqprP|amZDJW32bJzJD6Z}=w!X?BLb5c+ zA&fjJ;)90oT5?OA_I%*C#ZaSe$PCFNo29`Bsg4=_@`ZwYOq(5}>i;;_X=D+!&FY!x z3=A3c)JnL489Zt$@~_l)7y_}49wih$=5#G{2(B}PTiRp%;JXu&KVH>Z ;lXuC>Lb_3Ic zDb~2%PPuvP1-V;K(EI1}UrUHd#+~n`LlPWPB1+5-MUnHuv;b%D>|KpW&hh6$26+cU zQgB%Bi>5vNR|$&WlR`R@=-x$_bAJ=>CY#Bw%h9`WTY*6|$x@Ow!b}IG$1%Q!JE#!K z8&)4uTpdK~S$KG`am#b#Eyxtk9J1|`dWQ9Lj{qh408RKfseH}9vWZ}m3EB8ig)E1H zVml8$@v?(+uHDQ1F_KdL*CB6Gx~`d4%d j+MZ%PINH`3!0R7qXuRV$t9~jb@ZC|XGz{D9;9w^ zfKj)}7)NQhp^BoU`nUMN2Lnox*KFHT4{(xNktHWocLRa=3`kdp8bE+QYQMROk_6v$ z;nzA3IIQsO_tHSM1tN~a)XEln6vr!E*VSJgve((J -#P$fdO?yQ%WLav+=yyv~AI!Z6btq12rc5i}j=4`592AfUMaZRd$Nk@p(&9 z?1VQ>288P{kyR`hab9H&UCZBf7}8cC6;(FljeX2LEjWgZ6M% 7$Zu7v7 zhLyYZsH#%D(*|+pM`qKtGVhG12Q&vpB+rnp)IICY&|6T$q2nsPWvn~#m3g3KMze8+ z tR^Q}=6im$Jwn0Wew6j iR&Gda*vW)^<|S!7NmK+HQdT zZl{H?t9yp+`nU*CgUXDB`6W8?DJ!gjm86MH+Gy@Kr#5eORjjL(RvRwtjP21T_}ST} z?AzF=@1ayHi1xPaY|AxN34DEca|E?r*tmSP6>ARU!+unkStvXJxFvub3)P+Ls|`Kj zt2pVlm``6zdOEQ0 p;&Z#;r)6jOLODp`hUzE*fD<60IeQ8LTx{ (x&4B$sb>*t1 z&AD7vt2Rj-+*mHdM*HwuNqu*_`y&jib&G !y)8)2ukVm1`uk#;@>`nkN`U9 zy|YaLX_M)&>F}SWr$ff)XZI!EJVnhqnw^OvNh<% `TW&F3Bt%4 z|81ukEu4$_Pu+IoVEC|8y0G^k?6ZSq!{Uen$8gfYxbxfPTP9ZAw~9JGtwa4#hvqBe z#E#H PRiT@OeVH zXYG)23HJ|NIjT zk0>!)YdEGt%DQyWk?nadW@diuT*%UySz?+ zwcjz ^a z*zj?$!!WVkj>2K3F>|!&>Pme=hcxa-(TR65O3ZIbqUAcs+Q_a)ScFEWxF = zzHi1vxaEP4`UmU|+~01F _nHD^NDRw`6Ut^(HD)x03H%+gD!QL8F43Grd&cuB _jYYOpXK2QY(=dG@y2YX3fFF9Cn*%8W&;z_XpSok!T>OXp5hK f|zVV@|AHQju*>P;4)icybl_vZk$TU7{ePbDo541gtMCw o$% z_vj47CQnZO$&ubwqF?d)_3MRN+tXDTnr@=(^czE8-$V`*6&00?=Y9;Z(tY^(d6_}Y zRx+>kOTBo482Fx0-^hIeQ1rtN3|0m@=x8-r!@|OTK7&Edg5cJF_l+iqiUvv$+>ai zG2-~6j7*p9WP#=GnZk90^9tb3+z!U4`Pt0y6Jug>5_EakX3-zRs*K&=HU?J?d|3Md~AApnJ YZF4E#FICULwoz@Niv|W~>kzTeAj_ zIA(0va#K@NeB2>e1P2$FR$GI0`g8yTSOl8KOvOzDK}CUq-Os-au>(E*mS2e<>ZpIB z(v>oZzR*=?_(?c-`P1)@{>2vs!aLT72GRemso#(Cr%-Cq)UI-8#riMN*q9iAiGXa6 zQ0XQD{rcV8zharxfwn9H3W^e64xr0F`yuNyFE1~AeEezmba_+L<( iT~O*QBmqGo(CKz&3XT| zZ9+mr$$2b7a&vQco9@3U00Y>FTcep!n{hhePQND$)fJ+s9qsIXc0mo^C^bP)cT!(5 z#KFjS)31OzPfixLn<_fro7G?Dtb))1`$FW?-&Gh4=t7m1dkpqD{L_@eZx7VVCC&F= za3F!%+0_L!tXO~inEPMD!h%LeM^{x<0sC|vVC$BeJyL~SbDU5#cf+ZIz>dC$htoe2 z5@zb`XTRY-*PGAWX>);fRzUB3FZK=ovxk(QKTq79F3FUHm`=X}ChJ)E0c>`5_TFhC zy_WtN4xC=nr=`B-lb_*TA&e?XS&M-yot-&=pA^t2`QIP_Lz20 5e6kD#c?Lg3K+n=3kc`WBBp&)q4O|2hY65KI861+aVfD+BzmPo6v}R837tPA=Y^ z5Z2IgT4`_7E>y#(k *pVt<@|DK7l2l1{pHa73xCEdplIv~uD5EGxR_2B9za;#mS z@0FLA`}p_(zpIM|oUDwDjM;J%Hda U`G0xFF$CjoABl9G~aY~dRf_Xk=-?oSJz#({;E zmELmV>Agnu->>`czo@wJzC&Jh1>=|OH#ptT+5Oed92Op)DdC@zkx{;Q1h%%e2HN7@ zfh$XXN;P^}Sy{#V2Sc;69`M9xW>)x`&c6iurRjNi+{Sa{fL#cT$PCZWr*fb`?%%g$ zgtDS1!4uexA}NKnd{{a_Qo8FfSQYrzm+J0=bf_1dpr99Er@FYf`1bAF&vMov3PGo& z !kpXeMOm`Hex9-IiIY zi6uVu{S8BLzV$}YT<%O-1Np?jzyQcEXs Hnn{Utf_!M<*v!OG(cC zqob89DYPrLTOh_E^25WGBVO>guc2U^tgOD*XSQ$Nym52mQD?I)ihH8Vfbo28OQ&Bqr)RI5-HeSp2GV(D3sU zBOUDP3yF-hQk$+L{FUVD>e?M%Qo>e$8%JaFA!=+57+XL w$RA7LQ4@il`kos=rx zR2CI6f3o&q9|U%uoV>ietn5n^$V}2)^LOs+EjJ(#dV0zyj*V%2XA~pKZ1p@al$QQ- z?Z~|U^#_o6o4t?evVSH-JpA73d(LXrt4Z+PWZm<(drL({MQ$#AFpcsLiw99Vu#U~a zMDkHQl^#8}#Hc8I(l^w4AB^}RFyU9PzNtMP+kgCeAi_cF3RTP>&VwKQEqdP7 >pkZh0AlZ;TKf zQut?al2~4}bsyGNs%;B;McLi_=-^?xnyQ_YfH#umeY@|@+xjsBD$JmfaJnMhwgFWs zPK&JyE6EEf|JK>z;U}krJFf#{i%6``6FJT32#tb !5piLCq|ny<;w%e&B X9}h=hv@5u~D -ufclT5SS zH~t$jZhX%8Y8)1EdKBMB_xVQ6+Tk5#tu9ko5?G%35w^^_%!uzOm0*$_9#3I6w~aJR z#dn{cGH#&r^bz(&VhUJ?79a|7-Oe+-$}-yv@A@|>Q{6Yb35IDF{=VeonIHj?jt)ED zqCO7;*#|dTcX|vQ9D!fzy07l1F;wp-B_-WIyACpWFq0?jyfa-icVJ57u=l>Qs;X)Z z#*xWp!Q-x(gzyJDOGnt!Jduh&g-KDMc0M3-F!7Vm?rhn@!b0|L+XGZgA_<)YQQ!cL zX^*c`5mF{5CdM=(D+w5yRh4yw6FmRi91s>e!s>phjPm-$a@s{Nx?AtVun_sYX)9%i z&y|2jUwlo;)n4Q-8)L7RkI(b~P_w@PX4a4i$%Se*o*I6BeodgYuhh*YVUS@yJv-jW z&l#jpH{HlmdJA#`kb*HDcP3<33%m(UHUUSe?{uLwjIQCe4i?skDOh``F^_jIZDo%e z%Tnp3RiqQOOozbPVcX%uaH+PevIEr4AUND}a0qvuYm6}rNd=MZ$L4saWYJw9u>sE! zPtJu1J6sgbDnGmn4(;a}$zI^w@9 JAku)cXk3?1vAkgaTz`kNqjJMOdaaI`<9^J~rBy zV9LRitfmrswd#gjzCa(uE^5|*!*0VN{Bv`y7Oo4%l&tGS7RWmXi%|R&3#N-ePs9-& zAlN+{|Gedy^JvPj#Sw4B=cY**3**tJw!5>X%FC=-4M42%ddT@P4DpruryqOa$?m)7 zYEIy+@yiB75huw(Bn a zb{DAm=7R^Ba}z#J5hKZTClrJ~4?fNe43vqjCoF+YK3(M?AW`t`>RZRxCYIv<2jqQ= zR8$EKO(BMcuoGr@SeO6NmmaB% g&AjQ8 z`~ yMEx?YAlm?>svxziEw{P#HU=&EveP}k94!mb{gYmJYOgPLVqfERn>M$I4d z>9=Yoggpl 9 zd5-52=|nzR!X1O-?VM(1QSd4vJ`N{R&x@CEu1c5=iMmf$_y}lEDnejEmNF^I&6E2` zj9TSPDRKX7uuW@6c vKjVEUcOVfjUh!xSuW(v?~-_$ zhKY%kPMI+)vQ@c`h=^!a#XUP5GN9ye0cyfQ^_q4NRn}hlu}I-PnUM3YtEMBNmr{zD z?is71(8M*@^w#3L(+GB`C0Q+AS2Rh3WwXj(0<33oEq n*t*BMnCp((Rl`mNY7jwI0>fku)U)|b;S5Kx!DlIshJ`^r z7U3Pt%o1P7emlkyGmq{L(b`UJTU%RpHl@Y8Xj`S sW$ssl{f~e}W$Dp2 zvtQh)Gv^=U{hWLh|GPQ5S_=CK*Mocp mTwgbuN)fFbNoh}__*xUC&tIgULZ!es`Cw(Q+Axqh{oK&d6wfQiOF|b za(!MBc0OsJBWRzJjRF!wETPt5+(O3m9VpKGl?v_5w1i|0b}Fy0z4A5CyGpCVZHtg) zQWcU+F5jjVON`f!?#od7N^(Va!m%Bs8R!RSg{x&YWn+x9>z~swE#r}=JIpuAzcXN7 zby$za_(jOU1ga>G`v|Z_2L+AFBJ2aijQIlAYr7RN3!}-%$O=2}W|yLWot!*3Cr9y! zie{P=IzO8TUw8gcrI$4cb0E;1Hq{X$P!KktSw&T*MKda$u3}_a75?>W1sU?Jfjp)= zxu%FX0l9I6QCAC&Cf^V@11yOk!^;4Tk9uC{q*6<-e;=Gos3FdB6wdOb0|8-e|3eWa z@oLQ)wwj(iCR|CM Z@AN8oXZSV z85HB5?dj GfKiFyRM^oTHV39^UPJ<2 z4l|)>(th&O0mvd#kC>IKXFrx{z?>N$vEHZNr?MxBe~N3 H|h^9pepP?p36-QUbGro-KJ*&7?vs#V&I-B((x zKJP@f )z;?vt;& zXJnKy8Vpn4`$M>wk7+CgKER_8B@icBhr1wscaqygo;zCoWJVCim(xcqQP+k^#H~O3 z7PDlWs5-RBLm$=GiTM-mKJsQPsVgs8KPiR*O>+t{X?=(i%y7Uo#!<#xb38&3n#q-B zan-;2vgZD^i&`BicZ7S=3KNDzhg<&yU8A Go3&<#S{I43!( zr6%d`yzNPKpk7De3z5mDT+V%8j_z;}hLa`XN~=!~@W(4(Y9Dk*7bazB>^vyccg9S!`PB>)9dZroBc6{}-o3jHz6 z*v-6jGe4E)6>s{JRh2_d-qlw>XB#<(I3f^(vFDTHDq{{D`m7<8>fw3pGBUJw$$$Of z0eqPHt4U0X#q2{pwOu-x&jwTcl>BxfQE`6<$*BZv;=I@~nXOzCgs&lz$hNU= zM GCcjLvBOPj04=?Fkfi_>sOGJQBQsX zlL@xk_rlI2h9gED{wm~jFrs5O3QCNVEGpigfkLmlx{N;i%bpk%%jGAOs9=u7QGp+j zp@Z_5+7;iOH%NMz-b{fKdpI*b9=d_~+n8oZ6^7WJLV^xhRg99u1dk5)<_nY~9Hk-W zvt~z7`kp}9#o35AREMh8v5a}XIQRqQu+>Yqw*|zsV*Oa?z=T7PEM9|?K}*FoX^Nsv z+-t6M+S#*~UdilL*mWoYiSijS5mB`*sQQ|a!9(OMJnfyhxY6vPp`m=q%1wAt*T<=0 zfM8QRnx#qKkBDG!G;+jAQr#PZ9~O1?up1`-NK{Gwlbw&L!vZ~w{#F_(9k2=c v~8GNKwnfqFF7Z0~0< zc4Xw+Zwn1{`sL>nS~LzX9B`$C<`o0WAztv6+DTuW7@^f~E?hbxrz$@ab=NTyHjJjQ z$ze4bHk3#vO*2`z!)r3qTV$WyXNvh>!v`VWn3$87pwlvjSLTW*hk0x1)2DS749!92 zGa|>tz1>)A)u7dY*(=a@@nNy_b5NOCSt-g-r@1Dh&toXl+#S3E `?wp5EXQK}=RT!*59rxUlFgw=%0|ak;2P{>5~enY1T{=q zj^w(B#Hf*xjI2dHR{fQltUA6p;WN>Estq d< zh$%pmXCUnFvx?p^KsmzXOx~PDcg@m9rCm?L=mb^#i6Ud0#N&_?+yLyEO~*2ipt{J! zS0i;$KQ5phQKL@pY~m7mWIs775zdSiT rOi$#4FiN^Iy<+%yxl7G(g{^$S*r1 zy|tunjv$;i@_ptb9YRVHXObr#Txuy!xua^-TMBK0Rxu}e=Z B#A}Hs`1bLthDGL#({Ow$R9vt6F1G}QWGuOd>6h_( zw2Hh2NuRa7dbR1Pr3KM3YBSt@PQArhSrI&hFT|2fo?*!A=;-C2Cv>W*vM_J z?L0DyLKzYneK0XMc1rlH8yQge$ZNiK*nu D zrl!`62Q|gxx!8SCE}V@QC818dmwK6KlV1{mm-XgI&G9WFLHE0BfEL9sj;MFh&mk+# zqVz IBtm7qReq$PN`*%z=yKq>uTf%Our zx?cSZbFx{$O#E4jZle19D$i#mtI9(pistIi$39^0>6jNocl7;D?hN-XP48^>hDGH; zrpcL@QfC~5J$Ok?bH8Fpg5~aF^2;k+-k3a8IUi??5gbM_>nheloDR2Wri8>e#yvty zSBsRsmX )7DI?&K5xflH|{f}V|#Q?`Z z2bpRjnoy{r09|)smBMb`;bZIK0DV^zv&axGRNV*MRv9}t?=I~3%EQ`ZqsWyqe8SvV zbmsi^iQ@IiQP{OCT|;-DwYbFZ>&ues57kC&gG|Y@_m9_y>(x)WJvD3+5iTF&NU-jK zxy~kxgl$ZsE3)p4MK-e6dOC*gF8qoVYfoSAO#G=G#uGSU-``U@J1`0$gj3hpb>3fs zAxo0*OLl}s*`$4x6j*w-T;q7 H-^t yH4}HIn`fk?JjwhkJ;_28`QA^( zq}}*~p-Di2u`0ULdvL}U9q46JtLn2ehC{!ZW*NsJYDg{Ny_jZ(6i{QJFP5Pj?8p52 zT$9x6Y04vBynd@`j#^AF21X_4)n+02@6qB$e8yuUh!L#@?C0(6?F)S0+rp d{ib8#0(=dem*~pH zMau;plhA|!P_uX>D|2gBn~Osge^S20GAsQVi>*pjP0KS@jV@hZUtwvFQo%nk>NYwG zkW2imixt6RHY}TPI})w6yS9eO 6xalK# za|361ayB6%C3NXIwhpOH;j6s2BLxt#wr>0q42eco#<*9PCo@OvmveEmS|b~wAmw$Z zbj*p1gWSg9Nk~c2aFCUi-Iwl!F%Dm*NiIZs)Idp#Z*#o;?r^K2gU1r`#Mp&R&SZ_T zJYYCKKe_T fuQ##+Z#dWC@z2&hYXKw^fo#)-H>y-Q%Fj)%P-%5>wH7fHD$F8c z!sDd <&_J9^Z%Ur9@wHbJ~o2snayp$ n+JAw<&-I$wpH2f(pNQg>iwiwjFj`HNgiVEBs0L9%QPe-DAJxj)o;C}g%y z-AGk*gfrN5KMIdH4PW5Jr)NX4%|s$Y0ptB!ESD&SJ(6pdjpo*={;z*8em^Iv2^Z32 z4}r&CuEjEa=~_X={$-`fz;6l!(=RG!iDo(L-}}It_m+c`<;e5T=Ulc+lxz*r3>S5C zs*AIYZBWDQCRf-G5dIqr<56Hj+!vf4>=^{Qt~E6^PP~Qr_gH1RAAFlYh;!-{Ac=?R zR`aOwbi0|yg+#yWJ$7NN*CTMnSl~`ZZ%7nIfeBose%%mKYcwAm;qk$U9B1mgxeS9| zkik^Z4N57$7y3nf{QNA?0wfdk*im0V#CSYdnaIc8AUQdCN%oyp=wNE*T)kDR|HjCe zpm+2POxc6oN105+$ DrK*<-j7+%&rAD}^r3`t@rId#?KQgPNu@117a=;|^b-mP-#K+4>KERIp`*P7H z?uJE)GaR*n1e>vK+^)ffv}-ToDwJZ0jg1Xu143J69vUSER=3KiJAzK(`o@O39-D$x zf3g Zfs`a>B!{eih5r4qJ4uW1U|5s4&tsq+phyq3(n~%d!sodboopr)^>!q zXw@amI)h2+PYRwrGdUf2P)+7I$vur&{xP1()dXpW?ohlYWhSyjP$ARXxS2*qi(#R> zT2;~G8#~qY63m}>Ha4QJn^qVZ89V7et3fZOMKL-Yjpk6qd9e93@}<(>XHjQAM1QZF zR*#n>FxiIQa%U~+Skhdk34 tY1ef6#j|i+fA7X8@&ZHez z8I(*1s8Q*%WuRk8Sudq1hrl@KZBBDTxe4*F?`VW)yzDY|rjtgqEQYJ&p ?Ge10(Sk)=)~y%R|uDgP4Mo=qIfwl;<5)GtSk?q>^#$N3@N~ z9Cyfb1?sEC*!q`N8KKgHsZ{HA!i%wDy7zN4B?H)Ge>8^uCFEjXz|d`a#vXVI!r+0| zFKIi+3ozpuR&{9iN(+rAk;@l8OIn@5!^88Y8fSXy_@=_dSaN#AyOJ!lcs*!25nT|E zdslTD4EGZ?$+9_u1c@WjnX`+ARFwEIoZ@@yi*RI#E|Ig*V3Ui)bNssXle45hLHj?* zufR V&m9-O-eSL`|8jdcIg4)} zJ1?+6^jU2p%^cF+#`O*NYtXx|IjR1|;|MyT%j)qd6JaOL-rht-RrkZ6FjwSd;)7_U ztY1x73EiU2QhoZXs5B{RQK_%YE6r?QbhA**6HZksK<%5^n~T0_7DSo`nq{J&JbLu^ z=Ldr(!e%N;QgY)e!$iZ}yJVqxLS}-l$;_924xD8_qW-jWpM}&^k*zL{#bd{Tvo)O= z$sO&ePD+RD5aJ@jbi>lEc<;oxP+6 txPP2g~pYFzWq`7OoBZ&a1fQ9x9gxH_!YP-*M=tWj=6>x?+_h z9LS2pU8lH;zta*WbPd`&N v`9%hj z#%{DLMA6Mr-Fs{=ie_AbUH+J$wCY$FJ4Y>-ir;$i)2Egf+^h;&YVDisgKc0Ot+Bn# zuI0FLNSKQgXF|1JstgZ_dCC=;XXrxuzBf1@<0OFE8N_@ (k)QOsj)Bqvwjn+p)M9>)ZNU*`)(Yo-@w3(^L0R?wRKE(Ci>a4 zXKWH2m=PN5X4VIocpnK2 jLt~-Z6S4F=@F+hY3qkJqiTxK`hheu2+)KINv70n6_ zP!ZRNcW`h}5?6|k@y4h^@n=zM5pI28zoek27PLcN`pI%|=2ovxD)d;AiK=|#?rp|s zWp_(XTSu0l^vqd94Ald^@b28s^c +bN5{xO7`RT2Dm@w^~YL#OFRMQC0Xz zDd7d{BIoHj#o)}VLkfWe8H5c|uHQ@x(n%xA%szxVOXa-GqhQ4KbWAnG|LkNYC4DEJ zGz|wCn}z2yP&73))dXb;f4b`!+OGQ7i@_(g`aYZthj78J#bx|(sdacq#Lv?Q^*k@a zR#mHQIIZgv$t1)= fip_o-!^Mq zs$ZnS>P>DT5aJ;lS)06Uc=|J3NS7%i$mrI_XXr~0A+oxK@Ftbeq}u|l#H`R$M>p{% zB4Y#moh~|%rB}257V}(Qx`jz(yR*{kD4by_Z zN6`i7=Vb5<7#Md&BlxXf?Sc;G7gjs-ZM2G2cx1u%SeZ`prR>V_2pjl^mNIahp$O@e zby%hz)r!sQGBPLaGjiapH3G5p4#%Yw?>nI1eN0ph)QwFhpjcF6r82(}^T6ghJG2ae z-VX0QPb}Yj>DWv*82TSbp>@aT%qX(UYY&_U_6{~SRNonN-Nv0s*M5}n+vJ{-b#)96 zdCkSzt8!%J87N>RhH>~R<&Y&&G@tNJ_5j F+9xJ186^U`si)z>$(jIs-e~9JbaeX zPo$^QlWWVt`9kr*1OIg?y>f7^z)RyoVg5`ux{8#5Z#~E`kjG3#?Uh!|4VYG&elb;? zyH~9p1oE@OIfE(HbN#nStu$gC<1xC#7KSWy1m<^Tud1_EhbjywMnt+{1v^56#|DID zg!qYr43fQJsDH`4J;|E*LBxPC7It-UI(?8O$>|TK>tiMr4D$-Ls50dq?u*X9z!^4t zHI?e!iBHSIPrj}$|M;ha_3^j?ffVDa7DXTsf(o7fhKCZk+7P-WJ`Lu572dbze1_e> zBP>!patWEzFu|$QeURXNo9oMH=#NnYC+9HbGhqfZPPQdi9kWYV`v_Hk7PqibCKiQ8 zf?}4&Sr@gQQRaGa+CZ&0lM}Ptwz}YH))Lz5euM l-d+WD(UI8D)t8p>OS?dZML5lg1;ck61VV#yEN|tvII{)m;GPP?+u x2Ft=0n%wgrQ<7nx;r0sj3iW^70&CWPZH^_{j@pa^< z&pSzk7)PTJv^k!r z(IUjcNi0AQ<(Tzsg>$a$@Mt(clnNW?0;pT^M+UG^7iPRAk3*$X<~SHe`q*cbEZz=E z**-|@CfktIxyTL`2j)oO#6gj*x}$L}NUE8*yy0lLI7HY+|DY`ZT7<6+{mqFIBMj%o zC71*GxU94^Pk;)?jRk|`GNT)YH=N$M|Hsl$FeW;Bz*)LNnv=(mr=nVx#~)5k&hvmL zL>s>eONW@3Mdw}~%NAjfsQ-JQO#t~k&;gVUTIs(VN>1Y*W6va_6@wIv9vg^<6TmPM zj7UtWDyhoaOYwi)9>6z3+V)G3Vb9L6@9GDQA+z-M4TiCGUV_0}BB>EuG1b8>s17%d zgVEyT`fwtUkO@*C(I(|A81&&SF-zRF)yg~yD7pqV&6J9O$mUWKN(0b6X&oRhl~2Rh z)z#Hu()kRWm^tJW&1LepQ_>&ZUV}&jET@J2*3qf3D3%b57{-Mt*CF*?1TAd~RW{RH z%401AW;r*WL7osMqg_m-H-1)BOMLpJ>k1IV2}9MgSc#SvvCJJ++OutDoL`N!-%jMY z`h9)%b(V J4_48?BcRDeD>{t1QxWz`aRMoa4Qdv0C(U%SDqoa$qe#_BHC8H7tnt zbwA0VWm9T%v+$kxVF=SHAxV5ZEER4aG(#t(i0cDnG~8S7$S^z8b-Iakc$A`(aXZOo z)Fg-!pSQ3o<$-2jykjTwi~{d761(nO_<;%w+6+iujOsKnlbw}j{D|J3F#7myj*(GR z6nu0#RHHXd4r;~_)^#f_;BtmMWOYFbH1UuaO})&~!`N`}+8muRvpvE}=x-|>@FtM0 z+c%3eE{- }oz4MpjZ{S}gbvkM}t zx||2yq5e-*bll^r=pIljwFnePef2tJlX$0h<#-q4w@7&3;M>mVx <_s2+&l^jHhv|1#2 R?pca&$F#DBX}Qbs3IYn~ zrToIRMx*BhRiJTCq{GN~n3?-Od^qt9yP)IZ*=9`uy#Ul0ijyGVv6nSb6B*hObP+W| zVQXCZ8~pT`k!ZrSd})H~Z(py7eKiFi`|%t1L`UNmw6uB)FJ-rlS)j1G(&uVv9(T&` zU `5>ZEFuO3H=j4;4q1Xiq>W z1&oLW*m+h ZmYH@T@M!Xf+)cVdlgC*c71a?OlkT0lZ(F>h=F`Bh9B1=H*t zFu52{8;_dgv(VvEwL3{n#ZArm&4%v7dDZ#i_hvnQ?!K$W2vp)t5YhliemPq-SrAbr zzq5lNMWdfJ5vzdFkZq?Q%Z-t#%yKLy%>m49A#4N>%f@7tq3Uln`J>HheA1QQWR7qo zjUcn)=N5J&X;@BG?#fL}O&x;P3E<;HWrve@Nermi2||azD>0(n93{^XgC=dNY`J_^ zA`cENIU}ZxYFhgiVb6^?oiu74y|EOf{nv3S@42|JSHT)_hEb?el4z*}LfWWxZ>D*c zAy}hXow<;UxU!1Bm-42&ZLQxs?aD|DsSMydayy6Q73x !5^RUd z#* ?nVe73SN==4v_dUmd9W{1V)v0Sz5?U?@$nKCfP%%To+l68Mzj}|lh{U@?1M>~OM_&WNlPLW z$S!JMKEzZt3eUL5ylMR!s>M0?Q>s` 3&o zol<=+hM%~T3Yu)lQGLv6)@UpNgtjgVA?Yee%3ht9Y*8$f=S) _olR!xs@Lej}~BIV_*C_!0+OXe>w3LHb56|VpHz2>%X0`B}AsqE7IBp3-%Y3 z#{8V2KmH8}Z8_9A_R1K#aw$yP74Jsa#CG^KR<*7zBIQE$`M9|I3bFiH{1=?<+AjQ4 z{C=jTpb+AD5tjy2 @HH_G5cCJODH*3UBr1RNkFX z8?eEBWG_}uI)C!XDeQb78a#aSv9hF6is(W`;={c`Uq{DxAc@Qn;41qZjyCB}JFNp& zEUVV4f2~+s?(CQ06GWesh;^(q=Jm_8%h=wOs8SG2aFBTKvJOdIGb)6Pt!YMvBeQlW zHm9ocoP|z==*rYN^oZ} EhKxp3hF| BHyK^Wi^%O zRmBca{6XM25z)+s?9_T2stSRk;8|59pW0hgp_aO$N()XDjgmBQDp~|kQqGyM@Zu@+ z65JOM&a2sV!NW1{`_|7trKA`wo-5_rHQ}8{F^}SSA*3~N04UF^ z-o&^k7-YUDCnv`a+*s}gW)3ugcqeZN(IX`5PiBnnrtIA@dsEo!s1zqz#Pc_I=zfYq zX`vmCniwN$!E4aL=W_<)1Ic{INY)VKTN?XM)&(#hW(nMmHNn*3;#yy7fr(2<|Ned` zBZLru8pAPSRP gQUL74Q_s;Z$Z5@YmHQ z%)-g=z~c!U77$I{{@x@L7@++@5@o%Z)@Ev}1Mw|0L8aGPbSY2WR=kxXma-_D!>pCA zhSRyA5r=Te%V~&nBD&E3$Pbl(NRlfz>>KZoZH|rDza7tq*_(aFud#&O_4qOw{5UVO zE?A104q{>S*-&Ydz>&txqAS8I9XW4gFW)eR=bdaW^dpb4S)5fd3lHf|WKPMITWbNm zjpB$@zden?sG6aRHR*uap8ZJ3L3?zFLQ0xb#lLFUuvV5FuBP8V$Wdg4QKJ^nUtxX9 zM<+%4&{LX)ZbGg;j?QC5WLq6~s%|e7@uos6$;E9>+2n2hqxvs4n>Zc-xADaouA&?g z^Lf&+Nr>w@<@wiW;Y8a{si%xmlHTWEWT&Y`eb^PlGOk!}b#$UWUrF6q7`q9afYkoR zktu-Ib$8zZUdAscZ?DT5Y# KO$fi#R9Ia5G5l<-eVpA{q<>Cs|9PX#9JnGL3y; zk?US~p?&Sr^dhU(G~xBbBR5q^??t8g%I+$hHh_J40la40ATuq}^xWOw_i}M@adnO6 zs>ag}q2PYo+@8b?%yaKC45}+|I)!A97PJL_7iXqk>wc}W#=nSpIuj((E#zgi_~Yp~ ziGr23@3jFEW4uW T_eQS(cj@ SS+lL8oQ3~y zvBDP~(pz7l7MFj1ZM<@Kw=Mi_-7~cPr2aGzI&Ah_5r?!`&d#BGH+El9b2#UZ;`J2{ zMK5n}D4Wkl&RconCk92*8^&5f^0jw;)BFyqmW)pro;+w>(eB9n=xyoS^(6Q4!7VaF zVlFw)FzdTao~%`cHZx_1vR~S-M1qZM?#pi3nHQhB4=V~ z`YJO$|JjhTNkRXp!D5Wf>w@%?0VaIIsOOtHmb {(>?+$YU+8=3jH{eoZD`U{)pBJM4C4y=%G#h0MOV75Uq8S04%$58PrYmyK0f*+ zBer`q@4M}q`Bw7u^NUV=Hxvi;Hm}{!sawIlk3KK3X{K)O>>b`MHDn+qO$E9YxBc&= z zO|k+nya$H->^+XV&yI- zjz-rQP#4pz+rA;q<2(BO ^yl*QhA2ssc(7wnV&T58oND^2=BD!gPN|Ob;+mX9a {R@(zMQTp?t z#8M7{*Kc$Fo)hC1@jpoRoNw0r)%}cfD(->bQ$M38x8Jn>&i|EjkW^K);;`58^^ GaVXK|;i>)Grbgm$k<^!7bU+fvJkt3QU=9kGxcv~xZABWihYD)`Rl zi7kQbURLn*&Ln^CKHcppM(bArY9|jkPVnT13U(XB3uygzkuts^l@GRZE`~)9I#NF# zX;@}w1sV>SC*mhRSZUdL`Ea$QRW?k;`627K>2JlZGEH`g58Zwl@ymD@i*cRp?h%xW zK J9|=+EP$ zU#U+&{8{X{NAXRzXXD!I?qAi{ zu^@Oo(eu+*)2P%xelT0Ac z{fmpwpj7bVB3@AUI-3Amq?Z2UnjUzII}eX0cZGgrU8ila^)i?%->CF9<_|2QyUxem z1#xa$f3KFD>iS#VIHys3Pj;$GyX0@1%+cS5554evVGRPKbidkt PLaLKDp^kV16-(aNh+ zqm@OyWdz%$v}~j!bYJkz^0T~#l}eW{u;xegj)E5wz9%Ce!ORVRi1I7XjzWOe-{RUr zlf96}xhg-5A1A$EzZA_kcxBEL_xU88InzDT@a4uQZpmi#vzT+78to?kuHzK)TUe9S zXKJ5>N%7jki=F8&Spr+jPa)Ip-^>A#3wD9Vv%Jq|WcN~=eCKA`A9HE-CVWf8JHM{_ z_0IQG|7F?V7YB4Q?TmvCAAL5W^duBJDU3`@Cw(J&jjv!C`|)aKSQmEMUze}=V8!;2 z_?e+$X3BOG8>1{nzvZyMKf(=d$O%vonwQ;;Fc`!B`cS+i&Gg7&Wcj4~=XQ=R&ra0$ z3!J{aYa%_4D6g(k3iTIGUB4${5Rm86W|bb?abA$dhIh}Z#EwRHD_`X~S#K>=cO1_6 zaOc(f!J`Edh@a*P>9FCj@UumW^KO{)4l37-J$Y#IZQj1y@ivv&pBZW!{XI|Dk*Wt@ z&Up2jWyh>ezrXQ+(|But$Gdigr>x!s$1T48D*Ku7s>o^eoS5-+mB<)AePDKZ&GPGd zA->_By%%N@Pq9tjMES^`+u3$cT7|u8+m^l50Y_~~L&{&1Beh>IeO5T5r@j{Yp^l4V z!)krC9-9s(x?43S)Cuqaj!1Rh%^`PV69i^Z;1cQ${iP$Z Hr-(9b(H(cqwBWMlqE&BOmSN?6cwXE`4YS@R7?H4Jh$#{={7C-j< zv|p_k>s$Qe@niAR^Gu=<#hIBKngs+BymPHEOQWW)E-fp&lYPci4ew5ljKl(g8Wic~ zOTK~2ePLgxr@sT6c=k`d{~#8C(lDCBfQ^l9X8SL^066!DVu%AD_#6F8FHrLLZyq0v zPR!*qmv1yRywtg_Ie~>fW0L7V`L_St|2>m`=<4Au!gfx2+24F3W!!zGXIr1ItIk2E zzu9>d=vmCZ_@4Jtb3a+_k0?`(RS31=35zpYe-2O;5l?)VJDcUM6U?~$&wp$I>%gPn zU_gX0B8#vu29x((`_SXlQ!u6gBmNK)WNa*G?0#8TF#nI5qOPvKF_J7QA#w9y;b^YU zkDmN0a{T>7F!yvrKyWc&^qnAJ+)&dj37!;FQ} $X!S1cW<@ee-+B!K|L0Q-m8z>S? |Bd!^ z)bHwT6abJm64if`MX`U9MW(RJcaxL4|KU4eR8$&U?)UBiu**N}6Ua4i+5#{_<39|K z8*B|2k9F&v0khU(iz@(e)zLCv0{dv8VpwQ4$EAXT!VQ@tDk|!xoFhA{eDT5^7|4LO zruu)>lav%-t?dBrt^cSe%$GoXR3hr0a>F43VjrM7Q?XjPBDn^0A^;jW|G(^oKm8Hd z7WI}!u3@hPnVCyLvljTo0gSbr6|3(}(7^&2?gP5V^Z!1mv|m1G-_+Z?{=d(uR+5vG zs~y890`H4~p5D;BgXSIR$Qu+&r9XQHP%lQ};ZHsT0>j0H#ZuTL=yTYPnL0U@|5KI% z#sok@T$=r}#?R=vd3k}g@7=dB8Gb<4;2ASf`K9&(lbD&Q+?!(ydrM7OS^2?(2Vf`c zcd5;X`}unG?LV3yn#>hsG0E;&O}~Mo{J%f=fZ6h0wRh--V8X%t^#-@WO$Q(!W}CJH zygx{;!9p@J`45P57@EEEn1Jz|q)%-aH~kTi*ihaw2bzKZtu$j36R_+<0a^Y35_}dH z3#I&304xZT;Zx5O$%%b5A-#8XW8)E+oq-$-Y-KZS0NUy7Xl)J52EaTgr*$xOW@TmN z-P2|KXSz2D9zhaZ#rgHC{r}bp1H;M-115ZY{Qo|Of|BxWp>!bVdEKCzz#AoDltZ|- zwzQbq%HZqhSlWZg#-tcpzn@V}t7TxoB<3+Yk$tNU>>t2@F$RAA&BmVqkFuH@><(mn zrGNiNKSHC?559d`T3oFDA6>~8R3PBBf(022b_nPKbLtmXgB=ofvi zfAYVe1HL^3`&wfQi0wCCXyX62C$}H4{=*p<{ @ua|LStLDKw# zR}o^q1n&Xdl$L(8RX|||Mj~of3|F{MbS8illayY{@XEv9OjSbz?|TnmNP%b$;8m(1 z90Jq8^71kW3e}~|f*0rK{uDL;e4F6Ev_c#WX*AW<&C*FRffZyOycF&`mX=`htIp2F zg^!DCX0>498ey^V1#Ee+@NYmf;M-NMVw4L8`IZ_ku2Df|ritryVAT!82*715lzZW| zTr$KSN_KXP6XwPWhWc-Uk0UdT|69T{C5nwLckE3~O>4%pzzc!HyP+u@I+?r|UawFu z!c}|VMF*Xa9UUDxf`X8O+}vsYydV_aAZ-32#&B`%0RQ*D3> )AxATXfVPu-i|c;jIY#gu%|@sQMsu5-`L2L=;yT}#jRLi(J9;v*#Tz( zNPutlXHit?cQA29D2Bc{>-BJOSnc%R&@WMVOU5yhg%ho7XqZ-6xdnh0F9G%0!J!E> z^Wfe4E%4*xV=&>e0=Ir?X^jD7LvRxqz5Dw5`ezTO(7C@YnC}Y ?X`gs0+4>%cHiGyX!s2N@~0sormBiCQ^0a5 zbZQ4rD+2BeT1me*l0*Yeo3KAWc_M2x!bp^UffMjG7~})uOi_*hT8a1W+EDD;x7wEh z*b6sn96Z%J PnR=m3VQQ!vkrJ*sBKzYm1Jk~zgNtJ;C z+`$ci-XH#nmY{y^{0;Jz`xjii6BunAE(yj>8H~dJDj_5#J3s^b?9ZPYn$&%=IZI$N z1c;4_-5nmaa-b{*D~2zs9r)g#<>eWcfXl`Q*1*NWbb)~8P*1liA)`c+ji_L)L z g@e>$b*a>Rb02}=f_K8bK+=J$SVDeRcpR9%gteh6LF@cG? zv*vPW1i+W9jE^7nMiBuv%%;}vH~3d#wWtAZZf?+2+fZ98=5YvkdMLi1e Ms7jzN-g&tu4*t*yewy>3IXAo2I4}rDB13L;} z+tNrohhpbPS9f>W4udO!r;S!vc=ny2iRoF2YaP4855S92d0{#mTv;n_G|EJN55RDP z3Ezl+fX49s^w+#(34D;}d9ipnIK6zlJinc{M=A96^{Xtz1^bkndX<=D<$9mf2*p{o zP7-8l56{k$j?@crMVNp?-193kS`w@ouYf>>UIi(Y_vxl`s4ddzz`#Jg;=a!UWjDtH zK^coh9wf!G3SdjXb|#8bv5(^h4bgBW?YxGMa?WW`8!Pe(fhQ_aUgYDJ-igSa3Vu0{ z`xfE>(rFf)jW?68*qFC eF9>Dm zHBds>I Tqr#T>!0A4$UX%?7S0EDb?{c;$j*7_frF2?R-nK*z#9xi$TD5Uiqy*LgC>nVlo zorK?zxP3(bpwTf_( s 6xY zgN 8q=& z^YP>)#_3=cAf;zK8k2NfZUdT9K9UMEce^$4RL$75yu7^gU?L#7=DS)jPr>GUU0v`i zK%;uliUCWfAUC`9+#yUi5;yzZTov`9IY2|T7!&4_MEJ@Pn-8AXF9sr`8W4m>{o|tt z6TjZ~e0FI7h6X-*j~Krfd^3fXormX;(kaT+W)1GPi!n jnVg$dNtzP8VYk=RJ8)%zLJI z-i-(KWN$xl&HIz7Sfm&W3M^uG6$2`gMA~{foS(29qXzrpJ4uwQ0z6c+Uk6~aZ_k2h zTNVSp55vdeV(VzauXx%6EA!UEVb=@9wR1pt^OfzA>`eq7^{}OHvVqJA@FU+H7Lq&d zf*StJR9yWKS?Qt`c3h6-Yo?YC?Qtb5U_df@ {*phV6Ifsq9sdp`B7cIuqS;kkN?`{j|7vgoU_Rd7FkP|zrkI !qe~n3S4^QTLbd9qCUVa1VtNNB7f5}{yrd0{ zaF!IHg*gBh*T{?Wvle}KEMETJKrVJ5Lvni`1iuuqW?u(eBBOn}^w<1x04OkAb*@|w zTkddkGc_Y4(lVBu4<*FY%gbCm6pU`Z2icejh(9)~qGYOth9_66B)DBO0dQhBUzUht zywGtD_ywB6E!a-7#(=wnIs!50gbxV5OO`;Q07N6R)ux)#tK5i3V2-pu@xb>;09T85 zey9t|We_KX@zTk>ctLpDlX{FhEjtK;H*#|FNYh7V`QXEZ!SP7~ps9E7-hJsze`3_{ zzvj5!z=TYSi;XSM@gbs104b)nGh+*MQHkQ*-2;BXy3PJL0WUr(Fa_aDPz<-kOsc*^ zBEQH8>d2=1o9cVm2ly1QkOYL-M36{Dtq;2sLCO!*R~njlfkKGLDH8QU^+OqLdOB6I z>l+tX7|zki^!0BB7=QTYhljCd$a}sWJe^d`8OxQX9RZ-S7 --@ntTJqQCRL1#OklSUFq%Tx#d->V=Z8Fn5)>!0VX12R^KW@rvk_?ObsM^b^v zFk3+Rn6J?1xiE?WK4Fb6Ncv#D7WMN4D34JH*gSjotf;6+rXo)>k@;ks-q&m}k=`Cg zOH7Q$7yb-H*vjhgy@=Ocy>vk!kkf&jDAG*<=%u-AZ`djZ7xM2N$&eLTiCGa6LxfV~ zk7%gbGi&WCIlKf~X}oST1qenj$xW}45|<$0+6`zuv$V7%XUtLg3fE{$IYw1u@_cHh z!J*`-yP$)NVb%j&luTPKrh@RQ$u7|*X&n=Uz8BMf1~i_7Bqrw4&!0cFvG5$;yusX9 zmy|cm5We9jCq$nyuD8Lx<#mlEB_ayB?aQtm4Jm<&;f(Qeg?Bgq*&IqaAdXFqHjQNM z%F(jhv??{r=6cA+D6xO;iW?+?Lc5rmh&KpA2FgM#Wi~QXq=HYdhE6KLRih3)K0Y3V z7=dLV4Mg O&oTy8h=bub}{3?*7eHNfCe zKu3AP#Do^K@ZlMQ43KK!R+CP>7^+>ei|`Q;IE+}zyBh7$^PWg|TlmAQnudUHB&_@S zaPvKxs*`wt2d3As_6OZNVV;IKh|)`h`5n`SI=i|O(du`P6VN!C^V*n`dA7V?5|_>7 zMLDa{;Tm`~ia#`9%ZoCz^N?T_d?UxwT}z>s(9m!Ju3;cTpkqmg@0*o^&c!~wa)5b0 zHh1A!tNtAt0J5dv+LHQUn$bpvl<2jsF{Sl}AJEry(o;Ozd_kr!s ;UWT^Tkzym0N0yedqH{uvB7Nv- zw9>(S09-gvk*3gp?~v*SvcFsD_!KE`SVD;Qg6l>D^gVlxZt4!L`2Tz2K*WJ9rSqDT z+8(qyNxsB{P<{OhE@59$>cdv^xi~<`LNyikg c7iZ5b z7nLv^kZL%fOP@FGeYgk+5|*xW>gEXNb|sRPE3DLHq<>!D_7m=3Ktg>OOhOMWm4WH6wP>9Wjr)_ynIFT zfkc=6aUuPw{tYt+7h4EhssaH!{mBk04Cvudsdz%BztL zz^!#yY9R?m#tn(T1j%X8nh7jexSJF97V%>>sDHG7lIvRSdDkvzwN8rgq9dt6KVh^& z3J;fDPdSsccHs-Kvtwf-eesBWJ*SWe_Pn{L9fElu3X5uNH5byNhSQ8bO451;9pnen z-bX;y_Qj-K`~&25FV!z=)DtsBpsLfIpPZb0tO0};$DBxpeh4_ %bWUC>mcuw=Yx-&Loh|gaG%4;61)4_2AxIOST`3n$`q> z3G;LT_|)Q|Id-hvwT$4}H@Naehn0L)bnA+&m)R;ZAt8dz!U$aY;+@#6U%kr8%L4~% z6ONfYU9R_MfHt5PKdkcAcZVo 3lOuAn)k5~K0TMIg(!O`3b3(3=05RT zs|<~6DS@m)g+tYTlt##bipn#?wdkSbYfaZ}~&RNj>o&2TybVWa&Fhu)*d!^HIa z=}Vl{58_g2PSG|8RRN(XHJH^bA(8F CE6O!jwQqxd1x)0Am3vk%Vns@IcP z5$1n;11eZ*zD4(+LTS}OvwXCwd=w_y3DK1U!-kZkB;>g)9DsCL-J=x%I()nU+5M&yZTZEtUfQ0FB_T?&452?2c5*1yOXHtq|wLe4Uxo>6zO!kf|$~$ z6`0a0?|`XkTmkgdDXeiTOtm M5W({iwu3>*KS3TD?A+>C z4Oqcf%OPuE{odpkMm}l=7wRJrjIX&FY=aA{wPJ17ajyRv=Pe}g-I^|_@CCPd`S_F; z7lZns{F#~Qv9cWrYRx8yZ_TDBBzL7Ax}8zbw+J7r`P!R-QQHXfZ6`4})jt#iNIY&I zE(FrW1!7yvY%N+>*${J6<|l#fHGbzX 4+fXNvg_=%(f zupIzw?b>D-1zA&Ip)fHum6e00*QmHcLjiB?<;$12RKlUvuu=1)MZBTVMNr8~X{X{f zLt+U#v9Y$!=dp+3P{e)#uB}8FUj4ci13heET?~#X*#?p*AT=1~ZUG$)K3dbC$C3bs z1(@1V0OJS83FoOlLX>9E> E+;O|Zl;`slL4O;(51QSYSlqC z(! ?$>g9Wer-#?TXo<8U-9p9u)tl!2 n`-tuVp&hTkgFpjBLkgfYo{IYdd%sjoSu};f$Jrxv7r(1iiku+$mFlJ7zgXq ziaMEr91#dB!!NaZQ|!&*P`AS{Ca0rkTLIU>yK+3u(_k?Y6QSD?Bwa?~c+^;`K`$6W z4D #tJ`5pvgmTr^}FWNu_I9RyQ}% zkni?NbLqZ;2`8RM-GOB_JSR6{ qxHYoRIOZf;p zER2n5K>fSEfs{#2H2{!~X9;2Zs{(!JWsHdd$tjLAOiKwC=j5p*bWS+@Xf@a2@k?tP zHbE)gDsYc8^W9}561Ja)z>Wat?i-hiv=yNYy5mxd-V};~Nt;@Tz*pnuQxK$=y|J)> z9X`m5D{4;IbxMvufUETZwH5w98M~R#d!T%=M)Gj}=m%=5iItU4zP@NP{L!(h>ZGB2 z__Gwhkx`g5FwceO-$*gAa(Q(7F)Ot_>E7qN`78)gq}i@50|Lre(xzzmFUWToJs&!3 z KUjY0q2X|&w2LKhYsrl)b3$~(Bp#Gu)=OiOQ-uw?mvwz6h?3|e` zudXa=-2p(PmdxhZ+1U@+pUZ56#2Itjb>}UL8ajnZ%LjHjFuj1{I`iHB^p~<&O97 > z9=r#3XC8$+D%Y&**#oz<86<)jV*z{a;6MmQE9QbG1jK&{0yS72viMKK`4+eiMxT&} zk|aIS<`YeK3co(viSdB{oSK4WHylg3>x}Z8%mh7pt{0aJWkB6PtTWqyVH?4zgKvyZ ze;N_C;I>g-v0TRxm18|byEz9(h<)P+ijz2=ioxSl%6PO&(C2JI(&?RPs+E|QNfGd` zyZCrO-x6zz j+N^LdtYb_g4u##Vqr z1Mp-KN0=o{@f6WMa3@g0X~y2>1xU^Jp)lE4urDF9gr>XdYHC*GKVi_v)YPi}pJ+}6 z%wcF5s6|<&POAX_UYB?ye}^(5T}JsB^=S$BMww}Tyi$D5`UOf*O%3nvqnwqWKkFqU z7z(Nk>oG9t<$~Y6;BRSZfhpvxfdKT}3|A=$K8+OH7~A;LEO~+nA~tIH&Nh&VoRp-+ z F*$q38a|Qb9Np#mO1A4XA1Y2I$bZ1T zI|+DF&&vD9;+)xTG!euJJ}C?X*-kop&_wiS`pW|g!pa@c>-JqSu{}LK)pDOwcY|ya zUO MR#jjf { h;{p?)KpRMqJ{1K;{#OY1Cp2x})h^^0>Rv1I$rB`r zq0UF3o|^Wxq#ROK$VOjws5{O{^+07v{IrG-(r_gpSJjT39*qqqZ+rQBFIH{}beNA^ z!f~>X#LR3)-?tw8{&)ejQqdTaxR)qN;nn4Dc=17ux)*wG(&~;&nVXZtwS2!r7>g4A zTsp8`dsrZ(i9lR-X&es9yYnba$6x_*^7@1MV5DesKgP!+tod->V{&p1rL2`Dx|eZb z)6=UmVhXqx+J_SIK0>o3DYDLJIRgPmtgXV2OhZa@Gl?46i&g%>QIIy1m17~3TI_4b zRDnzd3+ `fCh@D-;XtdEGY EKD4s(7p{C}(&Lm=nx;56lAq_AGc5L2`66 XgD7^p8 Ien-s0 zevK;cu}Fr#X-2Q@`(_OO8eRsrKGa`HNQ7SuRV%JLa$xHC+SLEL@AvQQ_Eo}UOF?Z2 ze?0`+&`?`*?BtHDQ;+qBgUM$D)53*I8Q%nKy?{fKtU7GDSK9*+m>31!*B>nw>3n!o z0LU9@Bxw3B2_9{>!NL(R{{n0~*=bN|emk7XzVBP*Lx*^%6y?i5I=T7!YzBF!4lp2r zKDOc@LZY|y7+5zU{3{i-|I+_4F(c#B_r7-sFTFV`Vw;`ffyEZTOS#Sdp7fHc<6VIZ zwUi)X=?|iMrTX*bx0%XE@S`n4LUGjjK5##{xjH)f^T$XyDb16IE^{6l-w0wg5Gpw? z)NR#w4xqaR!e!wRxKu2V&nyOh;K+ku?D0@Jca&xi015%bT6(h4^=daNM7kJ1)oA9T zAxO2UwH4SV@B6!3!;hExsc!h8f5FTWz%I-CKRrpnCG~@rxt ppQv)Qs?UiR^1mmK S(X zgN4?)125N*D&xDJM>tO(fst#uPkn?xY({qXL~Kdk_h1ViP=~I#48+fRdw1NC>9rH) zhI5+de`@s*_{=X>j~3vcdimj`uDEmN3sE){sLFrQh0cY u2l6nWflAjJW?FBf{-9=ILtDE)iJsnBQV5 zecD0kcb2--z}zb7qv>Hcf8WdV`knv2-EI3_t>f>qUm}&7x9_2XK0U9m9wr)MP4Szu zORHYN-vWQYiY;esF&VX zNG0s+;(^4~$Fmq@Oq@Y=zjJ=gYo06 dgnEL74?-)qDh4AOrgNGC&FuegZ0wAcopESAwEe#|M*N*t*+VJGnoeBqcD zshObA9T6sWjRia3*OSe9A=`kYeG*OW3;zZWTkmNk=e?g4C 7>iyqCQ(0aULBbE2o&A 5|pOhPa^bPh?;jeW%Nii1rX#dJPtV|bRyNzE~1YSd33X@ zq|SPL%4!y~mD6MtThxSO_q`6{J=v*RIQ9%Zq>RwCKyKceIOqHulcUqd8oaM zwT`EfxGxF%a%h(k83~^Tq^#pfFgr0;IeKLDI2{@d6r~)>m}?giDA$dXzbYXg__Y`d z87Jeq3hGI;(L^y8IC3kC6bA)UTIC2(9HpL7pfqan8d+%@6GTkoAiJluJs~EhKaRNm zNdG)GhAAq`%hBTTnaMXd@~Q7XQ5ZK^Jzgw_%M3G;svl#&5_@CQn$>CQb~)Jc=~YHC z0m=}w9Nk4!NpL2nhoDp 3A!7*Yd9Zlb89jn(d=UpQo$ECylX5JR!bKjOBvGR{x >p6AF`g=p*SZ87(c_Qxl04ud?|y-dDd&F;)F7o^ zK7925G7EI+Ha)kTHtUW5yS0}dAyM4a1EPY5jz;ZgwT|cUcl9%qj<4iTR|xMMf6pT( zmOGrK8$b8cvyifzbgvhw#Wa(&|F}V{E`0VY^}fs=UO5Y~QE(7F7gRe*8Y^fE{^y^s zPii!^x8M;?zA7@tHMZ~Ie(HzO#o_qr5-+FYSK*aa-;BS`l8+`
P3$TJxKoE$KHDBIOw8 zpC~0AH{O-T?2d6;u@v_nNP3wcFw7ur(uxXv*!ry4t=$(Et+H-zX0==1&c^-THsfeF zjIUKw_L>;W#%jg6g Pue zfhs44&*XZ;d)S!KwAe%~Op5v@zwKtH8saFOV9ClhAVz!eSRT6pSdhPc2a}OUz=n1C z&_DG)V%am{Wib!s m1A{606o7Cu9 Ur0$^Tg}y7m^`ZuEc%DEevQ5sWerDfdgxQ@Sfu8h0FMN-^Q5hr`d%f(O6hf zHm=YcHHQG9RpUWBs_obAvpziwdb>;UZ=^i0tk>v$H0whgw^`9_UK_QXtrbH;ZM$x} zl&&Z$L~aW@?*?Y6{O#M<23}_Szjc%v+k|13Mh*_XO%J~H_?;tSvL6*uCT}(z{fx?^ zHUzGW(6$ZOXrvEh0$YToAKl24^kW$$D8HP1Al4I`FMh|&1h(06)KH h~AK{S2e`;$SXK3R~P6I>upPxglmek@F-1cDxIx`rx zA*eQ?Rr6 q@4Yi|Uz9VGniQ>zHQ+$4uEYCI z6d}k8ky}!p&!3*;wiz22vja~xj?M bR+qD64kOlUb_VW^4jGZ1e&uJeib_7^5toC>_|KY+K#{O$TORE4}w zOovwGSg&yBia~@g^v6=Wu+sHN8N7bU_7b=v2~TdP=PK=UrS(Qfd9#CpCO |e z6p8>5304XEeebWIY>yFfSY#yhfe~tkpRG31{>hv;UW;LCy-X^;hoTrM`7vOYDzGZN z6FZc0sPYaWrmwkM{TT_jNVZxV(Ut2$yo1mM9+jbs;C=d`eYc5Q+Vw=j@qUQ2S8s9< zlq<+WBNDMJJbu;g*^@Ena>~=m9S 7$JPB{d>-aFrGfVTl-!@zT`AT`=%F76^GooMxef#z-WT;H*=l1t%B|Kh zpe-*}iJ}wJuMQ#)Bdn5(h(3EpHmT@@cI8||LkG2dzbko-F5JXt+|Lf&XnfL9b^H?> z29|~f{dpMoN})zFP7m-Ei$8oqyG9mw8pll_pGyf)+F98(kbUH2_&OQTzCPC0GPce> zevZ}=u$Hwhl&)X>Icz`?!H3p{@gsKG9jt<9SSZ*0S9kpIC}`jrC$Vo%n%!UbH~T6x ze}~O`;ji&Ef<)-ezDT0$qOf6otZ{p(DMxZYdI6|9fVX%mfglve9A;YlJv#c8BOsy^ zXshmNeU7O06zY!t-rrWOc(3?qW;u l)r1v2^SA@(HQl>({UKUQ>Tw8UmNgxDiSw#A0b# z* >fXw$-jT9C;>4g62<3jTKf5*fFN~c8X zZr_M){1#oPj8S>wy?T9KB|(Hm>p2_Fd@&ul;>1n)xSv9~*i?{EQ6N?PpAd`HRbzC5 zFI$mN#qL7kYH8!rJWk{55h;0eu|81(+3>q<;YjtU!tvb$wsH btSpA z+w`qM{tLdn*wNJwHI=J|&HB4PTN9oONV?+ND|4E0cdhGwVP|ffezIzfe%PcBfA*bB zkH2nG=eI6d=8N;Lw;$|lKY6_KB-F@vitO1l^KrH=Hr0Lj)O69OZ&Ze@$ND0CZeH D-tvmGkH{-{@`U=`9rZFcIj%Dd)aJ~Ri@5{Jwh{&CKkx0UNL^adfv zd_$DJeE+Dg_^ QxVNV{O>lj)E{OR-+Un?TSiUYFPwpck}1$(4%Rd z_UBoTUDRUy#u^!EXDoW2M 4}b;kE(MvvWU9y1#%@>gHbFTl-5!vxJM9w z{}x7AYpi@dk7mztYr23|Bi@^hRFCl}!ioQ86g4}LGkfhj)vuVB0(1K2*tpJ_%o>)$ zLF5KdOGYU@+zSHs@f_dW1!=GCW3&LyoLe+yuLAcW)V~Egulw{qF0UEz6f&C;+0iVa zwRmU0IPHC_Wl#0hlQ8Py&VtCUDn^aOgHGV%0-9Vcrl3>=4x|=SH@`=5gs1J#XZIg# zL&Zkpr@bAl`&0+RJk?&0Un06(KcrfOe%nstrH=Hsi=?i{^wf