From 01b28c8e03371a856cd681af01f504a8d03661e8 Mon Sep 17 00:00:00 2001 From: "yuhong.tao@intel.com" Date: Tue, 5 Mar 2019 00:02:09 +0800 Subject: [PATCH] doc: Add tutorial about how to use CAT on UP2 Tracked-On: #2462 Signed-off-by: Tao Yuhong --- doc/tutorials/images/acrn_cat_hld.png | Bin 0 -> 58819 bytes doc/tutorials/images/using_cat_up2.png | Bin 0 -> 21757 bytes doc/tutorials/using_cat_on_up2.rst | 164 +++++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 doc/tutorials/images/acrn_cat_hld.png create mode 100644 doc/tutorials/images/using_cat_up2.png create mode 100644 doc/tutorials/using_cat_on_up2.rst diff --git a/doc/tutorials/images/acrn_cat_hld.png b/doc/tutorials/images/acrn_cat_hld.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ba20d4434207d43d42f3ac5a46c776e635d62b GIT binary patch literal 58819 zcma&O1z42pw>D0fz|f6DN=QgZ!_Xy2w@51}Eg&_3)X?4CEg%gNN_U5%fOIM?%rLhcS)Cko1@ zp^ChWuIKZEYt*V|3(%GDdQ+=rTMS+N*#INCyH$=+-WK(KrH~QLk=mpTizrjHPE&T^ zP7xwcZ#uCS%eP`;MZ1AGb;2O@%i;ouEZ^u(F#z)&; z_p7m9L9W)&!6u#)x7!A{^C|uxeo5Z0TrzKiZ>JM)y;tE2EA2_oqWSu%tfKhVKOrXX zegh9i`R8GOo&$cQe2^0S`|tXw^ZdVF+n;7r1^WBCel9Dh?Vrn{_+C)&%UMP3PUJ}X z+!XV@z%u_(YU32eClGsg;Tg=-sxFEzyFYS?$_nkz3uBw3`bTk|AM{g^8iHx8)co6R z1Yal~Sqk^3{gDQ-&RxhS5J>rvuOH)1q#3Xib#yv$`E{|zyXc0%>Ti=x5w7KK-6&Dxlnzu#XN&EMj_Ir}_(mAGJl^dVlp^M?wiewSr z$^Q2W4Z$TgqGmk0U6dSXLM{4fdYWVohF@sMe7Em^pUz^V&1i1Ks7wbw2WAABMHC`Vk@#sH z`Z>n$UrU*F{7WIoCr118j5f(ehguW5`MFX>u+769RFz)xb4JI_b&}v@4QlW459^7M z)&hEl;HEG*+-qyZEmYFycTxFcouI$8*?0S@{eDIr9ZRi7yh{6t@i#jV>&%}WJ$K}*Y{Q((R}X8JWkDd7#$Zogwm(AZT(X+ zE=MKy()hJI*Wlvd?AQ>$h|_YrQK3aiA_cd{`p_O#&Ll_go#G?vGlbt4`(HVA)jHDG za7Ys3T$C9} zk?Ud(BZy8k^C72frr5hZ&f~F!`t3tQwX;-eGc3#bO*k6*14qG68UJWHhr`DVWIVnu_HGsYSjAEa3%C^6&(?>O9aYV`wEYz);v;2Y)NoDAG8RUP`x zWIVRe?34e2)7XLDq1Q2)=e+m}X69!LpYA2Q%Jn*@F zL&(DQtIK6&t3It&kMw}*2gwZA@|{e$NxZP7=> zP^#Fp{_TrduU$piG1J@rj2&kM-Fy9&pw|*+G(Tg!aY`)OUk)XwD>r9>0C?+EV z7qjRNe45mM--%!v)_Rlv@n+_pEqT$%?lSLHUr$z20?6ep;mOCCcn$Ko_v6Y4qP0{; z1~+p*E={?Tl8p6vSkx;w5iHSLXk_;kCjLkslK`tHY>`RAh`xtZEaWf$ThVR@y&9!X z%IS1hTzNecXWV?1x zVeD;`owrw~+p@(dtoKF`L_{gBpQH)4nn~9$xShj%!oyUqB^1A>a5?|#cVbr>fkW7_5CnMJknseZwEcVZT~mT6cT6~}9L1W`&#igQ@Jb=>aH zBgQ(ZEWf*BC1=~;EzRve?V~hP+x`3_i0y`>BV}^ZDpoRuqy%QLLN>iUHbG^Df2lqa zg{dp%O=6Kg{Q_}h=>%L^*(9Z_@YM=7I1j^|cWh91_)9sGmm4T3mW4bH9moBy&#iMM zeSXdvq()a7)JPr${IvUUabP6mormwPH2apgl;Tj+q}NzuK4VW#r@v70?_=QXu#-HS zth1M^b@=AtFc7n4PZoAL1L^QsFdgBH9~}TUOL7a%ST6#GVfx3lBuhw+r3pG;0g<0ON! z^C(0)w4$}H)zSafoK8E&ZT|s8f`2Va~TDWRi3U%K{ zEPk6*a9=lQ=sI4xz390Lh}QUdx!$bqa|D>LZdTQ^GUfg}uSqQyV%add1TVX=tUWxX zoM74Yc=>t@=7O_FUP)WsQFJFZg&>zLa)0UbDOOF5GV+dsvmc*>1|`1s25%BcIu}wP z)C;s=iNdPHgdBV*-P6?FoH#WRdA7Qx-$ptP>;`wzRBa;n3Mr%ZoM`?+8Uo#!`aEAU z8iM99jE1EAkeA}#XliGT&Guil#c%k@58$RBwXM(*D3>fwh6*ND_3BUlB{7425(XK) zsP;3=cpcN#!Ni56UqhU(MY4LFyHp!DZ8hwYSR}za(yTHSysZ2i<>TlcGB@O$Ovsa3 z=x4?xhZrnab%`5jt?&gOo*ed^5--)24?_BL%(4pn4^m&X)^hx{EBP}R zqSH@LwvCkh> zblIW&1-@1qqVBMiiG1JCaEPi=|AuJD^d4Sm4Vx&5@!h+2aNY2$=R&eCH^YC2cReYUM*ZFAB%8_`;XsSN)7I->;JA1}fma`{v(!A9`-_1wkbN17+uySYJ$q!{O}$ z?-n`bKk2-c8i7iA9x?oPZPULkIiJ_iqn4w? zt`HhMD-Zvmw;81crjR9uT#Q;_olJd5g6J7ysefD0=@^ELg-!H;AXQoQ#ZHQI>f=de z{r_2dr9a@WvqZ|ISim)3ZVxui9=?Wb;K8YEmF>N-v}k@Dt+PQQ2wAv_+0%8Me=ZJm zB1gqz$1RdxuZF4>S8rtG`3;&ku#ms7~U@P=o>j84p_}*Z=$ZBJrHiIg9@b{Sd+@w!(yT_%zIC?Y9 z6q4~W$*yv4u`#>L%r%VS-&E$a1x`tiFQ`92Fx%%8z(!%u9mH-b~{!P$nF2I*zJk-1-XRA+mI~r!f^lW`(=9KVi<&)O^_pcDO{Q1Rh23phF7z773@i$z(CMw1}g8l71yaY_kmb&>bJ8Xr1ZE&UX7zz!+VCO z(#A0m0GsiqigBukleBH7k#x{Pr`_dVO%bTh6$gj}-7l3F*P>A(#-D~w=ZX=9>(OVc z_UMD`$b{{~Cpy#Hr`ymh*-3>Dj&wP&6ruuLsT`Itqj}=xxLY^#uyBh910?!&Jgn}* zdCAK-D+U2P3>)StRZx23URn&xVNtXI5P`q<9cYDlnt8nLO`J0vgIKLkD9l0B4Y1D%2GKG>e#tP8Y z%g%=2v4<{r>5Ss=#9CeL_YH(ep@OstTUKU%SVOukGa=97t=IGvpC+X+a#cKVd=rlk z=tT+{y?-kOi3oF+HWRvVUlI8$4jo|G8~ciM?(Ri!mk@Q3OAidvn`wNQITU8`FpW)D z6OtEf6Oslsj_ALI0e~s&zgN09M{srUwVrN0_jbnLxX`gKmd;2BYkf}m@30HNdtS3n zE?W4&3pBV=iR+Kz)aSAozsGvn_vMy`<;GR|WZ0Weu6v%t8!!BCXjwRtrFt1im)LV9 zNDG)kgUiB@9*nrDB^mDijxSvF1p$pK(l~ZbDG&&>4Z5zh*(z@4q4yaL~ixLb~=cdPx)Fbhwz#k;c+J!p%= zx5oOHHB0UbjRRma=BtyTL`osYDucK0e>!y?p+T=^V*MHvm%ewp?vc5S-+rH%E6Y5H z6h^)^r2hBOr&Z-hNq8K5;XG$Vp6ovHcGeZXmTe_ifaQu^{H&8=0f2bgy>8h$?mP=u z>Y3C@*ZgeP0zvGt-{XaE5LM>VPs1uZ8_@(wx;a?Al^sgtvC>=ThaX#uDhF_}9 zLwNXYUP?^rl~;kQ@H#S9J<>YB#-meLsXuF8+S3%0@nbae)H7}Mp~L2|?OP9?uQ zIR7XxM4FCCCAWC!xHOSUcc^Dtb>aiW?Rj0(pWK33E#v8+4+`{9m2~&@gl~5V|Rw#%@p8 z(anUvmFU`!!_uMid}Bt^kK8L7LDJKt2|c*n29pwj+PeD4A-0M5MVYI7Um#^|oO~g| z&ha7XSq<~K0?b9)au>^dRoo7TRy630ks!Z@ok^En`y6IqxkqJFDT;qy>Qo}8_%x^7 z=(7%d2vUbPU*deq0L%P@yD+(Q|T zllE=z=26OMBxx2YN_4;l_@_#*{%F&GOP&Bqs%?078InczKa*W>mmT#TA=Lcevhn|q zXa66Gin-#WeX_#oi;LseGZ&{YmZ7NJMyeR5B6**(ONGbB0{8+~)a_VlKZGaoU!LEQ zPGUjlt7%{BUuqos%c;Fh%gxoOfBgdg1;ohx!(X7m4Ef4zh1X_k;w+!>!=@Sl7L^wl5B5oIN#2i)@3Ktd+q{;CmMJ8P9AxhdzPoa@mk{D6rsrv zeUUv5i~oG&v5(rtQPwyYkg6<}fgry(UoLyO5e6Axfc)9%$ipXL?G(MEh75jw7YXyM zadFznz8Xt&<$MlNlJi%XXRyyxHG~BytohUtbyB_2H!0m!(W*Y0$2l2D0E6=)!8#i|Xq?e>B?Qp$I?IF*8e;?dJA zk^IqnlspW`LB`t<%I8!GM)R;5zx}S|>yKtiMaLICuues7wAj%@QD@Zk-!GRLbR6&O zcd*rA^;{$SO31zVS2rnh1x%`!eYP8xwxJnG!8dsD@O}xYZiM5TeBZm+``uwz?uO;d z<;WqQwrO*p^NfSE#E|@U9EVmfSn328h#^b2g@&uK%ib4tL!<-M)ShG_iB!8O;&jL6 zoroU;&m}*r{wgN~lY3a9upgr2u!|4h(^eUInqnDGBC+!p^TLLqiNyhRGL93{a8%#6GJ z0H<|~+?+|>cwnj&bCz%Kb&|0!$7%V5q5wBOjA}aAnv+Z@of}Q2K-|if%9=KVGu1x; zFQEJH@@`lJ!Y}BoM1gg4d*SrP<}nm!PF*}ur_Y$ z@+@1y8oj3SFh(PGaf6^KH&o;BYCKn4N!DsPK_;R&2DjuX90#?|1ilJf&X!^?Y{6j`;8SK^1_hJI-*C@Pk0&8u3lIsoim(J z?#pVl^RO3zhTs_Lt^qgD#O^3R1@xcjw|8z)_ISzwJbanX%N-xyRgrYQ3IZdHjlh;0 zaWl`MUku)pQ&oe`4NGo@9jO=#G#%UY4E^*;(`kx19_r}JhcQ?W8lX=n_|+Fak%VXT>M>*7qv`vpktB*~h$cG;dig z9{sBbc8)fbuO&CIFLLZ8N}LY~3F0a8ooDK+w412N6in*wy^4E2B{^51yvGM=KoRb) z5X)D7#qN=H&C)nq*{P1w(Fb8I0hw)&HCO=p9riE%uFOS*goKc?JV zcYWSgqF^({_f$rqe3s*Qg`FIB6F)q>^vIIVmJo)Ve-=~mBnVgGN%($Tde!~Q!t%il zX|i;lK5li%DLl8JBJU8|ab*5iGId!V!lD}U5*`H+O)VyUzI6>)`TQ{>_O0jBWWQ-@ zuW9|22W4rH1u=*Jn>HWMg3!2oJ%GiM&nmN*Va3tSNj8+DL8+KL0w0OAO5_N&fBD~g zkb{sxu2pIfv}p-R3L+iYZ>v@on$^%}@<3XlD<7vRG1Vz}Jp>#K!5O%gP>~m$odXir zXEUCimurz6l4*N6rZz>yhQ`L;0FiS9Ue6=uG{0;+vtEi1ie4JFbB{Rr@o8X{r1fR-gQZD3=Uov} z^0uoSE+QDMyV5AMUZF2^NZelXvSMjMtMVR6DSwuYj7V9TdlqlIG)hC7j(E1fc&iys zW!tTp%-eA`o$18$S^|HzkbgvX0VabkOf^sdYR*Qa`4wtF_6N*XBjtvMiU~brdUT5_ z5s%8=nF8g1g1`ZJPJnLx20o=lw^T~$F)4?A=A*=jTT1hRSYgHT81jSWe zZnx^}N_&+#Qu4%Fl@ZeqF{%vjEhS&PB7(m|@u*giQKH~MCjr*#Ak|(0R!4amhFE6!9boYI z*1b>F3_0yD9fxKjTl@zrZw7bgT2S@6fE2zOJn4VC-E|CvR|Jr`cdy8mc7~%b^7@&W ziQWN^y@3mO4+AxVC^O;=!wSHgu@WcBHSwwp%4bi!YoJ$a>aeC{Oj=RsxdnWCYbc+6 zg0aMJFPqN#C1cAOBit)_2Ndi;F86lW(ks}@#K*dVAb&Pfvn6CF6IS8{;3xct zqDFEYuX8j-;JiHtZ7iNI1MHVhV{MpwgYwvw_ zcY}XO9a3TdQ)>8<@#iIQ)7Hb4?#q06Bdh9LVF*`5FgDYlbdIO_qKl$(rWoRg{M322OMDI zRNV4Ab%p(w?t2AE^~P!H_MyDAP7qA6=TtOgP`>%BJS4H1mrx@{{xB%Qa~d@v#O0oCw%Ydst0?Ku zrR0}lD-M7^>>2Y%G^*}ni9WJ2xA<#74Rv;}GLXoL2xLfsMp&VT z5|VzwIf-6;oGlz8*E0?#z@%R~DwV8^B_|^sxB!j4GQ6GzV!X%djYSQMox)ceQ*0n| ztKP747`wQ*d~lBa@QDFRb)xZ>m``yU#+f|Ij4fUPaofuT_O7c;_JOyywkG*`sZUg4 z;BdkvHJU4{HOM?MC_mFwcYuKdo^+d^;fzBck{^L83hzlwng(N#G%AOt+>?DBj`P%H z_+4N$I^SIGWnoy;>`%I-y(q}J{tcQ5w>ArN^R9^-ue}&GDxA6gk)xcsvK)HzJ+tkP z>ib*5j*Lyew(?W8h3`z0oKo>_{oS3=E4;v$M9+*S-*LptG(1D4Ae#k3NLDJLY%W5M zpybRQuOr!njz(x~h(geGkV6Mr6%YVly*!1zcnlb*Tv1iHh&q^N zjLtl)ZA6#{I#}tbTtS8&7XmpgX5H-vaC=jPAN-8fbtk}A5e>DeKvm{($N{Rot99X~ zrWsC=L#b3~^o^EZZGqJ2n_73?_{+11h3@rK;QeLrexiv^eaIs+OG3BYnCmHV)CGzE zD&N{zPpLx?Upz8_)toMsM4$ScYzztcolHI{rv*@7dc?iLwk-~J9_aS=5$FJSY1n5C zagnO6&^T!orp7M=%Ge5wV4~Bt5ed`St4O?j@^C9K&Olayq_&*IboxV*!i#rvJ90Dy z3WTbGaZSpIt0(FT`jGQ5K}kw)fIh=*B0smV?HWnt?K(aRC^qG%PUvlL6IZP>^rb9hH=%zuow1B|5w_Vq3tg zFU4N&_s-M+kvW;l1d&bwPG86<^AI@nJDRVo%aH!VFgb~M|B%jju%wKc#Y2ceK1Mt$ zUJNAE`cV^tu7F2Li4$9O&RdiLYk)-ik*vxIhrk&lvvi4UIY@-E-+@SP_R4K--?!Or z9r?V&`&{GpOhczY(v!m-eZPlK$HiiH9!BE6v5_9cfHti>J}An;r^_TH%FY_N&Mc?L zu3)B>QCZbFN%~3!b*n<7`GD-5?Os5IxhCcYktq$~4Kd@LvoX?#3IC?EVW+O5Q1Y(R z{S!p5XZN3j8ICyjVvfT!+v@3^Esz_bR8Y74h_cV2TT2@->B~IIhxfyCpz z$^{C_mjgG6+c`e_i3=AVm007rQBE0g}JyFc0qIT$-z`BC5Fu*bCLxXzXfvPqu?dKtNrFBq1$@M zRlM0{$oFb`f#!RBJta%te6U%19}~Twc$b#K^={64#ls~tLN8qJoUlY!^lJVutUKho z*DYPpn;6~1_PQn*K*f=z%XfV_9p60tXnW+A2<|uoO2t2%MRqO%`B256r)5p|r8Zdp zy8%L>m(yPS{Db>K*L%0*+5JzP)Ms<$b4Ji$nJTj`zoM0T`e48n{A>H$AN^q;j3Ub? z{O1dJ;icFBY;#`g4e#sgYaiYmNgaw>=>T%`n+p3Mr9=Y875`8qPlXC9xg<21t%$9d zQmr3vr2C!cSH1Axe$BSxgWNtBAfX$NTZtYlpL#bZAiqSwF}%CqPiL1=0oMKe^Jujv zQ`qTg_}nUBZRH|eh`y@Qn%lJn=OZp;P6{e-@gL3jTeS4S+3hv};^c^X98lG?O3BkD zByq_*aMr8A&R3gsz%#Ln%#}p=NOC{VxUAhN7_?GZ@R!Jy$~C^E6u*9vBDOw=d)iTT z*3vVW6T3LK6M2WsZe;Bb4;X!t@3x+E+{poIc*(J4)c==bq~?wKwJMrz1UR!+p?Kf#a&jTb>q@}M zckg?%OV1?lVj^4;o99RQO5L^|q}(ho55!mYl+c1))15pxV7Th0{t|P|U~x*ftg5bo zp)?P4y5gJKl=NVVz8(2Z>72_Jxtj6~$*4NgD8Gz{HPr6C%&K}XgCb7SMM*0=xMhr8 zQnU;mgH7cDwq9Ju22r&3ji!;Op`o{t>3hY^vUo{icv++ z9;wdBxn7RIa6W$b&MVY>W4YcRU8<4$_kkGg!yBdW+mqVf-DR=eJNI*D(rwOlVr8G` zL!ipzKp?9%^WH6fnG5y!y4%mmv;dp!KJ5)BZTSpgn206mO zc`1UKzj##NPhnW-sovx{R+`#pZGtCLRB@F}&pG!NT8kJ)U+G`9qs@Gkj8BW9~5V+dPS~*w90B9Y#FD#^z*# z;i;efL^16P>ymwg$C{~4NWi>@MNDls;LJCee>^xKYVGwDW5VP!PZUIym_RtBTgh=s zFv$emyWHWkz2!K$UHKXCk~%JaK$FTlvOv6`tV=1D10s9!xeV#3{LT%vjY6fFZmlhO{M5 zoE_BvVTEzyLsJqvRH2@$-67xKF#+vp90TPApg)nZ>N%Jb62^e}5$jMwthvCIeLwM8 zYxuK7^Cw*S*|I83TC%E}Ih)2Z?oj2Ux?u%^weop*p(O?`!XrR4WPR*2#G8DofQLqe zP?Twg^h9M(KZi-4pDhr^_^}F9NEY<2d#4hVKZ#%va$5GiYZWwnTxoXjA_MSbIE)f< zgycdfgF>!x4yu+5lQ8xVGC3Q}%WGTr^OT3;vxTwAO=hD%e^*a91eD;*G>lO*p9?2E zz*;>VPgByUWDMXy#157_zNMnfc+qo?$?*z$v{DW9irf`SlttSzBl2;Aizh<9*3=drl)os-9$3W=6Yo$+2)xPTE6}qXuvA;rlpJ8P|{f7c+U(MR}n?)zZIv z!AuxG-#yUMCZ1$ugwzhD5)030KFbdwi<|Cj3~VP47vn$W6fI-$X4-!H+ixWhLc3g7iX8pdwq!ryAAIBbvA`I8Y4Qo6$HGed-4v=1 zo0Q*Rx|c@a6<-ch?md4e8@&3rIjGYYfo}I|Za9mhcbWWhO?1Aj$*Jn1%Y-PZhCdFt z%*SQbwa&CdcWHThxST|V4dAVkH6(>RrH4%Irf93F*86u-y=f%EvVN-`#b=pPF=@is zaydFDqk;oxt(@;DqSt;Mf{RoadJZovju>8F`BpwaaPhll!ehoci9q z$`5yN%maC2azXEN+FJuvZ8}kk77!MuTshN>&qQ2LBB_R)d@bUV97>|k_ZMQlPw)pa z7w>$-J${gQsx^?X{{|{Prx9|K*hqvQ2Rj_oA*J#o4D3gB{DAf>>lHaP%%sz>2satX znf8`nQ5Z1h*>U`%3$`Oy-*s5EW!}+?r)*L)Iecp>uPu%BOiS##xPJ?OJXi3d;;5wQ zn{L+1B7$hriM(rI6Y#%%M(??}xkL0>7~mSuZrgOB{&q=w!faFqISuSX zFv!qkx(yVkqlQ;~#Y|OWNAU)=kDLQr&;h8U&VEKrj-t`~=E~(Tj#fX7nSEs2agYxci*>woe7 zS_W2%R9q+HNr&|~P{vB-!S3Th8Li*i*kW+@3?@3~AgOp(QOYY_E zlibFgCpWvFfl3xothID;;j3{4P!m5T1;vpszz?qY)_1khUUKwCrR?t2l_>>sqvw>!VT0f_wN-W=U<&ZKsA$_{TELTZNJ(&g-Bj4{g5v?hk(VPKzE%f&c-$EG%c2;eJdn?3`FGw8Hpw%eQc+xbl@2HYGv?>NQ#fX;-~QUoL!_g!s}2sHeFM`tzBI zzFGt7Ca@nH>;A~gWA}Z1zbCQ}7=K&uvn|{U3}&go{YiX*G8K{k5y*9SLo+eRnRG6G z#hF+$H8|^=J|}+BCIbWAh?px`+fy@`)B#n`_5@w`#{14>)+t@!#|Y{jLJOcUSfVKX z8GA`!!x>Mh;-*Z{9-k)qDW~y@+H-0G*ULzsWH`}kxi)^pPJn9xx~@e-GSJGSj=MbT zK|A4O1M)1>Zoy9bsx_LxgmcYw#^RBb$ClgXv2X!;idh*qv@{sLtQa0xx ztAQAT>4;5{Fuo+JzwxLbth4n138I67X>J!NX)sSo6=tQ0^F?dAapb} zQ@k?vr6;%UgCdpsj#fJ@mxVpADxDro)h4UN@Y^X2gb{d=x~X}LV(KxWVU3?;Vcl8g zKPj!84mMD0yjRsIHL7Rknc{9L16~Wr>GcCDsZ#)EOj^(Ts_CfQn8YJ#R`C%ijKYR{ z8N#)k$A=&0iF z34;7vQFTG@C{MVU0uI_4_Y~FmnaO?#Q9yBQ1?FUfT#AM>ol3EcCv`LN64$6 zaP$@>=xV)x#E=Bi)bfy*P8*5|&C`^$kMrl*#*o6C6WoALqlG*OxCD+g!B<5jN+g)b z$Lm4p;$9}T9>W66t5Ay%i)8>YsfPD2UAuF&K>w50{|^{;_G{%@Ea!DTC|vDfTcmPK zh7Ulh%Mi9DWpOfW0Br?4tXKg@><<$)ncMfSAUy=EK_{!pgKYxT8EnA(fOSEEJ-(zd ze7ys-Wg#!8S$4lkx_+vlV#ZsLeh&S6SS(2BSOq9;hn~2T!L#*L$+Oh@HuMIbKBYrT zhYRGk8GIE^Bvg7JI$VSfcUdJ;K`@&}bS)OB-f!|PBJBkt)PGSIg6=?#wf+;}ONg9y z1f{3+W?^MA2gqu388DNG%9`948DUU99X7%bqV8LR?@EXZ`}PH3o$Sbh3=nx;Ws#ay zC)a{FQOE^)L?Btb?g*pKD-1g~okQ^#MIM9lj=M&xDqMnkwmHv`KRDvi8LP>nA>NNG zq%d4<<0Itbl9*uDNRFhlw6*3q=I7Aa((LGBta>jR|) zijQ`Xk8cmR8rnC&8A6Fb%k=DBy=!D1e0vNoZQwI4;x_3oRV@lc6ZcRK=cb*p&%{b^ zk;)3?0pLmUX`A^i-j>&q2~ z?=}DGt295TGQdcf24B*Tczb@xwCe$kg9vasG;A6f?_+9mhVmOW2opy~XZ^V5W4uit_t9)gXW5hElpF2BZJ542cf(arc*h$uT8O zwL~YC!KF8a7NsyWb=;A0$P;iejmZ&CUX;P@q4jU=+>~vI3roo2a5vt7|f>F z3HU;}(XF3Y9+xt(XqDD&hRU1|>OO2|@*7-@)gK&MH@~RhITbe(FIV#}a6GDru$d6~ zME?>JE~}pad5lUYvMx<{ozLTc9?Hs8=0viQG+iB&WPp$(Ea->}8hdDAXWSJ=wf@YJ z5X`Aqa&u4GL-Ic*?tJR#hX&OLi;b_1D1Un*j|X(#@nr`INC1gk9upDOv;s@URm^hkS7e4K(8QzjfxmrPFElNx1-}XLrkZp6kC8+Bn0V0??jc$<8g%=PDW6L z5ky_y!)64(Q|G20M*Zq#ZLL)cjsGARtQXFn{>7|$X*V*7VHDbj(N z9UN34LjH}|umm}o2O)J#Izs(EKC!P)V8j!t2{ja~i6`Z+!A{P7UqwVBeR&hgA~tI&!V&M8EAE6_OrT#U6{Vwhun0bgab9X!d8|Ng~~|x z|NOf6FALLwbs;LdyibPMywm~Q7uFnQiWweABjdVZi6ss+vM5}9)O?V@CvzDPXr5<% zv<*sTg-P&FvAhdV`$|c81{2Uk%Gp7YOKBlK*RE z_5As`hb`+d1hhi--Zo}5A@tp7~QmIOC1d+#%Y;W%v8;|5)bIbC}-W<&6} zm_hY3QGkCo01Gm@{>t(B^|kT!Lb*<<_Hl*GbJd4TB6i)zQw=!t3V+Y>s(~USBS#93 z#I7z5H8A@Hfrd9Ol8mG3kH2J_R7i6qyiR~Fh9N5l>4(!qV~p}s5#XC6*e+JKN?*Sk zbyd7|dUDHky71)_T&u-U%8%*y@tTPyav`~RQFeIyJw~WMVQ3q&K@a3}jw6-=9vno9 zF~1L!)_Yk+KGyKrF1_mbc=2@&y{Ib-E8=)oX9Qx+#`8Z&{bz=TpH9C56fS@jbv{RL zxbzR!be_E2|DAhVYQ`n>3TkUSX3XVb^@_Ba2zolHhOytnGlNH6^3?CF5S)#*`bv$k z)Uu9-Wx*ZjCa1fX@=wlGAe3zMBKmBV0SKy<>4TQSFNj?3O$md>{6~EfldY4Er)wG{s7fJl;04i!_eg)hMuoXLg3%$yAiL{ zWdC*g^l`~!03p~}xwzbkQ3QyAvvft1HW~5ytWUJRYS4IJ&UO5*#~*0Qle{{pA9*UQ zPuwb1M3HmXNI_u89F*cE8dF4na(I^;Z2*lCD%wn%XrN3wmVzv^>v@0EY7gdCDHbvW zk+9y`wcO0}2gRUfr#vd*pd>I$HkPi&y)(wKya#j` zL7y}qF(}($!5A&`sH%1CNB5{ArR1k9=)^tL0v!~fEw#1M+D(J!jJ=X_f^6GeIhx!$ zF*=%V-krKbKp7zWuB_e5Sc5r{)jl|pnlXMiYi@@*_Ds-MFGG7g7t-Z_d-L;K^NRQW z`%EDR?;r2534w9)Tsv|=y~7trd}oU> zX+22~+|+3vx&Vxz;3i+*HO3}D@Po}xMh1fz?yX^4{f&!Rx78; zh%=6wzB$%Ect(IvBR7D;ABAHdn)L2GRX$TIeKzI8T$cD-M@L5<)+jq%U?Mq9e{xiz z$DkOOR254dN1MN<>&BZ?sPe%=1Yh@jLHTCLm!2H*TW7Jxvli?h;$ldFddmTDM0lm}>|Etot_Go@ls05h)rm-@X`Ew97 zvbixnN1w5$f{%AaUU%cJm3oauxc$6gRPK9hMLTo=CG zfgdI0f^Vjd^z86Ay1w|0a5t;<@HT-Ve!lzj@5NyAHDZ?>nk zbIo=f@$D2Ikd^bkACwnZD*xh^&1upP+$+Gj&9%Cufv@Dx7|GwOdgZz~oLs0Bt4hjr z|E{bT{<<55W3W7EQr0nE-jZI#86{lA=>1%((tR%$$jB~>=pLKWJNc{}-r<+7>6Q&^ z+|A#+iv-T+BeF}^QsP7UTZcKH*jcH4ySwc{L*NS@noiDWl#HV3|# zwdu#FfYUwSo7>={-x;@1RTIX98lt#}WMebEAH;PAyx^0E_a(iPW|+w{t2Ln`EjA+* zPq&gD^*0dg_cSWT8i&nEOcpr=9qGLln=-}w++O-!Pg>fe$-4#rk@jb`0vYA-$5s!j zRVz_{Qf3hGIbSTj)hK;1I;AJVs+z<~ee)rJ&oCGU0x!3F2{^U|Q3~HLe=@#1Q_3oX z8dRi;s^Kf-_+6Q}=F4WApiFsNypCT_nlY5hnZ}vlSv8N`sdba$Daljvr&O=|fYK;% zV+V6+%lyuJGefXP=J8%nhtEZcA$7U^1G^U(FTBIBr+%w4mQiYzYDnx4Z@lbv=$EE2mb-!#F&L$>-g$=cDa|h0ZCc<>WNbNGf3PL>=Sc#1!z}*|Nb0&sqtQ3n8 zmSEm?^xsfY!9q*u7nKG~@&nvP%4`=w8jcSy1l{!3hQ-Hfle^Yq#Hk#U7>CA@X{f0q z+2U^tNT!S#M~4%t*gz}uFp&|8wk=iE3P%fQLeCae;o*AThV9DtW=At-U`w{V8V9>qSBCVZTi+}bJ%O-I|gtvYp_nFG|Lt|MPrN~C^axS7Yx z;GV6SF8bPxDn2n$#UoXgU590_7}mq~uwSb~tGd+4J$9T8C1cxot0C;xN8NHIjgP!% z3mm10p|Q;ZJCAfM$82{hW`Tow4|-E_bb)UWK5y;Es@M60lPHoPsF>BHteS_k!bH;*gbxhsT(-DRs|)n}TrLL6ypCvA?K^z5Q$B*|nqY z**MQhhtKfdb%Z^SPhfYko)1ZWfrRTjnp7LNdzQ>|y!kKlz7U7da7g<}uqD53l$Kf5 zwH}P$W8}>sY}G5tyEysP*Gxh&dGj8t{Qt1`mQh)6-x{b20@5HL-5?=Ir*wCBiL@Zy zNcSt<-QA6(N`ruO3P_hA-Er5ed++}~_ndRbxMSS=;f`^?66?2et~KX;o@d@Y@I-L@ z_zSnEiFxfc1$As-y1k68cz?Ok)|T?$gD4*j=C<0OU8x;4Yx!1?SuXJC0bUfO5EDnX zrXn|Z$1$Ga|FpwYEh?-&n{v20L^09$1rvkD z3OyG;q)Zub*W&Hd2V~SVoU<(PG}_|!h0s}Y?^XIhDE9o{7r;)iWcRc<{P;2|f+V5x8z!Ua;3lR%m&*yc zCV!_NSvS#rPD;z(6&eBIDkWMasrDM#Xvd>jv9yi&R-MX21iKp)JwfGFiQ_%8$cdVs zQtV*d+Okc2N73IDB5&$wWlPT>iV#^tv}vaOHc!~kF< zObBd4&=@2Hp0ex2yj#hzZT&-&PlB%W;Df=Ru?qaOaz)8h7IIv?s!eaV8A?hs9hgkT zlO}NT8^=peDoQ-CYK(e|d3|R9HGOnXsOj-qsWfT^7Qola(CXzt_$lox1G~`cX^$8@ z+EW#@+O9QdOC>6(> z6^nNztw#g&xQ9zLSPYDe1M1y0B_R>?R8z8Sql9G>yie#GztZan*{Lq?Q&+eT`DEFfi02HGV6NW)k&4 zQY+u{{eQ-S9Y8qdr*12QZJjsb8>d6|lk_M^dFu5{=a0;#2gpaLYZU73S_5QxHQKAm zZ&9tQ(OGR!8{>53NY02RRi`LS;uXDDzNijgD*BUl(-0Mjed!p@1r|QWj)2J^l}j<; z#l+Q{z?i|r&@^m-j}JOAlqblPG)_L%vk*pNr{d|#mq`?UYCTi6e0Tk;k(!OkAB@Q~ zR*K@ar$HwW?y14}%dL!YGEOr_12wa$QoH1-jm% zJVU0)9Ej`QkfnVbDU{I98x^T(o=2KlX}=B0OYzrvfvmJhXie)9ewyvqJ6;=z22Z{x zDZN4VSPQF0OlyPI;2hUM!5*Xq$4a)p9{A%wL)km^II=Bp(H?`0--lDbsBNd0GiS&b z{c7>G5heKv%PO?1!GCvkkX_$!JXCKg*q5W-Bs7G&j1ko^FMXf%VN{KD%Z-rsn~9rf z$y1NKGOsNeoCoo^y)1b!v@Wt&OxiD4w@S^yma2!t)*%!vnGNADyM15mSJ-u$8gLjw zYe{y86twqdIl{di?zmp-?8PgC5{O8`Cgk^7FgLGUiVa@0pt|{h5bM`Xl2XO+N&O9V zNF`L1B3Aq7WTQKnIiyN|a-tmv9ieVsUWQ<|=Tc2;2nMJsCaXHweh4HRKtpeg z<5eZuh>h3qZJmm;fsfJwNGbHUdR2&AjnU2ny^I2OM5QkbQcb>fuqcgPF^xhydrJ2E z_57y%BTm*6tx}S!k>LH-V|lpCMUP(#;E@20K|{jv!u~ag)yZHtwvQv%J@_2GmkxIH z%KJU&a8G>V*wsBl=86yFQ*D3rWXcMXOXD9(M`IaPq_1$2ne%y9vHrr%`%cWBF&W_Z zTI9G$kMy-<)={|J_amDWyu7K`*4FaOc+EGOL4BiSc>|WkXh^ZxFkjj7zY{Ynnqa-6 za^H$G+BU%%eNDMmB_=!_ukXOTC(`ESi$2rFc5@ zZ_Gi+1ft6sYL~3Of&S&f{5~dm!N;32*TM=|C`ZwR!hHGZbd~x10c5dMLEm4&K7L6^ zYALkBbdQbbeP>&~)i3g^PW-dBooa<{QwRAPTgz@m%SZq;m;5iM!*DRf@wz16W$K96 z8gG$*)jLZifqCJL@`tvo8hjx2aX31|TGg_CtCUGcsgk`i%RL#sCRv4DP#%Xn0NpF< z1# zkLso<#vLhL@~P)4s(*|?%OL23h@v;5i=!4%+GJVCjgX~!xV)1|jizLf&)_sQDpq&7 ztGD+y;)_y|-A-*%8+2|-B3QH<_`^;~`wg<-m|o;qOW}Yz_H4YDmUfd6&c3(|LU$d8 zPpb+2OFnSdSOSV$0w>*-83$23uWz|5>sm2NjQmZmPwB1`FrNf}t+S-UFG3@95^p@k7UqJp!R5 zu`zn{rfyU;4d?LY&3-d!rWj?lgvH&d{N-GLrl(+h$K0U6m8GY-Cl|4Oc?e;OTsf{k z)PLLbn@t%BORxXP>^1b95T(i0xR89*C7xO)j;GmIYP-=A z#G&`jlitX?-fT`pg_0|DUD-4@-fq4?3-7|_HThO5W)2xCKezpqcd|t8g!bVmzS`)0 z-_E_c1^L}EZwWmf%`pJe9+J$|72R{e$8@3%ByAf*dzcfqMfY6ch_T&Dw|!7>J_GYw zhu4|#W}j?{?t% zZC9?_f0ddIw^n)GhPM2wASz@(>yOW~3B8U?QH*)?AC*T}VVc0NG(-2n!m^w)2GhfJxx26+}3Ma0GycAJ8GlPk;PTb;L zioR#jH;Gd!H&tVRg?ZO#cWJqJ*8}vMer=;1dG1bmo>tzU3Y`huXWnnxFR<5VHr?Nm z-S+RfA8OQ*&1tvKp`G5BFLLIh{wn;rY)5V7;J z+TREtY`GWgSjvbjj9P_uYqxzqBRz9Ktf)3q41e6~55ccsj5S{w(8U=jI;v^Yg3zUE zp0TJ7YTUL6RlbJMu-)_VBo3Bh28gx#p-;+yZI_Zf41e7m6d$!a>H?Fum*73BE>HkBF1@3 z7kxBx(bPEOG+)X>#x+PPKHc#-c>)zWYVax)E2X6x#Lq%nfOJh(GCQu9370TguM8oq zycGxuJ)eRd3Ud&7IvX1d)bSp%ATtM1iX@SJL${EuhpSrwK8MItYv62rfhVb>W*e7{ zFP&-{JI)^q80eywaJe~wBedyP)vXZlIXcddqGwLo4V0R;-SdqqW`l2b;?}L5oC@}8 zpKy$ndZ*-W`Bmqwk*wP9gF4JJ29ack)iDts+@yJf_HfFMha0+S)V>pZeV!Tt)QIwnu@Pw+xCpBv;oK zvggn-gA)MMK&gIzE2UAWq54>)gKRCzA%rJS52gI#YPT|&8rD*HT)D)cK1vxgfQIU} zy&F8Y;yW#G@B^$FY6xv9xNq)=A*Bb`IL0}cQjf&OED*`7gBf7Fr9BMclyyk_yq7v0 z!@$7mLX5tpe(BWyLcgZw$FmWU*qThQtL^Lk zmR}0Qo)%_&2USb~mBscyJ0*6nhEA-|3jbvqt>Sm^WOdH&Ll7^w-S}08K>049Z5+K=i z*nS;DgFm`hZN1RZ?DT6(Z@*Lj?#B|{n~k%k``vrGUic%+-ZEo?aXRYLh$)>2Xw0|d zw+&=-ItT#Zg6B=ltQ~ncEueK=R?Kb08sGz_@VE*Oz4#IPJqgcH`NJ)ELCHa5@x?u! z=L?Ayq?TaDi~XNZ3_jxT|CcW7f7<(7y0ri`Ly;Bff|Bz;>aM?g{xEY5yd?h;fc@9U z{uXFefmbL>e*8X$;6EC!J3pSV*ZL^f|3~Ikj_6gkDb9hE^?#IL|8I0^@Y}atRn8tq z0vr$RGcfYwKcoJmZo5qk#SmsF{?Wy44*oOT-!i#L`+x!u?aXg=+yamP|KEE4zd9ut z7au-dd^qM~%dP?XPry0&qjC(G3L{~kY zFpCA;e5uEOB$AU7fbfhs#V06j_s>rpp8y!iZ!7{^cDvgjon+ZW5X7f&0AYFn)&cN@ zKO4vhx`EPOxs7rD{S92`-qWbmKOF+1%Fxg9fa8W2E|bUzJox>Y>Q%j8?$iGzBh8FW z@aHeJfxfU-@<@Qoce~yo6asL2on5R(ewu^v2Y3=OLfcMmHP$~JtV7%t8P5byITE1a zBLbYIjiFSV_R9^AUu`bu`wLLKOE(pGF^1Ktvk|=>FOb^>Qqew>aZ~ZkJxSYOhFay! zJ9t6bIYGxdn)?0adZLP*NmR6I9#03Ro0MS3)iI>Nsj65mf!Wl_l^xGWR;P+T%?WrB z_JBNT3NIIu)&jV2V1}J`CW^sj6O}jyL6A?WQfFi6;MF$j3Dg*OP0q}m9v*OfV9GkQ z`{31rIG_|fPk(9|_J1eayf})_%GjFH^Wj`o?@jmYi6g=2Ofq2R(P!N%`V2lwL3it+ zcZNx+dbtx;NB&4Hy;_}ZJjkW4Ck&~w;BbXcEm6~sgKt5c&6yfxBa+qon4FGs!H!@< z&@i%Z&1E;$b!88K_N%zL3sSqi&5={h`sJ$1KaIzU&O0nN+U9F{)1OrE|MsU8WgC{S zUFY>bdEJhUDNCDK&DI2tt@cJ1o`fh?JD>iY#|`;kdeo3)cN+$4Gk*ZptUhtd+kZ`d z#bl-{&}uj+X?sTf6}Oh>zmI)}WopH2%WYnNDc2Us4$$2RIIYv*Jd4; zKBQ+DWYTe>EIVAHD$g*^IPZ_HGwDBZ}pS^h1Q7#rBty<$& zCuycdV(*(XC0Vkln%$$DMCPh6Nu{19r_hKIo({5_Dg%F_wx59hsg6yX6WG3JuMQq4 z@2zxyD0VF~XNAQjyPPQ`Kd!qS+i6t;u_c~1!;k~jW8L$lcD89lj*8r!M~-!U~kP^P-ie96ivo{q#y_+R&e zEd)W%b^cvrc|G;u@;eE zurF03uOZSq_kezn7M%-I_U4sSX=Yl{JcL`*M8vK z_9`k&z`j$$5b3|M6-U+3rEGc-JVXX*ijrb3Pq`^Y+trh)nCQOf zo*#A7&7U_Y<0c+XJ-fqQli{}@ddSgd%Dx=LnxP#}S>JUK{R(DWvQ2H+wnmO9TB&YKftYpd02QwX;{}>WaxrIFpBp0c8Vu%29};}I@b<(I!?l_# zl7!tuh)=$$_$Bllse^ZaMA*p1Tux@W6%5%i$g*D))88aeNs*K^G^ajxzDoDlJvVU2 zt!DGoS&5j^W&Dw`)LH9Q72$f1kt()D-gidI#L`nNZNgJX5n|BF195$<;HPU0J0Hz4 zbf$~^M3UFDCQX@sU~Bf0YO!Ufj3V}L5uV?vw%{Tr6yhQJlQHg$UKt^4$Pziw*3($5ykUgi_mu23$l0Fd&g(U~h8->daaQeDL(zMj5*2QS z0QYETWfe)Ll!9sUdg6E%J9$2YO;KG;N} z*&0Tf)vT6A5yuU#6Yj~SR*Mx%ai(5qZUnU;smM4=f+bi7$aQ#*8 z7*f{dl(V2K&_ueXcK@Z4a#HAnkQ(ASTD2j#5v_0vRmkBkD?`I}pHYLe{M&rNq#wV4 zwOa6xDd*LTp(=a4D0x($d(ZjAGZ3XlOR?-(TCrca(v&v2pHZojesw)`E#N)x6o=o6 zscDwjk1PmGy~roCt1d3epm7+1W+2JSqx zcH1mYBGEQXtbE6F82=Lq@+h-C)#(TW#?7f1b@meD$xUgPzK?eeTvd*L-#kNP|Hp!s zSEBfPuQGqUm2sHkFmrQyrmttQ zXNh8pi^qs7>ce~Ea%L30O74sv)MB?I1FKK#2|C*6ANE?`S^8^=&%e}y^11g# zuy@h>_twqZ)U%|3x;)o0g@4nwbls*uX(-_$ei`5x7HWD*9I_*D_}GOqXSv^SAA@)h1;;0hqXOhVA;<(*sIERg|;DQ*JW zG%6<-K{*Hi_vI3!wAq1NxRQa`sLO=q+_Tn|z|%-p$p!n)*65faB-SQGBsQd#EafxV zG*h7SdK4ySOz)QvoX3f@_BlpBFJ=qA62nfH3cZVu6eb$q8)$u=V~a)4Qnc_|3_iM1 zCb5Tq0beaB=RnYu(HC|U%R4HL&hizhRKYNOSVvr-w^oF();l;ik(t2a3GOnAl?TTWExe(Wn;I%%N|756$sY#YObq-)n1EtJ% z%CUJB@`?5)OZx~!k$UR6NUSQuZ`;q?er+$^?cHAu+0b2IJZm2r_xZZk%xH2dsWti9 zKsf$=oE;o@mp07BM@4x%DwKyVh zldr5X!=zC~QHrhjb_$_CY>fMeafBq19kKoSYkA^rFza6vptG+A8d7ZQM5f*e@iif5 zN&*E$!~z~cGSO5chSP*|FSk`0!_(TCJ>cUa5SW7`JD-OrHWAr!jpZn3@D!1apj!jl z?)rtB4O0H)p}MhRixEgM!j1$0mh!6Le)BG)=%Wrc){UYP1v&EYY&v40{3&%xSP{nTfyY_7m>F! zHLyQ{Rv5x1Yolq{L=qBf0K|jt`x}82n=G+E69Q~%;59>6D6hu9=45%4_;88SE$urh z`jd%uHFxTDRJcIJEm=XYW&H%6f?+J}X}+QkB{Va|mM;)ga+}5xdceUY5Z_~BIt?q? zk4M2Xq^+odjWK`8mJ<24iOv41C+s>{RicH(fb954alOiRYlLj!o>I~<=UVw%m9~z5 zjeAlE`7H=)kyJdGd&x%j<_Cz4HBhrXEPVJJrVv*95cq-1l*_8i0oCe1;o_a^dLutU zgWbQb+bxlhX1Lx>59?H&9gF%~!-$BtVZ(cXyH|8k2YKo{3 z(IJj~^}I2A#qn9l?C6NpBkU;DpS*Y3TaSR`eQwYg5EG{L`tSNN}Bd>ozAlKvw|&dA3jvzNk4@tRg_MdZG2*oX_d9Ycce; zbng7AQtyj;l=dBt4J~yJo1|`BKTWTae>+%UAc~T}ntP21-Ax1w8#V7oChrJ|yV%oF z>8^gGjjeWcj2wYZq3R!%w>;$m4@e(fvPo0-`$a{Oin6{|NhGC2lHeo!>xx{oc9R8P z2!f0cMYAAW(GZE0;3;89pfEckM}HTjlQcs>7e(1#%kHF93pD262xJ~~2*G0&Q!wWl zh7aX)6IW7w5sXcUU`@8BE@~*jr#A5}9QipiM?Ru5#!YN}4_gUZAr8mk;`dbM4vWtI zPTH=}HHql?4}bfn9oI57L4Ghsc4 zi*fb+KG{`P15!1m)R_e)igCSz(W+VM(v`3t?vKbZC!~KKP1279W%yLDK6Ask4U13< zfb`>khM)@H#_9dNY^?ZUQf}{6MaPx8EI$7zMHmrI;qCi|P91H$wkaK&)`5#-U&X$` zHsGkp$D`n|6AGam!)hf|-%5DxSBQQeNI!H2p`^VAK^2Js_IFv!MCI+P6Z7WdQt#hHK0Bl9PobIn0Ys@U zNL1VhUi03ie!5J(zgxP$j;lcG#a-%Z$0_4VRbg2mg2O%sPqr0$gG*`Y>A>Wxj%V#r zn3jS@X2Q8wOjHFiH=J~eq2~>IoOFYA%TRnA$}jUxcYu#u0L4>U%UTQFZ%@}N?Jy-G zE23{n?mE3MP6`EX_slYil^P#j#{wsf<%RH5OL9Pb6|(LJl{ z*8Ebh+4=BIjY38pU&-y|H}AXMw4VB%jkD(hm;Evl5kMwrutXu=4rHH#8}2i*ld%rx zuQ(0v+q$~D#Vk9{#ttIXKcOUH0vgnA=V8rJ#?Ds*{X6{Ui#|9w3E}nCpKebpy-!z3 z?rTXdqsjPVYby1dPkKJxP203yFNnOSn*=HT}I{3my3j;zc8X49n%X%&h zUy&C@_uJ>sB+m@ec+a21qj?>BUuC|XV3?^S;W{XE`L0yCU*oytX(0?hl9W`#ultbW z-0E<4t9HR`{M!`CLmy5WPwrptHR?u_!5Gl$xc(r?_&n+zUk`7`)15h*qs81*c7JO8gwZZ}Llt;F+wD?$cPQ{L|>3DeE=Bmxzi5<+& zfp6t~`ln-w#-+R8l1FzdooM&nElc5^J8S)uT?R<0?W5nICVla$hx6!$te1t7n*ZDT z4OaiT5@R%z?%6W71uMCw;|xk^4MUQP#QUT0`(2<0R+|{+Y#D6-G)j&5ZVj(N5MH2BK^=ZyseYy0)os6BIvyI)Md;N3%T6P?z^5==4ZW=yUE$DkNg@@Aa zcBYWR0r^XGxIP#QF<6)yGHiv1t$5G8RxVGr$BjWHF4p{D<%)KkDuROSqYPY=8Cm!e z3b~IU2s3Zp!oao+>cf!Waq0!cGHF?&z56n8ml?ubn%6(chU93az`hDjNrp8AKJQZ? ziSmH_VKHfWh^wHmtiSr&(8sdM2J3}puiLA*t^QiqJO===a6u~0C#(iYW)`=2GI+l% zj!^2%BKoT!>_BZ0S?K`?E$m^PPmyGE3i}iYfRHo{ru51 z(Fs8D;2h803anK2cR{fbJ}RWi#L4CGt0*HSOv+7Tv?uhOp&~-^C(jj4iM`949JiH! zZ`JPrf;bfb$AuOFe5VyH=hQmqtL9{X6B9Gh9>8C&)+LdGXE=_ z_B1QmK=cP#1T?BOMFSrt>HxemTTdDt(cyzC+{d0Y_vToV6$>~`ZBUTVBQv8K{AI8q zKvdD{qmog|m*;1$hZ!X@|4apbv%bSC{-$fp-;V~o%HQjY2G|VHLQS|w$Y$B@VxC;D ztm3bO1D!R{QVsxe@_$3~$S%L)?3w5(wP*$T97{73o(Hwb8%__vK2m?B)&qD+Sia^$ z&7`lRm_zU=Q99tpV?y z#~OApl6}{jGFargYwiaupgf$-8h+=Mt+ZAf=rI>8am-J_?eoLqmq0tkeekiNK2gbT zCz+wf&7CrzH9kss7sw!hOhJzYsNUoP7+L_Kr`O_~4#-h&12YTQ3tk2uf5%lJsHA44 zTjWXkd{t#whE_fF{AJ2Yg zTLc#qr%93!n+%Hz!E(1#_bGW^`I8~nWh+_rYePFV11(EY7|)Ssy4!Q{^QJ3~7VOEU zTYH3UPHbN_NjSnz4O9E-$?c1p)qi3#Be*Pix-cezf1d#=!7od;myW6yef>r@Ls{|%G2+1x76)#~}(-FZZN8t*jB>WO6?Gn^h%a%fy>&NB;~lbQnn z{t%*}`y@#0jUO?+29g{~+yDOjv#lMYge&v{;OgV8{xzGM+W zIkE)%HmpcDisqF=D6oC!_%l{_VVuK3T59UJ+^e+HXj3aOE|-1XS8DRbC0K97Nwyx? z9nJe-6^CK7CUzgmCk9N2p=JRynX4=Bd2382iP2wk2Knb}jN=KJcOHNO zeExG*33PaLTm=&eYMdHI6eNpa+%vR&gM|AB036qCXgsQ3!0&&R0>BuNTsoiiC zOVWg8S?q#tcuPwJKLa^_#m^t>aeFnZhS)yKQhiN&3%2Q_-OeBoiNwysCUM^)gT?&| zSCGHblf4ayi0=WM0nieosErQ|njLAe30NP4FB6o!L}+7^BzY8rR-T_4FwjrCCGu#1 z8lOY0uM0;hrB{{2RnOpR1D8c*XgAM~*faBGH!0WIRJl%k<%P+-EKDFbyQx^K6QI}_ zb^HB2|IvqJ8-*Y9d9q*XMw$b_?iGxuNjHu0HAC zyFWZrsb*G@C2*+=Aus+2b{j?J;$ei#cdzTc5GuzBw42XpK%Xj=JYed2@w`3Ny7|c{ z)h1v~$}BPZ-@m*ad&vM#C#1*S*>=7tBRkvmg_`=Xdh+2)oY9JSOG)57yugLftlE!e zA)8Qfu_t22*%@~6ij=I=0ZrwM{T#6!-~|1%8$^yd`ZzcYCAk6!?NOD2>q@h+4ZLqp zM*?2UnQKdfXZ7JiH}0X*B5fVPCC{4*fhbH-KCj9)UZ-T-~29l&nS zz^om(xq0>6|I`qghm6NN2{W&FV$*i24nP{r+O4^KUhlPn$UfuXyq)pB%N1~k;+Wc< zb{A`{7m#+RjqXc%_lq#hOy&oXp^c-9&GF$=wBM}1ER5|eV}|BR^RU^o<-8ihnTN*r zi5OU3z|OGEn{t3eXf7a1VK)%64)@1CuV0nk#@omdD3}1^=6^5)t`e4m9}nKL6u@nf z|N1EVS9Ts?5{Sx~S364klkh=*L&5U@!3DU~vAgC;NaH#XRZ<(h1wW<+WUoJHfW=Wb zof?uZl3{JIuPY2b@!zA4K>=uo;#RjK%L|C73>4H@Ccfk7lCrn5lkQF0Wu<{fyS(LgTU2?`gL9V3+Y0bK86ooH{h6Irimyo7Z z@fCMM98ET3epk5U4~vt5A`SnDXXYB|*-k?*6bHC$5wMss22{WGn;pcDKYM?KN2ZmK zQW}ud&(fp%L*TaXKCeyvK<3kl3?OdHgJdPu-}|@DU4kGzkvKLyAZktUb(VrF3ZBnB z`V*n@kzg{)swbKs7wTTTac6;(6ZXoI-FY)^{jHI1LamV-JuVfsa9Vy$=7ca=R1;s# z7Bay|nhaM=^c@S&Hg;;vv#GN2JyhG`i=1)`w%8S~Q!4xX28q`U#} zqz@#66!E;OCStr0L^v=2&W(ICMq~tMPP}p3zDPKVl!ul^4fP?d+KfK0*eMl!Sdkwi zK6!Wtipiwq<-3)3UEoXqh~kDE?R7m`&J-~l@lba0579s6)8{E5hFdqs@Kr9Mc#|AK zMl^i-)=;>&Tf2*`V1Dg42b)bwWZE+QI}quLgyM?8l8bLf!^a?^*F0nUi`D)g@x`9ZD^=4FYkn{d`ytyF4l&EYvN1qKisa)I6 zJ`>72yJ>ltZl&H^k&-eR)Q6lUg`#MFBW+}jgkmRj!LnkxG$edo92A1GSC#vQvBjN+ z+Uy2nb<8f0Lk16(nJanq0T;Dc=)174uCAQH?@zK0g}XHca)!9eDIFWb*eB;p-U8e-QMxqJgQ~th zJI<)dZ$pwq)kVw+0*6XR2*+sHjO9OKUv(x)qO4?ztg@>n&mqEvGLk=!B>uWUpd`#SQ7^;H1N|Ekq(Jm$=($7+$wXwNbZ^0b<1|(@LSY&0uhkpalvKDx?Po!F@ z6l&j@!T|IQZL3}~SBBrzUvRBjpFeRb>i_l&!B}4Hxw#sXuebvHCWETb3MYY$^iO+L zMtJ_2Cs&CUr`;)2{wJotuOg}Cy@9SntUAG4%g8syI%*ThW z(wY%zwtHPttRqICcW6o|_PigMywzc|{-fip$Z|l$K;+kULlsD2(1=Ft(8U53N*g}e7x=@ zlsXBDiFN_8`LNp=qsVkVj|N3ZI1qs$1M-Dpg8(0ePgVQ<`(M>YN~IUmifG0TxE;69 zhuH#%h8}l)Z?qv1^NHsC@6@ASnLG%7WHm)32ia&&bj+#Yb$nM2jfT-$>xl%rv z^!9V?{=~u)GF5?@G<>x|{?>zGj(Z0Ull59>#+=d`-V0ee7Pt6Sw+DE zC&eF3fw~1o<_(6HqQWHIQT}g zvDT~ef7K+=w;!_!R6sjh2dAlsKOlL3^e_cJPf`dym_{VVjy{r3kbg_Y`aok89V=FG zf}GYu<6;&$Lfi0Id2XT6CesR16*^wZ*70RSkxHw8>VKSC>{BQiKQ4COuX)T0MDo0& zfHLL@qA#a_z&)t486!m#^Xc5WizZbL-1i|Qo*qDE z32BK_q{UnyB2YQ317lgC9RhR^<3ZI}d}eH>a}w0yeinwmPvXP>%-URqZd(fSM@L$` zk&y5a9v~wV|KVADqii`>=q?BIr`zY=)V~EtbDG z5G?TicjamzHTiCCqUyH3(sPd<82zTb27IUBnXcCNyXB`l>h;e+)HnVhqWT|8^`BiP zJr6$pyH+Kd=hj>V(a^m2-50bBAX1YUNm#7p5+XO)nR#Q})~vSo_TT+TY9QL9hRf=Ko}*qrtGOXi zJU>PALJwY#JPsejxw-dR*SKmBNPrvM+u-`5xTjj1k>-cW(wi~sx-M1Nb{ zj!gj$R1NyR0TLO>|JWe5rrdl6XmmxIV4NXESFXnq?*H_!yVt=5z~BGxZSH;}NkIj^ zk1Wt2g$m>R1v9@INdlRL|I<&QxfJjF5l37g;qhO+w*NLg|1?K&0G?2G;AMkoYyc$` zgAV>>jqp@p_CSzQ4s!eAmdUu4r-$bcmwpVs_7s|6`6}uTa#V= z7WVoBF%82DJ>L9gSxE)7IFi8&8$7ax`nniI0n&G&K!$e?pgL{9T}VX@;&L-h4$o`P z0B94-iq#HGK3@Evl0P5>C`SY&Vt#<~KfvXUNSr+JwTx*09*+POuy5kD2SIkAHGHi7 zC-gB`^rwAjEMN!7%7}q)rGs>J>%=|`Hikz`ARsLu2rFGaKDrpUZKVd!Q*Q{3zHp2`V2yvl%G2g#6qYPDrj`YjN1P9!2KJH{ zs*YmOk!aw>jjaKPCnZ)w@nV(;GpY(!p}VIpKuRxBL!qdh^kj_G6G4){F2Nd;?m4Kl z@PsDSd`6Yb;j+9;B5s3u5?+5gv7I|;Q1zInI7?z_Q-&EKq77)^uG4$Xa*PWa$`47# zJqu(mIF_|t=A0-wU7mpI*Z}!6W?pmQweNiA-)k+WD^v>QL0rwhHBMdBb}XPi#{y$- zAxi51saW2~;v^dilRL4Xk!ko7#`i!8jFJuH1{VUYVyQvYd`;V12uC|Q$Q+dnqJDD_ zEFjCdB}>O)I$*vUgsen~?Q(Hoxb`&oz~z2_N$iD`oafCdNg+aZ;QZ1Bfj7*bC?0*g z-o`WU!)J*w@mUpV%g?=!o`=$=a?M<+k~Q!Mrr8hb)*22D4fR(%LX29(gg`JMeZqXJ zB_b58kp|}U?$*?g9TK7IWU}^<&9ouuM@J)wwvKqw2wDiQ;Z@F{n0K@nu>v5ws#A~l zs4M})V$}LBkAeEQDX0Cdkj@TVZZau@zMP7nP2$!+4g6#&k22g@lMuKXwLq`vS*vpu zY4E&e=j(1W>aB12m7#xqI-MBKZfb44pXN>DJyz$+F88oaF9#$-XW#fCE&Y#pbM00# zUay-uzH?n5v1HleGF^3lBjJ7W;g{EW#DBtfzZU9>#na;7v9kX6Mk$al@o|UCkIZaN z9%cib^Xock6utgu%rp6*`)pD$vS*oKC~?6+8)?vULxh%BoQC*1w_6zO*;Pz zhYnh|X4lmjct&W{nxYPqy9wrO3QW39k=kzO$~t8goJj3sF_wr8K-F`Vr$ zd{F2n5jR4|MTCkw{$LVC#_EiRgabM;q(8;2!C1hRE6v1-%i2>?u!8u~WzaS>gkh(jla$fGTaDI?@ml#`D_A_)u+g$b~Fs*Kgqvo!FOb5Y=}eMo{U<> zb_^nILK|JNAM&B$a+W2O^Z&V#{k)$gcRW=MIw#$K&&mG`V{h>V*HpoZ(vRX7WQx}um#@yA%n`J_u&<=Gn5cBuQm2ma2UE8KQxRJvgKfhs4K=npL$c%yRj z9@OV%HL@m}6H%B(!p|T#16lVr$|Aa71QRhtm2`Dh+`GG;bGfrJENVSnEO|$z=qzA2AYsFjI5uCep}-BBy7KG=^S54_yhOr0(C6u*D>27E=m?u=1?A~p08Q7Olr`v?**Rb;{}jS z!x|xOrAdXFT0r-%P(X~(Q@^;uU87sMs`hCLz48vzSRu}%J^X7JLc|tE`#J+d7^Run zEmI@6Oi_7mR3{@Hf1>-)3eUoycF~sIxQ3QuDuJ35?*fJ`mus)8v>wl7k7&AFMdGR# z;qdc|P{Q76FW?p-lsqU^6JnZ3=!&<>>Hn-URE%gBqS&sE?8_yJAVifa+ns1n5o?S< zX~q4O*wL_mAtculLnIFEF)A`@oEl9Ap^S8#Vj|GiqdZ`9H<>6E>P4z69Uf^m#i21F z1*WQ7v%r6YxwsUuq?2;#x*%CI6-gVTeN&PqG_0=o7|<5h3A zJ^02Z>8RZAV}~+)2sy~-Y9y!QM=MZ82oeSF*7*#U-tWZFrWRD!ry6$F;atZ&SSE5Y zH`E1Kd5zH8x^U4=EzfL2%?s_O7i?<_SZr9cWdUeKTqkp2*}P%16&VX0*0TdTgs={5hNyS2tq7PdXVRSeZ`Q({j}%tuM9ei@Ws!-kLCUdg}| zAq9r8*0$LqY`+EH>oX#N2~B}&TP?S@}YACIm?*L ze8=KI|0#A58E%wS`koBcDKrYRtqs)!Uu>kH@Zr>!h5k4d7g_A2aL#cIe9dvWz}GZm zg!pB68HVzGCgZ1uQ9w`T(oayQ%*9wu+8~$?_DN2xpYr;adrnoGGlZ9c`?V;x<0!fX zmbI>%JHscr%bh}KaMo#3`Hr+hAb2?IJjh@xN5eBRF`_tFh+A7UD{e>k8#Fc>@uNn~ zrFA6MIC*q?=olF#Yxq5enW@Jz`q&rnW>gyCj>Q}rQ!K45Mk`z+P?>?OzmbhnSC{SJn#bKqK$v%I2UWybm;SFPZ)pH!k+hphKHAl%!gkR{hdxyi zUYC8<_av$x$Z!cA7SBZWtwNG z{(4lgIo5h^Z+sdCDfO+!c~$?!a+ir#3dcr;AZ((ZwdZM_JG&gAxJ?0E)Kj%!WINM_ zXQ*UEP{-i$U%Qxx_e$~8@N>B$gU$I`vv0!*Q1NEY zxN5zFT0+dY$BE%hNk}=SRNB{6G`)4&NoVQQq*f==n)l*!EEO04Jg#~ZC^fFe#SlA5 zEF3Gk>HX{6>t(|=@Zu6~m(jd0fUDCToTq+x;P1I~y(mG5e4_x$r_25X5i;ZirkYKn zU#{>PuW&x{K%FAPrwKQiciWlN@ZG1g-@I`A*CX$t^{h$-KXU~D5P4TTq>l|&cgXQ_ zpmfU}8=vL*_pL}e#GU}U<}D>rWBt`f`3-(TIUoA^b9?Pwf)}Y#YzZ7&c@p9#{iotZ zikqcb7>6lyJx(%nZsrJRTxZ^a@V zX8Brg)dSChM(ys$YiT4e&W6)@HN3G*=SFS{L~Ge5-Zq{Z-hJ3>{BHjh>+TKj|3TPW zhjrDoZKEnmOGtNjhlB`7cXxM6mvnchgmi~=N~ffBHweI?=g7rBCUPQYe=a-3yhc+KSfXHp6$x9qHTW;!*P4-deRmw;gBnd2Bh{%+s!c-Bnm%)T<|@RQsJJ+hgo=)IMa#KU(>O{++*7F zKk(|2+_FIf-P;QztiWeLPZ*r&B+CzE?xdNnUq??(tWUANI&%v7$l=Y7!dqI(MeqgbRqV88FsK^eP6Y|XqrsMbf0R`)5*^ys_LL3aDd(Vdpw$UH z*17QL=T0sMPTpvrs3dPP`%4k{W|3dN3xIBIXb`1(4+LKXq^qapJl23RYB-;)u_J3K z*w&|mNW94neL16>emBC!c#|&z*_6#%oSbA}3zT`oR{z2CS1*ciA?kkT&443nL25VV;jQf+{3eMECh?0P z)XlVh3|&1JVO}`)-{y<%VNf~VvVx~J%)qG9z+6X?$Ql;n5jx;G;x0d zU4l;+vTvdTg1cH3l)c3WSicz|`9#0rE~Gc2e5J}0kbVGGFp$>@fWt6E%yLa6mpBhN z1;Ud0Dvyc*qnZUzL;YW9XjxKr$d)?&xyn?-iz|=4Ef5h zrxw{ERu5&KmO5@g5f{-m5vT0Mn|=;dKj`n8-WIUF!4bd^p|=;H|7uCZYiZSbZJfb| z2kK~K&={mLVXnGNs*KqVd=vpOfS$}%l)}_+m_|csX=@FQi|zNU;Q-``%c;JJ4EYQ1 zC9hU+r%FI{g$zNv9JRBn*Zjs;7PEfb_nrkqkukRra68W;T12QZ?|pomDZ2K41!Y`v zjxa#0^jS-PU)$*IT!zVL9nnV171g`3qnnwbAM!-qq=gy)Qt7G2#~#LLV?~n6)o!>j5`|Cffw0=Xv<}b`7BDN8gD@!9r736_s zGcqa^&HZW)za!>zcVs{Ep7*d~TO&;F#~}@@9a8AGGow~JJ>{gk@?Sd@?n z?+v>&eD2pus20RgBxizTS=%9`Kv*YT$jAnN11qiD2mghM^D^tTxk^7UiCOjI8!75R z?vGP(MGKnXs+!vET5iN@u$erK!DpKKXYZ5=kYY&H07zyidv9ja9Re0cgO{ZZAo~Qe zmNve&e*{3WTj{HF2I>*MJA{ZG*fl=SQ89W}OA__E&`M`}8n%44GAPi!KE>L;pURoq zq)+=A_#=2I=`YR?Diyd)nr#}K0?8CQuGPX5zOwM=_LdRRE-YU{MkHT*S@>I zVWgM|wfJ3%CMC39e{S9S;1<#h(1&%2pc(sU!b_Q$6X@i%gFBEdTKajooR84WQE_jMdhTwL-VtB_CJGTvA>Y1Pb z2C5%#RUhs%fR>;e>*+l!rXE~u|BfqCf4U|KT0X-kOv5mK=~PA|$SJy1w(Ddzf4iQ{ zMWk-AlB)oDx!>-~U3NRsJTI@;WV!b1Zo;K$Zx;;c@Hr( zUbOR0qC(;X`mzoB$ucEsf5UxIJBXiiuinL z1O(#y_NkSW3O81FE#t~FEuHTU-hnC#y}D<`h=jM3K-6Bjoa*BbkPaLC!u+kGpG-%` zPDlmGhaU&N?|hjMT=w}U-RgMRcs)Xr_P@$cJ7&AlAiy2hetFR%0?+rDP@eoFqa6t3 z_qCNla^YG?_q;y)bK7Q0ru5KuF)Q%WrR;lhxi8^{`zS`Gjk4~~Ocp*9i8=HD zT#pV(cP%ODZ}h8Fn}Pl$MZ2O52?)yXo&Hnk?5vEHQQj>Z_aGY zH2Z9jzJ2k}6V&ZJBVxJTh?5ZqYCdA>D8mS#2h@0Ip9I)6p3vQpIqc)l%nj6Mwc`v+ ziitr=EUV(jRQeZOU6oQTPYZjvqhGBcNK5drMxab#-MEtvsCOQ(Dlsw>K|Bjcd0ajz zxJ5q#p4BqAOmx|X(QW}#R?RnPD39;S#m#`|`GARlFDsCzuYVZyx@LHzzOl6%{BV|{ zK1?Bo+gVIMUUt}Oq=j3!LD%h{b^gqZXzBWO2E99$n=9 z#e%hpM)%zgxP#m|^YN3BS*6P6Ci=scqrR>ZBBF@ONzK$$u{jydE*{OJUPmg-TkvSk z|GHO5w9XjVQaC7b_7sl=UvKR2I?9_N6CQ!0mvoS0g?;@pt)IQ`UiF)#y9BCF=D}WM z+VgNY?xH?W#Y7+;8?3G7$oKyotyCJlj(+n)AGmJkqG=RUZgW!TzyE-!>1RjPw~444 z*Rb|glHTQnsMhP>-<*#vTiErNDrW~{ z?^o_{=FpO#V#AsO>X(AV>Q){XtW;vdgLfecI|AXO{a4yr?gLl!{)v> znq}w7!lsU==JpFELv{G;&`XR~z+)4ok$z-P*}jJ29{+&I$#5!VzTFiaaMjzwX9s%| zO>DT~U}fKQZz*6*%j%+)Plv8Ti%!Q1q_pBnirg4oCpf(KJz~h9-_&&~SUjOZIgUM6 zf;ij}4H`m0m$?xFa168%8CU1#;L5emv=ze0Z2(kuX$lX{WiOl!^sFK=}T2x%lpYSe`%CzAd%$j98-V@Ol2U@rvC_qhoLvYoNfroAzEO!Oi?& zQ(6|#tCL~Bf!EU+$k3%d(s?*S9C?@ot`0JfW}H4ZLYkrurG`%mIos>{j$U&scWsY{ z5HdVsy`H!1o_^wz}HS_fW#t-?JspY0%z&}3GrjGhcx{7!lzODApRRUN&cFu+*g)+8jHZf6Tb6bB>PzWqT~*{K<(MlEJA?dG z>XLqVUr;tS%SVtx(jbuL0+e6`d8iJ*eZD)!SZJaR*%MWW*%LeAU%U=Pt|vC3XL@BY z$m7%g#?6Y&^tYc5BGh939yk9D^VjoOpnOvnM0lHnRuF;d-*ni@g)s!4-v`e>SvK6? zoKxwA@AT$6aV}-nOPqmsYy5dPkfW4+;2_g4>Z%{64gVon=&UuZ!qmT9Wh7xRqKGp= z{O3qD_(c!|+gbi5ATBnt&ezn(rg~}5i6psIOAz&dU&3U{D64SK-U+w}QaHY1&!=;a z_!_t=^^|$RGVq0K%L2lsI0EWSt&J$QZ+UrFvde#`#xmHxg)G)dWVc%6C<<#}Ds6`| zd`oNnh8sk|G5?8zb0E*3On8;I-s}RqwrzZ0W!@KNQl|Mnp)*D+ysQ9BFRa{kLOuoo zoDi5g0#;;8zyc6aKh6rm=l3S+LNX9#_E)2}!cFl6P?37z46D}#Y1RpDVn87(Pv0Ql zJ9K9A?i9$pwf<9ICS!6j6(3{33=sN9;1J#=P*kA!Z6+G9-62S^dD6$>xypQ-m26C{ zop^f4aDF*~Ig$7@9324YzOX=vZD1S*)bJR9euI%^`Ha_fqF4WKf?PzSxa80usO{l| zIG1I-)5On zDLK_pc7Y`Zz=fLq-@bu_^l(2Y4v5=<6Z7Kt9)*FS7FwfC!eH}w^=)w{~$raneyqrUY|GGJh}ZWMAl>* zSN9**G3C4biz@*7R;KH&cu!E)3Kmm-h0dhN^?#7+;5GaxGkbp${7(S7|G-P03T1U@ zc>rI!pI?Hs05{;j{&d!+eK=Pw@QS|ovSA1m!brm29mX8A< zB|+)$&sP6RiA_*FK@os3v7hxH4Km4s{}lOGB`poqcQT6tk^AbepqK*?6#M@!KsABK zeZR8z2;g=w6dIxW?S5hFg)mcLx*)dxEfUWF{>H}BlP3>|>J7gLZ-!d=tGE|gsqPWX z(S7}-!J{@ERQ;Ufu!H^2Tk{RRDid^e_(2hPUaf&SKvkWInE3g#Y*cK_Q$#lV$Q_8m z1bg3a10><&-6?e`e~)KMWmliu(LZ`_mr(cA_N@U>P2yEyiYW$J;r>?z!$k-N zrXxBu33feo%kM1v#(oI9;JI|0?+Zs?tOdkYCF~*JqdsivKJiRJzEr ztzm>T#r?xsZ{t7R9bUO3Fp4p?F%qx*&8yHv3gX4^%9S6MK;f(mi_`z^)6^ST9mSk- z>I9yzC)WaILRru*!#30x6XAHm%l{5;FJ=MHOAoo%{^Z?jV_7RYp@fqnNay!?q(2Lo zmHl`7nSYFbG5mL!()5RJkovM*w*?eej#hZxAFj8~F{$?#>JeWTjZ;5?j4WRU_x+ucb?d27mejsY0;|2?w`OAuw!8lCR0s%+19YY!Io<|F`+Smm+) z@!%we#KZk!Uk!LL1Ht4!bNBC@kd{*+&~9~qLKXw_2e1i#yuF;MW_awDp>2J<_qrhA z9q%>KBYMk<`tSPqM@z4VI-Nm?c-c|qja}{j41kE4Zu7byhuwQn>w;>1o&u}m?;EU` z`bP-L@c)mW2LNQVfDFFtzY_@c3AM@XviEQ%Q>LasU;I1nBHPlYi+CfEYL+J^lHw1|uN8{9Ub2V6Z0} zRPdl=GB^pE#_5v7p~U2OCm{p$D#=kI*ufKBx5r7o3@KVX{d_L)fUjyu@K`Wu9<%_t z!TtK=36YS_Ch5LGLf`@}2!N6SN;Af}fb3^R=|Rymf5Jfh1l&w+y(CotjQ^vBnCvo( zLpmslD&t=SB=NB#?$EQX@v%V#$$P5|#gG1$9uuMw{8tn)33o7-s^g!sg#Qo$o?7#Y zRwDo9-y({-Vn{^XPyaOX-~X1HIa>p)rM-@%$Tb}%X0YYMI**8dPNqzUR`^o3BftRp zM9l~LnAt1Ou9P?Lk@MNWhoRXF{C4%q$XZc!YfFlF?8k=1cGQ3he2q5)FnymQV`AGLlq#QC! zKr{sZWv-QCc;s{LtoWfdk9-Ql0rV>Yam7s8rKDW|x%*R{mvxf>41a&+&h|t0__YKq z(s=+9KdMhI;k65uIz1_heCW`Th;o2-XM1vLVdP@ycn&uzlpkT%B57A4Cg%rc{(hYc z!pVjAFM9dC3`;_g^2XxUJnDE@QGf}268b8N8?iI5WuyOy$pk#wN=0rFtS?kcjr9r- zd_s0rJOkyA`%RR~^$M~Ye}^=2IKuu(Skb_>ucYy>h&sBwkk051>BJAgRTEQ`FMBNX z#6IwH4uCg-x2l1V3`58=ed)7De~2*v3JE^Ot8)_>;7W>0F=6_GKc^loa7_ zzGHBwId)k#Y6=sd!e$-8Jo2rg)H-CuAq1s`wR+SYB#4x1!4X`hF9*5t7fk@jkz%EaB4M3THBGMYfy5hQH10X7g^@ev$l`AffyXrLnnNaP$ zL$zFLRLTQK;3qe}ldcY67e;YyH{0yO@=#>)Y%GY6v<*-;Yze`ma@{__r5I67 z_vs_!9(x5KYfp&#%rNQaDY|3%-SeX=sn4opuSMhIr+xyq_Q1#-I382CI=$xFG)DEs z237gDDmAN(~HE$>`?wd77vw=vF0^7i=J zA|-1b2Uv+bBy-23xv^{())1D+Dtz-oxP5mg@Z9$-!H)4H4ab(>G{GndRSUnExY!x2 z0_~rVF^)QN8A7y-%_9LEv1wpK#WDu|evq~$rN_z&^~6TDFEp{E0}OZBbouf!wd4IX z7E!{&5XPY`iws{ftoY*!isrDUl!!qc7Si*eyqAla*6!pYtPXAI%nn8`18z#41hq!OwtnRMaX zY}C%<{ZDctG_gQx0i@kw?HXo50{%lMgBx|Z;?b@6FynByK!H`22jw6ca{c623P^XQ4nRoZW`bKn^a(PFtlPfZ-SC{Xg{;D zAQ-@^eYFGHNxqV_S7NxzRO#L(t%OSPZ`kEq2hOG+7H*=^q*=8N9b7`kQ++v*8)1 zg@&zxMMNu+>O#lM<{dg{^o3q;%}+~%Kt4qW_Po$F%dxK~#Ew5)tlxAYs6ws?8jS)r z&v&;GP1wJR5?fHm0~)r6O;PN+aA{U>7im2>cbb1)SYCwnj$Gqq2OV3hd9d){jqK%b zRE2q^A27wyD67D0rUq>zCJ3b~kJ{lw|C$JUYNv})ijSIv^1|p&>Elw40swRR{bVF8~GsTAE}7HtkR zw7)BMB9+$yHTvElSJ6RZegD{_p+`(yaOOBkV~AOIBWZ|chJv-AAd65w3yV1{tNh96 zL{IJ|)rTG`L1>s_v)6BvO7zzmV_}IgjZ0^Ax|E ztX;yCO00ywEY0_G9p;Vzo7go>`zGxnrZX4HWzM8|hl8c;3w_;?V){;qpWCY|jhQu# zJVU%q!A!hYK~{G9yafjs8ti0)8?cNbP4%-8LLcg)u3y)Lb~~};vCMvnm0^c%GIS)| zAl}d#j}Te9ERohzouu*I4o1xwO1E}>SueRbP8%igTh>%UL}ZA1Tpcg0BS@Qcuj``Y zE7?cJn+%M!-BkS9RJz%BM2|wb#>LVaOvfTGR|tD# zkJt4bbU6QK+441I;QDI@v%`C2+34W6KBTD_A-uk?#1@l1*!4d%OecX|7rYg+{Q2VG z)!dfe1XBN~v2BU0n?iJRQ48mUHj4Z^fiGGIa8p=WxHn$~g6YjjN~Ea$wS^!=9--tg zKff@S(~v)hU1x(6jrWC2Wy(6Y36?*v7)7_jg%h(pc6$q%y*41ygwcOf;lcQ^9~*uP zVk=PEGfn7SfCK;T-56CC%7+5wR#jM8SgJ9Sa&6HI_c;6XjD^utb*HdpeUP$O3BR*L ztsU49Q9)KVYNeDsg-?+(_#XDpIaX?BnXZ^N5O|JeA3IM;2YbXis4w;owzb7?%4M_{v?v-HAz@4&T_v*r@hmkZ*2vI0YmMi(eI|Znj9SkUQBey3gx8DyJmW z*yTOS(T^2wgiS^Bh(!1ndMV$K8Z45!+MkTKq6X%9t4{_dRd&)_bYK-~A8a1D`BNjE zlrJj7JL?e-m^PfODfP^LooQFO4rvENPWf(yqvNcN?SGm}C|$alLU!}{*B0Bxm}_f4 z=g5fVwhI~ixw1`XNsxnfDPRV+Qx-IBRP_E`N8R+FE1&-Vc8b$3KvUKzmC4_*qapOdRb5;gEV&U}s1~ z!NVX4X|%Lx8t*$YhZo&NQ>VKE-&p^9d=>UK^N2Ve9Z^$vN!=1|E?IaRKP2^6!vDO|dc@itG$n<)#`WqIP zBIb>5gzIw67~HRp5C|7GCoBf0&r~fCdIT3V7T<2je`^uHznxPdK!7sY>*{AVWsAUK z`1gtgz5q{>C~RLFp$bPdUrh)7>;WSv>%mK>7GNi_qqHs1uHcJ;SEzn{nxSD0RBocv z>SMty6}LhbL5ffcHxbqBCgKcGe|3^m5`4ba{b#4fXw#E|`ExC6(ExlFacijApjkBp zBDR!${n{*eMMW~v=dWlLNG9izHSU;64w6cKKAkA}mR!=-AB?L_gZZZ zTMC>G9~Qk%SNdArH~I=~g{#W(xh@7S0fPDQ(_`Aahu;0oW3!Qj*CUO}`16!9aBr6s zay=QaZZdWP_w)Q$SKaB*N|zIVsn#D889x1BTLJ;Mq)-q7S#kQYuMd6zE~?zf!m~14 zpB5SozaTu3t3Vl}|5e88LqHtjDP=&GGBfxdDnn;LJsub2x$w3c@LT>~oJ^g0xt~~O zSnS}Ate8uIcwhI?7~|iI+USv|D^Q64cy?d^-5dM_ZKq$L?I2|ikT(Bb5<#$l{(rw2 z%+mlb$6kjwkD+6NpzM}E46|ydC#D#3%PBD8t`1tElf-l1VXgiUcWXB93&M7JHB3MA z`%mYRlz&P^CfnXw>Fusc6g;u2Wo{p`)D)iRX~FEA#@~;d0*d??(tv7#Gw%W5nZ13g zN2qh0fiZ5IM$)^haWmuRfX_zufByjpu73=DYQ!;l?+}M)J)`4M-o((0zkT$FiMRd( zdre{R|19yaKq~R*+CoyOxu1z8^55EfUryvpfa`ZY@$yCzR_`HtK0>Pl@Kd=pn;>)N z!BIfAwi^on`3X(|O6MKWExBjiU;Gwl>%8%f>XRdq3FuTRy_C+a>i@Gg)fE{$o_AMB zML^2n57#S{8`-0wriPWBU4$SBP8+$zP`>{C+izRnBXG=oanbbl!n`PZM1m9`gS^S5 zGkB!P9Tlb>HzaqS6nd(G;vEDO0%gWADFr08jBtGd)+m{y5`s@4<;W0D@pELryxQpn z0=nlhQSO3VssBXjlRKVT(`X7t3(pAsVgiVVX@~Z~%vFmAv*eE9q9SKUTIrHx8;UZY z51^oCJ>#2~c>#YP*a9R11u>bjVFG$+|E% zrkUXLxMOOxeU#^+?_+VKMRr#l=!jr?g^qzy+l5?mO@L)EANJJE4oi|S2JZ$Ye;52r zWPIuSyr0MtLN7-f3IAj)joog&41@Cx^@}EzTgwyq6r>H3j1xjT`cEOalXz_EB^ABd zirhnAknE5qiABcg3%=%%rk*G}te*MQF-GeZ=`uF-U<#uYYh&W#d3qAW8f-B#IS67G z@-yqByH`wET{mP#Q+1@iA(2P03a66&6TLTP`!oN_zB~ouljrYQ%>{j-^0F2*F~>2# zMF_`2^P$HIpoJn~4s;Bs-Nq)qq0TOHTrv^x(@Sjfubw2aI)S0Y9yj&IQONZCC0oz< z_Kn52g57MK{_bb)qQA1sp7HD^L`qzqp;8cvk>|}0I+o?o+a{SyTSZgkEVz*S1=1PO z1bqln;FvX~%o8DsG6=^KT;xCdA;407wbVJumpBY?138ihp6@UWY!_fRM`_#_K8M2~ zk;?N>l3j53H7|Z+aG{zaGqa=Yfy!AVi^VLY-P}R~hP%(L95jyY3ne_o&oHwQD>=<; zMG>^HNy{i-ueX}6@R;f}?X!qPtl?xj9}q&puj1o{C>8zKK)@6?>Sd{^c;N zgw_=72H`dZ=eRScIX9W>s(|!E#{IFonfPU+AZS+)T#PM^8HhV6wi-cjA@m&DDNE8btbq{7z`Fe?1lPnboVpO}EY=bN}bKhL}UG)4w zV%HbrK*vr(YV_TSq({!9B5ut=j;K;D+fUufDXVtdn0`V^3%;~*K=OpPBg0xE$A*jn z#sXqg1Q;91=AvjHWf8Qa02Cup7U- zn%qPQ1}-2l^Gj^bC8r&bs>HMT{l#Oh_(%e9t{WrB+3k?nL@{DblSWzO317jG_9;?+ z=n^eP_E#?CkJ&)U+oVU9(iF2#L(CWTfu80mf|e_Q{t1n`wvV^!QOm^7R93`?Uc9}f^>W}NwvEMm`Frw zB?4(6_&eb=Zq(B4yi7N=-~L;0UG`scZJ_2mil>X1qZ{lk*UGhY85Vhf;Z~kRV#SUs zedvw6z=9+TF6}rgc^+17kU}>0&vzMaUtq2AL6o%zzAg6ljkWMkkRBAnzR)d6feqim zo%jaR+F&wbefQm3v%zL!QJ+{*zZ2iTE?)K=X2v2B_S(jD(kY?3C1!AhY8f__XuGpsjjFXv;{sr`3sUe z?3k>%l-_WMr_7LH97WG*Oi1yKatia->{l!qKaTx&4 z3H!Vc>4!!5Tcr#hJC~2YR&swIKK4avzH_llddzq*>-|ko7hsz<(jpbWjtF{9|DQLb z=-luBdG8^)^X2c40E8(;aBrDoN#4;gytSO)`2`9@teLvXH(I;DyrZS3eajc`PB`{f}&(> z^%@u}Ih7x|m@{Hk%>_r-#vqMoe3jr{M}NHE2@X>6YjO6lW@F^e5si(2+?%0vHq-Cm zZJS2gjio{f0`n+(e;;1<{ZiCJv4uLGEp?>saDH|C6NEu08HP0ooc?{9#R=bK16c}b zkKG8k|G;Qb%4c_5Xsx%rVpj;08KyGq%d@X~@|FRJ4hO{JI`HYR%Pv99+Enb8mP-b) zJNV?p$3QMFQD!idQQ(ZQHbQef9fX(3*jBrfMpa$wVv77^Wk$WtAM=LHc<;?2T|=_E zyPY(V0DW4V5zyxs<$>?Uzj;m4C>~=7++J>A9L34to(RqRti+1-Jp0eUGz?)WlQjmK z*4PHcnQ%hl@kyl;&GoCs=Ewb<0r1}(q>+|JB|`Qn3uJ3R{dV5@6Gz7<;iBoQ|7qsP zQ>U;vfwKma(r5rNnfTB&*|LTWOYPN0D*vA~0WST6cnZUSnhO+3L3sG-n{6M$ad$oL z4d|^1jHaFv1R^9ukLwP~O+$n6s?+oG(*zAkOH# zVDToQ62?Pu`xFuG_2A#Wh#&V+EX`2GD{}juR4YKkL?&Ky@8y5q;>Iv9E^yPZ_p z`GP7Th#l_6(1;Fcxm%W#%G%3KrQwaq+0V#}Hx&?ImXQxP@V^ar#pkDlJ|;opR97bQ zu~T(*VWr|`a<>g&4W(9Bj>*VLD0zgZ{%~0{3&h&p@WhQ2)pky3ad~XAFqdEEF>!3} zG6^c3Jvl2r;pcIjcZ&*Qjdo7}fdP-x?xo)hkTVua&i7W<7mo*tEMw}Uf5zlxo$|bF z)yGNv#EALj<;#g^T8uRr1g>wh?K=u#Is8Jeg0}t4@P-Vkltm5|i?MbC@Tug8ogCMn z_}k#9K1&ZFJaFKXO^EUsPtRvo#XM<0TDlbcjfh zRn|Q-+iu;U^hRD>8Pr5*sl9CbBe9saXRhK0*-ltPNvOt zDe@VS8jajiHSzU_gnkJuVq-zS&r$E4;14rpf500gH$U<@1fm!ax0t_D522EKx(pPx zgC)qkG0s_CaS-+eB46w81~6@ChFX_oAvU-7Q6u9}xnC~>*2UPT^^3(h?(4Ym8T<9N z_xz`X2BN=Q;k8IJJ_yOu?@9;`K7Ju*CJ{Z$I>IfIjcE+BQe;M?bb%r24$kp*v(@`4>vT@hXJU-%fXF@=&A9)r%8os(oZJWRl4&>PUZ7X<2L9DySs|;6| z^&S-p|8=S8dE5jmsDK`=XXb*%Q739pn-Z*y$gB;nwx*BYp%Gx6N&-=u6**69}v8{&GqBbE=j% z-HHjC9}`xDAzG4mUsD=si7bVAUoTj#4Dt1`5FqujvRhKE%chFT*r!u1(XKqB@&ivf>FIQgn5~I?Jq?UB z%E`_v%53)lC9NB*D4sX|x!FQ5#nGZwB1NfHlpG!g=|qm29f2}VM@L}PcWie6Mf z`BeLUP<(mr6GOx+NN(yFCuVZAvzISKJi^Iy&9O=OXWXmg?BXw z>l4i%mEdgt`RjyXa~Yb)sB$Ke2uhmfy2&jw$ADiz_1A{==f0kJH0nKE(~PdSRLxK^wKPF9Q>S{GJ{A_>EQeF-ttOO;`+)!*1wH;@N5aL zcz5VU`$47-#DLx_bUt@tN*0smzFn-Iz&+E5ko;#LXx3?zyMVqW4oeXWK zhuURZGbzjV(SFL0Mw#fY`K3V1m5&L*>GQ1bt$YKFMYfN06z&~o0OXS3z(}LFB!7|P zi(So#>HZln?PwAL^{CTt41zzE^zyt$oniT7D|XW(U-%gsic9Gs>6FR}PHdnOdg4mV z4t6%V zNOLU`pFXYKS-QCKUB=#8SI}nMM~YaaAQbNK`n5H9P8%45`SG#mkWeN0E;Bk-0EO{zou^A5CRM zW0Uy`z4XY!G3<368~uAv0t}@4gJ{%k>8~iSOAI1Kv9kO=CVU&RODNK~|`qT``N$37-Bh0?h_wn@U(nn|i~ zJ&>h<!$V`+`oM^^dtfJW1v(L|t5{QR8ruJX{I zm$j2Zu4q{ovzPkz1sai+}OPNohQfTuko*gwt4hmIfP>c={6-DE_fn%u>aprb$A(FSA zRFE{ZTp@qvK03yIxX%L-2k`*_ixs{VoZsCwSL6sFeED*1uG+-XT8IGM5zAX6ay$Em z>eUTZPJFoZ=`W4)V)@r54hnUA$4gOGXZztY%G@yVIr6e*xrLPVzGft}+vyxPbUdl1 zCQyM9*UoD-$_es3>;BFB`m_=bsZ+wAaysfC_9gL{R5n5c%kB2TX(hVr;6 zb0bNgMQ{VF9)&Hrs%X0r$op>m&gIUQq2V~i`qHCJzAYWY_)8(V=V8YES`iuI$$ERq zcc)=T)QKU72ulS*Mp%fvR^72Ev!*bZ&a8mwnm$sY%Opj^o?eRFzJz?8PVp*^q&6fg zRq*fNVBha^R0pn_)&af}$@nPH#WC8w&8T`6JJMJd8+5wYwVp>Nh2{aHr6|4euH{%b zk_7*Yp9X?Bwh=6XEw85_s>Ct!>~lo4YmDv1PerLD)F%c?Rxup4R%~ev_(yV3@;&w@ z)9;5uLriau*CLAWgHE@1p%BQ~GH)v@9eA>Rn zd!moLY!u~M12-$j>HX2Zng-sTu09n+ra2S;;CdRBvdIuWK6BS+-zH!k9;ZVf-S&br zxL%5osrO~gRlt3Pq1d&7yOFKSqGH|?{D3j#`;s#^)py$ZeRlAf-v>kaG_>XFW2zq$ zLHx?k>6+ekDHtEeiOT9A1Z)QKrr%&0j`U7_MG=85-kZKKlWOs^GbCY1V6Dj^-jSRu zO}i*K=cnL;ORTL!e^KA=?xP-irdN2ciRV0s{(iBw<+sQ}2#VR@!&!Zs5V3S;?A+eN zSqIdlmYUl2797Kn`ejy2)yeXAu1aK|=&Or`kmJ>ko8zB3wTE|Wh`@mA%k0mMUq2oJ znwFG&(c)cS-vaO5=mATH$Mp~PbGBG+w%yu!m`0fsBd+!O?~6nY-CuIkmVqLFzvPXL zqhms9A>#dK`BBA>I*o*pAqV#PZExV18JvL`bhG(oH$R=;kU>-MQN zHf6X*z0~5}aX#x*QURyxg!t7?DM_|mUcPC!Ytx*T*RSQ&{)-Ny($auTl{rUZu|VU( zdr2<1*0=9QXTB33Si}5Y(eXOz521Cr-aMZusPBJR_*m|7*NsAPanN+LofF`(H)pc- z(Vpg_ZQ0|~ymQ5I%>C3@&iz8o{m(1`^DP+}?zbP8f-VNcJ$%qR3veDGy0%L~$m*@j z2{?V5)w~|A&u4Tprdn@j4IUph;0SEl+ni-{FV%fZ{fwqal@fODf|r%g-{97#-(4aY!INAqOzI z2ctm+(rNtK(;*pcpW}JnfBKyo>aDj*U>{Cj{1VMd{5!)viFG_xf)MgBHcLh<$Qiw3_4FWM{WUb$kq^iHwJshJ7M!J)+OUH`DWAb;k%IVKLkz^dZ z2b|jzZUrhs+f-!Qj-l}@&={tcFi1im7UI*tu&9x0PRy%A@6)^PH)O>c(!kedPy{WR zo~^-uEtSd^hKW6>9dj4)13KB2k0O39UgHOYlkl%}j^tgB`R-EV4)co4E4Csi zg-rGu4^a;e{sv#LF`wM)Rh5Euu@Q5wo!G-%d86;RT|3S(;%F?(Os)A9TATnCWisj~=(|*!hJ@6*h-6qiK z;hz^%Nl5)x4cVC{J?|s&JEgEYGzb#n&bgU)sr|kQ|$^R~Lm{jc@*u#}% zW9q*TnJ#@rd~80>NWIhO1^odhuqBgb8hyhkCd_9wj681ZF#HmE4LBE_9>$P!4T5*W zQp*!qB}@j1#qJZn^V${k1OH@(wX=_mj?A%FKJi+i;2Qq(m=mG1Y}=xEBE8ml+v!x> zcph{}-XpgJLf#3K#qXwK?fXaTdtS!`ERDS@m?sB<&6PD0sCyKxxwB25Ile7#5u>kf z4wssGIo^`)>R(>-HdZQ3cTas;j~l<@_1SDMxI35e)4-T8D4Ve41Y-iX#D2KkSiLuv&wM(<>re&y)MstQy+RN&%dZ!ls_dV68{{e<$&P{;?~+ zI;!X=1e8%eExT;t&4rj+{apG{faXZ72EF2OxdehrOjmb6iXwh4$oZ6Q?t;Wq(eR&v z0+TBhO~|?mrWn_VyuTCFPewm<&FVE2`>P2+*Y6NLQ7d3)4PQCw??@5pL>v>1d<+N= zeRe*zYau9@ zdM>Pg86OpU(y4sloIp){i|AT({U9Y&u~WjSw;71nle9csq-bDI#cUyO4`JlAC$LHA zuy+;+2{_YRyJx72>Ss0P3HmjuAEi0Vl)!l*MqB{h94QoceFu=-`_mIB-55b8m!xaK zdsYR(f$vvMq&mblUhcPu`UDP-mf?hUVYnVN12U>zObrVY@?V902}0<*>&(Vlu6zpN z_8-X5gG8dXKkOKuBjAOhcX)}M>CxCS4w2F8vV*2o9f;f&KDnC8Imd=0v6-|;#f^=E zb>rjtSqIF%HTc?lawegu{A~3G&-=zsW*)SpH=~8Dkn9abs5w~8#X5U5lyI8VCPNLRvdt$=kPbH{7=M&C9I&z!XL(UP zsTLtgO)W zuIqMe=b6{N=|tsWF<T*x%Tm}-1K<%(Z$0fKO@g(oogGipAa`b(3yFUp{?A-E#ke-*a8l;pz+?^vDK z1(7e2ruJ%so#y|ivFi?MD*M7nvCsr*L7E!_k*0uv2pYvu5+wmKfFYtNK>@q>7Zl(jlSjgWdVf@6UbnX5PFz_s-mV-@WIa@0)kN zv*6UU4Vv@0=C@R=)zS$@lJINoz^q=bxM1d;knBASq5W#dL=_&qb1+;2tg2*&6pf3HFuXL&FjmK^%Rq7ULq5M(~*m!AGT<6zrF1S!!zT~04T*;kudbuhFSF(ROein2SQ zc*H{kW275~Dk=(Qzgna1zn(;v-Q+MlrpS6+U~VU zVK@X7WC1!O5M@1J2f5o35*n}yN+hL8>C%@{&BfZfp1ZPod)%V7s|o3^rysX!$Egu& zicu2kuK_Nkh@vHmaJj)P7;1UfHm+pgj#9Bh+MLE$FXN22VCyJWGmVX3lu75`56^u4 zg^WKOFOD^2GLUL6!a?{oHfX=dc}iqYnimH6g9D90wR0DoIENd&6UulcKztuOLTmZu z{sOlC)6MZ6-55B8=Tdhqb;_9+#4v2@x(>3K0svD9%(BbN^l&{&ka_Y@2q5QEOA7E2 z4lnTXcPir}J!E%e41sOm74cuNxa(Qis3D+x1vR5xuMh}*c=Ul#Zd_{cLdNQr1lHF` zBesU#)4-0lvW$Vw?7Q!JtVr4>biD9bw^X8~U&?RgC)9I!RAPkS5XPpnnZ9s2VwZXe z-{%|jM!7?V;T$R|J|ZIYy)Tc^U#fhBS3eku<&vtsy>_EM)5MPI1@V(CjX}6JB>ey} zV5uRN24wpz1Who(Q3@KA#7Eo*U&fOk(UM6TJ(^%g0gF+t zI^XKXN-!R1diFioN31M!%8y*|8KacMRj0g%AW3#64ee)DYb}Kf2pzJUihIYHjiGT4 zP5hTg(}@UcKlk7trxb572|5%~UJDD_0a4@EP4&2 zDcz}`mQ@W?rILGIv`!z19zGdWS$aho-0(K4*)$>3EW3i+Iy)b1E0b?^bj()Jjb|YJ z$(qwWyv zJPMYwFuI@FXm*~fYR`h@efR7%7W)WZ#?e)sYEev@T-Dc}I@;wAGA00a&t#&M{#41c zUTny{us>4m*`5Wvz8nke!RFmP7($3X)*?CtC_<&Z{|aS-rFXp(;~z9aitH)wYN4}X zMnG;{F}ZvHy* zf~hUN$2*$4S!M=xxsl$s5s4w0OW*z08o{O4WFOK@VR4~z6G5cQwXO6wN!hsiRaK)n z59VW31h$O!v57bTrBj}SSbsFba?~R;wpQuI_4sK&{a!`sM*@6deVM!CwD^2+){ccJ zv|q|tFnzBi?wp{DFYoMeYvCOf&^^Y3fdq@=L_F0TH2sAxsyn&Fq?99o*?kqw9FAKy z!@^tNf(3=l;)C=(uE~=eL7jN-ajyNyr~KqQe`!6mptW;>R9c&acr@5q#AD9pRo9NY z+G)d`uZrS2(C|f-+v(R}3-LdD0M?2*kQwpBU3`1o$%-T5KBQE0PMrindMn78-Xp2W z!C8|k>5Vvt8zPZ29|uYwrG6pvP1SVL&2hxmU>!3pg-(ni*rWnRV8V_YDcmgcprQr& zEj?+99T8WdN5@5hh24Q}Xpe_nY1ngOC7<2jr3s|4P;}a0VIX@r6i}|s$;#SX3YYrn zG|4C#N|`Hyzi@*7Y_reF`ZZyeD0|qb#aFTJB#?RA&gB1V4OvYJKGJf066tg0l=90u#ZI&ApOk$b)>Qq zz|>;Oi;K-ObaVIEt&(pyIqMNn^lZP+O1r55r>CIp%eS9Ft2U;@;@^chfdL!M3Ww!L zTXgy#kChrlvlt5wyUPgm_a>@B(;R9I`A54s@Fffk#CW01 zRgHh46;Sf#-CXQB;yPdky|oUay~X}rcgF!YC1MK3Tp|F?oT2}Z$Np=h$%`uocw+HB zRRP&Pt34L?0Tu^9dY6Djac&f_AtcCDWXen6iT|EKT-l#-_@A<7AVhPzaj&Ya9w2J_ p*>JjMxANYNzx3Z;{Qdp6cJ}oil1$o=ZrSDnE~GKqDEpFq$lrk4VkQ6p literal 0 HcmV?d00001 diff --git a/doc/tutorials/images/using_cat_up2.png b/doc/tutorials/images/using_cat_up2.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd9790cc5bc74c48c19646661726cd600a80c3f GIT binary patch literal 21757 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 f{AOFbeRz^HL!fo~!r%oU?>GuFD$@B28P literal 0 HcmV?d00001 diff --git a/doc/tutorials/using_cat_on_up2.rst b/doc/tutorials/using_cat_on_up2.rst new file mode 100644 index 000000000..74dfe95a5 --- /dev/null +++ b/doc/tutorials/using_cat_on_up2.rst @@ -0,0 +1,164 @@ +.. _using_cat_up2: + +Using CAT on UP2 +################ + +The UP Squared board `(UP2) `_ +is an x86 maker board based on the Intel Apollo Lake platform and supports +Cache Allocation Technology (CAT). With this feature, the usage of cache can be +restricted to each VM. ACRN hypervisor can do that by giving each VM a cache mask, +so that the VM will not evict the masked cache lines, as shown in :numref: +`cache-mask-vm`: + +.. figure:: images/using_cat_up2.png + :align: center + :name: cache-mask-vm + + Cache usage with Cache Mask + + +CAT Support on ACRN +******************* + +As described at `Intel (R) 64 and IA-32 Architectures Software Developer’s Manual +`_, +chapter 17.19, volume 3. There are 3 steps to use CAT: + +1. Detect the CAT capability. +2. Setup cache mask array MSRs, which is referred to as Class of Service (CLOS) array. +3. Select one of the CLOS array for the CPU, that will be the cache mask of the CPU. + +ACRN integrates the usage of CAT into VM configuration. The CLOS array must be defined +in the board config source code, and the VM needs to specify which CLOS to use in its VM +config data. If the platform supports CAT, the CLOS array will be written to the CLOS MSRs +at CPU init time, and the VM will set CLOS for VCPU at VM launch time. +The details are shown in :numref:`acrn-cat-hld`: + +.. figure:: images/acrn_cat_hld.png + :align: center + :name: acrn-cat-hld + + CAT Support on ACRN + +Tuning CAT in HV debug shell +############################ + +From the ACRN HV debug shell, you can use ``cpuid``, ``wrmsr/rdmsr`` debug commands to +enumerate CAT capability and tune CAT parameters. You can use the UP2 board's serial port +for the HV shell (refer to :ref:`getting-started-up2` for setup instructions). + +#. Check CAT ability with ``cupid``. First run ``cpuid 0x10 0x0``, the return value ebx[bit 2] + reports the L2 CAT is supported. Then run ``cpuid 0x10 0x2`` to query L2 CAT capability, + the return value eax[bit 4:0] reports the cache mask has 8 bit, and edx[bit 15:0] reports 4 CLOS are + supported, as shown below: + + .. code-block:: none + + ACRN:\>cpuid 0x10 0x0 + cpuid leaf: 0x10, subleaf: 0x0, 0x0:0x4:0x0:0x0 + + ACRN:\>cpuid 0x10 0x2 + cpuid leaf: 0x10, subleaf: 0x2, 0x7:0x0:0x0:0x3 + +#. Check PCPU IDs of each VM, the ``vcpu_list`` shows that VM0 is running on PCPU0, + and VM1 is running on PCPU1: + + .. code-block:: none + + ACRN:\>vcpu_list + + VM ID PCPU ID VCPU ID VCPU ROLE VCPU STATE + ===== ======= ======= ========= ========== + 0 0 0 PRIMARY Running + 1 1 0 PRIMARY Running + +#. Set CLOS with ``wrmsr ``, we want VM1 to use the lower 6 ways of cache, + so CLOS0 is set to 0xc0 for the upper 2 ways, and CLOS1 is set to 0x3f for the lower + 6 ways: + + .. code-block:: none + + ACRN:\>wrmsr -p1 0xd10 0xc0 + ACRN:\>wrmsr -p1 0xd11 0x3f + +#. Attach COS1 to PCPU1. Because MSR IA32_PQR_ASSOC [bit 63:32], we'll write 0x100000000 + to it to use CLOS1 + + .. code-block:: none + + ACRN:\>wrmsr –p1 0xc8f 0x100000000 + +Configure CAT for VM with VM Configuration +########################################## + +#. CAT on ACRN can be enabled and configured by modifying source code, so the first + step is to clone the ACRN source code (if you haven't already): + + .. code-block:: none + + $ git clone https://github.com/projectacrn/acrn-hypervisor.git + $ cd acrn-hypervisor/ + +#. The predefined cache masks can be found at + ``hypervisor/arch/x86/configs/$(CONFIG_BOARD)/board.c``, for UP2 board, that is + ``hypervisor/arch/x86/configs/apl-up2/board.c``, you can change the mask values, + but note that the CLOS mask must have continuous bits, or a #GP fault can be triggered. + + .. code-block:: none + :emphasize-lines: 3,7,11,15 + + struct platform_clos_info platform_clos_array[4] = { + { + .clos_mask = 0xff, + .msr_index = MSR_IA32_L2_MASK_0, + }, + { + .clos_mask = 0xff, + .msr_index = MSR_IA32_L2_MASK_1, + }, + { + .clos_mask = 0xff, + .msr_index = MSR_IA32_L2_MASK_2, + }, + { + .clos_mask = 0xff, + .msr_index = MSR_IA32_L2_MASK_3, + }, + }; + +#. Set up CLOS in the VM config. If you want a VM to use one of the CLOSs, you need to find its + configuration data and modify it. We will take SOS on sharing mode as an example. Its + configuration data can be found at ``hypervisor/arch/x86/configs/vm_config.c`` + + .. code-block:: none + :emphasize-lines: 5,6 + + struct acrn_vm_config vm_configs[CONFIG_MAX_VM_NUM] __aligned(PAGE_SIZE) = { + { + .type = SOS_VM, + .name = SOS_VM_CONFIG_NAME, + .guest_flags = SOS_VM_CONFIG_GUEST_FLAGS | CLOS_REQUIRED, + .clos = 1, + .memory = { + .start_hpa = 0x0UL, + .size = CONFIG_SOS_RAM_SIZE, + }, + .os_config = { + .name = SOS_VM_CONFIG_OS_NAME, + }, + }, + }; + +#. Build the ACRN hypervisor and copy the artifact ``acrn.efi`` to the + ``/boot/EFI/acrn`` directory, see :ref:`getting-started-building` for building instructions. + + .. code-block:: none + + $ make hypervisor BOARD=apl-up2 FIRMWARE=uefi + ... + + # these operations are done on UP2 board + $ mount /dev/mmcblk0p0 /boot + $ scp /boot/EFI/acrn + +#. Restart the UP2 board