From 0011b9a480926c2eb1da5e9a9234bbfeb9014606 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Mon, 29 Mar 2021 10:26:47 +0200 Subject: [PATCH] #417: TIFF 16 bit FP --- .../imageio/plugins/tiff/TIFFImageReader.java | 62 ++++++++++++++++-- .../plugins/tiff/TIFFImageReaderTest.java | 1 + .../resources/tiff/floatingpoint-16bit.tif | Bin 0 -> 156436 bytes 3 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 imageio/imageio-tiff/src/test/resources/tiff/floatingpoint-16bit.tif diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index e1c51753..a5cbb987 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -781,11 +781,11 @@ public final class TIFFImageReader extends ImageReaderBase { throw new IIOException("Unsupported BitsPerSample for SampleFormat 2/Signed Integer (expected 8/16/32): " + bitsPerSample); case TIFFExtension.SAMPLEFORMAT_FP: - if (bitsPerSample == 32) { + if (bitsPerSample == 16 || bitsPerSample == 32) { return DataBuffer.TYPE_FLOAT; } - throw new IIOException("Unsupported BitsPerSample for SampleFormat 3/Floating Point (expected 32): " + bitsPerSample); + throw new IIOException("Unsupported BitsPerSample for SampleFormat 3/Floating Point (expected 16/32): " + bitsPerSample); default: throw new IIOException("Unknown TIFF SampleFormat (expected 1, 2, 3 or 4): " + sampleFormat); } @@ -1969,7 +1969,9 @@ public final class TIFFImageReader extends ImageReaderBase { case DataBuffer.TYPE_FLOAT: /*for (int band = 0; band < bands; band++)*/ { + boolean needsWidening = getBitsPerSample() == 16; float[] rowDataFloat = ((DataBufferFloat) tileRowRaster.getDataBuffer()).getData(band); + short[] rowDataShort = needsWidening ? new short[rowDataFloat.length] : null; WritableRaster destChannel = banded ? raster.createWritableChild(raster.getMinX(), raster.getMinY(), raster.getWidth(), raster.getHeight(), 0, 0, new int[] {band}) @@ -1978,12 +1980,19 @@ public final class TIFFImageReader extends ImageReaderBase { ? tileRowRaster.createChild(tileRowRaster.getMinX(), 0, tileRowRaster.getWidth(), 1, 0, 0, new int[] {band}) : tileRowRaster; + for (int row = startRow; row < startRow + rowsInTile; row++) { if (row >= srcRegion.y + srcRegion.height) { break; // We're done with this tile } - readFully(input, rowDataFloat); + if (needsWidening) { + readFully(input, rowDataShort); + toFloat(rowDataFloat, rowDataShort); + } + else { + readFully(input, rowDataFloat); + } if (row >= srcRegion.y) { normalizeColor(interpretation, rowDataFloat); @@ -2008,7 +2017,52 @@ public final class TIFFImageReader extends ImageReaderBase { } } - private void clamp(float[] rowDataFloat) { + private void toFloat(final float[] rowDataFloat, final short[] rowDataShort) { + for (int i = 0; i < rowDataFloat.length; i++) { + rowDataFloat[i] = toFloat(rowDataShort[i]); + } + } + + /** + * Converts an IEEE 754 half-precision data type to single-precision. + * + * @param shortValue a 16 bit half precision value + * @return an IEE 754 single precision float + * + * @see Stack Overflow answer by x4u + * @see X)OsbaUJu~;m*EUzsoEN&PxK5og4_&B_9 zbBQOzcydfDgawmFrt9~lii{`2cosLao}Se$maHyiazw`U`*TLd_4;!~miNt>%#z0~ zrSZE2R+=|5&R{&BOFcwnT>mZBEt#bd{*|!|hwoX@8)fkC9~CH ziTYc{JJ{35y|#aFcyO41aEN=ka_$_%O729XfFSSSj$t+nUdk#1_|KgM6*!d#Y?J;i zUaC`whgTb)aCc81zkr|;h3>A~RLDKRyF{TzLJg)yNI4(>fXZD$ed=|oS>LNm8!yGX zP^psXig!{wwGCXCZf^NO+qPh0NwPu2I{)TyUt5 zyFiPS7t71;l0vhBB6C3M%@v)D;$(qhSd~#!hINnp6e^hxW5q+gebu_{1 zA08f}I-MOmcBDJjeR zLGF6J9-hJN!%Gw@r2o*HPvmp84SDlJL1DDv9TW2Sa5GPAB&UfA9?e*rKkoKX0 zM$^2#oIZg*ZGD2m!|*=#o%dmv)~NC3)_49~+qUn#Gc3G92YiCa9(m`TVf8zQ_&DqO zgax+`_429E0b5e|U5yWk8bZ%NUo98v;}ISlT0b~Au;jlE%i_+M zx4eA=Z)@`@?-A}(QXjz-!&59@pJntB%rXvrKr=3tm?dM>Q3FS#w@0{#OD#Capnen% zTx*F|HfBA+-T}Uy6I9FFk}h?4d#S#`p=~|FO9r&{@bhto2l)CHcfL(^DQb)ZwMtM} zxJQtePnGf|F@X*U@K(XollNsjJSmp(@}WFDK&E6*@TL@R&X?l_UtdM`GWw%N4cFUa zRb4*VtGzxHv1${w-oaj2{hN2I`fvj4C3*tIOTIv{tdC47yv$Rco?e_Ncqzd6Dp5b= zQdz7Ysudc5lZr>6OBwxHyz$34Z;n$u5UH{+J`2ZzC*{HW3Y4!etFYdlK0NF7<|p1! zO{|})91w;Bud~a5#9?Vn8})qJMNf^&2n;abAL0=j=A)ydM4>2nyqPcFOb7Zs2Fg?q zFMZ-D>7|c!AMfJMXsK_T_2$mV+X7<0&V+S=S-;EeasNg~f1jZEkYZM4l#08OuwdWt zjvk>tW&Ci2Bm~4}t0@>yWAUDx7m0X{>_+A%v9tKkui0?;Y?#qHE(9*j~RLU z&>yqb7qeJ4qOzN)q`zJ!B9iobtiaO_vCq`~kcg5(C_%D;X zEB^k8k(<WMs8Af z#psauFO#|}{{D%Po77z~Iwbzfr0$Bpe`4e&bytiIiT^UGyW;Pk7`aK^6{ADqzf9_` z`1>bDZc=x}=#cm?le#PZ{)v&B)Lk(;B>u~!?ux&EV&o=uSBwsc|1zn&;_sgrxk=p> zqeJ4qOzN)q`zJyl~E8W|(o<2c%z_TNsL!-WB68Djvu+ zuF{8u1_XuIY9AibJ{%KL>WQ_(!s~hBF+ih4m7s7RpP=?_^$b0(|1B37s$XX^?yVQl zNiR`0AY8vk&o=Ay39aeT)~9}j#`Q7D{4w(eJTDOJThAxFeMl|O)?S#I!BX22Y6-@# zuf^R`&*EbVx3sr}=v7(Lg}f<^S4K5u1H*$NTa>}GeL!G%K#)--=BG7Em#fjFn%Nt8 zCKvmL!XPvLHye@F<%w$o*7ruUNQlp#E;(e98uTyT2>FZdhQrkzTt~VCm4! zQRUNh@bSX)d3b&jPuoV0irRj)!=gro9@op_U%lCu>OQ_^H8Fm+KAvxW*U#4T3N+Je zhkBK6qSs)2GJAyvhcv=takcdk8W7|c)qNTDjJnvSvcciu!EFPBgZv_I$q<#JH^C+S zo2c}<0e=3j8R?@kux)S3>sU#C+iZgyiGSTJ$)f%mI4Wl3;hFEKPpO`f=%bC45P$Db zy~C52Y}2;@{?);m#!?=~wXekkM|L2NZ#`8{w^$-95pIz$-eM`!(?~O}^;)qe4@^m= zrQT$ z3t}%4G1yk4>?0$!vc>7^i#dT98tuZknexl{32#z3EbC@zieXe4!AQ}u7@1I zGlnrS1_mr;-(tmRa^1I3(63X41qOKegf$GTu7lYv+V7+^@-R6o{!eXOR4MQBTdDm* zgWHEhOG*`NoF9&wrz_OcYc~%AV;$dkv=0xiFamFw529yMjA ziAs)EIIVwhXqPg90e(>wEtC21m7|jJ$y0m#_o);$#{tHG`)y`Nm35kFVW7W^n^S zg#JTF>v1@jik!ua^z25uK7`$jYrTXeWJr@HP1-aW(x%OjC4IW|S#o5`kRel!+}X0_$d)a4 zmJG%x@{f5DGj#hVefn=Qev>(4#?09>X3Usf4>D#qZ^@F73L-XJvZTQWD3aW*kR@3b zx8zyeBF-RIlSlmNRtj60(#`l_gY^$uN=cR?WvbL^(xyxA7BdqmQ1YnE%oev4Zpo9S zNR~2nsx&E+XW%h2OY#&2v$846)bYqxsNIiTs_Y|wSyHxeksNimc=8b1>p;2GMMu@U zcj3NQn2>Y&(%!|&kFM`s;rAKgVy=S?F8chltj`~Z+FyE5(fZTOzRSn_dHC|fSu3_4 zx$>x?Z-;(kXRq9L^y*`&QX{{P{m0E&wf)$&Cs{1Xl3{C87;Q?ODy3jFp&*+z1-77F zp=>F+A4g`_Td<|>fqQ%r&kLcwMwP3V!z&E#7fq!%Aaya}_k-Ao8M(YGG!VmmF1~3( z+%2%aZ9>FJONQjeZ)UNSvaA|&WaFF$N9bIy53ZT&-)YIEL+y*)EjjzxigST4wC`S? z-FL6mo`RRstsPslLARot+GhCSOqp5F#g)Z7tSnLMK$DjHekc%O$-O2`XSbn&WBv19 zcojVBVUH0TI^Jkh<+@xVTmCy!p8s=ehwsg0$M=8NW|gup?FKYOO=d z9u8c8?2nL&g^xTxRM=U1_>LY`TXA>82F=P4+K;_{aqRjgrK*-Xzy99yRYza%^R0G& zYug1icje#zB<&OVhsn)E>1>3h;Zbt&(RJsF^iGkMebshqh2L82I~rkGsm&b3wqAOn z+d`j7^PBzlWcp+MC7(=HA1`nGIBQz}4h!2n&eeT%@TNme zI^PSa)j#w2htG%ixZfy4&pJQ#3A{J>z`7TW9FJ?=>QQs}lJb@2+_~2M_Nm9uH!iyV z`oOZIk2Y0%d9fP*cvz`hJ!%~+uzW+0Mn@j@i?A%c`?~+lpx2|Ho!ir;d;c5f4)&-% zYU-V55te=1gM+WVD)pe%^ZWT9mpV6m-yS*r==95(YgUE+d zPQEI>ZO6%*tAZc)*uTi*`P3uq+BrvFHXmg3r8ftx%QG#{U$+-L?{IV*tZVzjrYenI zW;?zn)BGM6@BX?@9CByLvUC#ybLMN9^Hke)zV;nIbo4q_F2eHrvPZ)kPOUq2|Dw{H zuWu+ddw;v<-Gxre*KEDIc0%rhmmW?j*F!t`TUclIuRg8o6_}I%-0JOvhg2N;W5++b z_2@h-xZ(9~#aFC(_LJwD=Sx;KKAJUkhyH8Ujr;l4_xrA&sr75C$-Ss#$Fc-0UcO@M zkIRqweB+?N@Z@oVj)PRenDD`ia^_FRsgXX78*c8}4@N z$ZonnX4A_8lhyficeEFoF4L2r%$LvdyzI79EuWv=vnayS=+`9!O4S@P=~&VHUZclv zFLm@%KHqE?`gAKL{no=d7)}!#1uu9$~q2>`wRY`|9m~<#(Wwn(Jf_&+rJ#isw@UUI-;O%`Z7;-t}dN zAFX=vszrpQR+nc(i<~>C-G1m>YImh8&-R|%+xB^_g^xBpyZ`t__Y;p_O_}k^xg_|Z z7*ulDzQsRmniyeOQ(#VnrSg*Tj~6X(w(0Pr4(o1rU;cbz(W(2o&3L%(RjXzA4i=TD zQX|vsa~FE_IkV^W#eFZ&J@~d{t#Oyf?S7uF+P+aWJLQTvVRB6cjj62#h6an9$x_DR zjmtbwWQE;v(dUoxaQq);#E=QZWmxu%vJjD@vGdd2uZS&A~{%T`E+j8j`& zS?Ooe8#ig{p86tAs^1{LR@6dyc!hX8d>$V)Ik-clUYAQoLZWHC zLJW>yr)!)y+9<+y>6EKy$M6v3_1$J-JbNfM3gfHwxStu{t;aph_<5sD{kph@a(jsJ zjD9Y0PnUQ&@)nqHDHj~l*`T(%4JO&$wAoXyb6B`f+c5VkL0-Y3A;D4nmDwi!E=w`9 z;J+N^H;R6|Kz|=*Z4YW2{p^-=_uI5dxh7#GiPQK#&;eFi$H5wyX%B-jP}sIh zyejtRpU4*FzVy4iOZJlPKt`be)dyz5VOs;}2>U+ybLnjxX>AB$Fw^=c9Dy9PdpX|L51Dybe+XnCwe%SXBU^h4Oi z48{IB&EzM%Av;^qMnetmJoTD&@_Cr5OcThoOxmF!tTdZwhDC{GC5jG1!Ob(F~r?Xcem2jU7h0&1B)(U=vnxAQgsb|b%o$z;g zTM99SSOcwrRS}6K4B{x(XQ4)r4+hzM_`U4!&R;mElZNB4iOVnUlEdYb@&t8=T171^ zSC;z8#rY1-Zo=P8bD{~XVH=bA_)tEa8RE=A)<&>v#edU}SCKp#!t_jruCUC#ftyuv!us=C!LIj(|9*9)2A`z3) z>6FvgK%9>e`WxXOBkXI0W^O|1V=f3}SCMDgmE=p#O}NI*7GKFD<#tL@EwxrbyQH1h zuD&-CX<3nv3O1pN(3JLo-q4C@4&A~2nP|kP9{FbdIx5E*^U2SV^NF4^-AEbxS!b9~ z?Au?6`S3Hev`-hXIJl03fbM05qPLm_`#}u)`*Msdr4&n2$f7pt_ z4t^8k$NB(pggprAax8M8ExDbDDQ^Q!{fw}!5sov$V@9~f2v-=P)4L7 z;HYj7!@q*D-3U6veXCBpS%ZR8gg%E{N^~u+hv*w(Z3e+GALr5_Ac+p(4HU5oIphgR z7)0#obkGYpI7}3TAl{dp&xJ9S*{W=3$3wm;`_OTi@5%Nj2lKhv7dAU&VO1Lg{rTZ& z#M}?+b0d)gcIBpGJ;4T=mKfpRM!3`nFBsuTBb;c2Q(QumM~xqYQMtnmB(ArXgLCW| zdwU@-T!u@^cqN~@PFtpJ)&9}$YY!4c4P9yCRAshuRDL347i+WnTB#_ZOJsCTDAgW=TEX7HV;IiQdqZ3v{-W*Go&}{puX`k*Z_xpZCC^iNyKZ0&TeVP<|y} zm2}yDQA2i7oiJBYAI2qqy1VpNO}3i5C;E(07)SDa$Z4M@Y!q5EwdAHUD`uAq$fJdp zLN_7I`440hB+3^Cz)uF1JpRSz788k$Ap|B`1Hcp3p`@rD=u*3+^=tKHUaYM1eQCK8E{ag~^`b>ePqx3*3Tle^0!#N+T3=8`R- z2Z)J+j=ZISzeXacEewNmgf8urZR3QMLOtfJ^hjcb<;ptcp*&C>s%BEF2mwNBXA_~b z(A>FP+ATeUECMT>p>*n*;fp<2BgEhks}EvuIC3@hVW_neG=ghMNQ~A4o?wI11OxT> zdyZlJX||B_62FQ&PPKtDP>-k#ulX+ao%~>~IGu%?N{4c}xn#5tR~ks}nLQY~bJ-Ay zJ&e5x6Imv`n_(bmv=JUO!aGKI(+EXlg_y|*YZze#BWz`a-Hb5Q2)pvS#5Ir~i*K+B zzrwl&&hh=J^YT)h`(G;$m4?cF^^Q7LeW2b|C#j>f5n2$^x%t{Cl$@T^j{OUjG}nob zm6u9YrI=Vw+{69|Ghm&~2l~U{cZ^$|DvkJrltr(9TBHn9pA&%ag1*p&_z6}*Uwbp5 zi{R&6DDFTnB*&F=N)aVU3(-nzil%AL)ow~3WxiZfY%MBWRk?v&Sj?p4QgX|kU_3Oi z={0|e-Oq;5&frM>Fbsrdh{2A~6rM#Jfk~7xst3x#SllZw2FdZgXT?2VFR;Q9q9um; zY;_1BT%&YKMx%Q&<44sm@|8aVDop1tk%R z$~oli!an(Td5}aY-zjzF{%TjXu)0)Tq?T2WX-BnP+7@lI_8aoA_qDsxuz63rg=r=p zpUKIThthel2nWe4kW#oyc86*3vrXp)vl-mo0fRHlMKp#kkSrQb^&RsK?~t6Pw4@*QaYD@73cg zja6zEqsO7_S^iokA z|2iU0JI+D`>>~YP5G*1(!vtt$>wvpp3S@+jgk!rJzj?x0ZX8vy%$pC&9-1+n6TejUalo)7dI$>Di-Ck`nNhzU92tE z#%Vgr>S^C-nYB%7CM~PBMLmg6vQOKF-(}hrEIB~UrsdSOtEJ?savD*W=g>A&wi6p) z2}#j$x7ez;v##-szJ#u&a{%|P2E$5XDEtP3y$ehPf14-vfIm|374U<7F#HNxahGsD zjIfVDY^pZb_m~v_w;rf$;E_ijDHLw=C#>nfoy$i}=aX}X=;ZL6t4%%OcW{F#Z^#9k zh%f+@NQZ-r{D1VCU6JJ)j}K+hYk0qsVNeT>V4JIf7cmv3`q}M0QAc#T^CzLbaM#&F zt|zPF75TJ0N6M*YR)ZBqle8zQNe$x)d#U}@6zcb?k9thmEgzA)O3h?nxwaS}_7!`e z9>Er|5WffRKs$1Ruv%!s48y(Fvi9r(2-m3Lh^$)n-ndh?(>4Zq%OUoGI5IQXC!^Nf zS^G#>20nI9s3Y{FJBXvi>0DYlyBsc*SE?&5<=%*;RB9+vz4E9hbVS>s9ncPHe`u7( zXxG(^>hEfOb%Hig>x?tW4V+P);rEHwTkESe)lRGDkRzy~Ro60V?ZlztIBp3A58awPu2M z3;Eb9T4NmR1+~fA6s@baOkJr~P`9gpsjbw1l&4C0WvjAVNvot+vMX8T3-S$lxs*>P z8ec~tPRzCv7KyBzh8(Jg z))V5b;$FY2gn1uF#(2_o?>U`07Y}tPRixYTs)$wc46a5x>=TsfDEyl8pTE zSk&rFIPPMX)M?^sl(+PUA%uy+;#x`Vm6}t_jlZJ*Vot4yX4THBHMCk<4sDt`MYXG& z<<)W}sfAcZ%)xC!?&V6-j^PI&rIx`fRy62ibR3QNfZC$hpsy3ZOv+T0{Ev*}k=6(k zgl0@^#KoWTQhTYr!2d512Y2xMw{{P|H?)WNy@$GWS5ba@79~Z8v^CmVZMrsIo1k^n zhT%?$zt&a@)=D6nuWF}Jnsgp%omt+*l)kI-2jnSNMGynO+$6WlySB&90qS&#RYE&!LAn5l=Me+;Tl*HFxj>X`+cuU0dL= zHIv{J4p1P~kZJ;{vg%LDX?&hT##0~FX5cgT)n=$uRZ6WamynZ*RRp`xivCh>Jn478 zmL7;7cL~Wgv7pnYSCQ+@x9E5rN!`qPOstt$)=^~AvsVV9Ok71o)^Hc)O4m^yS^_1a zM^WOmBeEW|X7gUNPP2}`aYi_=rP9)(+~yRn8TV^|vYda^T4Ebf<8+}EM2(74WMeU0tk2a%`E{V&SL?5}GWL?rYQ9QKrI$QS=p}s1d@Up4 zW3;ojLBGuK%g~yS@f2UCeA6%cq*+A1QXRnf05&^$hYN9(naOG zLMkVuEmC@+nV<>l{-0385(Wk(BdlPARgLh=jOwoukMWQ2FO?fbA@#rUw?XG-pKJ59 zUlD)$F2)%3Jgzj48#M8Ox<|MnTwq$E&RgYZdoHn8g72H6@7iobxj_$*4GHQxLPY7) zSh}0sL;gkdmujQN(sq~)#T{ScsEE7GrtGl_?uv$kDf7=|Ant;(Yw*wr^B5_-5t?O^ z@c8dN5dSz&%(*&BU!%nI39e90O`+UcUTu%TouZ^wJ)(xF{ls6yy_~-DvcT9$9RGpb zXUi#BP+fUqDy+Y$o6-H zDsToh^sF!sF=#jBCtD2M(MDL+2zwf#xqEKX$N1|1uvY!A-jxun>0|w&wo#jdnmY?o zhi42*DE8sLLhO4xqinOT=G3ksb#iJ~kz4GDyYDp(>CDl{^`I`PIi~%D(wp|$B;1GS zj_bhf+Rk^>rptz2yd&NGU2}z~uRR}Ym(;6jUv&aXEQ_kT6zIJ6Kz)oFNB4wp#FA_{ za;J8~8pisMjKnCeRkt7Fg;bIxx?;GLSgl()uy;d^8uzafiDyuMJ|}q*wg68S5$?kn z>SxFeEp44)Ie!n4SkXY-G((TY)MhDZr2JxpxeaO<8-t%?FYoKcX>2sPrs(?wPa~1C zNv(}LiTm%%da<(_^pAy*+yt;v&6<=aRZxX7&|v9 zMehMu+_}b&A(h&trNKSJ&1!dfqnMb{Mu(cd#& z1TW_frlIf)-G(`X^QkvVD)f>+KzhQT{2fv{j#5p9HFQU2g;0m_WPcKFIn%KhfhD`s zH=r3ghi)n6;&Sp+rL|xaNO`&NtyoP?jXDIIMKo?JM}9=2b_rnb?ARB%Tx(@%c~_qk!B) z?V`R^=Bcw(Q2jJtO~BpVN4P4vjo%x%e%P+9(lQ}G!{7AXKyj9Gi zq){@-ELti2NzwInSKvBeA+FvJ;9l$>#+pQ5m+0Sf_&tg{yPEb=9k29Lw#!$;YFK9z;6wr>1Ld4pwtY z$x%;pDSU75pC~Zsic{U9M`cpiH6I;GNneS-^Npde@+(>`H8ls!z5YyUb~RAB1j&WV zq`tr3mC$z|wtjT(RJU2$82jrvt`mD92GgKcVMTTZ%2e0b=AccyYtcq*6zzyPEB=@C zeW-;#&T#{FLUZyV9D-5g74a{z5C4yNT%61Im%GUeL;}y}^jD^#B#S@|`OMlMk!Jz! zBS(J+o#3X`E|e2$&^=MZcD@)Y`^(|tPGP>#p9vQl2<6_xf?{8^tz`48bR{6y;OyEBew!f7EbyGL9qmgO6wo^4ZjY-kkkP<~fZDanxItglo;OMmHb zwYLnV)vL6X+Aq-%=Ze1A@!nc5t(m4MtWrTPEff@JdJ&#kD;23jdsJL5Hs|Zfg6uBN zm9n93`~YDfEOMq6PVrC3Ua*31h_-qvptY0#CDeS1XEBj@&Cr@$r&d#&tEr{4yf5yD z9k*{zbkr~|?Cbh2L8O8;B zE*-OsS;3BC7?xlgv6tBv%m^+S&(b-e1gy7J!F|B@Us3A%Hf@PYg0Jw5c50k<8_#av zQ^%{%<@@q^sf5hQmxRgUkKz`N7qa15mCiy_p_OwWt}Eve-wCfE1bbVjk|5*|Zc{hm zFZiDH7b**G&fkO)LP@5bP*)J0b}6%zA5uxT#It-Yxq_TSB^nXku6eVsh2R!c?Pv5b;)O94!vQ4wI_L>SBYDc2ltSu$~<9$9R$bnnfSuu1lF5# ziYc7U8DC+$VI6%NWfTqmxQy_FV9PkFbx zQ}tHObFUMyL>H8q^}=>gs#P7PLv-=TQzDdI{#am6w`1o>!t|WGYG}Io#{asAbSLsMplXcouV* zItb5pmGoDG;Ks#>NezakK=a_p0BxrPt0nxc2f;i+TdRC5pk{97Sstwn+#*wellYVB#Rn1d=oI{1qPuei zw}(i^a9lcDDB7F#vSnw-Gdpd2*`?0H_I6xhx~Dx4KY~1K-^R0c(ZRzVYbQtWd*d!H zoSq;`kaeIgz1um3O9&G6)5lk>`uXVc_LOoKxvh{6&rhyH8(;U39=_e{jEb3hLAp%I z)F0Ayi1e?1_T-i!^?hb&?rn&SAHucn_D_zogrL>j(J)JzaWgb+mz^=rg|$@!)XU0p z)bluw^LY{m->(PKYb((cR4MtIP)*zo?HuVMcjP}75`)o-O;fTl{BE5`=Ev1sAa#PT zK;)orbIXX?&gpCo+by)6{K97A8c>Vvp?o$+UPoRyO0;w|P7uC^eh>wW3yIZ;Ck`*z z;uuL?;1hzxK$Kk^BP!z#T?Ac6X`+P4$Bo?+6LGGbzZs800MJ$q^Tw)wQ-aDgJnHyh?q-dUU zQhp|v5I3@0&_B_~UmG^S6AO#UpLs8$H+_&Ewf*4Pby5RDqf#$#M5Z}AyD=89I6p1M+16PKSFYjM?|9`&$RtHp8kTSY!B zt`QsZZo&mP6}f{MKTCvQRCVg|olZhrXbWM*PkBfSmCC!@6UvZ_CaUtbXq?;V6 zE~V+LbyGX5&lO*}nOs*KA+!@tzQ;~YLdNHZl{pH_;g;jLFbikMiozB6oe2RIrl8cQ zJg$wx(c)9$lj2fRA++OL1CCnvlHVcs7)<3szbTz5fAp*wiZ&!iSZjVDLhJB-iC1(5 z=DsZl*Th!Kp=&vPZW{N#zqpGK$$D^`>_<2J7w*)wvZ&jJU2iKZ*N`)cCT(&>R{WTX z3!Aai%@mUk#-@O=Q$7XyT79tXbSoYuEZ%y}M^F#c1S-9I|BlNv^(l(nN&g``vWsflnZR1%tuAprabB!-a zyrLSxpVkHMjYnO!d6j8N{bmnB4U5E%L9>N}ZNo?v&eFx02LB?l(RJIB5fkwA&{lf^ zg+Tq>xOmRE(oM{|=DMQTHEtr&q=T_>XQsqXcg4=fjhph)Rmx)Yax05@#U<>oFc4DP zJK_nH&53AT_B&b}70DtnkgH7lLql!?T4HR@Z^RaUi&P;THD(jbiP2I>qx;yZIx2ud zw8PbzIT};hnmFphujFz2TD}k4+?I-+%zF@B(2v_L>)L<8V>|SvU5ET0mRg69*_br; zQrv4>afkdBP($w z3yG$!#jS7^Dv~B8`nb4rtt~cXG*M}$yRI2OHBCH&`h$n@bWR3sBihRKSB9Y$$W?I< zzaH%^?@6TABip0>@NKqW7{lj5kBUEYdk}HKh9{}j1|EkR+OTO2B$~E9J|~Zw$-v+$ z{ui`S+>}2ZClY_Lc5{T`X{9ifU~uF^`yKuoGs`xZeay?mC(1Fm z$sP77UkzV6jH=>%4n^6+tUI2g7=&l{bdPW4qv@&YRu+$1`@=kVW;-jq6f&`{sQI{Y z6Kf{!T+wHyn`=gsGRCG{A2-F^H{7IcLT@Vz)p@F_=9JT+{>(5uk9j5$(LqvnA>7ro@D2lyKNxs?WrX4?58RUJKdTK4=f>ge?TE)1;2H3)cr`!C_lNF;uM1 znTYtf=re0GYmO`YoOI9?(OHom{;rOdhscM}yTRwA9UuN%q3B`i0*>}a{Bp$LHwM1qZJ3Y4unVtS0^iRK!~L&?Trr{yJYkPI zI&pRBU)h8sl4(GX@+lkK(n1>6B59a9F+9z2YO#BZP&F^g)-T(c$TiaNe^=qux| z1BqjVD?&lpR}EG7MS3WxFN6ujonwS$LN!LWHoTAOCXN?ZaGw)>uGlm&_<87{D+c}0 zW+iB&l)=gdc`D9RJGsN?NnyuVWV0>l*tb`n(Yah0qggU&sj?iII>NBGBhcEB*;F7^ZQTFkH%IuuXx@ToK1LxXI0j zoxBG#R(M~eT(*^RXb?;X*`ISu_{KyNluFI8hD74=2`>>Bsbz*{+912bVfzY@_$Tud zdtRs}`^hDh5qR!kVKf_74V30em^@!uqFj|1sms*T|KdsH!*CiG7iv<*FNMMVXgBP4 z?S=YOovGeO&GsEqa`B2#81*4PoKAh-d#fWQ3P%qbdRWH5S5PdP=t>_K7`a=Gu(wfO zAHm`1)$#5AW6d}IX9Mu$PN?Bgt{8eIa>8Ze0l%CZPvwR{t{k%%#`4pd(xRuZhRZ5_ zD<*?J($C`0&{-NNE=E7#vlJg?pVC`-uDB~}`S``hZXyZLGa z87axxz}F?p(^shBc7Y#ftL)Ivh9-8JctLQACFFaG1wFxi7>@qSU9q{)*mN+i{R>yh z_37dcwU|0sDJ~U~q_0$))bxj_8p!GyFB1KXT$6(}LleIK-_nf-T-C%YwTiA}&H~cjA3R#2C02$b)@K9VXT$TLLB1uKH6rP-oPrm%=J+8o4p_Tg&LrQ(3t-}XQP0?oD6QUMV0j^lDlhgTDL@4b`EwH!Y z>!A)?V%^QpX7eCN15ICdmJx2tDV0@9Ej-QFH5xViFZhc8UK4$>>7XkH&D_t=i@G9u z7kVG^RD)zM*%xQ_vcd(rC$xl8iBwASE^2G)(l7=^t7)LAn}Ib~xs5ALj2$<96Q42e zdTE4h_$kPL7RP-_9)94qIKJhlF=5P0Cbz8uJYX&pHQ{e&68b6hW_#K3WPs3xS@}UkX6Fz-fEY&u zwc6g37i{%VtL?+;|I~LaB*W=va0(bxmj?;7)olV3HFNEt}i;?qYOrtONOM%w(awlm;yo%IZ_)2UWL~ z{Wuy1&Drn2kNM{04f|=n9vfMn*zvsq90bOf$#h@!~`kZm|%;QFF1KOH(S8^*wWZn8lzeK0Wmay5tl(d*@ zJ(DJyJNv#LgvYmcg@HHs8zQj*my1B_(p+_07OpJSj=ROQC+Z^-e=?A$uP}EpdRRx8 z%-<0?Wsf{Xsf?Dny*>#Nms-0zLZPa&nIje7kDE@H;A;>&9363=V>*Wa9qAvphFI!AG*IvQFTG_l_YVes7)vmG?!?ppnz6gQC=&(C3=()XBwL><`6 z%tNYaV$ck4G7X7dP*`?KtI;?8A~iW$sXv2$#a!RQ#~SA&$=-O*UO+5C3KiHCDdGwauPu16qe}57rZn9^mmcS6Q3Vk=x(LocTqsXRcBQ*eR zpashh)t9P*CvKnPIo#Oj_?#)O9O;)uqKVDc=y6ujenT5OIV2FW3)jE8wV^9btYNGW ziyBBYJ?R8~L=1+5PAkLUdv1ZX9GqwWupeiCCC_uGn0$l}>|rKio{7P8OaZh;{R@|a zE-ti3ece}b?3pkjbmZ$TGsfD>(H?eMCnBFL@sIeO;w?G3vQp7yl8Fg}vER$*PdS9v zakgpc)s*V@$~tkHn4Q-x_8q(BCSLI* z8%C94DSHYy#GJx?4p$_acwEI*q$>zRq^4qkybL`mU5T_!WWMXK7i9@)d2=ES+T6TP zuAoy1-=WR4e9A%flv>~m(?M5`^vmv3m}B4uTHC*>bwJ-;RkUg7D`>y`y;x5Cj+=|; zpznVLr`_Mpqw0I{WesZh+~7-3e^hGd!A(OcX+tgx(Fk&KgKZ*TgwYr)`MBqlZt zx>DW>S~)GXc1Zq9?kJH$24OSR85+UgIG$bky{{>*p9>!OW`$_-r3v3jjEg>cqMxi# zXu%yowAJQ-_>2FWk?HT)_O@bhlF5d49Acx-Oc}@$j;-JgJ=mgRceS#*O1+L&IB))s zBk>$LlTIcyTzcek? zChC5ruM{Xvfbr-(q~=$^m--|6c3MTW72rcSG3-c`5-<#hpdF>hCpL3CE*Dycbz!ORdYUM9x&rjx9tRz z5%(vfG}^WFS%J7C#)1!BC&ek6y;IaPw>#_><1TOdB?bV;O&zu^}?| zGwV@y<4OTtq%SXtXgu-uI1Cp<5|z8=!Pw z{MHF-tdkWMLn>j6^jgk={*fN3uT&ZN@7r%U@YrK7c8V)1O^W%kc-O>C4b6U-j2@)A zX+4xqI3|`0V}+WDNVm<^^LPfdTUFoj4c7{M9Ji1H29TxcHZYXZIm)}V8MYyU;4uBd z`44ZQQoyg=MIsOaxHTV$L|vaP57NDtth;?6KZ*h8A8aU@mcPJgL@U&#nG-{o#ubBQ z`QFZ+!d`K@kWrqjv{o*l&#o0p31xy@MQJ8eQWtrEc$#m4p0qFV-;4QCvYXgXEyZqO zdixe~Iy`0mVDAY_g=a!hxvJ7gxu3J-!q~G-Tq%vw zuT(+JU-3}-%9TY@Ji~TIpE6Hz^nMvhscxU@4`MS+h5Po|h`v1bTj&dJDDyYd1M*U& zGXTm`%hBpkx=8ey7}QTJ-Jz4C&5SE_Y4rBsq)+l|xbJYa7{G1D)tfh`Yl9|?GLAxo zHRmp%H_Y-}S0X)BXR}j_+0rD97%Yw$bVZzN{5TU~?E-1Ib>wqgwJu;IgzM6LsRDYs zxQTx4vI-TY3UH725lL<{<1X}|RywzW%@IuZf!0Lqah^C+9$Ne0>5opfEcgam&~|zZ z*kLT%vhg@x7x7U?daHs%9SX;Q`yL!v7N&3ZmRz7qb6riaANYPkAP=_Iw127IOy!2{5C*Z9cQ z=vuVb*pg{4HJADT$aZQJ&oDO zPaw;p?6l&0%56qk{htUCDEmcY=LOYpV!Z2nMJ5|0dR+LzEwDPM`T605>x(Oedt|i}>M>R2Mt~3)r2F)kE zh??*xwK{5bb)(Wv@|K1}ZGjbfv{kwLmI-r{e{7v(k5ROM%7 zuUuDctR7HisxQ>dYFDkXL08vCsU&bF56%LfuOXb)Iy9e_RpMp|n}`hC-F zcR1*D{A{AVvnXUC8d8H{gslm6A9|B}=w4!HE}YM-WYoP+Ye&@c>hIbj^kwLZwfN%+ zm)?Ah7<7I1a4k%$q+OTK%S)xZuopU#BOw@G{3i+OK=6ZE#Bj97c%Ik@li`%Tm*|V{ zt{T@}N{W+Td$6f(`F zHO~`AsDk`NqNdZr6|zlcZt}&6$5cb~9e`)@QRA=@IT!BP>QDz@p~FfKmDh1V=eAua16HVa3A|H|BLRrGoozApShN58va+{uLdH4oOW4zz&_3M(=)z+5Kj(cG(fEL2% z5NT}%;gGYS^EplOW0+pHn(yFCcQeIoP2f-FPx2Oj-1(Tf%*>=W@(LLnYw@QnM6p<}mY{Z4%qZN!$Byy{TFDmVAgKiz5r#uhQ+E?l&xE{C6JJ zv@U*`Xn{5xuh|Pa3V=V_y=l$&V2;=>vnBbVL_TLZ^mBR}_k*@rXOlJIuyq$%2(l61 zQz_BgX*cIZZZ)ySxt^~_RHW;`KI@i9+{N#8ZZ@2?RiXOH^Td?WMzs!FXh{fC%pJh^ zSBoYG`?c_*aXqzuTK~58vo=oasO?w&QnDxorPNYZ_y+A}=Lx8mR5WW|BINgNvaEyE`o)(w!rl)d$xdpEB_MuKmCgln4piRNG`%Uzj zY}zq4TVi@~b!}BY#j37RIzgc1hi6^i?oj-fILD6QOOP-5-?)EJ_SuemX4O&ow>2M3 zgXRN1;lH*a5I?mcWK}a-l`apQbB)Vej zZX(gdT5Jhw;@_c&>$&1eUx9joQ&2l_lGa@-sOD9>D}E@0uP>&SpGb9ugW@W&F0V-i zB@u>;Vd5mNh@4xViu*|4%F~5s@;&*CQ~@nf{-*e<9_q+kTushg7W52O=@Tp5O5u{7u)jZ|AzR zEp6%9*4#a!EVC0WZLst;z7+AA>WMzS7ofMaUc^IsHs68>q?4f~yWMC#G9S^Cq984y zQf*3Qx2RjV_PEEE(q5}+@Xh~?C->tTAtt4ZjYN}5n!IaV z_x^9BA5!+IGtl|Hr8KdT6+30Ty)kr+QwBQ^cQBsOzC<Q%LB02;h6PYQGu7G`$L~Z(f7I>09I2U*fqZ3u z&6DIK`#rugdDniKFN5}=uJPr_d-kjR2}cS?Dkz7(N2^2L|KNM{2Rr3(fN6bkkdw6c z;!-jh?bW#vY(v{i<}$a6Sm~U>wS}EpM19v2_b$*A_cPw|_m+r}_<$Us!UR(^aBtdYPmwYYWj2eo0g6psr!?k|hzoEWe4G{Hht+e~+6K}%uadji zpV<@6yOb|4GfrnYE`FXf{@koc4NqIY#W7yOo*iu=jEJVE=S?lN2lC~p<@PSTjap~# z%O527*?;AKBrn=`^E(}>P@Y-Wupyk8XzvL8K<@OCVZ(omBef$97`Xij|e}@so7_O{E=6P?~BLOc+x4K^SQk`KbUcMW?(vT`rhA9 z*7&g&f9@5;U}GXTj_6us7UWCqZ>XU@=QQS?5p|hrTm;dADbFRdc`?UW!M2HM#D>^N zwgGe9mWCTjp0jV~w;5V4?@JBM@-G|~M>5F6q_nGCP3{%Zlri_{-S9l;KI#NtfyhBO z<9iY}XkC_D%ejWHPgJ9;;tX>9lOXXsd5G{pScLl-H4`L3HP?gY-eTe()n8)^ud7b9 zR9{?diL$h9czR(a`cC?iG;u9jGkr~$K<;ray%)#eU3+RoV(Nd{sgDbZ`S9L_))9!r zLbjYp4Tn>8vF3@Bk1x3b3o_7WPxz30rALar6SE z`%?TcBxbZVMnA=8aMhU-QqcX;!zsf&w^_OE+*ab6(}H+BNEL<5L<1@nP{ao6BwwD$ zMz7=>5Vh&w_$EY4)LP((15|66W^H3gY~G(%E<|a25LHOZf!+}#l-j5rpYRcD(!nHZ znD8EZ-;yEf5p{%GAL>XIg}&rJu<(<}Y7&laU0eJXy#>Q_bQMHm4sssi=;}L=7=h_| ziANZ+gpSrU?)N!PhIq9*yH_@M7z&9m4=(J!bmQh)uAn_Ab32h}@B3q*zs`bCn z&0@kd>YQ_gG#7FUf8mMgqDqifN~>s`T8w^f@qNcnQu&Y712>gW)D~XEO5#C2x&2po z{DoyTCT15RUars_N>{FuH4#UfBBeCC{Bx2u8-_=%r7``S&5B_j`%ijk)AdNlN8@9A zV0u+s4jiZT$dy>SBEG==(@s0wiVGE zghYYFlZcmN^jcigZKKj6n!M~f1}9rH{a<_M0Vg%JHE^U$M?tE90`8P#lAGL{+(Ho$ zP>S>}y?0P)!V1zsq*n!`iS*tP1QbNN^e$bR^d?2VGsz;^x3J$XyUWfl`{u_nFO$t= zGWVZz?zyLcJRkH2?CIySt<5BGjON<_%np<8z<%WN^Ef7i$K$}@W=~_VOY4R5(uCI0 zFT-~l5h}M>F+7^b@anjaB14>ye@%aZ!tjHj400PhHmEjKMpzs)M5={<3Ys8Y&Fj>jLaq;JEGlqjRQw`!mXK!;z~)S)`#qF|bHt8ZnOiX@J=u?RGu6Zu=z@F1>O2$m zCw9UaV)_oGfV_(wqMz{vEgcQ<-l4~K^l&{7NIc^!4wmN;sREF-!aV?_=FSNumXiG1 zaBB!(-ve=lWWQ&oisv7YF4tZ-=A>sh*sjN9e;2naagszQmE+wdy+!dB+3j}uWi|O%`aQ?7&!1gUiHs)agbP!)EhL}fb zZhA{LNR^keev!(Whh7hdi>DOZv&DTt(=s^&@KwRn9%M`RHDI$tNYtqP1UL^Qz9IX) zH#s3+7Cbzzp>WJRX${c&$^ZLVfvXdpB--0wxXyVy)!W(yT3z` zSOoSQlm3QxfACBOS<{Pw!MVOA@VBSq6^UWBWM=h}`aKy%&Op7B`m6&>!}~)O-5;!& zG8%V#B^N>7fl&e3sb=DIuo=x91Yn)HCIBIT@ zb>EV$EL*p+B}-ZIBTKfkWHC$rYaO}ClEIeDWXV3(*^ni#`nCjh#5aApfwdb_UZAX~ zblTGn7Y?;5Q5N1kAk~L=uX|g;_OGEhefE_<{a$g&It@#ry{EY^qgt9=!9~fh<_4(d zT8Y;cji8>cKS$u^OB#)@g6<3Z9i4HxcK)WV8N(hKkv-d>F7_@lpC=VtczIfcO`vsD zs5PZk@hrsYEIOW!+b8q5#}-P3xHamOO5qr>-T_ zSn>m3^9=l6bw??|J-E<|ST~ny-HW#vaA~FUNj(M>=;M9iBOzNmus`d)wWd09d!+q4n zf@wZ|y)hF1AtfR^EiS_Hn9|z6$C9?ziwJ#Td9?R5uz1X7$=%jDUFvbriHDReP=RB= zFW5t%*5?3sS==|o<~#&7IZpdZyPIRf_sG=}-hCe`ug?2_Ez&2?6aP1g4?5BQ7KL0l zygi^=*k-62)|{*&8R$x=0#P<$O+QASMYcAyEm9|g&TaeMi2HDyPlJQt13v;C9XpEZ zq5>@n8EkX)TgD!|ReB7aV46W3PC>zNpCT-!6I>?#Yn+uCGm5| z*{WIF_Po;e|47y+4zxb~jz!!PD*rz#)TsxZ+wn&yI!Uy*TWP8uYM%|NRUrAlj7vgc!@!B zUmwldA+jSjejguJSK1`n($4X;XP3@M0Oz*z{@7=8+P4eEFJifP3o68w;CILeG^_cR zuK?MttqJOcJ6eo9kEZC_|EcvUl`WarlGQC9Z&@VXj+8|jtvb<_Tk3~}l+1SqzvFHy zjf#fMsj%8DDtopnYt(N@Wn-ezlzs@g7#$KwjPW~QlVuYZmOgvG^WD>6shouvsa6n! zI*ecC^PzUtc>WQ;$-3}dJSFeXRh|rL6Z`lFd>L=X+wuK;1fOr7rwwU+bv1b#uXhc? z6J835HqrJvh`nvkB8OT$E^^qbw$=KwbYie~kh~q|(#~l0jfGNY-~E6ivAZXuyc9P@ znwHZ@55Ma-d^mK=m=hzT(fJI2-gDmh%zrhvCqcF0AH`ItxBoMr%mm-f&d~WRA4Am3 zdeFk=&-AvL&8SHKG76DIG?%dj&oUR2Li#pi63(TsGlt{q+I*uAE~L&UMf5JNKDap= z9n=9kZOG`-fDt)QMe7M5ThgvaH`?OSj^TM(BnGLE)ahg}ok`oVFHmtUuMrjf6?1>9 z$Txf$$tE)iROQ^l_wXzsBt|bUP7+^D%AWVF&w$oDCk8ziP|tMo3_1b z#}C+RA1$q`N^Z$#eWPc2bzXd)c*s{$tw(~%c9Mnu$Xd zpnu74xUorCDRzln6c?eEds}0L(VliuMyX#09Enc4CHfJ4k6q$7xf&xjYE(vS{QKM6 z;toUtm*uNrc2~@(N7I^lyuacCs_gm_=d#9UM72g}5;IwUYil2uHS+Bhz}TYC`MK4t z>nUzYJA$sIb+u1o=b}p|zK#w+CA=Jz(d?|gXe|1N)P%7~oTS>ZB$`urES(@byYiz%7Y1JCmm~UfAClP_LZLhGD zvaWMSI8UChAyRcvP+v>h`mwuX`>Dpf6f_6&APjeVX$-Dq{9v@8S^0b5zp{V#8{!5; zc-sES(aKb{S3r{(hjo$clJ!v6QCXZ-i?u4xT$DZ|=M8P6; zYERP|)j6!QWwaQKN`za?G27OvEn-TsU^fFl-GKNpXQ}4X!WUe&#&}3*Yx);zS+Lr2B$n#%gj$$*I zo}d|H@L9BvHGoX+T;wnFF^r1P7N(P|$Zl7)NYt#ceZ`V7M^n_#EG!-$TGv^?k{PV) z|M$O{qg|u05oB@<3aV3)D4*b zg_jL_N%&utXhF!TXsmTL3c?tRJ`!yoNI`2<-?C)gfV56+id$OO_OT@oSXaB-BC)0= z{ZFCaE$$Xua)l*lS+WVpbFN>cA^5Oz7jklMk@7|{=*$}g5xJYi7U(8%8D3BNlI(=K zF^9!ux{3y~Ae$WtaM_dCh!d1);{40KlZx+A9_i~Q6S7+PL)U8n8{j@j= zQP}=2%qv89QAM|#4~M|{M87Y zUKxCyWqEJt+17$j;F)!^t_RhHlqiPE#?&cO?{1)9xX-RsqNGjD2F;vl~Is-S-q-i>Ri}}rAU_!dI$gIyV8iA}LJo|{`F z#@70NWGvWHkhPH+?Q-jQp}NI;UiZ(Pog_Ycd#^N3Nkr1Abvc$wnFCKI70oJm z4@qy{(t8tXEJXeB37lWLfaYW2>4?51ud5UFca4sy4GuE;pbmHn;p$KNYTU;=12xB0 zTvya`II;VrdRE`-U8DBY7fQ3$ntCF6np#oMC{Iz_>3gLa>Td$jbv zuhn$gIHjpt5KT~vsC5*tc1>C9y`+~>4naoJn-+s#T5_gEqP@Z%86x~zH8zef10*&= z^E_FwhWhx%Y7ZhrqD|`w=vpxZukx6_)lk=JtUMlH(bD0$Mh3I1IhQV=2k8J-1K3Q? zPZHB8KugPMmAB%6-=?zXp|lYDv|Cyeqbo!<9*bAr8-HKJC$+X#@>0Af-v%A-Te5U4 zH627vx`*U3>ltrr%kdUm&$|rOC4czd)EkqVzIXKF(AVn>`VKd6mqdOq!r!VbhvHi< z1r5Y=UAa*==tKQDWWVzmd%Fv~`#}8^FA2K*++*w`tKy$rr_|E;4fk=i3SI}>O)++z z5A|2;bSy1bQ=^?KRntp*^k&L(S5>^p=FuXtWWZaep{eicE`(d4#ojA=ZMgDh>%oZc z|4Xi*>ZCe8gDacajbTOwx)rKe%rgH~ucF)kkvQ7&{|vTdAX=@%mC3O3vYPItLnG0- zCh)bVN1W!#MG-!O-D0b$VR~r+)5NRDQJhISiT=O~y}yB+zLeM3( zAnxrxr0&(yg04)V?nNop37%~DiZUH?a=Th2=89t^zUOM@kClav#eQubRT7=GA|Pp<&gw@;|ow7v2$^|E|MORZ*g zm%=?Q65p^$49xZY(Aw}>R&jKaXj55K%AlOZDW%=M!??05rQ8!p>}mOe{PoKR1vRkb z`#_T z{QtPh$itvZ;$f*P?B8rLINXxGW1Yv8o&(Y>{ExCn9Zdq0uZUljy|QqheZ(fSk>t8E zRG*0-xtj;H{TbOOKy^IJby_W}=ahd?Tgv(MQfft4Lu^Od*qQs`jrrK|(mYEKIL|i17E0ZoyLW= zjL>YxK8ZH8R5_d;oE zG}GG6lL4}c-&Sv^ljFQjw4V?E(BtOk^cc=2okl%zEmyjDr4wyV3*m0=v+7u_kM9?? znKWHrsQSG(&Pu0oNizlti8hb(gAPa?aYJt(-xmC-?;Eu&L=)UFFVL~%Jb8y^()Z}A zjcdM2YNP+WveBbGm&+X#Pds684MbWj7KiBovmCud&Zr6wU%$llcT?*V&4J;C!R`FJ8gz^~tyYsa?#x96O%PD&CA^bEy%Wktad=A}6`>;A> z0ZBuXt4GywFUV#pX`g%qtNImvlM!gv=8IiVH|Q|YRD8{r&^+w8@u^;h#C6ufzy29| zW9hQGK=q=lYAH`XoIH-LWjwJ_1D8ab%FNPVzGL`+mIVJ`#F)0YNkF= zKa`f~sZbtQb6h#j@fheNI<+Lln{YwXVAa^=P}GzICcBE`> zh8T&=Zge_S+j|s=$TYiK&0&bVJSDb69>GD#yVwHjZvK3(6A%*?-}0flit?g~NY5Ly zRjiu%2|g6hHRD}2{Xry z1~!Mqt4Np^n-50huNr`E{7~GdC(RDDhLKvEAI~+Tj%KLIQ8`auTn4=hSsQU_l|L?# z*h*c2ekQ@jRik49i4n4;Cs}!dRrs&aS+XEKO?+k+QbBH|h3^B2yYF7r4#~IG_vDXt zH}qbtjcXwP3S)v!^#7vKL;6gQ;#-MNsc!93JXvdqh(?R9W9&?* z7iN)xLS^ieSjF`wPi|Xd2EBPz?`uec0=sV74W8}N9WLaB@cQ>DW!dg-j>S%mHrws z&Cx2TztJAu2xUMX30h@W)cZyHURbw$*wP z>Lwl&P55D!hj*m|jdiAB%td|iT|7z373ZwhQIJ#o8J-BTB-X))lLn{oK2UdPS$!GN zeY8%=jWVkn(fjB#-(>A$G)fw(*FneJ8bktU5EalCRdg2v`6MFLKch_SY7Mlmfqdkc z(xES##G0PheTzb@(5l+k5c%mfCL7hD%Hb^9h-Cy1U)dPf1yLWp@#zeAt*#~)Awuqa zNX@r`d@8%fHquI_Nv9e6v=n3tUhb|DC-oy#&i=0!)<-xmQ29{r;(Y`)~$WE~PtOdWvlR;0} z_%y=f`ggIb2VZ5JjbxM_Ao(92fbMr zw{=}pYvZp#+Q+28iua*9Q*S6GMjLex_+uOB*Q6BCm!h4L6a9^jz}#~dQi0U>6%LwI zf!fF|(T7mW^hII`qLajAo|E#d5DhpA?a^do7|u?*n_bL5p>s`Y=$$?g`Z;gs>BU<3 zjkkx4J=;2p>l)-$xc+qFCw`W1Vo6zJR)-3st2xowq$MIIc_=T_Mq{5_#CcumjpwTyM^^d0Gj?@!zvt<~}y zZ{n%=9kVjb{61i<*w-u*U(a{)jF46M8+6au2wgRH2i)`jRp2P<-|-Ll4Y!I~kQrK7 z6zB6{Rpo!q746^}NXMR9faE%lzZQBH>%p^mB>^-{8F z#ZfwMYTPuGZzp25XxO-d$mzssE+!8M(R!EVN-8EFdAs^HL(h!EBo+P6Ohix6s;nbR z$_@Cnnu)rQnbS9cyLfm9ri%e$thfnXG&b=IOk;x~itcYCH9cmu(@PVT9F(WWc?&iJ zz5w&brCKT9o9LE$PDQA%Zw&ZaH%gtMYWH;Sb-ghf;TGV@IU3Y93fj=7GNL33DYbG2 z50a`WH*pnhAox7{<2OiWvyr*g+(wh}oV*X8$yf43FuV8(;vDTKaDwF-bxrhg&TwD& zU;kLI$bRBMm}%@5%>{*=$UCeU8_(L&*2a(KXk&qP7whD_JXf27mjt-?^)oyfY|+j|ED^uJYZKU? zk^LPLj*shi;D*(G!yhNGSmYN+;c4vU1KDBr7oB6)p_h%(dM$DY|LZ*%a8_$Oyc1#o z3ggybd48vNmy#ews|MbfzG`Jy(V)Jy5V=~_TE%GZE*w(7F=o~i8>;isYSKxYrGI4{ zhNy~U=4hOo^fd31w#EnaL*pl-0j*8@Lyec7?0c4vzs)fp%NvQ7Vj#SRi0QG+o&5}d zu_t+4AOC@W{S(BO&~I@h&&sRv^eip(bo<_1gMG$HvRTcG58{8k2cXAI_HcUKIQ=Iv zx19n11y*P(ZIY5JWSwHB)EDf}?XF6&dibLAzOXaF@bY9PWnM|b zXGP==*wF%0p_}PQ$jE9AeHg!Gn<-)$X&bWH*hspmiSb^%%ex~MbY){)5d5D-bp-y; zYwAUq1E!NJK@{A};V$f_?1wro#|0Bbp=0cyP|xM8u1>aOp8Yn zM2^WbwUPL3H;ra0E8}gj8u%J+3_ckzS^(XQXUfSTT4u8wga7kjG<#sevqi&_7zm@q zrpeZDHfy%D_t@My8MOD?e-#MVpKuLJ#CY)5q!df}aXyePG0vEq%fh>Hcqz;WgHavTg=))^UJZ>5m?}51JBpkPIyK$%7Kfd(-$B)yDbEEO;VGO>2`?MjP7Hm}2gxpPMCU zC7Ro4U_K^UP;tBu@A2-8HWKUOdJrL_;bRbG+D!cvqGJAa%Mc?fK`+r4iA;-}z6+}X z!|rk3&zHY#lVx*f&-H9J?fqf(V}c%h`M**4pLiQ)G`GYmF-^=Djrbv!i+^mE!#l{E zM92+7k@!5%=U{x?>B@@;uV(zzyt~0L}bH#Eoog?0o z7h&b;@3bP#Y1A_dnhdWdK}K)jDibLzH;NFU&m%YD`Q=q0R#)nSvuQ7rweUYHx_*Vop2w;CoSM$2(k9f_l?e<+_TI+U@qX{<35bB} zDEf)3d?Z90x8NsOetv~9HiCV|M$jbeGF@#prq!s&Xl1rDgYjKb(YS|x#2Psz&yHq7 z+mL*Usi!h8>OIJE%1jTPYNW$Cl+`KE>&c0*6Qw@AK23Rs#K^<`C zSX)DMYRSmn=jb}#)^tv3&l7D16ZBwo-RBoO&mCCJx+5;a>hfRDSk*cYYlCOSe&{N) z3w);CAmU@W)y3HUtRoQbxF6!L8iH=jF1GVq{5JoNZ|3=7bt4hcQ< zd~6^)Mn{;H=v4C;tQ)_O&gx@*9lq+B5G4|O;!mJ+tD7v6M{9M+HeW_P3(!;;=-m5KbZ;MxF5bpqo+ZMZO#l_4G$I$Rb}dy#`t0ORm37+R9zD#d>+U z1VZ{3`e=QkavYnwQ!B;pcHA0uci>5VCxqe+P?c-}%u2oxoy1n&nm2^iRSDKzWUf3yTSe-r7xff|50%5qNpv?JLGya(%NF~#fgM0`~(N#262hv;9A zc(HTF+^-+KXSTDejzI3s9}w?9L3}4BL(GPUXJj6lfl6ju{0^Q*4yo^|1&kKjT9lII zqDkmTsLRnF^yKdlaTUGS6PRbaCjN#9Md!8o#Ce`tOyfR?`uv>#%@FV=!K(TldcbT? zgXj$Mz_?+`&>Q^jb^1opi)lDP~$U@ziDKz&DM7(pbO+t z_@0GCRq-v)!)rriXC*e9)nuR2bF>k3a2*I$6X!tH#P^NOXgGeuD2+bBZHY(W`UxB) zT?|Fd*LbZfZ>T*{rz5t`Fbzh?GCecxM0Oe9f{zHX9IQY4gsnw6jb-?vcMC3+K;m=h zur;7P#x_Fj_{9*NSdo{6=)`RFU#KuP2|5AI#nUCp^DQnW)pvi6?|A$+fnWB(t-OU@ zGw=ZEn)?8$i{_|n`6s*r-wsj8YoGgxksbembNm}(1HZ^W4!;R>Xm?}k>F?DoB>pU0J?M`#$n=ThSdWf7szj;>TELuv}7r0j}dr)7_h>ENq<{Yd``SU`K!|Mj03>lHv%=W}Xg30IV=Snax z@6GG#iTinLxtt6-w@2dKQdW0+Qdz~yKIUav*&*nbw8NTbKACC0obMhJpJGQ@m*cBh zGOn|NbOp^sJCGfQe|9!fBjmcgP&TS-^w}w88tH?2f02!&Gxe2OhInql4Pe+**6I{kS2%H zfKK|tZturk$Qb>Zf69i_#4IT-MP?e= z$R~0;Ee**eSAeat@I=v5bca=_wvbJ;$jnXlXGq8smbLKrq#BX*N{paEYUjTT+s^tL_* zYJjiPW~paUQB}c9;?+FS$(l2h!rr#m>%-5a7!L$?vpk|+-qSpRM}e<7t^C+C3}=+? zKi3L<9*Ny?121v?fICUs-8E<%LpFMdn&8d23i;2M;|!1eL_P7j*amBOV|fc&+Zbyu zBbC%Y^`G!|&*%iL_YAEU5nA8JO`vLxsg-~#--Q(c6@v{=Lp(bU&l8>W*_7GwqD~n$ zuP|(W{RXHLFkdv~7uiu(l?fYiSu(pA7PdEM#6MPcAYNVmrjryoDj>t$$I3^-@V6&DF zs_u_d(rF){2j1kkTbv}(wm)r6XLIKy&bcS-ekX~xkJJ?RAtov_T|+vPMnqSy`fRc~ z;Jcn7FUX*Mh74qu&n5flL$ZSOgo?S zdRUXJik|mgu&QT7?o~vNvG0a$MTC7O?1K6)TOb~xsHh>5(b8m=u?=_du1a7q+8A_F zSqcqG*^vStYc$y5mwsVIlV67Yr3%SI!Sbr`;TQC&W4^eL&X?&i2h3Z zk-_RL#rDiRkF1FA?||=lh6V-WkG=1>ijqZ&>1)QmrM>6|sIoE#vRbc;Yq3nC^UgRe z1e;>NkF=}sSoK2hk))^~{u-}xy_-N{jF8wt+v3X-($%7ht6?nW?>n_s*lp*S3A^n) zKJ2^BJksBiQzc*UzziIa|^(}__$4^)1qicICS*0dci|}RaN45%Lbf$#L z!-|Oh3jY{?rO7+u2C#h%{_BtJ4F7mr13K@F{fx4ogto1|4`TCniX$vH3ub3=5$QG> zjE_N9yYoq&upRX~P#Av>ewzY%K{*vF?ppyBhGSxtFyiM-lqgA}*CxTgM2QkTew-*# U;z>!Z?J@BGlQ_2F|HA+N4}BNg2LJ#7 literal 0 HcmV?d00001