From 3574cbe4df6fac91ba59924c3288e3444f9523d1 Mon Sep 17 00:00:00 2001 From: Janis Hutz Date: Tue, 6 Jan 2026 16:39:27 +0100 Subject: [PATCH] [SPCA] Start pointers --- .../00_c/00_basics/05_pointers.c | 27 ++++++++++++++++++ .../spca/parts/00_c/01_basics/04_arrays.tex | 1 + .../spca/parts/00_c/01_basics/07_pointers.tex | 17 +++++++++++ semester3/spca/spca-summary.pdf | Bin 5499 -> 458383 bytes semester3/spca/spca-summary.tex | 8 ++++++ 5 files changed, 53 insertions(+) diff --git a/semester3/spca/code-examples/00_c/00_basics/05_pointers.c b/semester3/spca/code-examples/00_c/00_basics/05_pointers.c index e69de29..75c8262 100644 --- a/semester3/spca/code-examples/00_c/00_basics/05_pointers.c +++ b/semester3/spca/code-examples/00_c/00_basics/05_pointers.c @@ -0,0 +1,27 @@ +#include +#include + +int main( int argc, char *argv[] ) { + int x = 0; + int *p = &x; // Get x's memory address + printf( "%p\n", p ); // Print the address of x + printf( "%d\n", *p ); // Dereference pointer (get contents of memory location) + *p = 10; // Dereference assign + int **dbl_p = &p; // Double pointer (pointer to pointer to value) + int *null_p = NULL; // Create NULL pointer + *null_p = 1; // Segmentation fault due to null pointer dereference + + // ── pointer arithmetic ─────────────────────────────────────────── + // Already seen a bit in the c arrays section + int arr[ 3 ] = { 2, 3, 4 }; + char c_arr[ 3 ] = { 'A', 'B', 'C' }; + int *arr_p = &arr[ 1 ]; + char *c_arr_p = &c_arr[ 1 ]; + c_arr_p += 1; // Now points to c_arr[2] + arr_p -= 1; // Now points to arr[0] + + char *arr_p_c = (char *) arr_p; // Cast to char pointer (points to first byte of arr[0]) + printf( "%d", *( arr_p - 5 ) ); // No boundary checks (can access any memory) + + return EXIT_SUCCESS; +} diff --git a/semester3/spca/parts/00_c/01_basics/04_arrays.tex b/semester3/spca/parts/00_c/01_basics/04_arrays.tex index 8f9ca15..1671f21 100644 --- a/semester3/spca/parts/00_c/01_basics/04_arrays.tex +++ b/semester3/spca/parts/00_c/01_basics/04_arrays.tex @@ -1,5 +1,6 @@ \newpage \subsubsection{Arrays} +\label{sec:c-arrays} \lC\ compiler does not do any array bound checks! Thus, always check array bounds. Unlike some other programming languages, arrays are \bi{not} dynamic length. diff --git a/semester3/spca/parts/00_c/01_basics/07_pointers.tex b/semester3/spca/parts/00_c/01_basics/07_pointers.tex index ad65d30..c885404 100644 --- a/semester3/spca/parts/00_c/01_basics/07_pointers.tex +++ b/semester3/spca/parts/00_c/01_basics/07_pointers.tex @@ -1 +1,18 @@ +\newpage \subsubsection{Pointers} +On loading of a program, the OS creates the virtual address space for the process, inspects the executable and loads the data to the right places in the address space, +before other preparations like final linking and relocation are done. + +Stack-based languages (supporting recursion) allocate stack in frames that contain local variables, return information and temporary space. +When a procedure is entered, a stack frame is allocated and executes any necessary setup code (like moving the stack pointer, see later). % TODO: Link to correct section +When a procedure returns, the stack frame is deallocated and any necessary cleanup code is executed, before execution of the previous frame continues. + +\bi{In \lC\ a pointer is a variable whose value is the memory address of another variable} + +Of note is that if you simply declare a pointer using \texttt{type * p;} you will get different memory addresses every time. +The (Linux)-Kernel randomizes the address space to prevent some common exploits. +\inputcodewithfilename{c}{code-examples/00_c/00_basics/}{05_pointers.c} + +\begin{scriptsize} + Some pointer arithmetic has already appeared in section \ref{sec:c-arrays}, but same kind of content with better explanation can be found here +\end{scriptsize} diff --git a/semester3/spca/spca-summary.pdf b/semester3/spca/spca-summary.pdf index 238fc539433e3f15a846cafed346eb70a8fb1286..cb492f48e0fdf7c596d496122b4eccca88c8ee0f 100644 GIT binary patch literal 458383 zcmce-W3VX8(l)qk+qP}nwr%fa+xA|zZQHhO+uC!^JNJutXXZxC{c~DvixfV<6k5G>i_%t*9axk zU-m9e#-_grSpRBKf})o(wKI3NAYf!A_}B5*ES5ITrcMO(Vm5}(rXr@s_9muKe0)&9 zoSjS!ZK2#Z7U5?UC}#G60KmTi@1RWWO#apL*WKT*&i>cL{~ZxH{wWbS|7#*J{;iyU zL=B98tNg#C2S%oUOo;!UF){vQ*2MI;j{iHFVES9>|A;v;G5`03_!|WO86nvIdqVte zx&Mq1|2=eK{>RXX`M-xw%>NiVG5_~`g83iw3Fg0vz<&pwnE!Uaf5ay^|2J>?7o}li zWBHFMO^V96(YqOlJ)7+X|)k>rit?hO#J;mI;(&=2# zC;=$X9xs5&(QgJPM4zd``*x%u#nKS6cVxv_tC9%ENUo#=Z@HVp^NwpY)yyKLi8p0s zes)pS6#7|r#jdID{DZ{~&+AUnfkQBQxs3IOE40QMdo)R^iM$q$||lV!6a<65X$HCd@=A ztSb()D^wNCqA-gnzF{`aoCcLH2GIIInqLK&R^O)0hH|=@~<7 zZzOLi4z?dNw^@oSs-=7JSA3(PLrWrQyp03sTA`k}|vZ zSZ~4|S%QzAoCmX#h~dKar|$5(SiG-*F@;GwhG`apxn`r1S!r2lMZ2w&W9}p#-*JT& zYi9#6D@)4%rnEEGQ*&w6IXv+#-^84Ir4(}qZj8sZMVw017vA**lozx3K3)QkM);uV z{qn3@Kxvbt4RvZ#F#P_g*vK6Duq;$N8-T4*i7Fj{=BGJ+LB=bobb{0C6vg+lL@AuQ z_~T)*Z7}6MM7Z&dSW*)?x0I@|B#1C|<+&htDNZu1+icrHQL86Hep+e+PWYnsj z7k)F{{oQqehIq>JRcYH|tEDR1?INI6TTM8yS>kyi+mmN_>ECMGLM@Z?yJs355jnc? zj;}f@;e2-IOUqk(8{Drd5FZd!5M(|GAhKLeK@Ajs7eZ^W(MyCup2ZWBhx#r#T>{QE zq6cKsKUy+dkC!}k)H^OSI? zsSp!2dQ>Rn_!^05 z)t4htI2a2zUGFfLoJ0>bxHl0!DjS-=lB_6$Dr6Z@d3(^Qp6-U2(UHWPTYgVOf5*c? z0;hB3O|#q9Pj4=9Ji~p%-2%*=br&mNUx2%*>Sr93hKPG)ZB%vc_O|cy2!QSw~&J;V@o& zN%J}~v1=ZQCNV#CRaJ?>tbjuPbXzoKKy>x1#T|f%ii@57b?XB-+MfF7wE55G9|oHe zgdf)@yVzH`N}ljU;e-$w1_j{jI)Bbq>{C!=527#rd0f1le}f22|NH;_f1-INPLBT@ z68`_A`Rm`(_SozQ{k$EYsPX=t#7-Pv95^%XkQs!5J25*lV&wLq!f4vVC>c7$hV?{Hmeh62NU}9^qZbdp zjkal-j?{D<;MkMp%j^QVZQK@bJ&e*r_iMF)=0m&hFImuoD<$x0r5&nc28l?+PQ zDQE|dZnT8Xl0cFQ61H(x$t(m{w{Xwt7X zA$FucX|s!@8`)Px*5yeVT$k+<%HIrVJPb#bFACCi#}AvZR4AZPiHb5EjO4A2m${`e zi`<(anIK;x{nV-ZDOjN?szZUwA^}4p5dHmF(rritifd57x(jPGzY7uoW|>tUmAV{^ z0?HFJQV+YqwQ8a?r8Jp_tz{2b&I?e;HXmqwZM!LR2w=jEx2dD$3z=@eaykaeuvt20 zNUn`ZDA5?;X)Vd-;pSms)0|FAG!;Mmv zT7+36+{(xd8>-VutC=&ANkO+sfONkv7CMZ%lW+64bCHee6w#tf(>V#`bCT>~RJQ`L z9m6lBHqdh?{zCm`9IO((UoYgqKw-I6h&}@T#AK}KK0I@464l=;lGG?ebW`OeCHQO5 z2F$ED*2P(eB!p%2P;84{!bny@oXT3}*P4kZZX1aVvdt7G<2ibrjV-zSVE!z1@BoG~ zp_#kNtA+sn`1?j~umoS12@(RF;O5i}WQq|DX_iwQDGmhT2@~0NZ7ut*vn)vlVP;5R z88Qk+jSAK>w2f8jIiRFdBs7L(noQ)>aW7`b1$q7%B0pQB$3>jXv_`12ZYg?|ZI`7-p zl$nKUR=}GB8XQEtk_MzMeapY^b&JDnd|={S5b<+?B=*At;oh8*>XcNs*} zBsBPT2%1cH35trbmcppqVaa?)Ni-w&2pMfAIr509dl5bK-8$*433nP8s391sD~5mV zzXd@Zz)!L3hB%(y9QK@&c^ya57IGyr7>vEKt3yt|QzDpb*EUo9+%?LZAxtFT++6=iyN`YpG(F#8_ zcZ906s^CK9gkcTFYQU^cLG0UBg(6LkJ=695^kBz6Hy-DL`<48s&XLB(3h9>OKyd!k zY|3(3*9Y^LQpo9xqVCtcXKR_g@w_@psOdD;pocbZ|Jx{ zob!JJvHy=?^IthPAp?w*MsOo@tNQ4)C^5rk$Z!)(-Fy88nIg&H#al);}s3(=@gy$%vEQh{cKzg z-{ZEX5qUoL%uE_Hf4wkymS}`MxgrC%{uEu+>Sl-H<;UC7BhTe%MOW34XEth@Nc=F6 zz4v96j{SxhE_5Z)0K00(1Xc>0ZE>u;?(VbBWe5$^$&=6Km($nD*YN!AOx%wTi2#8) znJW;4_Ru(uF1~J;qZzdOi_yuN9@1=$%Pi{?j4k=o9$#)Z-^XbJvjSB*IFn z`cw(sGYu*`bB-QejY+~oAL;WxxyQ_x`jBUh9W3)T&|R09y<}z;O|)ZD4t=1bs0n$F^a^hwAFx|Dhl}y5kgFYy z0Nb`qKVqW}t(*eN>V)9qS_j|sa>_*cC>Z6p%g8)uZ6hYxqTAP0^Gd^-Qf+bK*(~d# zbe9&iY5)=FyxRKl#Y_@o?gP2Fdj*#uYV*#3TwwguOrzTvpfH6@RoY`NVZmF^gvxvw zXtUU37Q$(XmB$gY_YT^|78ChK-+IDb5;DgiWN#WP>o2^dYW8-m!68;>G@fZUrCGjF zj`{AH2_ALN8sr5GbyD?Pa4e?2F^_E(q~-y4ZHYQl;GYw*6<6ROVkcpD5e;B=^*$|n zYgJ$`dZ?=0&5TiN`CtLMqYPqgB*XF=LQf$6IW4}^n+^2+bFo?z&DC`tbz!-bjU!De zY+*f0+}OLKYVPzmM9+CB3$gMF>%@4xT2rkQu{Bm+Mdc9+=s@vUq`r9^vzoaT*H!$% zfx;hpm!?s&WI*}78lnv-m{8@=fD~2{Bl*hmTM9Od=u}(B81#rJfqA$XloTUh9$bY} zO}MH2$5eMDBmo5z)G8!FeVDu@3WvX#RE2dgXY`+Ep3{W#h!Q)A_C;GD0=g#(?rab+ z9Po~h_6m8j?AX?PYZXQA)}85euGN=7Y-3D~un-#(L_oL(S?J5e-^&NObB#-%VyG^z z#cibr%{xf&7?6YwV%<@p631Zc7M(DS*~ zg5p!sV;z*DItC?e^lGIFK?=P^t3}5J6unnus$FL>v&SyLFA8MiLU!tKaEmLe_Qa%k z(6_D%FmL*OQeHOK8Xfk7t*5nhXvjfYL!2e;OF1CW+_JxcFnF(f<(fvP#>(;G%}$Lx5%roT`vIb|pGcu03adf`a`Y zfZY3*gbdf%xCjI`T*?apz*A#Ls{BLQM)r-2QYVZQJ5EB4YZXMgl~Cm)oI=iM+AbTU zi1{6eCoMA5WO*ZQrNN*;j2+2>BzBwHMhAbA2s^Xf1{XBM zi6Z${c5VU0<%Mn(4ql{x6(uV1cA3Yqc5MoU zy(btCG7i^+=E&k~zM9>du}k>z1JMpbT-8#*W8en`;|jGB#9mRr*>Qun^JOJ(-C(dB zAqMFNjkSJj$0^NiHg1!&^%Efk;CA#2YdB|k#}7*+V4rg0ihMun0I0{!>N)5f0dKc9 z%q)2B1`xFbk#t-O>~quMwLXO&78vh`2msvn4L9gKsO3R!79`xZv&UV0;bULvxO3MJ zw{yn<>%WLLOuoL_Ou2{mBq}#(lY5N-sN+0xRX4~ss$1_=ZrjPbc8Z`1=n5cJ(&rD; zM#Em26c`*_2|-n|RLT~aan})RhO}Y6Q8(v^f$}qU=9$9{N1KB0L04}O15HxY1DAS%3ppHrKu9rutK{{^KS*5?hoYg-4Q(uzI^+e? zX1RKGF{?|a>5${QgL@(3VTr3@g@=ndT{G+f_kJ3j^Ocro`YcR8GWoEh$g}hLeHbz# zhYdez$S}~21>N0nkev88=uh#(l6688<6!Pb<*?YJTe0u}(VzJ~-2sAz-hTM5HML2T z);|v++NaqjY*dmLp5KfSoqHdr3!h}P}IJ7>|yPa zM5iJo?E|abBTRcZ@;PaYUoi1{h`=tSRQWC&WU4(r-VX%qsH5B8RC6>gj-~;R{)8cw zjh7j|#o$9?@Z7Fs6-IrK_MV*R_6)(30`^*-+5Q={!@zRR!M$5hWI5|$KFKB^eMcE- z*E2njBvepU$F+#11*Md4-cJ5K?#)n&@4PnWIBYjM;1S-EGKkyjk1?@CwM{GL9_<&F*;NS}(!mAdzAE{UNRj51L`DMuYVhjc3JsYO4 zL;>HPs_lFCtnS>6jK`n>b+4htWk{be5U*jTx(&m+6_j_;Ev4jRcNZmTu=-B88nRC3=bpYr1ew4Og%YZXNg-y#anj$gH*JJkHcg!G&z7??DZ_*79w;@T*MymCsW>D z#>u!L>jVDxu?hTmTn!x_{DAvj=B}{RO5A3eZKGwTqf}xxTV?r{sb-2d59jCpyUzoI z--T`*1mB9}krJ!DHivijG}IiJ{=*-#!I$O<7eUQi9UTQRZ-7Q}eB;tL6uMWNJ1T+{ z4?Zr&%);9xGsm%51U@q-o$`|ENclUg%cO20G{Y_KgKnblPrjeS$<^6ErZZfc#(Y4u zOFjrB89!HLyYD}4x2HVpPgep%VXJKNC^nsX0Gk$5E@Q(@I(8_xl?5T>DiCf}x1CmS zHY!%-6_HXR`Q_3?1;PH9kh+2ttAm8F@C!o{`mXjHEcIk?B{LFl?7{P;%RirNx~old z#e$+Ol^8vW`@~Ok$vxWY6(v9m4I2JmC35BugN@kaE2!t$^X=%ON0{|z=DS5JCd+oA zrhKvQSupIvI}-U+bTp5EJ4~ZgjD=Kw(W@{Mh=l=&EX6pppsANom8|(QbkLG6Z)+mR z*AwfZ4d)%yG|iJ4sLLBqqD4;X8P>K%#|@IDe@K1nN(zz6B8G=M^ixhA){xamUu*4A zUV={(1NV(a-85}**t8I4jUnUP^nvn0^OUxNpjLSAZhQ^#!4zayTkH%EEz1<`AENEs z;b@pdd)}ICDwA(JsaBQYy)`Var~7za5btdC*J;3aS<_sf$*0?!Fe^v9^;8<)jv5@8 z9msuGQo=+XXJ}3@Y)_Svyq?sD1(4zv_pfs{I)U zMV0jOc?8|?#<)7MhxMX`0KQ(v zKINPu0@Xc=5r&;ipw_*)jc~u(V^wssF6^|RrqW$IAYEzIE+{p11Vxa4{(@)}<-{=9 zlR$VmY`(=S(3hq&`iP5ct8T!?lf%~Fzo5k$6S9Um5;E0kCO*h41LLiiavPADu8E&l z*+!4wGleKjTRKr9vjutFEu~$UNadR242I@#^KoWetTCA9YmymT(!Y|W4nAG0$M#O9 zA|y20j2fuY0;CDW;7HaH}#!P0X3Hn%8HX|(9 zKMmZbZs5sOZ`gQ|b`?7~8aT`!ke+0bgO9zTybH(``w| zH*i@z?&r_NW@ZbHlQ{KkhD*8zS@+xn!0EAbaqK~FGC#4M>&-)bl%cfhSe`QmkBqGW zto>rSeNFkyL?5PURX6+xAOYiR^4~;ZEdM6a#l*z^pC`I-zU?>Lo?pLEwZd$f5Go6L zmN#+ZFIPIjHVv(VP=&QXqGdKaCJM+EWqk&}Z@rERX(km9;@YHY@aD9Rh~M9O@cE0@ zMuzHQ@a1}XIXr$QenqcE0+Tb)jfA3W2jF5DUTHd>VWSftE_ioRfM%uy>sH2|Ye{JwuV$|ZM=qU;T# z^aeEk>N_&_ zj-(tE3d9JzwLN$YKnCIhr59DC^hllzu);DLrGC_b;~iz!cU5qRShI{BtQD+EC_lw{ zlqv^`EVqKk_PmH4no=8=YzvHYu4R%x{pBA_hP+~MhP=unEW(LiHEktCo!}%pI-Pv3 zq*`Do;5Y#4N9dv8M67mY?d3^ZROF+K3B+T`c32$fVK&28FBEjoD2UZwU|l30n{MZ0 z|H&2!O!eC&{(>*?uyJDjl(Qk1;&SO)i$wW@@>taos&7s+k);^ef@Vcw+9Ct`t(KcP zq3=mVY9eOZO_^+3C!rKG%PHbm?1#l>SsB1!K2gqp;dh|0WFrxytBcKCRRLH)6-BD5 z1+~TiD%CQ@Z~z=+3W+gG?Fp863h-^jk|t%j*jWR;aA+gw04R0eAZ7HN6j=HKk8`%_ zZ;4Y(VT;hn{a><`MSG`KY~sxRH(f{_3@g8kSQkCBtuZ}wYDN- z9ZZO3s8?}6Nb?X}a*OMu!$|a6TToJ%IHpE5CDmb_pA~lTHbqYyo=FZ9!_; z4Q8y;qyGhGq4q0~?({MmM7$}f8(lU)7^=rSoiur~NhA(1nh&BQDQJy3Cm*1wrhTd9#1%?25`#Vw_5~F=$Uzfn%&7iyz%E#qr8h=X79%EjZ{Q9j+h{ zBv7}O7NZj|^GC+GYItg@m$p_Nj2FOQ3mTE;L<^|LuT6aVFg}_wav2@LH@cby95ycX zOA!ELCI!nKS3(PXPKm%oO4^rHVfMI3AXmqOhrt=0vwK;KO`j`2Mu%NP2YC`+e4X+i_N?71&{^ZYS&z2jv z($5T>j8Ea{?@V5k4$gy}86;nfkCVq!VAgw0S7CJ0RC_3{Q6iacNKd}=Du?GCf#h4~q8&BYTHA}9F^MGqS z0HGH{1)ZHSpIw7GP`hahyzZeLLj5oQtaC4UukRP+RWvJp9uGbekL_Mh zLc83RnFc3v^{3cAIX(8@-FneK15iICF(oTeyDrXxfumyx_V!8%GOe>n4+!7!>qJ+J zeo`hc)>9bzXDY!WyyxN}zk^fZIqkN(1g=-|dV5|y>P7eB;1RTi|5%Q$_)TKdxFE%! z^mlA!f3HDRyq z(k+?AXdm3oWZc-8-p_&vU3nq6eKUQdLDfx9=Q8F@-($-;Pamm<*~V6!(It8U*5X3w2no{G|!$^v4Sz=ApCRfoERUZy*jitpk09Da6) zow~Pw>Ob#|S}*YhuYP>{V|kpweeBY5&z_xb?Hzcs#|-eTzIzCh!+h{4CU4i_Y%Cs@ zyQts9YneQ!8*F)~xy~}m;L&yI3}Y80{kT7mZL8>Syt8{(g2;cRf0R!bf}ZoVsoy@< zzW39ezGX1Q;q-4VoG#nw-9mxX);_L+z6{xY^OVlwiuQ}B9>qDlo7^^F)ZmU@|D?;l z57oYU?}7Tfez5fT?g*U+XcQWp%8zvXIQt`O)mOUs$vr~xQ|aun|LLdvu>=@hA#c+| z(DuigySU|6X+2%5^tG2(hHZGmzYHg4`8TwQ_3!eh|5wET6DtGrf4n~USMvIh4e2LG zKmXGy9=@JP=~jCSaGj;Q6SSps8-y0_oXEgrTchG<7jPUtS-hcr>mQf^Rs_g%tVy$CFU}JUo6%BQw*V94aI%rxv!0}_C!>Y zT(tI=K34kU=bhNvZ)8jfD*w-faU`rMSi&?`-@ahxorrVpB zkxurPv(aksgI4f^_oQ$FQe;xALv38VZRYMG2O)15vz%0FamZdpKKkZa;oL)kK=V&= zm~ayGF-QU@+3N!>i)5lQQ+nk=-~vjdYJdF960{FNk|hy}YG0a6{A57Z7qc=C0k@Xn zLCLMiSeJ$2Ef|L+I3%q~EifetT$@4{Ic3`Nr57R7pX`bpBfXqr#_ZG!KhBaq?u0LY z70^tEydo&yW?t=>4g}_z5-8|^y^K|*0q+E@WKUtWBfw;LbgMgPru-~8B?(GqRj%2OW=+82jTpfSoG$L!LY0ACY~&M}Y(WA+X$jLMIUNSZhOk zOkWHQ3J1VHk#3W59GscT4Rz*6I*Fd+-jTI=t??r}|n#j8?Kr@2};)xY04oaCS zE{m^q=5i;kS!Zs2Yd1?Ag>>}J!q3E)D^ddCAHk3~d|yz9>%i6)Gc!&?bibCRjE z%U-D!rNK4slu}53mT*3@yGBR#$6gxcSoo4eM_gIFv!l1c4?SQHP2QniHqp53T4mw=kVL z32+_WXvWaqq+%oN?Lnb6Gx`Lalt*ITjl4xK^I>i#$C0 zH28OzEhtV-T6w_A4j9Mb&qh%}p5v;tso$F*J^U)4$45_cjz)#@bS_vxdP{{AGRejRJ!De0^&wLT3|nMl7Z= zBq2ct$1N=2$dRS!z=eSF=q`1jUmB+ND1xe^=hDsY?&@Xf>)sfWe24gTDPiE)a4uRs z3=w?#+$Q*k;`?^-TyMO5q`~WE{>(QMs&7l@-6XzRKR1o^K^sGISQ0}ybdgJfjx2zY zK#`88F;cEjT{jwpvC;$@#`I9q^mrmiWTG{EZh3xBik`~BwII@)5;o~lj8Ze>n)xsm zGh#E{=-U2%@ELU~_-InEv|Gd=z{NT{dW?vueea=qq@oLuEO?EB`~uJH5ybi_Z#NFE> zH92aZMPe#|{ICP3++L+4-61O$>srMdNH+K}MrUpAD57v5m)NIkEYr0dq_V9^A1LHU zL&`Djeci2@Tw(HW^xNEZ^VeGwtk#8TJnVXqAn0rGXtl68Slt|A4N+S`JF zGB<{@yQD}Wk3|aEs9knQHhF<5H~vh|^G-!ZfE(ZJ*L`pqaB7#^*xt@&?XEsQ$P3Xp zzY}H4gI^3DmbsmkP^6oqWnr5fa_rq0ns*X=CLxI6np3|;n4>yX*1C%Hy`yK~D)CEL zY~b2^vK$=f4FZn6XM^_*dy&(|f$ywc49E?~=xaUcPx3~|#ZwHdJzh(g^znOqx8CeI z^Ekv^?5f*GHm+DKat~~&Y{lxiP|g1Qg9|IZ3Oq$@{8hYh!_@j^{7!u%b@cv_bMdKt zf3Tt^Nv?u_bFoQFLP^jk(`T6vznFyvI;j*c%^Wpwzr|D81P+n{u6gK$(LQ-|uK(g_ z8`%B4=p;SAJ}=1Oly#B8@_p_3;7?wLfglO!C zYZX(-CxH${9a5Q6z6vF-eL`v?^m?k3Z6`T+So{2`#Ysl$8w^s?t?Fu2GbOcKYnmk} z68NJsM#n>1OAUQpJn*NxHcn(BU46G zh%gi0Y2m_yZra@TN+FoWrW0%g2hMH|r;7jzEhvmrOo+d#lxBH3x}Z;p@IZCAn>5`r zvuQ?ETnZ?05-~X8xOYsvBYK$VSyaW%;g8%{?Lg)b;%|SPffM1gS06XrH0brKJ}BL# zvi8GJ8bIa{nx~RgH{BEi7_$z9PlLMo4YdbMy#?QX-$H}AU`S=j$}f1*`?gjF zR9Ip{W;x}zsWwE{H$0(C%jIJ!s>ZQR+r~&S{-M-s5GvJlXfjey=*n?_ILVacQUmYy zIK~2x{3Hc-libLrix}#dmJ{quG@IlK>3r+*%F@b+)*3l9Jvum$C+%VZkhf$V;lqlx zh1Z7t2|+1oFj{=g-7X_b9qp8-gR>0d8oR%;#TG}INh~SWOE`&ct4=W?HWF9gZ!dRp zur4)`OBdnZ%*RWWBjS*hKeECVbGApGGyF8DAu3c!?m#_n<{FVANvg@&c5|qaQ&ALF z_$DCgpQ_@fIg(02RH?uXRN-UkhmnFM9|xEDR)!*Ge2;qO#w8kR_fx7Ot?wpuuhPPP zw<1Ss>NIsk;Hgh;B-P16{fqa2x@&6r#)HqqJ$)ZpG)L28R^|q{S!9QQz||3%hyD#O zWc%N{QvOd-0}Cs|f65E1u`K^8YIyGS1=S^>L-nwPvnOjo9+lX_5Jlb;3K)=tisW8E zI!T0r#|@a@-FZFf-Y1E-2=gW^I5N{ok0I(lU(){o}AEvKs z4Sl<#QFB-t;ZkjOV`z5NmH_`+{QPrvo$y&I6Ow=&nVilA9EpT|2DPtDu0aw8a>6|z59Ub8I6eQ7<1pY%Saw6;CwB1ZrHJod zPONiFpU-#4I|@C-Th^NE59MERnZ2adE;jw>vzZ%!7?c9lN!@{W!|l6xeS|fN&3~UY z245Y6AcytPqIviei{nVFgT5W>3NxTCtlDc1Y-<5f4OR<~)H+LVcXrc2Jx*7mmWX=Rar&zgstP~RsK2{PFweDulpub4Tx!<065P-COmuTHDWwX6;=c| zK@e%pAvZfE5wB&KzUEG`Z=l8r52UXW4LP*u+iH8xKou@0KtYyHFP+ntxbvv((Oi(Op5UNVPn z68C!^89!5ojF+~{I&1(>X}lN;g4L3vcn5OZzo zSwn!Y01ohlfCM}U3`=I0QymazZ)~gD;xVhYGs=DD z5mxLaf=R@`_IBVclb>1w_}=?#ZF8Ga(qM-j!X|_BLS;b*ZGYpjVP<98QyC3EPTa4v zfiWPg;9`@on6=}uvSTeH=3F7Cg6G<|q^fG6U)W5gQjV9EB>qc_3f&TBtu`953e;!3 zd&z>uge_MRBAz`BWu~7=OV!_i1)Zy>DbaG0qeyq0@N)E&mOm%uDa%g>G7>|`p2?xb ziFF|hD|-g8K2wM))DDO&aQF+vDZxcSlE)-LxpL7Kct&G>L9E4~Eo1*ww8|W&TDJ2{ z-9~Z3Lvnn>;QG`j_sC~+*~_?orB$M9o~CnCx;^DoC4z5|ykmKo@(uNY@)|lv+0-jX`H|^3?!F{( zl?TYdSrmKbk&E65fF4qiW8l6&7L;U_A8>iE$utSD)nT!T`a_(MOfG$-kTp=W$W=4m z+;yCBKw?@*VQ&sj%Tqrc$j(S6eowZ)a??mZ`F9Jodp=9jMSQS(ifefMa|ON375loX z*%eP)9b_jCaPZv~K6Rk0C(LhN)!8=+9C_JiMn*{rMoGpTbrI0^Konr2-$Y0tKj#$! zu#{Z0X~DaQYe~%(^KgVPccbNWV)+jawy^^3Dqdj~p6NhD>Z{c@zcg)^^#;rXn})Mo zlSp#D@nP7;pnA5B{gpbiH zgg_I1l@nBWA}d4OK#ga8Vi^4TveV$)qb7fb4$?2|WkB1a@@S{idch6Sy0LkaY_X&J zV&puVtmzwyt=IxiNx$GK2at-{PB7fngZ27D##Voa@YBb|$zQUz2$g0fDSnpzHcys6iEFL)}6zG!6hY3n-q`kZV5V%yqq@+4GoXsXN+x|f$Zpcl`9 zz;J52k9kToa^hzcpzb;l-2A<$YbSyb)Zb&HeSv%g+VVjlHt>DD-SaG9bjDrNTf~sw zRIN^#b!kh$h#+?aDnev-u7bJ0^L|II%Z^i+t-6WO1AhBMIom0#Zl4#u>+*Wm%|jIb zr*Lu{(s<*JnSbF}x`U?#dLcZbPr_XLi_k?!2jSEs9=J<5BfbqOybIhm`j%3+N8^-B zM(DL)2j06nFk0z#pCFf)IGtYaE5w;;%6t~Hr3VX!z!w7QrF|Cjr0~>_a62w$89_@{ zQ{Nx`R1b#>vELS8|2;S0s`Zn&Gat6LJ|rH47iF{b(>RmxaeFr5&`@yaTJe%7ECEU$ z1pf4H@suE&k$NF)&s6#g46Pu(M@xPI$V$(_Au!Loa`_DKBkTjM$eLs}^!sz5Zk%tFn@6$gN#Z-lU`hau!E`Ydxe*ptVuup9JpWw4IROfIz^nkwX;S^P zLr+S9bxrZpm3eK_-4GE&lQ%9PG_CwYaH^;wNV-4rw~xH#HCTZgp+M zv^CGQLZXFYW{2z77yzA`pc!mIg4G`Y&`XstI&z*c4YLPwpj>OqdB?8YKr_J;e`;S& z__*C^d{`&Yu&Uz@wZ1}wG>6dxLqIPvZV(Caq5FdJS=o(1dA1GR?X=DF{95k@9w0SL zXji8S!uKQ2-*)e@#f&}n>V#9j@H+Il6X0wlU7W}3!4lJa6wARzF2Gq!Kalf0AbZdN z-{;=l``#2=Gs@osTDh>~5$+3;>z8m^`7a2tD$rcH(2cF$6s zKJ}kH!aP5$a8&ROylu~bWIGtO>T%L*BRf{Vvjk&Za&Mid)XfbK5n(NbeR_-eelTbB z0{2l2JzkLJ)}y%et)l>U+~uak6WuQqoV+X~Xq%wUj!ulNrMAhedTb&qxL0Grn1a_@ z>ox`X8eqLu1M_rQ_CNuMK92R^r866ocK2R6b)KEniTAnHJP!=`)I)} z&4-=e_xA$Fi;`yBML|zOeo{s>Iy|^?iGu(dCh3;LM|(nM!9?b`;4ubxn(6eoq@i8! zhqDYzPHZ`&i=EndHQ!Ax&hKJ?nnb=$xhO2c|jhkUN48k>+jT3(Q|OT2bk!qV6e9E9-;V3+)uiP zL`;8eE?R6ju(W)}9cA>Rd&mqdw#?e50GcGa7nn}-;KEYh8ZgU;ppWclsCmo7Lf^VT zmclXWG1aWn_T;VkY2wrC;{7~7xO&6{3ylvrg)zVe&u5gFrQ;_e4s^4JHQ_cikTDrY zk@94Fz;Tz0el_pS$`4hri&CgD@8nPs5`1K9{=gsxiAI}ps^g>uTNISW|-(_V?9c zC|3ls<|55wLUp|hi^>D&7m2pg3%FS@v_D-@U>$D9hAvX-cJw+d`jsTOCQ6M;O}>Rr zCH7(oU4G)6YGw{)ff>s*hI8%+@Uq50W2TkGto!}-oFfW7x-emgc+pVLc#=*ygJKg? zl=y(bghUF_$T|V0_=3q@6e*}VB1*;ul@#q=k=3!In&fqOgHlNwR!LW4mB(6DB!&za zmn$xd`H333sXC^@^9=KE~n_^ZgYxx_n%B4c1qvfqi`h^D$8}Ctvfqxuzy?YvA2Sp-hDi$-PN` z_;5gBHGkaxAYoe|7F?q0`<;Dj@W_Fn$`%vV0sv0wXUv#SB9I z7_$d(N-_~G#u*wewD6`CwX&iBJYCu&B2nu}&1JQ!0z2t|1T~_Z^AoJ1ZMq`F%YHgD3Nm`M%-L?+k=#~?W*1P*p+P6-> zA|2dqVJObeudT%Hp78@JGs!RVR_8lGBK0_F%1o=R#p8G~-isaug&p0YTFKGvutlbP6L*P00H4tV{r&JpTWNlC@-Obp)I4bWrZv9e zZbD|l#m$c&%0r&Gr{aue7;L?O9P+XBo}J^2lsbG?AWf-(X@%bkGkxm5TEE1$!gk__ zZTXm-6`xa($$Kd?QF?{yZ2N1PqXmRlNgve);7pNoE_$Z+IZhS8m$`Zlj! z+g)uqkv9K)0eN>jjy_f%wK;xbjNm^{TV~ifnnDDZ=T^LPR*@AgX}g+%&)pUHI%Y&8 zdmMa{=(MwI&LZ79?A=Gpk`{MC@7IK#@ccvT&PvxH?%&&lPr1X3fV2cxnG8`yZ(SdT zf{0Drp*~lC*xn+2kK=r0HFy76;SYHW7j7(c3UGL(4R{4I5x?#9JhVa}Em&N9<>^yt zG$_ociu70x*Z?#m>qg)fqVc6_1{wWo2pd$=acgdPw}-80^w^=O&2q$(TeqyF}0W zY;V4LKaGB?-{Y}3QoWI^pqqL*1Z&n-jb^w_>fDfOhNLb$oH2k_J379=mQ`gh*BnO& zj>O9R4aS-#H}roo_Kv}#HCdPLwr$(yIoq~v+qP}nwr$(CZQJ|4-|eoBj;M<0TL0Es z|1vTopUgSNn2f!^tjGmqdX-fi%*D%f=gA}69rr06_U%K~e`HXhvMif?XyMHyp$5Q` z`|enFrY)!)p`SNZausw9GxuSC3#rn4s$6X}G5iQ+cTmI*qm=8~w9hs}dq9`Ek!G69 z++-Dk3q5l%?`hECI$F5v(IYf85dduK_JUFU zYG~Bi4(4#hMo*(8IO-VDsNMOOW=PK!h9g0p<0J~|xTsOJt5QK}mt)9$%@ix}iP40) zkVfVcq=m%46{M;)y4_0m3Om6yO6Z`yqzPk5D!{G;6?R)-!xcdObwNi?>UqbTx2*l+g9L<99_aq8$ zG;<$`C*V6t-*9WfJm|{~6&tsdzfBkRYf$Q};e9&$2q7IC+Pll~_~H$AJ=d9i9!AuO z>yXS-4!Cgnta+M2f#0b_JzwL^5hq%2m_0NMjauM$lb0lZ6(yqjL?+6pyh+P&sPF&f zI5!I3UB6k;d2aA*@J#~FKtFa-!|ts=*!_5zvzKn2FtA&ruI~)wZUMJ_Y~XO&@9D)y zs&9p6HmG!E$hZke1$8~g#l`q2ja==$Ha=eEv@vyO8Ty&@Dgwl8EbPN7uZ;~t>-+jR zCaHlpt9eprIZ}S)(=sXkocjjvmTL?RLkN_rJ+$*E;W>5t3G|}VH-`P7v&lgBt3536 zNu7=bpDfvhbufRBrlYm7FE;|`67lLjrRiOaqcE3s_Fu&^G$?f0ch-3{c6rKJ_ca!;_RJZ?e7CJaO5wNkb|DT{X zCZ>PV-v0mRzwsSvJ8pI$dau^@89o3VI08CxrQ0WDZcS~q8Rj)_Csf`A5Z z5sC832B_u2kLjZmCBZnHNyaBf{O@#RasE<;N-^Y$ek;oB;#G6W~W7K|ajKi_PUCMJI$p1#$?nMv<2>EOQm~ z3v{Z)=|O9dB91!%nlOq@)d%8IET=seSqbqE3NR4EqK-E(H=&NZ#|9velc(I*o#crQ zT1Cwj-YY`U&Do`@U0vV=0Qj^QxunflMo!5OI}J565fwJL;iM`srXu z9U;Yz1*m7Z9dRx5I1uV1fC#TJM^sEd8U;#ih{!1;w~~%vVpJNyse;}~fQLjh=sndi zp}Mt&kRu84L;CQrVHl5^9xk3=C9<(0P^_viKiy0U(?yNxpqvhWy%}(g3%@Y^-Z~}p zdVk{#A3VBoAm1h%!4oTEoI*yTKQ0b8cwdLhxxHLC{Gluzu3~DeP;$AthEjEyTfa8F z0Vo*ql&YB1TKRk2OW^w=WmOy*TGBGte6d>!J$yQR9CeBy55N7k4W&$oi1)*kiBih` zx)@-Z=1acC{CV6lWm5x=nETmiY$Gp1uc8nHjcm_V>K3gRfza zpCeX}4lwmN9VxLH z?l~`dZI(CK-6xwndyyl2J2hyqpARN`k=Ptu-KJpo&0eBSQQU2mIsjar*bnhmICVj%5WX`GbISZ8-~ygJJ`<6UsAygOuhWtyk2 zenhR4(vFD-q7!1YA&~qD)0xmjtV-Qbq-WgNT+Yse5VvS!H_O}Klo2OG2AE)K^Fi4D zK9z~{lTY&-a=k7(hSovkr)J|Dytp}2q4EA)%?2tcBGFBYBtc$9GLe7}GQ6487~=&X zC?&by=4QyK)kzp_8|3490&t_by9*YRVA3lXBRhYdgM{LQ=P81OCTVd(yCFHi*Zo%3NnmybI|S!L%!H?Ed9Hy||FjSsy;C zqL@MVS{o-@cXG+los4XZ9Cf+dk30~R<*{DhjOA$^_jq6mVUtp!9)laqiwDp0?HRPm zjuqb6C>d#;->w+RU-{@5Q9ZIY!?UlJA7C6SDH*Ysw|@3$zp2@^?!0t8VZ>X>!j@T0 zxl%pbAeNk&J`Z5QOB)!jtw-5 z9zO41!TcP5#Gc3@o{xF4ozB+bu5y0cEzN?&Kw@TpjFScJikuH5i5J!v7@qmFCl^X zTWMXhQBX1QF#(VA42G}tC9S9p-_3nue+e$L@!WEC-GQ&+*@Yw_hS*DWk>K*-bN0*i zbA7cuzdIZA!*;+Yhji}=#CE8TS6x~7xSL=G>{we6G|m-ivpoT&f|Y^+Ioo;mbaq;3 zG?E0zPz<}s^(xi>GKEviCY$hPyuC@iNu*5{J&ENj{RNBUN{~aMaUXTg^_-d2M@}?( zIPlwqHq=mmoqCsHS{I)fvb#=?Y<^_~NYAERi|rNu*F})p?AW+*lXaBAQ4&}TaxwG=>Xn%S{ZAK0v%I+Qal|DoYC597NaQ*pji94RVj9 zvX7^26l)V^iSu$O(;Z}#EP0y40ZAF}BI_wLe~NTWJn5Hj0`ti7Cf=-uBSPcK@ey5` zix1xe7Bj>%)^$$z=r|wECfY#>@ztjC?H(Oh<5$XH*iry>!Khg>cz%BIER;+gU9U z$wv%55p~#P-*gf@-n|B;iv|>fsGhd9c~^k$fQ-O$5)2EWlquu}cLwhGaVu3k7Ov)jl!Zowe<4d$Q5<&1&oFLGAM}Ou2#K%vN!? zA;4Rboj97HnKVRoF*HTSQYpcY9Htf$hdyR1imc=b5M;<)VmzUneC?u{fhQoy1uvxK zX-DB1B!odudkQ1GqdP7WpCs~kuG9#Uon%x$juu!!(QM!!ut~RUJ7rB6W`+iviyC?h za8Q1n)aXZw--B&5H08VHv+%bYNkX;yRy>?;N*CZ8Sx(NZaMKjKJg4IXcoT+`gKb=O z%TU7Uv$cjwQMb?IP~V@YZC@X*ch)i&KOd3!71(_()AoH>#y*~g-S?h7%{PsOReE2I zvTTJENeQ!G5e|s_+EEFUJBI@wqR!E~?Ut^qZ#BUO^T?e?0aAs3=B>rr^D*mNo94As zz+mP>$<~|=y3C9dh{eh&h6@bR?B<_sz|ij& zP-y!ZH_n-BMge|}XXt9*I@^zyyI4cxQbT%n=Uxlb(uaCq7*aRdj$@^}Bfc68DdYwC zxIii*>pq5c6^6P2Cj>&kt-u3_L;P$+q#grz0r$QuLZndwz<1Dwe>VTLvAeXEt_>nl zlUok950ztH-=DGv>7FXDwIBIo>{R^i4u>E+8LP_Z=X}>gH-0}55A$z@(nT~ds?Ai( zURZ~H>ycW*ME~@P^R5XM_B>7dxLX8c{W)a>8xJSM7&5?6s>ECG(2>;SG9`=?2Ps1) zZ(rJg))KzHb+qBYP+M%K^Ci}B8#y#Li%pp4kd>r04uSb5m+jm8C?@qS^~+Rbqjh)N zdyPI>O29VO&J(C8*HiK_xjTC*1FcixDCQYzag)I!T)+Y_ueeDsx<}9Yjvc6khCOTs zT%^j7X*Ui~T-*4Ho>$lt$VIS-t*i!kWppK-+8`NnmV?c?cesQ(!Ca)Z-DPp#l>Cy|K~5RIZ2(Z=4h?b91FY!ALf+hHZY)CiUfZtutt$;w`)D-z zTjchp0kq9FU*{?iq@W(nmoI!6s0khMX|qpl6KA@RTMyDiNOD7CQk#3p>uhUcNl&)m z0z*YF&7~0Mw+XiNjE?X3BA^2Ag~;I84xq{U9kgF;#co{hy!0ZG8lbBSG3Qu66u}wH0F`aaaZnKmvGUy<_w3 z^Ej5U?{tH@Nwfysq0SisOxOwiD)p`2*-X&x$O!;6t7~slTx-P%@EBe$t9@zBFC+7v zvq{99zIAeZXuDCIA&}87eJEUb#^dL{B*n!ZgW-!`E*EV__xMzG#GgD_c)p3*&^qve zy=IxJ?|i1B9m}2+g1;wd{>obxP8Q|{X438^nD;x?5QFxn6KV4DL+@HiG|l5xYI~WT z1zgeZD9MIG`>k1q`lYU6$-*`!Fc#x?Utq6e*M6Yg(k6qD^oee$B1tvTt(u7sM4@>~ zS7&wS4<_oewwUsnI$8MqDIDzK;*M%)|9&uz>K5S{W8mlyBx{ewm_23NW z1$mjYv0nt@$Ry-W2A~%OM)pspT*yGmU-%Y}M0I+sF3X*Vm3`{uecL_wJ)pn(VwPnu z{Y#BmMjE^u3&}UJpE{_Z zta1>=p|+z<{K6}tMG)cFmO0!RL}87sB@lVx#Q`@vFX$I^eM+HPQRospWZU458016j zKblhYz1agLcYgCPBOmo>7M$o@%3co2Nro_V<$wQ%EJ`=_qF0>t3Y0L)@2D2K0XYlC zRn@^iOfifrx`u{+al|OP@O+?1)1pMi5VNyFqx(~GO1o; zhRxoKiy(#I)Mp%;XhNeTN7!Bcz5a>@#!&}FNzurMpfjzg;8RDDolMQ63T#da4u@2j z%xn*0U6~lVcaLBBgS`GKz>Ct^k}*&^2sQ0w9SJ30_v2`kiPTlGmT#=^ysF3mEpTpO zSAOA8vkaU!$fHwkWyX;Z20$FEC#Iwb`@;67Hu8$E%atL(E zl@Tjq$j>Prc`wrt<^jQeuc1TU8k7R+dQ-a2w4{ZWyg2DVg9?gJZ{`v#9OchG2ATGI zKMf`-@CDOV!7ia;o~@=@qm^?`j{kQ$M{zEQ!=yz}D?-bF1<`C?NDB0!cnb!}EF!cX z*CcM?JyON}+&3+}<=;QR6?K?ippSyVs`Bh~@dkoGig0{_5q~5l_6+(7I`3 zs&;KgB?S#+%_`16DZH#6iSD71@f#?R5B$gtBCAsCdk4|Mz;|UB_%L#5hWVjLkf=qF zDLIDkh*J}x&2vT4mlGZFZykwNJ)Kv=+7u{(ns73e-Z)Q(BOe%paj%6``-tkUUjm}W zty)VOR-Ve^EJ7&K6~hsWJ(C&56p`Rf8JS4~(T$6*94Q$4j9g|gWf;yh=(#(vajomO z^@4k8>jm9>C!Rv4HcG(pC(ab^UWnV6IW%Upcc#-`N*dT|itVARXNi#R zcc>pc(LxNB@)z7 zxVL6>=J7oeX1G$!dG%YWt=*^bfY^o#2(s^}eOt^#bka)eO`I$B{yjz}^} z;bd1CVal2sVKzeYkxV36FP}V!;bJVLXtYo+Xq_~)69C!d*V9#xVI8_q^wNkP#fzCc zY9%&@CbtV&G{!(=n#B-piQMZKe|ceD*~ka#ot(DbWrz8F2;R9+sD9jZ_8juvHWnT> zqo!_$JO6}O|B50X>Me}{)VCfXEOr?)z+!(I0N>lXR9$`9zDD4&hwX$;URq|6DP}(^ zWx0gPCvm&W{+8D+3}3=Jb+{vG=e+4VX?s6Mq)hT29JGex8rj&osqyYSlY!DQ2a9#nceh-Wv zt(iC`0fE;G0unk4-EVnx#+l}V2k^qC6aC?PmnCZ_N*otAd(n+bnaop74zTrgAif?M z;t~?8xUr){BcSSm@^~{WtO~NgtVLP3FT9Tyca%{L(g8x+OHp9%fQ#@VHT~3qnRrfb z-Q1B;n(B|8Go+id&-8Z_%?-9R8+=jXst~@U4-U{(CAH0>V9iyR^?NzYl>Y9Wru;xO zN=IL$vwLzqp9bvx?(*{$KG`e%n(nTXKIUB%I-dhW+ndg0Bv57~78|W{b__l^e5UXd zFn313pKO2n>*pCD3i)^6cI>uys<)OE?=N%)YeG_IzGdl`a)b#Gy(#wXM zM|DHia3-O#r#sNQ{cq;ed~z}Q=mSQl>=fCqZ}WIU*QcvZ;wE`zGSkBwD9?}}oNo-L z+$%S0y{4=*HO>d~?KlnM4MMzu_B{@x`!96Kr*N@UVu+6_c!B2KQ|{mO65p3k$?2D& z(5J3uT_q>iM2Omvdn`^kuuf{LEl#GF9-_mI?K8`K|Gv4{)irPCsQhW6L9cM+EWel3 zJ$c^DmK}xlzMa^SrB?T3m9}%jgohs8q;9FGldco3M)d4Nids*$_A1$=i&Sn3r&X?9 zma5b@q$P=Jyf^FOXqt7Aw?C(Ao|r>Dfm)+E8=SiMMrFB0%19s2lbZce;HASv>>xhg zJ18L2oN)&eCkM^7th!H3SN-8$iHRkdvS+nvW5>})o!f*SpSij4y*OVTy}vJeddZ~( zu5UdBZ30i9$*rd_i@>0x*uUz4i`v8UT&p;(Kh=GG&|y*>XMS|x8wWYX<@7bV8*YHe z5Rrq5{F(2;RaLQ6!?95sjuu2W-y2Rc;mgnJMQ{GUv3l1E??qIkp}LXwSfmZk90nKv zEDB+vj>l=G^&=dR#O^(7$>h}NJ-60**$dCtHN4y0$%Z4c8AvdY`THAc#ZJ*3L7sX5 zo5N>Y7PxQBkogYIuNm2j;b{9sC0zIF^*Kr{l*#_j*gsC1y?@BxbP%zbKNEiODPP(K z{u9dmhd6#F7MA~7d3UUFZM)fp_?y!!AjZJAZlIiG)ZL`*&q80>$ue$WijjgALbX`0 zBKbhVuCDUryBjZhF&vLXEtC7y-=l^ijCbqf%9Z0@O1&CU^JRSbZFad_Z%mPMvK~?$ zRT6P*-eN-?V``qWs49YdEP=aY%pTpaonxMH;hv#Y>Vpz|&+77aAH+)YOc0JXnRSE2 zIvn%Ok`~Mk`(P~L>KS637V6QT5Uj4hiqNqa-6QiupI> z0H(k*nNs!Z(iwpzuJd5e*u8-d3vdr>MvxaiQH_sh+B{;~33D`<>Onn&rqD4ACd0w7j?ektNQPYOmb%a<^crUx zG;dE*!HXmdx(WGZM$ZnT$S0<-bS;*CDbyNiY9oCM@=&iQYYvJ_D6`vAc#CoM2s+eA zzbOscJ-`TY0VWs?t&jg?6PzC|fvwb@?vD-A@OSnsA4J6UEJyu`(i#bDiaFYjTn~^_ zkbTY`L)~67WwZo$QJE5!>|7hI=sDUS>l0Umh2c~@5DxkbpEcRf> zQwwPKwTed>p56=NGsF78J5KR*pMo0i8kBD?R7(X(Hj;Omq~MuMW)lVzh<5D~b`$f> zruwF`=~C_-%OE@`=iEqmjoR!n5diXdZ(pn7C<#dMDcfnxJFj)CDYCXVJ(->H{!7Oo zo{dn}pFD^!2w_2ZsKjv6^{h>XJiVh7n=&62!(mSpX$+z{r|k^mKR_fb6WKJmAkhi< zHcj5#OMMoeDaPgcF@i%-cikcdOp8jT=19plEe*g!uLC*pP<#Ur(t7+0O~NA9JsS*B zXy~IoG(nNX3ZZ^!#E6F>!y?+iLYRM258NklF)dMb61qVEklDsnWGqHOcPZoXi^Nw> z#$foKUC@{uO&8za$2Dcq(&x-EBDdW;e#QU!KKVL0ujj;$m6hFs z&m>G!FM*w;mzGhAtTe!A^|89=+DD=0ov37}Iz?{9Xce#j*koUH~ zXvxjcjbo`6RTs(YWmOHH+Q6;qoq3$dfXLHXP=Li@m5GrteZT`2b^i-A#r4&J#*{-B z$EXXFelf$v!)XZk=PLL0^Y^N+`&rWN*XK6?7vk*!-^(tPR`XfbcOX<9vn^z3VD-rt zGCb55H!C*u^b=fkP@(Ieg9z}C!uf@%fd=l9xh+AK`G7|vi2EBHjGKxpSQaeCS>yBG zT*9y34d5dj{zrws7kZ&b_usV-K-2JRmpz@ekWNZ3Ub}A*!Y7*(Du8DnNJnnA&nNTW zr#ciev-y6RI&!e9tEhc^*P&WgIdW&7m6wTH9YX&{mUJ3mG+E`9O&`z0Sxikp!{hB2 z9mCcmqt5VT)Gtr6Aw*|fgzhjL>Jb4Q2DP*R2Z_;M!n#0n(t;rq3ONz%Gzg_ZbFC`Q zWP39Tjsud~>2tk9ArW+KnP>9bdD9JqRCGZ^Xj}MM_?Onsu}=p^;B3>TKtYm~TP@~? z31zmphlylolpb-dcBsgjomLlx%gJE0s{qrDVCByFLU#JId4x|oQDS>v*AaIY_JNVm z!o1Sl##7CN>{#Er7j?Nasp!0f5IIfPE;vZ5VNM zhj@W4joIOE$yjRpiGyMfekh}T`(KjUzo?R08xtZj@1z(cXH!D?|UzK3P_1?+PRk513%XCj6H}-7GbfXz9xUY98ixH+r zXRq>Nei$*LLsP-)dP6SP+BdUI_WQ?TSBygS*)wdco5v)<~~lH(|)ZQvC9mq#HN=qWlxAaJk{qm8fBNRzVW5oN9h$&aeX309Dk)u z;Y!7;wr7+m+mNPXFB$LI^EN}0oThzCqa`$|k2RDvVtKTTJ()Bp5lYyUQRq=ca82M; zSM|gn|55Wd9N*zirO*f<@TBE9*m1tOfUC2@am0SBBvcG^logI--n%mRt!;cyr4NNS& zZ)0r#z*;<^v7VUlx;Q4Or1UycH<`yjay7QCn!Xs{dqPx^ebdz&$pP3z)YAlAdzaE! zWO}Ss4KkSVC$I7a`waao6kX#D+EzVvK{Yn1xx6!RJ+fwbdxEenWbh!{={Wd91?$M0v)7Zwr9```vZm@vQGCAD>Fy(<{_Eq!h?AAgQvk1?;vl$K zRmPgsv94sbU#3S70j^F^U%o{h$ym>tBIc+JY*37EK3ZzPWL z_*kQya@Locg^v~)huXKL52)igP8_vcPDVH<-cXTrA8OBR#9*8;wwPAS*&iIKI8nbL zBj2O*{9)7m9FajeiX@84a=``HDz`O+j%Epr7Sxv9}0m+Dg&otcQ42sEGryL zK%atur@J=MR8S(YD;-|~%HL$^T2o;T!$5s{C(5hyQBV~9XndQ$kJa&Jskff8LhemK z&1~tlMU6wYNJ@J83yi60Y4z`f$Hed-I*T#={a3ft|F;G&IZje`kO3j+_6OC|iR7YY zb%u-wZAg&YKSOg_&`dB)sWmP%@5^Hg14P(vuVo_}*P9uFl|U=~VNNg{AH)YVA9XgTnrFQhq1AvjTv^oQzOm9r zo>8#XKv!^Z8?qY`6{vM`z0|H^ah1Zg0hI)q2Jysd7BIZ2!-{iq?=GH5iEQKU8V%Ld zJFnS4lCN}!5F)uU6AI)BW6v%8L^Dl4;oo*EC2w$p19P z|DpWq5F|~NiiRJ@!|Y9r z?E0zKm2`iI;cc&IF)}XY`23pZNoWoW(dooH%X4uyARmN0L7b(RpQt}U422YkTt4iC zy6KJ{|5D`CnPETcQ@7GVyPRt_q8Yl(z?f`+m-aE&x)At6mF_NI;;(w)Vo9|VgMNVh ziEbIuW!%i>iE3Szu3PTOPPV8&0{>Gwz%Yx9T!v>PDL=KFt3Skvcod$M30yi7^07 z(^Wa8tIG>-21J3kMgSG-ZJ3P(tENb+M$N?e>OU7cogm6>*A(I}FPdvrEoIBo7`U$= z9-10(=d>ekIKvE_xWIS2D>lB~t0u1&mC$lE=WMAlMvd#?ptFGr^9X{Sv2qhsD9j+g zYEtd`gPx9tXTE@b*niR+2km9P-j3_z^?fG{Z1EY}&%N*SA zv8YAZ%H0B-`gg8@)7Qdq7OyrGI7{BWYIxdi;NT65sXm{Z+3P!$fbaz{lX30913Cl{ z$R(il*j6_53y@4sSZq>@=6deh?4k}-$(1%Obk5f%*wq_MFtS@o4N1I%0QG9k}1qWu@4JRjeasBQUCIW>@-c3|*{4Ry$nh|6tqH8#=} zHJoxHAKAf4i}&ACl}l?3_p1L`CcZLtY)3ta_uPgba+^Yg+4i&L?Ce`7wse;ZI}wk< zJE<}B7vcm2pxU$r{hVK>wRe_^<#~*L(BTda5C6j|VEOl;Hbw%*zYKr>rTt|hU}R?c zKT6<#dQblA2LTiFpZ~gg(5&RHguIIPLaBjGEl}yF+1-GdL_)%cVpR_a1VsXhJOpbj zW|P2}n9jf)Ul*hjse!752V{eT+DvuBsT@z$=3jcCfJ&j(++s7#BM%Zg)`{Fib^HAN zDl=nr^3(FUef#=dvpS}h%vVyJpbsM408~Fmk1<4nf?*k_sV>IECLHk%l9<0EpvQs$ zP3q&rMPJK+WkBN)Y)AtGWqz5DaqP#YaLy82zOYmj#9rH@swSLILJA z)e}~Xp%NFxI0h@uEhB)Rgd~!_Xr^VW*N*iA1gIK535Oa$A!S&kfJqF;pa5ME1Vt#P zP(Bt0%p)9NWY!0Po9Dy_TN>b&?9~7zB=f_>qjF3v6s(Nam|mc32&q_pNbJquCRLsS z%r=ZJG*Y>=)r*w?(Yu3Au{<_=9SGF!6s$$7C>xm^DZGX0hcOk*GCJj}_b4*fr}QT)M1miY>@JlflKoI zY}pgy))>Z2giA27h4eV0T=gi~WFMZ<*y2>lQ*Zcy99c^jZ8~POCh}b2rD}UccdO=O zL!Oq4f@p7mX+U|(h6wfmS0DRR1~XA%^~PzG%yar6z}9VW1?cpF{U-u_3utDOZmah{ z5#)H#O>H5<3!;aEjjFjq7ZeCf#v)=nZ90(w^oRxJ5B!Cd#bQLTX8AGX3JNp{5Wm07 z?%OXBbqGO7%=|yQ4x8M7%=k*706avl(RB8+TGgB$iiUAsfn*ni! zAKOGEhZG15Xvh-3RaOq7()$+L5OzN64BF?LE$41&XI5P^ysHh&Cm@jRXglV2A^F$L zw>SpjA;qGu&R$Qb@4I2Ub}W9gujb??G6>^90Q^bBB4SVxFaSnklGk=5mz}ohT&{_D zcB|Uw!4Nd^LsVU(7oui!6rJ4mUufP-HWqet_y zyBca&J#0%1$iT==P^XA{GcS_4!`zmiz9+QNb1e>g+5(L!8$viHj9D*BAr4P#mABqH zo`O1OzssIU7hAxzbUayZ&q@h;PWaX4?jv5b#$&T*WTCcAQ}Djs4R4odRfk2v7KTPw zuw?`%LU+n&f5A7`dFc3#4Y0@th>0$}sD|MAFetsTo>cjtfa>*03|; zPS!-Xw}Tt8V=myI#zO3(?&_@XVKKTS8W3`~QM9_5eX9S~qLPlJeUJk#@NVL{Jyo|C zX8JTbX^f+HJ7sk6s?1E-^TvINFNEj7Mx&4PUR-WoFcO?*qR(f545m40PFkh1<0ALa z>JUWxI`e)asM*u3rY*0`HPo(r-z^>W0e>xbkNWPpOs-|I+Q}4MY-Ga`ZK$b!I6UD) zBHJG8&X{kbvDoERohhm>b4l9>3n#v|4Tj6qn&?7!xnXUkbNQXR)fi@4Y^df!3X2>6 zt&PAoX+vYed|jN0w&H1e0`l$L%Q!r2SAVT*5BFxS!0w8~d~w}gR!lIaB<6}at3)Q| z&JNHJxOwK)z2wx2SG{1XMyPU2*;d_mlg?_F~;U$?Q@DtJ^n3!7fh z?)i^|X17<*@VKbHJscmWqRof<=~OpjB)AE&BWlpT@NyBa3yuoks;xhZ)b2vl1uc21~m@Q9&m*C8@o=3in{S zcT6%@oc_3L~(7xninQWD3OU+u7;(q6cxSh33 z{6&WZ0=H8lb?tWHeW~$iDsB6jLj}{kDp!#Yza$hyv1-yA3Y<9x-lcp_t@4Ol8&)p; zg17s;qeHD@vMaKaCH81E(k|qie+1dz3EvLPxBABrw$zXD$dWi<+i#+M(by$Srov-jyaMP4eo3(!wQN4OupDn_VndB~2>)FRWMW