wzip-1.1.3/0000755000175000017500000000000011304532154011443 5ustar anfraanfrawzip-1.1.3/Makefile0000644000175000017500000000023410730040170013074 0ustar anfraanfra#!/usr/bin/make -f wzip : wzip.c gcc $(CFLAGS) -o wzip wzip.c clean : rm -f wzip install : wzip install -g root -o root -m 755 wzip $(DESTDIR)/usr/bin wzip-1.1.3/wzip.10000644000175000017500000000644706563352004012536 0ustar anfraanfra.TH WZIP 1 "24 December 1997" .\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection .\" other parms are allowed: see man(7), man(1) .SH NAME wzip \- lossy data compression and denoising .SH SYNOPSIS .B wzip .I "[ -c | -d | -dn | -hdn ] num sf" .SH "DESCRIPTION" This manual page documents the .BR wzip command. .PP .B wzip is a program that can be used for LOSSY data compression and denoising. It reads from STDIN and writes to STDOUT. In compression mode the input is a sequence of ascii floating-point values. .B num is the number of these data values. The output is a sequence of small integers, most of them zero in typical application. This is ready for effective compression with a standard loss-less compression program like gzip. .PP The program can also be used for denoising. In this case both input and output are sequences of ascii floating-point values. .PP The scale factor .B sf determines the strength of compression or denoising. A higher scale factor means heavier compression and stronger denoising. Four times the standard deviation of the noise content is a good start. Otherwise 5 percent of the overall signal amplitude might be used as a first estimation of a suitable scale factor. .PP If the noise content of the input data is strongly non-Gaussian-distributed, like Poisson noise. The input data should be transformed to approximate Gaussian-distributed noise. If the input values are Poisson-distributed, that means for example raw counts per channel in EDX or XPD, they can be transformed to approximate Gaussian-distributed noise by transformation of each data point with y:=2.0*sqrt(x+0.25109). Back transformation is done with y:=(x/2)^2. The summand 0.25109 compensates for the bias caused by the asymmetry of the Poisson-distribution. .PP Invoking the program without any options writes examples of the use of the program to STDERR. .SH OPTIONS There must be given exactly one option. .TP .B \-c Compression, reads .B num ascii floating-point values from STDIN and writes a sequence of integers with high redundancy to STDOUT. .TP .B \-d Decompression, reads from STDIN and writes a sequence of .B num ascii floating-point values to STDOUT. These are more or less similar to the original data. .TP .B \-dn Denoising, reads .B num ascii floating-point values from STDIN and writes a sequence of .B num ascii floating-point values to STDOUT. These are more or less similar to the original data. .TP .B \-hdn Denoising with hard thresholding instead of wavelet shrinkage. Single untouched noise peaks may be visible with this mode. On the other hand, there is much less impact on the signal slope. .SH "SEE ALSO" Donoho, D.L.; Johnstone, I.M.: Adapting to unknown smoothness via wavelet shrinkage, technical report 425, Department of Statistics, Stanford University, Stanford, June 1993, ftp://playfair.stanford.edu/pub/donoho/ausws.ps.Z .PP Franzen, A.: Compression of process data with a wavelet method, steel res. 69 (1998), No. 1, pp. 28/30 .PP Franzen, A.: Non-linear denoising with wavelet transformation, Z. Metallkd. 89 (1998), No. 4, pp. 297/302 .SH AUTHOR This manual page was written by Andreas Franzen , for the Debian GNU/Linux system (but may be used by others). .P Copyright (C) 1997 Andreas Franzen, placed under the GNU General Public License, see the file copyright for details. wzip-1.1.3/debian/0000755000175000017500000000000011304532154012665 5ustar anfraanfrawzip-1.1.3/debian/control0000644000175000017500000000116211304530210014257 0ustar anfraanfraSource: wzip Section: math Priority: optional Maintainer: Andreas Franzen Build-Depends: debhelper (>> 4.0.0) Standards-Version: 3.8.0 Package: wzip Architecture: any Depends: ${shlibs:Depends} Description: Lossy compression and denoising The program wzip is a preprocessor for LOSSY data compression. A sequence of ascii floating-point numbers is transformed into a sequence of small integers ready for effective compression with e.g. gzip. The program can also be used for effective but time consuming denoising of measurement data. Wzip was originally written for the processing of EDX-linescans. wzip-1.1.3/debian/compat0000644000175000017500000000000211304531714014064 0ustar anfraanfra7 wzip-1.1.3/debian/substvars0000644000175000017500000000004011304531177014642 0ustar anfraanfrashlibs:Depends=libc6 (>= 2.7-1) wzip-1.1.3/debian/changelog0000644000175000017500000000375011304525610014543 0ustar anfraanfrawzip (1.1.3) unstable; urgency=low * Updated to policy standard 3.8.3.0 -- Andreas Franzen Sun, 29 Nov 2009 18:07:26 +0100 wzip (1.1.2) unstable; urgency=low * Removed -s option of install in Makefile (Closes: #438282). -- Andreas Franzen Wed, 12 Dec 2007 21:12:34 +0100 wzip (1.1.1) unstable; urgency=low * Updated to policy standard 3.6.1.1 * Compiler options changed * Minor changes to Makefile -- Andreas Franzen Sun, 26 Feb 2006 23:20:26 +0100 wzip (1.1) unstable; urgency=low * Updated to policy standard 3.5.9 * Added a Build-Depends on debhelper -- Andreas Franzen Mon, 31 Mar 2003 20:41:15 +0200 wzip (1.0) unstable; urgency=low * Updated to policy standard 3.5.2.0. * Changed version to 1.0. * Changed compiler options from "-O2 -g -Wall" to "-O3 -Wall". -- Andreas Franzen Fri, 30 Mar 2001 23:30:50 +0200 wzip (0.1.5) unstable; urgency=low * Updated to policy standard 3.1.1.1. -- Andreas Franzen Tue, 11 Jan 2000 01:15:32 +0100 wzip (0.1.4) unstable; urgency=low * Converted to debhelper. -- Andreas Franzen Sun, 20 Dec 1998 20:13:00 +0100 wzip (0.1.3) unstable; urgency=low * Added examples.tar.gz. -- Andreas Franzen Sun, 09 Aug 1998 18:56:13 +0200 wzip (0.1.2) unstable; urgency=low * Closed bug report #19436: wzip: md5sums-lists-nonexisting file LI#172 by repackaging. -- Andreas Franzen Wed, 18 Mar 1998 18:27:02 +0100 wzip (0.1.1) unstable; urgency=low * Hard thresholding denoising mode added. * Address of the FSF changed in the copyright file. -- Andreas Franzen Fri, 13 Mar 1998 00:06:46 +0100 wzip (0.1) unstable; urgency=low * Initial Release. -- Andreas Franzen Wed, 24 Dec 1997 09:50:58 +0100 wzip-1.1.3/debian/README.debian0000644000175000017500000000053007036474607015003 0ustar anfraanfrawzip for DEBIAN ---------------------- wzip is a preprocessor for lossy data compression. It can also be used for denoising. wzip is originally written for inclusion into the Debian GNU/Linux system. Copyright (C) 1997 Andreas Franzen See the file copyright for details. Andreas Franzen , Wed, 24 Dec 1997 09:50:58 +0100 wzip-1.1.3/debian/debhelper.log0000644000175000017500000000027511304531177015332 0ustar anfraanfradh_installdirs dh_installchangelogs dh_installdocs dh_installexamples dh_installman dh_link dh_strip dh_compress dh_fixperms dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb wzip-1.1.3/debian/rules0000755000175000017500000000256211304532122013745 0ustar anfraanfra#!/usr/bin/make -f # debian/rules that uses debhelper for package wzip # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 CFLAGS = -Wall -g ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) CFLAGS += -O0 else CFLAGS += -O2 endif configure: configure-stamp configure-stamp: dh_testdir # Add here commands to configure the package. touch configure-stamp build: build-stamp build-stamp: configure-stamp dh_testdir $(MAKE) touch build-stamp clean: dh_testdir dh_testroot rm -f build-stamp configure-stamp $(MAKE) clean dh_clean install: build dh_testdir dh_testroot dh_clean -k dh_installdirs usr usr/bin # rm -r debian/tmp/usr/doc $(MAKE) install DESTDIR=$(CURDIR)/debian/wzip # Build architecture-independent files here. binary-indep: build install # We have nothing to do by default. # Build architecture-dependent files here. binary-arch: build install # dh_testversion dh_testdir dh_testroot dh_installchangelogs dh_installdocs dh_installexamples examples.tar.gz # dh_installmenu # dh_installemacsen # dh_installinit # dh_installcron dh_installman wzip.1 # dh_installmanpages dh_link # dh_undocumented dh_strip dh_compress dh_fixperms # dh_suidregister dh_installdeb dh_shlibdeps dh_gencontrol # dh_makeshlibs dh_md5sums dh_builddeb binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install configure wzip-1.1.3/debian/copyright0000644000175000017500000000070610400434274014623 0ustar anfraanfraThis package was debianized by Andreas Franzen on Wed, 24 Dec 1997 09:50:58 +0100. 'wzip' is written for inclusion into the Debian GNU/Linux distribution. This software is copyright (C) 1997 by Andreas Franzen You are free to distribute this software under the terms of the GNU General Public License. On Debian systems, the complete text of the GNU General Public License can be found in the file /usr/share/common-licenses/GPL'. wzip-1.1.3/wzip.c0000644000175000017500000002426507261213650012615 0ustar anfraanfra/* wzip.c v1.0 - a preprocessor for lossy data compression Copyright (C) 1997 Andreas Franzen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Andreas Franzen , 24 Dec 1997. paper mail: A. Franzen Seewenje Str. 203 D-28237 Bremen Germany */ #define sqrt05 0.707106781186547572737310929369 #include #include #include void usage() { fprintf(stderr,"wzip 1.0\n"); fprintf(stderr,"wzip is a preprocessor for LOSSY data compression.\n"); fprintf(stderr,"It strips off random noise from the input data making it\n"); fprintf(stderr,"possible for a common loss-less compression program\n"); fprintf(stderr,"to compress with high efficiency.\n"); fprintf(stderr,"compression:\n"); fprintf(stderr,"cat data.asc | wzip -c num sf > data.i24 ; gzip -9 data.i24\n"); fprintf(stderr,"decompression:\n"); fprintf(stderr,"gzip -d -c data.i24.gz | wzip -d num sf > data2.asc\n"); fprintf(stderr,"wzip can also be used for denoising.\n"); fprintf(stderr,"denoising (soft):\n"); fprintf(stderr,"cat data.asc | wzip -dn num sf > data2.asc\n"); fprintf(stderr,"denoising (hard):\n"); fprintf(stderr,"cat data.asc | wzip -hdn num sf > data2.asc\n"); fprintf(stderr,"num is the number of data points and sf a scale factor.\n"); fprintf(stderr,"data.asc is a textfile containing num floating-point numbers.\n"); fprintf(stderr,"This is free-software, placed under the GNU general public\n"); fprintf(stderr,"license as published by the free-software foundation.\n"); fprintf(stderr,"See the file copyright for details.\n"); fprintf(stderr,"\n"); exit(1); } void wtrafo(float *y,float *w,int n) /* * Transformation of vector y into wavelet space vector w by using * the Haar-wavelet base. * n is the number of data points. * y and w are indexed from 0 to n-1. */ { int a,i,b1,b2; float *d; d=(float*)malloc(sizeof(float)*n); a=n/2; for(i=0;i0) { for(i=0;i -sf)) w[i]=0.0; /* * All other coefficients move the amount of the scale factor towards zero * with t=0 or are untouched with t=1. */ else { if (t==0) { if (w[i] > 0.0) w[i]=w[i]-sf; else w[i]=w[i]+sf; } } } wbtrafo(w,y,n); free(w); } void tidenoise(float *y, int n, float sf, int t) /* * translation invariant denoising (could be improved) * * The simple denoising introduces artifacts into the data. The * structure of the wavelet base gets visible. By doing the denoising * process with each cyclic shift of the input data and computing * the arithmetic mean of all results shifted back, these artifacts * vanish. * * t=0, soft denoising, wavelet shrinkage * t=1, hard denoising, hard thresholding */ { float *y1; double *y2; float *y3; int i,j,k; y1=(float*)malloc(n*sizeof(float)); y2=(double*)malloc(n*sizeof(double)); y3=(float*)malloc(n*sizeof(float)); /* * Set result vector to 0.0. */ for (i=0;i<=n-1;i++) y2[i]=0.0; /* * any possible cyclic shift */ for(i=0;i=n) k=k-n; y1[j]=y[k]; }; simpledenoise(y1,n,sf,t); for(j=0;j=n) k=k-n; y3[k]=y1[j]; }; for(j=0;j16777216/2) iw=iw-16777216; return(iw); } void compression(int num,float sf,int n) /* * compression */ { int i; float max; float *y; /* data points */ float *w; /* wavelet coefficients */ y=(float*)malloc(n*sizeof(float)); w=(float*)malloc(n*sizeof(float)); /* * reading of input data */ for(i=0;i max)||(w[i] < -max)) { fprintf(stderr,"Absolute value of scale factor is two low.\n"); exit(1); } /* * write the header */ printf("wzip-1.0\n"); /* * output of waveletcoefficients as 24-bit signed integers * lowest byte first * * (int)(w[i]/sf) means that each coefficient with an absolute value * lower then the scale factor is set to zero, just like in the * denoising procedure. */ for(i=0;i0) i24out((int)(w[n-1]/sf+0.5)); else i24out((int)(w[n-1]/sf-0.5)); free(w); free(y); } void decompression(int num,float sf,int n) /* * decompression */ { int i; char st[256]; float *y; /* data points */ float *w; /* wavelet coefficients */ y=(float*)malloc(n*sizeof(float)); w=(float*)malloc(n*sizeof(float)); for(i=0;i<9;i++) st[i]=getchar(); st[8]=0; if(strcmp(st,"wzip-0.1") != 0 && strcmp(st,"wzip-1.0") != 0) { fprintf(stderr,"Input is not wzip-0.1 or wzip-1.0 format.\n"); exit(1); } for(i=0;i=num) */ n=2; while(n"ˆ}^a(*Y3 [M t$Bd:mu:1Un $o VLN.IW'YHD'rc?c{Y+v׭MUoZ_4j@`Fq1ږd<[\&'hi8&5 1B0,ӶTWSli'=^OOS &z<d fz)ϥm{  A:u^B_ 8yú֕8^Ih/lr |t10ǹ w=fc'bBjT|)> Z o\خ)Y|MUtbyXt#6 ]̧[!_wM6 Qjz4= Ѝgy>E z/}>zFp}u=J?beQxCP3}B?c6xY v3F,*![d|"<< 2O_/Y~ ͻBCȳ8'm`z  x-϶-` ˽b} ܊Ou툿 ,v'4x=#J//!V }~dWu?CT ѷ&}Mj\=;ЍgOیW[`)XC޲{ l{)~A?`CX~l/0_FCfGy\M# xΆ:藬H\>g{]6fѿql Xp6p,4BUl*"0EY={4l$+l6 Qqg4,.r݀f26&Qx[X́} ;3&6 {9rʈ<+X-; a;l<}CXh6&lD!rC14~B;U Ff.؜Z9;]–0vE໘u [% =X' ؉Pa)`z0:sxEY+<ci3[ @o{P(D tHcG,syu1cх82GAofxn@p ֳ5@;Z_Rp[7F5g.d34:x]^nDKC~va'Zv&= S d9&,]N_%iϮ+0&U croB)݌[QM{{>΃t "7n ȗ+x;|>Է_MS|W6D3q?˶dݹux=5ي@wx϶TeվKOS\/}qyyv(iKR"*qR['.U2N"MB?]ʤ}|&$AҠ'CSF>ql;Is)(MB3w>pa6TW r920' ';cTOBޗ4Q%e4Q#_Du#4TZtfi: t)VQhH͈4RLeWGaDao**hn@NA]2akFuȣ![qC8}+H{J3l!l: '"]X$5HSpBt0B$ AS \'B*ޝ|QGM'+./b*?i{L1 lzzd;y|f19I4F@ԾE~B7Iш$f$ $&0l49jyE<3׾nB DNq 11J0z cV㯉ULFõ+or2W2#U8GH=v@d j$RMeQ GqW}-btD/H&"~"K ?KDT<ˡ RwlpN*2T"r$]IQ1Gq5lG+ڶ:;֊bg5CTZ's]GTgu( B&lO9lֈ]mM5*cwz|TR]TUCSes*d oV-R1A clh3Zy%'cd ^ Y]ʞ9Ǣ>k8Z#Y5B6:kWSlFz?.іL%Jj}DdU|W< g{WRbೳ)9s<;&W/?鋲y;w)^:O0w3ǿxjZjE(*\E流蓼{gfg ;qT0V3 f!Xy'iޏZ\}Z4n"<|oOߵxvGĞ#~.8N;F;9"kg*3>NxT%Xyxω _"}H3Ἂ z%%wOi޻ؑ$ٹ_' e # gt޲,VbXI*3_"nVF  |]{gDxe2s=L&m5@{§cG *x FS$>!E)M8@v@ v`_v S턤gEPU dPDviVقJC57!PBՊBRie0oU#LLR% /i =}Ϣ~]e8\N 8E]5qU QπVvIlfњft@(F j&P_wpV Pv]B}_:M*-(-cx7 !m*<&fh@zJ$|vAiT**Y OԝkS6T~>QfŲUA ^%K] V'4 W. cK9X#C[C+CQ^d2(9w}U!F5T怲 ?[WK̳H#ȩ#:aL Kk!;{ 1pncO+u|T[hE _)HVDmJ;62h&;E!H=V&ZrUo8=#+]\ $;cp y{En<ҬKb򗛴 vJBrh B}әDž02>L.~]XU^PVZ#YK6Pw exd5IiPh>穦.ZJ4B$F⟒?Y%fDיD^!my1NueuOXXeII%M]@|\UVs&1<--18\J89 *x^7겥mHOq1gIl曭~y!eɺ|$_QYLWU~R4p^fїz}26KJvW/U2)IVz]! jݜcAEy"oTɞ?Y(fiC) *7hDnUQ%9F+ct=CUn&Tx;s.Gs?TQlTJN-"مLMَr % 4R.$ӎZ[= t] Eh5%)-J{v-i>T~7J#e؃gwN3}Q=-Q/ӓn'w9+ ' nrP:~-oV#-U7wEaW@Xi-$5Md-8 n7jU=uP0"AŦ+(&V"ŃrƩ")-'cΓ7E"KލD DLG}h,$/ֲ_I s # $-_lrmY =(%#JL!*l3Ž'#Sq=bҋܟ QN7sGQʚF&sHƓ`]bV٦"ؕՈM2$2A2擻zKUqMQuq)_Ҥ\.SH#52"R'sJ, Mz}LĦ4HyrVe/Id5APwLƬCd?%U"ɦbĖ * OYˮnb?$G}ORplғʋDT}[:7Aóx.C~lԳ3$R^B@~6\~ CfҎCMz:V'wpE*sc`SNgVE3.SzAoI+|9tлeK$+k.QTCI*[NHQS(َU:&{&5IN5ުVAVPކ viinNJeukOvª9ٚۙztSNKT Nc>ˌq?8B\3H{T}-'PXZ.2)H6FQ;,*Á(D*%jHFkWI #Ȣr E=4#%@̝E7OK's:*Ĉ4*^{FVGD:a)"bZSư\<'%sF I\tW9 d?eICuTޔ4x93L}I[bM X$jIGlŌs}P5:3̐Ȣf3AZ*DbxQ:OdεXhdHeL"Ԡu#\8J_Zסyv˜2A9jF>Q+ A2PՓ়6Yk)wD~gCuhn$A1Ꝋ͊չ>uEt ,g$O,gY "چ6Iz6Tt&]J-ER+k32*:bNs%I VLٟ˓:Ɲ'_uN!k.Ƨ6-4\Y3^֨}];%Me!5􍙞׉:yu66+Ճ]14v_SY:^)z<gB hI $ѫUu>(KeOOvFi"bKvnqޟQu.FV"\r'+_ Թ̻uOYcgej+5{]V S9Òe>i~+xW_r 9ꡢtn9!;*5شsͬy?96C1`7$?,+u@4J3 _1*׆D4AS(`qrS8y$ N2t#Y+R%tVhkW?fs=1jw ޱB+cIh$$Y7+l^|NvyHM>y"B;U{q\k~_bXSݥחN⧐e|<$otI1~2e]i~㛒Lz>=uO0zSM!tG(D=[XseboOYaYTV֝K`$:Ν@=Ŗ̸(IFrدDl$<׈O\o%!j2+ EY?8~CaQ$d=YNdM i;0cNus]1q=I]sCfy'҉Ox(!3.9|;ԝ<4uþT,i\/Ӫ^}uVēk:ÞEh H2ONv!+_=?+nN}ewxy"߉6eVuU5/-ң-cYs-b#Qj(eS=04Nme,<i_᠕kOU}!t\NTrO(6VMBȝ"2 G9a_9h ~AZY˘d?& c$ھ5s+nYT"5G.$J*"N $d~UbM%Ppҹhaզn rJVz_r`SA(< 4:FCZ)d.EĮļ("4/ˎMDufLr5ֹ**ʹ y6Mɲy { #<%cx#qQvHU7HsW(>!¥Od*Eo4ZUɪG'EPT^8mj_0Nʲ;L8. <1+Q=:_I:P]ku;M8uw2bsX}GjZ=-* SMu5S{_wmO0ݞV!++jPH:H:sdU4s!6/JɳF{ȫlήT嵄LT :,yš\Sy4,6:ryO4>QVw" ^{ߢγ)ݛ/k9KЧ-_P!mogΔc&+NVlmQQUw,wVl,S; Ѭ[ :Mvvfzc߹{eNgͽZԟƳWqSm\YPיѺ0.mNv5s ܼf2ON8sWMwŭea:"awe->k7wr#wӌOٵkmNWRޞf=3#y͐2L~oE 9EFjr}֊KABc&S_^Et2ڔ>k߻CaK/"AZdewޮ\q:OnH$f|+C,Bqx^uPoX5ڿ0A8mtJo2f@ Ic1"'IQ9y1u"JQWQ*OX#R4kĥv?W]J"u~2wb!,?\ 7&cc"&l ΐ2]% LSH!CՍLkcn{S QU.E1۹(EUUܣ\U*Re)TI~SقY*FƦbCT~'ENҷ%-@Ut&NM.q,6I1zPE.BQYa |4Lr0U@v1v!T7*}&$(WsU5l[1dOկy!qdSM5S,YQ{7e/sU2 2_VEcշ[盟>}}7߿yF r3߯X31~YlT.|~|y\~usÍ~?ߋꀲvo^ܬ,mY>-&~΋;"/]#/L^̭s&/M=bx+.ё6- gP)]hGY=l1wQkե*mFWW*fcYԼ>q]'Ն֧z~ewvq*.M[\ϸ~\69ƥ7ڵczc1Dzsiƨ1Q4ר;9jcz2^|ն=ӮuӒz-+c;naIX~ڵ ]tl]+]M;d׬0azwـ3uwKglt ]-k7vm߲4ufMn{:|JfڗKboWFΆ.υu [_ycrߟG޽빏yX:D,%G?nwv7vDL/10jH[[RqF5+ =zF75i׌%sX9Hǒɹ\%\wxWMgbJӓ+WR_JKێrRǡ;] r4/#`%A,nfݯmEEW> &9+&q^u=wkK?w}i_nss_[7_V>+CЖ50glL3?ϫzW_wa^{Y>5bjBlcYk~`Wo`ltz(~n"_v(*VhW䔠o({rj2\0-wk{%;޾3eX`ۆ99;a isdQIiGJlYʎ/}E;KsuHkL:cmm6l/؜gu0$[;x-9mro͹|qիL"Y_Z^Z6//KÕjZ:3YPVxK]+L^V,yأLfBwE}`So-]k{k'UG}ġkeW*S](β3i\}CI/psZ1qmܬU˂]*45q_-..4̲[ hG1Ms.o3}7Z`i3pˣ+'-:1;ezfۨ^f% YZo\;9,8\e#C֯+WH$vвf8֎j˧4\t]_~.T2%\B̥+JpZXgn~{4iZ i霅7Z/ |A={%]@nmV=->Y݀V?R\ְw\iClEOslD0 {Qm}[ w\6ouNKĶ,v[;fK+jB.94 1.,JH{fKEw >bxa/sQzؗ_i1֨zbm9e+[kZߞ _M{ـ"JݭuUeok/&,Ks 07\7fk U8ܻ$1A󟗞ry_ZwY#vI-m#sTVI>l(˕Up>iRw<,r̋g=sf_⤕YٛљWT#t馫Ip9?Z]__ټnZpZcZ!W~V^v+HyY⼢ԯ=EPŴfw.o,Ye^U1\GWZf=8W;\%gc%fV-._K+wBQnEZ`TV!em2w1UOmԝ"fD2v[Q!bTlq0 /v8fU/]<{O:>yΏ]ve}WlS>5ƌu!yd|(] U5\ ]eg9iZ^UNc57gyiIN*_-$][W`MZaaC#ۧeFb֍7YalGR1_g2?e(nl[=oo1Smbf-2gϮ5JvKԍݺu,Nzgύ*CaNƭ СܴYp jң`-g,5I;/elL*د`_qZ?ýCc\{:4]u"twu9I]axZOkkfk8W[Hi4l{Yhѱme\Jvvxul[le`3ZsmRԸKjiz5zii)CGzeR:0APaΣ͐5fy qochۺp۾%><%|êbޘ* ⷴr3.34ֳijc[Koޠ*-°\L|۞ 4ptß-¤"f%M˻ak;0nǔh\@XwƏ]+ӗKvIi]1H=ls k%ˮ+PܑEUO8!.l{hE r@q2A 6+wwXŵ^=R*!eZy͐3IĄ]ɟaQ"8QiKϱ{ml/U,ŝ㘼G5Ls98kUt>/z 9¹ k#=3+/ wO˼k+Z}BW_w_uB߻}WxF䟦I^ uY3ٍ9:er1;sՀ&i:ˁژzI9|۔&e f!r/BP/peck&Ƞ:!Gjj`~  5fE"6fC /#g@}2ږuvަcJ$Z}G5Mb#mwcκ6a>}W1cϵ ;cfj(ЍϵbvBZn8xq!-U [ՇՈF* mHJKsx.dcڸ`}U.--kuU#{}nZ9؍ s9q}U?VWa#kw|  ;Ml aI34=ivn Ezڬ.uV,օ c]2,f'tluth^rY빋 tS\QVVF5vgW쥽[]\%h-RJ8ѐ{bD_G{@j @μuL\d$:;L![ yǖ*8?(˶nsʞi0o@8L+mO 1rνu2,tپW_dPiw2riFk}99f kN]OvY߅ոxk[y-ZgYzmkdz-;'k=z^t|Z|ݴ,exm,,KL{f_HľMS[ߢ烺8/]{wԽϘEus<z\sH P_>R#W1:gd؎p"+a9,@vs]3T^L2-O#)A*rv1שILFd]2U;;f{_ppYʶ3.>0\;uzy}igtȌ:~خ s-wSOLqIP}{{ ~b9> 32 g,zZȳ"YGhWY;*nYiwҴAvuuk2&:nQMH$\tG̓WNў: X9N%pEruφkdM14 AnN&,fȻ/\ ^s8%v@I;- 󜒛7vϲgF{^!hcߗ$g2Yvp{ ׯx}r̋cޠN3!v^0b!6,XQDžƪZy4#N`kD 4R*Ĉ) ~s9KCUȿ@?ε Zowĩ{fKEIPF ՀcgYQ,[qU1^p:U߬K:$P]C=6gƆ8ȝз_;T/"wQxPw="`\ۃֺEݒ0ÚSkk,e"qj ZʊyFyVc+t^kGgm}̋{ .HRUG"4={{^`qܛ%wKhI7Cl̵e1퐹0[fs8 *8ɆAkO'sҮ*Qj٢6[A9K @' NM>%ТVAkoi:;4anؾO438UuG5思[`25]سόKu.zSb߻'UʃW_ֱb sl2|2X!"۞1t `^ߵ3b7 X_n>겪by^@` 5Kgo,^gw@2w^3.'(dͩɤI #Cs62X &kvcx}̮Np茒c/%[ 7k,L[4 >A˗j[6;@84ؽްIC.C.;dwNvMv==)V5_wȦy{4&i  >5Ҁ tءtVXRx:dM:4=C)F8RWG@>T9ZJ`pQjQ6ōPݸ" t*3Dd;? r_W/2& 4Q~9>DݶK`̱ɌNQiOg"e` <(m㶺r{KoL`:y ,E6 2~栐j7R<,I1HHITJ'`Ǩobgn/!ȀDH׀x)s.RRsR!Or`1RcLe݌gx'ݦl:)R҉C J쓠c- aQ.vQgz@JCM9dM"!cAKfi%F&  tc,HʕS 4I$A6o _*@5Mއm x}BZTrZA'AiU˳C _-e[` IAdSU0@,}PS"RA+bqodʦA V%sG+; Ϸ pyq\u D bb8˸P]bTF*h[WA"wg:ږ (^>Wk3`0<@> lHD3UvǗOxuȼiJ\{X-13`o{*+7U-[@ u1uzCf I7O=/O&B1nʼn.JJ8TgDe`R|J!.[9.CUST3$3seAz`HtȰZd(**EMbQvURY,P#U;uM8u)n6gw2TR/js݉`:t#2p@"'+vY"Ao@K$Wv➪=_Km\fLuOQնtrzwFumP=̬lq#1*Į@q( ).yi"SGRYL iSRS9Ȫ"vco)UTJxUK-C>PTOKMe2[Ē2:vYkE§xd*bVTq2D1r |©zUfE Lr6XƭP[b]@:ɱS/fSeSRF%v4TwWuzBG%vq@j"T9c%zUL$tPZ%fzJRojfqu]2lA|(Ci~b3y(Ϝzc$\ Uabr@4\b)TU)EL}oP+MUU[QnߒrP#Q` XL@#C !IPSU@XsU>*%*g蟈E<T 85P oa]J(sjWM(n"kP9 Qa, ẍ:ԍ ΨouOy}9J= 滤yn>MTg_WHguձr{S UNEU˚5nt]iqPJ0([AZ_ߥ*l/m@h'#tۧYBQ,b+Cq)(p!\T. ([Ee*td.`SԶ,,vn_DHTӨ;`rz[#$*P84P}~E"JԉrEV(2FA8]S,[H߇P4'QG[3%QɳAuĠ;S,ke;6ȮSu;ӝٷ|γ^UY;Bs ԚWA }wEΙgq(y7yՎ#ꝐGRsƝeU&LW& ܞHUW(IÀsj*=w~Ⱦ`:3|3Yutz6DN&.<"VdLcgQL}9k ]#rt&弨S01 u8Oj5%M]sRFHZ}¾#3YbGl92FڬCNG7yD7 Cj 3oԇƤޡ*(t.OU,’K CPiGۿhZZUd8Z ^b@TGM":zF 穏07dtu>C3oG德!H-Qq;Oޘkpc eL C}(t0@c[.%6 Qg"dvuFP:UGYS"9׻/?I W iMxn#9"ׅ,QT ꣚j5:gN;4*d)ZPoG B]"+pֈrЭD ?>`ۡySEsAUCXנ[TƘɢȫ'Y%+(eJQ|Tſ+wYyOL"58ūF2w`y˖֨ <YBYF8 w].&ݫ /ܩp?>:% Oto^DY;zG:#ICW'Xun\9 'G['&~֖z k:)CL N8sPP6[b:ÍM٦t3uI̾g%T锄8>/KS^Z$LP >tdWj2:WH+kdޥY#0];".қ 3 +]%\,sCJқ~ } MF(EA5[UHKRT춡g odF 5`zTCTrHHwF=ri{f]!g]%ϟ1jt%C.*2̮&]L&h,wfS?ىX4yrJ:IYގEv|8 zRQsZU)ԹJu*ĐR( yllϙU1IĢú+ه8Nc ۋ;gYMuÀE@vT(SʽBuQQyT.<62F;teIq |G5qCUȸi~fI)Gx;F48A/d6F $Y!* xd;f]1`{Ė:{֩~ThB6h~;]>ݘL-u~NXP;ҷZ +^D (ʹSV#JlȤ=f pJ˹]c@uZ< hY!m7&q%tIuL@%Ð\<1߯+RtB3d9'e {.yȴQ!|3WsZ|fW]h*DrU½+04bW,]+ ]#]}9#X9p`dC]-0:!,u 0gEaTd)-!)j._L6"iGd4ս7{IvW g1zǫks޿ Mi8b,.>?l IȆxНK漴S4to"k׹ ؁/J]ɫe_1a&+fxFٻAwTPT9`@CZ/M'kҙW7 $ A)TexI;KMed2Z>\@ QKu|`N5=>2m :0S.0B;QXgai}\3AKv>  'v:HT] ~1c;o=v12P+/,vnT7;.`GmQ,xA2U8K[=4`Uǎ=8ac 5 a(0>BUqD>ƃoel`ԯt1:d%gv}BCIG(p}\&覝}m@;GTs}?Ǔ\}n5ObS?|Ws}5;?{pڱLvm& Wr+]#h̺s~ygqL}ҾL7-W@P(b/m }w sNUp-u#EH3^PHaMݎOC wùݓ0 3(v/ F9l"w,SsjS \W<%WAdܡg}θ%Z6 lG97 dlJ/< Wu;:~~V2UܥOO@d_}Ӈ|F r՗P)~Wr͗K-r_>Z%ϏO7˯nxeno/ps/û?K_~0޼?=^7{}݇><>x{x{×OO?7o޼y|{<˗=/7?~o>||?}ot{Ͽn>|wO7~q[^bwO^t˟}yۏO7w_O??=^>>\n?]t{Qon>>=>ݽ}pOc*yzw9V:>>|}cN?rzsOǚ17?>_?yx?_J(ۿ݇wy>O_elor?ñ?ӧǗݾt/2"ǕkqLowo><to/_^7~yY8dcFxɼr_g7o˳>|s~pyp~y߻o˷ς_w;?;ۯr񧟞Wz\^ιNoW~zB@l_ex|t\>_pwx y/u|xg)ٕ_Ϟ/"Ƌn7_z~X{~__޿}/_Wx_\$?~YUEo_vѯ~3߽7wO1F$w(]xc=Ǘ{}{qZ>n}Hȡs:x,\׻a:߲һ{sEݿ{{sRuǫ=_gXC®+u}/ǕJvh(o~V띞þ޹{ng7s|7}m޼t{/:[9!ݟ~<)xi/7_Sn|8˖<yn><^ϟ.x=ӡ on/}~~FswϷoxfǗop/wuáN|x~n~חxp輟/ǧOOO{{wU@WpݳsH<~7!Boۿoۿoۿoۿoj"