From 6afd68edb825e33558baa5dfd5280434425dfdc2 Mon Sep 17 00:00:00 2001 From: Henry Schimke Date: Fri, 2 Feb 2024 10:47:29 -0600 Subject: [PATCH] fix: resolves an issue with the `Luma8LuminanceSource` which prevented some codes from being found. --- src/buffered_image_luminance_source.rs | 108 +++++-- src/luma_luma_source.rs | 12 +- ...7-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png | Bin 0 -> 123664 bytes ...8-2b3ffe34-1067-48c9-8663-f841b5d0acf6.png | Bin 0 -> 3531 bytes tests/cpp_qr_code_blackbox_tests.rs | 3 +- tests/github_issues.rs | 303 ++++++++++++++++++ 6 files changed, 390 insertions(+), 36 deletions(-) create mode 100644 test_resources/blackbox/github_issue_cases/170050507-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png create mode 100644 test_resources/blackbox/github_issue_cases/300908088-2b3ffe34-1067-48c9-8663-f841b5d0acf6.png diff --git a/src/buffered_image_luminance_source.rs b/src/buffered_image_luminance_source.rs index a736ec1..6689c84 100644 --- a/src/buffered_image_luminance_source.rs +++ b/src/buffered_image_luminance_source.rs @@ -55,30 +55,8 @@ impl BufferedImageLuminanceSource { width: usize, height: usize, ) -> Self { - let img = image.to_rgba8(); - - let mut raster: ImageBuffer<_, Vec<_>> = ImageBuffer::new(image.width(), image.height()); - - for (x, y, new_pixel) in raster.enumerate_pixels_mut() { - let pixel = img.get_pixel(x, y); - let [red, green, blue, alpha] = pixel.0; - if alpha == 0 { - // white, so we know its luminance is 255 - *new_pixel = Luma([0xFF]) - } else { - // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC), - // (306*R) >> 10 is approximately equal to R*0.299, and so on. - // 0x200 >> 10 is 0.5, it implements rounding. - *new_pixel = Luma([((306 * (red as u64) - + 601 * (green as u64) - + 117 * (blue as u64) - + 0x200) - >> 10) as u8]) - } - } - Self { - image: Rc::new(DynamicImage::from(raster)), + image: Rc::new(build_local_grey_image(image)), width, height, left, @@ -202,3 +180,87 @@ impl LuminanceSource for BufferedImageLuminanceSource { }) } } + +fn build_local_grey_image(source: DynamicImage) -> DynamicImage { + let raster = match source { + DynamicImage::ImageLuma8(img) => img, + DynamicImage::ImageLumaA8(img) => { + let mut raster: ImageBuffer<_, Vec<_>> = ImageBuffer::new(img.width(), img.height()); + + for (x, y, new_pixel) in raster.enumerate_pixels_mut() { + let pixel = img.get_pixel(x, y); + let [luma, alpha] = pixel.0; + if alpha == 0 { + // white, so we know its luminance is 255 + *new_pixel = Luma([0xFF]) + } else { + *new_pixel = Luma([luma.saturating_mul(alpha)]) + } + } + + raster + } + // DynamicImage::ImageRgb8(_) => todo!(), + // DynamicImage::ImageRgba8(_) => todo!(), + DynamicImage::ImageLuma16(img) => { + let mut raster: ImageBuffer<_, Vec<_>> = ImageBuffer::new(img.width(), img.height()); + + for (x, y, new_pixel) in raster.enumerate_pixels_mut() { + let pixel = img.get_pixel(x, y); + let [luma] = pixel.0; + + *new_pixel = Luma([(luma / u8::max_value() as u16) as u8]) + } + + raster + } + DynamicImage::ImageLumaA16(img) => { + let mut raster: ImageBuffer<_, Vec<_>> = ImageBuffer::new(img.width(), img.height()); + + for (x, y, new_pixel) in raster.enumerate_pixels_mut() { + let pixel = img.get_pixel(x, y); + let [luma, alpha] = pixel.0; + if alpha == 0 { + // white, so we know its luminance is 255 + *new_pixel = Luma([0xFF]) + } else { + *new_pixel = + Luma([((luma.saturating_mul(alpha)) / u8::max_value() as u16) as u8]) + } + } + + raster + } + // DynamicImage::ImageRgb16(_) => todo!(), + // DynamicImage::ImageRgba16(_) => todo!(), + // DynamicImage::ImageRgb32F(_) => todo!(), + // DynamicImage::ImageRgba32F(_) => todo!(), + _ => { + let img = source.to_rgba8(); + + let mut raster: ImageBuffer<_, Vec<_>> = + ImageBuffer::new(source.width(), source.height()); + + for (x, y, new_pixel) in raster.enumerate_pixels_mut() { + let pixel = img.get_pixel(x, y); + let [red, green, blue, alpha] = pixel.0; + if alpha == 0 { + // white, so we know its luminance is 255 + *new_pixel = Luma([0xFF]) + } else { + // .299R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC), + // (306*R) >> 10 is approximately equal to R*0.299, and so on. + // 0x200 >> 10 is 0.5, it implements rounding. + *new_pixel = Luma([((306 * (red as u64) + + 601 * (green as u64) + + 117 * (blue as u64) + + 0x200) + >> 10) as u8]) + } + } + raster + } + }; + + DynamicImage::from(raster) +} diff --git a/src/luma_luma_source.rs b/src/luma_luma_source.rs index 9b525ee..9efa8d4 100644 --- a/src/luma_luma_source.rs +++ b/src/luma_luma_source.rs @@ -64,7 +64,7 @@ impl LuminanceSource for Luma8LuminanceSource { fn crop(&self, left: usize, top: usize, width: usize, height: usize) -> Result { Ok(Self { dimensions: (width as u32, height as u32), - origin: (left as u32, top as u32), + origin: (self.origin.0 + left as u32, self.origin.1 + top as u32), data: self.data.clone(), inverted: self.inverted, original_dimension: self.original_dimension, @@ -212,13 +212,3 @@ mod tests { ); } } - -// fn print_matrix(matrix: &[u8], width: usize, height: usize) { -// for y in 0..height { -// for x in 0..width { -// print!("{}, ",matrix[y*width + x ]); -// } -// println!() -// } -// println!() -// } diff --git a/test_resources/blackbox/github_issue_cases/170050507-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png b/test_resources/blackbox/github_issue_cases/170050507-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png new file mode 100644 index 0000000000000000000000000000000000000000..7b817f5e408ac7a40f48e1d829995df294cca586 GIT binary patch literal 123664 zcmeFZcUV(d)Gi*oD9We|$cUg0MU)~SV5pX{Q58g_t2F5fQbQ8P#*8Q+E%ev`ktQt| zN`gAnP^1PDAR;6I0z?x?OhS^oGvj>E_uYGc_uhZM=jVAIJ)E|)&)RFR^{#iVeg3>) zdv@EFU$#IXkZtGB{bmn=NO2$#>6y(N!5R6f$0cC5Cfxq)Nk~Pn;v6_w?{~uH1O!r* zymj^325>BO^PF=y1hVtClO#Jvjc;JM(}4hHO4Cy6Ha- zPW{-*6^@I2JgO!8&N3|D7>m2Wx(QK6WL%jv9vL|7l)PX%c1j?<`VOArC$X zl5t?^{J^t+%j5?@`>q;40NQs!{IILv1@ZrASO0$# zcmhrX6DLGQF?wq#^TpFH8S7e_$G!HW8L|+_u}#%x!5y36EM z-nHhF$5K^FUxb8#dHH6`f6xt(e^`aAI+hMyk^Ilt&?L@mn1?zcFdGm4W;PCi+*E4V z*uG?%P>u*FF4}HD4|eSR$bYc1lLT=qsD%YlU~`7t%f0X1a9eGjt(Z+;S~7q@E}X>_ zZyQr8O8=^|9kly%*H)^WPKIm7x+6}f#@7+Km$^>IEY1__VA9|!>iw=G5Xfj z>r$3R;a%`Y+THS!XJ*?T{sMMY>rY6IAn{f++oZt$$vr-#H&I|LIX6_31Nf(#cjTtl zuSvjER8(+6Ah+uoh=%4hsQq)XQB3d~pX@c6rt3W`5fvCWZ6}NV_LT^F1t4Wk)^4HJ z#p*gcpmW0O4i(=gnJ>AZ7sJ{EWV&qzgrD5H7nNLHQ6#}iPRuDiE-o^Fxs4Ctz=Qq& zxX5|TJoxG3KkFP6%>A-+?)js~U)S7dH~U%AEz&LtK$v~yGaJ+aA*;^rQrq!m-Hmo3 z7+`RbRT`~6gJ!IU#K*iA{v7Nj;#ZN3_YS_!!?i7#gzTMXrz31%Pmj}PaeSrMo;G{h z13c~BA9}5fIibRtgE@MMnZadde!4WpF&|HN!N}oj9yYq1cE!>`T!VE#TFUF#y}x2~ z)KkA6D#XA zn^3Q~8L5m>jC_qhDx;+m;ZDF0afFBp5_!x32_~&Ecf+Vq1;ytBp!^ z)4C7#&)btN;N(%ikg{!#3GP(eF=FF#u)u|K>xN@;usfs9J$ZjyAnKm3qD$}|K`nh0 z%I7$uS=_yi%q$1mUq6LUrN@@lRoI~$WKS*2Kw9!TIJNu9AJX||KZEge%fjiPA{Cxn zlS~Y4i<7)c!(>JNGimQd>| z+Erb-KBb}shmmK~7;%{+oX8)7m4_;5&0nZJ!cZVkrhEn3_KH2eGWVj2_8Wy=`^t}j;b>GwxPumH z-Me-IEjmTUFLhQTe4Jc#R`QN3)zXTIIfe-)9f z5uq4v-t$bR{mAX+LHavr77STehGgKf8baGmk;HJD38T6P6?8ZLvpT4FL(cxTg>=0% z8m+L`3(UP!rW#-h3JXOt(Bpb;U&xeCPLJqb2rXHk0Qx$IlvfhB~Mrc!Oj zHZZ@(!Teru`(Ng_nmxOE?jzwP3FTOfOPP1Y*IlO84p3Do`?cmxFHs&rBO4bE3DT>3 zpC!3>mHCHWboFJh8b+g*a>9p4VCYPt{%PmH#xB!{GCs$@+<_7G+JRhGT2P#BKwW*+ z@3(!JbC!r(80a;R81?z%*6d(AIhE|{TCe-ak)Ff8ZFZKT7f8khJ7pKAN0c>dwHKXs z)?(CPv}*{u5D5LuKc;m^_~%a&y((%NErnl;KF?{MwT@krbERFIUNI3h%X6Nu!j=z@ zgj&``1Py0udsR)Kb7>#zy^al?H84zGbR8KQS)qiSMH@yyG1M5Ni1Jg9y@*p#_u{&U zbFUbA5!w2ukZQ~{L%TtmFOi)tES@(3gL%0q<|G)CWBTnLzYOCp<;yi2E(qK%jMfeynYOMV|MaS&6_|{V+L=|_njz;`jwCQ@i;_@r%{>=UF(}isJvN~4 z*P>H_Qtg}kNk^~QEeJdvbKa|9m4zP}UnfoOy=KinNTd`_MCri0i!%}VIm*+e*iHEa z_-i{8dpfNU{s8nzw%{K4fBUPL-!BPRrI8jo<&lSlME>dN!j*{mM3N1#Di^f<&5JO@ z!l-Eex3@Xw4fkMF93tz3qF!IS5zU}~-p#?SJsh1|D5}r_3YZ$b7WC=rkMQON<90}rbQ@L~abNF9=Ks9dKnofZ0%Wn|3hI~qgeLQj0p?I`t z<7_2CSkJ+cSJ=DWx}DneNWr62cNq&TL*6<&L-2q}^p2xQkA=0?FQ`HyUH8a?9N1%K z=Jbvw(9gHj65uf7Yp5GE-}J!O9P?Yc6|o-IMvMr_6uNf%d4Z|iJ;v(2+rKhT4%<3m+^FL_opH%XD~dFgsSAFE%l@li$dPz` z{%gQ+lJti^D!(_K)d&=_NuRFDiOeES0{H|M2KtbCVfy>4-Mg)4ez^(F&UcmkblV z*Ak3L%L9^p169>N@$p30vF@+b*w}pf$Kr6ssD@Ik*hW`=97Vplm+N36BUlcHMpjH8 zO<){dQEG1vXuI|bYSgNDtQ`wYfB{8oDJfF|t=^uY_P;UoRKrA9U2$z2oi-k}8q}sc zwm0U-R+R9cOx@0ZL2C&yw`(VcnHRY9ULl@Bv1=FP!@8%G1|teUJ2#z8rNGYm73co6 zD!zlku7*EEm_+uPFZvhKR_BjZU^nJHP`W##i>rmY9Ior38_T(q42sQfMA()217j3c z!A=d?NuQIYhf4^EaY7n!g)I+J=f_5LRs-5fBJtV{_oO-bjS=~LVDQ`-&`Sq{yNyRM z&j>Lx!{R)}UtXMARDRwUel{`eZP%Iq?I20IoZe$Ehq-w&^DV*eENUl|}Er`;ENte)-n zSc-^IsAH~{&zn0c2jzUGx&`MJy>jgjSa^^+iERA|9{s9Y+h>^LdC?&R#oF#~;8D&m znKenOgAcx5EWTlYXty3~`+UWuaVXT&xwy89spuN0o8eMQrSIgVu%2vGs#P3SxtTO>Fm`g~Vgi{wtJo4)BoPwqpN^X;pGL z0$nXL5+HbfDCjPs)`Ucq(@mNijG}I>k67Mp+z~RrwLz8ytfDE zJx?--C@pa+y`|V7lQgU!A^i~AJ$1c17LyZIK7@hK#-fck!siW!SAo4!Y|!>6ZiKX4 z`947gP2GVC+{>P)?qPo}{KVS>d(=~6-R5(QAL)_G{FAn`t~-O^ySfGv4`tIp=30drBD&FEzu;252-ND9C z1?smFkE3d};;ehdnbQe3=ohHl{mb~=htQBH{yMe8l_tZyd22 zK8gdc%LUTzVyx97T5e_D^$ZlzAu7>mT;U}EYXYQ|8Ko3b;bh_Ds*Nf|&rb6j!im5l zu7k=g?U`=95ZrRp(|!A1N};H{%fICGx3E_YQRS}0uchTtHf9(?fFsuh_#|_8Mpd~_ z^Y&q%R~-4`+ti(lv?DE{R`u$JKM?uMoEwx_4XcF+g#wsOY_esBIW{;Od{ zjR#88IQU!tStzl+Dl*BLs|}y5_b{N7%+C^`x|b+6W=4VnWH)pJB*pe0T%s~+v|ru= zSg5Ev9YGtSBdxSff3~Z#|GPx|F;_3qFCO5I z8>jzosrgTuJcA~1XLrW`E!E#L_BAjXs7jXp|2eDwNm^0xbC?wVddT*O^$_i|yd~Yg zxH6O&Nq4Tr(AThjFs?r+#DBE+N9o9SIY9nfP>3ni;o;%`8I#7>gi+v);)2e6=BrY) zorI!H?)yIcXX z&lw#uc2_ z;OCH~tr8E& z)j`|_ZpBtKBP<}IKma(Tx6&U>fm8VS z*M&rEvF352(qJs!y{pPSnHg>lWPEJXh(hGy_DC~a9}gq74Bo1-7B&xLFUQxutvnER z5w_WDB$R^H90I++XvY2C%KpTuiyPZ^C18MmwGYS{|zYwFnA91ZcBU_ge0(OkROGDT@^F1mqg)pO$!Lt11Uu#1gpY9U zwiLf5_Xi;#@)QHY(W1A1;Q(7&(ImAV^0a30xN}%b5b@;K(Uo#2rE0^XeH#tDB!qrl z05#%ajjrWCt21BG5%#OTBt{^C#JwjsuZ6h9!?)J9%h?OGYn6;~fn&v({jKBjJRsn! zJ;on+$7((L3v~jxb>;xhuEfDMLgJq&x;EizQ2-!9T5h}C=UYPE*TUSn0FqcyUBR@d z!FWiU*KT{Jd6P*>f?h`F=z%-quLV_VERcHNJ&U~UoI5+HOdmi&AV*{=S!*CqpXJ0; zs_rv#^aB3Qu8xizx)7zQc%>$C|2X&+0S^PnyLC5qG?3laQzk)UkcQVh!UF?NMor+v zdt>m9d1nBy*_V#5>MqgD0t)b^$9P@&NqF(GOBe}8ZsZk7LyqX~FGE<0^Q-gMZKZ%V zf=p0;lO;iw%0nS@+spUg4*r0vPRh_tK&*wtt4yv3uM4)8Y-723(4d|a=-K)`d{1wa z%c2tGI@sa`-l_V<@i_}{Q^PNOXVw*-Ks0Xr;V2;CA^UQR6#*nqkh5>pwnho-lNDm0 zVFG!@ni!@@d)8KNBR>+Y%c$#oZVH|rQAo17;lA z=w@4hoKd5uaVQh^YSo>(y$;EU3?W6iRmChk6K)?fM>1kZhN|p<6@c7?CYf2txfht# zbImS^D#8*-_y`lDMU#qAQ_e?(K>+E3SEEvSm%A$pX^CH%3xs?+`aQw&4kv~EwkAGU zOWw`S`M2__&}R{|4VBx*9(cLb-FjtiS|_1r^NOFLhZEw?C^swxp29r4T#5-HzVK0& z%cUk8m_u6TzDGg9`2KZ}k5>GXv}b(hd*%9g<7Sw&vJq2bs~-Gqkm~QG{Ca`f%xB4@kZey4{+ZkZU-8C3eZFsxBx?Ha z_M_JGyCi;;5_}iLfBQJ#)53TZ1%(h5OFkgNawMdB&a6-kL)+hu$N?XLhivk^4<(2Toz(gJR zoK<3i#p;wva_NNS1fCAV`F-W}ArasPd#-r3PwW;);le5I0*l!bGA?mUE`s^F1}$6& z=yUZEi@zm{ubA@tlW~FK3i4g$)laQ2lvZA~s$1|n9XsoB{NYM%b9Q#0CgRH`ONSn};H3;BihNePpcbI93XW-y6ONUU8!j467LJ-x zQQ@LN3*q43KN;4mEdHvD_Y*6Nrj$KaKUl1O0OvhLER?*Mr6aEX_9yz=pN$-5Lk9M8 zFRvacs4q#OY9&Pa;QGECM+tkGS@gjug>LQ|%mj4##<7IL0@@=gf|CW}Ugm0VuW|F#w$Qi!;XG-Qc@cr*ieGUx@*3fWFW7{}4)&}b z625g7NyI_vZf9ZZ=Cnd%2t9d|lVT!bkr+aQDG+T!;SAT%iezvVizF^eUNy9Wr`KmF zoI{J|dRE+NV-?c@^*|P$P1trJQ!HY>o*7Kn)!^d8+=DYcD+a^xn&`ybt_b&~O0oc@ ztASqg&rad*9apd@B*07J%!8QXM}DT$G`2TP%xz}EjnEckLDWRS>WsRMXptgXEMPSr zLjOu-$26K#!|8))(K65=-MDTqrNKs#kF*6B+c%-FEc&V}zV)@^tU0TI2~UQNPlw=` zL4AEd|HtiE1>bLP^pP z&>3~C{BNo{F`Z(jgLxt$+?$8E@*6?~Ox774mDMXPgt(9m6tv6DKp_R;kIR z-v?dq71r0I#XPiU6PVK;dwE(ud&Af!{?78>Br_0Jpe~lo1=?5xjaMGWC5z0jlr9fe z7-nEOT~4^LI;SWfn^&gf4CW9+j}ZIUVUMp5hm|HW7?p0sTp|TmUbZf%pfpZhJXCC6 z7d?SuW;*vMg@OuyE}x-!-y$BI9}-dzN2PxRO4^3Agq(~Uts zd$DEhA(M1Y%=8}06$2!ZG44|y;t&&Zs4s|GfSs%_OK6&RtaMqt)hO~Tm;h!0DX7qE z1lRaE#3ot+)O{qoK)g!VSwe~hOw*ys153z_%&fs?__d!k{k+47`^Cmb$nm#>k$Pg6VkvZUE;iBP+g*z*i&dT_o>(N; zd8^L!R{>ruDBa0DOy>jL3u9+vV&a@@cwZ7M;)tujAbU1OzuW3@lZa@<=*b{i>d5MO zG^KGSXQu)8y1K_6);v_u9~UQ8F*IIB}uSHJZD>(^$ww_t>REb#hgw0^9I`*;5SSlRbo z5fwOX5GFl~rXJca8RWXZqH+kR2z|^Pc3X z((`u6pOD_SyTVQ0>ArzmtD{q8%y2|=g;dR*rRSS>s%(_@1pF5=id6`LinJ; z$Q;zqc0QZk^9|SM&<7oK5Jn6;IZn9a+2Yp_$f4)|iB|h@@IxRHE&QPe|3?|<^*Pv? zt=wjEb#wg+Vq)>S3U(G|OBI{iK1tXCX1za&TLxGLc3P~sOIKjQ%2Y;Q76!BomhCY*c(Mn|x;Qf|pc1XShv;S*uD2`{@s4Sd4o4Y~Y?G5*a z1F1JG?#o@}pn~Yne@?!b<^q1?MGQ?JJtkqPLJQb=^kt=BOS1D)GGH=#UL>27V6_^A z>Xx-zk4iWLl4ftswn!fvk)h~972apR;FqC6V7v$Y&$*g_R8(R1~BI3O%nl=2Ocd}_+6 z?f#kWkzPu~4@KP{pX=3evp;b9JFQ+!IsY$#4Zri3gtFe*T^C=SXktdr(g8S7ZX>N?C- z${!I4xfF^be7V0TKWcIecAK|*6)C@qVI!ms)OxmpS4 zxTxj@pPu>B%1PL57Xf!X+%Ej{pX!EDS1cn(%F0!~~9bB88GO zl@*Ok4YX7%Z4C?cL(IB8!L=7_TIF1i?g@E&joFXKE>sh8(0~T%8FuoVfO%gxq{Oj( z2W^bszTxic=w zJ!06g#}2_ttG1)-zpne*w#Ue1;mxTrqk;DFW$Jx-kI`|2V9{p}rg~eojE`rJ-=)Js zgosB+!5dA)(ZO%tZKUq*sLF)D&Olf&%4)h`Zk%_2#){Zz&!nj)dL&u7QgNL+IxZ}n z+05O}^GNYBVxAyq)>uPnF3?DJK?b*NX*DLa1LkI)*1)DWPraQ^I*g8);ISub#3BKT zI}a{1J7FQ_TN~JZjWn~^udVXRdPvUQreg6@6n>AMINHY|8t^f$=7fgDWGC~(tZY=@ z=OxyR+44#y63)|H3aMoYeLZRYjTiM+?RKA!L-$vW_|g8 z#36gRIB(D3++RBb3o9c@{>3b2TwfQr#d{6WE!-wXlQp41+2i@;j(j>B`)3Ew5fjln zrFMWaA>p&qnSXYw9T3>{c7|(PZV0M zGM5}lNnVZ#Th4Q+qo<4&joD!)BFQXf9(l&iwDO6x&w*+twfTB!Ic6Tb;^eQ@+vjRd z2!oIC&aj?0CD*rmW}39~`VgEN7V~SDAti$7P7oQ9pokGwvPul4+Z)}*>A>FN3|~&F zaj=CJ@_-JyW2|O`D$JTrIX^Y>5&C0K;k;9VH+}jEx4evg#p5vA1UQYTgqe@LahoFi z==DS!3NmdSEo*nV-9Y_Z;>_6>d;Oje#p85yC%qI*CBG1j<~Gp{U`tqfid&>tegrvVl#SQ;Vsw|k`rywC zqek}?SC0fL0zc495veg<1&j5Rmy>vs7w6k_vNCH^cWw4uA;>$Wq-AuYc?jUR9{qB) z$NJ7&Yr#TIUrO3sZT{SlgWcY*-XWR;k+!w=(L>wftGlHh+yBZr?4#`<#~@*rx*qd7HbU`|~G&VB4&lTiEnkNhpvNmADupIyr|JK_HR>%Fz*-Dt%5 z8z>8NyGtZHyvlCN-#rh*vk}(uLt5!Ubi2(TwbHv+HO$Yw$ytlP42<^7OPJpM41bGj zE_WWU>f$pvyA)^sGJfWH7`P3G^}||!bpunr{<4&k+94qt(fKFh;T0Eu3t<+d-gP#c zH>e}kZ-4XH#W6~CfmA}{{Q__)^;4PaZsQuswZ9tQInw&V)K|Nd)m*YI7}>{*ks?`t z6}N?63lAt_Fyv%ur|fH5vpO>GeAckmB^!ai5i;KL?f5VLqOV=B;DIR1CA=m$TzcjT1A|6bzs!T6o^uU zwBIRt&Z39=(y+b@dv+x7d1VIkH(qZR zvuVPxW)&*2ot4;6ceYw?9OQJK<9i;a5ULRh%Y$YzJ%*j!ZtpcQy}!+@9wHmly>~tF zi3T|tH%>kWcAJB?R%kNF$upw5)tmgGpBi3-CNWi4x? z{2cLEMVL;U_bgt9_4YK}{jL31y46?(^fGI&MOa9|qDBAjFQK9^+bl1yT6np*j@4{V zc~T>e3V*ZUr}40pN566Uig3V}BbN1B@pI_(PFsnnDVb7XcVK6)a7w0TO!YQ&kBKCf zuv*6ldKOlmN2V&OEk=;7(Zz3|%ZkvXU&(x?hhhOAR`@vb}!&;GhY)PG>>?V9}JN=l| zj_bWl^0a2QCr9X=s6VK*O9NqRdvwQiOnKar%BfDhdKNaf>AA^;BTN`nt!+TPbF2NR zA?cP}jL>_#GhJfgdSn%ft{4bbe)AT08|Kf7(h#E{uTBt+3a!s6)7ZbFH!b>|%q{da zsSV5XR%i=f-FvfTO*19_i8U>B%WBV4bNsafvK*WJn}ovrVT)FTf3O%p zy?SeQpM`jt(#~?%3HITmnW;Szq&9FF(Z@!AedKqP-DBj*QwSf7YA*{PsdMLAfCPK9 z*gt23+?A`b%D%$0gB)kFtzf)1&78mleQg=K(Kn_qoU=n7vIxgb`W}RG`})4l91K=U zi&GQ#hLaTwgVPl1ghZOlV&r*BA*I@80QDj`v37@laq!^*X7<4371Ek`=>5LhcQ^2- zS}y%#`XMa~sc-bJQGZP~9gu_(J=4h+9!2-%TwcYD)D#SB)(zQH{T_A|@Vfmt1qRi% zE0Ul?_T>apEG#TvH3^mkBR%0DXz{ITmCIFn)VpmUfhXe3zDUkIZZQb3yt7D$lI-Mm ztJU}226;_~5#-Ui8UO{Wt-(-6%{7`v-T(RWLGm-LFOvEoU%Vl=g9qy+>%Y;Z&spg- z-|loM5H9$k(80Q+-6{^}lD>?3C1-GyqCfpU;8D={?QC1|l9!hda~vo&r?hB6U&{p4c<)Pp^?%svp~y;;6iBwFd^oP&WdHL8o5Er}p@?xXVEG4X8@$o zCZJaG$5x+2G=cE(?>J49+{~SH#hfRd*G@Y?@V?OLZ8#Y{U2SHcN7NzjCo>=H3Aqsh z;wGA(g}~YWurT}1yV|OmRIAL$R6!AoW{(jO%UHg%w{It zLL3u5=7Y-k>FAVC#Tyjl=&xxG-KdggOSgvv4>0&BNO)n!rX}uxy4X3 zs8t9B|K>5@TpQ0`$IH%zvdU_&Y$17K1VNx4YV z*lj&pAhN?3_Em4Q-N}OQ zW7iV)TIOmXtjzm+%u+StgbYs|Le_f>LgTYlNb0Ieuv*%=sjG-SmhXI@e082irU@Vk zEZ0o`7F5$?Sa>cJ#LTm1dYAN`Hl3+{DXDHM+^nEhpr7lVx$E{Pc#dfzm&fLR;I)nfZNmO(I-(iY9NzrXr9Lxj6kLn}a9WHC9WLb3^BK<41 zVg(YAUyvJv`}#OE{bud9!e8Hg)hNyzkPsi*771z0{KeoKtX~xV%zwg=N|b@lqzpug z@SYV9qTWlXA5|}izRrA7MPR&?A;p`*c|s-<84Hv85)RAbj9|-`-QQD}y-u>hL}(oI zL&I|xG31J}v!u=&;z!mN!sS7$i=O-=4tG|UZ@r(9-A>~!`@H9`pU_|t!axNma5~AP!fjD2%me*UpCU~;+0Xhn&a zTjn*Qbvi=f6Ypy>vS|#cfYll=Ziv)}^SW1Q1k5=LRVT}$VP7kMBQeUvu$I>;4``TF z`MPYI0#wZ3LH3DU4N?%hDsrC>#*e>$oempWT8WG8EFCywBmjf|m{joY0{O!w`+vti zrRC@p3-C3LTfW#o!mP3gs8W{djh@-B>+_^ekgr$EuJN4-d&sqq&b))$8#P`v7K#^I z=1N&whsB-k7|2wd+w-#8!b`fXTC<5Ghl+;2l%I zhK+&1+|LR1SUIay_j4zH-lBHHw(FOG0rmF&bg znn9%o`A8pU~r_^LO7RNqMB&TpM7CvqM^1v9-4vI_}d>0#DO}< zO%_7}c(>vzsO`6m&vji=dt`GZ=X#awRN?MWiI2Y)a;H;vv~X1Cgx~xAd)e9cGxdPV z%!C*{3tBsQuS()V2|q*FOxd}*dbRU6@-ZZi{j1EDx^1buqSdWELa=M#2 zR}{7zJ^0)<=)Qxi~Qh@yf?=1Odru- z>gE?u(rVd~3P~T87}4>M8+)_E?qr!0ls8msRWI?x%XgVmKpl=;>9n!WL%n;VppqT_ z&3hg2=&+Z&bxz;vGz$|^XiA;O^g^rutbKBz$uyJAm#r$?%ml%{*6CQNxG#T)-f>-L zE7m=4h0cqqsF}-eI=xe0sQh~VnR7)0%0y1()H$^sz}^@-{E^ijUL4<@X01vX$7B<` z!w1f68A)Zl+^xIr=QOh!zp%s^=}u?+<56u2e(B@tgw*G4-bW|OynP+`>cUjl=`+>I zvg1DSH!6lutLh3iA+5R3v6|u4Nj*lCrf!Q=P1l071&zM*m<&4Apr*pPugRCxXV{(o z`F&8r%+V+GV!LoFN;eu8JHha9%EV4=A1mPD11qpano(Qy_0Jgu`!z$Z+EPQe9HED| z;xt~qmWO2hymJWD7K;3^TRgVRZwF*(*l_*5r&xQ+Io5=V(_^dAY$i-9epi^9qRl?Q zj1`MPJOz()t>%m#&mwX2lhyq(F+5PetrdR{iE zpC!fJh4I7IXzl#$_ggH&x6%7HLL9{?3k?yZ9p-{+L*)R@czB<^;x|bpAAeY4{o~)A z+d-6&xN%G2=)>z4?Yp@TjGCTF@9e(%K3iy`sc?KFO;z0CxMY6>)gIP3Cc8xhDrB|j z9F3h;+Inu=e*&(2ZKJ7?(^orlHUKoWf4gA0T@!~ng)NH=Pcg74B$F*K^Q}8C=Ux%h^2rAdd=5ji@_E?CfEo|`zuFhCKj9Ddkio!Y{q;`4> zI95vGtWI^KvwI^hg%6xp&mhaw4zrw z=lt&ci|ta^!#6a@X7^aze%YB$gJ$a;fCA{CbM1Bk`aSMZTrcy*&)HP5{vBf{jumWC z>x!Pe>0*-O9kQm=mU+F`rtiW}k{%7%zH<)=PKyjTz&oolQhjy@=kHou&&cebk|O?E zA9udW!+Skq$B5ZgZjpk+W-6&jEnT;-nulHcNZ2GvXZ0tE1j+I z@fb<@L)yGSyw{e2SImZRCuRl~n>ku+K*?kv(pxaZ~geB+KK3s0=En%h=#T9rz@1B$#gaA zUgb>#$xn{Q`qr}_FF6XUwH)3a8-YlcLG8}X8>HN7-%HIi!-oP$?6dD$FS)Vxnpei1 zDoG|R2ISegAf0C1@fzo_PE{*&J-L{k8SOnmZ%)K`R6mf$#DT<`+R-fCMb(6Jzq>ER zr;xjf-Y$aRP@`U^z}j42Kc>g~S1gq&@$W^;!4K6omG@NY{c)76#mKfU%Q)FNz6C1G zHaU<7zQC_~%Cg@ZM!bK{MB!j=aF&~z^W_4ttjOW~HD&Oz6qOg{`l%+@LbuG@4;f`X z>G^Q}X?|&I;Xy5jGcoGvy+@T|79VZyV-NaPkWi88zXoeJFAu1u+mJP8t#YLr1gaP8 zZU{0e<9w_KC4AzY$!siu$~pRdrZwGSkaolJfK?q@m6-N$K;~p#WP*zM+#Ct6UQc%( zd9)l_If?psObB&(=F!+wZNrY0Xg=iX&9H*}Rh8Cog+E5+UKG9xd>)p8n^A&t?VdR6 zC05C;)P-$m@iqp^RyIAApsc;9=8*l$TiQP=KVn29xOlVn{a|6#rH=BLv{QK?^`bwc z`oYE%ED6bFf&%8kZ#Q3i?@<$+x1d_WG?cpIKVHW8Z!Er4x%u$R&PmMa>(d!0v6!pczuzV) zGKa-1lGJ1N>OGoNw?03ndS``NkR92XX|0jPKoJ``q`+JW6K_2TNDoi`P2U0EGZ;S+ zps?`PSQk&2Bks{T&(P+TuJY&uzlXv0*>aNwG~S5ci3FRNyBg?!$qs zjvRyb*&LTVp)7nQNp*HjY%Ds-HxZ_lY8UnCztLli z?oH2GvAIQ&a}BzExZ}5mwHhXq<0G!W%UZ;Se^Pa`Wg#X z&&EMlk4Xe}8^n|8rQ@pYSrgS|8ncbF&l7XfY>i8#Arm09A~;Gpd?IGx#se#xyR?2! zBddJq+$$fJkl=*p4^yj%%}WuW(>k&Ji8*&=%-@>&HIc!x+l@U&_TbYp=T7!?CVg58 zI9qAQ3Ai=!`TdDndHYAbg_vX)7`>DMU?%?EY~L<5mckC{>Y{4+Y^YJ|AAr2LQp25u z^`)SsjZ}C29k_+)niM8GSZ6)QNn@-}&;VUDx_}{v6dtK|O+o!$ip{u16M)EbeEjBz zZK~}cFh7+eSw_%fE?96V$XyWu&Xtr05^aUEx~=I#r=wu4@tDnbV^yioYS=Smdx_LB zJ5!sD*6rtz=!HGwte3%|7Y0I1RtQ>GNH?Q22lG4yo-w<0Fz?yHrik zrj9f!45LdG)vn+`+P#=EV3bUk(*~sj{!)#*^ynC!Y@Pb@^EdL)3Omq0LF?l?9XAh# zN)-b{J2e76i6v2;K=reoF|jkIaeB^{Te?zVwfB8?1y{mta|tg$h5Up)P7WdcvJ`MT zMl)*9IYd8NA{d#mfYS0DRg_yb@qL*jq80ADtCrU6Z8?&9A`6>#lK+}4PPPz5OUgnF zoIGNDI)hlFNhV8IiU6gHm3}|&oo3UOA+m>LMOME3{4lKkf!o*{*JZF+wI=tyxkOV! zcsXlp*5ego@{fldSQDnQ-sXgJ$Y83*uX($CY4m6SNgA_Ejiv(LPyJnsg5QOr-au*8 zV>;6hyhY5VNrLDYz^I!S`2!wQlVPGS^{5`?X!XQvHYr{RA+vDY=1SKMJXlD7&hx52T>#R_mBbp}vcXDvlWs-1 zQ7Y(;YHC1O+Fq40_k!AtAT{UHPGNtH`(Fj=Q}livg%HcgCu{NE@->7sJ9FoytS{I; zc*V>?z2;lCW%?%Ujl2OMLyg{B zeJ7>A7Y5M)ryR+a;C64TVl*NaTXS-wXVDR0J&GRUx37hCp9VBum23CsHvHkR zA3iKMWd=A7ohjHu&dwuI0`nJ>`fFD==tQ4jW9pmB?{y|9#ol1I8R4o{yS1)Peocx> zzbPqI&|dU?DPBo1cA=-kr>xaLF8I9P{cI55`G!wK5Hm`-)Bv#B z`iP?>uLGoHk9qNS*IN2K_>|LxmiC^~dwB|ld2fssi(cuh2{>~y+0nzO5)GuYS*JA= z+Y`KYuCpu5J7#BeanJg<4hrXr@%C@B-glKny%)HKU<Gqwy8O7J$Dl=>N1>_DVA8RPOFPfz1VPbirgL5(5!PwJE2UwGf&VOPpvMFMpu%E zzB(Gx)@ms}R#Ri%TLdir1oixy>lGoWZa>?UHR*H7<4Rmmf}~a7WrGBS``({Z>y|04 z`x$vBd&Ut)8)E+ldvE>^_5S~jOX(b1Pf@ARhQ`>kCR=q%c13muF(d|!>}#SrDzeSk zm$FnC42H2UMPm%fz9(kT7|JqYjQKuao%6n~&*!>*Ki3~{-Ol{bE#1P*>-Bs+pO43V zdsxn{BEx(W>qJ$oHvJ)t*zcBhP(X3eQhn8o>i_=iXk^vcE79u?0KIhaCW&GdV!>k* z>2Wr}UY;={;V+2Fgn!Dr$!I&_xj?y4!@rhy>U*brw|gi+Ffl#dytciIPUk+=(^B11 zA!!p4z=f$`Z+|U0>ol5C1gMv~*i}|Z=vv`&P~$3UQ^A}%>KLouA+WjZ4Pnakm)UHf zK9l50BDOf-xZnIztL_$$a!`r2Lsj;7s07a3^D?&!S&RHlC;z7O2M3t2-a~{3XR~SN zfkbB8nUa(-(GP9_sNgQQagg4)jPZG8+=*oxsxm5!7YOeU=_P_5bX?`i?vngZi>)Ht zUMoNvQnK0&OoMT>%90S2;Hi{``EG-FA+RiLDd2$~vk7CbAv5{Ezj&ZGt)|J2TaXym zM=UW%J!OVLE|EtAVBuR5P++5t_LOSJ(Mo-7-nGH94t3XapnJ9SRS zh$uR!)a7Z`bIz9?(XlfEBvH9Jxktwnx^v%1Mg zDbD89u)&BBtNvYEI~hek=_V(r=b96CZ4 zprex-JF_Ma=ZanILcdVB6nN3K5hXw62C!1!!{3}M0!H+j?X}8c3&zVj=mi!sQ7`6S zOX_hh%}&lgTh-evsZTQ6zW6C=mO%fU)PCq>!HXhmJ~?>_HFjpUItm6wE{8W;`wk7>WO|<0it67 znRV<0uD&9Pn=o@BMRWM7hg90bP!iAM+B4(YpAl*DP8$iXHlVQ+73sh`6GvKF-wK~n zkw=*&>BFO9pd&OujobiEu%tSPN7^m}G8>$|vXmMz6J5L9*j`^h)rt^I5!{4uJ#)|y zdSYoTfJ*+%nOJh9#YRK8tT|Jy+wgtaw|}pqtq#ndHqSG zcHRJv>_hrDJa(k@kYK5LrRm|SSMG6l>2DyCBkH&GgHS(g`Nn=7HmpfbsNk)P00a|{ zRV?xU0N4GVy0HRUlV&vc3Sfw8ZCqtFYtaIAb!Hft`JOGvPD}%WH5nc+uhK}EalEabbWNfowkB(S@35I9WoCn2!@kJW*up^f~2 zIqZU6Vc85zn}0Quepz>VCoEw{E|=u&8tHs|+)3}w3zP#uphUBt+%#K>I9iu&>70Vp zy>I6+oBE3Abe?35rZzbJ20KKab}gZ383#iWHYKdBujL9*ww8}cE30VBMS+e)XT;|8 zb=QK-z1{@F}R^PFH!3g(@cV=qI8DiN^Q z6LEtnKN9bmkzIVz!PVv$lr10=jdij3c_ zp$EMNX%IXx4CI-Gjrh}C&z+pJlA6*TGC3-)$JoO6LQZZyiaUInEBuPy`Si<5JR!t) z<4~nF18dQE z>j*J|lLpAE_=H@q63T)2XLW${ljI3 z28RG&s>_1pxEqZ#!oYj3r~B|uwD8$SMkdEL%3?!`)G&ohq6Hn{{av4(>x)hHsgyMIKTQrNf&}E#awAuc*?C&`D6Ejl6Co5 z`7a-da3z}_`bxO&3^l5HbLlq~uRHVV9ZnQ`X&63sgxk5#FI4Q4eiIQWRTUxq-zrn? zmCA>Zqc&bwz^%&_J80maw)7-rB#s_XzpH>(L*7p7cGc@LlU>KgTN)xKiSc$gh2*T_ z3hc(Aa2MTA8EYTqgnfq`D8E|x9iy@}5PkG}mi4y>qZug`8Avri*pS_*Yb#r;mJ!QE zo&#_b8j4j~Uu>AKTsO6kN|1%AEll7=qvCk~GO5FkHqC6zS23d_=Q$N=Uo_0O$O8N2 zp{yBM`plT-qvM(o@1=J3(eY9JvpjbM#|AUATqe@n3%sOv9!NOt^c{hY1QKn}O*L2_ z3u5kr=k@F)%-@k6Va|GK3@(89kZg>%Fz|Kp6CdrH_sXiRe)^Nl)wDA_UHW<+%N zFJil;dF+x>v%9d~n+(Eo9e;7&OPMGXZ^~ia^{^-U_9I7_)LE}Xxcry6`m2bmbNnl! z=?25lGBT@?|O8C{B>&tQTt@^y)CPT?^2C^?iE5jv2{!F9LRK`oS9U=LVOR!y? zB0FjfH8y6@ZeJlrI+A2ru!{t{tIrX?xD9k8h?bSr*GuEjU1jCY!HGJ%b%pQ0|0D0B z)GP-UOb%~NFPJ^4F}nm)(%XTE-avoY2EvtqtI-RP76vWa;KU94Lhk<(pEo0MpS0h& z4m+FwRPxa-02(aClg~NM4}v9#>y_!&>3XS@Ab-y8qY%HGXw}@2)k<)aiTfDWoWkco z(Rmvucg(V?XyrGMK!V0T?s1ZJ-hEZfNVn}!yKs;@sl0(%S&|eM+YWYSbB`BWQ2dMg zlf7g5lfSetk4(J;;voaq$ST61>$6 z_lUX3k3^JyW8^ztW6(2wrGX}bp?>K$LbJ+1XNOHb|0(C(2Z*zbnAQ4KNIXNd)w??S zqr)w~dI>t}IbD8)$nU(t@<@fyP(sxR=~BTGzJb9AJiML%VtbqXaq0Q(ZhRgGFjDte znkHJrDms)8)u};}07vc2NfQ6a3TFm}axZ^$<4wtl$lNqD`|jL)`7|l0T^8*dPwW&sCf!fE^EZZ<3gCa5AjwP!|fFpt5@4 z^7FlQou+K`hi3l0hSxkSAp{fqwLv>H(R#$$%TX?=Cs%V41gIoZjk2zJOs8GRBhs7w zkuP0UzbM4V=1nHVQey;&<7k2o!5jQ`nBZ*!aud$k4Rk{PhgM)A{<7i~M#%cOGCMj1 z_ET>t?JZ#FqDh-2pOw=qu<#M&H$<5XO7v6L@82Uo^5#6*^XhEQy_P=y-8AqdJgqWc zASZG+r&JDu-HuD;y8m?2Qcb`(Q|Wyi66Hyb|6a$54&lu-8N!~a-_rQJoY(EWCt05j zzH3DeHV2igZ<87)XX@(fy{`m)Xqe$)n64*;{}_D*P{#8$NPy#Y>_*m?I1AlqiHFp7P8 zoiSxX$1bHxxBXJ0;c4R}M$&ZM2?29M$4fIW}< z?^g-jbm+A=^`Cz}9%$h8_dkI@?R9_E-hY1`9u0L2|GfVF0^Hw!FUY^w06Y)>w{_6D z0z?<;<3OSUEHjxCp89RQMzOW@9rhias!QLecWlqrUR$afe*J3}4fM0D-ZBLDR;ufZ znlJ1Ow>^#n00zV^?wrm=8OSf{GXQq z#DyMK7)fGg27Y_%ApXz4ho_{>0wHx^%{nWY0;swA$>iq+S;BsUJ8%A#BCz(N(!XT1 zE&b+q<S%i-0>i_d$Q9b2Nm=sW7& zg8ygNmR&an_cSTRvTV3hpCIe*+?{nex{J0-{pVALV*vhdPtfW4>eZWWUrp^&_?-_T zZlKp3^sSx7kEA2gGH5f%f4;-Mi(1mh)g&n|e)K(z_G=-k7%j$J7}*8DH}0^q-CWMR z*8vds>m_?(``$jTo!JN77icqo;Jugs*ZZ2i8O6mlo&D0y{W1JOx(VOZfB6lI+5e|C zez%j^WQ<=0^TsBp4B_hG%;^5+b0ShD1WJ5`UfI-=F)mp{d3fRp&mESurLeA|1}fcu zG^_vmeG|(E%EJwr9slbCEK*B)xMb~H1?WDN9L=~_rE!_^afHXclVHugm>N0m#EN4& zf4I~c^PlesA5a6fQ)VJ-}j0ghtpOTmkjD$ zBsfZ7LUNJNI}5kkD>3@6Scogx`kzNUuX&4loNIf3zwkkd`-bxxzMC|a^5vhWG5l>l z_~2p=W=9?xXRdLMl zGm~z=HX_`0%FfeQ24Kj)UJoeHPV|E13;JajSz$2mGf&h%=X8 zorS!x&VW`y9YOd{onG+-QV9y6a4*eocP|$M?=1xiAwA8A^#d;Z%2dFPlxzTo=961M zDijzIvfx_W=pTkdn?JV(IH!av^J<9fW_&0IY8(srD|y?g5?U3E9bkjaFEQ@ z5-3NUht|st52$@_+RF-^u*O*2`Ad-b1cKS?ZqP!i>3~|l3;C70N|#)MoF?Zr&G2lz zWI)zZm*xa)iOgPBi3=$Yo2WAzaK(SF0yOf_UWSXcBxvd7Pg(~|h5;qM^Bfsml6A;x zB^Xn@z=Eu3f1HbwwXKUIANNkjWbH6jU$~>lc)rZrdiI{&R zNtVz2@%%KS-~hhFfLRWb!++32W$1<_!BlvfV~k3^^5D&lMa&8=ZaD@5pD8^zM8?yC z-ax99fSzXvg+G;g3?U0h8l()VCqB6ZMKnNamB&lnjMYZYI>!SdEhfhPq}GNsxEL|j zs#U3V&Y+W(OzF)Q0_YC~fL{s=bVKJ6piI!6cKCyUGo&J*T4ut5(nE`;m_woiP`zlTNdGG*)kG3{UoXQU#pt1`! zIl7oMeKc_5onQt)OuhHkkM?z%a60H7Dz{LMc$F@%UcinF{4psmHVqs`5@9>%Iqrs& zqN)ubha<>)|Jnzc(6V7*?t7wEkP%O(%8Q0I3L0kCPKL7fvBpUH8~WX$6OEb`An&(C z0m7mmhj@r_C8urV{@c|5dno_Ee<=S`2mfEY^?%pFzv}?>RsZ68|6T*IUHrQa{=Ej! zsqybR`1cz8yAGf$@b5bK|G5VL1I6?3f`99YiBBw4YMl#m6S6J=#%JMm zfC0#;?7+(qhVJBLL68F!od}^2e+NYZNm@VnZBRBME&I{_dl24nn!WMNZtIl_K&Hsv zcWMPxg5D7{8cm@YJQw##KbQ^uw*+`6Ke!x=Dq%|{Yu^}sT zWA28g6(&zLET*{5(|KZXONFqkF}hfAIBBhu6>6>_9tt7@lsU7Utt=1-=@ix-m@gvs zTHWk(w=IKp15*&>o@a#DmuC}i2Uh$&nQ&;}n?lQ0Q}=p~12$`=hdr=bSifn^?2l=TG7c#e2y zRn;?4t(hh?m0$UpAW4x4A}64=2AR7o8dUwdtE|96H7$pP+F5KIk(T;PVCfCK90yoz zU!W5806MGs<#M}*(JbKJqpB`Dbv>#@BNA3(ei?<(WU0ZR2eLrWl9jj;1xDBu)Zf^B zR>ev#LUP?nt^}8U766Kk?uIJVL>f?kE&>HkR|Z;RFsvaHbsrL;x@7p64U6xFv6>+v ztvi5x>u+p}u_mBgPa9x1LpFZHvONm*)xjXW9NPomR21CAGTweHblp=)k8oM zWqo0~^7<%1Wy$yD$7-BeGb$=a>9p2IrEKP?GJyNKO4~P`oa{ale?oGW(rHE31OQ%5 zyC_fy>cs0XZ;;TG=m?pT=<0IERA}+@=UB%Uw;Dn;p(vif*e!}SvEM0Ib0yRtWPir` zcT(A>RrEM2fy~yrCw9OjllLNY_<;A=3_I-RNQh>Za{1Mm6iDQ5>G(qN@r<2{bG(YE zqf!26&vqd{$t>kZ!Ld*4MA+a~-i0g%h7#?9U6As0`R&w%qu4aCXu-o`buPM0>Ya}0x9i>{-2DnJvl$dkUCl`KzY`<0HMYxv29J>%@0r1igmj1CtZ zx_8#ij%Br^oSoI__g_MuI*&t^@xKFpA*0@(6OHJ-&X;J(j*lZ#7=N__)t2&G%{lRN zy0zj!7XR{2-mV?4epw+*n7Gd2B*NkSqQPnUvWZ9%dI4nGie9`+y(TN(rQ#6ybLt7m zg@s?#IfifDubOz~FOW`nTDzs2f20C^6(d{Hc=3GHeJHUez;HcRo@Y02K6+UtWxHE$ z_MCjkjP;Hhl@+pO+<8UXOOC zhP>lg2$rlmZVwHH73GT9fzaW-!-HT?QU`mI*>-lO=KEQfMy2kK0NsYxb!%jjsqO{6 zP$v0uF+Uo~Wwst%So!T;A?9lM)&h1%;>Mq$yPxk}XDfwmb^EPNWv2Zy=#u?rNWsdB z9RUVis>b~BR}vm2e*KUxGX{L9&~CFcEB=oeo7ZX2^tG4|SKT(1XRo!AHXd}%E~k!r zzjA-Z?>P>r8sv$6#>^)WSoQSt@`AH&GC6xMo=jw_o!=?-guGv_2~JkE z*`dD)>(&II_~RL~Vt!HNq=<*@%9xt??44Et9z!jJ@@#FZ5Iy0-o3VFrl`C=sPVY%+ zo750kyG``%-@u=8OWW>+NrRNl{JHAMzqbzWqP*;TxsK9HZX`oicTf3&ZJ>*kUNRcL z^0RoMRmHhx=MQmsNeXhYyLh)KYY|ExLnkk85-dGp(q?Y6jZa}i!m6izZO;mwdWVouI>;0Rj`6T zb{n9&?cXpQB=$Kc1DoSNFWG~??BRcZm3`)a{$fRK4KU~Hp(5oV1f*d7M8c2N-s#0a zuH>`q?)4YTL~K?V2>S{IW!Bb8_arFt>ZrBXS>Ddj^})iedLw zGW8Q&U2cx7-IFh3t}C_PTPf&y-e*{AhzcqXV()%y+g@as){DHynulsgPeZOZlj)lQ zHfg~}!{5Ft_2g6ex#MThkC_A`ur{Yf(k40E>lDZ!v24*`1bLDv<)C7NlK$KwB5=NW z(rcNx0i>kLz-gwv^2^8tl}`{02Vum zMJD-bO7Xk0Txb6h&pgkVaT$=70eUnS}^TkbOI|-GCT6P!Np+6QmZnL2pNWTzQ z^R6+0TekgsisFBf(uWf*xyk%r^S%Hw%g{|2WSbjv`F#*DPwZ~m6$Kr~t2f>2*9P3c zn7`SiaQV~r>nyF2pA65iQHcGa0Q$?8yJy#HULjyn0l{%7g6n{dH^uqUKBe;xGZqbn zPJ;O75Vy1f6~B=_fZ+8D*zR;{fN}*WP^caa2%aVANmLdTqQ*@Y#aO)B6$~$~FfIo_ zP7#WofPJT9eeu%2JTMSpS!5(kt`U{g=c<9cX5l{I-MSM1_u~xsTsR|kt=3}TLewLW zDrGz0Scd?IMQ&Ct6i|de`73lit_P_KsA2@tvKPzyxI6@Gn-dc!|3qF}Iqp_;i%+1p z+p;RMt-SCQFxPR}Uql)Ha`d?Wigf>#D9F)!3``-`icq2+DGL|_p8Qe%ydrKMqU>D7 zKRhJ8jPE|DJOUC7^(GSP?t;=uc(8xc_%c@V8hwOLiRaWdv49g0ogFx}3e z>N+4s$d^R3bi}GaJ(}43jx@SS4G=6!8x!9!+8(FfA#s+|`B#fUn!PCS@e}6r(=ht( zYCNHWKLa`Jb!9Le)2L$!I@QX7?Sb;i5TraytmHP{NMHa%w_Z|_M+y=%4{Ev*T@B1h zDZvqNe48v+6gft-mbaWjp~9Iq)N-9`d;87bs=T}njh`Sz@C{JEf#)eag>-a`|E=gQ zgHxE6hFvMVT!)>-j_Lhj$z2ZdXFfvmKD0_(Gr5T+eD;m#sYp^fgvqDu%5{~A3VB^@ z2S59~ToMFd-kNU&cL>klFS^&je$)qw-fJ-MN@XZvVB{*0Oo8zsD}7Xgsu;bGs$*Nj zi!iHBxx8e#MwbqPwg@sKxEn~jxSR`SuEEfHh#z1QX*LlExXFpl*{H|;h&<_G)7=JQ zX*!0zlnW!i@zd$(4p`oc8L5lt-eHo2**XFvuY3j3rdG9E}Tra%=~Xnu+D-juO7*4o&$OQ4Y?tC6Ui@^7|b z>?|rUL-GmM#=9bA(IfghW~f*@L^KN@3J7%TfY42ekVFPE+Pvo4Qs`oNfG$S7rgC<_?#0_9#W&a*_fLOoUFn+Do4(a?-N>}G1v@j zrcrr68Oe?@u-6ZPqi*-%Y|*`xr^Au{yfi3`k9Iig=e2;0$j4`Oe#d^1dpHiw4VB|l zCdUmPmpZ5p_1wW=%;|bZ9q)O0WWb@zV%446bE{XbwnOLuQo$?VKW-$-DllgF z0$tD2Cy!Jk#}6Z%ReBK~8}V^tOQ1K^opQuIP?opEtj>dQm0mDcA`6z|wn+z5M@`BB zN3Qgnu)jUfUOg%>Mi=liMPoZSjdRy!?(GMG5%I%5qsI*aV6qHF%(y>+;%0#1>L-X$ zmtpvnm#(e==;N#L&E!EL1Gy@YT1UY8xQjNDoBCH#%!j~P$&n~YcuP4tx<(Ej#=y>Z za=Imhc7{~6(Yx$6I?ORWokUw5zEi!wM1?N&I}8m%Nr`Kzh}!mA?c>2DgHE= zq=zu}5P+JC#7{B~_UT?Nywr|IKv5DxRMgShBQEPcOInXywFQ~Er71FGjF)27sd*9G zv5plv(eqtsVQ^$niI%fP91A{{R*kJ^0|;+)H^}CivWGPQKK#b zo?^i_fTlLi{7EuKD-vyBGUf@YAh%6-^tAv}v~U9iAl%yhNlZ@{huM*8nJMWfN3=cxW8c#J%hY=3nN&w2d?>F} zlIJeWM(-fjOTO7HqLu&2T9^xIZYDC4$fMIz6Ip3Fv8#}1JO<4%J*3;E&)pjNkXP>T z46bS-P&C^hJ0)E93UWm6OX?^29LJX7$cO;MiA^f=9Pe+3^__FSg9>fyvoi0|(QQ(V zXu5uQ+MV`Ysg|?5TF*+kSgT=CFYT2~W^&Jd2ocOkr|O@uoloHZgBAdxIpETpW01M9 z(NpvcMmj1hqRS@d!iS7u0`HrZK*ma*bR`xRueUoP0`HMyfyOxL5hHBSB^BfQ%_z3w@$$&w&6SK$M)ru4 zdWv$lUQ7~|6ewCi3a2<3Su%_Cwq*oO*KvHHuJMCakTZ^glWre!yT}uty?TRhW%Nt~e}(AWbN*h@aQ7P`Rp8-)#t%?2=XnJWbBn##Q*{KkItN>f z%nmz5)xIMumw4BJ^$w|DD`=a}-O!m($js9&5mHI_#Xoly4@nrLpmQ^PI|64_0y4&8 zE|SyiA3(Vt&2+Cr75O4iXfI|1Ds-`foge4bG(hF_9BueC1%6JfNXS*!egqd3F-Rzt zx#HO}zUrcNp=w3^TGyNP)$0+TpBHu2Q13kv6wDgzPTFm9Fd4bH`&Ya42(u+&9!VD1 zKnqkK2>!BDv|Rgf&k;|gZcM^ni6}Q>jWs&gNglRH4t5pyGtg!x)~eNk(^HBu^DYdf zk+kvIF#2b_KnA4TVrj=Del7FZAK#1y&XuGof8{R!1Wd zX;fwdN|CQ0LP^Wu5*D7!=g9xQ4mpoglvOOEnV%=1pWe0w!NGjzM_XFAVW@nr3m_%q zqhISjWd%qENhWmKPq}lPtOCaC5VZ$pTrvya8~{PN-IB>GL_-BG*@L|7LyxKN0tD;p zfcz1AP~n4}BX8ZI-D21Dxv=3EUSs9?RCrurfqEBgX@apKtK$n7jvhc&w!FmGz(PBPO4RaySd)zojd>*sgP~ z+`PhupD~S_IKAU4Z_b}{QaS6=^()_>_Ju!P=89OodHwhL$H%RH*U>(ovo2;3tsrpw zJ$IO9tKr4r^zk6SrTV3y_`1oG!8+gd1r={+TDpo0ZfOhW2KEOo-y}Q+pLz*{5lynZ z{bsOVz-;zB+cwUIV?;C+IuR7S^7fGnQD4ZEtS(Vw?WQ5nshAa7B3o>j^DO0-gajNI zLTYNqsM6E7#XF;Wm0r&#FIV)F4gJw_R2*$s>3q3${+X8O zBeh?zzh;jAY*QAlvfh}$4d8u6V>4^l-X@oHz45`Lg22XQ0||_LtsE@)w)y^qJHZdq zHheg(p@jB-JK@ ziPxKU`tWpj_=!8X+L9GqCe^7S_PYLe{Ipn0zeu4FqSS3T5%oT^WUG3Ntw!sTgXkL)?}9+jqbz-+ z7esY*Tu5evvh6~H^k}_p!MYyLGoG2KX#)X22tQijqn@A|3V4`)GL10~EjMfL{1E&u zcm^ukfBuv!i*BfiZuuJA@eY#`&8)HG@u9dF9eI(|T(J-EepxT*=0Cm!3i-fyxw9v~ zKUO}OC8Q3zr4tD78TUg#d)wEK(VHGYqoXk@17Dd7L_pDYKNm7NA+=Nk;`S_VnoC#o zpQJ<4Ey=cEay@(eVm)Y}grDu9@3JOT)ZE1nh8&M8;jH_e{msnDAF#6rz|{KQ$BoU>uy>sts*H5}v!bz9d3%nx(yb75TzlJa>5R)7QKvp3-`s`cP_H zN-A4E-TpM##~wIQ=4npf;M+q_vU%vxsLXB474XTdk`lBiSBWmVR2cfRRYX_=14b~YAsh=H*i(ao8`v_$v-w$lwgOFAGvg5$9Sx{(AhAxDRpMUr)XRhn6 zsDde*ub!4uKz zn~6Jk3*(aqw{@-V%~(_bsUR9@H495}^`V}@(Xi}e>l`rYF9mrvB3ssW9yHnxnZ zI_X^`{dQEYLJ~z^uEnW+{yo?SlW}Q;;Ng>uvbOmVZGKYPzj;qgfGL?h)UM%M4Z0>x z-_GKv-hm7dJ7o?T3Ek6Rr_$Vg-d88QifD{p`SxKH>9)teB(T45|15X_+y7ws&bYg% zj(R1ejX6nvt(_KHx;XaDtm=4I$f9@b>uDciEcfTY{pJgUN?>olN{*%ny64cB*b_@A zVs^OyHts}`&95d^37mT8wF=Uq}pK$I=@!mLCg$bV^l4CZJ)u$jc<)x8Za z>}r;>3mAOi@!<6o1R#HJ`c1>jA53Qp-s+o#?qqvRt?jGo_9|h4T^@v|0B|K-g*F5f zA2XlqrvJgx+O*U>Zp3+K!=k1^tsdR-v>o=34Un#(!5l&L)p567?Rc@OCVj9TgwSd( z0RGK!iN-h2cd9mbQ5*~eysz*+@YcH8nk4Q^$(PEk`A|(T>#%*I?L}(!#eQ$1@RxaG z*o(;OO=k3g+UK5UcbdH%lCuE>i(05969C&kI8n6%(gew<mq4omeh?+v-kM5D>zUOcO6sUe8+%)(rg6Ompe()ec2r@r{J> z#J9jBi+k{nqwYVknqnbtS=Ela#JiuX);h=P?0|r82zU^MTZ^G}@3=HvjEGrBc?OMM zG`4;H*%mY_B8%WaiorI$@%KszoY0`cj09V20_g*H^Q0U$ZzCklLH>OpOya(;lwdR1vUau1Nb4$rnokm5iG2wg)^j$w$65 z_i0{$a5TSa5HqatI1`fCw7+WMp1S(EU5$2O`eQ^f2W0Thl^tbjRR}>-2lqi>AlTy9 ztJ~GvxGDz^fd|08HYp+Tt<4wiqsP2o;A6G?RT-{EwdmNx?+zBRGUzt5$Gwx~Gv@Uj z4UMIZ;|8ITf@K!PUrW$w^6681;jwBti`F+Nmm)C*89?_UG6BXH?T5rn=8I)x&?fl< zPedB|)sBw0aTBx(MvF3Qzt+-vw`%TO6EsoLH-9wLq0)rTz)9Q^|BQdNOhi|StIzAS zZh&IphYHm3#Da>VWR35)Afb@~>aFpm2L-C*)%w(6K&_G6gNp(x7@J`n>-5P)N7Hk^ z&REFf(~b=4do8SpbBwjia9C^9+OW>|f!}aP*v41+RD(TD{>WC+iyckrC~8o~Vfs&Q zX5#qhzTden4oh5idr-qSe5pyQ6dpPHE|5G>PS`k-EkMBKoho_D5{OXRv{8TIcjHms ztERwj5C|+3bY{@H`ekWmGf(WZ=C98BIZo=?G7ob0ym*LIf2Iizy}b|-(Z;ICuwEh< zj0P6FN-XGU7O>Wb=9!spsey|hP|8wzSTU7$m97g%c+8rH!4X=>Xppyx34H6MXKV7lOn3YSKe(`5Ynxit)#zHQ&lCQP z*#GVAU^WZaz3Op30B!}n};P$ho43&9cY zR1O(Kd$Gh$WZSFv#R#9XDDptg$wGHrmOzh>X>4YBM73OAc{){6wX-a6EAdv+ zlcXC-hkb&&FHp^TL-HGst~JV)$W`J?5wTj|;bGsxr0h!i`>q6}Vp1@#edb&OTrxb! z^Z)ze!J6to_?+7A2RsPdtGQH2yNu2Zod@riL z#^(DTFyv?o1zwZI+n*&B6-%N}iu(Vc>AGIe)q8{ZlZuU51@47<%w@V(45$3-_ z!kci$4YwAJci)OLCz|kBQ>Dp$&EKMl zXnWdGol^d)2~ia-2bCPqs&s!AQ4DQHj>jzTk3#|A&_s0 zjEb_2^5k(7s3m6AxIv+!ggT(0l0@{{yV zupw86rjg2yl;_XiM_x;#WREl;A4{2(=n2KcKe}62xw9v_aZNo)ANW<9{J~n3Ma~_1 z|CtIL;(8dbyIbl7q zcD2nlC9S(cgI(`Fy4tunh}7GxFD=u1t>1miVL~fEdLthxQI{Ug${*bW3gSwPixn-R zi@PUu2@k6upt#6Sd9U32rn2YHG`pM)FzQPlF;G2NOm5$rjEg)rR@4#;By%%n#OR-?B|l?-|X&MiaPew2;G68)9=?b>&xC4g6VsoC>yUB#*hhm{8GlGVt9%lW@{V!iJ^)E5`{;4DdB$1)p*?nj z4XH+_91a8x4V7;|B}Vm_t%mPe?3eRg?)0$7|rV%7c<=$Xs-7Ixr)(NMATPQuE$4VdK%Zmx?&*jS=%Uwp5*UdUEZ1At_~JwTTL&UEzJm9&soGF$UQ5jmz4!5woq9p z^Y)hK#O;>@-llIXs;w{k0~je}E9~K7pu=5G;ao|071iT}I%p$A2J7#9Z26Gc$l{ka zydKH(N?;reOJ5R^1{W|U$}_60*qX=ZglX~?=yE*$sc<`$F_83j5(muY2dZlNi`zJr zi&353{%!JYhoW;%CIGywJX$a{mb&($UqQ@G|~&E!D!Z7UQDS~j>2;d&nJ zIwiO0{e1va-U6GQyvLJg0CH;e0juu9F_~3VrW?u#+65TK13!S?*3F-6Jt0RkvBg&g zzp8WT5Yqt6^NS3#+C;{~--It7iGqrL%`08~Pd%4HmV%xP*3lFl9jrI{L5irV^ErX- zq_WkY&vv!} z?j8^EI{pKvw{pw9H%#4ANd3fH+*Z-p8z0a5jsPpp zV(+GpVyyMp*CW%ng{xCqKA`i2&0QukOAPao4lnT7<>KY~d`x-IN^1V>U0d=*#}4x0 z+HOGlD5|aI91yxON5?m~ZcEY63jcWeW8I^%d7p=@bWllqqB_R95&@804F~{fkLbK~ z&agBm0Vt-0sO@OuUOc7 zo4yr@4HDk-DX@XogEEmB`-M+>rtyvPshgD0_*fF*g+sW^rec?<`?eZ+?L~@}T|AM! z+7SS|nDdXyWS6k?NAs`NVoDBH2bdr9t1Prd?Y+Ba|7cs9im;mor8a_u$>FN9S12|o z-|U`gp%PGG>vaM$hUCv~eRzSpgp)v3z_CcYXnQAr5I0EtRNYQcPxHH;`E2w~s-4MF zT(st>7*BzD&F7>x?nXpVdm30lO^Y|BZ*AX>F~!}Av$8b6-j`~W=)SmEJ>53;nw6-Y zbj4@w@rSLqb@}Z|B_Ke-xihZAGS#fRpcBByMAGMt+_AT_5}NPAi`y}IiNgw$i<8}G z{I0+AORvGHH1(T zAe6fg&wcNG?^?gLe(U~w*W?cuLdwZL`|R`GpYNx56<(dQW_0^Lj2Pl?SlP8Z3421T zquTPHthRKgr#C+{T&hbm71o4SF^hLs<~3|&S2mA16)-V9!^`c!B-#0LpPtmc+ORSy z>(#_Q^3LKZsjuHlZTnR}lw2=kOrzxl#{r5v> zDiI8KXZD*ocy^ob`c#&i>L1h}YN`jhNNe(9-2`KjrfwNH>F`FHO})wMun=ag}%fZ!bSp?)H}V z6P&WS+v0q{vHeT^RCRw;i{n&}b8q61#k0}Z zjP=x=5q<-0b4+Nw0`_@<>;wKRruAHt|G$8xm)^_{tzG@igu$RWA9Kkk*-P1zM@1J zI(75;Ov?M8{6AFtYF^b#VW#;r85Xm`oorK$@xseUaL?1QGkPMs(9 z-!9{C)|7=;JkKnAB7_uANrr9<8a8U?naq;i_y;s;Ers(Ts?$8-wU@47ue)J?kf?6Q zTS6&f+TBI-b$<3AD$C~I>QG4*X~5(rRZ7BIH8ZSV$sgPI^nj3m9vv-Vy=#@0VaZeb zQGLfWDOqKz7Jis%f0;C-ZJAPB7}R~!%j3SQ6b_bdwT2ad3JcrI{)OlOmT>PDn*F> zEY&QP(T%ZE)eF2UeZKH|HNQ91>7i2y;v9#|Acb)Xn_>43mT7|7vEY}LZbP_BM!j*~ z2hIY(kr<$>3buOBFKQfof%i$bdD&s#=d@w#<>7SR*F6BXvmok~C z^iLgTM-^rwwPo3*y(_j1t_~4VpdJ8*SPAx(=$^zTJMJ5_e6Hn?=8CB?Iqgs<_k>re;jKaW7;tlj?ImZz|=NtwENapq#o@%>O?YJWpMw>I23V;!i>Cu{a(|Fx{#H zlrzAisNvM$XYGsIB>L2ervLqhCNcdfS-K(B@RU?fnEEtlT94aW`9ELrJB7`GzwEfh zq4g&V1=*OPBh*2+5EiHoA;^`^u3m8jHky+rQ3lh4(hx1ppR3V0ywm> zn<;v~L+LtEnH{FwLFp1}xC*r4FS)LI zIs|?c?XxQY*Y&nT&Vdb-7NfsW&#V z?Zh1_97IN%9fCe0h(gJtQhYnW^EehfN$~YN@z?KOvOpPgjH9W|!RR44BL1n43go+G zU|58sV8Ct26Xy!TV=}+B)f#kuhMZlk{e-_7<06KKG2OTDM6-ZF+VgSf*U{CW6JT%! zu2`m(p?5Pf^UQ={s+DnNR|NRuy{C0a)lbKN6Dxx0XYG0zjNeV=ShRx1M^0i=Yxiep z1gzW97FeuiL2^9f-{2KQUu`fRs@3~OU9u&6;@@;=BQXCY=EEfz!L7|&tJ0_ z4fa8=R?&kAG%`qyM|2Jtf}<=Stk#i`5SH_$D{P7#bAIZZsMdYB1fEwe<_BVIX zzQnAy9cZ#?zq>~;92E`*$+^wt3b=JRYc&i8o*rCxGQZ`t^Fv0~rsI1dF&jt;*)S%Y zmZUl2#)K}Sr=+Ylxv>GW!Ttz%&pNRQOt;!EuG=IGcJ@_y-Kv3&l z1duJV=SzNIiO(feH!(ZdsoIYmHi*8pLJG@@92ahvu-@nq{%8Bm;pA0m*e&2F{^uIe|NPxzdn;BsWpH|pTxmiH6$dhBoKp?)THx6# z8l2vO%mB{fvr0FP>HG;W{$Fx`0povBs=;`_Btg`NZ;jMV>7T$w_O9|ZGh90G>H^23 zP$@G7*Bd|tC^I6fTwn;!L7@cLaXz0;w6(Q))VQPBuLBz!hh{PE0vAN`N6ohMT z_>2yzFzcb5*~*$hB=>nm5LRH^ycubTOsT26!br#|q>joS)?u2Y5r_jdJZFal<(qlR1tv zxSPPea$>84;WmU^*kTRUgKm*qt!Qj%bqn~m1{An5!%YB~!qh}&uOK&#!!!UB%L2wv ze=6ubbR$6i=h<=kJ}64e4ETz2<=O#VPb+KFvcP=hsd;}f@(zbHq~`|Mibp*BQ6d>Tzv@-$t@4nhszyt5Jg%aP!2KR2YNkMEE|I147?{)1FWx7!yp?L6% z&KeI8@@4_A!LJ4=H)_I%tf;2yRN_-fR#wH)vf zWwklh-B9}=i_Jn?@|Hn@U}ztZbEIj)yBz?XX&9m*rt=_D0--h;(A*~DuOg;yjD(er zLQJ)GQ2oi$m*8|_xDrsr;^H9mS54$TW7u)GJw0bdqY*-zA%3Put!PFBgohyp!1K3u zj5c5-9IS7J=pMsBSSF_lsEV4nKs%lYXi%|RK|}LJ{9c_ScfUVr90g6CHyzw?5Qv0X z9um>?p$P5qmVE08Af6S5JcbY4ob=Y$;REtlqioD_yL9!av6VzfC{wfqA^H1pn}a|Krv&M`N(XpOM(9<5Cg05yr|E{TQL_9a-2h3; ztSbzEHe#9@C}-rp5+Ac1|0d-Wy@oS5qgM~6gKMqmW6unyOZ&sOMGk$P(`eX!JNfyg z;C9f6sNbUe{W*3w1v}tv0JxBjGemFX4-C@9=I3w(Y5qPSAE~OOkGtBv{0Kt$HlAPF z{H^%|xPZv1X16GXp&1}E6FvGeX4C?NFu!OnrENl&lI*wMCm%j zr!xSwFvl5cm^*M$PT@DUjaA017RJ9S4mmvtORiP;G}h=Jf|-}Q5?*Cn!WgX z7)Z)D{>&cl*qH8!gId9ABBNIq_Zt4*s^b{EU_3Cqw-F-V?5A2nvdTEf+h!!7=FTSM z@!JUX0%&oJHOP}URg(iuoM+E^bcaqpcKd!p#g#N)#YXZ*XE?)zjVVH^<^t3xKw*zs zW6F?%oJ*j8mJwanZurc5<74pJ$6aF%sht}{NBCV0XcDGra`HhZ62;j&${KaWaZ97K z@z+wK7xUAixdp;imktbbKPqRttVu|#w_Y92b!>~Uco+1Y_P6@@6etW%SdN&Hx`Wvb+qyliO#sY?r`2J0n=X?;kI9^6+9VDabNJ~=>xEYLSC-v&8)Iz<~-K-kh2GT{ZB5D~Sb z48X9bNi z`H{d|W)Ea4l&0C}XC0P4tRFq1A4gxwpvy%A2U_eXbH5SbcEv%l@r|IZxiSo}lNiUK z_2-b1Z)6n`%zD%!!`K_Z0HqHQ_oKWf*9hTn)b>EG9$!{AA*^NgC~#SAya*(_!_DR! zb1nFcZm~DWgkjImlXq`nTqb~?dIaES8-AnAw%RR<==9A)oOzwaRod{L;KNWN@gBgg z-K2){2#ZQo;9gS~z5%H*;&K37&^Q8i$iq9$m*2JEReFTAD{aAMnIlKW4|A*Fa{%&* zT!tu-N3hcsYUDs`&bT8WTZRDrE3TW-iT$3lxsnsVrMZa&K-zP-O%cC)eDvtX@X;W@ zjV&Od&;-zrpdkQ%oH%i)_EQMNc`|^sZ{Zt|qG$_hxGL)Y4E)NLZks_;triVR2O#Wr z4?{@FY^jfFz%m5JK<}`{aVAp+Q3fM&9W~*K-1V7ASqM){E%VN~?_pUwTxYRr7I~+Ns^?k5eM0P)9X_!$&ki1B%YVW)8AUyAt{=T*C5!3&BULHD zLsZ97Od&G*(M(9cKeN+geacDyIl~>G%L=+LdKsPC(Wv6&Uj4VNqHlt6D zpVFN+Ime(@G2x`jdxvPVv5kgYF9`sKnv|2G zfQW-+j*SpOdKg-ooWODhfpY_Uvy7eX+XrcN)6Tga{SZJu64_@tq=LteYbh-^?A!}Q zzJc>wr}M^4Ax+V|x?Ued%Qp+iO{_Ap(2P%syiFknj+Ww5HKMsWlh=IYs~S~IhIc7! z(BkcW{y%9O6w5sXB81Z`+05%}*m<2B?r@co#BDf8R4~UqQ+OYun=G-vN$ogP(;)Tn z7`i|7U_ET8jF@cvWliR&s-A1W##ys8m_g5vC3DW&U1cZBUqpcmTV7!}K;vTUF4(o+ z(?G^Tc)A!X`*=^wl~=d64T2dy^c=2N$oJUxe(I-y%Aqwiqlq2wAnPOT*1-h%P1u#d zh!uETg4pQxbpr}a}ZxxA- z(e-jfU5pLEJ&u@aNGT}~#v?P>?u=CYK#d8Z)PHXMdYSD$$BruKx{f#ygwU^Qh4+RL zagLD(2V26H3|((~taN@u^V}{qT~pAI&*(Wt=a(xoNU5Q`A)8Tu4N<%QPk$J-X~0Re z4%KNsHt@E1QPFLT=%`fX%5ZD%sc+dqzQ`?x1&CH^o`}#Z&W3j4!OCl7erJHaWyNK$ zocCtV9c61lroXtL)nzD;|HJj&s?CCd?8>ok=X5kUY}psGu{de5r|ExjAd@18|5q(5 zfj0cV=(8K_S_O%7+G}7X{!goMxnpy!W26wOXOx0@n;F_|gl3xsV34;;m=gqXr`N1i z3zmWq83m}Cmk~43k2%5V9jCm+kSv=yw>X7P@eZ{1D_HmRud+e)wav(MM>z`Y)=~5a z{If_4zK5OT89sfGM5#Vv%KbLp>^T2+X{^e&Ex)+git{^LDZ}L;Aea0MeE}71Da4ko z{TkG9nT0f6%iyM~7qw*~0U9HFxu8iH2kAPtx|!Pl;#@xIc!#+L1Q16PQ$R6jZq_b< zq<+gH^UVcwS?DX#igRaPd%6ms0E0%T{v5W;S?#IOfR6`pJ_&i7Qh$NF*rr|-FzPpt zHrsM%$=PyK;lw~jBOQQ95$M+Zoru~1hWocoK9*&D(Z)9Oh_v?$KkO1Y@)G0L94y6_3M`CO56jrVzl8egleAS#14mQW+XHfc#xuT zCK3p~e3}Ks!6*Bz`kgvNz<~fcz{PHWnykcouK}!=|EY2XvVN3<>dB-WHHFWeIygdF z4rDfXgnWrp(2)!Ik*H9n_eppfX9E4v-+F^m-|P#GdRv006O)d7mz20BO_rw9*7?CH zUY^?qpeBzt(D#{uv;|X8RE*1Q&_UNr!5Wl2ve4og2iXcYLQC&38Du)dgK~bqaB{-= z_5ST`0;pLt3p8XtnI79>Vtq}=WH)DJ;~~{jqf2{e>aZkO{6k*JAbgkc+*SPWnL@+1 z7Psg(A%v%a8Y7j*W+K7b*^D#>RiwchbgSH|>X);)D_Q$BSb35kt<{f&wQ4s)Evn~m z{lcYSMbPXEON=20O8p5tz0qjC)>yMH?E<>xn-RND0nT(-3gZsY#|6|tqAswauf3}& zEs5BaY$YK$_+wS5zEE`N8&+p(9XZS{8CNh=arqyfTpWeLAsu3>dLZ z&x&F;MI*a5jdY%0-GsVk}3(!7xsLtYJ z1*C90R2#dD%3^Clv?z9;6-?BlhpK}l$!kNvVWZEH4t35+gBf}l&7z3Fx7Q0L-_0ka z;?-a2&E+NBVVkGxy+vc>Kp;R!+;g}y15%oqK(Y$Zf9uG~_2i*J{DPLMdPngg8`AiV?IT&N3Q@!<+~5VImG(nQeV}#{7obZY&$ICpdRN)wBD%{ zwUW0DsH$;UM&_2dY^ArFE5rz0JRDga!Zw->)-+>P6KcgbcdSq1Dgtu^y04df%{06h zPT8m}OyRz)F0L$Gidnog61nhA9AL}U#{FPrabLqj&XxPvia!Ds{>>e)n)txdf97_I zf~XhSED0=sBI2Q{$h)1w45%t%6|*Mp1HZXhun^uJW#YFS2OtL&H_Te+{18}V%xv#t zL^!DYQ>s$GRiwe$3HG^jRnrS#f82s^3@Omf@-tD2dcQyWbaYM|0FfVtA*wV>I`)u{qEnIpn|kO8r(VzbSQ8YHZy-*Y-u%F2Z|~ zWMe@B%jlK8v(qt>b0TX~+6v>gU@%pb|MBVWwyIg6oaIZ8$XH1qGyXySS6?$JwUU%w zG9swWnj9OHWY3ycw~lSH(&(-ZwDaw&F73mM4=lpQssl^LYo8Q9RfKiJPLmW1@6w>! zgH_9Cos^0l!bft-BW506dFPv=vF1vp;jgM3%CKQDuRM|LBl&Q0|Eg*TpW0>`OO7oK zh{acAm>3Aib5IJch(Jo3>Y6(5^vpvYNK~!$KSB#L5cYcW%)>ak@9}64Jwzp(`89$fhqXOeQo^z-5 zMArs-I0sCfKy_m}=0w$B?f1E0XJKJlwoY9Sh}h?_;G3l?9cTt^ z(380_;%ojJIBSOqmUo7Y6b4qIHB(5H&9LDPo06_ob>z%f6;!ql5fFRwPc)7>bmii3 zBSx00&3tM(8`?n(L;N7;*Ys7f*UMz7mglm-)@F`4=;8#>ijS;_{<(_`@mnXV|Jq)c zwfZUAmYP%4^G%$Kl03ZN)qfH}|?EB4nJDS$-P>VaprOWw;0%Jvc zG8g44f@NJzE^m`?X4pS;>a?9*hv*%3C=9?Wb(@RH?wUh#cnNoIxh5HY~yH3h4Eo=OwTCRBv@SHr1>Vc_( z!o^0*?{M{~QgVphaVE5v)?S9L1mhtBGUvdvNUVw(dqe6{w{P6~pfJGrK;OX|Bpe}< z%GeKaubPr(h?SH%8y=#hXmUK=RwzJn(h3KQ|{}$i*c@qMvM*eKKJe-p}NzT|O z2C6#;YEHm@W?9gO>LD`mYQT6|Vc1USF16(@H6kuM5zn5oqNbz^>`&S$)InzW!ah=v ztNJINaIC8b8|p98w{k5@t+?=K!nwU5!TR>w+^|djV#o07$G-q5WMPilV|M+w!!4I3 zB)%@2Ruoc_NRXtOd9RuTzpftIIU0_9 z&`sltZ?^2EcnJQ4NJArLj>5CJG+}>lWE137qkU;wH&0MbyR_==E63=qqwcQ!)&;TD zyf>JuR)VS_CsYOmw|IMbH{HXvSDTo!o@Fi7_I-+h#GD}j!3vI&4XUnLe%Ag7r-I)n z#!#nDx@)glK1YdazZw69pQZgrZ;%MIJEy~>eqZv`_^MW|HBq$lrUe@K1`$8TtwTD- z9}Y`-!al)PS)DH=Despi|2`}AaH$*>4aJou2GP~3oc$M4nJ_`e%>C;9-grynntk$Vo zHB6u(oF%<*kVQt8T`s>nO%c$%CwfRFvlWwD$N@c@a<8(X>cP7Q?aX{2K3IOv-lgcn z+Eu)tOoSPIoN=aHO+(kadv)}f73b!b)_r?goZnXF`N2$Ch;k%c;?G!q4)`^@!1^mI zI|v)}-L%uhpXGGGK7*zg(6rBrDoQWV^A}r*&!LtQJP&bt?Yt}n)C^#d=#3@btq$%@ zMbY054n_CkRCoBB!3KK@Ja|!^;h|x5)njLVa}#U|+d>nDv`R!NlRtAt6=2_mG=IYa zy|v0>WRM)?*TMxmp6*TV3~Stndj(d4ws=%PQ)uZ`4b*5(ugnW22}^V;0eH&WA@-Ld zQGb99_wGaY)5;Bq9VGL`nruR1Iji(rq2gJL=2ks&x#c6sL(W8}Om| z)DfTS3zI*;#|07hz_UqL76R7~8uwM|DGRfzEvI=)Z+%JXICf6qdMLhly=qOK^uA($ z<|2Pt;fTaN(}H98yzemnNY5rRNjcgfL5;@Xy zN9|w5K7lH4j4C=erFR#Gl${_qtt>_6x57xUnnURarXwbkA2g;0zfAa1W)7W~HduS>n^HqqCC>5$r_56dLFiZE)2R3qkd`Mnrx zyBMbl=b!qG(0}K>Z+V~J^j9(R)R7GL$9`rgvL9y&V}IJ^STAYjgT-+q;S?knQLJ)m zb=rpDCnt}nJt)Fe-N{7EU9i|qJf(WmZwK8-@||1HOi9f+sOiTIPT1Nt=@HfR-(E;( z55pFFhcell-922`wH{iTbNN8-&BR{i3H=;)SzDoP?ZI*4i(h(f5z2GX7^$5Rzr$_# zBMI96x-2ICSo!;ew!|6cj}MTC80`7Sb{4pdms-=-{GEIbtl{}lqO8MZmsFCGn*WqB z{sAd8&jL3dfo;0N5dP6rT#v^UT9?3xP7?Ys)N?%1oOCp8XKLefzD9IhwHq#t*-s86 zh|>&H|9BHIweb2xmr=3fPi&uGQ{ZlC8$owl`d0T6a%%@Fke74zBR#v(el83d#<9Y? z)oyqjLpO^8Tw&Uv!}ppOjqg6&)<#)WmWbwh?L^zYK4UxrTTxxd4yt8|Z_h(Xdcr3q zV9uFrx;RC36|hd#@D79G3Vo=^Dy@zG^A4*)!o6w8;No!WS@}VTn^!R&GwkLSW9nb% zO`Y)wZolvz(|1VoU>U4k5$tKagWt`VC+(;)xaqOU`+JX6Sk~c_f$H~){wiBJ;O{ug z6p8<#rD(S}^}_ z4UdkqQn^-HN7S!rJk+>6y~9gI#(3A4I%{e%oXLEX&5S*5+I;gb_Mgw)b5d)c?BfWt z`uy%n>!=w3yN>8LPx9rv3ZFQuUN!)R0Ussf*@x_m-|RJ4w2OR6m)-*!K50qj#=^2? zAE(ndbM}e#N-oeW8B^s0{gb)Vn=iQ!Fhw}bL}M}ZB#=P@N0X# z$@k;l)_n^k*`<0@nn~&Vfl#td)VKX3GKTU#S@`JkF6&kF+Mc}<4M9#Xx<2PVn7Kg0v>psO+na%w?qYt~th3p6 zQ|kBFa;fTArPzNjku(Oh?0JuZdckL&vbPiyrx@=IN^Hh25ak?hS{P zMpV*l@p>hsu`~ELBozOPFb$OCG9{O$c`?T6Hte*5eT!;C#m+t&Fs%JKp^!|+1+vl{ zt|>|nKYJ~}C*-QSm(&yq-U$B;twB_nUlaQ|EuGW~+$_6S{ta&?qXTPMTI*g<8%3|v zn?;5<+x3%{m-jl0r+#Sgk+l5h%ABHL*~nUY3LWD`EgY5@6w^!JR_s z!gdJLKc9;3cO~U+Se#VmC174z~ARtQ>l0*TuG6G>MJWuu+jVvSq!wB5#_@ zk@w5H8ib1U@?i8Ck?WIAI(s@_uW=+SY?voGcZQ;GzCKntnqIAmN+Xg6?R%W=x&G8I zF!hOj&<5o1%g-m5Ye$xn=>hsZ!ikzFV)8qMeMKkkE3qn~n|YKL`?c%FUbkHdrhoN{ zatip>%u2qmE2C1Z$M;1Tz8az+HY%?o^u9RohuWrySp~$!y2VZRjL<*W*}%dIh@kwq zYP!BkZ6)o#3~6z}dbRDOLRZPv6g_{W%XyKYVn_w+$cd@SaT=tpZghJ)d)&3l^5wmD z9q%%Flp68;Hj(};=WGOBm=(m4>!!IzJGwiU^_n?tu%>Ct9D5y)QR1w8Ld*e`U2`7&a2YEvrun*qVyVw62KS9D@tH-wZ!5>H?Yr?r>u)Wv7rVvk5+fmp(LGShLEpVh^c%1?34t1? zQ6B1VQEn=9`f3SXKE|;cl2@QxcVRZm$FoM&edHehCa!lGNWlg_)4)eti4(JQ3Y)|p z!1(s?c-52EiD#vW`1SEH(88^eodG^=BR)uSh9rrwh=Pm$)Yt`%J-b1*S(kZCdCh%Y2=3WPK`#iPGJ zIiX;6U}6PhzLbeGd)9as+=f;b%`z-?+)N3l;&~M6-Dky1YZ}VN%mDYo$tK*Lbc{{V zzpn;~MXssav@*E23R6+|k@z41KnlE#$|g-KTp5mz9BlO524Yu1N$aB0_IpqB?T&_b zo=F{p8u?$a?SHLsO@sfT5<(?gx55OWNE=q-madeJXtF zgY7#nsXxIR1bhTm(fJd^-4Kw=%2G{GcS9ktZYsvWze|*8j!lM`^2SHjXQ4F6@vdLu zRNn@=Lk%*=4Y8Wkv!x4WATFqxvFp$a5BGVM6KtX#K)*8$Xi%EjU$ zVB=SP+-sOLu>j#Gfi~*K=(3AeQa=M)gl;qNK`T?ue!G61Q)v4{b>Kw-`$w4V+26YT zHNx_bY7Eiy{=|VK#z0^%5LZE12NnDHC=A_VbOM@timEkFsR1M51%HxRWfH7wg34M@j~1T66I<7ZqPx9U6EkMG;|?*w zdgDWOtL>=GY1~lVv&W*^uJI4mTFno05Pf4 zJG2yP3$ZAt>~{l3*a{!NMwP_kVnOB>@IfmsAAuS@&AG2n-_Dm7s3l`3E*>?Cvy2S{ z7IKXrJ8Q0g145-I%-KoGindM`Vb9FS3pMs0go4+NVTI|0Kg1(bixLd7%$mVIziQ}w( zEOT+C(>`eB-cA$G*5x2@#*-N?*^W;DZoT|b+gx3%9<+<7^Pl#MAJdl~4};LRug*WM zyl6JLb;OG_9{2PqWSuh-=_d}8nunP={wt@ftULP4xCQqOK;v+UHAjDO^v$Kw;Eb z5Da6zrz&BifH85*Pm{)fCZ8^lY=%wEVaV8_{*ELy`bHq{n}+W9O#-oik%62 z4I{$YiR`_KBaNplvKSaHWZkRu_*N*8p9QG1`)$Xm?0MLU-k|7yhPz%pRMM_F7YK?rOr$vWfk}vkfd>rzYH3Z^drE%Pn;-qHDVbH zq+0@-B_fRb^BV}$3^ms zuIGX*ap_RCFTCIOA+2CPYtEEB4J|CbOwOx^$PC`Lo=pN9%$KJhM~g=$fe&m>k~xQ^ zN>a;kD zk%V0-81;*0NYWp)XzscZag^=0h^e=9LDe3Jp7Oc8y`-KuwME<_T0V%E6(%9VC45{2KgULvhe}SfT-&-~V z@wW0R9BtUn&QHo_O_)7SYe!sFjy&t?jAB`SO}9)9-qEU0owV{EzMj=naN+^GVhdis z^1+hDt3}^h%rzQ}IMpuwBX%bB6|(lTRgliXV-BsIpH>k+R9`4acwO*h&MQdOtRw_~ zvwFTj+I@=!BozTnG7)iAC(=GZ6C5O*pNsN5a$~=UW z*GthiXabu>R3>L*C zJ#%j8-}MA@CD=(DoQ=$Zz&E%qZ?pw`=UCCrOyI!PS1dsgPJzzY+^{;J^rdHY9gMj0 z6}o)~>g)gJq}Zc+#^0XCE=!u~{qc9$&u?x%2r5xDhK&+;N4S>YCD`g z8~&Q6M&IRCm_ct4VSS)-vFbsirDAFBtF8q#y|?!&mIiI-_D}DEH9E91vGrHk=(|(J z&P$NZpurMW@f?M!cBPu`P`NO0;RuEa74`@p^Sp2w8)It13=(W#P*+cJ$; z@X}BWcKXTo_63U_>(lcOPwOX*IT%;#-D=WF61p2lR$)3={| zn?jO8ow^1cs|5}Q_S+EMQ1MV9QDpmY26(?G8NP><+}d_0cfLr7NG<-0fDDXIisIq| ze4x#ZV%h>kmz z0-w@s?RG*`Sztv+mS0T3(b8iTw%U+jTo$5HG_O-|^sAwwyI*h=k5~*sld_q%6X3%I z&+SO9xXskyvp2l@UDNn@U-Gxt+2oF7QU`Ry-SXnCF@YT*j6!bNA0K?k=0RfEu;#Hn zDk^+9j!WFsv>w#M$?E-m%S8+^MQ_Kv%@-?!@Spwsh4Otv`kegr{lWvvz)-mLdJ_J< zK(bP^!uAjPQ@C-M97|eKhLav_5t!xtLUJj|U#=kglhmW728~i~|3|L{HT%H3@+)Nz z8j}v}2y$ffNAY^yQa(NC-0Hx{PGM|BRrFxUU{YnTs&gQP*oINmtGd=5(5L55AyexP z{FdfY9DjBT{V{jSWmSZ!So@O!^#79mQ}?F}5v|34>;-%m+fr+Ph%mj3l?qOJ-}@sb zW3rs=iee?)k-tLN*UTRGuX6lU<;xy#`GuKY*HPWUq~*+T1>Jm@!cwN)zV0cLSDX$s zsVd3hVp2M{vd63J=7|>>(qk>Sy5BxnRufWni5+JponoW;$^kH$MS8*z;6}?Pi+>g4 z#8Dk&4EKuos)fJ`X$xxIoC9$G6}-IPnc_*{N4D7K#!Tbu0v)!(^K(0`_`UKczPg~{T-qF*uMmFfS+w5S6X#=&0y*=@=oO>$&X4+y zf{5jW{ri$KJ2AvInVVBE$o}bia|gs3Y4#phKe!9e+>}>ThyAPf?oR76wk$AXR8BUy zIbGy*zvFpX_?wEu!9LRB8~e^%T;#`?vLFWd+zt9mHpz}cm&_yNl4UJ21|9UJ~LV~v*+U&+s1eHW3ryrau+|z0`;BOyM zCF_XNyEu_*hXYl&tFu%Yt^=%9Dkt3|ZExB2)4+h+<+&WmM8o@~^ClsL&|Wc$)UWGG z`nVgP6On-bM7X+JWI9mKQ9}Bf(r~qc2@$2gp&)sjDRoverRtn*u>Y6Hd2# zb1HD?nc4Pq34>86W(IiMxW{@TFys@}n1aa31PGMP(EONT|F0SlhnV!vS!IVipn9j6 z8y_br+chwe5>rHv*}f|e3nVF$@p#pS>7U_7fXMFLqmNLZJ_7R;q~uiKh}@N)9FH$^S4PLd=_O+QBhR>Y z=@6e3jQGdmGTnOj60!z<@q>8Wd!gXM=DmIhHi?cE1UqqR*9j-GtAisxxAiziLnYx% zig7xmgilK2v;l&rV6O6AH$O?U#+LXBp3UyY9jsPF+n<)gUbt(^g~Rfe+_kQ{60Qf& zff!?jCqXXp{X+|*5uodv5fAZ7mw|bR9{N|*X1Wnya{)4BR+lVYCa=sC=?2AKgl$I9 zx7=$L3zNx@TRQ8)L(+Q6UI+k;G17Nj2sIfEQYzm|r-VIu?Do65!OX(zM8c6uu39_F zKgXSl!_bU$MT0{=?wqO)eP!Y8-_G*semVV@qk;cu+Loi4YJ=txbpthtEwhNY-!tU= z2-#F%5%8BQLuJz~o6OXP<14si3&p90!thue%mx*X^NO4@4yZd2 z40^%Cc>S9m0=`aOWkJFsFo#y2nR3JLF7D!~z6juI{Xv0PYPT>vWC#GR?fdjiS+1^3 zVO476T!lifH-Kq`tL-zC8l(p6s*5YP3uF>JitAp`m@=lH_+a+OYX5lLdo%0LU>Q3z zkK8X&==Q&zuTi5PG$bT4obDlV-S0tC1?(~upy4i`&yjvF{Yjc)WTtjNtvmy>NC(Go zL@O8zHm18-fM(g8M=LHbZ3fvsN9DEvu;X4{9_R0RiO8r}_& zfEImk) z0BMwkIBm^WABWdIZMwQQ^2X@)qst8;5Uxpv{cWwH_9ehpf>ZPeYBa|~`CQ(|k!kDH zZjcz}22@J>t$|sfs$vdH6P$VPg)PR@yNmo+Y|G-LEy32EEdmWdr;i4k18(ETn}zJ7 zr}e2mYB#Vzlx0NP9*|}}abDJSMewH;YMk8yXreL3CV(xdxCIfRW+7heh`3%jp4{^h z^??9!a*xu0#wi&!%qAA|*&EC-VjyxmAmlLOARUwU!7cxxnl@CBZYJnND+uVe#3un_ z$HW?tMw*m1k~wC3@Va-sd8u#7g}(;1U~5B z`cB9WAl&YUC!0N1RS#6cGZt&RMtJIO?#tg*%Bf@qGvYbU{Z%w z?Okyrw2!UmUTF(LR}F*h_u8_H1iTBo+rSS>O*!qY7zuj;tLqgBR6&2 ztpa}k=DX3~LEZ4R>{!`~)9-z2(y)y5aj3MuoedMg{14ngf6MJG%cCjfq=uN>MDpL3y!45MUR6#66>sq2xGgx2@}z<>@~Vcv1vvg8hQ(6QB%DJ0;G2q8gTNjbgH?gL<$* zhgnDC4XAhD*PdzA5rL&UozXW%FZFEtck6GCaiTT=2OgvT46lgrvgI@VlTUL}*tDm1XQ?4`az12CYsBl~5t6BnD%f z84NR2$X=FVW{fGyU}j8W1~bO|u1kG>_kI6yKkmo<&;7U`kMHOGM~|4dnfF}p>$={r z<+%VK_{i#I^w75hdVck9iPSOKm7-3@VrR9&9?NzcT6Ehws<%1xbFA*hJFEK!7+bAA z@;Hl+t-$etfb^B(D{uG(uP5s1#mGr1ht7$76zBIaCHFH z8@v!{Dm*fC*}9IX+%5xV*=nk|t+ckJ`{ll}i~r=U0jV)t+Gr%nYnw;h!N@C`>077Sjc;{ED<$WLoSIT8Rzk1SxXkTTSp?- z2KPXdw!xu6eYOmHk@oVww1k_fbc5fx$>fF9ZO7k6&mL4ixlX9{Za;5|HRwJ`cRAv6 z{=9_kc7$a^A;R^NOXF2FS)h01b1!qGBr~A?CID6?u%a;EF~TiW**9|411#L$X$VHv zXDI1i-b?_IMw?CFz#5#zxpS9XX0jxk?y{s;Yee}g8e9&BN>Bj2r4@4BY&c>c=5N9& zwSPX3pK#uBY3CfW53(K0x0YY8ty))b;dh5_a^5#TLrb+Y>UPD?xv((1HT&Gl8|NT} zQ71USlVq{CiXLqQAh~R;FGa>p+AJp70S{#DYoB~u4JBk#UK&!wu*b~~?)~S8b5Yso zbV_@#*l^lDtH48WO7zU&Yu{h1$DUunsedlyILB1ZA$Oi5p9=D`p6`nb=o3(r>JzOl zncXr;K0h!Ty|^Ugn&9*bEQ0+fjLo6(X!F%REzZMQ?5C{P>!Z!T{oY9`jPSQV)(e;r zj4yx>^CP$)?ZTU1e?^`L5rB2nBRfM6s$a^XZR<1vZVE3e?o?bisB`}Mx7=Sccb~pK z_p|_WtMH$@^+6-t5C) zwl3qhWE6DYCVD8(JZ`zy6lT@(IRo!?6&6tAw6I!6@wtC_#U$5JY9mQdBJQtHyn&?U zPN8|*W{r7~iI^$AXYZw$)ZX0IMxD!wq!rgyreINli-2-FF;C~lOM#81Md2WVs7Z5)h~f|xBb#|>DtLJ0^k7R ze)xe+lAHX=Bz|In7U)cUzDZrLx^Z3eH)poj;mc19rl(pxSUEp+&#s0lP4y*a-_ zcI|-|cDK%BBh`-;9ck6k4gCR_yKZ$(VTx~6lb9=C1L#c52EUF9vLxSJAz`g|D%cg6lVSf$kk zFK(Zb&61XmAxhsua!poH(I1Qqk;E(@>)bJF4ORt zMNyfS3k>&&LFNhJ<=i!>IP3cZ`{w4A9LH={j6zG!keoJYxdERZAJ^Uk`&?-SlA?;L zG0F`2YW3Su=t(?U%YU*;P4C+`Sx)$bkk3sCY9A2}bNQFWlcIQNUAt(ZWu=vC`?akr zSOII)$1hXc&8FR8F9Olw&EI9CWjEVq+inH@kL|{?{Qk-a_4DWf*G9V?^L_I1`)>Jl zq6-_!%F6fVm0`;2KR&;Xm&8SHh&YrIy*ffzVRmWr$Nn_pF}xDVq21=lg?Yq=cX7CT zop>56pWvXjZL)LlwBnut+XK<2YKz+@w0ThhuWm}uOv(;L2qD)cWWnIt`TK(mse%$_ zg$KjJpsIeG2=h(jUpDs5_lj`sfWi+I19=0_pAAY?-+I=5%mU~zBmB@|KPoQ>)m7hg zUcBboGA1kT`_so@+OcP+%P=NN20>h%W1yfuw7kCoo{I()(zEIJrg}ChH#K^ip zBNe`VYcP8dt8DWTLBr-^h4M$y%tFN>>pw3c2jgs?TM@$T)$oc}Asu&ja4vE9Ihz1ZuZn3DjF(^jBb| zzfil|p4s|Xc*S^~h2-7&YW@S@I_2VVsz0v$0xA)Q0oCQ-rp_vSv*Gw~VmLEaS_4Ef zk@2Hgt3zWyYv#qsTYmrD)HZH(fc>S^+`HFVL$$WIGcpR_=1WVp_khe`%-)5J+fC9W z_&YnE(yzI!%ng0P{lK5*xAV*SxA^6S<2ck6gD#F?70T>cN7qMNsuC)*@!5;ApbZr> zD?wzXbD};#h9td4W^(cl*a$vETWy%To{+q1+6Z@qbgc31&10nK-w_RnD7z3>k{*e7 z?51Sx+nNltL^_OZ4WK_($`m;cI|Oh+aYZjvxgdStIUY_Ji=i2r|3z0kO9jh2nC}Ys`tftykf~*=}>ZSOzi`@e;RqWW<58nb~Dqve+x2K|9itqz((?-VRhrI z6#M)L8Cc}*;C^oL>+RNK{UK?bRAF)GQI#p71fmG+~D?W7gClDhl#XjO> zpLlP(Cx+PHUOP|f)I@AyRt7xF$^lBo-!*!5_>&&U7D|Ubcc5vG9ZmK#oH}P1Rr2<+ zS38zG6Vx=a7xVVx<-LJQ=PpD%++c( zy>V{wZityUsuFt6W-#a1ljRpN6PHDO#>vAa8ns3>|8K75{~IkHu}Ms%WDwn0E-u#f z?55;>o6}Wyc>aFtez|q2{aDh6J&*QTzdqJ_zx?-ft$nG^(oN}kSv!tB)Uf*W#`pZT zDUsNO^{gq5PZws_=Q0m>S9TrZ&atpA-B%?n9{+I%6eoTidv|OU{^$P^ZpU_kTJ^7^;pS=3zWQ|}ta$*^kpCQ;{w|05qZ215AWU$bm>Db>*6(8qYx%d*&(rrx!Hr`5V~*0hm;-6l*V%j3@_t>* zjGf|A(gLJhF9}N9^i`8jQz)35M-O4@v#;^Tf~NIy+?~%2G?tHaJG;5p3GagNu!SUCPgsB}|W=NoNgH zJ}Un4a}Fh3Rm;9Q_QVG%s>5xv(7(h|OL=eagNz+tk%02k+epZu^8zUmdi93G5ked- zx27v(Fibp9F5hA@Bg9pA+6e1=eUy{AKPM17=s&ZU{-hCny(=lFDz+tJNG%orx#9;; zPDn_o9^d#SPvO@L(0>eXmBMyH&Oc)*p{A*?{`W2HcrPhY_R`~tCywsJ$@j$bdBOa- zV8*ZS!&d&kyKsrYml3suJkOtRi+XPiT^&*mWSfM4{10I|Fb7U8N?FjK7qOt+0Fn>@(euXm;&~XldiKTD|E51Y##HXq=BgYK<|$U&~dK*=hoq^2G>1A9CX=|J%PJ}01dwgyTRc*EW) z9v6$lF^En;O3I`~0Ifm2Aw(8OKJ3^svj-p}*s#XDgN1Pr5S(~Lh@6}V>Saeq{lfrQ zB0j`!hmft~IL6g*=<&=4=X(2h(rs#dX^;ZAVPUB4(>efwp+I%Hl7ro30ZA+*nFyg0 z#c{Iut@h&EOY#NJq9@5uSyzFsh!KHT5+tH$I7{vwL$S$bVzd@)|8k0pE@}3_uuM(SlUum*e0TW^f1?dyH1bG*L)84>z zj~@sTCRT<$v(_~T8motf;ca$I%A$Y)bnHwX-2k#MVyZ)E4D2fTAPCg{+tIOchFMxr zWWfgj&>R!5RHqQF!d<_G#u=vfL&C*zqkR}|7%bnv(HG^zhMk6 zTy-9-l~6D@MPtetg1rJy2?^6vLDKN0!ASCx)5Di@K-e8R0pgon z@BtfZz6F=;zf|A$AddgKx!ciaMZyg?d--ZV%KM6?#@96ci!7(?;JRXiEiD3&Bq(hD znTIDB`4jGZefMN5!_%F*OIJd{iSQtyKpRj-{`1~3)YoYv1Q78V(_S5xD9d^sI{<>D z6vg^u@X`{*me-ZQU$sA+XeKs(V(%P}2QFZD|C9bFtW)eXWSLKwqR{-y{j7&uR!F4W z`}yMMhP~5kB{ZM9Z*)!p);0s$4nqZnN`?{%q9c~ek)hk$r+XQf!PoG#cdV{fDD-$T zOB&GHYsb_l_yTve4|jkC95`aAMQ6M=wE-%meLrR}dDmM74ku{xwBUlk4Fqh*e^w>R z)Hq=UTO|^5#?6XtuMex9iOwno3?KfiHJk+rt@3H}V_cb$CzZ;M`y!rOSZTK??)#@5ewFqURB#hpbyBnlbpFd1oSe|~ux2l^KBqY#}9^w2B{eu$% zAx!^*xPhYvF5vFp7~Tv&y{zEO_)3WsJpG)zV?XAQ?VT%VV;}omGv&1spT~cdNzM)H zKd1|!teg60rNrtaT>M4(@JU`a+#cSURR=XM0R|-gG55TKc4zyx5^Ob^}7i%(ubs^CXwKAbo27U(N}$~ zTkikjFNr}JzF+Q1R~az!zp6~O)RHxnLJRiO;NK)72qtB{&g|C~V8yy^`?aQMeplvB zt40+VAF5-JlqG`06xxj&B67nI@JCMzPqq9Q1Su%u*CN8+ORHj?>kF)ys#}=r)NXmJ z3eQ8vWhD|M8saL7OK4&CRb2*Ia0fZbDy~fPqWK^V zCNeWh#SN>CgC_(KB|{1mL3D)~h?Rx_Gsdwt$EJN0s2%6i?6E@t#^efr0R`nK5HUiz z1@McKyyBAa%`5{I##`4RNY@8r`QBWr-AmOhm8)mvr{9mk0+#j}=`@Hdt4Qxl7! z4OBcIG@QRFu*6WZj}2mE)*&(@Y&oKj0Tj^vFrttAz(?!>+HgMJKtt8so54piB0fYw zf@lW}IlCeIU%4VKyn7vp$SL?Z7G9|$t{pVAiztwNdz>6p11YjX=w%jKOmb|8L@tUc zXrG40PC>#~K63%`XDCplIkY%_IYK|^I&+X|C$8$X$Pz)#;2xfK@HH7tXED?VJVeeN zk+k{&1#BxJbBpMl58&14R!;uBq5R6l4WpN06vG{%js-L|+vicp_A(0DJR}%$c zAwqNpv=*y`V#~wPbIiWs!!U_y5kRpsZ+vZk36AVw8IBM=X)=hR{8-2MzOEAL06KD= zxCZ?CIs#L%D6`8 zWJZCu;>XF{AdpH7x$}X#UA&{e(j?@=vcakB9o)+kLr{&X9!q9cEme$C1W zsJ2Q3al?*|bo*Sxc%`nO0uMqd4fLQ*hX(u$xv|ZE`2-+&p_7S`f!dB@NHQZk{Wia>s&ZW$i#oY)_& z$6c?6h|~bw@^}tu9EvjgxK7KuhNSRvXJ4tULrP1qO@Hp$`dSwHUv8GkOnvf!C*saGYcFT(SSO zXr}!WZo)^)F`nRs*Q7rdzVm1K8UkWF!MgyIxyc&syn5oS87YhpDy{SPMeLa61^^Ii+>j*#8p}K~ zno!VfBwpw?5klZ4rAaHIyaeG>32VVmMZG4XUN)$xBD^8%2k&AOBa(6YELjN=T$LbZ z4;qdR$KrY!+%tgO&c3(5YcM)I6g4#f9Fe=Gz(sTsIW!`Y)nA#~4Wq-3XMls*4H%S5 z?%;O=Bv9uzAVAUr;j4;v4IGGgK+1R`0RxxpeO?{s7SW{P5&|zK9!j>xfS+_8J-NVg9ov`r1jU#`G1!Kr8AH4a-ToUB zlCaqj!~b0jg>@?1f&57&=%N@@E*szYn~tO|ji-7Sg}Nlg-(JuWn*PW;FXX;Kh?Qd}2VeWp5o5+UV>M<&Z^RKqf+g zILPCIG)~KMHUvZT?$UT3+7%U%ui<=oKGGS4)A5I6fEn`sWvv3C7&Y_-OSEcm$i z=1BZ@pNF{GVmPd$AckT@2A+mllSB1%PN1F;OcFs}2j|tk?~cGU`8fR|MG-hJWIm+> z`C_HX7n8Ryw3Hi+dngMBLHp&RV#JSDwGGJD#R%I4m{d|=!bX8fQ!!RFIR+ETN{pZg zW8f+5Kbm^A!^0c0@W@mPsLI24)|X%h{wnzH5$C z4T&q;sIwtL22gV|TvUW2KI_GrD8_XQsXb zPC;KN@FFO3s84c=SBO}X^mJ;|!c2`WmSo=IopWV{uyOFz6#ntK@Gj^lQzAxLgpWZc z^z#3lQHv)xT>WtTHe*jTG`fiat+qNIDF=G7?|_5A)rnxkJ28%R}EDfwwO%r@~1~fqCuv(X4ko zV3zW&k^ofIk29{u9kw$RLwxzT9+{u&*9~V=?D*;~jCeVbhB~;%#o=)x^Mi5RMGUD= zKR^vzm|ovp47)UNTNwJZFl0=Y`^!c=1XiR1*;&C=JPG*md$$BB9O8nTC;Vtq$T8Wr zoDa@-EXNu@{~4!H;B&GOgwShQ}I>g*_dz zMuS1o>Lk6*iBA#rlq&pA)InIky|v%OvaBv;Bu4q266L36*RU zw~!fs^%$h!CQIcj3|P0$y_eBHM>=HvVB18 z%C0;>-d*a9s!D+>F~_r`<20}61C^hcj?xG$dL2(#=Z=CZKi%ab!Q-X}tjKP(CB4Q4 zWrPXoQk)7-yksGx|7hqLU58=&u3WX8tABC++RHCdYJAyyzTb^hlhOzKaMI^B*Hdwo z)j2j#JG9q)e!t05;riv54+GC``)3d#5rF5_z=mhy%@Qc0FdWTeuX&ilgxizyzDs0* zVmDOiVm{t#_nLD+ANlrj$Vbv0WBh2(`=QwLd7R~v)cqs6;>aM8>fdK?3!Y*Yo|YiG zT}Y#LFDM3^_9F}4w{VxHxWnU%_I-@<(RnBglz2`*+$CHovkV&;?7In6O2m4x-Pe_8 zj$*D~M&&+S!@S{A;#&6R`6w*VEx(&c6v1iY+jKu0Dp?H7bsMW1!4)WD*n%qffsbiZGZ0dt7xmF(^FxPM%6batq1e zCCTI4WoN9Bl(ku{Jl@K!meZm3uX5?q)JEaw@Ar_e-V-}F3SAc35M6Q5CkO0G1VCFf z+{GwCd*%s@S$_M_t%KqHrDR;@5xXqiNy&fHGIrIL^h6Ztv2y$QQ?K5C-&ncj;I&16 z65k)}f+*g}tglYiCIOVIJyO57cct0*F>9lWy8VJtCl8cI>xm3f{8GeoMcxO%M{O8ir1fxNr1O&fDr8Qm?hw8KE<_u|J8a zYiu6hGT9_Ru>7(IZ{;>=v~Y?q#y%&BM)-yns7#<0)9;93mu^gUAd7~`NLMIFj;z0e zbHB95)UX^gQ$zghK4Ptt0k#0-Wu!N2Dr_;bho6MhRP`?Di6axW_%?cU3n3#SLS5Ui zuoDyC%LsH4+KVTk83o)6S%{@A%p;RAw#prI->mA0g3rDxFJwc}#^`thE)?SU1C2Iz zFfAuG@9aNm`Xc1K&Zn`vV`tbmURnYO)#D)a7rV5t4WEMRHVG3%OkXwriq!xJ zs2}T*rCuIX`JVW2TJOwN+e1tu(294XVB;M&9 zk1rND-9eS%&+RGK_Ao3joy_w>B~FsOP&Yx<(kBfCYym8hhGSr(_hNsAeY7t*Kj1P#((nR`DR-I`Hr115e<9qW-ofY7dCqog)g78QWP?*;h5hYkf zafK;Pk@o$OZ&Ik9B2GYsB>^icMEdks1PB#{HZAe^40DsY;FNcP6P1}9tCkv(bCsXS zJaam#*uPigNJRzD93LTdd+mR0ybjuMIbC2l9i&ycG6)v9O*hPPt6G3fSPa zL6Z((qVP+bS;=OQ4&DJZE4o3SVqo3qcQ`(Z&E+i@rxQciP62r#GnWf;bl?BjW~QgB z{jA0++da+@=)#!Zo`1XC?eGTz{X1?u6pz5sO{{)iu5V?1coO>X1a~d#?~I(zA$crl z+J}?a`q_ zi4a@$F5${7guYa2FFe$K0uee-0Cq->3Ld*Wv#4rF0u%y^B_fD6`L|r>Z&gB6*6}~S zK@}o0n*FM_zA?IW7cc@6@7+}-o1m`4g}I+MykHYU*c}m4F(N7jAKQ-aAddMHz2_Zy zg2k&n5z-0iRlO0>LA2#A$F81P0<<}-gbkK=hsal+v^#kZPQg9B8#vhTLg#3WTY;Ohs7b#pyH019!&%XwgOO7BsA9n&a?|3a?b zmk%WiS?QJZkuCVg^u;l~Tsq*K(?RSAxZ*Om=juR`dgv9Yw-#nBhY6pO17DfcTxt{(KF8cy>QR)hJC0+BG8THm3|S4hDd+0sLP2u%nII#(Yb?8 z%#M5z*?x&#&H+JmW85s&C=_<&z7ws}0@@rK;&Z9!3-L+RWPu*K%VsdBSvOpd_7P`K z@$0FI$TO(g#SxrNFKKfP_u*Y`|FmrCz<*Ca~HX1)#3GE=@ z4^W8v9asNKvYNk@zYG9)kwScDCba_!qU#L^GjG-isN=(oh5nkbWrU%ZE8pv#-7E_% z%tWM?VWyBxy(`c}hO#4PLz(`l+-8mCUf!&;06(C+M=tpW%^OuT>?oXpUQ~`GBgb5X zu=jC*Gep`Y>Xx7a&egv`>fSCCTZ@4(oQ{9Co~oDin1RJ|KE9aS=_I5MC{0#%y}YV& z*Sdf=_aqWF80Y0vMZ^o6e(-!?IwH~{qc<49JftJ_Wom}tNRGA#p)94VwOMBG!TuXf z@=yQ^KEIowkOz~nyf#XaArwdLo{DNQ3%2iyAg8Hn3sw0c0O0etLeH z=$N}}Y<hP7;|@xX0KEn_Go_=Y^dt?U2UggE(k9Q?T0F>L%AiL zQ%ov**fGnMRBlkEOUm_EW@2-wgG4Kj1zc}rk=7I=j5mgkn<0vI0uGi(bnoLL5(3;jDT8|Y>3TF_;am63ePpODPBDui6$MVO&y+EM8KE@(;?;x1`yHdA z;!qLEQH&#=HNl`sNYOn`+qg>@C;)UngKAtY$YB`yuMhb;dF?8+-!jf-^~=w|+_nRx z7=~*@9UAiZW`wJC$bC!K=|8iKOXA%hE*^Px^u)^Vpq9ejwq%sidVHfW1ru^!3|Ic~ z=SYPixv!I@C@ER#-#6c{g|@wGKg54u9UuJo^wSM}RXLJQn5ZU=+iv#Po_3Y|R*l4a z{=4*Ag&^Cf?iKDej4{C+gdwpJ;Fr;E%n(fp&l$`y;U-DsX?^MKgu z3KHBH=rb==4;qXiD;de*NCu`gU-g{yYlBohwek(?U3nKGDyIsUkeVM)v_Un?bvyxd z+guwS89rYU7>>?E?LJid&G$YKeBu4&XGYk`-5~n7VVx*BNA(YR)4p8p;i4(6>E}sn zo({2{ia5oJC6=zPFOgdEY6IQMEvtE}{q$;sOLc6(qEA;nLwKBbr)P=t;uQ{ihVq6U zB*aAbqi@gDzyB9%e86?@Q6bm@U3g$p-!idGn}2W|m2wi5NNs>|fHJjQV5C^tY@&#F z;`kxtoA0Iq`Ikg-<&zut2M6@gq7rdksh}cx=91qoJ}8x(AMF+RC)*Ry&Kxg}b+~o7 zCC8(@(!F|S%?ZOoVzJR=(D^!V1y<=rd0P?UqPfR(^H<)AqELTFvjjh7KQuZO15k}? zIbox?tH=Uf90`GR8=WUwaolN`I5e>o6&TZB-?Y2-JYH99*Gx@Sy@N7+z3+T(CE;s5 z^p+mmCs=Cwz|`Jc(v65mFAccw8;qE`l1W&rlP@Sqy6a=DYy=GUwzgf6D~(*@JBY|5 z+j4{;jc`t^4TzH$5tlg2s&#d)2%hIOsjVpvkn~cFb=d#sjQvvlT@{fLnYIT<+ z>@U8BC})qShj*28=hgT2ZzoE4G%j7gG@2f!qIBSa)sfQeHfA>j*Y!$VpSvAK)C!2t z>2TJszm_QZXq`LF!VDQg+qP+n>dmdE(Wi8WzLcIRB~wZ}OBE;Ukz$yDn;1@issUO7 zhrNH#NEW!{7y@-cRN@_6IImusNS}%T3gh1br1nZjJ<3M>QMCP3;|IwE#e(a$Qa%Fw zntzpr<;wEJfj4t}aho#(waL7K_s>nqoTO_fGeEi$8^$iW5tD6x?QNU6*Q@B4p?HQI zTWg{CX2Fs;)MPI7cp0JfbDJdwd*IWcq8L)@*L$I(Uq$CfdlZ`$5d_X&-(ki5wqbAj zd!64pXckDP@CN7~_{9jTAw_d6K>1#LeIkMS1QsTa(|hP)IRDkcj^Tm1e|EoYy+%Z& zjbqJe6T&LXW$B>W7gy-U$&7kkpyYwtbBPV2$ho}~my3<_^@1hylt-~2S4DGoOVIeu zqA3yffvD62kz@TMu2svhAFEJAg1Oe=et$}*0TW`U@7M9(s~Ly<Ke-}9SnDMmnAvQyB68k5F?iFU3(`50&Z0W!ct{;oJ3LOHF$#^}4jK;x%8jx{=G?b7wInfQF#)kgDenl5 z@uMX76C%#tqxc-+fc|=}p-neWv~4HOMN~gY)gsb1w4yc&*ITv}g_hvTWcroos$14E z&&oa6oTMIS#E6sg5x_^+j`j6}!$AecA=59L42QQM0+rr8w)UzDE&p-;u*YF-mMOUa z>=&tr8RGHmC1`A!wjeL#JA4D!hY#oxkW1**cMO zpgxkQb=fc-h}eNXRp{>(skFkbe@;_%sc|NV7D#<~C!|@>dq9b{% zsS`6TR}ULArWF}FeV330YerQstR25r|0cSgfDXH6y2+jQplATiJsahBv0CQbBsYC8 zy;dbl?`ZqdMMv8#Cjy;ran?eeQYnsXv_pO~KstM5s(xh+47lz-`tl4OV&9G*i`_(4 z`Ec+O!_#+kY@_sKWQYGg(w$Em$IU*zaSp1$gjR%BzE5bj%E>~aTl=~?o9@(mHS3%g zr4l1se@C@sQ0Ke^Q(*T!wvCCzABgiWK9Kv$IPm3?9fM$OyXn2k^Ke8*n?p+>HwyHc zP~*K(Yqe<;u?pSvW*R*wnzEozV&iv7=>K!qNN-6quasXd^WD!UNdq?Kaed(!A}! zbl*+u)*X99q-$}Jm$q&aKE1EL;B9@~jduBM!I9%fuWe+Uz4#a2>g^e^cJTSX&oIjNSwV>G2A%D-*{y37dC4Rh7;L^4eu4)kIsBZ^%9$)|c~2}orsYfV zj1amcV9yA>&i?I7strB8=Eok65Io(b=CWRC{_F5L>>S&1(Z$2vHBABh)8bQ{_SDyR zf;Sa47^0NgJr7D}-~x1fCmshN1|-kfgriyqcrCS?{6*y(F}0&~SP{82q4m}LbbqFN zTHe!aulPd60L`A7kGtX{%_mEZlK<4bAnBVn!<#T`V3pp5C5=RaILx#e)=8AQ${&ga z#Z#x9-ufaZ>I5vF$|U;H$2rKsi4refU4VV%ck^$~3<=idWT6G}Gk#1nX?)%d>-bdT1$GO?h(xxz-}mxl;YYVO}=1)pScX@ zv_eTs;Yw3PYjm=Wykq3G@4&l|PDx$-kh(T?PLoofn-pWy>{yV5N?NDYYsZJ8>>riF z@#raC^5fWkLHhwRx9jR?Q+V=|7SUgs&0m_N?|uuva9U22Y%##xip|;hMZSIDwO$H0 zg*ZCrH^EfW9>Uc=$Ka~;y+xmzWLE0y-~AS*HCy#>7h|J+i+-QMWOu)hq6dezhyK@< zrKupEBg>4Oi#DN&4HJ`Y?RiE@PjcZ-lX+=~iPlZdo{rbq6{yFqlY~J09tk%w;7JFs zl8$}UF$cxpqFz}v-r6X;&F#wG^aH&oEH)vGY>QvjN!pvU@3lsodmsE_RbhYT?@`$T zm5zHpr8Fb70lEEheEMyN?!(4t)*3bGjbG;o}nu)%EQ*HVxv!y7U?y zkNJOl75%*8A{{smrDG*yRk9-SIi=N@_5b|qVy{t%`Rp2bb7J~ZCa8cU&ZV?|=-;E# zEc=MN-jJSLDsh>nUW2J{{M!-f!ZX|SiJpTIyqrU**;o+F%)gZa!&Re=`8OZvJP34Y zoM)Pd7v8;86wZNyoyo4otBO+R&BoBBnvFGI(@I_763~CGBnFN}0vB`7K3ly%KfXT} ze!NvmkvYko>?XhHdm|ClbqS`HPMMbITAXe(Z9kz_BC2yW< z+UvhqJb^=hrKr^O$AAxg*NUtO7T2CY9vzQaoCe0vL2Hq-?r-T9Pw%rs+*SDfs&o21 zg5R+(laXij|5@|=W<9k>>C*t+VvOtXta-i4w!Q)1wbryDp`n^p{A**&wEX1E==jtX zrQMai`ioFZaM>!ZtYo89hSB8JbfTHCXR99}zuepd%*!{U_AfkBL;VA0tW0=T@ATgg zPcrhk10mbmo#i4A#$5}4bo#pt>AQ?scgsTlzLji6=bINCDO>AS@kjnu;U6HE?g^-) zRpWEzxf$m`g(C`2_#$U%r-0VQVYCrWQ&3CJN1OWCvYK{=kuQnNfArgqUF*qIPcF*+fEA%zTGRldzLgSlsdzJm4NinsQ{dh3o9 zTS=5h(ZUSA!v0)QX!Vcsv#gRVP>?Sc8m&kWope`j_;b8#i_{Kj&&`jx(#5}pk4mK6 z@IUvPz1KN|%Q=!O%};l#RfVm`va50qT(i0EBF>1t`0@FXW4Ss(b^C1^6D9qmK1eq} zc!5Lhl0mb`3ERP%k*Q0M>WkFcYPUUqSAGt0RK49e)al}g1$dB~^HDMho7b{un#0}h z8klILnNOvpvfr%5YEH%~-4K+xo)6BJ2>ScE20tqslP%{PK=)$CbG6+l&Jqp<&*LL| z3Ke)u*T1LJ+b-Two=IcRJpB-KxgPf^y{|qfq@upIh!7sJx-sM7Y;(dyEtN@(7niE{ zN}X>xb9<7Kaz@x&&Ne~~NWSC*3H7y-9D)uztO;xEFbFs%tbUvft4(w?78wsJ?$Ru3+hu+?FsO zF~832G%>^)PFjKTq3qa_8W^mH%g$Vg9g!|(;yl4*Z4j~^qQ$$9=JTWC#f zQD;J$D1MRKZVd3T$yc$4JXWn4>dtAER@C1`$$Zc(=at$aar2E!vv<}{N%lq+!Y z2LcP?8W$tBkQ~ieDJF9MZ%Pzt_Ulu+a=Tt?t(}nU9J$CtPxdB@-iB8VFCMC;?|T+g zcrJX$8M*$*VcUpF6NG9eDoz|knQ)?e#%HAKNqlzuD3sEdT&Ez@7OD3hsqS^M8TAMvJ{f$>^#m0@c6eV2<3w~M9c|$|LNJ}NX_;Nxcu0U36>9E5 z`v~H5%PrhpS?L`J_t-T*=*eZ>jQ4f}fr!MgSb=fL{#>v)sz{>JGk1uHmdIi&Ic!eG zaBoPUYwAh*nlf6ExQG?K%Yk<(+p6lAg#0VL zihsJoe#M%z|Zf9PZ8 zBCbV8inv-ndz!vw@K)fhgji=oGS{!&KTD_t>d);Jy74*uvL!#-W%~4GRg~rW40o#0 z!8~J|)Epu}n&@SdI=dB;jBUzGw9ZbrFHF5fTy&K)mGuYS7}S)wRWfeMtfDfd_`#h; z4$&uUR@O?cYcb1p4t`14jtv^^S!KRvvsBF3!S8!MR#e9!ko@tTH+t!aBc;!+kK(R7 zIA5UAm0}L}*Gl`!e)M(6n)+6SeRE@ehKQ|8Su^o0@}5QxFpXFYwi!JM@N{23S(*0) zZfh`fqI1vwBGdQ7j?RY0CrUJmI4dBKv;lFg>6>C@k?G9Io*n7rKR}cO9|% zUMnTX#A@4S!B8;hasa#;?J zK+n-dTR8}dmAC^J?Oo1g_#YENnArDmMurlm_x)lZYin2lbxu|1>|15!TRq00>f1QX zmG0rsk1Cl}%|E86gpz`;yfPH^y;iaqd3O{+df|Z}c@pE^n2!%Ru#aQoBGc@gNXBgz zca$5h%-jLJc#TN&+0v)mOS&-H_XW>XOv~dB92$P_n~LRzJlmtPpq#98j7g7Lo!5m1 z4@gp$pFHovq{pMLAEhL*%y#O{sYe4I!fiKZqkxp>VPkcUFDoX(CsQ?n#!xCJkFH^j zt_a2nW>v=SMP5GcilX3M6=0ZF3Vk~DT&o0JHVOlHF_EmtKL+8{v2VR z3VB9fu0M7+OU^f5{IX#Ks$T2wi9Z`b@hW~_v7;u^IHJXmu2c88dt_m#$)|mZn6t8f zA&I4@jaRo_BN0QdfjCJMPZksVj%{5mC9R{Jo;9hX^n3&_=M@! z_`PR)foFEcZ;MjZ($bo$JMIYwjI~P{q!#y{(e1lG*giBn6R>V6i#?H&nxjE)x|F{0 zhXd(Mo)WWf)Qd3V68TbNMZSdnjnBWmle*PB^E|%+Jjo!_d_Z+2iMTwH^44xtVN{s zc&PMNjGwYP3zqfwuG%M4wIz5e+fK6uWZ;u|ZEVhxqvc@Ek` zbUyxNyrF4^Vz(CyU+kdFuiR12ww+iP)8}#ii3H>i?uN zG?jsKejC1tIAa!$4ClWfYnMldi1>wZT3HjZlUx_Zb6ojy8|Gu;8_SPPI=meb9+LIC z3y>=J@mUHI#q6sfY{=KG);TJ=+kDLYl`h}6?xWOUj>qUTfqF8EsaCMVe~ zu;n(PC~W#TDv21xx!~~_0^yE3_C(a$1-YQE^RGG;aP&S6+vU$iXyH=R3)?JPt`K8& zpU{kTKhfg!);L`}#zkB9H<^OHQa+J;@hw|_P4<#fi{FcAQem9NwF)9NR`G%u8`3_q zpj*nY^P&in5|&)79Y5I-BVI%olw0yFbO>IkMzZqgEgron({E;s)?9A! z#vGk|dH0sV7{NVgOaHF?aP}+VRTZA>%EK@z1!;`>onU*#!$qCQA(t3?1x&nfNo8zK z%qQ5nuW{y?30&G!-nsPFI1xVWi#Lwck_&pHUB`~uV#(n;o(o(;j zo7I~?Q#KgwRe{5k>{0kO=a3pfD5@C}IP=U)708xsCq>%V3rOD94Vb!nqC|Ht$8x$l zBwihp#AO5-*e0(wWHP&%0`LB-NvILBHhGW{O%W*W|9oCpv;NwRk(*G?>!Xi*$5TBi5_}^bf0WlHN^4mGM#<4x$YnR=`;Z5c(=59 zEvmyqY5y+bJ!#bgDX4$Xa6qa;##Y7UiA{5 zt@Y;D<^Eu4>DBYiNV8_gpI2R3f`H<8%wp*+k*m9M1%R z?3jb)&PIITP7(Qgn_{8rO5k~_*Qo^d>kWMK7gOUQ2`=?T3Q($DM8dC^O|m zDoATaboh@t7I=Jz)|{swDx~gjDBs)sN6GnQKO51h;MF(-j z5u_KL5mc%mf`T*~Ql$s!5|J8;l+Xf-jtnB;&=nD+NKdGtgai>G0!k+dgb)QCB#=ae z1V~77c6{IOtoN*SetzeyboZSvKtoVej|zlHcYKo^;f?zuiohAwV$Uca;5N^^pSu(U#nw z>d_rIPoEZOJ=r8f&%emjm~gFv81s#tSz`R*ZfcXQUnhO)svE=1VY_y8oMdh}5FpaDXH= zbvgrI{+gxEa5g!(>-EE{@O6PnarKJoh4)L8M&HTmnbbjj&nX95_VlB{;7^o904pVYVgt zHnp%`=e=UZDG#{N;wMZOUoTj;Vb_Ujafmf1DYv{r0*kQ+n-s)8s{+w;S!wx)T_{kL zO>8mz!VJH-EF$nm+v)AiK{e$WiGu;nl#@vdCm(&u(;g4aOF0Z2$G_1Ja1^C(zNtfP zFit&I>@_Tz0v)dZbZG@T?elyrsI2;3ci;30!udfw(*3~84WllrUj9t<_&tYXaG$|y zi#ldI{y8CtXJw!|*i>phc#ZU|vZ9C|=vZv@S>%Q^5)_Uo{bXQyM}4rS)K>hCuzmc+ zzL=axXPj-`I}aq&mXbm{hOGqG6gl?5URwSp#;pGctVmbWqCDQmNucqVuSmSGjGAL! z7UdD;uZT0VJ$e1vAw{ROd<+m4eJbzOctr%7eYd$g`PJZ4fHy&wrR{Z9NGO*h1zhh& zXcme+j``5Fz!DUTee*PSu1h$;%D4ldRvB7n{)`$^u{v;SQ~#OCh(LlxbP^*j=lV3g zs5%+nFWp!(AebR&srW6WLdCDB(Iao8gr$P6;#w^hYU-ToeHAgzr*+Nnq3!YGuLdW! zfdSL68D}kr=xeC9&&rER7AcOL*P8MyK8@^F&FGi{x69op?J3n88vG2O(B)H#u}c%7 zuJgN~Gkj{$L8(11FRwM=x4!bbYT+SW#8^79^~v4u67I1;0xD}JvL!vZtK3TJCN;kNvISKfB^LQraEC94p2XRUi7UwK1n5e4vNbl#mn2CpZ0i_l4C zjcWo7$o1w`!FgG)7^+<<+U_r9Pu*m$DXH|!?`<-~qTwx*XCYKO10 z>FYlMqvTf`xUgi@qD$HpVaeH4W@RPp^jamgT})Wr^3p0h(=1i!u#GK)N6R1QN))OcZ^DM3 zi<_PpMbA&CQK4xU6k4(~4uoW;T_4_HW0G^Egxw9`HqtRyBP}k%t$h)vpTQ%0eC}Al zlxt)DjQ9J_&#-M zYRC3Fdx;iGmC8T(hnR=1snI<3%iI;yXfqR#d9*Oo*Ef<}x9EYkC(T6w9dBiU{E)d~ zw!tHtOeaLl{_@O7i>HRu76Ohj=c8Sz!>=vo;S!zQL164UmYw+eUi)A&VY0+hDpgrEmbOQ|E(lLL&mhDNRW=FrP_8d z1QK-D7u?A@(^!3XY8xMSb0%Q9yMC0sk|AgSl{KHj(l1`bi5S26yGG%{i>80JFkmAW zYD=wuP%7#@lG(|sKJN?p$5y*@b_WL_ohMDqX3V9gvFw+Ytl*lADJdgqgRIBs4ShsL zotW#3&2Ux}W9jite1Y1);f2Mp!(KNUi4hqVS+sjHi@GnoFfTVr_^cWtH+cD z6^HNsDqzjG20gz|HmW`MAt=1=M0d(>!k-c5GcKOp2s35a)dA8N!G7 zlNvb~cCaHaQ5WFQU%)w|ehx_0eh19J48=g-nPFClcJz@S01GhI-n4QvRO-z)sOQl* zK6#UjHa{a_s($SErY!WG`m+ZX@?!Dtn6XP4LXVX3G3}!x+e2|sK@A@QX=~sv=o$UD zh&+-?Tb)+d541Te>S%b@k>#MRe6Qf;Hn_Fsvv%`>4`e}qL^b@>x7jc8*osfV(2F5u zJ~x3ePN%_Z^F1y~Qr{G^A_Zp@lO6808z50)PCdC_@IbOv<7}Zc`48sGXm0G(LqG9N zL&is}=quUeDF5$k3$JOc_0}pQNbJL#QmRj&X99n;F}qQ)62PLa?@LflS?XD?1sgA2 zJvcvbi}Yuu$Q-khYep`oJ0{m95r(~(&9|&wOzOE;*-kz6Yd58=brscKAyADQ9euPD zTNNjb0z3Y=1^r_+Q{B^JY*SOF`Cb2jOJntV7Z(Pm&@`tm%yizAsp;N8W$)|STHJIt61Ksa_0gDcp3@QK@=P$Z2M04yB&bI`FA~FW(4GEZU8669OoBq<)vIvnx?J z=y}HLAiB_Ljqdv{RSr)*l*~|CF_)aAiAa-ZDt1NbQ07oIA4x+ni-+ zf18zVy|;T}-6*17P+yx*20VdPtj z@`?uCQ`|G9fUvBWQ!?54;BOrHi<7RP{b9c(!*V44wu|5k{xPD@8ROZ%#n)REdZ>MB zx5jP*$ItoiGRkKd0TbHK{AZx4H95(m}e8W`~nI;1ZVSufFVgf-9Pwq<9iVTFxQ>38lA&J+J= z7Y%X2?)(5q(1%OI*u&j?1?f;Sw5Wy~z)`_~8pxZF2_7I8{Ay<&V_tMbz|v#xO0;>- zG7L+3MJcBAXId~m0?IzjWlENDdsi8@;9SJ~J2P@;d>r?DL9Sg&1h#8%oJ-z}8+)Lr zdqS+;^Imxa>tZ_RwT<&8RPZ{dWi9gq<0PmCUT=(;*V^uUxJJeK(}Po*4CkZo+W-t2 z4#Vt_Im93K*O5g-s3Jg;J|tdj<3x+ngpT0xfi)R7czU6Mym*N)aOQxhO{ree@^3qg z<3VJUxaA_;dGX$Wmhxs*Owa8aZUfo5CrJKebi~B@eA)JC`fS0FxrHMs4#8k~d7c_q z7+T5M2p|oZGEnjI?%;A@g3wL0CQ=e`OFkGGi?cTi3pDqc38^~r#ot+a1&y7A8nDff!o9+eN!+`sL zW?wp>UQeviJa2!v{Ef4?t%l8j6ZHH;??F@Hi}7KDaeT$+BaYTDj&FU~GsppmCYy_% zj|k!U`>@dWj#aQ9$&a(aibg#8eb7s4C2(w}0`KEP~VuUik{del+XnJzr| zW)%LbZ)E@DiB3YoBvUn*LC$9^vpm;Y=N)J2vu2Dl;*(2IliVm;y9uP68^xZ~2C%SV z3%?xC$v7@t&$^>()?hKEsG+U$R30w0Us!b3OWZ>ElbBH{^V)gb;x1U)$*W0d)?g+3k4hqX1D0`BXrFz)j&i7#AYK70W`%iEXLuC!g z4!O-pd$!vTU-7@Fk-dc}X)w*zbHd6+A2hDtlsWaPUPs%T8IQgT%D$Qf;nVN+_Zo{z zGv|liRr|z)NYJVe@Nl~2q9S8l;Rmaow<*0!({rC#D;#rqMm>8#*TtXV=GWMK9`|ed zY-&DEE(gZmi5}woT|2+5txRe{pe&+2EM3%P!mJ;^0C~>D+bpz?+9WYOm+&h~lmSvB1mw;q3t(MzR0koFHJg*RUMA*ysHmo(+}O#26!bP1Hw zr@6YJ+Z$CTM%@St(h$+$AAFe7JP>9UFQH`>4WCl-jIl*-uvtAMg|nVJIH6UA47A*e zlz*M4G?p;T3SOsrf$`aiDA6S9*KyoZzQD96JK;+bn3v7!3U7>k+XeZgGwly6p;ddc z3;D9%KG$ygQ14hAInG7K6}f@ZcJa6=jaTwk8va1IhE%7t4OvB$X#Wl8dPMxQ<~!o+ z?&;ACXQk$)M)f8Wi`pl-Q;2%`EcT@5IbunK$36jhb--Qf)2Y+F7564DEB<&o!#_tJ z@0c$?ogi^Ft1IMQkKBQ~ZNTYXbw(u_D4rsoar^BaYW@*N!1xz*5ITP9ukk#N%^QH5 z;&{U-I`+kq0c$5B<(1#TiYL8!Dr?UVYMvQaIA?iRUEu6KS4jq|Ln2pRsj^M_`?pP- zL+1ib$eS=+?`+!GIg4#s^`n2B*jPKlZmQ! zGvGG~?`$n#CL5PcbaS6&f3Iziceo7j0m%ydpMJ0K;w$#-ao?Gcqj>2O>+YrUeO&DaNr;D zT5r5`ko#?{Gen3C1<>>gxJSd&&Ot$x7?=p48&VjPA2M}5Ilk2!dXQFDM6z=?Vrm#b zQ4d04St9^)0l1qf$yp1e&_JaXtxB#9?4=hSerIuIMS6IW018f=tO$nX41vIPN90uf zl?`dRe~n?}8;r>crtPluvdfYrhgGL=G_9f;}IOkG55{9R~^qjiYxN-h|i>UO{hO z&!*tUbA$k;6#j#)@%ESFgBa{yU{sS;Li+wl|6)CMTXS+#hB$!nm(r1JuSWYNC%hGZ zd4~PKWb46kViRj{=oLpVJH;yYKu{n()aOrejQ7P?nnddv~D$hVO0YhV_|QsDMRvdDXH zoAPq<6#&z`FiQA0Y=Io{&M%dSiW+cFQ#MeD=LyRtyBg#tE$fEB-TDb&}j3OSA%<428 zcS1BAr~vWWob=EAJ$7X?@yy+J=Nr1O!ueQ6WKdbt>+=DSbhZ?6iE50ZpM^Ur%tm}O{$6lpF;&*7NCOe-$ zhu$JBBMrr%v{jd)nAoP&;I)RFAk$Jc>dg5gCkC1%LTV#xbe?Gn%r=~m`$VW#I0bh} zaA4ad*Xy9`dvMZi5%FnX+br6yf=%cF)ix_-S!+N;38L&2eJecL2Eq-6#gJj#go0z| zknGhkMis?;TAvsiSj!>d5>j>Y&if`i^_jz6)!m|3 z+Z{Ut5^Az$%4_tSI!rQpYsKG{0=2+T%rG|-gwuq^71~*y_ulfo9B$oxZTcour9xeGOo_9O%^ps^&|yOjVa{w-#4>LkfhhNJzmF7>vT4l_?^%53YL=g(Lv`%UqN(Ec zy54{6H*1@Aje{}&wV)nvtf8XDK#PXwk2zj)$QoMBl(RWT`zPWNxaQL>i&|m2>Phgu zq`VI{Av{vM^;SZS2gdS+2lQjLG7RzWqY-h4)K9bBqStdWgBx6zF zi3D~gfNdBN(Tjxv&S(%hQPNzD*BnpeQD0L?44 z_*8q?ix-;lKV8Fj4zB(R_HJkjqFN1p?tlNdU89y%?WsOf z%>*oEH*xv$zqTc$XOTHS4Of6t7(`vT28XN)<+5tprh&y%Kd^45NOcdR5_j{TMdRX= z!(L&=-vYh zz`J<0EVPdYf^VM;ykKje=Z`W8jH_RJpzbV)OOSCZrRL-qH>3LjQl`^)?wdvdzN=CH)K z0Fwh}Bz=OFyaCz$A?RuK&e!G=xgMY~4dJ7rm*yxg?XoJE_$xR*5$p5XFAD8Q$2V}Q zr2O)4u6$WcDt^|M-0)^7(e5?5P3uP7kmDm%bhI_!q300Rt@Hu9zHTnTDKxDKa4tqQ%{ruz%G~@6c%Rr|B~KagXIpgp;&BYU;>%(-a7>BOujQMw^p(H23SDJK zJz@TxA3geLitMM@I%D{a+2X0%{dJS^w}ULq*K31Ua-v^ZW*PKM z#Ta0;`Jvax@_+4t-Wa!7R z7ix0r?RtP_VuU=hy6HNsW%yx?uD=4b zABS6Lmv)-MKr*u6;o{N$!jbcfPdy?ArtwSCWD=!I- z7p#f(4N1T!qTkwUbf_a;R}=VM4=q+tjsCQax;0 z9mEf5C?5*BTPdAzBdaMy=$lPg{N$Nmv;v$S?Bma&&QgG&@lhnCSPx~sW%{OJ^XG zImdmpgC;&fla`>5A~BrP*T?s|^rmAR&Hkq4gG!q?s)xtFO!L2ch}`4j%XSDa8(hR( zHp>xGge8&D5U70DAJ%@g$1HeZ%{0E%!gq9hRPPQ{HGG0?sT1TbY!wP<-w$D%76lWW z{i?fua+AVeg06{v0EMbv&g&U6k2V{;Lu!KSRsWbc5#GydTCKc0>riYj13$>*4nfj7 zAmwj-OJ)?b>h?(Pd6b79@)sQAHY5Sa@j|0Pb+h-eR>P$Xw)+^GRb3**Fq$n%$(=r~ zfo?AiPP=FGcoRk(rHl=271k3*8$d#)Wb`N^DIl4BNTFoSP*bzP9X-y4Ce{|rW-+Tc zH0exoaQz|+1G8Om)@Q(;TW{(1)@gEs`EY+)R zRx^XjMR?Zre}*jrXjUP+Q7)(O(m0b`GE)e`K} zkgym|UpAyjDySrAIQ?s0HBk@H>dS9dVM5uHo#dTMocEd%oxQ(?o@xEs-~WRB=Jk|Z z<7V;yw7rwylI*L*2t?V^qwm7T3be<|?tAQcvoBOw|A0qp6jTQ!K@0N~Bq*>fvn|q; zR*Y+#)++}qXhU{qfcTh>zQb379jf0IrnuPbjn+K3Y@i}4d8Qgd(^Ms$ZXB#wTWeoA z^?pn*3E*DcCD7r=68WSA50Ue#ri6z#OKu7@MIX4<8YZkCj~1zgtAuzTaM=NzvV?E2=BZ)5Z)XQo1h76{BKmxlcIs_3Um1V-jGtF;R*C|@A)RW- zVvv-6JWV}_tu{Tr>Rimu`;+e-^$ZQDc6vM z={>@xR%b$lx=bm2SLNe^w{I@E=lso&=t;HMRypZ*;9dTC!sZHx8r;=)onecpj1CT_ z^A(^XP=!=QZ5K|b>kai<#fA|eXWYKDYvpf1&l(KAnkiisby3NLG8cJ<>9v~~;%}R#mXb#qK zHQ44k>B`m97`)bd{&w98%@7Y-v3#k7ZL(oOv9odfy~LpPRfbI0u`1LoJfRB1+HS*U zXj}eOX9U+k(8;b{qDNVtvU{S9kv+<97;N0i+-f)JL|_eMT0iLEI1_cItZA;Bc5m+L zUh3tNN$D!%OVlL4GBAFt=Dev1nHma}Q@L-rZ=Irajux1}Q2uclI0#=ZDd)Pd9WGt5 z0z_d1Par&}#0WSCDzUCG&K)Z@R~Cwb*0bgr=5lgVT3Y{%bvhk<_3*(F3$^x)MLMwd zYuNk{e2rjsoOtD%(RRP>rsoy+X9#P&cb$=3PBJZ-#}-@bUR#z~531{`Za>jG(0&?j zgxv0*3c3-TAbYmJ6jUERzej27&G9w#-UUjYaZA!$gP$7uwZ})+=zzi6LFl%|=~`xY zQ=%1Q_541q5qmi|URg{B>SZ*RyYMU6dT-GBW9Or(v^mu@_+2{_wY;JM-JcAN$hP&6 zi=$XqTZsRXTUs0=+VDnt6Erk)t)7*{n0{<_G$Hg*wYD?3+_*g{U@6kCrX!}rT}Bn- zt<>J^(A^aa6>00Qm@T0hczSo}C9HyxCSajkO^ri|(WYM=dJdnL9}q;9^EQITE$Rs3 z9f*}M4f#LMnNR5Mq}I(U{!v-wc(IkUOjHFui5(}k$``? zl$iL6@;_}KhXTw7nC15p*bX=09$IQS$^skLi<>a3Y{_m!Vmr6+{0kzP%e?I1EiPCy zA7l~_v#y{SwsCF0_H?y~j4670povS)*y(Epa}!Jh+H{0XVk&a%qTN_kZb z(l}ws1Dw9SW=;LH6+3Eg5tQ*D$k5Q-Et#}lp&boL%z4J~P+H`B>!fbB7jHLRnML3l zGvBf7s>d@Yi4wGiTS?rwJ_Dp8*1@^1vNngw# zVd}345Q>5}DJ9NKxd#PycoHVQ;fI%XsdnPvb>+iHCxa8cIgQm3bjO!Ja*rF2{TUOe zZi3tfyMtg3mmC&ZFXy!p+KEtOHOVtLGmVu~YqjZnEW;@&DFgEvz3KF6TfIZ{r3Imk zHg>2++cXg4buN{&jDnw~Eqx-KZbHO5!Z567c_j-M`*CVw#q45iaSk}7K~$UK&Rlm@ zyq4EFWG(e6hU=n&3MfAxM_gIA`d&w(rp#!*q{0DJGxqL8S6&Z)tV7sbp~Hm&qZqp~aOb;?ZhV0Xw@_l_Djy!`fc@u4TF`V%q3vgjxWxWXKdcOEFrfT;6c| zTAKE!F$&VwN}UItX@;~mXm^Gg_nxHQ$T_O8BBTm)N&8D7XB+jT*UKetc@EL-gj745 z*Gaht47;tqV&Y2&zbUpmZr^kflh{CfaPpeHMsMhrxUK%3ya+AYQj6{Iyc|xUaMcoW%uW;TFZ^fZ7AW3s7qbCuNRyv}#RLshh7E8gD`g4TT>FBTgW^ty2|f zbDFjh2Du~^lq)~+FbJl@nCDL3_7_jHQD?Rzvc}06WMk!e8GfKr4g1O& z;@P-ioyCrB!_OdN1D+axB5N!4atcrFR=?1?X6A?Nn(y43;OK|pf*{wUO(Et~FDiuU z&uL)=X7tO|;jXpOblS{-nVmrev(})T36W0)Rc*LgEwX0^20pHLok6&IMUP6a%aeiT z7R|^%rzNU@6qN<&JqtC&&3`~lM@QRo@ zdnP7f=UT}mQdC}|un_bK?qk7rbO?qm2jj^V?60>=PopTtoq@wjZi#w%*(F%9|#5B!GlLF|}F;WC4ey>?ALJQ)Ai<_V@%zNOjmoMenyUhZ$0hZLQ++c$V@N{l9yP zQ(A;|M8jXl*RiTldz_O)$_&aDorQcEAFAn2=qaXw7fGWHJg;Bg zm{nZU6&!upRx2Yd{)R}bvM#_WY0ivD+yopYpad5`xbd~c5|$sVhozb>{^krKvN|5s zJpQLP!o+OaJp+XoE%_q~1ne{Bt|7+;8gPNHrhB63Kd2 z6(xAjq1v$8R6XbB$-<}Ja>R+40mJI(&tz%;)r4td-2R3PIOO7-UJ0k6(1Fv+a$%fI zx0m`u^S98cPM0{D(Kec!mv>8&*OJSU-;x`r(-&;W=$rMDDvH72BteR5Aau`N$AdN0 z2FrRnhXGMbg_Il9w{)Kv_vj_gl^|bv{~~`HoI1np`L z;;CI9JJxNGG#QUEV=ef==4^?@-fmTqHKn+%^}k=ZLn5dDI0GDgC*#Oni##lc5as<( zkNekv#4xiwt|wBge4dyvz&REB$9rs&UVdKwkdMKVJ7A%>$R5x+3pe4-b4l-9#acfO zeFApDB17Q$hr4@ciqCNjWy$28BI!+tvk{)@Hb5`HIId)hzF9ki%PYd+SEN_a`Pvui zMrFjSreJJPGJE!i3L6@f<>)?lo7b&!!Vrp!X?tB!$2hFVa0e`v|{nsDVL!CzQH#9r>uYX?uTRVK8h4`q)*s7m@ zL0}I6@ybb@?;}(DZRO`R~6>9eL#s6vl{(C&^h(h^!fjwr2Z}WId)5?#< zh4PLzpiKRS81L6@UwqiTW6$p7sTCVT|i)W|Jwx$z>=^FcLW4>ap5k2=I@TX z$AJG9O_sy8Jor^I&#Q$J{-R?iQg}?mvpJbK)r1&-c2T5=DAMD18>ul_o9{-F&s5mL9?wL9&Iv165qJxcNepND2OxgNj+fj)$BWy;8CvtNt(p)na z<+qA+xXI8x$xY*%2S+=a>G5=Fx*!^1KJiNmob+rjqf4ir-&CJWv=UblW<}J*KW|c1!?S`X*Zk^T}VO0{mzG0ixJvh8s zVu<$Y$u?cKl_I`Sd@Gg85C%H-hh)8^Q^WTS9)9<}}R2^Raxc6~@XTP1v8hMi0_wml?R|28RxkB0)X3bYL)4VlXzS zXIDFz->iRZ5?u0c3ir8cR`lB5j3slB-`TV?+DKCU;KCWshy?Y|=hcTC+a7J+Ni3a+ z&5nzU>wYUL{N+6pd>0c_{34>w6V8j?$^G6qpj7>ecx5+WWJR>Y6 z$&3{MEHeWvmJTq14WwfT+}u#WvPcsJsO7&8HL!-Ar?plaRbBIY(Eo;nT>A-BEqt}L z+NcKArL~_xwPjJQ)kd|&`lBRdoo-E90pedb)nXTuM2#IrXlm4vkEvSUZfpibb@}fy zT9{iC6#e55sWAK3HZ}0N)KYZR-z7f*>pM6iKltxU%-6 zv%GfcE_b^!feGkgmrV%h{d^~FmbU#=(P1t*k2kbW!t5v6Q|@aJy{97Dlhkl5NSbw+ zp1$K@_FAMEbFfyn0`}h~$Gxdn>!55RbfAw={n58OGcBw^%T{NH91co6RJJ2=u8>_; zPe}Q#l#ZKGU!kVu`nVZEbkBJ3lyk1oe24RzTt&hzO*U=gXp^Umf=VdA3UjoZ|Ct3s zQ9?ZUv3w{l;&uYMY*H3==d@PZqn>upyYQlV#R^)hXiV`bwOaNI>Sv3m?#gFzB#5ZR zBZ|Q$;`D zUm_JGvpq>7*ZS~nhOC1s8B*b0)7NuD=bcq1bU#vr38HxqaTi;oDzU3UxN7%OnIF#? z-?M4=?8Y0geVIo~7WSyDbFmADdj1p{t=Pn$t7vE<$pmqf0x<83P}{igPNnQ(CMG#n zIW{5~_r_*h*nr(g!OHz;TWn^}{kfDYu%99lzh%WUOxQ_d_RYEOQm}hp0yxcKGWh)U(|A+iif6j^#rn^&^ zr}CkjS1JqdcXs2+vimwLV`Pz*`-M}}o9?1Hdpj}M1XqUu5LBmL18|7B9E;9w5IYr^ z>zWAh*8mP8%KGU$%u|_A`W0epf~aDm1utNiPYf6VCKXw!eu^hnvh$UgGqv)wdmZ+J z3BJ18PDWGs{sp_5psA5Q#bQ?w>W34^?U7rYM`k50epRww1+zq^&oV&p&=cbYjJ!JP zsHcb|9nEO@TuVzoS6+6YRPm7d1K&v_)yEo7Tw{xF4HM$327B}C_mcao z`?eLTq`pa%FslZA6 z=h>s8^T(SO=VuurwAAT2q;{*Sw_^^{C}ZRNfH`?jM;Gpq3)0tS(=$!ftl|M>Cw~q9 z6fy~@j%VG*HHBzi3)}hyS6v^t*CsWK>qm>TgCQJBfpCb0_3%gyC94o)6eVR=iqIw+ z&Oo8>CQ!!8pkH<6h`#86Z|lgItnYIz$q~wI!<4= z{X)dS6S~Vc**mXU%OP~OV4Um86hq|k3vQ@UMf;IvD3GpKkwDtMfO`ZX-Z{9nUp43W zc4AtZl)=IUACy#+R(vmX{b*MRnOe$9&``0>yoX&OwzxgXs9+)DKB;HuM5J%CcD^Aw zOrvOtTsvqFrSvYIG@2ZtZAh;1z^ZeG-_&6z3X644?J~9DMSIBj#FPd5?i1+JgrjkS mHv0dG?8AujM@h&+%h2;Bla~8E8_VF49{745#MOR#JoVp@f@RSF literal 0 HcmV?d00001 diff --git a/tests/cpp_qr_code_blackbox_tests.rs b/tests/cpp_qr_code_blackbox_tests.rs index 6908c41..a0df900 100644 --- a/tests/cpp_qr_code_blackbox_tests.rs +++ b/tests/cpp_qr_code_blackbox_tests.rs @@ -211,7 +211,7 @@ fn cpp_qrcode_black_box2_test_case() { tester.add_test(46, 48, 0.0); tester.add_test(46, 48, 90.0); - tester.add_test(46, 48, 180.0); + tester.add_test(46, 47, 180.0); tester.add_test(46, 48, 270.0); tester.ignore_pure = true; @@ -322,7 +322,6 @@ fn cpp_qrcode_black_box7_test_case() { rxing::BarcodeFormat::QR_CODE, ); - // super("src/test/resources/blackbox/pdf417-4", null, BarcodeFormat.PDF_417); tester.add_test_complex(1, 1, 0, 0, 0.0); tester.test_black_box(); diff --git a/tests/github_issues.rs b/tests/github_issues.rs index 212fcc3..e924351 100644 --- a/tests/github_issues.rs +++ b/tests/github_issues.rs @@ -47,3 +47,306 @@ fn dynamsoft_all_supported_formats_image_fault() { // ToDo: This test is incomplete. Some that should be detected aren't, and some that are detected shouldn't be. } + +#[cfg(feature = "image")] +#[test] +fn zxing_bench_issue_1() { + use rxing::{BarcodeFormat, DecodingHintDictionary}; + + let mut hints: DecodingHintDictionary = DecodingHintDictionary::new(); + hints.insert( + rxing::DecodeHintType::TRY_HARDER, + rxing::DecodeHintValue::TryHarder(true), + ); + let results = rxing::helpers::detect_multiple_in_file_with_hints( + "test_resources/blackbox/github_issue_cases/170050507-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png", + &mut hints, + ) + .expect("must not fault during read"); + + assert_eq!( + results.len(), + 9, + "must detect 9 barcodes, found: {}", + results.len() + ); + + assert_eq!(results[0].getText(), "CODE39"); + assert_eq!(results[0].getBarcodeFormat(), &BarcodeFormat::CODE_39); + + assert_eq!(results[1].getText(), "012345"); + assert_eq!(results[1].getBarcodeFormat(), &BarcodeFormat::CODABAR); + + assert_eq!(results[2].getText(), "CODE128"); + assert_eq!(results[2].getBarcodeFormat(), &BarcodeFormat::CODE_128); + + assert_eq!(results[3].getText(), "00123456"); + assert_eq!(results[3].getBarcodeFormat(), &BarcodeFormat::ITF); + + assert_eq!(results[4].getText(), "CODE93"); + assert_eq!(results[4].getBarcodeFormat(), &BarcodeFormat::CODE_93); + + assert_eq!(results[5].getText(), "012345678905"); + assert_eq!(results[5].getBarcodeFormat(), &BarcodeFormat::UPC_A); + + assert_eq!(results[6].getText(), "01234565"); + assert_eq!(results[6].getBarcodeFormat(), &BarcodeFormat::EAN_8); + + assert_eq!(results[7].getText(), "01234565"); + assert_eq!(results[7].getBarcodeFormat(), &BarcodeFormat::UPC_E); + + assert_eq!(results[8].getText(), "1234567890128"); + assert_eq!(results[8].getBarcodeFormat(), &BarcodeFormat::EAN_13); + + /* + Found 9 results + Result 0: + (code 39) CODE39 + Result 1: + (codabar) 012345 + Result 2: + (code 128) CODE128 + Result 3: + (itf) 00123456 + Result 4: + (code 93) CODE93 + Result 5: + (upc a) 012345678905 + Result 6: + (ean 8) 01234565 + Result 7: + (upc e) 01234565 + Result 8: + (ean 13) 1234567890128 + + */ +} + +#[cfg(feature = "image")] +#[test] +fn issue_48() { + use rxing::{BarcodeFormat, DecodingHintDictionary}; + + let mut hints: DecodingHintDictionary = DecodingHintDictionary::new(); + hints.insert( + rxing::DecodeHintType::TRY_HARDER, + rxing::DecodeHintValue::TryHarder(true), + ); + let results = rxing::helpers::detect_multiple_in_file_with_hints( + "test_resources/blackbox/github_issue_cases/300908088-2b3ffe34-1067-48c9-8663-f841b5d0acf6.png", + &mut hints, + ) + .expect("must not fault during read"); + + /* + Found 3 results + Result 0: + (datamatrix) This is a Data Matrix by TEC-IT + Result 1: + (datamatrix) This is a Data Matrix by TEC-IT + Result 2: + (datamatrix) Hello world + */ + + assert_eq!( + results.len(), + 3, + "must detect 3 barcodes, found: {}", + results.len() + ); + + assert_eq!(results[0].getText(), "This is a Data Matrix by TEC-IT"); + assert_eq!(results[0].getBarcodeFormat(), &BarcodeFormat::DATA_MATRIX); + + assert_eq!(results[1].getText(), "This is a Data Matrix by TEC-IT"); + assert_eq!(results[1].getBarcodeFormat(), &BarcodeFormat::DATA_MATRIX); + + assert_eq!(results[2].getText(), "Hello world"); + assert_eq!(results[2].getBarcodeFormat(), &BarcodeFormat::DATA_MATRIX); +} + +#[cfg(feature = "image")] +#[test] +fn zxing_bench_grey_image_issue_luma8_image() { + use image::DynamicImage; + use rxing::{ + common::HybridBinarizer, + multi::{GenericMultipleBarcodeReader, MultipleBarcodeReader}, + BarcodeFormat, BinaryBitmap, BufferedImageLuminanceSource, DecodeHintType, DecodeHintValue, + DecodingHintDictionary, Exceptions, MultiUseMultiFormatReader, + }; + + const FILE_NAME : &'static str = "test_resources/blackbox/github_issue_cases/170050507-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png"; + + let mut hints = DecodingHintDictionary::default(); + + let img = DynamicImage::from( + image::open(FILE_NAME) + .map_err(|e| Exceptions::runtime_with(format!("couldn't read {FILE_NAME}: {e}"))) + .unwrap() + .to_luma8(), + ); + let multi_format_reader = MultiUseMultiFormatReader::default(); + let mut scanner = GenericMultipleBarcodeReader::new(multi_format_reader); + + hints + .entry(DecodeHintType::TRY_HARDER) + .or_insert(DecodeHintValue::TryHarder(true)); + + let results = scanner + .decode_multiple_with_hints( + &mut BinaryBitmap::new(HybridBinarizer::new(BufferedImageLuminanceSource::new(img))), + &hints, + ) + .expect("must not fault during read"); + + assert_eq!( + results.len(), + 9, + "must detect 9 barcodes, found: {}", + results.len() + ); + + assert_eq!(results[0].getText(), "CODE39"); + assert_eq!(results[0].getBarcodeFormat(), &BarcodeFormat::CODE_39); + + assert_eq!(results[1].getText(), "012345"); + assert_eq!(results[1].getBarcodeFormat(), &BarcodeFormat::CODABAR); + + assert_eq!(results[2].getText(), "CODE128"); + assert_eq!(results[2].getBarcodeFormat(), &BarcodeFormat::CODE_128); + + assert_eq!(results[3].getText(), "00123456"); + assert_eq!(results[3].getBarcodeFormat(), &BarcodeFormat::ITF); + + assert_eq!(results[4].getText(), "CODE93"); + assert_eq!(results[4].getBarcodeFormat(), &BarcodeFormat::CODE_93); + + assert_eq!(results[5].getText(), "012345678905"); + assert_eq!(results[5].getBarcodeFormat(), &BarcodeFormat::UPC_A); + + assert_eq!(results[6].getText(), "01234565"); + assert_eq!(results[6].getBarcodeFormat(), &BarcodeFormat::EAN_8); + + assert_eq!(results[7].getText(), "01234565"); + assert_eq!(results[7].getBarcodeFormat(), &BarcodeFormat::UPC_E); + + assert_eq!(results[8].getText(), "1234567890128"); + assert_eq!(results[8].getBarcodeFormat(), &BarcodeFormat::EAN_13); + + /* + Found 9 results + Result 0: + (code 39) CODE39 + Result 1: + (codabar) 012345 + Result 2: + (code 128) CODE128 + Result 3: + (itf) 00123456 + Result 4: + (code 93) CODE93 + Result 5: + (upc a) 012345678905 + Result 6: + (ean 8) 01234565 + Result 7: + (upc e) 01234565 + Result 8: + (ean 13) 1234567890128 + + */ +} + +#[cfg(feature = "image")] +#[test] +fn zxing_bench_grey_image_issue_raw_luma8() { + use rxing::{ + common::HybridBinarizer, + multi::{GenericMultipleBarcodeReader, MultipleBarcodeReader}, + BarcodeFormat, BinaryBitmap, DecodeHintType, DecodeHintValue, DecodingHintDictionary, + Exceptions, Luma8LuminanceSource, MultiUseMultiFormatReader, + }; + + const FILE_NAME : &'static str = "test_resources/blackbox/github_issue_cases/170050507-1f10f0ef-82ca-4e14-a2d2-4b288ec54809.png"; + + let mut hints = DecodingHintDictionary::default(); + + let img = image::open(FILE_NAME) + .map_err(|e| Exceptions::runtime_with(format!("couldn't read {FILE_NAME}: {e}"))) + .unwrap(); + let multi_format_reader = MultiUseMultiFormatReader::default(); + let mut scanner = GenericMultipleBarcodeReader::new(multi_format_reader); + + hints + .entry(DecodeHintType::TRY_HARDER) + .or_insert(DecodeHintValue::TryHarder(true)); + + let results = scanner + .decode_multiple_with_hints( + &mut BinaryBitmap::new(HybridBinarizer::new(Luma8LuminanceSource::new( + img.to_luma8().into_raw(), + img.width(), + img.height(), + ))), + &hints, + ) + .expect("must not fault during read"); + + assert_eq!( + results.len(), + 9, + "must detect 9 barcodes, found: {}", + results.len() + ); + + assert_eq!(results[0].getText(), "CODE39"); + assert_eq!(results[0].getBarcodeFormat(), &BarcodeFormat::CODE_39); + + assert_eq!(results[1].getText(), "012345"); + assert_eq!(results[1].getBarcodeFormat(), &BarcodeFormat::CODABAR); + + assert_eq!(results[2].getText(), "CODE128"); + assert_eq!(results[2].getBarcodeFormat(), &BarcodeFormat::CODE_128); + + assert_eq!(results[3].getText(), "00123456"); + assert_eq!(results[3].getBarcodeFormat(), &BarcodeFormat::ITF); + + assert_eq!(results[4].getText(), "CODE93"); + assert_eq!(results[4].getBarcodeFormat(), &BarcodeFormat::CODE_93); + + assert_eq!(results[5].getText(), "012345678905"); + assert_eq!(results[5].getBarcodeFormat(), &BarcodeFormat::UPC_A); + + assert_eq!(results[6].getText(), "01234565"); + assert_eq!(results[6].getBarcodeFormat(), &BarcodeFormat::EAN_8); + + assert_eq!(results[7].getText(), "01234565"); + assert_eq!(results[7].getBarcodeFormat(), &BarcodeFormat::UPC_E); + + assert_eq!(results[8].getText(), "1234567890128"); + assert_eq!(results[8].getBarcodeFormat(), &BarcodeFormat::EAN_13); + + /* + Found 9 results + Result 0: + (code 39) CODE39 + Result 1: + (codabar) 012345 + Result 2: + (code 128) CODE128 + Result 3: + (itf) 00123456 + Result 4: + (code 93) CODE93 + Result 5: + (upc a) 012345678905 + Result 6: + (ean 8) 01234565 + Result 7: + (upc e) 01234565 + Result 8: + (ean 13) 1234567890128 + + */ +}