From 25dd60c7817772abf673e01ee0939efbc7e9dc28 Mon Sep 17 00:00:00 2001 From: John Cupitt Date: Wed, 23 Nov 2016 17:20:04 +0000 Subject: [PATCH] add tests all done, I think --- ChangeLog | 3 +- TODO | 14 +++------ libvips/foreign/tiff2vips.c | 3 +- libvips/foreign/tiffload.c | 4 +-- libvips/foreign/tiffsave.c | 4 +++ libvips/foreign/vips2tiff.c | 7 +++-- libvips/include/vips/header.h | 9 ++++++ test/images/multi-channel-z-series.ome.tif | Bin 0 -> 1128003 bytes test/test_foreign.py | 34 +++++++++++++++++++++ 9 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 test/images/multi-channel-z-series.ome.tif diff --git a/ChangeLog b/ChangeLog index 68fbbcb3..dd81b5e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,7 +10,8 @@ - all loaders have a @fail option, meaning fail on first warning, though it only does anything for jpg and csv - add vips_image_get_fields() to help bindings -- add multi-page read to tiffload +- add tiff multi-page read/write +- add VIPS_META_PAGE_HEIGHT metadata 11/11/16 started 8.4.4 - fix crash in vips.exe arg parsing on Windows, thanks Yury diff --git a/TODO b/TODO index 7715e425..f99c9889 100644 --- a/TODO +++ b/TODO @@ -1,16 +1,12 @@ -- add VIPS_META_PAGE_HEIGHT and probably some others too .. "orientation"? - -- in wtiff_layer_rewind() we size strip height by tileh, but is this correct - for strip images? - -- test data - - http://downloads.openmicroscopy.org/images/OME-TIFF/2016-06/bioformats-artificial/multi-channel-z-series.ome.tif - - all toilet roll loaders need to set "page-height" magick, pdf and tiff need to use the same page/n interface + + + + + - not sure about utf8 error messages on win - strange: diff --git a/libvips/foreign/tiff2vips.c b/libvips/foreign/tiff2vips.c index b6534836..0ec28d7f 100644 --- a/libvips/foreign/tiff2vips.c +++ b/libvips/foreign/tiff2vips.c @@ -1209,7 +1209,8 @@ rtiff_set_header( Rtiff *rtiff, VipsImage *out ) out->Ysize = rtiff->header.height * rtiff->n; if( rtiff->n > 1 ) - vips_image_set_int( out, "page-height", rtiff->header.height ); + vips_image_set_int( out, + VIPS_META_PAGE_HEIGHT, rtiff->header.height ); /* Even though we could end up serving tiled data, always hint * THINSTRIP, since we're quite happy doing that too, and it could need diff --git a/libvips/foreign/tiffload.c b/libvips/foreign/tiffload.c index ccbd9501..29fd58c4 100644 --- a/libvips/foreign/tiffload.c +++ b/libvips/foreign/tiffload.c @@ -328,8 +328,8 @@ vips_foreign_load_tiff_buffer_init( VipsForeignLoadTiffBuffer *buffer ) * * @n means load this many pages. By default a single page is read. All the * pages must have the same dimensions, and they are loaded as a tall, thin - * "toilet roll" image. The "page-height" metadata tag gives the height in - * pixels of each page. Use -1 to load all pages. + * "toilet roll" image. The #VIPS_META_PAGE_HEIGHT metadata + * tag gives the height in pixels of each page. Use -1 to load all pages. * * Setting @autorotate to %TRUE will make the loader interpret the * orientation tag and automatically rotate the image appropriately during diff --git a/libvips/foreign/tiffsave.c b/libvips/foreign/tiffsave.c index bfbc9f26..7e2db098 100644 --- a/libvips/foreign/tiffsave.c +++ b/libvips/foreign/tiffsave.c @@ -475,6 +475,10 @@ vips_foreign_save_tiff_buffer_init( VipsForeignSaveTiffBuffer *buffer ) * * Write a VIPS image to a file as TIFF. * + * If @in has the #VIPS_META_PAGE_HEIGHT metadata item, this is assumed to be a + * "toilet roll" image. It will be + * written as series of pages, each #VIPS_META_PAGE_HEIGHT pixels high. + * * Use @compression to set the tiff compression. Currently jpeg, packbits, * fax4, lzw, none and deflate are supported. The default is no compression. * JPEG compression is a good lossy compressor for photographs, packbits is diff --git a/libvips/foreign/vips2tiff.c b/libvips/foreign/vips2tiff.c index 2e7396c4..8cd9f744 100644 --- a/libvips/foreign/vips2tiff.c +++ b/libvips/foreign/vips2tiff.c @@ -198,9 +198,9 @@ */ /* - */ #define DEBUG_VERBOSE #define DEBUG + */ #ifdef HAVE_CONFIG_H #include @@ -921,8 +921,9 @@ wtiff_new( VipsImage *im, const char *filename, /* Check for a toilet roll image. */ - if( vips_image_get_typeof( im, "page-height" ) && - vips_image_get_int( im, "page-height", &wtiff->page_height ) ) { + if( vips_image_get_typeof( im, VIPS_META_PAGE_HEIGHT ) && + vips_image_get_int( im, + VIPS_META_PAGE_HEIGHT, &wtiff->page_height ) ) { wtiff_free( wtiff ); return( NULL ); } diff --git a/libvips/include/vips/header.h b/libvips/include/vips/header.h index 5affb207..1ae81011 100644 --- a/libvips/include/vips/header.h +++ b/libvips/include/vips/header.h @@ -133,6 +133,15 @@ extern "C" { */ #define VIPS_META_ORIENTATION "orientation" +/** + * VIPS_META_PAGE_HEIGHT: + * + * If set, the height of each page when this image was loaded. If you save an + * image with "page-height" set to a format that supports multiple pages, such + * as tiff, the image will be saved as a series of pages. + */ +#define VIPS_META_PAGE_HEIGHT "page-height" + guint64 vips_format_sizeof( VipsBandFormat format ); guint64 vips_format_sizeof_unsafe( VipsBandFormat format ); diff --git a/test/images/multi-channel-z-series.ome.tif b/test/images/multi-channel-z-series.ome.tif new file mode 100644 index 0000000000000000000000000000000000000000..1aa66b0fb368316aeb4f2fffdbab9682aaa2e2b3 GIT binary patch literal 1128003 zcmeEPb(|c>(XClJ`Gh8!WP#Zh*pe*sS!R}HW>OT{Qf$eNBqwp0nb~1>m=lMYnVHdH zrY|sGS9euS^-k~Y-bp+1>Z*R)=~u5_RrkEUy`LlfkrgZ85CE72GctgNLvG3L%reGs zM^=Nn=O?*JoiM6e3QvO?z_bs-jt4$6+tK&l;S^J|U6p30%*?XgSW|yZwkI^hzO7TU zy#%kwW~ttT2)mPHi*YZQ3DCMYyO4Nfvi&}H=K57PtT}6Bczd(p$Zr~1yli;&+Ep7iths5^$kO3WH?3Rk$YsOVZ(Ow=t8PZ?M(4#o06TmeVDeJ| zrk?Iz>wf?<-T|=FO#r*>3$W{V0CsyCz#eA+?3n}1dMCi_^#F7C1DN++fPJ41u>Y9= z2fBF&-3f5W27m?o11$U=z@g6oSbP@1QfJ`d?*cgDW`Ls(066;l0LMNPVB~Co~ zc;znu?sy@F9G=IRDh3t4B!(F0Ql4rfKUGl;Il6Q`23{+Uz`T;rH=!A<$(ZSTMF>? zUjuyer2yZ)4B)%d0lxPMfFC>v;75l8{P;HjKYba%&o2k~}v$UdZc)P0BNm~%k zlF%(+48z9LGluajt!NwGuBvqh3io;rxu;)a7%~!iQNX12P2qvOOppc!Bn)Yg6>TIU z4IZXo9BLDG=q~9}r{OKyM)H2N75m`nc4@IamP1DU?NUBcG>^1glaxmJ8G%$#Z@?Y6 zb=c9*SI{f4%psTnYm1bXdTmqr0}97NA!ruz2!&U|GRZEWS_>J|D#JWzD|VPcJuJoz z0)-4_6r@v3aZC}hI8nkzo)ISdOggwYOyR4D5x9rIP)CwOa2Ze+E7j_>G=WwmI&Z@@ zH^J)?=P7rGv&Uy3l{$%nY8PRpfzR7vs_6U)sa*yZRY5XOZZUGA^0Qo54CPx+nJgJzXR%jF#K^mCuF7}Wf0elj*sv*Lb^@`cNy7S+j<1(yMeg{5(RDU*)j4U;WWP6|7byr=GFuC$6sRmz-V z1UevxS8uFXhP2~AIsTBdQSLl*@L&>PAd zD^d%2G_A=}ne0AQdJ5 z!ZD*kRh}xi3~+?7JTJ{@SsQk#k1)VNnIu?%8t!}4!*^++j6s0Hh@gZ9NQrV;d?D`T zOf&>oimA*K5Rshl>Qo8nC<>n9($SzQ7xRP^fFn3@s}Ifb7D^VExk);Ud6Cf7WftS8 zSCL-G#Zs3eq8cYWUvdIGO$HSw>?94mYADZel6I0Q$1@Cr@Hvg53smK4g3ADhG3!Ww2U#Y(U_h|EtI{JB%V=T zSEMmuNm3b;obehDqRbWJEu)+hUR_fHDyo>uyQ!i;0eYU00&ql>BxVw&WsG@^#`H`& zVQfq^hEGCdS*Zo8vxlj?Z&E5_S;d6TrBjg!D6;7@C>%2yjLReyQUH#KlEh4+w2U#Y zVM_ZhdbUy)8)~xi#(E5^QY%m6Rcm5SG67o4xKvbxKmn1D!V1`t!V#mwqV5n$%K%3R z%kzko`GMCm#=QC=rCs#wLa8=%WZNdHs7{lRsVYNOb)U*geD%@+c%1kmnnE2RZV;V% zi9$%Klt}62MA*n@6Cg*zVFk+vAXYBh^I9g@0k6Wfyo;JG)o8;+lNQo>5)@VRutL>! z>S$7_l|kfb`E1glURzprqHvh!GTUR*t=2-0xHrA1NocZJy1Rm1|?!==(CAdr-5 zR+~LUd>iRf(JMnd*CyrH7Jbwk#8NA~ zjiyE|e&Eg)=72d+kpsI}459^8b(*-V9-8pa;Y8S2@CEAcc_-TRImyWLIdkyi z0xuz~#S;}=sTbKjpKt&E5U||lJ0~I-Npv53MaFB&L zU=CE|z`+*VqXT)4Z{;2YJPLmW=?e(47-D;L;BNU&hjfeF33C5HB?2FwqJk#_!DU;w zu>$T8KR-}h@MWoW9cY3rcVI!+$a9jo`xE2= zr{#onwrn#8N|&`@0bifKHs-e3IVaY}3%f*~FU(2epbuW9fUJ-~W6y2t0A3YeS2#&= zL42RcYaDd;?4tvVMvolJ{=rL58S<)Hu%i#OY6T9&7v?t%|GS!Q%qM}a;54>{IB=-N zAUbfEg*jjjROG;73v<96sK|jO7K7-(QVVmy9H_{F!^a+Z+|riDMawF5!2jh($Nk#w zsV(i;h6Oh`)N_Pm=^S{mL6tolIp6epq|py zj@;#IJUAsZZZrpuN<|(>zqm)&R0|8e9}=!Grx7%ZGhS0?FmB8akez5Yf7}dYeH!L* z1x2btJwa1`q7?PqQdSt#g9AsWA}12RDhO%C%;i*d*jF)C6-q-R&5;EMg$abDVxS@i z==R33+xR=jvDx<7a?H3R-v*uI-g0|uJa*iXkGsuhf&MmqDiK z*@2OC;D4XH3VymqQWW}KZ$3h^y3R4dmO9{X!ab5V(muR{i0H6%(6o=TyhjI)PesmT zeteD?zb}5JG%TLRDy!o)&{XW8i90Oo*@5M$$eGL?3V)V+NU2(=y4>j~9Q2XP(-l0n zM}Hj(1NhZ(Gv(tlzJZ8E6^csXzk9w$sH8Ar3miD9uaWn4`UD<+a$h6w>vS7#4h)t9 zr&yQ+=0HUboN8eXm;)6#aGJ#+I&iv$IbaS{;9LuHz#OQ^ft42KfH_c+1Ls+o1Lihz?v} zVGfuB6*+LBg*jjjROG-#7UqCCP>}-{TMVKDmspqs=0HUbTxwwsm;)6#aG8ZUU=CE| zz~vT$=)e^g=72d+kpov+m;>fOMGjnLVGfuB6*+LV#UMIxjfFX24pij8wHD@pIZ%-U z*I5jr127{4XaIm)vOBYkG2D^Wpzireu2LtAs+Pjjpyo8oA>04y*^a*V4u`*-?W#00 zWoDM`#+rlHXL~}^&(G%XknJUS$847BJ&3S7Nw(PUH50P=dt?_9kGt2-eCnC&SKYAY ztdZfhx81U42XhSwp#X=L%T;nizbZP>8prcEPDhd14{ZnYzq4PU=; z)q1SD+4B#DY{4%eTl7N64!a1lC6ggr`Vq*M-3Hl_he3AKFCjbTMUWkLF=WS2fo%Cl zAv^K@ke$33vQzGY?6em{cE%-;oi!D*vp)veiU&ZpatUPT{R*-RUIN)gmqK>QG{`Rf zIAoVU5V9+mLUz@!A-m?KkX?5fWcQd3+3HU~w&p>Q-EcT$YkvdTy(v?1!VW%5wZt-3bF@11hR)50og-;2ie140ofz3gzV8f zLH3wWL-x3bLiU6sA$#KQA$#&GA$#gokUf28$e!^T$e#5u$ewc)WY7HrWY2pQWG}cH zvKQ?F*^565*-IY|*~^cH>=l26>{aesUwsW^uiX{0*L@DMH#`EeHys1noBssaTVD;? z+pmS}o$hMx{5)juek5e?Jr=U}{TZ?kyauulT?g4mc7yDrUx4i6kAm!z$3ga~zd-hx z*FyHWRgisQcgVi@MaaJVXvn@g0@>I83fVVa2idpo0oixdhP@8@d z)Moq(YCF9dYP;M3wVAV_w%gaCw#O5pw%5r}oArNCoBbB3&0Pz%eda)I-)}%||0hB1 zz*C@h(7&N}$XlVdU>(#J&4t>b--O!YCqr%NsZcxoKTtd3ZBRSvUQjz`9@LKg7Su+b z0=4C*LG6V9LhYotL+z9sp?2CnP&@tG;7qlTd2sjq8F0UTp?()Wab3CM)VU|EyLsVh zH*Z|OYV)SK%N8wJv?LVmIcN@K7K7+O&B7co2P$%)Zeb3X0~I;Yuoy%Knidny0r!7L zn0VzhTN3stEA@?$sA8Kc_Go+U))s_2Zs-<(X_R!H-lMGZfZi%qY*WP^y}fNuDmktI zY>Sf4b9$6@9?)B*ifyXcqwQ^nwjkVbL$`o23>#0+7{;@-qHTD)L0H8S0b@AzczVV# zo~0FS!`oH0PTGQSmV|BrV;DA`o-vGPX+_)cc2%uAP`KA~$UXfU!;q2CivlLCZwe3O zWr8#?AYn*@tY{+R~Z%5GZ6YqadAPierk1#fcI&@{BOqXVSsNVG3VGjKDnvhB}fQg3Exq zSgBU0r3thm(RmxLxd~pEI8V7doIO4RsnkgnRJ#Z(4Se1XQ$^=bNbNGPs0xyKdaLAn zp}``2;h^bRSglg ztXGV{xKqGZ8s#4|@BhUdkyn18BGUQcl!BCY1I>3Wt7@CSI4N*i2Dy}eDNC7x3N@#k5 z)H01r9l9u3fZkBvSdm)DqiIc+%4GMc(vy%%t!;Df6W z2rdI0AuP{Jb6Tb`cL^sz&q1u<#}mN%i6F@eS`rH$|S)8)NtRU9==NpWefro zMg%1^KuVO$;tO#vXQCm%QcPu@fQaOTSEouqM^W$;myQNixtJ%U035-ITYYGbw@|XU z%uUi+%!`DsF0&X%y^8cgE|$6+5!E>1`H~ahX)>rdVJB(eRYQ4(leCjeIi6t{gwJUd zU7#vY6I=#3j9It(&>U^nPB~quU;}9c32+6$0u-q^8d7w)q7N>(gdtA#K?J8k;4%>k zh)K?P6y0xK&<7pa4BPMQVQ%93ZtqdYh%V(1Y_1e<16NM9Xg-(Mq{P+-nlnie4Gw zxi%@kw&>ZF#eV*vS`w29!sVvcG)K+yM4>v~UyQR3m^geuD@x?Nm z?lE?p4$STl`Rv*54@HhyNQLw{kzUp=&?FDCwZ9IyJ5X1GcNNltL{wxb2q(hEf-g{i z&pXkk&q+p}&zXZC7kCL_EuM(5o_j!#kOVdLqQ;^h4$MtOo;%h*d^I3^x=Rtg#)Z7l zqOed)n}NPL;N4c12Z;Bit}ViH%h9!Ib>9vis_N#G1cPr^s_x!OuP(d0Bx1>C3)CQdCQaQj^A( zzB>@E&Hu9Wdm$<|4Okd2qfB&CE!qriB?tDk7(@s5voHtDfr=d1-@+U)2P$&l01I=# z9H_{F11$#8frBi}0dt@t2M)H_9v#SYd@J`L;8FN1NMAsR#Sq)019!`JI;30VPLTTt zDiQeb6cs!f2rk>YjU8~;QCv~`t*Ns~NpS}I<-q)|;eP!EO+KH%{P}_6f-g(0>p&B1 zxdRKjMxK+z-Jc*2I4vinvt^q(P`a!I3;6o7tG1;gO99k+eIAyS#<=l1 zz&C+k4xABIe2VXAzobP)>pSdDBY2MvDx*hr;D}V@fy~{?AIBi;)3&OrU;~Lz?ZV%v zdxXq0$c92e8XB7eN2UV3c07LY;aAcXX?v9_EbwJ&(hIlY=uR4~H{7!WWG6e!?)qLWUm!~^u+FC3vJ8)Dg@<95)``_SSgpxFa8Tr!|@b6Vrj?EVe%f z@?Ku4Cs8khOw+RiBk92ZK6e%Tbd97a^t;}Cgl2V}V}dPpz~6*>ByXgBcn1;DVdaZs0x5lX&gNX(!^$6O)l6>mIoB!fU}| zH3$NTpT5dXB#jl8ZEXketK(+M$7Os25sNAmmBN4be2q{^VZ;_Va8h3*@9XplJpAOo zM&8%yHryN-EC)`pFbB+miX1rA!W=LMDstd7i$QeYbPIF99H_{FGc3#jbD$yz&a@ar z2hOrE2h4$r95~y;954qea^M^bbHE&^$bl6WgXqAy7UqCCP>};GEzALPpdts(voHtD zfr=bB-(nCQxWK|3Fb67f;6e*?z#OQ^fr~860dt@t2QIc4L_Xyk z_xgs5&RoChhBar646nWImNgqUZC85q79l31y`i-mBV-?)Uzd-H$*Fx>WRZzQlcc@+RMW|i&XsBH=0<|mu3bm_W2eoVO z0ku_oKYPUQVY8#y;oBj^9Ti*b+ z``#03x9tVB`+o&$4}2Wd9()4S9`X;UJ?xE8d&C;3J!%%z9{p9QJ@)ZXd;Ez|d%{1V z_M|sK?J3to?P+^M?de~G+B2U3wP&9Mwdec`YPY``YR|s`YA>7(wHJLIYA<;r)LwQn z)L#C7Pr$X&3r$gd@c^1^Codfk5?gw_5Gd$^#jg@`aw;oAN)S3 z&))>~g@-_W(T|~i*mI%2WF^!OcR%RM-VgO7H$(mC`A|RRCs04`cBmhJ9@I}5g8GRc zfcnX|LjBYQP(SUbP(R~&P(SN@sGlMK47^_BO5`uPi?e!|8 z?)fv|e*HrIE_~v;a>c20Pg-~L!qaZvxPH~>tmTC!+KDB5$-9LOvN(Se$UIbaS{ zL@CYl58|Bf*6%4xPF>`_+g8zWK0HdXA=_S&s22zT7jEdbLf z={&thS?2-0RjSygiamOJ+n!W%Tmje?C7tK=DC<0+w@MY;RIx|f+YW6(xZ{Ry0b>|8 zo}Mv`XK6*-@OFc+iX{TZaO&~&jA1-WE82#)t7@IJ1>r0S-2%oiY&<<<7|+s*w&Crn zT6dsuuji0^`Zb0jBcT@sOj_R*9>~iCX<$IYkOo=NMk3PSVG72fHerYEk}h=`-lA;kH_kTIi*n6cLLPC2Zsw zVY1JpgNwryzKR%udk745Bsm0^0d=ubtxii5Xhov)He7QPye@H`a(6g;dB&YzIlWnfViB=huE$@fBmpH%XvI7|D6z9J42KvM4(u#f_fj}mTjWHG># ziYaP^MsX3Of$8pI59txWCsC^!B5YZ&7=dx8rg;!^yfUxWVn`=Mb`&!NO{T!kBn)Ix zojh4^8K78L8t0cX=@{NH*&^knuoKC9>Tc#rtB6#k%qd2o19Euv#)@UgtJ;F0DhYIe z2gfip6;&Fdh!j*@VX}|{a9EVk^aQD88kahBQLq5Lp}esowU9^Cnk<#c?o*{FA(dL& z=H4g1A+#r8Uez0DC>uU}}WO13Bq_db830+-gF^+l_>4jV@bvYucal-Q@C&1HW zP;tUe(!i^R@(d?wCz*0Q!!QV+(|ykGH!9Jyox{pdUlG`9PbisBV_uJaoJ7tXX#-oOL$d-2)YVJRETm;cy-DI zEU4)eju{QA@^ryvfFp$Ed1+3|81ov9>6z3***i(%8Rd0F8UvOjl`+W~ukj$tTru7< z$~ocHH6@^;imAMtDhd>!=LsnQM?^_tCQ(|(nAd1b&!iK^#zbTIBt({#TA(_6n9BPm zr81UPOz2!X6`6n{n?8fWF{8n_Oj02Q;D{(m%p^+781ovYwC|#4D`l~vCOdDe$FM53 z@-$wxCgvm)ptX!kMMVe{5cw#qfE_6uF)A$T4w1ABaD=ctk4Tvxcr9bhs~=L@Mb9pj zYC}i1ZK8_mGzpoiGGtZvsjS3TFCBo#i7%ol)Dhwa(W#dxgrrJ|lwMARjeIr%awHs9 zuzUbw<+44mWr7{>DqPFEsM%7DHcT{WA)O~dQAH0cR9&ZzCY4$lM4pzOdZDjLdgSae?W5_`2eYWj5Vo>^L2m-68VXv)vzx9J7!L>2o5ztX-f<9%O5O z9dLJ`t_1HYqy>qn$WRbYgpCDXp#GkBqD`NZj69z+2R|}xTI z4(w-P4wwTKIk3NlIbaS{459-ES(pRnKt&E5Y_UB$kmvYT?m@t# z@K=z&fDnrzwnqoLhQucRx|_9|6a z;LFscmtyjf9_pImEpmV?_X}Tx8;G}Aq`ImqD4;ZbhGIhW^Nj&h8iAA&C^qb9&n_oHq6Z{To7|j*B2A>8M!ek&%I)+J|k=-0PIu$vQ z_*FqjD`qaIs>8mDsj5&K8fgwMILFt+NE*adTdQzj{HBk;vx@f`h&_%OcjVikbKF~Q zZ;i)}JMwXNTBA8IF&#M0V*7I-@8y+x67@33G(9^ok`DYYbyvYp*GP&&zw6CMXja!b zCfHI3{7tw=@UxkKU4at|q03ssjp9fgBFa(TLf$M)#21L86QPTWeVT9Cpt5xM8+85Ymj zV=FjtLMn155%>>&lL!`z|9XX#8`SED_y-M9HG}WycR50gCKzT>8spC(pX{H)^-5DI&P+XT*fyLv8X~(Dg1ZO z*9esqMr?rtC-pV*zD}RO!%yyOh7(@q7 zw=f6Hfr=bB!@?Xe2P$&lOp8Hu;4BMsz#OQ^fwL{l0dt@t2hOoD2h4$r99Us7hz^`< zVGfuB6*;id!W=LMDstdF3v<96sK|lyEe6qn3oOh5bD$yzF0?QQ%z=s=xX8jBFb67f z;9`qGbl?&TbHE&^$bm~O%mH(tA_p$BFbB+miX6DyVh|m;!onOd2P$&lN(*zq9H_{F zt1Qd`bD$yzuC^FN2d=R&2h4$r9JtoP954qea^O0PL399SWB?5Sa7%V)mNAAqvKrJq zKgm_~<=L)EGgD?}*>0@4_usNTq3P$>H$N@gOYrU4 zEY*7uVRw>jvEOSZ)HlC0yO4O?z446Q&s@LihBar646nWImNgqUZC85q79l31y`i-mBV-?)UJE4A`4N$+|{!qW|dr*JC zGob#Uv!MQv4C)Vk7t|kqGt?h>0MsA#eW*X?nNWY+*-(FiGw6x$hWe9lf%;Pqg!Tfs~>Tha7{mt)#`dc?a{q2W9{T)As`kl{(`ny*`{k_ik_q`wLAJ`1_ z56y@AhkpX~kKPXTkDmwiPYyx-Qy+l(XKsc1=N3Ty^FM|97oP|9FP{(fuTFyc*FFgK zZ`=p!-&zRuZ~qMH-+eyRzkdPLf4BqGfAk@!|Kz?<|Jfp_|NQ4r|K$sy{wrtjZ-$}% z+Ydwi_xFSP9}k84pMC-Lzq}CYf4d0k|CkK*e|`k&|92bI|8p4B|NBd*=P!arb}=;S zQ=rlKC^TC4hsLDE(AeQFXiR=FG^Snxjp&<*y#b#*kuVccKsDJc6$jl_P7)p zdrgDJtdB!u_5-0YcPTXH{Tdqkz7!h!Uj~f>r$ghQPe9|42SH=O;m}z48)zK*GH5Km z92!e!K;!UFLgR=BL*uAr&^Y?H&^Y$x&=|P_8q3`e#wkZY^QO7W z7A;w{BoysAXbxl+gXlob!W=LMDsrH1VGfuB6*tDAdd4uGr4?<%+f}tr z+JbPFgl++27&e}sF^p$vMceRpRjoTvxYu*YJ^dQPkde@f0w%3*3J>IEf;2E7VMv3l zXd@A6@Gu4AP@AwrcS)Bz4R6sllJ}#n*auIyON;HX95U)}m-3OKd8FluYD7+GuNp=C%TF97I8RkJ-vBM1N zVKHtHC}c3BAe~~0V~U8yi4r#Qj4;_}(!s@H3SUKxz&!+pI+7fM%YeFAsaB_@3A7^7 zc^j^|30{{tPq{msJw5}e)JYUny9g@{eBKUIMdwdQ?J}^a3X*wxtK@s3z)vdqQ=FxJ zLthbx2_UI=3s^`2$VUk`IkFhwNyQYkLZi3{(!g|gv4`{s;FG9T4H34iSB${8Q`0<% zIbNApYcZq~B0Gv1f+ka7XA%aos7{_NxC~G%ERFL^nREu+qHS}@DE04$3afw~1;)VXfDqce;*O}#Y z%9N=Tju{QA@>IcPfFp$Ed1+3|+OSJ~gaHo9B*6mIaNnaIzDo;b3<4BJ1SK>;N|eju z3vn-Jq9MRiOl6*ch~$Jaa0S5v6sb8HQgpbY4=%WbAx`x{1gAmZG7$=hNzQl`Spbd> z5%Z2K2u^r)l>}52wJIhB6<5p?QUDH%lJaz7A{n>1RbEA)06jZJYL0h_wh=OY$hhpL z`Lpyel_k8YK?Gd|BPv8WC%igk0v6PC3df8FRe8GLGQbhS^1L*sWsG@^#`H{Tq3oR` z@r?4iB8>q{lFFFmjMsP&Wv&=+8ReYt>Y5TzQN>i=O%(+S(DQ^8fFq(LF_S1QW6Wzb zrf1R#V`HK*d=etdN-a>GJxt|&lTsPWDkgL;or+9AkxidL;h522TqdcI0&ql>BxVw& zWsG?ZQ`&dYvz4;gP?McE)?-+eT6r3;S`%}U3D8=`rJ^DP3W$6ZR=|!Fju;gdb%#h= z1~@`ko=2q254@H!=G6}=?V@KFO0}UQ+cr@}b((}sRT;9X`&3rqtCtSI}<>TMVKD zdsvtQ=0HUb>}g>Rm;)6#u$RRkIxx#(`*Ohj+Z?`-|A)NrW(YgIqplIg1*21o@#A-3 z?~dUNcQyR%9gt6bp6J2*2{f;%EYWDxR&^i`H%8{WrMSTKK73vA#WI`jF?O5|%pFHnEaJJF`kNk*Q} znS&n}cnM)Go`|rXdq9tn1U2=d#-bk%%uPj}JJvsZH6VPtOA)=sg}l(Buuw~zfxbE5 z-By+di1(zfEy8lk(Y0xH-wrz=2hU4{yPptT%Nfio&^#v*+5yVKqMur1xZe(_ODSN1 z@S0TSt}PrWa3P86{XXx+n!it{$a7c0&psY`S%CuS%f3QVR7;0alg5_5I}onT|FZOZ zAu2WvSQsy(OmtE$+6-+a2lllXLFbB+miX7PA!W=LMDstce3v<96sK|i>Ee6qn zgDlJebD$yz4z}1H9msQhEB7GaQTQuJUqFb(5Zj{zcguG=q+8@pkoyNJ5%};F6+9UT zF59||9dOrCTv7Y2sk2E*aR&S4!2GV^e*FbaKA*t+`GMksFH5cKKoe}a0}HxFo|DAg zpCAu7EhnV2Wt%xrx~v5Y`1Bi+uJ_&RMr?D-> zfkQ0@(SgG(%mH(tA_o>*m;>fOMGh>n7(@q_T9^aoKt&E5KK97tmbNr5T2`S0{x3f| z?$>rtZE43gD&#?*AC8-J6I;E51Itp8r%2)2s%@#rI)FUr^JQb~>oCsf!U1*^zYxfV z6`z<=)fvxeQPKKhoZ~w|14pMKClbFK2x-O4fQxyXri4+>wvF(;CfziRr*`7Tcc# zc`vWjlc<+Lrs>&%k#yjH^1BLtx<*nI`dx26LbJNgF~OEP;BUe`k~h*myn~47uyoM0 zkFvZ+2aZog&SZXkju^i$ex)=lp2jMx<2BG!?4XG|EbG~U<*CS-%pD4UmU~F4TBy3* z=_nlZk;~H+Jhn%F9T1lhaN<@<)q)hJiO4-i&#-vL9$UeI6H<{giNJsGn?$f!{MRd_ z+@MxJ#6M_=su}Eu18jDfOMGl;5VGfuB6*+L4#UMIxx`jDl4pij885ZV%IZ%-UXIc!R z17}&71Li}=YS(pRn zKt&FmZ!w4tTwq}im;)6#aG`}cU=CE|z(p43fH_c+0~cEiq63#$m;>fOMGjnQVGfuB z6*+L3g*jjjROG z`rbRB@yxxmU6p30%*?XgSo7?6XL~}^&u`p*akiJ>tFu|E_aMUVB-vuWmz#F`n(RX2 zarfq(-#c^tsvFjvH8Q;Rwp-S0+_ZVs>KjKkZ@hKQ@H*r-jVxX^yn5}b4I9?nv}t7N z@TQyAt#;(H;p;c9T8~v{!0iu!#`Bjz;|0Hh#*1D8jh9>sjh9V>#>+nrjaNPp8h0#( z#;bn~jn}>u8n3?$8gHBqjW>M)8gF?JG~RYNG~WIjXuR`f(0JG7(0I=bXuS86(0KoY zq4B|G(D=}Aq4ANIL*rvtK;sk6q)&bd8lQd$G(LL-G(Pt`Xnf%n(D>4o(D=$u(D>@7 zq4D*HLgSl9LgQP%hsJka361Yv1&tr<42>Ut1{yzp7&Lx*6f}PJ2Wb4_RnWNWYH0j= z7ij$Ev(Wh6!=dqqqoMJ~KSJZr?i&7j4K)6~D>VM`IcWUr5zzSeG0^zWpP=!-S39$> zg=TFgH0z&-X7iEI96A=7ll~0N;nzTO%5~73wi`63e*v01J_?#U9|z4{{sPUJuZ8CB ztDw2(?$F%pi_qNr(a@YT0?oO9h2}o5gXVtsfaU>vK=Z&aLG$3pKy&`_&|L60XfAp^ zG!I)1%_Z)_mwp+V%N`5OBbP(-sJ}z=m^VQ4xO+nLc=rRa{43Br@o~^R`2=X5@(*a9 z_C{!)u?CuF&4T9HUxnt1$3t`FiO@XnpU}MEP0+mPdT3sMhUV(8Lvzg&p?Sl}&|Ld}(7e}Mpn20;Xl|GT&6~dg&3iuynww66 z=H`Dx^FD8d=Ka<|^Zs+8`G9Xi^FdFB=0i?}=0pDj&4<4Ynvc8}G#@<=nveMwG#~dA zXg=XIXg=}3(0uaSq50Gsq51TEp!tk%L-Scrh30ckhvswt2hHcb1DY?m37Rk37n(2r z4m4l-G-$s33~0V0hvuu^3C&lphvsYdgXZhL3(Yq?9hz@C6Pj;vKhkf#6Pj<|0L^#q z?|$&_w2ygk_xu@fzkZ>97d~-ax#HBhC#}1A;b}K-T)%4brn$=&Em^cA6zw@^4rCUC z=s?ZF954qea-eQu4wwTKInb~eLj}v$UdZc)LMZ#S#HyIQ4jX#xS0x6>Y=YRkcpqf^e3EZUJK$HlCg_ zjAv;@+wgW(tvgV-*K^1{{TjoNkq~)5VG|JBiq=I?_?!c|Xj()y^UV&u} z!30=aq^#6yo5~+hI2H;)vyew9yb_j4b^+B|$e30c=0RJr!wl+SF>VkjWH6&3onne( ziipLD5;pRTFxh9)!Np+;Uqy_-Jp_h2k{p7|fVxGlc-e<5w@&XjKH{4(>#bdUYS>GF{BeBJBk^C zCR1Q%5(cuUPM$2d3{WgAjq^*HbPR8pY>{$O*oovlbvJXRRYa;%<`g5)0Xe*SW5qJ$ zRc*mgl>|D#gJT$)iYg6JL<%adFj+_eI4nwNdVp8kV>s>bMF)15ZV(kuj&mnlntg(IQ?i)m8S?U0~{eN&r5S!rZIO3CqU0hk(!fJ zL?qAltE7ljfVsW{;^^l`>3kH^(ndNoLl&KVs84arPRKaC{ zBZTF7X->=9uuFY}0S?L}!2;B9-=iMBOABQT0u)9BB{V=vl*{4^aW7}0A;3~hWuAbD zjPkl7jR8xN%9!Mg z*LVHicCO}O`k#Gn9*QdCaI7Da72_OW)h`kjCl=H+IP{jm9p4S zlbtu#V_211c^a=;6LXRY&|1c&q9OzehXA-7!?+Ehe%omI6_#SN2JUTyp}QM z)ekA{qGuOMwV@;1Hc>@&nuJVM8M3PTR951vmkz+=#23*N>IiXz=+sLTLQQ>N!P_hAS>DimJaW#ICL)7SJ9pl`a8+q*SxgjKCFq1kypN zDl8J=1cVWzb_WU0;Moc)3KbO0%9`ZcNSBIU8REG%DZjSpquwBvTH$RpHEQt#ceXGG z%z=s=*u`QH9oW^v954qea$u%~IbaS{)ykWYP{ z=)wC5G_R>F(P-3Gbs!HnM&`SvxWM#2d|mOyGMnx(cAO5(?hyIx+3pWTj#)^B^f{4U z)-KQ_53;qt4!Ao|SAusH(t<=(WGDzH!p4FxP=C)m(WcKyMxM`^gC7@o31Kash_Ie} zK#!0FHT9y#q8|>-O+}tN)<1kTAbh$@5xvHRywIYsP)nPEzB%CCR+a~d_oS{Z!g9;e zwP|(V4m%+S&r5{6pAcNj8O$rtJSP#_0m{OnpIT(N-wvotDPV!{npEblEgUFtA&Kh! zKJUbuzfY&gb63I7J|1~lfdc8vzCuz|ONUaE#+JT25U$Ptvh;f)DmD#R7%!ttbW$za z3~eO`_O%#92llft2h4$r9N6E&954qea^L_9bHE&^$bkbb2GN0oEX)COpdtqjw%8sW z$a8!v_aNX=_$x?XK#0W<+oJ<_%Xd1YTjWlV`v)o!`0x}JJQ)Zs+q#V%aMw{>QTwf_ zvq?#D2K(i}{I21C{RK@vpTPY2f#QNMOReib6KuHy3%W+0lf>PhAP+b#C#17wn>kRr ztOX1B`t-Fix6RHuu{K`VCGvb>P7()w@G1plg$x>dZd(WNs`$FXNs0^N`$S&jptENm z9auDafOMGhQ3_Q>OwwlpqUR-ps_FF!i&*LF{BX~#A!;9xJv z3pi?n71ItZOGTa{g=?#}r6NlK(dNqprgX-Q#{sq!zZ}>fR(xVgRp&gXMMdiqJIi31 zk`Niy-GL)gkq0t&D}Nk=tWVpjs)7w9LbVHjqwY~;o(+XS+H>p<9GMFA+VS|ohhIro zr0rFzu)vq8NiW6ZBR$kL!&~G4S?(9U1~<@ubL19vRaH<=Y5EL$U|L~pR|k$tMIK1M zxJTDi3k$s;60R_(5lAV4V#AL1+!6=KPBfc8!S9fU(OjWx@M%yXOa}6#W0=$#+0B8Y zQ;`#iUloM3V&-zHI_#^MstTo{k>>D%b9_CFq(NM@wF(EuZ~FKA?R|cNP3}jie~_yWV_+ zW_6uof-QBx--LT4Z=`*A2NBU>>7Z#JWqFSd9G{Au$^7^nF@9hCN@-X;ja631YoMvv zK@)da*0Tf4Q;{>7I~4vb_mEPxP<6S}Q8?%$m!~UuY>)mrATA@|#I2O71u0Auk$aAw zVeyPTwt@pEq#|b$f&bt)iD0q#uUAO9L9Kp>f6x$BGuRIY*z9m+bTQ>?qpeBpFVWv_ z;62Tgciz*bA z!hiRCjZjHp#1=SkQePwQ>+}gc{N%ny-q-0i+#DDz2Trjt2h4$r95~g&954qea^N(J zL3H4B3v<96sK|jcEX)COpdts(v=~GO&ayBE%z=s=INQP;Fb67f;2aBcz#OQ^ffW{m z=)k!a=72d+kpn9&%mH(tA_va1FbB+miX1rKVh|m;z``6b2P$&lLJM=i9H_{Fi!96m zbD$yzF18p%2QINN2h4$r9JtiN954qea^NxxbHE&^$bri(2GM~lEX)COpdtsZv@i$E zfr=cs%EBBl2P$&lYKuX1;2H~az#OQ^fom~eL<7`)@nJF`~Y&X`t_d(g7(Dd`0AJ`+? zOYppGmg+r-uscb%*zYwHnjbhgyO4O?z4g79oVkA04QtLC8D4waEo(Mz+PrG@jU$^k z-nwRZ9rBw-7B3rKy>``x4Qp=NG_rJf(@pDEJ963Z^&3~M$11py?iD`xcW8e24bc4P zJ)!w=cc4#v1)86F95g?30yIDS4`_b=jnMq!8fbob7Bs)|RcL^?mH5;10{yH>&`$TB|{$yzW z;s2odr?)`!FKeOsw>i-K`!}HZ&nH3i|4xDCzyA%*|GpKP`8sH2bD>rHCbSw)hF0rT zXbt@bT06WAT9fYut*P^%HSJr_n(-89?Q|NncK$E4c6~dvcDoT;d+YLz=R)hjE1~t!7PKDrerP>nGqfHxA6k$83A7%2JG35u9<-h~1g$5109sGE6fedNH)VatXA) zHWgZ5{}{Bs`2c8rdkM6@^DFm*f2V!SgS+R?fcy0e^}Fzi>&g|U&OK?}%?nSvdE@$3 zn>Wo}wrI(sC821~L31Fp7(@qZ7UqCCP>}<53v<96sK|ka#UMJ+w3uiPxc@uC#4D%S zlCVcvsc(!#728y?N84++wjkVbL$?4-qonin9%Y>e^j4{2n=1C`?QMHf$#Df>Tauexx&@43*m!!zFrK9qZNu9Q!YY;s7{jT@(=&$gEUjo8 z-ma>3(iViXBy6fkLhQ+OaR6QqFw z2}2rWMH`7ogNG>?huVZ4x=Xs$X?Tmak-Q&m#XfktU0Q69<&aT-yOfU<%_A+>B&AV) zMj#c`8*m419d`8d74!-$a|kBD+9GA8UfWdufWom*2%3dFLgAILOtK58)!(@w;lfq6U@2R_) zE3G0@l`^Lofey&w)f+38A+Kr+hN>jc0UjK~&{R}uh$2!@afQi33cz7eLemqZmT6q- z&_%%l^oH`riqt|LO>44LCc96So`h6tZJT?a_=eD)fO%DKprLFqg~I7agQ`45a2enT zVR>Gf(=v^@OE>{~PKwl=oFXE5wqIREUb!fg*hs|*uc41KUU@vOj!W!96)*G;R`D7- zxy~%FQ>IL%aLi~>m8S|W0~{eN&r5S!)`nf`BMfj*CJ7dxhWj4%@LgIcV-TP)A}FB& zQleZIUx<4-6Ab~DVk+|lL?kD?I#mKXih`%ObTp{S#XKPe;0R9K>O*t9g_6Z(Zj#Po zUL=sKyD;mz)4klR?D^J4pkt8p<=Aq@85S@eIQtd`_e20#$jM z;4;8r%(~Tw=4i8a%IQJ{8%QHafGY?Vph(TpkfOsCeQ?1g3~{OtA~+2Kmx)k7OmfDn z$O3S5h?sX=L2$yWt0bVJs8um3sJLRDkOFX6l$56v6Un&6t@0`Y1?br+QgggZw2hGI zL&jw{&7Y-*sVw1D4I=0&7*Qe0IpNhQ6R@DBQ#fWcsLIm?mjR9tmgl88Eo01UG^S@# z3uW&liD#786=@7ul2pbdXS~LPD09Vl%P8lBSJ#w)iYlh^ZmK9yfSxC$02~n|iJ3%c z8Dn0fF+Gz`7#kCf;gb+qR%(Ij>|rYJo0Q5}RxzP-=~QF_ifsA}3df8F<1$Hw6o4b5 zBr%gHEo01Un9{zBo~@L{hMMfWu^z*!)XLL%)tZ=-On}xhE)^9aP(b9PumX0ZaKxyv zs5?Z`GQbhS@;oACe&Dr?F|U3|X%{`aP^t|b*|v!)s?#K7s>+a6-KVk=U%hky9w)wt zrcg(S8$_pGq7afQB~p4h5jOJK1jvzaSi$lEh?UFsyp{=ez^iaA@1kZ)HQF%Iq=j^z z1Vt4+tWb5GI+|2!We|ByQz2qz$n7_~b{a0bs-P*JF$U{=;7-$uGr^vV#=wMqH4 zMIZGBvD6B0qp4AgAGouHIbaS{};OEzALPpdtr$voHtDfr=d1 z-C__O*u%mcFb67fU{4Ekz#OQ^fxRpS(ScbO+m{3G-{$az{6FM{H$&Lz9d(T`E*PC! zj32)Pdv^?HxU1o3?|^*j^F$BcPoQ~CWr;?kwyFbpxG^%{EyV?<_u=b`FP7PKkFn!) zV0MSdXU}$jD00j~Dx}Ye^s;t=CV7yp{dK_Ifw~gBtB@8Xq9Q{z)J{g@kE66+yi=qB&ewuH5UDFU~Ve%+_C=Qs{!HDU5e;6F64z4g@sz$ z4D`(b@3yi$K)fe)Z4s7Rj;>9s`*zp~Ie1}-%SeOImKt&E5 zXfcQm9Ase*m;)6#aInSp=s=$1Te$}TkHTL;`T{~MhS(k*xLdx{A>AT(g4{n)iNJ@a zsNl&!aM{*v?0~zD;)>dDO`T0jiZj?R2j+JT_vA8V8*{`{=-;(IdyQfAEr1hPwO0p@Oa*%Fc>LhQucRx|_9|6a;LFscmO#_9gGR{>j==%4(=YD9?)qnO_}}NQf}gID6wv@2A+YNt6Kt6S{wCZbc_ZzklOiO2Ayku^_Cc2S z?7;D<$eGNK&k^JI#jlix#nV`2b^97xJlj#z-eY-B4lGYa&SdUT__N$YO4UNu~LjtG39Hctx4@K(ciA;@tTV(m5J12%a%ECVlr}M-2+!%cr940 z20;M&nTH}bkyI-TZ+!>wtK+81$7Os25sNAmmBN4be2q{^VZ;_Va8h3*@9XplJpAOo zM&8%yHryN-EC)`pFbB+miX1rA!W=LMDstd7i$QeYbPIF99H_{FGc3#jbD$yz&a@ar z2hOrE2h4$r95~y;954qea^M^bbHE&^$bl6WgXqAy7UqCCP>};GEzALPpdts(voHtD zfr=bB-(nCQxWK|3Fb67f;6e*?z#OQ^fr~860dt@t2QIc4LKCbWL?yX->Z zara5tJV`FEjSR27?UpqgH*H?E`o@vX8*g1Rybk$IBa4>}uU@-q!-h3CZ5mlR zyy>QOs~x#)`1*~j)?*c*_0u}Ee)b+{{o>xxy6Yfl{pyF%`pvVU^}7|&`a=U+e|#^r z{=5-de?1slfBO-%{_z}W{p(z4{ksXR|GW=c|JwvZa0m=#KZc?Db782t5{8CaFf{4? zFf_awhNjGip{YNCq3O57(2nQ9(9T0Jw95xzXy&ajwEF@W+T*7%wAb@sXz%l3XwD=U zn)^W*+UGtnwBJG)+W%)Tbl~%0=->-rX#Nf`wBSQ9wCKJtbl4&oTKsbuTKWPQT6Q4} z9XSj`M|~KEj=3KU9d{@Ujr;j*8duYZhqg91 zL;W$IhWg_k1@)U3L;VTAf%=nP1NEm|2=%9J0rjVU2I|jzG}NDc0MwuJTc|(pwNQV- zMNogymQa83T~L3?W1#-B1EK!%-$DJAuY>w67eoCuTS5J`pN0DC9}D%{4ubj{eh>9G zy&mefUjp^FZVmOfeGcmHcpTKGIRxq- z{Ug*rejC(3c^T9{Jp<~W`8?D=do$GUJ{0Po{}a@|_y(wd>2j!lWgDn}^$Sq{`V*l3 z&BLJntv^HkJ8y*g_m)Hb2irpZhhK#HkDmzjpDuy=&;A1SU%UzGzkC4Hf4v>le{&Di zfA=J)|KV_`|M9O-|MQ!n{?`>y|NHh(|Hqf0{;wxP{Xa{g{@=erJ-;1)E%iq|xPSgV zVE*`psrTX&^J%9XGke*p>*gPO-I~?Q*R7qsc)_9ti(FHmqvk+OV-y{jqM;6`0~I+i zRYM(62P$%46OB=HU{j5a%>nbDBTRg9nk@+jl$GYjNmOx66=xJad$UP|d0jWn0L!T8 zy?sDg?*)T(syL>KGY0$GfmHmu3~($edhZ!f)_cKVohpv0;*7%A)+Z6>b=@?BaV(q2 z%sAGQw4!6^xKYS#34?LG^+aaIv7V$A9Ye=el^c@?V~Lw)FpgytnHk4=l2&vK9amLu z`Y@koka^l1LsxmB6*=s+cE~-D=M6kSzzbdJWMRyUyarz;Fa{NbJ*G>#)Z5Szg_U%k zKZ<;?bWs|P$F{5dd{IiT6z%g`>T&5;*&U7)P#!=Nc(gmw?ibK1uuZ|(1JZ_)lrk4o z_63>MB+pX2Wf}f zY%89iX6D0o5hE}UhOUn!1>-XCQ=}BxX#EDCk?4I4^~?sVOT15c+P!=H4qheRL_l#0 zvphiW+hZ&1>>K)VUKqNJc%M8f`CTZmn@awKcPSodJM6FrNXpY3W|9H&Q9(n73=1qN zn9vIv!9~z7Oizb1c!mMJiO6CJvt_+t7{-&5rbWb2CSK&Qq!;pbgdL1pK5#M#9T~c< z7UMENF|&T1O=Z$BbYOCX+eu+BlFpRV#Fa9OM5oLNhM@uc^5TmHOOUcSf}m(IG=LVz z&<%yIUm}PU6kITwNd~wqD*W~YDP2Su^^?8R{NZ6mC62Fc_ty{Ug2=- z6WtKn<1l6M1rqWBZ68KI78LC^<1)Y%%+kIzCuI`T6mtyZo)jrLev62t-8P#Je{yJ) z*hobMWj99^Wm=EfaEViV#|rI(RFvH$^@*k2Zg+ebW-KV$9mZvVE10EyX->)t*pxQh z0t0yyV+LZmoe>W^C55~O0SY6+7k&Y^e9g%=;#sO#;{i#r}lJiT# zglXEKhA9Z*RvVt6(g{q(LIyEO6=jw=U}zUHZ@55ELD_T?P*8qUFexawu#ZUwxGXBl z+dUJ>XvAdx6ow4s?i49GIwd-W$@ELcZL`h3%K%$RLRl>G&~z}OMpRQl*(eh*P}6)E zW-KV$(-@Zlu3(n-r8y}hOgUOJFe!z6c9O(*8= zN)_6 zA#0u#WCF5m+U7nCGZu{7Udki`ToDzCot~01!j#>X;wf^sP=*5~+52F*hE%Cc+bBy- z%yGp)Y6+K`f?&uX@{w5vTlg@CFJ--nS(z`L>SHfk1r5Erl zU$*6?jIjY$g}Ho+*v;MOz{HRg`u9mtz9W|fRo|^+Nx4@Bk*DQ%;{oy6JhG(^BkBu{ z24(nTg8@=DkT$@z8MLamlSl zPgB8jaY6TWP2R>Oe&fY^^bh4oufj z2h@Rz9GIb@4yXeaIk1g}I-m|z}=MYp4V2Kt&GhpfQRL?5MF} zIbi5cc{;+4C3^Mz0a&C+@&bJ;NAodib-GL$;xT{*(36qGtFNXOC3(FnEdlJ_cVZP<)+N64DFS}7Lo|6c3 zKQ5@36POdw93x@c0AINzpHifF*bazG2{0hMCQ+Gdb1&pLS490`zwgGif9GD2=ca={ zJ6mLB0XfpPZO2Pd%@acHHJXO*fV(#PhowCWQ8?6LW~|IttmAGNQ*<9Wu#3hhIVP^>kpsJHr~~RiMGowtF^UfCsi6+20~I;2m&S(ZK%V1QnTH1!xqk#{ z8wj!KVncM`e)&y%_lw*Ja{E9f0vnd{4NE$L+M3t11Liuy6%}tyyc@R!r*K#f%Z=*-B1N&%~PzTh3iX2#^ zF^UfCr=bq00~I;2|M(-1M+#-!)T%-U>_7bId0ye33T4kRY~W%m$O9a6K$~d?7N;Ul zk<1mkg_30{fLg21T}o+`o2UbH6Zp%4J6y&m`;PW=89Gwm<8;4*&gh|1dQ1lnNJZ|* z++_MO46?Q?bVUaTya?4M?2Vd-t1N@8YXnl!_#8Me73j6$@dqC^dtE4tUEd*rZTlga zXbe~P(n!7HfgSL6lEdV#{mtQ9lwHv=w5@2Ua41b#x`(DPqGj2EgHn+@(kAohTS{Tj z+a>M_bHCys2e?WduG~Z&@V27I^kY^bYfHD5Iw%qyKjSpTC(f7lD6TxNlkH))&o0mcq(!t^TTt*`1@kBFI}=Uc1c~#Zp5-ZHN_dN z2XbI(Dsm!ogWO+BE%c>GzPr@ud>H5>H`)H+tj5qC$ms+GRG92bk&wbN6*-djVecF( zjr+)fBT|tQiNOBgZ<2>0*$Q(G5f_s!&u4 z`@3g*9+ebIOu~U>Lydf>+c)CnM-4Udp>EgZ>cD6@aI}Uxpbk{zz%d%?fI3i-1IKEN zq65cir~~RiMGhRVp$@166*+K%#wa>)qJ}!44pij8NgC>aI#7`VCu^t!>Oe&foT4#` z4xFl?4yXeaIdGbWI-m|zVP^>kppLFjG_Z)YN!M1Kt&FmrJ)X}0~I-NwuU;O z4pij8IU1wrz_}XgfI3i-1LtX|1L{CU4xF!{4yXeaIdFl-C^~SVhB}}QROG-#8tQ;L zP>}-{Yp4V2Kt&E*qA`jNT&kfCr~?%_aG8cWpbk{zz~vgF=m2b91K0!rOsd^cs}Y7< zYg1sVOxe4(g`K_C;8nHhLNkMR)@s|3X46e;+ry@AfBlx) z4vgPW+fmH!>9Ki}+CqEQ3~1EfUOUV4czSd9Jx^G@{K}OlF3GOC@%oi()~;K=;_4;q z*4(f%TZR1EB?}j4E3R68?X@efS-WJvZ0$9xRv2<|cEy_ItFa4a<)@+1d=xZVi=ol} z4K%v1fyU++LSxG@N>{O_;JuU z^k8Tl_6KMjZfrZ^QfMrj4vnMkhQ=|EhsJS-K;!s7LgU2SpmFkL&^Xn6`e~ns#u+z5 zXyd4@(ejqfSx&t(x_GM^1<0;U1))CNn_TQoL+_ymE`75FE z!X2UUqOU;X|DFnsmmUd?m;D18uXrmoUUdaDUcD1EUh`FGyzXhxxOEvcZu=)R-uO0X zy!lFKyk#ad-ug9Yy#49Wc;`{jc-Oz6@t(Is6fX06T8vnZkns6;Nr|bsJso#a> zrq6?B{X}RsYtYQz3(fX*(CqFG&1v6*<`&O~=2j;`bNUo$&bSkr+g=aN?e~D@4&R67 zPA`DwtdpTRXDT#zejhYW_MG|NMKv{P7D@@5LwP(@r^N_Oeyi%|G_KHLI7e zTRVI4f<+4!xu!lx&4HT6C^|4jLmf~DDso_|hB}}QROG-W8l&jIrWzZY1Li+RnE2#0 zTM`Z^E6t6QsN$F^&M18LW|Ii>x^9{QmQm4r`+&0E3kK^{aZD9w4ED7HsrYpn;8;}j z-ZP-A_kzJXRUA{r8HKN{Pa@3gx@iXEST>QFajYk4MaR%_qmbDW2IF|^iOh^+JxMD% zhK{Q$HzpCr5;x6Y9Lpv$GmiBnt>_p!uBzPhVLs0w^RzjJuJS@Fa@cF_kb5A{8+d?# z7rN5P!k8C%4ZciZ3@QkFOqX=2x1l2nE9pFc6!~E3qBI@ z`VBrK(fb(cnGIH#c%SmLd-wPqyh^-@fZ`Npd4S%x$5z(aH}vDYFmxI5K6zB~yHH>^ zmHY|sQasRh*kKQll&3k&Bm?B5f`$wk7Fbd+p%*lQi=bbao(^a53&L=Y(`xL`7q3~*Ug`0WW&$|NpL z$R=Y3@<9G#K}sR5_Bq)qll`~yOhU@N!r|5@x*@d3VannQB;*6yK8$`WDB5ktWq>P~ zrG05m$|R;K<`~F5DN=I$77vnJ5~ui%71{@>D7#7O z6HB?>?)WgwSWvV(jLQI5FiZQ=oRk%?DQ&m~2J$Ax48(FfBOZ223V96z6h?$E`~q(I znv-qBvsAIh1CnCN`xrzd6_kxC0S)DYwwQ7(DB58klMHYL6(-w|933HKahryCGVF_l zrq8Zo-TZGT9k3LYeyNt^K zml12S4axb#ij>j04i0z?BL=3yn1LWA=a+;D)3iYiQxL?hHatP46PSvH3}TWh$}Drh z&@N)$aDkwLvgstCp!}#{Qc!SVACnAlSyYs_dnS_6h{^mZ3>nDXDN=HDN^}g9>6eV# zW}AJN0k)EavRLGy>0m^SsHTFlQ6^xZrui_;SWvX5F)jmK!7S}db5cf_aF*(3iIyWihwWK0K);uZ51Z3H?&3zbVEEu=Flt~7-A}SI) zJtbv?DZ4GjQ{--;3gv$a;FW_0eY|Bd-V*{)TbNLjpo4e70i6JTU?~|Z> zM=lGhzFWtVa<2>`Ps{Jd1LCuJWJ@1L)E62J%J9bq1Eg#qZGdaXPp`ma8ob-|6l3R_Qv^0y^a)R(0>Xgl}Kpm*afo(NL z(ShwW)B$y%A_unDPzTh3iX7NMV-y|OQDeh$!2G*8{2==;^4ymp?DdVZ=P@RXUL(p+ z+<~2XhB4gq@MkB7Y-#Jn4Bn5UDW|H$pi=j#1G&2~Z@x+40@LTvb;TD;Ym?5IphaO&^O%C6 zIbhuumOF^|B(5#Oe9O_bN%hcPcB5Q8ClTg;Tu?73FejinM#8iKzH&)ErAYCx9T1li zU_f|HqB7U!UdVB-i2B2R-;Hbk&b=bfO$UE=w#do?a-?nBj+dgECxqH-G!5MWcWw3$ zOM4cgaHzw~SedU_$K5cd=st2_7mZPLU{?)wKpm*af!#FJ0d=4v2X@y`2h@Rz9N0r+ z6dl-8Lmf~DDso^ijSbO(Jjbsx4-YJI{|M4H5MtBChUmck@|*VV7r7DS_JK+SHZ0{E zmUINQHLqs}%yon-D&CrSH*N_|;jkQ-+c(S~e@>In^T)z(B zRnc|1HwhO+_ldm3PN&ZyIypd!cqKa3H=gd!YOO)&9n8;pht9 zMvq_z_R$zc2lmxa2h@Rz99XEK4yXeaIj~4$6dl-4Lmf~DDso`|@kbty6w0`%RfP`N zfB4b!yuv*d%ARA`z{OUO2RP<{Hq#C)PDP#~nJaV)CChpNtIrpYcdXYs<=FwU6n{C8 zbQzym`mS-F%FvN|UKazu!f%OtS`FyH0jbCxnVU>MhC$Yrg|6t}fES_KguPMoa21x8 zbq!By8n*)nrUJb-JpSOrX0HonvFke|ux&piQ`mfDGYkM#9d+TS0E(>f^{eAb21KiJJD?Vaelkf zt)`B@23tB6!ek)tbp(?-CHpyWa4K?7;;#xqpRqEv?;32oSc;A>-Jst?3HR8(Tj>{3 zS928(Ox*N|Pge0=BXPzd6OMd6OiuX74Q=qy2}eHRNgY%NHckf))7bDF$OrkPfkcBW zQq8~)EJ+9cFLl$wpT3b4`31OwVc$(En4AOlCd?ywBgNH85t6pyx=BrOk=6q{aCjoX)1CebA#MpOD*)JNWQz&=zJLHBRARp z;H<{b9mwef1XP&pOOcSmG8H+J_F?ZFD~VP^>kpstSjG_a_X{ZD0Kt&E5ub~d80~I-Ng2pI1aH57f zpbk{zz)2eFfI3i-11D>!1L{CU4xFMfiVmErp$@166*+L4hB}}QROG};? zXpEu*XKJVe>Oe&foTZ@-r~?%_aJGgzpbk{zz&RSD=)k!e>VP^>kpt&xr~~RiMGl;= zp$@166*+K$#wa>)p@ur34pij8MH=dWI#7`V7i*{k>Oe&fT%s|G4qU3C4yXeaIdGYV zI-m|zI+7@>9 zR%q@qzcyWHX7J8hZ5z_;bysbB*wpTC&RbdAf${3vj$(FCkIkFZ7TU9BKy%&=wX-~r zr)MYr=7iPDuUvWJlI*G*uV1-l?YiYFu3oZk%?&HFRmiVhvT$*>;;QA>Uc2&|wM+KP z)?Tw}g&`MbSFBmS8oOXtJ`I`+mO*o$e?oKN+n~AMmC#%~6PgEn4Vni%9h!$61?7;G><(Rn#cVcnkT#inkTJ-<|(tGdFnTydHOSefkUo&(K?91qQh=Fq(HJNVV9cVu0 zxzK#v3DCURe9sf^faa5~h2~RsgXUAe3(coL51P+B5t`4gLGwB9h350FgXRl%hvo~v z2hA5hADS;Y37RjP0?n7-3C&kt56xTlfaa^e56#!U0Gh8q8Jf3Eh2|UH2hBG<7@D{5 z3C*|s0Ge-mAvE7{3N+uf2{hmRerVpY2AX&71BWQl+#nAlhY0$iTGiZMPgV6lqI%s}rE;PUVV`zT$|DgHx)1mpzIyAra zA!vT*255e79yGuI6KMYMCD8ow8PNP`1DZekFf@Ph5NQ5#J~V&zQ)vF?rO^D{nb7=0 z6Pkbg2sHovP-y;j0W|;iGid(fWzhWBSI*_59{w#myO+w5$} z8ZF40AA_uQBV?U@A?yAEvdv!s*_P)(wsjk_=^uw|n}Z=aG;t+z+xvzk+Q4TOd2&e8>)( z2HC-%g6zOy?w+|@m zyz&`dM_BPQ^he=oKg7N`Xs`>8OM5( zR&)#54?61|V1p4nh^iT5c_yLXS@!K=iZ2q;crmIvs4 zdu(N$eM3La3qzL??~_L*zY7I+Q^}w3F2w_FhaL6+NqL&XOfo<|Drm@%VSyzD6M8`- zxCr`%>FIC=&oH1j5m_u@wyYNn!+28Cw1_y$#ETr3^g`Z_u!B*{2TmrTBSW{sZ1J%4or@4J1Oi%(wTCaxKd`3=#)9ZFf@Q)UVO1&2~rkE5ELzj2GHUdx}nhZ zO9YXEf(s@y$pDu{h2NearA*?|glsZqAP?j(7Niu?YM+y>GTDDC&m^SWD;#cpq8mbc z9HuP3KtevC?ZfEDf}-7KTn4y;S=yK8q)cL(Vvd2_lOiR@ZxNBS+h)_@PY#U|8>y(E z?B=MVOzSZlE^&(QSfPE8in5!eKCzVB?T!z_j0Huz!?+A^1+%m-%}H4So6?3`U?6W| z%s?!+GvZ;Vq>$GjKw(7q!Y|;KuQ}O9JWCa8JRm8SypKUdQbF0M63|dSXp1Swf}$Pv zG06Z|P+_tS$)?RbFk)aDj2Q@0a(+peFijiO zFa<%}YQqy$I)SNJ$RH-EqRcV}4DBN34HpP1D4R|K3d)ZPCItl-_A$u-mqkT+yJsR9 zjhM`z!jOU7ogyVir$omvnSRN*ZMNBW8DJ|(D2qiNnhr+Ph-xY*8)X6pYMKwjj0Ht| z8sjp+70lAUG$&<*DMxDtCZ&+iPLlYJ{JAWR0ZEd|n52qwyvSFk86O$dR8TfU2`H$r zl}-~)h79CBCK=$0s7UPel#~&s9IY9cG{V@JXbruIC(BAH5R(IJrE`-~UP~$>WX+R; zOhA@R+uVm?#)5I%OPOSVE21K?(^FDLn6leaJVovn%5b10dmk*7~m|2_%IcjU65>brF;Dfh}C^0fSJJRm-sN4E4~M17&rpbUR( zFhI%%(gwJ8{PYS;wm}(-fU#{OaHixZ9W^#A2h6{l z!w<6mBF}vp!d~AfdmdxL=ryAJ#2whFXBfjx4}W%Y$dI*_{? z^X8irE--x#T~~au#HMGIouC6Vdqh5SruoZ9j+HB!w6!O#tSFEqEz&$(2h1IaE5W;R zWgroS3I*|5!;g1Qt1ee1T5%zNn{KFMa?PpP=F$@Q0ry|b{ zYah1j5I)VNuwLRI4_XukHIFG6ngiBtVY!2NPvY7l%(om}n^X_&WjD&ja}r_h#|8Cr z0&@bIV&=1EWzCyM*C(%yxb^m)8`r_} z`$V44&%MMz8~#7Zq5})YjvU+eK`HkY@}e8q zu@`E$0tey?vj@8WU+r(q7LKmqZS)9sU>}W9bYNc%bwC}c$bp3#>VP^>kpqh~M$v)& zG}HlgpdttMAAjWWNTH0IT2<(P{f8et&nw(hq3k*48@bcx`{N<~#MYzHXaXN6A#)juWKFB8xBpPIqY6f;-NjmU<@|zC+^o^v*FTfQH z`)*Rfw=j!&8wHnIE1b#@`p4ed&^=u}kV=b|aSU zsVUBAJ&*%SQ;`#y8|404YN0Ph^4+CI=fglBxykkiXElcIKu#whpu%Kdii8xFsmPJE z4}0fWY1~H+9FdBgNCfr=f0H~6$^Lq|k_JS!OYFlh5j};&aDdEqSLQFKd~N<{ueO(H zZ`bm8&EZOUqo2_4Rt^rsK|j6G)B>Z6E)NUb)X^#PSQ{Z)Paf|I9Wp-PzNe< z;1rEfbl_ACbwC}c$br)|)B$y%A_q>_PzTh3iX1pYV-y`YQ$rn42P$&lEDd!)9jM5G zvo+KKb)X^#&e0e}2hP<{2h@Rz95_!y9Z&}8o(w1U{dXl zT8%K=TAKn>E#EMmsUD+hGl9D>#b}m7cG5d)TiDrK4gOU&Vy{_PawPUC6KK;1G1|d zkX`d($gX_|WY^D!?7=^UZ0$=SyWvd89@>QLVIP6);SYuEkqaQZ>1U8V`el$k_AJOA zpFwu>MK^-P(cdwogFz#z#Q*=0%X*{!7T-`YOoY zeja4+>_YagPeS&dM?&`A{UE#ZSCGB`7RWw$K4c%B2H8hG1=+`Lg6tFfL-xsEL-y%c zLw45%kbQ1*$nO3$WM6m`WcMtF>`T9a>?^N<>}wZ7_Khtd`{rjL`}U(D`|bgdeebuB z{ou8b{pcddezGNGKfMdGpFak&dk=){m%oGT*RO-@w--b9`>i1R!)GD;(_Oj^AgDZy)|V2`5a{bdmOajU})9;0IjLFLTl4Yp;ey_t;XHZ${r7`_94*f z{1IByZiChqmqBZ*8PMAL^U#`cGqkon6k6N;30gb60a`m<4y{?+Kx_6FptbW8ptb8^ z(Aw?K(AwjT(AsM`wB~LLt$AOB)`BNOYu_c%TKE@e?e`{VEq(yB4%`k}2i*g$L!Jb! z!w!emlD|T0>6@W-4}{ifJ3#C7FGK6h zr$FoMBcOH8-=THhTcCBpN@!iQBeX953bZbLDzq*?5?agu0j(8ph1SX|pmpU=(7NiY z(0b6*pmohMXs!My{#xpfdT{^zd%*nh3sdjKC+5>mIcD~KS!AOr`<}6=w|gwF9a6bs6ATRP^36pse?T z!8%nOQ^gsDudPoa%{abt134p z5ylcX&0rkMCNeXQ^(3w67&@-1-1K2S&mi-(IfkzCLMw9EYweJGAkQ0kfPfde(#gV@ z7kLf7OkfNu2zyMIbg8$YBMK|&Jbx7VVCkYX9FJ{R`T3%hUMbq=wbbL%ud+KFDWE)n zCh%x?qTMf`RbZQfu?M6LB`IYtsO$?eM?xn2F60q1FN9^1TtKxH684#wSx{*9*x_eL zj0ZRh8LWJGonXRivWUcq77o%5x7k)aLCwsE?IK2C9t>R{Neaeg;HO9_veEhtJ|ofl z80wh~R+o66^0a&R_#M1TyorF~6lQsV-nYkA*4a1og+!QZS(xG=htuUznZ_XYdRIdJ~bw5@ySK!7z*`B~6Qn zqfETWVM#CK?Fc&6_N7Ku)o z6AVKG_~peH3zi^daRfopVrT#@j-eY0UB5&SDJZyLGLsB&SycG#2~x@=E=|ZLV+Qg- z{$fE&A+7c~*(#I$xAIIv%Duwj)+f3lw8vq};tM3?1KK`}ek>^3ZN_DQE10EyX->){ zrYYta$UP}ia{Lw%NxN+}9scCdD6x@>3d(MdD$2ATv*8k__>L9Y2dOB#N$L|zx!vyg zFw9s`v^$K;09P4rootjASLIQgbCBMK@C$7#H}_wL8TLziiHefk}Aq9bHLCpV%~6p zpn|gLB%q-Ds9;i1aA6;l3~*Ugl(%~(lF^9C{3#3>$lWPYa&$^`43p`XjN4|LeU|~Y zl7zBYZkDjh?hLi`jC5@EYovGBm|}Ux-tEMI`WNn3AU$IMSDr zil>%GmD_o)N9yD@LRN#O$1=g@V<7fWn8(#nbgNzx+C!*#&ifw&U9D^~^*QK(Sh-UtT+AJA~$cVpW=D;aq{YZm^P zz)NsBJP~0(x4=JK;naQ>H5$WkV0J3<+_3gxyAI*gTng(Y4)UNyVNmm!f}uHJ-4>QR zi1#F}Ey8@u(X~nS&|Y?_4w?vIfL zRF(^`)3n|kC|%aPd31g9+K5|k@40auJikxm`TX2V475R+8^|*0H2Pe>4&YVMb-6bQ z7ex1oyu?nY&mlUnVC=}TZ6B0!Um-8LfgO9Hb}MiozA$^B`~TJc#%$r}3f@MKUGjVumT5auacYEX7|AoOc83A!rrKPgvzq6;YfXs-+=>D zfnFOPfAC?m*M+j!^&Jw}wjYuyY(CIJ*;70z2fXDr(KVQb_BV%bQFcWK^}bBMgIt(a zDBIV8gHn+@(kAohTS{Tj+a>M_bH4&9ArP!PQJ<4>z}tyt(~tApm2Ne4{59CpsSqXu zd9Ndw)G67|frC?#dlG+D5c-UjseRXA+r?6JeCY=L9!j{!_T5Uqh`O4qaA4x5Pkge9 z?;43S4w-P|>tS-jM{a0?hfX;12~X;vISA^ymhGu2&S*W514~np6PX+2{#t6GFGcd*rAFt&Kp(lu_6KJ*hVDR4Cm^80 zWM7Je6qc#Tk+ctc=U8dnM-Cj3ikwIU_6L8HJPgVHdbyGYM7B%p!!Hp%g~M=w%yw7i zFQ$BL{%EhZmuPR-@_5bRN_nH7(KI;+j!Z_5ta)IjL^-h7bpi+EGj~lI@=~c#eBV2O zzdB|s|CowyAYxI4qEgu3J=^oBq)=iK4lEmL=PzTh3 ziX1puLmf~DDstcyjZt*qR1I}N9jM5G(=^lpb)X^#PS;Qe)Paf|I74F;9XL}%9Z&}< za^NftbwC}c$bqvp)B$y%A_vaV7)1xp)ldi2fr=bBPeUD02P$&ld<}I#9jM5G3p7U2 zfeSU%0d=4v2QJc32h@Rz9Jp9R9Z&}x?(Xg%fPtTlt(V^ntydlj ztyldCTCaWsv|f8Tv|hgrv~K+ZwBGOpXuat$XubK*(0a=oq4l=q(0a$V(0b<=q4n-3 zLhFtt(0cD*p!L2tLF)q#fYyh$gVu-df!0T#1g(!B4y{l86XBcXNgKcMxiw?gYTS3v7`J3;IBUxn5mp9ZZzFN4-!{t2zWy$xFb zxDs0bnhC9ce+^pyeLA%Aqo57{g7%cRLwl2}puO2FXxG0E?dCI}-8vfD?SDhN`wnPt zz6#n~&W83@-+=b?XF_|MW1zk5f1thnJE6VfgP=Wg4zy=|6WVj01?^pqh4!xhh4$|6 zg7%(QLwoO?p*{Co(4PNnXzz0zwD-6^ zhrb8fN34eSvR$El)OVnL%yXfA+zHS=!Tc?A;vLXF`C4e7x*N1l`!2N4cpkLRIuY9E z)S!Ltd!c>)bG61103f%XILg!TikhxQeFK>Nz?LwnT=pndhp z&|W`*A z_Tx{5_7gUR_7gtmIcD~KS!AOr`<}6=w|gwF9a6bs6ATRP^36pse?T!8%nOQ^gsDudPoa%{abt134p5ylcX&0rkMCNeXQ^(3w67&@-1-1K2S z&mi-(IfkzCLMw9EYweJGAkQ0kfPfde(#gV@7kLf7OkfNu2zyMIbg8$YBMK|&Jbx7V zVCkYX9FJ{R`T3%hUMbq=wbbL%ud+KFDWE)nCh%x?qTMf`RbZQfu?M6LB`IYtsO$?e zM?xn2F60q1FN9^1TtKxH684#wSx{*9*x_eLj0ZRh8LWJGonXRivWUcq77o%5x7k)a zLCwsE?IK2C9t>R{Neaeg;HO9_veEhtJ|ofl80wh~R+o66^0a&R_#M1TyorF~6lQsV z-nYkA*4a1og+!QZS(x zG=htuUznZ_XYdRIdJ~bw5@ySK!7z*`B~6QnqfETWVM#CK?Fc&6_N7Ku)o6AVKG_~peH3zi^daRfopVrT#@j-eY0 zUB5&SDJZyLGLsB&SycG#2~x@=E=|ZLV+Qg-{$fE&A+7c~*(#I$xAIIv%Duwj)+f3l zw8vq};tM3?1KK`}ek>^3ZN_DQE10EyX->){rYYta$UP}ia{Lw%NxN+}9scCdD6x@> z3d(MdD$2ATv*8k__>L9Y2dOB#N$L|zx!vygFw9s`v^$K;09P4rootjASLIQgbCBM zK@C$7#H}_wL8TLziiHefk}Aq9bHLCpV%~6ppn|gLB%q-Ds9;i1aA6;l3~*Ugl(%~( zlF^9C{3#3>$lWPYa&$^`43p`XjN4|LeU|~Yl7zBYZkDjh?hL zi`jC5@EYovGBm|}Ux-tEMI`WNn3AU$IMSDril>%GmD_o)N9 zyD@LRN#O$1=g@V<7fWn8(#nbgNzx+C!*#&ifw&U9 zD^~^*QK(Sh-UtT+AJA~$cVpW=D;aq{YZm^Pz)NsBJP~0(x4=JK;naQ>H5$WkV0J3< z+_3gxyAI*gTng(Y4)UNyVNmm!f}uHJ-4>QRi1#F}Ey8@u(X~nS&|Y?_4w?vIfLRF(^`)3n|kC|%aPd31g9+K5|k@40au zJikxm`TX2V475R+8^|*0H2Pe>4&YVMb-6bQ7ex1oyu?nY&mlUnVC=}TZ6B0!Um-8L zfgO9Hb}MiozA$^B`~TJc#%$r}3f@MKU~SDR#M@H&C_ooUh}vdI3N|d zBXg7K$1up+vd|SB9PlDko3J-(9M_bHBpxqKb0r9h4il1Kv(Fn|{m=WNqp8Q3pk$<7b?v{6s10X{4-BW&j5cPDSoX z{8d5dGghYdU4v~GOVRPA8}xfP;Uc%eBkm}u$N_(Q6F6<+lM^^>!yGwe!jZ3s$q661 zp$#57;m9XEse|gk#_7Oe8XKMi`5>P(kZ6!asu|dUCF#KbeQrAV(>IbLzW`S-?7K+? zlXJk{gn1-yq`11Lh_;x4o|@t^tp{@8@KoeP=7;Bq@%P1MU%F&z?2@{e-H2s-YKk*j z59GkoROCeF2D!hMTIfrWe0QnQ`7jW}R5k^OrN$5)$Z0nMDopmJNJwFsiaa+g{+Opr z7VG0aaNvkkXEOwp10r9khZi1lbDjbpn_?u%^^N*?AC5UvS{q=I9;%oSpRr_5< ziPn>FVA)V3AL{mvc==I7jeMxvb-6k)S`Hkop$@166*+K>hB}}QROG<18l&jIaT@A? zI#7`V$7`qq>Oe&foS-p^4xFf=4yXeaIdGDOI-m|zVP^>kprh_jG_alYN!M1 zKt&FmrlAg~0~I-Nx`sNS4pij885*PLz?mBAfI3i-17~Td1L{CU4xFu_4yXeaIdG1~ zC^~SihB}}QROG;U8tQ;LP>}=YYp4V2Kt&E*pfQRLT&STAr~?%_aFK>Opbk{zz{MKs zfI3i-1D9xwq63#|r~~RiMGjo1p$@166*+LZ#wa=fo7Vs~0RWR~chqWx;nvy|m}>ck z=}h$)RhtRig(*g}6xuI1q_%~fz183wYtw~h2JfuZwjs@nr`NWJP3`{nOWt1Ff$^QS z9mVXP9-B9*EwpFNfc8s1T06`0czWl~gHBkz{K}OlF3GOC@%oi()~;K=;_4;q*4(f% zTZR1EB?}j4E3R68?X@efS-WJvZ0$9xRv2<|cEy_ItFa4a%R%@+nxpOHy#V^H~kmdx4#S8Z@n7YZ{Hc(@Aww9-}P*0zvnn; z-|;_a-}!E6zyBI&e{dIQf9TuL{>XEn{juYr{qY>ypL`FrKfM~-ckK%8&wdBmcRv@} zUpN8U_n7m)bO*G*axJvKwi~p+{#|H)^Lfzz_KDE`ZVlSsdoQ$qa2>RNv^%ta{5@#@ z^!d>K`AN{ecM7zBc_*}geLb{)y9cy?_kC#p;RVqC)5*~O%T#Fp^?lI(`-7qV&po02 zuOC4BKQDy#|4xC9xq?pZ{m_}Z20EMW1)a@)2%W}@pp%^no%W{C>3je>)7C;~i@l+< z<&U7V^^2i1<22}OyBT!0`yh07SO=Y*=0a!YkD)XB|Ddz;>CoA=4xQaT1f4x@fX-g? zptJW+pfm3!&{=Q>boOmPXW@sTv)@CYvv@vq4)`f_4tgnc4mlG#hc%(IVRUk06H&w|eJ8FWtgD0EJG7<5kA2Rf(z96G1J96D#74V|-F&^hO0&^hl$ z=v=TbbT0e_bS{1cbS^yyI+wShv;5=GS@Ce_tXv44EAEBPRj-83gU*G{H67@z{seTc zdjxbIya+mLehHm*uY%4)&V$awy3o1tlhAp@BcXHCe$aW;ub}goTcGo}^PzL|H0V6x zQ_y+RP0)GD{?K{quc7nwS3~ES7eMFPn?vV0pN7u!9tE8jEQZbte*>KtzXm!lxez)p z+X6Z-{|t0q`Dp0easYH*{afg~_O;M?{YB8ZZA<99;V$UB=`ql`{Xpov<#*6|+v}k7 zj*Fr5uC1W+?$1K!j>qD!rT(Y~_s_ov%pbon^Oy?w+|@myz&` zdM_BPQ^he=oKg7N`Xs`>8OM5(R&)#54? z61|V1p4nh^iT5c_yLXS@!K=iZ2q;crmIvs4du(N$eM3La3qzL??~_L*zY7I+Q^}w3 zF2w_FhaL6+NqL&XOfo<|Drm@%VSyzD6M8`-xCr`%>FIC=&oH1j5m_u@wyYNn!+28C zw1_y$#ETr3^g`Z_u!B*{2TmrTBSW{sZ1J%4or@4J1Oi%(wTCaxKd`3 z=#)9ZFf@Q)UVO1&2~rkE5ELzj2GHUdx}nhZO9YXEf(s@y$pDu{h2NearA*?|glsZq zAP?j(7Niu?YM+y>GTDDC&m^SWD;#cpq8mbc9HuP3KtevC?ZfEDf}-7KTn4y;S=yK8 zq)cL(Vvd2_lOiR@ZxNBS+h)_@PY#U|8>y(E?B=MVOzSZlE^&(QSfPE8in5!eKCzVB z?T!z_j0Huz!?+A^1+%m-%}H4So6?3`U?6W|%s?!+GvZ;Vq>$GjKw(7q!Y|;KuQ}O9 zJWCa8JRm8SypKUdQbF0M63|dSXp1Swf}$PvG06Z|P+_tS$)?RbFk)aDj2Q@0a(+peFijiOFa<%}YQqy$I)SNJ$RH-EqRcV}4DBN3 z4HpP1D4R|K3d)ZPCItl-_A$u-mqkT+yJsR9jhM`z!jOU7ogyVir$omvnSRN*ZMNBW z8DJ|(D2qiNnhr+Ph-xY*8)X6pYMKwjj0Ht|8sjp+70lAUG$&<*DMxDtCZ&+iPLlYJ z{JAWR0ZEd|n52qwyvSFk86O$dR8TfU2`H$rl}-~)h79CBCK=$0s7UPel#~&s9IY9c zG{V@JXbruIC(BAH5R(IJrE`-~UP~$>WX+R;OhA@R+uVm?#)5I%OPOSVE21K?(^FDL zn6leaJVovn%5b10dmk*7~m|2_%IcjU65 z>brF;Dfh}C^0fSJJRm-sN4E4~M17&rpbUR(FhI%%(gwJ8{PYS;wm}(-fU#{OaHix< zj2T4J{2sW%4Kd&yk%(m6#YrD2F1gj{NlUYsEhh-Cp^hm-Q_S~;IMr7~0)K`nd5VD} zeJNQUMqnB?9BCkT1!f6z4BUz_r=0|M&~5<*g$f_Ua!&FE(v++hhFGp3rO#%4H0#9N z3*JUsqY=AsD-Cr(9jM5Gtu;o`f$19RfI3i-12Z(#0d=4v2e#2r2h@Rz9N1Q46dl-3 zLmf~DDso_Z4Rt^rsK|jGG)B>Z9W^#A2h6{l!w<6mBF}vp!d~AfdmdxL=ryAJ#2whF zXBfjx4}W%Y$dI*_{?^X8irE--x#T~~au#HMGIouC6Vdqh5S zruoZ9j+HB!w6!O#tSFEqEz&$(2h1IaE5W;RWgroS3I*|5! z;g1Qt1ee1T5%zNn{KFMa?PpP=F$@Q0ry|b{Yah1j5I)VNuwLRI4_XukHIFG6ngiBt zVY!2NPvY7l%(om}n^X_&WjD&ja}r_h#|8Cr0&@bIV&=1EWzCyM*C(%yxb^m)8`r_}`$V44&%MMz8~#7Zq5})YjvU+eK`HkY@}e8qu@`E$0tey?vj@8WU+r(q7LKmqZS)9s zU>}W9bYNc%bwC}c$bp3#>VP^>kpqh~M$v)&G}HlgpdttMAAjWWNTH0IT2<(P{f8et z&nw(hq3k(^4P0ymd4OXMXfy4=;#A}*lDR^+P_irqP;2$MODTpLW{Z9gOvjp6EE8mU)2umj#sa+ut;zd3x1vMV}>A+zc8=eFCAfGglXplv! z8Q6g(>A?SeZaVnWHVyGaF;bHLt&c_eS7xVoo^wwQsQn&L982Xf%>ROCeF zhv$g#_r+#kx@2kWlDe4Ph-G_fiZfad*GFf;D}V@L?W<1_?zTmNJx5?2BIu_xI|;f z4zS4x$b6sUgfD_3Og>y?8SarL^b}3Xfg_WVBWoU*DNznAcAdZh@w9_(f}rRs9Fhb0 zn`2hU)(YxtH``&~te){}5x*-#@N>h_Iz`B6iSe5l)XxjHaf4jiqa z4yXeaIdF`II-m|z}=2Yp4V2Kt&FmpfQRLoT#A=r~?%_aFT{P zpbk{zz{wiwfI3i-1E*+=q64RDr~~RiMGl;%p$@166*+LahB}}QROG-J8l&jInHuVV zI#7`VXKAPd>Oe&foUNe_r~?%_aE`_(I&iLrI-m|zVP^>kpt&zr~~RiMGjn` zF^UdcsG$z10~I-Nk%l^;4pij8#Tx2>I#7`VmuQTl1D9&31L{CU4qT?84yXeaIdHkg zC^`U}*8nyF0F!EW)M|v`*4h-9YWargO!XL5n+e>7DMqstI(PoBwuPO&6*})*QkyO` zGk9mMwhd`M@U7bRu&LeO`S1<39T?wK+fmH!>9Ki}+CqEQ4Cs9L3AM94kEeIP_n#A1 zFTZl-iA%DpZoGcwnzieeuef^2x-~bf%vK@4cFDrU*@~-{UwiG!Yt}B=FI#)fsuhM@ zoL#YI`D*NfS@}}veDqA{e7p&rPkaPApL!^CKC=Kicl``HpL-c}K7ST;zL-Jho{vK3 z%MXLjSNDO=*M1J2Z@e5j-#QyQ-)TYTyB~wj_iu#G5BG)6kA4B2pS%J(KRX9Hzi30} z-j74)R}Y8IZx%x5xA#Kl_pgM`AJ2u(pF7a`%O{}ow?{zdAB&*#&tF34->-tsf6s$X z-i0oF61r0!3EfThgYKrkf^Pj5=r+%XZfhEJ+n<7N_a^9WzCU!g_%(F5dNp*XUjW^0 zHiz!EpN8)CkAm)wi=n&IZ=gHtHPD@NA#``y0=m0?2D-aH8oGNP0NuTQ3*EV|h3@=| zpu5kO(B1bg=q`E;boW0Hx{H4Y-2-0--GeWN?x9;j_pr}G_wdI;_lSd_d*tt-d(`Wp zd(0)!J#K609{)M$p7=QEo_sKLPx%9MPrDVmXIu*1v!+A$?7N|R?&G0*{vpu4;E&L~ z=r-tHav5|ln*rU+KM&mp+zj0Z9tz!+e}e9nZ-DNq%b|PqHqgE13(&px3DCX%Fz7z` z&(K}_M(EzK9J&wP7P=4nB6J`AMCd+p33PAz3v?g-Cg?u)0nmN?cF?`~9_T*tNzi@r z;n01`U!nW7H$(RsE1>(V?VImrG@^|RI<}J{D-Ad@*x+8RN`wDd5_*Ce=`AF#A{txKB^{vo-`xVfA=T6Xl z*H@wYo~J?gz006`=RcwQ{*gPO-I~?Q*R7qsc)_9ti(FHmqvk+OV-y{jqM;6`0~I+i zRYM(62P$%46OB=HU{j5a%>naYBTRg9nk@+jl$GYjNmOx66=xJad$UP|d0jWn0L!T8 zy?sDg?*)T(syL>KGY0$GfmHwB-gU>>byVkB%Qm(o@4f3Hcj;-}Ev>pNTWBR$VY$k- zTmhT)>e*VX-4(klY!lK*LP#T_w~&MsoJI;s=q)6qkdTBFlF(Zyfe->A5CYtsGc)JR znS1B$d%Np*$;nef#nZtOJ*0c?6SJ!&n0s<^?-3;b1Y(716 z7*EogwxR9nT95YuuLlU8c8#ISywHjq_FCKI9?0_qZXn==E_Jfd=0#qEhY1XzlCVX0 zMVC4aZBZIY`}wWN2TPZwVS6mQ%=ee2bfjpW*HVpBKg!NcFktj&{C)R)J*- z#vYJ1q@jV>y z$s!UbO4vv<++>?^2Nf6luvNqe;K9(+A`AI}Z$1Mm$e$m3%K0*hv+C!dc22+6p`D0g`ezhnZx6 ze3VcVkYRu&1rusPBe)3qf$8qB2lp_blZaIeVYaFl48yon(lm%TT8S5H7}5%PJHiY` zOMGBw5;`(emn>mi1t@0LkF!ga1co+Dws1KqY(>(ZvYWWd$|6yza)Mz9fDbR;Sg-_X z60fCfFqctd1+3{B&IIr7|1y(QgVEX zh@{zeg$loNC{)-;MG390k1|?mJg&eccJUP}v=36z>N=@TEUinIp5OzR*`O$&z_1DM&MC})hT07o!O^U|D@5vDa7(=jQ9ymyksGxF=QGzKI|Dr1r|TH`@J zgJQg8lv6@0G$o**!c^K#6d5v*^O$6SBcdcR(^FDLnAT`a$0P`2W1=y15>Hl@QXo1z zm`eL5r975YM97>w1(|>>%W@yU%m(AKmomu!M?^_trl+KgFs*J%c^5fbD8q)5Y`w7@ zL#otD(`c2NnB$Cr)Do@~1;LO(f?1m9NuKX`DI-j)9a7mv z&JIekA&{j_L{Xe3Arn=Cq-sBvl=$kE1JF43g*8DPA!=Zqc!?nNs+36R`9#=AXJf!e z!eN1>19+A%+wxMz7=TsbTHQs==4!NIqDczc!P^g76xuKpKjozb(YBwjvVvJs{;S29ETpWVsmu6l^#WAXf!u33CkG zh*`Ux1ZU7}0R@E$AH?#S-W^F$BckE3Z# zWr;?m9#;nncVpgsSi%LS_o3^GFP7MJkFxW0V0nuumM@2Yd=!|ulu4U=(#pyLNzx!) zyXyelfw&U9E0+cmQOHo>PK1qt52(B6J<_JHNJdetSb-l1yacy~CnBsD7WjutoZ9!I zMxz@JG*VF%z}kncI)qQS6xK@|mhakt|MGg`PRhQxFk4*-Ev@6 z+kjvGoTgai!Kzh`qJk}Rt?fV+EZl+BZKEi>1n!TK1(a43uhZp_IZ(N*)vM|HnEIf-n}#;+ke1I&euU z3P%>O(gzr1ZCa{|3O0BVsv+!+!oy{lTGkajsmq)l*pdqL8hHHR!>(Qz(sI>TNMOsp zNiJdX77Jxf@q!%imfMA{0S4l2hE!HX1qD7$pCL?$ejd_dWz!B^nu@}ac7aFRR0@OM z4slml_z_46fneQ^`do+u-cB@|KF)8Ky3the*I-kpLYNHXy^df~r(`<^E=xt>N&KoH z^ebkN`zl~t#Z**$>KgqVT5yi7yODknRdubyf%%(0|IRwzt0(r@I`1eBLFc@;Jlq(>|HjTs2fufUF>PXbdAk}p2z;HV7-_)UkpSF<{`2jeBVcSV6SeOI$ zCg730k@D!4BANmXEj8s~ns?;D_EZ!^7TXKN_-uvm2h2gK7hx(vp2h@R@9JoP49Z&~qa^OadUUc9l4Rt^rsL6qw zHPiuhpe6@)Yp4V2Kur$ZqS1>E+^V4tr~@@QaGQoYpbpgJz#a{CKpm*bf!j5D(SbWO z)B$y%CI{}+PzTh3njE-GLmf~DYI5Lijb3!%9u0Ls9jM8Hr)sDJ>Of5nJWWF#PzP#q z;OQE@=)k=i>VP^>lLPl@r~~RiO%6OmqZb`8d7m*y8)IPUdvjkOVe?quQD%|lkAuo0 zk5P53!2RYZ(Cje%AAfJ(fbD(E^naqS?-Zd~#xwi+P9@E!UfXwuImXWK|LkRbXEMH` z?<~=Kp~rBNzV&vmWv2hLyZUbPJno(!^`2ehBM&yO8(zHc(F4t?>6wwyhlXdS4mKB$ zAwNC5e)HndeIpYS&HdBE8y8RS9~%X7^Wq1lM#iyfVB~$K|8p?<^B*w%U;I(i|D`9J z{x5&c^nc|yO#fG(Vfw#zs_Fmw-aX;m1vuZ8ur|4U?Vt+a^1C)MU%fFxjae zG}-AdFxiRxG}-7iCfoZRlRfYUCfoN+lRa~#$sYO_la2qZ$tHK2?7(+THuZ-l zn|a7&&mJ_{!~bfsM}N*_-}e-gJ@AkmWWRO2$=-03$$sapCi}euCVS%rCi{bro9vHX zX0kWmV6wL^GTGbSX0mrY%Vh7m&}8ragvtK+=`^Ir5`=584 z>|4(^*|&#G_J5x>*>_)Kvf@_wavqOgOZ}(^Pt2bI_~q9u`T{<2z4^v#8dr`@4(*(r z8XuXNZfst&Va*0t)Mu|b(5KOh4jiSS4yXe)Ij~4W9Z&~qa^PrO0RwF0s@Zfx*1>^C9S7-C~G~Svq~M?)UiirZ`+ZIkIMkt zqNMel4rQ$ebXKWjn>zL=z3r105O7@A&0r40=F>BW@g%Kj8``cHRX&c(EuJw2y@OpsYY1bIK%nPl^VXw7K?twf{ z;06L-=u#&OZC>Oxc$mNdDhXS3S9Gb<&=#eUw4dLKe6Vy`8n(x>%Y1)XN=J(3c`emA z^`qo1B*qOKg$!msyiPFTm@Fc3qJ)h!!%emscTjP$4_ify03Hlo9Z3qtRp7fw zDOS+>34TSQ^)^(4309XlPqo{fJwAh1iIWH@c43wq=)5havd*5+xAVYIWyJI3R>}85 zft^(GC!D3cp{=mP9v~@qbC^j6$VUk^0T~8ZQZS(wG=htuADHeAdvFf}I*C}t5N4}- z!7z+FB~62fqm_8Eh9RwxwU zt*(>m#L~KS=?Ol7nGK5a35=@%M=(qC(wvl)Fr+rz0DwG+F#|E&_K1h=l0qJX0EH3Z z6F-1UKIg?2;$F&F;{i!A<#`Muk`h`$m4HC`pec~f21Pl{W0C=mpafPMlA|qzEG|RVtMhu|9n1LWA=ZAz2DB7R`Bm{A)4Np+&1dy?iK}=Fc zE6W@J+C|I*7YIsdg-QYn%C`z81qB!8G06ajMM-tKXCfK3z{;<}kb#_?A|*$=MB6Z# zK4e^mY4$7~OeG1eVvvVW!H5b`P6@4`Ou#^8K7g4GigL!d3UCCoG%w9b8DUzZF&&dq z$a^PAJR`p@OJhKiq%tNcqctAnGbqMeMmZ(4LQ?_?Domx_M3Er_Igd#OI3h|CGd(3` zglUb&bWDOUHYOTFC-G!eDFvdlgQ>J{Qp#gVMTE?`Q;-SBvMl!j%xo|&dnuC)a72_O zW_n7>2-E7Oly{M{g)(d?$<`aoF{DbZG>ulNi8;;~NG;(?Q4kCnL_RXhV890uv%*jZ zSvMn!Vi~(2`uGL+{Y_3KdCYq$spC>{2 ziX0YHZKuvAtGs4dS)A()iPzTh3njAP;qZb`GMME7>2WoO)nT9%`4%FnpsT%5lI#81Xr)l(} z1E*`K1L{Cc4xFK(4yXe)IdG;%FFJ6R#^L1v{M{VBko}81_htxNy`!voj0;Aq7Uk#f zz}YPW42K$i&UVPAHc#~6{WzM|RF-H|>Tz|Ta5v`7hb3HKdLO#3_+p7o_b5A02bQ;p zV)=6T$47ygOPRE}C#|e3kR%P#wYv_$9f&KzyK-qD5rqr|?nKxa_<*{5-Xm@LiewbU ziWT^Qz)Nszcp}1jVS#_R#HoERYBajxKqD1J0jz!4szdmMOJTjlK_0Xy3~Fvu&@~6F z+rn}O@t(xBMVN0nx;Clq+F_5#!7CF1_v3bE{W>hKJSq=f3Q^)1yt}eXpxl# z4Rt^rsL6qgG!91xiUQvX9v)ca{s__*5Mt5A;po5<@|`Yj7X=6k`#>cE8!s0McSfm*G>f%wAghVH+s{f*hg(KVb#w_pd> zYV@K5>on8>b)Y5()@!H(>Of5nY|!XM2R3S`1L{Cc4s4ox6md%_jf5EOcNjtIDTR5;e6-A0O(gzr1ZCa{|3O0BVsv+!+!oy|QZ=qE& z>x;T{?7)^(px40T2OoCzx{#KuzCr?9_Dx}lt9F-ARJ1S$yybQwqhX@`=I|}bs;Hpe zr`1DX4}Gv|XH;d%v~%FnR1}W13q0DUQW*4hh`YjqM%a`m(&W?`l$)~yY%&;(*Whw| z+SJXX3JOF8Q_Ne26^EXdIxWoNz-6f@Jc-{8gnq>ga$f~(tC)(4PhF#*6D?NYX8K7{ zS(ENMumH~&(AwR1>Y3?V=N-koJGU;Nb^eh{c)G=6eLM~hT%L-8NCftS-y{#if~04uAzDQZ zhiG)!0X7){neW$l!GoX(7auOO4A)2#YKj)*z!k|Tkc9`Xw9pz@tU7@M;%OUQ2SHI) z*d+(>n**cy1DU%7v0P!lUQSd#hA&yQpH-G}nKUoqhxlzpATIbalE8R|k5_ zfvYvt0d=4z2d>dj2h@R@9N4MRiw-Of5n+@PTjr~@@QaHB>qI&hPQI-m~JVP^>lLNao)B$y%CI@cO=tT!^ z)ldi2ftnn+O+y_}2WoO)kA^y+4%Fnp?Hax4z#SUufI3i<19xhu1L{Cc4&0@o4yXe) zIdHc|FFJ6KhB}}Q)a1ZZHPiuhpe6^NrlAg~12sADbd6qg;9d=NKpm*bf%`Pn0d=4z z2cDtPiw>B)&zPf)F|hQ#xv!6~d93d!v&iztL1mH0s5(~QesdIPc9?w8^ZN#D?_+@9 z*LRB0EaRDdeW#M<*pa?7%rSO;e%yEa&Ln*NF@0x=-U~g3lk}~(do45h@h9}%=6T#5 zV%PY{gU#!P7w>!YKyzw(W@PlC;hCv}&BbHLPY#mCco${CSNsa@}cuhzUE^lU-wdzZ@Av%n~pO1 z=C_)B%K?*Lc7e&ae%$2SUS{&`H<T=^80T# z`QBqq-h8LYADl7y*ea7h^V25Z|0^Av<|H`8#|Fv}{ zfBol8{_DSB^54AOO#b`pP5#C&nEVfa(d2Ks!{l!{!Q^lKQht0q-mzsfN|I-W{_j)t1_~~X~>B(l`gugNa+4Ic6z-4CO z#IKrxlOHn!%kDJ;r=4O3PXB8&aORJgfwQ-of#v^Y1{%L^1_tjl1LrO?1Lu7Jzn1z@ z51yDm1Ne*YqA%bR*PCy=rg7!iBi~1AQ93=)h4L>VP^> zlLL!1)B$y%CI^nz=tT#P(Kyl^fd3m|;+4~EMcARN(l0V__z$PElOI?=}^{sKxdUYwy9%}(%U|10RhK#-3;b1 zY(7167*EogwxR8MVP#7g%;D7Y>6ycLlGd~hZCBTN+yVkDaor5&Fl;_Oa~Mz3nzo_s z>RONY0j~!Lo_39)%e>Hv9QIn<1Q$NbiaHN281M0x7-Hvv?fL4KJ3dSCgHl(DK zYe{7f$Q%io@UxId$h;6%Npb#etCra2z zGu&jGaR(I_`><8S2;jlc)sduNTm`<1lwt*~pWs&{T5m%&m|%5@^HjUt+2b>Kl{krj zVi#t)fzI1vD(mbCeLD{fRYp8dZk2p56xc}>f5KVH8`=sx>;aN;H;0*IfP9ot6Odtm zB?S{|K_j>b`hn^0um|@rpp%GI3}Lpa7YxI=Q_?huI9iDpYZ%fBc{{=kMoWBPXA(Lx zRF^DaTm>j*){nDGl>~-1Otx@2DQrd3p0b;`%E}^9sd9p02!IbS-dL~%X%$-#6eWfL zXmAW&Q>gkOf=EHZ1(TU%fWxB1Pfw6iCUK=h78x^;8}b_qQVMCbUz4RO*?ubbB&1v` zZEk&{8$x>=rd7OwguKC0AE2KNitPAsiUm!9AQnAxBxpTM{Za0Ih7FU?6= z2}5eb4FJfK7&8#VZI5`^E-BDT8N?)Iw6e?rpk2f~aDkwNR;VPPpnR)fQc!SV9+M1k zSd>(!dnS@m3#|Mq3>nDTDN=H@OSBD>=|je4m}bw?!BmpaDh7E76^y75<&@A0$^;Bl z<^!17peSdIs{ltZOY_p4lo6&i8q+Z;g}ir?#53~ivNQ%HNh)KKGFsz7K7(SsWt3Aw zD>Nmbpu$wzO%xe2kn@;ifFq(LG1F60Mwr%UOvfY$V`HK*bP`Wil~N!&JD5uQCZ#-< zR7A*}I|Z45EX#5qz|02YvX?T+07pbgVy360j4-WkN_iJKTPVYZl5D-P97C$qO4DeS znwaB^fz%SN6a~SMLF6N|3^W?_JuV;9U*F9op^~L^s1Cd==nt0NM~cfN5Wx&r2}}D zFWd4`#u$KA;ac5A%;sveVWLS2{dp3UugGCR)pqJ^Qm$1&%?3O-bPcS7CZ1H4Rt^rsL6qoHG0v3Q#8~8 zb)Y5(mT9O1>Of5noT{M?r~@@QaGFLhI&iv%I-m~JVP^>lLKdJ^r8c2X&hb- zz~9Z`3)#QOb8m*Q)jP_X$GBj$YEgdv4xHUGz;LMH=WK^;YV$-7-jAbcO=XEjr5;xY z3U_1Pd|1K-ruU)iiZ7PfbdR$0bYOXlD3&jWe|!{}xs*wpd(z6v0!h*!UAyZ5+<~|f zyepRm5>d!d;7){%fe)y==RMM9K13Sa6c}n zRuEVj&`OXn4Zvq^kxwa7+-(QMr34rdUX#e++T4L0=aQ)2?eiX4^9Nf+Q9uPhgBDp? zK#sI!Tk%pFi=tT!E)KCZ1ftnn+NaJvHpeXRI;NgKq?vEgC0U;J$ z9F7h=A>ZlZc2R(!un$xsuwf}*u%siXtm`3m0InlkQTf)y*|;P)h23&sRoj4H{+y;* z<-w{|j-rAsbFJ+_6)fC=)or6Fyaeu#kp+}i6R*?dkU3DftktXO`sB3{cgW6pWNkdu zCW>OH@DhMFXypR3OgfD|53K`uRdikMB;kVSK9QH$>Gat}2iD9U1(xlDmcnPqi)vtJ zAE?zD9EdN>Zs`8I+TWN>99_d{bPIN1twt|8uuelAPzP#qV7-PqpbpgJzy^(8bYP=~ zI-m~J7Ghy%Qh_FU@IsBoV7uVX$Ll^qDYavTu@0n7qY8SyQ|q z2fXEWp=*GF_M5}ED667^dY`7xAP1%u%C>dj(o__Vv)QzT!zXqE+6~bg7?{x%|IwjjVa9Jt}PvTbvpA)&4;K1dnD2PO0Kln}Z zFf2%VmKvf})NqJKmmOe}5s>+QjTbx!ig5AaGRts{G@+(wK@MDzi~?DB;7SXvfyJs5 zI3S+3(RC0MRfS!00KYjfnm>@aOAyNy_Uq+D(befk@bIg; z8bw#9>u`0Tw;Z@yLmf~DYI5Kj4Rt^rsL6qy8olViQ#8~8b)Y5(uGLTn)Pb5D*rm~n z4qT_94yXe)IdHv(I-m~JVP^>lLI$u^r8bdX{ZD0Kur$Ztf3C512s9YTSFaC z2WoQQ7L8tX;8qQFKpm*bf!j3H0d=4z2li;F1L{Cc4&1KMiw@kOp$@16H92snhB}}Q z)a1Zj8tQ;LP?H09YxJT6_h_gC>Of5nJXJ#-PzP#q;AtA_fI3i<15elJMF;NHPzTh3 znjE-KLmf~DYI5Ki8olViwjGa*?{7T2IW;{tIWauAe$BeUMss3xa_`v0gTsTj@7XzY z>EMp-+g1(@HSQdlngDidV`ksjbYpaKe7rd^(*QU!(YX1>YliN+@rK5Db7o}k$jnIN z{{54q53O!Iyl-rDA803LM#d(fY3ktU*vS6I-ZALK9RVL0nHqsMH~|dW+nAi$*PLpM zjUSktni+xlG;vL1_x|R{bhFXiJ2ul89XU8NHhFM*|D%ly#~x^m%rr*!@4slZopAri z=tGTz2jG~^#^lu4gJZahJ5=+5$*E>z?0j5t(4-d{h?zYi=&GC`xwa~D3 z!@BjC46VCl&~et4rjz=n0})~|(oaGgV7Ie0kQ9Bf=Q)f}0boEjd)&95Ar z9D+B8*PU)`UbA7%hQY?|x9_@oc<|uV#MXlc$M$Z$e{{no%`IEj53SoUvUh0HrY#$X zE_-0h=An`1rp=o!y=49UmtD3Vjxs&Ab=scshRIRuU38{|L5VkNV`-uT{ao|N^xnbk z+jfnQJlJgD(Jk5vKfE`=57Y4A_`&@%V?(3+MkXej`-h%0G~JvUYfi7hPPhr^+&%V4 zbN@70@!&NRd&frLM}KDOAQ*Ku{bb%ewYLd=-F5dpSM3?JTeue7KqG_M*S-009A z_}Vyh*YMz`jh8umH?Ws%armC$!Oeq>J&zuMlZ{QxTnhVN<&I_td%Sg>ojo#sV1ILZ zcXP__hqJeDyJ76XeKWg9X7;V!zHP0Sx0-=xS?CP-iI~HTJ@B)AHGb)Lj!jL^fH7c^ zh2RW9umIq$op4pK?%qE#(Y$K%;KYo3Km757mi^7nZf{OMr`y)zbnuOixqTaZ}8{=l$4(GCnhrL%nL;MbqtI52(b;J3QoI52(b z;Me-zI52(bF71^A)0Yl@XMLhM43|I4mu~$N@VC13iRoLn{t5VdUHZiIwObFMH-0MU md$;}x_`6-&WBTH)KlH!dt#$wQ4gVTv|4koO_%E65=Klfizm+@y literal 0 HcmV?d00001 diff --git a/test/test_foreign.py b/test/test_foreign.py index c6d0eba0..98b5ab7e 100755 --- a/test/test_foreign.py +++ b/test/test_foreign.py @@ -41,6 +41,7 @@ class TestForeign(unittest.TestCase): self.jpeg_file = "images/йцук.jpg" self.png_file = "images/sample.png" self.tiff_file = "images/sample.tif" + self.ome_file = "images/multi-channel-z-series.ome.tif" self.profile_file = "images/sRGB.icm" self.analyze_file = "images/t00740_tr1_segm.hdr" self.gif_file = "images/cramps.gif" @@ -315,6 +316,39 @@ class TestForeign(unittest.TestCase): self.assertEqual(x1.height, x2.width) os.unlink("test-14.tif") + x = Vips.Image.new_from_file(self.ome_file) + self.assertEqual(x.width, 439) + self.assertEqual(x.height, 167) + page_height = x.height + + x = Vips.Image.new_from_file(self.ome_file, n = -1) + self.assertEqual(x.width, 439) + self.assertEqual(x.height, page_height * 15) + + x = Vips.Image.new_from_file(self.ome_file, page = 1, n = -1) + self.assertEqual(x.width, 439) + self.assertEqual(x.height, page_height * 14) + + x = Vips.Image.new_from_file(self.ome_file, page = 1, n = 2) + self.assertEqual(x.width, 439) + self.assertEqual(x.height, page_height * 2) + + x = Vips.Image.new_from_file(self.ome_file, n = -1) + self.assertEqual(x(0,166)[0], 96) + self.assertEqual(x(0,167)[0], 0) + self.assertEqual(x(0,168)[0], 1) + + x.write_to_file("test-15.tif") + + x = Vips.Image.new_from_file("test-15.tif", n = -1) + self.assertEqual(x.width, 439) + self.assertEqual(x.height, page_height * 15) + self.assertEqual(x(0,166)[0], 96) + self.assertEqual(x(0,167)[0], 0) + self.assertEqual(x(0,168)[0], 1) + + os.unlink("test-15.tif") + def test_magickload(self): x = Vips.type_find("VipsForeign", "magickload") if not x.is_instantiatable():