@6bE3`wQzqL~#G2-=Wp!*%3ara8Mc&Pv>j`w$ZEkT2SDLI8aYUSZ^1u)kHRifQ zpxps=>0=Q2z4AAu>!#iY(7gAIaDuJNrtPHDl#ox1Qt^Btc4P0O}I|fYf-O~86+ VvZqpngkX;H1Iii-j{Io3X_Vi|DNkZ`^UYk8^pI}dm1 zcqxf-##;CrSM!39Ypfl4J~<3fD&ws@l}hy=_#~DU#1x>$U-K%^>HKtd)2}2V2)7`m zCYZ2?Tlh$wXy7NOhAC^{zo}tlsEZ3%*%74Yvr4xU@2p9%!}X-~1HM!u7;;aN8ChHF z$%CPP-XCRY+flbI#qp*{&{6BBbV}x(`zs?{uw4SV);%O~$ULqF2ZzV2uh)pBv27VQ z ?Lct~jzg`z&azo>=vDVA`fY>O#{(ZW{6eshpV zUp^k6KUyAQa9qMgh!oF$f|O?%3H*>{0{TCzydqoz7fBK%lpbytvX@1LKIt(Cd4twM zvBH@j`ek _xWRDlWAukF`jRQ+G0YQY;+m2)k4iLc~Mu3ZX2Y1CBAA=$1GmZ7@Q{+w1LK zAS+w;^G=Wy?uz*K_G(oe(lWUk_wl#JyT;vrI|Vfe#=ii7!Y$8|!IPLvSX3AF$dZW3 z9;%jqzLOYiW>M4+VQ3$@_!tKGK$%Z{X(9?48p1}LPKqLwFt}>zQ~i@e;}XJ5k9nbA zE`GXOJSL`H!Gn21OwAB{T41^&;i-b>XK$~OMA>f<+l^K8wkLhLm6t0}6Bx I|AEW^687awC_QBXc(!^H6PIC5QJ8MNQNGROE#k z0KvX0C<{N9!2jYYaB2-U^kOO@CgDt5;@wpQuQrpWWAt?cPCCf{lTEADTxpP^gAGyo z#fae$MH&~ylh3N+uYYxZS8xD?Ws?W*RpJdPdI0O)bu_IM3|xdvuF?5@Eqd*YsYK(e z*`R!CV~{|h6UxDSYF{H05KwCSI99(>6U-}TRmS&z@gV;TU(dL4Dh3x&8}T1z1XH>_ z9vmIjm_f0~Qi_y|P3fmp@7%vMGnUT?@Mp}%#Az(+R}HffZ~h74m__FyKFk%ubzl7F zoTNS#Wg$8S`~WyVm?B4fC}8W%*lL4;q8`Fxwgxwdq%ZnAr1sXqoq~9w)jRUop7ox) z8{gT+tYM9C#UP|Wa*w+qn?5H_G#w~&)4iye0cm{0^CNwXxHM%h`rAG1WY^-vP&=VM z7c?852i%7O|38SK_tO=4DF8Lizl)QTs{u&kme5+-xAUHk5iuorfHXknjfm>0FA*Qz z^7SC8s1Ew}?na)UpnK0y Rh-I|PA1>!PKu!5*ixNrrPM&%t04|)T;gDV8V!ThZk z8+3sF~1VB)hn~o>H&|Z*-#`p8HoU?v@^FO!l?LWPKY8kp+!vIAx^rOU#>D$PI7tCS` z($-pz4}8bYPO9;w^8`Fsl}`@l4X^Knm6kbFLEA^(`;5F7y(PYc$zE;tN^NDL7iKx# zo=~o1FT} 12{mhU<5s z!`R^BPR{Tku8z!pAoPRT!>qZN6 kn_3>_WoDPm zY+A|jZ}_+ym@{TzLR|TXEFe>h)sJ(D&|_QuzOmt1wyH+^GohQ%2tB&c>QJAcgl9%I z6fhofU(W@UTCS1PVh#z60Ok)HI8$~O@<|=E_b%t*{RB-o-ZIn; 0d@{{_Xx}k$`A^Er!F|{zA0$5k)A&~@I-*P+e;{>$e z5@!Qsb `mcc1h7o zrD3+yqHpd%M!?vWj_P}}PWHf}vn}W(H9lNvr)|HZonyx_noem7`X&Zcc?ipVpSbva zTFoglG@N?1?~;K =W0;e-{89a}THN^T0M&6_nJS<+vZ~ zp4L*5A3JJ=I$rs }3^c{U0rTkD#xwYG lcUu}?LMl{U-kik2{Y4g)Rx2m?C4Uai6mo6{>jQ-U^`zS_ zBf7*@twbZcY~`!GPTtH4Vgoql n*P|VXje=KPFHxyw zPk#frlx6-3_3b|~NPJoCD?I0n)Qqq_j-C_$sCl;tb-mQ7ij`l;UH`_hc2>T@GFE9| z^4;#e*0Dv(Eb>FMNJ!CED?PGchHcB-*$C(UAB0hs&1U9?aH?POZy2D`a)q228xkUw zPzH7cLVS*88hU#n{eAZ)F@obSo&6*h%0@HR%&o3mebV)yDdPG#MKfPLHN&kNpDe^5 z@_r9cF;x^3{KCJJptj`@&qqOq(=EQ;2*cec-Ks$4S})&fG$c8kB1w7p)|#3hRegK! zNk;MQ-M%?mwf )f nN?6K-%ogfhNg?foR!p8EfKE7t z;;wb)saX!=W9#SO*iUdxlWlR2RaL}f`s3L9QzckJ-}mpM7uce8m6u2Jf(nX9(Xn&k z&Giq=B!A42Pq#!WF1LIvWzQfE*K4yg+L>=P1JuPO;g=PiONKazAz%N#n2(80_A2Mm zD&qjkx6(SFd7K7Cxd;faI3M%04KA$iV~G&=@q55^)@t$pA8o2ODm0ByxKwqy0^eqY zC^fjz8XK5Kl*Uv!q^CXTW65ZdMCrfPZ(34GVtzW@*~-!_ny+Y$ZPmIg$8~%0yWv%g z&=^DO`rT&-c2q@L{tzGrClMF@3^SUs39@2s@7q|gFwl^ml~MaX{2`gED1E(+Z^%Eb zG3SO`#_QcWIJJ%f2oEKKPBu_>|Ms-k+b(+!dCjAcc}rdx{gu_zHvN+c!4+0oc!*&@ zj`(SMcwFZLC4;lmE<1- $R}sgXj*2 zvJRpFkpT}qkr?pq19?pJTcp$|P_oOcjT(^8E+v!Zj8^`}kPy0s>bybr%a@~TU+ZcQ z|9Jm+6BAx__6z@KeEc`{99z@yc#de8!)+!d3IMIutkXRqq_HL!
jwF79j{(`GjMwme|@M8DSur3~@fQ z@DX!xg*~kX=cmmv(w54lE2;5>;OFVZTUcCK0WnS$b&u;IY>bF4;my S)rNNCClzD65NO0ayDdNPMEI#7$;kS*BzhY)4S3}LEuvJ(dm+y5Jba%YA0 zj&I$YUq9rf`s+J(2_XFj=#%v8h?6_v;cQvTh`GR@^*R{>9pSK7^p{ClX2fx&&0#+* zEMS?o_qxvP`g?7zZsA`yll3N8uK%|UEEp1jX!-s0d%}s%`>yz6ZEiL}dcpb~vOVyo zyj72?4O;T{WZ{8SfqP)pE0x*5@@_Y1MHWfBxdz2lCg~1PC9&GUq0#7N^bMPg1 SRha=>ic^Hv4`Qd&}^ z@7i_U{oxNF2Mh~1IE7>2yGM$Hl~nnA^<))pfO6mpMoxNgco0drln6O?Fu8oK7Y+q< z?M%d)wHc(ItSBZbz9agWg(`Vy6Ry<}pV#-|&4$V!O(Oeh@Indg#B8CcadHJ|u@96u zqs>|VfD)|%ZdF|nBordlMI+LBGSi!xk{~tx@#LUusQ}2y`@Qawu$?s_jT=&dZBX%N z@*-F1b38-Vo&(u1FpHBS(rZ78WC1}Y#|T1hMfet8?>Dw)%uq&=gafmfCuxW$mq0%L zC!%YjEl4l|15xtD!qG_se-)J+pnqW=oOGF`$B=d1%vdxfgPkg(9Ya})fIcyGATUuf zhdB=kj1RU=YhEn%M#e_1My$boO+qe za&YEn4X7fnNIT^1vI5M=QNpyj*Ip}kGU0ynb3gcI3MjBndhlpvV^Ao W%7mnHO{J4n(LzQX5rIAX-_ra)j$K k70e1d8}?hHl}T(Z zR)c04lEO0!gR_yTRbE9oyiAQOmSL=oWSLjCq-e;zuBBt3qC6e?KrGNPU5j7Dd4$G- zNye}5 `3rnUWxH^3# r*^Uph{3EJ<7K#cLmophSw#KxD6~=8D1Y zaUK<4C 1#}e1C8G+iF=A89z9Cs}7D|LS|aLVQR|ah=0hDQKdx!2n;RC|G)``V`lAF ze&|GyK>hwn`XxTwI4IKv!=+fjXj)kEP3#fXod~=WJQjPqHJ-9^BZhtHOe5Lk>x-uv z+gcY>X;ey`k2R&f={XP#_d$4d_h;269%&B{Df+UhYN0AWe+~ Eo1A4qKIsY>VLnH-ZhcX{ZpS&muP=a#xEavUz#@A*-~385gpVu#l9`g|8&GG#9m z(6TL9MKBwaM8SdVqM}v`?`a|2DNP{Uv& |)qs)z4}8>*>kt zk&{GMgeT+B3c&9 H#+$w@i`!JtY9lemq;MC<9zA6ily-$MUJoU#w(zTlMIq z$WzzL>63MB2eY?(GR>b@mHX_5$^I#jBnAUZUl;+i0IYA!9ooH$d+6hnA6dEF*loyx zY1uN9rb1X`i-brW)vD$3?W^qjF|y3WaIGhsMV^-`N;1qdgr4v~+w%D9uF)3=LaYK< za=6}gCtCJjaBGIgv{?O-NgYl;>3-AzS_Al2F2Z@{`TBfSm0ji;9pzAnB<|>{k$qw5 zHa9?oWzBbi4-@?wKPmj)nJ8+5$A5uGyLAX6?l@YcUBZq>`ym7U|Baico24QkC4}n5 zY&5j(2s~1!C%}Q@My~bfMBZf3vNUE#G_h;lCfBnrnI;%F%Nu~rRGTj} f^d?xr(PRVZmI}0ppE{ z2%85fr5O*Bg_c( m~C;*Vf2r=_Fc}$zj z*hPyFg&!CFO9av8+cCgt 377=japnM>B$oaIgAH=@YGgISc={B4@}j+B_akc=c=WO%RL zw^Rj_Jx8uxUKQ@v#Sm=iMtx4EH%|R8%mtHfXRMPs2515G!>-b$EWHmoI~z`N0N5eG zkvroCsHoHP$G(Tc-#6RV1t|bDF+NZTTw&9!6ayj!R-_>oZt>l>0?@R_As%&h8o3mk zn^?c5x%_P I8 k~>B$ESrc3jCoi5 zp`Q_mq`{SY68U}UuiKWuZ(Rcaf4hKOoPQ3K`^9cbAwDZ<>qA{$Z>R8Ev*fr2!MFGv zyyZ=zf$61Y$riQ_UXP3wx9Yy!_vONxLR3zQzJPh@zlR^wSE3f%9;q0m3V94Mxt&dQ zS~&`Xtmg}R7R2qC<>)&;l2SVp>$|n73blfC6I0Zd6hf^ND}UFyQI+uj6Q9w}+(?jC zo*V?73uC#l_E7MFS26vtdDzg0@s%J6Hon{|h)$~z6<+5{qYC;7WtRGS|K#vXC&>BL zkY3;IogFq-X4;(1)||_^k^1}PGmG6X2Zm3cb_xNWrZ>jzuwH~3FR4@FhV0SFBXRW& zQM+La{iZ$VM{6Eagx; %NHw%RbkTnQxtD7Bu#0iMRrkNEubX-v^wr;2ty)55uC+~dZxVs z*vQ~Vz)8ip&BvEh$S`F}A~|yysirMnv ^0!T z!Ja*(3%w*To5BvbimJ=X!s8PpGoh)X$M{4l)U-NnzZ6E(KJ`aTH0S-fdkKuen#Igm zw-VWz&;lqT6Mac)CH(w9#ivrXNg>5oJ3&pbesV#y1)wHw`p4Q<2;-1gSLCaYO{V>p zzy;qi;9p>2`Ll4TSwgzdu1QsM<)m3BJh 9--#V@dkt7kAQbdj^QM1S>0U23S zE&kRVEgHZpnbnFhBLDZcZOY+cW35 Y#8kK>LKEY6ofR473l2-lpPoGkp<7ge9lcOY(iKO#R4#}Z6%xb z3^vwEU(;ZaZBXrerDsDXc9Isw)xXT OWHfTjK%tG;V5C9R#d^Ox_vi?TSw8h0Mfj z$?Tne+N+&Mjyw5DXIOQFl_xRm4gcZiH|0HR+bAx{#F;~;gm<_*s!LYiuCJ%}|7tOJ zq)dvkT=#<6dA+_KPZ<&)7*l|pxK7rTspaINl> >W>%_9i3hb$wB3 emQy8Z;kGJj+R=0WUy0_+&!ISK#a``h9@QKhu;wn|U zl!x)@bt4(1E4H?4l`yq<5hLudI13L`WW;)M=jz$^jMWzR`_W9S+5>+Wx!3=!czvX8 zZ&njSh}0PWA7AePU0Klli=G%0+qTV#GqG)RVrw$7ZD)dsZF^$dwkGx@^Uj(7_q}`H zU3a}+>zC@?s_LEHz58@k*Is@SV&m=bP8Uz&d`S+b04TIuP?GxDqy?La`ey{TCP>kJ z3U08}eA^~c`uFCx4Q5M#G$-*7{(`YOa02GY8!}i+_LL*CBc6u2ptXT`4t37PJPRK| zRUvC`%SJY{m^7Qh_pnNmoD!hQm``_gk`I} uUx|BM?`-op| zP|%NUyWy6`T_RcV6!#R}VcG+m)PBW)g7Qf}YtWq7kJf8UY6(#RHVk7R)P&TN6edWK zN|S2oA_V_PzWx??WB@qfAc)iBLKk9DiL_wtw6V^l+eXa-B90HJ_GWapHmazSh7ZEk z%1Bg4-Cw65uCB3zGm3QBUMs7+GF|%tfHr`hsHZSo=;AOd_oN+7Ir7YiKhRp7ub{$U zU*qf8Pi*cSn1 ^&_YeVS=K@$7>y;~7YL;R@ zgIA&5iNyQZ1Q8yb)(ymPn9a(s0~~>Cx%?3xbX3?rC-`-dj*f4*;HQPW!At(19y;_} z%=0aRzo(|r-!3l*N{dHisJSVldA@*)$W4&Uwn!8c^N_G0|MEAi%5}mYAVbBa6Ir|S ze)TxYv$$YfB{83GW2SR&qo8<7vWv0r-gpwJ$SIE+Q|jy}&+LfaA?dszF}&-#41yGZ zL$gy!2rmd=Z$W>Il$^B7uED3(=jB!gYegoFiAtpezE=b>N*$XCp@52{+Hi@Ibv7$6 z**U^{vjq!^Mu6};mcRy23GQB<7h`Tr5N!GcjnsK_@=jy!z+90%E4`+OaY)cIHI??@ z6#|$V+`ipy=tTVLmDU-VKpB!{xxQ(g>!HEJsa-QkX(U#-pI&Wa XdwN`p#=WLx%7=O;OBeORj zl?njbe_@oNm=HikhA2n$ilW)j?2TtdKss7-Q6=R vqXxw}Jrxpa`rS9NdA D1e{_06P2uV1B&- zFrbqWP{x15|K|dj_ a&d68|8E>b#T=Z?N#xCeEs==0 znOQpklfVn@tnDp;5fm4@|7jRh5Ev-T{wJNl%-I~24+ mtDI}0$2x9 U5I+zPP(MI&9|8fAr45K%ApR@&fBOTf1Iq6Q0@N-@<`y6Z zfEWh?SRV`?NI|^++b>W$s6MD4puUy=2cUcN^FL{zygVS%fdKUrbPb{)9-#h$ ZvcSsS0GOkH#1jbU>X6?HIO+Q3mX?B3o9clry2_n9}5Q`Cz}p1 z?~k4NzcRomfb4%C1Hf_f|BeSx=D#pyZR_F+jJYrZ1CSEfnH$@Ka!eiUn2a4AZOxgi z)!gjOK~EdLy|JA+D9_!&+SHuU&fLy{(ap^o^t^Kb1p)~M2FhmV`NG4(%_GXlCMG7q z$idFR&B)8mCCbRf!79eWD=Nyu!^#RQrdsCe0P3jh|6cchvDE-Ekq7c{A)&EWvU0FD zC($r>cCmJ_Ct>Ab;$~tap%HbnwlyPRW0PWK c-uptS$xTS+7vIIZV@O~u2MqE(lr3SU|?YtrA?=HkR;%Ts-Bmn*HT#8PYYY!KEC zq)H`^qFxR$uW6ugtRfn!fIEA+x!BLnK0%1sqHCJ}5oaJY_Gv>R5?;9;#=g!1$!VEq zWTMnrXctvXMR%>EC*$Vs*^J&;MlIZdZfKchtl*4xoo#F0F0C491ye(DSg44*ACJ<3 zH1hWdK3bdW*)MfWT%WnSsaFXJXdPW9*NTc67zDH|uyi~{n1|l!qB5Z`;0k1jO?t~o zh0F{02-Rp_m{|SUSLb3uS)4QZ6fU$shM)( zHM0&t zD?3On^UN*+PLfp{Qgq-t&TLv{ziuIWQGu&-L7-0vS9(QbYPOMimqGYEV- zDjeRV p7+~S<@bfiD79@eq>rf0Cy0Z6C`d4=>lHz4k5 z?(!j!TQ;4?5V3dP+j{>Uv_(iEhwT?v!BgLzo3)_r)H>HX{CeW>-4-ubW}^uX&j5K; z@0^446BZ}37MIh)an0!8iX`W&RXjQSm~Ni2Pc3FQJ)d!|60MpvEL#m0z$d#0B;(p* z)(687MT$6F^rf%g!mg~FMW#yyJJ^4}WGq4jg42DfGz*uTp5z;M59pG`$pJueh9@Zo z=UdJ3n(~ZS?(e;yljE~$0dg^LOF~I@fXD8E#?4A0fufG_gN)DZ9BoAP2i6^F!?qmf zjLiX=iHd-muvZBoxCNVW(Oa@oaNkw}G C0@j#kiG?=k@Nt~u= k%3QKR6K_A@ l9xsc@%-s>Ip;6wq+ayg$}n>a62?1}Qbx3eJa7*M-@1p)Mu;z=D3My| z5M81_h(bE0aBrlXy}Au{dBUbn#Zx*KEocQlV`&VgH71EZxNYB@O`aymYs{NGc<^*D zOD!kbsNl8ms& Y^8$P{G9=? z1ID9PHWN(K78Az-Ugqd%E-9;Ai|^rA<($#Ho}cmZK<@>Gp6X&pm`5?QK}jqi)4~44 z=Vr0^vyKl lbnt!hW0Qk@RGsij?Qam7|9P`<%hbDMp)@DfRCQw# 2Yuio6?fBx+9tDny+W30fD9#PQjZEQ3EPY?Ukl+sl_GKX QHvaYZ>$1l)R9N2pq?|Y{V`+|mqoFZnWLAO}Sw y9xv~i15Ef_(lqN4sn8fr%yBT_vl zQy9lO45V_wFOL&)!YrQeWnL2_x$9JGx=sv;EWUza3 z5ucBHt*Uby{o6wHl&5)Zjvz35pC4Tpb4UDneG`#@D#mU)DiZO0bf`>9(ew;>16i|) zhz?gw!Y)F%T}qPZYx@B;HZeQQ_yjZ-agn@kB9fPi)l>gGuFD{9GMj|vG8Y##o&n_a zG~*Tlh&>_LR4i?8&kI++$0Z5Vl&=ANul;HItHY}A2jhxr#?A`CB_AZ%hXd`2Rc-$F zXBFLTnSJRK+u(n+I@R9tV|_HRqFp@6gwNT{)%&F$MUr CQ z-1V|fevqQ?&9Wm}WrMLTlp!>dqQX*;`Uf* U>D!?qDe0J+`GxFp^XEU z{zMe$LJTDPv#ZuiEsJ+tPllAyPVO9__nOK&+%KDr Pa5 FgDC{! zl%cD~v>fk )oX7}V>7N(x^ee-@Uubl|sRx%!Tn>K(<#Eow? zfv4dz^}d&@AEf{nS4Q7IX3pr0#@4=`#kR^3db$+$lFRqGrObg#hRx2$ppLprz03H~ zppZR?wvh}A*+(}H?m2B6vhJQxjV<1ygs<=LCgYW>54ZbdGgBMm9j{y6jIwKl7eWD2 z0)kE!TW~ f5%r v><*SP(NJFS~JCjPs+miVq+d@g*&JB#JrsXh~5ij`2l=4*0uY8Z4bh&;YZ4 zdUrsF3T>Z(CzhnZV0C}jK3c~rja`OUng(aB3p4qJWh9`4TK#I|mDAz+{lgdAoU83( z-fX^v(01H`nL7x@jcPKLBM#M5xk7M2OtWFUhR8E2MDhoY)wVPg7PmA1?c0~{`SdUY zUur*V-=MxbDIqF~Jw%7QvzQRdf=hDN<4AwCKbU~8)7(@=u?hC3!%#x!>^N{t#F{t$ z1xUaF0Qj7ks(pDK6$eKvx__2d{djFDibhSu5#9m4C|xzY38VsmPdf7#sa7)w+)(IG zCl__UgK^>l3c}8|TuO~65}Rm3D#)|GjA2o>2G=4b?H^8D*8Kc5au*4Y4_}2WWI&i? z;WCL|?M$E$hk!(t_;usFgvsM*YDk<}E9DL=*yIAE;gsjFw~#7hoZ9D198PvGlPb{2 zkgp w*f$%RY`8B;?ZOKLKF^}-{XPe97)ZRo z9*hfQ@7;QFLl%Vi5L%zjYr Lfy)6{LrJ7@&wM4G^3Y^0XMnljREG%~$}CTCHM`-j~dd?d*Vwr+-Ab(nWo# zl zPs&TV&El(*64BU^_jmWIID8;0FOPqpf}rxSIL z`n3b253WS?wHCgbQcx*T3Y%@P_?vldp o81hpGveqdAk~ zS(*Lrp}pxwgc^jD*=dhj%EMbGv JvjZ}#? zAa_D=2v!C9V_OO%8;U-Tsk}1Z_dc64J~^~^Z&eky{`&r^V&jdn@%b;~*Xs&H?)k&} z`V N2wm^z;B#P0ZYX90yfH@DgA>qx`AV(R_vW80gjZI_eVhBs^Y}6~C&d7y! z*X+lSx|uMUl=5(1;6wvFwLoJbf(c8jbe {eZ(}y-h+_HW7C^}j|JJ(EU%a^c+2pnoUVT2p--!C;X z{XV=GIqz`{XD?)QLjYDe0?-;GnUh95K@+Orr=wmsH|}sXa2Ix&C(FPwn9%PtjKFvF zk>eu58 HfZX(I67r5_G_hguHOioo#^|%%MF^AV9HTAEgPzdt-&6Y zOHVAnH=Z84%csavdY)14%Hd%@%jE|f6-Z&ozyn0UTQ>`mZ;8rn6p0EdwQXgZeGexU z b(^Z2QFZ}z_sA-s4o`D8TAX}=t^>} zHCkQE%}1S`-d&RM-l36b=zIABg-X-Bg={!^h!R?iBXw5p!2`kH6k8#i& CvRl`rX+_VC#icUOFSHyU(+7$L$1YJr?EQ1=e zGFJ(Mk(G!}ezB`--&e`fL2S7 MA=&4{f0#mP+wuq&R}rBHf?_{bL3AKrK`;q@w|U+>nw8%P=05 zG0t~SXi!C?hqi$S?-M5sZnwuwYlqtHbFvcBnzGGdK_~FbG7L#YF-2D#gspwxThIs8 zIC58uX{@~Ahn9;!hs^$EC(UW;j;SV?Rg&viFmRY^t}lv`RkoQBuY%!6oaL!-4neU- zv1#V?wMg2+Za~>qrhWz3$~FE>%>4!ay68m*zE%K`F?vBeY1yneorwQQ6~C|5!q3~+ zD8(@!xcD7R2YBu*9UfI86b+?UwlT9KzI2ntA}^mO9Y%}T3SKg+=x?vk<@jugBm|Q0 zMaM{M6~vfwabC*drx61pzGV%#Bzvb9#B}{K}jv1s!29DS)*7hTk^#)l)Tm z-zxDJL;62dz#Ss+VW1|uN^YMHav~7LKb*rc RRp3^ zZL)PIj?2Q}K75+JOyp_{m1Dn58{UVAW=a7&AW`Y0SmB{XjN-LuSlJ*Ym~+2f2QEki zXW0>oWH7MnJeX^fQ!+jL`u518x|1l#+SB&Pm%V%9B6cjt^0Pij9`21zHM{LVyYbN* zM;O&he6r%(eiHZ>vN2H}Rd-Du4msNK;9=$4L1&Se*e=dFiw`bQ)Z)Ibfgo+tOamMo zqa$R&CQLSP0tvaeu(e(2oL*M5U-00XmpyNOS8ymnQGT4=URiAVLaFCh%lB-h*rHz6 z3?DrMlH;F6dO=oea#HBH{e5EoKyzJu7HJP13_i%J1F!sXkuQv2p&s^6+B$2%G%W!F zGDH?1M1aA3c6(Kd5}WJ*IO@zWgGb*m?IPjVH8U<&891HB=mjuJD}CpQ^1jnQOxs0V z^WgpAChzomTrhmJFljDqmC>lXx6>n2(phs$b(Rb`UL*#YFKOq)NUQt}r*&g;`-`m6Z3Y+gwS0gzQ~$>C5F(QLhgBt1k#DA{ z6`Am@d6IRf>Tdm%xi5Zs?cjIJ1bwZMY+05|bF>C9=%$u^G0WVo&voUx3(FW08T-Mx zF$m_Nk6ixZFb>0ad)>J*&o{yVoAHlFqd_>zzaKvF>E@$re)IM(y+GZj7DmxE6&_q* z7-m`o5~1v|!h?C$l$>K-Mh=u8d+)tH^mh2beEqS-bzL_BG`p8Z@HVG9o@SCN$z8(g zBxWgrQY??6@{)&)3KNDqfz}Yb#8IleU~nH!l@Y_1T3B$@ZU g?vLMRx)-*FnOW%EqU_s=x(o-w9WbiL^t}!uO@Rm5l#U1Tpl7i z1N1lTa@^<~OQ)Qanv}_EO8=AEJa8i`B;x9ThR9;K ?69a4;&Fc33WUUrt2vvpJsm_|^yt;n`4^`yYI6)<1UB1_BS8 z{@%uG^#1nvP04%;?C{r|<&Co&nZ65&5bnO|wlq$wb6zR1s%&2&j;T)Yd+a8U Z6YTB=%FPX6PpYLa4 zD-I-z{ncaw&LaF-Yt&86dI1lPbysvOkm-4 EVX)Xu>+u6)z54+_?f1!+jZ n| zl%?n2gM4TjhcvCb`T;aZz?rVHvh@?HOb{u_7lzrNVG7VUd!Jh!tgI_1+o8L>`0q5# z%HMK^m-(N34DTqNp|1mYq5C5yP^sKohooFcVxZqx7p(b6wzdVieU~JHU}RIKXMOJF z7$i75nehPuPz!n~JSB(~2jKH52Hz6FykFEApKwiWr|DHC!E}J8IBb6tcOo%6;TQee z4#EMj2;I?Tf2$40-+UbYxDUovjCA$_DuK6B0i*I-oB}GkP^47Kgo7jk#p_fec6O^_ zyx7Bq sn(PABS-lSjqo2@O)c}R+vNRvFaLSphnF#8KZ*-S)0S|IG zBbzb#8bjbtf@=0?Me*N#9e-U+w3Hoi`r*Oar-(%^n4{`~BX~Gc{0BFE@lp;)tfu{d zqw9pJ_Ly2c`{oMak<1y`z!gIseI<`+@+g>u!CA-3!|l0{34-TQGpfk^h%I%><^~!F z;8|dxHYHp*JT#v)Qidb@D~)Y@+W;2 s6`}4=Q``A!DuY6yT7Z8fb8lGS6whG zV07@k4&zndt!Iq|oyrtyOgdc9npMEVX)jE&3}L*i+*kL>LfL4iH@m~j#A8FiU} znH$rP8e{c?%Te=(1s`cT1|7IyqOct<##7<)-QBOoc455vcvZXm{yg{rp?#cXkL^lF z@40gPj;;Riz#WivU=_jvJETG(Dt!5C6z5vZeRDScu`-^!7G~rU`dgN)drv%9$Y&k6 zm||$9KqESJW^dQl&wno-ZbmNtl*i{S9#Z*WOdu+wVIWl49=CpDASNYx<5tvmRCeGz zdePq}<;kv>DXNXdC$;=0Ffz~>``uA>pr4LodKgUB^Fd|h nL!Akbs`r(m4qe%)nr__+C0a+F`lF z;9VlSlCfpS6_mvrC7&6c!r$W+fc>F7rZ)%W?qd=X4!PG<}Y$m5erTw4L!jh00(Wm*io4w zZ)VZb->2uMwm9pu9bi&|>PtGw%X$0dN1??NJO#m!8K$`r4QD<+)65RSPMSW~AHMdi zsl;3u -(I4H@Q9Mqoo{p{>1f@FbDL09DDsKwr6=e>dl&=rj9mO zbL89Hc;UimUXTQa_G9H`mi+VfV9BK+oz@0hSw%%Q#{s_1qcS4Ld-LD2^A)haKK(y* z+n>4K;P6vP+PoFK4&&s#Ubd&bc?^&Y8x_g4z*5-+K#QR=1{t6+61fPAT&V~i9NqE~ zTQsxG8GqotEo?b)Q2CkVlDxU5RGqC$#T(oX9G%eTEUk%MrMhkn&g{tg+~SCel>|!7 z_3>vBOtrwut{>@!(qr+*-c2sA;_4h~=adJQ&g? rfaI zdwIabfesnmbZ`{F`5jy07WwUD_OMPzzn-a03Ac|A+;@-A@fo{rg` vHAKoVoz1+cn*22^%l`S (uH+b23-{144%y1U61@A@+R8I`ay4;qX~W zhk)BfEVK6(A%2CZ_Y`owRtB`Yg&pcs&J!;sLA&`8z{mRwOEUFZBk`#YMIZjXQ#!lW z8LgaO57IV)G&uPuq73Fw5vfk|%A8A{2047_gJ9M+%vdM2MyE(8-Cb~!w)82}II1Qk z8zLPtEQRXBQibyn-cFfsTk>$jn(u!#hOv^G0uEhidYDiG+AHWJMkoTZiz=GcgbfU{ zx57ti!9Ij!A?_?>0<9FeNU2jIQ^8*RVyi6~VEXyyWp_XdYzi83QWOf2@Xdz&Y`zur zZ`3fn=GnZxPyw2azk>rU>ZM|9%ad4TTrs_ntSM0g*i~Z;%GQ{u>%Yk_XnHp( vsXIAKhF z$w3xUpe{=l)2`P%`K3he9k&CG(i6>fP{$j (5SU#CgBX!vho2f z(}wU!Lq#~-HWaXSE<_lM8wQh9(g9Cra?e;%WHvkclrkycFrSns0x>5MV?yTb;pN#a zNg*(kLlG^anwA`L+`+;2EmqBzZt7*nperO6x8g&; +$Wopg*$nsR z_|AF$^*oMSe|)(3W(Gimvh{tuEK<+JBks+1qd=uW(mSvJx~`kY3soar;U^C#mJ^6k z$PD#>ws!s;+Y_hbev pT`zzbbKI7K6Y zou>WfwIB#D1!WXMidS^0tj65!@UgwGE4E-ry~Nl^-%Vj0hrdrGkD@A(Q#tQ7a-4QY z(WUw4vKloBZO(-WfZKe4D@c|ir}0^5jrXtVS}^Pm7-Os-+VT(k4N)Rd>4smC8}~)N zzq5Dfnxdo2^2v2mN(6Wu9mi{3UZJ!14NxHgkP9%N4SjJOa#V!=yxIjbDwLQmH!AE7 zmZfo&r<2z7U$CtcF32ftA}b#B8fw<_xuo`iRC9Vi5q^?$c5J6>K+Zx~;h@;C8FH*j z!A~!#H+!`IxTp6#lS<=<=%;*!#92!mSI{f@)-tc&xoI&kuYn;q%2YTxBjq-3W*eNt zM}EkOZoMc%7e9shw?ebqBCRvsrPWTmGSSnS-=Yc}oTY5*p&+xkS|9O*w9#$+OC)6Z zS%}H&SXaeBL3hRqFL-`5UTMF(071oQQOLBti9FgL#%64&nq1IPB^IFRv@1V6cpw@} zyeRkhO1k5w{b547-P+gt+%SNO>!!&2C)zw%9(Z{ic~wFbR4sTEgYVL=3)u3v4SYO= zy-HD4B~PQ4BflREg&n oKX2|N3lBz2z|rc2 zt5)}kvb)fvNtzql_k|i!04|%OS*djx;SD9e{PIJj{CKxC|B(y`5Z0h*Voe|orwgiG z+5Q|>x`Ademg8RN<{=wh17! zf&!})c-RHy9EJHQuqabwx1mC=sle*R$9F_V2{mWA&P93?or217yjjP+WPNC~;6juP z>Mw|Dv!!XpPGBM|Ql0w(^9jN5GN;b$nk5s+b=ial
cwWOiH9#YrOkC2;Zv3lNtYLHSB4eC0m;J_Qo0!{){AgcQOiLEZe3|MbN4FurG1T+ zu@vJ3B#1z(YaWbzS1c6*(EzmgUJ?AC-#nzylr%P_V{ovRYK{-0L>H#$=Z>2*Wps=< zH}2jHgou}3EA^7Uhs_;B@GsK3;cpPCBuGV#Q9%cCqAQySq+#@}!hPLLY)l`520L$C zTS^h3bu1DslLS^2x2eUg{s)y$2hCmaBfisLMDN~7kdr60I!{t)y!CX@6Qm&!74 zPm}BJN^>W1T|v|Bx}i&n^RpwyxdwUStTZFVPzgY70}sHDJ{3`Sz8|r0gi@B=;ZPwy zRU;#-cAjm?N)`P+91+*?kxtJYJ(4ri*!4kYT>S$OrV0-TF~%x|sVRf|5b%0~o>i-6 zq?(i^Ev zaV}z5~0=kW}Kn1fHn+ ;Kfq}`O&;v!Pr-Qowqm5P zDo!cGMsVo5Q=r+*%7aRjBad2NAhR_C+X-MUpmB$SW_+}f=>MSpnkQOM1EG`rtO|pT zN&KsywNe4-mQ~+~sbSga1#LXOPZ0)j9BazuGL4$je{8^@fjbJV(S;Q8^WF*El2o zV)N|$>+7`3`uM8kS}Zn(T3=RH5R%qF%L*w#jRJkSsCNf6Qy~Gjr_gLY<%aBzGF<_m zc)C(F2=F(5WIqo E*cjpGV0~M7Bx?a z4~nVx?n{sz25;!FPh(z~vEZ`2C8>KP+G-3@7geCu<>86NqTwc{IA?k6UX+Et8Dbf! zNx28WC4>$U^{r~?sU>=MX`8Iw&W~%!v>t|s0Klwsf~kPU;6RnHnoJ0M0U9a}6 >lD0dTK{SF&pDj>&Xt_-OKGBQ4%zNM zM)q;|IVVTfn9a|~c64!LG=7^wxcE0}n!}41ld8TM+e-2HEx!1L#Q6Rl&M(Su%ej&n z%F39xoySy57t{#+>-*EMM8RJtOW{yGHvVpLbj~H0a}5WYDyu#7=ZI-T@?84Qs$BUu zV#)3iod=L(l(N!LI8+H+Nl8nlL@&{!S?#o PT zC7Mo>=R~JX=i%=h5k_v-;zA)qW$lj)5Dh1X!zHjxm>aKGP+V1KTa;RJh*8FJ;|dwA zTI%0RyqmeDX0wghY 6jjP_*y`NHL Pp`)3*y9p$z3}WD*j4Td| zx(N?~)KkzF9X2xs4|(l4cwMI;GvxzhCgPSUzS$+j6N$v)8GocWSP7z2AzRMic7W zonh7MrjcXDG>tP8YGGE#F7vr$#MfysNj_{pp>MntMXi*S)Qx4##_b>g-q6ZxXLL-7 zASZZ)Fzu*SQ&|GoE%CD xW0YK$i zc!RvTY_->fO`Z&4Ft^QP=`-BdMCmlaK;0i6cDo_^qSo>f?(?fM=--BNxx?QBD{D{o zYSou$<3fsZ)p=OSvhA|2ve;Z%RbVUfljK<~H~AT=qH+^1FTL#-&75CfHGCV{hH!T0 zN^ZRyiy^}lmtQ`996e~&CdPy0E~|8AgA)y8&kJT+Beilx?IE+clAR~;XY`qWemps* znYf4LlAnhp$JqURM&Yk)Z(5jh3a97_1Auo4LUiSw@<|WDOkf-U3uVp64Oeh^UyM`q zNJ5)vW}Tk_V40{6{6%98h-7Q4;XBuT%h$k_PzjA|WumpvU#p>e+{J^%g0!6p^boUO zSX<1D=&qS<%3q=m7*N52#lv{4SrPiSVUrqJ%`PJhI?PhW@C6+wvfn=wMU-lBUcTrD zc6@llukrcf$Eua6nLoAb_mrYqeq-q3! ntu=)4Eb~6Hlo~MLvmx9mC3D`$0cnvRjPdA z!8kQ!I;(j2o4vVi&?sq<)8sFQgH(XMZ+yW)Tf%5;Coy<}vSw~xO1m$&aa2#Gt67`i zFrZUt_0OYEr4>3V5}C1-c(5aUhimH;PiSZ)cDHIoA-BKIM6JYd2pWn&XoS1gep~Nc z*01Vk&NlVMDWqm__;{2{Z5kmsAB-)2%IC_B-h#Iv+`v^scGQsdWYeP_Yl-K+1WF`m zPF#ehKvgQHIQR9|Ka)aH-(i|}E@)UCHx>UfZ*CuF%vdevGQtHmvAkqjr#*rt4qD21 z;-?$yl8RIJT)AiXLo7cKJV?hGQKR0=On?EMq^gxpe1#Vf703A0vAFk}!OY*mX@QD$ zhMZ&7@C{`ZjUM_WKi#;AZhWj2S#703Mp~7 `?H8PC2Jy=b!2+-m&gDA-~v5>%8`2Z_CuU(Y# z`&3Kyrro!1*F=7z4 }b9zbbpUsT2k0Uo_lfzgwe# zO %xbg>+tpe`X13l0+ zHscWn(~5*EYTBL?(nLnte|;JH8FM|M#HbOXKutOvdT#!hA*fO}&~nG|?EbaSQqMSE zo@BC{X}YQ5hgIstbAm8DGyp Tww zip56jsr5_#XXsUz)Uj!rF@G4Z0NQ%#pvSjYHroLCmab*3=b=#<1tGn~ci$f&5R3b_ zlgJN5SspgltSEskfFZ;^Un8J(0#4(zm$zZ*S3=9{>l2_3I%6%G!d78kFC-#8M!hvh zLZ#j_vx{|D*H8BO)$|7+^myc;o*|k!QD>_mM(mzln)pbrNMP;KcVc}{o9OpJL95eu zSXR6N;?_CB$5E#t*B|3o-ZrmvcT);>!bftMJ$n!(XR_Q}0aQDVy&G`i2U@#^)^<}0 zBz)tOe3({0;;Pk3r%>GXS<%c4OV<0&%T3Yi^6x^<0Ccb3q3n!EZk6!Q)B_Xn3?%42 zdV_%<-K=HkdkGvL<1?u{5~PRlntxg;*#TR{a%0D9* E;7}WV;CBcNt z CTUGa)U^7zhWkB?*9ktc+feTkTPcX=zo=S=~9eR_0rzHyUTLgL`al z4xbMh#RIS^CVuT=bJTf?S3-+$)94bgyMr~%eW+#vpnlilVw~{vw(`AP8@^%D%XrV` z()sTI_rI%H)aX&6`-H>8O(fu9!M*)+bm%4Pf_$okTd!dkSTKahOTrlZsU&y>Bod~6 z(jXUoM=+rkr86eb;f>LT)3wufu$k 3(DXR7cg5{E)R3kXY;c;do8?wM7<(Po;9dE%n-t-;p&hNci z?0<|Sou)@fAWXO2!l=eGR`0rk`;dqguK{=yZSKVWz#Y%ZYj-ltU{a%u5nButsDQ3N z3Ji{-_`G^`wA)5nX_l-V`wP01qp5l - hfvcHi-C zXyWTh
Td9eaZ@W t2usGb*kx9>b&07&=^=g$%-ua+!??A`4-ObRZBLdi-o>ESY%o?k5QNktf6 zn%T7N4|3|N^h*^Afx?*N7p;wJ{iCBeH^SPQ@d%jH4T0wBq!;t$E*-6zJR&5dt}q8J zyc4zPJDCibKsrvOA6d> s8WO=Ny%VtLkAc;+U5hwv-{lkN33;9_vI>*JB91W0 z@am) NHkc0E qz7Z=BCP9>F{& zu_*i#6 zfYV2h&&mJQ^CZVkJ*iTP8s?h;#zg0IgB7N4QlV07Wp0o{b6h@@Gnm}6lcIh3s$)cn z(>Z>6lvritPGyxp63~C@Rwk7+LZ9jv9dbFn_EQgo_T`dGA@^o#;ntHiKgDPyNZ3?4 zolqu0jAI%EY-Dsb8 j~23RgP-jYco6$MaKWrB*0@XjCv_`C1Q~ x64?%oLI`;} zb%U_vYyVPt^N5tdu7HX#sE(ez*F!h=1mTw* 6nR!8ysky883=D#xF>fAdt`MGH)ja0cb{Y zsn_D;;OAT6o?J-86)&LHFTEQ;FjiB<^L1$EhYC23&)hm-xxxboSI@TpJWo?ZO2&G% zyqbS);R5?>E{c(2Z#k#|z`*)kx_I{3c>zn}52!f|yCNu|wP-I|d)NHHEE1G&dnX>6 zFFp52OJ^N8AsYCNSha2ULzMSQcj8OM;P(=4`Ya@iT3Oxvhg`$_bplemYJ)P$2iVE! zQZ(&9IxC~7d?6LUy-F1|;FzF?1AdU5L~eu>ZfucEYguw&?*0l^0s}g{WLx7YL2$6{ zKCD +bHbUqIxt4h2bKw+-?rj2;Atac?9wtr9+gMxuCpT0o_u;ciNCauE4Z54 zJr4&DEnIPPuX2wB{J`sMb2ADaUEr=!3Rxf8UK| 6!R1J=%3+ld _L0n@=-Wb&9Aevhw9`B? zVhx!GtX&2p!EfKz*0 z__*a31o-_M4V_F3tS>CiRo7z!{f z7+rG3_;8&)#Y70-r4}6{AiL0S1vcpKgOR>DooBT!{Z&*X@qLL0er#Z&N=95cJg}b} zC*A}t6t!p@36@^BPpYsM^3z#q8_Id&q3e8A@vGS~*m04mfu4mY-&~8(?&T`?1SZ^W z?z4v%Cl!p^?i%JugGw!6nW6gvpGw+@#LMBLr{3UvH}nb)XbJ&;{yL|q*8sZ^Pj+Oc z1Mc^V^^%--WMF(8{RLqM0IOs{{s}t*Dx`2QRAhu)!M d!C4swE6S(|JFITAoxnl6FDYN_n*6veQ$VICIM3&oEU>OfZ~>x0`@ zc)KMw^oeZV%am;ll8O{ A}il+}m9N>^`=*7;lDqkac|QT#R{K zWQY%+8MY6w_PCoX_(@uqakaK++uL++`$3yY@9dA=bBjb#Ve7(R$;v7}taBCiS8LAN zbrW2p3rorIljj+KjD*gjPx|!(^M6~qBzD?V4&y7ASkiDie)3s(m`2zP 9~oE~ZpQMJSvkW!QWP@fz*0DJQ4kaf z6{ZBYWnfa3P`#xf$sq~^XYc*V>(s(F8wJjHV=fT*gzZ^gD1f%nP3~PqA5OV>#)Lje zJvd-eIxdqk95lt*b#6RP#G@ZIFTfR%4Djm^#SBo<;r{uM6eW;)lSA0U73A1V=(R{K z_AR6HO*%Sh;J5%LcrwrB36AY_-`izHOT&a6Zl>*ymOJux%FIrBZn)#t{0Zqwlu*Cs zze#Vmrq*<;UnHX6=+-)(oA$S+>BaR$>D9d}lh;%?&%4`i_|gb|mAtO(4Z-5e2;31= z4Xu-Ju%**{=U_>W{wCNBdtvRH$NA{yH)A$c89iMKMXWgs&L{542wf&5NlC^K4sMQx ziNm605L8<_x}TpA;s3C_i-t_EFDee>*5Q?CMkIFNFKfeF==ob|`UUuvD;12qi3WUx z&_LFBxnN=VTSIUI3nW)tOdFBJ0Pnx_9%_*5_CMU$a=O$gX|bU-HW sU@adD }g!}SyS%q1|O9^`c^3KG-Q<5kCajoz+P3W8*Z zNk3MzdFV5p1mZI3zt`JVk=bLT@D4`R5s!QA8m&+IUnINKI@SDscX2{d{I%EWlM1h) zmPKv+{^a`By?TjsRJljB %6uN}(ouXcEwKNR)x4|GK`0aoEkOAtWK zVHp^Cgr3|kaXk~{5* J<_kG)!nC oBmjc|gM;%ygiYI+#ytH+%? zr_IVAkEj&Po_-n6oJZ^!Iy5iGSZLy6ihj)=TH|hP7%JzN3L7d+uG{PI(`1J7Ym|~) zyL)hLn`tpjk~Bd40wJLWE{Y<{K@kEc379Rz{dkbNyvI@7x0j=+%Rm5XewimFK`66C zq>={>gRor=#EZ7dly=IiU;;Dsl>MF3bjQ#lDr8(FLQYVfrV(>hKild fxdP>&HAKLO36$Ch|b$l(MQ&gSb#8 zTJmA8nK8qBXdlf`c jtvrrgH$>Gm4GizKMqfp#Kbhl^s4!2{3lw1FU~*m z#Y`0sr@$qU@FHW675fruUR;ISITj=r3wBr%J0TROrykje_AX3IME&5GF?9`us7=1o z-%+_0j4 jI>q5#< z-vRDW3JK4uh$rDD$P%%^8E Dll#Sa)Z^VP3y8H UFYgxhh8e9AfrP;DLB0_UFDdtT?#xy$e$7#G$dfb2!i73i0w zdq&2jzGRzEF{Xk>h>o+7bf)v=tgzT+?e&!+Z@X;G4I*sE*hT}pYlU-#-Vrv{=SGv? z=n &C`*w%^6bgNvzmQR4wt8bQB}$!+O5%x%Y`$ogX5G1Gs;4*a zPIRNF^fOu2QU2Qg!(3lOMywoKF)4%p@$qT7^yMUko7)1yK~XA?!*ZV2_)1=eb*U*8 zLQU!BMY8sD3CPq8Fnn>zKBNg{6^}G3LfN3C$m7MBIo1`1biF3WgTdFx+NH#2X!az2 z+TcM-tUi!&K~NOv#S^wr(JJlX50oG~bYuuP)D$ThHIumW5iCgA)S*M><0Wxv0*q6i zKu)lW;ERCAH#Gg{0ga_XP2@OK7C8LH^)&fPRMGu97)qWBP25c`ciS)VAZUF{FOKU< zunfuqEs8=j1sL#4vminMHN&Zsi;FeD(SYw{{ZASefWHB09^jS%< yqK1sRlc002Lr90bS(0&;(Vd>bIY2gtWk450PT?EtWC2ha@w)B($r z0Kj^XQzRPzr~`6z)Bwl@unFKZ0I;tD0AL;19vlno1C)VdfczsD0Knq_xjz0;54Ho# zAh!s}O#;?|x?n$ln+puEA%Bbm>MR0y4*=vC0Xa{=vA|=@0RYNC9u=@}PzLIQGH@PX zzaU@9KaTeoPzL7$@|w&70P8_LkniLj08n=xzz_hi%`^Z|HV9xFz!m^-PT(A~0D$AZ z29N+C20#)3kPC(SFW(C?z-6KZ$Uwb(0Ds})pom7&0-R}SSOmdNSWQpHXFs5zKQp4Y zRv &(48{dkaxfnB4}vSmWY9{Xf I{ zzRSBu`I@L5!z+K5Q)3S?{gopzcFU%QRYu mU z1!TFOg0#N1Havoj<~lb!^nR+*JIfnSI1Bc# #UD*{?AXo~I`M54? zoGyhw&LgW-IuZg;E#Ms4dJ)nOGvW98-mr&A3bys*_rOPh2;Lel+uofve^wILqDW|y zmJEj1k!BR#%M|sEvbko8tyUk-0m}TL*n3 DwNk@X_CDT8Scnn5I>gY zM|+uYF?rGbd?Rgk-``xPWjY|jwA-MtXz{Z)mSeNeTg86l?^eerJSb!=&S{J5!(oPI zr)!J_Gm-OU4sc)*Bk(}=L}0|f=S`3f9Bq0*-+^pm*n&+FNuc$uuq&OwDr40_aaK9q z>+|}f=8NaI(lf?tOVo*L >(YfUG@H7~LF6=j)lZ?`TY?tocZ@e5QF`HOA!E z;DZQnc#A`GK-7YsK`uht@%KbN=hE+Wba1^6#uXeVI*0%g%3^`$r^ !$O zev UtI#emlg;#!Ve|6T-Tc7|j6?6wzBz6@#7@TQns P>9{g!> QrcpwVJ7VBbE8(nt1L< zB|2k!C;R;foCGRPRSvdT=bGRB-^8U%d8-O2QQXvC7uH<*`9T6qa&rfM+;;r*)bFX^ z6MK<7?;li=7uiOOW$i746()QyVax%uiy{e++okFY8w=x N&q>)?NbRin0q;yQJV zMNM&4nq6b@8A`Sgh7G#nLFv0F3HPMQH0jTw^Ito@R0ewt@F?h@9em!&O E483E<0zLjT z!4|Gz!*FgS;+VrIZS4g~8@yfD7WzikgVws)^V!e$??uwoBnc}`Nn}^ncqC#}EGwpE zZLQ%R_la}fAMh PMbG4}a;g52&Qz?6G!wkj{Fe0jm#IPfR91c$;7Q_s z`?+=TOISpzE_;cxfQZd7-8x(!ff)wD3zq|~PFbyT9a$cFy)_-S^u$^tES_}x?G~$0 z!pV>-NpfV3(y4_SLxN62#{#Z}H>J8_^RpMC!P!5OF<1cdV$9Lrv&y;w7;eow+RwhC&6y1=fpPC2`ZsBoYyCGH~3UkF4B1a2j)P zT3f+?col_lbG3CJAJ3&$J?Y7K!8GfeZiovPzeXKiVl00S2Xg z(X;4}Hqy6CypBRpIr;A4i|;>}zGt@Ga`6O~V1;uc*74bWi<+M0d_!ru1_F*HGk#GK z+RM^Vy4UjOBg oZgNe<5a2^-8A?B$E%T>UY k+Kg%O<$cOSlz7Cp+xf%xQ)HGrVMhy&Gxi@AyHl&>V#XVTbOWE3z@Ad<#I`X zD;cec&nfNKShZwqJnbX5K00Uwb*Sj0p44z~naxUpL>wUnd_d8AYxc@-Zo8Z$o{ejq z(4k`G+&N~n;1?tx7I>8Talt|3*mKj0ZsU5!bde^kEn{YEF`v9z?T7O2?1>}XU@v>~ zkx_n>k6m*D5<%h1vxP4mfd+MlN#g8Mb>}#wb?y}TXJ>o{MO7=lHr0c(k~C&VeCD&9 zcO_veG-$RXt<;z+^^-?-TU?P?`Ek>RqM{TjNsJ$D>NC(TQMFK(fj4ov>9SKV;Ie6z zMPu&`uU9IRTZ9CQwi#?gYgjNaD_)^wa1mQukMND$SwInJF;E7J7#>WbvYrtHU)V_b zp8MyW>j^}e$t#3C#*Ja=vi`K!Jgxp-Kp5LEu?LV-+e>yN37)N+n@{3!t_&P+tzJ%o zr#Nltk!AxC1DyCGt8{EA@B7#ud>~W(vca&SI3SpX%qk69kTRud7Ft;#$a%?Dp&wuQ zj6GWBxspJzm4#clDskqE2lGCT)2m9(krbu*-(6p06}p@_#b1uOHBPm7q*q Z!2Kz>En}AH_>6;p0Yhz?fuOYSX4i(orK`tC-ql zIE0(qFFI%G&53?~P?S4be7!G35bv?jt}H$n@y)dMy^yt?Vk-t=a%BaD$+%UqA7P6_ zXi^)|vy=EcWq+9x^~WY;p6ztXA1gXOwLaYOZ)f;KY*o9Jj1|4jFxrfuyfdV_aOOp_ zK-E7>pRK$dcwwZL*riq#>&CjU_^BE;xY_Jh6uYM;?i45l1YDOpUc%y_GWc}_+`(9t zZJ!w9?B)ZB?8Go4=Ozrp?Iwt115l@~5~n=S@Sstpox}U|x@d0Y&PpE;0_VBHoz=Ns z@uNS!o^i5&KgksgNh4Rlake7Vk|Ea~a`$C0s)wAK^OC!h>a#HOpNq-pF-uMl4@COC zQd^EX+f2V9kgW_vmDV!tAIM`-niiGa6cpj6eLMsucj37k`5@#oL*sp29?ljnJZ)oB zsI)hjevAv8&Aic2?o>1<=}KADbnl4{?)Qt^(%AQt+74pW($gHYLL`fh7Wj6}$9N%2 zq|*YoqDG$fIp|B~bHa-*T`smIuS}X_eD@L8DX1^QNE)Wd5DW7CQnttFQkcn`1S8wW zL9nPeRA_W`MS&?6!l_%->rvj^@T@;<4Egl>cQs*SX-p#Pi z>D`tdaTxS#DKByatE~-0g*iCoG1HSAbp=#9oDeOhuI$g5g#E-lCB)0}9_tg(N1uZx zRmb?8g)_%6_BYKwazOVvyfD1!n&RRAT^sPV+;XL&$0Ll8%N`j5M*WwmrJ0c+vmy!D z+*e93Qpc4s*vVFcU<-0SG}#;_Xrn<*VljiyUP#r5Z$v(O(U7Z;q|f4BRzM6`r$qZG zoLJLgzlZ8A-M?}avIIU#xA3*`tC`Y!YR6$ksO)Z-?_|X2GT9;rIjKku#P;S8Yiv@D z44!bcVjTSx;oWoyHvB=5F7$zv+USg=vyO@5%EseU&UvSi>nV}|5b!b~i4kfg9(6x6 za+b~1+ytdyy92f+82es1U|?&6buKOYy_8fpb#s4K!&}zr$Er+=hJL~|8X7)Qd6tR# z1-LDHxC>-yjjS~b0c$1tl2Okp K^l?(Q@?ap!AHM7XuJC!I$wZ8g3h}Z>dj^bQm$HsziKY zy0v_SAr*pyR~8}C`GRq-JfHjH30Gf$aOoqec6 +Y_S^ z!;)JhKe|2fnWwf{o2CfAapawF;qg;48GX-@Y)<-#%ak%Z*i>p&;vpTfoso4K3CUYQ z_~xcFwT1t=#zc6vMm26TjoKRniss2)3*4l)7EkE0N?pyiMoo=Uwkp&?4)gr7UMi>t zGJaIX&AlGB$rM@DN1IL9LV|ZBYNzp#!O~~fknt&tdu)09#0?zxeNDb=aAnJL*9OdY zxSA=yI$gTs+!q$YM18|hw`3M!+hlcSTv&X1BA j$QP|Acg0e)WM0wqb7Se>n=G4UYl7#Fw2 zIPM^ *MMuCh)=L@8qxjrr|T7u?zEfK-I^vX1`F=IV`?|e%WEGU z`OvdGbX((!x0Ncp#0SJYpZIiA8owRV^3er69b|s~<|>29b_XyaBE%U9B=o4n>;b9~ zR(X25 {ho~|p5N>i{7#vo77HbZTBZ+&ps-8gs;EhNUtApS)cFG@CUC}(tzUZ9860up+i z;)NDgPU1wE@Mp`C?PdcpoQJo8CK{(>=c`B{c~Y5Lvs@yS4hidlCDrGL$dq;k)|*3? zP{*YpNO|NGs^oIUG*{YX@B8nAXmJ9K4LP0$`p9oP^IUoK9lP4gh47g@?KhtWJ~dW~ zG4JjS3K~ D$Q*&n{8lp>H?Gk?76Wq4>sFLYx6?zuL??UweSvucswkt*NM4Dyr zHLdSpyK@QdvrQQ8WJHbE)C|5WxO|B%m6k-B4jx54lu>6elx<7ilBk4? + zP^>JY85j^Lk$FkVD*H+IB3q4}3yH8`Agu7ibK*nAxD(P-NuSF`UDsUA@0qm2^Z^a) zpVI>j#p@LxFzM{oRDGstf7^ZMdu^%Yh#liS@`1AxhC5@=Uny?morfFGDzDK`8FZs} zi$;OzUbfJs=2u >Ja_y1E;8&gDmP+GkXHo*uly#*m1uJ%HlLf6VNyZpkO#eKAnQB|?A0hrZ6;7h}|g ztMGA;W47+GdP2~S1Pl4r?aci^Pu2nN<;&C8AI5f4dmg>zj`2hlJ7XadcsLyIPAl?$ zB83S{r=VG) R)U<~01bJShZHnAj0C!c5-ucPGKKuaP%v*7uV>g2 z^R*V9#rho9O*UPE&XSKz&(VEj#}WRg89tfvm9xmiR97Rdi=hb{4H<2n=dU6^>nSX= z;6sK7E@f%Gl)m IH62@nJRXnpF%H5XQOhPv^F3v k8l>J8>5IIp(GxK)+y*f3>D z$U5E{8ZKnZBr0O?<}Hd0A}%1o2HOfeA{yn0+Q_SV>|M-}3l5Uo$`_G4D ze>CCGUL?fj#w6|vE*;=XB0?o*_2G{joegZDQyF+>7aPdvFnd2>e)L%h;XC)Qtkx9W z!KG@pD*AK$`$|N4nobW-$ Mj3LE@tO1w~41;9=4`e;0=3$ z5FyeO`-(U>oWipfFhAC3AYkS )NW*JBFM&G4WIK8G<|~9U{<_fV|it^L~=?wY2MPv z11!6g58KQ-r7tgsmeRMY>Aua@x`)}5nYJyYl`oeE!7}8J7>nY%j-BoN(4IQbrf6@O zczpIcPj)$%wIJzU=ZP^2m4D8vV87_QFMWMgNNvCRtWT}3ak88HjCkGqVYrUhCq8^m zTi@_ruYSv!$`l}zbg?T<%G5Zj`5h*Fb}D$t?^(pN4*p9%)Ib?4CrL;egUQ><);j1c zv)9)#5A&{0bo}CQXreBDJ5&M-Q(6D|aBC|0AxtukMM-_%Ec;8Sky>}fe%X}Yk}N`A zjweh1(V8~)vb6e6LF>Us^1L42l{gn_?>A2xyI&bQc;nMU+VC@153&^);p4Rw#Ufm! zRM{+!;>L7af(=8pA}?=k&cDit%i`tgI`7IbgUcBB06W*D7YSuDLq*7rk;0qrkM}(2 z7~=Z0A7hA>&tmno$U-}%VyK$7751ryXCH~RpW1jAhk49+!ok*`$H~|^el}x 3AnaL0+9_p2RDPEa(LfncaZ{hY} m8MjJ zhAa}9(K=q3GekzJL@^SHy+|90d7PU+NV8a@wAVd7@LqyTwddE8+AQLsrKSn|#R}J% zmMqt}20!lSqpR{PFXxX^U_Iq3-pQwJbtGN%uTH-;?L@n$h%*~i$t@Z_q8Y zT=$on%x)%Y7Ii;P+_}st4iPLB71#q#89?4Q+Aq;bVULfK2E?!n=()@-qgoYPI~mxJ z3no2RHJYA?KA!W@$JVfsE%Z)&gV$t(-j3(}6hgmFJUYL6G1MteJCC5oZD7}}_S&RJ zF_#hL;wWC_^rRN?{q^JI *s|WDeO&L5D`FRo$ZU$>QQ)PMS z#MlZ89`*ojDew#NlqrVVteSNw_Cg^P2z0Mw=nGi+Wg|Y3XRe-FMdndXYjt_ThnZtn z-AdVyZaF22+%+F;X%6EZI^-_mHE)avR*Na$yzyA&Z+o2mo6L-YI6A#>+AK;`_soXM z)6FDayF28y{hU&*;SV#Rum;->CgbNEC5ncPkoRW+U9@(Ay1f~5Y`(Rw;1a#O*nV#E z*&zJpi8OI@+i0r9!H_P9;c-}1M{Q>LN|ex#3heE}VYL{`D3x|7C8VMg5mPZ@(2do) z|1(Z_eLg_DVH-cv$7Au*ydmKWbw4UxXpc#OD&FMY)XB^D{dGbaiR(|<#0il6k8b(* zeu|1*wyv`nNRAm%UJiP+IUMeCA07qb#ZPX>J|(*k1Kt3D-}c>vP-T%|LDDcfeD?a9 z1h#NqBR8XpIQ${8e#vSrn_?I3nYdS$PVy{;(a?3xCusN9x=!nk>oPGroDFNoyh?)Q zMFwxZuFpf)MK+9>;9ql}eP3plLsE#9PfvUP^HD5Bto72`HTp%}ZO>$`(yy1}cLped zfG6hWUwGaCZw+Mq-+SKTh=KZa0G)sF@UQ~=;0Kh)0suWjpeG9S6fFP%JwJ&6KyMZ3 zRRcXl(Evd2QyKtJ2DSk`PEi0ruTmy}Q~;o-3ET(U7XSb~O(_5h|15)^Fi-~e@edCZ z*bmqrcs$@1^i0JA0Q>L-K>jc04KnZlD>)Pb!GHt$UO@fdGi&huk dvH*MsXz~9hvj#BcpS^+O{^j$>5PuuzKaY#5_HQz4{BvIa!^|4c z>;HLX4QR*z-^?2Oe`XF)`b%aF)IZNT=wSxWFnFz?{aFUCkAG&|0A=9)1L~jy0PhQ+ zjMDkH>>I!sf21b>uFL<;z5$#I&^r%$nco8dz1K|uS^$7v>Jb3jzyvSeFL?v;&}>0QbQyI0k4VDgl7HAV9DDe^ayoc>Lfz{@Wr0 z{$Zp4Tb>ncf62}Q-qU}{&H_fE*a7p1T82RWcrGsfnXP5g!`;o*5ANt 9B5Zsy_PW@ql{VP&Za6r63~ z!iMmzuDtEyuD||;v-!b2?3}DL%$#k2-VM3fxH*IbjDhyBlg`+!j_B>8a!^0JY`d*t zt0Qo$E%NV8zy@r59Nc_=w#xmx0$2wqfZZCu0Pep3%|r8_^U%;)yIEQN2bKQ=RZ_h@ literal 0 HcmV?d00001 diff --git a/CustomKeyboard/View/KBChatMessageCell.h b/CustomKeyboard/View/KBChatMessageCell.h new file mode 100644 index 0000000..1414a7c --- /dev/null +++ b/CustomKeyboard/View/KBChatMessageCell.h @@ -0,0 +1,17 @@ +// +// KBChatMessageCell.h +// CustomKeyboard +// + +#import +@class KBChatMessage; + +NS_ASSUME_NONNULL_BEGIN + +@interface KBChatMessageCell : UITableViewCell + +- (void)kb_configureWithMessage:(KBChatMessage *)message; + +@end + +NS_ASSUME_NONNULL_END diff --git a/CustomKeyboard/View/KBChatMessageCell.m b/CustomKeyboard/View/KBChatMessageCell.m new file mode 100644 index 0000000..fc4ef37 --- /dev/null +++ b/CustomKeyboard/View/KBChatMessageCell.m @@ -0,0 +1,194 @@ +// +// KBChatMessageCell.m +// CustomKeyboard +// + +#import "KBChatMessageCell.h" +#import "KBChatMessage.h" +#import "Masonry.h" + +@interface KBChatMessageCell () +@property (nonatomic, strong) UIImageView *avatarView; +@property (nonatomic, strong) UILabel *nameLabel; +@property (nonatomic, strong) UIView *bubbleView; +@property (nonatomic, strong) UILabel *messageLabel; +@property (nonatomic, strong) UIImageView *audioIconView; +@property (nonatomic, strong) UILabel *audioLabel; +@end + +@implementation KBChatMessageCell + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { + if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) { + self.backgroundColor = [UIColor clearColor]; + self.selectionStyle = UITableViewCellSelectionStyleNone; + + [self.contentView addSubview:self.avatarView]; + [self.contentView addSubview:self.nameLabel]; + [self.contentView addSubview:self.bubbleView]; + [self.bubbleView addSubview:self.messageLabel]; + [self.bubbleView addSubview:self.audioIconView]; + [self.bubbleView addSubview:self.audioLabel]; + } + return self; +} + +- (void)kb_configureWithMessage:(KBChatMessage *)message { + BOOL outgoing = message.outgoing; + BOOL audioMessage = (!outgoing && message.audioFilePath.length > 0); + UIColor *bubbleColor = outgoing ? [UIColor colorWithHex:0x02BEAC] : [UIColor colorWithWhite:1 alpha:0.95]; + UIColor *textColor = outgoing ? [UIColor whiteColor] : [UIColor colorWithHex:0x1B1F1A]; + + self.bubbleView.backgroundColor = bubbleColor; + self.messageLabel.textColor = textColor; + self.audioLabel.textColor = textColor; + self.audioIconView.tintColor = textColor; + self.messageLabel.text = message.text ?: @""; + self.audioLabel.text = + (message.text.length > 0) ? message.text : KBLocalized(@"语音回复"); + self.messageLabel.hidden = audioMessage; + self.audioIconView.hidden = !audioMessage; + self.audioLabel.hidden = !audioMessage; + + UIImage *avatarImage = message.avatarImage; + if (!avatarImage) { + avatarImage = [self kb_defaultAvatarImage]; + } + self.avatarView.image = avatarImage; + self.avatarView.backgroundColor = + avatarImage ? [UIColor clearColor] : [UIColor colorWithWhite:0.9 alpha:1.0]; + self.nameLabel.hidden = outgoing; + self.nameLabel.text = + (message.displayName.length > 0) ? message.displayName : KBLocalized(@"AI助手"); + + CGFloat avatarSize = 28.0; + [self.avatarView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.width.height.mas_equalTo(avatarSize); + make.top.equalTo(self.contentView.mas_top).offset(6); + if (outgoing) { + make.right.equalTo(self.contentView.mas_right).offset(-8); + } else { + make.left.equalTo(self.contentView.mas_left).offset(8); + } + }]; + + if (outgoing) { + [self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) { + make.top.equalTo(self.contentView.mas_top).offset(0); + make.left.equalTo(self.contentView.mas_left); + }]; + } else { + [self.nameLabel mas_remakeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(self.avatarView.mas_right).offset(6); + make.top.equalTo(self.contentView.mas_top).offset(2); + make.right.lessThanOrEqualTo(self.contentView.mas_right).offset(-12); + }]; + } + + [self.bubbleView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.width.lessThanOrEqualTo(self.contentView.mas_width).multipliedBy(0.65); + if (outgoing) { + make.top.equalTo(self.contentView.mas_top).offset(6); + make.bottom.equalTo(self.contentView.mas_bottom).offset(-6); + make.right.equalTo(self.avatarView.mas_left).offset(-6); + } else { + make.top.equalTo(self.nameLabel.mas_bottom).offset(2); + make.bottom.equalTo(self.contentView.mas_bottom).offset(-6); + make.left.equalTo(self.avatarView.mas_right).offset(6); + make.right.lessThanOrEqualTo(self.contentView.mas_right).offset(-12); + } + }]; + + if (audioMessage) { + [self.audioIconView mas_remakeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(self.bubbleView.mas_left).offset(10); + make.centerY.equalTo(self.bubbleView); + make.width.height.mas_equalTo(16); + }]; + [self.audioLabel mas_remakeConstraints:^(MASConstraintMaker *make) { + make.left.equalTo(self.audioIconView.mas_right).offset(6); + make.centerY.equalTo(self.bubbleView); + make.right.equalTo(self.bubbleView.mas_right).offset(-10); + make.top.greaterThanOrEqualTo(self.bubbleView.mas_top).offset(8); + make.bottom.lessThanOrEqualTo(self.bubbleView.mas_bottom).offset(-8); + }]; + } else { + [self.messageLabel mas_remakeConstraints:^(MASConstraintMaker *make) { + make.edges.equalTo(self.bubbleView).insets(UIEdgeInsetsMake(8, 10, 8, 10)); + }]; + } +} + +#pragma mark - Lazy + +- (UIImageView *)avatarView { + if (!_avatarView) { + _avatarView = [[UIImageView alloc] init]; + _avatarView.contentMode = UIViewContentModeScaleAspectFill; + _avatarView.layer.cornerRadius = 14; + _avatarView.layer.masksToBounds = YES; + _avatarView.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0]; + _avatarView.tintColor = [UIColor colorWithHex:0xB9BDC8]; + } + return _avatarView; +} + +- (UILabel *)nameLabel { + if (!_nameLabel) { + _nameLabel = [[UILabel alloc] init]; + _nameLabel.font = [UIFont systemFontOfSize:11]; + _nameLabel.textColor = [UIColor colorWithHex:0x6B6F7A]; + _nameLabel.numberOfLines = 1; + } + return _nameLabel; +} + +- (UIView *)bubbleView { + if (!_bubbleView) { + _bubbleView = [[UIView alloc] init]; + _bubbleView.layer.cornerRadius = 12; + _bubbleView.layer.masksToBounds = YES; + } + return _bubbleView; +} + +- (UILabel *)messageLabel { + if (!_messageLabel) { + _messageLabel = [[UILabel alloc] init]; + _messageLabel.font = [UIFont systemFontOfSize:14]; + _messageLabel.numberOfLines = 0; + } + return _messageLabel; +} + +- (UIImageView *)audioIconView { + if (!_audioIconView) { + _audioIconView = [[UIImageView alloc] init]; + _audioIconView.contentMode = UIViewContentModeScaleAspectFit; + _audioIconView.tintColor = [UIColor colorWithHex:0x1B1F1A]; + UIImage *icon = nil; + if (@available(iOS 13.0, *)) { + icon = [UIImage systemImageNamed:@"waveform"]; + } + _audioIconView.image = icon; + } + return _audioIconView; +} + +- (UILabel *)audioLabel { + if (!_audioLabel) { + _audioLabel = [[UILabel alloc] init]; + _audioLabel.font = [UIFont systemFontOfSize:14 weight:UIFontWeightMedium]; + _audioLabel.numberOfLines = 1; + } + return _audioLabel; +} + +- (UIImage *)kb_defaultAvatarImage { + if (@available(iOS 13.0, *)) { + return [UIImage systemImageNamed:@"person.circle.fill"]; + } + return nil; +} + +@end diff --git a/CustomKeyboard/View/KBChatPanelView.h b/CustomKeyboard/View/KBChatPanelView.h new file mode 100644 index 0000000..255ffec --- /dev/null +++ b/CustomKeyboard/View/KBChatPanelView.h @@ -0,0 +1,27 @@ +// +// KBChatPanelView.h +// CustomKeyboard +// + +#import +@class KBChatPanelView, KBChatMessage; + +NS_ASSUME_NONNULL_BEGIN + +@protocol KBChatPanelViewDelegate +@optional +- (void)chatPanelView:(KBChatPanelView *)view didSendText:(NSString *)text; +- (void)chatPanelView:(KBChatPanelView *)view didTapMessage:(KBChatMessage *)message; +@end + +@interface KBChatPanelView : UIView + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, strong, readonly) UITableView *tableView; + +- (void)kb_reloadWithMessages:(NSArray