pax_global_header00006660000000000000000000000064120254275500014514gustar00rootroot0000000000000052 comment=ad955620e460965ce83c652bc690bea4dc2e21eb pymvpa2-2.2.0/000077500000000000000000000000001202542755000131135ustar00rootroot00000000000000pymvpa2-2.2.0/.gitignore000066400000000000000000000011141202542755000151000ustar00rootroot00000000000000*,cover *-stamp *.bak *.kcache *.kcache.* *.prof *.pstats *.py[cod] *.swp *.o *.a *.valgrind.out* .pc *~ .coverage .nfs* /.emacs.local /coverage /logs /temp /trash /debugs \#* \.\#* /build /build-arch* data/haxby8x6 debian/*.debhelper debian/*.substvars debian/files debian/python-mvpa2/* mvpa2/*/*/*.dylib mvpa2/*/*/*.so profile.out svmc_wrap.cpp tests/.noseids tools/codeswarm tools/pdfbook *_flymake.py .ropeproject logs nobackup_* doc/examples/match_distribution_report doc/examples/match_distribution_report.pdf .eric4project doc/source/examples doc/source/generated doc/api /datadb pymvpa2-2.2.0/.mailmap000066400000000000000000000005021202542755000145310ustar00rootroot00000000000000Yaroslav Halchenko Yaroslav Halchenko Per B. Sederberg Per B. Sederberg Scott Gorlin Scott Gorlin Swaroop Guntupalli Swaroop Guntupalli pymvpa2-2.2.0/.travis.yml000066400000000000000000000017651202542755000152350ustar00rootroot00000000000000# vim ft=yaml # travis-ci.org definition for PyMVPA build (based on nipype configuration # which in turn was based on nipy) # # We pretend to be erlang because we need can't use the python support in # travis-ci; it uses virtualenvs, they do not have numpy, scipy, matplotlib, # and it is impractical to build them language: erlang env: - PYTHON=python PYSUF='' # - PYTHON=python3 PYSUF=3 : python3-numpy not currently available install: #- sudo apt-get install $PYTHON-dev - sudo apt-get install swig - sudo apt-get install $PYTHON-numpy - sudo apt-get install $PYTHON-scipy - sudo apt-cache policy # What is actually available? - sudo apt-get install $PYTHON-h5py - sudo easy_install$PYSUF nibabel # Latest pypi - sudo apt-get install $PYTHON-nose - sudo apt-get install shogun-python-modular - sudo apt-get install $PYTHON-mdp $PYTHON-psutil $PYTHON-sklearn liblapack-dev - make script: # Run only nonlabile tests - make unittest-nonlabile pymvpa2-2.2.0/3rd/000077500000000000000000000000001202542755000136035ustar00rootroot00000000000000pymvpa2-2.2.0/3rd/libsvm/000077500000000000000000000000001202542755000150775ustar00rootroot00000000000000pymvpa2-2.2.0/3rd/libsvm/COPYRIGHT000066400000000000000000000027311202542755000163750ustar00rootroot00000000000000 Copyright (c) 2000-2009 Chih-Chung Chang and Chih-Jen Lin All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither name of copyright holders nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. pymvpa2-2.2.0/3rd/libsvm/Makefile000066400000000000000000000005431202542755000165410ustar00rootroot00000000000000# Minimalistic makefile for libsvm LIB=libsvm.a MISC=svm.cpp LIBFLAGS=-fPIC CFLAGS=-Wall -O2 TDIR=../../build/libsvm all: prep $(LIB) prep: prep-stamp prep-stamp: mkdir -p $(TDIR) touch $@ .cpp.o: g++ $(CFLAGS) $(LIBFLAGS) -c $^ -o $(TDIR)/$(^:.cpp=.o) $(LIB): $(MISC:.cpp=.o) ar cur $(TDIR)/$@ $(TDIR)/$^ clean: rm -rf $(TDIR) rm -f *-stamp pymvpa2-2.2.0/3rd/libsvm/Makefile.win000077500000000000000000000005361202542755000173420ustar00rootroot00000000000000# Minimalistic makefile for libsvm LIB=libsvm.a MISC=svm.cpp LIBFLAGS= CFLAGS=-Wall -O2 TDIR=..\\..\\build\\libsvm all: prep $(LIB) prep: -@mkdir ..\\..\\build -@mkdir ..\\..\\build\\libsvm .cpp.o: g++ $(CFLAGS) $(LIBFLAGS) -c $^ -o $(TDIR)\\$(^:.cpp=.o) $(LIB): $(MISC:.cpp=.o) ar cur $(TDIR)\\$@ $(TDIR)\\$^ clean: -rmdir /S /Q $(TDIR) pymvpa2-2.2.0/3rd/libsvm/README000066400000000000000000000002611202542755000157560ustar00rootroot00000000000000This is a copy of LIBSVM 2.89. It is only here to be able to easily build a static lib for linking the LIBSVM python wrapper under windows (when building the binary installer). pymvpa2-2.2.0/3rd/libsvm/svm.cpp000066400000000000000000001717211202542755000164210ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "svm.h" int libsvm_version = LIBSVM_VERSION; typedef float Qfloat; typedef signed char schar; #ifndef min template inline T min(T x,T y) { return (x inline T max(T x,T y) { return (x>y)?x:y; } #endif template inline void swap(T& x, T& y) { T t=x; x=y; y=t; } template inline void clone(T*& dst, S* src, int n) { dst = new T[n]; memcpy((void *)dst,(void *)src,sizeof(T)*n); } inline double powi(double base, int times) { double tmp = base, ret = 1.0; for(int t=times; t>0; t/=2) { if(t%2==1) ret*=tmp; tmp = tmp * tmp; } return ret; } #define INF HUGE_VAL #define TAU 1e-12 #define Malloc(type,n) (type *)malloc((n)*sizeof(type)) static void print_string_stdout(const char *s) { fputs(s,stdout); fflush(stdout); } void (*svm_print_string) (const char *) = &print_string_stdout; #if 1 static void info(const char *fmt,...) { char buf[BUFSIZ]; va_list ap; va_start(ap,fmt); vsprintf(buf,fmt,ap); va_end(ap); (*svm_print_string)(buf); } #else static void info(const char *fmt,...) {} #endif // // Kernel Cache // // l is the number of total data items // size is the cache size limit in bytes // class Cache { public: Cache(int l,long int size); ~Cache(); // request data [0,len) // return some position p where [p,len) need to be filled // (p >= len if nothing needs to be filled) int get_data(const int index, Qfloat **data, int len); void swap_index(int i, int j); private: int l; long int size; struct head_t { head_t *prev, *next; // a circular list Qfloat *data; int len; // data[0,len) is cached in this entry }; head_t *head; head_t lru_head; void lru_delete(head_t *h); void lru_insert(head_t *h); }; Cache::Cache(int l_,long int size_):l(l_),size(size_) { head = (head_t *)calloc(l,sizeof(head_t)); // initialized to 0 size /= sizeof(Qfloat); size -= l * sizeof(head_t) / sizeof(Qfloat); size = max(size, 2 * (long int) l); // cache must be large enough for two columns lru_head.next = lru_head.prev = &lru_head; } Cache::~Cache() { for(head_t *h = lru_head.next; h != &lru_head; h=h->next) free(h->data); free(head); } void Cache::lru_delete(head_t *h) { // delete from current location h->prev->next = h->next; h->next->prev = h->prev; } void Cache::lru_insert(head_t *h) { // insert to last position h->next = &lru_head; h->prev = lru_head.prev; h->prev->next = h; h->next->prev = h; } int Cache::get_data(const int index, Qfloat **data, int len) { head_t *h = &head[index]; if(h->len) lru_delete(h); int more = len - h->len; if(more > 0) { // free old space while(size < more) { head_t *old = lru_head.next; lru_delete(old); free(old->data); size += old->len; old->data = 0; old->len = 0; } // allocate new space h->data = (Qfloat *)realloc(h->data,sizeof(Qfloat)*len); size -= more; swap(h->len,len); } lru_insert(h); *data = h->data; return len; } void Cache::swap_index(int i, int j) { if(i==j) return; if(head[i].len) lru_delete(&head[i]); if(head[j].len) lru_delete(&head[j]); swap(head[i].data,head[j].data); swap(head[i].len,head[j].len); if(head[i].len) lru_insert(&head[i]); if(head[j].len) lru_insert(&head[j]); if(i>j) swap(i,j); for(head_t *h = lru_head.next; h!=&lru_head; h=h->next) { if(h->len > i) { if(h->len > j) swap(h->data[i],h->data[j]); else { // give up lru_delete(h); free(h->data); size += h->len; h->data = 0; h->len = 0; } } } } // // Kernel evaluation // // the static method k_function is for doing single kernel evaluation // the constructor of Kernel prepares to calculate the l*l kernel matrix // the member function get_Q is for getting one column from the Q Matrix // class QMatrix { public: virtual Qfloat *get_Q(int column, int len) const = 0; virtual Qfloat *get_QD() const = 0; virtual void swap_index(int i, int j) const = 0; virtual ~QMatrix() {} }; class Kernel: public QMatrix { public: Kernel(int l, svm_node * const * x, const svm_parameter& param); virtual ~Kernel(); static double k_function(const svm_node *x, const svm_node *y, const svm_parameter& param); virtual Qfloat *get_Q(int column, int len) const = 0; virtual Qfloat *get_QD() const = 0; virtual void swap_index(int i, int j) const // no so const... { swap(x[i],x[j]); if(x_square) swap(x_square[i],x_square[j]); } protected: double (Kernel::*kernel_function)(int i, int j) const; private: const svm_node **x; double *x_square; // svm_parameter const int kernel_type; const int degree; const double gamma; const double coef0; static double dot(const svm_node *px, const svm_node *py); double kernel_linear(int i, int j) const { return dot(x[i],x[j]); } double kernel_poly(int i, int j) const { return powi(gamma*dot(x[i],x[j])+coef0,degree); } double kernel_rbf(int i, int j) const { return exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j]))); } double kernel_sigmoid(int i, int j) const { return tanh(gamma*dot(x[i],x[j])+coef0); } double kernel_precomputed(int i, int j) const { return x[i][(int)(x[j][0].value)].value; } }; Kernel::Kernel(int l, svm_node * const * x_, const svm_parameter& param) :kernel_type(param.kernel_type), degree(param.degree), gamma(param.gamma), coef0(param.coef0) { switch(kernel_type) { case LINEAR: kernel_function = &Kernel::kernel_linear; break; case POLY: kernel_function = &Kernel::kernel_poly; break; case RBF: kernel_function = &Kernel::kernel_rbf; break; case SIGMOID: kernel_function = &Kernel::kernel_sigmoid; break; case PRECOMPUTED: kernel_function = &Kernel::kernel_precomputed; break; } clone(x,x_,l); if(kernel_type == RBF) { x_square = new double[l]; for(int i=0;iindex != -1 && py->index != -1) { if(px->index == py->index) { sum += px->value * py->value; ++px; ++py; } else { if(px->index > py->index) ++py; else ++px; } } return sum; } double Kernel::k_function(const svm_node *x, const svm_node *y, const svm_parameter& param) { switch(param.kernel_type) { case LINEAR: return dot(x,y); case POLY: return powi(param.gamma*dot(x,y)+param.coef0,param.degree); case RBF: { double sum = 0; while(x->index != -1 && y->index !=-1) { if(x->index == y->index) { double d = x->value - y->value; sum += d*d; ++x; ++y; } else { if(x->index > y->index) { sum += y->value * y->value; ++y; } else { sum += x->value * x->value; ++x; } } } while(x->index != -1) { sum += x->value * x->value; ++x; } while(y->index != -1) { sum += y->value * y->value; ++y; } return exp(-param.gamma*sum); } case SIGMOID: return tanh(param.gamma*dot(x,y)+param.coef0); case PRECOMPUTED: //x: test (validation), y: SV return x[(int)(y->value)].value; default: return 0; // Unreachable } } // An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918 // Solves: // // min 0.5(\alpha^T Q \alpha) + p^T \alpha // // y^T \alpha = \delta // y_i = +1 or -1 // 0 <= alpha_i <= Cp for y_i = 1 // 0 <= alpha_i <= Cn for y_i = -1 // // Given: // // Q, p, y, Cp, Cn, and an initial feasible point \alpha // l is the size of vectors and matrices // eps is the stopping tolerance // // solution will be put in \alpha, objective value will be put in obj // class Solver { public: Solver() {}; virtual ~Solver() {}; struct SolutionInfo { double obj; double rho; double upper_bound_p; double upper_bound_n; double r; // for Solver_NU }; void Solve(int l, const QMatrix& Q, const double *p_, const schar *y_, double *alpha_, double Cp, double Cn, double eps, SolutionInfo* si, int shrinking); protected: int active_size; schar *y; double *G; // gradient of objective function enum { LOWER_BOUND, UPPER_BOUND, FREE }; char *alpha_status; // LOWER_BOUND, UPPER_BOUND, FREE double *alpha; const QMatrix *Q; const Qfloat *QD; double eps; double Cp,Cn; double *p; int *active_set; double *G_bar; // gradient, if we treat free variables as 0 int l; bool unshrink; // XXX double get_C(int i) { return (y[i] > 0)? Cp : Cn; } void update_alpha_status(int i) { if(alpha[i] >= get_C(i)) alpha_status[i] = UPPER_BOUND; else if(alpha[i] <= 0) alpha_status[i] = LOWER_BOUND; else alpha_status[i] = FREE; } bool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; } bool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; } bool is_free(int i) { return alpha_status[i] == FREE; } void swap_index(int i, int j); void reconstruct_gradient(); virtual int select_working_set(int &i, int &j); virtual double calculate_rho(); virtual void do_shrinking(); private: bool be_shrunk(int i, double Gmax1, double Gmax2); }; void Solver::swap_index(int i, int j) { Q->swap_index(i,j); swap(y[i],y[j]); swap(G[i],G[j]); swap(alpha_status[i],alpha_status[j]); swap(alpha[i],alpha[j]); swap(p[i],p[j]); swap(active_set[i],active_set[j]); swap(G_bar[i],G_bar[j]); } void Solver::reconstruct_gradient() { // reconstruct inactive elements of G from G_bar and free variables if(active_size == l) return; int i,j; int nr_free = 0; for(j=active_size;j 2*active_size*(l-active_size)) { for(i=active_size;iget_Q(i,active_size); for(j=0;jget_Q(i,l); double alpha_i = alpha[i]; for(j=active_size;jl = l; this->Q = &Q; QD=Q.get_QD(); clone(p, p_,l); clone(y, y_,l); clone(alpha,alpha_,l); this->Cp = Cp; this->Cn = Cn; this->eps = eps; unshrink = false; // initialize alpha_status { alpha_status = new char[l]; for(int i=0;i 0) { if(alpha[j] < 0) { alpha[j] = 0; alpha[i] = diff; } } else { if(alpha[i] < 0) { alpha[i] = 0; alpha[j] = -diff; } } if(diff > C_i - C_j) { if(alpha[i] > C_i) { alpha[i] = C_i; alpha[j] = C_i - diff; } } else { if(alpha[j] > C_j) { alpha[j] = C_j; alpha[i] = C_j + diff; } } } else { double quad_coef = Q_i[i]+Q_j[j]-2*Q_i[j]; if (quad_coef <= 0) quad_coef = TAU; double delta = (G[i]-G[j])/quad_coef; double sum = alpha[i] + alpha[j]; alpha[i] -= delta; alpha[j] += delta; if(sum > C_i) { if(alpha[i] > C_i) { alpha[i] = C_i; alpha[j] = sum - C_i; } } else { if(alpha[j] < 0) { alpha[j] = 0; alpha[i] = sum; } } if(sum > C_j) { if(alpha[j] > C_j) { alpha[j] = C_j; alpha[i] = sum - C_j; } } else { if(alpha[i] < 0) { alpha[i] = 0; alpha[j] = sum; } } } // update G double delta_alpha_i = alpha[i] - old_alpha_i; double delta_alpha_j = alpha[j] - old_alpha_j; for(int k=0;krho = calculate_rho(); // calculate objective value { double v = 0; int i; for(i=0;iobj = v/2; } // put back the solution { for(int i=0;iupper_bound_p = Cp; si->upper_bound_n = Cn; info("\noptimization finished, #iter = %d\n",iter); delete[] p; delete[] y; delete[] alpha; delete[] alpha_status; delete[] active_set; delete[] G; delete[] G_bar; } // return 1 if already optimal, return 0 otherwise int Solver::select_working_set(int &out_i, int &out_j) { // return i,j such that // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) // j: minimizes the decrease of obj value // (if quadratic coefficeint <= 0, replace it with tau) // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) double Gmax = -INF; double Gmax2 = -INF; int Gmax_idx = -1; int Gmin_idx = -1; double obj_diff_min = INF; for(int t=0;t= Gmax) { Gmax = -G[t]; Gmax_idx = t; } } else { if(!is_lower_bound(t)) if(G[t] >= Gmax) { Gmax = G[t]; Gmax_idx = t; } } int i = Gmax_idx; const Qfloat *Q_i = NULL; if(i != -1) // NULL Q_i not accessed: Gmax=-INF if i=-1 Q_i = Q->get_Q(i,active_size); for(int j=0;j= Gmax2) Gmax2 = G[j]; if (grad_diff > 0) { double obj_diff; double quad_coef=Q_i[i]+QD[j]-2.0*y[i]*Q_i[j]; if (quad_coef > 0) obj_diff = -(grad_diff*grad_diff)/quad_coef; else obj_diff = -(grad_diff*grad_diff)/TAU; if (obj_diff <= obj_diff_min) { Gmin_idx=j; obj_diff_min = obj_diff; } } } } else { if (!is_upper_bound(j)) { double grad_diff= Gmax-G[j]; if (-G[j] >= Gmax2) Gmax2 = -G[j]; if (grad_diff > 0) { double obj_diff; double quad_coef=Q_i[i]+QD[j]+2.0*y[i]*Q_i[j]; if (quad_coef > 0) obj_diff = -(grad_diff*grad_diff)/quad_coef; else obj_diff = -(grad_diff*grad_diff)/TAU; if (obj_diff <= obj_diff_min) { Gmin_idx=j; obj_diff_min = obj_diff; } } } } } if(Gmax+Gmax2 < eps) return 1; out_i = Gmax_idx; out_j = Gmin_idx; return 0; } bool Solver::be_shrunk(int i, double Gmax1, double Gmax2) { if(is_upper_bound(i)) { if(y[i]==+1) return(-G[i] > Gmax1); else return(-G[i] > Gmax2); } else if(is_lower_bound(i)) { if(y[i]==+1) return(G[i] > Gmax2); else return(G[i] > Gmax1); } else return(false); } void Solver::do_shrinking() { int i; double Gmax1 = -INF; // max { -y_i * grad(f)_i | i in I_up(\alpha) } double Gmax2 = -INF; // max { y_i * grad(f)_i | i in I_low(\alpha) } // find maximal violating pair first for(i=0;i= Gmax1) Gmax1 = -G[i]; } if(!is_lower_bound(i)) { if(G[i] >= Gmax2) Gmax2 = G[i]; } } else { if(!is_upper_bound(i)) { if(-G[i] >= Gmax2) Gmax2 = -G[i]; } if(!is_lower_bound(i)) { if(G[i] >= Gmax1) Gmax1 = G[i]; } } } if(unshrink == false && Gmax1 + Gmax2 <= eps*10) { unshrink = true; reconstruct_gradient(); active_size = l; info("*"); } for(i=0;i i) { if (!be_shrunk(active_size, Gmax1, Gmax2)) { swap_index(i,active_size); break; } active_size--; } } } double Solver::calculate_rho() { double r; int nr_free = 0; double ub = INF, lb = -INF, sum_free = 0; for(int i=0;i0) r = sum_free/nr_free; else r = (ub+lb)/2; return r; } // // Solver for nu-svm classification and regression // // additional constraint: e^T \alpha = constant // class Solver_NU : public Solver { public: Solver_NU() {} void Solve(int l, const QMatrix& Q, const double *p, const schar *y, double *alpha, double Cp, double Cn, double eps, SolutionInfo* si, int shrinking) { this->si = si; Solver::Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking); } private: SolutionInfo *si; int select_working_set(int &i, int &j); double calculate_rho(); bool be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4); void do_shrinking(); }; // return 1 if already optimal, return 0 otherwise int Solver_NU::select_working_set(int &out_i, int &out_j) { // return i,j such that y_i = y_j and // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) // j: minimizes the decrease of obj value // (if quadratic coefficeint <= 0, replace it with tau) // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) double Gmaxp = -INF; double Gmaxp2 = -INF; int Gmaxp_idx = -1; double Gmaxn = -INF; double Gmaxn2 = -INF; int Gmaxn_idx = -1; int Gmin_idx = -1; double obj_diff_min = INF; for(int t=0;t= Gmaxp) { Gmaxp = -G[t]; Gmaxp_idx = t; } } else { if(!is_lower_bound(t)) if(G[t] >= Gmaxn) { Gmaxn = G[t]; Gmaxn_idx = t; } } int ip = Gmaxp_idx; int in = Gmaxn_idx; const Qfloat *Q_ip = NULL; const Qfloat *Q_in = NULL; if(ip != -1) // NULL Q_ip not accessed: Gmaxp=-INF if ip=-1 Q_ip = Q->get_Q(ip,active_size); if(in != -1) Q_in = Q->get_Q(in,active_size); for(int j=0;j= Gmaxp2) Gmaxp2 = G[j]; if (grad_diff > 0) { double obj_diff; double quad_coef = Q_ip[ip]+QD[j]-2*Q_ip[j]; if (quad_coef > 0) obj_diff = -(grad_diff*grad_diff)/quad_coef; else obj_diff = -(grad_diff*grad_diff)/TAU; if (obj_diff <= obj_diff_min) { Gmin_idx=j; obj_diff_min = obj_diff; } } } } else { if (!is_upper_bound(j)) { double grad_diff=Gmaxn-G[j]; if (-G[j] >= Gmaxn2) Gmaxn2 = -G[j]; if (grad_diff > 0) { double obj_diff; double quad_coef = Q_in[in]+QD[j]-2*Q_in[j]; if (quad_coef > 0) obj_diff = -(grad_diff*grad_diff)/quad_coef; else obj_diff = -(grad_diff*grad_diff)/TAU; if (obj_diff <= obj_diff_min) { Gmin_idx=j; obj_diff_min = obj_diff; } } } } } if(max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps) return 1; if (y[Gmin_idx] == +1) out_i = Gmaxp_idx; else out_i = Gmaxn_idx; out_j = Gmin_idx; return 0; } bool Solver_NU::be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4) { if(is_upper_bound(i)) { if(y[i]==+1) return(-G[i] > Gmax1); else return(-G[i] > Gmax4); } else if(is_lower_bound(i)) { if(y[i]==+1) return(G[i] > Gmax2); else return(G[i] > Gmax3); } else return(false); } void Solver_NU::do_shrinking() { double Gmax1 = -INF; // max { -y_i * grad(f)_i | y_i = +1, i in I_up(\alpha) } double Gmax2 = -INF; // max { y_i * grad(f)_i | y_i = +1, i in I_low(\alpha) } double Gmax3 = -INF; // max { -y_i * grad(f)_i | y_i = -1, i in I_up(\alpha) } double Gmax4 = -INF; // max { y_i * grad(f)_i | y_i = -1, i in I_low(\alpha) } // find maximal violating pair first int i; for(i=0;i Gmax1) Gmax1 = -G[i]; } else if(-G[i] > Gmax4) Gmax4 = -G[i]; } if(!is_lower_bound(i)) { if(y[i]==+1) { if(G[i] > Gmax2) Gmax2 = G[i]; } else if(G[i] > Gmax3) Gmax3 = G[i]; } } if(unshrink == false && max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) { unshrink = true; reconstruct_gradient(); active_size = l; } for(i=0;i i) { if (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4)) { swap_index(i,active_size); break; } active_size--; } } } double Solver_NU::calculate_rho() { int nr_free1 = 0,nr_free2 = 0; double ub1 = INF, ub2 = INF; double lb1 = -INF, lb2 = -INF; double sum_free1 = 0, sum_free2 = 0; for(int i=0;i 0) r1 = sum_free1/nr_free1; else r1 = (ub1+lb1)/2; if(nr_free2 > 0) r2 = sum_free2/nr_free2; else r2 = (ub2+lb2)/2; si->r = (r1+r2)/2; return (r1-r2)/2; } // // Q matrices for various formulations // class SVC_Q: public Kernel { public: SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar *y_) :Kernel(prob.l, prob.x, param) { clone(y,y_,prob.l); cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); QD = new Qfloat[prob.l]; for(int i=0;i*kernel_function)(i,i); } Qfloat *get_Q(int i, int len) const { Qfloat *data; int start, j; if((start = cache->get_data(i,&data,len)) < len) { for(j=start;j*kernel_function)(i,j)); } return data; } Qfloat *get_QD() const { return QD; } void swap_index(int i, int j) const { cache->swap_index(i,j); Kernel::swap_index(i,j); swap(y[i],y[j]); swap(QD[i],QD[j]); } ~SVC_Q() { delete[] y; delete cache; delete[] QD; } private: schar *y; Cache *cache; Qfloat *QD; }; class ONE_CLASS_Q: public Kernel { public: ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param) :Kernel(prob.l, prob.x, param) { cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); QD = new Qfloat[prob.l]; for(int i=0;i*kernel_function)(i,i); } Qfloat *get_Q(int i, int len) const { Qfloat *data; int start, j; if((start = cache->get_data(i,&data,len)) < len) { for(j=start;j*kernel_function)(i,j); } return data; } Qfloat *get_QD() const { return QD; } void swap_index(int i, int j) const { cache->swap_index(i,j); Kernel::swap_index(i,j); swap(QD[i],QD[j]); } ~ONE_CLASS_Q() { delete cache; delete[] QD; } private: Cache *cache; Qfloat *QD; }; class SVR_Q: public Kernel { public: SVR_Q(const svm_problem& prob, const svm_parameter& param) :Kernel(prob.l, prob.x, param) { l = prob.l; cache = new Cache(l,(long int)(param.cache_size*(1<<20))); QD = new Qfloat[2*l]; sign = new schar[2*l]; index = new int[2*l]; for(int k=0;k*kernel_function)(k,k); QD[k+l]=QD[k]; } buffer[0] = new Qfloat[2*l]; buffer[1] = new Qfloat[2*l]; next_buffer = 0; } void swap_index(int i, int j) const { swap(sign[i],sign[j]); swap(index[i],index[j]); swap(QD[i],QD[j]); } Qfloat *get_Q(int i, int len) const { Qfloat *data; int j, real_i = index[i]; if(cache->get_data(real_i,&data,l) < l) { for(j=0;j*kernel_function)(real_i,j); } // reorder and copy Qfloat *buf = buffer[next_buffer]; next_buffer = 1 - next_buffer; schar si = sign[i]; for(j=0;jl; double *minus_ones = new double[l]; schar *y = new schar[l]; int i; for(i=0;iy[i] > 0) y[i] = +1; else y[i]=-1; } Solver s; s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y, alpha, Cp, Cn, param->eps, si, param->shrinking); double sum_alpha=0; for(i=0;il)); for(i=0;il; double nu = param->nu; schar *y = new schar[l]; for(i=0;iy[i]>0) y[i] = +1; else y[i] = -1; double sum_pos = nu*l/2; double sum_neg = nu*l/2; for(i=0;ieps, si, param->shrinking); double r = si->r; info("C = %f\n",1/r); for(i=0;irho /= r; si->obj /= (r*r); si->upper_bound_p = 1/r; si->upper_bound_n = 1/r; delete[] y; delete[] zeros; } static void solve_one_class( const svm_problem *prob, const svm_parameter *param, double *alpha, Solver::SolutionInfo* si) { int l = prob->l; double *zeros = new double[l]; schar *ones = new schar[l]; int i; int n = (int)(param->nu*prob->l); // # of alpha's at upper bound for(i=0;il) alpha[n] = param->nu * prob->l - n; for(i=n+1;ieps, si, param->shrinking); delete[] zeros; delete[] ones; } static void solve_epsilon_svr( const svm_problem *prob, const svm_parameter *param, double *alpha, Solver::SolutionInfo* si) { int l = prob->l; double *alpha2 = new double[2*l]; double *linear_term = new double[2*l]; schar *y = new schar[2*l]; int i; for(i=0;ip - prob->y[i]; y[i] = 1; alpha2[i+l] = 0; linear_term[i+l] = param->p + prob->y[i]; y[i+l] = -1; } Solver s; s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, alpha2, param->C, param->C, param->eps, si, param->shrinking); double sum_alpha = 0; for(i=0;iC*l)); delete[] alpha2; delete[] linear_term; delete[] y; } static void solve_nu_svr( const svm_problem *prob, const svm_parameter *param, double *alpha, Solver::SolutionInfo* si) { int l = prob->l; double C = param->C; double *alpha2 = new double[2*l]; double *linear_term = new double[2*l]; schar *y = new schar[2*l]; int i; double sum = C * param->nu * l / 2; for(i=0;iy[i]; y[i] = 1; linear_term[i+l] = prob->y[i]; y[i+l] = -1; } Solver_NU s; s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, alpha2, C, C, param->eps, si, param->shrinking); info("epsilon = %f\n",-si->r); for(i=0;il); Solver::SolutionInfo si; switch(param->svm_type) { case C_SVC: solve_c_svc(prob,param,alpha,&si,Cp,Cn); break; case NU_SVC: solve_nu_svc(prob,param,alpha,&si); break; case ONE_CLASS: solve_one_class(prob,param,alpha,&si); break; case EPSILON_SVR: solve_epsilon_svr(prob,param,alpha,&si); break; case NU_SVR: solve_nu_svr(prob,param,alpha,&si); break; } info("obj = %f, rho = %f\n",si.obj,si.rho); // output SVs int nSV = 0; int nBSV = 0; for(int i=0;il;i++) { if(fabs(alpha[i]) > 0) { ++nSV; if(prob->y[i] > 0) { if(fabs(alpha[i]) >= si.upper_bound_p) ++nBSV; } else { if(fabs(alpha[i]) >= si.upper_bound_n) ++nBSV; } } } info("nSV = %d, nBSV = %d\n",nSV,nBSV); decision_function f; f.alpha = alpha; f.rho = si.rho; return f; } // // svm_model // struct svm_model { svm_parameter param; // parameter int nr_class; // number of classes, = 2 in regression/one class svm int l; // total #SV svm_node **SV; // SVs (SV[l]) double **sv_coef; // coefficients for SVs in decision functions (sv_coef[k-1][l]) double *rho; // constants in decision functions (rho[k*(k-1)/2]) double *probA; // pariwise probability information double *probB; // for classification only int *label; // label of each class (label[k]) int *nSV; // number of SVs for each class (nSV[k]) // nSV[0] + nSV[1] + ... + nSV[k-1] = l // XXX int free_sv; // 1 if svm_model is created by svm_load_model // 0 if svm_model is created by svm_train }; // Platt's binary SVM Probablistic Output: an improvement from Lin et al. void sigmoid_train( int l, const double *dec_values, const double *labels, double& A, double& B) { double prior1=0, prior0 = 0; int i; for (i=0;i 0) prior1+=1; else prior0+=1; int max_iter=100; // Maximal number of iterations double min_step=1e-10; // Minimal step taken in line search double sigma=1e-12; // For numerically strict PD of Hessian double eps=1e-5; double hiTarget=(prior1+1.0)/(prior1+2.0); double loTarget=1/(prior0+2.0); double *t=Malloc(double,l); double fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize; double newA,newB,newf,d1,d2; int iter; // Initial Point and Initial Fun Value A=0.0; B=log((prior0+1.0)/(prior1+1.0)); double fval = 0.0; for (i=0;i0) t[i]=hiTarget; else t[i]=loTarget; fApB = dec_values[i]*A+B; if (fApB>=0) fval += t[i]*fApB + log(1+exp(-fApB)); else fval += (t[i] - 1)*fApB +log(1+exp(fApB)); } for (iter=0;iter= 0) { p=exp(-fApB)/(1.0+exp(-fApB)); q=1.0/(1.0+exp(-fApB)); } else { p=1.0/(1.0+exp(fApB)); q=exp(fApB)/(1.0+exp(fApB)); } d2=p*q; h11+=dec_values[i]*dec_values[i]*d2; h22+=d2; h21+=dec_values[i]*d2; d1=t[i]-p; g1+=dec_values[i]*d1; g2+=d1; } // Stopping Criteria if (fabs(g1)= min_step) { newA = A + stepsize * dA; newB = B + stepsize * dB; // New function value newf = 0.0; for (i=0;i= 0) newf += t[i]*fApB + log(1+exp(-fApB)); else newf += (t[i] - 1)*fApB +log(1+exp(fApB)); } // Check sufficient decrease if (newf=max_iter) info("Reaching maximal iterations in two-class probability estimates\n"); free(t); } double sigmoid_predict(double decision_value, double A, double B) { double fApB = decision_value*A+B; if (fApB >= 0) return exp(-fApB)/(1.0+exp(-fApB)); else return 1.0/(1+exp(fApB)) ; } // Method 2 from the multiclass_prob paper by Wu, Lin, and Weng void multiclass_probability(int k, double **r, double *p) { int t,j; int iter = 0, max_iter=max(100,k); double **Q=Malloc(double *,k); double *Qp=Malloc(double,k); double pQp, eps=0.005/k; for (t=0;tmax_error) max_error=error; } if (max_error=max_iter) info("Exceeds max_iter in multiclass_prob\n"); for(t=0;tl); double *dec_values = Malloc(double,prob->l); // random shuffle for(i=0;il;i++) perm[i]=i; for(i=0;il;i++) { int j = i+rand()%(prob->l-i); swap(perm[i],perm[j]); } for(i=0;il/nr_fold; int end = (i+1)*prob->l/nr_fold; int j,k; struct svm_problem subprob; subprob.l = prob->l-(end-begin); subprob.x = Malloc(struct svm_node*,subprob.l); subprob.y = Malloc(double,subprob.l); k=0; for(j=0;jx[perm[j]]; subprob.y[k] = prob->y[perm[j]]; ++k; } for(j=end;jl;j++) { subprob.x[k] = prob->x[perm[j]]; subprob.y[k] = prob->y[perm[j]]; ++k; } int p_count=0,n_count=0; for(j=0;j0) p_count++; else n_count++; if(p_count==0 && n_count==0) for(j=begin;j 0 && n_count == 0) for(j=begin;j 0) for(j=begin;jx[perm[j]],&(dec_values[perm[j]])); // ensure +1 -1 order; reason not using CV subroutine dec_values[perm[j]] *= submodel->label[0]; } svm_destroy_model(submodel); svm_destroy_param(&subparam); } free(subprob.x); free(subprob.y); } sigmoid_train(prob->l,dec_values,prob->y,probA,probB); free(dec_values); free(perm); } // Return parameter of a Laplace distribution double svm_svr_probability( const svm_problem *prob, const svm_parameter *param) { int i; int nr_fold = 5; double *ymv = Malloc(double,prob->l); double mae = 0; svm_parameter newparam = *param; newparam.probability = 0; svm_cross_validation(prob,&newparam,nr_fold,ymv); for(i=0;il;i++) { ymv[i]=prob->y[i]-ymv[i]; mae += fabs(ymv[i]); } mae /= prob->l; double std=sqrt(2*mae*mae); int count=0; mae=0; for(i=0;il;i++) if (fabs(ymv[i]) > 5*std) count=count+1; else mae+=fabs(ymv[i]); mae /= (prob->l-count); info("Prob. model for test data: target value = predicted value + z,\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma= %g\n",mae); free(ymv); return mae; } // label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data // perm, length l, must be allocated before calling this subroutine void svm_group_classes(const svm_problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm) { int l = prob->l; int max_nr_class = 16; int nr_class = 0; int *label = Malloc(int,max_nr_class); int *count = Malloc(int,max_nr_class); int *data_label = Malloc(int,l); int i; for(i=0;iy[i]; int j; for(j=0;jparam = *param; model->free_sv = 0; // XXX if(param->svm_type == ONE_CLASS || param->svm_type == EPSILON_SVR || param->svm_type == NU_SVR) { // regression or one-class-svm model->nr_class = 2; model->label = NULL; model->nSV = NULL; model->probA = NULL; model->probB = NULL; model->sv_coef = Malloc(double *,1); if(param->probability && (param->svm_type == EPSILON_SVR || param->svm_type == NU_SVR)) { model->probA = Malloc(double,1); model->probA[0] = svm_svr_probability(prob,param); } decision_function f = svm_train_one(prob,param,0,0); model->rho = Malloc(double,1); model->rho[0] = f.rho; int nSV = 0; int i; for(i=0;il;i++) if(fabs(f.alpha[i]) > 0) ++nSV; model->l = nSV; model->SV = Malloc(svm_node *,nSV); model->sv_coef[0] = Malloc(double,nSV); int j = 0; for(i=0;il;i++) if(fabs(f.alpha[i]) > 0) { model->SV[j] = prob->x[i]; model->sv_coef[0][j] = f.alpha[i]; ++j; } free(f.alpha); } else { // classification int l = prob->l; int nr_class; int *label = NULL; int *start = NULL; int *count = NULL; int *perm = Malloc(int,l); // group training data of the same class svm_group_classes(prob,&nr_class,&label,&start,&count,perm); svm_node **x = Malloc(svm_node *,l); int i; for(i=0;ix[perm[i]]; // calculate weighted C double *weighted_C = Malloc(double, nr_class); for(i=0;iC; for(i=0;inr_weight;i++) { int j; for(j=0;jweight_label[i] == label[j]) break; if(j == nr_class) fprintf(stderr,"warning: class label %d specified in weight is not found\n", param->weight_label[i]); else weighted_C[j] *= param->weight[i]; } // train k*(k-1)/2 models bool *nonzero = Malloc(bool,l); for(i=0;iprobability) { probA=Malloc(double,nr_class*(nr_class-1)/2); probB=Malloc(double,nr_class*(nr_class-1)/2); } int p = 0; for(i=0;iprobability) svm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]); f[p] = svm_train_one(&sub_prob,param,weighted_C[i],weighted_C[j]); for(k=0;k 0) nonzero[si+k] = true; for(k=0;k 0) nonzero[sj+k] = true; free(sub_prob.x); free(sub_prob.y); ++p; } // build output model->nr_class = nr_class; model->label = Malloc(int,nr_class); for(i=0;ilabel[i] = label[i]; model->rho = Malloc(double,nr_class*(nr_class-1)/2); for(i=0;irho[i] = f[i].rho; if(param->probability) { model->probA = Malloc(double,nr_class*(nr_class-1)/2); model->probB = Malloc(double,nr_class*(nr_class-1)/2); for(i=0;iprobA[i] = probA[i]; model->probB[i] = probB[i]; } } else { model->probA=NULL; model->probB=NULL; } int total_sv = 0; int *nz_count = Malloc(int,nr_class); model->nSV = Malloc(int,nr_class); for(i=0;inSV[i] = nSV; nz_count[i] = nSV; } info("Total nSV = %d\n",total_sv); model->l = total_sv; model->SV = Malloc(svm_node *,total_sv); p = 0; for(i=0;iSV[p++] = x[i]; int *nz_start = Malloc(int,nr_class); nz_start[0] = 0; for(i=1;isv_coef = Malloc(double *,nr_class-1); for(i=0;isv_coef[i] = Malloc(double,total_sv); p = 0; for(i=0;isv_coef[j-1][q++] = f[p].alpha[k]; q = nz_start[j]; for(k=0;ksv_coef[i][q++] = f[p].alpha[ci+k]; ++p; } free(label); free(probA); free(probB); free(count); free(perm); free(start); free(x); free(weighted_C); free(nonzero); for(i=0;il; int *perm = Malloc(int,l); int nr_class; // stratified cv may not give leave-one-out rate // Each class to l folds -> some folds may have zero elements if((param->svm_type == C_SVC || param->svm_type == NU_SVC) && nr_fold < l) { int *start = NULL; int *label = NULL; int *count = NULL; svm_group_classes(prob,&nr_class,&label,&start,&count,perm); // random shuffle and then data grouped by fold using the array perm int *fold_count = Malloc(int,nr_fold); int c; int *index = Malloc(int,l); for(i=0;ix[perm[j]]; subprob.y[k] = prob->y[perm[j]]; ++k; } for(j=end;jx[perm[j]]; subprob.y[k] = prob->y[perm[j]]; ++k; } struct svm_model *submodel = svm_train(&subprob,param); if(param->probability && (param->svm_type == C_SVC || param->svm_type == NU_SVC)) { double *prob_estimates=Malloc(double,svm_get_nr_class(submodel)); for(j=begin;jx[perm[j]],prob_estimates); free(prob_estimates); } else for(j=begin;jx[perm[j]]); svm_destroy_model(submodel); free(subprob.x); free(subprob.y); } free(fold_start); free(perm); } int svm_get_svm_type(const svm_model *model) { return model->param.svm_type; } int svm_get_nr_class(const svm_model *model) { return model->nr_class; } void svm_get_labels(const svm_model *model, int* label) { if (model->label != NULL) for(int i=0;inr_class;i++) label[i] = model->label[i]; } double svm_get_svr_probability(const svm_model *model) { if ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && model->probA!=NULL) return model->probA[0]; else { fprintf(stderr,"Model doesn't contain information for SVR probability inference\n"); return 0; } } void svm_predict_values(const svm_model *model, const svm_node *x, double* dec_values) { if(model->param.svm_type == ONE_CLASS || model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) { double *sv_coef = model->sv_coef[0]; double sum = 0; for(int i=0;il;i++) sum += sv_coef[i] * Kernel::k_function(x,model->SV[i],model->param); sum -= model->rho[0]; *dec_values = sum; } else { int i; int nr_class = model->nr_class; int l = model->l; double *kvalue = Malloc(double,l); for(i=0;iSV[i],model->param); int *start = Malloc(int,nr_class); start[0] = 0; for(i=1;inSV[i-1]; int p=0; for(i=0;inSV[i]; int cj = model->nSV[j]; int k; double *coef1 = model->sv_coef[j-1]; double *coef2 = model->sv_coef[i]; for(k=0;krho[p]; dec_values[p] = sum; p++; } free(kvalue); free(start); } } double svm_predict(const svm_model *model, const svm_node *x) { if(model->param.svm_type == ONE_CLASS || model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) { double res; svm_predict_values(model, x, &res); if(model->param.svm_type == ONE_CLASS) return (res>0)?1:-1; else return res; } else { int i; int nr_class = model->nr_class; double *dec_values = Malloc(double, nr_class*(nr_class-1)/2); svm_predict_values(model, x, dec_values); int *vote = Malloc(int,nr_class); for(i=0;i 0) ++vote[i]; else ++vote[j]; } int vote_max_idx = 0; for(i=1;i vote[vote_max_idx]) vote_max_idx = i; free(vote); free(dec_values); return model->label[vote_max_idx]; } } double svm_predict_probability( const svm_model *model, const svm_node *x, double *prob_estimates) { if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && model->probA!=NULL && model->probB!=NULL) { int i; int nr_class = model->nr_class; double *dec_values = Malloc(double, nr_class*(nr_class-1)/2); svm_predict_values(model, x, dec_values); double min_prob=1e-7; double **pairwise_prob=Malloc(double *,nr_class); for(i=0;iprobA[k],model->probB[k]),min_prob),1-min_prob); pairwise_prob[j][i]=1-pairwise_prob[i][j]; k++; } multiclass_probability(nr_class,pairwise_prob,prob_estimates); int prob_max_idx = 0; for(i=1;i prob_estimates[prob_max_idx]) prob_max_idx = i; for(i=0;ilabel[prob_max_idx]; } else return svm_predict(model, x); } const char *svm_type_table[] = { "c_svc","nu_svc","one_class","epsilon_svr","nu_svr",NULL }; const char *kernel_type_table[]= { "linear","polynomial","rbf","sigmoid","precomputed",NULL }; int svm_save_model(const char *model_file_name, const svm_model *model) { FILE *fp = fopen(model_file_name,"w"); if(fp==NULL) return -1; const svm_parameter& param = model->param; fprintf(fp,"svm_type %s\n", svm_type_table[param.svm_type]); fprintf(fp,"kernel_type %s\n", kernel_type_table[param.kernel_type]); if(param.kernel_type == POLY) fprintf(fp,"degree %d\n", param.degree); if(param.kernel_type == POLY || param.kernel_type == RBF || param.kernel_type == SIGMOID) fprintf(fp,"gamma %g\n", param.gamma); if(param.kernel_type == POLY || param.kernel_type == SIGMOID) fprintf(fp,"coef0 %g\n", param.coef0); int nr_class = model->nr_class; int l = model->l; fprintf(fp, "nr_class %d\n", nr_class); fprintf(fp, "total_sv %d\n",l); { fprintf(fp, "rho"); for(int i=0;irho[i]); fprintf(fp, "\n"); } if(model->label) { fprintf(fp, "label"); for(int i=0;ilabel[i]); fprintf(fp, "\n"); } if(model->probA) // regression has probA only { fprintf(fp, "probA"); for(int i=0;iprobA[i]); fprintf(fp, "\n"); } if(model->probB) { fprintf(fp, "probB"); for(int i=0;iprobB[i]); fprintf(fp, "\n"); } if(model->nSV) { fprintf(fp, "nr_sv"); for(int i=0;inSV[i]); fprintf(fp, "\n"); } fprintf(fp, "SV\n"); const double * const *sv_coef = model->sv_coef; const svm_node * const *SV = model->SV; for(int i=0;ivalue)); else while(p->index != -1) { fprintf(fp,"%d:%.8g ",p->index,p->value); p++; } fprintf(fp, "\n"); } if (ferror(fp) != 0 || fclose(fp) != 0) return -1; else return 0; } static char *line = NULL; static int max_line_len; static char* readline(FILE *input) { int len; if(fgets(line,max_line_len,input) == NULL) return NULL; while(strrchr(line,'\n') == NULL) { max_line_len *= 2; line = (char *) realloc(line,max_line_len); len = (int) strlen(line); if(fgets(line+len,max_line_len-len,input) == NULL) break; } return line; } svm_model *svm_load_model(const char *model_file_name) { FILE *fp = fopen(model_file_name,"rb"); if(fp==NULL) return NULL; // read parameters svm_model *model = Malloc(svm_model,1); svm_parameter& param = model->param; model->rho = NULL; model->probA = NULL; model->probB = NULL; model->label = NULL; model->nSV = NULL; char cmd[81]; while(1) { fscanf(fp,"%80s",cmd); if(strcmp(cmd,"svm_type")==0) { fscanf(fp,"%80s",cmd); int i; for(i=0;svm_type_table[i];i++) { if(strcmp(svm_type_table[i],cmd)==0) { param.svm_type=i; break; } } if(svm_type_table[i] == NULL) { fprintf(stderr,"unknown svm type.\n"); free(model->rho); free(model->label); free(model->nSV); free(model); return NULL; } } else if(strcmp(cmd,"kernel_type")==0) { fscanf(fp,"%80s",cmd); int i; for(i=0;kernel_type_table[i];i++) { if(strcmp(kernel_type_table[i],cmd)==0) { param.kernel_type=i; break; } } if(kernel_type_table[i] == NULL) { fprintf(stderr,"unknown kernel function.\n"); free(model->rho); free(model->label); free(model->nSV); free(model); return NULL; } } else if(strcmp(cmd,"degree")==0) fscanf(fp,"%d",¶m.degree); else if(strcmp(cmd,"gamma")==0) fscanf(fp,"%lf",¶m.gamma); else if(strcmp(cmd,"coef0")==0) fscanf(fp,"%lf",¶m.coef0); else if(strcmp(cmd,"nr_class")==0) fscanf(fp,"%d",&model->nr_class); else if(strcmp(cmd,"total_sv")==0) fscanf(fp,"%d",&model->l); else if(strcmp(cmd,"rho")==0) { int n = model->nr_class * (model->nr_class-1)/2; model->rho = Malloc(double,n); for(int i=0;irho[i]); } else if(strcmp(cmd,"label")==0) { int n = model->nr_class; model->label = Malloc(int,n); for(int i=0;ilabel[i]); } else if(strcmp(cmd,"probA")==0) { int n = model->nr_class * (model->nr_class-1)/2; model->probA = Malloc(double,n); for(int i=0;iprobA[i]); } else if(strcmp(cmd,"probB")==0) { int n = model->nr_class * (model->nr_class-1)/2; model->probB = Malloc(double,n); for(int i=0;iprobB[i]); } else if(strcmp(cmd,"nr_sv")==0) { int n = model->nr_class; model->nSV = Malloc(int,n); for(int i=0;inSV[i]); } else if(strcmp(cmd,"SV")==0) { while(1) { int c = getc(fp); if(c==EOF || c=='\n') break; } break; } else { fprintf(stderr,"unknown text in model file: [%s]\n",cmd); free(model->rho); free(model->label); free(model->nSV); free(model); return NULL; } } // read sv_coef and SV int elements = 0; long pos = ftell(fp); max_line_len = 1024; line = Malloc(char,max_line_len); char *p,*endptr,*idx,*val; while(readline(fp)!=NULL) { p = strtok(line,":"); while(1) { p = strtok(NULL,":"); if(p == NULL) break; ++elements; } } elements += model->l; fseek(fp,pos,SEEK_SET); int m = model->nr_class - 1; int l = model->l; model->sv_coef = Malloc(double *,m); int i; for(i=0;isv_coef[i] = Malloc(double,l); model->SV = Malloc(svm_node*,l); svm_node *x_space = NULL; if(l>0) x_space = Malloc(svm_node,elements); int j=0; for(i=0;iSV[i] = &x_space[j]; p = strtok(line, " \t"); model->sv_coef[0][i] = strtod(p,&endptr); for(int k=1;ksv_coef[k][i] = strtod(p,&endptr); } while(1) { idx = strtok(NULL, ":"); val = strtok(NULL, " \t"); if(val == NULL) break; x_space[j].index = (int) strtol(idx,&endptr,10); x_space[j].value = strtod(val,&endptr); ++j; } x_space[j++].index = -1; } free(line); if (ferror(fp) != 0 || fclose(fp) != 0) return NULL; model->free_sv = 1; // XXX return model; } void svm_destroy_model(svm_model* model) { if(model->free_sv && model->l > 0) free((void *)(model->SV[0])); for(int i=0;inr_class-1;i++) free(model->sv_coef[i]); free(model->SV); free(model->sv_coef); free(model->rho); free(model->label); free(model->probA); free(model->probB); free(model->nSV); free(model); } void svm_destroy_param(svm_parameter* param) { free(param->weight_label); free(param->weight); } const char *svm_check_parameter(const svm_problem *prob, const svm_parameter *param) { // svm_type int svm_type = param->svm_type; if(svm_type != C_SVC && svm_type != NU_SVC && svm_type != ONE_CLASS && svm_type != EPSILON_SVR && svm_type != NU_SVR) return "unknown svm type"; // kernel_type, degree int kernel_type = param->kernel_type; if(kernel_type != LINEAR && kernel_type != POLY && kernel_type != RBF && kernel_type != SIGMOID && kernel_type != PRECOMPUTED) return "unknown kernel type"; if(param->degree < 0) return "degree of polynomial kernel < 0"; // cache_size,eps,C,nu,p,shrinking if(param->cache_size <= 0) return "cache_size <= 0"; if(param->eps <= 0) return "eps <= 0"; if(svm_type == C_SVC || svm_type == EPSILON_SVR || svm_type == NU_SVR) if(param->C <= 0) return "C <= 0"; if(svm_type == NU_SVC || svm_type == ONE_CLASS || svm_type == NU_SVR) if(param->nu <= 0 || param->nu > 1) return "nu <= 0 or nu > 1"; if(svm_type == EPSILON_SVR) if(param->p < 0) return "p < 0"; if(param->shrinking != 0 && param->shrinking != 1) return "shrinking != 0 and shrinking != 1"; if(param->probability != 0 && param->probability != 1) return "probability != 0 and probability != 1"; if(param->probability == 1 && svm_type == ONE_CLASS) return "one-class SVM probability output not supported yet"; // check whether nu-svc is feasible if(svm_type == NU_SVC) { int l = prob->l; int max_nr_class = 16; int nr_class = 0; int *label = Malloc(int,max_nr_class); int *count = Malloc(int,max_nr_class); int i; for(i=0;iy[i]; int j; for(j=0;jnu*(n1+n2)/2 > min(n1,n2)) { free(label); free(count); return "specified nu is infeasible"; } } } free(label); free(count); } return NULL; } int svm_check_probability_model(const svm_model *model) { return ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && model->probA!=NULL && model->probB!=NULL) || ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && model->probA!=NULL); } pymvpa2-2.2.0/3rd/libsvm/svm.h000066400000000000000000000043251202542755000160610ustar00rootroot00000000000000#ifndef _LIBSVM_H #define _LIBSVM_H #define LIBSVM_VERSION 289 #ifdef __cplusplus extern "C" { #endif extern int libsvm_version; struct svm_node { int index; double value; }; struct svm_problem { int l; double *y; struct svm_node **x; }; enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */ struct svm_parameter { int svm_type; int kernel_type; int degree; /* for poly */ double gamma; /* for poly/rbf/sigmoid */ double coef0; /* for poly/sigmoid */ /* these are for training only */ double cache_size; /* in MB */ double eps; /* stopping criteria */ double C; /* for C_SVC, EPSILON_SVR and NU_SVR */ int nr_weight; /* for C_SVC */ int *weight_label; /* for C_SVC */ double* weight; /* for C_SVC */ double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */ double p; /* for EPSILON_SVR */ int shrinking; /* use the shrinking heuristics */ int probability; /* do probability estimates */ }; struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); int svm_save_model(const char *model_file_name, const struct svm_model *model); struct svm_model *svm_load_model(const char *model_file_name); int svm_get_svm_type(const struct svm_model *model); int svm_get_nr_class(const struct svm_model *model); void svm_get_labels(const struct svm_model *model, int *label); double svm_get_svr_probability(const struct svm_model *model); void svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); double svm_predict(const struct svm_model *model, const struct svm_node *x); double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); void svm_destroy_model(struct svm_model *model); void svm_destroy_param(struct svm_parameter *param); const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); int svm_check_probability_model(const struct svm_model *model); extern void (*svm_print_string) (const char *); #ifdef __cplusplus } #endif #endif /* _LIBSVM_H */ pymvpa2-2.2.0/AUTHOR000066400000000000000000000001761202542755000140440ustar00rootroot00000000000000Michael Hanke Yaroslav O. Halchenko Per B. Sederberg pymvpa2-2.2.0/COPYING000066400000000000000000000042441202542755000141520ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: .. _chap_license: ******* License ******* The PyMVPA package, including all examples, code snippets and attached documentation is covered by the MIT license. :: The MIT License Copyright (c) 2006-2012 Michael Hanke 2007-2012 Yaroslav Halchenko Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ============== 3rd Party Code ============== Some code distributed within PyMVPA was not developed by PyMVPA team, hence you should adhere to the copyright and license terms of respective authors if you are to use corresponding parts. LIBSVM ------ :: Files: 3rd/libsvm/* BSD-3 License Copyright (c) 2000-2009 Chih-Chung Chang and Chih-Jen Lin. NIPY ---- :: Files: mvpa2/support/nipy/_*py, mvpa2/tests/test_emp_null.py BSD-3 License Copyright (c) 2006-2010, NIPY Developers PDFBook ------- :: Files: tools/pdfbook.c GPL version 2 License Copyright: Tigran Aivazian Jaap Eldering Roman Buchert Pierre Francois pymvpa2-2.2.0/Changelog000066400000000000000000001047471202542755000147420ustar00rootroot00000000000000.. -*- mode: rst -*- .. _chap_changelog: .. index:: changelog ********************* Development Changelog ********************* This changelog only lists rather macroscopic changes to PyMVPA. The full VCS changelog for 2.x series of PyMVPA is available here: https://github.com/PyMVPA/PyMVPA/commits/master .. note:: You could find relevant information on 0.4.x series at http://v04.pymvpa.org . In addition there is also a somewhat unconventional `visual changelog`_. .. _visual changelog: http://www.pymvpa.org/history.html 'Closes' and 'Fixes' statement IDs refer to the Debian and Github bug tracking systems accordingly and can be queried by visiting the URLs:: http://bugs.debian.org/ https://github.com/PyMVPA/PyMVPA/issues/ Releases ======== * 2.2.0 (Sun, Sep 16 2012) * New functionality (14 commits) - New HDF5-based storage backend for :class:`~mvpa2.measures.searchlight.Searchlight` the can significantly speed up serialization of large result dataset in parallelized computations. - New fast searchlight :class:`~mvpa2.measures.nnsearchlight.M1NNSearchlight` (and helper :func:`~mvpa2.measures.nnsearchlight.sphere_m1nnsearchlight`) to run mean-1-nearest-neighbor searchlights. - New mappers for adding an axis to a dataset (:class:`~mvpa2.mappers.shape.AddAxisMapper`), and for transposing a dataset (:class:`~mvpa2.mappers.shape.TransposeMapper`). - Improved implementation of SciPy's :func:`~mvpa2.misc.stats.ttest_1samp` with support for masked arrays and alternative hypotheses. - Individual tutorial chapters are now available for download as IPython notebooks. A ``rst2ipynb`` converter is available in ``tools/``. - New ``pymvpa2-tutorial`` command line utility to start a PyMVPA tutorial session, either in a console IPython session, or using the IPython notebook server. - New wrapper functions for data generators/loaders in ``sklearn.datasets``, available in :mod:`mvpa2.datasets.sources.sklearn_data`. * Enhancements (89 commits) - Initial Python 3 compatibility (spear-headed by Tiziano Zito). - Bayesian hypothesis testing with :class:`~mvpa2.clfs.transerror.BayesConfusionHypothesis` now supports literal hypotheses specification, custom hypotheses subsets, and computing of posterior probabilities. - Allow for accessing fitted distributions in :class:`~mvpa2.clfs.stats.MCNullDist`. - Extensions and improvements to the tutorial chapter on statistical evaluation. - Expose distance function as a property `dfx` of :class:`~mvpa2.clfs.knn.kNN`. - Extended :class:`~mvpa2.generators.base.Sifter` with ability to discard unbalanced partitions. - :func:`~mvpa2.base.hdf5.h5save` now creates missing directories automatically by default. - Dedicated training for :class:`~mvpa2.algorithms.hyperalignment.Hyperalignment`, and new auto-train capability. - :class:`~mvpa2.clfs.transerror.BayesConfusionHypothesis` now computes optional posterior probabilities, and supports hypothesis definitions using literal labels. * API changes - All command line tools have been renamed to have a consistent 'pymvpa2-' prefix. * Fixes (77 commits) - HDF5 now properly stores object-type ndarray, where it the array shape was unintentionally modified on-load before (Fixes #84). - HDF5 can now reconstruct 'builtin' objects (Fixes #86). - Check value data type and convert to float when collecting performance statistics to avoid numerical problems. - Do not fail in :class:`~mvpa2.clfs.transerror.BayesConfusionHypothesis` when a dataset does not provide class labels. * 2.1.0 (Fri, June 29 2012) * Fixes - :func:`~mvpa2.misc.support.mask2slice` failed to convert an array of ``False`` values into ``slice(None, 0, None)`` (Fixes #56). - A number of fixes to the HDF5 IO code that ignored parts of an object's state when custom ``__reduce__()`` implementations were used (Fixes #42), and had problems storing metaclass types (Fixes #78). - Proper single quotes in documentation code snippets within PDFs. - Memory leak (model pointer) in LIBSVM bindings. * Enhancements - All searchlight implementations can now optionally store the IDs of all features for each generated ROI (conditional attr. ``roi_feature_ids``) - Add :func:`~mvpa2.misc.neighborhood.scatter_neighborhoods` to aid sparse sampling of spaces. - Add :class:`~mvpa2.clfs.transerror.ConfusionMatrixError` to compute confusion matrices with an error function interface (e.g. for ``CrossValidation(errorfx=...)``). This class existed for a long time, but was hidden in the unit tests. - Add :class:`~mvpa2.clfs.transerror.Confusion` to compute confusion matrices with a Node interface (e.g. for ``CrossValidation(postproc=...)``). This is useful if confusion matrices are necessary as an intermediate result and further processing with other nodes is desired. * New functionality - Add :class:`~mvpa2.clfs.transerror.BayesConfusionHypothesis` to perform Bayesian hypothesis testing of multi-class confusion statistics. This is useful to assess the likelihood of a particular (or all possible) grouping of classes being distinguishable. - Add :class:`~mvpa2.mappers.fxy.FxyMapper` to perform arbitrary computations involving two datasets. - Add :class:`~mvpa2.mappers.base.CombinedMapper` to run a dataset through a set of mappers and combine their outputs. - Add :class:`~mvpa2.measures.statsmodels_adaptor.UnivariateStatsModels` a wrapper for using models from the statsmodels_ package as a FeaturewiseMeasure. - Add :class:`~mvpa2.misc.dcov.dCOV` and :func:`~mvpa2.misc.dcov.dcorcoef` to quantify independence of (multivariate) signals. * API changes - Deprecating ``GLM`` that is now implemented with UnivariateStatsModels. This deprecated GLM class no longer supports the ``zstat`` calculation, and none of its previous conditional attributes are available anymore. * 2.0.1 (Tue, Mar 27 2012) Primarily a bugfix release * Fixes (21 BF commits) - HDF5 storage -- handle loading of objects with bound ``builtin_function_or_method``. - Use system-wide ``autosummary/generate.py`` for sphinx >= 1.1.2 (Closes: #658593). - :class:`~mvpa2.base.state.ConditionalAttribute` should not loose value in deepcopy when default off (Fixes #63). - Correct handling of scalar mean/std values for :class:`~mvpa2.mappers.zscore.ZScoreMapper`. - MRI data import via _img2data now works with unicode filenames (Fixes #60). - Should work with IPython >= 0.11 now (Fixes #59). - Various small fixes to improve tests and functionality. - Fix :class:`SMLR` segfaults on Windows (Thanks cgohlke for the patch). * Enhancements (29 ENH, OPT, and NF commits) - :class:`~mvpa2.mappers.fx.FxMapper` calls functions natively (instead of a slow row/column at a time) if they carry ``axis`` as the 2nd argument. Provides tremendous speed up for :func:`mean_sample` etc. - :func:`~mvpa2.misc.support.xrandom_unique_combinations` generator for random unique combinations. - :func:`~mvpa2.misc.fx.dual_gaussian` made more robust by not handling negative values for the standard deviations. - :func:`~mvpa2.misc.fx.dual_positive_gaussian`. - Expose "sensitivities" for :class:`PLR`. - :class:`~mvpa2.generators.partition.NFoldPartitioner` float option for ``cvtype`` and intelligent behavior on 'random' limited by 'count' given a large number of folds. - Add few additional learners from :mod:`sklearn` to the warehouses: ExtraTrees, RandomForest, LassoLarsIC. - ``__repr__`` for :class:`Partitioner`s. - Add new performance metric -- F1 score -- in the confusion matrix summary stats. - :class:`CachedQueryEngine` does not rely now on id but on the exact value of the query parameters (converted to hashable types). Before it could behave incorrectly on rare occasions. * API changes - Deprecating ``.splitattr`` if favor of ``.attr`` in :class:`mvpa2.generators.partition.Partitioner` * 2.0.0 (Mon, Dec 19 2011) This release aggregates all the changes occurred between official releases in 0.4 series and various snapshot releases (in 0.5 and 0.6 series). To get better overview of high level changes see :ref:`release notes for 0.5 ` and :ref:`0.6 ` as well as summaries of release candidates below * Fixes (23 BF commits) - Significance level in the right tail was fixed to include the value tested -- otherwise resulted in optimistic bias (or absurdly high significance in improbable case if all estimates having the same value). - Compatible with the upcoming IPython 0.12 and renamed sklearn (Fixes #57). - Do not double-train ``slave`` classifiers while assessing sensitivities (Fixes #53). * Enhancements (30 ENH + 3 NF commits) - Resolving voting ties in kNN based on mean distance, and randomly in SMLR. - :class:`kNN`\'s ``ca.estimates`` now contains dictionaries with votes for each class. - Consistent zscoring in :class:`Hyperalignment`. * 2.0.0~rc5 (Wed, Oct 19 2011) * **Major**: to allow easy co-existence of stable PyMVPA 0.4.x, 0.6 development ``mvpa`` module was renamed into mod:`mvpa2`. * Fixes - Compatible with the new Shogun 1.x series. - Compatible with the new h5py 2.x series. - :file:`mvpa-prep-fmri` -- various compatibility fixes and smoke testing. - Deepcopying :class:`SummaryStatistics` during __add__. * Enhancements - Tutorial uses :mod:`mvpa2.tutorial_suite` now. - Better suppression of R warnings when needed. - Internal attributes of many classes were exposed as properties. - More unification of ``__repr__`` for many classes. * 0.6.0~rc4 (Wed, Jun 14 2011) * Fixes - Finished transition to :mod:`nibabel` conventions in `plot_lightbox`. - Addressed :mod:`matplotlib.hist` API change. - Various adjustments in the tests batteries (:mod:`nibabel` 1.1.0 compatibility, etc) * New functionality - Explicit new argument ``flatten`` to from_wizard -- default behavior changed if mapper was provided as well * Enhancements - Elaborated ``__str__`` and ``__repr__`` for some Classifiers and Measures * 0.6.0~rc3 (Thu, Apr 12 2011) * Fixes - Bugfixes regarding the interaction of FlattenMapper and BoxcarMapper that affected event-related analyses. - `Splitter` now handles attribute value `None` for splitting properly. - `GNBSearchlight` handling of ``roi_ids``. - More robust detection of mod:`scikits.learn` and :mod:`nipy` externals. * New functionality - Added a `Repeater` node to yield a dataset multiple times and `Sifter` node to exclude some datasets. Consequently, the "nosplitting" mode of `Splitter` got removed at the same time. - :file:`tools/niils` -- little tool to list details (dimensionality, scaling, etc) of the files in nibabel-supported formats. * Enhancements - Numerous documentation fixes. - Various improvements and increased flexibility of null distribution estimation of Measures. - All attribute are now reported in sorted order when printing a dataset. - `fmri_dataset` now also stores the input image type. - `Crossvalidation` can now take a custom `Splitter` instance. Moreover, the default splitter of CrossValidation is more robust in terms of number and type of created splits for common usage patterns (i.e. together with partitioners). - `CrossValidation` takes any custom Node as ``errorfx`` argument. - `ConfusionMatrix` can now be used as an ``errorfx`` in Crossvalidation. - ``LOE(ACC): Linear Order Effect in ACC`` was added to `ConfusionMatrix` to detect trends in performances across splits. - A `Node`\ s postproc is now accessible as a property. - `RepeatedMeasure` has a new 'concat_as' argument that allows results to be concatenated along the feature axis. The default behavior, stacking as multiple samples, is unchanged. - `Searchlight` now has the ability to mark the center/seed of an ROI in with a feature attribute in the generated datasets. - ``debug`` takes ``args`` parameter for delayed string comprehensions. It should reduce run-time impact of ``debug()`` calls in regular, non ``-O`` mode of Python operation. - String summaries and representations (provided by ``__str__`` and ``__repr__``) were made more exhaustive and more coherent. Additional properties to access initial constructor arguments were added to variety of classes. * Internal changes - New debug target ``STDOUT`` to allow attaching metrics (e.g. traceback, timestamps) to regular output printed to stdout - New set of decorators to help with unittests - ``@nodebug`` to disable specific debug targets for the duration of the test. - ``@reseed_rng`` to guarantee consistent random data given initial seeding. - ``@with_tempfile`` to provide a tempfile name which would get removed upon completion (test success or failure) - Dropping daily testing of ``maint/0.5`` branch -- RIP. - `Collection`\ s were provided with adequate ``(deep|)copy``. And `Dataset` was refactored to use `Collection`\ s ``copy`` method. - ``update-*`` Makefile rules automatically should fast-forward corresponding ``website-updates`` branch - `MVPA_TESTS_VERBOSITY` controls also :mod:`numpy` warnings now. - `Dataset.__array__` provides original array instead of copy (unless dtype is provided) Also adapts changes from 0.4.6 and 0.4.7 (see corresponding changelogs). * 0.6.0~rc2 (Thu, Mar 3 2011) * Various fixes in the mvpa.atlas module. * 0.6.0~rc1 (Thu, Feb 24 2011) * Many, many, many * For an overview of the most drastic changes :ref:`see constantly evolving release notes for 0.6 ` * 0.5.0 (sometime in March 2010) This is a special release, because it has never seen the general public. A summary of fundamental changes introduced in this development version can be seen in the :ref:`release notes `. Most notably, this version was to first to come with a comprehensive two-day workshop/tutorial. * 0.4.7 (Tue, Mar 07 2011) (Total: 12 commits) A bugfix release * Fixed - Addressed the issue with input NIfTI files having ``scl_`` fields set: it could result in incorrect analyses and map2nifti-produced NIfTI files. Now input files account for scaling/offset if ``scl_`` fields direct to do so. Moreover upon map2nifti, those fields get reset. - :file:`doc/examples/searchlight_minimal.py` - best error is the minimal one * Enhancements - :class:`~mvpa.clfs.gnb.GNB` can now tolerate training datasets with a single label - :class:`~mvpa.clfs.meta.TreeClassifier` can have trailing nodes with no classifier assigned * 0.4.6 (Tue, Feb 01 2011) (Total: 20 commits) A bugfix release * Fixed (few BF commits): - Compatibility with numpy 1.5.1 (histogram) and scipy 0.8.0 (workaround for a regression in legendre) - Compatibility with libsvm 3.0 - :class:`~mvpa.clfs.plr.PLR` robustification * Enhancements - Enforce suppression of numpy warnings while running unittests. Also setting verbosity >= 3 enables all warnings (Python, NumPy, and PyMVPA) - :file:`doc/examples/nested_cv.py` example (adopted from 0.5) - Introduced base class :class:`~mvpa.clfs.base.LearnerError` for classifiers' exceptions (adopted from 0.5) - Adjusted example data to live upto nibabel's warranty of NIfTI standard-compliance - More robust operation of MC iterations -- skip iterations where classifier experienced difficulties and raise an exception (e.g. due to degenerate data) * 0.4.5 (Fri, Oct 01 2010) (Total: 27 commits) A bugfix release * Fixed (13 BF commits): - Compatible with LIBSVM >= 2.91 (Closes: #583018) - No string exceptions raised (Python 2.6 compatibility) - Setting of shrinking parameter in :mod:`~mvpa.clfs.sg` interface - Deducing number of SVs for SVR (LIBSVM) - Correction of significance in the tails of non-parametric tests * Miscellaneous: - Development repository moved to http://github.com/PyMVPA/PyMVPA * 0.4.4 (Mon, Feb 2 2010) (Total: 144 commits) Primarily a bugfix release, probably the last in 0.4 series since development for 0.5 release is leaping forward. * New functionality (19 NF commits): - :class:`~mvpa.clfs.gnb.GNB` implements Gaussian Naïve Bayes Classifier. - :func:`~mvpa.misc.fsl.base.read_fsl_design` to read FSL FEAT design.fsf files (Contributed by Russell A. Poldrack). - :class:`~mvpa.datasets.miscfx.SequenceStats` to provide basic statistics on labels sequence (counter-balancing, autocorrelation). - New exceptions :class:`~mvpa.clfs.base.DegenerateInputError` and :class:`~mvpa.clfs.base.FailedToTrainError` to be thrown by classifiers primarily during training/testing. - Debug target `STATMC` to report on progress of Monte-Carlo sampling (during permutation testing). * Refactored (15 RF commits): - To get users prepared to 0.5 release, internally and in some examples/documentation, access to states and parameters is done via corresponding collections, not from the top level object (e.g. `clf.states.predictions` instead of soon-to-be-deprecated `clf.predictions`). That should lead also to improved performance. - Adopted copy.py from python2.6 (support Ellipsis as well). * Fixed (38 BF commits): - GLM output does not depend on the enabled states any more. - Variety of docstrings fixed and/or improved. - Do not derive NaN scaling for SVM's C whenever data is degenerate (lead to never finishing SVM training). - :mod:`~mvpa.clfs.sg` : + KRR is optional now -- avoids crashing if KRR is not available. + tolerance to absent `set_precompute_matrix` in svmlight in recent shogun versions. + support for recent (present in 0.9.1) API change in exposing debug levels. - Python 2.4 compatibility issues: :class:`~mvpa.clfs.knn.kNN` and :class:`~mvpa.featsel.ifs.IFS` * 0.4.3 (Sat, 5 Sep 2009) (Total: 165 commits) * Online documentation editor is no longer available due to low demand -- please submit changes via email. * Performance (Contributed by Valentin Haenel) (3 OPT commits): - Further optimized LIBSVM bindings. - Copy-if-sorted in :class:`~mvpa.datasets.base.Dataset.selectFeatures`. * New functionality (25 NF commits): - :class:`~mvpa.mappers.procrustean.ProcrusteanMapper` with orthogonal and oblique transformations. - Ability to generate simple reports using :mod:`reportlab`. See/run :file:`examples/match_distribution.py` for example. - :class:`~mvpa.clfs.meta.TreeClassifier` -- construct simple hierarchies of classifiers. - :func:`~mvpa.base.info.wtf` to report information about the system/PyMVPA to be included in the bug reports. - Parameter 'reverse' to swap training/testing splits in :class:`~mvpa.datasets.splitters.Splitter` . - Example code for the analysis of event-related dataset using :class:`~mvpa.datasets.nifti.ERNiftiDataset`. - :meth:`~mvpa.misc.io.base.SampleAttributes.toEvents` to create lists of :class:`~mvpa.misc.support.Event`. - :file:`mvpa-prep-fmri` was extended with plotting of motion correction parameters. - :class:`~mvpa.misc.io.base.ColumnData` can be explicitly told either file contains a header. - In :class:`~mvpa.atlases.base.XMLBasedAtlas` (e.g. :mod:`~mvpa.atlases.fsl` atlases) it is now possible to provide custom 'image_file' to get maps or indexes for the areas given an atlas's volume registered into subject space. - Updated included LIBSVM version to 2.89 and provided support for its "silencing". * Refactored (27 RF commits): - Dataset's :meth:`~mvpa.datasets.base.Dataset.copy` with deep=False allows for shallow copying the dataset. - :class:`~mvpa.clfs.meta.FeatureSelectionClassifier` s in :mod:`~mvpa.clfs.warehouse` not to reuse the same classifiers, but to use clones. * Fixed (70 BF commits): - :class:`~mvpa.measures.anova.OneWayAnova`: previously degrees of freedom were not considered while computing F-scores. - Majority voting strategy in :class:`~mvpa.clfs.knn.kNN`: it was not working. - Various fixes to ensure cross-platform building (:mod:`numpy` header locations, etc). - Stability fixes in :class:`~mvpa.clfs.transerror.ConfusionMatrix`. - :meth:`~mvpa.datasets.base.Dataset.idsonboundaries`: samples at the end of the sequence were not handled properly. - Proper "untraining" of :class:`~mvpa.clfs.meta.FeatureSelectionClassifier` s classifiers which use sensitivities: it could lead to various unpleasant side-effects if the same slave classifier was used simultaneously by multiple :class:`MetaClassifiers` (like :class:`~mvpa.clfs.meta.TreeClassifier`). * Documentation (25 DOC commits): citations, spelling corrections, etc. * 0.4.2 (Mon, 25 May 2009) * New correlation stability measure (:class:`~mvpa.measures.corrstability.CorrStability`). * New elastic net classifier (:class:`~mvpa.clfs.enet.ENET`). * New GLM-Net regression/classifier (:class:`~mvpa.clfs.glmnet.GLMNET`). * New measure :class:`~mvpa.measures.anova.CompoundOneWayAnova`. * New measure :class:`~mvpa.measures.ds.DSMDatasetMeasure`. * New meta-measure :class:`~mvpa.measures.splitmeasure.TScoredFeaturewiseMeasure`. * New basic :class:`~mvpa.measures.glm.GLM` implementation. * New examples for Gaussian process regression. * New example showing a searchlight analysis employing a dissimilarity matrix based measure. * New :class:`~mvpa.mappers.zscore.ZScoreMapper`. * New import helper for FSL design matrices (:class:`~mvpa.misc.fsl.base.FslGLMDesign`). * New implementation of a mapper using a self-organizing map (:class:`~mvpa.mappers.som.SimpleSOMMapper`) and a corresponding example. * Matplotlib backend is now configurable via :envvar:`MVPA_MATPLOTLIB_BACKEND`. * PyMVPA version is now avialable from :data:`mvpa.__version__`. * Renamed `mvpa.misc.plot.errLinePLot` to :func:`~mvpa.misc.plot.plotErrLine` for consistency. * Fixed :class:`~mvpa.datasets.splitters.NFoldSplitter` to support N-3 and larger splits. * Improved speed of LIBSVM backend. Thanks to Valentin Haenel and Tiziano Zito. * Updated included LIBSVM version to 2.89. * Adjust LIBSVM Python interface for recent NumPy API and latest LIBSVM release 2.89. * Refactored examples parser into a standalone tool to turn PyMVPA examples into restructured text sources. * 0.4.1 (Sat, 24 Jan 2009) * Unit tests and example data are now also installed. In conjunction with :func:`mvpa.test`, this allow to easily run unittests from within Python. * :class:`~mvpa.datasets.nifti.NiftiDataset` capable to handle files with less than 4 dimensions, which can, optionally, be provided as a list of filenames or :class:`~nifti.NiftiImage` objects. That makes it easy to load data from a sequence of files. * Changes (code refactorings) which *might impact* any user who imports from :mod:`~mvpa.suite`: - Pre-populated warehouses of classifiers and regressions are renamed from clfs and regrs into :data:`~mvpa.clfs.warehouse.clfswh` and :data:`~mvpa.clfs.warehouse.regrswh` respectively. - :class:`~mvpa.misc.io.hamster.Hamster` is not derived from :class:`dict` any longer -- just from a basic :class:`object` class. API includes methods 'dump', 'asdict' and a property 'registered'. * Changes (code refactorings) which *should not impact* any user who imports from :mod:`~mvpa.suite`: - Meta classifiers definitions moved from :mod:`~mvpa.clfs.base` into :mod:`~mvpa.clfs.meta`. - Splitters definitions moved from :mod:`~mvpa.datasets.splitter` into :mod:`~mvpa.datasets.splitters` * 0.4.0 (Sat, 15 Nov 2008) * Add :class:`~mvpa.misc.io.hamster.Hamster`, as a simple facility to easily store any serializable objects in a compressed file and later on resurrect all of them with a single line of code. * SVM backend is now configurable via :envvar:`MVPA_SVM_BACKEND` (libsvm or shogun). * Non-deterministic tests in the unittest battery are now configurable via :envvar:`MVPA_TESTS_LABILE`. * New helper to determine and plot the best matching distribution(s) for the data (matchDistribution, plotDistributionMatches). It is WiP thus API can change in the upcoming release. * Simplifies API of mappers. * Splitters can now limit the number of splits automatically. * New :class:`~mvpa.mappers.base.CombinedMapper` to map between multiple, independent dataspace and a common feature space. * New :class:`~mvpa.mappers.base.ChainMapper` to create chains of mappers of abitrary lenght (e.g. to build preprocessing pipelines). * New :class:`~mvpa.datasets.event.EventDataset` to rapidly extract boxcar-shaped samples from data array using a simple list of :class:`~mvpa.misc.support.Event` definitions. * Removed obsolete MetricMapper class. :class:`~mvpa.mappers.base.Mapper` itself provides the facilities for dealing with metrics. * :class:`~mvpa.mappers.boxcar.BoxcarMapper` can now handle data with more than four dimensions/axis and also performs reverse mapping of single boxcar samples. * :class:`~mvpa.misc.fsl.base.FslEV3` can now convert EV3 files into a list of :class:`~mvpa.misc.support.Event` instances. * Results of tests for external dependencies are now stored in PyMVPA's config manager (`mvpa.cfg`) and can be stored to a file (not done automatically at the moment). This will significantly decrease the time needed to import the `mvpa` module, as it prevents the repeated and lengthy tests for working externals. * Initial support for ROC computing and AUC as an accuracy measure. * Weights of LARS are now available via :class:`~mvpa.clfs.lars.LARSWeights`. * Added an initial list of MVPA-related references to the manual, tagged with keywords and comments as well is DOI or similar URL reference to the original document. * Added initial glossary to the manual. * New 'Module reference', as a middle-ground between manual and API reference. * New manual section about meta-classifiers (contributed by James M. Hughes). * New minimal example for a 'getting started' section in the manual. * Former :envvar:`MVPA_QUICKTEST` was renamed to :envvar:`MVPA_TESTS_QUICK`. * Update installation instructions for RPM-based distributions to make use of the OpenSUSE Build Service. * Updated install instructions for several RPM-based GNU/Linux distributions. * Switch from distutils to numpy.distutils (no change in dependencies). * Depend on PyNIfTI >= 0.20081017.1 and gain a smaller memory footprint when accessing NIfTI files via all datasets with NIfTI support. * Added workaround to make PyMVPA work with older Shogun releases and those from 0.6.4 on, which introduced backward-incompatible API changes. * 0.3.1 (Sun, 14 Sep 2008) * New manual section about feature selection with a focus on RFE. Contributed by James M. Hughes. * New dataset type :class:`~mvpa.datasets.channel.ChannelDataset` for data structured in channels. Might be useful for data modalities like EEG and MEG. This dataset includes support for common preprocessing steps like resampling and baseline signal substraction. * Plotting of topographies on heads. Thanks to Ingo Fründ for contributing this code. Additionally, a new example shows how to do such plots. * New general purpose function for generating barplots and candlestick plots with error bars (:func:`~mvpa.misc.plot.base.plotBars`). * Dataset supports mapping of string labels onto numerical labels, removing the need to perform this mapping manually in user code. 'clfs_examples.py' is adjusted accordingly to demonstrate the new feature. * New :meth:`mvpa.clfs.base.Classifier.summary` method to dump classifier settings. * Improved and more flexible :func:`~mvpa.misc.plot.erp.plotERPs`. * New :class:`~mvpa.measures.irelief.IterativeRelief` sensitivity analyzer. * Added visualization of confusion matrices via :meth:`mvpa.clfs.transerror.ConfusionMatrix.plot` inspired by Ingo Fründ. * The PyMVPA version is now globally available in :data:`mvpa.pymvpa_version`. * BugFix: :class:`~mvpa.misc.io.meg.TuebingenMEG` reader failed in some cases. * Several improvements (docs and implementation) for building PyMVPA on MacOS X. * New convenience accessor methods (:meth:`~mvpa.datasets.base.Dataset.select`, :meth:`~mvpa.datasets.base.Dataset.where` and :meth:`~mvpa.datasets.base.Dataset.__getitem__`) for :class`~mvpa.datasets.base.Dataset`. * New :func:`mvpa.seed()` function to configure the random number generators from user code. * Added reader for a MEG sensor locations format (:class:`~mvpa.misc.io.meg.TuebingenMEGSensorLocations`). * Initial model selection support for GRP (using openopt). * And tons of minor bugfixes, additional tests and improved documentation. * 0.3.0 (Mon, 18 Aug 2008) * Import of binary EEP files (used by EEProbe) and EEPDataset class. * Initial version of a meta dataset class (MetaDataset). This is a container for multiple datasets, which behaves like a dataset itself. * Regression performance is summarized now within RegressionStatistics. * Error functions: CorrErrorPFx, RelativeRMSErrorFx. * Measures: CorrCoef. * Data generators: chirp, wr1996 * Few more examples: curvefitting, kerneldemo, smellit, projections * Updated kNN classifier. kNN is now able to use custom distance function to determine that nearest neighbors. It also (re)gained the ability to do simple majority or weighted voting. * Some initial convenience functions for plotting typical results and data exploration. * Unified configuration handling with support for user-specific and analysis-specific config files, as well as the ability to override all config settings via environment variables. The configuration handling is used for PyMVPA internal settings, but can also be easily used for custom (user-)settings. * Improved modularity, e.g. SciPy is not required anymore, but still very useful. * Initial implementations of ICA and PCA mapper using functionality provided by MDP. These mappers are more or less untested and should be used with great care. * Further improved docstrings of some classes, but still a long way to go. * New 'boxcar' mapper, which is the similar to the already present transformWithBoxCar() function, but implemented as a mapper. * New SampleGroupMapper that can be used for e.g. block averaging of samples. See new FAQ item. * Stripped redundant suffixes from module names, e.g. mvpa.datasets.niftidataset -> mvpa.datasets.nifti * mvpa.misc.cmdline variables opt* and opts* were groupped within opt and optss class instances. Also names of the options were changed to match 'dest' of the options. Use tools/refactor.py to quickly fix your custom code. * Change all references to PyMVPA website to www.pymvpa.org. * Make website stylesheet compatible with sphinx 0.4. * Several minor improvements of the compatibility with MacOS. * Extended FAQ section of the manual. * Bugfix: double_gamma_hrf() ignoring K2 argument. * 0.2.2 (Tue, 17 Jun 2008) * Extended build instructions: Added section on OpenSUSE. * Replaced ugly PYMVPA_LIBSVM environment variable to trigger compiling the LIBSVM wrapper with a proper '--with-libsvm' switch in setup.py. Additionally, setup.py now detects if included LIBSVM has been built and enables LIBSVM wrapper automatically in this case. * Added proper Makefiles for LIBSVM copy, with configurable compiler flags. * Added 'setup.cfg' to remove the need to manually specify swig-opts (Windows specific configuration is in 'setup.cfg.win'). * 0.2.1 (Sun, 15 Jun 2008) * Several improvements to make building PyMVPA on Windows systems easy (e.g. added dedicated Makefile.win to build a binary installer). * Improved and extended documentation for building and installing PyMVPA. * Include a minimal copy of the required (patched) LIBSVM library (currently version 2.85.0) for convenience. This copy is automatically compiled and used for the LIBSVM wrapper when PyMVPA built using the `Make` approach. * 0.2.0 (Wed, 29 May 2008) * New Splitter class (HalfSplitter) to split into first and second half. * New Splitter class (CustomSplitter) to allow for splits with an arbitrary number of datasets per split and the ability to specify the association of samples with any of those datasets (not just the validation set). * New sparse multinomial logistic regression (SMLR) classifier and associated sensitivity analyzer. * New least angle regression classifier (LARS). * New Gaussian process regression classifier (GPR). * Initial documentation on extending PyMVPA. * Switch to Sphinx for documentation handling. * New example comparing the performance of all classifiers on some artificial datasets. * New data mapper performing singular value decomposition (SVDMapper) and an example showing its usage. * More sophisticated data preprocessing: removal of non-linear trends and other arbitrary confounding regressors. * New `Harvester` class to feed data from arbitrary generators into multiple objects and store results of returned values and arbitrary properties. * Added documentation about how to build patched libsvm version with sane debug output. * libsvm bindings are not build by default anymore. Instructions on how to reenable them are available in the manual. * New wrapper from SVM implementation of the Shogun toolbox. * Important bugfix in RFE, which reported incorrect feature ids in some cases. * Added ability to compute stats/probabilities for all measures and transfer errors. * 0.1.0 (Wed, 20 Feb 2008) * First public release. .. _statsmodels: http://statsmodels.sourceforge.net pymvpa2-2.2.0/MANIFEST.in000066400000000000000000000002261202542755000146510ustar00rootroot00000000000000include AUTHOR COPYING MANIFEST.in setup.* include Changelog TODO Makefile* recursive-include doc * recursive-include tools * recursive-include 3rd * pymvpa2-2.2.0/Makefile000066400000000000000000000623501202542755000145610ustar00rootroot00000000000000PROFILE_FILE=$(CURDIR)/$(BUILDDIR)/main.pstats COVERAGE_REPORT=$(CURDIR)/$(BUILDDIR)/coverage BUILDDIR=$(CURDIR)/build BUILD3DIR=$(CURDIR)/build/py3k HTML_DIR=$(BUILDDIR)/html DOC_DIR=$(CURDIR)/doc TUT_DIR=$(CURDIR)/datadb/tutorial_data/tutorial_data DOCSRC_DIR=$(DOC_DIR)/source DOCBUILD_DIR=$(BUILDDIR)/doc NOTEBOOKBUILD_DIR=$(HTML_DIR)/notebooks MAN_DIR=$(BUILDDIR)/man APIDOC_DIR=$(HTML_DIR)/api PDF_DIR=$(BUILDDIR)/pdf LATEX_DIR=$(BUILDDIR)/latex WWW_DIR=$(BUILDDIR)/website SWARM_DIR=$(BUILDDIR)/swarm WWW_UPLOAD_URI=www.pymvpa.org:/home/www/www.pymvpa.org/pymvpa WWW_UPLOAD_URI_DEV=dev.pymvpa.org:/home/www/dev.pymvpa.org/pymvpa DATA_UPLOAD_URI=data.pymvpa.org:/home/www/data.pymvpa.org/www/datasets DATA_URI=data.pymvpa.org::datadb SWARMTOOL_DIR=tools/codeswarm SWARMTOOL_DIRFULL=$(CURDIR)/$(SWARMTOOL_DIR) RSYNC_OPTS=-az -H --no-perms --no-owner --verbose --progress --no-g --exclude prev/ RSYNC_OPTS_UP=-rzlhv --delete # -p --chmod=Dg+s,g+rw,o+rX # # The Python executable to be used # PYTHON = python PYTHON3 = python3 # Setup local PYTHONPATH depending on the version of provided $(PYTHON) PYVER = $(shell $(PYTHON) -c 'import sys; print(sys.version_info[0])') ifeq ($(PYVER),2) # just use the local sources and run tests 'in source' TEST_DIR = . LPYTHONPATH = .:$(PYTHONPATH) else # for 3 (and hopefully not above ;) ) -- corresponding build/ # since sources go through 2to3 conversion TEST_DIR = $(BUILD3DIR) LPYTHONPATH = $(BUILD3DIR):$(PYTHONPATH) endif # Assure non-interactive Matplotlib and provide local paths helper MPLPYTHONPATH = PYTHONPATH=.:$(LPYTHONPATH) MVPA_MATPLOTLIB_BACKEND=agg MPLPYTHON = $(MPLPYTHONPATH) $(PYTHON) MPLPYTHON3 = $(MPLPYTHONPATH) $(PYTHON3) NOSETESTS = $(PYTHON) $(shell which nosetests) # # Helpers for version handling. # Note: can't be ':='-ed since location of invocation might vary DEBCHANGELOG_VERSION = $(shell dpkg-parsechangelog | egrep ^Version | cut -d ' ' -f 2,2 | cut -d '-' -f 1,1) SETUPPY_VERSION = $(shell $(PYTHON) setup.py -V) # # Automatic development version # #yields: LastTagName_CommitsSinceThat_AbbrvHash DEV_VERSION := $(shell git describe --abbrev=4 HEAD |sed -e 's/-/+/g' |cut -d '/' -f 2,2) # By default we are releasing with setup.py version RELEASE_VERSION ?= $(SETUPPY_VERSION) RELEASE_CODE ?= # Conditional depends regulated from outside # ifdef PYMVPA_NO_3RD build_depends := else build_depends := endif # # Details on the Python/system # PYVER := $(shell $(PYTHON) -V 2>&1 | cut -d ' ' -f 2,2 | cut -d '.' -f 1,2) # # Little helpers # mkdir-%: if [ ! -d $($*) ]; then mkdir -p $($*); fi # # Building # all: build # build included 3rd party pieces (if present) 3rd: 3rd-stamp 3rd-stamp: find 3rd -mindepth 1 -maxdepth 1 -type d | \ while read d; do \ [ -f "$$d/Makefile" ] && $(MAKE) -C "$$d" || :; \ done touch $@ debian-build: # reuse is better than duplication (yoh) debian/rules build build: build-stamp build-stamp: $(build_depends) $(PYTHON) setup.py config --noisy $(PYTHON) setup.py build_ext --inplace touch $@ build3: build3-stamp build3-stamp: $(build_depends) $(PYTHON3) setup.py config --noisy $(PYTHON3) setup.py build_ext --inplace touch $@ # # Cleaning # # this target is used to clean things for a fresh build clean: @echo "I: Performing clean operation" # clean 3rd party pieces find 3rd -mindepth 1 -maxdepth 1 -type d | \ while read d; do \ [ -f "$$d/Makefile" ] && $(MAKE) -C "$$d" clean || : ; \ done # clean tools $(MAKE) -C tools clean # clean pics $(MAKE) -C doc/pics clean # clean docs $(MAKE) -C doc clean -@rm -f $(DOCSRC_DIR)/examples/*.rst # clean all bits and pieces -@rm -f MANIFEST -@rm -f mvpa2/clfs/lib*/*.so \ mvpa2/clfs/lib*/*.dylib \ mvpa2/clfs/lib*/*_wrap.* \ mvpa2/clfs/lib*/*c.py \ mvpa2/tests/*.{prof,pstats,kcache} @find . -name '*.py[co]' \ -o -name '*,cover' \ -o -name '.coverage' \ -o -name 'iterate.dat' \ -o -iname '*~' \ -o -iname '*.kcache' \ -o -iname '*.gch' \ -o -iname '*_flymake.*' \ -o -iname '#*#' | xargs -L 10 rm -f -@rm -rf build -@rm -rf dist *report __pycache__ -@rm -f *-stamp *_report.pdf *_report.log pymvpa2.cfg # this target should put the source tree into shape for building the source # distribution distclean: clean # if we are on debian system - we might have left-overs from build -@$(MAKE) debian-clean -@rm -rf tools/codeswarm debian-clean: # remove stamps for builds since state is not really built any longer -fakeroot debian/rules clean # # Documentation # doc: website manpages pics: $(MAKE) -C doc/pics manpages: mkdir-MAN_DIR @echo "I: Creating manpages" PYTHONPATH=$(LPYTHONPATH) help2man -N -n 'preprocess fMRI data for PyMVPA' \ bin/pymvpa2-prep-fmri > $(MAN_DIR)/pymvpa2-prep-fmri.1 PYTHONPATH=$(LPYTHONPATH) help2man -N -n 'query stereotaxic atlases' \ bin/pymvpa2-atlaslabeler > $(MAN_DIR)/pymvpa2-atlaslabeler.1 PYTHONPATH=$(LPYTHONPATH) help2man -N -n 'start a PyMVPA tutorial session' \ bin/pymvpa2-tutorial > $(MAN_DIR)/pymvpa2-tutorial.1 references: @echo "I: Generating references" tools/bib2rst_ref.py # Since mpl doesn't take env variables mpl-stamp: build echo "backend : Agg" >| $(CURDIR)/build/matplotlibrc touch $@ htmldoc: examples2rst build pics mpl-stamp tutorial2notebooks @echo "I: Creating an HTML version of documentation" cd $(DOC_DIR) && MVPA_EXTERNALS_RAISE_EXCEPTION=off \ PYTHONPATH=$(CURDIR):$(PYTHONPATH) \ MPLCONFIGDIR=$(CURDIR)/build HOME=$(CURDIR)/build \ $(MAKE) html BUILDDIR=$(BUILDDIR) SPHINXOPTS="$(SPHINXOPTS)" cd $(HTML_DIR)/generated && ln -sf ../_static cd $(HTML_DIR)/examples && ln -sf ../_static cd $(HTML_DIR)/workshops && ln -sf ../_static cd $(HTML_DIR)/datadb && ln -sf ../_static cp $(DOCSRC_DIR)/pics/history_splash.png $(HTML_DIR)/_images/ pdfdoc: examples2rst build pics pdfdoc-stamp pdfdoc-stamp: mpl-stamp @echo "I: Creating a PDF version of documentation" cd $(DOC_DIR) && MVPA_EXTERNALS_RAISE_EXCEPTION=off \ PYTHONPATH=$(CURDIR):$(PYTHONPATH) \ MPLCONFIGDIR=$(CURDIR)/build HOME=$(CURDIR)/build \ $(MAKE) latex BUILDDIR=$(BUILDDIR) SPHINXOPTS="$(SPHINXOPTS)" cd $(LATEX_DIR) && $(MAKE) all-pdf touch $@ # Create a handy .pdf of the manual to be printed as a book handbook: pdfdoc @echo "I: Creating a handbook of the manual" cd tools && $(MAKE) pdfbook build/tools/pdfbook -2 \ $(LATEX_DIR)/PyMVPA-Manual.pdf $(LATEX_DIR)/PyMVPA-Manual-Handbook.pdf examples2rst: examples2rst-stamp examples2rst-stamp: mkdir-DOCBUILD_DIR tools/ex2rst \ --project PyMVPA \ --outdir $(DOCSRC_DIR)/examples \ --exclude doc/examples/searchlight_app.py \ doc/examples touch $@ tutorial2notebooks: tutorial2notebooks-stamp tutorial2notebooks-stamp: mkdir -p $(NOTEBOOKBUILD_DIR) tools/rst2ipnbpy \ --baseurl http://pymvpa.org \ --apiref_baseurl http://pymvpa.org/generated \ --glossary_baseurl http://pymvpa.org/glossary.html \ --outdir $(NOTEBOOKBUILD_DIR) \ --exclude doc/source/tutorial_prerequisites.rst \ --verbose \ doc/source/tutorial_*.rst touch $@ apidoc: apidoc-stamp apidoc-stamp: build # Disabled profiling for now, it consumes huge amounts of memory, so I doubt # that all buildds can do it. In theory it would only be done on a single # developer machine, because it is only necessary for the arch-all package, # but e.g. dpkg-buildpackage runs the indep target anyway -- not sure about # the buildds, though. #apidoc-stamp: profile @echo "I: Creating an API documentation with epydoc" mkdir -p $(HTML_DIR)/api LC_ALL=C MVPA_EPYDOC_WARNINGS=once tools/epydoc --config doc/api/epydoc.conf touch $@ # this takes some minutes !! # TODO: adjust for py3 compatibility profile: build mvpa2/tests/__init__.py @echo "I: Profiling unittests" @PYTHONPATH=$(LPYTHONPATH) tools/profile -K -O $(PROFILE_FILE) mvpa2/tests/__init__.py # # Website # website: website-stamp website-stamp: mkdir-WWW_DIR htmldoc pdfdoc cp -r $(HTML_DIR)/* $(WWW_DIR) cp $(LATEX_DIR)/PyMVPA-*.pdf $(WWW_DIR) tools/sitemap.sh > $(WWW_DIR)/sitemap.xml # main icon of the website cp $(DOCSRC_DIR)/pics/favicon.png $(WWW_DIR)/_images/ # for those who do not care about and just trying to download it cp $(DOCSRC_DIR)/pics/favicon.png $(WWW_DIR)/favicon.ico # provide robots.txt to minimize unnecessary traffic cp $(DOCSRC_DIR)/_static/robots.txt $(WWW_DIR)/ # provide promised pylintrc mkdir -p $(WWW_DIR)/misc && cp $(DOC_DIR)/misc/pylintrc $(WWW_DIR)/misc touch $@ upload-website: $(MAKE) website SPHINXOPTS='-D html_theme=pymvpa_online' rsync $(RSYNC_OPTS_UP) $(WWW_DIR)/* $(WWW_UPLOAD_URI)/ git update-ref refs/heads/website-updates/www HEAD upload-htmldoc: $(MAKE) htmldoc SPHINXOPTS='-D html_theme=pymvpa_online' chmod a+rX -R $(HTML_DIR) rsync $(RSYNC_OPTS_UP) $(HTML_DIR)/* $(WWW_UPLOAD_URI)/ git update-ref refs/heads/website-updates/www-html HEAD upload-website-dev: sed -i -e "s,http://disqus.com/forums/pymvpa/,http://disqus.com/forums/pymvpa-dev/,g" \ -e "s,^,
This content refers to an unreleased development version of PyMVPA
,g" \ doc/source/_themes/pymvpa_online/page.html $(MAKE) website SPHINXOPTS='-D html_theme=pymvpa_online' sed -i -e "s,http://disqus.com/forums/pymvpa-dev/,http://disqus.com/forums/pymvpa/,g" \ -e "s,^.*$$,,g" \ doc/source/_themes/pymvpa_online/page.html sed -i -e "s,www.pymvpa.org,dev.pymvpa.org,g" $(WWW_DIR)/sitemap.xml chmod a+rX -R $(WWW_DIR) rsync $(RSYNC_OPTS_UP) $(WWW_DIR)/* $(WWW_UPLOAD_URI_DEV)/ upload-htmldoc-dev: grep -q pymvpa-dev doc/source/_themes/pymvpa_online/page.html || \ sed -i -e "s,http://disqus.com/forums/pymvpa/,http://disqus.com/forums/pymvpa-dev/,g" \ -e "s,^,
This content refers to an unreleased development version of PyMVPA
,g" \ doc/source/_themes/pymvpa_online/page.html $(MAKE) htmldoc SPHINXOPTS='-D html_theme=pymvpa_online' sed -i -e "s,http://disqus.com/forums/pymvpa-dev/,http://disqus.com/forums/pymvpa/,g" \ -e "s,^.*$$,,g" \ doc/source/_themes/pymvpa_online/page.html rsync $(RSYNC_OPTS_UP) $(HTML_DIR)/* $(WWW_UPLOAD_URI_DEV)/ # upload plain .rst files as descriptions to data.pympa.org as descriptions of # each dataset upload-datadb-descriptions: for ds in doc/source/datadb/*; do \ ds=$$(basename $${ds}); ds=$${ds%*.rst}; \ scp doc/source/datadb/$${ds}.rst $(DATA_UPLOAD_URI)/$${ds}/README.rst; \ done # # Tests (unittests, docs, examples) # ut-%: build @cd $(TEST_DIR) && PYTHONPATH=$(LPYTHONPATH) $(NOSETESTS) --nocapture mvpa2/tests/test_$*.py unittest: build @echo "I: Running unittests (without optimization nor debug output)" @cd $(TEST_DIR) && $(MPLPYTHON) mvpa2/tests/__init__.py # test if PyMVPA is working if optional externals are missing unittest-badexternals: build @echo "I: Running unittests under assumption of missing optional externals." @cd $(TEST_DIR) && PYTHONPATH=mvpa2/tests/badexternals:$(LPYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ $(PYTHON) mvpa2/tests/__init__.py 2>&1 \ | grep -v -e 'WARNING: Known dependency' -e 'Please note: w' \ -e 'WARNING:.*SMLR.* implementation' # only non-labile tests unittest-nonlabile: build @echo "I: Running only non labile unittests. None of them should ever fail." @cd $(TEST_DIR) && MVPA_TESTS_LABILE=no \ $(MPLPYTHON) mvpa2/tests/__init__.py unittest-py3: build3 @echo "I: Running py3-compatible unittests. None of them should ever fail." -@rm -f build3-stamp # evil Tiziano! ;) @cd $(BUILD3DIR) && MVPA_TESTS_LABILE=no MVPA_TESTS_QUICK=yes \ MVPA_TESTS_LOWMEM=yes $(MPLPYTHON3) mvpa2/tests/__init__.py unittest-py3warn: build @echo "I: Running unittests with py3 warnings. None of them should ever fail." @MVPA_TESTS_LABILE=no MVPA_TESTS_QUICK=yes \ MVPA_TESTS_LOWMEM=yes $(MPLPYTHON) -3 mvpa2/tests/__init__.py # test if no errors would result if we force enabling of all ca unittest-ca: build @echo "I: Running unittests with all ca enabled." @cd $(TEST_DIR) && MVPA_DEBUG=ENFORCE_CA_ENABLED \ $(MPLPYTHON) mvpa2/tests/__init__.py # Run unittests with optimization on -- helps to catch unconditional # debug calls unittest-optimization: build @echo "I: Running unittests with $(PYTHON) -O." @cd $(TEST_DIR) && $(MPLPYTHON) -O mvpa2/tests/__init__.py # Run unittests with all debug ids and some metrics (crossplatform ones) on. # That does: # additional checking, # debug() calls validation, etc # Need to use /bin/bash due to use of PIPESTATUS unittest-debug: SHELL=/bin/bash unittest-debug: build @echo "I: Running unittests with debug output. No progress output." @cd $(TEST_DIR) && MVPA_DEBUG=.* MVPA_DEBUG_METRICS=ALL \ $(MPLPYTHON) mvpa2/tests/__init__.py 2>&1 \ | sed -n -e '/^[=-]\{60,\}$$/,$$p'; \ exit $${PIPESTATUS[0]} # reaquire status of 1st command, works only in bash! # Run all unittests # Run with 'make -k' if you like to sweep through all of them, so # failure in one of them does not stop the full sweep unittests: unittest-nonlabile unittest unittest-badexternals \ unittest-optimization unittest-ca unittest-debug te-%: build @echo -n "I: Testing example $*: " @[ -z "$$MVPA_TESTS_LOGDIR" ] \ && logfile=temp-$@.log \ || { mkdir -p $$MVPA_TESTS_LOGDIR; logfile=$$MVPA_TESTS_LOGDIR/$@.log; }; \ MVPA_EXAMPLES_INTERACTIVE=no \ $(MPLPYTHONPATH) /usr/bin/time $(PYTHON) doc/examples/$*.py >| $$logfile 2>&1 \ && { echo "passed"; ex=0; } \ || { echo "failed:"; ex=1; cat $$logfile; }; \ [ -z "$$MVPA_TESTS_LOGDIR" ] && rm -f $$logfile || : ; \ exit $$ex testexamples: te-svdclf te-smlr te-sensanas te-pylab_2d \ te-curvefitting te-projections te-kerneldemo \ te-erp_plot te-match_distribution te-permutation_test \ te-searchlight_minimal te-smlr te-start_easy te-topo_plot \ te-gpr te-gpr_model_selection0 te-mri_plot te-searchlight \ te-clfs_examples testdocstrings: dt-mvpa dt-%: build @echo "I: Doctesting $*" @PYTHONPATH=$(LPYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ MVPA_EXTERNALS_RAISE_EXCEPTION=off \ MVPA_DATADB_ROOT=datadb \ MVPA_WARNINGS_SUPPRESS=1 \ $(NOSETESTS) --with-doctest \ $(shell git grep -l __docformat__ | grep '^mvpa' \ | grep -v filter.py | grep -v channel.py | grep "$*") tm-%: build @PYTHONPATH=.:$(CURDIR)/doc/examples:$(PYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ MVPA_LOCATION_TUTORIAL_DATA=$(TUT_DIR) \ MVPA_DATADB_ROOT=datadb \ MVPA_WARNINGS_SUPPRESS=1 \ $(NOSETESTS) --with-doctest --doctest-extension .rst \ --doctest-tests doc/source/$*.rst testmanual: build testdocstrings @echo "I: Testing code samples found in documentation" @PYTHONPATH=$(LPYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ MVPA_LOCATION_TUTORIAL_DATA=$(TUT_DIR) \ MVPA_DATADB_ROOT=datadb \ MVPA_WARNINGS_SUPPRESS=1 \ $(NOSETESTS) -v --with-doctest --doctest-extension .rst \ --doctest-tests doc/source testtutorial-%: build @echo "I: Testing code samples found in tutorial part $*" @PYTHONPATH=$(LPYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ MVPA_LOCATION_TUTORIAL_DATA=$(TUT_DIR) \ MVPA_WARNINGS_SUPPRESS=1 \ $(NOSETESTS) --with-doctest --doctest-extension .rst \ --doctest-tests doc/source/tutorial_$**.rst # Test either all # alt references in tutorials are correct # Just outputs filenames found missing -- doesn't fail the rule TUTORIAL_RESDIR=tutorial_data/results testtutorials-alt: @grep '# *alt' doc/source/tutorial*rst | \ sed -e "s/.*'\(.*\)'.*/\1/g" | \ while read f; do \ fs="$$(/bin/ls $(TUT_DIR)/results/$$f.* 2>/dev/null)"; \ [ -z "$$fs" ] && echo "$$f missing" || :; \ done testdatadb: build @echo "I: Testing code samples on the dataset DB website" @PYTHONPATH=$(LPYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ MVPA_DATADB_ROOT=datadb \ MVPA_WARNINGS_SUPPRESS=1 \ $(NOSETESTS) --with-doctest --doctest-extension .rst \ --doctest-tests doc/source/datadb/*.rst # Check if everything (with few exclusions) is imported in unitests is # known to the mvpa2.suite() # XXX remove \|spam whenever clfs.spam gets available testsuite: @echo "I: Running full testsuite" @tfile=`mktemp -u testsuiteXXXXXXX`; \ git grep -h '^\W*from mvpa2.*import' mvpa2/tests | \ grep -v '^\W*#' | \ sed -e 's/^.*from *\(mvpa[^ ]*\) im.*/from \1 import/g' | \ sort | uniq | \ grep -v -e 'mvpa.\.base\.dochelpers' \ -e 'mvpa.\.\(tests\|testing\|support\)' \ -e 'mvpa.\.misc\.args' \ -e 'mvpa.\.clfs\.\(libsvmc\|sg\|spam\)' \ | while read i; do \ grep -q "^ *$$i" mvpa2/suite.py || \ { echo "E: '$$i' is missing from mvpa2.suite()"; touch "$$tfile"; }; \ done; \ [ -f "$$tfile" ] && { rm -f "$$tfile"; exit 1; } || : # Check if links to api/ within documentation are broken. testapiref: @echo "I: epydoc support is depricated -- so, nothing to test" # testapiref: apidoc # @for tf in doc/*.rst; do \ # out=$$(for f in `grep api/mvpa $$tf | sed -e 's|.*\(api/mvpa2.*html\).*|\1|g' `; do \ # ff=build/html/$$f; [ ! -f $$ff ] && echo "E: $$f missing!"; done; ); \ # [ "x$$out" == "x" ] || echo -e "$$tf:\n$$out"; done # Check if there is no WARNINGs from sphinx testsphinx: htmldoc { grep -A1 system-message build/html/*html build/html/*/*html && exit 1 || exit 0 ; } # Check if stored cfg after whole suite is imported is safe to be # reloaded testcfg: build @echo "I: Running test to check that stored configuration is acceptable." -@rm -f pymvpa2.cfg @PYTHONPATH=$(LPYTHONPATH) $(PYTHON) -c 'from mvpa2.suite import *; cfg.save("pymvpa2.cfg");' @PYTHONPATH=$(LPYTHONPATH) $(PYTHON) -c 'from mvpa2.suite import *;' @echo "+I: Run non-labile testing to verify safety of stored configuration" @cd $(TEST_DIR) && PYTHONPATH=$(LPYTHONPATH) MVPA_TESTS_LABILE=no $(PYTHON) mvpa2/tests/__init__.py @echo "+I: Check all known dependencies and store them" @PYTHONPATH=$(LPYTHONPATH) $(PYTHON) -c \ 'from mvpa2.suite import *; mvpa2.base.externals.check_all_dependencies(force=False); cfg.save("pymvpa2.cfg");' @echo "+I: Run non-labile testing to verify safety of stored configuration" @cd $(TEST_DIR) && PYTHONPATH=$(LPYTHONPATH) MVPA_TESTS_LABILE=no $(PYTHON) mvpa2/tests/__init__.py -@rm -f pymvpa2.cfg testourcfg: build @echo "+I: Run non-labile testing to verify safety of shipped configuration" @cd $(TEST_DIR) && PYTHONPATH=$(LPYTHONPATH) MVPACONFIG=doc/examples/pymvpa2.cfg MVPA_TESTS_LABILE=no $(PYTHON) mvpa2/tests/__init__.py test-prep-fmri: @echo "+I: Smoke test the functionality of the pymvpa2-prep-fmri script" @td=`(mktemp -d)`; trap "rm -rf $$td" exit; \ ln -s $(CURDIR)/mvpa2/data/example4d.nii.gz $$td/; \ cd $$td; \ PYTHONPATH=$(CURDIR):$(PYTHONPATH) \ MVPA_MATPLOTLIB_BACKEND=agg \ $(CURDIR)/bin/pymvpa2-prep-fmri -p -e first -s T -b '-f 0.4' example4d.nii.gz; \ [ -e $$td/T ] \ && [ -e $$td/T/func_mc.pdf ] \ && [ -e $$td/T/func_mc.nii.gz ] \ && head -1 $$td/T/func_mc.par | grep -q '0 0 0' \ test: unittests testmanual testsuite testexamples testcfg testourcfg # Target to be called after some major refactoring # It skips some flavors of unittests testrefactor: unittest testmanual testsuite testexamples coverage: $(COVERAGE_REPORT) $(COVERAGE_REPORT): build @echo "I: Generating coverage data and report. Takes awhile. No progress output." @cd $(TEST_DIR) && { \ export PYTHONPATH=$(LPYTHONPATH) MVPA_DEBUG=.* MVPA_DEBUG_METRICS=ALL; \ python-coverage -x mvpa2/tests/__init__.py >/dev/null 2>&1; \ python-coverage -r -i -o /usr,/var >| $(COVERAGE_REPORT); \ grep -v '100%$$' $(COVERAGE_REPORT); \ python-coverage -a -i -o /usr,/var ; } # # Sources # pylint: pylint -e --rcfile doc/misc/pylintrc mvpa # # Generate new source distribution # (not to be run by users, depends on debian environment) # Check either everything was committed check-nodirty: # Need to run in clean tree. If fails: commit or clean first [ "x$$(git diff)" = "x" ] # || $(error "") check-debian: # Need to run in a Debian packaging branch [ -d debian ] check-debian-version: check-debian # Does debian version correspond to setup.py version? [ "$(DEBCHANGELOG_VERSION)" = "$(SETUPPY_VERSION)" ] embed-dev-version: check-nodirty # change upstream version sed -i -e "s/$(SETUPPY_VERSION)/$(DEV_VERSION)/g" setup.py mvpa2/__init__.py # change package name sed -i -e "s/= 'pymvpa',/= 'pymvpa-snapshot',/g" setup.py deb-dev-autochangelog: check-debian # removed -snapshot from pkg name for now $(MAKE) check-debian-version || \ dch --newversion $(DEV_VERSION)-1 --package pymvpa-snapshot \ --allow-lower-version "PyMVPA development snapshot." deb-mergedev: git merge --no-commit origin/dist/debian/dev orig-src: git archive --format=tar --prefix=pymvpa-$(SETUPPY_VERSION)/ HEAD | \ gzip -9 > pymvpa_$(SETUPPY_VERSION).orig.tar.gz devel-src: check-nodirty -rm -rf dist git clone -l . dist/pymvpa-snapshot #RELEASE_CODE=-snapshot RELEASE_VERSION=$(DEV_VERSION) \ $(MAKE) -C dist/pymvpa-snapshot -f ../../Makefile embed-dev-version orig-src mv dist/*tar.gz .. rm -rf dist devel-dsc: check-nodirty -rm -rf dist git clone -l . dist/pymvpa-snapshot #RELEASE_CODE=-snapshot RELEASE_VERSION=$(DEV_VERSION) \ $(MAKE) -C dist/pymvpa-snapshot -f ../../Makefile embed-dev-version orig-src deb-mergedev deb-dev-autochangelog # create the dsc -- NOT using deb-src since it would clean the hell first cd dist && dpkg-source -i'\.(gbp.conf|git\.*)' -b pymvpa-snapshot mv dist/*.gz dist/*dsc .. rm -rf dist # make Debian source package # # DO NOT depend on orig-src here as it would generate a source tarball in a # Debian branch and might miss patches! deb-src: check-debian distclean cd .. && dpkg-source -i'\.(gbp.conf|git\.*)' -b $(CURDIR) bdist_rpm: 3rd $(PYTHON) setup.py bdist_rpm \ --doc-files "doc data" \ --packager "PyMVPA Authors " \ --vendor "PyMVPA Authors " # build MacOS installer -- depends on patched bdist_mpkg for Leopard bdist_mpkg: 3rd $(PYTHON) tools/mpkg_wrapper.py setup.py build_ext $(PYTHON) tools/mpkg_wrapper.py setup.py install # # Data # fetch-data: @echo "I: fetching data from datadb" @rsync $(RSYNC_OPTS) $(DATA_URI)/tutorial_data $(DATA_URI)/mnist \ $(DATA_URI)/face_inversion_demo datadb \ $(DATA_URI)/hyperalignment_tutorial_data \ @for ds in datadb/*; do \ echo " I: looking at $$ds"; \ cd $(CURDIR)/$${ds} && \ md5sum -c MD5SUMS && \ tbs="$$(/bin/ls *.tar.gz 2>/dev/null)" && \ [ ! -z "$$tbs" ] && \ for tb in $${tbs}; do \ fn=$${tb%.tar.gz}; dn=$${fn%-*}; \ [ ! -d $$dn ] && tar xzf $$tb || : ;\ done; \ done # Various other data which might be sensitive and not distribu fetch-data-nonfree: fetch-data-nonfree-stamp fetch-data-nonfree-stamp: @mkdir -p temp # clean up previous location to make sure we don't have it @rm -f data/nonfree/audio/Peter_Nalitch-Guitar.mp3 # remove directories which should be bogus now @rmdir data/nonfree/audio data/nonfree 2>/dev/null || : rsync $(RSYNC_OPTS) dev.pymvpa.org:/home/data/nonfree temp/ && touch $@ # # Various sugarings (e.g. swarm) # AUDIO_TRACK=temp/nonfree/audio/Peter_Nalitch-Guitar.mp3 # With permission of the author, we can use Gitar for our visual history $(AUDIO_TRACK): fetch-data-nonfree # Nice visual git log # Requires: sun-java5-jdk, ffmpeg, ant codeswarm: $(SWARM_DIR)/pymvpa-codeswarm.flv $(SWARM_DIR)/frames: $(SWARMTOOL_DIR) $(SWARM_DIR)/git.xml @echo "I: Visualizing git history using codeswarm" @mkdir -p $(SWARM_DIR)/frames cd $(SWARMTOOL_DIR) && ./run.sh ../../doc/misc/codeswarm.config $(SWARM_DIR)/pymvpa-codeswarm.flv: $(SWARM_DIR)/frames $(AUDIO_TRACK) @echo "I: Generating codeswarm video" @cd $(SWARM_DIR) && \ ffmpeg -r $$(echo "scale=2; $$(ls -1 frames/ |wc -l) / 154" | bc) -f image2 \ -i frames/code_swarm-%05d.png -r 15 -b 250k \ -i ../../$(AUDIO_TRACK) -ar 22050 -ab 128k -acodec libmp3lame \ -y -ac 2 pymvpa-codeswarm.flv $(SWARM_DIR)/git.log: Makefile @echo "I: Dumping git log in codeswarm preferred format" @mkdir -p $(SWARM_DIR) @git log --name-status --all \ --pretty=format:'%n------------------------------------------------------------------------%nr%h | %an | %ai (%aD) | x lines%nChanged paths:' | \ perl -pe 's/Ingo .*d \|/Ingo Fruend |/' | \ sed -e 's,Yaroslav.*Halchenko,Yaroslav O. Halchenko,g' \ -e 's,gorlins,Scott,g' -e 's,Scott Gorlin,Scott,g' -e 's,Scott,Scott Gorlin,g' \ -e 's,hanke,Michael Hanke,g' \ -e 's,swaroop,Swaroop Guntupalli,g' \ -e 's,Per.*Sederberg,Per B. Sederberg,g' \ -e 's,Neukom Institute,James M. Hughes,g' >| $@ $(SWARM_DIR)/git.xml: $(SWARMTOOL_DIR)/run.sh $(SWARM_DIR)/git.log @$(PYTHON) $(SWARMTOOL_DIR)/convert_logs/convert_logs.py \ -g $(SWARM_DIR)/git.log -o $(SWARM_DIR)/git.xml $(SWARMTOOL_DIR)/run.sh: @echo "I: Checking out codeswarm tool source code" @svn checkout http://codeswarm.googlecode.com/svn/trunk/ $(SWARMTOOL_DIR) upload-codeswarm: codeswarm rsync -rzhvp --delete --chmod=Dg+s,g+rw,o+r $(SWARM_DIR)/*.flv $(WWW_UPLOAD_URI)/files/ # # Trailer # .PHONY: fetch-data deb-src orig-src pylint apidoc pdfdoc htmldoc doc manual \ all profile website fetch-data-misc upload-website \ test testsuite testmanual testapiref testexamples testrefactor \ testcfg testourcfg \ unittest unittest-debug unittest-optimization unittest-nonlabile \ unittest-badexternals unittests \ distclean debian-clean check-nodirty check-debian check-debian-version \ handbook codeswarm upload-codeswarm coverage pics pymvpa2-2.2.0/Makefile.win000066400000000000000000000022041202542755000153450ustar00rootroot00000000000000# Makefile to build PyMVPA under Windows using a standard Python # distribution and MinGW # # Adjust this path to match the version and location of your Python # installation PYTHON_VERSION=2.6 PYTHON_PATH=C:\\Python26 # # Building # all: build configure-inplace-use # build included 3rd party pieces (if present) 3rd: 3rd-stamp 3rd-stamp: cd 3rd\libsvm & $(MAKE) -f Makefile.win build: 3rd # build pymvpa extensions including libsvm set PYTHON_INCLUDE="$(PYTHON_PATH)\\include" \ & python setup.py build_ext installer: 3rd build # now build the installer python setup.py bdist_wininst --bitmap doc\source\pics\logo.bmp configure-inplace-use: copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libsmlrc\\smlrc.pyd \ mvpa\\clfs\\libsmlrc copy build\\lib.win32-$(PYTHON_VERSION)\\mvpa\\clfs\\libsvmc\\_svmc.pyd \ mvpa\\clfs\\libsvmc # # Cleaning # clean: -rmdir /S /Q build -del /S *.a *.o *.gch *.pyd # # Testing # ut-%: build configure-inplace-use @set PYTHONPATH=$(CURDIR) & cd tests & python test_$*.py unittest: build configure-inplace-use @set PYTHONPATH=$(CURDIR) & cd tests & python main.py # # Trailer # .PHONY: all pymvpa2-2.2.0/README000066400000000000000000000003651202542755000137770ustar00rootroot00000000000000This is PyMVPA -- Multivariate Pattern Analysis in Python. For information how to install PyMVPA please see doc/installation.rst. Further information and access to binary packages is available from the project website at http://www.pymvpa.org pymvpa2-2.2.0/TODO000066400000000000000000000011271202542755000136040ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 79 -*- .. ex: set tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_todo: .. index:: todo ********* ToDo-List ********* * OptimizedClassifier: to automatically select the model in an easy and non-biased(i.e. non-cheating) way, so it could become a part of any more advanced pipeline as a regular classifier * IPython mode pymvpa2-2.2.0/bin/000077500000000000000000000000001202542755000136635ustar00rootroot00000000000000pymvpa2-2.2.0/bin/pymvpa2-analysis000077500000000000000000000401711202542755000170330ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Script to run most common analysis scenarios (e.g. cross-validation, searchlights) """ # Import minimal needed amount to get process going so we could # QUICKLY parse and verify command line arguments import glob import mvpa2 from mvpa2.base import * from mvpa2.misc.cmdline import * import time from os.path import exists, join as joinpath def parse_cmdline(): parser.usage = """ %s [options] [] where targets+blocks is a text file that lists the class label and the associated block of each data sample/volume as a tuple of two integer values (separated by a single space). -- one tuple per line.""" \ % sys.argv[0] opts.add('preproc', [opt.targets_sa, opt.chunks_sa, opt.baseline_conditions, opt.zscore, opt.exclude_conditions, opt.include_conditions, opt.mean_group_sample, #opt.tr, #opt.detrend, ], "Preprocessing options") parser.option_groups = [opts.SVM, opts.KNN, opts.general, opts.preproc, opts.common] # Set a set of available classifiers for this example opt.clf.choices=['gnb', 'm1nn', 'knn', 'lin_nu_svmc', 'svm', 'lin_C_svmc', 'rbf_nu_svmc'] opt.clf.default='gnb' # Fast # TODO: Need to be grouped nicely parser.add_options([ opt.clf, ## Will deduce automagically ## Option("--attrfile-has-header", ## action="store_true", dest="attrfile_has_header", ## help="Provided attributes file carries header in the " ## "first line. All attributes will become .sa's"), Option("--analysis", type="choice", dest="analysis", default='preprocess', choices=['crossvalidation', 'searchlight', 'preprocess'], help="Type of analysis to perform on data"), # TODO # - mask for searchlight ids if not full brain mask is desired to be analyzed Option("--dataset-summary", action="store_true", dest="print_dataset_summary", help="Print dataset summary after preprocessing"), Option("--log-output", action="store_true", dest="log_output", help="Log output into a file. Mention that only 'verbose' " "messages generated by the script are logged, not stderr " "or other Python output"), Option("--generic-searchlight", action="store_true", dest="use_generic_searchlight", help="For GNB and M1NN ad-hoc efficient searchlight " "implementations are used by default. This option " "would enforce use of a generic searchlight"), Option("--cache-filename", action="store", dest="cache_filename", help="Filename to store generated dataset and reload it if " " present instead of loading from original volumes and" " preprocessing"), ]) (options, files) = parser.parse_args() return files, options # more logical order def get_files(filename_pattern): return sorted(glob.glob(filename_pattern)) def validate_options(files, options): """Let's verify provided options and do some basic checks So we could fail earlier than later """ # Let's spit out all errors at once -- it is annoying to redo bad_options_msgs = [] if options.baseline_conditions: if len(options.baseline_conditions) > 1: bad_options_msgs.append( "--baseline-conditions must list only a single condition") if options.include_conditions and options.exclude_conditions: bad_options_msgs.append( "Specify either --exclude-conditions OR --include-conditions" " NOT BOTH") if not len(files) in [3, 4]: bad_options_msgs.append("Please provide 3 or 4 files in the command line") else: # Quickly check provided files for obvious problems, # e.g. different dimensionality try: import nibabel as nib nis = [nib.load(f).get_header() for f in get_files(files[0]) + [files[2]]] except Exception, e: bad_options_msgs.append( "Failed to open input volumes. Error was: %s" % e) else: shapes = [ni.get_data_shape() for ni in nis] # First one should have at least the same # of dimensions #if shapes[1] # TODO if bad_options_msgs: sys.stderr.write("There were errors in options specification:" + '\n E: '.join([''] + bad_options_msgs) + '\n') raise SystemExit(1) # assure all "files" specs present # # Or may be we should just enforce suffix? besides simple # classification there would be no use case where printing to the # screen would be the desired output format if len(files) < 4: files.append("") # so output prefix was not specified def run_analysis(files, options): # Finally import the rest of the suite verbose(1, "Importing PyMVPA v. %s suite" % mvpa2.__version__) import numpy as np import mvpa2.suite as mv verbose(1, "Loading data") verbose(3, "Files: %s" % '\n '.join([''] +files)) verbose(2, "Analysis options: %s" % options) # data filename dfile = files[0] # text file with targets and block definitions (chunks) cfile = files[1] # mask volume filename mfile = files[2] # output prefix (if was defined) ofile = files[3] if options.cache_filename and exists(options.cache_filename): verbose(2, "Reloading data from %s" % options.cache_filename) data = mv.h5load(options.cache_filename) else: # read conditions into an array (assumed to be two columns of integers) # TODO: We need some generic helper to read conditions stored in some # common formats verbose(2, "Reading conditions from file %s" % cfile) if len(open(cfile).readline().split()) > 2: verbose(3, "Detected more than 3 columns, assuming present header") attrs = mv.ColumnData(cfile, header=True) else: attrs = mv.SampleAttributes(cfile, literallabels=True) # dfile could be a glob pattern dfiles = get_files(dfile) # sorted(glob.glob(dfile)) verbose(2, "Loading %d volume files %s" % (len(dfiles), ', '.join(dfiles))) data = mv.fmri_dataset(dfiles, targets=attrs.targets, chunks=attrs.chunks, mask=mfile) # Assign possible additional attributes if len(attrs) > 2: for k, v in attrs.iteritems(): if not k in data.sa: data.sa[k] = v verbose(1, "Preprocessing") # First z-score since baseline condition might be removed # later on in exclude/include_conditions handling if options.zscore: verbose(2, "Zscoring data samples") if len(options.baseline_conditions): # it should have only 1 as checked above param_est = options.baseline_conditions[0] else: param_est = None # TODO: verify if enforcing dtype here is needed/desired mv.zscore(data, chunks_attr=options.chunks_sa, param_est=param_est, dtype='float32') # Exclude or keep only some conditions if requested # TODO: this is like we used to have 'select()' -- so we just # need to move this functionality back and replace here # with 1,2 lines if options.exclude_conditions or options.include_conditions: # resultant mask matching specified conditions for # inclusion or exclusion bmask = np.ones(len(data), dtype=bool) include = False if options.include_conditions: conditions_ = options.include_conditions include = True # well we had a check that not both specified but never # hurts to double check. # # TODO: think may be we should allow both with first # treating includes and then excludes, e.g. include # face/house but exclude chunks > 5 if options.exclude_conditions: if include: raise RuntimeError("Somehow our cmdline args check failed " "and we got both exclude and include " "conditions here where it shouldn't " "happen") conditions_ = options.exclude_conditions # we should get an overlap between those specified by # multiple .sa's # So per each sa we collect union and then intersect it for sa, values in conditions_: bmask_sa = np.zeros(len(data), dtype=bool) sa_type = data.sa[sa].value.dtype.type for v in values: # converting data types of v here to match the one # as stored in ds.sa[sa] since from cmdline everything is # a string bmask_v = data.sa[sa].value == sa_type(v) if not np.sum(bmask_v): verbose(1, "Listed value %r was not found in .sa.%s" % (v, sa)) continue bmask_sa |= bmask_v bmask &= bmask_sa if include: verbose(2, "Including %d samples matching the include_conditions=%s" % (np.sum(bmask), options.include_conditions)) data = data[bmask] else: verbose(2, "Excluding %d samples matching the exclude_conditions=%s" % (np.sum(bmask), options.exclude_conditions)) data = data[~bmask] if options.mean_group_sample: mgs_args = (options.chunks_sa, options.targets_sa) verbose(2, "Computing mean sample per each %s/%s" % mgs_args) # TODO: verify if enforcing dtype here is needed/desired data = data.get_mapped(mv.mean_group_sample(mgs_args)) if options.cache_filename: verbose(2, "Storing dataset into %s" % options.cache_filename) mv.h5save(options.cache_filename, data) pass if verbose.level > 2 or options.print_dataset_summary: verbose(1, data.summary()) if options.analysis == 'preprocess': # We are done return verbose(1, "Creating analysis pipeline") # TODO: may be we just need --clf-expr which gets evaluated # and thus would be the most flexible and may be even # simplest way to specify arbitrary classifier # TODO: cmdline for other types partitioner = mv.NFoldPartitioner(cvtype=options.crossfolddegree) # Choice of the learner if options.clf == 'm1nn': # TODO: options for parameters clf = mv.kNN(1) # M1NN() elif options.clf == 'gnb': # TODO: options for parameters clf = mv.GNB() elif options.clf == 'knn': clf = mv.kNN(k=options.knearestdegree) elif options.clf == 'lin_nu_svmc': clf = mv.LinearNuSVMC(nu=options.svm_nu) elif options.clf in ['lin_C_svmc', 'svm']: clf = mv.LinearCSVMC(C=options.svm_C) elif options.clf == 'rbf_nu_svmc': clf = mv.RbfNuSVMC(nu=options.svm_nu) else: raise ValueError, 'Unknown classifier type: %s' % `options.clf` if options.targets_sa != 'targets': verbose(3, "Assigning space=%r for %s to operate on" % (options.targets_sa, clf)) clf.space = options.targets_sa verbose(2, "Using '%s' classifier" % options.clf) verbose(3, "Assigning a measure to be CrossValidation") # compute N-1 cross-validation with the selected classifier in # each sphere cv = mv.CrossValidation(clf, partitioner) # # Define the final measure to estimate # if options.analysis == 'searchlight': # Keyword arguments for the Searchlights slkwargs = dict( #TODO roi_ids=center_ids, #TODO nproc=8, #TODO errorfx=mean_mismatch_error #TODO enable_ca=['null_t'] etc ) if not options.use_generic_searchlight \ and options.clf in ['gnb', 'm1nn']: # There might be an ad-hoc fast one # Using explicit if instead of more concise dictionary # lookup (commented out) since M1NNSearchlight might not # be yet available #SearchlightClass = \ # {'gnb': mv.GNBSearchlight, # 'm1nn': mv.M1NNSearchlight}[options.clf] if options.clf == 'gnb': SearchlightClass = mv.GNBSearchlight else: # must tbe m1nn since above have only 2 choices SearchlightClass = mv.M1NNSearchlight # They require partitioner to be specified slargs = (clf, partitioner) #TODO slkwargs.update({}) else: SearchlightClass = mv.Searchlight # We just need to provide the measure, in this case cv slargs = (cv,) #TODO slkwargs.update({}) pass # Add the query engine # TODO: handle ER datasets slargs = slargs + ( mv.IndexQueryEngine(voxel_indices=mv.Sphere(options.radius)),) verbose(3, "Generating a Searchlight instance") # contruct searchlight with 5mm radius # this assumes that the spatial pixdim values in the source NIfTI file # are specified in mm measure = SearchlightClass(*slargs, **slkwargs) elif options.analysis == 'crossvalidation': measure = cv else: raise ValueError("Unknown type of analysis %s" % options.analysis) # # Finally run # verbose(1, "Estimating the measure on loaded data") verbose(2, "Measure: %r" % measure) t0 = time.time() results = measure(data) results.a['proccessing_time'] = time.time() - t0 if not ofile is None: verbose(1, "Storing results using prefix %r" % ofile) print np.histogram(results.samples) # We could "always" save to HDF5, which also would assure # that we have output directory mv.h5save(ofile + 'results.hdf5', results, mkdir=True) # TODO: some might not be mapped to Nifti that easily # map the result vector back into a nifti image rimg = mv.map2nifti(data, results) # save to file rimg.to_filename(ofile + 'results.nii.gz') else: verbose(1, "Results:\n%r" % results) def main(files=None, options=None): """ Wrapped into a function call for easy profiling later on """ # If files or options were not specified if files is None or options is None: files, options = parse_cmdline() elif files or options: raise ValueError("Please specify both files and options, " "or none of them, so they are parsed from " "the command line") validate_options(files, options) # If output prefix was specified -- lets place verbose output into # the logfile as well if options.log_output: logfile = files[3] + '%s.log' \ % time.strftime('%Y%m%d:%H%M', time.localtime(time.time())) verbose(2, "Logging to %s" % logfile) verbose.handlers = [ sys.stdout, open(logfile, 'a') ] run_analysis(files, options) if __name__ == "__main__": main() pymvpa2-2.2.0/bin/pymvpa2-atlaslabeler000077500000000000000000000747601202542755000176560ustar00rootroot00000000000000#!/usr/bin/python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Script to provide anatomical labels for the voxels, or their statistics """ import re, sys, os import mvpa2 from mvpa2.misc.cmdline import parser, opts, opt from mvpa2.base import verbose, warning, externals if externals.exists('nibabel', raise_=True): import nibabel as nb if __debug__: from mvpa2.base import debug from mvpa2.atlases.transformation import * from mvpa2.atlases import Atlas, ReferencesAtlas, FSLProbabilisticAtlas, \ KNOWN_ATLASES, KNOWN_ATLAS_FAMILIES, XMLAtlasException from optparse import OptionParser, Option import numpy as np #import numpy.linalg as la # to read in transformation matrix try: import psyco psyco.profile() except: pass def select_from_volume_iterator(volFileName, lt=None, ut=None): """ Generator which returns value + coordinates with values of non-0 entries from the `volFileName` Returns ------- tuple with 0th entry value, the others are voxel coordinates More effective than previous loopy iteration since uses numpy's where function, but for now is limited only to non-0 voxels selection """ try: volFile = nb.load(volFileName) except: raise IOError("Cannot open image file %s" % volFileName) volData = volFile.get_data() voxdim = volFile.get_header().get_zooms()[:3] if lt is None and ut is None: mask = volData != 0.0 elif lt is None and ut is not None: mask = volData <= ut elif lt is not None and ut is None: mask = volData >= lt else: mask = np.logical_and(volData >= lt, volData <= ut) matchingVoxels = np.where(mask) for e in zip(volData[matchingVoxels], *matchingVoxels): e_ = tuple(e) if len(e_) < 5: e_ = e_ + (0,) # add time=0 yield e_ def parsed_coordinates_iterator( parseString="^\s*(?P\S+)[ \t,](?P\S+)[ \t,](?P\S+)\s*$", inputStream=sys.stdin, ctype=float, dtype=float): """Iterator to provide coordinates/values parsed from the string stream, most often from the stdin """ parser = re.compile(parseString) for line in inputStream.readlines(): line = line.strip() match = parser.match(line) if not match: if __debug__: debug('ATL', "Line '%s' did not match '%s'" % (line, parseString)) else: r = match.groupdict() if r.has_key('v'): v = dtype(r['v']) else: v = 0.0 if r.has_key('t'): t = dtype(r['t']) else: t = 0.0 yield (v, ctype(r['x']), ctype(r['y']), ctype(r['z']), t) # XXX helper to process labels... move me ##REF: Name was automagically refactored def present_labels(labels): if isinstance(labels, list): res = [] for label in labels: # XXX warning -- some inconsistencies in atlas.py # need refactoring s = label['label'] #.text if label.has_key('prob') and not options.createSummary: s += "(%d%%%%)" % label['prob'] res += [s] if res == []: res = ['None'] return '/'.join(res) else: if options.abbreviatedLabels: return labels['label'].abbr else: return labels['label'].text #def processCmdLine(): parser.usage = """%(cmd)s [OPTIONS] [input_file.nii.gz] Examples: > %(cmd)s -s -A talairach-dist -d 10 -R Closest\ Gray -l Structure,Brodmann\ area -cC mask.nii.gz produces a summary per each structure and brodmann area, for each voxel looking within 10mm radius for the closest gray matter voxel. Simpler, more reliable, and faster usage is by providing a corresponding atlas volume image registered to the volume at hands, e.g.: > %(cmd)s -f MNI-prob-bold.nii.gz -A MNI -s mask_vt.nii.gz > %(cmd)s -f HarvardOxford-cort-prob-bold.nii.gz -A HarvardOxford-Cortical -s mask_vt.nii.gz would provide summary over the MNI (or HarvardOxford-Cortical) atlas, .nii.gz of which were previously flirted (or fnirted) into the space of mask_vt.nii.gz and provided in '-f' argument.""" \ % {'cmd': os.path.basename(sys.argv[0])} parser.version = "%prog " + mvpa2.__version__ # can't use due to conflict with -d (debug and distance) #parser.option_groups = [opts.common] parser.add_option(opt.verbose) parser.add_option(opt.help) parser.add_option("-a", "--atlas-file", action="store", type="string", dest="atlasFile", default=None, help="Atlas file to use. Overrides --atlas-path and --atlas") parser.add_option("--atlas-path", action="store", type="string", dest="atlasPath", default=None, help=r"Path to the atlas files. '%(name)s' will be replaced" " with the atlas name. See -A. Defaults depend on the" " atlas family.") parser.add_option("-A", "--atlas", action="store", type="choice", dest="atlasName", default="talairach", choices=KNOWN_ATLASES.keys(), help="Atlas to use. Choices: %s" % ', '.join(KNOWN_ATLASES.keys())) parser.add_option("-f", "--atlas-image-file", action="store", type="string", dest="atlasImageFile", default=None, help=r"Path to the data image for the corresponding atlas. " " Can be used to override default image if it was " " already resliced into a corresponding space (e.g." " subject)") parser.add_option("-i", "--input-coordinates-file", action="store", type="string", dest="inputCoordFile", default=None, help="Fetch coordinates from ASCII file") parser.add_option("-o", "--output-file", action="store", type="string", dest="outputFile", default=None, help="Output file. Otherwise standard output") parser.add_option("-d", "--max-distance", action="store", type="float", dest="maxDistance", default=0, help="When working with reference/distance atlases, what" " maximal distance to use to look for the voxel of interest") parser.add_option("-T", "--transformation-file", type="string", dest="transformationFile", help="First transformation to apply to the data. Usually"+ " should be subject -> standard(MNI) transformation") parser.add_option("-s", "--summary", action="count", dest="createSummary", default=0, help="Either to create a summary instead of dumping voxels." " Use multiple -s for greater verbose summary") parser.add_option("--ss", "--sort-summary-by", type="choice", dest="sortSummaryBy", default="name", choices=['name', 'count', 'a-p'], help="How to sort summary entries. " " a-p sorts anterior-posterior order") parser.add_option("--dumpmap-file", action="store", dest="dumpmapFile", default=None, help="If original data is given as image file, dump indexes" " per each treholded voxels into provided here output file") parser.add_option("-l", "--levels", type="string", dest="levels", default=None, help="Indexes of levels which to print, or based on which " "to create a summary (for a summary levels=4 is default). " "To get listing of known for the atlas levels, use '-l list'") parser.add_option("--mni2tal", type="choice", choices=["matthewbrett", "lancaster07fsl", "lancaster07pooled", "meyerlindenberg98"], dest="MNI2TalTransformation", default="matthewbrett", help="Choose between available transformations from mni " "2 talairach space") parser.add_option("--thr", "--lthr", "--lower-threshold", action="store", type="float", dest="lowerThreshold", default=None, help="Lower threshold for voxels to output") parser.add_option("--uthr", "--upper-threshold", action="store", type="float", dest="upperThreshold", default=None, help="Upper threshold for voxels to output") parser.add_option("--count-thr", "--cthr", action="store", type=int, dest="countThreshold", default=1, help="Lowest number of voxels for area to be reported in summary") parser.add_option("--count-pthr", "--pthr", action="store", type=float, dest="countPercentThreshold", default=0.00001, help="Lowest percentage of voxels within an area to be reported in summary") parser.add_option("--suppress-none", "--sn", action="store_true", dest="suppressNone", help="Suppress reporting of voxels which found no labels (reported as None)") parser.add_option("--abbr", "--abbreviated-labels", action="store_true", dest="abbreviatedLabels", help="Manipulate with abbreviations for labels instead of" " full names, if the atlas has such") # Parameters to be inline with older talairachlabel parser.add_option("-c", "--tc", "--show-target-coord", action="store_true", dest="showTargetCoordinates", help="Show target coordinates") parser.add_option("--tv", "--show-target-voxel", action="store_true", dest="showTargetVoxel", help="Show target coordinates") parser.add_option("--rc", "--show-referenced-coord", action="store_true", dest="showReferencedCoordinates", help="Show referenced coordinates/distance in case if we are" " working with reference atlas") parser.add_option("-C", "--oc", "--show-orig-coord", action="store_true", dest="showOriginalCoordinates", help="Show original coordinates") parser.add_option("-V", "--show-values", action="store_true", dest="showValues", help="Show values") parser.add_option("-I", "--input-space", action="store", type="string", dest="inputSpace", default="MNI", help="Space in which input volume/coordinates provided in. For instance Talairach/MNI") parser.add_option("-F", "--forbid-direct-mapping", action="store_true", dest="forbidDirectMapping", default=False, help="If volume is provided it first tries to do direct " "mapping voxel-2-voxel if there is no transformation file " "given. This option forbids such behavior and does " "coordinates mapping anyway.") parser.add_option("-t", "--talairach", action="store_true", dest="coordInTalairachSpace", default=False, help="Coordinates are in talairach space (1x1x1mm)," + " otherwise assumes in mni space (2x2x2mm)." " Shortcut for '-I Talairach'") parser.add_option("-H", "--half-voxel-correction", action="store_true", dest="halfVoxelCorrection", default=False, help="Adjust coord by 0.5mm after transformation to " "Tal space.") parser.add_option("-r", "--relative-to-origin", action="store_true", dest="coordRelativeToOrigin", help="Coords are relative to the origin standard form" + " ie in spatial units (mm), otherwise the default assumes" + " raw voxel dimensions") parser.add_option("--input-line-format", action="store", type="string", dest="inputLineFormat", default=r"^\s*(?P\S+)[ \t,]+(?P\S+)[ \t,]+(?P\S+)\s*$", help="Format of the input lines (if ASCII input is provided)") parser.add_option("--iv", "--input-voxels", action="store_true", dest="input_voxels", default=False, help="Input lines carry voxel indices (int), not coordinates.") # Specific atlas options # TODO : group into options groups # Reference atlas parser.add_option("-R", "--reference", action="store", type="string", dest="referenceLevel", default="Closest Gray", help="Which level to reference in the case of reference" " atlas") # Probabilistic atlases parser.add_option("--prob-thr", action="store", type="float", dest="probThr", default=25.0, help="At what probability (in %) to threshold in " "probabilistic atlases (e.g. FSL)") parser.add_option("--prob-strategy", action="store", type="choice", dest="probStrategy", choices=['all', 'max'], default='max', help="What strategy to use for reporting. 'max' would report" " single area (above threshold) with maximal probabilitity") (options, infiles) = parser.parse_args() #atlas.relativeToOrigin = options.coordRelativeToOrigin if len(infiles)>1: print "We cannot handle multiple input files at once" sys.exit(1) fileIn = None coordT = None niftiInput = None # define data type for coordinates if options.input_voxels: ctype = int query_voxel = True else: ctype = float query_voxel = False # Setup coordinates read-in volQForm = None # # compatibility with older talairachlabel if options.inputCoordFile: fileIn = open(options.inputCoordFile) coordsIterator = parsed_coordinates_iterator( options.inputLineFormat, fileIn, ctype=ctype) # input is stdin elif len(infiles)==0: coordsIterator = parsed_coordinates_iterator( options.inputLineFormat, ctype=ctype) else: if len(infiles)>1: print "Just a single file should be provided at the command line" sys.exit(1) infile = infiles[0] # got a volume/file to process if __debug__: debug('ATL', "Testing if 0th element in the list a volume") niftiInput = None try: niftiInput = nb.load(infile) if __debug__: debug('ATL', "Yes it is") except Exception, e: if __debug__: debug('ATL', "No it is not due to %s. Trying to parse the file" % e) if niftiInput: # if we got here -- it is a proper volume # XXX ask Michael to remove nasty warning message coordsIterator = select_from_volume_iterator( infile, options.lowerThreshold, options.upperThreshold) assert(coordT is None) coordT = Linear(niftiInput.get_header().get_qform()) # lets store volumeQForm for possible conversion of voxels into coordinates volQForm = coordT # previous iterator returns space coordinates options.coordRelativeToOrigin = True else: fileIn = open(infile) coordsIterator = parsed_coordinates_iterator( options.inputLineFormat, fileIn, ctype=ctype) # Open and initialize atlas lookup if options.atlasFile is None: if options.atlasPath is None: options.atlasPath = KNOWN_ATLASES[options.atlasName] options.atlasFile = options.atlasPath % ( {'name': options.atlasName} ) akwargs_common = {} if options.atlasImageFile: akwargs_common['image_file'] = options.atlasImageFile if not options.forbidDirectMapping \ and niftiInput is not None and not options.transformationFile: akwargs = {'resolution': niftiInput.get_header().get_zooms()[0]} query_voxel = True # if we can query directly by voxel, do so akwargs.update(akwargs_common) verbose(1, "Will attempt direct mapping from input voxels into atlas " "voxels at resolution %.2f" % akwargs['resolution']) atlas = Atlas(options.atlasFile, **akwargs) # verify that we got the same qforms in atlas and in the data file if atlas.space != options.inputSpace: verbose(0, "Cannot do direct mapping between input image in %s space and" " atlas in %s space. Use -I switch to override input space if" " it misspecified, or use -T to provide transformation. Trying" " to proceed" %(options.inputSpace, atlas.space)) query_voxel = False elif not (niftiInput.get_header().get_qform() == atlas._image.get_header().get_qform()).all(): if options.atlasImageFile is None: warning( "Cannot do direct mapping between files with different qforms." " Please provide original transformation (-T)." "\n Input qform:\n%s\n Atlas qform: \n%s" %(niftiInput.get_header().get_qform(), atlas._image.get_header().get_qform), 1) # reset ability to query by voxels query_voxel = False else: warning( "QForms are different between input image and " "provided atlas image." "\n Input qform of %s:\n%s\n Atlas qform of %s:\n%s" %(infile, niftiInput.get_header().get_qform(), options.atlasImageFile, atlas._image.get_header().get_qform()), 1) else: coordT = None else: atlas = Atlas(options.atlasFile, **akwargs_common) if isinstance(atlas, ReferencesAtlas): options.referenceLevel = options.referenceLevel.replace('/', ' ') atlas.set_reference_level(options.referenceLevel) atlas.distance = options.maxDistance else: options.showReferencedCoordinates = False if isinstance(atlas, FSLProbabilisticAtlas): atlas.strategy = options.probStrategy atlas.thr = options.probThr ## If not in Talairach -- in MNI with voxel size 2x2x2 # Original talairachlabel assumed that if respective to origin -- voxels were # scaled already. #if options.coordInTalairachSpace: # voxelSizeOriginal = np.array([1, 1, 1]) #else: # voxelSizeOriginal = np.array([2, 2, 2]) if options.coordInTalairachSpace: options.inputSpace = "Talairach" if not (options.inputSpace == atlas.space or (options.inputSpace in ["MNI", "Talairach"] and atlas.space == "Talairach")): raise XMLAtlasException("Unknown space '%s' which is not the same as atlas" "space '%s' either" % ( inputSpace, atlas.space )) if query_voxel: # we do direct mapping coordT = None else: verbose(2, "Chaining needed transformations") # by default -- no transformation if options.transformationFile: externals.exists('scipy', raise_=True) from scipy.io import read_array transfMatrix = read_array(options.transformationFile) coordT = Linear(transfMatrix, previous=coordT) verbose(2, "coordT got linear transformation from file %s" % options.transformationFile) voxelOriginOriginal = None voxelSizeOriginal = None if not options.coordRelativeToOrigin: if options.inputSpace == "Talairach": # assume that atlas is in Talairach space already voxelOriginOriginal = atlas.origin voxelSizeOriginal = np.array([1, 1, 1]) elif options.inputSpace == "MNI": # need to adjust for MNI origin as it was thought to be at # in terms of voxels #voxelOriginOriginal = np.array([46, 64, 37]) voxelOriginOriginal = np.array([45, 63, 36]) voxelSizeOriginal = np.array([2.0, 2.0, 2.0]) warning("Assuming elderly sizes for MNI volumes with" " origin %s and sizes %s" %\ ( `voxelOriginOriginal`, `voxelSizeOriginal`)) if not (voxelOriginOriginal is None and voxelSizeOriginal is None): verbose(2, "Assigning origin adjusting transformation with"+\ " origin=%s and voxelSize=%s" %\ ( `voxelOriginOriginal`, `voxelSizeOriginal`)) coordT = SpaceTransformation(origin=voxelOriginOriginal, voxelSize=voxelSizeOriginal, to_real_space=True, previous=coordT) # besides adjusting for different origin we need to transform into # Talairach space if options.inputSpace == "MNI" and atlas.space == "Talairach": verbose(2, "Assigning transformation %s" % options.MNI2TalTransformation) # What transformation to use coordT = {"matthewbrett": MNI2Tal_MatthewBrett, "lancaster07fsl": mni_to_tal_lancaster07_fsl, "lancaster07pooled": mni_to_tal_lancaster07pooled, "meyerlindenberg98": mni_to_tal_meyer_lindenberg98, "yohflirt": mni_to_tal_yohflirt }\ [options.MNI2TalTransformation](previous=coordT) if options.inputSpace == "MNI" and options.halfVoxelCorrection: originCorrection = np.array([0.5, 0.5, 0.5]) else: # perform transformation any way to convert to voxel space (integers) originCorrection = None # To be closer to what original talairachlabel did -- add 0.5 to each coord coordT = SpaceTransformation(origin=originCorrection, voxelSize=None, to_real_space=False, previous = coordT) if options.createSummary: summary = {} if options.levels is None: options.levels = str(min(4, atlas.nlevels-1)) if options.levels is None: options.levels = range(atlas.nlevels) elif isinstance(options.levels, basestring): if options.levels == 'list': print "Known levels and their indicies:\n" + atlas.levels_listing() sys.exit(0) slevels = options.levels.split(',') options.levels = [] for level in slevels: try: int_level = int(level) except: if atlas.levels.has_key(level): int_level = atlas.levels[level].index else: raise RuntimeError( "Unknown level '%s'. " % level + "Known levels and their indicies:\n" + atlas.levels_listing()) options.levels += [int_level] else: raise ValueError("Don't know how to handle list of levels %s." "Example is '1,2,3'" % (options.levels,)) verbose(3, "Operating on following levels: %s" % options.levels) # assign levels to the atlas atlas.default_levels = options.levels if options.outputFile: output = open(options.outputFile, 'w') else: output = sys.stdout # validity check if options.dumpmapFile: if niftiInput is None: raise RuntimeError, "You asked to dump indexes into the volume, " \ "but input wasn't a volume" sys.exit(1) ni_dump = nb.load(infile) ni_dump_data = np.zeros(ni_dump.get_header().get_data_shape()[:3] + (len(options.levels),)) # Also check if we have provided voxels but not querying by voxels if options.input_voxels: if coordT is not None: raise NotImplementedError, \ "Cannot perform voxels querying having coordT defined" if not query_voxel: raise NotImplementedError, \ "query_voxel was reset to False, can't do queries by voxel" # Read coordinates numVoxels = 0 for c in coordsIterator: value, coord_orig, t = c[0], c[1:4], c[4] if __debug__: debug('ATL', "Obtained coord_orig=%s with value %s" % (repr(coord_orig), value)) lt, ut = options.lowerThreshold, options.upperThreshold if lt is not None and value < lt: verbose(5, "Value %s is less than lower threshold %s, thus voxel " "is skipped" % (value, options.lowerThreshold)) continue if ut is not None and value > ut: verbose(5, "Value %s is greater than upper threshold %s, thus voxel " "is skipped" % (value, options.upperThreshold)) continue numVoxels += 1 # Apply necessary transformations coord = coord_orig = np.array(coord_orig) if coordT: coord = coordT[ coord_orig ] # Query label if query_voxel: voxel = atlas[coord] else: voxel = atlas(coord) voxel['coord_orig'] = coord_orig voxel['value'] = value voxel['t'] = t if options.createSummary: summaryIndex = "" voxel_labels = voxel["labels"] for i,ind in enumerate(options.levels): voxel_label = voxel_labels[i] text = present_labels(voxel_label) #if len(voxel_label): # assert(voxel_label['index'] == ind) summaryIndex += text + " / " if not summary.has_key(summaryIndex): summary[summaryIndex] = {'values':[], 'max':value, 'maxcoord':coord_orig} if voxel.has_key('voxel_referenced'): summary[summaryIndex]['distances'] = [] summary_ = summary[summaryIndex] summary_['values'].append(value) if summary_['max'] < value: summary_['max'] = value summary_['maxcoord'] = coord_orig if voxel.has_key('voxel_referenced'): if voxel['voxel_referenced'] and voxel['distance']>=1e-3: verbose(5, 'Appending distance %e for voxel at %s' % (voxel['distance'], voxel['coord_orig'])) summary_['distances'].append(voxel['distance']) else: # Display while reading/processing first, out = True, "" if options.showValues: out += "%(value)5.2f " if options.showOriginalCoordinates: out += "%(coord_orig)s ->" if options.showReferencedCoordinates: out += " %(voxel_referenced)s=>%(distance).2f=>%(voxel_queried)s ->" if options.showTargetCoordinates: out += " %(coord_queried)s: " #out += "(%d,%d,%d): " % tuple(map(lambda x:int(round(x)),coord)) if options.showTargetVoxel: out += " %(voxel_queried)s ->" if options.levels is None: options.levels = range(len(voxel['labels'])) labels = [present_labels(voxel['labels'][i]) for i in options.levels] out += ','.join(labels) #if options.abbreviatedLabels: # out += ','.join([l.abbr for l in labels]) #else: # out += ','.join([l.text for l in labels]) #try: output.write(out % voxel + "\n") #except: # import pydb # pydb.debugger() if options.dumpmapFile: try: ni_dump_data[coord_orig[0], coord_orig[1], coord_orig[2]] = \ [voxel['labels'][i]['label'].index for i,ind in enumerate(options.levels)] except Exception, e: import pydb pydb.debugger() # if we opened any file -- close it if fileIn: fileIn.close() if options.dumpmapFile: ni_dump = nb.Nifti1Image(ni_dump_data, None, ni_dump.get_header()) ni_dump.to_filename(options.dumpmapFile) def statistics(values): N_ = len(values) if N_==0: return 0, None, None, None, None, "" mean = np.mean(values) std = np.std(values) minv = np.min(values) maxv = np.max(values) ssummary = "[%3.2f : %3.2f] %3.2f+-%3.2f" % (minv, maxv, mean, std) return N_, mean, std, minv, maxv, ssummary ##REF: Name was automagically refactored def get_summary(summary, output): """Output the summary """ # Sort either by the name (then ascending) or by the number of # elements (then descending) sort_keys = [(k, len(v['values']), v['maxcoord'][1]) for k,v in summary.iteritems()] sort_index, sort_reverse = { 'name' : (0, False), 'count': (1, True), 'a-p': (2, True)}[options.sortSummaryBy] sort_keys.sort(cmp=lambda x,y: cmp(x[sort_index], y[sort_index]), reverse=sort_reverse) # and here are the keys keys = [x[0] for x in sort_keys] maxkeylength = max (map(len, keys)) # may be I should have simply made a counter ;-) total = sum(map(lambda x:len(x['values']), summary.values())) count_reported = 0 for index in keys: if index.rstrip(' /') == 'None' and options.suppressNone: continue summary_ = summary[index] values = summary_['values'] N, mean, std, minv, maxv, ssummary = statistics(values) Npercent = 100.0*N/total if N < options.countThreshold \ or Npercent < options.countPercentThreshold: continue count_reported += N msg = "%%%ds:" % maxkeylength output.write(msg % index) output.write("%4d/%4.1f%% items" \ % (N, Npercent)) if options.createSummary>1: output.write(" %s" % ssummary) if options.createSummary>2: output.write(" max at %s" % summary_['maxcoord']) if options.showOriginalCoordinates and volQForm: #import pydb #pydb.debugger() #coord = np.dot(volQForm, summary_['maxcoord']+[1])[:3] coord = volQForm[summary_['maxcoord']] output.write(" %r" % (tuple(coord),)) if options.createSummary>3 and summary_.has_key('distances'): # if we got statistics over referenced voxels Nr, mean, std, minv, maxv, ssummary = \ statistics(summary_['distances']) Nr = len(summary_['distances']) # print "N=", N, " Nr=", Nr output.write(" Referenced: %d/%d%% Distances: %s" \ % (Nr, int(Nr*100.0 / N), \ ssummary)) output.write("\n") # output might fail to flush, like in the case with broken pipe # -- imho that is not a big deal, ie not worth scaring the user try: output.flush() except IOError: pass output.write("-----\n") output.write("TOTAL: %d items" % count_reported) if total != count_reported: output.write(" (out of %i, %i were excluded)" % (total, total-count_reported)) output.write("\n") if options.createSummary: if numVoxels == 0: verbose(1, "No matching voxels were found.") else: get_summary(summary, output) if options.outputFile: output.close() pymvpa2-2.2.0/bin/pymvpa2-prep-fmri000077500000000000000000000174311202542755000171140ustar00rootroot00000000000000#!/usr/bin/python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Tiny tool to prepare a directory for a typical analysis of fMRI data with PyMVPA. Tools from the FSL suite will be used for preprocessing. It takes a 4D fMRI timeseries as input and performs the following steps: - extract an example volume - perform motion correction using the example volume as reference - conservative skull-stripping and brain mask generation - masking of the motion-corrected timeseries with the brain mask All results will be stored either in the current directory, or in a subdirectory with the subject ID (if specified).""" import sys import os from subprocess import call # Import mvpa2 first so it could augment matplotlib backend if necessary import mvpa2 import numpy as np from mvpa2.base import verbose, externals, error from mvpa2.misc.cmdline import parser, opt from mvpa2.misc.fsl import McFlirtParams if __debug__: from mvpa2.base import debug _EXFUNC_CONV_DICT = {'last' : lambda x: x-1, 'first': lambda x: 0, 'middle': lambda x: int(x/2)} """Dictionary to get exemplar volume given a literal string""" ##REF: Name was automagically refactored def prep_parser(parser): # use module docstring for help output parser.usage = "%s [OPTIONS] \n\n" % sys.argv[0] + __doc__ parser.version = "%prog " + mvpa2.__version__ parser.add_option(opt.verbose) parser.add_option(opt.help) parser.add_option("-s", "--subject-id", action="store", type="string", dest="subj", default=None, help="Subject ID used as output path") parser.add_option("-e", "--example-func-vol", action="store", type="string", dest="exfunc", default='middle', help="Volume (numeric ID or 'last', 'first', 'middle') " "to be used as an example functional image. " "Default: 10") parser.add_option("-m", "--mcflirt-options", action="store", type="string", dest="mcflirt_opts", default='', help="Options for MCFLIRT. '-plots' is auto-added ") parser.add_option("-p", "--mcflirt-plots", action="store_true", dest="mcflirt_plots", help="Create a .pdf with plots of motion parameters") parser.add_option("-b", "--bet-options", action="store", type="string", dest="bet_opts", default='-f 0.3', help="Options for BET. '-m' is auto-added. " "Default: '-f 0.3' for a safe guess of the brain " "outline") def main(): """ """ prep_parser(parser) (options, infiles) = parser.parse_args() # late import of pynifti to be able to get help output without a big # external dep. externals.exists('nibabel', raise_=True) import nibabel as nb if len(infiles) > 1 or not len(infiles): error("%s needs exactly one input fMRI image as argument. " "Got %s" % (sys.argv[0], str(infiles))) func_fname = infiles[0] # compressed or uncompressed? decide by input image # XXX maybe add override option if func_fname.lower().endswith('nii.gz'): nii_ext = '.nii.gz' verbose(2, "Output files will be compressed NIfTI images") else: nii_ext = '.nii' verbose(2, "Output files will be uncompressed NIfTI images") # determine output path if not options.subj is None: opath = options.subj else: opath = os.path.curdir if not os.path.exists(opath): verbose(1, "Create output directory '%s'" % opath) os.makedirs(opath) else: verbose(2, "Using output path '%s'" % opath) verbose(2, "Load image file from '%s'" % func_fname) func_nim = nb.load(func_fname) func_nim_hdr = func_nim.get_header() func_nim_data = func_nim.get_data() func_nim_shape = func_nim_data.shape # process exfunc option exfunc = options.exfunc.lower() timepoints = len(func_nim_shape) > 3 and func_nim_shape[3] or 1 if exfunc in _EXFUNC_CONV_DICT.keys(): exfuncid = _EXFUNC_CONV_DICT[exfunc](timepoints) else: try: exfuncid = int(exfunc) except ValueError, e: error("Failed to convert '%s' into numerical id of " "volume." % (exfunc)) if exfuncid >= timepoints or exfuncid < 0: error("Example functional volume id must be in the " "range 0 .. %d. Got %d." % (timepoints-1, exfuncid)) verbose(2, "Extract volume %i as example volume" % exfuncid) ef_nim = nb.Nifti1Image(func_nim_data[..., exfuncid], None, func_nim_hdr) ef_nim.to_filename(os.path.join(opath, 'example_func' + nii_ext)) # close input file -- will operate on motion-corrected one later on del func_nim, func_nim_data, func_nim_hdr mcflirt_call = \ ' '.join( ['mcflirt', '-in ' + func_fname, '-out ' + os.path.join(opath, 'func_mc'), '-reffile ' + os.path.join(opath, 'example_func'), '-verbose 0', '-plots', options.mcflirt_opts]).strip() verbose(2, "Perform motion correction ('%s')" % mcflirt_call) # run MCFLIRT (silence stderr; 5 being some random file descriptor) if call(mcflirt_call, shell=True, stderr=None): error("MCFLIRT failed to perform the motion correction.") if options.mcflirt_plots: verbose(2, "Plot motion parameters estimates") externals.exists('pylab', raise_=True) import pylab as pl mc = McFlirtParams(os.path.join(opath, 'func_mc.par')) for k, (title, fields, ylabel) in enumerate( (('Translation', ('x', 'y', 'z'), 'mm'), ('Rotation', ('rot1', 'rot2', 'rot3'), 'radians'))): pl.subplot(211+k) pl.title(title) pl.plot([0, timepoints], [0, 0], '0.6') for dim in fields: pl.plot(mc[dim], label=dim) pl.legend() pl.axis('tight') pl.ylabel(ylabel) pl.gcf().savefig(os.path.join(opath, 'func_mc.pdf')) bet_call = \ ' '.join( ['bet', os.path.join(opath, 'example_func'), os.path.join(opath, 'example_func_brain'), '-m', options.bet_opts]).strip() verbose(2, "Determine brain mask in functional space ('%s')" % bet_call) # run BET (silence stderr; 5 being some random file descriptor) if call(bet_call, shell=True, stderr=None): error("BET failed to perform the skull stripping.") verbose(2, "Threshold image background using brain mask") mask_nim = nb.load(os.path.join(opath, 'example_func_brain_mask' + nii_ext)) mask_nim_data = mask_nim.get_data() func_nim_filename = os.path.join(opath, 'func_mc' + nii_ext) func_nim = nb.load(func_nim_filename) func_nim_data = func_nim.get_data() # special case: single slice mask #if len(mask_nim_data.shape) < 3: # func_nim_data[:, np.asarray([mask_nim.data]) == 0] = 0 #else: # I think with xyzt ordering we don't really need special handling func_nim_data[mask_nim_data == 0] = 0 # yoh: NO I don't like (or just don't know how) nibabel API ;) nb.Nifti1Image( func_nim_data, None, func_nim.get_header()).to_filename(func_nim_filename) if __name__ == '__main__': main() pymvpa2-2.2.0/bin/pymvpa2-tutorial000077500000000000000000000141411202542755000170510ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Script to start a PyMVPA tutorial session""" import sys import os import shutil import glob import getopt import subprocess import signal import mvpa2 from mvpa2.misc.support import SmartVersion def getandkillopt(opt): for i, arg in enumerate(sys.argv[1:]): if arg.startswith(opt): if opt.endswith('='): val = '='.join(sys.argv[i + 1].split('=')[1:]) else: val = True del sys.argv[i + 1] return val return False def print_help(): print """ Usage: %s [options] [ipython options] Wrapper around the IPython executable creating a session directory for working with the PyMVPA tutorial. The necessary tutorial data is copied (or symlinked, if possible) into the session directory. If the tutorial shall run in IPython's notebook the relevant notebook files are copied into the session directory as well. Any additional options are passed on to IPython. IPython is executed in the tutorial session directory, and any potential relative path configurations (such as PYTHONPATH) need to take this into account. Options: --help print this help and exit --version show program's version number and exit --use-qtconsole start an IPython qtconsole --use-notebook start an IPython notebook server --workdir path to the tutorial session directory. Default: $HOME/pymvpa2_tutorial --clean-workdir delete tutorial session data on exit --overwrite-notebook overwrite existing notebook files in the tutorial session directory --tutorial-data-path path to the tutorial data (need to contain 'data' and 'results' directories) --tutorial-notebooks-path path to the tutorial notebooks """ % sys.argv[0] def get_latest_ipython(ipythons=['ipython01x', 'ipython']): """Choose the latest available ipython according to -V """ avail = [] for ipython in ipythons: try: p = subprocess.Popen([ipython, '-V'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) l = p.stdout.read().split('\n') l = [x for x in l if len(x)] # strip empty lines if len(l): ver = SmartVersion(l[-1]) avail.append((ver, ipython)) except OSError: pass avail = sorted(avail) if len(avail): return avail[-1] else: return None, None def main(): if getandkillopt('--version'): print mvpa2.__version__ sys.exit(0) if getandkillopt('--help'): print_help() sys.exit(0) want_qtconsole = getandkillopt('--use-qtconsole') want_notebook = getandkillopt('--use-notebook') want_clean = getandkillopt('--clean-workdir') want_overwrite_notebooks = getandkillopt('--overwrite-notebooks') workdir = getandkillopt('--workdir=') if workdir is False: # TODO create tmpdir workdir=os.path.expanduser('~/pymvpa2_tutorial') if not os.path.exists(workdir): os.makedirs(workdir) tutorial_datadir = getandkillopt('--tutorial-data-path=') if tutorial_datadir is False: tutorial_datadir = '/usr/share/data/pymvpa2-tutorial' notebook_srcdir = getandkillopt('--tutorial-notebooks-path=') if notebook_srcdir is False: notebook_srcdir = '/usr/share/doc/python-mvpa2/notebooks' # assemble session dir for dir in ('data', 'results'): src = os.path.join(os.path.abspath(tutorial_datadir), dir) dst = os.path.join(os.path.abspath(workdir), dir) if os.path.lexists(dst): print "Use existing tutorial '%s' path at '%s'." \ % (dir, dst) continue if not os.path.exists(src): print "Cannot find tutorial data at '%s'" % src sys.exit(1) if hasattr(os, 'symlink'): os.symlink(src, dst) else: shutil.copytree(src, dst) ipy_args = sys.argv[1:] ipy_args.append('--quiet') if not sum([arg.startswith('--pylab') for arg in ipy_args]): # user might want something like --pylab=inline ipy_args.append('--pylab') if want_notebook: ipy_args.insert(0, 'notebook') elif want_qtconsole: ipy_args.insert(0, 'qtconsole') if want_notebook: notebook_dstdir = workdir ipy_args.append('--notebook-dir=%s' % notebook_dstdir) if not os.path.exists(notebook_dstdir): os.makedirs(notebook_dstdir) notebook_files = glob.glob(os.path.join(notebook_srcdir, '*.ipynb')) if not len(notebook_files): print "Beware: no notebooks found under %s" % notebook_srcdir for nb in notebook_files: nb_dst_filepath = os.path.join(notebook_dstdir, os.path.basename(nb)) if not os.path.exists(nb_dst_filepath) or want_overwrite_notebooks: shutil.copyfile(nb, nb_dst_filepath) else: print "Keep existing notebook at '%s'" % nb_dst_filepath ipython_ver, ipython = get_latest_ipython() if ipython_ver is None: raise SystemExit("No reasonably versioned IPython was found") if ipython_ver < '0.12' and want_notebook: raise SystemExit( "ERROR: no notebook facilities are available in IPython prior " \ "version 0.12. Detected version of IPython on the system %s " \ "by %s" % (ipython_ver.vstring, ipython)) try: ipy = subprocess.Popen([ipython] + ipy_args, cwd=workdir) ipy.wait() except KeyboardInterrupt: ipy.terminate() if want_clean: shutil.rmtree(workdir) if __name__ == '__main__': main() pymvpa2-2.2.0/doc/000077500000000000000000000000001202542755000136605ustar00rootroot00000000000000pymvpa2-2.2.0/doc/Makefile000066400000000000000000000076001202542755000153230ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. PYTHON = python SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR) source/generated source/examples -rm generate-stamp SPHINXEXT_PATH=$(shell python -c 'import sphinx; from distutils.version import LooseVersion; print LooseVersion(sphinx.__version__) < "1.1.2" and "sphinxext" or "/usr/share/pyshared/sphinx/ext"') #SPHINXEXT_PATH=sphinxext generate: generate-stamp generate-stamp: mkdir -p $(BUILDDIR) @MVPA_EXTERNALS_RAISE_EXCEPTION=off \ PYTHONPATH=$(CURDIR)/sphinxext:$(CURDIR)/..:$(PYTHONPATH) \ $(PYTHON) $(SPHINXEXT_PATH)/autosummary/generate.py \ -t $(CURDIR)/templates -o source/generated source/*.rst # wipe everything that is not pymvpa to prevent suffering from the bugs # of other in subsequent stages find source/generated -type f ! -name 'mvpa*' -delete @touch $@ html: generate $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: generate $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." pickle: generate $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: generate $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: generate $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: generate $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyMVPA.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyMVPA.qhc" latex: generate $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ "run these through (pdf)latex." changes: generate $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: generate $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: generate $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." pymvpa2-2.2.0/doc/examples/000077500000000000000000000000001202542755000154765ustar00rootroot00000000000000pymvpa2-2.2.0/doc/examples/cachedkernel.py000077500000000000000000000074021202542755000204660ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Efficient cross-validation using a cached kernel ================================================ .. index:: Cross-validation This is a simple example showing how to use cached kernel with a SVM classifier from the Shogun library. Pre-caching of the kernel for all samples in dataset eliminates necessity of possibly lengthy recomputation of the same kernel values on different splits of the data. Depending on the data it might provide considerable speed-ups. """ from mvpa2.suite import * from time import time """The next few calls load an fMRI dataset and do basic preprocessing.""" # load PyMVPA example dataset attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes_literal.txt')) dataset = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) # do chunkswise linear detrending on dataset poly_detrend(dataset, polyord=1, chunks_attr='chunks') # zscore dataset relative to baseline ('rest') mean zscore(dataset, chunks_attr='chunks', param_est=('targets', ['rest'])) """Cached kernel is just a proxy around an existing kernel.""" # setup a cached kernel kernel_plain = LinearSGKernel(normalizer_cls=False) kernel = CachedKernel(kernel_plain) """Lets setup two cross-validation, where first would use cached kernel, whenever the later one plain kernel to demonstrate the speed-up and achievement of exactly the same results""" # setup a classifier and cross-validation procedure clf = sg.SVM(svm_impl='libsvm', C=-1.0, kernel=kernel) cv = CrossValidation(clf, NFoldPartitioner()) # setup exactly the same using a plain kernel for demonstration of # speedup and equivalence of the results clf_plain = sg.SVM(svm_impl='libsvm', C=-1.0, kernel=kernel_plain) cv_plain = CrossValidation(clf_plain, NFoldPartitioner()) """Although it would be done internally by cached kernel during initial computation, it is advisable to make initialization of origids for samples explicit. It would prepare dataset by cleaning up attributes used by cached kernel possibly on another version of the same dataset prior to this analysis in real use cases.""" dataset.init_origids(which='samples') """Cached kernel needs to be computed given the full dataset which would later on be used during cross-validation. """ # compute kernel for the dataset t0 = time() kernel.compute(dataset) t_caching = time() - t0 """Lets run both cross-validation procedures using plain and cached kernels and report the results.""" # run cached cross-validation t0 = time() error = np.mean(cv(dataset)) t_cached = time() - t0 # run plain SVM cross-validation for validation and benchmarking t0 = time() error_plain = np.mean(cv_plain(dataset)) t_plain = time() - t0 # UC: unique chunks, UT: unique targets print "Results for %i-fold cross-validation on %i-class problem:" \ % (len(dataset.UC), len(dataset.UT)) print " plain kernel: error=%.3f computed in %.2f sec" \ % (error_plain, t_plain) print " cached kernel: error=%.3f computed in %.2f sec (cached in %.2f sec)" \ % (error, t_cached, t_caching) """The following is output from running this example:: Results for 12-fold cross-validation on 9-class problem: plain kernel: error=0.273 computed in 35.82 sec cached kernel: error=0.273 computed in 6.50 sec (cached in 3.68 sec) """ pymvpa2-2.2.0/doc/examples/clfs_examples.py000077500000000000000000000110561202542755000207030ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Classifier Sweep ================ This examples shows a test of various classifiers on different datasets. """ from mvpa2.suite import * # no MVPA warnings during this example warning.handlers = [] def main(): # fix seed or set to None for new each time np.random.seed(44) # Load Haxby dataset example attrs = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes_literal.txt')) haxby8 = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attrs.targets, chunks=attrs.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) haxby8.samples = haxby8.samples.astype(np.float32) # preprocess slightly poly_detrend(haxby8, chunks_attr='chunks', polyord=1) zscore(haxby8, chunks_attr='chunks', param_est=('targets', 'rest')) haxby8_no0 = haxby8[haxby8.targets != 'rest'] dummy2 = normal_feature_dataset(perlabel=30, nlabels=2, nfeatures=100, nchunks=6, nonbogus_features=[11, 10], snr=3.0) for (dataset, datasetdescr), clfs_ in \ [ ((dummy2, "Dummy 2-class univariate with 2 useful features out of 100"), clfswh[:]), ((pure_multivariate_signal(8, 3), "Dummy XOR-pattern"), clfswh['non-linear']), ((haxby8_no0, "Haxby 8-cat subject 1"), clfswh['multiclass']), ]: # XXX put back whenever there is summary() again #print "%s\n %s" % (datasetdescr, dataset.summary(idhash=False)) print " Classifier on %s\n" \ " : %%corr " \ "#features\t train predict full" % datasetdescr for clf in clfs_: print " %-40s: " % clf.descr, # Let's prevent failures of the entire script if some particular # classifier is not appropriate for the data try: # Change to False if you want to use CrossValidation # helper, instead of going through splits manually to # track training/prediction time of the classifiers do_explicit_splitting = True if not do_explicit_splitting: cv = CrossValidation( clf, NFoldPartitioner(), enable_ca=['stats', 'calling_time']) error = cv(dataset) # print cv.ca.stats print "%5.1f%% - \t - - %.2fs" \ % (cv.ca.stats.percent_correct, cv.ca.calling_time) continue # To report transfer error (and possibly some other metrics) confusion = ConfusionMatrix() times = [] nf = [] t0 = time.time() #TODO clf.ca.enable('nfeatures') partitioner = NFoldPartitioner() for nfold, ds in enumerate(partitioner.generate(dataset)): (training_ds, validation_ds) = tuple( Splitter(attr=partitioner.space).generate(ds)) clf.train(training_ds) #TODO nf.append(clf.ca.nfeatures) predictions = clf.predict(validation_ds.samples) confusion.add(validation_ds.targets, predictions) times.append([clf.ca.training_time, clf.ca.predicting_time]) tfull = time.time() - t0 times = np.mean(times, axis=0) #TODO nf = np.mean(nf) # print confusion #TODO print "%5.1f%% %-4d\t %.2fs %.2fs %.2fs" % \ print "%5.1f%% - \t %.2fs %.2fs %.2fs" % \ (confusion.percent_correct, times[0], times[1], tfull) #TODO (confusion.percent_correct, nf, times[0], times[1], tfull) except LearnerError, e: print " skipped due to '%s'" % e if __name__ == "__main__": main() pymvpa2-2.2.0/doc/examples/curvefitting.py000077500000000000000000000103701202542755000205650ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Curve-Fitting ============= Here we are going to take a look at a few examples of fitting a function to data. The first example shows how to fit an HRF model to noisy peristimulus time-series data. First, importing the necessary pieces: """ import numpy as np from scipy.stats import norm from mvpa2.support.pylab import pl from mvpa2.misc.plot import plot_err_line, plot_bars from mvpa2.misc.fx import * from mvpa2 import cfg """ BOLD-Response parameters ------------------------ Let's generate some noisy "trial time courses" from a simple gamma function (40 samples, 6s time-to-peak, 7s FWHM and no additional scaling: """ a = np.asarray([single_gamma_hrf(np.arange(20), A=6, W=7, K=1)] * 40) # get closer to reality with noise a += np.random.normal(size=a.shape) """ Fitting a gamma function to this data is easy (using resonable seeds for the parameter search (5s time-to-peak, 5s FWHM, and no scaling): """ fpar, succ = least_sq_fit(single_gamma_hrf, [5,5,1], a) """ With these parameters we can compute high-resultion curves for the estimated time course, and plot it together with the "true" time course, and the data: """ x = np.linspace(0,20) curves = [(x, single_gamma_hrf(x, 6, 7, 1)), (x, single_gamma_hrf(x, *fpar))] # plot data (with error bars) and both curves plot_err_line(a, curves=curves, linestyle='-') # add legend to plot pl.legend(('original', 'fit')) pl.title('True and estimated BOLD response') """ .. image:: ../pics/ex_curvefitting_bold.* :align: center :alt: BOLD response fitting example Searchlight accuracy distributions ---------------------------------- When doing a searchlight analysis one might have the idea that the resulting accuracies are actually sampled from two distributions: one causes by an actual signal source and the chance distribution. Let's assume the these two distributions can be approximated by a Gaussian, and take a look at a toy example, how we could explore the data. First, we generate us a few searchlight accuracy maps that might have been computed in the folds of a cross-validation procedure. We generate the data from two normal distributions. The majority of datapoints comes from the chance distribution that is centered at 0.5. A fraction of the data is samples from the "signal" distribution located around 0.75. """ nfolds = 10 raw_data = np.vstack([np.concatenate((np.random.normal(0.5, 0.08, 10000), np.random.normal(0.75, 0.05, 500))) for i in range(nfolds)]) """ Now we bin the data into one histogram per fold and fit a dual Gaussian (the sum of two Gaussians) to the total of 10 histograms. """ histfit = fit2histogram(raw_data, dual_gaussian, (1000, 0.5, 0.1, 1000, 0.8, 0.05), nbins=20) H, bin_left, bin_width, fit = histfit """ All that is left to do is composing a figure -- showing the accuracy histogram and its variation across folds, as well as the two estimated Gaussians. """ # new figure pl.figure() # Gaussian parameters params = fit[0] # plot the histogram plot_bars(H.T, xloc=bin_left, width=bin_width, yerr='std') # show the Gaussians x = np.linspace(0, 1, 100) # first gaussian pl.plot(x, params[0] * norm.pdf(x, params[1], params[2]), "r-", zorder=2) pl.axvline(params[1], color='r', linestyle='--', alpha=0.6) # second gaussian pl.plot(x, params[3] * norm.pdf(x, params[4], params[5]), "b-", zorder=3) pl.axvline(params[4], color='b', linestyle='--', alpha=0.6) # dual gaussian pl.plot(x, dual_gaussian(x, *params), "k--", alpha=0.5, zorder=1) pl.xlim(0, 1) pl.ylim(ymin=0) pl.title('Dual Gaussian fit of searchlight accuracies') if cfg.getboolean('examples', 'interactive', True): # show the cool figures pl.show() """ And this is how it looks like. .. image:: ../pics/ex_curvefitting_searchlight.* :align: center :alt: Dual Gaussian fit of searchlight accuracies """ pymvpa2-2.2.0/doc/examples/erp_plot.py000077500000000000000000000051771202542755000177110ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ ERP/ERF-Plots ============= Example demonstrating an ERP-style plots. Actually, this code can be used to plot various time-locked data types. This example uses MEG data and therefore generates an ERF-plot. """ from mvpa2.suite import * # load data meg = TuebingenMEG(os.path.join(pymvpa_dataroot, 'tueb_meg.dat.gz')) # Define plots for easy feeding into plot_erp plots = [] colors = ['r', 'b', 'g'] # figure out pre-stimulus onset interval t0 = -meg.timepoints[0] plots = [ {'label' : meg.channelids[i], 'color' : colors[i], 'data' : meg.data[:, i, :]} for i in xrange(len(meg.channelids)) ] # Common arguments for all plots cargs = { 'SR' : meg.samplingrate, 'pre_onset' : t0, # Plot only 50ms before and 100ms after the onset since we have # just few trials 'pre' : 0.05, 'post' : 0.1, # Plot all 'errors' in different degrees of shadings 'errtype' : ['ste', 'ci95', 'std'], # Set to None if legend manages to obscure the plot 'legend' : 'best', 'alinewidth' : 1 # assume that we like thin lines } # Create a new figure fig = pl.figure(figsize=(12, 8)) # Following plots are plotted inverted (negative up) for the # demonstration of this capability and elderly convention for ERP # plots. That is controlled with ymult (negative gives negative up) # Plot MEG sensors # frame_on=False guarantees abent outside rectangular axis with # labels. plot_erp recreates its own axes centered at (0,0) ax = fig.add_subplot(2, 1, 1, frame_on=False) plot_erps(plots[:2], ylabel='$pT$', ymult=-1e12, ax=ax, **cargs) # Plot EEG sensor ax = fig.add_subplot(2, 1, 2, frame_on=False) plot_erps(plots[2:3], ax=ax, ymult=-1e6, **cargs) # Additional example: plotting a single ERP on an existing plot # without drawing axis: # # plot_erp(data=meg.data[:, 0, :], SR=meg.samplingrate, pre=pre, # pre_mean=pre, errtype=errtype, ymult=-1.0) if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ The ouput of the provided example is presented below. It is not a very fascinating one due to the limited number of samples provided in the dataset shipped within the toolbox. .. image:: ../pics/ex_erp_plot.* :align: center :alt: ERP plot example """ pymvpa2-2.2.0/doc/examples/eventrelated.py000077500000000000000000000203611202542755000205370ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Spatio-temporal Analysis of event-related fMRI data =================================================== .. index:: event-related fMRI In this example we are going to take a look at an event-related analysis of timeseries data. We will do this on fMRI data, implementing a spatio-temporal analysis of multi-volume samples. It starts as usual by loading PyMVPA and the fMRI dataset. """ from mvpa2.suite import * ds = load_datadb_tutorial_data(roi=(36,38,39,40)) """ The dataset we have just loaded is the full timeseries of voxels in the ventral temporal cortex for 12 concatenated experiment runs. Although originally a block-design experiment, we'll analyze it in an event-related fashion, where each stimulation block will be considered as an individual event. For an event-related analysis most of the processing is done on data samples that are somehow derived from a set of events. The rest of the data could be considered irrelevant. However, some preprocessing is only meaningful when performed on the full timeseries and not on the segmented event samples. An example is the detrending that typically needs to be done on the original, continuous timeseries. In its current shape our dataset consists of 1452 samples that represent contiguous fMRI volumes. At this stage we can easily perform linear detrending. We are going to do it per each experiment run (the dataset has to runs encoded in the ``chunk`` sample attribute), since we do not assume a contiguous linear trend throughout the whole recording session. """ # detrend on full timeseries poly_detrend(ds, polyord=1, chunks_attr='chunks') """ Let's make a copy of the detrended dataset that we can later on use for some visualization. """ orig_ds = ds.copy() """ We still need to normalize each feature (i.e. a voxel at this point). In this case we are going to Z-score them, using the mean and standard deviation from the experiment's rest condition. The resulting values might be interpreted as "activation scores". We are again doing it per each run. """ zscore(ds, chunks_attr='chunks', param_est=('targets', 'rest')) """ After detrending and normalization, we can now segment the timeseries into a set of events. To achieve this we have to compile a list of event definitions first. In this example we will simply convert the block-design setup defined by the samples attributes into events, so that each stimulation block becomes an event with an associated onset and duration. The events are defined by a change in any of the provided attributes, hence we get an event for starting stimulation block and any start of a run in the experiment. """ events = find_events(targets=ds.sa.targets, chunks=ds.sa.chunks) """ ``events`` is a simple list of event definitions (each one being a dictionary) that can easily inspected for startpoints and duration of events. Later on we want to look at the sensitivity profile ranging from just before until a little after each block. Therefore we are slightly moving the event onsets prior the block start and request to extract a set of 13 consecutive volumes a as sample for each event. Finally, in this example we are only interested in `face` or `house` blocks. """ # filter out events events = [ev for ev in events if ev['targets'] in ['house', 'face']] # modify event start and set uniform duration for ev in events: ev['onset'] -= 2 ev['duration'] = 13 """ Now we get to the core of an event-related analysis. We turn our existing timeseries datasets into one with samples of timeseries segments. PyMVPA offers :func:`~mvpa2.datasets.eventrelated.eventrelated_dataset()` to perform this conversion -- given a list of events and a dataset with samples that are sorted by time. If a dataset has information about acquisition time :func:`~mvpa2.datasets.eventrelated.eventrelated_dataset()` can also convert event-definition in real time. """ evds = eventrelated_dataset(ds, events=events) """ Now we have our final dataset with spatio-temporal fMRI samples. Look at the attributes of the dataset to see what information is available about each event. The rest is pretty much standard. We want to perform a cross-validation analysis of a SVM classifier. We are not primarily interested in its performance, but in the weights it assigns to the features. Remember, each feature is now voxel-timepoint, so we get a chance of looking at the spatio-temporal profile of classification relevant information in the data. We will nevertheless enable computing a confusion matrix, so we can assure ourselves that the classifier is performing reasonably well, since only a generalizing classifier model is worth inspecting, as otherwise the assigned weights are meaningless. """ clf = LinearCSVMC() sclf = SplitClassifier(clf, enable_ca=['confusion']) # Compute sensitivity, which internally trains the classifier analyzer = sclf.get_sensitivity_analyzer() sensitivities = analyzer(evds) """ Now let's look at the confusion matrix -- it turns out that the classifier performs excellent. """ print sclf.ca.confusion """ We could now convert the computed sensitivities back into a 4D fMRI image to look at the spatio-temporal sensitivity profile using the datasets mapper. However, in this example we are going to plot it for two example voxels and compare it to the actual signal timecourse prior and after normalization. """ # example voxel coordinates example_voxels = [(28,25,25), (28,23,25)] """ First we plot the orginal signal after initial detrending. To do this, we apply the timeseries segmentation to the original detrended dataset and plot to mean signal for all face and house events for both of our example voxels. """ vx_lty = ['-', '--'] t_col = ['b', 'r'] pl.subplot(311) for i, v in enumerate(example_voxels): slicer = np.array([tuple(idx) == v for idx in ds.fa.voxel_indices]) evds_detrend = eventrelated_dataset(orig_ds[:, slicer], events=events) for j, t in enumerate(evds.uniquetargets): pl.plot(np.mean(evds_detrend[evds_detrend.sa.targets == t], axis=0), t_col[j] + vx_lty[i], label='Voxel %i: %s' % (i, t)) pl.ylabel('Detrended signal') pl.axhline(linestyle='--', color='0.6') pl.legend() """ In the next step we do exactly the same again, but this time for the normalized data. """ pl.subplot(312) for i, v in enumerate(example_voxels): slicer = np.array([tuple(idx) == v for idx in ds.fa.voxel_indices]) evds_norm = eventrelated_dataset(ds[:, slicer], events=events) for j, t in enumerate(evds.uniquetargets): pl.plot(np.mean(evds_norm[evds_norm.sa.targets == t], axis=0), t_col[j] + vx_lty[i]) pl.ylabel('Normalized signal') pl.axhline(linestyle='--', color='0.6') """ Finally, we plot the associated SVM weight profile for each peristimulus timepoint of both voxels. For easier selection we do a little trick and reverse-map the sensitivity profile through the last mapper in the dataset's chain mapper (look at ``evds.a.mapper`` for the whole chain). This will reshape the sensitivities into ``cross-validation fold x volume x voxel features``. """ pl.subplot(313) smaps = evds.a.mapper[-1].reverse(sensitivities) for i, v in enumerate(example_voxels): slicer = np.array([tuple(idx) == v for idx in ds.fa.voxel_indices]) smap = smaps.samples[:,:,slicer].squeeze() plot_err_line(smap, fmt='ko', linestyle=vx_lty[i]) pl.xlim((0,12)) pl.ylabel('Sensitivity') pl.axhline(linestyle='--', color='0.6') pl.xlabel('Peristimulus volumes') if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ .. figure:: ../pics/ex_eventrelated.* :align: center Sensitivity profile for two example voxels for *face* vs. *house* classification on event-related fMRI data from ventral temporal cortex. This demo showed an event-related data analysis. Although we have performed it on fMRI data, an analogous analysis can be done for any timeseries-based data in an almost identical fashion. """ pymvpa2-2.2.0/doc/examples/eyemovements.py000066400000000000000000000214241202542755000205730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Analysis of eye movement patterns ================================= In this example we are going to look at a classification analysis of eye movement patterns. Although complex preprocessing steps can be performed to extract higher-order features from the raw coordinate timeseries provided by an eye-tracker, we are keeping it simple. Right after importing the PyMVPA suite, we load the data from a textfile. It contains coordinate timeseries of 144 trials (recorded with 350 Hz), where subjects either looked at upright or inverted images of human faces. Each timeseries snippet covers 3 seconds. This data has been pre-processed to remove eyeblink artefacts. In addition to the coordinates we also load trial attributes from a second textfile. These attributes indicate which image was shown, whether it was showing a male or female face, and wether it was upright or inverted. """ from mvpa2.suite import * # where is the data datapath = os.path.join(pymvpa_datadbroot, 'face_inversion_demo', 'face_inversion_demo') # (X, Y, trial id) for all timepoints data = np.loadtxt(os.path.join(datapath, 'gaze_coords.txt')) # (orientation, gender, image id) for each trial attribs = np.loadtxt(os.path.join(datapath, 'trial_attrs.txt')) """ As a first step we put the coordinate timeseries into a dataset, and labels each timepoint with its associated trial ID. We also label the two features accordingly. """ raw_ds = Dataset(data[:,:2], sa = {'trial': data[:,2]}, fa = {'fid': ['rawX', 'rawY']}) """ The second step is down-sampling the data to about 33 Hz, resampling each trial timeseries individually (using the trial ID attribute to define dataset chunks). """ ds = fft_resample(raw_ds, 100, window='hann', chunks_attr='trial', attr_strategy='sample') """ Now we can use a :class:`~mvpa2.mappers.boxcar.BoxcarMapper` to turn each trial-timeseries into an individual sample. We know that each sample consists of 100 timepoints. After the dataset is mapped we can add all per-trial attributes into the sample attribute collection. """ bm = BoxcarMapper(np.arange(len(ds.sa['trial'].unique)) * 100, boxlength=100) bm.train(ds) ds=ds.get_mapped(bm) ds.sa.update({'orient': attribs[:,0].astype(int), 'gender': attribs[:,1].astype(int), 'img_id': attribs[:,1].astype(int)}) """ In comparison with upright faces, inverted ones had prominent features at very different locations on the screen. Most notably, the eyes were flipped to the bottom half. To prevent the classifier from using such differences, we flip the Y-coordinates for trials with inverted to align the with the upright condition. """ ds.samples[ds.sa.orient == 1, :, 1] = \ -1 * (ds.samples[ds.sa.orient == 1, :, 1] - 512) + 512 """ The current dataset has 100 two-dimensional features, the X and Y coordinate for each of the hundred timepoints. We use a :class:`~mvpa2.mappers.flatten.FlattenMapper` to convert each sample into a one-dimensionl vector (of length 200). However, we also keep the original dataset, because it will allow us to perform some plotting much easier. """ fm = FlattenMapper() fm.train(ds) # want to make a copy to keep the original pristine for later plotting fds = ds.copy().get_mapped(fm) # simplify the trial attribute fds.sa['trial'] = [t[0] for t in ds.sa.trial] """ The last steps of preprocessing are Z-scoring all features (coordinate-timepoints) and dividing the dataset into 8 chunks -- to simplify a cross-validation analysis. """ zscore(fds, chunks_attr=None) # for classification divide the data into chunks nchunks = 8 chunks = np.zeros(len(fds), dtype='int') for o in fds.sa['orient'].unique: chunks[fds.sa.orient == o] = np.arange(len(fds.sa.orient == o)) % nchunks fds.sa['chunks'] = chunks """ Now everything is set and we can proceed to the classification analysis. We are using a support vector machine that is going to be trained on the ``orient`` attribute, indicating trials with upright and inverted faces. We are going to perform the analysis with a :class:`~mvpa2.clfs.meta.SplitClassifier`, because we are also interested in the temporal sensitivity profile. That one is easily accessible via the corresponding sensitivity analyzer. """ clf = SVM(space='orient') mclf = SplitClassifier(clf, space='orient', enable_ca=['confusion']) sensana = mclf.get_sensitivity_analyzer() sens = sensana(fds) print mclf.ca.confusion """ The 8-fold cross-validation shows a trial-wise classification accuracy of over 80%. Now we can take a look at the sensitivity. We use the :class:`~mvpa2.mappers.flatten.FlattenMapper` that is stored in the dataset to unmangle X and Y coordinate vectors in the sensitivity array. """ # split mean sensitivities into X and Y coordinate parts by reversing through # the flatten mapper xy_sens = fds.a.mapper[-2].reverse(sens).samples """ Plotting the results -------------------- The analysis is done and we can compile a figure to visualize the results. After some inital preparations, we plot an example image of a face that was used in this experiment. We align the image coordinates with the original on-screen coordinates to match them to the gaze track, and overlay the image with the mean gaze track across all trials for each condition. """ # descriptive plots pl.figure() # original screen size was axes = ('x', 'y') screen_size = np.array((1280, 1024)) screen_center = screen_size / 2 colors = ('r','b') fig = 1 pl.subplot(2, 2, fig) pl.title('Mean Gaze Track') face_img = pl.imread(os.path.join(datapath, 'demo_face.png')) # determine the extend of the image in original screen coordinates # to match with gaze position orig_img_extent=(screen_center[0] - face_img.shape[1]/2, screen_center[0] + face_img.shape[1]/2, screen_center[1] + face_img.shape[0]/2, screen_center[1] - face_img.shape[0]/2) # show face image and put it with original pixel coordinates pl.imshow(face_img, extent=orig_img_extent, cmap=pl.cm.gray) pl.plot(np.mean(ds.samples[ds.sa.orient == 1,:,0], axis=0), np.mean(ds.samples[ds.sa.orient == 1,:,1], axis=0), colors[0], label='inverted') pl.plot(np.mean(ds.samples[ds.sa.orient == 2,:,0], axis=0), np.mean(ds.samples[ds.sa.orient == 2,:,1], axis=0), colors[1], label='upright') pl.axis(orig_img_extent) pl.legend() fig += 1 """ The next two subplot contain the gaze coordinate over the peri-stimulus time for both, X and Y axis respectively. """ pl.subplot(2, 2, fig) pl.title('Gaze Position X-Coordinate') plot_erp(ds.samples[ds.sa.orient == 1,:,1], pre=0, errtype = 'std', color=colors[0], SR=100./3.) plot_erp(ds.samples[ds.sa.orient == 2,:,1], pre=0, errtype = 'std', color=colors[1], SR=100./3.) pl.ylim(orig_img_extent[2:]) pl.xlabel('Peristimulus Time') fig += 1 pl.subplot(2, 2, fig) pl.title('Gaze Position Y-Coordinate') plot_erp(ds.samples[ds.sa.orient == 1,:,0], pre=0, errtype = 'std', color=colors[0], SR=100./3.) plot_erp(ds.samples[ds.sa.orient == 2,:,0], pre=0, errtype = 'std', color=colors[1], SR=100./3.) pl.ylim(orig_img_extent[:2]) pl.xlabel('Peristimulus Time') fig += 1 """ The last panel has the associated sensitivity profile for both coordinate axes. """ pl.subplot(2, 2, fig) pl.title('SVM-Sensitivity Profiles') lines = plot_err_line(xy_sens[..., 0], linestyle='-', fmt='ko', errtype='std') lines[0][0].set_label('X') lines = plot_err_line(xy_sens[..., 1], linestyle='-', fmt='go', errtype='std') lines[0][0].set_label('Y') pl.legend() pl.ylim((-0.1, 0.1)) pl.xlim(0,100) pl.axhline(y=0, color='0.6', ls='--') pl.xlabel('Timepoints') from mvpa2.base import cfg if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ The following figure is not exactly identical to the product of this code, but rather shows the result of a few minutes of beautifications in Inkscape_. .. _Inkscape: http://www.inkscape.org/ .. figure:: ../pics/ex_eyemovements.* :align: center Gaze track for viewing upright vs. inverted faces. The figure shows the mean gaze path for both conditions overlayed on an example face. The panels to the left and below show the X and Y coordinates over the trial timecourse (shaded aread corresponds to one standard deviation across all trials above and below the mean). The black curve depicts the associated temporal SVM weight profile for the classification of both conditions. """ pymvpa2-2.2.0/doc/examples/gpr.py000077500000000000000000000104021202542755000166400ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ The effect of different hyperparameters in GPR ============================================== .. index:: GPR The following example runs Gaussian Process Regression (GPR) on a simple 1D dataset using squared exponential (i.e., Gaussian or RBF) kernel and different hyperparameters. The resulting classifier solutions are finally visualized in a single figure. As usual we start by importing all of PyMVPA: """ # Lets use LaTeX for proper rendering of greek from matplotlib import rc rc('text', usetex=True) from mvpa2.suite import * """ The next lines build two datasets using one of PyMVPA's data generators. """ # Generate dataset for training: train_size = 40 F = 1 dataset = data_generators.sin_modulated(train_size, F) # Generate dataset for testing: test_size = 100 dataset_test = data_generators.sin_modulated(test_size, F, flat=True) """ The last configuration step is the definition of four sets of hyperparameters to be used for GPR. """ # Hyperparameters. Each row is [sigma_f, length_scale, sigma_noise] hyperparameters = np.array([[1.0, 0.2, 0.4], [1.0, 0.1, 0.1], [1.0, 1.0, 0.1], [1.0, 0.1, 1.0]]) """ The plotting of the final figure and the actually GPR runs are performed in a single loop. """ rows = 2 columns = 2 pl.figure(figsize=(12, 12)) for i in range(rows*columns): pl.subplot(rows, columns, i+1) regression = True logml = True data_train = dataset.samples label_train = dataset.sa.targets data_test = dataset_test.samples label_test = dataset_test.sa.targets """ The next lines configure a squared exponential kernel with the set of hyperparameters for the current subplot and assign the kernel to the GPR instance. """ sigma_f, length_scale, sigma_noise = hyperparameters[i, :] kse = SquaredExponentialKernel(length_scale=length_scale, sigma_f=sigma_f) g = GPR(kse, sigma_noise=sigma_noise) if not regression: g = RegressionAsClassifier(g) print g if regression: g.ca.enable("predicted_variances") if logml: g.ca.enable("log_marginal_likelihood") """ After training GPR the predictions are queried by passing the test dataset samples and accuracy measures are computed. """ g.train(dataset) prediction = g.predict(data_test) # print label_test # print prediction accuracy = None if regression: accuracy = np.sqrt(((prediction-label_test)**2).sum()/prediction.size) print "RMSE:", accuracy else: accuracy = (prediction.astype('l')==label_test.astype('l')).sum() \ / float(prediction.size) print "accuracy:", accuracy """ The remaining code simply plots both training and test datasets, as well as the GPR solutions. """ if F == 1: pl.title(r"$\sigma_f=%0.2f$, $length_s=%0.2f$, $\sigma_n=%0.2f$" \ % (sigma_f,length_scale,sigma_noise)) pl.plot(data_train, label_train, "ro", label="train") pl.plot(data_test, prediction, "b-", label="prediction") pl.plot(data_test, label_test, "g+", label="test") if regression: pl.plot(data_test, prediction - np.sqrt(g.ca.predicted_variances), "b--", label=None) pl.plot(data_test, prediction+np.sqrt(g.ca.predicted_variances), "b--", label=None) pl.text(0.5, -0.8, "$RMSE=%.3f$" %(accuracy)) pl.text(0.5, -0.95, "$LML=%.3f$" %(g.ca.log_marginal_likelihood)) else: pl.text(0.5, -0.8, "$accuracy=%s" % accuracy) pl.legend(loc='lower right') print "LML:", g.ca.log_marginal_likelihood if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() pymvpa2-2.2.0/doc/examples/gpr_model_selection0.py000077500000000000000000000061111202542755000221470ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Simple model selection: grid search for GPR =========================================== .. index:: GPR, model selection Run simple model selection (grid search over hyperparameters' space) of Gaussian Process Regression (GPR) on a simple 1D example. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.suite import * import pylab as pl # Generate train and test dataset: train_size = 40 test_size = 100 F = 1 dataset = data_generators.sin_modulated(train_size, F) dataset_test = data_generators.sin_modulated(test_size, F, flat=True) print "Looking for better hyperparameters: grid search" # definition of the search grid: sigma_noise_steps = np.linspace(0.1, 0.5, num=20) length_scale_steps = np.linspace(0.05, 0.6, num=20) # Evaluation of log maringal likelohood spanning the hyperparameters' grid: lml = np.zeros((len(sigma_noise_steps), len(length_scale_steps))) lml_best = -np.inf length_scale_best = 0.0 sigma_noise_best = 0.0 i = 0 for x in sigma_noise_steps: j = 0 for y in length_scale_steps: kse = SquaredExponentialKernel(length_scale=y) g = GPR(kse, sigma_noise=x) g.ca.enable("log_marginal_likelihood") g.train(dataset) lml[i, j] = g.ca.log_marginal_likelihood if lml[i, j] > lml_best: lml_best = lml[i, j] length_scale_best = y sigma_noise_best = x # print x,y,lml_best pass j += 1 pass i += 1 pass # Log marginal likelihood contour plot: pl.figure() X = np.repeat(sigma_noise_steps[:, np.newaxis], sigma_noise_steps.size, axis=1) Y = np.repeat(length_scale_steps[np.newaxis, :], length_scale_steps.size, axis=0) step = (lml.max()-lml.min())/30 pl.contour(X, Y, lml, np.arange(lml.min(), lml.max()+step, step), colors='k') pl.plot([sigma_noise_best], [length_scale_best], "k+", markeredgewidth=2, markersize=8) pl.xlabel("noise standard deviation") pl.ylabel("characteristic length_scale") pl.title("log marginal likelihood") pl.axis("tight") print "lml_best", lml_best print "sigma_noise_best", sigma_noise_best print "length_scale_best", length_scale_best print "number of expected upcrossing on the unitary intervale:", \ 1.0/(2*np.pi*length_scale_best) # TODO: reincarnate by providing a function within gpr.py # # Plot predicted values using best hyperparameters: # pl.figure() # compute_prediction(1.0, length_scale_best, sigma_noise_best, True, dataset, # dataset_test.samples, dataset_test.targets, F, True) if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() pymvpa2-2.2.0/doc/examples/hyperalignment.py000066400000000000000000000415401202542755000211020ustar00rootroot00000000000000""" Hyperalignment for between-subject analysis =========================================== .. index:: hyperalignment, between-subject classification Multivariate pattern analysis (MVPA) reveals how the brain represents fine-scale information. Its power lies in its sensitivity to subtle pattern variations that encode this fine-scale information but that also presents a hurdle for group analyses due to between-subject variability of both anatomical & functional architectures. :ref:`Haxby et al. (2011) ` recently proposed a method of aligning subjects' brain data in a high-dimensional functional space and showed how to build a common model of ventral temporal cortex that captures visual object category information. They tested their model by successfully performing between-subject classification of category information. Moreover, when they built the model using a complex naturalistic stimulation (a feature film), it even generalized to other independent experiments even after removing any occurrences of the experimental stimuli from the movie data. In this example we show how to perform Hyperalignment within a single experiment. We will compare between-subject classification after hyperalignment to between-subject classification on anatomically aligned data (currently the most typical approach), and within-subject classification performance. Analysis setup -------------- """ from mvpa2.suite import * verbose.level = 2 """ We start by loading preprocessed datasets of 10 subjects with BOLD-responses of stimulation with face and object images (:ref:`Haxby et al., 2011 `). Each dataset, after preprocessing, has one sample per category and run for each of the eight runs and seven stimulus categories. Individual subject brains have been aligned anatomically using a 12 dof linear transformation. """ verbose(1, "Loading data...") filepath = os.path.join(pymvpa_datadbroot, 'hyperalignment_tutorial_data', 'hyperalignment_tutorial_data.hdf5.gz') ds_all = h5load(filepath) # zscore all datasets individually _ = [zscore(ds) for ds in ds_all] # inject the subject ID into all datasets for i,sd in enumerate(ds_all): sd.sa['subject'] = np.repeat(i, len(sd)) # number of subjects nsubjs = len(ds_all) # number of categories ncats = len(ds_all[0].UT) # number of run nruns = len(ds_all[0].UC) verbose(2, "%d subjects" % len(ds_all)) verbose(2, "Per-subject dataset: %i samples with %i features" % ds_all[0].shape) verbose(2, "Stimulus categories: %s" % ', '.join(ds_all[0].UT)) """ Now we'll create a couple of building blocks for the intended analyses. We'll use a linear SVM classifier, and perform feature selection with a simple one-way ANOVA selecting the ``nf`` highest scoring features. """ # use same classifier clf = LinearCSVMC() # feature selection helpers nf = 100 fselector = FixedNElementTailSelector(nf, tail='upper', mode='select',sort=False) sbfs = SensitivityBasedFeatureSelection(OneWayAnova(), fselector, enable_ca=['sensitivities']) # create classifier with automatic feature selection fsclf = FeatureSelectionClassifier(clf, sbfs) """ Within-subject classification ----------------------------- We start off by running a cross-validated classification analysis for every subject's dataset individually. Data folding will be performed by leaving out one run to serve as the testing dataset. ANOVA-based features selection will be performed automatically on training dataset and applied to testing dataset. """ verbose(1, "Performing classification analyses...") verbose(2, "within-subject...", cr=False, lf=False) wsc_start_time = time.time() cv = CrossValidation(fsclf, NFoldPartitioner(attr='chunks'), errorfx=mean_match_accuracy) # store results in a sequence wsc_results = [cv(sd) for sd in ds_all] wsc_results = vstack(wsc_results) verbose(2, " done in %.1f seconds" % (time.time() - wsc_start_time,)) """ Between-subject classification using anatomically aligned data -------------------------------------------------------------- For between-subject classification with MNI-aligned voxels, we can stack up all individual datasets into a single one, as (anatomical!) feature correspondence is given. The crossvalidation analysis using the feature selection classifier will automatically perform the desired ANOVA-based feature selection on every training dataset partition. However, data folding will now be done by leaving out a complete subject for testing. """ verbose(2, "between-subject (anatomically aligned)...", cr=False, lf=False) ds_mni = vstack(ds_all) mni_start_time = time.time() cv = CrossValidation(fsclf, NFoldPartitioner(attr='subject'), errorfx=mean_match_accuracy) bsc_mni_results = cv(ds_mni) verbose(2, "done in %.1f seconds" % (time.time() - mni_start_time,)) """ Between-subject classification with Hyperalignment(TM) ------------------------------------------------------ Between-subject classification using Hyperalignment is very similar to the previous analysis. However, now we no longer assume feature correspondence (or aren't satisfied with anatomical alignment anymore). Consequently, we have to transform the individual datasets into a common space before performing the classification analysis. To avoid introducing circularity problems to the analysis, we perform leave-one-run-out data folding manually, and train Hyperalignment only on the training dataset partitions. Subsequently, we will apply the derived transformation to the full datasets, stack them up across individual subjects, as before, and run the classification analysis. ANOVA-based feature selection is done in the same way as before (but also manually). """ verbose(2, "between-subject (hyperaligned)...", cr=False, lf=False) hyper_start_time = time.time() bsc_hyper_results = [] # same cross-validation over subjects as before cv = CrossValidation(clf, NFoldPartitioner(attr='subject'), errorfx=mean_match_accuracy) # leave-one-run-out for hyperalignment training for test_run in range(nruns): # split in training and testing set ds_train = [sd[sd.sa.chunks != test_run,:] for sd in ds_all] ds_test = [sd[sd.sa.chunks == test_run,:] for sd in ds_all] # manual feature selection for every individual dataset in the list anova = OneWayAnova() fscores = [anova(sd) for sd in ds_train] featsels = [StaticFeatureSelection(fselector(fscore)) for fscore in fscores] ds_train_fs = [featsels[i].forward(sd) for i, sd in enumerate(ds_train)] """ Perform hyperalignment on the training data with default parameters. Computing hyperalignment parameters is as simple as calling the hyperalignment object with a list of datasets. All datasets must have the same number of samples and time-locked responses are assumed. Hyperalignment returns a list of mappers corresponding to subjects in the same order as the list of datasets we passed in. """ hyper = Hyperalignment() hypmaps = hyper(ds_train_fs) """ Applying hyperalignment parameters is similar to applying any mapper in PyMVPA. We start by selecting the voxels that we used to derive the hyperalignment parameters. And then apply the hyperalignment parameters by running the test dataset through the forward() function of the mapper. """ ds_test_fs = [featsels[i].forward(sd) for i, sd in enumerate(ds_test)] ds_hyper = [ hypmaps[i].forward(sd) for i, sd in enumerate(ds_test_fs)] """ Now, we have a list of datasets with feature correspondence in a common space derived from the training data. Just as in the between-subject analyses of anatomically aligned data we can stack them all up and run the crossvalidation analysis. """ ds_hyper = vstack(ds_hyper) # zscore each subject individually after transformation for optimal # performance zscore(ds_hyper, chunks_attr='subject') res_cv = cv(ds_hyper) bsc_hyper_results.append(res_cv) bsc_hyper_results = hstack(bsc_hyper_results) verbose(2, "done in %.1f seconds" % (time.time() - hyper_start_time,)) """ Comparing the results --------------------- Performance ^^^^^^^^^^^ First we take a look at the classification performance (or accuracy) of all three analysis approaches. """ verbose(1, "Average classification accuracies:") verbose(2, "within-subject: %.2f +/-%.3f" % (np.mean(wsc_results), np.std(wsc_results) / np.sqrt(nsubjs - 1))) verbose(2, "between-subject (anatomically aligned): %.2f +/-%.3f" % (np.mean(bsc_mni_results), np.std(np.mean(bsc_mni_results, axis=1)) / np.sqrt(nsubjs - 1))) verbose(2, "between-subject (hyperaligned): %.2f +/-%.3f" \ % (np.mean(bsc_hyper_results), np.std(np.mean(bsc_hyper_results, axis=1)) / np.sqrt(nsubjs - 1))) """ The output of this demo looks like this:: Loading data... 10 subjects Per-subject dataset: 56 samples with 3509 features Stimulus categories: Chair, DogFace, FemaleFace, House, MaleFace, MonkeyFace, Shoe Performing classification analyses... within-subject... done in 4.3 seconds between-subject (anatomically aligned)...done after 3.2 seconds between-subject (hyperaligned)...done in 10.5 seconds Average classification accuracies: within-subject: 0.57 +/-0.063 between-subject (anatomically aligned): 0.42 +/-0.035 between-subject (hyperaligned): 0.62 +/-0.046 It is obvious that the between-subject classification using anatomically aligned data has significantly worse performance when compared to within-subject classification. Clearly the group classification model is inferior to individual classifiers fitted to a particular subject's data. However, a group classifier trained on hyperaligned data is performing at least as good as the within-subject classifiers -- possibly even slightly better due to the increased size of the training dataset. Similarity structures ^^^^^^^^^^^^^^^^^^^^^ To get a better understanding of how hyperalignment transforms the structure of the data, we compare the similarity structures of the corresponding input datasets of all three analysis above (and one in addition). These are respectively: 1. Average similarity structure of the individual data. 2. Similarity structure of the averaged hyperaligned data. 3. Average similarity structure of the individual data after hyperalignment. 4. Similarity structure of the averaged anatomically-aligned data. Similarity structure in this case is the correlation matrix of multivariate response patterns for all seven stimulus categories in the datasets. For the sake of simplicity, all similarity structures are computed on the full dataset without data folding. """ # feature selection as above anova = OneWayAnova() fscores = [anova(sd) for sd in ds_all] fscores = np.mean(np.asarray(vstack(fscores)), axis=0) # apply to full datasets ds_fs = [sd[:,fselector(fscores)] for i,sd in enumerate(ds_all)] #run hyperalignment on full datasets hyper = Hyperalignment() mappers = hyper(ds_fs) ds_hyper = [ mappers[i].forward(ds_) for i,ds_ in enumerate(ds_fs)] # similarity of original data samples sm_orig = [np.corrcoef( sd.get_mapped( mean_group_sample(['targets'])).samples) for sd in ds_fs] # mean across subjects sm_orig_mean = np.mean(sm_orig, axis=0) # same individual average but this time for hyperaligned data sm_hyper_mean = np.mean( [np.corrcoef( sd.get_mapped(mean_group_sample(['targets'])).samples) for sd in ds_hyper], axis=0) # similarity for averaged hyperaligned data ds_hyper = vstack(ds_hyper) sm_hyper = np.corrcoef(ds_hyper.get_mapped(mean_group_sample(['targets']))) # similarity for averaged anatomically aligned data ds_fs = vstack(ds_fs) sm_anat = np.corrcoef(ds_fs.get_mapped(mean_group_sample(['targets']))) """ We then plot the respective similarity strucures. """ # class labels should be in more meaningful order for visualization # (human faces, animals faces, objects) intended_label_order = [2,4,1,5,3,0,6] labels = ds_all[0].UT labels = labels[intended_label_order] pl.figure(figsize=(6,6)) # plot all three similarity structures for i, sm_t in enumerate(( (sm_orig_mean, "Average within-subject\nsimilarity"), (sm_anat, "Similarity of group average\ndata (anatomically aligned)"), (sm_hyper_mean, "Average within-subject\nsimilarity (hyperaligned data)"), (sm_hyper, "Similarity of group average\ndata (hyperaligned)"), )): sm, title = sm_t # reorder matrix columns to match label order sm = sm[intended_label_order][:,intended_label_order] pl.subplot(2, 2, i+1) pl.imshow(sm, vmin=-1.0, vmax=1.0, interpolation='nearest') pl.colorbar(shrink=.4, ticks=[-1,0,1]) pl.title(title, size=12) ylim = pl.ylim() pl.xticks(range(ncats), labels, size='small', stretch='ultra-condensed', rotation=45) pl.yticks(range(ncats), labels, size='small', stretch='ultra-condensed', rotation=45) pl.ylim(ylim) """ .. figure:: ../pics/ex_hyperalignment_similarity.* Fig. 1: Correlation of category-specific response patterns using the 100 most informative voxels (based on ANOVA F-score ranking). We can clearly see that averaging anatomically aligned data has a negative effect on the similarity structure, as the fine category structure is diminished and only the coarse structure (faces vs. objects) is preserved. Moreover, we can see that after hyperalignment the average similarity structure of individual data is essentially identical to the similarity structure of averaged data -- reflecting the feature correspondence in the common high-dimensional space. Regularized Hyperalignment -------------------------- According to :ref:`Xu et al. 2012 `, Hyperalignment can be reformulated to a regularized algorithm that can span the whole continuum between `canonical correlation analysis (CCA)`_ and regular hyperalignment by varying a regularization parameter (alpha). Here, we repeat the above between-subject hyperalignment and classification analyses with varying values of alpha from 0 (CCA) to 1.0 (regular hyperalignment). .. _`canonical correlation analysis (CCA)`: http://en.wikipedia.org/wiki/Canonical_correlation The following code is essentially identical to the implementation of between-subject classification shown above. The only difference is an addition ``for`` loop doing the alpha value sweep for each cross-validation fold. """ alpha_levels = np.concatenate( (np.linspace(0.0, 0.7, 8), np.linspace(0.8, 1.0, 9))) # to collect the results for later visualization bsc_hyper_results = np.zeros((nsubjs, len(alpha_levels), nruns)) # same cross-validation over subjects as before cv = CrossValidation(clf, NFoldPartitioner(attr='subject'), errorfx=mean_match_accuracy) # leave-one-run-out for hyperalignment training for test_run in range(nruns): # split in training and testing set ds_train = [sd[sd.sa.chunks != test_run,:] for sd in ds_all] ds_test = [sd[sd.sa.chunks == test_run,:] for sd in ds_all] # manual feature selection for every individual dataset in the list anova = OneWayAnova() fscores = [anova(sd) for sd in ds_train] featsels = [StaticFeatureSelection(fselector(fscore)) for fscore in fscores] ds_train_fs = [featsels[i].forward(sd) for i, sd in enumerate(ds_train)] for alpha_level, alpha in enumerate(alpha_levels): hyper = Hyperalignment(alignment=ProcrusteanMapper(svd='dgesvd', space='commonspace'), alpha=alpha) hypmaps = hyper(ds_train_fs) ds_test_fs = [featsels[i].forward(sd) for i, sd in enumerate(ds_test)] ds_hyper = [ hypmaps[i].forward(sd) for i, sd in enumerate(ds_test_fs)] ds_hyper = vstack(ds_hyper) zscore(ds_hyper, chunks_attr='subject') res_cv = cv(ds_hyper) bsc_hyper_results[:, alpha_level, test_run] = res_cv.samples.T """ Now we can plot the classification accuracy as a function of regularization intensity. """ bsc_hyper_results = np.mean(bsc_hyper_results, axis=2) pl.figure() plot_err_line(bsc_hyper_results, alpha_levels) pl.xlabel('Regularization parameter: alpha') pl.ylabel('Average BSC using hyperalignment +/- SEM') pl.title('Using regularized hyperalignment with varying alpha values') if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ .. figure:: ../pics/ex_hyperalignment_alphasweep.* Fig. 2: Mean between-subject classification accuracies using regularized hyperalignment with alpha value ranging from 0 (CCA) to 1 (vanilla hyperalignment). We can clearly see that the regular hyperalignment performs best for this dataset. However, please refer to :ref:`Xu et al. 2012 ` for an example showing that this is not always the case. """ pymvpa2-2.2.0/doc/examples/hyperplane_demo.py000066400000000000000000000160301202542755000212230ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Originally written by Rajeev Raizada in 2010 for Matlab and with permission # licensed under the terms of the PyMVPA's license. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Separating hyperplane tutorial ============================== This is a very introductory tutorial, showing how a classification task (in this case, deciding whether people are sumo wrestlers or basketball players, based on their height and weight) can be viewed as drawing a decision boundary in a feature space. It shows how to plot the data, calculate the weights of a simple linear classifier, and see how the resulting classifier carves up the feature space into two categories. .. note:: This tutorial was originally written by Rajeev Raizada for Matlab and was ported to Python by the PyMVPA authors. The original Matlab code is available from: http://www.dartmouth.edu/~raj/Matlab/fMRI/classification_plane_tutorial.m Let's look at a toy example: classifying people as either sumo wrestlers or basketball players, depending on their height and weight. Let's call the x-axis height and the y-axis weight """ sumo_wrestlers_height = [ 4, 2, 2, 3, 4 ] sumo_wrestlers_weight = [ 8, 6, 2, 5, 7 ] basketball_players_height = [ 3, 4, 5, 5, 3 ] basketball_players_weight = [ 2, 5, 3, 7, 3 ] """ Let's plot this. """ import pylab as pl pl.plot(sumo_wrestlers_height, sumo_wrestlers_weight, 'ro', linewidth=2, label="Sumo wrestlers") pl.plot(basketball_players_height, basketball_players_weight, 'bx', linewidth=2, label="Basketball players") pl.xlim(0, 6) pl.ylim(0, 10) pl.xlabel('Height') pl.ylabel('Weight') pl.legend() """ Let's stack up the sumo data on top of the basketball players data. """ import numpy as np # transpose to have observations along the first axis sumo_data = np.vstack((sumo_wrestlers_height, sumo_wrestlers_weight)).T # same for the baskball data basketball_data = np.vstack((basketball_players_height, basketball_players_weight)).T # now stack them all together all_data = np.vstack((sumo_data, basketball_data)) """ In order to be able to train a classifier on the input vectors, we need to know what the desired output categories are for each one. Let's set this to be `+1` for sumo wrestlers, and `-1` for basketball players. """ # creates: [ 1, 1, 1, 1, 1, -1, -1, -1, -1, -1] all_desired_output = np.repeat([1, -1], 5) """ We want to find a linear decision boundary, i.e. simply a straight line, such that all the data points on one side of the line get classified as sumo wrestlers, i.e. get mapped onto the desired output of `+1`, and all the data points on the other side get classified as basketball players, i.e. get mapped onto the desired output of `-1`. The equation for a straight line has this form: .. math:: \vec{w} \mathbf{D} - \vec{b} = 0 were :math:`\vec{w}` is a weight vector, :math:`\mathbf{D}` is the data matrix, and :math:`\vec{b}` is the offset of the dataset form the origin, or the bias. We're not so interested for now in :math:`\vec{b}`, so we can get rid of that by subtracting the mean from our data to get :math:`\mathbf{D_{C}}` the per-column (i.e. variable) demeaned data that is now centered around the origin. """ zero_meaned_data = all_data - all_data.mean(axis=0) """ Now, having gotten rid of that annoying bias term, we want to find a weight vector which gives us the best solution that we can find to this equation: .. math:: \mathbf{D_{C}} \vec{w} = \vec{o} were :math:`\vec{o}` is the desired output, or the class labels. But, there is no such perfect set of weights. We can only get a best fit, such that .. math:: \mathbf{D_{C}} \vec{w} = \vec{o} + \vec{e} where the error term :math:`\vec{e}` is as small as possible. Note that our equation .. math:: \mathbf{D_{C}} \vec{w} = \vec{o} has exactly the same form as the equation from the tutorial code in http://www.dartmouth.edu/~raj/Matlab/fMRI/design_matrix_tutorial.m which is: .. math:: \mathbf{X} \vec{\beta} = \vec{y} where :math:`\mathbf{X}` was the design matrix, :math:`\vec{\beta}` the sensitivity vector, and :math:`\vec{y}` the voxel response. The way we solve the equation is exactly the same, too. If we could find a matrix-inverse of the data matrix, then we could pre-multiply both sides by that inverse, and that would give us the weights: .. math:: \mathbf{D_{C}^{-1}} \mathbf{D_{C}} \vec{w} = \mathbf{D_{C}^{-1}} \vec{o} The :math:`\mathbf{D_{C}^{-1}}` and :math:`\mathbf{D_{C}}` terms on the left would cancel each other out, and we would be left with: .. math:: \vec{w} = \mathbf{D_{C}^{-1}} \vec{o} However, unfortunately there will in general not exist any matrix-inverse of the data matrix :math:`\mathbf{D_{C}}`. Only square matrices have inverses, and not even all of them do. Luckily, however, we can use something that plays a similar role, called a pseudo-inverse. In Numpy, this is given by the command `pinv`. The pseudo-inverse won't give us a perfect solution to the above equation but it will give us the best approximate solution, which is what we want. So, instead of .. math:: \vec{w} = \mathbf{D_{C}^{-1}} \vec{o} we have this equation: """ # compute pseudo-inverse as a matrix pinv = np.linalg.pinv(np.mat(zero_meaned_data)) # column-vector of observations y = all_desired_output[np.newaxis].T weights = pinv * y """ Let's have a look at how these weights carve up the input space A useful command for making grids of points which span a particular 2D space is called "meshgrid" """ gridspec = np.linspace(-4, 4, 20) input_space_X, input_space_Y = np.meshgrid(gridspec, gridspec) # for the rest it is easier to have `weights` as a simple array, instead # of a matrix weights = weights.A weighted_output_Z = input_space_X * weights[0] + input_space_Y * weights[1] """ The weighted output gets turned into the category-decision `+1` if it is greater than 0, and `-1` if it is less than zero. Let's plot the decision surface color-coded. """ pl.figure() pl.pcolor(input_space_X, input_space_Y, weighted_output_Z, cmap=pl.cm.Spectral) """ Let's plot the zero-meaned sumo and basketball data on top of this. """ pl.plot(zero_meaned_data[all_desired_output == 1, 0], zero_meaned_data[all_desired_output == 1, 1], 'ro', linewidth=2, label="Sumo wrestlers") pl.plot(zero_meaned_data[all_desired_output == -1, 0], zero_meaned_data[all_desired_output == -1, 1], 'bx', linewidth=2, label="Basketball players") pl.xlim(-4, 4) pl.ylim(-4, 4) pl.colorbar() pl.xlabel('Demeaned height') pl.ylabel('Demeaned weight') pl.title('Decision output') pl.legend() from mvpa2.base import cfg if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() pymvpa2-2.2.0/doc/examples/kerneldemo.py000077500000000000000000000042431202542755000202030ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Kernel-Demo =========== This is an example demonstrating various kernel implementation in PyMVPA. """ import numpy as np from mvpa2.support.pylab import pl #from mvpa2.suite import * from mvpa2.base import cfg from mvpa2.kernels.np import * # np.random.seed(1) data = np.random.rand(4, 2) for kernel_class, kernel_args in ( (ConstantKernel, {'sigma_0':1.0}), (ConstantKernel, {'sigma_0':1.0}), (GeneralizedLinearKernel, {'Sigma_p':np.eye(data.shape[1])}), (GeneralizedLinearKernel, {'Sigma_p':np.ones(data.shape[1])}), (GeneralizedLinearKernel, {'Sigma_p':2.0}), (GeneralizedLinearKernel, {}), (ExponentialKernel, {}), (SquaredExponentialKernel, {}), (Matern_3_2Kernel, {}), (Matern_5_2Kernel, {}), (RationalQuadraticKernel, {}), ): kernel = kernel_class(**kernel_args) print kernel result = kernel.compute(data) # In the following we draw some 2D functions at random from the # distribution N(O,kernel) defined by each available kernel and # plot them. These plots shows the flexibility of a given kernel # (with default parameters) when doing interpolation. The choice # of a kernel defines a prior probability over the function space # used for regression/classfication with GPR/GPC. count = 1 for k in kernel_dictionary.keys(): pl.subplot(3, 4, count) # X = np.random.rand(size)*12.0-6.0 # X.sort() X = np.arange(-1, 1, .02) X = X[:, np.newaxis] ker = kernel_dictionary[k]() ker.compute(X, X) print k K = np.asarray(ker) for i in range(10): f = np.random.multivariate_normal(np.zeros(X.shape[0]), K) pl.plot(X[:, 0], f, "b-") pl.title(k) pl.axis('tight') count += 1 if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() pymvpa2-2.2.0/doc/examples/knn_plot.py000077500000000000000000000025321202542755000177010ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ kNN -- Model Flexibility in Pictures ==================================== .. index:: kNN TODO """ import numpy as np """ """ import mvpa2 from mvpa2.base import cfg from mvpa2.misc.data_generators import * from mvpa2.clfs.knn import kNN from mvpa2.misc.plot import * mvpa2.seed(0) # to reproduce the plot dataset_kwargs = dict(nfeatures=2, nchunks=10, snr=2, nlabels=4, means=[ [0,1], [1,0], [1,1], [0,0] ]) dataset_train = normal_feature_dataset(**dataset_kwargs) dataset_plot = normal_feature_dataset(**dataset_kwargs) # make a new figure pl.figure(figsize=(9, 9)) for i,k in enumerate((1, 3, 9, 20)): knn = kNN(k) print "Processing kNN(%i) problem..." % k pl.subplot(2, 2, i+1) """ """ knn.train(dataset_train) plot_decision_boundary_2d( dataset_plot, clf=knn, maps='targets') if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() pymvpa2-2.2.0/doc/examples/match_distribution.py000077500000000000000000000074721202542755000217600ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Determine the Distribution of some Variable =========================================== This is an example demonstrating discovery of the distribution facility. """ from mvpa2.suite import * verbose.level = 2 if __debug__: # report useful debug information for the example debug.active += ['STAT', 'STAT_'] """ While doing distribution matching, this example also demonstrates infrastructure within PyMVPA to log a progress report not only on the screen, but also into external files, such as - simple text file, - PDF file including all text messages and pictures which were rendered. For PDF report you need to have ``reportlab`` external available. """ report = Report(name='match_distribution_report', title='PyMVPA Example: match_distribution.py') verbose.handlers += [report] # Lets add verbose output to the report. # Similar action could be done to 'debug' # Also append verbose output into a log file we care about verbose.handlers += [open('match_distribution_report.log', 'a')] # # Figure for just normal distribution # # generate random signal from normal distribution verbose(1, "Random signal with normal distribution") data = np.random.normal(size=(1000, 1)) # find matching distributions # NOTE: since kstest is broken in older versions of scipy # p-roc testing is done here, which aims to minimize # false positives/negatives while doing H0-testing test = 'p-roc' figsize = (15, 10) verbose(1, "Find matching datasets") matches = match_distribution(data, test=test, p=0.05) pl.figure(figsize=figsize) pl.subplot(2, 1, 1) plot_distribution_matches(data, matches, legend=1, nbest=5) pl.title('Normal: 5 best distributions') pl.subplot(2, 1, 2) plot_distribution_matches(data, matches, nbest=5, p=0.05, tail='any', legend=4) pl.title('Accept regions for two-tailed test') # we are done with the figure -- add it to report report.figure() # # Figure for fMRI data sample we have # verbose(1, "Load sample fMRI dataset") attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes.txt')) dataset = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) # select random voxel dataset = dataset[:, int(np.random.uniform()*dataset.nfeatures)] verbose(2, "Minimal preprocessing to remove the bias per each voxel") poly_detrend(dataset, chunks_attr='chunks', polyord=1) zscore(dataset, chunks_attr='chunks', param_est=('targets', ['0']), dtype='float32') # on all voxels at once, just for the sake of visualization data = dataset.samples.ravel() verbose(2, "Find matching distribution") matches = match_distribution(data, test=test, p=0.05) pl.figure(figsize=figsize) pl.subplot(2, 1, 1) plot_distribution_matches(data, matches, legend=1, nbest=5) pl.title('Random voxel: 5 best distributions') pl.subplot(2, 1, 2) plot_distribution_matches(data, matches, nbest=5, p=0.05, tail='any', legend=4) pl.title('Accept regions for two-tailed test') report.figure() if cfg.getboolean('examples', 'interactive', True): # store the report report.save() # show the cool figure pl.show() """ Example output for a random voxel is .. image:: ../pics/ex_match_distribution.* :align: center :alt: Matching distributions for a random voxel """ pymvpa2-2.2.0/doc/examples/mdp_mnist.py000077500000000000000000000205171202542755000200520ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ .. index:: MDP Classifying the MNIST handwritten digits with MDP ================================================= This example will demonstrate how to embed MDP_'s flows_ into a PyMVPA-based analysis. We will perform a classification of a large number of images of handwritten digits from the :ref:`MNIST ` database. To get a better sense of how MDP blends into PyMVPA, we will do the same analysis with MDP only first, and then redo it in PyMVPA -- only using particular bits from MDP. .. _MDP: http://mdp-toolkit.sourceforge.net .. _flows: http://mdp-toolkit.sourceforge.net/tutorial/flows.html But first we need some helper to load the MNIST data. The following function will load four NumPy arrays from an HDF5 file in the PyMVPA Data DB. These arrays are the digit images and the numerical labels for training and testing dataset respectively. All 28x28 pixel images are stored as flattened vectors. """ import os from mvpa2.base.hdf5 import h5load from mvpa2 import pymvpa_datadbroot def load_data(): data = h5load(os.path.join(pymvpa_datadbroot, 'mnist', "mnist.hdf5")) traindata = data['train'].samples trainlabels = data['train'].sa.labels testdata = data['test'].samples testlabels = data['test'].sa.labels return traindata, trainlabels, testdata, testlabels """ MDP-style classification ------------------------ Here is how to get the classification of the digit images done in MDP. The data is preprocessed by whitening, followed by polynomial expansion, and a subsequent projection on a nine-dimensional discriminant analysis solution. There is absolutely no need to do this particular pre-processing, it is just done to show off some MDP features. The actual classification is performed by a Gaussian classifier. The training data needs to be fed in different ways to the individual nodes of the flow. The whitening needs only the images, polynomial expansion needs no training at all, and FDA as well as the classifier also need the labels. Moreover, a custom iterator is used to feed data in chunks to the last two nodes of the flow. """ import numpy as np import mdp class DigitsIterator: def __init__(self, digits, labels): self.digits = digits self.targets = labels def __iter__(self): frac = 10 ll = len(self.targets) for i in xrange(frac): yield self.digits[i*ll/frac:(i+1)*ll/frac], \ self.targets[i*ll/frac:(i+1)*ll/frac] traindata, trainlabels, testdata, testlabels = load_data() fdaclf = (mdp.nodes.WhiteningNode(output_dim=10, dtype='d') + mdp.nodes.PolynomialExpansionNode(2) + mdp.nodes.FDANode(output_dim=9) + mdp.nodes.GaussianClassifier()) fdaclf.verbose = True fdaclf.train([[traindata], None, DigitsIterator(traindata, trainlabels), DigitsIterator(traindata, trainlabels) ]) """ After training, we feed the test data through the flow to obtain the predictions. First through the pre-processing nodes and then through the classifier, extracting the predicted labels only. Finally, the prediction error is computed. """ feature_space = fdaclf[:-1](testdata) guess = fdaclf[-1].label(feature_space) err = 1 - np.mean(guess == testlabels) print 'Test error:', err """ Doing it the PyMVPA way ----------------------- Analog to the previous approach we load the data first. This time, however, we convert it into a PyMVPA dataset. Training and testing data are initially created as two separate datasets, get tagged as 'train' and 'test' respectively, and are finally stacked into a single Dataset of 70000 images and their numerical labels. """ import pylab as pl from mvpa2.suite import * traindata, trainlabels, testdata, testlabels = load_data() train = dataset_wizard( traindata, targets=trainlabels, chunks='train') test = dataset_wizard( testdata, targets=testlabels, chunks='test') # merge the datasets into on ds = vstack((train, test)) ds.init_origids('samples') """ For this analysis we will use the exact same pre-processing as in the MDP code above, by using the same MDP nodes, in an MDP flow that is shortened only by the Gaussian classifier. The glue between these MDP nodes and PyMVPA is the :class:`~mvpa2.mappers.mdp_adaptor.MDPFlowMapper`. This mapper is able to supply nodes with optional arguments for their training. In this example a :class:`~mvpa2.base.dataset.DatasetAttributeExtractor` is used to feed the labels of the training dataset to the FDA node (in addition to the training data itself). """ fdaflow = (mdp.nodes.WhiteningNode(output_dim=10, dtype='d') + mdp.nodes.PolynomialExpansionNode(2) + mdp.nodes.FDANode(output_dim=9)) fdaflow.verbose = True mapper = MDPFlowMapper(fdaflow, ([], [], [DatasetAttributeExtractor('sa', 'targets')])) """ The :class:`~mvpa2.mappers.mdp_adaptor.MDPFlowMapper` can represent any MDP flow as a PyMVPA mapper. In this example, we attach the MDP-based pre-processing flow, wrapped in the mapper, to a classifier (arbitrarily chosen to be SMLR) via a :class:`~mvpa2.clfs.meta.MappedClassifier`. In doing so we achieve that the training data is automatically pre-processed before it is used to train the classifier, and later on the same pre-processing it applied to the testing data, before the classifier is asked to make its predictions. At last we wrap the MappedClassifier into a :class:`~mvpa2.measures.base.TransferMeasure` that splits the dataset into a training and testing part. In this particular case this is not really necessary, as we could have left training and testing data separate in the first place, and could have called the classifier's ``train()`` and ``predict()`` manually. However, when doing repeated train/test cycles as, for example, in a cross-validation this is not very useful. In this particular case the TransferMeasure computes a number of performance measures for us that we only need to extract. """ tm = TransferMeasure(MappedClassifier(SMLR(), mapper), Splitter('chunks', attr_values=['train', 'test']), enable_ca=['stats', 'samples_error']) tm(ds) print 'Test error:', 1 - tm.ca.stats.stats['ACC'] """ Visualizing data and results ---------------------------- The analyses are already done. But for the sake of completeness we take a final look at both data and results. First and few examples of the training data. """ examples = [3001 + 5940 * i for i in range(10)] pl.figure(figsize=(2, 5)) for i, id_ in enumerate(examples): ax = pl.subplot(2, 5, i+1) ax.axison = False pl.imshow(traindata[id_].reshape(28, 28).T, cmap=pl.cm.gist_yarg, interpolation='nearest', aspect='equal') pl.subplots_adjust(left=0, right=1, bottom=0, top=1, wspace=0.05, hspace=0.05) pl.draw() """ And finally we take a peak at the result of pre-processing for a number of example images for each digit. The following plot shows the training data on hand-picked three-dimensional subset of the original nine FDA dimension the data was projected on. """ if externals.exists('matplotlib') \ and externals.versions['matplotlib'] >= '0.99': from mpl_toolkits.mplot3d import Axes3D pts = [] for i, ex in enumerate(examples): pts.append(mapper.forward(ds.samples[ex:ex+200])[:, :3]) fig = pl.figure() ax = Axes3D(fig) colors = ('r','g','b','k','c','m','y','burlywood','chartreuse','gray') clouds = [] for i, p in enumerate(pts): print i clouds.append(ax.plot(p[:, 0], p[:, 1], p[:, 2], 'o', c=colors[i], label=str(i), alpha=0.6)) ax.legend([str(i) for i in range(10)]) pl.draw() if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ .. image:: ../pics/ex_mdp_fda.* Note: The data visualization depends on the 3D matplotlib features, which are available only from version 0.99. """ pymvpa2-2.2.0/doc/examples/mri_plot.py000077500000000000000000000106001202542755000176750ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Basic (f)MRI plotting ===================== .. index:: plotting When running an fMRI data analysis it is often necessary to visualize results in their original dataspace, typically as an overlay on some anatomical brain image. PyMVPA has the ability to export results into the NIfTI format, and via this data format it is compatible with virtually any MRI visualization software. However, sometimes having a scriptable plotting facility within Python is desired. There are a number of candidate tools for this purpose (e.g. Mayavi_), but also PyMVPA itself offers some basic MRI plotting. .. _Mayavi: http://code.enthought.com/projects/mayavi/ In this example, we are showing a quick-and-dirty plot of a voxel-wise ANOVA measure, overlaid on the respective brain anatomy. Note that the plotting is not specific to ANOVAs. Any feature-wise measure can be plotted this way. We start with basic steps: loading PyMVPA and the example fMRI dataset, only select voxels that correspond to some pre-computed gray matter mask, do basic preprocessing, and estimate ANOVA scores. This has already been described elsewhere, hence we only provide the code here for the sake of completeness. """ from mvpa2.suite import * # load PyMVPA example dataset datapath = os.path.join(pymvpa_datadbroot, 'tutorial_data', 'tutorial_data', 'data') attr = SampleAttributes(os.path.join(datapath, 'attributes.txt')) dataset = fmri_dataset(samples=os.path.join(datapath, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(datapath, 'mask_gray.nii.gz')) # do chunkswise linear detrending on dataset poly_detrend(dataset, chunks_attr='chunks') # exclude the rest conditions from the dataset, since that should be # quite different from the 'active' conditions, and make the computation # below pointless dataset = dataset[dataset.sa.targets != 'rest'] # define sensitivity analyzer to compute ANOVA F-scores on the remaining # samples sensana = OneWayAnova() sens = sensana(dataset) """ The measure is computed, and we can look at the actual plotting. Typically, it is useful to pre-define some common plotting arguments, for example to ensure consistency throughout multiple figures. This following sets up which backround image to use (``background``), which portions of the image to plot (``background_mask``), and which portions of the overlay images to plot (``overlay_mask``). All these arguments are actually NIfTI images of the same dimensions and orientation as the to be plotted F-scores image. the remaining settings configure the colormaps to be used for plotting and trigger interactive plotting. """ mri_args = { 'background' : os.path.join(datapath, 'anat.nii.gz'), 'background_mask' : os.path.join(datapath, 'mask_brain.nii.gz'), 'overlay_mask' : os.path.join(datapath, 'mask_gray.nii.gz'), 'cmap_bg' : 'gray', 'cmap_overlay' : 'autumn', # YlOrRd_r # pl.cm.autumn 'interactive' : cfg.getboolean('examples', 'interactive', True), } """ All that remains to do is a single call to `plot_lightbox()`. We pass it the F-score vector. `map2nifti` uses the mapper in our original dataset to project it back into the functional MRI volume space. We treshold the data with the interval [0, +inf] (i.e. all possible values and F-Score can have), and select a subset of slices to be plotted. That's it. """ fig = plot_lightbox(overlay=map2nifti(dataset, sens), vlim=(0, None), slices=range(25,29), **mri_args) """ The resulting figure would look like this: .. image:: ../pics/ex_plot_lightbox.* :align: center :alt: Simple plotting facility for (f)MRI. F-scores In interactive mode it is possible to click on the histogram to adjust the thresholding of the overlay volumes. Left-click sets the value corresponding to the lowest value in the colormap, and right-click set the value for the upper end of the colormap. Try right-clicking somewhere at the beginning of the x-axis and left on the end of the x-axis. """ pymvpa2-2.2.0/doc/examples/nested_cv.py000077500000000000000000000121151202542755000200250ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Nested Cross-Validation ======================= .. index:: model selection, cross-validation Often it is desired to explore multiple models (classifiers, parameterizations) but it becomes an easy trap for introducing an optimistic bias into generalization estimate. The easiest but computationally intensive solution to overcome such a bias is to carry model selection by estimating the same (or different) performance characteristic while operating only on training data. If such performance is a cross-validation, then it leads to the so called "nested cross-validation" procedure. This example will demonstrate on how to implement such nested cross-validation while selecting the best performing classifier from the warehouse of available within PyMVPA. """ from mvpa2.suite import * # increase verbosity a bit for now verbose.level = 3 # pre-seed RNG if you want to investigate the effects, thus # needing reproducible results #mvpa2.seed(3) """ For this simple example lets generate some fresh random data with 2 relevant features and low SNR. """ dataset = normal_feature_dataset(perlabel=24, nlabels=2, nchunks=3, nonbogus_features=[0, 1], nfeatures=100, snr=3.0) """ For the demonstration of model selection benefit, lets first compute cross-validated error using simple and popular kNN. """ clf_sample = kNN() cv_sample = CrossValidation(clf_sample, NFoldPartitioner()) verbose(1, "Estimating error using a sample classifier") error_sample = np.mean(cv_sample(dataset)) """ For the convenience lets define a helpful function which we will use twice -- once within cross-validation, and once on the whole dataset """ def select_best_clf(dataset_, clfs): """Select best model according to CVTE Helper function which we will use twice -- once for proper nested cross-validation, and once to see how big an optimistic bias due to model selection could be if we simply provide an entire dataset. Parameters ---------- dataset_ : Dataset clfs : list of Classifiers Which classifiers to explore Returns ------- best_clf, best_error """ best_error = None for clf in clfs: cv = CrossValidation(clf, NFoldPartitioner()) # unfortunately we don't have ability to reassign clf atm # cv.transerror.clf = clf try: error = np.mean(cv(dataset_)) except LearnerError, e: # skip the classifier if data was not appropriate and it # failed to learn/predict at all continue if best_error is None or error < best_error: best_clf = clf best_error = error verbose(4, "Classifier %s cv error=%.2f" % (clf.descr, error)) verbose(3, "Selected the best out of %i classifiers %s with error %.2f" % (len(clfs), best_clf.descr, best_error)) return best_clf, best_error """ First lets select a classifier within cross-validation, thus eliminating model-selection bias """ best_clfs = {} confusion = ConfusionMatrix() verbose(1, "Estimating error using nested CV for model selection") partitioner = NFoldPartitioner() splitter = Splitter('partitions') for isplit, partitions in enumerate(partitioner.generate(dataset)): verbose(2, "Processing split #%i" % isplit) dstrain, dstest = list(splitter.generate(partitions)) best_clf, best_error = select_best_clf(dstrain, clfswh['!gnpp']) best_clfs[best_clf.descr] = best_clfs.get(best_clf.descr, 0) + 1 # now that we have the best classifier, lets assess its transfer # to the testing dataset while training on entire training tm = TransferMeasure(best_clf, splitter, postproc=BinaryFxNode(mean_mismatch_error, space='targets'), enable_ca=['stats']) tm(partitions) confusion += tm.ca.stats """ And for comparison, lets assess what would be the best performance if we simply explore all available classifiers, providing all the data at once """ verbose(1, "Estimating error via fishing expedition (best clf on entire dataset)") cheating_clf, cheating_error = select_best_clf(dataset, clfswh['!gnpp']) print """Errors: sample classifier (kNN): %.2f model selection within cross-validation: %.2f model selection via fishing expedition: %.2f with %s """ % (error_sample, 1 - confusion.stats['ACC'], cheating_error, cheating_clf.descr) print "# of times following classifiers were selected within " \ "nested cross-validation:" for c, count in sorted(best_clfs.items(), key=lambda x:x[1], reverse=True): print " %i times %s" % (count, c) print "\nConfusion table for the nested cross-validation results:" print confusion pymvpa2-2.2.0/doc/examples/permutation_test.py000077500000000000000000000320251202542755000214630ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Monte-Carlo testing of Classifier-based Analyses ================================================ .. index:: statistical testing, monte-carlo, permutation It is often desirable to be able to make statements like *"Performance is significantly above chance-level"* and to help with that PyMVPA supports *Null* hypothesis (aka *H0*) testing for any :class:`~mvpa2.measures.base.Measure`. Measures take an optional constructor argument ``null_dist`` that can be used to provide an instance of some :class:`~mvpa2.clfs.stats.NullDist` estimator. If the properties of the expected *Null* distribution are known a-priori, it is possible to use any distribution specified in SciPy's ``stats`` module for this purpose (see e.g. :class:`~mvpa2.clfs.stats.FixedNullDist`). However, as with other applications of statistics in classifier-based analyses there is the problem that we typically do not know the distribution of a variable like error or performance under the *Null* hypothesis (i.e. the probability of a result given that there is no signal), hence we cannot easily assign the adored p-values. Even worse, the chance-level or guess probability of a classifier depends on the content of a validation dataset, e.g. balanced or unbalanced number of samples per label and total number of labels. One approach to deal with this situation is to *estimate* the *Null* distribution using permutation testing. The *Null* distribution is then estimated by computing the measure of interest multiple times using original data samples but with permuted targets. Since quite often the exploration of all permutations is unfeasible, Monte-Carlo testing (see :ref:`Nichols et al. (2006) `) allows to obtain stable estimate with only a limited number of random permutations. Given the results computed using permuted targets one can now determine the probability of the empirical result (i.e. the one computed from the original training dataset) under the *no signal* condition. This is simply the fraction of results from the permutation runs that is larger or smaller than the empirical (depending on whether one is looking at performances or errors). Here is how this looks for a simple cross-validated classification in PyMVPA. We start by generated a dataset with 200 samples and 3 features of which 2 carry some relevant signal. """ # lazy import from mvpa2.suite import * # enable progress output for MC estimation if __debug__: debug.active += ["STATMC"] # some example data with signal ds = normal_feature_dataset(perlabel=100, nlabels=2, nfeatures=3, nonbogus_features=[0,1], snr=0.3, nchunks=2) """ Now we can start collecting the pieces that play a role in this analysis. We need a classifier. """ clf = LinearCSVMC() """ We need a :term:`generator` than will produce partitioned datasets, one for each fold of the cross-validation. A partitioned dataset is basically the same as the original dataset, but has an additional samples attribute that indicates whether particular samples will be the *part* of the data that is used for training the classifier, or for testing it. By default, the :class:`~mvpa2.generators.partition.NFoldPartitioner` will create a sample attribute ``partitions`` that will label one :term:`chunk` in each fold differently from all others (hence mark it as taken-out for testing). """ partitioner = NFoldPartitioner() """ We need two pieces for the Monte Carlo shuffling. The first of them is an instance of an :class:`~mvpa2.generators.permutation.AttributePermutator` that will permute the target attribute of the dataset for each iteration. We will instruct it to perform 200 permutations. In a real analysis the number of permutations should be larger to get stable estimates. """ permutator = AttributePermutator('targets', count=200) """ The second mandatory piece for a Monte-Carlo-style estimation of the *Null* distribution is the actual "estimator". :class:`~mvpa2.clfs.stats.MCNullDist` will use the constructed ``permutator`` to shuffle the targets and later on report p-value from the left tail of the *Null* distribution, because we are going to compute errors and are interested in them being *lower* than chance. Finally we also ask for all results from Monte-Carlo shuffling to be stored for subsequent visualization of the distribution. """ distr_est = MCNullDist(permutator, tail='left', enable_ca=['dist_samples']) """ Now we have all pieces and can conduct the actual cross-validation. We assign a post-processing :term:`node` ``mean_sample`` that will take care of averaging error values across all cross-validation fold. Consequently, the *Null* distribution of *average cross-validated classification error* will be estimated and used for statistical evaluation. """ cv = CrossValidation(clf, partitioner, errorfx=mean_mismatch_error, postproc=mean_sample(), null_dist=distr_est, enable_ca=['stats']) # run err = cv(ds) """ Now we have a usual cross-validation error and ``cv`` stores :term:`conditional attribute`s such as confusion matrices`: """ print 'CV-error:', 1 - cv.ca.stats.stats['ACC'] """ However, in addition it also provides the results of the statistical evaluation. The :term:`conditional attribute` ``null_prob`` has a dataset that contains the p-values representing the likelihood of an error equal or lower to the output one under the *Null* hypothesis, i.e. no actual relevant signal in the data. For a reason that will appear sensible later on, the p-value is contained in a dataset. """ p = cv.ca.null_prob # should be exactly one p-value assert(p.shape == (1,1)) print 'Corresponding p-value:', np.asscalar(p) """ We can now look at the distribution of the errors under *H0* and plot the expected chance level as well as the empirical error. """ # make new figure pl.figure() # histogram of all computed errors from permuted data pl.hist(np.ravel(cv.null_dist.ca.dist_samples), bins=20) # empirical error pl.axvline(np.asscalar(err), color='red') # chance-level for a binary classification with balanced samples pl.axvline(0.5, color='black', ls='--') # scale x-axis to full range of possible error values pl.xlim(0,1) pl.xlabel('Average cross-validated classification error') """ We can see that the *Null* or chance distribution is centered around the expected chance-level and the empirical error value is in the far left tail, thus unlikely to belong to *Null* distribution, and hence the low p-value. This could be the end, but sometimes one needs to have a closer look. Let's say your data is not that homogeneous. Let's say that some :term:`chunk ` may be very different from others. You might want to look at the error value probability for specific cross-validation folds. Sounds complicated? Luckily it is very simple. It only needs a tiny change in the cross-validation setup -- the removal of the ``mean_sample`` post-processing :term:`node`. """ cv = CrossValidation(clf, partitioner, errorfx=mean_mismatch_error, null_dist=distr_est, enable_ca=['stats']) # run err = cv(ds) assert (err.shape == (2,1)) print 'CV-errors:', np.ravel(err) """ Now we get two errors -- one for each cross-validation fold and most importantly, we also get the two associated p-values. """ p = cv.ca.null_prob assert(p.shape == (2,1)) print 'Corresponding p-values:', np.ravel(p) """ What happened is that a dedicated *Null* distribution has been estimated for each element in the measure results. Without ``mean_sample`` an error is reported for each CV-fold, hence a separate distributions are estimated for each CV-fold too. And because we have also asked for all distribution samples to be reported, we can now plot both distribution and both empirical errors. But how do we figure out with value is which? As mentioned earlier all results are returned in Datasets. All datasets have compatible sample and feature axes, hence corresponding elements. """ assert(err.shape == p.shape == cv.null_dist.ca.dist_samples.shape[:2]) # let's make a function this time def plot_cv_results(cv, err, title): # make new figure pl.figure() colors = ['green', 'blue'] # null distribution samples dist_samples = np.asarray(cv.null_dist.ca.dist_samples) for i in range(len(err)): # histogram of all computed errors from permuted data per CV-fold pl.hist(np.ravel(dist_samples[i]), bins=20, color=colors[i], label='CV-fold %i' %i, alpha=0.5, range=(dist_samples.min(), dist_samples.max())) # empirical error pl.axvline(np.asscalar(err[i]), color=colors[i]) # chance-level for a binary classification with balanced samples pl.axvline(0.5, color='black', ls='--') # scale x-axis to full range of possible error values pl.xlim(0,1) pl.xlabel(title) plot_cv_results(cv, err, 'Per CV-fold classification error') """ We have already seen that the statistical evaluation is pretty flexible. However, we haven't yet seen whether it is flexible enough. To illustrate that think about what was done in the above Monte Carlo analyses. A dataset was shuffled repeatedly, and for each iteration a full cross-validation of classification error was performed. However, the shuffling was done on the *full* dataset, hence target were permuted in both training *and* testing dataset portions in each CV-fold. This basically means that for each Monte Carlo iteration the classifier was tested on a new data/signal. However, we may be more interested in what the classifier has to say on the *actual* data, but when it was trained on randomly permuted data. As you can guess this is possible too and goes like this. The most important difference is that we are going to use now a dedicate measure to estimate the *Null* distribution. That measure is very similar to the cross-validation we have used before, but differs in an important bit. Let's look at the pieces. """ # how often do we want to shuffle the data repeater = Repeater(count=200) # permute the training part of a dataset exactly ONCE permutator = AttributePermutator('targets', limit={'partitions': 1}, count=1) # CV with null-distribution estimation that permutes the training data for # each fold independently null_cv = CrossValidation( clf, ChainNode([partitioner, permutator], space=partitioner.get_space()), errorfx=mean_mismatch_error) # Monte Carlo distribution estimator distr_est = MCNullDist(repeater, tail='left', measure=null_cv, enable_ca=['dist_samples']) # actual CV with H0 distribution estimation cv = CrossValidation(clf, partitioner, errorfx=mean_mismatch_error, null_dist=distr_est, enable_ca=['stats']) """ The ``repeater`` is a simple node that returns any given dataset a configurable number of times. We use the helper to configure the number of Monte Carlo iterations. The new ``permutator`` is again configured to shuffle the ``targets`` attribute, but only *once* and only for samples that were labeled as being part of the training set in a particular CV-fold (the ``partitions`` sample attribute will be created by the NFoldPartitioner that we have configured earlier). The most important difference is a new dedicated measure that will be used to perform a cross-validation analysis under the *H0* hypotheses. To this end we set up a standard CV procedure with a twist: we use a chained generator (comprising of the typical partitioner and the new one-time permutator). This will cause the CV to permute the training set for each CV-fold internally (and that is what we wanted). Now we assign the *H0* cross-validation procedure to the distribution estimator and use the ``repeater`` to set the number of iterations. Lastly, we plug everything into a standard CV analysis with, again, a non-permuting ``partitioner`` and the pimped *Null* distribution estimator. Now we just need to run it, and plot the results the same way we did before. """ err = cv(ds) print 'CV-errors:', np.ravel(err) p = cv.ca.null_prob print 'Corresponding p-values:', np.ravel(p) # plot plot_cv_results(cv, err, 'Per CV-fold classification error (only training permutation)') if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ There a many ways to futher tweak the statistical evaluation. For example, if the family of the distribution is known (e.g. Gaussian/Normal) and provided with the ``dist_class`` parameter of ``MCNullDist``, then permutation tests done by ``MCNullDist`` allow determining the distribution parameters. Under the (strong) assumption of Gaussian distribution, 20-30 permutations should be sufficient to get sensible estimates of the distribution parameters. But that would be another story... """ pymvpa2-2.2.0/doc/examples/projections.py000077500000000000000000000041661202542755000204210ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Visualization of Data Projection Methods ======================================== """ from mvpa2.support.pylab import pl from mvpa2.misc.data_generators import noisy_2d_fx from mvpa2.mappers.svd import SVDMapper from mvpa2.mappers.mdp_adaptor import ICAMapper, PCAMapper from mvpa2 import cfg center = [10, 20] axis_range = 7 ##REF: Name was automagically refactored def plot_proj_dir(p): pl.plot([0, p[0,0]], [0, p[0,1]], linewidth=3, hold=True, color='y') pl.plot([0, p[1,0]], [0, p[1,1]], linewidth=3, hold=True, color='k') mappers = { 'PCA': PCAMapper(), 'SVD': SVDMapper(), 'ICA': ICAMapper(alg='CuBICA'), } datasets = [ noisy_2d_fx(100, lambda x: x, [lambda x: x], center, noise_std=0.5), noisy_2d_fx(50, lambda x: x, [lambda x: x, lambda x: -x], center, noise_std=0.5), noisy_2d_fx(50, lambda x: x, [lambda x: x, lambda x: 0], center, noise_std=0.5), ] ndatasets = len(datasets) nmappers = len(mappers.keys()) pl.figure(figsize=(8,8)) fig = 1 for ds in datasets: for mname, mapper in mappers.iteritems(): mapper.train(ds) dproj = mapper.forward(ds.samples) mproj = mapper.proj pl.subplot(ndatasets, nmappers, fig) if fig <= 3: pl.title(mname) pl.axis('equal') pl.scatter(ds.samples[:, 0] - center[0], ds.samples[:, 1] - center[1], s=30, c=(ds.sa.targets) * 200) plot_proj_dir(mproj) fig += 1 if cfg.getboolean('examples', 'interactive', True): pl.show() """ Output of the example: .. image:: ../pics/ex_projections.* :align: center :alt: SVD/ICA/PCA projections """ pymvpa2-2.2.0/doc/examples/pylab_2d.py000077500000000000000000000137511202542755000175560ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Simple Plotting of Classifier Behavior ====================================== .. index:: plotting example This example runs a number of classifiers on a simple 2D dataset and plots the decision surface of each classifier. First compose some sample data -- no PyMVPA involved. """ import numpy as np # set up the labeled data # two skewed 2-D distributions num_dat = 200 dist = 4 # Absolute max value allowed. Just to assure proper plots xyamax = 10 feat_pos=np.random.randn(2, num_dat) feat_pos[0, :] *= 2. feat_pos[1, :] *= .5 feat_pos[0, :] += dist feat_pos = feat_pos.clip(-xyamax, xyamax) feat_neg=np.random.randn(2, num_dat) feat_neg[0, :] *= .5 feat_neg[1, :] *= 2. feat_neg[0, :] -= dist feat_neg = feat_neg.clip(-xyamax, xyamax) # set up the testing features npoints = 101 x1 = np.linspace(-xyamax, xyamax, npoints) x2 = np.linspace(-xyamax, xyamax, npoints) x,y = np.meshgrid(x1, x2); feat_test = np.array((np.ravel(x), np.ravel(y))) """Now load PyMVPA and convert the data into a proper :class:`~mvpa2.datasets.base.Dataset`.""" from mvpa2.suite import * # create the pymvpa dataset from the labeled features patternsPos = dataset_wizard(samples=feat_pos.T, targets=1) patternsNeg = dataset_wizard(samples=feat_neg.T, targets=0) ds_lin = vstack((patternsPos, patternsNeg)) """Let's add another dataset: XOR. This problem is not linear separable and therefore need a non-linear classifier to be solved. The dataset is provided by the PyMVPA dataset warehouse. """ # 30 samples per condition, SNR 2 ds_nl = pure_multivariate_signal(30, 2) l1 = ds_nl.sa['targets'].unique[1] datasets = {'linear': ds_lin, 'non-linear': ds_nl} """This demo utilizes a number of classifiers. The instantiation of a classifier involves almost no runtime costs, so it is easily possible compile a long list, if necessary.""" # set up classifiers to try out clfs = { 'Ridge Regression': RidgeReg(), 'Linear SVM': LinearNuSVMC(probability=1, enable_ca=['probabilities']), 'RBF SVM': RbfNuSVMC(probability=1, enable_ca=['probabilities']), 'SMLR': SMLR(lm=0.01), 'Logistic Regression': PLR(criterion=0.00001), '3-Nearest-Neighbour': kNN(k=3), '10-Nearest-Neighbour': kNN(k=10), 'GNB': GNB(common_variance=True), 'GNB(common_variance=False)': GNB(common_variance=False), 'LDA': LDA(), 'QDA': QDA(), } # How many rows/columns we need nx = int(ceil(np.sqrt(len(clfs)))) ny = int(ceil(len(clfs)/float(nx))) """Now we are ready to run the classifiers. The following loop trains and queries each classifier to finally generate a nice plot showing the decision surface of each individual classifier, both for the linear and the non-linear dataset.""" for id, ds in datasets.iteritems(): # loop over classifiers and show how they do fig = 0 # make a new figure pl.figure(figsize=(nx*4, ny*4)) print "Processing %s problem..." % id for c in sorted(clfs): # tell which one we are doing print "Running %s classifier..." % (c) # make a new subplot for each classifier fig += 1 pl.subplot(ny, nx, fig) # select the clasifier clf = clfs[c] # enable saving of the estimates used for the prediction clf.ca.enable('estimates') # train with the known points clf.train(ds) # run the predictions on the test values pre = clf.predict(feat_test.T) # if ridge, use the prediction, otherwise use the values if c == 'Ridge Regression': # use the prediction res = np.asarray(pre) elif 'Nearest-Ne' in c: # Use the dictionaries with votes res = np.array([e[l1] for e in clf.ca.estimates]) \ / np.sum([e.values() for e in clf.ca.estimates], axis=1) elif c == 'Logistic Regression': # get out the values used for the prediction res = np.asarray(clf.ca.estimates) elif c in ['SMLR']: res = np.asarray(clf.ca.estimates[:, 1]) elif c in ['LDA', 'QDA'] or c.startswith('GNB'): # Since probabilities are logprobs -- just for # visualization of trade-off just plot relative # "trade-off" which determines decision boundaries if an # alternative log-odd value was chosen for a cutoff res = np.asarray(clf.ca.estimates[:, 1] - clf.ca.estimates[:, 0]) # Scale and position around 0.5 res = 0.5 + res/max(np.abs(res)) else: # get the probabilities from the svm res = np.asarray([(q[1][1] - q[1][0] + 1) / 2 for q in clf.ca.probabilities]) # reshape the results z = np.asarray(res).reshape((npoints, npoints)) # plot the predictions pl.pcolor(x, y, z, shading='interp') pl.clim(0, 1) pl.colorbar() # plot decision surfaces at few levels to emphasize the # topology pl.contour(x, y, z, [0.1, 0.4, 0.5, 0.6, 0.9], linestyles=['dotted', 'dashed', 'solid', 'dashed', 'dotted'], linewidths=1, colors='black', hold=True) # plot the training points pl.plot(ds.samples[ds.targets == 1, 0], ds.samples[ds.targets == 1, 1], "r.") pl.plot(ds.samples[ds.targets == 0, 0], ds.samples[ds.targets == 0, 1], "b.") pl.axis('tight') # add the title pl.title(c) if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() pymvpa2-2.2.0/doc/examples/pymvpa2.cfg000066400000000000000000000077271202542755000175720ustar00rootroot00000000000000### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Example configuration file to be used with PyMVPA # # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # This is a comprehensive list of all settings currently recognized by PyMVPA. # Users can add arbitrary additional settings, both in new and already existing # sections. [general] #debug = #verbose = #seed = 12345 [verbose] # causes the output of __str__ to be truncated to the given number of # characters truncate str = 200 # causes the output of __repr__ to be truncated to the given number of # characters truncate repr = 200 # # XXX The previous verbose section and verbose() should better be called info() # to not collide with the concept of verbosity. We would have messages of # types: debug, info, warning, error (familiar concepts that all can be # subsumed as verbosity. # comma-separated list of handlers, e.g. stdout #output = [error] #output = [warnings] # integer #bt = # integer #count = # comma-separated list of handlers, e.g. stdout #output = # Boolean (former: MVPA_NO_WARNINGS) suppress = no [debug] # comma-separated list of handlers, e.g. stdout #output = #metrics = # either to use custom (improved) exception handler to report # information about pymvpa useful during bug reporting #wtf = no [examples] interactive = yes [svm] # which SVM implementation to use by default: libsvm or shogun backend = libsvm [matplotlib] # override the default matplotlib's backend # backend = pdf [rpy] # to prevent stalled exectution of PyMVPA upon problems in R # session of R is always responding '1' whenever R asks for input. # 1 corresponds to "abort (with core dump, if enabled)". # Unfortunately such callback does not work reliably, thus disabled # by default interactive = yes # Control over warnings spit out by R modules. From help(options) If # 'warn' is negative all warnings are ignored. If 'warn' is zero # (the default) warnings are stored until the top-level function # returns. ... If 'warn' is one, warnings are printed as they occur. # If 'warn' is two or larger all warnings are turned into errors. # By default we want no warnings warn = -1 [externals] # whether to really raise an exception when an externals test fails _and_ # raising an exception was requested raise exception = True # whether to issue warning when an externals test fails _and_ # issuing a warning was requested issue warning = True # whether to retest the availability of an external dependency, depite an # already present (but possibly outdated) test result retest = no # options starting with 'have ' indicate the presence or absence of external # dependencies #have scipy = no [tests] # whether to perform tests where the outcome is not deterministic labile = yes # if enabled, the unit tests will not run multiple classifiers on the same # test, which reduces the time to run a full test significantly. quick = no # if enabled, unit tests consuming lots of memory will not automatically run # as part of the main unittest battery lowmem = no # verbosity level of the unittest runner verbosity = 1 # scale SNR of simulated data more than 1 to reduce failures of labile tests snr scale = 1.0 [doc] # whether to enhance the docstrings with base class and state information pimp docstrings = yes [data] # root directory where datasets from pymvpa.org reside. By default this is going # to be a directory 'data' in the installation path of PyMVPA #root = [datasets] # repr by default prints a complete content of the Dataset so it could # be inspected or stored as a string. For large datasets it might be # an overwhelming amount of textual information, so possible options are possible # full -- default, entire content; str -- use __str__ for __repr__. # Option is in effect at import time, i.e. change of it wouldn't effect after dataset # has already being loaded repr = full pymvpa2-2.2.0/doc/examples/searchlight.py000077500000000000000000000237041202542755000203560ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Searchlight on fMRI data ======================== .. index:: Searchlight The original idea of a spatial searchlight algorithm stems from a paper by :ref:`Kriegeskorte et al. (2006) `, and has subsequently been used in a number of studies. The most common use for a searchlight is to compute a full cross-validation analysis in each spherical region of interest (ROI) in the brain. This analysis yields a map of (typically) classification accuracies that are often interpreted or post-processed similar to a GLM statistics output map (e.g. subsequent analysis with inferential statistics). In this example we look at how this type of analysis can be conducted in PyMVPA. As always, we first have to import PyMVPA. """ from mvpa2.suite import * """As searchlight analyses are usually quite expensive in term of computational resources, we are going to enable some progress output to entertain us while we are waiting.""" # enable debug output for searchlight call if __debug__: debug.active += ["SLC"] """The next few calls load an fMRI dataset, while assigning associated class targets and chunks (experiment runs) to each volume in the 4D timeseries. One aspect is worth mentioning. When loading the fMRI data with :func:`~mvpa2.datasets.mri.fmri_dataset()` additional feature attributes can be added, by providing a dictionary with names and source pairs to the `add_fa` arguments. In this case we are loading a thresholded zstat-map of a category selectivity contrast for voxels ventral temporal cortex.""" # data path datapath = os.path.join(pymvpa_datadbroot, 'tutorial_data', 'tutorial_data', 'data') # source of class targets and chunks definitions attr = SampleAttributes(os.path.join(datapath, 'attributes.txt')) dataset = fmri_dataset( samples=os.path.join(datapath, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(datapath, 'mask_brain.nii.gz'), add_fa={'vt_thr_glm': os.path.join(datapath, 'mask_vt.nii.gz')}) """The dataset is now loaded and contains all brain voxels as features, and all volumes as samples. To precondition this data for the intended analysis we have to perform a few preprocessing steps (please note that the data was already motion-corrected). The first step is a chunk-wise (run-wise) removal of linear trends, typically caused by the acquisition equipment.""" poly_detrend(dataset, polyord=1, chunks_attr='chunks') """Now that the detrending is done, we can remove parts of the timeseries we are not interested in. For this example we are only considering volumes acquired during a stimulation block with images of houses and scrambled pictures, as well as rest periods (for now). It is important to perform the detrending before this selection, as otherwise the equal spacing of fMRI volumes is no longer guaranteed.""" dataset = dataset[np.array([l in ['rest', 'house', 'scrambledpix'] for l in dataset.targets], dtype='bool')] """The final preprocessing step is data-normalization. This is a required step for many classification algorithms. It scales all features (voxels) into approximately the same range and removes the mean. In this example, we perform a chunk-wise normalization and compute standard deviation and mean for z-scoring based on the volumes corresponding to rest periods in the experiment. The resulting features could be interpreted as being voxel salience relative to 'rest'.""" zscore(dataset, chunks_attr='chunks', param_est=('targets', ['rest']), dtype='float32') """After normalization is completed, we no longer need the 'rest'-samples and remove them.""" dataset = dataset[dataset.sa.targets != 'rest'] """But now for the interesting part: Next we define the measure that shall be computed for each sphere. Theoretically, this can be anything, but here we choose to compute a full leave-one-out cross-validation using a linear Nu-SVM classifier.""" # choose classifier clf = LinearNuSVMC() # setup measure to be computed by Searchlight # cross-validated mean transfer using an N-fold dataset splitter cv = CrossValidation(clf, NFoldPartitioner()) """In this example, we do not want to compute full-brain accuracy maps, but instead limit ourselves to a specific subset of voxels. We'll select all voxel that have a non-zero z-stats value in the localizer mask we loaded above, as center coordinates for a searchlight sphere. These spheres will still include voxels that did not pass the threshold. the localizer merely define the location of all to be processed spheres.""" # get ids of features that have a nonzero value center_ids = dataset.fa.vt_thr_glm.nonzero()[0] """Finally, we can run the searchlight. We'll perform the analysis for three different radii, each time computing an error for each sphere. To achieve this, we simply use the :func:`~mvpa2.measures.searchlight.sphere_searchlight` class, which takes any :term:`processing object` and a radius as arguments. The :term:`processing object` has to compute the intended measure, when called with a dataset. The :func:`~mvpa2.measures.searchlight.sphere_searchlight` object will do nothing more than generate small datasets for each sphere, feeding them to the processing object, and storing the result.""" # setup plotting parameters (not essential for the analysis itself) plot_args = { 'background' : os.path.join(datapath, 'anat.nii.gz'), 'background_mask' : os.path.join(datapath, 'mask_brain.nii.gz'), 'overlay_mask' : os.path.join(datapath, 'mask_vt.nii.gz'), 'do_stretch_colors' : False, 'cmap_bg' : 'gray', 'cmap_overlay' : 'autumn', # YlOrRd_r # pl.cm.autumn 'interactive' : cfg.getboolean('examples', 'interactive', True), } for radius in [0, 1, 3]: # tell which one we are doing print "Running searchlight with radius: %i ..." % (radius) """ Here we actually setup the spherical searchlight by configuring the radius, and our selection of sphere center coordinates. Moreover, via the `space` argument we can instruct the searchlight which feature attribute shall be used to determine the voxel neighborhood. By default, :func:`~mvpa2.datasets.mri.fmri_dataset()` creates a corresponding attribute called `voxel_indices`. Using the `mapper` argument it is possible to post-process the results computed for each sphere. Cross-validation will compute an error value per each fold, but here we are only interested in the mean error across all folds. Finally, on multi-core machines `nproc` can be used to enabled parallelization by setting it to the number of processes utilized by the searchlight (default value of `nproc`=`None` utilizes all available local cores). """ sl = sphere_searchlight(cv, radius=radius, space='voxel_indices', center_ids=center_ids, postproc=mean_sample()) """ Since we care about efficiency, we are stripping all attributes from the dataset that are not required for the searchlight analysis. This will offers some speedup, since it reduces the time that is spent on dataset slicing. """ ds = dataset.copy(deep=False, sa=['targets', 'chunks'], fa=['voxel_indices'], a=['mapper']) """ Finally, we actually run the analysis. The result is returned as a dataset. For the upcoming plots, we are transforming the returned error maps into accuracies. """ sl_map = sl(ds) sl_map.samples *= -1 sl_map.samples += 1 """ The result dataset is fully aware of the original dataspace. Using this information we can map the 1D accuracy maps back into "brain-space" (using NIfTI image header information from the original input timeseries. """ niftiresults = map2nifti(sl_map, imghdr=dataset.a.imghdr) """ PyMVPA comes with a convenient plotting function to visualize the searchlight amps. We are only looking at fMRI slices that are covered by the mask of ventral temproal cortex. """ fig = pl.figure(figsize=(12, 4), facecolor='white') subfig = plot_lightbox(overlay=niftiresults, vlim=(0.5, None), slices=range(23,31), fig=fig, **plot_args) pl.title('Accuracy distribution for radius %i' % radius) if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """The following figures show the resulting accuracy maps for the slices covered by the ventral temporal cortex mask. Note that each voxel value represents the accuracy of a sphere centered around this voxel. .. figure:: ../pics/ex_searchlight_vt_r0.* :align: center Searchlight (single element; univariate) accuracy maps for binary classification *house* vs. *scrambledpix*. .. figure:: ../pics/ex_searchlight_vt_r1.* :align: center Searchlight (sphere of neighboring voxels; 9 elements) accuracy maps for binary classification *house* vs. *scrambledpix*. .. figure:: ../pics/ex_searchlight_vt_r3.* :align: center Searchlight (radius 3 elements; 123 voxels) accuracy maps for binary classification *house* vs. *scrambledpix*. With radius 0 (only the center voxel is part of the part the sphere) there is a clear distinction between two distributions. The *chance distribution*, relatively symetric and centered around the expected chance-performance at 50%. The second distribution, presumambly of voxels with univariate signal, is nicely segregated from that. Increasing the searchlight size significantly blurrs the accuracy map, but also lead to an increase in classification accuracy. """ pymvpa2-2.2.0/doc/examples/searchlight_app.py000077500000000000000000000103141202542755000212070ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Parameterizable Python Scripting: Searchlight Example. ====================================================== Example demonstrating composition of analysis script with optional command line parameters and arguments to make the computation easily parameterizable. That would allow you to process multiple datasets and vary classifiers and/or parameters of the algorithm within some batch system scheduler. Searchlight analysis on an fMRI dataset is taken for the example of actual computation to be done. Run `searchlight.py --help` to see the list of available command line options. """ from mvpa2.suite import * def main(): """ Wrapped into a function call for easy profiling later on """ parser.usage = """\ %s [options] [] where targets+blocks is a text file that lists the class label and the associated block of each data sample/volume as a tuple of two integer values (separated by a single space). -- one tuple per line.""" \ % sys.argv[0] parser.option_groups = [opts.SVM, opts.KNN, opts.general, opts.common] # Set a set of available classifiers for this example opt.clf.choices=['knn', 'lin_nu_svmc', 'rbf_nu_svmc'] opt.clf.default='lin_nu_svmc' parser.add_options([opt.clf, opt.zscore]) (options, files) = parser.parse_args() if not len(files) in [3, 4]: parser.error("Please provide 3 or 4 files in the command line") sys.exit(1) verbose(1, "Loading data") # data filename dfile = files[0] # text file with targets and block definitions (chunks) cfile = files[1] # mask volume filename mfile = files[2] ofile = None if len(files)>=4: # outfile name ofile = files[3] # read conditions into an array (assumed to be two columns of integers) # TODO: We need some generic helper to read conditions stored in some # common formats verbose(2, "Reading conditions from file %s" % cfile) attrs = SampleAttributes(cfile, literallabels=True) verbose(2, "Loading volume file %s" % dfile) data = fmri_dataset(dfile, targets=attrs.targets, chunks=attrs.chunks, mask=mfile) # do not try to classify baseline condition # XXX this is only valid for our haxby8 example dataset and should # probably be turned into a proper --baselinelabel option that can # be used for zscoring as well. data = data[data.targets != 'rest'] if options.zscore: verbose(1, "Zscoring data samples") zscore(data, chunks_attr='chunks', dtype='float32') if options.clf == 'knn': clf = kNN(k=options.knearestdegree) elif options.clf == 'lin_nu_svmc': clf = LinearNuSVMC(nu=options.svm_nu) elif options.clf == 'rbf_nu_svmc': clf = RbfNuSVMC(nu=options.svm_nu) else: raise ValueError, 'Unknown classifier type: %s' % `options.clf` verbose(3, "Using '%s' classifier" % options.clf) verbose(1, "Computing") verbose(3, "Assigning a measure to be CrossValidation") # compute N-1 cross-validation with the selected classifier in each sphere cv = CrossValidation(clf, NFoldPartitioner(cvtype=options.crossfolddegree)) verbose(3, "Generating Searchlight instance") # contruct searchlight with 5mm radius # this assumes that the spatial pixdim values in the source NIfTI file # are specified in mm sl = sphere_searchlight(cv, radius=options.radius) # run searchlight verbose(3, "Running searchlight on loaded data") results = sl(data) if not ofile is None: # map the result vector back into a nifti image rimg = map2nifti(data, results) # save to file rimg.save(ofile) else: print results if __name__ == "__main__": main() pymvpa2-2.2.0/doc/examples/searchlight_dsm.py000077500000000000000000000050551202542755000212200ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ A searchlight computing a dissimilarity matrix measure ====================================================== .. index:: searchlight, cross-validation, dissimilarity matrix This example extends the minimal Searchlight example to use a dissimilarity matrix-based DatasetMetric to compute Searchlight-center significance. This is based on representational similarity analysis (RSA) as presented in :ref:`Kriegeskorte et al. (2008) `. First import all necessary parts of PyMVPA. """ from mvpa2.suite import * """Create a small artificial dataset.""" # overcomplicated way to generate an example dataset ds = normal_feature_dataset(perlabel=10, nlabels=2, nchunks=2, nfeatures=10, nonbogus_features=[3, 7], snr=5.0) dataset = dataset_wizard(samples=ds.samples, targets=ds.targets, chunks=ds.chunks) """Create a dissimilarity matrix based on the targets of the data points in our test dataset. This will allow us to see if there is a correlation between any given searchlight sphere and the experimental conditions.""" # create dissimilarity matrix using the 'confusion' distance # metric dsm = DSMatrix(dataset.targets, 'confusion') """Now it only takes three lines for a searchlight analysis.""" # setup measure to be computed in each sphere (correlation # distance between dissimilarity matrix and the dissimilarities # of a particular searchlight sphere across experimental # conditions), np.B. in this example between-condition # dissimilarity is also pearson's r (i.e., correlation distance) dsmetric = DSMMeasure(dsm, 'pearson', 'pearson') # setup searchlight with 5 mm radius and measure configured above sl = Searchlight(dsmetric, radius=5) # run searchlight on dataset sl_map = sl(dataset) print 'Best performing sphere error:', max(sl_map) """ If this analysis is done on a fMRI dataset using `NiftiDataset` the resulting searchlight map (`sl_map`) can be mapped back into the original dataspace and viewed as a brain overlay. :ref:`Another example ` shows a typical application of this algorithm. .. Mention the fact that it also is a special `SensitivityAnalyzer` """ pymvpa2-2.2.0/doc/examples/searchlight_minimal.py000077500000000000000000000050531202542755000220610ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Minimal Searchlight Example =========================== .. index:: searchlight, cross-validation The term :class:`~mvpa2.measures.searchlight.Searchlight` refers to an algorithm that runs a scalar :class:`~mvpa2.measures.base.Measure` on all possible spheres of a certain size within a dataset (that provides information about distances between feature locations). The measure typically computed is a cross-validation of a classifier performance (see :ref:`CrossValidation ` section in the tutorial). The idea to use a searchlight as a sensitivity analyzer on fMRI datasets stems from :ref:`Kriegeskorte et al. (2006) `. A searchlight analysis is can be easily performed. This examples shows a minimal draft of a complete analysis. First import a necessary pieces of PyMVPA -- this time each bit individually. """ import numpy as np from mvpa2.generators.partition import OddEvenPartitioner from mvpa2.clfs.svm import LinearCSVMC from mvpa2.measures.base import CrossValidation from mvpa2.measures.searchlight import sphere_searchlight from mvpa2.testing.datasets import datasets from mvpa2.mappers.fx import mean_sample """For the sake of simplicity, let's use a small artificial dataset.""" # Lets just use our tiny 4D dataset from testing battery dataset = datasets['3dlarge'] """Now it only takes three lines for a searchlight analysis.""" # setup measure to be computed in each sphere (cross-validated # generalization error on odd/even splits) cv = CrossValidation(LinearCSVMC(), OddEvenPartitioner()) # setup searchlight with 2 voxels radius and measure configured above sl = sphere_searchlight(cv, radius=2, space='myspace', postproc=mean_sample()) # run searchlight on dataset sl_map = sl(dataset) print 'Best performing sphere error:', np.min(sl_map.samples) """ If this analysis is done on a fMRI dataset using `NiftiDataset` the resulting searchlight map (`sl_map`) can be mapped back into the original dataspace and viewed as a brain overlay. :ref:`Another example ` shows a typical application of this algorithm. .. Mention the fact that it also is a special `SensitivityAnalyzer` """ pymvpa2-2.2.0/doc/examples/sensanas.py000077500000000000000000000114351202542755000176720ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Sensitivity Measure =================== .. index:: sensitivity Run some basic and meta sensitivity measures on the example fMRI dataset that comes with PyMVPA and plot the computed featurewise measures for each. The generated figure shows sensitivity maps computed by six sensitivity analyzers. We start by loading PyMVPA and the example fMRI dataset. """ from mvpa2.suite import * # load PyMVPA example dataset attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes_literal.txt')) dataset = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) """As with classifiers it is easy to define a bunch of sensitivity analyzers. It is usually possible to simply call `get_sensitivity_analyzer()` on any classifier to get an instance of an appropriate sensitivity analyzer that uses this particular classifier to compute and extract sensitivity scores. """ # define sensitivity analyzer sensanas = { 'a) ANOVA': OneWayAnova(postproc=absolute_features()), 'b) Linear SVM weights': LinearNuSVMC().get_sensitivity_analyzer( postproc=absolute_features()), 'c) I-RELIEF': IterativeRelief(postproc=absolute_features()), 'd) Splitting ANOVA (odd-even)': RepeatedMeasure( OneWayAnova(postproc=absolute_features()), OddEvenPartitioner()), 'e) Splitting SVM (odd-even)': RepeatedMeasure( LinearNuSVMC().get_sensitivity_analyzer(postproc=absolute_features()), OddEvenPartitioner()), 'f) I-RELIEF Online': IterativeReliefOnline(postproc=absolute_features()), 'g) Splitting ANOVA (nfold)': RepeatedMeasure( OneWayAnova(postproc=absolute_features()), NFoldPartitioner()), 'h) Splitting SVM (nfold)': RepeatedMeasure( LinearNuSVMC().get_sensitivity_analyzer(postproc=absolute_features()), NFoldPartitioner()), 'i) GNB Searchlight': sphere_gnbsearchlight(GNB(), NFoldPartitioner(cvtype=1), radius=0, errorfx=mean_match_accuracy) } """Now, we are performing some a more or less standard preprocessing steps: detrending, selecting a subset of the experimental conditions, normalization of each feature to a standard mean and variance.""" # do chunkswise linear detrending on dataset poly_detrend(dataset, polyord=1, chunks_attr='chunks') # only use 'rest', 'shoe' and 'bottle' samples from dataset dataset = dataset[np.array([l in ['rest', 'shoe', 'bottle'] for l in dataset.sa.targets], dtype='bool')] # zscore dataset relative to baseline ('rest') mean zscore(dataset, chunks_attr='chunks', param_est=('targets', ['rest']), dtype='float32') # remove baseline samples from dataset for final analysis dataset = dataset[dataset.sa.targets != 'rest'] """Finally, we will loop over all defined analyzers and let them compute the sensitivity scores. The resulting vectors are then mapped back into the dataspace of the original fMRI samples, which are then plotted.""" fig = 0 pl.figure(figsize=(14, 8)) keys = sensanas.keys() keys.sort() for s in keys: # tell which one we are doing print "Running %s ..." % (s) sana = sensanas[s] # compute sensitivies sens = sana(dataset) # I-RELIEF assigns zeros, which corrupts voxel masking for pylab's # imshow, so adding some epsilon :) smap = sens.samples[0] + 0.00001 # map sensitivity map into original dataspace orig_smap = dataset.mapper.reverse1(smap) masked_orig_smap = np.ma.masked_array(orig_smap, mask=orig_smap == 0) # make a new subplot for each classifier fig += 1 pl.subplot(3, 3, fig) pl.title(s) pl.imshow(masked_orig_smap[..., 0].T, interpolation='nearest', aspect=1.25, cmap=pl.cm.autumn) # uniform scaling per base sensitivity analyzer ## if s.count('ANOVA'): ## pl.clim(0, 30) ## elif s.count('SVM'): ## pl.clim(0, 0.055) ## else: ## pass pl.colorbar(shrink=0.6) if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ Output of the example analysis: .. image:: ../pics/ex_sensanas.* :align: center :alt: Various sensitivity analysis results """ pymvpa2-2.2.0/doc/examples/smellit.py000077500000000000000000000045571202542755000175370ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Simple Data-Exploration ======================= Example showing some possibilities of data exploration (i.e. to 'smell' data). """ from mvpa2.suite import * # load example fmri dataset ds = load_example_fmri_dataset() # only use the first 5 chunks to save some cpu-cycles ds = ds[ds.chunks < 5] # take a look at the distribution of the feature values in all # sample categories and chunks plot_feature_hist(ds, chunks_attr='chunks', bins=20, normed=True, xlim=(0, ds.samples.max())) # next only works with floating point data ds.samples = ds.samples.astype('float') # look at sample similiarity # Note, the decreasing similarity with increasing temporal distance # of the samples pl.figure() pl.subplot(121) plot_samples_distance(ds, sortbyattr='chunks') pl.title('Sample distances (sorted by chunks)') # similar distance plot, but now samples sorted by their # respective targets, i.e. samples with same targets are plotted # in adjacent columns/rows. # Note, that the first and largest group corresponds to the # 'rest' condition in the dataset pl.subplot(122) plot_samples_distance(ds, sortbyattr='targets') pl.title('Sample distances (sorted by targets)') # z-score features individually per chunk print 'Detrending data' poly_detrend(ds, polyord=2, chunks_attr='chunks') print 'Z-Scoring data' zscore(ds) pl.figure() pl.subplot(121) plot_samples_distance(ds, sortbyattr='chunks') pl.title('Distances: z-scored, detrended (sorted by chunks)') pl.subplot(122) plot_samples_distance(ds, sortbyattr='targets') pl.title('Distances: z-scored, detrended (sorted by targets)') if cfg.getboolean('examples', 'interactive', True): pl.show() # XXX add some more, maybe show effect of preprocessing """ Outputs of the example script. Data prior to preprocessing .. image:: ../pics/ex_smellit2.* :align: center :alt: Data prior preprocessing Data after minimal preprocessing .. image:: ../pics/ex_smellit3.* :align: center :alt: Data after z-scoring and detrending """ pymvpa2-2.2.0/doc/examples/smlr.py000077500000000000000000000063751202542755000170430ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Compare SMLR to Linear SVM Classifier ===================================== .. index:: SMLR, SVM Runs both classifiers on the the same dataset and compare their performance. This example also shows an example usage of confusion matrices and how two classifers can be combined. """ from mvpa2.suite import * if __debug__: debug.active.append('SMLR_') # features of sample data print "Generating samples..." nfeat = 10000 nsamp = 100 ntrain = 90 goodfeat = 10 offset = .5 # create the sample datasets samp1 = np.random.randn(nsamp,nfeat) samp1[:,:goodfeat] += offset samp2 = np.random.randn(nsamp,nfeat) samp2[:,:goodfeat] -= offset # create the pymvpa training dataset from the labeled features patternsPos = dataset_wizard(samples=samp1[:ntrain,:], targets=1) patternsNeg = dataset_wizard(samples=samp2[:ntrain,:], targets=0) trainpat = vstack((patternsPos, patternsNeg)) # create patters for the testing dataset patternsPos = dataset_wizard(samples=samp1[ntrain:,:], targets=1) patternsNeg = dataset_wizard(samples=samp2[ntrain:,:], targets=0) testpat = vstack((patternsPos, patternsNeg)) # set up the SMLR classifier print "Evaluating SMLR classifier..." smlr = SMLR(fit_all_weights=True) # enable saving of the estimates used for the prediction smlr.ca.enable('estimates') # train with the known points smlr.train(trainpat) # run the predictions on the test values pre = smlr.predict(testpat.samples) # calculate the confusion matrix smlr_confusion = ConfusionMatrix( labels=trainpat.UT, targets=testpat.targets, predictions=pre) # now do the same for a linear SVM print "Evaluating Linear SVM classifier..." lsvm = LinearNuSVMC(probability=1) # enable saving of the estimates used for the prediction lsvm.ca.enable('estimates') # train with the known points lsvm.train(trainpat) # run the predictions on the test values pre = lsvm.predict(testpat.samples) # calculate the confusion matrix lsvm_confusion = ConfusionMatrix( labels=trainpat.UT, targets=testpat.targets, predictions=pre) # now train SVM with selected features print "Evaluating Linear SVM classifier with SMLR's features..." keepInd = (np.abs(smlr.weights).mean(axis=1)!=0) newtrainpat = trainpat[:, keepInd] newtestpat = testpat[:, keepInd] # train with the known points lsvm.train(newtrainpat) # run the predictions on the test values pre = lsvm.predict(newtestpat.samples) # calculate the confusion matrix lsvm_confusion_sparse = ConfusionMatrix( labels=newtrainpat.UT, targets=newtestpat.targets, predictions=pre) print "SMLR Percent Correct:\t%g%% (Retained %d/%d features)" % \ (smlr_confusion.percent_correct, (smlr.weights!=0).sum(), np.prod(smlr.weights.shape)) print "linear-SVM Percent Correct:\t%g%%" % \ (lsvm_confusion.percent_correct) print "linear-SVM Percent Correct (with %d features from SMLR):\t%g%%" % \ (keepInd.sum(), lsvm_confusion_sparse.percent_correct) pymvpa2-2.2.0/doc/examples/som.py000077500000000000000000000076601202542755000166620ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Self-organizing Maps ==================== .. index:: mapper, self-organizing map, SOM, SimpleSOMMapper This is a demonstration of how a self-organizing map (SOM), also known as a Kohonen network, can be used to map high-dimensional data into a two-dimensional representation. For the sake of an easy visualization 'high-dimensional' in this case is 3D. In general, SOMs might be useful for visualizing high-dimensional data in terms of its similarity structure. Especially large SOMs (i.e. with large number of Kohonen units) are known to perform mappings that preserve the topology of the original data, i.e. neighboring data points in input space will also be represented in adjacent locations on the SOM. The following code shows the 'classic' color mapping example, i.e. the SOM will map a number of colors into a rectangular area. """ from mvpa2.suite import * """ First, we define some colors as RGB values from the interval (0,1), i.e. with white being (1, 1, 1) and black being (0, 0, 0). Please note, that a substantial proportion of the defined colors represent variations of 'blue', which are supposed to be represented in more detail in the SOM. """ colors = np.array( [[0., 0., 0.], [0., 0., 1.], [0., 0., 0.5], [0.125, 0.529, 1.0], [0.33, 0.4, 0.67], [0.6, 0.5, 1.0], [0., 1., 0.], [1., 0., 0.], [0., 1., 1.], [1., 0., 1.], [1., 1., 0.], [1., 1., 1.], [.33, .33, .33], [.5, .5, .5], [.66, .66, .66]]) # store the names of the colors for visualization later on color_names = \ ['black', 'blue', 'darkblue', 'skyblue', 'greyblue', 'lilac', 'green', 'red', 'cyan', 'violet', 'yellow', 'white', 'darkgrey', 'mediumgrey', 'lightgrey'] """ Now we can instantiate the mapper. It will internally use a so-called Kohonen layer to map the data onto. We tell the mapper to use a rectangular layer with 20 x 30 units. This will be the output space of the mapper. Additionally, we tell it to train the network using 400 iterations and to use custom learning rate. """ som = SimpleSOMMapper((20, 30), 400, learning_rate=0.05) """ Finally, we train the mapper with the previously defined 'color' dataset. """ som.train(colors) """ Each unit in the Kohonen layer can be treated as a pointer into the high-dimensional input space, that can be queried to inspect which input subspaces the SOM maps onto certain sections of its 2D output space. The color-mapping generated by this example's SOM can be shown with a single matplotlib call: """ pl.imshow(som.K, origin='lower') """ And now, let's take a look onto which coordinates the initial training prototypes were mapped to. The get those coordinates we can simply feed the training data to the mapper and plot the output. """ mapped = som(colors) pl.title('Color SOM') # SOM's kshape is (rows x columns), while matplotlib wants (X x Y) for i, m in enumerate(mapped): pl.text(m[1], m[0], color_names[i], ha='center', va='center', bbox=dict(facecolor='white', alpha=0.5, lw=0)) """ The text labels of the original training colors will appear at the 'mapped' locations in the SOM -- and should match with the underlying color. """ # show the figure if cfg.getboolean('examples', 'interactive', True): pl.show() """ The following figure shows an exemplary solution of the SOM mapping of the 3D color-space onto the 2D SOM node layer: .. image:: ../pics/ex_som.* :align: center :alt: Color-space mapping by a self-organizing map. """ pymvpa2-2.2.0/doc/examples/start_easy.py000077500000000000000000000033501202542755000202320ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Tiny Example of a Full Cross-Validation ======================================= Very, very simple example showing a complete cross-validation procedure with no fancy additions whatsoever. """ # get PyMVPA running from mvpa2.suite import * # load PyMVPA example dataset attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes_literal.txt')) dataset = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) # do chunkswise linear detrending on dataset poly_detrend(dataset, polyord=1, chunks_attr='chunks') # zscore dataset relative to baseline ('rest') mean zscore(dataset, chunks_attr='chunks', param_est=('targets', ['rest'])) # select class face and house for this demo analysis # would work with full datasets (just a little slower) dataset = dataset[np.array([l in ['face', 'house'] for l in dataset.sa.targets], dtype='bool')] # setup cross validation procedure, using SMLR classifier cv = CrossValidation(SMLR(), OddEvenPartitioner()) # and run it error = np.mean(cv(dataset)) # UC: unique chunks, UT: unique targets print "Error for %i-fold cross-validation on %i-class problem: %f" \ % (len(dataset.UC), len(dataset.UT), error) pymvpa2-2.2.0/doc/examples/svdclf.py000077500000000000000000000067011202542755000173400ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Classification of SVD-mapped Datasets ===================================== .. index:: mapper, SVD, MappedClassifier Demonstrate the usage of a dataset mapper performing data projection onto singular value components within a cross-validation -- for *any* classifier. """ from mvpa2.suite import * if __debug__: debug.active += ["REPM"] # # load PyMVPA example dataset # attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes_literal.txt')) dataset = fmri_dataset(os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) # # preprocessing # # do chunkswise linear detrending on dataset poly_detrend(dataset, polyord=1, chunks_attr='chunks') # only use 'rest', 'cats' and 'scissors' samples from dataset dataset = dataset[np.array([ l in ['rest', 'cat', 'scissors'] for l in dataset.targets], dtype='bool')] # zscore dataset relative to baseline ('rest') mean zscore(dataset, chunks_attr='chunks', param_est=('targets', ['rest']), dtype='float32') # remove baseline samples from dataset for final analysis dataset = dataset[dataset.sa.targets != 'rest'] # Specify the class of a base classifier to be used Clf = LinearCSVMC # And create the instance of SVDMapper to be reused svdmapper = SVDMapper() """Lets create a generator of a `ChainMapper` which would first perform SVD and then subselect the desired range of components.""" get_SVD_sliced = lambda x: ChainMapper([svdmapper, StaticFeatureSelection(x)]) """Now we can define a list of some classifiers: a simple one and several classifiers with built-in SVD transformation and selection of corresponding SVD subspaces""" clfs = [('All orig.\nfeatures (%i)' % dataset.nfeatures, Clf()), ('All Comps\n(%i)' % (dataset.nsamples \ - (dataset.nsamples / len(dataset.UC)),), MappedClassifier(Clf(), svdmapper)), ('First 5\nComp.', MappedClassifier(Clf(), get_SVD_sliced(slice(0, 5)))), ('First 30\nComp.', MappedClassifier(Clf(), get_SVD_sliced(slice(0, 30)))), ('Comp.\n6-30', MappedClassifier(Clf(), get_SVD_sliced(slice(5, 30))))] # run and visualize in barplot results = [] labels = [] for desc, clf in clfs: print desc.replace('\n', ' ') cv = CrossValidation(clf, NFoldPartitioner()) res = cv(dataset) # there is only one 'feature' i.e. the error in the returned # dataset results.append(res.samples[:,0]) labels.append(desc) plot_bars(results, labels=labels, title='Linear C-SVM classification (cats vs. scissors)', ylabel='Mean classification error (N-1 cross-validation, 12-fold)', distance=0.5) if cfg.getboolean('examples', 'interactive', True): pl.show() """ Output of the example analysis: .. image:: ../pics/ex_svdclf.* :align: center :alt: Generalization performance on the selected PCs. """ pymvpa2-2.2.0/doc/examples/topo_plot.py000077500000000000000000000033661202542755000201020ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Generating Topography plots =========================== Example demonstrating a topography plot.""" from mvpa2.suite import * # Sanity check if we have griddata available externals.exists("griddata", raise_=True) # EEG example splot pl.subplot(1, 2, 1) # load the sensor information from their definition file. # This file has sensor names, as well as their 3D coordinates sensors=XAVRSensorLocations(os.path.join(pymvpa_dataroot, 'xavr1010.dat')) # make up some artifical topography # 'enable' to channels, all others set to off ;-) topo = np.zeros(len(sensors.names)) topo[sensors.names.index('O1')] = 1 topo[sensors.names.index('F4')] = 1 # plot with sensor locations shown plot_head_topography(topo, sensors.locations(), plotsensors=True) # MEG example plot pl.subplot(1, 2, 2) # load MEG sensor locations sensors=TuebingenMEGSensorLocations( os.path.join(pymvpa_dataroot, 'tueb_meg_coord.xyz')) # random values this time topo = np.random.randn(len(sensors.names)) # plot without additional interpolation plot_head_topography(topo, sensors.locations(), interpolation='nearest') if cfg.getboolean('examples', 'interactive', True): # show all the cool figures pl.show() """ The ouput of the provided example should look like .. image:: ../pics/ex_topo_plot.* :align: center :alt: Topography plot of MEG data """ pymvpa2-2.2.0/doc/misc/000077500000000000000000000000001202542755000146135ustar00rootroot00000000000000pymvpa2-2.2.0/doc/misc/asciiart.txt000066400000000000000000000002551202542755000171550ustar00rootroot00000000000000 ____ __ __ _ _ ____ _ ( _ \ ( \/ )( ) ( )( _ \ (_) )___/_ _ ) ( \ \/ / )___/ /___\ (__) ( ) )(_/\/\_) \__/ (__) (_) (_) \ / (_/ pymvpa2-2.2.0/doc/misc/codeswarm.config000066400000000000000000000051031202542755000177650ustar00rootroot00000000000000# This is a sample configuration file for code_swarm # Frame width Width=480 # Frame height Height=360 # Input file InputFile=../../build/swarm/git.xml # Particle sprite file ParticleSpriteFile=src/particle.png #Font Settings Font=SansSerif FontSize=12 BoldFontSize=14 # Project time per frame MillisecondsPerFrame=21600000 # Maximum number of Background processes MaxThreads=4 # Optional Method instead of MillisecondsPerFrame #FramesPerDay=4 # Background in R,G,B Background=0,0,0 # Color assignment rules # Keep in order, do not skip numbers. Numbers start # at 1. # # Pattern: "Label", "regex", R,G,B, R,G,B # Label is optional. If it is omitted, the regex # will be used. # ColorAssign1="Examples","doc/examples/.*", 0,255,255, 0,255,255 ColorAssign2="Docs","doc/.*\.(rst,txt)", 0,0,255, 0,0,255 ColorAssign3="Tests",".*test_.*\.py", 0,255,0, 0,255,0 ColorAssign4="Datasets","mvpa/dataset.*", 255,0,255, 255,0,255 ColorAssign5="Classifiers","mvpa/clf.*", 255,160,65, 255,160,65 ColorAssign6="Mappers","mvpa/.*mapper.*\.py", 255,0,0, 255,0,0 ColorAssign7="MVPA Generic",".*", 255,255,0, 255,255,0 # Save each frame to an image? TakeSnapshots=True # Where to save each frame SnapshotLocation=../../build/swarm/frames/code_swarm-#####.png # Draw names (combinatory) : # Draw sharp names? DrawNamesSharp=true # And draw a glow around names? (Runs slower) DrawNamesHalos=true # Draw files (combinatory) : # Draw sharp files DrawFilesSharp=false # Draw fuzzy files DrawFilesFuzzy=true # Draw jelly files DrawFilesJelly=false # Show the Legend at start ShowLegend=true # Show the History at start ShowHistory=true # Show the Date at start ShowDate=true # Show edges between authors and files, mostly for debug purpose ShowEdges=false # Turn on Debug counts. ShowDebug=false # Natural distance of files to people EdgeLength=75 # Amount of life to decrement EdgeDecrement=-2 FileDecrement=-2 PersonDecrement=-1 #Speeds. #Optional: NodeSpeed=7.0, If used, FileSpeed and PersonSpeed need not be set. # FileSpeed=7.0 PersonSpeed=2.0 #Masses FileMass=1.0 PersonMass=10.0 # Life of an Edge EdgeLife=250 # Life of a File FileLife=200 # Life of a Person PersonLife=255 # Highlight percent. # This is the amount of time that the person or # file will be highlighted. HighlightPct=5 ## Physics engine selection and configuration # Directory physics engine config files reside in. PhysicsEngineConfigDir=physics_engine # Force calculation algorithms ("PhysicsEngineLegacy", "PhysicsEngineSimple"...) : PhysicsEngineSelection=PhysicsEngineLegacy # OpenGL is experimental. Use at your own risk. UseOpenGL=false pymvpa2-2.2.0/doc/misc/emacs000066400000000000000000000122101202542755000156220ustar00rootroot00000000000000;; emacs: -*- mode: emacs-lisp; indent-tabs-mode: nil -*- ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;; ; ; See COPYING file distributed along with the PyMVPA package for the ; copyright and license terms. ; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;;; ;; ;; ;; This file is to help PyMVPA users who use emacs for their needs. ;; It enables suggested modes (if available), and sets up environment ;; variables needed by Python and pylint ;; ;; Recommended usage: ;; ;; * symlink this file as .emacs.local into the root of PyMVPA project: ;; ln -s doc/misc/emacs .emacs.local ;; ;; * add following snippet into your .emacs to enable loading of local ;; emacs configuration: ;; (push "." load-path) ;add current path ;; (load ".emacs.local" t) ;; (pop load-path) ;clean up ;; * for flymake to work correctly, you would need to have epylint script ;; installed anywhere in the PATH. You can obtain the script from ;; ;; http://git.onerussian.com/?p=etc/emacs.git;a=blob;f=.emacs.d/bin/epylint;hb=HEAD ;; ;; Now, whenever you start emacs in the root directory of PyMVPA project, ;; it should load .emacs.local and setup suggested Emacs environment. ;; ;; Disclaimer: this config file is not extensively tested and was ripped away ;; from Yaroslav's .emacs configuration available from ;; http://git.onerussian.com/?p=etc/emacs.git;a=summary (setenv "PYTHONPATH" (expand-file-name default-directory)) (setenv "PYLINTRC" (concat (expand-file-name default-directory) "doc/misc/pylintrc")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Python ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Set IPython to be the python command and give it arguments (when (locate-library "python-mode") (when (locate-library "ipython") (require 'ipython) (when (locate-library "ansi-color") (add-hook 'py-shell-hook 'my-activate-ansi-colors))) ;; We want pylint call (add-hook 'python-mode-hook '(lambda () (when (and (stringp (buffer-file-name)) (not (string-match ".*/tmp/python-.*" (buffer-file-name)))) (when (locate-library "pylint") (load-library "pylint") (local-set-key "\C-xc" 'pylint) ) (when (locate-library "pymacs") (load-library "pymacs") (when (pymacs-load "ropemacs" "rope-" t) (ropemacs-mode t) (set ropemacs-guess-project t))) (when (not indent-tabs-mode) (when (locate-library "show-wspace") (when (not show-ws-highlight-tabs-p) (show-ws-toggle-show-tabs)))) (when (locate-library "outline") (defun py-outline-level () "This is so that `current-column` DTRT in otherwise-hidden text" ;; from ada-mode.el (let (buffer-invisibility-spec) (save-excursion (beginning-of-line) (skip-chars-forward "\t ") (/ (current-column) py-indent-offset)))) ;; this fragment originally came from the web somewhere, but the outline-regexp ;; was horribly broken and is broken in all instances of this code floating ;; around. Finally fixed by Charl P. Botha ;; enable our level computation (setq outline-level 'py-outline-level) ;;(setq outline-regexp "[^ tn]|[ t]*(def[ t]+|class[ t]+)") ;;(setq outline-regexp "\\([ \t]*\n\\)?[ \t]*\\(if\\|for\\|def\\|class\\)[ \t]+.*[:\\\][ \t]*\\(#.*\\)?$") ;; (setq outline-regexp "\\(^[ \t]*\n\\)?[ \t]*\\(if\\|for\\|def\\|class\\|else\\|elif\\|try\\|except\\|finally\\)") ;; (setq outline-regexp "\\(^[ \t]*\n\\)?[ \t]*\\(def\\|class\\|@\\)") (setq outline-regexp "\\([ \t]*\\(def\\|class\\|@\\)\\|^#\\)") ;; without explicit keywords: ;;(setq outline-regexp "^[ \t\n]*\\([^ \t]+\\)[ \t]+.*[:\\\][ \t]*\\(#.*\\)?$") ;; custom shortcuts ;;(outline-shortcuts) ;; turn on outline mode (outline-minor-mode t) ;; initially hide all but the headers (hide-body) ) (show-paren-mode 1) (flymake-mode 1) ))) ;hook ) ;python-mode ;; Lets enable flymake + pylint tandem (when (load "flymake" t) (defun flymake-pylint-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "epylint" (list local-file)))) (add-to-list 'flymake-allowed-file-name-masks '("\\.py\\'" flymake-pylint-init)) ;; helper to put pylint errors into the status line ;; borrowed from ;; http://plope.com/Members/chrism/flymake-mode (load "flymake-cursor" t) (add-hook 'find-file-hook 'flymake-find-file-hook) ) (setq enable-local-variables t enable-local-eval t search-highlight t ;highlight found matches query-replace-highlight t ;highlight found matches tab-width 4 show-trailing-whitespace t ;show trailing spaces by default inhibit-startup-message t ;ok I've seen the copyleft &c ) (custom-set-variables '(safe-local-variable-values (quote ((py-indent-offset . 4))))) pymvpa2-2.2.0/doc/misc/epydoc.conf000066400000000000000000000105311202542755000167450ustar00rootroot00000000000000[epydoc] # Epydoc section marker (required by ConfigParser) # The list of objects to document. Objects can be named using # dotted names, module filenames, or package directory names. # Alases for this option include "objects" and "values". modules: mvpa # The type of output that should be generated. Should be one # of: html, text, latex, dvi, ps, pdf. output: html # The path to the output directory. May be relative or absolute. target: build/html/api # An integer indicating how verbose epydoc should be. The default # value is 0; negative values will supress warnings and errors; # positive values will give more verbose output. verbosity: 0 # A boolean value indicating that Epydoc should show a tracaback # in case of unexpected error. By default don't show tracebacks debug: 0 # If True, don't try to use colors or cursor control when doing # textual output. The default False assumes a rich text prompt simple-term: 0 ### Generation options # The default markup language for docstrings, for modules that do # not define __docformat__. Defaults to epytext. docformat: restructuredtext # Whether or not parsing should be used to examine objects. parse: yes # Whether or not introspection should be used to examine objects. introspect: no # Don't examine in any way the modules whose dotted name match this # regular expression pattern. #exclude # Don't perform introspection on the modules whose dotted name match this # regular expression pattern. #exclude-introspect # Don't perform parsing on the modules whose dotted name match this # regular expression pattern. #exclude-parse # The format for showing inheritance objects. # It should be one of: 'grouped', 'listed', 'included'. inheritance: listed # Whether or not to inclue private variables. (Even if included, # private variables will be hidden by default.) private: yes # Whether or not to list each module's imports. imports: yes # Whether or not to include syntax highlighted source code in # the output (HTML only). sourcecode: yes # Whether or not to includea a page with Epydoc log, containing # effective option at the time of generation and the reported logs. include-log: no ### Output options # The documented project's name. name: PyMVPA: Python MultiVariate Pattern Analysis # The CSS stylesheet for HTML output. Can be the name of a builtin # stylesheet, or the name of a file. css: white # The documented project's URL. url: http://www.pymvpa.org # HTML code for the project link in the navigation bar. If left # unspecified, the project link will be generated based on the # project's name and URL. #link: My Cool Project # The "top" page for the documentation. Can be a URL, the name # of a module or class, or one of the special names "trees.html", # "indices.html", or "help.html" #top: os.path # An alternative help file. The named file should contain the # body of an HTML file; navigation bars will be added to it. #help: my_helpfile.html # Whether or not to include a frames-based table of contents. frames: yes # Whether each class should be listed in its own section when # generating LaTeX or PDF output. separate-classes: no ### API linking options # Define a new API document. A new interpreted text role # will be created #external-api: epydoc # Use the records in this file to resolve objects in the API named NAME. #external-api-file: epydoc:api-objects.txt # Use this URL prefix to configure the string returned for external API. #external-api-root: epydoc:http://epydoc.sourceforge.net/api ### Graph options # The list of graph types that should be automatically included # in the output. Graphs are generated using the Graphviz "dot" # executable. Graph types include: "classtree", "callgraph", # "umlclass". Use "all" to include all graph types graph: all # The path to the Graphviz "dot" executable, used to generate # graphs. dotpath: /usr/bin/dot # The name of one or more pstat files (generated by the profile # or hotshot module). These are used to generate call graphs. pstat: build/main.pstats # Specify the font used to generate Graphviz graphs. # (e.g., helvetica or times). graph-font: Helvetica # Specify the font size used to generate Graphviz graphs. graph-font-size: 10 ### Return value options # The condition upon which Epydoc should exit with a non-zero # exit status. Possible values are error, warning, docstring_warning #fail-on: error pymvpa2-2.2.0/doc/misc/flexds_transition_status.txt000066400000000000000000000062221202542755000225200ustar00rootroot00000000000000This file documents the current state of the transition to the new dataset implementation. May the source be with us! Examples -------- clfs_examples.py broken (SVM cannot handle literallabels) curvefitting.py pass erp_plot.py pass eventrelated.py broken (event-stuff is waiting for new mappers) gpr_model_selection0.py broken by design gpr.py pass kerneldemo.py pass match_distribution.py pass mri_plot.py pass permutation_test.py pass projections.py pass searchlight_2d.py pass searchlight_dsm.py broken (waiting for new-style mapper) searchlight_minimal.py broken (waiting for new-style mapper) searchlight.py pass sensanas.py pass smellit.py pass smlr.py pass som.py pass start_easy.py pass svdclf.py broken (waiting for new-style mappers) topo_plot.py pass Unit tests ---------- test_args.py pass test_arraymapper.py pass test_atlases.py pass test_base.py pass test_boxcarmapper.py pass test_clfcrossval.py pass test_clf.py pass (SG cannot handle literal labels, TreeClassifier relies on labels_map) test_cmdline.py pass test_config.py pass test_datameasure.py pass (sg literal labels) test_datasetfx.py pass test_datasetfx_sp.py pass test_datasetng.py pass test_dataset.py broken by design (merge remaining tests elsewhere) test_dochelpers.py pass test_eepdataset.py pass (missing test) test_enet.py broken (literal labels, so Rpy complaints Numeric/NumPy arrays containing numpy.ndarray are not supported) test_externals.py pass test_hamster.py pass test_icamapper.py pass test_ifs.py pass test_iohelpers.py pass test_kernel.py pass test_knn.py pass test_lars.py pass (same as for _enet) test_meg.py pass test_neighbor.py pass test_niftidataset.py pass (some test could be re-added and moved elsewhere) test_params.py pass test_perturbsensana.py pass test_plr.py pass test_procrust.py pass test_regr.py pass test_report.py pass test_rfe.py pass test_ridge.py pass test_samplegroupmapper.py pass test_searchlight.py pass test_smlr.py pass test_som.py pass test_splitsensana.py pass test_splitter.py pass test_state.py pass test_stats.py pass test_stats_sp.py pass test_suite.py pass test_support.py pass test_svdmapper.py pass test_svm.py pass test_transerror.py pass (sg literal labels, testAUC) test_transformers.py pass test_verbosity.py pass test_waveletmapper.py pass test_zscoremapper.py pass pymvpa2-2.2.0/doc/misc/header.py000066400000000000000000000006501202542755000164160ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """""" __docformat__ = 'restructuredtext' pymvpa2-2.2.0/doc/misc/ipy_profile_pymvpa.py000066400000000000000000000021371202542755000211050ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PyMVPA mode for IPython. """ __docformat__ = 'restructuredtext' from IPython import ipapi # The import below effectively obsoletes your old-style ipythonrc[.ini], # so consider yourself warned! import ipy_defaults import mvpa2 def main(): ip = ipapi.get() # PyMVPA specific ip.ex('import mvpa2') # and now the whole suite # but no, since ipython segfaults (tested with version 0.8.4) # the whole things seems to be related to RPy and friends # running the same command after IPython startup is completed # is no problem, though. #ip.ex('from mvpa2.suite import *') print """ ########################### # Welcome to PyMVPA %s # ########################### """ % mvpa2.__version__ main() pymvpa2-2.2.0/doc/misc/kernels.tex000066400000000000000000000412301202542755000170000ustar00rootroot00000000000000\documentclass[a4paper,11pt]{article} \usepackage[latin1]{inputenc} \usepackage[english]{babel} \usepackage{epsfig} \usepackage{amsmath} \usepackage{amsfonts} \newcommand\R{{\mathbb R}} \newcommand\x{{\mathbf x}} \newcommand\X{{\mathbf X}} \newcommand\K{{\mathbf K}} \newcommand\J{{\mathbf J}} \newcommand\LL{{\mathbf L}} \newcommand\ELL{{\Ivec \ell}} %%\newcommand\L{{\mathbf L}} %%\DeclareMathOperator*{\argmax}{arg\,max} %% \DeclareMathOperator*{\argmax}{argmax} %% (argmax wihtouth mid space) \DeclareMathOperator*{\argmin}{arg\,min} \DeclareMathOperator*{\var}{var} \DeclareMathOperator*{\dm}{dm} \newcommand{\Rvec}[1]{{\bf #1}} \newcommand{\Ivec}[1]{\mbox{\boldmath $#1$}} \title{Kernels} \author{Emanuele Olivetti} \begin{document} \maketitle \section{Introduction} This document gives a detailed description of kernels implemented in PyMVPA together with derivation of their gradients. These kernels are used mainly by Gaussian Process Regression but can be of use for other kernel methods. Gradients are useful when trying to maximize the marginal likelihood of a Gaussian Process, i.e., during model selection. In some cases a further reparametrization in log scale is provided in order to reduce numerical stability issues when computing likelihoods. The following notation and definitions are used: \begin{itemize} \item $\x \in \R^D$ : a $D$-dimensional column vector, $\x = (x_1,\ldots,x_D)$. \item $\X = (\x_1^{\top},\ldots,\x_N^{\top})$ : a $N \times D$ matrix where each row is a $D$-dimensional vector. $\X$ is also called set of \emph{samples}. $\X_{* i}$ indicates the $i$-th column of $\X$ and is a column vector. $\X_{j *}$ indicates the $j$-th row of $\X$ and is a row vector. \item $k: \R^D \times \R^D \rightarrow \R$ : a covariance (or kernel) function. \item $\K(\X,\X')$ : the matrix extension of $k$, i.e., $\K_{pq} = k(\X_{*p},\X'_{*q})$. If $\X$ is a $N \times D$ matrix and $\X'$ is $N' \times D$ then $\K(\X,\X')$ is a $N \times N'$ matrix. \item $\J_{n,m}$ : the $n \times m$ matrix of ones, i.e., a matrix where each element is 1. \item $\|\mathbf{z}\|_p$ : the $p$-norm of vector $\mathbf{z}$ defined as $\|\mathbf{z}\|_p = (\sum_{i=1}^D \|z_i\|^p)^{\frac{1}{p}}$. Euclidean norm is $p=2$, then $\|\mathbf{z}\|_2 = \sqrt{\mathbf{z}^{\top}\mathbf{z}} = \sqrt{\sum_{i=1}^D z_i^2}$. \item $\|\mathbf{z},\mathbf{w}\|_p$ : the \emph{weighted} $p$-norm of vector $\mathbf{z}$ defined as $\|\mathbf{z},\mathbf{w}\|_p = (\sum_{i=1}^D w_i|z_i|^p)^{\frac{1}{p}}$. Euclidean norm is $p=2$, then $\|\mathbf{z},\mathbf{w}\|_2 = \sqrt{\mathbf{z}^{\top} \mathbf{W}^{-1} \mathbf{z}} = \sqrt{\sum_{i=1}^D w_i z_i^2}$, where $\mathbf{W} = diag(\mathbf{w})$. \item $\dm(\X,\X')$ : the \emph{Euclidean distance matrix} between $\X$ and $\X'$ defined element by element as $\dm(\X,\X')_{pq} = \|\X_{p *} - \X'_{q *}\|_2 = \sqrt{\sum_{i=1}^D (\X_{p i} - \X'_{q i})^2}$. If $\X$ is a $N \times D$ matrix and $\X'$ is $N' \times D$ then $\dm(\X,\X1)$ is a $N \times N'$ matrix. Note that $\dm(\X,X')$ is the square root of what it is usually called ``distance matrix''. \item $\dm(\X,\X',\mathbf{w})$ : the \emph{weighted} Euclidean distance matrix between $\X$ and $\X'$ defined element by element as $\dm(\X,\X',\mathbf{w})_{pq} = \|(\X_{p *} - \X'_{q *})^{\top}, \mathbf{w}\|_2 = \sqrt{\sum_{i=1}^D w_i(\X_{p i} - \X'_{q i})^2}$ through the weight vector $\mathbf{w} \in \R^D$. It is straightforward that $\dm(\X,\X') = \dm(\X,\X',\mathbf{J}_{D,1})$. \item $\X \bullet \mathbf{Y}$ : the Hadamard (or Schur) matrix product, i.e. the entry-wise product between matrices of the same size. Let $\mathbf{Z} = \X \bullet \mathbf{Y}$, then $z_{ij} = x_{ij} y_{ij}$. \item $\X^{\alpha}$ : $(\X^{\alpha})_{ij} = (X_{ij})^{\alpha}$. \end{itemize} \section{Constant kernel} $$k(\x,\x') = \sigma_0^2$$ where $\sigma_0 \ge 0$ is the standard deviation of the Gaussian prior probability $\mathcal{N}(0,\sigma_0^2)$ of the value of the constant. $$\K(\X,\X') = \sigma_0^2 \J_{N,N'}$$ $$\mathbf{\Theta} = \{\sigma_0\}$$ $$\frac{\partial k}{\partial \sigma_0}(\x,\x') = 2\sigma_0$$ $$\frac{\partial \K}{\partial \sigma_0} = 2\sigma_0 \J_{N,N'}$$ $$A = \sigma_0^2$$ $$A \ge 0$$ $$\mathbf{\Theta}^* = \{A\}$$ $$k(\x,\x') = A$$ $$\K(\X,\X') = A \J_{N,N'}$$ $$\frac{\partial k}{\partial A} = 1$$ $$\nabla_A \K = \frac{\partial \K}{\partial A} = \J_{N,N'}$$ Note that using $A$ as hyperparameter the gradient becomes constant. \section{Linear kernel} Let $\Ivec{\Sigma}_p$ be the $D \times D$ covariance matrix of the Gaussian prior probability $\mathcal{N}(\Ivec{0},\Ivec{\Sigma}_p)$ of the weights of the Bayesian linear regression. $$k(\x,\x') = \x^{\top} \Ivec{\Sigma}_p \x' + \sigma_2^2$$ $$\K(\X,\X') = \X \Ivec{\Sigma}_p \X'^{\top} + \Ivec{I}\sigma_0^2$$ In order to simplify formulas we assume $\Ivec{\Sigma}_p$ is diagonal, i.e., $\Ivec{\Sigma}_p = diag(\Ivec{\sigma}^2_p)$ where $\Ivec{\sigma}^2_p = ({\sigma^2_p}_1,\ldots,{\sigma^2_p}_D)$: $$k(\x,\x') = \sum_{i=1}^D {\sigma^2_p}_i x_i x'_i + \sigma_0^2$$ $$\mathbf{\Theta} = \{{\sigma_p}_1,\ldots,{\sigma_p}_D,\sigma_0\}$$ $$\frac{\partial k}{\partial {\sigma_p}_i} = 2 {\sigma_p}_i x_i x'_i$$ $$A_i = {\sigma_p^2}_i$$ $$A_i \ge 0$$ $$\mathbf{A} = (A_1,\ldots,A_D)^{\top}$$ $$\frac{\partial k}{\partial \sigma_0} = 2 \sigma_0$$ $$B = \sigma_0^2$$ $$\mathbf{\Theta}^* = \{ \mathbf{A} , B\}$$ $$k(\x,\x') = \x^{\top} diag(\mathbf{A}) \x' + B$$ $$\K(\X,\X') = \X diag(\mathbf{A}) \X'^{\top} + \Ivec{I}B$$ $$\frac{\partial k}{\partial A_i} = x_i x'_i$$ $$\frac{\partial \K}{\partial A_i} = \X_{* i} {\X'_{* i}}^{\top}$$ $$\nabla_{\mathbf{A}} \K = ( \X_{* 1} {\X'_{* 1}}^{\top}, \ldots, \X_{* D} {\X'_{* D}}^{\top})$$ $$\frac{\partial k}{\partial B} = 1$$ $$\frac{\partial \K}{\partial B} = \Ivec{I}$$ As expected the gradient is independent of the hyperparameters values and can be computed once for all at the beginning. Logscale: $$A_i = \ln{\sigma_{p_i}^2}$$ $$\sigma_{p_i}^2 = e^{A_i}$$ $$\frac{\partial k}{\partial A_i} = \sigma_{p_i}^2 x_i x_j$$ $$B = \ln{\sigma_0}$$ $$\sigma_0^2 = e^{2B}$$ $$\frac{\partial k}{\partial B} = 2 e^{2B} = 2 \sigma_0^2$$ Another reparametrization: $$C = \ln{\sigma_0^2}$$ $$\sigma_0^2 = e^C$$ $$\frac{\partial k}{\partial C} = \sigma_0^2$$ \section{Polynomial kernel} $$k(\x,\x') = (\sigma_0^2 + \x^{\top} \Ivec{\Sigma}_p \x')^p = (\sigma_0^2 + \sum_{i=1}^D {\sigma^2_p}_i x_i x'_i)^p$$ $$\K(\X,\X') = (\sigma_0^2 \mathbf{J}_{N,N'} + \X \Ivec{\Sigma}_p \X'^{\top})^p$$ In order to simplify formulas we assume $\Ivec{\Sigma}_p$ is diagonal, i.e., $\Ivec{\Sigma}_p = diag(\Ivec{\sigma}^2_p)$ where $\Ivec{\sigma}^2_p = ({\sigma^2_p}_1,\ldots,{\sigma^2_p}_D)$. $$\sigma_0 \ge 0$$ $$\Ivec{\sigma}_p = ({\sigma_p}_1,\ldots,{\sigma_p}_D)$$ $${\sigma_p}_i \ge 0$$ $$\mathbf{\Theta} = \{\sigma_0,\Ivec{\sigma}_p, p\}$$ $$A = \sigma_0^2$$ $$B_i = {\sigma^2_p}_i$$ $$\mathbf{B} = (B_1,\ldots,B_D)$$ $$\mathbf{\Theta}^* = \{A,\mathbf{B}, p\}$$ $$k(\x,\x') = (A + \x^{\top} diag(\mathbf{B}) \x')^p = (A + \sum_{i=1}^D B_i x_i x'_i)^p$$ $$\frac{\partial k}{\partial A} = p(A + \sum_{i=1}^D B_i x_i x'_i)^{p-1}$$ $$\frac{\partial \K}{\partial A} = p(A\mathbf{J}_{N,N'} + \sum_{i=1}^D B_i \X_{*i} {\X'_{*i}}^{\top})^{p-1}$$ $$\frac{\partial k}{\partial B_i} = p(A + \sum_{i=1}^D B_i x_i x'_i)^{p-1} x_i x'_i = \frac{\partial k}{\partial A} x_i x'_i$$ $$\frac{\partial \K}{\partial B_i} = \frac{\partial \K}{\partial A} \X_{*i} {\X'_{*i}}^{\top}$$ $$\frac{\partial k}{\partial p} = k(\x,\x') \ln(A + \sum_{i=1}^D B_i x_i x'_i)$$ $$\frac{\partial \K}{\partial p} = \K(\X,\X') \bullet \ln(A \mathbf{J}_{N,N'}+ \sum_{i=1}^D B_i \X_{*i} \X'_{*i})$$ $$\mathbf{M} = A \mathbf{J}_{N,N'}+ \sum_{i=1}^D B_i \X_{*i} \X'_{*i}$$ $$\nabla_{A,\mathbf{B},p} \K = \left(p\mathbf{M}^{p-1},\left\{p\mathbf{M}^{p-1} \X_{*i} {\X'_{*i}}^{\top} \right\}_{i=1,\ldots,D}, \K(\X,\X') \bullet \ln(\mathbf{M}) \right)$$ \section{Exponential kernel} \subsection{Scalar Length-scale $\ell$} $$k(\x,\x') = \sigma_f^2 e^{-\frac{\|\x-\x'\|_2}{\ell}}$$ $$\ell > 0$$ $$\sigma_f \ge 0$$ $$\mathbf{\Theta} = \{ \sigma_f, \ell \}$$ $$\K(\X,\X') = \sigma_f^2 e^{-\frac{1}{\ell}\dm(\X,\X')}$$ $$A = \sigma_f^2$$ $$A \ge 0$$ $$B = -\frac{1}{\ell}$$ $$B < 0$$ $$\mathbf{\Theta}^* = \{ A, B \}$$ $$k(\x,\x') = A e^{B\|\x-\x'\|_2}$$ $$\K(\X,\X') = A e^{B \dm(\X-\X')}$$ $$\frac{\partial k}{\partial A} = e^{B\|\x-\x'\|_2} = \frac{1}{A}k(\x,\x')$$ $$\frac{\partial \K}{\partial A} = e^{B \dm(\X,\X')} = \frac{1}{A} \K(\X,\X')$$ $$\frac{\partial k}{\partial B} = A e^{B\|\x-\x'\|_2} \|\x-\x'\|_2 = k(\x,\x') \|\x-\x'\|_2$$ $$\frac{\partial \K}{\partial B} = \K(\X,\X') \bullet \dm(\X-\X')$$ $$\nabla_{A,B} \K = (\frac{1}{A} \K(\X,\X'), \K(\X,\X') \bullet \dm(\X-\X'))$$ Note that if $\K(\X,\X')$ is precomputed, then the gradient consists in just two element-by-element products, the second being against a constant matrix independent of the hyperparameters. \subsection{Vector of Length-Scales $\Ivec{\ell}$} Given $\Ivec{\ell} = (\ell_1,\ldots,\ell_D)$, $\ell_i \ge 0$ and $\ELL^{-1} = (1/\ell_1,\ldots,1/\ell_D)$ $$k(\x,\x') = \sigma_f^2 e^{-\|\x-\x',\ELL^{-2}\|_2}= \sigma_f^2 e^{-\sqrt{\sum_{i=1}^D \left(\frac{x_i - x'_i}{\ell_i}\right)^2}}$$ $$K(\X,\X') = \sigma_f^2 e^{-\dm(\X,\X',\ELL^{-2})}$$ $$\mathbf{\Theta} = \{ \sigma_f, \ELL\}$$ $$\sigma_f \ge 0$$ $$\ell_i > 0$$ $$A = \sigma_f^2$$ $$\mathbf{B} = \ELL^{-2}$$ $$A \ge 0$$ $$B_i > 0$$ $$\mathbf{\Theta}^* = \{ A, \mathbf{B}\}$$ $$k(\x,\x') = A e^{-\|\x-\x',\mathbf{B}\|_2} = A e^{-\sqrt{\sum_{i=1}^D B_i(x_i - x'_i)^2}}$$ $$K(\X,\X') = A e^{-\dm(\X,\X',\mathbf{B})}$$ $$\frac{\partial k}{\partial A} = e^{-\sqrt{\sum_{i=1}^D B_i(x_i - x'_i)^2}} = \frac{k(\x,\x')}{A}$$ $$\frac{\partial \K}{\partial A} = e^{-\dm(\X,\X',\mathbf{B})} = \frac{1}{A}\K(\X,\X')$$ $$\frac{\partial k}{\partial B_i} = A e^{-\|\x-\x',\mathbf{B}\|_2} \left( -\frac{1}{2} \|\x-\x',\mathbf{B}\|_2^3 \right) (x_i - x'_i)^2 = -\frac{1}{2} k(\x,\x') \|\x-\x',\mathbf{B}\|_2^3 (x_i - x'_i)^2 $$ $$\frac{\partial \K}{\partial B_i} = -\frac{1}{2} K(\X,\X') \bullet \dm(\X-\X',\mathbf{B})^3 \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$$ $$\nabla_{A,\mathbf{B}} \K = \left(\frac{1}{A}\K(\X,\X'), \left\{-\frac{1}{2} K(\X,\X') \bullet \dm(\X-\X',\mathbf{B})^3 \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2 \right\}_{i=1 \ldots D} \right)$$ Note that $\frac{\partial \K}{\partial A}$ requires just the multiplication of a constant by the kernel matrix $\K(\X,\X')$ whose values usually already available. Instead $\frac{\partial \K}{\partial B_i}$ is a entry-wise product of 3 matrices: $\K(\X,\X')$ (usually already available), $\dm(\X-\X',\mathbf{B})^3$ (which is, apart the cube, part of the computation of $\K(\X,\X')$ so it can be stored in advance), and $(\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$ which does not depend upon $A$ and $\mathbf{B}$ so it can be computed once for all. Note that in NumPy $(\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$ can be computed as {\ttfamily numpy.subtract.outer($X_{*i},X'_{*i}$)**2}. \section{Squared Exponential kernel} \subsection{Scalar Length-Scale $\ell$} $$k(\x,\x') = \sigma_f^2 e^{-\frac{1}{2\ell^2} (\x-\x')^{\top}(\x-\x')} = \sigma_f^2 e^{-\frac{1}{2\ell^2} \sum_{i=1}^D (x_i - x'_i)^2} = \sigma_f^2 e^{-\frac{1}{2\ell^2} \|\x-\x'\|_2^2}$$ $$\K(\X,\X') = \sigma_f^2 e^{-\frac{1}{2\ell^2} \dm(\X,\X')^2}$$ $$\sigma_f \ge 0$$ $$\ell > 0$$ $$\mathbf{\Theta} = \{ \sigma_f, \ell \}$$ $$\frac{\partial k}{\partial \sigma_f} = \frac{2}{\sigma_f}k$$ $$\frac{\partial \K}{\partial \sigma_f} = \frac{2}{\sigma_f}\K$$ $$\frac{\partial k}{\partial \ell} = \ell^{-3} k \|\x-\x'\|_2^2 $$ $$\frac{\partial \K}{\partial \ell} = \ell^{-3} \K \bullet \dm(\X,\X')^2$$ $$\nabla_{\sigma_f,\ell} \K = \left(\frac{2}{\sigma_f}K(\X,\X'), \ell^{-3} \K \bullet \dm(\X-\X')^2 \right)$$ Logscale: $$A = \ln{\sigma_f}$$ $$\sigma_f = e^A$$ $$\frac{\partial k}{\partial A} = 2k$$ $$\frac{\partial \K}{\partial \sigma_f} = 2\K$$ $$B = \ln{\ell}$$ $$\ell = e^B$$ $$\frac{\partial k}{\partial B} = \ell^{-2} k \|\x-\x'\|_2^2$$ $$\frac{\partial \K}{\partial B} = \ell^{-2} \K \bullet \dm(\X,\X')^2 = \K \bullet \dm(\X,\X',\ell^{-2}\J_N)^2$$ $$\nabla_{A,B} \K = \left( 2\K(\X,\X'), \ell^{-2} \K \bullet \dm(\X-\X')^2 \right)$$ Another mapping: $$A = \sigma_f^2$$ $$B = -\frac{1}{\ell^2}$$ $$A \ge 0$$ $$B < 0$$ $$\mathbf{\Theta}^* = \{ A, B\}$$ $$k(\x,\x') = A e^{B (\x-\x')^{\top}(\x-\x')}$$ $$\K(\X,\X') = A e^{B \dm(\X,\X')^2}$$ $$\frac{\partial k}{\partial A} = \frac{k(\x,\x')}{A}$$ $$\frac{\partial \K}{\partial A} = \frac{1}{A}\K(\X,\X')$$ $$\frac{\partial k}{\partial B} = k(\x,\x') \|\x-\x'\|_2^2$$ $$\frac{\partial \K}{\partial B} = K(\X,\X') \bullet \dm(\X,\X')^2$$ $$\nabla_{A,B} \K = (\frac{1}{A} \K(\X,\X'), \dm(\X-\X')^2 \bullet \K(\X,\X'))$$ Note that $\nabla_{A,B} \K$ is similar to that of the exponential kernel so almost all comments made before applies here as well. \subsection{Vector of Length-Scales $\ELL$} Let $\mathbf{L} = diag(\ELL)$: $$k(\x,\x') = \sigma_f^2 e^{-\frac{1}{2}(\x-\x')^{\top} \LL^{-2} (\x-\x')} = \sigma_f e^{-\frac{1}{2}\sum_{i=1}^D \frac{(x_i - x'_i)^2}{\ell_i^2}} = \sigma_f^2 e^{-\frac{1}{2}\|\x-\x',\ELL^{-2}\|_2^2}$$ $$\K(\X,\X') = \sigma_f^2 e^{-\frac{1}{2} \dm(\X,\X',\ELL^{-2})^2}$$ $$\sigma_f \ge 0$$ $$\ell_i > 0$$ $$\mathbf{\Theta} = \{ \sigma_f, \ELL\}$$ $$\frac{\partial k}{\partial \sigma_f} = \frac{2}{\sigma_f}k$$ $$\frac{\partial \K}{\partial \sigma_f} = \frac{2}{\sigma_f}\K$$ $$\frac{\partial k}{\partial \ell_i} = \ell_i^{-3} k \|\x_i-\x_i'\|_2^2 $$ $$\frac{\partial \K}{\partial \ell_i} = \ell_i^{-3} \K \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$$ $$\nabla_{\sigma_f,\ell} \K = \left(\frac{2}{\sigma_f}K(\X,\X'), \ell_i^{-3} \K \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2 \right)$$ Logscale: $$A = \ln{\sigma_f}$$ $$\sigma_f = e^A$$ $$\frac{\partial k}{\partial A} = 2k$$ $$\frac{\partial \K}{\partial \sigma_f} = 2\K$$ $$B_i = \ln{\ell_i}$$ $$\ell_i = e^B_i$$ $$\frac{\partial k}{\partial B_i} = \ell_i^{-2} k \|\x_i-\x'_i\|_2^2$$ $$\frac{\partial \K}{\partial B_i} = \ell^{-2} \K \bullet \dm(\X,\X')^2 = \ell_i^{-2} \K \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$$ $$\nabla_{A,\mathbf{B}} \K = \left( 2\K(\X,\X'), \left\{ \ell_i^{-2} \K \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2 \right\}_{i=1 \ldots D} \right)$$ Another mapping: $$A = \sigma_f$$ $$\mathbf{B} = -\frac{1}{2}\ELL^{-2} = \left(-\frac{1}{2\ell_1^2},\ldots,-\frac{1}{2\ell_D^2} \right)$$ $$A \ge 0$$ $$B_i < 0$$ $$\mathbf{\Theta}^* = \{ A, \mathbf{B}\}$$ $$k(\x,\x') = A e^{(\x-\x')^{\top} diag(\mathbf{B}) (\x-\x')} = A e^{\sum_{i=1}^D B_i (x_i - x'_i)^2}$$ $$\K(\X,\X') = A e^{\dm(\X,\X',\mathbf{B})}$$ $$\frac{\partial k}{\partial A} = \frac{k(\x,x')}{A}$$ $$\frac{\partial \K}{\partial A} = \frac{1}{A}\K(\X,X')$$ $$\frac{\partial k}{\partial B_i} = k(\x,\x') (x_i -x'_i)^2$$ $$\frac{\partial \K}{\partial B_i} = \K(\X,\X') \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$$ $$\nabla_{A,\mathbf{B}} \K = \left(\frac{\K(\X,\X')}{A}, \left\{ K(\X,\X') \bullet (\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2 \right\}_{i=1 \ldots D} \right)$$ Note that $\nabla_{A,\mathbf{B}} \K$ requires to compute $K(\X,\X')$ (which is usually already available), and its entry-wise product with $(\X_{*i}J_{1,N'}- (\X'_{*i}J_{1,N})^{\top})^2$ which is independent of the value of the hyperparameters and can be precomputed once for all. \section{$\gamma$-Exponential kernels} $$k(\x,\x') = \sigma_f^2 e^{-(\frac{\x-\x'}{\ell})^\gamma}$$ $$k(\x,\x') = \sigma_f^2 e^{-(\frac{\x-\x'}{\ELL})^\gamma}$$ \section{Mat\'ern kernels} %% $$k_{\mbox{Mat\'ern}}(\x,\x') = \frac{2^{1-\nu}}{\Gamma(\nu)} \left(\sqrt{2\nu} \frac{\|\x-\x'\|_2}{\ell}\right)^{\nu} \K_{\nu}\left(\sqrt{2}\nu \frac{\|\x-\x'\|_2}{\ell} \right)$$ %% $$\ell > 0$$ %% $$\nu > 0$$ %% where $K_{\nu}$ is a modified Bessel function (REMOVE?). Let $\nu$ be half integer, i.e., $\nu = p + 1/2$ ($p \in \mathbb{Z}^+$), then $$k_{\nu=p+1/2}(\x,\x') = e^{-\sqrt{2\nu}\frac{\|\x-\x'\|}{\ell}} \frac{\Gamma(p+1)}{\Gamma(2p+1)} \sum_{i=0}^p \frac{(p+i)!}{i!(p-i)!}\left(\sqrt{8\nu}\frac{\|\x-\x'\|}{\ell}\right)^{p-i}$$ is the class of Mat\'ern covariance functions with half-integer $\nu$. $$\nu > 0$$ $$\ell > 0$$ When $\nu \rightarrow \infty$ we obtain the squared exponential covariance function. Most popular cases of the Mat\'ern functions are $p=0$ (exponential kernel), $p=1$ and $p=2$: $$k_{\nu=1/2}(\x,\x') = e^{-\frac{\|\x-\x'\|_2}{\ell}}$$ $$k_{\nu=3/2}(\x,\x') = \left(1+\sqrt{3}\frac{\|\x-\x'\|_2}{\ell} \right) e^{-\sqrt{3}\frac{\|\x-\x'\|_2}{\ell}}$$ $$k_{\nu=5/2}(\x,\x') = \left(1+\sqrt{5}\frac{\|\x-\x'\|_2}{\ell} + \frac{5\|\x-\x'\|_2^2}{3\ell^2}\right) e^{-\sqrt{5}\frac{\|\x-\x'\|_2}{\ell}}$$ \section{Rational Quadratic kernels} $$k_{RQ} = \left(1+\frac{\|\x-\x'\|_2^2}{2\alpha\ell^2} \right)^{-\alpha}$$ $$\alpha > 0$$ $$\ell > 0$$ \end{document} % LocalWords: Logscale pymvpa2-2.2.0/doc/misc/pylintrc000066400000000000000000000056541202542755000164140ustar00rootroot00000000000000# PyLint configuration file for the project pymvpa. # # Agreed formatting (per yoh+michael voice dialog) is camel. # # This pylintrc file will use the default settings except for the # naming conventions, which will allow for camel case naming as found # in Java code or several libraries such as PyQt, etc. # # At some moment it was modified by yoh from the original one # which can be found on debian systems at # /usr/share/doc/pylint/examples/pylintrc_camelcase # # Just place it in ~/.pylintrc for user-wide installation or simply # use within a call to pylint or export environment variable # export PYLINTRC=$PWD/doc/misc/pylintrc [BASIC] # Regular expression which should only match correct module names module-rgx=([a-z][a-z0-9_]*)$ attr-rgx=[a-z_][a-z0-9_]{,30} # Regular expression which should only match correct class names class-rgx=[A-Z_]+[a-zA-Z0-9]+$ # Regular expression which should only match correct function names function-rgx=[a-z_]+[a-z0-9_][a-z0-9]*$ # Regular expression which should only match correct method names # Allow upper cases in testFeatureSelection where FeatureSelection # is a class name method-rgx=(([a-z_]|__)[a-z0-9_]*(__)?|test[a-zA-Z0-9_]*)$ # Regular expression which should only match correct argument names argument-rgx=[a-z][a-z0-9]*_*[a-z0-9]*_*[a-z0-9]*_?$ # Regular expression which should only match correct variable names variable-rgx=([a-z_]+[a-z0-9]*_*[a-z0-9]*_*[a-z0-9]*_?||(__[a-zA-Z0-9_]*__))$||[A-Z]+ # Regular expression which should only match correct module level names # Default: (([A-Z_][A-Z1-9_]*)|(__.*__))$ const-rgx=([a-z_]+[a-z0-9]*_*[a-z0-9]*_*[a-z0-9]*_?|__[a-zA-Z0-9_]*__)$||[A-Z]+ [FORMAT] indent-string=' ' [DESIGN] # We are capable to follow that many, yes! max-branchs = 20 # some base class constructors have quite a few arguments max-args = 14 # and due to ClassWithCollections and conditional attributes classes by default have lots # of attributes max-attributes = 14 # some sci computation can't be handled efficiently without having #lots of locals max-locals = 35 [MESSAGES CONTROL] # Disable the following PyLint messages: # R0903 - Not enough public methods # W0105 - String statement has no effect # often used for after-line doc # W0142 - Used * or ** magic # W0232 - Class has no __init__ method # W0212 - Access to a protected member ... of a client class # W0613 - Unused argument # E1101 - Has no member (countless false-positives) disable-msg=R0903,W0142,W0105,W0212,W0613,E1101 [REPORTS] # set the output format. Available formats are text, parseable, colorized and # html output-format=colorized # Include message's id in output include-ids=yes # Tells wether to display a full report or only the messages reports=no [MISCELLANEOUS] # List of note tags to take in consideration, separated by a comma. # FIXME -- something which needs fixing # TODO -- future plan # XXX -- some concern # YYY -- comment/answer to above mentioned concern notes=FIXME,TODO,XXX,YYY pymvpa2-2.2.0/doc/misc/references.bib000066400000000000000000001071051202542755000174160ustar00rootroot00000000000000@Comment{x-kbibtex-encoding=utf-8} @Article{HBL+12, title = "Decoding Semantics across {fMRI} sessions with Different Stimulus Modalities: A practical {MVPA} Study", volume = {6}, issn = {1662-5196}, url = {http://www.frontiersin.org/Neuroinformatics/10.3389/fninf.2012.00024/full}, doi = {10.3389/fninf.2012.00024}, abstract = {Both embodied and symbolic accounts of conceptual organization would predict partial sharing and partial differentiation between the neural activations seen for concepts activated via different stimulus modalities. But cross-participant and cross-session variability in {BOLD} activity patterns makes analyses of such patterns with {MVPA} methods challenging. Here we examine the effect of cross-modal and individual variation on the machine learning analysis of {fMRI} data recorded during a word property generation task. We present the same set of living and non-living concepts (land-mammals, or work tools) to a cohort of Japanese participants in two sessions: the first using auditory presentation of spoken words; the second using visual presentation of words written in Japanese characters. Classification accuracies confirmed that these semantic categories could be detected in single trials, with within-session predictive accuracies of 80-90\%. However cross-session prediction (learning from auditory-task data to classify data from the written-word-task, or vice-versa) suffered from a performance penalty, achieving 65-75\% (still individually significant at p{\textless}{\textless}0.05). We carried out several follow-on analyses to investigate the reason for this shortfall, concluding that distributional differences in neither time nor space alone could account for it. Rather, combined spatio-temporal patterns of activity need to be identified for successful cross-session learning, and this suggests that feature selection strategies could be modified to take advantage of this.}, journal = {Frontiers in Neuroinformatics}, author = {Akama Hiroyuki and Murphy Brian and Na Li and Shimizu Yumiko and Poesio Massimo}, year = {2012}, pymvpa-keywords = "pymvpa, fmri" } @Article{ KKO+11, Author = "Lisandro Nicolas Kaunitz and Juan Esteban Kamienkowski and Emanuele Olivetti and Brian Murphy and Paolo Avesani and David Paul Melcher", Title = "Intercepting the first pass: rapid categorization is suppressed for unseen stimuli", Journal = "Frontiers in Perception Science", Volume = "2", Pages = "198", url = "http://www.frontiersin.org/perception_science/10.3389/fpsyg.2011.00198/full", year = 2011, doi = "10.3389/fpsyg.2011.00198", pymvpa-keywords = "pymvpa, eeg" } @inproceedings{XLR2012, author = {Hao Xu and Alexander Lorbert and Peter J. Ramadge and J. Swaroop Guntupalli and James V. Haxby}, title = {Regularized hyperalignment of multi-set {fMRI} data}, year = 2012, booktitle = {Proceedings of the 2012 IEEE Signal Processing Workshop}, address = {Ann Arbor Michigan} } @article{GMS+12, author = {Gorlin, Scott and Meng, Ming and Sharma, Jitendra and Sugihara, Hiroki and Sur, Mriganka and Sinha, Pawan}, title = {Imaging prior information in the brain}, volume = {109}, number = {20}, pages = {7935--7940}, year = {2012}, doi = {10.1073/pnas.1111224109}, URL = {http://www.pnas.org/content/109/20/7935.abstract}, journal = {Proceedings of the National Academy of Sciences} } @Article{ CGG+12, Author = "Andrew C. Connolly and J. Swaroop Guntupalli and Jason Gors and Michael Hanke and Yaroslav O. Halchenko and Yu-Chien Wu and Hervé Abdi and James V. Haxby", Title = "The Representation of Biological Classes in the Human Brain", Journal = "Journal of Neuroscience", Volume = "32", Pages = "2608--2618", url = "http://www.jneurosci.org/content/32/8/2608#aff-4", year = 2012, doi = "10.1523/JNEUROSCI.5547-11.2012", } @Article{ CRK+11, Author = "Johan D. Carlin and James B. Rowe and Nikolaus Kriegeskorte and Russell Thompson and Andrew J. Calder", Title = "Direction-Sensitive Codes for Observed Head Turns in Human Superior Temporal Sulcus.", Journal = "Cerebral Cortex", Volume = "", Pages = "", url = "http://cercor.oxfordjournals.org/content/early/2011/06/27/cercor.bhr061.short", year = 2011, doi = "10.1093/cercor/bhr061", pymvpa-keywords = "pymvpa, fMRI, searchlight" } @Article{ MRH11, title = "Dynamic Changes In The Medial Temporal Lobe During Incidental Learning Of Object–Location Associations", author = "Anna Manelis and Lynne M. Reder and Stephen José Hanson", journal = "Cerebral Cortex", year = "2011", abstract = "The role of the medial temporal lobe (MTL) in associative memory encoding has been the focus of many memory experiments. However, there has been surprisingly little investigation of whether the contributions of different MTL subregions (amygdala, hippocampus [HPC], parahippocampal [PHc], perirhinal cortex [PRc], and temporal polar cortex [TPc]) shift across multiple presentations during associative encoding. We examined this issue using event-related functional magnetic resonance imaging and a multivoxel pattern classification analysis. Subjects performed a visual search task, becoming faster with practice to locate objects whose locations were held constant across trials. The classification analysis implicated right HPC and amygdala early in the task when the speed-up from trial to trial was greatest. The same analysis implicated right PRc and TPc late in learning when speed-up was minimal. These results suggest that associative encoding relies on complex patterns of neural activity in MTL that cannot be expressed by simple increases or decreases of blood oxygenation level—dependent signal during learning. Involvement of MTL subregions during encoding of object–location associations depends on the nature of the learning phase. Right HPC and amygdala support active integration of object and location information, while right PRc and TPc are involved when object and spatial representations become unitized into a single representation.", doi = "10.1093/cercor/bhr151", pymvpa-keywords = "pymvpa, fMRI" } @Comment{ This file is used to autogenerate doc/references.rst using tools/bib2rst_ref.py . Due to external dependency on pybliographer (which is discontinued project), automatic regeneration is not enabled, thus you are required to run make references to regenerate doc/references.rst if you modified this file. } @Article{ HGF+01, Author = "James V. Haxby and M. I. Gobbini and M. L. Furey and A. Ishai and J. L. Schouten and P. Pietrini", Title = "Distributed and overlapping representations of faces and objects in ventral temporal cortex.", Journal = "Science", Volume = "293", Pages = "2425–2430", year = 2001, doi = "10.1126/science.1063736", pymvpa-keywords = "split-correlation classifier" } @Article{ CPL+06, Author = "X. Chen and Francisco Pereira and W. Lee and Stephen Strother and Tom Mitchell", Title = "Exploring predictive and reproducible modeling with the single-subject {FIAC} dataset.", Journal = "Human Brain Mapping", Volume = "27", Pages = "452–461", url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16565951", year = 2006, doi = "10.1002/hbm.20243", pymvpa-keywords = "feature selection, feature selection stability", pymvpa-summary = "This paper illustrates the necessity to consider the stability or reproducibility of a classifier's feature selection as at least equally important to it's generalization performance." } @Article{ LSC+05, issn = "1053-8119", volume = "26", year = "2005", journal = "NeuroImage", title = "Support vector machines for temporal classification of block design fMRI data.", pages = "317–329", affiliation = "Biomedical Engineering, Georgia Institute of Technology, Emory University, Atlanta, 30322, USA.", author = "Stephen LaConte and Stephen Strother and Vladimir Cherkassky and Jon Anderson and Xiaoping Hu", doi = "10.1016/j.neuroimage.2005.01.048", pymvpa-summary = "Comprehensive evaluation of preprocessing options with respect to SVM-classifier (and others) performance on block-design fMRI data.", pymvpa-keywords = "SVM" } @Article{ KGB06, issn = "0027-8424", volume = "103", year = "2006", journal = "Proceedings of the National Academy of Sciences of the USA", title = "Information-based functional brain mapping.", pages = "3863–3868", author = "Nikolaus Kriegeskorte and Rainer Goebel and Peter A. Bandettini", doi = "10.1073/pnas.0600244103", pymvpa-keywords = "searchlight", pymvpa-summary = "Paper introducing the searchlight algorithm.", affiliation = "Section on Functional Imaging Methods, Laboratory of Brain and Cognition, National Institute of Mental Health, Building 10, Room 1D80B, 10 Center Drive MSC 1148, Bethesda, MD 20892-1148, USA. niko@nih.gov" } @Article{ KWO11, issn = "0956-7976", volume = "in press", year = "2011", journal = "Psychological Science", title = "Emergence of perceptual gestalts in the human visual cortex: The case of the configural superiority effect", author = "Jonas Kubilius and Johan Wagemans and Hans {Op de Beeck}", doi = "10.1177/0956797611417000", pymvpa-keywords = "pymvpa, fMRI" } @Article{ HR06, issn = "1471-003X", volume = "7", year = "2006", journal = "Nature Reviews Neuroscience", title = "Decoding mental states from brain activity in humans.", pages = "523–534", author = "John-Dylan Haynes and Geraint Rees", doi = "10.1038/nrn1931", pymvpa-summary = "Review of decoding studies, emphasizing the importance of ethical issues concerning the privacy of personal thought." } @Book{ Vap95, title = "The Nature of Statistical Learning Theory", author = "Vladimir Vapnik", publisher = "Springer", address = "New York", isbn = "0-387-94559-8", year = "1995", pymvpa-keywords = "support vector machine, SVM" } @Article{ KCF+05, Author = "B. Krishnapuram and L. Carin and M. A. Figueiredo and A. J. Hartemink", Title = "Sparse multinomial logistic regression: fast algorithms and generalization bounds.", Journal = "IEEE Transactions on Pattern Analysis and Machine Intelligence", Volume = "27", Pages = "957–968", url = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=15943426", year = 2005, pymvpa-keywords = "sparse multinomial logistic regression, SMLR", doi = "10.1109/TPAMI.2005.127" } @Article{ EHJ+04, title = "Least Angle Regression", author = "Bradley Efron and Hastie. Trevor and Iain Johnstone and Robert Tibshirani", journal = "Annals of Statistics", pages = "407–499", volume = "32", year = "2004", doi = "10.1214/009053604000000067", pymvpa-keywords = "least angle regression, LARS" } @Article{ HH08, issn = "0899-7667", volume = "20", year = "2008", journal = "Neural Computation", title = "Brain reading using full brain support vector machines for object recognition: there is no ``face'' identification area.", pages = "486–503", author = "Stephen José Hanson and Yaroslav O. Halchenko", doi = "10.1162/neco.2007.09-06-340", pymvpa-keywords = "support vector machine, SVM, feature selection, recursive feature elimination, RFE", affiliation = "Rutgers Mind/Brain Analysis Laboratories, Psychology Department, Rutgers University, Newark, NJ 07102, U.S.A. jose@tractatus.rutgers.edu." } @Article{ NPD+06, issn = "1364-6613", volume = "10", year = "2006", journal = "Trends in Cognitive Science", title = "Beyond mind-reading: multi-voxel pattern analysis of fMRI data.", pages = "424–430", author = "Kenneth A. Norman and Sean M. Polyn and Greg J. Detre and James V. Haxby", doi = "10.1016/j.tics.2006.07.005" } @Article{ Dem06, author = "Janez DemÅ¡ar", title = "Statistical Comparisons of Classifiers over Multiple Data Sets", journal = "Journal of Machine Learning Research", volume = "7", year = "2006", issn = "1533-7928", pages = "1–30", publisher = "MIT Press", address = "Cambridge, MA, USA", url = "http://portal.acm.org/citation.cfm?id=1248548", pymvpa-summary = "This is a review of several classifier benchmark procedures." } @Article{ NH02, issn = "1065-9471", volume = "15", number = "1", year = "2002", Journal = "Human Brain Mapping", title = "Nonparametric permutation tests for functional neuroimaging: a primer with examples.", pages = "1–25", author = "Thomas E Nichols and Andrew P Holmes", doi = "10.1002/hbm.1058", affiliation = "Department of Biostatistics, University of Michigan, Ann Arbor, Michigan, USA.", pymvpa-summary = "Overview of standard nonparametric randomization and permutation testing applied to neuroimaging data (e.g. fMRI)" } @Article{ SMM+08, volume = "172", number = "1", year = "2008", journal = "Journal of Neuroscience Methods", title = "The impact of functional connectivity changes on support vector machines mapping of fMRI data.", pages = "94–104", doi = "10.1016/j.jneumeth.2008.04.008", author = "João Ricardo Sato and Janaina Mourão-Miranda and Maria da Graça {Morais Martin} and Edson Amaro and Pedro Alberto Morettin and Michael John Brammer", pymvpa-summary = "Discussion of possible scenarios where univariate and multivariate (SVM) sensitivity maps derived from the same dataset could differ. Including the case were univariate methods would assign a substantially larger score to some features.", pymvpa-keywords = "support vector machine, SVM, sensitivity" } @Article{ WCW+07, issn = "1053-8119", volume = "36", number = "4", year = "2007", journal = "NeuroImage", title = "Support vector machine learning-based fMRI data group analysis.", pages = "1139–51", author = "Ze Wang and Anna R. Childress and Jiongjiong Wang and John A. Detre", doi = "10.1016/j.neuroimage.2007.03.072", pymvpa-keywords = "support vector machine, SVM, group analysis" } @Article{ OJA+05, title = "Partially Distributed Representations of Objects and Faces in Ventral Temporal Cortex ", author = "A. J. O'Toole and F. Jiang and H. Abdi and James V. Haxby", journal = "Journal of Cognitive Neuroscience", pages = "580–590", volume = "17", year = "2005", doi = "10.1162/0898929053467550" } @Article{ OJA+07, Author = "A. J. O'Toole and F. Jiang and H. Abdi and N. Penard and J. P. Dunlop and M. A. Parent", Title = "Theoretical, statistical, and practical perspectives on pattern-based classification approaches to the analysis of functional neuroimaging data.", Journal = "Journal of Cognitive Neuroscience", Volume = "19", Pages = "1735–1752", doi = "10.1162/jocn.2007.19.11.1735", year = 2007 } @Article{ GE03, author = "I. Guyon and A. Elisseeff", title = "An Introduction to Variable and Feature Selection", volume = "3", year = "2003", pages = "1157–1182", journal = "Journal of Machine Learning", url = "http://www.jmlr.org/papers/v3/guyon03a.html" } @Article{ HMH04, Author = "Stephen José Hanson and T. Matsuka and James V. Haxby", Title = "Combinatorial codes in ventral temporal lobe for object recognition: {H}axby (2001) revisited: is there a ``face'' area?", Journal = "NeuroImage", Volume = "23", Pages = "156–166", year = 2004, doi = "10.1016/j.neuroimage.2004.05.020" } @Article{ ZH05, title = "Regularization and variable selection via the elastic net", author = "H. Zou and Trevor Hastie", journal = "Journal of the Royal Statistical Society Series B", volume = "67", number = "2", pages = "301–320", year = "2005", publisher = "Blackwell Synergy", pymvpa-keywords = "feature selection, statistical learning", url = "http://www-stat.stanford.edu/%7Ehastie/Papers/B67.2%20(2005)%20301-320%20Zou%20%26%20Hastie.pdf" } @Article{ MHN+04, title = "Learning to Decode Cognitive States from Brain Images", author = "Tom Mitchell and Rebecca Hutchinson and Radu S. Niculescu and Francisco Pereira and Xuerui Wang and Marcel Just and Sharlene Newman", doi = "10.1023/B:MACH.0000035475.85309.1b", journal = "Machine Learning", volume = "57", pages = "145–175", year = "2004" } @Article{ PP07, issn = "1047-3211", volume = "17", year = "2007", journal = "Cerebral Cortex", title = "Decoding near-threshold perception of fear from distributed single-trial brain activation.", pages = "691–701", author = "Luiz Pessoa and Srikanth Padmala", pymvpa-summary = "Analysis of slow event-related fMRI data using patter classification techniques.", doi = "10.1093/cercor/bhk020" } @Article{ KT05, issn = "1097-6256", volume = "8", year = "2005", journal = "Nature Neuroscience", title = "Decoding the visual and subjective contents of the human brain.", pages = "679–685", author = "Yukiyasu Kamitani and Frank Tong", pymvpa-summary = "One of the two studies showing the possibility to read out orientation information from visual cortex.", doi = "10.1038/nn1444" } @Manual{ HHS+latest, title = "The PyMVPA Manual", author = "Michael Hanke and Yaroslav O. Halchenko and Per B. Sederberg and James M. Hughes", address = "Available online at http://www.pymvpa.org/PyMVPA-Manual.pdf" } @Article{ HHS+09a, title = "PyMVPA: A Python toolbox for multivariate pattern analysis of fMRI data", author = "Michael Hanke and Yaroslav O. Halchenko and Per B. Sederberg and Stephen José Hanson and James V. Haxby and Stefan Pollmann", journal = "Neuroinformatics", year = "2009", pymvpa-summary = "Introduction into the analysis of fMRI data using PyMVPA.", pages = "37–53", volume = "7", doi = "10.1007/s12021-008-9041-y", pymvpa-keywords = "PyMVPA, fMRI" } @Article{ PMB09, title = "Machine learning classifiers and f{MRI}: {A} tutorial overview", author = "Francisco Pereira and Tom Mitchell and Matthew Botvinick", journal = "NeuroImage", year = "2009", doi = "10.1016/j.neuroimage.2008.11.007", url = "http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2892746/", pages = "199–209", volume = "45" } @Article{ HHS+09b, issn = "1662-5196", volume = "3", year = "2009", journal = "Frontiers in Neuroinformatics", title = "PyMVPA: A Unifying Approach to the Analysis of Neuroscientific Data.", pages = "3", author = "Michael Hanke and Yaroslav O. Halchenko and Per B. Sederberg and Emanuele Olivetti and Ingo Fründ and Jochem W. Rieger and Christoph S. Herrmann and James V. Haxby and Stephen José Hanson and Stefan Pollmann", doi = "10.3389/neuro.11.003.2009", pymvpa-keywords = "PyMVPA, fMRI, EEG, MEG, extracellular recordings", pymvpa-summary = "Demonstration of PyMVPA capabilities concerning multi-modal or modality-agnostic data analysis." } @Article{ MBK09, year = "2009", journal = "Social Cognitive and Affective Neuroscience", title = "Revealing representational content with pattern-information fMRI–an introductory guide.", author = "Marieke Mur and Peter A. Bandettini and Nikolaus Kriegeskorte", doi = "10.1093/scan/nsn044" } @Article{ JL09, title = "OMPC: an open-source MATLAB-to-Python compiler.", author = "Peter Jurica and Cees {van Leeuwen}", journal = "Frontiers in Neuroinformatics", pages = "5", volume = "3", year = "2009", doi = "10.3389/neuro.11.005.2009" } @Article{ KFS+09, title = "Center-surround patterns emerge as optimal predictors for human saccade targets", author = "Wolf Kienzle and Matthias O. Franz and Bernhard Schölkopf and Felix A. Wichmann", journal = "Journal of Vision", year = "In press", pymvpa-summary = "This paper offers an approach to make sense out of feature sensitivities of non-linear classifiers." } @Article{ KMB08, volume = "2", year = "2008", journal = "Frontiers in Systems Neuroscience", title = "Representational similarity analysis - connecting the branches of systems neuroscience.", pages = "4", author = "Nikolaus Kriegeskorte and Marieke Mur and Peter A. Bandettini", doi = "10.3389/neuro.06.004.2008" } @Article{ SET+09, title = "Elucidating an MRI-Based Neuroanatomic Biomarker for Psychosis: Classification Analysis Using Probabilistic Brain Atlas and Machine Learning Algorithms", author = "Daqiang Sun and Theo G.M. {van Erp} and Paul M. Thompson and Carrie E. Bearden and Melita Daley and Leila Kushan and Molly E. Hardt and Keith H. Nuechterlein and Arthur W. Toga and Tyrone D. Cannon", journal = "Biological Psychiatry", pages = "1055–1060", volume = "66", year = "2009", doi = "10.1016/j.biopsych.2009.07.019", pymvpa-summary = "First published study employing PyMVPA for MRI-based analysis of Psychosis.", pymvpa-keywords = "PyMVPA, psychosis, MRI" } @Article{ JSW09, title = "Does Cognitive Science Need Kernels?", volume = "13", url = "http://www.sciencedirect.com/science/article/B6VH9-4X4R9BC-1/2/e2e90008d0a8887878c72777462335fd", author = "Frank Jäkel and Bernhard Schölkopf and Felix A. Wichmann", journal = "Trends in Cognitive Sciences", pages = "381–388", year = "2009", doi = "10.1016/j.tics.2009.06.002", pymvpa-keywords = "kernel methods, similarity", pymvpa-summary = "A summary of the relationship of machine learning and cognitive science. Moreover it also points out the role of kernel-based methods in this context." } @Article{ Ioa05, issn = "1549-1676", volume = "2", number = "8", year = "2005", month = "Aug", journal = "PLoS Med", title = "Why most published research findings are false.", pages = "e124", author = "John P A Ioannidis", doi = "10.1371/journal.pmed.0020124", pymvpa-keywords = "hypothesis testing", pymvpa-summary = "Simulation study speculating that it is more likely for a research claim to be false than true. Along the way the paper highlights aspects to keep in mind while assessing the 'scientific significance' of any given study, such as, viability, reproducibility, and results." } @Article{ HHH+10, title = "Statistical learning analysis in neuroscience: aiming for transparency.", author = "Michael Hanke and Yaroslav O. Halchenko and James V. Haxby and Stefan Pollmann", journal = "Frontiers in Neuroscience", pages = "38–43", volume = "4", year = "2010", doi = "10.3389/neuro.01.007.2010", pymvpa-summary = "Focused review article emphasizing the role of transparency to facilitate adoption and evaluation of statistical learning techniques in neuroimaging research." } @Article{ MHH10, title = "Implicit memory for object locations depends on reactivation of encoding-related brain regions", author = "Anna Manelis and Catherine Hanson and Stephen José Hanson", journal = "Human Brain Mapping", year = "2010", doi = "10.1002/hbm.20992", pymvpa-keywords = "PyMVPA, implicit memory, fMRI" } @Book{ HTF09, title = "The Elements of Statistical Learning: Data Mining, Inference, and Prediction", author = "Trevor Hastie and Robert Tibshirani and Jerome H. Friedman", publisher = "Springer", address = "New York", edition = "2", year = "2009", isbn = "978-0-387-84857-0", url = "http://www-stat.stanford.edu/\%7Etibs/ElemStatLearn/", doi = "10.1007/b94608", pymvpa-summary = "Excellent summary of virtually all techniques relevant to the field. A free PDF version of this book is available from the authors' website at http://www-stat.stanford.edu/\%7Etibs/ElemStatLearn/" } @Article{ LBB+98, title = "Gradient-based learning applied to document recognition", author = "Y. Lecun and L. Bottou and Y. Bengio and P. Haffner", journal = "Proceedings of the IEEE", pages = "2278–2324", volume = "86", number = "11", month = "Nov", year = 1998, issn = "0018-9219", doi = "10.1109/5.726791", pymvpa-keywords = "handwritten character recognition, multilayer neural networks, MNIST, statistical learning", pymvpa-summary = "Paper introducing Modified NIST (MNIST) dataset for performance comparisons of character recognition performance across a variety of classifiers." } @Article{ Coh94, title = "The earth is round (p< 0.05)", author = "J. Cohen", journal = "American Psychologist", pages = "997–1003", volume = "49", number = "12", year = "1994", url = "http://www.citeulike.org/user/mdreid/article/2643653", pymvpa-keywords = "hypothesis testing", pymvpa-summary = "Classical critic of null hypothesis significance testing" } @Article{ Wri09, title = "Ten Statisticians and Their Impacts for Psychologists", author = "D.B. Wright", journal = "Perspectives on Psychological Science", pages = "587–597", volume = "4", number = "6", year = "2009", doi = "10.1111/j.1745-6924.2009.01167.x", pymvpa-keywords = "statistics, hypothesis testing", pymvpa-summary = "Historical excurse into the life of 10 prominent statisticians of XXth century and their scientific contributions." } @Book{ Fis25, title = "Statistical methods for research workers", author = "Ronald A. Fisher", year = "1925", publisher = "Oliver and Boyd", address = "Edinburgh", url = "http://psychclassics.yorku.ca/Fisher/Methods/", pymvpa-keywords = "statistics, hypothesis testing", pymvpa-summary = "One of the 20th century's most influential books on statistical methods, which coined the term 'Test of significance'." } @Article{ MKE10, title = "Predicting visual stimuli based on activity in auditory cortices.", author = "Kaspar Meyer and Jonas T. Kaplan and Ryan Essex and Cecelia Webber and Hanna Damasio and Antonio Damasio", journal = "Nature Neuroscience", year = "2010", doi = "10.1038/nn.2533" } @Article{ VS06, title = "Bias in error estimation when using cross-validation for model selection", author = "Sudhir Varma and Richard Simon", journal = "BMC Bioinformatics", pages = "91", volume = "7", year = "2006", issn = "1471-2105", abstract = {BACKGROUND: Cross-validation (CV) is an effective method for estimating the prediction error of a classifier. Some recent articles have proposed methods for optimizing classifiers by choosing classifier parameter values that minimize the CV error estimate. We have evaluated the validity of using the CV error estimate of the optimized classifier as an estimate of the true error expected on independent data. RESULTS: We used CV to optimize the classification parameters for two kinds of classifiers; Shrunken Centroids and Support Vector Machines (SVM). Random training datasets were created, with no difference in the distribution of the features between the two classes. Using these "null" datasets, we selected classifier parameter values that minimized the CV error estimate. 10-fold CV was used for Shrunken Centroids while Leave-One-Out-CV (LOOCV) was used for the SVM. Independent test data was created to estimate the true error. With "null" and "non null" (with differential expression between the classes) data, we also tested a nested CV procedure, where an inner CV loop is used to perform the tuning of the parameters while an outer CV is used to compute an estimate of the error. The CV error estimate for the classifier with the optimal parameters was found to be a substantially biased estimate of the true error that the classifier would incur on independent data. Even though there is no real difference between the two classes for the "null" datasets, the CV error estimate for the Shrunken Centroid with the optimal parameters was less than 30\% on 18.5\% of simulated training data-sets. For SVM with optimal parameters the estimated error rate was less than 30\% on 38\% of "null" data-sets. Performance of the optimized classifiers on the independent test set was no better than chance. The nested CV procedure reduces the bias considerably and gives an estimate of the error that is very close to that obtained on the independent testing set for both Shrunken Centroids and SVM classifiers for "null" and "non-null" data distributions. CONCLUSION: We show that using CV to compute an error estimate for a classifier that has itself been tuned using CV gives a significantly biased estimate of the true error. Proper use of CV for estimating true error of a classifier developed using a well defined algorithm requires that all steps of the algorithm, including classifier parameter tuning, be repeated in each CV loop. A nested CV procedure provides an almost unbiased estimate of the true error.}, url = "http://www.ncbi.nlm.nih.gov/pubmed/16504092", doi = "10.1186/1471-2105-7-91", affiliation = "Biometric Research Branch, National Cancer Institute, Bethesda, MD, USA. varmas@mail.nih.gov", pymvpa-keywords = "statistical learning, model selection, error estimation, hypothesis testing", pymvpa-summary = "Demonstration of overfitting and introducing the bias in the error estimation using cross-validation on entire dataset for performing model selection." } @Book{ SS01, title = "{Learning with Kernels: Support Vector Machines, Regularization}", author = "B. Scholkopf and A.J. Smola", publisher = "MIT Press", address = "Cambridge, MA", journal = "Optimization, and Beyond.", pages = "2", edition = "1", month = "December", year = "2001", isbn = "0-262-19475-9", pymvpa-keywords = "statistical learning, kernel methods, error estimation", pymvpa-summary = "Good coverage of kernel methods and associated statistical learning aspects (e.g. error bounds)" } @Article{ SS09, title = "Python in Neuroscience", author = "Martin Spacek and Nicholas Swindale", journal = "The Neuromorphic Engineer", year = "2009", doi = "10.2417/1200907.1682" } @Article{ GF09, url = "http://www.ncbi.nlm.nih.gov/pubmed/19521545", volume = "3", year = "2009", journal = "Front Neuroinformatics", title = "OpenElectrophy: An Electrophysiological Data- and Analysis-Sharing Framework.", pages = "14", author = "Samuel Garcia and Nicolas Fourcaud-Trocmé", doi = "10.3389/neuro.11.014.2009" } @Article{ Ban09, title = "Seven topics in functional magnetic resonance imaging.", author = "Peter A Bandettini", journal = "Journal of Integrative Neuroscience", pages = "371–403", volume = "8", year = "2009", url = "http://www.ncbi.nlm.nih.gov/pubmed/19938211" } @InProceedings{ TRL09, title = "Development of an autonomous robot for ground penetrating radar surveys of polar ice", booktitle = "The 2009 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)", author = "Eric Trautmann and Laura Ray and Jim Lever", pages = "1685–1690 ", year = "2009", doi = "10.1109/IROS.2009.5354290", pymvpa-summary = "Study using PyMVPA to perform immobilization detection to improve navigation reliability of an autonomous robot." } @InProceedings{ OVG+10, title = "Brain Connectivity Analysis by Reduction to Pair Classification", booktitle = "The 2nd IAPR International Workshop on Cognitive Information Processing", author = "Emanuele Olivetti and Sriharsha Veeramachaneni and Susanne Greiner and Paolo Avesani", year = "2010" } @Article{ MBL+10, title = "Resting developments: a review of fMRI post-processing methodologies for spontaneous brain activity.", author = "Daniel S Margulies and Joachim Böttger and Xiangyu Long and Yating Lv and Clare Kelly and Alexander Schäfer and Dirk Goldhahn and Alexander Abbushi and Michael P Milham and Gabriele Lohmann and Arno Villringer", journal = "Magnetic Resonance Materials in Physics, Biology and Medicine", pages = "289–307", volume = "23", year = "2010", url = "http://www.ncbi.nlm.nih.gov/pubmed/20972883", doi = "10.1007/s10334-010-0228-5" } @InProceedings{ LB10, title = "An Application of Pattern Matching for the Adjustment of Quality of Service Metrics", booktitle = "The International Conference on Emerging Network Intelligence", author = "D. Legge and A. Badii", volume = "2", year = "2010" } @Article{ WTB+10, title = "Multi-voxel coding of stimuli, rules, and responses in human frontoparietal cortex.", author = "Alexandra Woolgar and Russell Thompson and Daniel Bor and John Duncan", journal = "Neuroimage", year = "2010", url = "http://www.ncbi.nlm.nih.gov/pubmed/20406690", doi = "10.1016/j.neuroimage.2010.04.035" } @Article{ LaC10, title = "Decoding fMRI brain states in real-time.", author = "Stephen M Laconte", journal = "Neuroimage", year = "2010", url = "http://www.ncbi.nlm.nih.gov/pubmed/20600972", doi = "10.1016/j.neuroimage.2010.06.052" } @Article{ Shi10, title = "Perspectives on Modeling in Cognitive Science", author = "R.M. Shiffrin", publisher = "Wiley Online Library", journal = "Topics in Cognitive Science", pages = "736–750", volume = "2", year = "2010", doi = "10.1111/j.1756-8765.2010.01092.x" } @Article{ CAS+10, url = "http://www.ncbi.nlm.nih.gov/pubmed/20661296", volume = "4:47", year = "2010", journal = "Frontiers in Human Neuroscience", title = "Decoding developmental differences and individual variability in response inhibition through predictive analyses across individuals.", author = "Jessica R Cohen and Robert F Asarnow and Fred W Sabb and Robert M Bilder and Susan Y Bookheimer and Barbara J Knowlton and Russell A Poldrack", doi = "10.3389/fnhum.2010.00047" } @Article{ HGC+11, title = "A Common, High-Dimensional Model of the Representational Space in Human Ventral Temporal Cortex", author = "James V. Haxby and J. Swaroop Guntupalli and Andrew C. Connolly and Yaroslav O. Halchenko and Bryan R. Conroy and M. Ida Gobbini and Michael Hanke and Peter J. Ramadge", publisher = "Cell Press,", journal = "Neuron", pages = "404–416", volume = "72", number = "2", month = "Oct", year = "2011", issn = "0896-6273", doi = "10.1016/j.neuron.2011.08.026", url = "http://www.cell.com/neuron/abstract/S0896-6273%2811%2900781-1" } @InProceedings{ GWC10, title = "Scribe Identification in Medieval English Manuscripts", booktitle = " Proceedings of the International Conference on Pattern Recognition", author = "Tara Gilliam and Richard C. Wilson and John A. Clark", year = "2010", url = "ftp://ftp.computer.org/press/outgoing/proceedings/juan/icpr10b/data/4109b880.pdf" } @Article{ CSM+10, url = "http://www.ncbi.nlm.nih.gov/pubmed/20347995", year = "2010", journal = "NeuroImage", title = "Within- and cross-participant classifiers reveal different neural coding of information.", author = "John A Clithero and David V Smith and R McKell Carter and Scott A Huettel", doi = "10.1016/j.neuroimage.2010.03.057" } @Article{ MKE+11, title = "Seeing Touch Is Correlated with Content-Specific Activity in Primary Somatosensory Cortex", author = "Kaspar Meyer and Jonas T Kaplan and Ryan Essex and Hanna Damasio and Antonio Damasio", journal = "Cerebral Cortex", year = "2011", url = "http://www.ncbi.nlm.nih.gov/pubmed/21330469", doi = "10.1093/cercor/bhq289" } @Article{ SSS+11, title = "The integration of negative affect, pain and cognitive control in the cingulate cortex", author = "Alexander J Shackman and Tim V Salomons and Heleen A Slagter and Andrew S Fox and Jameel J Winter and Richard J Davidson", journal = "Nature Reviews Neuroscience", pages = "154–167", volume = "12", year = "2011", url = "http://www.ncbi.nlm.nih.gov/pubmed/21331082", doi = "10.1038/nrn2994" } @Article{ PSR11, issn = "1664-1078", volume = "2", year = "2011", journal = "Front Psychol", title = "Single-trial analyses: why bother?", pages = "322", author = "Cyril R Pernet and Paul Sajda and Guillaume A Rousselet", doi = "10.3389/fpsyg.2011.00322", affiliation = "Brain Research Imaging Centre, SINAPSE Collaboration, University of Edinburgh Edinburgh, UK." } @Article{ JP11, title = "Analyses of regional-average activation and multivoxel pattern information tell complementary stories", author = "K. Jimura and R.A. Poldrack", publisher = "Elsevier", journal = "Neuropsychologia", year = "2011", doi = "10.1016/j.neuropsychologia.2011.11.007" } @Article{ CCK+11, issn = "1879-0445", volume = "21", number = "21", year = "2011", month = nov, journal = "Curr Biol", title = "A head view-invariant representation of gaze direction in anterior superior temporal sulcus", pages = "1817–21", author = "Johan D Carlin and Andrew J Calder and Nikolaus Kriegeskorte and Hamed Nili and James B Rowe", doi = "10.1016/j.cub.2011.09.025", affiliation = "Medical Research Council Cognition and Brain Sciences Unit, 15 Chaucer Road, Cambridge CB2 7EF, UK." } @Article{ RC12, title = "What makes different people's representations alike: neural similarity-space solves the problem of across-subject f{MRI} decoding", author = "Rajeev D.S. Raizada and Andrew C. Connolly", journal = "Journal of Cognitive Neuroscience", year = "In press", url = "http://raizadalab.org/publications.html" } pymvpa2-2.2.0/doc/misc/references.in000066400000000000000000000013241202542755000172640ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: references .. _chap_references: ********** References ********** This list aims to be a collection of literature, that is of particular interest in the context of multivariate pattern analysis. It includes all references cited throughout this manual, but also a number of additional manuscripts containing descriptions of interesting analysis methods or fruitful experiments. pymvpa2-2.2.0/doc/misc/replace_header.sh000077500000000000000000000026271202542755000201040ustar00rootroot00000000000000#!/bin/bash # emacs: -*- mode: shell-script; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*- # vi: set ft=sh sts=4 ts=4 sw=4 noet: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## #echo "./tests/crossval.py" | \ #echo "tests/test_algorithms.py" | \ #echo "mvpa2/datasets/mapper.py" | \ find -iname '*.py' | \ while read fname; do grep -q 'This package is distributed in the hope' $fname || continue descr="`grep '[#"]* *PyMVPA: ' "$fname" | head -1 | sed -e 's/^.*PyMVPA: //g' -e 's/"""//g'`" [ "$descr" == "" ] && \ descr="`sed -n -e '/###/,/^[^#]/p' "$fname" | grep '"""' | head -1 | sed -e 's/^"""\(PyMVPA: *\)*\(.*\)"""/\2/g'`" [ "$descr" == "" ] && \ descr="`sed -n -e '/###/,/^[^#]/p' $fname | sed -n -e '3s/^# *//gp'`" echo "$fname:$descr" cat $fname \ | sed -e '0,/### ###/d' -e '0,/### ###/d' \ | sed -e '1rdoc/misc/header.py' \ | sed -e 's/\t/ /g' \ | sed -n -e "s/\(\"PyMVPA: \)\"/\1${descr}\"/g" -e '2,$p' \ | sed -e 's/ -- loosely implemented//g' \ | sponge $fname done exit 0 problematic: mvpa2/misc/fsl/__init__.py -- removed header completely for some reason... tests/test_algorithms.py os gone! mvpa2/datasets/mapper.py is gone pymvpa2-2.2.0/doc/pics/000077500000000000000000000000001202542755000146165ustar00rootroot00000000000000pymvpa2-2.2.0/doc/pics/.gitignore000066400000000000000000000013671202542755000166150ustar00rootroot00000000000000pymvpa_logo.png pymvpa_logo.jpg download_icon.png download_icon.jpg tutorial_icon.png tutorial_icon.jpg documentation_icon.png documentation_icon.jpg support_icon.png support_icon.jpg movie_icon.png movie_icon.jpg ex_searchlight_vt_r3.pdf ex_searchlight_vt_r1.pdf ex_plot_lightbox.pdf pymvpa_logo.pdf ex_searchlight_vt_r0.pdf ex_searchlight_vt_r3.png ex_searchlight_vt_r1.png ex_plot_lightbox.png ex_searchlight_vt_r0.png .o ex_eventrelated.pdf ex_eventrelated.png ex_sensanas.pdf ex_sensanas.png ex_eyemovements.pdf ex_eyemovements.png ex_curvefitting_bold.pdf ex_curvefitting_searchlight.pdf ex_curvefitting_bold.png ex_curvefitting_searchlight.png ex_mdp_fda.pdf ex_mdp_fda.png pymvpa_icon.png pymvpa_icon.jpg pymvpa_icon_custom.pdf pymvpa_icon_custom.png pymvpa2-2.2.0/doc/pics/Makefile000066400000000000000000000066751202542755000162740ustar00rootroot00000000000000all:: pymvpa_logo.jpg download_icon.jpg tutorial_icon.jpg \ documentation_icon.jpg support_icon.jpg movie_icon.jpg \ pymvpa_icon.jpg \ pics # where the rendered images should go TARGETDIR = ../source/pics STATICDIR = ../source/_static # special case of icon svg ICON_SVG_BASE = pymvpa_icons ICON_HEIGHT = $(shell inkscape -z -f $(ICON_SVG_BASE).svg -H) ICON_WIDTH = $(shell inkscape -z -f $(ICON_SVG_BASE).svg -W) ICON_NUMBER = 6 # PICS_IGNORE must contain a rule for grep PICS_IGNORE ?= "$(ICON_SVG_BASE)" # For every .svg we must have a pdf PDFPICS=$(shell find . -iname \*svg \ | sed -e 's/svg$$/pdf/g' -e 's/\([^\]\)\([ \t:]\)/\1\\\\\2/g' \ | grep -v -e $(PICS_IGNORE) ) # and a png PNGPICS=$(shell find . -iname \*svg \ | sed -e 's/svg$$/png/g' -e 's/\([^\]\)\([ \t:]\)/\1\\\\\2/g' \ | grep -v -e $(PICS_IGNORE) ) pics: $(PDFPICS) $(PNGPICS) clean:: for p in *.svg; do \ rm -f $(TARGETDIR)/$${p%*.svg}.pdf; \ rm -f $(TARGETDIR)/$${p%*.svg}.png; \ rm -f $(TARGETDIR)/$${p%*.svg}.jpg; \ done for p in *.svg; do \ rm -f $${p%*.svg}.pdf; \ rm -f $${p%*.svg}.png; \ rm -f $${p%*.svg}.jpg; \ rm -f $(STATICDIR)/$${p%*.svg}.jpg; \ done -rm -f $(STATICDIR)/*_icon.jpg *_icon.* .PHONY: ignore-% ignore-%: @grep -q "^$*$$" $(TARGETDIR)/.gitignore || { \ echo "$*" >> $(TARGETDIR)/.gitignore; echo "Ignore $*"; } @grep -q "^$*$$" $(STATICDIR)/.gitignore || { \ echo "$*" >> $(STATICDIR)/.gitignore; echo "Ignore $*"; } @grep -q "^$*$$" .gitignore || { echo "$*" >> .gitignore; } # # Inkscape rendered figures # %.pdf: %.svg ignore-%.pdf @echo "Rendering $@" @inkscape -z -f "$<" -A "$@" --export-dpi=300 @cp "$@" $(TARGETDIR) %.png: %.svg ignore-%.png @echo "Rendering $@" @inkscape -z -f "$<" -e "$@" --export-width=500 @cp "$@" $(TARGETDIR) %.jpg: %.png ignore-%.jpg @echo "Converting $*.png to $*.jpg" @convert -flatten -resize x130 $*.png $*.jpg @cp "$@" $(STATICDIR) # special cases download_icon.png: $(ICON_SVG_BASE).svg inkscape -z -f $(ICON_SVG_BASE).svg -e $@ \ --export-area=$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 0" | bc):0:$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 1" | bc):$(ICON_HEIGHT) $(MAKE) ignore-$@ tutorial_icon.png: $(ICON_SVG_BASE).svg inkscape -z -f $(ICON_SVG_BASE).svg -e $@ \ --export-area=$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 1" | bc):0:$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 2" | bc):$(ICON_HEIGHT) $(MAKE) ignore-$@ documentation_icon.png: $(ICON_SVG_BASE).svg inkscape -z -f $(ICON_SVG_BASE).svg -e $@ \ --export-area=$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 2" | bc):0:$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 3" | bc):$(ICON_HEIGHT) $(MAKE) ignore-$@ support_icon.png: $(ICON_SVG_BASE).svg inkscape -z -f $(ICON_SVG_BASE).svg -e $@ \ --export-area=$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 3" | bc):0:$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 4" | bc):$(ICON_HEIGHT) $(MAKE) ignore-$@ movie_icon.png: $(ICON_SVG_BASE).svg inkscape -z -f $(ICON_SVG_BASE).svg -e $@ \ --export-area=$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 4" | bc):0:$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 5" | bc):$(ICON_HEIGHT) $(MAKE) ignore-$@ pymvpa_icon.png: $(ICON_SVG_BASE).svg inkscape -z -f $(ICON_SVG_BASE).svg -e $@ \ --export-area=$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 5" | bc):$(shell echo "$(ICON_HEIGHT) * 0.463/4.211" | bc):$(shell echo "$(ICON_WIDTH) / $(ICON_NUMBER) * 6" | bc):$(ICON_HEIGHT) $(MAKE) ignore-$@ .PHONY: all pics pymvpa2-2.2.0/doc/pics/ex_curvefitting_bold.svg000066400000000000000000002167471202542755000215650ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_curvefitting_searchlight.svg000066400000000000000000002305211202542755000231240ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_eventrelated.svg000066400000000000000000011060171202542755000205230ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_eyemovements.svg000066400000000000000000010346611202542755000205660ustar00rootroot00000000000000 image/svg+xml inverted upright 400 500 600 700 800 900 600 500 400 Screen coordinate [px] 0.5 1.0 1.5 2.0 2.5 0.5 1.0 1.5 2.0 2.5 Gaze Position (Y) Gaze Position (X) Peristimulus Time [s] SVM Sensitivity SVM Sensitivity pymvpa2-2.2.0/doc/pics/ex_mdp_fda.svg000066400000000000000000024345031202542755000174400ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_plot_lightbox.svg000066400000000000000000004546431202542755000207310ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_searchlight_vt_r0.svg000066400000000000000000005135321202542755000214530ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_searchlight_vt_r1.svg000066400000000000000000005170461202542755000214600ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_searchlight_vt_r3.svg000066400000000000000000005252521202542755000214600ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/ex_sensanas.svg000066400000000000000000006274261202542755000176670ustar00rootroot00000000000000 image/svg+xml pymvpa2-2.2.0/doc/pics/pymvpa_icons.svg000066400000000000000000005126021202542755000200540ustar00rootroot00000000000000 1 0 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 00 1 0 1 1 1 01 0 0 0 0 0 00 1 1 0 1 0 0 image/svg+xml pymvpa2-2.2.0/doc/pics/pymvpa_logo.svg000066400000000000000000002453561202542755000177120ustar00rootroot00000000000000 1 0 1 1 1 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 00 1 0 1 1 1 01 0 0 0 0 0 00 1 1 0 1 0 0 image/svg+xml pymvpa2-2.2.0/doc/source/000077500000000000000000000000001202542755000151605ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_static/000077500000000000000000000000001202542755000166065ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_static/.gitignore000066400000000000000000000013671202542755000206050ustar00rootroot00000000000000pymvpa_logo.png pymvpa_logo.jpg download_icon.png download_icon.jpg tutorial_icon.png tutorial_icon.jpg documentation_icon.png documentation_icon.jpg support_icon.png support_icon.jpg movie_icon.png movie_icon.jpg ex_searchlight_vt_r3.pdf ex_searchlight_vt_r1.pdf ex_plot_lightbox.pdf pymvpa_logo.pdf ex_searchlight_vt_r0.pdf ex_searchlight_vt_r3.png ex_searchlight_vt_r1.png ex_plot_lightbox.png ex_searchlight_vt_r0.png .o ex_eventrelated.pdf ex_eventrelated.png ex_sensanas.pdf ex_sensanas.png ex_eyemovements.pdf ex_eyemovements.png ex_curvefitting_bold.pdf ex_curvefitting_searchlight.pdf ex_curvefitting_bold.png ex_curvefitting_searchlight.png ex_mdp_fda.pdf ex_mdp_fda.png pymvpa_icon.png pymvpa_icon.jpg pymvpa_icon_custom.pdf pymvpa_icon_custom.png pymvpa2-2.2.0/doc/source/_static/neurodebian.png000066400000000000000000000115561202542755000216170ustar00rootroot00000000000000‰PNG  IHDRxçÉÚ•sBIT|dˆ pHYs × ×B(›xtEXtSoftwarewww.inkscape.org›î<ëIDAThíšytUÕ½Ç?çÜùææÞÌ ™CBP ‰€-j±¢ðt9Õ÷jd-ž-ô!•¾:”új[Û*vuчP«¾´.­ØÒR(Tj ¦ŒŒŒDráÞÌ7÷ÞÜñLïk $LÒv½Ukµ÷ùíé·÷wÿ†½Ï4MÀår})33ó¿ìv{¦Ùl6ñý¿£x<.…ÃáÞ¾¾¾ïþ@Ð4‚‚‚_ÏŸ?îêÕ«3l6Û?ZÎÏèSP4eåÊ•}›6mÚêv»¿jt¹\_úò—¿£±IÞ?’¢Ñ(¯¾ú*?ü0½½½g•ûÖm£cÊ׈Ô7_ÖqÏòÁÊÀž}Cº“Ü×W`»áÊË:àX”|÷u˜Ksèœýj8@h×A”! iŽQuý¯ÿ¹×µª„¤[«tþ`õNP5RÎù›ÊêõzÙ²e ‹…@ €¦iLž<™Y³fát:Çmg±XxñÅ9zô(Ï?ÿüYå—ÁjF´Y.«¼gi°ï§@ ÇÈßü¿ ¸Ãd™VDê²ùú»Òã‡1îDäÎ>úV½AÏc¿UÓùÁ7j¼Qó7—3³dɪ««éíí¥¹¹™G}”)S¦ðþûïÛN¦OŸÀXwΛÍÄÆÿÁRY|Yå°Ü3ˆoíVl³&c™ZxYºr-™‹è´‰K”Xë)4MÓUU³\Øo®@êì%°iªª&øNŒ¹i¨ªŠ“ðoÚCÿÏ61TÛˆ¢(ÄŽw1ðó-Ä:{ï= ¬ÛF´ÉMè¯M VïDUU"ûZ}Ê ÁÍ{éûÉïüö”hUUÉËËÃd2±hÑ"žyæÖ¬YÃþýû)((à‘GA’$4MãÍ7ßäÞ{ïåšk®áÉ'ŸDQŒÆ„Áôz½,[¶Œ[n¹…?þñ¬[·Ž[ï¼M›6qüøqüqæÎËŒ3¸ï¾ûøðÃxûí·¹é¦›xùå—Yµj3gÎdÁ‚„BcûïQmª£ìu_¿(`F‚0 DÜ; /¾¢(£Y–Ïz$I‚ŒdRŸ|@ï×ÿú{H’¤?²,£™ ˆiI$/¸…¾gßBŽÅ‘$ !Í‚‹ãž÷ ê]¨@×WÊà¯wÚsŒÞoW#GãȲL¸¡ÞÇ_%>¤ÿ‡ð­ÝJÏÓ¿¦ké:$IâÔC/ÐýØ/Q#1úô[Üs¿‹¡ª*©©©‚ Ëe³Ùxê©§hoo§¶¶–·Þz‹E‹1gÎV­ZÅêÕ«yå•W0  –.]Цi>|˜û×K,£¦¦‹Å‚ÛífãÆ:xuuu|ãßÀétRWWÇK/½Dvv6“&Mâõ×_gëÖ­cb3ʇkŽ Ú̳SþÊ4œž+¯ÂÄ[½Èž~lŸŸ†&ËD÷µ`Ÿ;ãœíÆâÙÝÊà‹@éñxy;Î'ïGpž6iªADö‡IûþC7|Àà¯v‘ô•Ù’‘pC+R‹‡ÌÆ5 (’ÄÐ[»Iùñ“²ŒáмĨIfLW—ûÅvTQ óÏ«ˆï"²}?¹Ík’,$­¸ ïô„êŽa½!q’EY>éO›6 ·ÛMuu5•••,\¸A˜4iõõõˆ¢ˆ¢(Üÿý,X°€+¯¼’eË–Q__ÙlÖûºá†hnnFøäÙÚÚÊúõë‰F£X, ={öl}ôQn¼ñF6lØ@SSÓø+Š@ä¯M˜§$4å<ÀÆ÷wüÍûÄêšÐÂ1,7\AòÎG1 h&æ9•gõ3Àcn¾y‘ û¸ã”|½®"‚&+¨N+ŽÇæãÿÉï1ß} šA@SU"ïÁPœEhgâ¶L E‰íiFþğ˲Œ*I¨I&ý4j ‚ýÑÛQDˆ¼{㔋>ÑXUDdÇ ה게8)) ¿ßOcc#‡ƒ¥K—">Ÿ#GŽPQQ@UU²,3uêTy<ž„%¡½š¦!\uÕUÞ;vä /´ÜèFH² fè•”¦S„¿Y &#I´s|NàåOûQ_Úv¢ï4úÉ7=.Ûé~»a0„ð¹+F÷U×’ˆ¤§$¢cú‚h'Ál„ò¾;pRìPœ {ÚrSÑÂ1è Ì>ãb§³­µ !? aòºººØ·o¢(¢ª*¹¹¹”””‘1ú‡Ahkk£½½»ÝNyy9N§“ŽŽ:;;ÉÊÊ¢¢¢«ÕŠ ´¶¶â÷ûÉÊÊ¢¨¨·ÛM?Ó§OÇãñàñx˜8q"’$qòäI233™8q">ŸÖÖV’““õ mä9sæx„ªª*ï;3s&#óÊÞ6䚣hQ óS÷\4¨cÖ‘hè@ÝÕ»Ѽƒ£·4 ž}@ì|Ç« á_ ãüR4$ïRóã¥Rg¬tdþ¶Ûnó!a¿Ïudª  †c({Û0Ä%0ˆçqÌ4ƒÝÍhï…ÚfFÏZ4-/mñÍhó§£ À'>¬½½‡ÃAnn.‚  ( ½½½ô÷÷“——‡ÕjÅï÷ÇÑ4H$BVV‹…®®.ý†)--òòòðz½8²³³X,¦ß/G"DQÔûðx<ø|>‡è8RSSõ³i0$ FuŸ˜™™‰ÏçÃh4êG¼¼šN¡mùéµ÷Î>wý3Ó¶n„?@ÛÔ€àKø ­,f– ¼w õú2Ô®E½¾,ì'Çšp8ÌáÇÉÎÎ&33“žžúûû‰D"øý~rsséèè@Ó4òòòHIIADQ¤££ƒH$B^^YYY>|ŸÏGqq1GŽ!==ÔÔTðx:„Óéäøñãô÷÷3mÚ4’““u0ëêê((( ==·ÛÃá ''‡ &`0â£>"++‹+¯L˜ÿÝ»w ™2e GŽ!RRRBmm-iiiLœ8‘h4JMM ¥¥¥”——³oß>ü~?×]wƒ½{÷ÒÝÝÍõ×_Ãá`Ã35YÓ4„ÊÊJïæÍ›sΘ¦ih„cÈË…€€°r\U4v›˜„ÖÞƒPׂøn#4{Okh~ZE>êMå§Pî»%7e´ÕPUp»Ýdee‡Q—Ë…$Iøý~²³³illäŠ+® ‹ÑÓÓƒ,ˤ¥¥éå999„ÃaÚÛÛu­q»Ý¸\.ÊËˉÇã444PQQËå"‰ÐÝÝ @FFØívJJJ0 hšÆàà Ç'99™p8L8¦¨¨EQ8qâ6› ‹ÅBww7'N¤¸¸˜þþ~:::HIIÁétÒÒÒBQQEEEˆ¢H `hh·ÛM<§²²ƒÁÀþýûq¹\Ìœ9“@ ÀÁƒIMMeúôé˜L&DQ×TÏ›7Ï#Lž<ùÄ;ï¼Sx&PãæcÚ6ÃÆ}p{Ü:-3ÍbBØÝ {ÛZº ezÕ™ÅÈ ?‡:-ºýh.šÓvÖæ6mmmmôöö’‘‘Óé$++‹h4JKK N§“ââbTU%H™AÀn·c2™èééÁét’””„¢(ôôôàp$‚¬P(Dzz:@§Ó‰Ñh$  …°Z­X­Vl6½½½ttt››KJJ ñxâÎ;c2™ÈÏÏÇd2áõz ‡Ã8ÝÌ{½^ŒF#¥¥¥ø|>DQÔÍy8¦»»›ììl’““ñz½ú¤ $%%‘ÍÐФ¦¦êÇ*«ÕJzzúY&y<|ûí·,6lÛ¶m†Íf;7°gjêÑS/½ G=à ( •e¡M+@-φ¾¡`“sP§ä¢¥&ÓB çUUÕµÕd2éþm˜¯iv»ý´E8O”>ÖûH+xö•ÃmAÀjµb4ÏZÄáTÓ4'OžÄápP\\_äz>ÞÅ”_(@Ÿ¶ýòåË}555b±XÓc=6¹©©©hÖ¬Y6³Ù<µxšA€Ú‘õ¥‚{1õÆz†O#Ó‘ÏðÍðû˜Öiœ¹Ž¤ ÙDr\ºÐzãyf½P(Ä÷¾÷½þ½{÷nìííý‰0,œËåºÛét~×f³¥™L¦óþì|.Íø{—]jùxgÞËQþ÷.$IŠD"Á`ðéÁÁÁ­ÿbmg¦¬§IEND®B`‚pymvpa2-2.2.0/doc/source/_static/nitrc.jpg000066400000000000000000000051631202542755000204340ustar00rootroot00000000000000ÿØÿàJFIF––ÿÛC     ÿÛC   ÿÀ#x"ÿÄ ÿÄ< !"1AQaq2Ñ#BTb‘35CRUst“”¡ÔÿÄÿÄ.!1QAq‘"2a¡ÁÑáR±ðÿÚ ?ýHŸPK„ô¹o%ˆì¤­Çz$ fk¯µMÏtV¥Qv¾ÛfsÌ+¨ÔšzFúvR?Íq½Jû`ÖêP¶æ•G§KU5»‚µ•2 ƒ…EŽâðµèODgÓž“T)«µj6®ÙØŒG·šœ™+TÎè,D‹ˆqÀ“ÑÉ RÒ9/8É':Q÷ÔÛ°Ês8æh“ "T¥&¬$‘Ìuчaœ(Åâ$æ$-¤jy› nH´×Rí7SI”›ÄÓ ëÜ1mÀS#åƒ)ncðΚÚ?6mòõçmR7€Èç%Êw©ÕVZyχw£ ç­?e­¶[Iž'W%~Ôª”×qGð  GXÛªtªl¤Ñä<в•ÀuÂãhR@$#=[^!@úŒô:ئê)W G¹*žƒíIw¬®Å¼¼‰>ÇóNûM»6ÖöXÔû²Ôž'Rf#‹,tSn'Í+IèAÔµÉ-4â·P…¬á R€*ú{ë5vFÛé6õ»¿ ÑnO¨Â”à [LÅÅBåp@))8ò)#Ó_{KØìnVúí·*tÚs2¢VœD˜©§Yy ´¶œ¥*àô×G Ð}̪0 ™‰ÐñI¼KS¼{Åisø–‚œê2ØÊÇ!à}}µJm~ìÖ­Û¥­µÜå6ÅÖM&¸”ð‹^e?´ƒä—ÀûÍþ#PФ—¿N;YŽùÀ¢S c™ð²Þ9O·_m85)*:AÔT#¯´kA/ôZuÊœFŠBå°‚ HÈ>GÏË^>Øûôo÷“ùêÛ­™²·j¶ö­r[Ñk#mÓš2d•”†@$(z“üõìÿ± Ï3sU¶"NM:ï yK=ËáÅ´øº$dãë«vr¬©Gí†ñüª»ÅÈ úþ«R.§°‚¹l ,e%N¤rã¯]yMZÔ™‘ÔO@ÉÉÿ½díܶ¶h‹Z‘yEb=¡Ñy¸–Óî´‡D”ñÂ[ç.§\.zÏef-Ú“ˆ§}ÚâÁžÛ©_Ç‚¸ +8Á$tdà3%*G5ì™ó¬à`Fçõ[ÇËjZÔ”!#*RŽ3¤¤”ŸñX?òùë'5›“nû6Ù—ƒÒÜ[”£W޹.[LÅqÖ[ui9RHáÈg®:êó™6¬'ˆ±©òþˆþz ˜f˜€âÍæ  7VÒâ—åyMYŒ¼Ü†ÒãKK­¨e+AÈ?B4jµ;LÎÓɹ#Ó&¨Ûõ¢\ QäQOÚR¶ÐI>¤•`` èÒK J¡GJ:I"â)´DŠLz“”îëy¶^‡Z¡ÄÉ\W ñÀ ©æ–ÒJJøø±¨=™uÛ—¤jkôkê™s;HY\*‚¥"%b!#‰nC.a+Ê@Jùp*ÀƲ¤…5Ý ­¡nå¬íºÂÊ9£LŽ®!¾ž¨y•ލZOPGãÓU‡Ùòø¤S·t]7-2½U¼iÑéÑj,¶¶‰ Fv:}Ti½qJ¬1Ü~­·xñB²ˆc®2>zcÝÉÎÅÞ=ŸBd¸ÃÏœ@p¥ 1ÀPÎ_}9oÝŠM™L}”³-K¸) .kIåá äg>ÞùÕgY‘>}z×M Ê`çÓÓÄSñJ¥m´ç÷î ô$Æû5Š´•F<»ââžKC¦8á$yç婵bšŠ¥"t"†Ô$°ã82“É%=G·]fªþöîK•k½êtI ShÕ)pØ0("¡m°qÉÇÃà¥G’xå>ZRÍý~\{–™4ÛΓN ?gÇ®†€§£¶’£Þ, …0zû`c:µ%k‚£ §‡b:”•)I'‰ÚÖ÷§Ùæå¦ífØ@¤Öi¬Þ¶©~$‰HqÈ2V¦Üexa B‡ˆ Ž=´›â·ßÕ{wŸµ'æÕlîüîßt×¢Ú1dN¤Ò f.›FnP”\ŒÛÝêûÉ ©°®óŸº<óœ<ÙûÁîBߢSÝ£ÚõG(ïTç¾óB`qh”c„6”8R>ï%J)'šeN¸«¸Ô߄߅ ]‚óIÎV Mô"DN›O­X[?b]ÝFé®Þ5h3ë•ùhyQi]çÁÂm¶ÂÛ}爜 “’|´j7ÙÖEmwnìǯÕ«Op6Ñz(RCc¢PTx|À>yѤžQRÉW§õHâ0Ãçr0ž`š»±£4hµÑ5*QÑ£R¥Ñ5*TróÛ‹[qŠÍÏ@§×šŠ²ã¨GK¡µ‚S‘ÐãLô}ˆÛ»yNm•D‚\[N(± 䦖lœ4­!CØŒèÑ­fP 2œSèGv—NÒc¥'®özÛK–µ&«T²(“j2œï_ìD•<³æ¥ÿxŸR|ôåulÝz·Nn»iR*¨§¶ˆ™1 Ëcû4ôèáòùhѫέë_Y‰ðžñ^.mËjGrì6Ý]õN¬YtióÚ»<ø$qBI¨òï]Ùâ¤Si•:‹*5¸QÕ 1’z”·áõ yèÑ©[ÔÌHÊŠðésn[Sµ·öÖßC~%³BBŒú´—ÉXN>Ú4hÖI&æ—ZÔâŠÖdž&¿ÿÙpymvpa2-2.2.0/doc/source/_static/robots.txt000066400000000000000000000001431202542755000206550ustar00rootroot00000000000000# robots.txt for http://www.pymvpa.org User-agent: * Disallow: /files/pymvpa_exampledata.tar.bz2 pymvpa2-2.2.0/doc/source/_themes/000077500000000000000000000000001202542755000166045ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_themes/pymvpa_offline/000077500000000000000000000000001202542755000216225ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_themes/pymvpa_offline/indexsidebar.html000066400000000000000000000024441202542755000251550ustar00rootroot00000000000000

Quick links

Search mailing list archive

pymvpa2-2.2.0/doc/source/_themes/pymvpa_offline/layout.html000066400000000000000000000015541202542755000240320ustar00rootroot00000000000000{% extends "basic/layout.html" %} {% block extrahead %} {% endblock %} {% block rootrellink %}
  • PyMVPA Home
  • Sitemap »
  • {% endblock %} {%- block sidebarlogo %} {%- endblock sidebarlogo %} {% block relbar1 %} {{ super() }} {% endblock %} {% block sidebarsearch %} {{ super() }}

    NeuroDebian

    NITRC-listed

    {% endblock %} pymvpa2-2.2.0/doc/source/_themes/pymvpa_offline/static/000077500000000000000000000000001202542755000231115ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_themes/pymvpa_offline/static/pymvpa.css_t000066400000000000000000000133151202542755000254650ustar00rootroot00000000000000/** * Sphinx stylesheet -- default theme * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ #header { height: 130px; margin: 0px; padding: 0 15px 5px 0; background-color: #fff; background-image: url(pymvpa_logo.jpg); background-repeat: no-repeat; border-bottom: 5px solid #822; } #hdrsubtitle { color: #444; font-weight: bold; font-size: 1.5em; text-align: right; position: relative; top: 100px; } body { font-family: {{ theme_bodyfont }}; font-size: 100%; background-color: {{ theme_footerbgcolor }}; color: #000; margin: 0; padding: 0; } div.document { background-color: {{ theme_sidebarbgcolor }}; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: {{ theme_bgcolor }}; color: {{ theme_textcolor }}; padding: 0 20px 30px 20px; } {%- if theme_rightsidebar|tobool %} div.bodywrapper { margin: 0 230px 0 0; } {%- endif %} div.footer { color: {{ theme_footertextcolor }}; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: {{ theme_footertextcolor }}; text-decoration: underline; } div.related { background-color: {{ theme_relbarbgcolor }}; line-height: 30px; color: {{ theme_relbartextcolor }}; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; } div.related a { color: {{ theme_relbarlinkcolor }}; } div.related a:hover { text-decoration: none; border-top: 1px solid {{ theme_relbarlinkcolor }}; border-bottom: 1px solid {{ theme_relbarlinkcolor }}; } div.sphinxsidebar { {%- if theme_stickysidebar|tobool %} top: 30px; margin: 0; position: fixed; overflow: auto; height: 100%; {%- endif %} {%- if theme_rightsidebar|tobool %} float: right; {%- if theme_stickysidebar|tobool %} right: 0; {%- endif %} {%- endif %} } {%- if theme_stickysidebar|tobool %} /* this is nice, but it it leads to hidden headings when jumping to an anchor */ /* div.related { position: fixed; } div.documentwrapper { margin-top: 30px; } */ {%- endif %} div.sphinxsidebar form { margin-bottom: 1em; } div.sphinxsidebar h3 { font-family: {{ theme_headfont }}; color: {{ theme_sidebartextcolor }}; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; border-bottom: 1px dashed #ccc; } div.sphinxsidebar h3 a { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar h4 { border-bottom: 1px dashed #ccc; font-family: {{ theme_headfont }}; color: {{ theme_sidebartextcolor }}; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px 0 10px 2px; padding: 0; color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar li { padding-top: 0.2em; } div.sphinxsidebar a { color: {{ theme_sidebarlinkcolor }}; display: block; padding-left: 3px; padding-right: 3px; border: 1px solid {{ theme_sidebarbgcolor }}; } div.sphinxsidebar a:hover { text-decoration: none; background-color: #fafafa; border-top: 1px solid {{ theme_sidebarlinkcolor }}; border-bottom: 1px solid {{ theme_sidebarlinkcolor }}; } div.sphinxsidebar input { border: 1px solid {{ theme_sidebarlinkcolor }}; font-family: sans-serif; font-size: 1em; } p.searchtip { display: none; } /* -- body styles ----------------------------------------------------------- */ a { color: {{ theme_linkcolor }}; text-decoration: none; } a:hover { text-decoration: underline; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: {{ theme_headfont }}; background-color: {{ theme_headbgcolor }}; font-weight: normal; color: {{ theme_headtextcolor }}; border-bottom: 1px dashed #ccc; margin: 20px -5px 10px -5px; padding: 0 5px 0 5px; } div.body h1 { margin-top: 10px; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: {{ theme_headlinkcolor }}; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; } a.headerlink:hover { background-color: {{ theme_headlinkcolor }}; color: white; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.admonition p.admonition-title + p { display: inline; } div.note { background-color: #eee; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; } div.seealso { background-color: #fff8e4; border-top: 1px solid #fcbd00; border-bottom: 1px solid #fcbd00; } div.admonition-exercise { background-color: #dcf1ff; border-top: 1px solid #459cff; border-bottom: 1px solid #459cff; } div.topic { background-color: #eee; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } p.admonition-title { display: inline; } p.admonition-title:after { content: ":"; } pre { padding: 10px; background-color: {{ theme_codebgcolor }}; color: {{ theme_codetextcolor }}; line-height: 120%; border: 1px solid #ac9; border-left: none; border-right: none; } tt { background-color: #ecf0f3; padding: 0 1px 0 1px; font-size: 0.95em; } tt.xref { font-size: 16px; } pymvpa2-2.2.0/doc/source/_themes/pymvpa_offline/theme.conf000066400000000000000000000011161202542755000235720ustar00rootroot00000000000000[theme] inherit = basic stylesheet = pymvpa.css pygments_style = sphinx [options] rightsidebar = true stickysidebar = false footerbgcolor = #fff footertextcolor = #000 sidebarbgcolor = #fff sidebartextcolor = #444 sidebarlinkcolor = #000 relbarbgcolor = #fafafa relbartextcolor = #555 relbarlinkcolor = #000 bgcolor = #ffffff textcolor = #000000 headbgcolor = #fff headtextcolor = #444 headlinkcolor = #993e4c linkcolor = #993e4c codebgcolor = #eeffcc codetextcolor = #333333 bodyfont = Arial, sans-serif headfont = Arial, sans-serif pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/000077500000000000000000000000001202542755000214645ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/indexsidebar.html000066400000000000000000000025371202542755000250220ustar00rootroot00000000000000

    Quick links

    Search mailing list archive

    pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/layout.html000066400000000000000000000024471202542755000236760ustar00rootroot00000000000000{% extends "basic/layout.html" %} {% block extrahead %} {% endblock %} {% block rootrellink %}
  • PyMVPA Home
  • Sitemap »
  • {% endblock %} {%- block sidebarlogo %} {%- endblock sidebarlogo %} {% block relbar1 %} {{ super() }} {% endblock %} {% block sidebarsearch %} {{ super() }}

    NeuroDebian

    NITRC-listed

    {% endblock %} {% block footer %} {{ super() }} {% endblock %} pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/page.html000066400000000000000000000012751202542755000232730ustar00rootroot00000000000000{% extends "basic/page.html" %} {% block body %}
    To provide the most recent news and documentation www.pymvpa.org reflects the development 2.0 series (renamed 0.6 series) of PyMVPA. If you are interested in the documentation of the previous stable 0.4 series of PyMVPA, please visit v04.pymvpa.org.
    {{ super() }}
    {% endblock %} pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/static/000077500000000000000000000000001202542755000227535ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/static/pymvpa.css_t000066400000000000000000000133151202542755000253270ustar00rootroot00000000000000/** * Sphinx stylesheet -- default theme * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @import url("basic.css"); /* -- page layout ----------------------------------------------------------- */ #header { height: 130px; margin: 0px; padding: 0 15px 5px 0; background-color: #fff; background-image: url(pymvpa_logo.jpg); background-repeat: no-repeat; border-bottom: 5px solid #822; } #hdrsubtitle { color: #444; font-weight: bold; font-size: 1.5em; text-align: right; position: relative; top: 100px; } body { font-family: {{ theme_bodyfont }}; font-size: 100%; background-color: {{ theme_footerbgcolor }}; color: #000; margin: 0; padding: 0; } div.document { background-color: {{ theme_sidebarbgcolor }}; } div.documentwrapper { float: left; width: 100%; } div.bodywrapper { margin: 0 0 0 230px; } div.body { background-color: {{ theme_bgcolor }}; color: {{ theme_textcolor }}; padding: 0 20px 30px 20px; } {%- if theme_rightsidebar|tobool %} div.bodywrapper { margin: 0 230px 0 0; } {%- endif %} div.footer { color: {{ theme_footertextcolor }}; width: 100%; padding: 9px 0 9px 0; text-align: center; font-size: 75%; } div.footer a { color: {{ theme_footertextcolor }}; text-decoration: underline; } div.related { background-color: {{ theme_relbarbgcolor }}; line-height: 30px; color: {{ theme_relbartextcolor }}; border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; } div.related a { color: {{ theme_relbarlinkcolor }}; } div.related a:hover { text-decoration: none; border-top: 1px solid {{ theme_relbarlinkcolor }}; border-bottom: 1px solid {{ theme_relbarlinkcolor }}; } div.sphinxsidebar { {%- if theme_stickysidebar|tobool %} top: 30px; margin: 0; position: fixed; overflow: auto; height: 100%; {%- endif %} {%- if theme_rightsidebar|tobool %} float: right; {%- if theme_stickysidebar|tobool %} right: 0; {%- endif %} {%- endif %} } {%- if theme_stickysidebar|tobool %} /* this is nice, but it it leads to hidden headings when jumping to an anchor */ /* div.related { position: fixed; } div.documentwrapper { margin-top: 30px; } */ {%- endif %} div.sphinxsidebar form { margin-bottom: 1em; } div.sphinxsidebar h3 { font-family: {{ theme_headfont }}; color: {{ theme_sidebartextcolor }}; font-size: 1.4em; font-weight: normal; margin: 0; padding: 0; border-bottom: 1px dashed #ccc; } div.sphinxsidebar h3 a { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar h4 { border-bottom: 1px dashed #ccc; font-family: {{ theme_headfont }}; color: {{ theme_sidebartextcolor }}; font-size: 1.3em; font-weight: normal; margin: 5px 0 0 0; padding: 0; } div.sphinxsidebar p { color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar p.topless { margin: 5px 10px 10px 10px; } div.sphinxsidebar ul { margin: 10px 0 10px 2px; padding: 0; color: {{ theme_sidebartextcolor }}; } div.sphinxsidebar li { padding-top: 0.2em; } div.sphinxsidebar a { color: {{ theme_sidebarlinkcolor }}; display: block; padding-left: 3px; padding-right: 3px; border: 1px solid {{ theme_sidebarbgcolor }}; } div.sphinxsidebar a:hover { text-decoration: none; background-color: #fafafa; border-top: 1px solid {{ theme_sidebarlinkcolor }}; border-bottom: 1px solid {{ theme_sidebarlinkcolor }}; } div.sphinxsidebar input { border: 1px solid {{ theme_sidebarlinkcolor }}; font-family: sans-serif; font-size: 1em; } p.searchtip { display: none; } /* -- body styles ----------------------------------------------------------- */ a { color: {{ theme_linkcolor }}; text-decoration: none; } a:hover { text-decoration: underline; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { font-family: {{ theme_headfont }}; background-color: {{ theme_headbgcolor }}; font-weight: normal; color: {{ theme_headtextcolor }}; border-bottom: 1px dashed #ccc; margin: 20px -5px 10px -5px; padding: 0 5px 0 5px; } div.body h1 { margin-top: 10px; font-size: 200%; } div.body h2 { font-size: 160%; } div.body h3 { font-size: 140%; } div.body h4 { font-size: 120%; } div.body h5 { font-size: 110%; } div.body h6 { font-size: 100%; } a.headerlink { color: {{ theme_headlinkcolor }}; font-size: 0.8em; padding: 0 4px 0 4px; text-decoration: none; } a.headerlink:hover { background-color: {{ theme_headlinkcolor }}; color: white; } div.body p, div.body dd, div.body li { text-align: justify; line-height: 130%; } div.admonition p.admonition-title + p { display: inline; } div.note { background-color: #eee; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc; } div.seealso { background-color: #fff8e4; border-top: 1px solid #fcbd00; border-bottom: 1px solid #fcbd00; } div.admonition-exercise { background-color: #dcf1ff; border-top: 1px solid #459cff; border-bottom: 1px solid #459cff; } div.topic { background-color: #eee; } div.warning { background-color: #ffe4e4; border: 1px solid #f66; } p.admonition-title { display: inline; } p.admonition-title:after { content: ":"; } pre { padding: 10px; background-color: {{ theme_codebgcolor }}; color: {{ theme_codetextcolor }}; line-height: 120%; border: 1px solid #ac9; border-left: none; border-right: none; } tt { background-color: #ecf0f3; padding: 0 1px 0 1px; font-size: 0.95em; } tt.xref { font-size: 16px; } pymvpa2-2.2.0/doc/source/_themes/pymvpa_online/theme.conf000066400000000000000000000011161202542755000234340ustar00rootroot00000000000000[theme] inherit = basic stylesheet = pymvpa.css pygments_style = sphinx [options] rightsidebar = true stickysidebar = false footerbgcolor = #fff footertextcolor = #000 sidebarbgcolor = #fff sidebartextcolor = #444 sidebarlinkcolor = #000 relbarbgcolor = #fafafa relbartextcolor = #555 relbarlinkcolor = #000 bgcolor = #ffffff textcolor = #000000 headbgcolor = #fff headtextcolor = #444 headlinkcolor = #993e4c linkcolor = #993e4c codebgcolor = #eeffcc codetextcolor = #333333 bodyfont = Arial, sans-serif headfont = Arial, sans-serif pymvpa2-2.2.0/doc/source/changelog.rst000077700000000000000000000000001202542755000220742../../Changelogustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/classifiers.txt000066400000000000000000000641211202542755000202340ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_classifiers: .. index:: classifier *********** Classifiers *********** .. automodule:: mvpa2.clfs .. only:: html Related API documentation ========================= .. currentmodule:: mvpa .. autosummary:: :toctree: generated clfs.base clfs.meta clfs.blr clfs.enet clfs.glmnet clfs.gnb clfs.gpr clfs.knn clfs.lars clfs.plr clfs.ridge clfs.smlr clfs.svm clfs.sg clfs.libsvmc clfs.distance clfs.similarity clfs.stats clfs.transerror clfs.warehouse PyMVPA includes a number of ready-to-use classifiers, which are described in the following sections. All classifiers implement the same, very simple interface. Each classifier object takes all relevant parameters as arguments to its constructor. Once instantiated, the classifier object's :meth:`~mvpa2.clfs.base.Classifier.train` method can be called with some dataset. This trains the classifier using *all* samples in the respective dataset. The major task for a classifier is to make predictions. Predictions are made by calling the classifier's :meth:`~mvpa2.clfs.base.Classifier.predict` method with one or multiple data samples. :meth:`~mvpa2.clfs.base.Classifier.predict` operates on pure sample data and not datasets, as in some cases the true label for a sample might be totally unknown. This examples demonstrates the typical daily life of a classifier. >>> import numpy as np >>> from mvpa2.clfs.knn import kNN >>> from mvpa2.datasets import dataset_wizard >>> training = dataset_wizard(samples=np.array( ... np.arange(100),ndmin=2, dtype='float').T, ... targets=[0] * 50 + [1] * 50) >>> rand100 = np.random.rand(10)*100 >>> validation = dataset_wizard(samples=np.array( ... rand100, ndmin=2, dtype='float').T, ... targets=[ int(i>50) for i in rand100 ]) >>> clf = kNN(k=10) >>> clf.train(training) >>> np.mean(clf.predict(training.samples) == training.targets) 1.0 >>> np.mean(clf.predict(validation.samples) == validation.targets) 1.0 Two datasets with 100 and 10 samples each are generated. Both datasets only have one feature and the associated label is 0 if the feature value is below 50 or 1 otherwise. The larger dataset contains all integers in the interval (0,100) and is used to train the classifier. The smaller is used as a validation dataset, to check whether the classifier learned something that generalizes well across samples not included in the training dataset. In this case the validation dataset consists of 10 random floating point values in the interval (0,100). The classifier in this example is a :class:`~mvpa2.clfs.knn.kNN` (k-Nearest-Neighbour) classifier that makes use of the 10 nearest neighbours of a data sample to make its predictions (k=10). One can see that after the training the classifier performs optimally on the training dataset as well as on the validation data samples. The choice of the classifier in the above example is more or less arbitrary. Any classifier in PyMVPA could be used in place of kNN. This demonstrates another useful feature of PyMVPA's classifiers. Due to the high-level abstraction and the simple interface, almost all classifiers can be combined with most algorithms in PyMVPA. This makes it very easy to test different classifiers on some dataset (see Fig. 1). .. image:: pics/classifier_comparison_plot.png :align: center :alt: Classifier comparison A comparison of the behavior of different classifiers (k-Nearest-Neighbour, linear SVM, logistic regression, ridge regression and SVM with radial basis function kernel) on a simple classification problem. The code to generate these figure can be found in the `pylab_2d.py` example in the :ref:`example_pylab_2d` section. .. index:: ca Stateful objects ================ Before looking at the different classifiers in more detail, it is important to mention another feature common to all of them. While their interface is simple, classifiers are in no way limited to report only predictions. All classifiers implement an additional interface: Objects of any class that are derived from :class:`~mvpa2.base.state.ClassWithCollections` have attributes (we refer to such attributes as conditional attributes), which are conditionally computed and stored by PyMVPA. Such conditional storage and access is handy if a variable of interest might consume a lot of memory or needs intensive computation, and not needed in most (or in some) of the use cases. For instance, the :class:`~mvpa2.clfs.base.Classifier` class defines the `trained_targets` conditional attribute, which just stores the unique targets for which the classifier was trained. Since `trained_targets` stores meaningful information only for a trained classifier, attempt to access 'clf.ca.trained_targets' before training would result in an error, >>> from mvpa2.misc.exceptions import UnknownStateError >>> try: ... untrained_clf = kNN() ... targets = untrained_clf.ca.trained_targets ... except UnknownStateError: ... "Does not work" 'Does not work' since the classifier has not seen the data yet and, thus, does not know the targets. In other words, it is not yet in the state to know anything about the targets. Any conditional attribute can be enabled or disabled on per instance basis at any time of the execution (see :class:`~mvpa2.base.state.ClassWithCollections`). To continue the last example, each classifier, or more precisely every stateful object, can be asked to report existing state-related attributes: >>> list_with_verbose_explanations = clf.ca.listing 'clf.ca' is an instance of :class:`~mvpa2.base.state.ConditionalAttributesCollection` class which is a container for all conditional attributes of the given class. To access (query the value or set the value if state is enabled), and enable or disable you should operate on `ca` collection (which is different from version prior '0.5.0' where you could query values directly from the object, i.e. `clf` in this example) >>> clf.ca.trained_targets array([0, 1]) >>> print clf.ca ca{distances training_time*+ predicting_time*+ training_stats...} >>> clf.ca.enable('estimates') >>> print clf.ca ca{distances training_time*+ predicting_time*+ training_stats...} >>> clf.ca.disable('estimates') A string representation of the state collection mentioned above lists all conditional attributes present accompanied with 2 markers: '+' for an enabled conditional attribute, and '*' for a variable that stores some value (but might have been disabled already and, therefore, would have no '+' and attempts to reassign it would result in no action). .. TODO: Refactor By default all classifiers provide conditional attributes `estimates` and `predictions`. The latter is simply the set of predictions that was returned by the last call to the objects :meth:`~mvpa2.clfs.base.Classifier.predict` method. The former is heavily classifier-specific. By convention the `estimates` key provides access to the raw values that a classifier prediction is based on (e.g. votes or probabilities per each label). Depending on the classifier, this information might required significant resources when stored. Therefore all ca can be disabled or enabled (`ca.disable()`, `ca.enable()`) and their current status can be queried like this: >>> clf.ca.is_active('predictions') True >>> clf.ca.is_active('estimates') False States can be enabled or disabled during stateful object construction, if `enable_ca` or `disable_ca` (or both) arguments, which store the list of desired conditional attributes names, passed to the object constructor. Keyword 'all' can be used to select all known ca for that stateful object. .. index:: error, classifier error, transfer error .. _transfer_error: Error Calculation ================= The :class:`~mvpa2.clfs.transerror.TransferError` class provides a convenient way to determine the transfer error of a trained classifier on some validation dataset, i.e. the accuracy of the classifier's predictions on a novel, independent dataset. A :class:`~mvpa2.clfs.transerror.TransferError` object is instantiated by passing a classifier object to the constructor. Optionally a custom error function can be specified (see `errorfx` argument). To compute the transfer error simply call the object with a validation dataset. The computed error value is returned. :class:`~mvpa2.clfs.transerror.TransferError` also supports a conditional attribute `stats` that contains the full confusion matrix of the predictions made on the validation dataset. The confusion matrix is disabled by default. If the :class:`~mvpa2.clfs.transerror.TransferError` object is called with an optional training dataset, the contained classifier is first training using this dataset before predictions on the validation dataset are made. >>> from mvpa2.clfs.transerror import TransferError >>> clf = kNN(k=10) >>> terr = TransferError(clf) >>> terr(validation, training ) 0.0 .. index:: cross-validation .. _cross-validation: Cross-validated Transfer Error ------------------------------ Often one is not only interested in a single transfer error on one validation or test dataset, but on a cross-validated estimate of the transfer error. A popular method is the so-called leave-one-out cross-validation. The :class:`~mvpa2.algorithms.cvtranserror.CrossValidatedTransferError` class provides a simple way to compute such measure. It utilizes a :class:`~mvpa2.clfs.transerror.TransferError` object and a :class:`~mvpa2.datasets.splitters.Splitter`. When called with a :class:`~mvpa2.datasets.base.Dataset` the splitter generates splits of the Dataset and the transfer error for all splits is computed by training on one of the splitted datasets and making predictions on the other. By default the mean of transfer errors is returned (but the actual `combiner` function is customizable). The following example shows the minimal code for a leave-one-out cross-validation reusing the transfer error object from the previous example and some :class:`~mvpa2.datasets.base.Dataset` `data`. >>> # create some dataset >>> from mvpa2.misc.data_generators import normal_feature_dataset >>> data = normal_feature_dataset(perlabel=50, nlabels=2, ... nfeatures=20, nonbogus_features=[3, 7], ... snr=3.0) >>> # now cross-validation >>> from mvpa2.algorithms.cvtranserror import CrossValidatedTransferError >>> from mvpa2.datasets.splitters import NFoldSplitter >>> cvterr = CrossValidatedTransferError(terr, ... NFoldSplitter(cvtype=1), ... enable_ca=['stats']) >>> error = cvterr(data) Error Reporting =============== PyMVPA is equipped with easy ways to have a glance overview over the generalization performance of a cross-validated classifier. Such summary is provided by instances of a :class:`~mvpa2.clfs.transerror.ConfusionMatrix` class, and is accompanied by various performance metrics. For example, the 8-fold cross-validation of the dataset with 8 targets with the SMLR classifier produced the following confusion matrix:: >>> # Simple 'print cvterr.stats' provides the same output >>> # without the description of abbreviations >>> print cvterr.stats.as_string(description=True) \ ... # doctest: +SKIP --------. 3kHz 7kHz 12kHz 20kHz 30kHz song1 song2 song3 song4 song5 predict.\targets 38 39 40 41 42 43 44 45 46 47 `------ ---- ----- ----- ----- ----- ----- ----- ----- ----- ----- P' N' FP FN PPV NPV TPR SPC FDR MCC 3kHz / 38 84 42 27 4 4 2 1 0 15 19 198 1351 114 90 0.42 0.93 0.48 0.92 0.58 0.36 7kHz / 39 43 94 16 0 1 1 1 2 1 24 183 1331 89 80 0.51 0.94 0.54 0.93 0.49 0.43 12kHz / 40 21 16 103 5 2 2 0 0 6 13 168 1312 65 70 0.61 0.95 0.6 0.95 0.39 0.51 20kHz / 41 1 2 13 158 1 0 0 1 3 1 180 1202 22 15 0.88 0.99 0.91 0.98 0.12 0.77 30kHz / 42 3 0 2 3 162 0 0 0 0 0 170 1194 8 11 0.95 0.99 0.94 0.99 0.05 0.82 song1 / 43 3 1 1 0 1 160 0 0 2 5 173 1199 13 14 0.92 0.99 0.92 0.99 0.08 0.8 song2 / 44 1 1 0 0 0 0 171 0 0 0 173 1176 2 2 0.99 1 0.99 1 0.01 0.86 song3 / 45 1 1 1 0 0 0 0 170 2 0 175 1179 5 4 0.97 1 0.98 1 0.03 0.84 song4 / 46 7 3 3 2 2 2 0 0 139 7 165 1240 26 34 0.84 0.97 0.8 0.98 0.16 0.71 song5 / 47 10 14 7 1 0 7 0 1 5 104 149 1310 45 69 0.7 0.95 0.6 0.97 0.3 0.55 Per target: ---- ----- ----- ----- ----- ----- ----- ----- ----- ----- P 174 174 173 173 173 174 173 174 173 173 N 1560 1560 1561 1561 1561 1560 1561 1560 1561 1561 TP 84 94 103 158 162 160 171 170 139 104 TN 1261 1251 1242 1187 1183 1185 1174 1175 1206 1241 Summary\Means: ---- ----- ----- ----- ----- ----- ----- ----- ----- ----- 173 1249 38 39 0.78 0.97 0.78 0.97 0.22 0.66 ACC 0.78 ACC% 77.57 # of sets 8 Statistics computed in 1-vs-rest fashion per each target. Abbreviations (for details see http://en.wikipedia.org/wiki/ROC_curve): TP : true positive (AKA hit) TN : true negative (AKA correct rejection) FP : false positive (AKA false alarm, Type I error) FN : false negative (AKA miss, Type II error) TPR: true positive rate (AKA hit rate, recall, sensitivity) TPR = TP / P = TP / (TP + FN) FPR: false positive rate (AKA false alarm rate, fall-out) FPR = FP / N = FP / (FP + TN) ACC: accuracy ACC = (TP + TN) / (P + N) SPC: specificity SPC = TN / (FP + TN) = 1 - FPR PPV: positive predictive value (AKA precision) PPV = TP / (TP + FP) NPV: negative predictive value NPV = TN / (TN + FN) FDR: false discovery rate FDR = FP / (FP + TP) MCC: Matthews Correlation Coefficient MCC = (TP*TN - FP*FN)/sqrt(P N P' N') # of sets: number of target/prediction sets which were provided In addition to the abusively informative textual representation, there is an alternative graphical representation of the confusion matrix via the :meth:`~mvpa2.clfs.transerror.ConfusionMatrix.plot` method of a :class:`~mvpa2.clfs.transerror.ConfusionMatrix`:: >>> import pylab as pl >>> cvterr.stats.plot() \ ... # doctest: +SKIP >>> pl.show() \ ... # doctest: +SKIP .. image:: pics/confusion_matrix.* :align: center :alt: Classification confusion matrix Basic Supervised Learning Methods ================================= PyMVPA provides a number of learning methods (i.e. classifiers or regression algorithms) that can be plug into the various algorithms that are also part of the framework. Most importantly they all can be combined or enhanced with :ref:`metaclassifiers`. .. index:: Gaussian process regression, GPR Gaussian Process Regression --------------------------- :class:`~mvpa2.clfs.gpr.GPR` (`Wikipedia entry about Gaussian process regression`_). .. _Wikipedia entry about Gaussian process regression: http://en.wikipedia.org/wiki/Gaussian_process_regression .. index:: k-nearest-neighbour, kNN k-Nearest-Neighbour ------------------- The :class:`~mvpa2.clfs.knn.kNN` classifier makes predictions based on the targets of nearby samples. It currently uses Euclidean distance to determine the nearest neighbours, but future enhancements may include support for other kernels. .. index:: least angle regression, LARS Least Angle Regression ---------------------- :class:`~mvpa2.clfs.lars.LARS` :ref:`Efron et al. (2004) ` .. index:: logistic regression, penalized logistic regression Penalized Logistic Regression ----------------------------- The penalized logistic regression (:class:`~mvpa2.clfs.plr.PLR`) is similar to the ridge in that it has a penalty term, however, it is trained to predict a binary outcome by means of the logistic function (`Wikipedia entry about logistic regression`_). .. _Wikipedia entry about logistic regression: http://en.wikipedia.org/wiki/Logistic_regression .. index:: ridge regression Ridge Regression ---------------- Ridge regression (aka Tikhonov regularization) is a variant of a linear regression (`Wikipedia entry about ridge regression`_). The ridge regression classifier (:class:`~mvpa2.clfs.ridge.RidgeReg`) performs a simple linear regression with a penalty parameter to help avoid over-fitting. The regression inserts an intercept term so that you do not have to center your data. .. _Wikipedia entry about ridge regression: http://en.wikipedia.org/wiki/Ridge_regression .. index:: sparse multinomial logistic regression, SMLR Sparse Multinomial Logistic Regression -------------------------------------- Sparse Multinomial Logistic Regression (:class:`~mvpa2.clfs.smlr.SMLR`; :ref:`Krishnapuram et al., 2005 `) is a fast multi-class classifier that can easily deal with high-dimensional problems (`research paper about SMLR`_). PyMVPA includes two implementations: one in pure Python and a faster one that makes use of a C extension for the performance critical pieces of the code. .. _research paper about SMLR: http://www.cs.duke.edu/~amink/publications/manuscripts/hartemink05.pami.pdf .. index:: support vector machine, SVM Support Vector Machines ----------------------- Support vector machine (:ref:`Vapnik, 1995 `) classifiers (and regressions) are popular since they can deal with very high dimensional problems (`Wikipedia entry about SVM`_), while maintaining reasonable generalization performance. The support vector machine classes provide a family of classifiers by wrapping LIBSVM_ and Shogun_ libraries, with corresponding base classes :class:`~mvpa2.clfs.svm.libsvm.SVM` and :class:`~mvpa2.clfs.svm.sg.SVM` accordingly. By default SVM class is bound to LIBSVM's implementation if such is available (shogun otherwise). While any SVM class provides a complete interface, the others child classes make it easy to run some subset of standard classifiers, such as linear SVM, with a default set of parameters (see :class:`~mvpa2.clfs.svm.LinearCSVMC`, :class:`~mvpa2.clfs.svm.LinearNuSVMC`, :class:`~mvpa2.clfs.svm.RbfNuSVMC` and :class:`~mvpa2.clfs.svm.RbfCSVMC`). .. _LIBSVM: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ .. _Shogun: http://www.shogun-toolbox.org .. _Wikipedia entry about SVM: http://en.wikipedia.org/wiki/Support_Vector_Machine .. _metaclassifiers: Meta-Classifiers ================ *This section has been contributed by James M. Hughes.* A meta-classifier is essentially a blanket term used to describe all classes that appear functionally equivalent to a regular :class:`~mvpa2.clfs.base.Classifier`, but which in reality provide some extra amount of functionality on top of a normal classifier. Furthermore, they generally do not implement a :class:`~mvpa2.clfs.base.Classifier` *per se*, but rather take a :class:`~mvpa2.clfs.base.Classifier` as input. The methods then typically called on a classifier (e.g., `train` or `predict`) can be called on the meta-classifier, but will call the input classifier's routines, before or after some other function that the meta-classifier provides. Examples of Meta-Classifiers ---------------------------- At present, there are two primary meta-classifiers implemented in the PyMVPA package, beneath which there are several specific options: :class:`~mvpa2.clfs.meta.BoostedClassifier` typically uses multiple classifiers internally :class:`~mvpa2.clfs.meta.ProxyClassifier` typically performs some action on the data/targets before classification is performed Within these more general categories, specific classifiers are implemented. For example, there are several :class:`~mvpa2.clfs.meta.BoostedClassifier` subclasses: :class:`~mvpa2.clfs.meta.CombinedClassifier` combines predictions using a :class:`~mvpa2.clfs.meta.PredictionsCombiner` functor :class:`~mvpa2.clfs.meta.MulticlassClassifier` performs multi-class classification by means of a list of :class:`~mvpa2.clfs.meta.BinaryClassifier` instances. Typical use-case is to wrap a binary classifier to give it ability to operate on multiple classes via voting over classifiers for all possible pairs of the categories :class:`~mvpa2.clfs.meta.SplitClassifier` combines a :class:`~mvpa2.clfs.base.Classifier` and an arbitrary :class:`~mvpa2.datasets.splitters.Splitter` Furthermore, there are also several :class:`~mvpa2.clfs.meta.ProxyClassifier` subclasses: :class:`~mvpa2.clfs.meta.BinaryClassifier` maps a set of targets into two categories (+1 and -1) :class:`~mvpa2.clfs.meta.MappedClassifier` uses a mapper on input data prior to training/testing :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` performs some kind of :class:`~mvpa2.featsel.base.FeatureSelection` prior to training/testing Implementation Examples ----------------------- Classifiers such as the :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` are particularly useful because they simplify the process of selecting features and then using only that subset of features to classify novel exemplars (the `predict` stage). They become even more powerful when combined with :class:`~mvpa2.clfs.meta.SplitClassifier`, so that even the task of withholding certain data points to create statistically valid training and testing datasets is abstracted and wrapped up within a single object (and, ultimately, very few method calls). Consider the following code, which can be found in `mvpa2/clfs/warehouse.py`_: .. _mvpa2/clfs/warehouse.py: api/mvpa2.clfs.warehouse-pysrc.html >>> from mvpa2.clfs.meta import SplitClassifier, FeatureSelectionClassifier >>> from mvpa2.clfs.svm import LinearCSVMC >>> from mvpa2.clfs.transerror import ConfusionBasedError >>> from mvpa2.featsel.rfe import RFE >>> from mvpa2.featsel.helpers import FractionTailSelector >>> >>> rfesvm_split = SplitClassifier(LinearCSVMC()) >>> clf = \ ... FeatureSelectionClassifier( ... clf = LinearCSVMC(), ... # on features selected via RFE ... feature_selection = RFE( ... # based on sensitivity of a clf which does ... # splitting internally ... sensitivity_analyzer=rfesvm_split.get_sensitivity_analyzer(), ... transfer_error=ConfusionBasedError( ... rfesvm_split, ... confusion_state="stats"), ... # and whose internal error we use ... feature_selector=FractionTailSelector( ... 0.2, mode='discard', tail='lower'), ... # remove 20% of features at each step ... update_sensitivity=True), ... # update sensitivity at each step ... descr='LinSVM+RFE(splits_avg)' ) This analysis combines the :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` and the :class:`~mvpa2.clfs.meta.SplitClassifier` to perform internal splitting of the data and then perform FeatureSelection based on those splits. Such analyses can be easily created due to the straightforward way that classifier and meta-classifiers can be combined. Please refer to the relevant documentation sections for more information about the specifics of each meta-classifier. Retrainable Classifiers ======================= Some classifiers have ability to provide quick (i.e in terms of performance) re-training if they were previously trained, and only part of their specification got changed. For instance, for kernel-based classifier (e.g. GPR) it makes no sense to recompute kernel matrix, if only a classifier (not kernel) parameter (e.g. ``sigma_noise``) was changed. Another similar usecase: for :ref:`null-hypothesis statistical testing ` it might be needed to train classifier multiple times on a randomized set of targets. Only classifiers which have ``retrainable`` in their ``__tags__`` are capable of efficient retraining. To enable retraining, just provide ``retrainable=True`` to the constructor of the classifier. Internally retrainable classifiers will try to deduce what was changed in the specification of the classifier (e.g. training/testing datasets, parameters) and act accordingly. To reduce training/prediction time even more, classifier might directly be instructed with what aspects were changed. It must be previously trained / predicted, so later on :meth:`~mvpa2.clfs.base.Classifier.retrain` and :meth:`~mvpa2.clfs.base.Classifier.repredict` methods could be called. :meth:`~mvpa2.clfs.base.Classifier.repredict` can be called only with the same data, for which it was earlier predicted. See API doc for more information. Implementation of efficient retraining is not straightforward, thus it is strongly advised to * enable ``CHECK_RETRAIN`` debug target while developing the code for analysis. That might guard you against obvious misuses of retraining feature, as well as to spot bugs in the code * validate on a simple dataset that analysis code provides the same results if classifier was created retrainable or not Classifiers "Warehouse" ======================= To facilitate easy trial of different classifiers for any specific task, :class:`~mvpa2.clfs.warehouse.Warehouse` of classifiers clfs.warehouse.clfs was defined to create a sample collection of some commonly used parameterizations of the classifiers present in PyMVPA. Such collection can be queried by any set of known keywords/tags with tags prefixed with ``!`` being excluded:: >>> from mvpa2.clfs.warehouse import clfswh >>> tryme = clfswh['multiclass', '!svm'] to simply sweep through classifiers which are capable of multiclass classification and are not SVM based. pymvpa2-2.2.0/doc/source/conf.py000066400000000000000000000236501202542755000164650ustar00rootroot00000000000000# emacs: -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: # # PyMVPA documentation build configuration file, created by # sphinx-quickstart on Tue Dec 29 10:32:00 2009. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os, re import numpy as np import mvpa2 # We need to know sphinx version for decisions below import sphinx from distutils.version import LooseVersion sphinx_version = LooseVersion(sphinx.__version__) try: import matplotlib # Disable warning from matplotlib import warnings warnings.filterwarnings( 'ignore', 'This call to matplotlib.use() has no effect.*', UserWarning) matplotlib.use('svg') except: pass ################################################## # Config settings are at the bottom of the file! # ################################################## # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.append(os.path.abspath('../sphinxext')) # -- General configuration ----------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.ifconfig', 'sphinx.ext.inheritance_diagram', 'sphinx.ext.pngmath', # we have a local copy of the extension, imported from NumPy 1.3 # this also includes the docscrape* extensions 'numpydoc', # finally our own little thingie to display tasks 'exercise_directive'] # we have a local copy of autosummary from the unreleased sphinx # 1.0 -- reason: the 0.6 extension creates half-empty summaries extensions += [sphinx_version < '1.1.2' and 'autosummary' or 'sphinx.ext.autosummary'] # the following doesn't work with sphinx < 1.0, but will make a separate # sphinx-autogen run obsolete in the future #autosummary_generate = True # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. #source_encoding = 'utf-8' # The master toctree document. master_doc = 'index' # General substitutions. project = 'PyMVPA' copyright = '2006-2012, PyMVPA Authors' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = mvpa2.__version__ # The full version, including alpha/beta/rc tags. release = mvpa2.__version__ # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of documents that shouldn't be included in the build. #unused_docs = [] # what to put into API doc (just class doc, just init, or both autoclass_content = 'both' # List of directories, relative to source directory, that shouldn't be searched # for source files. exclude_trees = [] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None #default_role = "autolink" # causes actual running of code and crashes # the problem with this setting is that is also confused things # `Dataset` might lead to a link to the h5py.Dataset` docs default_role = "obj" # seems to be sufficient to provide basic hyperlinking # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. Major themes that come with # Sphinx are currently 'default' and 'sphinxdoc'. html_theme = 'pymvpa_offline' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['_themes'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = 'pics/pymvpa_logo.jpg' # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. html_use_smartypants = True # Custom sidebar templates, maps document names to template names. html_sidebars = {'index': 'indexsidebar.html'} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {'index': 'index.html'} # If false, no module index is generated. #html_use_modindex = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. html_show_sourcelink = False # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = '' # Output file base name for HTML help builder. htmlhelp_basename = 'PyMVPAdoc' # -- Options for LaTeX output -------------------------------------------------- # The paper size ('letter' or 'a4'). latex_paper_size = 'a4' # The font size ('10pt', '11pt' or '12pt'). #latex_font_size = '10pt' # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('pdfmanual', 'PyMVPA-Manual.tex', 'PyMVPA Manual', 'PyMVPA Authors', 'manual'), ('devguide', 'PyMVPA-DevGuide.tex', 'PyMVPA Developer Guidelines', 'PyMVPA Authors', 'manual'), # ('modref', 'PyMVPA-Reference.tex', 'PyMVPA Reference', # 'PyMVPA Authors', # 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. latex_logo = 'pics/pymvpa_logo.pdf' # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # Additional stuff for the LaTeX preamble. latex_preamble = r""" \usepackage{enumitem} \setdescription{style=nextline,font=\normalfont} % to get proper single quotes % source: http://stackoverflow.com/questions/5757630/sphinx-pdf-output-apostrophes-in-python-source-are-replaced-by-right-single-quo \usepackage{upquote} % more table of contents \setcounter{tocdepth}{3} % Have gray background for notes and exercises \definecolor{MyBluishGray}{rgb}{0.90,0.90,1.00} \makeatletter\newenvironment{graybox}{% \begin{lrbox}{\@tempboxa}\begin{minipage}{\columnwidth}}{\end{minipage}\end{lrbox}% \colorbox{MyBluishGray}{\usebox{\@tempboxa}} }\makeatother \makeatletter \renewenvironment{notice}[2]{ \begin{graybox} \bf\it \def\py@noticetype{#1} \par\strong{#2} \csname py@noticestart@#1\endcsname } { \csname py@noticeend@\py@noticetype\endcsname \end{graybox} } \makeatother """ # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_use_modindex = True # ----------------------------------------------------------------------------- # Intersphinx configuration # ----------------------------------------------------------------------------- # to link to related projects intersphinx_mapping = {'http://docs.python.org/': None, 'http://nipy.sourceforge.net/nipype': None, 'http://nipy.sourceforge.net/nipy/stable': None, 'http://h5py.alfven.org/docs': None, 'http://docs.scipy.org/doc/scipy/reference': None, 'http://docs.scipy.org/doc/numpy/': None, 'http://matplotlib.sourceforge.net/': None, } pymvpa2-2.2.0/doc/source/contributors.txt000066400000000000000000000066111202542755000204620ustar00rootroot00000000000000.. -*- mode: rst -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: Authors and Contributors ======================== The PyMVPA developers team currently consists of: * `Michael Hanke`_, Dartmouth College, USA * `Yaroslav O. Halchenko`_, Dartmouth College, USA * `Emanuele Olivetti`_, Fondazione Bruno Kessler, Italy We are very grateful to the following people, who have contributed valuable advice, code or documentation to PyMVPA: * `Greg Detre`_, Princeton University, USA * `Ingo Fründ`_, TU Berlin, Germany * `Scott Gorlin`_, MIT, USA * `Jyothi Swaroop Guntupalli`_, Dartmouth College, USA * `Valentin Haenel`_, TU Berlin, Germany * `Stephen José Hanson`_, Rutgers University, USA * `James V. Haxby`_, Dartmouth College, USA * `James M. Hughes`_, Dartmouth College, USA * `James Kyle`_, UCLA, USA * `Russell Poldrack`_, University of Texas, USA * `Stefan Pollmann`_, University of Magdeburg, Germany * `Rajeev Raizada`_, Dartmouth College, USA * `Per B. Sederberg`_, Princeton University, USA * `Tiziano Zito`_, BCCN, Germany .. _Greg Detre: http://www.princeton.edu/~gdetre .. _Ingo Fründ: http://www.cognition.tu-berlin.de/menue/members/ingo_fruend .. _Scott Gorlin: http://www.scottgorlin.com .. _Jyothi Swaroop Guntupalli: http://www.dartmouth.edu/~swaroop/ .. _Valentin Haenel: http://www.cognition.tu-berlin.de/menue/members/valentin_haenel .. _Yaroslav O. Halchenko: http://www.onerussian.com .. _Michael Hanke: http://apsy.gse.uni-magdeburg.de/hanke .. _Stephen José Hanson: http://psychology.rutgers.edu/~jose .. _James V. Haxby: http://dbic.dartmouth.edu/haxby .. _James M. Hughes: http://www.cs.dartmouth.edu/~hughes/index.html .. _James Kyle: http://www.ccn.ucla.edu/users/jkyle .. _Emanuele Olivetti: http://sra.fbk.eu/people/olivetti/ .. _Russell Poldrack: http://www.poldracklab.org .. _Stefan Pollmann: http://apsy.gse.uni-magdeburg.de/pollmann .. _Rajeev Raizada: http://www.dartmouth.edu/~raj .. _Per B. Sederberg: http://www.princeton.edu/~persed/ .. _Tiziano Zito: http://itb.biologie.hu-berlin.de/~zito Acknowledgements ================ We are greatful to the developers and contributers of NumPy_, SciPy_ and IPython_ for providing an excellent Python-based computing environment. Additionally, as PyMVPA makes use of a lot of external software packages (e.g. classifier implementations), we want to acknowledge the authors of the respective tools and libraries (e.g. LIBSVM_, MDP_, scikit-learn_, Shogun_) and thank them for developing their packages as free and open source software. Finally, we would like to express our acknowledgements to the `Debian project`_ for providing us with hosting facilities for mailing lists and source code repositories. But most of all for developing the *universal operating system*. .. Please add some notes when you think that you should give credits to someone that enables or motivates you to work on PyMVPA ;-) .. include:: link_names.txt Grant support ------------- PyMVPA development was supported, in part, by the following research grants. This list includes grants funding development of specific algorithm implementations in PyMVPA, as well as grants supporting individuals to work on PyMVPA: German Federal Ministry of Education and Research * BMBF 01GQ11112 German Academic Exchange Service * PPP-USA D/05/504/7 McDonnel Foundation US National Institutes of Mental Health * 5R01MH075706 * F32MH085433-01A1 US National Science Foundation * NSF 1129764 pymvpa2-2.2.0/doc/source/datadb.rst000066400000000000000000000030021202542755000171240ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Dataset Database .. _chap_datadb: **************** Dataset Database **************** Provided collection of datasets is not aiming to replace other data repositories available online. Rather it is a selection of datasets which was repeatedly analyzed by PyMVPA team and found to be useful for demonstration of concrete analysis methodologies especially in the context of neural data analysis. .. toctree:: :maxdepth: 1 datadb/tutorial_data datadb//face_inversion_demo datadb/haxby2001 datadb/mnist ========================== External Data Repositories ========================== Repositories containing generic datasets in the realm of :term:`Machine Learning`: * `UC Irvine Machine Learning Repository`_ Neural data repositories: * `fMRI Data Center`_ * `1000 Functional Connectomes`_ * `Test-Retest Resting State Data`_ (Shehzad, Kelly et al. (2009)) .. _UC Irvine Machine Learning Repository: http://archive.ics.uci.edu/ml/ .. _fMRI Data Center: http://www.fmridc.org .. _1000 Functional Connectomes: http://www.nitrc.org/projects/fcon_1000/ .. _Test-Retest Resting State Data: http://www.nitrc.org/frs/?group_id=274 pymvpa2-2.2.0/doc/source/datadb/000077500000000000000000000000001202542755000163775ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/datadb/face_inversion_demo.rst000066400000000000000000000005271202542755000231330ustar00rootroot00000000000000 .. _datadb_face_inversion_demo: ******************************** Tutorial Data: Block-design fMRI ******************************** TODO Terms Of Use ============ TODO Download ======== A tarball is available at: http://data.pymvpa.org/datasets/face_inversion_demo Tarball Content =============== TODO References ========== TODO pymvpa2-2.2.0/doc/source/datadb/haxby2001.rst000066400000000000000000000101441202542755000205470ustar00rootroot00000000000000.. _datadb_haxby2001: ************************************************************************ Haxby et al. (2001): Faces and Objects in Ventral Temporal Cortex (fMRI) ************************************************************************ This is a block-design fMRI dataset from a study on face and object representation in human ventral temporal cortex. It consists of 6 subjects with 12 runs per subject. In each run, the subjects passively viewed greyscale images of eight object categories, grouped in 24s blocks separated by rest periods. Each image was shown for 500ms and was followed by a 1500ms inter-stimulus interval. Full-brain fMRI data were recorded with a volume repetition time of 2.5s, thus, a stimulus block was covered by roughly 9 volumes. This dataset has been repeatedly reanalyzed. For a complete description of the experimental design, fMRI acquisition parameters, and previously obtained results see the references_ below. Terms Of Use ============ The original authors of :ref:`Haxby et al. (2001) ` hold the copyright of this dataset and made it available under the terms of the `Creative Commons Attribution-Share Alike 3.0`_ license. .. _Creative Commons Attribution-Share Alike 3.0: http://creativecommons.org/licenses/by-sa/3.0/ Download ======== Separate tarballs for each subject are available at: http://data.pymvpa.org/datasets/haxby2001 Subject-tarball content ======================= anat.nii.gz High resolution anatomical image. For *subject 6* there is no anatomical image available. bold.nii.gz 4D fMRI timeseries image. (1452 volumes with 40 x 64 x 64 voxels, corresponding to a voxel size of 3.5 x 3.75 x 3.75 mm and a volume repetition time of 2.5 seconds). The timeseries contains all 12 runs of the original experiment, concatenated in a single file. Please note, that the timeseries signal is *not* detrended. mask*.nii.gz Various masks in functional space provided by the original authors. "vt" refers to "ventral temporal", "face" and "house" masks are GLM contrast based localizer maps. labels.txt A two-column text file with the stimulation condition and the corresponding experimental run for each volume in the timeseries image. Labels are given in literal form (e.g. 'face'). .. note:: Data for the run 9 (chunk 8) of subject 5 was corrupted and therefore should not be used for the analyses. In the 'labels.txt' file all samples in that chunk are marked as 'rest' condition. (Acknowledgement goes to MS Al-Rawi who reminded us about this non-disclosed 'feature' of the dataset) Instructions ============ >>> from mvpa2.suite import * >>> subjpath = os.path.join(pymvpa_datadbroot, 'haxby2001', 'subj1') >>> attrs = SampleAttributes(os.path.join(subjpath, 'labels.txt'), ... header=True) >>> ds = fmri_dataset(samples=os.path.join(subjpath, 'bold.nii.gz'), ... targets=attrs.labels, chunks=attrs.chunks, ... mask=os.path.join(subjpath, 'mask4_vt.nii.gz')) >>> print ds , , > References ========== :ref:`Haxby, J., Gobbini, M., Furey, M., Ishai, A., Schouten, J., and Pietrini, P. (2001) `. Distributed and overlapping representations of faces and objects in ventral temporal cortex. Science 293, 2425–2430. :ref:`Hanson, S., Matsuka, T., and Haxby, J. (2004) `. Combinatorial codes in ventral temporal lobe for object recognition: Haxby (2001). revisited: is there a “face†area? NeuroImage 23, 156–166. :ref:`O’Toole, A. J., Jiang, F., Abdi, H., & Haxby, J. V. (2005) `. Partially distributed representations of objects and faces in ventral temporal cortex. Journal of Cognitive Neuroscience, 17, 580–590. :ref:`Hanke, M., Halchenko, Y.O., Sederberg, P.B., Olivetti, E., Fründ, I., Rieger, J.W., Herrmann, C.S., Haxby, J.V., Hanson, S. and Pollmann, S (2009) `. PyMVPA: a unifying approach to the analysis of neuroscientific data. Frontiers in Neuroinformatics, 3:3. pymvpa2-2.2.0/doc/source/datadb/hyperalignment_tutorial_data.rst000066400000000000000000000056441202542755000251040ustar00rootroot00000000000000.. _datadb_hyperalignment_tutorial_data: ************************************************************************ Hypearalignment Tutorial Data: Faces and Objects in Ventral Temporal Cortex (fMRI) ************************************************************************ This is a block-design fMRI dataset from a study on face and object representation in human ventral temporal cortex. It consists of 10 subjects with 8 runs per subject. In each run, the subjects passively viewed greyscale images from seven face & object categories. Each image was shown for 500ms and was followed by a 1500ms inter-stimulus interval. Full-brain fMRI data were recorded with a volume repetition time of 2.5s, thus, a stimulus block was covered by roughly 16 volumes. For a complete description of the experimental design, fMRI acquisition parameters, and preprocessing steps, and previously obtained results see the references_ below. This tutorial dataset is based on data from a study published by :ref:`Haxby et al. (2011) `. The datasets have been preprocessed to a degree that should allow people without prior fMRI experience to perform meaningful analyses. Moreover, it should not require further preprocessing with external tools. All preprocessing has been performed using tools from AFNI & PyMVPA. Specifically, the 4D fMRI timeseries has been pre-processed as described in :ref: `Haxby et al. (2011) ` and aligned to the standard MNI brain. A Ventral Temporal Cortex mask in MNI space is applied to the data. Terms Of Use ============ The original authors of :ref:`Haxby et al. (2011) ` hold the copyright of this dataset and made it available under the terms of the `Creative Commons Attribution-Share Alike 3.0`_ license. .. _Creative Commons Attribution-Share Alike 3.0: http://creativecommons.org/licenses/by-sa/3.0/ Download ======== A single compressed hdf5 is available at: http://data.pymvpa.org/datasets/hyperalignment_tutorial_data Content ======================= hyperalignment_tutorial_data.hdf5.gz The list of datasets for 10 subjects stored as a compressed hdf5 file. Each dataset contains category & run labels. Instructions ============ >>> from mvpa2.suite import * >>> filepath = os.path.join(pymvpa_datadbroot, 'hyperalignment_tutorial_data', ... "hyperalignment_tutorial_data.hdf5.gz") >>> datasets = h5load(filepath) >>> print len(datasets) 10 >>> print datasets[0] , , > References ========== :ref:`Haxby, J. V., Guntupalli, J. S., Connolly, A. C., Halchenko, Y. O., Conroy, B. R., Gobbini, M. I., Hanke, M. & Ramadge, P. J. (2011) .` A Common, High-Dimensional Model of the Representational Space in Human Ventral Temporal Cortex. Neuron, 72, 404–416. DOI: http://dx.doi.org/10.1016/j.neuron.2011.08.026 pymvpa2-2.2.0/doc/source/datadb/mnist.rst000066400000000000000000000047341202542755000202730ustar00rootroot00000000000000.. _datadb_mnist: ********************************************************************* LeCun et al. (1999): The MNIST Dataset Of Handwritten Digits (Images) ********************************************************************* The MNIST_ dataset of handwritten digits, available from this page, has a training set of 60,000 examples, and a test set of 10,000 examples. It is a subset of a larger set available from NIST. The digits have been size-normalized and centered in a fixed-size image. It is a good database for people who want to try learning techniques and pattern recognition methods on real-world data while spending minimal efforts on preprocessing and formatting. See http://yann.lecun.com/exdb/mnist for more information. .. note:: The version that is offered here is identical to the four files distributed there, but has been converted into a single HDF5 file than can easily be read by PyMVPA. Terms Of Use ============ `Yann LeCun`_ (Courant Institute, NYU) and `Corinna Cortes`_ (Google Labs, New York) hold the copyright of MNIST_ dataset, which is a derivative work from original NIST datasets. MNIST_ dataset is made available under the terms of the `Creative Commons Attribution-Share Alike 3.0`_ license. .. _MNIST: http://yann.lecun.com/exdb/mnist .. _Creative Commons Attribution-Share Alike 3.0: http://creativecommons.org/licenses/by-sa/3.0/ .. _Yann LeCun: http://yann.lecun.com/ .. _Corinna Cortes: http://web.me.com/corinnacortes/work/Home.html Download ======== A single hdf5 file containing entire MNIST_ dataset is available from http://data.pymvpa.org/datasets/mnist/ Requirements ============ * HDF5 access facility. * *PyMVPA 0.5* (or later) provides the `h5load()` function (utilizes H5PY_ package). .. _H5PY: http://h5py.alfven.org/ Instructions ============ >>> from mvpa2.suite import * >>> filepath = os.path.join(pymvpa_datadbroot, 'mnist', "mnist.hdf5") >>> datasets = h5load(filepath) >>> train = datasets['train'] >>> test = datasets['test'] >>> print train > >>> print test > >>> # assign a mapper able to recreate 28x28 pixel image arrays >>> test.a.mapper = FlattenMapper(shape=(28, 28)) >>> test.mapper.reverse(test).shape (10000, 28, 28) References ========== :ref:`LeCun, Y., Bottou, L., Bengio, Y., and Haffner, P. (1998) `. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86, 2278--2324. pymvpa2-2.2.0/doc/source/datadb/tutorial_data.rst000066400000000000000000000113601202542755000217660ustar00rootroot00000000000000.. _datadb_tutorial_data: ******************************** Tutorial Data: Block-design fMRI ******************************** This dataset is a compilation of data and results for :ref:`PyMVPA Tutorial `. At the moment dataset is based on data for a single subject from a study published by :ref:`Haxby et al. (2001) `. The full (raw) dataset of this study is also :ref:`available `. However, in constrast to the full data this single subject datasets has been preprocessed to a degree that should allow people without prior fMRI experience to perform meaningful analyses. Moreover, it should not require further preprocessing with external tools. All preprocessing has been performed using tools from FSL_. Specifically, the 4D fMRI timeseries has been motion-corrected by applying MCFLIRT to a skull-stripped and thresholded timeseries (to zero-out non-brain voxels, using a brain outline estimate significantly larger than the brain, to prevent removal of edge voxels actually covering brain tissue). The estimated motion parameters have been subsequently applied to the original (unthresholded, unstripped) timeseries. For simplicity the T1-weighed anatomical image has also been projected and resampled into the subjects functional space. Terms Of Use ============ The orginal authors of :ref:`Haxby et al. (2001) ` hold the copyright of this dataset and made it available under the terms of the `Creative Commons Attribution-Share Alike 3.0`_ license. The PyMVPA authors have preprocessed the data and released this derivative work under the same licensing terms. .. _Creative Commons Attribution-Share Alike 3.0: http://creativecommons.org/licenses/by-sa/3.0/ Download ======== A tarball is available at: http://data.pymvpa.org/datasets/tutorial_data Tarball Content =============== data/ Contains data files: bold.nii.gz The motion-corrected 4D timeseries (1452 volumes with 40 x 64 x 64 voxels, corresponding to a voxel size of 3.5 x 3.75 x 3.75 mm and a volume repetition time of 2.5 seconds). The timeseries contains all 12 runs of the original experiment, concatenated in a single file. Please note, that the timeseries signal is *not* detrended. bold_mc.par The motion correction parameters. This is a 6-column textfile with three rotation and three translation parameters respectively. This information can be used e.g. as additional regressors for :ref:`motion-aware timeseries detrending `. mask*.nii.gz A number of mask images in the subjects functional space, including a full-brain mask. attributes.txt A two-column text file with the stimulation condition and the corresponding experimental run for each volume in the timeseries image. The labels are given in literal form (e.g. 'face'). anat.nii.gz An anatomical image of the subject, projected and resampled into the same space as the functional images, hence also of the same spatial resolution. The image is *not* skull-stripped. results/ Some analyses presented in the tutorial takes non-negligible time to compute. Therefore, we provide results of some analysis so they could simply be loaded while following the tutorial (commands to load them are embedded in the code snippets through out tutorial and prefixed with ``# alt: ``). start_tutorial_session.sh Helper shell script to start an interactive session within IPython to proceed with the tutorial code. Instructions ============ >>> from mvpa2.suite import * >>> datapath = os.path.join(pymvpa_datadbroot, 'tutorial_data', ... 'tutorial_data', 'data') >>> attrs = SampleAttributes(os.path.join(datapath, 'attributes.txt')) >>> ds = fmri_dataset(samples=os.path.join(datapath, 'bold.nii.gz'), ... targets=attrs.targets, chunks=attrs.chunks, ... mask=os.path.join(datapath, 'mask_brain.nii.gz')) >>> print ds.shape (1452, 39912) >>> print ds.a.voxel_dim (40, 64, 64) >>> print ds.a.voxel_eldim (3.5, 3.75, 3.75) >>> print ds.a.mapper -> >>> print ds.uniquetargets ['bottle' 'cat' 'chair' 'face' 'house' 'rest' 'scissors' 'scrambledpix' 'shoe'] References ========== :ref:`Haxby, J., Gobbini, M., Furey, M., Ishai, A., Schouten, J., and Pietrini, pl. (2001) `. Distributed and overlapping representations of faces and objects in ventral temporal cortex. Science 293, 2425–2430. .. _FSL: http://www.fmrib.ox.ac.uk/fsl Changelog ========= 0.3 * Removed tutorial_lib.py which is superseeded by using mvpa2.tutorial_suite 0.2 * Updated tutorial code to work with PyMVPA 0.6 * Removed dependency on PyNIfTI and use NiBabel instead. 0.1 * Initial release. pymvpa2-2.2.0/doc/source/datasets.txt000066400000000000000000000365421202542755000175430ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: dataset, sample attribute, dataset attribute .. _chap_datasets: ******** Datasets ******** .. automodule:: mvpa2.datasets .. only:: html Related API documentation ========================= .. currentmodule:: mvpa .. autosummary:: :toctree: generated base.dataset datasets.base datasets.mri datasets.eventrelated datasets.eep datasets.miscfx datasets.splitters The Basic Concepts ================== A minimal dataset in PyMVPA consists of a number of :term:`sample`\ s, where each individual sample is nothing more than a vector of values. Each sample is associated with a :term:`label`, which defines the category the respective sample belongs to, or in more general terms, defines the model that should be learned by a classifier. Moreover, samples can be grouped into so-called :term:`chunk`\ s, where each chunk is assumed to be statistically independent from all other data chunks. The foundation of PyMVPA's data handling is the :class:`~mvpa2.datasets.base.Dataset` class. Basically, this class stores data samples, sample attributes and dataset attributes. By definition, sample attributes assign a value to each data sample (e.g. targets, or chunks) and dataset attributes are additional information or functionality that apply to the whole dataset. Most likely the :class:`~mvpa2.datasets.base.Dataset` class will not be used directly, but through one of the derived classes. However, it is perfectly possible to use it directly. In the simplest case a dataset can be constructed by specifying some data samples and the corresponding class labels. >>> import numpy as np >>> from mvpa2.datasets import dataset_wizard >>> data = dataset_wizard(samples=np.random.normal(size=(10,5)), targets=1) >>> print data > .. index:: chunks, targets, feature, sample The above example creates a dataset with 10 samples and 5 features each. The values of all features stem from normally distributed random noise. The class label '1' is assigned to all samples. Instead of a single scalar value `targets` can also be a sequence with individual targets for each data sample. In this case the length of this sequence has to match the number of samples. Interestingly, the dataset object tells us about 10 `chunks`. In PyMVPA chunks are used to group subsets of data samples. However, if no grouping information is provided all data samples are assumed to be in their own group, hence no sample grouping is performed. Both `targets` and `chunks` are so called *sample attributes*. All sample attributes are stored in sequence-type containers consisting of one value per sample. These containers can be accessed by properties with the same as the attribute: The *data samples* themselves are stored as a two-dimensional matrix where each row vector is a `sample` and each column vector contains the values of a `feature` across all `samples`. The :class:`~mvpa2.datasets.base.Dataset` class provides access to the samples matrix via the `samples` property. >>> data.samples.shape (10, 5) >>> data.shape (10, 5) The :class:`~mvpa2.datasets.base.Dataset` class itself can only deal with 2d sample matrices. However, PyMVPA provides a very easy way to deal with data where each data sample is more than a 1d vector: `Data Mapping`_ .. index:: mapper, sample, feature Data Mapping ============ It was already mentioned that the :class:`~mvpa2.datasets.base.Dataset` class cannot deal with data samples that are more than simple vectors. This could be a problem in cases where the data has a higher dimensionality, e.g. functional brain-imaging data where each data sample is typically a three-dimensional volume. One approach to deal with this situation would be to concatenate the whole volume into a 1d vector. While this would work in certain cases there is definitely information lost. Especially for brain-imaging data one would most likely want keep information about neighborhood and distances between data sample elements. In PyMVPA this is done by mappers that transform data samples from their original *dataspace* into the so-called *features space*. In the above neuro-imaging example the *dataspace* is three-dimensional and the *feature space* always refers to the 2d `samples x features` representation that is required by the :class:`~mvpa2.datasets.base.Dataset` class. In the context of mappers the dataspace is sometimes also referred to as *in-space* (i.e. the initial data that goes into the mapper) while the feature space is labeled as *out-space* (i.e. the mapper output when doing forward mapping). The task of a mapper, besides transforming samples into 1d vectors, is to retain as much information of the dataspace as possible. Some mappers provide information about dataspace metrics and feature neighbourhood, but all mappers are able to do reverse mapping from feature space into the original dataspace. Usually one does not have to deal with mappers directly. PyMVPA provides some convenience subclasses of :class:`~mvpa2.datasets.base.Dataset` that automatically perform the necessary mapping operations internally. .. index:: MaskedDataset For an introduction into to concept of a dataset with mapping capabilities we can take a look at the :class:`~mvpa2.datasets.masked.MaskedDataset` class. This dataset class works almost exactly like the basic :class:`~mvpa2.datasets.base.Dataset` class, except that it provides some additional methods and is more flexible with respect to the format of the sample data. A masked dataset can be created just like a normal dataset. However, unlike :class:`~mvpa2.datasets.base.Dataset` the :class:`~mvpa2.datasets.masked.MaskedDataset` class can deal with sample data arrays with more than two dimensions. More precisely it handles arrays of any dimensionality. The only assumption that is made is that the first axis of a sample array separates the sample data points. In the above example we therefore have 5 samples, where each sample is a 3x4 plane. .. index:: forward mapping, reverse mapping If we look at the self-description of the created dataset we can see that it doesn't tell us about 3x4 plane, but simply 12 features. That is because internally the sample array is automatically reshaped into the aforementioned 2d matrix representation of the :class:`~mvpa2.datasets.base.Dataset` class. However, the information about the original dataspace is not lost, but kept inside the mapper used by :class:`~mvpa2.datasets.masked.MaskedDataset`. Two useful methods of :class:`~mvpa2.datasets.masked.MaskedDataset` make use of the mapper: `mapForward()` and `mapReverse()`. The former can be used to transform additional data from dataspace into the feature space and the latter performs the same in the opposite direction. Especially reverse mapping can be very useful when visualizing classification results and information maps on the original dataspace. Another feature of mapped datasets is that valid mapping information is maintained even when the feature space changes. When running some feature selection algorithm (see :ref:`chap_featsel`) some features of the original features set will be removed, but after feature selection one will most likely want to know where the selected (or removed) features are in the original dataspace. To make use of the neuro-imaging example again: The most convenient way to access this kind of information would be a map of the selected features that can be overlayed over some anatomical image. This is trivial with PyMVPA, because the mapping is automatically updated upon feature selection. .. index:: feature selection The above example selects four features from the set of the 12 original ones, by passing their ids to the `selectFeatures()` method. The method returns a new dataset only containing the four selected features. Resultant dataset contains a copy of the corresponding features of the original dataset. All other information like class labels and chunks are maintained. By calling `mapReverse()` on the new dataset one can see that the remaining four features are precisely mapped back onto their original locations in the data space. .. index:: syntactic sugaring .. _data_sugaring: Data Access Sugaring ==================== Complementary to self-descriptive attribute names (e.g. `targets`, `samples`) datasets have a few concise shortcuts to get quick access to some attributes or perform some common action ================ ============ ================ Attribute Abbreviation Definition class ---------------- ------------ ---------------- samples S :class:`~mvpa2.datasets.base.Dataset` targets T :class:`~mvpa2.datasets.base.Dataset` uniquetargets UT :class:`~mvpa2.datasets.base.Dataset` chunks C :class:`~mvpa2.datasets.base.Dataset` uniquechunks UC :class:`~mvpa2.datasets.base.Dataset` origids I :class:`~mvpa2.datasets.base.Dataset` samples_original O :class:`~mvpa2.datasets.mapped.MappedDataset` ================ ============ ================ .. index:: data formats .. _data_formats: Data Formats ============ The concept of mappers in conjunction with the functionality provided by the :class:`~mvpa2.datasets.base.Dataset` class, makes it very easy to create new dataset types with support for specialized data types and formats. The following is a non-exhaustive list of data formats currently supported by PyMVPA (for additional formats take a look at the subclasses of :class:`~mvpa2.datasets.base.Dataset`): * NumPy arrays PyMVPA builds its dataset facilities on NumPy arrays. Basically, anything that can be converted into a NumPy array can also be converted into a dataset. Together with the corresponding targets, NumPy arrays can simply be passed to the :class:`~mvpa2.datasets.base.Dataset` constructor to create a dataset. With arrays it is possible to use the classes :class:`~mvpa2.datasets.base.Dataset`, :class:`~mvpa2.datasets.mapped.MappedDataset` (to combine the samples with any custom mapping algorithm) or :class:`~mvpa2.datasets.masked.MaskedDataset` (readily provides a :class:`~mvpa2.mappers.array.DenseArrayMapper`). * Plain text Using the NumPy function `fromfile()` a variety of text file formats (e.g. CSV) can be read and converted into NumPy arrays. * NIfTI/Analyze images PyMVPA provides a specialized dataset for MRI data in the NIfTI format. :class:`~mvpa2.datasets.nifti.NiftiDataset` uses PyNIfTI_ to read the data and automatically configures an appropriate :class:`~mvpa2.mappers.array.DenseArrayMapper` with metric information read from the NIfTI file header. * EEP binary files Another special dataset type is :class:`~mvpa2.datasets.eep.EEPDataset`. It reads data from binary EEP file (written by eeprobe_) .. _PyNIfTI: http://niftilib.sf.net/pynifti .. _eeprobe: http://www.ant-neuro.com/products/eeprobe .. index:: data splitting, splitter, leave-one-out .. _data_splitter: Data Splitting ============== In many cases some algorithm should not run on a complete dataset, but just some parts of it. One well-known example is leave-one-out cross-validation, where a dataset is typically split into a number of training and validation datasets. A classifier is trained on the training set and its generalization performance is tested using the validation set. It is important to strictly separate training and validation datasets as otherwise no valid statement can be made whether a classifier really generated an appropriate model of the training data. Violating this requirement spuriously elevates the classification performance, often termed 'peeking' in the literature. However, they provide no relevant information because they are based on cheating or peeking and do not describe signal similarities between training and validation datasets. .. this point about 'peeking' is a critical one and maybe deserves emphasis. i was just looking at how we deal with it in our documentation, and we need to improve ours too! With the splitter classes derived from the base :class:`~mvpa2.datasets.splitters.Splitter`, PyMVPA makes dataset splitting easy. All dataset splitters in PyMVPA are implemented as Python generators, meaning that when called with a dataset once, they return one dataset split per iteration and an appropriate Exception when they are done. This is exactly the same behavior as of e.g. the Python `xrange()` function. .. index:: working data, validation data To perform data splitting for the already mentioned cross-validation, PyMVPA provides the :class:`~mvpa2.datasets.splitters.NFoldSplitter` class. It implements a method to generate arbitrary N-M splits, where N is the number of different chunks in a dataset and M is any non-negative integer smaller than np. Doing a leave-one-out split of our example dataset looks like this: >>> from mvpa2.datasets.splitters import NFoldSplitter >>> data = dataset_wizard(samples=np.random.normal(size=(10,5)), ... targets=1, chunks=range(10)) >>> splitter = NFoldSplitter(cvtype=1) # Do N-1 >>> for wdata, vdata in splitter(data): ... pass where `wdata` is the *working dataset* and `vdata` is the *validation dataset*. If we have a look a those datasets we can see that the splitter did what we intended: >>> split = [ i for i in splitter(data)][0] >>> for s in split: ... print s , > , > >>> split[0].uniquechunks array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> split[1].uniquechunks array([0]) In the first split, the working dataset contains nine chunks of the original dataset and the validation set contains the remaining chunk. Behavior of the splitters can be heavily customized by additional arguments to the constructor (see :class:`~mvpa2.datasets.splitters.Splitter` for extended help on the arguments). For instance, in the analysis in fMRI data it might be important to assure that samples in the training and testing parts of the split are not neighboring samples (unless it is otherwise assured by the presence of baseline condition on the boundaries between chunks, samples of which are discarded prior the statistical learning analysis). Providing argument `discard_boundary=1` to the splitter, would remove from both training and testing parts a single sample, which lie on the boundary between chunks. Providing `discard_boundary=(2,0)` would remove 2 samples only from training part of the split (which is desired strategy for `NFoldSplitter` where training part contains majority of the data). .. index:: processing object The usage of the splitter, creating a splitter object and calling it with a dataset, is a very common design pattern in the PyMVPA package. Like splitters, there are many more so called *processing objects*. These classes or objects are instantiated by passing all relevant parameters to the constructor. Processing objects can then be called multiple times with different datasets to perform their algorithm on the respective dataset. This design applies to the majority of the algorithms implemented in PyMVPA. pymvpa2-2.2.0/doc/source/devguide.rst000066400000000000000000000671341202542755000175210ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 79 -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_devguide: ******************** Developer Guidelines ******************** Git Repository ============== Layout ------ The git repository is structured by a number of branches and clones (forks) at github_. Anyone is welcome to fork the repository on github_ (just click on "Fork" button), and file a "Pull request" whenever he/she thinks that his changes are ready to be included (merged) into the main repository. Alternatively, if you just want quickly submit a patch -- just email it to the mailing list. Concise accompanying description is a plus. You might take advantage of ``git format-patch`` command. .. _github: http://github.com/PyMVPA/PyMVPA/ Branches -------- Any developer can have an infinite number of branches. If the number of branches causes gitk output to exceed a usual 19" screen, the respective developer has to spend some bucks (or euros) on new screens for all others ;-) The main release branch is called *master*. This is a merge-only branch. Features finished or updated by some developer are merged from the corresponding branch into *master*. At a certain point the current state of *master* is tagged -- a release is done. Only usable feature should end-up in *master*. Ideally *master* should be releasable at all times. Something must not be merged into master if *any* unit test fails. Maintenance branches should be gone into *maint/epoch.major* branches (e.g. *maint/0.4*). Additionally, there are packaging branches (prefixed with *dist/*). They are labeled after the package target (e.g. *debian* for a Debian package). Releases are merged into the packaging branches, packaging get updated if necessary and the branch gets tagged when a package version is released. Packaging maintenance (as well as backport) releases should be gone under *dist/target/flavor/codename* (e.g. *dist/debian/maint/lenny*, *dist/debian/security/lenny*). Branch *dist/debian/dev* is dedicated for Debian packages of development snapshots. Besides *master*, *maint/...*, *dist/...* we are following the convention for additional prefixes for new branches: _bf/... Bugfix branches -- should be simply deleted on remotes whenever accepted _tent/... Tentative new features which might be adopted or not. Whenever feature gets adopted (merged into some *master*), corresponding HEAD of *_tent/* branch should be tagged with a corresponding non-annotated *+tent/* tag Please do not base your work on *_tent/* branches of the others since those could be forcefully rebased without further notice. Commits ------- Please prefix all commit summaries with one (or more) of the following labels. This should help others to easily classify the commits into meaningful categories: * *BF* : bug fix * *RF* : refactoring * *NF* : new feature * *ENH* : enhancement of an existing feature/facility * *BW* : addresses backward-compatibility * *OPT* : optimization * *BK* : breaks something and/or tests fail * *PL* : making pylint happier * *DOC*: for all kinds of documentation related commits .. _reST: http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html .. _EmacsreST: http://docutils.sourceforge.net/docs/user/emacs.html .. _Pylint: http://packages.debian.org/unstable/python/pylint Merges ------ For easy tracking of what changes were absorbed during merge, we advice to enable automagic inclusion of their log entries into the commit message of the merge:: git config merge.log true .. note:: `merge.log` superseeds deprecated x`merge.summary` Code ==== Formatting ---------- pylint Code should be conformant with Pylint_ driven by config located at `doc/misc/pylintrc `__. Previously we used camelBack notation, but since 0.5.0.dev we decided to mainly follow PEP8_. Provided *pylintrc* file assures consistent coding style and also warns about obvious errors in the code. To engage, use 1 of 3 methods: - place it in *~/.pylintrc* for user-wide installation - use within a call to pylint:: pylint --rcfile=$PWD/doc/misc/pylintrc - export environment variable from mvpa sources top directory:: export PYLINTRC=$PWD/doc/misc/pylintrc 2 empty lines According to original python style guidelines: single empty line to separate methods within class, and 2 empty lines between classes **BUT** we do 2 empty between methods, 3 empty between classes module docstring Each module should start with a docstring describing the module (which is not inside the hashed-comment of each file) look at mapper or neighbor for tentative organization if copyright/license has to be present in each file. header Each file should contain a header from `doc/misc/header.py `__. notes Use following keywords will be caught by pylint to provide a summary of what yet to be done in the given file FIXME something which needs fixing (sooner than later) TODO future plan (i.e. later than sooner) XXX some concern/question YYY comment/answer to above mentioned XXX concern WiP Work in Progress: API and functionality might rapidly change .. _PEP8: http://www.python.org/dev/peps/pep-0008/ Docstrings ---------- All documentation should be written using NumPy_ documentation conventions: http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines#docstring-standard Classes ------- Classes should define: __repr__ whenever possible, should be the string representation of the object which could be digested with func:`eval` if necessary. __str__ most of the classes should provide meaningful and concise summary over their identity (name + parameters + some summary over results if any), not necessarily *eval*\uable. .. note:: Classes derived from :class:`~mvpa2.base.state.ClassWithCollections` and using `params` and `ca` collections for their need of parametrization (e.g. :class:`~mvpa2.clfs.base.Classifier`) would obtain an acceptable definitions of `__repr__` and `__str__` automagically. Function Arguments ------------------ dataset vs data Ones which are supposed to be derived from :class:`~mvpa2.datasets.base.Dataset` class should have suffix (or whole name) ``dataset``. In contrast, if argument is expected to be simply a NumPy_ array, suffix should be ``data``. For example:: class Classifier(ClassWithCollections): ... def train(self, dataset): ... def predict(self, data): class FeatureSelection(ClassWithCollections): ... def __call__(self, dataset, testdataset): Such convention should be enforced in all ``*train``, ``*predict`` functions of classifiers. .. _NumPy: http://numpy.scipy.org/ Documentation ============= Examples -------- Examples should be complete and stand-alone scripts located in `doc/examples`. If an example involves any kind of interactive step, it should honor the :envvar:`MVPA_EXAMPLES_INTERACTIVE` setting, to allow for automatic testing of all examples. In case of a matplotlib-based visualization such snippet should be sufficient:: from mvpa2 import cfg if cfg.getboolean('examples', 'interactive', True): pl.show() All examples are automatically converted into RsT documents for inclusion in the manual. Each of them is preprocessed in the following way: * Any header till the first docstring is stripped. * Each top-level (non-assigned) docstring is taken as a text block in the generated RsT source file. Such a docstring might appear anywhere in the example, not just at the beginning. In this case, the code snippet is properly split and the text block is inserted at the corresponding location. * All remaining lines are treated as code and inserted in the RsT source with appropriate markup. The first docstring in each example must have a proper section heading (with '=' markup). Finally, each example should be added to the appropriate `toctree` in `doc/examples.rst` and included into a test battery by adding it to `testexamples` rule within :file:`Makefile` in the toplevel directory of the source tree. Tests ===== We are slowly moving toward utilizing `nose testing framework`_. It allows to carry out not only unit testing, but also verify correctness of the code snippets provided in the docstrings and the manual. All unit tests are stored in :mod:`mvpa2.tests`, and they make use of :mod:`mvpa2.testing` which provides :mod:`~mvpa2.testing.tools` basic tools (imported wiithin :mod:`~mvpa2.testing.__init__`) :mod:`~mvpa2.testing.clfs` some additional classifiers to be used in the unittests :mod:`~mvpa2.testing.datasets` pre-crafted datasets *warehouse* to be used in the tests :mod:`~mvpa2.testing.sweepargs` defines a custom decorator to allow running the same unittest on a range of input values and later on nicely summarize the detected failures While working on the project we adhere to the following rules: * Every more or less "interesting" bugfix should be accompanied by a unittest which might help to prevent it in the future refactoring * Every new feature should have a unittest * Unit tests that might be non-deterministic (e.g. depending on classifier performance, which is turn is randomly initialized) should be made conditional like this: >>> from mvpa2 import cfg >>> if cfg.getboolean('tests', 'labile', default='yes'): ... pass * Every additional unit test submodule (or a unittest method itself) requiring specific external being present should make use of :func:`~mvpa2.testing.tools.skip_if_no_external`, e.g. >>> from mvpa2.testing import * >>> skip_if_no_external('numpy') Furthermore we encourage detailed docstrings for the classes, including *Examples* section with the demonstration of most typical use cases and aspects of the classes. Those snippets are also part of the tests battery .. _`nose testing framework`: http://somethingaboutorange.com/mrl/projects/nose Changelog ========= The PyMVPA changelog is located in the toplevel directory of the source tree in the `Changelog` file. The content of this file should be formated as restructured text to make it easy to put it into manual appendix and on the website. This changelog should neither replicate the VCS commit log nor the distribution packaging changelogs (e.g. debian/changelog). It should be focused on the user perspective and is intended to list rather macroscopic and/or important changes to the module, like feature additions or bugfixes in the algorithms with implications to the performance or validity of results. It may list references to 3rd party bug trackers, in case the reported bugs match the criteria listed above. Changelog entries should be tagged with the name of the developer(s) (mainly) involved in the modification -- initials are sufficient for people contributing regularly. Changelog entries should be added whenever something is ready to be merged into the master branch, not necessarily with a release already approaching. Extending PyMVPA ================ This section shall provide a developer with the necessary pieces of information for writing extensions to PyMVPA. The guidelines given here, must be obeyed to ensure a maximum of compatibilty and inter-operability. As a consequence, all modifications that introduce changes to the basic interfaces outlined below have to be documented here and also should be announced in the changelog. Adding an External Dependency ----------------------------- Introducing new external dependencies should be done in a completely optional fashion. This includes both build-dependencies and runtime dependencies. With `mvpa2.base.externals` PyMVPA provides a simple framework to test the availability of certain external components and publish the results of the tests throughout PyMVPA. Adding a new Dataset type ------------------------- * Required interface for Mapper. * only new subclasses of MappedDataset + new Mappers (all other as improvements into the Dataset base class)? go into `mvpa2/datasets/` Adding a new Classifier ----------------------- To add a new classifier implementation it is sufficient to create a new sub-class of :class:`~mvpa2.clfs.base.Classifier` and add implementations of the following methods: `__init__(**kwargs)` Additional arguments and keyword arguments may be added, but the base-class contructor has to be called with `**kwargs`! `_train(dataset)` Has to train the classifier when it is called with a :class:`~mvpa2.datasets.base.Dataset`. Successive calls to this methods always have to train the classifier on the respective datasets. An eventually existing prior training status has to be cleared automatically. Nothing is returned. `_predict(data)` Unlike `_train()` the method is not called with a :class:`~mvpa2.datasets.base.Dataset` instance, but with any sequence of data samples (e.g. arrays). It has to return a sequence of predictions, one for each data sample. With this minimal implementation the classifier provides some useful functionality, by automatically storing some relevant information upon request in conditional attributes. .. autoconditional: clfs.base Classifier Supported conditional attributes: ================== ============================================== ========= Name Description Default ------------------ ---------------------------------------------- --------- feature_ids Feature IDS which were used for the actual Disabled training. predicting_time Time (in seconds) which took classifier to Enabled predict. predictions Most recent set of predictions. Enabled trained_dataset The dataset it has been trained on. Disabled trained_targets Set of unique labels it has been trained on. Enabled training_stats Confusion matrix of learning performance. Disabled training_time Time (in seconds) which took classifier to Enabled train. values Internal classifier values the most recent Disabled predictions are based on. ================== ============================================== ========= If any intended functionality cannot be realized be implementing above methods. The :class:`~mvpa2.clfs.base.Classifier` class offers some additional methods that might be overridden by sub-classes. For all methods described below it is strongly recommended to call the base-class methods at the end of the implementation in the sub-class to preserve the full functionality. `_pretrain(dataset)` Called with the :class:`~mvpa2.datasets.base.Dataset` instance that shall be trained with, but before the actual training is performed. `_posttrain(dataset)` Called with the :class:`~mvpa2.datasets.base.Dataset` instance the classifier was trained on, just after training was performed. `_prepredict(data)` Called with the data samples the classifier should do a prediction with, just before the actual `_predict()` call. `_postpredict(data, result)` Called with the data sample for which predictions were made and the resulting predictions themselves. Source code files of all classifier implementations go into `mvpa2/clfs/`. Outstanding Questions: * when ca and when properties? Adding a new Measure -------------------- There are few possible base-classes for new measures (former sensitivity analyzers). First, :class:`~mvpa2.measures.base.Measure` can directly be sub-classed. It is a base class for any measure to be computed on a :class:`~mvpa2.datasets.base.Dataset`. This is the more generic approach. In the most of the cases, measures are to be reported per each feature, thus :class:`~mvpa2.measures.base.FeaturewiseMeasure` should serve as a base class in those cases. Furthermore, for measures that make use of some classifier and extract the sensitivities from it, :class:`~mvpa2.measures.base.Sensitivity` (derived from :class:`~mvpa2.measures.base.FeaturewiseMeasure`) is a more appropriate base-class, as it provides some additional useful functionality for this use case (e.g. training a classifier if needed). .. TODO: deprecate transformers etc All measures (actually all objects based on :class:`~mvpa2.measures.base.Measure`) support a `transformer` keyword argument to their constructor. The functor passed as its value is called with the to be returned results and its outcome is returned as the final results. By default no transformation is performed. If a :class:`~mvpa2.measures.base.Measure` computes a characteristic, were both large positive and large negative values indicate high relevance, it should nevertheless *not* return absolute sensitivities, but set a default transformer instead that takes the absolute (e.g. plain `np.absolute` or a convinience wrapper Absolute_). To add a new measure implementation it is sufficient to create a new sub-class of :class:`~mvpa2.measures.base.Measure` (or :class:`~mvpa2.measures.base.FeaturewiseMeasure`, or :class:`~mvpa2.measures.base.Sensitivity`) and add an implementation of the `_call(dataset)` method. It will be called with an instance of :class:`~mvpa2.datasets.base.Dataset`. :class:`~mvpa2.measures.base.FeaturewiseMeasure` (e.g. :class:`~mvpa2.measures.base.Sensitivity` as well) has to return a vector of featurewise sensitivity scores. .. autoconditional: measures.base Measure Supported conditional attributes: ================== ============================================== ========= Name Description Default ------------------ ---------------------------------------------- --------- null_prob Conditional attribute. Enabled raw_results Computed results before applying any Disabled transformation algorithm. ================== ============================================== ========= Source code files of all sensitivity analyzer implementations go into `mvpa2/measures/`. Classifier-independent Sensitivity Analyzers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Nothing special. Classifier-based Sensitivity Analyzers ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A :class:`~mvpa2.measures.base.Sensitivity` behaves exactly like its classifier-independent sibling, but additionally provides support for embedding the necessary classifier and handles its training upon request (boolean `force_train` keyword argument of the constructor). Access to the embedded classifier object is provided via the `clf` property. .. autoconditional: measures.base Sensitivity Supported conditional attributes: ================== ============================================== ========= Name Description Default ------------------ ---------------------------------------------- --------- base_sensitivities Stores basic sensitivities if the sensitivity Disabled relies on combining multiple ones. null_prob Conditional attribute. Enabled raw_results Computed results before applying any Disabled transformation algorithm. ================== ============================================== ========= Outstanding Questions: * What is a :class:`mvpa2.measures.base.ProxyClassifierSensitivityAnalyzer` useful for? * Shouldn't there be a `sensitivities` state? .. _Absolute: api/mvpa2.misc.transformers-module.html#Absolute Adding a new Algorithm ---------------------- go into `mvpa2/algorithms/` Developer-TODO ============== Things to implement for the next release (Release goals) -------------------------------------------------------- * A part of below restructuring TODO but is separate due to it importance: come up with cleaner hierarchy and tagging of classifiers and regressions -- now they are all `Classifier` * Unify parameter naming across all classifiers and come up with a labeling guideline for future classifier implementations and wrappers:: Numeric parameters can be part of .params Collection now, so they are joined together. * Restructure code base (incl. renaming and moving pieces) Let's use the following list to come up with a nice structure for all logical components we have: * Datasets * Sensitivity analyzers (maybe: featurewise measures) * Classifier sensitivities (SVM, SMLR) -> respective classifiers * ANOVA -> mvpa2.measures.anova * Noise perturbation -> -> mvpa2.measures.noisepertrubation * meta-algorithms (splitting) -> mvpa2.measures FeaturewiseMeasure? * Mappers:: mvpa2.mappers (AKA mvpa2.projections mvpa2.transformers) * Along with PCA/ICA mappers, we should add a PLS mapper:: PCA.train(learningdataset) .forward, .backward Package pychem for Debian, see how to use from PyMVPA! ;-) Same for MDP (i.e. use from pymvpa) * Feature selection algorithms * Simple thresholding * RFE * IFS * .mapper conditional attribute mvpa2.featsel (NB no featsel.featsel.featsel more than 4 times!) mvpa2.featsel.rfe mvpa2.featsel.ifs * several base classes with framework infrastructure (Harvester, ClassWithCollections, virtual properties, ...) * Transfer error calculation * Cross-validation support * Monte-Carlo-based significance testing * Dataset splitter * Metrics and distance functions * Functions operating on dataset for preprocessing or transformations * Commandline interface support * Functions to generate artificial datasets * Error functions (i.e. for TransferError) * Custom exception types * Python 2.5 copy() aka external code shipped with PyMVPA * Several helpers for data IO * Left-over from the last attempt to establish a generic parameter interface * Detrending (operating on Datasets) * Result 'Transformers' to be used with 'transformer=' kwarg * Debugging and verbosity infrastructure * plus additional helpers, ranging from simple to complex scattered all over the place * Resultant hierarchy: - mvpa + datasets + clfs + measures + featsel * Add ability to add/modify custom attributes to a dataset. * Possibly make NiftiDataset default to float32 when it sees that the data are ints. * Add kernel methods as option to all classifiers, not just SVMs. For example, you should be able to run a predefined or custom kernel on the samples going into SMLR. * TransferError needs to know what type of data to send to any specific ErrorFX. Right now there is only support for predictions and labels, but the area under the ROC and the correlation-based error functions expect to receive the "values" or "probabilities" from a classifier. Just to make this harder, every classifier is different. For example, a ridge regression's predictions are continuous values, whereas for a SVM you need to pass in the probabilities. For binary: 1 value multiclass: 1 value, or N values * In a related issue, the predictions and values ca of the classifiers need to have a consistent format. Currently, SVM returns a list of dictionaries for values and SMLR returns a NumPy_ ndarray. Long and medium term TODOs (aka stuff that has been here forever) ----------------------------------------------------------------- * selected_ids -> implement via MaskMapper? yoh: it might be preferable to manipulate/expose MaskMapper instead of plain list of selected_ids within FeatureSelection classes * unify naming of working/testing * transerror.py for instance uses testdata/trainingdata * rfe.py dataset, testdataset * implement proper cloning of classifiers. untrain() doesn't work in some cases, since we can create somewhat convolved object definitions so it is hard, if not impossible, to get to all used classifiers. See for instance clfswh['SVM/Multiclass+RFE']. We can't get all the way into classifier-based sensitivity analyzer. Thus instead of tracking all the way down in hierarchy, we should finally create proper 'parametrization' handling of classifiers, so we could easily clone basic ones (which might have active SWIG bindings), and top-level ones should implement .clone() themselves. or may be some other way, but things should be done. Or may be via proper implementation of __reduce__ etc * mvpa2.misc.warning may be should use stock python warnings module instead of custom one? * ConfusionBasedError -> InternalError ? * Renaming of the modules transerror.py -> errors.py * SVM: get_sv and get_sv_coef return very 'packed' presentation whenever classifier is multiclass. Thus they have to be unpacked before proper use (unless it is simply a binary classifier). * Regression tests: for instance using sample dataset which we have already, run doc/examples/searchlight.py and store output to validate against. Probably the best would be to create a regression test suite within unit tests which would load the dataset and run various algorithms on it a verify the results against previously obtained (and dumped to the disk) * feature_selector -- may be we should return a tuple (selected_ids, discarded_ids)? Michael: Is there any use case for that? ElementSelector can 'select' and 'discard' already. DO we need both simultaneously? * Non-linear SVM RFE * ParameterOptimizer (might be also OptimizedClassifier which uses parameterOptimizer internally but as the result there is a classifier which automatically optimizes its parameters. It is close in idea to classifier based on RFE) Building a binary installer on MacOS X 10.5 =========================================== A simple way to build a binary installer for Mac OS is bdist_mpkg_. This is a setuptools extension that uses the proper native parts of MacOS to build the installer. However, for PyMVPA there are two problems with bdist_mpkg_: 1. PyMVPA uses distutils not setuptools and 2. current bdist_mpkg_ 0.4.3 does not work for MacOS X 10.5 (Leopard). But both can be solved. Per 1) A simple wrapper script in `tools/mpkg_wrapper.py` will enable the use of setuptools on top of distutils, while keeping the distutils part in a usable state. Per 2) The following patch (against 0.4.3.) makes bdist_mpkg_ compatible with MacOS 10.5. It basically changes the way bdist_mpkg_ determined the GID of the admin group. 10.5 removed the `nidump` command:: diff -rNu bdist_mpkg-0.4.3/bdist_mpkg/tools.py bdist_mpkg-0.4.3.leopard/bdist_mpkg/tools.py --- bdist_mpkg-0.4.3/bdist_mpkg/tools.py 2006-07-09 00:39:00.000000000 -0400 +++ bdist_mpkg-0.4.3.leopard/bdist_mpkg/tools.py 2008-08-21 07:43:35.000000000 -0400 @@ -79,15 +79,12 @@ yield os.path.join(root, fn) def get_gid(name, _cache={}): - if not _cache: - for line in os.popen('/usr/bin/nidump group .'): - fields = line.split(':') - if len(fields) >= 3: - _cache[fields[0]] = int(fields[2]) - try: - return _cache[name] - except KeyError: - raise ValueError('group %s not found' % (name,)) + for line in os.popen("dscl . -read /Groups/" + name + " PrimaryGroupID"): + fields = [f.strip() for f in line.split(':')] + if fields[0] == "PrimaryGroupID": + return fields[1] + + raise ValueError('group %s not found' % (name,)) def find_root(path, base='/'): """ .. _bdist_mpkg: http://undefined.org/python/#bdist_mpkg pymvpa2-2.2.0/doc/source/docoverview.rst000066400000000000000000000030331202542755000202450ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Documentation overview .. _chap_docoverview: ********************** Documentation Overview ********************** For users ========= * :ref:`Installation Instructions ` (where to obtain it, and how to get it running) * :ref:`Tutorial ` (hands-on introduction). * :ref:`User Manual ` [PDF-manual_] * :ref:`FAQ ` (short answers to common problems) * :ref:`chap_examples` (batteries included) * :ref:`Module Reference ` (comprehensive reference) * :ref:`Bibliography ` (references to interesting literature) * :ref:`Development Changelog ` [:ref:`Movie version `] (see what has changed) .. _PDF-manual: PyMVPA-Manual.pdf .. comment to separate the two lists * :ref:`genindex` (access by keywords) * :ref:`search` (online and offline full-text search) For developers ============== * :ref:`Developer Guidelines ` [PDF-guide_] (information for people contributing code) * :ref:`Achievements of the first PyMVPA Extravaganza ` at Dartmouth College (Nov 30 -- Dec 4 2009) .. _PDF-guide: PyMVPA-DevGuide.pdf pymvpa2-2.2.0/doc/source/download.rst000066400000000000000000000102071202542755000175210ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Download .. _chap_download: **************** Obtaining PyMVPA **************** Binary packages =============== Binary packages are available for: * Debian and Ubuntu (:ref:`installation instructions `) `Official Debian package`_ (``python-mvpa2``). Backports for Debian and Ubuntu releases are available from the `NeuroDebian project`_. .. * RPM-based GNU/Linux distributions (:ref:`installation instructions `) RPM packages are provided through the `OpenSUSE Build Service`_. It offers package repositories and `1-click-installations`_. Currently, we offer RPMs for: * CentOS_ 5 * Fedora_ 9 (and later releases) * OpenSUSE_ 11.0 (and later releases) * RedHat_ Enterprise Linux 5 * MacOS X (:ref:`installation instructions `) PyMVPA is available from the MacPorts_ framework (at the moment only previous 0.4 series. . * Windows (:ref:`installation instructions `) An installer for Python 2.6 is available from the `github download area`_. Also installers of PyMVPA for Python 2.5, 2.6 and 2.7 are available from the `Unofficial Windows binaries collection of Christoph Gohlke`_. If there are no binary packages for your particular operating system or platform, you have two opportunities. You could compile PyMVPA (which is not strictly necessary anyways unless you need to use SVM or SMLR). The manual contains :ref:`instructions ` to build PyMVPA in various environments (Windows, Fedora, OpenSuse, ...). Alternatively you could use `NeuroDebian Virtual Appliance`_ which allows in a matter of minutes to get a full featured (Neuro)Debian GNU/Linux distribution running **on top** of your system, thus providing easy access to over 30,000 software products many of which are related to machine learning and neuroscience. .. _NeuroDebian Virtual Appliance: http://neuro.debian.net/vm.html .. _MacPorts: http://www.macports.org/ports.php?by=name&substr=pymvpa .. _official Debian package: http://packages.debian.org/python-mvpa2 .. _NeuroDebian project: http://neuro.debian.net .. _OpenSUSE: http://download.opensuse.org/repositories/home:/hankem:/suse/ .. _CentOS: http://download.opensuse.org/repositories/home:/hankem:/rh5/ .. _Fedora: http://download.opensuse.org/repositories/home:/hankem:/rh5/ .. _Redhat: http://download.opensuse.org/repositories/home:/hankem:/rh5/ .. _1-click-installations: http://software.opensuse.org/search?baseproject=ALL&p=1&q=python-mvpa .. _OpenSUSE Build Service: https://build.opensuse.org/ Source code =========== Source code tarballs of PyMVPA releases are available from the `download area`_. Alternatively, one can also download a tarball of the latest development snapshot_ (i.e. the current state of the *master* branch of the PyMVPA source code repository). To get access to both the full PyMVPA history and the latest development code, the PyMVPA Git_ repository is publicly available. To view the repository, please point your webbrowser to gitweb: http://github.com/PyMVPA/PyMVPA To clone (aka checkout) the PyMVPA repository simply do: :: git clone git://github.com/PyMVPA/PyMVPA.git After a short while you will have a ``PyMVPA`` directory below your current working directory, that contains the PyMVPA repository. More detailed instructions on :ref:`installation requirements ` and on how to :ref:`build PyMVPA from source ` are provided in the manual. .. _download area: https://github.com/PyMVPA/PyMVPA/tags .. _github download area: https://github.com/PyMVPA/PyMVPA/downloads .. _Git: http://git.or.cz/ .. _snapshot: http://github.com/PyMVPA/PyMVPA/archives/master .. _Unofficial Windows binaries collection of Christoph Gohlke: http://www.lfd.uci.edu/~gohlke/pythonlibs/ pymvpa2-2.2.0/doc/source/examples.rst000066400000000000000000000037041202542755000175340ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: example .. _chap_examples: **************************** Example Analyses and Scripts **************************** Each of the examples in this section is a stand-alone script containing all necessary code to run some analysis. All examples are shipped with PyMVPA and can be found in the `doc/examples/` directory in the source package. This directory might include some more special-interest examples which are not listed here. Some examples need to access a sample dataset available in the `data/` directory within the root of the PyMVPA hierarchy, and thus have to be invoked directly from PyMVPA root (e.g. `doc/examples/searchlight.py`). Alternatively, one can download a full example dataset, which is explained in the next section. Preprocessing ============= .. toctree:: examples/projections examples/smellit Analysis ======== .. toctree:: examples/hyperplane_demo examples/start_easy examples/smlr examples/clfs_examples examples/gpr examples/gpr_model_selection0 examples/cachedkernel examples/searchlight_minimal examples/searchlight examples/searchlight_dsm examples/sensanas examples/svdclf examples/permutation_test examples/nested_cv examples/match_distribution examples/eventrelated examples/hyperalignment examples/mdp_mnist examples/eyemovements Visualization ============= .. toctree:: examples/erp_plot examples/knn_plot examples/pylab_2d examples/topo_plot examples/som examples/mri_plot Miscellaneous ============= .. toctree:: examples/kerneldemo examples/curvefitting pymvpa2-2.2.0/doc/source/faq.rst000066400000000000000000000304761202542755000164730ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_faq: ************************** Frequently Asked Questions ************************** General ======= .. index:: Matlab I'm a Matlab user. How hard is learning Python and PyMVPA for me? ----------------------------------------------------------------- If you are coming from Matlab, you will soon notice a lot of similarities between Matlab and Python (besides the huge advantages of Python over Matlab). For an easy transition you might want to have a look at a `basic comparison of Matlab and NumPy`_. .. _basic comparison of Matlab and NumPy: http://www.scipy.org/NumPy_for_Matlab_Users .. index:: MVPA toolbox for Matlab It would be nice to have some guidelines on how to use PyMVPA for users who are already familiar with the `Matlab MVPA toolbox`_. If you are using both packages and could compile a few tips, your contribution would be most welcome. .. _Matlab MVPA toolbox: http://www.csbmb.princeton.edu/mvpa/ A recent paper by :ref:`Jurica and van Leeuwen (2009) ` describes an open-source MATLAB®-to-Python compiler which might be a very useful tool to migrate a substantial amount of Matlab-based source code to Python and therefore also aids the migration of developers from Matlab to the new *"general open-source lingua franca for scientific computation"*. .. index:: optimization It is sloooooow. What can I do? ------------------------------- Have you tried running the Python interpreter with `-O`? PyMVPA provides lots of debug messages with information that is computed in addition to the work that really has to be done. However, if Python is running in *optimized* mode, PyMVPA will not waste time on this and really tries to be fast. If you are already running it optimized, then maybe you are doing something really demanding... I am tired of writing these endless import blocks. Any alternative? ------------------------------------------------------------------- Sure. Instead of individually importing all pieces that are required by a script, you can import them all at once. A simple: >>> import mvpa2.suite as mvpa2 makes everything directly accessible through the mvpa namespace, e.g. `mvpa2.datasets.base.Dataset` becomes `mvpa2.Dataset`. Really lazy people can even do: >>> from mvpa2.suite import * However, as always there is a price to pay for this convenience. In contrast to the individual imports there is some initial performance and memory cost. In the worst case you'll get all external dependencies loaded (e.g. a full R session), just because you have them installed. Therefore, it might be better to limit this use to case where individual key presses matter and use individual imports for production scripts. I feel like I want to contribute something, do you mind? -------------------------------------------------------- Not at all! If you think there is something that is not well explained in the documentation, send us an improvement. If you implemented a new algorithm using PyMVPA that you want to share, please share. If you have an idea for some other improvement (e.g. speed, functionality), but you have no time/cannot/do not want to implement it yourself, please post your idea to the PyMVPA mailing list. .. index:: Git, development I want to develop a new feature for PyMVPA. How can I do it efficiently? ------------------------------------------------------------------------ The best way is to use Git for both, getting the latest code from the repository and preparing the patch. Here is a quick sketch of the workflow. First get the latest code:: git clone git://github.com/PyMVPA/PyMVPA.git This will create a new `PyMVPA` subdirectory, that contains the complete repository. Enter this directory and run `gitk --all` to browse the full history and *all* branches that have ever been published. You can run:: git fetch origin in this directory at any time to get the latest changes from the main repository. Next, you have to decide what you want to base your new feature on. In the simplest case this is the `master` branch (the one that contains the code that will become the next release). Creating a local branch based on the (remote) `master` branch is:: git checkout -b my_hack origin/master Now you are ready to start hacking. You are free to use all powers of Git (and yours, of course). You can do multiple commits, fetch new stuff from the repository, and merge it into your local branch, ... To get a feeling what can be done, take a look `very short description of Git`_ or `a more comprehensive Git tutorial`_. .. _very short description of Git: http://sysmonblog.co.uk/misc/git_by_example/ .. _a more comprehensive Git tutorial: http://www-cs-students.stanford.edu/~blynn/gitmagic/ When you are done with the new feature, you can prepare the patch for inclusion into PyMVPA. If you have done multiple commits you might want to squash them into a single patch containing the new feature. You can do this with `git rebase`. Any recent version of `git rebase` has an option `--interactive`, which allows you to easily pick, squash or even further edit any of the previous commits you have made. Rebase your local branch against the remote branch you started hacking on (`origin/master` in this example):: git rebase --interactive origin/master When you are done, you can generate the final patch file:: git format-patch origin/master Above command will generate a file for each commit in you local branch that is not yet part of `origin/master`. The patch files can then be easily emailed. The manual is quite insufficient. When will you improve it? ----------------------------------------------------------- Writing a manual can be a tricky task if you already know the details and have to imagine what might be the most interesting information for someone who is just starting. If you feel that something is missing which has cost you some time to figure out, please drop us a note and we will add it as soon as possible. If you have developed some code snippets to demonstrate some feature or non-trivial behavior (maybe even trivial ones, which are not as obvious as they should be), please consider sharing this snippet with us and we will put it into the example collection or the manual. Thanks! Data import, export and storage =============================== What file formats are understood by PyMVPA? ------------------------------------------- Please see the :ref:`data_formats` section. What if there is no special file format for some particular datatype? --------------------------------------------------------------------- With the :class:`~mvpa2.misc.io.hamster.Hamster` class, PyMVPA supports storing *any* kind of serializable data into a (compressed) file (see the class documentation for a trivial usage example). The facility is particularly useful for storing any number of intermediate analysis results, e.g. for post-processing. Data preprocessing ================== .. index:: invariant features Is there an easy way to remove invariant features from a dataset? ----------------------------------------------------------------- You might have to deal with invariant features in case like an fMRI dataset, where the *brain mask* is slightly larger than the thresholded fMRI timeseries image. Such invariant features (i.e. features with zero variance) are sometime a problem, e.g. they will lead to numerical difficulties when z-scoring the features of a dataset (i.e. division by zero). The `mvpa2.datasets.miscfx` module provides a convenience function `remove_invariant_features()` that strips such features from a dataset. .. index:: Block-averaging How can I do :term:`block-averaging` of my block-design fMRI dataset? --------------------------------------------------------------------- The easiest way is to use a mapper to transform/average the respective samples. Suppose you have a dataset: >>> dataset = normal_feature_dataset() >>> print dataset > Averaging all samples with the same label in each chunk individually is done by applying a mapper to the dataset. >>> from mvpa2.mappers.fx import mean_group_sample >>> >>> m = mean_group_sample(['targets', 'chunks']) >>> mapped_dataset = dataset.get_mapped(m) >>> print mapped_dataset , > `mean_group_sample` creates an `FxMapper` that applies a function to every group of samples in each chunk individually and therefore yields one sample of each label per chunk. Data analysis ============= .. index:: feature selection, feature_ids How do I know which features were finally selected by a classifier doing feature selection? ------------------------------------------------------------------------------------------- All feature selection classifier use a built-in mapper to slice datasets. This mapper can be queried for selected features, or simply used to apply the same feature selection to other datasets. >>> clf = FeatureSelectionClassifier( ... kNN(k=5), ... SensitivityBasedFeatureSelection( ... SMLRWeights(SMLR(lm=1.0), postproc=maxofabs_sample()), ... FixedNElementTailSelector(1, tail='upper', mode='select'))) >>> clf.train(dataset) >>> len(clf.mapper.slicearg) 1 >>> final_dataset = clf.mapper.forward(dataset) >>> print final_dataset > In the above code snippet a kNN classifier is defined, that performs a feature selection step prior training. Features are selected according to the maximum absolute magnitude of the weights of a SMLR classifier trained on the data (same training data that will also go into kNN). Absolute SMLR weights are used for feature selection as large negative values also indicate important information. Finally, the classifier is configured to select the single most important feature (given the SMLR weights). After enabling the `feature_ids` state, the classifier provides the desired information, that can e.g. be applied to generate a stripped dataset for an analysis of the similarity structure. .. index:: sensitivity, cross-validation How do I extract sensitivities from a classifier used within a cross-validation? -------------------------------------------------------------------------------- .. The answer depends on size of the classification problem and the used classifier. If you can afford to keep a copy of the trained classifier for each data split, the most elegant solution is probably a :class:`~mvpa2.clfs.meta.SplitClassifier`... ...BUT no yet In various parts of PyMVPA it is possible to extract information from inside loops via callbacks. To extract sensitivities from inside a cross-validation analysis, without unnecessary retraining of the classifier one only needs to write a corresponding callback function. here is a sketch: >>> sensitivities = [] >>> def store_me(data, node, result): ... sens = node.measure.get_sensitivity_analyzer(force_train=False)(data) ... sensitivities.append(sens) >>> >>> cv = CrossValidation(SMLR(), OddEvenPartitioner(), callback=store_me) >>> merror = cv(dataset) >>> len(sensitivities) 2 >>> sensitivities[0].shape == (len(dataset.uniquetargets), dataset.nfeatures) True First we set up a container (a list) to store the sensitivies for a cross-validation folds. next is the callback: It takes three arguments, as described in the documentation of :class:`~mvpa2.measures.base.RepeatedMeasure`. The second argument is the node that is evaluated inside the loop. For a cross-validation this is a :class:`~mvpa2.measures.base.TransferMeasure` that exposes its internal classifier via the ``measure`` property. The rest is straightforward. We contruct a sensitivity analyzer and pass the input dataset. Finally, we store the returned sensitivities. .. _faq_literal_labels: Can PyMVPA deal with literal class labels? ------------------------------------------ Yes. For all external machine learning libraries that do not support literal labels, PyMVPA will transparently convert them to numerical ones, and also revert this transformation for all output values. pymvpa2-2.2.0/doc/source/featsel.txt000066400000000000000000000277001202542755000173520ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Feature Selection .. _chap_featsel: ***************** Feature Selection ***************** *This section has been originally contributed by James M. Hughes.* It is often the case in machine learning problems that we wish to reduce a feature space of high dimensionality into something more manageable by selecting only those features that contribute most to classification performance. Feature selection methods attempt to achieve this goal in an algorithmic fashion. This section is a complement to Tutorial sections :ref:`chap_tutorial_classifiers` and :ref:`chap_tutorial_sensitivity` aiming to also cover additional topics, such as RFE_. .. index:: FeatureSelectionClassifier PyMVPA's flexible framework allows various feature selection methods to take place within a small block of code. :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` (which in mvpa2 is just a wrapper around :class:`~mvpa2.clfs.meta.MappedClassifier`) extends the basic classifier framework to allow for the use of arbitrary methods of feature selection according to whatever ranking metric, feature selection criteria, and stopping criterion the user chooses for a given application. Examples of the code/classification algorithms presented here can be found in :mod:`~mvpa2.clfs.warehouse`. More formally, a :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` is a meta-classifier. That is, it is not a classifier itself -- it can take any *slave* :class:`~mvpa2.clfs.base.Classifier` and a :class:`~mvpa2.featsel.base.FeatureSelection`. When trained on a dataset, it first performs the `feature_selection`, and then trains the provided *slave* `clf` on those selected features. Externally, however, it looks like a :class:`~mvpa2.clfs.base.Classifier`, in that it fulfills the specialization of the Classifier base class. The following are the relevant arguments to the constructor of such a :class:`~mvpa2.clfs.base.Classifier`: `clf`: :class:`~mvpa2.clfs.base.Classifier` classifier based on which mask classifiers is created `feature_selection`: FeatureSelection_ whatever feature selection is considered best .. index:: FeatureSelection Let us turn out attention to the second argument, FeatureSelection_. As noted above, this feature selection can be arbitrary and should be chosen appropriately for the task at hand. For example, we could perform a one-way ANOVA statistic to select features, then keep only the most important 5% of them. It is crucial to note that, in PyMVPA, the way in which features are selected (in this example by keeping only 5% of them) is wholly independent of the way features are ranked (in this example, by using a one-way ANOVA). Feature selection using this method could be accomplished using the following code (from `mvpa2/clfs/warehouse.py`_): >>> from mvpa2.suite import * >>> fs = SensitivityBasedFeatureSelection( ... OneWayAnova(), ... FractionTailSelector(0.05, mode='select', tail='upper')) A more interesting analysis is one in which we use the weights (hyperplane coefficients) to rank features. This allows us to use the same classifier to train the selected features as we used to select them: .. here we'll put the warehouse.py example of linear svm weights from yarik's email >>> sample_linear_svm = clfswh['linear', 'svm'][0] >>> clf = \ ... FeatureSelectionClassifier( ... sample_linear_svm, ... SensitivityBasedFeatureSelection( ... sample_linear_svm.get_sensitivity_analyzer(postproc=maxofabs_sample()), ... FractionTailSelector(0.05, mode='select', tail='upper')), ... descr="LinSVM on 5%(SVM)") >>> print clf It bears mentioning at this point that caution must be exercised when selecting features. The process of feature selection must be performed on an independent training dataset: it would be incorrect to select features using the entire dataset, re-train a classifier on a subset of the original data (but using only the selected features) and then test on a held-out testing dataset. This results in an obvious positive bias in classification performance (see :ref:`chap_magic_feature_selection`). PyMVPA allows for easy dataset partitioning and splitting, however, so creating independent training and testing datasets is easily accomplished. .. fill in end of last paragraph with suggestions for how to take in an entire original dataset and split it: should we just do a cross-validated outer loop that uses multiple training/testing splits and does RFE on each of these splits? .. index:: recursive feature selection, RFE .. _recursive_feature_elimination: Recursive Feature Elimination ============================= Recursive feature elimination (RFE_, applied to fMRI data using SVM in (:ref:`Hanson et al., 2008 `)) is a technique that falls under the larger umbrella of feature selection. Recursive feature elimination specifically attempts to reduce the number of selected features used for classification in the following way: * An arbitrary feature ranking/weighting (usually classifier's sensitivity/weights) is performed on a subset of the data. * Some amount of those features is either selected or discarded according to a pre-selected rule. * Above steps are repeated until some criterion determined \textit{a priori} (such as classification error) is reached. * One or more classifiers trained only on the final set of selected features are used on a generalization dataset and performance is calculated. PyMVPA's flexible framework allows each of these steps to take place within a small block of code. Flexible parametrization allows to explore quite a variety of possible specific RFE_ recipes. To actually perform recursive feature elimination, we consider two separate analysis scenarios that deal with a pre-selected training dataset: * We split the training dataset into an arbitrary number of independent datasets and perform RFE on each of these; the sensitivity analysis of features is performed independently for each split and features are selected based on those independent measures. * We split the training dataset into an arbitrary number of independent datasets (as before), but we average the feature sensitivities and select which features to prune/select based on that one average measure. .. index:: SplitClassifier We will concentrate on the second approach. The following code can be used to perform such an analysis: >>> rfesvm_split = SplitClassifier(LinearCSVMC(), OddEvenPartitioner()) >>> # design an RFE feature selection to be used with a classifier >>> rfe = RFE(rfesvm_split.get_sensitivity_analyzer( ... # take sensitivities per each split, L2 norm, mean, abs them ... postproc=ChainMapper([ FxMapper('features', l2_normed), ... FxMapper('samples', np.mean), ... FxMapper('samples', np.abs)])), ... # use the error stored in the confusion matrix of split classifier ... ConfusionBasedError(rfesvm_split, confusion_state='stats'), ... # we just extract error from confusion, so need to split dataset ... Repeater(2), ... # select 50% of the best on each step ... fselector=FractionTailSelector( ... 0.50, ... mode='select', tail='upper'), ... # and stop whenever error didn't improve for up to 10 steps ... stopping_criterion=NBackHistoryStopCrit(BestDetector(), 10), ... # we just extract it from existing confusion ... train_pmeasure=False, ... # but we do want to update sensitivities on each step ... update_sensitivity=True, ... enable_ca=['errors']) >>> clf = \ ... FeatureSelectionClassifier( ... LinearCSVMC(), ... # on features selected via RFE ... rfe, ... # custom description ... descr='LinSVM+RFE(splits_avg)' ) >>> # Just an example of application >>> from mvpa2.misc.data_generators import normal_feature_dataset >>> ds = normal_feature_dataset(perlabel=20, nlabels=2, nfeatures=100, snr=0.5) >>> clf.train(ds) >>> # See how errors go down and possibly back up while removing the features >>> print zip(rfe.ca.nfeatures, rfe.ca.errors) # doctest: +SKIP The code above introduces the :class:`~mvpa2.clfs.meta.SplitClassifier`, which in this case is yet another *meta-classifier* that takes in a :class:`~mvpa2.clfs.base.Classifier` (in this case a LinearCSVMC_) and an arbitrary :class:`~mvpa2.generators.partition.Partitioner` object, so that the dataset can be partitioned to be split in whatever way the user desires. Prior to training, the :class:`~mvpa2.clfs.meta.SplitClassifier` splits the training dataset, dedicates a separate classifier to each split, trains each on the training part of the split, and then computes transfer error on the testing part of the split. If a :class:`~mvpa2.clfs.meta.SplitClassifier` instance is later on asked to *predict* some new data, it uses (by default) the MaximalVote_ strategy to derive an answer. A summary about the performance of a :class:`~mvpa2.clfs.meta.SplitClassifier` internally on each split of the training dataset is available by accessing the `stats` conditional attribute. To summarize somewhat, RFE_ is just one method of feature selection, so we use a :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` to facilitate this. To parameterize the RFE process, we refer above to the following: `fmeasure` in this case just the default from a linear C-SVM (the SVM weights), taken as an average over all splits (in accordance with scenario 2 as above) `pmeasure` confusion-based error that relies on the confusion matrices computed during splitting of the dataset by the :class:`~mvpa2.clfs.meta.SplitClassifier`; this is used to provide a value that can be compared against a stopping criterion to stop eliminating features `splitter` defines how to split the dataset into two parts: one for training `fmeasure` and another one for assessing `pmeasure`. In our case we rely on `SplitClassifier` to provide both, so no splitting is necessary so we just repeat dataset twice `fselector` in this example we simply discard the 50% of features deemed least important `update_sensitivity` true to retrain the classifiers each time we eliminate features; should be false if a non-classifier-based sensitivity measure (such as one-way ANOVA) is used As has been shown, recursive feature elimination is an easy-to-implement, flexible, and powerful tool within the PyMVPA framework. Various ranking methods for selecting features have been discussed. Additionally, several analysis scenarios have been presented, along with enough requisite knowledge that the user can plug in whatever classifiers, error metrics, or sensitivity measures are most appropriate for the task at hand. .. _RFE: generated/mvpa2.featsel.rfe.RFE.html .. _MaximalVote: api/mvpa2.clfs.meta.MaximalVote-class.html .. _FeatureSelection: api/mvpa2.featsel.base.FeatureSelection-class.html .. _LinearCSVMC: api/mvpa2.clfs.svm.LinearCSVMC-class.html .. _mvpa2/clfs/warehouse.py: api/mvpa2.clfs.warehouse-pysrc.html .. index:: incremental feature search, IFS .. _incremental_feature_search: Incremental Feature Search ========================== IFS_ (to be written) .. _IFS: api/mvpa2.featsel.ifs.IFS-class.html .. What are the practical differences (besides speed) between RFE and IFS? .. automodule:: mvpa2.measures .. only:: html Related API documentation ========================= .. currentmodule:: mvpa .. autosummary:: :toctree: generated featsel.base featsel.ifs featsel.rfe featsel.helpers pymvpa2-2.2.0/doc/source/glossary.rst000066400000000000000000000224451202542755000175640ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_glossary: ******** Glossary ******** The literature concerning the application of multivariate pattern analysis procedures to neuro-scientific datasets contains a lot of specific terms to refer to procedures or types of data, that are of particular importance. Unfortunately, sometimes various terms refer to the same construct and even worse these terms do not necessarily match the terminology used in the machine learning literature. The following glossary is an attempt to map the various terms found in the literature to the terminology used in this manual. .. glossary:: Block-averaging Averaging all samples recorded during a block of continuous stimulation in a block-design :term:`fMRI` experiment. The rationale behind this technique is, that averaging might lead to an improved signal-to-noise ratio. However, averaging further decreases the number of samples in a dataset, which is already very low in typical fMRI datasets, especially in comparison to the number of features/voxels. Block-averaging might nevertheless improve the classifier performance, *if* it indeed improves signal-to-noise *and* the respective classifier benefits more from few high-quality samples than from a larger set of lower-quality samples. Classifier A model that maps an arbitrary feature space into a discrete set of labels. Meta-classifier An internal to PyMVPA term to describe a classifier which is usually a proxy to the main classifier which it wraps to provide additional data preprocessing (e.g. feature selection) before actually training and/or testing of the wrapped classifier. Cross-validation A technique to assess the :term:`generalization` of the constructed model by the analysis of accuracy of the model predictions on presumably independent dataset. Chunk A chunk is a group of samples. In PyMVPA chunks define *independent* groups of samples (note: the groups are independent from each other, not the samples in each particular group). This information is important in the context of a cross-validation procedure, as it is required to measure the classifier performance on independent test datasets to be able to compute unbiased generalization estimates. This is of particular importance in the case of fMRI data, where two successively recorded volumes cannot be considered as independent measurements. This is due to the significant temporal forward contamination of the hemodynamic response whose correlate is measured by the MR scanner. Conditional Attribute An attribute of a :term:`learner` which might be enabled or disabled, grouped within ``.ca`` attributes collection. If enabled, it might cause additional computation and memory consumption, so the "heaviest" conditional attributes are disabled by default. Confusion Matrix Visualization of the :term:`generalization` performance of a :term:`classifier`. Each row of the matrix represents the instances in a predicted class, while each column represents the :term:`sample`\s in an actual (target) class. Each cell provides a count of how many :term:`sample`\s of the target class were (mis)classifier into the corresponding class. In PyMVPA instances of :class:`~mvpa2.clfs.transerror.ConfusionMatrix` class provide not only confusion matrix itself but a bulk of additional statistics. Dataset In PyMVPA a dataset is the combination of samples, and their :term:`Dataset attribute`\s. Dataset attribute An arbitrary auxiliary information that is stored in a dataset. Decoding This term is usually used to refer to the application of machine learning or pattern recognition techniques to brainimaging datasets, and therefore is another term for :term:`MVPA`. Sometimes also 'brain-reading' is used as another alternative. Epoch Sometimes used to refer to a group of successively acquired samples, and, thus, related to a :term:`chunk`. Exemplar Another term for :term:`sample`. Feature A variable that represents a dimension in a :term:`dataset`. This might be the output of a single sensor, such as a voxel, or a refined measure reflecting specific aspect of data, such as a specific spectral component. Feature attribute Analogous to a :term:`sample attribute`, this is a per-feature vector of auxiliary information that is stored in a dataset. Feature Selection A technique that targets detection of features relevant to a given problem, so that their selection improves generalization of the constructed model. fMRI This acronym stands for *functional magnetic resonance imaging*. Generalization An ability of a model to perform reliably well on any novel data in the given domain. Label A label is a special case of a :term:`target` for specifying discrete categories of :term:`sample`\s in a classification analyses. Learner A model that upon training given some data (:term:`sample`\s and may be :term:`target`\s) develops an ability to map an arbitrary :term:`feature` space of :term:`sample`\s into another space. If :term:`target`\s were provided, such learner is called :term:`supervised` and tries to achieve mapping into the space of :term:`target`\s. If the target space defined by a set of discrete set of labels, such learner is called a :term:`classifier`. Machine Learning A field of Computer Science that aims at constructing methods, such as classifiers, to integrate available knowledge extracted from existing data. MVPA This term originally stems from the authors of the Matlab MVPA toolbox, and in that context stands for *multi-voxel pattern analysis* (see :ref:`Norman et al., 2006 `). PyMVPA obviously adopted this acronym. However, as PyMVPA is explicitly designed to operate on non-fMRI data as well, the 'voxel' term is not appropriate and therefore MVPA in this context stands for the more general term *multivariate pattern analysis*. Neural Data Modality A reflection of neural activity collected using some available instrumental method (e.g., EEG, :term:`fMRI`). Processing object Most objects dealing with data are implemented as processing objects. Such objects are instantiated *once*, with all appropriate parameters configured as desired. When created, they can be used multiple times by simply calling them with new data. Sample A sample is a vector with observations for all :term:`feature` variables. Sample attribute A per-sample vector of auxiliary information that is stored in a dataset. This could, for example, be a vector identifying specific :term:`chunk`\ s of samples. Sensitivity A sensitivity is a score assigned to each :term:`feature` with respect to its impact on the performance of the learner. So, for a classifier, sensitivity of a feature might describe its influence on :term:`generalization` performance of the classifier. In case of linear classifiers, it could simply be coefficients of separating hyperplane given by :term:`weight vector`. There exist additional scores which are similar to sensitivities in terms of indicating the "importance" of a particular feature -- examples are a univariate :ref:`anova` score or a :ref:`noise_perturbation` measure. Sensitivity Map A vector of several sensitivity scores -- one for each feature in a dataset. Spatial Discrimination Map (SDM) This is another term for a :term:`sensitivity map`, used in e.g. :ref:`Wang et al. (2007) `. Statistical Discrimination Map (SDM) This is another term for a :term:`sensitivity map`, used in e.g. :ref:`Sato et al. (2008) `, where instead of raw sensitivity the result of significance testing is assigned. Statistical Learning A field of science related to :term:`machine learning` which aims at exploiting statistical properties of data to construct robust models, and to assess their convergence and :term:`generalization` performances. Supervised Is a :term:`learner` which obtains both :term:`sample`\s data and :term:`target`\s within a :term:`training dataset`. Target A target associates each :term:`sample` in the :term:`dataset` with a certain category, experimental condition or, in case of a regression problem, with some metric variable. In case of supervised learning algorithm targets define the model to be trained, and provide the "ground truth" for assessing the model's :term:`generalization` performance. Time-compression This usually refers to the :term:`block-averaging` of samples from a block-design fMRI dataset. Training Dataset :term:`Dataset` which is used for training of the :term:`learner`. Testing Dataset :term:`Dataset` which is used to assess the :term:`generalization` of the :term:`learner`. Weight Vector See :term:`Sensitivity`. pymvpa2-2.2.0/doc/source/history.rst000066400000000000000000000035121202542755000174140ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_code_swarm: .. index:: code swarm ****************** PyMVPA - The Movie ****************** If you are interested in the evolution of PyMVPA you might also be interested in the following movie. It is a visualization of the activity in the PyMVPA source repository since it first has been published in May 2007. The movie is generated with tools from the `code_swarm project`_. .. _code_swarm project: http://vis.cs.ucdavis.edu/~ogawa/codeswarm/ In the movie, each file in the PyMVPA sources that is changed appears as a particle on the screen centered around the name of the developer that contributed this change. The colors indicate which part of PyMVPA the respective file belongs to (see the legend on the left). The animation is regenerated every couple of weeks to include the more recent commits. .. raw:: html Play video Music by `Peter Nalitch`_. Many thanks for his special permission to use his song *Gitar* (© Peter Nalitch) for our project history. Please be sure to also watch the `outstanding video clip`_! .. _Peter Nalitch: http://peternalitch.ru .. _outstanding video clip: http://www.youtube.com/watch?v=AOzkN8dHnjk pymvpa2-2.2.0/doc/source/howtocite.txt000066400000000000000000000064561202542755000177410ustar00rootroot00000000000000.. -*- mode: rst -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: Below is a list of publications about PyMVPA that have been published so far (in chronological order). If you use PyMVPA in your research please cite the one that matches best, and email use the reference so we could add it to our :ref:`chap_whoisusingit` page. Peer-reviewed publications -------------------------- **Hanke, M., Halchenko, Y. O., Sederberg, P. B., Hanson, S. J., Haxby, J. V. & Pollmann, S.** (2009). `PyMVPA: A Python toolbox for multivariate pattern analysis of fMRI data`_. Neuroinformatics, 7, 37-53. First paper introducing fMRI data analysis with PyMVPA. .. _PyMVPA\: A Python toolbox for multivariate pattern analysis of fMRI data: http://dx.doi.org/10.1007/s12021-008-9041-y **Hanke, M., Halchenko, Y. O., Sederberg, P. B., Olivetti, E., Fründ, I., Rieger, J. W., Herrmann, C. S., Haxby, J. V., Hanson, S. J. and Pollmann, S.** (2009) `PyMVPA\: a unifying approach to the analysis of neuroscientific data`_. Frontiers in Neuroinformatics, 3:3. Demonstration of PyMVPA capabilities concerning multi-modal or modality-agnostic data analysis. .. _PyMVPA\: a unifying approach to the analysis of neuroscientific data: http://dx.doi.org/10.3389/neuro.11.003.2009 **Hanke, M., Halchenko, Y. O., Haxby, J. V., and Pollmann, S.** (2010) `Statistical learning analysis in neuroscience: aiming for transparency `_. Frontiers in Neuroscience. 4,1: 38-43 Focused review article emphasizing the role of transparency to facilitate adoption and evaluation of statistical learning techniques in neuroimaging research. **Haxby, J. V., Guntupalli, J. S., Connolly, A. C., Halchenko, Y. O., Conroy, B. R., Gobbini, M. I., Hanke, M. & Ramadge, P. J.** (2011). `A Common, High-Dimensional Model of the Representational Space in Human Ventral Temporal Cortex `_. *Neuron*, *72*, 404–416 The :class:`~mvpa2.algorithms.hyperalignment.Hyperalignment` paper demonstrating its application to fMRI data in rich perceptual (movie) and categorization (monkey-dog) experiments. .. `Data ` used for the analyses in .. the paper and `PyMVPA analysis script `__ .. are available Posters ------- **Hanke, M., Halchenko, Y. O., Sederberg, P. B., Hanson, S. J., Haxby, J. V. & Pollmann, S.** (2008). `PyMVPA: A Python toolbox for machine-learning based data analysis.`_ Poster emphasizing PyMVPA's capabilities concerning multi-modal data analysis at the annual meeting of the Society for Neuroscience, Washington, 2008. **Hanke, M., Halchenko, Y. O., Sederberg, P. B., Hanson, S. J., Haxby, J. V. & Pollmann, S.** (2008). `PyMVPA: A Python toolbox for classifier-based data analysis.`_ First presentation of PyMVPA at the conference *Psychologie und Gehirn* [Psychology and Brain], Magdeburg_, 2008. This poster received the poster prize of the *German Society for Psychophysiology and its Application*. .. _PyMVPA\: A Python toolbox for classifier-based data analysis.: http://www.pymvpa.org/files/PyMVPA_PuG2008.pdf .. _PyMVPA\: A Python toolbox for machine-learning based data analysis.: http://www.pymvpa.org/files/PyMVPA_SfN2008.pdf .. _Magdeburg: http://www.magdeburg.de/ pymvpa2-2.2.0/doc/source/index.rst000066400000000000000000000130341202542755000170220ustar00rootroot00000000000000.. -*- mode: rst -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: PyMVPA is a Python_ package intended to ease statistical learning analyses of large datasets. It offers an extensible framework with a high-level interface to a broad range of algorithms for classification, regression, feature selection, data import and export. While it is not limited to the neuroimaging domain, it is eminently suited for such datasets. PyMVPA is truly free software (in every respect) and additionally requires nothing but free-software to run. PyMVPA stands for **M**\ ulti\ **V**\ ariate **P**\ attern **A**\ nalysis (:term:`MVPA`) in **Py**\ thon. .. _Python: http://www.python.org .. raw:: html
    Download Tutorial Documentation Support
    Download Tutorial Documentation Support
    News ==== .. raw:: html Contributing ============ We welcome all kinds of contributions, and you do **not need to be a programmer** to contribute! If you have some feature in mind that is missing, some example use case that you want to share, you spotted a typo in the documentation, or you have an idea how to improve the user experience all together -- do not hesitate and :ref:`contact us `. We will then figure out how your contribution can be best incorporated. Any contributor will be acknowledged and will appear in the list of people who have helped to develop PyMVPA on the front-page of the `pymvpa.org `_. License ======= PyMVPA is free-software (beer and speech) and covered by the `MIT License`_. This applies to all source code, documentation, examples and snippets inside the source distribution (including this website). Please see the :ref:`appendix of the manual ` for the copyright statement and the full text of the license. .. _MIT License: http://www.opensource.org/licenses/mit-license.php .. _appendix of the manual: manual.html#license How to cite PyMVPA ================== .. include:: howtocite.txt .. contributors.txt also would include link_names.txt .. include:: contributors.txt Similar or Related Projects =========================== .. in alphanumerical order There are a number other projects with -- in comparison to PyMVPA -- partially overlapping features or a similar purpose. Some of their functionality is already available through and within the PyMVPA framework. *Only* free software projects are listed here. * 3dsvm_: AFNI_ plugin to apply support vector machine classifiers to fMRI data. * Elefant_: Efficient Learning, Large-scale Inference, and Optimization Toolkit. Multi-purpose open source library for machine learning. * MDP_: Python data processing framework. MDP_ provides various algorithms. *PyMVPA makes use of MDP's PCA and ICA implementations.* * `MVPA Toolbox`_: Matlab-based toolbox to facilitate multi-voxel pattern analysis of fMRI neuroimaging data. * NiPy_: Project with growing functionality to analyze brain imaging data. NiPy_ is heavily connected to SciPy and lots of functionality developed within NiPy becomes part of SciPy. * OpenMEEG_: Software package for low-frequency bio-electromagnetism solving forward problems in the field of EEG and MEG. OpenMEEG includes Python bindings. * Orange_: Powerful general-purpose data mining software. Orange also has Python bindings. * PROBID_: Matlab-based GUI pattern recognition toolbox for MRI data. * `PyMGH/PyFSIO`_: Python IO library to for FreeSurfer's `.mgh` data format. * PyML_: Interactive object oriented framework for machine learning written in Python. PyML focuses on SVMs and other kernel methods. * PyNIfTI_: Read and write NIfTI images from within Python. *PyMVPA uses PyNIfTI to access MRI datasets.* * `scikit-learn`_: Python module integrating classic machine learning algorithms in the tightly-knit world of scientific Python packages. * Shogun_: Comprehensive machine learning toolbox with bindings to various programming languages. *PyMVPA can optionally use implementations of Support Vector Machines from Shogun.* .. toctree:: :hidden: manual mvpa_guidelines release_notes_0.5 release_notes_0.6 workshops/2009-fall pymvpa2-2.2.0/doc/source/installation.rst000066400000000000000000000641301202542755000204170ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_installation: ************ Installation ************ This section covers the necessary steps to install and run PyMVPA. It contains a comprehensive list of software dependencies, as well as recommendation for additional software packages that further enhance the functionality provided by PyMVPA. .. _requirements: Dependencies ============ PyMVPA is designed to be able to easily interface with various libraries and computing environments. However, most of these external software packages only enhance functionality built into PyMVPA or add a different flavor of some algorithm (e.g. yet another classifier). In fact, the framework itself has only two mandatory dependencies (see below), which are known to be very portable. It is therefore possible to run PyMVPA on a wide variety of platforms and operating systems, ranging from computing mainframes, to regular desktop machines. It even runs on a cell phone. .. image:: pics/pymvpa_on_phone.jpg :alt: Picture showing PyMVPA running on an OpenMoko This picture shows PyMVPA on an OpenMoko_ cell phone --- running the `pylab_2d.py` example in an IPython_ session. .. note:: In general a phone might not be the optimal environment for data analysis with PyMVPA, but PyMVPA itself does not restrict the user's choice of the platform to the usual suspects. (A `highres image`_ is available, if you want to double check. ;-) .. _OpenMoko: http://www.openmoko.com .. _highres image: http://www.onerussian.com/php/album.php?page=Photos/Geek/20081015FR/&image=img_1107.jpg .. index:: required software, NumPy Must Have --------- The following software packages are required or PyMVPA will not work at all. Python_ 2.4 with ctypes_ 1.0.1 or a later Python 2.X release Python 2.6 is preferable release since that is the version we use for PyMVPA development. Python 3.X is not yet supported. NumPy_ PyMVPA makes extensive use of NumPy to store and handle data. There is no way around it. .. _Python: http://www.python.org .. _NumPy: http://numpy.scipy.org/ .. _ctypes: http://python.net/crew/theller/ctypes/ .. index:: recommended software, SciPy, NiBabel, Shogun, R, RPy Strong Recommendations ---------------------- While most parts of PyMVPA will work without any additional software, some functionality makes use (or can optionally make use) of external software packages. It is strongly recommended to install these packages as well, if they are available on a particular target platform. SciPy_: linear algebra, standard distributions, signal processing, data IO SciPy_ is mainly used by the statistical testing and the logistic regression classifier code. However, the SciPy package provides a lot of functionality that might be relevant in the context of PyMVPA, e.g. IO support for Matlab .mat files. NiBabel_: access to NIfTI files PyMVPA provides a convenient wrapper for datasets stored in the NIfTI format, that internally uses NiBabel. If you don't need that, NiBabel is not necessary, but otherwise it makes it really easy to read from and write to NIfTI images. All dataset types dealing with NIfTI data will not be available without a functional NiBabel installation. .. _SciPy: http://www.scipy.org/ .. _NiBabel: http://nipy.sourceforge.net/nibabel/ .. index:: suggested software, IPython, FSL, AFNI, LIBSVM, matplotlib, hlcuster Suggestions ----------- The following list of software is again not required by PyMVPA, but these packages add additional functionality (e.g. classifiers implemented in external libraries) and might make life a lot easier by leading to more efficiency when using PyMVPA. IPython_: frontend If you want to use PyMVPA interactively it is strongly recommend to use IPython_. If you think: *"Oh no, not another one, I already have to learn about PyMVPA."* please invest a tiny bit of time to watch the `Five Minutes with IPython`_ screencasts at showmedo.com_, so at least you know what you are missing. In the context of cluster computing IPython_ is also the way to go. FSL_: preprocessing and analysis of (f)MRI data PyMVPA provides some simple bindings to FSL output and filetypes (e.g. EV files, estimated motion correct parameters and MELODIC output directories). This makes it fairly easy to e.g. use FSL's implementation of ICA for data reduction and proceed with analyzing the estimated ICs in PyMVPA. AFNI_: preprocessing and analysis of (f)MRI data Similar to FSL, AFNI is a free package for processing (f)MRI data. Though its primary data file format is BRIK files, it has the ability to read and write NIFTI files, which easily integrate with PyMVPA. Shogun_: various classifiers PyMVPA currently can make use of several SVM implementations of the Shogun_ toolbox. It requires the modular python interface of Shogun to be installed. Any version from 0.6 on should work. LIBSVM_: fast SVM classifier Only the C library is required and none of the Python bindings that are available on the upstream website. PyMVPA provides its own Python wrapper for LIBSVM which is a fork based on the one included in the LIBSVM package. Additionally the upstream LIBSVM distribution causes flooding of the console with a huge amount of debugging messages. Please see the `Building from Source`_ section for information on how to build an alternative version that does not have this problem. Since version 0.2.2, PyMVPA contains a minimal copy of LIBSVM in its source distribution. R_ and RPy_: more classifiers Currently PyMVPA provides wrappers around LARS, ElasticNet, and GLMNet R libraries available from CRAN_. On Debian-based machines you might like to install r-cran-* packages from cran2deb_ repository. matplotlib_: Matlab-style plotting library for Python This is a very powerful plotting library that allows you to export into a large variety of raster and vector formats (e.g. SVG), and thus, is ideal to produce publication quality figures. The examples shipped with PyMVPA show a number of possibilities how to use matplotlib for data visualization. .. _Shogun: http://www.shogun-toolbox.org .. _LIBSVM: http://www.csie.ntu.edu.tw/~cjlin/libsvm/ .. _matplotlib: http://matplotlib.sourceforge.net/ .. _IPython: http://ipython.scipy.org .. _Five Minutes with IPython: http://showmedo.com/videos/series?name=CnluURUTV .. _showmedo.com: http://showmedo.com .. _FSL: http://www.fmrib.ox.ac.uk/fsl/ .. _AFNI: http://afni.nimh.nih.gov/afni/ .. _RPy: http://rpy.sourceforge.net .. _R: http://www.r-project.org .. _cran2deb: http://debian.cran.r-project.org .. _CRAN: http://cran.r-project.org .. index:: installation, binary packages .. _obtaining: Installing Binary Packages ========================== .. Don't forget to mention that the only reasonable way to use this piece of software (like every other piece) is under Debian! Also mention that Ubuntu is no excuse ;-) The easiest way to obtain PyMVPA is to use pre-built binary packages. Currently we provide such packages or installers for the Debian/Ubuntu family (see below). If there are no binary packages for your operating system or platform yet, you can build PyMVPA from source. Please refer to `Building from Source`_ for more information. .. note:: If you have difficulties deploying PyMVPA itself or third-party modules, such as Shogun, on non Debian-based systems, we would advise you to give a try to `NeuroDebian virtual machine`_ which would allow you to benefit from Debian packaging of PyMVPA and its dependencies by running Debian in a virtualized environment. .. _NeuroDebian virtual machine: http://neuro.debian.net/vm.html .. index:: binary packages .. index:: Debian .. _install_debian: Debian ------ PyMVPA is available as an `official Debian package`_ (``python-mvpa2`` or ``python-mvpa`` for the previous stable release). The documentation is provided by the optional `python-mvpa2-doc` package. To install PyMVPA simply do:: sudo aptitude install python-mvpa2 .. _official Debian package: http://packages.debian.org/python-mvpa2 .. index:: backports, Debian, Ubuntu .. _install_debianbackports: Debian backports and inofficial Ubuntu packages ----------------------------------------------- Backports for the current Debian stable release and binary packages for recent Ubuntu releases are available from a `NeuroDebian Repository`_. Please read the `package repository instructions`_ to learn about how to obtain them. Otherwise install as you would do with any other Debian package. .. _NeuroDebian Repository: http://neuro.debian.net .. _package repository instructions: http://neuro.debian.net/#how-to-use-this-repository .. index:: Windows, Windows installer .. _install_win: Windows ------- There are a few Python distributions for Windows. In theory all of them should work equally well. However, we only tested the standard Python distribution from www.python.org (with version 2.5.2). First you need to download and install Python. Use the Python installer for this job. Yo do not need to install the Python test suite and utility scripts. From now on we will assume that Python was installed in `C:\\Python25` and that this directory has been added to the `PATH` environment variable. For a minimal installation of PyMVPA the only thing you need in addition is NumPy_. Download a matching NumPy windows installer for your Python version (in this case 2.5) from the `SciPy download page`_ and install it. Now, you can use the PyMVPA windows installer to install PyMVPA on your system. If done, verify that everything went fine by opening a command prompt and start Python by typing `python` and hit enter. Now you should see the Python prompt. Import the mvpa module, which should cause no error messages. >>> import mvpa2 >>> Although you have a working installation already, most likely you want to install some additional software. First and foremost install SciPy_ -- download from the same page where you also got the NumPy installer. If you want to use PyMVPA to analyze fMRI datasets, you probably also want to install NiBabel_. Download the corresponding installer from the website of the and install it. Verify that it works by importing the `nibabel` module in Python. >>> import nibabel >>> Another piece of software you might want to install is matplotlib_. The project website offers a binary installer for Windows. If you are using the standard Python distribution and matplotlib complains about a missing `msvcp71.dll`, be sure to obey the installation instructions for Windows on the matplotlib website. With this set of packages you should be able to run most of the PyMVPA examples which are shipped with the source code in the `doc/examples` directory. .. _SciPy download page: http://scipy.org/Download .. _GnuWin32 project: http://gnuwin32.sourceforge.net/ .. index:: MacOS X .. _install_macos: MacOS X ------- The easiest installation method for OSX is via MacPorts_. MacPorts is a package management system for MacOS, which is in some respects very similiar to RPM or APT which are used in most GNU/Linux distributions. However, rather than installing binary packages, it compiles software from source on the target machine. *The MacPort of PyMVPA is kindly maintained by James Kyle .* .. note:: MacPorts_ needs `XCode developer tools`_ to be installed first, as the operating system does not come with a compiler by default. .. _XCode developer tools: http://developer.apple.com/tools/xcode/ .. _MacPorts: http://www.macports.org In the context of PyMVPA MacPorts is much easier to handle than the previously available PyMVPA installer for Macs (which was discontinued with PyMVPA 0.4.1). Although the initial overhead to setup MacPorts on a machine is higher than simply installing PyMVPA using the former installer, MacPorts saves the user a significant amount of time (in the long run). This is due to the fact that this framework will not only take care of updating a PyMVPA installation automatically whenever a new release is available. It will also provide many of the optional dependencies of PyMVPA (e.g. NumPy_, SciPy_, matplotlib_, IPython_, Shogun_, and pywt_) in the same environment and therefore abolishes the need to manually check dozens of websites for updates and deal with an unbelievable number of different installation methods. .. _Shogun: http://www.shogun-toolbox.org .. _pywt: http://www.pybytes.com/pywavelets MacPorts provides a universal binary package installer that is downloadable at http://www.macports.org/install.php After downloading, simply mount the dmg image and double click `MacPorts.pkg`. By default, MacPorts installs to `/opt/local`. After the installation is completed, you must ensure that your paths are set up correctly in order to access the programs and utilities installed by MacPorts. For exhaustive details on editing shell paths please see: http://www.debian.org/doc/manuals/reference/ch01.en.html#_customizing_bash A typical `.bash_profile` set up for MacPorts might look like:: > export PATH=/opt/local/bin:/opt/local/sbin:$PATH Be sure to source your .bash_profile or close Terminal.app and reopen it for these changes to take effect. Once MacPorts is installed and your environment is properly configured, PyMVPA is installed using a single command:: > $ sudo port install py25-pymvpa +scipy +nibabel +hcluster +libsvm > +matplotlib +pywavelet The `+foo` arguments add support within PyMVPA for these packages. For a full list of available 3rd party packages please see:: > $ port variants py25-pymvpa If this is your first time using MacPorts Python 2.5 will be automatically installed for you. However, an additional step is needed:: $ sudo port install python_select $ sudo python_select python25 MacPorts has the ability of installing several Python versions at a time, the `python_select` utility ensures that the default Python (located at `/opt/local/bin/python`) points to your preferred version. Upon success, open a terminal window and start Python by typing `python` and hit return. Now try to import the PyMVPA module by doing: >>> import mvpa2 >>> If no error messages appear, you have succesfully installed PyMVPA. .. index:: OpenSUSE .. _install_rpm: .. RPM-based GNU/Linux Distributions --------------------------------- To install one of the RPM packages provided through the `OpenSUSE Build Service`_, first download it from the `OpenSUSE software website`_. .. note:: This site does not only offer OpenSUSE packages, but also binaries for other distributions, including: CentOS 5, Fedora 9-12, RedHat Enterprise Linux 5, OpenSUSE 11.0 up to 11.2. Once downloaded, open a console and invoke (the example command refers to PyMVPA 0.4.4):: rpm -i python-mvpa-0.4.4-1.1.i386.rpm The OpenSUSE website also offers `1-click-installations`_ for distributions supporting it. A more convenient way to install PyMVPA and automatically receive software updates is to included one of the RPM-package repositories in the system's package management configuration. For e.g. OpenSUSE 11.0, simply use Yast to add another repository, using the following URL: http://download.opensuse.org/repositories/home:/hankem:/suse/openSUSE_11.0/ For other distributions use the respective package managers (e.g. Yum) to setup the repository URL. The repositories include all core dependencies of PyMVPA (usually Numpy and PyNIfTI), if they are not available from other repositories of the respective distribution. There are two different repository groups, one for `SUSE-related packages`_ and another one for `Fedora, Redhat and CentOS-related packages`_. Please note that on Redhat and CentOS systems you will also have to enable the `Extra Packages for Enterprise Linux (EPEL)`_ repository. .. _Extra Packages for Enterprise Linux (EPEL): http://fedoraproject.org/wiki/EPEL .. _SUSE-related packages: http://download.opensuse.org/repositories/home:/hankem:/suse/ .. _Fedora, Redhat and CentOS-related packages: http://download.opensuse.org/repositories/home://hankem://rh5/ .. _1-click-installations: http://software.opensuse.org/search?baseproject=ALL&p=1&q=python-mvpa .. _OpenSUSE software website: http://software.opensuse.org/search?baseproject=ALL&p=1&q=python-mvpa .. _OpenSUSE Build Service: https://build.opensuse.org/ .. _buildfromsource: .. index:: building from source, source package, MacOS X Building from Source ==================== If a binary package for your platform and operating system is provided, you do not have to build the packages on your own -- use the corresponding pre-build packages instead. However, if there are no binary packages for your system, or you want to try a new (unreleased) version of PyMVPA, you can easily build PyMVPA on your own. Any recent GNU/Linux distribution should be capable of doing it (e.g. RedHat). Additionally, building PyMVPA also works on Mac OS X and Windows systems. .. _PyMVPA project website: http://www.pymvpa.org .. index:: releases, development snapshot Three Ways to Obtain the Sources -------------------------------- The first step is obtaining the sources. The source code tarballs of all PyMVPA releases are available from the `PyMVPA project website`_. Alternatively, one can also download a tarball of the latest development snapshot_ (i.e. the current state of the *master* branch of the PyMVPA source code repository). .. _snapshot: http://github.com/PyMVPA/PyMVPA/archives/master .. index:: Git, Git repository If you want to have access to both, the full PyMVPA history and the latest development code, you can use the PyMVPA Git_ repository, which is publicly available. To view the repository, please point your web browser to gitweb: http://github.com/PyMVPA/PyMVPA The gitweb browser also allows to download arbitrary development snapshots of PyMVPA. For a full clone (aka checkout) of the PyMVPA repository simply do: :command:`git clone git://github.com/PyMVPA/PyMVPA.git` After a short while you will have a `PyMVPA` directory below your current working directory, that contains the PyMVPA repository. .. _Git: http://git.or.cz/ .. index:: build instructions Build it (General instructions) ------------------------------- In general you can build PyMVPA like any other Python module (using the Python *distutils*). This general method will be outline first. However, in some situations or on some platforms alternative ways of building PyMVPA might be more convenient -- alternative approaches are listed at the end of this section. To build PyMVPA from source simply enter the root of the source tree (obtained by either extracting the source package or cloning the repository) and run: :command:`python setup.py build_ext` If you are using a Python version older than 2.5, you need to have python-ctypes (>= 1.0.1) installed to be able to do this. Now, you are ready to install the package. Do this by invoking: :command:`python setup.py install` Most likely you need superuser privileges for this step. If you want to install in a non-standard location, please take a look at the :command:`--prefix` option. You also might want to consider :command:`--optimize`. Now you should be ready to use PyMVPA on your system. .. index:: LIBSVM, SWIG Build with enabled LIBSVM bindings ---------------------------------- From the 0.2 release of PyMVPA on, the LIBSVM_ classifier extension is not build by default anymore. However, it is still shipped with PyMVPA and can be enabled at build time. To be able to do this you need to have SWIG_ installed on your system. If you do not have a proper LIBSVM_ package, you can build the library from the copy of the code that is shipped with PyMVPA. To do this, simply invoke:: make 3rd Now build PyMVPA as described above. The build script will automatically detect that LIBSVM_ is available and builds the LIBSVM wrapper module for you. If your system provides an appropriate LIBSVM_ version, you need to have the development files (headers and library) installed. Depending on where you installed them, it might be necessary to specify the full path to that location with the `--include-dirs`, `--library-dirs` and `--swig` options. Now add the '--with-libsvm' flag when building PyMVPA:: python setup.py build_ext --with-libsvm \ [ -I -L ] The installation procedure is equivalent to the build setup without LIBSVM_, except that the '--with--libsvm' flag also has to be set when installing:: python setup.py install --with-libsvm .. _SWIG: http://www.swig.org/ .. index:: alternative build procedure Alternative build procedure --------------------------- Alternatively, if you are doing development in PyMVPA or if you simply do not want (or do not have sufficient permissions to do so) to install PyMVPA system wide, you can simply call `make` (same `make build`) in the top-level directory of the source tree to build PyMVPA. Then extend or define your environment variable `PYTHONPATH` to point to the root of PyMVPA sources (i.e. where you invoked all previous commands from): export PYTHONPATH=$PWD .. note:: This procedure also always builds the LIBSVM_ extension and therefore also requires LIBSVM and SWIG to be available. .. index:: building on Windows .. _build_win: Windows ------- On Windows the whole situation is a little more tricky, as the system doesn't come with a compiler by default. Nevertheless, it is possible to build PyMVPA from source. One could use the Microsoft compiler that comes with Visual Studio to do it, but as this is commercial software and not everybody has access to it, we will outline a way that exclusively involves free and open source software. First one needs to install the packages required to run PyMVPA as explained :ref:`above `. Next we need to obtain and install the MinGW compiler collection. Download the *Automated MinGW Installer* from the `MinGW project website`_. Now, run it and choose to install the `current` package. You will need the *MinGW base tools*, *g++* compiler and *MinGW Make*. For the remaining parts of the section, we will assume that MinGW got installed in `C:\\MinGW` and the directory `C:\\MinGW\\bin` has been added to the `PATH` environment variable, to be able to easily access all MinGW tools. .. note:: It is not necessary to install `MSYS`_ to build PyMVPA, but it might handy to have it. If you want to build the LIBSVM wrapper for PyMVPA, you also need to download SWIG_ (actually *swigwin*, the distribution for Windows). SWIG does not have to be installed, just unzip the file you downloaded and add the root directory of the extracted sources to the `PATH` environment variable (make sure that this directory contains `swig.exe`, if not, you haven't downloaded `swigwin`). PyMVPA comes with a specific build setup configuration for Windows -- `setup.cfg.win` in the root of the source tarball. Please rename this file to `setup.cfg`. This is only necessary, if you have *not* configured your Python distutils installation to always use MinGW instead of the Microsoft compilers. Now, we are ready to build PyMVPA. The easiest way to do this, is to make use of the `Makefile.win` that is shipped with PyMVPA to build a binary installer package (`.exe`). Make sure, that the settings at the top of `Makefile.win` (the file is located in the root directory of the source distribution) correspond to your Python installation -- if not, first adjust them accordingly before your proceed. When everything is set, do:: mingw32-make -f Makefile.win installer Upon success you can find the installer in the `dist` subdirectory. Install it as described :ref:`above `. .. _MinGW project website: http://www.mingw.org/ .. _MSYS: http://www.mingw.org/msys.shtml .. index:: OpenSUSE .. _build_suse: OpenSUSE -------- Building PyMVPA on OpenSUSE involves the following steps (tested with 10.3): First add the OpenSUSE science repository, that contains most of the required packages (e.g. NumPy, SciPy, matplotlib), to the Yast configuration. The URL for OpenSUSE 10.3 is:: http://download.opensuse.org/repositories/science/openSUSE_10.3/ Now, install the following required packages: * a recent C and C++ compiler (e.g. GCC 4.1) * `python-devel` (Python development package) * `python-numpy` (NumPy) * `swig` (SWIG is only necessary, if you want to make use of LIBSVM) Now you can simply compile and install PyMVPA, as outlined above, in the general build instructions (or alternatively using the method with LIBSVM). If you want to run the PyMVPA examples including the ones that make use of the plotting capabilities of `matplotlib` you need to install of few more packages (mostly due to broken dependencies in the corresponding OpenSUSE packages): * `python-scipy` * `python-gobject2` * `python-gtk` .. index:: Fedora .. _build_fedora: Fedora ------ On Fedora (tested with Fedora 9) you first have to install a few required packages, that are not installed by default. Simply do:: yum install numpy gcc gcc-c++ python-devel swig You might also want to consider installing some more packages, that will make your life significantly easier:: yum install scipy ipython python-matplotlib Now, you are ready to compile and install PyMVPA as describe in the :ref:`general build instructions `. .. index:: MacOS X .. _build_macos: MacOS X ------- Since the MacPorts_ system basically compiles from source there should be no need to perform this step manually. However, if one intends to compile without MacPorts_ the `XCode developer tools`_, have to be installed first, as the operating system does not come with a compiler by default. If you want to use or even work on the latest development code, you should also install Git_. There is a `MacOS installer for Git`_, that make this step very easy. .. _MacOS installer for Git: http://code.google.com/p/git-osx-installer/ Otherwise follow the :ref:`general build instructions `. pymvpa2-2.2.0/doc/source/intro.rst000066400000000000000000000170451202542755000170540ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_intro: ************ Introduction ************ .. index:: MVPA PyMVPA is a Python_ module intended to ease pattern classification analysis of large datasets. It provides high-level abstraction of typical processing steps and a number of implementations of some popular algorithms. While it is not limited to neuroimaging data it is eminently suited for such datasets. PyMVPA is truly free software (in every respect) and additionally requires nothing but free software to run. Theoretically PyMVPA should run on anything that can run a Python_ interpreter, although the proof is yet to come. PyMVPA stands for *Multivariate Pattern Analysis* in Python_. What this Manual is NOT ======================= .. index:: textbook, review, API reference, examples This manual does not make an attempt to be a comprehensive introduction into machine learning *theory*. There is a wealth of high-quality text books about this field available. Two very good examples are: `Pattern Recognition and Machine Learning`_ by `Christopher M. Bishop`_, and :ref:`The Elements of Statistical Learning: Data Mining, Inference, and Prediction ` by `Trevor Hastie`_, `Robert Tibshirani`_, and `Jerome Friedman`_ (PDF was generously made available online_ free of charge). There is a growing number of introductory papers about the application of machine learning algorithms to (f)MRI data. A very high-level overview about the basic principles is available in :ref:`Mur et al. (2009) `. A more detailed tutorial covering a wide variety of aspects is provided in :ref:`Pereira et al. (2009) `. Two reviews by :ref:`Norman et al. (2006) ` and :ref:`Haynes and Rees (2006) ` give a broad overview about the literature. This manual also does not describe every technical bit and piece of the PyMVPA package, but is instead focused on the user perspective. Developers should have a look at the `API documentation`_, which is a detailed, comprehensive and up-to-date description of the whole package. Users looking for an overview of the public programming interface of the framework are referred to the :ref:`chap_modref`. The :ref:`chap_modref` is similar to the API reference, but hides overly technical information, which are only relevant for people intending to extend the framework by adding more functionality. More examples and usage patterns extending the ones described here can be taken from the examples shipped with the PyMVPA source distribution (`doc/examples/`; some of them are also available in the :ref:`chap_examples` chapter of this manual) or even the unit test battery, also part of the source distribution (in the `tests/` directory). .. _API Documentation: api/index.html .. _Christopher M. Bishop: http://research.microsoft.com/~cmbishop/ .. _Pattern Recognition and Machine Learning: http://research.microsoft.com/~cmbishop/PRML .. _online: .. _The Elements of Statistical Learning\: Data Mining, Inference, and Prediction: http://www-stat.stanford.edu/~tibs/ElemStatLearn/ .. _Trevor Hastie: http://www-stat.stanford.edu/~hastie/ .. _Robert Tibshirani: http://www-stat.stanford.edu/~tibs/ .. _Jerome Friedman: http://www-stat.stanford.edu/~jhf/ .. _history: .. index:: history, MVPA toolbox for Matlab, license, free software A bit of History ================ The roots of PyMVPA date back to early 2005. At that time it was a C++ library (no Python_ yet) developed by Michael Hanke and Sebastian Krüger, intended to make it easy to apply artificial neural networks to pattern recognition problems. During a visit to `Princeton University`_ in spring 2005, Michael Hanke was introduced to the `MVPA toolbox`_ for `Matlab `_, which had several advantages over a C++ library. Most importantly it was easier to use. While a user of a C++ library is forced to write a significant amount of front-end code, users of the MVPA toolbox could simply load their data and start analyzing it, providing a common interface to functions drawn from a variety of libraries. .. _Princeton University: http://www.princeton.edu .. _MVPA toolbox: http://www.csbmb.princeton.edu/mvpa/ However, there are some disadvantages when writing a toolbox in Matlab. While users in general benefit from the powers of Matlab, they are at the same time bound to the goodwill of a commercial company. That this is indeed a problem becomes obvious when one considers the time when the vendor of Matlab was not willing to support the Mac platform. Therefore even if the MVPA toolbox is `GPL-licensed`_ it cannot fully benefit from the enormous advantages of the free software development model environment (free as in free speech, not only free beer). .. _GPL-licensed: http://www.gnu.org/copyleft/gpl.html For these reasons, Michael thought that a successor to the C++ library should remain truly free software, remain fully object-oriented (in contrast to the MVPA toolbox), but should be at least as easy to use and extensible as the MVPA toolbox. After evaluating some possibilities Michael decided that `Python`_ is the most promising candidate that was fully capable of fulfilling the intended development goal. Python is a very powerful language that magically combines the possibility to write really fast code and a simplicity that allows one to learn the basic concepts within a few days. .. index:: RPy, PyMatlab One of the major advantages of Python is the availability of a huge amount of so called *modules*. Modules can include extensions written in a hardcore language like C (or even FORTRAN) and therefore allow one to incorporate high-performance code without having to leave the Python environment. Additionally some Python modules even provide links to other toolkits. For example `RPy`_ allows to use the full functionality of R_ from inside Python. Even Matlab can be used via some Python modules (see PyMatlab_ for an example). .. _RPy: http://rpy.sourceforge.net/ .. _R: http://www.r-project.org .. _PyMatlab: http://code.google.com/p/pymatlab/ After the decision for Python was made, Michael started development with a simple k-Nearest-Neighbor classifier and a cross-validation class. Using the mighty NumPy_ package made it easy to support data of any dimensionality. Therefore PyMVPA can easily be used with 4d fMRI dataset, but equally well with EEG/MEG data (3d) or even non-neuroimaging datasets. .. index:: NIfTI By September 2007 PyMVPA included support for reading and writing datasets from and to the `NIfTI format`_, kNN and Support Vector Machine classifiers, as well as several analysis algorithms (e.g. searchlight and incremental feature search). .. _NIfTI format: http://nifti.nimh.nih.gov/ During another visit in Princeton in October 2007 Michael met with `Yaroslav Halchenko`_ and `Per B. Sederberg`_. That incident and the following discussions and hacking sessions of Michael and Yaroslav lead to a major refactoring of the PyMVPA codebase, making it much more flexible/extensible, faster and easier than it has ever been before. .. _Yaroslav Halchenko: http://www.onerussian.com/ .. _Per B. Sederberg: http://www.princeton.edu/~persed/ .. index:: citation, PyMVPA poster How to cite PyMVPA ================== .. include:: howtocite.txt .. include:: contributors.txt .. include:: link_names.txt pymvpa2-2.2.0/doc/source/legal.rst000077700000000000000000000000001202542755000204522../../COPYINGustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/link_names.txt000066400000000000000000000226311202542755000200450ustar00rootroot00000000000000.. This (-*- rst -*-) format file contains commonly used link targets and name substitutions. It may be included in many files, therefore it should only contain link targets and name substitutions. Try grepping for "^\.\. _" to find plausible candidates for this list. .. NOTE: reST targets are __not_case_sensitive__, so only one target definition is needed for nipy, NIPY, Nipy, etc... .. _nipy: http://neuroimaging.scipy.org .. _nipype: http://nipy.sourceforge.net/nipype .. _`Brain Imaging Center`: http://bic.berkeley.edu/ .. _dipy: http://nipy.sourceforge.net/dipy .. _`dipy github`: http://github.com/Garyfallidis/dipy .. _nibabel: http://nipy.sourceforge.net/nibabel .. _dipy: http://nipy.sourceforge.net/dipy .. _Neuron: http://www.neuron.yale.edu/neuron .. _XPPAUT: http://www.math.pitt.edu/~bard/xpp/xpp.html .. _Genesis: http://www.genesis-sim.org .. Documentation tools .. _graphviz: http://www.graphviz.org/ .. _Sphinx: http://sphinx.pocoo.org/ .. _`Sphinx reST`: http://sphinx.pocoo.org/rest.html .. _reST: http://docutils.sourceforge.net/rst.html .. _docutils: http://docutils.sourceforge.net .. Licenses .. _GPL: http://www.gnu.org/licenses/gpl.html .. _BSD: http://www.opensource.org/licenses/bsd-license.php .. _LGPL: http://www.gnu.org/copyleft/lesser.html .. Source control .. _git: http://git-scm.com/ .. _github: http://github.com .. _github help: http://help.github.com .. _msysgit: http://code.google.com/p/msysgit/downloads/list .. _git-osx-installer: http://code.google.com/p/git-osx-installer/downloads/list .. _bazaar: http://bazaar-vcs.org/ .. Other working process .. _pynifti: http://niftilib.sourceforge.net/pynifti/ .. _nifticlibs: http://nifti.nimh.nih.gov .. _nifti: http://nifti.nimh.nih.gov .. _`nipy launchpad`: https://launchpad.net/nipy .. _launchpad: https://launchpad.net/ .. _`nipy trunk`: https://code.launchpad.net/~nipy-developers/nipy/trunk .. _`nipy mailing list`: http://projects.scipy.org/mailman/listinfo/nipy-devel .. _`nipy bugs`: https://bugs.launchpad.net/nipy .. _pep8: http://www.python.org/dev/peps/pep-0008/ .. _`numpy coding style`: http://scipy.org/scipy/numpy/wiki/CodingStyleGuidelines .. Code support stuff .. _pychecker: http://pychecker.sourceforge.net/ .. _pylint: http://www.logilab.org/project/pylint .. _pyflakes: http://divmod.org/trac/wiki/DivmodPyflakes .. _virtualenv: http://pypi.python.org/pypi/virtualenv .. _flymake: http://flymake.sourceforge.net/ .. _rope: http://rope.sourceforge.net/ .. _pymacs: http://pymacs.progiciels-bpi.ca/pymacs.html .. _ropemacs: http://rope.sourceforge.net/ropemacs.html .. _ECB: http://ecb.sourceforge.net/ .. _emacs_python_mode: http://www.emacswiki.org/cgi-bin/wiki/PythonMode .. _doctest-mode: http://www.cis.upenn.edu/~edloper/projects/doctestmode/ .. _nose: http://somethingaboutorange.com/mrl/projects/nose .. _`python coverage tester`: http://nedbatchelder.com/code/modules/coverage.html .. _screen: http://www.gnu.org/software/screen/ .. _ccache: http://ccache.samba.org/ .. Other python projects .. _numpy: http://www.numpy.org .. _scipy: http://www.scipy.org .. _ipython: http://ipython.scipy.org .. _`ipython manual`: http://ipython.scipy.org/doc/manual/html .. _matplotlib: http://matplotlib.sourceforge.net .. _pythonxy: http://www.pythonxy.com .. _ETS: http://code.enthought.com/projects/tool-suite.php .. _`Enthought Tool Suite`: http://code.enthought.com/projects/tool-suite.php .. _python: http://www.python.org .. _mayavi: http://mayavi.sourceforge.net/ .. _sympy: http://code.google.com/p/sympy/ .. Python imaging projects .. _PyMVPA: http://www.pymvpa.org .. _BrainVISA: http://brainvisa.info .. _anatomist: http://brainvisa.info .. _pydicom: http://code.google.com/p/pydicom/ .. _PyMGH/PyFSIO: http://code.google.com/p/pyfsio .. _OpenMEEG: http://openmeeg.gforge.inria.fr .. _PROBID: http://www.brainmap.co.uk/probid.htm .. Not so python imaging projects .. _Caret: http://brainvis.wustl.edu/wiki/index.php/Caret:About .. _matlab: http://www.mathworks.com .. _spm: http://www.fil.ion.ucl.ac.uk/spm .. _spm8: http://www.fil.ion.ucl.ac.uk/spm/software/spm8 .. _eeglab: http://sccn.ucsd.edu/eeglab .. _AFNI: http://afni.nimh.nih.gov/afni .. _FSL: http://www.fmrib.ox.ac.uk/fsl .. _LIPSIA: http://www.cbs.mpg.de/institute/software/lipsia .. _FreeSurfer: http://surfer.nmr.mgh.harvard.edu .. _voxbo: http://www.voxbo.org .. _mricron: http://www.cabiatl.com/mricro/mricron .. _slicer: http://www.slicer.org/ .. _XNAT: http://xnat.org .. ML projects not mentioned above .. _3dsvm: http://afni.nimh.nih.gov/pub/dist/doc/program_help/3dsvm.html .. _Elefant: http://elefant.developer.nicta.com.au .. _LIBSVM: http://www.csie.ntu.edu.tw/~cjlin/libsvm .. _MDP: http://mdp-toolkit.sourceforge.net .. _Shogun: http://www.shogun-toolbox.org .. _Orange: http://magix.fri.uni-lj.si/orange .. _PyML: http://pyml.sourceforge.net .. _MVPA Toolbox: http://www.csbmb.princeton.edu/mvpa/ .. _scikit-learn: http://scikit-learn.org .. File formats .. _DICOM: http://medical.nema.org/ .. _`wikipedia DICOM`: http://en.wikipedia.org/wiki/Digital_Imaging_and_Communications_in_Medicine .. _GDCM: http://sourceforge.net/apps/mediawiki/gdcm .. _`DICOM specs`: ftp://medical.nema.org/medical/dicom/2009/ .. _`DICOM object definitions`: ftp://medical.nema.org/medical/dicom/2009/09_03pu3.pdf .. _dcm2nii: http://www.cabiatl.com/mricro/mricron/dcm2nii.html .. _`mricron install`: http://www.cabiatl.com/mricro/mricron/install.html .. _dicom2nrrd: http://www.slicer.org/slicerWiki/index.php/Modules:DicomToNRRD-3.4 .. _Nrrd: http://teem.sourceforge.net/nrrd/format.html .. General software .. _gcc: http://gcc.gnu.org .. _xcode: http://developer.apple.com/TOOLS/xcode .. _mingw: http://www.mingw.org .. _cygwin: http://cygwin.com .. _macports: http://www.macports.org/ .. _VTK: http://www.vtk.org/ .. _ITK: http://www.itk.org/ .. _swig: http://www.swig.org .. _NeuroDebian: http://neuro.debian.net .. _Debian: http://www.debian.org .. _`Debian project`: http://www.debian.org .. _Ubuntu: http://www.ubuntu.com .. _exppsy: http://alioth.debian.org/projects/pkg-exppsy .. _`Debian Med`: http://debian-med.alioth.debian.org .. _`Debian Science`: http://wiki.debian.org/DebianScience .. _Comedi: http://www.comedi.org .. _RTAI: https://www.rtai.org .. |RTAI| replace:: :abbr:`RTAI (Real Time Application Interface)` .. _Lin4Neuro: http://www.nemotos.net/lin4neuro .. _fail2ban: http://www.fail2ban.org .. Functional imaging labs .. _`functional imaging laboratory`: http://www.fil.ion.ucl.ac.uk .. _FMRIB: http://www.fmrib.ox.ac.uk .. Other organizations .. _enthought: .. _kitware: http://www.kitware.com .. _nitrc: http://www.nitrc.org .. General information links .. _`wikipedia FMRI`: http://en.wikipedia.org/wiki/Functional_magnetic_resonance_imaging .. _`wikipedia PET`: http://en.wikipedia.org/wiki/Positron_emission_tomography .. Mathematical methods .. _`wikipedia ICA`: http://en.wikipedia.org/wiki/Independent_component_analysis .. _`wikipedia PCA`: http://en.wikipedia.org/wiki/Principal_component_analysis .. Mathematical ideas .. _`wikipedia spherical coordinate system`: http://en.wikipedia.org/wiki/Spherical_coordinate_system .. _`mathworld spherical coordinate system`: http://mathworld.wolfram.com/SphericalCoordinates.html .. _`wikipedia affine`: http://en.wikipedia.org/wiki/Affine_transformation .. _`wikipedia linear transform`: http://en.wikipedia.org/wiki/Linear_transformation .. _`wikipedia rotation matrix`: http://en.wikipedia.org/wiki/Rotation_matrix .. _`wikipedia homogenous coordinates`: http://en.wikipedia.org/wiki/Homogeneous_coordinates .. _`wikipedia axis angle`: http://en.wikipedia.org/wiki/Axis_angle .. _`wikipedia Euler angles`: http://en.wikipedia.org/wiki/Euler_angles .. _`Mathworld Euler angles`: http://mathworld.wolfram.com/EulerAngles.html .. _`wikipedia quaternion`: http://en.wikipedia.org/wiki/Quaternion .. _`wikipedia shear matrix`: http://en.wikipedia.org/wiki/Shear_matrix .. _`wikipedia reflection`: http://en.wikipedia.org/wiki/Reflection_(mathematics) .. _`wikipedia direction cosine`: http://en.wikipedia.org/wiki/Direction_cosine .. Some common terms as links outside and abbreviations .. _FOSS: http://en.wikipedia.org/wiki/Free_and_Open_Source_Software .. |FOSS| replace:: :abbr:`FOSS (Free and Open Source Software)` .. _DFSG: http://www.debian.org/social_contract#guidelines .. |DFSG| replace:: :abbr:`DFSG (Debian Free Software Guidelines)` .. Homepages .. _yoh: http://www.onerussian.com .. _mih: http://mih.voxindeserto.de .. Debian specifics .. _ITP: http://www.debian.org/devel/wnpp .. _ITPs: http://www.debian.org/devel/wnpp .. |ITP| replace:: :abbr:`ITP (Intent to Package)` .. |RFP| replace:: :abbr:`RFP (Request for packaging)` .. |DBTS| replace:: :abbr:`DBTS (Debian Bug Tracking System)` .. mailing lists .. _neurodebian-users: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-users .. _neurodebian-devel: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-devel .. _neurodebian-upstream: http://lists.alioth.debian.org/mailman/listinfo/neurodebian-upstream .. task pages .. _neuroscience-electrophysiology: http://blends.alioth.debian.org/science/tasks/neuroscience-electrophysiology .. _task_bci: http://blends.alioth.debian.org/science/tasks/bci .. _task_dataacquisition: http://blends.alioth.debian.org/science/tasks/dataacquisition .. _task_psychophysics: http://blends.alioth.debian.org/science/tasks/psychophysics> .. more to sort out .. _NeuralEnsemble: http://www.neuralensemble.org .. _`repository mirror`: http://neuro.debian.net/mirrors-status.html pymvpa2-2.2.0/doc/source/manual.rst000066400000000000000000000003401202542755000171640ustar00rootroot00000000000000.. _manual: ****************** PyMVPA User Manual ****************** .. toctree:: :maxdepth: 2 intro installation support tutorial examples misc faq glossary changelog references legal pymvpa2-2.2.0/doc/source/mappers.txt000066400000000000000000000014371202542755000173750ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Mapper .. _chap_mappers: ******* Mappers ******* .. automodule:: mvpa2.mappers .. only:: html Related API documentation ========================= .. currentmodule:: mvpa2.mappers .. autosummary:: :toctree: generated base boxcar detrend flatten fx lle mdp_adaptor procrustean projection prototype som svd wavelet zscore pymvpa2-2.2.0/doc/source/measures.txt000066400000000000000000000216631202542755000175550ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: measure, sensitivity .. _chap_measures: ******** Measures ******** .. automodule:: mvpa2.measures .. only:: html Related API documentation ========================= .. currentmodule:: mvpa .. autosummary:: :toctree: generated measures.base measures.anova measures.corrcoef measures.corrstability measures.ds measures.irelief measures.noiseperturbation measures.searchlight measures.statsmodels_adaptor PyMVPA provides a number of useful measures. The vast majority of them are dedicated to feature selection. To increase analysis flexibility, PyMVPA distinguishes two parts of a feature selection procedure. First, the impact of each individual feature on a classification has to be determined. The resulting map reflects the sensitivities of all features with respect to a certain decision and, therefore, algorithms generating these maps are summarized as :class:`~mvpa2.measures.base.Sensitivity` in PyMVPA. .. index:: feature selection Second, once the feature sensitivities are known, they can be used as criteria for feature selection. However, possible selection strategies range from very simple *Go with the 10% best features* to more complicated algorithms like :ref:`recursive_feature_elimination`. Because :ref:`sensitivity_measures` and selections strategies can be arbitrarily combined, PyMVPA offers a quite flexible framework for feature selection. .. index:: processing object Similar to dataset splitters, all PyMVPA algorithms are implemented and behave like :term:`processing object`\ s. To recap, this means that they are instantiated by passing all relevant arguments to the constructor. Once created, they can be used multiple times by calling them with different datasets. .. Again general overview first. What is a `SensitivityAnalyzer`, what is the difference between a `FeatureSelection` and an `ElementSelector`. Finally more detailed note and references for each larger algorithm. .. index:: sensitivity .. _sensitivity_measures: Sensitivity Measures ==================== It was already mentioned that a :class:`~mvpa2.measures.base.Sensitivity` computes a featurewise score that indicates how much interesting signal each feature contains -- hoping that this score somehow correlates with the impact of the features on a classifier's decision for a certain problem. Every sensitivity analyzer object computes a one-dimensional array with the respective score for every feature, when called with a :class:`~mvpa2.datasets.base.Dataset`. Due to this common behavior all :class:`~mvpa2.measures.base.Sensitivity` types are interchangeable and can be combined with any other algorithm requiring a sensitivity analyzer. By convention higher sensitivity values indicate more interesting features. There are two types of sensitivity analyzers in PyMVPA. Basic sensitivity analyzers directly compute a score from a Dataset. Meta sensitivity analyzers on the other hand utilize another sensitivity analyzer to compute their sensitivity maps. Basic Sensitivity (and related Measures) ---------------------------------------- .. index:: anova, F-score, univariate, measure .. _anova: ANOVA ^^^^^ The :class:`~mvpa2.measures.anova.OneWayAnova` class provides a simple (and fast) univariate measure, that can be used for feature selection, although it is not a proper sensitivity measure. For each feature an individual F-score is computed as the fraction of between and within group variances. Groups are defined by samples with unique targets. Higher F-scores indicate higher sensitivities, as with all other sensitivity analyzers. .. index:: classifier weights, weights, SVM, measure Linear SVM Weights ^^^^^^^^^^^^^^^^^^ The featurewise weights of a trained support vector machine are another possible sensitivity measure. The :class:`mvpa2.clfs.libsvmc.sens.LinearSVMWeights` and :class:`mvpa2.clfs.sg.sens.LinearSVMWeights` classes can internally train all types of *linear* support vector machines and report those weights. In contrast to the F-scores computed by an ANOVA, the weights can be positive or negative, with both extremes indicating higher sensitivities. To deal with this property all subclasses of :class:`~mvpa2.measures.base.Measure` support a `mapper` arguments in the constructor. A mapper is just some :class:`~mvpa2.mappers.base.Mapper`, `forward_dataset()` method of which is called with the resultant sensitivity map as the argument. In most of the cases you would like just to apply some simple transformation function (taking absolution values etc) or a bit more advanced where you would like to combine some sensitivities (e.g. per class) into a single measure. For that purpose :class:`mvpa2.mappers.fx.FxMapper` was created and some convenience factory methods where provided for most common operations. So in the example below we will use `maxofabs_sample()` which will return a mapper giving maximal absolute value among multiple sensitivities (in our case it is just a single one for binary classification). >>> from mvpa2.suite import * >>> >>> ds = normal_feature_dataset() >>> print ds > >>> >>> clf = LinearCSVMC() >>> sensana = clf.get_sensitivity_analyzer() >>> sens = sensana(ds) >>> sens.shape (1, 4) >>> (sens.samples < 0).any() True >>> sensana_abs = clf.get_sensitivity_analyzer(postproc=absolute_features()) >>> (sensana_abs(ds).samples < 0).any() False Above example shows how to use an existing classifier instance to report sensitivity values (a linear SVM in this case). The computed sensitivity vector contains one element for each feature in the dataset. :mod:`~mvpa2.misc.transformers` can be used to post-process the sensitivity scores, e.g. reporting absolute values for feature selection purposes, instead of raw sensitivities. .. note:: The `SVMWeights` classes *cannot* extract reasonable weights from non-linear SVMs (e.g. with RBF kernels). Other linear Classifier Weights ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Any linear classifier in PyMVPA can report its weights. The procedure is identical for all of them. As outlined in the example using linear SVM weights, simply call :meth:`~mvpa2.clfs.base.Classifier.get_sensitivity_analyzer` on a classifier instance and you'll get an appropriate :class:`~mvpa2.measures.base.Sensitivity` object. Additionally, it is possible to force (re)training of the underlying classifier or simply report the weights computed during a previous training run. Examples of other classifier-based linear sensitivity analyzers are: :class:`~mvpa2.clfs.smlr.SMLRWeights` and :class:`~mvpa2.clfs.gpr.GPRLinearWeights`. .. index:: noise perturbation, measure .. _noise_perturbation: Noise Perturbation ^^^^^^^^^^^^^^^^^^ Noise perturbation is a generic approach to determine feature sensitivity. The sensitivity analyzer :class:`~mvpa2.measures.noiseperturbation.NoisePerturbationSensitivity`) computes a scalar :class:`~mvpa2.measures.base.Measure` using the original dataset. Afterwards, for each single feature a noise pattern is added to the respective feature and the dataset measure is recomputed. The sensitivity of each feature is the difference between the dataset measure of the original dataset and the one with added noise. The reasoning behind this algorithm is that adding noise to *important* features will impair a dataset measure like cross-validated classifier transfer error. However, adding noise to a feature that already only contains noise, will not change such a measure. Depending on the used scalar :class:`~mvpa2.measures.base.Measure` using the sensitivity analyzer might be really CPU-intensive! Also depending on the measure, it might be necessary to use appropriate :mod:`~mvpa2.misc.transformers` (see :mod:`~mvpa2.misc.transformers` constructor arguments) to ensure that higher values represent higher sensitivities. .. index:: meta measures Meta Sensitivity Measures ------------------------- Meta Sensitivity Measures are FeaturewiseMeasures that internally use one of the `Basic Sensitivity (and related Measures)`_ to compute their sensitivity scores. .. index:: splitting measures, measure Splitting Measures ^^^^^^^^^^^^^^^^^^ The SplittingFeaturewiseMeasure uses a :class:`~mvpa2.datasets.splitters.Splitter` to generate dataset splits. A FeaturewiseMeasure is then used to compute sensitivity maps for all these dataset splits. At the end a `combiner` function is called with all sensitivity maps to produce the final sensitivity map. By default the mean sensitivity maps across all splits is computed. .. _SplitFeaturewiseMeasure: api/mvpa2.measures.splitmeasure.SplitFeaturewiseMeasure-class.html pymvpa2-2.2.0/doc/source/misc.rst000066400000000000000000000357721202542755000166630ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_misc: .. index:: misc ************* Miscellaneous ************* .. automodule:: mvpa2.misc .. only:: html Related API documentation ========================= .. currentmodule:: mvpa2 .. autosummary:: :toctree: generated atlases misc.args misc.attrmap misc.cmdline misc.data_generators misc.errorfx misc.exceptions misc.fx misc.neighborhood misc.sampleslookup misc.stats misc.support misc.transformers misc.vproperty .. index:: settings, configuration, cfg Managing (Custom) Configurations ================================ PyMVPA provides a facility to handle arbitrary configuration settings. This facility can be used to control some aspects of the behavior of PyMVPA itself, as well as to store and query custom configuration items, e.g. to control one's own analysis scripts. An instance of this configuration manager is loaded whenever the `mvpa2` module is imported. It can be used from any script like this: >>> from mvpa2 import cfg By default the config manager reads settings from two config files (if any of them exists). The first is a file named `.pymvpa2.cfg` and located in the user's home directory. The second is `pymvpa2.cfg` in the current directory. Please note, that settings found in the second file override the ones in the first. The syntax of both files is the one also known from the Windows INI files. Basically, `Python's ConfigParser`_ is used to read those file and the config supports whatever this parser can read. A minimal example config file might look like this:: [general] verbose = 1 It consists of a section `general` containing a single setting `verbose`, which is set to `1`. PyMVPA recognizes a number of such sections and configuration variables. A full list is shown at the end of this section and is also available in the source package (`doc/examples/pymvpa2.cfg`). .. _Python's ConfigParser: http://docs.python.org/lib/module-ConfigParser.html In addition to configuration files, the config manager also looks for special environment variables to read settings from. Names of such variables have to start with `MVPA_` following by the an optional section name and the variable name itself (with `_` as delimiter). If no section name is provided, the variables will be associated with section `general`. Some examples:: MVPA_VERBOSE=1 will become:: [general] verbose = 1 However, :envvar:`MVPA_VERBOSE_OUTPUT` `= stdout` becomes:: [verbose] output = stdout Any lenght of variable name is allowed, e.g. ``MVPA_SEC1_LONG_VARIABLE_NAME=1`` becomes:: [sec1] long variable name = 1 Settings read from environment variables have the highest priority and override settings found in the config files. Therefore environment variables can be used to quickly adjust some setting without having to edit the config files. The config manager can easily be queried from inside scripts. In addition to the interface of `Python's ConfigParser`_ it has a few convenience functions mostly to allow for a default value in case no setting was found. For example: >>> cfg.getboolean('warnings', 'suppress', default=False) True queries the config manager whether warnings should be suppressed (i.e. if there is a variable `suppress` in section `warnings`). In case, there is no such setting, i.e. neither config files nor environment variables defined it, the `default` values is returned. Please see the documentation of `ConfigManager`_ for its full functionality. .. _ConfigManager: api/mvpa2.base.config.ConfigManager-class.html .. index:: config file The source tarballs includes an example configuration file (`doc/examples/pymvpa2.cfg`) with the comprehensive list of settings recognized by PyMVPA itself: .. literalinclude:: ../examples/pymvpa2.cfg :language: ini .. index:: progress tracking, verbosity, debug, warning Progress Tracking ================= .. some parts should migrate into developer reference I guess There are 3 types of messages PyMVPA can produce: verbose_ regular informative messages about generic actions being performed debug_ messages about the progress of computation, manipulation on data structures warning_ messages which are reported by mvpa if something goes a little unexpected but not critical .. _verbose: api/mvpa2.misc-module.html#verbose .. _debug: api/mvpa2.misc-module.html#debug .. _warning: api/mvpa2.misc-module.html#warning .. index:: redirecting output Redirecting Output ------------------ By default, all types of messages are printed by PyMVPA to the standard output. It is possible to redirect them to standard error, or a file, or a list of multiple such targets, by using environment variable ``MVPA_?_OUTPUT``, where X is either ``VERBOSE``, ``DEBUG``, or ``WARNING`` correspondingly. E.g.:: export MVPA_VERBOSE_OUTPUT=stdout,/tmp/1 MVPA_WARNING_OUTPUT=/tmp/3 MVPA_DEBUG_OUTPUT=stderr,/tmp/2 would direct verbose messages to standard output as well as to ``/tmp/1`` file, warnings will be stored only in ``/tmp/3``, and debug output would appear on standard error output, as well as in the file ``/tmp/2``. PyMVPA output redirection though has no effect on external libraries debug output if corresponding debug_ target is enabled shogun debug output (if any of internal ``SG_`` debug_ targets is enabled) appears on standard output SMLR debug output (if ``SMLR_`` debug_ target is enabled) appears on standard output LIBSVM debug output (if ``LIBSVM`` debug_ target is enabled) appears on standard error One of the possible redirections is Python's ``StringIO`` class. Instance of such class can be added to the ``handlers`` and queried later on for the information to be dumped to a file later on. It is useful if output path is specified at run time, thus it is impossible to redirect verbose or debug from the start of the program: >>> import sys >>> from mvpa2.base import verbose >>> from StringIO import StringIO >>> stringout = StringIO() >>> verbose.handlers = [sys.stdout, stringout] >>> verbose.level = 3 >>> >>> verbose(1, 'msg1') msg1 >>> out_prefix='/tmp/' >>> >>> verbose(2, 'msg2') msg2 >>> # open('%sverbose.log' % out_prefix, 'w').write(stringout.getvalue()) >>> print stringout.getvalue(), msg1 msg2 >>> .. index:: verbosity Verbose Messages ---------------- Primarily for a user of PyMVPA to provide information about the progress of their scripts. Such messages are printed out if their level specified as the first parameter to verbose_ function call is less than specified. There are two easy ways to specify verbosity level: * command line: you can use opt.verbose_ for precrafted command line option for to give facility to change it from your script (see examples) * environment variable :envvar:`MVPA_VERBOSE` * code: verbose.level property The following verbosity levels are supported: :0: nothing besides errors :1: high level stuff -- top level operation or file operations :2: cmdline handling :3: n.a. :4: computation/algorithm relevant thing .. index:: warning Warning Messages ---------------- Reported by PyMVPA if something goes a little unexpected but not critical. By default they are printed just once per occasion, i.e. once per piece of code where it is called. Following environment variables control the behavior of warnings: * :envvar:`MVPA_WARNINGS_COUNT` `=` controls for how many invocations of specific warning it gets printed (default behavior is 1 for once). Specification of negative count results in all invocations being printed, and value of 0 obviously suppresses the warnings * :envvar:`MVPA_WARNINGS_SUPPRESS` analogous to :envvar:`MVPA_WARNINGS_COUNT` `=0` it resultant behavior * :envvar:`MVPA_WARNINGS_BT` `=` controls up to how many lines of traceback is printed for the warnings In python code, invocation of warning with argument ``bt = True`` enforces printout of traceback whenever warning tracebacks are disabled by default. .. index:: debug Debug Messages -------------- Debug messages are used to track progress of any computation inside PyMVPA while the code run by python without optimization (i.e. without ``-O`` switch to python). They are specified not by the level but by some id usually specific for a particular PyMVPA routine. For example ``RFEC`` id causes debugging information about `Recursive Feature Elimination call`_ to be printed (See `base module sources`_ for the list of all ids, or print ``debug.registered`` property). Analogous to verbosity level there are two easy ways to specify set of ids to be enabled (reported): * command line: you can use optDebug_ for precrafted command line option to provide it from your script (see examples). If in command line if optDebug_ is used, ``-d list`` is given, PyMVPA will print out list of known ids. * environment: variable :envvar:`MVPA_DEBUG` can contain comma-separated list of ids or python regular expressions to match multiple ids. Thus specifying :envvar:`MVPA_DEBUG` `=CLF.*` would enable all ids which start with ``CLF``, and :envvar:`MVPA_DEBUG` `=.*` would enable all known ids. * code: debug.active property (e.g. ``debug.active = [ 'RFEC', 'CLF' ]``) Besides printing debug messages, it is also possible to print some metric. You can define new metrics or select predefined ones: vmem (Linux specific): amount of virtual memory consumed by the task pid (Linux specific): PID of the process reltime How many seconds passed since previous debug printout asctime Time stamp tb Traceback (``module1:line_number1[,line_number2...]>module2:line_number..``) where this debug statement was requested tbc Concise traceback printout -- prefix common with the previous invocation is replaced with ``...`` To enable list of metrics you can use :envvar:`MVPA_DEBUG_METRICS` environment variable to list desired metric names comma-separated. If ``ALL`` is provided, it enables all the metrics. As it was mentioned earlier, debug messages are printed only in non-optimized python invocation. That was done to eliminate any slowdown introduced by such 'debugging' output, which might appear at some computational bottleneck places in the code. Some of the debug ids are defined to facilitate additional checking of the validity of the analysis. Their debug ids a prefixed by ``CHECK_``. E.g. ``CHECK_RETRAIN`` id would cause additional checking of the data in retraining phase. Such additional testing might spot out some bugs in the internal logic, thus enabled when full test suite is ran. .. TODO: Unify loggers behind verbose and debug. imho debug should have also way to specify the level for the message so we could provide more debugging information if desired. .. _opt.verbose: api/mvpa2.misc.cmdline-module.html#opt.verbose .. _optDebug: api/mvpa2.misc.cmdline-module.html#optDebug .. _base module sources: api/mvpa2.base-pysrc.html .. _Recursive Feature Elimination call: api/mvpa2.featsel.rfe.RFE-class.html#__call__ PyMVPA Status Summary --------------------- While reporting found bugs, it is advised to provide information about the operating system/environment and availability of PyMVPA externals. Please use :func:`~mvpa2.base.info.wtf` to collect such useful information to be included with the bug reports. Alternatively, same printout can be obtained upon not handled exception automagically, if environment variable :envvar:`MVPA_DEBUG_WTF` is set. Additional Little Helpers ========================= .. index:: random number generation, RNG Random Number Generation ------------------------ To facilitate reproducible troubleshooting, a seed value of random generator of NumPy can be provided in debug mode (python is called without ``-O``) via environment variable :envvar:`MVPA_SEED` `=`. Otherwise it gets seeded with random integer which can be displayed with debug id ``RANDOM`` e.g.:: > MVPA_SEED=123 MVPA_DEBUG=RANDOM python test_clf.py [RANDOM] DBG: Seeding RNG with 123 ... > MVPA_DEBUG=RANDOM python test_clf.py [RANDOM] DBG: Seeding RNG with 1447286079 ... Unittests at a Grasp -------------------- .. index:: unittests If it is needed to just quickly grasp through all unittests without making them to test multiple classifiers (implemented with sweeparg), define environmental variable :envvar:`MVPA_TESTS_QUICK` e.g.:: > MVPA_WARNINGS_SUPPRESS=no MVPA_TESTS_QUICK=yes python test_clf.py ............... ---------------------------------------------------------------------- Ran 15 tests in 0.845s Some tests are not 100% deterministic as they operate on random data (e.g. the performance of a randomly initialized classifier). Therefore, in some cases, specific unit tests might fail when running the full test battery. To exclude these test cases (and only those where non-deterministic behavior immanent) one can use the :envvar:`MVPA_TESTS_LABILE` configuration and set it to 'off'. .. index:: FSL, detrending, motion correction FSL Bindings ============ PyMVPA contains a few little helpers to make interfacing with FSL_ easier. The purpose of these helpers is to increase the efficiency when doing an analysis by (re)using useful information that is already available from some FSL output. FSL usually stores most interesting information in the NIfTI format. Therefore it can be easily imported into PyMVPA using PyNIfTI. However, some information is stored in text files, e.g. estimated motion correction parameters and *FEAT's three-column custom EV* files. PyMVPA provides import and export helpers for both of them (among other stuff like a *MELODIC* results import helper). .. _motion-aware_detrending: Here is an example how the *McFlirt* parameter output can be used to perform motion-aware data detrending: >>> from os import path >>> import numpy as np >>> >>> # some dummy dataset >>> from mvpa2.datasets import Dataset >>> ds = Dataset(samples=np.random.normal(size=(19, 3))) >>> >>> # load motion correction output >>> from mvpa2.misc.fsl.base import McFlirtParams >>> mc = McFlirtParams(path.join('mvpa2', 'data', 'bold_mc.par')) >>> >>> # simple plot using pylab (use pylab.show() or pylab.savefig() >>> # afterwards) >>> mc.plot() >>> >>> # merge the correction parameters into the dataset itself >>> for param in mc: ... ds.sa['mc_' + param] = mc[param] >>> >>> # detrend some dataset with mc params as additonal regressors >>> from mvpa2.mappers.detrend import poly_detrend >>> res = poly_detrend(ds, opt_regs=['mc_x', 'mc_y', 'mc_z', ... 'mc_rot1', 'mc_rot2', 'mc_rot3']) >>> # 'res' contains all regressors and their associated weights All FSL bindings are located in the `mvpa2.misc.fsl`_ module. .. _FSL: http://www.fmrib.ox.ac.uk .. _mvpa2.misc.fsl: api/mvpa2.misc.fsl-module.html pymvpa2-2.2.0/doc/source/modref.rst000066400000000000000000000102711202542755000171670ustar00rootroot00000000000000.. -*- mode: rst -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: .. _chap_modref: **************** Module Reference **************** This module reference extends the manual with a comprehensive overview of the currently available functionality, that is built into PyMVPA. However, instead of a full list including every single line of the PyMVPA code base, this reference limits itself to the relevant pieces of the application programming interface (API) that are of particular interest to users of this framework. Each module in the package is documented by a general summary of its purpose and the list of classes and functions it provides. Entry Point =========== .. autosummary:: :toctree: generated mvpa2 .. the rest of the modules are relative to the top-level .. currentmodule:: mvpa2 Basic Facilities ================= .. autosummary:: :toctree: generated base base.attributes base.collections base.config base.dochelpers base.externals base.hdf5 base.info base.learner base.node base.param base.report base.state base.types base.verbosity Datasets: Input, Output, Storage and Preprocessing ================================================== .. autosummary:: :toctree: generated base.dataset datasets.base datasets.eventrelated datasets.eep datasets.formats datasets.mri datasets.miscfx datasets.sources.sklearn_data Mappers: Data Transformations ============================= .. autosummary:: :toctree: generated mappers mappers.base mappers.boxcar mappers.detrend mappers.filters mappers.flatten mappers.fx mappers.fxy mappers.lle mappers.mdp_adaptor mappers.procrustean mappers.projection mappers.prototype mappers.shape mappers.slicing mappers.som mappers.svd mappers.wavelet mappers.zscore Generators: Repetitive Data Processing ====================================== .. autosummary:: :toctree: generated generators generators.base generators.partition generators.permutation generators.resampling generators.splitters Classifiers and Errors ====================== .. autosummary:: :toctree: generated clfs.base clfs.meta clfs.blr clfs.enet clfs.gda clfs.glmnet clfs.gnb clfs.gpr clfs.knn clfs.lars clfs.model_selector clfs.plr clfs.ridge clfs.similarity clfs.skl clfs.smlr clfs.svm clfs.sg clfs.libsvmc clfs.distance clfs.similarity clfs.stats clfs.transerror clfs.warehouse Kernels ------- .. autosummary:: :toctree: generated kernels kernels.base kernels.libsvm kernels.np kernels.sg Measures: Searchlights and Sensitivties ======================================= .. autosummary:: :toctree: generated measures.base measures.anova measures.corrcoef measures.corrstability measures.ds measures.irelief measures.noiseperturbation measures.pls measures.adhocsearchlightbase measures.gnbsearchlight measures.nnsearchlight measures.searchlight measures.statsmodels_adaptor Feature Selection ================= .. autosummary:: :toctree: generated featsel.base featsel.ifs featsel.rfe featsel.helpers Additional Algorithms ===================== .. autosummary:: :toctree: generated algorithms.hyperalignment Miscellaneous ============= .. autosummary:: :toctree: generated atlases misc.args misc.attrmap misc.cmdline misc.data_generators misc.dcov misc.errorfx misc.exceptions misc.fx misc.neighborhood misc.sampleslookup misc.stats misc.support misc.transformers misc.vproperty Testing ======= .. autosummary:: :toctree: generated testing testing.clfs testing.datasets testing.tools testing.sweepargs tests Basic Plotting Utilities ------------------------ .. autosummary:: :toctree: generated misc.plot misc.plot.base misc.plot.erp misc.plot.lightbox misc.plot.topo 3rd-party Interfaces -------------------- .. autosummary:: :toctree: generated misc.bv misc.bv.base misc.fsl misc.fsl.base misc.fsl.flobs misc.fsl.melodic misc.io misc.io.base misc.io.hamster misc.io.meg pymvpa2-2.2.0/doc/source/mvpa_guidelines.rst000066400000000000000000000012201202542755000210600ustar00rootroot00000000000000When is fMRI data independent? To get independent chunks of data, the experiment itself has to be designed to allow for this partitioning. Ideally, an experiment is split into several :term:`chunk`\ s, where each chunk is like a mini-version of the whole experiment. It contains all conditions, i.e. experimental manipulations of the independent variables. Another run of the experiment is basically another version of the mini-experiment, preferrably with a different randomized trial-order, to minimize this type of signal artefacts in the data. At ISMRM 2009, Stephen LaConte presented some guidelines when fMRI data can be considered *independent* pymvpa2-2.2.0/doc/source/overview.rst000066400000000000000000000101201202542755000175520ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### *************** Getting Started *************** For the Impatient ================= If you only have five minutes to decide whether you want to use PyMVPA, take the first minute to look at the following example of a cross-validation procedure on an fMRI dataset (the full source code!). It is not heavily commented, but should simply give you an idea how PyMVPA feels like. First import the whole PyMVPA module: >>> from mvpa2.suite import * Now, load the dataset from a NIfTI file. An additional 2-column textfile has the label and associated experimental run of each volume in the dataset (one volume per line). Finally, a mask is loaded to exclude non-brain voxels. >>> attr = SampleAttributes(os.path.join(pymvpa_dataroot, ... 'attributes_literal.txt')) >>> dataset = fmri_dataset( ... samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), ... targets=attr.targets, ... chunks=attr.chunks, ... mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) Perform linear detrending and afterwards zscore the timeseries of each voxel using the mean and standard deviation determined from *rest* volumes (all done for each experiment run individually). >>> poly_detrend(dataset, polyord=1, chunks_attr='chunks') >>> zscore(dataset, param_est=('targets', ['rest']), dtype='float32') Select a subset of two stimulation conditions from the whole dataset. >>> interesting = np.array([i in ['face', 'house'] for i in dataset.sa.targets]) >>> dataset = dataset[interesting] Finally, setup the cross-validation procedure using an odd-even split of the dataset and a *SMLR* classifier -- and run it. >>> cv = CrossValidation(SMLR(), OddEvenPartitioner()) >>> error = cv(dataset) Done. The mean error of classifier predictions on the test dataset across dataset splits is stored in `error`. If you think that is a good start, take the remaining four minutes to take a look at the examples shipped in the source distribution of PyMVPA (`doc/examples/`; some of them are also listed in :ref:`chap_examples` section of this manual). The examples provide a coarse overview of a substantial portion of the functionality provided by PyMVPA, ranging from basic classifier usage, over more sophisticated analysis strategies to simple visualization demos. All examples are executable scripts that are meant to be run from to toplevel directory of the extracted source tarball, e.g.:: $ doc/examples/start_easy.py which would run the example shown in the first part of this section. However, once you found something interesting in the examples you should consider skipping through this manual, as it contains a lot of information that is complementary to the API reference and the examples. And now for the details ... .. index:: introduction, modular architecture Module Overview =============== The PyMVPA package consists of three major parts: :ref:`Data handling `, :ref:`Classifiers ` and various algorithms and measures that operate on datasets and classifiers. In the following sections the basic concept of all three parts will be described and examples using certain parts of the PyMVPA package will be given. .. image:: pics/design.* :alt: PyMVPA architecture The manual does not cover all bits and pieces of PyMVPA. Detailed information about the module layout and additional documentation about all included functionality is available from the :ref:`Module Reference ` -- or the `API Reference`_ if you are interested in a more technical document. The main purpose of the manual is to give an idea how the individual parts of PyMVPA can be combined to perform complex analyses -- easily. .. _API Reference: api/index.html pymvpa2-2.2.0/doc/source/pdfmanual.rst000066400000000000000000000013321202542755000176600ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ********************************** PDF version of the PyMVPA Manual ********************************** The PDF version of the manual is available for download_. .. _download: PyMVPA-Manual.pdf .. toctree:: :maxdepth: 3 intro installation overview tutorial misc examples faq glossary references legal changelog pymvpa2-2.2.0/doc/source/pics/000077500000000000000000000000001202542755000161165ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/pics/.gitignore000066400000000000000000000013671202542755000201150ustar00rootroot00000000000000pymvpa_logo.png pymvpa_logo.jpg download_icon.png download_icon.jpg tutorial_icon.png tutorial_icon.jpg documentation_icon.png documentation_icon.jpg support_icon.png support_icon.jpg movie_icon.png movie_icon.jpg ex_searchlight_vt_r3.pdf ex_searchlight_vt_r1.pdf ex_plot_lightbox.pdf pymvpa_logo.pdf ex_searchlight_vt_r0.pdf ex_searchlight_vt_r3.png ex_searchlight_vt_r1.png ex_plot_lightbox.png ex_searchlight_vt_r0.png .o ex_eventrelated.pdf ex_eventrelated.png ex_sensanas.pdf ex_sensanas.png ex_eyemovements.pdf ex_eyemovements.png ex_curvefitting_bold.pdf ex_curvefitting_searchlight.pdf ex_curvefitting_bold.png ex_curvefitting_searchlight.png ex_mdp_fda.pdf ex_mdp_fda.png pymvpa_icon.png pymvpa_icon.jpg pymvpa_icon_custom.pdf pymvpa_icon_custom.png pymvpa2-2.2.0/doc/source/pics/classifier_comparison_plot.png000066400000000000000000004163151202542755000242520ustar00rootroot00000000000000‰PNG  IHDRô›Û8sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ 8½ú] IDATxÚìyxUöþ?UÕ{wö=@XE@öˆl "8¨ŒëFGÑaÐq\TÔqTEÆu”aæ ¢¢*²#$@VH:½WÕïªÞ’@¤ƒ÷}žz’îyï{î¹çHº®ë4P3räHžþyÎ<óÌ£ž«iß}÷;vì`È!´k×.öÚ'Ÿ|B§NèÚµkJý>¯×ËþóÎ?ÿ|\.×ÏÛºu+_ý5 à´ÓN‹=¿fͬV+¬ö³¾ûî;n¿ýv^}õU:uêtÔs#‘3gÎÄjµò׿þµÊsþò—¿°wï^^xá$I7ë †,š@@@àT@MCUU^ýu®½öZæÍ›‡¦i±×|ðAV¬X‘r¿+??Ÿ3fpèС£ž·bÅ &OžÌÿøGB¡Pìù_|‘×_½FŸÕ±cGþüç?Ó¼ysqC5@XDœJ,Y²„-Z0jÔ(d¹²néܹ3K—.å†nHR³•ñªU«øùçŸÉÌÌäì³Ï¦C‡”••ñõ×_³eË4M£S§NŒ=«Õ À—_~Iii)ééé¬_¿žîÝ»3räHöíÛÇÊ•+),,$;;›sÎ9‡ôôt8ÀòåË9xð ‡>}úpúé§óî»ïRZZʳÏ>Kzz:çw}ûö­ò;ggg³uëVÞ{ï=.½ôÒ*'9‘H„Õ«W³qãF¬V+ƒ¦wïÞ„B! QU56úòË/Y¿~= 8/¾ø‚I“&a±Xbç|ûí·¬Y³†´´4ÆO³fÍ’>󫯾bݺu¸ÝnÆŒC«V­b¯íܹ“ÿýï>|˜nݺ1bÄ\.ªªòÞ{ïÑ­[7zöì €ßïç7Þ`„ 4kÖŒÏ?ÿ<ö=~üñG P­—F(tŠC‡ñüóÏsñÅ3vìX.¹äî½÷^òòò8xð ãÇ笳Î"///iPΙ3‡Þ½{Çfß¡Pˆ^½z±nݺJŸQ^^ÎСC1bcÆŒaüøñÜyçìß¿_t€À)]×)**â`éÒ¥´k×½_¿~Œ?žÇœòòòJ¯ûý~¦NÊ‚ (**bõêÕLž<™íÛ·°eËÞyç}:¡PˆC‡qÓM7ñþûïSVVÆ–-[øè£ÐuH$‚®ë„ÃaÂáp’W¡*BŸ4iÏ=÷¬r²óÈ#ððówï^6nÜÈÔ©SY¹r%º®“››ËsÏ=GQQº®³dÉn¹å~þùg~øán»í6î¿ÿ~|>_ìš«V­âoû………¼ýöÛ•¼ ß|ó O=õû÷ïçwÞaÊ”)äææÆÚñòË/ç³Ï>ãàÁƒ<úè£üéO" ¢ª*¯¼ò ß~ûm’{â‰'bvëƒ>àöÛogÑ¢EVëÅ ]à„BÓ4ž}öYÞyçfΜIÛ¶m)++ã§Ÿ~Âçóáp8øå—_8xð ÿþ÷¿¹ñÆ(--eéÒ¥äææRTT»Ö¦M›’[âçlÞ¼™{ï½—Áƒ³ÿ~æÌ™ÃáÇ™7oÞQ׿¼^/·Ýv , M›6G<×ét2}útFÍêÕ«3fLÒëŸ~ú)Û¶mã­·Þ¢]»vƒAþô§?ñâ‹/2gÎúôéóÏ>‹¢(lÛ¶+®¸‚Ë.»,¶¯ª*sæÌ!++‹H$ÂM7ÝÄ€˜={6‡ƒ½{÷rÅW°víZÚ·oÏ×_ÍêÕ«éܹslÒn±X¸üòËyá…˜6m­[·>ºB“e®¸â >üðC>üðC¦L™’ôú–-[øç?ÿÉâÅ‹éÝ»7š¦ñòË/óÌ3Ïпÿ¤s yþùç¹ñƹõÖ[Q…ùóçóå—_&gµZyâ‰'hÚ´)¿üò Æ cß¾}dffPTTÄ‚ hÑ¢\tÑE¼ûî»Ü|óÍÌ›7îÝ»óì³Ï’––Æš5k¸òÊ+™YÉ+ ]à¤#‰°bÅ ÆŽËW\{~̘1H’Dnn.N§“ &ðþûïs饗’‘‘ÁÊ•+iÛ¶mÒZYu$‰îÝ»“““ƒ®ëìÞ½›7ß|“‚‚Ú·o/:C Á¢´´”[o½•0oÞ<š6mŠ×ëeáÂ…lÞ¼I’7nãÆ‹½§cÇŽLš4‰ÇœáÇ']oùòåóàƒÆžÛ¶miii„B! bäUР¸¸8vþ AƒbkÑùùùlܸ‘ôôt¦Nó(ÌO<Íf ¤¤„;wrøðá¤s÷ìÙáC‡8çœsb—ÁƒW"ÎAƒÑ´iÓØgÛl6ü~ìõ¡C‡ÆÚ¡Y³fäääðý÷ßsðàA¶lÙÂõ×_OZZÝ»wç´ÓNcíÚµ5&ô¡C‡Ò¨Q#1¡×?E¡k×®|òÉ'ôë׳Î:‹fÍša±X’Ü…#GŽä™gžaýúõ 2„÷Þ{Ñ£Góæ›oÖÚ# ª*¡Pˆ;w’™™‰Ûí!Рa³ÙèÕ«;wî$//¦M›bµZéß¿?mÛ¶E’¤*£¶¯ºê*>þøc>þøãJí¬¬,Î;ï¼Øsçw-[¶D’$^xá6mÚÄC=D£F‡Ã\tÑEIîp‡Ãêª"Ë2ýúõ£_¿~I÷3Î8ƒôôtæÎËÚµkÙ°a³gϦM›6¼ýöÛU.ôìÙǃ$I´k×.)N@’$ÆÏßÿþwÞxãØzxôw5oÞœ‘#Gât:cÏgddиqcòóócÏ麎®ë•®]1&!7xNE¯AE›§iZìúÑÉBâõ£íXñZ‘H¤R[$¶³ tz'ô|çž{Ž pçwâp8¸á†¸á†b祥¥qþùç³dÉ»víâ©§žbñâÅ5þ,]×™={6Ï?ÿ<¹¹¹”••ñÆoÄf× ‡ƒ;իWsýõ×óì³Ï2pà@Î>ûì¤óÂápÒã.]ºpË-·ðøã'Å“Œ5ЧŸ~šœœœX œ®ëx½^$IbË–- 6ŒáÇ£iK—.=êÚvË–-éÚµ+áp˜ &àp8#î%ºNîp8¸à‚ ¸à‚ :t(×\s yyy1²J¼~NN999Gü<ÇÃÌ™3¹þúëiÓ¦MLÁæää0þ|úôéCŸ>}b¿Ëçó%<@ûöíÉÌÌdåÊ•tïÞEQøú믓H¿&X½z5………4kÖŒ¢¢"¾úê+&NœHË–-éÖ­Ÿ}ö&LÀív³mÛ66oÞÌìÙ³‘e™-Z°yóæØï_±bÅQÛYº@½£Y³fÜsÏ=üîw¿£  €~øY³fa³Ù˜8qb’B¸ùæ›ÉÈÈ oß¾µ&bI’˜8q" à믿æ7Þ  ¢ëº˜á 4xȲ̭·ÞŠÝngÚ´i<õÔS 4¨Ê(÷DL˜0E‹QPP@4-Ǹqãxï½÷¸å–[8묳P…íÛ·3tèP&OžÌÈ‘#yñÅñù|„ÃavïÞ}T¢±Z­ÜqÇL:•ßÿþ÷œvÚix½^¶mÛÆ<€Ãá`Ú´iôîÝ›´´4V¯^M=hÑ¢¥¥¥dggóè£Ò­[7Î9çzõêUm{ 0€#FðÖ[oż=zô`âĉÜu×] 4ˆŒŒ öîÝKëÖ­™>}z%»4yòdž|òIöîÝ‹ÍfcõêÕx<žjÛ4Ñæ¤§§3mÚ4zöìÉwß}‡Ãáàâ‹/Æf³1uêT&MšÄm·ÝFÇŽY±b£F¢gÏž(ŠÂرcyä‘G˜5kŠ¢°k×.DꔣÄxàÑ ©aŒ<-Z´ wïÞ|ÿý÷ìÙ³‡Ñ£GóöÛo3bÄȪU«øàƒ¸÷Þ{éС¯¾ú*§vgžy&‘H„‡~˜ë®»Ž¬¬¬¤ë‡B!æÍ›ÇÍ7ß̹çžËàÁƒñûý,\¸1cÆÄÖ°ª§kàÀ4iÒ„~ýú‘™™ÉèÑ£Gl[S”`:uêD÷îÝcê¾k×®´mÛ–#FЦMl6çŸ>Í›7'??I’èÛ·/cÆŒÁãñЫW/²²²((( ++‹[o½•ôôtÎ<óL222Ðu¬¬,ºwï#¿–-[rþùç‰D(..&##ƒsÏ=—~ýúár¹ÈÈÈ ¬¬ ¿ßÏðáùóÎ;IKKÃét2pà@Š‹‹)))¡cÇŽUüéºN«V­èÝ»7V«›ÍÆi§F£F>|8]ºtÁjµröÙg“••EII Á`®]»rá…Æ‚ÛíŽ}§ž={Ò£GŠ‹‹iÞ¼9£Gæ¿ÿý/wÜqGìwuêÔ)i9C’$rrrHOOG×u† ˆ#ÈÍÍ¥{÷îÌœ93fŸ¢[ ~¿Ÿ /¼[o½§Ó‰$ItëÖÎ;SPP@‡˜2e  4ǃ®ëtîÜ™N: QH"S\ý"‰°xñb:vìHëÖ­Q…ƒrÝu×qÝu×qÅW0qâDî»ï>ÆÇO?ýÄÞ½{2d‡³Ï>›‹/¾˜iÓ¦p¹\,^¼˜Ä>Ãívãr¹ÈÎÎæõ×_çüóÏŒ@¢Aƒ1}útnºé&ÑI((( //ÌÌL‚Á =ö@ Æ‰jN.„˽¾gT’D~~>/½ôR,2TÓ4&NœÈµ×^K0L:¿GôèÑã¨×œ9sfÒzبQ£˜={v¥óÒÓÓ¹á†X¸p!W^ye,Á…€€€ÀÞ½{™:uj,¶GÜ{ï½¢a²B?pàÛ¶m£¤¤„¾}ûÆò«ªÊöíÛÙ¾};‡3Ï<»Ý.Zµ–PU•p8Œªª±¨O›Í†¢(躎ßïÇf³%¹£ðûýX,–X¤©×ë­Ë²eËbчW]uëÖ­ãÞ{ï¥ÿþlß¾þýûsÛm·‰8FÒ¼ñÆ ìÚµ‹·ß~›nݺU:oÕªU<þøã 0€Í›7“““ÃÔ©S«œðÕ¾úê+î»ï>¼^/:uâÿø`ìaž6m™™™hšÆ¡C‡X¸p¡Ø ) p ‡Ã<þøã|ùå—lÚ´‰ $åNˆ¢¤¤„)S¦••E0DÓ4~øaÐkˆp8¬OžhÐ }Æ º€€À±£¬¬L0`€þóÏ?Wùú%—\¢ÿóŸÿÔu]×wìØ¡4Hß¿ÿIùno¼ñ†>iÒ¤Øã… êS¦LÑ#‘ˆ õ믿^å•WD' ‚Á >qâDý£>ªòõgŸ}V¿õÖ[õ`0¨kš¦_zé¥úâÅ‹õçr¯(äKKKÉËË£W¯^H’„Ûí¦Y³fIùÆê»wmܸ1-Z´`ÇŽõ¢&~úé'ú÷ï[&êÓ§?üðƒØZ$ Pî÷#aýúõôíÛ›Ís¹oܸñ؃â|>š¦%­ñ¥¥¥UZÃýë_ÿZeñ†ˆ?ÿùÏ5ŠÉÏÏgÁ‚Õžg±X¸ÿþûkõB¡Pì;X­V<O½¥PU•²²2222bÏeddàõz‰D"IKo"JàT¢(Ôt·÷Oûì*vLXXo;¥v«*䙟zƯ¼•kòm© 8–ðÑþýû³~ýz‚Á 6›uëÖq饗֌ÐW­ZÅûï¿Ï·ß~K~~>›6mâÏþ3Ó¦McÖ¬Ylݺ•;w2iÒ¤j÷HÿJ4 j½*„ †¶R,Vl”ƒÄí‘ÁïÇãÒÐ#:6Ùdi|cŠ š°ŽjΩxGÌŸ?ŸíÛ·³oß>þú׿2f̆ ÂÅ_ÌË/¿L¯^½˜1c?ü0?üð[·nåšk®9áùø÷ïßÏßþö76lØÀ®]»¸óÎ;¹þúë¹ì²Ëøâ‹/¸õÖ[c….½ôRÑù§t`ð>V‚ DÕ‡ÚA® ¨8AX¶lË–-cãÆ,Z´ˆ 60cÆ ¦NÊi§ÆwÜÁW\ÁòåË™1cÁ`–-[2zôèšz»ví5j#GŽŒÍÌ- ={ödþüùìܹ·ÛMÿþýOèÖ™“‡æ'ùó|æ\Pà [ BŠD°º¬hv„#:…˜¿< ƒÃB]E+§$¡WçœW*<0`;wŽeókÛ¶-Mš4aîܹ±"!ƒ bîܹìÚµ‹‹.º(–÷úDÂãñ0bĆ {®iÓ¦¤§§3gÎ~úé'$I¢G'|O¼¸;OÖwk€§ƒ«¸_… ¨žÐí5°‰ÈÎÎæ¼óÎãÜsÏ5¼N'‹…?üᤥ¥ÅòãÏŸ??V¸wïÞdffÖŒÐ;tè3&Q1ï©ì|} q—¼xAÊ0ºNd-j—GG÷ûIsEˆulŠ¡Î‰€O§d¸Ôs€|ÑÊ ŽÐ+*ô³Î:«Êó† ,Ó¥KºtérÒ~KZZ£G®Ú(7o«w-lÀ©ô5¢®ö¬ÜË¡WTèGÛgœqFÒã–-[VJ:#R¿žtT\[Ôr ­ñRÈ 67R$ˆ.é(VÍÂá(öjØ-æ[tðë¡'^©º`7±™èäA9B8µ¬}múñŠ“jâ•*(Ö ¤/E¼àð`Ñ}¨v+r$Œ¤ª8:~¯†ÇN,l݉9êÑI|;Úœ[úÉëíêh¡ ¤.j"ªßÕÙ€º\Æ„žƒ¦Ì ô¨B·{ B²ÛPý!$]ÃåÔñ•©¤;++t1ì¡ Ô½]úÈÇ4 rÌ ]ú¯nàøAr=.— )B¶[ @AÅíTñ—©x¬Qîø4pêÆº&2åp,kè©Àÿa%Ây@[Ñ Ç¬Ðk»†.=åæd‰ÔÍÑCàd›ñ–°ì‘‚°ÛÐü!$Ýp¹{K5::Œ9€®AqM䪧B±§¡W·eEÍ$rЀ­@„Ó€¾¢AŽ‹Ð«³b =å»PªÁ9Ñõt cõÛb-¨É¶5“Kè"(N a¡ÓX¨ó:#t±ýWGè .÷p¬vðzQÒœ¨þb¬I× –ë8-&¡ë‰Ä;PG(õTñÅ}øá‡üãÿ  ѵkWî¹çž¤ò¤kÖ¬áÅ_¤¤¤„ÌÌL¦M›FŸ>}ª(ˆ" P"@5"êÐÂ×6—ûöíÛy衇8|ø05âöÛo§wïÞIçýôSJKKc甕•QXXȈ#hÕªçž{.ëׯ§¨¨H4¸Àq` °•‹€.¢AêŒÐ«³– “úõë×3yòdÚ´iÃe—]ÆþýûÙ¾}{Ü òÍ7ß0~üx²²²2dV«•¯¿þZú‰…D|kÄä0HvP, ë †Ài‡r/6ͬ´&#« €Ý\r×TÐ" i"±L*÷¾EJ>tà0Pbá„ó iÒ$ž“«uëÖ”””$©o‡Ãpà8pUUÙ¿?ÅÅÅœ'Ÿ|’ï¿ÿžçŸžž={ÒªU+^{í5>ûì3òòòÈËË#==?þ˜fÍš1dÈÑwõlò Œä0{Õk°€Û ¡ „¼Aœ,”—šAVæzYÐ(ª‚Æ*˜*5u¦q ÈÕ¥‰ ÆÿÍÈÈ`þüù¼üò˼òÊ+\{íµ\rÉ%>|˜¢¢""‘Hl0ðÁH’ĸqã¸à‚ °XÄP8ø€€]´.B¤{­[F¯ÞÈ FÛf³qß}÷±páB,XÀgœÁ¤I“8|ø0éééèºN(bñâÅ”——sÆg0þ|ÒÓӡןbÂ$t$P}1—»Ž YB>‡ÇŽ?`nPݨ´f“Db’TÌÕºP*8n:vìÈìÙ³“žkÔ¨O>ùdìñرc;v¬h_:@°4n÷º‡R;‘§ÓÉí·ß^é´?üá±ÿ³³³yúé§«”ˆõÒÖ„²Ç0ìº\p)H¡ 6«FØÂãqãó’6sÛzyìU„¶kĪ« ¤B7×B¡ œ|1ü{.Aæ'fR_ ÕÝÇ B?)*<ñ9©Âã€Q  …îtÄR …îW±¹|…Æn6 S¡«†kL¬¡§8¡[á68)(V"$æ(xIÞD%P'4P ¨C#.ý„Zs¹ŠéšR¡ùƒ ¸N×ËÁå6N …‘-2ªªa³€¯ \vC£‚/R91‰@Tè¢êàS —,à·$M4ʉ!ôêl@²° ôz‡äæf–8“еº®!½a™c IDAT[e"ªŽÅ>¸œÄ6—«f€œ.ö¡ B¨-‚…X 2?Q8ÉõS¡§ÂLYvªùÀ傈Å*cµè„4›¢á÷ÓWèÕ¸OT3SœˆnOÑÁ\Ë 8“&$ðÕ{„ŽS¡×2(NzƒƒÕlz«AèŠéf×Ê!ÃjŠÝ‚Å"ªaWT ËÀm3'Öa#ÊÝ%‹~‹VUÄžb Ýzò³€@ÍP,Êè t rb ]¬¡ÿš:ÜTèfP\S”#Û$‹‚¦é(ðŒ ¸(ü8k@z…¿'Y¡ BH)D€¯€BÚ£@”J­oBkè§’„óÅŠj9x:@À‹Å&c³j誆UÑ)÷As{\†ûTh&U¯È5âõÜN2¢åÖ¡ ¤ 4Œú:·h?©¯ÎBo¨SµŠ[ÖÂ@¤tÐUPýàN¿ÅnARd4ÕHóî [Ô£p~ œR< N(侮.RÈö¢ež: ]¸Ü¢e·\FU1ÈœÈi†ìÖ|™2l+–pEÖ±J*~?x2â ݯ„ŽñP$’IÕÙ¹¥>ÑÜæç³dÉ >|8gŸ}v¥·>|˜?þ˜M›6Ñ¢E .ºè"²²²D{ Tƒýi^Ë88“yR½:PÐ#‘K–,á§Ÿ~¢gÏžŒ7·;Ù—¢ª*+V¬`Íš5ȲÌùçŸÏÀ…>¨_•6ÙTè‘rðxÀïÅê±.óãpIH²±†îIضæÓÀ% eÞ ýhGÂôù|LŸ>‚‚zõêÅc=ÆòåË+]ö/ù Ÿþ9çž{.åååL™2¯×+Ú[à(П|Ú#1jAœ$B¯¡ ˆD"<õÔS,_¾œ³Î:‹O>ù„¹sçVºì²eËxä‘G8ãŒ3èÚµ+wÞy'kÖ¬ ½~,|”ÔUƒÐ-i E —{šåX=64¯»CBB'O¶5¿¹]Dµ§¸cÆVƒoâ›o¾áðáÃÜqǤ¥¥áõzyë­·:t(‡#vÞ÷ßÏŸþô'Î9ç:vìÈ;ï¼C0Äãñˆ68 ?^Z nK:4ùµH,“ŸŸÏ|À«¯¾J§NhÞ¼9üã¹å–[hÒ¤Iì¼ü‘œœ&L˜€$I¼ûî»ìÛ·Ozý"h 2Ù5.øcO·¡––ãpIȲŽÏiæzD7Òÿºå#ÏÅ5ÄÚz½ÃB­’JüüóÏIõÏsrrxùå—)--M"ô›o¾™_|‘mÛ¶ñã?rá…Vª™. " ½„^RRB$¡eË–têÔ ‹ÅÂÎ;“ýÒK/eƌ̙3‡`0ˆËååSS‚Ð%»aÔ%5>› kèš×ÃФâ‚ÇLýRAÕ«Þ¶fÖnA3ÿ B¯çÙy…€˜ˆe¡x¿„:(cµÆß`³ÙˆD"hZr„ÄþýûÑuMÓP…üü|Âá06›Ð]G‚Ž‘îµòŸÀɵà ¶À›0¼5MC’â½c±X$‰p8œt¢¢"‚A£²“,Ë”——sèÐ!Aèõ×Ë2ÆºÝøWR I–ÐËK±ylDJ}8]º®QÁ®wCP3n§'ïÄC …z…-+Å~X™As­d þZ“&M(..Ž=>pà™™™Iêॗ^âÕW_¥oß¾sÕUW±qãFrrrD› ÌÖa:"Š:T…^Á„"ðE øÇ߆ÓÍ×GÒ$þðáÃD"‘$uðÜsÏqÉ%—pã7pÿý÷óÎ;¸ú#t%™ÐQAIÉçÅæ±¢–py$tMG2ß…fªA-Q%® EžšƒYI>š{àònpMãhŸà)8p ………|óÍ7ñ¯ý‹³Î: §ÓÉO?ý„ßï ú={öPZZJnn.^¯—KlB8~þ…À>ˆÝ’õivÛ1n†´ŽŸÞ¼ys:uêħŸ~Ê¡C‡øüóÏÉÈÈ ;;›Ý»wsàÀ233Ù³gÅÅÅ’››KzzºPè'‡¸äàŠÄ ]×@EÑPå8Ò<öp¹@WUCÓkÉ„î"êDHI$–½?Ú-b¢S§N\~ùåÌž=‹ÅBFF3f̈©ð×^{Þ½{3cÆ -ZÄâÅ‹ñù|Œ9’®]»Šö8¼@^ˆ½Ê'Ðka222¸ë®»˜={6o¿ý6ªªrÇw`µZyàèÑ£wÝu¿ûÝï¸çž{˜2e š¦Ñ¨Q#&Nœ(úöÄ÷¦|BãÕPè ´‡§j¹O&èªWè:4C‰;ÄBXêz-3Å]sÍ5üö·¿EUU‡MÓø¿ÿû¿Ø^Ôßþö·\pÁD"dYÆåra±ˆ¡,PtŒd2FxޏKêAÓÕ2S\¿~ýxýõ×c15QïÛ3Ï<ƒ¢(H’D÷îÝyýõ×cëèN§»Ý~üý‡QÕøæ)«ÕŠ¢ˆš£+öè¬fa#(N"á Œæ ân­#iƒÐMÿzH›IæbÍ<Å ½–™âE©±.Ë2éééISi‹šªªIA;Š¢$÷ Ô'™o¾ÂôGd‡«Mw ¹Ü+&’©ê9§Ó‰Óé¬îR5‡Ïç㦛nbÛ¶m´jÕ €›nº‰óÏ?_tä{7ñðfaÌ 8Mƒ@Gº±†îvƒ¦jÈÈR\¡'dHUüJr¹¿òÊ+±$C‡eêÔ©ØívqÔ+ò±d$ÐW4HƒPèÇkrŽÓ¦Mcüøñ•"r•yEy9f¾Å‚E px,¨¾ n·±=IdsOZP5ï-y›ÚÑ ö¥×ÓüM®Á9§FŽÉ“O>‰,ËX­V±….5|'@;ÐV4Fýšÿ“4©¯B_¶l»wïfÀ€ 6L¸Ûjl¹Kñ’æ»I@$ŒÕa!RÂé’ˆDt,ròzâ´©&D-ȼð+*βeË,X@»víøÍo~#&öõØhØI¶'ÙìŸDp\„n±X¸øâ‹‘$ MÓ˜?>ëÖ­cæÌ™ g…€Â„_—^ƒ_økÈ47…zÁîBÒT$‹‚E¡C¤»UBå:. Èfa– f(tM¥QO$"æ”+êý¨õŽ‚š¤~=ýŒ3Î`Ê”)4nܘ•+W²|ùræÍ›GãÆÎ &ØÙ´"DëÄ@èy¾'pÐT4Ê1# ”%Ø`mÕy-2ÅÕ+¡Ûl6.¹ä’ØãÆsÏ=÷p×]w!Ër‚Y<”ðë\‚Ðc(ÚÆºÕ ª†d± …T´°ŠÓ¥s WÃmÛþ€.fÜ'ªIè‘cÈ5Uè§€Ë}àÀ 8€áÇ3zôhvïÞ]ÐC v Z¼Sú‰ø ™ 9@wDf¸ãµ‡‰×ÍÕµBOÕzèqO„ è|Šu±ŒQâ <ÁÜË5[³w£G9H³¼àpcQCH=†H„4ÆŽÃ*›å@$^:5 Ýü&"ê½î`:$<Þz,„n¯Á9§$I:‚H;Å쀸M3ïOA…B 2?n80²ëEñSm©¢¡Å•””ðî»ïÒµkWTUeþüùŒ5êúT"óA)~–sì5ÏBqŒæ«"†Ë] ©h — ʽ:n›åÎÑK§Šuò»U~)¹Þ|óM5jDzz:Ë–-£E‹´k×îÿÕaæþד*zò; ˆÛ$t°ÕÍ SÐm6‹…>øI’¸ñÆ5jÔ)Þ;i&™·6ÿß<Æké›C­»\HjÙ"#‡ŽÐÈ&Pª„n*ôÃAH×A×EùԔƯd ½Q£F|ñÅø|>ºtéÂôéÓiÔ¨Ñ)n¡{bøot“Ü¿O‘ï¶ XE:"¢ÛSâV©EÅÅz%t·ÛÍäÉ“e=Tì<@.Pr ׈îC7ºè°¹!‹-MÃn¿W§¹-.¿Ë"ÐA2]D¯ŸZ„ …8pà¡PˆÆWX‡6°k×.B¡ä•¼ìììzÛ]2vìXÆŽû+êX Ø ´Ç™ÊK‘ï¥c, ©ô@&[,ÀÕ?jY>@×u8€×ë%--fÍšUJÖVPPTÈ  E‹"*¥öˆŸ›3òCÔ2D"ÁŠ+qBWü`oŠ%D±HH¡«„E×”i¸,Ä*°”†Á­QîÑo$”zŠz-·¬,\¸+VžžN0äÉ'Ÿ¤M›6Içüãÿˆi8xð ÿûßÿظqc¬†²ÀÉÀÀ>â1ЩBè>@†$ °¤ŠB¯ePÜš5k˜3gÍ›7§  €©S§rÞyç%ûaV­bùò們©qéҥ̟?_ú±AåØÝìIz,A¡ûÀîD‘ìVÔŠÅ® k~/¡'(ô4éèÃZ¨ö†§Ð7mÚÄG}ļyóh×®sçÎå¹çžãÁLš¡Ïš5 ]7zø‰'ž ==ýwq§"t 8…¾OX& h ìÝÔz‚ø...æñÇgêÔ© 6Œÿüç?ÌŸ?ŸaÆ%åv˜0aB,™Û_|Á–-[|˜@ ê”6+V¬@Ó´Jî8‰tŒ¬èªI¢å)ò½ Y@'ÑI©7±¯¡ X,–ØN±ôôtE©´^ÅþýûY¶l/¿ü2’$ B¯9ÀPà4Œ}§û€‚j¦f‰„^¡Ê=2HÍjkzœ¤r/V— B¬V Y…±¼[CE@Ñ¡7…ž€¼Bøð ð™Yj¶íK¸Ãüþøžæòòr£$b¥QC¡Ë–-cذadffж>i艱]Íœ„³.¾Sˆh‰T ‹Q±Q µz|Aøp5ä×n†ß™õÌ, ªªÆ–Ô‚Á š¦UªªÅÚµkiÚ´)ÙÙÙÆûE‹×FLÅÿ«›ziU#`X|Ùfœ¢ûÁáB+óaIs¢…"X2’8óc5FÀª„.â„^ÁÞº ÜtYüñúOZ=Xºt)‡"33“¯¾úŠ.]º‘‘QYò¿ÿý·ÞzK´óIE˜x”J8¾ø7°&@Wš"q@tSª@ªl\v¸ü‚øãW?Šÿ߸qc¹¹¹tëÖíÛ·£iZŒ°“îÄp˜·Þz‹K.¹$VNYúQáÂp`A'û0Ü[‡ðž&ûS 0¢àe*g0K§JPl … ãàp¢û°´p¡‡Âج„ ÀXC7ë¡#¦¨Oض&¸=a¡VAqýû÷'++‹‡zˆ®]»òþûïóç?ÿ™ÒÒR¦NÊìÙ³éÒ¥ `D:ýôÓÉÊÊí|ÂáÆÈrç6™Ê\vÅnt6Év''vÊ`茲™§žB¯EP\³f͸ꪫ˜={6£GæÓO?å /$33“ûî»N:qÍ5× Ißÿ=ùùùœwÞyH’$½ú©Õ@ ÷š ¼oôú£ P0#ÑDF©Àz0 ’Õ$ô QÕå„`«#H0ŒÕ!ôçTˆ¹Üƒ*Ø”xœØ¶– ½¹Üív;<òË–-£¤¤„û￟Aƒáõz;vl’k½uëÖLŸ>´´4ÑÎ'¼‡`d‡T·1¢ÛRõ‚— œ œežÿFFÉ… ‘†á#‚4R‹mkŠ¢pà 7жm[vìØÁ5×\È#”«à’ºDB®÷T$t…M©†Ð£§.ÒÍ1~0ÿö0mÃ&±axñºMK€7ÍçüDS²Ö4àŸHq:ÆfZ—è¨Ô%tY"d³Uc'êÎÏ*½J8s0¶ª6Ù4 L;wî¤sçÎ\ýõ´mÛ6ùººÎÆY¼x1¿üò :tছn›fŽŒB`MÂ`ŒfN·'̃$s}‡±]-ÓœL.ÀX_W*(sɼޤtƒðÃ^°¦A°E‘°Ø"! › üÁ…®ƒW‹zÔ— ªƒYF«æHt¹s÷ÝwÓ§O¦OŸÎgŸ}Æ’%K*]÷£>â¹çžãÚk¯åþûï笳ΊÕO¨K”›c{wÂsasÒî"^F«#ºÝbyFäûEÀ…ÔÝ*÷§@Ý0áDRÙ†©6 >v=ô‘H„»ï¾¿ßÏ#ú(n·›™3gòöÛo B?2Z`lQ±˜8Ж]Fesà‡€OLõ.U3Mê•Í5¸ˆ™ú5àÃê²)bµ™ =§Aèš~=y =ñ› T{ŠºL¸Â‹Hš¢¡iFOéR|vÖ²eKV®\‰ªª(ŠÂž={hÖ¬Ng²ƒµC‡´oßEQðx<4mÚ”¢¢"Ñàu0#È5XÁt!^ÓÁiÚ ø ø‰ºõ¡­¼´ÅÈ'¢%’G"\a sU1쀮Ä_w¹\¨ªJ(ÂívSTT„ªª´hÑ¢’ x<E!++‹Ý»w‹{ãhæ8¹r’Lå-iaó5›©ØU1ÃÏHPéŒu6Ýøß"ƒ¢ƒ›)P†Í­ –ú°ÛÁnÕð–CšÝ˜D"4]îa’힊³s %ép¤YéÚÏM=r<¤7Žæ¡C‡âõzy÷ÝwÙ¼y3/½ôãÇGQÞzë­iOš4‰%K–°cÇV­ZEnnn¥ºÈucŽã#+Zi§¢È3'ñ`¬¯·®@äÆò[:ÇVBE7•¿qu±¨Òð¼<m€lµÐ¡‡+fZgÇw±´jÕŠAƒñüóϳsçN^{í5:tè@ÇŽY¾|9ëÖ­à²Ë.cÆ ¬Y³†Í›7³|ùr,ú‘Q€Qã<#­kâkèÑY„Ùbu§™Ä¾ÇœÙ÷1ÕûWzt=NMÙŠða3ºÝ² 8Í%˜°A<"IRèÖjI?ŠfÍš1kÖ,þþ÷¿³téRúöíËe—]†ÏçãŸÿü'}ûö¥I“&L™2…^x»ï¾ÇÃ}÷ÝG«V­Dƒ×9Ê1"Ë;šcvñ@רpa,ÁEcileVÛb$™Ò€sÍëýÇ´ µ!ó@VŒì mR_“5ô8 ;NfÍšÅã?άY³hÛ¶-3gÎàóÏ?§sçÎôíÛ—~ýúqÓM7±páBTUeüøñŒ7NúÑÓVsÀ^RaÇæS çœ47‰¿FTj¦9¨3*Ìü- ˜ =A²)È!/Ž&2xËq»Á¢GÐTc™Bª¡Ð=¢sˆ¾«IP\²“lذa 6,é9·ÛÍ¿þõ¯Øã¦M›r÷Ýw‹>)8h=ˆoAÕìAÛ 6 ‹9‰8Þ‘`':Ö’Ðþ?CÌ« 44‘kкukžzê©Jç=ú裱ÿ- W_}5W_}uÒ9‚ЫEGó¨ŠÐ²„±îž¸5-—x&¹Ã¦Ò—â ]’Œ²iº ²ü>ì o·ÇˆR5Ã3n(ô€©Ð½¢c€B¯]”»@ªBÂHñj­âùŠv qâ.cb\¥ IDAT”XŽ&hÝ^ËÏÝøICf(š0Ö rR/ÕšÐâ©v ·M¸RR7Ä·²Etô(ĈpýÅœ¡Û‰Ó(6 (’éÅWA‘Bn…@‰·KGÒUC¡›Võr§dL´S u›ϳuªôÕÖå.Ê“úÈ[ªbBŸçè÷°#¨ âkí5§ãÊÒ)m¨% ¿f#שdtAè©„FëaU©(¹Â߈‘-*ÃEg5‰ÜK<ÉL£éeÉ(›¦GdÉ_Ž=ÝFÙ/‡ð¤º†ªU1>"¤Vq qôêȃ¨†/£–TÅsæ·.­ãAfÅX6èä˜×Þ|AÝÔ¦²aD<¸LSZ\o³s¥Ú´B¡§:¬@_“r**s½ þcúA¢ûÆã¹,R毋˜ÄWÅ9N³ÊêÐH¦¥ a¤äék¶Þ'À÷uð9F: Ž©§‰BÍR¿ B?I(ÇŽkBåä0R¥n1¨¯Ì|-šN©âÜP¡ë GÀ"!}ØÝ¨¾îÆ:ŠAÕÌ•;S¡[ã÷¤2G#ôªÎqîæ¿#Ä/‘/6‰w½Iø5ÝßVpËáÀl’pö2¯ÿÆÂ„lN4"ÇÐkí16E}"ËëÉ›¡!¡V£ÀEµµÔ÷³‘ìˆg;’ Í;vW|n„xÚi 'jK`¨i'JÍqžˆ4à7æ/ÿcÑ@«ÁxŠZ¾ª*>J@o`9ÕÉ"p¦Ùz6Œœ{ˆÆø×™¦ hbÚ“w©ŸeJ½6 .'õ‚Њ ð F ‹µíÛܼ…Ö™CãhðnƒÐu“²$|>œéMˆx¤µ×‘t -Jâ¦B·é ëÇ_=Z 2j²"Ⱦ»ù«£î°.««ÍÏmŒáöU¡Ž‡˜oÍ÷$¢±yíô ­-sÓg~î§fk‹)Œ¦ Q.<­ŠÄ2•¼p¹§64Œ¬o.óή8þ¥ Sç–&Eí=Ž;OþØHp:«IuƒèøÐìA¢2ïGÜG9#40#¦ŒáÃp•ùYäcñ¦­vžDE|' ܹ%©e·_†Š:¯ì¨· P88žÖ^ƒùçWÊ·[¢HŸ/W±Tøébáë×ERåêÃ>`‹Üh)x 8ËgÒl£tâ{5~¢|Wµ|ÿd‘U!YÉwÄC0SÎ?Z®=%«0øŒ¼îf2Ù.RIq bŠÈ¶i朅š8L3† dk=.Ω;µxÍc"ö•_ñ D¢ÖÐ4Ðm;oR“´H§âáÒ²µ0žËÝöY×5ò+FâU¾»¿*.âèã>M¸^€{…{g„‰\Ñ2RVB/Su\Ê óÅu«ÅP1´£Q.ü„OùÐPè®r_›"+ØVac¦º¹c¹ºãêäúÄn:Pf¶ƒ¤¸AB:^ȬMø÷B¼ ÛþÙµoÏAŹ7 ÷-“ı:VÔäžî6™‘,¥·¾›aÂß*>í¦ÒÁsmhÞñË·…ô á§°ð]HòPïùw­k9—s»ÙðSE~$}ž?¿/ãX1‘\-+Öè»#¦\K½¬zq?w¬'2 *ÇìäÐÕJ:1T>÷TT„øaJ Â\æÖgUè .TU‰}¹Y{ã>´~]Þ©xÝé€h ÇPºn›X¹"µU6»¶Ú$Â*nŽ£f¡'Û.­zß#L5IÀÝYTRÙ¹òѬ6*–=/?'ξ·dÓT˜ÑßNÇÏŒ–XÔ§‰%]~+À</oÊ_GìzQ‹Ü4"Ý'ò¢ÍÏõýŽÚýܱVùíïù¾sU%`8ð"Œ–‹eáÀ¢œôX<Ë}ЀùÄŸeàe~8x•.n!gT8Ê”ñqÆpÔt4G¸ïÐÙ”ÛñFÅlñyß^—«w]صr定r†EU´<%Ç"jKˆÊ-t|-²¸@x6%ü7YßJšÂoq9f¦Ïdr]ùî¹çÈ9C¾U ¿¥üŽY¨›ë^"¿£<ü>)R{ð;ùÍ™~÷ž¸ÜÍb¡›¦ÉÒ¥KùãÿÀÂ… 9å”S0 c1s/E+!7ð&+M“íä߯†°‡ siaêu‹.¬Æ*]¶OTþ4DâàØh8h¶…•7©NØdÚa¯¤#e©+µm\K½M¾q‚Ýj¹²·ä&Ÿ%ßñÙã)þ8L´ãxî•lˆ÷äøÙx®úˆ€ieà¿LÎ5ŠÒ±îß·D!iA3¯HÐuù한(€¯‹`rcƒCPwÒئï:jðºp+×™?K{?í¬é÷úë¯óË_þ’ÖÖV>ððÙÏ~–H¤4ÐrçwòÜsÏuNa»ôÒK¹ä’KJF¯JêÉ5|÷zì ]vâÛÀewí. 6i>n ûvkQlÎ'è‘|i˜,GÊ•P!®'„_O§t6ÜhJ›×ŽF%§µŠÏ!¼å¡I@ùd¼ÖYUÀ™tuÑo¯CÄ÷ž»[wËj» ³ä»C>O`Z~GB MdŠ+fÉë®ÑC…ò>c"æ“ôÕ¢Lùóx?©^½íåÐÖÖÆ]wÝÅúõë™>}:ŸûÜçºÌjX¾|9·Ür ÕÕÕhšÆŒ3øêW¿zp€þòË/óýo¾˲¸þúë¹÷Þ{™5kÖ bævTÄi&*ÒíYö/ÙÞó*@›k£î”ãSbwnÂk$Sïs•SVm/°ÓKvŠvǶ Gm2mUQá¼,:<A9|n¡L›^#~ƒ¸h½c|àªù˜àXy@×jÛ¼0£á³Sb² iÑœ3ÞþÆ7uò£âfWת‹¥ïºåÒ>%å!qá œè³ Þ“÷G “†}VÀd¼<·aÎTîpXònªãùÀŸÅ-ØF×2¼ƒt½1tOôµ¶¶rã7²`ÁŽ?þxn¾ùfâñ8—]vYÉ1œvÚi\~ùåJY©©9l`ÞÒÒ 7ÜÀ'?ùIŽ;î8n¾ùf‰ŸùÌg‘ °„ßC²‹7É®Y+;÷l*OK‹ÈN ËÃ⦃VË9û¦ÿYTTæ}8ñ‹>3$_ö™¬ìÿ"ÑŽõyÞüJöxŸe]IÆøñ’l-áÓ·}оã3ª+Xú® ‹,'À<ÚÜÈ‹Ç`“<¿@Îï*¢r ´Óþùl›FŠòüETVÔN‘Uõ"&°èÛzõÞÆÐóù<7ß|3Ñh”o¼‘û￟ï|ç;üä'?)9f÷îÝD"‘NF …BèúÓŸøð‡?̼yóÐuãŽ;ŽçŸ~º#pÔèsBùݬàhr·÷J٧ʶ7TP©g!àY¼\òób•®*7Z€ÿ•+0Pضˆp•ý&T\Fd£‚dó7±Íûxv“ðÝX¼’4Ëg%»<›ó·#^¶å¢´»„¸O™&×\ ì£>?ç©xS5\9ñ®xOðÉ’7å¸c|2è]Ÿq³V¤õX¼pà‘9_•ÈÔÖƒF—žXèžR¿cÇ–/_Îã?N}}=‹-bñâÅlݺ•qãÆ•¢H>OSSC† aâĉhÚA¶Þ¼y3\pº®.hêÔ©lذÁGN…(Š›¥tÜ©KuâÈÞë³Ýv¯GÉûŽèŽ{)-[ËîºÜ3H&ººma„4tri¨2Df¤ Z´®uèŸX‰ˆþ;ºŽƒHù´l‡®ñ°FŸ Ø—ç[——[î?6泞mÑœ[Dã]'¯åe%æ”1;eJ€_°„Å?©‚…ï •Çĵv¼X.kDÓ&D®$V¥«ä»ÇÈÒž‚WïꆞE5Ñ98@ï]§¸-[¶0jÔ¨NwõôéÓÙ±cétºÐ]>»ÿþûY¿~=W]u ,èäÃCI›7o.¹æiÓ¦±}ûvÒéô töáŸqÛt…'ö(|¨á>ÕwÂAúÙóI9ÛËb—K1×·p¹Ïåþ¥å[iy„¨‰Ÿ‡,/úTWðákýx¼Ì‡Ê=4Ÿ:õº°®•Õ¡*{\|*ž?Y®#U“J䘔ȑx98“s6 jr…,=é§—(ꚦuòûèÑ£ …BlÛ¶­Ðkkk1b=öœ|òÉ\ýõèŽã”¸út]ǶËA®£ÃÝìÓèšæ4i,^E¦åÛzþ-/slÅdk7⥞4û"Lî#š¸Ü­$ÆA1‚e ièŽF&í0ÒÝYÃ`]»šçRåTn¿h”ŧ*óT|ýT9¾®Ìo°Jô·<Ž—÷Ë“ã\Í?ä{­NîxJq^ÆËìþò˜Í@ÛuÇöðpÿFEøü]ΙƒŠ|f÷á`}/9!¯å|îÆ½·}ªÞβÐKcÉÛ;XÿäzŠ¥65¯oÛ'?išš¸WN_üâ;Ÿ¿øâ‹|å+_áCú555‡^® Ç©pÝÍ>99P=äÀÙú> 'ä >¹ªr½¨ÒïÈo}ã ¯b·xƈ?qc^Be^°JràùUÃʬ`ä{Þ®ÐÝ€Wb:œ®!5w®ä¼,Cîøkr= äûÜØ}«()®õŸòyµ2%<—3S ô#r ËäyZÀz#^óîJ&Üf¹î¸\[ȦÑ>¹§‰âä7tš{m¡—Ê€b¦ÈÛO®'µ]©Û_ÚWW>Þå­r~úà?ØéooogÁ‚|à88@¯¯¯§©©©ÄÂhhh(ûTÀÇ`" Ïàj¹ÅµezM™}”è¤m>˽¬r[Ë+ Ý =–€B #A³-Œè6dÓ0qކûáäv8ÕwouŸf¹]DDZ„-AFE s¾ €[â¶[4é >{£cNw¼% @{®Ï5îgÂJ‘Äx™ÈËïØ"×5Í÷žåc´¢ZN’ß…ä5q™ïFÈ5‚j\ã¦AÎ’ï\#w~n™K³7¤bè¥,3„Ùלì êWZJøéÙgŸÅ¶mt]gË–- >¼3ù­s×…=ÞØ±c) ˜¦yX8eÔ¨Q¼ð ׼yóæŠ×¬ `°É] 'W4Õ&»ÇçÛÁ†pÐk¨Î½Ÿ²VY ý?”ùYá-²O]å{ •›ÆîB¥ü}Jö{Føª(@X‹úCiÿ ÅŠ«àï90¯än^Óìê2 Yf"…Ë| –¸É7Éoš Sû‹ªzqïÒvY«žtÔ-~V ø‡„$&É}] ‚jñ@ºÔ›R•†³h‰Ó?=»óÿÈ/_õäC<Žiš‹*EoÏž=X–ÅÈ‘#K7ÃèL>2dC‡¥µµõàýcû·Þz+gžy& âiwÝuƒ›ÜJé1¢ó"JIØç’3}°¦— €±èia¿HehÔâ’['Iq¹ŒdÛv0º£½ÊMœ5ÔFŠ êÐýòd¹šç…)ÝÕØ2íÔ­Gß+ª‡›7¹\\ã»ñ&·›>«Û‘cÝr˜wñò{ÝŒtK*/ÇÖ”iî2Qô©7y±¶‰MòYÝoÉëÿæsñ?+bòÃä1T‚‹ß Wë£;:7Cž›éðbî$U¶éÖ-ï׺ö³Ÿñ‡?üc=–%K–pá… …xì±Ç˜?>C‡å¹çžcüøñhšÆoû[&L˜P@ ù¯yÖ¬Yüüç?ç /<,Þ‚¾• ¨&Q»VfÈNl@wa§’ ³Uޱ«äýòü¿ŸÓþÛŠ×ÍΕ¬Í¨ºø³}¾Fñ0†PÉ}S(­q×ÄÀy•žu¿?F‘kï‰Lz³v’*[Û¿ ðþ˜1c8ùä“ùéOʧ?ýizè!ÆϤI“xöÙg2dsæÌá•W^!‘HL&yõÕWÙ½{7G}ôÁú)§œÂ¥—^Êm·Ý†mÛ\wÝuÌœ9súp¼>HM;iÙbÕ²mÞ“m;¡`“-•Ú‡Æ/ÎrM,t; ‰$tì!€#ÒЊÛ 'ú¦¡äŠ^£I·EÔ'ª…1Øv–1ý'„Á–Ë/sÕ“­òÐE•ù@™Û.%¿Òý¥¯Š%|´¸æçøÄ`Nc*]‹öŠ¢4Œó¹®–‰Bò¹ð÷ˆ@™'Œì† Þa³•dù´·1Æf*Ǽ\¥Àµc·‰¸ÕDIéêIRœ?Ë}Ĉ\ýõ<ðÀ<òÈ#Ìž=›O}êS¤R)î¿ÿ~Ž9æ†ÊÿøG¶mÛ†mÛ444pë­·‹Å ·Œ9’믿ž_ýêW<òÈ#Ì™3‡K/½tË€8ªÂyŠ@ÓN¼Ìu¿·í=“dä O]o½VlÑ•,EãNä?XÁ¹¨xðÛ¢x–ûb’x%™Õò­Í²çßóYó!T]ùñ`­ðö.á7ÉíTŸRàš0~y³IÌ–"WŽÂk£^ ך²•q{íù‹ýž¦4Çå÷6‘ ³|ÊúV¹N¸]7DΕÙÖ²uÉ 4Sb³(÷n'º>Iõ²—{<ç†nà¶Ûnã+_ù cÆŒáúë¯àÏþ3S§NeöìÙ¬Y³†¥K—R,I&“ÜtÓMè±XŒE‹±hÑ"Ž*øXf¤l«e²ÅݘyƒÏî”mÙ"û.~rõ[w>ºvÕ°û=ô!l+‹ahàÀÑP¿Û;}¾èÅ‹ÜÇV¼ŒÑ7…‘¶ˆ²·Ìµt”|nš0¤î_n`ÀŸáàþ27ކ¸¡Üùè­>Åý¼›äv£ò»Ù"Äîy÷Šû0ç[½Ñþ/Âë0g‰åá&ä¼)Ì“Ϲ蟵+¨h§Éyþ)׿øµï:úÐõnÛ:–w‰š?>óçÏ/µÀªªøÓŸþÔùÿøÃÅ1gŸ}6gŸ}ö$,ß®Œ T½ ªèTßnw:eãÚ¨½%Õæ¥@ŠUx•jàaxÅ´å`µ[L”Š„O™†Òö²ŽOErg@¸FC‹ |×°M<‰îÿ«åµÊg-T ê&*§8Ÿ%²b•¬r>÷·ôG? •gt+'üÔÐÐPÑÓ}Çwt>_¸p! .ìò™ S\ Eö6ÊVr›…žŠ×<±/“Õµ3÷ú7njoyuŸS“ÕŒq»*+Åžš$Ž&¡ „#Ŭ4áS£ ¦¨üQz†‰•òi²Ëe3g|@[jÛE[‹¦Ÿô‰¢˜Ïþ6Þh™ˆØa±º_ue¸¿;ØaŽOóމ`É Sº­(5û6o0Ë,Iñ¸×´E„ØzJSÝsû= {¨\Ÿ{"*î–Ð,ÃTÑŸdWˆ¡ïÏåÐ@!]Äüx*CøÙmÅdÊnYæ—r@ÛEÕÖ(m¬Z™IPdq¢Â«,­x× èLëtìa[d@ÈgJtTøž½xU/ë)-/‹ú<㓎ÏÜ¡)n ØTÙÛ>>ï«–ã›EŽÔøÝoÞDPe´O‰¥>¯q¶_É_.îöt XzF…ë¦o݇‡n¢(õ®B±Kd”ÃÁ—¦uèÝÉ«»E€^BSPý›uærû)Ó)Ý©½¶l³f±Ú5Ù*cQ©Z¦8¨ý[Y¥«„4ƒ[ßøÇìy™{Ö­ä‰|#¡1‰& EIR»j¤TþäÍ0ÃñÆ»´úÜÈÝÍûM£Z³FåXwXüªY7aî]±/ÎÃkÀâ&Ï%äõ)"\öú´òÏsàÆ¿ÜþZ)qÓ}×­¹Õ§\„Dl¦eõWŠ^‰Ü¦å7ì«!ḐTÊþez¯\î š‰×[q§ðxµÏ—å¦nÚ¾Ïæ3 6ËûU"CÆáåÛhe vQ®¯J®Y&Wt–¼¹€@ÅÉ[|Ǻ }»¬ìj*'ÔæåZó"GšöcªùeÀ¡R£ƒñ©‡]3×|Û÷5ym^êE€ý¡µ_îL¢½y®³h—j µý5ãµ7¹ò½¨¶Sð‡Y>a ¡d”|GDµA!­Q,8$¥W¡i‚íT.ÝØ·æ¯2ÞÝLôêQ¨7Î.Óz]—Þk"@ >—»?ÃÝM¿/²˜E%¯½%Ï'È÷­fs}nÁR< ¢\Ô ÃíDÕ—§÷Ë,*ð&ûá–âYò›ÙÁ<ôA.±?_ŽñçdÇd÷”ÖüBlÕ-ÂY'ˆêkËÎÛÜå›Nc ÿÁ+è8d ±‚ñ]\¿®?Àe~>Üi¨¨|½\ÁN9WUŠõxé¾TŸË‰' &ž­¼ï¼þx·%^|ž°Çå» ´k…W'Š7Î4í¶p®å]‰–•|“ý÷ÙÛ.¿ËÙÏçÖ‹¤®’»y¨³€~XéT¥ˆlõOŠÞç/ºr{8»‘¥vTÁƒerû1M”ç”°ª¬ÞhLgs¼†ìz^›|,)­ÀˆX˜|Ê$š4(Á2!R³•Ûi»Q§gµÓÄ…å2ìrŸë­ÍçzÚWã„÷P^Ë÷™ *V½S˜µEl¨¬Ä³¢<¸Œõx™°‹÷ã».·‰î㨸ûa¾žût7Ëjjœ£Ã¡í®­z¹.÷ÁGnË×ñ¨èì˜ ðéæv»é›.ˆ»rÀîš$»®eg([©¡–kE¶›ýÒ üEñXåÃļHxºRò"¥ÆŠ,hÛgï ¼¾ .¥ÄÚŸ"ü5WÝ–ëzS䃛Àû'yÿl¼V±F™H‹7¢MV~„œ+×2  ¿="×î¢d£w+@ï7Ê¡:טÁ+î*_6Ç·]§‹ Ùæ¯ˆ†¶nø#·žÚ$¨¬’«0?G׸t¯sy隉ŠÍ¿&ƆëyëkÊBËÜo¡›Ýzé@ïgʈv=/s=%Û÷¼(ŒÛHÐÔäNönÍ|¨8«ÖúX)¯ºÄi°;gwl(„C„ Œøri“aà ‚’áï¬í‰žÒÛx #åV²ì;6ÝjG5¨#ß·/mz“¬HDV,„ŠÕÿ“¾h»10é@²ÜH´´Šàe®o…”ïs}w–ØxTríñÔÇ«ÍèJÛ©f{I×¼¡@“^@c.U ­˜æÖ=µ‰wj¥]]e¡/JµòâµÛ&Šù¾¬ý"Ukä]Vt*^Ÿ?BwQo³Ü@ïs2Qi"nß°7PëVÙ®s} ~*ÚÔ,l3™ÒfŠn ˆ-MÐã‚ÿyE! Z1C$ÂÌ‰Ç ˆ¸©¥d‹ ;êj >†´ºq3u_îŽÂb§ìÙ‡{Ïm¡¸¹›ó¼) ”s%ä¯u$Å.÷Lo  OD9¨Ÿœ„JzmÀ›v’Ȇ‘#ÀmÂíÅ÷>ŠÍŸy k™È0ûÃA%—n<ˆUpç‘ç`ŸjEÊ·¹?j~ƒ ´ÈФ“÷ìP*õA }@ŽŠ©§Py–nôõŸ²}/Æ+K‹—_©á|¸É-ŸƒIú¸ØÐUe¹VÈJD(dm¢1|"®`+—»!›ï÷EŒÈ-)™"áɃТÝÌw7öŸzì +HŠädˆÝ™°K^w È.Åkµ2¯ÇbLn-ûÔ¥O5y9}„ê< 5%/€|0e^ûQ ŽDêIRœzSÕSiªlß•Ângc—qâ[9«…‘7 tGE©‹xƒó Ig)§¡ØE4»H$®cæ,"QÂ^±Ð êðœåÝ,{¿QyûP•ˆ©ÊÁXÍ‘ëëíÜÊÖ5Jxs³ÔwùìÕ¨¥þÜî]"#&‹Üø;*¿fUûƒRÿ<²Ã§ÒŒÞ¯BZƒÑ§€ÄйŽê–ªœ'L^Äk<êZå1T¦Z”s9ŠrÏEñ:ž£LF•d†äÁˆB1ƒæX„“²9‹xÜ ß1ߜҴ ßà·CÁâm¨ô¾£Å&i 6C/-t½×Yîííí¬\¹’öövf̘±ßVÊ»wïfÙ²eÌ™3‡‰' ÞçäŸY&õ£ÌF5<ÖEøÓ»êP qËÀ3¢è^*¢ªV(÷ø¦`S ‡ze¡Û¶Í‹/¾È¶mÛhhh`îܹD£•C6¹\ŽçŸžššN=õÔÀ<¨LYaÊ‚òd±°‡ŠÎêºÔüzìlym]g'x-2 '¤“Šk¡çѰ' ̼I,jS,øbè6dMˆk˜[\l¼g¦Š‹ý•¸b£—̬ccì÷áOг,‹[n¹…Gy„µk×rýõ×óÆ•Go‹E~þóŸó¥/}‰^x!Xì~¡¡\ÞET¿Ácñ’ßÜ àþ’Ô‘¨zŽ]#Ãú µŸÞE%Öý™ÀCw €Þ½ ð`Øq{ì1¾ÿýï³iÓ&n¿ývyä‘}žÅŠ\{íµ,Y²$°Ð»w6¹ÙìF¹ÙªdK‡ñjÎ]föþðkøÕxùÝ2¨Ð+‡ä ƒb ‹H"D!k‹käsQ Ý‚„VyzÿZ™ï¯˜Wß[è=w¹¯ZµŠ5kÖðë_ÿšáÇsï½÷rÏ=÷pçw‰”ö¸û׿þÅ»ï¾ËqÇW2< ¾¤”=Š :]ˆò¾|Jºw'=Ž1+€ùÄ øý7¨¿@éÈ­D94zϓ⚚š¸çž{øÑ~ıÇËŠ+øÆ7¾Á%—\BuuuÉq;vìà—¿ü%_|1étºs§¨D¶ãP)`º0òÙκhèõxó¾Ê‡®£«SÚ-aicãÊú7ªeB bU`fѱ‰ÆtŠ9IŠËCÄðYè6Ä´ÒºÒ€6¹1ôý=üIqk×®eܸq ®ÆgÌ›7õë×ÓÞ^Ú;l×®]Üwß},^¼x)ˆT «MþÞ×d9„7íû_>+Ü•ͨÔÑòq?õ¨"³ñÚ0ô~ôý=ü€ÞÒÒB&“é ¡M›6 Ã0x÷ÝÒÐM±Xä¾ûîcþüùL:µóõÀBï´Æç ³YÀ¯P®ó? :óYä5”ö:Ë¢Ê[Víjs‚ÊîÔð45ÒL*‘j03háVÑ&³Éå ^–åžÐ÷ÈL Ý P¦›»ZÈ<½;§Šó›¼©Íétšd2Ùùmm-™L†b±t°Çý÷ßϬY³ë¼Ï) œ‰*K-÷ ˜¿ŒJ’5(‘êŸ-¨V-ïTàÆŒœO[× –ú}£Ôë]d€“Í“~ú%Ì&ef–½GÝ Ô†atòu<G×uR©Òº U«Vñî»ïòÅ/~‘ßþö· Wff·ëSÈÖîÈ—‘Ýs·8lª«Ô$TKØõ”–¨¸Ý‰ã¨„¹”èÅHTA1 ±(N6‡¡ÛÄc{ÒP÷º£\î•Üa \@/–ƒ>‚è…ç‚£îXáoÿ*ð½{=ënÏž=TUU•$ÄìÚµ‹ÿýßÿåšk®á÷¿ÿ=›7ofÕªUÌ›7É“'‹~P¤UnIšáûŒ.üî0º^äÂx½]Ú ü•4÷=¯CQóXì@9ýõm0Zèe2 &2ÿ4¦ žš9/ˆF1MÛV¯¥R),Ë¢¶¶¶ó3|ÿûßgöìÙ<óÌ3¼òÊ+lܸ‘åË—.wWôªô¯¨R“m>@oÇkáâo÷ºÕßèY”[ýlTçô£+œÛmŸ ÍCÕ2§%Ñ*´bbQìL–î9¤3P%#Ó] =®y½Ï-Jãwü@df½ôa„¡¦jkÔ#ìiï³fÍbÇŽìØ±Çqxá…˜1cÕÕÕX–…ã8†ÁÅ_ÌÎ;Y³f ­­­lÞ¼™Ý»w ~ÐT@%Á­k{·pX ÞLCwÚb^^kÙ±•ý~¦€z¹[½‰®½Úº£YÀѤ€ß£åbGŠ Ð œd•'ñÎÏ:”ºº:q‡·Þz €I“&aÛ6¶m£ë:\p¶m³fͶnÝÊž={ذaC`¡{Ô,`î§ð(*6øˆ¼þ²|ÖÍfwÛ@ê¨Ñ‹Q¼ÉÃ~­^Æ.êq™Ó¢|bQÌTÃpˆÅ4ÚÓ0Q zÇVek ¾¤8ÿŸªú@Rõ^5–™;w.gžy&_ü⩯¯gË–-üèG?¢¹¹™|ä#<ðÀÌž=››nº©ó˜M›6qÎ9çpê©§ Þ'´ 5çÏï{AÀ8„j&S…JŽ{VøÜF¹à]îœ+r¢é ®%†<úv³†‡Q&ꃛ4È,ôž'Å1‚¯|å+|ó›ßäè£fݺu|þóŸ'‘H°páBŽ9æþû¿ÿ›E‹usß}÷±zõj®¸âŠÐ{¦µo v—k¬0íV¼„8Õ»y´€®’eè òÊÖ"BV;F<‚–ËÒmQ“Tª†«ÓÛ¶š¶– nÆ ¢ž5–)u¢~éK_bݺud³Y?~<…Bûî»I“&u9þÆodÈ!Áb÷ó¤ÓéíºäëQ-a7‹âß‚Jˆ›!–õñò¹§8¸VOQQ 4³Žßbð9LqÆt¤:ÀÙgŸÍرcinnfĈ¡´n¸d2Ù%oæÂ /äÌ3Ï‚z/h;ÊÕæfº^†øÙ( ½'‰×òµ’`p@3$G.¡Z!‹‹be „ ‡HÒ9HFÕÇM²T’Af¡˜NweJoj"‘àøã/y-‰pÒI'U<~ÆŒÁB2jBU¸ÌAiä'ËëG¹ãסâåÓENäéŸY5pÛØC;¯¡Rx€Þ °œR@×u½"_ï‹×ÇŒÓù<ô.äÎ;wǦn }÷i¢™GðÚ>º´ÕTÂF¹ðx3’Ý YdzÐMe¡kÅ,z< ™ ñ¸CH³T/wé gY Ы´CÓP& >tS§PèÆåniN“† òatT¦ûzQèÿ& }–¼7DĨ›¹¾ xå–ß@ße´':ŵ«&;gøvœîe€i­_û‘êPƒWÜ"þTK×½ÂÔ“Ð+E¬ó¨˜š!ÖºVö ]7ÔGŠ´h½˜AODp²í$â6!LŠÅ2@· »YíÝe¶1õÁÌ–Õ ‹9ÛeàQ åæž7>ùwx‚·•qZ©Ïåàf›í&-¼ŽÉ1œ×/SÃêc½[`ÛÁøÔ~$Ò¶­(‰q¬E¹Õmaðý§\‡¶<@×Q.÷p-ÓQ“ÀL7S•t0°È›•Ö¯¦ÄЫ|ú~O=°ä3 [:faÿ,fú$­ŒçCPÝŠòØU¡†¶Ñu ìáeVñ³ ä<žÛZ·2À¶ ½©•½z¦ÏJwÉmþT9[jöq›À÷' Ë,t»!åj×GTcgó$âN§…T¶lU¶l8Jt@=HÝ4(÷ÏbZèrÀsÂß#ËU0TFûJ”×.JMáu”ƒþñÅQå±íäiäQÂLe6æ_Á-¨€îhÝÊÇ ,ôþõ‘°5:u¥“Õ>Œê"•B58 otªí{}_MønRœ)ÃYRiôšQX-’ U­˜+@TÂî¦#ª‚4‘\ºùH7|àr˜2`ðªbÅ­=5 å#ò™'Q™ï§ŠX#ŸÍ£jÓû£z Õ½ò)šy ‡78C > h¡ëXÝÈ̾ƒáÐ+’…è Æ!¶£Ük#Äáu2P±6×7åðºM¹¬:Ö0@·Á)B$ŒÖœ"TÅÚV ·Ñ±(šékY^  \ìÖú@ÞF:tãn#ôJ*Ám=*&îÆÅë|bs$*)N9p¢O¸Ã‡ûƒÀ Àk˜äI€>€]ë^.÷þ¦cQ®-ð±ŒwD[Šž w{µçÊ„‚ÿ‘R¬§jÒš#Œ“Π'ã3E5Ží`Z]-tCë èµ>]ƒb7€hd”ꀣrh:|œæçï òw›XêºOdûùúT'º*H8<¸a×ÙÓ 0û.ìzEŠùìá*T£ˆÙx3ͨ6/í¨2–¤0XF´ú}Q‡:Ö0@k‡pHM`)0":v&GÍ( 3S ¤{Yî¦%*íµ| hë°éŽá€õñ{LÀ»¯Ï„ŽêGa‹Ü§ETÙþ¤aÀIdYÍãLe—ðrpÛ" ›= ÷'½7€%ŠY…ÄÂNâµqÍ ú=¿‡r¹étÍŠ÷SZÎk€#¬’âL t3g’HB&å5d|ª–ã¹Üù?˜,tºO€,ôJMÀ3(—úà<”'n¯ð}ž·®‰C?ã<Œò"Éð*[x•xÝ3@J}w2À컯 ½"íEe²Lö©Zo¢¢UCQõæ¯áÍDÞé>…@,t'­sD"èf‘nceòÔ&mÒ- Уâ‰):*!α¼=R °`à“I÷³8Ênâc=ƯýkLÓdâĉ|ë[ßêÒÚõž{îáé§Ÿ¦P(‡ù÷ÿw.¼ðBt=ˆÇ÷­$^!ÏkñªWÚPñô©ä+E©?G%ê´ð KHr³¸ˆ•ÁíHÛ(ß9á£uëÖñ­o}‹t:Muu5×]w]—î‘+V¬àÎ;ï$ŸÏcš&çž{.W_}uèû÷•€ª9ý›XÖkQns×½¾¿ØGBôe,-£Î£i`eÀáaËM£˜5I&!•rˆ„ÄBGÕ G:CéúÖ­[ùÙÏ~Æu×]ÇŒ3øÎw¾Ãƒ>Ⱦð…’þÍùÈG¸è¢‹ˆÅb<ÿüóüà?`þüùTWWkÞ/2 xåb3UøyæUDŽiïGУfµ7a±…"«ƒ.rm õÂBO¥RÜ~ûíœuÖY|üãçÑGå?ø>ø`‰Â>mÚ4¾÷½ïQSSCss3W]u'Ÿ|r0>uÿ45µJlâ3ðjNn˜l>ªMì±xM)2@R<ò)ˆF!¬ƒe¡éf¦HMÜ"»×"¦Kº{óP­uMŠs÷‹[XдРÝ<|€¾|ùr†ÊyçǸqã¸âŠ+øûßÿ^2#ਣŽbìØ±ÔÖÖ‡©ªª ¬ó~£¨ðýdTúÙ\à‘ûóÈ€þ•d×_”À­—w(a¹f¡w'|ÛhçμñÆ\vÙeŒ5ŠK.¹„¦¦&6lØPrÚaÆ1iÒ$† B,#‹‰D }ߤ¡&&ˆ—OjP£3û8F!•çÕ¨ÌØ‚#*¬ $"øM4±Ð«’°c$"Þ×¶›*r¯9A }ÐiçåšV1íÍj„@Îóà4773lذÎÿGMkk+¹\®Ë©ýë_óøãÓÚÚÊâÅ‹‰ÅbÁz÷ >€ ›E9/ âêûK€ÕÅpåÁL`ý×Unb3&ë 3ŽÉ~©ƒ¨×T.l Ú÷(Y°·8 €l6K(Â0”{¶®®Ã0hnnfêÔ©%§y饗¸ë®»xï½÷øÐ‡>ÄŒ3@ß?¥ñ:§›(Ó:·ÍÜ­I×P1ø·PS™â¨q«;@Ë–Ì… Ä’ ;h–©bè–M(´;$ Ïôn/@ÂQsÑÍÀ\Œ\.¿Û;`Ýj3ïñva`YÞݵ, Ã0ºŒK¸øâ‹™?>ÿøÇ?¸ûî»9ï¼ó¨­­ Ö¼Ï)+ü’›’ÿsÝW@5—Š ½%çê¯Úôãvöò"SÅÅ9¼ܾb¡—(õExçMèÞß¶AO=õ‰D‚‘#G²víZY´hQèû×ÔV5ëy*–î·ÐSÊBϵ£Ç"hº†æ8èšF*U> =eÂXÍ;«Ûò5À÷A`¡wW²b•ZÝ÷Þ{/¿øÅ/xøá‡Y¼x1^x!mmm‹ÅN÷›ã8üêW¿"ŸÏsì±ÇòÐCî–:PÞ•Ì:há_A”9ÝnÀ€úÐ{Q¶‰D¸é¦›X²d ?ýéO9ᄸì²Ë”¨°¬Î\mm-¿ÿýïimmeôèÑÜwß}Ìœ9óà=ŸÏÓÖÖV⨭­­óôð”hº}©M‹Õîä”¶®vC ˜Æˆ†ÑuÐml FÈèT,Èš^›Ë÷êÐ8õ¤Ù~™V6vìX¾ño”ÚŒuuÜzë­ÿ/\¸…  '„eÑÒÒÒ©lhšÆ°aÃ*ÆüµE¹ÜߤûXù@£“Y–ówl†£2x:Ì Þ‹÷Ãá0×^{m—]sÍ5Ïç͛Ǽyó*úh˜þú׿òå/™SO=Ã0˜={6ÿùŸÿIÂÍÞt”‡"4PÝ“;ºñ§hxým/)NÌv¨ªBz<Œ¦ih8è¤Òb¡‹žµ Z!Ã=Î2Àé}Ð)nË–-\pÁ}ôÑTUUÇùîw¿[’­?ø´°Fytg סBi©týQT¹ìj²dÙúáóBäDÑA»ÜO>ùdîºë.b±†a‰DŽð;Be¬ÎB5˜øó~î˜ èÐYtlÄUSv;ÕUPHaDàƒ†ƒ¦id20èL°Ï[©C}z/;Å F=z4·Þz+Guš¦½OJèŽÎ@ÿ=Ð<€®M"Ødi94š9Œúa/;Å t7ŠuëÖqË-·pï½÷²wïÞAìnï)%‰¨v ¨²£Ëè¾×dÊ Žº v’5OJDÐm M,\ªB ç¬þÍ ¨Ÿ¨—e+íÙ³‡ÿøÇÜyç¬]»ö} t`ÊK7jÚÀ1à$lÂ,þEUÀ‹‡ÛBïac™~³ÐÇ¡±±‘7v=(âƒü 3fÌàÿý¿ÿG}}=ÿüç?Y¸p!?ýéOihh8‚ïP*¶¦£²_[ö¡•ºHo=®´z+ UÕ°s¡ª(dsDb:– ¹TÕy€žµ@´ú w¹ïÙ³‡—^z©â{Çw555|ík_£¡¡µk×ò¥/}‰ï}ï{œ~úéG¸”^‹jæR@•¨$2Pnw‹ϰŒ ¨â¹€ƒ…>P†³¬]»–¿ýío]õ¿XŒ“O>™éÓ§3}útN?ýt–.]ʺuëʽ xѷѦ‰u;˜™ùE`ªQ„ÝCGGQµz3bb¡ç ª­&<4 ©±¸†mjä ¨Æ2–xllÙA2Ü¡¦4ªs·ë1Ûy [eOݽ{7O<ñDÅ÷FŒÁ‰'žÈ§?ýiN;í4vìØÁO<Á¼yóÊ,õfŸ‹Ì™ùn§8“þŸ}~  >xŽvë~&\£•{\(ãS5McÁ‚,X° g×í8ض]ÁÝVœzjèmx5ç=¡‚‚c=ìU­_«j ×A(ÅjOKêX¶XèR¶V°U—Јãõ¬ ÊÕ %qû7)jyZèG}4÷ÜsO¯d@å¾òÃ09à–¥d qr¤ÙˆjqPï©ÕÜ¥¦ÞBÅ`ŸúðÃ+È®«cÅŠ >œ™3g; “ܱ©bnk:„BÊBÇQÝc i"Uœt†XBÃ.häóP%Iqyùh´l–ú K9f3 wGË—/ç­·Þ¢¡¡ÆÆFžyæî¸ãŽ÷A}0Ð`>c ª™G{0‘ëPë}Åȉ>Dœ¦ &°uëVV®\ICCK–,a̘1ÁM,õuÐ9ØA‹¨Ñ©Ž šº¹¡ª(V{–hÜÀ²¡hB<¤6CÎÇñzMù÷I`©prËìï1È}̘1äóy–-[†mÛüä'?ᤓN îý€ Ø–'SÀá-ÚTÝû‚ìÈ€b¡ŸvÚiœvÚiÁMë‘Þd‚Œ/‚n€¡£åRD“5dv·’H8X5&U“Á,9Sí‰P7²ß Õ ?À,ô#¼}„ ,^¼8¸×šFÁ˜åÃf¡—{@½!éãÊB× e¼gS„’#p29b ¢ !CåÏᨄ8ˆtÃŒÅ>@-ô^úÎ;yøá‡ijjâì³Ïæ¼óÎërÈßÿþwV¬XA[[sçÎå’K.!™LëÐ>¨ HÒBš7€ rh-ô^ºišüæ7¿áõ×_gΜ9ù»±±‘?ýéOlß¾Q£Fqùå—3f̘ œÒ÷B%£¸®ö<Ï©„¸ßB·ÀÌ­ãd2T%Ì‚£Ýò,tÐ]+<ˆ"íÜêæáÓÂÒé4_øÂÈårœqÆüð‡?ä¯ýk—Ó>÷Üs}ôÑ,X°€åË—óµ¯}B¡¬w@û ñÀ…˜Äx†OSÈ$|7£X,rÛm·±lÙ2.¼ðBž}öY¾÷½ïu9íŠ+¨©©aÁ‚D£Q-ZĶmÛ ½IóýÍ+µÐÍ"Z±@¨*ŠÉë˜&„|%ìy¢ZÐéiPR/]î/½ô¹\Ž/|á TUUÑÖÖÆ£>ÊüùóKº¯}ó›ß$R¬›L&Y¼x1¹\î}Ð¥1 —Cәج¦…L”‘Ð!ô^XèMMMüõ¯åÁdâĉÔÖÖòßÿýß4773|øðÎÏ}ö³Ÿí”§œr ¿ÿýïyçw ½-uwy  FB=5L0 u§­‰*-&‘„bÎ!¤I"¼©³DÕÑ}j èPP/“âÞ~ûm¨ªR½N8áÞ}÷]ÚÛÛKw–0²ã8¼ð L™2…h4h=Pw ®êþS±ôCF½LŠkkkò,FŽ Àĉ …B]¼¹2à•W^AÓ4 ýÐQVµ}5P@ ƒ–Eî6à, IDAT³òÄ«tœlŽdÂÆj ]jÓrÄô}+ëlYè¹í°ëIÕË }½‡ÿ¦Y2¥,cYVç$³9aÛüå/aéÒ¥Ü|óÍ Ô@? ¨c+m<ÈÎÄf:ïKs¨-t+£d@~» øKÀÕ|í/ù …BhšF±X¹öíí·ßæÛßþ6×\s &LýÐÝÕ0j_3N€Y€bp2Œ•ÉOh¥Iq(@kû?s@ƒÐõ10ÚƒHê•Χǧ¥Åk_³sçNêêê*;yúé§ùÁ~Àw¾óæÎ¬u@= IÀùX<ÁvÞ£ƒéÁ¢ô¿…ÞÅ垀áŸöéZ¿ì|‹Å0M³sîy[[¦i–¸Û]Ú°a7ÜpýèGùä'?‰®ë˽ÉMŠ iÕH™ˆV¡Y94C#¤ÛËS•tÈç¢!S f‰‰WÆ}¸îw7§*h23€™¹»„rÊ)ìÙ³‡eË–±k×.~ûÛßrÆg‹Åxå•WH§Ó<þøãÜrË-|õ«_eÖ¬Y¤R)'Píê MD •*’'‡Â–ëER\}}=Ó¦Mã‰'ž`Ïž=,]º”¡C‡2iÒ$Þ~ûm¶nÝ À»ï¾ËâÅ‹9ýôÓ¹ôÒKÉf³˜¦XèýK^:[ ô*±ÐSI‚YÄ ‡±ò&X6ѸN:ɨwTN’âܲ4§‚e0å¶Ð{Ñ)n„ |ö³ŸíÌj­¯¯çsŸû­­­|îsŸãW¿ú³gÏæë_ÿ:Ùl–{»ï¾›êêjî¹çžÎØ{@íßÈPép;F«@ïNøbè555\ýõÜtÓM<ú裄Ãa®»î:B¡·Þz+3gÎä+_ù wß}7«V­B×uþùωDøò—¿zß‘W¢V齄kÕG̈UaØyôX#—FwLj’Û:ª£žö–µ ,îà$7)®;Ð÷Ñå—_Χ>õ)ÇÁ0 B¡ŽãðÒK/‡X½zu‰E®iZáP) œìà𹕹|šf¦²%Xšþ ›^ÏCŸ={6<òHç\7îg?ûš¦¡ißýîwùÎw¾S"Âápè}kï²^ÙZ! ‰šY„p;g¢Ù6ÑXˆTÖg¡;’¨Ðƒ×Bïec™Jà\þZÐÁÑ8à\þˆÉ_ÿZèÐ)ÎUÞ÷õZ8®ø™ÐûÝbw­öéášè( ² ¡å2èŽIUB£= 51ÐràXv Jóbæ 2@ïN;’:,45 sGçÌB? ’âúÅR¯dRˆzËÌA8ÅD%†î8DcÎBB 0Û´­Ý¯ðuÇ€ƒ fîE§¸€:t­K_4QMRÕŠ}“â@päÎH׺ºVoÙ9ˆÇÐÍz$Œ“+ kÄt“\ÁQ“ÖLÕP.m¹l׳Œö`´êcäb7àFtX( œ åm4îf »;%M@}ªÔw'úÐõ¨d‡„$ÕQ —Zè…=hÑ0v®H(BÃ$[€˜„FRTkÁð•A è…l€:,Tœ<¼h—ý%ú»“ F2A ÝÊC$†QH£UG!Ÿ#ÕѱÉ f¨›lÛÊåžp‚¡,G, 75 Ãn©‡B [ö—…~ǧ.÷¢}ÅÉ+}Æ]â‚ÏBÏB$ííÕI¬l‘pÜ@Ç"ëºÜe¡U‡^®ôûàÐáºíãd:tX©5/ÝáÿÐi",I_[èÝÉ€bß}]èæFÝÍr7ŸgĈÔ××w9¤££ƒ¦¦&R©cÇŽ­8¸! €zoÛ¬úЋ=øŒÿ_ÇaóæÍìÝ»—ºº:ÆŒS2. X,²mÛ6R©UUUŒ?^u• V¼?É¡§¨²ÐÉ¡A,¹F,ŒÕV$Õ)¦Mtb!Ÿrç€î”*{¥>Ⱥt÷Ýw³lÙ2† ÂÞ½{¹óÎ;7n\Égyäzè!6nÜÈ 7ÜÀµ×^¬s@!2àùçŸçûßÿ> lݺ•Å‹sþùç—|¦±±‘Ïþó´··3uêT~ùË_Ç—û¡ôèzœ è еB#b`f Ä’Ù ˆKØÝõØ>@\ïG.½öÚk,]º”Ûo¿Ÿüä'œp Üu×]˜fiì¿ýÛ¿ñ»ßýŽ~ô£Á¢ÔGt @K°‡öìÙÃwÜÁu×]ÇÿüÏÿpíµ×òãÿ˜l6[ò¹éÓ§óøãóµ¯}­d~z臄ÄB×Cª§«XèN¡€60ÓbUù´î8Ät<—;ûŽ‹à>ЩwAô×^{Q£F1yòd¢Ñ(çž{.¯½öííí%gM$ÔÔÔTìåP@FGS0?e‰`IúŒzDonnf÷îÝœp D"æÎ‹išlܸ±Tý ‡©««#+­J\R@4쬲У1(Ð"aòé±ê¹´jºYSéÍáýxr@ÈäеÈt/ª‰‡›K¼«ó¶¶6êêê:ÿ1bíííäóù`)êgJEšYÏsÀ„`QúIDì•ÿß@Í©‡|>O(Bו­]SSƒa´¶¶öèÛ@?h*/cóeqŸg@KJ[B„ÃP(Ž€™.HF1;t"bص hvÐXfp’I×®PëcroŠZ<'“Éxj`*E,ë’P@ýCqÔЖõd‚Åè#ªÔYƪðäÉËÛ²¬Îñȹ\Û¶I$zæ1 \î}èZ…ÿÝø¹ZZº8ÒTF×pòEô°A!U$– ‘Ë@T—$8ö!!jAÐHf°zy ClŸ)ò¨êüôÌ™3Ù¶m[§6¾bÅ ¦NJmmm°”b™Pßz¥nRc|2`d秇 B<gË5Ÿ~ýúõضͤI“ ýÐÒ¾†²¤A¯’¶¯YˆÇ HRœ•·ˆÆtò» !m_±`o⎲Ь€žëæ3^W‰O<‘)S¦ðÍo~“É“'ó·¿ý›nº‰½{÷rÕUWqÛm·1}útyê©§X³f ;wîIJ,-ZÔ%žP@CõÕJv'¼º¶‘#G²páB¾ýíosÖYgñüƒO|âÔÖÖrã72eÊ®¼òJòùûÙÏ2vìX6nÜÈ5×\üyó8ï¼ó:t(š¦¡iº®sì±Çrì±ÇvÊ…ÐûÝj÷ÅÐu÷dœš¡‰–I4d‘í’5KÝ㎂š…î¦U˜ôù´½€ú];·zÀð>q:d ,(y-™LòéOºóÿiÓ¦1mÚ´`yêšìÅd9ÿ‹ÁÅXÌ šÁ$ [=†Á¹çžÛåSçœsNçóh4ÊâÅ‹»|&ôCBi ¡,t+ ±ä3èa-l`™FH#—÷jв–²Ðq*‰þ€>Y=ÐÎõ, f„œ lÅäÞf‹rJ}Ï-ôƒ¥Ðû :s4UÒ”= ÕIpRè#¬cY±M& ]Òþµ|‹ â\Ÿzçr( AÄ”vç!ô¾ëžúAQO³A3 IÙ•xriô°1°ÅBoÏ•ÆÐ³¶*p (ô€ h0Rïbè 6ÒK­ð}~FSX(©z¸ÚiH…B#¬ ;¤,›pÈ!›†á:YîSM*h°RàrhpS‡@RPÈÖŸzßzP‡Þ/V»Vv³Š '¥CL’ÕKcÄBh:Ø–ƒ‚l’nÑ9ÊBÔ n =ˆÐ`4Væq6Ï¢@úAzw2 ôA`¹k¥€n$@·ÀÎ@U5Ó„aŒ|–îÖ,è!ÏhËXªkœiu†ÕtÌlvóTµ€"MΡHŒçÐÙú’ÓÐw’=p¹÷«¥îúÏ‹ª± 6˜)¨®…Ý[Wǰ:2Dâ:š¡‘ÉBu˜Î&íÛMMñ¶F þ›…ÞóÆ24°èàU`+©`1л“A }!±ÒBqÐm•W“„íB‰0N*C$¦£kÙ$«”Œ·,ȋ˽\üÛûØ6 4² ÛÞÀåP@G.Ù= "*ª¦%@OƒS€X r)¢CÂÐÑA,Ý$›ê* L[XÝèÅ`‘±…z@Ù€ÞóÖ¯ýè;vìà‡?ü!Lž<™;súS[[¿øÅ/X½z5Éd’ÿú¯ÿbúôé%×'mÆÀqZ…ÿ 2]ÇVlMÁêÈ’ˆjh:äò—{ÁÓñ\îݹÛôŠã*.@ï…¾råJxàÚÛÛ9餓¸ú꫉Çã%Ÿiiiáç?ÿ9¯¾ú*#FŒàª«®bæÌ™ýÆw…B»îº‹Õ«W“Ïç¹ýöÛ™8Q{´,‹Çœ'Ÿ|MÓøØÇ>ÆÇ?þñÎñï?p$]³+ÑK5#è@ïCà‘/zo¡755qçw²yóf&L˜ÀUW]Å„ J0M}ôQ–.] Àe—]Æ9çœÓ}Rœ¦iLŸ>SO=• 6tŽux衇xå•Wøú׿ιçžË—¿üešššŽ€›°õ7ˆÒ1ªÒÇUÉ¿"¼£Ò„«ÂØ© ñ„0±mѰl(•…Çk¸?[nóûd•3[Ý<<~jnnæ[ßúóæÍãÆodùòå<úè£]Îzï½÷òÎ;ïpÓM71sæL¾úÕ¯–Œ]íkr‡úúz>þñ³qãFr9ÏâXµj÷Þ{/W_}5 .äÇ?þ1o¼ñÆûTi׿ÃhDã&ëc§î‘/è ð${.—ã–[n!‹qÓM7¡ë:ßýîwKp`õêÕüìg?ãꫯîÜôÚk¯uè£FbÑ¢Eœx≥N‚b‘¥K—rÅW0cÆ >ñ‰OÍfill|Ÿ»XüekRƒ®Eå%4te¡GªÅB¯Ö±Åx×5±Ðme¡ÇâãƒÛBÏuóð*Ë–-#™Lò™Ï|†Y³fqå•Wòä“OÒÑÑQrÖ§žzŠ+®¸‚©S§rñÅ“J¥Ø¼¹ÿTºh4Êå—_ÎG>ò ÃëMlÛ6O=õgžy&óæÍãŒ3ÎàŒ3Îà‰'žnýC££ÆC¾A{à;¥¾;à­éŽ;X¹r%ÿùŸÿÉÔ©SY¸p!6lèÂßøÃ8ÿüó9í´Ó8ýôÓ™;w.Ï=÷Ü—­µ¶¶’Ëå3f  ¦Ä >œ={ö¼Ïo ßR×Õ 5¢2§EÝòYbÉN:C"©ãضzKÌñ¢EG)ȃÌšyÏëзoßN}}}gHkòäÉ455u±¾ÛÚÚ2d‰D‚#Fô+ ï‹ŠÅ"Û·oïtjÿŸ½3o¢Nÿø{&Iïû¾9ÊQ(wPN•Và'‚¢‚Èz®"®¨Ë ¸ë…Ȫ°*àŠ¢(¸ë… ˆ‚t9åZ @zÑ+msÍïLÓ$M/hBRæóz $™édò=žÏ÷y¾Ï!´iÓ† .`4*£¶õ((a€0)—EèMC¯¨¨@EË6[TTjµšÜÜ\›»fee‘””dÙfk×®gÏžEýöÛo³fÍš:¡Ñhذa‘‘‘WôsþøÇÞ”•exX'D-ùÌþÀ4óË¡ð¯gÌLý¡P¡e(ýB’{óg#æZ.¡ ð|¿!8q·²³ÑYžMAHHwß kð:¦»Í{{ÓšCÛÂ{åtX¹ `áÂ…Œ5ꊿcêÔÖÛž6:ýÌwPÙÂßà‰­ÜSÝôm‡ñã{SXx¬‘«üˆŽŽnÞ2« ž2e ·Ýv›Ã“aaa ,²³³éÖ­&“‰ÂÂBÂÃÃm®[±b…²HSpÍ!!!ÁáB¹!ÄÇdzmÛ6 jµšÌÌL¢¢¢ðóó«3÷Š‹‹Ðjµäçç“””tÙÏÚ¥K‡{õ5ßUÿbDC\\gΜ±,F²²²ˆ·1ÍÍn  Z^}õÕæ©~þþ˜L&*++ñ÷÷çâÅ‹Fbbl“€'%%‘••…$I‚À™3ghÛ¶-ê   ‚‚‚êýƒÁÀ™3g8þ<åååüþûï$$$ÌÈ‘#Y»v-‰‰‰>|___:wî¬ô¢—òÏþ“O>ù„=z°jÕ*n»í6Aàƒ>`ôèÑDFFZæ]tt4?þø#WDè^^^–­³úpîÜ9 ©ªªâôéÓ„„„ÃÈ‘#Y¸p!C‡E¯×³}ûv^ýu¥3(¸ ÄÆÆÒ¿Þzë-¦L™ÂÚµkiß¾=mڴ᫯¾"""‚~ýú1nÜ8žzê) „$Iìß¿Ÿ»îº AjÄÆWPPÀüùó)**¢¬¬ŒˆˆæÍ›Ç°aÃ,ak{÷­¥¤¤ :ŽììlJKK ´„¹€Ù™&//üü|üüüÌ+ µ{…ÄWVVrüøqË{:vìèVÏ)IÙÙÙ@BB^^^n;X%I²C âââšmnrÅssñâEôz=mÛ¶%000‡iåääPXXHPPIIIu´Ñ+ÁîÝ»yÿý÷)--¥_¿~Ìœ9“ŠŠ æÎË‹/¾HÇŽ),,´„­EEEqÿý÷“ššêÔpÑ päÈòóó cذaÌ;Qùâ‹/ؼy3¢(rÛm·1nÜ8DQ´ŒÏ’’DQ¤]»vx{{[îY\\Lvv6¢(’˜˜H@@€[½^Off¦CçÎëXLÜe^B||¼ÛÉSk˜L&Ξ=Ë¥K—l4N{ëîÕFEEyyy”••m£%››‹Z­¦M›6uBK¯/^ä•W^±„­Íœ9“¶mÛò—¿ü…ääd¦M›†Ñhä“O>± [>|xã„~¹Ø»w/?þ8ÅÅÅtîÜ™?þØrîÀ<÷ÜsÄÅÅqáÂþïÿþ;ï¼Ó­bW<Èí·ßÎèÑ£ñõõ%66–Ù³g»•ÐÙ»w/‹/&&&†ììl&NœÈÔ©SÝv"WWW3oÞ<Î;G—.];v,C‡u»ç|þùçÙ½{7™™™¬^½ÚòŒÛ·oçÿø‰‰‰œ?žx€1cÆ´‚Ü -òòr¦NJYYEEE|öÙg´o߀²²2þô§?¡×ëÑét$%%ñ׿þÕ­¤¹¹¹Lœ8‘ääd Ù<úè£$$¸WäôÏ?ÿ̲eËHLL$++‹x€Ûo¿Ý­ÇÅ}÷ÝgY,Lš4‰ë¯¿Þ­žsÆ ¬\¹’sçÎ1mÚ4ž}öYÀœâÁ$ €ÒÒRÒÒÒxüñÇ›ì_ãìÕS Óé¤ââbiíÚµÒ¤I“,Ÿ›L&iÚ´iÒ»ï¾+UWWK§N’(effJî„HÆ “rrr$½^/ ·z>­V+M:Uú÷¿ÿ-UWWK»ví’n¸á©¼¼\rWTUUI<ð€ôÞ{ïIz½^Òëõ’Ñht»ç4™LRYY™”ŸŸ/9RÚºu«åóÑ£GKŸ}ö™¥Í‡*H ·ã¥K—¤œœ©W¯^RFF†åÜ?ÿùOiÖ¬YRyy¹TTT$M˜0AÚ¼y³[=NNŽ4|øpéÀ–ñj2™Üê‹‹‹¥;î¸CúöÛo¥êêjiË–-Ò-·Ü"iµZ·eeeÒwÞ)}ùå—n-*++¥¢¢"é™gž‘^|ñEËçûÛߤ'Ÿ|RÒjµ±}ûv·xf§©Ä†[ÍêìüùóôéÓ///‹™8//Ï­Vg‚ ‘‘Ác=ÆÓO?ÍÑ£G›äìÊ-ŒŒ úöí‹——;w&88˜cÇŽáÎE‘?ü™3gòþûï׉±v—¾ ÀÆœ^RRBqq1©©©xyyѾ}{*++)--UÔñzÚ188ÿ:¦ì}ûö1`Àüýý ¥[·n|8mÚ´qxN§ÓQRRbÎÙ³g1™L-ê“ÐJJJظq#&SÝèêë®»Ž:ð /Ë… xá…(..fÚ´inÓ:Q-mˆF£±DA¸#¼½½™7oAAAèõz/^Ìo¿ýƲeËÜ~ÌWVVR^^NDD„å³°°0.]ºdñ8÷HB/))!''§Î9___‡Äú¼$I–ô‘’$QYYérG­VëðùkÈ2::šaÆбcG~øáöìÙã6„.Š"‚ `0,[§Ó¹c‘5T*ýúõ³¼Ÿ;w.÷ß?F£ÑeBüJàïïÁ`@§3çf6ètºuˆñ$TUUÕ;‡¬ÓÃ:¾¾¾”—×嬨¨À×××¥~4ƒœœ‡òª¼¼† @§N¸pá_ý5S§NuµZÉd²ü†ªª*ŒF£Û9îYC£Ñ0`À9ðì³Ïz„ðòòÂÛÛ›ŠŠ ›±ë~4—Eè¢(2bÄFŒÑì¿ #$$„'NЭ[7ÊËË)--%**Ê¥?üºë®«“ζ>˜L&***ÜÊaÇ××—˜˜222hß¾=.\   €®]»z!‚à1e5Y›Îž=Kûöí)((@’$‚ƒƒ¯IBïØ±# .lößùøøÐµkWöìÙÄ 0 =z”Q£F¹t,„‡‡³`Á‚&__VV†···[×àà`9{ö,aaadffR]]MÇŽ=fUVV¢R©|I’,»» ¬{ï½—·ß~›ÌÌL~ýõWFÕ`2 «ÒÒR^}õUKøÇÿû_¦M›æ–•¹~úé'öîÝË™3gøüóϹxñ"&L`ÆŒ¼ù曜:uŠ;v0yòd·nó«>úȲØ\³f C† aðàÁL™2…‡zˆ¥K—RQQÑhl‘Œt-‰ƒòŸÿü‡¸¸8òòòزe /¼ð‚[OXX÷Þ{/K–,aذaüðÃŒ7έ™¹¹¹¼ýöÛÄÇÇ£Ó騼y3÷ÜsÛÉÌÌL¾ùæÒÓÓåË—s÷ÝwóÀ0gÎDQ$//¸¸8 äÏì´°µââb>ûì3ôúÚÄó#FŒ }ûö öíÛÇo¿ýFTT·Þz+>>>n×™;w¢‚ððp T'[ÏÕ†Édâ×_åèÑ£$$$0hÐ ·6¹ëõz~úé'Μ9ƒ$ItíÚ•´´´:Ž“î€Ÿþ™C‡ÙhsøÃ$‰ôôtŽ;F›6m¸é¦›ÜòùÝü1EEE–÷©©© 4Q9uê»víB­VsÓM75šÜÆÕ(,,ä—_~!''???úôéãÔ2µW"¶oßNFFíÚµcÀ€n½ TYYÉŽ;8{ö,¢(Ò³gOzöìéa_V8}ú4[¶l±q„œ2e !!!9r„={öàëë˰aÃÜ&†Þi„®@ (pD¥ (P @…Ð(P @ ¡+P @ BW @ („®@ („®@ (P] (P º \6.]ºDaa!………QQQaSéíܹs<üðÃäææ:üûS§NñØcqñâE§<ŸV«µy¾ÒÒRKÝOÂG}Äo¼’îÄ5P+M @‚k }úôAE¢¢¢ÐëõøùùñÔSOYÒϪT*BCCë-RRRÂÎ;©¬/…B IDAT¬tÊó-\¸÷ߟ””L&ÕÕÕÜu×]<ôÐCn]xÅþþþ êQ ºG ªªŠ¬¬,’““=¢’˜×zè!¦L™BUUK—.eÑ¢EÜpà „„„ÆäÉ“-ežM&âíím©¸g‹/RTT„F£!22’ÜÜ\ÚµkgIiZQQAnn.:âãã” iii¬Y³“ÉÄ÷ßÏ /¼@ïÞ½-5%jªÝUVVâïïOLLŒMâ‚‚ Ðh4DGG“Mbb"¾¾¾äçç£Óéðöö¦°°   bcc-U(««« $&&Æòü•••dggS]]Z­&,,ŒˆˆL&EEE`2™ðõõ%66úöí‹N§³¤Ë5 äææRVV†——ÑÑÑ–tÕeeeINNF£‘èèhBBB<¦€“BèŒüü|þñðÔSObsî÷ßg„ üïÿ«sîjÁd2±{÷n~úé'JKK !--þýû“žžÎ¡C‡˜={6jµÚæo¾þúkrss™1c+V¬ 77—Y³f‘˜˜h¹nÿþý|òÉ'¤¥¥1qâDep(p{ À7ÞÈöíÛ¹xñ"!!!dffr×]w±qãFÚµkÇþýûyì±ÇÐétEuuµÍ|Ÿ={6eee„‡‡Ï×_Mzz:ñññäææòÒK/‘žžŽ¿¿?Z­–|»îº«^R÷öö¶<߈#X¸p!ÙÙÙ€Ù$ÿÜsϱsçNüüüÐjµŒ3ÆR=îĉ<ñÄdggI§Nøâ‹/ظq#iii¬ZµŠmÛ¶„V«eèС̘1ƒçŸž={öXž±Æ*PQQÁ+¯¼Â¦M› Á`0Э[7Þ|óMŽ?Σ>JEE>>>hµZ^zé%Ì»ï¾Ë¹sçxçw0|øá‡¬\¹ÒR>·{÷î,_¾~üñGž}öYnºé&N:Enn.;väµ×^s»: ¡·B±lÙ2æÌ™S‡´;vìȦM› t2_±bï½÷Æ #11‘üü|Ö®]K›6mXµj}ûö¥ÿþ–¿»téýë_™ŸV«%33ƒÁÀ7ß|CHHˆ¥,ê»ï¾Ë±cÇX³f QQQdff2{ölLZZK—.%<<œÕ«W£V«ù׿þEII‰Íý<ÈW_}E§NÐh4,^¼˜¼¼<6lØ@PPGŽáñÇçúë¯' €Õ«Wóå—_Ò¶m[ŒF£eAóùçŸÀ‡~ˆ——UUU·N:Å_þò^{í5† Æ… x衇X¾|9O>ù$`ÞÊèÝ»7/¼ð•••Œ7Žo¿ý–éÓ§+V!tç£>SPAAï½÷Ï?ÿ<¾¾¾¼þú뤤¤P\\ÌŽ;ˆeîܹ„††Z÷àÁƒ|òÉ'2pà@ÆO`` &“‰Ã‡óÅ_••Edd$ãÇ·O>ù$ãÇgûöíäääð裒””d#”Ö­[Çĉyúé§-Ï]QQF£!..ŽÐÐP¶lÙBß¾}-ZÃÑ£G9wî#GŽ´ÜkäÈ‘lÙ²…ûî»ÈÈHΞ=ËÞ½{:t¨2 x Þzë-Ö¯_OEE¼ýöÛøûû×¹.##ƒ‹/²`ÁKU­?üáüüóÏäåå±ÿ~V¯^MTTwÞy'¯¼òŠå_|ñ“'Oæ—_~±™“'Nœ¨—Ð÷îÝËøñãÑëõð÷¿ÿ´´4*++ùöÛo‰‹‹ã·ß~³È???~úé'RRRرc+W®$22€iÓ¦ñ·¿ýÍæþ×_=½zõB­VSQQÁÖ­[éׯééé–{ÖT3f !!!¬]»–±cÇÒ¯_?‹ÇÚµkùòË/8p`½µØþùg:tèÀ7ÞHPPAAAŒ;–~øÙ³g[î5räH‚ƒƒ  --ŒŒ e°6Š—»“P\\Ì_|N§C’$~üñG,XÀo¿ýÆ 7ÜÀ¾}ûxðÁ©¨¨`ýúõLŸ>ÐÐPn¾ùf6mÚÄÌ™3ÑëõèõzvîÜIPP#FŒ €û￟­[·Z¾ïÃ?䡇ÂÛÛ›o¼±N9ZQ 䨱c?~ÜâÌãïï——¾¾¾Ü{ï½üûßÿ¦´´0ïw­ZµŠÑ£G[´x€~ýúa4Ù·oß|ó ½{÷&::Zéxƒçž{Ž}ûöñå—_âççÇÿû_L&SëÊÊÊP©T–ýt€   ËÓétTTTa9ïëëkSÊ8??Ÿ}ûöñÅ_XŽž={ZLêŽpã7ràÀ~üñG¦L™ÂG}DQQZ­–òòrŽ?n¹×æÍ›IHH 99£ÑHii©…ÌêÈ„¨¨(˾¼¼­VË¡C‡lîÙ¹sg’’’HJJâÓO?EE–.]JïÞ½yþùç1 üßÿý/¿ü2?üðÓ§OgÀ€ìܹӡL ÁËËËòYtt4Z­Ö¢ík4›EU}þ  ýª£gÏž¼ð h4zôèÁŒ3ÈÊÊ"66–÷ߟ™3gr÷Ýw#Š")))<ôÐC>|˜^½z1cÆ ÊËËÑétÜpà ðÕW_qÓM7¡V«ÑëõÜ}÷ÝüéOrøÝÞÞÞ<ñÄ,Z´ˆéÓ§NJJ 3fÌ k×®¨T* d©±>jÔ(Nž<É¡C‡xöÙgm„——cÇŽåóÏ?gÈ!|ýõ×Ìœ9Óf¡@Gh4¢HçÎyòÉ'Y´hwÜq½{÷¶¹&66“ÉÄ™3gèÙ³'gÏžµ,|ˆŠŠâÈ‘#tèÐAÈÎΦ°°ÐrÎ;3iÒ$î½÷^ ‰:Z<8Bdd$ ,`ôèÑ|úé§Ìœ9“¸¸8ºtéÂÂ… -Ö4I’$‰’’8|ø0=zô@NŸ>V«­÷;BCC‰ŽŽfìØ±Ì;Qmî)Iíڵ㥗^¢´´”7òÊ+¯0uêTÚ¶mËØ±c9r$999<ñļ÷Þ{ 0Àæ;Ú·oÏÇÌ¥K— Âh4røðaÇ8 ¡{ úöíkñMHH@§Ó¡ÕjÉÊÊâìÙ³¬]»–M›6`4ÉÊÊâÔ©S¤¦¦òá‡òî»ï"Ijµšœœn¸át:jµš   zôèQïw ‚Àˆ#,«þC‡ñË/¿0zôhÖ¬YÃÍ7ßLbb"#GŽdíÚµ :”-[¶ Š"·Þzk!8räHæÌ™Ãš5kúè#6mÚ„ŸŸ×]wŇÆ‰‰‰F›ÏFŶmÛØ±c£Gfùòå¬_¿žíÛ·ãëëKrr2ÑÑѨÕjfÍš…J¥²<ÏĉIOO·D°ÄÄÄ ×ëm~ìØ±²~ýz¾úê+üýýIMM%22I’¨¬¬dõêÕTWW“””Ä믿NDDaaa|ÿý÷lÚ´ FÃþð¦M›fYìÔ´Ahh(ï¿ÿ>ï¼ó¯¿þ:ÁÁÁ,Y²Ä†L§N,rLlF ¤à²qüøqIE)++«Î¹ƒJ:tŠ‹‹%£Ñ(ÝqÇÒÊ•+-ç ¥ÔÔTiÏž=’V«•Æ'=óÌ3Ruuµåš’’©ººZ:v옔`ùžœœiÈ!Ò]wÝ%UTTH’$I;v”~øá‡zŸÕ`0H°¹YY™”šš*½ôÒK–Ïôz½Ô¿iÊ”)RRR’tàÀ›ûôíÛWzûí·%I’¤;wJ3gΔΜ9#I’$Í™3Gºï¾û”¡àšCuuµd2™,ï?øàiÀ€RqqñU{£Ñ(I’$™L&iãÆRÿþý¥óçÏ+ÕŠ¡hèW¾ âþûïÇ×××òÙ˜1cêx®6”Á××—Å‹óÄOpÇwcqRyï½÷ˆeôèÑLš4‰Î;STTÔl•^¯çÕW_åôéÓ$$$ Š"§OŸ¦{÷îLš4©Öd£VsÏ=÷ð§?ý‰É“'Ó©S§zïÙ¿®»î:›¸u ®E9r„ Å¥K—(((à©§ž"88øª<Ï¡C‡X¼x1AAA\ºt‰ììl,X@\\œÒY­yûHjB’]“É„Ñh´ìßZ›ŽF#F£AP«Õ×TFŸ²²2¾þúë:ŸwèÐvíÚ±k×.†ŽF£açÎÄÄÄœœ ˜=c·mÛÆõ×_Ohh(’$qñâE~ûí7JJJð÷÷§M›6¤¤¤ Š"………¤§§SUUe1K]ºtÉB¨_}õ×]w%lÆÑÂ#77—S§NQPP€$I„††Ò«W¯:f¿üü|~þùgRRRèÒ¥‹Í¹ï¿ÿžvíÚY~‡5öíÛ‡Ñh¬7 GA㨙O5[1õÍ'WÏ;I’0˜L&DQ¬“|¨&ϸ½|¸V ÕjIOO§¨¨µZMrr2]ºt¹jmQQQÁþýûÉËËC­VÓ¶m[‹ƒœ÷FC|ký¼k”ÐF#|ðëÖ­ãÈ‘#¼òÊ+Üu×]deeñÜsÏQXXˆN§ãá‡fäÈ‘×ä„V  %Haîܹœ8q‚²²26lØàÐaêÔ©Süõ¯¥¸¸€™3g2jÔ(§Î»ýû÷óôÓO“™™I¿~ýX·n`Ž¥^¶l»wïÌ±Í ,P¬6 \ +V¬àóÏ?çøñã¬^½š1cÆÔ¹®ªªŠçŸžÃ‡c0¸õÖ[yðÁwŠE‘›o¾™Þ½{³xñb›ÞêÕ«‰‰‰aéÒ¥œ;wŽÇ{Œ.]ºÐ®];¥g(h&¼¼¼xøá‡1™LÌœ9³^mêÍ7ߤC‡Ìž=›={ö°téRèÔÃmÛ¶eñâÅüôÓO–ü[·neÿþý¬X±ƒÁÀ£>ÊöíÛ-ŽN (h:DQdôèÑ <Ø’Æ×¶nÝʉ'xýõ×Q©TÌš5‹^½z5žXFÚµkG·nÝlÒ˜VVV’žžÎèÑ£‰ŠŠ"-- ///233•^Q à2 V«éÕ«:ujÐ4ºk×.FŒAxx¸%òôéÓN}¶ÐÐPÒÒÒl’FvìØÁàÁƒiÛ¶-:t`РAlݺU)—©@ÁezÇŽIMMmÐOêÛo¿eèС´oßž6mÚЯ_?víÚuùak¥¥¥F›Ð°°0‹°{öì±Äk*Pàéèׯ_“µZ-lÒ¾þúë›õ Z­Ö’MËÛÛ›ÐÐÐzëv;z½žÂÂBK²0gþÊÈÈÀh4Ú˜ÝýõW…ä´ÒmêœÝ·oŸMŸúššj“‰°1äçç3hÐ Ëû˜˜Ž?~ù„^#Ôj6åk&¸}ÌàèÑÓÉÏ÷4üiÀú™j³äZ¿­Þ«äÿÕògÞò¡ü/ 8šCà7âjþì'*aÄBƒ2(×ÏëƒZ å_ï$4ÄĈ%˜J$>Ze`LWˆ3e@PK a´ h%¨t€0ʯ€A>Lòü¹5ŒW©•ÝG€ƒ%%Mšx™™™Ì0€äF®;êãCf3kj«T*K–±š««[ãg½`×ëõô ø#’ÔÓIORd=œ8:3åù øÈóÙO~í/¿Öȯe™à#‹ù”¯<߬D‚,2¼u¾úÞ‰fQ!AÁ„_~*-¢ á‹ ?´ˆ˜,ÿl;L›¡íð¦/tøP…7Õ¨1àCÕ¥:¶­Ëåöiñ¦ ¼uzD“ ±„*YhTÊ‚B+ - É2GÊe¢*äÏ*à¢6–Àdèôµª³ú¿R>.Wœ“ÿ¾“Çöo˜Å³£ìG¼¼8Ý’¸ÿ Î*_ˆ#œ^ݶ›o¾¹ÉϧÑhêÌ;Fsù„FXX'Nœ Gèt:rssä&<ÍëÙh÷Ì¢‰«¬>«yí%¿®ùß_ž¹¾@¨<ƒc€m 2‚ßlH/W @ŒŸM`ì/Tmù‘®÷_@~Ñâc ̸¿c®‰Ýÿ5ðǾÐÃ\”åŒÞ+†Q&èKæ9VTYM&f¢¯¶#uƒ<k`¸J­ìîÈoæõ‰@¿F®¹½:..ŽsçÎÑ­[7KHRCá…΂F£¡S§NüöÛo–B‡&%%Å#܉½!³P_'ŽNÌÊ×òü‘_‡aò\«• 5kù ùT<ß#d‘à/ÿ¹7 …3¿Â ;!¹DË·‰®FPñ )%È«Q0Â%DL„RŒ!\BuU9=g_Oåø¢%2)à A”Q–SÎÑŸŠ¸ãÞb#t âCþZ#ƒ U¥2[–ÊÂã’üÓ/ÉMR ÿŸ/ b³BѼ09Q ûKaº*ôµª5K8´@‰|\® PËïLÙ‘-/-ÈsšqŸÀ&È€ËYŠwëÖ#GŽ`4E‘ß~û6ÐÏ;lj'ÈÉÉáÈ‘#lß¾2aÂ>øàBCCÙ»w/íÛ·oRÃkv{£`j)UI2¿j^מÂÙ–K•‹5õÖ µ,«ÔríÞïÙ³‡¼¼<ÊÊÊØµkF£‘¨¨(/^ÌüùóiÓ¦ ãÇgõêÕøùù±uëVRRRê Wl)”——³wï^Ž9Bnn.Û¶m£GŒ=š¹sçòñÇc08xð <òˆ‹[Zr¿).ÖêMú.+sæWH­¨·[¢™Ä&È{>}ú4'Ož$??ŸƒJ¿~ýX¹r%‰‰‰ÜqÇŒ7Žû￟Ï>û ½^Ï… ¸ñÆ›FèlÞ¼™:PRR—_~Iß¾}7nAAA|÷ÝwDEEñÖ[o¹Mýï+ƒ¿“‡‰©îg–Ì„n’]Édu 09Ñ>BË t¡´²§º½ûã?ræÌ†Îÿþ÷?T*£G&22Ò²'=}útbccùòË/INNæ‘G©SI«¥Q3﫪ªèܹ37n$22’îÝ»óꫯ²aÃDQdÅŠ6•ù®ÚBùjŽNÁêh.S]ÛúÅ4,{­EŒ3ɶ9?ÝßÍeTKŒÊÆd€½†~ôèQ¾ùæzôèAvv6ß~û-½{÷&88Øâ;Ó±cGÞxã 6n܈(Š–È—&ú!C2dˆÃs#FŒ`Ĉ­L_Ž•Á(gÍe EÁæ¥`Eðf\jTCOTƒdlý­ÜÚ5ôÇÜáuO?ýt­Ðh3fŒÃøTg!>>ž¿ÿýïÏuëÖnݺ]Å–Ö`ÞÞræè”œÌ„R“uO"u+µµ½-µQ¶mtÍ`²eW@èΔ®²\- ½¾¹]“¿½zõ¢W¯^ ÞK`Þ躜!Д¡æ@C0Y©á"²†.›ÜMµ— ‚c ]#¸áÑ)­ìIP]††®àrÐF><|tJM3¹ õÌtM€7f™ˆ°)Bâ ‰ä¢Vö ½)„Þ’î¬ ¡_#ŒÔ †µ•Ø›p¡f1/4<™¬ýí\½É¬jÂhPà ð$½°áŸ \E“{îµÒBd@KæwTÝ]ì6ÊkÕp ]þÇä`´)Äàžº— '³WÌÝ«¯¡_ÉíArj>w ×È"OÚCoL´$ +„~5ºØ$Õ„‹Èörɼw%/o%I²p»dåæná~±îm•´î…šÐãÆH_'¡Æö匥˜³½Ü%§³akðroIßA± 2@1¹·F Ýú¼µVnåå^cÊr´‡®h芆~í¢&£‚'‹3銽ܛÌç.0¹+zíüV4ôkЩ5¹›I1JFT–˜t#*e‚švWWj̉ÀBw6Îbηu£“õ6gÓˆ*ÁyfÙ“^t¢¤œoð8/wŸ&È …Ð=qÞ †^{ÞÞ³½&Íf½¾«¢ª»¡+º+P9'©§‹'ï¡Súê4#ƒkrã({è ¡_MÔdQ—ÐÐí2Åɬ- *L²J.V^îFŽ QBIñæF“Yñrwek»bAîÌÛKN·‡KÎ44͆Fï‰QŠ—û5!xÛC·J&cçìfI,£x¹{„†Þ˜¹MqŠ»ÖD|c?ÃÙ^îÂU [ó„žZpD5Åä®8ŵ6B·ÚC·Ogöj—lÝTÃbÃwUpõ ½¹&÷ììlþõ¯‘››ËÈ‘#;vl¿)..æ£>bÿþý¤¥¥1uêT”yåÑ‹ÉéßQ¶æìïP–oÖó»¹&w½^ÏêÕ«9pàiiiLž<¹NJu£ÑÈæÍ›Ù²e aaaÌš5‹ÄÄDe 睊á=tk“»½Š^_êWA [s[ ½¡ÃZC/--eÖ¬Y0eÊV¬XÁçŸ^ç¾sæÌáܹsÌ›7ãÇóØc¡Óé®á–Žºº¿ˆqSš+öé=|ùÖ’„Þ˜ °ÖÐu:‹-âÈ‘#Ìœ9“}ûö±hÑ¢:÷ýàƒxï½÷˜6míÚµãÞ{ï%++K!t÷ÑбÓЭ ¼özQPÂÖ<‰Ð½9¬'àîÝ»E‘™3g2pà@î»ï>>ÿüs´Z­åšÊÊJŽ;ÆôéÓéÑ£÷ß??ü𥥥×pK‡Iž1õÝÀ©ÂÙæjWØJ<Å#4AXkèyyyüøã<ùä“ôéÓ‡9sæpðàAòòòl4øo¿ý–{þýû3}útt:Y~(b× ÝJC¯Éâd³‡Þ ECw7Ô¤~mè°L™™™ÄÇÇãçç@Ïž=ÉÊÊ¢¼¼Üæ¾5µÇkÆKQQçÏŸWÜ#D¼sèV@²õþ+™rY?¿ »®ŠCwEO·¤S\C‡5 —––b2™  )) µZÍÙ³gëô¥I®ÿ!Z­–S§N){è›¬HÛJ ·Uõiè.•9 š•ÞvKæ* Oª D¨´ê_£ÑˆJU«Â©T*ŒF£eâøúúÒ¯_?Þ~ûmÆdž ¨®®¶¹F'ê¶-±€45HèWÄT`jÚe­Á Ðb}"€·ËeP%¿¿$Ù.Ö­SóŠ¢h‘ 5Ðh4Ü~ûí¬]»???NžoÊwH.É.ëôŸá)‹A¬+‚¼aˆO­ ècEø111tëÖõëד››Ë_|ATTÉÉÉ勆z /©ÔWžSUª‡mEˆÆ–iA¥Úšƒu¡ PÝÝQ.÷zöÐ;eÞãøµFèåuT¼XW¼Ü]ý;š"ìÎoݺ•×^{””Ž?άY³¸ýöÛm®9~ü8óçϧsçÎèõzŠ‹‹Y²d‰BèWO(Øí¡[Ç [%“¬¼Ü-º «ÕVATr¹»§†Þ “û¾}ûؾ};ï¿ÿ>ÑÑѼñƼöÚk¼üò˨յSuÍš5<ñÄÜzë­dff2~üxž~úék˜ÐÝtWU¬;O¯*UIR«ñro­‰eòóóyùå—Y¼x1×]wÛ·oçoûÇÇÏÏÏrÝæÍ›éÙ³'K–,A&NœHzzº²ƒçú5ž£=ôZ ]@°)Îb¯‘‹‚ãâ,Ö:¾7#ô†«xäÈâââˆEE̱cÇ(--µ¹mÿþýùé§ŸÈÊÊbçÎtèСNÍtž¦{º zs˜Pºü_¡T[³[Ô5&¬LîEEE”””’’‚ tíÚ€ÌÌL›Û^wÝudddpøðaöîÝ‹N§#99YÑÐ[jÖSFE Öµ ëî¡#9[£~“»ˆ¢¡»ÔÍÓÐKJJlöÂÃÃÃ)//§ººÚæOÌßÿþwN:Eqq1cÆŒÁËËënèh ÄSD| =‰„ b3“ª6y ÝÔ€»ªË¬¶Ö ½ººµZ(šC@@*•Š’[‘Î;£R©øË_þ‚Á` }ûö$%%)„~õÖ}R=³Ì6Sœ½·[C^îfp%*»¾< ZƒùýI+åÛßßŸŠŠ ‚÷óó«ã³xñbüqn¾ùf²²²xøá‡¹å–[,«ùkñ­Ç à‚È8g“¡+¼Ü–Z|y²µæ÷éa¦|N£Ñ`4-ŽÐ•••˜L&lî±bÅ ºuëÆüùó‘$‰gžy†O>ùD!t·1äØhèÔëå®hèFèv¬qA0«{íûýeµ¯SSSùä“O(,,$<<œ]»vÑ©S'‚ƒƒmîQXXH||<DGG;\Á+ð4½ÐEÒ§$–ñôLq~*˜Ô¹öýûÇk_‡……áïïÏéÓ§éÞ½;¿ÿþ;&“‰öíÛÛÜ#''‡b¶L…‡‡“——§º{hèµ¹Ü%DD$H–â,VQÏz}UØ\E4Å)ÎJj¤¥¥Ñ£Gžzê)’’’ؽ{7K–,¡¨¨ˆ»îº‹7Þxƒ®]»2qâD^zé% ÄÉ“' "55Uio—Šx¡euQÉùº§«2ÅyÙºbQß “{TT>ø ‹-¢ÿþìÚµ‹©S§ÈüùóéÔ©=ôwÝuË–-ãâÅ‹FöìÙâE‹B¿:BÁ~—¦vxš•™Ð%¢C“»¤$–i=„nµ‡®R©xæ™gøõ×_)--e„ tíÚ•ÊÊJyäbccxüñÇÙ·oÙÙÙtèд´´k<ýjÍcU R‹kìá.ˆCÐ×{0Ø1‰è„±!Õ’¹ “se½Ùº»är7=z”Q£F1bÄBCC¯1í[¼Ìa"9 ckuÛ6]BDB°>Uç®Êº›¡)«óV@èÙÙÙ„††òâ‹/"Š"~~~.£Ócޱj p溋ê¡KõW„ô¥Uˆ­¹P´È­ÊÊÊÈÏÏG|}}¯1B—.s(6 v ¢—;˜‘ÔÐBwCBW5r´’½‘êêj.^¼ˆV«% Àé9ïÎ|wòoròæ³$9ßËÝ%ÕГîR]RRR8}ú4§NâäÉ“<ú裌9RæÍÒÐë¼dËÚ×¢¨„­y ®‘jkQQQøúú²nÝ:Nž<É­·Þʃ>èÂìu­)?™ó× ¡Ù^å¥[‹º'ÕC÷õõå‰'ž°¬Æ7mÚIJeË1b„Õ ýð«•„ë„sW<ÐÛ©‚U š`_>µ!§8E®µ(*€ßšçÏŸÌÛ^çÏŸç»ï¾³¤†Uà ý­f«­¦ƒ½[àžNftÜ^Q*´w33Å;wŽeË–‘——Gll,sæÌ¡S§N6×|ðÁlÞ¼Ùl41™ÈÈÈà/ù‹’PìòP¦™þŽõ}¡þ„í‚Uå5;å½Î2A™LnHè^V3ðâÅ‹,[¶Œ1cÆðâ‹/rìØ1>þøã:·}î¹çX¹r%+W®äŽ;î **êÏåžœv‰[Cä…-7óœ<]UœEÙCw ¡7tXYé*++Y²d ñññ,[¶ŒÈÈH–.]jÃ&L°È€§Ÿ~FCûöíBw=êÑÐí<ß$S=\oí'ÔÞN”ß«”u¯®Ö4rXõ×Ï?ÿLpp0ãǧS§N<ðÀü÷¿ÿ¥´´Ôæ¶aaaDEE·ß~Ë”)Sðóó»†:fú;IÄרc*çܾ˜°µ-žò;„&È«á’Íÿþ÷?|ðAÚ¶mËÝwßMVV§OÛ.XˆŠŠ"""‚ü‘ž={Ò£G…Л/ÌŽ0!-»lß uгH6—Jõì¡+pCBoF¦¸¼¼<"""Eó´LLL¤  €ÊÊJ‡·?tè……… 2¤ffs#Õ¶N§FcÃó¼6op˜H-ÓÊ¢ÁŽÐ›‘)®²²µZFc¶Ó‡‡‡£R©¸xÑñ‚µ¸¸˜ï¿ÿžñãÇ£V«•=ô¦C zbN9²–æy·Û/Ã%³/( ™¥MˆH¢ “$aDUGC·8¿Ù eÝ á ½¨ öÞü>§Ç 9d'¦z$°ÑhdóæÍtïÞ:(mí²T#]€Qòëý˜+½µäW '#âÌòFMîÆ+"­AC—ZzXÚÉ€j½YËÑŽϘ¡÷Ymø²#>|˜’’hYn*hÔ˜cOkzÈï zØÎUThžSœIÉåîY„nuø@r[è˜l>ýk/OLL$77NÀï¿ÿN\\þþþun]ZZÊwß}ÇwÞ©´³K Ô–BkÁÔ¶®H±†‹ê¡7pÎSü|Zlaâ`]í‰ µ2 :²öòÀÀ@$I¢¼Ü¬,æää`4†šL&>ýôSFeñ¡Q½Ñ aönOŽ»1ÇŸ×'Åéߵ±žLq6ù]k÷ÔM‚h[—M“I!tYÚz ´o’͇µû€¨ªªbݺuìÛ·U«Vqûí·#Io¾ù&¹¹µÉg÷ìÙƒ¯¯/©©©J;!Ï9gÊòwŽ'©7°t™ìådõÖ%Nqõ¬KjÂ×[‚Ð=ÊùW¨+T¾˜X+b¢j/‰‰aàÀ¼ñÆ=z”Õ«WÓ¹sgøì³Ïرc‡åÚ¬¬,<Ș1c,ÉÜBo=»å#³Wû×2±;VÌé-oúá8œ­¾8t+! Öjè ±ÕÝCäÏ•s{ ½!/÷ÐÐP–,Y‘#GX¾|9cÆŒa„ èt:8`“NõèÑ£LŸ>ððp¥é´sÒ½Ey.¯ž’çø`PY?ã1ÃèÝHë”<È;¼µ|GS¼Ü­hÂÛÛ›… âããÃ’%Kæ™gžàäÉ“\¸pÁb†ÏÌ̤ÿþôîÝÛF‡PPow&b.$#CåÿÈroÄÅò ö"1›â‚å÷ú& Ùän°RÃ¥Z²·QÞ±#tÙéB ÝíPã× ©Ñ½{wþñØ|ΪU«l>»6¹4§¡¹*K”­f? æ0¹"¹ýwtM*wkÎ\4 x¹;B;!!!3®>õÔS6ï‡ÊСCm>S½Á.ý ³¹ÝO&nLâYòL½CžìYÀ÷v €ÌNsÞ kè`l¨ºù”&Œ ærWÝ yFӼɬÀÝ —5ò* ³ûRée¿<ç“å‰lç$«¦éÛì'×–§C FÉèB÷pF—\-T-ûu êE°Ú€o#æ˜×JYû?gnˆÜ;’¼z—X"7þM°5¹Ó„LqJb7DM¦¸†%Üм+Ï2³)­H^BûQë$g'™5Í‘°.˜½Î2¹K.ýž…fÆ¡_) ½Ñ‘šÄÈ=sNÖÄM˜ë¼ïÃì,sšÚª¹þ2ñg[õ”‰Ú¼ï&™‘Hýj°Ý.”IlÔ¯5áÏ:¥ƒ 5gU)ÍtåÐÒâ^çuäÀ@ ­üþKÀ±`µŽw§Ié"{¸²‡n'Ú‘’Bè®ÄI`—LÎ{åYZ£ãv—5ôLÌÅZº}åáð? ¤án‡ný¶6ö\°ö‚@TÕ¯¡+„îfBAFu㤯àJQEã•WŠÿ`Þ+ŽÛ żÝ&ÙNírÙhèthörwr‰VejÛBã2Àä.åS¯añ£Lâ–Ônòîƒ965s.iµÕpV535É~j"[¼/©kNpÓ HM'êVPmMò ûKBã2À¤j¹oT½Á¦‰—'r¥<"äÏ‹äÏÊ0y Þó¾šZ&þ\•;×(Õ¯µ ‚ÕË&–OULîn£JDï¥j„ôÝ}E¼DQzj’‰;–Zv=f߯ºÓÙW¾\Ài¾fw]S“]rÉ] [³'t½—º9Ñrª˜BèጺaÎ÷æð”[ånþsùÔÃòêÜsіØÍò*y_¡KvB¨f’Õhå¢h•úo(SœQé8÷"tQ…^ݰ)Ø$(*zËQ[K£/0L&ò}˜d§Ë ø³˜3ÆiäŽO-k×ÅxÓt/wIrÏV’h–/€G9¬¹à;$AhTT…ÐOèAr—†ãäI\Ó1qòäí+“¹ s‘†âf { ]p¨†;ÔÐëÑ% ݽ`B…¾‘½]IÙ(iôr’( •ï+OÊïkr¹`ÞjK¦6ílKЙ“÷Ð…fâfíå){èöí!4*Œ(&w'£øóþ¹?fÓ»@­é=èa5„/[åóÞ˜mm4˜&wÉ„„¢ˆÉ&‡ÕÖêÍå®0º›ºˆ¡‘)fr§Ü ‹'Ý÷€¬y`¶Àya6±WËó¼<×k‚FµòµÔ¦mîœt&º"Ô]RݞЗ-g[U½Þ‘8#káñòge˜÷Ì­›í"°s˜š—<¡‡Éþœ|¾ ÝÊ)΄ˆ$ˆ²Ïœ(;ÅIŽ”wÛ» ŠSœ;º±‘ÍS [sÛŽ;øàƒ¨¨¨ W¯^Ì›7??ÛÊ~•••üç?ÿ᫯¾¢ªªŠÞ½{3þ|¼½½•FoQä_aÎ+ÏoÀxÌžìòÜ®)Æ/_c°#u¡6hEl.3Hué@0-¦¡ ör£e)X’œ/wU‘b8ÒÑŸÝgÛÏ?6 ;Ôš™b)GŒF¶³CõØhDÝrä£"Bp“² 2Wd[OØ*=ùRÿñvã3™@¢l­kHâä뤄]±ÙF‘L}1½QŸÚ‰H–kD¸år¢á7dŠn,£[“âÂߊ™åÞ]Ê’êJ-±'·§bè‹qÞã€S¥VÿbÊ´?Iç W|„o$ÝÚy<ÀÖe(•J‘˜…hóÉm]d²©˜5èy˜bÓ¦,ëö–m¤‰Þ¬ÒÃ÷íÌînD½FÑïX`¶äÓD÷Ö<¿Í@`_7…ä{‘jRw«C]ÞÚ öM\·¾ ‘@çÁœ¶ÖäX>Œ]¶è ¨îØ€ÞŒR‰8NªËå_«<:EI¦Ð“²½a ¢÷Ö‹šs"ûàßÙ×ÒÃkÈ»ððŸ^ò^ˆNqnÐû ˆo%‚—“yº]²–ÛÓÆåžýdÏš`–‡¥î ø¯J­ÿdLgeÀ^à$j¡“*R«¼¤aÃΗ²H“´žeÊçWJ™² 1ɾ£î‚p¹»ãÊ ÐÓB­ÀJàrËRé„ÕúÍoi IDATœ†È(];’€:+†.­vE 7É#,ôd “a8(˜ãd-ªÊ0à4ÌÊû­4ö`6ÀôÛ0›ayçKE¤+½TZåe„)Œ>ó0‡Ôîê¡_ÅðfÒ{áCw\î™MAĬ†ˆ©‹Š t)}§7=x-‰öëæH÷È.Õ~©Í¿.½Mš¼%˜éCð뀢ƒK‡5Ú\3[Zäã±ÏJ*”2 ÑÙcu„œI„—(‡ÖótГEJ\L" ;€—rå2Ù1¯µ~ìx G«¥NÏ'e—5¯£é*:®ð:t̆#ÖÛÙ Ý¡É,^ Ôµ’™Ê…vÃ-FF™d0°T>Ÿ,Áý¿Ì6¸B®Ø*iq[Õ¦ \‘×Ý%™|-æ €‘=ôjù½r¤"Ò[-qµ„’â =9P•Êulµp„DFXêzBªWÉf™|_tá9ÄåÑÅL© °Ñ óMÄxƒ?F8!³ÇÖHfË•BÁPÎuÈ÷‹@cPo£"y-м.u‰#Rrz“糤oÝϱ©—jØñˆ:…Ö^Û™ÝOŠs=e¤^g¢K(tÞHB·Ø§FC¥›:½Ü¥;VZïas[l@¶Å6…Ÿ†Þ)ÔíµK@þT2Xpž´Ì³åqmòQ,_Ë’bm’ü;Ñ£ëH„†í²\×øå7{§´¼çÊïqX~~+ÂÅÄìˆ_„¨/ØBœ^eåMyÝ@/îž`BóÐ ýèÁümDxLŠ®1œ²^³°,ضaK;ªgµùÈomC¯TÂòu= ~<ÐKJ‡Ž«AC£¢ýXÅ ÿö¯€ßIë¼]~¥l)òŒò»€DÌ­ˆRýlÌ©±zx´Á}È–1’çßD¤VHÿÇ{òu7¢HÐÈ!œ&õˆÆn,­.•ùõÑN„´êV‰º“— /—°2ÎÀÀß1£ÀVí¼G,•€-ÝØ6rEAÓElE‰H¦U ]‡IMP©Eçã‘À[/}S¤èÛ)7¼‘„V(½i¹–Ëí’Êúly¤õ^‚YŒ™l²_Zå…R¹Ï‘ל*W4üx˜ƒË`aÀCÀŸä{3¥[. µìî:J{›´F':1ôdPGŠT·B„ãw’‰X¡*–÷äî-Іƒ9´žÊž®ÉEÐ6éÍÝࢯ¾JùÞ:6.žÀáó+AÂõ-L¼ïJwwP7#:¥÷7“¿ÒKàz.ÑÍnÕls´Då¡/ ,à=„ šÓðºÁïrÇ/ …2ÌööAà÷’߯”+¬KéêþŠ(¾XZÙň„¹îÜeä$Ù- Ç—N =Éä’ŒÙ"·ÌDà|¢[½ÖÊ÷vKј´¦!r´ËçÜõÀBW²ÜíÊÖ¢È %ÍP¢C[쩆ëªD‚i"û;OþoxÖ ÕÉ<ŠüöMˆVn‹ý1ÒâxtKuIU§C2Ð6 à'Híº”ð€Åt);Ê-öÍ)RjÇ솯ZîN¼;ÖÉè×õ1Ž…ž<%<Þ8?憛$§øÃ™F©þ®“Ö{¶äy ²i’) Ò·Ç¿¿‡ϬCÕtÔ<·N=ŠaÄ0àå:èPRï£è¶ ÅË[q5ê¸|ªÐKÉŸ|‘´M¼Òž)EÄάèN©¹[õ—`DE&ÞT±jR)/':DXEx'ü‰ˆý ê~‹(½Vk;òŽõMÿ‘W8.÷¤ƒùéü©þ%·Ÿ‘õц™b5Tn£Òžo—;?ˆ}:H @Çšå®Ê:tcº*~£çŒC·~< ô,Ð;Âû'¥GÌà·†h“s¾üe>É·Êc'Hû#‹èä5ã#²8EžïeÉx3¥(Ö Íòù1R~¸0»á{$ówH%`l¢ÚzÇHoÃ‹Ì ÆXñò{1×)•ñu 5.3;zrÄæÑƒùXD È ¼"mB£Þ¢Sî:T‡óäÞ.Õå{…ÂÝ=ãè½5c+ð–äÓÜAÝø2¹.²€ú™ÅtÎÂsÄÏȽ~ø¿&tè*è¹:ÊûR´í“ÌwœÔ”×Ï'ˆ–uÀ8+uÈÕÄ ºb±˜]ò1K®¬!'TÌÏ —wÃCäWÜnsÇ:¤óÀß©](ùEò\äOtÅÉnýÚ5 ÷ ]×uvìØÁ[o½…¢(œwÞyQMäû>Ir Ô´×!¼Fóü|ɰÊ4̶(%r Þ²ø¢ ºèJxº¦GXïöŸ4îb°ôCâŠòhˆ0W'f€À J‹õd´w1ñ ˯³ûÆÌÄ–éR´éÀ9d­úæ&Éœ–×¹êFõ~»ôày%³M´¬¾_~ÅbÑçH…c€¼kÓ¤ÁpH¿J*2‘¿÷Z)’·J¦x7…~OËÔ×׳bÅ ˜1c3gÎŒúÌ?ÿùOÖ¯_z>gÎfÍše;™-TWWÇ?þñ.¿sß¶ÐU)†É]9\zÜÖHˆÙލÍ(‰øÌPÌá-– ˜Ñ4&+½z‰ÇëG h(:xÚ(R†¼| k&OeÈß2âéC¸ý ø#¹>ÔQÞ¶hÊgKçd.¢Þó@[ÈÐì}â1UòoV˜AÌì##¦ÞˆÈ¯kA„ù %O·¬¬&y[E¸çGK`ܱ* ìÊ;òÔO¬”\"õ•O‰³ã¤"°*EÊ}"e"³ÜƒÁ +V¬`çÎŒ3†ÓN;ÜÜܰcvîÜÉK/½z>lØ0.»ì²£S víÚÅâÅ‹ñz½466²xñböíÛ—a€Þ"]èÒÎk”®õ×äm."zÂ’aSzåçÛåv¨—Û£Ur´«.wéWÀsÚ4”=ô–q:E3¿¥+BFì”›wÜôŠd8·å—yejWŸ³hÊ^ãnd¤º¥û½Üâ밸όGNÑ¥¹ºT 6Êë- W(¯×‚¨Ý%­þ«äã ·ÜPà$©õ—òH`fã;Œ•^…¹ˆ.ý›ã“è~<]>¬€ÞÙÙÉw¾óÖ¬YƒËåâ¾ûîcÕªUQçýÓŸþÄÎ;5j£F¢¤¤¤×¸ÇúUUùS 䓤ZÙs±+vY­D°òµJ¿“ ûÖ²¹˜&-\ëVIlÊÑz}LÀöù)®o u$Ô¶ãé è[ãEõ›}-ÚÆåñògKùÍÜ|ZOÉCQÅ×VZ¤›Ü(Aûp7ðD .–Δ'×`TŸxÿ]ä–+ä&º¿Ž¡l‘+ù`¡Z#ù=DÞÍé™{X$=ŒõÏ\"t7EÊ¢‹5 ³”­XÊ»IRUBÜ™y=¶ÐãÉ«Ë= òÔSOñûßÿž¢¢"–-[Æ“O>uÞM›6ñòË/3tèPFÅ!CPUõè,ô¿þõ¯Œ?ž¯|å+¸Ýn®¸â þóŸÿpå•Wf $ã~`äÅ¢kê6>¦ÿJø™Ù¬Ù-·Ú$yÜž¬‰ˆÌ7E ë—[¯3ðŽ Zìár—ÂcW>lUàLÙÞcñ”ù¥ÊbÌ…šb±­r$Knh»JÛOå¦wËÏZãèõRY¨àžáÿh±0 XV.+âŽÇ’ÖõB•1èÒ~zâû f-B@j룱üäñû¥ÁQ$5ø1ò7ŒÌ?BŠô­òõú$8AƒÝβvíZ>ýôSž}öYJJJp»Ý<ýôÓL›6ììðöÁS§Nå’K.éuîY³f ûöíãø%%%¸\.–-[ÆôéÓC£SOÃ’à²ß€ÆtžÎ­H›.R(ÒÞüTÂÔàpUÚ@*/f§¸„,t{Dw‚|éÇOsÒ{²â†³xçÒ¹Qè¾éCù×·ç1°ú0{?7”Áo¢cj6áBÌ7x¶MÏã³Wå¡üàyou¢´ Y¢X™¯!Æ÷$E¤WWñÝ=°Q\ŸàU%b¥4‹Ü°¾7TÊ»¢@—”;$OO”ò)ËVJsê4ùõTyDÕN"ˆê“ÿ¯” ý!)S ¨JÊ"/¢ì~²ÅŸ @§ø‡Â&55<ûì³üú׿fܸqŒ7Žï|ç;\sÍ5QŠû°aøð ÉËËKŽË}Ó¦MÌ›7·[œfÆŒ¬_¿>ÃÝØÅGlÜpƒ,æHû²LÂÈ0‹öž/ál¬ÅÔhãÔa¡k–á,—û)uek¼(”¶ïå~H×8Onè2©õ¶E0È^¹‘]„Ot7ޯÌ)–L”#]ç-’¡ò#ÄZ©ôÒ‰l-˜}(VIY+EÞè׻dži\õèTÌŽrÖŸ=V ¿ ²êgJùù±Ôâ+$SïÂÌ´}Çâ[9Wºìõ$Åögäùÿ…!-3»ÑúuË–- ><ĸ³gÏæøÍÍÍTVVš;¯¬Œ_|‘W_}•òòrn½õV¦NÚ+.w»ïüÜsÏÑÜÜšÙž¤]1òCXd€Ž<’ÓüÑ¢4haû†—W¬Ë+±­ô>ÞÊÂ_,gÀáZŠÚšÙô™ñø‡D¸j=.ÞüÞ©³Ñ‘Ô¿EÊŠe€µECC &”Ô1cÆàr¹ØµkÓ§›í‡srrؽ{7 ,àšk®á‚ .8:@÷z½ää˜öX~~>{÷î8ªQŠuCTM`w÷ª”Îgr"·]–´íšm€ºÙ²Ë;lô¦1tKmšÕBßãVæ+¸ü:ƒÅî´³+”pkÛ®ù¬Onà Ì$5Å¢ñ¾-_?Y~^“+07ÂrŽd<«ýâ•àyPª<'J ؃Ù1ÒmùÅŸJ0µ P”ÇøF–{"ë¡Úâz3¬y#bu¬‚æUyÞyìùž‘õ0Dºú¶aÖÀê¶#×E B;o9жWvhb¢v»™<ÙÑÑÅOá áM7Ý„ªª¨ªÊŸþô'î¹çžþù0M=]d'ì¾³PéVY€p,]Ïí+4LzÛÔžµ {EÀŠý9‰‰þÐÆ¶‘Ê5ƒP7 Œ²º?ˆö¢|<6Ý4·J鎊öµ èàÞ èãZªD¢ˆ‡ÿDz¾mzôЖ³€ÏJßv£dàFDìNÐÀ#´q·ååFÌæ ÌaÓ"gÔUý­’#k‹\˜³"uŸ\É«k¥[)r$0ûOOÖ-zÖ‡ò'u3,²ÉH",Ïc”Ü,;¹;€)üí~¶½²Ö¢ÝÍþÕáFiZ¨ªRγ³³QU¯7<3qÆŒ<óÌ3°yófî¹çFŽyt€^VVFCCC˜»`À€G•HgF&“SF{c»eG('årën”j­¡OÇ·Ðu hícÆãvïbË3• î褳º }I„>àÕ»Ð\ Åæ‹T5T NoJë{ t52¤E‚ðtù:–t'Ñ .uTP¥ ”+ÿΑ«SbctDª2y„·çðKð<(ý&#BÖ;R ½Mà?BÔ±B#VCš,z0Z̾'™®¼Öz øÖA¦õÝv¹G7–ÉRÆä›N6yf]C—üT\\˜Çw\èÿ /¼eË–ÑÑÑÑ+€^^^Î|õ#CB|ÏÎPÞ·zò¼µÏØÙ6Љ¨ÍIŽýR; ‚kß|ŠÑ[v°ÖYnŠ-»;§¥ƒÊCµ´ŽÊgÿ)Ch/Ë%·¡ƒÃgTPsz%¹x…k]2QÛE¹Ô®,¤ôŽ\›u¨۸gHÔÚ`q2¶[Ú*¾ @/6L['äiBƒæ]ÙkÓa0hR‚ÖH‹Úèa¡Dx ãg¥ü*–^·ÿHe¼ûÁSÖï0Gžû9ùS'cvj•ww†U¹:Z—{ž‡±WL1• ¥…YÞ~¿Mzk››› ƒ”••Eñ]yy9ä¿ø;vì8º< SN9…Õ«WS__OKK «V­âä“O&ói „#Bcl·¶ˆÝìŠP¿U¹õtK°ÉŽb”­¥¶¬ª¡,wwP'ðW¹ñMö ºÍÆ2‚3Ý0öLÑMdŒLã1\Í‹ï JÛvùKWH¦¨³ ré0fv#h§ÀZù<(™¸,".¦[˜ÒðJ‘®­áå++õC-Z§ÕƒujŽÝÓ¥"2G~~/]w—;Q‚÷i+î•¿íoˆ¦“°‹Œz¢IqS§N¥¦¦†­[·ÒÖÖÆo¼Á´iÓÈÏÏçðáÃøýþ[ÎëõâõzÙ¶myyy¡°WºiêÔ©>|8ì;OŸ>¢¢¢4îA’ßÜ3O˜‚rw|zÄ"êÓ4ËËÝM#° ›¨Z¼¶všÊŠøàÔéø³Â"«ÝÇ57>Ë—.^Ê©¿ÇÀjÈnñ¡ Ó2¦€`ŽÙõEÕ@i ÍfÆý_õ ü©_¾Ù}*ß2èŒ0ÇÞ[Σ:ä2yÙ#•ìb7Ì6|˜5RbZ¥âNɤû\•r§AÊ£DíDDBìéRœ!•‰ƒ]€¹AS¤+®ü®õˆ¢ÅÅÒ,Ózwv/)®¢¢‚!C†°jÕ*¼^/«W¯&;;›Q£F…p ¥¥…¶¶6:::Ø¿?µµµTVV…~ÁðÞ{ïñµ¯} ŸÏǬY³8å”S2Ì‹¹ÔEÒöl“ÌmŒ0Ñåö+þÐt„ŒÔtɵØg¹‡ÇÐ=­~N{d “>i§`½ ¦›Æ¼®ZäK›°NRE—&+xZypœÅúôaÆÎ>•Êx@òéÔˆ_Ö!?g”¼&Wc¢¥óÿX]°RüIgzÄ{ ˜Õüõˆ,ö,Mã{wÈ8ØD̺Ò×$“O•^ãXkã‰%²ø,ƆUVu&q'êånúøñã9ÿüóùö·¿Maa!,Y²„ºº:Î;ï<–-[ÆäÉ“ùÚ×¾J8;|ø0wÝu½Â-&Là¼óÎãÛßþ6øý~–,Y‚ËåJÓ70z Ž“NÖdP6"Ü6Aª¸‡,Á_Ø63>,Qèîf·wAªäê?=ÇEoÿw.™ËkW•=6tó~&½¾™üF/ÿ¼™5·LGËRQÑñ•g‡ŽWt˜þ—a_ì ãÂ,˜ ºáú |Yþ¼6ÌzWÃ1¡jCP?A.͉œ Té¦[ÛEôÔxãtVùò†êÏGXèÍÌgÉã5y§!eÃ|̆5Ö; ñ¸w'f}B§E6Ôœ Z‰±Ö²µ²²2¾ùÍoòãÿ˜çŸž#GŽpÛm·‘ÍM7ÝÄ„ ¸ãŽ;xâ‰'Ø´iYYYìß¿Ÿùóç3kÖ¬£ô’’~üãsøðaEaÈ!Qõr™G9–í6Lêÿ‘Ž˜by›óˆNÑ-ªª'ΖŠS‡.cè£Wîdú¯·¡4š—ºhŸ'Ýšeee”——xñÅC=|ðAÚÚÚÐu¢¢"*++QÕÞë8·hÑ".ºè"|>åååQîÁôP2 Ï›"íË!ÀÿIh91¶‡-Ô“@#?ÝÃ7~ñã·naÌάûÌ:F†‡`ŽÌÖyc¾iŸœ7–çWñ—?ŸOE] Ÿ-A—[p¨O㌵^н:9Û|´>• 9Š@úR)¶Œ ó+"ÌPRò$cñÖ¨-ß*°(ö á%·ÖðZqÄ< Áü3˜µˆ|¼ÍòøU˜½;Gɯþ®4Ã"ûP¨RÝ+’®xãýuRž¤LLÅ“‘š>ó™Ïðë_ÿšÖÖV Caìÿ÷ÿþYYY(ŠÂõ×_O]]Á`ÜÜ\ DVVÖÑwŠ+,,¤°0’[ yËÇbŽañ?ù0Gpè•;\—Û³ ûºUËu4 MSÑtº¦Ó4°ˆ@® w»†° ]…ü¥Y2Ý ÄnÞÖ «Âu’‘Ú"ø«Ã¢5·a&¤†í¤Û,–o'fÞþz æ• j¬”Q–bd°ú,š¸±²F# ãב–öV©ìÌ?³¨Y^wµÅ6ê@d³Àìt§ÊßÐb³ÚÓ¤AGTo”çÚ–âÝ”Hë×È>ÎYYYa1r·ÛÍÈ‘#CÏûZó&»ïœÙÔ!U¾ˆj¾Ü1ƒäÖä1†*jXïs³ÛéW*ÝnvÐTXD}I)ºªÒX^B[Q•‡j¸¯†š©à†ŽÂ~»ìZ†ØGÓØbr]^>ýìp(¡²$ç´¨ ͽS'X®¢¥VG ‚þ±dUþÄr‹n£[´ÿ™’Á›13ÝKd¼Jº@1f\ÝFõ±æÃdIKû5D’ÚTù~)f>#¬÷f¥œÑŸsfÕN6"îm× gp™”G¥W eÜ–ª‡‰tŠÓ"ß0Ž#iðàÁ¡ÿKKK)--:ÆiýFÇ—Êe©•À¬K@·f°»DADƒ´‘>ð̶°u6wYAÕ\Qû,“}xö¸ËÙ„Ž®éhš"„¼'æù—ÏàÃï½Ï›óþ–ãïû½½³ Ó#8Cëb6!zFÝÙÆc6¨Ýaq…½iÑ`O‘~ $S#V?'?_'W„Žüü‡ˆ¸V–Åf•g%ò\û0[GçJöK þ¿R+·kçZ'µõãåßæ¿ÝZ!l¤,¦ƒzÒ)Ρž¸Ü“=>u¬Tsä®:$!f ÅÕ^/ÕZƒ;ZU_Þ3?f`8ÇèÝÁ׬ZÆñGÖð‡`€mX[^ÁÕÿ·”Sw®¤zöHÜ~?¿žs%µ¼ö•sxþ¾Ë!¼Å9Ô·5¸þï ÅT^˜ƒ6ò÷´¡çJùq™dÈfi‹,’à½1I ùóÆJÑg´d<nG6ŽÙ/ã)’?Ï–‚¡å[T«RvÙMMë”ïçɯ«±5±vfÅMª)‘Nqgzª¨3ƒõ f§¸«,¶e™tÒéJ82:ïA”¹½ŽìR+Æh[ytÏý”kõŒZ½•µfš,íát‚ª›#ãŠy¿ØÃU9 žMÔ&É4-€Ã}k´XõIÆhÄ̘b±€­‰#>Ìäû-Öw% Q!AºP~ÖjÿS®Ê>yr¹šÛ¥ÓÒ:i4•ŠÙâ5[¾wXjíºð^5èù˜µïv´SºÛ´º×í¿Ÿš€vîôr?z¯š›äöùhñ°}Œ(ÂÌ‹›ù’CŠ%g)Ò7Vd"W›Åí#GpÒÁ <öÒmäø½ 9n*·ýQ³¿ÄŠñgSª6pÒ{2`_ _€ã7ì!»­Ã´-bPîn/åÛëQÛ‚´—ºh™ŸO^C;yùP›@/Ed”Z—0Wz.bZ§<ÆèvÝ9ïØÄΊPyšäaFr«º3‚—ȇpv?ŒxúcÈ9£¶üSËgíÈ—%]ë¾8*bòÔÍ êåÞÿh›ÜViuŸ*·à^DN¸#Y¡}DÿVÌÔ -îöâ"¨»1 zÐuÕLŠSE/w%¬+lÇ%Y´ý¶m‰“ÃÛ*6—*Å’²V„çìt5+xeó ß"Ïå—ªË.¹y’Ç7Hw–qþg¤ Ô)-ïíà‡G¬P3"lw‚´¢?ŠæX¾¼LÖõR¹ÐˆÝ+uº3=µ¤J?O2i³T[Kåc¦äo=BUÎÃl¢Ü;Jb>\¿ê `ò«jÜa=gNä•ÎcØÎýü}ÑÙ´–PÒäî÷rÆi+É;àeÿ G®*6—ÍcñÇ2"‡wI¼Ââq(Zrµü|«ðë@£jƒ‚ç|Àû˜y7YòcÃ->Ã÷wÉÏ¥œX‹} ùÑ5Oȯ}˜ÔeŠt_7:Å9€žTj’va¢qà(ÌOk¥õó{N•ï} µz£hÃOt‡`…]Ê(®ù[&ø6ñ—“/¢eí¡À¸biýª)âÚº.¾Îá›á‘¯ËÁSojÕvC[²-J·µ9K µ^H"ëè‚Qjl^Û€pÓw`Ö‡"}/‚YÚåãli[õ]* »$à~*ÿæÈÏèIcªî5ƒH&3kÎ<ô ¤ZDë¡3¥Y:³ Ò —E.Þ¹ˆJƒ<ÉþEÄl.³eÐx®¹j#ެá/û?ÂëêZøwŸFÜ> ¤Ád›Eô½/µíºÐ”;,ö”õ<„hÙX¦­†·«ÍdÒ*[s½oR‡e7[³DZ±Öâ2Í\ÃIgô<÷!·vÖ™êâDVD IDAT/“/}&üþ愪3/_^Å]ŽhÔ8¹˜­·¦rC-k‹\4¹‚!DÔF«tÞéÁÝ¢ãò÷@¨˜ *¯@½“l~‡ðZ ãµ·zc„ç-Ћw?™Iqñe€c¡§™×`v߃(pØ'Ý{Ã-öïd ImÒIø\¡,‹R <+±æ¡Ûµ~U"ß²íång¡™ÜطݰjÈ=µ†5DâÚR³Žužµˆ˜ûH©}ï”ÖyS?ÞE¢½{Yîõ%úQ¦6sÈæDðè̇nù¿&žõXV&‰ÛàÀè¿jßÙÜ¥{ô t·ÂÖoæPG%Gþz}sŠ|UEBl®j‚±1Ô RªVIÜ&¹ª‡º Þzí èî¸rÂô”Ó>DAƒ†(š2ìÈ—ÎãÏ`&ÉK[5_xeÄÒZÌ:]×±ªÕcÕÚsFÇ>N·Ý,][áñ4Ñ,Ì6ª¾.@Ýç<^D'ºbi÷ø”È´5'˽/Sƒ„fà—˜9Ù¤*z fOмpÔ{`ò¥©tBÐãBWèÙ ádŒ×õNé:6­Ikü#B!÷> ÂÉIee%O=õTh”¢•öíÛÇ?ÿùOFݳ¸¨C ÐDÔ×\,”æ¶Ñè¸ëÞ‚pàuö¢T뉅®HærD%oVï¨Vé–þɵП¶ÖÔÔÄÃ?ÌUW]Å“O>É%—\ÂÏ~ö³Ð¤ÅH+þé§Ÿfüøñx<Уwn%ælc¯…iK$CÖ÷>¢SÓj­hÐDsÒ¡À·ƒ_Õ¢¥«QÜDECXŸFpÕŽFÍÙ =X»øãS­úš5k¨¬¬dÖ¬Y”——s饗²råJš›Ã‹;::øùÏÎ¥—^ÊðáÃ…N*Œ¨Òú6:74Yä@9ÂKg4PöG@@ ®ìDDä¶ ­ƒ½µLzÏ–I‘¢ËÓ{¾’LUº è555ìܹ“Ï}îs”””pæ™gÒÔÔÄ®]»Âe‹¦ñÇ?þ‘‚‚Î:ë¬RïzhÇž ü/p-"ö]h.aô7tY,ñ€åsƼ µ6°§[>g-W±u¹kÖ,wÝÌj×L¬O´l͡ޥ€…ÞÙ õã½´l¨¦eC5þ&³ê¾¾¾>lRÙÀijj¢£# p¿+õ‘ˆþîÆXÕZ©Ôç!¼zª‰÷î2¤ž$L&¢Í/#”†tÜ¥L9"­_­ek `þüù<øàƒ\vÙe¼ð œvÚi”••±dÉŽ;î8.½ôRxàáå[ºt)6là®»îr=ü6¶Ù¼¶áv;‹p›Ñê_E”¶”#Üu#þµÕ˜M­óÍyEE×Ef{¬Ö¯ŽË=ÝÕ­Nqyyyüô§?åü#ëׯçÎ;ïäôÓO§¹¹™ªª*rrrp¹\”–š…À_|1cÆŒ!''ÇYð¤ÉÈFÉõˆ¶J7ç"|æ%R.4K¹à—J|®+÷³ïŒ­ùlÌRO¥…ž†ÕK‹^’!»IK@©·6–q»ÝÜ~ûí¼ð ¬\¹’sÏ=—óÏ?€¡C‡R^^Žªªš9#§œr #FŒ   ÀôÄ© 3ÛuÂöÂÞ„˜™üÄà?á¾5 33Ðí\îáãS*¶z‚•íõ:3w8Ë€¸å–[Â^+**âöÛo·ýü•W^é0w·'…×ÑçðˆTØd¼ýOÁsÃÙ¾[zrcè½¶NR\,t=¼õ«Ëå⪫®J˜×gÏžm*Î’ÛQf;¤:ɨK¡1FZ㕈VFü#€˜£ì–à}bõèUb¹Ü·'×C%l!^zãõÞw˜¨ZèA¿?ŽË]w MŽŽˆaÀŸA4}J©ò| µn$¾½ŠÈ—9³£äÁhíZExæ] 2§Þ}(TÑPº¡58Yî½èºW4§—{ŠÁ|mqõ?"Üëÿ–V@yŒÏ6"\íªÔÔó»pÙ¹Ü#Ëè Ëyè‘s[t‡k2€™U‚A5.Ã;” Jæ:z±ò©òy;"†nÌlØ.½ ]ÀCxÅj"€®tç×ê¨òÑ ™I¸FÒ’ât%¾ Ð’·w@¢ ؆˼ѪF®ÑØX“š{”]–àv±Ïrÿ«fݪ^¦¦Äð­;.÷¾i¡âhçŠæzßñ9ˆA/† ÈB”Æɲ ˆxyÉm»¤¤|•¶Ð´½×È0õ-•»Iו¸2 p,ôÒ!ÄxÄI’¡˜Ér "In¹dnc”Rg¶£}–»a¡ë˜eÄÆ0{¹GÕ¡«¦àPô€ ½³kfÎÒ—{rÄo2E¼1Ë¡ fÓ™ï•ò:Aà-„N—à”××ûX ½‡í(uÝq¹GZß¾82@8ÓÖRH¢3Ô DŒÜpŸ{iˆ  ˆ>޳Ù­Ûäîï@dÄÆã„xºÙß5V–{Ø©@ï›;)èB÷ÅIŠs= ¶ZÉmz©#æ /y^G´pFÊ…3åõ¶ rmF üë£GÛLÏrWR§Ï(@ׂqd€t,ôS3"ÁM—`}Djêã$c—!bíƒå1F?í ð_DŒ­€®INˆr¹ë1³Üõ®Œ‡úˆ‰Ðq= "ìt¯ë.¨—!ú¶¿ ÌCT¸à>XÊ#³=Ëݽ­‘h«’šÆÜJÜúΦ ãï¸2Àq¹§šF3™-å6­ŒlXâ~„«=(ÚHmÍNЪˆtTB±8%zÚš‘‡S‡Þ÷) €/³:So’`¡¥à¼¹ÀÙˆvЛ1kÓ­ƒrò¤en´|UŽB¹Ž€ÂDÇ®ö5 ô\#c~ƒN|HÞvÝ–F`f²E¸ØO°w.¢kT3° 19‘ ³«û€âFºÕ,×t͈©ë]æÈ;ÔWȦ“–ãUɪČ–úqò¯ÁqC$בÀïVºuzwÐ6¶­"6(yÓSw‰tüŒþ"’(¸@·¥O$k´¯ÃL~˶pk‘$·E02.ÉÔjÛ±‹¤8E4è·ºÙ5]xÒ=>Õ¡£±Ð‰Ÿ/t–©oÒÉ×…ˆv°¿N”J»OÊ#‰Í/-ø!z’Û–†¤8]ΆPÐCL´Ð3N©ïL@N8€žJ:¼(ïÆ(Ì¡ ÕRsÏÇ™Úd±u|ÇôˆvpÆô5«!1œÉq¹÷A bŽÌNÐB¯®®æé§Ÿ¦¦¦†³Î:‹K/½4lÚÀ«¯¾ÊŠ+hnnf̘1,\¸#FãR3Ù0^–À­gÈÿÛ¤E>HûaD®ìhÑ6õ«”ŽNq:hšã- ³¾ý l5 y½^žxâ 6mÚÄ”)SX°`AX»g€­[·òÛßþ–#GŽP\\ÌÕW_ÍŒ3œyè±D¦ }"Ñí=`)ð{àYùšÞ…®”ÃZOÀånmØntÕR¢èŽjÜ÷½3ÎÃb¡755që­·2pà@¾øÅ/²téR^|ñŨÓqÕUWq×]w¡( 7ß|3íííǰd-ÑýדAÝÉóÛ5ˆMoJy°7¶›ÅÆLP椡[::Å¡÷œ²kd Ç“@÷ù|ÜÿýìÞ½›¯~õ«lÛ¶ûï¿?A…sÎ9‡o}ë[œqÆÜvÛm|ôÑG wM9ˆøÙV)4Ênõt­ƒºuì'!bíjº˜‹ªU9q K+X³Í»¢Ø+óJÆíôcÈBïêa¹g«V­Âãñpýõ×3{öln¸á^zé¥(°>õÔS™={6cÆŒáì³Ï¦¹¹94yéØ\ä]t¿D¢¤Uˆ:ôHé[Žh ÇôjEô£ú4PO×p–~ÒúUɔߠ' ,{ãСC¼óÎ;ÜqÇL™2…E‹±iÓ& o/«`Ë–-üùÏfëÖ­œtÒILŸ>Ýô®)WjèŠåa$¿uE-ˆûqòÇ–ý®+Â'e­WUh²Ý«1>Uµ·Ê{õÃô>hßµ.ŒAß}÷ÝÐóPZZ²Ø­TUUEUU&LàÒK/¥®®îôdSfC™OIyàF”¯zCZŠ»>M¾üH‹ÜÄî›´"qXu0º3>5ý¤ÙÈ%f_a>ÏYjš¹¹øýþ€744 ©¬¬Œ:uEEóæÍcÞ¼y¬[·Ž÷ß߉¡‡ÓñÀ—€ë-ëq³w1ôWÝ Bg"+¾A>Úm¶~ H–#SÑu¸Â\îV} ìÓ²å¢Ë¹£}‡Œ²µ®wÛܹsihhàµ×^c÷îÝ,]º”sÏ=—¬¬,þñÐÔÔÀ|ÀÞ½{9|ø0«W¯FUU ÑEVy.YI:_>p p-pžäÉ?Ö+0»H&`ÊSã@aªÝáɸ„F—éCéj,“1qún&Å <˜iÓ¦ñÌ3ϰÿ~þøÇ?2xð`ªªªX³f [·nD–û®]»¨©©aãÆìÙ³‡áÇ;z8•KKZÁ xYkÄônn»yÇò lÈ}ü^îºn1Ñ#|îŠãrÏ ÝŸÃ[˜ù–[naéÒ¥tvv2vìX®¾újšššxàøÕ¯~Eqq1Ë—/§ººš`0Hqq1÷Þ{/EEEÇè"{³Ð“E…òá–Vz6æè1ºÏeYˆÎÐ9tÝV¨CM &-)N£4døŽJIR\<9a¨“ùùÜyç<ðÀüóŸÿ¤¬¬Œo|ã(ŠÂÓO?͸qã;v,kÖ¬áå—_Æçóáñxøüç?Ï©§žêz8mC$Á¸õIº›F3O„UaŸå.þ w¹+À+„:è=Ô&Ýrÿ8u¢i nwŠ›?>óçÏ{­¸¸˜wÞy'ôü'?ù‰³¶)£„7nð!æ¤Å£Ô9âIZmSœ¾–²5‡Â¤›âFͲeË¢ûå/úáÂ…,\¸ÐV¾÷˜Þzë-î¿ÿ~***P…©S§²xñâ Žå5—ðØÇ“}°«±LDmšudªN\ Ýa¨>h¡ûºÇÌ™F`Ñ¢E¸ÝnÜn7¹¹¹,Y²„ŠŠŠ ÖÂÞ‘¦uáñèHÆsÑý¯]]W‰#5zÎÝbÖ“Šæe„uÛ”=ÐW:Å566RVVÆücrssÉÎζMàÉ,Š·ú ¢äDDS‰uÉtÅòšÑÌârtt›iLŽÛ½z¼òè tŸÏGSS=ô#FŒ@Q”¨®V™yã¼qŽ)&H&lJ‚ào>«h¨G±aúSÙZƸõ52«õkkk+Û¶m£¬¬Œ‰'¦|Ãô> êÓ‡!²\ö ’Þ’a¡GÄб·Ð±ÿtTÇX‡z™ýßBðûýìÚµ‹`0ȨQ£ÂJïÒc5!âÞ®^#’ÛF"ÜòIº‰ºžr¨Š«3$IxôHî´µ ô²²2FŒÁ»ï¾ËÆ™fèõs@÷xaÈ!lÛ¶ŸýìgTUU…}ä¾û°òòrÖ­[Ǿð,XµèPÚ„§ SèF¹›î4–±Ý:ÝLŒ}ýõ×ùå/É”)SX¿~=×]w—]vYØ1¿ûÝïøè£1b;vì`øðáÜsÏ= §ÿîÆô5œt èÖɪÆs½‹+¨8ZrŸ±Ð;8FÒ|À{ï½Çï~÷; Àã?Σ>Ê’%KÂ,ð'žx‚œáb^»v-_ûÚ׸øâ‹á‰kýD6(©…ª”ÅÐuÂgO873\Ù‰',Ã[jjjxä‘Gxøá‡™6mÿùϸï¾û8÷ÜsÉÏÏ·hÑ¢ èìì䬳ÎâÃ?t ¹Þ!•è™Åªeº*ùDGÃ…®¨a‡*6Z“åÞ) ™µ«‡%F²yóf†Ê€"§vîܹlݺ•æææ°ÓŒl€ÂÂBÇ:O e¦Ë=üJ&¯RÚÌ®¤O[ëêaQêëëëiiia̘1œp ¨ªÊ®]»bÊ€†Ñ©4??ß±Ð{O0h]ZèF–».·–¦um¡ƒš4 ¹O[è¾ZhX š|£}_è­–––0+»´´”¶¶6|>û ÜöíÛyì±ÇX´hQD:Zò[ó28@O±³ZÚJê/á$Åųе¨üµâyíjà8!|>ÜnwHñÊÏÏÇårE)õ577s÷Ýwsæ™g2iÒ$Ð{ÏBFƒ|XÙ–ÆqŠ=ö•4ºè}Ð#g!ëEw²©Ð¹ÿz«°°ÖÖÖÐóÆÆFòóó£b@”ŒÞqÇ|þóŸçüóÏ?f(tèëÑ)týèÙÝ1{޶.‚ mI‡Î. =£bèQ2 r&A¶TÔ[ö‡ÞÊÊÊ"„º„¶··£išm8­©©‰üàäææòµ¯} Çã¸Ü¿+Z’·£fèöÃYBek²Ñ^ˆï•è×—{Ó΃= <ƒÁ3T<³MÅøñãÙ¿?GŽ`åÊ•Œ;–¢¢¢°ÓVWWóÍo~“Ï~ö³,\¸ðÎpO7)©ûh_Îkw£g«cPØ,H¤ ÐTpWš2ÀeN',++£°°;w°mÛ64M‹ªvéììäÞ{凉¹™{ï½7Ô¹Õ±Ð{ÅÉcÓË]Q£Z¿êÖyèšd5ÂB7Ng¸ÜõÔÍœr¨z7:ÅtÒI̘1ƒ;aƱaÃ~ò“ŸPWWÇå—_Îo~ó&L˜Àu×]‡×륽½Çœœœn¸á†°¸šC}™ÿ»@[%µ×è¶'§¶ŒîXöüÝNq•••Üzë­Ü{ï½LŸ>>ø€n¸‚‚n¾ùfÆÇm·ÝÆOúS^zé%,XÀÒ¥Kq»ÝœwÞy ÷ž¦ßÕp–ðÂsEQÂŽvZ¿f w£Sœªª|ë[ßâÃ?¤µµ•k¯½–±cÇÒÑÑÁý÷ßϰaÃøæ7¿Ig§)%²²²œ¤8GiHHgpˤÜýe»Ñ\JQæÏŸÏСC9pàçŸ>“&Mà†n ¨¨EQ8ûì³;vlès.—ËIŠë=Ré*)NhÑJXPJ—‡ÓX¦ÏQ€n÷r/,,dÞ¼ya¯åääpæ™g†žŸþùÎÚ†ñÒÒã—Jq–{†O[KטœŒRºY¶f(ö3f̈:ÌúÚ;»œ[ IDATI'ÄI'uŒè}ÉB·¢¶etšÑI&Êåná"Ð3×Bw¨'” ÌEôsï ¯&I™°G[—[ÃåÒ’ö3œá,i¦¾2>Õ¡T[‘E‘W",ôDǧ:‹Û·=^ŸfГ Ú³3ÿg„4ôÈŠ–äõ_×ûAÙZÆÉ7=àz?±Ðƒ˜=Z#´ £ÜŒ©uM¬cåUÐû4i 0³sÃ2ŒoSè)o,Þ)NÑt\zEw6aJ=`;€Þ,t-B GN`Á’#§Ä4Þ#]sx³oYèŽË½ŸHåtXè©üz¿i,“Q.ýD¦­9€Þ]~M×Tð+ãHh|ªcð9€~l‚m;GfW@§§õk:üáÆ%ü$:pºï’z2g|j?'%NëרÕPMzèãvºâàƒèÇuoÿCjg¢§FBÓÖRÝX&…ç·Y¥cÞÀp案N—u耮¨u—­…n—$çÄÐû `f‡’ 1ëS¬¥À´U¥ôUÒi¡ë)oœjù“‘Iq ÷wR# Ë£-t%¤µ‹^î1ÂëŽÁ××±&³:mýŽ5ß……ž&["z†ý„Ô,J+]@ïA/!YŸª£vm:jTº3>5(˜³f;Ëä( $=Ë]EØ’†Dú~Q¶–Ô߈Ë=‰?ÊéÙ[ºmcÝÖb·¶yŠèZœGÄ {ã7X°`—]vwß}7---Q§}å•W¸òÊ+™4iÏ<óŒ³Î™nÚ†,t…ÔgQ’··õÞ±Ð3ÎJï¦ ¨®®æÆoä²Ë.cÑ¢ElÞ¼9ê”ÕÕÕ\{íµÌ;—E‹ÑÑÑázï ;—{xW+ˆG&ÅÙyèœÖ¯™M‡æ§?ý)Ÿÿüçy衇سgË—/:î¸ãŽcáÂ…Lœ8‘¶¶¶c|Õr€9ýÀÕ‘žš²¤]¢ ï“ÓX¦çÔÞÞÎC=Ä 'œÀÏ~ö3FŽÉÃ?&ÿ ¸ôÒK¹ä’Khll ½ïz_°Ðu@—(m¸fÜDUX/øXYî8€žÑôÎ;ïPZZÊE]DUU_þò—yíµ×hjj ;nòäÉœsÎ9 8ÐY4ÜÀHR›ŒŽ©&Zʧ­éºŽ¢¦v•ôƒJºÆ³ö–àÀ¬]»–/ùË >œ«¯¾šýû÷‡Æ©TYYÉE]Ä 'œ…,õŠ…®‡k»ºAÝvG…5–QíëЗ{_$#+Îúèê€Zù0lGŽ¡¼¼<ä:t(õõõx½^g)û;¥iZ:†³¤K‚fŒç%Jø‹ 0Ãj^¯ǃË%ÔÒÒR\.µµµ «·%ýƳ“m¦­Ee¾‡O_sÊÖ2‘ìÆ­Õ ê¦;äó}æPU4ÍÜÁ`EQR^jäP’¡ÊhͬtóJbP¥ ¡ô€Ó¤¸Þ¸†n#¼R‘Ï×-²Þü†|x‚{á4‚¼Åož@–{Ï ½ A¡Ýb•謒ÙM13Ð;â–-[Æš5kxê©§¸è¢‹ƒ,Y²„ƒÐÐÐÀ† ¨­­eÿþý¬_¿ž@ pŒ®±ØIò›Œ¦[D¤«õ«Ò=QÕ“Ÿ‘ázrIK@˜¼;pà@æÎËOúS6nÜÈO<Á‰'žÈ!CX¾|9ÿþ÷¿á½[¿~=»w鈴±‘7ÒÐÐàzïXíŠ ×ØÍHÕC¨¬kæÿªÛå®%ÁXp(ÙzWˆJJJxä‘Gصk¿ùÍoøÂ¾À¥—^J  ºº:Tš²yóf~øaÚÚÚØ²e >øà1gïV“Ú–|éHÅJG ]¯3$â`Œ¶™.kRc¡wõð‡ŽÎÎÎæž{î¡¢¢‚Gy„¡C‡r÷ÝwpðàAêêêÐu¯×˃>ÈÛo¿MNN<ò›6mr\î½Cvz¸†nÍrO4~âÄÐû¢vÞ½ù©cÇŽåÁ {­¬¬ŒÇ<ô|îܹÌ;×YÞ°uÎtÑÍ ™ëˆ èúQÞ­ÌSºß*®  €;ï¼3ê¨Ûo¿=ì»’VÐû( ‡ÊK®”mºQñâ”­õ%r¦³ôJ×øÔÔ»Ü{{|ªž„ŸY¾’ô6sw½W(†s\ÑßUMWÐŒ‰õ ¡ò[%}¢Ç¡„É.)ÎôÌåY+Ó%;Z)ÑV%u™M©pgœõœÒ ÷á`cbG˜Ý¡q节¦‡ìQ ½S¶–©€t–é¨HJHo~o K×SŽˆ}ÁBOÆ5RM©Ïr$¿è™/„ºŸŠ¢ )ëuèJŒL7ÇåÞ×(èXè)§<Ä,ô¬Ì†=õ¶­®ƒ[ÑQSü{œ^~ Zèq\î(1÷XâP ½ïz÷’âê /åöIO×—tXè™c=§ãn'’—œ /¼ââÔ­d0äwÞaÓ¦M\yå•TVV†Þߺu+¯½öªªrÞyç1f̘4¯qÉ÷MYwgšËÚê´ï­'wxnL\I×´µTʀ̛¶Ö} =ð׿þ•­[·râ‰'rÎ9ç——±]t¶lÙÂo¼¢(\rÉ%wÜqñ‹7kjjxíµ×øøãyþùçÃÆ;¾þúë<ôÐCTUU±gÏî¼óNZZZú Þ–ýOÆ™a )jD]±ó¾ÇôWê3/)ný4Ì›ëaÞI¯×ËwÜAuu5#FŒàG?úo½õVÔY_xáüqÆÏúõë¹ûî»éììLÙ¯èììäÕW_eß¾}üö·¿ ›Í\]]Í7¾ñ rssq¹\Üzë­8p Ê€¾ßŸlç+ŸÄ½DÝ(ØÐ“k¡oëÁ*ÑçïDäÙâÉ- Ìüqþö·¿1~üx^zé%{챨³îÞ½›Ûn»‚‚<‹/f÷îÝñ-ôªª*žzê)V¬XÖOZ×už}öY,XÀå—_Î…^Èé§ŸÎÖ­[™1cF†3sªÝ Ÿ¹iµËídEqU‰Nv‹xÞ©e^ ½ÿ;›»—å¾víZjkkùùÏNQQ>Ÿ?üáœrÊ)dg›îägŸ}–›nº‰ùóç3}út®¸â Ž9°aÃRò+òòòøÉO~B[[[”‚ñÊ+¯PUUÅ7Þˆ¦ilÙ²…¿þõ¯Ü|óÍýHd‚…ÁÎ`œKè Ï…8ZéæÈ+'žå^SSË/¾ÈSO=Ř1c>|8ßúÖ·¸ñÆ)++ ÷—¿ü…iÓ¦qÝu×ár¹X½z5o¿ývÏÛ+Õ××S[[ËøñãQ…ììl ÔO´ódÞL¿Ýlo‹…ÖŽ.cèv"ÆIŠëk”ÈøTS¤mÙ²…áÇSTTÀ¬Y³Ø±cMMMagÝ·oÇ<¥¥¥ :”mÛÒïïðù||òÉ'L›6 UUq»ÝL™2…Í›7‡yòê¶gª+ãÒÑ)ΩΤO®…O˜1ô††ü~?C† `ôèѸÝnvíÚvÖõë×3eÊÜn7Š¢0mÚ46n܈û¹çžã¥—^Šún·›Ç{,L+°’ßïG×u<Oèµììì(×_I‰—`ðõ c® 1ŽîiÝVÖÿn.ÌžÏnù¶|Þ ìï  *°h?®&”;?7x¶æð/ñJq ÕÍö¬ ï+cý6xx?<å‘§j‡j7´Â.žÏ7=d†C'`qþh„WÁëQ¶bzDL¬Uî«TKâ“ï\.ee»âþœœæ0€ÌÊʲ¼—ƒßïÇ`0ÊcQUÇ­Úúä“O¸ï¾ûlß»ùæ›™7ož½ºªiø|>rrrÂd€ñUÕ´ÊÊšÑõTÈàÞ$¹í_­»³h^•|ì‘ÝòáAtª“¼nôcWå×k’|Ú(_óDœBš>ÍlâCn5;€¢è¸Ü¼’‹ýÒâ«Å‚އ mÕGø×ºz\qÄMT4\z€O7¸øý¼ú¤‚ 9¨z® Ž¢éWü„{‚ý#S·`!æý¦Úé‚O‹áN]ü´NÝLIIIã‚p··· !ÚÙIcc#ìñw:t(_ÿú×mß«ªªŠù9ÇCYY‡½väÈJKKC GHªÝål ‡Ž9Z¿þýn©Ä755 £ ëÊÊJŽ9&+ˆ{øðá ><æ4M£­­¶¶6ÍÍÍ‘——ÇäÉ“yóÍ7™0a‡Æëõ†\9äP÷褓NbÙ²e¬[·Ž‘#GòòË/3kÖ,òòòعs'C‡%''‡éÓ§óî»ïr 'ðñÇãõzm•òD©°°Y³fuyL[[ÍÍ̓AZ[[ñz½äææ2{öl^xᮼòJ«V­âúë¯OK¬Ö!‡úUVVrüñÇóæ›orÆgðî»ïRPPÀ¨Q£Ø¿?ÙÙÙTTTpúé§ó§?ý‰‹/¾·ÛÍÚµk¹õÖ[Qt½ëÞbµµµ,^¼˜êêjª««9ù䓹õÖ[9óÌ3©®®æ{ßûš¦ÑÜÜÌõ×_Ï%—\æ2pÈ!‡§'Ÿ|’¿ýíodgg“““ÃC=„®ë|îsŸã™gžaòäÉlÙ²…x€öövþ÷ÿ7å|÷Ýï~—7²råJ¦M›Æ\À-·ÜB àûßÿ>[·n`ìØ±<ðÀa¡8‡r(qZ³f ?üáÉËËÃëõ²xñbæÍ›Ç¿øEÆÏ7¿ùM:::¸ë®»8pà~¿Ÿ“O>™Å‹Çô`0È‘#G°V\\L^^º®‡¬w3, •mÛ¶ñÃþmÛ¶1eÊ~ýë_‡>¿oß>}ôQvíÚEnn.·ß~;Ó¦MëSZýÇÌe—]FUU‡#Fðýï?¥õ¾Ý¥ýû÷³dÉöìÙCqq17Þx#³gÏî³ÕçóñÝï~—U«VQQQÀ5×\Ã%—\Ò§¾§ßïç©§žâïÿ;{÷îåç?ÿ9sæÌ`ûöí<öØc8p€ÒÒR¾þõ¯‡C“A@€¦¦&ùùù ©¯¯§¤¤ÇÃÿgï¼Ã£(·?þ™²%½'”@è¡Io¢bA@DEiÂE¯¨(¢\‘ŸR¥ "^‘bEŠW,Àõ"ˆ^,€¢tDJD„$„ôl²mÊï-d!x)œïó̳™ÝÙÙɼóžïû=ç¼çÕu›ÍFii)f³™¨¨¨³\Ü—yyyq¼¢¢¢§ÓIQQ‚ éØív^xá8€ÛíæwÞ!%%Åÿ,ÌŸ?ŸM›6!Š"wß}7ýû÷¿ìÿÇÅàÔ©S :·ÛíŸüÊ+¯üaâj ==3f““C\\O<ñÍ›7Z;PZZʳÏ>ËÁƒ‰ŽŽà‰'žàöÛoªëܸq#o¿ý6¿þú+C† áé§Ÿö?ׯ¼ò »víB’$ D=.Ù€Z×uŠŠŠp8X­V"##E‘ÂÂBdYö‡ÂÅÅžœèèhÌfóù§­I’D•*U*üÌg¯(ÖIïÞ½ùå—_سgOÀgï¼ón·›9sæ°mÛ6ÆÏâÅ‹ŠUƒQOJJâÕW_%66Y–‰ˆˆªë[°`f³™×^{õë×3iÒ$Ö®]´îN߃úàƒÒ§O‚î:EQ¤I“&Ô­[—)S¦$z¾úê«T©R…1cưvíZ¦NÊ[o½uÉ *ɲL\\ÜY}°|߈ˆˆ+ú<žyMåa±XHLL¬ÐvtîÜ™îÝ»óÜsÏ¡ª§3ú¿ýö[¾üòKfΜ‰ÍfãÅ_¤Y³fAEDªªâp8˜8q" 6ôÎ`‚Ãá`öìÙÔ¬Y“^x>úˆ—_~™eË–µ(((`øðátîÜ ( ’U«V°zõjl6›ÿýµkײcÇf̘ÁÉ“'™gg¾gµZRáò% R¥Jî¹çž³ªF9¾ÿþ{úõëGÍš5¹óÎ;)))!===è´  €7²eËœNgP…l67ndèСԨQƒž={¢( ûöí z—ÒþýûùòË/9|øpP†g$I⦛n⦛n Ͳ²2vîÜÉý÷ßOrr2÷ÜsGŽ!??ßðV³ÙL=Îò©ªÊš5kèÕ«M›6¥C‡´mÛ–õë×Ýÿ ( ?üð7näÔ©SAåAO2ÔÖ­[yøá‡INNö×$HKK úçc×®]lذcÇŽÝ}HMM¥{÷îT¯^=@H}òÉ' <˜ÔÔT:uêDJJ ?üðCP\óŸ®å^\\Liii…ê&!!ᜆÚgü|Y{¢(Iaá•ÀTVVvÖü^âã㉈ˆ {÷Ê_|Á¿þõ/fΜиWÛÐ(Šâ¡…‡‡AVVM›6 Ê,Š":t   €“'O²téRîºë.üñJAP§Nò»À|„eµZýn¯¿œNç93111g©‡òßËËËóϵHJJ"333`JÞ•èC¹¹¹TuŒˆˆÀb±Ð­[7ÂÂÂØ³g ,`ÆŒ´k×.¨ÚÀWÀ§âÌf39994hÐ (ŸI’¸ùæ›Q…'N°hÑ"†Jÿþýƒþ™÷ñFùg7!!Áÿ]m¯ÈŸ"tUUY±b«W¯®°#,X°àœó×}D_¾9÷îJà믿fÁ‚~öÆoP§Nf̘áÿû÷ïφ 2dHй¯|¯š¦åHדÉÄßþö7ÿ~Û¶myê©§>|x¥H¤”$ ]מ]]׃úž_NìÞ½ûœó×ÇÇõ×_ÿ‡ƒ»òóë}6àJÄììlüqåìÕ®zè!úöíËØ±cýíºüuI ]’$샞ùû̹ԯÅb!##ƒÔÔTB/IêJ¡k×®.|œuý>/ÂÿR¼ãRÃl6A^^µjÕ"//ÂÂBêÔ©SiÁ—X©W’EÜ“’’PU•“'OR³fMJJJp¹\ø¼_ËhÙ²%Ë–-«ð³?ЉZ­Vj֬ɸûî»Ñu#GŽÐ¸qã+j«V­Ê’%K*|þBBBβk111Øíö Pb>„……!Ë2EEEÄÄÄÓé¤fÍš•æ9Šˆˆ@UÕJa¨V­äúë¯GÓ4222hÓ¦MP<ÚårÖC_‡ƒß~ûôôt Ù½{7µjÕ"**Š®]»²hÑ"øöÛoINNög¿^)X,–³ v”ÇæÍ›ýî”;wò믿òè£̓N·nÝX¸p!O=õ«W¯&111¨ë”••±~ýzêÕ«ÀÂ… iÑ¢EP*Ü'N™™Iqq1‡&99™zõêÑ©S'/^LXX+W®¤Y³fçôF]ë0™Lg’:‡"//»ÝÎþýû1›ÍT¯^^½z1fÌÚ¶mKqq1ûöíóg_IË%¹9r„P·n]233Y¼x1 *ÏÍ7ßÌ?ÿùO† Æ’%K¨_¿þe«ë)PPPÀwß}GýúõýɽíÛ·:;PTTÄÑ£GÉÎÎFEvïÞMÆ éׯS§N¥AƒdddŸŸÿ‡Þ¨+êAÐ/Ó°èĉŒ7Ž’’¬wÔ¨Q´k×›ÍÆG}ĦM›¨V­O>ùäÿTéêr`óæÍ¬X±‚ââbyðÁý5«ƒ‰ ?øà¶nÝJݺuãäÉ“ý]§ÓÉÊ•+ÉÎÎþËÞ¿ôôtV­Z…Ûí6& 0ýüx÷Ýw>|ø%?oqq1Ë—/'++ëËÏÏçïÿ;»víò¿g·ÛY²d 'Nœ¸èßýú믹ýöÛ¹óÎ;¹çž{0`+V¬Àn·Wªv9|ø0~ø!.—Ëè} 0p !_«ÿXFF¿þúë%?oÕªUy÷Ýw ýÃãÜn7ûöí XZ3**Š¥K—vÑ¿›——Gvv6ãÆ#))‰={ö0jÔ(DQ¤oß¾•¦]n¼ñFÚ´isÞûgÀ€ B?/Ž?Μ9sسg¢(rà 7ðä“OúÙøî»ï˜;w.………4nܘ˜˜²²²xóÍ7ÉÊÊbäÈ‘¼øâ‹4kÖŒŸþ™9sæ““ƒÉd¢^½z¼þúë¼ôÒKìÛ·‘#GE÷îÝyôÑG8p “&M¢uëÖ8¾úê+Þ}÷]Š‹‹ cÀ€ç$èÐÐPÚ¶mK:uhݺ5_|ñ7n¤oß¾hšÆîÝ»yíµ×ÈÌÌÄl6sÿý÷Ó·o_BCCq»Ý¼ÿþû¬\¹Y–éÔ©{÷î¥{÷î 0€o¾ù†Ù³gs×]wñå—_Æâŋٲe o¾ù&'OžÄb±0dÈîºë.¬V+;vì`Μ9dff"Š"-Z´`ôèÑDEE±dÉ>ûì3\.!!! 8~ýú±iÓ&Þ|óM-ZDXX™™™Ìš5‹_~ù]×¹ùæ›>|8 ”””pÇwððÃóí·ßrìØ1jÕªÅÌ™3ƒ²þ»g¢°°={öø÷CBB¨Y³f@­õãÇsäÈÿ¾Ùl&99™jÕª!Š"Š¢pðàAòòòΜœ\áꊺ®“““ñcÇp8X­Vbbb¨]»6§N"##ƒæÍ›c2™¾wìØ1 hܸ1iiiäååÑ´iÓ€xòóóÙ·oñññ¤¦¦VŠe B¿†QRR„ ÈÏÏçÅ_¤¬¬ŒiÓ¦¡i/¼ðEEE<óÌ3Ü|óÍŒ=šC‡1yòdš4i€¢(þ% ‹‹‹™|˜U«V1bÄ$IbÚ´iÌŸ?ŸqãÆÕB T„;vpûí·sÏ=÷ ë:Ç'99™™3gÒ°aCt]gÅŠ̘1ƒN:¡ë:¹¹¹È²ÌôéÓ騱#eeeŒ;–C‡ѰaCÿ¹{öìY!¡ïÛ·§žzв²2ÿÀØáp°råJ~ÿýwúöíËæÍ›©[·nÀ `üøñ‚Àœ9s?~<«W¯æŸÿü‘ IDATgÀÚåK—.eôèÑôîݛŋcµZF6ýêáĉ|þùçlÚ´‰ øGÄ#FŒ`ذalܸ‘ððpÆŒCbb"­[·f×®]üöÛogKÓ4œN'V«•¨¨(jժŠ7Ü@­Zµ £Aƒ´lÙÒ?º-ùóçÓ·o_†zA䔑‘ÁSO=…ÕjeÿþýÔ®]ÛßÙÖ¬YƒÙl¦k×®‚@DD·ß~;~ø!={ödñâÅôèу!C† Ë2)))|óÍ7çOJJbÔ¨Q4hÐ]×3f U«Våæ›oFÂÃÃ騱#}ô·Ür .— ³ÙLtt45jÔð‡\.š¦JµjÕhÙ²e…K#îß¿Ÿÿþ÷¿¬^½šÆû ËÀ™0a‚ÿÙgŸ¥S§Nþ{ðñÇc³Ùˆˆˆ0z° ‡ ¬\¹Q),,¤[·n,Z´ˆiÓ¦ùûE:uøä“OüÏü<Àüùó騱£ÿ<<ð'N 8ï™PU• &P»vm^{í5BCCýƒ„ˆˆÂÃÃiÚ´)Ë—/gܸqþïýòË/ìÚµ‹iÓ¦ù—•nÓ¦ ü1Æ Ãb±àt:ùä“OhݺµÑ¨¡ Ìb±¸‘êׯOnn.N§“¬¬,ÂÃÃýîwY–©^½z€K̇¨¨(ÆŽË+¯¼Âºuë¨Zµ*½zõ¢_¿~t-ééé 0à‚•ftt4÷ÝwQQQ¬^½šÂÂBÿw=Ê¡C‡Öl·ÙlÔ¬Y§ÓI^^×]w²ìiòÈÈȳÜÖ¡¡¡~W ®ë¤§§³}ûö€sÑ¢E L&Ï=÷3gÎäá‡&66–~ýúqß}÷Ñ®];|ðA¦M›†Õj%%%…çž{ŽÔÔÔ³¼%6›-@)$&&"6› «ÕJHHH@[EDDàr¹PÅè½* $IBEbbbHLL$??MÓü„®ë:N§ÓOʪªúmŠ¢øÁO¼gzQQ)))ˆ¢ˆ H’D•*UËÿÎ;ïdÍš5<þøã~Ïá×_MHH7Þx£ÿ\mÛ¶åÀlݺ•N:ñÃ?`µZiÒ¤ F£„~õŽÃá ´´”„„²²²ˆŒŒÄd2ƒÃá ¤¤„˜˜TU%//MÓ*ì¤;wæ¶Ûn#77—>úˆ‰'R«V-êÕ«w^¢NLL$##㢮ý–[n¡N:téÒ…{ï½—ùóç3yòd¸é¦›X¹re…<<<œÜÜ\4MCEìv{@žÏH”wùÇÇÇsÏ=÷0oÞ¼ ¯§S§NtêÔ‰œœ¾ûî;ž|òIâââèÖ­cÆŒaôèÑüúë¯Ì›7'Ÿ|’+V|?$$«ÕJvv6)))€gªª„††¢išáV7Pé¡ë:?þø#àq‡§¥¥1hР€öáÇéÝ»·?,ÎÌ™3γråJÿ¬™^~ùeêׯpŒÙlfÈ!¼ð :tˆÖ­[Ó¼ys:vìH•*UE‘ûî»wß}—ï¿ÿž^½za·ÛY±býúõ#22Ò?s&))‰5j°råJZ´hÁ‡~H÷îÝ)((0=HqMg48N222üÛ‰'ˆ¥U«V¼ùæ›?~œÃ‡3oÞ|Aÿ[DDÇgíÚµüòË/téÒ…´´4þóŸÿpâÄ ²²²Ø¿?@EzôèÁ† غu+YYY¬[·Ž={öœ“0}ßÙ¶m6l 33“¬¬,öîÝËáDZÛíüøã¤§§£iÍ›7G–eEáÈ‘#ìÙ³‡“'OGjj*ªªž¥ªëÕ«G³f͘;w.G%==·ß~›Î;bôN× &NœÈ¸qã˜6mwÞy'=zôè{Õ«WgÚ´iLŸ>™3gÅ;ï¼`wn»í6¦M›Æ´iÓ˜0aÕ«W¯ð·úôéÃgŸ}FçÎ9|ø0S¦L¡wïÞ8p€””ÚµkÇgŸ}†ªªìÚµ‹S§Nѵk׳ÎÕ«W/~úé'~üñG¶oßν÷Þk4¦¡Ð¯öíÛG÷îÝýêà½÷ÞcÚ´iŒ?žÞ½{£ë:õêÕcÒ¤I„‡‡“ššÊ³Ï>Ëo¼Á¢E‹HJJ¢Q£F*t‡ÃÁÂ… IKKCEáöÛo§cÇŽþ,ó¹sç²hÑ"zôèÁßÿþ÷€NÜ¿l6>ú(‹“ÉÄý÷ßÏ“O>yÖo ‚ð]AèÑ£ï¾û.K–,aòäɼôÒKÌž=‡Ã$I˜L&yäRSSyàعs'>ú(ñññÔ©S‡zõêù“Õ*B—.]ÈÏÏgêÔ©¸ÝnDQÄb±0jÔ(Y´h¿üò ¢(ât:8p :t`ïÞ½L™2»ÝŽ®ë‚À /¼àw§ûþøøx^zé%ÆŒCß¾}QU•ÔÔT^zé%h ¢û`À@e‚ ¬[·UUÙ°acÇŽå‡~ [·nþcBCCý¹6à G=þøãŒ;Ö¯ä«T©p̹`6›iÕª­Zµ<á¸ÁƒóöÛo3kÖ,DQäÁdÈ!äää°téR:uêDíÚµÏ:Wrr2µk׿•W^¡Aƒ~×½ }ÖôФç5›Í†Íf;ëýØØXÌf3%%%ØívA ,,,`^´Ó餬¬Ì_üdìØ±Ô¨QƒI“&¡ª*………DFF"Ë2eee”••¡ªª_•ûHÒívSTT„¢(„„„A~~>‘‘‘þcEñ#IÆÆ|a‚èè耳¢¢"t]'** ð¸¬N'º®c6› ÷„²²2JKKÑu“'O2tèPÞxã :tè€ÓéÄf³@šš¦ù³d¬V+aaaH’DYYv»EQeÙÿ)Š‚ÍfóÇû, QQQ‚€Ó餴´”˜˜ÿïøÚûŒððpÿˆßb±T8E‘¨¨¨ Ï{®ÿ]–e¢££+¼ŽŠ~ç\m!‚?Ïá|÷Á€ÊQéׯË—/çÛo¿å®»î   €O?ýÔOÈóçϧK—.ÄÇÇW®;Eaüøñ˜ÍfZ¶lIhh(›6mâçŸfÑ¢E~’OHH [·nLž<™””n¹å–sžóŽ;î }ûöÉ©‚ÒÄòó PZZÊöíÛùå—_HHH`êÔ©þyè•YYYlß¾#GŽpÓM71iÒ$cê——v»›ÍF¯^½ü©˜˜âââÈÈÈ M›6þÙàСC2tèPž}öYÌf3š¦‘ŸŸOjj*5úcƒ.IÔ«WÂÂBöîÝËo¿ýF­Zµ˜2e íÛ·,ׯ_Ÿììl†z–+?77— ššŠ,Ë„‡‡û½d………ÄÅÅѦM› §£¸z8¯Ë]×u6oÞ̪U«HKKã©§ž¢sçÎ~âûðÃÙ¼y3ÑÑÑ<ýôÓÔ¨QÈs0ð'àv»Y´h;vì@Ó4&L˜@rròYÇ•””°bÅ ¶lÙBrr2Æ «0þy)qìØ1Þ{ï=öíÛGË–-yþùçüSž>ùäDQ¤wïÞÜvÛm† 0`àOÀןþóŸÿžžÎóÏ?0óAUUÖ¯_Ïš5k}ú——wQõ þ êׯϨQ£ü¥†}ƒýuëÖqã7rë­·Ò¥Kn¼ñF¿j0`ÀÀÅA–eî½÷^PïÿL¬ZµŠnݺqóÍ7Ó¹sgš6mÊwß}wáóÐÏôÌPZZJÍš5Oì&!!œœ£U ¸ŒÈÏÏ÷'W†‡‡“˜˜ÈÑ£G¯øu¸\.Ž?î/¢$Š"uëÖ娱c¨ªj4”— ¿ÿþ;uêÔñÏô©_¿>‡þóYî>‚/+Eñ,âoР%yy•-+¹¸ØŒN¡‚}Ñû*y_eï«ÕûY§ ¢)àm/BË&è'ŽnÇaA;zœÍœø¥”„HÔ=‡þžº ªéPdñ€(€^ÁF¹×Êz—¯&r€]G^P"áþýûéuãÄžœ­Vž8qÑ}ïÌšÕI¸ðU,o4M;Ë4ižD£æ•gRÍñ#*5jW®„/㚯 Ò~Ý;.¬ÏvhÞá<Þ³b`áªUþ…²þŒ ðõ»?Ý⢢0™Lœ:uÊÿùùùgÕ., !?¿[%#ôù‘ÀÂ{2`ö¾Zá}­î}= â×Pã Ð2Á9qÒ,ô÷Ò´y&‘õÐÞzÿ{%Š¥§G]èî²aÆ7 C7–·{¸žR/©»½¯j¹W½ß嫉µÀ…–mPU•”ü|n8ÏqÿþSð"""üS™yyy&Ï]n˜L¦³ÊŸ8q‚¤¤¤³ 5h^ÊŒ%•gø¶xN)CGU® Æ5_<7øÂ§Z ¹íŒE¹ÎÄ.¸èµ)ªU«FVV–?##ƒäää s¹“žžŽÍf#''‡ôôtL&]»veÙ²e>|˜µk×"IÒY p¨ˆô}›°œÖ΢N;rˆŒZæÄdöhz—¬¦ÓrÛ©ƒY.Åm ’wH÷GÛ™033“ôôtœN'Ç'77—ÒÒR>ûì3ÿj}ݺucÅŠ¤§§³nÝ:,ËeÏrw¹\¤§§sêÔ)l6GŽÁápн{w6nÜÈŽ;غu+7n¤gÏžFã0€ÇvŸÏœéŸ(((àèÑ£”••qòäIŽ?ަi|ûí·ìÙ³€{ï½—µkײ}ûvvìØÁO?ýÄ-·Üra }ãÆ¼óÎ;ddd••ŦM›xï½÷0`sçÎåùçŸÇl63mÚ´k¤4àår‰Þsû6à­Y®{\¦¢ ºËl•Ð.¡ n¡kBw&Á³‹Wïw9¸ —®ýÑQ¯¼ò û÷ïGQ¦OŸN=èÓ§o¿ý65"66–¿ÿýï¼ñÆ<ûì³DGG3qâÄ€J‡—'NœàÿøÙÙÙØl6FŒÁøñãi×®}ûöåå—_F DóæÍ+}Û™-‚qÍÆ5_‹>p¦í^»v-Ë—/'33“÷ߟï¿ÿžyóæ±fÍ4hÀu×]GÛ¶méÝ»7³fÍB×u†N‹-.ŒÐ{öìYá¨;<<œI“&]ƒÍÐà ýްzZ]õP³ èN&Kî³€€îQè2~ºKõ(t:w¹Rú™ƒšW_}µÂãÖ®]ëÿ»J•*L™2åŠþ/µk׿ã?®ð³¡C‡2tèÐkªín»;ĸf㚯¡ŸI `À€g7{öìÓƒ“‰áÇ3|øð?<—¢® ¡‡xsç4D4TÅ)$ç)7+ é§]î^BwêP~p›w9è<«Ð ªÖŒk6®ù†ð'úÿ*" \¶±ÙùÜI<‰r€®ƒèq¯ ª Ù*¢9]˜-º^N¡{áÒº~šë Ñ _@‡7`ÀÀµKèç³—rPoúemÊó™k»W[º‚ˆ «àvc²ÊèNB×½ ÝRžÐÏPèà¯øæ9 Ý€¿î þ|6àR’°AèWÞºNM¨ ¸1YE4§‹tïcQÀ3ïLõº„gzšj(ó Ä…¸Ü¥- ¸¶ ýbcè¡WvBݲA×<„"£9ݘ£< ]¼„î›¶¦y”3 ǘ<­k(tþ„~>`ÄÐ+ |UâdNW‰óé2Ÿ¾–½ ݲQPf¯B·Ztt]õ8ð½•aTÕ£ÊÍF¶Ò+tƒÐ ¸¶ÀPè×Ts–ßÎüLAöü©y]Ðup+H ÍáÆdöLQφŠšfƒ ‚žÐ¯dBŒ‚Îg.eØÍ ô« ¿ÃEw€É‚ˆªâ‰;Ý„XMCÐAôÊÝš‡Ð-Æ zB?Ÿ;Í t®]ˆ` B¿¦ÝÛœšd³‡©EAP] f‹¯¿W¡{¿¥a¸Ü+¡.wþÚ Ýp¹_³½ã5»=û2žºÙ‚¨©’ˆ$¨h7!ݯÐo†»[=Mèç+é¯rþc \¾Ö>_BÌ™£óââb~þùgŠ‹‹iذ!5:ë;v»;w’™™Irr2­ZµÂl67Ü€ Tè›§i?ýô'Nœ 99™-Z`±XÎ:æ×_%--ÐÐP:tè@TT”!‚J¡K&Ï5ÉÓ,šKÅdÐÊÇÐ9C7 =è ýbgQU•iÓ¦±lÙ2öìÙÃ?þñöíÛwÖy.\Èܹs9zô(³fÍbÉ’%Æúã )¡ŸÏ”WÕº®óé§ŸòòË/óÛo¿1cÆ V®\yÖyúé'ž{î9öíÛÇÇÌĉ)))1úå1ãç+*ãSêêéñ™î³QU$ Íé&Ī®{VW÷.vîV¼1tÝSšÆ@åUèå }Û¶mìÚµ‹¥K—Ï‚ X°`sæÌÁdò<'n·›÷ߟ%K–ЬY3¶oßÎ!C¸ÿþû‰ŽŽ6nº•X¡çää0þ|^{í5š5kÆ–-[?~<={ö$""Â?ðŸ?>}ûö塇ÂétrÛm·±iÓ&C¡_}…îÍr×]ÞºŠ I誆®iX,x:Žz€…W ig–ϳ•ï€û÷ï'99™øøxn¸á:DQQ‘ÿ§Ó‰(Š„„xµ'//ììlã†0d.ÒäççSVVF:uhР’$ñû￟f EÁf³ùí„ÙlFE8`(ô  t \ ‡"*nPÜ誊Ŭ{ Ë‚—¹ï«è]ÝW-Î@pAΟ¸(–ûÜf³æßŠŠ¢¬¬ ·Ûí/,,ŒÈÈH¾ùæªV­ÊºuëÈÍÍ¥¸¸Ø¸á !¡Ÿoz±\N‘¹Ýn$IBðÆWCCCE›Íæ?Æb±Ð¬Y3>ÿüsÚ·oÏ8tèÅÅÅ¡_uB÷ÍCÇr4x]¡«V«Ni‰Ž,ž®çÖ½õõÓê\¯`3pu!Ë`9#ë- øB=*ù½¡GFFs~~>ááá o‚ 0gÎæÏŸÏúõëINN¦Aƒ$$$7Ü€ ƒ(‚åŒ|Õ2`Y^#½]ƒ¦åÈZQ4o¹o›Í†ªªDE®M9räH¦OŸÎ£>JÕªUiÖ¬UªT1ýêß%o^œ LfO–»(€¢€ªa1k:5,&/ï{³Üe< ´iåݧÔUƒÐƒƒÐ+è̵€ÇÊíÿR®¡š6mʲeË8yò$IIIlÚ´‰† åºèaÿ–-[²`Áìv;Û¶mãàÁƒ¡0Œ„.œm,Àƒåö—¸NÿKTTiii´jÕŠƒP§Nt]÷êcbb˜1ceeeØívú÷ïOË–- B¿ò˜òÑðò…e<„Žª Ⱥ¢¢«!VG™ŽU>k²› ‡$Ãùf“‰§½é´jÕŠN:ñä“O’””Dzz:¯¿þ:§NâÎ;ïäý÷ß§Y³f,[¶Œ½{÷âv»ÉÈÈ`Ê”)„‡‡7Ü€`³øâùm@y—{BBÿøÇ?7n5bÿþý<ñÄ„††2dÈš4iÂèÑ£ÙµkË–-Ãd2‘––Æ!Ch×®AèWx¼Æé™Ç¾ÙáÞ}Ý &3‚ªx¦§)*¨V³ŽË¡a‘Aô6¼Û˜²VyÆoâSO?ý4 ´´”””RRRp:,\¸ÐŸ(Ó©S'jÖ¬‰ ¤¤¤P£F ã^0Ìfÿ"l@çΩV­¹¹¹üío£~ýú<÷Üs„……!õêÕã¾ûîÃív3hÐ RSS=ƒãn_­v{È\”½ îS襧º¦a±‚½ B÷ÇÝúùºŽ±>úÕ—èœ1dwànXX­[·xÏb±Ð¾}{ÿ~5 7` ²˜ú‹´¢(Ò¤I“³kܸ±ÿ:vìx¶Ú7îøÕ’n*å]wÉäu¹‹èŠ ªŽÙ,àt觺æ©å. ¡_„n0`àÚ6õç³ÎK÷s¡_±ašH oÅ…=.Ï´5³œD‹ Õ“/'h8í:VÉ«Ð5P40©ì•ƒÐÕY øk›þ+¸:‹AèWl˜&V0,+G躗ÐN‹ MQM":N»G¡ûÝ¥ž¶f ˆ!c¬ÎbÀ€¡Ð¯ „~Õàö¸Ü%_Rœ·RœÓ‰d5ƒêB’DMÃíÐ /×R —»·,*§§¯òq\EÇJ¨—h´%¢#£oÃ\A½AèW .ÏídÏ„rÝ ²ÝîD´šÐ;’, è:N»Fœ)ð›¾AŸQH&ˆq!1tC¡-ôK6Ú2z§¡ÐÏc' B¯Ì½ºZòº¨xüé^—»dõÄÐ%Y@TU»ŽEÄ_5Æ­1ôJCèF ½Ò@Cüƒ.% ]`c èå|fžïé†jÿ«úùl€ár¿ZÙ;m Oª³²­Ô‰l1£)’äQè.‡î)!ê%q‡ VÁ tC¡¸´Šüܪ\¿(Åx¤îïóåßÓhË_2mÍPè•ÙÂûn¹ D“'.¸BÇïr·«hzåÏï)‡O?ý”¥K—¢( uêÔaâĉDGGóý÷ß3oÞ<ÊÊÊE‘ž={2hÐ dÙèÎNègºÀ ½Ì¦±‡“]›ílÿÞŽ$‹¤4´P¿y(‰É&beLfUÑ)ÎWÉ9áæ÷}N~|%Ÿâ<…ÔæVÚu£Q+ñI""º÷7|„î)ûtf$]À˜øpÍQÀEÚ€ƒ2yòdl6‘‘‘<óÌ3´lÙ2à˜ììl&L˜@ff&º®Ó²eKFeúÕ“n*ˆf¯€wƒ ÕŠ‚hý ]TAqy+Õs¹›5ϺèÆx¾’ÎËu挌 Þzë-FEãÆ™2e |ð#FŒð¯´0gÎn½õVúõëÇ®]»3f ÷Þ{ïYÄo be®ìKŸ¹œ:[ÿ[Æ–a³A³BùÛÄjÔl`!,ÚäSÒ«©ÀM÷ë¸ì*'»øõç2>_^ÌG èÐ%Œ{†Å&" º_…{´y ËÝç)Œž}íúE–±ÙlÌœ9“o¼‘^½z±råJfϞ͒%KÅÓÏÝêÕ«±ÙlÌ›7MÓxä‘Gؼy³AèWÏÒ»@0{\wz³Ü-èn7¢IBskÈ&A÷*ôr‰²eª'†®ë†Hj\da™-[¶K·nÝ£¯9B·\€(§¼÷îÝËœ9sˆŒŒä¾ûîãßÿþ7‡ö/ÒžZî&“‰ððpEÁjµbúÕƒÛC÷ý-Jž´Ý ’IDs+Ȳ×åî“/Ë]õÄšþáØ IDATЭ*£ÀL:b."†ž››K\\ÜiåWµ*8Ž€¯ 6ŒéÓ§óå—_RRRÂÀ 3î÷(s?{e‘†HQÆÇo—°k‹.ý¢i{G,Ñ.orœ“—È¥óº/ÉÍGÿÕ›ùÛ”0üdã‹Å¹üôß“ M£fLrùxºïqPÓEm ¥~ h·‹ˆ¡ÛívdYFò‹ŽŽF’$rss½sçά[·ŽAƒ¡( -Z´ uëÖ¡_=”+£»Aò¨u]QMj©ŠlA—Ë›çen·Zñò©ÆÔô $ô32\sìðm&8=v›ô²r‡Kªªú÷UUE’¤³Ô÷ܹs¹õÖ[éÓ§»wïæµ×^£[·n$''÷ü"•ù‘CnÞ~)™Ñs«“TÄ­œ"WýD~~B×½ntÑ;\Ù,ÒìÆpš´ aãÊ^{ŠÛï ã¾aQXÌB’ΘÔvM)ô3l€CõØ€SÞ…™¶äBŠïpA@×Ë…`4ÍoÊãÓO?EfÍš…¦iL˜0¯¿þÚ ô+gÙår›( Y<»šËO—A÷*tÕ®`¶ ènËÝ„W‚+B5Ð4¡ò•5„ùŒ„˜˜P¸­æiOÊçÙ§?«S§_|ñv»öìÙCÍš5‰ˆˆ8Ǿ}ûø¿ÿû?ÿg .äèÑ£¡ŸC™—O€ó‘²KÙ¹ÙÎ[SòéÒ'Š.CÌ8py¹Ëë+ubFG@ñ+uÑOøbLÄâWê**2Šç3³›NZ©ß&‚339š–ÇC£ãH¬&Ÿ•Ý.¡  ! Jý²fÚWõ,ƒ P œþ,** Q)(( ,,ŒãÇ£( )))çØ²e ;wö/©Ú²eKvîÜiLš¹r­*œ±_N¡kÞ9邇ÐEYÂíT1[%Å#/Låb芒¨> é8θ™, ÞÍ\Î×¾}{TUåwÞaóæÍ¼ûî»Ü{ク\.&MšDFF†Ÿø—/_ί¿þÊš5kÈÌ̤V­ZÆý¾lZ[Ê/äòð¸zÆâ«Ý¸iˆ_ÌVÑùj¦Z9»‚ 0cD6EùÚy¹¡Ö+µé?Èfˆ?m"ÊÅO“’’¸å–[˜5k;wîdþüù4kÖŒ¤¤$-ZĺuëÐu¶mÛòÉ'Ÿðã?òý÷ßóÕW_qÝu× ýêÁB‚÷oïÂ,’W¡›»B¨UÀe÷xîÌå²Ü}ë¡ûg¹¨ñ_yÈ\Ta™ÈÈH,XÀ¢E‹X¶lÇçî»ï¦°°»Ýîw¿½ýöÛ,_¾œÙ³g“˜˜È’%K¨^½ºq¿”¹pÆÜr¯2w‹|ñ¯Ö./a̼ª¤4€+nLhˆØ±¢#`'Ôû‚æ=FG,S½6ûtìÜ£ÒÝx÷enÁ‰„êµâÀ-ñÈŒ¾\rŠÿ˜ÉÈ—©¥‚1¡b4feÆ…TŠ+ÇÂf³™ &ðöÛo³`ÁZ·n̓>èñ9¸Ýn{ì1âââxÿý÷E‘çž{Ž®]»„~y‡fçé¤8ÍíQèxc貄ۡb QO6»ÉWXPµKZ-ÐÀåìÌYX&99™ñãǼÌ3Fñ£F2îïÅ’¼[ÿ[Æ¿—óäŒ$ê7·âôöÓ3³ØÏ|=½Iåbê§ Ý;×½ƒg Õ_YNCô£û'ª È&‘;ŠÅQª°pÂ)ž™DZ‚` ½¯9…~„î#õ'žxâ¬Ã{ì1ÿß&“‰0`À€?:ÕÅAQ6lØÀüïÝvÛm4oÞÜhH$þ¸ ˜äPO .OR….›‡‚%DÆåð(s‹7ìî‹¡#±J¢Ðÿë¡ïÝ»—¯¾úʿߠAºvíŠÉdºê׿!eMÙ¾ÉÎû³ 1-‘º­"qùU·G…—ŠŠ„ptJˆ@C¤˜H4DXP‘pa ðøbÜ"2 f\Xpú•º&Ü„`GB! 2 ÙÉÝ#j`<Éô9²ôÇ Åà ¡_Á¥¯BCCÙ·o½{÷Æl6óÈ#pë­·^ñÚòú3I|sÏ?[TDI1<="ÝìqŽûâà>5î„ 3*¬(nô-é\¶“¬ ØN©>yæI8Íh’h «*¢âD/*¢tó.ö-ú‰´×7P÷ÎzÔìÕ9)ÌG—Q°àÄ…Ùï¢÷X Ñ,ÐïÙ$<ŸÉÇ ¸xŒ—Ô ˆÑJ½¡2­¶f6›9r$f³çŠçÍ›ÇÔ©SY¶lY¹£ ËY¯@”Aè¸@ ñŒàT7È&ÐÜ"H&·ª!ËàöM[ó}Í[Ã]:§:ñ„Ú ñþ¿£88½ûÙ†B¯·ß~;íÛ·',,ŒmÛ¶1nÜ8>üðÀ©t‡÷»Y<§ð¬NÖùn+ U/íhÆ—læ#= ‘´}nþ»ÆÎ¨×ª"Zdœ~7£!úãåÅDRD4 2' BÙ;o3G7¦S¥ÿÍÔœÒ â9%D£è2=Å-ãr˜ÑuÏošÌnä* !ý[uoo„mÛI[º†ßÖ}FÑ©vs=b„B̸PQË]ƒ§7¯£1ðÅÌœFf!t¼Å\îqò‘¿¡Ô¯$r2U¾þ·G™guäÐEÌ<¸ÈZîW•Ð%I¢víÚþýÞ½{óøã£(J¹Ñy4Ðá‚]¨e½›—Ð}.wÝ ²'¢’YÄ©èȲ€«$ÑÛæ:hÞÍÈr¿üʯq”9ú5—˜˜Hbb"àIŠ={6'Ož ôºL ueòk|™äE:óÆçÑÿ™8ê^êWæ*’?>îÄ⵩¡dþ”Á'®ÂÚ2•úkgÙBŽ# µL¢Ô¦‰¸fT·ˆjÑu$Å,¢É&°J¸e+æ‰i×ç¦-lŸþ>yßì£Éc7žfÜ€€:&Ühˆ˜qWÃÊC/Vá½é'iÚ¢*Ѿ9í"œµ>›Ëþ|W“xðÑpÿþþ%þå ™¶v sGÿ'BWU›Í†ÅbA×uöïßOTTTPÄÑ./ÂñëË .Â*ûÖÓÔ¼„nõ²´d ¨NÁ£Ð5EC’tÜ.¯{Ý«ÎÝúùóç  þ"ë¡#Ë2¢(’™™IIIÉUMŽÕ½S̾ù܆)T¦õmå\ë§Ýê…îq‡«aì]ŸÅ®W77òA¢º´æ„%U“È,ª Ev´ƒÅ°õ[H;ÙPrH¥P%wõšÐüFÊêÕƒ¤ˆ‘°FÚ°ÜKü»©ä¼²€‚gþM£ý’cAðÔˆ÷Mo;!ïDD£É QÔoeã_ <:‹éô‚.ÆÜôJ¦÷®  øŸ=//_|ÑãîÒ4Nž<ÉóÏ?¯üdzàY01X”]@«Š&Ü …z»Lñ 8½.wÏ:˲ì­ã^®•œ*ȺgµUÍ»|ªo3„ù/å>{ölŽ?Ž,ËdffòÈ#P·nÝ+HàgkÖ‚\•uÿ*aØø$Ì!²·¤‹„ORœŠ„PM`÷ÇGرøug £¤ÕÍ2E9qè%¥èk>Fÿr sBb ˆo ÊPøµ>ˆ*D~ G÷À–¹`Ê…öíá¦Pš¦BT8¥‘ ǽ„û_ËØõð›˜gõÂÜ,Ò¯Ð5¿B÷¼†Å*Ógtu&?pö]#¸®µ) ާ×t+bÿ_¼ •º®ý…Ø€`!ô¸¸8&L˜€Íf 666`µ¨k2žÅK}Ù–‹ tÁßAõÌ=uÐ`²‚Û… ‚ìUè²ì]iM>=p*Þ%Ô½®wc•µ ~Tþ.÷'Ÿ|’‚‚TU%44”ªU«^Ñ9è>»Ÿè4Xÿ¯j7²’Ú*Ô?MAÆÉ¯ÐU$lZ‡7eû¢½T›ú8´iÌ)-Å …«÷Â'oƒ;Ú„¶M@Žb {Çåš–.а 4.ý$Y³_DiÚ¥ç0×%BT U÷G´°m¿‘_êFõ&Q˜OLÝêÍxwcFCEA&,V¤s¿V½[DÃæ HgXk_¢]eIÿ¤•:sÖB¥#ôÊ’'IÒ_°äd)° (Žâ‰¬ Hä>¨ž÷DÁó‘â¡«NDd“€¦jȲÇån–½Œ­ƒS?½¼‹AâAŽ¿H =>>žøøø ¹žÂ|«Ë1³*Ȳ‰Ù¯ÌK CEâÈ®¾{y5güâ×S¤X±ýnAYõ,ù:> Õ{‚j‚,<’…Þvò¶qp0‡AD¨ú4Ä÷„Ý !íq4šu¤¸fòí#Û¶Y‰üÞØ"Q‘°âÄ‚Ó?µÍ‚Aйù¾X6~”½?9iÓQöÎkÿßÕreŠÃ_ÈõjÁÚ‘.$†,IqMèÀoÀ/¥ ’ÐE¡‹º×åŠÃ“' hn¯ËÝíUèúiB—¼Ï€ÛhŒkŽÐ׬YÃÒ¥Kq¹\Ô¯_Ÿ_|‘¨¨ÀY!#FŒàøñã”””––ÆÖ­[©V­šqÏ/?¶Q·Yµ[á|Ép 2,Ø U¾{ñkê=~jÛæ¸c(ËwR6a z~!ôÿ̱pXðy† Aîq(;‚ t §€¥„ׇ˜D“ ²6´› E_Á?'ÀÝ#(íÓb#©: º³€íÿ·†ˆWî@Œ õχ÷e¾»1!¢o¢ûÐx>y+ŸÆ- ýß•je$ôJ‹?¡ÐÓÒÒ˜2e EEEÄÄÄðôÓOŸU}uñâŬZµÊë‘ÒØ½{73fÌ0ýÏC-×b3\“8Xñ~Wuz–áRœHf QÐQ “7)Î_Ç]—â©?£«†B¯„~ 1™™™ÌŸ?Ÿ§žzŠ&Mš0yòd–-[Æc=—2uêTÿºé+V¬àóÏ?'::Új#RR¬óãWv|6 É쉻‘qaÆ ;¡¸0Qäc˼0]×€Ð7sH¨NIš ç?_EÏ’àî×à·8ÏÐ4'®…ÌÁ– ŽÐÕ½Ãê} ­kœ¼†Ad ˆ“!º\— «ž±nL¡¥ñ¢xäs¤}´‡úÜ„V„QŠŒB(¥ˆh(È4¹!š5 O‘“á&¥ _êßù-ŽvmäEüŸA¡æ/¤°L9.--eæÌ™´iÓ†Þ½{óá‡òÊ+¯øañ¡oß¾ôìÙ€C‡ùm†‘,}ÑíXÎ_œ÷¾ï[6ÍKèz9…îv [=ëkÞik~—»W¡ÛÕÓ1tݘ½ü‹tž­ÜxpÓ¦MÄÆÆrçw’’’ÂСCY¿~=ÅÅÅ§ŠŠ"66–°°0¾øâ úõëGhh¨AèìúÁ‰(‹4é°°ŠZ.)Ή#ßerô›ãÔ÷ ÎhŠfœó_GÉqÃ3@‰‡S¤ý;ûÁáÕ`ûèÿý-`$0x˜ êÇPú>äÅBÆCpt 䜂<¬Máú·àßÁ—Ÿb/²â0Å3þqö}°›œC…8±ø¾)u¾-2ÞDÛ.løØæÿ?õ 0ÝB… ¸ê×hWÓ/x»*û ´YYYìÚµ‹‡zˆjÕªñÀÍáÇNJll,QQQ|õÕW´hт뮻Πô‹jµú÷^€å|ê^Ið4¨îõ««$³ˆˆæÍr×qùº®r1ô@cf” Z…^ns pªNÚ<›³\Ü$777 ©´Zµj`·Û+<ýŽ;())á–[nù˸ê]¸@×u¶l(£mç0Að¹‡ÀX)#:Cؽx7)Ãn%?¬&§”x ßüuÇ1¸q2 ùöÎ<Îβ¼ûßg9ëì“ÉÌd™,3IB!„UÙP,o©R»ØÖ"Úº¼ÖO±T°¯}-ÅVky+Õ"Y"RY%Äd_g&³og{–÷ûºÏsŸ3g2™$l2÷çsr&gyÎsžs_×ïº~×/à¹ïÃon€á« ð!¿’â5nõy^Ù‹¡ÿZx†Ú•pÔ5pçW(t’õÓÔà|²ýº~¹©˜oÞ4Ô,Z‘Æq-^z.;%¯õµôtßÈÛkåÍ¿&,]™È[ðÜÖH¼´Ëx¹eÔk ;&êí²~ýzr¹'t0w¿FB,ò,ªh ª™Ìþ¼g2úSº%j)ׯòÐs9bn (w#†žõ!aIÙL7|3¯ ek3›áòó¢ÿÿü™èïööv~þóŸ“ÍfI&“lذ¶¶¶ŠMZxðÁ¹å–[Þö—9Ÿí׿È0oIœ–ù‰b‰Z^n9dIÒÛïò›ßDÝ'®¦/ÝÆîÎz²_¼N¼ ²Ç‹<ùï°ÿ^È}z›PÕ,!Ћ*Y#:a3ªÚEÇVô¼Ü$P Á;Ô îý,ìÿ`1Ô\ ÁÓ„ÿömÂ?ü,}ËfÁ]͆ïßAú¼S¨OÕ'O=Øøä%9ηã,?½šçŸÈ²æì$–VL޶*ÄÖ­Iâí¯­'ÁOeŠ޹9Ô8¹SA£VÙ\…,÷dÎ;Í`]ËRWW‡mÛ PUUÅîÝ»ñ}Ÿyóæ?¯ à®»îâ’K.)êˆiý€kð^à]ÒO?~,–x%0?¸Õ4Ôšp«=Â@yè…îfHàÉ'ŸŒïûÜ~ûíüú׿æ;ßù—^z)…B/~ñ‹ìÙ³§øÚ§Ÿ~šúúz–,Y2 è@X<ñÀ(§œ_E, f)¿u­ïÇ¡ve;.ùÇŸÁÛÛ§^ž{Ÿƒž@Ý!hUq,\  ˜+ÆüóÀsðžq+È-Ìfçƒ5d?¹.(Äà¸?…_ývlÇܳN#c§ÙÿØ+%pXuîKW¥Ø¼>KY¹½bËS÷Ä}8Òßå°Žg„0Üê––Î<óLnºé&Ö­[Çm·ÝƱÇKkk+ßûÞ÷x衇Šü¶mÛxùå—¹à‚ Šü´‡~À_bŠf× œ6ŠPëËWƒ*DõQ…©+V c™ØCw-•²øX1ÛËKX„Ù,® q7 §]ºÇäBˆ[Óñò·Ì²â5†uþo|ƒÛo¿ï}ï{|øÃæ²Ë.cppþþ~õ- z‚p|J\¹nþ"]ñaG #Äúá‹‘ã”<÷ÚzñzpÎ!üu@<çïþîïøÖ·¾Å7¿ùMV¬XÁUW]¨ÕÑÑÑâk÷ìÙÃùçŸÏÊ•+KHÁé5¡Ýß…Š‹ƒÊj˜)z8CÑh¼xä? wm€9'’:q£·ÝN®{ÄB5]ƒ°þ.é‡ „ÜXˆ[k–Wiv˜‹®á©\?RÆe…ãŽ}“³”‡P‡žL&ùøÇ?>îe×\sMÉÿÏ<óLÎ<óÌjz•®gBŸ+€®…¼8VÝ^ÅÏ·ˆGg|º³/ï‘¶@QîV!K<é@6G,1×'—ƒd2²1²¾ò¦×ï& O¯C[;^-0§#.\šGŒ¼”‚åH!É+¿Úƒ³´ƒ\ó\:‡êèÿçû Oú0ìo€^…]÷߀pD@|ŸÈz*“½ 8Y~Øœõó•õ"×u"ÛûÝòÿ4„WCæ«°í;PÓMï‚{“Y>pÅñl{t .d„j\-õ-³¥–àWÊ‹¡Ó†ÏBaØôˆÜzâkïúEñÄmÑæLò4*ܶYÞ»8E^óQÒl¿r‚CÿFˆ-‡¹ÃÓ÷ãí¿šÛHÍ™Kï†.²‹ªpñ(¯Ò!È„Œø4Πø -B\®çávnðC,m£Ê'±<pMæHÎe+{8 ³¥ý'³1‹ –91,-ˆ'U4äÔG¸|¡²=Ç.jßq]oÛbEšÔ“¯äµOöüêÖä: ˜¦Ü_ϵ¸K0ÝÆN¬VÖ6³PY­w£ÊÜtÍpó=§¼wKR:B™¾–/à$üœG<¡ÚÂæ<ñЉ<ôkÚ+Kx‘¶ô!™Dà§×á­¯¨k´©or0}W O½ÌTç) IDATûÙ]Ô;;ÀÉÁ¾Ýpé1°'„Wï…Ä;¡®€hö¢’amT²¬–À:àTNÍ\ðÙ¢Ba÷önop,xƒ´ßB8Ô M³HÓÎØK; Þ{4¡UZÀ• ¼êšñSñê›xßAt_<ßZ¯‚‡>øNÕS?#!4ØóŒ~¼!ñƇD²²¨ÜW¼ìa¢¹©ƒºhÆ®E<õõ¢+ò(:^#ãˆ÷tèÿàü! ×CX»ö@Ý,ìãŽaøûÿAÖ[NSßE—– ÷ä©ippm‡8yl’d±ƒ·PÀBb…Û;oY9ÈSZBï ȇärª=±WP¹» †Dº6¸¸quï˜C'CBÈûê½ÙŒå`, £YÈä —‡‚¯æQX–*ÍMÇ¡. uUÐT©¤á¡' O]çÛòóØ’Y unB$Ü B; BÛ'°Á‹Gñ÷жñ‡ÀöV±À¡zèe‘Ø÷œ#çžMú„`~ª}ð *VþNyîTBÜ#ÀEbŸ†J–¹ß0-'â"1t,%5ÚU+äq.Ù¾ ñ¸² ó¾Ô¡kß>Ÿ7½Þ¬€îàÅœI<ôiÎýpWçέóâ㜼¢´ í¡í¨Yt†ù·¶,Û…Ñ`§£n3<òP·U¨­Ãþ"Ñ¿Ö °ÿ*ÔV§Àš;Ÿ®c²ì¸³!ßþ0„MjÔjçV8fvCþà¡@¬TÐwoÉ1kA ÛÆh7SÙ§<^î‘û ÈóyÈe`,Û÷¦°³:û¡wX¯çƒïGà,K&?Û*ϧø·€z*ð÷}(àyPððWÅ!åBÒQ3*,y}Þƒ± åÔ{jRÐZǶÁŠvX2ÒUÔyÄ6¥4¾9÷ ãûÚeæ—(µkY@b[!¡yí–ŽÑËu>/=´,¼Xl=qä‚§Ó€^qU£êÎuƒ]Þ*Ï- \q?EówL3MJ­´u{Ȭr²àÄÁ²° 9©™\žT*Ä }B_õžÑ–tÖW›zz½›¼u`ažntx«PéÞçsüé®qMbc™ z{ÆÆB¬¶9ŒdŒ­ßNØt¾ÂâÎmà¶CÎÙÕ=Ù}TB¬–ù3D~ÈýѨæ2ͨ›‰0yúXä=~¡áƒ0ð" ž©cáÅ °êæ×áå| ƒ% rl1O^xt˜Õg§HZy,BRd°ƒ€d6‡íC,+dÌø*Y9…äÇà¥ðÂVxr ìîU€:3 óªa^ W 3[ Î…*WŠoõ´çPnÞ‡œ¯œ /Ïðàc¶î*j\ÕK#f—¬‘¶ÁÖøívøçuЕ…ú”šD{J3f5 a¢»m[ñ7žßIÿV,âIEÑã¨A̧ˆ¼öÀqð\·dj_p€r·Ê,’5©ð >ŸôŠkL(óÙ ÇB9‚ª=]*»(.TÜ/€>¢^~婿¯–®È‚ 'i«*†î&kð³ñ†!8väräÂi@«¬o’aÈátÐä°V>Ò¿ß§¥->®¼Hg¼íÃj¬'t\‚‘ÁŽÝ°z™•‘PuŒA‹›qó¨ÕPF÷FåÓœ,1<ðg—PU/6ш°ìø1eø 8 ’s¡ó ãN& ó_Úõm¸'Ͼí9Ž:¾‹‚‚_• Y¾$·Ê(u¹èëƒWöÀ/Ÿ‡ç6—…ÅMpQ;,^ ¨ !€eÆÕ+ÅÒ­Rš{Ò:jIÀ+¹ØöÕ18. ÇÕÁ{Ú cA{2ðL'Üñ(ôç¡¥V.‚Õ0·ÒÖžzù¹RÁ“wŒ×Ês–«@ÞÕ¶(Í ÔK,{J~zˆ5©ð Y? è—‡ª3Ý –øYòËïi™KT’¢Ol‘¿ãÀ™âå¿* ï–:²»ðƒ,¸1Õ6Ÿ#ž´ r’IU;†ŠÎÒýgòLSîo•¥³“üšRW¥»»›ýèGtwwóŽw¼ƒ³Ï>»âû^}õU~üã344ÄŠ+¸ôÒK‹5¸o§•Ë…dÇBj]£º.àr±Éôe`Æ 5BµÏ »6 Œl‡ºs#÷•QPy*¡­ 8O€xn›%Þ{\ä><…*Wu€PñôWä¦å^ô ÿªòªfÂþÏMAãAü`º¯†eF‚? *IœÜr ƒtæÄ`õLø‹Ù°Ï‡u}ðÂNøÇç` MU°fœØÇ/„ªzî2=õ4QlÞU¸ŽÉÇB'Àw=|ÇÂs-|×Åwœ)Ušœ(=¢çyüð‡?äÅ_äØcåâ‹/¦ªªjÜûz{{¹÷Þ{Ù¼y3óçÏçòË/Ÿô›•C¨ŒU½“g»Aïò‘ˆSˆQ,7Lç+…²[0+5äóÄ’~Ö#™V?uDT—'ÔVÒš|Tª±›^oåîP`2Ê=rUÆÆÆøÄ'>ÁÒ¥KY±b_ýêWñ<óÎ;¯ä==ö7ÝtøÀ˜5kÃÃÃÅ1‹o;=b;àºÖ8Eª«²vŸ×¢À>›SµOnB€«ìڔ߆„R×Àv.f¼F3z+÷¡bïºt§0{¦§>ø%8*S,3¦‚Òñ~&Taz>ígÍ™qb¶ë{Ê3ω7­©v¹ïï…_¿ÿõKسÎ逛ÎUtzÊ++¯Õ¶Ë¨ÐI²(—%”~3EgRÇñ t˪¬ˆB¢¯ê[@·äË‘›ŽVÆEeJ½®‡9 ˜ÓÍ…l£1x¥~±nù-ôûÐܤ¨ù“‚ùÐÖ,£¨õ9ûe,ƒÎ®7"¤ú¥ŽZÒ ié!Ö¤:À§PæÿøÿÈ+¯¼ÂW\Á]wÝŦM›øüç??Ì?úѲråJ.¼ðBúûûÉçóÓ€~àUEiS™*ƒ£ÉÈ«E%ÏY²C6ˆTÄ €¯ÄÄEr Ðm <7fáç $C¬0P€F&…G4œe2@Ÿ&sßh@·)L"báÚ<óÌ3 ñWõWÔÔÔ022Â]wÝÅgœA25)ºí¶ÛxÏ{ÞÕW^©ŒeUœ™þ¶ô\ˆíZØŽe\ÓhbY};Fˆ{,.Áhbqb0Z/^-QÚ·_æB:¨8¹y˜2ùÈ•d©ñš-r¼@<ú¬á$è{“2üªT1òÐAXÚÊ4FL†GøË¿ˆ“ GMn+§W'žyÐÿ¾ýxyø½£áÌc 5Ö0*¬Ÿ1n倞WþEXP§:@gúñ£³8Pm©òÙWq‘Ž®;ÞQBó 7„¾öÐëÃ@ *v4ó]mA“ ólXà@£ˆKG`’(ÛÝôªS¶!] 3-8í(È/]>lÍÀ†^¸íÇÐ5 ‹šá¼¥pÞ ÐP–.`ÐéNIùyõ·' N,TÙü®‡ï‚Äz*@w'5üM†î¾ûîãŽ;î ££ƒ™3gò™Ï|†ÞÞÞ’AL?ýéOI§Ó|ìc#™LbÛ6–eMúW+k2€|¿ÔKʸ'=3ùNú1Ù)Df-¶tLý¬ª¯…lÙ–òГcè¶Ä|ü a)Ù?í¿Ù=ôøAÓm›6m*™¾zõj¾óï044Tè?þ8¾ïsß}÷‘Éd8ï¼ó¸öÚk‰M’Mû»¸†|)7VÞ/-¢ÞG»G‰·Ô+Źw44+7¯7XÕŠ~Ÿ°H:@•žµˆq¯Më.ñ¼W2~DHø™¼~?%…ÓÅc6 /> V„äFEÈ ¸q§ØêgØÌn•RµŒxæc ˆƒ!øåoáÛÿ ÞüÙ)pî|±%°‡EíèD¹¬Jß+ÀŽ lñ`s6f`_ú|•ü–œ“.¬E“D‡éµMC%å»Vt5¼P=ÊqRÂoÖZŠ·HŽò ôûåTklhuae–`aæIi›í€“T÷då ž\æœrx:ÒÐQç5(+ãÃÚðàópÛ#0{œ¿Î9 涨D¹"Iã?³m +.Ñ…)(]eTXxEƒâTÅÖV•ŒÙÑÑëºlݺµÐ~øa:;;ùã?þciooçºë®›ô‰W¸L¬óÀZ]‡ZeñªŸûT·(Í]¥ËŽiËn)D€NV™¶ŽJ¶°­Pyè Õ¯(dª|¤D€0Ý-îͼ©‡6W÷^ÿ¹o˜ì˜Ú;Û_è¶B¡PʱX ÏóÆÑéÝÝÝÌž=›Ï}îslß¾k¯½–K.¹äm9}ïæ9.n F6r”™ìΓ¨IãáîÛ53•‡Þ·GÉrP…Êu)î:¨a,†g3Ø»Eò¸F€^T/ŠõKcTžÎa”²9æXà{P(æ $ª\<\?ÇK÷måôóÓÔ§‰áˆ<óž^¸ãnxôE¸r\|&Ôå…õD!d^3 Á(Œd`ëü<Oåa(€Y¡jn{Š˜!‰È Æ%ÊÒs|1,.õç6¥ÞôHƒ„ü„³ŠzäÍPƒyØ”‡gPÍ*àhÎuayR±É´tÓYîšDMըתÞ7ÀE«a¯­<÷û×ÁQYó<æÌx½|Ym¥È½GT¾5¥«’âJu@v,äÑû†Ù¿Wq¨ŸÎrÚGdgA Ûæº.–eQ(JŽ122‚çy\ýõÔ××ó©O}Š{î¹gÐ'^ºœe˜ŽXó¦¬wÓT=j†É3D  B ´ü5å¡'TàÊŒ¡kË8iAaúzÓ/s„^3fǹìÏ"K{Óó=Ñs3fÐ××WüWWõõõ%Þ9@KK çž{.MMM$“IÚÚÚØºuëÛЃ²LöÝ[=Zçű\»¤;œ 깡< µi|žýP?SµïØÖ,TÐJ…Û´›(-xÖM§¼Vàª^Ø»>J›ô›íÌ´q¦ë¨ %ÞV.‹í8ÄÕʵïÕ>6÷qöçëHe ¸¯€Ú‡—^‚¿û´àÛ—@‹¦Ï‡Ä–T æUÉûú,¬ƒGÇ —…å|ÈVÍ«ŒÏ‰ O|¢¥AÛL&·+˜/:H2q³8€“+Þ‚*ÔÝ<¶¿ àëyÈxÐæÂJ–Ù°<u$²ê î¨ü|¶X ¶º&Ž m5ÐV§âï[á¿6ß|N<>üX:[@;.'ª½wUb,³\ÄÒðÎß«/þÿ¾;"72™,1âñ<¯Ä;hmmeîܹ,Y²Û¶Y³f /½ôÒ4 O¼:QÙ¬Úôk4€\ß¡"H®á¹çŒF‰ Dë¶è±8ºý¿e…ø9E¹[a¨²Ü55#Iq©i@ÿ¤ÜO:é$î¸ãž~úiÚÛÛ¹ûî»9í´ÓH¥Rlܸ‘öövR©—\r ?þ8§žz*;wîdß¾}´··¿- ¤ò±–Ý{=Ž95%¾îò•Ëøø~ˆS›&C8ÐÍ‹” íkvÙìsó~•ì¦Ç¥Î¤¤ˆ+ì£2ÞÑ1‘}=”e‘¼¯‡Ò´qásCɈqãXc£X‰1Ç#Zl¢“ùËRÌj*ê.àú>A?<µ®ÿø_+ámö„ š]î‡à‰QøÑìõáøþBÓ ë7*ß´<Ç_{â1ÌÚ$)Õ ±ˆû˜(¿Çf|ò¼NROm¨TÂóQ‰p{ò°1¯ †sÂ¥ž“€ãhOB}Ðò£†÷.ÀŽ«,ŒŽ|êø_GÁ=»á¯ï€ ß;Z›å¤“†R˜  ånŽwmnn¦££ƒû￟óÏ?Ÿµk×R__O{{;Û¶m#•JÑÚÚÊ»Þõ.n½õV¶nÝJ}}=Ï=÷'Ÿ|ò4 O¼2ÀD0A•¢ÙÆVŽ~Žh[·¢ÊUªÅ¨ÓCGzG åîhÊ=a€e©ŽOaÁ'• ÇQî:†KËB}C§cêo&@·"Ë=¨ŽŽ®¼òJn¼ñFÇ)Ri}}}\uÕUüÛ¿ýË—/çÚk¯å†nàOÿôOñ}Ÿ÷½ï},\¸ðmÉ€ìïô™Ñê#M¹«Æ2.£Ýc¸ÉvM ‡p ÚU|¨X. º’ôxºýFøÛ÷Sšg‰ÁîPUšñЂʿéݪâå•2’ÙR¥«–é4öÈ N*FÒ.à|^x¸‹Kþ°žš`VxòiøÛ;á³'À9íàv Oݹ7 ÀwÅ~ðç¶Â&5hs]*î•é“Éj'ìƒôòJüðºmümÉùjÚß6‚í¨qX\åW_äàûT`eNµaͰ*õM׌tb`WC[®YÎ…[ž?Þ_º Ž[$?¹Wvq¦°G'Ïr̘ºº:>ó™Ïð…/|ÿüÏÿ$þú¯ÿšX,Æßÿýß³lÙ2>ýéOóÎw¾“_ýêW|ò“ŸÄqæÍ›Çe—]6 蓃z=°†¨®ÁózJSÓN5À½ÆðÊ­²÷I †„9ˆ% u`) ñ ÉdHªÍ»èOÏ/+·«˜ô7=|0ek¥á™}èC¼ÿýï'‰‰D‚ xì±ÇH§UNÆ¢E‹øÖ·¾E.—ömÒé4Žã¼í®ïØHÀèpÈÌÙ®ÑÈT‡‘}#¸5Iìê~hÃ@/Ô4Á®FöCØlz¥å RžF±T LU—yìK Hj˜± Ÿ“2gÀQ™îøP]K°cñ¶fâNÀèÎ>F{³,Y'f°†B~û|î{ð¹ ༔d¯êõ) ® n/—ûª'òÆ O\;›yƒI.ç)¦²b%“ã¡Sf(8e`®½vGÎÝFõóùjaâ¹æåo¶DY×eåyGí [{è9ˆÇÁÕªºÓT2ÄÏû¸Ni–»ó;VTN`þîQî“uŠ+¥mÛ¦ººzÜc:ó]¯d29.¶þvòÌClz»•gÜØìLHÏvo¬&päG}‚lÍC~üÃ.=VN,×—íV«ÂÿÍi-óëPt€Jš5¡Í“’Õ铚 xv+鎪íQ^¼w=«N1¯1KªÇ£sKÈu·Áµ+àÜF°¶ *ïS•ë‚›‡áçp±ï°Õ™ËÍ3€¼Päq_îQˆr·ËLŸÉ»‰½óJWÖxËt×Ézå]^«P3ðÎv‡ð\ÿ{Z\¸"§9Ð0ªºn»#¢âGÕE‰Çáüz˜¹ nXÃøèÙP5C>8dÝ«ÐxFïz,‹«l™ô®p\…mgZôÚsïŠ-‰Š»m•-7 öc:ÚªV^%źR**MÔÏ+@Ïf áF­_½ðÈþ`Ú²Õñ³×{5'Ê•|•µp¤€=MÔ à2ìq®“yèÓk*t{@ªÊ¢ªÆ®è4…XŒí"9«Nýý#…ª› Ÿü°òÐ}“r+HÉšèŸÒÞ¢û…Óíª~Uc k§°Ì|°à:p, [v“>ó¼¾ÍìxàU>ú*R–JEÿÊà¸V¸¬¬ŒnAݯ‚ë÷Àܾî)Þ`Ð/b”®p#oxæº\RîÇ*|{@wÊ^{(k†\ݼ¸@™¸MÐãó-Ø0ë‘t×€vTãÞð\îÌ÷,ø`.M«zz<Ãõ—ˆèÊz¸ýBøø/à‹Ãð·—KkÙÃÌr¯Ää©5 è\ ˆË½ñò\ÎݨôŒ8Qb\ú4ž‘O)]ù^@*02qÇh,Š…¶€†.s€Õ¨ˆ7pãít¹Éó@&]3Qs¬N$êÃw4ð+à…#À À{åÜCu×~cý`Ú>Nú¡®þý3]¡Ø||ƒn°ë!Þ² 2ƒc¾±:ÈvAa ü†I K꞊Ý!­ Ï›·xÒpã&ê*6¢t€¿Z ž%èé¡~~ c›öŠû¬h#–õùù½Ð¹ >÷°¶‰@î?¿Þ _‚Óóp¹­´Ï~ùí™g‰ ïÃ3oC }à!1ªËuGÌðŠ+eLTth0- ;‚ša9SŽ]ü\Ž«Á:(ÓI–quÝ2^×U£âëMò^!ªYøðBwåá><+“P1T·ŒÛ¨o€¯®‚Ï<ß|>qîÔ=ôÉtÀ‘4ê§ý€kP¬ìó*\*«ÂÿÓ²E™dKûFÙZbõQ = >É$ôì [‘ð¸èˆ)Tº^“lþ™J?”Î9¨®õÀFT1ÎÈA»Z¬þÞ çR\Ž d˜Wq*úøQÉC÷¹¨šZK޹‰7fªÙÁµ~Ÿz¨«¯Û§a¦c e±J´!dºGH_O¯˜0) ¾ Y™Äá½I'2¾#pÐ> Y¬áj¬‚ÿZ¾†rXI(ô@óLèÚ‚¨š?ƒ÷wÒ¾º‘¤½ƒ¡€oý>{4ǵ¥„¯õÁ']`Ù b… ‚K¼Ž®ÅÛTv¸–›½e²’Fe•WOeÄߺ’ЉaÝWú:(q*¶oÎH±ÄЯ‘ã׋ &1¡*iâ¤è6³×gÞxî$à”~âÁßxðçÀâ×ñr‘Ó\ 7žy–5OM)\ ýÈÁð4 OòsDãPË“aÊ·Ô‰_¢(w½õÊS< ª+œ“«ŸƒDlUaKè|Òñ€ühyè¾Jj9RäLF€®J<ôýr¦)Tþ"ñ ùVÇŠµÿbÀ.NbgÙÕh®nãWÀseÏëî–A<ÊÚ$û»åù(Í >Ø¥Ï+.œ‡CŸ^)™!ôï÷™Ñâ–G¾xêbd²c}yÒ³šÈ§Ð7B˜¡”u&«À4/ƒJ Ïä¸B¹Ñ º zà9Æ“ed¶hq)ŽW'!»æÏƒžM4,¬bFj”Oìåý×̤¡oŒ{þ3d^N´QÅ3ûT¥Û/vÃ? Á_ú°$Pr¬éõ¬œq¹gnº?Ó*ëiðšWœ#TøRùfM†)r§Èz;*3`¥Åx JÌ6ì_HÔ¹Ug'„Æ9o,ý€úóbHøØC»ÂãÚcïÐ lGe1$ @×¼ÏOþ[yØÔÏAmâž\v3§¾p"\ÿô䦢ì)'ÅMúkºâ€yùc yílÐ+yòJ*8IŠ |°-Â/ ‡l&$îJR\¨(÷#õƒù¨ÙP¯ˆÅí õÖ!ß f|3³ñÒTß"±žÿ’ {š‰ªuç£R‚t[ž™ò÷s¨ùu¡(”çEùôË9èŠÿcÄИª§ÞüP®ðиsüCÈrŸ^©(ýþŸË’2g…œOv0G¢E5 ú‡ “—ʪøuhzùM¯Z1kËsh*ÍæL ?ôƒ›µ*ÜFÔk-[zË)ðêzê7’ïê#;œ§mI’þýÿýcøüéê§X(¾; ÿ0×Ä`e^f’Sš¥î—yãA…o¸Ud,ìïÕ=`¦øé&l)ù†§^ý ö®Zœ‚*9F•ȤûaâbB»ƒš€±N^×"72ËN¹“˜Tæcyq(ªÅy °÷ ¨õÔÿá_=¸%Ÿv n¦ýû*~U |`)|éé#í¡Oúk¼´`Ɖf¡ë-°^`kNÙëGÅ×Ý#[¾Òvs"x³â†‡ž?‹w±CKwìpHÂŽbèªW²Ùß@oÊÅ¢v6–Qç-beï“3×–©ñ^yÝLñÈë÷C,]MËi +ÆøáNÖ4*î‹PŸ)Æ€'Âÿm¡ÜV õÿßBϽ"Êb–a8ü—(ž©¬Ñ7Á.:˜:ôiý¯­¯<ôÆÖXÑ3×T»‡Cv4 — qjÉ\òû Þ"]YÇ Ô~bXæ¡›Æ|Jv¢)9T}ú*'ÓÈ35ÆÛ? )‰…àB}:_aÞ»ª}à)Ž_pts}fÅáDG¨§œjp÷7=piN((ï³ ÚlQê/‹Œ{ò ŽPû­È†-Ôö°€h(žëвÀB(Þn^äñ¤[‰&\X”Ž8ß/²¿HΣW>ëxÑóåxÿOŒûËEä…ßÜ-ß&úë ñÒEÔ›s²œž‚qMbFðÄ’ÇuN€QµÆG€[@ኯ IDAT ð/Ãð—!ÄRà˜¥>|p<Ô8 èo±5AŽ£¢»Ú"ß-äÍï„lOxVDã$Ù"¿® ÐV=±x9¬xŒ0 ±KÍÈBܘ`äQ™r¯E%¸%‰’JÆäÿ§ e¦›IÌ«øå2*kX5mífÊZÃÿ8¾ìt¤Ðlïx¿€÷ˆä†2ˆ‹ð˜œ«në¸Z>o?p/*Qf…(£¦ €®}£7sí½®‡žLà§×¡xèŠÁJW;%-_M/ÝËz‰$ضb¾ö÷Bí2¦apk?XÅTçËî×YšÞ'†û˜Ë}ro£Huˆ#ðŒÈá&gZ¨·¬jEÛÛMÕì¥l¿gï>7A„¬} .>YZ‘ŠË}ߨúþ— úRhï»ZLMð÷ˆ¶9•§|â‹r¶³ÅȆ¨Ýk—È®-ÿß-¦L½¡¢W4]þŠèÇ`ž0 ¤0rú ig`&ÑXr 5tz?½¥“[gQl”[²l&Î2‹ µÑafÈ—3 À'¿`MNNŒ§8¬)Il¥î†¯%K7 èÅËP/ÖuA|Æ…´i»pžÜFPÓ”Nm;,°³@ …­•mGË]?èg ™PzÂÅ ÇÂõ cªóP“í^ }:)îÐ)wß7n•(OC± Ç“œùœ‹ßÙ­­`Þ¶Ùʵ &¦^ͲË,1Sõ–´ö|1]»„­Û.;½Eø2ÍÚí âÔÌ]7¦>ÏUXnÜ# Gª0ÌØÖNNûlg(ÇöpÂÙ‚ÂÝ0oÀ 1eNxDÕkf @{¨YCƒ9"—+)­íÞ' Þáe‘ó”h¸™ef™Q¤)ì69n—°í¨\=­ªìü,1ÚÍXh×^yýƒ\ ¿È.C¿µ«8*ÎÀ¥%o!¥%m®|ÇzyMè‘[ªy÷|e¾@½cX®qq¨‡þ&JЦ«« ˲˜={v±«Í[ ÌÏ{p»Ø†;‰r´3²]ËéøsˆÒDtû×1ÙVÚÖ-‡!“ø‰©-æ!‘‚̈xèj„*Xä²! 㚨}X,âvJ“SrBa%D™Öl5ð.C¸r¨ä•.ñIN*órK×—ÏZ!jO Þ2gkX{Ös °åX#òÙ§Ê· *ÐlQœ.Ç8Z„s“üj¾üŠå•%ÕBÝ¥PÑÍŒ!•bsG tpÈO1†žÏçÙ·où|žÆÆÆqC:;;ˆ:455ÑÔÔô†IP.—£³³ó€ç|Ä¥<b1«¢ ±ðra<¡âÔ„cH ´x}à6ïš!»)'ÆzŸHCJ óŲ‹ôçÅd÷Ï¡´‹¤'Ln$ãQ9;§Žg…ä±BµÛ Ù‚€Æxü9:š¡µFmì0€ÿêWžì21dµ\"?/ (½dÙFÕc0]ðÅ Ö¼áSÆ{Ï1L“°âÞèêwˆ TÏ©'š1—6t@–¨ß^Ü4{˜E… cb¬2®œk\}Ô¶Š¨Å Ñ¼:n¾•¨ÌÎ24ýrž»å{ΕÏ6®åT ß«Àª¬ ìBOÑCÏO è¥F}†ìÛ·‘‘jjjhnn× rdd„Ý»wGÎJ:M[[ÛáúÀÀŸûÜç!ŸÏsÔQGñ©O}j\W«7÷ª¸k4|Ó-¨<Î4ª/sù–¶)Ö¢Éð]¨~ͺ®¤Ê°iÝ2Ê=¶¸ÞÉ$ ÷`Ç'ÄñUeMÜl†‚Ï„mþ«DXÛÄ¬Ø kå>)›YSÝIJ‹n.`­!ª·ÊL’PT](•‚qZÅŠ6;l%JŒ©D‰=m|æYòºZƒyAkQ²NÁðúuyÌ*y>~"T¢¹fFÂ9ò‹ø¨ØýÆ×ÈcŸêp€Ûn»Gy„ºº:²Ù,7ÝtsæÌ)yÍõ×_ϦM›X¶LÑÇ_|1^xaÉØÅ×sÝvÛm<úè£ÔÖÖ’Ëå¸é¦›˜={ökî¡>Äâ•ÝÃel$é£wòšlèùA5˜¥µFp©Y|¾ŠH‹ÙJDÌf|Ý*ëÃI ©,µy5“p\Ü0C˜t°rRi›gîñŽyV<<ÿÝõaLšÆø"'Ò …£DFú‰riÆ„ÊÞ'¡­Æ7Õò£×¹B‹¼Tš^ûDŸœRæ´Î® 1u€¡’Ø'ì^JôÊIrŽÚý‘Ä~¶KðƒqÐ4z½¼÷ yüyàaJ:~€:¢ä¼Y¢­5ŒŠ´„~äÁñUä$äBƘbc™© gxâ‰'øò—¿LKK ÝÝÝ\sÍ5œwÞy%¯Y»v-ŸùÌg8묳p]—E‹qÍ5× ßwß}d2n¾ùfb±W\qO<ñ\pÁ[ЇĿ³PÙé:Ed@~ÚÚ28Ów Ôb'&Ä/Ô‘èåÆv5!ÑS”»íB˜Uõ'±$䳨‰„¶cc…ÏAÒ‰‚Yµ½j£‡áø¸‘™ 6CTˆ¦ŸzÅû¶4—ËëË©³:ù¶VÕ•!*û0Í“˜Äê ¬ƒÒº€a¹R¨0K,ñ”öÐÊÜÈãòyk o!~JˆÏÅeŸ¹@|›Xâ¡D<·ŠBq„[‰‰!ÁÞ)çj4åáyèSë·qãF~úÓŸòõ¯yóæqÓM7që­·ò…/|aœ…~ÅWð'ò'Ê\”þÎoÄÚ°a?ûÙϸå–[hkkãk_ûÿüÏÿÌõ×_ÿšö—¤²{ç';Å­«"´-%4¾ŽÔû°S†ÛÕ'»:+»@ïú‚À`º´„«’]Ø"Ú~PŽ{œìÌ­DÃCCÃv!?¤²¯úqjÉå©jŒ“¶Ø¾>¾†böka.Ë+¸`œ¹³Å ½Š¨\WYuŦO™s)͉IŠLUÚû9JšW—ôV‰ñ4*g&]v¥úß _¯¹¨|€˜ÁÄ™,ÀÓâb5 ÐÎ7‚šk峎'š{©uà)ò¹ZKŠ™Ö!:K‡D ¾u«Üs€¯…j.{à ÂCŸL˜z___ùÊWøØÇ>Æé§ŸÎC=Ä-·ÜÂgœ1®Õó 'œÀ—¿üeÒé4¶mãºîáðž|òIÖ¬YCcc#555¬Y³†gžyæ-F¹û9ºK¶‡™?é• b¹g¿MÄFÃà ¥DdÖEƒ1lJGõsµ=èñ$²8q5ÝÄC·åc^‚Up© i)ï·Y¬ps!ÑØýMr½”–p”ïÓPŽÓMÔ"òDé=æDxÛ¨“ÊhýPB ½ÕSf$Xrõ @ÖfË•\\L”™ ßß.Àý¤ÂQ–üY¢XªËü¦»Ä+2Ôê;äõ—ï rÖ¡Ü­âô¯‰nfRܺuëhiiaéÒ¥¤Ói.¼ðBÖ­[ÇÐÐøâ»»ï¾›}ìc|ÿûß/hx#Öºuëhmm娣Ž"NsÁðüóÏW<ç#¹¼B¨Ú9¸Ö„×>;RÀ®JX’8ˆìy€Ÿƒ0A”ÙÞ+„í£”ÖHF`¨\¸†ñßlìÚ²;/$JïÔºÆlRjƒ? N{x·>E¶g„ÆÖÙ®±˜—ÓéƒÆ^¸ÚS†wÁ8s=l¥•àöŠç¡ZbÅÊLõÂ|¹F° \þµÎèŽì ¶I¸Ê—ã·õƒ×^òª Ç̉þгævWpFt3ªD™~ˆ£bø EÌ2ŽÛ,ŒÄvÑ3”¹P§£âøº\V—²Ý <"ßM‡êÄÐÑÙ«€³èõTâ„­þ't&ÕfMOO¬Y³†T*ÅêÕ«ÉårlÛ¶­¢ì}ò“ŸäK_ú‡Cïë룾>*çhnnæå—_.{UF.¹¦ª›™xØÉ ê}eÕWu:.¿Tµ¢ú{˶ Åó ªd ((@¯JŸÅN8X‡ã*5ŸËA¢¬F#UaÃxFô!ÇÁu]þõ_ÿ•'žx‚[o½•D"ñºKN___ÅsÎåJ»oôvù<ý¨z,·X|ŒKuí¡û¹LH,naÓŠÌÆ2!6ÞX+UG€KàÛB•:¢˜óQ·ÆbXO׿r“HU%¹Ž dn(cáì²×[«{?§ØºÑ v:I¦/ËŒ.#ýŒAÂ[çЄ°¾Èû¢t¾&»ò¡­£Œo¥Ÿ{F…üÿIñŒ—Mx§,¤–Qêy¡Ñ{Eèéðº·|Zt”c€~Aܤò©­L÷Ä|‡å³4=*¯Ÿg˜]1Cÿ È/ô˜xï9Ñ%ú:4Êó—ËõòaS Cêû§Ðú5À§ü¼Ïþ=䆔wÜqüÓ?ýÍÍͬ]»–~ðƒÜ~ûí‡è©TªDÙŒŽŽRUUUA-'*ÀÇ›}Õ•«èô«ì;T•ùÉš´ÖM%̈³ è²½BÃC÷rØñJRäóâ¡ÏWÒô‹nØ7¦’ÙÊÕh#šÚbGC ‘‘ÞNi¯æ.óeê¨Æ ðÃ2ž¹Jê Ÿ+ï­6”NXfþxvEVo›Xåãç[剒ߞÏ£Z:„蜨UmÎ`~)×!#œŠ-ô¡öƒ_™š‡îŒ£Û|'Ī®ÂöÔ¾±bÑóÉd²ÄÛ%‘HລÇ8õÔS‹§Óiþàþ€±±±7Ð+é€JçìÆ,ªj¬âßÎaŽ ,B×Â:€Màç},³î3 À¶#ÕnÌ/ZoðGAİw°ŽBŠì;"°ÏI *!üY¹.ø`Ù„¹<$bäÇ|3]²9UübráwÇàØÒ…ñ€®KÕ´k’—³!ê5a®—åù¥rö5†Ù+2¹BtÄnq$ôr3d–68ŠZãÊÄDd\%êˆPš®¯ì€èú±aãóƒ fU`\ùgä¾ Fþ°|ÿ® ß_³“=ržâ„8¢oRâ-j-¨±¡ ±Fw [·åîÛ6V:…ªÇ­TôC»®‹ïû„¡Ò’¹\Ž Æ%›···ÓÞ®:,]º”|õë× wÜqlذÏóp]—gŸ}–Ë/¿¼ìU‰#D`¾ž+)*½Øq¢’¶™e¶£™R’aÖcFj £ ÌCwKˆ³t ËÏáÆ,ßÇqTfe.+º49^ïAllü™®’OX'Ôö‰F\«¤£ÿ—È¡wÊ7Û"›®¡rLrÑ!*ùª7,Þr)Ãê>Éœ°‚bÒq]²CLïÿgæ'•¸‚è â ˆÚøXrÕï—ït µTèu䳑÷¿,çß'ׯÙxOú<ô²_¡:FÃòèHñúHP—-[ÆÝwßÍÀÀõõõ<ùä“,^¼˜ººº›JGz£bèË–-ãž{î)9ç%K–P[[[j7ÚsBüˆ}nà+l¶ˆÊÕÊkúC/ÀrL‘0Tù+% Zi¹˜wËMÇÇ÷ˆŒ›us (Óå­Ïˆao—™…D$uào©¦óAˆeYAˆíZx>”ØD<PÍd(£¥ ˜½( ªÏn#ã»%êóM¨¬ï”°dƒDEé2Ž"VfHˆ&Ôöy¼]4¢-FuGŽÂ6Äââ¡»„~€-ºŸ…¦3[2~”¢§×,±~µ×©7­cV] E6%‡!@þÅBšb¦:†­+õ÷ˆ‡?Sw%¥ "r"P•2]ób1ëz‚AT²^U™×®-ó”x :óà1D–±:»ì\Ór®“±bÕÆ÷7•ËÀ äØSÊr?ñÄ™?>7Üp‹/æ¾ûîãºë®cppk®¹†o¼‘Å‹óùÏžööv,Ëâg?ûï{ßû*0c¯ÏZµjmmmÜxã,Z´ˆŸüä'\wÝuÄãñ×õ<¬ Íð³ñ+—Ên@·)2ª½u· ²še—ï=ÀgH'9;¦t€…ÐäZE»£xþ=Jðš<¶Æ“ú5r¦ºœk‹Áh%˼ڙB]ï4øKTÌòí e2©½c]‰ï•ÃÖŠ±D®”n»O®˜O7=cÛÐO‰Q¥çvН&êYñ2Q߉cQ¹;åÁ¸¼~¤LûVº¥ ž2xÕµÀÑ6Ô:ªê±$p KÕ¡|–ûÌ™3¹êª«¸ñÆ9ï¼óxà¸ä’K¨««ãºë®£££ƒ«¯¾š;|>Omm-O>ù$­­­¬^½úð}áÂ…Ü|óÍ<òÈ#¤Óin¾ùæ×¼\åµ_3dËëÞìÃbçÎ%‚Óa¢ôòÂ.æ5\s)™´f{*~³°‚BTWW“„³P%®Ðf_K@:#Â}–€¨é-gˆ’߆EX·ÉëâF@E[Ð:ImV™)“7yÝvTÚk¼½(¨6ƒ‚ëD¥.êa.ºp¡(Ž>9¯ß0~ž²Ž‹™ùÇ/¥2n|vR(1ÝɾhJ&|ñ‹_äÁ¤¿¿Ÿë¯¿ž“N:‰ÑÑQÞýîwóUV¯^ÍŽ;Ã|ä#œ~úéÄb±7ÆüM$ø‡ø‡’s^µjÕkþ¹¶ªð¯LõäÓ nK:¢e£Ï&؇¦L`èÚÄ%«&Ê•NŠ©ª9¦BYÐ ÃDœ3  K€ÈN€ïÆãøy;­èöxÒ"WÍü° βàÁdD{k3BOTÓŒ×naëâ¨&/º'J •(7G^s¯ÈSªNM¢Ê×’eÌžâ¼ÈÚÈž®0¹H_B^ ‰âþ–qÕÆù>%W»ÑxM—ã}D%´#¨r´í:¼#¿`«œGž¨²¥×0j\# š2ô‡#.›7 Éy‰ÁòU€@ùÍ™Š8˜ñ©Ñþq‡?ú£?bîܹlÙ²…«¯¾š3Ï<€ÓN;3f`Y+W®äé§Ÿ¦»»›SO=•óÏ?Ÿ†††Ãt˲X´h‹-âwg ÄÍ%*¾Økغý˜l==ÏHûÃûe;MÏ̃•3Tݼ,vÜÅËù¸ Bpr`-à @2ŒL7d¹_ÎLZ=ó ¢Vަ?`·Û&‚`¶aÔYqQOÿ#B¦­æ¹J"LAk-'šîdN‘®¢tº|\^¿ •”¢sŽsB£i_çg ‡å¢V ZÉ<:A¼ðXTêR(Jl+Q}¾V>¯Åò§X¶¦)·+¯¼²ªªøÐ‡>TüÿÅ_ü¦’˜JçüZ/×µð¥ÙÊDžºå8„ž¯³4݈î¦pyRkFvú Ù•3„ˆ^HÔUG©õ̯Œ±»‡*&cÇÀ­R‰qé$ÁÞ‰¹1Æ=R5!cYe¼Û²A›,Øä«¯áM¦ñ„¾Ê­«ÔhD,˜· V¢šmMƒõÄhKºÜ÷Ø‹j´P+Öûlãu½e¯gJÏ7Ï<êæ²³3KºÑeæì€uÝï\®²îe5æ³~TÉÉ ‘1Jû7˜Ì˜ Äìv`v޼gTtƒY–ºO öù";–„³tSÛF¹"M†|ÚDíY=‘݇åÏçólzQ$qýN¿®Kÿ—AoõÀ=ú?öÏt c&ªÓÖ±÷è¶YúãúÛíx%ñA휼ÑÌå.KîûÐ…"ÜÞ^.+fã§û2ˆ›‡%÷ˆj.SÒ^A¢ækç|¡¾"Ã’(Ríj5—mЫ£]ßV걓ÂNæ1 Íßêç»É6¦ÌžÀm˜XUAzÐc cù‰®º1Å.š+ÔËmú[áš]p¬ÇšªEtàZ„«\‚DÖI¸fêu$“­Õ¯éÐëТ0n\™§°ßÚ¸_ÿçš8´è½à·ú ØrUF6Uf:]ƒv¸+\—ï‡õëžÒîЮ¢Ï5BÀ%J™ hgúïíYA>OxEÀµÀq ø| Äo'¡½ ýݯí…ëžøú¢©úHIqeÉ}™ÔÞµº ‚3Jˆ•àîi›I>†îê…äVÏ%Ÿíª+@E5®aqÕ¬÷§ƒ¾#ߎõû[0#&nÚ#3ðtËÁ𴵌î‹á²g³Ö…ƒ\ƒyÅA¬{¬Õ=Á¤5ÈǺ´«2¬\,èζ ´Àd( ð{Íă¿#Ma÷ûñ}5#Êiåyè¯Í C`ày{¾zí„…Let\µx¤§³¾bÍìåzC"­Ò”ÂÃ8˜ Xü‘!Î×­5²:òQZŠÝÁ‘_®žOäcç3p÷œ™ˆc×$ظÙeÚL1l6 IDAT‹êx¾š«ô6äÀ¤Z8; —µCÊPy(1ò!«€™L½SØöØùäs`ò‰p^‘ô^ÌØ)ÚGv‘/— ž×­?×(ÚÉç”»«§ßãšN¹!i>x³HG1öè6…ÙDH Ok pþ*¯à‚¼·bUú ªÑ/Ôßû®| >}ܽvl€î˜[fèû؆P¹m! €z>ùôŽ /Únòíag‘Ï„‘o0jj(ÏÇŽƒ%®ƒ1Ȧ=ªâ×Ñ’{¨AUÖßó “%ÝvàN}_‰Å˜y¾©Ý¨,ɨ¤–¡=<ïò%f=Z&_O~p›ÑÊ1ô}ËÐ…¡ûl—ÛM<¢ o(R"L‰° ¤ïj”ˆƒLàÎnÐyeh†ôÎ 1ôjTÿ‰ íÉTÏÁ†l$ 65À«4ýŒ'M‚'ã[$g´ðìÓ}L:(ÉIo…_>+WjÀчVÁ7\ø¯Ý𾃺,8¾êWá„À3h–Ô«ÿš 6œ…Ü¢[ä°‡åùWõº·…-¶@¦V3ö®ã~Mqÿ³È‹3ØÃ²zÐc¡Ÿ}ý÷=¬–PoÀ×’pX"Iò©õUúÔT¨z§€¯ü à?Þ‘ʱ¡æhæ¡»e@ßç‚*?;B>âHmݨùüÐsÃ2| >ûäó+3!2«ä>“|ºtøX?ëa[Š¡û®êôÊr}ÕÖ“cú󚿅嚣lÐLÜß‹:0’ ê÷9PLÅÐËekûŒ¡‹Ò =wýšá{ÒÅ0‚ !É]fJÀFxsmÕšR•RÕ‚¸WP…[•!h ˺ªWéý ›áE[zñX•П‚šVº¶<ÏÔ­à¥oßÅËÛ£6Ïâý“\û]oƒšHÈ–PãÂg#°<wï‚ {a… gYÐà©yAIWP—LPô‹Ý ¹GaSªƒô{<z¾¤p6¥7›lGÑ7þFŒ"`\Ÿp»Ö@ß0B·Á*K†@<ˆ »µ£RJ›õþôd+á [5ÐÓ MSè}ùDm Õ¼ô|÷Dƒ·Ÿ(Ys·ÇuOÁÅÇB4ÐÍ“ Q4# ØV?ë‚KRPí©¿t¡VÆ‚¸r01-ÓÉ…—ÃMÏÃÇgƒèËYò³I‡`b>×gfàïƒðP|w@m‡š°ÜP¨¶ž›!ŸS ŽÍ†@=bø&ùùâ2ä` … ®FðáØxø°C m…~ÒƒÏêž¶`¯Ž*%áœj˜fÁäÄ }¯Ôoô(x h—pý#°®®>=HGHƒúÀèØúXZ¿ìÞ½›ï~÷»lÚ´‰™3grÞyç1iÒ¤ÒjÇŽ\vÙeÌœ9“Ë.»¬ è¥ÍEE…Ó<õdTiqqD`A3Õz½€‹…¤ùÌ™< {i°bàfÒÇŒ˜¤³>¶mâº`™yàúª„Ö,á ï+sPY “ïHU¶Ñ[©yè¥@?°®®.¾üå/sÆg°hÑ"®¼òJ*++ùà?8ÜÙছnbÓ¦MìÚµë€ûn…}b@ްäR9±(dua#: @²ŸNBÅË[ÈO0‹¨ZPÎ0÷Q8f5¡•ºAòa9Cµ 5„ÆI8=™¾ “mäw÷¼DFÚ`¦N†kÎ… ¯Ws¹Ï; ªbzKŠ…tnCµŠ`ÁÞ* ]ëáO)¸#¾j!=UªVZ“PYA©Wà¦|‡Ö$]òí Ãã’K…ÿŠÙ»?3z˜™òzàÕ.ÓT,>˜]18ÎV a&Y`þWÀÈEÑïfH>Ö4üäøÝf8ù¸õ,hl _ÛöÉÆ4>Õq~:檫®"™Lrùå—³jÕ*®ºê*®»îº’NýO~òÖ®]›W\ô‚#i²C—Ø4àýÚµ Ò̪‹Xz/…“wƒË²I_n†–è2`1ôDâ 3|쨟õ‰D ÜtáøDGJKo”e)=O¸l£ôÑHîyPxøá‡I$œuÖYضÍùçŸÏ­·ÞÊ»ßýn***òî¦ëòãÿ˜ Ì"?Ж«(ô<@¨ö¯Â4”¬%%†)CJéJ´hQ§¸ð>4ƒ ƇÑÝÙzoŽÖv ø÷pŒïÖ@¿AóÝ ÷»¡c!¨nÁu ú;Ò$g¶ ’q{Ê`á’$­´æsó×á«ß‚Oü>4Ìo…h•FÚAýç¥ô­þ˜˜ ‡Á†²Ðï@GÖöóCðPú¾f×è!ŽaD brZž$…r+ZbÀ“*­àÕ¬b©›øGó¡Ë‡”Ôãi¤ @N µ!º§œ¹Æ^ ÐÃ3)]½Ë>¢] )a±€Eáˆ(4U‚ú¶†ó’#E¢hÑc¾PÉn÷m‚ÚAðÖ9ðÝÃŒ©`TEFÌǘúÈeká,÷ ÃÈCniiÁ²,¶oß^èCCCÜrË-üÛ¿ýÏ=÷\îþ2>來%¨ô`êvu¨„˜à²Œ…~Gó×?j¿1QÂ}•üt6‚ K/ ‰øiž8áxDmI6–‘×¹W Œ’ÞðØT–7 Ø›Erw_ÝEÿoþ„RrofÃÖaRrøgY4ÔÛq¾ùÍorÞyç‘L&ñ}×uñ}Ã8p2æ…€hLI«,&Þ°™è†e <Cº˜–‡Y…W‡4Ô3Š ÌF¥PMÔhø¬^¿»)*µZ ­Âµz(µãw¢&Ô ¢¼Q½`6蚪,˜jÓ7ªqv0@ÓO[Äïßÿ /¶ÇhžQO´µ Ó÷Hœ§ ?[ =5qX9V´Áô z*c # ƒ¢ñ,ù.PY°²0Ň)©«k|ÝØÊËB‡a“/e` »²*I·Z@„I†J ®G)@ÜË·W5KìQAKž~í>í2`ƒk¥ryZ,xk .®‚¶*%ªÁa†Š"Y=©ž lJÁ¦ÝðÈs°ax–Ïÿ<æMU‚©¦³ãQƒBvý»´À³Á³ÀsÙZáà¥øÍŸp_U)Æé¿=·÷÷ ížçqýõ׳`Á-ZÄÓO?ÛÊ€žseƒŽoùùcÁ-nûZzmÐöÿdýøc¨(O`}z1'CÞ|ÐÍjpUœa)†nÚ"C×W¾# )”m<\UbX‹1¡™êŸžû½ûés?·¶¶²zõj<ÏÃ4M6oÞLcc#ñx<ï¾ú*=öƒƒƒÜxã<ñļøâ‹´´´”¹øft;"pÒ{Î"1B’»‹£cèÂTÞqWRŽy£FÃ`®Cmˆq«pYˆþv½ÆŸD•¶æ];5Ü·Qï5ÓÔ#t[9fU¯‰ VaÒÜ$ÿX3À‘3 | ÂP©”Õ•pÁ;à}Kà‰ ð§gáÎ5P‡c¦À1aJT5§²MÝù gšúY…Bÿ·ú_žjÂTÞªÅHOBw z|èÒ€¿Åƒg=Åê» H%kÇô˜×¸ÌKé~(2ê6*Ôxع¦*¹›mÔ8ăAîvH‹·C^‚fѾ©ŒŒ Ûàñ.xª6ö¨Ç§ÕÊÙðÁ#aúd¨­Ò©LÁ{ëþ¡C‡)ÆV•"uªf%Tœ‘_«}«~z(çyd2’É$xžGsssþù}}¬^½ÇqX³f ›6m¢§§‡k®¹¦ èy@LoŠ|>w–ÖæèçLAj—þ¿i¹¾-MÞ=\á ˜†Ö•ÒÊ=ôSˆˆ…‰‡çøD#בØC÷´ä.ó ¢ÌÊÇ‹ä>ú²µ£Ž:Šo¼‘_üârÈ!Ü|óÍœrÊ)˜¦ÉOúSN8á&NœÈ<óÚ¿øÅ/²bÅ V¬XqÀIîѸÀt‡1s…EÛ–ÒE¸YLÃÃHF!;¨7ñ`|jà¨Yeë´B7@¾Ê3A\Íàí5>¼KËèLJ «S? D@‹£Š(Ȉ¦˜`_?Tµ)Y<ÃÊ’%°$ Þ9‘‡ò2ï=­–Xuz9 ÆºGU_ŠÆ8ù 8y%¤R°æøãSð•ÇUÊ@s•е/œ³`r˜~~o)(RwBL>¸ XËù&І ÚN7Ð~‘”0 ™|oVÍžÈx t ©fTT*þÝDT¨KÝ ò ƒøµ¾Ï7aKžÝ Om†¿ï„® TDaÎd8z\4Ú&«&D¹æñ¥ŠØƒzw—¶z×Ï4q-ß0BàU)É}ô1ôÖÖV–.]Êõ×_Ï>ðn¿ývÚÚÚ˜6m<ðuuu,\¸n¸!—?óÓŸþ”uëÖqÎ9甽Ôw–…žBÕ—. ßî±Õ…¼/tïÖ2Ü í‰?FéfAÛ* bèXJr bèY·(†.óÛŽS>YãFrÏŽáfð \vÙe¬ZµŠ_þò—,Y²„ÓO?ÁÁAîºë.–,YBCC3fÌȽfΜ9Ìž=›êêê Ð A,.H•ʯV·†m`Ç,¼4ÔêºÛ«£^¶Ž¡\¸½³ˆ¾¶k¯–üà>-É?K¾DmªgE* î T é0‹’çºÀš¢3ͺ¡r10"2ë"µº3ci«oØÄ?žsh^d x¦Ã’ ØCÌ㽎š}=йÚwÁÓ/ÃOCg$M˜S óêaATPa«íHTƒ´º ÏcÍ–5¦¾OH¨ô¡RRØ¥¦xÊ LÃŒ»Ðu2ZÖVÎÁÖxüðÈNØí*‡åˆðöÅ0¡j’PU­ž‚¸ºº5BŸ£o¥fäß@"\?!òãxG è£ÏrÇã\zé¥|ë[ßâÒK/eòäÉ|éK_àü#3gÎdñâÅLœ81÷šÙ³gãº.&L(úè€~(t€êþt(j6PZ/ø;Q‰rsõجï/~/©º©cg¶ð20ô¬OÄ– ãC½ãå¯Á2 —+gäñ©ÅrÜQGÅQGU¤Ð%¸çž{J¾þë_ÿúùÝ ±„`hбrK·ð0ñ°-_PÄÄÃLDÞÒB-“ŽêÔ„7œ E '!CaÃâ T¬}#ùÝÏQI´oCE“§£RºÌV¬S¾D/$'+FèuA]­®q6Áóqˆ Ø UÌ~ÛdîýÙvœ jûØÕY„”T˜i„fªˆig•øPÝÕSa†ÇiÆÝÕ /¼ß Ïlƒ»‡Œîµ3±f6ÀÜ&˜^£ŽX°my¡¯!|ë…¾’tä ½&|[p^¯f1¬½Ë€‡wÀê—àµaAœõvX<šêÈÇЃ´+ÄȼŒ¼™gãÒPŒÜ3Á7 ²¶…B±rí\ùº~ÂÇõu*G5½òO˜0oûÛ£^ë§Ÿžá•½¤YÏ* ¹¬µ¨²µNí…Kí±?§ï÷ÉÏ9%؃ÞÄeL á:`ÛHÏÃ÷%¶ ® vh SP¶*M/ÛþÎÐ}“¬7‚ä.Ë­__‹ÄCý¥+œ`ÚvÂÂíR[ke‘íG¨ +ßQ ¹€A‡ß!¨,fõiù}¹^‰Óôþ°]S×´VófkívùÙçáÀì Š™[IåP¸ƒ«„”ŠÞ†Þ¢wNàgldwG’æ‰&.Ï2t‡i©âêxEPD.B [g¥Õ5‘µpä!àf †ôô †m°nüf#ììQUYЇִUÃĸ’´+MHD i)¹3j Q¥óƒÑi±€)t©—š©KS% HK …bãž RøBÉë>y@úØœz1âàúåNqûr«V¢Ú¶òújTéJ¥–Õš(]DÖÜzŸj ;øE€®PÛ„mã` I$â+†š´æøù¨_>IメûÏ¡S\Ù;{ÍKôõÉ=º$bC$aáö `âcVÄN¿ÚècQ¶F;Ç,’Åg :˜ƒê1ñ*ö)½R¤ßš!ðÿ_ èéž ƒ­…¸­²Æü!¨HB „—Ųb!@0©i‰Ñ:=ÎßõyÛû¤ˆ+É=¡ÚÚÚ¶ƒáƒ•7ι»8&.Uv{…§Ž Ó†·ëçÀö]ÐÑ­À}G'<¿ ~·SµLC: 1 jbP—„IÕÐR©À¿1 õI¨Ce•ä^÷YèLÁæ^ØÔëvÂK»¡' •pÐ$8u%4Ú¦€ ±÷ m$äÅ€nÀ­ý ½+ÐÏ ´ÍüõL³À= ÝÐ9Yc`è’÷ß+O݇Ö, ]õ¨D™¨LUWK륆’JT2M0£,ì$yº-LCwCÏö!"62Å0$‘ˆJ( 3ôŒ¯G©–mº‰›Ý»Ü&ü2C­–¨ìØVz @b«KàtöcàcÕU œ…x‘¤•Úb ……ÆIT÷À©ŸlÖ`Þ‡Jz§ŸÛWBKš¨ÚŽ ôäÇ ±"Cªc]EØ~:¯DhqW"°£&GœRÏCwmã˜wW‘´U,]1uôð…¢À†‰D#Õ'á)æ.4CáÉ)v‘œäýyŒÀ̘<–Õ}óÝ<ñ|èê‡WwÃö^ØÒ ÛúaÍ6è‚¡4 e”¤V…Ð §[ë'bPW Sëàðùð±)0½l]G.ö€yq×™€uë[_‡«¥)–Ú0ÌÓ¿+B,ð Cm¯"Ͼ}­ª2x8v^(-ŒÐ}cÄ=À÷Ê }Z7*&Ö¢OœKáÄu!×÷å¦5ë7 õB¥«›Âs¶‰ º%É:Ú«ÕåxºsÙÆäîàì}‰YeÉýµz…ÁЀ_bµÉ\Ä3VŸ «³ »&aNÄk!VÛÀœB¾I°¶w£’[Í"ç]è=â~Tàv}h‡g<„„`ýiÔ› v‚ÊBsÚ!YÕ ˆ¹øC)¬D$÷÷ûzÀœ#ëøíuÛX¿Ögù Ä!‚i ð>BJ ßGø>¦çcú!U;Xს'6”ª 4Ásó,>ÿ¡¦5Bçô4·B³‹Ã m<Èz ÈÓ5ñ-›UµíUg@<ɸêó“ó}ì°a„NMqc÷ªvpëšÏ ×ê)övù¬;\bªÛósÇ"ªI)ÈŽ°”}ŸZJKf§¢Û‚†2KP­ÛQsÑSZŽ ß&r§ŽÂ:t7C?£º­B,”éÈá ý˜¸V¶‚¡»&¾³÷ WÃ+{i¯Å>U5‚?Çf #êH´Vñê3=T⭯ˆ™Ð³ MP; :_{9…­ž}`¦†3ôš®ÒŸ\‹Ää¡‘VGëýá9-χ¥û 4g…(ñf°RàÔõ4LÁHÄ–‡×ÓO¤:>¬/Qm³ð¨ ûý ‡/Žb‰‡‰@’ÅÎ%ª¾õ†á#…/}ä†v!Aø2„bÛÂRâ…ðB[UࣸE·~¼‡=Ç×dÚ×Yáìöâ”…â‰,‚ÂŒwýõI[5w‘ú1i踷­z{f˜}ƒ'LõœPwYÊÅ -‚†ÁPÄȃ«êµ1tAv„=· èoKߤ=𭨚ó*&èç<…|g¹¨ØÙ“è÷4ÆD'Õek2‹zÄ'‹!$‘ˆ$“Qñ©`8"¢°•¢¤OߟMz&dFÍT–Ü_˜«-ºªÚ ¿×_bùn!?L;âj/‰MToûêã°äpˆƒ%²¤7l¢vv=®ä“ý›8=ÂÆ'{‹.!¡qX²íŒ´Ô}ŠÑ>ãtê—Ì}†¿€ãYÃËÂÂg²8Ym´ÿ×ësʼn’zƘ=3Š}"ìœx?ü0ííí´µµqØa‡‹Å žÓÑÑÁ#ûì°·}ê©§hooghhˆ;«¯¾Çyó7ññ¼ð:yšÅŽWU¦jЩZÀ*–>ñÐ&RkþNŒ4-&ÑE3aÛÃ*‚6i=Põ XšeW jу¾)½¤PãTÿ„šÕpªéT6àaOè÷«Ö{ÁïÀzTF ZÂî5°àp¨ÛÄéeêj$‚ƒ…‹‰›û«j°èÙít$ §†¥çðý{;Ô7¥Žà[ ß>"8DJ>–{ŽÓ‘vÑgØ8DÈbçþ¦àïñ ÎòØŽ×æ¥ÞGŽJFÚB‚†ïûüüç?ç{ßû]]]\{íµÜqÇÃÞö•W^aݺu¤R)þö·¿qñųeË–2Cy q{ôÏž–×þN¾ÎbO¯›šÂ¶k8  C¥‹J©z*ˆ%ñ—hTmTN"E­_¢Ü)nÜ1ô1HîkÖ¬aýúõÜ~ûíÔ××SSSà 7ÜÀµ×^K$’wç>üáç~>öØcùÈG>Â¥—^ZðœÅf-ˆðóÉ:2×­9ÌÎm²4Ï®Â}ù,gˆX$Kåñ‡“¾æ~üwœ 'ÀÜ·ÂÚ›@\¦Á8©O^g‡”¹€ÇQqù6ýûï!êCõ1*<Ÿ~ ¼^ŒÙ!¬t/ÞÖÔÌ<‹l®½¡U‰€uWT›¤‡$ž·g}U1õÑ2Y5vdtìÓÛ‡ƒœKIꯥíê?ÇÂ_'Ö?Fɽ££ƒ›o¾™ï~÷»ÌŸ?Ÿ¥K—rùå—sÚi§¨pK—.eéÒ¥êï”’N8õë×—}ï6xKhg®B5–ypX­RÒ5¨D™íúH+0·LHg0b|'KL3t× µ~Õ ½Fäû<”mœ=Þ(ž£mýúõLš4‰úúz–/_Î]wÝE__ /Û¼y3íííÜÿýwÜq3Ó$klµèëvqI$èfˆc6NMPUo1ðÔËfQ³b.]òNüWŸ††åpćᙃ»Õ%2©O\\s4zjö> :§¥2}Wéu߆*kxê>ªš£Wûðâ=pÈ1-5É bÛ, b5Ql²¹²»07T NõJÙÓXîp¶{1 ŠÁgŒÈÞXqwx-øëæû<¶îøÏ嬻»›¡¡!ÚÚÚ”Ã:k¦i²iÓ&-ZTð²®®.6lØÀÚµkilldÞ¼ye@ß;;oCéráâÉ)zÁ÷…q•@K‘ZvkBIørí ýŒv 2 ÐåK4¢–ëi@×›¾ãNr7w*Û¿ØJ%Åu~NJýþê¦ÜCCCC$‰¼[XUE*•"›Þ×àùçŸçÁdíÚµœtÒIÆ=KTxYŸlÊ%Z%‡Õ¢ÛdIÄ#L:j2÷?KÕG#âXljûè/‘KŽ€ŠF˜v ¼p3Ô^ ]µ 9éCÉåÕz}'ÈOiÑê›bæÁ¬Ï¸t3¿*Å™P;Um'ñ°í¸àĪÒD)†þ¼†Ú…“IVDIc‘Uýç‹€=Ý狌æt@U Ü÷æ ¼Ìß_¢É¥º“‚§~Ýz\÷ ÂIgÍf1M¡=¶x<Ža {ëíÛ·sï½÷²nÝ:𛛉Åbe@ß;4®Ó€îh0®×Ò[‘§Z|ñ¤Pñõ£õkjÈw’Ó=âýŒêwh˜NcÄ#x=.ѨZV®—Ÿê£=6Ê¿º,Éï'V*).ÞKOËÇ@×þ9÷PMM ½½ù„§ÎÎN*++‰F£ÃÞú¤“NâÄOdÓ¦MœuÖY|à µµõ€ûŠ+ª [-6ÿ#Âæ¸NðÊÇÑMÍÒg½wë?z•Û;HL00ßq|æ8d;ÔL„yçÀöÏ‚{ˆOjpJкõï'ß52M~ÔWxîgÀêǬSíržÚFª-÷ÀÒ0k‘Än¢ÙNú|‚i_<žˆéåzð?¨,t•×µ3K]³¹gŠçBz2:@óìÞbùCJ$ÅÅ`þ‰Úi¤@rF£¸®‹¯ëïïÇó}:™L&§Öe³Y<](„Èíe†^`Ó÷k`ÿƒïð`–Þ1îæ/i¯¾ZŸ´ŒòÜ ÓŠëÆ2FÄÂËxDô¹Íúz8‹Ô€.!n^'e'€>Ò‚×¶páBV®\Éç>÷9èèèàÚk¯¥³³““O>™Ûn»C9„ /¼H$‚eY¼òÊ+|èCÊÅÝ4®ˆqçõ}¼7ãcFEÁÖHÖQ[²ðÃó×›dâÛ"Ïb\ôz¿ùÜýPó.hó¾ 5iÖ”íÈ.ùd¹ .° v=‚’Úp/p#Ô^ M¶é&Âc_ƒãÞ‰˜;#á1Rtÿä7Ì9õ¢™û{­\ÙZ¾€Ës%[^Ì°è¬ø¨÷HŒUŒãÀܸ Œ1)®¡¡/|á \uÕU̘1ƒ7òéOšx<Î9çœÃÁÌ%—\ÂM7ÝÄóÏ?O2™dÇŽ455q '”½ÐªB µúuÒ[ú´UgVÔèNŽ¢à–‰ð=LSà;Y¢µy.˜:±Þ÷ ÇÄðkÅ+³õý{1!!à3Ÿù 7n$•J1aÂ&Nœˆã8¬ZµŠ™3gð…/|®®®œ×ÖÖ†mÛ˜kž9‰ÍÍ]Û6f˜6/j,“%‚ƒA‚!æUϳ·¯gà÷Ñø® dcv\|éïÿÿì%0gD“Rãö¨÷ ·QµñÍTQ8¦,hý¬ewÓk¸ß‡è6˜ñÿ þ0EÚ+xå&h´à¬Ó¨jªû™';v2íØåTÓK%j2\Œ4>6Ùœs2Ðå°s‹Ã¬5¯ÓåiŒꣿ¿Ñ`=®Ô…1îÇw“'O¦»»›ººº\‚Üå—_N<GÁ駟βeËp‡xsæLÞÿþ÷+‚?¶A³rUsþzï@ˆˆrà}-¹›x>Â4ðh’\ ÝÖ-£}YЃ­¥œ7ŽzÑÉ‹ÇãÌŸ?¿à¾H$ÂÂ… ó:ÒôéLŸ>}¿ø{zz¸ùæ›Èý­ŸúÔ§¨®®~C>_ IT̘g³ö±ÓçE‡5— ŽxÒààsãñoÿ•©Ç¼•hm5‘ÆßÖNúÖÏÁÊïA[ ̰SBêq軼•`œL¾dØ[3P¡´§Áÿ5¸O@ʼnÐô¨ªË—´o¼:„Oß µX‘X}l»æ§ÌþÄ $'Tb‘Îe懅ñ lm×¶,¦ 5 ¯ ÿ,þÍ”œ7*†î«N‚Y³f {ZàÐL¾¸òþÉNqÿøÇ?øë_ÿÊÅ_L4¥¾¾ËϤ¿x@KfÙ½<¯ 5um;ªÅãh-”çi@˜à{&ÈL–X­’Ü\OæNއNŠ“e6þ¦ôq~2{zz¸ûî»ùô§?MKK –e•Lâ{½AÜÄÓp­6þ£ONpçý¼÷ÜJ=yÌE"põ<ó$ƒ˜xÌ^VÃæYôÝòKæ^x<ÓãU¸ç-g}ÇîŸÿÎþœ526œƒsà™» ó2¥ïÛÓ@ÔS!sø€_@Ô‚¦ã¡õ|¨iƒSåÃÆû`ýÿ@ÿcðŸWÁÜ&š&m£5º¾oÿˆ¦Ú,óNšL DÉd0§.(†îäBÏýµŸCŽˆé w™—ºoñ¨œfõOz'ã«õkKKË›¬v¤o7œ€j³•(70Ê÷vÈIú~™Ôó†Àsœíðè¨Ntü7Lo†¨Ä´\úÿü4½x’£¾*–Ű´®âÁ,nV²fõg~¦&”à^Þ Þ }ôx÷>ù\ú²íG =3ŠçŒc3M˲¸è¢‹Èd2,Y²„K/½”ÊÊÊ7ôïhšh±ì„8¿ZÕLJ¾Ã2\=¸ÄÀÄGbÅÆÇ bªÍ[¾z$«/ý%ó[IΛŒllùƇ¼¿Ô·>\|,9*›a«·ºëÀ=\%½? <§—ÿaÓ•*%d·Á‹¿‚ÇÏ@|ètD}„æºv⑱~KÇÕ«8ò;ïaælA‚íTÓ‹M6§$$B ‰â <ù‡Ý$“’%+¢Ãƪ–m?ô1örß'€.¥äŽ;îàÞ{ïöX,ã;ßùË–-ãÇ?þ1Éd’—_~™O~ò“Ì;· Þ7ÜE±`\Ë8C¨þÍ;Pr{ïþ±†®cè2vTùؾT‡ŸH|_"e¨]æÝƒ²½±j™âAþkYÌþ(>d?¶µk×rÕUW•|쳟ý,‡z(×_=ÕÕÕìܹ“Ë.»Œ»ï¾›sÎ9§Ðoq%Cº»€hL`¼ŽÝC…€Ϩâ«çï䄳\¦ØzÜT xÂYò©Ãyò ?åàoœ‰9 VD{çJœèü»oÿá8øm0åýo+¢r^$°D‹u1 “]•äº{+<ûxù0eâ3ßD,<#™EX.¦ï^ýÝßù‡|þx™€IWÁ–bU 3äñ§ÿíã-§T)Ohzã1ÙƒLZæZGxîkØÞ =ÀÚósÌ1ø°WžL&‰D"¹ä—††š››Ùºuk  ¦—4ƒüLáñºÍoCÅσ¦%¹K v@DõK2‚%‘žÂÀs\q'¥À<èçB‚Q¦ßo¨¥€M!wt÷¾`èûù92e ]tQÉÇfÍšE4ÍIíuuu¬\¹’'Ÿ|’³Ï>» 6~ë+¿ùéRö‚#OˆQßôú¸¨†öœ&·|h”Õ¿èáÌ‹#€À&›cê.UA«˦áŒôq0m¨oƒ–©‚j;0°6½=¯‚iÀ’åˆÏ}1w•ƒ$“[©¢è`©ý’Ý?_Íò+OdΑuTð*ô%CX¸TÒ¯øH!Dpx᩺¶gYþöú´Ab–u¹}j]ÿ!C:¥w[û’ý…¡‹yÊ”){|¼³³˲°,‹ÎÎN:::hll,zV•vgˆ æ¡£cèA×8xŽG, ™”ê7“«C—yq_RŽ£¿Q–@uólÇkôqC¯®®fÙ²e{|¼¿¿ÇqˆÅbô÷÷³fÍ=ôÐan¦Î´8ãcÉ×ý „àgUðß_îæ­§ei˜lÄÏEQ}:ÀÁ§Ï%YkóðåwRù‘ õï^N¬²“ÄAS‘³.ÄÝœ‚ŽøÛaó‹øýЦ™Q¨¯C,~/bâDDs3¢¡ #ácØbF†HvwÓ&vÿ¿›Hxý,¹ñ\Z§[XôäjÎÃGáÀPÉ@ËÿÞÐÉ;?RME•‘#ežþÆYC³É»?”oÉüä_úÇÆÿÆK ý¶ÛnãÉ'ŸÄ0 º»»9ï¼óJÎo.[°ãd”§º)¾aH|Ç%‘8ƒžbè¹:t:÷åÚóqb@RÜ£>Ê~ô#„ ÐÚÚÊ?øÁ7ä³ =¹Àe»ÏYeÉÑ1î¹®“_шA3t‰êòn© nšNª£bÒqüõ`Çÿ=ȤϟJÕâiÔÔ÷âcÐ×\¥£ÚKðüÃÉd#HiàûBøX–KÌÎ`ÑOœÝå-ƒ±µÝ7ýŠÞ?=Ç̳—qð©Ç¨r©¡“ ˆ’&Á*5C…˜¹ô%÷ÝÑE<o}OKxZû+ÇÐǧ¤¸O|â àû>¶mSSS3ÎËÖö’‡([4_‡®ÇC)É]àf|âQIzH±sK3tOŽœ~W¶ýÐÞ’ûHö–·¼…Å‹“Íf±,‹ÊÊÊYÅ‹@bxïG«¸ü£;yêσ,9ÞÖŒÜD - î6¾0˜tH=o½î=lþÝ‹¬¿âvhl â#ï&9£…ŠÖ‰ø¦‰‡‡AÔˆ ¥À&†ð1…«Ú´ºÆ®†^l§ó¾¿ Ÿ]KË[ç²ø¶S3¹’Jc›4=ñÛ&‹MVÏ>W=ÛóMY}^X3ÄC÷ôòÅï·è–Ð…Ì\”™úþo’ýGrÉ’É$Éd²|ÒF´ðÔ%[ÿê@Dõu¾¯³Ü=b¶GvHÇÐ 1t©âË6ÎýMÎÐ#‘H‰0Û¿ÊmV<½¡ÉäÌOUs纙>?Nm‹Ô_µ¡›1¹ô8‚ÉHU­§MdÊQ“hp/\{+]½i’s&R»|6 g“˜9‘L¨×K¯o€ôÆm >÷2=]OzÓv¢5qÚŽŸMÛy§Ð0³š¤‘"Âv⤰pI2HœœÜ}QÝ.†êIßùÊ ·|õU>tqÓçØz`Ká®RÖèÊ ýuô²†™q¯¬t#`èiˆÔ€ïêÇàe=bèïQ Ý c)3ôqº˜Ç˜áú³ŸýŒÛo¿ß÷™2e W_}5uuuÏùÜç>ÇK/½„”’x<ÎE]ÄŠ+Ø-y¦ªò !9æä_p¸ö’\z}+‘ %wYxøÈ\ã™AŒ4.6&Í­4~p³ÏZBºkˆ-ÝBç£/Ðñ«¿0Ô™Â÷$Ò´Àó°"ñ†3™{ê\š—¾D]”¨PV" #M–8)ÕWžŒ~ÌÉ1t+4"µ{§Ã·>»cßUÉ1ïHŽëžëe†>Š= èñuëÖñÕ¯~•t:M"‘à’K.aéÒ¥Ϲýö۹뮻ð<ß÷9ãŒ38óÌ3Ë€¾ïÝÔ·º«“¡ºŸ†X dÃ61¦«jõ´ÄyFî…Þ­lo^†ÞÞÞΪU«øÒ—¾Äœ9s¸ú꫹í¶Û¸è¢‹ Àú}ï{“'O¦¢¢‚ûî»o|ãüìg?+˜¥~ º‰ÄSc ø˜Þ~%×^ÚÅ]ÿ½‹3>×H$aåRä¼\CUuk ±qñ0‰‘R /ÒÈzAó»[ñß5ŒEº'ƒëHJ}}=Çw&LଳÎbõêÕ3ÒŽ>úhÚÚÚhhh`îܹtwwçF)Ø+Oj]YUÉÅßh`Óú ·\݉ïúz©§Ç«º9¦Õ 'E‚! QÁ  PÁ•b€úØ Z<&MLžf2iŠ ¥Ñ£.:H5½TÑG$ ‚A’úH0DœTîˆé8zôªw»ÇöM)®½x;“¦Yœ}I‰ú…ÿgèÇJ7Ò’ÜwìØÁ /¼Ài§FSS§œr lܸ±àm.\Èœ9sr{@___™¡ï@7KðiW#tP¶–†hÜ4†miÕ]bH“–Dͼ\ãû9U¾lã¡ûiÈì©ØÌ=ÔÙÙY ¯·¶¶ÒÝÝM:.ùö½½½Üpà ¼ë]ï:`Ùy1SÈX¯¨\ôõz~ø_ÝÜòµÎøl•uvŽ¡«#(S‰rY$Bw˜d±C1w¡Ù½¡§•#ZýøæG º¹[?ÄÆìÐcÒõXÿ·V]µ“cßUÁ)©Æ¶¤ÞM|í臽 æãš¡KOí¾^׃»€©¤Ói,Ëʱñ Ñ|÷îÒ]0Çᦛn¢­­ ”ýyM·Í|G1tO1t!h›@6­z„)G–-Û~ èÎô¬WçÀɳo˲ ˜v6›Å4M c¸6“N§ùêW¿J"‘à‚ .(ãÊF%‚Ö)Ÿ¿¦o]²‹~y'ÿj5-B?K8> Oººu°‡Y”LgLtË‹ù~n„k>{]•¢ƒc,ä&]_^·›?ÿo/¾¸–£ÞÇ´òn1órŠqÈЇ9õ.to„l—ú}` p˜:dž”ùsìyRÊ=®ï;3{ï½—ï}ï{ÿüøÔ²Ðõ S#ÂS­_cqȦ0"fnà‚À)ô´¯FºH¿<.uÜ-æb%ܬƒú“ò¿wÝûqÖ¬Yüö·¿eppd2É3ÏÜËTTTpÝu×qÛm·ñ«_ýŠ /¼O<‘žž¢ÑhNz—R2mÚ4n½õV@õƒ¸úê«Ë=! s°6‚tµ£¶ä-ä˜8¿üŸ>¾øÞÍûžJN8£†ºÖB(f®NŸ©ý2+ô¥Ú¹äñp[¸í¬ô$[^LñÀ]}<ýÐËVÆùÎÝ-TV›Ú É·}-vNòŠCÙÆ¥J7ÒÍÿhÛ6_ùÊWXµj?þñ9âˆ#8í´ÓrÒû®]»8ì°Ãx衇x衇°m›}ìce@ßwV<œÅ,}—Š¡g0#–bBÅÊ3iˆùÍ>åéT:Y¨â”—ø8`èÙÑ:¨D¸ÿ÷/¸¯¦¦†+®¸"÷û·¿ýíòw; Pƒ`Pž4Ÿ©¬²øÐ…ÕvlŒ{ïèçkçmeá‘IŽ}w“¦Gˆ% º_Ý{’êvÃIDATÜó¿+¦í¹’þÏ¥X}wÛ^vX|dŒË¾ßÄ´9–™×ØÉ~¸ÚPfæãž¡gG±O„̲,Î?ÿüaO;ï¼ór?Ÿ{{î¹ÃžSô}ÎÒ }냰ògÐwT–»“ƈÚzFªÚr2H„²ÜS®bèbŒ×Q9…f?ô7ù<ôñb*.žgê>€ƒ—ØÌ[\Ç+}Vÿï?ø÷Ä«,YgÑQI¦Ì¶‰Wä;Í ^ʾ¤c«Ã†gS<÷hŠ<•¢®Apì;+øäÔPßl…Ü/Ø)ÂŒœºP¶79C/wŠo€nª³Ô  OM^‹ÄÀIcÆ,~N¤Ï¤¡Î$§«’ûX½ìÛ Øûc/fêÁ2m›iqöÅ5¼÷£•lXïñÄCCÜ|eÙŒ¤¶Ñ¤¾Å¤ºÞ¦q‚Ee­I,!p³0Ôï±{‡G÷.—®—Îí.YGÒ4ÁbÁ1N=·‘æVƒDRH2Å€f÷åòÔ7¡c?Ò>Qôý”®?,«Ý@•­I"6d31 |µ ©zÔ̟씫’â‚~se G 9ûÆ-æ²–©ËÐ×oäÖ0 ®^°ôh›Ã®&“lowÙÑž¥s‡Go—Gû߇è•dR>¦-ˆ'u&&™Ì_§¾ÕbÒ4›ê:ƒ Ú°4xË#—ØzÙ §¾ÌÐ÷W@ß[Ñ€£JÖ }…†È¦±jl¤ç! •7—΄ÊÖ|H{ õu/ qãÐßäÓÖÆ'Sþõ—’¿£Q‹¶YêÈ=ßW²º ž'†^·¥;Ϻå^•ƒ²½ImÔöUêÖoà¥1£&d2X¶ºÛqBek@Ƈ˜£Z¶2C/Ûëgár0¿(‚m” VÆkèÁ\ ØFHV/ƒùÀÐǘWôqÀ r’;¨ÖB÷owÒ1™Ê`G „¤3‹äü´Õ¨NqeG6Ʋµ²ýk{!{â×s7(y™¡—ú¸¶l^ržrõMn+jA:C$">d³’ ˜;n®|ÉëÅ¥,Ãï· ÝÅ‚/Û~a{k­ÌQ­“`ìåÄ–ÁücèåyèoR@M_[>²Ï¯¾b¡Ü4ÃÖoá+†þÿ·wæÑQ•wÿÜY“I†l#$1&LØQYZáRáÅ£-PŠT<#´…²´K5`)”ä=µ †"’UÁˆ¯4(’h 5!@ØBÂd_&™¹÷ÎûÇLnfL …8ƒ÷{Μ3s—™gžç>¿ïó[® 8£§­½QÀ)º5t‘q¸k¹«ðC ½=¹®¬ß½¶ƒÎNu¦Â‹ÐÛÓÐUB÷RïøZÝû·|èn ÝÑ„ÆhBªoBoÐ ;¢GÚ. ](?ÕÐåÎÍÀ’’þñPZZÊøñã™8qb«[òóó9räL:•GyDíkšõ*Txz'Mê¢(²}ûvrss4h?ùÉOöº¦²²’ôôtΜ9CŸ>}˜={6ƒAÝœåÎÁ3']ë"t­É%À5h´ ÀnèÃikÄ`DÑÐ÷ƒ ‚C ¢¤ÂZ³änC]])))‚À¤I“ظq#{÷îmuÝ7ß|ƒÕj¥°°3gΨ§BÅ]‡ÃÁªU«øüóÏ™>}:'Nœ`ÕªU­®³Z­|óÍ7466rôèQes&Uñë²u¼ „  ]p…­;ìhŒ:ä&‡KC—i¥¡;du ¾ÈÎÎF’$RRR âúõ뤧§ó裨\÷ä“O2yòd–,Y¢vš wJKKùàƒHKK#..Ž   -ZDYYÝ»wW®KHH`ݺuìÛ·wÞyG9®jè·ž~sO4‚Æäz+7›ÜEè]yèF£ÉáÖÐ=òÐíNÕÕêŸðÜïF¯œ={–˜˜e×´AƒqáÂjkkÕ®T¡Âo!wXTWW#I‹€øøxt:.\èÐ/©Š_— vh]<ït›Üe AÑu8›è $DѽۚûV5(Î_ÑV"úU`¿ëyà›–«EQÙ\Û%J’„,«Éê*Tø/™[4¸e@‰ûóçÀ ®«eÁ£ì V«EŤ®ºÏ ´.w:vÐ\´È"† ØíMNd‡§ ºætI%ô»‹Ð#€Ÿz|>­¼³X,TTT(ŸKJJ # @íJ*îB×ÿãñ¹%à-00Q¯ªªBE""":ôkªÉýŽBðx¹Mî 5‚>d$m€g“ƒQ@ÁCICv—|Õ9[WŠSóÏýÐÛyµ¬¼GŽIyy9YYY”””°sçNÆŒC@@ÙÙÙÔÕÕ¹–†”••ÑÐÐ@mm-eeeª¯B…Ïz{2 ¥6l=èׯ{öìáúõëìÛ·‹ÅBïÞ½ÉÏϧ¸¸XÑäËÊʨ®®VäAcc£ª¡ßY4ïÀæŽr×]oåFÐ\)9Ð5`w 7€$‚FhñÀ7WäÖQí©Y â»Dçvg‰åÙgŸeíڵȲLll,³fÍ¢²²’ääd¶oßNRRŸ|ò «V­âܹsràÀ233 Q»\… ŸBçj¿šÍf–.]Êï~÷;vïÞÉdbÉ’%hµZÖ®]KÿþýY²d õõõL›6òòrJKK™5k¿ýíoUBïZmÍÝÝ’ ô²AѺ*Å›5tM‹úmwo¯¦÷ÿªVîO«s©¾3fÌ`úôé.ûއ/íôéÓÊçG}”qãÆyÛ‚5KZ… ß$ôΕŠ0`ééé8N¯y½uëV/â?zôh+ z—jkn[ºÜ:#‚ìYDgÔ‚ÝÁ²èD+´pCr™Úõ†j\õ§E\çËDµEÎß>¦¸ þ²¨¿µbîíÍñ¶Î«„Þ•„.è\VxÑæ2¿»´Z¹Éáò¡×»|è‚[Cw¸85(Î_ ½± =*Tܽ„Þž pܶ_S ½+…»Fë&ôF4ºJ¿éthqÚŒ Õº|èxºS(ÿ]Ä©û§ªPñ=F×ò㆖ 8/“»Ôz#ÖEèMvWa·]p? ÷ZUôû©†®º ßo ½= jè~BèZZ2¥–î–í 3#È"‚^‡à©¡Kn ½y¨e—]‹jœõO ½ ·ZR¡B…jèíÉ€Û'ÙUBïJá®ÑºUmèôhdè´¢²L€Á‰ä'·˜ÜõîÇùÓê¼sQî*T¨¸Û½= ºBtÅ n ]«Ñ:N‡A–15-&wº§žßüˆ¨EeüZJ¼ÞùɬB… _\Ô·'T“»AÀ{«Ôhè¢ z48@¯‡ˆà”1d—†Þ\öUR#ÜýªÉ]… •Ðo-mM%ôïŒÐ;’, uÇǹk¹K.“»lÁ)c0hqˆ.ŽW¢ÜeЫ)Ç~ŠŽÅ©º w7¡ûP”»ÝnçÒ¥KTUULbb¢’Ð.Ë2%%%\»v€€Ñëï}Ònã÷5ûQš+Å9@«G#Ûq굇[C—©ht wm—Þܽàr‘ûΛüpuv»{ùnÐÐm6çÏŸÇf³Etttë;d™«W¯ríÚ5‚ƒƒéÕ«ÃëI§ÓÉ•+W(// 11ÑköÊÊJŠ‹‹¸¸8BCCý~äêëœ j›Õ6ßÙß9 ]–eΟ?Oee%áááÄÆÆ¢Óµ–î\¼x€Þ½{c6›Ûç€sçΑœœLCCQQQ¤§§+¤]PPÀ²eˈ‰‰áòåËL™2…Ù³g{méŸøØÉ{<ÓÔ´Ú»¦Eh î¿…{R×ÐbŠ×તo),ã&tdA×BèF°5A€¥h»ÃÙ1zí÷¤—ý 3¹çääðᇲeË¢¢¢Ø¸q#¯½ökÖ¬ñZ¡ÿéOâ‰'ž`æÌ™0gÎ&MšD÷îÝïÈ¿0™L¼õÖ[Øl6üq¯séééØl66oÞŒ(Ф¤¤‘‘¡Ô£÷WX¯Ij›Õ6ߦE}ÇóЭV+k×®eÅŠ >œcÇŽ±~ýzÆŒƒÉÔ²ðÙ½{7ƒ?ÿùÏ f̘Á‘#GÚß>U«ÕÔʤW__Ï… :t(z½‹ÅBxx8W®\A¤Ž{@õ-š»ì Š$‚NƒÓ!"8õ2M0´Üéïv³ô÷ÐoöjYçååEll,z½ž1cÆðõ×_SSSãõ­………$%%¡Ó鈊Š"""‚óçÏß±!&“©Õ¾ì¢(òå—_òÐCˆÙlfðàÁœ:u §SÍÁP¡¢…ÐoöjÑàËËË©¨¨PæwRR’b‚÷ÄÉ“':t(f³£ÑÈàÁƒùòË/ÑeggóÅ_´IäÏ<ó AAAmk„µµH’äµecHHÕÕÕߺ²øÌÏáb ù¶©‰{ú|´/ .úÕA€pkaW |+4BÍ o/Žš¸p–¯Ó T\¶±s³üÏdìuðº N×CïàòÄTÓ’ %ºß‹Àw œ-ʽϧµÝ¬—}e¾ãp¼=EyWUUå5Ÿ, µµµ45y¯ð¶Á` [·nX­Ö[þ_%%%dff¶ynìØ±ôéÓ§íåŠ(RUUEDD„r,""‚3gÎ Š¢W<Íù‘´×ëüf¬¿ø?;†€:¿’Zj›»Åg;ÄVÝpIy×ÔÔ„N§C£qéÚf³­VKUU•×ÍþuOY‘——‡®©©‰ÚÚÚ6 ]–oœRˆF£¡¡¡ÁKk÷4 ìß¿ QQáiªüßÖ§Ý.’Çy¤vœOáF Üo£W¯^œ8ñfûvM‹‘Ìd2yͧÚÚZ[š ìv»Bª ˜Íæ[þO’$µ)ŽçÈ6[ï<ï­««Ãd2µòçÿmÃG~5ÎùáÄSÛÜ5˜8¸ãA|o(sõfèß¿?z½I’ —ÍfC–åVr'88˜úúz/Ya6›Ñ=šÑ£GwúO…„„I^^ƒÆf³QVVÖ**wèС* ¨øÞÁd21bĈNÝ3`ÀvïÞMEEáááœ8q‚„„ºuëæu]ll,EEE<ðÀTTTPZZJBBÂ-·5&&†¥K—vú>½^Oÿþý9}ú4²,#I999 >Ük¡tº/T¨¸0xðàN]ŽÉd¢¸¸˜PXXˆ,ËôêÕË[Ñ4ˆœœ:ŽÓ§O3yòd´¿ÿýﳨ­­eË–-|ôÑGäææb³Ù ¡GtïÞ¿ýío”••‘––Æ AƒxòÉ'Û ±W¡BÅÍINN‡&??ŸC‡±dÉôz=S§NeÈ!X,ÂÂÂxã7°Z­ìÚµ‹aÆ1a„;š]òî»ïrðàA>úè#‡ƒ^½zÇž={ÈËËãØ±c\¹r…eË–µò·«P¡¢cŠ€^¯góæÍ\»v;wòÄO0räH/^Ìùóç2dñññlÛ¶¢¢"Ž9‚ÍfcîܹÎv¢WêëëÙ³g—Ù`Ô¨Q$&&"I_}õ_}õ!!!Œ?^ñíY­V233ÉËË£_¿~$''+÷755qðàAŽ=J\\sçÎ%88ا:öòå˼üòËÊç{ï½—E‹µÒ–¾KH’Äž={8~ü8}ûöeúôé^~_ƒ(ŠìرƒãÇ[|J?þñ™8q¢OµS–e²³³ùàƒ¨¨¨ 99™¾}û.Xff&Ÿ~ú)dæÌ™­ÜLÿ ªªªøä“O¨®®fàÀ$%%ÑÐÐÀÁƒyä‘GG’$rssÉËË£G<üðÃvÜ*öíÛGii©ò¹wïÞŒ5 ­VËÅ‹9q↑#G£Œwff&999èõzRRR¸çž{”ïøì³Ïxï½÷0Ìœ9“ÄÄDŸzjjjxíµ×(..VŽ­X±‚¸¸8Ÿ›Wiiiœ:uŠx€©S§ú”œú6šššØºu+Ÿþ¹rìÙgŸåá‡ö©vqàÀþóŸÿ0qâD&Ož ¸2¼>þøcöíÛ‡Ùlæ¹çžSžùÛ%>þøc.^¼H||<Æ # €¬¬,ÂÂÂHJJÂétR\\Lvv6‚ 0zôh"##Û'ô[E~~>o¿ý6µµµTUU±sçNåÜæÍ›9tè‹/æØ±c²iÓ¦ÿÊx»‘››Ë /¼Àúõë % €ØØXŸÉ±—$‰¿þõ¯üûßÿfÁ‚dffRRR¶mÛ|z"/X°€Þ½{3eʺwïîTå °ÛílÙ²…ÚÚZÒÓÓùãÿÈØ±cHMMåìÙ³¼øâ‹ìÚµ I’X³fßç]ß Ô×׳zõjÂÃÃIKK#==]1æææòóŸÿœE‹QSSÃÖ­[yûí·[åÜ—¸víÏ<ó ¿üå/¹ÿþûèÙ³§OYk×®¥¸¸˜9sæ°}ûv ùË_|ö¹¨««cΜ9Œ7ŽQ£Fíê 8räYYYäåå1tèPV¬XÀ§Ÿ~ʯýk–/_ÎÅ‹ù׿þÅ›o¾IddäwÞfÍúâþýû³nÝ:Æ׊ˆöîÝËóÏ?Ï~ðæÏŸOAARñÆ—`4±X,DGGãSsØ·oóçÏgĈÌ;—sçÎùEÚ`³Ë&66Ö'- ƒ_|‘… Ò£G¯g÷СCÌ›7aÆ‘’’Bvv6*{·   ^}õUæÍ›çuÜét’‘‘Á¸qã˜2e O?ý4÷ß?‡ö¹ÿ Ñh'22ÒçÈ\iN‡fñâÅ >œ””rss½¬)¾ŠÐÐPzôèA\\œOZÆÏ+¯¼Â Aƒ¼´ç;v0}út{ì1ž{î9L&'Nœð絫Ðjµb³Ù”•z`` ¡¡¡\¿~Ý焺N§cåÊ•L›6?üá7Œþ.ÐØØHuu5QQQ€ËÿAAAÏN`A¸ï¾û8zô(ÉÉÉ<ýôÓ=zÔgÛûmãÕµk×ÐjµJàgHHz½¾TM7ëÇÆÆF%¨O´Z-‰‰‰Ý4³¦«¡Õj¹÷Þ{yýõ×™={6sæÌáÒ¥K>Õ·µµµØívÅ•K@@çÎóÙçA£ÑOFFsçÎeæÌ™œÓß·Dè†I“&µ9aµZíMÍ'¡¡¡8N*++•ª©©éò FŒqC]tt4ƒA)¥LBB‚O¹ôz=:N):RWWG]]Oøqn¦¡‡……)Ÿzè!6lØ€$I~‘a±Xð¬Ûàp8°Ùl>€t'Ñ·o_V¯^Ýæ¹›ŽFÂÃÃ)))QŽ•––Ñ¥n-‹Åâøê‰ÈÈH´Z­¢ù3jÔ(ÒÒÒe¹UZÞw£Ñ¨,ÀÈ穱ûª†î73bÄÞ}÷]dYöù}@L&ݺuózv­V+ >±¹%)*ÑÑÑmîÕ Q©¬¬¤ººšÆÆFJKK Åd21dÈÞÿ}âããÉËËÃh4ÞÖ(ÁŽ ""â¦ÁX—/_VðêÕ«äçç+Q޾€   †NFF?ûÙÏÈÊÊÂét* |UÃ=wîœb½ùðÃ‰ŠŠòI2oæljj¢ªªŠŠŠ ÂÂÂèÓ§‡¦{÷îdeeíµHù>Ál63pàͷש¨¨ ªª Q±Z­ÜsÏ=˜Íf&L˜À;ï¼Ã¸qãhhhàôéÓ¼ôÒK]N†7kUUååå„……QSSÃxðÁ}†Ì›%III¤§§óÔSO±ÿ~BBBþ«ºw\¼xQÉØ8|ø0={öô92ožûuuuhµZJKK±X,üèG?bÏž= <˜òòrŠ‹‹Y°`o(Mw*ʽ¸¸˜””Š‹‹¹~ý:ýúõã•W^aôèÑ‘ššJYY‚ °dÉFíSeÇŽüóŸÿD’$dYæñÇçù矿­)Jÿ-ŠŠŠxùå—±Z­F^xá&L˜à³¹¦¦†_ýêW\½z§ÓIHH¿øÅ/|²èȦM›Ø½{7ùùùÄÄÄ0tèP6mÚDaa!kÖ¬¡ºº£ÑȲeË6l˜_¸ ¾ Ì™3‡‚‚rsséß¿?Ó¦MSÌÜ©©©œ:u €‰'2þ|ŸZÜ}ñŬ[·ŽššdY¦gÏž¬\¹Ò+PÒpæÌV®\©Té[¸p!?üá}ö™())aùò唕•át:±X,,^¼˜¤¤$ŸjçñãÇIMM¥°°PÙxûöí„……ñ›ßü†³gÏât:™1c3gÎô‰Éÿ¡‚i?Êë’IEND®B`‚pymvpa2-2.2.0/doc/source/pics/confusion_matrix.png000066400000000000000000001454051202542755000222240ustar00rootroot00000000000000‰PNG  IHDRôºqæ#ÁsRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEØ 2ñšû IDATxÚì}w|Õúþ{ffûnv³)›Þ ¡†Þ =ÒQAA@PÔkãzý©WÍU”¢*_”ŽÒ¤ !¤Ò{Ûl¶·™9¿?Ö(f£Áy>ü±ÌnöÝ3çÌsÞóV„1þN iúÂ… ÇGµ˜ÜíÛ·GGGwêÔI˜÷áø»ÁårmÙ²åÃ?la¹o¼ñÆ®]»„û/àþ%Ü7”——WVVÆ3gÎ „"##ƒ‚‚****++Íf3BÈßß?&&F©T€Éd*)) ¨¯¯¯­­ ILL4 ùùùf³Y©T†††644ûûû#„ÜnwYYYee¥ÓéT(QQQ$IfddØíöòòò3gÎH¥Òˆˆ…BQZZZYYér¹$‰N§KLLfG€@îÜ%~ùå— . †+V „}ôÑ!C†lÚ´)==Ýb±¸Ýn‰DòðÃOž}ëÖ­ýúõ›5k–D"Ñh4|ðÁ`x饗âããÍfóÕ«W…© »wàààÀÀÀÊÊÊäädCuèСYYYYYY.—K­V›L¦ÌÌÌÎ;sïŽ7.55U.—[­ÖO>ù$ `öìÙAAAœÝæØ±cÜÇΟ?éÒ¥wß}7::’““ãããO:õð÷iÓF*•%''€ÕjecL„¿¿|||×®]…© »|¢¡¡aÕªUééé~~~J¥Òh4Ò4m±X<ˆ•Éd@ÓtYYY@@€N§ãÞŠŽŽöññá^geeÆo¿ýÖã8-,,ôõõ¥iú‰2™lôèÑUUUË–-Ójµñññ?ü°Àïr €O>|xÏž=sæÌéÒ¥‹D")..ÎÌÌdYö·uLQœŽ‰Dn·cÌ]q»ÝžO¡Ñh¦M›Æ)õ”J¥g'ð€ ˆ~ýú…‡‡çææ9räÅ_\³fMBB‚0r à.A’$˲4M‹D"N¿–J¥}ûö‹‹c¦°°P¯×ßòE"Q»víöìÙ“““Ó®];8þ|mm-÷nçÎY–%IràÀ·x(ª© /•Jãããûõë7zôè=zœ?^ w¹ p·‹’¢¢££·lÙ²víÚøøøøøøÐÐЪªª;wN˜0!++ë7Þø£ä&©T:vìØÍ›7ÿç?ÿyì±Çêëëøá‡††¹÷èÑcÉ’% ÃôêÕËáp¤§§«ÕêÁƒ+•ʈˆˆtíÚ5 @.—Ÿ9sF.—÷ìÙS$íÙ³„Ù »w ±XEQ°hÑ¢×_ý¥—^ Ÿ={¶^¯ÿßÿþ§×ë1ÆË—/ïׯŸ0;Z P~@@kÁ`°X,AAAœ­æÀ²¬Ãá‹ÅE9Îï¿ÿþ½÷Þûâ‹/zôèÁéûc«ÕÚØØ(“ÉÔj5Çì·„ÓélhhàÈýÏ…  hîÜ%|}}}}}oû1“É´wï^‰Dâëë[^^þÍ7ß$''GDDx,9!¥RÉ%¸þ9$Ipp°pçä.@À_ŒqEEÅÑ£GišF%$$Ìž=;00P¸3þQÌ2îC8Îêêj“É$—˃ƒƒår¹pOä.@€Z=„’¿ »È]€ä.àÖ0›Íÿýï8àqœ;wî§Ÿ~jZ9ëÞQ[[»zõêÝ»wÛívÜ%K–ðî•Y½zõªU«<õ^***vïÞ]TT$L´¹ÿ³àt:ׯ_ÿúë¯ñÅ\]ò¢¢¢ÌÌL‡ÃÁ£“ÉtòäÉgžyfÅŠõõõc»Ý¾sçNÞÉýçŸNKK{î¹çêêê0ƃáÂ… uuu÷ÇdaŒ‡Ëåâñ;Y–µÛív»aÏE—Ëů—Ëe2™, ˲\öVCCƒÍfójÌEmmmeeeÓp¼L˲ÜÏæ–qcc£Á`ðh-ÿqî­ƒ/"""þõ¯}õÕW Ó§Oç÷að ...99ùèÑ£z½~îܹžœ~Þ±téÒ­[·ÎŸ?ÿßÿþ7W«ë¾‰ÚjhhøþûïÃÃÃGŒÁ˺Ýî³gÏîÚµ‹ ˆþýû÷éÓÇÇÇ!ÄU-ž0a/R,ËŽ;vîÜ©ÑhæÌ™sìØ±õëד$ùÀ<ûì³7Wͼ;Øíöššš¦[ÔúõëM&ÓÌ™3ƒ‚‚|}}I’¼w)F£±´´4**J¥R|ùå—§OŸfYvÀ€óæÍãk,¹ à"‘hРAAAA«V­úôÓOårùUκGôèÑcôèÑ .\¸páã?î%Î ]¶lYZZÚ{ï½×»wïVªRUUU566Þp‹êëë/_¾Ìcd}QQÑ‹/¾$•JOŸ>=räÈ©S§åääð¸N:µyóæððpš¦-ZT\\üì³ÏºÝî={ö|óÍ7/½ô/²._¾üÜsÏÉd2O-‡²²2·Û™™9~üøÇÜSyÿ^PPP°nݺ9sæDEE}üñÇùùù£F"Iò‡~°ÙlK—.%ˆ„ÅB ÷V’$ûôé£P(>ÿü󃦤¤xIPbbâ²eËÞÿýwß}÷æ.¼€kž7þü/¿üróæÍ­qF6mÚtâÄ ‘HÔ”øG}}}=ø’ròäÉððð¯¾úŠ$ÉC‡}óÍ7.—kúôéž‚õ¼ °°°M›6/¿ü²J¥JMM1cÆ“O>ér¹T*ÕþýûN§T*½w)*•Š+æÓ·o_®Äæl6Ûˆ#:tè ‘Hø ‚‚‚úúú—_~yРA$IvéÒeþüù&“I£Ñä.ào™L6a‰D‚JNN~á…6mÚÉïàÑhzõê ÁÁÁï¼óÎ'Ÿ|b6›yÎÈ‘#¹£±N§›={¶N§«ªªò÷÷oš»R©ìÖ­[Ó‰0™Léééú¨B¡àñ¦¹\®úúz›Íæçç§Óé8kORR’H$jllÈ]ÀßJ¥rîܹž³dBBÂË/¿Œ1æ÷yð÷÷>|¸ç¿>>>¯¼òŠÙlæý ûÄOxTN??¿)S¦8ŽÖX! **ÊßßêÔ©Z­Ös±¶¶cÌã¾uäȧÓ)‘H(Šêß¿?EQ+W®¼té_wN§®©©1›Í …âñÇš¦M&“X,æ…Ù¹[×®]###÷îÝûÓO?]ºt©¨¨Èç¶¢¢¢ÿýïc³Ùì‰;0™Ln·ûN Æ äþ·†Ãá0›Í¾¾¾ž‚®&“‰ ~§Ön·[­VFÃIá"%œN'_ªAiiéÖ­[oÓ¥K—ð‰ÕÕÕ»wïö´+jŠÀÀÀ™3gòrü·Z­?üðCYYÙÍo…††6,$$¤u­±ÔÔT®R|Ó‹>>>cÆŒáq™uëÖíØ±c555pÝ:'‹W¬XÁ]áÝ»w×étÜ2ö´©r»Ýœ—ß3¢¿¿ÿ#<’””tðàÁÌÌÌáÇóë@ ãú´p§^OKÅúúúþCÔöû™Ü³³³-Z4vìØ‰'rîŽ;|||ÆÇ£”‹/®\¹²ÿþ?þ¸T*eæÜ¹sÏ>û,_›G^^žÍfs»ÝeeeãØØXî­¦Q÷¸q´{õêU‘HÆ=ç\ä%/ iº¤¤$//ôz}AAÇ0Í0Lkô©ÆÆÆbŒo8ÙH¥Ò¤¤$¥¿ð ~~~ž+AtïÞýí·ßæ1œ)!!!::ú‹Å}ûö%‚wï½D"áTøêt:~7€€€G}ÔQæùò„„„çŸþOÊ÷ äÞ:`4¯^½º}ûvƒÁ0cÆ FS^^ÞôøÌ ƒÃáøüóÏËËËÿûßÿbŒŠ‹‹y<’¿ùæ›,ËšL¦ï¾ûŽeÙ9sæxl5|™eBBBž{î9·Û Ë—/W«Õ&Làtϼ…÷h\zê©§œN'œ>}ú³Ï>[¼x±çñkúB!TSSS^^Þ48•$ÉÀÀ@NÇK’$#"",ËÅ‹¹9jzJðóóã…­D"‘H$2›Í%%%M7Z„T*åÑnFÓtff&ç«§(J¯×ëõz¥RÅËvE„T*u8eeeMß’ÉdJ¥R­V ä޺ѵkשS§._¾Ü`0<÷Üs^’Ò¶mÛ§Ÿ~zÑ¢EÏ=÷Ü{ï½Ç»‚Ãy89/˲ááá¼A,{Ž®>>>¾¾¾aaaœGp”ǽÎÏÏ—J¥ÞKËãàÁƒ‹/®¯¯W©T Ã8®¥ß AƒÞxãèèh^¤äåå=óÌ3EEEÜ—Ûl6…BÁ²lTTÔ‡~صkW¾¤¼ñÆçÏŸ—J¥‰¤±±Q*•ŠÅ∈ˆ×^{mÈ!¼8`Ìfó¼yó¸5 ‰¬V«D"!Â××÷ý÷ß6l/c©©©IKKÛ±cAr¹Üc••ËåóæÍ›>}ú}ßZë~Ž÷‹Å|ÿý÷sss_ýõÒÒR¯lÕ¶mÛmÛ¶ÕÔÔL:UH£ÿ§¡C‡aaa¼råÊ¥K—–,Y2qâÄuëÖÙl¶Í›7›L&^¤h4š¼÷Þ{—/_ÎËËÛ²eKÛ¶m÷ìÙ3tèЗ_~™/£VdddHHÈ|••µsçÎÔÔÔ>ø`Ĉ›6mÊÍÍåë‘é۷﫯¾zùòåÜÜÜ={ö 2dõêÕO=õÔ³Ï>ËíîþþþáááÏ>ûlzzzNNÎÅ‹‡:þü ìÝ»÷ðáÃ÷ýʼoÉ]$©T*„PRRRZZìß¿Ÿ÷ÄN±X,—ËI’T«Õ_~ùellìgŸ}Æ£Ñét–———–––——s)Ô¥×ÑÐÐÀ×p\.Wuu5÷µF£Ñ`0”••qÿ­®®æk, ÃÔÔÔp_[[[ëp8''gÒ¤I"‘¨  €¯SˆÉd8p`pp0I’AAAÏ?ÿüÆ{ö왜œÌ—Á,ó ..n„ Ü)2,,ìý÷ßß´iSrr2¿RÚ´iÀ™§Õjõ‚ ºuëÆcÈvAAÁ’%K¬V+MÓ\Œ]NN÷Vjjê£>ÊKF_yyù'Ÿ|RRR½¦(*== ŽŒŒLKKãÅìn6›—/_Îý~£ÑXYYù /po%&&>ùä“\ø]«B¨¤¤¤±±Q­VÓ4]SS£×ë9ý”߃¿Ùl.//‹‹#¢¡¡¡¦¦&::š »ä%kŸC}}}MMM`` I’œ›$I‘HÄWP,MÓ4M%&&’$i4kjjüüüx‹Ùl®®®¶Ûíœ >//!D„X,þ'$©Þ‡än³ÙŒF#DGG7U<|ðA^¨Ð#Ål6sv䯯FßfèС<ºžÔjuÿþýoyPMHHà‹;T*U÷îÝcbbn~«iƽŸr:wîì1î7EPPSÓÂHMM}ë­·>þøã„„›Í–žžÎYêÎ;צM^œÞ¡¨¨(­VûÑGõèÑC,geeUVVöíÛ×f³…††òEšœœ¼}ûöÕ«W÷êÕK"‘äææfggϘ1Ãáp„††òU•%  {÷îï½÷^JJŠ\.ÏÏÏÏÎΞ7oMÓ\æ*/&&N÷ý÷ßWVVúûû×ÔÔüøã'NäÒµî{r¿Ûì;vlãÆ·|kâĉC† áEʉ'¾ÿþû›mb±8%%…ÇìA£él³Ù¸EM@\À¥B¡ðD_¸Ýî«W¯&%%ñ WVVÖÔ•JÓtuuµR©l¥È,ËîÝ»w÷îÝEEGG7®K—.J¥R§Óñ¢$ºÝŒ~ø¡¤¤„eYÿÑ£G<Øh4VWW·oßž¯á\¸paÛ¶m Ãøûû6ì0‹%$$„—l&–eóóó7nܘŸŸOÓ´¯¯ïСC‡ Ʋlqq1Ç뢢¢;v\¸pór÷ë×oòäÉPYYÙªõ‰.¹§§§ïÞ½222BCC=»ô<лwo^¤üúë¯ûöíãt꯿þzèС\X‹H$êÞ½{jj*¿çñ´´´™3grJÝnçö•‰'òHˆåååGŽéСC‡8>:xðàŽ;>þøc~ϰ˖-|øäɓߩR©5jT—.]ø%©ìììC‡ÕÖÖzéƒæW€¬¬¬ŸþÙSc ˆnݺñ{eY¶¤¤dÏž=•••žD¼Þ½{6ŒßŠeee?ÿüs~~¾Ç]Ïe„ äÞZA’$G¯b±˜sñ^m®©î‹ÅÞÂA&“M™2å³Ï>[¹reLLÌ?þ8f̘~ýú‰Åb¥¨Tª|pÅŠ_~ùeŸ>}ÒÒÒ&Nœ8iÒ$ÞÉý(..^¼xñ´iÓ¶nÝ:iÒ$ÞóËZ ‡^²dIÏž=ýýý¹{%—ËyWÞóóóÓÒÒ(ŠŠ‹‹óè(üR!.]ºT*•FGGsRB¼gø ®®ÎÓB«Õ>óÌ3M‹ãß;233_yå•ââb•Jå¡ÚiӦ͞=›_³ÌâÅ‹Ï;ç‰ù!IräÈ‘óçÏçQJccã”)S®^½ªR©<‘ñãÇÏœ9“Ç’^åååüñÎ;år¹R©äÖXllìºuëZõzûG“;“ÉT__ï1@qq±ÑhìÔ©R¸„lî©fY¶²²R¯×ó(…+oIÓ´N§ ã4ÊÊJ—ËÊ‹=cl2™rrr²²²JKK¹Ö111ÉÉÉ <vívûÕ«W/]ºtõêU®ûDdddûöí[o¡¾ªª*.ö¼©q#**Šß ž3aÝP2,,ŒÇ’ÂÂB›ÍÖôÐè)4Í Ün÷Í.ƒ‚‚ÂÃÃy´ï;ÎìÞô¢\.ç=Mýo rÁ‚÷åÀrss¿ùæ›èèhÎ?^PPðá‡j4~kmgddìÞ½[§ÓqRÊËË¿ú꫚ššž={òòýN§“ëˆ}äÈ‘K—.Éåò‘H´yóæ3gδoßž—ó²Édúá‡V­ZuåÊ»Ýîp8jjjΞ={äȵZÀ‹¦Ã0ÌÎ;?þøã .Øl6‡ÃQWWwáÂ…ãÇã½p#¯‚  6™LV«cìïïŸÀû^%‘HüýýY–5›Í\;¡¤¤¤€€~•P‰DÀ0ŒÉdr¹\J¥2>>ž÷&*$Irna£Ñèr¹äry\\\pp0¿•Ö)ŠÒjµEq͘(ŠŠ‰‰‰‹‹ƒ îÛh???’$¿ùæ›'Ÿ|Òét®X±‚¢¨^½zñ+%11ñÇüòË/9›û_|QWW÷ðÃóõý9996lxñÅýüüNœ8±fÍ£Ñ8räH–ey,‚VTTtàÀqãÆ3†+*ÂenÞ¼yÅŠä%“¥¦¦fÓ¦M)))>ø`XX'¥¦¦fûöíÇoß¾=_uk[6›mýúõÇçxV&“ 4hÔ¨Qüò»Õj=|øðîÝ»Íf3BcÜ©S§Y³fñë-dfÿþý;vìà\#A´mÛöÑGŒŒäQ MÓ§OŸþöÛo¹›–˜˜8uêÔ¨¨(÷*Œñùóç·lÙÂ…W`Œƒ‚‚f̘Ác6¯ ¹ÿeúTppð/¿ürþüùÇSõì³ÏFDDð«épJÇÑ£G/]ºtêÔ©šššýë_íÚµãëû:ÔØØøÎ;ï$$$téÒÅn·ïÛ·ôz½ÛíîÖ­/š{~~þùóçg̘ɵÝáê\†‡‡¯_¿~ܸq¼ðTaaáÑ£Gç̙Õ¾â¤øøøÈd²ÌÌÌÈÈÈ[·ùûãСC«W¯~ðÁܱcG§ÓyêÔ)NÇoðO^^ÞgŸ}:zôèîÝ»lÛ¶M­VóKUùùù}ôQddä¨Q£zõê¥Õjùå—†††^½zñøà˜L¦·ÞzË××wܸq½zõ >zô(Ã0III<ºyjkk×®]k6›GÕ¿ÿøøøÌÌÌ3gÎŒ1âyjî•••œ9O"‘ôêÕëË/¿”H$³fÍ"Âb±ðâ+§iº±±Ñ“‘8vìØeË–¹Ýî—_~ÙÇÇÇ`0ð•+!•J=¦I­V;yòd‰D²cǃÁЭ[7¾î˜Z­fYvûöíãÆ “H$\=Þ7ð5–àà`‚ ¾ûî» &ÄÄÄH¥R§ÓYZZº{÷n›ÍÖzSÃ=š’’2cÆ Žþ’““—-[–››;xð`•ÐŠŠ —Ë5oÞ<®ò˲õõõÇ犥ð…ììl__ßéÓ§s;SïÞ½¥Réž={¬V+A& W¯^MKKã >,Ë:ÎÌÌL³ÙÌc gyy¹ÝnŸ0a Aƒ¸ô¨˜˜˜§žzª¾¾ž¯HeÜ[¯¿þº§ ³Ûí.--‹Åï¿ÿ>EQO?ý4/‰ÔõõõëÖ­ûù矛ª<––&‘HÆŽËWÀe—.]Þ|óÍÒÒRÎo¦Ñhzè!’$?úè#³ÙÌ׋‰‰?~üúõëwîÜ)“ÉH’dÆl6‡„„¼üòË|=oþþþ³fÍZ³fÍþýû•J%EQ4MÛív­V;uêÔVZï—³]Ð4íQl¹Þã1¸<2È IDAT[Ü BùBˆkŠÝt_áâšø4dS»"A ÃðÙâD‹W1bÄ®ïDÏž=].×Áƒ¯^½:zôh~y*44!ôöÛo3F¥R?~Æ ‹-âw,]»výòË/.\8~üxF“‘‘±k×®‘#Gò›… V«_yå•É“'kµÚìììM›6M:•_/ELLŒB¡øôÓO«ªª¢££«ªªÖ®]ÛµkW«XÿÍq߆BÞ7àBéoP8M‡$I~P ÃÐ4ÍåˆD"/é8 øÝnN¤(ªµw£w»Ýû÷ïOKKËÏωD]ºt™9sæ AƒøÍ iúܹs«V­:sæŒÃáˆŠŠš9sæ„ ø-/òlffæ§Ÿ~züøq«Õ3yòäÇ{ŒßÚ,Ë^½zõ£>:vì˜Åb }ôÑGyä~ƒ¸\ëuëÖíÞ½»®®Ž3ñ?ÿüó­1E ÷kp¹\GŽÙ»woRRÒðáÃ=ºeË‘H4{öìaÆñõÈ;vìüùóƒ Љ‰‘Éd-ÌP‡6C† áÅŠ16 gÏž-))éܹs»víär9B¨¡¡áÛo¿}úé§ùzäjjjÖ¯__RR2uêÔ€€€´´´ÜÜÜ=zLŸ>¯€Ë–˲Ü̲¬ÛífÆù_ÜÖ˽p»Ý4M‹D"~S:oBÓ´Ëå‰D\Kn~‡CÓ´GŠÛí¦(J*•ò^õ×cíaÆétr²ÿ =˜®™¿î¿h™ .̘1ƒ$ÉœœœmÛ¶&&&ŠD¢Ï?ÿ<%%å–€îû÷ï_¶lÙ¶mÛÎ;Ç0Œ\.çÚªñû¸ÝnÎskû=öíÛWZZÚ¥K^¬ Ÿ|òÉÒ¥K/^¼¸mÛ6‹Å¯T*«««çÏŸ?gÎ^år¹þýï=zT"‘¬]»öêÕ«555=zô8{öliiirr²W«¦xùùù™™™±±±ëׯ߸q£Åb‰ŒŒä·0@}}ý… |||(ŠÚ±cÇš5k®\¹’””į9«¡¡áÌ™3r¹üÇüä“O®\¹Éo©‡ÃqèÐ!___©TzìØ±U«V]ºt)<<\£ÑðøøX­Ösç΀V«½xñâ‡~xìØ1ûIýýqÚÜ:4dÈU«V={váÂ…£Fš9s&Bhîܹà1?mÒ¤I½{÷>~üø§Ÿ~ÊõyIII‰ŽŽÖét|Ù(‹ŠŠ–/_î©yíANNާ|ùÄn·Ï;—ßy)..æ2»uë–––¶qãÆ½{÷êtº£G~ûí·|í»-ŒÍ›7;Δ””³gÏnذaèС?þø£Z­æ×ì~ùòåuëÖ-[¶,==}ëÖ­mÚ´Ù¿``àŒ3x”rîܹíÛ·sÍm^}õÕ‡z¨¨¨hݺuo½õ oCC ¶oßž——÷í·ßÊåò‹/*•Ê™3gòhÿ)**Úºuë˜1c‚‚‚Þ~ûíèèh’$,X°iÓ&/ÕÕø»á><¡˜L¦„„®:c—.]BBBH’$¢C‡µµµ< ’Ëå)))iii6l˜2eÊ•+W/^¼dÉ’cÇŽñ%Âl6ïÞ½[*•Ê~~«°Úív™L–œœ,•JxàE‹ååå}ôÑG•••hÐ ¾"%t:]lllYY™çéjß¾ý‚ (Šâ«=wíÚ•¢(ŒqLLÌ´iÓ<›®N§k¥6HMM-((HKK“Ëå½zõª««ãÎ(ü’{dddhhhZZšÉdêܹ³T*½xñ"ïð;vì(—Ë9#ø„ ìv{qq±F£áײ¯Õjûõë÷á‡^¾|¹OŸ> …"//O­Vó륈ˆˆˆˆˆØ¾}ûþýû‡.“Éòòò(ŠB![1ìv{CCà !í,Ër_ù–UUUN§“¯ºŒ~†•J¥^Æq¹\¥¥¥EEFF6õhTUUõíÛ—/7WUU•Ï {RMMÉd k¥%ÝÝn÷©S§ª««’““õz}NNNDD¿õX\.W^^^nnnHHHÇŽ ž}û¢¢¢Ú´iãŒqVVVnn®J¥2dÃ0—/_fY–G÷0^¼xQ«ÕvîÜY£Ñœ:uJ©T¶mÛ–ß§©¤¤$##!Ô·o_î€UXXxËôÜp{~ä¼Ùɲl HñRÂí}<Ü @€ÑjªœWGØŠà]…!¾r³9ʺCÖâQn+Óܯ^½:cÆŒ‹—/"²N`Ì`@d3b´»™·˜¥AbhÎq4×iYÕÜßÖÜÉ- ¯ž^¹ñ7ï>K$ü\¸åìM³.Ws£P˜æŽånoxy^¸ÐÜÙGÍ> À6_¹DÍŸÔ̰fȾ˗/ç¥ùÔc=¶{ÇN i øv· 9båÊ•ž°Iµ>抎Yÿ'uHÆí«Š#•…övßm &Ö¾/È•!ÆÀ`¤"®ÈÇ©p%Sí8¤¢«¸ U1•¥’þ™ÊGyœD)ØüQÄÕ8Ì{+^.TÍbB:7´Ö{$b¤`#Œ‘ $.xƒ| `( °7ˆpk롦}8:§òÈ;ŽŸ3@$7¨ø%²c "ÈT=Ü}Å.1²$Á÷J¨-ÆVà€öƒ+ma«L,FˆÈƒÑ&»±„§‰Ã@Þ.°”…[”Ë*..®ªªâúØ´k×ÎsÝd2egg³,Õ§O·Û]ZZš——g0$I\\\RR’X,æ™ÜåryçÎŒFãÇ\__ÿ¿ÿýeY—Ëåi]È5~t:ûöí öûåË—³³³GåëëÛ´9$Bè;¯£BõæAö…¾LÏP"»ŽØ” rŠ™Ûƒ›Dâl9õs{´=”Ä:ã lsu‡A“Õf"Hµ2»^ä¶—…öeIQ\ÁÉk­rÿš€Žw»&XºÜB5ˆâ”tuë¶œVÏw#™‘ w!%ÈÙú®æÕ¥’þ¼åÜÐ˰U„\^ÕvÕÈ 3¤ Õ‚\X‚‰ÁÁˆö‰]×@ `h Z]Ê RD¶Å{Ä× æ!ÀJ¨#€.‡.vP€üïIi 2± ò‡+•¸úú9»Âg"°_À3$È”» …§hس;2¹Ü2‰é§Ÿ~ÊÏÏ?qâDJJÊûï¿ídc±lݺõرc‰„$ɼ¼¼>}ú466îß¿ÿüùó"‘Èd2¹\®_|±G<“{jjªçuzzúÍÝÙ/^¼xâĉQ£F55ÑÜ€úúúU«Vyv‚   ‘#GÞ‘øz+˜ø‘l€(ˆcÅPo½v‹«-èë 0%Ÿ.æa¥²txùI™ÃPЮr«÷ks¬ï4)A AõøõSsÅ]“;‹¨ åtš²@Š±Í—ÎqþJ`ÚJʆqŸikÝj% eCx<øû€á@rÓÞ[ñr°Ê°ÕZ%˜ZµEÕÅnp+€R  ÜÞ wHH¸( [ã2A° ËÁÐ>¿á-$NPZÁß þ̽áìàû <§ƒË8ÇC˜r¨ †‹ÇàÿU@O;åH?æâñ¦–È¢„€¼]•ê[še:wîÜ«W¯ÂÂB«ÕÚ”T÷ìÙ3vìØñãÇËd²êêjJ¥=zô6lXxxxuuõsÏ=·{÷îN:ñïP-))ÉÍÍ­©©ÉÎÎ~øá‡›‰Ž?þÍ7ß$$$pÝ2].WFFÆîÝ»¹äæær Åb1×ù×h4îÝ»W¥R 6ìºa Fèúy £ßi081‹'–Ÿ&“ƒQqÂ}"1D³äÆ âÃà§­¥¶± ´òLuPgŒH_CÁµ5JI=Ô¯´Õ²„Èyñï‹¸æ ±KM—™©ý¦PØ•hÛY"h#xä\)²±V ï‘ Œª1b-´ÌÁØ›hjáŒ3ì_šÙêÀ©„ºxt˜—/ãqV¸—L=øÆÀ,ËÅM „ ”P}ÜÙ&Ÿg›ßfá¶G–;0Ë [,šž={@ÓÆÂ,Ëž:uJ­Vk4š¨Õêþýû€J¥êÚµ+÷™ððp­Vk2™X–åŸÜ+++OŸ>••UTTä1Ñ4ýÓO?ÕÖÖöéÓçÁÔjµ \Ï_‰äÚᨨ¨( Ôjõ´iÓœNçîÝ»U*ÕO<QTT€ò¿ÏÒgÖx<ê8mDjœHy]QÒÊpœ–Ø‘C6ØP™‘UKq˜'JÑ=ótB!¾w6‘:Q%‡R\>À_cáo„±®îR\Á•ÁÝëüx°ÿ Àí¬ßª™’#ªwØ&>’w–ŸûÊyÕl¾,¼¸U¨Ñ 2È} Ñ{§T?Tã‘Ô*h¼o*ò@ˑŅ%­×ð—0{ ô©‡Kä ïÛYD¦ã'ø•bƒ€ˆo›Í(X¦xø‘·9€ ¡í€J~; áK
    ÍDøeFòë‹ä®+ –ßeB”/*j5V¶Þ†ýäwÁŠãÀú¬°ŠÓ™í§bDP´dR§É¬d1"`?C^÷sŸš•A—ÛMqH5÷ÎìIÖ­,N¨ÿ_•¸kÓë1öF*¢NÜ–¯‰S‚I N((pS@#ÄJÀéÂb~݃R°©¡¡‡‹‹Œ»Ü jÕ /B¬4²@Ú@‰ÿ1%±ø8÷fÀaˆÆUÆã#ç`¿îb7–F/tµƒà¿vÐÚÀ_Œ-ôµdo ã~€»\ŸG7€࿚;u+U½!ÃuÒgjï äüZ‡œœœåË—÷ë×oàÀ"‘ˆrW©T*• †úÚk¯éõzˆŠŠ >qâDÏž=SRR(Š’$ýüü"#¯™J4Mee%÷º´´tÁ‚©©©?ü°TêɇÆÊ•&NûGÍ:ˆ‹Uˆ"é¾@!V+#"ÔèJT‘ÉA|›AnËB€@oߥcš¥ŸïuWû0#·ÖF.?ÔҮ§§¦>oã£lrsEßÓKRr¶Û FUØ=>çp¢m{_ãû‡}I3è7K®Œ­wœÈ—r"~¬` 9XdØŠ‰°ŠŠJ žá•vEÈI e4 îTU‹C¬ j­Ì¬0FfP³­-ˆå¯¡ô[ÙµX ]XI"'?ñ ¯ë!éü—6~V ZóµºuDÓv»Òñ>à›×„ãÎø· 7B¡²Û*FR©L&kß¾}‡ÂÃÃCCCƒƒƒ3228r/((Xºt©N§{ê©§8Ÿän·ÛN§H$"‚eÙ£GjµÚââb‰D2yòäòòòwß}—a˜AƒýÉ÷X­ÖY³fµiÓföìÙ,Ë:æ~›S^¤†¨6S¹õt´•™PN-ŽÖâ¶®¯Å Ôæìk˜‰íÝME–  âF­›sÍ.v6ͯáʱ~oÙe~ {ýÃÿ¦ç¡AoؤZж3¤„%¨»¦Œ6¶ýR¿R&éC€ a†F„G:Ž‘Ø]"éÏðTmj€€|-V!•IÀQ‚ãy×CÍX“jn;ñA-ÔUA„d­”¨`Õ`ÀFðÅ€Ð5÷º7”wŒ#ÀÐ:«å"`Eà#+`M V¤8eÈàÂr¤ ÐÇÂÑ*hïA™@ÀŠU6ÑØÅ`¡AÂ)+$ j_(Ž„cåÐËܼn…÷°BPèåšò‚°ô¦OxškcŒ†AI$’èèh“Éät:1Æn·Ûl6«T*ŒqAAÁ{ï½'‰žþùððð›EÜ+*++?üðCƒÁàïï_ZZZ]]½téR‰D"‹ÕjµB¡xüñÇÅbñ‡~¨ÕjcccýýýåryS•ß××—$É£G½ôÒK7qâÄ;bÞØñm‰i›Å Pg…3©–þ6FÌ"SƒZ ÔÝ7€v"·øš§Ô" Èmb F(¼ìDXå/&Uذƒ/€K¤8×íÙ²ÐÞwÇÖ”dýµ³ná^Ô‰ÚV¿â$”3®ì iO ¥ãñIg›´E¦ADë =_ÏÁA€YLÒHÌb¢õZÞ%ÈAb7‹I5€Âr§jo‘ÀHÀÁå1I€e€òR@½— „úžh­Š\àÓV[‘ÿYü„|ÛãëF26PįxÚ½,1² ƒù>P!S2¬‹‚#¿ÂSÕÐ1öÆÁ>7HUPS=2ñc¸¥Ì€€¸ƒ8÷›j._¾\QQQWWg³Ù<Ù¦M›Aƒ9sfç΃Þ·oA©©©uuu«W¯¾téÒ´iÓrsssss;wîÌ'¹GGGÿç?ÿÉÊÊ2 ©©©}úôáÒ‘fÍšåç燚ø ÍfóóóëÙ³çÆ›’¾N§óXlþŒ8$$ýñ(”YU&ð•ã6þØGò{S†o&B€‚/NÌMxPDÛì2-”…õýăß~ A41wýø¹åqÍÿ³fÏ'áã&¤œmè²â'áãà51µ) ñ6p3Ë[ÀÇŽî¿´"ë= úw¥kãÖ`€t€¼©­¡u÷-àž%€á~5Ârȳ0Cõblw€ÊŠ˜{S7]Xqý?âzÇ:(ø +x\=J’Á!ö`Ùße†êÉ“'Oœ8ÁQèÆxà6mÚtêÔé™gžY·nÝÎ;W­Z]YYéëë}âĉ'N@çÎÛµkÇç ‚ˆˆˆˆˆ¸1ùÓc…„PRÒµ’öíWÑ;44”{áçç×»wï»?»vÔAGݽ 1|¢Iú›5I`•ó•ÈU'jûo‰ô¢¯®H·Äêçb·[µý˜ÅdK¹‚Ûš]µ'¾…[Å ²FþâÍ1F|‹pgd5¸Ó_d¸C"@·¹›×ÐÓO?ýôÓOßüÉôë×ÏårI$.2%$$äõ×_‡?µü @€^÷dt{ã&jfm‚ š„™ü!r @€¯‘;Ü"ÎýfµyÁ¿%»x‘ÜoKÛ×;hólvÈ]€¼FîH@Þ‹‰:1  @@ë8«ËŸ½æPå9$X wð¢æNÝŽµ‰kXÍ]€Zæ~û°b¦U´Ù @€¿iî·ê²tHï””È]€¼¦¹ºÍ š{‹ e  ûl<„gFÀ­tꆦB·bañÏ­ŠÜ*/ wd%!’ôÞ*u›E}:÷öP ¤¦äB˜Íêíjˆ,€€i‘5ÜûÛ"ë ·[µ˜Ay[ JÀF/…ʼYìyaZšçþÏÖÜ3íŒ,Ã0òÖÛ&,{ΘO½= ªÝÛFÛt^–Ãbl¯wÝD^3Þt~mrÇ-$¨E¢–¨ËfÅ8ËÛ !1wÀHâÝ•L#Þ'€ºâÌØåïrw8¤¬E„×ȱŒ›R+½=…ÔB`oW^d½ÑòÔv¡OÅßÖ0Ð'*Úûgöz¹h/¦x·ŽˆÛ=„Ä$@€­îèDQèöš»0Ü À‹ä~Gš;þ‡;T  µ‘;y;G-€r @€€VEp}‚þŒ…IÁ,#@€­‹ÜÉÛÅ “ˆ¡ä¯´ $yÛfˆ`A¨ )@€­¾mä6öJˆ§@îàEÍÈ;PÊ‘àP @€€ÖÄîœ=ý6A^Èbj rw:‹E¡PÜIÇn¾C$Æ€½æ§Àf(—ÀŒS¢Âˆ¸÷SK.ARX$aÁ“^Œ‰ëéšbùXËþ¾¤ ÀMƒ "Ü‚uÈøš ëw Ý/ñý4Ï*íðG³ÄÞTƒkˆÑÒ ºƒr8Ø+)ª|’{}}ýž={ŠŠŠ®Ÿ3PHHÈìÙ³óóó80hРN:y>l³Ù¾ýöÛäää.]ºpWŽ?^WW7tèPŸ{º™˜õÓ_évvEeh˦b@!#¾3 IDATém/oR™*ËØ”ºË+ï}×sŒ1ªº"9º^S™'Kq·±–.£Œë0“[ß 4ÖQÜlEurô~¤Qê¾ë(¡6ý¢…è_ñஓ@‡ÃÙ(t\ F¨ x¤·k]O Ü0@ƒˆiåÇGhháoU>!€¡ÀÍIqƒØ …€• ‡; IJ@8°ÜKÃA€EàBÀb@4ˆXþjÅÑ{"Ùc ¶Î‰T%äÀ"rˆýF&2¬ïê^eB™¢©¬7 Ý8Zò¶”˜ðÆšáq•“¤F£ ¸ŽÝ»wgdd€ÉdÊÏÏ7W4ÎáplÙ²%++Ës%==}ß¾}‹å†ÄeévveTÑáàÊsœæáÉK¢Ÿï1ï\¯çJÜÿÈB•©â®¿ßPIZã×X-2ÓÔq¨íçuš‚tË · åS*}™ž{>dLèc•ùÜSý))2Qà°€.ÿ,³g©DÂé6hO޾„']Á¸AÖê‘#)²õ—èâHŠLz³@§u"À$0È; 5 ŒÄv,g€ôA"pyo,·)òøµ‘ìqŠËM4 Øô†Xfq}!ÀÜ_%Ò;¢˜Ã³-¸>еÚ1þïoîPU«Õ©©© À^¯_¼xñ°aÃnøŒÛí>{ö¬N§óõõµX,.—«©õÆf³±,k±XNœ8á¹®ÑhÚ´isç?#ºð©´<²Á2ÜÒû'6ø%² €œ2ßñ›'©‹M>aw7̆rqeŽ$å CÇáFÆòÎÈÝíÓÝ €H";8;4"€ îiáp¤ BPß ¾ôL½ "щz—©NðAÀ¶ÆbÚn#` `îS" ƒÀØ›R(H¸H`¼d-a€²a€\X*‡nó.ˆ b~·C è´è7’3 ®"ºø¸Êƒ™óEä;Ò@{9š9TLñÁ¥-¼ù#Ýþ§ÿÍÉ U}ýúõ©©©MŽØ`0¼ûî»UUU|ðwÅívÛívïcŒÀl6oÛ¶ †ÉÏÏ—Éd .T©T€aaú·}Ýè­PZjºŸþßÑ¡‹r¶S´ãÚb"D³ÚF¹íqWvY•A ~‰w=LÚ…hÉ}i‚Ä•¾Lþ/rÆ…°ËAžÝ¦)º( Kr$0ûG8ïeÎ1 ’þ¾d«*dÐh‚Ðöh› •¸c1¤´:BÄ-Tÿ½ÅÆÒ–\ì墈7L ,öZ¥O/ Ćü=z:n'’³@€,)ÎgÄ/1n"wæ÷¯ùVêïl¥ãÖâPu:ÿ÷ÿ7mÚ4×3 STT´uëVX¶lYPP^¯7™L+W®Ü¹s'÷™‚‚‚¤¤$þì³Ï†9wî\ZZÚ€:vìXTT„éËx+tLP'L]“"rÛSŽ,ÈîøhRloz^SXjFîzJ«¿ŠHòç¡K2Í]N¡¥¥J¦ðœ<²£Ãa&‹/Iõ•Ë"1Ûut£&„qÛÑÙí>™‡”ߪ ï`ç÷ÞŠÁª€úXôs °‚o´JÕñ”ûΛ'à¯4š)ÀŒr`Yküý¶GÑGÔ¸ìWj¤©Hpuq®'“JÉ~AÌÅΈMGPïÑÜ0{‘çm a|»$&À¨ÕĹŸ9s¦¬¬lâĉž+õõõiiiýúõ{íµ×‚ƒƒ¹‹r¹|È!cÆŒáþûõ×_76^+¤Î²l^^Þš5k§M›&‹°ˆÄù[³Žßv-ø) &ãl¯çÕÆR‰ÓD1…µÖ*÷g ʪÔízèÿÄ.KûÌ }.6hbjÛßÝè£\ÝÇ™NlÔÔ‰]vd7R2‹–ª˜‰ïTsŸIìkýîM]áyyh['ÁkÙ &̆q ˆ]HÑ 6gÂà HVÀ ³K‘M‚f¬i9¯#ŸŒæˆf'2Û¯’#KÉþ(˜9M<.~SÉV‹±™‡ ô6ðgâbY0nJƒï7Ht×ÂGËÐ4"oê=‡1f†$Iô{ã˲,Ër×ù'w†a¶lÙÒ§OŸˆˆˆ¦?E«ÕR¥×냃ƒ)Š‘HÓ«W/î3‡öxS«ªª¾øâ ‘HôÌ3Ï4 žÁ¡Ý˜ØT§#ø]“ ê‹Ÿ°N¾¤h»®&ƒ`阂ýy £í2-F„]ª±K5ÉÓÛdÿTuþ®É]¢`{?ÒÙÉ^uU¢ bN§±[Iýnò|Ý25k7‘ Ísg¨l u€†d¡bd£À)»>ˆˆ•‚]†mP¹ZáŠ"ÁÉkïÞPBȦ&Ñ € ö¼ùÆÒûAû«WÇÒûò©‘V@a¢g“/p!lÈäó–ÞAœû-Ãh/_¾\QQ¡×ëccc{öìyû/^ÌÎÎîß¿SšµÙl¿üò‹Á`àbù'÷²²²S§N½ñÆM·”   ñãÇçææ®Y³æÉ'Ÿly3¬VëêÕ««««ßyç   nBS#Ö »aNÒCªÐ „±Äiò1–“¬»> -MIÕÆRL©†`éàÊs3UÐ]eˆüÂh]Œ»ô²´*_Ôÿ±F‘”µH³žò bþ*· MûÒo ¥`–A,ƒ  4CB4¨Dëi„  Öêf`0Ì¥g_ŸÖ֪굱¼fGÀzd!/d¬#ÀR°ËÕ 7HÌb¯åÚ ¾¤D2ǺºWUÝòȱ¶ÑHZJö·  œ¾lÌfJ{ÁQü‡·õöf™[,ÿC‡]¹råÈ‘#ƒ¾Ü+++W¯^ýõ×_ûí·rÇŸ9sfÉ’%íÛ·÷ ¹ïûÿìy|U¶Ç·ª÷%=!Y! [@@E•MQÅý9.øôë8ÎøÜÞŒ»¾Ôax↣‚ * âȾY„¬dëôÞ]UçýQ¡‰IH‡Ðç~?ýG§ºSÕU÷Öïž{êÜsV®t8cÇŽm³=++k„ ¯½öÚ_ÿú×[n¹%''çd{ؾ}û‹/¾8qâÄwß}@zzúĉ»rèš”¡5)C˜} u{E9PÕo1–^ñ}jÕf¢ H×ÑùS«ÒJº}‚Ríß`ÙµÚFD͵úüѾ!ç»uªØcøâ•SŒ$K¬©RŸ?Ê—WâÄî‹»MØgvÔ`ÍÇç tàÎó ñ “ÇVc‹AB,m£Ë•ž¨“ݹsP€ÂZÂ)ºÁÎ=n-Ê"BÉ d@P†(iÐjœ»©GH†"E{ñš’ ^Ò!d… C@»AsW;€IПþÃ[eDð•8:ÐÈr‡IP# =$N¨†Ô CTE©—ÝaݹrÝ2Œ1!r´Lû"ªÓ¦M»üòËÞê0@`É’%¹¹¹ª³:Ì‘#GÖ®]›˜˜èõz7h´2dHnnnBBBxKNNÎ¥—^šŸŸŸ––vÓM7­^½Úb±X­Ößþö·­c/¼ðÂQ£FÅÆÆúýþGyDuÝp8zý©µDÐ`--šÍH&Ƭ6y“¯`åÙã+ÓJ|¦øîßÌzJÌ eBA çËís$‡Ä¥…ŠÆ{¼N ƒÎñf÷Î &Œ ”ëB¿J „M‚‰ Tbxlq8$@>DãÔOû D‚^¾D}ùi°ˆ2tÇ×%kaB` Dud-åD£~"‚6aL!QãsÑ#ª¡S»ô—éÈ>އ¥(Lßêõeº‰Õ4¬G- Fˆhá)¬}¯)((P‡†6Û×­[wèС›o¾ù™gžiíùüóÏM&ÓØ±ckkkµ÷qãÆµÙ’ššö®¤¤¤\vÙeêž5kVëŸ>räHõM~~~^^^ë‘@û¬dÑX“zÂóS—XXŸ8áxB‚Ó²Ôt”^äO/ ÷%´´\L’4ö²F;þ,àtï¾ì‡1®ƒ³ƒ¡ƒk1 ê›e©å_PR£°æj A4nk¢ sÏ,›ÐbrCJusÚÄ­‡ b­PŒövT:>@l“›5ò¶ùºô«ÊËË?ýôÓsÏ=7''',žD´uëÖ]»vÍ™3§¢¢¢ÕT¬ç}”Ç;y8‹vL?Qt÷y2Ë)²ÞÅ3âáN»›"¢Öö´ÞµúA¯Œa%$è»à¿ ƒ~ø¡Ãá7n\ë<]UUU«V­ÊÍÍ9rdUUÕÏ)î‡óï‰m‡=Ñ0›‘(( û#…åååßÿ}EEÅáÇAhnn^¸p¡ÏçËÉÉùä“ORSS·lÙrèСÒÒÒßÿþ÷=öw‡ÃÑPÜÛσ¡µ” ¬½å.Ë2‘¢(’$ ‚””tà 7TVVªŽ÷ß¿¸¸xÀ€™™™÷Þ{¯šÊåû￯®®3fLll,w‡ÃÑ Aɤ°öÑ2«W¯.--=räȱcÇ^}õÕ¡C‡Ž7n„ ê§DôÀŒ?^}T9wî\u»ÉdÚ¿ÿÅ_œœœÌÅÃáp´³Ü»ð°Oè s˜Ëå:v옪æuuu§Ín¼ñÆÖ'* ¸ä’KbccÁ}¥¸#b($S:¨Ä4{öìÙ³gŸô_»ï¾ûÚo/....nY{ÏÅÃáp´÷®„°FÝw‡ÃùYÅÐëËìq8§¸“©-õ•”¿‡Ã@ èJE6.îB³ÂêeíV™ L YuU{Sµ>“)9í˜(KZw­#ûD¢X•÷ [.ÛçÒC+™£_Z¨ãË%jÑt £ –‡‚¤¨_ÖËýßÝ-ÃÊ—ŒtÚ\‰–û€íÓç<òüoµ>—ágo»õÁWÓûWi}?\T0W ´—/C°GD¤':ë‰\1 õÀÉôÈbfˆ‡ÖyI„¯’4MÕËB Ç¢ÞgIˆd^Ñ¿½åNy¡±Ê0¯õ¹݆¸Ä¦Ô¬/™žAÔ¾•eÆÍöÞ¬½=At3‘HÒ¶u(&k1«‰ÜÌü*§·ÊOaÆáaÇÓ@&váî¢qqçp8-ͱk_ãâÎáp8}IÜ…ÚÍÆÝ2‡Ó÷Ľsn¹s8NßB`]zXÊ-w‡ÃéS–;AŒMF2#.î‡Ó§ÄAG]ø–áp8œ¾e¹ ‘¿Â}î‡Ó— 0ЏÆõJq'¢6s µîŸº1¼]–eƘ íÿ½ÍÿžöôDaLa ‚@ô“‡Ð EíBh7.“E=uï)8A!FAøI "(2#@ OE¤(Œ1ÆHÀ:í“:Ñß¾4é ´_ÐjÓº` @Œ¢ÝÍXKÞž{f vü†UºbKGñÇ`º.tž^åsolllnn®¯¯‰‰ÉÏÏW7º\®#GŽìÛ·/çääX,¿ß¿lÙ2«ÕzÑE…µ[Q”êêꦦ¦¢¢"u£×ëÝ¿ÿþýG÷~’€Pö¤a£ nô;Š1Nd)Ð ¬¨qàp,W¡¤§yÕŒpÅ£,‡dŽàLâÔí"‚‰ØŸ fælFZã©å ÄÊC¶};bª›ÇO¯é? YÕëPPüqk캩¯nȘú’ójcbƒ`ønUêöoš vGpè¸úag×Yl¡n+{,êcXµt7ÔSªÖ¨÷9²=dB0„` >;Š0AB ºŒ²öyiú:+šâXA?³5 ÕOÖhu­XTÄ¢Âw- ê‘­nÇát¶Ó‚b=²+hˆ1=7êGnÒDÜ»¿Ë… ^}õÕsæÌyì±ÇÂ?øàƒßþö·ï¼óÎ?ÿùÏyóæ-Z´H’¤P(´mÛ¶={öüDÅ‚ÁÅ‹ß~ûíŠÒ’µ®¬¬ìºë®Û²eKxË©be5ãñh<‰¹øü<ößIl7@Ô‰ÿ…—&àì›Ó·8R±s{«ˆ}:ŸYÐîXøa,{ÁÌœM诃ßשî¼ü€å²?y£ÿâÿÍ?°+V!€¶o{ì³÷ qÖ-1Òÿ½·ò,ŸW°]ãLVyÀЦ`P|å±¢‹³¹ûmj‡ÓŽF“H‚N£,>æµ0/‰L¶ÃianÖg^= X™[„ ÀÂý’K.yá…œNgxãÈ‘#'L˜žž.ŠâK/½ôâ‹/Ι3Çn··v¼üÔSO©ïëêêjjZRàN:Õçó9Î÷Þ{¯®®N ß1PG{©DÃS›[ËÈ\ýñƒR‰‘=v³YPoBS v7³~F¸2°±”.*Çhù´ó\+2kn48Z&’Ö˜P0 „jy:´×¾ú£Œòý6YÂìëéôÝÃ܈!b D= Æã°@J4¬[¢CH`¥ïû©(&xeèB¤§ëùH 2³¡X«EV¥jýÜÅwûÚŠ&;jvaòq«Kv°ãžU0Ø­[&‚p3bLˆ~UMÄÝãñ<÷ÜsuuuúÓŸÌf³ËåðùçŸïß¿„ sæÌ‰‰‰ñûýÌfs^^žj¹›Íf£QµFѯ_?¿ß¿eË–²²²«¯¾zäÈ‘eeeÀt C«Z ºöQ :(ÀòL|³›æCQö["èjQ¸‹fáÅ^Kg›j©Ð‹„(h£pÛý¤Vzj–w܅յſMk’·_0¤Édé^æD¼ ‘¤t”¥°£ ”¬hZ ƒdan¢ŸÌÔÇ­]²0·Ž$ì  AÈ@`._Cýõf²½±¨mF|FM‚¥’Î0À›Âö$c_ Š<ˆÀ˜Ç €0HõæS}îÔ¹[†‘Àú€¸{½ÞgŸ}výúõ<òÈgœp»ÝŠÄÄD³ù„G2--íšk®EÀ®]»–-[Ö2s—å7.^¼xæÌ™çŸ¾Áp¼ü $šüÓšm#ÐÇ…øp»ì Η5î1­ñ!.[r%˜d]è‹#:ø£ ì"9u-W“Áh"ƒYR‡µÔLoj¦7àÓ;ëMÛ¾8ËØ¯7Kü„…I†Îƒ˜Ôhß'2ÙŠfó‘Mîã‹-Te7PÀ˜`ö·>J&b‚q Ä L~XlpŠ´wSŠ(2é±vVë¡8@GTÜê[A0PÝ9ÝÏ•ò7ÊF™Ïç{þùçׯ_ÿÀŒ5ªµGþ‚ .˜3gÎßþö·õëׇ}ë'ãàÁƒO<ñĸqãæÌ™c±XÚy°Z¿~¢ìùX9¯íÄeûiJ–VÚD`DŒÀ¢ãÞbíšÄ‹„f¤9p =¼VÔa“~â2ê&z£2`XÓÞ­W£I–Ļބ@lB@‘™$µ(c0 ¸õôF¥Û"%@Vm Šƒ5`Ô""˜1²£ €‡ìÒ/@Ùá6‘Ï Wö®à‡-@f šˆá— jü(;q˃©m¤Cè¸ñ¬è™W€ÒÊYÊÂ/Ò"=c{Å:Ù+ú“ãî²iÓ¦-[¶ìÙ³Çëõ¾ù曃1bÄ믿þ÷¿ÿý‚ .Ø·o_YY™Íf;ûì³US=>>~þüùF£ñÁ|ôÑGGÕÉÎï¾ûn§Ó™‘‘ñõ×_(,,ìÊOŠgÆã… iØœ‚] ÄrŒ=„sEHƒØ{ñØo¥š¶ÂŠº26¡ŠFvûܱ¯}šŒ=6Í^«CÁVš€­”¦žÁÞu°r#¹¨ÜJ¿ö#ö”öÜPcúüƒÌ_¦”í‰[ú’~Ýò”«ï*Í.t3­ê»UIÞ2<>)¸wkÌœÊR3½ÎýC7ŒÊâ2[¥ƒ»c*ÊÌ—/8ŸÔÍ/©(703yMä+C¡… Í&òûa¶À£Î0õÑðp#ó[È-C4Ák‚O À‚œ“ C¬`éØoaÍzLðV _ŠÒ¸¨C`û4e 8lAc,ŽîǹÈÃ^—¡÷ Þ†úD(LjFJï¹sŽ˜~@ëU¡eee›6mJOO'¢o¾ùÆf³1"&&füøñ¡PhÆ †3bÄ‹Åb³Ù®ºêª¸¸¸•+W2dðàÁD^¶;}úôÔÔTÆXvvvBBš5k0Æ CFFFÄŸ„m+® «ö&A 2+ó#ÖMý6b‘bf §¬æGl†ÕR‚ŸÅ(è`b3¥÷cÛܬߺ´9§ê5Zä‚b§Ý·~ò¥GŠF6L²¨Wæÿvß®Mq>·~ä¹Ç®ÿ]}VA³ vÓrÂxŒõ³À¥#ÉÍnŠ Â¨…S&ƒ öð°¡0¨ïJ•Î {x‚H`Ä_ªÚ9µ”éc6ê‚0W"ßC1Ñzè¢@<†<’a4À$fÀöàÂ$Úoa ÍH9@gס¿Üc°Šô@•$D?¿ £>rcíÝ»wþü«6múÑ”“;±è$ó":/WhÒútαþöÇ_Î-:¤íaH?Ê´ 4i|62ƒÑxºÐ9ï½?sæÌ:†kÇÝîàË/o¾çîµZŸ AB¿””†$h.—a i0Rˆ±ÏÎ?õK/½˜——wú»»ôÒK3ë?~ê"çíØ[›…z¦.|å•~ýúýü–{¯„âv‡ÃÑR’XäzŒ:þN(òù|z½>„BD^¯×ãñ‘Ýnoýý7ÞØ´iSIIÉã?Àf³Ý}÷ÝIIIÓ¦M{â‰'îºë®ÔÔÔýë_×_}LLLŸw/à„¶I¦B€[ëÓðû”ºJ‡Ùš¤íaH—ŠF‰i».\\¤ø9÷#õHV€K<Ð3˳•è›è i|KÐ1tžå…€v¡ùùù¢(Ž=€N§ËÊÊaúôé­ó"F“É`äÈ‘=öØ_|ÑØØøç?ÿù¬³Î2™L}NÜ73&‚Æwæ5Ž÷ï W™a±i{ÊÝôW iªµ°„![(Cûã ô IDATÖïA”)êwxÇjاôO1BˆùÖgÂh—Æc•Ñà§GJŒÖQ¦á±cÇŽ;¶ÍÆ’’’’’’Žæ¬      õÆ>'î•DVÅ]`ÐüQDCMJ}M ­ºëzFØm$Ÿ¦G9Œ„õÈÒñK€zftïIÇ€öû'@ÒÚr'Шñˆ(38£y"ÊIoËçÎé3bÅáôíñ£_›ˆ^dÐ Q4w‡ÃÑÎÐ5qç–;‡Ãáô¥™sW²BʤàâÎáp8½¹†žÀzW™=‡ÃáD°Ê5÷n§u…[î‡Ó×L÷ö ”ÚYÏÅÃápúжw%±:E.ÅÇÅÃápzĺàrašD“rqçp8í,wêÊ"&úfœ»¢(Š¢‚ < eô:MKºŠž[?¢®¡f|Y‡s*êÎÄ7)Óõ¦h™êêêÝ»wWUUÆÂ¢¢"QȲ¼k×®ÒÒRÆØèÑ£Õ‚~‡Ú¹sgIIIZZZxÁ`pãÆùùù)))ê–½{÷J’”ŸŸo4£%d¤€)I$$B‚„AŽÞx©C •VÔé¬Ä`b0(ñ8œˆ2=|±)•(–¡?¥=ËÊP‰XLQcêöÃ,¡”RüÇ÷65E¨Ðë6dT  ,4Ž@¹ §•(L€,@ @P´MÇ9å[F¿¥SìT]Ç ¯~Š!cfEƒ5< Ä P’¡§Ÿkm—ÒP/ZÄôæ›o=zÔáp¸\®O?ýôòË/Ÿ36™L999õõõ«V­Š_°`Ýn?.î; '. %ƒãÏÞ_E&ÇPS–L=p¸FÊØ‡scYå ¬Èb›vÒEQ™-\@¥°O E†ðº0æYš8’•a/’0C™Ì„/©àG–\@5Â/*é9§,câ ð[á6Áì‘»¦Ã9$a;Рúm¨úGód R˜#‰½,Òãñ<üðÃ[·n}å•Wrrr¨žô`°eèkll4 v»]µÁ;vÛm·egg‡"­VëôéÓgÏž­þYQQvÁ»\®E‹íرãùçŸOOo]b¨ l¹÷­’ƒÌ覘¹7àA¼ñÕ4ÈÏìgâÍ=˜$Á|ú{6"dŸoÖ¬YªË%99yøðá±±±#GŽÔëõ|ðAEEEvvöùçŸß:ò½¸¸ØëõÆêêê±cÇz<ž÷Þ{ÀÀããã»+î²úÐ\Õbt‡HF$3=A0°€º!H†è‰{(‰í7ÁY†3Mp&±nJòÃa„;‰í!X%†üˆ Ýè²{‘r„âGá[Y†~höÂðeHÐPB‡ç²Í))pÍÅ–•T´ù¡j&vœæU2;n¾©'.î½ÂÊ$52½zïD]܈lh@`ؽ°k´ˆI„Ì HЫïeÍ"÷#ˆ{—j¨F ÛMq¿ï¾û$I ÿ©×ëm6€ÜÜÜûï¿ÿèÑ£¢(æää¨îõœœ“ÉଳÎ*..fŒÙl¶?þñˉؒ9sæ‘Åb9ï¼óFÕzçV«ÕårêT  hœ_A‚®Ÿ=Ц¶-4›ýį$Ø>:÷ ÆŠÉÐK0to¸º’6Q«ÿHa  ±ç\¶/Š™‚ŒHµæPM.ê|LÏ@f ‰tº¥ƒ?ùÙÄ"{ ²ö‹}¬IR½‚H]þÚÌÈ•˜DPïqËt²ªÈb± 0 õ½^¯×Ÿ3U/<€6žw«Õª¾1›Íf³¹¯ÜšNô"utD Féô:®¹½»›L2ud•ë ÛIŽj—ïð=çß‚#/uÉ-ÓkÄÃáp8]wÖ· ÏçÎáp8} ña©Èx>w‡ÃéK¨­"Z÷ÄzM´ ‡Ãáp"‹»À”H*«È¼@6‡Ãáô1q'E@ç‹õdÔ{B!9‡YÜY]Û™¸3¹[F’$Çã÷ûÍfsL̉xë`0ØÐÐà÷û-KRR’ºJTQ”æææææfEQl6[\\œ(Š\Ü9G3qgL‰T^”DÖ>¹ÌêÕ«KKK÷íÛ7räÈ«¯¾ZÝè÷ûW¯^½zõj—Ëe±X®½öÚââbEQöíÛ÷ÑG•••ˆ‹‹»ä’K† Æ—r8޶âñÕ>¢fëÖ­n·{óæÍ7n oܶmÛ+¯¼b³Ù.¾øb¯×{ÿý÷»\.§ÓùÎ;ï¬^½úÜsÏ>}úÞ½{ŸyæÇÃ-w‡ÓW`}.Ó1¦ˆb»Ÿ­JyËFEdJ;q¿ë®»c;wî<±+¢uëÖÙíö_ÿú×ÅÅÅcƌٺukNNNEEÅðáÃçΫÓéŽ=úÖ[o…B!]ßl`M×4Rt µøŸÖ"‰‰:Ÿ¬È‘Øé݉g‘ì ÖcwM_”+EÚþr:þ…u°ÐµsÔòòòÔÔTumFFFrròÎ;‡^RRòÍ7ß¼ÿþû‹eãÆ“&M2™L}NÜ `Fm“L‘LhßöBãLF èp±ÖU5ôå²êbì׺íóp–€\JOIûC( ¹GÒHh] U¦ÓΛÔn8dj›=ÉïV}*TW¶l–Bز)ò >Ÿ/...œÍÅáp455Y,–ÂÂÂeË–-Y²Äb±QEQ’$Eiù‘¡PH¯××ÖÖ®\¹2??Þ¼yF£ñÃ?|ë­·ÆÏ}îí&Q=t˜šÆJ'ù “Hr\4§O®¥½ËE‡ÌVUˆ‚Ú¾•voŠÐ½Ífs|||cc£×ë‹‹“$©²²2++«¾¾~ß¾}'N=z4cÌét.^¼¸¾¾žGËp8ŽfâÎD™éÛ¿”V/zbb»QT ]}CD¢(2äСCGŽQeÅŠ’$?Þ`0‚PQQˆhß¾}¢(Z­Vn¹s8Žvê9¿±´¯[ùøã¯ZµêСC¢(N›6mΜ97ÞxãôéÓ·nÝzÏ=÷¤¥¥ýðÃ?þxjjj||ü%—\òøãoܸÑl6ïÞ½ûÖ[o‹‹ãâÎáp8Z¡€)‘*q(`í]7—_~ù…^HjÁAHNN`·Ûzè¡-[¶=zôÁ4hƒÁ0gΜ’’’;v„B¡Aƒåååéõz.Œ),Âs/…¡ýÓ¾ììììììö_6cÆŒi³Q„ößçâÎáp8ZÑ•R‚ :xèzúpqçp8 Å]Ž$ÜrGn.î‡ÓË-w1Òw4)Åܱ¸={öÑСC‡Kr8N÷Är$·Œ¬©[Æãñ,_¾ÜårÍ›7O„§Ÿ~zÙ²e¡PèÒK/½ï¾ûã 9§{–»ÐùŠÅC!£&îuuuëÖ­ËËË3 6løä“O.»ì2‡Ãñ?ÿó?]tÑ!CÚÿgCCÑ#GAÈÊÊŠ oƒ ¢ÂÂBÕ꯬¬Ü³gÏÀ322Nœ3‘Çã1 ƒ!<]eÙd2Ei®@"$=B" º úöD„,0E @Ú¬¤ èÔC"°Œr4¼v!¦o†I„b'ŸØjm·Ÿ!É}?8©Y„LŒÕÃ~ñ"”ÔÙÉG|I*§ÏÃ" 7©7Ÿv–»ÛíNJJaÓ¦Mýúõ›5kVffæ¢E‹¶lÙÒ^Ü—.]úÇ?þQ]+IÒwÜqå•WŠ¢xèСßýîw¥¥¥~¿ðàÁ¯¾új\\\yyù'Ÿ|b4[‹{SSÓUW]uùå—_qÅê–—_~yïÞ½<ð@ZZÚ韘ÁÔŠ:„‚0×!YÒ8Q—V½dgMˆaòÀ.G;¯Å¢Þ†f z’¹i~X»­¯~è¿bƒ–¡Ä ë8üxÖ'Â¥~TÎÿ‚É~ìÌKž™lÓªZ‚³Ö¢(‘¹ý0ÈŠp-[=Œs}çôu·ÌÏ-#‚¢(.—ËãñlÛ¶-???..Î`0X,¯×Ûþß&Mš4cÆ ³Ùì÷ûßzë­×_½¸¸xèСÏ=÷œÁ`øôÓOãããg̘ñØc=ù䓊¢„B!u)­,ËÇl6+ŠÒÔÔä÷ûÃûôz½.—KQY–].׉Ÿ¨Ó™L¦S6a¨AºzY ð§ Â BŸt1ÉèFŒQ N|^X£{.Öˆ„F$% :µÈîv¾ä3px0«XCƒª[]ùÓ=‹ig üJ¬Ó‘$C€3px ¶Å)îÓ¿!Œ‡Æ°* ¸@pú¾[‘Ü2ѧEÜãââ?ýôÓêêêmÛ¶Ýyç6›Íçó>|¸C;:!!AõÀ(Š’””d6›%I:tèPiié5×\“””¤×민òÊçŸÞãñœ0åüþ 6|üñÇóæÍËÊÊRµ> ªŸÊrKæ©ÚÚÚ‡~€:Þ¤§§ßpà ݸ¦ªH1ÀÔ—û‡õ½ ‘A(êiÎ1( ¤@GÄNç:(©Ô$“(²ŸäÛËÒª”¸¿ª)V$ů*¦ò–$9µ{)ÝÏ pqçôar¤2HCË=))iΜ9Ï>ûìgŸ}6nܸ1cÆ †íÛ·÷ë×oèСÿ Y~ÿý÷›ššÖ­[7lذAƒmß¾]’¤ÔÔT5ÝðÀÝnwee¥úýæææ+V,]ºtæÌ™ƒv¹\@`óæÍáÚ¯»víR­ûØØØ«¯¾šˆª««—.]ÚÜÜl2™ŽÛøÍÀ±°ŠÁ@°ŸÌ]Å@FøŒð™àS óÃÒGÍöÖè aÔ(¥A|zmp5°$-®ØJÕ3e-Š*Y¼6•ig"šÃ_p2ëVôÏfµ1äãêÀÑØkâBaUcð Úbbçû$†TA;vlaaaSSSrr²ÍfÿôÓOgffv<")Êš5k¼^¯ÇãIKKSmpAD±Å¬ú^€ªì}ô‘,ËW\qÅù矯>D ƒ¥¥¥jòLOOWÿq̘1N§sÓ¦Mz½þúë¯ïß¿ÿÞ½{U©jÎ 0†“‰»É€ )…¾ï½ÕA2Á'31HFíž©êÒC’¡Ó(Å®7L ÌÇÚ,õsüÐvõq«Æ•ìŒ&²\…¯t=‘XŸóomX3Ԯ㕑 Hж¸GL5wŒ1«Õª««Ã‚ï÷û-K&¤^¿páB¯×ûᇾýöÛƒ6™Lª{]ý‚ËåEÑb±¸Ýn§Ó¹gÏž3f”””„èv»}þüù×_½úçŸþô§Ý»w«ïÀG}ôÕW_Ýxã£FjuØþ ¦:µÔî8é„ȃbô&£ÒW†¾k¼‹Ìð0—l²f«Ï0`f âPçM‰ö“[|F Mf;bÉßndT"!Èôf x™q†ï¦Ì_áÛªæÚÃÑɘ|\¢(×êQãÜY„PH-W¨ÑÞ{ï½;wz<ž°¸[,–{î¹gذa'û‹Å2`ÀAjkkÇŒc2™Ž9ŒFãŽ;SRRjkk“’’ŠŠŠª««ß{ï½ùóç;ŽÎÖ矾téÒk®¹f„ ?²7¬§6$A¯@!1Pw²…y’½°‡´ù!° ê‹úÎsX-#E‚îÖø`\á›YÎeôí:ÌË¥r´‡F¢V64 Ñ.Ħºe:wÒp…jCCÃ’%KV¬Xqæ™g6,ìZ1j1Ö6¬ZµÊd2¥¥¥566~ðÁŒ±ôëׯ¤¤dÅŠÙÙÙf³ùwÞ™>}ºÕj`2™&Mš$¢E‹ÀM7ÝÔÉoÚ¿ÿ£>ZRR’‘‘±sçN«ÕÚàH‚xB0˜ >‚.ÄôQeg +sÉïcŠ™DbtOG„l‚€ Ù¬§c¶+`u,fúAb=ì?°Ü¨Ê¤º\ªÉfuËP2†í+cÉ5ä‚#„>a#–cÄtÃô`…¿€ªÌrâô]¨Å*g‘Ä]ËEL?þøã´iÓn¼ñF›Í6–cáEF­©¯¯ÿòË/AHMM½õÖ[‹ŠŠ Ã5×\³hÑ¢_|QQ”³Ï>ûºë®cŒÙíö¼¼¼äääAƒ©¢¿~ýú1cÆ :4555¼ÏÌÌLY–Fã‘#GÌf³×ë]²d €œœœ‹/¾¸#²A3¼ ¤@p"Þ[_õÉ0ˆ$+LÔARÝÐ0k1?0ÃË ,óiFŽX#l;Y¦%î2¤ØH£F3¯fk¿Äàl¸Òx¶g•1P€ésQ#€v²LIhÎB½™¸¸sú¶¸G¼‰ºòî‹»êpÏÊÊRSÂGdêÔ©cÆŒ ‚ Øíöøøxu èß¿ÿí·ßÞØØHD‰‰‰ªÕ_PP––f±Xôzý™gž™““c6›m6Û< >¹U™1cF(Š‹‹:tèßÿþ÷ðvuöpèСSuÅ8‘À 0@“!RŸ]¡JÄ\Ì¡uo!za÷ÃÊ ¨øOs”ÊÆ±¹Êw'|j,d@@U%£)½ºrÕ„€)´m"v¶êšŠ~®œ>.îˆXÇXÒ4255µ  `Ïž=n·»µàž ‡Ãѡߜ1– FÁ·Vg£ÑØrËb¿~ýÂm³OõÕjU9§9`J¿ œ—2‰=q”Óô6`¤ ±µ_…ÂS%ž6~H;¼\ 8¿0]XÄDuy?ñ@5&&æí·ßÞ´iÓèÑ£Ãá1F£ñ’K.ÉÉÉáÄáp8§£HVfKœ{´ZŽêõz<(IRMMÍÇ|˜²ÛÏ>ûl.î‡Ó-Bä¼1Ú¦üíׯßc=ö裶ÿÏçÎáp8ÝwAî’[FËEL‚ øýþÊÊÊÚÚZI’l6[vvvë\¾‡Ã9Eq\‰I¢m%¦ºººåË—¯\¹²²²R–e³ÙŸ/--mĈf³¹W]ý+¯(š6m\8#±–ôÀÝM=rÔ§ÁpAAš·ŠÁ ;ëœì³Ïɸ¼ÿÛ ÿïÿjßzkKt;-E*àÜa(¤ßﯭ­õù|&“)111œnËãñÔÕÕ©5”ÒÒÒ:C]SS“(ŠV«ÕçóƒÁøøø³Î:+¼÷@ `µZÕš¨½bŠÓ"X¿Œý2ŽÂ~i׋Ëú¿3Q/:Ï"ZåDýdJþùÏ~øá‡^¯7&&fÒ¤IsçεÙln·ûƒ>X¹r¥Çã1 ,8çœsN*î/½ôRRRÒܹsW­ZµukÛùˆÉdúõ¯ŸŸÏÛœÃápº1ZE0”v¦ý®]»žxâ‰k®¹fÚ´ißÿýo¼‘šš:eÊ”ï¾ûîÝwß1cÆøñãßyç{ï½÷ã?n“…÷„¸WTT(Š"IR]]Ý‘#GÚ|l±Xü~žS›Ãápºi¹wåj›U¬7n4›Í—_~ybb¢ÅbY³fÍ—_~yÁ|ÿý÷)))^xavvöm·Ý¶hÑ¢M›6Mž<¹cqðÁu:]LL̼yóæÌ™ÓæcA"Ö;åp8ÎÉÄ]fb[q'HA…ä{] @ ýÄvgŒ)Š¢( "r:n·ÛétVUU%%%Ùívñññ))){÷î=©¸«Á0õõõ«W¯NIIiãÁ¹ï¾û®ºêªAƒñFâp8œné{Û¯ _Ù»ªÚUåSÿ”%åÐ÷u‰8±¢èÌ3Ï|õÕW.\xá…nÞ¼yÓ¦MÆ óx<Á`Ðh4†—"Y­V·Û}²ã¶ÕãñlܸñÇlóñ{ï½WYYÉ›‡Ãápº&Chóbz1eH\ÖÙÉ-¯qÉ ŽÖÖ}QQѶX,÷ÜsϰaÃx#q8Ω‹» G*R/w”8 âžžžž’’¢Óé²²²Ú|l6›{[l‡ÃéC–{WÒhò@õ±ÇSß]uÕUW]uo ‡Ã‰]wE‹òïºêêjµ˜SÇ¿‹±øøxž[†Ãápºe¹#²¸“¨âþðÃ777Ÿìc‹ÅòŸÿùŸÅÅż‘8çÔÅ)Ùr×d…jÿþýssssssFãÆËËË333Aøâ‹/ª««¹ÏÃápº-î2”Î_å–¹ùæ›Einn~ûí·Fã 7Ü‘‘¡ÓéÜn÷¬Y³žxâ Ax q8N÷P tn–+LP˜–{LLLlll (///))>|xrrr|||VVÖŒ3 Æ xóp8N·”)åH/ ³BJ’ÔØØèóùX«„1ÖÐÐàr¹x q8N7  ÄÎ]êJºv_Ü“’’rrrþñÄÇÇŸwÞy&“©¦¦æ‰'žðx<`åp8N§t%’i˜211ñÊ+¯¬¨¨¸÷Þ{AÐét^¯×n·?ùä“äíÃáp8Ý@ëBâ0-Sþ4hÐóÏ?¿aÆ;wú|¾ÔÔÔ &äææòæáp8œÓÐ÷ŸÕrW1™LLNNNIIINN…BN§Óápðæáp8œn@]²ÜEESq?vìØŠ+Ö¬YsôèÑùóç_rÉ%µµµo¾ùæwÞi±XzÇ…bkÖmj*Õ8:“ùe7D;•hûvA¤¼wQáœñ™™Æ4<I’ïÇ=[¶h}.GIAü2ò­2D®$•£4íf’úhß~]ñ¹ké–ñù|Ÿ}öÙ[o½5dȲ²²êêjY–-Ë¢E‹¦M›6räÈ^Ò‰ým·ÁÈMÅ]ùAâêq×õ€¸ÿmÑô´~1:†R¦5k*zHësù'†¿ƒÑM°ü"ú˜È ×ø® b5= ‘”yf4;˜šÏ"|GÑ0Z¦¶¶ö»ï¾+))¹ë®»}ôQ5{rrrZZÚîÝ»{¸;A‚_{q÷ý‚Ľꛫ†›æ‹Ý‚ígTDäõʵµZ_1k¬#oƒö#bO‰»¤y`‘Iã)‚ HQÿÝr¤ßLP´ˆsoÙ£Çãñz½EEEñññ­§½F£Ñãñ€Ãáp8ݲÜéE [Æh42Æjkk‰NL ËÊÊÒÓÓy q8N÷Ä=¢[F¢áÕÔÔÔâââ÷ß?//Ïëõ*вoß¾ÇÜf³ñEL‡Ó]º管¸[­Ö_ýêWG޹馛<(Š<òHRRÒ’%Kbccyûp8N7PÀd:jPˆi&î¡PÈh4Þÿý—^zé† ÜnwffæÔ©S“““yóp8N·-w…E²Ü™B?ýŽ×ë­««“å–ƘÃላ‹óx< ^¯—ˆl6[jjªüÒ™¸9räå—_=zô¯~õ«qãÆñáp8œÓ§+5T©]œû®]»^{íµ††~¿ÿرc×^{ío~ó›Õ«W/]º´²²R’$»Ý~×]w{î¹Ä1šššˆHÓE"‡óï$î!°ÎÝ2`m|î………wÝu—$IŠ¢lÚ´é/ùK~~>‹Åò«_ýª¤¤„ˆþüç?ß{ï½k×®=YÔqOHH8pàÖ­[¿ûî;µ*SXô­Vk'–?‡Ãáp:±Ü u*î-–{+y·Ûív»€Ïç{ÿý÷û÷ï_RR`âĉáïLž<ùÝwßõûýÄ]–e§Ó¹råÊ;väç燿m6›ÿã?þ£¨¨¨‡¯H]]]UU•ÙlVÇ+‡Ãé‹tœRVBU Š/Ð"îA)XãìPÿ›šš¾üòËË.»¬MŽ/¿ß¿bÅŠQ£FY­Ö“ú„Iž‘‘1}úô6 †ž/³·xñâ/¾øB}¨ûÔSOu{? QË2í`Ú/ñçôX«ÙöO¶û™^‚`BHGáe´,ÈtAˆ"ÞCÚßž¤å]bPÚZÇ?‡åÞÞçN!ÉWZ!Õ9Ãú×v¸Ä÷Ûo¿mnnž2eJë¡PèÿøÇæÍ›Ÿ~úéÈTÇÅ_ÁÐÈf@:g³ÍÔ Cøžå}‰Âf˜“ྚ­O&'tó)À˜Ld À¤íEq8–„ªðýS,'Åý,£Xw«Þ¨’¯ Ö»¯Ê‰ªŠöÿüÎ;ïŒ;6+++¼E’¤7ß|óÝwß½ûî»GÝé]EÑápÄÄÄTVVîÛ·Ïçó¥¥¥ 4H¯×Ÿì?Ýn÷ý×íØ±Ã`0$''ß|óÍ“&M*--}î¹çvíÚ 'Nœxÿý÷Ûíö5kÖ,_¾ÀæÍ›½^ï¼yón¸á“ÉTQQñØcmÙ²%>>~À€ óæÍËÍÍ9rd(Ú±cÇNgÀ Àì‡E`‚/ ô^X¢¾Ì—AµÊ=‚˜´´‰ ƒ‚>.î‚ "DÐGĽ‘YuÐ6Êœ‚³ƒ˜°˜¹‹2æ²6CL$l7KÿÃÎÀÑBVõ1†-¤sïgŸŠôKÊ6Úý¾lD ½LfBfæà§è'P3ÂǘrŒÒ‚0õg9[µÌ^Û­¢(¤$œøN (&Ä€ÚŠ{yyù7ß|óÆoˆ¢6/^¼dÉ’›o¾yêÔ©áíÜ2µµµ¯¼òÊ›o¾ÙÐÐ@D:nàÀ/½ôÒ Aƒ:üÏ?ü°¬¬ì7Þ0›ÍÍÍÍv»Ýét>ýôÓ¢(¾ð ‚ Üzë­Ï>ûìÿøÇººº?þøúë¯ùå—·oßþÐCM™2%--íoû[EEÅ /¼@DO?ýôöíÛgÍš¥Ž4¡Pè4¯© 6c@+šõ0X¢>7–¡S Šõhê¹ Á(B´\9"€Æ)¶YV<›~ÌPbÏmtE™”OÕ\Úr‘ƒÀ,½É€PPƒ´ˆ `ð ÆóÏí‹ØÉ;.Öñî»ïfddœuÖYaOÉ|ðòË/Ï;wðàÁµµµ‚ têÞrA].×믿þúë¯_|ñÅK—.]¹rå3Ï<#IÒܹs««;î‘’$ùý~ŸÏçp8òòò222¶nÝZ[[{ÅW 2¤¸¸ø¶Ûn[¶l™×ë0lذéÓ§çççÏš5Ën·ïÝ»×çó­]»ö²Ë.>|øˆ#¦NšššÚ%•ƒÜê¥tn¼ PD„¬p  LIIÏøòìãµí‹çb€d¢`ë{'Ò-5Ãò»àeá¼È ^¦¯Bl29cáa lª·²à>$<ÈX½‡[Üß ` …4©CD€ÍÙ¬4;Q%ž´HÃO%…)Qïê bç¯öc›¢(«W¯¾ñÆ CXrKKKkjj^~ùåY³f]xá…sçέ¬¬Œ`¹WUUmÞ¼ùºë®»ûî»UWÌÈ‘#§L™RRRòùçŸ_yå•íÿóÒK/ݸqãüùó&L˜0oÞ<§Ó©Fð¨Þó¼¼<ŸÏרØÀf³Ùl6‚ ˜ÍæP(¤(JsssJJŠúåøøøNû¶ž©0P«›$æÿÛ;óðªªsÿß=œyJN摌„DˆŒZ© ¢V´èUQé£R«¿VíÓZ¥ýY{ï¯O«½zí@­mõz¯­¶µT¼Z½ « @BBæäÌçì½Öï“Ä0ȉÉÙ!‰ëóDŸä°ÏYgï½öw½ë]ïz_Ž@ýŒKw£Û‰÷ÁƒI,i ’ì«­ Îÿåg_H5ŸðôßaÉ×é³Ð檕¢ñÅUâÌNÑ>nkªÇ[³ÜLa ,³âN~¸u®Ä`²‘?7˜(Ú Ožxú†ýì˜IO¹Ø+IÒºu놾¢ªêüãÿøÇÃlZ4øNgnnîP'»ÇãÉÏÏÜ{V«õ‘GéééÙ¶mÛ“O>ùÔSO-X°  õõõ1Æ$I:tèÝnkúÉȲìõz>Ì㜷¶¶öõõ ã ËCëBœþª1È=HíƒÇŠ` :b0ûáâÂz$\ãòÒÆRÖÚ ÇÓ‚í(©B‹Llhy ’Úïƒú> ì›y( k f#šðÁãƒ@OŽ–žÊa" ± Þ0qFøƒ‘•˜¼^oiii]]]cccNNŽ,ËÁ`p÷îÝœóxðüÉìÚµ+x<·Û——'IRyy¹Ûíþç?ÿi2™ˆèoûÛ\ðYÁ6V«uÑ¢EëׯÏÌÌ䜿ù曽½½ƒÓˆÚÚÚÇ÷ôôlÙ²%++«¨¨hà}yÃ/ À!ép:ÐgF(§wAÉ@Ÿ‹B)<@…–‚àQî1‘îD¨¶0™l< ‹–,êÊþ©²[ˆ‡<}Q8( ‹ÌµS_Jœ 5äp8¹­'ý34Ÿ»Ýnæ™gš››Ï>ûl³ÙÜÖÖ¶~ýz—ËõÎ;ïlݺÕn·Ïž={êÔ©ƒï¬««{çw‡¦if³yéÒ¥ùùù+W®|î¹çžyæMÓ²²²n»í6™™™•••ƒ±’³fÍÊÈȰX,_ûÚ×|>ß‹/¾èv»EÉÌÌŒ/þï‰I` b€TDdha£|îœÀãÛ‹ †…Ói…#<·Ô:ŒÀø˜”`%¨äð“%Ê•N²›yÌŽHŽZýò¿Äë’çRó©ËŠH Úß¡ÒC<ÝDú*³ñH™XMÀLa÷GaŽÀïÒIïÌ2t"q«YEÔM~î:#Cë°ÄKœVf/ ƒÁÔÔÔC‡555I’‹Åìv»Édzá…¤¥¥¥¥¥ ÷Ë/¿|Ú´i===f³yÊ”)ÙÙÙ.\X\\|øða"ª¬¬LMM0cÆŒâââÁÔÁ·Ýv›×ë%¢ÌÌÌ[n¹EÓ´X,¶víÚH$âr¹L›6íæ›ol(55upIáóÜݘ ݃w:5§Ãc|‘ÀRe4˜¸—*"ñ8HÇ rHôñV8QêøÜ?$yÿ‰-ðøÉ²gÏ”çñƒy辿‰òÊôÃj£ØB^'s6›†w¦oAÉî½;Ó¸_Èz;|éWlðˆÁœô "tº¬à qÞŠœ¡MLÃèÛ²5T=Ïòåˇ&.8UUO(Éäp8fΜy¢ ¹àv»‡:gâ>ÎyssóüÇX­Ö@ Ð××·råÊ´´´¸ÈëõŽòÄt(AØhäÌLÆÜxbÜD`rÖÎTœ; C¸ô¹›L¦ââââââ±›˜¥§§_y啪ªuÖYŸ•gdò„s`ýŠ ½y:Ô1è"šñ­Œ:&^*ºLÞ—‰S¬ùÛxdIÄù ‚xïÎF'’8ƒ`aØŒn"¾)=Ç?Y>ŒJL ‰‘aâ~Fp¹\K—.Åb’$)ŠbLªa±|* N©àNbõ‹ ΰå~Æ IJ¢µ.ãLܥĖ{™½$ë»HÔ.Ɖû0|î$',Å'Ä] Æ•¸#qT—ŒØà&Ä] Œ´Üù0|îÂ-# ‰Q¢XO’IÂr‚ d¹#±åÎeÎ)éñ2BÜÀ0qç’ÎXîÄân!î@0aÄXBáfÃñË qF?‘ˆû’4qÓŠ»Ä˜XPoøš$ˆO®'O‚‹Æ@}d9LiFŸFˆ7z$„ m%Sƒ4×|L:4ÀÐ:´:HK¾å®'rËèÒÔ_\q€‡&ERè“EßyÂ’‡É{¼½õQ(›0í§|¥Ñg2 {.á묋ûa*ü;®ƒû£ÇßXtðÞ$?LÒµ2KšÎ™$Tù@µ”ÉaêN2ã}2œC¦ãNE!Ù´#`h+V'×Ý×ÿüd×PåàŒ &61 Á281–Èe1›˜`‰»žHÜuIb"ZF &’ºƒ1éô—þU!î@0q,w‰'ZPÓ!,w@ ˜PêN‰…Û‡»w@ 0F¤' sÔea¹ ÁD³ÜuÂikˆ’nHùt!î@`œ¸ó„qîÐ)ñ1BÜ`ÁZ¢ÕŒƒ%ßtwâ®ëúÓO?½~ýúæææÜÜÜk¯½ö²Ë.E´_ S/Ì&õïZ$b\úô¸4°—’Câ §±È!‰ñž`½´‡êñ¯1Æyÿ='"I’Nœ0&I}¶ÃgTâ®ëz àœ«ªj6›eY‹ÅB¡›Í¦(Jü0Æ€H$Â9·Ùlñ#–eÙd2qÎE‰F£ëÖ­»âŠ+Š‹‹·lÙ²zõêP(týõ×àë¸]‚Î!éP JŸ4Ð #ðL|2作1"dî„·é!²Lç{íÜ S=•`K¿%íEü¢]”ÚŽônxÒÑQÂDNËñg¹'ÎEF'ÎOÖM›6ƒÁ¸¦»Ýî™3g:ÎÁêëëkjjæÍ›—“““|qF£›7oþè£t]ÏÈȘ?þÔ©S»ºº¶mÛV[[«ëzuuõyççr¹Ž9RSS£(ÊÁƒûúúÎ9çœùó竪êóù¶lÙòÑGy<žüü|sæÌIOO_³fM|TÈÍÍÝ·oßÞ½{9A—å241‚Î 3ÈÉ® MAŒÀeh1˜DgŒ†cÈøÓ}puð´"¶Ã€sŠ’) €0,xÉY´w °s|ÜÕG®\4£AXãp"–pBÅ8;Q]W­Zåt:‹ŠŠ•”” Š{GGǃ>¸fÍšgžyæ_þå_’/îûöí»ë®»–/_žššzôèÑÆÆÆ)S¦¬Y³fÆ sæÌQUõÞ{ï½å–[n¹å–½{÷þüç?/)))++kkk»çž{žzê©)S¦lܸqõêÕçw^(Ú°aCooï¯~õ«ŒŒŒ¸²sÎûúúü~EEÅÈLj ªÕ„ˆdd¾¡x+ 4šèÉ‚Q’Ç›sÑÒHù›±xðE ³ø®øï TÜI©ù8bBÒæL[0_LÇ­¸óDùÜI?…[Àí·ß~ã7ž8·‹Dž~úéââb“))9rq?tèÅbY¾|yAAËå"¢†††M›6]{íµ+V¬°X,ÙÙÙO<ñÄòåË8Ž+V\|ñÅápø²Ë.ûðÃ333_zé¥óÏ?ÿ¾ûî#¢'Ÿ|ò¹çžúùÝÝÝëÖ­ãœ/Y²dˆ_Iô`Ád&îI§Ï´$”fä:áOå]ñè9…Ç¢PÅu¿Ú·‘Ëò3’oß¾]Ó´´´´êêê‚‚‚ø‹ï¾ûnMMÍw¾óßýîwF‰ûÌ™3«ªª}ôQ§ÓYYY¹dÉ’––"š:uªÅb°xñâ_üâ­­­qK~~>Y­ÖôôôžžMÓš››/ºè¢¸^RR’‘‘1øá@à©§žÚ±cÇ7¿ùÍ3f i¶ÒùàÙ"æGð¡—ÜíH+À£sa`@(Ø¿n \ɵÜédq×bth/ü½ƒâpÝqc¼$-\¸Ðf³ÕÔÔ´´´lÞ¼ù»ßýnQQQSSÓºuë-ZTTTDDF‰{~~þüã}ûö}òÉ'›6mêíí­®®Öu]×õÁéŵ[’¤ÁÕÞøw""³Ùô÷Ñp8öçûgŒ=þøã¯½öÚ·¿ýí /¼ppõ5þ… êq—Åú‘à 3¿§Vdé3qLEL\¤@¤ê€¢0@Nòç3@?Ñ.—4&ûýÔÛ3`¹Çxè¸ÌûªªÞu×]n·›ˆ¶oßþÛßþvÆ 7ß|óºuël6Ûüùó­Vk¦G.îGŽÉÉÉ)//ïíííë뫯¯Ç,nݺµººÚn·¯]»¶°°0''gÿþý'2f³¹ººúÕW_½è¢‹¬Vëo¼ÑÔÔ4¨ì/¼ðÂ~ô£ .¸@UO˜rfq^2DÜI8j_°E–}©¼K\$!qž=Ä'¢A$µ<ç'.–`² %gcÀ¦X„Ú[qððP˽¤¤$þûœ9s¦L™R__ìØ±­[·677;vL–eŸÏ÷ä“Ojšw}'SÜßzë­Ç{¬   ‹ùýþ•+W^ýõ<òÈöíÛcííí÷Þ{¯Ífpr¸‹Åb¹îºëî¿ÿþk¯½Öãñ¤¤¤x½^"jkk{衇Ž=zï½÷>ðÀ®ºêªoûÛÇ«ùçÊà Œ{ÁÄ´Ô§ )=ð”£Þv õ&ÎÈmë!W'ÿJ2ýä%¦:×JH Kªå³> ‰´··OŸ>Ýív¯\¹²µµ5îY³fMYYY<œ&Éâ¾lÙ²²²²¦¦&³Ù\ZZZPP`2™.¹ä’ªªª}ûöÅC!sss|ùË_>묳233ão|àœN§$IÓ¦MûÍo~ÓÕÕ%Ëò–-[¶mÛf±XRSS×®];èÛžž÷í|^dh*¢t7#¤C‰Â”ô›'CWZ± ¨CŽÁ,B#£“¼{QuyÝ<õ Zh£ÀWðš‰GtÈí”P6Z?ݬDøÕPr ™à|}uö•òƒb7Óørü0â ÇñãïØ›o¾ùÖ[o•––X·n][[ÛW¿úU·Û½hÑ¢øž!ÎùªU«Î9çœêêêä‹»Ëåš;wîìÙ³i€¸³¥´´´¸¸8>³ˆév»ãá4ñ?—:::žy晳Î:«½½ýÙgŸ]°`Ann®Éd:ùë&\:8õ IƒJã#ƒd„à éPu(1˜Å4A0J¬åãH:8Å7r¹?Ø‚²Ñš‰6/ïúd¤£]E¬ûAÀRÐ-úàø’vè‰tç¤h™ÂÂB³ÙüÊ+¯hš6}úô{ï½·¤¤„ˆÝÔœó;ï¼³ªªê4†ï¨âLˆèøÕÎOF§QçÁ߉¨¥¥eÆ ªª^vÙe×\sÛí±”Ÿj8”4ãKiÇw ŠN,H 6,Â't’kF†–É[Oê|<-¹h9µG0`à‰B!I;ÑrŸ2eÊÝwß}zíýÑ~tú=“ª”‘‘ñàƒŠ»/œ ¦ ¬z²3¡O’N9f IDATÎÌ)a™=0CÎLˆûTviL•]Ç#‡xa/¹d#«ûðPï2l0ú\Z÷>ŸÛÑ2É›xú>ŒU ª“NÜEZà/.=ðôp£Õ¥h(çD‚ü14n¹sLÄúSœƒ%H?À…¸ Á„³Ü¹ŽÓ¯Ä!î@0¡ÄÀûܹ…‚‰´Dn1M$‚ f¹óáå–I~ËBÜÀ8q±DÒ-|î@0ÑÄ}qî: Rþ ÁIJ܇³CU¸e`Bi;çH˜7FÿÂ,¨rÎ@,3›ÍV«•Hlöâ4ŒÙ,ù;ÖǸkš¶víÚ£Gêºn6›gÍš5wî\›Í&z‰@p¦ ‹lEŸï¢ g±T§/„[†1VWWçp8¬VëÞyçÛo¿}É’%#3Á$0ãdnÌv— býy  é$ò@Ð!ó1ÊK#˜œDa:†Œ¸á°~!X‘燣¿cwÀÏ^à‡½]ä±ðH1>IAÏhÔHALALã LšOÍx°Üá$c”ôô #÷X,öü£¾¾žˆJKKçÏŸŸžžÞÝÝýöÛo×ÕÕY­Ö‹.º¨¼¼\×õúúú¶¶6ÎùîÝ»m6ÛÒ¥KóòòˆÈçómÚ´éÀyyyÙÙÙv»½¢¢Âf³}ÿûßw¹\jkkúÓŸ¾ÿþû#w ,Þ‡(‹Aâ.A—¡I`2t Ša­p1'p³.Ä]0 Áé%WJ#07"σ÷Ð!ÉæƒjPQ‚OÊq0 ˪lB®]í”Ö‚ì ù6FܼœIÐMˆ„àˆÂ4i-÷aúÜ Èù;røßÿýß'žx‚sND--->Ÿï±Ç{öÙg5M;tèÐ~ðƒ}ûö麾}ûö{ï½wãÆº®¿õÖ[?üp ˆD"k×®ýãÿ …öîÝ»zõêgŸ}¶§§‡ˆÜnw(êììŸOUÕK/½´¼¼|Ö¬Y?øÁV­Ze2™Ö¬Y³bÅŠ«¯¾:<øàƒÇŽÓ´þü´«W¯Þ°aC4]²dÉ\0bAŒÿ±÷Nâ€dpïä YȺ )½ÉŠ¡.xO˜éZŠÿ¾åv ñCÔKn J6ŽY¶ð¶Tê>ŒüJì…SÈ<¨?’DœOÚ$©Ã …4@ÜGn¹/\¸ð¹çžûáøÒK/ƒA›ÍvðàÁÔÔÔéÓ§§¥¥åææ.Y²dûöíñƒ‹‹‹§OŸÿ×p8 ;;;[[[/^œžž^XX8}útçÓ ¨ßúÖ·þð‡?|ë[ßúè£6mÚ4ÔD€pü‡&b P`|à €³¦aŸ à p ÂñY£þ>¸’dZÆdè1¨gn ‰b@ˆB„’^ÿ€ô?\g–ûÕW_]QQñú믿ð ùË_þíßþMÓ4Y–%©ÿ>™Íæh4Úߌ¢¨ª @–eŒ1Î9ç<~0 ¾+Nfffff¦×ëÝ¿ÿ¶mÛ®¸âŠù˜èÈA>ü,|j‚Ñr„r;¹÷*Z78kìÿ/nrÆHJ†ôÄlðÇ †¹åÌ«úÐ=ÄN 8¹mž`ÆM§ÚÄÄ‹ë$ɲ<4"<þO$I:A9“#î~¿¿´´tÚ´iW]uÕï~÷»]»vUUU½úê«yyy±XìwÞ©®®îÿö'¹FÒÒÒ²²²Þx㌌Œ@ ðñǃA‘H$‰˜Íf½½½}}}©©©ñ!0‹ó2ˆåDÀ(³]úUt$…w ÀÄ£ Šñþ5ÏÙìŽ^Ùð1Èî<£¡_ çsŽÓzìŨÏîø Êùçß¡‰D^ýõÚÚÚ¾¾¾ŒŒŒ TTT˜L¦¸*nß¾}×®]º®Ïš5ëÒK/M¾¸ÿ×ý—ÙlÎÊÊ:zôhWW×\pÎ9ç¼öÚkþóŸ>ÜÚÚZSSóðÃÇMx«Õ:¨ò.—K–e§Óyã7þíokjj |ðAuu5ÕÖÖ¾üòË………víÚÕÞÞ~íµ×ÆÏjÔ®¯ ØÍ%HžÉ*Ç«žêtÈXÜ6ï#W#Ï[@[ºwÂO`HÉ@{€lö@õiæÀÈš6!XˆZ/ZâÚiB8ç\z w>ŒôNãkÓ¯ýëÇ|þüù‘H$55õ{ßû^JJÊ}÷Ý·cÇŽòòò={ö”——?þøã‘Hä±Çûç?ÿY\\LD»víúö·¿}ë­·2Æ~ùË_®]»¶ºº:îß¿ÿšk®¹ãŽ;RSS[ZZ~ýë_ßwß}O>ù䈿ž©ïó¯Ä÷RK >èA:K¶TéPŽ!—A"@F, M.ôt"#éæO'29 ±4³Ã—tû€(,!nÓI!ÎSx§½½ð&ݨCîBºÎ‰˜ûlðëPô±ÈÕeˆeÖGžW² ä@ŸFjÒ'ˆ”L‹ÿGU[ކ]¿«›cŸÎin+ßµjÚN , ›VïûÒ‹G¦žíiÕ¸üëÚsvöÛWçí9Hù×ÿå“wUlYJ™0ìu|N¿F±YØØŽ¼3ä–áN(ä¸ZP}ñÅï¹çžk®¹Æfë7!×®]ÛØØøðÃÏ›7¯««kÉ’%Ï=÷ܲeË"‘Hiiéƒ>XPPð׿þuíÚµ+W®looöÙgûÛß^tÑEõõõwß}w, ï¿ÿþ¯}íkeee£vv€D,Gýð„¹ÝQõr®Cá 2àN1H„þÜL ²Î)ŸsppP ªŠ¨.Â-ý-rI#Uá1ÃÄ÷ÔÁ+¤Aá$®Cp©‘Jµ=¤+'äsÈQÆ) «a&[¤˜M‰IÄ÷õ¦)’þåôFRLÁ WÇ®®ì€fr(‘Ñ<þRpLA´œ± ¡ëñGâ~ÁlذÁï÷WTTL™2åàÁƒEEEDäõz.\øÞ{ï-[¶Ìb±TVV(++ëëëÓu½¦¦Æd2þùJJJ¦M›&Ë2€õë××ÕÕýë¿þkwww$ …B@`pü:€æ!ëÀÀsz]°Âç@Ï1Æ KÒmAPEÄ‚°=§!ö!¸Š¨ " ¢~x 5u%è*¢2š‰O†® ª“̸<Ñ…,~ƒ8A"÷‚Ï¢3j¡©üHÀýaOÖUùµy6ß'Ó±°=ËÜajkØÙ³vE-#÷žÌÒÐÜ‹´0¬Ÿ¡©]@dˆ w'Ûh"ޏ+Ë}ÕªUÏ?ÿüž={Þ~ûíÜÜÜÛn»1&I d@SU5î1—$)îIÿÎyÿyQü÷øÿão|饗ÒÓÓÿú׿öõõÕ××wwwoÙ²eÑ¢EͶÉCÄÝ˹ã4âNà´3H>¤2!u1× H`ܨV˜‚1Èñ‰‚A‹·t;ù„¸ ƒ JH`„d®á`˜ðë&D¬ sk ªÐîij7&7ÜÝQ«C‰J„ˆ.Ïp·U¸º­›}IÎÁ£ALJ=™.%ª±Ñv ùœènäÓ>ÃbDMCG“C8ÌÅR–ügyäâFo¾ùfMÓ¶oßþè£îÙ³'77wóæÍ­­­™™™½½½»wï¾üòϬSZZªëúÛo¿½xñâƒÖÖÖVVV¸úê«[ZZ8ç±XLQUUM&}š2³œó³†\}§µÇUD]èÀ†Ý¸ž€+—‚XŽ9Ñ‚5ée%8( kVZ*ÚmðG`Ñ Ð Ì¿Ìu\ ²AÊNàM‡`_öh ”Ý„[ÂÉ^垬äY{6ã núÃÁ™¯´”Ìp·žÒzwåÖçT¼Óžo–´©ÎÎÞ¨Ù¡FGùܤ⨓)üÔ’-s>uÐoB¤:p(¹îpuãkAõþûï÷z½n·»±±Ñb±͘1cçοÿýï§M›vðàA«ÕºlÙ²Ïz{QQÑW\ñÛßþöå—_–$©­­­ººšˆ®¼òÊøÍÍÍõõõ¥¥¥‹/>ÎÇð‡VzÌu!;Æ WYƒ¢"–t[wè2ÈñÈ#jÄ•]$G̰UA¬˜)âvã‚GÇRÙä‹rs.*ÖÏR‰O=mr4Óâ09¤+æ¦6Wº::£–®>¼^†+b îÖDÝhïEZôÔ>™Î8øÅ¸FdIúÙ‚ ÃØãÉœG.î‹-úä“O¢ÑhiiiuuuUU•ªªßýîw·mÛÖÓÓ3uêÔo~ó›EEEápøÒK/ûÓÞyçv»Ýb±Üzë­Û·oïééIKKëèèp:&Ó§ìñxn¸áÇ3÷‚:?÷ôÔ™QÖ¡pHf„,úáNz[æFo*ƒdBÔŠ`ö¤ûÜ ÜŠ€¡(¬Ä¹2¬6SÐÎýná ¢ ’e‚Ê¢JQú8HƒbB”9ò'Éø4ÓG=™Û:ò†œ;ºrÒdIUƒþ¤:Ëâ÷šCÍAçKMSs­¾<›À¦cEŠÄdb[‹[‚ޝWmUiT«ÓNt©ˆô ];ƒz8è -±üœ¯¸â ŸÏ§išÙl¶ÛíqÏÉôéÓKJJB¡Åb±Ûí,ˬY³ß•––¶lÙ²xü{sssNNδiÓvîÜÙÕÕUZZïw–Ùl‹-"ù3/Cc¤t /lXè1T³“ŸÀ¤>¤`H_ ºA œƒpàdˆ;qH24 t:d#Ä]æºN’Ä™!:«>13aHœÅ#¦Ìà°qÒÕš¾ŒÆ »ÜÙå™¶µçÎò¶¥¨!I/5Oõk&“¤Ïð»,·>Ûêб¿qlJHWs¬¾ïO{wfÊÑQNeÒºàî3i:pÎq&¾ÀÈŸ(I’ÜîS«µÙlC‚[@Dƒ«©ñw šçMMM?þxwwwJJÊUW]µ`ÁI’†¾QUGåSÖ`:ʧpHÆ=lL}”2éE:$nÀÚ ƒÔ‹O[a˜1­á ñöôH„`sÛÐV&®7# óЕpˆMªý¤šBËóö^ž³ðò¤šÃ~mÁÞKsê5&És(Q‡•‰¸4»þü´Fd“cSXš<» YgÜnˆGœþ¢ñä–í|VU/»ì²%K–Äcl,Ë(¥ü”ó!ÍàÅ:Ò!AŒöØ´26Q+lÉß@œJ\ˆÒiîR#.52ü×GñÔLàĈ|"jõrÎcƒ¯ŸÆ·q&OÞd2 u²  ÎǼ{÷îšššÙ³g_{íµñƒÁ૯¾úꫯvttddd|ãߘ9sæPé?ι".¢@ Œ7³ý‰'žxï½÷6oÞüÖ[o ¾þâ‹/®^½:++ë†nPåºë®;räÈx´Ü@p2DôÐCÑõ×_?ôõÝpà ÅÅÅ‹-úÛßþV[[[XX(Ä] Æž‘d;¥3½²²²¡¡açÎÝÝÝuuu%%%Âr‚3¢ì'‹{˜h'Ð9ðg Ø=œÏš9sæúõë׬Y3eÊ”-[¶\zé¥ÅÅÅBÜ`ì9e…lÈø4ˆ–'Ž1¶}ûvÆØå—_^XXXYYùüóÏôÑG3gÎâ.c,í 8¹Z‡Äùì!;›ÂDí@ãé?* mÛ¶-##ãŠ+®HOO_°`ÁÿøÇ-[¶q‚qb¹ŸÀ°Š¨*Šb2™ÚÛÛC¡ŸÏ×ÝÝ=tǨw@ #üT–û h'‹ûo~ó›Í›7¿÷Þ{ªª=ztÙ²e_ÿú×—.]zÿý÷ß~ûíS¦LÙ½{÷”)S¾úÕ¯Nqçcq;ŒÏÁ'e7|ž‹5iú8ˆ\è\qI↟Jò?3¡UÎNn÷’K.9ûì³u] ªjnn.-Z´¨¬¬ìý÷ßooo¿ä’KÎ?ÿüS怙 ânY Þ{e%8~òQNÁáàeÇ /#ܨ*gfh·©ÆŸ‰è3þŒh 6*6ø²ÿëÀâ KØÐVtWÝñn1ðttÆî=_róI°a<槈¨©¨¨¨¨¨8Q¯¥°°ð³Û'¸¸“ Ühq7qî1þLüàíCê{¥!GÇDÜuCª@žâƒÄÌwãðÉžú¦Þ—Uï+‡Á%¨¬vß+ÿøkjV§qMhQüó‚ÿ2=¹–»ebFØyÂç.ÆÎ:†q@ò‡y!î@`ÜDñaˆ; q‚ tAUˆ»@ ŒoÛ]¸e`ÒÁz"³\–»@ L8Ë=a´Œ.¢e`‚‰û0T5á–‚ &îÃpˈU@ ˜`0@O”™á ³ ZWWâ¿Ûl¶ÜÜ\‡Ã!úˆ@ ˜xv;8 ó™—Ø%Îý¦›nêìì,((P^^~Ûm·MŸ>Ü Á˜ŠŠ‡„‹$* 0úL2(x4˜Fó %è*B& £C@àVôZÐ'CÓ¡„à ÃÁ“‘)A"næiˆçNƒ……†À àÌømë“•¢*ÓÀœšƒb°ÄF×»Î,̰$f Ë<€)³6 !âœB~¥¯Ç *iÙA»+6øO}ݦö[4*y3ÂiÙ¡¡IÇbQ©«ÍB„ÔŒ°¢š‚ñÄÂ=΢e8çµµµÍÍÍŒ±´´´ÒÒR·Û‰D8ÐÜܬ(JEEENN€ŽŽŽîîn"jll”e¹ªªÊëõQ4ìr¹¼^¯¢(YYY‹À7¾ñï~÷»$I2™>Ç£âÆ±lÔ[Ñ«C©Å¢¬ñ/ëÅ‘|ì•¡¬9‡Q= }çN´åÓNã@ ¿¤Y$hyôA*%è´R?áçö"‡:]¢–I‡ÍÅ3‚½ÈháÅ1˜“Û$0š&AÀ"ô=!vôx©EòÄZPÒɳ'èéÈÐ%h‡a3¨•4´:Ð-n¦t#]ƒsÄŸÖ×eÚ²!çHƒ³f—gå]ûæ,l‹¿ÞÑj}ýïùöz8‡Åª]õJ*{ǃ{=ÿû§â´ÌÈ•ß8–2t°Å¥¯h™={ö¬^½:%%E–å´´4UU§M›öÊ+¯¼òÊ+&“IÓ4EQî¼ó΢¢¢;w®]»¶¬¬Ìï÷777WUUÝqÇ&“iûöíO>ù¤Ýnw8@ ==ýßøF~~>€ƒ¾úê«©©©•••éé韧wÆb0™ xqDˆ@² P†í!¸?Át':K°3O+ÊFqÃô¸µîA³ ÁÁ—ûه̬N´MŦY܃e´C?¨éq±ÂçFG7вæ :MÊ´ÄÉ&ÂíÝ”%˜m´kÙl8@ȉ£÷Fމ‡$ðNdÆç‘Ñ= šF(( <ýHIû k¿%¬I゙õî¦Ì%W6åþöûò§_öÿ}/n wµYvlÊ|ÿ­ŒÒªÞpH6ü’r–ÈÀg>÷—_~¹··÷î»ïVU5§§§744<ýôÓÕÕÕË–- ‡Ã?ýéOÿô§?ýô§?mooß³gÏ…^8wîÜÚÚÚŸýìg×]w×ëýóŸÿl·Û¿ùÍo†B¡ÿüÏÿlmmW)++3›Í;vìhmmÍËË»ùæ›‹ŠŠ>í{§¥]ÈËÃ^/o¼ ´Záß/w!§ø$õÇP6Rõ¢äõò¼"ÚfGÇû£´òiñßýHË£ÌJÉ—zŸÆfàpŒ,}HÕ p©1H & ºjxºÊIBö·PHó¢Åž‰{::¢†Š;ŒK:9 ó(ý?ÞÌÈWoƒ¢öO =IDAT8.?üÿ*‹ øzL{ßO),÷-ZÖâpGü}¦¾3ËßcvxÂшüÁÖ4_:㜮hd Š0@K$\:(ùâ>òËZPPpøðá 6:t(333++«¶¶ÀÅ_|ÖYgÍ™3窫®Ú¸qc,P^^¾xñâŠŠŠ¥K—jšÖÞÞ‡wíÚuå•WVWWŸsÎ9óçÏ÷xúŸŠU«V}ï{ß»ùæ›—.]º{÷î—_~™óÁkà ,î¤aç·£'s6€d?Rè¦ÑÉ.ÿŒNëAóTÚt½,AoEÅèÍöãç%Q:ðáÂ:®0!äA{'ru.|Y I¥h&ɧÙ8lFxÔxâãØÛ­vw˜2²Ãvg @iU_( =b§¦ƒÎÝ[Òª¿Ô™[è'\".—‰Ë€d@Í>®ýô?ãÉç¾téR]×÷ìÙóÇ?þÑb±ÜvÛm@ÀjµZ­ý3£ììlŸÏ§i›Í¯õg±X$IŠF£Œ±P(t"r8fs¿¹ºº:þ‹ÛíÞ¶mÛþýûã=Ð@ýÀ âyç ß±~š“Œê}ßT™Çˆ’5 \E؉¶4IÐtnJîš§|6ø:ItÊ‚1&G9¨ ÙâR$|JŽñ\ YdCÀ‹Vår“»~«Ee¦É&³N`sèx Oñõš¶¼’íJ‰ÎYÐv`G‹ÒKO…%¹?6é8°'é%G&`nÇsÍ5×|å+_ijjúÓŸþ´iÓ¦™3göôôø|¾øûöíKKK‹K67$ªªš‘‘±oß¾Ù³g3ÆŽ9ÒÕÕu’7M …B6›MQ¾'ŸÅQ=dÂaÆ0u(Ò@ :#…PŽAêF¾Ÿ§›á¯¢—óiW/Ï%ÉÊ&0zÌÇS¹¨i7®ä < Ÿt";šì%îIIý‘ÍaØ-ÚЧ"=’Ü9®ÂHâš·Äy4L`’jÖÖºÞùgæ ß;ÐÖbëj7‡‚ji•gÚ¬¨jb´Þ\§¿ÿ¤»e&š¸?ùä“éééåååmmmEEEsæÌY³fÍc=&IRww÷ÿ÷¯ZµJ’Nã*o·Û—-[öÐCù|¾ÞÞÞçŸ>ûØÐаqãÆsÏ=W’¤^xáƒ>XµjÕ§3äÏø¼Þ¤\&„ânD³¢7”¤ Å“s & ¦0œ~¤»Ñ¢ „$‰»a:‚p&²WwRâ z÷ñybÐýœ²G:d#j4:Ü1‡;ÚÝnŽ„d³•i°ôÜÂÈÇï¹›\ÿk5ëj³Fò¿W½ï‰mYùZoÒea„²Ï¤¸;ÎG}´©©)55õꫯ¾ñÆ=Ïý÷ßÿÈ#Ü~ûí‹åž{îY¹r%Ξ=[Uû«p-Y²ÄëõÆ=9™™™›6m*..¾ð Ãá°¢(f³ùÝwß}ì±Ç4M«ªªºï¾û.¼ðÂÏ1bC7# ""C·  CÁ܉\ jöÅ`±¡×‹¦Z,Ís(C‹Ç¹+ˆ™á· /§æFs)ÙÑ™ŠÃ>dÆ’Of…ß_¦êFF(†9@àB­†qÅ‹ú^¤2ñφÓ@ 0€’ÞÜ…î ìÙásQWOÍÎÎÉ×kŠEML‡¿ÏÔÓaµ:¢ÞŒHåìž·_ÎúxGjñ´¾uOM™·¸Ã“<iàüú—âo|âUŸÔºnýñÇ9S^ÐáYî|\‰ûòåË—/_~‹………¿øÅ/NxqáÂ… .üóW¿úÎ9çü¼óÎ[²d‰Ïç{ä‘GrrrRRRRRRþð‡?ŒÜY„ÖxUFL"m&þц☆³_šŠ­©h1#p ¥GQ>š«–‚#U´Á…V‘³é…¼[ùÍ6Öh0kP­è ­ŸEï ƒ–…a8z‘f\G”ÀTD%è™æ ¬Ìø Ë š}G0uœ‹ ]ETã BRÖ¤¯MåÒ'à\’¡÷qw'²F×Éÿõ³ªº={éÏS¶¿–qÍ­ν°õË—´4Ö9žøy¥$³X”þïêN˜¸S#iY!ƒw0Å‹u §@ö$Ê-ÃÛ¿ÿ#<’žžÞÖÖFD]tÑ`À̈¯d/2vâŠ!³S6­(ëA¦QØz‘1ÊÛ=È}Ÿ_;æÈ9É1XzƒÇEÇ ÃåCzCeäNätñìäº&OjEŠÁ„Á¥fNÂr†i&ÕâÜl“`_€™“åS¡áÉ:à ý¼Ú„ˆDLãj£ :0[ô¯¿6ê—2Yæo@FnðÖŸì=\ç úå’i~Wê‰+¥-oÔ¢’+%jüdhY!ù$J? Ëreeå­·ÞzôèQ»Ý^UU•››{¢ë®£ÕªÒõÁ•¬µM &ÿP zà ÃæNcQ>‹u ’ؽôy¯X;&ËHŒ~*:””du3Iâ9§ÞbjµÅ*Îîú¬7º<ѱé ü ˜ÏÝn·éK_ê ˜ö»@pÊŽwËœvÈ$QfO &œ¼S"qeö`¢Á†áOgDÂr‚‰d¸'ZF”Ù‚‰}ñB!à  íŒ0Â|îƒ GF(ö§q 3+ä‰n™úúú›nºiúôé—\rÉsÏ=O¯+Ä] Æ‹é>Æ~úŸãÜ2~¿ÿûßÿ¾¢(ÿûß—/_þðÃoÙ²åó¶<ÑÜ2cN,öd~Ñ{€@<Oéxbœûûï¿ðàÁ_þò—S§Nu»Ý;vìxíµ×-Zô¹ü3ÎçÞ6rÂA€Jp"A  ˆÜ çhÁ5dÆ 46Ø»—ɲÓÍPH?Öz„Ðl¸ýÀ»]ÜЂGýSsÙx{Å ÎyðP}¤§ÛÀ+¦ÅÐÖ’ô¢!±DÇè@/`ü»¾¾>----- €ÍfËÏϯ««‹F£ƒE/&›¸«ªb±¼Aô¡ÁUTã-Dˆ/ˆœsÿØÔcPsõ¹çÞ~Û>ê§½+:ol ZmÑG€ˆÑ݌Ǔ{ŽL¤Ý$kOýºS5hq†¶='Åœ¬>&˲ÅÒÆÍï$º8è³Xf¶ëóùìv{<_º,Ëv»=G"‘É)îwÜqGGG‡¡Ï¶@ ø‚“——çõz“òQ+W®\°`Á0%«°°ÐåêO~e2™b±X> /Resources 2 0 R >> stream xœÄ½Ë®-?Ò'4ϧØ/P‡´Ó·œ2ABbSÄ-º¡}ý1àõÉß%l¯½W} R×_¥³#V¦Ó‡Ãqsø?é ÿýÛúúoþ×óë?ýŸÇù…ÿþ§ÿ.àüç¬WïéëÿzýïŸÿÿÇÿü¿|ίÿí(_ÿÃ×~ÞÆÿÀ?WêÊ8óh_¯¿Çý§•ñ•ÿ´\¿þ~•ûþ3&üýUÏëO¿®gû3ž¯Ô?½Ž ©…ã5y”?m¾˜ñ§ö²š»ÓŸ~öõ9ï¯èßþVÀêG4>÷2ìþ|G§ÕY5³= ¿__ÿûü·_ÿ£é»èž~ÖÜ¿®g3zùB—þÜåV?ŸùZ\øLä#n~råë#çw+?#ãâY…,øŒàÎ;¢zðéá ýªRoD$,¯.i³ïÚÙÓú§5"(R{&¿n`y¸ú0ü"\2èl˜ï§D¸fý<’^èÏ‚¨jâÆ2{†‘É’éÏ9·6gqäÄœž'ŸŒÒ1¦.Qú (B!Å»hñų‹×*?Ð( ¬Ž„¨€¥P<ÂoàÉ>M¦ÜªVóÅGE¹/€y˜ô×>“w&~"0ÏšÁ²Âû× º\ZøF­ä™‹kèæ²¤ÉÓB .lxâä,F}†žÚöHÿÓº¹Ëï¡ejâý+åÖêFj—]f™76Ô7ðÙ]¢öèÈóÎ]Õ["¤Ô‹=½5ôVJpQ–¥ˆÏôü]’f(2š¡QëÄ®wq ]3ßhE3ô0ÿp/0ÿXU‹0gÑóLy[„?‡öiCù°Póå®Äž˜Û~'¶ÄÜ5:Â9cA`,‡§ù¦TÅ$R„=ðU5ï&~&ñ.~˜C£ßZx6Ÿ»Ï`\Þ'¢`Ϻz(±tÌÆó ïzâ{b–ü66ÿN˜ï­•Êð(˜¾I¼ë®†½é¥Mz+.Ú'”Ïî™ç*x0Ñ(æƒ{Ää‚Qâ±pa¨]Í åx|ƒK ûÿkë„Våê¤Æ¶Æ!xÑðÔG}åzvô¢ä†…®GáËñèzÙ%ùy5ª"W±"áGžVš;·½4¬ô¤nE÷³¥‚G{`.f N ÞþçnÀõlïW!¦çFø¢ŽÚ© «Ø&Æ|†3ÀÃFá»Ü1¾ù§õ > ÌÔ"já—Ï«ÆêWß Ù€¹¡=°w ®võiè/‰1`†ž(ÃÛ(ÿyr°³ì+ýº­Ò‡—g“k•ëä¾Hçò臭­GŽ\aü&ŒXK©XöþDHŽ'µ’¼ÿ$N“¾-¦˜kpûZ¯f[¤ÓúÖû ?Ò¡T¶·èPžéM»Pªvõ®&ªn5t¦I‡Œ/ÕóR߇=¸†6ÄÛ‡?ö­b«Î[ßj·ØŸŸéVÎ$ë#ó=r}VÈYßr•"1ò\–@žð”'ÆL<[°@öG6<{a‰ìN!q×0¦L®1Zße²1‹^&Æñ ³Q#Z™2yb¦L® ûØQDLKL.Þ±Õ{éS&?4z„P®’*S&opÐpa(“W Êó#S&ÏNX&ÏNZ&¯qL¡ücøYª=¶EíSk~HÔBß曘t§ô ÷¾ÒžGî¶3bƒu°Köì!iç÷ç‰q¿™M?ú‚gY8´—?³ËÞ+ñÂà™Ë² ‚,Ú¯ý‹ºN>Ëu««Wjpk 1íÿžmƒ.û¢ U0½ÖÚ'D¦Sbo&0³™E/wïâßã¤Ñ*Î}FôÀÕÚÃC`€¥ØäΉðuZѬæ–Öú³·–^ùÔç÷{®'À/bÊUÞžHgVf{ó0ò‹qÜÅÆWé® ø!_ŽW`6J4©Ú?KGˆ6¦±0~ôL.Û‰à=Ô„Ü3ŠlS\¶ß”6©§Í®G XOûä!•]:6`@ݼlqÎŽü(•Ö§£Ú×ÎùÊFˆúÍÚ3TÍïes>Ý~cÍøgž•Azªaã X_¹ÜÏDNE{/$ Æ>²Y/Q1<†ô6òÕ/Ê» Á]ï×nù%~CVÕùG^¾!G’Œï›p1Œù·+ƒà‰QìÚñ塾MX¬š.ÃÞ›¦ô(dPÚæÆw1RžûúšüʰUJ}ý$&8k<ö…%D8è+ÌbO·ó ÞJ>ö¦™å©ð‰Ë.%j‹nµ§@n¨§+!/R7Á´;VÏêi­ÑŽgÊX~‘)?Ù"î¢Ê9 æJôæC—ÂH¶)å'˜`¢Ø}MÌAÒGüèç(Hü¥^d«ÕèF–öÀÝœ’lÃwê Áû¬\sV&ɹfŒvyèÐC;¯¼æÛÎE÷ýá !áˆuÍ©nöÐLDzÑGlÇc¡´¯õ{ž=Õ”=Ú²‡Säð`Ý º4rÜ)ü“‚›¿QåÓ˜˜§ÿC»&.Y6u-.)îeö£_†c¸£§mUË‘‡*ÔGBv]S áUþô¾=P-ªÂKø †?Z¼¾}^ò¦¯µ.0–úõs|ôÞÙË«ð³ÏZº—µ-`1T¡Ž ¸ÝË,€°zP÷°ÁÛ±„žWÏMPßE»ñë]-ìCP?¹tŠÝsKeºD8¼o\ͲC›;ƨ%ž^Œ\~#ðŽõRb†š˜ýôïV0—ýø÷:vDá¢8\ìT2I*ë—¬àUíy¢*{kb¦ËýSI~qŠl/Èm_öÊžxÀðpà_½³z£Š<`—Öê!Äe}/^f£fbàáb‘÷X¨‹?‡«F#Oææ90ÉOhà‰~‰cü´û~üô&¶žHÓ±Gp¶`CaÀ3¬‘sß¼9âù;aÌfAçb)G³•ˆcÆ"€¹«”ZqÞéÁé…™ š!FÙ¢QlïÌ[˜ô-oGÿÖ™–Z@øãÎ^·eÒ3{,Ò_¸ßêå… ÉâãùñIÆØ^6ŒE,D„àF9ó%btÇo±8ô/íçŠEpíå+‚ÜéÓ Fp“6ÐÓÏMôì RÁŒ¤=ö¾ô¾R™×÷W#¸Ì‡}&a ÷=±0Fèy³Î(Z_K–™¨ÅÍhÇçà—î²”vþ¾w¥m•-q+"7£÷€Rr¬h}t¶ 9§ÝšŸ‚œÁcޏÃ'â`>Ñö`Ľtý©–Ió+rçŠN¼âëëØ&_Š ¼Þ¤wúEj…"“Å~öÆ…úB;—ÿ¯”¨æ¨_rÄðòf 7Ô× EmXÁ—Ý+Ò8" ÒaH÷þöÀy®P„xãÜcœÉps;%÷˜C€óŠ8~Ží“™¢½´†PúKZ¿I)Ú½á,¦]}¡ 3ï:Ÿ©Ím ýí®MûJ§9(IyF@ÝÊó5©¡hEûãDŒg°4Õ2ôåÚ#èÿ[˜øÇ?!Uû‰.Fˆ*064¯Ó›ˆŒ¸a°ˆHj½`ƒ¥bÌ¢Äk-L¢8ÝšH̘yØKŒ6»qÊŽ^žŠxG ðF3‘ã‘æ%-4óÙúFcDø˜½èZsêä×(&BÃl(‹ ÇúBjõ!ˆ}\ÄÞgƒÄ Tµ‚Êf·x:ºQ½ÛÒ&IÃAaãldL*ÄPsÏo¸fD¢%o‹¸mÿÂÉ`ôköABöž}œb:ægÉé+Ù'1yºk‹š¸æ‘Û`ëÇe=#:ðI`b¨³ S">´Šn,jV–ƒÚ“Óê?ßñó5ç‘k*/™Œ&_SÉ…VØZN1 àþœ^1 ¼øéQx@¹Ã)vå<í8=‘CRÃ%vŽ7ä»rš1aw¬=XN±†W ldÔ0ù¤?üb‰ºÙÊuFŽ1`¦ê—Øõ|JÆbêrVtuúÅ€‰¬øÅH{iz€å‰™›iŽtÛ[œ¹ßVÍH?X÷+ÓñUDrqŠ-ZÎqµ6IçÅû¬”¶¹xoPN8£ÙéY: sqcfX“›4¼N»I&™»E <ÜžGê®”£•z¥}¿˜_’ëd}{{Iþ…Xý}Fù¬×ò¬›¯ßüó\C(ëîØþ r S©ÉàNˆtÃËÞ"oQ"È ¤nöHù1¡ã’Ùùš„v `o˜¡W:ãxóC†fœ1êûë±EG2&]ƒ.··@}måN}ÏgÔéÙ FôcøH=üE‘Ù‡•¦VoTFþ~¥  sÐ¥ŸË£Î<#{ð€×Ð|Ž“ÛMøù,x°©& mAxúdFfüzr¢íg]>Ý}Dþ³†z'‡?—Aoïƒ÷Dû`áo:$_q<øô÷‘¾Jx¶¶ö¬Lø²óÍçoþ0ä»ÿ¹­††×½Wè/ôz¸/ˆ˜ ¼m…C…"W÷ °öxµ«(utH °O ½äÛ~†\J[Ô,/·…Ç ÃºðV÷‹à­ß¡´¤ZK«£k0`_D€¦GA€7`õ>ˆÇ¸KÓn@~ `¦í¬Þu5Rìíó]ÀãâÏÐ( Š-ŠÐ?3Aš'#M6:ésBág`ôy¾ c!¯…Ô—Àà“ÁýÍ#cïayÜù½GHwhäÊgbÁVWe_AÃð™úÞ‡Y ð.+TR1ðä>² ‚ÁøºÈXÔ¯\šgm­µO[Aj'» ž°>€@¸AJûµãe©B&ñÇëÒdeCi±€±ÿ;àv³A=yþ>ÄüØ,ûÐBýÅßáSë²S“ãé¨ÞtººÒ!^D Ø—¾É‡\³ ÑèV€w9 1b.€!!Ž+ ¼YÏ#Ø”ÙiP(Mš ‡¿;­ ±ØàÎǯE¹¨¾Á×ïÐŒ†ÔÎÏÃa?ް#`ÈvRLš/$~<ãñm~?³€T „àŠX࢑cDjyN:Öú îÚž^DÀ 1Xë œK–œ¬ NˆÞÈoã뉫ƒa}ÀHÆâÏàƒ9I*«=ØøÈÎÉÿ)èEúƱ~†YŒÆÈÎ…¾¦çÓÒ•€€øCç ‡šœëˆ‰r|ÇJ]t`­’øI yé´rËàLOß$ìáÕù±Xå¯>·˜åéO…Ób$¿_ƒe9¦Öh^ :a‘¡7gŸ §IBÖ®±ÄD 3bcÚ1„\ë~üÔv 1ÇÎ K¹šÙèø½“M^DpžÕcŒê…Ñ-Ê#›«7G|8W7¥l Îdʱwƒ ÇÚØ›âI‚Ÿ®$ºfBkhòN"8ž‹WäÌÓ7xj¸†Y |€ÇÆ¢~€(×Xå¤ÇÛèxw?M޼9PöæWh ôVA ¸ôx¢ü Ðb(Ø*ŸYäÎ ö¿´sfì‘á»DVZe,yñÆ3ŸÌÀÔ3Ùsȉû°U—&¶eо(æ+Áœ8ˆãÔOºCÁÆUŠR?9×@<»@ÄAÇéUv3Îà‹¸Qη›në¡] Ü|øœöÏøÀàiŒÔäÚ⪺'ˆÞ$éUëð'ÁN¶†ÄÆžÍà™Ý:Û¹èÑ›.ƒŸm|VÏS+þ›ÃÇw\µ Œ`a=B +}÷E¤"‰ÿ¹ëÔÏ&&YÓ%N»âÐRA¬×3X¢CSÑ„ÀWÙÙ¢-Ëææ[kÝ øâ×Áp îî5¦´ò˜§À`so*'VY½(¸þû÷âïP ɹ×!‘#Ý06_Œ¬óëØ :Ó–Õ7èp šfÄ,N8KI»@ˆ¹_Št}’tH½+÷S.{’µN’mìÐ7|c¨/*V0Â6viÒÎàpD)<‹ìLæ>ãI€á ÈãVŠ6dkM¤Ô°{H@Y94mÈë'٠ǰ+Aè*¹À"-‰ªüA×DxùrV¹Z8´6”¶ùÓb9U)4su.qÓÏMuéRNæöÔÏØ¨Œ€Uõ³ò(dÏL‚øån†u!)uXL}–d,·I²N ´I²N^ž’¬Á31™üž» k<Ð1YåRA†ôµQ6Aö .©·d ¦ AÖå>^‚ìA #Á‚ìš) 2ƒ› [P¼ëdhìî› ë…AŽ)ÈÜ›d謶w ²^À A¦…=™’ɦ ëLÉÜ™ÖÖd BLA6Á)ÈŒ AÖ©MA֘;I²ÆÈPH2å† ëJs˜‚ìÉäóWø8Bu¥Û$Y—Ã5$YW¼4$ÙB[’¬çÁ–d]yS’u&Yõ‹©WSõ2E•¦¹È~£œÂ@$†,Çžq"6>¯ÔCŽ WßåX¥CØbŒ“~Kj6ÍÐˆÆ KŽÕ°˜ Ç2ü½ä>§’›ƒFd9†žJ ZŽu%bL1v# ë—&Mb¬Ëû¹ÄXW ÉrŒ4nä>Š1KŠ !Öåš)Ö™j1e˜:ÒÚb]9¸SŠU&Ûm’¬QI˜¿·©„I’5ºÄ6IÖ¹f§(ãÔOIö&¥> ²Á5–î‰hJbKw ¾‰€Éj,8bâg#m»rka(íê/=ðxñMçÔÊ&·ì÷ôôÌ'ØÌå™±í¥å Ó¹ÉB–¸]ˆ÷ï~ìšüMÆÇ_ïxÖ€XàM€HnwÙÔg Id1ôñYD+~Aá½ ˜\ èY¯MVàÁ¶æ€ú“Ü6ôœÖÝ´ÎAy) æÜ ‡º{̵a¼nwl k;¯é?x™#Tï1ˆ †aÍ‘^~Q{FþˆE¹oÙ'I¥I>§°MРû†@24‰nh_Ðñ.õ*Jër³hr‡gû;/‚°:°qâš\B†E}äkÌ*wI¼a èyÊ|ØГήTêbMtŸàpTeCÐ#Rk0òjù5dà6˜kî äq“ÿ"&¶ü*g¯Ayspшoùsh{ê„ñ7µûr’áÀw—çeå6‚.ìå3sÂgf°œy{ÞŠ>;”ù5̶ø…¿™é`/¨¢'hœWˆp'ˆõdP“ n<悯Ó/Ü¥¤Ÿ!†á@ÓçÈÜMBIéÙPºÒ-<÷c‰Vj8àØ*5U•zž_‡«íÝ£– #ûbýA°ˆ«¡&²ç­Þ†9Q÷Ň‘yCWv”  yv…þu,£Á®ž­MÓTí,òÊh"ØIl‡«8§Eó >œ6g®[ì?VíÇ]â±íÉ:‘ § Þ5â›Ö?…Ë\×Mžï‰øÙÈg`K!¿¶ò;]J†ß´õàcݾSi6ìßykDï@•XZ7«ó=æGîi¶Ïõļ·ñ±ï42jH[97 ?„øç]â"¬Œ“·0Ƹ›|=Pw!Q >VÏk¬¿gò*ù£„z ~±Ž¥.j8É«¯œ5:êeaƒ3‚¶”¹‹R«?‡P±í•Ë—í}¬d®²U?Pñºl°ÛfŸ%ò4‰dÍN./Î »~í4Ýhn}êuâôý•zÖ¶¹–qR76¤’~íJ(Tvã\qK‚ñm×HáV–¦k¤“û‘ñB>Ým2cDSì)Í.Ç./`ìLÉxmTX‹c"èÒëѯÔH“D=áv`SÖ Uz¢1 ìšâ@„¿U6?w¦$^²¶U:(K~[~°~ÎÞ%sPqwn1dbt†£©Ñ, I+vƒ9‡(×q2, ËV³µ%[ÑŒ–·½õ*5{„ݾÌáÔ¾åÄ„¨íZtÐ11]5ýä–¦Ã&XÚ! ¯E:èÛK7„2~×¥Â臺!,Í~OåpÖBFO#E§zƒµµ¥v1@¨‡°ÔVía»M;„éSbþ>¦rÉ¥´xFÚ!•ú2µC¹ §rØ‘_Ê!‹§d&l”ƒ!µ»+‡C¾­m ÚToø!–r ¯§©vqx“­CÉ0•CLM«S9±®k.)R×®Âfï}=P¹Ç†rØ«©iݰ+Ќ۪¡':TCÅK5„áZÛ®v»–§jÄ(S5ìS™¤j¸R `FUCá.ЪáBP5DÈí.K5óÜcÓ Û9¯©†IiÕÓŠHòÔ éT(K7¤bLÝ CŠi˜è´¡ÂÛ"}IÊa×aì¥â+oÊaW•—PñrMå¬u¶M9$óõ©b‚j›"jÈ©3Ø-÷’•Ã.5,”CÇì–r_+S9J[åÐà¦ÆV‡cBV‡t¿¥¥³Oå™}*‡o‹ö£„̹‚Oå,t Èw¸Ô¯ÑB^º¥ôe°+΂maŽ~É2Æ ÑdœÂaPÒª €ÿ²)Íüe Ÿ.×µƒtèm ¸q!2Už¡óKÃXÌC§Ê×bÌIiŠ?º¨ Àøĸ¯a<]¹ñMåös8H8~ ‹cRmô,t€ÞîUSˆKâI“œå£@Ô$a<9|Î/Ú· Ò’)+„8xÇŽu>Ô½âw)lPø MÌí§»lИJaØg[ËdcˆÌÙÜ—"¶bªï¯w&û¨~û„§é0îiйQiÞ•en¦Ã{#x¤sf–íð´Ê¤€©=Ž[vú²žw Ù.Ûὑ½¿•°dêùÚ\5-ϹwßI÷)¯oe`“p‘šRv0 œlš ·"ïõ›»©ˆœLÉãµ½Ác‚Œ ‚$dÿÎJ›è`Úƒü¼u´¸)ÙáEÜ è\œW;CP¢7´®a„M¾=ªìô`žLÖãOY¯ˆ×6Òn¤×ã°Ì$Ÿÿêkb Êk¿ãÆÀ—U=¢Ëኗ+O±! Wòâlpì‹9M …Óùx@4¥©‚X„Ò QÂs’M‚Œ}©T<­´¡7ð©.ïVŸ]¿Û¿Èì²['J eîyÖz€eˆ³]¥M…è‹_ x³(ÄÓ»šçü¤¼hJuxq¥ÀÊ GÞä}Ä”:‹ÆïÖ‘†‚IŠCŽsÒ¾uÔ‹ÊŠ{™D“5ógnÀ‰Ñ,=?ä â~€“†2óLæG3h’i·ì?ˆ¨wÞ¼=ïìòñL-Jª4²ocI”SIKáˆOÝ Î|JÏWPÞÀ rؘwL¨<_°iTUa<™î†M½ëq´ƒ)0ÖOi~Þ4«æ«¸6©7[CÐü¥ÞØ8ôyè"vp4í ðåZ›ûϰ™kcé±þŠÂ¾·ST/ e“Šà´íª Êg¶•Œ·‘³i•,„~S¬ßί ÄÌÈa jJ`¶„¥xËA;ò"Hƒ8 Í ÁaC”$»C礯‘C0ÿtÓúÇôgiGQ©ôpLOç0—y˜ G ‡<÷ ŽT½vDåÁÀSÛ9Èë·íâ­w<ž¸TXE³¥4wqîaÖ}ý—&·#Á(á‘ÿ÷Éí¨Ë•µ-=¢Uµp®Úd†'*aI(D†'.>P¡«)§*©‘º0Jí˜ÎŒu}öXyîèÖÌpGm3¼nÄóvmhž‚³3ßþÙv<–mèHj£ÚÿŸÊC‘OPþ ¨>è›aY³“ú Ð剸žˆ¢ÄÀg$~e"~6ò1ül÷Sb>²áOMƒ‡þ0ñï¡ô±l‰ §H+\¥As®òáÁP¤JRsÄüÑ;Æ •"ÐwhPa0ÌÅÑâUçd»afr@vú›Lu,Ñ÷¾FÎl¦ûо¿˜¦ÏØ-ÖÊÜcWDñýÓIãp÷¢wƒ‰%ª ƒ,m%¹AB!Iû¼”z± ÙˆÎ A¿ "=`ÃLMÌw­²Há‹xb”À…H½zkèC1ü>´O /«m1¼1Û{Á:Uq²Á]ЪJÜLäxÀªãÝg•·Ó8á…¨^ϑ퉰Ð9!¤1‘fý\ ‚¿‡25:•¸dš}vDë4`f¹ÕÎ-®Sã³j|ô½=Œ,76¤Œ‘‡S¥”YW}¡É›-Ž¡@Ÿ| Ó¿1Ã!ÆkÌ_ ¬ÃÞ ÄÏûj-1õhÉú92b bˆd (rHÝWrœ¹ Ê‹¿RÕ³°L‡’Ú@ùzGÞ1#žÙ_¦deQ¼øµ)BÞચ˜h·™ÚUYå î@ *¼3ffåÿü¬ÜiùwŠ•b¾™wÛôµ/¥"eÎVÆ&"—ŽØ"µ‘Ü{¬ŸMîÊ)%º¿"‹R91«à^23ŠIHʹc¡‚÷Þ\,ª É<ˆÄ€UËâû‹IÅ×/,ö~û4Âg?½Áì­³Õ¯*TùkX0·—È#*p €F«ã¤ûÞÐköBð÷S€|o/Hf åWåâòÀ!Ë"ÌÖC4YŠ`u³Ž°°T«&<‡¯c)>Œ˜ô ¿`MÀ¤×„OYãqZo ¿+E™ÉÚÙ2ØŠÌáUMf›·8i‚†|#¤\OàyÖ~ÿ˜µ,8AÈÞÖ'­&7ùiœDײÜÁCNó i³ 8fYí8ãù±8N/ü„Ñ•>«ßœ4ôíVFÕc¤49Œð.ëQaPJU3âXÅ=%ŠSñ ¢V­ÛÏí4”U¥kóÄ &AÉäÈÍÒ”P6Á‚¾¨@èü]Ó÷q~»’|cÿZ°ö«ö,òÖÞá{î_ˆžç6÷/„°[YûW“Ùï ‡+ÊÜ¡xbßÀZ£$[?·æ †¸ŽiC¼P{660øêÚÀZ÷É/m`cãÃ56°æ|Ì0¡¨›˜ÞÀš}ïÚ¢ÐýëZÎjHºð×ÊU\ÛÖTaÎÄ–;v0±ƒ Œ ïµ;Z•¤Ö†Éhsí¯ÉOáÜ¿ óþ»‘70G‚æÖ”¬ aãGn7îyÉ!SÖùëÚÁð¡m[X“@;Èm’ÉŒŒh‹â¶ìhuž)¸8X8`¼·þ™;®È¢äm.ÃòGiàØÁpóðÉ_Ýÿ´\ºü…]eiÿ~òÁÜ~ÃÃuž SP\¹jsUX™ìí33ŒŒLztç¾Üt1›@'$ ïçT;ä]eñUæñ“i¨ ÛCùÙ˜í‚nÐ馯 Oy9úOyyø…%@ÝÀ wr%u ‘TÇBŽ)A}fÀ´ŸÑt–“´-yú ?BHÔžâœ$NrõÊ’LžB!²ÿ‹“xK"½MññÉÖU*‚ØÜ0O˜gVüý ^\áR?N'<”¸Í÷œBÜŠ â¦j?èL–êì\ Òrˆùî÷’RÈáÍSjuíÔLžv.9ꥈ¼ðkÖñX‹ý !µ€Aÿ×khíˆ÷$¤¢ÕR}îO\iêOLiÙ§ôxÅ`âg 4¸Ad°Ðz‘Æ9‰w«äÝûd±LâPïÿN¸kwR§ t•ÊR׆àwýê-çåŒ:PŸ½uðH}¢Ü(yvùvÖv hþêåYƒ³á#HåïN²²OoDþ¸†”!Œ€Â54$ßOXU s[ªÔé¿ã°ö‚ÝÞöüÖþ¿VÇYB»1TëÓŠÎ~ãœþfDów¨ŽŸˆ¹Ä+ìù,«ÁUyC«tð\žà?óCŒ.»BPŠªýãä>öoÿáÃó÷'¡)ÿý Xg*¿¿n †7¨Õ/WËJȼuÁ½AtÝ*µ>”Å€›Nk#ÛA¸ÕaÄ(z€Ç}†ê_Ô­ w®!ðúr¼zúrŸ±âŸ}}ˆÇ¯@`+yd.Þ Fn€|¼PŸû Íĺu¨ŠÇ$VºuÈ€GQ‡1nÒE”¡R«d1× Ä~Ž“ª·*ŠÃÑh/ú±Ÿ>üuÆeÐ#Çé„dº X•ÜŸ "{‰Z†Ž5c:¬u¨CÇ ¢†ƒ»o+ÑY#‚ÁŒ;…#ZŽ˜\z1â’¤M×)yW´¡x‘•¥Æ³ ÊvŠW¡Ré·6¢ Ùû ˜§ïpîïæ²Çbb«Y¦>¼k-éôÍ¿°—ßÊø< šÜóW& =ZgÊa6“Çhr”¡š4Ã˯{Kgž6Ä­cYë×êÚmRš64-.ÐI^ß!úÉmôÈÓ7Æþ˜jvžÑÁ‡ïïØœÈ*uü8ÖkE¸÷Vµ3Äzå…ÿoA¦’a%Qܳ„ùm[§“(XB>²oŽÔ—f9v7¸1s“ðoÊqä*¹ª,[f”’÷îè»7!ŸäD= ¹ˆ6 r^âe>‰¶o×ô‹wŽˆ®…_{#3Ÿ‰ýË']n~æÔü!©ôLÐëå¤\@ùKºÄ‹–,P؈.Ù:_WÞs´¿ÑTß·»(zçuƒžsMݺ$#ÖÔs/ÞºµnIŽ¡˜>{ø+÷* ] cLñª {¿yÅwcQ©O“šçZRŸ˜¿NÉNŸ2ç˜êÁ³„[9%âò+'Š>¼)î28yø´³-|Ë@ä¾~VJ¤œËGr=íé^¢®bû<-FˈO¨Z7?Ó¢7~€v‚Ýuf±àïôŽ`P9¦w„«a‚Ê{ÌY(QËé.A¿ý΂c> Áš‹×r2sž\[‡uá8K-Ä¡f1OGóYý˜xjO_ó†s9ùr©7D’ߊê˜ù”Ýfnú›»‡8#b”îÍ~­».õj=p;„ÙQGng |BJì,iÏ3@Ÿ —ëy"Âù¬rxŸÙž öÀÿ 8ÉÏ•S‡þÈÕƒ]àæÍápÊæÜ!uÆ&6¸O™¢æ6öº9Ê)Ü¥ OGô†`RÞîSSbëróÉÍ£™?ÁÑÙ)m1_ç{sö( £ß•´{ؽØ~ŠS1´J‘D½øè&§¾ñÙK3åÎË/-Ä ­¼¤@²°Ó©£ºÓ3͉HV³¥µ¯¹Í¨ÐÀ¶[P5˜?·Y$¦™V›¸jT-”N­ã5à¢Ö ÈÓEC9þ'uJN ßJJ)´Q9C&"¼%x…æN¸S¸Z¹µf¶º¿³}æ_s±¤4HxIWýC—~tT¤4kàü«/X•ùW_hºOù›©+ÆÉ#qÃwZûn1Ã'8 ¾3¦¥üöÎ4ƜѪ!ä¥Ã5¤EìwÁ 8¼;ºÄ`CUó_ÂÉ9U Á? 3aˆMU$è8ò8Xb2rQK%L,, A1BȳðE±K¥3ùÔÈ<[AЧêeÅ‹›ª94%1ÎÔÚ€ЖñSŸƒAþ*žªøÍÍ_½Á:Ñ'Dóù˜Oì9bPÕÖ<îÓ»Ø5U(q£Z Äxu‡Êô#ö*¼çÓ[…“ë•3‹¯èl=>†0v×a3Îè¥|Õîó=ïÃûo½OmòÊþýrm,LoføŠŸ ¿5E‚ZµçºÉ `ì+ëÐÕ)F¹ºŽîµ€^ŒÌ¤4ÁUééØPЮs7>Ì€¤ÒüÁ>)ã±Å•·A=ߦ¸R/ÀA3Ço â¤,ºx<ùWªmÜfœGiº¹±¦Zx½š,˜&qŠÑ¯£&̦Nóœ i…­výŒø!Ò•Ø:Çgy&€”v²ƒ2ubU²ý}þ>†¥zü¥Oô;©!æ—ÚG¸p˜ »ª¬JŽq±ìƒ–쵺C,‘r,„O]!¿©b=+ 1Y@å|xH«põu&3§B¸ˆy2ˆuq»íF់‹‘¶+²äQì¼NÙÜú ûPt¶ø²S–‡ÈG:"ÙU˱钮+} Œ.÷;˜ŽÓ+3ó?˜¦è-Ï€Þ•2eʘ?3÷»É·åÄq®ã¢¤;…xa“ƒ­éâ¨cw°Ñ-á¨óî<ØekíHBG`óæzã1•®ªßX5)ã9ÄŸå¡`åèæ“h>íÒ\ò`·VÛæ!Ôžc³ÑAÇ„Ëi.çÕ•bךåCWUN,ÛÎb ]Û»;!9ø ƒ‡é´ž›ÐP ¹S Êp<‹Y~º" [SQ4Ð1zm>ýŠ•rî¸wð– ®KPØ ‡,[]XúèªïÝdÃÒ¶™ÓÔæ¯hCj<§ÅÌJ'ZáÙ×êrþýšûºÒâ‡'îRÅ oïºZíX?ËWú¿õ°®²Ãz¬ÊáhLÖgß^åÏ‹™ÞèòQ$ÉWÞ²S‘#ýEîÿoÆYÁõ¯…ІMpI¸\T©âd%ê®kŽ[‹¬í¦E!ÊSõêÐÚQ¹¦+Ÿ·® ù•Eçâ_§ 1`X0«tÖйP°¨RŠ6´ª€’!±¨á£é ª¡3V\LB÷òÃ\«:Ù5tvS´æVú®åæK. Š—/%™3÷o;± ÏhÝu•clºh–¥R¯%”†¯Yð—Ý}þªcäÇáY»$À*µ?Ç>šŠœÓ:•Dk_ïŒðŠ *¹|¡Sq‡àÈñªJ’è"R•½ß]¢¨DQH,´¨ý+dÑVñó¥•]yF—òP:-zl·å¹øËTQêcÓÍ+ÝŠ‰ vŸŠ¯U­kVs%„EŠí¥3HàÜqß óêæ¢¡o}B:˜°#øÃ¤„¢!-G]çæ¢aX¼#B¦àNÞO¾°¡ìÚ© ]`mûÔq·nÚ Ž_KÞv¤ïá`oß´AÞÊ8¼¤lJº8d)ƒ mOe0NìRpnÊ éïº Âºç¦ Ž{>ÕÚ’¬ â×»Oepˆ?¬ bç¦ ÆQf)ƒü:ˆ<Ø×¥ û¯#¤ ©Jí5tÁ¡$:ë‚Cw‚XÚ0¦.ø>{ÿ$*Oû¨òËÏüvzU …J)õ4Eò¿ 'ó•é”QdføR?e`b]l~T¬F%€ WÒÑä!ÃÆ"ltp!І|ņ1ž¡ÕIï"¥-îóz`©wt YÍ…†Ç‚nåVB+lèF{狎!6©N{ªYßTlst—›DÜHÌûð¦IÎ[ábîå¶ÓÆç¦UäpÌlB¸^†R š3 ‹NئF(µŒšŠ•æüêãX Ó‡®› ÆMUù˜êõpje¦Ÿd %WgÉ€!Y)¬ÀLBPIñ1I›;Xdí/£úEÎcUi¢ìZŒ`{V6Ê”‚Cþøæë- MÖ›0¤î¨‘ÒÊ“§Ã…äŠ4ä¡»¾,iñba7Ø#Ú™Õ¥††sä ˆåâËüh‘"*GÊh1­Ð*Gâ‡% >¢‹æNjô_„›øíb­R«ä%bý 'xÑÞ2ã"•it½À—Àª1“h®P¢ÕäŠ(Q02 º¤2Cܪ÷ÓD1¥ØPCüºsdþê¯t)%„~«ìÔòšRuì¦PÌ2˼ÑîŠ/žW,ntçÚ–¾rP¶_Y„FÇ®níª€š“WpÔªIí6Q¤#1xÛ»ÜI¡"Éö+Þº©Éʼ~iºÑé3¸Â€šNч;Ótº)w žFþ†–Šp§XH”]qÊ[ä­²#àùË©FMMÁrë~SIÔñŠ¡×DÈ•¨ÓlÂq«bs‹“oU1ÁDú³5yÓ®½ Æí\#›zƒ™ö<e§Øß!¡ˆin’lŠ˜½iͧµÅi.)ä_½ZXcó£ãðºàÜ./Ë#«¸ôqû¶P>.¥;)9?|åÒôv {¡·p ¼7ïà6Âû±A­î¼ Áa4ÙSò< rŸ7ïÇ­´ïàtïÑö~øNÐ)žqH{”€oUîµ÷aÒœ–÷ãVáÑCþœ—ø§~ªœ´;ØSîÜnzO÷b·¶ÈFv”…ûã!ì¹:{xNb<÷t([ƧlœÁ‘F¸?‰rnî»F§°å2‹E[ì?ƒáþPz(ÊG¤yòí,÷Ç­ý°ÿÃwd{¿ ²Lø?¤‘¦ÿãnQr›çÍ‚ÇdHŸ·ÿãîq”„l?=‘=h檿wx…ä¶#6 àãéÿ@|žNð˜öå|@.‚’Ða z“Ô},@Ôð‚s?Èû’b¿½dä¹]ÞŒ{ì-[ä°äV6îôƒÜv©Ê rØr™µ² :BŽ…¸”Ð®é ¹G„#ä AºÀ˜ž[9vu !;}å ¹UyNàíÒ·r„€YÏÍrËV<ì ¹[¸üá ¹c†‹­Þ(ó9­+SæVŸt!šgÚkâåðfSPÝ& ÄHŠÛp¹½+Ô§È1fŽØS sÉý#GF@——‚”I§k›"A½ë»À¼ïQ&›Àd·F ©£Ò$ë–>?å\½.ÏáË æ|ôèNV@IÝvª©zÆ£ßO…yað­˜) <%TtŒR/È×ú^Ñd‹È$¾ÌI–ƒ ðrÀýØ0‘£ ss07¨È”ãÖtFG!zØYä¯ZÐqôe©€1Šù³}à™ “éMÐÕJ‘š$áÈb¥¨…1nù]RAʾ–¹IÒ‘t6”þ´ôds·Ç¦Ä¨¢}EyvìO—væ¹Ð¹IîJLß¶% À¢FpꤑéíK†ìÅ·h•†d¹r”plg«{3¬ÿsª›<ª,;bֲϣ²$O#²«‰}“ÖÃÁ4‘Ú×7osŠeõ}]5å­¸“–¨Ú‡ü)«`p_“Ôð^…kÜâ¶]­{gH§fž"6]màt.E¢X÷óÔ=€QÓìTÝœ¹±ÁjGÞYÈ—Þ‡Šø’EÙBáâ*q‘T ™5XÛ)¦‡È:þ­ ±úv]»XÓ±«M®Ýẖ\šk:Ÿ¶Ëµa7¸ÄÚˆu/±&ï’j=––jËÍA©ÖÅéKªõð0Iª5¦ÝL©&p—jóI5‹ŸB­«¦íj]Fçj}Ë/õ¦Êì ¡ÖyÒdj–†P“¿o µ[kiI5Ýj8¥šò¦T3¸Iµ‰Ñ”ä9ÅšŽÔmbmD4KbM_¦ØR¢å&Ö¦W¿?<±„Z Ã~ µ*V5ÍÁjõ¢j!Ó\ ~É´J…b µJu| µf2dšµ·JÊ]B­+(²„2­‡ÊÉÂÜK¦õ©nG>’\¦L›`È´‰LãeMS¤u9—Hë:²"­+¾c‘ÖU#l‰4]g±‹4;-B¤)Z2EZS@s‰49B–HsvHˆ´™,"m"(ÒªLœi:ѱ‹4ú`§Dëâ‹hvó-‰6ÈLK¢Y’–Me•7‰vG…ÄËí@¤š¡þ=†ü¤žb$0M‘«¼À¤+¼¦£¹HŒGLWô{zåRZöµÙkÀß„«ŠM朣 ¦üæGŸs¯zÕ–zÄjƒºZyP`Cè¨sSÁM~¸iÉ]–’”§ßxÑ ¡4"Ýç%„¦žœ•Ts÷ ^_'lyøÚˆñc÷ŸS4ðê‹“Rÿc¯H-öä—p4ÎtJêÍL\Šß¯®Þ0G;UGÂÇʼnÉwå2*všT‚ëË¥"i¸Æ=½QO‡£6Ä¥9ñ5˜7¨+BÍø%û¨ÿÌtMö‡ê@E fwR¬.u µ½ û‹ p®*yä‡Ý!¿èâÝlØÉ)¬˜,†ªrL(gZ ¸YBÜž¾K‚Úç±Õøù&¿»[×F}Fg6æý¸2³S¾.gpQ\ýÄË*¯ÔdItò…+ÚæÓ5³6ó|ªP¤¦`V!'†¦;¶CþžtŒí!‚ ØnU™Ki(ýK– @ûX4Àâzdž™d€Lþ4fÊ4“¤ê, ‡6ÀäjጂòãNׂç°9_ ÃévìÛWÒ©ÚÖæÀÍ•v=°ÎfÇTæSþLîκÝrFª@Ú¸"ˆ¿§pYpGæDÉÒíñ¸]dêœCç%Ëç+ÀeÁ³ýNså+â*–TC€ï›/Ür±Ò\¶ŽŸhðü\c:Þ¡îPL¸,F‡×O¥gª3h6àæ’ª4ù^Iù~EƒžçÞ~ò¢¬dJW?€!;ícâø|òi[Ntc©ó%^Ù×’ÙâvPr­à¤bžMwsä²’IÇÁŒ ¾Ï qpð'ˆ5Ã""‰aKÏô­ÞÁý”׿‡«¶³¯EÆ~ý¾F¿Õ€Ò,çç#HM>»g`™½áæ^c fÕTÄ*0_&瓎¶ƒØ+_ÁÒAØ_²ïÉ«€lîøÄä{)y8ùÎÞèç‹:aVÙoÃ\Añ£ø%/žË.ø{…<ÈIV7W<Øð”'2VA×[„öÊX3ÕUjsŠ _^œS(]-&F¿“®;ÑUrò‘àªßlEV/EвYÿ~edvÞå®$#²³L.# 𸠊>Ÿ DRäæ{"tùs´–òô· >ª;#Ä7ë6bYûé\ti§Z2ä½&Â]ùžˆèª‹¼•"Ñâ?þª™/E…³*S<äº:m #ž¯>Ÿƒ6›/Ú@"ž8rIÜNÖ;`¶^ÁâX°.ÅÌŠ]¢‰ÀÌ'ܯŸp|âÃPŠ®Ïò[=C DeÀæ›5)±×~BÀË¡L̳ =k/š¨¼B `R Ä`hÌ—«C,ü3¿$'@ôû-vRöÁÀ„"ˆ’²™^:Ö×+e/&"À< ˆW.ä<¿6XSÔr˜šYebsÑ!2€G¨AöF«v{v\–žeô†«¦4•¥Í.ªsG L̇ðZˆ51JUú ?ßë•`ëê °gÄf‡A¾¤€9ž“,©êráØbE~ð4ý ~ Š~¼¾w>pQí@{¹„ â½æEÄI\œ™µþ`Ý×'î®°¤A¬Â‡¹«.’âWKÝ# _®\ª/"XF%7*”€‡Ë: –«å_D_âwÕJÈJí8?@®v²æãÕëº3d‘Å„­ qÌÙ«ºdô|¹4/R¨sÔ „E½Áƒñ~!HQ”ß@¬®ä¡È@<3Áj¶U§v²—¨“‡“‚:°é²Ž„C.Kï?@\({9ì ¸x„_Töc˜»"±¢§afgØùKL£¿NÈz§qMĤ›'²:X‹#«K.sÈÏÍ…tkLp†Ï•”‘m!e–îØ~†/<« æuF°P[÷Œ²(£Ì‘Ðe>ÄK |–ƒçX׆ÞdQ®Í™6Æ@ŽGG®2cñÝAO`¨o(=`¿5BÈ»«o°ž3ž¯›çÝ~ŽTƒùý‹úðì‚ÑûÃ0ž?õa!¾b®Sà|lðòÜü]y ¿UÂ{´wÏ “›¬†¬h€^ñòésyª Τ"ð\býðƒfÃH›ïz‹¶Uâ5¿}¸ô¶»æÑÌ® |ýíGÕ‰¢«ѽãkÙÀ‰'íò9ñæGö=qoïÀ{’ÏùN§¢Ÿ•°°ò?½1À#©`zÞ¸Xà´¸ A3M:¹GcoûfÐg?‚=‹Døþ‚‚J´IENdÆFÖJêÜq°@ Àv‚ÉñÍþñ7UÉËvØóÀ½Ñùû_6jXef,Eþʺ²fZ5Ow¹\¸.yËm*8­š@L«&²E¢5Ù)ñ±eÖ¸;Ó¬•^3›5C'§lÖZfˬ1"Ì7fÍûÐiÖü¤Æo†¾N]Ä’;Mχ`h4¡¾‰R”^§êCfÝÐP2CéÓ/b‡Ÿ0ûn‹¤Òî|ƒ/"à¦5â鲊‰d¹²óLкd,BR…½uº}íâÁ¬¢ù»*šl’&`¿[weåjŸoö=Yá?öì!táÜSò­“ËYJÍ7‡Þµ‹?»|k%¡á*åHòˆ!‚'oéZñ¸ÁÄÔ—cbT1 ¢!Ô”A¸õ HwÏðÖ³òq¨á·ª-=ýVÅèùûÐ~š(<¹‚½BY›ùž† À[ç)²î>ÏL !¨ØDȉþ=_€Ý¯›“ܤ-‡ïYñ§Ç„ý‘‘‡ô$òÉM+N‚çVÙ4ÃŽÍ>âÁ‡·^O¢e¿ŒÀ×FžÌÀ$`ŽGb|µO„f‡àÉÉÂ?A§þ)yÈêéˆE¡;´ /úrKº\K$; ï°Zþ-‚$îþêƒ\ B;%ï+ö }ñ¹zhÚ¸aþ ýϦ5}m ÊºN„òÝð:µ0• ÈT…Ü'ïëàl'f'SŒôäñœ)@ÏHD>§”/h—o˜ƒ¼ÝºXoSñÀ)¡ˬOÊÝuö°“G‘X3‚¦Ã7áS†FÇ÷UÆÊZ @¦)d•ÚzCIRh]ŒoSt`É\§êÞ|Ar¸<3`ÊÐÂÐûuÊÏÁ`îS¢Á¿sí©K€G¾l Ì”3_Ï\‘³ùì´õùy¥ö³{òÍÏîgïÞ}¯ß“<²’¡I¢•««VH>ûLH¾îkYèÛš¤Ï³÷=<¬~äÙ°áÙõÑ^·« ‚U’I×wacæìúýä$Ñ…ñ؃!Ñ‚Œ{Š6€tÍ$.ùëTö|N^ 0¼Ü'ûûYr>Sëœàš # Užxû°J;Û}f~¿Ò¤›½“á3{†Ñã›è¶&ìz£-ê4Ÿ#õ¬;q6äøú¹*>/•œ î…€wêK›[ ó°¤4±=¡àÖ¦[›.»½‘Àühä“r~%UGœÝ• wiÏ\IÉ;F$ßÊ¢»’Îx.‹ºeÑäÂ’E7Á°N&ÂÝ|]]´?-ºù}Yt³w2Ø¢÷Ë¢»’O‹n"b.‚?àc£€ß‹n"€Ãg-)¢¶<-:À#M‹à=ʲè.FÞàã J›ÝÑ&‚«Ëoˤ›‡I·I}ópfßäû1ÜÏ\ÃÊýÃë"³Å¾Y7ÉM‹î‚V³™oÇ•}ÕzE7çMƒmèâ9‰Ð¬ËÆlФ$œÝ•O_Pƒ]j2ï ¿¯$]gtW’‰¹ ºÀLû ¬ù qûÆ2"Øæ}…A">ì9 ¨~Áž»†´=§î¥eÏA¾ŸöÜ;‘eÎÝþ÷õû~AŠ =æ@ûçtýãŸÞÐõÒ•ÀU{ý÷ë9ëZbc¾Ñ]Æü#'•B©'7Úc! ݨ¯õïê eØlþOÖ!™ŸÌÓPô/Pß@u†*ŒùGáVi6|,Œ¿þZ¹‹ßF£ˆf=È_”éø›Z¼xì¿Â¤ .ð’|ü?pZ_NšŠxóLÉT¾øá¤b8“ibC=Šï%Ýn6 W)s7æ§ÃISÿEj_V-…zÊÔ‰– £Ï¿ÖCîã÷†Ñ0f»æ/ÚxÚ~Ðë¿Ò´á ô³®êJíd!‚_*ônÌ?p©r“.'=LD¡+÷µžÈðÁÍZ Š2­g«Œâ”Ëür`Hìâ5+©=˜/¨”;[åWËÇÂøó¯õºø½ÄlÖƒüEMÚOj}ºä{9½(Ã_“ÕtÇ©7 yv•Ïúæ´P՜ϔäз׌ÁU²Æt†‡>`P[§k×KMV…ïÕ÷iän˜K~¼ùÚÄ̦×ȶ¯½õS$6]®¼.7 |}Êÿ Ìek=wåÝÆI‡Ì{m¥Z3;Øc:QŸ‚‹Þa9¬v GˆèBÐÃWHòÓ9NÀÈ»yRg¹­&fæ Ä‹À2 `™7ßWÖq!~Sî˜+›¥Ñ/¨BYe²ou^°*ò½Þ0ª¬þ‹¦ßtiRÂݾ¥Û£JÌš­hh›Ò‰R®¢çÅÅ’†D£™ 0Ⲏú¢ÕÆ]nqaÂUÃé&]åOŽ*øÀ¤s=q@C2)»ÛÌ6'¾št¿(S”„Á¼RSódðÜýDôSu"1‡‡Ê}ÊA\ÌvÊ«b7èÕä/â!¦Žd3êE^ÀûÜä57 u± ⎻‚,%‚Ns ¼K(Å„-’þ·ÜunæŠ`RW‰ À :Iéæ3†ü®á]ž¸<_±÷#;Ã’]"¢°ì¢›—-ov|\~E˜Ë÷^pæ°Eú:À uå±tUÑ¢§ò‰‘]†ÞÈ×Fd‚±d÷Ïkå|¢OÚí¡Kµ»‚ÈZYâÕò)±õºt:‡zqEM $ c In´nïã¥>ži ²øE›g‰¡a_×)ÿb×a{Àâ8ÁýÅRaó‰|;º™%¤ng*e§ž“Ü ð`{Ã`á–×AÏ~E­±Õ„îÉŽZ¬´½º!(z‰Õùã0ü"†y¾ë}'ü“´ê„n3†NØ®¢¯$7“nºJ¯ 9]Ùubšœäš£&Ùƒ3”$fÙC/ C¬°9Èõ;¤à‘]öm’©GÌŠt<½ÊÑeP¹ fFŸçáˆÕóy… ¿¤àVؘ›‹÷¬KwÄ}Âܶ㎉êÉ);ÛÉ¥cÙ·˜®‚á|¹ i8Cž’ÑõR HáÝÖÙ¥:бøÙRM¹2±s^Í2;;g ˜Ò¯%p/¥~nUMd/n]_r]u~—‹÷ªÖb$£_Þ±jÕì_U1®3\€%/U?b‡íè ̦\—ƒï‹îƸœô÷ÖÐoŒ }«7b6Öºaÿoðr|fMïJWS¤±¯È/J‚9XÌË3aógw˜›Ã5LQe³‘>ƒn¡®„á áÌþÉ•9÷±5è¿"û“sKRF¥1ß ³(omdþÑÐö‰º7=ɼ} ¹º?êgCuó‚êÝû4bës§¶ü ³Ö_ Xbôí!.$l‡ °è澋 Å,Ý6Š`iÖ+æ,¼¹wn¾E—åsý–mß–|$©¯åWš²_cm•æ€òZ~¥Î¯ê§#ÆòCÒeÞVLŠÅWª ;/¾ öâ ÌFaeÿQ;ŸDC¿1±ø€¼9bñݸ:_qÒÖZ|Eésñdyª^iÞîmõ‹å÷ð}*±üÊP¼s[~E— Íõ·xËï%?®¾ZÝ)4zØvܲ‡"©íÃÁëLÈSõ¬Ô\Î ¤º¡è&r {uÕ…¾Ë ¬Š*o!²Ûβ Â*J†u‡»Ê/ý®r@PLÀꪌÕâ­ë¤÷ccâm?}djbš.mùV#¶;¡^Tî™´äcÆ&*ß½œ™¥ø5`¨ØÇTbjvž×´ÙjÖ‚œO(˅߀þVO TðÌÚUCí*NĽrÂSÑ1†ëG®–SôÅÀ#?Ò¤ëcê_ìF¶M]§.ûƒ[³7òàØê0Ÿ9¶ê”¶Þ'¨ýèòáœcM@æÄ,fËæ›wvÔ'By\=v޵1N[$ÏË€›äˆ6d4JɳÝ(µáH¼\&`͡ƗÕÂ3HB7Ø É_ÑU*‹kÄ2óºEÌnsÅ…sŽí_«ò5ç],§XÓ›{kbNÊ1`ª­ÍÀµDc4ýóïy¥ºÎVm2dÃXb4Þêðqß›AB`)K„ œùh»iÃö‚DHÓK„` Ÿ÷.B°|ZZ"ÿæ%Azä. ÒO{ƒ,AºnOœ¤;ãhIÀl¤ëÀÝ!=,8‰|¶Ô]„4Õ4 ¡\u3•šÓ²–qµ÷õ„s0-Bž&"Ž;E2펢‰üÆ!r,”EHÓ­^S†´f¦ž2¤9ÞnÂye×-#Úpü9dÜecízý´/‚ ÝWÓ¶+!²¦À2d2›eÈvÔ'XKxSÎŒš2Äµç§ i÷f¸ë¶FKóíí˜"‚Ë» iÃ6÷zBéÊ–"œCw"¡382…® È} ‘Æ(Ö±„È>&C.Üîë Ünc^N»œž€e_ÙmÜY h÷wï¶á5î>—^ã ¶×xÃÈkÜ^ã^ìÍš^ctcúŒ}eñ\¼])>Ƕ¾1°¾=á,Çpw\ã««„Æ1=ƽé€UxŒ'<=ÆÆîaSóØQNä[ãÀ,I ý›Çb¶Œå1î:8:=ƽ:Q><ÆÀÀ—uL±Ë¾OÁª‡z"ÑÑuèl=áó ÓcL =íc/‹é1î*[2E‰ácyŒã‰ð÷lUÕãžÊð£|X{ŒÁ?ËÌÚ`‡ñœš<ç!(ºÆÛCtuF ‡qWq´å0&Ík¬t¸a1áû:îåÍ=,¾eºÄö«ÖM‡1HÞCn¶¸4 ú£¥1Ô•4zlþb£61KèÛàgGB±¿0ô·cù‹ç’³¿˜ ,á§›Tm›¾O¢Ž¼ÿÎ3¼j¾yVláJÔ`Úl8ÓÚ¿4Óê€$Í©ÿ¸Ÿ¡¶ô¶ç=ŒY4ÝÚáoÌr¶j9[6 -Ãz«}-¯wgçèÓ_ËèÓSI_ àË;º|-&V¾œ£O£ˆÎ–aUny[F÷yt ‹Ñílg' œ7g§ •OoËÐMhSÀŒ6upvŽ:U ú[FˆFû[6Øe`6/Ü(?üŸ³±n4ô³œÃ'œìo>dþŒÏ¼i‰ ”åì$]S[š%fâÜ]õÃéåñûÉgÑ6t§Á±ü-à2懻eãCZþ?øò£hÃ%á›sóáÝ;ψ©˜EÃxk#ô†¶‡–»s6=ÝÛÇÂݹ5dwç†>®AœjÙW à­Ç]“0kýj­¿ ÃõwG†`œÀØ OQ,gç½Tf.À[ùdký‘6gçJô÷úCÙÔ´/?”¾½7g'N ô-pk9îÎN×[^8™>–ß½¢övÞ+ÌðŒ©Ú3ॷÁ^zÙè[¤¦ì‡90¬5“R]÷¿¼-y÷Õ½hm uΆï™"qœYxÉêø„i·¯X˜AzÅÅþx¾ô9tß Ï“²Î>Dfm:€Xë¦ÉéÊñ¦4šGn¯ÆV ¶êA’‚U§<•Ûx€ÊòØèQñ5Õ„‘—G×Zw­Ì…´õ¿ÕHsÞQÎj„&îö;Õäl¡Ós•¥ôÁë‚ì] (IÎ<Ï]‡=5™eý^ÜZaxÐ Ÿ¯1¯ÕR¾•µªeå¾Ê”E˜#Þ·>y9{&i)^rª#tòǸ÷Ñ-W´†g¤‹ηLšàZ&Dpáœuø}%D`ùðI+­”9éΓ‘ÙÉî” d Ïaœ’\ãúš¿G!e¾ìa–¦ÉYôFOùÐÉ^ÞàF`4Îc5tˆ¯,J•©<Š˜×t˃ØÇÏùP9¥ñ,»ŠÇ?ÿøÿ’>ûO³gYâçÙb«.dø«£œÏú1â{"RXG,ÞY˜ŸÍ|³ÎÑ–?%š¢ò{Õf–Ä_ £ߪrÂò%%ŠÈÔËeÃB,ÌŸrLHµIÈEošUª¢€v†-êO¸PAòIÜsUóØ»üIIÃé~U¯Ðå*fÅ7n5ãc÷*Ÿ²!ÀzÕ&Re¹š×‚Œ¸é(€Ü®;B§”7LuMßJ®jÒ¥ºFÎÞÖ¡S¹U·‹¦‹|VèP=þ€_Ä0úgÌÓÄ-=®Ê­ ˜¢ÙäÀÌÚ$ $ûì¿ûEŠÒ«P“ ¬ÃàR=]˜ó†Îº§Q7õt…‡ªË¯9—ÍŸe¼¾âÍΞÓC8Æê±¬DšR^ÍGºgž®ÝÒ\Ûä´è G½1˜ÄVUÁ€ƒCøË#²0ÙÇ4Ò®:fÉ&Š7&Vw¨°v‰˜SÇˈX›é§~9ìªD'ÿõñZ„wÍ·jùTtõfûg0>]y߈©jGE×;‹þóçvÎï)¼|ú¨#»ÝSÊíE&°¹jFÕ5M Ö6õš®ÛÁ¼rÓä’¾ýJ3åTݦ9gë¸ù •‰i?׮ơ…˜}—˜¡ù¡#¦ÞV«t8ÃK6n•š!‹¨ Æ¬w”æã– ÄÈ"7U‚º ñ¨Ž(0~]}ܲy±%‡N‰0¯Éið“¢ßT~iõbUôæZ2´üæ¶ÖTƒx"¶º('Mg=#qtª0•/*¢À¥Åó© 5IF#êéDþKy}!=›|¾KÀfVÕ]ò•eyèê®Q1Ç)/ø¨Å†Uüªx*`ª˜è8«ÁMDâRz}íeàË6ã¢gˆFDZ%p={pÀÊW67\sE7eÔ¼¨úZÖO‚j°ô©‹žÚ¸/ž6Ï.„žgNÎë;¢nËù!ö˜0åÝ‚³Ê!l˜‹~5^Ù£e+›¢˜|WŽke¶Ru)u• à¬JKAÒ±$i! . áË\Odž‰9Bx Ñ;¶/VÎcX‹ÕÊk#Ôâí^œÚ¢ª«Xiÿ/“=U’¥/\+éVb¡ôµE÷;v°V-1ý»®MähÌUçƒ#'G-"I ÙÎ\y!c[}ƒ/ "aMÙm„™Â-Ô2· ¿Qb˜%v;”ÿXíŸÜ2ÙwÉC)î.Iv{¹ëNÖoZGfrjä)-É@¬¼0œžâ:¼´S‡kc/‡Ó8íԓɼô¦ºº!ìpš;œÀ~Y%Wü8í ÓžhYÉã4\†& D@¨ÐºŠ AU•gÿJŽm\Æe` '^ ‡0]lΕïB¯¨Á“óÇ% ÇŽR™Mݛě,¼³«¶ «À‡Îx]ÇuÙ€Àš*áKÊž¢6—…aÛôI–æû/¼)žw„à¹(ÕÕ¶Õ»üûhyÔÛåÕ§vYUDŽó:¬eYˆæà×D¿TiF5BÎѦ2*eF57Ä ~FQͦي ¦K~—-¨ÙÈ%Í ë—ˆýD‰ÛÓŒ¸3¦éã5%bšC‡ºÊŠiŽIEa†™+"ˆ×œBX½¬6MÊÔ/«®¡¤˜àF9| ÆŒi_U3cš]»S‰˜f—ºRVÀR×=l1Í&v>‚ÓúF–k†mY!Í*Ok±†YY…ZÁYË”h–¸b%Û…À½¬X½¬Î/.:¢OH8 éŒ%šÕÄêe­ó‚©—UUĹə+¨ã–ÑlâÁbõ¤â5V/«“"ËŒh¯LaÆü$Õˈ·•¥^"J§Qhûºç6)Ÿ[ÀS»Ü0Ò.« k—€“içû:n—·vÑÉBõò׺Õ8´WD“w#k›½ ÷K\6a4‡ï0r@3Àhn°N]î(͇£%šC1—²šCÊb™Í>ˆ ‰õ]?s+ÒT]pj$Òlò¼”ˆXø¬x‰¦îs B-ÒúÒ”ã÷UÅ4CõF—WÐW¦³øT¦IY¸÷f>Ê®Ù%”áU¶$º#lGöüˆ PÞL#ãy°)’'8rÒVb{ßð± äí 䦻e¦Dn%į þ¦Ë¼Ž)‘u™çÈM5 –6q<±<Žû_B7/ÑÅö¾púyìë²§hµä1/…îS3¸F7[Èãf3jÉcLº¯QSAæªî”~Sõ_‰gMiµáÒœÓéO*ŤË0/+ä/3…îG„dRYyÂ+Åda”aÒeñXkzs‹ß±9N—g˜¼/Ù—¸U p äæ[,B"óféÈ;Têl!÷)'hy¼Ã¾Aha2Ëÿóæ”ºä1/uÝÅqk6Hlìã²—²Ä-–¤$ã ëÒáíiv–Ǽ½^Â7®Ü)Ï1å1xäîK3Ù¡¾1æ;å>Ç\Ñœö×!±¯bC9ÎM–k0u$Üø9´™Ô–#Æpz{q!¶îWrˆb5 Ù¥÷XœÊÑ*׬òXLð¤°[XÇØ“8µïpÀ@ãI—RUùT–¨ävj$‰®vä\²1ΟÖe£ZÀ•&ìðÈÒ—9ñJ’X‹x\Ia†w§iŽËÑ'jê=û Œ’œ®“&’ñ×)²¢Ri¤¨µÎäð Ü–ña)ç,bÀ!Mû9Mý·7UÑc \W£›"ýò6GpššXÑyæÀ' Ø(ì µ»6Ä1W³Ò4†7ÄìL‚—ìÈBàV—¢æ§jø X·¢âðm¯Ë-Hrßqº~s‰Pp÷-IôqÍôç©ÿNý·;Pey‹p[?ŽóÀV§ÆïNþƇàæ÷¾~.Ë6g×ý¼)Ry =4ÿò‰û5öH¥®¸\y ÏkåÜQÀH|Í<žé—rxu.å)a÷J pÃtƒ‚˜¾@en!;‰ ºêÐDq’B¯öäÍ$… ‚ý78ˆ^ÝDÒÕ]v–‚ï«(iEÑb]¡¬¢ã ^Šó%™¦ÐîSfž‚ƒ¸lB%_.2PqšB€3KaC¸Ð ƒ¬%V0#ØêõúD›Æ±$Y[Ó)²k–µV’‚ÎÕÜïS|ÙÂÞ1ïœR¦‘89Å¥NËÌQøÁ„Ÿ÷˜ÐÔÐ_ ™ÃTöØdˆ–Ñ<¯7•ÿG3zI0m‰î’øË–è·ëGWúƒÜÖf ~6ô9€èÜmQí^/s϶¼-Ö‚^jˆO…¾Tºmœ:\%8ÍxÊÂ4Þcç½Á Y). î[写 ØóÖnÂA²ß-9Cã´ãà åîÁ¸ »4¯Ûªˆƒ/,.>Ê)¤€­ªòÌÚ8UÈ[Ð5ôßt;.éÍI¡`íÍ·‚Ú¡RŠj­¾*¡Sr ÝKT”÷ø¶í­¨ê`×tÕzê'ñJÚ¡ÃÁ7·¹yFÞ}¶&tÇîyí~€Y£¢èVáçûTVú„e>ó|©ôÔ†°°a˜yŸa¤Qï¾ÏOL]¦PEòŽª-à0“¡òü`îO à÷=>ÿÀcˆl|YôÿåíxPŒøžˆt%_“ï,ÌÏfxïgËà•¡ êQÃ__°”ÁX ®Áì SÒ§Š[Ž0¥ë² t½!Pn¢ (»,Æ3BiøEuDÓ=Ñ•²9îå,á“Z†{euJÞ¸” EÓKšÀMæè†)”¹Í—2úrt(EÜ ²Tp½Â¨4jµ[o¢Û¦èìnrâ=Ø#óŽuMUWX7¾Ù‡B-¨§Oi2|u¤Oè!Ï”ïAg`›y…wÁV®'ÆÉC,? Ç¿o äB^çp–¸ò2Yè:¼•eù–6xˆtÖ­X:;À[|?Ú+”E~OÔçgÎQ©Òßsøª<®µÿÚ0ó:c¼ƒ­"+-—pOõuü,yM¹ê§ø-›_›¢%9ÇEy1´X.ö˜dœÔëšo|ÔRe’/Ï9Ñ aÑ|9(·!tÏZèžÕ¤ÄL5uKú¢ù.çGŽðVÒeD %;²B¹ßbj3_v„Yä+æS¸Š…›óªÄ8˜ú–ÉCÝ5G8nÁ-"Þrůâp!%‚^¡Î’[¸†#lojá¤ðRÈ®"ð¨¬Lò Þçh=Aÿ]îÎDµn½¢Êy’TY¹½`—d•\~|ŸÃݧƃ¡Þ7ƒdöØó½a§íûk½˜_ íuf>îM ³7ÝØï·†õ³¡6]µS!˹úWÁÔ˜T_F ‘QIWˆÆÅyšãjÁÊK\J#;äê‹æí­6ìØj^7%¿VŸäíÒ¶rYI]je\ŽHö²Óá¿@¤8Î,Ä"_‚í¦LÛxC‡ûùÁ¬J<Š ë÷»Æh†ÇÇêpµY2Õ`˜o¼Ñ—*.ÞÎ w³h†VÙpôš†W¢âÝÔ[xÑgÚà+ÎýsìCõYÁ˜üŽQà^ùzsè¾§dº³d5tfoBŸ›cSàçØ‡î˜ÐöHûðU@4dŒòYÄ$D3•r?à5üÀ¬±ª¸óñµ¯¼xíæ Ä`µ~pæå I/{e7©vZ®®ôÀ{~#1°õ}Nr[…&Ê\>e.Àî wÚY7%p 8+0H™(êE$iì«üŸ%ðèî^™Ë¿æ¤Íò­Þý$ÛZT\ÕŒ†‰O¤bcx{RQ·jž?È'úƒŒ8ó?y2»_!¯×öHúcN£dz£ÝDšÇK½k*gç ‡=ñ_”t¯7ŒÊGÙæó+Ù:\ô"éFëÙÉáï>Á×ç±=P¬kõ(† ç•šµH™$§&©3د‰V—x‡õwÃè‚vÚꬎ÷#A[ çN³C.W_¡ë A*Ñ…ýiÁ/MrñœÅ#üÚlâTæÕúCQ;Ë Ä`ÜÑ ÏÚ0:*M(vz¬¯ä°äg?òäNõ3›1”-F£Í“`Åz¡šz­¤Ùˆû±fAÔxŸ•Ï'5å ô¯€Í?t)¿ý‡r´SÜqQ¼êhg`@Rå10˜ôŽéê ¯ÍQµ:»" ÂÃUª5N®6+κèÌÕsöY*Ö~ZÇßÏ…a0=Ôu_ë&µ8Û×ǃÅi:úÙüFqen&Öðj¼ˆµ £ì–oµ!u1ùv¼!gpNó ÎS ?[ëžÙ7 cÞ±DíaYkØ7éÄïM¹MY@¦.0Ãt#…ƒãî8£ã]L|ö7°ÝñÂÕm]ŠáT07ÖðÞ"BÚ9eÊÃæ0ã”—.·v&$'\m“¨a¹ø†€6œƒŒ¯Èï"TÚzÒÆnåk*ïü¨”L’©ük”U²ËŸíj£ûf‘PÑî+ú9¬w$1 g+J™5¶\‚wÝŸh4ÉÝB‡‡ÚW"GÂцÔd}Ð~º½f¢oÇY ì£>ŽÄ}´’$¥àt¹Õ#c¾ß0*±L ú‰9JSËà#—~À¬†ÖçgCï=úlE¨NrRÊä߯‰˜ŸŠ³B0ͱ Õ}„Îå’®«¶¹“|«Òóhâ§n'pu·4õ¡rƒ/"8óÛ §î³ê¸}êq¾Ç­Á`òž»xkbŽý[#ŒCª=OÿuãÔéyܳ}z<]¿+l~Ì"Ui(u¿úì`×nÒ Yé÷2†Ã,Z­š†3Ð ¹âtKR…¿É}‹ gÃòYmªÈä&TîKƒí¼cM†•'‹¹¬Jt8<Ö&eÓ{*­7Àôóöæ:²ìÈ–¨î_‘ruÀ™tµÅ§¶ÜRWÊýÿj‡­µÌHŒ]¯„¾BaZ2èmøP’ì©ùèœn˜Ä¢èuó“òòítÒÈoÚé›UÝIm,uTw>f—}÷÷ñÄòìüœÃ<ÇMè±Æ wª02sóÀ ´:®ÛËq¤j‰›ÀÄQÇEª¯tô€ËëÙžüh_C?"4ˉ¥Y33ùâ”õ‹îŽÖç¹ÿ-gtQ¶©wWÎ4‡RýÙ‚aø9‚'TÎ$+ƒW9“Ü]Eh¼…=ø¾H×}2|[LW–Uøé·G8æÙÌO%Sô¿‘¹„.o&‚dî*¤¾!ÍEב”$Ks<’Ð}uŒç½u¿ªçP;¥ZFxAæŒ>–Qö‚òðg/åk÷ªÓ¾‰ˆò 屓šÞìAŽ ÈzeѪâ<8Ï}@VvZûJá•7[—e–¿½ÜÏKºh¿:îñM_ËèqSÏlCž-\ö¹i&zÒe9…Æ}›T—¾ÝHlÖËW& -²Ô[–É.q¸iA6!zŸã4 8C´Ê"K¬6O èÑ%a9o0)¢ $hLꦠ›%þ;¶ŽyKó•ý-S—0CÕ☰´Ò³SÌJ6Œ'ôÒ ð¹;C[ìÔÚ]­íÞÌmF[Ƀf™GF|‘"4´ùÀ§G› FbZ¸ŠCÞœÄùg“ÉzO½Uy8O]£át*ô Ÿì~×F‰ "ã˜q¶ÃCê ¦6(Ce?äLše·*]åéìÈkj¼$rÎ.D”™æÕîfIó‚ïÆ`Ú%y8gŠ‘<ø¯Ú¾y âæ™î-ëzØÃª®ó.`Im¢íÄ8ûRnŸ&jp‘ßC¯}£~<«ù`i†òHGªgÅŸ,‡PložÀŒxj‘&R)n˜ˆîrÔ÷YQ³XLl‹H  ¤ËGÈ–‘$i.ºŒÉWX·{ˆ‚cwbš)ã8uÒéaËHceƒí.ŒkaTí–‘Løu®x Ü%óòXˆû#gp÷jeaú Ù2’ô rmÎØ“¢¹Œdó?P•vÍOØcK†²¯:glÚªû¼GS˜`ß#ÅiD¥°ø¸‹¡•[F2E“É¥ŸðHHRûßKI“ÎÄ"÷ÌvUDxYOVÉ„3S´¢˜ˆ™|Ñ’ž¥Ö4žžçñßÃýÙHê èξUƒ”)|kDGPÄ Å#s 'ߍР»Gaš§¡Ð›»Ÿóf³(T7Æ4wÛ²!^ñÖ%=èãÓ嶘…vÒ'éý8‰ëû„t °Sé)ý’ÌâRóTê÷ÉÎÁOq4Y2䟆‡4Žö^—Cú.RD ¢‚è‹o·OCœ|LÓ ¶/$èµ9ÿ‹æA{EÆA‰ â—W!‹i ˜_‰yîv¬$ \ë1„öÂ?ÌoLÃ÷Ó§éûí7ÍŸí§Õ¤Ø#Fùtè–#ÊuF©Èé•Ì {}n;† töGé©nþìV.-Ù&T1-vDB™¢\–4\M¼–43~täÇ÷áÂÜ9è*Hãàb%„ÍóŽ 0R俞º=>>iÙõ}LAB^LÑOÖW9ÖéJ«ØV¡Ø[E¹öûØMõŒÝ^à4çEŽkûó€€+˜ŠfâæÂ°cò¹S)«ìTu*çÍ;³ß\ Þу¼Éa‰Æïo,º¬Ç,|%>ËÝö3Úkõop„)ËB|„§ö}LcÆí,:È^¾-ÅRwWér߬ý ßΘ†ï·Ïóy"ŸÓâeɯ¦LûÃñº5oÆCŒþûµ>†8ºè…ïA÷“÷a·.= …ûÛ0Ÿã.TekóŽÙ3ît6ûÙ¼c€Ä;®.ôIÞqɽkóŽæaÉ>[ù¹ŸÚÄØaxGæÚ‡€¬OðØà.v£ñ£ø©Zg›•{±£IÄÓ‰c’âühßBþ©b˜t ´ÒÑóèüȤ[œ]0ɾ¨¼^¼¬¡ë»Ö"&i„$ÝõÑßtÖpÍÌX¡Ì pZJ:”ÑáY IMQ ¡˜‘øÈòdR1¸f\{žŽ×;Jô•zß UÛ»Œ[ìçb¸]ì7··‘o;ž›¨A<­÷vÿkÉîr—`ÜÌuÅheŒ® ?¤©àŸýª-ÝëÁëQ¤³qÐùüÕù­ÏÎÌ¡]Ò ]#4 &¾ o’9ëÕö(Ô_mG†æëlh3ÝÊ“År÷Öf@¢^UZîÒT¡'M%›Å ðGfbï%ñ•þl/vñu2Æ¥ÜÈå±!67˜°˜n¥Ù‘`íUvˆ…ÚXË „(¼ÜÙS=òß\8*ï ê‚Ç0)EÑ¥Kvª±¦£+ö„8Oqm#!ÍfŨï¶Lƒ±Ä[Û í}RÊ•SÊÉM7 7/ôvàÚÆb>¯È÷Þ‘ÌKøç€0抋åò‚Áú<.Ë·Ã3RGb¥ ÔÜ´š?×– µÙâäcÏy.ß!ŒÆ÷!²)&×”—ò}Ì"+{ÚôCÀû:NQ¶C-õrÐgo–¤=åQÓqjû:DN¾3 F®€$ù#ø ÿ†ØñÌ| €fßWŸßoHÌïsSr,{Ur’8Vµ!¾*å³=—å ¤ðM?Clš¢~=PšªN[åg€¯T«8pÏÛÂ>/^IÊÓŠœ[‰<¾ ?dF ¸›šÒDÑRÎÍÀŠÚCŸ?;?ö&™5+CÙË`ñÁÁTõWÎ._§8P”±8¯Á Ñʱí<Ðŵ*uö²/ªÿ긩Šãò9þ†ü»Óš êÎŒäúóµ! !û¡V³Y°Ì©›æ²Â†¦JÉg–S—>7 (/ ½¼àCŽ­aƘ‹%âÏ.é P_¼Niò›R»$úmf¯ê®²’ð¢’ðzÍÙã€˾+ù{N*üä‰hˆ³z±zly‚ŒW’>æm§×½€ý!_ 3Grÿ(ÑЕû©1™G|Lbäúwä˸@]'uÓ°«¯g{y‚€ÂÒÃî ^¸—³(Eg¸nz‰`Syé¤Iãè¤_õå.ŽîŠ…„,[1«™ÈŸõõz³%ê{U Oò>dp,"?ϨBeUvôò6,vå×§þoïÊ ç)4Ým^MÈúË.¼¦ MßÍ:7¾ð³̉Éá^Š˜:u1™«»RPk‚[¡µ_à·!m~}å?\ÿ—©¸Òxá6ÿ׎üGû±=+c9ì–4q6ýlÝ¥ ®[4É›¬ÚPuQ¬±âÓžŠ÷0]1dé:i»·¤A昄ö iM"è·±Cïùoß!OÕ˜qÖnŒƒJÂuµ‡d&‰–Ð碛ë]°/Ü!Tî© Þã%IÊY®Nú_ß7myh¿ñm–Ýòõ6$·èí+¶EÿKn¿h¸ŠîæÅjE3^ë.o8À”G†¬w—?’CÞ‡±Œ¿Fþ”ñ£æ[up:Ø?xœ¬˜Ñå|\‘…`P+Lƒ€\òr²ö†ù3ºëžUçh‰#+Ù}@.Ѱäûö¦j^J€ç”? †s˜ƒ›á!ÄBMå/ÀT‹óQÝ¢ß ‹"àË«¤MCBh«ø…½°GûÅz›µÀTž]LY=ßHgâÌŠp^H÷ ·®Õò(•×57ÀR‰ “‹ sB—ªö7 ˆ>z¨,%³EÕ"w8eˆèÌ$em\õ ý4¯2<®TÏÚQp;3¢:w[úAQn€ÆþŽ< eâî«¿B§ .¡‚Ä™šö"êˆ2Sº–Ͻûˆ'«òiªÄåkkecÅX…±«ÖžÕÑ&§V“Ž5óHjÚ5«Ç³Í<¦'Ä ‡ òÀC®^p,)ÿ-?K¤özÖôJÑ@r5+‘àÆƒ5³HÁÑ…·3Av³6iO–×Aî©’+vеDMG3C¡=––Îu(¯6ëçË7ô:A^f¸@Øÿ ó8I«Y9À€â“B²1_ “€ä¬Í=¤ÓÚ¤ÉIû…HFY;<66µ&T–v½•}Ò‘«*Ì7úä]ðjủe¬c«@¦·b,œyv;»“à êƒ_a¥QŠyøêB·]+ɪÒjz¢+®Ÿs•žMžIUÝyÒõªPdòQK”h³[Ķx*Ïvöƒˆ–@^Æ 6t?´UüÌ#†àîUäšÐ\ uòÈ{ ‰š½ôqˆ½Ô¦êj/•…”ÉâM±‰ˆ0¹&P+Yòº[M  jMó'^aOd¾*)¥òÀàZ©mƒ_Äl÷¬i:¯XožWíA˜jŽrœÍ· A¼CQ­4¥ØÛaQË·‡o@3š)ïmi_Ì!Ò¬m·ôç;ÁœX[wÊTÛhHè'›ÌÔ*,ÈŒÝïoü“GN­“ücÇO (ÈvÅIk]JpsBs\¹ìg³ ƒð†3µˆ “Ï ›¨äuÆwšO^†Xwo¨æ‰åd4 îÑÆ†\'(ƒ2 ½‘Œm¶vS!c¾~ƒ°|2‘†ªî«8V¿ù–•挀ª˜B0Ä.ev¬I:™ïkm²ÜI•f/±X%}kjmQa˜ôl·ým;„*ü .ÕYl’Rð#€¨¸¯ °hK>í–½ÞoÌÔù97z³< PÇ…Áj¼Ê¥wêºÝ¼yÜÆã*~æ –r/eWRÔ[üD l r×xƒSrkëPæÂŒÕ…ÓÍ`‚æ$?Áx4@t7x@€.ókÿmØžOˆ±Uü…ï&¡*¶Œ7Hѽ°kbé…ÓŽK›ëà@0ëÖ{i-Uc¶z5ý¤‹Ø™N÷2ÀsÅÅËjÔ‹žÕR)Ïç–VÍd±RÆÆ•Ç—Ÿmfn³Eàõþˆ¥[ŠŠØ& Z{x%Z2C¨rü6°—à.» Ln D½•7ÞYŒ[ù8É@Øâ£H*]ŽK‹@§î—.Ýb Žf–9ÿ„  Ý®\¿Ä9z} @ª¸º¥8cVöùuÓ?âîæònÅ™¿^œYDÞÇBÛ±²"¬Í‰Te–Ä ‘1Ì$ËØ1I¡!Zš¿KѶC´ r@4u\$ÇUO†Úi™¨¦l#ÉŠXÓ++3˜AÚ:oOSýÏಧ_ÀAóÆqK‡ƒçÖGŸÁ¹ƒßÆÔyŸµc{¯ÇcU؆·¶ÊnÜŸ•¢©]ªÌ­,?Ú(F5OÑQx:r §ÍXÓÙêFÞNþ#®4¶!‹‰¥¶ •^¿¶n©ÝÊ-ø eS»¥¶‘¶élã@( ꦳M·’ÔMíŽ °ÆJ5YÊBÝ„1(íIÝÔU\Å…(Ã(y+—¾!ÓHÈk36Z„ºIÈïP7Ùšm“—ò aИ(‘B©›ÍÎG®ìû$AÀüî„È5*ð~›§üïü¶›cc;Ÿƒ¹pÕztÊ#Ä€L¿$j@J·gÈiªŠCLª¸Ý:Ä÷tÜbÀTy%P…ó°:Ïìµ"\ ˜¬ðåR€{h:‚šr¬?Ð×­T!Ãcæ’€¹\ ‹J+æ I@ f·$àg·$p@ˆWU}È%±<ÿq°](<¹ÍΞwÕEK´*ûƒdqËwÔe¡ÊM. L×¼…0àUH]À¹¯­Ÿ9ÌÍ·wÝ[½/wÕ^mêÉ) ¿é~Ç.˜Ë°óŸF£âÀ¡8`€B²q`Ö Ïf +1ÄY…H%¼=\-¤<,ÏîôéâÚ.§ØÌ󽥩t¿’Ð$ã qàhS¸6H=šuž'Ì·<0Ýš¢J"UUP²gÙOÃóTMFÿ{ 2äIòk[ž †¸#»ÌV†6†çé6¢¸˜Úº¸«ÿY<¬êªâ®H jÛ馮®ñ2Ð,ÊÚ½Þç2c $÷Ï*Í2¥nû꣡ZmMe3d 34X˳µ¢P$b³ÇÆ×`Ï­üÑ“øÎÛÿ¦v÷jí$ Õk§9½¨=Êõþ€€Ð¿X 3=ÚC–Ì 9Ûx@gz@@BÌÊ i[×.Ænë’Ìc"x ©#*÷Ñ ï¦·É^‰A›³]uFµ]˜øQ‘*Ç–&*R—~žŠFmAEê’¢'¨H1SP‘ª”Õ•IUN'Õ©Heþ(€ŒT9xÔ{¯Õ׺•I•jÖèÑä<**RU‘¯yA|ž(1g€¤ÚÍ "G[T䀀ŠXeª‹ôǵE3?ØöêÞ²©h*ˆHmQ•ºù±6©›ˆˆ™©Tt2éf Õe©CumID®° ¶æÖÉ;Z²ú•ýשT†‰£rŸ”Þ¦Á÷²¤FBª‚SU;{·ƒ„ÂúÙ} À} ñ|©fpªr‚¢ Ö„™Qäùp¹ >Ë UÒY©Ro7:õ ‚‚Â1àë0µo¢ GÛ)H€DA*³*¨ž5½*©(ˆ]m8­#»Íºˆl³.cxx…õø»FO¼÷´lÇ%C‹]@?ÌÙ¸‘ UÁÇ•|îÜG<Ù¼TY8.µ ŽK*‰¬ªÛU¢Ïlyª›‘Ã’WümrXj$ü—“ý$§.P¬7y+½=îÏï[_ õ.r|yÝŸT=š&o¦iÅaA»ë¹Z=¬©ÓÏ›pg7mèqd2š©: Ujöß¡ËPî6g*]¹kfè;o^àhK¹)w“â7×íšá:ûË»õ ˜²[ Ó6§%ÝnSÖóºÝæÞð¡ÛmJ'ª‚ÐØ<¯‘̽tèÊ]³8NÎÊ]³õ©˜6-{»-õn@’/E%Ž¥Þukw õ®Ï-®ÉùD°mÐbu `é(£G§a¶RÃÛÀ€¦Œü,b|‘pT\T:žJÇÛäåÔBÇkI:)–t¼ÍÓ25*y ÷ç&oëBf¡ãõh-nLis‚ÖÊ;í ÆC&ïqŠ#rØÈâ–p‡ÄÀ&¯ÝðJ6:Þ£­ý#àòšèáæb¡riÊ9ÞòñˆŠ¸üÆ!™k«QÉ‹ëè«Æ…mä–¤ãm26¸ŒØÈµ_›_êÁ[JÇÛ¼8.u¼­Ë#H:Þ£mÇû}@¤ãmªýÖ¤ãmÊ„ÖBÇÛXB§¹Š7Zøw{ Ü;E¶ƒÈ¼7æö ½-t¼m—±¦GÄ">¢Š÷ çý /Âk¥…_\÷rñÛ"™£.û†TÑs÷‹“‡6|Òº\ÄÑbwä)ˆÉ–›…DÜ1Nvr­ùëѦ¿ËcœL«¸~InD~á×'ƒ_œ´ÊÎÕri'— SzšG/”+·¸®çnq½lf›>EçæK/r^·8™ ÎmšÈaÑ•M!8R|º>Cì4ãhIsþ3Ñܳ,þŒA ·8iÝIÅþõÍ£bC#6†ìÊáæÞòw0©°Ákî'—9Ì Q%ìýâ¢~q„~qRVs×yµa½hágÊüšÊ6÷‹{»é_C¿™àµ…_œ—irQóÎ$ô¥‰l¿¸®¼nM~q}mÆsñ'¤…á×™¾¹[\ÙŠNùö„_Ü REnágÆ~±¿ô‹ë*çÓÂ/ň׉5ÎÀ Ñ£=Üh?8ݪ¸=yÆuZ]›ãú “Žq^À£…cœU<éÄSpŒC‘šx¯+Ç_ Ǹ8…襣¡ÛÇM{v Ç8s™¨M¨sqWë.í þhá÷vôŸ}¥¶6s(Áf(/Í1ã¾ÿ 9L®©N©Î6 4‰9²\›y¶ã€›N6„±¤ìiî‡$ÏC›9ø²B›9²d<·ÿr¾÷`NéÔfŽ¡Í´ší¡Íôê®Í´bùÔfšµ{>´™¨˜òÐfŽ3…6sP@ÙÚÌ!K[h3“„6s°dn`,«ÒÛC›9„=T@Óµ™ý–J=´™¨Èsj3íÆÍC›y´¥Í< `FíÖS›icö‡6³ÓÃQÚL«¶Óm¦Uã™Om&ª©ÚÌá^ÒfÚM¨m¦|:µ™¨ƒ±µ™¶™Á²|kû÷_«¾'mæ`p÷©ÍtÓ¸k3Í4žmf´C›)ÈÖfph3ÇÖK›é~Òfz… ×f>.WÁgÚÌ¡Ü'®Í2í¹6í‡6­ÍDážC›y´]› i3‡”ÒfZÑ’úÐfŽâêNдÊ19yž8WH 9àûßé¡çÚÌ‘eéÝÚLCõÐfÚý¸mæp-à6Ó>wî3ž\úÕö¥Ú*m÷¥Z¾4ºR­˜ˆ\©Üˆ±]©˜Ì(¤excíµªâÅÞ‹!hxZ1kávÄjÝÇ ]L“µá®‚Ê*qS‡ˆÊv¤rˆ;R± ÛÒõò+ ¯¼ü1ñJI”ƒ,]u‹œ=ùA¢DF¤†k'Äû\ZÊ̶FHrð„Kí‘§zZÊÎumÐîäsü ¹ÿî\T„ÓÒñµ¢œ PŠ GîbN·²'d¤Ød<$L`ÖÏ¡0ñ¡wCI5¼ÝU*ý„ÐW2†hÔKÅRÙf&O{ÂTƒvgYÒ¥ûXßL›ar˜ HmU–FhJh‘u`åË¢²ÓàO˜àÚ´³í+qÈ€vöb»‹¯ ejÜó˜JáóœÚý<.Þ!óö 9 Å‚à³™ƒPŽBìþýä¦*#±€˜µ;gŽ@ZoúÒ®b\Íþ}ƒdáÜqN¢‚ÀiŽ—µÍ¶—Q•O’É:Ö×î1¨eô+}ßQYt†›Ä,wÛ¨«^¬Ô‡ð‘#ַʧ1•ˆÓ¼öv?äs¹nmTÅEt}mù9 ñhãWù5ÐÙÉ‘8#úE·A>;8uåÓ¥êöÏ׆ ȧŒj¾¹tÇ‘ŠÝîªXéî:%´¸ÿVëÞÚžÙ·0@$UÈw%1ÚjgÖMc­—¿'ú¤0ñæd9j— éêwæð¶œ¬6ÀÌÅ!¥U¦`ÂGk'O1n$ ¹˜Tz"hhB¥—x×äîƒè墭ƒE-‘¾#@\OpÒÓ‹)ÔûáØE«}êòétéLº´h7(¾Æ™X”èÊ>9ù$ï94O¦x­ò[i õ'jö‹Õùp黓‰¢'öÒIU)Úm¨Ü“27 Dç,Sz0—|U€ iÒWI“¶¬vsˆÉµw 1¹{hÉ5!ã'ݵHzðüÁÎw¯Ãï»{sˆÛ}@©dww ´Y¹€9Ï6ÕϹüb¤©eâ_|RìY[ž·E Çé Yw`æªT‚ÒÅÚgÛTÐö& -O¶™Ÿ$ÍÈ´ñÓLÊþõÕ^¾ÞQÞgÌ~S›’,뙲-8Àˆsz x@_·1ªp¬[º@î/ µ²º~;ijLóñdqàÆ–Ûƒç©LßÅ+߬Û+÷2î{åãiÒÞÄèë7hoÆç¬¦»>D$€HBa÷'ÄÞ˜AH$ ã^r´òvÊÖ‘@äF#,W!>Ò%ô²5 pc.» s4+ó'©G[ 'œ0HDáíµ¶çŽ4Ý&å‚ M$‚M‰À ™û¼˜ÙÑØ)´k¤Dì!ä8$,ïÐ]¯`&ƒÝƒÚ;|”²"ž…¸hÞÈ©ÝCúPªlûA!ŽöPT‡L:¶cœ!µLøF­¸Ã"±0 ójzÏw¥î£·é:fp"K#å½ùwˆ‹ÎY€BÄ]cÑÆ·Ë¨3ÍÄf$“ ãU~ÖôÄÄ^:!a·»„ô^2±²8>#̬ñ6š*ÓÛ<¡¬µ°Çbˆ¦ëmGÝ1*o²§Ër٠ȾèùØo8~뀈è@œ»7ÑiL8íD§1×ÎAuLÕiLö$¥e݇Mu ´ž]œ.-Æ•Ë ¢ƒpМª`¬+hºŸ4çíè?_ñŠÆ‹?_˜ ˆè0U@ü™ôÊFiqŸX C>qa2=öMá…³g¸Š‹%BOê½ÿnÙu¹þÜ"bŽTX­û1…*¤åSdûòE|]†Â)££ô‰®ÂÀ{]D>Å®OøB)‹Ü=¹‡ðÚñ­ôYÄÖ—GËÖp‹à“Q]æà7è†{ õ*á‚|;縕Ð#ï×$x†кÄxïA´u…(!ŸüCÖh#Ž Y;Ÿl}´GXøÓ‡ íP?'ÿŽïSšš1¿-Åû£ÃFã±;ÓÇ6H¨{ƒ;œ$÷ôˆþrȦ9rq;°Ž &­Sû­_ýøÙ~~š7Ì6ؾê1V–õÑ!a(’ br¤ûIEgáChmçÅ¥«íhSFü~@LrÀNRÇõ¬šØ“›xFüÁ`ŠÁ’æñ.”I×ùtèã½»ÜxøT(ÐÝyK–F¦Å¦÷¹ú“% q]»Û;¹¥Cfå¡p;¯Ô™®‚uNÙgé½C¤èQrõ{s ÿû½º%-ûÕÃ&¬*OæÆQ>ö›»B‚ò«=E·½Å9ÀVÀGoÿE'V #ÑnçŒáÅ6VŠ•»Ë £ß¨AåS„Ráô_L^àcðëIí¥ ¢ñæy4„¹þâRlÿ%¢õ§wB$Èö¢gç‚,x9Öb~¾Bе€ŸI )åz´¿549QŠ H „øÙ i‡B„‘CNÉz޵‡Ûs0b{Uq)6!ÅdoQyýqøøÙˆN„„ÛßåÚOGݤ([înbI;ßÖ!{küW›€¾ ´;‰^î‘7ow7‰Qyäóf°®rFë®%N°ø)ƒðàäxWdˆñžôFë gò§ýh{z@èCtEÉùWº[2ú”6ÚÈ=Mi–÷JBëÞ—È´îÝqó¨"ÔJ:t÷FëôÛã4fqžëÑö•8dʽ#†˜ôF‹¯L—ÚúÆU`cžK6¼·Cáâ"ÉׂÀú¡Ö³8²»Je€ÒÛ9UÊ`²„YøÇÍ6œ´¢½¹ÕÍE AûþȹéœG£‰8æ)š+ ªÞ zK±â0ÅíØÒÕÑ>…A[ŠÏ0šûªå‹¼âç¾ Ãåcß%}^¤)fçû<]ÌqJó9®+k§íß?_hÀ“îò21v †xn@5?˜H’ÊÜ(U±b}°@•˜Ä®æ7C@æþsŽ[6n(ó ¶Kñ%F¶Ùý²,%ºDѶmô´õ4æ!Wï×@à¿ærZбµ2•S![mJ IJH#-…R_!Z4ÌñªN3öYs7Ú=*ý0ªù®XþÕ%E‰¢>D¹æë¼ c}½_ŒëóíébT:¾ñ‡Nó-?' ±b‰ÅàWp]?î6_Ð9ðþÙù©ÏVUžR¾©°úóÅÔt©MÐîÁ„ŒÙ$î8ªÞì Ï-³"ƒÚ'Ð(Ø+¿Ò³ ùµF·"{‘w)´Ù%:ŽÆ*Ù¬îqËÔŒúÍë–§H‘íãHðdõöòx†€ØyÍcF>\û+ÿÓxÜÔY®!s›¢¶œ°Ö£ öÂÚ²¡c·lHо¡k Êå¾$”ĉ„Pr@23zfåÅÌ»4ô›úau™ê+µeVUwù!™Ö ãæ¡˜Ä‹v×¹¦;ÚÜ s‘sˆmÄ…E£#+£rwê’!5ÅŽ"WKa@m9]:¼½É!7¤ºcˆ[NäúÊüUúÖ±|¾¤¿H;¿î#:ZAà)]ùú<<bÝZgx€= yx@Á-^Pt«wx€C"<€CŒ€Ïnœ\KèA„£lÇ4ÇàJF¸AÐÐ!¨’:§F ÷zæ•=¢ 1\#¢LׂY®³¹c`âÿù…ÐòÒV¹›?§p+2À§è›ÍE\øþ:OÈ#(ê:„…À«ð5H×1ˆ¸D›‰"` Y+BØÞKsé~ÍàCnùüʹß>N_ NóÚÓWÒoð{ÑcÀE0F,¯}~ƒ%¸÷,hÛ³Üí`k¯Õ‡X€AïÃ…Óð å4¯½ãÏ3ùìBÊ0LûŒ©¤þ|¹C2>DgWh\^MºÂU*^mӑʤ 5–}§ÐyØ–ó0çâ9ŽyÀе6ä K˜­EîáP7.êsøèJUÖ(²‰#GÙ ð´méa÷‘—ÆÈ öòµ›ž¸¶ãÖvwø¬¿+ó5ʰ齀½4çÞ¹·îõj²çÃõÄ~U0é}н4ƒ¸øK;£¼ß…7§s—\ç:ÅÅ}€øÊOˆÍ×ÚÆf^{å…Ú¶cåLæ+‡á;ß{i¬Hªæåµk—^K—ãÆ>æE×É‹5mv{/Þ!{©Iôµo‹°ƒî#–e9~úq·“,ìr{RR¹ÚØkHòιyoGq§®Ó¥W8«ÏÜpçë “û~?%žàÌôX_éSù2åša¯”W êvÛe…œ¯üsŽ"²©Ž“þ|mÈRÜÁ !ÐÈÆdÖCØ"× ›Ÿ9ß:Mº_WÑhzöj#”wvQlÞ¶½ö¯YÅrOß9Èÿ/&èÎ}¯FÅìlâÊ"®þáæ¸=¡Š§>ÍyaïÍï½Ê»$/Oߦý‰ÛG Áoo|y6]ዸÝäg‹…B|’ûÒ¿¾Þù¸‡¬X'Ë‹¸¡ò–ñ Ÿ÷ð¦XWUáß.:ÀDžô¼‹ÛÞù‘%Û_‚–ßënžçヿÒïûFÿ8‡‹Ôw³uŽuýŽ•zîÑ£|Ϋ8zÙab?;-5±ßCx*nÚˆ’µ~Hí ÔÊoÀ=8.œQß ~Òsݰ$€Ž¨þ|19ë}¢®€Ä·ãW¾ ttâ|Ž‘c‚H®`ßò6Èç%L˜TœVÿùÚ=aúÞ‚lZ}€šÒ0V]8¨‚Úà,×5jÄ6©n”óœ 5*Ð6­¶våø;³Á2ƒÐj3>·¹iuk1Ū¬›lÁä$×0JϯO}X>Ð;ä:(–åEÔ«—ƒùOp1·¸®éúÈ{K´qÛÿÌjÕ†P¨÷`è"†€6È2 6áªÈ·éü’ ]~d¯>/ÇguŠ¡KÒ«ýȇ‰,ûdA›òjoÌ3æz ˜Ç¥7y­µ[ ÎàþÝb‘\žCEàüuðþ=m=FbÉÀ¡fe15ï¯À'³ÅhðùR](:ÚÙô(L¸G\¬>õ¬{ßéÕÞs Axµ[•[‰^íy‘ødóNecɞĊEeÃCa¦óÂ@«mæÆ>νPrWMu3IŒáÖ~´=ð)@KÕ<}›ƒ 0ì$9ÁVPe'Öö µuÀigßXV¸=;Ü¢ |RRE|cîç†[{\¶E·öçmôCÍÄ< |BYa¡ªÊ#raDUsH:=ð©³]p×fiu\Õ˜>Ù[&T=‡`7œ!ÍM<Ö¡ÝÍ÷Ž|½˜d£ûÁJÂorQ|[ÙgZÿGl¿ø‚Œtw9}äÉ è’\Џ9 ãÎ (Nµaüók/ÂÞ›6H¤ß¬ú o}£GsÜzÚzçù0*£eœA}·vò((ƶ‚‹—Ú(±9G{ÆO\_E3œ±”ï%¾?æ!n,æé÷Ú—âÿÚ«Ý]üºÐRîûâKl)Ëkï¹8ÏçQkZi~rÄAl™*‘lå¿þØr !â•fPç°QkKÌ—xp[H[.·´f>Ëœçã#rvÞ³è.D—G˨»ÈÍÈŽ QäÚ_i%æ y&æHyG«yèÚëTßÿ=·iïÛ(iHÛ|í9>ObÓÑ¿æÂI– ç+€–F,>ÿ÷×”g€5X¬‚£2f/iT€Ÿd+¦BW+ýfCÞ‡anœ·‘ÿ×§Ü8•¡j¯Çœ†,@QAÈ^#ñZfÕ]úôZ$ht? ÿ€ý+ä_¯_ wì2Ï‚T7ÄvYXka-ˆ \fž(™±Oü<ò,–âg«I!5C³xÊýøÚÛZÿæÂ‹„/y!Ý}x‘fÔ “¾¨Hð”o$xz´2jIe9cF¹Õöí…ÁҙϽ3è?“u‹iáÒùßÂŽÌ>%ÉQ¬1¼þÕ.L@N‹È1䯷ð^aû Û–Ì)Jög Áسâ?UÞ€[å‹8öîÇ]T@ÆÅR6BR4A(!™]¯Ár È/‘—Ü ”~€êÅg3“š²]Ù.óhÓÂþ­A…E£(»-³ Z;«‚ !ØBJ6 ‰h»˜€v«ÍF^££î2Môî®|R6¥w{}–3Â4Ê-ÉÓ*Šïhª+™GÔGô¨XÚ¡3X<¸[àÆåeŽÊ2yÈÑ´1Íy–Ñ2d¶mߌì'r fZßPÂÏ„a<¤’9 DÔXÎ5l×Tà`þ[ßG©)-+uå¹RJ¢© ÇÃ)”˜"ßrhWH{(ºå èŒõK¸Ìëi|)ÌQj÷‰Gö‡„Çšôr˜Œž-¬½ªÞ|”à¹"X^ZÑ<æ¥×[Ur€NÜ1928¸ûÙtŒ(ö›ÎOõx¤Æ‹.ÿEææRÄf0§µÝvišËÉŽ„Iiÿ|1uµðÐôZÈŒx@&RƒdF¾þÐÚî@‰®ž¨™ƒíÆ¿÷é΢|:Ó1¤jQg–rz´U“aCŠ÷XMO\¢QgDìÊ5tñ] ÞLc˜”¿×(ÃïÂ+I½m‘ñù s‹VäA„¾å ,hyȾ dŽêÊEˆ!1‡øú~ti*ฆj7Èótq/Ú2k¢[1Î)«,À(q”üˆ9ÅïÓÆ ÈŠü¸–ˆƒ—†mDàoÀBîÇ’Acx6 ÂærØ?zÜÅ¿¹U¢ö‚½‚žÅVwGŽÝ]a—PÛ† L†ím¾ÝƒÙ?3ëæ1ß=q°‘ç®âyøå3§Tq?‰éQÁ1¬W)ØÖêyà`ckD G`jjQD•$ȧ“™Jël7Öäʵ[d…TEHëìR»´À\Ì^Ò«KH—g~“œJÎ.Ëœºù6ä‘îE4²D°4üÖîùÙž]£"+¦Aîm 'st0 äó'0±v§è¬]eíŒÊ¹†tk–D Ddw—½Üy&[l['SeÎȰ¾»dæò/I«L²MFÍõ"ÈXWxÐ ˜b ó‚£bm½=ÓEWîc#Q5ËÍ|²Q)F:ÊÙkHÒ¶,~W!lª! š”x‡ÁÞ9’4}d̪£öƒŒuV ÚÑ)Zê‡Äšv¶SâtÉÁ·žíNUñá1²<5¯F•r!ñÔ¼ªEsF”÷œ ¶3TZïOþ’p=È…ÚÛ§=™ö•2T:á~rËÃEýV%¹¬QmIx2c$TÀÙÙ™³í6ÿäoé8íÅJ#†Ôw†xšß•,”›«,ïÍaz‘ŒÍƒÚ)—ƒíªR—Un•9†È¢W !'?aý]`%Eº›JPïæR÷¹¥ÿiÝÙ#ÛœVU¢h‚¡"†¸[˜­ï„<õs¸Îuæìf‚XÙ{dñ.Lè–½¥9´Y1W-„µQÃ÷0(ÙO@?Ç0\ÒŸc<çòÙñ‘áXç|-~ÌW¾Ü¦¬½ó ‰>Wd~8~&ȱÌÎÀœ…¶E::iŠ¿!ÿnaUóldÓ1ÍDœ2Û,[)5¼®©çŒÀ2ó?ÊÕÁãβh{›“¿7ĮȺŒ‹”7¶R"} ½>Iãïà™.ÞÛô±º{0Ù¡ÿ¾1DùŸ’ßµ§ ‡=Í1ÚÇ*âëô!|ô‘Ø©˜Dì¥&{ý8Œë{C˜ÅŸ~J°Ôy™k8Õð7ît”8bSó:2õSÏ2êvúvæOÙí½0AL­^ú1Ôæ}EñŒß{Ƣϱ§Éh®}>S‰ç«B€üï™þ¨ñsV:?À¨ó+Kud'É'y´e8ÄêCÄNè+±Y1ßMÍ26ûqŸMt–t!í‡É|ð…ÙO¾Òeû,º´¥ZÝ*ÇùøUóõœ?ãÄ“ûúgYa˜ÞFâ¦ü»Ç‰²Q¥òxþèÇÅÿ±¥äfZ­ñ@n¦Ä*÷C/³œm9çW?‰éGŽa›Ç0ÏùüM=8u±ÜÝgÐÉLŸÄõ3f3îÍmRólÐ9òþÕù­ÏtEæGÓP¼æLÖï_–ïúo©ò AÙú#¹ÞúÛ/”kªÑ¾GUN,‡c+qk¦*²P¸Í(­CUa²‹ìõy‹ò˜Ð Æ6ŲÁÝ —¨kÚŤNÂLÌΉŠ<³$%˜cÉ?|wtzÃ)* ‘ÁloúD#ÔÕ‹å”!ZÂ6VÃÈi‘TrL  •¨0&Ó‚˜O†k ‚âžT* ädkιÃ`Ý„‹;KºS—àí²³»9[°­•WعÈxlY3š»BóÍQÆÀ'®Ÿš¼·;ò½7Ħu3%ãÞ´Q«Ø’YÀå©Ó¼¼TìFŽfˆõE¿¬ÃÃmVíÝÌ ‹帪±ú €ýʨr€÷/°ïõ}LB…n|Ž\X,¢z^ ·•暨´÷c–ÿ°Ùß÷UH #‡R¥äÚ ¬:iÆ|nWaøý‹ªwå  7HþWä7 .³¯àxžo‹ú¼p™N…3óÁ¹pAöש Àµ!{>ø7äßN‡!aúÌùߢO3?¦ß…µ§8·¦ätǹÈÏIU…?trÇoüä[eŠüT?ÖAùl ÇÁ=õ7ºO™cáòþ;î½pæ›~,ÜA¾ü™S¤ßú'{¶.‡ËÒ Cþíº˜ÒȼMeuAäçqÂÌY)tä0bÎû:FÞ¿:>õ™šW:Á1)ÿŸ¯`Ä",ÄÆêe0*„k³À§¥‹5Þ§ÒÄóMÉXƒ0‚§Ð.<£môMÍoI´©=XK<«…v~Cʹ"o ›(l*…%J `rænGé'p¢³M/ñ’9¯ñ!p{ÉÈjÇIÓi9ân†‡q¼¢d×^)5¼T%Õ壤f#ÃG_¡ƒ‹mOZ`uF+µgP"˜{ÍÔ³m•Ì HRú1}«,_ ­ƒ9‰Æ,q¼ÜʯZ(Hs1á^Xå-µ¹`t°¦-ÃZ¡qàÀÊ®"h;»8RhV-K$ø¹äYŽHVU8 n¶±áöIéhƒ.…ì»مĘš&O !IS5ãá&ÊÕ¾0µy]ÍË`÷éö½ã¿¹»:2ß¼šâD Aª*™í,¥íu‚Pǹ¸EV¬fÑeÊÝU˜üÇ spˆø±{±ø¬à©V‹J`ÙMÞ>¥f)òY´ÛÕ³e° ªÑ#±êz.D»Õƒ=€kõ¢0ü4X¹¬”@ møVZ…u7à%%9‘ª mÈ­†!°ÁlŸ‡Dj“æ¾êY«ö£S"€ÉyYP6×hîâûÌ8¨²)·ËÅyõ1àr;'dèÐRÈÅETêèÄÚS'„Æwÿ:¿þ{ßtÓ8†Ó#Û]°oS$Ïщ@‰èC&éH¼ÌÝÏ ^MíD”@)6!ƒÁCŸ ‹èH0&í$Þ ;¶ã¹Ô¿%æ„ZÔÞÇ&iV}Ï ¤>ã܉ûG@¬Öh+9÷¯)@wÿ Î_U`Á³KCÊ9Œ"ìe«‚ñ QŒ7ʉh:PMÛgFyÕs¡Ÿ9Vb¾Ý– b§úóå…ãŸÈ/†êR¥¢×‹QYp<˜ÄÐfà•'z‚•ã¥ì´+Ã#ºBÚ|ùbiz̲›´HÕc¦a¦€ Ê{ï`…'èÒ }? ©*fB?*ª¯(+26¶ÓXWW.ó$‹;‚BTÓVÖ¢ ‰MTå{ƒïezõWdR?v¢ÁZÓ†º*‘¬ägs²Œ —½ ¨pm€)®%/wåz¿ÝAh8~GB«Aÿ~ðD)€ª)³__»Ãd i­r%¡FðD|ò8¯¤¤ûª±²ÏûeäGb!™™%š›×¢ŠSh¬(L@²u8gTgïrÖÙ˜F®²3×Õ¢Íã!‹¿{P¨žUQ)Z†v¯‹Lò¼+šc¦«”3‘ôúº|e¾°¿‰ `Ï*KSnÀ»ägCdqS¢×s £“*?C÷¨sî¶å*ÿY áë9Ð_Ý#p3œ²ÿ|m hWaðAƒûƒã•Þ«’µW¯ú,sxxúc#TFm9y·õèQ C“_É’-4 eܲ}ù"¾.ÔOí2ü9ö7’¿Ë=Di¤oÒIÇ_I:ü¸Vï›áCø~í¯´c{ë9ÇçQÈï!@ö…¢Ã (F¨7ZŒƒQ8³¬í¸ÿšPÍÊ_ŒÅ-Š¡Â›ÜH}GJKÜjóR–nÀÖl/ÐTˆ¥hã3Û“m$º°49Ó;èvç ø‘¹²qÌÉÏBۋȧGá^‘®0| ‡UµîI“7 Ãr=agYi‡À~Ýù ù’@lJçTÝ‘áæ[åÊt<.a©MZ &?ÁäuºÜ5ÝúÜôEwÑŤLÂ*’ƒÈ¥pOŸâµèŒ±P†û*y[7×êlí.9> ÿäîÜP‚åEþ'âP“Æ \eò1ÚŠ€ç‹*›­Ïcfëó¦dwâ6´‚­ô Ç ¯q&·íûqDíÏìréå}F·ÖS@¿ìu ²~_zQ¿ u{Î º’)V‹ÆBkR#QÝ ÜiÞá´&ªf…«[Z±%¢*jcþã8Wá”Ë6ƒƒkñtG–TO¸¢ûˆI"õíÑöü‰CùŽÅf]ÿ 9H™ô!E‚¬NVªÍ·Þ:u.Gç7„–&n)o¼ï”Š%n–ÚË·`°Œëý}"+2ñqÓUØ©ßÒU&z?îÕó~|ÎΕ% ²`ퟯ ‰»hYÖ ©ø1[òsퟴ!ô-;!òþYz¤@ËŠ–…¿ø„G–PŸhú°$ië Š–âÍu3“†¾˜AÇt÷-ðŸ= í€`.0ÊyqÖæ¤:a$²½‰y®F 9g0W¸ßG—½IJÒú2rüÌÀ!<¶soò9Û­‡ì©Ø6$Q[oõË¡‹ƒé$]ŠA䢒ž}G}øxÜCiÇÁ²"ô©,ØÅ:ôÈÔR)ï"ëÜtœÉbî•1Y6ÑÉÔËñEõ¦ëT¿O€ÉchЧ„§öhR'Qœ6#Ûh²–ÒÁßÚH£×cíÀ›ä ­ {!çΠmf©[RÑ!á’‰Œa¿!–’X}#÷3]Hh€,Δ0Ú ;ðý€@c<¥ÑrYLé/i/Æ¡…"aðˆæ–Bõò!†^\}?;À¢Þƒ§‘Ô?R ޵™„ÁœpDņ0kìâ5ʼnæµ×þ¨H"7þÔÆ D.:¢6QfœYÒÍÓ¬kŠ{„j¨àOÖšG—šZ^E•TÓGµw|ƒyUÞoš¼³ î¦X½€dêëÇV’ä¥[Òy |V]¨œµŠpµ&ï˜ÁbÕPÚµ}B§ßSûw»vfUß?ܽ¬3Yºšz… D¤¾8ÒCÚ£¸×£=Ó#d¥eŸ#¸´Õud©;Žáj.U>žº‘9¬ƒ Ò „¶x±m „vD7‡ðGDsXž¹£Ž¥PMX¬õ|Ç|ŸI¡*ßOJKÜ`´—C~ÙÔÆ¤‹gYa‰ Þ sèý³ócÿÖWú›-ÎÊþ=mq¥?mq¨úwÚâJ·Å•þ´Å•þ°Å•þË=d‹+ýi‹+ýÝWú›-Îôã§-®´w[\iO[\iO[\io¶¸Ò¶¸RŸ¶¸RÙâJ}·Å•ú´Å•ú´Å•úËsÍa{³NÏö›-ζña‹3ËÔi‹³}|³Å¥7[\z³Å¥w[\zØâÒ›-.ý¶Å¥7[\zÚâJ~·ÅÙ2Þlq%?mq%?mq0朶8Ìï´Åà´Å©}˜y¢mqÚ»m‹³‘ž¶¸’Ÿ¶8 ã9mq6ò›-Î j§-®”§-Îþ}ÚâJy³ÅÙOO[\©o¶¸Rßmq¥¾Ùâìú¶8ݹÃWêÓg¯âa‹³2“[œ¹~¶8 „ÃWú/[œ9hŸ¶8+½xÚâÔ>i¼ÙâÊxÚâ¬ý°Å•ñ´Å•qØâJÿ»-NJë2ovx«"O¶Á3’¥«,©ÓG˜XŒ…9¢e‰tØš{複¥«¨4KÉ2ly Ñ è Çñ›¤mçòeí/=ú·b”d®b3*«I« Hv—¦F#‹® ‰ÇÀ¿!ÿn:“¥°ìLUØL¦Ü}U~V¬ZÒÔ1•p×´ ü)¼ª*× ‹tV[7ª¸»¦¹p…öv²Rö9}»Aü½°L(Ï1ÊË%v ·¦*PãéÓ[³²Üm¡:ÕåÌ­Ø.4 rÂ5|5k·\ÝW3 {b]4ô7dßÕª|¦Ç©²X¸C¸¾F–¡³ä¶…ÑàuË[³Ê×Ò®açÆv]eæçôv”kßzkÖ¥=Råu ©æ‰ÛPRÚ^raÖ5°³*=ýëŠ|[ÒÝ[óØ6ykÆúk¸kÚa´ ½!Uâ&ÉEuÞü »1ùë¾›¬fy¶µþ `êA~ú°U^Æœ“èTZÄ$»òsú:v%Ç®ÒÄ}~W¬âŽ{ôŸ™³á?[NÄàNðû YÎ…Aì–éF“÷qóšŠè?¿~¦Z:GjéÑuu_óF’qB:»t·gWq‚û]·ºš°‚Ÿ+ý¬/¥Œcղĭ×÷?"ë€D††ghξ™CÝÐúP!žI4ïælkÁ£ÜŒÂ+ä‚H£V;ðÍ0¾²!¹m3=¦ëòvk¶¢î„¾aÁ“ ž¼ËåAÇóý€¸5;~$/%ʼnb[Ï„fŠÖ¤Fz€ä…p’,'d<»ôRÁ˜Z¸ïæ\·ý1Éž}ƒºŽ½hKœi–A{ÉÂThÐÞM7hrå"{£æ´TÙ³Œ.ƒö­ÛÜdоá“rá‰.6Zµ¹p˜†£G–B…n1 uÍ¢î(H ,yâ®UE8>o#¿ ‘A $ºR(,Ô€Âíl~:‰“¤AÛN§uWŇB1¡6ÏI½‡—‘*Í Ú·A ƒ¶ò´ÙD¼8¸Væâƒ%¿Ô0hke¾°Ï¯³Ò_Z´kˆ€nyGûW9¼ tvaÐöFèüÒà?sÐû@«ADW¥m‡Èi ÏMÆšpU±ûZevÈYõZ ÒN?š,ÖÌzèmš>íQÔ…ñsåý€›´»šD—Lêsdûòe|]ŠÌÅ>B‘9YŸOÍ›æhŸe–½Úבâí+õ“ù°cß«ýßLŸÅÞ~ÎrÊ6,dÉ Ý¨í€$£¶Ê±•$£¶’ËwXµõÙŒ|œN>..Ÿ?µ¹=Ú8ˆq‘j@n$Ö^¾Ùx‡Ù¿vk3\n#6 ×Ù9/üGˆò瘓_5ÎõŠÜ}ˆŒÏš'R–ÚÖNL+£Y{B¨­» íst‘Ô…LhöÉ9¸]{êÔ–v¼©+¢Ã®½!nמ¡j(HqlßáU¢]{²Ô‚Q;™µ§^D¢Y{М#Ä•USصóðE—ߤYÛ™¢fí¾oš²w›¦ìkƒõžã²ºÎ,‰4Ê”í ®&ÝðñÜIë–ì5›®`›¼ £ Ï7žšÒ&[ö¨hɾë~>qßÿ‹ÜÀÊ`ŠK,7dA~RKÿ|ù¯6ä×@‘ø1øçüÀr'L&Ls.™ ?ÒÁ®€„a H 9¡³Cc¢ÏÊœ“Rô@ŸAUìÙ¦’ö:A2l3¥M½©m‡ys4Ï,V™Ö ,DgÊc[ò ÕÚ5Å£yö·ÊòëYä+12:8Ê-%—µYVK3aÕT¿¼Ž5ݶÂvñQ)gP§I+Í‚JTΡ£m³ã¬À2ƒh"Œ†Œ4 ©)°Íª ö7¢Ê³#-çAÂÌ׃)ÐÿÀ,{®1šÕs&#¦îAÎuA`‚ö|HgXUoydˆU…o­Žª %Ð¥óu‰æuî’÷¨HŽ·¹rh¹lׇŸ½`áCK¨™gmè ÕþŽõ;„;2 þ™S×ôì…WÄ.—–o¢Æê!&‡K"iÍæ¾ø æÛ׌¬ G¸Ù©Ô³iƯëû„tí\ÌŒ]ygí1Ç›Ûk>!eý`š/šjŸ i#*#ŸØúŽ• ð9æ¥RdG°¼Ì ü8÷%SN‘'ÇnKWž þ¨‘#Áí¶Å5³Ùk$M8+ûZÜ›µQ`MÕÔü ‡úÚÏ…~rYN¦Í—PõÚ£k¬ÒçŠA6ülßÌ-‚ûÀ„K m`0û¦±Ò浕|VP[á_®¢s;Q»¯ÉAÅß_ž²Ú!ÜMpÅt°t¿B{ˆE>p”ÚD»¡%ÏÊê=øN˜Þœm\_ èÑ¥±T¦Í‹X”©jÉLà~Ë(P˜ÕÖ@ 9£6~°h)ÖÚ£ÉF~‘£CÑ'àrc›Uˆëå¹Ù˜ŠTÑÑÀ&‘ÙV“HY. WŒf¬fP”Á:[@*]I°em‡S¢’4g½y|5³X{ðî¢rŸÚÜ pO‚0ovÓ¨Xj¥Ä¦E"d©¶çN%c3Úu€¤z;¡ºí¸“íÄC—|‹”B•=P¡jÈûåíµs%`ÀÅ”?Üø<Ž\ì©ö Á–^Ø„µ˜¿)1¿G9Ù¹à'LµŠ“Ël3›ùn+¿l@ÌËà}m4sȵ†s¦ßr(9ÆœzÎ(êŠ V{x%¡¶wv°ÍˆUe ³IÈ;­19l¹x ši S2QƇ=ý[ 0EKÁ@KbLºŒÐú;ýöw†^úk Á¢-õÀ¤[jò“´'Ö˜ |éÖy 0>¶•¢œ¼Žwéä§åœxYMÂCWIÄ›ÊâtÚ2D2îà"7ÿ‰_;ÆŒvÊÛv-=+z–lQ› >­£ê+ƒ/¿ ; ]Ž*78³ EÚ½£ܼª‘2Þ7«z¡-ÇôRÔ7j顆 €žº£ý­]›§/Ÿ~gƒr;ÊßWÚæš¨gCìM²už\§j,*v„OŠ­£ ÷&ižM'Jú ‰ŽH#j¡‘ÔÂÑ’5¾ ?¡¦KqBŠœ‡ÇØÈªp¥Ñ|øˆ‡aëÚà ¦Ùî‰þŽ L¬ìžà^8“ ]ñÄáGc·µswœm¬މv^J%9ä³]\=t@T`èöeCW¨ü`A þ$鉠ç^@‘݃} T´®“vÙöõk%.m¾Ö¨/0uÇYàq·W !nJntƒÀƒW"$å4d<Ï!ÊS¸…pQZæ‹wZ†ýdIF®ÃŸÏf‰ÔEø=Ãí ÊYz dÆ•Ÿ¸ío`ù#GP3ÑŒ‡†š±ý˃ŸÇù5޼K†O¯hdx "—”rò¸@ÈÐÆLîs ¿…Z#œÝèük›ÍÛÉ1#&êL ¯Óß iYMšm‹]¬·Ø …Ëüø™©y´ÍZ!_w]ÑöÌÍi]ÊÆâ ŽΪz”/âD]›Š»¼)Ûr(3÷‹*Ì>Æö± ›T-Îo°¼°Ìÿ%Kt¾™Ùº‹/X âövïá†ã E‚þÁ“Ž<Ë‘Âô`Y”~#&òlîWydù?¹€ÎøÖÝ¡R™ ÌÅoøÔ0=é<…1ÉÇ*X¥¹å}þ…×€e•ݽ’ÅN2C:?G?}œ¡HÃò{°e¢›QÔ\»(AWÞ¦8¢ûèAo ×å½EŠ"÷èÿ¥÷F>ò±;«„"wXý¿… ¹ØG%rÄÃgÒÆ—»úP2k‘Zc”>ì/†O/¦4 =Ö ¨ƒÑåkQ……Ôb«ƒ…GŽû›ƒxò_’”Á¹=¼ tvèPIÛ¼sÜŸÈxï…òg{Mö÷l,òÿ£l̦lü߯þ'ÊE«ºø¢%E&ÿ|µ5pØþ‰v©4>¿.¥~±!oƒ@­ø6ìÿü Tlˆfx Ýé–ðú¸ù/4LÜT¡ ÂšvFE¾}¯§ß2ÓüÈ(`C6_§gM3xûûa&X‡¼F,DÕ™`ÆÚvšÖ¦N©eºlÜZ4Mv)º‘×0§î÷× 1/k£tjª¬9wiø±C÷ÖÔß G6”äØíë ‘ž]¬F5_;n‡‡ª2ð̱C¶Àñ¢ºKg¡ª¦P k3O¶õ°HL¬XMÞ?E4ƒ˜än³BáÎ4¶éS‰;cåOô˜0Y‘š<~À½@e'AboÈÁÚÞßeí„+®`@vv)~¢õ>ÚÎéoH†2Cà›Œ´&Î/K«€¯òïF2mNYoÁp¦µ‘vÜ\j—E½N®Ïgð¦’koY Êæ6lgÒ,^Ûš(Õ³ÈñûýÄÓ43áФû×;6{VGˆ,íâíVè¼€_Ã|þ³0sWù©ŠCšyÝ[™@kc…µ6ŒbT¾µÂdX¥Ó¡ÄÚ¨(ÔY~ðl]í 1å$‡HĦ.kòíŽXU?q¼2±µŒ@Û’JØÄù’<ö bKÀZÇâ˜xqCXÃÝ©^c0YRaykfÝ!S´[»t-ë  Á7ëçë׎ÚɰʚÝå†Lƒ;ìã²ÿ<<ÖŸ**öá0 ÖÚÜCf»ÄÁÝØ­=¡èŒ ‰aGÇÊ ]°TnÁ6`ô çŠ!n,¿±ˆ^÷’;­•Æœ^?µ¶©~Kgü³·¯¢úÂßG— š¦XHk› _Åý+ˆ9¯Œâ7ïû*@aŠ/Ý›<TÓ!à‡€Á¦édòLì±=Ñ6 úhg?ꀘ'œ§)ëÎ&Éœh²²&/S`ãê˜vA£©_àÎSÅ‚ûY‹¨Ï;G“G bLÞª ª˜ÞÔäP ¯•S¨•û˜+?ˆ"w¶÷D€ Ô¹ AŸ¦uÐÓÚ IÆ÷ÍD6?œWž¢I¼û­{S¯ÐXæè°XoKi˜šRM‚œ ˆ^XâN 6‘œ!0µëÙNÂ@an´»®Èô!À·)ꩼv¸¸Kˆ±ÇïÏü“ÐÝýí@·Þœb< ‚2VŽ-ÖÎ@(Lô¤°¹kL«tGãÁw´ë¾)Öôk…¥[Ú¼»òæáïÔçîŸg¢Íª¸Œ¦¼€¤Ì¶F4ZvÖn¥`´7Ët´Ö®ÚKF a“ý²ÛÓ¢àlmrþÌ+3ZáNÇTî˜ß¯o®Ü<å¸ÚøòxbD¬ª££æÅ}pé@†DCÜ•žIh’b)· iñî5¬é ß}ƉLÌuâD¦½;qâ’”â8qJ„ œ8õ(7RœÂ0ŽÕ¦°…Þ`uJÇŠ—Az¿Ï”[ý÷LPs¢ÅÁºB‹¯:š/žmG‹q´èR*Ñ"&Azëxß]Vôi9V{„1‚Ó-bE[9”#Eé).½8GŠ8’" 2|¥ÛFŠ»íHÑ!ɲX­UX±ÉGèDŠ6‡éihl婜je§éÆX±“]¬ø£ñ%;Z´lÝbš«*4o¬hãuXƒÅq´ØBôà ]Äm£Å%¥ãE\ ÊîŽö+0oaÅiÊxôµÂk °=1£sND¸âå@ŒÑÔî¡}m¼8XUxp÷Z,§ìhqÐ>·ñâ`ÕÄÀ‹X—D$G‹]ܹ£EL®UV;0#mãÅÚ¤\^<Úë&Örˆ#Ʀ}ãE¦?:cµÂWã• ï  u–´É÷*þ>EK…¡ºN¼¸Äw/âyÔ²Ñâå}D‹- 54Å÷µ–¥3iŠ„h*ó´åH+‹ñ#ßFáo°W¡[P=¢C·ÐT£³³J˜Æ¡Ôæ ·q>*ÌÔnlk eîomÝ ÖÒÀÙD[ä¾-èÚ<»¹2ââœÍF €fJ·EƒÔþÜn¨OÕ×>µ¶Eqh%eáírèzrŽRH:NÀìíñ£"öì„*°Úryl‹ -‚!ç@E»µ­/Ô¥=[•¤ËFd¼é°UÀo<Á˪0\SðvƯ˜òC{Сòî>ý,á¿m6÷7ÀÂk£¨³ Ì©xá¢øôG;Ý>‚”‘0<œ`+Ùר63BÓ s[Ë’ç­KwÈ„FÖtÅ9jHoò È}Щ>/’Œ Ú^”­õ¼)†r¥ŽY)=3i¥,Taä4¤` 8H¦±^g¸vƒ5“3ë£à¼Ü¦`Ó«mSñÎ$·ÍJz"è‚ÚïBl¦´¡’Á¤íµTꚦ1‚Ö¦v—Qjeø>à>P”Œ”ɺ¯ˆiºá-j Þļ±_63l[›{Ë G.ƒ‚S\âšô*Í….Ô~A$Êb4Ù–s‡r䲽̡Ï׿š¹Ó)SwY‡¾Ù­—`j‡’ˆKÌtÙÄe×í"kø ¡ºÉîR”0mq¡a¦€h¯Œ©D»°óön¹¾JnøB$ÞÝf±Æ?°­¿ß݇¸ÉÉš^Mé_èõl˵lƒˆášxQ)Qk÷$¹ƒìaÏ¡¡A¥ç8䆾B¦ÀM/sÿ-IÙ@.~Êà¯e Wöd\ã^˜ó"Úpµ•öírÐg49É(Û°™hr«#íêY»Ü‡Ö©³t6Ú•‚¢9·‚ý„Û šöbºó§UIâ­W@®†¨Þ||´ë*zRúÖ{ÜÓÿ[»K@‚C@ƒ±‹÷¦uýd>Èîõ}Ú?íd›0ˆËÅ"qfu ɺۘ›˜H^ŠH.ªƒŽÅCP5ÊõR Ù ÎÁ†åãmÎ`¤èŒCˆ´5Ýéò¼¹…|°Ä^Ü<4S^ΈZ@³8ø·ƒÿx9̯#o,ôº#‹z‡>¤¡òë1òæ$ €$ígàCÚÉÏ#I÷Æ·ðj¦­¼Æf8…Ôcq\©ß[âçõPK*Ut¨%;˜ßk#²Ûy&IßðÝo™â¤“´ñ–«€)YØGÕ˜¼>)Iß6gH-G aÚu’¶·ä£—# õQüôÌ8t’ƒÞÐ['9²¸Äï£-ñ; ÒI×N¹N^ÿ”{%~Cv08(oª|“58t’^» ƒõ\üîÒl¥dgÅZ—¾qág%Ëñ©0ä  ü:C\”R²»®‡Ò7¦á†>ˆß}“~‰ß¡Ÿ¡–쌂ݶB;×­¦äA|Ø û-Q!ÅAßË¿ÁÇ;Rˆð¾G’Ê[â÷Ñ&Ws7Õ”;ð‘DgC·ÏÊøj¸ÍªÈi†,ÜÇÁ¿K·•eŽ!¼/YËÄÝv–ûuùûYštà-έðZ›¸Ú§ÔÂ’À6ø7D¸‘ÔqÀí›ÒJ·Yɦ<^QáHR 8Ÿ3Ò‰<­9©ß|Su=Dð‘¥Ù‘ó/—ÀßpÞ' ü¿®üeÿûïqºéܲ*Öi~Bôcà'¥Vy øo6ä}x ½¼]…þ{¢)ïżæ4Ç¥L#ä' U}r£_mȯ¸˜÷Á?ES¶(G½Àéý¡µÃ2 õ|´h>‰²î9¯/–µÏRœßú¹‰Ç°k,Vt‡±÷hËH+Ã{wqsêk# ðMkƒnüMõl ³f¥gÈ•ÛÅøfýØñI6óš4Hâð ntj*ݘQÛŠš1–Þ5ˆmÚæµo¾ÒëhR1òý€”N|T­2öâÎE^ò_fhRáfó ´6ë~‡|1EÚƒ‘àK™ã$ÉIäÿ‡fa܅Ƥô¬€_þ‚ÈRAl6^e©Ÿ ÐU;—Ò©í2 77…`eñø]Xáw›{tm¥Ÿå:CaØÌ“Ùhù8šêo•Kçê`K¾{´¿­ŸKƒ#¹•ñÍÓwdò>0äË·èšr«"^EqÅi3Ð…gò¸¦r((~¾*ÚÐÍe† 6UÉQ“f¶¥€¿&¹Ò¤Ü€‰ïÉ\XX!lÍóÞ6ä9ÛMú±? ðM¥ï2\ÙTLÎvŠêÊÃ¥Å/˜X_B¶æ¬ jí‹:ôDU?ë›§9¡e¤:YJЮ4‹D›j€Š 0Çnð gsîÞ@™ôLèô#·Û½hì?Ò-Ó"ÔÉŽ:Ž`gˆ…ê}X›§‹(ðèQœØèßTPCÌì?Tø 6ädÈǘ<>Bßþ•|PÇÊzÌp7ød[{iú{îf>XŒÁk"êF.÷xÔhËÒ2ï£G^âÚPD¥·DˆÎW؎η° }l“Œ¥ìVÏö˜‚áÞ­%ÀD<]ig©äg;ÿ !5Þ2”Ì  òF0No·ømA–­V5(Ù;´u¿úô楃nkw`v®¬¤·°`ò¯+ìiž’ÂHܵßëÐGªS[ÿÜÏÏÖ%ÊoHýÇ-B¸2!K _†m Q­mðHol)ŸMåÞÝ ¯4®8e™Mˆnq]CyEÌfü͵»,rvCFÔ¥­îçíY›!ÚpÐÎ t@VÜÖ÷éà0háõ5s(­yºœ<¥Ô@Ø ­C··­˜4šshþ Lñĉ@ÐÀ27{âòÞáM&ÿÆ~Çõm2ÙénQ>š¤¨òc¢"×àV=+ØK§9ËFžEN혨átL‰¹7›HÓ¥èy8i uoø«÷^~6ÄÞ¨+,ØþwšŒËÆ“•/hÐæÃ7í²eSö¦„Ãî¿È]åkžbÅÚ…+â‚ÙæQ!1öÑß³ÑpÜQ1̣Ŧݜ缹¯-i)t!<·>²!ý³®ÅpÙQN~Ô°2ðswââëIÛ«ÿ9æÃý@8Õ.ñAéãJÑ'Wn¹.¶»ÐdÝëÑV´1Š·Â.b7ëtœ0ù¤ˆjS×n(Á¡‹ÒbœPP$_ú¦Y7ë!=ºK^–ÿOÃ)cïþ4*×i‹lïœÄ;¡²K¸ì³=¾H®¹Áöý¡ù.¡é‘rÆ£"lÕLé·B~ ÄN$Lª MÙöAúŽ`\ñÀïz@ÞÇùŒµýYf(|J)£úëöi¡qXŇÖ4$»XÇ!‹ˆê¦ÐpgˆÈ¿d—£ßGu5`Îúè‚òk6‚ñGvS© aݹ8ÚáM¬¸‡Û³Ð”IHìÝhŠ¶Õ ÁÕ$g°@Š\_ävÝrˆcû´Qz{æ»ÙÉ¡€hSÅï'©®|ŠP‘:¼ea£ÂÌT{BÆSõ@ŠQy›ê:P•ü0žÜ¶šª…4–íĹt‰ ƒmbª)›é?È(GyZ ¾y·4ˆ„ÄÑiƒê9Jµš[ò1TÓêAp2=(†íZ› 4,’äÈêZáíM²TѦÁ\R»ý:Œ·ç¾0@&w ñÜ6p’œOÿÅÓ<ؘä×Ë ¿41ù’ìË(|4wÜ@=*ú6MÙõ.îŒpÒÍ]û?¼½;,9Ð%æç¯h[À\$ߤ+GÀ2$™‚¬’„B·±rô÷·âœAVuÍhv!׸ͨL&$ƒñŽƒï®Ê4µ©\íºKý úý‰Êq-+?¡)ñ<ø(< ºø-Ü‚oÿúHãî©ÊgŒ³{R‡€XN£·×ç<M%ça–½©µ*R¤§[>½ÒŸAX%µ¯¬™UGA j£j®nÐã,yôÀT_ûYy 4TR/ƒTaÌ"»Òãmê6±¡”êƒþs¼VT«ŒÚ•µä&'©9â%o•ŽcmM´¨\ÝnîÉryÅÍÝÃM™„ß@m?òî>†›‚c ñf,󹄒éŽU&!HÐbntlÈ @LJ-õ¾—„SVµÓ@¢C¬œ57U’^ ×ň¼ëßÐäñ7|1FÖ 3»‚½jg{©~+mTˆ€«ab¶&Ä}Sb™²$­¨3)Ãm¾Ušr#/I¸9F?I‡òR 4Œµ³¨7ÕW¹ø!cþ1™T8Vé¢Ò éAU¾åq«hNÆY¢Gµ)Û×~äû+ ÇÐTjð7$P})ó\שj˜~8f”|ÅÉŸÌ[ÊxáÕËa‘4©6vr´“ÂÚORœ ‡Å“ÐF'Öâ@Ëéq»^qÞqªíÐ`È~ÝMŒ aCSw¡’ä0Ù*ÆÕ[<ö‘ÖE•…{å@ V&,<Û>{‡°vÙî"+ž+¾’•®k#“»óaz`µæádñzŸýç Ò¤TќނQ™Â–ïˆ]‰„°¤ÆP jF8×rö¼ß:¿õi<ŸF¨\À* ÌÌ!º[@Æ„FÂíTîÉ0²™•´©è½ [1ëï"p:?ÚÌ(ÛÉYÄ<]QDY'Ç'å,-%¬›œÁ6 ‡[+Äxco{vÛÒE„¯·h<•Pç`q²7!6޽ÁR®4‰Œè’Ñs ~ä~A0ý<¢Û31vÊcøÄ$Tm,3U¤*²CkóÎ.Åï¶X¢€LfÆd ßà-a,NVöÓ<#ÎXÛÝÖΤóì9Š¥õa˜í‘Á\´CéH­½ˆqæN¦)PñÏ,¼=éE†x•mÆa ÓvÔãâá¾tH7ÈPÈ4BÛ‚?™|¢M—&}rWZÞ‰ì1{jS9éie«/O ¿esñ-N ÷WüÁZoM¿n…@z›)Ÿ¯ïÂ,-D&‚mÒØf|T;±ÂX$ÑììQ×S¥ —¡Å•½­¢ëB†ðWná¯QizÆU IÄo U›MŠ‘ºN€´ÉÔU¨Ü$)‚Bã óJ~àU4|%‚®1¸ ‹>¡%*îW•UTÎîÐɳȉ±â¦ÖZnO c¼e“`Oâ÷9‹i 6MœÇu^”wÏ–9Á¡ˆVcgLµ\_¸‡lÞ¡TUÖü±U('¶…‘Ñõ}kÝUzˆ×r0Z>µãk¯“ýlJ”l| d‡;f&Èæ[-Y©n'ç[´?¯®Cþi@&1‹Çà &ûcð­´ÛZéw²­µ¨ÈÙÖZT‡Klkõ*ÀÁ¶ºåÀ&t«/¼aõòÌÁ¶V%Ir¶ÕÔb³l«©·òɵ*³ip­5ï’Ôp{MT]l«¥–” )¶Õ!ÇÐnåeÿ9v¬©èƉ| ïXiÎ0ØV×'l¶µk²­°ôÌͶF;·B¶†Üº‰‘4ÔÛj_#Oœ²êØæ[_÷Çc£có­ÊÄ·ÆÜ7ãjK¡}„›(!ÎÕ¢Jj?9Wè†òÁ¹ÆÎçz´7ç]8ç_ Î5Æ!Î5Æ)Ö5¦²y×7 |>VM×{ð®ÐšÕ“w= âBi– ô0dŒù³^é›NûD˜ƒàº®]ÆÔ½µ13âq`@p’ÿŽóùùã˜qÌ¿1äO>êUg>(®¢‹Ž“Ù”ñÜ0˜ë 94œ_® ‡Ó*¡±!4¥8«Žzyˆ5•~Aþ‰t›—f~¹K:âè"Ñå:'æcbJêw¾&È¥ñ+/SíÔsÐ1 ñ7äŸ&fyÖê8R§ŸâÙ Ñ1P–Êóô(iâqzŽ®÷kçÇþåéI ϰÊmCú'AT™þ›úÃöw³q@ OQ• €XZ(ævK‰œDï%k«Ð9ÛÄ,8puʦ&JCÖFÝÉDÑÆtu`žÔ~P}.™<êö3¦Ü“÷±Ñ£Òý*+ÍsÅë¥#©Än&eÒßLË_ôP4ÿˆðYR!V¹9îäµÅŒÀû<¢àÛ5å*ûC…—4íÔsz}·$ÕM’èUqKŸªÑ g¡”Teµ8Ç~@äU›”ÝÊ1›Ybný¬8û¬Š/·æêç®’ö°¾Ú©ð÷@¬;ôÏ3Ô?SÀ#İà ¤²­ßsãS¢Â=5…ܪ²aehÖ8Ú{‘Âð¾£ FÆWPµÐ½^1U>δä èS@Údu‚X¯D m-Sç m/,œŠ „ÔxÊF©DrïGò£<’ŠŠ—Pº9$Éð* »ÝÄç'"RS­›$KD£çg”jBÁÎ’<7‚ÉÌŒb»N€+ã7„–ï¡Èáß(^ñlCKÃ,R¹iÅ-oSí)’þk(ÑõV ]k‹Ê>Ôµ¶¨’‹‚I¦ÈK:,nŠèTx©x/T}·jhõ£é³¿N•ËÞC’)¿‘ÂáÃàš¿¬ŠmÞce‹8ÖY¶‡tíª w}ÖSnª.% “ðy5:$GôÑv¶«jy¹ •w1h%øc½XÆiV‚QTšÙíÁgfe9¯Ü8¸¡l¨^½µ3 #‹®Ý®ù_t"BÝÎ,]8œŒ³Û‰¼„q’ê©Ë´UÿóŠä¹æŸ€­"ü¿!èËó$ž»qé\h7fg8*5b· ¯¡2+Kê>UŽ"T´³K„"T–YÌöæÍW¼& g¼wu÷Î\´q%‰P¯ûãè8ˆP Ìÿ>õ´5ÿ^UNÑZ‹$Õÿ’j/»•©ùÂÐ!@ž¤ôs¶÷ô ¡ µ»ðTnñ•ªÿ´Šªÿ‹@BäS)[ùÿ2ÿ¿ËU ‹½mPéþUâBïˆkñ™eͶUèþ3½tv½_;?öo•ÿ#ÊÈWÔc n(*ÿ×k‹¥c¡{z¯ûÞ̪闘eë\ŒPvX*;Ÿ½õ´ÈÎäA™bk|$§ÁõqÁZuTS«*Ø)âû6ñï€\Ç–Ž‡˜“LA©¾@ä/â2 èÁ¿Æ†5Å«0º0s…üx"Ê ªBÞ¨ÑVk½á|ØØè©%ö7(B>ŽQÈï5F© óˆ«5æêXvW+BHΛºçAÍ–®¨Ê¡NÁH®¡Nn&ó‹iX¶–EGF!‰ÿºPN…Âux†ä"mkäæõk‡¦Ÿ}ß?báÎKÔEúàLß4÷½ôCÿì5ÎÕvHZ¡ÕmÔNäÚ ø¼wýòšÁ”*bE.µÎ’—Ä’˜iöåPŽ«EÀW‘×tß,‰9“övò$Uþ3OâîÆÇè‘Ðú`Iàù:7Kb§w?X’Â8Òƒ%1ïNqw`Iàº6Kâ–¤Ð%ðàIr M%5~C¦Ä|MU„ÒÖMS:Æ6ÃÚƒ))ÎSRVz°¼±'¡óvÜÊ„L‰;ò:SR–4‰Á”ØâÝ.Æ«S%QÉ”¼îÇÆÇ&áÎÄ–Ää7[R¼®çÎáFlˆ-) Ñ=Ø’BÛãfK Ó|[r´[]8[_ ¶$Æ!¶$Æ)*SÙlÉ>ëu%Öo¾ÄÄódK6Àõ³‰Úσ+©wè_\­»;Þ¯Ÿú·j]¸úK7üÐÿb‡ÿûÿø8£Éýùïß°ü"%ÿW¼ñ&l²N55É}€32™X‘›ž¦¬Yb*½Î¬‚TÖÍ÷’«š’×JÞóÔGð<êÓÒøgx|ÅÐù†s¤Ýè©röN¯ žÌÉ™$‡hðѧ&÷ #¯ÿø€%‹Ö~;G1Ó¡Þ 7èôéðkäû€$·‰7jÇpäÆåÅy³ãßïøw<’²·žé ¯$¡%*÷Ý3óDm,°%îIXµ…{½@‚ptÓhs>ûy¿'Ž›IÄiK€‚ ÔÜÃÇþ®*E½¿öyò ]½©@¤2Œ‡ žªÀÚžÖew çä™5å/0Ñì.à”Ž¦¢"À(LýÂØ{9>Q¡”{ƒ@Õ¸=ƪ¤OKaO<˜ðcxäû€pbß_ï“ßÏ\†³Â´MþÖ^²Áø¿XçN[ðõ ‚´'HUÁk“Z°à·µ•=©³2:aŽLÿr›Së/ms†~‚ªÖ…E¦beÐC¢WÍMs:?³ùM¯ùªÚ¦†¨ð;•üÀȤ—UD]ÜWÈ?€ô, mh”QøÇZ-2À ÖHLžôÎPb”•;~Ò‡«Ëƾqlèª@Æݬ¡t»Îû¦à9L §vEK0ŽÄ[]¬º‘Å”$pÓàò#ÊôÖ¹©¸>ž(+R^´®´p„YÐxS@¶ .*ßt"Œk¸ kÂÞÏV£L;ÞüËzÓB²ªµ›¶ÂPü„•Â2ù# !@X¦J%Õí‡ Ó€ ku^6>.ÃùÙV†·bŒ<ºH_èÊñÖ[œÓ†Zå† ¨joåë}Ÿdd T ÝY¶¬ 7ܨÞeÍÊ¥Eµ’ d‚6@ȱùöµLÐôhe̳¹ }©­ÔuVÊBÍðàÌ{>©¬ÏiíIl¿”†µ\Ñ †]„\&ߨ]EamX™óp Ç;—ÚâgÁ‰ÝI›±ê8'ն¢4^ Afª*içmÎÍ/1šå›É÷­MÉíUÔ6ÆSjuð8ÝFã¶BÙ¹|ÙÈ$=·¯¶Vv››}V7âà)êHRrÓo«4¸I!iÛUÄÍî¶oâ§F@båt"~³rU2’ÔªU€çîP. I®wPxsßÚïà*ln–€¬]Ó7Ó8HˆÀwSJC•@Æe³Hà>¥¶h½<-¾µ%d¸\z£øúÀ:ãM9Ó YWË+ÝûdûÀß­<…±ÿ†üÉ©"_Õ͈!VB†QAäF¹R@à­iy¬ïÉüJHÎê^‡0-˜÷ Úm}Vši14A¾a˜4݉CÌT‚ìóÚíá9¿‘}oˆ}jr¿0†ü–>2äIÕíl){—y’/lQ-äof±6y>ÄŠ]Ö.ºèÈ™TEñ A,{JbÅ+µy‰ ¡¼ýñ:—ãd„Eóf oŽê¡šð7Ø| ŒµäfXûl+ãå1ž‰æpvÊ|l‰uâíc¡”t‹xKšWAÌŸ9EdÝfM«?Iè½ »¡¢:{œˆÊÅq«²+©ƒ²Ã$Rm’”ÁG €zm+Ó\@kÄ$f{q´}b_E¤È}+_(•$@5‰£÷ÍàL^PøÖùÄ,~%Öñ@sx|óHÙ7 Mô›ýÈdÖGJœ¶DóÓåêÍT·tü žgÈÿfˆ-‚"ÀpË›*SåeèŸÜ«ðp—Š›²änWyÿ_'ëcщ…W‹iç±7(Ic›d?µ»ež9.X£[}JºbÙ&6ÈWî'` ±ö݈PJÄQpÐ(T¦À5´½uGâÖ}#zO¼|ªÚj–Ot±1³ßð MJž.Í=&Ôñò’" oøÍ±—;Ÿí—ï~32Ã"cd9éxûGÌò4¹Lúæ©+]#3‡þ{/õÐsp$VC«äO/E'Eœo‚{ ›b’ ØÄ[ ~÷„âCç?*EoU¿¸YÿÖ"Z yîLWcݬ¼wBÄf rôcÑÉËÚiÖòÌ¿Oüùž$Q»;Ý@Öâݧös zZ-0{zÙšðR÷ÖÖ-¦\¢œÊ¦hb> o?¾Þ§þg'ÆuÈÈ7uïD2¨¿@PÁEû2˸À,›wÇ¡µ¶”â6~Ën;^óCjx#myDûÊ’©/À5'º [ôþHöp–=fÚ-tÈó™¥ÎŠÉ`3c¢côÐÉ ÞÊÆ,÷jÎ ‚Z.VÜÔ mH)PHË““BzÑ›îóÆXÅt »Ûž>`n6@"JÁÖÜ(nM•]¸ ØñÉD‹_Ýʾ3XÊÚ&viÏ÷•)ÊúÔJ£\¨¾‰-&ã©9A&nSK-üÙ²$ß O÷¶mò•}ꨀsÐ9rD`,÷Õ”¿Öôš.6.“;ž$»¸‘Óâ²¶qØÙfdSûëæ½’{Ù>‡ú#+¬ä8·›îÐ!ß9{æ[ò«£ý}Þ¬ígׄ|¿@THþ|M¾šo}çf*P‚Ôå‡kj:IüñÅ•KYÓJð¸*Ì*l{ÊH˜9˜YvhI×d Q>QÛ7*R†ß,Q v1§h‹«éýx"1£òTä'ñP“î.¬N=Š¤Ô¡¼UŒ(Ú7XIÐó%v~CŽe‹Žrßî=‹üøÆ¦Í*ƽ$rqÈ~-m?žþ ½PÊ:ˆr,Nù¾©Dx†æ<Ž È*ˆŽr*±ßì[ÞýÕG9¿ö–HTQ¨}ùùìpʬöŒŠ´¦)‡ µîäI*eÔ—\=‘ÙûöØ{©–Ò즗ZÞ°LKf7©;T¦ô‚N›™K‹B ‰Ѽ9F$¸vÀ¬”x„9çq›C¶dFöåÍÂÉ ZÕ k©p5Û˜x¼áʺÓBçu‚fK«gýsWú§Þ!‚Tl|"‘S¥¹~e$|*ïk{­næä%-äAÉ.S> '¯7‰eþÎÌoxêóó]¤1ƒ×ij´·¬ék‹Öñlu­"ÀË]7&·¿ž†‚ç‖žGúqì`-{a›EŸ3äÉ»ýî9ÖDÜì ™õ’Ü~ˆKTjÕV-Ó)銪q'e'•q€ÈlsCpººô"Fet9ã$‰ø"¥”ùYg¾Â T¡aœŽ 2†£„!<¿Yy $¯à²!ÖF€§µá"Êp·ûp†FlL°µ¡¿Yõc0ƒ›dÙƒã•wM#€^2z{£P™sBUË¥ï¦}|l8çηN”^GÏÍýMsÞï2µ¼L‰béT >Ͳ{>ß:¿õ/“P£”’¢!‘Y´—6`c6¢r9&ÄeâÔsÑ=¥UäVå CŸäà."Áj[®^+k¡ö‰5w?RP­ ÖIxV²Ãì¼8*,g{¥Ô®:!E5p7O¹LˆâçÕØœ–â#`Îdå(Bï¡Qâί+æáíGÌÔ!—£ÜŒ2ï"ËÌbˆà#P Ö.ºD5‘Žä\ƒ›È„6@ë#6e”¬Sq8©XmƒÐ@#ªIy±×Ü%h˜é`‘€ —2““7n¬*fê9ÉùÌÆæÆ‘‰TAð>_–'S)Ï¥%h*EŒâ±&,¦åµ‹'7³cWmbÏóMŠÉ¶–æÎáÒ@¿ÙÆ›»¸–¡¨L£[%°2hÖ‹pù¹ùÛZÇÒ2+D_—™!}l‰P)S‡ÄÎvË-u„D!Áò¶J„éãhGõRßR°»†ßíbˆ(?µ‘ÒÆáÚêÉ;Iƒ}êc& #ç’¶`)/+¶Im_Xé>Чµ_ô‚_LáŠ$ÇRò@­Ðj&€TçÞCv«¹>t锿 trÝœÆu°«±F¼±裻&Ï>ZÆæ, ‹´T•û¾Ý¡ð¶ù~iûÌ€œ½˜z#>r"œÃÀn-†yí¹×HrMaýÕýÄ9†] eÕu~„5†÷0¨Z‹aª},Ñ¡{ãÖQ•bG¿q"œƒØèä ¯ï×ùœž·nI妿o A„G«±Á¹‰IgsáýÍ •‹…XWˆðÑ-ÿ_Uñ{óÿH†»9@8Š™a+J¯K€YW‡¾« Éª²p7K¬]àê ‡ 02ãÎS¥ Ä’4µ‡> ùŸ?—¾®Q¤mvM«¦“´xŽÄé²› nQ̟ȨҪL.¨´le)J—jâÃ>ÞÞ*-ÎùV:Îÿ‚l l€nèÏ´ 6Ó%ÆÂÔÄtK÷é!¹‰¶¯# ‡¬Jd D€µ«HNSö´Jƒ`¶ÉÐ7RÜzÛçïSïZi€8矤Ÿ†4:ú ‘LÄ|/¹n¡H©§)qpÆäP(>á*=`¥Þã”0CñyJ JÄ„$Îô7Uìb6µwˆÛ7T©9a2wòyØ?„FïP&–uäÛ–BÁ›½|®ÚÉÞRlV»csàŠ³‚ž©FûˆÄp^“VÉv•c3,Ñ:ÿˆAж †QW(")d]ò©\‚½rV5¾‹ÖnsTú-fè5Ck¨™:$P±{P.†øˆã3†!|û0ßWäqL5yÙ®ºä²“è¸eU”ï¥Í89‘™ÏÍØîP9kby[ÍRÓŒyìEΤÛµ¥Ø®9êoÎó8·–19¨ÕÈ}q'•QNç%(d‰;EÄ–ªÆ’Ó™Qù4m]øµ¸ª5““×dÏGî"= «TÏ|ªA…ÍP” ÛWhRÅD²©Ì ®ãræXÙߤ _ŸŽ,C=›T+  &Èñy½uÒÆ·ŽöC‡M*ºŽ!{G(øk²I½uôySLiؤ9GÍŒ”¿!ç Ù¤¼Ì¢Û¤¬œ¦ì3îÄ?¤¡r›”åGº.¨ E©ÄýÕúÞïx¢o£WíõÛJxëNåp7Z-âþŽö¾¿[ îÕ§ÛÞ–Í!çªyG[ër|‹¢në¡é„Iªuò–Iªu”}<,R­‡î£ÿY‹×X⸼ ÉéÐàYqLK0)«{zs“Ê"Õ&TZa‘Š !‹”Úÿl‘êE†q–àûù:!™¦N{ÁD—Š$ VD„›QŠç5†¾ytÂýr`°²†¬×S\tÍuZæCÖë9Èü/zÚKjí°ôÑŒC—\ªê½ ;ëLSΠ÷¬C&ô€J€åú=\1=Ç-¥:GDõKÏ!µÂ#LÁ[BòèŽ-!Y¨FÞŠ„L¤CÈê·¢*62,(f¤:c 8hÅÕvEÓ# ”‘RV\{•è+É:,#Ë{\R=½ÉH9UÑ6Ù4ëÞ·!¢ƒAŸtZ«)µªÈj ˆ7¾áXuþ}Kò#£È¶j“ýˆïïÖsP$%ë¼ïäÌm‘܃f*Îg-!bjâöÄXh‹”"|‚%•.î?No[qמª7P¼ûæróØ4ÍCÇ"‹NpfŸ 0ÄÁ$®•>D_ß!ç¥×jÞÅ;Z2nëî¢8¯sx Sƒ7~ïô4GТ¸7wsÁY s{/‡åÓ¤Òfñê·¿ø–^õ†³6îZï¼Ú›9 €¸'õ°Ù+}äÜý5ì=Y!0|Å÷vs¶Ð¹¼îјþ1áT_¨:ɾw²šœ*^ôm­9*žZ1Ø,¯»»Ò“A©9²ØG£Ã©óÕ½m1o ÀØ~­i>lþGãES#µÞß²æc{_-ò¸Ô¬åÙÈI}„pryç‡ü¢Ï‡„£á…ŒÄñoéò)žO©†"]Rë/ߨ±ÆÆ<Çø²Ÿ¯S*°ÃËpv9 /c3Ð2¡ôÅÀÖÃðÒ§T£ay‰®Ï×Î}öÀr¿­ŠiÓÿ¥X‘».°ä÷»×܈gà8EÍýš “ ?!¸9CVmÿ¦W&R¯ÛC0͉›eCªnv- ÑõžÚñµ×É~våRΫ•Tš*ÅÆ“BB?@È"+ 2Òh¶wã‰×ý'ÂO€¿[´U_¯âîîjó ’E"ËbÇpn¸9åÎ.J¸~qánÚGR–]çFÁ¨h&/¾&ÈuN¶à–úÙ˜öŽ~A0¥‡ML˜mÑ(Ó˜;—P–a\œKyàåѤ %00M¦ýƒ§˜)÷§§d(Ê<ž¸aÂDHÉž˜cÈ…@Ͻ{×õ©B™JYûÒá¸à¿Xîùçäï|„ñD“îüÕ0ýÏYÌŃŽy$¼½×`ÊzòÂÕÁ[ À­$º» 2ÜvëAL»ÆE ¯+D£¬]Û…^J7kC$e½Uûãºt õØ.zí€ Þ0‚À¹«q%Qø"©>Ä\QdEÑ¥ z&¸¥±e+~4'"°‘Óeüø ÙHÖKØÝ`¥”ªýim¹½¦D‚ý‡øÐ[Å{ëèxhµ—nÛÙåbåÖýôõÄW>W]AùÚ•¸ì jÑ7ùóN¶Jì¤øæÆC×½+8 T”Ͼ¥¬ ¯D©.¦=~|±:CúËܥب¬ œÝRQ@Ï"&c4饪Š7uÉ’¹tã ú €œÂ»…LŽÂ½ŽvR]w‡ÈQ?º ]ºöWn/ÄãP ý'c²öTØÖT8[dD§‰%`ˆ.ùˆn„2&ߎÙT ^·‚ìÔpÓ÷Â^±Ûhz¡”ÁZgv+D@àŸKáàTã•€ht;ˆw¦ÿuPï,ÇxD~ ¡e†Ld©Z´Þ?™ËAf1rÃ?RTDû\!BX@àè¢ ¤v¥zÆ3ƪJñÖbrøLxp²= F^/†å]¢#–å%C‚¹F$#u|½¢Ïþy‹„ç_Ý/æT2ÈÁ4JÐEÉïÙ®éý,îkyø爾Ä&68KPIdO¢}{ÃÂü es4îÍŒZëö”~¨JÏ}Óƒúj]ʵx [™ª wª (¸=t!¡t‘“ £ åTBGuªY|¹ë٬ʚ€ÖyѾ¡ó›¾,“è´…ýÙMÒÕÏAѽç;Ž@q6—Š#+NĤ3DmëbtŸ Rò8ÓT”õÒ•ªÇ®¨î… X\L•Ó)éN®ò~”$iðŽ¥Îbf *÷|qH"³Z’DP9ýšçM#¾˜ÎZŒÄ”ŽHagùn\%dVûX—,åÅu@³ËlËøÆ.”×ByûLr¡àÛÂB©à :˵# tí®,W‰ý——¶Ÿ` M$%ìéì¡Ë >ÀÄÒ µyZVFئð¢[I9ò’¢sXGÝ9“Ò‰·äÜ©lŒ…¢@ÍKÌÏ``Y/~3´ŽˆýÍŠ‚äUZ†âŒŸ•„ׂÍÖŽ#‘UìèíŒüó"]“[Óy‰ì¹2Ê”V?“(S')¾¼$øÊÊ£e®G)éPJÀ›< ½†Fð}̆ôoÎ ð‘ÎL¿ªŽ(ÉÅêAôG¡ÌÄlšk“˜Kz—ìv¸Y9 °*•“ Ž;ƒPœô±¦­>IZ'n‰ØŸ½éc½%é€púh•.Îéã"÷ô‘’ÞA^|ÒGA6}\AúI=·ÓG¬ãI«;‰¾Ñ¾Ïô±„¾ÛR\ÐA·j·(é…Cì|-æÖ-4@Ì ëœ*‚— PtýòÚù±ùÒ’Œ=Õ}ˆRX¨Õ¾™WÎ\®Ö¶†À% iÄsLÓAg Ê;@ÇʯÇ(r³õôÖ£w?’©×„{]¬§cc`Â:u$ Nr‰ˆÏ9Ú•EHÖóv>»± ¤˜ÔÝD_°[ÂÇ(5*¨.)Õs„kÅT³gRo7ù^&À¦®&“õ\YkBƒsb¾ysœÓéFî½£mʤÇÑQ€ß¡´M~ž5k·L-‘ýEËšn !^â9"¾¨?A9ŽÉL>@ž (òr€“\9Ì•j¤‰|BHî,¥ÝôçéoÉ$(t³3Iÿ 5zÁ|"C -á’††)ë,'ðE·Óò ƒ[9Š×ÖÙ Ç4þD»ÅM9önçánqôÙ¸†<“Œ†«½´'' náW\¯¿¶ÛKѬvK3«ŒV¶D¡ûÎ<2k©åÔ›Œ‰‹ ùºÄeȧر—¡ņ'oŸ=³Æ’ aÔ©‰(ÅÊÑf2óëAЮ“·ªRÎ?›tQ2B÷rr+#íTÝi+0áÄ9©ž”B³Ý•ž0\L’Ä­µ{›”ÖÐë†åÞ^¨r¾¾ÏþÔ*5¸x¨•ôÙ sbË|ÃÍ•Zã_ÃJ…©$ äJ ¡±”5Œ­íÔ‰aÕ­2Q¥u"/¬úÇï9c”[ýsjQžMÚ€ý„'!jÇ#*Á-< ›øhz¥›#d§b†«dâ–âáè!Ö{ªñLx“èâV¼H|åV^†Ñ ¬†é¤ÆgÄèò¹Oä²µŽŽªPL6]u)l_Tm¦¯÷µæ¨\©Z‡òi‹’C“Öšº0©À\ô[s{§J§Ù< qEßyw‘˜Ò*ÎãµEL¤ÂŽ9è®|tQ¤ñÛaIãc{kqœÞÞ+´!$xÑÓMí¯ÜΧÅ8díqŠíÝS Î8fë86¼‹æÖ_ÿF Ô‡+Àa¾,Èç; œüWFTûÜÖTe5Ÿ/M‡l­¹¿u¨Íß::Zí¥Ûvv¹­žzúú ú[ChWªÀ°Ð`½HÓõ²MôñZâFúਲ‰„#öìÆ:Ùèéí&zù`†‰ÞмÎm¥²u¥œLôÙx÷×^ .w"ã\]µ4°Ñ÷=Ù車•ÊFß¹“œ»¸NÀô¬älüxŒÂoȦ÷ñÚÆ½CÜPÿº‚Ÿ¹†è(ñÁÜÆê‹øà-t…âC§Ñù¼ë—×Îý£ûÖl`õ÷-A÷­ÉŒ”‡ûV<³Ý·Ž×rÃxºoý†4•*Øî[“FˆÃ}뀸³–¿¶!Þõ1µýµ×É~ö¥H4¡‘Y¢+\Ñ›¾”ÁÒGvÚéyï™Ö2ózŠÜ(X1s85NÇ+x /¦Se]„™Âé–Ô™"ÇË(»‚åû…vÚT³1l^t1‚IÇÈšD¢l–H&³3Òm‹¢AÚy6¡˜ûæ~Ã!}yš­•^ð²Wv0á0!±HÑÏoCK¿9DiMUšG~®Ž—VV /p÷YCwi7ÞªbÜô¹’„Ÿ;ʤ²8Ø~â¦>zÒ¹šµÕÅò$¶pªœì )P;±Ø^ZSŽÊÊQ=Œ÷¤ù0Q:±¦=Æ1Ñ A] ‹1ãp*ÀÕFjžëBÈ÷ $ˬy€XD5³Ô¤µø…‚°¸ÃtRY°Y‘‰!;V} Ò•M.4›þ;µ—h6íqè¿Ô¡ŽÈ^UŽ8z›`H…$­Ñ,ž=[tb_§g%] +eÚt‹¼T¥ðU–gkWèMW”'ž´V¼øòôš @ho”³¼þí«ƒÇ…ðno…>J“\Ø>¾l_~V>§{cF®Ië9óÔ`0†Ã¦Â)¿6·¬C©NrîâØmôÊA©Ô° E%©jœ¿ç$V¤”õÊdY0‚:sÎ]¶"õØ|dP œUÙ³¨#7Œç„ã…±úðù«Ä!1ÑÎÈ7üxÜòOdIFèø ½ Ç8nZÏcœN|*N7®=[Ä‘qËÓÐѵ©“c”ôëÚ(g¼·•æ°HŒ8·ŸR¤Å³‘×£(Ï÷ cªðõà\:Ãíµ“uX4wñ"»zyó™ãõ&Fz IÛcÐ<ŠN½š{àõŸá2™ðëÚŸ`>ÉÇ1ˆ$Ú÷-ç£ONƒ8¿ëx€ó÷wC»wÇ¡—½%’¯=Â×uø|LZuœSAŽs¹hü 9ªw´Ïê†è°fÕ>÷ÚeيÚŠÈÚéï‡5o’HW¼¤C³k–>3q>]‡UÅÇÚ³ÞðÃjÉ¢Í%Âk´c/ÖèÂk|%kŒC‡5Æ©“SÙ‡5fë82tX]qX£~Xå~X_×›ãJ÷Ëi ˆŸVT,œû´fr^ÇaÊÌÇ-“Ú§5»³zœÖLwõ8±Y–Óè‚>lû#,¹Ü×A5|2~d½½Ïì†Ø‘8ºÐ¡‰¯Ä±ŠqèàÅ8É°î™øÉ¹òà*ü}G–áÀ§b/Ëß¾.ÉgHæÿÿ¥b#â à*Íp/¢žowó­š VÚògrÓ”¹õŠ¼Ë•X$ òvnäYðˆÎ¯þH—gkÒì:½«fòÈ0s*…Ê[l4\J9($†µLlU(¬îpKH$·WèÒr ©ÌðÃbûl;Ïž6°AvFÞLÙëÚç­EbÀr‹CÌ'jpêÌYqˆ_Ðá^ÊΓåÕ(Sýnú'Àµ£ƒ½ß7+ ÷úU%9…«ò# ؘƒ~s…æx½Ù©5ݵ6=tgXÙ€qž5&¯ôÝV”Cñu?jUR ÑýTxÇByhß-$$ËΓTÜ %ªÎzƒÐ6)fȪgÕt V>«Â˜ÿ^exªªwiû{ô˜†°×8÷‰&å––:×˜è•Ø³‹$pbŸëËåB·ßÏ׆t¨Üé̈•ýØš‚x)D΀$/ÝV˜£?h¼º^é¸ÊýG7‹®‰ÂB~Xuè|lj٬ΛhɤçL:HÅe6Å$îënJhˆ‘NÞqcFÓ¯TüÎ!tpÛó ×¹ï}¾ï}¾«}±í9Ñ}0d.MÁ|"«Ü>Ñä_~-2Ç4¤êâ’¿«E¾13ïòy©Îz\!KÇD7Œ,V~aóV±–^‹×Ë-mW| È\åæ±YǘX,O@t×Fº‹õ‘ë` bºÑ}”~á¯ã(Í›¾Ç#ÙÅìÆ&ª6ãáØtքؾbœo òÙﶈkJà]¾è:½!ß/žyø£›nl,冫1ÜGtv½_;?öªÏAçÏV-0VOïÂiß»ÔH@® bx÷w¾ø ñúû-Ï  &ˆ:4– >ÆÏ:LXÝG1½ÔÏ× 0¿)^MRz…uI½­m7ùȨ̀òl¯rdÏ¡ý„pJYÕQ®ÁT\Pní€ú1È—‚@_VôJ£æÌÂðÁkK2<þ’o ¨$Ñ} Ú®!sÈ=µ(7¨áùþ³9Òé[¡G)ª°-ž;ƒ À­#E9$ïA¡(·Ž@<1iðŒ9@­7dÉ?°1¨GÒØQ¬Ã„ÝQXr´9Pe‚Ó[~æ¶ÑPƒiP˜-j°LÉ• uEø×Ûþ½èš®6goŒI<‘ö…¦*¥A/7š×§LÌÙiØ'c¿Uz•½nH-+4ÔƒE& ‡½“ôÕ&S%ý}›ÙçÊ ‘Á³L58Œ ‚@;húùQ”9>kIJ¸%©,‡Zq#šàîwóÞúy-–È2,%•µFŽØg:2`ÇBÝ£bØÖF úÉ] VsøÆ#Uó w µ3Ï_^õ¢"Zî ZzšèÁ¨³½_q½j…Îë„0+¦-‚‰`?$(iôó¹œÚCÃ`zL@XºAê§$LÖc@%éAS%J@'+Â`X4Im“Ž$=G<‘¥c» ì #{zeT\!šU¿¤ówš¤¼]è ôx¡¾[b&n0*øaiåoV†Q¡³Çv„W訪:Y›ç¢òý ¡=r£·‚’¹\$8B$eg¶Ó7Ô)l £ ù…R~œß¤‚íû„›Ú<­MPýP]L΂¢ºÔArr&ÓX uÓoVa}†h#ÙO $Œ àáä0à•rÐe׌\O ²Es•!¨nÑít9q3ï'$[§ U*M0O€œÇŸ»Þ_ñZ.~.¸¯çäokÊ`ËwO:¦œB¦WG äGHŸt¼FІØ÷Ȫª¸))©´ ˆ«;Ù‘í2ˆAÀ ™˜lÎÛš ÚÚœƒÝ¤À_;!¼a±Ýø^Äfjln è(#î§”D0—Ñ£}iö㉠ÎÀˆÇtôóò%;Ûÿ>á_Zq U¥.qHôlªNßÈo†í©ˆ…ƒn©ÿ2—h¨zb[G–ŸžAœ¹¬®Q%Ç–¥«º7£Xº‚(çO°pošF5Oz0¬™ì6פƧ¥HŠ&ó^Ùsõ;ò7$ö‰¿ä€ÝMö¤X™†ñÁ”ÍiͺS4•B1`µâúv*@€‘_™¥]+%#)̾Q3‹¡ËL%.,P#»“­«3Š m±ôYåmؾ|wŸˆš=úùùœðAZF’z• fÛä7•Šð7$NÐOéçV]7äd Ià²SøFå•H±¢ r :éOдŠ!PÁåLœœÄM¥E¶Þ‹¹j…jdHŸg mdà#{#TQøß½}¢£w'€³¹Ô•15®l—†kó"ƒîæW–´Çc߆»ùr¯dªÆrŸRTÂËÏÚ¡u ™Aµ±Û¾Ë\ ŒMן‹þY™ÇâÂ[j=’Qó ·þ+d‘ †ÔjyÄ*uz¶)–m* ßf[-‚cŠ­¦ÌÐ#A-3'Yˆ­¦1™¢NÒ˜´W©5«€‹­™0ÄVÓÒd'©~6ÄÅÖxIbkf eI­öÑ[÷¥VVä¦ ‹ § Ó;p2¡$9ñÀ íKB+ôÍe£† ‰8n—YeU™õh»òÈ!UÕᲪ¨ºÌj¹u<)³z¾ɬ^ŠýØ [nó=¼¤9ð]¾‚ý£c¸$a**Uä¼ã2kì6ɬ¯Ûñ±5!²r™“ÞIü*%P ­–ACÛžB+Ö(»Ä™8ø8ÃjS«)ÚRòŽC¬Íã3V°¶a‹ë#zCÉ@\hÍκ¸w°òm­×ûäþNÛŽ8{Æv Hß?¦ê±@cˆ­¬8öóuBëqÆŸ²”öBÄ8¯WÂ÷w¡öÒÀ“ÝÙmñ6V §¦wHŸ›Û)K„PÜŽÅêÖ™§¨d‚s;UaWÁíTÒïƒÛ±8âÍ!ô¶ï=Øð;½p;™ìÜNMqpÀíÔ–q;Ĺ¼´™Êâ‹NE,Üw¦“Û©®SNòOR'#6³ƒòÐV˜(V·*Î&γ•6r1ç¹Ë0çyH4Þçy0ùHèñG<Ïóiá8Ï3Ž<Ïó”!ÅÏó”‚bŸç ‰óì/ùžZYè!]î>ÐÎõ»ÑÍ~J'6µö"¿Ô:9>Ñþè|ÓæfUJ{AÐ8ϵþY‡Ém7ÝâææÚ¶6س}ážçaVm©8̶bõ<Ë]ª¬}–UØ.ž²»øYf¥—³ÏƒV¯}žÇŸ|H&UUÖŽãL~û|Â$ç}œmƒK×£ãlø“UçÙª—¹ŒU¸Æ¢larÓäþñ@·rUg!Ùb8d˜oQE yË¡ˆBI:ÀÑt2³Ðµth›ƒ 7ŸpK¡Å/G9¦ÃBÑn© Õí–£zxPS ½Ašv« ¸qb«ìÇ™;€•MîТ¯Ñã¸çFäw…Ec‚‚ûÐxÄ4â i¢×ùÈtÛ~%òˆ«ì¹£^‚$ûMÉЩ½"Qõ€È³£)a£,nÞ)eÓ¿K*R}¤s8£À°qRa/‡Å°ñë +–  žÜ¬%¢EîêPߦ`´Š3÷¶¬ÊÂ+¥yeÚösI‰%‰’ÜkñDEæÔûÛ{eä^·Æõ9ðF¥ç2Bü|¹©Å!ôÈGÉÑ4=Ö·0i×~&’ Ÿ¯© V¢ñ€Îþ¨¦}@s›3B¾i-2–+›{‰,‹…Ö_ V©Ù^’‚ß_´Wž ÷©~¶¼ ìÜœpM; ÊQ¤3e«gkÆ~¶[\ǤÝ"Ïv©¯MÕ†Ì[ÎQ«£dîMÖ‚ç¨ò­:&f°Bæ}Ù¥98X›š°Nu½¨Hµ­z>beQZ‚º[Qˑ٫(Êët¡ÅÅڭ𻪈+O+{bï*8”!±½ãÙê,ù&ä.Ü_²;ÚÚp‡„^y²…ùTñHîËUÏh¦—fÚcA݇/Z™Ý4b*(…l^Ož/•¼-N•zjÓ:[ó–5DÞnŒ9ž ÏÚƒÖ£ì0ì=–9Õ@43:cÔ^Z­ißz'”GÏ „ä^Òæ¬ØH]Öï!4õ#Ýò⸎ C˜Ðf¾mºˆ8@¨°½%p7ø -|U¤ËhD ž†ŽÀÜgÿ€ÑÊý?ÿ±]Ô糃ÿçJ_ÿéùóÿuý¯_´¸Œ»·ñ¿=ßù߯úõ?~ý範þ²ÿŠwÞÙ¾ÿs=n»¹ s¶r¬ôïà;ÉÔÌÙ þΆ¼wóýõ¿{þ_¾þ§çpíßžÛÿËÌ’Íì9?ÿb&É,Éf¾7-ÊmŒT¾+sŠ òÔ›F|”¿µ!¿:²Éüîü¿Îæ}¥RSN±Ê_?_1åƒÖ„5ÃöšÁ›ª Uꌞ{(µB_];FöS+TOT%C<Ú̱¼!Œ•a¦³¬ÊnÚšfmêáð]³™eJ|¾zN© KöJ‚öJ€o ­Òܾ¿Þ§o¸lÒ*>ïE»Ú #ôÎ1N0-¬À¢|C<Ùµ‘,Fc€æ„ ›$_#$5ÅVÕ*Ø›P%iI½ „LG•T¬ ¿;¥k¼´Y{aChp1CŒí¦OHð;5Ý¥•X@áh }±0L¹‰…âϰ×ñ8²Vª²6ÜéDÎÐÃä+>¤¢•˪FcßÄâÒj£ÂÖªY"†µ\ôŒCˆ` /Ëmsj¬²ž5Ö3ÇÀM õ쳌61\ ªê«5UÝÒÚc•½¸§ÎÝñ‰ú¥¶h“¯t'´ÄŒñ©ÒêjCíBôG;Â|"ºÍtó8z´AÛ¤Ú@ ôäÙÅd$”Ä"kÛú ÜÆÄSøIŒ‘iÊx¡a¥ÐðÉ u p!ga‚è™Ð)üªrG¬DÇZú.be bÎíM©èê½çZ£ùJûñ€â8ì¦â7eãD¨<3|%ẅfF^¡ª´ºp«Þp<·¬m}C `‡¨ž"1oð±©ñ‚Æ!7£lkB.ãh¹ èÎPé»b€*"këAä4N† æ*“k£8q`×L#çãm"P‰] bÐ9Œ‰«½³\…lœÔ¿öÞ¼Þø‘bšM$õØoO$wò+ ߀h~ø›Ã`âÒÔ™i[)‘¤tÅ€WÖ>±vÖ+˜lgrþ=ÿ~Yâ fchòâ«ô0D…ßN§3'öª­Ý¦YçÀêß³Žyá-Ø©CãU )ŸÜH ô1¢úÙX­]ÅI“žÓ_Àƒnx“T¬§J'C%Üø++q>©:°èÊ‚…‹ÉˆÅѦà¼!IS#¨šcvmõÊJVSeD®«¨V`c½^3¯|<’èpW•^vqïÁJô[¯œ/£ô«J3ÜåäkWÔ©án¥ å7 ˆÁÆ8ÈRYRÄÚÈW`×Yú.Üøjòuºó¾0;ÊŸ]Ç…iÉÝÓxywÃ~äòRÑ%‚˜¶¹ov€œ·G›âÿ†°@ºàÀp ,Àä 'ˆkœ¸¹á$[é©„ØÉ8Q¯ÁÍšØqqß@ÃÄâ[¨Æ1€€vÕÓ‘:KkìwD§R»7¿45FÐ1ks냃´ožÚy7-| ÷¯}ÈtMuÕ1:n²NWŒóçÆ*9¶½‹ÚeèDÀgð„䢻'ä$xŸÔì©`>Í'Õˆ¢òâ bí$íÁX·Lêû -vzWh -$ónß•Cwˆó^Ö73Xœ®ú¶GÖË9@cïúPåÛ.«/~Áð'pËYŸ tÔ.㛋ý„ý @.}|»Áu¢«Oeh¾‚º§ÂÖ÷—cô:A+.0ýy4¬g7„ÙÀuïš‘ÐÚä !PÏ&¼î1±„À›¢WWHQ·þ§ÐØmñ½v/,@&ùvi¥· Ä…âݬp[yi"ÊãeÝò墨jºÒ‚­Uñ¥ðºœ­×éƒRø¾¤&ÓB|¶¥k޲]Ÿqk9SScJš³=n_mJƒÅiý(õõöö–ξ)ŽÀL¼è¡ˆ öc=I*)°ê hÎ2 ÊÁTà#ÒþxäÖ…ç;_‰±ìY»z—³­ +àíJz#kÜ’„¬Dm $"ÛZÉ™õ›ç [»j7"¢¿Â<Ž5ev‚ÇLj^Ä\Äã Õ1³OÚÙïÊmP«Ì!Ý€—Ú…“'™òd´ r÷=^ ªºRýcS¨‡Î}ÓÄb©Þ¥Xq´Å‰ƒw|;íÉîh± ìlÿШjäòõá8”± “”"l~ˆq-º02éæÎq Ÿ7ÌŒip `úÚ3Tl¬c`çgáì7:­Q{‚‘qMãËtŠ)ýÌðí^ä›HHf'L|5Ji‡3¶ÊÝnQt ºPmb9ºäÅê“ßѧÃÍpðë†á9V:lÀ€+•RBÏ€b8ÚJÜ¿C—Z宩G„?ëØm¾€{F‹»€}ú¯¥´!$b¯…Ó”9£Š]‡ß&]ÈÄhÃË€>o/—Ï8ødAªŸPÊAjüü`FX Ä_že(©ö%¿‘|XUAsܾÈG{úp£ìO h¤‡´:~6šã×UŽ_&³ ô2ÇÉ_žàm'²7]Žáæ<” ÂgUk¼‰²6ÁŽèuußF&­û§ZqHÏ%Ý4׀ߕQ’QÏ$ ¿ó—ÇéìÉbqèDûCi%Å5r©NP_¸N.„”ä$#UHndG“2ª‚Ezh‹5k*fJ—Q—7ïIë>ÒÃ)ñÊxäì4ˆ}¶°šè7È‚OÈ¢Â:PÆØí¯Sµš7-1vå!óÌ®¸þmø°Xb×%8ŠãÈ,¢bÒÁÎ[~Ô>,2…êF•ÿàmÉ$ÎS+ã:²¶Ê~ÁLÛÕ¯dÉÒz©‚££|Óà£_¿Bêº(e½‚°uÀPš¨„*–õjŠÄÝä át…“—%žÒÖ'%óÎ’\oÅû!aºL ¦Gò8O9“ØØà:•Îõ|"”¨ªÛÀú/`mùÊ­Å÷TºÌTŽq-æ|>wÔCiÛ¥LÔ²Yâö" ¢¤ÀÔJT¬¼g]'•*þYh^\Õ1•"ºúüÒ.Ko8ÀK°´uMª›-Wz[š¡¦"nìËZ¤`ý)®Îå¾²Ú!ÜL~ŠàY×B]&6çUqŠ…”œŒ² jÚÀ,äYJh˜‹u³d÷ÒfcÆIr™|¥ˆ9#¶¹ ÞþLœ% kk6x@ùF ð\NújÛœToSÜ·Ž>jç”’¥)»¤ ÞžäDAÞÇ·Fl÷øÖk?| rížÆR,ß1 W 7\1êÈY<‚Þ;ú8Õd m²UVÍ㵕Íõ B!žWþ’N؈‹J•jù³*•’~yMm¯)Kµ`gÔ³ªô޶6íAÖk»z3U Â¥%ê —¶Ÿ+e­<ê]÷nó*û†°Ú–ü‘Ò˜ª•Cë-íÍÊa~´Ëõ:ݤ ùj½šô,ýûº­êâÛ´ ï¯Ûɾ½Þ®r×ueÃMKוj˜êÔ‘_²AìËÊP²¯ªUDu©4ø©y²r¿=½<2F Êš.C1ç6iG¥F~5ÉçUEŠ[Èë’ Njý*Õ'YY²öÛÐ<š´³E¥Y<£Ö }Ù㣠ž“ѵ0A;óìd$׌ëô~M'nß¾ÒšR]ßTN¬AÕ–ÕÚnÍcž|ƒzò좋/ÕM°\rNªåfWå&>àº-Ö¢Ͷ¯‚ͼ:—»VAw’Xä‹>ŠNlGQO†k¸­gu±0Õî6lm4!›—tމ*½Ä"׿†]:GîÛ¹ª®ÄbæË€F./,ç6m‹X7C»<_¡ïÿ%œÇÃÚ~\ì*ç$U~ÈÌ©Å6Ïu‚nÉÆL?IH‘n b·ì‚ð˜åw‹­9¢6ÿ4!–™bb*èÀò‚ ¯Ò¨M|ñÅ# ´WÂ,ŠaEÒhsH–ge’¸@Êä›6cÛ™Á$ž¡%Úpp¼&ˆ¥â»½#Ûf@Œba’æoºCôò†øßúì Ý‚e×3 mÑ_¬Ìü1Ó l·¶«7*ºÒÙí9„LÕ7­fõ\a*pZµ!›|€$Pä£D7{Ö>¾ßÂCWæÎˆ&"¨òoÎE ä%IÓ M³Q87üvÆP?Ûˆ‚ŒöíjË‚-Œ¬uà3¢dž™E& pQñ!>ÛP'øÔ–ʵSâ‘ɤ^ÖÅ¢¢£ËKŽ`Pýãzpw³ Ô¦aö¯³=·õôGÖöà9:ü#À•Ûp=d:Uø(×/k¡i8ÄÈÓÕ𳄠vAù$ù:úPŽÎ¢"}}‘ó-IÆoïym,˜Þ²UæýÀwŒÂöÞœ{”V¤1–h† –, ƒEtÁ«óeQ9´‡rÔ¨øÎÑô‰8„SÝ=.ôÇVŒ"ЩQ Ý¿Vä³ùàÖ¯¸ÉY;å¯+ôgÚ2ÄÄTþùÚªøTè’Ëø‰¿;ÚD ¼@ ·/weOàÏÊiÉÂÖ=(†ôXy*…€”T¾p–µIk¯¥EŽDö1=O^eZ ç‡B;{ürrw]!ž ;õºߟu}ÄÚ$EúHtQÒKÎß kº_Œ‹ëÃŒ“äóˆ•õ™^û¡¢äHÁÏë°‡z–ëØ•¯ÊOc_¿ÖÙUØ›ªü¼@"¸}¬á»˜ß]´+ð=Šè#ÕÌUä°*½ÂÜíǵk<"Ÿsï¡’±Ý_¨äh4ŸÇµéÛëãŸ`r™Ñ7._°Ç…aGÉrvò8÷DÔ~ÄT¯ó‘¬aÂÕñG§ƒè¾ö@_Wäó ºk˜Ä½œ6M°*'„À‘eñ¤ÜƒÇµÓÅ!gÇû¥óSÿkqêÊ䇱™•)oªÍ¬„ ¥˜é€\´_kÔ¨ý†l¢ão”):J¸NÏïÿ‚igG¯Sû;U!èH¡S×4s¹1½ ‡Ãê–Ö†€­Zo°(çn¹YÆR5‰mËC?ºÛ¬œ[ª>Ôƒ¸Ž®W9Öú4Xp;wfƒò¡Î%&“cœ](“;'õzÖ ~RÃIª©JSY¦ó¹‚ý*ù¥)w×2çpMç‰OêÏn1;Ú`9O‹ç ¦QçC¹íëÈÆ¯›%U1®#ŒÖ¿æ$‹ç·Í”|ßGsÄ=InÄ*iÃ&.¾ST™zg'w½T¼“‘°…d5×¼†Dÿ"6»x;–‘´oÀ=ÍŠ ŠŸ™ŒÁ2¢¦2%‚‘dòjSû\š¤ê>× 2}Ï÷ËC¬w¾è]!–ÝÚI,½+a'oFEQ¼WîÍâKmÎtpISI%ý÷!·Hkwîó®«•ÙmhØRÄTòyJ–º~$º/æùÀ;õ`ͬK‘z˜¤í£âå°„&vÂužTÃù}n[§ÎóÊŸs¿Áâ¬K<<«¨XÛ§VQ—†[·T\ûdú¯÷£òYšHT–±ý3˸Tª^oü|mHa¢rhŠ[}´ìíËšTÑuÚÚ¸n‹ÇF¬J+o¡Öd):©°æŒ·/¸bÃaV¸oŒ úÖR}\êètP“EWúã-rx×oÐùýýÚ;„r¹àµ=ä.¥Š[ÊT<áAÀxU¦6ì’{ä a9zŽ{|½¯ágsQÚ$VcÉÁ~³D\4Ìód5k`mVãèx¿t~ê_²­‹ûì°,ýìA®RÙi²²çzü¦ò+VCEñ`¸)+qº›t5åýõ˰"Å'²+bôMÞƒÌÔ†i—ŒŒÂÍéÈt] qÍû#˜;Æ¡€‹¨·÷L6„S.þÇÖ‡ãÓÇéøŽ©ðøÚ‹äUWÆ;P9ÔÛ »e–9¤ñE'ŒêGÀÉä@l·ypOVrÞhï¹MyÂdX…ü}j®šßÓ<ªcIÑ[>D7¨Ç,Âÿ¡)ÕpöÈ4†±ï.*¬ñl5¤YÎò°o…W}!š½¹'!€Ï²ª(_ Á?±ñäƒpTú Õ±>|výÖ&ËtàüùÚDrÓM=hSÿ$%!_qІdÈ"„T0®¡ àÀL'ú|r˜I™&uÑ´.ò¸¯÷^'xà§s™uAÌaqÓœÚ$_¡œU÷Ñ~«Äð¨-c¦g>›8UÃC ÕÉâeeóe\1•ñÉÏ3¦Ðœ+ŽI6‘šÀB#sxjJX±1ÙhŠ L{騷5~`PGkf?/zÙÞR•dÕ±·(ÒÂêa“á  ARÝ4REFS0áOPaà([íñ…Ì;nÂgâ£ÜmpHÕG¼ •­Ø_©áðïãhÚ™>Nw8ÖL¶[—Oµ®„¾ï˜Ú_pd*6£{’çåëz|>©2 'Õ!q2%ø½·“ÚƒpùIuÈ>©òa“ÚãPñ¤vböI•_xœÔFçÒ8†öó¤*qB_w<í8*} DõqP_WãóAUDI¦‰ô°ùÍ¿ÓË'nêçM® Ôáš-B¾_ &M}KȵAŒAãkão!YÚÀýVv¡ƒ2R5JÁ_êGHÐ’˜Ç&8oSû({ ×8OE¯ð¸ª&õ“dn;[žÀ¢º|ä2Wàªûw¿å„h„æ.äõëŸ}¬µdK:鸶Q¾ézZê;#dR-ø7ÓÀ˜¹‰Ìóðz“CûxÚA³­3eíÌY®¯æƒ\SÛ YðÀtibºUÄm˜Í­qPSXw>K» 7eŽBTAyoöÁwXσ}­†…™¥qNá3˼a€@Ÿ*Åì7€MíÞmb¾2ñÄMÏûn"sïÕM娏è©¡[›\x‘/ïn÷"ý«ƒT z*²ßó–ÚÙ¹:Œ£ÄMUñɳÁ wí¶œ`Ï2׬:SÓÉ®†ÓM…ëgùôÇ~«¼R^7$_¼@ÇîÑÛÅYí„%¾„þÔYû3"}l˜pÈŠ­š¬ôN âø›ëã·M’}I¼ÀK“æqKMõ-‘²J©B˜D‰Íªå±yýž:a¦( ž8æsH%üBQë[[è­J_¶°}ÀYaB”‘'sq: ±Ž± õlsæqJK§ýÞ¨‹Í žÍEÙª 0{cpén1B¬L´‹ªÛ:ä:gÊmŸ A*££wwCin‚1æÈ6*èSÑk¤¼6šNŽÇæÛ$ÇrÉ™¼mŸ…NïÑã°(Ö8žHMÄ.î´U°ÙR6é È[ŠdßðþÛ‡›èÇäZ·§ {M®õ×ßf×úËRg!‹<ì¾þÊYnÍ}#Å×ûÎÍi[]ÍQñç+ƒÐþδû™¥›%[)x(Æi×»¨Ò,ί÷^_ÿñáKÿç÷ÿ=`š8‘@›ˆ¡ èg$ rÁJãøDʳ>'˜,[Ï)çÂø¿ÌElöö?rF# mƒ;-ŸÝ ïŸúÿ –¿î¦çÓG}Æ‚P4$XrBÓ“¶¢Ü¦ùžr†îPm'HV­¬Šàþ¸ éA_z%Þ>d(x’áZž”ù÷ÿ˜îI³ÖS>:¦¶ïÅýPLÛþÜ•|ÓÎôÜþ@?þ\öÎÜÞ¼ à‚J ‚|ÞôesHfN5u˜¥Eõ/^°>0(<» œh¤SjèsÏ‹Š è[¿ûxÙQL朼-É;:>åÏCb¯¦ÀŸ/Ó>ÉfI5ºå©j27>{³$U2[´k#¿|AŸ«3=é ×9JÊÃX(S§͇Èpµ!5M‰*ç8¦ÍjŒw<#ý£æ7®&œwxSX*ÚÆ4·Ö4>³m$»mJaIøÍRÚFØqŒ‰ _Ñ©,0M¦Ä<¨öýÕ”Àê+?qÞ&‹Ê¥Ì|ÆMAæ–ÑÌhsÙ‚eêL8@ìþÛ­Âì"`@[˜<ýη d’1)u6Õ(7¦ãâƒ0q ‰ÒZHg˜;ìµûwê™tË %øKŸÍôÀ÷ ¾ö쥉¯ÈŒ8€òBS’ã¦RÔ¸Ÿ”ÍÔ̇Òr~M©4º–±v;w,$ܳb=š ÖÙK’´±ŸO˜¾®vìüÓ”jC ßÈ <Ù†æW;«ÙG³Ë\vì#ö:Œ,ÔkÛfÊì¬"h/ŽeòqÞ›*.gdfÃL)Êd2}ßX‹ÁžKÛšœˆ<£›¢´Qç˜jdÌQ˜=a¥ÜzbÖáhNÝ_À¸¦ê„ðêÀã ®Ùæ”Ì9jd{.¡ù0‹ÏÀ]W²©Žl8ÍPoê}ü"-3³œtwkº.z¡W „¿ëë¦wë²âå.±¶™¼€šï¯Ì}u¥2µmˆ«áT[$¡íÌjt¶Qþ+£&ÚYêR;ã}‹ŠÐš÷¼mn¸o{–Ës(á˜(R˜(œb!oÕÜ$ ¹“r)Ë{¥ç™µ§»\OÏS¨K¯gK}m&Ç>ÏÙXê­[–b»u“T&"3FÀ¾ÌÒ±ÔtAf³M`Ÿš·¡ÔðÉ † dñ£ahN6ëK Gá“P ba¢9µw î›¤›ÚÑšºAL²~;¸Ÿˆä¸µZ¬çúó5\iÈ ¼#1Q—Mè9Ñ! LžÊ7’+â',+C©…Ÿ¡<?K~QöϾu&›ZêŒNt7øh §L„eøÖähÇÞ©Ê Èf=w’uðJ4·Â¡pc ë’ÇM4\…;€Ó¡ÌÄd—*z+Hs$#m¦a¢I®Ý­/ËÉŸ{[ž÷ô¸Ã‰ƒæ‡"÷Õ0¹Ø6â¦ü·2Ë[–‰1# ÖlE›º¢ÙÅ)#_èÕ—H€iÏX9õh¡ÀÜJÔ=÷ /¢ÆºÙÝñ”øìЏºžÍ½6š›p+ýš²ÉC©K£hã„¿ ØsëÒ<96Mþ»ë‰Í.úvö„ÚùäDà^U b~W V;ec”„0¡ŽëS~“it k»¦öoƒ$.éìüÈ WV;ô·ˆÞÄVwÄÔtÈC©-MR{bzУ1Z÷F±>µ.DU*øÁÜÿ¦¶çÊb²áQ¤ktÉQŠ ´ ny í‰àÁ¢9ÄÚ´f™Ai£C²ñ6Ä!;Z&=k7©œAká‡=\àž`4ÆÇÉ3¥I2 z¬ mFÕ$Wƒït _7Z•Ç’§#ï¿nbšÙ’‡Ûn`¨)ô‹™ÃG²(³1‰…†ðHê•«Ä:Ë &¿ Ó® Ey‹£t¼ Žo s”"xlã.y×à+]}K^|.»eÀªr¬±Î»r¶dO74\0´ÇYȃˆì³u×µó<CñÓF` /¾PCV4ñy­ŽƒØ»ÉS`¹™a‘žso“€4)[ÇÖhO0z8ì€K Ë^eü2ÜÕ—†ŒC¦fS ðœ–Y\}Læx•ÈÊ&Y[­²Úfܲw//£È¶¥³hÔ*—­ò-µHçÈ5ðú‚õOÛ‚&š¼Ó§©W§Ê ðý5ýsz8ßïŸ÷N>Y|¦³COüüŽÒ#Úi@a¬Ye›ú0¡}Öãü¬¯£ÉtêSƃÌ2|góyŸ¨IñˆŽ~fÝš‹ç&˜5´$̤3›ˆã5׉⣙úüÚò¥VzÛ¿wy5±j¡ÙP`qËä?qCŒ!ÈœÚçÚ£Qˆ;l2ÍqÐVøyé›a‹«bêäÙe.ª¸€žÍêòÛ­Ï… µbøƒ*#ÿÙbI Y}`º6“ƒÍV@ïš*a ¿-³sÍ®äáÀ^›´`±ŒžÌ,ÙFKoå,È“O—¿Ð1·¸Æ¢"¶w©Ê´ ÓÃÚ&‘U¥°›Jq3›,}6Ewèâ˜=8z^,†mÝÿø}H>e•9Ö8zëát¹¶£±êünòV @‡‘zN.™{RüÉü›†)ÈoˆÁྷ[ Q/Ĭê·shƒéº‡ÌÐaßPCOåü•@dM¢–:i´ÅLÛm«6è×]^š †Àhèì!ÊÏl£ak€ÔšíQ ?¹É'QðJ¶‚±mc*©ãçlM[¶ëK˜ª¯›™bº jkÚ¦AØÞu¯¨úDç“^'«Ô4Qv‘ðmxŒ¤.ߪtž¸Z¢r&«@ªU¼¹ó P¡áxŪ›¼6m×þj»yç%f7ù±Gp“ð|‚ÎfŒ#§W®ýȇénçc® ûÅàf¨íÉ›¨’Ù¡o(˜¡ ˆ)¤'qf, F= ðçq¶ÜðáS‘Ùx "HTÿ4å]ICuª›˜C.~F Ok™Zµ‹+T›f˜¿[»¼¬wSÉæ  ârHS8HâÀš4 ɽø›ÒBXeÁç-a›»ÃÈÌí¡âæšJÃO¢†¤Ñ­ÒZˆŒm<˜”êLm‹BË­æk%•wZçbÊ3ïXo\÷–hb&éyRHÏÛ>û´ûö5âVìîß彚Τ' |ÛCë7µ+q?ߨŠÄNìTžûNìªÓ¹w" )vâÑ4Éøha'ìÄÎlšÚˆpJÎÇFì¬xªØY#Ó7|œç¹ÝS=vbWÂÂØxVÅ {'.i^}'²~uìDÉê{'*ÖÒwâ$#;ÑÛ±7;qÒOÄw¢Ìð{+RPÛ[Qi¨|/N^ñשiJû.Àù±õÖ;½Zò ñ­÷¶Ñ>îEYø¬:a±;‰¹ùa›‰9"k¶Ý,Å䙡iµ7_»âb^±E‡êypU¶Í›xQMþ»|^õ5Ó¡rO³Œ­yVw¾n«geêÑ×Âõ±V%»I›Ž«ùØ&™*¬ O÷>Y•=Gº©¤jÅ€ ˤU€4¾»7Ý ¶6!(î­õ¥ŽÎ²“BKÁŸ9z»3Ûl>ßþ»°YÓZ ¹‰ó­JVÝù *Jº‡‘‚X^š®&Òëò^·ÀƒMü@%ôJ}¤¼ØXìoÇñ½¼C#[–e)Wr 4O+•™¿PÕ6ä­“O£7§©&3ªüPM=0”é51‹š«¸m‹!5Ø`zWðƤU1ï‹'ŒæÀcЩ ÒbìTêºr¨°ï%’:Ûˆ6š›TÄ.Ró`.»‰ÇçÙÀYN²†j¤¥!öß²EW,oÈí2IÅr´'õDXØË#‹lQñ9è£ \ÝÒ?37ob8’)œÇFí+ê¤í°ÒéÑL·vl¥Æ ȸåfï+p7™*7ŸÄÛ^uœfJK—*×”7V vB¿ãzš‡\hu| _kb0M ³& ¨Ýž½T¸ýqìzª‰)®ÀFS9ú£\£Ç½oŒÍÃJb:0›NYÑ„.²hÅõ;T(ATpƾž\‘z‹­¨PØ‘çÓl•@ÄH[w•œŸ *²nI™ÏEåç>¯Cä/ŽôÁÒOÈ^ƒEcŒ±º¡‡A'A³9˜/ué’Fwz§]DmS챈ö`û³Ž-Øxƒ$^G¶aèÚÙå 1šÀbôÙ¸ÐDkÐÕWm`×^ª;ìf4Û þ˜Ï»¤Ç¾'ÙmDJ½mÞM¥ø9`Ê÷"–£J)prß\¡)4³Dr‡˜oh+‡0åN!9À𥆀æ) ÷˜æÑ|NþlQ…³¬-‚Éæôï(†0å@9`²†©ŸSè¶rÊž->䀩4±ý<ßÎ$åOdª8“ä‹#Hù,9úì!xˆËÑv9àØ5‚tíqà•¼}‹X}‹ö5P£èSnÅ.LYÜ÷jÞ’:B °@ŸYÎ=‘ˆy´i»r¦ÿm›}ÔyË‹013èÏ2î$R¸çCIüwKLgí&Rº¨ðòf—ki_Z0ÁÙ|ž55'†?E0-°Hc¡n/ß¾,Ò¾Íw!T…¢¼6\SYk]nx¹ÒÚº6è|þEö—3gèq A–]&•=š{¢IÊ}ÝÉ~Ù‘ì.”ª“›,ããC¢ir9wµ-s(¨ô’õ Іª•0ŠÞÑô‹¹ÁoÑ´…äú:¸ÂY™00IC½›p!ö„·œ5)gOÜã¦n‡ <é>k¤L=åÊ↰êYÌ«,ض¡~û¹|6uÿ`(ž@ñ?:»riÝPüÎ\Ú噈‚3K"1€gºgY™¦³q˜¦\ÁÆ=7Þ\bµ5ro:#wL#&ZfÛÂVèb€IÆÏ8~k6ê4M>~;ØÌNG´Òµ¸ fâŸ>”P“›ˆ `:°XÌÚI2ô“ÐM–’=Ækxþ.›·5¦pB#ž‡Ç$¤Õ›#f“¦($ÔÄӷ䨩$ó@s³­æŠgæòºÒ£B…Neç"!÷hŸØi*¯Çö'²¦l@Ú>?_HMϹ1]R༚ÖÂsýÛtëßsò̧fyñ›ÄŸçq_9pa³[”•öìW–BN³_ImA}½”Ù>®•$Ë-0++ma,ob8Eûïv£ÙÛI‚míh.Ž&yï°øÀÐxŒÆlü˹ÿ¥|KåÇ €4gKUY%'[z!ÒÈ éo±’ö÷ÃÚH–˜àô²ª6%ý¢9dx¾ˆ‰þ«„vΨɢdCIÆ—b‰‘,Ä}ù/œ½I’ÜJ %¸Sèõ¤Ï‡©UZµõBÚôýoÜ#¿úW›)  ÒŽáaKH¼«œ$ä b~n#góåÆ. »æÚôÛdB'b›wr«kâºA€Že‰ ­ÿ ¡£X¤®Ë§ŽÁÌuICC»0»\Ìx Äm©±¡uÓ+:?¤òZÊOÆz2(Ào«_ºÕB/3;Møi1àýòËÚÛE§ôPr½c•\F )>ð¦At:ùíK?XÉÀ sés¬éqƺ;÷|܉‰ nF‚ñíI:×Ñèá"ÕQR+ånžÉ‡^çÛ_§ÝÈT útÏÑû-_fÓR!ò¯¹6cNð m¾ÑÌ„‹è1C·pîšT>@pa¸‘±"ì÷×rjr ]:Ñ Už «ŽÅæH4ffƒ9]UxC5@ÝöûhF#è2¶¹X/eѲÌO‹(™h èÔÖC÷®/Cn¼¾ÜçpÚȬZKµœl¢Ó;·a$rv¯$9è/0ä°{„D0Kk9Iùü“ìq¿` ¾i¸ëÚPêðAª&æ``ÙCh°vèÒ9éô'B¬( §ÝÁód¸þE)#}䧯Î Y½‘^ Ò›.~zrXy~êÃÜå©aúj7æÚ@+˜< psØë$ʇbAU@˜ó×W®9pª½.¿¹>é»åPKËOJl!ˆÔ],Iü8HÁJI¤ê^Œh‡ ƒ8É(uyz+ÕqZS®PÂÒ§v$Ûñ6¨Fqw¸0ä}·~ôÝ·ä»ù?ôô£¤°»æpºÍÉ ÇtDÿÍ×pBWrÂ<”²%ÆeÑCï1Óa†ƒgéIJ´¶ºÜ>ƒí«O 2ò ïv^-?ÉË¢Fx<¨‚ÚÄ`¸•²S‹Ã’Q¦ðd¥Hå—üøwúúSÀõÐx¢á_¶ nÿ0L Ô¡…«ìKÜåaPjZ?PÛˆäÃx“î `ÖWê2@Q~@ÔèûölÊ9tÂ4¾§¿~ižtúMþ³=“r#½1Xaº—C³-s0¢ªÐä~¬±ŽÍË ;Ôôt"Šð5B>ÕôbÚÆVÓK§£PÓ›´š†ÕôRÌ+Õô²|J5½lJMs·—ÔËS]ARK.H’;?W¯ ©éèXšjzº6x0¤¥‡º#£m”ÿ‡š^ÊÎ5½ò,¢¥G˜¥PÓ¨5=oC@…šŽÜu«iýI5}’=î ¨iÒ=ÕôAJ ¨ééÚJëi,ŽçTÓî˜jzº2GŠ u%ÅiäÙÈjÚ'ªTÓ˦]¨éµz>ƒ´žÆ:WROóê©§—* CO/›®Xstˆo=«NzzºÆWš!šro= `ª™>êXh-MpSKO7J¶–F€Ë]éA¦–>8ÐÒ3š¶HKOÕO¦’ž®¶•’žK}­¤lÖȱ œ{ÊËÌò+<Ë¿£Ä†à“–Utg©€¬”±ŽëfãMÅe¯ƒÙsÉhU4?¡WE³ëï6ÅF:ª›å“\”ˆ%x8ð&µ,n§XÇ0ìðõ0S‡®=x*=w>ÇÃØ_¯¸sîU¹ I+N×ÃÁN¿éD¿Ù?ˆ…]tŒ7©5¶›ÃÚoð°;Gú,€,w‚ñ~%GÑn¤\‹é”ÓÑÜ!fv niÌYd–ŠÓI¬)6çn½ÎÏÂaxŸËv‡`íP¢BŸ%2š-EÎNÙê moŒb«Ðq¨Çð4Ü<-!ÆŒ$ˆºs§wY Å…¡“œ” CHíMM6eè…–li q*åõÕío–Ú‡»¸ ‹ÖVÜ(µ|q©Vø CÚà$ #èÛæhìzv9•rnäô¬ÕÎ-¥¯LãpÅ×§jhÂ\™î†;¢3CÎIb¢ãP狃¤ó%ií\LAÑFÅd#¨ÇRô¡†ˆ¼~… }†7‹…`W²rJH›Á¢ô± •–7o³"ÖÙ|†j®‚çåúõC8}lÀ‹M×x@dÿaÌæ^6j0~kßOº7‘·œã»,p‡0[@íSû$vÆA ™ýààmØ>„¼‰Oº|˜í\ððw³c˜×í7Í{®kú§k2V(x ®;ých/zbm¿ ¦òäõ|÷“õ´ëñ™°Y.õB‘qv3V ÖYëAˆÉ.¸îÇ“”ƒØ ²\ÛVƒ·¾ŸŒÕئÚ4ÒpÛ’’Šû+¦~yt˜Z2}¶ïôó&9ì=C¥Kr µ QQí½é¹›î«”¨é~¹ÃáÖå‘\Qd¶Ü\ƒ¾Ð¥˜¶ÓÐÄÛRÇZ„šÏ2cjfÓ€€7½0ÎwÒ rã™±Á,ñ¦B¤ÇþãPºÇõϯˆ3ºê—ä›T·^å¹’Œ4‚¤´ù“ç$#b {¸%b´T*£•ªK6ŒÖÎëëö-a{÷´îüä2¾ÙP?Ú¥&«¼/ÁuW[ÔÊjÙO„µT´ñË8ÖÚËܱk)»í@YÖ5yvçß7F{Â@¢e¹>9Kþðí@#N…”Å'ì—µ–é@!ç¶Â{£¾­'I5v ¬ö]¶ ˜;Ö‘Ç«ÕÒ«Ìx]ÏÃ0æª+ît²nùéoÐ: û乚M¬MîÄ›§½-ðŸ|“áþ•ƒ­o"Ú€` |í?1yøOŽ ú¬KɲŒŸþÜþòPÁÂN;Æpi¬jOSøOð|óm"ëAÍr8OV`û^{âiˆ¤¯äÇúúX2wɹڵûþ ðŽ~|3X½ÇƒV¯6íÐiä9.`Eæ|%…Õúdðôö7#ðôPªÈÉê2ù»´á6ãRè.¿“Œ¸ë~›ü÷×û8SíN¦CôÄæ-fFsÁ±Y½GéŸÞ/á²ÜãÃz>õ0P ÉA*ö~0'М,Œ)ÒP±ˆIEøÊˆrŒ|Ó°T›»‹uùvñ¨Ð¿&@Gu8;˜O…%L<^õjl€´ÁØDEL­YñÔ…¯üJZ‰®_¿†€6Œž*–ªó¹ž^ÁÈ)‰[|` QZØŠUc+§M›(ÙUÒôx»‰ˆRÍÙɸã#D¿3&®ÉÎò‹cÌþÜéÈÄXª¯Ôݪ޺7DAöCën¶Š!,-hÎïí˃1UÞy»¥¶/Š5›Ö– Ç^­»…/ L~EϤ®sV&WoãïZÔéâÌÞC0.QYPsNï1ÃŤ²¶¯ë`ôjŠØö@ ÛÃÝØ|ÌÝŸkp:96gÔÆÝ6,'ª}Õ£5]qOe–Ý'Íœæ–Ó·¾ k²Ü‰Kò€º¼)÷…ôàÞPòRWb2–EÕÇ.œuÓÊø\Šœwo,¤ã¥w‡›±£lìX׿·eÿ®ðöÛÞðϯdÜTO,åÓÂý‹1²¶æÎ!r•ÖcˆUü;°òÔƒèuZÝÆª»  ÕãôÚmð㎕Ȅ4<(Ýç‰4¢Û­d+vmWRnwwb¬ÌI¯¾»êQP܇`OܦIusaŽX^ ]_¯œÿ¼{qJYþº ÞW>¶v>}lý|»ü\·—àØƒ’%GO’'ǶÐ;ûcFù8t£øu^N t‹›´ Õ)P{Tëàùo}Îx¨C^Úm|ÞhEïòn±ÃÏ ­_wÑTÞžËÇ»Ÿ¿/à§Û¤g#5n¯Ú£®ŽyÿÊ-°¡ý0 µî§“.ʧeõòûåñöþzŒNÞ>FÏ?_\¸÷>ú÷`KÃÄ{0¹åœ½ü7cïÁøNîÁ`äì:Çd6KnÁnܨ½]³[ÐXűCÄæ¹¥µ6[P®á½çÛ*|Y=¶àŒ%–“x Îc’Ǿ{nÁøõØ‚#· ·ØHíé-oçÏãݽspr zð¼cd½ßç“/{oïÀÍáòHÄLó=v 1Šb çQÄër‘íh$ªý9Ý=ñõÐþ{ÚQ¿/à§Û¤'#^âúöÞqÿÜ"ñû%V^Ûåûé÷4úC\oï¯ÇèäícôüóÓ¹mñxï£ÿ1g È‘ØÕâϯƒQÆ}ÿ`ØDfqÜô™ÕÓ«‘ã^·«” Ó6òÝT{ê6î¨Çíc_à>2 k<£nF 8êgm­"3fúr8=†Ñ_󸵂¾d&S‹{ÉzÜn¥ó`³Ø–­†{¤“ ûEÅŦ0ªA¸5“2ttÆ©“éõ3#NgúÆë'#Dî†M´Hv&6“~mqŽ'Ò±^ngo>.×öc=³Är›pÈ !ä†ÕÍбk«£QÓk€¿¨®î-•Y’! ^ê0¿.·÷zöÏçrÖÃå#Ÿ>×s¼?w—¢± ;à•c'K!GV*ó}.ù0îz™?ÁHqŒ§-)¬‡{̤0ŽZØ£°vÝ© ^‘‹”Êbô”DN}¢W9¾®ì–ãöݹvñû~|?›©˜ˆMû2¼"Ò’¯¼y–µÇ÷XtWSg¦Q¥–ö»½Ž ôêþz MÞÞ#§Ÿ?š‹ïÇÀTs*!ãhÀ§Ä£ôïM«o7ÑoTÑfÖmóœ¼g~çíGþ[l×nïÞ–SF†ƒlÚc›î¾9|$KßtùþN0BF öísØFúû"¢˜î½ÙÒÏhFõ$Åw’‘þ¾x›ü™··ûèr¿­ÂÛ·\kkÆr:©½}ëÒµ³^þçÞÎ>ÿìëÛ”Ël’vEÐeCšž¾åVsáéÃOÙ ÆÒ±KåªÞmxÌ~šn®«IO"…¶ŒáécŽ­¢Ù#jsÿ OâOM$=}I‡§ï`ȱ÷cä~«6ÎÊT®¾äÄ|äM>0äëc8çù¾>BÝûÄ·:´Ã7[yDøÑÊa©çµµÆxnchýή¾ylÂ+ê=—Ǽ¨ÀshŒX@¼I¹úÆT¨¸i­ÀPC´ðöÁªF€PÖ=}.´'åau“oãÏÚ£ß'Gž¾dÈQ8{ú0’MBPž¾W“íœ[*( ëËšx…ëΟ«šÁ¾>ÀmWߺv¿ß›£+3Ü‹¡áðõ½‚_ßtâœ]}ËIöõasT}ª¸¢sR¼˜ÉeTrëÙµ½z®¡<>Ú‡åÆp7[0l7ŸKéÂË—KÚcü¾æ?æ+„®"*cz¡»€FÀ¨L‰_`ŒX 4)câÈѸÇùª×Vm«åy3ãkWÝ ÆÀ.­è®eÛ®` :Y¢ †1;‹¿·§I>7Ô¾ˆ«¦;»xÕLMB¡DD«³§žE.ÕFëyµ4o›ß´ÚPŸº¥@wv{W›$, Kè”ÍXŸBÂ7R•†¯äÖ¬À¯4\•9‹H¥íZ,ûÕÂÖ²ìqìm‹žªþWñyÍ ×sõíg–1Ûµø0Vi©Ç*Âp’et?4: £Î0ltp/ËP&ã8¯;¦%Œæy>) ?¼J݆ &¦¶­Š]%¥þü˜Š™_]åŒOÿ ƒ|S%&Ít{Œ+%ÈbBžÌY`[6߯™{Ágm„žñÜÅÊœéî¢HyµŠlz”&kþjß±V›ª›»ä5s]¤—i)=hî˜ÓÜJEî®ü7„o9jómSuîQ‹(7Ù¬Ù&ÉÏYÙ…¦º ÒÑ “‘Å¥ÀÝ!?ÿß„ÓGñ5„æá·ürt“!0èß¿îË ÷ÛGz£cã8CK‰¾<Œ³!.aMs¸Oœælà¿u iQÄóþňçýÐðõ2^Fz¡NŽ6Õ÷ÁÎ~ 7Ž˜Ú¯ÇLž(ÐZ`áŠ'6/£Û—+ˆíyA0ªtÈ€QmVó\Þš¸ÍUÓЖ7 57µEFØ`LÂAkѰÃ>úêQ¯B4®õRÝy@—›)¤O ÏŽD¦»á™ŸC‚Q@‹Fâôû‚Žã#SX kžn9pÒ±‡1»T2oÏT’Ù¬]ŒW¸¦ø}»W˜ …_¨‡sŠpíÓ<'k[ œ)êØˆàÌøÀÈ»â)ý/ ®í zÝ×>[2÷íXh<¼ýXŠžÒðóÀ€x‰ó+¼TüÕGJ Є•ŸŠóS}¾eo™«X[çáÕú¶íô•ˆYèŠÇ†¸³½±¶e ÈWÅÅoó‘ç˜K=¼ì¬"ùhûÈ[ïõ¿sWÝ׌ƒ·üUɈÍü=QÂ?þÀI©‘ßÚ’%rZ¡°¸¼V #’(4DôJ½Ï³8qÚÀáã¾FnT­hçÑo_ì}õ Žè’î%齫gQî+p.‹›nêKåÎáÁÚt8N\Xûòf¼ö¯äÂLj…ßßÜ®ûMbá¿öËÆ%1ó?3ø.gÖQ9³^{ÈzŸk=V&ÞСµ9rñU8]ö)žÏ¯ítÂsž1DÐZ¥6nÀè6ÔdÝ€³úæðUÊ8cO€žó}B>™ ­ šÉ7²³“1­ç››n9Õ¨Yá5uTk…ïùºÙ ’iÞ èÐùÐÚ4¶sbh_‰ÉX=ZM…ZØmô¥[ ª€òxŽÁ¤á º«Æ^›B•øªyWunãè+AÏò*­´|àjh¿É|UÙ³ ÞI¹D«~ŒoCéd¢êè ™ŒÊ#¹Æ¾éŽ •7ƒ´J‘ÙÜî¬)uQcï' ¾ö£”™&ãïÂ&•¦ùîtëÅ—N P4#Z50m»ø¬l˜Y]¯ÕÔ~ó 5þÉ æ ¿©>HyW•°½¾ö¯.ê´|¦Eé‡R3Pçù¹²™Õs·¹¸ -W‡bD¢·®m³&輋ÿãþpsÞ¦þ²[o«‘þ¦äõ mÏßÌÉ ä42™ŠÆ& Û[´pkªU¸›:Cµ(TjêcÑÜøªE[‹æbŽý9°M"¦Y´@_AŸYM4Õ.µ–O?íA&½ý|ÁÆ„Õ×_ ¤”z~ç/F4ÈnÍåÍHy,ìt@ÇG“bbíõhøL4 $}UõE¸t5m½Æ†ŠA~)y,é6¼YéÕŒÆÖä—V"™d˜ñæ;Oí} üKnñ;ñÔÕÝè*1£ÛYؤ}“êz6 =|+‘ü/˨¡o)ÇôÁ€ÙíkkGí‚=–Ò匪›*ç%yñYغÔ$“€Ô-'.Ø2‚ÝþŒñÑšÓh{ÀÁm\µÑг©ðì•t·›ç`ÈýcðoYb¿t0b¹å->0ä–ÆCYbð¡õJÎcœb4òĘÚ*‘ìòˆ1Çå’/>Å&F¸<Ççúæ`  ˜Ù§B†ã`2Ë>ø&ŸÆë ­6ƒÙ§.ž¦»ÙU¹jUeã[uˆàÚä2[ü˜0õ·?-ÎÇÈ»ûÄfÈ#½gK9îÑÒ‰½[%8ÜîÐdMÍ» Ûˆ¾½t×›äã²tu®±tHw ·èìˆa¾âö÷PSi 6¦Ÿ.\j¯mzÚ%ÝPé%Óäv· Y±§d=xÝÁ|ÐCÛâÙò¥»Â8 3 ÷Ý]<¯ÝŸ|ç5¢M#¯t,hòÛzÿ(_ØHx+¡ sýPëoFê ƒÔ |aDçö8tP7ކuPW—´ÔA] ©‚ºƒûcÖ [Á£·ú©‚`i¯’*‡#?;oR*(ù~ÂýÅáü]n Ëá#TüŽunm"¬‚z³9:/YWê ¸Á×}¬·ØkDÛ4׈ízi¡îìçÔB}8 h-s즩o+àcÈúþ'fœk$è ÀGõç#×ÈÁY˜º×^#Àñ©ç!<Ó^#CÍ4b D2L®‘aàŒX#ËÆ°×ˆº•œkd)6kdåÃqlÒkdýx¿>Ýiä'çXñ¿¹F!»×ÈÒ!8ÖȲ)kd(fì%2®¼?—ÈpC \"Ã`Ôf:éÉ%2ïË%â|¥\"1Å#P˜Žð/}Wézk=’÷6ùzîDÿÆÀq»5'ï…­ãÓÐñʼn{êþ'KáIø˜¦Vˆ£9®`Z€3­ž˯)?\õæÃ•påûJž™H¶\˜^墭Eæ^0jdîu¯çªÌ½À³nNDô©¹ÕHÝ3ºMSéÖp/*ký@ïÙVÁ¨!•ù¹Ýø5¡CU1#à›è¼ñó&šTS„дT?'3˜¯ST6Ø„âŽÛWëZeOËèô±Ð\®¿bžu|Þ8èÒÓÀn+4gîÅàŽH‹…´Ôõ\h_ÌFZÖqK]"XòÓÔ§?÷HØ1q¯yÑHÜkô¯háWåÿÌ´#)íŒÁEûÓ<1k¯leT=ú{¶( ‰GSB¨e¬½f«¢ÿkÒÞ°…­Ã@ßÿ‡šþ?ÿëÓŒV ¿@’Lî¦Ä ¤ëÎ6’ª)™m´ì– NÞóøÎñ#ÿ1Û¨ª\­­H7jª62ÉA¾ëóÆXgº‘ä;ÝÈ)³‹ÞEw´Nl,ôþM¤„õfñä“ýÅXÿš;„”…0ñ®¡Ü¡gÓ¿“Î{Æ‚ñóÇ%+Âm¾G|÷oà@ø~ q~ÜâcÖS±¿²Ì%Yö£%C¶örÑø£âú¶"qBž¤E[sai-ÃmÂÍ·F”­9¿(.ðàK„¿*<ÿ}Üäg0Q¡Ç'F~å6áOÎñÃñ "L˜~Åæ[+ÔHÕD[oËâÇp¹t9Fx¨˜!¹ÜäØôׯÓõ/°çrÍ-â:÷\Œ|èæý‹/¾o’C á5¼1#g‰çO®³gZÝ5Ï¥Ò‘B¬l“ Ÿ$Æë÷Éñîï˜áþf,÷OšÄ)Š´!·„P™aÀ4Ñ $½Ë{B¬0ã\%üÄïô±Lu‹ŒWÌÍ1ŠÁø˜5Äñ–-D39îj:‡!¾²åÇ-ŽKr×û)[ò7,[Ž[ˆóã¿ÿhõó´ïõ|€VÿJ&ºÁŒÑÊÿüõ@¬k“ßmãc}*éçwržKÀÄ¿ùK›ñó6À±þëά@)+¼rÆf.j§ð;½E ËÝ9­Em4œõm?QÓ¢!_8b‹1ºìà ujõí„h VÜnªS"{£O®ÖÇ-?Æl*ê¡`ò_ç°0˜ˆZI"G¤­¿(ø•‹¢¼º@?ì™HQ¢‹Ž#ó`ƒurÌh(‘ÎÔŸH¢Aw¡’å ª,F`Dg7àUiñí ÕXâ•åæbnöT*݃½ypªNãÐ`¥¨Yjæ‹Úu§™TãÉž4‚À¶•Bl˜þðìJ¨ã.,)ü:Tý–\g R Ááýiz—›qø˜ wö÷T>¼ÊFµPjt€,:*—ªª³¢ƒHQ¦Ä‹¯²iÎ$ƒRf`5ݾxûi¿³ðù4Oÿåd>îÕN²<9ñb`åtç“UGÀÏA?À7Ý…@® ƒ{÷ -ô9Û–Ó~ùe'Ó3¾×…p/ºñmв»3J‡2Ž% ð®Š+0ØI¸» Ö)/ʽ>ƒ1™eÑŸÜ”°ëÙoÞã+× r@ÊŠ’gjK6WÕ\¬Xår{ƒ½D!,ËèðüïvªÝ câÌ[þ’ªõM`yõñoh‘¾ûC/ /!¯«†ž?¾ì/êðJ‰òß‹Žï€À.^¸å k`Ño¾³¹Ðè ¹½lõïÉÒÊà ãaª>çëªgJÂnfy˜9Ãíq?ºø*ÕÞà@rÆR%œÆ¹Q ·gæ«FP~˜B?†î·e®#|ð‡þ/-µÂŒÁßéÃ:Ì+Õ±ŠáXKq'Q¿%8àªÁôÌÛrdêéó.Bàëšê”J„zRk¦ ò<IP±U€î.IWŸ; I4üB=èÒãÂ;È>Ük@ % RãÖbÂZšî¶Tš;/Â6$⟶g;{GÒEPâÌ?œnÆ‹ƒ%AÑyFÓ-Œ€¯÷afõIMO)”t9¾P”°~’La9S—³R¤>„+æ–z»¢Ë,ƒtÔw-áå‹ú7tµ6 R•—[ax‡Ùœ/TŠ~„¶H¬d©wÙlÓ­´éfa²’iÎÔ#’ýJnÞ}9ÓñkhmçŽáx5VJ-M“@—úÄÖT×ùKrAPÐ>¥³a›~Ïúúáã<6¬‰áºI9-FS5/™é,è}tbøètO”"éYò`Ì7Ó¶! k™üPpÇ´];U»ªºû ïKã—fâjQ)¹H¾R 4mÑ8'MQ’je34_¢í9žD:^AûYS¸pDßGü㎞^‹–7›÷2èdƒ"ô§$Žûyöøy“q+k-5.A¹•%{a…ì*àŒY¢ ãK[geWF:èò5ªÇ ’…œÉ¡x%§r¹ÎõW(‰õjÏÅclY½—ÀSò„ÈN†ºÞµt¥œ?/–ašâèú@YU¸U4ªZ5/çÓ8¼h7eÑÎWBè,j®ÏÇÔœñveSÃ1§Š q¹ºc㣟çs †e|23PÑë³£êíÏZQ~÷ØøCÀ×SC7„v,²97ø``¬—³1ŠR_KÙQi®+ í&8ä0UX“¨|ê2œö€Ge"ZQȵÉ6úf½Wm˜YNøäâ®’Ïy$ÁÀD3u ú0ºá¡¯-uÉÚŽÌ~9ŠÑCÛÃõ¸ –χ')er0Xé_*‚û঒ «kµqÕŸd¹d€Æ k1Ïý§'¿ºÏ/Ç«Ø!&¬`’öv=3ƒfE@PºÁã‡Å)z "Á祃¢4Þ4‡ÝUBE)«Ä¾»á7V¬Ï>l·ù串¹gx-ãÈË|'ƒàå¿®®¦W‰{¦2¢ôè¦ËÒ6Z°ÜümÍ=49XÁøˆöº¤?À° ì• ú7Ñ@Ù´Yj6997)Ýi¬7û­ôÙû oö-Ô`è¼ÅÛS(å+äÑ‘òá$Ùñ] ÞƒNÍG‘{'…ßùô²ð=òr»]'<ÁX¨¸Ëp/JÚ­'ƒ¥g†!ë}rP"uõ ¾·¼‰:$€„z„Ý£‰ðŽ’®EöôˆKÕï“*åíZH—«A3åÓ}(ž)—s===áìÞ9òˆpÐ=fZ!–±/`N-¿œ«(‚ÜŒ'zÊŠw2rlŸÆŠýîNxO³;ÎÿKŒ€‚‡ÞÓGÒ Ä©×ºècf†ùãȈãÉOß·¼DSh‚„O\tyõüÜáÁ¾ÞfÐ 'ƒ‹½ YK'ƒ©Ã^J¨sm}\~—?–ŸŽ8Ç]Ý<édAîX~†mÝÏê2§½ü|–Šå7¤:bù)7ä\~Cþ†XÙï7²”÷˵‡„—àpà¾}¢Ôt±sªcGÌ÷ œÿ´sý)êXnR‘Ckd¯?Á•çúÓ¹|/¿¦Ós,?Ãûx ¾ÚËp3¸Õ7—b#LÓ^‰ÍQ3¯ÅîZÄXІ/ÜK±ËÚß³Ù¼ƒÅx)JXæ¹&ì˜8l¸×âûBû˜SUäcøþ¼q/ÿ0LŠá6L:Ÿ¤ïñs^ÆZ“·œR8uA]ÙÙÑäWô¼ÌÏð¯½è$Õõ29˜¹Iº¸‘©¾ÌÆv°>Ã%L‘)»×Ä’±• ¸lqÈË1îiüĈx}pÞïññÑ'OúÏòQÜM‚ÁÖvZ¥S½ìxPÔž$…ü)ЩuÄxÆ&u?ؼø¶µN¥ÇбËzJµ*{´á 1I¹F¸ó$ήy¦^îF$ۇ틤âÈDœ’ßE]VjÁÌ)5H½âyÁäY=S¼‘™¼ä Á57’ã zÔý…ýûîvé1âêàiÝKWš»K¥ ·`3Æ?ï !<ÊCÁ ×ãTÙË£7†¿T9´²¹õ–[çéìsÉõ¸ØòÑ»ëýsûE¿I3¦¢7XÈÏ“þÿg…íÖ~¦X€#ÍímEÒ~´`è †¯/‹*ˆ¨é&Ô˜ÌæøËŸÆZv·ÄªRôB"¨‡«ë⩆ú…ž4Œ>ò—K=-j–R®b TOÌÑ*Ò´¼ý4´ÄàÖ—+ž O³#Âsͪn4€‡ýÇRù¿¬ 9ÑË1ûœö\XOgÐE€]ÍŽYÙƒËÄwßÎ}Ó‡Co9ã2Ñ+dÁ”oŽ"gº×ã–€ ࣻû~Ù¦ˆüCAõEq{;ÞÌî8ש'ù‹§ ‡Wz.OâÔÚÂë˜5nkÇ#ëÓœe€žõäƒwó*ÇœÏÛŠDsÉÏÃV‘¡Ö…Ü„daé†!“Ñçé ±V¾‚ñ’õÆv¢Ë¦©ÛÒ_út§®L—b>:΃œZ;l=ócù~Dreišü„Á;'<;õƒòi›üS•Ù›ƒÖ\M-“Œúü “dÑç¸ÕT¯Émñƒáu‹:É~¿‘¥¼_N‹´¥,þ©t›mñ6ðÑÆgÓÖ%¹ØËëiòÃÖ÷Êñ~[•Ë ;JœH-O®½؈sZ¥†Ñ¾z—ž"ls6úÚ}17ƒQaaô“Ôóæí…mh«Ÿd8Ì8æ…Õ?u²'t¤V¶Õ?ôÚ;Õ^–“Áƒ`ù?ÖÚ¿dÕÆÉØîl£î` Ë}ý(Wî#ÃÀ˜z0õ<ÉÇ>­°OèÏÞ$ýÙO˜+#|TqA—?ûáÎäP+mž -^Jò°ÙZ’Ï·Øþèá°^ªvh×p ðc#=j;¿f‹¥ÉÑ˦=Ð-¯çÓ4åº==Ú-½#8¼vÏ)j`º/§U¦üãRU-Ú†W~Ÿ˜já«LñEñ¹óè!hÚ;ø4{´ î:48ü…e¹{Šöh z´on*ÎÕö¨l‰Sw+­–æ˜Ø´iÔ¿9uD’O›îMY–ÕYÿZà}lW)¬ºâÄóâå¾.G§™­6wÿÚVGz3€çÓÚMiYÏòéòPаê&1ùè²ä£“´C{3A)Þ·îñã›ëZ†Ú]q´G‡‰;PØwÚ`3Ú5½Qòä-rhÛ#þÌph³žÏ‚»”×’íƒì+.ƒã?áÃ0üݾ så 6 q£GÛIÁ&úGôþ¸ ¨zéYQ^ÞŽ€ óy(þ#?ŸŠbXr=çŠ{«ÏY—¿¤•ô‡0zL„Ư´_ÆÕ{üÒp]W>CKì'[(®ôþôté¬ï¸òüâAP'é=ÎˆŠ¯O«»å6Ÿk†¯ƒø3=Î,Ëy-ïn- C¢?:6®'Ýáß%tª£›ó¦º¸¤Ò¹’¡] OªŒGÖ)~®ù¤Ï†ãkì£fm±mR¡,&í¿³\Î Ü“cŽk6üvÆo¼˜4ì¨Bײ Â­¯œ’ë#|Òeóè¢ÝËö”:!]\3ãnÑž²Ê,LÆëà ’Z#q׿y×O¢ ã·°à<ý!àö½†‰ÚŸ¦Ú’­¹ù-Äk–Ñ~ß­ívª 88Í`·430˜xPÇ[NߟȮ·P›Ú°ÞòT†“IµÚƒ°=.`Ñ2n÷½ÏšÒ¦økú"^,誋”S·{_&ÍìƆaÕsôñ¤ñv (áo"NNJÜäÃS=rbéœoŠÏƒ†¸a,W×goFÚ—·rOš|J ÙèS¸¾¯ 9¦tì ¸!o¥¶D—Ó;*šÁµ1¨fD â£AÐXR†ÅJi°Í®[ÎXT2UõpËÏBÿê­p/ñ° I£_Ñ”5ù6ÔÍ¿ß8BÐ ÆÄÝQwOÍq׿¼§³ç_ÑÊñ¦YÑ•¹gÂo™ä—ð¹ÚþÜø¤µži’èfz=ß¶ Ê3/ÝÈ=ÂpàÃË>9‹ÑAˆqý/½MSPð^¹)%=%%C²;9°Øà˜(–FmIªå½;x™o¹ÚÈ·YÅ}X5=Ó]=µ´s¤Ïµÿ°çñ†”¡~ œ°º»`ß‚¹¥“1uîÃ×x>Çè^E\š ¡*ù«Ó JD ÉO©$ýMA(Í}k`"yY Í-ÑýTYoÆ‹R®ôým¡±åͬñµ]‰ÑùhR¯|ôcñb¢ýÚù핼»í•?cª‡û1æ_ûu&½,ÌÊ`ð–‚ç‘@¿Æ¨^w4'>ÕКáË0ñÇ+ˆPŒKçÃã{û‚ë™ÏJŸ·[?63ª`Ò¬}–kÔŽ Z~Áü¦¬Mß™boÞȦIÀ‰*KBÐϽ…d¾—¯|k Ù”Á9f–Ñ1¤’g{Á´ØI1 ©VJíwÆ·òvܸÉONÌäÇd9«(pÑ;¼Ê_k{§‡Ö2$ƒí¹¸`Ž£–Ãfxø^ÓæX Œó€} ÑQð¶Iõ ¤G..#sô°òÏC¬CHWµFhÆ­—ný» f¨Îu¹h9©•S`Eç.‹aSáUPYKÿëžÛžxTá9Ž5ÑU=x,‘êœõ¸  ,†+,“’òå‘ÄŠ“9>ÕOü•¤åaûúu0¸í‹€·îîpl¢ì¼rc9Y/vòZ]Ùbòc÷ò:ö­Ã«‡Öšê{Mîš‹L_ôfÜ ˜±Æ¼ú¨Ær'X^Ýàþ÷4ÖaÄ%®þÓ zd­ÛU͸µrÔÞÆçUá·›øÄX²ì'LJwûÞ¢_ÓÅ¬çÆ“.ðÛ‹Âc~—x•Éb8Fûò?Û¸ØöÖYŒ ûºgÓ¨4W¾Ž_¬þ²YñŠ6èn¬eM=‘%µNå‡ ßlFÿ¾™´Z+jeAÛ¡pÞ6Y ÆÅèü-Ïê«T)N÷&ù,Ž\ï .7²¤rÿ¨RO'—|ì a\")¤iÕcæ‡Ó°oÕòóÙY-{ ê‹#u‰Æ;fkE(‰Î|–~&|´©ÄqE×O«j‚"mRew¯ƒÃ¼Ç+Kík†3?ïÀÙ.‰¿Ua1nçEYBInëÕ¶• †íòÞ4pË'š`ÒKnl+™Ê²âÒ'ßÄènΦä‹OUrv[%•u ôÚÜ-`ÕbjZ¬©xVZ-Ã}–ÒjÁ2ÛŸ§¬ßÍKPâªÙåŽbù-¤d0–šÚû KÌ[0°Crœ¥û1M„¸³…¦‘NoűlD!ê2ÜoëŽ"T¾›Ï%Pã,I@&r¬ ¡œ6u5R2ë•Öýêö`É«Â[¤ž¾NF[´ðú©Ë&¼3.Õ¢ÜJ‡J*Ù=Ô0"%;^µoQy"<è½bGÐ5EëmþúÚ²En£áf·@,™^!«>V–Ö´w²ŒªuÁæ uXú-Ô5üd¥FýMô1©«àä=ïœ?òºGN.*Ef&TŸŸPƒÏ ±Ç$†êï¬&¡Gf"ÝËËvºáQnFNôÅã²@êL’yòñŠ,’n4˜Ö!R>Ëh—h%>”ÌCQ܃â"•S??Wªh~[Y'y÷+#~]aöW<Ý­ÜÈxz“_ùvñ¹ßæY9§ñ)¾rði<÷Ž…1•#Ž‚d4¹ó™`éÇÃø–n;Ý‹¨Œ˜ Ÿšà#˜·ƒ9–¥xØ®mºæY»R–"§ CiÊÊî˜9|ñCeÿO;Éœ 1dùÛ\:,¡û/¾ÕWþþ#'y<Ý£Êäxz“H¹íÑ÷·3bdm`t轜#ÇÑ[ºýÔ\èäÏmñ1§Çîrêa–Ëõ”ç:Ÿ TqôOŒâJŽ<÷S ƒv×÷rŸn©)ÈÊTƒµ°r¦R _aÔ̦…I•úü\5]<â3……µ10ShõµÏœGåiñ¸KÕ‰A M&ù~JzýÅÙ²øÎ_Œ{ºuŠ÷TºégŸÕg …妃„´Ã]µ˜þä¾Eû4ònÊþÙìˆcº‡eùì9$Š,Ï[È=ÅÂyú±þ¥~/Ô.~÷ϯd,JoXë£sC¨~/8‚SADÊ ÔoMëÊn`õ¹ò¤ËlªgÁ+Ü“HS¶;h5ÍeÓX t…·õžjOj¡ÅU JoU±[¤ž¦«gø'¯æö¦bÄû!ÜÞìyãìe“ßùÀ@"­†ý ·©7:ÞÁ¾žãk˜ŠLý‘‹È¾ dò_f®¬¹ÌAq$Ay7!Y…΂DæéܪŠ;¦âä}ðq äÏúcF‹A¢SÜ$#ÇH¬÷/87Ë5?7íó™RâI"­¤¸qD=Å "æõ7«æ øya±ÅÍrÆà7QÁfqƒ˜ù½ÅÍAJÜ$#ßïQ®é_œceÅwþb„¸Y%â7+\Îp+À7xÅ‘âfÕ¼=Å ’ Ni³¶oŒÕ¬Q ÙrDV4ÂTQ…¤Mΰ¤Íð/=üž²ÏÙþã 'Åm0nÕî3ì=ßFhÇ­÷ Í âÈ&Ä%ãm¯ã‡²=ßû%ñ°1òa?%=ïãp lNxÔHÏsÌf®T÷2V·¡¯È9ν.z˜-ë¶j{ò†Z¹àäÒ×½þ´¯Çóô #¶Œ]쓞IÞé %NÎÅn|·Jlä&à–ÏhS/‘}ˆqv¹{~…ŸdÄ)å(à[èஎLÕEtˆ\ÂÈ gûàuûF§[bUkù Ø”®ÿ ÁAÊ_p0à.à×oKNº“ÝRp{ ØSй°ÏYIŸ(Å:Ô•ûŒßå»ï+t¤“߀C9,ίéÁîµmY¦‚Wø¯IÞ6ýeœoŽ`@7¤÷€÷|"ly{EË3ÖrÙ•»ïà,߬Ú<£ùÞl;2¢¾’>¡h¾Ž_|yðn2x†½4þJ9Ù´ü'§5÷¬>§t¥ÄÏÜ>6P¸Ê¯'} LóÔ­_ÛŸ wõiᎶ „¡´CAÃqvo™jG|ô‰dz® j=j‚%^…×ÉÂV”]Œè^j~NY„v¸8¹C¢sWÍÓm¬wÿµ/(>"®ÜAøûÚî…-Ÿœ§r1•<´ÄO‘÷õ X‘Y}C§P¬ÿó×÷êÿzõ6„Ì%8ª?JF*›ó{süÀqÂx0~ÞЫÝùô*Aì=¸ö®*Ó†Œß¿Øáà›q-+ Ä•Ê8®` õ{v7§…öû;ÃÍ Ðü½Ä7£«Üä¹µ‡Uì³ÐdOmø;ÉPvÑþŽ{ïì»"XsüðÛëýKé6$,Þö3K·Û“´«oñìÆ"s¤B…6ÿ ˆÓ.·H£VY Ö´ª¦õjJñêÂU}Ó^ƒ¯ñÒÕG$~ÔדdÂØ¾Ž VÑ·pV$Œ?ÖŒ‘ ‰æ‚êú\`¦Êbã«:>‘óûבc-þÒvÿ0jƒÃÿ1ïJ¶ycà°Æ(¢uá:hÄWbû›JË$v¹'—®G²OPÈs)ðÖ¥Û‚üâN€/ÀÑ·G ôWþØt7 h0 žQrŽ2?>­Â¿ 9¤< š‘ʇ6Æã&-¢o Vþr Tpð³1Ù‹2Ý¡¼ 9þãø\õ»ð¡€w—+z¿Wû¥±¢ÉÖÞÈáû•)z:¢ôçÇj¹w0`¥vÊ‚$f¨ôô t ­-äd¤£~_¬ÿD4l$ÅI¬3é—ã_¤/î¡¥·j5¢–þá)D^}·p¾Ùf‹9|1ŽZM…Öèª[W}ŠX 7;)õ{q¹-q@…Ú"Ùôƒd REÚñ¹`K^¼½¢½ñÛÏ“áaݦ\WÕ ß»¿‘»²¿þv©rÍ7 ðïK’k©ésÉ$¹ÅçrwãÇný˜£ž:\îÂP&ñsé˜Ï-¯ žŒéUrÓGú›!¢;Ƹ¹dšáŽc Y5Œc Hä S2 A * ²‡9àC?±'d¨.+B¸Ô£\ uÏ· *Á¥ñ`ˆ7¢œšKçŠÆ-l¦šð+/¸ˆå;”cÎÝ®éº$]•s9TFùz·(ä¦&xø,uXX÷µÃK`tE«ºDYP‘T|ü¢’<šTGBÊ1Äybƒ¼iNQë[ˆ*Q•B6T‹Ö³VJu wt^Še¢8ÝÞ²ÈçJU '\¢ˆñ"«¸Žë\Ô!YGAªPHŠž g´«Û £)#6ÿ’fc´k6ü-¥-„%êÙÆ8c(%öĹˆþ¤¢œ_ä7Õ3ïW«Úsuãà{2Âr™jþԥÔ4mZbßá1Ónæ…1â&_\áõ‘ ´=ÂgTy€CÍ¿,<¶çØŒŽ5®Ð½­‡@ßö.Âb9Bk9·µUǶfÔäØÕm ·0޹­•ßznën}r BöZîkeXûz0ô²÷µük¹±'½€ÇÆVI[îl¹ rg‹Œ mí¡œ¥ØÚCi@±µ“Œ­}0: ðÐÜÚ8vöP¶iîlyäsãvæœ;›`–Ççcì}=Î=Íj‹ÜÒj³;úuÐÚÒ›æ–2rcK‰ÛÜÒC5ú¯ÜÒ]+Æô}Ì?†=*/¸D¯X’qP!ð(ûd~¤¿xQVdÌNmb’·á‡§Ï ,T=Èþ¼‘ô½æk^ž{€]`yÂcý‚Å3%?ó3on´}ЙOÎ#?|rÑ1iÊ{¨S”"•%Ë)ܬx¡«òQWò·)ñH“q{äfyùÜÁ h8ãt‡‘5ÆžŸ·xoÆ)p˜½[10Åb…¡úÖDœ@<€»±:DÛfìÇ&L+,æƒÌØK†*ÉoÃG"‹áeð8éÈ01› µr‘pï+0,âº5ÈEˆebHÜ6 î¢Z‡hRë!Âçc­2~ÊY &X¦C@bÖ®a¯°¤¬3ˆx£â–ýä¢R¾ov(“8o¼ ž é×%C9‚S ©ÜýUaÛcïéÉ©“A\s24 DwxÜIG†9I '·75z/’5íú“$Ø0nCbõ[Ö`)}“¬D¦h!`Ò”÷–Ò„Ï‚)Œ³vÖqãœM«užÍ¦"ùíÆ­Ì#,îNø¦)ýÎCK›‘ÁU´óïchb¬‚þØ nënø’Ñ  è©Í_ùãÒyÐñÃïÑ‚ÉÂüå›Ë]>‰"v|üøìIGñy$,d?=ü8³Ë¢_4v§ð8éYŽm‡™,ßǬ¶r“¡vŠÛ¦šR C_-ó+.ñq¢P˜iÜ‹Ív+<à*RL0¶wß[ uœÇœÌ•>>Eâ"ÉÆÔä¾*4ç?6 È¡ò’…ó’»™BùÇ´¾>FŸ< 7 ®?¿þ…§‚}Ø*(?o߀_´k=Âý­¢]‰é`|ÅÑû%,Žo†Áž’ñB„¡‡5ݳ‘):ï4c1ûí;îñþ Ÿ^÷QOïçÒRýóëQ¡ƒ'Þ%§Ô-)qÑ0ú:ð×ã:Ùçö¡H~“GÝ"‚äõjþü’ÉíæïÛÐ>­ÈÓã&à+N‡*ñr óARš~C"”¥¿˜,Mž¿óã¥#^¢SmÚ0¿,_שÜ8¼"õMuö½V­ø•¹ÄKJ#¸Êù±mȰðôÞ6[žÛêùf½ñ#ÔþÔ¤ ‘I²jíÇô~\ñOµç<—€ºeåç,–@•¾Ýk  ©5×€ºÛç‡Ç8×@õIÖŸZ{ ”n¯Sr „b lRk ¸3§ü{8ó“qLyñaúãX%_‚k XÌz „5—k Úík@9W9ÉUˆ\Õ‡»üX#ì5 ŽYç¨{Í\pÙs^•*ûXïóûy uŸƒP#t.ê¨Çf<ÂB'‰É튩­I<Ñ~MÖ’?®!YB«;H¹H‚èa&–Ú¬¼„²Rmb.Á@d]à¤~™áR“ßW ë•(ª’³7”´†áÖUáY0iÓ?Ȧò Ëï_?Fî7®`´p îo"N®À¸ÉFçI KÏÈî€t– ñF¾£BqQqG¸Tå~/?Ò ãXPÄPûse\ñÛXÈnåǪu\mÍ#L²×£ YNtuSÈhˆ­ ´ræ¯'zG/Á:yéhiñ  nO A õ²õ6ür ŒNµx0øôè|FqÒ9õU[AµN¨Ïo·w:|EÊ!¦pâ³ÄÎi^å=Ô?­Œ¬ýÀ RŒèVZäM¿ •W¯’t 4yæ¯Ë fðYpáo~cZ°.ô;—7a±”©~¼fÁAð2°[Êdrgäõü|ØCyÉ2·–Q8øc O÷¾î?y €’¨U) l€j{~[TE>ÆÛp6å6î |´r¹%ûb²btCâá€âªiêÑø¨{œéß›–7æ{áW£&w›Q\w²T”UÜ:iɤâÓx!£jŒç€éYä®)HÕâ,ò%'Ÿ(' 5>ÀSŸC #­á’øòØm—WÑo3~ ñ'QÏ–™Ú¾ Ú¾¸¡£èß']˜’Ž~w‰Y"Í–ƒŽæŽ_øo5 Ũ4ØØ„ HFœU9ÄF,1*£kú¸®Þ*äI)_U…D•ó­’ªÓƒ€äqÍ“Ô!ôup«ž_W–`Þ^æ_þy>ÿ·ìô³½â}òᗫ¼ïï``*GÛïÿ’äòÐ[½–fÔ[^ÑK‘Ž*ÏÇe Ÿ°Ûˆ!rJþ Åá •šŸ Eýmš!0ÔâöqË_¿©ÂòÙø:ùè·^ïoûýö“È¡ûÈT#|G—Êjð kF£º¬«Ê$p¿ED…ú8‡â¦Á_p7#})Ô¢Wrt©b2ëÔ"-}hõ¡g .õÞZÍ‹…ÅêKb‡£3mÄ~‹XÜÎZcå6wÐ€ì Œ§i×ÚÀçÌ!(ÍAyä7ÖDU5ž6†æQ}ÜŠV¿xI¢G+•5¨¶EªëMbª45ÛXù1WŸöwÔœå÷lV¥<¬ÕIR‹µ:çã’_£Öcµ@2ír©7æA*õ<Âmó·iÀSu¡`DUÜ)¥ŸŒ¶Í÷ÙÅÏäÂfܰê,¾Ý•¸†-ÿڕ原ÿ^¾µ[ªgã+é|ú͠؈¯+ÕÖ·ßC£_åÐééb\ßýkÓRïÀ˜Ö,œ­Êó¢ö”/ú~gî)=$Þ`íZA¾Žw‰ ”8ï¯ßFFòÝ¡u¿[hDle?]ؤ9a³bâú¶i«ª—ýíZóÎtjä¿\ìDðs•ô)ø¹7ƒ/Æ/¿òµë1"üͯjŸ¿†óÇp<ºS(]œ®KÅ¥+Nî\€ÚlÍ(Û©SúMõ-u¨Ú—Ôa“;+m⛆嫹TÓp¨sKD1$Œ8*„em¶·­ñãu>+©û3MÚL·ƒñt#: [ÍC­:rÑÅÚÔýJ‹È:ϽÝ€² þž¢VÒ?Ex õË1ýj’¹˜ ÕÊäPŸ_`t‹e[¾ÉâXW&ŸLþv|Û80%>—|–Ëö\d/?[¬Z=ùÞ~¯üXoMòÛüŒaáÝèÿ÷¸éŒÛcT©¾m:w£ƒÝê~Ÿß€¡Šû ¯!"Óa\Z«i$BÍ·â>sÞœMÙ­¹w¿i¦äÆÇOžfa[·GÍ(×°‹èՌֲ”åÛœ¡‹ü½ô“Ì‰Ø ˜2þ¶L§ïÍûÛ Élóö¤Ÿ¹)³9v.¦Â>5mdbŒœ±š›ÇeO†¼=9>˜}ÿL£ÿŒOƒóË-ñQN ›žáiC)ûf4 cxcZ·Îo ¹ØÓÝÞ˜ÖÃu Y²)ùb6 WL€y…+&€¡Ò®ð¾,Â…+R´tdËÓ”6ñ:.`I¦1Hõµ'Cfz4`’7¦Mûè9(yc’Η#'üía;c‚‘6nñ!_L›v@ÊÃ'Öû|Êm¶ÓÓäcW RŠ}¬äÒ>ÆÖà·ýy×9Vž˜Östw+58‰·flN»bL§+æ q‚o‚±'¦…(1DÁZVðÄ4·5•¯¥}`ïCOOŒé×öÄWp—M&mÚ˜iÓyÅá‰ùf(‹Vj†°ÒÕÒ†·Xöáq}ÚsG5­`;LË{^`5Np°îåðà ¢È2 <ÈÒ÷ãä®Ýâ²Ñ4»aЄ¬Ù}{óUj¿éÒ”2ŸOÇËå…i3à rÂ`û B¬²\ß|²·Õþ/Øc#¼ùtö÷ð)\›ÅüDëÛþ8Í(¼ýÈNne{ûû![+³“qÊÄÙÛ6§?¼3{ûû½Åôõù´·¿+Ñ,¼ý`VLÜ»·_é3ycl#Åßù‹±½ýýΗ€ˆÂ3=#Œµ~;Þþ.GAzûÑìpç÷ÇÙR1á™àŸkˆåîIç]ºû1%Õ†åukÂF./N¨ßoz†Îþèîg'µÃ„Œöqø€Z.$µ¯ÃÔ‹p–:n˜_8~á¿ù€º3ê|°”àüú3€PuJc”L) :2 㼕2 Ó£ á9,~)³vÙc0×N½™!@$”äks äGVÛÓÝ鑺\`äãòÍ @˜_\E©,m­è¾ãâLHj$ a©ªv„ßkzAùÇ©¢IÃòw( õ´$2%8?=ÌÒçÎQ Ãñ+F*¦ÖSZ xЧÆIZŠ—&a¬PaÃÂË€2‚Ð^ÃKO§‡ƒNÜ ëÆÀJÝ9nÎÏ0òJ“x(—Ø?¹Åœby6„dLƒ’] IcÜ÷çœ/cÎ0ø‚JÄ9âé@ÖoJ˜JÚ¸ú¸¨ã¡¡ÍqñNP±b±,wu¹¿ˆ.õ¶>æßnç¿òØÔÝÇ`ŠAdˆ¶7ÆûWÔÀ^†mxés¸N/]4`Jñ;\Ÿ»Ï¯è4tjR"&LLFx|“}¸‰›¼?ÉÇžpð[ÆÍpÉ["´Dš'µŒFV·¤ƒwÌo?ñÁxª#L1†³z˜ãUÐÆÆ[rêIŠœW 'h­3¡$šŠäw ð°¯`¿àùv“¥F9ªs¦kÌŒÁ+¸ªž¬ž_`OžyZÓ?Þî#È‹%ópƒ‚þg‡TÑXÁ} ?úÆö~n–\©y¸A§†þäéæ u¼98ß°±Ä>Þ,Cråñfmw)蟼tzYOF%t¼ªoûxƒ6ºNÂÁº_†/Ìã {LÏ8Þ,eøxsPÙQ@Œ8Íü»ß‚g¸ÏóMrbJò&:à,Õ'e°™­—$&rQ÷ 'iû„³Œg)ÌvÍõŒ6/·0 j}G¹Šqkd~ £¤kæ¡Ì,õ_éý~K•ñãý'ÿ Ú‚ 2k¹…ÖæLKn6Œàxãt]ê~q¥&`áÓ3Pna˜,!A°®ÞR­¦ î°†a f?®xv(âÕývû¨y3–mÅ>UÓ>Ë@y ªùŠú“#Ô}Ç7ÑÄ»N ½Úã|Hug}~4c`¶ÐòE §(H€íu¹½Î"z?ŽñX†.ö³Ã&lÛemj¹ÂÁ@Ê—©„~».E¢­“nuàd­: *œÛgà—¾×qÉãœ1à ^Oæ¹È!¬±®dôöë\{žkÑ3ÚŠs©ÛŒd»Î&^$"úÉfíÅ_ó“úøÙõ`Ê…“žïvºrˆÏPòŽE „:®LGµ5)Q« ^t§¨ÎoÍÊ|¸ÐÛÀ¯½¯•nçØÌ+n±uÃ[úÆ™ãÜÌãŸpxrÁ«™Ø¹—‡OpÚÉòáï:wÆcìåéÀľdØ(Ñ^žiôÄ^^,G8öòòÆ^^<öòæÄ^^jܲ÷òbtï噾ߨËSƹ—'3‚޽<‡xìåa³5®Î‹½Ü`uŒGÏ7al¯.àRíæM®ìn"ÎËš7ˆ¤TîèžN³ØÑÎÒíÌõÞ×ÌÜ­ØÑNFϽœ$;z¹¼6vôKCþkoè½þ´¡ß×£æèöÎІ~‰¥—Õ†^™!¬ =3ç,6ôÌ[iê^.ˆ;Ó_Úb,FöçøØÑã]0yôʹ£»³©bGw;öŽÖ›½þ·[úŽÒ'ØôØŸÉ}ß%þæ\ì;„4úüZ°‚Ã4ËŽ ’î  ±›rV w['¶%Û–Ý·`¹-Ÿä‰T…GØ6~¸`íÇÝfÈùµàÜo;>K¤pëÖÖYÃmØnUvp ºþ²Ì" U¯xý¯dCäzï¿{¤¯ðbüdyÆ~ÿú1…Ÿg¹äÃñ øÜ7ßãÉÐÁ6—‰£=ïbåÑ%û¶ñ¥·úoÇ}âîy(¿ÿ\Œ ýõIþ¬U múð…çŸÿ“(ŽèuйÈ,LìTõfš¡ÏK3Íx!í¢© H¯yœk¥ùb† \µ2Ð^ª¼Dȵù&_Oªñ×¾žPt¿WÁ‰Å–A о`å›Áâ< ,¿P¶y_¿~¼0-™èZ'Ók¾¥byè Ž+Ÿ}I±'ä·,ÆúrÿD• ¿<Ï"LV_Eýo@ªÌ©4WV¨svi )Tˆ_¥y@»›&uÄæ|dŠ ž«z%Ùøk_Áàã¼W Z„Œ‘<êÕê& xœGó‹PV1jOUŠ2F¡¤A«Çæ %¦•…tœ J ¾Ý"8XjnTŠA@çö-Å‹þü^UÅá“ÌÝeù‰Í×LjF™ª‹Á;MæOºtÌŒ2‰ÂQY„Y”é_+ßóû •ùüâ þÖœeÈñ‹ñhod¯U׆gQKQtž‚ƒV¶`ü‹A§@> ÓjLòb¢åçêÏ»} Ò²¼–ŠŠ ‹T"h,á²\„£©D¢%+&ø®M×Ó“ìqa:ß9rÊ«-ÚΓâUe 3Âfzo4 ,0³zŠ:Ì`U™®cBb#VØô ”»›/ÿ€“ ¨J›ä·â*j,$’Þ°J¥ p®¨D²>vÒ—EVuœ-j˜Ë†Æ´†´êú``hJWšÒ¿°~yS«Û‚ãi¨¤BÀ í »–]™¹=eú}ëwÌàh q ûõñ€Jâ Ìä#j®ƒRp€tCSždéoŸÖñ~yÓ‚bMDUùA4ŸE bDžªö4˜Ú¡Gƒá©…ák’S)Y*vštŧ—_LåâEéÚdÜÜ:õpPÙ…Ž>Œzƒ•¥CôAiýæ÷¹³tTM¯²Ð±®Š's¾´ôš8Óãë¿EoY~X‘|yÀà£F•~n’Ž_¯‘5­½/Ðid-s· ’ú #Óws`‘‘,žw^/EÚìz­ÂªB,Õ%¶Üúcã~r‹aÍRø :Ò˜™«+ »ßHcd1ÛÉ`3BnÂì‹äT#ÌU&±™¶úþ[‹×{¡å‹?³iûi…™Cò‹ÊÉ•‰yRƒÍÀ®{Õ¢í d³*p¼½™±‰MW¦†mÑUåg|ͬY桘ñ—h»„°«å‡4„d&ö9‚—¤NÕóA1BÏ m /œ“𭦀òy´6ìÁ¨¯×h)Q½ëqóæÂ‹ÃcbøëêÂDüGà ¥â<ùÑÞæòùÇë1fûQbÿ^›¾§Ÿùs^T²s•}ÌŸi"J_×ÁÔMÓÕEäÒ×5¤}(ì:„ ©ÇÏJ…}RØÊä¬[aW¹0¶ÂΤƮjæ FWˆ4¶ÍÀÔØuJ;JaWŸ–CaWCùXaשü×PØß4ý]©°Á°ñfýü>tÌÌ•9¾¶`Ž%:-V©±« ‡ÆæÝÓ㥱«BcW£ÏX!Ã’eM\ªl¬–gëpd_wjlXþ­*»ª B¨ì—×c¨ìƒô.ß ¨ì³TvU©Ükëì*Økìê8¶5r)…¥±‘@ýŒd¼”R]-¨ŸÈ±nwjl’-UöAJg¿ÈY¡´O å-YãÌhZSK6¢”v­ÐÙuúD!] *ëuë_òÚŸÛy%]‡Vs(läõÏÔ×U…f¯Pص[¶…ÂÆ¼~(ìÚóðÂG>KIa¿¸óSaiá­Ô×UÙÕ©§5ôu]éÏ –üÕ¡¯Wþ¸ôu»¼õ¥¯ÛåÍ*}ý:h)ìƒÁ6±—ªû­¯›Ìƒ­¯›*_¡±Û•’Œaßwî'ý!;؎ª¦+#8™ó. !F™–¶`œ€ŠÃ ªNWVFúc!‰\Ë©ãò­ö¦2ÅEªYj©É@Ö¨FD˜a¥Ûú5ç^^qZLQeBU§q“œ.wŠY `<7ÌŽò˜µ‹º¡·š dÀ¸Õ#ØÖ˜S™%r¢› R1mk ©×ŽJ döÖ;¬ÍÊÄß¡ïËÚ¦e^£ÀGnfõA@_²ð˜üJŽT1&æ’ÚQ¬°öUÆKx(ÒZßG&£¦Î[ 65ÅÈÏ ~ ²°B@Jú‰¶i‘•îSx3Œeì³ÆÊã„ÛçÊ ÷]SQ§ìŠÅŠ„°Ù˜tÛ¼LŠa£Ø^yÛ]­y¨‹Ú²»¥pÐnß¼/hö°[E7ƒóáדÚTþ ߆WyQÇí Ã%u0°tšSj Cáqaäj}¡MA¢*½˜À|U[·ï¦ÆH¹£Ý+Ú-w9†è^lá‹îÆ¥ºí¡oif<4#hP«·ôU-¢\¼ X;Mt&©×øòþ±P:Íu¤WrÒŸ\Ôxñ1“üÊTk3˜‡Àce¾-JÀiƒhGHXÈZÀ‚÷Å|SIªWˆªIHÖÉ?N$ýÉ=-ó²mãdľ´Ú¹šœÎ.|y é3]ßOH@²Ò=$æÄ¤ È’“ôfð@Ò|áIg‚é6Uú[;ƒÒÚH0ͺ[ŽIw&jžHúcó:Œ¹®ZÜ“VŒ9]€¶q éWž?tfè—å¢$D[×Þãä eŒú<‰ÎÎI7ônHÀhÏ>t#Ÿê@ê< Áp9gÝ}Ûó6Ù—M¯\†ä9kþÚÇkìcF´Á|üýÃÞ«c$ÐÓözMºm3à2ö´0¿ ÙG‚OCf´yP*X ZŽónlTŸ€ŠÍ|ZÜØÈ^)u½7W‘GDx¾—Ï×¼ ¸§P§¢°½¹ëZíRW[I üƒV›d´„ŒHWt›²LÓß¹¦äOú¶”{øâ<®ïã®F³u{`þ$Ä´xÂ÷`¶ _Îán­Û Äj­ß§Õª,g“š'bÓå’ç=NJÒ ¸[·+PÕóp§&—ÆvÓé®;ÃâhØíVÆ×‡'V9þ]JÛTðì]ÅWTⓃyÛÓà™–N  7[‚b¼©Þ>`šëÛÊOî.lóª;§˜‡â ^Ç"-é)fwäb!Rå],•šc À5¬ÖžÉ‡¹Âotw¦Nn3ÐlµÞl0¢„jª™©}£œÇ¤5NfAž×Ä5ó1ÿùI ÑÔj8¼–±ñ¤²­!n !žÁ‡Á:å4æÔ¯rˆ4àf·¤˜.‘îïô áǦœG¿hEì¸W°)•ê‰èÊZ Êv’ö¬[¼ÿF¦úew2VxE)ÇýÏOšñsn“W ÛÚ-²²slœÂÔ¨ T}j{r^ûž(žÈ ÉñÎÏ×ýFâ3ÛŒ:€âË'Ëd\ê 2΀ÝÓ³'÷“t„ï#Ó\Þ¦oÆ5¶»iT;0énÕÓî& Q·²ÝM£¦Ó our7 vÕ¬v ÛÝ4Ôí#½Mù{ô6 Y‘!CFò!R†ÛÙåÍKÊî&bfß©\Æv5¡@’9\M£§,ÏÒqc‘@DÕäjjz~¬Å€C>²wÃÕ„Gt8ÖÒýûØÁ¡Ñ2ø#Wf'¤bçpG4RoÔª}–áÅѹš€3>u{¹š°Øªn€ÓÓÓwtÈô¶ß\MXަ}ºü㳃ƒChÙ{iP ž]-UåJ-.æ1¶u‡†ê4à8Ó¾¥ÞDú˜:×Iºv$,~…‡N²ô·Oëx¿ ä-Kîš¡SGxh´ÔøSèØŠ¯È—4šéálÂÎ+ûs O8 QÂS3üc4a—ûÛÝ4Šƒ•ò6¡,f­3>„ ÎðШvåÉÛ„µó+|MÜõ&‹Z‹7G,hÚ?u;—6¿CA©ê¨NÓ².(óXÇxc6 Þ1Ëõ©\!À ¯ä10‹½ÅÉxìnyäü xs` ]+ÀÏ¿ïp vø4g½½§`–„GßV_¿Øé=‚—°Ú0´2îâcE».r1î\6—OÛ˜˜jÆb#áRá·ÚT†Ægõ¼êt~ûðÇF zZ,¬a`ªæÑxB©×Ûþ±l]ÞZhËÛò&dðÒ¯M~Ų/÷Ó¶YTïwÀÜß鈃M‹É^Þ50£§0òêxý¹KYÈv{ã#.ú'ÚfcDw{èQ´ú᎖àÖ8,é\6¦ä•:Huox%§¨úe[œÎ‘¹]¹ð•Í%Õ©â¹7ŠàÛÃ;€íq»¢æó—¶)…—wìMBãCüXî{Ê(foâôªëƒÔi/…”óÞ™Hruízc‹7aÛoû»<´ïCÿ/Í¡ãt]ªÄµµªõûÜÙX3°EÊøü¶{f³¬.Å9ß*rÊCAódõ7’Ów0 ;g˜k…šw†6—sŠâ×ámø&Ë}XŸÓ Qiž~3¤¡ýù°9CÛvû K$óÏ‘ŽÝ¢¶×¹Z¦¿oû*ܱ¹Úi.õ>gذ7éŒØ¬` æÈDµGxè#m=”S¹õw ñvaiªóxXÓb õx„þ{˜ºæÃÿ*«‚­»ÓÿÄà–±Éê3óÁˆ–ŽJÝnÖ-šº¼EVÐjõîs¥Ú¦k(›%žVçDå Ζ~cX²³9¤ÛL½ÿcE1»w¦ý.ÓÀÒü™êÏ àºÏHÄ!»ƒP:ãŒ},= åÜŽ—òá7)ïC2´sgÄ[åßòYùvÚ9îƒH¯«û ¤R£Õl!<|“Õì.x¬WœJžüÑ¢}D5äÛx ->Žôhɬõ8¡íñZcé¦ÓU]êéEЈ)¸“dTžQ¦êàÖ ?=ÔWH{Ë5"ר*ie+@ôZ%la,ÒUþq"4<>«d¶]¹£@:ŽX*¾ y‡72ý8ák3´ÂVñ*ô;¬šyâS!ÓU3rÛó0”öå¸"S.Bg9­þ<î“Êf…È) ¼^êCµàÙ‹þ±‘q:º/v[W¸Ûc·º3ƒ”ýŠeW•uu“ªŽ ª12G–—:CáiE!^Mã>/^‘ö—k—IŸc‡ËŠÏÃàt=ËàØ\>£@z¤N8fäß.>/áUšÏ‚]-ló×äY-Þ¬gy7ªŽÀ=¦—»çP€sÉÆ¬Q´½.‹<ÙØ®ê¦H˜*ÓwdæÇA憋8?]GÜ€2jørUÕMµø¤Œ•±qŒm=%ÎíEÁ¶7†ú@–póYk¸äQ¾5¥@¡Å!¬„›™íS7¤Ÿ¿¨/Áã»UgùµG|ŃÁó[É´Ò[Z­DZé¥dšâ´R÷Œ)™VêZùâ´ÒKÿ½X#_o ;§¨c^0)).™Ê*Y2£*N)eIFU ›tÈf° Ä~¤â*0¸VäéGÄ£eN©ÚOb­2§ô’².™SjWCÙ9¥’Ç9¥·DuqNéí7rNé&#§ôÖ‰¬(§ô ™ždõ£iA±ÛÅYž~×Ó8§ôVóâœRwT,Nu¿Ú²³J/ïí¼à–ð,"ÑbÎ2%£½¸ dѪ‡yHóðY²d¥dqˆëšJ2zK¤•^[R)¯ôRTÈ¢¦º)¢%•ë,R®3}Zr-B²ë£8­ôÉwˆáŠË@Š7«ÓJZÎþƒÁ2cÑ—e\”,!ZG‡u %ë@Þ7îÇ:™ñÐçuæ¾õFv;ÐÍp—7(¡E,X†ì~¤ªÂêc~õ[Fƒìþe\y±ñÌcFŠ=ßáî™q_šÍÕƒ¯ÕáͨC_õ‰ËÃk_é¨äžœ¶8ÖSe~9ýñ&™–̰ýyÑüf3[¢”æ‚sPnïÖÉ"p'ò7ý0¥aÿÅÍiÚT‡$7£zóe…QG“›Ð…QÔF†—x‘a¿Wµdâš[O$´ãëwÑøAª½bÅÓŽo{Û·WøÈ_sbuX<ý2ÑZ?ÆÝcXR¬ïÎ|ôéÙÁddsɃ2$½}ë´ªiÌŽŽ’‡Ò|¬«Jh.:Tõ¿åÐ_z”cí~ÄOvýQ‘gë²[›÷fè7ŦÜEðí´…­ L,Ú@ú¾,¼¾EiS¾‡›á¦·äk·Ž©f'½=þòCˆ÷nIÇÃFä)Ù¢·èŠc&ù0•½7 #›kÄU|0dˆbØaØsÆ[O†ô¹Èâ–>Sù,²¾}ƒÒ]HAC‘–oêþ/<Ê£€¶Ùk•Š %>Ã%cØ24£[ˆd/ ;žSA6åDmÚ¾¶};IŽ{TæUïŸm¬£êA#M70kŒY‘ÀªÍ"@%T$ð(2Wå‹25•ÌMï“€4yjéÓÂÏYú˜d¬¾q%sŒ/¹¹Ìh‹¹+Eºæ8sš÷m9ê^”büM3µ¦(Çø Ý!Ê29%n˜eÜ–í‡È2ÆÆyU×OɧWJ'Ÿ²ãÚëø\ÒÒYÆj#Eq¢,c·~-Î2¾m@G–ñ¦e eß¡q™d|ïÓ@ä˜/vo/N2v+xìû¸)~oá?ü±²­!< ç|­dŽñ“ösŒ ¹í“TOû!sŒŸ4Y˜cü(Rœcü¤`wŽñãµIÆ[ÔY§£ûHkŸ\óê$c…¨©$d¼àL2¾# %é‚÷­D— ÇHQãá¯Ã°þ%²Œ£DÄÇjtdhz\l:Q¯c•Æç:VC˜_i¥ÏfŒšþe1¹?Çã÷¨vG+„‚ÜG¯—rjƒlNIžq:gN®óó‹æäHG“.÷™æñÇ>ÿ±+ð0„BœØFµi›)Â>ñöém $ºÙؼDö4o:Tk¥óù8IY„f¼ò +¢ñzE8ôOM1ÂË{³†RˆeÊË[Àj‚õ$Íœàác—sˆåu–*G¹€åÃYã1’|Q¯Íqûv•9 e Ë|ÿy:gÆe/rÚszg†zéœÆ–•ÛpA¢@ýÇe2\ø¹ß—óyÍͨFÚ_œÀA<.« Ne}åp^qúæ`]iêi0_¨^°¯œ®¶Ná›ù&cp —Sw*¦Ï´=JÀéž!®ÿåw×xöé@NÊ1ˤ§;‚l9¶<¾CÇÁpÎà!«€ÐU¶¦SÆäˆ^¾^I›ƒP5E#~¸g†šCí펢’/0j–5ª5|7i²á<·Âê¸Ã>R6÷Qõ±`F[ËåîœmÆWžÊ%$Wwe¤ëÉå=!,—ؤË%6ƒå²×3Ž‚Û9Òáz‰øAÕK„ßÑåÆbJóè›á“q”1Xt½Ä´'1ê%¦%‡ë%ÔV2ã(‘6œq”‹)K$æA Òa×K,ÚÇVŬsõmQ¹^€Ž¡Œá.Ž¡`rB<¨^bxm¸^b(¿ÅÜØžÝ¨—pÿ¾@ZØõÍ+)ë%šE…ë%”Uö ƒÏôŽ£ ÖK´4~Y/á·² &úv9õ•iôvQ™*LÌŽ0 G‹€›^а´8s+«¹NÒõÓ{ÏõYúÛ§u¼_Þ´žd»^b:)¾d½ÄTrVq½Dœå]/ñÿ÷í¼’ìHz~þŠc/pI2“WŽ€d¬Öd•4X§ ÉÙ¿¯úA²ª«GwG³Ø\ô‰¨L&ŸÁxGSa™©Llw e"¶{±åâQ³þÎñJH„¢7d_s¼D¸¤”/Q}·Ì€‰:ùößÁž¶£4;T–™O«5g‡Lt+CM¦ú Ãч†o53ÚÒÆüº )}ÑMRú9õþã|4±aèz†Ü¦§«22÷ŠüÔCÑd?¿38DRÞNïG÷^»Î—_ïŧwúÒ_Vvoˆjý­5=TDé—+Ž_lSd—K¿ÅC°¦€è±W"|Ý"l­ß’‡öi‚áëÝ p‹X¦ZØ8Ï=ÌKÒÖöò#dSDyˆM;¦Óª‰µÈ[/>/Aïz–÷âŽÈŒ4á·Ä6x| çÜ—À ]6èmÖ…êrƒu`7Ä%ðËÒ7ÝÇ}ͶYD‹³UéOn}uÓÞ¯G ÆZÇ4ÍH±ÔaDÝB-¤öÝb=#Xým‹}¬usÛr¬FèÏšÎݼdßÞ5ÇÁ¢â½ Õ¡ÉKãÅFu¯„† ÎÝIN?8tjD–—À¼5ò± Ìé <Ôb},îŽÅûò1ÍÊ¢×ݹËC/Ö‡Ç.½ØNÏâdÅ:ƒS†…XëÅМ)¤ÃíJ‘õ|õët óhÚLJ½©{ÂRøJ16”¡w)ÆF)¤iq«X6Xб‰ bl„…4ch,œ¸Ç¹Ù²àÎyN­æömîù¼n§PØÂV¡NHö6ïœdN©Åàj±j±¡’q3ÜÔbó©Å†d)ņóÖM¥˜ëM¥K’L˜¨W2Ù¾áøekÅF¸ÇH+6˜¦}SŠ «¥ÎQaŽè¹ÆbYfXÀ˜˜âz¼ •XwŽª©ëmRX,VxTK%6}Ñ×m“Çd]³ÒC*16öµ4b½™{¶J¬;Ó¼…¯Þ¿@•úê5É3þÔMÚ:TL` Øî^oÌÁsfÎÍãëm»|¬Ä¢ìxÓÕþÚc—¾F•ÒfƒÅ³LÙÔéz Ùpñ/{ÀïõôÈAŽ¥8Ã*êHÈrÛ1¶Zm6cþy,cÝ˃Ašžðæ¶ë1êMòç`–èJgÌp"äï' Ž Ec|eŒ1¡"ƒ®ž§9kjGíi0кæ.üH6ƒµ&Uï>ƒtåõ’J”Ž(·£F­ÅÂa„qaÑÓ{Lá¨öóQ2Þ¹CXoÛAmúáPqÅ"†Öv=>¬(ƒô7œo#HÌ©·2<\ÀöœW6úd—KÄ œÓ:žÚk„®¯{wíîÿúŸgöõçqxJ_õë_Ÿ?ýãó¿ÿuü·ÿþõ<$_ÿ㸾þË×ÿþJ|ãüS,Og~>þøy¤Kñ9©Ë¶ŽÌõ¬ˆï¯þú§_󽕟NpÝì)Ó%ÏÒTT+çûk>“ÅŽÃãžÊI>û Œœÿ 2È„ÿÖêãë_>|é/ÿpÀxp•ç\þúÇêã‡Yz¢çjÿ둞³”þ-³Ä ‰Ü©ÓùÉÐ2-Ä7MPˆ„kàPMƒGQÇÄ0/ß7¬<ƒÑ¬eõ9ƒ(ÁÀþFÑù€VÉ7e€ßyr7pêäÉênª•Ã>d.Äëü§»âvTÞ·r36þ¬uU<-èË©€RLÍ-ú€:æUå j)ZÔºfãx_©r»XåoPÅDvg ˰£Ñ Ûf±j‰öØš~…O«2À™ZC®N†‰“˜ÔŒfß^¬cDo›Žäº)†Ï¤'€fìu7ô¹ìô~pÂ]óÑqÉÓ½Ëý’•¾YRª+~”)…†éÕDPhòóM#dn;†©b.Îb#ÙâԱљäqÐkÊלe•­‰úâ]Eí]”™¬çðv ç@@æ„E“>PXEä•pž g<…×ÄÚ+Þå.Ú"ÔÜ0õìô0‚¹oÆN^[k½# 5‡ÆÀM‚pr%aÔìÚu"°`7m˪rÜ™ÃwÂôÕy|m0îŠ(€m}[d ëi5®(è®úìy’>h¿ðiÏŽü÷a2®/Ë™}h„8ˆ¡CØÚ*/þ‚&§WšÞwÚG37Õ™›Ñ®Ò«Õñãusº&˶»r®Î7i…Ö^tY‹Ø‹Í÷µ÷b³oÆÚ‹NÓ{ѱù±7P{q!´-uÅ^lR ¯½ØæYá^´OìÅîÐÒµû¼˜¼Õº’'­½çȲÁıås[±Êºº¶¢…ðØ‹N‰5÷bÀ±̽èY±Å]l{±ºR¯÷b5ô^¬¾øæ^”ìº-g¼_ìEE0o›¢šx\k ÐÇ`íÅ×ö›纣Ô36Qu:[í® ²¦yxcMë­-ÇÆ§ý„Jšã &¬[õÖ•î@mÐ91om|ì|ófò?¡+f’ÁÙµgk*6pã[ÝLí.¶‹©QÄùɹ`÷š\èæaÅ4@Éì4È‚arG´coì–î2[fÏ#}F/6¥¡7’# ¯Ù.7.‚ÓmP«ÒÃì¹÷úýrbv2ª‰ÉĘZÏ-®)¤¤î¢iÌÍ4žš –Z•tßÌÙ³[áBØËf­üe2¤ ‘˜X¬’èRº‰kkD±Ü¡œ"%vµ²!©´¹ÊßuçY—YeÉŸw¯þÜü]Œ‰úÃ$—š/+Q†X ÈÆ°Px‰°69ñˆCk(P3J;S“éßæ8=~é\C¥ÚÛjqºß7ðGågZt‰R!ôõUd¦¹"¡ª$ŽSªLP=*œF$“bÖ&)¦ÓZSÖŠR[KubüdXÁ¥Ð 3¢Ÿ6>tçïfÖ%¥ß)–fž«=AÙ¨ ÎÜb®íÔ¥Uï®âÕ³yîîâf˜ÀÎöè6ÔU`ÝéšÏ–­kfNWÀ<“´úÓð¢µVŠù>!ÝrrörŽÝĹ¢ ”AN¦N¬Osë2ðq(E*·® Ñßî ¶öHq«Óªc{Î-Ï#‘Øëì Õ…å#òjbÁ·Ù-°]On°‰«;¼TÚpôR\ :G‡—æ.Ôô½°ÕפٸU´ÒÜ9­GòŸ.ÊæC÷$|¬Ê¨pêkír&&’$sãåÔºm—®’ý3”âp¶ …Ô¯©ÐpÙšŠa8÷sã£!%´§ƒCö·[ «Z÷ÐØ®A.ž,†ä4µû1ýæV ÚÌ» Ó}§‰ÀV«uk˜EL›çAì&ÇÏEìšžÛeñ9&&ñ éÃÜ’Ø74ÖÌ®\ÞÉ!+PCÏÐZ±_…Æ­+˜5J§ãœÍñw—ئ!œc7g9dßH?Ü·“v3äìg’>…îPCüå!½ß¾â¼=®Kªðµá<‡kR÷I=M_øÿïËt“Ãíù7(–eCqØóϯgÿA ŒÀ@zú:æÃÿòKsŸ”´ÙD‘_ú„‚Úei!¾w„²^d›ï&âLU±Þç#®Äô b5²¾¼öäc. —ËЋ\M}í¢8Q;)1*B2=Ï}:‰¼;‘Ã:¥Ñvûä±òÞòëÙÙØ‘€DƒîN‰Ÿ¯²~|TåîqßkdòÚÖït3ªr¥+‰Š(6Î4Y~?U×ÂÑ·ÁD&‚gç”=^o²"»uNMQg”ߥ‰pçæÄ¾ÌûcÂÉ^xJ@#Ðú/@¿……°Ü¼ÞÏ¢DÌþE§ÂÁ®Â~fðx‹è<„ñ6ôœOé:Z_3ë¯W±JGô®*OÐZˆ¬Â·§ŒÏñ³9~;{2Íæó5ÇŸÏCBwn‚Ñù 1èì×5v7¿M?SçÎyf‹«+üÄÞÁ$KCm¶àM„J·0g U*¿ ÐêIûk¼31qRö'‚ ;(LUOYw[¢{}Q¨;š³SÇk k²ãÌ×-¦zŽ«X–ž;ÊoZšÅU»wdvR5RsÕO1é Ü·T<еßýºÏr4_å$ÁîðóUìøÝ‹=ãî¯=åá­ßÕ¼Ô–svÏñ˜³WUo)æ¶Jò¶¢ì õLÍñsÇÀÛ‹"šžJ™çF“ ¦³‰CÙ•šê›Yú9ÞÖêø„íwmÑ3º7^šgqæš×ç£ÿîܽèjþruº¶ WÓ(âÒÐqB¹õÜ»ªŠqÑ{ƒ.«â>^×ä¬Ö=wñõêêèÝëÜLdá ëuMÙ˜ÔÔQŽqMY¤X÷ÔPˆÊ¼§¬œŽ{jž¿@ôH ”LuO 18ëž"îqO¹w&pÑûIï3…JÐõ@LßÅìEt„œ.×yQ1ûN,®ØÁÑû ‹*^÷EÍÏ›J_Ÿ•;Sû6õ…ˆ«Ê)š'a‰µ¦·—í«_Ë"×HØŒKÁÄÜàñ2= Û Þö]­¯¹õ×㪊ޙnlkaº2´YMV;è·Qö˜çxÝ„.7eWv”¸Gœi!xUÅ뾦ÕüvUùóqU©ožXwý¯^UHR ®*³Îϯ IÐ5ïðEœMV0×@#Žëh3  ­HM§oìtÌù¢çïE"Œß>.§b\íKG3¿_d‚Þ-PõÙŒ ©i¾Íb>|»z-2#ýâóUå¡£sµ9{oø1Gg„?_¿×)Wóß¹Uç^§žÉghŠd¹ h…6¹ËNd´Û±˜©®(e'žŸNÈjm¼y &Yegs4T³Åò Ø‹ê)‚ƒ²62Æý;ç¾~9 4?ÜôdÀP×}¯uªÔ"¸ØA8ëS¤÷•xÙ=­ªú×Å#}N€+ÞøàBQ­¸ŒKU.¦î×ײêöºÖ¨ «\ñUç´õ|¬t.,~}™Y`Î+%^}óá|’ä%h4¾.ï³F5ÅåÊ.Í”~8 íÊÛD¤ha¨$kÂÙcÖÊÚl§½¤ÈÖ¾K¬Ýœµ+¥Ñ€ç>[8ÈÄë8s-Ïæ[dÊ÷çIŸÕ½IeÔûIcbpëgp1sn&W“×äÛSÛdÓŽ©7ÓûX‹5ùâ8%¿ |Ž>&t!†&bÿ“Y]º Qaêüªl¯Dç“÷43‰Èë³tòyZ«›¤ad…¹&ôˆÂ¼óçî ð”êðšJ:OX—T/gÖ‚ñd.PÜŠsÃ0-ã|A¬Ir#ï ¾€ªý¬Q@9ïTO±LÎôÔ´‡!Þe[ç!»tl;×6±×Èú½æØT„º×˜*ŸËæ)V£âï g"˜˜bçö·”YêuyO[ùZ¨;ÊÀÉjß.UQÏÔ­Dpàpâ•»©Ê?ŽŒB—(¿vè¾]M8ÊôÄmpEy tžõ‰þbØ»•¹Œ8mæ›oÕ¦XŒõÆ!Èrc"c ˆêÒe9³´ÓtvRN±"0‹ç!^pšúu¾˜+«zN¤µº£TÜÜtѯ°Ô©·’,dÝ2×…vp0_SBCz­sIpH5T–üw§©îŸÆüY0wóutÀ¯ÚÊ·3o’“Q:¡¶À}öo°ÓÜäPaRnÙšB€ÁLšª±OBýÃÌGÙscFòNó¼øër Ø~çÜPÖçÌže6¦ Yc,qê>§°…«àf—Ì`t§mòi…Aõ[‰–®uÁ`ªL«âì5S**nj¢}öq$6:sÜrpœtæÎ?Ö]Y˜ìôiÊÚi©þ.NýÑ´;bÇ,¿nùI™T„sj~=ÏíœÍ¿ &ÖÇ;b©}˜¡¨Lµê [š‚̉Ú×gž÷«23‰geFÖ¥{M“8õ}š(Pü.—#Ô>·}ß§Ú¹VBv~^HüR-ž½‚pމ‘Ú'^·hÍOµ¿j÷nê:9r{oý.žÜDó4åˆÙ3͉¹ Šô²šêLs4?q„båvØ«Õ.w›Ò‹ëÄ;“²õ6·“»[BùëÚ—t¤µÛÄ¥(¯ßSzróJ9yÌï»ÿîÜ„´K«âwCérDãS+·Ò&º7»¾®¦÷<ôx½MÑÌÍ{êüý9ÕÝSó:õ¿©M阶«ft?w.¨æÐ;¿Â ä ˜Ów*£’5œÌ]e½èØíÜULVgž±Êƒ”ku5üËÍRöé¨Êz žKŸ«¬B¡öP:øªIì Ý?Ïè,“KM^: Ï»vi˜„8Ótë~Ç+¿ÀÁÿÁ›Û'{({Ö5¬PFLAZ,`µs M 5’‰«QO:ÃlZ}aM+[ t¼¬ÒTø"|´ÀÓym5;=}½-þÇýqûNV& s­¨LãLHM H§k7Kªu½åS*ì›[¸†ŽX´¼ÊC`É×U¥–­ŸEÕL•$E¨0DРlD½|(TÊÉ—º;\¨X­ª%OQ[åtã 4"{ ßk=È_vî&EÎÛ†yw³Cu™h’êÛ}>Ñht?^ÞÙgú£¾ªmü„ï¥V…,™ú[ÞÒÖ!dnhºç 3ÛÜÞÙ?òçªÔ4W4†Y4Cw«[éz›35⎾n·+±€w<•Ë¢”Év+»B+–Йù¤Z£É4* #R_ÔkmýxÝìR4ß"–ÉßÏM\:wÄx¢ó_oãýVáÝöµìÑp*¦Ï´ 7e ÝeŸfMEUVAtv™kDLÉÍ„&0PBz¥šÞ ÀxûòÍ”³Z—¼t<¦%½ÏYgTl¸Èž{¾t+1¶EßFûß^qÏÚßL×kmø@Ìfã•í;¯¬GL·Vƒ oè·w„ykä£CeM`mç"¿ÍauÃm¿Ín: ©çÉôBP{`ö¥¨jv°°™8‚!OfQX‘v/¼SƲ\ÝÆ†vîÕCmK`îaÉý¼UM4O͈AýêTñ}ñÎÛNê!iË#L4}´(qtɼ4.>/^sp"ø¼¸ueqâT‹at—Êde|hcÈœ2tw‰jìdxø_)RÍmàÅÈ÷cÃЙӞé`GQ±+ÿðÞ½y!…çfU¾Ö.~eòÆiY¼qwŽéõ{¨»³ B À’³è¾;– I?çÙbQD;¥ ;”ˆ'B¦ŽoUuì"„N¤RCsy«æåi=ÝðtÇ)ê*òÝe2ܨp:YLìµ±xN„ø„Ùì&ZY¥Hpè–ºƒñg“q‰(µò†i™³­ 8W %ª2Ê#·Iº?!”dZnÌÓü$ök =µ¾ÂE¾ØÙn'…Žäg²•\ùòàölñ’Õ •/ÌE(´x-ð1;ö¦ï£kc{g"è gò^•êùˆZd¾è>õ‰ Ö×P=ÖªNÉCb¶fÑA¿"攪…7øˆUY8K¡öp×q)ÔMÑØèoE,²^h+‹HáÒÆg·ô°tG@z…Çñ¦¶OTÒÖzØÞç¬w98—éWÆ–Mzl [‰½X­áý©cJˆº…ÌvƒiEÀ±Ý úÑJ××¹¢CªHx(a'BÛ[J Ìý T°án…Gd½±:¤w„¾þ»yé`»ë4Å…Ò}½Î §‰L)&°¶; qê`»SþYÛ•#Â*XAÇÒÀ®ŸyØêtaÍ ³u'—MÙB¬Ŷ£³¬5¬áè<°sâ¥àH¡„—ò¹ÜG-å &Š–†·I•t˜‡`Eoû©}í}:`°kmé ²jÙ¶MûÚU§ðíkoÓxÄÂÎM,ÈT¿NDè_»‹¨Xž8z›¦™8rc׿bæòTÀF4@Ü ÝU×Õ0æãø=,eRÁö1G#}˜5Xh`ØÐžê· ÿ1¸Båú–h"â  îß9>!BtFš –ê»§&h8Âsj‚Xé¯NMм³Mi`dFñ…&h(bþî¤ Ö¡væ®BN£lk$A#ÏÞ:ŸR€RMÄ^rmƒwÌ"ÜñίˆÐ1Ñ’·ÙPÐXHhƒ†mMS4‰imÐ(ò a}×aRËÚ'¬Í¸X‚¡¸Ö¥BÎË0êE¶:èmü&Q·;¤ªNÄé|)£[Ãu2kØêUÒ5¥cWe&œòP£´ÙS‡ lúîÕ4£T`´¹ÇpŠGÎÒíŽéA˜˜L'Ì“0?Üœ æ]_Ÿv0ñGÛS÷ß®rG;¢oöbоO§¦[üÞ§7 ·sÌ `²ož¹ªTu1­Uºþ˜vkK aÂæ…°VÙZãaì“Ãy}yla'4UߌKƒIû%5ÚT’ñw×K¥Á‰žBŠPqšq+ñ!º«¥ÍºnÃçB,¦lØ{&¼-Fy[àó›ó±«ÏSÑèø·”¨Cœæü½+ÀÙîa)jw¥1Wïy•q§|½ˆO‡&Å~´ƒâÈϯ#±/Ž4yÅØ'šBÀ¼b(kñçn#.¾Çc`Õê.cmAÀýÅ%üÉw«Å|"O˲)yFô/ÐîÌNœ`ö3/¨åÙdž/ñíwl‚— [u782%¡ Xª?Bøö;ì$ØZœ6mP`â|é‰Óv}9FSÛl ×¹s×Ç0¦@¿ Ž( »PlC%Gš~¶r±GÎKm£ —«-&pãò¸¥#ŒG²b·m¨<ÂÙDC³­£z<7ZSžó÷­è% } U]ÂØ¢ ÇÏÚ²]ôÕ+Œ:Ô¨s}L†/­F˜¶I¦9´¶Gbpo¦õ'à 25qN¯M•ÖÕþíÇ®àñ¨zB;ωÑ9Žû$F¥³Ú <ô| cEÍ~HPp¾{ð-×ÛŬt}À¤PÕfLº£§­ÎMJßw¦›x$änÌàÓªéüÒé:ÖMD¤¥÷Ûá8 Åá¶TlBê—Pþá»)\[óEX~„Ãët³rÐÔþq$ÃoHÿÇ ² @ÀÕ_ab°ÓÁêS~{6Ò¦kt€€%cI ¸ÃÒca–Eët¨u/Óu…œ×Ÿ×ºÔ8”°YÄ ÆðƒªÜ“mĽÉíe»X9§u^½šôç.Ré+Œ·‰²¡deìDVµ»BKǯ†ÒÏ„ã¶Û«¸ E>Ò’µ9´{è•>ù—¤ÙÍ!tÐ@d‹Ò rM1OÎFµ3­”ƒ;l§Ó…Ël­„Ü+Ù~÷Tò³VïâÒ³g6«†bËG‹Ñ«‘PrcgmJŠkšBó—ån›ä L¶Ö¼©Ó'eÎÿó?? *ÝSÁôgßpŽƒß¾ñÿ ±Ý2\þÛCloNÈ ¬7ù=ñ=ƒ÷kõFÀïM(Òö­ÕO¡¶ >   9ɾV‡»°öócQâìW ˜‹@¸TAEÿuÚ`™î.ͽ«¿$§(gÄãVÌÀzβK~‚€YZä:],1ÑõI½BÐ*`^«—¤Ó–™yÇðÀÜ¢ôù’¡†MPûâCæ¢ä€U€¾âU  ¢Ç¡ZŠM×ô1‹YQîÀ´Á¹+§YÁNYíšPUvé”­°&*DÒÕÄ«ŒåÂ4s X4§G+ÀÅ%¾úžFúZp~w¤cfùGNEgîgÂšŠ¨YÀêÌxŒ» pvFZîL·'ؾXYP9kÁáÞ÷÷èf%A ”2XÊùob\ì«yòª3Ùªb#`•lÎ< ŒÊÊúÚF·•O»}æÀ\´‘ê?î´4¾æïê@ñ>ÌíÊ(Àõåò*/—»¨5Dî°¤ª‰èÜR|Ÿ—KQ6( Èb–îd»ü*K(<9w¹9á j­{梆—®Úo-›%swW'4Ö$ªNÓ ÃÈ¡©Wáf{ãÚqû(ÀoÂ×é«dÇÐåKC² ÿT.ÍÐ!¯—WIQŸŸäF⑱ï9Œ£3B3ÁAÌG†R ] §æ¦†UâÊ®rÂÃÔÕRòÖ3^øz'uoÃꈨKyK@Ë$؀ϙ­®êõ‚‰, Ry‚1²Ž;¥µÀ4m<ìXÁÚm ƒ ¢j³©èË æò+·}j/ð-ÉjÃÀÖCØg ç°òê7«DÐõÓoàq,ªy«j€‹û øÁ  $1ëàeدQó_jÎhåYl[ §Yõ¤\‚Uv¹2‡“L^U&6Ù‹®(ri‚Ò%¨J¨Ö¡™9SµÃÔ¬áz%šÓ<‘æÌ‹%¬ V–ÝÃÚ…DTo Ÿy¯J«º¾+ c²“都æ¥\¨°é07É9E•š9­mî~\¾Ùèåy¡¢2×H¢aYSuJè«¶%yª¾¿b:5¼%­‡löfÛʶ¦½`H‰°5ÏhY凡QÕ‡’¡VÉÑwÜýÒ*9^PõÈN­ÂåªÉ¸‚YÚ2}­+~†g[¿ÛÓWòDryDV‘˜¹.H঩…Á džéú]'¶ë†¯·Ëút›£+Wš•9«† RFJØ”,^üàìªòÈpx!1YÏ@& Œ›ï–ìƒÀ; ¢÷_9š5ëY7`63ÒËý~{"dª‘_¦%î/&;-cR覲;CüÖ¼‹P×S­Ê0¬EÆ-p¬G¢Pà }á9ÊzŜ߼rëuúþjE4B˜ïí [z/¹×$º)¨E)€‘Ð%} nMØ’)nCPÌ®ÎdR¤n:ˆÐN~\U5T_‹°)!èëÛIÿÈ"À?2õE€§dßI{³±tÃÕª\ ·î«]¦?&•Å>ï?hQÛeò;æº _‹?Ø`ó†üA³ÓXð-OØüAË®üA“GääšÍ·‹?˜uJ'ÀR¡;3ðl&½Õ–f‰ 5œViŽît ÄÅ4g­þÀšÝÉ Lxr†™à„Ð’Eh§¹»É"´¨plÁ&×`Ô‹kÉ} ÕP{Yî¨'½chš»†Sb™7žq¯Å!¼mÇBëæù:ù lÙ.7ÑÜ å[ÿ¦pb6΋2ÆÍµ‡^0 —„¿¢$—A^Ï ¡ß¨~€Aˆæ)«"®¶š^p‰ÎÆ+®…Ô)…üÆDô‘ÖïMFr 0¼!¿n&E+Õ<5M$¥…\}ŠâÙá¤Ãùu‘QÓV—„5íUíQ5'­…‹«‡#Êk³¬E³ÁÕ—x«>nqÉc’RY¿;€¼ˆƒ;R$gž•g€‰’ÍìÂåJ—’„wX§Ž…R}bVíÛ÷º^Qå>Wò2s3”äÕ¿TêAÀݤºÍµ$Ńneh$äÅqP±åORÇØ ïönZ{{®Îí‚iö× Ä®Öéè‘>¿ŠÝœ¢Ðä5M)-ª¡+dë;|‰c³,Xÿ>^0½ÇºFhß\=2è6LJé‹ ¼’z¹Y$Žß ‡'1V ˆ¸5ï~ßn–¥%fÃ̹¯/ `Æ‹ÒL”q³º¬7¨9ù†y[‘päÌ»‘½Á~g:Òŵê:Éë‘+8 ¢`âiëNcµ˜C*4‘‰¦OÐ6€ö²9_§î#‘dÞþ¹×ž³‹œ•U½P,Rr†cv¶S–xÔØÁH&ø£[èWr`˜ ˆìà ¬Ì# 7á9Gr*óý‘à ÕDò]:œ‰2±hFð·šãàýºÁ´·¾  ÑíM#kLPùk˪èŒàÜ`9·^%÷Òl¯™øž‚¬¨­ÿñÛ*)PÆY2S\!¦“Z{‰1à )‹A{Å5I¾·ÆµÁR‰=^0Y/”äÓ4¾FH+·U¯Ñm=$i]_|N"s¹O™ º2¸¥o¾âfe œÖTU'·JÎ\+>ªjg•¨4d±fôAŒv¬˜ŽobT­T¾¢GbUŒi×w­`²Š®/Îü(;nù›ò6†¶`-Ú=åq®i÷e›µXþ¦DÀ¯Ë§Qœ|³\m•0~CööÄE¤Ù^¨SçÆTê}uJ:ÝZÐå¬eÈQU_gd‘IØ ò-ˆÐ6¤6„a·7YKžýkiÉÄÜ7íÔNªðp†±Àqö¹æ¾‰èœfÙHtïw9‘ó*;Ó’Dä\kê’Ú7u§&Bš<™±úðæpi)¨·«’^mV‹Xìí÷a1‰yµ›L ÈãÓ„¡±ŽIÔe×€èÅ£aSʨÞû&Î0ªÄN\•lN¯G “Þp’cí\}¨†‹¢ÄWÔêâlU5r’דîu Ë¢å˜ñI³¥~DKŸH—)©XãùU‘röÊ„~BïKŸÐ9?óS‡&ˆ:_BX‚eê†zw©Ü>¯þCðíç¡lÓ=rM˜Ä%N©ºªtj-ýfmwÕ ›L’ *Û&#_+€²É¸¬w®Óç+z–Ã&ãº@Ù6ù”EšÂ©‡ó ó^eeè<3ô Ûdn QìS“óÌ(î5$@Ã'¹L›¢iïr1¡ù1Û,s[šÈË,s:V3‡]F "NžÌ2IÄ*/³L¦22/«L¶›u^fë†sXesœÃ*³ÁW,6n6"³Œ„[y…û½½Œ¬2ªÙ„Læó²Ê$9Ôæ0˨Dé̩ѪÄ[^v3qóK9Ì2Ž?ÎË,sº^F¶]nNa—)«a˜Q 0²ËØ2m˜Y`Xf„ÑÂ’^rƒY¦‚UoxK)sØfÊ$‰½Ùa;óŸý7´á9Ã¥ÙT‹E!œwuÝ÷l À£zlâl&X(Ê"‹Þ­ŽV›ðD2†K'{ ††lQÍøh5)¡c¬uîpê´¾ßE(³Jkú-ŠW§!õÞo"_i¬Ú0·NFY&|úl ˜Û§Ãœ#ž¹´§DÄ«õâªåbpÕ¹M5äØÕ†ÐR· Õ­ÊYzØXˆí:;&X¼#ÅV—„-J…LX~±Ï»õs‘ õ}õ?ßÌý‡Ï¦ã'M~â‡ÎÝ“tkBF¶%®^/óÚ”³wM î¾Nò¹a^¾þ;c Eš¼k踔wÓ Õ.Ÿ1a¬™kÄ€ìÆš‰±±†1+YÖšã1Í5 { ç%/{ Í9ì52zÄÖ ºôäi¯ÑU¿ÙkÈ\­ß•e°¡‚¿$s0a¯Ñì´i`¡þ4/{ÍÉ8Íšx.q‡a°‘‡>ïymh¦Ïaµ©tkO»Nð2Û$ŸO”¾,y3ÛHÆTïJŸh6±è4‡Ù¦ÌÏ>Á”ÙæØ²Û,L˜mŠ”.9Ì6…:—Šq¶W½aø1VÍî²Ú8Ÿq‘Õ††ž8@t$Å&ÐÁ£Ímmç2ÚHûQ6MºØí‚R•ËI+Z›ß”ͦM•M´›Ã³Œ6)oé¼ì6ЍçÖ Ýfõ*tú ÅÏ»áÉF–áæô†Úzs_zè>O…Õ²ñåe·ñ³©þ²Ú‘­ÇÝStSn ±l6 ËËf#MÂ4É´Mã̪ÇówºKg›l¶’§É¦É¯(ËbzH”Õ¸‡ 8-6Ú¬»Å¦½N+k¨ä6•P²l’¥ç0Ø\ë2쯲¹Ö*îcl$]-ƒd¸0ؤH•›õw®”ÌN^j"à0Ù,Œl6I´8ËdÃ&¨|λÍ&4a³¡Ý4/›Íi5„l6\ †…çÍh“M|Å¿XR …I¾æÃhC«šnäeµ¡‹M^VÁ»Õ&0âºÛ˜7­6øªÙÒiµ‘ËrXm|¾æ]†ÙH/wYd€+ËjCÒ\–Õ¦„ðÕr˜Õä¼V›l{Ô²ÚìDï£(Ô«=›§ŸZ—ÆbcY{³á}Ç0Ò6/Oµî*Í•P­ÖûÊ®jÀX¤1Þk“ÐUm‰°Lm˜Ë¯$5AWµ ¶«Ú†¡«ZTÎvUCaá8p%¾ÑÍÉËU-*!g»ªõ*7´<]ÕDç^O|ó¢d+oêFd¡ÚÔ„)*g{ª! • ˜1XˆXü!Õº# ³Õ&<Õ6ŒM4—üò³ÕIô ='²Õzð˜á¨ÆüT—W²øQˆµÚENÓæ²—á‡0àñº“n›r§«ÚÛŽüx õSúM®I¶¬%xÜ&¿b(ýìˆ$›Ái±ÂÒÏŽôCØÌ4¥Ÿ‘¦ÍÀJYáBЀèês³Ù.q[9*«}M­£Vë”}¢ éú]ÉCöÉ<Ü”}F¨+-û '.Á~Ùú‹ì3ÒT_ZöÝÈw)e؉bwO˺dŸqNq‰²Ï8§¸äêØMûä°«u< =ä”}z÷6œ²OWž±}lIœ¢Ï‚-ù‚O$Ú ÁÍÝ÷×.ù0‘šu26×HgjɧwÏí”|ÐëëÞ$Ÿ^]–|°¬±èÓ]7%DšËÆv]`&û®(áô·íº@íX•÷¯+(ﲎÈ&úDÁä`#'o'×# Á&…›€¤‹>#Ôë!úLÄ}Xüvé¡_àñ†è³¡¸*QK\¢O˜<—è3¬Q ÑÕů{}l¬_’Ïžl±úCQ }:ÿÙ%Ÿ>Ì"Iòa¾»ûkJ>}Xk>%Ÿ·©ûL*ëüªuÈcdf_^Õ⿟aoÉM׉¼H6¸ÑÁ1;¡ëD¶Ÿü¢ëöµ›ºÎaŸßùÑ̩ۚë÷’gé rÉjê:Çå;w*;‘Þª¾hΆ£Ò^0ãU׉O§]½ÆO[@ +ù­ßÐu¢û>€Òub€÷½ë:‡™ë:‡ÓÌê°ûM× ±=¢Ø?é:±rÖ˜XÙ‰„Si);"z]L"ò…BÕ´ÿuù×ù“~~ýãó¿_bÒÿømPúy&˜D£ûùõGÎ/c¾¿þùSíæT•’®„—ƒÙ¥¾8”ï¯õ swqIŽA]VúBŽþ¼šÞ}|ýˇýåþþn YKù?²+á"ÿHavéßMNdém1—ƒ(Êó޹8b'€ÊÉ™“€ËxÙ“,•`/hõxk5æàõKÿns ÌAêTž:$ëwSàá]rº¦ 9¶ób¦MvÞþ(Ùû¦psÁ)àœÐ/æâíþÖª¦àýKÓü>7´ZÕ9ŸNf L’3J ë¸/̧9It*{nêSYUJZ d9A;ñDRn&`nÙUÎàù‹Ã鞇 â{£˜’_?ôï3%UYé׌<—@9דñy>œÕ³^d§\ZÞiÏ\\>žA¸<éè§d¡Œ£'ÂuèþÖ¬fäýSß¹Ìm¢Ê7‰‘ªÒ&ÿÅãÝi>ÕIùÑRwm0(‰ôû·ÊÃuä©ìªà?O@' Ζ0Ü×–ÿ΋:ø;ÑÁÆéîdª,4¿YìSq¶C…üÚ`ÊåN1d¨¯øfÖ0Äà'‹zªü`lü×¹Êïßø0r(2K{ò/ÿö‘é¬"+3U‚=bö_Ÿè/xžõI¶ãgþÄÄ+L%eeÏ‚:gf¬Ážþ !¦^~AµøþeR‰ÃDFÌ?ÃÁ™`R·~ªâJ.TsÖfß[äÈß?òw^òa1?]^ò@xäH†„Kü×?¶r,Ìû}]¾|À† ,Àˆç±N É2âɶQ„s8U€GAgHF$Uüžˆ¦n-35f|Ljóô¿¿˜S;ž¥ãI4cÀy¬N ˜‘auÒíx/ÆZ½ÍÀ¯Ùºôd‰Š‚IýnÿH4ž}Ìî5äöX.¸ò™~ÂУBíö<>O¤ ýFO)ègàPnJCÎiE|ôPÖUCLò â¿ÚŠ U#4$lÈMÊJ,îznÌqÑr‡ kiƒÜ°añoæÌÆAžˆ€³K,ÄÐMis%»Â2?c:*J_¼ È¾m˜es†Šš>Áª\ÝX "»a¸4=áç\ù>Ç —Xè2Q`^ÐÁ‰nmþ*#^Ĥ«N.>BS«=îч›¿Âú‡ m”ýâ‹v?&3å ¦ýγj†…B!u=-í»¬vå7л¼$cHV'œE Ó{x¦E.ÒjþÉ£(x(ÓE‘¥nH_rd –ÉǬ*”=û \V@)2OR=^ÅdÈ` ¥RÏ€•fîX| ÇP!ˆC9ÎJb|ÔhÔ¡â³ðá4|8óu‘éuлŸa}¤½.|”etMœ¤×€”‹èxlˆ‹¬ÈËL)—5ìR8ð…®ØX´Ç-LÚ3?Ã"amG&zï:Êö?œ½ã‰awÆ¢áQ…–o´øKÙá'¾ÒÔÃ6ýf½>è÷hyÂÐlæòt^Â¬Õ ^OàQäà ÅásCƒ $¦=çìçHÇ_9Ö¢JXôÁ)BwSÄ†Ö þÞ`H¸;Œ~Œ>)]âÔÂè‘YÞH£P¹Ø•Èvi†VĵCÑ®&‰î¨  u=I§Iä@âx¶Œà¹¤d‡z‘<ÿ7ÓøƒSÃÖöÇÝJ&¯„:Œó§ŸÓ¶®ND­½K}u"a7Çem)xŽñvkË*óËþD(®¢Ae/²üzŽE#gó¯¥PÕãÇ T’«ÎlH9oî<º€ŸE¤?‘:2ÕnÑò$ç–е$åX/TÇz°#ð¹ü=ácžÇù…Pù<#˜ü$È䧪¬%Jã”}QFP¦lWw˜Ò8 i¨¾,åƒÖZs¨Gßa­Â6oøÀù9ÃÏí²XÃQÒ·ë/Á:D[6/-ÂLN>Ï"ý…›†c+naÁ£UØðë?u)ÊŸÌ.]²<Î/ž_ðóoðÖ%?Pé5¨N»> Åýêàã½}vÝè”î?qr•¥r·Óèêu¥ä"7ýáÏäB¡sØKØ\5žŒµ" åöq»Øaq %¾Ê_Á gŸ,$X£Ú\²È—2 >ÂêUH,Ã,Vl¸ ³YᦟææÚ\PSæÌ…P]¤×‰âmI?%ùjüœp,æ ÌÕð æoØý„z²aƒHÖTVG¦f[ç†Ë¥ÉÁ‘S–0Øa媠‡î¯0ÊxÈû’Ö¼qÓþ’ ‹]@x¼Çe‡&3„Íx<6DS¡,›d&N m¸L©ë§'ãˆôd Q˜å‹¹D¿(C‚1 C¡G¾¢l ­' ªÃHZú4`3¦#Ôå€gL ¾ûç;²kã*²ª  ﻂ¹Lìy˜ÌÊoÖË|áÛ5ËnEÜ$LÃÅnZÓÇ-';€—}Â猪Bù#Å´ÝvÝÃTÜ=àc¨è1¿Sf¹[%؆SɈ™^›²Úë>>ÝͶsI%,ÝJX~Ƭ܊ÕNÒ"5¥}KJÆÔ\?2…ß \¹°¯Ú?‰hγÛ—Ô¤*…tOºþñ¸7™]Ñ0³$7åSLšˆ¦<{IYíÔŠëèƱÄ諨¸«LÚ:Á?&jû©’è6%LÕ*µÖÊ64$Ž¿S ?¸02JP®M±eOP>`]élÓ¥r®boŸ^k/ >’ÄRx2Bõ¡²àÍ**þ`eÝÄ_ñOS¨MR÷&äas™-~–ç8 Î}ˆ²Eئ‹í>Gëü_‰E;Â0øß ˜Èo?šdCûÒ $¦9Q!Fª×¸f4Þ_ô®ï„.Nþ] °ã]ÁoЛ³( š‡ÊâUâ ˆ/¢ @Õäè¬_#ðð´:¹Xä&¢R'>rqù4­ s»èJåTMhç±§ð‹â7G —o Õˆ.aŽsj„šŠb¦;ª Á•žÛ†å±å~8Ú)4`9Ã'ŸäCÑN£#zlÞê< d;›Hmê¤0‚ø[SÍ„.„Q§™ 8Yyð7½p›FØžÑäE—”¥á•®|¢<]IÃtn~x3VåA•e›®£ðIdŽofØž¸ngüä™W}zxhv>ŒÂÝÊÓ;jó ^0Œ:Ö.dL?ÛŽ˜N:„s\Y™ä㢲zAÌ‹úØ,‘ìW‹t+nX'½àgeuŸ°§YýÓ]¤Ú§:þ•Y o=ÌÅ¥“A÷8–UTÏæ,ˆ®ÓÑçöø1aeŠäœ+¾²ûІašp«@« ©ƒtÛtÞå(aÒÏÓzo”§K]?gÛ Hèºô®){cw…Áb|p)AŠ+ÍÂfºb)¨² AóUÝÿѰ¨½ˆß­*Pê>UJ˜î²!ÕMæ` JÙ8梺¤­=©ê»·c¨I´^öùǃ ZFIédU6–)yíù°Ê‚Qé×Dš_àc½à:Y³Õ àÕ`£óB<-èx}ù7‚™Òj;ù©¢-`Ê$ý2ÅÛ\Ú¤îaÈ™šÍä2yï›{å)iR ªæ&ï8›Ìoj²Ý0¨l1ãËÏ^b·Ü¥KÅâÜaARHƒí6â{Âs†=âw8F|Ä rùþ9¸éY÷-íxzUt€ðþý óÀú’LäORGKUÚÓCâ.xL焊Tà&åˆ7¥ÃŠvÕ9øjO=ÒÜß#…ûë?Ê™7ÓÚÌ]<”Gbnʡܾ‹¿Y©-õ;4ʱ6ß°oZoÐHšÈ)¢âëóÅU%Åî»Ð®©’e#jX¡."±µ6Í4Ž,”dOà ^Ò›²-5H¢-øN¦Pt„¥d¶ÁúÂ$«ÓP-à”ÈÁ e ~BÍ*½¡Ávz‘¼Nç§ §ŸEâ•ÒþŒeŒÚ£³¬b'ñú±FÄ>Ÿ¯â½‘í‘ 6³‘ a3ßüÖÀǑ­*Ç­BGµ ˆT]:€YwvìƒÖ!3žXË1¨éRͨ éBÙ¬uá·±o)Dó…AŠõù".Þ}+Þ3êy\ä€Vwl¿sÇøå¤’«ñtM/ô¤b’îÛ±ÁîüBŒ²ÞöÀ£õ93þúSçÞÅľLûcº†K›ì’&¸5¥…›ÂÊAQé)-@%Ûßà± Æ0ýÄ|»ðn˜­ç<ˆ¯«ÂÈ1{'–#: Kcõõó)ÊßfM, &°f¦ ‚ K¶c\Àñ;LuˆŠyGL56=Ûô&\A¤R^ÇBÈ2À¤m¿€¸âÉýïi™dÎÖÍT0–SÑËß³}?ð±rÆ_0ŽS‘ðμõ\h*áÜNY¹ˆ³BÐ!ócÎêÐãëu>.©ªõÍmyIè› àÛÜ+‡áê^æ¡Kæç_àx!>øëƒÇ§>^7ÕÛ¶Ë}Ûeyý†É¤Hèš[ò¦fÿ”·ßoyŸ,Ä¥8ÞÐºÃøznZø×~œf×½ž]ªŠ™_0<[ôóoð±÷Q…´mʼnÂ(³> +Îꀭ8¯ üfkœRÍËŠãâ`†á…د°â'Æ´‰ÉGžVœÒË UÎdÅY0¬8¥«Òùr–,›§tgO–kG¤@¤®Ê™[§‡Ù¥Ó´â¸È‡­8Îe=­8Ê n#Ëšõ0â,ÈFœ…Ñæuž¾áXÉÛp Ε.éö†˜&œâôβá0C~˜pð%FðÛ‚WP…õp™»‡‘¦¨Ð{XpJ¤¶ÒÍ)+(“@2€M8Åa$2á”({@΂¤U2|Ø„S\óu™9tK2 w#NqvÚiœ“þ#N̉8 ”gÁ$CQè²á`¡e¦i±²Œj– §Ø1[VLX¿—§(ǬÀƒÙõăé»ò4áð¦ºÂ„ã6ḎǴà° ‡DzÌë¶+èL&œÒÃÐ" Î<2á ,6ÒxÖ¦ Qïù«ó Ê‚oß*šÆUCR\šÚx3Ì-K&gß¿ý4¥S“í(ª l£ù3Î5CÖlÌeˆC“Q]7T1X`0¡RÅdEC€NÃ÷kbÜìÔÄÄG¥‰q¤i‰Î^öÇš®»¡ˆ x ¤í;Ô03k¤/§ÍóYMB “•'ÜJ˜¬b^VÂdÅj/-Lnvƒ‘…Ze:q^yܧ&Ë k*a¦–å ÇLÓ¢•0Ìú™ fåø²¼õu/%L¶ožµ0™ ª¬„A—r›J€mé`^çò㵜”2N<¿ÒµöcQTÈë=oðü½©ÈÁ;bnp°?  ¸ÈŽn3ë÷ƒ’{4_xéáÇ1È­ÓOl‚DÿÌÑ]t¦›úƒ7ò7¤.U£Z0¦Pà¥ô8žØ/¥¬Œ¿Šôõº¬'¤Š, € P˜#±6×Ò¹¿ÀÁsÅóoð1'êÊ2_½Ãó…亱o°‹À­f 7I.ŒÁ¢¶BÅe¯ÌÓ€}Pš§BÅ})…§ç‚-3¿z|½,Èoxv:ƒÅ.½“àÆž˜ç“Ñ56Åïà6SÎQñÇóþÚøû xgUhþÝüsÚŽBÛ슥¨*ʼb)Pƨ—©6€Á¾®X ƒ+–ˆKa„c)Üšc)ü±KáÞL­Uϧ³Ð-šª@¡ýÄ ûPc1—+hòu*>0 ×¥òdÌ>A׊? }ÿ|à?¼ŸJeñ·7Д^ãsjÅË8÷à˜'%ÊŒ{Ÿ+~Á/¹Îè’«çó,šëmx.·a­Q´¤õówæbGGbµ 3ñ„’«tªïÔ¹Ö†Õ PoÃêc4ä¼ KýË|’Ž ½¶ ?*Æß(Š.i».óP>yçˆï‰@ƒ&±I¯LÄ{#ëwckµz¹¶Ï(Å÷Þˆ0o|¤u§"ýáñZoŠ|LÅfP£â Œ  !÷Xy\§ò²ábq ‰îºÏ{}»Èt 2]uâõ´zÇl^¢Ûc~]ÚþèY¡v~v¼Øc¢ Ô<àeÀÈÀ¦Ð»Š‚~”w\3ørÓï”Ê3pÇ„£ãtv¾ÎÒ³õ˜ûð´¹gÛ”n3¾µ]ÇöèuéíPk ‡¢’wŒøÀ­Y’ ¸æôŒ˜-ø@p !âÖ¹¿ëùÓ“,}ÐŒ·â–n`ÊÊ2 Op-ñD€Óš¯«ÂF4©?ßgJó<{‡œ6`jÜ}ƒ9<#>Ë,æ&'hŒ¹Ë´2yb‘#¥·9ïG ¦:0ÛAUåö7x;ƒÑÄ;Æ‹ùùÈu ýÐøvê-qq÷}ÁsqñŠ¿N%›+Ò„ªç z¼pRMpQ£|•úå‹ ˆ¡f—³úƈg”ªoãñ;v[Õ¿c?Á õÞŠÍ ¡¥øy„àþáëøXQ´ñyû ·x˜á ʀήhó!q7:ŠÐQƇ\î9u…2à7îˆ4œÌ[:¹Â­­ˆî’ç^V"‡7ìŠ>œæ JqLŒêܬŽH‰`ÖÞTrGô&¶ré˜8÷²Šm{ùV^ÌøÝÙö'übZ‚¢Ïî(îŒYŽÐþ¥ú%JÂE3†°QRÜÑ~^¾¨&ÝÒ÷JŠè$uÄN ¹MN¤“W#|ðöpª‚Ú„à.T¸Qõ6ºJ” hN>Ïç•-4Õ³gP6t®|}(Vd°;Ma“ÉA¤ü bÁ åÈ ÃD73€Œ¹Ì± /Å}&í«;âÂ0IŒ@Ét˜á–©Y H=ÕBG ìáóúšàe7° ¹çëŽ@¼´$äeo«>À¥Âü(ÙkBÓÛyj èè5¸J ¸HCöéÊE»TL*£T•슄§È4ÕÇ$L‡IÕ'…ÚuŠÖ¢…ÎdÐ+ÈbÕi¼»n]^Lxñì¿tŸñÀqÁ¡øåCtm2óD¼~õ#™Mªô²ul†Nù3Yåg„ßS,ÓÕ¼z]Ý}íï±zBývÿá •(c²SZéÃdƒ&"É"1ß Äâc8Ûœ¼Œï³är­/—&šˆêB@eHÅ`O¼2¤‡¶ 'y8Ö!Ež„â²pIg·Ð ªJWZ›a~y¯@¹¦¦O5›Èk}κó¤ü•±¿é¥[uA„²í.·Ÿ÷ 6v‰:l'˜]‡Â@¡tÌÑ|•† »œÝéò£y…÷BeÙÜý.u§´3>ôzð²=gKU.#t1½r­9õ½KN[‰@úÁ]ói§èV¶/ ÍããúQ§£gq¤{ÊN7‡Ît¹h%eÞ¨í 2C×™©)¬"ˆÖO_óWEØdl˜¼©”¦‚öŸÝ=(7µ®­Å¥ÎÐÒÚ‰(œ—ïù}×Ék)„În¶ü ’"¤s.<åIþÉ`EMå¢TªS†Ì C áõ3½ò ]|BÒNÅY=-øîE—YÍìW¼õòÓ†eqQy˜d=¤e‚Ëj¾ñs˜â€s $›‰†ê÷¤`½¹ÿ¨Þ¼‹¬ò˜êþ%…(gLød}²pØÔ$S$Zœqû"‘ÀN²-?BŠs4vÚ‰tS©Ÿv:¼S›ËZ óO#O³Á™c 䤿ÓÝÁê8N“™*Æ€§†Y_èNš#/ðW"õùŽQì"&æ”]ÒˆH°K>ÿN™¼Õ·Å(Ín:ïý‘KÈ!¶*)ª‹ —Fq΄q¥b=H›þŸ¥KÛY«Äãvi¢ml¨¨×Nâ¥\îTÁóçfQ ¸BT×ß±GUÖóX?Óuó–ÆdÈW žTjZK ’„ìCÖRï¸cƒ94k"þD§‰ù{k$0ÁÔYßêT¦W&waÍJΖ*rõŸU›|À%Õ]Þg²¸ÝÔôÙsÊ„ GQi€¶éä3íhÊ‘=7“Ü:<¼Û>oHqe <ÜÕ&“¨ð êÎNÅ̤ÛéºÉ™Óî¦Ú5ä åC‰ñn`¶˜dDQR4¿ž”åã˜í'õŸßÏJWçÎeóÙî»@q¿é‰í!‡¤k½}ÿ¸_gÑqœ2Œ~F׎ ¯¾O„Ʀ·càj{MÌí$»1sw£Ä¼nÓ¾¸c¯üOsò}Û N¼\Ý^uY4sdˆåy^iinÒb+Ëy€Ç6šjî̳<ß;¥a7Ÿí_0?Ÿ8•Çìž®áÙý¸¥% äõ;ëþúmèNTl5Ÿéø:?¯Â«³sWçÐèŽùz ^ío“£ÏÇܹošÚèû1á'<ÉÂ)É´’> Pñ4”ÞSrÚ&¥ ¿’ÔŒŠ9I’4%ºh& èA‘À,‹DWæË´8K–—©P)%ÜqÈM¼ü”¥Ö2xÍ),uz›4x¶-ëöc}\®ñ³k §<¢ëÕáXsdBÄÀÍ¥Ïy©Ž˜ó´IFç¤*aðœôÛ7×DT.³Ä+sÙ@&SY³!dµ»èp k3v:ÞçRo>ˆ ï©’yìßsÇ v£>`Ì1ýë©pM¥­ 4 )>¼WñLÅ"ˆ`Èå.)©1'>³'²ˆÆ–O!AÑœ"›»Ã.ί%î¡dÕ˜ª›Ã\_’Šöâø#Æb3¼~OÞ’Ø€Ä1$ñ@0ë…R8ÍuI¼¡·ÃRȼžouÇÑÖ&©UãÛsÔÚxLš.¶ØÄÃŒÚMe‡+ß“æmjp=OD¡K;_3{þPû,ç•­Y\½è­–|v>;9;÷u•¥TÈj”ˉӧÖcÓ7¹¿V¤4595¿Š­%FÉP«¯œêÃi²ôy¼'®½*>¡ÌÏQµçÙQ’d+!Cy• \Ù‡ÐCê«l¿:h¤Ü„ÌÉå Ãîåîç©øâÌhåîç‰XK3TöqL.x¾ó Böég†.gpþì³/·®ñ”áx ö&»¶ߦÄœ@’^oq ä­—¼yãZÐ{¾5ÆKQØ™<öÚ­,ððºy?nï\7ñ+×màpn»ËDˆ^ ÜœÊþˆ ¯;D/‚úž¯ Ĩ€S+Ç,Ù‹`ÉSöºì˜'ÑëÊ*'CÑ î‘cÊ^Wf†º8d¹„îõ¬LT!z]t5xbÍaÙ¼ápÚ6É FÜIò"x–¼<¦ä5Xóhô bnËÙÈ;&$/öJ<(3»ÜCðâpj+¹‹Cr¸™uÎÍä¦9ÏbSÄñ]v0¿ß®>dÁ+{ONÁ+ß“5à%y™B×Ú^k÷íéG¯Òž#ÿ[²^Tegh6;Eµì²ÜÆü¿àÇŸNxügSþBCg:ùþüš˜|Ù±úÓ'‘"þLmž¿ý¯j&ÿøøË¯Ið`A¿e(„óú ›è ”t¢Eή 'wÓÙJÃ8¿“ƒü.üEaÈÛÆ›å‘¸œ/óä1à‰Øõ:ä?ã·sÁ_¬ôÍo§+ÓêrÜéºiÂqÇ5mÂsÇàrÝ1bùîaç·ækÙ›Þ;ÑðÞy^~¼¨žlø šþ;˜¾Zˆ¾º±ÉëЙú}6>\Uõv>:F|=' %¦KÀKˆ6OÈÙ4Ua ˆF“¶jÆ•€ü{XãZøYئãuXà ñGóÕž˜óë‘Z]S¶ÀÙõjM+‰1JÂ|OŒóýõ6Üí Ù*~n(e&)Rÿ‚hVà£cg{…a7=Œ¹P»0|€2hm馌W¥ò—_!Ez1Þ>@Ù4_ ¦V ªÒ)v‚´ž]&Ç@Ð¸ÉØ§›ß®Ê. πΦ«|¡ìj’à ‹Œ)Û?×ú¾bmZT±Ò06‹Ÿoa¥×Zê²w,”׺ErLßjÈ*’d±æ}pËãÉZÓjSŽnòtK…ró,Ìd:½ÇµfDwé×FûKMßW*ëÙ9ë"Ü÷#•IlîHyÓz07D¬¹B3ùŠ8Ö ÌdIªx8s¬gÛ„ö0&.²¤ ¯¤·×ØtÓ¦· 9¾±í7ulpŸ<:Jg<_¯ÞÈ-ÜÖìjêÏ“hœev/hLtÒ˜×Ü6MéV’£¨’L‚ÁŽdí#ù,Q¤R'žmÜ2ǬwÊ¥¾šoÐ¬êæ™+énŽja i™™‹ÿ€€ÙGçÓÀT‘¦ØÁßb•hZ>©nüæE–³… vN¶ÈT=l «3Âò!eßÃü:§âžݡS†LeìÝ­Ì^RP7;Ó%î€ÃüÜšá¿­ŽçïµjwW êåQ™31YÞÿ‘Z5š î;TjXu€T•áʽeÊY°£Kÿ¹w×û¸ ¬Lcó‚ÿ#•ið½ŒQ‚çÅ¿­3£–ws"bœÇ†‹F1ÐøÂ_èÿOÅ?„פ̓ºýç—á»þ²{öTk*Ì‘ïÓ ¡ùªåeR0ÍñŠG€;Ï‘©Yx~ø” 2¿½5Ê Å_>ô—8þéø¿ìÏõ endstream endobj 4 0 obj 133723 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> >> >> endobj 5 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 510.236237 317.480286 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 1 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 6 0 obj << /Creator (cairo 1.6.4 (http://cairographics.org)) /Producer (cairo 1.6.4 (http://cairographics.org)) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 8 0000000000 65535 f 0000134302 00000 n 0000134016 00000 n 0000000015 00000 n 0000133991 00000 n 0000134088 00000 n 0000134367 00000 n 0000134492 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 134544 %%EOF pymvpa2-2.2.0/doc/source/pics/design.png000066400000000000000000002641761202542755000201150ustar00rootroot00000000000000‰PNG  IHDRXu4¼”©sBIT|dˆ pHYs  ®ÐÁtEXtSoftwarewww.inkscape.org›î< IDATxœìÝw\UõÿÀñ×e# ( ,EI÷\%)¨iYî½WjÃ25ÔŒÜfd¦æH·¹r%®Ü Gh†D@dsïç÷?Î׫PÔÏóñð!÷ŒÏyŸs×û~Îg¨„H’$I’$IÅGïI7T©T:€= ûâ‘$I’$I*u'„ÈyÒTÿVƒ¥R©Z€€ÉóF(I’$I’ô Ê.瀿„[þmãB,•Je̾€%I’$I’^uû€!BˆÛ…­|,ÁR©TM@%+++š6mJ£F¨W¯FFF/:`I’$I’¤R#//+W®ð÷ßsêÔ)nßVrªûÀ!ÄöG÷ÑJ°T*•p°×ñòòò8wîœòX__{{{lllžhÿpùòeììì¨\¹²²îòåË^bbb¡Çiß¾½xðàÁîòäIeŸ† *Ëããã…D¹rå„BtêÔIbÞ¼yZe¼ÿþû‹/‡~,]]]1räH¡Ñh„B)ë\\\þ5¾5kÖz~«W¯~ÚKõÊINN€°±±)éP$éµúðçÈ»B„ZÜ%I*¥š5kF@@4iÒ€.]º(˪T©¢µ}dd$.\x¬œììlþþûo} ¦OŸ®µ¼ «[·nʯ©¦M›*5}Z¢yóæÊ>½zõ€ Tj°ªW¯.,,,DÏž=Enn®°··7ÖªÁÊÉÉ–––¡¡¡B!æÏŸ¯œ‹B©ÁrttTŽ×¢E ˆiÓ¦‰ììlQ¾|y¡§§'f̘!1bĈ"¯aA –‡‡‡ˆ‹‹SþåææŠï¿ÿ^âý÷ßæææQQQÂÝÝ]«¶ËÂÂBVƒUp½Zµj¥<×’$=¹¢j°d‚%I¯˜ÿJ°š6m*8 êÔ©#qöìY!„NNN[·nQQQ¢J•*B___ùÒØÃ Ö’%KĬY³„•••Ä÷ß/„J¢"222„©©©pppjµZI°4h ÆŒ#ôõõżyó Ö­[§•` !ħŸ~*1qâD!„»víBü/Á²´´bâĉB___ÙfóæÍíÚµ‰‰‰B___XXXˆ¬¬¬B¯aQ·/]º¤$Xb„ býúõ"%%EìÙ³GÄÆÆŠôôt $%Bü/ÁÒÑÑbðàÁZ(1gÎ!„C‡€;v¬¸sçŽèܹ³ÄòåË…F£VVVÂÂÂB¨ÕjÑ´iS¡««+ºví*’’’„J¥µk×B1~üxˆ¶mÛŠÓ§O‹.]º@ :Tëµbee%~øá±víZ­kÊ”);v,òZI’ôïd‚%I¯‰ÿJ°¶mÛ&„bĈ¿üò‹¸uë–„¾¾¾ðôôžžž¢bÅŠ+V¬xì…µÁÒÓÓýúõÙÙÙB!Ö®]+ñå—_Š-[¶@Lš4I!´¬ÈÈH¡££#tuu…‹‹‹HJJz,Á:{ö¬RC¦$yyyBQh¬2eÊ(Çûðà –-[&233E›6m 6lØPè5,H°*Uª$|}}•ñññJ‚Õ¾}{­}Ö¯_/ºté"*W®,Ê–-+Q¹re!„v –B¹·nÝ*ѵkW!„ÎÎÎîîîÂÓÓS¸ºº @ôë×O!D÷îÝ Ž?®\÷ *(å~ñÅB!š5k&±sçN!„'Nœ€prrÒz­|ýõ×Êy$X*•J¢eË–Êu–$éé•`ô"”$é5ñÖ[o §—ÿöÖh4Jï`]]]Ú¶m‹J¥â½÷Þ fÍšÿZÞßÿ……(Ë»uëÆØ±cYµjQQQ¨T* ôØþNNN´oßž?ÿü“Ï>û •JõØ6nnnÔ¨QƒÐÐPFŽ @Ÿ>}íƒÀØØtuuIHH`÷îÝ 6ŒaÆ)Û¯\¹’îÝ»yn•+Wæ»ï¾+t]£F”¿ïÝ»ÇСC177gÑ¢Eäääн{wòòò´öqppÀØØXë±øÿvQí° žeÈïÅàííÍÆ™9s&_ý5«W¯fñâÅxyyi•“‘‘ ´Ó222ÒŠë¡qz&&&”-[–ãdzk×.>üðÃB¯ƒ$IÏF6r—¤7@… hÔ¨YYY¤¦¦ÒªU+jÖ¬ÉåË—ÿsè…êÕ«ãä䤕\AþÐ #FŒ ))‰íÛ·ãéé©$wš3g‹/fàÀE§ ±û¡C‡ ÝV__WWW•äkýúõäææâî¯¯òÏØØ˜½{÷rçÎ=¿¢<œÆÅÅ‘žžŽ©©)åÊ•cË–-ÏTföíÛpãÆ š5k†»»;)))èèä$$P4jÔˆZµjQ©R%þúë/ôôôðôôP’äÙ³g³jÕ*%YìСC‘çRÀÔÔ”ýû÷cnnN·nÝ”$U’¤â!,IzClذV­Zñý÷ßÓ¸qc:vìHHHÈcµOãã?V¯Áƒ¹]51b&&&EnÓ·o_%Áhذ!µk×~¢V­ZÀ„ øî»ï”:t@­V³fÍš'="ÕªU‹aÆqãÆ ¼¼¼¨T©Òs•÷Ýwß1|øpöïß§§'ÞÞÞ¬_¿ž²eËùµ~U«V E‹JRÕ¸qce:³/¿ü’O?ý”+W®0`ÀNŸ>Í€øöÛoŸ(Žš5k²oß>Œéܹ3x®ó’$éTBT*Uà:ÀîÝ»•_E’$½~233‰ÇÊÊJk`Ïg‘““ƒ‹‹ <àÖ­[Ê­±×Õýû÷144|®¤ôajµšÛ·ocjjŠ¥¥å3—“——Gll,666Õ4J’ôb………Q£F‚‡-…‡AÖ`IÒÇØØ˜*Uª}øùçŸ_܉”BVVVÄÇǺÎÏÏØØXÆ÷’£’$I’¤ÇuîÜ™ºuë2|øð§ÞW6j)Ä©S§¸wï:uÂÂÂvîÜ @XXÕªUCWW€ÌÌL®^½JNN޲LL +W®äâÅ‹ÄÅÅ‘’’ÂÞ½{Ùºu+)))Ü»wììl¦L™ÂÈ‘#”íRSS‰ŒŒÔJàrss•c$$$˜˜ø¯ÆË³cǺuë&k®$I’¤Rcذaù„víÚáááÁ”)S˜;w.úúútîÜ™jÕªCff&;vÄÇLJÆŒCjj*•+W&!! àççW’—©Ø©Õjþùç PÒ¡H’$I’ÂÙÙ]]]‚ƒƒyçwžx?Yƒõˆ«W¯"„ 66–ñãÇ3uêTŒŒŒøè£ÀÅÅ…‹/2wî\Ú´iÃ_ýE:uX¹r%*•Š/¿ü€ùóçsôèQÆŒCùòå©_¿>Gå›o¾Ñ*«àoGGG¶oߎ……W®\A£Ñàë닾¾>ëׯ§cÇŽ¤§§ãìì\2ç #++ WW×’E’$I’zzzT¯^sçÎ=Ý~/(žWVXXßëÍ‚޽{Ó®];lll8~ü8®®®ìÞ½€îÝ»cllLnn®R}xíÚ5T*µjÕÂÀÀ€ÄÄDîÝ»GÛ¶m100 <<+++,--•kÈ!“––†‡‡7oÞ$::šÎ;ãèèȉ'€ü¤ìu“€¾¾>ÆÆÆ%ŠT 222ˆˆˆàæÍ›äåå•t8’$½¡tuuqtt¤zõê”)Sæ™Ë±²²âþýûOµL°QìŒ?‡ÇÖéëëãää¤4ø¿sçÑÑÑ\ºtII nݺ…±±17oÞ¤råÊܺu È¿ V°,<<œ ùI©©)U«V%<<µZ³³3VVVèééÉظq#Õ«WY—C’žXZZ¿þú+gΜáÖ­[èêêRµjUåG…$IÒË–››Ëõë×ÉËË£R¥Jxxx0|øpÊ–-ûÂ-¬G„‡‡cbb‚½½}¡ëªV­Š¾¾>íÛ·çÔ©S|óÍ7¨T*Ú¶mËØ±cxï½÷ˆŒŒdðàÁøûûS³fMj֬ɦM›¸uë_}õJMTxx8...¨T*"""€üZ*333>þøc6lØÀ¶mÛ€ü,úM*C*}Ž9‚ŸŸ–––Œ3†ºuëR£F ™\I’Târrr ãÒ¥K,]º”ž={òÕW_áååõB+¬G¬_¿¾Èu5HfffÌ›7ÌÌL ”^…}ô}ô‘־˗/×züðXP·:tè@‡€üÛf...øûûsäÈ~úé'†úl'&I/ÈÌ™3Ù»w/ãÆã³Ï>C__¿¤C’$IRP·n]êÖ­K=X´hÓ¦MãØ±cøúú¢R©^Èqe‚õœ^d›¡›7oâããCff&––– 8Áƒ¿°ãIÒÓÚ¾};‡âÈ‘#òÖµ$I¥žžžŸþ9íÚµÃËˋ͛7Ó­[·s¬RªT,ÜÜÜ8xð`I‡!I…º}û6óæÍcîܹ2¹’$é•âììÌœ9s3f îîîT©R¥Ø!‡i$é™Ì™3ooozôèQÒ¡H’$=µž={ÒºukfÍšõBÊî¬ÈÈHþøãâˆEzÅ©T*ºu놣£cI‡"½@`ß¾}œ;wNÖ°¾æöîÝK^^ï¿ÿ~¡ë8@VVmÛ¶EOïõ¾!Ϲsç°³³Sz€K¯¾±cÇÒ²eK222žk‡Â<÷;âСC¤¤¤ðÁG<Ò+lëÖ­9r„þýû—t(Ò Àœ9sV¾PkÔ¨QÒa½‘~ýõW|}}ðññaôèÑ„††ÒªU+ZµjÅÚµkŸë8ƒ&33“ÄÄDtt¿á1jÔ(¸yóf±OqµgÏ D­Zµøë¯¿ŠµìgqîÜ9úõëGçÎñ÷÷/ép¤bRÐÛ944”FkÙÅò“ÃÍÍ/¾ø¢8Š’^acH¯ŸÃ‡3cÆ ÜÝÝ9uêþù'ׯ_—=KˆZ­&;;€eË–ñé§Ÿ¢««Ë¯¿þª,x~TÈŸ`>77CCÃ"ËÍÎÎ.r½!„V¢åïïONNN¡}4 *•ªÐZjµ•JUhÒöè9æææ¹ äsTÔë°`ßÿzvÞjµZ«w¸‡‡›6m¢bÅŠEÆûðöòòò^ûÚ½W™žžuêÔ!$$¤Ø,ÙK’¤ÃÔ©SñññaóæÍ888JÍš5K:´7žƒƒ±±±rÿþ}6nÜH¥J•´¶‰ŒŒ¤AƒT¨P[[[ªU«ÆÌ™3•õ©©©Œ;–jÕªakkË[o½ÅÑ£GµÊX¾|9ÕªU£~ýú¬X±BYîããèQ£ÈÊÊ";;ÜÝÝùùçŸqrrÂÝÝM›6)Û_ºt‰víÚaoo½½=}ûöåîÝ»Ïtî;wîÄÝÝ[[[ªV­Ê¤I“”¤rݺuT¯^Š+bccƒ››ʾîî¸€³³3Ÿ|ò ;wîÄÅÅ…Ï>ûŒ>}ú`ooOçιzõ*/^dÔ¨Q°zõj\\\øúë¯éÔ©öööôîÝ[X:77—Ñ£Gãàà€««+óçÏÇÅÅ…Î;?ÓùJ/N:u¸yóf±—[b ÖíÛ· Óú—˜˜XRáhBöËòMvæÌ>ýôSnܸQÒ¡H…Ðh4L™2oooFŽ©,ÏËË“µW¥€——ŽŽŽüú믬]»–ÌÌL† ¢µŽŽ½zõbÍš5øûûcii‰ŸŸŸ’D3†åË—cggÇÌ™36lB­2–-[ÆÐ¡CIHHÀ××W©JLL$!!AÙ>!!ÈÈH¶lÙÂ!C¸qãS¦L %%…®]»rþüyf̘Á˜1c |,Þ'qöìY „Z­fñâÅxyy±xñbüüü077ç믿fÓ¦MüðÃDGG3räH¥v/!!„„¦L™Â{g‡‡™™™$$$°víZÌÌÌðööæðáì\¹€¬¬,”éR222HHHà·ß~£råÊ4kÖŒ={ö°aÃ~ûí7V¯^MÅŠ2d«W¯&!!äää§>_éÅ200xì5_J,ÁÚ¿?+V¬`РALš4‰+VpáÂ…’ G‹‚_~ùå™÷¿zõ*]»veÉ’%´jÕŠV­Zqýúu ÿCF£Ñº_ëÖ­Ÿù˜¯’ôôtfΜ‰««+7&""â…t‘•žßúõë¹sçsçÎ-éP¤Bèèè0tèPNœ8ÁO?ýD‹-«Yttt¤~ýúœ?žíÛ·+Ë/]ºD^^þù'»oĈøøøàéé©UÆ¢E‹˜0auëÖ%--í??«W¬XÁäÉ“qrr"66–ÈÈHNœ8ABBvvv$&&¢Ñh066æÄ‰O]‹µcÇ4 •*U"**ŠòåË(?Œ›5k†¹¹9ýõ‡ÂÄÄ„´´4¢¢¢;¯ 0|øpeYíÚµY²d 'Nòg)ø7o¿ý6?ÿü3_}õÇŽò;@~;nÜ8¾ýöÛ§:GéÕWb7† À„ hܸ1;väÀ <˜f͚ѯ_? ™>}:YYY¤¤¤ðÕW_QµjURRRX¶lׯ_gذa4hЀ¬¬,–,YBpp0-Z´ F4hЀŋs÷î]ìíí©W¯¿ýöfff :” pìØ1ÂÃÃ9räM›6eèСèéé¡V«ùî»ïˆŽŽæ«¯¾ÂÉɉyóæáããä€xzzRµjÕBϯAƒʯ©Õ«W3räHöìÙCrr2BbbbðóóãÎ;|ôÑG”)S†‹/2bÄú÷ïOZZkÖ¬¡\¹r|üñÇÔªU‹}ûöq÷î]vïÞMݺuùꫯÐÓÓãâÅ‹,_¾œääd|}}©R¥ þù'Û¶mÃÛÛ›^½z‘ÍôéÓ•ÛãÇ9OôÿËÌÌäàÁƒ‘””ÄæÍ›•u“'O–m·J¡ÌÌLöîÝËðáÕ/0©ôéÓ§3gÎ$))I+Q(Hÿþý©]»6ï¿ÿ>÷ïß'""‚ŒŒ rrrÈÉÉAWWkkë"Q¯^=à+gff¹­™™NNNùµ=éééʾgÏž iÓ¦@þ<–*Txâs~ðàwïÞUÊjÕª•ÒŽjÚ´i¬X±‚öíÛÓ¨Q#Ο?OJJÊcq¿óÎ;EžkAYYYYÿKÁöŸ+ü¯ \Áœw&&&O|~Òë¡Ô´¼+H86lØÀ/¿üªU«6lS¦L!((sssFÅîÝ»™6mÍ›7§ÿþtéÒE«wáÂ…têÔ‰þýûS«V-|}} ¢fÍš$$$°bÅ RRR2d[·n%""‚uëÖ±uëV-ZÄÚµk0`§OŸfÑ¢E!øî»ïظq#AAAÄÄÄP±bE–.]úĽå:vìȘ1c8xð  `Á‚ôêÕ RRR°°°`æÌ™,Y²ÈŸDºM›6ܽ{—Ï>ûŒ7BPPË–-cüøñáááÁ¨Q£X¿~=+V$++‹½{÷röìY–,YÂwß}ÇñãǹuëUªTaúô餤¤¼˜'ñ†sçÎÈáÇ ý ÒÕÕÅÃÓ'O¾”˜¤ÿ&„`Û¶müòË/dff{ÃO©xYXXðÍ7ßÂ{ï½÷ØÐ5)Æ ãƒ>Кš«L™2Ô¨QƒÐÐPeÐÅû÷ï£R©xë­·”íþ­1ú£nÔþðß 4@GGµZŸŸUªT!&&†Ý»wkëQ)))ZM6\\\hÔ¨+W®¤B… ,[¶ sssBBB”¹\÷ìÙÀìÙ³IMMeöìÙ…–]Ø\™çú¤Ó§l÷èöMš4áÔ©S,]º”2eʰhÑ¢'*Oz}”škÏž=|ôÑG”-[–¾}û2zôh† †«««ò¯R©HMM娱cøùù¡R©pssãôéÓüõ×_ÌŸ?Ÿ²eËÒ¾}{¥ÜfÍšQ»vmÂÂÂðõõE­Vsþüyå ÿÃ?ÄÜÜœ¾}û2~üx €›››RÕ ä@P³fM:tèðÄ:mûá‡2vìXêÖ­Ë—_~‰………Öú .°mÛ6Ôj5gΜQ–wéÒ333ÞyçΟ?Ozz:žžžJÃVþøãÒÓÓ=z4ÉÉÉœ>}šnݺ1|øp>ÌçŸއ‡Ç?7O+88˜;vpúôéÿlo`kkKpp0!!!!¸|ùò ‹«¸YܸM/ IDAT[[Ù£èUͬY³ˆŠŠbôèÑÌœ9“† –tXÒx¸}Ü£ºvíÊï¿ÿÎèÑ£ñññ¡V­ZZë.\Hß¾}Yºt)K—.òµÿ[Òó,œ™—/_ÆÖÖ–+W®(m®–9s&›7oÆÔÔ{{{å¶Tdd¤òÁ¸>ÿ²)hüÖ®];üüü8uê¿ýö_ ,„(²k³Z­Æßߟ¶mÛj-oÖ¬GåôéÓ|úé§ìÞ½[«‹ïìٳٷo€Ö—xA\:::h4êԩï¿þªUvýúõ±··§cÇŽZË÷îÝKTTÝ»wçܹsdee¡«««ÕX9//ÜÜ\ŒÉÌÌD__===ÒÒÒžhœ›Ë—/+]·ŸDll,ï¾û®Ò…üß¾(JµZMŸ>}øä“OJ:”bÏ!ChÞ¼9ë֭㯿þÂÉÉ©ØÇ7’žßG}D:u°µµ}l]£Fرc‡r[×ÓÓ“Ž?Nݺu144äÆÊ€À 4àï¿ÿæôéÓÄÄÄ`ggG“&Mؼy3jµZI jÀëÔ©ä7ÈÉÉ¡L™2èèè°cÇ­! ~þùgýôSz÷î͸qãØ½{7ÙÙÙôèу¸¸8Nž<‰¡¡¡’|Ž7Ž÷ߟ÷Þ{O)ïÈ‘#¬_¿&L˜@Ë–-ù裨W¯‘‘‘ÿYm^»vm¦OŸÎÑ£G äôéÓ¨Õê"··±±!&&†Ã‡Ó¶mÛǺ‡—V/» Û‹&„`Ú´i4jÔˆ5kÖ R©ÈÎÎ~¡“™KÏÎÎÎ;;»Bו+WŽ·ß~[k™µµ5:uR$ŒŒŒkØÿk#U àn@GkÂ=nýúõ+³`ˆ†ÿbiiùXyªY³f‘Ã…<¼îÑ6„ äì­­µ>kŒŒ´Žÿh<¶¶¶Z ®©©©ÖúÔÔT6lHÓ¦MIHHàüùóòùçŸÿë9I¯O°žhÙ²edffj}¨ÛÙÙ±eË­û·ß~›·ß~›¬¬,¥a¡¥¥%þþþ¨Õjºwïλヒ……[·nUÊúâ‹/xðà&&&Z‰Â Aƒèܹ³Vm×”¿ƒ‚‚”¿´Þ QQQJo“µk×Vn+>jÛ¶mL:•äädLMM•¤‡¯E‹-HKKÃÔÔT‰õáÁ\{öì©üíëëKvv6yyyÊ9øûû“––†žžžrݺwïŽJ¥R¶IOOÇÛÛ[+>///¼¼¼´’ÂG{ßü¼½½ñööæÞ½{ìÛ·ÀÀ@e<™‡ÅÆÆ’ššúÄeK/Æúõë¹ví'Ož|â¶'’$ÍÔÔ”1cÆ‚™™­Zµ¢_¿~%·Òë«Ä¬G=ú‹¹~ýúèèèúKº ¹¸wï&L@__Ÿ#F`iiYhùÖlÙÚÚ¢««ûD=<¦OŸŽ¥¥¥Ö/½çé¾þp-ZažæÖŒ¡¡ác·)ÝÿÑs_¾|ù—ÿ¬Ê—/OÏž=éÙ³'QQQLž<™¸¸8­ñÁöìÙóT=ˆ¤â¥V«Y¶lóæÍSjf%Iz>úúú|öÙg%†T‚J]‚õ¨Go­ÅÎÎNéIø4Úµk÷ÄÛ~óÍ7O]¾ô?NNN¸ººÒ¼ysúõëǪU«øã?˜2e .,éðÞX‘‘‘dgg?Õ{A’$Iúw²;ƒôÒ©T*¼½½Yµjñññøøø(ÓKH/_HHo½õV¡í%I’¤gS,5XAAAEŽ3"½9þþûo¥Ï“211¡_¿~>|øÅ%ý§1‹¼$Iқ÷Þ{œœ¥«¬ôæHOO×j»V­Z5Ú´iS‚IÏ"%%ENU$I’TÌž8ÁR©T…N†èààÀ¨Q£Š5(©ôKMMå»ï¾{¦Fþ²—Úë/##ƒ½{÷¾ T_7:::´k×N«“Jrr2·oß.Á¨Þ<Õ«W×z„DFFÊ×ðkÂÜÜü¥w¦zâ«R¥J?~üEÆ"½BÖ¬YÃÉ“'¹{÷îS½hãââäÈào€ü‘%K–È9 Ÿ@bb"&LÐþ¥`0Néå6lßÿ½òxáÂ…øúú–`DRq211áï¿ÿ~©IÖ'Xžžžøúú†««ë‹ŒIz$Û{öìyâ9###¹tésæÌy‘¡I¥@ff&žžžüðÃ%J©7bĈÇ&!NHHàÇ,tðO©ø-\¸ÄÄD­eqqq´oß^ö ¤¥¥Ñ¶m[îß¿_:¬æÍ›ÓµkW|||˜0aîîîrN¥7Ttt´2ðè®]»þ3ÁÒh43sæLÞÿ}e SI’Ц§§Wä\Rñ*ê»L___N%=³§jä¾|ùr|||øâ‹/066~í&º•žÌÃ8ß¼y“Î;ÿëÁÝ»wÉÈÈàã?ÆÏÏïe„(I’$I%ê©,ccc~þùg&L˜ÀÙ³gIJJzQqI¥”â±yøjÔ¨¡ÌY˜òåËãææVäÜi’$I’ôºy¦alllèСCqÇ"½Ž=úX[… .°{÷neNEI’$IzÓ•ú©r¤ÒeÕªU-KJJb×®]tìØ±"’^g·oß~lÎ̦M›Òºuë§.+$$„›7oâííýÆü8~ü8iiiÊc]]Ýg«N­V“œœŒ‰‰I¡ó¾H.\`íÚµ 8Zµj½Ôc—&ÑÑÑ\ºt‰û÷ïS«V-êÖ­Kvv6“'OÆÃî]»Ëq"##Y²d ]»v¥qãÆÄÆÆ²k×.®]»F—.]8|ø0†††Œ=ºXŽ÷:{®ëúõëDDD ÑhŠ+©ËÉÉaýúõ…®›3gŽÖäÛßp´Zµj899½Œð¤×йsçØ´i5jÔP†|xÖ†ß ,àÂ… ¼÷Þ{Åb©%„`ܸqddd §—ÿQ_½zõgJ°N:ÅÈ‘#™>}:}ôQq‡ú¯îÞ½Kvv6–––/õ¸¥…Z­fþüù ««‹µµ5qqqrÿþ}vïÞMíÚµ‹íx×»\¹røøøOïÞ½qpp >>þNtŸÆS'XyyyÌ;—Ù³g“œœŒ………òæ•^oÙÙÙdddºîÔ©SôíÛWkÑ‚_½æææ|ùå—Lœ8ñ©9ŠGHHÓ§O§zõêÊòððp~øáBBBpvvfÔ¨Q4nܘ#GŽ0mÚ4’’’°µµ¥S§N 6Œ‰'äÏ>1jÔ(®_¿ÎÞ½{Ù¾};iiiôîÝ›.]º0|øpˆåÊ•ãÔ©S>|˜5kÖ°eË’““iÑ¢ß|óÍc?*J“[·nñàÁ:wîÌ”)S´Öýõ×_:t•JE»víhÞ¼9ßÿ=7oÞD__Ÿºuë2hÐ ÂÂÂX¼x1?,ËÍ›7éÚµ+‹-âƒ> I“&¬Y³†ÈÈH|}}9~ü8{öìÁÛÛ›½{÷òÁP¯^=V­ZEXX5jÔ S§NØØØ°páBÌÍÍéׯ 4ˆ5kÖ·o߯Î΢¢¢øóÏ? ¥L™2tëÖ&MšpïÞ=V­ZETTõêÕ£sçÎJ‚ðª[ºt)Ë—/§cÇŽ|úé§T¬X‘ÐÐP8uê5kÖäÞ½{üüóÏܽ{333š7o®$ÃàØ±cÄÅÅQ±bEÆŒƒŽŽ›7oæŸþA­VÓ¼yszõêEtt48991~üxΟ?““DDD`llLÍš5ˆ‰‰aݺuܾ}www:uꄉ‰‰RnëÖ­Ù¶m£Gæüùóœ9s†{÷îáààÀĉ_û‘ž*3JKKÃÓÓ“¸¸8ÆŒƒ»»;/*6©”3f 'Ož,rý Aƒ«¦NMMåܹsüòË/lÙ²…#G޼6|Ò‹W`uéÒggg,X@ß¾}iÖ¬«V­Â××—ü‘7beeÅ‚ (S¦ ?þø#‹-¢W¯^´jÕŠ;wÒ¦M:uêD5øý÷ßÑÕÕÅÀÀ€bcc±±±!==àà`Œøà®^½Ê€¨_¿>Í›7ÇÏϬ¬,†ÊæÍ› %<<gggnݺŷß~ËØ±c166æêÕ«¯}rO™`}þùçdgg³~ýú—~^*Y÷îÝãôéÓÿºM``àc_8eË–¥U«V4k֌ѣG3lØ06oÞü"C•^†ððpùä“O€ü6_.\à“O>!99Fƒ‚C‡qôèQ¢££ÉÈÈ@WWccc hÙ²%o¿ý6yyy\½z•V­ZðÏ?ÿù5aaa!èÕ«ü1ßîK¥R±páBeꔂ±àJ«‚ùak×®¹¹9,[¶ŒòåË̓P«Õáææ†™™ 66€û÷ïÓ®];T*ÎÎÎ|ùå—Ê`Á®®®¤¦¦­¼÷CCC166fÍš5XXX°téR¢££qssãÊ•+èëë+›››“””ĺuëpss#11‘7¢Ñhèׯ $&&*‰\JJŠR‹Ò¥Kš7oÎŒ3HJJ¢F\¹r##£×fÖ‘[·n‘M‹-´æ}-B¥J•055ò²]»v‹‚´´4tuuÑh4âééÉ!C000 %%…»wï²uëVÚ·oO×®]ÉÍÍåÚµk´iÓ333ªU«Æ‰'øê«¯¨P¡3gÎäôéÓ¸ººòí·ßòàÁŒŒŒ ÃØØ˜ãÇ3pà@"""pttä÷ßGGGG™6kÓ¦Mxyy1|øð—})KÄ'Xááá¬ZµŠ 6Èäê ´wï^Ôj5îîîÔ®]]]]V¬XÁ¸qã¸qãgΜQ;::>¶¿‘‘S¦L¡gÏžœ9s8 éUrýúu²²²pss£]»vÊòÇ0oÞ<*V¬HNN©©©œ?ž¥K—âëëK»víxï½÷°µµEWW—ððpªV­ äqåää`kkKJJ Û¶mÃÐÐ'''Ö®]  $_jµ]]]5jÄôéÓˆ¥Zµj/ëR<“ttt˜6meÊ”àÊ•+h4ÜÜÜpww M›64iÒ„o¾ùF©ùÙ½{7ááḸ¸––Ftt4ݺuSÊ £\¹r”/_ž 6ùÉVNN‘‘‘´nÝZ¹»£ÜŠ444ÄÝÝ]¹µjaaÁÕ«WÙºu+~~~Œ?žßÿvíÚQ±bEŽ= ü¯ÆfÅŠlÞ¼™]»v1zôhöíÛGLL FFF´mÛ•JõZÝY)ø® #//===rssIMMÅÜÜœˆˆ¼¼¼ÈÉÉá³Ï>ÃÅÅ…‘#G2oÞ<¢££qvv¦L™2¬ZµŠíÛ·³uëV"""`„ ÔªU‹ÀÀ@fΜIÙ²e©Zµ*yyyZ5dåË—WF? ÁÎÎ bcc±¶¶æÝwßÀÝÝ"##ÉÉÉ¡C‡J-U›6mX´hþù'$&&*ï¥×Ù'XÇç­·Þ¢R¥J/2©”JMM% @yã]¾|™•+W*÷ø…þøcúöí‹‘‘+W®dÿþý¤¤¤àâ₎Ž¡¡¡èèèàââä÷¼ëÝ»7K—.eôèÑh4îݻǡC‡^Ö¥x&¡¡¡T®\YI® ¿†ÎÑÑ‘ .`ooOrr2÷ïßçÃ?äÊ•+”)S†#GŽpäÈåh4 8tè™™™Ìš5 ###RRR1b/^ò_äåå)mtÚ·oÏÖ­[9|ø0®®®„„„(=Ž-,,ˆ‰‰¡mÛ¶8;;+c+8P9‡‚²W®\IHHŽŽŽ”+W}}}¬­­iß¾=ÇŽãøñã888ðÏ?ÿ0jÔ¨—q‰_8{{{¼¼¼8pà^^^Ô¬Y“ÐÐPüüü011!77—5jpçÎîÞ½‹µµ5»víâÊ•+TªT‰2eÊ0räHªT©‚¥¥%FFF4iÒ„þù‡… R¯^=*T¨€¾¾> 6äĉ€ö-Èzõêÿ«Q.h¯×®];æÍ›Gpp0æææœ={–Ù³g+sh¼4 }úôÁÍÍ ôôôhÒ¤É˾”%≬åGzóÜ*)ŠJ¥z¢)pœœœ¸téÒSÛ¶mÌ;WëË¢$i4nܸÁÙ³gKäøÙÙÙ4mÚ”Ù³g?W9ñññ¨ÕêbŠªx5jÔˆåË—k5n¨\¹2ÇŽãܹs¤¥¥áì쬴ÑÙºu+wîÜ¡N:\½z{{{¼¼¼Ø·o·o߯ÑÑvìØAxx85"<<\iØ¿zôè¡Õ[qÔ¨QtïÞàà`LLL”/Ò*++‹>}ú(×¥€J¥" €Ã‡Š­­-}ûöEWW—ùóçsðàAêׯ‹‹ ÷ïßWÞoþþþœ={V©7nÕªU£R¥JôèуÐÐP\\\ˆŽŽfäÈ‘J­ 4‚?räéééx{{óÎ;ïùsÜÔ>™™™1räHÊ—/¯<çÕªUcÔ¨QT­Z•û÷˜HRR;w¦yóæèèèо}{¥¶+;;›N:•úççiÌ;—]»vqéÒ%tuu•N7oÞdäÈ‘´lÙ’Ê•+ãççÇÅ‹ñööÆÆÆFعeË–DDD››ËŒ3hÒ¤ ‰‰‰4hЀ„„jÕªÅСC±µµÅÞÞž‘#GR«V-233éÛ·/uëÖ ##ƒAƒѰaC ÿ}âââÂÉ“'Q«Õ 8Ê•+sçÎFŽ©ì———G»ví¸yó&,Z´H©=}Ý=q‚¥V«•v ’ô¬ôõõÉÉÉyêýøàƒÇŽ·råJÊ–-ËöíÛÑÕÕ%99‚‚‚زe ?.HXX={öäèÑ£FFF:tˆ¸¸8  ¼·ß~µZ«««2 axx8ÙÙÙìÝ»—¸¸8eеGMš4‰ªU«rèÐ!V¬XÁÉ“'YµjMš4!33OOO>ùäÔj5­[·¦zõêüðÃDDDpðàAŽ;†±±1¹¹¹x{{+c{\½zµZÍþýû•XSSS9tè©©©,X°wwwþþûonß¾ƒƒ3fÌ ++ }}}nܸ¡ ЩS'%Þ0pà@Z´hAµjÕX½z5U«Vå×_¥E‹/îÉ‘^K–,!77???üýýùî»ïˆŠŠbéÒ¥¼õÖ[%á¿KNNfüøñ4mÚ”¯¿þš¤¤$233µ¶‰E£Ñààà , ¡ZµjJonn.QQQJwõ‡ÅÇÇO¥J•044d÷îÝlÚ´‰Ö­[“˜˜ˆ‰‰ ³fÍRÆÍ‚üIÍïÝ»GµjÕ”Ûª©©©œöíÛãééÉ×_Íüùó±³³ãÛo¿%00]]]&¢ R IDAT,--ùá‡hذ!3fÌ 00zõêñÏ?ÿ ¯¯Ïž={”K»lllHNN&88˜ŒŒ .]ºDÙ²e©P¡†††äææ²páBöíÛGNNmÛ¶eüøñ@~WýððpT*µk×fÖ¬YX[[³cÇÖ­[GDDffføúúÒ¸qc:uêD‡øôÓOùõ×ÿcï¼£¢ºÚ·}ÍÐĆ X@4 bÁ5‚ "v¬Ä[ÀšÄ}#vågï {¥ ˆR¥¨ˆ€þýÁšý1QÔ¹Ör9³çœ³÷ gæ~ü8)))L™2…fÍš@zz:çΣuëÖtéÒ…5kÖÿ¿¼;11‘¸¸8*V¬ˆAAAèéé¡¡¡AÛ¶mñððÀÞÞž·oß’››+‚¶®]»²oß>‚ƒƒQUUåúõë¬[·NnÌ2; nܸ!îìUUU‹%ïDÁ—MA+ÉÉɘ››SµjÕRÕ£mÛ¶4hЀC‡qèÐ!~øáV­Z%n²Ø·o!!!üöÛo ©©Inn. 4àîݻ̛7+++&MšÄ’%Kزe Æ cÆŒDEE±sçNš5kFLL 5kÖäèÑ£èëë³uëV”••qvvòÅ7oÞŒ‡‡‹/¦K—.XXX°{÷nš7oNpp0***Ìš5‹›7o²zõjBBB¾ˆ+;;›ððpÌÍÍyõê~~~\¸p‰'âää$¤,X€k×®%66–E‹ѱcGš5kƘ1cøî»ïÆÁÁ#GŽ`gg‡““:ubÕªUDFFR»vmBCC‰¥Zµj\»v´´4´µµ9|ø0±±±Ü¹s‡±cÇbddÄðáÃÑÕÕeóæÍlÚ´ '''ºtéÂæÍ›‰ŠŠb×®]¢Ò[‚²H™ °Ú´iCÆ )_¾<šššÊ)/_¾œË—/Ó¼ysêÔ©CVVÊÊÊhii±nÝ:nß¾¶¶65jÔ`É’%annŽžžžøRÄÒÒ’Ê•+K‹-˜?¾X>122bÍš5B9òs<.\¸ÀÇ™?>]»vE*•Ò°aCtuu…_µjÕøóÏ?¹sç?þø#Õ«W"†;wF__Ÿ°°0bccÙ³gXÚ?~¨««³k×.Ο?Oll,Ó§O§bÅŠÜ»wÐÐP9ýùÞ\—.]âîÝ»èééÑ¡CªW¯.rì*UªT¤ÇWAÞ¾}KJJ šššrⓟBjj*gÏž%&&†–-[ÊiÏ|,W®\y§ðé±cÇxòä S¦L)$ÜYÖÐÔÔÄÝÝ]¯xyyqöìY¾ÿþ{BCCÑÐÐ`òäÉ"]VéÛ°aCΞ=K^^ׯ_&Ç<~ü˜   úöí+ô” IJJ"!!®]»Š¿oHHšššT«V ´´´èÛ·/iiideeñæÍÒÒÒˆ‰‰¡G4iÒ€2¿+C&>ibb‚D"aíÚµüðØ˜˜——Gƒ HNNæÔ©S¨©©±hÑ"aüèÑ#ÔÕÕ9xð AAAâF¯|ùò¨©©ahhȉ'¸xñ"Æ £}ûöÂâÈØØ˜œœ‚ƒƒiذ!€TW­Z…®®.ÇŽ#!!ŒŒ ¦NÊëׯyýúµX¢=}ú4ƒ ¢S§Nüþûï¥òù)Pðo”©«(A´‚¼OLîŸBxêÞ¥êkhhøN[(,º¦¡¡QHì (2aØÜÜ\T×ï¿ÿŽŠŠ ¯^½âÆtîÜYˆªªªÒ¡C¡rü.ôõõ2dˆ\[Aa7ù<|ø¦M›ùŸYtt4NNNüòË/xyyѧOöìÙðaÃÞ{œ 6ðË/¿påÊ•bùœ“““ùî»ïÐÓÓ£víÚÜ¿ÿ“¬¼¼<Ö¯_ÿÞm®_¿ÎÈ‘#iÖ¬‹-*“³,999ÌŸ?KKKa$•Jiݺ5•+WFMMvíÚ±hÑ"^¿~-¾C¿ýö›°v¹ÿ>Ÿ_Ù¶m[~ü333ÆŒÃÛ·oñññaãÆlÞ¼RRRØ»w/W®\aãÆ¸¹¹1|øp>|äÅGŽáõë×â:$$SSSqNÊfaçÎK³fÍÈÍÍåÙ³ghjjbkk‹¹¹9ÇŽcÇŽ˜››ù»¬@AiS¦¬oÞ½{sÿþ}ÔÔÔ2dˆÂôø3²bÅ ²²²ˆGCCƒ—/_’™™Éµk×X¼x1ûöí#,,ŒéÓ§3gÎ?~Œ††;wfܸqœ>}šM›6°fÍÚ·oÏäÉ“ñòòâСC¼}û–ˆB„={öàëëK\\†††¸¸¸¾uww'))‰íÛ·ceeU,ÞÞÞ„‡‡¿w›&Mš`eeEçÎˬa{RRwïÞåäÉ“H$LLL˜={¶HfŸ:u*»ví¢U«V(++3hÐ ,-- ¦N:¨©©aeeÅ_ý…ƒƒ™™™hii±råJ455™0aû÷ï§{÷îT®\™óçÏÓ°aCš4i‚»»;=bÑ¢E¼zõJÛŒ?ž¥K—Ò»wo444˜;w.={ö¦Ð²íBCC166þbtÅd–‰‰ :::ÂXYæÅhbbBùòåéÝ»7§OŸæÑ£G¼~ýšÊ•+³wï^þôÓO$&&Šc­\¹’«W¯R½zuÂÃÃéׯåË—7³–––"P6K'–$eÛ¬_¿ž%K–P¯^=bbb1b™™™Ì˜1ƒúõë‹Jí.]º”äǦ@Á£°J˜Ί)ø|¨©©‘‘‘AÓ¦MéÛ·/³fÍ¢zõê„……‘€ºº:7¦N:<}ú”ZµjÑ®];NŸ>ÍøñãiÙ²%ÙÙÙÄÆÆR½zuj×®¡¡!ÎÎÎ8880{öl±±±áþýû¼zõŠ#FàääD»ví¸~ýz¡à*;;››7o0{öl,,,xùò%K–,ÁÑÑ‘zõêýç÷™••ņ Š|MSS“ž={bee%.peY3MGG‡S§N½óõ‘#Gi»qìØ1ñ¸B… ïœÍ7nãÆ“kSVVÁ’Œ‚~™Íš5ãàÁƒ…Ž5lØ0¹ÙϲnþüO D= > >œþýû‹œÕÿýïLœ8‘   ´´´ÄŠ€ÌŸð»ï¾#==]_“'OÆÂ‚¬¬,ÌÌÌDzÆÈ‘#155¥\¹rèéé©©)‰„mÛ¶Éô¨««söìYîÝ»'ª=MLLÈÈÈÀÅÅ…ÄÄDŒŒŒ„A·eE€¥à«eéÒ¥T¯^www\\\pww'&&†öíÛ“——‡™™™0K¾sçÙÙÙìß¿_,%%%ѽ{wRSS±²²ÂÉɉ´´4Œ††Ïž=ãåË—@þ ’,8Ú²e ÖÖÖÌŸ?¿Ð˜Æ‡ŸŸëׯÇÞÞžQ£FQ»vmŽ?.§Eô_8pàqqqâ¹T*¥M›6ôéÓ‡öíÛ£¬œÿ5ŽŽÆÓÓ“¸¸8.\øQ})øzxW0/+º)HÍš5å$1 ?-hê,CWW·Èåg©T*7c_p›¢R?¤Ri¡ôŽråÊ)fý|1”©ëúõë"Q´ 2)…ÏųgÏX·nAAAtîÜ™©S§~¶¾þIBBwîÜÁÌÌLüà :”:uêð¿ÿý¯ÄÆñµ‘˜˜ˆªª*³gÏföìÙôìÙ“ .ššJNNÑÑÑBV#;;›~ýúQ·n],XÀÂ… ÃÌÌLÉÊ’¢HOO§S§NââÒ§OÌÍÍ©S§>>>ìÞ½¢££åf>òòò8vì­ZµbÒ¤IDEE±bÅ ¤R)§N•«ÿ…ׯ_ ±Y===¬­­éÕ«—˜•xõêgÏžÅÃÃCä&)i(P àóS¦¬èèhž={F||<‘‘‘Ô­[­òúTÖ¯_ϵk×XµjU¡»´ÏëÖ­cçÎèêê’••Eß¾}‹t¤Wðá9r„Y³fѪU+ÒÓÓ¹|ù2S§N¥J•*$%%¡ªªÊÑ£Gyóæ K–,!:: öïßÏ•+W¨U«U«VåñãÇ@þ9’ÀŸþIëÖ­¹~ý:¦¦¦¼~ýšðÓO?Ñ®];Ú´iCÍš5QQQ)”"‘H°±±açÎX[[“œœ,Úÿ«A¹ wwwÌÌÌ2díÛ·G"‘ÍùóçñôôN26l¨¨4U @‚ LX `À€¸¹¹‰££#Í›7gß¾}X[[Ó£GaTëããÃÕ«WÉÉÉÁØØ˜Ù³gS§Nöïß»»;x{{£©©Éš5kÐÕÕeË–-øúúòôéSªV­Š‹‹ ëÖ­ãÒ¥K())±`ÁvíÚÅ‘#GpwwçåË—´nÝš‰'¢§§‡‹‹ .\ K—.œ8q‚5kÖ°`Á IKK#<<œqãÆÌ¥K—èÑ£$&&2iÒ$âââ(_¾<-Z´`ñâÅ?~œmÛ¶åjsss8ÀÌ™3|®ýû÷“œœ,Æ¢¯¯ÏúõëñõõÅ‚3gÎP£F Ö¯__f“—KKKK233 §jÕª¬^½ZTkjiiáççÇùóçÑÑÑ¡fÍš:tˆ¿þú‹¾}ûbdd$f›6mÊ©S§ O§NâÔ©S\»v ~úé'rrr8p <@UU•ãÇÓ©S§BãZ·n½zõâüùó´oß777>Lppp‘Ûÿ#FŒ`ìØ±@~©»§§'>>>béòŸµü£@ ŠŸ2`ÉùÉr‰‹‹ãñãÇLš4 333¤R)ööö$$$`ooÏÁƒ™3gŽØVII‰^½z±{÷nþþûoš6mÊÖ­[™8q";wb€:tàâÅ‹ôìÙ“îÝ»sîÜ9V¬X mÛ¶eæÌ™hii1mÚ4®_¿ÎÓ§Oyýú5S¦LAII‰˜˜$ cÇŽeáÂ…8;;3cÆ ¢££9|ø0S¦L!''‡¹sçR­Z5¼¼¼Ø´i={ö¤y󿍫«£­­ƒƒzzz¢­fÍšœ9s'''úöíË?þÈÌ™3ÑÐÐÀÑÑ‘ëׯ‹²åŽ;ròäIi×®]iþéÊ L™2寷oßžöíÛ‹ç666ØØØÐ±cG¹m{÷î-g®­­ÐX’1}úôWùòåéß¿?ýû÷m2- !%%…M›6qõêUQÉõ>222ä”Þ!ÙóÁƒ=zT®=&&æ£ÇU¹¹¹øûûËͨ}khii}’ÔGzzº\¾‚ÿŽ’’½VV¹¹¹Å8"ÅŠŠJ™(~(“VXXÕ«Wž^¡¡¡Ô¨QƒÅ‹#•J‰ŽŽÆÃà  RSSÉÍÍ37aaaÔ®]›É“'súôi _øSKK‹*UªàææÆÉ“'7nêêêBXÐÜÜœ–-[2bÄ*T¨€££#¹¹¹¨¨¨Jff&‘‘‘4mÚTØDxzzˆå¡ÜÜ\,,,èׯ¾¾¾T¬XîÝ»ÇÑ£G çíÛ·@þ…¶Zµj$''Ó¶m[Z·n-Ư®®N­ZµX¸p!êêê̘1‰D‚šš¡¡¡dggóðáC1Þ;vù98 ¾²³³Ù±c^^^lp|éÒ%QÅ(#%%…'Ož$×^Ü‚™§NbÑ¢Eèëëëq¿$bbb8yò¤œÇáaæÌ™œ?¾˜Gõí±jÕ*a­ö_¸té“&MRXe Ö®][ÚÃ({Vbb"ÉÉÉ¢z$))‰ÄÄD $"Ò 6p÷î]:„··7Ë—/§~ýú¤¤¤ÀÀÿ?V¿~}rss…²°››Û¶m£{÷îrþ‡—­©©‰’’^^^dffÒ®];"""ÈÉÉ‘3T–Yû´hÑ‚°°0òòòÄ2Txx8&&&¤¥¥±|ùrÚ´iƒ««+ŽŽŽ\½z•zõêAnn®œØiXXõêÕC*•’““ƒ††***øøøžžN»ví„O¢¬ò&,, j×®ý¹þ, Ê ÊÊÊÌž=›_~ù…‹/âééÉßÿýÞ`ËÆÆ¦gåìÙ³iÚ´) ,kß¾};Û·o/¶ñfdd`bbÂÝ»w‹í˜_‰„ŒŒŒÞ?!!Õ«Wš=UðátéÒ…øøøÚ÷Ñ£Gb5DAÙÄÛÛû£+²‹›2`É‚Y®È?ŸC~5Vrr2S¦L!55È¢þ,Éòo´´´=z4™™™T®\™ÄÄD±|†––ÚÚÚ <'''z÷îMbb";wfðàÁb6LvlÙ¾ÚÚÚhkk‹ebccyõê•° ÈÉÉáòåËØÛÛóðáCªW¯.ŸUTTpssãúõë,Z´ˆ„„±D5xð`þüóO1ssslmmñöö–ûL>>xxxˆïCA¢££Kzˆ ŠuuõBZ >œO]:ªP¡‚PïWPö(êw¯´(s–±±1nnnb6¦^½z¸¹¹Éù§-Z´ˆÀÀ@ôôôPRR¢s¸¹¹‰Ü­É“'  Å‹²²2fffT®\{{{± €••?þø#wïÞ¥Fb™ä‡~ÀÍÍF‰míííQUU C‡S¿~}ÒÓÓqssÃÀÀuuuÜÝÝ…õÆãÇEŘ––žžž„‡‡S¥JTUUqss•Œ½zõ¢C‡ܾ}[n,ßÿ=nnn"wç÷ß¶"ß:›6m"00eË–¡¡¡Á½{÷X¿~=}ûöÅÒÒ²TÆÊíÛ·éÞ½»ð¤,.~øá „‹‹ }úô¡oß¾ 4ˆAƒ…‡‡ÞÞÞâŽýÚµk¼yó†Š+ë8(P @|x¡öŒŒ <==™8q"d÷îݤ¥¥‰ÙT (PðùPX ¾d³Uìß¿_XÈÈ–]¯_¿ÎªU«hÕª•ЬªX±" <}úkkkV®\ÉèÑ£E5è7˜={6–––ôéÓ‡µk×’››Ë©S§èÝ»7qqq#•Jiذ!ÇŽ£eË–œ={SSS*T¨@NN]ºt¡G¤¦¦âããÃÛ·o6l˜¨v ã_½z5“'OþO£¶¶¶hii½óõdz~ýzúôéÜ9sHHHøŸ®‚/ääd’’’äÚ^¼xÁ«W¯äÚâããIKKÏsrrˆ‹‹#33S´½}û–øøx9I‚7oÞ:wRRR õ™˜˜(×g^^ñññ¤§§‹¶¬¬,âââätÑÒÓÓ‰—3$ýú5ÏŸ?/ô>eN2ž?Îëׯ)-^¾|ÉêÕ«å* ###Y¶l™œù7prrâÒ¥K¢ÍÃÃeË–É%hïÞ½›åË—‹Ô‚ÌÌL\]]qqq•¨III¬\¹RHõ@~qײeËäLÓ¯^½Š““W¯^m'OždÙ²eDDDˆ¶íÛ·³bÅ RRR€üsÀÅÅWWWñwzþü9+W®dÏž=b¿ÐÐP–-[†‡‡‡h»téNNNr²0GeÙ²eDFFж-[¶°råJñ·KKKÃÙÙ™õë׋Šè¸¸8V¬XÁþýûßó({(,_ ²eìØ± 2DT|6oÞœœœìííÉÎÎæéÓ§ØÚÚùùk²ý¬¬¬Ä±6lH¹råøõ×_ ÃÅÅÈ¿P¨««ãëëK@@ׯ_çСC$%%áééɹsçøá‡X¶l±±±Ü¹s@,ËÉ.&L €+W®àëë‹••(++Ó«W¯ÿüÞÕÕÕ3fÌ{·©T©#FŒ`Ê”)Ešñ*ø²yñâ:::èêê ‹§7n ­­M:uĹ·sçNôôôèÑ£‡ØwΜ9èëëˉåöë×===6lØ Ú4h@µjÕ¸pá±ÕÕÕEOOOR\ºt ¹ŠëM›6¡§§Gß¾}E›ƒƒúúúÌž=[´õìÙ===9yºu뢫«Ëµk×xúô):::èëë‹ ËÏÏ]]ÝBæÐ%‰¿¿?¿þú«¨òˆŠŠÂËË‹¿þúK´ãåå%'Wråʼ¼¼xøð¡hóóóÃÇÇG|®oß¾ÅËË ‘ÚðâÅ <==åă=z„———/_m÷îÝÃËËKNëîòåËxyyÉ;gÏžÅÇÇG´iiixyyáíí-òçÏŸãá៟ŸØ/""///¹îÎ;x{{,Úþúë/¼¼¼„ˆq^^ÞÞÞøøø¡äׯ_ãé鉷··ÐŒÇÃÀ€ ÿ†QöZY¦Ì%¹+Pð±R¡B!_Q0ÿJæÑwåÊ,,,ˆŒŒ¤|ùòÔ¯__Ü]̹’U›^½z•9sæˆÊÔI“&qâÄ ºwïN5 Âßߟ¥K—âîîN:u¸ÿ>  zõê#‘H:t(ÞÞÞlÞ¼™îÝ»ãêêÊ¥K—HHH qãÆtîÜ™ÀÀ@4hðѾ„ÖÖÖ8p@\\ bddÄÊ•+©Q£ÆGûs‘““ƒ³³3—/_FUU•©S§Ò¦Mz÷î-¤Q>†OÝÿK¤jÕªÄÄÄ •J…èð÷ßÏãÇ)_¾¼ÈK1bææær3žK–,ÁÞÞ^®xæàÁƒ$%%Éݹs‡´´4QУ££#Ü,ªU«@»v툉‰‘«T;v,=zô jÕª¢mÅŠ8::Ê8q‚ääd9¥õÞ¾}+ÎÝ5jðøñc”””DUnçÎ‰ŽŽÕá³gÏfòäÉE6}.TTT¨S§ŽœÁ»……E¡\Ê‘#G2räH¹¶?þø£Ðñ ÎJA~ÁÓ™3gäÚêÕ«'ètïÞîݻ˵;VXjÉprr*Ô§,eB†¬Ò½ ¦¦¦øûû˵ýÓíò+'Mš$×¶zõj¹ç‰„C‡ɵU«VM.H033ãܹsâùСC;v,£G.ôÊ_l€%¢xŸUUU9™Œ²Êºuëä,úôéCÓ¦MiÞ¼9R©”›7oò×_ѼysâããÉÉÉAII‰жm[á5(cÛ¶m$$$ЪU+ÑÖ¡C  33“æÍ›c``€¡¡!æææ¤¦¦Ò²eK¡Ôݼysâââ ?ö^^^„„„pçÎjÔ¨!Tü7nÜøI2JJJL˜0ß~ûM®]"‘о}û2\Aþ’Abb"‡"==]ÌH¸¹¹ùwè*T <<ccc”•• s2'‡gÏža`` ‚Ó‚¿ 999DGGS§N’ƒ%Ì?+BöR©TNÜò+³ÿ)T\©R%á¦!CKK«ÐRtQÿ l””” õY®\¹B}V®\YI2 e2Šr(”mܸ ‹ °zöìùI6H >œ *ÈÉ+•UÊþ‹àŽú÷ô IDATÉ“' >ü›¶Ü(IâããY³fÜ OYäŸ>ŒuëÖ•³{ÑÒÒË€/:õë×/2€455-tA¾ÍQÏž=åÚtuuß¹´§««[hI®Aƒ…ªùŠ#ù¼sçÎìÝ»WLË«©©ñû￳|ùr’’’øõ×_Ë” mvv6DFFR·n]*T¨äßåð믿òâÅ ŒŒŒ¸zõ*M›6EMMˆˆŽ;Æ©S§X½z5?þø#ÁÁÁ,^¼Xî< `ëÖ­î]»Jë­~vrssñõõý( ˜¯ ‡•J¥èèè”hŸß*'Nœ6we™/2ÀJKK£|ùòÅnF« hZ¶l©˜-ü‚˜GGG9鋲Š"ÀR à+ä»ï¾cæÌ™…Ú+T¨Àš5k033cܸqBF¢´¨Y³&^^^¬X±ccc1fYuPŸ>}D’sÁÇýúõmllØ·omÛ¶ûÉþwtt¤U«VüïÿÃÏÏï‹ÈÛ(«ôë×qãÆ‰çÑÑÑ4lØ-[¶¼w¿Õ«W—¸>ÕÅ‹K<…ÄÜÜ\NÛª´¹{÷.5kÖdÛ¶m¢mæÌ™Ô¨QCH"E\\Ü¿J¾”6õêÕ+² £¬¡¸ÕQ à+å]•ŸÊÊÊ,\¸ÿû¿ÿcÊ”)|÷Ýw%<²ÿOýúõ…UPAdRÁ©‚­­­Åc~þùç"÷—H$têÔé?‰¶~©¤§§³nݺ"ëO%++‹   9/Õ¹s碤¤$WEVV–5yþü9nnnØØØ¦¦&ÑÑÑÄÇÇcfföÙÞ7*zùÖ ¤GÜ»wÈ—»ˆˆˆ zõê¢ò3""‚3gÎP¯^=QáììLdd$;vì oß¾$&&âáኊ ={ö,TùYìÞ½»´‡ðA(f°(øF™8q"Ó§O'$$„Û·o—xÿYYY„††ú÷âÅ‹BÚ>ï¢S§Nr±ÿäðáÃtœ'OžÈ‰$þsÿK—.÷AÇ*-¢££™5kÖg`¼ÿ>¦¦¦hiiñòåK.\¸@åÊ•ÉÉÉN 'NdÖ¬Y8;;3lØ0¶nÝŠD"aÆ ܾ}›‹/²|ùrΜ9C³fÍxòäI±`РAr:\%ÁóçÏqww/Ñ>ßG`` #FŒųgÏÆÖÖVˆ±Þ¸q;;;j×®¿¿?þù'YYY<~ü˜6mÚ §§‡ºº:wîÜ¡Q£Fèééѯ_?9eïG`)Pð cccCÆ ¹téóæÍ“³(ùܼ~ýš;v°cÇÚµk'?}úôƒ/Tºººï•kY·nÝ'<<¼¸aÁý_¿~-géRÑ××ÇÚÚ•b?öÍ›7iÖ¬fffܹs‡ 0wî\Þ¼yCµjÕ8tèìÚµ‹U«VO\\fffôéÓ''',,,èСË—/§[·n˜››ù™%yËð÷÷gΜ9%Þï» ¤M›6deeqòäIŒyõꕈííí2djjjüøãœ9suuu222°µµ¥G”+WŽöíÛǽ{÷HNN–³;*-víÚ%gñSVQ,*øbxøð! .,ía” Zo|*U«V¥ÿþ¸»»óìÙ3Ö¯__"¹JZZZ¢jðøñãâqxx8©©©üòË/dff2wî\jÖ¬‰““Õ«WçܹslÙ²…£GâááAïÞ½éß¿?/_¾déÒ¥DGGÓ®];&Ož ä/]¸pñãÇÓ±cG222ؽ{7ÿý7Æ +´|xïÞ=\\\ä¬^dÖ£Gðóó#00uuuæÎ‹ŽŽaaa8;;£««‹ªªj!±×’@CCã³%þÒ­[7Þ¼yÃÌ™34h  ß×.++‹ &ù¹uåÊ•ãÖ­[4kÖLg̘1”/_žï¾ûŽK—.1hРÏ2^cccöîÝ[Hòãsbll\Hµ½´ÈÉÉáÉ“'P»vmæÍ›ÇÅ‹™1c½zõ"==7oÞP¡B13+S“ çþõë×ùý÷ß™>}:ìÝ»W®p¦´pss#--­TÓ>„°¢¢¢ptt”«P()rrrÈÌÌ,RAXAñóúõk–.]ÊŠ+D[^^åÊ•+Tµ5dȆ^ìchß¾=wîÜ‘óÜ*MRSS‘J¥¥ª'UÐ×íSÑÓÓÃËË‹2`À9#×ÒàâÅ‹\ºt‰Û·o³nÝ:œœœ8}ú4¶¶¶lÞ¼™ƒòäÉ6n܈ƒƒõë×çâÅ‹|ÿý÷899 ³ÚçÏŸ£¯¯ÏÚµkéׯ.\`çÎ$''³fÍ $HA¾Ž˜»»;W®\‰Ò7oÞJá...øúúâååÅŽ;˜9s&S¦LaëÖ­$$$СC‡R °>'Ìž=›¬¬,<==™:u*[¶l³!JJJŒ;–Ž;ù¿‰„   aÛrãÆ ÒÒÒØºu+OŸ>eîܹbÿâ&%%…—/_~–c¿‹¦M›Ê%”—&aaa"sòäÉdeeQ¹renݺżyó(W®R©”.]ºP³fM^¼xšš¹¹¹dee‘››‹’’{öìa„ ˜››óË/¿ÈË¥I¯^½¾=»°ÂÃÃÉÈÈ`óæÍÅ9_0»wïææÍ›Ÿ%ÀªS§«V­*öã~,³fÍÂÐÐ{{ûÒJ±Q§N¼½½2d––– 8°ÔÆÒ©S'jÕª…†††X¦“J¥üôÓO(++sôèQ*T¨À´iÓHHHàï¿ÿ¦S§NØÛÛsæÌ¦OŸN•*U¨R¥ŠÈÑ’J¥dddàé鉫«+•+WÆÊÊ ooo‘¸Œ±±±0&^°`A¡±uïÞ===:vìÈo¿ýÆ‹/PWW§V­ZÔªU«Ôîª_¾|‰ƒƒ[¶l¾ƒÅAÁÙ@ß·nÝ¢OŸ>@þr“ƒƒ5jÔ --!C†`kkKŸ>}˜>}:Ý»wgÚ´i„……1`À*V¬ˆ¡¡a![œâÂÇÇç£$?¾Ä X›6mD»°ZµjÓ¦MãÍ›7hjj²iÓ&¤R)¿üò ýúõcÖ¬YŒ7GGGöìÙCëÖ­Ë̤ƼyóJ{Ä'-ª««ËUó(ø¶¹rå Ïž=+ía(ø´µµ9uêcÆŒaíÚµ¥fý!S"—H$"ŸF*• ç¦M›Ò®];ÌÍÍåöóóó#,,ŒÑ£Gó÷ßËå#I¥Rrss155åáÇԬY“‡2hÐ ÒÒÒ€|QÓØØX ß"ª(yÙ1eÇ«Zµ*¯_¿&//ÔÔT¡/–MVVV‰Ír>{öŒmÛ¶±~ýúbUºVRR*Ò@|Ó¦MâqË–-¹xñb¡m†ÊСCÅs™û禤mr ¿"oÿþýeââonn^è»päÈñ¸[·nEÚ*M˜0A,õŸ-Oî[@‘ä®@9ÔÕÕÙ½{7¦¦¦•øøxzöìɵk×PRR*Õ±”6AAA…‚o_#GŽ,í!|ß|€•››ËíÛ·QQQIš§OŸæèÑ£´hÑÈ/{õóóãåË—˜˜˜`aaA•*UHLLäôéÓ4mÚ”[·n¡¡¡AŸ>}PQQáÞ½{ܼy“V­ZáççÇ÷ß/WÑqùòe®_¿NÆ 177GYY™ÈÈHΟ?OÛ¶m¹rå FFFtèСä? бcG<<<„þQqiáÄÇÇS­Z5–,Y‚‹‹ ëׯgΜ9DFFÒ¢E ¦L™ä/ѯ_?Qõ>AÍsçÎ1yòdÐÖÖfåÊ•@~ò¼½½=ÖÖÖ,]º”ØØØbM/MRRR $++ë›°J#¸ºyó&ÎÎÎ_Œ‹‚ÏÏ7Ÿä*ÊŠ¸~ý:“&Mx2– 6pþüy‚‚‚°µµeüøñøúúbggG×®]quu¥ÿþ8::àêꊽzõÂÕÕ•¶mÛrüøq ?I·{÷î\¼x‘þýû3vìXöîÝ‹]ºtaáÂ…eÞžCÁ·C£Fðññ!""¢Xß•••©T©¦¦¦r½IIIDEEñäÉ!;’’B\\qqq¬¬þêÕ+¢¢¢ˆŠŠB"‘M`` /^¼ zõê"-àK§^½z8pà« ?…óçÏË ÷Q¬À ÞÍÈ‘#ñòò*íaü+ßü –¬l¸ÿþ\¸pR£F Ú´iÃÞ½{E€5}út._¾LPPzzz¢‚A¶ÿƱ±±ÁÀÀ@”µ¢¦¦ÆßÿÍ›7o¨W¯^^^dee±}ûvú÷ïOïÞ½‰ÇÝÝÍ›7‹ãmÚ´‰=z”ôÇQâܸqÿ/b=]A¾B·———¸!(Nœ8Á­[·xðà×®]í—/_&==J•*±xñb v9$$ÈPüÍ©{÷î±aÃV®\ɲeËØ¼y3Ý»wÇÀÀ€Í›7pµ`YF*•2xðàÒF™ÀÚÚšƒ¾·š´¸éÚµëg±)RP˜ˆˆ¢¢¢J{ÿÊ7?ƒ% hš5kFçΉeÓ¦Mܽ{ÈŸÁº{÷.FFF=z”J•*C£FÄþªªªôêÕ‹W¯^ñìÙ3jÔ¨!Üçe¦™aaa@þJv—£¦¦F@@uëÖeÔ¨Q¨¨¨H³f;êà*-- '''LMMiÙ²¥"Wâ CCC]]Ýb;^ß¾}ñ÷÷ÇÞÞ^N »_¿~8;;‹à òg~qvvþ`AÏŽ;Š}”••ÑÒÒböìÙܸqƒF‰JÀ¯ìììBm\¿~]<Ÿvpp0û÷ïÿ,c+Iêׯ_âÅIZZZØØØ”hŸß*+W®ü">ëo>Àºyó&U«VÅÀÀ€)S¦pøða7nÌ­[·022BSS“Ý»w“——GïÞ½yüø1¹¹¹Â2àÖ­[dffâììÌÀÉÎÎfêÔ©“‘‘App0®®®888P©R%ìììD9¸Ç§qãÆtëÖ¤¤$¢££iݺui~$Ÿ…ôôt<<<àÈ‘#Ì;— øé§ŸJ{x ʳfÍâøñã¼xñâÛDFFrûömnß¾MBBðÿ=Ô>”ýû÷ʃ¸sçÎa¹ñ!<~ümmíBA–««+cÆŒKª2‰¢Ð××/Qÿ¾ÏÅÕ«WKåïZ&Óß"mÛ¶-Ö›¼ÏÅ7¿DX¥J† ä«ÿÊ€«V­J—.]€üŠÂÛ·o³sçNzõêEÇŽ±°° ::š¤¤$ƌÅ HIIaÇŽX[[³}ûv _€pÏž=²gÏjÔ¨žž+V¬àäÉ“œ>}SSSúôéÓ'OèØ±£ðîúÒÉÍÍåæÍ›xzzrîܹ"]Ø;v쨘Vÿ†122ç»’’kÖ¬!::š¦M›:_:vìȹsçDc—.]PRR’[V”1jÔ(ÔÕÕ©]»v¡ÙàjÕª±yófTTT˜eØe###îß¿/l† òóÏ?3dÈñ¹ìÚµ‹^½zammÍäÉ“ äíÛ·¤¤¤ðìÙ3¢¢¢8xð Ð [½z5  mÛ¶899qíÚµ2+ô¸qãFˆ––V‰õ™œœLrrr‰õ÷-Ó»woÆŒ#gÃTùæ¬O!##ƒîÝ»¹¤W¾|y\j^n¥Azz:¡¡¡ØÙÙ}ð>‹/–˱)ɤÔO¥nݺ¥=„ožOß: 4(²]UU•ŸþWWWÑvõêU† äç ^½zUä–êëëcmm¥¥%&&&¬[·ŽóçÏÉîÝ»ÉÉÉ¡Y³f,_¾œË—/Ó«W/Æ÷ùßà2{öl K4—µW¯^Ô¯_¿Äúû–ÉÊÊ"55µ´‡ñ¯(¬O`È!âêŸ´ÖøVPWWÇØØ˜.]ºàïïÏ7ÈÌÌ|ï>ŽŽŽŒ;–k×®1vìXöìÙSB£ýtÉù Ê!!!ï ²FŒAÇŽÅl±……gÏžÅÎÎæÏŸ/òÚÒÒÒ5jcÆŒaìØ±Ü¿Ÿ^½z¡­­­­-¹¹¹¤¥¥•ÙtkkkêÕ«W¢}–+WŽÆ—hŸß*»víú"V–‚bE"‘лwoz÷îMjj*~~~xzzrûöí"@_¼x‰‰ qqqH$ÅŒ„Ixx87&==].¯±I“&¨ªª"•Jùõ×_Y¿~=¯%´råJ† B·nÝ066&33“ÚµkóôéS~ûí7TUU144ÄÌÌŒºuë²~ýz±,óûï¿Ó°aÃRy¯ÿÆŽ;J¼Ï¼¼<âââÐ××/ôZnn.¯^½ò휤Òüú²øøxJ40ËÉÉ!**ŠªU«R¥J•>΃(W®rí¾¾¾"ùc m¿/7÷K¹N(,Ÿ *`ee…••±±±xzz²ÿ~q péÒ¥w½W àk¤|ùò¨©©j/hmdii‰¥¥%¡ÿgfãÆÅž -@ÅŠ™={vqû«áäɓ̙3Gè´$&&†ü‘ž={òüùsLMMY¼x1/^¼qIpôèQfÍš………ééé4hЀß~ûí£ŽåééIµjÕ Xÿý÷'Xþù'|ï Á£GÐÓÓ£|ùòÝOIPl2 ÙÙÙŒ9²DÄ¿BBB2dC‡eÑ¢EDFF~ö>ßEAsÏ€€†Š••üñ‡PNKKÃÖÖ–øøø=–¬”zïÞ½b¹,++ë“MD###™:uê;_÷õõ%))é“úxÕ«Wg̘1ôêÕ KKK~þùgªT©Bxx8îî_ ¾jÔ¨ÁóçÏU¹À´iÓˆŽŽ.Ñ>UTTÞkQÔ°aC6lØÀ‘#G8xð ¹¹¹¨¨¨å}gggöìÙôiÓD‘TDDS§NÅÑÑQh™ÅÆÆ²{÷n.\ȶmÛÄŒ$À©S§ *²ÿøøx¦L™ÂÝ»wÙ¼y³è òM~ýõWvîÜ)ªw9vì'NäêÕ«œ>}š)S¦póæMq̈ˆ¦L™ÂÈÉÉ·âÌ™3ØÛÛËiÍEFF²`Á6nÜ(n¶ããã™?>+W®ü î#F|×b °Îœ9Cll¬œP`||<ܾ}›7oÞššÊƒxùò%©©©Ü¸qCü1333å.ðIIIdddÙWBB:::lÛ¶6mÚˆª>Èô \Ož<Ÿ?.Ž™‘‘ÁÍ›7Åó¤¤$ÅIùeÌ©©©Ü¿ÿï[&×áÂ~ûí78qâíÚµ%‡&!!á_ó‹ž?.JÎOœ8ÁÉ“'|µóçÏŸ“——GPPOŸ>û<{öL<~ûö­\KDD„X–“åLÈHKKÇÉÊÊbóæÍܼyó_ƒÀâ@GG‡ 6Ç¡C‡„Ø« >²~G_Rìܹ³È™¤Ï‰¥¥å{­rBBB˜>}:}ûöeĈH¥Rbbb¸|ù2+V¬ \¹rLŸ>éÓ§ù«üñsçÎeÑ¢Edff’˜˜È¬Y³°±±ÁÖÖ///ž={F^^üñ‡\UnA®\¹B‡äΑŠ+òöí[FŽÉøñãÉÍÍeÁ‚@~žSBB³fÍbРADFF2cÆ 16È¿1Ÿ;w.ÁÁÁìܹ@Sþþþœ>}šyóæ±gÏ"##IMMeüøñL˜0Zµj1oÞ< ß,ÝÚÚšÖ­[ W¥J•Šœ­-k[€µcǶoߎ¯¯¯ˆ@‡ †žžž8p€=z°iÓ&âââX¾|9çÏŸgĈøúú’••…µµµ8^¿~ýÞ› ššJ\\Ïž=CSSÈ?úõ뇛›$//7²cÇ>|ˆ­­-R©”`kk‹¿¿?ûöí#//ùóçãççGïÞ½yøð!ÿ…3fŒø¼777¦NJË–-‘H$tîÜY¬ÅËf£d²ïÂÜÜœsçΑ‘‘ªª*jjj¼}û–sçÎaaaÁ¡C‡8}ú4«W¯fÖ¬Y@¾]ˆ, \»v-^^^ÄÇÇ3tèPvïÞM¿~ýˆ•ëgóæÍ8::âììÌüùóyùò%=B %…šš `ÅŠ%Ö§_+999œ:uªÔúþ˜Õ‹ŒŒ ¹›àââ×_6g%…D"yoNS:u˜3g¿ÿþ;§OŸ&%%Eîu]]] €‘‘yyydeeñòåK~ûí7æÌ™Cll¬¸·°° I“&”+WŽ &°yóf|}}iÓ¦Í;Ø¥Ri‘þtíÚ•Úµk3jÔ(à())1fÌŒŒŒ¨V­ãÆÃÐÐuuu!§Ó¿ªW¯ÎÏ?ÿ\ä¹7jÔ(ôôôèÔ©7nÜÀÃÃÔÔT-ZÄÉ“'¹qã/^¼@YY™æÍ›Ó¾}ûZ.=}ú4¶¶¶ÿº]iS,Ö³gÏÈÎΦV­ZtèÐ???ñÚܹs™;w.¯c³råJŒ™6mõêÕ£y󿏻»S¡BÌÌ̸ví7oÞÄØØø½&¬·nÝÂÅÅ…åámÛ¶±téRV¬XAÍš5¹~ý: .dÿþýŒ=Zˆ þßÿýûöícæÌ™ØÙÙ!‘H˜;w.|÷ÝwbæèÍ›7lÚ´éƒÊ?~Ì÷ß_¨=<<---ôôôhÔ¨Q‘¢ˆ2dBŠW¯^å‡~ uëÖ\¹r…sçÎann޵µ5:tÀØØ???rss5j”po?~ü8ÖÖÖìß¿Ÿ–-[biiÉ?þÈ‘#GDyyyìÞ½›Q£FÑ¿þúë/*V¬ˆ™™cÇŽUx™)Pð…Ž••U¡™[[[¡wµvíÚ:Ö;wØ·oß÷œœÌÌ™3?hÛ}ûö +²¸¸¸ÿÔχ2kÖ¬WúNKKãâÅ‹ï|]MM ===Z¶l‰®®n¡€´àŒŒD"!//WWW~þùg¶lÙ‚¶¶¶øÛb% IDAT¼6ZZZâççǺuë„lnnn!­¾6mÚpõêU¹•¢ÄÄDŒÅ¤ÂóçÏ©Y³&`)++‹Ç²¥L%%%±Ò#{QQQzÏÿÜÇÔÔ”&Mš°aÃ6lØÀÅ‹ÑÔÔK…yyyÂð]d…l\ebåÎ;yòä ÖÖÖ$''#ôŒ – Ëçää0`Àf̘AóæÍ¹pá/ʹfÍ”””øùçŸßÛ§Ì_ ÀÔÔ”‘#GòôéSQº©««Ë“'OhÕªÚÚÚDFFR­Z5òòòHOO—;™°³³cÖ¬Y4hÐ@œl5jÔ råÊôÔ¯_ŸóçÏÒFÚ¶m>ÄÚÚš„„¶mÛöNccâââðööfðàÁH¥RöíÛ'NúiӦѠAZ´hAFFéééôìÙ“eË–aiiI£FPWW'22 ¨ZµªÜ‰Ÿ––FJJŠðF5jÔ¿J)(P  ì£­­MÓ¦M å%''³}ûvôôôhß¾=ƒ BWW///$ =zô@"‘àåå…¤¤¤põêU233:t(B’ÁËË‹=zpíÚ5*V¬ˆ¯¯/VVV@þMžD"ÁÊÊ ‰DBpp0ÞÞÞÔ­[KKKrss9pà&&&´k×sss~üñG ?(8sæ jjjtíÚ‰DB@@úúúøúúÒ³gÏw.•NŸ>ÍܹsÅõãŸbmmD"¡nݺ4mÚTn2¢(,,,˜7oêêêïÔ}’J¥XYYqúôiquwwçÖ­[,_¾\l§­­Í¶mÛhÛ¶-7&;;›víÚ1cÆ jÖ¬ÉðáÃIMM•K¹ù7nß¾ÍèÑ£INNþ •ˆ† ¢««‹åË—§jÕªüñÇØÚÚ2hÐ òòò„8ì;w˜7o^‘3cçΣAƒèéé}ðXKƒb °:ÄåË—…âo›6mÄôgQRö²éÅFÉ ß™ššKZZ-Z´àìÙ³TªT©˜çóçϹ}û6÷îÝ£bÅŠ”/_+++V¯^ÍðáÃ9yò$gÏžeëÖ­Ô®]›‘#G2}út6nÜHË–-Ù¸q#666¼xñ‚ÔÔTªU«FݺuÙ¸qc¡ªÈ¿Ó:uêÔ;g³fΜÉðáÃQQQ¡C‡œ9sKKK¼¼¼¸qã†øÑkÞ¼9éééxzzbll\¨Ìù‡~ààÁƒÂ/ìðáû022’Ÿ~ú‰Ç‹/±²²2mÚ´ÁÞÞž5kÖ0|øpV¯^¹¹¹rw´²™ÂJ•*annN`` •+W¢¶¶6•+Wfýúõ…”æ]\\°³³CII‰7âààÀµk×HNN.³z8 |+hkk‹äè¢xõꕸ¹2d ==éÓ§ãââÂÿcï¼ãrÜÿ?þ¬»©Ò J²2R6GfF„r”²7qì¯}Žuì½"3[’óB„de'’ÝÖýû£Ç}ý\Ýe¶p=ÝŸk|>×ÕÝ}¿¯Ïçý~½fÍšE•*Uèܹ3)RTUU™3gŽð7>{ölœœœØ²e >dذa¨©© Aлwï6lK—.åÙ³gÔ¯_Ÿððp¼¼¼X´hE‹Å‚R¥JñôéS6nÜH:uèÒ¥ Í›7çýû÷ìܹ“uëÖ±bÅ ŒŒŒhÛ¶-nnn\¸pA8øM›6eÑ¢E‚pj^`jjš­|€••U–ù­ŽŽŽ8::). Ëtnnn8;;#“ÉD ý«W¯çÅ‹Œ9RxžåwUóæÍ¹yó&/_¾¤páÂBAļyóxÿþ½ðžyœáÇ'šQS·råJ¡M‘LÞ¡)))ÄÅÅ ÁÔàÁƒñôôDSSSø® Y;}ÌøñãñôôüìDL~óÝÖ«W¯ðòòýb¦M›Æ³gÏèÞ½»ðÇP­Z5á—i``À¸qãX¼x1...ØÙÙ ÇÖ¯__dopàÀºwï.êÓÊÊŠ²e˲ÿ~Ê•+‡¿¿?ýúõ# €;w²mÛ6 *Dbb"Ó§OG&“ñâÅ ^¼xÁ¢E‹ðóócúôé´oßžFÑ¢E V¬XÁàÁƒ…ž={ }^¿~=˪”Ááîݻټy3çÏŸ§~ýúhhh0qâDÑ¥âÞìÞ½;KÓÕþýûÓ A!08q¢„-Z´ˆuëÖammͺuë„?¸ÁƒS¤HêÕ«@Íš5ùßÿþÇÚµkQQQ¡W¯^‡Àºuë8pà“&MÂÖÖ–¦M›Ò¯_?öîÝK`` 5jÔ ""Bilzzz¨¨¨ ªªŠ®®.¡­˜–(˜xzzbddÄĉ‰‹‹#22RÈÝP¤H–,Y"T/gELL S§NeäÈ‘‚Фšš‡-Õ®]›Õ«W³ÿ~¡MSS“*Uª0eÊÆŒCÆ ³] |ûöíg+È\\\ò\²"&&†M›6åØù’““E¢Ì âãã¿*o67õ ¿v oß¾Ò?;*Àª^½ú'•KHHHHü?ææætêÔI”«0wî\¥å˜+VЭ[7är¹à§ª(‚ŒY£ÿý—råÊ!“ÉØ±cåË—gôèÑ‚ÞѰaÄYx}}}Ž;FÛ¶méÞ½»0‹¶gÏŠ/ÎØ±cÙµkQõ¶xñbÌÍͱ´´r‡–,Y‚››½{÷fß§N*<Ø6 ®_¿ž­ß¢‚ÌtyÁÉ“'•V0DGGSµjU‚ƒƒ…¶N:}r)ïĉÌ›7€ í«V­ââÅ‹JûGFFÒ®];7nL›6mðõõ%55—o½¤O²iÓ&:vìH‡D+9™IOOVnf̘ÁljŒŒü.I‘uëÖ …Z™£ÖQBBBBâ“èééáëë«Ôž]ÎR™2e(S¦Œð:ór¿¾¾¾h™M1뮘ÝþøXuuua ðc´µµqvvÄþq%J”Îó±)sæ±~|NEeË–¥jÕªY^“‚råʱmÛ6¥â¨Ü¤bÅŠ899e¹-99 Ö®]K½zõˆˆˆ **JÐp<}ú´PM**~ºuëëׯÇÚÚ[[[œ166?)) ggg¼½½qpp@.—+GéÒ¥122Rš»xñ"ááᘙ™‘ðÙªºÒ¥K³{÷nîÞ½ËéÓ§IIIA__Ÿÿþû;;;š5k&è+†‡‡Ó±cÇl —UUU Â××—Q£F¡¥¥ÅîÝ»Œ‚±N:QªT)¶mÛ¦T¤EXÑÑÑÙÎø}Ž%±ÿ›¬"EŠðäÉ“o.í”ø9iݺu~ABâ—$&&†mÛ¶áíí­´äòáî]»†ªª*vvvŸ4%þaaaèé鉕ÓÓÓÙ¿?íÚµû¦s~øð£GæègGVË•¹ÍíÛ·Ù°a³fÍÊvŸV­ZQ¾|y&Nœ(j×ÔÔ$5555µ,õ²² ˜µµµ100@GG‡òåË3xð`ÒÓÓ³-øã?˜={6åÊ•£\¹r$%%1`Àš5kÆÎ;ñööfçÎ?~œÃ‡ãææÆêÕ«³•ºÐÑÑ¡OŸ>ôéÓ‡†  ²Šü·ÔÔÔlÇUUU?)ÿñ³ðÍVµjÕØ¾}{–†Ì+W®¤Y³f¢5ú9zô(*TøæJµG1kÖ¬OkJä]»v¥Y³f‚øë§ÈNhOBB"w±¶¶föìÙJ&¸aaatëÖMȉùû￳ÌÕúNŸ>………(À’Ëå"醯åýû÷x{{çh€I©R¥¾9ü.]º„¯¯ï',555BCCÑÕÕ%ª7mڔɓ' ™)Z´(K—.¥I“&B[¥J•D¹Z^^^888Ð¥KÞ¿Ï«W¯˜1c†°]EE…   Ö¯_ÏÛ·oŒ\&###Š)‚¾¾>‘‘‘:tˆÒ¥K£¯¯ŽŽøøøˆTá=zÄÌ™3qpp ::šÔÔTAeçÎèêê²k×®,å~ CÇjÔ¨QXYYÑ¥K¦M›F·nݾX·l„ 8;; Ú•ïZ"ÌîËôÖ­[¸ººR®\¹,·9’»wïŠ*#¾™L&i0å… ÂÌÌ,Ûß§„„Dþ£¡¡‘åÒÉ€ðööôõ%þ÷îÝcåÊ•‚a°¹¹9K—.ÅÈÈ???ºwïNjj*»ví¢oß¾‚£DXX{öì¡Q£F‚V "ÀZ¸p!¦¦¦øùùѱcGaVëÈ‘#ìܹ<<\\\ dÔ¨Qüûï¿´lÙ’µk×âääDëÖ­ åСC¬X±‚Å‹ãïïO:uøûï¿Ù¹s'‹/ÎñëÖÖÖÎs‡‰’%Kâåå•å6---%[´Â… ‹d‰2 B %“ɾ(©ÛÚÚZIÀZ1¡©©I«V­”Æœy¢¤aÆ¢×5ÂÌÌL©¯ *(Ée¨©©¡§§§$"®ûÇZáÂ……¤üU«V)ͼ~Š?þøCäSPÉ•ËÐÐ0Û›¥°µILLäüùóyZF+!!!ñ³òìÙ3…YÈøbNII!-- 5µÿÿ¸ECCCXꋉ‰rgºvíŠåË—§S§N ©©),+µk×===ºté‚ ”t–ºu놞žåÊ•ãîÝ»ìÝ»—'Ož0bÄâã㉋‹#>>ž¶mÛR¸paºtéÂ¥K—rô^ܸq#Ï…FV,,,¾xß̹e_Š••ÕWíŸÙ!¥ ’+ÖÖ­[³lOOO' @x­x’‘øùQQQáÑ£G‚5˯JnUø½{÷ŽˆˆRRR„K]]5jpèÐ!!zþü9E‹TÂÓÓÓÑÐÐ0Eb²ªªªèg…½ÂhþîÝ»Y ~*fÈÇØÛÛS¡BÁ§àòåËlÞ¼Yt¾œ$?‚«óçÏ3oÞ¼,•ñ%~Mòt‰044”çÏŸ ¯O:EBB‚ ¡!!!ñóÒ²eK¢¢¢¾Êæãgcøðá"aÍœ¤lÙ²øùù)-­^½-Z„‰‰ zzz¬Y³:vìHjj*C† ùâ~.^¼H—.]HLLdùòåŸÝ¿]»vŒ1‚3gΖ–FË–-qwwgåÊ•téÒ%WT×qppÈÓ@ëÁƒÙÊ.$&&H“&M„eÁ³gÏR¨P¡)NšS¼~ýš“'Oþ4VTTQQQù=ŒÏ’+Ö®]»¨S§Žhíöýû÷Yþ‘ûûûK–„„„D‡žž^~#ß©R¥J–‰Ù¹‰Á'gT ÄËË‹={öàìì,ÌÞ-Y²„‹/¢®®NïÞ½ùí·ßX³f áááDGGciiÉÔ©SÑÔÔ¤[·nhjj’œœÌÀiܸ1111,]º”'Ož`ccÃØ±cùðá3fÌàæÍ›/^<¯nCž°xñbA¢ “+%|6làÞ½{¢¶ãÇg)»ÆÓ§Osc¿ >ÄÌÌ,_ŒŽ §NúbM¥œäS÷^&“Q»vm‚ƒƒÙ»w/íÛ·¶ 2„uëÖ1zôhþþûo £hA.—³{÷nlmmÙ¶mééé}ÊñãÇY»v- àùóç<}ú”³gÏŠŽÿ™ˆÿ!¬Ùò$ëÙ³g„††f»Ýßß_d|YIJJâÍ›7Èd2 ²µÈàýû÷DGGç÷0ò„ïÑôËÊ ã[°²²âÎ;B߯ÌÂ… éÚµ+ÅŠ˳>ãâ∋‹ûä>–––8::Ò®];Aöà¿ÿþ#88˜ˆˆ‘ü©S§èÒ¥ §N¢Q£FDDDK¡B…ˆ‹‹ÃÔÔ”æÍ›S¯^=Z¶lIzz:IIIÈd2N:EóæÍEé9ááᘘ˜P´hѽþ¼¤mÛ¶ôîÝ›®]»æ÷P>I®XkÖ¬Mß|Òw(**Šk×®akk›ÃÉ–.]*r<733cÒ¤I 0à“ǽ{÷ŽÚµkÓ¹sg&Ožœ£cº|ù2;wæÿûݺuËÑsKH|¬ZµŠS§Nå÷P~ŠèßKf‘É_•iÓ¦Q¡B…o6þœ•ÄDhii K–&L2%…;FÏž=騱#ÆÆÆ"UUUÜÜÜ([¶¬ 1U¥JÆŒCRR’ ?räH–/_ΦM›ËåLš4‰¦M›réÒ%ÜÜܨT©’ ò9cÆ ÆŽûCXr¹<ÇLr“\ °2{ *–---±²²"22###tuu‰ŒŒäÅ‹øûûèK1m»oß>îß¿Ïܹs4hvvvÔ­[—Ó§OJjj*ÕªU£Aƒ$''3þ|nÞ¼É7ðññÁÃÃÇsóæMd2µjÕ|ß¼yCPP×®]ÃÈÈgggJ”(Arr2Ü¿ŸÆS¥J¢££Y±b·nÝâòåËhiiý0âk??ÄÍÍ-W ]—-[F§N Ì„‡‡IIIìڵ뛎WQQÁØØ8GÆ‚±±±h¥¦¦rýúuŒ…¤ïÄÄDnß¾¥¥%FFF¼|ù’ÇS®\9AÚàÉ“'¼xñ[[[av.22’””‘þUDDÚÚÚBÒqJJ +V SSS cI'22+++Á*&66–èèhÊ—//,—EEEñêÕ+lmm½°;wî––&r¹œëׯ£§§'¨'''sãÆ LLL(^¼8;vT²wÉm455k›Ì˜˜˜ˆ|!Ã*GaJUE'dÌÔ´lÙRxýþý{ôôôذaƒh?###&Mš¤tüÿþ÷?¥¶ªU«R­ZµÏ_PÆ××Wxïdr}‰0""sss&Ož,D÷#FŒ råÊôéÓ¹\Ή'صk)))véíÒ¥Káêê @BB“&MâÔ©SÔ­[—éÓ§cffÆ‹/3f Ë–-£AƒB©ò7xõênnnüùçŸØØØÉÈ‘#  E‹´lÙ’¸¸8jÔ¨Áõë×±´´DCC'''^½z…½½=#FŒ`Ë–-.\X(£&>>^ °$ 94|Œ\.gÆ ÄÇÇ——iNñáî\¹BZZšššèëëçÛXnß¾M:u044äéÓ§hjjâç燻»;5kÖäüùóÌ›7)S¦àééÉúõëèß¿?{öìaþüù‚?^óæÍ¹q㇦E‹¼}û;;;RSS¹uëVVV\¹r…ªU«R´hQž>}ŠL&cÇŽxxxP¿~}NŸ> ÀÌ™3™5k–`½àééÉ¡C‡X¾|9ƒ 2lZîß¿ÏñãÇiÔ¨±±±Âƒ÷½{÷033ãüùóÔ­[SSSžôë×=zäëúþýû?~<7oÞÌ‘óeed¬¦¦FçÎsäü?2·nÝÂÜÜ]]ÝüÊ'É•*B///aIíKßð***"¯¬‚ÄåË—‘ËåT¯^Èx’òõõE__Ÿ&Mš°bÅ ªV­Ê;wxûö-iiiÂSWhh(*T@[[Èp›7o&--AƒakkKJJ AAA-Z”‡ròäI\\\hݺ5)))\»vM“„ÄÈÞ½{…Yá/aûöí@ÆNxxxn ë‹ñõõÍòçü@EE---¥ÏQMMM¥|---‘eªªª’¼L&SJ˜WWWWúL×ÐÐ;Yõ©[æ>3{ÖædŸy¶¶öOY`ðêÕ«|=>+<==K¢ü{7þ@(‚ųgÏR¯^=J—.Mbb"7n¤X±blÚ´‰"EŠÐ¨Q#áéEáþâÅ Þ½{Ç‚ xûö-›7o¦dÉ’ÔªUK´¯)))Ìž=›fÍš¡««‹L&£I“&ÄÅÅѼysÜÝÝ166¦U«V¼{÷Žäädî޽˲eËòçÆHHä!III8p@xßMll,'Nœ^Ÿ?^IÿOâ×ÁÉɉ³gÏf¹-::šß~û WWW\]]E*ùŸãõë×øøøäÐ(3ˆŒŒ¤gÏžtèжmÛ‘í¾­ZµúªsŸ={V´ªÒŽ`•$ IDAT§OŸogvý{sʨ€‘’’BÆ ÑÒÒÂÒÒ’Fѯ_?a­}ܸqÌ™3‡-[¶P¯^=är¹`-^¼˜M›6qðàA†ÊôéÓY¿~=þþþ4iÒ ¬¬¬ˆeÛ¶m¤¤¤ðÛo¿ñ矢ªªÊ„ ÐÑÑaîܹÈd2A!_]] àïïϹsç¾ÊKLBâGäСC¢2øÝ»w3mÚ´|›ùÞ½{·’°äÎ;Љo#»/ýäädôõõñóóµ?yò„+W®Ð¬Y3ÔÕÕIHH 00š7oN¡B…ÆÇÇ4h@xx8 42VH*UªÄëׯy÷î‘‘‘”,Y’Ê•+sùòe’’’-¬™9s&  N:¤§§ yr¹œÓ§OS´hÑ,+"8vì²~zz:§NâÅ‹´jÕŠ;w’žžNll,mÚ´aĈÂñwïÞåÞ½{8::¢ªªÊÇIMMåÚµk”.]ú‹ Ý<øEûå7¹2ƒ5dÈ¡üôg`ôèÑœÌv™HâçÆßßÿ«*ü6nÜHñâÅ1Þÿþû ž?Α#Gxýú5çΣR¥J˜™™áää$H\dE“&MèÕ«ººº\ºt‰ÄÄD>|ø@PPqqqøøøàããCLL 'NdÈ!ìß¿Ÿš5kÆÙ³g‰çùóç*=ÐlÚ´ 333îß¿……Û¶mãèÑ£4jÔˆþýûãêꊵµ5+VÄÖÖV¢ìÞ½›E‹áééIùòåñq<<<:th–~ÅYqäȡЬ #å`IHHxvïÞe•ñáÇy÷î]žG‘lÿµÛr“ÄÄDjÖ¬‰­­-wîÜàÁƒØÛÛ •w'Ož¤bÅŠ"/;v,ÁÁÁ@Æ,páÂ…سgW¯^åÎ;¸¸¸ç¨P¡ûöíãØ±c¨¨¨P·n]TUU9zô(gΜ!..Ž’%K¢©©É–-[„àOq|¿~ýhݺ5÷ïßÇËË È˜THwØÚÚ nŸcéÒ¥_vãó™\ °’““ ¬h¨„„DÁáÝ»w<|øð“ûd^ªÈLHH÷ï߬ZrÅlš¡¡!åÊ•t~ŒŒŒ¸}û6¯_¿fûöíy`ù*tZ011ÉsUýèèhüýý³”%ÐÒÒʲBÎÀÀ@é}’•À¨¶¶¶¨0ó>YÙF•*U*Û¿ œ³ÜV¥Ja†Ùꨩ©Ñ¢E ¥c~ûí7ÑkcccavQQQ¾Qçjëëëç«Bn å`IHHXËq2™ŒªU«Ò¡CŒŒŒptt¤Y³f‡u^‰¾{÷Ž;wîàííMdd$‡¦^½zÂòPdd$6làÙ³g‚p^"U0fðäÉÊ–-›§}ž>}Z0_–È]V¬XQ „†?G®Ì`5lØbÅŠåÆ©X=z„©©i®Y9Èårîß¿ÿUëÒÉÉÉÄÄÄùyMvz; þûï?êÕ«Çøñã…å¤ZµjÑ®];ºtéBzz:{÷îeûöíÈår‘Rxn “É8~ü¸’Џ\\\hÓ¦ ¹:–̼yókkk>|ˆžž^žö-‘1óó5®ßΦM›PUU¥råÊù=”O’+3XcÇŽ¹­ž={†™™™ ³¡°¾É¬õ‘[L˜0á“yµjÕ­Ñ÷íÛ÷«–RRR8pàWéñãÇL›6í«Ž‘ÈIš7oÎÊ•+³Ý^·n]Ö­[§”«£@UU777vìØ‘eåRN£££“mp•y\y䤦¦òúõë/®Äú™Ù°aCžß‡Š+²hÑ¢<íóW¥cÇŽ‚VdAæ—Y"LOOÇÒÒRH¦=uêzzz‚2ô¹sç˜7o'Ož>¨O:Exx8+W®äåË—@ÆÔó¥K—ðööʆ!#`;zô(}ÐÿóÏ?ìÙ³ç³S÷ÉÉÉ#—Ëyûö-?æõë×@†úí’%Kؽ{·PjÀŽ;˜;w.ׯ_ëåË—B5ËóçÏY·n?¶ÇÄİbÅ ;¾úõësòäIvìØ!rLŽŽ¦N:ÈårAÈnúôéÈårš5kFrr²°ïÝ»wñôôÄÆÆ†K—.1tèPÊ”)ðaøsçÏŸ?ÇÝÝÒ¥Kræ@BBâÇ£N:9~Î'Ož`ggG£F¨_¿>“'Oþ¦ótèÐ!×—p4kÖLÐ…Ê+®_¿ÎÈ‘#ó´O‰‚M®XãÆãÊ•+¹qêï¦C‡¬]»–øøxQƒ¡¡!¾¾¾<|øÀÀ@¡}Ĉ´lÙ’:íÍ›7ÇÅÅ…¿þú‹={öðâÅ ®\¹BTT” äœššÊ… 9r$={öüdž‰‚nݺ±iÓ&>,2Ø455% €ÀÀ@A7¤D‰ìÞ½›¨¨(ìì쀌àjРAlܸ‘R¥J±yófŠ+FHH†††ìÝ»—C‡áééI‹-1óÊÝ»wEÇÈår®^½JDDéé餤¤pèÐ!a{BB/^Ì5sìÀÀ@J”(‘+çÎŽk×®}•‰³Ä·óÇb·™\Ir¿zõ*-[¶ÌS7-[¶dðàÁ¢µò¤¤$¦L™Â¾}ûxóæhöH±$—””„¶¶¶¨-99---ÔÔÔ055¥cÇŽ@Æú°L&=­)Žù&&&¼yó†Ò¥K‹ lGÅâÅ‹±²²ÂÊÊ €¡C‡âììŒ,\¸333ttt8wî-[¶D[[[¤+£¯¯/X0|é˜$$r“;wî°ÿ~F•ßCùáyñâ¥K—&66CCÃ;ï¥K—°µµ%11‘³gÏ¢§§'ˆ”Nœ8]]]îÞ½‹––kÖ¬áþýûôéÓ‡† òìÙ3† ƒ8vìóçÏÇÏÏŋӤI®\¹ÂƳ5Iþ‘pppùJäÁÁÁ”)SF0½.¨ürJîêêêܼymmmaÙNáb¾oß>Nž<)Rÿ]¸p!W¯^åðáà >œãÇÌâÅ‹ ÆÃÃ*UªÄºuë¨V­7nÜ`âĉ´jÕŠ#F`hh(ø&ÅÄÄ0a¼½½³Ÿ¯¯/2™Œøøx¡MKK‹€€nß¾-$n._¾tttÍ1mmm¶oߎ‡‡>|ÀÓÓ///âããINN¦L™2´lÙTUU9xð ŋϕû,!!‘·¨««£¦¦–ãyN¡¡¡¼}û"""ذaƒðù÷ßITT” ÿ´yófìíí™4i’ð¹wï^ªU«FLL Ó§O'88Xx`Í FÍ„ r4Ðü%J”`РAyÖß¯Ìøñã |!äÒañâÅóÜ&âs-ZT¨ÔÑÑAUU•:uêЧOd2þþþ2gΖ,Y"7cÆ ¬¬¬8zô¨pM=zô råÊÌŸ?Ÿ6mÚ°`ÁúôéCZZš06vìXzõê…³³3ÿþû/ÆÆÆ\»vŠ+*oݺu@F0¥®®Žžž .2JR­¬¬8p GŽf›4iÂŒ3PWWçï¿ÿFCCƒ­[·R¬X1Ê–-‹ŸŸÅ‹ÇÚÚšzõꡯ¯O@@¬Y³†Ñ£GçÆí–ø¥Ø·oµjÕʱßR©¯¯OLL FFF9zmW¯^åÈ‘#=z”C‡1a #ðrqqaãÆœeÊ\]]9wîQ„Õ³gO~ÿýwÁÓ166–N:Ñ­[7>|ø@XX¿ÿþ;#FŒÎåïï««+‹/Ú–/_Ž««+{öìÚÆ««+—.]2V`zôèAûöíOǧOŸÒ±cGºwï.ø^¸pvíÚ‰fçüüüpuuåñ.\¸WWW8 ´ýñÇ´k׎k×®Þ•¸»» dHuèÐOOOááàÌ™3´k׎‰' çÚµk®®®¬[·Ž¶mÛþºV96lÈÓ~JJºFFF‡‘¡¡¡,)h!#0Ë,9¡ªªŠ£££R/á)øX råÊÔ¯__éØÌ–jjjBn•¦¦&NNN¢íÖÖÖJo0E_jjj‚²®šššÒ±ZZZBŽ×ÇyhyMÇŽqssËïa|9n 6eÊ”o:.§•°cbbÐ××¢sçÎѤIfϞʹiÓ°··g̘1Ô¨Q¹\޹¹9kÖ¬áÌ™3L˜0nݺEùòå *·s///‘^^allŒ½½=666B›¥¥%U«V©ª—-[™L&ZA¨R¥ III‚¼‡¶¶6¶¶¶*THÐO400ÀÎÎNä#Y¬X1ìííEFÓ%K–¤jÕª¢ýÊ—/¶¶¶ ú.“ɰµµ%%%…B… P¨P!*W®LáÂ……4CCCìííER)&&&ØÛÛ‹Ä\K•*Å»wï°´´ÚlllÐ××¾gÕÔÔ°µµ%==]xOéêêR¹reŒŒŒ„O###¥k255¥jÕª”)SæK~‚_n‰ðkÈJºU«V¢ô¯ÅÄÄä{†$!ñSñ3È+T­ZUd’L:õ›Ž;räH–V&ßÊ¥K—ˆŽŽ¦Q£FhjjR¦L!østtdÈ!ðþý{ºuëFhh(C† ¡råʼ~ýš©S§òêÕ+ PUU¥uëÖ¬]»Vð¹3fL–Ö0ßË‚ rüœ_BVþNNNJ¹û&BÆC{æ D]]]Ñ d<Äg¾kÔ¨¡ô€ÞºukZ·n-jËì5)“Éøã?DmúúúLš4IÔöñï\A:u”*V]]]•„V3Û©««+å©)U¦ÚØØ(õéààðÃùK–„„„ÄO@LL NNN<þ\4 ÿ=´lÙ’/^d¹mÀ€tëÖB… ‰òVOžåðáÃ=zCCC‚ƒƒ9r$o޼ɕû&!!!ñ£áíí­T`$!‘×ü2V9ÁÁÁ8;;‹Ú444„m3fÌ L™2lݺ777|}}©_¿¾PŠzâÄ žûöí`àÀ 0€!C†|•øÜäÉ“™>}º¨-((ˆøøx¼¼¼pppàÏ?ÿÄÕÕ•AƒñçŸOPPÐ7ß ‰ŸÔÔTæÏŸŸg~™^½zåºDfž={F¿~ý=z´ð;¸|ù2žžž"·‚ÇÓ³gOvíÚ%´­^½OOOÑçøÔ©SéÕ«—°”˜˜È!C8p P‰Eß¾}?~¼pÜùóçñôôÉ 8p€ž={âçç'´-[¶ OOOQŠÌĉéÝ»·°¼ÇàÁƒ}D‰égΜÁÓÓS$Û°gÏzöì)Rð_¸p!žžž„†† mcÆŒ¡OŸ><{ö €×¯_3pà@†*¤ÂDFFÒ»wof̘ñ™ßBÁ"×drº\ø{ÑÐÐÞ ™iÙ²%ÅŠ£aÆ̙3ÈÐܸ~ý:r¹\°…€Œê===*W®ÌÍ›7ŒŠ ###6lˆ¯¯/Ü»w¿þú ÈxC*4E>‡ƒƒóæÍãöíÛßs¹?7þ¡Ê® 2/^¼à?þ [·n’€p> ªªŠºº:ššš‚Ü€ªª*ZZZÂÃüÇm éÈ/P¸‚(PWW§P¡B¹TTTÐÔÔЪªªhhhˆòî²êS&“}sŸ¢<;™LöÅ}jkk‹ÎŸ¹O¹\ަ¦¦¨OÅ5ihh(µ)ú¼páÖÖÖ‚öZA%W¬‚øÇݤIæÎK||<ººº@FÂ; ¼éTUUIOO'..¸xñ¢¨”5ó¾ðÿ3a***Èår,,,°¶¶ÎÖL9==÷ïßgk1mÚ´Ï €êèèHV7?<¦¦¦’[ahhˆ««« £ô+caaÁ‰'ò4x¿ví!!!\¼xQh³³³SúhÑ¢…’”FïÞ½éÝ»·¨-³Dƒ¶¶¶’o§™™Ë—/µe%Ûàì쬴‚3`À¥kÈœ©««+^+°°°`ÅŠ¢¶/•m:t¨èµŠŠŠÒ¬”¾¾¾H4Pú>6l½zõ¢oß¾J×Pøer°¬¬¬˜1cvvvÔ©S‡7oÞЧOŸ,#`===ôôôèÕ«×7M·khhàææ†‡‡†††$%%±fÍa»ÂJçãéÚ±³³£H‘"‚ÒmV4oޜѣGsáÂ¥7­„„ᇦ¦¦¢ð«óôéSÁs5¯xóæ” ›GX[[S¬X±üÆgÉ•ëÚµkXXX```§ÿfÜÝÝqwwWjWF–+WŽ7ˆÖÇ|l; xj¨V­šÐ¦°¹ðôôª(ªþù‡*?,,Løùc[…õë× ?+5þùç¡]1n ‰oá[¬Yr‚„„âââ$^‰åôéÓJ³8¹MëÖ­E "Wº “+ÖØ±c;v, 6ÌÓÿðdVñ•ør"##³>ü)V¬Øwyr]¸pððð|3NÝ¿?«V­âôéÓùÒÿÏDRRdõêÕ¢\€éÓ§S³fMÁÃ4 €Ã‡ K1ëׯ§~ýú”-[–Ç3cÆ ¢¢¢¨Zµ*'NäÑ£G?~\dfš6mJ›6m¸xñ"*TÀÌÌŒV­ZñçŸÒ´iSV¯^MÇŽÙ·oîîîôéÓ âââðõõe̘1\¾|™ˆˆ–-[†O>]½˜'Ož`nnž§}¦§§M‰%ò´ß____jÖ¬Yà d¤OU‰†äädRRRxôè‘´¤DFuj©R¥¾¸B2ªv>̲eËxõêÀi´I|Œ?~¼R^é¦M›4h{öìáÞ½{ÂŒçðáÃùûï¿EÉϤB… ‚WàÈ‘#Y°`Ïž=ÃÙÙ™àææÆÎ;騱#¡95sæLÆG\\\H²/S¦ çÎÃÎÎ.Ïú}ªd\mooÏÓ§OéÕ«—0Cµe˺wïNRRaaaÔªU 777vìØ‘{ø¨ªªæù,·†††4œG4kÖì‡XŽÍ•wCÓ¦Msã´ß@\\kÖ¬aÏž=JÉì5">>>ŸF–`ÙÚÚæ[ÿ?;gΜáñãÇtìØ‘ÔÔTn޼ɴiÓ„í#FŒ}YY[[³jÕ*A¸2--J•*EÑ¢EIHHà¿ÿþCGG333|}}‰ÅÕÕ•ÄÄD’’’èÓ§O¾\ëÇ>žš5kŠüN½½½Ù¾};~~~œ3gÎÀ¸qã˜1cF®X]»vÅÙÙ™«W¯âããCDDD–û5kÖ,ÇûþZâãã“W‰ïGQÙ—ßägpÎy-tmnnþ]št9Ezz:W¯^¥_¿~¼}û–´´4N:dXßüóÏ?¨¨¨Èš5kX¶lÿûßÿðöö¦téÒ‚{ɉ'0`çÏŸgíÚµ|8¦¦¦9r€sçÎaff&É«V­eÊ”ò¦OŸŽ©©) $$sssQÂæçŽ¹|ù2æææ¢éغuëbmmÍ»wä>>\¿~íÛ·³nÝ:ÑÏ‘#GX²d <ÀÇLJ3gÎ|Ñ}100 Aƒx{{ãää¤TQehh( L%~¾F²ãgæÞ½{y^ÂïààÀÑ£Gó´Ï¬¸uëÕªUãôéÓ„„„P«V-AùüĉôíÛ—:0aÂ!uqq¡eË–Lž<™×¯_#—Ëyþü9Å‹gíÚµL˜0A0ZÎ,b›ôìÙó×®"ÌO¢GáååE“&M¨Y³&‡ÆÌÌLØg÷îݤ¥¥ C† ÁÅÅ… *ÇøûûÕ1vvvøûû‹Ìk·mÛFrr2… ŽiÛ¶­è˜C‡‰îWæcú÷ï“““`ÃP±bEüýýE^L[¶l!))I(¹ïׯ-Z´–²:fãÆ¼ÿ^˜>þQXõë×çåË—¤¥¥ ÃŒ3øë¯¿hÙ²%!!!X[[Ć 6l¿ÿþ;oß¾%,,Œ† ²|ùr^½z…ŠŠ S¦L¡sçÎlܸ‘C‡Ñ»woÌÌÌÐÔÔäþýû,Y²„„„nÞ¼ÉåË—Y¹r%«V­béÒ¥XZZ¢­­Í­[·ðõõ¥S§N\ºt‰òåËS¨P!–-[ÆêÕ«yýú5þþþxzzbbb‚‘‘Ü»w™3g2jÔ(,X@ÅŠY°`>dæÌ™_¥R}ùòeþý÷_ €d6nÜUÕü¾*^¼8öööù=ŒŸ‚7oÞ`iiITT”ðÙ‘””ÄÛ·oEˆÑÑѼ{÷ccc‘LÇÇEIòeË–%..ôõõ…ö¨¨(LLLHMMåÁƒB{áÂ…133ãÞ½{ÂL‡žž^ž‹~þÊ\ºtIø ÔÒÒBSS“âÅ‹“’’¤I“8qâÚÚÚ4oÞ\ØÏËË‹þýûÓ³gOÖ®]Kûöí)]º4Ïž=ÃÈÈ(ß®çG&W¬ìÖïó tuu‘ÉdÂÌÁÇdžÊ522½‰TUUsä˜R¥J‰^Šò„¾äÑt·ŠŠ UªTíS²dÉo:F.—óþýû¯V/(„††dä„LŸ>K—.1eÊpqqAUU•½{÷rÿþ}Ž;†––Œ=Z¸/üñgΜ!""‚âÅ‹ü·iÓ&’’’hݺ5uëÖeñâÅhjj d3jjj¡ªªJ‰%ÀÅÅ…7nйsgá|ÖÖÖç^½z5uëÖ¥X±bÄÆÆrëÖ-.\H§NðõõeìØ±Ì;WI£èS<{öŒ &еkWzôè ^^^¤§§ˆåAGGGó{?iiiÄÅÅñáá-,,Œ7²råJѾ^^^––FLL @EE…Î;óÛo¿ ¹y'NdëÖ­hjjŠfó ÀêÕ«‰ŽŽ¦oß¾899P¥JºtéB›6mhÓ¦ •+WÎs{°åË—ãééI¡B…ò¬Ï§OŸïºn¡¡¡Ü¾}›©S§Nzz:nnn@FnÜš5k¸yó&W®\¡F¬]»–7oÞP¤Hž>}J§N |vÝÝÝ>|8]ºtþòûá¬wïÞ¸»» ﻂÊO™ƒõñ“–ħٵk~~~lÛ¶-¿‡òÕ¤¦¦rõêUìííY»v-Ý»wgëÖ­Ì™3‡àà`är9œO:Å´iÓò=ÀêÝ»7±±±Èd2F%’Ž "((wwwzõê………mÛ¶åܹshhh¤ªªª4hЀîݻӸqcΞ=K‡ò=¸‚ŒtŒgN *?e€µeËjÖ¬)©ÉÚÚÚyú”—“ܸqƒ¤¤$jÕªE5:t(ƒ âàÁƒÂŒ–‘‘ݺuãÎ;¨¨¨ðâÅ ¶oߎ§§'5kÖÄËË }}}6mÚ@›6m8~ü8U«V%==+W®3>¡¡¡hhhP¥JöíÛ@õêÕ¹sçñññܹs‡¥K—²råJ *DŸ>}8|ø0‘ÃARRÕªý{gåúÿñ÷ØÆžJ²R¡%K”êDE)ZHJ§Óªs*i‘6-Zη}߈¤Z´I{h¡““%Ù²D’}gæ÷‡kîŸÇØ£š×uu]Í3Ïsß÷̘g>÷gyF€Éd"**  Ñhx÷î™—Ê=vìîÝ»‡{÷îAVV¶Å¡÷;v ¼¼Û¶m£ÜçÍ›‡îÝ»w‰›$ާ5†ó³gÏðòåK¤§§CUU•_¼x1øùù!((ˆÓ§O7;Γ'OH©™™fÍš…ÊÊJØÚڨ͗élOƒ……E§÷2dÙ8q“¦r“zôè©S§IéÝ»7iÄ¢oß¾lëã&»víú!~ß9"´³³kU8£#¹|ù2jjj~ˆ€ÛÔuåÿh|ýúFFF˜4i€ÚDM???¤¥¥aöìÙ8{ö,üýý±råJ 0ëׯGaa!BCCáííâØ±c3f ÄÅѳgÏbÒ¤I022‚‘‘²²²0jÔ(ò‰ˆˆ`Μ9BII ŒŒŒ ££Côo–/_ŽË—/C^^gΜ²²2***0nÜ8hiiáÕ«Wd윜hii‘›[uu5ƇáÇCBB>>>¸~ý:†Šëׯ·XÔËË aaa8wîÄÅÅ)Ï©ªª²åãp“ððp„¯¯/TUUÖlþUZZ6oÞŒE‹ÁÐÐòÜ“'OpêÔ)¤¥¥uÈúxt=õ<Ñh4 ãª.®®®øßÿþG”Ïmll`ii KKK$''¨Mg«/Epÿþ}òÜÆ]Ÿ¡¡!JKKÛó[ÌŠ+ˆdMgÇÛ(tfff¸rå ·—Ñ,1ûöíËÕ¼žäädôîÝ»ÃÖ——‡‘#GBII úúúøüù3?~Œ9sætÈøñæÍdggsTÏ%11/^¼Àš5k86ǯÀ¶mÛ:tøã?°oß>:t;wîÄ‘#GˆR}{’’¢Tu –––8xð ²³³;uK—.áßÿÅÞ½{›Ì©¯ƒVUU…ÐÐPü÷ß8{ö,6lØ€÷ïßsz¹<8“ÉDPP·—Ñ%ðððèôV9}ûöeëýȃ3ôëׯËn&êÂõ,1EEEHHHÀÍÍ bbbøí·ß`jj MMÍW±Ô§n3ÒŽ`ôèш‡··7Î;‡Õ«WCCCãÇÇ?ÿüƒ{÷î!%%%%%ƒ°°0ñ>íß¿ŸTr999ÁÎÎnnnD==** 4 'OžDÏž=!**J„+###¡§§‡‚‚œ;wBBBXºt)i‡Óîòç/_¾ %%úúúí§5ðññaÊ”)X¼x1Ö­[‡I“&uù¦]8;;#//´íiˆº Ýõ)--ʼn'pâÄ (++ÃØØ¸SÃ+<ÚOvv6,--‘MéØÀƒÇÏFjj*zõêÕå,Žx°.\¸@’#[‚ ¤¤7nÜÀü3fàôéÓÈÈÈàÄ[Lii)._¾ 999¸ººUpyyyܽ{žžžX·n’““!**J‘###!&&]]]¢6>aÂäçç#%%…´(`×½{w¢  ÆÆÆHJJB~~>  `ÆŒxüø1ž?Ž" ÙîÝ»‡½{÷¶{œÖâàà€Þ½{£ºº·o֭߯[QYY‰]»váßÿíôõüÈ0 8p‹-jò«’±9RRRpúôi9rÅÅÅ];«ŠGû‘À Aƒ(^L&“IŠslmmñôéS\»v–e0X½z5ÊÊÊ`kkKùþ¹ººââÅ‹”y®^½JºÄÅÅ‘ÊW ¶ojNNNƒëk*§ðÞ½{ JÔÍk cÆŒéô‚ŽˆˆLŸ>½SçüU™3gN›ÿ6:ŽXW¯^ÅçÏŸ[|¾ŠŠ )Ç233qöìY̘1‹/F```‹“ÚþøãÜ¿¿UknŒ˜˜Ì›7¢¢¢ÀÑ£G±dɨ©©‘¼•-[¶ÀÂÂEEEDû‹¥–ÍÇÇGÉ¥býäÈ‘øþý;RSSÑ»woÈÉÉÁÚÚ#FŒÀÚµk)×HKKcþüùðóóìY³`jj ˆ‰‰µûõ9’Ïu&‚‚‚ VÅá÷ßÇŒ3pæÌ™6Ø·o߯›7oÈãk×®±“””D<6'Nœh´áõ±cÇðåËʱ¸¸8Ò<µ!Þ½{‡OŸ>‘Ç?n2ºiÓ&µeìnnnl2Í1räHHIIáСCoô_KÂG"""˜5k®_¿www6­Ž&<<œ—ÜAˆ‰‰!&&†R¸Œ””øùùáüùóPVV†ªª*É€ ¢¢UUUxûö-ѯJMMEPP¹± Óé$Ç588¡¡¡¤Að¥K—ˆw>%%UUU人9X999ÈÌÌDnn.ª««Q]]òòr$''#??PPP€Ý»w#%%…Üû“’’ÕlSëçÏŸ“H@g‘ššŠ¨¨¨NóWE\\œÍfèŠp%DXSSƒ”” <¸ÙpRVV¾ÿÞ!kÕÖÖFjj*ÉM122"70333DEE!;;ÚÚÚˆŽŽ&ÞÞÞÄM¿xñbÌœ9½zõÂàÁƒñèÑ#hhh—‹‹ † ‚ââbŒ3"""ÐÕÕÅ£GÈk=}ú46n܈ˆˆôêÕ«ÃBzÆ ðaÚ=ïÇ2_FFØä$##gΜ!bcÇŽmqUÝ¡C‡7oÞ@@@;vì ½¸X¼}ûááá$ñ»±ñQQQ011¡ûþý;bbbÿþýûèÛ·/ù[¸t霜œød5¡_¿~­nµ±k×.øûûãÏ?ÿ„ƒƒTjOMMmtŒ>}ú`ýúõ˜6m1Ü[ã…æÑ5©®®FRR¡ªª EEE(**";;_¿~…ŒŒ .^¼H¼PòòòÈÍÍEYY¼¼¼0þ|6Ce̘1Ä(~óæ V­Z…gÏž¡_¿~2djjj°`Á())áãÇX·n´µµaooÇãâÅ‹¸{÷.zôè‡âÖ­[€ÀÀ@ddd ** {÷îEuu5rssqåʘ˜˜àòåˇ˜˜¹W6†··w§7711i•Æ\hh(>~üˆÞ½{“ŠÞˆˆÈËËSTÓýýý‘›› eee5™gYYY‰‡âÍ›7PVVÆÌ™3QVV???Ì;—üvùøø`È!ÐÐÐÀµk×(÷Ç‚‚øúú‚ŸŸ£F‚††F“é:›6mÂŽ;(ÇX‚Í}úôAII ž={†É“'ãñãÇ Ñh022Pû™[XX¾Á-%((t:½U×p®XUUUxñâegÔï«÷\rr2egTV³çŽ‚uSjˆº_âºê²¬?  ¶Ù)‹ºíNêz©X!C µ&PVV†²²r›^Cc0™LTVV6ùÇÊd2qýúur#l,œ˜˜”””´èš””ddd´J¼vÊ”)8{öl“aTUUUJÛ½{÷pæÌÐh4,\¸(ĵùKkÖ¬AZZÄÅÅÛTD‘ŸŸ¥K—‚Á` [·n8tèyßSRRpäÈôìÙRRR°²²jñ¸¬õ>nnnø÷ß±}ûv¶$ßððpÊcEEE˜™™áÝ»wÐÕÕå¸ìÎRUU…½{÷ÂÕÕ•Øæææ(//‡³³3rrrð÷ßÃÀÀöööðööÆÂ… ñéÓ'Œ5Š|¿,--qíÚ5DDD`Íš5¸~ý:***ˆÁ­ªªŠêêjäç磺º'NÄßÿÔÔTŒ?<@Ïž=annŽôôt\¼x‘²)öòòÂÝ»w! €Ñ£G“ãZZZ8xð BBBHÚ€¼¼<Ö¯_pwwÇìÙ³aaaÑìýfRRR”{Fsœ;wcÆŒAaa!ôõõñæÍ`üøñ”{ÿÎ;±{÷n¤¦¦b„  ktÌ;w‚ŸŸæææˆEQQrrr°yófðóóÃÉÉ IIIpvvÆÚµk¡¡¡Á¶ÍÉÉÖ¯_cÇŽ‘â­Æ`mëâêêŠGÁÛÛyyy8zô(&OžŒ‹/"44ÑÑÑ””Äž={0yòäVX é¹uE8b`ùøø4¾ÆÜ¹s)ÝÙ-,,Ý€¤¤$&Nœ333 aùòåžÛ¥êÄÄD¼~ýrrrÄHb0øúõ+ÄÅÅÉ»°°¥¥¥Mö†óòòÂíÛ·qâÄ $$$`ÿþýpvv&º4k×®¥(†7Ä÷ïßÁ`0ˆÛ½£ñ÷÷GPPP“!/†Í›7SŒÆ¶rðàAÐét\¼xlùu€LMMa``€ÂÂB¶hž%K–ÀÆÆöööžsáÂ<}ú¢¢¢¸~ý:<<< Vç§îÍòîÝ»8p Ž=Š;v4™0 9QQQprr‚””|||™™‰ãÇãÑ£GÄÀSVVÆôéÓ1lØ0˜šš¶è5ÖgÔ¨Qðòò¦M›`gg‡;vÞtùùù ߣ)S¦že...mš¯#˜8q"¯ëB‘››‹M›6aáÂ…ä¾ÄÏÏØØØàõë×pssÃ;w0{öl˜˜˜@BB‚xqYXYYaäÈ‘˜?>ñ\|ÿþ(Á»»»ÃÐÐGŽÁðáᨨˆÏŸ?#%% Eii)âãã°ç^UTTVçîÝ»‘кž///\¸pæææX¿~}“>L&³ÍERí¡µ ㆆ†2dBBBØB±ua½Ö#GŽ //Ý»woð¼ÈÈHlذ#FŒÀˆ#ÔL&L@pp0œœœpéÒ¥f7S½{÷†™™ú÷ïeË–5i`±ðññAbb"6oÞ yyyâ©ßU`Þ¼yØ·o_»´_¼xUUÕ76çÉÁ’’’jU|´¬¬¬AãJPPFFFؽ{7nß¾uëÖQ¼AqåÊ$$$´jÍ@í—rΜ9˜={6–,YBŽGDD@NNŽÒ&eÖ¬Yüüü(=¿Z‚††,--[÷BZAcêÎAlllƒÇ‡ ‚µk×âöíÛØ³gÆ×êx;N‡““%qvÕªU°´´Dpp0€ÚDû»wïâúõë(**É\u¼_¿~MnX-é±ùçŸ"00¤5Nnn.ÌÌÌpòäI¤§§sDAZZšì—-[F çøøxlÙ²…|šjÛ™ÈÈÈp­géÏF=`kkKÙ`>}ú/^¼@zz:=zD¤:ºuëUUUxxx9,DDDpúôi,^¼˜“““ÃîÝ»±{÷n ÃÈÈ$›®nݺ!66êêê˜5k’’’ ­­‰'²U£Ž=ĵk×HPcˆ‹‹ãßÿEQQ¢¢¢`ooùóç“ïNc?Ò½{÷ÆÇ[øÎu ÷ïßo±þ# ???lÙ²ñññÐÑÑiô¼õë×cæÌ™˜0aB£ÆPkünݺÚÚÚ8räÉU€ŠŠ bbbðöíÛ&çjµòÖ­[GGljPïÙ³Ÿ>}ÂæÍ›É±­[·6XÑomm§OŸ6éPiŽ¿þú m¾¾³àºL6¡Á!C†ÀÔÔÆÆÆmòF]¸pååå 6=mŠË—/ãÕ«Wèß¿?P^^ޤ¤$²Ã¿qãRRRЫW/„……A@@X°`’““ñäÉÌœ9çÏŸ‡»»;ÒÒÒˆ·êíÛ·ÃÓ§O±iÓ&XXX`Á‚¨©©““ áèèˆëׯãÆسg¶nÝŠôôt ÁÁÁ›6m‚œœ<ˆ·oßbèСX¸p!”••ñWÌŽ‹ IDATùóg\¸p¯^½‚   fÏžY³f5ûš§NÊ•$÷””JB¨¬¬,rrràëëÛaífìííaddDÂ’ÿûßÿÈsþþþ”s%$$ÀÏÏïß¿ƒÉdB@@€†022BHHÆŽ‹RAƒµÈp~ôè~ûí7üùçŸprrjR(699555mRñçççDzeË ¡¡­[·âÝ»wpssã©¶ÿä Á××—rLAAÞÞÞøöíôõõñÇç\\\0nÜ8’+J§ÓIþŸ€Z¯RCÕñãÇcåÊ•ä‡ÚÉÉ &LPkäŸ;w^^^ÈËËÃìÙ³€tسgnß¾üü|Œ5 ŠŠŠ`2™Äp——‡™™àðáÃFee%âããáïï!C†`éÒ¥ÈÏÏo4\–ŸŸßéýpKJJZ]u«  ¸»»7éqsppÀÛ·oqñâÅ&½s#GŽÄÝ»wñíÛ7899AAAjjjjï‡NNN-J?PVV†ŠŠŠÐ¤·0++ W¯^eëñª¦¦iii¼xñ‚rœF£aÆ عsg³ëhŒÁƒC^^¾Í×w1°Þ¾} •&-m5558sæ dee1yòd˜šš6Ú¤¶¥´¥Ùsii)Ö¯_}}}ØØØÀÙÙ™$2ûö 4´ËIMMEaa! ++ 999lÚ´ /_¾Ä»wï ¡¡&“‰“'O’`dd$ÊÊÊðøñcdffÂÑÑ:::`2™8þ} ]]]Jþl\\ÔÕÕ!-- J‡ ÃÞÞž¤B4†„„† †Ã‡CWWóæÍƒˆˆ^¿~ÍV\ ++ OOOÌœ9¾¾¾” ››¦L™Âö7dbb‚ŠÒÒRDEEþ9êF“º21°6oÞ —åìdeeÁÕÕZZZ3¯_õÕöîÝ‹ŒŒ øúú’Þ÷ïßÃÁÁ"""0`i)sóæMìÝ»K—.Åœ9sÀ`0ðîÝ;())áõë× %ñ#FŒ@nn.RSSajjŠ+W®ÀÛÛ¤ÿðÿ?²oÞ¼Á°aà ""`ëÖ­ÐÐÐÀþýû ¼yó‚‚‚¸ÿ> ¾}û†˜˜øøø`þüù-NXŽˆˆ@XXX‹5’:‚ššXXXàØ±c$<ùøñ㟥„Ô&»O™2…휆þ6GŒ³gÏRŽÕu7ÔÈuÒ¤Il;©ú9-ëÖ­#ÿ?þ<Û¬Îu¯e§-ÈÉÉáÔ©Søßÿþ'''¬^½ºKiõܺu 'NœàµËéÊÊÊàè舋/6ZÛ044D÷îÝakkÛdksÔ/ªKgW@mJKk¢&ƒ bËUVQQÁáÇqüøqµ@u Ö¯_íÛ·cÖ¬YpqqÁƒ(VPPþúë/Ðét 2–––HOO'wwwµ!TV!İaÃHа°0öïßOŒ>lܸ< Eõ ,MMMŒ5 žžžØ±c<==Éšûö틹s碠 @­¡ÈŠ lݺ...àããCBBŽ=ÚbëGë!B(((tè˜ééé––nqnQzz:ùQ;v,9ÊÊJDGGcÆŒäx]-+HHH@qq1V¯^MëV²Ba¬ëÇDKK‹$Ž6 /_¾Djj*qÇFFF’/ ÒTÕÖÖâââ7nèt:øøøpýúuœ9s>>>°³³ÃÀ¡««ÛìkÇ“'O:ÕÀâççg“MàM¹Ò RSSÙªSRRзoßWµpª÷XG¶ÜÄš5k ©©‰;wâÝ»wpuum²Ü›ÇGAA®\¹‚ƒ¶Ëpá4ÂÂÂ7€’““;´]ZK¨©©Ajj*TTTZt~C‰ã‹/¦ä¾À™3gÈÿ{õê…C‡¡²²sçÎe«¦tqqa+ZQRR"Z{,Xy¡@mñ@}X†²!{üø1Û8Àÿo‡N<Šu×\w=uÿ¯««K6Ö_¾|Á† ØÆnŒ .@__Ÿ„?»*\ïEÈ –,Y‚þù§Å绸¸ ¼¼×®]ãGðèÑ#tïÞïß¿“É„ˆˆBBB`mm &“Iv ŽŽŽð÷÷g3¸€ZãHBB$‰œ^^^055ÅéÓ§1gÎhhh¹Ù³g£ƒ•LM§ÓQQQsssDDD\†7nàÓ§Oð÷÷GEE|||°páBCVV222-Ò¶js°Ú ïŠdeeÁÜÜcÆŒÁСC)_vEEEj«W¯f“ yùò%´´´`ii KKK>|˜ckç$'NÄ… ˜˜$%%5znc<º.½zõÂÖ­[lqÔá;š/_¾üȆ¨+ÖÛZÔÕÕñîÝ»6_ß‚‚‚Ú\ÜZš«¤çãÆ#¿M‰‰I«Â«'Nœ`ËùêŠpăµ~ýz®–^khh4é>®Kii)ÔÔÔpæÌŠ—ÊÃÃèC…„„Äf†eË–¡wïÞHMM…ªª*òóó±eËŠ{sÒ¤I077FàAƒàîîSSSøøø`Ú´iprr8;;CHHÂÂÂpwwÇãÇIˆÓÓÓzzzÈÉÉAß¾}!//ˆˆܼyùùù°°°€••RRRðßÿ!++ S§NÅÑ£G[Ü£IJJªÓ›¢r'''Ì;³gÏFQQ&OžŒ!C†@__yyyðóó£Ü(˜L&õZUVVbܸqõ븸8ðóó“ÀÍ›7aaa&“‰{÷¦¦¦¦àããÃýû÷¡¤¤„‡bêÔ©èÓ§g߀&PRRÂÙ³gáéé GGGJø².Çoµ6M[ÐÔÔì–O>>˜››ÃÑÑ‘àÓ§O7Ü¬Ü ¶ãïï bH³’žY²555¤E K{ª¨¨•••”q¾ÿŽÐÐP0™LhjjÂÆÆ†ä‰ˆˆ ¸¸ß¿‡€€ñø[YY!$$„xö_¿~?ÂÚÚt::::$”™™™‰ÀÀ@Œ3EEED€ôßÿEXXf̘iiiøúúBFFééé˜9s&ž}úp½9 œ={ùùùðóó#!ô´4|øðEEE¤’•G×§¨¨Æ £„Ý oooœ:u YYY”J'NÄýû÷ñÏ?ÿ`æÌ™ÍŽ_^^Ž> ´´”­óØ1cðäÉ<þVVV¤íÙ“'O`dd„7âùóç’’‚ àŸþABB¾|ù‚Ù³gcàÀرc)),,Äõë×!++KÒ#ddd   €àÅ‹ðó󃉉 ›Ç¾³+­ñ`ÀÁÁ°²²ÂôéÓ‘––†¼¼<¨©©ÁÒÒ¶¶¶xõê€Ú¤x+++X[[ãöíÛM޽`Á˜™™aÚ´iX¸p!é|2qâDÊyñññ6l¬¬¬0gÎDGG·òóh ŽXUUU”òÐÎfÅŠxðà׿ÿ‘ÐÒÒ"š3?D\\9vçÎhkkCTT”(°———øøø(ù)¬ã²²²PVV&áÓþýû“,Vb¥­­-®^½Š;wî`Ê”)‚¼¼²²²àç燔” „ 6 ÿþPQQÁرcáááCCCÒÍ‚%;bkkKYc=ˆW7??Ÿ%žhTUUŸŸ555j©ƒƒƒqãÆ üöÛoxõêñÐãÕ«W­VVoÁÁÁpuum²x¤.·nÝBTTY3«8uj›Þ³*™L&ÊËËñæÍ›U_»v t:±±±l©&ua0())ADDÄ“{÷î]ÈÊÊvùÔ®Ë4p‚3gÎpÍEü£Ñ’fÏ?ÆÆÆ Exx8 ```~~~Ü¿>„••1·nÝŠÈÈHðññaöìÙl¥Ïššš”<9Ö°[·n¸ví¥ âðáÃHJJBdd$ kìß¿Ÿ$Œoܸ±ÃeI: --- ±X‰‰‰ðôôl°D»½”••Q~Px´úž(ooo¤¦¦BII lò(.\Fc‹8¡åººit:›6m‚‡‡Ž=J¹†N§“‘ìííqíÚ5Ðh4X[[ÃÓÓ&L@tt4eã1iÒ$Ìœ9yyyxõêU“¢³ºººðððPÛŸ633"""èÙ³'%‡iРA VSrEEÅVåÖÔÔƒfÍš5 ³³3,,,ðþý{XZZBII‰¼Þ¬¬,ÌŸ?¯_¿¦´k IIIˆ‰‰AHHŸ>}jô}}ùò%ìììùCTæµ26œªhìH~J«±/Vtt4Þ¿ßl§õS§NANNŽ’4Ùæææ¸uëV«ÖçííM’°MLL°dÉ’6S—Å‹cëÖ­D¹¥øûûãÆðöönóÜ]YYÙ{8 ±ºZAM}Y¥¤¤M^mè:ŠN]aWmlÓ§O7Z6øðaLŸ>—ÞÅ)--¥ä#ÙØØàåË—øöí:DDqYÒ%¬ƒÁÀ±cÇ¿ÿþ;>þLÆ H˜››7Ød÷Â… ij"''‡ÐÐP’à¾råJäääàÉ“'˜1c„……±hÑ"ôìÙâââƇ(t,1P»IΞ=‹””¨««#,, 4 ׯ_§X,ã°3Ñ××oÕ=\]]=‚‰‰ öíÛ‡}ûöïÜðáÃÙÛËÉÉÁÏÏ999055Åøñã›ôd™˜˜@II RRRð÷÷'­Œêchhooo¼zõ Ë—/o6¿«+ÐR!mnÃkÊ”)\ítåÊhkk³µÉÎÎÆ»wï(ƒÁÀ‡ --MŒ“ÊÊJTTT 66  $LgeeALLŒôu«Û{*##_¾|Á°aÃõ9rÏž=ƒ§§'”””HO¼ââbTTT 11‘üˆBPP"""(--EMM $$$ !!!@YY@m,V.QNNÄÅÅ!""‚ØØX0 <¸Á*!!¡.­ú̃³¼|ù¯_¿nR¨Í«\¹r%îß¿OI”n/òòò]ÞÍÿ£——‡>}ú 33“xðLÕ¨Ÿ³ÄÇÇGšn×ß 4t~CŸYý6L†††”ǽzõ¢xÐê Î;4 ¢¢¢¤è†ÕÝ nRdeeÉæ¨³t§8Á¾}û°`Á˜˜˜@[[>¤ä 5F¯^½0wî\œÅáÇ1oÞ< 2555àçço°+q›Ç¯‰žžTUUÁÇLJ‚‚$&&6zndd$N:E‘0i/ãÆksi;*L&eeel!ÞŸoÿþýøý÷ßÙÂýœ$##7oÞlñ÷cäÈ‘xöìÂÃÃQ^^Ž3gÎ@AAÕÕÕØ¿?Ûùu½ˆK—.Ell,rrrŒØìرß¾}ƒˆˆÖ¬YC6ѬßF ÖøîׯEQþï¿ÿFaa!Þ¿ß`DÐétHKKcÐÈȨÓ%&æÎ‹9sæ4Ø­+ñS†W­ZÕbUXkkk¼zõ ±±±8}ú41°&Nœˆ­[·"44~~~ppp@||<6lØ€ššìܹ“b`ÅÄÄ@OO³fÍj²Éu~~~ƒòþ îîîPPPÀ¤I“ØÔÄë"((ˆ“'O¢²²&&&ÄÀÚ»w/zöì‰'NRSSaccƒI“&ñ¼T<„ݺuƒ¦¦&¶lÙ‚?"88ÁÁÁxûö-›ø¶mÛÝ<ðà.=zô@LL ¤¥¥¹½®³fÍPPsšgÏža÷îÝ­Ú€tëÖ “&M¢h°ð¨®‘N§CSSEEE”P*‹Æ~ÿz?ê¦-ôêÕ ½zõ‚˜˜Xƒ!EVÑ€°°0Y#7„““““)•¨]•ŸÒÀjÛxåÊ•ÐÕÕň#ŸŸO~PXU.222ÈÈÈ@JJ ª««°··§ŒsìØ1x{{ÃÆÆvvv°³³kp>999DFF²åîðóó“äg ‚ŸŸŸ”—””sYÉ…„„(%ÿIIIu[œ={{öìÁ±cÇT¾åF³çöòòåKJÇö_NhT©ªªBUUÎÎÎ8tèNŸ>!C†àÉ“'¨¨¨@yy9¦OŸÞ©ÕY ¢¬¬ „ªª*[¯¶7oÞ`ÆŒèÓ§îÞ½ ;;;ìܹ®®®”œ777¬^½...PUU…··7¥B­.zzz8~ü8 ///XYY5ùº;†Ý»w£¼¼NNNˆÇÒ¥KQYY‰„„„ ,n4{n+âââPQQ!aUµ§ÚsHHH {÷î¸rå JKKñðáCœ;w‘‘ªªj»çxñâBBB°eË–X1Ë—/ãÙ³g°±±ÁøñãÔz¶“’’°jÕ* 4UUUØ´iJKK±mÛ6tïÞÙÙÙØ¹s'„……±k×.ðóóã¿ÿþÃÑ£G¡¦¦Fî÷îÝC@@ŒŒŒÈ÷ðâÅ‹ üyóHNÏÎ;‘žžŽ¿þú  @yy96oÞŒŠŠ ìܹÈÈÈÀ®]» !!Ðh4¼{÷'OžÄ!CH7ŒÛ·oãæÍ›011!gΜÁ›7o°`Á’æîîŽììl¬_¿W¯^íÔ÷¨um(´Ç£ãa)ýwu8b`%&&R’¿;›%K–`öìÙlÕ‚***èׯ©Î000À¡C‡pîÜ9¨««ãôéÓ ÑhÐÑÑÁÀqáÂX[[ÃØØ@­ò°¯¯/|}}‰8§ƒƒ€Z£ÎÏÏýû÷ÇæÍ›QSSƒ;wî°uL·²²‚¼¼<ððáCna³fÍ‚¤¤$tuu‘’’‚óçÏcãÆÅ{¶hÑ"ÀŒ3Э[79r§NBvv6"""àïï‘#G6šg5uêT¶Ö® Nïð\ -CTT°°°@MM æÏŸß!㦦¦âáÇ<«ƒ`å_ÕíÃW]] >>>²Ñc0¨®®???Éa2™ä뼪ª*0™LJOJV•[Ýñ+++A£Ñœ“5~Ý9Y0™L0 Ê:XsÖ e£Êš³þÚ:£&îS^^:ÞåÛ ý”!ÂÆš=³*#êS¿U «×_ýØx=ØøY†ÑìÙ³)ž•¼¼<8p Áõéêê²UáÔ7°XÔ%üÈ2°êjÕ,^¼mä[—Ÿ±Ù3ÎÂÏÏÏÓ™ë¢888Pî%ØT¿ét:›§EVV–È4°ÐÒÒ"ùœ,ÌÌÌØ:?°××¥¾Á,**Ji–ÔæîÔŸ³~ßW VÛ«¾¾WCÕv¬üYnñáÜ={¶Ñû>ŽÃÜÜ .ìòÑ Ž´Êéß¿§VoÔgçÎ\o8ݽ{w¶¦Ì]‘¯_¿’~{}ú„˜˜L:•ÛKùaxöì·—ðC“““Ñq_¾|‰;w¶º—ß7àãヘ˜R¥Ùzöì‰ &ÀÙÙ¹S —=z„§OŸâ¿ÿþ#•žm…N§cäÈ‘øí·ßZÔÄÙÞÞ‹-‚££c»æå41°¡¦¦Æ5«gÏžð÷÷ÇDZ|ùr :IIIØ·otttH• K f÷îÝB`` îÞ½‹%K–@SS)))ðôôĈ#°páBÀæÍ›QRRÒè5Ÿ?Æž={ ©©Iªk¶nÝŠ¼¼<ìÞ½¸qゃƒ±hÑ"hkk#-- »wïnò–ÌÂ… 1jÔ(dffÂÃÃ&5Û·oGNNvíÚ111ãÆptt„ŽŽNƒ×,]ºEEEðòòêäO‰àÕ«W8qâÏÀj!fff Á‡¸½”–=zpDá===½UM¦«ªª`ff†ÈÈH|ÿþ½CÖðâÅ \¸p.\àX ªÏŸ?cæÌ™HHH@^^^‡{õêUHKKCGG—/_nŸ2û IDAT²RYRR’"ä&ÒÒÒèׯñd‰ŠŠBII‰4t€¾}û¢²²’xozôèA¹FLL ŠŠŠ”kúôéƒŠŠ ¢ÉRÿ(**Rš]÷éÓRRRdÖÚX» aaa(**RÔsë_Ó½{÷¯©Û¦@QQ’’’DC†µ6ÖjC×èêê’&¯~üء㵺h999¸sç,,,ðäÉ“Fu®nݺEÑJëªtý¶‘ñãÇ%c VçÅÅÅ…rÎï¿ÿNy?‚qp¨ŠÐßßœš?&&&lb–ÿèÑ#Žôbíh8b`‰‰‰ý0&<¸‡´´4ÌíeðàÑnîܹ}}ý›““ƒÊÊJò˜£F‚¶¶6i‰¦®®N 9Šˆˆ@]]’’’PRR‚ºº:ÄÄÄÈójjjPWW'i%ôÊþŸŽÊkˆúáÀOŸ>5z®««k“XWá§ÔÁâÁƒ<:“ÊÊJ”••µú:555|ýú¡¡¡ Å«W¯À`0@€þã? \½z±±±¤×­¾¾>ââ⋞={vØkjŒ… "++«Á†ïgΜAVVvìØAŽ­^½YYYøòå ÂÂÂ(=z—,Y‚ØØXTWW#%%¥EÑ/MMM(**vÌ‹á q3…‡‡cÀ€?„Ò*<¸G^^rss1`Àn/¥KA§Ó±wï^?~œÛKù%ÈÉÉÁĉÛ5Æ”)SÚ¤)hggAAAôìÙ•••4hàÒ¥Kððð€ŠŠ ’’’0oÞ<¼xñ‚xvŠŠŠàää„mÛ¶aåÊ•(**‚„„D»^CKEïÞ½Ù"UݺuÃܹsQRR‚E‹aË–-¨©©˜˜z÷îY³faÊ”)رc®]»†ŒŒ ìÝ»gΜÁôéÓ¡®®Þ¢ÊÄ%­€#Ö¶mÛàââ###N σŸ„;wîàĉxúô)·—Ò¥¸xñ"Þ½{×)s#..ÚÚÚ2_C„……¡ººcÆŒáÚÚk` @II©Õ×=þ®®®øüù3>|HZÍyyyaÇŽ˜;w.þùçhiiQ”â_¼xüõ×_°²²ÂÙ³gl‚ݙ̚5 °··ÇÕ«W1iÒ$“ç QQQòòr ¼¼eee°°°@EE|}}[%uÑÕá%JñàÁƒGcðàÁ–›¶iÓ&„……áÀ2_C¼yó sæÌáÚÚKuu5>}úuuõV]w÷î]¨©©ÁÎÎsçÎÅôéÓ!++‹ôôt„††bÞ¼yAyy9®^½J®c2™8tè>Œààà&s–:‹ùóçãÍ›7¸yó&’’’0þ|ŠuõêUHJJbûöí$I}üøñøóÏ?1þ|¬_¿ŽŽŽ8þ|“óœ>><{ö¬Eò- Ê)Zl`ñóóSt;º:?~Dnn.àþýû˜5k—WĨõ¨uV¥ <‡Á`ÀßߟîäÉ“9žËâââ˜6mZ£Ïoذ/^¼àø:ÚK‹ ¬Ñ£G#11iiiÍž;sæL®¾øššÜ»w<ŽEJJ ×ÖÓ™´4pvv6âââtoóø5¹víÌÌ̸½Œ_’ºáA\‰T„……aÈ!$d¼k×.Êófffä¹ú9=îîîä9555TTT炃ƒ¡¦¦Öl[•ÂÂB\ºt fff1bΞ=Ûê×pïÞ½VÉ$¸¹¹PG£ªª {{ûwíÚµO5¡Ñh4h&MšÔè9=¢„(»*-<¶¶¶Ø¶mŽ9ÂQ뻽„‡‡³Iús]#¤3ðõõEqq1æÎÛ`(®ªª HJJêÔ8vUU¶nÝ ccãNÉÑãñcPYY‰ââbn/ã—£¸¸·nÝb;ž——‡{÷îÁ¢S×Ó£G:tˆ<®¯Òíææ†’’`3JfÏžMÑÏ$ÿ×ÖÖÆ±cǰvíÚf7ÙBBB055… &Nœ77·V½•V…WñíÛ7:tß¾}£†mF£¡gÏžPUU…¿¿?GÚÕIJJâÎ;˜>}:RSS;ü»Û£G <ׯ__ãþŸ5kÖ`øðá:7'hÕ'pôèQÂÎÎ+V¬Àˆ#(½º ÅsïÞ½‹%K–4ù¡ý Œ7ÖÖÖð÷÷ÇàÁƒ‰kÜËË ¹¹¹ˆ‹‹C^^Û‘S”––"** ‡Nǹsç:e^þŒ€€¬ZµªCÆ[°`þüóOœ8q‚H:TWWÃÙٹ˧»())aêÔ©pttıcÇЭ[70™L;v !!!dãßVfΜ ;;;L:µƒVÌÚ¤¥Ñh0`@›EOœ8uuuXZZ¶uúFÙ·o_£Ï½~ýÆÆÆ]2¬Ù‘Œ7çÏŸo4¦ïîîÎ˃âÁãÅÏÏHHHH@RRÅÅÅ Óéøúõ+€Ú0áÏ``%&&¢²²/^ĤI“ $$ı¹^¾|‰ƒv˜åææ†ùóçc̘1˜0a)ÞÒÑÑÁòåË;dN²{÷nàÝ»wä1ƒÁ ¯›UÝYQQˆˆ¤§§“óòòòتÿ333A)Æøôé^¿~‘#Gþ9‚1°šíØÑ0™LøûûcÙ²eˆGII V­Z---äååáË—/ðôôDtt4233;umÜ`òäÉl;Æ3°xt)ÒÓÓñìÙ3n/ã—AXX¸E=I…„„ //ß +úù°¶¶†¾¾>nÞ¼  Ö Ð××ÇèÑ£ˆ‡ŽŽFÒÒRµÕﺺº”d÷ÇC__Ÿbœ­Zµ úúú8}ú496uêTèëëãîÝ»€¢¢"èééA__IIIjìutt`hhH ±€€èééaÞ¼yd¬}ûöA__6l ÇþøãèééáâÅ‹äØäÉ“¡¯¯ÐÐPÀ÷ïß¡««‹Ñ£G•÷·oßBWWß¿'aé+W®@OOŽŽŽd,èëëÃÝÝ[¸p!ôôô(â·ãLJ¾¾>ÂÂÂZøipŽô"ì(***ޏ¸8òá4u®½½=¤¤¤ŠÐÐPDDD 33“$|‹‹‹cýúõ¸téÒ/Ñ›pèСäØéªö4 ***000€¨¨h§ÎÍãç%%%oÞ¼áö2~ *++!##Ã{?ë‘ÝìïNCÔOà¦ÓéÈËË£SWWg+›6mÛ|7nÄÆáàà@Žùúú²)î×Ý”@aa!åØðáÃÙälllØ„[·oߎíÛ·SŽ5”Z“@yÜ£G6]¬Q£F¡¦¦²²²$¬9þ|ÌŸ?Ÿrž§§'<==)Çú­j‰ÐyW‚#ÖÈ‘#Ñ£GvqëÖ-Ì™3L&l“<VV Ú¤Êû3ÀÚ±¨¬¬ìô÷‚Éd"11eee8uêGÔ…yü¸ A\\¼U×Ðét>|˜ã2#¿œÍù‘©®®†©©)·—Áã†#ÖíÛ·Ûuý­[·`mmU«VÁÒÒ²Í%þ—.]BØÿ±wÞaQ\Ýÿì.U* (VˆEc×(*öDå5vMÔ¼6Ô`ï½ÄJ,‰Á•Ø ¢HUìTAÚîï~;/+EP–EœÏóøÈ̹÷ìl™3÷žó=W®hT/DÓ 8°°0AäS³H …‚þù‡±cÇ’žž®25,òeãââRà`UqIQ¤(øé§Ÿ>‹L5‘âK±Ë"Tê|Œ=šÞ½{‹úIŸH§N€Ì©ZM-ÑI$:tèÀŒ3˜9s¦XEDDDD¤ÄSì¼—K—.ñúõkúöí«iSJ;vD"‘àìì¬iSèØ±#¥J•‚?EDDDDDJ*jY"œ1c¤Aƒ>÷þýûXYY©ì|ooo•TÓÜ ãÝ»w¹*»)XYYV$סbÅŠ¹Ö‰’H$X[[çë½ù2 ÂÏÏO| QwîÜáÅ‹´oß^-EDrC-Ÿ¶]»váèèøQÖ“'O>(D¶sçNüA QP3{{û"«Á8yòä< qššš~v™ "êãÖ­[lܸQt°DÔ†  @¡PЧOú÷ïÿQ÷&%AAA*Y}E2™¬ÈÇ-,âããY½z5ÇŽSûXáááj#¿;w^.—çK¥vРA/Ò)’üñƒÇd¦Q'úúúLž<™Y³f±qãF6n܈µµ5®®®ôíÛ·@z_;w&222[†¶ºÉÈÈ@¡Pù¸……B¡ %%¥Hì755¥gÏžj'?;KD¤ sòäIILLÄÒÒ’¾}ûR¿~}M›&""R pvvfÖ¬YÂvPPóçÏç¿ÿý/­Zµ¢ÿþôèÑド@ÆÆÆ*œEÅœ9sÐÑÑá—_~)ò± ///ú÷ïO»ví4mJ‘¢ëÑ£GyÆP‰ˆÇgùòåÈårêÖ­Kùòåù÷ß±°°¬Ï€Î;Ó¬Y3M›!R©Q£:::*åk s6ýÂ… \¸piӦѽ{w\]]iÕª•†,)I¨%‹PWW·XÉ+lÚ´ WWWFŲeËxýúužÇ~üX¥ÍÍÍMeŒ mÝ»wWi7nœÊ¹YÙ·oŸJ›Ð¬Ò¶råJ•s­­­…¶÷u¾FŒ!´UªTI¥mÇŽ*ýfUèö÷÷Wi{?i¥FB[ÖÒ'ƒÚޭذaƒJ¿YºoÞ¼©Ò¶cÇ•s+Uª$´1B¥ÍÅÅEh³¶¶Vi[¹r¥J¿Ykáùøø¨´íÛ·OåܬmãÆSiëÞ½»Ð–5ÎJ&“a``@^$%%qðàA¾ùæjÕª%”˜ùX¾ˆ%Âëׯ3qâD*W®Ì‰'pttäßÿÅÄÄÈ”ß711AOOØØX–,YBóæÍ166æÝ»wòàÁlmm‘J¥„††R£F d2ÄÄÄ —ËIKK£J•*¸Ϟ=C"‘”””kÜ‘­­-;wî2¿à]ºt¡aÆ*Çœ={–û÷ï³ÿ~ÒÓÓyþü¹Ð–@hh(¶¶¶‚Ú}HH–––H$ /_¾DKK‹7oÞ`eeEJJ ÏŸ?§Zµj…y™‹¥€ìˆ#°³³ö …j:DBB×®]£\¹r4iÒ„+W®0sæLÒÒÒhÖ¬þù'‡ÂÃÃ*Uª°dÉüýýéÒ¥ r¹œ›7o’ššÊÛ·o™4i*T eË–ÄÄÄpûömttt4òú5I¥J•TœÒÂ`âĉ 8PØÎz]Û¶mË™3g„íÚµk ›ššª´½S³gÏÁ ~¿€ñ´iÓøî»ïr´§cÇŽ*ýfuªU«¦Òfnn®rî¡C‡„R(eÊ”Qi›={6cÇŽÈö Ú­[7lmm…m¥ó©ü;ë˜ï=JFFé¸feþüùLš4 [UŒ>}úдiÓû­S§ŽÊ˜ïˆþûï¿…ß¶÷ÔÅ‹mEÃÕÕ•–-[ ÛYë#6hÐ@eÌ÷¬mï':-_¾\¨ƒûþ÷2?B&&&8;;óÝwßqäÈüýý³•¾Ñ¯^½B[[»XØò1¤¥¥¬±âŠýzüø±ZÊç©ÅÁ:~ü8Mš4Qq6²’’’‚‡‡‡Pø2+~~~ÄÅÅ1gΜ\ûŠŠR©°tuu©^½:ãÆãúõë8p€ñãÇ3räH*V¬HDD£FB&“ñúõk8@çÎY±b1114lØ333&MšDíÚµñ÷÷gÙ²eèêêÒ±cGœœœˆŠŠ¢W¯^ 6Œ7rùòe´µµ¹}ûv®vI¥Rôôô>|8S¦LQù…ÌLjˆBBB°±±~ä–.]J@@õêÕãÉ“'´k׎~ýúQ¿~}üüüX±bæææ888вeKz÷/'Ož¤bÅŠ$''g{òþ\HKK#((GGÇ‰ŠŠ"!!‰DÂÒ¥K±··'==RRRX¹r%lÚ´‰;vðçŸ2räHnÞ¼‰‘‘&&&8991uêT 7nÜ >>žêÕ«S½zu† &<¯_¿^˜qiÚ´©ÊÍ£$Ò¨Q£gZ?åu͉œf˜”èêêÒ¤I“\ûÍê|¿……9¶cllüQcæ•¥V³fMjÖ¬™c›‰‰‰ðà÷>úúúyŽiooŸk›¥¥e®m+VÌ5sÛÀÀ Ï15j”k[­Zµrm333ÃÌÌ,Ç6CCÃ<ÇÌ«íý™2%QQQ¼}û6Ç6zôèAÿþýiÙ²¥àôFDD°oß>&Nœ˜ëxEÅ»wïTŠ>N$&&²mÛ6•bÑEMíÚµsýœßºu‹ñãÇú˜jq°FÍÆsu°$ ¥K—Îñ Ê»wïò”`ÉdùÊ4ÌæÍ›óøñc®^½ŠB¡ GÄÆÆ²mÛ6öìÙCåÊ•™9s¦püرcéÔ©;vì N:tìØ‘Ê•+³ÿ~¾ýö[*T¨Àºuëxùò%#GŽdذaŽ;F›6m˜>}:gΜaÿþýLŸ>È,СCæÍ›‡L&ã×_ååË—¹þ gâââ„§õÜœm¥ߢE áæÁ³gÏ022b².kkkóý÷ß³cÇÖ®]˺uëèׯ“'O¦qãÆ´mÛ–‹/ öüùóiРp}!ïKI¡qãÆ¼|ù’¨¨¨ea‰ˆh‚ëׯ«lK¥RZµj…««+Ý»wÏ1¸ýcÊ8©‹qãÆ¡««‹»»»¦Mù(¬­­qww§k×®š6%Ïž=ãùóçÔ­[·ÐûÖÈ¡ŽŽ­[·fÞ¼yÙÚfΜI@@“'OÎõü»wï ³>ÃÙ³géÖ­ááᤤ¤3!Jçæ}ç­N:@¦¾Frr2AAAèééѺukàSØåÊ•ãÍ›7Èåráæ|P×ëôéÓx{{sâÄ aß¹sç ¤U«VtíÚ•¾}ûÒ·o_î޽˔)S8pà@¶"¹Y5ÄLMMyúô)€ðÁQ(DGG 1ýúõû¨jñÅcccÊ—/Ï›7oØ»w/S§N¥B… óôéSÚ¶m+8XYŸx ‘J¥Â2ÉÓ§O¹|ù2R©'''^½zÅàÁƒéÓ§ׯ_ççŸæìÙ³Lž<™˜˜–,YÂË—/9rä;vìàÂ… ´nÝš³gÏ chª$QQbjjй¹9žžžŒ9RÓæˆˆäŠB¡“ÚµkãêêJ¿~ýÄ ³öqùòåÕòyø"b° 3-÷åË—œ8q‚¨¨(ˆ\.gÓ¦M4hÐ333"""€Ì¤ŸŸ_¶iüAƒñã?2zôh´´´ˆÏq,©TJµjÕøûï¿ÑÕÕåÎ;@æ:úáÇ…ø È ¶3f Û·obZÊ•+ÇСC…c|||P(XXXàåå…­­-&&&H¥Rþúë/š5kFRR=zôà»ï¾£yóæ¬Y³&›ˆD"¡}ûö¬]`` FFFÌ7ß|#«P(X¸p!sæÌÁß väÜ IDATߟÐÐPzõêÅþýûiÚ´©Jlˆ¦øñÇ™3g^^^x{{£¯¯ÏÛ·o-.¥ãœuÙÀÔÔ”-ZpéÒ%zõêELL üðÃØØØ0{ölîÝ»‡¥¥%ñññ¤¥¥ Ž÷€„¥ el¿~ýJ¥‹-Ð$sæÌaêÔ©8;;‹št"Å–Ë—/ãèèȪU«ò\Fùòˆˆˆ`þüùj[V‹ƒµÿ~êÕ«§Ž®?Šž={rûömŒŒŒèر#+W®f0öïßÏž={ˆŽŽ¦ƒ×¬YÃÉ“'qrr¢W¯^B𛵵5Ë–-c÷îݤ¦¦2lØ0ŒŒŒèÝ»7éX >ÈÌ^Û´i‰„mÛ¶QªT)nݺ•-3%>>žaÆqáÂaŸ­­­J,й¹9»wïæàÁƒ888Ù:àÀ,^¼˜#F`kkËêÕ«Ù»w/C‡¥uëÖ¤¥¥©ÿöÛoœ$99™иqã\ãw¾úõ뇧§'ÿùÏ8qâD±ÊQÒ¢E á7ADDIFF£G¦Q£FôèÑC-c¨åNéä䤎n?š=zäz+Uª”M}¼nݺ²ÚûAœµk׿×_UÙ§œù‘J¥BF’¾¾¾µ£D___%¶  aÆٲß§F9 Ì•.]:ÛòL½zõX°`°­­­­â`iiiѽ{w•tuKKKÚ¶m«ÒD"a„ @f© ¥“R\r•T¯^Q£FåØÖ¿ÿ÷kkkãèè˜cp|³fÍrÕez?Å¿¤cll¬’±šîîî´hÑWWWÜÝݳeÓ‰ˆˆˆ7¢¢¢˜2e !!!üþûïjG|ä,B7nüÁú‰š }ûöÙR·EDìííyùò¥ŠFÑû”/_ž³gÏ"—Ëqpp`Æ ¤§§¡•""""ù###ƒ­[·âàà@ll,[·nÍ5;¹0PË ÖË—/122Rká””!uUäËÄÇLJ°°0Zµj¥²T÷ðáC®^½Š‰‰ ;wÎõüèèh~üñGí«¥K—bkk›cM۰0æÎKÍš5™?þí‹%..ŽòåË 1Z£8annމ‰ ·nÝÊS3ÍÜÜ8ÀìÙ³ùõ×_©[·.vvvØØØ|‘:a""…IHHZZZÙ„^?Þ½{‡——/^¼(ò±•’>ׯ_'$$mmm&L˜ ¶eÁ¬¨ÅÁ²µµeãÆôêÕKÝS»ví|é ÉårÒÓÓÅø"¤(ÅKïݻǎ;„È Î_°`>TÛs#00àà`Áæ/^ ££CÕªUs<^™  Ì*ýîîîœ9s†… Ò¾}û|QÜhÒ¤ >>>* ¹áêêJ·nݸsç~~~øùùqðàAqFKDäyòä R©ô³u°’““9wîœF„Re2•*UâÞ½{üüóÏ899Y¦wñˆV. ù-¶¹nÝ:|}}Ù²e‹š-ÑÊLÆððpaß©S§xøð!666899qúôižâËJ—.M×®]ùꫯHOOçÂ… „‡‡ãèè(È>(ð྾¾¼yó†òåËcgg'Äî>}ZÈ !..ŽÎ;g2eGÐÖÖ¦M›6‚ªµ\.çøñãhkkãààÀÙ³gÑÕÕ¥C‡E–µ8~üxzõêÅÀiܸñ/]º4­Zµk¹‰ˆ"%AkáÂ…ÑÁÊÈÈ k×®‚äQQòY:XùåôéÓ¼|ù’„„„/2¾¤£T§VÊk¤¦¦²qãF ³ìŠŸŸË—/§jÕªÄÄİsçNêÔ©#<*e”ÓÚµk æàÁƒ¤¥¥1kÖ,|||ÐÖÖfÏž=BV¥RöaÙ²e$&&RªT)ÂÂÂHIIaÕªU4jÔˆ_ýUÐBÛ±czzzôêÕKe ¹\Ž››ÇGWW—ôôtÜÝÝ™={6Ý»w'""777 Y»v-ñññÈårBBBŠlyÑÁÁ1cÆ0zôh.^¼øEh|‰ˆˆ”V­ZEppp¶š–EZ‚ÜÇŸ/õru΋/P(*""%‡ªU«¢­­Í£GP(8p€çÏŸÓ¶m[ìíí©S§þù' ,ÀÍÍ SSSîß¿/mgÕÉJMM%,,ŒR¥JQ­Z5Ž?Ž 4àÈ‘#ÌŸ?Ÿ—/_"“É„™³åË—³iÓ&æÌ™#è–>}mmm¡oãÆ¹zõ*ÞÞÞddd޾¾>U«VåÏ?ÿäøñãØÚÚâáá!œsøðaàJôÊbÖ .T±»°H$*¸ïóÓO?¡¯¯ÏÀyôèQ¡Ž-"""¢”:—K–,aæÌ™Ùêsj™Áš={¶:º-žžžÂß'Ož´ªDJ2™Œ5jÌýû÷ÙµkÚÚÚŒ?¹\ζmÛ8vìïÞ½C[[›´´4d2fff¼|ù’˜˜*Uª„‘‘ddd`mmD"œò>}ú…À!S2CWW–,YBhh(2™LPÄWªß¿P-“Lzz:õë×G*•rêÔ) SúÂÄÄ„ÄÄD 3…þç`¹ººbaa!8V¹ÕëûXªU«&Ø›:::>|˜I“&ñÕW_ñÓO?1fÌ1óTDD¤XÈ„  ã矦M›6±£D.Êåráæ™™[Ož<5zò@.—‰¡¡¡ZÓV KKK‚ƒƒY°`oß¾eÀ€T©R…Ó§OsàÀ7nÌÂ… eܸqÔ¨Ql*ïJgF¹ |f”5•ˉ¿üò ÑÑÑüöÛo8::2zôhüýý…ó•ýg­Kø~ —²†¢²f§r e¬“²¦M›ªlöìpݺuùûï¿ó<ÆÌÌŒàááÁ¬Y³X½z5 6ÄÎÎ[[[¡èµˆˆHá¶¶6çÎÓ´)Ejj*~~~ŸTâ./ áááøùùqýúuBCCiß¾=‹-bn5A‰t°nÞ¼ÉË—/Uö9Ñ·o_š7o^,œ+P“ƒ)Ìú5ÉÉÉx{{gÛÅÝ»w?X–&+Ê''' Dtt4<{öŒ;wrúôiìíí¹}û6»wïfÿþýìÚµ CCC222˜7o-[¶dõêÕüõ×_Ô®]›àà`ŒŒŒØ´i5jÔàûï¿'##mmm^¿~ͱcǘ;w.W¯^E&“ajjÊŠ+¨^½:—.]bÑ¢EÄÅÅ!“É5j...,Y²„³gÏb``€®®.kÖ¬Á‚iÓ¦qëÖ-Ê”)Ë/ظq#†††Œ=ÒÒÒ(W®`Ïž=üñÇœ9s///æÎKýúõ D.—3gκu놧§' .D¡PP§Nîݻǘ1cøöÛo é,vvvBpxVôôôøùçŸUö 0@ø{äÈ‘*e†¦OŸ®rlÅŠ™:uj®ã:99©”„Rê\)©R¥ Ó¦MSÙ÷þzzz¸¸¸50³bllœíu-]º4W{>•Ù³g3jÔ(¾þúk=‰ˆˆˆ|,Û¶mãÚµkìÝ»WÓ¦”¸R9^^^¹.Wä4³•Êe£‹/2~üxŽ;†¥¥%7&((‰DB÷îÝ9vì÷ïßgÇŽŒ3†;wR¦L¡ÆQPPÚÚÚLž<™+VǹsçHHH **ŠŒŒ fÏžÍþýûY»v-×®]cåÊ•xxx…‡‡Ož}ú°yóf´µµqvvÆÄÄ„éÓ§Ó½{w"##‘Ëå ñGAAA1hÐ Þ¾} €……×®]#--=zP¶lYA¡[t°Jß~û-õêÕ㫯¾b×®]š6GDDD$OÒÒÒpss£cÇŽôèÑ#ÏÒhš@-K„GŽQG·äÙ³gB0rN$&&réÒ¥lË9¹DåÊ•ùå—_Töûûû#—ËU”­+Uª„L&cÕªU˜™™áïïOÅŠ '--ääd¡r·T*¥}ûö\ºt ø_Ö˜D"¡R¥J¼{÷ŽÈÈH¶nÝ dÆ)S÷ýüü°µµ%22;;;*UªÄ›7oضmÚÚÚ\»vfÍšq÷î]¦NÊ”)S˜6m·oß&--øøxvïÞÍ;w˜4i>¤B… ¤¤¤¨€×­[---a6«V­Z‚CåëëKRRÿþû/åʕӘ3-R¸H¥R–,Y©S§˜7oGŽaðàÁØÙÙaee%Ê2ˆˆˆhœ””ñõõeëÖ­ÄÄİlÙ24mZ6JTá©S§„"™L†¡¡!)))( aÙÐÓÓ3_–R')§˜­œ²¹\]] gÀ€( *W®Ìúõëñõõ2cj† ‚¾¾>¿üò ÕªU#((---A¸`̘1¬Y³†¾}ûbll̯¿þн½=õêÕÃËˋdzwï^:wFbõêÕ‚çnccCÛ¶mÙµkW¯^E*•baaÁĉ‰ŽŽfÆŒ¤¦¦¢§§‡ƒƒ½{÷bÖ¬­­‰ŠŠ"!!A˜Í F"‘P»vmôôôèÖ­.\àíÛ·Èår4hPз)GLMMIKKãíÛ·bÊ¿†éÔ©Íš5cãÆ,X°€'Ož ««‹•••X×SDDÊ¥·#Fзo_µf8*+%ááᘛ›S¦L™õ“[íDgrê?'é™LöÑKz¾¾¾¬_¿¹\N•*UøùçŸ <-+—ËÙ¬H¥R4h@`` è`3”òJ9 ‘¢åÞ½{èèè|¶I¶nÝŠƒƒƒÆÕ?•‡ Ò>ᓃÜOœ8Á¾}ûTœ¢ƒ õÞ SÄò§Ÿ~–ïò¢zõê<{ö¬Àv”*Uêƒ"‰éte–Áúõëñðð(²ñÔÉ€¸téÿþû/‡ú(M“gÏžeÓöRâââÂÁƒuM¢P(ؼy3;wVY!ÊŸì`5mÚ”¡C‡R¿~}f̘ÁŽ;HKKãúõ븹¹Ñ¯_?lllHKKË—Èg½zõ ʈˆ”222áÖœ˜0aVVVjÕ{É/‡&((ˆ7øÜO^"455¥cÇŽœ|˜ÀÀÀé—‰ˆˆˆˆˆ¹\NDD§OŸfäÈ‘9r„Ç3pàÀê¯P‚Ü{ö쉑‘ñññ9¶çwöJI›6mðòòÂÅÅ…;v`nnþQ<±±±$''«”H)Z Ož<ÁÈȈ£GæKÎÚÚšÿý—5kÖ°uëVV­Z…B¡ bÅŠª%)"""Rˆý¬‹=ÇÆÆâææÆªU«4mJžÄÄÄœœLµjÕèÒ¥ ‹-ú$ÅBq°ôõõéÛ·/Û¶mË>€–ÖGyŽŽŽ…BñYW°¸zõ*ÕªU#,,Œ„„ 5mR‘‘o«M›6´iÓF¶ˆˆˆˆˆˆˆü?‡fúô阛›“––F­ZµX½zu¾jºjšèèh† Bzz:­[·æÆ¬[·ŽÍ›7Ó¾}{M›W$Z©‘ÂáäÉ“,Y²„ .P½zuîß¿OïÞ½)W®œŠ$RqäÛo¿¥W¯^üðþû÷ïÓ¥K.^¼HÕªU5h]ÑPèY„"""""""ŸÆôéÓÙ¿¿à\Ô©S‡-[¶ðã?jвsûömUœ+È´òäÉlÞ¼YC–-…6ƒ•œœÌ½{÷ðóóÃÏÏ€€ «{µ “ɨU«vvvÂ?SSÓBé;::Z¸~~~„††’‘‘Q(}« CCCêׯOƒ °³³£^½zèéé}r¿r¹œüüüð÷÷ÇÏÏèèèbW ‘H033>¶¶¶XYY!“É4mZ±!&&Fx?ýüüxðà)))š6+Oôôô¨S§ŽÊwÞÈÈè“ûMMMåþýûÂõð÷÷çÍ›7…`±úJ¥T¯^]å3žõfþ%“žžNPPÊoø‡· ¹\Nddd¶ê(JiÞ¼¹Ê>‰DBÕªUUÞO $É'Ù¢P(Wù®GFFæùûýöí[’’’²ÙðîÝ;âãã9sæÌ'Ùõ!ŒU¾çÖÖÖhií¢D¡P ‘Hjá9-Ù©S§|w””ÄÂ… Ù³gO±w òƒ­­-+V¬ N:u¾¿¿?“'Oæþýû…lYÑ#“É>|83gÎühGËÃùsç–ˆ,»²eË2þ|\\\4mŠF‰ŽŽfúôéœ?^Ó¦ ;wfÉ’%øÜôôtÖ®]˪U«HMMUƒuEKÕªUY¾|9-[¶Ô´)A¡P°}ûv–,YBRR’¦ÍùdLMMY²d ;vü¨óÏœ9ÃÌ™3yþüy![Vô”*UŠ™3g2|øðOv:ßçÁƒY}'…Bá Ÿè`]¿~I“&™ÜBQ¡­­Í”)S7n\¾g,ÒÓÓYµj«W¯&==]Í-–––¬\¹’Fåûœ/^0cÆ µ?¥h‚Ž;âææFÅŠ5mJ‘sèÐ!~ùå—b?;]PÊ—/ÏâÅ‹éÖ­[¾Ï fâĉܽ{W–=‰„o¿ý–Ù³g£¯¯¯isŠŒÇ3eÊ®\¹¢iS þûßÿæ{¶6>>žŸþ5[Vô8::âîîNµjÕ ­ÏܬŽÁZ°`}úô)qÎ@ZZnnnôèу¨¨¨ÿøñcºv튻»{‰s®BCCéÕ«K—.Í×ñçΣ]»v%Ò¹‚̧ºvíÚå*¤[ILLdذaLž<¹Ä9W©Ë7zôhÆŽ›¯™¨Ý»wóõ×_—8ç 2gqvìØA‡JÄL|~øã?pvv.‘Îd®$899qýúõ{ýúuœœœJ¤spåÊœùã?Ô>ÖGÍ`8p€©S§ªÝ¸â€ƒƒ¹N)ÊårzõêÅ­[·ŠØ2ͰvíZ¾ùæ›\ÛŸ>}J»víHLL,B«4CéÒ¥ù矾ˆl˜3f°wï^M›Q$Œ;–9sæäÚ~íÚ5\\\ËåEh•f¨Y³&gÏž-”XÌâʽ{÷èÒ¥K‰|8~ŸŠ+rþüyÊ–-›c{ll,NNN¼xñ¢ˆ-+z´´´ðôô¤^½zŸÜW¡Í`=yò„yóæ}²AŸ W¯^ͳʦM›¾ç `öìÙ¹®Ç+ ¦L™òE8W9«3yòäb¬_\¸pá‹q® ó;}ãÆÛ’’’˜¥N…L&CWWW%‹ÏÀÀ€víÚѳgOôôô„>²þÓÑÑPù»0¸qãöÇ IDAT†Ê4rzzz¾K*—/_VÙ¾sçoß¾Õ5šåÝ»wܹsGÓf¨…/ñJÉû¿w%u'?DDD­i3 •k×®•i¡áåË—<|øPØ~øð!/_¾Ôˆ-·nÝ",,Œ°°0صk¶¶¶E6~FF×®]SKßr°üüü ePKKKá‚~ýõרÛÛ&,¹?ž°°0Æ@åÊ•¹wï›6mbêÔ©„†† }dýçççG™2e +Ô‹–’’¢ò¼ÿ~±×½qttÄÃÃ>}úzßïJb6UA(¬ïFq"%%å‹[>Éʽ{÷Tb­Jâ{\JÚëÿ˜×ckkKÏž=©P¡‰„ž={ 5z­¬¬èÙ³'æææyöQ¥JLMM…Ä)ådÂû"˜Y÷kiiå8iÛþüõ7»8ü~Ïœ9““'Oâìì\äJõêúlçÛÁJMM%((¨Ð ˜9s&RiÞf2dÈ´µµY½z5C† aî̛ܹ7O;§_¿~¬_¿+++¤R)ëׯgæÌ™8;;³~ýzš5k–ã¹={öäâÅ‹\¿~Û·oD“&M¨[·.aaaüþûï*ǯZµŠ°°0œ™2e aaa„‡‡Ó°aCá˜'NöQ³«¾¾¾9þ­)Ž9Âo¿ý€™™Y‘Žý1Ÿ…üoÝxuüØFEEQ»vm\\\r "WÒ¥K&L˜d:dÄÑÑÈt¾œœœ¸zõ*[¶l L™2…j§???\]]õ:_}õ;wîÄ××—zõê¡­­——r¹ggg’’’7ngΜaРA,Z´ˆ„„ yôè#FŒÀÐÐùóç0räHFŽÉøñã9räH¡ØøîÝ;‚ƒƒ±±±D«¤Ý|@|O!ó}­]»6 DDDhÚR’>ãééé~Rr¹œÁƒŸ­­jÕªÈd2á3#•Jùé§ŸËåŒ=š´´46lHjj*þþþñÕW_ajjÊóçÏ100 S§N¼yó†þù;;;¡ïáÇ3aš6múIKiYßÏâðÞnذkkk^¼xÁÂ… ‹tl¥SØ¥tò=ƒõøñãB2ßÔþù‡iÓ¦åàvâÄ Ö¯_d–ç¥Ã¤N²^ƒððpµW¡BzôèÁÇi×®/_¾dðàÁ”*UJ¸çΣnݺ4jÔˆï¿ÿžêÕ«Ó§O|}}ù駟ظq#œ:uªPíSfS¥¦¦–¸øŒ‚òüùób¿d\P¾t‡þ÷ÿPíµ/uÜ4ųgÏ>ùû*•JÙ»wo¶äžråÊ|||زe 2™ LMMIII!!!ÿý777Á±9|ø0R©Tø]ïܹ3úúú=zTebãÎ;ôèцNPPÐG—ôÉz+ŠûÙ‡ÈÈÈ T©Rèëëyl\jj*Ïž=+ô~•–ðIËÉÔöã²xñb*UªÄ·ß~›ë1oß¾ìzõê•Z.D~(êØ .àççGpp0û÷ïçüùó( jÕª@µjÕðððàÁƒ¬[·ÈŒ½JMMŠ“ÆÅÅYèµµ”×ãK¿ñ()iס¤½žAüŒÿ’t ÔýZZµjÅéÓ§éÒ¥ M›6%!!;wbiiɾ}ûðóócÙ²eB¹­#GŽ‘‘!ÄËöîÝÈ,M••ýû÷“žžÎÔ©SéÒ¥ Û·oÿè×’õ¼âðÞþðà 0~ûí·BMRËŸr ’““³n þ”ôÿ;Žb è×b~ü™LÆ/¿ü"Ì`)¹qãŒ5Š¿ÿþ++«Â2YDDDD$,,,Tþøð!¥K—ÆÉɉˆˆV¯^-ÆWªTI8ïðáÃ@fp»L&Ë6{¥D)l¼oß¾÷gN>KÖ¯_»»»0‘°lÙ2ÜÝÝÕª°^Ød©æ¡P(b”Y#ºnΗ.]"""‚5j¨Í˜7oÞàîî.,}EFF2iÒ$,--ýêÕ«¸»» R ×®]ÃÝÝ]E*2µiÜÝÝUÊÕ¼{÷ww÷Ϧd‹\.ÇÝÝ]ˆc ÅÝÝ](ס|"RŠYº»» ÏŸ?Ÿû÷ïS¹re–-[F·nÝ„R6qqqtèÐÖ­[cdd”ëò¯ˆˆˆˆHáзo_ìíí±³³ãíÛ·œ;wöîÝK\\=¢fÍš@¦“¤äÔ©S$$$P±bEÒÓÓsUUøð!666%¹²‰½†‡‡ Ù„Ÿ‰‰‰üõ×_ÊÍÛYÛ²:X»©oß¾Õ1bÿüóO®Ž?•7oÞd»€ÇŽSÙ¾zõ*W¯^¶¯_¿ž£°ç•+W²¥¨¦¤¤|VoPFF†Š½aaa*Ûžžžxzz Û+V¬þŽeóæÍÂöûRAAAj‘×ùÒ8þ<±±±ÐÞ¼ywww¼¼¼hÙ²%ÞÞÞlß¾øøxéß¿?ŽŽŽ˜™™qüøq¼½½UtæÞ½{ǬY³¨Y³&Ïž=Sþôññ!##C˜”ÈZ®nÍš5_dE‘âÂäÉ“³–ÏR)\,8X …âD"™,ôòòbÖ¬Y,X° ÐÓEDDDDD>G¼¼¼ðòò¶³>ß¼y“›7oÙCmär9>>>¬ÕšÛ¬ÕåË—³UÏPò~I'‘¢cýúõlÝ*øT; …J‘Ç÷½§¥À7@777Ξ=ËÖ­[±··/SEDDJÍ›7§T©R u [´hné‰DBÛ¶m…íW¯^P,2¢>„žž-[¶ÄØØ˜ÈÈHˆ‹‹ËõøråÊ1sæLسg5jÔb|222ð÷÷'&&&×óEDD ˆˆÆŽ›Uú(˜ôþq*–B¡H—H$½€=€ÓíÛ·iÔ¨fffXZZªÝ輨\¹²0Õª)BBB˜7o Y CCCJ—.­qí©põêÕ/¶ž×û,X°@¥væçNÖ%ú‚àîîN5¸r劻qãF$ õë×/4ûd2{÷îUÙ÷êÕ+ÜÜÜTb[>ooo µ˜·££#{÷îUÉîݵk— [—zzz*Îdß¾}™4é¿çr¹œ;wî0pà@µýF¾zõJøýûÜɺÄö¥òîÝ;áý|÷îf4h€žžžÚê~ˆ•+WæYíD¡PððáC®_¿NXXXÖ¦`€B¡Èö„$ÉéiO’|5–Ì-}}}Ê•+÷i¯à˜={6^^^-¸š’’"üйN‡’Ö­[ãè舛››FÆWòæÍÞ½{‡D"QɆùR‰ŽŽþ,fOòK™2e000(ðyÿþû¯$3hÐ ¼½½ñ÷÷¬ªU«Ò¶m[üüü¸{÷.6664mڔ˗/Š‹‹ 2™Œ[·nñõ×_s÷î]|||èÒ¥ åË—çÏ?ÿ$>>---=zDrr2NNNÔ®]›íÛ·óúõkš5kFß¾}yûö-þù'vvv4hÐooo"##óõZHHH@[[“_‹œØºu+:t sç΄……Q£F Ê•+'ü¶•*UŠnݺQµjUbbb8zô(iii|óÍ7DFFâííÍôéÓ™4ik×®ÅÃÃiӦѭ[7~þùg®\¹B“&MP&,)߇¸¸8Nœ8ñÑv§§§óâŋ¸G&“ajjªi34Š\.4%ÍÌÌ>X²®°©P¡‚0k[¦Lììì000ÀÓÓsssâââòœÕ-lž?^ÐÉ‚t2}¤ù …"GÕÚ¬™w‰õ‰ä(ð5ÐX*•~ Ô*˜É‡ŽŽGeÀ€ :TȬÐ××gøðá´k×…BÁÌ™3yúôiQ˜¤$xûÿP€RCŸÂŒ3 Å××—ÿþ÷¿ìÞ½ccc¬¬¬˜;w.ººº/Šî× hÐr/±0kÖ,.\¸ ÒV·n]–,Y‚»»;wïÞ¥eË–ÌŸ?ŸÉ“'ÊìÙ³)W®oÞ¼¡L™2èêêâããƒeÊ”áûï¿´… óFItt4ñññ”+WCCCZ·nM÷îÝñõõåñãÇÌœ9GGÇ‚†<¤ïPúc®E¶SRÐÒÒbôèÑ\¸p3gÎÁÎ&&&xzzR¹re=z„®®.³dÉN:…···ÐWll,ÁÁÁ\¿~]pÊ.\¸ÀâÅ‹ùã?˜8q"ööö,]º”M›6}’ƒÈ’2õ# ¯8ëç‰P¦–êÉjË…%K–púôi¤R)ÎÎÎabbÂëׯéÚµ+õë×çøñãìØ±£¨LJ ó3ž ¸ùÿÿþQ(¡yu˜§ƒ P(¢ÀÎ*Uª¸û `ìG“ššJpp0=zô`èСôíÛ—îÝ»chhH`` µjÕÂÉɉîÝ»³qãÆ¢0 ]]Ýs …¢€¹¹¹·B¡hó¡s ƒK—.ñã?beeÅÍ›7144¤R¥J¼yó???š5kÆþóŸ"w°Ê—/?èéÓ§Ç,,,ôRSSÕ–3\«V-¾þúk^¾|ÉÁƒUÚ6lHË–-Ì¥Û÷o"_}õ52kNe R-LªW¯n®ù¹öBÂÜÜ|¥B¡˜ø±ç/Z´ˆƒÒ£GŸ«­­Íðáñ´´dõêÕT¨P °uëVœ©Zµª°D®¯¯Ï‰'¨Zµ*åË—ÇÃØ˜¶mÛF=8p ›6m¢E‹xzz›o; —ÄÇÇÏ377o¨P( E$pÍš5˜ššâââ‚‹‹ ,Z´ˆÝ»w3jÔ(*W®Ì† X°`R©”R¥JåºzðÝwßÑ»wo¬­­Q(ìÞ½›ððp¼½½éÞ½;¿üò Ý»w2—ô?--­`…BaóI*UªTøäú03fÌÀÚÚúÓ úH–.]ª’‰X¤Ri¼B¡( P¥J•XŠø!yß¾}Œ=©TʺuëhÒ¤ ¹W­Z5¤R);w.2ËÄÄÄ.:::¢0û,¶)‚ûöícÛ¶mfMä§Ÿ~âĉX[[«­¨sqãÊ•+˜˜˜0`Àºté" wéÒ…æÍ›sîÜ9FŒ¡a+ÕG½zõ˜5k©ôû¾ƒÕ¬Y3¡ÝËË+›ƒÕ®];ÆŽ dÞdÔå`‰¨âããÃ¥K—˜1cZZZ٦ߕK9-C&''s÷î]ôõõL!¿´´4Á©211þ–Ëå„„„põêU¼½½…Ž›7or÷î]ú÷ïOTTZZZŸìd<ÀÅÅKKKÚµkÇìÙ³™2e ¿ÿþ;ÕªU²Íär9‰‰‰¹:X¯_¿&00Ý»wsþüyž ,ÈVU¤hX´hžžžH$!ËMÿdii‰±±1;vÌv^zzºJ<[^:?)))*ßYÙ¾};«V­ .]ºô)/§P˜4iwîÜÁ××—sçÎ1yòdËåÑ­[7z÷îÍÍ›7‘H$‚“™þùg6¡FÈÔk cÊ”)”)S†Õ«W«ó%}±¼_ÞL$ÿÈår† ‚B¡@.—sèÐ!´´´xòä Í›7çÉ“'Zœ(¶ RúEYFTdé¿Ο?/ü}ïÞ=îÝ»dfl‰ˆWüüü8qâ„°L™Ë´!!!tïÞ®]»~ôG~8~ü8sæÌÁÄÄ„íÛ·#—çbQ4´lÙ’éÓ§ Û©©©lÚ´ …BÁæÍ›iß¾=}úô¡{÷îÈd2¾ýö[A`2¿( ¶oß΂ HNNê≈'²~®³&ž|H/ìs¡X;X"""ŸãÆS™u™={6»víR©7Ú¾}{Ú´iCTT111XXXš/:räHAî" a9pÓ¦M?~œàà`222pqqÉ3ó'-- .ðÍ7ßd[ZÖýúõ£^½zXXX˜˜È•+W„²'‰‰‰tëÖÆS£F ^½zÅÕ«WQ(¸¸¸ðæÍ s©ÛÇÇG%|â}þùç,XÀ_ý%ʈˆhÑÁ)T|}}U¶_¿~M^%==sçÎ ÛÊtqP¡NHHP97<<œððÿÅ&ç%Ûbjj*ÏnÛ¶-ßÒ êF.—ãïï¿¿Ží …BE\IÖ×™çë3f C‡%11‘eË–Žá"""Bt°DDDJ$ïÞ½ãüùólذ!›TDI'88˜Í›7sþüù/&VUD¤¸¡6«qãÆBj½\.çÞ½{\¼x1_ÂaãÇÇÐгgÏrãÆ ¦OŸNrr2k×®¥J•* 6ŒGñûï¿™Á†}úô¡J•*œ9s&×X‹;vйsgÌÌÌØ¼y3¯^½*¤Wœ;¶¶¶tèÐA(âyùòåf²:uŠ˜˜ € ½{÷2Ÿnƒƒƒñöö.°íÀÈȈ.]º|ôkù\ˆ‹‹S‰ãü’È:;(R8H¥R5j„ Ïž=#00¨¨(d2‹-âñãÇ_ìç-/$‰ Ê-—ËIKK˵òNhùÜP›ƒÕ AÆGBBÉÉÉT¬X‘ŒŒ :uêD```žç~ûí·˜™™áì쌳³3r¹œQ£FÇÚµk133cܸq\¾|™ßÿ2eʰtéRÂÃÃY±b}úô¡I“&H¥R HOObþüóOúõ뇭­-jw°êׯϩS§ˆ‹‹#<<5jôAË××W(yaiiɸqãHJJ"..ŽJ•*¡P(4hPžÌïÝ»G©R¥>éõˆˆˆˆ|irñâE*V¬(ì ¢]»vH$Œ¯¯¯è`å@:u8{ö¬°ýøñcnܸÁ¬Y³xûö-5ª-@f¸ÀùóçY½z5?Ö„É…†Úµñ÷îÝ‹½½=³fÍB&“1bÄ6lȆ èܹ³pÜo¿ý¦RçJ¡P`mmýÁ4ØråʱqãFtuuÑ××§cÇŽLš4  dêmØØØ`ccC@@€Z^gnôíÛ€еkWš4iÂ?ü ´›››³páB:Äž={M]]]´µµUú:yò$Mš4aäÈ‘H$FŽI5ذaýû÷Ž›7o¿ýö™þ‡ŽŽººÿævttdýúõ>|777AƒGDDDDäôë׊+2}út,--iÞ¼9Ë—/Ïvœ cÇŽÅÎÎNeýúõ3f ãÆôž”˜™™1zôhš5kFÛ¶m2d”-[–!C†º‡æææ 2„† àììÌ!C055eĈtêÔ -­âõóèÑ#~üñG¢¢¢èÓ§Ti aÊ”)ܼy“ðÃ? ««‹•••J™*SSS¬¬¬²Ý‹#jw°´´´(]º´P«.&&†ЪU+¦L™€½½=®®®*S‡IIIüóÏ?L›6-Ïš …‚ÔÔÌ2@r¹œ”””bUîþýûìÙ³‡uëÖÑ¥K! ×ØØOOOLll,ÑÑÑÔª•Y¨k×®tèÐA¥/™LF©R¥0772¯å£G°³³cÆŒÈd2ÌÍÍùþûïÑÒÒÊvœ…åA>ŒƒƒOŸ>ÅÅÅ…¿þú¿öÎ=8ª:ËãŸ_w:Dˆ!ý8.Ø…l`·| ¸Š(àH´qY|@fvU„2bI´`†]J†@b%0ˆ%²UË"B` -S‘W6IȽ·›ôð0„gwßßþAº'’tbwn§éÏ?Ißç¹·oÝßéß9ç{¶Úo2Nœ8q¢‘@ØjâĉLž<)%_}õÕuÛôíÛ—¢¢"rssÙ±c£F ''‡;v››ËìÙ³Ù¶m/½ô>ø `Þ¼y¬^½šåË—“ŸŸÏwÜAjj*ùùù<ýôÓÀµ™ üüüà¸0sæLòóóùòË/™3gkÖ¬aÑ¢EíuKZÍ™3gظqcPì·qÿÚšš6oÞ¼†Q£Fa2™øâ‹/øôÓ¿5‘),,¤¨¨(ªÆù¦ˆ¸ƒ5sæLÊÊʘ3gn·›‚‚._¾ÌÆ0`C† ¶Òh¬²¼dɬV+Ï=÷\“Ç?wî\P jÿþýäææ2GEEE¼ùæ›üôÓOL˜0Õ«W§CüqzöìÉgŸ}Æ‹/¾È믿Îúõë›<Ö„ (//'//Ó§OóÉ'Ÿõnz÷îÍèÑ£yâ‰'€–Ûb<óÌ3!xë­·ÈÍÍåÓO?%%%…‡~8|'Nœ81À¶mÛ(,,$;;›wß}—ââb–-[vÝ6]»veôèÑÁñ*à`ºLÜÿýŒ1‚‹/òÚk¯‘ÀäÉ“±X,Œ7ŽáÇßu…¥K—2tèPjkky衇~æ•FŽŒŒ 6lØÀâÅ‹9tèëÖ­»n}ZZ ,ŠFoݺ•K—.±iÓ&233ÉÊÊ"33“ŒŒ ŠŠŠ®“}‰V"î`íÚµ‹¹sç2zôh²³³ƒ¥Å]œ©S§2vìXJJJ‚:8Ž?Ζ-[˜3gN‡˜¼^¯—õë×sß}÷1räHŽ=JVVwß}7ݺujü´„Óé$77—±cÇ2xð`JKKk*÷uuuL™2…'Ÿ|’ªª*8Ð챺v½Ö·6àŒþvtåÜ8qâÄ 7çÏŸgîܹÁ—ËENNÎu}ËËËq¹\x<àZ(«sçΤ¤¤àv»©©©¡®®ŽŠŠ éÑ£Äï÷süøq._¾|Ã5áïìÆìÞ½¯×˹sç® ¥E³¤¤$ºwïÌ‹’’¸qã¸|ù2‹/fåÊ•¬[·¿ßßàç÷Õl/BØJ)¯´Å».++£°°ð†åš¦ñõ×_3iÒ$Ìfs“ŠäK—.eüøñÑâ`ˤ”!•:äå员˜ì–’’‚Ç㡪ªŠýû÷#¥$''‡òòò ˆ`SÚ>•••×)Ú¨««ãóÏ?gúôé˜L&Þ{ï=¤”¼ÿþûLš4‰±cÇÞPX°oß>{ì1^xá:uêĸqãÐu=Xµ º®_©·Ëg³Ùü€9äceeeôÿ¤j¡>ã±LàèºÞ¦÷_Œ3ÏC§N®4®fkމ'¢ë:ÅÅÅìÙ³‡)S¦`³Ù®p „V°_ºt‰ªª*ÒÒÒ8p çÏŸ§_¿~ÔÖÖâñxصk3gÎdÚ´i9r„Áƒ÷Õ4 ŸÏGzz:ݺu»®BC)2m™]iâÿˆPYYÉÔ©S™5k .dáÂ…¼úê«ÁõN§3˜³ÜEQعs'ãÇÇãñðý÷ßG¤¯f§NÂ~BžÁ2›Í7WÅû¬Y³³ÙÌ… ؾ}ûM·©®®n6lÖžH)ÞƒÒPö©¬¬d̘1¬\¹’?üÇÃ;#ÏçÃét2þ|n¿ýv>þøc éß¿mÍê×®]‹"ØÓ Àb±˜˜xÓiç‚‚Ö¯_Ï#<¦M›°Z­Ì›7¯Å φž )¥Oq¬M†ÇÇ¥”±æ`…ôŒÇ2&“é—ËU\6Ø£ û`•••. ä\’´´4V¬XÓ餴´”ádzeË–4ÆæÏŸÏùóçÙ¹s'{÷îE×uÞxã ¤”lذÒÒRÞ~ûmV­ZŒðèºNmm-{öìaÈ!;v »ÝÞæëm‚Ò&þ(k×®Åív3aÂ222BÞ§sçÎôéÓ'R³W§ëŸ‰°"Bõz…Âf³º‡ëä}úôaïÞ½lܸ1§Žf¤”¿Ò4m+€ÃáxZJrïäädL&Sp–ª!Bz÷îÍÅ‹©­­m“m=zô ¸¸˜}ûö1cÆŒ÷³X,¤¤¤pêÔ©Ööi«QUµwàƒÝn_ <ßšÄRÊõš¦5,Øq8'¥,3Ú#±X,¶À‹×f³ýIñK£m2 !ÄoEù½Ñv„ »Ý¾¸±Óx¤¥¥‘™™‰Åbaÿþý‰s§wIDATA‰!#FŒ ®®Ž~ø¤¤$²²²8}útp¦¥gÏž 6 ³ÙŒÓé :ÝvÛm\½z•ŒŒ <ûöíÃb±Ð¯_?ü~?Bî½÷^®\¹BEEýû÷GQª««0`Ý»w§¤¤ŸÏGVV‹…ï¾û.¤ëB,Qe>€ÃáxWJ‘AøÎ;ïdÚ´i¸\.6mÚ\KîÏÎΦ¸¸˜ÊÊJž}öYNžØíö•Àlí1)嚦í1ÚŽpI§"TFŽÉG}Ä?þÈ€èܹ3yyy¬Y³&âçn8a`³ÙžBl‰øIÛÀ=÷ÜäI“˜5k+V¬¸©<ÆÏ¥¡³NZ+šá$LVAA[·n¥¬¬,*:܇€'à\¸Ýîv»ý¯@Š6×*\8À±cÇÚ­²B×ug£Ï%·xŽŠ³åM:RJi·ÛÀ­ZZÚø;¹ï¸è^¯÷ÑF„]×F¿³JKKY°`V«•Í›7sðàAÊËËÛåÜ&“©¤áÿÑ*{’’BÿþýY¶l«V­ŠÈ9gá¢U3X6›-[ñ'nÁdf!ÄrEQ~Ýp™ÃáX.¥œk”Mâ5™LÙÕÕÕÁœ !D‚Ýn?$¥d¤aQÖ¥K—Áååå1“ÀápL—RþÁh; "GUÕ`@¯^½R-Ë1nͽ?ªªú”ÑF„“ôôôä«W¯R¶¥½B|£(ʃ —9ŽÝRÊ 2ÉH܉‰‰™'Nœ{­U2 š¦9…ï…Ûˆ@¹”rAã…>Ÿopc]mŒ#„XÜй‚k‰îº®?ÄT¢wø…ÓcѹPeðµÑv´7Bˆ- +€šš·”rŽQ6Èi¯×s¡ÑúõE£í0€ &“é†DÝúe °Çh^Œ„smÐÁJNNþ-1TM:𼪪¯p»Ýt]ŸDçÜjdpªªºäf+4M;(„x¿½ 2˜¥Š¢4/:ÖÁBÌZîÒ;xü~ÿ¿Þl…¦i€mílѼRSSã6ÚˆH ªêv Àh;Ú™7OžŸïû[yÀi!„p8¿Ðu}(0X‘d´MÍ!¥¼üÙï÷—¸Ýî° ;Žžº®5™LCèí¼ èº® !þ¢ëzI×®]Ko•pwkHOOOöz½ÙRÊaBˆh—sRÊ…%‹åÏ'Nœkk§ôôô$¯×;¤þ^dÝïo¤”îú{áŒT•`K„ÝÁŠ'Nœ8qâĹÕéˆáš8qâĉ'Nœ¨&î`ʼn'Nœ8qâ„™ÿ7’Öºô°IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_curvefitting.pdf000066400000000000000000000336221202542755000220240ustar00rootroot00000000000000%PDF-1.4 %¬Ü «º 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /CreationDate (D:20081113011735-04'00') /Producer (matplotlib pdf backend) /Creator (matplotlib 0.98.1, http://matplotlib.sf.net) >> endobj 3 0 obj << /Count 1 /Kids [ 4 0 R ] /Type /Pages >> endobj 4 0 obj << /Contents 5 0 R /Type /Page /Resources 10 0 R /Parent 3 0 R /MediaBox [ 0 0 576 432 ] >> endobj 10 0 obj << /Pattern 8 0 R /XObject 9 0 R /Font 6 0 R /ExtGState 7 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> endobj 5 0 obj << /Filter /FlateDecode /Length 11 0 R >> stream xœ¥šK·…÷÷WÜe²˜6YÅçÖHb@@Ž…dm$¶ @’!%ÿ~¾CvÏ}v[€ò̰‹d=Ï©ê¶ßœãùÿ¾;…s8<çZøùaüLnü^²~ú¹ïNÕX\Lò±-iþñaýÃ[[!tõëaÿç׿R*Oy)ç/?ÿqþÄRHWýmÜCX,ëÑ,è>­¥¾„’[ð\SâÌN=-ès\¼ZÌ–«„×e~$ìi9‡àC>Ʋ”Ć´”œ[Õ²³a[ï}©%§R“µ¹ÁÛÒË™³dJ(øDêlëKbòæ¥Y™;J\Øl޲Á­÷bÒŽ¹î¡-µÕ`ͺ­J5dž˜ ©´Ò†±ì—ž,3_å-ä¥ãc«‹»…s) ÛzÅúò-ǹÃÚb‰+êR°1çî­jÇ\W$¼áT+¹ÛܑÒQª¤¥UœšSŽQ;溬ðnµòÏòÜQmiØÓbîÜP²;Öõ–dÝ= ±ÚÑóbÃçH GÉð_/¸$· uÉ< ĪY¬¥¤¨hoë88Äh9¥–úÜAaÅŠì9[´âŠÅºÎßKï©•lM/¶ph´Ž™¹Fï#û¶åV–ˆ÷R©L×z#ÉùÚqHáö‚•Ú±®WÇúìÅ{÷騄þ<ˆN°È>C[yv].$'4ÏÖ¦Jüµà%³[ ©š‚½®ÆÄrÈ5—ÎSžj #Ái|ÑúÄ'ìa àRSÍ@ïÙƒ¾˜ŸàÊ#‘îÙCd èǸèO؃È*Éòÿó wœN3ÓI$xFªä¦¡¤ íoøã$vñÂñ×Ü~G ðKÅ÷ª iwË'ñKÉèªÕ?ò¥Ñ˜p 0â†@NâœE¥'’ÔUöªÔ¹œo dή‰¶èËPzµÒxä0´»á“ø…b*ï×üŒ?¨, ‡¼Çz~C 'ñ °C[ÔësqR»7ü_¬Þ2ÈI Ò§À–¬Æè‘AL•õúJ ƒWšk˜ýJy3(ä×Ë ˆÏ§¸Ž$¯"þùñüÍ_ÃùO¿¼Ê¨y7®×hF9å»+…„0ƒâv…&a7îÚ•2M–ë¸+7èã*¹¾¯ÖhÒ4Y1ÂíJ½ ÆD¦öÅø¡¾â§´÷ŲÌ!:¦Š}½ !œ cÿ4—ñ‹áÞ?+©))%g'gì¤0i A‰§ùJS䣰Λ&Ç}+éÂq]€z„=1RœbÕ$Å<·ŸŠªÚÖ Ù|ÿJ°³3±ÑÄ~}Ø÷¿»bn_Ô“ãÇÀTr‹Ý¶Ô|"%º¨UBµî éõý<™Ê¾”é5!ˆRhÊw¥¨+ 9¸÷ÕEâd[ ÙöU±&€´ÉdȾ@Û;,ì´Úûz½ÀÈL<´ƒÓÄ ¤oo9ïû‚ª"ôЖ¿íGÐE¥| ]ˆ3åª >P-ÒY2¯4š2ÛWí¥ >Dë%Fõ1TÃPôÑT·Zh€ ùýxÒ0c ŒWªŒÊÚ§Y¾ûªŠ™g}y7Kç®bè’¹?¤ê"³q²=I;zm14Ù`ú™ˆ¯×Ù·,"¤·™¾‰¡íJÑAÄá“ðZ ϤÔ(Tò2hPÝU‹xY§áu½çÝ“Rújœ(9Ú¾ö/ tÔ 2´ptX×;õ¢°í»õE–òƒÖ÷ý㢳yÖÓüÐHðÐ-îûìÅé|9‰¨3ùì‹Eù6¨ãyß·/ðc~Ó$r _Ñ2‡ÒìŠIJ@„ÇÚ¾þ ®>¹ ×Pæª_Ê•˜*æ•FnkaÔÐô)yót~YÓ|Æw¬_Oß¾=óÚJ;¿ýù$n£ëw™xÆ«Ý|~û¯ÓÂÏoÿ}þóÛÓýÅókËåî|÷ú9ær}9¸^sMéÏûÓ¼<ï]>?y\.¯÷—O«ËÛÁåú’Dߌ»ÖÏú½SàJ4H´Ìðçùq×þ«‰óðxÿõÆ)b÷gJ•^Öã½l×7‰2ïAû䛒/ÃU†å(ë4Ê#ñïò#,A/Ü«Þ\¼\†sNhöÝ„ºøò'|ó÷Ÿ¾üøòñý§ÿýg-¡gVÌ7`Sɇ$^g¤+‘£,Ö·>~%õV3¦¦G>´­E9<ï¾¥°æêŒld˜¿¾z7ƒ„ ¦l=û!×ü¹ˆØQþf}I1ð—p¥B<´þ*?í·SØŽSx±¿D —*¾xÁÎo~Ç'ùPíÝøÉtØiX ú’§Y;i×eñÃe‘A~HÚ6Ÿ—n¶Žÿ}`ýħ— AómokbÂJÙö‘Æ Ø(O¤êÕkÞë2¾ÑK„b÷\?™À6xZÿÃæiÚ¹WcHNc[Q‹Õ’Þ¸ oÿòåý»÷Ÿ~ü°¹ü`«~Õ»´-P?¿ÿï¶ëô眹¼ endstream endobj 11 0 obj 2974 endobj 39 0 obj << /Filter /FlateDecode /Length 304 >> stream xœ=’;’Ã0 C{‚ÈŒø“äód'•÷þí>2ÉV€I‰(/u™²¦< i& ÿÑááb;åwØžÍÌÀµD/Ë)Ï¡+ÄÜEù²™º²:ŪÃ0[ô¨œ‹†M“šç*K· žÃµ‰ç–}Ä74¨uK ÝÕhY Ípuÿ;½GÙw5<›TêÔQæù!O¢‡éJâ|<(!\{0FäSÑ@޳\­ò^Bö·²ÂAjIç³'<ØuzO.nÍd¹TøNQìíÐ3¾ìJ =¶áXî};š±é›8ì~ïFÖÊŒ®h!~ÈW'ë%`ÜS&EdN¶Xn‹Õžî¡(¦s†s êÙŠ†RæbW« ;o,/Ù,È”Ì 2F§Mž8xÈ~šôy•çxýlós; endstream endobj 40 0 obj << /Filter /FlateDecode /Length 338 >> stream xœERKrÅ0Ûç\ 3ægãó¼NWéý·•p:Ý<ô  2=eH¦Ü6–d„äò¥WdˆÕŸFŽDÄß)¡À®ò¹¼–Ä\Èn‰Jñ¡?—¥72ͮЪ·G§6‹F5+#ç C„zVèÌîQÛdÃëv!é:S‡p,ÿC²”uÊ)”mAߨ#èo<ܳær³¹Lnõ¿î[ ž×:[±m@ –sÞ`Äà ÚÄÜÚÞ)(UºŠI­ò\';P¶Ðªt¼7€9`Ã’­×hoÃ>ô¢FÅö ¨, þÎÙfÁÞ1ÉH°'æN=q:Å‘pI8Æ@Š­âºñØâ/®ˆšð u:eM¼ÂžÚâÇB“ïRqð"n]EµlOç ´?*’3b¤ÄÑ ‘ԒΗõÐû¸‰¯Äæž¾Ý?Â9Ÿëû¸ƒà endstream endobj 41 0 obj << /Filter /FlateDecode /Length 133 >> stream xœMAÃ0ï~…ž€±óžtzJþ-6î팀‘†03× endstream endobj 42 0 obj << /Filter /FlateDecode /Length 68 >> stream xœ32·P0P°4†& æf )†\@¾©‰¹B.H Äʳ €´%œ‚ˆ[B4A”‚X¥f&fI8"—É´å endstream endobj 43 0 obj << /Filter /FlateDecode /Length 45 >> stream xœ32·P0P°4†& æf )†\–V.L,ÌÑ–p "žŸ} µ endstream endobj 44 0 obj << /Filter /FlateDecode /Length 214 >> stream xœ=P»C1ë= äÎ|í7ÏË¥Ëþm$œ¤B6B”šLÉ”‡:Ê’¬)O>Kb‡¼‡ånd6%*E/“°%÷Ð ñ}‰æ÷ÝÕ–³C4—h9~ 3*ªÓK6šp*º ÜÃ3ú mtV‡±[ Ф`×¶ rÇ Á™‹" JMÿ­r÷RÜï=o¢ˆ”tð®ùåôËÏ-¼N=ŽDº½ùŠkq¦: DpFjòŠtaŲÈC¤Õ5=kµ®Þzù7hGt€ì‰ã4¥CÿÖ¸Ç뇊Rô endstream endobj 45 0 obj << /Filter /FlateDecode /Length 161 >> stream xœEKà C÷œBGðG|žtºJï¿­!M³€§±@w'©µÑ/mKº >[ ÎÆxè6n5äu€V¤ãh”R}¹Åi•tñh6s+ ­fz”£ :Þí¢är¦îÎùGpõ_õG±îœÍÄÀdå„fõ)î|›Q]ÝdÒcnÖköª°´¬¥å„ÛÎ]3 î©íý©s:„ endstream endobj 46 0 obj << /Filter /FlateDecode /Length 210 >> stream xœ5PË C1»g ¨džV½uÿkmÐ;aÿBXÈ”y©ÉÎ)éK>:L¶.¿±" ­u%ìÊš ž+ï¡™²±ÑØâ`p&^€7`èi5tႦ.•BÅ%ð™|u{è¾OxjrvCÉ` jºMX´<ŸNâÿ~Ãî-ä¡’óÊžùœíð;³ná'jv"Ñr2Ô³4ÇE> stream xœE¹C1DsUA °ê±ÇÑwÿ©ùJ´o-‡¯%Sª'"¦Ü×hô0yŸM%V,Ø&¶“rAJ1˜xN1«£·¡™‡Ô븨ª¸uf•ÓiËÊÅóhW3“=Â5ê'ðMèøŸ<´©è[ ¯ ”}@µ8IP1}¯b£œv"œà>G™)#qbn ì÷f¾W¸ÆãÝ7y endstream endobj 48 0 obj << /Filter /FlateDecode /Length 49 >> stream xœ36´P0P040’F†@–‘‰BŠ!HÄÌå‚ æ€Y@¢8®&‡+ Æè & endstream endobj 49 0 obj << /Filter /FlateDecode /Length 248 >> stream xœ-Q9’AËçzBsÓï±Ë‘÷ÿé ʃ†C :-qPÆO–+ÞòÈU´áï™ÁwÁ¡ßÊu9HÒTM¨]¼½vfó¤5,ƒë?c 7zqxLÆÙíu5{×kOfP2+qÉÄSuØÈ™ÃO¦Œ í\Ï È¹Öe¤›•ÆŒ„#M!RH¡ê&©3A£«Q£Å~éË#aU#j û\KÛ×sÎ4;«<9¥GWœËÉÅ +ý¼ÍÀET«<p¿ÛCýœìä7ÞÒ¹³Åôø^s²¼0XñæµMµø7/âø=ãëùü¨¥[ endstream endobj 50 0 obj << /Filter /FlateDecode /Length 247 >> stream xœMQ»mD1 ëß\àëkyž R]öoCÉ ¡/)§%öÆK á[¾ä‘UC?1ì3,=ÉäÔ?æ¹ÉT¾ª›˜Pbáýh¼t/"+Êße sÎ÷ࣗ`&4`¬oI&Õ¼3d‰¡ŽÃA›TwM,®Í3ÈíV7²:³ lx%âÆDÙÍ`£Œ±•År¨ ’Z`×éQ‹‚+”Ö t¢ÖĺÌà«çöv7C/ò਺x} ëK°Âè¥{,|®BÌôL;wI#½ð¦fR™‘•:=b}·@ÿŸe+øûÉÏóý (\* endstream endobj 51 0 obj << /Filter /FlateDecode /Length 80 >> stream xœEŒ» À0D{¦`~&fŸ(•³ JÜpOº{¸:2SÞa†‡ž ,†Sñ™£`5¸FR죰n_uæzS«õ÷*Ovvq=ÍËô endstream endobj 52 0 obj << /Filter /FlateDecode /Subtype /Form /Length 37 /Type /XObject /BBox [ -184 -236 1288 929 ] >> stream xœã240S065UÈå276³rÀ,#s# $‹`AdÓ_ endstream endobj 53 0 obj << /Filter /FlateDecode /Length 131 >> stream xœEË ! CïTáò>©‡ÕžØþ¯ë0šABøA";ñ0¬óò6ÐÅðÑ¢Ã7þ6Õ«c•,ºzRV釼òPi0QÄ…YLCaΘÊÈ–2·á¶Mƒ¬l•T­ƒv<¶§e«~©maê,ñ ÂU^¸Ç ?K­w½U¾BS0— endstream endobj 37 0 obj << /FontMatrix [ 0.001 0 0 0.001 0 0 ] /Name /BitstreamVeraSans-Roman /FontBBox [ -184 -236 1288 929 ] /Encoding << /Differences [ 46 /period 48 /zero /one /two 53 /five 97 /a 102 /f /g 105 /i 108 /l 110 /n /o 114 /r 116 /t ] /Type /Encoding >> /BaseFont /BitstreamVeraSans-Roman /Type /Font /CharProcs 38 0 R /Subtype /Type3 /FontDescriptor 36 0 R /Widths 35 0 R /LastChar 255 /FirstChar 0 >> endobj 36 0 obj << /FontName /BitstreamVeraSans-Roman /Descent -236 /FontBBox [ -184 -236 1288 929 ] /CapHeight 730 /Ascent 929 /MaxWidth 1342 /StemV 0 /Flags 32 /XHeight 547 /ItalicAngle 0 /Type /FontDescriptor >> endobj 35 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 636 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 636 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] endobj 38 0 obj << /a 39 0 R /g 40 0 R /f 41 0 R /i 42 0 R /l 43 0 R /o 44 0 R /n 45 0 R /zero 46 0 R /r 47 0 R /period 48 0 R /two 49 0 R /five 50 0 R /one 51 0 R /t 53 0 R >> endobj 6 0 obj << /F1 37 0 R >> endobj 7 0 obj << >> endobj 8 0 obj << >> endobj 9 0 obj << /M17 29 0 R /M1 13 0 R /M6 18 0 R /M9 21 0 R /M18 30 0 R /M16 28 0 R /M0 12 0 R /M2 14 0 R /M4 16 0 R /M14 26 0 R /M20 32 0 R /M8 20 0 R /M15 27 0 R /M11 23 0 R /M22 34 0 R /M3 15 0 R /M21 33 0 R /M19 31 0 R /M13 25 0 R /M10 22 0 R /Vera-minus 52 0 R /M7 19 0 R /M5 17 0 R /M12 24 0 R >> endobj 29 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 13 0 obj << /Filter /FlateDecode /Subtype /Form /Length 24 /Type /XObject /BBox [ -3.25 -0.25 3.25 0.25 ] >> stream xœ3VÐ5PÈUÐ5V0PÈá æÀ endstream endobj 25 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 15 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 30 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 27 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 14 0 obj << /Filter /FlateDecode /Subtype /Form /Length 139 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ}P¹ 1 ë5…¡Ço›UܤÉþmNMÎpi Ðâ’‘ ?Èe¬Öy™C)­Ía«‹V$-}ÚbáQ'jS¶jÝO7‚IÁåò½# ·¿¿ŸS Aؘˆ‡E̲‹âéQ™:¥À¸EœÉâ†ÞÎÖ@æ¡ç]ÝçäfŸ”J^ö /øŒî[ endstream endobj 23 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 34 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 28 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 26 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 16 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 17 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 32 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 33 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 19 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 24 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 21 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 31 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 12 0 obj << /Filter /FlateDecode /Subtype /Form /Length 24 /Type /XObject /BBox [ -3.25 -0.25 3.25 0.25 ] >> stream xœ3VÐ5PÈUÐ5V0PÈá æÀ endstream endobj 20 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 18 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 22 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj xref 0 54 0000000000 65535 n 0000000016 00000 n 0000000065 00000 n 0000000216 00000 n 0000000275 00000 n 0000000511 00000 n 0000009007 00000 n 0000009039 00000 n 0000009060 00000 n 0000009081 00000 n 0000000382 00000 n 0000003560 00000 n 0000012444 00000 n 0000009541 00000 n 0000010316 00000 n 0000009853 00000 n 0000011209 00000 n 0000011364 00000 n 0000012757 00000 n 0000011827 00000 n 0000012602 00000 n 0000012136 00000 n 0000012912 00000 n 0000010590 00000 n 0000011981 00000 n 0000009699 00000 n 0000011054 00000 n 0000010162 00000 n 0000010899 00000 n 0000009387 00000 n 0000010007 00000 n 0000012290 00000 n 0000011518 00000 n 0000011673 00000 n 0000010744 00000 n 0000007777 00000 n 0000007562 00000 n 0000007152 00000 n 0000008830 00000 n 0000003581 00000 n 0000003958 00000 n 0000004369 00000 n 0000004575 00000 n 0000004715 00000 n 0000004832 00000 n 0000005119 00000 n 0000005353 00000 n 0000005636 00000 n 0000005866 00000 n 0000005987 00000 n 0000006308 00000 n 0000006628 00000 n 0000006780 00000 n 0000006948 00000 n trailer << /Info 2 0 R /Root 1 0 R /Size 54 >> startxref 13067 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_curvefitting.png000066400000000000000000000701641202542755000220410ustar00rootroot00000000000000‰PNG  IHDRôv˜®jYsRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ ¤èÚ IDATxÚìÝwxTÕÖÀáßÌd&½÷„Jè-t=t°ÐÁ^Q”"EPšT. ú! r¥Ko""B %”@zHÏdæûc_@€ ¤¬÷yæa˜9s’¬s’uö>{¯­1›Ífr!%%…±cÇràÀN:Å Aƒøè£rÜöÔ©SôêÕ‹äädlmm(_¾<‹-ÂÚÚ!„Bä-‹Ün¨Ñh¨R¥ µk×fÉ’%¹ú̧Ÿ~Jpp0z½+++‰¸Bñ<ºµµ5}ûö%== 6äê3NNN¸ºº¢Õj±°°@£ÑHÄ…Bˆç™Ðk§øúú2nÜ8ÒÒÒ°²²bÀ€¼ð XZZJÔ…BˆÂн¼¼˜0aÎÎÎdee±gÏ&OžŒ§§'5º½ÙlfôèÑr„Bˆ\š4iRŽã|Ièööö·ïòÍ7ßðÇܗзmÛÆ_|!G¨øúë¯éÞ½» |,:DFFõêÕ“`rF£‘%K–ðÖ[oI0Š€aÆ‘™™ùìú½²²²0ètºûÞspp V­Zr”Š€Í›7Œ£KNN&==]~7‹HBß°aƒË"ÂÑÑñï=VB?þ<±±±ÄÅÅaccÑ#GðññÁÊÊŠ¥K—R£F BBB8yò$ááá‘™™ÉæÍ›IHHÈÖ:B!DÞy¬„>cÆ 666 2NGLL ŽŽŽ 0KKKÂÃÙ7oIII 0à¹Tç“„. ®óçá·ß 5.]//°´„²e¡}{0$FB1«V­Âd21aÂjÖ¬‰F£¡ZµjtìØ‘_ý•’••E¥J•;v,ÞÞÞ9î'**ŠŸþ™ºuë2~üx F£‘ÔÔT>úè£G~5jÔ`̘1ØÛÛc2™8zô($!!BBBhذa¶ûõ)))lݺ•îÝ»ãåå% ]ˆÛ o_0›áÝw¡cG  ÚÔBI{öì¡bÅŠTªTéöÚ5kÖÄËË‹“'O’™™‰N§£ZµjMšQQQœ9s†‘#GbøßÅ¿……Åí®úGiÔ¨Ñí•#µZ-åÊ•cûöí¤¤¤àììÌÍ›7Y¶lëׯ'>>“ÉDBB>>>$%%=—ØIB—…ü³«Á ž?§{SB_ ññù³oƒ xø6éééXXX`aq'=i4¬¬¬ÈÌÌÄd2¡Óé°²²zèbPYYYdffbeeuÏŸ•ìû~ð÷jȶ­V{»;?99™Y³f±mÛ6úöí‹¿¿?–––lÙ²…­[·>·u$¡ !„¸ÍÏ\\òïýQ¹~ý:ÑÑÑ·»Ó“’’¸ví7¾ÝÚ~;;;ÜÝÝ9sæÌí×Ìf37oÞ$!!á©~ޏ¸8þüóO^yå €V«JºìÞ½ûù¶äôBñÐÐçûõ_{í5úôéòeËèÖ­&“‰Å‹cmmMûöís½D³ŸŸ¡¡¡,[¶Œ-ZàïïOLL ,xê´¥¥%®®®>|˜ððp aaa,_¾777IèB!Dýúõ:t(+V¬`ݺuFÌf3ǧ~ýú¹Þ••}ûö导ùæ›”(QƒÁ@PPçÏŸ¿Ýª~{çß}!áêêJŸ>}˜2e ¯¿þ:NNNèt::vìÈ®]»ø9IèB!Š kkkú÷ïO‹-¸qãZ­OOOÊ–-{;9~ùå—9Žn2d¶¶¶”*UŠ)S¦púôi222puuåܹsìØ±ãv×½¯¯/ .¼=ÇÝÅÅ…Å‹SºtélûîÒ¥ M›6ÅÝÝNGÛ¶m)[¶,W¯^E¯×ãëë‹­­-ݺuÃ××Pë–-[†£££$t!„Å3©W®\™Ê•+çø~HHHޝ߻}tt4—/_ÆÇÇNÇÍ›7ùâ‹/hÒ¤Éí®q[[Ûlû³´´¤aÆ÷í;00ÀÀÀÛÿ7 T¨P *dÛîî //¯g:}MºBˆ")::š?þ˜¸¸8¨P¡|f­ægIºBˆ"©dÉ’LŸ>¨¨(ŒF#ÖÖÖàááñLïmKBB!ž‚¥¥%eË–¥lÙ²Åâç•õÐ…BIèB!„„.„BIèB!„„.„¢2™LüþûïtïÞÆóÉ'ŸÐ¦M~üñG@UqKII!##C‚% ]!DAuüøqFމ»»;ï¼ó-Z´ÀÅÅKKK"##騱#sçÎ}n+›D2mM!DÉ76l%K–૯¾ºÐ…´Ð…BpÿùÏxï½÷ˆŠŠ¢K—.Ô¯_ÿv÷ûªU«0``Á‚„„„P¿~}þüóOi¡Ëé#„¢ ¨_¿>:uâ‹/¾ ÿþ¸¸¸P®\9ˆ‰‰ {÷î\¸p*Uªðâ‹/¢Ñh„.§Bˆ‚¢bÅŠ4lØ%K–о}ûÛ+—Ý­I“&,]º”*UªÐ¹sçG.…* ]ˆçÌl6só&‡¶nåÊ_Q鯿¨äꊭ½}‘¬Ã,DAðÚê׸–t-_öm«·emϵdI袸9þ÷߬ûmª;F£´4õí˶mé4c¾Ò½&D¾ø¶Ó·„BJú)D”œœÌžeËxùðaZ¥¥t½u‹rëÖqhãFŒF£IˆbLzé$¡‹BâêÅ‹8ïÛ‡off¶“µrr2Q6–’"A¢˜Òëõ8::rùòebbbˆ—‹|I袠2XZ’igGÖ=WáiZ-NNhu: ’Å”££#­ZµbçμñÆôíÛ—“'Oû¸È=tQ yûù‘T¯ç÷ì!øåÀa{{<[´ÀÊÚZ‚$DU­Z5,X€³³óí×æÌ™Cùòåo·Ð»téBPP×®]Ãd2ááá! ]NQYZZÒmèPþsó&Gwì dDG‚‚°åZ¿ø¢LS¢óññ¡S§NÙ^{饗îk¥7nÜX‚% ].nn ]¸GrmÄ:LžLÉúõ%0B! ]6:ŽªÁÁT // ˆBHBâ.çÏêU˜ûöA™2àîAAÐ¥ ØÚJŒD‘àïïOóæÍ%…@rr2z½^º¥ti9R=>^yjÔ¸ˆ"ç믿– 2²H!„„.„BIèB!„„.„BIèB!„$t!„BHBB!„$t!„BHBB!$¡ !„BºB!$¡ !„â~²8‹x:'N¨UË22àï¿¡reÐë¡jUèÜt:‰‘BHB^¥Jê* ÎÎ!„xƤË]!„ºyÃd6‘ž•®NJ:­­F®7…Bº(IüJâ.'\ætôiþ¸òfÌxÛ{ãïèO\¨gµY‡Å,þØ‹þJZ7w([VîÏ !„$tñ<]Œ¿È«8põ'¢NeÊ¢„C jz×D¯Ós3ù&‡®âpT á7ˆ¿u“xÇ+˜·þAoE`¹:tuLG ¦BHBÏJš131gØyi'»#vs>ö<ÎVÎÔö©Í˜†c(éT+ì öh4ŒYFÒ³ÒÉÈÊ #+ƒtc:©ÆT®ÝºFxl8»"vÑ{m?BK…Ò£RJ¹”ÂÚÂZ-„„.D~0›Í\ˆ¿À¿ý›ßç¢{Eù5â£&QÚ¥4ÚœO?½N^§¿ïõònåi^²9ýjöcÄ~–YÆÛ¿½M]ߺ¼XîE‚½‚±·´—À !$¡ ‘—öFìeÚži8X:°è…E”w+•…ÕSïWƒ†ú~õ©æUc7Žñó響m<Nô îKˆ_È/„Bº¹i•·ÒYuj_üŠ®»Ò»ZoÜmÝóükÙèm¨[¢.U½ª‘ÁêÓ«µe¥œJѧzBüC°ÕÛÊABHBâqŠ:Åü³ßp6æ,SB§Ð<°9&_¿¦µ…5e]Ë2:d4=+÷dűLÚ1‰†þ é_³?Nùþ=!Äó&}Ež0™Mìð7óþ¶˜Ì&æ¶™Kó’ÍŸy" p `Dƒ,ì°+‰WxoÃ{üyíO9@BIèBÇíSRRXµj«W¯F¯×Ó¥K:uê„……\?™¦LVž\‰ÁŽ>Õû }HIWƒÁÀ‹½zס©¯¿ŽóСØúøú¸Ù¸1"d3÷Îdôï£ù´å§Tt¯˜Ë»AÛ¶êùÙ³P¯„†Ê‰%„ÈW¹º‡n49uê:ÂÂÂ09n›‘‘Á—_~É’%Kx÷ÝwéÑ£Ó§OgõêÕíBâTÔ)V\Eÿšýñ°õxôI¤ÕâêæF l­­‹Lœ¬œÛh,U<ª0vëXÂãÂåäBî„niiÉ Aƒ˜>}:7~è¶111lÚ´‰~ýúѼys:vìÈ«¯¾ÊòåËI¿k1 Q0¥ÓøìÏh^²9u|ëûxXë­\w0ÎVÎLÛ=¸4Y¸EQˆúãHJJ"66–Ò¥K£ÕjÑh4Ô«Wëׯsýúu‰xf6›Ywv'£N2¨î ¬,¬ À÷&deAf&dd¨‡ù.ÓêcïÃäf“¹vë3÷ÎäVú-9Y„NžßÔ6F¬ïêzuqq!33“ÄÄÄû¶OHH`ÿþý·ÿïèèHéÒ¥1ÈÀ¡gîBü–ü½„wj½ƒ¯½ï3ýÚ&\ºqq–¦Æ•¥¥©ãqqê `i µkCÙ²àë ^^j y~òuðe~ÛùôÿoæîŸËðñÖ[ËI#„È7F£‘sçÎûµ¸‡,ïœç5 Z­6Û=öôôt´ZmŽI:33“èèè{þ¸›äH>cY¦,ÖœZƒÁŽÖeZ?Óø… °z5üþ;h4*9ÿó°²õpu…€•ä7o†o¾QÆË—‡š5!8X (ϯÙrNŒm<–ñÛÆãçèGïê½Ñ ‘“G‘O ‰‰‰ÙrdFFƳKèÖÖÖX[[{ûµ³gÏbkk‹——×}Û»¹¹Ñ¡C9rÏÙ•[WøéÔOŒm47·|Oâ ¶màïC‡BéÒw¦mçô¯N§ºßU«ýÒ%õùåËaöl5+¬~}hÜXÍÔ³µU yA«Ñ☆c˜´cî¶î´)ÓFVgBä=ƒÁ@:ÙÇ2-Z´èézbb"ñññÄÅÅ‘ššÊÕ«W1™L¸¸¸ð×_‘••E­Zµpuu¥N:¬ZµŠ2eÊ‘‘Á·ß~Kûöíqrr’#T¥f¦2u×TBüBhUºÕC§©=­¤$ؿ֯‡}û zu˜5Ku¡ëõ¹Û‡NÎÎêQª4k¦ºì¯\;Ô~GVÝñ¯¿ B^-qn¡µ M™6ĦÆòéžO1è „– Íט !D®þ>åvÃ5kÖðã?réÒ%¢££Úµƒ¾}ážS%_ j$üĉо=,Zo¼={ªBnªeÿ¤,˜Ðdƒ×æƒß?`jèT||åÄB<r㯻‘|ƒŽÿ@Ê=rUîqýßÿÁ§ŸB×®0lسMæ÷ª][Ý«7¶n…`éRuÑñ4¬õÖ|ÐèÒŒiÌýc.™Y™rb !$¡‹g'#+ƒ™{gRų íƒÚçé ®¤$øâ øê+xÿ}èß¿`¬Gâà ºÝ-‚~ýàÇá_ÿ‚S¬ÈâÉGª:òA£8týßû£É('˜BºÈf³™­¶²ëò.F‡ŒÎÓ)QÑ0eŠˆ6s&tì¨ ÁšÏÞµ+üðƒšÖ6dçˬ;Z‚'- Ñh¨îUqÇñÕÁ¯Øt~Y¦,9Ñ„’ÐEþŠJ‰â›£ßб|GJ:—̳ý&àÀ¸qZNœPI½nÝ‚øäèÐÚÈÔOÌ|ýµªN÷¤š4ᵪ¯1{ßlNGŸ–M! ]ä¯ç6’˜žHÊ=òd&œ> ï\O²ÖŽùó¡N¼›"–Ÿœ¡¿×/|úþ–.…±cáòå'o©÷ªÖ‹º%ê2vëXbScådBHBù#CË.§cùŽø;úçÉ>PÓÒíá³™øû?ÝèñgMO& ê™X¸nÞTë≺à,X{ ¶z[fì™! ¹!$¡‹ü±3R2Rò¬"ÜþýðÁªhˤš¿àlV(ã¢Ñ@ÅŠ0cT©ƒÃo¿ñ Æ·yÛ{3±éD6ïÞÀÔí«8týšœxBˆ|g!!(>Ó™œNß}Ÿz¾´Ù Gލ"1ݺ©9憞…QooÕÛP¶¬pú4¼ù¦êšÏ­¨ÈHÖ~8~?_ F\"'Nã÷Í[è5mžÞÞr" !$¡‹§HÀ¨‘íÑ‘át«Øí©+šÅĨ²ªU\¯ÑÛío ëpýº*Ònk %J¨åÏ´…¯ÈÊ ºwW¥dgÌ€‹aÄUˆæQ233ÙºbÕøfÉÉh€zQQìúé'¶T¬H×!Cdi`!„$tñ­ó´DÖ]G‡]7±·´êý-^¬V;›8Ák—ºáüÑGj²·V NN{TÜ… ðë¯jÙ¶ýûU±yoo(S^|­­-!!*¡ü1Œóæ©’µKÆŽTLMÍvÉT>5•K;wûÚkxùJ59!„$tñ„GæBüÞ{ºrmF#¬Yÿý/,X%«:ƒ¦fá H@¼ý¶ºw0lØž­6Û²oåÊ©jw¬ŠÐÌ«ZêºV1›L™‰ÎlÎöº3×ã"HLKÄ IèBˆ¼'ƒâЉÇWP×·.¥Ÿxf³ý½` ”·«—=û3_«*ÞXYú×ÊJ•´»ç‡òòR*÷Ÿ8¡b‘'WWôÍšqÊÚš»79mÐó“ûMþ{m½œŒBIèâÉ\Œ¿ÈÁkéP¶VVO¼ŸøxÕZ­W^x¡xÅÐÕUæ÷õU÷Ó#"rÞÎ`0аkWöµnͶ¶œþÏÆ†-[ñ¯ùþÔ÷üyõO9)…’ÐÅãÉÌÊdîþ¹4hL]ß'/Ý–šªF}[YÁ!ªQ[ÜxzÞ©€×»7>¬–‡½W‰€F¬\IÐæÍêЀÏ>cÔϿЯEÞ«ûC7åøÍã˜1Ë *„„.rçDÔ öFì¥_p?4OØ?n4ÂÊ•w È<ÏUÓž7{{ÕBoÔFV1É©V§£Výú¼V¯uÑéth4zTîAÏ*ÌÞ7›è”h9A…’ÐEîZçÎm œk9ʹ•{âý<¨VN2*U’¸ÚÚªjruêÀÈ‘j®znéuzÞ¯÷>Q)Q,?¼\‚)„È32ʽ;wžÍá›ßd<Ú';Ô—.Áĉju²ví ñ ¸<æä¤Šêxzª¢:S¦¨Vû]䨬kYÆ5ÇÀu)ïVž6AmÐir¹|kjª*6Ÿ–¦žÿ3¸ÏÆFMœ/HKÛ !$¡‹¼±éü&¼í¼©ì^ù‰>Ÿ’¢¦iy{믌5Í ƒÞz 22Ôªm£FA‹¹«¥SÛ§6CêaúžéøØû윻/𖦮²`ãFptT£]\Ôp|IèBHBEKjf*?ü‰µàbíòØŸÏÊ‚o¾QÝíË—?º Jq¥×«¤ª'£D ¨PáÑ=†Žå;ò×µ¿˜½6³ZÍÂÃ6Avv†V­Ôó¨(ÕEй³!„ÜC/ŠÌf3Ë,ÇÙÊ™ʽ€F£Áh4rýÊÎ¥¤œœüˆÏî]ðí·0u*”,)1}[[5/ÿÕWUrÿë¯Ü­ÔfeaÅÐúCÉÌÊdÎþ9ddeH0…’ÐxÞ3ˆ IDATÅ‘I‘¬:µŠÞÕ{c«·%==ogÏfó€üuò$?ŒÇÁ={0= 뤥©ÖyãÆP£†Ä37,,Ô".ÍšÁ„ pòdî>çcïÈ#Øyi'¿†ýŠÙ,SÙ„’ÐÅÿZçÛ/nÇŒ™ÐR¡˜L&–ΚEÉI“h÷Ûot¸u‹† °ð`.„…å¸]»àÜ9èÙ³xÎ7R––ðþûP¾¼ºŸ“»Ï{32d$söÏáÀÕ2?]! ]@TJkN¯¡gåžØì¹pîšß~£ar2n&¶@¹Œ jœ8Á‘ß~»¿u Ó¦A¿~P¹²Äóq¹ºÂ¸q¤JÅ_ºœ‹_B–vAíhW¦Ó÷LçRü% ¤Bzq÷÷õ¿ILO¤‘#´-7¯^Å÷Úµût‰ôtn9’íµÌLøþ{U<¥S'‰å“úgJ›•L^U‘H]‰G¯ÕóFðØèm˜`>F“Q)„„^\™Ì&¾9ú M›PÒYdó+]šðҥɼk;3pÆÆÿF²}þøqX»;;‰çÓpsS÷Ò“ê„2ùû2¤¥=ú3ÞöÞŒm4–¿®ýÅ·G¿%Ë”%BHB/ŽŽÝ8FXL]*t¹]H¦„¿?î=z°ÖÅ…pŽh`¯ §CB¨öÏô'Ô\êÅ‹¡fMU«\<½2eàãõ\ù=ŒO>QëÇ?Œ Ü+0¾ÉxZ̶‹Û0™MH!„$ôâÄl6³òäJjùÔ¢´KélïuéÝ›ùóÙÛ§k]\¸>i­æÌÁÇßÿö6ª¥Q{ö”Öyž&uÎ1}D4»vÁ¢E”ôèÏ4ôoHÛ ¶|öÇgD&EJ…’Ћ“ð¸pv]ÞE¯ª½Ðj²V½^Oë=xiöl^ªX‘ ¢l¥JhÿWÒìŸeQ»wWkœ‹¼U¾¼ª$·q#,]ª»yƒÎÀ¿jü 77¦ížFº1]‚(„„^˜Ì&v]Þ…³•3U=«æ| µZìpÑë1ÜUÃ53¾ûN•yý׿Ô|j‘÷4P÷Ô¿ý~þùÑIÝÃփȩèS|}øk):#„„^$¦'²ýâvZ–j‰•ÞêñZöá*Á¼õ–ªx&ò‡F£o7¦O‡­[]M®”s)†ÕÆò£ËÙe¿BHB/ê.Æ_ärÂeú7Ìýª]¨zíË–AéÒм¹Ä1ßٴж­ª(7uª·ð(ÍJ6£K….LÛ=ˆÄ ¢BzQ¶êÔ**{T~ì5σ͛¡woµæ‡È:ªùÞ²¥j­_¼øðí-u–ôªÖ ??fì™ARF’Q! ½(ŠO‹gûÅí´.Ó+‹Üw·''ìYjóš5%ŽyêêUøÏ`æLؽV®TÏÿïÿ 1;;èßÊ–U÷Õ#1ÝÕÆ•!#8vã+Ž­ùéBˆÉ¨Bî×°_±3ØZ24ןÉÊ‚U«àÂøüsYç<ÏyzB×®*Ð}ú¨èZ­ZkõÅñ]]aÒ$5vaÚ4UYÎÍíÁ»,ãR†IÍ&1vëXüýiYº¥\ !¤…^”Z翆ýJ׊]«u~ñ"üø£j%::Jóþ2ÙÔ} 77•½Õí_9ggøøcµ΂jÆÁÃÔó«G׊]™÷Ç<.'\–8 !$¡Go%*%Š¥Z<Öçþû_U¯ý®Bqâ9 R÷Ò7nTuô6òÝRgÉ«U_ÅÓÖ“Ùûf“‘%óÓ…wµ%$…Sº1-á[¨íS[\.¾ûÆŽ‰ãs¿¢ÖB:êûСj Ö.]\ÀÍÆ)¡Sèõs/Ûο X†4.NÝç¹x._VkË«ŒÎÁÏON!$¡OÑ)Ñ컲áõ‡?Vwûr^ÇÏš5S·vÅó§Ñ¨úùÀ¿ÿ ^^д郷÷¶÷fLÃ1L:÷åœbic6ÝW°ÀqvVóõÖ¯W+!_ˆ¼l H §?®þ•…U½ªæú3ðCB[ú÷W·xEÁ¡Ó©†jË–ê¾ú£¦³…ø…ðBט}üßD%GI…’Ð £Ì¬L¾=ú-mË´ÅËÎ+WŸ1á§ŸÀ5l/-ZH "[[6LµÖ‡ QUüTÎÒÂ’þ×}©|6›GŸ/Bº(lþŽü›k·®Ñ>¨=r×o~å lÙ¯—Þ=ÐZ0z= ®-Θ¡Îy» <ˆè”hþ}èߤf¦J…(ÆäzAqà€~pêT¨ ž7l˜m8ºÉlâ—Ó¿PÓ§&þŽþ¹ÞýŽjÀUýÀëëÎÉ FV­õ/¿„>xð¶ÞöÞ ¯1œq[ÇQݳ:-J·ÈõEžBºÈµkß)ÙÖ²¥*!÷\;}š={˜Ùj&š\ŽjKJRƒ­Þ}|ÿ-¡.è4¨XQ|ç5¼wouA–“Æy«æ[ŒÛ6Ž’Î%)ãRF‚(D1$¯鯸N§pçù]ýã&³‰?¯ý‰»;¥]Jçz×?ÿ¬jš´l)a.L*UR-õo¿U5÷³PñÕBkAÇ iИÉ;'-ÁBº(È’3’Ù¾…¦%›â`ÈÝ0õ¨(øæÕÂ{XiQQ0µh¡ªÈNŸçÏ?x;KF4ÁÕÄ«,ù{ éF):#„$tQ`=Ë¥øK4 l†NûèeR³²`Íõ¼K‰_ad0¨zï:¨yê›ÎænëÎìÖ³ùï™ÿòÓ©Ÿdýt!$¡‹‚jõ©ÕT÷ªžëîö›7UIÑ=\yL|––ê^zÙ²jA—ë×áÒ… l?q‚Ó11˜îª[Á­ýjô㫃_q6ö¬OI袠‰JŽbûÅí¼Tî%,u¹+öùÇ–¦ªŽIU¸ÂÍÁAV‹Mãóø¹ç«d|÷»gÏfþœ¤ÖI×ëôt©Ð…~ ˜¸}"±©±…$'DQ&C¥ 8£ÉÈîˆÝ”q)ƒƒÏ#·7™`ÃU2ô•W¤u^”ØÚÛãØº5§vîÄ-9ùöÕøƒ[!!xûg¯h¡µ [¥nD¥D1pÝ@¾jÿA®Aþ©©pD”–¦ É[[«"óeÊ€!¤….žTJf ».í¢Q@#lõ¶¹jÿö›ºw.‹½^Oõ¶m9Ú¬¿ÙÚrج³d¡s5C{`k{ÿù¡Õhy³Æ›ø;ú3gÿœ‡’ËÊ‚„µVùºuª"QLŒº:4å! ]<ð¸p¢S¢©íS;Wk^:7n@ëÖwŠÎ‰¢£dP=/Ævɶ4iBêûïq©ÎJ6l­E\\Ο±¶°fdƒ‘D$F°ìð2²Ì(9gg§ÖèЂƒ¡jUõ¼qcYoWIèâiýpüjz×$È%è‘Û°p!´iAA»¢H£ÑàæéIónÝøW·n¼X¿3çpò¤–Ï?‡ŒŒœ?WÁ½£BF±âø 6Û„Él’` ! ]<+Ñ)ÑìØKû²ís5ºýÐ!ˆˆ€—^’Öyq£F©±¿þúàíêûÕghý¡|²ëG–À ! ]<+[/lE¯ÓÓÈ¿Ñ#·ÍÈ€eËTíïR¥$vÅê—X«zÊÇŽ…Y³Ô”ÅœrÑitt¬Ð‘&Møtï§D$DHð„„.ò[rF2›Îo¢]™vXZ<º2ÜáÃêÑ»w¶ÚD1aaíÚÁ«¯ÂŒª·&'–:KÖˆ…Ö‚9ûçÈ".BHBùí|Üy.Æ_$´Th®ZçÛ·Cùòàç'±+Î^ªW‡É“ÕàôœxÛy3¢Áþ¼ö'?œøAî§ QT.ì%CVVÂÂ8ºe ñ/reÝwxYyâïèÿÈÏFFÂÖ­0p XY= ù¾j•šWœž~¨^¯UKÍoE†£#Œ©£FÁ´iàì|ÿvU<ª0%t #7ÄÓÖ“V¥[åj…Bºx„ëÖqøí·©E%c&ëͦR÷.èÚjÀúáŸÝ¹SÍ9¯]û…dªWWQ,¸¹©õÓûôQ÷ÔG޼Ö™F£¡_^©ü Ÿýñ~~Tò¨”ïß[\l,ÃÂpLNÆßhÄB–"ÏÈ%yÃþÏ?ç­kרŸ™I93 H6âýó&Î9úÐÏðãв%xxH,…âî|û÷Ê9o£Óèx¥Ê+”t*É´=ÓHÉLÉ·ï'++‹­ëÖñÍ A\œ=›«WóÕ„ ¤¥¥ÉÁBzÑq⯿¨~ò$vw½fÄÅqdíÚ‡~vófUÜ«sg)ó*²«W† ƒÅ‹Õy’ÓÈwWW&4@Zf“vLâVÆ­|ù^Ž8ÀÙéñÃtˆˆ ûñãÔŸ=›E“&a”*tBHB/*ìIÈ¡Nk‚…öiv'%Á?À /Hë\äÐש"C£FÁ¸q°k—ªõ/[> ý„ƒ×òõá¯ó~ä»ÙÌ©uë¨uå &zÀÚl¦Jz:v;wrñüy9XBHB/ÊW©BX•*DÞõZ2°ßÍ*­Z=¸Õs Ο—qmâÁ4èØQ]ôM™gÏæ¼]—2 ª;ˆ•'V²ûòî¼Íç@\Xžÿ[¯ýö‡ÙŒÛÄݼ)Jˆ< #R Þž7ù驸ÚG@t"Ç4¢Æ;ïP¦rå?“–¦a©SG¦ª‰G·Ô„”2D rw¿çÊ^£¥}P{âRã¿m<žIM©d[’¼¸‹£Ñh(Ù¶-ÇÖ¯Ç')év+"I£!¼Jê—//Ii¡^¾¾tÿj*«ß®Ld€3ÿZ¹’Öݺ=ppd$ìÛ§Š‰ä8UMˆ»8:Â{ïA‰ªû=§F±…Ö‚W«¼J› 6Œ=·p§¼[?½J³f\hÞœÍvv\Žêõ¬öñ¡Ük¯á~ïÕ…BzafÆLXBNeÝéàä››ÛC·ÿýw5¿88Xb'rÇÃƇðpµˆOròýÛèuzÞ©õN B™Í>n¥çÍ 9߀:Ì‹iÞ<~mЀãíÛSqùrZ¾ø¢!òˆt¹™Y™ü|êgš6ÅÝ6æ¡ÛÞºß~ €««ÄNä^‰0s¦êzwp€wßUecïæfãÆ8Ƕö]æ{–aXýa¹*?ü0ÿ’%)@–»;ÚS§Ð5o.Di¡=7’np>î<õJÔC÷ˆŠ]ë׫û¢-[JÜÄã«\YÍQ_±Ö®Íy:[™x c½º±þìzVŸZÑ”7SË´Z-z t2ÇRIèEÕÆóñuð¥²Gå‡n—˜¨–È|ápr’¸‰'IªÐ¤‰ª 7e ìÝ«ªß«¶Om†Öʼ?æ±ÿÊ~̘%xBHBs+ã?ÿW«¼ŠµþÁu^ÍfõÇ÷êUèÚUâ&žœ…¼ôôë§î«ÿùçýÛh4:”í@ïê½·m§¢NIà„„.æÀ•$g&Zòá+«¥¥©Š_!!àâ"qOG§ƒž=ÕZêŸ|—.©×¯]½Ê®cÇ8Ƭ¡GåÔô®É”]S¸‘tC'„$t‘£ÉÈŽK;¨á]G+LJn@h¨LUyÃÑQ óô„ÇfòÕ§_³¢W/’-bÏâÅÌ9K“%#CF’’™Â§{?%!-A'„$tq¯‹ñ9põÝ+uä¶ß|eËBݺ7‘w\\`Ö,3Ñë0ŽÆ ­[iK¿°0Z~þ9ÿùè#œ Î|ÞîsNFdÆÞ$g&Kà„„.îv:ú4––”r.õÈÖù¦MЩ“Z*Uˆ¼d0dÐ&p ÍHÄp×ë¥FàÊ¥KxÛy3¡ÉöFì廣ßa2›$pBHB&³‰ç7쌇íÃWWY¿¬­A¦îŠ|9³²0Þ¸‚‹9ûô4½ÙŒmL ɉ‰h4jùÔb|“ñ,>´˜_Ã~•¤.„$t–Àþ+ûi^²9á¡­óŸ†×^SI]ˆ-ôK—.±|ùrH×ÿU42d_~ù%Ÿþ9––÷×y®^½:Ý»wàjaÅÝß×ÿæ\ì9æ·ÿÐí"#á?`êT™ª&ò—F£ÁÝË‹f]ºÐ,#RRðÑUà£ÔºêMš¨*sÿp°tࣦ1pÝ@FoÍ´Ðiø9ÊZ¾¢;rDóX¼Þ|S=oÐ@àÅ!¡_»v„„‚ïZÚ+44”9sæpãÆ üýýïûÌÆ‰ˆˆÀÛÛ›¶mÛRµjU4R¿Yõx˜Mì¹¼‡r®å9nÝ:µ FÕª7ñìõèW®Àôéàí ÷.]nÐÛh,£¶ŒbÆžÌl5ó©r"ßÔª¥ û˜1EêÇËU—{rr2z½>[·¹··7·nÝâÖ­ìË+êõzBCCéܹ3õêÕãòåËôíÛ—ãÇç¸o£ÑH||üíGRR&SÑds3ù&{¯ìå¥r/=t»„Xµ :wV+c ñ¬Y[àAP­Œ÷×}÷wôg\ãqœ‰=ÃüóÉÈÊÀ ‘Ìf3ÉÉÉÙr¤Ñh|ººF£Á|Ïo±ÉdB£Ñ Õf¿&°µµ¥OŸ>·ÿß©S' ÀüùóY´hÑ}û¾zõ*‹/¾ýÿ€€Ú¶m‹]‘=HgcÎr+ý5|jÜyñúu8{öN&ß¹“{Á3ÅöíKÊ™-ž''˜8Q-æ2dˆZÐ%(HuÃÿó÷¡’G%f·šÍÛ¿½•…}ƒûb£—‚ B<´´46nÜHxxøí×.ýS£ùIº½½=™™™¤§§ß~-""GGÇûF¿ÞËÒÒ’R¥J±ÿþß`øðáÅê m»¸²®eñ±÷¹»«RSÕó÷Þ#!2•­¿ÁËí3eªš¸#* ~ÿbb`çN°·W-<=¡E‹|[‚ÏÚÆŽ…?TÉý³ÏÀÍ-û6•<*1*d³öÍÂÞÒž^U{Ém6!žê÷ΚN:e{mçÎO—ÐðóócãÆøúúb4ùå—_¨^½:^^^ÄÆÆb6›qqqÁd2‘€••Z­–˜˜8@U¹ @fV&›Ã7ó~½÷±ÕÛÞyÃÏO=þçØnØfUÕDÍåÐPuøÂ ª™laz=äs¯–§§Jæ~¨ZëŸ~ ®®Ù·iS¦ YLÛ= /[/BK…b¡Íç±&ܺ¥F*›Íjw µúŒ½½ŠÅ@®~Ó¼½½yûí·™={6çÏŸ'!!¤¤$ÆN§c̘1¤¤¤°páBbcc;v,nnn Μ9ƒV«åÝwß•h{#öb6›iè×ðÁI?6l€êÕ³åx!Trrw._Z£Q4?ýVã‰&NŸ»:š,´t,ß­FËøíãÉ0eЦtôº|Lª©©°u«Z.îÒ%8~Ú·WOZµRß´’ÐïhÑ¢îîî„……¡×ë ¦T)U¼OŸ>F ®®®ôéÓ‡›7o’™™I£F¨V­ÞÞÞÅ>Øf³™•'WÒ$° vÝ~ë–êM5Jê¶‹‚ÇÝ>úHuÁO 3fd¯`¨Ñhx±Ü‹\M¼Ê¬½³p°t I@>N ²µ…ŽÕóýûÕ7óþûr „$ôÑjµg›ºöúõëßÙ¡…Íš5“ÈæàlìY\=À×/†ß[\»œÕÔH! ¢  ˜4IµÒ'M‚>P½Û·ÿ^h´ô î‹ £6â?/ý‡ nÐj¤Ú´ùE~»žaë|÷åݸٸQÁ­Â·KL„T÷Î%n¢`Òh B˜9S•&ž1ââ²oc­·æ­šoѳJOþ6C×IÝw!$¡~‰é‰ìØKëÒ­:òwï^ˆW·…(èÊ” àÏ?áË/Õx´»Yê,é_³?uKÔe¶ œ‹='ABzáv)á—.Ó8 ñ·IJR«ªµm+­sQxÔ©£’úæÍðÕWwf_þÃÊŠ‘!#©êU•Áës-éºMIè…מË{ð¶ó&Ð9ðÛœ> gÎÀK/I¼D!ú#¢…úõaÚ4u»hñbuqz7³#4 ix4žµÿ7™äs§à·ß`ûvÕ%%„„^X¬?·ž~ p²Ì¹ð‡É;v@éÒ ñ…Oݺ0z´*W¼dÉ=%bu:\<þÂTRêÖd¬ÛnXÕ¼zYÀIIè…Åñ›Ç‰LŠ$´TèïŸßº¥F··k'uÛEáÕ¦ Lž ?ýŸ~WKÝÒ*UªQ3º¾5—äz5ÿ7Êxç{A!$¡‹mù)®Ö®¼µö-""0c–À ! ½àIÉLaOÄ4Æ 3ä¸MjªªÛÞ¤‰LUE‹F5kœ9ªÔúìÙ÷h÷´ód\“q80lÓ0ÎDŸ‘¤.„$ô‚çfòMND I`“–¼¼xQUÚ’©j¢¨ªZU-â²w/Ìšu÷»§­'cÅÑÒ‘1¿!ò–t¿ ñ$d¾ÈãØ±CUÏX±zöTÏ[¶TMì{컲½ •Ý+ç¸;³Ö¯¨\YÂ+ž÷èM5çìêUõÜdRWœ^^Ð¥‹ú÷ 5l¨ÖP6LÕ1"ûÒ«^v^Lo9)»¦ðÆ/o° ÝJ¹”zèšB<®ŒŒ ïÙÙ H>{–òkÖP©A\=<ZÁSzQԤɼw/|üñ75cfÍ©54ôoˆ»mÎË]¦¥©©jýûƒ££„Wž#k×JB9»vë;/í¤{åîÜfß>u›òå—%^¢øñö†éÓÕÌŽ1càĉìï;Z:2"dí‚Ú1zËh¶„o!Ë”%OÌÍÛ›ë9t«_7p/]ºHüŒEïú† °{·z~èÔ¨¡ž¿ø¢ªvñ ¸z½VO ï9¾Ÿ’7BãÆÙ Qœxz¤IªªÜ!jÐ\… wn?ÙìXg ÖÖLÜ>€V¥[=ð–S¾J~ æâÙ³”0™Ðñ |}騢…$ô©MõUÙâ!×òCbz"›Îo¢m™¶ØêmsÜæôiu­1s¦ü’‰âÍËK­Ò6ož:j´n­Ê ÿ“ÔÕ„¿£?·OärÂezV¥½O<KKK-XÀWöö”8tû°0ζoOHÿþIB÷»~ë:gbÎЧztZ]ŽÛlÙ¥J©‡Å… :*>“š ]»Þy_«Ñòrù—Ñiu|öÇgD§D3´þP¬,¬²í'**Š£{öàœ˜HÅ´4¬¬¬$¸"g†ÎŸÏù°0Rúõ£éW_áTF·KBÏ'[/nÅÇÞ‡rnår|?=~ùÞ_¦ª q§õ¤Zè^^*©§¥A÷î`ø_EFC» v8Z:2yçdR©Œ …ÁŽÌÌL6­\ɱE‹¨uìa––ürå ƒ-ÂMG9´Ô+V­ ööjùÞ¢tq,ïe¦ IDAT‡7ï¤ÓYsj ½ªõÂÙ*ç:®«V©åQ[µ’©jBÜÍÚzôP÷ÖLJˆx÷Ý;¾Z š6ÁÏÑ÷7¼Ï°ÃÓh ‰§#¹4t(ƒoÜÀæûºþË/,°µeäâÅX[[KpE± £KòÐÁk¹•~‹æ%›çø~BüðƒjyHë\ˆœ5n }¤ 3N™±±Ùß/å\ŠO[}Jrf2c¶ŒaÏ/?R/&æv2ðJ9™{‡Ï ! ]<ŠÑdäÿNþMK6ÅÛÎû¾÷Íf5øþÆ èÜYâ%ăètª ãgŸ©4C†¨¹êw×€/ëR–i-¦ádíÄ/|}ÖýóÔ“’H¾w1v!$¡‹G9}šC×ñJåWr¬ |ëü÷¿ð êÖâáI½\9X¼XÝ¢<¶o¿S€F£ÑP¡óÚÌ£nçWøÝFOæÝ¿oÀ±ªU©,ÁņÜCÏ&³‰?¯þ‰»;%Kæ¸Í… pæ ¼ñ†ÄKˆÜrqQÝïË—«ûꃫ• ÿ,gÐÜã–ÿË uR7õzö{xÐhà@œŸvMâôt5-åÂõ<:|}ÁÆZ´P++ ! ½èHHK`KøÚµÅFo“ã6¿ü¢Z*H¼„xܤþÎ;3f¨àÞzëÎ8WWwúÍúŒ}]_fègÃqðtçíw>!¤f³§ÿâz=4h  T?¯º ­¶È…Ÿt¹çð¸p"“#©_¢~ŽU¬âãÕ2©ÒÝ.Ä“±´T-óY³þ¿½;‹ªÞÿ8þ:³13 #;ˆˆ† æšKîšK™VW­,ë—–·k‹-f«Vv-Í«f]+¯•ZÚfWÍÄ\J33KÜQAHQ6…a›aæ÷Ç·0®v¯åôy>çááÌaÀïæ=ßóÝ૯`âDÈÊ:ó¸½A®»n3^úš)ƒd¼ÎÞ“{ñüçâë¿ûR§æ§mØ‚‚TͼaCÕßËK.Œ@¯o’%çG¿sÏüùçê=¡sg)+!.$[;v„™3UÏ÷ǃ={jv–‹-·ðŠi -ƒ[ò@ò¬ÉX# » tq~NWœfÕ¡UÜÐì,Ƴǻæçè¶s»]ÊKˆ ¡iªéjÚ4õï}÷©Ñ#gÎ ·5äÉkŸä¶ÄÛ˜øõDæmŸG™³L OÔ{Ò†~j磅nQÝÎzÌ㯿V‹±  e%ÄÅO=«ÕÚn¾FŒ€ Ÿ7ÌüßÕÿGTƒ(^Þô2ÙÅÙŒºz "ЄÔÐP\\̆իù¢¨ˆ¬ì,’&Ó¯I?¼MÞç8Wuíß_Í‚%„¸x¬V¸ë.xúiX·yrr~U[ÑèÓ¤¯õ{='öðЪ‡Øž³] NH  Øùý÷Lïу’[ožgózödÛ'«wîEÍ÷íScôï¯Úÿ„—^¯Vg›3aÄc YUÒ™²Ÿï°ë4‰!‰Ì8‡¶amù늿²x÷bNWÈ„3¢þ‘[îçéôéÓ,›0SRðÿùØÕièó|ðäUB`Íó=5v¶];ÕÖ'„¸Dµ4j¤ÚÕçøòÊ[ÍØ þ 1Q^\BÔþþj]õví`Æ Ø¼Y-ðÒ³§ºEïeðâÖ„[iÒ’9[çpÿÊû¹-ñ6n‰¿o£÷%z÷5¨OÆAn®j˜ùDí_u•zã®ãêÕ-÷ÆññìÿeœÊ¯ìµZ‰mÕꂟßévòuæ×4ökL¬ëìŸs䈚àâæ›Õí>!Dí¡×C×®0k–zï~â øç?Áá8ó=!8—z¾Äm ·ñ¯mÿâÑ/%»8[ ¯¾ðóƒ¸8µ½þú™ý€€zñß«WžÔº5¹ýú±Ñj夦Q il±X8Ô½;í.ÂÊ(¹%¹|~às†¶ŠÝ«æ²iN§êÙÞ¦êÝ.„¨}4M-ÃúÌ30o,_·Ý6À/b|;Œl5’φ~†—Þ‹[>¾…mûù¥ùR€u]` $%©­[·3û Ö‹ÿž¡~ý±jÜù÷¿³¦Y3²6n„mÛàþû~ë­/BƒöšŒ5ø™ýhÖîì»{á»ïÔJPšL-D­ö¤$Õ®>><û, ·Þ ¡¡êœ ï ^îó2KS—²`×~,þ7c‚"hé©B¯é¥…ÔÐ/µàÐP†>ò½ßz‹ž±±üåñljnÒ䂟×Qé`ñîÅ n>˜kÍÛ3••°jÄÆJ?!ê’ðpÕ¶þâ‹êoøÿþOuju»Õヅ¡-†òÆ€7°…Ç0Æk5ó¶Í£ÜU.…'$Ð/£ÑHhx8a^^^ü|‡Oö©ÎC[ =kµ¦Ã‡Õ›Á]w©#„u‡Å¢î¾~ú) ¤ÖYè!5ÄÍéT3ÌÅøÅ0µÙX¦l`YÚ2nùø¾8ðEåER€B½.É+Íã‹_0¬Å0ÌóY/]ªÚå.B¿;!Äâ㣆µ½ù¦º%?~¼êsò¤z\ïžAíygÐ;ôŠéÅÌïg2~Íx¶ål“ i„z]àÁCJN …å…ôŠéuÖã¹¹°l  ¾¾R^BÔeš¦>˜Ož¬ÖY_·î¾[MLóËô±!¶ƶËŒ~3ð·ø3fŦ}7ŽìƒË¥ »¢BÏÿe¿ªJÊæÕÖþ‡2gîù~±ý÷ ?ëu÷öÛФ ôë'e%ÄátªUXNŸVkçäÀ?ªYebbTÕûw²Û¡woèÜYuš›4 ZúYt-*ÀËËHBp/÷~™-G·ðïÿÁç>çoíþFÆ=¶£]éÞ±‡C^žZú±¨H ÙÒ4U&þþµ÷z~÷vðî»ê¨ Ò±£¼Þ%Ðÿ¸ƒùI/HçÁbÔkÝ÷)Ïoxž•‡V2ºõhš4ÃËàuùË¥ukµUVÂܹpãòZ©ç¤ ý¿Ø»›YÕz&}ÍqìÇò¼X¾\­æt!Da39éÕò$‹Á£ª¾3ÇÃÀÑ£àñhÄøÅ0¾óx>ú)1+Æ0îËqüpì•)D!5ô+ÁYåä³ýŸ‘’H|Ðك˗U\‡¿?tè ÉQßååå±sýzlÅÅ$–—rà V®¹¾úJ-üòé§jbšáÃÕ ƒ{/÷~™9;øüÀç<¶ú1Z7lÍ퉷Ó.¼¨úåt°à ßþô-w%ÝuV;ØÞ½ð¡ù.FV3 !ê'—ËÅ—}ÄÜÁƒñ<ý4G““™:d™‡¬ÖUyóM¸é&X°@M#»zµêŸç¥÷¢CDžîú43úÍ@Ó4Æ&åéuO³?o?® )`!~©U¹«X¾š{ !5ÛÎ aÚ4èæ\KŸ>R;¢>ËLKc߸q<°i½óó¹9?ŸûW¯fÁCQZZЦAXŒ©nÁwN=’“áÄ 0ë-´i؆×Í`Þ yœ,=ÉèÏGóü†çÙ–³Rg©´@¿TN_ø‚~MúÑÀë̪jn·zô(ÜcZ(a.D=·síZ:ååñëŃ©©ìÙ¶­Æ¹>>ððêÆÞ¹3LŸcÆÀ{ïYÑ-!8ýf0¹Çd•Æ}9ŽñkÆóMÖ7¸åýD\ iC?‡U‡VaÐèÓvæ3ONüë_0b4~·X Jˆúþá>?»ËuÖqŸòrÅg¿èõЬ™š›bð`ÕÆ¾x±Ú† ƒë®ƒoºEw£mX[ä“}ŸðDÊË4iîæŽC_Ò6¼-~f¿ï=BH ý8é8ɼíó¸=ñvB¼Cª»\ðÖ[êöÚ A2î\ˆ?ƒ«äÛ€~ÝÚ] ¤4oNËöí»¦d€ÈHµ¾ÃÒ¥ª°r¥º5?{6ìØF¼iÚŠ—z¾ÄG×Ï'þ`!¯n~•QËG±`çÂíqËEè„Ëíâý¢ÓtÜwCǾÿ^;;¶vÏÉ „¸xš$$`¸ûnÞ dŸ¦ñÑÈ[áátxðAÎë9,¸ãu+þÑGaçNµøËSOÁž=j^œHSOT¶çíëßfp³Á,Ý¿”ûVÜÇÔMSÉ,ÊăL)+þ7¹åþ+Ûr¶ñÙ¾Ïx¦Û340Ÿi;?~^Æ\µÖŸ­¥¨ÉžyFЧZ®IQ¯X½½>i‡‡gëüùØ33ùË«¯ó»žGÓ (ú÷‡k¯…T¯ø»ï†¦MáÖ>zÚ»ƒ÷nÌIQ j6ˆÇwðÎŽwþép®½šÛ[ÞNóÀæøš}1èä­»ÖÙ¾–,Qû«WCß¾j¿}{u[Wýò©pU0çÇ9tˆèÀ5áל©µ»ÔÓÒR0«º n!þL,V+ñ­[ïí ³f©þƒ4MužkÓFMâ––Ÿo.¶óVúßèô*tﮣU+?z4îÁµQײ5{+_ü‚Ië'ÑÀ«#;Ó-º-‚ZœsõGq…\}µÚ@ÍG?y²ÔЯ”µk9XpñÇãmò®>ž Ÿ|û›Œ9B\<šÍ›«Nt·ösðÃÈ%¬;Ïã«Ï ƒA¿~®‰¸†vaíÈ(Ê`köVÖe¬cIêš6çú¸ë;àÊL-+júè……ðKïÓòrøé'µïï6Û9¿%£0ƒ©ßMåák¦Y`³3µö x嵜âõ×KG8!Ä¥ öˆàJÂãöÑÿU5vý“OàŸÿ„×^SÁÞ«—žFšò—«špc³9V|ŒÏö}Æì-³ymËk l:Þ1½‰lI¯èuòf%^¤¥Á®]j¿[7XµJíwé¢VXø%•%¼•òQ ¢Ò|HõP¾øB=Õ‚`µÊ‹EqiƒÝb¨(xì159Íš5j‚š•+!$:wÖѦ•¤¤¦<Ñå Æ´êôU¬M_˪C«ñ¡CDZ7lM놭±åK½.»æµ§­Ù[Ùrt SzO©ñ©ö§ŸÔR¼wÜË Eqy5h·Üýú©¥ÍSR`íZUÁˆŽ†¡oß ÆÀ¦É,Ê$%;…õ™ëY´{öz6îÉ€¨ÞDKqJ _é骷¸N7ß II—íG—T–ðʦWÜ|0m¶­>îtÂÂ…àë«æhBˆ+ÅfƒÄDhÑB-þRPË—«Ûò3gBÛ¶0`€-ÏÐÃq8‹ù<ís’%3/e.Í’Šé»ã=Ú…·£¡­¡Ü–—@¿Dš4¹"½Ý7ówÎÇ ÖbF½±ú±½{Õíö¿ÿ]­u,„WšN§Vr SSÊŽ »w«ù1Þ{Oĉ‰ÑѺµ‰‰^ Oº›;’î -w/«ÇÝÈ—é_²x÷b‚mÁ´ iERhI!IZÏZ€JH ×);ïäÝíï2³ßLú4¬>~ú4¼ú*ôè;Êâ+BˆÚÉbQCœÛ´Ü\ÕL¸e‹jwûmhغv5зûU³˜Mï˜ÞtŽì\}üÄ xþyµÂ“OªOÃBq)UTTP“ƒÞåÂÏéÄh4þ®ï×ëU­=,Lüý÷«>«V©pÿä##¶ìY\3ÙŸîÝýéÝŠþ×ÜŽÅVɶã?²&c S¾Â³_?KóÀæôŠéE«VX°`1Xä"I ×^É“É.ÎfB— h¨*xy¹ZõØ15TÍÇG^BˆKÇãñyèß}ü1žµkñää`œ=›¾wÞ‰ÿœôB§S›¿¿Z›}øp8–UÅwý±Íõ³gƒË¥d >Þ@RR7F5ïÆ£×œfç‰mlÏÙκŒu,Ú½/½Mš’”@³ÀfÄÅãköU?hÇ8xPí= j¿m[éE,~ùWófʛܕt1~júF·[ͳ¼e üã4”Bœ—òÒR>yè!®]¿ž¸òr\šÆ¾çžcAF¿þúEù:4 w3,ú¿'OªJKZššÌlùr5ßFÓ¦vzõê΀k»qGb!'ÊŽ“SœÃ÷Ǿgùådý…ÝËN«ÐVt‰ìBw[qqê‡L›sçªý äÂJ _e®2&~=‘«¯bDËt5ÃÒ¥ªc‰„¹ârHÙ¸‘¦6б¬ì—*;!™+V°gôh.pÄÏ©¢"voÚDÚ²e莣Ù׫hÙ©v:tPCr].5$îë¯ÕôãsæhX,þÄÇû“”ϵ-{rs+°ø”q°t ®gÞöyL.É!ØLÓ€¦\Ó¬‚¦eX´jØÝUÔƒ¾¬´”›6‘¶r%•™™4[¶Œ„Îÿð] ôz¨²ª’eû—ñMÖ7,¾y1fƒ>ø@õ4IÂ\qù¤oßÎ5¥¥go^P@FjêúG/¾ˆí½÷¸¶¨·¦±uÄÜ?w½ð :ü§¶{îQS]ïÞ ©©êßU«4ªªÀn·׃¸¸ôj\t€ç~Ò ±ÖšÃ‡^Ä› kMü›ëK|P<1¾1ØÍöê¦Íó±|î\Ê&O¦]a!f·›”»î"õÖ[9}:f‹´çÿéÝãñ°,m3¿ŸÉßÚÿXÿX<øê+u§è‰' {wy1!.Ÿ&mÚ°×j¥Ù¯BݤÐá³Zþ™™™”.XÀ]˜~>“ŸÏëóçsdôh5jtvü¼†{d$  :çç«-3S-!ýá‡pì˜6["±±‰$$º¹ew6¡£ÊTÀüýlÏÝÆâÝ‹ùéÔOؽìDûFÓ6¬- Á $†$` @Ó4tèÎ.—Í‘÷Þã¼<~™>²¨ˆ÷>úˆôQ£hѺµ¼pþÌ^RYÂG{>âÍ”7y¾ûóô‹í‡Ë¥‘œ /¼ ¶ä… „¸¼ÚtéÂì=øî«¯Î´¡[,_=-Z¶¼ çþvÕ*úäåU‡9€ è‘“Ãæµkit÷Ýÿõû5MMhc³©©h[·>3ÉVi)lÛ[·ÂîÝ:–íEÉÐìöbbÚÒ´éºÇƒOÔiŽTîæ§Šl?–Âò´å–b÷²îNÓ€¦´ nICŸ†øYüð5ûòÝúµ\sø0¿^jÆt+(à»/¾@ÿ3zIe on}“åiË™Òk ½÷BÓ46|«VA¼ë. s!Ä•a¶X:s&›?ý”ôÕ«!'Ó}÷qLjüÜ11dšÍ´(/¯q<Ëj%,:ú‚žÛjUKct颾.Úÿ$GÞ\É‘#jâϬ,Õ”YZj§ªª3v{g"yˆ t ùÅc>ŒÇ|„2çO,I]Bqe1Uî*Lze§¹^_N—ÿø™G¼¼mÒD^4Ö@wV9™¾y:ßd}ÃsÝž£g㞀ÆáÃj¦ÙAƒà|HBˆKFÓ4¢cci8n…ýû£Ÿ<¿±c1.üm¹Ãµ×òRãÆ´NK#ØíÆäêtl‹‹ã©Ž/êÿÃ׫ßD5=­Ç£zÍCQ‘š¨ëèQسG#3ÝÆ‘#ÍÉÍmŽÑÞöJFŸ¦id1 £‹ñ =AQÀA6Gç†Â4"x<½±Ú1"x"]ò·aw—±:à*Œq§;Xwp.cxÆÛb ÀêO5ˆP[(‘ "‰j…ÝlÇÛèÝKýëmòÆf²ý)¾ÞznI.×Oä„ã¯ö}•«¯"#æÌQm>Ý»ÃØ±æBˆúíªÄD½ñé»v¡=ó 7¼þ:ÞÞÞWü÷²XફÔ6x°:æp¨™:óóáĉpNœ˜MáÉ4Ž¿ö> »…>ÇÉð=Á¾©h>_ãeu¢é]¸Ü.Œz#~f?­Z ö&Ä¢¾¶¨cv/{½Y¨¦Þº¥<ºúQÜ7/õ˜B€§ÿü',Z¤–BŸ:U­X$Sº !þ l6Imۂɵ Ì‹··š`îÌ$sÜîV”¯x’²×í”—«Îxåå: }ÉÌôåèÑ8Nœ€œ8¾×EnQ9åî2*ÝåèM4,Ã'¨òà£÷ËÄc=A¥q§ªŽSâ<…Þf“«ÉD°w a B ö&ÔBCŸ†„ÚB ñ¡¹zMÎÛû¿lµeq›ót·ÛMjj* Z´hAddä9Ï­ªª"== ×ëiÖ¬7¾dÿig•“]¹»øû·'ÐÄC‰“Ù»!¹sÕ å™g o_5k’BˆÚO§«¾ë9V¼ìÚõì(«¬´qì˜Ü\ªƒþäIµpMîn()Jx•ƒ·—£½l98'ùI—Kª.‡ç$EÎï)× 1z—b´–b±Váo7h÷Æ×Û‚Ýb¥Å†¿Å‹?Ö@|¼|0ÌX ¼ ^˜m§±œLUû3fƒ“Þ„—Þ«ÆÊžW,Ðׯ_ÏôéÓ‰ŽŽ¦¸¸§ÓÉ”)Sˆþ“‡-[¶ðÊ+¯Fii)EEE̘1ƒ˜˜˜‹úË–²åèV§¯&%'…Ä $Ú—?à ),„#àºë $Dþ8„¢>3™þ³–ÿë ©º­ú4œ:ÅÅFŽŠ‹Cp8TØ©Ç ¡¨¤œòÒbÊŠ‹q¸J(©p]Z̾ÒÊÝÊ=§ñ˜N9£}?»›Ý…ÍVŽ¥¤ïŠL´þ†ÉWÃlôÂj´b1X0UèÛL¶êí—6~“£o£7V£«ÑŠ·Ñ‹Ñ‚ÕhÅ ûßq}^ž››Ë›o¾I÷îݹï¾ûp:Œ;–¹sçò / ×Ÿi8uêsçÎ¥eË–Œ7·ÛÍ„ ˜5k3gμ Zº³ÊI‰³„Œ‚ –î_ÆÚCë)+÷Ð!´+æ°eY æìnÀСªã[£Fj%"!„îÚ¾ÚÂÃÏ}NU•š ×é§ÓŒËeÆå Âå¢z«¬T=øóó=œª¢°ÈIQ±‹b‡‹#GŽ’÷éHúŸÎ ÆYÂû[SÙdº Wð 4[ Ó)ÜÆÓàU„ÞâÀäs£÷atfšW C1UúRÐ\hš†¦ièu:ú×l0ãmòfÖ¶ ôÇsøða^zé%ìv;7ß|3o¿ý6Ç'üW%TPPÀ¾}û9r$þþþÕçNœ8‘¼¼<‚~éúø?¸ÜªSƒÓí¤¨ìiyù!û{’÷ndWj¦ÂDZž%Äq >¤V¨É-’Å~„Bü>z½Ú¼¼ÎçlíçøTZVVÆ´{§2úØvþ|F¿òã, ~Ÿ«¦¡Iâ@JK©¾ðËþneePZQI©ÓAy•ƒJ85N8µœš­øø…zqq1F£¯_ýO###9uê§OŸ®è•••8Îêàˆˆ—c ÐIDATˆ ¢¢‚“'Ožèr³xðã)Té*pëÊpkå¸u帨ÄYåÄév’_rš}©.òö%cMW{‘ c , 6TkGDH‡7!„—×Á}ûh²c¡¿:fÚ°oã*®½®Ëïx6ÓÏ›n·º+àtžù÷ÎÔèn·û¬[僷ÛÛí®qÜãñàñxjœ¯×ëñx}úœ÷/Ò¤´”Ôƒ%Ð…Bˆ? VL†ê¾ ¢]÷îrE„¢p¹\äå‘_UU£Ã´¸r®øâ,E:ËìvôÆÑ$6V®ˆBÔry'N°á“Op|ý5>Œ÷œ9t2„°F¤pþÌîŒÅ÷ÅéÙ»·\ !„¨ÞöYZ,ZDÇÒRt©O=Å¢M›xdÑ"t29ÈsÅo¹FDÐó/ÁïcÔ…BÔ.{víÂþùçô*)!Ìí&Ôã¡»ÃAhr2;RR¤€þÌþË$ôB!j¿´íÛI*,¬к¸˜½[¶Hý™]!DÝÑ8>žý¿Z«ã{­Vb“’¤€$Ð…BÔ­Ú´áh¯^l¶XÈ×4 5ÍfvíJ»N¤€® ƒBˆó®êtŒœ6Õññ¤û-Ú®]¸î»ÛFŒÀ`H‘@BQg„†‡3|üxNÞy'ž#š0¡ÆòÚB]!Da2™Œƒ$Ì%Ð…B\"›7ÃáÃàrAN,Z:tìQQR>èB!ꄨ(hÐ<xûmðñM_ßÚý{õ•Ú~ú žyFí÷ë]ºÈu•@Bˆ?™°0µÕ5={ª `òd¹Ž¿ƒ [B!¤†.„âs:¡ª **Ô¿ååê¸Ñ2'º@Bˆ:Àå‚Ï?‡}ûT°{{믪ãƒA³fRFB]!jÿ»¯nºImB\Ò†.„BH  !„B]!„…´¡ !„ª²µïrAa¡Ú÷ò«U]!„¨‚ädµï¼£ö[µ‚^½$Ð…Bˆ:!>^mW´¡ !„õÀ•¯¡ÀÚµjÑ€- 4T®ŠBQç]ÓÔ‡š¦6!„BÔÁ@÷óƒ=äJ!„@ÚÐ…B t!„BH  !„â¢qèB!~Ÿ½{!#Cíçç«e`’’ 2RÊG]!D`³APÚùeÕ¹Àl–²‘@BQgDE©MÔ*Ò†.„BH  !„B]!„èB!„@B!$Ð…B!.„B t!„BH  !„èB!„@B!„ºB!$Ð…B t!„BH  !„B]!„èB!„ºB!$Ð…B!.„B t!„B]!„èB!„@B!„ºB!.„B t!„BH  !„B]!„@B!„ºB!$Ð…B!.„BH  !„B]!„èB!„@B!$Ð…B!.„B t!„BH  !„èB!„@B!„ºB!$Ð…BÎ÷DÇCII ‡MÓ°ÛíX,–sžër¹(,,ÄétV3¢iš”z=UYY‰Ñh”k\TUUáñx0 RõäoÓd2IAH +ûöíã•W^!//ªª*Z¶lÉOøàƒß<ᡇ¢ªª N‡Nw¦Bo6›q¹\¸\®³¾',,ŒI“&áããƒÛífÛ¶m<õÔS4nܘ޽{×8wïÞ½ÜqÇr%ê={ö°k×.éHUäææâv»Y¸p¡Fçv»Ù³géééRõÀöíÛ;Ð#""èÞ½ûož„Ãá8+¼ ±X,ç¬q[­Vââ⪿nذ!o¼ñ)))5]§Ó‘’’"WH!„8OÞÞÞçô„„þë7———ãååEFF7à»ï¾#22’ÿùÃN'‡«ÕzÎÚ¼B!.ÌyÝŠŠ¢[·nÌœ9‹ÅÂÉ“'Y¾|9?þ86›S§N1}útºtéBïÞ½Ù¾};û÷ï'!!ÊÊJ–/_NYYÙ½ „BˆKèf³™ñãÇ3wî\^|ñEÌf3=öC† ÔD2YYYÄÇÇWÏ7ß|Ã{gN§#66–÷ß¿ú6üºuëxûí·9~ü8‘‘‘Ü{ï½tìØQÚ^ë ´´4ŒÕj­ž¸¢oß¾<öØcøøøHÕbL˜0ôôt²²²˜>}:7Þx# Æ.oß¾™3gräÈüüü;v,={ö¬Ñ—FÔ‡ƒñãÇsàÀÒÒÒ˜6mZõØóÔÔTÆŒCqqqõðḸ8æÏŸ/W ¯ãܹsÙ°ayyyØl6z÷îͨQ£hРN§“>ø€>úˆÒÒR®¾újxàbbbÎbyäy䑳 ¨ñÂhÓ¦ o½õÖ9Ÿ'77—'Ÿ|’aÆ1`À>ûì3&OžÌœ9sˆ‰‰‘«YÇTUU¡×ëy饗ª?ÐY­Ößl㵇Ûí&<<œvíÚ1}út*++«ËÊÊâ¹çž£K—.<ùä“lÞ¼™§Ÿ~šwß}·ÆwQ»®gHHIIIÌš5«Æ<.—‹’’^|ñE5IÔÎ÷T“ÉÄ=÷ÜCÓ¦M9|ø0/¼ðV«•¿þõ¯|óÍ7Ìž=›gŸ}–ØØX^{í5¦L™ÂÔ©S¹ìUâ/¿üoooFÝngĈlܸ‘”” ôºz›Ç` 44”ÈÈH)Œ:$00‰'V×~m×®]”””0räHÂÃÃiÚ´)K—.%99Y½–òññá¹çž£´´”÷ßÿ¬Ç5M“¿Ó:rï½÷Þê;Öqqqlذ 60fÌ/^L·nÝ4h:ŽQ£FñðÓ••uùgÙºu+Í›7Çn·W¿©DGG³cǹ’uÐ/·_xà:uêĈ#Ø´iÓ9‡3ŠºÁårqèÐ!¢££«›ML&ñññìß¿Ÿªª*)¤:F¯×ãëë˸qãèÔ©7Ýt«V­ÂívKáÔ2š¦Õh~.(( 55•æÍ›SXXÈáÇiß¾}õ{opp0F£‘'N\þzII 5jwf³™ââb¹’uPHH³fÍ"""‚ŠŠ .\È3Ï<Ü9shÞ¼¹Päv»«G¥üº½Üf³qüøqœN'z½^ ª ã…^ ((§ÓÉÒ¥KyòÉ'‰‰‰©1ÄXÔ.¥¥¥¼ýöÛœ>}š‘#GR^^Nee%6›­F†zyyáp8. [­VJKK«¿®ªª¢²²²ºÆ.ê???ºuëVýõèÑ£Y¿~=éééèu”N§Ãb±P^^^£WZZŠÑh”Ϋu¯¯/:uªþ:22’ääd6lØ ^‹-\¸äädžzê)¢¢¢(((Àh4ž3C-Ëå¿åÞºuköïßÃáÔ´²YYY²ªS=¡išÌÙ_Ç bccÉÊʪþ;u¹\ìß¿Ÿ¸¸8 ôzò¡MÓ4¹å^K9fÏžÍÂ… ™2e ×]w:"##Ù¶m€¼¼<*++ ¾ü5ôë®»Ž9sæ°`ÁúôéÊ+¨¨¨ mÛ¶rë ””ÊËË £¢¢‚Å‹c2™¤ƒcàv»IOO§¸¸˜òòrŽ;Fjj*QQQ$&&b2™øøã0`[·n%;;›~ýúIÁÕb‡¢¸¸˜ÒÒR²³³IMM%""‚ÜÜ\233iܸ1•••|ñÅÓµkW)´Z¦¼¼œwß}—yóæ1nÜ8¢££ÉÎÎÆh4̰aØ8q"kÖ¬!::š… GTTšç—˜¿Œþýï3wî\  á¾ûî£OŸ>2Œ¢úøãyçw(,,D§ÓŘ1cèܹ³\ÏZ®¬¬Œþýû“——Gff&4hЀwÞy‡V­Zñí·ß2cÆ rssñööæþûïgðàÁÒ~^‹õíÛ—ììl²²²ðõõÅÏÏ3f Óé˜2e §OŸFÓ4BBB¸çž{8p Ì+PËäææ2pà@8@lllõß[\\|ð¼ñÆ,]º§ÓI³fÍxôÑGIHHàÿøjG&Çù®>IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_erp_plot.pdf000066400000000000000000001052041202542755000211330ustar00rootroot00000000000000%PDF-1.4 %¬Ü «º 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /CreationDate (D:20081113012040-04'00') /Producer (matplotlib pdf backend) /Creator (matplotlib 0.98.1, http://matplotlib.sf.net) >> endobj 3 0 obj << /Count 1 /Kids [ 4 0 R ] /Type /Pages >> endobj 4 0 obj << /Contents 5 0 R /Type /Page /Resources 10 0 R /Parent 3 0 R /MediaBox [ 0 0 864 576 ] >> endobj 10 0 obj << /Pattern 8 0 R /XObject 9 0 R /Font 6 0 R /ExtGState 7 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> endobj 5 0 obj << /Filter /FlateDecode /Length 11 0 R >> stream xœí½ËÒ,Ëq¥7¯§¨!{€q¿ E5f0q@&MzFµ`’á¨E¶Ìôlz;­Ï=7°+Â’š²–™ˆbŸ]••™~Yî¾¼¼ûÎïßë¿¿y¥wzÿò^£éÿ`ÿÛçПÒÿWÿú[}ï·úÓo^ÿüÊöwùWùjïVúWMÛÿ“ßÿôËûןÞÿö?þñk³}ñÛÿ¥ð¯òþí+·þUÎwúå=S½ÿú¯dU~Z‘Z³¾VÓúÚ­ûºß"ÿ|ïô.ú¹ùã?ÿÿ7¾ý†oJ¸¬¿<«ÝóÒN²ÿüÎi_cwIûëÇßµþþ—ÿðþïßÿËû×ÿ•ÁzûcüËïŸ?ü·¿‘¤¯Ôû^©6Ix®_k••z–xèÆ¹¯”Ò«¦6ßm¤¯¹ç˜{ÔÌ£äžy„ÚG]×÷ñµòìiï.©yç>¿ÖN©µRÆ»Õþ•ôÁ˜úA»zèvµÍZòúõ¶¿j_u×ÌÇ﬚s·’r›úñ:tóUuEá×_ºÑ×,MKÁ?ï¦åÈs¤6ÊNv÷•¿ôäzØ4ÖÒ˵¯ºõ—ú;¸~ͯ‘k[-•ÝõûZ¹Uz×ÖÊõ»~õ®ï罓ÎD+:kýß\¿÷WOeu½mÚþòzþ¥µÓZýA[Ñ¿ô§ÞæÎY¿?ÓWmzh-X麾ä¬*E×Ì¢ß×jl½nkz(î_òüªuì¢W.ü¾^wIljž÷/ÈÒÊ#繫–·ksrj¹ÌY7×—ý¥u/{ëê»îñUµ¹ºWåù^º±,í5'WÖ× ´¶V·Û·ü¥ç“Ømujk”œ*W·ù•Fªƒÿ õíµö^}6´iéU¢Ó%J}OíNÖÓ÷QWÓ?l~éHïÖ£ö>ùùù¥—xô!ÙÖõ£Iv´èSrßLxÖFÒô8¬~ÑrJVô„¬ï»N=Žž†ýHë§ÄEÒ"Á®{Ùãë^[R4¦=¿tú,«m] EwQ-]_àú¥õ˜ÕÖ6kwôs«ÉP$ ŸÝ7IÏ”àJ|·=ߨ’ÓTó.º¾¦ô¥c!qÒ†Ý_‚Sªoæ^5 Iä·òI7ϯå/­wͲ9]K’Kªü¾6[Ÿ þAz«´¶tä­Ó2Lzµ+i}~ý*ÒVÓÌÚ Ý^O[gÊúδËkúzDw ?º·d]™Ëõ8Eȹçhj3«N‚ÖÏžMGA‚\%ni¶—©­[Ú’5{÷¦£X´¬:-œÌ­¯wýþ®Z/>ïM²£Å’p¯ùÒ´v»åÝõ7|®LI{%YÜÍÔŽV.I|²§Ïû—¾› ›_-µ¯Ò“7éLòùd3×rÕàk?gÓëê÷ìsé%ýº‹þ Ù“ž¨­å¿¿ªdgeÛ\¬¡D½—l«ø\š©êÑyýâ÷õÝ:›ÞÏÖgwnhZÑN¦dSZ¤è¤°øRUz RôÌÚΪëµ{K/®f«ßÒ”ìŒ]9Lœü¦ßO’{ 5›‹ž–жŸïCë¯õKRJsÎ2ìsŒ:ºISëúÂÙ“­ís™w=CÒût-¿$MZA ž%«|,sSu½Ž{æhʤè Igë¼Vû|êy“^–÷}éDk5$&RX¶ý­IV«^NzTGÑDGdLž=¾½¾*­¤·^/žF*PÂ.UÏÑCÓåÒÌj$¶_×§)áÕûÙç:«z] ·NÛ¯çÓi-µ?ö¹Ö;K^í?¶ý¦$´x¶}m‰Ï²Õ/Ú~mO]’|©{¼)ÍÄ1–iádÊQÒË­Õly–4“¾´JU»ÏI›ZjIõ²ŸßXÉÒ'ë;ìdïŒáÓõþ¹4SÕ‘5ëÚ})B-µ~AVŠ×“M‘8êöXŠm«e`x€âŸë‚b‹«%ÖöÍ/ ²Ì*+Èç:Ì}f·ªÕvS'HšPŠÍ®/ÒLyh¿e ^˜µÌjIös·ß{Nž‡ÅÌÒì<_¶Ë«Sê.›Ú}¹2Úy¸¬ò¹S—b@=dÛ쥕/¹È:ò¹T‘”§þ wá—ÒÒ™)þx²cÚ ÝÜL¤*ôþ² Ë>: :²¤E»/»¥YIË^ìþC/$ííªW²®³.›µd…lûô+:µgûçe†EªK1ízi£$ß¼?üŠªN6Ñ>ß_{4“4ˆ®G˜$®:à&Ý,‰L&¦MÛ?ðzäT׬}K7õâGW»_åž/iq=`.öù”ô ™:Ù;;za¹*S/ µ‘_2ÿvš¦6á’ƒãë¬Hó$Ê:i»­©/˜èkuµ/85¶÷ø;z€j¢)ã.Ñ‘äšÕ6Ñ×V#)R·ö¹ö«ÄÞ'¹,r¸ôí­dR²ÓÝ#ÓÞwytE‡Z¢g{3ð±’4)ª…“¯¯Ëc•]˜æ² ÝPǨÙÙéæri]PMÛ\¢!a“Îp½–ýèt™Wí~·××Q–Xþþæ’i•*6Ð ‹ ^Š^aɘKqòû²DÇÇ>×zÕêÓ³²ìföß—Ë™Ø Ý±kýP4:wEjÕdGÇöKJ©K=HcHsJvô}¶ì»·´]ãñþµù,÷Òò˸ùû|nvN¯79Z½\¿ÿÂÎ4I’þ¥×|=ŸÖON…®ÜÚ]S-Ÿï÷ÒúÒBéþºi¿ÖG²ŸP´rèµûZß¿¯Ëµ÷2ëÚS}RìYz¢úûì¯Þ_G¹ãêoùxc™’~=ãŽK¾ìðÈ£‘£-c0.ùÔóo-‡do):™—|ÛÙÕYzzöëx¼ÑìÌÄao÷éz±<²ÿÉY×u8µ}ü¸^©žgûUÍÃ,½46èR æà3链OÍ"Å¿´úC_“îÍ—f2/C‡WoWÝð|j6]/; Í'#©xiFÛ}ZYùäÏ÷¡Yew%¯©VÿüC3ÛóËÉ‘æ~v÷S³ÛýõM-˜Ôs»,ƒ¹¼ˆÞÒ:ö˰Høõ´¨e _žÃ$'lâvȬt-ÊeØÌpèp*ÔrõÓ.šìi-7.UºÍê‹€F @ÿï6Ëòõ2òÌ'Ñ]»Ìº ÏÖþèøØõŸn9Qz#‹fgóÓ­Ðëë((D–Ë›l÷>Ý’7ÒUµ”IB>ÆåÖØîIªå•îü¸=?{Eo–W–\IÙ¥vyUv½ÂA zsÝöé•Iø¥ ´Z²eº÷Ó«{®ëùü —WhºWÑ ÕÔ/¯Ò¤G‚¹–ÎË+•ôEèç‹´ðíÕ¾ìs-­¼Öâ^íÏN±BÝMúI¿Ýj¾|jÛ~‰™Þ^Û½.Ÿ\wc·ô› YÜ'ÿðéMõëäÈ2ê‚rņfH`å(º)WL¡ûËRh-¥¸@_1‰Et ߤ†"—+¦yq:dS¥}±7WLôÆ«ÔÓ*–ÓÙ¯˜ê…iÓŸäzLC3Ž˜L·“4gô®Yâ3¦s· ¤딯˜ÐÁ ÄÑU |…”/„]6G2­ð~]!©Áúá.[¶êÏÚêï&ŸO«g†÷3® XÑãòz,Ø?¢i8ª›^Ö|Ò3/¸ìZ<9H©\Áü‹½¶‘Þ4Ÿñôõ²µÎÒž­_`‚".-w2Ÿö#Šž_á\)ìðû3Ün*-f xO0Ä .9 ’g{¾O0å…pëݬ¬=#YÀ&ÉŒN{þO0Ç-‡ …,‰Ž ÒrD-h¼O0é…,+˜ª¯ÿþFIÕæÕµúz ö>±, Ùdˆð1´úü€Âôú{¢–”ŸHÚËD}!¸+›ê9‘¸‚DqéÛž$ÏÞa•Ó4ýóO$˜ ¢˜µåˆÏ'’h!S—þÒé°£s‘È~6¼¦Ü@¦Ž¾Ü-3ž‰­Î „f"2Ü®b8â'ŽªÅ—ž—ŠÕi[f–ωæ lõ>q\i.íEBsÊs¶?Q`ÂÕ•ƺùt ²^œ¥%¿È/? hé=BñÛÍÇö -^ñž7vÇ>ÿ7­(½ ½kHÄŸƒÇ_äŠþáýŸ‹ÝX<®ª4µ©©`ñ+}™s!Ÿ—3pañ¤÷”Ę8ÀxYã½¥møõ€ñ•H@’¶ž`<ÆZÞQF+Œ—w£MÄ‘7¸õãÑ r³%Gë{ñ:ðRÅ:÷É!ÁŒ—+ª¸Ne7)¹Áx-ýÖÉ{5ûp‚ñ²ÒÔ5UÜŒ—³”õÇ,·äà ÆKá%~9 ÛÞÿTƒ#¬3¸-ºÀxΘԩœ6n0¾²Zz—õCƒ`¼ åSni“íŽç¨JdÎ×®—\7ùhÚn¶ÿrÝ,PW­ƒÞü쮟EN8~¬Áå9šliu,¬þáyÊH2¤ ,N4ž“¢ûT4Ñxi‚œßíçtýwq;­Št…m¹ž¼»yÏ\þö´Ko,¤£á/ÅœHÆ(œ%—ñ:Âζ ŽÕi¶¼ÂV‡SçôI½`8ް×r=Š9é˜q…ÍvöIóH¸-n{a7²,éí Êý ÛílË·¬j¯Ùý#ì7×Zj”TÕÑxV[k%Õ†a}¨C×Q×ËiuµÑhaË£;ʳ;àòOЫß,ª*ž„>Ñø)Ý"ª­(¦:OÌEÂ"½¸ô>ÝA“Ÿ–¦MÈz¶ȩ̈Z2ƒDq0#û¼KåÁMÓ׉9!¬ò ô‹îZŸh<šr4,U!l}˜—Tôæ$™æÛÆËÍèÚÝ¿a^'æ†êWd´Zq¯é€ãÉÑcÅ´ãöøâ‡0b¾!‘œb(aÂðION¶ïåÂ)l“ê»]p¥}Ü'Ю¤˜Å?áÎë,UlÁñRÄ MÈ šñu­ bÚ¹ž‹¸àx­ì»”«ßÿ€{A—%ºl9'OŽ]Ro¢ÄâŸp³¼b.9`ž8Ðx‰zA«fùDh®í6—Õ‘™p´ý@ã'ª05™Ïx íÈŽŽ جåDãÉs¢™²|ÛüÏß'4áTgi˃žÏWÍLÊ .V ñ:Þ¯vð^ùœŠnZ€Æ[Üœ/ed% çòâ#N,‰.´ç?¶UV- Ű½Îí•#wP/Œ'÷¾Ñx¼$¹DEïPMxñRØK¦fãsšˆ'¿/ͺqDlÿñÖóIT³&öüŸ‡#ãik³ÎŽ=þçÙ´‘&PÈ"õo—h¼¤»è ƒ0ÀTçÇÑ–9AóJç©ådÈ_’O"õáŠóC±òxry–vvšÓv(f"Û¤eFžÍë9;NTÁLkó¬Æàã­CKA‰‰žÃ^J›pÔ ×ÆK÷Pa1–üz»ÿaØQ¥åÈíÊR-õ Ñ÷LÓë4«äJ™‘;@ãm5åÔpìñ³žq’È„éhøáà‚wŠDLXp>ÜŠŠO¬5–ÏãYàŸhv)Vy®V>u¸5À¥»má @‘52vÿO·ªb×@iýŠ£í/'Q?×Ð~î5~ºuÒê_ÄR­Ý³‡W˜€‹uš‹y^¥—5U§jÝh¼éƵ 法O]5&øÀS¢‹B¸Ñx|úÂZôdµs‡Om¸œ–eQ[€Æ#-ƒÅ'6ŸÿÓ§çö‹ê.ùψ€TKÁe((g"ŽÏˆÂ2Mæ´"®o‰8‰×³9¯#¢A5(П¤ Î=#"jr‘k96øÔ¯#¢"ÕD‘€‚GWÜ'/Y³§Óy·Ú¹3 +òjJߤKlõ΀  8tÀ=â:JÙA‰U'žš¯£V1ƒÏÿˆgÉÄ( ¡Æd`üâr­ŽN‹ßý3šfw$Éz˜åIî ŒÏVdÀÁάó,þ&&É(ŸÒ—\2jãÚr°àL0³S$D}U¯›<À™­feƒRuŽu|bä¹Öƒœí‹—] Df© jùÄRtP¤Ø+–±ô‹×bZ8`ñÂäp.õCÅíÅC'D–@¼ØÚ0’¿:…ò#j„ÅëaôªúîX/çC«ÆÞA]<…ã2eº]58ð‚âq\ñ“§Ç?HU릋—Xã×(®¡x<…E¶Èâ Š—1ØTIݶНàÉŽJçŠçTò];‚â;™v=a±º÷ŠG½ê¯=¤ øA…›ìWvŸP<*¬R‚ã¹Ê‰·,IòƒfÞH<¯ÜåÚ¿AâqëqåGTßL2 ó>#$´“ÒSìq„ÄËzáWë ùêH¼ùP×~éþ¦“ê'I˜¯s¦ã§s>.Ûó0‹¯Ï]8ü"Ƙ:§ÝŠ>mŸ×–Rš»=‹páð”˜+¹½û2½V—½pÛt/¯ë>qxóQ%Œ^wþaù_”/&y­ø6^SâðZ{½(p”ç ~v< —ÕQÒ©ÚS\8üþ¢Ó%Éolûò{^Á‡ÿ±:/¹¥þn»âV%‡m))*‹WÈ•ŠÞ… x_nŸáÒI·ÇmšQYü ’?’W!eñ䨍qà¿âẤ"GeññwòÞ“î÷úXݽr–ÙË —=Å"MZY®íñ²/|`éáqWÃ>N­¬ô†Tg·DcÓ*˰£}áïD!4)œ·zqýðÀšûá¸ñ÷œiGx²7Ÿ½"/w!¡%¯£e«¯ƒ:H¬íëd¾äÞSïYÉ ^¥ðV)—! Ñz½´Â‹X²Ð| 0/­âè·G\)ï?›typÕpúÝ^œè;M>•”yu­w4 Éñ¤k8á¹”K«Úý«UzË—˜—R~ÊS’FVÑï¢ïÒK²?z„j®âÙ$E¹ÔÖÁÀ‘÷Z÷}§‰koY¬5iy¬Nçíx’‡Ic/;‰«aݹGç’æÂÛÉ Ð÷J^NËéöôÓ;N¤“›îÀœkyQ O›žî€eÎh²«º}¢ïÙŠ•% ž9:¼^¯Œj[w¦Nô¢ƒŽÉòí=¼!²zd›5½üDß­5]¹–zûbÄ Š¯:U%^q‚ïK»«Í+˪¹._ä­«[z)(é°Ôe|œ ÛI±:/:—sàÊ*×ÊH–uЯJø—´É—žL½Ô`½ýh„C› :šÕƒž~¸UM¢…KýøÔ¬¼(&óF‚Ï8€•_î -wÁÑZ‹N„ägBÌ©£AÁªsÝà;FCNIÙw!ü ôzÐF¡ã’óEùÏiM–D/hNæç6ñ®QËlà;Ã@¼|·¿þïɲ|Otö ®(4¡ä JiQ+«beìú·~¡ïVí+ÅS AnÐXÎîàmI񼂿G n¼g|ìuÇð¶ürLtš—~`‰ ZV"ý’oøréÝ–îRxë“(rµeçëŒúúi~.fä«ã3B‹˜õÀ5/d½àw¹#[IÊû†`ØíÒ-q8îRxƒ9Ë­¯[µØ'þc½í@¡STó¾ð£ªHiÊs“˜zµÝ'þä§gU*^Z‹h2g]AÙÆKð‰Á[ž"yÚ›½ŽöÄै¥Ú$<Ù; >À·—×\à•¥>ïRx £YÝA¡¾×Ùþ þÙý©¦È®|—›ªlÔ¦¨ê}bð/+Õ”(⶯•?0øõe}´÷ò|Ÿà§gúÈžÈú»Þª, ãkņŸØ«Y¹%“蚀Áƒëá÷º1ø¼"5yåÕ²Ot Ä:©ïq|"ÏÖ$¡Eõ2Ý·æî€I¦?{µüO°·V¢7>åÏ¡âÿÏ xçÇù—ßû"þûK;× Ác³*z>σçóQ’Áy÷BZmŒd4ÀÚƒ§£§`åz{½v…ž‘b½Ž7/-Naˆ×-Fö1P­¾%Àày¯P[ÉßèiþEüå±ýUCG£Ï?q×Äê)²$ÓYÏÙnÕýès>¢vW’Ò¨mŠêá¹¾Óg<íó ˆ‡„ óA9¼-N' sT_p0´ ùG7ÁQOÕaWlÅî¡£Ó“H«èx´Ôó¸`ôñ]¹>y =Xêáy~jÎÊÚ펜íö2˜²âÖÉy•Ãs¶, …G¹£9:$3‡åðæŸ)¼ |gÈŸƒšh}Lv$»"³Žƒaˆé‰[ 8…ÄA9<˜Ä–*†€CÀÆÂ&¦áU™Ïê£$êð^ÇŠgõ%{ôñ÷”ÛðìTyª:/rÝ-Sàåì'ÛSÐÍÕ‚ß‹œFëÃGrÃu¢ñ(ny%2Þˆ{–Ûê¡UGÕƒrxS]“>ænïQt€ vZÙƒrx4ç ½Ùü椧aù“á¥ÃšANþAQcª<Á7€¥u™ùö žÛÓl yé7ÿÇÇ_Þw¡ñðåé#ú`[ײv™äcÝ#ª†çóI+Àöôð ÛÞÉF 9fP OyQ²V‡<å(‡7³cå´Ó*N8^Fv: wϯrxÓ±ìuu'ìN@“ìÀÅõy§ »£ÉkPo¢4!önuWº@Ï—äˆÈ£É^Ž¿ZðÀk}$+8Í”o­ ^.¨ÌcÇ.8÷ѹ?òð¥ƒÑ.=çþVÌ" Û»1NùPd^€úiÕŠÊáÙ`S]x“'ùú­!ʨQ9–AFuä4,\ÈŽtµ ¾X£ŽžŽê¸yß}ù{dÿíìf=‘;§rd]€¼.¹’Ûggã,‡7ÍÜŸüüå•°´h.ï帼š¨Kñån9K@q.ÕË«2á‡ñ0§€œÆt»#ÍÔîjxW]h>ȇ.@Þ_?Q– eé] oÒÓŠÂßùpçœ>©z÷æñêåÓvÚ·¥0‰‡ODþ>ýEcA5¼Ý^;GùЧ3N‡œÊ¹ÃÙâ“»Þœ¾L£ÖŽêá]xi%Y=ª‡7»M'C«ê]I”£Þˆx¯xfOH7¥‘>ã!’ Uð[û]ï†I%b\ˆ¼GÓÒ]Ç¿ô¨^ºŽÝ¤à|_ˆ¼ï€ÙÒÕ ÝYIK€Ç…È?†¹S!áÝïW<ÛγCÚNDÞe?CZ¶žn‚3šîôJèé8<"ïË— ¦Áü.ˆ·ÏÛ •dDõðÅjú`¦Y~ûK€;§X™¹-Ñè •ÍÅï êáÝ,Â'Ûíñ/,„·ÕáÛÖ_|—ÃWÒÔ²È塯9¡…-)¤`tÝñij½º×rAAFbÝh¯µ&ºJÂkC\x/(ª‘*ܰ Y#Óeujæ¡:^Nq aX}z÷åbÔ»&Þì®K¬í«qÍÚŸYà°&žëi?tD\x¼-ŸŒà‚†ÛË]O ±Z ÜKPy‘z|J ·/ ³AU‹‘J=⦱çÓQ*{x­ó ¤ÂI'«ÓÖ¶ ‡ÕáIt©{¿³&Þ×/[#æ'ÜLuiA­fÿuÂÈ(ÚDïw-ùÂã}ù(¿W®Þ5ñæ³jµaÊ6N»‡—©q{©ôŸÅÈÿµymLàÊX@~à-Ó“}§Ï¥ xÃŒ €¼"ã"…)/É<„k# ·“‡Ú’SH])‹[ÑÐ{šƒz |áÔjý”7"OÏü%{…Uñ?½+— ãpéeVo9Däèzª#DÖà…Í®ç΃h ¦–ÞÙìoDÐRÁÐEÄÏöáî§îyÙ‘™XÏ9=Õwh  ‰ªâüð–µV ?1r5É-G€¼d 1,ú¸ñxãô%oå•Ë—Ç]ƒÀ¤YEÄÇkñºĬÁñFK®Æ' p<Ýv:ãOÎõ6adZàõuš@­Ük­xd™ÐAm/µ8ÛËK6 t­a2†ãíÏ”EäŽßЇäîå8—_ù¦Ô88<"wÙ¡‡îüÆã­‰5ã«H³…)ä¦ám͸x2àÏÆx LÉè1†‡ÞÓ/&;㌮7ß0›z龡ñ6N]¬ÈoDòÃüñ£ñŠ”2 Š“»ÜhÆ>‡ /ÁÁP#(žÁ[Vz㎗GBáÊÌÎlsCñÚ}.yEPL¶ MÙ!3PVÆgÒ´zÁâýŽa¬]´&í鸌l/; I¸Áx˜ƒðˆò'ŸHŠtE¥b{ùbôºÔ¦P¤Q#4ž{1¦ÙÑÓ« ž—3h|‚¸¢öº†Ûþ ň1 Ü`|µ€C¢ì³§n0>Ëáaî× Áx K¦8äí—Ÿ\e…q8›Ù¾0<Ý(AGg‡5ð%2bb/'‘¾Áø„F‡E`|&ìgƒ„t}öíùº‡‡Š³qÉ ]ÁZQ|±!KŠ»)8úCÀ +Ï •ú70|g>Ü|&aý)„¥ô×íö1€á!µ3†«r©€—×Öh¦Š3¨0äg7¯Å‚»çé¾:º³°¿eAA²Í9xù]FÔ>.ûçÒC‘•#DH¼–K Ÿ‹zt§!ÝanïΊøÁîH½•›íkj넆†ßzžÿDŒ6ˆ–^¯ºpœ„ l>ÍN ðºg¾]3Ò04Û]~êËGi°†u  xæÈ'Ч/Àíå•éÒúpKÝtfÅw$â.¸Ïßž¸@ñCñÐÄ,éÎ|‚¯§4@ÇM%Ÿ+Šå½ôúË¡tùOµ>ô]_˜’М”ïÚú¯ÂÈ·Òm—|ûÆÀ‰éížâýðiブ}™E‡3¥ø&ÅÝó²ª^̰˜¬8<œŠÀxJÞ)ÿ½§¿øòè"†§`#0^ÿª&ßÃgÜa…×¾‹›§æñïð÷ŠÓ—3[-‰˜¨Ì^—~cñs[ÓFÛ—GõzеôÙc劗O  ž™cd«ƒ½¤)·S&P<¥Çàywq‡¯¾ä°ýh ‰ x°ÚúåÐÚóW\¾ü ,¾¡x$ ¢¯º?F¶"ÛÖÓ‘ÇwP<$ðÕ”»ÏÕ=Éгhd«íN7¼j߃§ž±ƺûwX|§OR±®pæÑ|†ê””£ ÆÍTãªOÞ<@>WìÆâÉÀu›KwEsðCåC«ò úûëѪñ\ѤëNp'rüýŠF8‘ØØ§m_3[úõâÙ~ÆÂÅc™Ù6¯Pú~9”8Üd±Ž&2÷ˆ¶•{è›=½¤X"[ýèGP|”&p"›Ï™­@ñèËN’ ñ<èåó]Sèd´¯1•6ÙjXq–lîô#[Ì[rÂLº`d«•ë˜â‘:ü1²•ÕdæãgœBáBâöšÃ)úÙjVÔ±¹ÑÈV„WNå¶âèw0²µÂ i¶c_<5Å7(Üœ?î˜ØjH{ÂDn6!ñ  O,x l…ŠÕ/É >³úÌg°ë­8:(•n;ŸÈzñ‰½òt þcb«»TŽ-›=ñÒÁt£Z›ï1²Õ«)Qˆ5ß1™án×î/«•ŒÍ6dЧª_•â {¾™­îq&†y>MœÁÏà<3ŸC[‘MÙ{68`Š·“GqG}æGütüÚšÞ¿ÕÿúÛß½ýïò[Ïü»ÿñ%߇3k3+($ïªÓñ»ÿáõ7¿¢²ðß¼÷?¿ÿîwŸôذZéï.,á…FÏCMR|Ço¯Ã®×ïoøíƒJ×Ëû²ÉÁß\7Âë$Z(îo¯[ñuÛæH·¢ïô•Ïë×M¦ñؾ*ÐŒP®øßþ§_þÃûßÿÍú÷ÿ&ÞˆMs޽ž2R™ÃD–Ån÷Îé›Ë(ü“ÁOK›"B¿ä¿—,–Ÿ!¹TæiRú\/#Á”¦«äÕƒ*»öûqÕ7Ò%]Qy£mô§…¨O ó¹&{¼d·b`¡Ô j~Ù¯¾¿¬LG(¥kŸ„ÔsÙwOH/†K#¯¼qB"…ÂÏeß/GƒÎµ››žžƒð\óÇuÿçS~E ¬¢gäòëº÷?ý¢_{¥7 5Ó®úõ¿+üüÍÿÊÅ/ºüˆ_²ßýý½~ô^ÿ—“qE:£¼ÿ÷gXÄ„KV G}ßHAߦ߿‘† ²p°©Ãð™<s$ár5Ž›I*9šÑŸOšÌF˜†#“ ?T²*¤³W5á·VX­/ bÂû'µ Vôe-f’K xÖŒ°V8d<Õ{ΈÀ“¬¸êcÝÔF£m£LºaˆPû:ÈĔˀÛòÈoÕ³ÏtŸö¿úh¼B ½/ÿÁfš3åe1ù2×lõkÆ/êœÎ4ÌÉÓŠpfÈOÅ${XGÄOó0 u¦V”:_ÐBî#˜Ý¼œ7Ó¤¤˜@1¼Ìã˜4‰³tsƒ\/çÑ–G1¥â‚æJNç³ÛÈÞì{ðHÃ1Ržø"vÔÃöáj×ò?wz˜±VÔÓ ¼ ¹\w-/€'9Üf3]¯~fÖâº%¦\¡ƒ’:„VãuD Q×Ñ­5¡ —65øî¨çÅÔFYÝzBC~O´$½0kø…#©710<)WÐæQõŒ»÷!=éiL»9l†)Fl§÷wÑ:spÌIÐFÖÚ|ŠÃ™ƒË8g m#õhH„JèôÑ<è=rp•>=kk·¾‚nGS%6Œ0Ñ9spºžfQˆ£ àÈÁé$ʱ9u/­=spµ1> æ¾–ï16âŠÏšžÿ¿¸uéæ‘\OÒ•ƒÓAb’Nîdò~˜Hd%'Ï=’pðc›;WzDOU7mÍžo\c÷ Ú-ùdäž½,e2ãžKèõ QPdkïÓÖ2?Ç“€GNs¦PÔýPY¸¬×alœVÀ‡„i8Ü/¦0â&_€ç‘¬ÛÏ( —p߀>Ñ`è`6i$…Åýšá©úUjªžG:ÒpL3`SnÆw¾¼>Pâ—¨O¹àÒËlß¼à?ŽzÁµ¦Ù ¶…é¤Fi¸ŒË ½Ù .¶áuTÏ`9[Ä‹N ¹Û4?]g.3.ÚŽz÷v¥#—§ùHSf(¼î6ÍÛxíópÕÃQ{zŽ<#` Œ, }^Ág®ï]í™Wð™‡ë6O€¥õÊï3‡å’^ØòƒZ@P)þ†C¤—gù<\gž0[¥a‚*¼T¨~ æ1›îíô1¶dóž_ÿø§Æî‡[ïEvAmSìJÖ²cëƒâ:ì©://¿‹ëÅwr"õ¸ï,ú=5F(åµ¹÷/£ýÄ~ôȯ·Á¥vÀ¬Õ8à-F›ÿ Ò ˆgq&èÊ1ÏêòëOAO4|fÅå×;"]ÙãŠÙ¢zž9:ËÍóU_×(“°ê¸¶¹3u™²<ÏÏË¥’2ŒÚܵí–½g絛S—õÅe ¦¿QF€zù©;ëë O/rV2¦ Õ$]–™¡VMÿõÉÝøõH˜GîôÁK/H"ZX_7¾Ó¥räØ{ߑܗä{{9¸¿ùõ¶ú6÷£ ¼®7³6Ź\N¿^»CsÈ|&]~= ±þ’ñt5òëËaÜçË'Þåu€âÐÇoï–½0}œ!†Šd‹nÇžíYû?æW£;ÏÈ3˜öj „Òß\¢FwÂ&97¥ø@˜«¼®cÃíðij´²’Бooåqäâ˜ê5ºCÎɈÓí,ZAyž|šs;£Nwš/`OoÏ|¾›¨Iê\1Õò¶±+¡EB-AÁX<´¹‰g™–³˜k¾£VwhŸy÷<=ßxÖ×É^éóiów£^÷ùes'f‹}{+o”/¯KŒíÌ'2²†Dq{ÆBŸõuRÚ|™¯ñ¾Ò™fµEg‘oOé³–šãRÏRÃÔ¨ÜuØüêŒ2VlÓ¾a«ûd<Ÿ‘ò–е·Ér¬9mQ«;µ©(#¯àº<{§$oÒÃÎSpS¼YØç÷7̳úF8ÃKÔé ƒsÿ¨d¸ ì*íð—ä¨ÕÎ#,Ͼ»€yVV‚ÀÙhnæYØe$¿=luçhH²‰ÌBâYÉŽÜŒEhÖ"ÇÞ(:˜^la÷ÝêN Ô`ÕJÁÀ çØØmÉyµyì¿!Ù:Χ€í¬¯ÓóÁ½ÍÃŒzÝ¡§‘ã¦åñ:–›x¶1 ¼<Ô«W –CV‚ÄÀ¯ÇíLŸº÷µºSÙ[aè{²£¾Žv[‘•,×z÷ºS…bÅ^àvÖ×éå´Sý™q—×e‹IŸiìAy$ò>Ϥ^åuŒù‚á y;hEf– uù-óeJÈNáô§?Ëë À’dl†ön=1¥tD&evº›ÖÝbгºòøG²JílbâKkqu/Ja:CÆU]‡Q+æÈ«w—Š¢ÿf !æÕã¤ç÷ï_¹˜w(?Äî®ü/ï€[™§òùÉ~úDÆ™!4ž€zÉ•ýñc¼úàø­×ß¾>ÚØê¯•% ”|ûãJ”’º>ámþhüñr]‰Ìµ%º~¾üó¿ÜR—ú b–ßü)qöe©¼ö”¹tÓ¶Ãà¡ œ¿ýÍn;¯bÊÅwʹýýó_çü™Œá¤ t­l-y‰¥ÿôËû×_Þÿö?þñk“;¤ÿâ?øíìoúÉ!:ßé—·Vãþëg/~Z©&²S²ºþÃõç;&‰™¶òùOþÿä7|‘~zÍ_žw.è¤ÿtPþñI¯Ù·þº·¯î#ØüñŠÄsG1“ÉaÎw$.³³ãÎPêÖ;'²í݈÷¬UúˆÄ3S[åkñ/>íþ3/ ¹L1— µƒI>$S¡Ÿœ›ÑqFâRvå4Û8TxDâÜNö¢Ùƒ G´0—”AãýŽÄyœ¾;€Ž7C~âv\iÕI$Èï@<[|mú=ò‡g ≎‡þäˆÃÅQ4,·VöyÝq¸‚â|›£´¹eù†ÔV%©Ckÿ Ã3®!Û²+^<õ†ËÖé]`íqB·3 G4¸·¢Œ’‚!ìÚUŲ́<Œf°+Ä„ 2¿åÓs>£pÔ†•“Ë6 ƒ# Grqf°ð+èr“9äVôûȆË:Q]“˜^Ì0ÓK@Ld’l G.a µ?>óÃõÛtáEc†çeLö Â_Ï!}†á%RÛŠy†ƒ8G®/É#É6D£Ý¥yV¤°‹6ªÚî0œåÕ†vðÃQÌ$ßèƒowž‘ :-ð3 ›ãr@Ž ŒŒádúë{qïˆÂ9Çòì4ëĶ; GC¨k} ~DáEq uu«<ÌEGÎïÓ"™aãÆ¿dý+át†qlßQ¸ÞÅ „(;¢pŽv)ÓJS0þ…ÃÁ”ïU¦³Qx&ù«Olòí„g@t¶Ýሔ….¿ráè-Íü$€>ƒp´ ÕÎ:²5·;G¶ Cñp}ùg®ÌëQ¢á\VàQéÏd×#çìZIu¸kŽ(³7)[ÕÏ¥ Ë­0P ýÊG®w„¾ìÇ ö0\2ÁóSYr@8'?*L£• çlqpàAíŽÂ¥ó© €ðÍi§Ž(œ×/DØ’ýDá?§€ #=ȯi¥áÌL?rº(œÕŸp¶x{ö†óó£Çh² 7›o.4¨ßax±Â¶6,?;ï0œ³¥óa£·|üÍgžmØú‚U¬¯q‡áÙ§?6^7hÇÐòSr )Rv¦Ï# ׺}m›œùƒ²î3 çý¨KckAîÛÃP[oÑ<Âp|Ö™F,ýÏ0³,Qf*rÛw~Mw„PlÌä­; ·ÕÓ¹‘›àøÝ‡Â&†M§…:(çÌ£*ÝÌÆq3{֨Ѭè礜csÊbf²nVï@œ££‹ #œò쳑 ÿRFVz}{ûñˆã±M‚—ÏS?)çðÀŠÚ•éù³Ï@áMh}zYÊ9½ÚèéS»‚ü>Õ¤KKVÎÿÑH†O&OS| À‰çE-ÔU÷E9Wrbœ½.§EÿŠÔ]¸Ñ;’*3ÛçïGØD9æŸ^H 7Éa¹-νs¾ùÇ…ÍÍ–c}ÊÒûÃЫP9ÖW×3¶÷}~ÇþLÏæ‡Y뤜“’& ­×¶ÜÛ)2d ümx ïÉ9G|/K·wÇŸò™X.#PI=“© aþÑ À<Û;ŠçË÷yº°|ƒ§ÃGœ§C&½H+ž Ÿ‡[»kNäíʽëíéfÑý!Z5Íÿ©[p2ÈÞf'†:Ýx:›§YðmÞåŸÏå#8‚ù/Sû}ÍÃÕù©X«q O8xŸëŸŠÙêSF4‡s…~*v£œ£d9ï«ÏÍ‚CrÎbeO'åg{4ª6¦ÇK§aj¬žœ¬U׿¿à”.|~ÐÝç–q22i¯å³N³j¼zò^²¿þa–Y<ŽêÝ&'髯sÐáö(wÙ-ð£~ÑTÃI:—35ád†~¦^‰NÒ¶q•ŠñÒ9ޖޝõƒô»ìHËóÑ’reÀÕû"#b"«Dú¢¤sDDú|"ù) ôt¨ºT?|ÂIaE"ç]-i~ú”m7<üì^uø¤Ù†"7êw@9‡G¾ÛÒ)ÏÞ(v¸ÄƒØÊ,ý?O{}zÔªLi é'f8Ã)°Su&š²¤ãŽUëÍ'­ä±îÍ)8dÒ¢Ù„`ø Ñ3pêfdJg4©­)¢|îqìZ<ôsXAÝI8—mÀz1ï›ñP  ÝJH8'ÝH=Hí<~@8'¡ –Ù#ÛÉÍ?CyôTm4ùí(@wZÞ°zÇ“pŽÍév®ËvB¢Š0XhÃW½ú€2’±v`T|~Ç …Ð8‘A±ª¶HÊàöº%}Þ÷‰ÄÐ'-@ñ¬\ä@r¨ö”3&§j· ËMA2×ëÍè O¾9-"3ï <«“@Ô I‘@Y^Cj>,ƒÑ`¡Ôûîrãh4^¤äþT»|Âhƒqß™.‡8ON² /¿é1º…êNGs}nì>axþúˆÈfU&åRÔò¾úÜ€ ˜±‹^´:öä¢2$j6îiìÄe¾äÃêO¹l̆¤X¹à Á6€m²fÓ£¥Âån6H˜`ך >!`¬¥Út ú”îO¹ÙÀ>j¥†÷Pô@“óe®ÃûbœËpš,ÚO³ÓÔ~âßr¿:|N\]n¯ÿ™pî?+¿,¯MîV*öá é(&¶jï€ð4&UÀ¸íõÐÇnŽ7¥Ä2-5á«qúÉðvw‹N>C)Ø­ZÙ°¸S°ÜÒ=Ðï÷ ÍÎÌc¼TÂÓ°Çè ˜òZ³< à½Y§â…ÂãF¡ñ™ƒr8BÞÉÔy"Ñv‡h]Ó…¤¥p¦@ü&Q0qªW€Ãsöª1Õ2`"Àá¥eV%š(8¼é¯Jñ¨àp»YMÜøæáüéµKÔ‡%¥Ûr€Ãör í«Þì0T‘¡B&ûGÐ!óÃàLXàðhT­MzÒGÌÃâ3—&û<¬‡G47@åûÆáI¿2õ„b¯°Íñ¹\¾M³†!±'ïL—šÍ'"üÄáŸ>¢Õž¹|gĹmn_²f€nŽ£ë$¤Å§I_8üæëÅíÅ€GÄLuCê¥Ýr €xý\!¨‘vÜA£‹åØÊ'‰rü#âß0“ÂSx—o ÕÇìm@4ˆý‡aE=”›—Çìh³ f±±‡'æÂ«ÖÁ6žî ˆ¯ÐÝ)¤6žôˆ×Ùkp{ì§÷Äk<›°r„Ì:î;Àá ¹mÙûSO´jS§-Ãlåš7ÏîLHÚ±]OŽ‘BF™ýhôK¡bM&pÁÆ|ãð{kÑdÐy0ú…Ï»ž†ãõ¹X‰”!ÙÙza/°[$Ù”[pøIÐUd„u¶[€Ãã€Ê«€ˆ9 ³ˆÝ ž¬¨¥°Nœ5_èUŸŠ´§¤Ÿ³;¦§!>q^œ^F:-–?ÂáEþP9ê$­‡Ç®H´å4“ý§6œ'eáð œPZ±GÀ7ÇÙbùtR§ †¯PüÕIÏÝsæ4IrÈ“tóyOÞza”êôÎçãUêbà^‘¤Í†¯Ô=A"œm´ÊÃã£Ð}á³òÎÅmÉ,È?:ˆ~€ð”ºÑC™}ÂÛÀÎ ïÊÃ…xGbob\ܲAÞ§p‹?$Õ|ᔃǔóDи >ÙØÒ«F<¢M•°” §p ^Ñ%®L/™wšce:Öm{wë‰ÁËA6Úá)þÔ +Éù&ôjË9™æX\SH‹ S€ÀS.ã{ú¢¹lÓ ŠMÖØ7þ¾é‹ŸöäÈ ¿“{¡{P~ôëß‘ xA‹ ®?½èm|çI¹zøà„c¨­1~¿Ožh±sdZpGòV²*ŸätØGQ¬@¾ –ü@ÜSc%ÕÕîüI›3av´Ê3þiŒslã¹ïø‰è»Ñ‰,ýgehgüE¾4Ñ(íÍPGôF«2Þé^4†ÜÀ:Û²³«±c¦BWÙÝ, Ëpa swTBFq§™°ôä>"_-½÷–Ö‰xÝq3ÄA¤™-ö @÷}—O mÁÄu³À©[ œû »å‹hà#Ð=Aÿ-ÞtTé€R2 Žîãp?a‹EºiÓà>j@-‡‰†ÀÂê jºƒ*S *VÐ=Ñé“Éã[®ímà§Ä£Cî<*uì²§ÉQÆ@c¼©ë w)Eüà ÐÀ½7nQm ¸‹ÊrÎgÂʸc² ô1g+Ü+ÍðÊäRn¼}S@1૲ý‚Ûi,xnzŸnŸŒ®¢w·xmÚ‰6VéHŠ~ÖÀí™Á ÖëbÎÏ·7ÜÎmÜ –&ë!ê8vNËv€­8™ ³Ò¸}RX ¼Dip;Ž/Ô]"’o¸Ý6ƒCœ±ð„š{AJ«q´n7å*QV X夆1 '+o8áöOü_n'Ý T  àöî•»Ó}œnß|Ž ·öEÌg Æ†¼`¤;tÀí~ˆÖ}zW·OÞ[rùàvF?l¦”çn§?‘WßÁíÌghj­Ü>é?ÞdrÐ}nÅ›¦§W`]p;ƒ®Æ@Ûº#¸i½ÝÒy-˜îb¥»zz ë£!ëD†‹ÁŒùé¥ àöÅ×5v@O¸=ÓžLÂaùpšn‡Ýƒù¸]m(Oûö ·K˜(¯“n³þånߌÞhÏÌÎ n×ãìmM†ܾpP‘Ç€V Ìióô?ã n‡Îú`•n§»}2a*å ýÜ®—™@ì#´Ý(K™>³FÀ*eÔ­UsÐ}í#¨ÛºÏý—œáNÅ ·Wp W·ómæ"îá.Ïá³Ð’¨ÿiÙº.¸?2™Ô Dp;¯˜ïó7"¸]^1…ÇÝáòn¶áù·q#Üp;ˆ¥l€Ápàvæ{ v´Dp;ÉlxÄ‹gs/¼½Ë’ã }S„·CGÌ ù¾¢îs”G#Õ mZ¢ºw¶·OÖ\€{6¶ìIk@äìk¹ q§ëÀÞ?Ü!^̰lô ¸KóÈü¶g¸Ì ¸3÷“"§ÜvTø¾K:›!)#Ü8¬½LÓ(q#À]aºökì0KaÛ¼3úºG€»Î*ÔOiïô àN”%uTlû/ÀÎ8˜Êçòóܺyƒ8´¨ð]º¨¢ÙöôÓ{î6p˜ÖL‹!oÀÂbð -r¸C.\ñL¾¼÷F÷?¦ú/¼)¦ïgVú·’=²Þ»~£íZ[¨c•é“UÊ-Àë!åºÀv#&eÙyÃ]ÛW!Dáv ¶ÏåÕðXí`•"ú§á…é´]Ñ‚ÔæÓ v°J¶³S¦y[Œ¶CS]…}#[/¶¦dŠk¢u£írÎôM™þÙú¤•BtÉcÑiWz·/ÜŽìçI+…bÌ<™íX·[—LÇòýçÀírzÚ~ÊŠo¸sÎäÁzOÏÈL+í”<%Ûrgœ#ÞÝþÙ}ŽÖ’G=¶ÍˆˆÁöÁ´\©þ`¶‹È×ÝÌnÉ1ÖnµÕ0]`²­ÝêËhÌ©¿°öüeåЩ·»¤ü•ÎÆ’á6ë‚Ú™ßÍ$µ}aé/NF­tƒi«C¬]Æ‚\ÒÖ®ßêÊ—élȸ)¯,Ò—ƒW“г]¨Ä]ð©ŸÖneÅdJ¢Ñ9/««Å‚1ýæ0Ÿ Ù¨àìlÇl—ìtJ”ÀÂa·G²©¬N7µµçËóÖ\p¾W¶$\M?Zÿ?G»dãlÖÉ£¼â:»$­Ãfb»Î•uo»sÔÀöLíYóy¡ÇhÀöl\)Ùeç@Û'åô0ä[öýP)Ø>ÒcWúbíŠB©Æî†ÕÃÒ‚¹ò²=æ(ïú`Ýg¹;q`…ÍJÇ®ôgBgȴщitJäH1o¬ÙWžlÖÄŠõOƒbµOx<BíV±l}R3`S±ªQ/F ¥›‹Å<1E 8W;È]ÉSÛšc<§%έE k9Ât»;cc¼ý÷‚Úa¤°$Ð*7Ô,‹SÔi?2ÿŠù&É{:äéÈ(*±9ò€À*æè@è3*ÏZw‚*-„5è@‘$,‰¿S¨µîÍáné<«Ì¸: %j£D{õíH‚‘Q?- ¾QZÐt‚+jàÔÏ7Ë>.oÛ¿ñv†«K„œ?ôÀÛ>ºD\¾Ž9yŸì®†œR–£ÔÀ¹ sêÉKjN¼C¥ÇÖv¾¼P™“:½žéÆÛÀ)3g<@9ðöeíoÚúä̾'ÞÞ8Ò^ËJV®Jwí“6}p°G0Ï…l>uûŒ¾«Ôê^j©0=/ÈÝJZt#¬•³6˜;Õ°Ä(+˜ç" Ih'ŒVG'‘ì |ðJûðWkY©ãlÍ*=¯Bw³,4×,´uaîôåÚ(¦ìɈs§”ZO,C;W„¹3djQ$)ÆÜ™×±½óÆÜÞŒ.Z·_äže§Éåx•ø ¸K•n&w曵ïEöl®¬4V¸Û«t "gýûœå’m²g5i>Ôø€Ü'½G”€{äyŒrrOø$0Írp£Ž<Ý°Õ k"UÄóǘ;ut tõ™ü9˱´,Wgä½ w >´Íˆ&2¿ýàDN2ô;ÆÜ‘aÙ§ƒàs” a§.'5[S‹0w’lüv*ã†,mñ&ß`Ä[€¹SbeÚö†L_Ö?"[£§™ßî)Óx·|:à1Ê…èAz™JAŸ.xî:f̳°É­'bü˜UÆßQÐÒcÐ]Ÿ*ôžH;F¹`ìšÕßêî©ê b­QÂe<ùï?‡†ÿµ£\XÑÆŒ_wáÿúQ.ß\ø—G¹þU£\âëþò(—øº¿<Ê%¾î/r ®û £\¢ ‹ñŸÆ‚ü£\ª¿ž´4Á~¦|0Æ¥ÿ¥é/ îΟX¬þÌðº mù9ú QÚ?Ïùî^8¾Š0@4†öå?ÍeùÕw—á¸v«FÇtš_}û€RÞºO1žÆký‘ÐK×ôpLо)£ðAÊôc^J‹æ¥ü6eQ±2Ÿ¥ö)ÿÝ90å/f·~âSþ&§Å¤/ù‹D-Èi¹ÂÖ¾ §¥CÑ3Í秆2Ã/ ÓaÎlÁ¤£K¡BŸá¹·‚tt6xbà(§Õ)N2orÉ祠ÝkKRáËaÕS¿SÏ ¯ÌT…Ë>Ž–6È‚ü«?jhD$~È1XÄùõrͬ‚a ‰´ž‹Ê)Ký2àuUÏH)­JUÙ²ÃrBgJ«‘S¢ 9ˆQÙ¢)ÆZËýÛAN‹Ïd%ÀA œ§81æñÎi!^òzG¥G'`T¦p ·ºûTNÐŽÂYÁ0Ž€Q™Ë)D¦ÁÏjaÏœ´§yÑ=û0!‰-OVõ˜ïœ–=>®Œ²æ}ç´¨ó€’á°:î3¤2G? F0*[F’¥§9y9­±¬u6-oN>BÂW”~IÁÕâž!%Df*øí³“ÏÔ 2}ªˆyE=$™œ Ä‹ªÍ ÍBBÔO+ÞBsæ´ Tg­— 8rZÐÖêüTš ÖÌÓßdTIÚ­ X´ŸÉø¢Â §…t1q¾ÒC@޼l݃#h"¦§)žM™ÓÄ9¢LzÙ`ö J±éfrާãdWN+¡,¥ôIPŽI[ÄtF ¢lC³Æ  $¸´ÚœeÓ‡p#Q,ÿĬÁJå´Pî:Í“I[¶h_¶Áó-DÒ:™ ­€6jÝE¯VÖÉJ2ŒÇˆìåHa%xE”Ö §¿‹1M;€e;9OB»E0¤µÂ$6 éº`L‰躄»öån»OoÂ8@Ô†nE{Tl~¥µ2ªÚŒêM ˆË<™®NÉÕ@`é fÇj÷srJ”O™„?šY÷H•©é¥yŒô…eTOÆi½\aÒ×…ëVOªÔ6÷ê"aw&4€µE]$–°nú…±›ÓÙ|¢÷Òd`5ô7ÞcÝ-ÒÓÚSîe#X¯&I’^À¼µˆÌ©Ù¨‚mok…üGêB›»¦Åå­EdNVC¹hÌÚ>'2ÓŒQðj¸ ¯5Ž—X«s‰›N¡¿^F4î´–qb –2 Ɔs椇ØZ2¢)¢r‚q ›w¯y+òbüI1Àþ3©²®Ó>Ra(3yÙÏØ”_ÞSÞ£ Žþ𧨕?­¼X—?þØÇG{ˆ• lùZ2´€Ï§M­º?•TÀµ´Á‡Cò$E‰ý°«3mm?ž‘ˆçïþî7 Õ_ÿ'QtÏ endstream endobj 11 0 obj 21644 endobj 20 0 obj << /Filter /FlateDecode /Length 149 >> stream xœ5K! C÷9…/0R~„pª®¦÷ß6aZ Û/Áƒ‘ŒKL`ì˜cá%TO­>$#ºI9©P7OhL 3lÒ%ðÊtß2ž[¼œVê‚NHäé¬6¢Œf^ÃÑSÎ ›þËÜ$jeF™2ëT·²²`æµ<÷3î¨\脇ʰèN1¢ÜfF~ÿÛôþ{20c endstream endobj 21 0 obj << /Filter /FlateDecode /Length 52 >> stream xœ363T0P0±T026Q064b…C. ˆ•Ë˳@ªr¸ Ês`ªr¸Òé À endstream endobj 22 0 obj << /Filter /FlateDecode /Length 49 >> stream xœ36´P0P040’F†@–‘‰BŠ!HÄÌå‚ æ€Y@¢8®&‡+ Æè & endstream endobj 23 0 obj << /Filter /FlateDecode /Length 80 >> stream xœEŒ» À0D{¦`~&fŸ(•³ JÜpOº{¸:2SÞa†‡ž ,†Sñ™£`5¸FR죰n_uæzS«õ÷*Ovvq=ÍËô endstream endobj 24 0 obj << /Filter /FlateDecode /Length 90 >> stream xœMAÀ ï¼"OPDÐÿtzÒÿ_«Ô½ÀN‰E‚ô5jK0î¸2kP)˜”—ÀU0\ Úî¢Êþ2IL†Ó{·ƒ²ñqƒÒIûöqz«ýzÝÒ"X endstream endobj 25 0 obj << /Filter /FlateDecode /Length 210 >> stream xœ5PË C1»g ¨džV½uÿkmÐ;aÿBXÈ”y©ÉÎ)éK>:L¶.¿±" ­u%ìÊš ž+ï¡™²±ÑØâ`p&^€7`èi5tႦ.•BÅ%ð™|u{è¾OxjrvCÉ` jºMX´<ŸNâÿ~Ãî-ä¡’óÊžùœíð;³ná'jv"Ñr2Ô³4ÇE> stream xœ=O¹ 1 ë=8Àz,[ó\ê²ÊFR"@ñ‘eGÇ \b“Ž9/i?øiX5Gô„ŠaXàn’ƒ,JWž-^ ‘ÚB]HøÖÞ­Ld¢<¯;p'£>TYz@;DY®IÃXÕV]j°²ÎÂu=̪åÑ'k)PTB½tÿŸ{Úû o/ë endstream endobj 27 0 obj << /Filter /FlateDecode /Length 17 >> stream xœ36´P0€ÃC.”ì endstream endobj 28 0 obj << /Filter /FlateDecode /Length 317 >> stream xœ5RKrC1Û¿SpΘ¿}žt²jî¿­„'+°-@B./YÒK~Ô%Û¥ÃäW÷%±B>íšÌRÅ÷³Ï-¯GÏ·- Q=ø2'"ÔÏÔè:xa—>¯N)x“¯á_x”NƒÀ;2Þ“‘$ÁšK‹MH”=Iü+åõ¤•4t~&+sù{r©j£É X¹Ø¤+)$=‰H²r½7VˆÞW’Çg%&Ý&±M´ÀãÜ•´„™˜BæX€Õt³ºúLXã°„ñ*aÕƒMž5©„f´ŽcdÃx÷ÂL‰…†ÃP›}• ª—ÓÜ #¦GMví²[6ï!D£ù3,”ÁÇ($‡Nc$ Ò°€9½°Š½æ 9Àˆeš, mh%»zŽ…ÀМ³¥aÆ×ž×óþE[{£ endstream endobj 29 0 obj << /Filter /FlateDecode /Length 248 >> stream xœ-Q9’AËçzBsÓï±Ë‘÷ÿé ʃ†C :-qPÆO–+ÞòÈU´áï™ÁwÁ¡ßÊu9HÒTM¨]¼½vfó¤5,ƒë?c 7zqxLÆÙíu5{×kOfP2+qÉÄSuØÈ™ÃO¦Œ í\Ï È¹Öe¤›•ÆŒ„#M!RH¡ê&©3A£«Q£Å~éË#aU#j û\KÛ×sÎ4;«<9¥GWœËÉÅ +ý¼ÍÀET«<p¿ÛCýœìä7ÞÒ¹³Åôø^s²¼0XñæµMµø7/âø=ãëùü¨¥[ endstream endobj 30 0 obj << /Filter /FlateDecode /Length 232 >> stream xœ5Q;r1ë} ] 3æoŸg3¯JîßF°“fa ç=؈ėÒåŠoYf~'‹¼øY)œ¼QTEX!íàYÎj†Ás#Sàr&>ËÌ'ÓbǪ‰8ÎŽœf01ëh9fš=!×#nì4ËU i½[ª×÷ZþSEùȺ›åÖ)›Z©[ôŒ=‰ËÎë©-í £Žâ¦ Òác‡÷ _ÄœÅE'ÒÍ~3å°’4§ð#1”êÙá5ÂÄÏŒOÙÓé}”†×>hº¾w/èÈÍ„LåÊHÅ“•Ƙ1T¿Í$õý?г>š0TG endstream endobj 31 0 obj << /Filter /FlateDecode /Length 259 >> stream xœ=RIrÃ0 »û|wIïI§'çÿ×ôÔ—cЦw‹ÊÙøi+Y~äÇ.;K"·|m“ûŠª¤n‚Ì%Ç%WˆYÊçJX´”™XŸ©ÊÏ5¨UøÂOÌLL‡$KÈI=а~^÷ ~½¤ó[dü£cƒÒ[’Lî•£”ذTŸä4Ý”VŸ™ve,7d¥&uúõÓãK0¥/ÑAˆÄŸär‡, )ñv®Þ@xW» ÕS+;Dš‘ÞR«93KFÓ#`mÖ˜ U¼Ek´âò…N+">97t0MUž…ȰRáX{Ïh º†¼Òpz’qÿù¼+Þ×ïÚófd endstream endobj 32 0 obj << /Filter /FlateDecode /Length 79 >> stream xœMÍ» À О)<àÿ>Qª°"Bc?éN:ÁÜâ°hw¸Zñ¥Q˜}ê™’Ps=DX3%:„¤_úË0ØØÈ¶ï·VîÞ endstream endobj 33 0 obj << /Filter /FlateDecode /Length 244 >> stream xœMQInÄ0 »ûüÀ–¬ÅyOŠžÚÿ_K:L†Yâw'&²ð²…º:_6òJØ ü´æÄψÿÑ6"­|PmLÄD‘ÐEÝhÜ#Ýð*Dû‘ ^©ÞcÍGÜ­4oéØÅþÞÓšGª¬ ñcsd#i]EÇ÷ÐzÏ Ñ)ƒúÜ„¥9z’þÚ×µÑìÖÚÌž¨™Ê'ÍjhN§˜!³¡·©XÉ(ܨ2*îSi=ÈÛ8ËNŽÊh=Ù±šˆòSŸ\B^LÄ »ììXˆM,lÒ~TúÄòó­7ão¦µ–BƉЗÞÏxï?ÝX[´ endstream endobj 34 0 obj << /Filter /FlateDecode /Length 87 >> stream xœ=Ž»À0C{¦`ó †}r©œýÛ€?iÐC:N¸ 6 ÏÑíÂÎ7AîE/°.o€ !‹$ùöÎÅ¢V™Å¯¦Eê„4Iœ7QèN‹Jçãôx>ºuz endstream endobj 35 0 obj << /Filter /FlateDecode /Length 59 >> stream xœ355W0P°´¦¦F æF– )†\@>ˆ•Ëehifå€YÆ@Hœa¤Ášs`zr¸Ò©áZ endstream endobj 36 0 obj << /Filter /FlateDecode /Length 247 >> stream xœMQ»mD1 ëß\àëkyž R]öoCÉ ¡/)§%öÆK á[¾ä‘UC?1ì3,=ÉäÔ?æ¹ÉT¾ª›˜Pbáýh¼t/"+Êße sÎ÷ࣗ`&4`¬oI&Õ¼3d‰¡ŽÃA›TwM,®Í3ÈíV7²:³ lx%âÆDÙÍ`£Œ±•År¨ ’Z`×éQ‹‚+”Ö t¢ÖĺÌà«çöv7C/ò਺x} ëK°Âè¥{,|®BÌôL;wI#½ð¦fR™‘•:=b}·@ÿŸe+øûÉÏóý (\* endstream endobj 37 0 obj << /Filter /FlateDecode /Length 245 >> stream xœEP»C1 ë=`ý,{žwH•Û¿=JFp…!Z?’Z˜ˆÀK ±”oâGFA= ¿…â3ÄÏ…A΄¤@œõ™x†ÚFnèvpμÃ3Œ9ÅZp¦Ó™ö\Øäœ'Îm”ñŒBºITqTŸqLñª²Ï×¥µl³Ó‘ì!„KI%&—~S*ÿ´)[*èÚE°Hä“M4á,?C’bÌ ”Q÷0µŽôq²‘GuÐÉÙœ9-™Ùî§íL|X&™Qå)ç2>'©ó\N}î³Ñ䢥UûœýÞ‘–ò"µÛ¡ÕéW%Q™Õ§¸<ÿŒŸñþŽ Y> endstream endobj 38 0 obj << /Filter /FlateDecode /Length 68 >> stream xœ32·P0P°4†& æf )†\@¾©‰¹B.H Äʳ €´%œ‚ˆ[B4A”‚X¥f&fI8"—É´å endstream endobj 39 0 obj << /Filter /FlateDecode /Length 255 >> stream xœE‘K’ D÷ž‚#€üä<™šUrÿí4˜L6v—¨ý„J#¦,çy0ýÈòÍd¶éµ«Š"Ìä*ôXÕ)â̵Dµõ±2rÜéƒâ 箜T²¸QÆ:ª:8¦çÊúªîü¸,ʾ#‡2lÖ96på¶aŒ£ÍVw‡ûD§“©£âvløƒ“ƾÊÕ¸N6ûê%‚~¡ LòM u†@ãæ)zr öñq»ó@°·¼ ¤läÈŒA»N®qëüÞÿ:ÃçÚ WŽwñ;Lk»ã/1ÉŠ¹€EîÔó=­ë ïÉ™crÓ}Cç\°ËÝA¦Ïüë÷PŠfˆ endstream endobj 40 0 obj << /Filter /FlateDecode /Length 332 >> stream xœ-R9Ž$1 Ëý ~`ëòñžLÔûÿtIUªlË<ärÃD%~,ÛQkâ×Ff Âð¯«Ì…ïHÛÈ:ˆkÈE\É–ÂgD,ä1Ä<Ä‚ïÛøù¬ÌɳÆ/Ù÷Vì© ËBÆ‹3´Ã*ŽÃ*ȱ`ë"ª{xS¤Ã©$Øã‹ÿ>Ås‚¾#hÀ/ùç«#x¾¤EÚ=fÛ´[–iG•–ƒíiÎËäKë,WÇãù ÙÞ;BjW€¢0wÆy.Ž2meDkagƒ¤ÆÅöæØ¥]èÆe¤8ù™*ÂJšÌl¢ þÈé!§2¦®éJ'·QwêÉ\³¹¼I2[÷EŠÍÎë™õw˜2«Í;y–¥NEø{¶ ãêÙk™…F·9Á+%|6vzrò½šYÉ©HHÓº N£ÈKØ–øšŠšÒÔËðß—÷ÿ3â| endstream endobj 41 0 obj << /Filter /FlateDecode /Length 131 >> stream xœEË ! CïTáò>©‡ÕžØþ¯ë0šABøA";ñ0¬óò6ÐÅðÑ¢Ã7þ6Õ«c•,ºzRV釼òPi0QÄ…YLCaΘÊÈ–2·á¶Mƒ¬l•T­ƒv<¶§e«~©maê,ñ ÂU^¸Ç ?K­w½U¾BS0— endstream endobj 42 0 obj << /Filter /FlateDecode /Length 392 >> stream xœ=RKn1ÛÏ)¸@¥ðMrž©ÞîÝ[›ÌTª /¶1”— ©%?ê’ˆ3L~õr]âQò½ljgæ!î.6¦øXr_º†ØrÑšb±OÉ/È´TX¡VÝ£Cñ…(-àá¾ÿñ¨Á×°…rÃ{d`JÔn@ÆCÑHYAaû‘è¤P¯láï( WÔ¬…¡tbˆ –)¾« ‰˜¨Ù ‡„•’ªÒñŒ¤ð[Á]‰aP[[ÛxfÐÙÞ‘3íÑqYk?=é£Q2µQMg|ñÝ2RóÑè¤ÒÈÝÊCgÏB'`$æI˜çp#ážÛA 1ôq¯–Ol÷˜)V‘ð;ʽýÞ’Ï{à,Œ\ÛìL'ðÑi§­¾býƒ?lK›\Ç+‡E¨¼(~×Aq|XÅ÷d£Dw´Ö#Õh% ÂÎí0òxÆyÙÞ´æôDh£DÔŽ=(²Å地§ü¬Í±ž&{o´”Į̀„Ôvz¨¶ÏcÔwžûúü.¡ endstream endobj 18 0 obj << /FontMatrix [ 0.001 0 0 0.001 0 0 ] /Name /BitstreamVeraSans-Roman /FontBBox [ -184 -236 1288 929 ] /Encoding << /Differences [ 32 /space 40 /parenleft /parenright 45 /hyphen /period 48 /zero /one /two 52 /four /five /six 56 /eight 66 /B /C 69 /E 71 /G 76 /L /M 101 /e 105 /i 109 /m 115 /s /t ] /Type /Encoding >> /BaseFont /BitstreamVeraSans-Roman /Type /Font /CharProcs 19 0 R /Subtype /Type3 /FontDescriptor 17 0 R /Widths 16 0 R /LastChar 255 /FirstChar 0 >> endobj 17 0 obj << /FontName /BitstreamVeraSans-Roman /Descent -236 /FontBBox [ -184 -236 1288 929 ] /CapHeight 730 /Ascent 929 /MaxWidth 1342 /StemV 0 /Flags 32 /XHeight 547 /ItalicAngle 0 /Type /FontDescriptor >> endobj 16 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 636 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 636 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] endobj 19 0 obj << /parenright 20 0 R /hyphen 21 0 R /period 22 0 R /one 23 0 R /four 24 0 R /zero 25 0 R /parenleft 26 0 R /space 27 0 R /six 28 0 R /two 29 0 R /C 30 0 R /B 31 0 R /E 32 0 R /G 33 0 R /M 34 0 R /L 35 0 R /five 36 0 R /e 37 0 R /i 38 0 R /m 39 0 R /s 40 0 R /t 41 0 R /eight 42 0 R >> endobj 47 0 obj << /Filter /FlateDecode /Length 444 >> stream xœ=SA®+1ÛÏ)¸ÀH@ÎÓ§·ê¿ÿöÛ0ó¤V¦„‚m’5L†Ø‘Û4$vˆ»É^LéÙò4¢8;åsé^â:ä‹è JaÛMŸ“5™ˆRlœjmÚø¹ÌVgPW“•Î Œ1G­Y£ö £73G¾'˜a¾ûÁEçˆn#Ë£¢îB¶j£qŒRrÚI?2«)A¹!h™¤s3˜>LçÆ¯šôFûßf8ñ<ȳì<¬˜{PXðÇ”5ÛËU?¨˜p6?W€=£àÿ° PúOßÛpxðÏUG âÄ@ï™ëAêr D'pK§ç Åãú=”ú}kûáYI€epj‚©˜3¡» _pŸn„Ó?p‚v Zî…8fF_D§ÏöèZðP§c7؇—U=ìO¡ –s.ü.“`Áª4|e!Õì΀ôíuŸ(r&6Ž¥ÀìÙ; Ž‹¹Z: ƒÈº!˜w£ìîç>vsÃ=`¤`Kø²yf?¦ï•ŽEâs¸'òáUá5š¬÷U>ÈuwµU~·õSFÖË|ŸïçúýL=¸. endstream endobj 48 0 obj << /Filter /FlateDecode /Length 550 >> stream xœE“˱\1D÷7 ˜*úÆ3.¯žóßú4š±W @üº-­Ù+Ó^~Òúqë=ì—?¯è×öçye»êÛû«4{ãtÔ9ìeàŒv•÷óQ\©Æ´ÉÀQû¶\È<Öå¡âûñ1,cØÚ±$ÀgX޼r¥bÐzsS®îÓœv$ñøµœI@ÚžüP#kVЉ ‰±,¶Š•Òlt Âú)Aw«”Ÿ'G))?ÍÑ~»ÄS¡D}#»/ëÉŠ4Ë©Y]³î•xŒÞ¦)ád“Cõaû=â … ’ÌWÓ´¯^É ZÖÂPÐ^B\T ¡åúàI]/zåWWdÄ–ñaåš_žúþÚ¶lÀv•åå}U½¢Ø€˜_w ®Ô,38;ª#qæ+åýÿ†~ˆÿƒcŠR+Þ¤ûžµ Ø :„QNÄñv©È:C4æn€õ:‚<¢†€æ…}hS{ ÚÏRàJÆõ u1†"¼ðÀÓV±TMz™”Y4ñq:­äZî±e|,MÕïMå)ëTéK·0¼úÓQ Ü{‚ År#–6l1ßéߥزH®…ݾŸß\ÈÞ} endstream endobj 49 0 obj << /Filter /FlateDecode /Length 402 >> stream xœ5SA–%!Û×)rA@=Ïï׫?÷ßN‚Õ›±LBÄÜ×gBí‰{¢`ÿ:&ô݈ w|ž8ðBòÐA:¦±–9‘…™¨¡ïç1[J,“+Cå㈀G*ó°> stream xœMRKŽ,1Û×)¸@K$çéѬúÝûl’–fQ2ÅטÄrQ‰— ©Ü’püŒÇLå5Tþ=cª¤¥|žá!‰¿Î% ï'Vè’a 9èNp#Z.‰¢*¸Ó0d Ô³ÊÞãøÀ:4”˜é†êÚÌ1ô®„'»çAír0¹kÁŇ_r.´Ìáñ ä>äg;e/ L[iq5ÅÇrÝA ¬iVÑB›D>pöš $fHÔ<2¤~u ¿ÂèUF¿Ò@x¹@g–wdöŠAõе˜¹´åDõB—ô–'²®tÕJW_UyITÔÎɨ(?8û7ËÒc‘Λw枘8ü_¤¨ÙÏãÓò¾F‰Ý7d³‘Ái!ÇnÌnî}\ïç÷?Vox, endstream endobj 45 0 obj << /FontMatrix [ 0.001 0 0 0.001 0 0 ] /Name /Cmmi10 /FontBBox [ -35 -250 1048 750 ] /Encoding << /Differences [ 84 /T 86 /V 112 /p 185 /mu ] /Type /Encoding >> /BaseFont /Cmmi10 /Type /Font /CharProcs 46 0 R /Subtype /Type3 /FontDescriptor 44 0 R /Widths 43 0 R /LastChar 255 /FirstChar 0 >> endobj 44 0 obj << /FontName /Cmmi10 /Descent -215 /FontBBox [ -35 -250 1048 750 ] /CapHeight 706 /Ascent 706 /MaxWidth 1000 /StemV 0 /Flags 32 /XHeight 443 /ItalicAngle 0 /Type /FontDescriptor >> endobj 43 0 obj [ 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 622 466 591 828 517 362 654 1000 1000 1000 1000 277 277 500 500 500 500 500 500 500 500 500 500 500 500 277 277 777 500 777 500 530 750 758 714 827 738 643 786 831 439 554 849 680 970 803 762 642 790 759 613 584 682 583 944 828 580 682 388 388 388 1000 1000 416 528 429 432 520 465 489 477 576 344 411 520 298 878 600 484 503 446 451 468 361 572 484 715 571 490 465 322 384 636 500 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 0 615 833 762 694 742 831 779 583 666 612 750 750 772 639 565 517 444 405 437 496 469 353 750 583 602 494 437 570 517 571 437 540 595 625 651 277 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 ] endobj 46 0 obj << /mu 47 0 R /p 48 0 R /T 49 0 R /V 50 0 R >> endobj 6 0 obj << /F1 18 0 R /F2 45 0 R >> endobj 7 0 obj << /A1 << /CA 0.2 /Type /ExtGState /ca 0.2 >> >> endobj 8 0 obj << >> endobj 9 0 obj << /M2 14 0 R /M1 13 0 R /M3 15 0 R /M0 12 0 R >> endobj 14 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.5 -6.5 0.5 0.5 ] >> stream xœ3P0PÈb]3…®`.ËÔ endstream endobj 13 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -6.5 -0.5 0.5 0.5 ] >> stream xœ3P0PÈUÐ5R9\Á\áÔ endstream endobj 15 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -6.5 -0.5 0.5 0.5 ] >> stream xœ3P0PÈUÐ5R9\Á\áÔ endstream endobj 12 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.5 -6.5 0.5 0.5 ] >> stream xœ3P0PÈb]3…®`.ËÔ endstream endobj xref 0 51 0000000000 65535 n 0000000016 00000 n 0000000065 00000 n 0000000216 00000 n 0000000275 00000 n 0000000511 00000 n 0000033564 00000 n 0000033607 00000 n 0000033671 00000 n 0000033692 00000 n 0000000382 00000 n 0000022230 00000 n 0000034210 00000 n 0000033908 00000 n 0000033757 00000 n 0000034059 00000 n 0000028608 00000 n 0000028393 00000 n 0000027911 00000 n 0000029661 00000 n 0000022252 00000 n 0000022474 00000 n 0000022598 00000 n 0000022719 00000 n 0000022871 00000 n 0000023033 00000 n 0000023316 00000 n 0000023536 00000 n 0000023625 00000 n 0000024015 00000 n 0000024336 00000 n 0000024641 00000 n 0000024973 00000 n 0000025124 00000 n 0000025441 00000 n 0000025600 00000 n 0000025731 00000 n 0000026051 00000 n 0000026369 00000 n 0000026509 00000 n 0000026837 00000 n 0000027242 00000 n 0000027446 00000 n 0000032455 00000 n 0000032258 00000 n 0000031949 00000 n 0000033501 00000 n 0000029963 00000 n 0000030480 00000 n 0000031103 00000 n 0000031578 00000 n trailer << /Info 2 0 R /Root 1 0 R /Size 51 >> startxref 34361 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_erp_plot.png000066400000000000000000003015611202542755000211520ustar00rootroot00000000000000‰PNG  IHDRôzïlª"sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ .ü€– IDATxÚì½y”\gu/ú;C]ÕÕsKjÍ3–'y”Ä13Ƙ`'8VîÊ{7ð¸‹,ÞÍJx°|!, —ñ0° 6`°åI¶,K¶æY­V«ç®ê®y<ãûckë;uºªº[ê–[òÙ,-ÜÝ5œóïÛÃoÿöÞ’mÛ6<ñäu”Ÿþô§Ø¶m®¿þzüâ¿@GG¶nÝŠ;wâ]ïzþìÏþÌ[$O<ñÄ“iDõ–À“×St]‡mÛøÆ7¾¿ßÇ{ Ÿþô§që­·âÖ[o…®ëÞ"yâ‰'žxÝ“…$š¦a||‘Hår†a ãæ›o†ßïG¡P@*•²eË‘HÞÂyâ‰'žxÝ“…$ÇŽî]»°ÿ~Üwß}xæ™gðö·¿×]w`ß¾}X¾|9ÚÚÚkÖ¬ñÍO<ñd†"{KàÉÅ’`0ˆÖÖV,^¼7Ýtb±žþùså•Wpå•W¢©©É[,O<ñÄÏ {²Peݺu8zô(n¼ñFÀ«¯¾z. ×u»ví›ßüfo¡<ñÄO<ƒîÉBÓ4qâÄ ,^¼ccc(—˸í¶ÛårGŵ×^ë-”'žxâÉyˆ—C÷ä¢ÉÀÀJ¥Ž=ŠÉÉIüó?ÿ3ÚÚÚðÄO`ß¾}ˆD"øÑ~„÷¾÷½Xµj•·`žxâ‰'³É«C÷äbÉïÿ{ìÞ½Ÿÿüç½ÅðÄO<™cñ wO.ŠŒáG?ú&&&L&½ñÄO<ñ"tO.E1M…B’$¡©© ²ìù’žxâ‰'žA÷ÄO<ñÄOªÄ “<ñÄO<ñä2åîɼÈÐÐ~øa$“IÜvÛmx×»ÞI’¼…ñÄO<ñ"tO.%ùÄ'>%K–àÃþ0¾ùÍoâ™gžñÅO<ñÄ3èž\j¢ª*Ö­[‡Õ«W£§§Ç›šæ‰'žx2ßz×[OæJ˜_)I>ô¡áK_ú¢Ñ(`Ë–-U¯Ç /¼pîgI’°yófo ‹'žx≡{òzÊ÷¿ÿ}<øàƒøò—¿Œb±ˆ‡~ÿøÿˆ/ùËèééÁ£>Zõúr¹Œááa ahhÇÇüco!=ñÄO¼Ý“×Sî¾ûnÜu×]ðù|( ¨T*ذa:;;±qãFôöö¶ísĸ+Và3Ÿù̹÷§R)|ýë_÷ÒO<ñÄ3èž¼ž‹Å‹ÅÎý|Ûm·áïÿþïÑÚÚŠÓ§O㡇òXîžxâ‰'žA÷äR“Ïþ󘘘€aˆF£hkkóÅO<ñÄ3èž\jÐÓÓã-„'žxâÉEç‰'žxòF¯Ë·gÐ=ñÄO<¹ db°,o<ƒî‰'žxâÉ%-}}€×àÉ3èžxâ‰'ž\¢iÀè(`šÞZxÝO<ñÄ“KVòy2è†á­…gÐ=ñÄO<¹d%&'=ÈÝ3èžxâ‰'ž\Ò’H!®TòÖÂ3èžxâÉe-¦ ‹Þ:\ŽbY@<„B@.ç­‡gÐ=¹¬Å¶½Õ7º”ËÀð°·—«AŸœü~Ïi»ÌÅëç ÉŠœu:R,ñÈ#`Ïž=‡Ãøô§?®®.o­ªT*Ë®[ç­Åå&¦I‘¹,…‚·žA÷ä²–‘ µuN úC=]×ñ©O} š¦!xë¼E×TŠoˆÎå%ù<=_r¿ìŃÜßèbY@ÿœzî•JO<ñÖ®]‹ßýîwˆÇãU“ØæÔyâÜH¹ $“^YÓå(©ý¿ÏGÆÝ«E÷"tO.cE>8,^|Ac;rðèííÅ¡C‡ðÖ·¾_ûÚ×P©Tðö·¿ýÜkΜ9ƒG}ôÜÏÅó1Ì'O§Oò''zrþR*‰HÎçóÖãr’‰ z¦>=g]§›'žA÷ä2“|žjT³Ù ú˜ï|ç;ؽ{7V®\‰xápûØÇ°qãFd2<õÔS¸óÎ;ÏÍDçilì  Îü 8|èíV­Þô&*¾)韦á°·—‹˜&q#rz‹E2èÁ ·6žA÷䲓D‚z6{AùÓ?ÿó?Ç=÷ÜEQF±fÍ$ ¬\¹ÃÃÃhoo¯zý¢E‹ðÁ~ðÜÏ©T _ÿú×gþ…““”*‡gŸzz€ù€õß(R(¢÷\^b¹t¶ Ã{ÆžA÷䲕±1:ìùü}LSSšššÎýüÅ/~_ùÊW !Ë2zè¡sÑùœÈÉ“ÀÞ½@SpíµÀsÏwÝåÁÅç+¥9tå²·—“T*D„cg×4½gìtO.[ï ú—³Ü~ûíØ²e ,Ë‚¢(Pæ2g§iÀñã”8_I¥ª\E¹`4ÎÏ {²%™¤hW–)¯¦i—Æu:¨ª81>NŒ$/¾xéÜÇB†ÚýþÙ+ûR‰-t¹TŽtú z2YÍhW¯Ý3è—¹2{£F££¤Ä%éÒâJ%*U3 QfÕ×Gϰ©‰îéÌïdÏFØ™;ŸÖ é4=….CC—fd:>N©¥óub&'Éù=§ñer÷ úe,©å^߈½ÌGFè°3$w)´…Ž]øÌé={½¹ÔÞ‰­ñùšF—³K£$-|ÇÆcá{ý‚<÷'ž šæ7R¤®iä½3ÙF’¾ç®ëÀ@K )ªr™±xœ EÛ&å5쪺ðs¡É$o¿Ÿ®•;^AÎ0È(ù|”g¿”ž¥i¾~-95MôÙ8u†A$°°'µår´×£Q`÷n:ó—‚è:9­•Êùô|žž‘›W©,Ü(øBR žÌ¡A èºX¼ti¥BÑE,F‘ÝsÏQ³’7‚Q§ƒÎ‡ÝïÍe¢Ø69\ŠBÿHеwu‘s’ÍŠè²¹8rdöÑæë)½½´÷^áR5YðûL F>OiŽ…Ì[H&Éa iϼðÂwF¼(Â}× ãüör2YmÌÙáÕuzÎ ñŒ÷õ‘A÷Æ9¿Î}hxê)à Ã}) y(éÐH’8ìO=uùC>¶MQгÅ'ô…švÈç©ö<¥½Åé‚•+é~FG)³m_*ä¸|ؾxé¥×GÑrÉš,“™é5LNÒ³iý¢‘D¯€ö|2 ìÜy~×{1›ïd2°OÞÛMˆcvûBm.cšÄ‘I§§G«¼RÉy4è–E›¯¹™öo lÛFj!{ZnÃÍî±Ç. þBdtTvÛ¦ÿ^È“˜Ž¡ëSU‚S)¹v-ö±1RXìH67û÷_ü6ލf#û÷“QM¥(Çûz8lÐ-kæ†nx˜ ¥ª’X¨Žðð°è].IÄÁ8v xíµÙ£R• / YPUúw>¥kNƒnÛ”O窞…ˆ^e³ô/—›^9âõy3è¶MJÁï§*&Oë·¿]Ø5ÁN£æ4ê¶M‘úåÚ5«X¤ƒÃÊxS¹¼0I:Méž×^.ÓïB! »èì¤Üz¹,˜úÁ ˜‹md2™Ù}g:M=%'d×®‹_'œË‰s`Y3ß÷##¢G¸ßOåk ÍçÒ-'ô,ËTâxð ó×^°üLÖjttþï“ÓJ¡]ïlù-šFïáçjšÂa—å…YÑ28(rüœbænx}#ôRIU%•H,\¶±¦QT Mý[$B^ø¾}—çìàx\@Ó¬ð8¯6‡©’J¥‚/~ñ‹øÔ§>uaŠíÀÑø„#Ê\Ž `{;ô‰ z¦NdÅç#Oþb™ÁAÊõÏôܼú*]·´m"n]Ì}çfBÏ$zc¥ÊNa(D€…¦dóyºw·Â@€þMLPIÛÓOÓºOçLe2äÈÌ7©Ì4ÉÉèÚg[EP(ˆ¶±ü¼ÊeA$]hÍe ƒ¦&:ÇÖ7Ÿ'4Ë3èó¡—ËÕ^°$‘a_¨ŒRÊFÂ)’DD¹W_½ü𔨶ˆ¬Ø±I§…1ŸCEõì³Ï¢¿¿'Nœ¸°ˆ÷Ð!:è,©]g[EèÝݤÀr91 ÷œ>}ñJªl›¾ïĉ™9FÉ$Ý[$"~×ÜL‘ãÅDÊea˜gÊtÏf««$…îg¡E~̘®Õß_Ui´Gvíš¾IÎÄ92óÍ0MÚÏ\µ‘ËÍîl2†Ÿ«®ÓþÔ4ú¼…VÑR,’^ §Ïñçó ?{ItÓ¬ ­G"db‰D*ÕXéª*û矿4Z[ÎÆF„• 9RȉD<òî¿ÿþ 3{öbâzyË"ÃašÂ wu‘ÂÊŒŒ®ƒübH©DèGÓ=‡Ý»i9£GY¦ß½òÊÅKW9#rUÙ§keC)ËÂY\HÂ݉¢PªMU§¿þñqZ¯ùNdžp¬T•¾s6yïÑQaÌ .£ûÔ4Á—¹Pçu®/M£ý$Ë„LffÄ9Ï _€‡_ þðû…‚[h288ýA‡éPmÛvùt/Ò4:<ªJ‚Q îé~žÏʶmX–ûìAÿÊW¾‚{î¹K–,©sâñø¹µjOS)‘_fÑuq˜;:È wtä;0 "EV8ÁàÅkM:1AgÁç£ki$ÃÃDÌjn®ï_²1Ûèˆ ³Ï7=Q̲èúœ¨ #"½½ GѥΜH#a¾‘#Å¥`ó Ys„Í¥¥†1sg;™¤&:LtöêŸ Ç»×Í¥ô÷ }‘s¯åìë:¿ŸŒæêÕówí™ÌT}šÍÒ>o$¼·J¥êûf¨]×陟¯A7MB-ׯ'gz¶{­–þ,—IÇò~jÔž–¹Œ¾y2ÝIˆ«¥ 7.œ9Õ\"ÓÁ‰Ç©ž¹–â”eÁ>+¯œÊŒ¿”dtTÈtZôrçŽRçiüî¿ÿ~|ô£…¢(Èd2øÄ'>Ó4¡ë:,Ë‚áJo\qÅøæ7¿éð3ÒøÞ÷¾W?>Õäî>=—¶6R‹‘RÈdè¿''ɨ(Š ïLé™:‰Œú¨*¼J¥öž!Ã×ÈÉå¼n¡0¿Ñ5.W Å(Ýzçµ\¦unoŸêˆ”Jt¶‚A/§¶F"I´ùL¨ØùDá--tfÝ÷šÉˆó ªõˆ¹DÚç»´G]R½QT ’+—k3Ê_ᱡᰠW Ë—×öÌ™µÿüót ¯¹f~Ã|FcCCd 4M ž¶ÆJë<$è@8B¡î»ï>@__vïÞ·½ímU¯W‡¢ÕÝÞö©SSQVDI²1oj"¦»idºt)ÝG%ÌðÏgV*ÑwG£¤H5Åe˦*Å#Gĸ×FÆ…'ʹà\tgmrK‹ø]=iÄ0V:KK—¾þûÝY®Æ]Ò¦CØ…Þ×ÓSû¾ù5óiÐm›®ÁéÈù|Óôxœ8'>_uÐaÛt6¸Š‚Û ÏI)©R{;­ÅlÛ&”Ó²€w¿»ú{‡†ªÏ“ cjðă™ oj\ ™ü8›­ÿ`ùá\ÈLß¹ž2ÆJ? 24TŸ(çó‘×þâ‹_ ðjÈx\DµÒ$ ÃÏ‘¬^½¿øÅ/ÎO¡¹+†‡9ïßÖF º¥… z ª*d™^ÇÝÏæ›Ä4>.&–I­ñ©SS c:M‘J=¸ÝÍ7!“Ñ5vzfÒt„ÓUµ$:"l©4·çj|\è¥Lff$CŸ¯~~x|œöó æ òežë%.1m´ÊeQvçœø:ù¼s”>ƒhÛT}‘N26Ûû¯T•!ê|ÎÎü9?ƒb±öóâ}Z©xú¼tÛy¥F^ïB*_ ëM¥DÔÆyäúd U%XèÕW©ô¥fÔ3¡À÷ÎÆƒsk¯wnŠëÉÝP³aгátIK Ý CïÍÍä”Y=Oæ Øöü–q¹š“‡R_j·R:zTœ ÷g¸¿ß/†ŸÌg„Î —×J×ëŸÓ¬î¼æ–@€œ±Ù"=ù<ð»ßÍcd€C!º§drfŸ-˵{‰3(ñæ«DOÓDWÄJ…þ±A¯…ŒØ6ñ-ª ¤ÎµpÞŸ…Ùôñqа[[EiãlôÄÐ ²;&ú/ärä@9Ï:#\µ :—ïéºgÐçÅ ›&mìFp¦ßO^ûÅ®dïÖý»xœ6K±Xi°Qg£PÏ9á¶¢‹==W2<,c A:ï‹Ñëí¨hVwÈ×V(Ð3éÚÚȰ÷ôˆ’1I¢g˜ËÑÏg}´mÓþv9VÀN¶®®Ü^+õ”NO5‚ó í2"Ã;ø¼Øv}eY*‰†'µ„×}6uô¦Iƒ‘Nœ˜»²·rY\'÷WÈf§gFs¶Û˜pE§Jt}þöT¹,­rY=Yg¹%•¢&X|j'Fâ$iö-†A"Yލ¦ÍÜI¶,z¶‘ˆèñ±kåúÇÇE³÷wÖú|fÿÏçú¿¡ :×KNgÐ''/nùše©êðáj¸5•¢Ÿs¹Úi¿Ÿî'‘¨ï€pú|GOn£q¡ïçTC*5Qáh žg<—2]6G%µ].GÏ6#Ã(I"Ǽd ½Ÿ‹Ï' âlöžaÐ÷Ì´4©P {r+SY®+:0@Ÿé>+š&ÆF:IŅ#Ì×Ãѹe5@’Ï ' ‘Qœé8UË"(÷äIrÒ¦+÷›£ÂÍ®x/9k»¡‰•ÊTçŠù NÇe¾Ò!Îïá|1#hµöqo¯HÖsX×±AŸÍ¸ä¾>‚ÅÝùö™ž©r™ž+§™¸¡Ïþ@] ްsÖr*èb9ôe¡Oç©q‰ÁØØÅ»³TŠÏ> <ù$±»9ràÍP/Èõ¨<@žÉ}±P‡ÑÑ «»,—E«ÎZ÷ÎyÔzžñ\¢&'O6FJ¥© p6²­­BA´´ˆtˆÏ'ºû9ûBOí™cǨïÀý5w™‰ð¾v¹`!“öïQŠS¸=23¬ç¦Xœ¿çÁ3Ø K]'³Õk‰³Ýk#ƒ>::3¤gt”Ȧ­­ä ŽÎ ßÁÙrš[ÛªêôˆDݯãèÞ9nx¾ÚZ;î¡óypïc\ê‘Û˜wŸ'Ë‚ë1“Á4šFS¹§üù GS+¡¸¥í¡C"¸°m:ƒ™ }W­3›J‰k.¼Zôy‰Ð™¨×_à`HBCtÆ#ê:)ûÑQàç?'ã~ì˜P^õXÆ’Dnd¤~´z1Dz1˜iðzN©Ô8ú6ŒÙ“ef+Ù,âFÑo*5=Ñu1îÖ¶é¹²‹Dèyµ·»zÿ~a…ÞÓÈ ›&u~ö3Š8÷=00ýóµ,z}-’[8L{¯P óá†åYa3bÃÉ KQæ7áˆOQc™p=ƒÞˆç>Ó)ütš†£p^š‰ªs| $¤P Ïv¦›¦»~wð‘LV4U_ƒÎ÷t]8Ú~¿heë<+ñxýgŸÁ×ÎK£œ¼ó½{öгt¦‰f[sútm7!TMUÅ0šÁA‘bp#ÌŸaDË9]Ñ“92èœ×ä¶—ýýµ#[®Gwo ù0ˆ'Nó‹ÑŽFÉ=J|­ül-TÐÔºFÎË^Œ]Ó(¯¿}ûùAFFD‡«z *—»\¨œ9Cpìt­×hšd%I°#a£Q1ÆóºëÈðóRŽHŠÅúϪR!£P¤ÈóùéaI§Y+Bb¸w|œrç\óï\ÓÑQ‘—e2Ó€ÛöüA»Î#Üôƒó™µœ&šM×aq&yôJ…œ¨|^8C -÷÷_8òÀFާÇ9øéÖ3˜jЉj1_Làã1Á¼gyî¼sʘmStî÷×GM,«ö¹å3ÑHÿ¦R„Rµ´L=Ÿ•Êô©3vX®g2›;г,ÒOÜ;‚_ãÞƒš&*¦^xA”Îy2‡›Pp·)Ë"/k|¼z±yÂÏä$ýÿÀ•Y<ö)µ¹ônwí"%áTžŠB³¹Yx¨Ó‰ßOJ¦ž'^ ž)•DC•ƒÏï;¹‹Ùt|‡z-&''/ !àÏ>yRtÚª'Lds*göÚ³Yz¶á°¸@@4ÒXº”ºiíÛGJ‡aäF¨OšsÖ†;'Ñ5εóûÜóÐ}>r$kµyÍç§3ƒÁj¤Ë盿HáXgi”aˆRÓZ÷šÍVôz)š`°ñ`£S§HÑóš°!“¤ 7èÅ"¿Ÿ®ÍÙ$Ç竆më9$ÎöÁ_µsÍÁóL¦»®.àrÀ¾>Òýióçår†gÕ½™ÙžÍ’Žšë2GÏ ;¼jî4Æ„±d’ŒofH>û,ðë_O¬Ê)¹tZ@ÒÌZoj0-?‹æfRpõÕ„pà Î7Š"j•àpÚe:äÃé Õ‘[ @NŒ{D)W[¸‰L\VÄ×Ë|Žù@‚Ø 3ë™;²î½’LŠsî¼ßx|êkyÐI-ƒaY´Ÿœ‘%³Ðu¾çBÒ ™Œ ‚‹Õχ׷/¡yÎåólq¿_”@²á™ët;ïœ~ྌ2äóbM''E·ÇFèž;µè\ƒzúk``ª³àDʸºi:¾ÏW0Mz¾\ò7>NÆýôiú™\ñ÷ðÌvçþaÒn.Gë4Ç=3<ƒÎš ÓØƒSk››ir;ÆÖV¡Ü÷î½ðhwpE½V¥€Þ^r"~ö3àÿoà»ß­ßLB–ÅX÷æµí‹S:‘HRaÐZÍÆ‘H&éÞ¹žÕ¹Û·ßÿ>Õ…2äêvpŠEa”öí;ÿçÔ×'œ¤zFŠ;Øñ„)õÊJ$—ºS‘E£"b¿újúŽ={Ä:5òæeªe6bk3å$õ$“Õ£9JtçØ¹4ª^¥Åä¤èî5]DéÞ“œwå´zïå)‰¼/x}¾Ú„£‘‘©èN:-ZÔº z=g9“!ÃàtfŠE‘ºcöBÒ:œ2«Õ#ƒ ]õÖ…Ñv¤+1À†{$°ñ™ë!-¥’ЙœtNCä¦*¶MzlºÔa-G•Z×°sçT”“Ÿs(DŸË×Òè|pÓ6Î<–çÑsè~§«œ:—?#“¡½9ÓfAžAŸ%¼Å½ Ýž $UG{~?)^w½d[” Ú4ØÉ‘Hm%iÛDÆúú×ÿüO`ÇòvW®¤÷þô§õYølLOŸ˜srómÐ9ÏŠ4#§ehhæŸÁÊ‘=~Ó¤Hÿ[ߢ¨»R!Ošº3 D볓óéúÇlÜ`PäÂë)4ŽèÐ;£Çl–Ãp¸ú9·¶Šœi8 \{-)@ãÑGëy…îgh¨:ºœoƒÎ<8… Ët0^yefšØKæÒ¤ñqàÿüà7¿!çêƒn¾YDñ\Æž1ÃílX}>QAÐ@^|ñE|üãÇý÷ßûï¿·m£ï`˜µÞLéRI4ñ°¬j¥Ï{s3íçßœýÎ% ؼ™Þ¿ýT‚S‰Ö3è<±«ÞžsŒlV :N‡Å '²BžŽÇÁ½»¹&|¦Š«T%ެ„'g¶–3ÎMRxÝLS(Sç¹.— 5pF„\^äó‰NijöV(7 IDAT¢½ç4Ì–EA§±`ÃÒ×'ÐFm˜§C³œ#ëé¦é&Ž…Ã"eÀㆹœ`pîÓ!¼ÆÜ‘Ÿ ?vðFG—Þòºòþ,— ]s~ž›[Â÷ºgO5ßÃ0èûœ¤N®oD d'’¿§VwÄZåœÂu·læ.qüÜ2¯¹Ìœôér“Š2sâB8Lìå—gï™óp•F/²Y: ~?MLki$Œ5k€»î¢{ùÕ¯ê“E4”?¿¹È³õ*™ ç< á0Eí3!©qËJ†é^|‘ÖáÎ;{﮸XµŠþÆÑçªøz‡‡E„É-M§ASV¯^Ï}îsx衇pï½÷âÿý§B™a]†4k)®e;’¶íÚzssõðE‹}9q‚¾Ç5»ÅIjs#LŠRßÉs–ãØ¶p ˜ZKÑó}ϤʂaQþìÙ f~?œp˜žÙèèTxÒÙÇï—«ÜÆ0™¬îèåæ:ð¹pž]NY8?gb‚>Ëék¹dRôà‰ˆ³Õ'O =à¬}æ~N‡ibB4šr~f”ó¸NnwÊ‚JE¤Fæ’›J †»{/ò€¡dRK§sæù™årDÌt"GºNU?Û¶¿ý-”{ŒþæÜ×LpvïYN1Õ“Þ^ZG·`ÇèÉ' -­Õq“;Y:ßë>ÇLŽ«'Ó ò zEŸnÔ"Ã^ !^ôh”"‰FìØz×10P~â)\<¢¯–×~Ådä’Ià‘GêoŽ''é¾fÓ\†Îlì$“S†$‘¢®uÕ2V…‚¨…¤{½å±^Ýݤ¸å­“4Ĩ†³ÓT0H nÉP€%K–`Íš5hiiAK,³X¬ŽÊ¸ Z-…æ,Ÿrt6Þî=£K9ý³y3)„ÞÞúì}§!®çh:ÉN´`pPÀˆ\ã¯("¨×éªVîܱvU¿ãf&3mâáÌï:·Äu+<ŽÔ8…Ä×áfë ‚–ÓécŠÓÎ5f+e&ù‹Bö)§~ØíüÓMV¸Ÿ¯óÑ£ÕÆGUYôôirP¹%4_;_Óä¤0¤~¿T˜é>—kйBÃéà1yl`€tätÓ+Ï6›%çŠÉ¨Œ$Ž’Ó;0@:R’„^`Â,³Ôk¡WõMFЏžœß¯ë¤·~òJ³V*ԸƉ°³áìfgYÂÙwôz¨z}ƒ‘æ.Ì 3¡†Y‰µÄGw/z"!`cÇìD©DŸS¯‹™Çù<5᜿û:¯¹xç;Iyýæ7õaefó³1˜)AMÓnìí¹àláŽàfµ‰n~´V›6U¿&ººèµÜ(ˆë¶kõ‡éð:$š“ ÁzõUX/¿ Û¡ÔÇÆÆð?>ÿy|öŽ;täÐtEÁÄ‘#Âðð0F¹t‘›Ê8»r¹ z$2•° Ñ}øýbï¬^MÏ›‰|µ†âëEÌÜƽ‰jÂGVN#Z‹xÅ5Ænéz0y©VC‘é"<÷çHÒT¢™=s®%—:9Ó.ÎÖÎZi÷>r–«ògò³­TÈà:á\>C<hhˆöS0HÎäl€0ë›÷³ßÄÞ½S‰¯LÎâtÖÄ„è(ÉÆ'©†¸ôæ²[—‚±ñv:}¡óDÁZV-ÇÙaNÓ("g‡Æ²èYD£âL±³eYtï\®ç>‹Üì¦ä>6&Ò6|/©Kãr™ÒC3›?ínÊã\ŸS§µp¢µÖ™áNV–ÎIcõî—1× ·¶Šï=sظ‘ŠB¡©aÃËÐu>OûnÕ*úÿBajc“z üØ1aØà0ŸË¤®¼²>ò ÑóI§ÅhÞ©\g:„ÅzÓçf#‰­E 0Õ`³‘ãýâäŒ4B?ÈeÑ`b©»FßùLFGEÏ·pã®;îym§.c$2<‹JøÞ÷„î»åZ3M£Àॗ€µkéYsôÏ#t÷ØÔFÍml{î ‹—}„ÎägkÁz¹ÀZž6CÎzF&æÌ†I=4Tß òÈåès—/§×ú|µY&’Øš5”o®ÿ3¬Z.ÏM`rZ>?3UÓDÄ•NW{ÃN¦i#rRDׂÏxRG•é´ˆÎk94>AÃ",_½_½ï>üÇ'?‰ÛV­ÂàÃã³ûþøúëqûâÅȪ*lG´Ú³b>ýÑâ;ßú¾÷½ïáßÿýßÅv×:ó^Ëç‰å¯(µ±æfZ«PH<Ûöva4jÁ£œ?uCÀÜüÂý9¥Ó§…AãŽîk¶,NñŒww·8€*FGi;afVâ< v&ûŒh-Ç:¯Þ/ÅâT'•)ggÚ†?·Q‡DîAÁ×êl{ìØÔçÆFebBÜ/GÅ ‰ÏDÊer²8úwæÏè{µrv^"!ŠS§DËQvàXGñZÎUǸS§è\±îÜ'Nb\,6}þœ×–[È2š—LŠ fº»uÆð°@IÜ2 a¤9 K2)zp½r-´ÅÙÙ‹KîÜŽçÄ)²¶6úf";!wN[M·Ï¸ï{­a\vL˜ï6èì€;Ïl<^coDêã÷ó{9Ï<2B{ÞÝ"—…D‚ÐŒ–‘GçRÑ™À¦œa§ƒsÜEæŒ*L×ußÃ%ZœBpòœO/¼Pá£áp5¯ˆ#`'bÓÞ>=RÃFl–U%ãÊ\ v¼¸®û̺/¿êŒÇ‰4Ì|œBa*o‚õV6+t£®Ó¾îêÖ¯ëÈPüš5Àºu”ásÆdPvÙ°³cÒÖFŸ[ÏÑå.Œ^„> á<ëtÎ ß9ßË.—·q” Õï2å–\®~#w†SUуzÓ&Ñ*4ªõtw“'96F‘z-Oa½™47ÈdH郟:5½‚æ²%'I‰74+×FšXi—J/^L÷UK::ĺs.³V©É åƒ[¶à…Ï?¸ï>|ç¯þ _¼ûn„8'68(ÊRœ,Ö|^¬©[™p^?¥çY+zhn¦µŠDhOY–p:2™Ú­zF€Ç<2Ë— ‚Á ptiaò×·×2pÜ …# w¯Ë¢RMàÈeÍjíËgÅY/ì4’Î#Æt ß#Î&.üŒýÜÙ‰à2^o~RLîó.ˤ¬ÝHwþccÛÓC醹ý~Šº§#‘r“vªájŠS§¼;“ˆŸùָܾX®ÕçN~Óéª|¾±3Á™\Èû¤¯ODÔü3MEòsdƒ¾h4ýýtØAH§éwÃô–µŒy&C¼¢TŠÒXLv¬5ÉppPLKS:;ƒƒÄQâ}dšô=­­ôÚ[n¡ïܾ]DçŒT0´ÎÎ!@÷¢ëõ›Ëp¿yÏ ÏBfZ²ånTÁcòdYÔ4K’ðtC!:x31”õòçlÌ–N&iótta³mR¾cófʹ½ú*Á…µ¾ƒëtÂÐ=3œ9?ØHFGE=-ç„ݰi#ƒÎ¤•þ~:\W^Y ¥º•ðÒ¥¢íf<>5¯|>ðw„b$“ôX¹;£ž¤V«]%Gèl¬kôÖV‘ÿmkpu($šq¸8.¡*•h˜ýËû–¡GîpÈLj^›™œL†¾Çítž9Cuò›7ïÆi]^{MÔ©3ÌZ¯*ÀmСe‘ˆˆVý{žá{×4RôYÏ„ˆÉi4Þ/ªJkë~fº.`SÛ¦g¶r%íé‘‘GÞ¹³±Á,龘WÁQ!Ÿ³L† 55ͬ‚Æ9m‘7Ãz0Xb¨ålŒ?Lm¯ë9ñ§N‰®pNƒÎÝ/y]ëu5¬õ½¬WrDh¯•Jäqºrd„^ã®q¢VO—[þ:aoà{á2dN)©*}7_¦‘öûé:—,¡¿àìm³œŽW©ÐAàžÌ«V‰®Ö=/[FÏk¨nçÉYgΜß!aÆéÄ)@ã6èl°Ü$Ë|žºiнVŠ…áu@k8šwB€nxPQDY–3úá~Ú¬Ôs9ºž¼Å0e#r£¢ƒ3Ê+§Ÿ¦ýwÛmô·Å‹ioîÛ'œ=†ëgbЧ›oÍHט;›Ç¤Óä¨0§€[ï²2u¶Ri =ï1~VnƒÎ{—»ÌuwS”®(dhxlçà 0@õΉ³W~*%öÁñãôûë¯'‡ÁÝèf&÷à,×sê4†ÆÙñ©åP8@û$‰Î{­–¶šFF;¨ï•þ~–q f&6N‹t&zzH8 œÝz†œ ?N©;î (»«‹ÞË÷âl®S, §çôõÑûØ)Ô4z\-Ãü“[o¥5ؾ]8{|þÙÖ0G¤»[œ ÷™æ9ç‰.¾±sè ¾ò ÕööÖ>0NŽD¥B‡ùðaY°·ç4\"Pî/ͤ£¾>«1¡‹sÑmmdzzÄììl<4ÞñºÞŸýŒîÓyx§›äå„Û¹ž8›¥kv:µÓ䤈¨ù€3AŠM#t€ë{{{ÉP„äTW¬×î”E‹·YÊ\‹:9Ik888»R"fÌrU7k)«zºKT6Î^Î{÷?ü!Õ½¯YC(“Ý Šß«ªh6 xÐý¬˜é]«ª‚¯¡èx\@Öü·zýØFÔýÛ&£=2BiŽ,ý~2<ÎÉv¬Äez¢(·œÍaxò÷àÉa eòþc‡ËmÐ¥?ŒvÍDQ:Û"«*7lÍPöÄ„˜gÒk¹|ͲȼôRí}Ç­^ý`x–§•9Cû:£}ÏÙL$Óçjݼåÿæ~ïÏ> <ÿ<íÃ`žÍSõc&#“üܸ²…›íð$:'Ï©ÝåsœªaýgÛ´‘£¡!:“îPo/Ô_þøö·ï|‡ÐÉ-[€n}(ÚÚ躊ÅjÔ†Dæ‹BÆÛ6ŠÖ˜I„>4$6#wœâ|u=ØV|?L†c¨¸‘AÏçÅ4£+¯°f @Ñ “|"åYМÃJ$DëY.§žY:„YÊ\Öã,ǪTDOmMƒ ÂèŒiRdòóŸÔ§(À{ÞC-zc1A¤t wGc…Éù9žmîlé\çzerŒˆ0ª1<,ÊqÜùw'jå.—qŽzåˆt×.BD®¾ºZ©nØ@×½oŸËùäé˜î““"gÙ×Gÿxþ¥gÛÒBÑ×ð° tò>9v¬z¿ê:­#çÈy¿2¿{í¯XQ}Îg:»6ªàažÁoKFð‘GˆþÈ#t½±˜xö ù» &ƘƒÖìH;<çp£™3gä4úŒìÄbôþ+® Ÿë©ëä4ýô§ôÿŒ|nØ@gïÍo®ÞÃ==¢›Ÿ³ßOWãû±c´Ï—,Ñyg§@é/¦gÃNsk« €ê:]Ãø¸ Ë–Ë´Ž--¢ú§áº9Ô3èÓtÎchA&‹‘Ñc6¤3Bçigüðx“ærdxØXq©Öøxcxi|\(Žbk=ÄñqÚ4mm´Aü~Aª`…ÛÓSÝ?Ù}°»º¨Uêõ×ÓAøÉODŠéúÕŸ8!67>a¯ºQfrRöTQÒzµÄl¬Nž¤û^²„Ö€s¿Ñ( §rˆÅ(šàü%GæÎÎ^€PôŒºe‘cP«F—;A1”]©@ÐÄä¿Bœ¦áaàþø‹¿ ÃÇQX#ƒ‰ˆë DÃŒr™¾Ëyø9¢ª53Ú¹oM`ã ‰šiwä½s'ðÔSÕŸç¾Ö={è3·nŠ ¨*í1ÿÊH–ß/:—5rpï¸iJ0Hkªi´Õåº.š¸ðú0!ÐÙ £üi¹q¾—ÓœƒFé9„ÃdxËeÚ?œòhm%Cã,czæ ¸\±\®fà ÑïÖ¬ŸÑÜL÷4Ø:—#§’ }µÐg<è8šli™Z¨(¥; ro¯pyïr;k¿Ÿ )7£rO^ãnh¼'ãqrpä}Áç›QÉ%KÈØ²c÷ì³´žkÖý(ð× |âÀ»ßM¹m7ÿcñbúþTJ8˼_ :~œþ¶y³€þ››éŸ®S”¾fˆÐù™hÊuýàÔOôs£nî¡.žAŸp‰{Åy~÷ÞKŽ'¸† ÃE<}‡áòÖVR2‡‰È3Ë™ˆTONŸžy.W?—96F¯kmsùòjƒ‰œ[Ϩ3„ÿŽwwßMõé§EÔW†Ö4ÚäìɳÇ_(Ð:ðHQwÎyx˜®Õ9Ë©xHC£Ö“Üsž;ÃutT·påˆÜY³lÙ¹Îou»D1‘¥¿_ÙÜÆœs µÈkNbÌÙf+2€fŽF9_}ûí”_v–Îq?ýzÍ~–.œ•8+2V>NÃIЫ%~¿H‘¤R"zª·÷÷²¯¯~Yb*E{}Õ*JƒÔf¿új5Ië~tçD-çz3é”yñ¸0è²–47“ƈçC½¨Ç')ëŸFu˜ÄÊ‘¢Ðóc²ª1Œ©c‘g¡ówÖ:¿\nÄ)¶JEtÔãÉÒ¥äˆ3úÇÑÛÞ½d̹s.¹³¤+—£÷¯ZUÍ«X¶LžF¢ëdzzII$€ïxá…j‡±VN»–®¦ýÄ0þþý¢ß¸s1–Sˆ‹S Äý¸åóð°˜]P/ÿÏ-ps9Á'aኗ_ü‚£­[‰Á>“’8&§†ÃÏçEtΈk2INB(D÷ÓÙ)‚9U¥|97ŠâVÚœ`$—u;;2š&RXMMb¥S˜ïôYˆ³iLÞ ²LPJ[[5‰ÊYn”ÏÓa^´ˆ $2œŸÏD·z>CžÜ±®^D¤ë¨±Aon®ÍpDè72”²LšaÌzð˜°ÃLe]§ÙÔ‡ &+bÜÊÙY“ªiô9ÇO}“¶jEùlü~á »I|Á )SŽìÚÛÅ Šé”·¢¨od„”ÓÀ­ çÅž}– h÷úp¶ªž+• ƒôº‰ ú;óÜ÷ Õ?°±ð¦7UÏ­ç½P¨NQ°QvÂà¼æÓO gGÓèzÂaaøœ“Çví¢õ~ÛÛ¨N÷ر©¹RM#¸}É2,„Ï“ÒØøÖ#Š2RS«ä÷,§‡|>¡+Ѝ‚‡…ÃÃN„³¶»–ãÓHêOæ½Å„8Þw‘}oSôDB;¨ªV·A6 úgž~r’ÖjÍšêïæh}ši8r„ æM„}ä#ä¼ðåǼ™F¨ ë°rY8öÑ(ÁîÌqaäwʆrùrÒ‘ápuDÞÈ©­åèE£ÕÏ.£µ$àÿ˜räŒt4JGpß Ÿ>c|\Ø€3gšxèEÛk׊H›Ïs¹LèT$BÏš‘³]'Ï9ŸNr'—ì±AE§J÷™¨×-Ñ3èÓDè »g³d0œFU‰ŒW7Ê`£Ï5Œ±)¸¶6R‚¬4˜T¯©„ÓÛu¶y¬•‹6 ú|§Èpׂô™ Ó(GÜÜ,š}èzíC­i¤8¸¤f÷nŠÐ8:âëæi^Ü®»59×9™¬žÎùuž˜Uëà±Aio¨j9ÍÍéà<úl&]qiÃÃì´%“¤„ví¢üœs=9çyÖé’r9(δL P»‡7ôzÏ[Q(*àu‘e‘cÍç‘“=vÝQÒK/QÄL`†øœåLüžÉIj>´r%}÷ 7ÐëvíªFUŽ¥õß¼yúÞßÑ(½†•³ðëõ§vôzÊ,ÃÊÎf錭[GßÉùw~Ž|ŒZÍVQºÇ–rY©SÈ2=ëövÁ{`ÒæØXuZ§©i*rÄLg'2qú4ý¼|ùT¨8m\‚Y.“ãÕÙI=Ë¢ë¹çâ õ÷‹zv64xF¼ŸÙyåuÙ½[4›âgÈúïÌ‘ki¡€äÔ)Ñ,i¦ÏS‚î§¾÷½Ôÿ€#dNëÔZ&Ñ.]J÷½h‘ræŒ0îÅ¢¨¬‰FE@ÅÏGÓ1/é nrÔÜ,f:0RäÅÍYK‹èçâTu^ g¹\F"‘¨jg=×R©T01M?úd2‰¢#@;ƒÎps¥BJÀ=|E’È g³µËm˜=ÛÑ!òï““â÷\§ìžÄJ¡·W@Èβ.·°çÎ…œÂðz-8˜ëëEþÜf”YÒµ5—›hÆíÛé3GFDËÄp˜ŒüóÏ“çÿðÃ4'˜û‘s H¥""`§q«¡³×¬(bð l.OsAŽÒÃar~œÑf*œßv*ÕB§;¦6Öp6—I¥`1Ò21!J}܈+õF ­½ž-GÞ<¸…{’³’`ƒî6TGŽÐZ3ùÏÉffÅË<]'gÅ0¨N7¢=½a=W&$qÃ˜ŽŽÚíw3膋ɑ̴ç_·8!ÊzkÃégËÏ“'éç«®|®±æ1µ¬„g«¼ju3dâ#““¢%iW;I¢=ã÷‹çPÖæyî^}}ô¹]]SSE==¢y-áÜòUW ”Œ#ã›n¢½Ä9ëªZgPÓD/ f*rPZZˆ@É¥e\ÞéäutˆˆuõjÚw3ímï÷œ€õúû…Òf6<“Œ‚!Èrñb±wn¿†3j“ IDATöíîÝ‚±ÜßòU7 £¶a²B¢Æx¾ £™F2MˆgCÈUü0­³¥—ÜxƒÏGØnˆq“¥,[BÙPÖ›(cÀXŒÃ‰N¤ YŽï܉“Úr”' ØvzŽ4#^#[ "Sô!3i ­7!U b²B<ÆH.‚ÁL3ÆrM¨J}'awFœ$;'º×ÒB{϶é/[&"ôz¥¡Ì(w:1\j¹n]uTÈäºåËEï÷Zð•W€`å+¯GÊnAÅr›HDÊÆÆ{Ûád•4Æ{sÉ4a¸Ð‚ø@ ¥Ó£°UŸàqcî&Ç.}dH©ƒF vj £ˆµ ºÛ¡li¡ó‹‘ÓÉz£P }´b…Ø÷MMôZŸô1ïÓl–ôFW9ÕšV݃ X$Cï4¸­­ÕC‹ÚÚÄDMA;ÒÁ HC0³ßyαÆs$Ï=÷ŸÇOúS|èCjøº|àxñÅqâÄ R=ç««ã§Ëh3TâqHŠ2•ÀĪ­ ö™ @ÚŒ`²‚4‘À†L ‹nÂáS›Ð$—Ñ-beûJD…yÇÛ![$~@é´ˆJ%ŠöΖ.˜š«bÁôû¡› r?â…0ÆòÄs!üé` Jk+4µ±Pª¶t(D×íèmÛ€aIPdr8L›‰;œý{ÉPQñu¡€–*† _6{î³mÐóè‡ûaå€èo~ƒ¼æÇžþ }Þé߆üáŽ7-AØŒ¡¥µ Á ¢~²„)¹9{<Ãß„¡w`ÅáßáÏÈØÙŒrÉFç«–ko&{rYãÈ>•‹m"àœƬ÷áaØ«VÃŒµA}ì1r¼¶l™Úv:¢u»ùfZÛw¼ƒ¾cï^:„ï|§ˆp v6 £¦3èCÁd1„3éÆÓ>t4•±"Û‚–Ü4úÒ¥d(xe8,àA}ÉÃ%œ]ÿvì ß¿÷½äôõ6)úpêdñbì¦D$?Š-Û_F*¼Ï7}¥½MÐL†%Á¶€M±tìÃni)ÖöAT¾?›|é?´£l¨(é>4?òeE;Ÿ­£3RÄÒXK¢yܪŸÄÊÜn;¶Á¨‘b+ü%ös)”—uœ+Ó¶MòNòÐrHz’ª¢l(Èk~dË~¤+A”u’dC‘lÀ4`Bˆ¦‡ð‰á38Üþœ*.B³t ?Ù³ =†â¶f}Z¢F µŒ°ß€ º)Á0%,K@weZçDG°¨ËFO3ÊT)€Ñlñ|“¡¥ÐŠ&Œô"²¦%c™=€{’&ÔõÝì0‘($ŽÃa2 ‚ÌX‹$Éýœ20@ûŠóågõ†jBÁð£Ð¾ ]ö6ìÙm£õF¨’U6áSlâƒèêãpÛ'°cÇ»Q(*hiÒ°º#‹ÕY¬iK¡}õfDöBéàiŒù¯@9ob"îG¢C¢Ø„‰R¥" —» ø$¨²»N}ËJ'ðÂÖOccW =¨NÆ·SÇ¥Ót–.{³¹™ÎçéÓÔ÷Ü)– Í¡™ *¦Š’®¢l¨ $°ÂÖ"Ñ» Ý‘<º#EDý„ý†pbüþj'Z–Ïv± ©9R}Ø"Ò‰±ìñq†µ¢AJ&)UuË-ô|¢Qá€[VuÕ3˜à€Å²È±`Â/72âi‹²LŸÇ:ª +1‰Ä°ŽDʇ찉ÂþNÕfXÅ2ÞeȸPÓþÚk¯áñÇÇ3Ï<ƒÇ{ <ð:;;ñÃþ=ôŽ9‚/|á ¸á†°{÷ntwwãÁÄüc8p×]w>÷¹Ï!‹!™Lâ_ÿõ_qøðaȲŒw¿ûÝø«¿ú+H.gkûöíhkkê³£®?Ž/|á Èf³ðûýøð‡?Œ{ï½X±b^xá¬_¿þü z¡üä·-h›Ü„;z·¡GöcHZ…P¾úãtS†Òq%ZNíÁov¶áŒL[Љ4U¼hÝŠWû×A–l(¶«¤{ð'¹ÿÀ®§ýh¾vo+ ÍBrôlg¦©w”ðzøT ²V†YIU ™*2å*¦ŠŠ© T‘ñ¦\&ÃWàØÑ›°ré2¬^,œjMóA›ÜíDJ¾ʺÍ¡›|Ц€¨¿áä0H”£ÍE/„Q(•ÃéÞ8¶ý*´ÆÛÐ2)f0Äáç7#<Ø„¥q?úc×àtßu% 'ÕÏ s8ŽWö^ôÅ †héXÛúEy,i-AUlÄOKè?ÓŠî¡£˜”7á—ٱƺûÞŒCë 2–·d°>äÇ¢cä´¶·“^ˆæ5l+Cöµ!~ÂDë-7#´x ü–¥µ•ªa¢d/ûPÑeËŒ„0’#¿ñzÜÜû¼éå—`õ áø•ÀXç•Ð,L[†aɰl ’dÃ'[Pe >Ù‚"Û€lÚó"bVû”Û?¾e9„R÷ztvüûŽ`$àG¥g5B‰> å|‡&7!fÄ ê7"Ÿ¿#{Þ„£‰Ä M(é*lÓB,¤!ü£Ntì }ßÑ!¸n<ö:zz´&· éô!„B@›}%B¹ALöu»€ð"‘!B–аFHµáKÅ)¢^¿ظæd•ÞüzçrKƒÚÖ ¥ßE²aÛ䬕 %MeˈtÄÂ:¢AA¿ É0  †°'Ð22ˆß½ígJ¸õäóXbÙ˜\¶’èXTÔ§*›ƒ¶t=2cQ¤Ž‹‰ÐMã=h:™€jÄ ó+×ÀÐò(÷¯B¥´úd–Xšö¡CñAŽFövh¡ µ/èÀÿH¤«ä‡5r ,ÕÙ2±¦WÁÕ×^˜Aß´iÞö¶·aýúõøÈG>‚––ìÞ½°mš¦açÎxàpß}÷á‹_ü">ó™ÏàK_úxàüÍßü vìØ;ï¼ÿò/ÿ¿ß¯~õ«ÈårøÜç>‡«¯¾[¶l©úÎ}ûöaÅŠ0MßúÖ·°~ýz|ü㇦i4ò¬\sÍ5xå•WðÉO~òü º®g†dóä&uœRÖá·äR’`Ÿu {J 6—uìêëÀ‘à*¤JA ³ÿamÁÉÁMH PnE•M„° ÿn½…=1ŒËKP2Tè¦À‚2$ÈÐ 7œ=42TÙ&E¥èPS…f(ÐM¶mã×x]© Z+äf¬HØgÑ ™Œ„ÌØ:T†bð…|ð©üŠŸb¡¬+È•}È—UJ7¢R¶Q±|ÐMº%Ã0eüÀ~ ʘòs-Pw(&zKT*>ìµb)òx쌜E¹ŸÃÿô£*lI¦ª Ù†,Ûð)¢Aªl!™#C ónhPaŸ|¸-¥|z%9ˆ]CÝØ=æCG‘p»ºHiú2>œL¼E5‚—ûV4Ÿ^†–?(ho‚ñ„ĸ…D¡ ‰\…ŠŠ²&Ã0lø #è3Ѽokþ îý>ÚÇÿ ©Î¤cŠ.C!ØSV‘³Â(AL–š0”iÆd1 ÀµIþ‡öÝŠ¼FÑ  l¨Ðô?L•—¨ÀvÏØ ó`àÖ|–•#«Ç³ªR’:!#Ü$ÛB+¶,ضy.›¤È«á“W§Xh2nEÐ,"û‹NØ¡ú%D­?E,PBK Œ–P­™ÓXTé†mmBhG3Ò£[pÜþ{<ÿ‡·¡hùV hRs([* %³'ðvX–Œ¨”C{°ˆŽPM¾2 z%à ™½hÕR€dcOÛí€/Ÿb" êˆúÊh÷g°x…‚îV –acì´†þ\;†s1ØÙ6äáˆ|5âJ ‰Œt>ÀÈ„ÃTÎ®Ž H°aP$ !UG“/‡%¾V§`AÆ!yÒå Z–­ ŠšáCI‰¢YMa¥|o/<“Ý[iêÄÚUeÈŠ„c#-ˆÇ}HéÍÈUh³RX[:Œ]ÀHxÆ‚« k6ü¥$ ¥Ò™ ÙÐTaµŒˆOCHÕ¡Ê&9~Š U²ȧ‘ÉñdêFè©üÇd*£¶Þˆ_G§}ºÌ»¡îˆ@?Ú %‚¬Ê°lÀ0TŠ&ò y#@Î¥®!”…ϾF ‚Âo!ä3Ðì+"Æ3! äZ1Q ¢Ù^ë­ýhSòÐe?l h¶R¸ªü*&B]èo¾~[B~躄rYBÑð¡\Q1fÊKÍX¬%P°U””fH’„€LçX‘mªü3e&ÐQI n¶á 6Âó¡8ÂÚ^ÔÐ.!‚<š‚æÙ¨YÇÌuxeçGa+*ŠºÉRùÉ÷¡TÑ1ôãU0%Ù>»ž|²uÎ-± Á¶%tJ•ëaÚÀŒÓ_h¿HÇCÂÔ¤šûìßœ'< 6dðÉ&:Í·¡ÓGbÇ„d [óy¬•®Á±ïG{³m†m“gJ¨¬\ý¹jzëH_FN¶ U¢ôNÅ¡À‚ý4`Ÿý_Ð'á lÂuò>\{¤Ë_ëÆïw}§+oǾÞ+1Ô+öµ³6¢G@å/¤Ñ½Ø˜•}ëêꪊ˜ƒÁ "‘Z[[±¬NuÊÊ•+ñž÷¼°uëV˜¦‰­[·®»î:œC©0t›àÚ‰¢‚£‰N<‡Ïà‹ø;ôX#X>zÑÑšP€Œ ’PqË‘Bt„HPe ª­£×~?tÉ+%ø5DübÑ2þ(÷+,-ŸÄ©M[S³P£€‘Gr"‰Ëy¨–‰‰k·bˆa(ÁD>Ã’tèj3²­ëÌùÎu ni6m²±vm‹eÎvKmB¥Da¤ˆä±8Âè;€Óí·¡°l 9€òh¥²„Ñ|§ãaäŠHâ°HÀÚ«Ë1€5=Ž®~lîA@®`Òê@0LJN|/w¿;—ÞžHíꘄ‚ a „åéq\¹÷¤{Öàéõ½è;uí-MènoFPOBjõ¡èW“ŽÎÕÝØ‘*ËZД¯àÖÝOâpÏU[º ù–fèþ&˜¹0,}+†JKHø`—+èéC‹œG4¬£I-!–ìÃâþ¸¥xÝȢ݅疿E#€V3¿ý7h¡þ×âOC‚…U…^üCáÿÃÓÑ»a-ñÊV`ùÜôÃnkÂéÊNÁÝ C)ã¥÷âùÀõ”CœuRÖ¨ãxËáŸ#•H⿖݉•kVB±t(Z R@‚$™¡C†‰•'öcUé4¾{åÿÀ+æí8¸#£ @O—0Û‘Âd'›Ovôä«ÊZ%¬oŸÄµ¥³iT䯻¯BÂjCªB&@Q÷ò¥sïéiÎà-Ëð7æÿÂGþZ^B>d!#=Aû6oÅhS”’‰ÕN%*¦Ù8{í [ö<]y ÿ†»àt£dEÕ#Èiaäµ2e"ÙüÓÐÿÄþحغ7Æ_À¯Â†m-Äd>ŒÑT9½C¨âãlßó³)[Y²ñWÐÌã&ål ïÃ©Ž›1”‹!¯QªQ3avÏÝî¦<Þaÿ×k;ðÄÊcEó"~UB@±à7‰}n$HÙ¬+®„O#/£ ÇP¨ø‘)ý§O`Ó›Ö#¡*@¶ÆÉá&”ƲXœéG¾ÔŽ1«ßÕÿT`…º½Ö/ƒª*ºšK¸gãA\;ŠöמÑÕmõrèm‹wã¥]!ü¨ügøö“MÀ“ÐeÀfÿA¬»1%\‚œ˜„š/ÀTT„å réøÁ’3L%xì±Çð»ßýœ·Ÿ¡43§ €ªªˆ:R”>Ÿº®Ã²,är9är9TÎ-·lÙ‚[n¹eÊçE"‘sìuY–ñÙÏ~kÖ¬Á /¼€ÿùÿ³÷Ýñq•WÚϽÓ{Õ¨Ër‘d¹É± Ø`¶ƒ1Åô¶›„|$Y6a³K _²$!…%l „õGXÈn²1 !5`Š ®Ø¸Ê¶ä&Y½OŸûýqæè½3š‘FÍXhÎï§Ÿ‹¦ÜûÞ÷=õ9Ïùþ÷qà 7à®»îŠ4}ß7*ƒ.I€‹ÂÌVv¢Õ6 ùÖdIQ•dÉdzꃸ´é ”EêðzͰëüøÊö[qÚ^ç*¿& cž ºžvèÆÌ¶Í8÷½‡pòœ/ÁU•KE>äžn`ÍtÀ| p¹ È½èhïÄÿô<…—­AgÈçsÿ[û1H±(Âm>0]¯¾eú­0ÕÌÅ ¡Á9Ý–Êo¦6O¶ t²ŠVE–!K€Í†×D¡Ë2o4r Š?¥½0÷ý Ðu·bÇ…w!œ[iÍjä—gî…ë¯BóÿÞ†¤kÃý«>BXÒ£Mò %ìBOS/ÿe –êcû§l€×‹üb-|ö \Ö´rœìäÐ!H§ŸCór?BåmÐÈ1¸Þ‰¼­ïâÚmد〷§}yhi!ï±m¸âݯcoáÅØ¹ú_a±ˆn<Ÿ¨™Bù;OÁdÓBÒÓ6èêÓáÐiö1ãT}a+šû¬hé³ ±×Š“¡jDb”ZŒÄ$B=˜9 ‡­J^. l½(w´bížGQÿ!ü~þwÑm΃Ñ"£H:…R_y¶^øv¼ Ýk/!¶"Ébòóqª¡ »^—9)7¸07žš•Ðî7áD—'ZÍmˆ­.GD£C$B÷4s&PT$Áf3C’®”Ž>(OýÒ¶ížþ/Ä–^|å(/ñowvB‰FßþжmŸù*õ ®Í9Áeþ®Ö:H+ÿ¤X0 BÀkÛ!Spñ:/.*j‡,É%“ÀF%@wœK—âšé¼ ´Ä‡eÅ€¦ŒÒ*êúY @ R“‰r’ûÞÆ¯sΙMíÐÕ…ëklPΛ‡Þ> ±ú˜7þÚèì€ôç?Mô:`Æ4`æJ ûŸÇå3»Ð°p=:5£ôäIì›u.©0@#+Èíµ@nÑaMY7°¨–Àc Õ©OŸ†rj/°ã· ÝÀº°¼ Ëãi' $쀱 º—^•%¨X¾@´3&Ó‡žØ Xôø‡Õø¢óôÜPÅi‚¡§Úÿy R4<ó "ûëpøª»ðQO1ŽhfÂi c©m/f˜OÁxì ä?lÊ €Õk+8E‘Ðæ7á`« žôà`w>Zbä*M˜—wç•B…ÎéÐe0tv"§·9Œ¯ÈËÂUK±€ÁªW®$À*®áz}4 ô5aþ¶m¨¬qÂQ”Ï#E¥ z¡D¢ˆýùy蚢(¹ò\ä˜Ü(y¹ š¾ƒ¾¼ :£Ý1Nô9q Õ­ȧN`ÍÑ_ádÕÅðWÌA‰£ÅޏL~ص~èžù-¤ÎD¯ü{ti=hì±âH» ½"Z#dÜ )„v<Š\kÖ^W‡1Dñx(HhA` RDpi|®šÎÄ3Ïz½=½½xê©§ð¹?s¼Î¯ôDбùòþûÇØ’w Áäw|„Gg<„˜‰nÙIyÔH’Ý)Ç‹hTÀ0êtñIǶ„¶àâ¹-˜éÿr4ì°çK×ÓP½ŒØG¿F[Á4üiî7°§øRÔô¾‡Ë_øì±Nôÿômh¦—ÁÿÜŽ5ï±"ÜÚ‰ª;ÿZ‹1ãV´½{÷"”¢]Y¯×§üÿ‘ˆÑhDmm-æÌ™ƒ+¯¼’$!wµÔÔÔà…^@4…,˃¸úê«qõÕWã­·Þ—¿ü僾{÷n,Z´hôý²‹ú±mæ,é|ë>Œ¿N»¥óà0)Y#‰8=•Qµÿ(*ö¿ˆ q$I=ÖÈt'®­Ü¯3 ½×9†ÜÙM0ÍæJú÷ Dh„Çq”w4á ìú Üš& ï”ÙÀ¢Eо½ Ëë~%Jý£×Î=€F­'>U–8°Ë%¦©êtz:=èÞÙ‰Ž-Ñ«XávFQæíC˳! V¤´ŠMíÀ¡ÐÕ•Eu@YÒy~Àeúº€BðÊ%E0˜Í(ÐjQúãÀÌ2äìßÕ9;ÂBHÉý²‘ Å€ÖÓˆêupçi wÆ‘ô «€½Û‘ûÑð]áÀ’……h9gŽ•ÐÕExßë‡0û½wQ³b®û>ÙNqzà´@o2V<¶ܶ6,(iG×á;mD]—M½Vô…tǨ6U%&ÁìÀûïƒ;Ô‚M¹_Å´¦k`~ç] fþþœ:(ºhœvè:NCcŠÓa–¯Kê ñ‹A¶Ù ‹ÓÀr Ï£ähÈñt`ž P\(×j­ÕÁ&™Œ€Å8mhº:€@Ы¤(ý4ŸNŸ.¼ù9QäçÇùeÇ 3¨xº÷Îö¡R,ìÛ ø||9¤!: "î`¶:sE£ÔE‘Œ<æÞoY­„jgF»8ÂXª? éÜs`·k©õÒë·¾´·œOkëtÒƒŸ=’ÅËŽ·Q¥ôÒ½4¨^lEµºP¤ŽvZ¯^*]QؤÎ@‰¿~aa¼E&Ž—”Àh2Á§æŸH6æLêñ@ÒÈИôpzµ€ €ÕØã$Cù^èöìÀy/ª*».샬×Bw,NÈr¢0è€5«€Â|P¡FAžµ¹–>,ñA»w&Žõ{áé?†bm &€ø¬¥7ªîÃg‡în2øjšÕ¹saܾòÑ£`Kpl4„æà^`Þ<MÓr°| ðÛß³ë `Õ*Øå~¹ûñ©ÂF£Zàw`nüÑ%³ •Ptž ÓJWAÛÙO‰sU¾6„£„ˈÄËý-,‘.Ø?jƒì´Ao ŠÜóÏuØXŒîoÍš*éüóW^ävÇ5*‹IQêD‘´Z˜-˜óc€Ç‰%Ñ÷ õ´eŸóâÑïëFÐh‡ä÷C2è!­½°JX—¶6ÑÑ;¿FƒÊ½§`‰ö-  ‡6^ã•úú ‰ásEpÛòƒˆ|åRh^î„´EŽuÁˆvÀ^ ‡Ü äúC 59÷Üsñÿñ8|ø0®¾úêTøH úý÷ßo~ó›øÓŸþ“É„öövÜyçX¼xqÂk—/_Ž'žxÇGQQyä8pv»õõõøÌg>3€†?pà®»îºÑt³1†®VÌê<“QÁÊ0ƒ6:H?Å ŠÙ Í.³¾èu0 „ü6ÀÓG]÷‘ÂíVm8fÈâþÇ`pÒZÇdñ‘¤RaPT¬_é£ ½ý6àu£ØÝb_;]Íé¦oj€¹ePªÚ©ÐŸŠ IDATÙ¼ZÐû©D¯¼ÀBC?¤`œž5ý×€ÔÓ c´Åù—¨nê£@ ÃSîÒeÊË©-KõÙƒ^¯ÈŸr ó‹ZÑ"´rS¯zBzøÃZ„£:48®GÅæïáò#?…¼àÊø0w¡hµ´ÀlŒQn7­É±c´>Á ¤h:&“àÞáâb„‡!+  Õ éYÒé9˜¡Pð?uJôØ&e¢P^N¯=zTàãÇ­e²¡J%É-x‘HbwªîæfA²ÂmjìÉ3‡6÷3½n<«ƒŠ ¢òT{: °z5Ýç¶mä”äåAÎñl4ô:º&nçbšX¦ÞänT„?I<’× AI¥øz{©9Ôw˜´¤±Qð[47C.)!Є“dÜnÑÚ¤~~Jl`°`¾Ô´æ0Ãà6GÕÏÈl¦õw8g~³_VXˆˆÛ }]µeªy¢Q"¢¼ª`<+.¦”Òöí4„'~ÝYY‡«¯K<—ä3«Õ‘ÑW dI+l!hïB~ÀQ$î©°p0kœßOÑúŒbãÏšEÓ={ŽöKo/=§™3©5Íj¥½àrAÃã~«gÃaWà(”X7 ï.¹(·jP‡iYŒF ¤V+p¼ƒ>“ûô™öØïm£ñT­¤7íöxÛU³01Kåpc­G ëÖ­CYY:;;QVV«ÕŠûUUUx衇^»fÍš„šøç?ÿyèâ{«¶¶6lÀ‘#G‰Dàõz1ƒ×]%ùùùX²d ^{í5Üzë­øâ¿ˆ#GŽ ÀívcöìÙ€7Þxeee˜;wîè ºÞ¤Á-•;à<¾ ²É—ODz˜ƒX¸6?÷bëõ Ú!éÉ¡×CúÔ"è"a:pÏÐŒdÌ‚ä÷‹~xæ2éÿy {Ã’Dk“C÷^_OF1°²ìï§×¶µ!d±@ÇãL™¯¬Œˆ):;Å÷ª÷®3íi*)(tÉa®ÅhµÐÊ1¸M¸MTçR¯s4&Š:¢…Í…ä½ÒŸþDC,˜;¾°PT@ÐD²CSP@N[œeO‹AÓÙIvšû[yª’ZÉ5m,Ÿ\ÕëéÀ«IX42Ð¥"©q8ˆ7àœsèõû÷Óç¦8ˆÃÚvŸ6îáM··l6Á f·‹>ÜnÇS O¢×2ùÌþý´çæÍK¶0Ȩ Ôž7cFâët*ƒÎºšv¶µ5õL€d1™-*‚nëVržR9lÐy¸ŠÚ Ë²p6NºGžÛÀü L+{ú4‘½¤r¬¢QÁ Î÷Ÿ)¯“ưђeÁ¦ÆŸ§Ó!4s&ÝgS9鼞ǓsU]Msih4ÄQ°?=ƒK/Mì•?uŠÎGáëåïÌÍ¥Eo½E³Ö®MÏŠÆó6ú£1‘-“£sž”©þ­–öûÉ“Ð>êÂBh‹ŠèÚssÅ #»ÎÈôg~>}Ÿ,Ó¾<ï¼Ámj]j N¬zØ–Ë%3yJb8L{•¸ËEÏ&¥õWs½óþh4,]º4eo¹^¯ÇÂ… “ünW\µ9~—ŸŸ?h# 郌µú÷éäöÛoÇ I|>|É$Irssqçw ÞGeÐ5À­éZ›…é ÷ô$ξfåó‘bŠ{t°Zé‰Úí¢ÆfµR¤šŸ/˜‡Ôu+5hÀdÂr¦Øä1ƒÉ‘Ó)¦8™‘ èt´‘™“<òÒj¹ G4LÑÝMF"ЯS–é>ù =Ên*f¦©e¾`Öª*ÁXÅQ+ÉÎNúÿdö°“'éÕ©Þdá‚zkëàû”ez¯š„Ÿ¿¬Àªú0÷uÐý½ü2]ÿÊ•‚IÍbΓghµ”¢ø€öÒ…¦7èÌøÇ:&ùþ»ºˆ¥³°0¥c†µka|ã \°~=í5v>ª«© j³‰LZi©˜ißÝMç†G§*ºõ³Ü±QÅè~y-ìvÚ?L.ÃtÆLþ4BÑétøÊW¾‚³EÒqµ$§êGÏÇ5%6¢ÌÎìBj#Ëþéï§ íó‰IAV+mžsOî'±0%Ôà8%ßÚJN@*O•§EéÇ«¦R¨«V =I‰£_Y FÌîÑÐ}jµD¯Èó¼;;iÍxÒôé´ ›š„Rki¡÷2ç53-15"{ì&­!+TS¹†Bô9:]ê¨3ù¹$ƒ=˜;ž†LF.ZDŠÆ` ÃΞÅÎŒmü,§M£Ï=~ˆF!÷÷SšÐéÄj1]Mz¤Â Óf£ýÒÑ!æ-··‹ÔorZœŸ}Y=§ÖVÁŠ5{ö`‘ÐP©¾htèè\íŒr¶ h‡k½œA9qBŒ­<~œžyMÍð£/%‰öcr”ÀNO\ã<ù°¯®'£èõÒÞ««K}~ÙQäRˆÕšÈÚèv‹Áêˆ,OŒ³ÙR³TF£b”©úþ8ÊÎ$:çsêr‰ cÉúÀí&–@‡ƒœó—_þë¿è¾çϧk §ˆ—-£{{ýuš÷Ì3ô^æJW?+ª¤¾•+éœmÚìÜ™úžz{…S͘ õ³ãqÕCMþóx€õëIW©ŸÏ´i°2#hU•8kÁ Eç™ê\—KLa“eAëÊTÍÌ:@¾ Ñ>÷xÁPG½—'ÌMÁ-£g°oo§…óùhÁ9 RÓª=.~èÑ(mX6´¥ªvíoœ’Õü8>2™‡1§¼Nµ¢Š<‰´µAîêÂq¯žPV•’U¼wìŠ-›Í#›åóQd±y3)×ä÷òµ«i_;;ééõ‚ 1?ŸÔòå”F|ë-‘ň{ÅʱcØ£×£#À4‡ÅÝÝ´v¼ADôzìnmEoc#fú|È;C--Øsàt[¶`öâÅp:d;:DT0”°òà, Ïlæ´®Ý.8”‡KÛœs½Þë¥ÍSÞÜnŠÖáèäåÑ44ÕÕÐD£TêgWª(#ô‚Q`³‰,Ï÷xDt‰niv`8“ÂuG½^ ÇÐéÇ´F"@4 ÅlÆaI©'o4b†ú3ãNB+€ 0¨.,„A§C·ßCMMè à±Z1§¨;lìTµ·Ó9‰DĬíþ~r;:ˆ7žiI3mUI—µaC®×‹9 ­­F(ÅîÓ§á‡Q™“O’S  Y­(ç´©jŽÂéîn8§éz\V±&1‘É2=“ÖVZ.1Ìœ)úãÇé5\UÓ‡F"ƒ¦ MG­Þgz=ÚB!ìß¼¦hU‘Œ©ÇÓî¡h65!PZŠÊšxâc¡•ÆFlxóMüòµ×Û»ÿóÊ+عoxþyl|ÿ}(Œ 7ÄΞ¨Ë>û÷“²?r„œŒL(zÕõñTÙ .ñèMž©"êñàñ­[ñøÖ­xýèQÜûê«hMÊHl9qÿöƨóx€þ~t«øÇÃÑ(^~á„…RV&ŒŒªw@JKE´¯×S‰¥§‡öNa¡˜ÓÀÃ<ø¾’ׂõËpû9C@’ðO¿ý-^{óMløýïñ‹7ßhZEA4ï¶nņíÛñêáÃø¿o¿6ÈÏÇ3~l6cG0ˆ7A¯^/†Ñ Âáå!%……t¯ôÃY¨PˆöÃAû>9;`·Ólƒ¢ûäù t½|f’3˜Ñ(Þoj¿Ýw6oÞŒý×ÅöíÛ÷l?þå_þ¯¼ò žxâ üìg?ìÞ³w=ý4Þ¯«Ão÷ïÇcz=‚6]K0HÁÐH"d¡Êzƒ»=xŒ*ZÖëÅý bB_S.]¤4/½ô¾÷½ïaóæÍ¸çž{p y<5€§Ÿ~¿úÕ¯ðÅ/~]Éëû‰1è<©Š§X1Ð)¹þµuJžëç¬ô:x\3á”T~>fh4¸éR|ó‚ Ð a×Ìp¶´àÔиaåJìinFC¼vÒé÷ãç[¶à¦¹sEÍq¤b0PÚˆÛX’•£»»ÅÔ!ž@×ÕE÷•¬Tx  ÉÍ…»¹ß=ÿ|ÜsþùXZT„göî3‘­V´* þ{÷nüðæ›ñU«k2áÕ†ÀjÅ“ ÿT[‹o|éKèêê¾}ûèZ¹þ?œ‚×ë)UVU\uEÙ.—¬À)®TSç¸^•Ê`p‰ 'GDJZ-Ý3Vi)í£ž »›6#;w©Ê'<+{¤ÂC0\.Úc<ôA’(mm·'ÖZyŒ,œe"÷ÛÌžMÏ q1`±àÿmÚ„¿;ï<Ü}ÙeøÒªUxtËDxÿÇbx¹¾·ÿ÷Š+ð+®À¶nE ÆÚ™3ñ£ë¯ÇW/¸ÿºnþû½÷` %g‚xªZÞŸGŽ£á÷tE–¾L5©O=Eg_ËòÀØÕ“Š‚¿:„V­Â¿­X,ã=õ@Oî܉çÎÅê‹/ D@4…¢(xõ£°lÿ~ô[,èáÚ:ós'K^žÈÖ¸ÝtøÞY””Ð/,¤ ˜Ã!¦¦ÂÌd‚ÁˆFñ·#G`›5 ÷Þsî½÷^¼ÜÒ‚ŽÞ^º–X M½½øã¾}øÑš5øÖ…B'ËØÔЀ`$‚¿û.î9ÿ|ܾx1þ©¶®‚rŽyœ±Ë%¦ü åtqi…#ûTgÐã¡H½­0)ÉõqµAWïx¶ë‰?þ7ß|3î¾ûn|éK_Âc=†°ÊqxõÕWáp8ðo|ßüæ7ñì³ÏÂï÷ã£>Bù¬YøÚu×áë×ãéÖVôrI‹)+GVÀ™ž÷έkÌwÏÿ¯vPØ 768 í…i¤¯¯¿þõ¯qÏ=÷àî»ïƲe˰qãÆA¯»ë®»°aÃh'xëÇkÐyä%Ïlæ9Ñ©¼}ÞŒ\Í͈v6l<.‘ÜÇb@a!¬¡¡¤@ JK±»¡¼ôÞ^ÀhÄáŽ,‡‹ÚœTy<ØÛÒ2à=_UU7§G;Çë¥ Ÿ¥/ƒ¤${z‡ßO7ÙÑáš {û°˜?ì °ûôiôp:щ@1à±Z¯ |>ìnk£µŠiØ·())¡ƒÌ’†Jõ+_tQbm—¯‘§É3­YŸ uÎ-?<ÛØdÏUíäqéåôi]0}*ïž?w¤Âµ7—KôU³aki†ƒïAy:­Ÿ¢’â”§µyD|ÍŽ·µ¡,^Ï­5 ÛÚĬâ`õöbNq1´² ‡ÉŸÝŽúÓ§¡ ‡!­^¨Ï‡×wì@uQô¼?¸†Ëe˜¾>šñÄ®æfB%Ö^S9_œj./§û)-À7uƆE!ƒa³¡%Q«…3~žæçåaOÒˆã“]](s:i­ÊË¡=y‘înœho‡æ•WP¦ÑàÇV+z¸ÊÝ.ÉÂ#d 2§O LÍÑ£´§rs…‘ÖëéYΜIY!uÊ•[ðøy#»š›1wölhõzx}>x‹ŠpäÔ©€£+„A£(ñÕäæb_K ¶µ¡¥¿÷¾ú*þnãFÜöÒKèb0·di4t}@úka³™öZ*r“Ù³éÜìØ!@t ãÏP—?9ËšŸc(‹£Ð.\ˆººº„ùÚ{÷îEuuõûYnn.êëë±bÅ ´twãž_Äm6àV¬€Óí¦Ï]²dÅ_­ ‘koƒ•Ô†^ Tšéêø­aÒíhjjBuu5 ªª*e„>Ùdô¨ŽÚÜ:Ýà9ãjoX=žrÚ42Ü Náˆ-®Ü[ÚÚð›>ÀoöíÃQŽtâÀ8IQãÞÛøvF£DÔ’—È2ä`1EÁ¦cÇÐØÛ‹OϘh4Š(€ØhÐÑlð**ˆ„>TLü‹:³Å"ú‚½ÞÁ]£A¨¸ÿûÞ{øÍ¾}Ø¡Óá¤NG5æPr¼9ð=\#ä j6C¶Xãzs?š›qÿ/~;”=·«dŠìO>\Åèžt::(¬0Š‹éyr =•áå ’D‘:§ÌÙXçåÑáMפ®…B¤X¸7Ùn§ÿËÉ¡¿——Ó52èJu=êU% ŠÑHŸÇÄ,Ȫév’$!ÖÑ,\ˆhi)žkiÁû÷ãîK/…FVµ€:"27é{ÛÚ(:¯¯§ßÕÖ¦_³@€®£¤„Œ8ŸK‹…uE@2u¯¾Ê 'ïgY’h¿ªƒKÄI7dÁ²2˜{zinÆö×_ÇŠ®.tÏ›‡f³È^°Ã•JÄÛ'€qÌèvú4eMžl’#´ÖVºGfh`\üžc² YÝj*ËP¸ëA¯'þ‰ëŽFÑà;+Wâ×ëÖÁm6ã¹;hï­Y#Œ©Õšd§6¸ê2$‘>‰Å_»VKÙ™ÖVÑâÈ¥7§SÂowïÆ[¼ÑGÔÒu¯_OŠ3£Æœ{Ñ‘ÜÞNÿÇ#þ’7Qq1L’³ÃÅd¹¹«¯Ç¡¶6Lw»)òЧ¬­&b±ú‚A@–qÈïGó¸* ~ùÖ[X¿v-Ö®]K_À@/—kôsÙp»4t»I‘òüôœœÔóØ1ÍÆ£°P[Ø 2™HQ;F)3îûoƒ.Ë´j  “Qð¼xVæMbú—3 v;½®²2±Î®Ê$äØlh‰$46¢Øë…¡¨ˆ>×ãAyn.Ž47#¦(è ÐÞÝÂòrÄæÎųþ3~ÿÆøÉUWÁÎ÷È /—‹§Ï$–{$‰ˆ?l6ÒS&Žf}>2äjBþ^O¿³Zéù2°¯O”b1ÚÓœv;‚‘üqC4°_U’c±àto/Ex6BBgEuuè´Xð•žìimÅ#ヒ~ ¦Ò! íq&šaÌCg'wÚW« …hí8r*Jë¦^/êNB,Cww7ºÚÚPhµ’N+)%?ÁH¡x”}¸½å.JœN¸Íf8F˜´ZxsrÐÝÒBÎoq1E¯]]b\1gò5¤Zv²SEéܹcÝ[o/íQθ¨y<CQXŸÏ‡æx†åàÁƒ(,,„QuþÊËËqôèQÄb1ô÷÷£¥¥EEEØ´i.¸à\ôéOãﯽ‡šš¨$1þÈA«,Œ×In]kk®£« ºÃA÷Ëz8ƒnµZáv»ÑÐÐ8vìXÚÁ+Ÿ|ƒ^W'ê£zýÐFƒ‡Ð³°ÇÈuw6xV+À¶ãÇqayù{ÜR‹>I–-[ÐÑÑAžz$’öû3¾ß’aD\.BÑr*^ý<µZ‘FçgË©z5YP$"@“ê:zOZÔ€¸TõùAl#¸·[ôââGS]#ðpX5Ž‚ ëܹ´&|ŸIø„k/Æ›6á…;ñÓ—_ÆÍç‡S¡¾»s'‚&>=w.v;†ßoÙ‚ o¾‰¹yyp¬Yƒ×¶lÁ<€ÕëÖḢ`ב#ˆ0é ;#ìDª¥¹™îaÖ,qΘ& ½YVFF ¹~zú´(—pÌY «•ö3gÒ¸eÍãA±Ó‰šÜ\üøÝw±ñ£p¸½ç–”àÅC‡ð›?„àÊÙ³ñÔ®]xéÐ!ühï^tÛlpÕ×£PQ`½ôR|kíZÌòzqÛÂ…01¡LºvDâf&ã§ÑPÉ­¡®­¨ˆ~§®­§’înŠÃaÑî”îõq„ûÅå娳k6n܈ÿüÏÿDEa!òÍfÜ÷‡? ®½yÓ¦¡¶²¿÷~·};Ž´µá¼âbxL&œ_ZŠÿüàüñÈl>~+JKÉàj4ÔjVT4P6Li y|ªº-QÉN€ËEßÑÐ@N·{¥2èÜ“îvãšk®Á“O>‰^x?ýéOqã7¢±±÷ß?‚Á V­Z…={öàw¿û6lØ€šš8,Z´/¿ü2þò׿bÞ=È5`¯©]tÎb³%ò9³­8uJ” 8HT;ܼ†Ü‡žÏáp`ݺuøÑ~„^xþóŸqùå—#‹áá‡îß¿Ï?ÿ<º»»ñòË/ãøñãŸ@ƒ¾¿Ø\êjjWh0ªTÍÂ¤Žæ ÈÃ2›¡Õj¡ÉÍÚÚÐÑׇG/¿^³zU990h4!Ûlh­Ÿö³0åäÀÀk±Àk±`í¬Y¸¤ª ÆteÑD{99䉪ïkÊ¡E¬$Óíâ_ÖëqMm-¢ Âzò$î›1‹óóÖVDìvL&hÍfÜ}É%˜WR‚–ž|ïÚk1sæLD㑜#ÂŽ?ĶmÛÐÉÑ s…EX‰2ekªÈY–éu¬”âiÛæÞ^<þÚk¸÷Þ{ñØc!À8 VV¼g J,† Ý.ÃZ[)*TuNCÖûgpGèœ`v*Îj$;l,gÏýáLޝ’Ë.Äg—/GCk+¾xá…XSS‹ÑˆÊŠ È:îtûì,‘ÑA÷‚A:\\óJÔutu*&Uí½°RFû k2 IDAT1Áqð n+)ؘV½×Í™ƒxž¯W/^,R“ <‰÷!Ö––’ÒïþAFŸ2{‡~?ERzýÐÞjYÙŠ]îè€÷‚ €0mß>2­­°3¢^}k+®^°@lØHúxô²ÒnÇÊ•+Ï~V´qT<1›Ii2*:½»KßïdžÆS§`)+Ã-+WâÕW_ÅíwßGÏ9zFoÛí´fqjÕhK Z#šÍÂ(UTòf²Š±tN×Ùítð;;Éa¨­¥ÿgÅŸ*Rt: Ï “ý$!Y’°|Ö,,W¥¿}v;®V1¥•û|(çûY¹$,]ºTp?ƒÀ£&ò‹sÛV¾†]»èÖÔ¤&WIg°Âaj+Ú¹3ÑPp¦Åf£2Fg{½@O,‹8ƒqYÀí™Ñ(4–`Ù´iâ§NçŸHô ®ªª¢ëPcS‰Ó)ö^QÝs,FšSÓÓ§Óºõ÷'¦©‹²j­ÎP{ˆs±ʪªp[œ#›Û¯[²dàZMz=nPÏ±Ž·1Z{zp=·¤…B€Së·›žýoКæåŽ„™yM†2|ƒuZn.­ÅŽ"³Gå'8ã~ÿ@@"Ë2–-[†eË–‰’IN®¹æšO›6 ·Ýv[’/ã¼óÎÃyç'ÊŒCÑLg"œ±åLã'NœXžäŒ0goÒ'#h•Óh4¸ä’KúuëÖ ü{ùòåX¾|ù'<å~à Ä!l± ßÂuòd¦#V² Å·‘rÕ銊Zz{iSçå%F:uP¯›ç˜JL&º7ÞtêNg'mÌ¡ˆ …×Éžô¼yD–QWGÄíë¡(‰)WVöLüÂßÏ©XfF«¦®Ù%GÜV¾-*(ÀM×_ªª*Üxã8pð Eàyr},ŽÜheЃÐ.ºˆŒ§ÓÆbÐm6áD†ÃD£fåâ~s5(‰£T5ÑוGÓ>ÇÒßOŽDªÏ0¨ÞÊ m ¬c§‰S­uuiÏš•9OGç3gÒO* $—ü~Á#ÑÚJÏ…³,¡PúvÅP(‘g‚KÖ©ŒçP:„ g˜¿‚K1ee"=Ëãýý‰ßËûkæLqý‘ˆh‹LÕ6ÆÎ$Dõyã6Æ¡²w&˜‚æš5+q­¹³$7—ž3§Þ™ñQnOgøtºÁ×Ïà¸Pˆh€¹—›õ :å΃ñÖUcÍ~rÚŸ‘Å"ðDLßÌ9Ï™H.MaÝÝsKOº:Oº”¥:ݞ̳̊“Üãm±Pš-Yé3‹‹EMH1Í<=>ðe€\FmÐÓõ '§€yýø Í›G÷ýöÛô92"™• ¯«Á@= ”#ô'èÚÆÃ 3-o& Vx¤8< â—¿ü%.»ì2˜ËË®1f0 ¬(‡Ãˆ"ªÕ¢›ï)ÎCƒ"‰U«„’m¦…é6}þ‘#"‹Â MµÁ DD¬vJYáŽVqN*+vA¥n·ÆÅbÄ g±PMÖëÍl…¢P¤¹p!í›d| ¯­Í&ÊH‘ígæ\·ÙDÖ&Õ½ù|"¬æ HåܲA*Bg]Ñ÷+çæŠ’„ÃAû´¦Fpxs‹_m­pêU>0ŽÇ§&GÈ ÐªVŸ¬÷"úžT¥/­–λß/b5·Ápº‡{¶“¥¨ˆŒ5×è™&—Ÿ-Œ6­’^O{ ‘3ó¬]KÆ}´†”•…ËE륞)ÀFZíôñÔ&vf+ÁÏV’ÑËH"äÞ^RäC¥T‹Š3Ÿ·›”¿ßOŸqè½®´”`ÄQåCJ_í!¯—öN²aæz4£á»»éþ»ºG³s9‰ïe2ðØqÊÄÉêœp¯×Ó5èõ‚Ý׆™K–ПÌg±|ƒ¬ØéM5yÓÝ© :ŸÁTŽL:álEºgÍ >þ^¦CΤÅ66‰ïkÞ<¡ø>Õ='gtCŽ&ÜÉ´ÆL­Ñˆ,.OKLõ\¸=“35èC¤ÒÕ‹«žÊ”j“±"VGÓÉ)8I"O; #žP¤Þ¼‘EíLB’ ýl±ˆº"÷·7ɤf³ sa@šË5¼§]\,ÈI‚AúÌÚZQ3eÆ }ÁÁSÌÑ‹Å"¦ñ¸Ù®.AD1Va¿d™@€¾G átc ÅíÆÏ{ Û·oÇÃ? 3sRǃüü|\vóÍX³r%Îûô§áX¼5шš²–#˜t½Ö™ Âäè‰Ó¢Ì §Þ_ )FV©÷=? æð®•™ÓMS¯cYYâ¤A6èýý4¥+¦èÜí&#ÍÀ¾t‹Ñû—.(â¼¼DÅ¥5[\(Dr„®ÓÑ{óóé:C!Z/N‰³ƒo³ ?Ô‡¢äùÜÉ]ñxȉQ\e‡ÀjV¬|ýóç'¶92±ë„dƒÈ™Aþ}*ƒ>’ñ½€àžO%Ü ÉÙ›-ý©T{$•N“$Ú·ÌâÉû‡?3š€èãF¬³AçgËü©Îv2ÿGÖ BÔÔŠ¬Ô::R%08ƒkr\I@ÊËJ]–ƒœš* ¨ÛæÔ³Ô“=7îçmoäPʈ§½ý~R~×H„¾ç £0Ž ü~üùƒðÈO~½^x>ø ü\ … ÕjaÏÍ…Õå‚%'ºO} 1½žî…Á©Rcn]cT5ã’E?9[sç ¥Ïyž°Çû𢋀k¯¥çÖÑAë’®¾ÜÑA³»3饟5K€Æ8»Àì{÷ÒõñT“‰Œƒ!S Ì`®€ö“Úèòb´qW—ØWü>5ÙJQ½'¦µTŸAfúJgÔÕíCát:±æÑ(óòòDò"ufÖ,ú½Ó9xPÛ-ö+;@Š"ZýxúgaRŽL&²s.Ý®>/ÂIàòd¦%?æÀHU¦X° 1­Îg'ÿúùx #ÛÕ-›êLM*ƒîtîäðaàÍ7Ó“õL}šQÞ3èaìÞ-†¨7®Å"È*8­•Ê ‚°ƒ§rdÀÍfJ5nÛFʆ=MFF2ÀD­ ¸¯v"ê=ªô2b11RV£¡M6\Z‹9Ä™¡‹W‹ £m0ˆˆ_–ÉȼöšPdjªNõ¨Kè0RXH3ŸYwuJzî\:D}}‰Ï2ÃW^‰¿^½êQè çþÀÑý`³Ô¶ÆŒe3fŒW+t®§F£bh ¯­:’f^pnÉãQ°|ŸmÇyÜqé¥t_»wÓ>HNásZ¿¢"3çÒçýúŒt×jɘ75®€»$‰¢õ÷Þ-†ÉÆ%œáH®£2øŒ—®.*ßptª6úü÷ÂBQ—Mþ,‡ƒ®5•Ãif5>$¨ëìÙ‰œß¼.êï=÷\rD’¯IíàªqŒðçZ0˜Úfì£ëY˜eOÝ~ÐþΩ.,ŽÍH‚>;Ìמ,55ÔÍÁ:…ëóVëØÑè)ê2.ëQuÊ=•Nu8hše0HŒ›Ñug úÓͼ™u:bbµÒÂoß.P‰êG.Lטʠs-–ç%skÜæÍôÓÑAŠõÓŸ&ƒÂßÃQ|qqâÁP”Ñó¸'v»¨F£"íÎ#þ†Cd ä-:DŸÁ#OÝnZOvJÔÊhÚ4Z62L„ÂiÆ`PÐ¾Ž—QdC¨(ôÅÅp½îÅ)RäöDE£´ŽTQŽÏGFI½†ííP⮘czž—I8ÂJNmh¸·U«¥ì¦MdиÁ˜?_ “‰öcQíÿèwü]==ôL3çÎ@27kµŠ®z½ÃûÂn§4=#ÒÕû¿§'5%§Ñ(PÅÜÿË΀Ý.Ƴrù'™>”?#ãj³ÑûS+^gÎB WöQ— ˜=£ç’œãYì©‚^­VI’øáRJª €A¬jƒÎéìvrä[ ’S8æÃá´¶©ôOÅcp,?'Þsé>?/O³°£ÖßOÄDéÃñuæ—ˆüìÒµóqgÓsoÙBë4V2±)“rgo–‘¤<¡K§£(àÜsâ[­ 82ç4sªZ‘š&”£ÐœRTF# üÜçè;lg2‰6›ä”X²c1ž¢®Ýñ ’ÎN¦Π2f NodžPÆhzÞÈf3¥Nûûš, ƒ~êݳÃ1~@@‹…¾§·—¾ó‚ „R(//¯w*ð ·"ª÷…NEQfå3¶©áâÙ0¨ëŒœš.,sº+*ľR³mÅbƒÛ‘Ø]±"±Ý.¢û¬ªÊ< ãÖ>®ëªË‚__Ó˜??1åÏ”­T;OVþZ-=Nùr+$·Q>5™ßÂH@‰§+ApYm8'‡ïQÝ„GLœ¼v©®“÷¥úœñ=%F:*Z56@Qh}—/®»¸ürÊ.1oC&µj­–ÎP:„6ÓÄreW—Àé°NŽãR#gDÚ‡8x¸ñÆÄ~mž>ÆYv&ÒÕ»­Vá ²â™‰1@p"Ÿ·×’!K&ˆéï'¥¬ŽTssÅ(Žàxp*Ñë)s‘›K5½cÇÈÀô¾8ÄQ¾ËE„kûÜåÀRR"Œ ‰ Ș§rj5r(%Ndxâ<×ÈÏ­O#1LöÔÔ4øû9êLÇ@˜¼ܳ‹5áv¾‘ìcÎz UŽÊÉp8ƒaW9sDÄ_RB=ñ]]ÃbYÊÊ€·Þüÿ½½´ö«V‰¬D?ðÎ;"àq:…Ó5Ô}³~:›ëçêçÍ:ì„qv,[¥ÇC­¨<#^’ˆ¸gãFàóŸÏFèà +¸sÏl8¸Õ¨¼\Ô‚¹æœá®žÌŽ@M˜¬”¬xÄ$@uÝT¤ãUKN&—aD>“ÝX­b]&ŸÁè[µ÷¯b¬@«×§¢B´÷Ùí÷ö †dÎõ±Ji)9UÓ§Žfª«E—C8,²©Äh$c¨n1a$}o/˜Ñ’Çd²Ö¼Þ<—^½9jL2UW'FP==dT‡{¾yy¤\V¯¦è|¤¢ŽÐ¹DàñPÙ…Ïz­´Z2.]]t½^HÑãP3//1Ša̧ÜûûEV…±*#µ³Ëâ÷Óµs+“Ò×OyÚ¯ÉHêÁ¬ø‡j=ãÈ7Ýšñ(a¾‡+Ÿ3“I^ešéóùŸgü–/§ït:é5eetöY¯ªµ©D¡s‰ål^cu["w:¤r´Í#r9“[[KŒ|Ù”{†‡cùòô­Q²LŠG­Íf‘ ¨Æ©QuÿdºÃÇ)=½ž6ºË5¸u!Óºåh  äù‡B¤d8E™IÔPP ÆrúŒGe*Êà5–e2q:ÊŸ--‚ï{¼=ñ¼<ë¥Rè>ýð\x&ýH—b\°@‰x ìvH¡Ð` Äx§óÁÒ•LÃ4É ;“Ѩàqçúk&YššÑ3ù=êÖµªªÄÖªäó1}:»5kè{‡ÛƒÌðÅûŽ[×xm§néiv‡ÑîŠB†Ðå`°d¢tÏgÔó3àúûH ÔpHuÛ¥»W·›Îj4JÆ|,Œê31s¦heÜCuuêyjã?TYCô¨Ç Ÿíâñ$r0LŸN랎XJ ÚäuÐë ³’nžFÖ 'ÉâÅ”šê02BnކJÕq9·»¥Û¬üyN'ŠŠÁdã݃®N­êt¢Š'ñØí™+pžjÆ)4ݰáH¦$eñzë¨á0Eç<4žÂ™ˆt ·²’îçÀçÌž-˜,CÒé`büDŠÓ)ÈO¸']âœ5kð~áèˆSž³f̸¥ªÑf"\†áÚqa!­›zÌkrtèp1Ÿ>=³ô8³ òåïâÏæÑ¹ì\ff4;œÁ à.WêÉÄcY­°Óáp†{þCtÖ)ét†ÃAgsÁÊZ‡H’hŋſâSŸJý ¹¤ÅkÁç?]„ÎdM™gCÊI¢’C^ž8 é²ÉsîG{AW³2 wx,aÕèøá²šE-§Þ¢QaD**D4À k¢@ ¬øL&R0==‰÷©p?0£8Õýú©"tvŽ<QGD¨îÔÜ,È8Τ”•ežÕhÔ‰ ì €)/oâÊ#É?™‰G–•¥~ÎÌÒ Ž Ü6V'ŠkÛà"à½Ü²¥Þ“#¹>ŸOœQVŠŒ_áÖ8þ]ò×L3 :e?|¾ÄkËW ÑJh5Ÿ[öFúü¹#AêìZ­”Ê ka:]É©æ¾>ʆ¥;GVkâÄ8«uè~µAŸ \çj&_/s“¤³9ÌÕ?ÖÆ¬AW“L –FC©ßä;]-$9Šc¢‡¡¢½ž”,§˜½^1ô€?‘›˜'tq͹¥Gb˜ìvÑ[Ëhwû1q*e_XH÷évÓ{x>6÷Óži¯zúôáê(cÑ¢'H áºöD ã3˜¸‡…É{Ò]{i©˜q¦Òxê싚Ð%†ñØÛÅÅâ¼°"UtõLí¶¶áÙ¸úû#FŽÊÉŽi¦:§T™‡Á£©ZÓ2ɪ õÃÝØí䌎wçŒ,SÚ½µ•ÎuuõÐ÷ ž£žnX‹ZW„ÃC3òM­kÖcÉ’á‚êöOfhLuOœÑˆFǧÞ&„õ'ã8 Lž´¦ÆX •}ÉôqHñ"3Øk8¥oµŠ©6·4¦N ²Ác':ͤ&öPGì#9<Üî÷‹T°NG×ït¦?ÜìÄ0Z¸½êÀ6Û™7èœIš“=lv£¶èíE4Ãé3qŒtW;IꑜC‚ùóÂüL9I.—ÈT©ûŸÇ³¬Â{Œ3C™›L¢”Å3ã9-œN‚A: ¼¦C xÊôœq)€ÓÍ£™¦ÑPF+';gÉ>ÉÉ!Tv&ÄJ99‰Ï!yrïN[óÚM «$nUärmº $y’gÖ O0§8§àxFñpºV+˜¼˜ .Ù s}žkJêï,,¤h5Ó‰pc‰øÔ2[ÞH½øü|ºæí¶XÈ §"ÎP;=܋̽ø}}‚³üãð¬U/‹á7¿ù î¹çžôï™=ðxÓéÐ}¦®QµaÊÞ™3‡OáœyeÏd%<îu¬NŽúŒòwÙít  ÒtF½¿Ÿzð½Þᙌ„#‚Ï1ìŒáÎNÒPãfGâdŒ·0Ú=“²S2 3ƒ~6NXêþ¸-JÄ_ µG†+Ñf úE¯'cŇ›YÑ2‰š9ÈÅü~ú ¤„x–°ú`ÌšEõÙ‰6èüùê”;£ÞG"L¯ÊŽ ·÷ 51k‹ü==b&õDõrgò¼ã²gÏüþ÷¿Ç¦M›Ò¿Þh¤ö’™3;×ÇÎï¡övJµŸþðY#5=虎LÙV£ÇËð0;Gè< Äá ³¥nÍÍ%ÿ£5ì|¤2¨“!’5I70ž;"Ô™“d³™Ã=Y3Ám¼é†y%?×d§&kÐ'@ÔôšÃ‘Ê$`¦›dF4ŸŒ5ÓÀF"©{—M&"Ö˜èMÌÆ›#?—+3Œ@*á´;GM™D!ùù¢Ÿë–ÉÓÃ>yòÉ'Q[[‹ÙÉ#,ã‰DÐÕÕE?}}è>“‡Ðé¤È|æLŠÌ'Šxh<„ûÿÙ G"b¯§Óæõ&ý°qãèŽQÔ6eÎR¥x{zÈÐjéuååé£tŽ35è<]Œß;Tæ*“¬ŠäìqÏzÍ- nu„š|ŽØÀ©5'ƒ˜ÍB2—ÈpŽ–ºcŠŠöŒ| ìczÐLkêÚžú©SŸj„yòF®¬œøÔ3ãÔéh2ÁÍh6UA°sgâ¦N¹0Ó—ZÁy½«Aojj³Ï>‹þçÆ®]»ÐÓÓƒ}ûöaÖ¬Yã×µoß><øàƒÄß  ¡¦¦æÌ\ ÛMÎÞEýј,Óya¥Ì#‚ÍæñMÿ3®…éo“)§ùMÌó§ÕF `!gªª€}ûR÷Ås:u$Æ“±áJQÉN'z·Õç”3“Á ƒqÉóçÕÏÒhœ=èê@I=/“R—?H—5èøp €ýûG¡ëõ´iM}ȸޜ. çy×}o ÔY¶Œm¡ašÑ¶ÃEú‡È ¤Êˆ| ¢( –/_ŽÍ›7£££íííxÿý÷QQQ1`ÐgÏžGydà=]]]xúé§ÏÌ–—Sw2¤Vy®xKKb/z2míxìcÆpdÎÑžùμ³fÑìwV¢L›«.qåç :ãä}ÌmT#1žn·Ð!£éAOv::ë“Lg0œ âv'ðdÎ 5»ßD·ïN„^5›Is´>\¶Uýºt Ç¬A‘$J“ïÞY-Dý¾¼<š-JBݦû¼¡˜…Æmµ‚)®ª*qJÜHÅf#åÍ3͹ýn8§Çá\…Öäc<¼ùùùøæ7¿ ¨¯¯Ç®]»ð™Ï|&)HÒÁ£RÊò™t@&À µA÷xˆV˜©/¹Ä2žÏ˜[?››¥j|¶ýÀäÚ=g“˜[]«%tûâʼnE§#‚”;GÔÑèȳ N'/žÐ7VcØÒ’¨;&› €q,¬[Ù)ã» &“AgR¥ÆFÑc?œAç™éŒ³˜‚ræv.³k´¾¬&½H–pxèA gÒ@Ȳh+-²^§#† z2MæPkÄ©PY>«F$–””àÅ_DVÆh|˜ß›Á’ÉøÆÃéfïE5o:·›òÙÕé(ÓÁ]'Íà>~&â*É}¤(u>WÉSòF#©Úê#0iÂ1­prØùKn)Ôhij›L]’h߇ÃÂP—9árÉhgd úÄl€±‘xÀCÍÖ-ýãDxÊ<±j¬íDyybHC¦QH^ž ဳ&À”ažLí2g£8"}j±dN¯;šïQiÄ÷†Bôjg|Æ á|¦ëÑw¹(õÎà-E¡ýͬˆ#~ýx°µñ½F"tý~¿H¹O&ƒžŸŸ8ÑR]GgÆÉÉDûª&—a|Çp š‚{2á&¥A×é¨=)ÓtN¦‹Ò‡jëú8 zòБŠÏ'î5Óö>GDo<¤ +ŸaP™ºŽ8N’:BçÖ5ŠñX`µQÈÏ'Úߟ~ò¢$Q)ª¯PðÜZétŽœ_]#kg“0yIN͸/,œ\Ql^^"¯zf=ƒ‡GB±{¶9²±=óLPúj)¶šb¢=£›¯¬ 8qbd]«¥ƒìØàÈÓl>;€MœÎbF¯±\sgƒ™+mî"à”hÖ ò :·îhµd' «#l53^OF#ÙÁ4›)2¯¯'g=”–Ši|99ä´2âHD£¡=>m™L;l6SPàpˆÔîdn7TQŽ`V?®'O&÷ä²V›Ù3·Z a6Ó ¡¬AŸ@ÉË£ÔÖHR?²Là°Ý»‰ @i$·ûì@¤Z­‰½žc1¨F#­S[[æJËbI¬£gSÜŸ°SªmVÜ›;Ϙ築uHŽÎm²Qà±²Fãеg› ¸ôÒñ9«¹¹ã“•Óë Ä7ÙÅálÀ-Bð«ëæ“ÑÉçi“(eâl±.ž¢:ðÌÌæ¡=ùtRQAƒ1:;Ez©·— ŸVûñ¯"÷³‡?–Í$ËÑäåì=ÌÐUX8¥‰>±ÂÑ Oà›ˆ¡ºFʵzÁ IDATÏ犣¾äž¥ €RÕÃ]Ïx9Þ99ô“‘µ`ÞsµQ …ÄšÜt¶cqd¹u-Óì ŸVwdd ú+¦ÑÌ•++èßÝÝ´aGbô&Ú“Ô邬õ½üü‘·žy½À‚À¹çN>ðKV2‹Ä˜ p¢ê¡:)ÄPH(OŽúÒõ[,©©—'J¼ÞñûIŸ/‘oƒy÷¹em2t‡ƒ0™2#²A)iQÖ ŸaÑéˆÝkíZ1 ølÄñµ "E4ÖÙå9`ÈëÓ±²ý“'.Zæ1Ÿ¨hG‹2¹ ÿ™.Bbc¦$7wrµ–M´Hj`wŒ„ý¬´NñÙ½½™÷Ñ«_7ïy¬>ФۼÀºuÀž=g§Î@´@@ÐŽ5âOÅO?œgj6ON4kV†F ó´‰txŒ/3׿©dñ!©ùä. f¼‹Å&oú™§Iö÷gþÜ9 âý›Ð'˜L4ël©37´šx<¼Ó‘ˆÑHN@6Bÿd ÷‡ÃcgIÎq`ãÀía‘ÈÈÛM³rf=fdQsóOf'ˆÙLïгdHUÖ OFa2œñqTn0—vV>9ÂóÀÙ¸N”0øŽÇ´b$oÖQ<{÷†ÙœhÐy¿Lvƒn³¬dÀå5[Þmö4ŒãÆ >>.hI:ëH1š››qêÔ)ȲŒ3fÀ”í½ð ‘¤Çâ8p´£ÑPËZ2©LV΢°,Îm¯î»ægÈ<î“UÌfÒ­#1èKú±½Yƒž•Œ7s&\ižœœDÈQvïÞ‡~ÅÅÅ$ ×_=*++³ûd´ÂŠª½}bËÌ“®èÑÓ“E–ŸíârÑ`d™¬¤2êýèóe¾ç%‰€S§²=+c‹…R“'(Íã9kRîßýîwñÿðXÁ­†Y»0Ði"Ñ»²L{¨·7±íg2…© ^/…“e²Ò¾ª tnîȲRv;Ýw¶=+£«uâë›™(ã³ ß4 aÇŽxüñÇqÓM7áÚk¯Åñãǽ¦µµ---hiiAÛ¤i±8)O$z—ǵò$2f§Ëô³?BO5ï"›üÏ.'gd{~ ïÕl„>^b4fiW‚‚ÚÚÚpÝu×ᢋ.Âo~ó<ú裸ÿþûæž8p>ø bq% …PSS“ÝGÃ)í‰îbàV¡`PÐÍfçLŽ€‚ÑÝêý1Ùkè<d$$1¼o³=+£_I-)Ü)Hf,&“ EEE˜6m¬V+***°uëVÄb±ƒ^YY‰_üâïéììÄO<‘ÝGC‰ÃqfhO].˜fªÙ,ðÙ~èº[müdyò뤑22d J6å>^Â,[“‘bqÜj 7Þx#~ýë_ãí·ßÆ“O>‰Õ«WC«ªiiµZØl¶k–'3¥}&hVy¨·¯e[!Ï~ÑëÉáã¹ók4S`e<Ø:³}Р׳©IÀwÞ‰óÏ?o¿ý6n¹å\{íµÙE«Øl@QÑ™ù†¢óX,Ë>89¼h (Ô½è\.™j}<æiLÖ[Ïž„qŒÐ]®)9 •èt:\yå•Ù…ï=v&"N•L43]VÆO’ :)™j'_ööf#ô¬Œ!BŸ1#»YùdˆÃA)Û‰æŽÏÊøI2Ò=Í|ìè'Í s×QÖ geL*+Yù¤ô‰ך•ñ‹%±÷šSáO–iÿªGÊf zV²’•)+¬d9ÛŠ9Y„Ûf9Jgƒ>ÕD’È OÁÖµ¬AÏJV²2X\.Šp´ÚlçÆd‘TH÷©êŒ9Sr:`Ö g%+Y,LÎÁײrö‹FC™•@€þ=’±£ŸÄý;ÊYƒž•¬de°˜Íá˜LS’{ÒŠÇ#À`ŸÚ×±ìß©†î ½õÖ[áÈ¢X'TúúúðíoùùùÙÅÈÊ䓉"ó,‡ûä5Ò}²Ó¾ŽÕ OÁÌ’ÖápàᇞTÝÛÛ‹o}ë[ˆ•ÌívcíÚµ˜7o^Âk^|ñEìÚµ ÕÕÕX½z5œN'EÁ;#mÛ¶¡©© ÿøÿˆ¢ $ìøÅ/~Þ)Ø™•I, ±ÒeýÉ%v;eV˜Ó}ªRQkµS²;cR¦ÜûûûñðÃcùòåX¹r%t:Ö¯_;v YÜ_|1þú׿bÞ¼y˜3g¶mÛ†;î¸ yæ™gpäÈlܸÍ©æg%+S]òòˆ¬$+“GôzQ7×j§.Ñ•$!ÒkÙ›Ôű5kÖÀh4âœsÎÁ‹/¾ˆÃ‡£¦¦ßþö·±|ùr|ï{߃>^G¹êª«ÐÕÕ€XÌ~øÃ¢££[·nÍ* ¾¾>lß¾]]](--ÍNR›ŒâñdyÜ'›h4dÈúúȘOeƒîre údEQð£ýuuuP+V¬ÀÉ“'QWW‡/ùËƼ¥¥‘H²,LüÒëõ¦á”ïÿûðûý˜5küqÜ{ï½X²dIva&“ø|Y@Üd4èÐÜLé÷©úü$ (.žr,yÃ?í`¸í¶3wEðøã½´°°º¸zâÄ Ô××Ãd2A–å„é]_ûÚ×ÐÐÐY–ñ§?ý ¶lÔ1áòÁàá‡Fee%Z[[±}ûö¬AŸl’e>œœ†Ìç¶nÍ:dyySî–‡Ú‘ðÔSg֌ º$I¸é¦›`4¡( º»»ñóŸÿ÷ß?¢Ñ(Z[[^ûä“Obÿþý¸æškU/ÈÊ„Ém·Ý†ï~÷»ðù|hllÄÏ~ö³ì¢LÆh/+“O< ĸõ0+Yƒ> Ë™Z3Š4x$Agg'4 rss±fÍüìg?âE‹àÏV±)Høqˆ¢(xî¹ç°råJÔÖÖâÑGÅßþö7\wÝu¯©««ÃSO=EQ@ ;=+YáÁ:S‘Ç=kÐ3³°UQÜ}÷Ýe­­­¨¯¯ÇC=N‡¯}íkøÁ~€›o¾Ó¦Mƒ^¯ÇÉ“'±téR˜â}™?þñ±eËÔÕÕá¾ûîCee%¾þõ¯ÃãñdwÅ% ¾¾>ø òóóqÅWàÅ_ÄÕW_ M<ês¹\X¾|ù€AïííÅîÝ»³‹—•¬ŒUL&3f9²}2ˆÓéÄK/½EQ I ¦M›†’’€ÏçÃøC:tMMMe999¨¨¨€!Þ—¹bÅ Ì™3ŸÿüçãgÀKöŒ‹F”——cÆ ¨¬¬ÄƱ~ýúc_|ñÀ¿;::²=+Y‘e 77kг}rˆ^¯ÇêÕ«‡}Muu5ª««Sþ~áÂ…Ù§?A"Iyä¼õÖ[èèèÀí·ßŽeË–e&+Y9SRX˜{›5èYÉÊøˆËåÂW\‘]ˆ¬dåãÜܬAŸ‚2)!---ðù|¸å–[Ðß߀jê=ôrssñì³Ï~õ«_á¶ÛnCH=N0.ÄW¿úU\tÑEXµj®¼òJ<ñÄ…B8x𠮸â Ì™3kÖ¬¨óÀ±cÇpë­·¢¶¶óçÏÏRºf%+Y9ûÄçËô¬AŸ¢( êêêP__ðûýxöÙgáv» x @OOO‚A€ãÇãK_úìv;{ì1<ù䓸Îw¾ƒp8Œ@ ›Í†;î¸_þò—á÷ûÞk±XpË-·à@ggç ÏÎJV²’•]œÎ©Ëã>…eÒ¦Ü5 Ö®]‹çž{•••غu+òòòˆf†’7B¯×ã®»î ™)((Àܹs¡( ìv;òóó ±Éy<\xá…hhhÈd%+g«‚Ì®A6BO-Ñè™ýÉT.»ì2¼÷Þ{hjjÂï~÷;\wÝu(ö¡dÛ¶m˜;wnJƸ,lV²’•¬dåiÐûúˆ=ðLý8™_|UUþ÷ÿ;vìÀe—]–}¢YÉJV²’•))æܵZàÚkÏÜt&ý5×\ƒ¯|å+¸ùæ›aÌðÍ‹/Æ /¼€îîÿÏÞ›Éu–çâÏÙz›éYµË#kµdûJްM •`~à„ä—à%„r±II%)°SáH T’Ê .0 †\È¥—Ć2—ŘJlblŒdm–d­#iö¥÷ýôÙ×ïþqt>MOwÏŒ¤i4ú•ª¤™î™>ßùÎ÷nÏû¼utuuѯ‡õp¥30000¬8ƒÏ>»|/àmo{>÷¹ÏáÞ{ïmù}UU166F'¯%“I¼ç=ïÁóÏ?ø‡À£>ŠD"b±ˆƒâÑGEGG&&&ÍfaÆÆÆÐÕÕ…Õ«WÃu]d³YLNNÂu]ŒcÕªUذaÛM Ë× /Gð<µk×TãÞ;#…Ð××Gå];::044„}èC4êþµ_û5|ò“ŸÄW¾ò|õ«_Åc=èììÄC=„x<EQðè£Â0 ȲŒG}=ôþüÏÿ•JŸøÄ'022AðGôG¸ûî»ñÔSO±ÝÄÀÀÀÀpÝÀ=öØcä _ø[‰%Ä?ÿó?ã—ù—±cǶmP­VñÔSOáÓŸþ4[ †›%BgX^†øµ×^C*•»ßýnlܸ@ÀG8räΜ9ƒíÛ·ã¾ûîc‹ÅÀÀÀ°”½\.ãñÇg+±„¨×ëx衇V䵌ŒàÀx饗°sçNjÐÿë¿þ O?ý4|ðA|ýë_‡,ËxàØf````X*ƒþÍo~“­ÃãÞ{ïŽ÷Þ‹L&ÓðõoûÛxä‘Gpÿý÷cÛ¶mø»¿û;¼ë]ïZNÃåƒgKÀ°H§ÓìܹSSS°,‹~ŸÏóþ20000\E„Ζ€a©έŸÙßîÜ9üÓ?ýíý·m[·ne‹ÅÀÀÀÀ :ÃrÂöíÛ144„;wâĉرcGCºýÖ[oÅc=Ö æÖߘAg¸ÆÈçóxúé§qöìY<û쳨T*xÏ{Þƒ~ðƒøâ¿ˆ‘‘>|ò'BÅ}€@#àöÛog ÈÀÀÀ°Hà›ÿÉpe ‘öêÕ«©jßÐЦ¦¦°~ýzÜyçl±˜Ag``````˜ ŒåÎÀÀÀÀÀÀ :3è Ì 30000000ƒÎÀÀÀÀÀÀ :3è Ì 30000000ƒÎÀÀÀÀÀÀ :3è Ì 3¬Çëºxæ™gðž÷¼/¿ü2[$†yÀ†³0, ŒŽŽâw~çw°ÿ~Äb1ø¾—^z ›6m®]»Ø1000°a9Ó4›þÝßßZ­Ïó…B–e1cÎÀÀÀÀ :ÃrÄøø8üqÀôô4>ö±Áu]ˆ¢ˆh4 ]×áº.öíÛ‡·¿ýílÁ‘-õÄðð0Ö­[8~ü8n¹åˆ¢Q±qãFLNNbbbÛ¶mC2™d ÆÀÀÀÀ"t†åˆcÇŽáî»ï¦ÿÞ»w/Ð7n܈'N •Ja÷îÝl±˜AgXŽp]ƒƒƒØ¸q#lÛÆ™3gÇ1== A°qãFüçþ'î¹çH’ÄŒá2ÀRî × ÓÓÓ˜ššÂ+¯¼‚ÑÑQlÛ¶ .\Àm·ÝŽãpë­·b×®]¸å–[Øb1000\&XÛÃ5ÃüÇàØ±cøÔ§>Ńa‘ÁRî × ƒƒƒxó›ßÌ‚Eè 722™ zzzH$Øb00000ƒÎÀÀÀÀÀÀ0,åÎÀÀÀÀÀ°ÀXî W…B¡€ ŸÏãÀúõëÄÑ£G¯‘çñÁ~lÁ˜AgXŽ8wîŽ?Ž^x{öì¡ýG?úxžÇý÷ߎãX_93è Ë÷Ýwî»ï> 5}¯££½½½X¿~=¢Ñ([,fÐn4ìÚµ çÏŸÇ7¿ùM ãK_úè÷EÁøø8BN&ÇqØ´izzzØâ10000ƒÎ°Ô8räžþy$“IüÞïýÖ¬YÓòu<ò€`Dê—¾ô%|ãßh”I¥Rø—ùjÐ-˦M›ðéOš-23è KÛn» øÀ Š"º»»ôAàû~SÿÅ/~‘þ¿Z­âË_þ2[`fЮzzzÒâøÎw¾ƒóçÏãé§ŸF©T»ßýn<ñÄt¾ùÁƒñ¹Ï}®áçpŽãèÿyžuP20000ƒÎpÝL&±gÏìÙ³è¬ów¿ûÝÈd2ày<ò¸ÂÀp“ã;ßùöíÛAn˜Ïìº.FFF¾Æó<¶mÛÏó055×u¾·yófD"€®ë(‹0M’$¡··½½½ôõ¦i"“ÉÀ÷}¬Y³]]]ô÷–J%(ŠŽã¾×…Bt†«C?Þõ®w5}ýöÛoÇí·ßΈ066†O~ò“Ôé¿0==[o½¿ù›¿I¿–H$ð·û·Èçóøõ_ÿulÞ¼™–;;;ññ˜˜˜ÀÇ>ö1”Ëeôöö¶mär9üáþ!ÞúÖ·BUUüÍßü ªÕ*¢Ñ(TUÅ_ÿõ_cÓ¦MøñŒ¿ÿû¿G2™„aH§ÓøÌg>Ó@,žÇœt†và8Ï>ûlSY0ŸÏ£¯¯O>ù$vïÞÝð½jµŠ÷¾÷½øíßþm|ô£¥ûøø8êõ:à…^ÀË/¿Œýû÷C’$|øÃÆ?þã?âÉ'ŸÄwÞ‰çž{ÝÝÝpüÇŒ'Ÿ|O>ùdC©r6˜Ag`````hBN:E i$¡ÙGÇq044DI¿±X [·nÅk¯½†b±ˆÇ{¬ATkË–-ôß/¾ø"~ã7~±X ððÃãcû!ظq#}ÏóH&“XÈØfЖ¾rô+øßÇÿ÷5ù]]Ñ.¼òÁWôÚÏ~ö³ôß}}}´#GQ|ík_£Dá 6à“Ÿü$FGG±uëVˆb`b'''ñÕ¯~pï½÷âá‡F>ŸÇ›Þô&ús{zz`LÓD<§ÎÄáÇñãÿÿþïÿ>gtÎ :òᨕkò»|â/èuÇáé§ŸnÙ‰Ó×ׇ'žx¢)åÞÑÑUUéÿ“É$~þç?øÁð /àá‡F4…eYô5!¹.t!8rä>ñ‰Oà3Ÿù ~îç~ŽEè 7Ëãxü-ßð×ñ–·¼ñ‰‰ lÙ²}}}xðÁ1<MßsáÂlÙ²…¦è=Š?û³?Ãc=†÷¾÷½ ú½Ì 300000´!¤énAhDnYNœ8EQh4¿{÷nìÚµ ù—‰‡~ùÈG°mÛ6躎}ûöaç΀÷¿ÿýxðÁño|ÝÝÝøÊW¾‚üãÔ˜¿ÿýïÇ>ðlܸ@__n»í¶95;˜Ag`````hD"ßú­ß¿þë¿Ò¯Åb1|üãG2™Ä[ßúV¼òÊ+xõÕWé÷ÿê¯þ ›7oÆŸþéŸâî»ïÆ‹/¾ˆ#GŽ ™Lâw÷wñ«¿ú«€;và[ßúþíßþ ®ëâÓŸþ4m.‹¸÷Þ{155…¯ýë€»îº [·n¥ŒùVàÈB¨s KŒjµŠ§žzŠi¹30¬P|ö³ŸÅž={ÐßßÏc ð…/|Eè Kx'Ož„,Ël1–>ø 3è K¦¹ô`1˜Ag```````aEÁ'>L×d ÁÀÀÀÀ :à ۳‘Q2l!˜Ag¸‘a¹.”.°…`````áFFݪc¸< ÝÑÙb00000ƒÎp£¢bTP5«(ëe¶ 7V¶Æ–ë»ì&3ƒÎÀ°pƒ.ò"Òõ4[ †º­¯èìRJN-xÂØJ€lÊðˆwSía&,ÃpU˜˜˜ÀøCLNMbýÿ·=«{0]ŸÆ^{/žûÁs8qâî½÷^<ôÐCóÎòe`¸Þ)Á¦îM+îÚ|âãdá$úýHF“+þ^LʓصjA`úµ\x†…B‰DÇŽÃÄôR­€ùÚ¿`ÿþýxßûÞ‡ïÿûøÞ÷¾Ç‹aY#«dQÒK+òÚ ÇÀ…âLÔ&nŠ{éùÆ*c¸ÙF•\wƒ^ÖË7UÈpŒ•Ö{ó›ßŒßÿýßÇ굫áÇȋ°\ ß{î{øƒ?øìÙ³ýèGñÝï~¶m3«Á°l1)O¢ Väµ)¶—¸8W<Û[ùÏaÕ¨"£dnº€ñºt‚‰ÚK¹)Û'>ÎΠbTnèë „4y¾>ñ"àÀçxÔ•::;;Èçópç’íyPU•þÕ4Y†ëÑy5ªQ]‘†lʈ‹q´rjnEßËЮ܌Ý6×µ†îSµ)ˆœˆ»Öß+»ÆZ3k8”:„·o~;néºå†¼†}ûöáÙgŸEww7>üácýúõÇs〸‡Cx~@H1M‘H¤¡†>88ˆ'žx¾ž¶mc÷îÝ̲0\ŸÖR`{6 Ç€íÙˆ‰±u}£‚ˆÏñ8W<‡î{Þºž‹Ñê(Dþ棈]_ƒîû(%Xž…;Ö܈Yñѹfk(hòºçž{°sçNð<žžúuÇs  !& õKÅömÛqøðaÜyçˆÅ.’;wîÄç?ÿùKÎN­†oûÛ̲0\”õ28ŽƒåY°\kYtxà9~Áç‡O|”ôbb <Çc¼:ÅRÐíZ‘÷Rs4äÕ<$^býZÂñè¶ÍÖP5ªXÛ¹vÅ.tI/álá,V'V£¨áwã±/ãñ8âñ8ýÿÙ³gñä“OâÔ§«æ°÷m{ñŽßzÞñþwàŸþùŸð½ï}ù|_þò—Áó—*<‘HkÖ¬¡ÿ—¤›ïỌœG<¬N¬^Ñ éz1!Çs`¸ºÑ½|ï‹VFo¢wÁ‹‚šYƒÈ‹8ª¯b¨4„{6Þ³"ïgºžÊ&7aSÍu5読Â'‘j¬:¶b ºO|œÌ!’ A¶äÖ ÏÆ¶mÛð?>ù?°õÁ­ˆKqıØ6€>û6wlF2™lˆæn ÏÇXu {×íÅîµ»—â+Ó ‚¬šELŠÁ±¨¶º¬?ïXu »#»!EfÐ}âC±tFNKBJàtá4önØ»"ΠÙ×:Y›DLˆÝTdëוW3kà8‘ŒUÇV줮¢VÄHe )tG‡í® ¦i,Cߺ>$×$±zÃj${‚W‘aH˜1¿aº&¦ä)Bp$}?ú&k“+RmÌõ]”ôN€À ¨™µeýYG*#М…“H-7(#„)úAÕ¨"«dWܽÔl Y%pÎnF\Wƒ^5ª8Q!вQ^‘= „Ë!"/‚ã8Å쯙µ&N@LŒ!¯æay³Ž7 Zš­¡3Ò‰îh7ÊzÏ_xGRGVœQW-50x‘—µAWmi%ªQ]ð{êV=x>/–M8ŽCBJàdîäŠSR+é%hŽ‘»95Ó®›A‰Q1 8#å‘•ëE •‡Ðé _ãÀ¡jVWÎ5jEDøFBcDˆ@6e¨– †c•1Jrä8‘N$£I¼‘{cŵ™ôÀÏ%u³¾| –V‚åZ(jÅ¿G¶ä&DG¤#•‘÷|NÖ&!ðÂMûÜ^7ƒîx*F1!HÄÅøŠK»»¾‹Ã©Ãˆ цZ•ÄK+*‘×ò-;|â_ÖÁð<à#•D…hÃ×N€ë»-yÅ\+!™z†žC/í2T# ȨªÆ¸Ð躬—›t8B0V[1÷ÒölLÕ§è½dýZtßæhÔ›Š¨¶Š¬ºrê:£‚±Ê:¤Ž†¯ÇÄJz‰öi¯„ë乿­$ ÒÊ1¨…Mˆk\ ÅVZöñмˆ¼š_1×êø²j )\'ÂpeXøÄGNÉ¡+Ú…šYƒåÎ_Îòˆ‡²QnÙ†£(ê+Çá®UÔÍ:Í,1ƒ~ aºfÓ†Œˆ •†V†ç‚ñê88žk2vQ!ŠšYƒã;+Â+Vmµ¡%mf&"¯æ—=ÛÔ#ƪcp<7;Ækãy±µ“ÆK+JÕr-ȦLàxβTs=e½Œ¨…îí¾ ylÊ-3haYl¥p"¦åéÀ¨q7ïÑëvåu«¹N¢+æ`µ]#•‘¦èj’š£­MåºU‡ë»-¢ˆAͬ-è๞0#•‘–{r¥­…Fœžïa¸‡¡î·OüËb‘_+¨¶ Ó3Áƒ‡Oü‘÷ÂLhË瓲¢+!°‚v¾•¦Ü]«’ IDATðwÝ úåÖœ*F¥©Râ%ŽT=uÃ/lŨ¤¿YuÈ™žór7t ½ÎLä¿ÁÛç9¶o£l,ïtvݪc¢6±b'm¥ê)œÈXVm­ÐV6Sâ%¨¶º¬‰q„;0y5OË~–kÁò,œÙ\~<Âq$AB^›¿ô¶¬µÇq0\cEPš­!¯ÝœêpKbЫfõ²6FÕ¬¶ô“Ñ$ÎÎÞðÀXulNÑžçoü!- È«yÚ©à%£Ô0áHäÄËj±¹È)9œ@Sv—c8n„zòxu§bª65ïk'k“ÔAk¹o9ñ–u—FNÍa¼:¾àý:/–d2$QZvœŠPü& NXáT¶dz/[Ms…åZ¨šU‰¼ÝÑçÝ{5³F³*95‡ªYmÌ ñâ²î»÷Ý|ßÏ*٦ʓ~½â(  0VƒbÏx‡m!-Ó#\ðónäY¶cµ±–Ó|â£l”¡;:"Bä²ËË ¶g7ð,×¢<”¶ ´å Ù’¡Ùbb0˜c¡õ~˵p¶pŽï,ë’B^ÍÃ÷ƒ¹ݱnÍE¦Þ:“–U²p}·ißhކ y"ƒY–íNžïápú0:¤èŽÞ)j½†„0Ÿøp|ŽïPíóåäl×­:lϦ÷†çxxž7g–8¼Çs‚û¦žGžãtf/Öý¹’5M×Ósž“žïµäd…³B˜A¿L„ž¢ã9 ª]i¶Ö–YÉÇqË’”2­Ð²ÇÚõ]Œ”GZ¦Û-Ï‚é˜Ðl ’ A³µyå Ù”áû>©0\"'BäņZúrd ‡'ß…D£vÆn6F*#¨™5$#É—š®f–~N@2’ÄËã/7â„&1jÈk˜¨MÀ÷}øÄ!tñ\éûëT=…ñê8:¤ÚN9²j–Fç¶gƒŸ×hyÖ²º¾¢Vlr´DanM˳P7눘® žã!ò"2J†–‰xîÚ•þRõÔeϰð|¦ÌùÃst¦Yvûó†1è%-`wD:0Tš—dj¸‡ ßʨ/纫j«xyüe¼0üB1¥¨![rËrBݪCà˜ž BHÐïj߸™ˆ™‚2.qa{6^@Dˆ nÕa¹xއnë˶´0]Ÿ¦¯#Ò)yj^þ†O|¼‘{R¢btÙtŸøÈ(™ÆzLŒ¡nÕqpú Rõ†ËÃ8™;‰ƒ©ƒ˜’§&ªU*È’x88~í-§îÓ5ñzæutD:ÀqAP0_æd&!.4áõ`Ù”Š!-Ü!ßh®,’áxºpD^ j´‚ùu«~M"Ù¬’ dv/ç=jçKçç¼Î²Qn"r†å!fÐ/w³PO7&ÆPÔŠó¦ãÊF™Ö‚ÊzY5 ÍÑhÝ<"D®œ€\VÝÔó=œÈ@A+Àr-üdì' šáò0$^jÒNö|/à JŒ £Ü3%%]ßm8xŽGÕ¬‚ã8¸¾»,{î ²J–ê/¡¨çåo¤ëé@¿^ˆ€çøeÛ—­X «Yñ­+Ú…sÅsxîüsøñè±j?ŽgÓÆ.:Ú>‚>çˆix?Ïó°\kÙã&k“H×ÓTñMâ¥9Ï!Û³Q1*—êçŽN‡'Yžp¸f©èù`û6Jz ±1Hx¡©«d&tG§™PÓ1齕 u3àVH¼ÝÑ—œéNÁ¤<¹ N‹®ïâtþ4R%Óö+ªÅ¦=n¸ÆŠÐù¸æÝõ\äÔâRU´ù†¬ÔÌxð „@¶dÈ–Œ)y cµ1äµ<*zåš°‡ jJ.+…y* ]‘.tE»PÔ‹øÙÄÏ 9|âc¸2Ürn´áp|‡F´¦kB$”Œ³÷99¨L×lðCv»ã5Ék•þ*h…* Ç€lÊ”ËÁqTGSÀ#ÞȾ„˜R˜œÃ1–¥(MVÍ‚€4µ‡ œ€¾xº¢]èŽv£;ÚžhOƒ˜ íÉžÅsáÀÁöltJH×ÓË¢EwtœÈ@\Œ7Ô˜çŠÐëV=0₤g]'€ç.9,Ë¥­T·uÔ­zSÖçx(–ËimŒ[H`LmßFøxràcÈ)98¾ÛµazK+uK@PÒK˜¨M,˜7$›2F+£XXœški =ßCNË!.Æ›®}9êñ/{ƒnz&ÊF™J ÆÄF«£mð¨Áó<|ø°=!‚˜ƒÀ ¨Uõ m½Ô F¶gã§?ʼn܉9Š¥ààôAœ@=žh&k“Ø7±y5ªQm9º¯nש‡Ìs< ÇêWFmI¢¥:”lϦ\hÐgÊ¿†é˰öu-ˆq>ñq4sÃåá½¾¤—àú.½/8ðàçŒìjF £ÕQ †™˜å6„&ì< [ gc®^s ¶Ò‰#؈AQ+.‹–½ÑÊ(òj¾Á‘»HÚ9wE­BD²½Àà…×£¨è•e‘y©™58žÓ”õ8>ñÛ¶ØUŒ D^ ˆ~¹.3ï#AÝ”Mgi z¨VX1* : †ÊCð‰O™ø­ÞgyÊF¹¡£È#T[½){Ò¯Ú ×Í:mW. Y™”'ÛzÓ†cPæ¥O.m4Žãƒ”´nëKÎ, Òôé|šœ!›2=ÌÃÏÜëÁ…ò<áyÄÄXsºéöpƒI¼È1‚GÙ(/™'éxMZcc8tW§÷nv„ª5³Û³¯‰A7“µI¼4öÒ¼÷“€ UOQXxpK¼„t=Ý2é'ó'›J*q)ŽT=u]"‚ ¥ -î\ßÅ´<ݶm¾µ©›õ–jq–9†„”hʮѶÇzZ¾Ä°<  F×w©Cp- ºã9©Œ4{y-ßÖ8 ¼Ð–W5ªx¡mêYäEØ® ²äå…0°ðˆ·  ÕR1XD2š ž=´žÜh8t[o¸÷ŽïÐ+3ès¤8g{òq1޳…³mÓ@¡ö·åYMÆÏ÷`zæ’N<ª¼žy=±ðÉÚdûî"x¨Ì5Ÿ½QxŽGO´5«†®hWÓû5;HLJëÄsÜ¿³í 3è ôäsj®É“ Q¤ê©–‡øÌYú£·–GåÖôR1Ý}âãhú(M÷wF:1\n›â× ‡S‡“bm5®^ÀºŽu-œšUkzŸGñaºfËêû><ß[2xªžÂùòyJ’ Y%Û’ >l£ÒD¼hõ€Ì†ç{Ðl­9zE@¾! K½†me=ÑìŸÚÕZ<Ç¡l”†Z4E@ÃY<÷¹ç0rxC‡01>±ä)é° ‰‡îh7öMíkKŒªYÁ<é0’«™5jÄmßn:à2J§ò§Ð)u685«pÁ!t-;\ßÅ‰Ü tF:—âØ?µŸ’>ñRÊ—ëì*–ÒҜʟÂXuŒf•¶©¥HK{ÄÃDm=ñ •†šRïžïáhæ(|ßo94 , j¡¥3r'Âö&‘AÀFÐó½kR*ªUü×è¡+Ú…¨EW´ %ƒŸŒýçKç¡Új[ƒÎqªÝlgRwtXžE³í œïûKz…{5ÌäJ‚„šY›ó÷eÕ, Z¡aÿF…(ªFµAÓ‚Ò4HÈó=z?™A¿Ü§¥¢nµ(ßí±ì±&YÁ‚V@DŒÀ#M;Ï6 çJç ;ú’®ïâ§ã?E\ˆCà8¾C…Rró”7˵p:ºí8Éy×ÈQòÍìÒÇÁp‚·TiËŠ¨'…¼†ãÙã‹bT=ßkhYÓ½e¯ocÞö·áí¾½Û{—´öêÚ^PŒX®…ƒÓ[F9%GÕüB]€°Ž(rbƒ´©éšxuâUpàöºá¨å\KbÜxmœÊ ÇÄ ZƒÅAB`¹VC ×eeu.F¥³#^Ù’±oj_àĘ3—â(é¥%©£—´êV11†¸Ç+ã¯4­œšÃÙÂYZc½|â·m]Ë(Ê÷|–W2ju«N™îK¹†{ëåñ—á—F<Ç#M¢fÖp$}žïµ-pÚBgŸ•ª£Âó½¦ ˆ­–0sºTp|'Ð¥ð,ªÆ7WfçTþ$^j¸æ°D;S`Æò‚ìÅLÃoyVËýË ú#Àv‹'ò"ÏÁ³gŸÅpy˜Ö¢jf '4õ-SÏÒÖñ³ÉŸÁöìE'ŒBp2w2ØÉBu«ŽºUGTˆb¤2Òô™Rr µpEÑ!Ë|vÿh¸>¡.öRLì" (è—¼×ÞX/NåO-ÊhÚP°á>»5*"À1|ÿ~ÏüÕ3=;Ú°¶Žã T*Ñ¿•ÊÕ±ñ5G£©àÐÀtG»1ZÅéüé†C-Œ`CVtèX…ut‰—‚–¯‹Û¡éC¨tD:šŒœë=ö11†´’¾&Ä8Ï÷pxú0º"]”­ÞïÇkS¯Ñèg®´cÈk˜½× ‚6ÒÙÑO|¼:ñ*mí*ëeý©¶ºèQ,Áhu4 ^l±’M'²'hfïPêbR¬¥¡³< ª­‚㸦y žïaRžDG´ƒ¾6Ä´<ÑÊ襯sK+.ã‘€h›®§Ñéj2ÔÉH’ŠúÌhÇíÙ0]%­DK ÉÊ®±dGà ¤¾UK…nëˆ QLÔ&Zg+ÌjÛ¹æߨä¨Ùt[oدíf¿ß,¸ª¼DN͵LÍÍŒÒ ×ÀGŒ=êì]¿u«Ž®HWKV4Á©Â)È– ÅR¨W·XCë«f‡S‡Ñë ÈwÇ@ú¾õë‘Ss¨[uôÄzh4?X¼â)>º0úg¶Ó´úâ}y‘z“K1ÙÉvmT*ýì<Ç#"Dp`úî|¸mšræCÞîÁÐ –kÑ©\¶gÃ3=d‡²ð\k·¬Åºmëðð_< Nà0y~?øÊð‘ßø"Éà÷ž?O<ñ|?0*¶mc÷îÝW|½²)Ãp hŽ‘i·Ag¤¦  °wý^ô'úa»6òZž–PÂÒíÙÔ8—õ2 ×@Y/ãÜèõ6ì×°C6uo¬µ°¨ûu®”d^ËcMbMƒƒèú.Žgû·M€bz&Jz Š¥ CêÀºÎut/¸¾Ûà¨Q§VIádþ$îZ{ÒJ³× rßÚ¦úý‹v}¾ïc´‚[{nEA+ UO¡/Þ×òýŠ­@wttD:`¹4[£6×wQÒJtïÎìÐɨ¹lﺽA­–`Iuú‡JC8S8CÏ›VèŒtb>êI„àpú0ΗÎÃ%Á}¡’¯ž9g´ÊqAÛñ.ÁRL, î†k€€`mÇZd•lÓãod߀¡eÊ\â%dÔK½fÖH‹šÍ ú{Ñs±/CÄÅ8D^Ä‰Ü dÕlðE9Z¿l0¶†“ù“ôf…žÝb®ïâhú(ík fÛ³áú.UŒË*Yú€µ"RõÔ¥Û ×@ºžn8 ÎÎ`kïVlîÙ åÚ‹ßËk¸4[k`d'ÄòjçŠçp׺»æŒ³j·tÝÒòû3Ó^ŽïC\µ¬Âµ]ô­ïƒ¸J„(¢k¶­Á¾Ò>8Î¥”éí·ßŽ/ùË—~f­†o|ãW|½-¨•:žÙ’±*± 8ªæ6RAªžÂ«ïÄšÎ5Pmýñ~xÄ †Êð"xއæhè‹õ¡nÖ‘U²xmê5tF:›ÍÑà/hr ¬Š¯Bͬ-Ú~kËC‡ÔA{‰C£ª:#MÏ¥ã;¨šUTôJÐ*D`¸&åIlHn@BJPq¤Ù)áW'^ELŒá7ý"^žx“µI˜ž Çs " jÛû¶/Ú5ª¶Š’QBü’“ p/gÿä~(¶Ò–t˵¨î|ͬÑgXµU®AÃ5h7FFÉ€G£<Žã¨ÑX ’Õ™ÂĄ؜?›‡ù²Ç‘ÚI¾>&ÆhÛè\.LÙ ¼ÝÑÑï]ƒÎs<Í®ðºYož€€Ûp¶p¶e§Pè´–õ2Ï$HMõsÇs!Ü|š2W—rŸ}9Û³ê‰õŒD^ÇqÁ´µYy¼6Nk—%£Ó5¬0æùòj¾-«yZžÆùÒytG»|×wq¦p¦k"*FiÊ ‹ƒ4º½¬µñ,¤ê)p×P[¶\ “ò$†ÊC´®nºÁÁ¸Ø=÷ª­6ÕΈõµé׿l ,êEì›Ü×¶5”= 3‰îöÜ¿oúÿß„þ[ú‘>ŸÆè±Qd‡²8ô­CØ=_¼d,DQDWWý›L&¯êz3J&¼XÓ™jy‘Þ÷×3¯ãÅ‘¡jЇ{hßÔ>TÍjK2¤lÊT*4\KxKÞþSÒK¯Ž7¨ð> \ðl¥•tƒSa¸Æ«ã”:9!&k“(åÕ¼çKç1VÃ[ÞŠÞX/úãýp|'˜¨çÛA’’^T~DH€ mˆd$‰Ñê(jf­-AÕñJ6µ<«‰£RÐ ´Láfg4[£ª•3 Pݪ/‰†OüéÙ«:Ä9q1°ÈÅ(¢B!B×`.•P»~©FÆÎœÌ¾ñˆx ¥F×wq,{ <Ç·upD!(SÖ¬½—3íOÈ…¹YëçWeÐkfí²Ø„!óxUb\ßmÚh–kÑá 11†’V¢ÇBp¡|Ïœ~Óòts_¢kàÀôÑ×wQ·ê(é%LÊ“A/«EZIÃp (–‚¡òPK×™›³é@ñLÖ&éàƒÙˆœšÃùòyÚçÖ2»YÒ‚.Ó3Ö#"Dàz.^O¿ÞúóûŽfŽb¬:Ö’!•ðÞi®ÖòÀˆ$"Èäpáà¬Þº¿ò‡¿Ã_:ù×¼–‡åZ8”:Ó1[*£B½±^ˆ¼ˆd$IË"3åB Ç€OætJN¡7Ö±xăæhÔ€†YU—nN¸O|œÈ Î”ã;t¿ÒhMê@2’l0áAÝJôHàÄ¥8 j²)7¼¯fÖ°ojVw¬Æ[6¾Ç¡?ÑOSóº£óôâ¢×wq¡|Ög²š9ŽÃªø*ôD{ætd€Ø¨ÙR‚¦w Ä„f–пpM¤”$^‚éšúôºUo:?C ÚÅ‚ç{ çLZI7±áC¼È‹KVú«è•`(ÕE5:ÝÑ‘ “9ÓJçKç[Fçá0 P#  àe£Ü°~­æ0ƒ¾Ð§Zh9ó{!†½!.ŒÎß¼ñÍè÷£n×<ŸZµUš>„¨Åÿ'¦kFýdî$*z¥\b¸\ßÅDm²ÔìyއéšH×ÓAϱç¶õ kV Ê0%O¡l”iÏ÷„<phù¾´’¦uÙœš£ÓRL*êAfVÉbZžnˆ¶{b=8ž=ÞRv¬2†ÉÚ$º¢]«Ž59G!ÑOàZ÷ð†X5° ÷¼çÜý¾»1ð ð¸¥kÒl ŠÔM+f³Ù’ÛFq1NõÙ ýp lLŒacׯ–ÙÕÈs¡¼m˜•‘x)È-1®jT1Z¥ÎHÙÚ¯fÏ·îŽu7:´ ÚˆKñ¦ÒÒÁÔAÔí:Þ±ù RÇá}7\ƒ>Ï‹5¨E³5ä”\0ŸÞwPÖË ÷Q¤¶'¡rÄaù$t8Â®šœš£éö™$°œ–'`¬:`yVS¶g1ÓÐÄ¿Ôýâ%ƒ¬’WÌÆöíi:ؾM÷âxmÿçäÿÁSGžÂwÏ}oäÞ s3<ߣ™ŒÅÖŠ0\ƒ >½ž}ª­‚1‚„éútЕáY8š>Š˜kiOÊú%!£„”À¤<<ï3qáž¼™ëçÀUÔÐÓJº©ÿ|¡˜Mˆó‰ã¹ãHH ì^³µ€‚^€éšó¶œ+žƒb+è÷Cs4¼4þ~eÛ¯à–®[PÖË8™;Ù’¡ì/ ùè®xˆ‰1:®oö{f~Þ0åjy =ˆêÀýå­gcµ1Ú£®t]ðüà Yìá%e½L£G˜'°:±ÝÑn:ùhæ(îßz?}(tGÇñìqH¼I0^Ç/ø¿ÐÄ"5]Ñ®`èƒkÓV®´’Æ‘ôhŽFgÞ»¾‹µkñ𮇗l.zŨPýæºUGNÍaCrLל—!<›¡Ïó|@¢’:[¦þÂYá=6œ€ù­;:zc½¨˜˜®Ù6³sU÷Ô(Óˆr¦–¾îê4‚ æ™oèlÌëlÏ0úe£ŒÁâ ¶÷nÇŽ¾ 勘CÍ ôÅ ¢BãÕqìZµëª¯1£dà—ƒºU_Ð} ¯5tÆffNBçÝr-ȦLë¶áÈTŸøÈ©9ôÄ‚5y5O{¿=²4Žh^Í_*[y6²j†cP+íÓäY%‹®h%÷η· rÖëEªžÂ¹Ò9DÅ(¶ölÅý[ïnIýš­Qéç¢^DA+ 'ÖC{ßU[EªžBºžn› +êEDÄúb}AŠ’ ¸ 3Úùlφã;ój…°½•%G¦ WVÿ gô†HÕS˜’§pûªÛÑëC2š„îè´i.ȦŒ“¹“4jé:`»6~2öäÕ<¥Áó½#ëøÝh­@Çs¢® ·í¯ßÖÞD^¤Ãe¢|´-{Üp d•,nIÞ‚MÝ›0^§…íÙ‹ªg¹—2¡ðÏñÈ©9¤Õ íÖ ÔÔfÊ0QÖË‘‘ ´¬g‹í„Šj<ÇÃ%nCþ|金ŒÄKPíö’Ÿ.qi$ÎEy1HÁóB-X"]ì’^¢]%á è°=´]Z8Ì]®æùÒy˜®‰½ëöÒg•\ü“tbØïVÒW-/ìãµq(„ë\·¶otG§šìá=5]3˜ îÔñ›mðÂ=Úïëï€á´m1dŒ/vé$«d—â0\ÓõiÊá ³=s¥ÑÃÒ]ͬ͹¿g 'MÖ'±¾s=~çÎßÁ£w=Šß¾ã·ÑïGªž ´ˆ·$ÊÊF™¼©UL×§áúÁ¹ÁÃDmÇ2Ç‚i-öhxþÔÍ:eÅË–Œ©ÚTc ak7uíüª ºé™têlCö€–ôòZ¾eÚsv¿ã¹7Às<ö¬ÝCšaýJ¶ä¶ò‹§r§h?wˆÎH'tGÇ/üçKç›R‰º£SŠŒ*uJz@Âx¦k"M¶Ý í"͹ÍŠQAͬaGßìì߉‚V@É(Ñv£ÅôŽU[ jóð)CVàÄÄ= 8ŽƒÄKx=ý:lφb)8š>°‡9Ž^KJI5]Gø=Û½4’Ñ'>ÒJàeäÍÁ‡ö~ï»ó}ØÃFÓl IDATÑ·Š­Ð5‹-.ã?²"FQ5«°=Óõiˆ¼üÞ9¤;mϦ½æSõKD¬0²k·¶a,[2†+ÃÐ]= BÈ’ ÕŒà™³½ %Q¤†”;#×* YÐ mïÐQYÓ±]—œ/艎‰1ªaûA†FµÕ«žì§9Zƒ Žé˜xiAû&Œøf:á/@±p‡ªQENÉQç$ìnïwÑ(bUb6uo‚È‹”ÔêúËÙ³e£ Ó51Y›lP»›I²li¤/ÞçˆAVÍΙÁ´\ §áù@åÀôC«=ç¿adlA+ «féV×w"´…n1: /  hé&Ü3í²ªÓ,0£9~8ôCŒVG[¾g´2Š’^Â]kïj(xÄCg¤ÉH’r[lצµçvb!—“†ç;„Šb¢d æ+׸¾ ÍÖžK¨ìrI/5(Ä…%·0såùºÐëA¼#•*̲ةh˵¨$ðBƒ–GX¾™kÏ |0·=&ΧZu×wÈó˜'àú.¶÷moRºcÝT{Áñý/vV‰BËE%½DÏôŽH²jP>h<9¾C¯w¦3#tíÂsÈôKgŽïàPêíTb}ˆœØph‡‚øQ!Š„”@BJ *F©4äÌúðÌ`8¿îYxއã;è÷³ÂÍl·õèMBޤmkg¤³Éó ½Cß÷)‹¹;Ö8¶N{‹Û>Œ¾ÕVƒ~.ŒÖFÑéÄšŽ5è‰õ`cr#&k“ÁAuQ‘j±Ò]­‰—`»vS%Œ:”WBJàPúΕÎ!iÌJÄ¥8²J–:B‚”ˆ!ªsIcZ¶d¨¶ÚÔ»Þï Æ3ZJÀSXä`&éf&Kwº>¤kÛ¤ù æ¤X RJвnÃÔy«ˆ~f»åXu †k2–衲µHÝÑ¡¹Íæ„NÅhuÕá–Œ0å<Û©›¨M «dñÊÄ+MÑ ç{8‘?d$‰ý; ŽG2’D_¢/(9*;¤ŒUÆ®Ê)¯ŽÓë²\ëRä¢þ÷|ëãÃoÚëŽLß›¨MÐHÐ'>máîÇ]rä7$7 «fˆçΛھ\TŒ !ô³Í„Àd¼VŽoxΆÏÇqˆ‹q¤•tÐæë™týß¡ÌþñÚxp]šÎGŽãhûnøïÅt\d3({…R¯u«NKc„ $Úž·ª£ÒóHäEJFMF’Tµ0<{f;­©z ‡Ò‡0Vc}!˜yð‡úÑ<Ï7½Fàäµ<­]ÍL·[®…Ó…ÓØÚ³k;×Ò(hMÇš@bÒ(Sà&o^Ëc¸2LŸæûŒ!+HÁÉ–ŒŠYÁæžÍèŠvA±hŽ6oy%¬fkÈ«y¬ï\O1v­Ú…ªY¥½˜­D=®8ÒÑò)çlqOÂþT ˜Öd¹A á쇂Ge$Ã%,µ8¾þÔvF¥k:Ö4üŒ0ÛR1*°\kÑ#ô¢V¤Æ´jé¹îh7ÒJ:`:_$çµ2va±l”¡Z*ÎÏR‡5$R…×my˜µ`àLNÍÓ1çt"®*mk—¦„]¼Oš£ág“?CFÉ´”rµ|«¥âßéÂé n¬åñzúõ†ïÉ–Œ¡Ênë¿­¡…Èñ$£IÄÅ8úbB=˜/¶h†ÓÁ®Žç4muW‡b+˜–§!pœ¼†0z9±iÿ†â;%CËŠ­ÐômØÝí¦$Ø­=[áùq¯XÊ¢¶®µ"HÀEiáp{¾×Ú ÏØ³3¬¨EI+a¢:ñÚ82j¦A-«"Q³SÒÉH2jÖ‚õÀâîÝPÄÇ'~0 ñâÙ“VÒ” tD:P5ªT€av¤t`ú@ ²Ä —õ9ÃZKÙ(CwtlLnDO´‡²içª_…‘æåüN”Áºµw+ýÚ–ž-y#•‘¶ÆGçG;~ãŒò°N¶Ï…‡^O´§aŠØìû }ŽA[ TGáHƒGã ê^@Ðf"ñªf•ÎÙ^LäÕ<$N‚n`UbVw¬æ“_NÑŠp83K‘Q2 ® äš‹‡ªéš0\%ƒñê8[¡ÑDA+PâaFÉ@Ä dÃq-E}®²%ÓTmX9–9†T=E#¾Ù{×pŒ¦g²jV1^ é·vߊýÓûéóE@pºp¶gd¸{Çõ]tE»"TrU¶dšq ×+KP5«P,’ Q OÕV1X ²yðÛ:Ó!É5ñQÔŠÔq°ÜÀQ[Û±–:ë“ëc˜'@¸ “3×¹p¹geNÍÑëlÅ»áÀµlcµý‹ÙÍY÷”çø@PæbMY±ªÉ¯X Jz ›º75[¡A§£ƒiQ¥nëV¾ïÃp ȦŒîX7R‚¶«ÍÕªk{6LÇl©å€ž3ºdUg®‰íÙH×ÓX×¹®%sžôy’‹Ú!"D‚Ô»kÐ(&Lr‡m}Û‚ÍŽ€’èõÒ€3'óøÄÇ™ÂLT'šÚÊæ;D × ÌÖ)y !‚Õ«±¶c-%’ÍÕ>æxNC!˜®OCà¬ï\O¿¶¦c V'Vc¨2Û³ƒÝ¿zƒîxe«†émÃ1p* Ï]xÿëèÿÂ3§Ÿ¡©°0ÅÜ®3.Å1)OD¬‹)ípdcx†„¸îXwŸAâ%tF:ƒt±¯w¡×1_ÆÂõ]d” ‘D@ˆómô'ú±¶c-Šz‘êºWÌJSt¦¢Ãˆ!Ôr,]Rœ”'1V ÊI¸(Y°ž‚ë»èOô}ξGëÉa›Î¢f"ôbCkZA+à@êØû®g§gg§3ÏÏÁñÜ»á^¼sË;A@ðÒØKÔ(†í”ë“ë~–À Hˆ ¼@ÅŸÊzP ÷YLŒ¼”+(…Ý!;Ýò,È–Œ y†Œj­˜•–?ÛtMªöJs¡c!ò£E¡ä½p°Lx&TŒ Öu®£Ù¬¸Çúäz¤ä-³,ÖàÇsPÔŠMلЩ9œ>ôø·8‡¢U*†’Û©z ñpkÏ­M¯I²œlɴçl–ç탿œ=¦ñC©åÍ=›çÞ5æLï+¶Ò丄$Çð:ÃaB³3‹†k §æ°©kÓwbÝÔ½Unö&y1H ^†`º&¦ä)lèÜ@Yè„DÅ(lÏFO¬' ¤ØJCýlJžÂkS¯¡/Þ×ä•…­&í<ã’^¢³ØÇ«ãèŠvaU|M‡9æÛd—Û1RA¼¿a˜Ïñ¸sõ¨[uLÉSA:É·¯ú^TÍj@Z¼È*ÿÖ™oáó‡>ïžÿ.&k“ˆ‰1ZÓZÈÁ"¨UT*JZ‰2Và ea:]s4lêÚÔ´BU¶°Î½Ðö¼ó¥ó #LÛÕèÂNŠ é÷cS÷&øÄÇ”´¶¸ž‹)yªá  •ÞÂhf{ßv¬ë\‡3…3V4/!&Æ-[‡+Ãè‰õàçÖþV %-—bŽvQ+R¹`Ï÷ðÂè à9]0ƒª·…N!†c4”\\ßÅÉüIlLnÄúÎõX×¹¿8ð‹8[:‹Áâ &åIäµ<Þ´îM ‡¤ã9”\*p¢B=±ž ý"y j²ãÕñ+b«ŽQ"ªíÙÙQ/¢fÖP6ÊYÌÖ[fxêV½ÁÉ©Œà¥ñ—¨ƒçd>žãQÔ‹ H*F¶gc}çzú\G…(ºQ3Ðm:ÜsEÝ ­±›®‰º ¸À@ÈŸÀ¿Ÿúw¨U£Jï×éÂé@_ý–·âöU·Sã™ut×wá’Æ2XVÍ"§å°kÕ.Ä¥8xŽÇ[ny Ö$Ö`ßÔ>ì›Ú‡N©³I Æó=ª>§Ø!/IB6ƒÎŒÐ€‡„ÀË!îxN %0chRØyb8U¡›MÚ²=%˜a>óü™®Oc¼:Žs¥sÔp‰œHUßf¾6£dÀs<åð„ØÖ» ®ïÒw®ÚrÕ¨.X*LokކG_Ä׎ ?úªf›{6ƒBåfgü ÷ìB¡X Šz‘¶âµBO´‡f”<â-*qµbTèçê¬îX xU¡DÓóå™°]»É ‡5Ú›~ñžÌ°ÆkãàÁcUbn6\µA'èÌÞ0žïᕉW$GcbŒnÈpòÚ­=·ÒªN¹ÄEO¬‡F™¡òØéM¹I5Ê#dKF‡Ô‚^hÚAŸbx@çÔ,Ï ªEw¬;Ð×KA[]‹H9“iuÈ{ÄÔ<…ï ~§i¦údmñ°¥wKÓûúãýX×¹#•˜®9§±›å^g^Ë#&Æh¯2Ïñø¥M¿DINá˜ËŠYi;|¥U”>RAA æÂ+–Ò2Ì©9D…(%KÍFTˆBµU˜ž¹ Ra^Ë£bT‚Am†øÄÇ…Òš*W,' /Þ‡ˆÁ†ääµ<ÕŽ QÚƒoyVç8š©XÓ±»×ìp¦xfNGbºHénëÛ†d$‰®hW £y±Ž-r" ±(iZß¡=õ5³†ŸMý ’p÷ú»±ºcu@ ²dø¾Oï©éš §|âãTþ"|w¬¾£áÞ¾sË;!›2²Jw¬¾£áùò‰Ibô9šYFñˆG×8{°NJI¡;Úd4Ù2-Þí [›×  •‡¢8'ó'[ÖÒËz MÚé "+8ØcR ¢ b 9€ŠQiÈØÄÄ[Aºž¦å†ŒšAG¤#pvâýèÀHe¤íç$„`¬:†¨Å-É[£è÷S¡Ã5 %&.KåYAomújf ïÜòN$¤’‘d žeÊ ¢$3ûw€q<\ƶ¾mèŠ4À¸­ÿ6ܱúÄ¥8î\}gÓžJF“Ú×ÅÈYàtG»æùÅ^ÿðÅĦjS Žò&åI*’– Lפº)%ÇshÊu¼6Ž’^‚ÄKÁĸÏd^ÍÃölléÝ‚’QÂÑÌQjÐgº«£fÖ°¾s=˜ ™$HèfÇÛÊœâ2Óò4òÚÂÈ€E­H³„ܳáì^³;rÃ5«΃+!å¥ëA§Ç†ä†ö=ÚMy!*œŽvµ™ÂP¯¤d ÷5kcèOôsÍ ¨hP(ÊäNâ1€+¢9-ÌÎÔVŒ {érÕ™AG{òÒ`q0è3Ïmò,5GCFÉ`cr#<âѹIDøH`Ð}¯§_GW´«e„,[—Æ>F…(Šz±¡Öª›…ŽÀXm }ñ>z°B°*¾Š’QfGÊ>ñQ1+ Úõ„ ÿ{o$ÙUŸ‰~w_rÏʬµ»ªºzQ·ºÕÝ’h­ÖŠÀ!k ÙÆÆ1`ûçíóþ°#ÆðæaL€yÏ››@¶¢-ÉêER·zUwuuí[VUfå¾Üý¼?NS™•Y%pŒ'ìK!u§2ï½çœßúý¾}ö¯qlîF#øÅƒ¿ˆ„‘ÀScOáØÜ14¼fK³è‹ôñçt·¥w=Ü7s"~@…šÁ›•üó}V×w‘oä¡Ëz S7ÕÝ:jNíMõþ$Q‚xp<u7”€X(/ Ëìj¯œ>D‘N-0&¯7*ÇÖœ¦ S0Q-Š ËÚæº !8µx „ÎìW´‹Ðe³cõEúèÈ݆wƪ‚(p£Õ¢|o]×sVj+-hóÅ}úÂ}«a¨’ŠT(…•Ú nרd–ÊU%«/ð0žÇ…• 8Üs;;ùó„ÔWžªºa_wê-€ ©âŠV»rgÁέ(ˆ¸kè.ì>ˆè@ÛžbÒ³¶oó^tÒHRMƒµ ˜9BS6‘©fÞTE‰í‘ÉÂ$S²q¦ÕÆ*‚ @o¤—¶­j´ì®ÉÇ7t2Ø Z¸kè.ŒÄGðÒÜK(Ù%ÚÊÕe»ŒŠSáñ˜çH|…F«õÕ-3ð™Ò æËóoÊVfëY.„ ¥ªVÂ\ÃœÑ 7·¡~Ò~ðxaa5ŒžPϦŸ ka^ °}šD%¤ß '!„sÅ;¾Ã«I3 A0¤`D‹²g^Í_ÅxaÅ L'áΦÏ*íäô™Œ âßâõ–ºå[m³” ·Á™–Æóãm_¶–å@¤fÇ +:¼À£…²Aé<H¢„ˆéØ?òU{Í˸™ý¦P'Äþžql‹nƒ"Ñ1–BÂH á6Pu«ë #·ŠL5ƒ‰ÂD :ß|<;ù,¾yé›PDïßÿ~<²÷ìˆïÀãÇîän:„uÐÊdqs¥9kÞd ,Cñ!.g/ó½Usj\Z˜ÙC6Ðevq‚™­®¥êò<ŽÍk ›G›š¢]¤Éš ý»CÿiÏõ݇jy& H™)ô„{pCß (;eŒ­Ž àœåÚ2"<cÔ‘ 4—2Rçþ¦ìEnàr+!¤eÁeQFÉ)µP_º‹…òzB=Ðejø ™"\zª¨Rá‹-Êz¬êK°‰&i¸kè.¼ÿûù¡%„@WhÐîƒëSúÉBÍ­ñê@§ …e~›9'Çw0]šFH Ár-:ú8ˆkqn{ýPD1-Fç9}——87þ^Ù.c¹¶Œ‰Â²õ,lßFÙ*sãËÞçruéPºí€î|4YCT¢êVùøZÇÒaešÏ:7_!%„×W^GÉ*áÄÜ D´H‹rÑ*‚‚˜F™¨DAä º[ï¨Æ»bZ¬­ú3B\‹ãÜò¹0RÍ©!SÉ`8>Ì÷œ"*¡ï6ßÈÃömøÏ)C7 \N-žj 6;c»ÂõÇó•íÙè ÷ ªS0Sd#‹ì„ü¤‘äýñ€0eq=¾¥ìjT‹rÜHÍ­a{l;Ïf%‘N0~?ðÛÈWQAÂH WÏáûW¾•êJ[iv®<Çß?û"rõï×ŇPwêo˜5.T¼E“Œ IDAT E!.ªEqÛöÛ0]œÆóÓÏó¶ëí¦LjkÜÀ…)›-øQ‘Ô“T·Û­¶9tÚËÕebmuek´ÎJïa5ÜViF³>úVýó¥•Q½mÛmøåƒ¿ŒzoÀ•Õ+8»|I#‰¸o9¯žïa 2@[R’ÂÛO ‰š¬a¶<ûSñ Tœ ¦‹”ôËöi Ðò,Dõ(I&ÑÖG¤«õÕ7,íå©ß˜¯ÌãÂÊ…-?»\[†åYŠ áßêõ–º¸mQóJm+µH€»»6Ó89 ×w1WšƒíÙØÕµ«Åhi²"GK3GËî;õŽ‘†ÊÇ}|þ8ø0$£eö»îÖ‘©R^cY”¡IFa-Ì/WϽa_y¶4 I¶tè,Siî-3À34,`asÚ›õ´‹E½J¢´)X«êTyu99Y”Ñ"°]Û¢Û IªJ`±Yï±0dФ WÏaœæU4b-?ðá”1®l•7  Vë«›îí©Â·É–kqÀrBKp@­")ŒÒ5+ÎlÙÎ.Nc[túÃý81bKþli¦l"m¦ÿÅçÌÌ ¾óïÀuݱߘŸŸÇÓO?½ågŽ=Š«W¯þlz§þùxa¢ ò¾±&k¸¾÷zäyŒ­Žaº8 C1Z—~àÔMDõ($QBT‹"¬†×YÀ:d®E«ÈÉDa¯¯¼Þâ,$Qj¹¿«ù«ð#„eQ¦Q¬A:”æ‡m« f©¶ÄA?éÕŒ”O™)ŠÁÁ#U§Úq¾Ð(@$„äe<ëàôË‹<˜q|ùzª¨Bô†{ù½Vœ wˆ»½^´‹\V’zæÜ7JÊ.×èˆÐ¶è¶Gï^ “CÚ7Ü^£cTž·òw…7þŠK¹K-#W¬^q*í×ã4ë5$ô"j¤cÿÕñdëY*$JLÈ®[·ÝŠ÷ï?4YÓ—žÄ“—ŸÄéÌiÈ’Œáø0Ø¢j=áN á´¹™>øJm¦l¢l—qqùâ–eÇB£ë € #ÐêJ~×ã\̈•»yVXÏÂò¬ñùÞeÞI©Ì|:Š§ÇžnÃj8¾ƒ+«W¸­±}«õUÞ>e`]C64’0d³åÙM÷Å®`±²ˆ]‰]¸oä>8¾ƒcsÇ6ÝcSÅ)$Œǘü,¯üãø»¿û»uìD©„ÑÑÑŸ ]÷f×g?ûY”Ë[·q!øó?ÿsX–õ³qè-‘‹±Õ1$$zýÜñìNîFT‹âtæ4&‹“H›é–ž+¥|m.)Fõ("Zº¬óYô–Í8hx . 1SšAÁ*l*—g{6Fs£è2º0 ™Ìš²Ûi3Ý&ÃÙi“•írG*Å7ê…Ê¢ÜbldQFo¸1¨|#ßf\™ Œ")ÐËÕå¶2ysvÂf?óVª¤"¦¯Ò pÒ†-Ù¥e'ŸÐöF'V)Xi‰ Ëó¡å]øÄçhÖæçŒjQª[ìZm¥è€¸œ½L¹Ò7¡ÕÕ%ÊÐü½ŒÔˆŒ Ùà|ò 9ÛîE¶žmËSÕ@d€NXÈz˨£,ÊØ—ڇǯ{·n»³¥Y\Ê]BÚLSÒ£Àç 6c+ –ªKü(Éœ)k£Ñ[m¬òµyeá•-9­™ð s¦bÒý»vî˜0GD‹ðßk^¿¥êRKï­†­QÂ2cÎŒ$á½y¶>è¿3†F]¦¢Ha5ÌAx‚ ðvÃfWD`º8Mñ­Ö1}r†‘+÷¥Ì=3¢‚¾H§Žîè0×dlûÂ}yÒ‰~Ç;GÞ‰_>ôËxxïÃ8Ø}ÊÈ’ÜbËQA\#¤„àU·ŠB£ÐâLªN•«Ÿ1¤øfkY´ŠôýõbÒHBEÞ"’E™l¼@ÐÂS¿ñ;—ªKIŒ´1²(·d¢(v¬~É¢LíÏš:«i²†©üTËþ% Ïc®4‡l-‹ãsÇ[ìr®žãUB¶×Ý6 -×¢Ø$‰&KÕ¥Í[pM:îÃña\›º—³—;fõlþ| 2ð3ço/‹ÃÅ‹qìØ1d2lß¾ïyÏ{ Ë2*• .\¸€L&ƒW^yð}3338yò$Z‚–¥¥%¼úê«8sæ *•ʦ€×_wÜq¯\¹‚“'Oâµ×^Ãê*ÁÞvÛmÈf³xíµ×èz¾@ÜÆÒi¦’A¡QÀmÛoƒ$J¨ÚU„Õ0âz{S{q|î8®M]Û†îÔ$ U·ÊË| ´cÈJV •î(TI¥Rˆ©2Q=äù•óØÓµ§mQsæËó8Ò„—}Ø¡òf[k¥¨B£l’,Y%ÔœZÇr{'©ÊfGÇzmŸ›U+ B[öÊÊ}¬|]wë¨Ø•–,¬îÔ‘©d¸SòÕpŽjQ²±.Dá6°-²*Ö·}º¬óÌa#EíÆˆI?fªªÔÖ”8žƒm±õŒ [Äõ8gwj.×äy\]½ ÁÙœB„6E8Ö eì,+¯:tÜ0E£_Ì^Ä+ ¯àÞ÷òûZ¨,@€€¾H!ˆhø†ÛhÙ;5‚ûv܇=]{ðâÌ‹¼…ÂÔǘÃa¸ÅÊ"çB/X…–j ëNâ  âWpnén¼½mïB«å¸Ä%+'7WJ˜›ñ¯ål5ÏÙóꉜ„åYœd(¤„hUao€µKš÷×î´â!5IxÉ>ßȯ“ÂxŽŽƒÝkÂHàäüIè’ŽL-Ã÷Z@~¦³µ, Ù@X¥­0Çw0Ĺ¥sÈ[ù6Q&€V0ع܊P„ýöÄîü¾›…wx¦k¤RC¼JX²K”}OX¶˜¶×+Y¥6€(Ìi›Îõ]ä-Z¹é2»Ú؈JÇsy•PÀ¦¯‰Â|âcOrÏ–únà"®Ç;êªHKîŒö•õÍ-r¡Qà“2»‚—f_âß5š¥ Ò }7@\]½ÊA³>ñÑð(ÛeZ5[‹avPdôEúpvé,^£ ƒããy:šÊØ›·ÝŒñÂ8^˜yÛcÛ[ÞË|i~àoÉŠ÷Ó^ ÅÒÒŠÅ">ð@|þóŸÇ—¿üe\¼x¿ú«¿Š[o½Žã`vv=öNž<‰F£r¹Œ/|á ƹsçð‡ø‡H&“°, ‘H_øÂ ë­6÷¥—^Boo/úúhûè?ø>ó™Ï`ÇŽp]÷Þ{/>üáÃ0 ìß¿/¼ðn»í¶Ÿ>CH'pZ^*ËŽY¹ñf ‚€Ã=‡¡ˆ !\]­9J”D‰V<#0“ƒÂjN +µÌ•i„ÈZ‹Š‡D4št7ÍR¤ozüÀ§L¢s6 ÉÆ8¶"pY©­Ð9çPºÍø2Ö£ÍáÆ’530,{b’« Í•Q±TYjíi5V¹²,°}]FW‹s²}‡ûÃTM.˜ÂF¯(CÔf3«c«cø‡ñÀ®þO=…ï^ù.fK³ˆpCÈhB›/C_'ŒDA¤†·)hY©®à¹‰çÚ*0ÍY㦆jïºh)"YÒÖÂè2»è(ìéÚƒ=É=86wŒ‹½øÄ§€8=†°F€¦b¢;Ô /ðÚ~W ņðÁÄ-ÛnáãC×ê Ò¡4rõ,©»í¼ØÌÉ3×ã8»t¶ãžs¹í‹—í2ÍÄ78ËŠ]8·úFþïùÊ<F‚€ ˜™«ç¸ñNšI¸¾ËµØ–ga0>ÈYâØ=°€†7ET¨Òßë& ô¿~úùmÆ„ç‹:Y ç3 Fâ#-4°mýƵjÑÆñIV&fºÜ †P7³Í)ª’ŠžPTQåä2ÍÏÆÆ ›[|äc /EÛ¾BƒJ8³Ñ¿PERx°­ˆJK›®yoL&Ób-Êx~›Ñ®vºIáAÝ­Ãñ^5`ï; Î-CÕ©B•Tˆ‚ˆˆÁ±Ùc˜+ÏÁömŒçÇy€f{6ÊvŽïЉ"I¡çM ó}4DÃmtl‰•¬–kËØ•ØÅßq·Ù·õ½ … \É]áû™± Šñ/Ò?ß¿?î¹ç<þøãøÒ—¾„·¿ýíí¸‚ÕUüÙŸýžxâ Ü}÷Ýø›¿ù|îsŸÃ7¾ñ Äb1;v –eáþèð[¿õ[øò—¿Œ'žx„|ÿûßoû¾Ë—/chh’$Áó<|ÿûßÇc=†¿ýÛ¿ÅW¾ò|èCâŸÝ·oÎ;÷Ö2t7p©Ñ”Öæ»ggqvñ,GÁäùIÌIsÅ-‰!Ã|Dí(JB S§°(.ò ' Ò,b¡v¼†BÎËáŒ{¶m£$”ðòË/c3;1#Ì€‚¾JÆ•q<éy ùëHÇ@ pÎ9Ù’1{q“da1 …(hkÀ#NÚ'QÊ ÁÄòNdOtü­‹ä"à“ç'±(¯Ô|øÜ‚"@îðZ=xˆ 1èB{ö[ôŠÆçÇñ?¿ö?ñ¢ôâºC$eœµÏÂh_Ê ,Œj£¸F¼f½4…iÌ7æ¡‹:ª¨"ãg`¹Ê™2N®žÄ%ñ<Áƒh‹hoà”s ¾í#gçðò©—aBR«ÎjK ´ùývO#gå@@K§îàdé$ý(DÁ¤´Þö(EÊmîø®Î]Å·W¾Ëß»ŒÅÆ"®zWaÙd_ÆÊÊ ~øÃRƒ Úˆ™l¾EëBù ªSE-[ë'^…ôš+°pÑ¿ˆF@[2q'ßòñÝËßÅ!‚øXð »2^}ùUøÄGBL@Tœ<ŃH¶Žu=âaJœ¢s»~ U¡ŠÀP‹8ùÚIŒ‰c‰ŒÒK%¨X§Ódó]+þ~c¯ŒavÑw˪ppÊ9—¸Xr–øN?…Ë"ñ$ÅzžìQUB±ˆWN½ Ô4DJzâdœÿ,¼—éÞ ¸ä_BÉ)ñ3ãç•ó8.om³HŽ×Ž#$„P ,¸ < ¯žxW¥«­Ž,(Á±¬È+8qâÄ–{Ñ]DÒIâ䉓[:tÑ1§ÌuÆsÞOÀÕ™« s]"]?x8«žÅAñ ,ÅÂéÚi¨Ú„8¾ƒ“'Nb±çKçèzV„ 2^†ŽãfJ8‘?Ið{¯x 6é…‰P©Bô׿wU\E±^D£' ëï!𨶊§ÆžÂsSÏÑ„a-M.¼vO4‚>?úy¨‚ú¦ýš$Iøßø ¨ªúùý{÷¢§‡VZGFFpèÐ!D"þïËË˰, ¯¼ò ,Ë¿øEšONbhhï{ßûZÏG­Æ³sY–ñ¾÷½ð€£Gâî»ïÆÃ?ÌÏ0 Ôjµ·æÐ¯3wh†¢[ăwàPêßALqf1QÑmwãLö ä›Âò,t‡º’Bðˆ‡‡w= UTQ´‹ ãõ¥:æL·dÕj/¾ð"î}ǽ¸0}I#‰÷\ÿ|{òÛXj,áö·ólÿJþ js5Ü»û^ì‹ïƒå[è6º‘2Rx`Ç”nrÔA¶‘ÅâÜ"æ+óØ»oG泓£'ÑëÅõ;®oÉUYE¯Ù‹©ÒTÇòã;Œ vd»«¸<æy@ßtwo»›ÿÝ…Ì|óÿû&>ðÐ …8Ù;GÞ C6ß¾úmô¡Ѝ`¾6;oƒÌìÚƒÓ7"ªF‘·òxûÐÛ1`@ž”1zys•9 í‚!ˆ€e £!ž,N¢4S½;ïÅáôáfkøàÆÕölô…û¸‘f¢",9uá]ÀðÞa ˜›ŸÃaý0dÈX^YF­VÃõ×_fÊTêu <й…ø˜­ÌB¬‹ {‡öâ†îðÐî‡hv?Fà«L×ÒxêêSXN,cz?jã5Ü4p­ØÛÃÛiI>fÊ3[Ž.B(RhDA„å[˜­ÌB¯éX˜^@¼7Ž]ñ]0÷ŒÜƒ”±¾oÿëßþW¤úR¸f×5-F·h±#½Òøï®6VQž(Ãò-{XŽì>‚>“¶è3ûPõª‰È1+y'l=‹áèp‹cs|š¬á¡ñu¾Z¼Š^ügä9LÍM¡d—0²kš¬Áò,loÇÌÄ ¦¦¦pÿý÷ó 9¤†6uô3å þ³ xáÊ 8ØÒÐêÇB•r’/,.PÚÝá¾àSÅ®àåÉ—±3½×^Ë9’fª¨B(ÙÒleЍ´œMBè>Žwì½WÜ ._¾Œ\=‡á]øgÿ=œü¥~µŽ§¿÷4n¸å öSé`ÇwðÐÞ‡Z¾ãµ¥×P/ÔVÂ+ŒáÌô¤Í4öïÚ”‘j)…g­,&§&1UšÂŽÝ;6m]9 oÉÃ-×Ü‚~³®ï¶Ñá2Åm‘mm`¸æõ B˜˜™€¤JØ5¸ Ña^1Í[yìOîÇÇ¿ôq¼û‘w#n¶Îê~«ÕUÜ4B÷¦O|L•§`-`Ø3´ûûð¶Þ·Qn‚Ì)ø 8¥¦àÙ©ga'mÜÐ{ÿΜúG„ünÛsÂrk«-YOâ套aÈ1ÕéÄGJK!„õJTÙ)ã=7¼§ce´ã»püþïÿ>yäîL›«to´TÄöö™(Š0MŸúÔ§J­Û„x¼ýö÷÷cyy½Úsß}÷á™gžÁØØžxâ üøÇ?Æ“O>É{òÛ¶m{‹ݵ[!fj3E×ö^‹x8Nûµñm0ê´&‹2¢$ ]בŒ­—êný‰~ЦVtìÞ±‚  êTÑWêCŸÕ2Oàk~˃‹¢H£(¨UìIîA<Ç¡ÞCxfü…"¶Çé<ê\f!-„½={7¨\`W¨ »»vcxˆ"–òðË>º‹Ý˜(M@ ©móÉ+µ8p0ä÷Âì`t¦bÂR,θÔ\ú  'ÞÓÑI˜®‰¨…/øPc*†‡‡×§œqÈ¢Œ®®.„ÃaÞkOô&øì³º¬rW”ŠðË>TIEW´ =éh’†b8rͪõ\ߎÄlå aÚ«”©… ¯ÙÙÌ.ÏBWtè>Ðñ@³Ï9¾ƒ¾x/Û×Ý:ú”>N3Õ£pàÀÕ]äŒÞvàmܘ†ñ«ãH¥R¨y5D*’èJtì!V*ÂbKSÚ¾DúÒ},ÉèZíâከàpì0®¯âjñ*tSG€ƒÉADcQÈ’ŒžXw6RHB®–ëH^ÁŒ`L§ä2–g!.ÅQ–ÊðU꼊ºPG8FRO"Ñ“Àpr˜!®ì"‰¶hˆù1̺³HI)8ERà¬:è*va¹¶ —¸H…SH§(p3©&ñàž±XYÄ•úô“~`pñ8Å+T²„Õ0ú“ýˆé1xǃƒú ªN•+•EüâVéPºÅéV*®I]ÃÏ Ý€ÀÅÆE ¿ÜìRD'ˆ‡©£3¢Ñ( Ó@(¢À'ÉA¼¿cKÇ <¬ªä—/ä @o¬édéH®îÂölŒX#¸œ¿Üf *å ~ÉaÄãô"7Àö§«»°\«¥  Лìí¸Ö¦k"Ic©¾@²/‰ÁØ ŠVæŠ ]×!š"´(Õˆ_m¬¢g §…øèÅÒ‹҆茷£Á&6ÒfzD‡b(Ç "ÐR+)L”& ›rÇóFÁâü"ÂZ»{vs"-?ðy9œ½WERZÚbmvÜ·‘Ò-…Ð „£a$’‰õuª))&¡/Õ‡Ù™±3£ fÆ¢p*tYGw¼±D ×_‹ˆÁ„=UVá•<ŽÆÙìY\©^ÁÍ¡›RBàèæÐîÅ@ª=ɈƢØÞMÙ"7™Š HÉ‘044ô¦§‘,Ë‚išQ÷±X ³³³Èd2ˆÅb?•Ï4 =ô¾ýíoãÃþ0TUE¡P€$ImNýÆoÄ¿øEÔëuhš†³gÏ"‹axx·ß~;þê¯þŠï…3gÎàÎ;ï|k(wË_ç6÷|… ô…ûxÄ¡ p¬3H5“æ$à="/ðèÈÆÚÆc¬BL4c³ l=‹º[ÇPœ–Øw%w!¤†8wÉ.aª0…ÁØ ’z’«¹h¡Œh‘uêGB:Î`2¾æf@œã;œj’õD7öƒ½Àƒ®è›f|²$#ªSx¾ÞŠŒ.Y¥öVƒÞ«cR•Œ÷œÍ‘3<{¸®û:ŠÈ„Õ0Âjnàråf˜HÚÉÂ$¶Ç¶o9ÂPßÍÆÒ Çqð‘|¿ök¿†?ýÓ?ååòæë–[nA£Ñà3æÇÇG?úQüʯü ¾õ­oáOþäO‹‹‹XYYÁÏýÜÏýô:ë¹ëâ‹åÚ2÷æ‚"D(’ÂK ›šRfŠÊ¦‚´ C%QB\C—u˜ŠÉÚÆž.NC“5N&ÓbØÜ +°R[Ál™ÊŽì>ÈKblLŒÑÊÁ®ˆ UdëY>oÌQüÕ %£Y ZØP3GX sE f°ØVÚ¼² #¡'°P^à#zš¬µé¸7ÿ…ÊöÄÕÕ«mJnÌ¡3c/Š"ö¥÷q4®©šœ…«d•¶D†^]½Šº[ǵ©k©3VåM#âÀ"7p1ä$.1-†ùò<ç ïØ›^˪eQæèâ˜kyŒR’ñ›3¾‚°Bi,Ah€ Ä”2S¸gøü`ì|fÝñœ¶L\(iÊBe†h´í}p2^nFŒ$@@\c¹FùÉ´êhçê9ø¾¿)De¤ÌFs£(X¾^Lj“ñn¿wß{y0Ê%¦bÒÏ‚–‘—ªK¸¡ïîÜÀ 4¼âF½á^ŒæFQ)_ûÆJ ¸7‚äXpªH R!¾¾ IDATŠŸ.NãPÏ!îгn–dñ÷âƒj¹7ó°÷Y²Kü—kËEq=QQuªHšIÎ×ã89žïáîỡË:æÊs-€(QÛÊçKµ%.5»ñue=àñ‰Ï'J˜J™)ÊØçTøÈ+B¢¸×wy°µ\]æà¼©ÂG~;¾ƒš[ƒP]C1°=¶;“;±PYÀ‹3/"[ÈÒq@ÒÎÉÏ®¹2OÙ“ÜÓ‚Vg4®ó¥yH¢DªjxÓ³]²Jpª¤"¢Fx°RuªœïA—u$´Ö*î1±,M¦ª—º¬#¢F¸†EH !nÄùÔÁ¾ô>¼¶ôNÌŸÀážÃ˜.NC¤Æ¿Ÿãå»?Óyô믿ÿðÿÐòg̉9rßýîwùŸ?úè£xôÑGù¿üãçÿÜÕÕ…OúÓoø{¦iâƒü ¾ùÍoâСCøØÇ>†}ìcmŸûÖ·¾…»ï¾;vìøé3tÛ³ác}6²d—`yz´lI@¸¾1Co$„`èwöÒýÀo[–ñ„Õ0'Öh~à#·Ály =ÑâT¯ë¹ paåÎ.E:”æYµøÉ!ŽÒl‘ ¦b"nÄq){©m>r¾<¸GT£d"®ï¢?Üß²Ù™ØJs&À…gÖ2úª[EÁ*`µ±Š‚UÀ|e)3E°Vÿ®íÙpˆƒÞõ4}ýð(¢BÅ\ ó•ùuÈ1G®ž£] ¡á6p } ¥ìÄþŽVm¸‚3K´ßÇæµ·šzhnQ.|Ñî¥Hwrów2T‘H¡Pu¯ÎG½DAä(ÿæ‹©Qy>ƒÅ5jü£Z”b<èbÁ"ßÝ×á@÷ Dh)/@б¿Q#-":͸6ãîtæÞò,>ú•¥)Â×)C„ˆ¢UäÅ|ywÞv'††6§¦d¤&…F“ùI.Å*@@L‹áÚÔµ-¨"*4ˆhÀRq*p<‡ë‚F):Tª’ ?ð‘4’èöo™åØž„‘hÓ¹g³èª¤"ªRêÙ©âßó‰T×_w}‹cdT ÷MÝ©CD¸•üM™)>"' "ŽYC^?vÝc¸®û:¼ºø*¾ôÚ—0šÅliq=΃8ERZ7—D„¶5õ‰ÏƒíŠS¸(Ûe¬6VQ±)ÑJROr✼•‡O|¬ÔV H n¼íF$IH"- «aÌ•æ¨N‚gãJî /ý[žÅùF¦brÈÁØ Ù÷LÕ„*SB¨ÍªSc«cˆ¨‘ÙWVuŒªQŒ$F@A—ѵéÈ›íÛ<‰a³è ¸Ð³µ¤£iÜÿý(¶ÚXÅbe±£=`Õ¦±0ôy$!•ÚÝÞp/,MÞºuÛ­(ÛeœÊœÂèê(ºÌ®¶@ò'M:·ª¼tºTUÅïþîï"™Lâ_Ãõè£â“Ÿüä–ŸùÈG>‚ßþíß^¯^ü4?Ä[soºCÝÜè©’Ê7dX ·•ºšçxÙÁŠé­½ F,ÓêÆLi¦¥ .Ë2´]‰PV¥5ÃßêÁ¶è6œÎœÆBe»“»[fWUY….é-=cLŠ›úoÂTq £¹Ñ–2k¦šAÒ¤ GŽç Ju­Ä´XKð!‰Î’]Â@d·n¿ïÙó<´÷!Ü7rvuí‚íQ¬¡|<¶á6°Z§ôÈ‘®ÂF˜÷ŽEˆÈÖ³TƒÂ*´ˆC9Ã306Tº¬svGC6hມœãø& “è õr›%­Õ]Ö1’é8Ï‚¨²]Æ­Ûoå öYF6Õ\v—e#;F I”Œ«fS~ù¶ƒ©«±Ê™øô'È-ú Œt,¬†¹=IŒ`06ˆcsǰR[¡´µ?¡Cn~>Y7mémv‰¢ˆ#GŽ´Í„ÿ¯º8Nl‹KQ”@ÞϤÁÀú^,sð‰ÏK.1»AÅ[(73¼Í7k3þìóÅÅ•‹P$×t]à 9:Vrn>@–O+6ŠD{Ëì¿—™÷y;•ëX±Ùa±L‰e¬äÇfîÃj¸M[:i$ù}m¤gLšIìéÚÃ3›Íúlš¬q.ïæ{äeLB1~àóŠ”áð|…jcœ€Òëæy8 K³KÈ.fáyô™ÛAv1‹Å©Eä—ó”£J*—bet¶º$H”4“€˜©fhÖº¶G_Yå଀ð‰ßQè‚ø\ÙÙ,¬†…ÁØ WNcc­PCn6‡Z¡Úg‘Ê—ÊX™_ïѲ2C3e.Fù*@àågUVy`¦H ö§÷ãñƒc_zTIåÔ¶>ñ[u&6r¨—¶ Åà½Þ€¥uÃÏæÎ·E·a÷~ÜÜ}3Œ²+gAu*ÔâTi•‰KóKÈÏçáY”s£êVQ±+˜]˜ÅK¯½„ÂRApÐ(+5³µlÞëLÈH•hÁ‰lš®…Ê^»»vó}Ë„­6¶å6Û׌v_j4IC½XGx°Ì8?øY®[Xš]Bn1‡ªUåm‰¹¥9ÌMÎaenžëµˆÊ0Æ'Ò\t™]€@[7ìù ÙÀÍ7ó ήĮ¶6×›ÎÎ׸Þht’‚……\¹rù|gŒV±XÄää$gû×~Éoõ üÀÇj} =Á$sby?OHiK=ʧF±¹w©Jj‹ƒ%„à™o>ƒ=õ#H†MÕpE¼‚ÉîIìMíåýsR&˜º0…Ùú,B©ÞþKo‡,Ëœn¶|¹Œ¥ú†æYŠã;ئokp™ ÍX%A‚,ɸkè.|÷Êwq&sw ß……ÊáˆôÓ &´ëG{Ç{¿!5„ŠMI6"F„; ÖB`›M¬Œ®àå'^¹…àÜËç°xd}×ôqQ/ððúK¯ãüÎ#Õ“‚.êxà7ÀdqÏþßÏ"Ñ—@¶…aè˜Þ+·±@eãage¶ªS¥£I¢aÛ·ñzöu dž×ãð3ê5ãØs3§Ýüg ×`(ï¥)’‚l#ËßÕFä:{'ÍT@T*z%«Ä{’L"6¦Å ‹r‹Ch@ L|TÚÊÚÍx V–ßhH)”ßž_¦%Îz 'çOÒJÂl¯>ù*ÄEœüáIì×÷CRáxlØh8 |ë³ßD`µ°Šý·ìÇ¿p'^ÿç×qþŸÏ#–Œ!3Á}¸n9@¹ê½jN³$nÁ‘D‰gèq=Î+5«Õ–ìšµX@Âöîp|˜«l5;€ª[ÅP|ýÑþ6#ø÷ßø{|õë_ À\yìâz³¥Yé?‚ìT/|ùĺcX]XÅ=¿~Î{çq×Ð]‚_ýìW±py¿óÿüªj•Ïq—2×`jv}‘>,–a*&ò|Ë>Mè À«¬ÕÓÜž9Ô{i3BÇ>#ZU» àÀ)/ðÓcÜ&ù¾ÿò{ÿ¿‚Ñ…Q”KPGTT*¥qõlœ9zÇ|fÔ„¬Ê¸ë—ïBA* ÷z¿÷?~nˆòpôüRôˆ˳¨®ãà·6$´bpÉaFdÓ¼/™0T³¨ “ ~³ÙkÃoàžm÷@‘Ô3u|ç³ßÔ#AÜ-¢P§º5§†À @|‚¯ý¯AEÔ«utïïÆu?Š‹Eüðÿý!ºzº@ªƒ{qÓ#7šFa¬ªEé´JSòRB|²†Qp‹‚ˆ]É]ØÝކ×àìte¸ @•Õ7%‹ê1å‘èÇǧ?ýiŒŒŒ —Ëáÿø18Ø ý‹¿ø œ>}SSS8zôhÛtÊ¿¶ë-gè–Gu˜Nrsy-¤†h¾¶°Œ+Û'>çgÆßTÌdêÜÜžþǧñðï<Œûû~ ׇAÊ/̾€º[G@L'ÑïÃ~÷}ô>¬\ZA~‰FZЧ –‹¡«ÔEÉPÖÊUŒ»ºyÃ4g­Œžpz?Fâ#xuñU,V±PY@DP!—5±ŠærcåbÑ$ûfHÙgºÌ®–÷T«Õðõ¿ú:ÞùØ;a˜²Õ,žûÞs½«I ù^}êU<ø<ˆ»?r7 —N^‚i˜øèÿ(îú»pÿº•\—.]‚"* ³1£¨“SŠ:gQu§>3†¬Åâù´dé‘ xm#o„·`ÐÍ(EW뫘-϶¶a FDZ&†Ôg¬pÍ ‚ pºæŠIX S2’5vÂÍ‚QS6¹jV'8QѦeiŸøÜZž….“j‘³ŒýÜÎaß‘}ˆGâº%œøæ 8BekY\ !0?:®¾.ÜùëwâÑ?ŠWž{Ë«ËD >ñ1WžãSÌî5W¾ºCݰ\‹£ô™Ï¸cð ņZð8Œ‡_$4ÜlÏÞ2kgÝ-ßC½ŽÏ}îsøÄ'>Ï|æ3¸ñÆñõ¯½ísŸüä'ñ½ï}Š¢à‡ë-;ô†× $fš—¢™„ã@t¡Tša%Ì©%G{s6Õ¢-,eSSSˆÇâè¥Fi`ÛV­eq:s™ju§Ž„€¦kPdû‡±{劖E…BB šŒB„ˆèp™ñ ú#ý¨úUš©,4j á€cX™»S)Y–(êÔöÚJŽïàÂÊ$ôvÄwÐF” Š"ÏÖ7ÕæÌ‰µ#ø¡Zl±‰ÖWž)Íð Ï#]éX&”E–gaµ±Jòkïel̬ÙÙ²]Ñy6¿ÙÅD4Yã%ÿWX S0•çÀ”MŽXî Óÿ®-Ëç3yôlï¡ÙG¯„Ìt¾MÑÝ‹•E¬L¬`ûîí° fÄD8†½jÃÐ 4ÜæKó¿0ŽîíÝeÚ²±}›ÿÖ¢«B’(ñž>˼/¯^æÙ-ï)®qÎÛ¾”™j *w'wó`†MV8ÒFo Ùlªªb×¶]H€þ=ýÈMçÖûèÕWŠHP`Q÷În”w”Q²K¸2uÿé">tWdÄ&´R[¡ô½k-MÖè½®egoT~% Ùj3iÕ®ä.~Ò¡4çgBFÌÙ¾¾H/gΜÁáÇ‘%ìJ"¥§ÙZSÅ)85žà! л³¹™*KÔJ5|þÓŸÇ—ÿ¯/㫟ù* åæÊs¼ÓcPEµ#ïƒ*ÓöIL‹¡æÔZF`ßÁ|y¾…Ïß(Er§~{'Gçn¸‘'#ó³óèìæRË+¹ض QQu«˜ŸÇö]Û!ɈF Å5—ŠÜ?ˆZ±†Óß9'>ónøù W.œ(L`06ÈfÀ³(ˆˆ Àò-ÚG÷×íÉ®ä.Ü¶í¶–YzS1×㎠c$9‚„‘@Ãmt ÔY²µ…5» …2™ :8tè.]º„ÿݯ·ìÐkN –gñƒª¨Âó=ìˆï è_ßãÈXÛ·yFÕì zårGÅÑ£GQ(`¨Æ:PNFô FñòÂË8»tÀÈS0’&kP¾çc~t¹™n¿÷vè’B|ßçN6 âF¼­ mÈ/@¤‡{c²0‰L5Ãå# !m©5·†½©½Ü!H=” ÅÊž³;Ü Ïóðâ‹/âèÑ£˜™™YWÌR#pEõ Î* P±+¼Ï¨H DE„íØœ;Ú)9xék/áÚ{®…«»tÖSÖÚp -úÚH ão¾rõfK³8Ð}€Îr¯!‡Ù²wØÜ£l.…YžE9°åu9Êîp7E?ë >wìú.æËó|V–ä-˜Ùz¶¥L¿ÚX¥ïYµÍÀ ‚€˜ãØŒ½†šVD¡šÛïÚý.Þ?l6ްšªÉ&½Úî§ï0ç:/y%8žÃg׫˔µLøx“(‰”.dAÆØé1œxîÞõK^bóÄlÎ~c[ÀTM®Ä¦J**v²$siP†ia8ŽàÓÉ4cã9ˆ¨ì9Ø1¸ò}¢(òª„®éð=Cñ!ˆ‚ˆÉâ$¥„©c\Æ2ünÊ]~â<Ýwª¢R¹Î5¾¶rõå,(/‚.ëˆhŽÏ`Ü[xtŠeXµ< ‡úñ¿N›iø½6©¢H ï§7g‘Žã@UUDŠôy²õ,ïDaÅ/Kð=Ä%¨ª8ðÀ<þ£Þ¨ãù瞇,È´"áÙœób#q;›Œïž9jveªXžÅõáÙÚB ÁQ'Yâæ«âT°3¹³…ïž„÷ÄÃj Ò@€’ QìŠçQg¾x“%u«ŽòjÄ'ˆ$"ˆ¤"˜Ÿžñh{`²0 Û³±'¹‡ŸËø¨îPw‹lv³³o^7pU£¼M¦K:zB=màÆæê’&kYÿZ‚›€êÃ3@ãLÿ7ïгõlË"B³W7 3æ½á^xÄãºÍŒicäÕ£¨×ëÅèè(Âá0êµ:tB³ÛüR==¸}ðv8¾ƒÓ™Ó0…|nÈü ýÌô…i¬.¬â™¿|¯¿ð:.þÓELž›äÑ"sÞK«¬·Í6˜(ˆx[ÿÛ(±Ä± ZšÑíŽïÀP é?Ò"*Õ¢´·ÜÔ/Oè A€±±1ŒŽŽ¢^¯C×uHÎZ NºvtÁõ]ÔÜEY+Às醫ekã"+‹¨–ª8ú×G1°w×Þ{-Šv‘NH:Õ—ï¡«Ò’vh¦C@paåP5*-C6мËÊŸŽïðÙûæž×@t ÅÉ3`^\Ã#yp|så9äëyJ#»våù–@C$€p‡fy²õ,Íü¥µêʆ¬¨åÕ¶rm“ñ÷éPCñ!<°çŠÁñÍœÞp/ß7 U=áx‡H,«j!i&Ñð0z ‰’­"zúzYÌÀõ]øŽF¥H*B¦ÎNáÌSgpǯÝ5ªrcÆÄ-ÂÇŒÚ*J˜;_À%õd‹ ‹!ŒºÑ¡§Í4Âj¶g£êVqÛöÛ6-YF£QX–Eõ  ²RA¬;†¨¥šå¥9(¦‚F¹Ÿø8—?‡BO¨U£Šó/Çs_x™© Ž?yðl½îÖ9±“a%Ì1'^àmJ_ÊqÄãr¶–o!J·8¯f"©¨EH ñ^=#>b×ðð0fg)Ul!Tgª48k¬ÒñPE€ïúü50ÙJ±îb錘ž¦¥KU´¨úäš^|T¶a>6:tv/E{I>U¤3íƒÑÁ F\ľÔ>Z’ö›áAà\ìêïîG¹T¦] ÃS=BÀGFcéòËTÖ¹T-Á©:˜ò§ðʱW°ãðzÇ!ÜùÁ;1{in•Š%­Ž!ªEÿÿöÞ4È®³<}¾5{íy÷´»w«©å–Ù–-ð„1\0Æ.lî9NR ©"pÊ'Ô —SŹ7©J%7?H*$ü‚T.Iêª ç…o8åPa8ãøH² –,K²&k²¦VO{\Ãýñí÷ëµöн[êÝ’¥õò„Ô»÷Zß÷ŽÏû<qF„Œkëw͘NhÕsvZ :v2²f6"wŽ%½P½Ú¶d2‰³g¹`Ó¹sç044ôóËç!3Y8·t‰W‡ -Rª$Úy -A{°À¼M<<<ŒÏ|æ3øÌg>ƒ‡~¶mã_¾ÿ/8õëS¸ðÖŒíà2ˆì<ŸùMO¢>WÇë?{G_>ŠåùelÛ¾ w}ä.<ý?÷òýØzßVlݽÃÛ†9Ã~‘;TƒŽîp|È‘gÍ,{…@á±ÃtvÅd1r8I8<ëJh hš†OúÓøÌg>ƒGyO|ä ü¿ûÐ*dKÆØ®1,ÖñóïýLJ¶1²mÿöÝÉ_ŸÀ±WŽaâî \X¼€þúØiãwãòùËX¨.ðñE@ÒIj’1&Úßš¤EÖO®T¯àृ(¥JÔÆƒ¥Z(¥J\ú³‰ gѺî.†œ¡¶g«I2Fžï‰Êƒö¢~#‚èÝsfOD…©u âbù"æ*s˜ÎL‹ïÓz®2F®çŠJ/ì q®ïŠyÿ°3Œ'gžDÆÌ¬hR7-m¤E¢dk¶ $!„»¹¯¿ð:ØOnб8·ˆÿþÿ•Zw>x'í;„·_{¯ÿäu$ I˜Ž‰·¼ÿ¿?ÆÎï„i˜xãØhx Ц¶?É•vš»ÒŸSbMg5âä´a èŒ&Gq¥v#ζå¶u½ïãããÇýæÅñ׎ãèþ£½}g^?÷(—Ô-ÞSÄ+/¼‚ƒ‡âÐåC˜ÍÎr‰M›aûÿ¾üö#H §pûo‡ª«ÂTÜ †Ã"iNI‘HÖÜLÕ\• !ÜB¯¸Ü1pG$xª!f¶†lDØÍ’F2ÒýøÐ‡>„ŸÿüçøÙÏ~†?9KçÌ‹‡~u—ß¹ Ù‘‘Î`ï÷âØ+ÇpöðY”n/ÁÎØš¯~ò+ìyiŽ¿z¥%ù õJ"j5Cå|ì”tѬ{uœ^<ÁÄ è`Nb¶¤·à±‰ÇPu«m®ÜನŒ>aÓ€'Ÿ|{þiÎ>¹Cs¨¡†¹‹sxùû/í»˜ºo ‡^=„}¿Ü‡ý?ÝD.Óîiœ0NàÈ+GpæÐüÅAhºÍÔ°X_ÄÉù“˜ÊL‰„¹öC•TÑ%µT«s@ÁüضI¤X0d£#¿I/T¯™L=öþê¯þ {öìÁ·¿ým|ô£…ïûøæ7¿‰ýû÷ ÌÈÞ½{Q.—ñÚk¯ ò›2 ûw–ߣ;à—®r†¥ZbX¡‚íôâZw&u]Ç—¿üeäŒξ~ýÏ…áʶ¶fcfhO}ö),]\ÂüÛóxîÿyéDVÂB"—@2ŸÄÄ=(ÝUBÂæs93u¬tBèß°Ý9p'vî—ŒsèûA€ÛnçâfNN‰IÂÁÔ½:Ýiï H>ÿŸ?îy‹o-B²$”í2Gs+2ª^ª¦âŸút[DZ}ÇðO}Åé",ÉB®˜Càx凯à—?ú¥JÔ$NæÐiOž jXMÖ"ä2o^|‹µEÜ7rŸp’ÔÎÝ’Þ‚º_xƒ†ß€$I‘ËJ«`­rŽæÀT¹sö/øiÍàçkó8tù\<ЖˆÐäÂÛðc©1‘0´»œ•CÃ猆ƒö Pe¢ïE aÂIÜG¶~¤­r ¶_µQ〳 Zª…ÝÙ{ÞæßàßÍçÁ¿p™át>'ÿÏ'qæ3`Œá‰?x‚Wâ_@, IDAT•J·—ðöëocßóûðÆÏßÀ™¹3œ ¸zY°àuÛ+6TC´ó&g^ tƘ`å"}ïV›ÎNÃP <<þðªd3º®ãK_útUÇÉ×NâãŸû8œ!ž'DZP_Àà{±í¡mxáµ Ë:˜x¥T ’$á’t é¡4îþßîÆÀè öÐ¥CÐe£É•µP¢--ر!Ò©* Ÿ=]ÖQ÷êHjÉ6™fC60Ž1&žgÍ­µù|_ÿú×ñâ‹/ð±Ï~ )=…ªTåRý?> ßõqð•ƒxô?<Šl1 Æžù¿žAà8ýÚi|à÷>€‘™‘&&¥§ÉJÛ»T q?Ã2ªKõ%œ[:‡ñÔ¸x×´†+K2 •ïžpòƒ˜«Î‰•Ùù*gá{ræIÜ5|WÛ»}â™'pïc÷âð/#¥§ÄF‰¬ÈPHŸøÃOàÐk‡ CÆãŸ}'çO¢>YÇÀ{pð_âÒÛ—ðïþèßÁJZ0ØXÂöüv!“š2Rm8ER0šÅrcY2uŠ/Æ¢ÛifÚþ]7»Nÿþ³Ÿý,î½÷^<ÿüóøÜç>‡÷¿ÿý<ÙPU1â|íµ×ðíoO=õ^xá=zô†è×´¶F;¯ƒö`äAÑúZÚ_S*¶fk„0²Ù,žûýç`¾ÊŸA@·u<ô‘‡ Ÿ’ùŒ^³ñÞgß‹©Ì”Ø]µT ågŸÚr×Ô¼šXߪ4*°:^&Gw¨"òûÉ*Ÿ~œg󟽒S\n,c<=.(-‡C8:w´ãJ[+)<þøo|o½øŽ8‚‹•‹8³x<ù€h¹ÉšŒ]OîŠ:WSLJþã‡ÄÿÞwvö¿¹Ÿï K'ÏéÒ~2¶jC“5ñu¯.˜á&Ó“¢’5d -!ª?Æ8¢úüòy>¿ å…´AÐÚ!*ß´ÉÁ]ÇæŽáÎÁ;;ž‡3‹gp©| Kõ%Ô¼ZÇ zøòaÑæï–÷Fô¶”4$õ$*Š˜›ê²/à¼ì­Ï)©'1íÃHÅã–QtVF øÈi©¾„Û¼ö¬ýûösö’»Ÿ¼ºÖü¬ïû÷EÎÁÔ®)LíšjûŒåÊ2'ÎÑ>ªÒ:;7Z½b`BãX¶ˆ¾•’“0ÁGëLó±‰ÇVÈ¡V1Çqðû¿ÿû°^µ°P[àæŽq¤·¥ñ«ûŽÏÇìŽYT½*îº[PæÌŽÎÅ#¥G"gÙó=¼tkA˜+4£´¡‘6¸ØL7ÿ!‚[“Žv©¾„Ûno«ÔdIÆPbgÏ’ªæ‹N»€ÉÌÌ ¾øÅ/âìâY|óÕo"e¤P®ÃÊðÄB7uÜõÔ]ø‡×þ¯Ÿ}Îe9“3œåÌcgvg$¡¾\¹,Ρ©˜}ý9uRë‹ð_t0J©RÛ6TcØ–Û†Åú"~qâ%™ #éÆêc*¦à¦9(c ÷Ü'D Ù€I€U͉‰A 2=×wÛVÖ„Púm-ž¦sðOPRœ-ÌŠSL;®?y¾×õsÉiY G1Ÿ_>Ó §!K2—ÿì°{ILT´GNî„U °T+ˆŠPçD`a©–Øw}ëò[¸\¹Œ»ï µ½Ýèy?ðáGë…«68ùN§ ‘13ÈYE¼tPè´ÎÍÞ¸ð|ø¨ºU¹|¤íï,Ôp~ù0ù6þüÖ™=%)=%q¨#åû¾ ‚b`8qåcØ’Þ‚#sGpjáTd\wvé,&3\J—À‰€¹”D>& ´ ºÉÇR•ŸÔ“bÀ 8"~£Yn¹úBmu¯..O˜1ËVmqÑ‹Éb›YØ‘Qßí¥™*Gš†Qá–·¡Be,@©¶( Ѻ©VusŒ²$C“´ŽÊp[‚yÆÌDÔ×èY´®x·*7qBO i¬ìiŸ[:'øî;ý¯œ{÷Úßá¿üú¿à[¯ ß9ð¸p@Р†é»U脯¹5Tì;· -™¡Qq¿Ó>áZ[b5¯Æå;8‚U€,ɸ-Ê2ŽÌuÖ'æO`Ô…£;8xñ`Û»8µpJਣÒ)“7>3¥µ1K÷Pž”5¼F׎͠=ˆ´žŽ|>½“Vö½¡ÄjnMTÃi=…ú‚HTYÅb}±srxøå©_bïÙ½ *«¨4*HèMñ™.Õ  ršT¸Â€8vëKâzŒ¸óuYèñ‰ôÎ,žÁÁ‹±=·]ÐçV½*&Òbõ*|–ß¼ô&tY䊬 ˜š)Î4m]¬v/;éB„ïgâ~z¾'Îu×1Cû’3s|°¹u2WËo¿ˆ‰Ìþýì¿Ç'w~¿·ó÷ð‰;>ÙÂ,öžÝ‹WϽʕçêK¨ûuÜD”%[»•2“E@_npö¼S‹§³r‘nmŸ†$ì3ß7ñ>ìݽæ|ßð«YJOÁ‡ßvÖã€~v©r)ÒR¡O0DœÏPb¨+ñAÕ­FÚlm¿`³êÐdMdß­Ùµ©šÝI‡ÜTM^õøu!¼Bm¹Ns|jËjŠK³º& ´êBÁçÎ;8J§”v°uºt5!hç«óB™©ÓúÅÛ oãÇÇ,@f ¯S‹§p¥z93'ÆÝ¡ÖÁ Ö±+ÇpäòlËm‹ %HbÍ ‚„„ö¿[÷ÏiæÙÉˆŽ¶”*!¥§°ÿÂþ¶çtâÊ ,5–pÿÈý˜HOàÈÜTQäî±+Ç`)ø0QNï3©%7>͘iŒt<І;"ภà›­cª‚h1e¤ø{tù¨ ŸƒvrPûÎîÃÏNü /~)²q@{ñ„Šî6O$>zªX}på ‰iiþ¼°ˆÑµZÚHÃõxUDII­ª²ŠûGîŸ+3ÃÎ04YÃѹ£" Ö½:_:Œ±ä˜è¸Ñ]§@CDI±ŽÙiÞJÁ*àNfkM€V°’L9ºÓI>GY++˜ËN¾ò?OüOÔ¼Ûò˜è‚ت¡Ä{C‰!üèèprþ$ë‹p=WtÏ„P‡Ï¢NCBK`©¾„ e¾%Ac°pÐ+}­cBIí©R¥qƒ S™)œ_>/0.´¯/1 U¯Šw–ÞÁˆ3‚ñô8¶å¶áàŃ8·tpðâAت±Ô˜h+²Ò5©`Œ!kf-ìÛI¡²ëˆ¥ù)Ù"?²ZEô5ìÜÒ9˜Š)º˜Kú^TÉLw13-«U ”åeÍ,ÅhV[µÆ¯*nE¬UÑ…q}WÌ é¤t×ni³wC]†;Ľ5Õì%…±p ¢YÐjNƒØ“4YÃ|}ž“P4*mÏe¡¶€:üOP%ÏÎ>‹gw<‹Oßýiü§Ýÿ _|ø‹ø¿!ÚÌ«UètÉXòãc?†")¸wøÞÈ÷?« lqF"[ ­²¦ŽætM$Ý.ëИŸÁ[soµñˆ¿~þu¤õ4¶¤·àöÂíX®/ã­¹·"ùÍKobÀ-B"Wéd3YY3CЀR€îÖ9a`¸­p›8G_%²‡Úœ%цR@Ê,ÖyËÝõ]¸+öÒöÿü~¼ðÖ °5Ëõeì9»'r7ª^i“'‰Ýª"öQ$¾J>g$h’&öî»%³Wc)#%Úœô|ŠN–ja:3ÑÔÊVˆ©púßg'Nжû¹ås¸P¾€™ü 4Y$¦fŠ %K2÷î Óc§UgĶ֭ã—12â÷õoÕv;U©ƒö ¸ õ™;‚_ÿÞS|Ø÷'«{8úÄÖ'`k6þÛÿ 'çOrzY=ÅGD]Þ 9I×_n,ãôÂiTÝj›.=uÏtY ®«1GwD2:•™ÂbmQèÛ“BÃbmË1š…*©Ø]Ü ERð‹·ùÚ“†b´1©¹?Ç“DųÖLr=f¨ü ÉL†!ð>G¸ô°X›£;J‰ÄDf5·†Ó‹§±ÜXUµÔ)ˆ;jO«k Y#+ð0t7hìPskH›éU“Ÿp—‰H…z 躬#i$qôÊQœ_>‡K·%HžÏ•á¨S9‘žÀcñw¡ðäQaJ×YoXΗÚòç—Ï#kf# :u\èÝw+RzªÐC`à´‘FÞÊãäüIÔ¼ZÄÿœœ? MÖ"`¶ûFîƒ")xéÔKp4Éaq/ +°ÚýÊšYøð±WÃkˆB"|_‚ ÀbmŽæà©™§0ä Eæüy+/: a|À­à¯úÛÎ×x[8ìܨUDû®­­•pYu«¨ºUÜ?zG„r$ 7Mˆz”^$µòü€Ó &a*¦¨lSzJ´e=߃")³ÜÖŠ®á7àhN„c˜> c¬£ð ‘He¬Žp‡ÛâU@ðL4ì|Ï.Å¿ûŒ¥Æð`éAH’$´¤Ãæ®@°¯¶IŽžðö@[0>³$Ímj³ŠÑ&ÐBŽ»µýØêLóV^ÐçÎfqfñ .–/pE¹‚¬™?ƒa&7ƒr£Œ“ó'Ñð8~å8¬áÜÈ9v«PVÃ-ІÆj”³„TYEÝ­C•Ô®¨Ý!‡os¨²*ŸK•K¨ºU”eáØ.U.áùÃÏ£âVðñÛ>.¾ïdškBï9³Ëe!eIŒiÝÚ‰aÒpêîÊhÁª›«1SY‘"µ5[$±E§(¾+%÷”d–R%(’‚£sGq¡|–/t=fÏoŠ7…‚1iŽž12bK",ƒJݰÕ\ÞÊ‹=mE^»  s/x|£ÉQÜ9xgÛß«y5Á=N Ö}#÷á®Á»„bž&k]ÛЊÄT°•µ=ªŠÃ>Å|)ê¶Ó¾Þ îåtfZl’ˆ»â–q¡|E§?ðÅø4gåpÇÀhø Œ8#‚ ’’„n€¸ðs%„»­ÚðáÃóù*)çækóÈ[y<¾õq &1âŒDŽ”žŠ$InÀ»Äq@ïÑ®T¹¤$‰M‚!T _þ¬•…xXn,à <<<þ0î½M!zGsÄÜ:Üv÷áÃPùŸgÍ,TYÅ ½Òî¦}Oš}æ­|×¹Lø³‚ -ûÖñ€!bÞÔ­ÍKsdrpA´¡¢;YÚH ÈrmYTdWªWðƒC?€Ä$<¹õIÁŸµ²m+ržïA“4á8V«–IÄ ¡%°kdW[HI:’Ãé$ÐRójL ®ÙÒ͘Ar²=·~àãðåèù5 Le¦PW~Ædf¶fãÀ…(×y`Kr!›Ýtsà¶fG”þZ; C‰¡5¥'ÍÁxzK%~¦ºt>òf^´Üe&#cf°P[ˆè¹ÀK§^Â¥Ê%<=ótd IWt<0ú.–/âWç…¹êMB¦n: ³øù.”Q` S6¤BW Q‰ÚªÝU,ƒÆÄú5–ÃÙ¥³ØwvdIƶì¶"©¢sþ.)¯{_gÊš+U:­®Ò]ë{R°­ºU$ÔDOcÿذT Ž?Úv¿è÷×$ ‰‘øJLÂãÓã¶ümâ.…´­ŸCûö¶j -ˆñôxÛsUeUàs®¥B'Ö:MÖà.ÆÓãðoÏ¿½RÀUç1WÖô®ÆÖT<“™ŒÇ„")˜-ÌBb>דè%‰Lh AD¤:­los•9”R%<¾õqwN Gî4*È–ëËKŽÝr3õ«èäl¨µNíYÚmÍ@YÁdfç–ÎAWt|hêCØ1°£'}[BNS6*¸Ö›€ŸšWUN)]™Uä¼[/E·FˆYUR£+K¾/ÈHº©%·òâ÷ õ©^2eB!W¼Š¸Hß=ø]\*_ÂSÛž•¾y3éX„1mt3[Ñ%Cön/ÜÞö3¨Â }ãpǤµ3Pój|œÑt,¯½övïÞßþí߯'>ñ üã?þ£zô΋É"òV.À«ï¼ &1Ü1pGÄ9i²†í¹í8»t{ÏîEÅ­`kn« ’ ™ÞÕ:·náï·Ú¾r«Ý–¿‹Î$W¯âš ¤$ñ6 ÉŸÒwZ¨-àÐ¥C˜HMDæÆd3¹Œ&Gñòé—qvé,¯LY t¥»Z:mtˆPx½tÜG³3 'Á4ÃW$ç—Ï‹îÙdfï,¿ƒýöc81ܦá^[ u@:wª¤¢`PskðÁWœWý·&kœõ­ ÈíÅéË’Œœ•CÎÌáÞá{CaØ^CÜÙüldÅÎP !GÛm>‡ü!ÐÓzºm;*ê†ßWkDì¥Ë:|Ÿß‰´‘ÆáˇÅß9¿|®ïò]†ˆßÉšY¼oü}KŽñ®SĦOZO¯y†²fV¬ê².€ÎáÑ£FƸÄß ¼\÷êIŽ\Ós¹å*ô0rÛó=qaÃda§SJ—0šÅãÓcKz˺Ú!4÷¢Ãç|V%1I°°œ‹;ðÛ+×w;^ÂŽz“ÔÀTÍHÕA—È|$ôD×ߟ `œë»H«Ï‘Â] Z«4*Xª/áùÃÏã¥wð¡©a{n»È`‹µEÌ›¢,«9*Z ’%»FvµÅ€_tÏ÷Ô’mã“0‚2õð>¾ïûÃW¿úU|ýë_ÇÓO?-‚ž&kÂií(ìÀÅÊE¼tú% ØçÓ[s[ÑðxùÌËÐdM€r(éX+ØÑ^}$Ø4+œ^QßC‰! %†„$i·ä!ep„/1£•e”e‘ľ|ËeÎ’ú©ÌÃ{Gß‹ÅÚ"k‹|¥¨‹ n[" _ЦRkš>ƒ6<6ÚZBˆ©´®”¹ž+:UÕFªÌðXrŒÁ·åo‹&Ò Eë{$ ¡pêFF$v†lA³[¡¯]qÓL¾—ù9žÁÄ ƒ¸¿xÛݧwGã…ÑÔ(WÇk¿ÐÏXmý0Ü© +ãå­|Û¤9uÃk\3Б 0ŸXª…¢SÄ™Å3BÁíÄü  W:S?Ûá®Ó£ˆ„ËVm1ßïåwËš¼sKïÎR-q_\ßEÞηm±$´„P‹l5?ðEB}«Ù5tG[á&§`ç,ÍêØF´9 !1´î!‰p¡\/ó=ÅæÎ59¼Œ‘©™mkc–fõ´ƒk¨†ÈêlÍŽ¢ê›ßÁê³Y z^à¡âVP° kŽ(‹ÏÛ¼ê¾T¾„ç=ó'ðÈø#\Ü"äœuYÇ|u 5±’-7Å7z©RT‰Éttjî ´9HBs“UÝ* V!t$IÂåË—ñÅ/~ög&TtE‡¥YÐ%µz %§]ÒQn”1™šìÚ*:E¤4Ê2J©’Xku³”žÂDf"‚4§g´Öü<¬wílÓ³ouúy›+»é²Ž”žBÅåªc²Äå¯ßù5²F¶m©êVE’4“›§¤ž\³ ð 0ñ9añJ¸6á èÍÑŒ£90(ÍÏi‹Îæˆ3S1‘PØ’ÞM²š½ÓbÞÊGI™ÉÂi¯©˜mÒÆÝ´šWë9 œ)kf;Úè»Jà Æ”žx :(LY“ìE<«æêi)UjKÎI¦:@ÐS÷o­€n«¶H–¦³Óhø œ¼Â±+§O#kfEBN°¢cÒ$¸q}WÌþ ËÓKrEÏÈVíH‚^n”1šmûþ„ë´qãùÍY3qŠ:µWÝë‹È™9±§Lt¯^àu vÄc|5–5²‘0iBD }f•ï‡àU·Š!{¨§ƒOhª˜Ãq‚ظ¼À[È—2RP$…v ŒÄ$ ÙCÐo\zo^z=„ÝÅÝ‘ÑYA#h `D•NAn­*…æ™,`gŸžï Ak  ÷¹Ï¡R©†¹K/áÿßðâ?¿Á|À\4E`&Ñ V“™IŽnÏL‰êŽ6ºÃmÌC;±T[?“0ëY÷ÙšÛºf•Kô²¦bŠñPÍ«áÂòœ\8‰éìtäÐ\˜~7MÖpñ~¡Ì&YY-€AȺþ Ž×½¨P­×’ZR8Uj¿‡[þ”lÚ_%V³g« ¨”xÐÚZ'ÇBÑ<<4öP[uO+&¥T Õت-Z›ª¬ 6³µæˆš¬ ¾åNJWøL­õg÷Uc^àµ9d2‰™™‹E<ûì³xûí·Q.—E+º/àÑ÷?Š<þ¼öýH«i 4æ®6¢2·åoCBM`"=!œ‡ ¬ì!/&‹ÈXÁWvËqFÖué-ÕZ3°æ­<|Ÿ“9ß½¾X¾ˆ ðê;¯Bfr:ºîs a¢¥¥*öðY‰»ô I·ÙL°Ã€¸„–XuøZî%ÝC6×:Ve&à ¼ƒ\€S™)®JTi{¤j;kfÛÎ*Ué¤{5²=½Ó”žÂdvr]INÊH‰$·Ò¨ âVPsk‚#ÃPƒ ¬ IDAT ”Ý2ÆRc˜Ä7($Eü>ô^ÖœñKš¨Ðï¾§ãžÇVm¸+föŒ±ž*tBºö [ÎÊ!kfñžÑ÷à‘Ò#m­&šKLÂŽ™æMþlAÞË;Ðe;à–}{j¡Rë²Õ驒ЬÁÙûˆ¨ÄtêÔ)¡%Ú$mé<20!ÜK…žÐ(¥J=µ„í霕Ãdf™ ¢hCgͬ8¿t®h³ÅTM±£ßJ‹Ý-Ù–™ ‚Hm> )‚EÏüšß£žà¸™fE­Ê*¶¤¶àbù"~ýίa«+€]zfÔq¥1‰6Q«¼”*õô.LÕ„£9m<%tn»%]DÁܺAOªq@oÚ\e)=%*7šéR+t=m¬õÍVèÀ¸ð‹¶5>r=#Ós’!3##ÖÁ¨}äz®X« @¿š1Æ0œæ„먌ÒFw݇Ku©iß[‘Œ¥ÆD›ÓTLN@"‘±Áš­=´“ÄA Ö@TYíØ6ËY9x‡¥Ú&3“mŸwîÜ9üÍßü þôOÿ{÷îÅ_ÿõ_ò,Q ^î&€o¶0»r‘›üÚag`ª&*=´BÚlÍ®E ¶éÜ4TIEÍ« 6C1P¢µœÐ¸\¹Œ·.¿…¹Êî¸#ò¬<ßë_–b‰ Æ’cÈ[yA¨´VP˜Y’HLŒ/°ö>ðUWèz’S27K[ã p®pHF» i….Üùñ|Oœ‹nwÕVíŽ: ᤠW®zZ[o[–8û‰òzÀÀhrTðÙ[ª%~Bï§tÎlGxŸµºT8t3ß÷Eå®h¯Åh<¬N8p|þ8ÒFšcš$EÔžOéÈÂR-A À½&JY+ÛÐ]ßÅprxÕä9œP„ýc?îöMПÝñ,><õáIQß‹ìUö£åNjÃRÖê^Û%6UN“Xq+Xnð}Ä^ƒ*c ö€è„þ¤t v½‘ÁÄ ¶¤·¬«2²T ã©ñ®¨xâ’WeŽæ%;Ƙԭ&G©Ð½cÒàù+²¨”<´t3×sQõª˜ÊNµœ]»vá+_ù ¾öµ¯áK_ú&&&"IKpÊPß÷ÛX$3oÊÉ’ófXQ8ó|oEaLVzn9:ºƒ‰Ì–jK°»/ UV…ö€*ñÿ¾P[ÀËg^†£9ØšÛÚÞno¢µeIŽÐšRÛ|µ=ûð¹%¡Z# º^ˆ®¶#Q° â¾Ø çH ‘N¹QÆPbŽîˆNµž[;(¤¸Õmw™žO§6U®kuÎZ“‘õ¡ã#Ͼù]HQ‘Þ•¥ZB©ˆ`HJwÍnË*>ƒô™è´Ð ¯£e ΋QtŠbW}©¾$4LÅ„®èhx|œV}SFj]ï"gæÚÞkÕåR̫ݵ¼à¥~C0+Æ}U$9¡p…N³³:úÜpI•Ik!1Iè’×ý:ÆRcë ªDáI‰Í’‰x¡ÓZ^7‡±%½e]Žˆ^ZÛHáì\•TŠKµ0•™BÙåmd]Ò…éE¬AS´Î½ÙF'`\'Å·´É)juY_“}¯S"Aà—VZVb ³U»+g7ÍêÕÜëú#Ãlau¿Ž¬•í hFb’ØÖd 93‡…ÚNΟÄla6ÂOM-Ü‚%ÒZCì5y¤D–4ÂU Ñ¥öÃc(:EMÐ ’$ ^í†ßÀPbˆw 4K´ŠÃ]¡ºÇEWh¾ i£w r¤¾Œû"Ý*tUb¬¹µÈꦮ¬PO“pÎZ ŽÄév‡}ø‚ÕíZîâ3›x[µ…€")³RJ•QQp9XÁåÌ–K¢«Vq+˜ÈL¬‹Ô%gå"ì“t7«·Îi›(Яf‹ê–è.µ*©¢º- nYdDÐ~³b²(V›V£#íè4šLSÔVr4nà ñ[µ{úŽš¬uE¨®öo vžïu«É’ÌÇ:O¨ˆ<æŠ5¯†Œ™é„;9ŽV"25¯ÖuŸh,ÇÓã=¯~…¿CBOðÖbK¢ÕðBÿ›Ä?Z“¾àXï*Ö°3Œ‰ôĺÏÄz,gæD'…hbIÁÎÁGãz®x¾u¯ŽšWƒ.ëb-ˆRHÞ²—v¿,ɼj"mðf¸_]3ºkT]ÑÈŠ’Ò P° B…°æÖ*|æˆŽØ Wû¬V¤{¸KØo=쌙“XGB“ºWG1YŒT‰T§0cÍ‚GS4ñ,»V§ÍÞF}_…)ÐUvyEjz*;Gs§¥X"¡§÷Ô“•Åj£Š­Ù­ë*¢Z™^–f­Ù:3ƒÒ¿ë/ô.í‰IPdEÌûÐUYå+i̓Tu«\ŬÃÞ©£óù{`ÝS1G</¢Wô|¯çVÒzæ»âb57i#ª×NëJ-6ªb’z’KÓ6“œš[ã =d¨á=åðg$ @j^Snv¨€u™Ë½Ng§× ¶’™Ìƒ^sΰ½`…Ȇ‚SkbðÂ$µÞU,ER8r¸—>cfD@§¶k'Ršù20ÌUç„R`ÖÌ¢á5DBI‚6½¼OJ|Éá×\ÎmÞÏ$ÍÑ饌”X)4U¾¾ÇCÞÌ‹Ö,Ý-Ú¦ ;Þ2é–[ck’—ÒS}¯Ì²f£ÉÑ6õ<¢¾óü30AÂäh\:x5Õ¼ð%b–Ž£…&)±ê,7¿¡âùާÆQLrI\+ïŠÔéß;ÃP%NEk¨ÆªŒŠÝ’ÑprÒð"\µÈÓâPGk£)Žo©€Ndø:ÉöË¢ ]âN—X“5Œ$G0™™\?Ÿ/ƒàЦŸEd€ µ©UYá¹RÃop°Ÿ¿Âú%1 £ÉQÑòt}·gT«ã$t;­H­6ÏTd[2["ÉzœáÂΈ7è‚20¡~þ LšõÚhjtÝc‚õ˜¥ZÐMŒƒlÍÆw¶ ö„G7®ï |ˆ£9œñÍ÷¹HGmd[³E SØ}©0Cö*ŠH,N;âTÕyàq‡½F¤:ïDÝš< '†QmTÛêFj½¯vvï¾u¯I4‰‚µuÇ<§0¥ckŸ@¤®çnØ(…Ô)ë^] Õɶ緋d;_±Ì™9 ;Ã"‰#[mpY髹3y+/ª~ß÷{‹©’ŠÁÄ Ê2j^ ö€YÄý*+tz€^Ðÿ`—Ô“+-ö«^âÑäèU£{Aq¸XDÍi£e(;Uèä˜m£†©zÖe½#¹`Vªùö\Ã1&0únÔ‰h ‚òÕ¶8“F`<©íWøm4®­"9‘ª<@ßÐÛ×àòV^p™Ïf#ç”­wVlImÁÖÜV,Õ—xR§§VeMëV¡“`M(ãÞNëg„ã>¥.:Å•²,É\•‘IpWŒ$(ù°4kMv±b²((nÃòÕ$wW›°Ý;roDé°á5: ]Ñù6E€6°âjÁ•VF  NIJ—4î7Âã+hu·MÖ"Â'DÙ«+:j Vª¬b&? A&1Œ&G×ÿùMý ê|èŠÞ“Ÿ¥õàºWçóóÄð-'Ȳ¡Ö¹¨Zï_tk{0ÖR1K©žÔܺÕN 4Z¯é§YÚ ˆ‰¨Di¥„æÇáïíhì."É=¯cw]XMÒVæX¿d«9Œk™WªYfœ$ ° « ä#”Ä|_8pšñ銾)mÖ«©v†œ!”e芎Ùüläÿ¯ûu!âAl,5†©ì”è´¦öz:q&„»g½°Ûm„¥4_] ‘1Æ" —*«‚F•¸¾|xæÜk÷ËÑŒ&GEuHçd=kR×jÃÎ0¦²SX¬/ŠïÛin,3Y3ËÉ©|oMšb€£Û¹s…Þ¸4i'™Ñx‡u¿.xÿã.Â:Ôüþ{’1¦ß‘4®vœÆœ·‚œ™ëÙì‚€Q­…ŠzFµïû}誤b(1„ÅúbÏ*fWÛ àIëwí×Z^¸(ØђΚY,×—ÅŒËÒ¬H[’1†±Ôj^ ¶j÷hIÚ’´¡ÓFZ$@´±Ð¯ç«HœÎTbœÑ¬æÖ`+)?©íNx ERĪÓf««1JÄZIB¼€ËD†E^‚ À`b«ÀÑûM&0[³{b‰ Wƒ­mhÒŸï{Õ*+¼Rjb9¼Àã `¡¦0E¬""¿MEKímÆ<À4RÛ̳ H vw ñ]Õ;ŽŸdIư3Œr½ ½Í¼%& šéÖ X•yÑFY8y·´hrH¼°ð“­Ù‘¤¦îÕ1ž¿ê‘+uk^ ÃÎpÏØ'GsÄ*l¿×oê€NZµ‚ ôu=†ñ3„…ê v¡o<ªlÂ|âýFñ‡³úRª„¥Æ—Tm¶î(µ¶%‹É¢ÉôÚr¢`.3nàFCšÕ]?QÃ”É›Š‰J£ÅSºvedªæ C ï+^c#¾›&iBÎ7@€†×À =á«&fC]Ñ1žŠVœz=o4Ž!+7ÊN ¯z•gv<=.F¤«þ}$IBÁ* âV`ª&²f6r‰!°MŽŠÎ’pv0Z©Ú,°0™™Ä\u=ÓµZ´Qój õ€e&‹ä¬UòW—u±’JÉðFú<úCn'¬Q˜ÁIL¶Ü6ÑUòïš8Ô5™ u_¬æÇ2fy+ß÷bë¦è„J¥ªN‘”5I6ªú©yµ¾*êHL žp«4¡&zRºæ–^bX¬¢i²†agXÐ^vZËH)$T¾§ßë‰è]©Mv4ïëgÀÌZY>:Q9õ)B|·"µknM$Œ^à­*ez½d&ID(´R®"8FÁx&7ƒ¥ÚRä¬Ç!ÊL•Uݯc01¸i3ÅQgTÌÑë^½Í)ÓWÕ­ÂR¬6Šh’ íµšL ¢î×;‚97Ãd&ãþâýX®/c 1Ð5q"ü„,õFÓ*1©£mx ÎIÐÔ¼ïõçõ\¡7‘êD«Ë+|¤Ñ:î´9»_‡£;×´2&1.=Û:ªéåß '†;ʬÆ}=½ÉžFN_—õ¾®¬‘%õ$òV¾ï€(â+_¨k™Ë¯ÇòVžSÎ6×{Ëhúð;‚ELÅÄxz93·® ]‘¨LmN5ü•Y]?+œšWƒ©˜mÁùrå²`À£ïᄄÂú%®²‘¤Œ™áŠXMhUV1`D’Ъ[ˆXŒ¥Æ{ktÍ ½IåKÒ³Al .|_ˆ:´î×;®ÑŽ>µH;ê^Ïîöüv,Ö…téõ°ag;‡v¢èt_ß$Rj¥÷н#¡­Åy…)ÐiœH¤2$˜âù4IüaŸ Éf ³8³p¥TéšÆ“0˜DÆÌ¬‹0‡1†b²ˆÑÔè- ˆ»æ€ ™¤pö®ÍÈIÁÖìÖ ¦_'ÌÛ¼÷°sΘ‘P¡ ßGFÏt¼ ÓÙéueÈÄͬ*íû±5·†´™î{Ëæâáj­îÕ¡HJ„bÓTL¤Œ”p`º¢÷¯±Ii7üŠN1Òñ"ò˜š¬a49ІßšÒ=;dI¸¾‡Ù´ŠU’1˜àz ²$w¼Ÿ‚Ï¡pJôÑëqä™ €ñäózt†û‹÷G(_;=—¤žä˜”»ôÂ'á}?ð¡)Ú†c\jbe·¼)pE£.Rl ¦Û ÛÁÃDzâš*à=ˆñôøº•{à†îؽ;z“±ˆœpëq?[]“™É¾ÏKÒF4 A°© ‹Nz¿DÑÉF’#ërl´B¤Ëz[×a½²¯Wå<´„àöwvj^ é‰È¥V$Eè@œbÞЗ‹h)M•3¶þ¾AÀÑXZ´­¾-· •FEð:¬§R!Ô± uÙäd)UÂbm¶jw¼+º¢GVÉ–ëËB=°WstNIZu«}Oî×JÜZßa«ìÍ鹃):c@h‰=ÉopÂÐWt$¨ãJÉVÍ«uìødÌ î¹wCæ3ƒñäúUð’zò–déK…^÷êHéM)1Æ0žï;Í#Í•ÉùlÆž}ØF“£‘]WrˆÝˆLÕ\W‹u5-ñÍXA´U ‹2|´1[˜tH¨ðùzÁ.lúÌt½F#R­jµª[E1Ylsòc©10ÆeèzŒV×jnÏÏ7Y¤bÄAÍ«!gå:¾†´™nk'×¼v ìX×ÈŽa:;Íùßõë‡nfŒ­Y™;ÃA«^:tš;àxr: ½²."H½Œ1Æ“/ŸH\ßí¸ëO]ŠH°SzjÝ´±äb»Æ€®¬¨jÚ¬ñ÷õ3T -!îkíeo´ÑŒ˜œItk³1°uWd¦b¶‘WÒÑZUǵIÀ†»$&RL1‘™+1áKK¬\7º%õ$_?벎·ÜXÆxº}Í'm¤¹‰W[÷y#§Zój×…d#kfáèΪï'cd"ï¼îÕ‘·ó‘ÑC¯¶%³ƒöà ß­É›ùu%ÛÔ’¥¡”ÖÞŠt,9ñwŽælE®º[â´QÝ ^ÙôbëC@§•'ÊoD’k1J¡*Q—õMÙé ;vS5…ó«ºUdì†ÎÍLÅlß4w6c (kf#í×å:r -ñÔ¸ ÛŽp'Kh ˜ŠÙ66¡gŒg¯Œ1Le§.e=f¨§UE€¼ßôïlª&¦3Ó«gj““]©^Á=Ã÷\Õ-kd±½°ý†_WJ›éux5Y|´–¾÷Aô%‰É[y±MC]4*Ô:IUÇv“t/ðÂ$.¯gÛ«_–3sbg³@áKMœçªå¬Ü†¶Q;µï}ßïIæq#,c¶Wk“™I¾oòÝÞÖ‚*©ïŠäQ‘¤ÍtÇ€îùz¢mu‹l<=Î÷j×¹j«6ênº¬wýÙý¶™ü̪àÑœ•(~Ò¶¿þo**¦3Ó›šh_mr7ä ­ëîÓºX'Ï÷ú\MÕÄ =(ŠMÖ±©Æv“t]ÖÁ-¡u|U½9Â!lsAFa`œx. ¨Ëíë1´r´ó׬™ß*Rš¡É’Q’£¿“2R7üü<üý㬙ÅTvjÝÊVm.{ÚØlqFVEç'ô„(–K˜˜½¦ä1keoøj¯+kâ^6×Çd&wä#ðàõ­ZMF¶{zžïu•RŽí&èD 𙫡›B*³ÙFË5¯Æ©Q¥Í褸Á†W¦º¢·!Žën[³[{ú÷F/^ÄéÓ§Q«E°pæÌ\¹r¥ë¿wtRó.×—1ž_¡¶Ãdf2ÂÙ]iT0hn ßÁFX¸Ã6Ú?_­BO­}‡F4×s$±ÖzVBå¤;u— qì(츦YÿÍdè½ÁKë9 m‡~%daŸ@œò½Ê2Çö. è2“E‚ =±éˆÚÍ0C1`*œ¥,cf6d”6ÓP%•ï33¶áÝT¢+D®ïBWõž“þõ_ÿ¿ù›¿‰Ý»wãÅ_~ôèQ<÷Üsøã?þcüîïþ.Ž9Ò5i o/Öü¶å¶Eº 4c¦ß±ì6%9ß%N¼#@ 0clMzËñôøºªì®)¼™?¡'°ÔXB)UBÖÊ"¶¨©² Æ/ɶΠ‰4õÅçé6q×w¯Û®l›ÐIÞ^vÖÈÞ”,=º¢#m¤QvË×e×5¡&2R‚Qm£[Ía=r€¯„%Ç`ë½µó}ôQüó?ÿ3>øÁFþü«_ý*>ö±áë_ÿ:þàþþçŽF£Ñ1¡ êÈ|&‘d$–2RHi4<Þ¥ð|ï]pï¯IKæ–êKp4gÍŠçjºº¬ÃÑ4˜5³¨ºUìÚy˳{uë:%½øHAµÁ´¯­Iö°3,ôíéÜn–$@p³CÁ*\WÐßPb{ÏìåÄØØ€×q}¶f¯K騛¹® EáÇK×u4H'àÂ… x饗ÞX|{/îÅ]Ò]–ñÔ8^çuøŠÏ•æ$õ]s~4EÃDzóÕy”Ò% %† h?ÀUVVœi{#sãӯ›ßa ªÌ©|[“k?àŠÜ?I‘Ox©˜‰í&èšÕy¾ÙvÐ[«‰¬™½nΧ`xKÚÊoxDf²ú•elÍmÝL<“ÉàòåË€3gΠP(@UWñÒÒöïß p‰]ÂreÌèüÝòVš¢¡îÕWE†ß¨ á{ÇÞyÎ}íèH*ŠÉâ¦oc¬×1bz­€Þ%q%ç~&¶ ú¼À‰~ÐoÒ€døIº9WÖÈRF cɱëHZ93×u9IZѳ¯y5lÍm]—£­T*8zô(®\¹‚ãÇãĉÇÓO?¿ýÛ¿…eYøÆ7¾gžy†±â&&&ð‡ø‡€óËçñÓ7~Šƒ?<Øñ3h&|äòìÙõ®;?›™*²Ò3 ñzZ¼Ï¼¶Ue®ç¶ù×çD3ýLÚtYÇXr o^|Œ1 '†ß5›%·²]UЬHЏžïÁ¾Åw­y<=~ÝÀ;š¬a*;Õ—.ˆÌ¸@‹p®èõÎ.\¸€o|ãÁ¾}ûðÃþðì³Ïâ‰'žÀ·¾õ-ìÞ½Ÿüä'»&D¶fcÇÀŽî‡”I(¥J¨{õw îz‚ØÞýº¡ùæp…nkv_ ƶ¤· êUáùÞM;R+ôÐ 8úñz®lêC’ЯS…®H¼êêG„ÖÏ/ǃw¬»­V*•ð•¯|¥ýçÊ2žyæ<óÌ3kþ S1× ÔÅd9+¯ÎÄvË$f†bà’©­µÞ/a–V£±ˆ¸›&Ûu¨Ð[×Íîd%&]wdu1YìË K’$h²†åÆ2fò3×e®I+:«YÊHa[n[Œ´í–©ÐMŹa#"¯~›©˜œÉÑ‹wÐo™€îùÞ-ñ²¯÷®,1Öõ«B_K!ëz›©˜˜ÉÍÄ@ªØn© ½“éJôÛdIF)YB€ ïÊ‹±Ý ýf^Y»U,¡'0[˜½¡g¯“ÚHgb‹íf6Kµ:ÎÐýÀß%D†‰Ìß2‰× ß¶!°Å›yeíV°Œ‘é ‚¾Ý„Øb»UÌPŒÎ-÷ €©myÀÀ–ô–w÷CЯÒPd%^Ay—Û€=ð®è±Åv+™®´+!6KçMÂ2Uã©ñM¥Ší:tÏ÷`*fL8ð.·‚]ˆwLc‹í³NmîtYßÔŠ¹”.Å|ûﻦzÝ«·‰OÄö.Ìêâ`[l7œu´ÔÜrf®oÔÁ±¸…ºp„ûÍ(Ê[l±Åv]+t‰Ók‡5–˘ÎMÇäA±m|@¿vÐc‹-¶Ø®K@—5001G÷ ã©ñ¸[*ô[d=¶Øb‹ízt ’¨Ð‰ú8fm‹­/=@pÃë.Ç[l±½M–¸BUè·‚éÜtŒ8­?]“5˜Š?ÅØb‹-¶>UéAÀ <0™™ŒÛí±m|@÷ aIDAT¦jBSb„{l±Å[?ŒvÑ©Ý8cëK@¯{u$µ$4)è±Å[lýªÐ¾®6™Žµ bë_@Ϙ™xž[l±ÅÖÇ€îdIÆxz<~ ±õ' ®»¤hl±ÅÛÍlº¬£êV‘·òH›q»=¶>tERâyNl±Å[?º¢£Ü(c*3 ¤ÄÖ¿€n(Rz¼[l±ÅÖ/³T †l`,5?ŒØúГZ¦¯¬Å[l±õ3 ¥Çb2™Øz²«fÝÏšÙŽ9‚¿ÿû¿Ç›o¾‰?ú£?ÂwÞ øîw¿‹ï}ï{p’$á _øŠÅbüÀb‹m}&7 `Ŷ ÅýV7ÆvíÚ…½{÷âÒ¥KâÏ;†ÙÙY|êSŸâç%›Vl±­ÓÒF:î„ÆÖ߀ÎCÞÊÇzl˜ššÂÔÔ¾÷½ïµý{öìa¸ÿþûñàƒÆ+¶ØÖi3Ë—ÆÖ߀®Jj,zÛªöØcá®»î‚ïûø‹¿ø <÷Üsxâ‰'Äÿüøq|ç;ßÿ»\.C’bÒŒØb [Üj­ï]–däÌ\üôbëjwß}·øïÕj?üáñá²Ì»:–eaffF(I1ÆÄü=¶Øb‹-¶M è±ÅFæû>ªÕ*\×E­VC­Vƒ®ë˜ŸŸ‡ªª‚‡Æàà`¤ÀÇ>ö±øÆ[l±Å=¶ÁÞzë-|þóŸÇ+¯¼‚£Gâ—¿ü%þäOþù—‰C‡Áó<˜¦‰/ùË`,ÑÄ[l±õËþHÕ6}¯ IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_hyperalignment_alphasweep.png000066400000000000000000001346031202542755000245660ustar00rootroot00000000000000‰PNG  IHDRX[ ðïsRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEÜ #¹t40 IDATxÚìwxÕ×ǿ۲»ÙôÞ! Bï½éEŠHQ)‚" Eª‚ "¤ˆPšé¡7¤ B€„ÒËf³›ÝóþÁ;óÛÉ&!AJÐóyž<ÊìÌ;ç–ùνçž+#"Ã0 Ã0 ó̳ †a†aX`1 Ã0 ðÀb†a†aÅ0 Ã0 ðÀb†a†aÅ0 Ã0 Ëa†a†aÅ0 Ã0 Ëa†a†Ã0 Ã0 Ëa†a†Ã0 Ã0 ,†a†aXE€ˆØZE´ ÛêÅÛæEÙ<¿ûtïÿZ½(ÊórÛx1ö·X,Üg•àçzÖùzÕËïßZÿŠ,°d2.\¸P¤¿óçÏÃd2½r…˜÷÷'uRÖ¶ùóÏ?Ñ¡Cœ9s2™Œ{{+Û=z:tÀ­[·ž©m233Ñ»wo¬X±â…Ù\&“ˆ°jÕ*¼ûî»HNN.ðÞ2™ û÷ïGÏž=qíÚµ}½ÉdˆŽŽF‹- ™L†ÜÜ\lذC† A||ü®m¼H‘)“É0hÐ >r¹¼P%“ɰsçN¼öÚkˆ‰‰ùW•KVV:vìˆ7–Øçú‘¯¿þC‡Ezzz±Ó0èܹ3V®\ùÊ•á·ß~CÏž=Ÿù{á•XвeK4kÖ õë×G:uP»ví|ÿªW¯Ž¤¤¤Y©322Я_?ÔªU YYY6¿ëõz”)S­Zµ‚\^tó>{öìyªN¤0L&vî܉ .¼ðÎáúõë8räŒFc¡çÆÅÅaß¾}HKKûO”õƒ°ÿ~±mY,\¾|QQQ6íí¿òqÿþ}´lÙsçÎ…Édz®/“¨¨(ìÛ·OòQŽï¾ûÎæ¾111سg233ÿU67™Lرc®\¹RâEÆåË—qìØ±§0›ÍØ»w/®_¿þJ~xÄÆÆbÿþýÈÈÈø×¶eqNNKKƒN§Ã;#¶mÛB­VçÛY˜L&¸¹¹•ȶX,HJJBBBB_—<€“““øï¢tˆuëÖÅ­[·àããSäë¬Ï)îùE9^”ߟ&Bç7¼×[ÿ[¡P«ñå—^^œœœpñâE888ü£üvÿ‚ΕÉdEàÂy…Ù¿ {æ÷L/²^=ÍïyÏS©T;v,Þ{ï½bµ§)«§.ÏÚ^yÏ3›ÍHHH@zzº¤Ï)JÙ·Í?~\R/F#§ÑhÄýû÷áææ;;;$$$À`0ÀÍÍ ^^^ÈÎÎFjj*²²²›› •J¸»»©³Ë[NB›JHH€Éd‚V«…¯¯/’““a4áïï/ö'×®]ƒ››\\\ƒÁï3äääˆv²³³Ãƒ›› N???Èårdgg#>>999Ðjµð÷÷‡R©´±WÞºáîî‰hŠ…<<<ðàÁèõz(•JxzzÂÉÉI<ïÖ­[ÈÉÉAbb"®]»•J•J…ÐÐP›zBDHNNFZZ`gg"‚^¯Ç;wàååÈd2X,ÄÇÇÃl6ÃÏÏ …Bì‡ ;;wïÞ…ÅbA\\þúë/ñãW»Öý[||<, àççWà J°ull,àééi#°oß¾ "BHHˆƒ)))ÐëõbýÉÛÞ„<ÇÆÆÂß߃ÉÉÉÈÍÍE@@âââàîî.©sBÝ‹‹ƒZ­–ˆxëü¦§§#>>0 HLLŸÕ××W2¥*”Ûƒ••…B///ÈårÄÆÆ" :®À¶NDÈÈÈ@jj*rrr`±XÄújoo_h?n6›qïÞ=888ÀÞÞ^l‡jµžžžppp°iOBrûömIeÝ6¤¥¥!;;DµZ 1Í‚>$õz=âââàêê www›v|óæM¨T*‹u5%%ÙÙÙ0›Í°³³ƒ»»;œ%eß½nß¾ •J…€€Iÿ‘””„ŒŒ øûû‹mB&“Ád2!!!YYY "èt:øøøHÚ´Ð÷&''Ãd2A.—C£ÑÀÝÝZ­öù 0*"‹Eü³ÙL¿üò õë×"""¨Q£F4~üx:tèeffRI&55•Ú¶mKÁÁÁ”‘‘aó{ff&iµZªR¥ŠxìêÕ«Ô§Oòõõ%òóó£ÀÀ@š6méõz""Ú¿? _~ùE¼®sçΤR©hýúõT·n]òññ!•JEõêÕ£³gÏJìš””DÆ #{{{rww§ððpš:u*uîÜ™Pvvv¡Ï5vìX@¤Æ“¯¯/U©R…®\¹B¹¹¹´téRŠˆˆ wwwrww'?~<¥¦¦JÒÙ·oÕ¬Y“´Z-ùûûS£FháÂ…¤T*éý÷ßÏûòË/ ݼySr}tt4ÉårZ½zµxìÇ$µZMçÏŸŸyûöíT­Z5*]º4yyy‘»»;EFFÒæÍ›%éÅÆÆ8p 9’Ê”)Cr¹œ¢¢¢(55•4 2D<ßÓÓ“<<<Ä?___@èË/¿Ï;zô(µiÓ†¼¼¼ÈÃÃÜÝÝ©M›6túôi²X,b¹ÄÇÇÓ{ï½GÎÎÎäééIåË—§÷ߟ D‘‘‘ôàÁƒBËeýúõäááAŸ}öµk׎ÈÞÞžBCCéçŸÏ[»v- +Vˆ6ò°bÅ  Úf„ €¶nÝJMš4¡ÀÀ@ÒjµT±bEÚ¶m›M{ýñÇ©zõêâszzzÒ€èîÝ»â9—/_&///zÿý÷iðàÁA4~üx""š2e Õ¨Qƒ‚‚‚ÈËË‹\]]©qãÆtäÈÉý~øá@ׯ_'"¢œœ7nÐ_ý%ÞïîݻԻwoÒétäééI‘‘‘4iÒ$êСEFFRRR’x.jß¾=}öÙgN®®®¤V«iĈ’6|éÒ%@£F¢áÇS™2eH§Ó‘¯¯/­Y³†ÒÓÓiäÈ‘NäääD .´±÷¨eË–brss£öíÛÓï¿ÿ.Þ+))‰ªT©BíÚµ£éÓ§SÅŠÉÃÃ4 ½þúëK‹…=zDÞÞÞ$—ËÉÞÞ^L³jÕªö³óçÏ'tñâE±¿]¹r% =zPZZéõzª\¹25mÚTì¼¼¼($$„ˆˆ¶oßN€ÈÓÓ“Å2]²d Éd2Z·nuìØ‘I£ÑP©R¥Äºf]¬‰‰‰¡ÐÐPjÖ¬FÉy="GGGjРeeeѼyó¨R¥JDäééIÍ›7§'NHž}Ïž=€&L˜@;w¦àà`rqq¡={ö——õéÓGìs…{žø€ÒÓÓ%vêܹ3U¨PüýýÅzÝ¿±(¨¬¯\¹BNNNÔ£G›óîß¿/¶O"¢´´4š0aU¬X‘ÉÃü¼¼¨S§NôçŸJ4ÄÚµkÉÓÓSÒ®üüü¨nݺ6å1~üxòôô¤7nˆÇÓÓÓiúôé"¾×iÞ¼yd0ÄóNŸ>M;v$///òññ! ¤o¾ù†ÌfósÕø§ ¤¥¥ÑìÙ³I§Ó‘··7;wî_'°zõêE^^^´qãF:yò$;vŒ6lØ@[·n;¶#GŽZ­¦_ýU¼®OŸ>€š5kFëÖ­£“'OÒ–-[ÈÝÝj×®-)\áÜyóæÑ©S§èÀÔ¡Cò÷÷'I…ÉÉ“'“R©¤råÊÑâÅ‹éèÑ£túôi""š>}: ?ü:uêEEEÑàÁƒÉÁÁ<(^ûàÁ@ôî»ïÒÁƒéСCôðáCJII!___3fŒxþùóçÅ¿K—.Ño¿ýFÁÁÁäåå%¾àOŸ>M>>>Ô²eKÚ²e 8q‚vìØAõêÕ£²eËŠ/w½^O|ðÙÙÙÑœ9sèäÉ“´wï^êß¿?©T*ªV­ÚÖ† U®\™.\HǧݻwS­Zµ(<<\"Pƒ‚‚¨^½z6i„††RÍš5Åú2mÚ4R(N‹/¦Ó§OÓÞ½{©zõêdoo/iƒëׯêž={èäÉ“´qãFòõõ¥×^{M<ïÚµkT¹reÒét’s¯]»FDDŸþ9­]»–8@§OŸ¦;wR“&M(((ˆRRRÄtòXS¦L¡ÈÈHI]騱#ét:úꫯèôéÓ´gÏjÞ¼9¹ººRÓ¦M)99Y"°|}}©_¿~´wï^:qâ}úé§€fÏž-y(•J ¦aÆÑáÇéÈ‘#Ô¤I²³³£Òo¼A cÇŽQçÎI&“I:þãÇ“««+5kÖŒ~ùå:yò$íØ±ƒ*W®LeË–_ZÉÉÉÔ¢E rvv¦6mÚˆçΟ?ŸT*}üñÇd6›Éd2ÑîÝ»),,Œ D§N¢óçÏKî™÷#öðáäR©hûöíd±XÈh4R¯^½H.—S5D;&%%‘\.§O?ýTL#,,ŒªU«FDD´iÓ&²··§)S¦ÐÅ‹éìÙ³â uÉ’%€"##iΜ9tìØ1Ú¿?Õ¨Qƒt:Ý¿¿ÐºýÑG›ô7ß|CèèÑ£â‹ðÛo¿¥Õ«WÓ¡C‡èÔ©S´eËjÞ¼9U«VbbbÄë8@¨L™24kÖ,ŠŽŽ¦èèhJJJ¢Y³f‘“““X·„kæÌ™CZ­–._¾LDD)))¤Õj%vÚAÅŠiÖ¬YtìØ1Ú·oÕ­[—\]]%/îåË—êÛ·/EGGÓ‰'èÃ?¤R¥J‘J¥¢}ûöj—˜˜š?>mݺU¼~ÅŠäååEC† Ûq~+11‘jÔ¨AJ¥’úõëGQQQb½R«Õ4tèPq#;;›t:¹»»ÓСC)**ŠŽ;&¶E‹IÊeôèÑôÓO?ÑÑ£Géĉ´~ýzòòò’ôñæ›o’(î…4§NJèÒ¥Kbþ—-[F7n¤Ã‡ÓÉ“'é»ï¾£ªU«Rë֭žµ U¾|yjݺµM»˜:u*…‡‡Ó­[·Äãƒ&¹\N3gÎëÉܹs MŸ>]¼¶V­ZTºtiúùçŸéÔ©SM«W¯¦_ýµd ,kåj4ióæÍÔ¡C ¦† Ò¢E‹lFD^u•••E 4 ¦M›j“‚–½½=mݺUrÍÔ©SÉÅÅE¬X—/_&µZM¯¿þºä¼””rrr"WW×" ,ôùçŸKŽß¿ŸÜÜÜhÀ€6×Ìž=›T*ݹsGÒa £k_|ñÉd²g&°,K;<<œ† f#°4h`sMrr²D`åýËÍÍ¥¾}û’R©¤èèh±a<˜J•*Eñññ’ó/]ºD®®®´jÕ*""º~ý:ét:6l™L&ñ¼7nPxx8U®\¹Èë‹/¾?rä Ÿ~úI<¶hÑ"ÒjµtèÐ!ñØÁƒ ÍŸ?_<6mÚ4’Éda)ä_&“QÇŽÅúS«V-›‹ˆhóæÍ$—ËŲ¾víU¨PªT©"=Ê;ºc͵k×ÈÁÁAò EX/^GšòÖU¹\ž¯ÀŠŒŒ´ ¡úõëÛ,aä$¯­+V¬(©C·nݲiíÚµ#ÊÊÊ’¤qõêU’Ëå´téR±î5oÞœœÅQë4ÂÂÂÄ:sïÞ=ª\¹2}òÉ'’û4bð÷ßS¥J•èƒ> œœ2äïïO¯¿þ:•)S†N:EDD;vì µZM»víÊW`;wŽhíÚµ6÷Ö¸qã$Ç…Q$¡ÔçEGG“££#}öÙg’6×¹sg*Uª”ØgÔÖ/^¼(ŽNåX“&M²9ÿøñãäââBK–,¡ÜÜ\±¨V­½ñÆ¢ø-L`;V’æ©S§}ýõ×’zåïï/ióDD7&¥RùD%ä-/óæÍ#FCF£±PU­Z5 ¥+W®HÒ3f ÙÙÙÑ… DeggGMš4‘´—¬¬,*[¶,õìÙS´}AumãÆ¤Ñh$÷ʯ¬wîÜI …Bb'“ÉD5jÔ Š+JF¦òã×_%{{{ñ>ÿT`]ºt‰är9M™2Åæ^#FŒ R¥JQJJ ¥§§“¿¿?õìÙ3ßg+È.Ï e1¦!“ÉpöìY,Y²[¶l££#zöì‰Y³f¡T©RP«ÕP*•ÿ*ß+{{{Ô®]Ÿþ9Ú´iƒÞ½{£yóæð÷÷/ÒõŽŽŽhÔ¨‘ĆժU}2ÇTaÉ­õy...¨U«NŸ>]äüöèÑC’ÆÑ£G‘™™ ³ÙŒE‹!77Wt:‰‰ÅbÁùóçŒëׯÃßßåÊ•“¤Ñ°aCÑÿäY­¬2›ÍXµjV¯^[·nÁ`0ˆ¾ 5kÖ´¹¦V­Z¢ŸDa> Ö‹¦NŠõë×cÇŽ¨_¿¾¸ÊíÊ•+pttÄÚµk%þc999by 8ñññÈÊÊBƒ $õÚÏÏuëÖÅÙ³g‹ÔnQ¥J‰Mýýý!—Ë%« û÷ï?ü?þø#7n ˜={6t:†j“n¯^½$iFFF"((HÌ×µk×pÿþ}xyyaÁ‚bù) ÄÆÆNž<‰êÕ«‹‹SZ·n-ñɰöoš={6~þùgܽ{&“ ‹YYYùú½Æ‘#G`gg‡† Jüe¼½½Ñ Aƒ|WTU¬XQô{òT®\9ܽ{ׯ.-Z´°9O&“¡nݺ’:øûï¿Åºñ÷ßÃÝÝ+V¬€Ùlë†B¡€B¡ÀÑ£G1dÈÑ^õëׇ§§§Ä'00Ç—¬ö|£rssaggW¨ó~pp0"##±oß>L›6 7oÞDzz:úöí‹øøx;v µjÕÂŽ;àëë+–_A+ͬÿ›_›iß¾½Ä^•+WíQX;kРÊ—/E‹a„ €ßÿ'OžÄðááR©@DËåHLLÄ¢E‹°mÛ6ÄÅÅIêÐZ×ëö"ܳzõêhÖ¬¾þúkôïßZ­7nÜÀùóç1nÜ88::ZïT*š4i"yÖªU«Š>ŠB›ILLD§Nl|óÚ·oèèè'¶w…BË—/cþüù8|ø0’““a±X`2™`0ðèÑ#øùù˜Fnn.jÖ¬‰ÀÀ@ñ˜B¡@Æ ñùçŸãÁƒ¨T©’˜¯ˆˆ¸ººŠ÷—Ëå(W®œè3éèè™L†{÷îaòäÉˆŽŽ}и۷o‹ý~~eÝ®];øûûcáÂ…b_tàÀ\½z ,Üûþýûøâ‹/ð믿Š>‚f³z½=BDDÄ3Y-k±XÄz%¼×är9’““‘™™‰«W¯¢nݺ¨Q£~øá˜L&ôêÕ Íš5+’ïè ur:¤Û·o£qãÆX¿~=Z¶l ;;;ñárss‘›› "‚F£)‘±-‡?Á4ï [pT·vØŸ?>‚ƒƒñÕW_aàÀ0›ÍˆŒŒÄ7ß|ƒzõên`¥ÎÎÎ’Ê*tß§ð!Pн„6_ )Š —Ëå¨R¥ 6mڣш;vÀÝÝ;vÄöíÛ±oß>Œ5 ;wîD¹råàííýVKYÛE°«ÐŸ?©­½ñÆ5j8€fÍšáäÉ“ˆG·nÝÄ2‰EïÞ½qâÄ têÔ ]ºtƒƒâãã±dÉdggÃb±ˆå¢ÕjmúL"‚:t耭[·âÏ?ÿDµjÕ°zõjTªT µjÕzâsÊår± ÷ê†P^ÂBëh!Eù¨–Éd8tèºví •J…N:!008vì¶lÙòÄöBDpqq»X÷ÕBGw¥R)YL$¼ßT*•èø-|D„……ÁÍÍ :t@HH4 þúë/¬[·Nìó +ëþýûcÆŒ8sæ jÖ¬‰¨¨(èõztïÞ]¼÷µk×ðúë¯ãÎ;èÒ¥ BCC¡Óéð×_aùòåÅî+ò o!ÒòåËó]‰èçç'>ÓÏ?ÿŒO?ý«W¯Æ¶mÛ@D¨W¯V¯^ðððçªSŠ5Üwww$%%áƒ>ÅT^RSSqóæMxyy•È)GGG<|øf³ÙæûàÁX,x{{K®1bFŒÄÄDìÚµ 3gÎD=pöìYñåÿ´«‚nß¾&MšHlzûöíbU€¼­‡‡ öìÙƒV­ZxÉd‚ƒƒ~ÿýwñþBZÂÊÆ¼•õHƒpnFFÆQVV–.]Š?üóæÍ“ü¶|ùò©¸»»C©TŠ£šÖ}›õ±ÂX½z5rssq÷î]Q B~Ë–-O,aÄO¯×‹£OÖý°ò²8å7sæLh4œ>}Zb« 6`õêÕE²ý»ï¾‹™3gbÕªU áC‡Ð»woɪçàòå˸pá‚8Ê»wïÆòåËŸ,H”JI€oÁöyû[Èårœ={VrŸ‚Þ‡S¦LÁ”)S‡­[·âÓO?E×®]qáÂ…ç:ëV¬@£Ÿ}ö&Nœˆ·Þz C† ÁðáÃEáaý7vìØ—±¾l”J%Ê—/£Ñ(ùª ï§Ÿ~‚ÑhD»víDáa-.<<<ðÖ[oaذaˆ‹‹{jEnM“&M V«ñÝwßI¾BbbbpöìÙTš6m ,\¸0ß©!lƒJ¥Bdd$püøqIŒœ½{÷"55UVêÁ IDATr0‚#Œ–ç?~z½¾ÐND°YÞaò]»v!&&æ©_°2™ çÎCï޽ѺukÌ›7OÒø…’š5k 477W ÅáããìÙ³Gb»˜˜|8:vìˆ+W®<÷-zŠüæ¶X,5j^e¬‡:·lÙ‚wß}W¯^çáOŸ>Ù³g£víÚèׯ 99Ÿ}öt:Ê•+ÄÄÄ`É’%ˆˆˆxâ¼Q(Uª†Š `øðáxíµ×œœŒ¯¾ú Ožˆàéé‰9sæ`àÀèÚµ+:uꤧ§ãÊ•+8}ú4vïÞ ¹\Ž`Ó¦M8p >úè#”.]§NÊ·qÔ¬Y*TÀ°aÃ0qâD¸¹¹áÈ‘#EêDÜÝÝQ¡B,^¼NNNðððÀùóç±fÍøúú{zEh$)))xóÍ7‘™™‰Ž;â?þ§t_ 6 QQQèÕ«úôéƒòåË‹#ˆ{÷îÅ”)SP§NbĈ˜:u*œœœÐ¦M¤¤¤`Ó¦MÈÈȰ‰%ô,puuE¯^½0hÐ Àš5kòí˜19jÔ(´nݱ±±˜5k\\\0}út§6?ùätíÚ]»vE÷îÝŒœœܸq{öìÁŽ;$±Áò£aÆpwwÇ€0tèPhµZìÛ·ï‰þ(…½Ä „+VÀÍÍ 7F\\.\ˆ   —º/ÙôéÓqêÔ)´k× @DD, bbb°ÿ~|øá‡¢OqÊ´T©Rزe ªT©___hµZÔ­[·ÐkÊ—/;v€8òSµjUà‡~€‡‡G¾þŠÖ„……A«ÕbíÚµ(]º4Ôj5þÌFåÆŽ‹-[¶`ôèÑðôôDíÚµ%ýmhh(œœœ0iÒ$ 4HœFÛ¾}»è.QFŒ¯¿þ_|ñ6l(úW>«å™3g¢k×®èÖ­† •J… 6H¦‡ {¿4lØ[·nÅûï¿-Z 99?ýôbbbŠl׌Œ Œ?o¼ñÜÝݱwï^¬Y³ãÆC™2eŠýL½{÷ÆÖ­[1pà@téÒéééX¿~=RSS‹d7áœñãÇ£U«V˜4i""")™r¯T©ŒF#ÆŽ‹=zÀh4bÏž=8pà@‘òÙ·o_ôèÑcÆŒAçΑ””„5kÖØ|t•)SŸ~ú)&Mš„¬¬,´jÕ nnnHJJÂÅ‹‘””„µk×âÁƒ˜Pff&MŸ>*UªDnnnb|¨ž={Òü!®šâ`mß¾]¼¶K—.¤ÓélV£l߾Ў;$+?fΜ)Æø ¥5kÖP·nÝÈÁÁá‰Ï3nÜ8 YaoeÿþýÔ¼ysrqq!FC^^^T³fM›U—.]¢V­Z‘9;;Ók¯½Fk×®%š1c†MÌ«êÕ«“R©$777êÓ§þaÍš5ây›6m"tæÌ1_üñ5oÞœ4 999Qýúõi×®]TµjUjÑ¢…˜w!–°ì6o]Ójµ4tèPÉê4¤ÑhH¥R‰jµšV®\))ÿaÆQ`` ©Õjrrr¢°°0zóÍ7%埞žNÓ¦M#OOOÒh4A³gϦwÞy‡lVåeåÊ•¤T*騱c’ãýõ Å‹Û”×Õ«W©B… Tºtiqe”5Ó¦M#tüøqêܹ3¹¹¹‰«ç¬m,pöìYêÚµ+yyy‘Z­&wwwªX±"1‚rrr$q°¦OŸnS_…U@*T {{{rss£®]»Ò–-[ÈÎÎŽF-Y•€®^½*‰ƒ(†¤âC3†œœœH£ÑPdd$­X±‚ºtéB7–ô+¨ÿþ6yjÕª‰mPˆƒ5wî\›Õ¸$qܬÓîÞ½»Äf·nÝ¢!C†ŸŸ©Õjrqq¡ððpIÌ ¤¤$ª\¹2uéÒE\&0pà@ 9M5kÖ${{{²³³£°°°'®ÖâaJ~ïׯ :Ø”µ··7…††Ú¬ !­V+Y½¹`Á ®J³Žc…úH<¶zõj@‡ηX¯.´X,ôã?Rhh()•Jòõõ¥?üæÍ›Gr¹Ü¦-ç-·ììlš9s&y{{“F£¡   š2e M™2…ˆ!!Ìf3 0€J•*E=WVªT‰Þ}÷]š?>•+WŽ´Z-¹»»Ó'Ÿ|" “ ×ë >\’ììljÛ¶-Õ©SG\Õo4é‹/¾ ///Òh4@ãÆWýæ?Xz½žÜÜÜ3F\1)<»Ñh¤Õ«WS™2eH£Ñ 4ˆ–.]*¾ó„UäË–-#•J%Yµž••EÓ¦M#gggR©TAK–,¡1cÆ$œ†Á` ~øj×®MŽŽŽ¤ÕjÉÏÏ6l(®öMII¡‘#GRùòåÉÅÅ…t:ÒàÁƒéÖ­[Ï}¡ŒŠñù ÕjñóÏ?£uëÖâÔÖ AƒÐ·o_ñœ7n iÓ¦EöM*l;Œâlñ4¿›L&äææŠs¾r¹*•J\="(s³ÙŒÜÜ\q50ä¯R©Ä´Ìf³qW˜Ò3 bÔtë< ÓP¹y¬§]{{{”/_^t¼- £Ñ£ÑNWà66F£Qô›VF)•J›)ÈœœÑÁU§ÓaÏž=èÒ¥ 6mÚ„.]ºHÒÌÉÉGœT*•èlmáy5èeà±Ã·Z­†Á`ɇu½^;;;›¡l"Bvv¶x­Åb£ç‡Z­–| åWþ …BR®BþF£X.vvvâ FSè´A~Ï.ŒgggÃÎÎNÌ“`×Ó§O£mÛ¶;v,ÆŒ…B!ÉÏôéÓ1yòd$%%ÁÉÉIœÂV*•°³³³‰ä.DΞUppÊ^°³Á`°©×Ö ŒF£XÖÂyÂ5֎уöööâŠ=áÞymemWÁî¨R¥ ~úé'ñ¼ÌÌL¨T*ÉA~í+?› Ï•••o²N;oß`2™D;æµ—ܺ®æm?öööbXÛOèC„ß Âd2Áh4B.—‹»‘ËM&”J¥M„éyëó-‹Ø¯ŽÝjµZL_«ÕÚ8 d¯‚úS!jwÞr*¨þý¬Á`ÿ_hƒÁ¦½äM¯zõê¸sçN¾{Þ ÑÄU*•¤^æ×…: <«uß&Ô/¡=z4/^Œ‡J"šç—?¡n ÿÒÎÉÉ‘´ Á&BNJJBÓ¦MÑ´iS|þùçâjK! ÁNB½ÌûœÂo9996‹Í„÷‹už„"Š@¸§Á`#´ç½¯ðÚµà[jý^ì/ØH(!}ëë ìììÄw°Ð‡T¯„¾Mx‘¸øN(Ka€Ð–KÄ¡ð·v@³~°¼/•¢è6ëp÷ãÇÇš5k››‹îÝ»cúôéùÎ5Ëd2ôë×6l°y‰eÞڠ–…'T'U>…Baãw&8ç7ÇnžÐ°rrràââ"¾l-Z„k×®aÆŒO´eA¡õs¨Õj›9/·nÝ‚‡‡‡è»‘€… ‚ˆDamf~Ϙ×ùÙ¯ üäõ™’Ëå_†¼iX¿¤äry±|ÿ +ÿ'å_°ùÓ^›_^…—ú¯¿þŠŒŒ q©øÓ¤o]υδ°üô·Þó,¿²Î{R©””W~÷&"¤¥¥!++KÜbK&“aáÂ…¸uëÆ'é *ÿ¼ù)¨ü K#o^‹Z7SÏ[¯ ²_qê§õ*¿‚ÊÒº<¬Ë.¿¼ôŒ…Ù« úQ-Š[òëG­ýd2öíÛ‡‹/âã?Î÷£Z&“©*¬\»v ÁÁÁâG×™3g°lÙ2Ô¯_îîî…n-SØýò–gAý±°jµ < ÷)¨¾çgk…B‘o/jŸYÔ²V(ùž“÷>Õïül'­¢Ö+ëóŠÚÏ¿tõ¬±^°k×.,^¼:“&MÂØ±c±lÙ²|}œ>ùä1 І ‚°°°WÖ?ìúõëhÚ´)êÔ©ܺu ÷îÝCëÖ­1qâÄ–Q£Fáúõë(Uª€Ç+€ Ö®] FóÒ7Ïü73cÆ ?~'NœÀĉÅ2ÈïES”‰’Ì™3gЮ];4hÐjµZ¬ïýû÷Ç;ï¼óL}j˜'NœÀœ9spìØ1„……‰±·žG=©\¹2*V¬ooo¤¤¤à÷ßGHHˆ¸òøyÕͼ#ûÌ«M±V^Å™Wiæ^y—/_ÆO?ý„ï¿ÿmÛ¶ðxÓÚ=zàæÍ›¨R¥ŠÍ”WXX˜DL={>Äܹs_Ù‚¨T©V®\‰?ÿü™™™¨P¡ªU«†ž={æû•ö¼˜>}:öïßû÷ïÃh4¢qãÆxíµ×P­Z5n-Ï{{{„††¢gÏžèÑ£G‚¶nݺ9rd±GDJÕ«WÇ’%KpãÆ èõzT«V 5kÖ´ ¶Ë0Ö£Pnnn1bú÷ïo3­û,Ù²e Î;'ÆìׯºwïçZ7µZ- ðJ0VƒHÅñÁR*•øì³ÏP¿~}X, :íÛ·G›6m<Æ»sç† †ëׯÉkÕªU?~Á‘³(ÄÆÆÂÛÛ["¢\]]ááá›7o>1ÄÄDìß¿:uÊw:QpÀ<~ü8J—.ýÒæb†a†)y‚*%%J¥åÊ•+r\¶g.°„ ’EbEâ.¬Äð?'ÎÌÌÌ'^ëÖ-œ>}cÆŒ)ÐùîÀâ~[LÉD.—KP0\>LñÊ'o¤r¦ä`½*—)™´mÛkÖ¬y¦;Ðk³çÂæ……•ƒÅ!Òjµb¤UëU…&“鉫Ìf3Ž?__ßBç ›ºFGG# à©÷ cž:ýúõÊ+ع³„–Ïûï¿É“'¿Ò~_ÿV4 æÏŸ: 88˜ RÂP*•غu+ÜÜÜШQ#þP)a˜Íf¬^½ׯ_/òêÙg.°d2RSS°°01–…ÅbÁ‘#GpðàA 4lØ-Z´(rGìç燇Š13€Ç¹“’’’ïžKBX†ÌÌL|ÿý÷hÑ¢E¡{Q ¢¯L™2ÿxß@æùàèèÈ/‡Œ‹‹ žé¦ß̳ÃÃÃ!!!®räâââ0nÜ8„„„ o¼ñÄí;Š2j±råJ´iÓƒ BÏž=ŠùóçÃÙÙÀãs´ÙVgÁ‚¨W¯<==¹$_q:tèÀF(Á´hÑâ‰Qå™—G:už¸i7óòˆˆˆ`ˆÿ Åê1ííí%ÂéäÉ“0hÕª•xÌÙÙ¹HÓu‚P""èt:,[¶ Ë–-ËW€íß¿ßæ˜L&CVV–xŒG¯^]ˆƒær,ÁåÓ§O6D .!H3·¡’Y>5kÖäòùR¬¬zõêáÛo¿ENNÒÒÒ…ÚµkÃÁÁA>ñññpttÌw£Î‚DVA.¿ß :ƼºXûÕ1%·|˜’_>\V\>LÉ¡X#X3fÌ@óæÍQ½zuÈårÄÄÄ`ãÆ’Š___^ÎÍ0 Ã0 ¬'AD(_¾<¶nÝŠ;w"77 4@»víÄaOƒÁ€råÊ¡aÆùîÚÍ0 Ã0 ÃË Á_ªnݺ¨[·n¾ç¨Õjôïߟ­Ê0 Ã0Ìšbù`å?¶Þš÷†a†aóÖ]³óÃ0 Ã0Œ-r6Ã0 Ã0L Xyã]q4a†a†aX`ýC„€Ÿ+V¬@FFO2 Ã0 ÃëY$’‘‘ & 99™-Ê0 Ã0 ¬g‘!;;›§†a†y% d2@þœ¼Ñ‹hT˜þË/$ƒR©äéA†a†aJ<¹¹€É¤¦ÇŽÏc/û"ë6™L†GÁb±Ø)GGGLš4‰wsg†a¦Äsò$0j0|8°u+ð<6Ÿ)–fëׯªV­Š5j B… ([¶,ÀÁÁcÇŽÀG†a†)¹ <þ‹‰y,°ž‡‡S±V¯^½püøq,\¸iiið÷÷GÆ ѬY3Ô®] Fd†a†y™XK“¬¬çwŸbù`½õÖ[èÑ£’““ñàÁ>|À‚ àèèˆfÍš¡GhÙ²% -†a†aþ³Ûw^«ÕÂßß5jÔÀ¨Q£°mÛ6ܼy³fÍBrr2ºuë­V‹.]ºà÷ßgqÅ0 Ã0 ¬‚ÈO(Éår¨T*899¡Gزe RSS±}ûvhµZ;vŒ-Ì0 Ã0ÌŽg²Ù³^¯‡F£\.‡\.GË–-ѲeKé¹­" ,™L†G!11÷ï߇ÙlƵk×àîî.NãÉår;v r¹ …¢Hé9rF£={öU­Z®®®øã?P¶lYÈåÒÿꫯàíí-Z`Ù²e0™L¨\¹26lȵ†a†a˜b֭یѣ—cíÚ“¼_žÀ€M›6aöìÙ0›ÍHOOG¯^½$BÊl6#99=zô€££c‘ÒŒ‰‰ŸŸ …øÐðõõÅÕ«WóõÁ:qâìííÑ­[7888 ++ ³fÍÂìٳѷoß|G±d2 44Ã0 Ã0ÿ~a%¼ó7onß~îy¹«}ûö ÃñãDZ~ýzÌš5 ®®®âï …ÎÎÎ ƒ½½}‘ÒÌÌÌ„V«Eh4¨Õj¤¦¦æ{Mbb"bbbгgOLš4 0jÔ(Œ5 ½zõ‚J¥ÊװÆ ƒ££#ˆF£íÚµC÷îݹÖ1 Ã0Ì¿™L†»wïbÅŠHL|€ß~“#1Ñàwe_®À A™2eРA 8AAA6SÅ R©T0›Í’cf³f³vvvù^cgg‹Å‚±cÇŠ>`ýû÷Ç·ß~‹sçΡN:ù^÷é§Ÿ"88XÜ Z©ä0` Ã0 ó_! ü14 4àÃ͘9ó+gžù½ŠåÕ%„MprrB©R¥`4‘‘‘´´4ñ/55)))EÞüÙËË ‰‰‰’óÓÓÓ‘žžŽÀÀ@‰`¦ nnnâožžžP*•HLL,ð^vvv°··‡½½}Ža†a˜r¹×®Ù#'Çi¨žÏ½Š{L&ƒÉdÂÖ­[ѨQ#”.]>>>’?777$$$)½Ê•+#%%ÿý·xìÖ­[¸wïªW¯™L‹Å³Ù,Š­&Mšx¼šQàæÍ›ÈÉÉAHH× †a†a $:puÊ–}~÷xª9²‹/âý÷ßGëÖ­1qâD¸¸¸H~ÏÍÍ•øfFƒ P·n] >‹-‚J¥Â¢E‹вeËB&“aÆ HKKðaà “ÉпÌŸ?£GÆÜ¹sa2™ðÙgŸ¡zõê(_¾<;®3 Ã0 c “¿ý4jq²íÅ ¬‡ÂÝÝ3g΄¯¯ï?xÐÇBè믿ÆðáÃѵkW€ŸŸæÎ À7ß|ƒ˜˜¼÷Þ{ÉdðòòÂúõë1nÜ8´iÓP¶lY|ýõ×\{†a†Éaì%7hÛöñK”Àruu…››ôz½D(ÿAûtEDD`óæÍHHHÁÃÞžžbšß}÷L&“øo"BëÖ­Q±bE¤¤¤ˆ¢ËÃÃG¯†a†)”¥KàîÝ&°êÔ©ƒV­Zaúôé˜9s&üýýÿQ&Q%ŒXY€   ›cÀã‘.???ÑÆ0 Ã0 c«7ÿ×Û[úï#°~ûí7|üñÇP©TX·n”J¥$ÚºÑhăàããóÄ´ DíCÈ0 Ã0 S\^¤„x*ŽY³fA£ÑX©ÂÿÉÀœœœ"Grg†a†ù·QlED(Uª>úè#¶Ã0 Ã0L>ü£í£÷ïß‘#G¢_¿~¸ûÿžb‡Æï¿ÿ^ä@£ Ã0 Ã0Ï›çéoõL–øsîܹèÔ©Ž;†õë×#%%pîÜ9L›6 YYY\š Ã0 Ôq%“¾±õT#X.\À×_Õ«WãäÉ“’ߪU«†«W¯";;›K”a†a˜—Žàܾx1ðþû@ff X<€——4h Y=HOO·ÙÀ™a†aæe‘ž\¾ T­ Èå@|<`0AAÏ'àèS­"T©Tâþ€‚ÀÂ'ÄÅÅA.—C¡Ppi2 Ã0 S"HNîß ®_~øáñTax8ð<Æ„žj«L™2P(X¹r%&“ 7nÜÀœ9sP¯^=èt:.M†a†aJŒÀÒë­V ˜=˜3èÐÈÉ)!+$$“'OÆæÍ›Q¿~}@ï޽ѰaC¤¥¥aÒ¤I°··çÒd†aæ¥Cܹhµ@@Àÿ޶¼† IDATçæFãó @úTq°d2^{í5Ô¨QQQQøóÏ?µjÕB³fÍàêêÊ׆a†)äæ'O¥K¾¾/æžOåƒEDËåðööF¿~ýl~³b Ã0 Ã0/³ùñaÅŠ‚VyþÛæ[` ¢I¯×ãþýû¸{÷.’’’l¶ÊéÑ£´Z-—*Ã0 Ã0/X¹òʼn«§X––†3f`ÅŠÐét6þViiihÛ¶- ,†a†a^:/JTýcõûï¿cÍš5˜>}:š5kf#¤, \]]¹D†a†yéX‹«%´žJ` „‡‡£{÷îðññá’c†a†±â©ã`9::âÎ;lA†a†a˜<Þ&§AƒWD`]½z6l€³³36lØ‹Å"ù]¯×£wïÞ,°†a†yáþWÑÑ@Õª€\þ ¬"€fÍšA¯×zŽF£áf†aæ…#©€F¤ÇJ¬À""( ÁÀ0 Ã0L‰¦R% cÇ—soåÓ^˜””„ 6à?þ@JJŠä·ÌÌLüøã¼!Ã0 Ã0//¾TªWD`Éd2ÄÆÆâwÞÁ™3gP§N›˜W*•Ê&ø(Ã0 Ã0Ì‹àÿ7–0Ùö¢ý¯žJ`Àµk×páÂìÞ½5jÔ·Èù߃ ,†a†a^ yÅÔ‹WO-°rssÈþ?ײ—‘{†a†a˜ÈS ÆÙ³gY\1 Ã0 Ãäá©F°?¬Ñ£G#** >>>‘• &ÀÁÁá‰i Ó‹ù‰4"²9žß±âüÎ0 Ã0Ì¿ÁcÉZ¼ ÿ«§Xqqqˆ‡››Ž= ¹\.5iii=zt‘– ®¶mÛ†7Âh4¢[·nèÝ»7T*•`’Éd8wî¦M›†ÌÌLQ edd`ãÆçÆ0 Ã0ÿ1a%“ýOH9$$-[vv/'OO%°jÖ¬‰èèèÙ- ÜÜÜŠ`ÇâiÉ’%7núôéN‡1cÆ !!£F‚*Ÿõ•>ÄöíÛ1nÜ8xzzÂb±À`0ÀÙÙ™kÃ0 Ãü‡Dðø¿ÙÙÀùó@ýúÀ?<>ÞªÕËËßS ,¥Riš¡0UдL&CRRæÌ™ƒ &`Ò¤I€ÈÈHLš4 ݺuCHHH¾×À!CPºté|ïÉ0 Ã0Ì¿™ ¸w˜7¸}HL|¼÷`«VÀ©S@‡€^¼¬±—§Xÿý7Ö¬Y{{{X,‰¨‘ËåP(ðññAݺuáïïNW ð9tè=z„áÇ‹Ç6l;;;üùçŸ(]ºt‚éöíÛÈÊÊ‚££#¼½½y{†a†ù@‹=þ÷±c@Ó¦ÀªUÀë¯o½õX\½R>XÉÉÉX¶l 777X,ÄÇÇãþýû(_¾¼(ÄÞ~ûmÌ;·À­unÞ¼ ¨ÕjQ„ùøøÀßß.\@»ví P($×X,øùùaäÈ‘ÈÌÌDVVúô郩S§:M¨V«ó) ñb†a˜W¼¯nƒáñïÝ23€éyù½ï•J%”J¥M<Ï—&°‚ƒƒÑ©S' oß¾ðõõáöíÛX´h<==1xð`DGGÿ{wgs½Çqüõ;³ïû`0ÆØ}OÉ)ªkKÝ(¡Q¶’%¤¤„Ò%®J YZ(J]K¶R!QvÙÆ0 ³Ÿ9ÛïþñuΜ™93Æ„™áó|<ÎcÌ9¿³ýÎÏ|ßçûýþ>_† B:uxê©§\>Vrr2Wv‚zã>>>øúúrá—÷‰‹‹cÑ¢ET­ZƒÁÀ÷ßÏsÏ=GTT£FÊ÷uÏŸ?Ÿ°°0l6‹…&MšpçwÊQ*„BÜl6Ø¿ÂÃ!::w ÓHLLdýúõ\ºt MÓ°Ùllذᆬ¯\¤€µoß>8À„ ˆvzuêÔ¡ÿþôë×矞G}”µkײyóæ|–Á`pY >¿jðº®CLLŒãº'Ÿ|’;v0þüVÆ ‰ŠŠÂjµb³Ù(W®œB!Ä-Âj…íÛ¡jUðõÍ{»ŸŸõë×Çx¥»Ëf³qøðaΞ=[2VVV‰‰‰X­VGè±§C“ÉÄùóç1›ÍØl6Ê—/ω'ò}¬ÐÐP.]ºäUš¦‘žžNZZZžúZöçȸ4M£fÍš,[¶¬À×]¿~}*Øû sÝ_!„¥›¦Á]wAd¤½Ï9DèëëK:uÛÛl6¶lÙÂéÓ§¯ûk)R%÷˜˜Ìf3/½ôñññ˜ÍfÌf3û÷ïgôèÑÔ¨QÃ1þ÷ß§J•*ù>V­ZµHHH ))ÉtNœ8Á©S§hÔ¨‘ã,Dç^.çÛïsòäIBBB |Ý®ÆX%\ !„·wwèßî¿?ïävWí½ýD½¡H«V­ZÌš5‹]»vQ©R%Ê—/O™2ehРYYY¼ÿþûa2™¸ãŽ;èׯ_¾ÕºukjÔ¨Áĉ¹téÉÉÉ|ùå—øûûS»vm4McçÎlÞ¼Ù±~ûí7N:åØ~ëÖ­|ñÅôìÙSŽ.!„â6áŽr‡¦qÃÂS¡Â^QßL·nÝhÙ²%›6mâĉ ªU«Fûöí“Å|}}yå•W÷s5¼çëëË´iÓ:t(Ý»wÇÓÓ“#GŽðꫯ:æH1‚'NpâÄ 4McÒ¤IÄÇÇ;&×ïß¿ŸZµjñÒK/ÉÑ&„BÜ&áÊž+þ“íÛÿÆfƒµk Ô­[“Šc ¬ÅY"–ÍfË1áÜþBÃÃÃéÑ£G¡ž(¿B£º®Ó¥K¢¢¢Ø±cV«•ÆÓ¼ysÇsŽ;–´´4ÇcLŸ>ßÿÄÄDt]gàÀ´k׎ÀÀ@™S%„BÜìmýÚµ_1nÜ1öí+‡ÕêFfš6]ÊÌ™íiÔ¨Y±e‚B,ƒÁÀSO=ÅéÓ§ùæ›oصk#FŒÀßßßå|¨ÔÔT¾øâ‹«Î‰rN¡ 4 Aƒy®èÒ¥KŽëjÕªE­Zµ ä„Bqëùë¯?7î»w÷*jÉœÜÇØ±ëX¼8†ˆˆÈ’°¼½½CƒŸ|+§[­ÖB‚¶Ë¯×K!„âØ±¿ùóÏrŽp: uضís’’.—쀥ë:³gÏvü»Aƒ¬]»V>Y!„B«¬V·\áJý4›Ý°ÙŠïµ*`iš†Ñh¼¦ÙøÞÞÞÒÛ$„BˆÆÃÀ‡‡‹…áJånnÅ—C =D8eÊÎ;W¨mÓÓÓ™7o^ë !„BüqqµhÑâS6nÜ Ôs„+ØÀ}÷ùQò–§§§ËÅ’]±¨()„BqCè:DGW¢_¿ŽìØñ6Ûç˜LnÙ¸ÿþ¦LéFpppÉX/¾øb¡‡u]Ïw¼B!Ä?¥ij8pïÞ¦´m[™‡ºÌàÁ¿üeÊ„ìÈ$%¶–®ë…î½B!„¸‘Ô28‡é|ýµÆÌ™áxy…£ij¡gçõKt,W/.33“µk×òý÷ßsáÂÇz>öÅš—-[Vè:XB!„…e%¿ý¦Q¶,4iûö9‡¯üóK‰ X¹¥¦¦2tèP¾ùæêÖ­ËÆ¹ë®»HMM娱cÄÆÆÊ§/„BˆÂ¢ºw‡{ï…à`u]IR¤€µwï^6nÜȧŸ~Ê=÷܃¦i,Z´ˆØØXG…w{QR!„BˆëI-ä žžêRŠr§äädÊ•+G½zõ×]¼x€Gy„O?ý”ääd9„BqÃBVIV¤€ååå…‡‡F£€ÐÐPöìÙ€Éd"%%嚊’ !„Büº%©JT‘†£¢¢0™L?~œ˜˜ž~úiž{î9öïßÏ?ü@•*UdˆP!„74P9÷bÃ]wÁPðv%:`U«Vùó熮ëL™2…‹/òùçŸS§NfΜ)UÜ…BqÝ•Ѩæ] pæ ¼ó;¦®«Z~ÌfhÔ† âŠ#E X.\Àh4¦ihšÆ¼yóäÓB!Ä aï…š<zš6…òåá7 Ìn¶"ÍÁÚ±cäüùóò‰ !„â¦øýwxýuHO¿ö`v³©+::š   Ò¯å !„BäÃh„¥KaÏ0™ 9Ê•S=PðôÓ0}:tìmÚ”ü÷S¤€U£F Z´hÁ AƒxöÙg©S§NŽIíV«•Ê•+ãîî.GŒB!®ÊÓSíÞ>ýTõTíÞ 6xyÁ‘#ðÝw°fÚ¾¸†þnhÀÚ¶mo½õƒ­[·º,ÉpöìYÊ–-+GŒB!®Ê`€À@õï€psƒ°°ìÛ—/‡ºuÕ¥¤‡«"¬Æ³zõj<<<\Þn2™dB!„B\‡Ã×_øqàçWòÃU‘–®ë„‡‡Óµk××i¥áÝ !„¢Ô‰‡ÚµáÎ;KG¸*RÀ²3¬X±‚7b2™xíµ×ˆŽŽfíÚµx{{ÓºukÜÜÜä¨B!Ä?Ò¬ÄÅ©b¢¥Å5—iÐ4 £ÑȤI“=z4ÉÉÉ|úé§$%%päÈÞ|óMÒÒÒäˆB!Ä?¢ëàãááàî®~¿%ÀÞ½{Y¾|9}ôü±#x4hЀ£G’••%G…B!þ‘ÜC‚¥eˆ°HëÂ… DDDP¯^=¼½½sÜJJJ V«UŽ !„BŠ~•®)½´t]]Q¤9X^^^˜Íf233ó¬ WVW>>2ÿJ!„…f 3™R8wîk×®eÈ!ÄÆÆâååÅ;ï¼ÃÔ©SéÕ«—£¾–«û¬_¿žÇ{ŒJ•*Ñ¥K XB!D1sNYY*L¥§ç X¹ûN~6îîÁ¼ñÆ~>øÀÊGéT¬X—:uêæÈ ·lÀªQ£~~~ìÙ³‡Î;_ÙQê ¯[·ŽV­Zî2Låü4222xñÅiß¾=o¾ù&ƒY³f1qâDZµjEùòåó}©©©¼ÿþûÔ¯_?ÇkB!Dé¡ëàå¥ãå¥QÔ­…¯/Ü{oÁ9â– Xžžž”)S†‡~˜:аaC, ?þø#{÷î¥ÿþÌ›7]×±ÙlÔ¬YÓÄrÛ¼y3‡bݺu_Y&û¡‡bþüùüùçŸDEEåÙ¡öüßÿþ777úöíË| G¨BQ ©f>»­·Ù\mSº:Qа8ÀÒ¥K cÆ |ÿý÷hš†››ƒ÷ßß1„g±Xxøá‡ó XýõeË–%$$Äœ*V¬H… صkí۷ϱSíÛœ;wŽ×^{µkײsçÎB­Qäj¸Q&Ê !„7—Õ nnyçaÝH®Ú{ƒÁpÃ2@‘Vûöí1›ÍX,–B›‚Ö%LJJ"88MÓoÒÏÏò<¾}›ЩS'š5kÆ–-[ õºwïÞMBBV«›ÍFTTÑÑÑr¤ !„7ˆ»; êìA€}û`Ïÿ[ãföohšFzz:GÅh4`³Ùøûï¿oÈúÉE XgϞ寿þ¢}ûöÿ(9Úßœ«¹Yš¦aËÕGhŒÏ?ÿœ;vpøðá¡ËÞC•ßsíÝ»—3gÎ`³Ù°X,4nÜX–BqÙÛáôôËlßþ-§Og°h‘Nhh9fÎìB“&>zóG222Ø¿?—.]räŒS§Nª¬ÔM Xä AƒtíÚ•ž={[`˜Êo'‘’’’ã~™™™dddä™(¯iÉÉÉŒ=š×^{@ CÚl6²²²°Ùlùžy8`À€<¥#dˆP!„¸¾T{}™Þ½Ç³ys'ŒÆ(^|QGÓÎP¶ì(Þ{ïÍ++ÃÜÜ!ˆˆúôé“ãz³ÙÌæÍ›¯ûó©’ûwÞɦM›hÑ¢3gΤ~ýú´iÓ†+V`µZ¥0ÇU«VåÌ™3dff:îÏéÓ§©_¿~ž°tèÐ!Ξ=ËÈ‘# #,,ŒI“&qøðaªT©ÂÂ… ó}®¬¬,—B!®¯1cÞå»ïzc4ÞÜÅÒ³¹'IIY±âã+m°ëûzzªùYyCÒ? }¹Y,,Ë ÉE Xžžž4nܘ·Þz‹„„V¬XA@@½zõ"<<œÁƒsèСB­6mÚP¦LæÌ™ã¸nëÖ­˜ÍfêÔ©ƒ¦iœ9s†ãÇP­Z5V­ZÅâÅ‹ùðÃùä“OèÝ»7QQQÌ;÷š†-…Bqc¬[÷+»úº™™زegží32àµ×Ti†ÿü¡[7¸ÿ~xê)8rJSŸH‘†s«ÝsÏ=´jÕŠ 60xð`,XÀüùóiذ!cÆŒáÁÄÝÅ"Bº®ÆèÑ£3f §NÂ××—%K–0fÌ*V¬@¿~ý8yò$ 888ω`ÇŽ<ðÀ˰ŸBQÌ,{Nöš‚ £ënN·eóõ…±c¯–?JOȺæ€å^âãã9xð ?üðëÖ­#))‰æÍ›Ó£G¢¢¢X¶lƒ "!!!C†äy,5þªóì³ÏR¾|y–,YBbb"3fÌ OŸ>xxxЮ];.^¼˜ohŠ¥C‡ŽáD WB!Dñ ö >²n¶ÿ;•€Ï"=fijÞ5]¿öÍS§N1sæL¶lÙÂÅ‹©W¯;v¤M›6ÄÅÅåØvÀ€œ:uŠï¾û.ßÀ–_(ru[îÞ©ÂôV9r„jÕªqòäIG¯˜B!nœ… W2`À`4Ù3’Î6ï¾{„Æ‹mA‹Å¬Y³Ø¾};K–,ÁÛÛûº=v‘†;ƦM›4hÍ›7§J•*æ FÇçܹs¤Qíšn+ìÙ‰B!„(>=Ö•¬¬UL:Šøx3¾¾6êÖ á7º•ˆpu£)`ÝqÇlܸ‘€€—%œ'·ÇÅÅåéÕB!Ä­K×u<=½<¸ÞÞ÷òßÿÚ˜?*Vô ((бͭÜIRäµÝÝݱÙl¤¦¦ráÂ…½V6›ØØX—Û…Bq«+5O*»Æ•;~~!xx@h(eo{«@)™Íf–,Y„ 8{ö¬c2º]FFgÏž¥lÙ²r´ !„·Q¸JO³‚ƒoïýQ¤€µ{÷nFEÏž=y衇Õí, aaar´ !„·™Ù³áâE˜1CÖ5»páQQQL˜02eÊÈÑ$„BÜÆì½W'O¬Y0uªìCáv\ÎJ;ÖB!ÄíË>jöl¨Ry$û6«²²þÙ27·lÀÒ4¬¬,ŒF#F£‘¸¸8:uêĘ1cعs'éééŽÛŒF#™™™è·ÛžB!nCöæþ÷ßaÕ*?^Ue·«_rϺÕcB¡‡ëÖ­Ëádz“™Á€Á`à‹/¾p¹}||<åÊ•“#O!„(åÊù„¿Ü¿kX,ðÙgP½:4o®®ûðCX¾¼½Á`€o¿UÛ{yÁsÏÁwJÀ`úôé…4™Lßî§!„·Mƒ¤$8wŒF5ϪreðôTa+2RMj_¾¦OW=UºO<¡.… n·eÀÒu|PŽ2!„â6tì|ÿ=œ= ÿù ®‚•ÅíÚA™20p ´m{mÁíVæ^¸ ËÑ!„·#]‡&MÔåÐ!øúkxþy(_>çvcÆdo/±¡“Ü…Bq{rKF£ PFcÎ&$` !„â0W¿KÀ*¤k)¿ ¥„Bq;ºæJaµZÉÊÊ*poooÇÜ­[}Ål!„âvRPÙQÄ€°ÿ~^}õU‚ƒƒ1™LX­V4MÃÍÍ , ÁÁÁÔ¯_Ÿ.]º!!K!„(Fÿ$ÙÛpooððP%ví‚®]ÁËK¤}¿.ËÏÏÄÄDV¬XAûöí©Zµ*6›]»vñûï¿Ó«W/Nž<ÉÂ… Yµj|ðááá²·…Bˆb¢ipæ ¬X.¨%l22 @ý»n]èÞ]u®l6 ‹½Ç¹s ¼ðœ8AÇŽƒñòò–N”ë°ÜÜÜðññaÑ¢EtëÖ ///t]Çd21}útâããyûí·ILL¤M›6|øá‡Œ5Jö¶BQŒ"" woÕ›õóÏðØcðë¯àï£w*o0ÓÐu+mÚôäçŸ_ÀdŠå§Ÿtà$:õaëÖÏpw÷”›K‘Î"<|ø0©©©´iÓ†àà`|||ðõõ%88˜îÝ»³eËjÕªE÷îÝùå—_dO !„ÅH×Uõõrå *J ¨PA]ÂÃÕ’6®Œ3™-[Æ`2µÊ€–üüóX†Evîõ Xº®“ÀåË—óÜ–À¥K—Ý…þþþ¸¹¹ÉžB!ŠÑ?ÁÛ±ãw à\@š²mÛï²s](ÒaµjÕð÷÷g̘1 :”ððpt]çĉLž<™–-[âïïÙlfïÞ½´k×Nö´BQÌœçJyzªÐåééúvg6›[)%5¯[Àª\¹2sçÎeêÔ© 0Àñ¡¸»»Óºuk&Mš„¿¿?YYYüûßÿ¦íµ,N$„Bˆ®¶oÿ‘/¿<ˆÉ¤ñÁîtêt•+W½2ß*ooW™2À% „ì^, H¹r›øÇËþµhÑ‚?þ˜ãÇ“œœŒ¦i„††RµjU|}}ðòò¢_¿~¦b!„BÜxö6xÞ¼9L›æÁéÓµ±Z –Iݺ‹xã¨Y³Iž5&N|o¾‚ÉôvåÚd4m(S¦Œ{=–J·*,…„„rM¬B!ŠÇöí[™>݃'zÁ˜LðÛoéÚuwÝUõëƒòܯ~ýzüüó Ï/¿œ#$D£zõ0fÏF³feÇ^€eK'Nœ`æÌ™lÛ¶ÄÄÄËâ$''sèÐ!"í§(!„â†pÒ»Z1ÑÇsêT¬#\e«Ù| 2 ϡӠA=.üݺÁ† P¹römÒ‰rÖÑ£Gy衇HJJ¢S§N”)S&Çí™™™øøøÈÞB!np¨²ÿ´Z!÷Iû¹—ͦ9MJ·W`W?==Ýðôt=+{é;ûãä½M\‡€uäÈ._¾Ì?þHll¬ìE!„â&Ò45´÷矔—.ÁéÓP¯ž ?~~9ïçí펇‡«•á T±QƒA“u¯“"[éîîNLL ÞÞÞ²…Bˆb`³ÁÅ‹j]ÀõëaøpHLTËáœ?KÞû´jÕ’Fv{íQíÊÏOé×/–  @Ù±×I‘z°š6mJýúõùì³Ïxþùçe/ !„7‘®«¥mÚ·¿Ò˜$P¸Û IDAT»«5{õÊ»sT… Ñ,\؇—^úŠ~˜GZšeÊÀãÇ1ztOé8)î€uàÀV¯^MRRo½õ111Žjíº®“’’†  “=,„B\g¹‡ñr÷VÙƒ•óvöÉè5kƱlYe6n4Ñ£‡Z‹°lYÜݽdÇwÀ2 T¨Pš5kæ8{0ûƒ¶zÒ›ýþ®¶wuf‚œ­ „BälóNJ³Yç?44Pk :·^^¾¨š•ÁÁª,ÿçÉ;¡>÷ó]íìE X…øu]§I“&lÛ¶í:&qÄÄDÎ;‡®ëDDD‰Á`Ȩ4MÃh4’@ZZV«///Ê”)CHHˆ0!„·h r.ÇÝÖ—9wî"V+œ:¥ãí „3b„Æ·ßê<¨‘_ÉJ]Ï>30ÿ6._†  >Õ„zMSg.†…A!KbJÀr€ìa&((‹ÅBzzz¾AÆf³ˆÁ`(Tpû믿2d'OžDÓ4"##™6mwÞy§ËçØ¾};ãÇ'%%›ÍFVVqqqL:•:uêȧ*„¢Ô…§}ûàøqZ²²Ô€xx@ƒà\ZÒÞ6þý÷Æ[ÍW_¥’–f .ÎJ³f~xyµáüù¦|÷ WöåܤúûC¹rpeñ•:ß~«zºž|¶lQ“ìm6èØZ¶”ϰH à™gžáĉüøãìÞ½›gžy—Û¦¤¤ðý÷ß_u–¦iØl6ž}öYt]gÕªUxzzòꫯ2f̾üòK"""òܯR¥JŒ?žèèh|}}‰gÀ€Œ;–Õ«W˧*„¢Ô1›U¸úþ{f&NT!ÈjåJY…œ._¾ÌË/¯fÉ’@;RSáÿûƒ5|ùe$ Vʬ`ÍÕ#•”110}ºº½F èÒ¼¼ò†¿fÍÔ¥ €(ƒGE XíÚµ#)) €ˆˆºw—ë qF£±Ðg"lݺ•;vðË/¿8zŸž{î9ºuëÆÁƒ ÏÑ‹¥ë:UªT¡J•*Žëbbbhß¾=?üðƒ|¢B!JMƒFÔ%=þøþõ/UÏ*¿“˜xµkÓá*»¦U]L¦?ÈÈø¨”ã~AAж­ê!3à‰'Ôy›MÝæj.Va‚“„«°úöíëøw¥J•=z´‹œ=OëjÃv{÷î%,,ŒÊöšû@ll,*Tà×_¥eË–yæ`99“ÉÄO?ýÄÊ•+7nœ|¢B!J5›M…©Ügæ1V«Nf¦[®p¥~fey’•eËq?]¨ZUöq‰ XnNõ÷u]Çd2áááû•¸›œœÌˆˆˆ R¥J…žh~þüyBCCs²ÀÀ@9}ú´Ë³íZ·nÍÎ;3f ýû÷/ð¹2331X¯ôµzxxàéé)GBˆ/w–šŸe%+ rWews³äY6Gz™Àjµb2™°]YëÇþ{±,gGŽaÔ¨QŒ;–æÍ›“’’Â]wÝÅŸþ‰——³fÍ¢ÿþŽðU³Ùœ#¼ÙÜ››ÛUßôŠ+HNNfË–-¼üòËxzz2yòä|Ï$œ4iØl6Ìf3]ºt¡GrÄ !„(ÑÁÊU@ æ®»|øöÛ}@²«²Ÿ¢ví³T©ROv^.gΜá¿ÿý/ hš†®ëìÚµ‹êÕ«—Œ€uòäIâãã `Ñ¢Eœ>}š;v°nÝ:æÌ™C= ½êcùûû“‘‘qå Òe²²².à€Ó‰ŽŽ nݺdddðâ‹/2nÜ8—½Rš¦ñî»ïæyMRÖA!Dñ‡¨ì¶ÈÓS-Úl?»O]­sîœÆÊ•Ð»7„‡«ùÐS§¶&#c5?ÿ¼—¬,¼¼¬Ô®}–W_­L­ZµeÇºÈ “'OÎqý»ï¾Ë† JFÀ2™Lx{{ãweÉE‹Ñ£Gš5k†ŸŸ , KõY^ULL ñññ9Š“&&&röìYj×®g‚»=,9Ï÷Ò4ØØX¬V+™™™.–®ë¤§§ç X®„B7{[”pŠ5k–räH/¾h£qãj<òÈc,^¬1k–ŽÙ¬qß}®†5jÆgŸE2{öÞ}ׯ_@… õáJ: nï- YYY7d)`ùùùqöìY222ˆg×®]L:€ôôôk .­ZµÂËË‹eË–1pà@vïÞMRRõë×Ç`0ššŠÕjuôheee9Î`´?φ  "0PªBQúzWNžü›Î_ãðág°ZCxçÿ?˜:õiÒÒæ1x°Æ£Bùòš#<•-CÆ1xzªšTÎ)áªø)`Õ®]›š5k‡Íf£jÕªtêÔ È>+°°“Ç£££8p Ï>û, øùùñúë¯óøã;Î,ìׯgΜaÇŽ z÷î»»;­Zµ" €¯¿þš/¾ø‚?üÐ1¦*•Bˆâ KWŸPîj›aÃæsàÀ(@Ͳ٠%¥&“Îk¯}ÌóÏ÷ÍuÿìpU'KÚÁR°ìKÙ|ôÑG,]º”ŒŒ †šã-¨©«Ç{ýõ×)S¦ sæÌ!++‹Áƒ3jÔ(G-­€€€=Sƒ bÞ¼yÌœ9“ŒŒ j׮ͺuëèܹ³„+!„ÅJÓà‹/àãUM«£G¡V-U"ÁfƒàÞ{óÞoûö#WÂUöÙ€à†ÉÔøø÷ó<‡¸Å–]xxxŽ`e÷ä“O!íë >œáÇç¹Ô/çëºtéB—.]ò9°å¨BQ|tzH]~ý„… ¡L™œÛän®l6·ü"6›!Ïs8ßßÃú•a53çÎ"=ÝÌáÃ:šæCtt%Ç[~!KÓàøq¨¶lQ?PŸi¥JjQå‚ÂÜÕ®â†,___.^¼èò…ý÷´´4 ƒt !J\¯¨ž «U„tXò'«8? «ÕÂ[oý—Y³’HH€ûîÓ‰‰qãå—+зïcŽ6%¿áÞ3à§Ÿ 6ºt ÔÙ}!!7?@;?—§§úÝùX“@/+»ï¾›E‹ñä“O:¾QØÿsØþ7Wî£I!„ÈÇüùËxñE3ð`Àd‚C‡Ò4h&©©kqwïBݺjhו±cÁÃ#ûÌÃâ 3š¦&êoØçΩ×5gŽ*í`³Á=÷HÑP X¹L™2…:uê0pà@Þ|óM‚ƒƒsÜ>oÞ<&MšÄôéÓe±g!„…öþû+/í‘èÊO?²²†2zôóÄÄtaüx×K×!**ÿ@U=EÕ««Þ3ƒ† S½¦öÞ·ÈHù¼%`åÇÊ•+éÕ«‹/¦F”+WŽÔÔTöíÛGJJ ƒæñÇϱ´BˆÛÛÕ*¤§§[•óÚ}¾´jeåÛo³@Θ®ö{q¼×°0u)ìþ·õ4:Ý»wçèÑ£ 8‹ÅÂÎ;9sæ ;vä»ï¾ã½÷ÞÃßßß1|(„%I~g©•ÖÐRÐï%áuÙÏèKOWÅ<·n…M›ò†‹ìY%öµûìAËŒ¿ÿ•÷ÒJ ó%\ÝúŠTÉ=&&†wß}Wöž¢”õ÷ËbÉ >þ8©©~ÿ]'::€ØØ*W=K­$+û22º®öòºúz×ûù çΩEÿøCUg?|XótsƒnÝ M›œ÷éÕ«#'®z݃eÂÃc)]»v”ƒXܺKÓ4’’’8yò$qqqxxx8nûüóÏÙ±cF£‘-Zð¯ý Ù»BˆÒ£ ‘’’ÌøñÿeÑ"äd7:u²Q½ºÎøñåéÕ«O©:óYÓTQÌ?ÿ„ÄD8sF-6ìå¥Lóæ}}•ýydÛ65ñ<&FUGÿ÷¿U-ªš5¡lÙ¼!mìØgˆŸÄ²eÉ$'ûáæ¦S¦L ƒ%Ò¯ß89ˆÅ­°æÏŸÏ?þÈÚµk×ýç?ÿá…^ $$„ÐÐPÞÿ}’““4hîî²–´¢dxóÍ%¼óNyàaÕ7b‚}û’:t>eËnæî»[;ÂDiÈZ>>ꌹ={`õjµ¬Kh¨šTíéyý‚•½§ ÔPߨ5ûvìPÎûõSCw¹µoß|£&Ÿ_íû¶®ë¸»{0gÎxªTù‰>ÈdôhÚµchÞüÇ6RþGܲë³Ï>£]»vŽß- o¾ù& 4p„®×_¹sçÒ§OBìH„¢8÷¼|òÉf`™ý–+?C¹x±ëÖ-r¬üÚð’¼tjÔP—¤$øåhÊ”¹¾¯WÓTÑÎO>„“'!#*TP½Q!!®ŸC×UI‚  ü_OîµûÜݽ¨]»5aaj‘å p%n€uüøqš5kæø}Ó¦MÄÇÇ3sæLBCCèÞ½;Ÿ~ú)Y7jùs!„(d¨²·Éü¡†Ñ²Ã•scíŹs6úö…U«T¡ÊŠUã^±¢ÎêÖ-gx)Lˆ¹‘Ìùqm¶ì%bòÛ¦0¯-¿ž‡«¡È U+5üš·wëjÏ]Ø}a³Ù¿Àç `BܲËËË‹ÌÌLÇï?ÿü3&“‰:8® ÌQ„T!n&³Yõ²œ8+WÂÒ¥pú4 ö¿Iö³Ôìÿ6¬Ñ¿¿ gΨËÉ“°}»Zr¥n]×KÓ`ñbB*V„òåU0 SÃf~~8΀+JøÊo»ì éé)˜Í6.^__‚ƒƒrm“\L&ÈÊRûèìYUù|ûv5Ô8}ºëçïÝ[]r_o0ܸÏPšqÛ¬Ö­[óñÇsÿý÷c±XX»v--Z´p”eÐ4³gÏ(ó¯„ÅbíZ˜4 Ο‡Ê•aà@èÞ,hÉôék€®d÷`¥²†{ï½›:u Nk;gΨŠÝªAzºêMòõ…gŸ…^pÌâãÕYvj[Ÿœ?sŸèü4MÃl6±`ÁJ¦NÝE|¼…-lÄÅñÆmiÛ¶]ž^ŸøxxåFÌføâ èÚU =÷œ:ÃoãFX·Îu)Ì¿öûÙÏVsþûV’Þ~åüýÕpY@€ý ä^ZÆŠ»»íš»¸ßïõØFˆR°Nž®Öcsô( ªŠf®^ ÉÉðÑGj>ŽÁp{6¸ÎáèÞ{›[œB–:#ÒÇg=wßÝ\2!ŠÙ5 Ž=šÈÈH–-[ÆÏ?ÿ̈#Ð4;vGff&cÆŒaÖ¬Y<òÈ#„´”¸Sx8p ?ýô .Ä××—qãÆ1räH>üðC‚œ+Õ]ñÍ7ßÉœ9sgõêÕ<öØcx{{Ó£GùTKA#á,+ëê½âÖ V¹+ƒ»¹åÌ­ëj"ö±c9«’Ë0Q¶7ÞxŽ¿ÿ~™M›’ÈÌ Â`€°°3ôí»‡ÇSv¥)`ýïÿcúôé´oßž»ï¾›+VЧOâââðññá‰'žà³Ï>Ãd2ê1÷ìÙÃ×_Íš5kh{efª——Ý»wçðáÃ4nÜ8O¯Ô¤I“r„·;3ݻwóÁHÀ¢„†*{hÖuU{iÃ5ŸjêT5L슧gþsönï}ªÈÊ•¯2~üw¬Yó7ƒÙ¨S§;¿éØFzô…(%ëòåË”+W|||ˆŒŒÌ±ŸŸŸã?waìܹ___š5kæøƒP£F ¢¢¢øí·ßhÔ¨QŽ?º®çWöûxyy:Ô‰’Ñ@Ø?WŸ¼gL•ÖÆávêa)Ì{uÞæ×_aùruܹsªxg§N®Kf.UQ_«=´å.Zš>;ûÿ _ß Z´èÅîÝðøã^ºÿÿqÛ,]×sÔ·2 xæZUÔËË+ÏÙ…9{ö,‘‘‘9îLXXÇÏÔr‡-MÓØ¿?¿üò “'O.ð’··w ½¸ùáꫯÖðÖ[Ÿrò¤…öíuºvmÏðძ”¶ÏFÓàÔ)8r$g©€ÒÖ€[­0w.üðƒªëtႲÓ4µþܰaåtÞ Œ 3gB‹ðä“ðàƒê´|oo× ߈ÏeÁ5Ç/3S K?ü° ö~~j}ãÆ¥óÿ“Ù¬ö±ó÷Kù›&…jïÝÝÝñðð¸!'È]ÓŸ6ƒÁÀ˜1cˆŒŒD×uþüóO¦M›ÆâÅ‹ÿ©ÓÒÒHHH(ôðÌÌL<®LÀ°ßÇÃÃÒÕ9È”&MšDÙ²eéÙ³g¾²®ë<òÈ#øúú¢ë:&“‰^½zÑ¿9êŠáÛ·®Ûøè£%ôï Xx±aƒÎ† Ë9vl ï¼ó:šf(5ïÉh„Ù³aËuäß«€¥ëª*õÈ‘¥«P¢››Î!C†¨`òᇪLBö÷)]×\©Ì$ÝÝU5õaà WêÆüaU¯aàÀ‚·)M¹ÄjU1$D-¼l0¨°¥>¿»”¥µí9vìo¾ù&§OŸv|‘?xð M›6-Þ€Õ±cGL&“c=Â&Mš`³Ùr,ììááA‹- ]ÉÝ×××1´gG&“ “É„¿«E¼œ¶3¼ñÆlÞ¼™õë×RàŽýì³Ï‹RKVq}ƒ°/r–×^; Œ¼È>ż'K–yà ´oß¡ÐÃPö^Šââí cƨˇ»ïª3ßJo®^¨Í–Á… çÉÌ´q脇ûR¶lY@CÓt¬V¤$5ä—”¤jK¹ª¹T«–ë^¥›÷‡õúlS’¬X¡Ž1__|_zIío0@-Ê,„ÈÙÞÇÆÆ2wîÜ׿ûî»lذ¡ø–ÍfcíÚµ×ý”/_ž„„lNEi’’’HLL¤jÕªy†ía `æÌ™üç?ÿaéÒ¥ÔÏo–¬Ó}ÓÓÓó, W77XÙwwb¢‰ãÇ-€·S¸Ò—/sñb²£ÑKKS‹Ò†„¨òþþêâç§¾©Û{M 373Üde©K¹Ÿ³´j—.]äÕW—ðÁ¹|Y£Y3+ ø2iRcêÔéÈhlÛ›7«aÑvíTÀ*Í¡¥4ýzøau¹Úÿ9!Dþí½Åb!++ë†dB,à êonÑ¢&“‰7rÿý÷ð×_‘@£F0 ˜L&Çü/{Èš6mÓ¦Mãã?¦sçÎ9‚”„¦’x`«y<›6©ËÏ?«!Ž«õ €j¼Ÿ{Nõ™Lêz` Zs®~}7N-Œ›ûù,–ìoô7úp>î¼½³ƒ_I<. ÓðZ,Þ|so¿ ÔÜ¥;ÎЧÏjÕŠ )©µjÁ¿þM›nN–¸~ÿŸ®Ç6Bˆǽ¸_@\\=zôà‰'ž`ÆŒøúú2aÂ:wîLÕªU5j ,]ºƒÁÀìÙ³™4i}ûö%22’­[·¢ëºcxR”L{öÀäÉj¸¨W/’’Ü9vÌxâÜ‹”Lhh9ÇýbbÔpˆÙ¬æ:%'CBœ=›Ý‹åÊ/¿ÀˆÙ‹Ç–+§ š–+•+«‰Ö¹ÎÑ(Tqu»=<ýöÛÏ,Zô Gšø÷¿m´nÝœë¤}W=iV«Z÷.--û’ž®*ì›LÐ¥‹•E‹~ÚåÊçSž‹ï£J•|üqÂÂr®W†k…â¶XögÁ‚Œ=šaÆa6›éÝ»7“'O&àÊB]äÔ©SŽû­\¹£ÑÈüùó™?¾ãúàà`.]º$Ÿj èqu]ëÖ°m›êQrw"8¸2ƒMGÍòWš\IÏžûh×îÇãøøÀ•Rk6[öR'ù¬š5UµøcÇ >^]Tgƨ¹ÜMeü IDAT–ýu¡Ny¯PA]Ê—W?}}]OäÿýoÝ»CròË@K–XYµê{öîλïκ²Š¶æb~÷;{Võfd¨à™’¢./ªÅTû/·¡W/µ­®çÜ—‘‘pú4¤§ë¹Â•b0øPµª•Ê•ó¾> VBñ–«oã×ú Ýþ­ÞÍÍ·ß~›·ß~;ÏãZÇùº-[¶\Óë7&Lézö)â‡ÁâŪgiʵf\îûyx¨‹úŒ Ø—àà/˜8±GŽXhÒDçÚ3fÌô«~–CÁgI麚³Õ©Óµ½?çšMññêýÙ.0Ö¯Ï;899…_Üx%\…a?ËÎh|€O?5S­Úìê2ìh¼ÿ¾ Jiiª)5U…ŸË—Õ„å×_w}¿={àÑGÕ{ RÁ1(HA«5ÿ冚4QAÓ×W½§ÀÀœu¡ŒFðô´ßY˲  îîºËý&„â,ç†Ïd2‘••…¯¯/nùu%\%d]ËmW O®n,û"¼§NÁ®]ªhäÖ­ê,²êÕ¡gOÕÀç\œƒµ¦iôìùFãCLž¬ª{_¯ \Ô»ÚÉæÍÙ×Y,ª§(!AÍ#«V-ïýÌf ýuÙ®²{|ܹt©<Ç Aƒ¼“ÀíìsË*URa' {B½zù¿Ö.]®¾f£« ÿÁÁШQþÛ»¹èÒ¥‹mîrz?—‰ŒÜN³fä?ƒB\Ï€eoøÒÒÒX·n[¶l!##ƒ‰'R±bE~üñGÜÜÜhÑ¢E‘× ¹{ä,›ÂõRåÞGÉÉjy“_~Qô˜1jøÏ¹×êjûÖ9ùäš5kÆÊ•+2d+VdÇŽ|ÿý÷¬ZµÊåBÍÅÞxCõÄĨ ÎW¦x \¯÷fµºžß¤B•¯¯š—äêqn…àZp@Ìù»››2e<9~Ü ¸áÜ‹åí}‰ØX¿B¥k}-ײ͵(_¾"K–<Ǹq¿ñÍ7f^{M'6¶ Mš4ÍñeK!„‹/×E¹ÓþýûY¹r%³gÏfÁ‚9zî¸ãNœ8‘£øh i.yôQ?ž|RÕëññÑK͇TØ þ×Zéßy{{;ùÛoª`aÆðßÿº¾‡‡Ì® ÛÈç~žžy{°Šò~ŠSPP /½Ô˜JÎ!ÂÍ´n½ÎQ‚¤ôäµó"h×®3M›v¥W¯nŽp•{â»BˆœŠ4+11‘š7oî8ÓÏ.44”ÔÔT¬9*–ãÉ'aðà¾<ùd ô¬u§iꬰ3`ï^5Ú>ÈlVgË eË-¼mÛŸ|_|çÏ«ÚR=z¸ž ~=v—¦©IÜ3gªzXYYªŒÂƒª^³˜õ~œ—U)éÜÜÜxâ‰îøú~͸q=9}ÚD¥J6î½·9o¼ñ&¾¾~¥êƒÅ¢ñÞ{jŽ›› À< Ž—ÐPxá-ß¹aB!а¼¼¼°X,ddd8Šýç±cÇðññ)Qó¯®4ëìÚ5Ÿ¾æÂ…÷5ê ·R1K×Õ¸¯½¦~_¼žöíË»óÜ)ç@”ßÐÔ+¯À¤IªP䨱ª2t™2®óz¾Ÿ€˜0áêÛ•–]×qwwçÑGÄh|÷ÞS'8ß^š†ÓÜÝÕÚÆÝŸBÜlE"¬V­ÞÞÞ,Z´ˆÃ‡ÀîÝ»™1c­ZµÊwÁblQscóî»=z$OÉÝx4Du3‡¯TÝ%½À†M5à9ƒ•¦©³ÓÒÒòo‡ Q5vîT©s¸rÞ?×ûý\ÏíJD|wz±fsöR9®n¿UH¸Bˆ¾¨åNÑÑÑL™2…±cÇòùçŸðÌ3Ï‘‘A:u˜8q"¾¾¾%ðíª‰>gÎxí5#±±ê4øÖ­óž²no^ÍkjÒî¼óê=Òðÿ3&¬Züÿ­Ž“—_V·…†ªªéÎe„BHÀÊWLL 111… d%$Z¢£mL™âCl¬*"éíÿ=x@M&ONV¡ìÒ%œÎŸ/ø™¾üžyƾ,Œš(ìï¯Û:uàƒ\ž¬,5d¨B=¼%%düø?øý÷‡G£þçŸu™:u9‰‰?¾U«B·nj‚zT”zooé=¹áÿ‘Üáž{T˜usS!Þ^IÝÝ]Í¡B!+_š¦qôèQ>øà|\­û*REÇŽ)[¶¬cþPñ­L †w1"zõªå ‚®ˆ}-º¼Á±àÀòÐCЬ™:ûïâEÎ.^Tgÿ4=íȵ KzzöuAAàçw‘„ƒ#\9/¾»gOåÊ%päH <=óö–‰›Ý *D¤$ä !„¬}ºãLÂÝ»w3bĪU«†¯¯/º®óÓO?qÇw”ˆ7Û´)”/Ÿý{i™tlŸ+V±b óç¢^½ &O†'|E]eñ]!„¢¬¸¸8fΜÉÓO?MåÊ•º®ëT­Z•åË—Dzz:;v¤W¯^%âÍæ^P¸ôd‘ìêææG` ƒ«³%\ !„¥2`ÙK.<ôÐCtèеk×rèÐ!ÜÜܨ_¿>:uÂÝÝ]×ñóócüøñŽûIïJ㕦j*]¼¨B¢Á Bb"df‚——*PÚ†=…B XŽÆ^s„¬€€z÷îïvý.®Mz:¬^ GªJò:À¬Yj˜3:ZU  •ý$„B”Ê€eï‰ÊÊÊâÛo¿eçΘL&²²²0 ¸¹¹qùòefΜI`` ìáë@×UEö®¾äX!„¢,MÓÈÈÈ`òäÉ|ôÑGÄÅűaÃî¸ãNœ8ÁÙ³g¹ë®»°åžð$Ь°¡I•BQJÀ¾}ûXºt)óçϧM›61kÖ,j×®ÍСC Á» ²âB!„·°"½páeÊ”¡qãÆ¢iƒÈúõëIII‘½+„B X…åáá···c0 €ƒàééÉùóç±Z­²w…Bq[*Òadd$™™™?~œŠ+Ò»wo^yåÜÜÜøì³Ï(_¾<>>>²w…B!«°ªW¯Î”)S¨X±"“&MÂh4:®{ûí· ½+„B X…¡ë:DGGS®\9Ê•+Çܹsù{gÅ•ýýo7 4K7ÐÐì‹ Š€ àNBT·¸`Ô‰KÜ¢Á-jÆŒQÑ$F%&5qÉŒû6£DÜ ›€²‹ KÓÐÐ ½÷ß®­ ˆ˜Ìý"‘|þÿi5½^˜˜˜0 3 ƒÁ`«9ܽ{—/_ÆO?ý„o¿ýîîî033ã>—ËåHIIT*ef0 ƒÁVsðòòºuë`aa½^½^osU__+++f]ƒÁ`0L`5"‚››"##[å ¬±˜-CaégmkÎgŒ¶‹ÁoÌmÛ?Œ¶ïæ+æFÛßÒùùùؼy3/^ŒòòòPZZÚì·y<x<V¯^ gggH$,Z´•••Ü ûøþ …+V¬@XX¦M›†ššÖqÿ ðx<9r„ù¯ ûçôéÓÐh4ÌmÔ?qqqÜ=“Ñöü“––†ÜÜ\æ&°š'ˆ~øáaÙ²eøòË/QZZ غu+'xšËÂ… ±zõj,Y²ëÖ­Ãþýû±lÙ2(•ÊF;daa!þñ€ÇãÁÏÏõõõÌ“pþùÏ2#´a>ÌVæÜ¹s(//g†h£Ü¾}YYYÌL`=›ääd¬]»QQQ(++ã„ <¹¹¹P©TÍ:Vvv6vïÞ~ø .Ddd$¶oߎƒ"''§Ñ6;v„L&Cll, ÄÖŸ@ÀŒÀüÃh!&&&lv¤-´|¾Ñ›ö &°š¤¨¨666˜6mšÑÛƒààà€ªªªf{Ž‹‹!""‚[ ‚T*ERRWPÚÁÔÔPWW÷\OÕ,mDÛ… m€`¿æXƇ“—åAK/ÈÄÄ:î T^^þ\©°°...FûÛÛÛÃÉÉ Æ`=/±W^^KKKhµZÖ«ÚÖÖÖ¨««CUU[†j£þQ*•(++ƒP(dicXXX ¦¦‹Å¬ŠFÃÔÔUUU055Eeee³'¿ : …DÔê¿§iP*•8yò$fÏž àQ©­V‹¯¾ú ]»vmvš†ÚÚZî¦mOæææ077Guuu«|É{÷îúöíËžòÚ <ÕÕÕðôôdƒCöÏñãÇÙLcöÏ7ß|ÖrÛ¨”J%ø|>ÌÍÍ™AÚ …áááP(°°°ø}–¯¯/¢¢¢0gÎ|óÍ7€±cÇ"//VVV8yò$¬­­›u,33³'f”´Z-´Zm«=-¿úê«øç?ÿ‰Ž;ÂÌÌŒ â ƒÁ`0üßê–¡–òï&° y<Þyç„„„`ûöíðððaĈ˜;w.\\\šïÃÉÉ åååFKUUUËåðôô4:ÆÓrf=ízmll0yòdÖ‹ ƒÁ`c´î“ÀóØúYögþi}ÿ´V[æ›ßÖ?-±7óÑï{{>e´žo^†xÔ‚VeeeصkNž<‰´´4¸¹¹aÀ€˜0aúöíû\Fàñx(,,ÄüùóqëÖ-èõzaíÚµ„……!??yyyÜÛ†¶¶¶ÐëõP( …°µµ…J¥ÂÔ©Sggç'f³ ´“'ObçΨ©©Á°aÃ0oÞ<VÊ •;9ÇCYYÖ®]‹„„øøøàïÿ;:tèШ­Õj5._¾Œ'N ==vvv:t(¦OŸntLFëùç›o¾ÁO?ý,X°ýû÷oVIª¸¸8DGGÃßßk×®e}IþÙµk<@€éÓ§cÔ¨QM¾¥mhƒmÛ¶¡¤¤®®®˜9s&úõëÇŒúüsôèQìÞ½jµcÇŽÅÔ©S¹XßÇLJœœlܸwîÜ……Fމ÷Þ{ÝÛ^ñññøïÿ‹›7oB¯×cõêÕ |ª€âñxزe Ž?¡PˆÈÈHŒ1¢Åä¹ÐëõDD¤Õj©ººš²³³é‹/¾ .]ºêر#-_¾œjkkŸëx …‚Š‹‹©¸¸˜ªªª¸íDD2™ŒÊÊÊŒ¶Qqq1]ºt‰\\\èµ×^£µk×R`` PEEE“çÚµk‰Åbš5k-_¾œiÞ¼yFÇg´•••Fݺu£/¾ø‚z÷îMNNNtÿþýF÷ÏÌÌ$7778p ­^½šæÏŸO4qâDfÌVÄÐ×gÍšE666ô÷¿ÿÆO–––téÒ¥g¶«¯¯§Ñ£G8p 3èKòϲeËH(Ò‡~H³gÏ&‘HD{÷î%N×d›;w’••M™2…Ö­[Gï½÷­Y³†õ%øgóæÍdaaAsæÌ¡Å‹“½½=}þùç¤V«mwçÎrpp ÀÀ@Z³f Íž=›lmmiįܹ̂­ŒN§£Ñ£G“••uïÞÌÍÍ)66ö™>3gYZZÒÒ¥K)22’Äb19r¤Eú-í\,99™HèÁƒ/Ý€jµš>ûì3êÑ£q7~gggZºti£mù„´Z-ÅÄÄT*¥˜˜Ö+[ù&´oß>ruu¥´´4n{‡hܸq¶©®®¦ÌÌL£m§OŸ&KKKúïÿˌڊ¤§§:rä·mܸqð̶ûöí£·Þz‹üýýiðàÁ̘/‚‚277§­[·rÛ–/_N^^^TSSÓd@@»víjra´eeeäééIŸþ9·í_ÿú999QVVV£m–,YBfffFÛ>ùä211a} K.—s÷:>ŸÿTED”˜˜H–––tüøqnÛÒ¥K©k×®$“Éžûø-åñxÐh4(--EJJ >ùäLœ8 èÒ¥Ëo’¶§OŸÆ!Càêê àQR·©S§"&&¦Ñ„¢™™™(((À[o½ÅåÄòõõ…‡‡nß¾ÍæT[™ƒ¢W¯^ð÷÷ç¶-X°/^D]]Ý}K$¡S§NÜt-!,, ¸‚âŒÖaïÞ½‰D3f ·múôéHKKCaaa“íJJJ°k×.L:•ûÝ1ZŸ'N€ˆ0kÖ,n[DDÊÊÊ™™Ùh›èèh8;;còäÉHJJBRR>|ÈŒùˆEYYæÌ™ÃmëÛ·/,--‘œœÜhÌŽ‹‹ ”J¥Ñ=ÎÃô•—où|>lll|8^ýuœ?8sæ RRRZ=ŸDc¨Õj”””ÀÓÓÓh µ[·n(//GQQÑmJKKaeeKKKn›¥¥%¼½½‘““Ãê¶2YYYèÔ©“‘ºwï•J…»wï>Ñ·þÛ æÀãñСCfÐV$)) ]ºt1ò¿¿?ÌÍÍ‘ÐèM‹ˆpüøqèõzDDD0#¾DÒÒÒžøí´oßöööHLLl´Í¹sç ‘H0iÒ$¼ýöÛú&L@nn.Ú·oÏ ÛŠþ¡ÇÒþnêÞ¶~ýzìØ±ׯ_‡»»;ôz=æÏŸ)S¦ %%…ývÚÀ=ñqm`øÍµD´(K"‘ gÏžœ¸ºzõ*¦L™̘1Ã()èË6†µµ5är¹‘hzøð!¬­­ŸP¢À£ÂµZ­Öh)P­V£¢¢F3[ŒÇÁÁ¥¥¥Fþ)..†™™ìíí›W0zôh¤¤¤ ..ŽŽŽlðne\]]¹etƒoÊÊÊ ÓéàææöăI||<öîÝ‹¨¨(TVVB­VC­V£¾¾555P«ÕÌ?­ˆ““?eð\.G]]]“±o®®®0111z¸íÔ©x<^£!Œ–cooÊÊJ#‘U[[ …B—F À Aƒàçç‘HLœ8ÈËËcFý‘J¥Üì°Á§ÕÕÕP*•-Š7m¶Àj§ÑhŸŸ5kÖÀËË aaa8rä–-[™L†›7orËB/sss´k×YYYF³Sqqqpuuå ƒªT*£é¾êêjdff¢S§N\FxFëЭ[7níÚàŸ˜˜ØÚÚÂ××÷ ÿf$,X€óçÏãêÕ«\Çf1$­Kß¾}‘ššjä››7oB£ÑpUú&77¡¡¡°··‡P(D\\bbbàââ‚ .0£¶"Ý»wǽ{÷P[[Ëù'-- •••èÕ«—ÑŒ‰°°0¨Õj( n›á…Ãr0£uèܹ3ÊÊÊP^^Îù§  nt†K£Ñ4:£oW­GsÆ "2òG×®]‘ššjŸ••…šš´è"šMff&íÙ³‡ D‰„üýýéóÏ?§óçÏ“••÷z}SiZ­VKÛ¶m£Ž;ÒåË—I.—SRR‰ÅbÚ´ieeeÑH¥R‘\.§¡C‡Ò¤I“¨  €ÊÊÊhëÖ­äééI·oßf¯3·rš†_~ù…éßÿþ7UWWSNNÙÙÙÑâÅ‹‰ˆ¨°°:D•••\êèèh²°°àÚÈår’ËåTWWnjڊ“µµ5­ZµŠ •••Qhh( :”ˆˆjkkéôéÓ”ššJDòÑݺu‹âãã)>>ž233©gÏžÔ·o_JKKã^‰f´UUUäììL , ¹\NôÎ;ïPïÞ½©®®Ž´Z-?ž®^½Êµ‰'sssZ¹r%UUUQEEõëׯY©7χJ¥¢šúˆLMMé×_%™LFåååôöÛo“T*ecÏK@¡PPyy9ÅÄğϧŸ~ú‰d2—§óÖ­[ôïÿ›Ë+—ŸŸOR©”>ÿüsª¬¬¤ââb7n 4ˆª««ŸÛ?Ï%°lllM™2…nÞ¼ÉmÏÉÉ!¡PH)))¿¹>|Ho¿ý6Ñðáé}ûö4uêTn0þì³Ï×ቈbcc)00^{í52dµoßÞ(× £uoBóæÍ£N:ѰaÃÈÛÛ›† F …‚ˆˆ~üñG@·nÝ2ÊÍ$•JiäÈ‘A4jÔ(:pà3h+Š_"¢­[·’»»;½ñÆB!!!”‘‘ADDyyydmmM .l4±%Qhh(õë×åZzIþ9xð yzzÒ€(44”üýý)66–ôz=ÕÖÖ’½þúëFvÿä“OÈÅÅ…úõëGݺu£.]ºÐ7˜^‚~ùåêÔ©………Qxx8uìØ‘<Èý^^}õUrvvæþ.++£!C†““ 2„ºuëFíÛ·§C‡1ÿ¼¶lÙB¯¼ò òóó£àà`:xð —,¹áÃû÷ßOîîî4pà@ ¥ ÈËöåÇIDAT  º~ýz‹Îÿ\¥rþò—¿àÊ•+ðññAxx8Þ|óMôêÕ EEEðññÁ­[·¸×¾«)@™L†˜˜”––ÂÕÕáááÜ›…iii¸ví&NœKKK®MFFnÞ¼‰úúzøûû#44Ô(5£õü£T*qñâEB*•"<<œ{;*77/^DDDÓpìØ1èt:hµZ£¥Ãž={rKWŒÖóÏ•+W––¡Pˆ°°0.ÚgÎÛÛÁÁÁþ.~þùgðx< 2„ô%ù'!!IIIàóùèÕ«·T¡ÕjqæÌXZZbÀ€F÷¯‹/âîÝ» …èÛ·/:vìÈîm/É?©©©ˆ‡V«E×®]ѽ{w. úܹsP(5jg{™L†ØØXÃÂÂ]»vEpp0óÏKàúõëÜÛ³fffÐh4¨¯¯Gÿþý„¸¸8äååa„ \€»¡Öqjj*úôéƒÎ;·èüÏ%°*++QRR‚K—.aÏž=HOOGûöíŽ~ø‰‰‰¿é[* ßæ|Öð«6Õ†uðß×?ϲ?óQëÍýŒš¨­ÆüÒvüÓÔïÑvÆæŸßÿ÷ÓÔýìiþiÉ=®Ù«áÁõz=ôz=²³³±{÷nüðÃ(//G÷îÝ1}útL˜0›¡`0 ƒÁø_ã¹f°ž¦æÎž=‹o¿ýç΃J¥Bqq1œ™… ƒÁ`0õ¢B«¢¢Û¶mÃüùó!‰˜… ƒÁ`0õ"B `ëË ÆoEsâ¤^äX/ûšYÜÖŸ·/¶$ž’õÆŸV« ÓTiãm ùÍžŽx<Ô××cóæÍø×¿þFÓâß Çõk×0gΜFkx¾¨>€}ûí·X±b»_´Ð®—fiOêÿ¿nhTT.^¼Ø,ßòx<ܽ{Ó§OG~~>ë &°Œÿe4 Ö­[777xxxÀËË ½{÷Ftt´Q Åß ­V‹«W¯"11ñ‰ ÑÏKvv6~üñG£2R/2à–——cÇŽ(--5DII ÌÍÍakk ¥R N¡PÈ]SMM  ôz=„B!lll ¸%±’’ØÚÚB­V£¶¶‰¦¦¦ÆîèõzÈårðù|( D"‘ÑË7jµš³Á‚˜<jµ2™ ‰555P©Tprr‚B¡€R©„V«…‰‰ Äb±Q2cCAl‰D‚ŠŠ èõzîü†ãêt:#ÿ¾G}}=ªªª Ñh `cc¡P(--åúVyy9t:g ½^ÊÊJÔÕÕÇãq}ÎÐߪªª@D033ƒB¡@MM |||¸Ùϧ…zh4TWW£¾¾D¡P;;»§ ª¢¢"ØØØ@§Ó¡¦¦ÆÈoSYY ¥R @[[[˜››Q®­­…V«mô·Ä`´Õ'1ƒÑLêëëiþüù4|øp®¾%ÑÎ;ÉÞÞž+!¥×ëéûï¿§€€rss#'''?~<åççsmrssiÔ¨QdggGÞÞÞ4iÒ$š>žkøða@ß}÷…††’··7íØ±ƒŽ9BTQQAuuuJR©”œÉÝÝÌÌÌ]¼x‘ˆˆ>ýôSêÖ­yyy‘³³3…‡‡sçÉÈÈ GGGâñxdooO¶¶¶EDDo½õuéÒ…»žììl5j¹¸¸³³3uéÒ…öìÙC†«'€Þÿ}5j¹¹¹‘ }ýõ×O­A6bÄ>|8M™2…|||ÈÞÞžFŒA¹¹¹Ü~»ví¢ž={RûöíÉÉɉºvíJ.\à>‹‹# úì³Ïè7Þ víÚÑÊ•+éáÇôî»ï’¿¿?¹¹¹‘»»;EFFRyy9×vܸqdffFÛ¶m#²´´¤ˆˆ*))¡Õ«WS`` YYYѰaÌڕ——ÓâÅ‹É××—\]]©]»v´páBR(¤×ë)<<œx<‰Åbrrr¢ððpÊÊÊ""¢Ý»wS`` ×çÆŒC÷îÝãJëjÎ;—:wîLžžžDDtãÆ :|ø0Wª1>L¯¼ò uèМœœÈÏÏŽ=Ê•)**¢Ú±cÇÿÕbèÝwߥ1cÆ««+ÙÚÚÒÚµk¹þ}õêUrpp íÛ·ÓСCÉÍͤR)}ùå—T__ODD†¦NJäîîNR©”&L˜@¥¥¥ì†ÄhÓ0Å`´@`9’………4`À âŠVïÙ³‡¬­­içΔ––F±±±Do¿ý6'Œ"##©sçÎtêÔ)º}û6}üñÇ$hôèÑÜdiiIëׯ7º†7Þxƒ&NœØ¤ÀÚ»w/9r„RRRèÆôæ›oR‡¸ö'Nœ {{{êÚµ+ýôÓO”žžNeeetäÈruu%™LFz½žòòò(++‹²³³)##ƒºuëFÝ»w§ªª*ª««£={öÐÉ“'¹ï7räH8p UVV’N§£ãÇ“©©)>|˜rss¹qòäÉÊÙsРAäïïOgΜ¡Û·oÓ_ÿúW’H$\ãšš@=zô ýû÷Szz:}üñÇÄãñ(''§Q?ÕÔÔдiÓ-Y²„èÔ©SäïïOï¾û.)•J"":tè8p€~ýõWJHH ‰'’‹‹ gËëׯ“‡‡uìØ‘8@iii”——Gyyy´k×.ºt饧§ÓáÇ©cÇŽ´|ùrîf̘A¦¦¦4{ölJLL¤S§N‘P(¤!C†Ð¤I“(11‘Nœ8AÖÖÖ\-Ôºº:Z¶lõèуŽ?NééétôèQòöö¦eË–QAA™››ÓÒ¥K©  € 8$‰hûö픚šJqqqÔ«W/Šˆˆ ½^OJ¥’æÎK<-ZDñññtëÖ-Òh44wî\rvvnÒž†~³gÏJLL¤¤¤$zÿý÷I*•ÒÇŸ*°¼½½iË–-”’’B6l \í½«W¯’»»;Ð(%%…V­ZE®®®tûöm""Òjµ´~ýzºpᥧ§ÓÙ³gÉÝݦOŸÎê÷1˜Àb0þLëÃ?$¡PH½zõ¢Þ½{S@@uïÞ®]»ÆíçëëK‹-2j{ðàAT]]MäææfTd\£ÑP·nÝhĈ-X 6wîÜ!\1ö'N™™=zô‰ë3¬Çùè£ÈÁÁ›)i¬øóµk×È××—+Ü””DfffF…áX—.]"+++ºté÷yYYõèу–.]JjµšX_|ñ…ÑqÌÌÌèÇlR`Mš4‰üýý©¢¢‚Û¾wï^òððh²0}AA NÜ]¿~ìììhÓ¦MÏìÑÑÑNUUUœÀ‹ÅFç'>ŸÏ‰s"¢Aƒј1c8±Þ¥KÚ¿¿Ñ±7lØ@!!!ܱ„Bá3xÁÁÁ´`Á‚'D‘™™•••‘J¥¢Y³fQPPrûhµZºsç]ºt‰žÓX¿*//'GGG:uêÔSÖäÉ“Úõë׺wïn4ƒµyófîóœœòööæŽÛ_}õ‰D"vCb´iX;ƒñœèt:øøø`æÌ™˜1cÄb1rssakkËÅHUWWcË–-H$Üï¾û.´Z-òóó¡V«!—ËÑ¡C£@ã>}ú@£Ñ¼PÐ{aa!ÆgggH$ôéÓ‡‹çjàÜ»wïfAïÞ½ÿøÇ?püøq®h0ŸÏÇíÛ·1bĸ¸¸@"‘`àÀÉd¨««ãìÔðÿ‘——333.n àç燴´4£‚ß>>>F×%‘HPZZÚä±µZ-‚ƒƒaffÆmk×®4 ÷ÖšL&ÃŒ3àêê ‰D‚   hµZÜ¿ßèX!!!O†:t=zô€ƒƒììì°|ùr.^È€H$2Š•“J¥ðññáâË ß£¼¼À£7ñRSSiÔw/^ ¥RÉígˆ3k¿T]]ï¿ÿި݄  V«‘ŸŸ>ŸÏÅú*ÁÄÄ;wÆk¯½ ‹FSlжÿõ¯…‡‡$ |||PZZŠ¢¢¢§ö£®]»ÙîÕW_E~~>¯ÑhЧOnsssØÙÙA&“qmbbb©T ‰D‚+V@¯×C­V³ƒ¹3¦ ÷víÚaâĉ°°°@dd$ðÁàìÙ³ÐétP«Õ˜7o†­Vk$ÎÚ·oÏ J›˜˜4)t ‡§‰¢=zÀÓÓ_ý5\\\PUU…Ñ£GsB‡ˆ`nnÞè¹k X¾|9Ö¯_>}úpƒmrr2ÆŽ lܸŽŽŽÈÊʺuëž+]„^¯o4HÙ(ßðo@`n OÃÄÄÄèø† nƒM{öì ¬Y³¨««Ã[o½e$ MMMŸ8÷þýûñÞ{ïaΜ9X±b¬­­qæÌÄÆÆùËЮáù ‚¯áˆóéõz˜™™aåÊ•èÙ³§‘ÏD"<<<š“uuu˜5kÖׯÓéЩS'èõzÎ÷_׳úôë×<ÀÊ•+Ѿ}{èõzLš4驺±>mbbòDŸnônð‘¡o¤§§cÀ€˜0a>úè#H$œ9sëׯæ¹ &°Œ?87nÄèÑ£qæÌ 2ÖÖÖ¨­­EXXX£û›››C$¡°°Tˆ)))‹ÅÜ~ŽŽŽ(..6j{ÿþ}¸¸¸4:ýúë¯Éd8þ<ºtéO ú‰¶Æ(--ÅòåËÑ¿L›6Íh LNNŸÏÇŽ;àèèÈm—ÉdÜ¿ù|þ3Ïãææ¥R‰û÷ïC*•är9òóó “¢&&&¸sçêëëaee())áÞ„ÌÍÍENN®\¹‚ÐÐP@RRR£¢µá÷P«Õ¸víF…µk×râàܹs/œò@(ÂÉÉ xíµ×š5Ãh˜‹Å¨­­m²J¥jT<5ü~M½EX\\Œ¤¤$œ8qo¾ù&€GyÓšó_FF†‘PKHHàêÔ6GŒ;v ^^^Ø·o·íçŸf7F›‡-2/á•W^A§NpèÐ!À|€ï¾ûÇŽC^^ €½{÷x´,ôꫯbçÎHHH@~~>8€ØØX£%­~ýúáèÑ£ÈÎÎFaa!6lØÐä²ÁÞÞD„Ë—/£¤¤©©©øâ‹/žûUv­V‹¯¾ú X°`T*JJJððáC—2áêÕ«(**Â7ðå—_ ÐŽŽŽÐh4HJJ‚L&ƒB¡xâ<}úôAHHþö·¿!55صk’’’0räÈF_ço.¦¦¦¸uë>Œ¼¼<ÄÇÇcãÆèÛ·/¼¼¼`gg@€ØØX””” ##ÑÑÑÏ\v°··Ç½{÷””„ÂÂBœ:u »víâR)´©TŠaÆaóæÍ8wî ‘““ƒØØXœ?žÛÏÒÒIII¨¬¬äDí¼yó°cÇ:tyyy(,,Dbb"öîÝûT!£×ëqíÚ5ìÛ·555îckk +++\¾|<ÀÝ»w±qãÆ§.ш‰‰ÁÏ?ÿŒ¢¢"œøà¬Zµ ;wî„©©)Þ|óMœ={–‹íÒjµ¨­­}bÐÕh4\ž$FƒèèhˆÅb|øá‡œè …Ø´iú÷ï!C†`áÂ…J¥‰Dpqqár<€««+FU«VaÛ¶mxçw°hÑ"(•JNl‰D"¬_¿ .Ę1c  ¡T*ÅÅŽ¾çãÂÇë)4 †Š“'OâÇDII ìíí±lÙ2.ïÔÇŒ 6àðáÃ077Ç믿ÎÍRlUUUe´TÇçó1vìXœ;w“'O†D"ŒøøxήJ¥UUUFפT*¹¼gjkk9acii‰åË—cÉ’%˜?>,--abb½^‘#Gr×·xñbDGGcàÀð÷÷ǧŸ~йsçB&“!** b±˜ësíÚµÃøñã¹¾òx)$­V‹}ûöáØ±cxå•WŒò„¾³……V­Z…µk×âìÙ³ …èÛ·/LLL¸ÌÿD„ššš'*cÓ¦M(--Evv6fΜ‰Y³fx´|ÙоÁ§P(¸ÜdÇÇþýû1zôhxzzÂÊÊ Ã† Ãwß}ÇnHŒ6M«{f0þÐëõÈÎΆJ¥B@@€Ñ²™B¡@||<áàà½^ôôtî)_,ÃËË‹[ -÷Ý»wàíí?þJ¥‡âârrr——@€®]»"//¦¦¦ð÷÷‡N§Cff&ÌÌÌСCðù|¨T*$''C¡PpãW¯^EPPìííQ^^ŽôôtôîÝ›K* Ÿ¸¸8hµZ£ÁÏÄÄÁÁÁH$ÉdÈÊÊBMM ¤R)Úµk‡ÌÌLtìØ‘KÖY^^Ž;wî ¦¦íÚµCçΑ‘‘•J…î;Þ¿999Ðh4J¥ðõõåMêõzÄÆÆ¢K—.F¶»rå <<<àééù„Ÿjkk1cÆ H¥R,\¸……… "tèÐÁhµZäädÈårØÚÚÂßßñññðõõ…““ª««‘œœŒ   .¬Aôf—ôz=¼¼¼ ‹‘——‡ÀÀ@˜››###•••èÛ·/w¾´´4ÔÖÖ¢W¯^ܶôôtÔÕÕÙ£ººYYYËå055…ÚµkÇ-×ÕÕq×mmm   X[[C¯×###ƒ›i‹Åðôô„T*…^¯ÇÝ»w¡ÓéàççÇÅÿéõzäåå¡¢¢OÌ®I§Ó!%%°¶¶†ŸŸÒÓÓááá777Ô××#%%nnnÜ6ÇÃÖ­[1lØ0dffÂÒÒAAAÜ’mUU’““̉ކÇqvvÇCii)222 Õj9;¤¦¦",,ì™±„ X ÆtFËÇÒpŽž’aºáÌWCªªªàáᨨ(DEE5¹ßÓÎAÏÈlÝÔçôœ±›sž§]{Ã}šÚïi߯ágígXvvvøúë¯aaaÑ¢ëķͱUc×לmO³Ç³®»%>lìX­Ñ¯ óxl~õ2únk}oƒ ,ãOŽ¿¿?|}}±gÏh4DDD`ÅŠpttdOå/ŸÏ‡§§'W‘ñûàçç×jÅÃŒ?Ü8["d0~{žµ„ÈDAëÚ–Ùô÷õ³?ƒ ,ƒÁ`0 Æ Ãò`1 ƒÁ`0Å`0 ƒÑ¶ù†æyî1pðIEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_hyperalignment_similarity.png000066400000000000000000002563051202542755000246270ustar00rootroot00000000000000‰PNG  IHDRvŒf]õ†sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEÜ(#jS×! IDATxÚìwTÇÛÇ¿»´Ë¥wQé ¨ØÀ(MQŠˆ °"ˆ±E¨1¶¨‰ ш-Æ®ü+XÐØb "j”ÆŠRbPQª€Ò.óþá{÷°\@DÔùœ³G™;»3;å»ÏÎ<3ËB( …B¡P(Ÿ=,- …B¡P(jØQ( …B¡P¨aG¡P( …B¡†…B¡P( …v …B¡P(Ô°£P( …B¡PÃŽB¡P( …B ; …B¡P( 5ì( …B¡P¨aG¡P( …B¡†…B¡P( …vJ-\¼x,ËâÏ?ÿ¬wÜC‡½3®¿¿?ŒŒŒší}/Z´,Ë"77÷q @ 壷 –eñÓO?qïÚµ ,ËâßÿmÔtáääÔ¬Êó¯¿þ‚­­-Á²,’““i#£PÃîk`ãÆ`Y={ö¤…ÑH0 Ãû{Ïž=X»ví_³úu?çòù˜÷²lÙ2=z”6ÄfÂíÛ·1lØ0B^^­[·F¿~ý°aÆOÒ.>E¿©ž÷§OŸbÑ¢EHJJj’2///‡··7òóó±fÍìÞ½úúú´1Rš%Ò´—¨¨(…B\¿~?†‰‰ -”ÀÁÁoÞ¼ŒŒ ϰ»sç¦M›Öàënݺ„/¢Œ>|–ýxïhË–-ƒ¼¼¼hƒlb®\¹'''b„ hÑ¢žÿøãÞßOŸ>ÅÏ?ÿ ccctêÔé“—ûãÇñï¿ÿbÛ¶m7nmˆjØ}-¤¥¥!!!k×®ÅìÙ³… |Ò®]»B(bóæÍ€ÔÔTx{{C]] °±±Á‰'xéÔæãX“orÕò¶µµ…P(„±±1—޻عs'œ9íoß¾=6mÚÄ‹3`À€Zg©lllЭ[7^ØîÝ»amm ¡P Œ1ÿý÷ß;ÛÉܹsß«­À¯¿þ ccc…BôèÑqqq5úrÖ÷ÙKGì¾"ÃnàÀPRRÂèÑ£±wï^ܸq]»v…ŒŒ † ‚C‡aóæÍ¼·é#GŽ ¬¬ Çç¶D||<&Nœˆ¶mÛ"99áááxøð!>,!L@PP455ahhX·n¼¼¼0fÌ”••aïÞ½ðööÆñãÇáîîήƒÂÏÏ={öÄÅ‹ááá!12–••…ž={BJJ ÁÁÁÐÒÒ‰'ˆW¯^Õ95joo™3g¢°°JJJ „ >>RRRˆ‹‹ƒ§§' ..RRR°³³«ñ:óçÏǬY³ðßÿaÍš5EEE^œÐÐPHIIaÖ¬YÈÏÏGXXF…«W¯¾sÔoÏž=(,,ÄäÉ“aaa2dRSSëå+++CÿþýQ^^Žàà`´hÑÿý÷~ÿýwðĵ6Öîãã###„††rÓmyyy<ã°º?Òëׯáàà€gÏžaâĉÐ××G||<æÌ™ƒgÏž!<<œ‹ˆˆˆ¸»»c„ (//G\\®]»kkkDFFbüøñèÑ£&L˜Ô½  144DBBîܹƒöíÛ¿s¤µ¦6„–-[bÉ’%HHHÀÖ­[¡¢¢‚¸¸8˜ššbùòåøý÷ß±råJXZZb̘1ïl§U‰ˆˆ€²²2f̘EEEœ;w ,À«W¯Æ»NNNÜÝÝ1bÄøùùAGGG"víÚáçŸÆ‚ 0qâDôîÝ`kk‹^½zañâÅØ¿?¾ýö[^ŒŽŽÆ°aÃêe<{ö,ÜÜÜ`jjŠŸ~ú ¯_¿Æúõëagg‡ÄÄD`Ò¤Ihݺ5–-[†iÓ¦¡[·n¼|V'33NNN’’Âܹs! ±mÛ6ÈÊÊJ”Ã0xðàFމI“&aâĉ077GVVlmmQRR‚àà`hhh`×®]8p ¢££1hР¼çååÁÃþ¾¾5jöïßÉ“'CVVö/l›6m‚¥¥% iiiÄÆÆbÊ”)¨¬¬Ä”)SLJŸŸ÷Ü“‘‘k×®aÕªU¼Ñç À××&LÀ‹/°~ýzØÛÛãï¿ÿæFGëj'õmk¿ýö‚‚‚`oo3f -- ƒ†ššôôôx/ºïóìm¶J£pãÆ Â0 9~ü8!„òòr¢££CBBB¸8gΜáÅãîîNLMM¹¿###‰””‰çÅÛ¼y3a†\¹r… c†HKK“{÷îI䩤¤„÷wyy9éСéÓ§vóæMÂ0 ™>}:/n@@a†üôÓO\X`` iÕªÉÍÍåÅ1bQUU%oÞ¼©µ|þúë/Â0 9yò$!„äädÂ0 ñññ!={öäâ 8X[[s_¸p0 C.]ºÄ…yxx###‰4ÄqÛ·oOÊË˹ðuëÖ†aÈ?ÿüÃ…;–r§¥¥†aˆ––ÉÏÏçÂccck¬³êüý÷ß„aSkq¿U/ë… †aÈ Aƒxñ¾ýö[Â0 INNæÂ I@@÷÷âÅ‹‰¢¢"yôèïÜ9sæiiiòäÉB!çÏŸ' ÃðÚhM(**ò®Oi:þøã"--M¤¥¥‰ ™5k9sæ ¯½×Ö.vîÜI†!nnn¼x¶¶¶„a2eÊ.L$===âèèXg;_3##ƒ «I&MšDHii)æàà@†![¶l‘ˆïàà@œœœ$ô£¦¾ckkËÓB9tè„nÔDçÎI‹-H^^–œœL¤¤¤Èرc%´¥®þ-&((ˆ°,K’’’¸°ÜÜ\¢®®NX–å••a†œ9s†wÂ0 ïPTTDŒ‰‘‘©¬¬¬µükÓMqy‡‡‡saeee¤K—.DGG§Æ6T×ó„B\]]‰‰‰ ÷÷«W¯ˆ@ 3gÎäÅ #,ËrÚ“žžN¤¤¤Hhh(/Þ?ÿüCdddȲeËêÕNêÓÖJKK‰††éÑ£‰D\¼ˆˆÂ0 ¯½Ï³·9C§bq´NKK ®®®o‡B¥¥áëë‹}ûöqÃÂÎÎÎÐÔÔÄþýû¹óòòòpöìYøúúraDÛ¶mannŽììlî_¸p—¶ƒƒ,,,$òTÕÏ.//ùùùèÕ«¹ðS§N÷ÆUõ­¾ºïGLL <==!‰xùêׯ x×­N—.] ¨¨ˆ¸¸8nd®uëÖðóóCbb"JJJ@ÁåË—¹7ò†À]ëÕ«€·>ïÂ××—çGSßsÅçœ:u oÞ¼i´vUu¢j½TŸ’©ÊÁƒaooUUU^=õéÓ"‘ˆ«ƒ˜˜°,‹… Òü™Ð·o_$$$`àÀHNNÆÊ•+Ñ¿´jÕŠçÒP¼¿ÅÓœUÃY–…µµ5RSSß;Uýà ‘^½záõë×xðàDÜÚ÷óóõk×xyŠŠ‚¾¾>ìíík=ïÙ³gHJJ‚¿¿?TUU¹ð:ÀÅÅ¥Î>V§N‚­­-:vìÈ…©©©aôèÑ5úÃÅÅ…vâÄ ôèѶ¶¶\˜‚‚&L˜€ôôtÜ»w¯Ay“‘‘Áĉ%þ~ñâç~QUŸ'ÈÎΆ½½=RSSQXXPRR‚››8À;wÿþý°±±AëÖ­‡!Æ ãi”ŽŽLMM%žqµµ“ú´µ7n 77ß|ó o1ѨQ£ ¦¦&¡ïóìm®Pî‰DØ·oœœœžžŽGáÑ£G°µµEVVÎ;’’ÂСCqôèQ”——s ¼¼¼œgØ¥¤¤àÎ;ÐÒÒ‚¶¶6w˜››ƒa¼|ù’—~mû±?~={ö„¼¼<444 ­­M›6q>_â!òšüÔªO·½|ùؼy3/OÚÚÚ7n\ùªŠ””lll8Ÿ¸¸8ØÛÛ£W¯^‰D¸zõ*îÞ½‹¼¼¼6ìªoC î¼yyy|nII ž?Î;Äu0}útlÛ¶ šššpuuÅÆyeÝÌÌÌ$,Ë"##£ÖsRRRpòäI‰öãââ†a8GðÇ£eË–¼‡¥ù#ö•ÍÏÏÇõë×1gÎbذaõzàWoãâ—’ªSRâðúô™êܹsƒ†ªª*TTT ­­ÍMçðâ¶jÕêƒ2ùúúBNNŽói.((ÀñãÇ1jÔ¨:Ï÷!sss‰ß,,,Ý —´ŒŒ ˜ššJ„׿ÂP“~gddÔš¯ªy_Z¶l)±è@¬1ïºf||<úöíËù"jkkcÞ¼y`†W¯¾¾¾ÜJm±Î$&&J<ã!033“xžÜ¿_âYR[;©O[ßWõ:‘’’âÜ–úìm®P»Fàüùóxþü98 ñ¦"~{¿‘ >›7oƉ'àåå… mÛ¶èСož¿cÇŽX½zué‰ßzÄÔ´:(..„££#~ûí7èêêBFF;vìÀž={ÞûÅ£ŽcÆŒÁرckŒSõjÂÎÎË–-Cii)âââðã?BEE–––øóÏ?¡­­ lØÕ¶C}VÔ½ëÜ}ûöñÀ0 ‘Hàíb=zgΜApp0–/_Ž«W¯¢U«Vµú&‰Ï¯õY LA¿~ýx‹qªÒ¦M›÷*J3oiitíÚ]»vE›6m€ƒ¾s%~mm¼¦ð÷mùùùppp€ªª*/^Ì-Bºyó&~øá §öÆXÙ¨ªªŠ ** ?þø#¢££QVV†Ñ£G7I½¼ïŠýšÊ ¾×h M©?FŸ>}Ю];„‡‡COO²²²øý÷ßΫWOOO…B8p6668pàX–…··7ïyÂ0 N:Uc»«î7]S½o[«Ï3á]ÏÞê/?Ô°û‚‰ŠŠ‚¶¶66nÜ(ñ[LL >ŒM›6A ÀÞÞºººØ¿?ìììpþüyüøã¼sLMM‘””ggçç)&&B¡§OŸæ-ÔØ¾};/ž*++‘ššÊ{£yôè/ž––”””PQQÑà|õîÝeeeسgž>}Êpöööˆ‹‹ƒŽŽÌÍÍ¡¥¥Õ¨ÂÙ˜¸ººâìÙ³µþnii KKKÌ›7 °³³Ã¦M›°xñbnô/??¿Æ‘ƒšxøð! xõRYY)ñ¦Y}d °°ðõdbb‚3gÎ //ObJ¢¹”7¥~ˆWœ‹G›Š‹/"77GŽáÜĆÁÇ4–üüüàåå…7n ** VVVhÛ¶mçˆûUÕ°bîß¿--­žHII‘¯®©ïºFmùªš÷ªšRu$¶6MÉÌÌÄëׯ! y NM9vìÊÊÊËXÏFUE(bÀ€8xð V¯^ýû÷ÃÞÞ-Z´à=ã!044”˜•hì¶&.«””888páHOOGçÎõÙÛ S±È›7opèÐ!xzzbÈ!ÇÔ©SQXXˆØØXN † †cÇŽ!22"‘ˆ7D ¼] ™™™‰­[·Ö˜Þëׯë=òTQQÁ…¥§§ãÈ‘#<‘ûV7Jׯ_/q½¡C‡"&&wîÜ‘H¯>CÔ=zô€ŒŒ  ¡¡víÚqßÕ«WqéÒ¥zÖ)((HGŸâÍZ´hgggÞ¼õï¨ZÖb#eYn™¼²²2455qéÒ%^¼š^Äüúë¯5Ö‹››[­çøøø !!gΜ©ñ-Wü6?lØ0BÞ¹}…‚‚Bƒ¦ä(Om>>b°š¦ï>eëNÕÑ’²²²:Ûx}PPPP»;…››455±bÅ üùçŸõ­ÓÕÕEçÎÁ›JüçŸpæÌÞÎïCÿþý‘ÀûJFnn.¢¢¢ê]žîîî¸~ý:o%qq1¶lÙ###N;ÅÓ»U5E$aË–-5^·¢¢‚·½IYYç^S};ªwÕkAAvîÜYã=ùúúâéӧغu+’““%žqC† ””TÚC©×§ëÛÖºuë lݺ•7’%ñiŒg/±ûˆEQQX«1£¥¥…¨¨(øøøp~ýúõX´h:vì(!ÆcÆŒÁ0iÒ$\¸p¶¶¶‰D¸ÿ><ˆ3gÎÀÊʪÎ| 0ááápuuň#ðâÅ lܸfff¼oZYYaèСX³f rrrУG\ºt‰{ã¬ÚiCCCqáÂôèÑß|ó Ú¶m‹ÜÜ\$&&âܹsÈÉÉ©3OB¡ÖÖÖ¸zõ*¯¼ìííQ\\Œâââzv]»vÅ0cÆ tíÚJJJ0`À{×]cNCž;wS§N…ÌÌÌPQQÈÈHHKKcèС\¼ñãÇ#44ß|ó ¬­­ñçŸÖøv_Õ÷òòâQQQ5jTÓÞßÿ=bcc1`ÀøûûÃÊÊ ÅÅŸ}û6bbb‘‘uuu8::b̘1X·nRRRпTVV"..ÎÎÎÜ kkkœ={áááÐÕÕ…±±1çpOù´áÍ›7Œ¡PXçVDNNŽ·Mˆ¾¾>aY–·¬»úÖ$aaaÄÒÒ’¢®®NºuëF/^L^½zÅÛ~ ((¨ÆkìØ±ƒ´iÓ†Ò®];A-ZDX–åÅ{ýú5™:u*ÑÐÐ ŠŠŠÄËˋǭ¾%AMÛŒøûûó¶LÇùå—_Þ¹Im[™SSS"//O444HŸ>}Èùóç%–ç?ž¨ªªeee2|øpòòåK‰4Äõtÿþ}âííM”••‰†† æmQÓ¶â­æÎKÌÌ̈œœÑÒÒ"½zõ"«W¯æmk ‰ÈªU«HÛ¶m‰œœÑÖÖ&äï¿ÿæâ\]]k~¡P¾’’’Ð¥KDFF¾sElS‚­[·¢¨¨¨IüV‘››Ë›±ù𩬬„––† Vï¯o|.P; JJJ$ÂÖ¬Y))©:÷¢4=åååÈÎΖøœ…òµ±uëV())aÈ!Mž—êÛ¤äää 22½zõ¢‹‘š€ÒÒR‰éÜÿýïÈËËã>÷%A}ì(X±bnÞ¼ '''HKKãäÉ“8uê&NœˆV­ZÑj¦œ>}ûöíCII úôéC „òUrìØ1ܽ{[·nEPPP³ø8¼ œœœ`aa¬¬,lß¾EEE; |j¾Ö º„„|÷Ýwðññºº:±cÇtèз Ë—Š¥àìÙ³øé§Ÿp÷î]ÁÀÀcÆŒÁ¼yóx;uSšÎÎÎxüø1&OžŒÙ³gÓ¡|•!++ ®®®ˆŒŒäVÐ6%óæÍCtt4þûï?0 kkk,\¸°I·ÑprrBNNÎW9›‘‘àà`\¿~¹¹¹ÐÐЀ»»;BCC¿ÈÙjØQ( …B¡|!Ðá …B¡P(jØQ( …B¡P¨aGùâð÷÷¯ñcÖ‚££#œœœ¸¿ÓÓÓÁ²,"""5E‹Q_BÊgMsmÃEEEÐÖÖÆÞ½{i%ý?†††¼¤ý¡Î²¼/:ìÚµ ,Ëâßÿmò6ù±ï½1¨é93{ölôìÙ“v”¯ †a}m×üé,[¶ G¥Kù¬ú`Cظqc£¿,‰Y»v-TTT0|øðfQFó^›R+?¶F6V>>ŽŒ¼÷ÝwHJJ±cǨaGùzغu+hGŽ‘‘‘„ïíûöÙÇÃßßjjjPUUŸqã$FØ?ô^ 55ÞÞÞPWW‡‚‚lllpâÄ Þ5ÄpàÀ,X°-[¶„’’¼½½QPP€’’„„„@[[JJJ DYY™D>ªû™åççã»ï¾ãôUOOcÇŽENN€·£Ÿ ,€µµ5TUU¡¨¨{{{\¼xñ½ÛÏØ±cV#mþ IDAT¡¥¥…ŠŠ ‰ßúõë ‹:Ï‹‹ƒ··7  ¯¯éÓ§×ø£êÔtïÉÉÉppp€P(„žž–.]Š;wJøÂÓÓ—/_F÷îÝ!//DFFJ¤“ŸŸèééA ÀÌÌ aaa/ëùùùð÷÷‡ŠŠ ÔÔÔàïïüüüó.Þþs˜É¡_ž Ô‹I“&!&&AAAh×®²³³û÷ï£K—.Ü(WuvïÞŠŠ „„„ ''aaaðõõ…0gΤ¤¤`ýúõ˜9s&¶oßÎ5{×ÎÙ³g‘––†ÀÀ@´hÑÿüó¶lÙ‚;wîàêÕ«ñ½½½Ñ¦M,_¾œ×É«¦‰ñãÇ£G˜0aÀÄÄ=zô€žž¢¢¢0hÐ Þu£¢¢`jjŠ=zÐÆBùhܾ}ýúõƒŽŽ~úé'”——cáÂ…ÐÖÖ–è+›6m‚¥¥% iiiÄÆÆbÊ”)¨¬¬Ä”)S¼õ ‚’’æÍ›àí´“ØÐ9zô(|||`dd„çÏŸcóæÍpppÀÝ»w¡««[g^¯\¹++«î³>>>066Fhh(nÞ¼‰mÛ¶A[[¡¡¡v¯YYY°µµEII ‚ƒƒ¡¡¡]»vaàÀˆŽŽ–èïË—/‡‚‚æÍ›Çé—ŒŒ ÊËËñæÍüüóÏHHHÀÎ;ahhÈûâDu]+**BïÞ½qÿþ}ÂÊÊ /_¾Ä±cÇ™™ `ûöí9r$&NœˆW¯^aûöíèß¿?®_¿ŽN:Õ» ùùù!22§OŸ†‡‡þüùs\¸p‹-ªóüèèh”””`Ê”)ÐÐÐÀµk×°~ýzü÷ß8pà@çV¿÷ÌÌL899AJJ sçÎ…P(ĶmÛ ++[£Þ£GàííñãÇ# Û·o‡¿¿?¬­­Ñ®];Àëׯáàà€gÏžaâĉÐ××G||<æÌ™ƒgÏž!<<ÀÛib///ÄÇÇcòäÉhÛ¶-:„±cÇÖ˜w˜˜˜ >>!!!Í[(…RTTTHPPP­¿;–r§¥¥†aˆŽŽyõê>wî\Â0 éܹ3‰D\øÈ‘#‰œœ)++㈓““Ä5#""¸°7oÞHäeß¾}„aÇ…-\¸0 CF%_ü[UI@@€Dܹsç@@ ¸°/^òÓO?цBù¨ 4ˆ…BòäÉ.ìÞ½{DJJа,Ë‹[RR"q¾««+111á…µoßž×ÏÄ”––J„¥§§@@/^\g>ËËË Ë²äûï¿—øí}ûìøñãyq‡ B455õ^CBBÃ0$>>ž +**"ÆÆÆÄÈȈTVVB¹páa†tìØ‘TTTðô‹aâááÁ»®­­-O !ÄÐЧ- , Ã#GŽÔZž"‘ˆ”——óÂòóóI‹-H`` /œažíܹ“0 C222!„TVV===2|øpÞy«W¯&,Ë’ôôô:붦ú %,Ë’ÿý·N]­~ïAAA„eY’””Ä…åææuuu²,—gB100 ÃË—/sa/_¾$€Ìœ9“ [¼x1QTT$=â¥=gÎ"--Íõ#GކaȪU«xåloo/ñœÓ¯_?Ò®]»f¯t*–R/ÔÔÔpõêU<{öì½Îóöö†’’÷w÷îÝcÆŒáMvïÞeeeÈÌÌ|¯ë îÿ%%%ÈÎÎæFÍÄÓÄÕG????”––"::š Û¿?***0zôhÚP( ‘H„Ó§OcРAhݺ5naaþýûKÄ—““ãþ_PP€ììlØÛÛ#55………ïL¯ªß©H$BNNЦM›ûVUrssAššZ£÷Ù^½z!''EEEv¯'Nœ@=`kkË…)((`„ HOOǽ{÷$t ª¯˜XׯNj׽{wÎõ¤6bbbйsgxyyÕ‡eYÎ߸²²¹¹¹(//‡µµ5ß«1 ƒQ£F!66–W†QQQ°³³ƒA½5·¸¸ÙÙÙ°±±!·nÝz¯¼œ:u ¶¶¶èر#ïY3zôè}œÛ·o;;;îoMMM˜››óüÞ<{{{¨ªª";;›;úôé‘H„¸¸8®Îedd0yòd^9ÕùÌÎÎnöZA ;J½ Ã?ÿü===ôèÑ?ýôS½œHõõõ%†³@OO¯Æðê~vï"77Ó¦MƒŽŽ„B!´µµallÌ |u>t¯=ssstëÖ QQQ/_¾DII ÌÌÌjl—Õ„ñññèÛ·/¡¦¦mmmÌ›7 ÃÔØ7j˜ÍAxx8ÌÌÌ  ¥¥mmmܾ}»^狯ñ¡}¶º†ˆÅªZñ¡÷š‘‘sss‰p±¿YFFFƒu­²²²Î<<~ü–––ïÌcDD:vìyyyhjjB[['NœÀ«W¯ô‚úæÍ>|ðàÁ$&&b̘1ï<÷ßÿ…¿¿?ÔÕÕ¡¤¤mmm8::ÖZï*wSSS‰p“z=O@UU•×RRRpòäI®½Š0 ƒ/^piëêêB(ò®×¦M›:Ûóç°çéWåcG‘˜·¯)ŒRóÈ[ïÞ½qøðaœ9s+W®ÄŠ+pèÐ!¸ººÖz^m+ j ß•¨>>>HHHÀ¬Y³Ð¹sg(**B$ÁÕյƷdyyù. ???L›6 OŸ>Å›7opíÚ5üú믴‘P>‰fՇǣOŸ>h×®ÂÃá§§YYYüþûï¯sIÌÒ¥K±`ÁÂÅÅêêê`!!!ï<_·¦µ÷í³ïҊƸ×÷-ãÆÔµú¤½{÷n`ðàÁøá‡ ­­ –e±|ùr¤¦¦¾wûhÛ¶-¬­­±{÷nŒ3»wœÜ;W0‹D"¸¸¸ ??sæÌ……ðßÿÁßß¿^eý1ʽjùBЯ_?Ìš5«Æ¸U ·÷}ÞäååASS“vÍI Å"™——‡ÒÒR´hÑ‚kXÔÀ{7-Z´ÀäÉ“1yòd¼|ùVVVXºti†ÝÇ$//çÏŸÇÏ?ÿŒùóçóÞØ>”ºÚÂðáÃ1}útìÙ³¯_¿†ŒŒ |}}i¡|T͉D——ÇÇ%4ëÁƒ¼6{ìØ1”••!66–7m{îܹz·õèèh8;;Kì;–——--­º,ÒÒ011‘0:>FŸmŒ{500Àýû÷%ÂÅaïšžüLLLpûöí:ãDGGÃÄÄ111¼ð |Ð êôéÓñüùsìÙ³ÜÈcmܾ})))øßÿþÇs=ùã?”ƒëþÑ£GTž………pvv~gÚçÏŸGqq1¸ðºöcMKKã 6g¾ª©X–e¹&[[[Œ9›7oFii)5êê ¦©---èêêò–òê2¿½UK\³fÍ_[AA¡Öia ¸¹¹a÷îÝØ³gÜÜÜ ®®N å£jVïÞ½¡®®Žèèh??"‘àáኊ üöÛoÜï"‘ëׯ¯ñºHMMåùa6W¾š;†a???,_¾ƒ Bhh(BCCaaaú©…W¯^¡uëÖðööFÇŽ¡¨¨ˆ³gÏâÆX½z5¯ƒŒQ‹ÚPVV†½½=ÂÂÂP^^Ž–-[âÌ™3HOOÿàt­­­qöìY„‡‡CWWÆÆÆœƒ´ømwذa€%K–ÐFBù$šõý÷ßãÀèÝ»7¾ûî;”——cÆ °´´äí/׿ÈÊÊÂÓÓ&L@QQ¶mÛ<þœ—N×®]ñÛo¿aéÒ¥011ŽŽœœœ0`ÀüüóÏ7nlllpûömìÙ³ÆÆÆõêë^^^ˆŒŒDJJ çø1úlcÜëìÙ³±wï^¸¹¹!88jjjˆˆˆ@FF†Ä(YckÚ÷ßèèhx{{cܸq°²²Bnn.Ž;†Í›7£C‡ðôôÄáÇ1xð`¸»»#-- ›7oFûöíy ÞMMM¸ºº"::jjj¼­Oj£mÛ¶011ÁÌ™3‘™™ %%%ÄÄÄÔº÷Û»î}Ö¬Yؽ{7\\\¡PˆíÛ·ÃÀÀyyyõ6îª^÷ûï¿Gll, XYY¡¸¸·oßFLL 222 ®®OOOØÙÙaöìÙHOOç¶;©ÍgñìÙ³Ü)Íž¯i«€-[¶I“&q[T´lÙ’L™2…û]¼¤Â§¬¬ŒÌš5‹tîÜ™(++EEEÒ¥K²iÓ&.Ž¿¿?122’Øšä—_~á]ëÂ… „eYà ߹s'aY–ܼy“ stt|çv'™™™dÈ!DMM¨ªª___òìÙ3‰%ÿ‹-",Ë’œœ‰ûÿV•" Ã0[Ÿ”••555¢¦¦Vã¶ÊÇÒ¬Aƒ‘®]»999bjjJ¶lÙRc>vìéÔ©‘——'ÆÆÆdåÊ•\?«ºDVV0`QVV& Ãp}®´´”Ìœ9“´lÙ’…BÒ»woríÚ5‰~Y—nhii‘%K–ðÂ?´ÏÖtz¯„’ššJ¼½½‰šš‘——'={ö$'Nœh°~ÕvÕ·üoñDZ·nMää䈾¾> à·|ùrbhhH±¶¶&'NœÐÝÚ¶;©^bˆ÷r«º7\s`Ú´iD(6›Á–gÏžyyyûYÔëécWÕéøÖ­[¸t逷+;Y–…¥¥%\\\°eËB¸]½ÿúë/ú}PJ½8rä²³³áççG ƒB5«¾ûî;aÿþý´’›![·n…‰‰ oo¸OMõÏÃåää 22½zõj6¾ïkÖ¬AÇŽáééùYÔëëcDz,¢££1mÚ4ÂÄƆ†Ð×ׇçSWRR‚U«VáÚµkX¶l]DA©“k×®!99‹/†••÷½Y …j–$ ÈÊÊ¢•ÛÌØ·o’““qâÄ ¬[·®Ióbcc'''XXX ++ Û·oGQQï3lMMÕÏ×}.oŠ_$‰‰‰D]]lÛ¶÷™ªœœ2yòdâììLZµjEú÷ïO´µµ%|#(”šð÷÷'ÒÒÒ¤[·näÎ;´@(T³(Ÿ ÃeeeòÍ7ß4ù4ùܹsI›6mˆP($ ÄÞÞžœ;wŽVÒ‡Ô/ùBçOž<‰åË—ãäÉ“““ƒ´´4ÊÊÊ ++‹¢¢"äää 66FFFhß¾ý‘€B¡P¨fQ(”¦æ‹ŠÍÏÏÇíÛ·!-- iiiˆD"îÛ‡OŸ>E›6mêü&…B¡PÍ¢P(ŸŸýâ RmÓF1èܹ3,X€‚‚HII¡¢¢ÅÅÅØ¼y3o#J …B¡šE¡P¾>ë©XB*++!%%…ëׯãîÝ»‘‘AŸ>}ТE lٲLJ©©).\ˆÒÒR¬[·{öìÁŸþÉûüÌ»ÈÎÎÆéÓ§ahhØ(ߥP¾4Þ¼yƒôôtôïßÿ³øž"Õ, …jÖ©YŸ›S ØÑ³ªsqLL QVV&ÄØØ˜Œ5ŠüñǤ²²’ìØ±ƒ899Ò­[7¢««Û §ãÝ»wô =ÞqìÞ½›z/SÍ¢=¨f5Ÿ•H$‚””þùçDEEaÑ¢E¸ÿ>fΜ‰+V`Ò¤I¸|ù2ú÷שּׁ,¼yóð÷÷DZcÇ ©© ===èéé½wÚbGå!Þ×®?Àµ÷É= òËÓ¬ÏÆ° ä­[·`ee…Å‹CNNYYYðööƤI“žž¸»»ƒeY„††¢²²^^^8pà¥/€ÿHÝ÷=·爱jÙ°óT ? üÞµª`ÕÀsu,Þ?³rªè4ô&u­ØT~nFëCFPi`š¦ LSA0µú ¾BºÏW³>D·hcAéÎí¨Ð@Í’¬x. ˜¦°jȹ2 ÔVµáç6ØDø€Úd:6ðìÙ³§NÂüîÝ»víÚ…!C†ÀÎÎEEE8qâD³XÂlÙiŽèÐiz|Úô,Ftl‚ÊñéÓÔm‚4G€òõjVSè–[Sè¤z¤ió‰4E_n‚Úd¨f‰iÖ#vâ-öÄÿvîÜÓ¦MCYYŽ?Žàà`ôéÓ‡‹ßµkWÜ¿û÷ïGRR¬¬¬šÅ}4E »V™M -©a÷¹ð¥hVSèV“v_a'ÿ•v,Õ,1ÍvÄN¼;;Ã0ÈÌÌDii)455Ñ­[7Î_åîÝ»8uê\]ß.Ê///‡P(„µµ5­Y …B5‹B¡|u4ë;–eqèÐ!8::ÂÛÛ¶¶¶‡¦¦&æÎ –e±k×.œ>} ##Ck”B¡PÍ¢P(Ô°kn0 ƒÄÄD"$$‰‰‰>|8,X€øøxXZZbÆŒ““ÃÚµkqîÜ9Z› …j…B¡†]s 22Ïž=ã…¥§§ÃÞÞS§NÅ“'O°k×.Œ1îîo¿6Ð¥K£uëÖ°°° µI¡P¨fQ(jØ55•••˜9s&†Š/^páÒÒÒ())Á­[·`gg‡¾}ûbÓ¦M€˜˜ܸqÖÖÖX·nZµjEk“B¡PÍ¢P(Ô°kjdYOž`Ö¬Y8rädeeqûömÀÙÙ™·òŒB¡P¨fQ(J32ì pðàAÌž=!!!°··GLL äää0þ|:tˆsNxýú5­- …ÒdPÍ¢P(Ô°«YYYxzzb̘1xñâœáåå…¨¨(˜˜˜`îܹؿ?äääð×_ÁÐÐÖ…Bi2¨fQ(jØý?„TVVD"*** //¾}ûB__±±±PQQÁÒ¥Kaaaccc¼~ýëׯGAAÏiùCòP×ß …Òœ4‹ê…Bi¶†ðvï§ØØXøûûÃßßÉÉÉPRRBZZÒÒÒ\Ü©S§âرcPQQÃ0,ŽbAÌÌÌDNNž>}JkŸB¡4KÍ¢ºE¡PšµaÇ0 nß¾ÀÀ@ÈÉÉ!??Ý»wGLL ÀÉÉ ·nÝ‚ŸŸÜÜܰk×. 4jjj*Ò‡†‡‡ÜÝÝ1`ÀlÛ¶¶ …Ò,5‹ê…BiV†]Õ© ¨¨¨Àˆ#°mÛ6?~ .Äðáñwï^tîÜgΜžž páÂ…FÝÈ“a\½z˜:u*¢££1vìXL˜0ׯ_§­€B¡4+Í¢ºE¡PÊGÝÇŽeYüþûï8|ø0¤¤¤P\\Ìý6gÎÀ˜1cÀ0 †ŽîÝ»ƒ–m|{3)) vvv?~<ÒÒÒð믿"00Ý»w§­€B¡4;Í¢ºE¡P¤cëÍ—a$$$ÀÏÏùùù¸uë>Œ½{÷ò„rÙ²e9r$> †aE «ú¦p¬´4ÌÌÌPRR‚Þ½{ÃÉÉ ›7oìܹÿý7m ÊWJSkÕ- …ÒX|”;†aððáCœ:vìøÉ?ÐM¡Pšž¦Ô,ª[ ¥Yv„¼~ýß~û-®_¿ŽÁƒLMM–e±dɰ, @HHH£æeYÄÄÄ 00Ó§O‡®®.zôè_ýAAAèÖ­¤¤¤PXXˆÐÐPœ={?þøc½ÄqâDÀªå§« E ?}£X4ðÓ§©œO›à£&èmM¦à¦%ûyŠ`sЬ©[ÎÚ~Âò<ÔuØÑ¢ 5ûÄéi6Á=>7ý:t’v5 £ø­—a(((`ýúõøá‡žžŽsçΡOŸ>044ÄØ±c!%%…ï¾ûÒÒÒ2dH£¿yÿóÏ?øöÛo±zõjøøø@QQàç燢¢"Œ5 aaa€gÏž!66&&&´5P(_ ÍI³¨nQ(”feØUBxüø1^¿~ @ ¬_¿'NÄÎ;!%%GGGbäÈ‘••E§N>ÊM¥¥¥ASSƒæÄ±²²Ó§O‡‹‹ RSSA••ôõõiK P¾"£®¹iÕ- …Ò¤†]ee%X–历Á¡C‡ }}}dffbÔ¨Q † 0eÊlÛ¶ ,ËÂÞÞÆÆÆ˜>}:·¹gc 6Ã0PTT„””JJJxù‹§¥¥%:tè@kŸBùJh®šEu‹B¡46|K$eY¤¤¤àèÑ£€;wî`Ò¤I˜;w.®\¹‚üaaaˆ‹‹ƒ‰‰ Ö­[‡üü|¬Zµ ññño-ÊFÈê«ÈÄ»½áùóçøí·ßÞÞäÿ‹cNN6lØ€Û·oÓš§P¾š“fQÝ¢P(Íʰ‰D’’­[·`nnŽgÏžxëïѾ}{L™2ééé E@@|||@¹¹9V®\ ™Fû0¶X†Á•+W°~ýzüöÛoHII¡¡!"""°lÙ2Ì›7)))xöìÖ®]‹½{÷BEE…Ö<…ò•uÍE³¨nQ(”OA½_A+++!%%…¤¤$ôêÕ ³gÏÆäÉ“JJJ‘‘ÁŸþ‰Ñ£GÃÍÍ 7nÄÄÄ@EE...Ø»w/de¾tN,Òâ·\†apøðaŒ?;v„ŠŠ ~üñGœ>}®®®8yò$¾ùæ>|•••xýú5Ž?ZóÊNsÐ,ª[ ¥Ùv,Ë"553f –-[Æý&þ8ö!CàîîÎm  GŽ––Ũ»qã"##±víZ$%%aúôéX¹r%ƇôôtÃÙÙGŽ‹‹ âããñüùsÁÌÌ -[¶¤µN¡|4µfQÝ¢P(M¢}ï­4èÐ IDAT¹´´ÊÊÊ011Á“'OË—/ÇŒ3ЩS'(++ÃÂÂ7nÜÀÓ§OñÃ?à?þÀĉŨ¿yWõOñõõŘ1cðäÉ888`òäÉðó󃇇®^½ŠV­ZÁÚÚT)”¯Œ¦Ò,ª[ ¥©x/oà¶mÛâÈ‘#øöÛo!++‹ÌÌLìØ±111pqqžžbbb°víZèëë#//'Ožü Ú !œ8ÚÙÙaúôéÜ›w§N ££„„„ oß¾X»v-ÒÓÓ±}ûvØÚÚâòå˰µµ¥5M¡|…4…fQÝ¢P(ŸaVVVذa‘’’‚Í›7ÃÅÅ€"++ "‘:::ÐÖÖþ  2 ƒ—/_¢K—. IJe˸m""" ¦¦777<{ö ––†’’† ¨©©ÑZ¦P¾b>µfQÝ¢P(Ÿ•aÖÖÖˆŒŒD@@þûï?üûï¿Üf™jjjÐÐÐhÔLª¨¨`ذa8uêRSSallŒ%K– <<±±±())A«V­¸ã/]º„ääd\ºt ´–)”¯œO­YT·(JSÁ6ôÄ:`óæÍ8zô(þ÷¿ÿqþ+â½—YYYìÛ·vvvèÝ»7f̘_ý»w””0räH$''cÊ”)عs'¶lÙBÅ‘Bù‚(..ÆÂ… áêê uuunô«9jÕ- …ò¡šÕP>hÇMkkklذ!!!ÜG´[µjÕ(«ú-G±øîÛ·þþþÇŽ;àææ†òòrÈÈÈ`ðàÁ°¶¶FEEäåå¡««K[…òñòåK,^¼èܹ3.^¼ÈéCsÐ,ª[ ¥±5ë“vb¡\µj~üñGÈÉÉ5š8Š¿å˜ššŠ’’°, ìÚµ ¥¥¥˜={6zõêSSSN$õôô>I¡Q(”OOË–-ñüùshkkãæÍ›èÖ­[³Ñ,ª[ åciÖ'7ì Gˆ…@ h´Œ±,‹èèhÌŸ?,Ë¢uëÖÐÖÖÆîÝ»±wï^ >vvv¸rå LLLxßUü˜„œT«Ýæˆo å«áÜÞ·GUŠò?j’²²²Ü†ª[‡4Íj®º@©Z˜ÛÿÊ×ÃÞÿ?ªòùhÖ'7ì4š@Š?·“˜˜ˆÉ“'ã—_~Á!Cpþüy 4žžžðõõÅž={0zôh˜››#%%FFFŸ¤ÀÖ¸Vt[)Ê×NŸoª(++ÃÝÝ›’ÈÊÊB§Nàç燴´4aÒ¤IðõõåÞŒ÷ìÙ@€òòrÚf) Õ- …òÕÓä†ÝóçÏñûï¿ãùóç••Eß¾}yyy––Æëׯáèèˆ~ýúaÆ €ƒ¼½½±cÇZ‹ÊgJJJ %•””`ffÖlóMu‹B¡ºÕ\5‹mê ´hÑÓ¦Mƒ¹¹9V­Z…3gμ¼¼––EEExzzbëÖ­`8wîîܹƒ²²2ÚÂ(”ÏXÛ´ikkk‰£M›6HIIi¶y§ºE¡|„‡‡×¨[ÍI³štÄNì—ÒµkW0 ƒmÛ¶aõêÕ‰DpssÚ5kðÃ? ²²‘‘íÛ·ãðáÃøóÏ??ø[Ž ¥é¿ñŽ S%< Àž*¿77¨nQ(_/ºÕÜ4«É ;±8ŠW…‰÷rÚµkÖ¬Y999¸¹¹eYLš4 mÚ´@ À›7opòäI˜››ÓF¡|èÿÿ!F®ç•ê…B©®[ÍM³šÄ°ï÷Ä0Ìÿ±wæq5åÿÛÊRLT"[c)E} ÆR iP¶‘e˜1Æ:c #Ò([–d Ù[T–ˆ˜HdIRÔm¹÷ýû£¹çW–ù’ºK½ŸÇypO÷œÏçœó9ÏûþœÏr––¹\´hѺººX»v-.\AеkWܺu gΜ±±1ÌÍÍQ½ú§ KUÖT( Ã|:z 4 °S¦·ØY £9Þ*ó]ÁI<÷ìÙƒŸþD„ *`Íš5hÚ´)ÆŽ‹Õ«WcÁ‚ÈÉÉA×®]Å—v*2™ ZZZ€‡"//Õ«W/Ö‰I†):å½õùCøùù!-- ?ìÝ»‰‰‰€ñãÇÃÈÈHã½ÅÎbÍò–º9K)¢ö™——mmm‚€C‡aذa˜6m „1cÆ`ذaX°`:uꄱcÇbíÚµ˜3gtuuѾ}û"ÉX!ÈéÓ§ãĉ¸wïú÷ïFÁËË‹K'èQÍ÷Õ~—.]ŠÈm×îÝ» A0lذb•¤*¼ÅÎbÍó–º8KRžõK$ܾ}³gÏÆ½{÷ëׯǤI“àëë‹Ê•+ãîÝ»xòä ÆŽ‹cÇŽ¡I“&5jZµjkkë"¥«˜[jÅŠX·n–.]Š . ==Ë—/Ç;w¸t2ŒŠ)÷oÍW±”ûï&$$@.—C.—C&“A&“‰ÿ·´´Ôxo±³Fó¼¥.ÎR ”'v™™™5jΟ?ììløøø`æÌ™ÈÌÌDJJ Ú´iƒnݺaõêÕøê«¯0eÊÌ›7={öDÆ ?» âáÇðõõEëÖ­ް°0¬X±õêÕß×È0Œêk¾ÿ«ö«LTé-vÃhŽ·Ô­“„RžØiii¡Y³f¨Zµ*ÒÒÒðÛo¿¡råÊprrBDDÌÍÍ1oÞ<@›6m‡eË–áÍ›7Ÿ,GŹuë^½z…Ó§OcàÀXºt)ÜÝÝ‘;wâöíÛ\JFEèÿ+HÅ¢¯&ùR–·ØY £ÙÞÒW³¼•H`÷öËnõôô0iÒ$###=Âï¿ÿŽGA[[×®]ç‘ÉdÆ_ý…råÊ}Rº2™LI†+W®&L˜€ˆˆ´k×Ë–-Ø1cäÏ/µyóf±##Ã0ÊçSšbKUx‹Å0šï­rj–·boŠUt8~ñâ$ *Uª¨Y³&<==‘““lÙ²‹-B—.]лwoôèÑuëÖExx8bccQ£F"Õ°`òäÉ Ã?üÔ«WöööH$066>‘.¾TÞšÓ[ù…bNSDÒRn‚wUp·uRAÍ­ÁåF9Y "l§§>™rÏ“ª¼¥ gÕµš(ñ—§I8k“ Òì¨äo\T´Z(?ɳJLë6€QEÛ´ ·Tá,¥v‰÷îÝCÓ¦MáììŒV­ZaÆŒ€FaÒ¤I8xð ªV­ŠÕ«W#""ÎÎÎhܸ1nܸ+W® N:ENË–-FDDlll ««+Ê900³fÍÂ?þˆŠ+Bœ;wZZZ…¦`F‰5_ B[¯œ Àk%À*ô;‹a4Û[ªp–R;ÈËˤ¤¤`ãÆ8{ö,¾ýö[ôíÛnnnðññÁ¦M›’’‚½{÷âõë×X¸p!*W®,Ž +*Ož<““lmm‘›› ¿¹ÃÆÆ³fÍÂøñãqòäIÔ¨QÎÎÎÐÒÒ§3`FÒ ŽÐÎUM>Tå-vÃh¶·Tå¬VTKb§õë×ÇÙ³g¡§§4lØwïÞ…­­-V,*b¦lo±³¦”xK͆ŖبØ&Mš`É’%8xð LLLàé鉀€$$$àòåˈ‹‹¸»»cýúõøâ‹/>iÿ2YámEdwww¼yóF­¦hªHLLÄÏ?ÿŒ„„„BÛqSè}ä÷>V,*bV’Þbg1L)õ–š ‹-Ñj_óæÍ±xñbxyy!77ÞÞÞhÛ¶-ž>} +++±fú©3/l†Ø±câããQ¿~}4lØ 4Àøñã±sçN¼~ý3gÎDRR¦N ©TZb2 SDtߪñª¸rIx‹Å0¥Ø[2õÊZ‰?Ïwpp€ŸŸ<==#GŽ„••U‘kž9mÚ4ÃÎÎ'Nœ€‘‘¦M›†Ñ£GÃÈÈóæÍCPPŒadd„³gÏBKK‹_°Í0ê„ Ï@ªÏRqz‹Å0¥Ü[¤^YSŠ)°jÕ*9r«V­Â£GŠ´Ÿàà`Ìž=[¬õnß¾¡¡¡8xð ºwïŽððpL›6 §OŸÆÐ¡C‹Í›7cóæÍ8wîttt——Ç‚du«ùìc§«Ù*o±³¦ xKW½²¦4[888`É’%¸|ùr‘^µ³víZ >m۶͉0mÚ4´lÙû÷ïÇ/¿ü‚qãÆ¡zõêøé§ŸpìØ1hkk£}ûö°··çNÇ £Î‚Ô+°¨‘$?Ç[ì,†)#Þ*«´hÑ{÷î…‰‰É'mçïï &`çÎèÞ½; {÷îèÖ­RRRàëë‹Y³faáÂ…èÙ³'"##1yòdœ9s¦Ð~¸Ó1è!Š& Åb ^Ù+Š·ØY S†¼¥fÎRúó}}ýO>rþüyŒ=³fÍB¿~ýÄõëׯ‡L&Ë/ ¥¥…Nò§õ¯]»6:v숱cÇÂÉɉ ÃhBÍW ›b‹ê-vÔ1o•å'vEA.—cÀ€ˆŽŽÆÕ«W}ûöÅòåËQ±bEáÞ½{رc®\¹‚_~ùpww›2†Ñš¯Ö~ÙY Ãü§·ÔÌYjÛyC1¥@ëÖ­!—Ë€¹sçâùóçÈÊʉ'P¥Jù’ „={ö@[[aaaH$ËåÜ”Á0šPóÕ{ë³ÂÎb˜2ê-5s–Úv ¹Éår´mÛr¹þþþ¸~ý:Q«V-ÈårºvíŠøøx¼zõ µk׆D"áWî0Œ& R_ó;vÔQoq`÷qµ^ ¿ò† püøq|õÕWÐÖÖ†¶¶6þúë/T¯^-Z´A&“ÁÔÔ¦¦¦â>‚|ßüODTä×Mü ¨X¡ð:—žù Ôh÷Ðî…W¦¿*ÚÎÞžÇNÚb‹ÛYÅí­‰Šo=t© ¸TárÌ”!"¶G·^÷:­èû+è-nŠý0›!vîÜ ©TŠK—.aÈ!غu+Z·n ™L†ÀÀ@üú믘9s&ßiºP|.(ܘ˜¼|ùMš4¡¡! Šv%–Mì¿ä{„)Û}@è; pàq-Ô¥MÑj¾Ú[ÜÎ* o-³ìËq™eÊ8]ò—‚ÜŽF9mjÜ«Vƒ'5Ô9sæÀÝ݆††ðññATTºuë©T gggŒ1¦¦¦˜8q"nÞ¼ùÁý)äèããƒÀÃÃ...˜9sf‘'If¦˜ÑàÁÅí,öÃh ·Êút'ÿ!55ÀÂ… áîîŽ àÂ… xüø1ºw¬,8;;cðàÁèÙ³'êׯÿŸû APP‚‚‚kkklÛ¶É0ê‚Lw¢Lg±·FüÅOì>Œ ¨\¹2LLL ®733áC‡aÆ!'';w†ÏÿœàéÓ§èß¿?Zµj…½{÷bÓ¦M˜5k‘¬¬,.  £jAªé›'Tá,öÃh˜·8°ûÞ'7¹\;;;DFFâþýû Ê»®©©)lmm±wï^ôîÝ ££S¨Ëûö'‘HðäÉlÛ¶ nnnX´hFœœlÛ¶MœgŠa¡AM±Åí,öÔoqSìÿ˰`§ãµk×bëÖ­ÈÊÊÂܹsñúõk¸»»#..YYY(_¾<¬­­qäÈܼy‹/¨£bAAAøë¯¿ —Ëáì쌬¬, 6 ³gÏÆ˜1cééé ĵk׸€2Œªk¾Ð[ÜÎbo1L)ñOw‚BróññÁúõëѲeKDFFbÛ¶mðôôÄ™3gйsgxxx@&“!77¯_¿†¿¿?Zµj…äääBûSÈqêԩزe fÏž””4iÒ:uBjj*²³³qãÆ H$Lž<R©#GŽäÊ0ª¤ŒŠ-ng±·¦”x«¬vŠù™ˆW¯^ÅÖ­[±{÷n|õÕWxüø1.\ˆÕ«WC__GÅŽ;"‚¯¯/´µµ‘••õÞùœŽ;†Í›7#44-[¶×{{{C.—ãüùó˜;w.š7o‰D‚3gÎ@[[»P­™a%£ÂóØé«WöJÒYì-†)ÞR3g)=°SÔzA€L&CNN¾ü2b¸êÕ«còäɘ1cüýýáìì WWWqÛ{÷îÁÏÏçÏŸÇ¢E‹ÞÙwzz:,--ѼysQz¹¹¹ÐÑÑÁ”)S‘‘‘055…¥¥%ÏöÎ0ê€Þ[bÔS¯ì•¤³Ø[ S ¼¥nÎRVBgÏžÅÂ… ѽ{wŒ?aaa°±±¥¥%ÅïYZZbìØ±Ø¾};bccÅŽÈ™™™8}ú4Ž;†ˆˆˆ÷NP¾|yÄÅÅ!!!ZZZËåÐÑÑAvv6Nœ8¹\ŽæÍ›ÃÊÊ ‰äÙÞ†Qj:x¢¸Õ Añoì-†)EÞ*‹ƒ'ñÝwß!** ÖÖÖ¸rå ~ýõWŒ9½{÷Æ7$~ßÄÄ7†¾¾¾Ø|ahhˆáÇãäÉ“hܸ±¸^.—‹ÛµjÕ :uÂÂ… /Ö´333±nÝ:œ>}ºP¾¸ƒaÔžîDGõY*ngÙÙÙA&“±·¦4zKG½²VâÕ>Œ7AAAèÑ£*T¨€ŒŒ ìÛ·6lÀÞ½{ѪU+„„„àìÙ³èܹ3Ö®] ‰D++«ÂQ¨D‚Š+Šâ[µjbcc!“É0räH8::bäÈ‘X¿~=¦N `Á‚HMMEÛ¶m¹02Œº¡fM±Åí¬Ê•+QËÞb˜Ræ-5kŠ-ÑÀîÀ=z4Ö¬YƒAƒ‰5Õ * _¿~ÐÑÑA`` ttt0xð`,[¶ wïÞEùòå.Nä©â³gÏPµjUÀôéÓ±nÝ:Œ7ÑÑј9s&wwwT¨P›6m AƒÐ°aC”+WçÎ{g èž »\áϪ¢¸ÅÞb˜Òï­5kŠ-ÑÀÎÜÜ 4@ff&úõë‡7bÈ!°°°À´iÓÄïU«V &Lß¡È0Lé¨ùþWíwçÎÐÖÖ†‡‡‡¸NOO£FÂùóçñèÑ#öÃ0J÷–º9KeL&û•\»v ÿüólll0uêTÄÄÄ Aƒ AÓ¦Maee…k×®áîÝ» ÷ká©F³É{ë‰]Þj¿ÑÑѨW¯Ê—/_h}óæÍ111ì-†a”î-us–J;"Å6}út 8„³³3Ö¯_SSSüüóÏ E¿~ýpíÚ5\ºt Û·o€BsG1 £Ùä@ÙЗè¾÷{ÉÉÉ033{g½bÝãÇÙ[ Ã(Ý[êæ,•v ÁmذÆ… бcGxxxàîÝ»ÐÒÒ‚¾¾>fÍš…øûûcÆ ¸zõ*—(†)EH¡‡Lˆ‹zïý^VVôôÞý›¾¾¾øwöÃ0Êö–º9K©'Éårqvu‰D‚øøxôë×Í›7Ç®]»°}ûvøùù¡N:…æŠ233CŸ>}°k×.üóÏ?°µµUÙÅ<9ñ ô*nOoàÒ \špIgʇ·æ/ÉH+Ò®L:}ãÿ¿§¤¯¤ïýž8¡`¥Rñïì­w™¸ ¨hXxK«ü…aÊ Ç·'ÞrÖëOwÖ¡C‡Þñ–º9KiL&›1®\¹‚æÍ›CGGõêÕÃ… 0|øp,^¼cÆŒAvv6~ÿýwôíÛ 4?‘ç‹/páÂôíÛWee£Ý²¨f_o¦lÓÕ%)H\àæðÉ»rþãëB÷ÔÓ¨ÇØä°æï™™™½·é"99P½zñß—¥Á[ËÜ{+.²L§ƒKþRø(`̧9«[·n˜1cF!o©“³%4Å*æjQÈ1,, žžžògs÷öö†““1fÌ@ZZNŸ>-v,$"ܹs)))puuåÊ0¥ˆ\è¾5Añûû«4mÚwîÜAFFF¡õ/^ØÙÙ±·†Qº·ÔÁYJ ìÖ¬Y___±ó0¼zõJl_îÝ»7~ÿýwhkk£|ùòxþü9’’’0bļzõ  ß·ÅÊÊ QQQ*m†e¦$©]è•b¹hHøöÛo!“Éàïï/®ËÎÎF`` Z¶l‰5j°·†Qº·Tí¬·)ѦØN:!&&!!!ÈË˃««+ŒŒŒ`høÿ><<< •J1xð`˜››C[[8sæŒ8ß“––tuu¡««Ë¥‰aJÒ_¦]ðóûpttÄ€0}út<{ö ÖÖÖØ¸q#ÈÞbF%ÞRµ³”ØÉårÔ­[?þø#~ûí7lß¾*Te§ÀÐÐ?þø#z÷î´´4äåå¡uëÖÐÒÒúÏ—m3 SZj¾ù/Ó.øùCaÖ¬YÆË—/akk‹ýû÷£M›6ì-†aTâ-U:Ki‰£ÈjÕª…iÓ¦aÁ‚رcòòòpãÆ #++ ÖÖÖ055ÅÇѳgOq2™ŒåÈ0e¬æû_µ_ ÖöE‹aÑ¢Eì-†aÔÂ[ªr–Ò»‚£È²²² ¬­­á㡞;ð IDATãƒÅ‹ãÌ™3xõê<ˆÛ·oCGGR©FFFèÞ½»8«;ÏÌÎ0e¥æ›?ÑgÁÏʆ½Å0LQ½¥ g)-°+83û¬Y³‰´´4ÌŸ?:tÀìÙ³ñóÏ?ãåË—8p 8üÿÕ«W022‚ â\Q ÔAêš¹ý¿š5JöÃ0Ÿã-e;ëQl&""qfö={ö Ý»wGÆ Ñ«W/ÀÜÜ3fÌ@åÊ•Œ 6ŒYŽ SF)ø2íÿz¡vIuì-†a>Ç[ÊtÖÇPlOì ÊqÇŽ˜={6F °µµÅôéÓADpwwÇŒ30eÊÄÇÇ+Ë‘aÊvÍWÙµ_öÃ0Ÿë-u{bW¬M±=ÂîÝ»qàÀXXXˆëÇAàëë A0jÔ(¬\¹¦¦¦¡$†){5_|äà‰’€½Å0Ìçx«T=±{» ¢F˜0aAÀž={Ю];tíÚ0nÜ8‚€ï¿ÿU«VE¯^½Þ»†aÊ9ÐPà‰]N ×~Ù[ ç·rJË»‚£È._¾Œ/^ÀÑÑvvv˜3g~ýõW,[¶ ‚  K—.///|ñÅèÞ½»¸eÊñ}5l®u3ŒjɃ„£bóJP’šæ-vè¿·òJK`§ã”)S™LSSS´mÛ3fÌ€¯¯/~ûí7üñÇ;wÿŠ JŸÄ“ˆD!¦§§#''&&&¢ ?V–›üÝ3{å]¡»*(*Hs UWjzU…ÉJ?Æ×Ò©JOsªÞb¥¥õ\HÂÎ"l'ÍÑCn¶Áÿ_9z%–GMòVq9ËaÙ@G‰Î2Q³n\T~šë[(5¹ŸÜ•ÌÏñTþi½Ú±®ÒÒºUI —"n[Ð[%鬢ðÉÕά¬,ñÿaaa DHHbcc1uêT¤¦¦bâĉ(W®¼½½Q»vmøúú"22²pD©‚I<% vïÞ¯¿þŽŽŽððð@PP×€F…äæè"Gª'.¹9Å?'”¦z‹Å0êï­’p–Ò»;vÀÛÛ ùO ^¿F£Fàää„J•*ÁÍÍ £FBNN‚ƒƒQ¿~}¸ººbРA°··Wé ‚€“'OÂÍÍ ýû÷Çþýû!“É0oÞ<\¸pK)舜ldKuÅ%'»x›54Õ[ì,†Ñ o·³”Ø=yò>>> ŸŸîß¿êÕ«#22IIIâ÷:vìˆ  88кukL™2E|1¶*¹~ý:ÜÝÝ1aÂT«V áááèÒ¥ ZµjÅ¥”aTeéCþÆP\(«øF˜iº·ØY £þÞ*Ng)5°366FûöíQ¾|y¼~ýË–-CÕªU1dÈxyyáþýûâwÛµk¤¦¦Ú‡2_·CDכּwïRRRðäÉØÙÙá믿ÆÊ•+GE\\—V†QzÕW¤–œâkbÔ$o±³FC½•£^Ý">:°300ÀôéÓQ±bEH¥R$%%aýúõ°··Ç_|¡C‡âÌ™3¸|ù2–.] ###TªTI5‘ô¿ŽàîÝ»ˆ¸ººB*•¢AƒèÖ­üýýADHMMźuëõ^¹2 S‚¼Q`yS|»Öo±³Fƒ½õF½²öŸ=cccQ¹re˜™™jÕª…Áƒ£J•*022ÂÖ­[NNN044D÷îÝQ§N”+W'OžTéëv$ víÚ…™3gbüøñ011••*W® KKKq*ƒœœüñLjŒŒÄo¿ýÆ’Fé5_Ò·>šê-vÃh¨·rÔ+k ìöíÛ‡>}ú S§N°³³Ãüùó¡­­¦M›ÂÛÛgÏžE¹råA0kÖ,øúú"33æææH$JŸÒD ˆˆˆ€››/^ T¬XðË/¿`æÌ™X¹r%¦OŸŽúõëãÒ¥K8|ø0j׮ͅ•a48°ÓTo±³†»ìjÕª…jÕªA"‘`ß¾}¸yó&:tèWWW¸ººâçŸÆòåË‘žžŽx{{ã—_~¥¥%€ü‰@UÔär9Nž<‰Ñ£GÃËË ¯_¿ÆÝ»wqúôiÔ­[ëׯG||ª3‰ƒƒüüüàéé AðÝwßÁÜÜDTH4Ê¥â¯HS"‘ sçÎX³f ¦NŠììløùù¡aÆ "üý÷ߨµköìÙƒ3gΰ F](æQ±êê-vÔRo©Ùà‰®¦:88`õêÕ8tèüüüðìÙ3•³WôM¹|ù2.]º™LtèÐ .ĉ'0qâDÀ³gÏpøðaüý÷ß8yò$5jÄ…’aÔ…L¯ ,ÅØ¬¡NÞbg1L)õ–š5Å~Rûƒ½½=–,Y‚—/_ÂÄÄD¥WŒ$›˜>}:æÏŸ{{{ÂÙÙ&&&˜={6222°páÂâÉÄ¡‰€~ÅÂë¹]¸ 3e†ø­Qˆß]h]vZÇü+j¾?3ªò–Z8+}" yËYú.€;‹);„oÍÀ¡­…Öe¤}Æ{  zKÓOüÊêœïÝ»"‚T*E£F°oß>ôêÕK¥ªU«†-Z`êÔ©ÅûÂìnË3{¾K˜2M]{Ôu)|îܹ3œœœ†7oÞðÌì £‰ä¼UÅÌѬ쳳¦Œ{‹GÅ~˜ÄÄD¬X±÷ïßèëë6oÞ ===Ìœ9X¶lž?8;;cÓ¦MضmLMM¹°1Œ¦‘àMEƒšbÙY ÃÞR7g©Õ»—/_bݺuÈÊÊÂðáÃannŽ `Ñ¢E8wî*Uª„Æ#77+W®Dnn.’““aii‰/¾ø‚ Ãh"٠Κ§9Ygg1 {KÝœ¥V­­-¶lÙ‚±cÇÂÈÈIIIÀÖ­[Ñ´iSÀåË—áää„û÷ï#$$\ÀF“ÉDá¶¹ædÅ0ì-us–Úõ±kÚ´)üüü0jÔ(ÄÇÇcíÚµèÚµ+€üÎÉõë×ÇÙ³gÑ­[7<}ú5jÔàÆ0šLŽfgŸÅ0ì-uB-‡c988 88666HJJBbb"@GG999°±±ÁÝ»wY ð³†aÔ=°€Æcíڵسg‚‚‚ððaþûÜtuuÚÚÚ|õ¦T ·À’§‘GÁÎb˜²ê-õr–Z›ÆÁÁ~~~˜8q"233áéé)ÖxAøäý|)w‘¹à’ËŽ²é¤ü$×\ñVjz¯¥S•~Œ‹õ•ßcuäd¥¥ì,Ò–RV&ÕXÕ«¥³^Ä+WõOê¨àÌ·P~’Ë”›ÜOåâœU*HóF¼ÒÒ’e|ÎÖ½¥^ÎRû™1°dÉ\¾|zzzŸµ/A ‘H°iÓ& :”+ £¼^`y£ÑGÃÎb˜²æ-õr–FLyÞ¢E ìÝ»&&&EÚžˆ —ç?-IKKÃÊ•+Ñ´iSñeÝ Ã¨’ìk¾Š%[ãˆÅ0eÉ[êå,y—bâÏOa×®]¸sçŽXë=vì† ‚ºuëâ»ï¾+RÓÃ0ر³†½Å’‰ŽŽFHHH¡kWªT /^Äþýû‘!µb†aTÅ–âkÖxòä ~üñG´oß*T€D"Á©S§ØY ã·ÔËY¥6°kÚ´)üýýannŽØØXܺu ööö8vìtuu1eÊ”ü ‘°(Fmj¾Å[û‹‹Ã¢E‹œœŒ&Mš€Ú>õbg1Œ¦zK½œU*;…ôŒ‘œœ ,Y²qqq°µµÅ¡C‡Ž#F°(F-j¾%3x¢Y³fHMME\\&MšÄÎb¦¼¥^Î*•bjA`ff†"55~~~b-8""{öìÁ÷ß_h†a”…ŸØßÔåË—GÅŠÙY Ô ·ÔËY¥Ê Š9Ÿ ++Kì“2|øp 8÷ïßǪU«pëÖ-888àØ±c€———Q†Q¥sð;‹aÊŠ·ÔËY¥n*tApàÀ¬X±‰fffذa\\\ ­­7bÕªUðôôDÓ¦MóÙsM1 ó9(š4 ~.;°³FÓ½Å󨕏  ;;;xzzâøñãøæ›oðäÉ 0ÇGRR,X€Û·o£I“&¨_¿>—Q†Q2™™™ÿþ/À½KÒ{¿ODJ¥µ°³†Qž·ÔËY¥ê‰ÝóçÏñûï¿cÖ¬YðññÁ«W¯ —ËqèÐ!ôîÝû÷ïÇ€ýû÷ÃØØ˜K)舸¸¸ÿöÞ¿W¨P¡ÐçS§N¡C‡½ïzõê±³†)V‚‚‚>è-uqV©ìˆ‚ ÀÔÔhÒ¤ ž>}ŠÖ­[ã›o¾ÁüùóѰaC¸»»ãÏ?ÿ„››z÷î ###.¥ £"¾ùæ@ƒ Íݦdݺu ­³±±Á_ýõQûþâ‹/ØY Ã;óçχ££ã;ÞR'gil`———‰D‰D™LmíüC8p AÀâŋѨQ#üöÛo(W®œœœ‚áÇãСC,H†Q1&&&pwwÿèïW«V Æ ÓØãeg1LÙò–ªœ¥qÝÖ­[ÅNÅpäÈ„„„ fÍšèÒ¥ Z¶l ÿýŠÉÉÉâ\O–––8yò$ÌÍÍ¡¥¥Å¥“avÃ0¥ ìÒÓÓáååœ8q‘‘‘èÙ³'†Š;vàêÕ«èÔ©ÆŒƒ¶mÛâÊ•+9r$*T¨€xyyÁÂÂâó2qk" óÖ3f.@u.MLÙ Vç/I{­žy7o 66@~™Ó§OfΜYú…E*¼µ®û¿ Ôg=Ë_ 9+¯t:K Å$JjŒ\.'ãLLLÄ7ß|xzzâÞ½{ðööFRRþüóOÄÄÄ _¿~9r$‚ƒƒ/^`þüù°µµ-r¢¢¢ààà´ºÛ+ïàUQðZª Ío”›ÜëFʲX_ùo ˜©¼´¢â‡¡À•+W`oo¯6þH$AìצPž Éd¥ßYØÀF‰g¼Ž ®²¡ò“l¤Üäè+å¿ oÎ*åŸÖ9_)ÑY€CTés–Ú?±S2>>[·nÅ‹/°qãF 0}ûö£WsssxzzbõêÕØ±c´µµ1lØ0 :R©úúú\ea˜2ˆ²_½ÅÎbF•ÎRëy숉׮]ƒ³³3RRR §§‡Æ#""Íš5Ñ#GÄÖÌÌ žžžhÑ¢üýý±nÝ:àÉ<†ag1 S&Pë'v‚ )) ýúõðaðpáBñoصk:vìˆîÝ»ãÈ‘#ò‡ {xx@WWݺu÷Ã0 ÃÎb¦´£öož¸yó¦Ød¡¨å*Ú›-,,pìØ1üóÏ?èÒ¥‹¸MõêÕ1mÚ´bètÌ0 ÃÎb†»bãòåËHLL„¥¥¥8ä_Q›•Éd°°°@DDž?ŽfÍš‰Ûñô ð³†áÀNͰ±±AåÊ•ñäÉÈd2Ä«¥¥™L†7"((ZZZxðà_U†aØY Ãp`§Ž4iÒñññX»v-´´´ är¹(Ë'Ož <<D„sçΡfÍš|U†ag1 S&QûéN¬­­±fÍ :FFF˜4i’8?øûûƒˆ`ffÆM ð³†áÀNÝ„ƒƒzôè???À‘#Gpýúu. ð³†áÀN(Øé¸ ýû÷‡ hܸ1:wî,¾³1==¸té×€†ag1 £±”ºyì‚”H$8þ<¢¢¢`dd[[[4iÒ 6ÄÝ»wѦMÈårdeeañâŸpá~ýõW‚À¥‚avÃ0Ø©‚ @ìÞ½...èСâããQ­Z5|óÍ7øõ×_‘““ƒ   ̘17FLL ÂÃÃQ§N. ð³†áÀNj¿/_¾ÄÏ?ÿŒŸþ>>>HNNFDDþøãhiiaÉ’%xøð!8KKK|ùå—°²²âÒÀ0 ;‹aìÔ­ö««« ]]]Ô¯_`ff†¾}ûB&“!((={öD½zõ0zôh. ð³†)5hüà ¹\þNçaCCCÈd2ìÛ·O\W¡B´oß·oßFll,_y†aØY Ãp`§.dddä€DApïÞ=>>زe òòòpêÔ)Ô®]»è‰ÿ° ¨cÏw S¦iüïRdþ|jÔÏYZËŰ³Êг4&°“ËåH$xþü9œ±wï^ôë×yyy°¶¶ÆÀQ®\9899AOOžžžÈÉÉAÿþýqúôiäåå!77†††\†ag1 S*шÀN!ÈØØXL˜0uëÖÅÒ¥Kˆ‘#G"==qqqppp@ÕªUáááAàããƒÌÌL ::::ÐÑÑá+Î0 ;‹a˜R‹F žPÒÙÙ6666l ðÕW_aÓ¦M¨P¡‘˜˜055Å÷ß,^¼Xì´Ì0 ÃÎb†;“‘‘qãÆaĈX¹r%Zµj%¾F§U«Vؽ{7<ˆåË—ãÁƒ¢('NœˆãÇ£B… |¥†ag1 Sêш¦XA““ƒvíÚ‰ë®\¹‚ÈÈHœ8qýúõÃÚµkñÃ?@xyyÁÊÊ &&&|…†ag1 SfЈ'v999HJJÂ¥K— ???xyyaõêÕÈÊÊ‚››N:…;wbýúõX¿~=òòòøê2 ÃÎb¦L¡Oì*W® tëÖ Û·oGBB~úé'ôèÑvvv¸|ù2áááƒÂÔÔÚÚÚ|u†ag1 S¦Ð˜7OtéÒ÷îÝÚ5kpïÞ=øúúÂÎÎD===4nÜiiiprrBݺuÕ+ó'·*?ÍcÊO“vïPn‚‡•Œñ[£”žæÖÃÊ/>×ÙeÛY Wöý¥OF¨ ÍãÊM3|«òâl}ÆÎâÀî#©U«Ú·osssq ر#? ¨V­šzfœ»RØE—‰Àî»±l; ¨ vGUæ å¦y¨Œvì¬ÿG£Ÿý‡††âܹsÀ‰'Ô[’ ÔyØY Ãp`÷nݺ…Õ«WCGGgΜA£Føj2 ÃÎb†;MÄÆÆÁÁÁÐ××G¥J•øJ2 ÃÎb†;Mμ™™™ÒÒ’J¥ùÿyxëÓ7~“Ü-b§{Ý"føup§hiRNVÑÒLºS´mŸ|ú6i@\ÑŽñ¹T¤í²Ó²ð<ªhÛFÅíÔ¤½.ú¶ÉE-ïEØ6åß³²²À¨‘³èVÑv@i)s°P€"¦wû3ˆˆuû¿Ù¼y3ÜÜÜøD0Ìÿ`Ó¦M2dŸvð³8°S_RRRpøðaXYYÁÀÀ€Oü]c–J‘€®]»òØY ÃÎâÀŽa†a†ù$| †a†a8°c†a†a8°c†a†a8°c4¹\^êŽé}]UK²û*)í|ˆ„„dgg«¥¸?öø‰Hünzz:RRògG¡ÄΣ H$Ø´i†Z¢åM‘ÿ—/_"99™oB†ÅÎR[g±·8°Ó8A,¬Ož<)¶›±à¾=z„/^àñãÇÅž---ÀôéÓ1`À8::b„ ðóóSÙy-(œ8q/^¼øÿ ^?æF’H°{÷n|ýõ×ptt„‡‡‚‚‚@Dâõ)îZoZZV®\‰¦M›–híT"‘ 44]ºtAëÖ­1xð`¬Y³F-~Üv;‹ÅÞz÷¤3‚\.'"¢]»v‘££#ÕªU‹\\\èÏ?ÿ$©TZ,û %[[[rtt$;;;Z·n]±ÇòåË©J•*töìYº{÷.¹¸¸P:uèöíÛ*=¿S§N¥:uêP:u¨sçÎäííMIIIµí‰'ÈÐЖ-[F±±±4räHª[·.;w®Xò¶sçÎBççèÑ£Ô£G2d½xñ¢DÏËéÓ§©|ùò´bÅ zôèyzzRÍš5éĉ|S2ì,v–Ú9«¬{‹; ãôéÓT®\9Z±b%&&ÒØ±cÉÊÊŠNž<ùÙû>þ<Óºuë(11‘þøã.^¼X¬Ç0eÊZºt)ö+VÐøñ㉈(%%…ÌÌÌÈÓÓ³XòE  ‡Šë®\¹BUªT!ccczüø1Éd²97ëׯ§~øˆˆž={F5jÔ ±cǾóË0ì,v–:8«¬{‹; ÃßߟF-ÖêÕ«[aýóÏ?©GDDôÏ?ÿP:uÈÝÝý³òû¾·gÏž4{öl:uê•/_žV¯^MDDR©”¶lÙBqqqJ? z…ì IDAT¯Ë—/Ïãž={¨|ùò´fÍ1_™™™ÿyŽ'L˜@®®®”œœLæææôý÷ߋߋˆˆ [·n}Vþ^¾|IDD7nÜ ›7oQLL ™šš’««ëžïÏeîܹԫW/JLL$ ‹BÇvøðaºzõ*ߘ ;‹¥6Î*ëÞâ>vÒ?EAbb"’““‘””ôìÙSìëqäÈܸq£ÈûÖÖÖFݺu!•JѶm[´oßk×®"::ºÈý@ÂÂÂpåÊÀ„ víÚaÙ²e3f àÁƒؼy3K¼Êûúcjßo³yóf255¥˜˜ÊÎÎ×ß¼y“¦NJ 4 kkkrpp fÍš‰ýUòòòJôüN™2…ªW¯Nþù'=}ú”ˆˆ–.]J-Z´ yóæÑõë×)66–ºuëF-Z´ ÜÜ\qÛ#G޾¾>­\¹Rln "JNN¦Q£FQÛ¶mÉÚÚšzôèA&&&tåÊ•"]ÅuÊÌÌ,ÔÑ|Ë–-Ô³gOòôô›8¢¢¢H„Ïî#JzzzÔ½{wªS§µnÝš/^Lr¹œ&OžLíÚµ#333êÒ¥ U­ZµHÇÆ°³ØYì¬âr{‹ûØiQQQT¹reZ¿~}¡º/^¼ 1cÆP‡¨FÔµk×O.¬×¯_§jÕªQ@@eddˆë³²²héÒ¥¤££CÍš5£fÍšQ5Š|#,]º”úôéCDôŽÓÓÓéáÇLÇ×RIpôèQ233£óçÏ¿ó·Å‹S¿~ýHGG‡œœœ¨M›6b¾sss)//|}}iâĉDD”‘‘Añññ@§OŸ&"¢;wîÐüùóiÇŽEúa)øC¶ÿ~êÒ¥ uëÖFŒ!þ}ûöíïˆòêÕ«Eîë#—ËéÅ‹dggG .$"¢ÇÓÆÉÎÎŽ~ÿýw""JLL¤5kÖÐ(!!oR†ÅÎR‰³Ø[Øi$¤¶mÛÒëׯEq(jtÿþ}Z±bíÛ·þùçŸOÚ÷Þ½{©aÆ”šš*®+؉õÚµkF»wï¦|rÞûš6m5mÚT\¯aff&ÅÇÇ¿³]I×zµ»-ZP^^ž˜ÞÛ#Û.]ºD $“ÉH.—···7YZZRll, >œÚ·oOÖÖÖdaaA‹/.¶|îß¿ŸÊ—/O>>>´oß>ªY³&õéÓ‡’““EQöéÓ‡† V,·322ÈÑÑ‘ÂÂÂÄuééé´aÃj׮ʧv`ØYì,v{‹;fË–-T±bEñ‘vAµ°*jUǧ&Mš¼wØù?ÿüóÉ#Õ>$·øøxªW¯ýòË/…ÖÇÅÅÑСC?YîE=Þ‚9r„ŒEI+Ž]*•ÒñãÇߥ•——GgΜ› Þ¼yC=zô Š+Ò Aƒ(44”^¼xAÓ§Oÿìy ž={F:tk¡iiidaaAzzzÔ¼ys±)&88˜ $ŠóS~ÄÞ>72™ŒhÔ¨Q…Ö'$$™™…††òMɰ³ØY*q{‹;¢`ß„‚¼zõŠÚµkG>>>”––FDùÖ_¿~MÞÞÞï},ÿ±ûNHH ªU«Ò¬Y³ ­OII!ooïO ^°f¸}ûvúõ×_içÎâpy???j×®M›6222èÖ­[ôõ×_S§NJ´¶[pßÅ—‘‘Aýû÷'wwwºs玸>55•\\\Þ™ÀR&“Ñž={È‚¼½½Åõ7nÜ(ô½áÇÓðáÃ?ë˜ ^«mÛ¶ÑÍ›7éÉ“'dmmMãÆ£ŒŒ ²´´¤^½zÑ£GÄrò±¤§§ú|÷î]JJJç›:uêÕªUë5gggÚ²e ߬ ;‹¥Tg±·8°ÓHA*nª‹/R`` mÚ´I¬Í¬]»–zõêE“&M¢´´4zúô)͘1ƒjÕªUhòÇí[!‡¿ÿþ›V¬XA«W¯ÅNZZZäëëKwîÜ¡ÇÓ¬Y³ÈÌÌŒîß¿ÿÉ‚ôññ!333êÞ½;uêÔ‰úõëG/^¤¼¼< ¢zõê‘™™5hЀŦ„’˜Ç¨à>ýüüh̘1äááA.\ ¹\N ¾}ûRŸ>}èÀtüøqêÒ¥ 5kÖŒrssßùaÉÌ̤ýû÷“M¡Î¾r¹œÎœ9C'N¤Š+Òõë×?9¯¹¹¹b~ žOE-ZD}úô¡×¯_ÑàÁƒI„Oþ‘YµjyxxˆÍT»w寧U«’ uíÚ•8@DDdiiInnn@^^^dddD÷îÝã–ag±³”æ,övƒâ†(ØGb×®]dddD={ö¤ÚµkÓ!C(""‚är9mذڷoOåÊ•£æÍ›“™™Ù;¿ï¦ ¥Ê•+S»ví¨OŸ>T¥Jº|ù2å?â¯Y³&ÙØØPýúõÉÂÂâ£;ÑôéÓÅZ¯•••X#_ºt)P»víèøñ㢎?NW®\)ÑNÇŠGþDD?þø#U©R…æÌ™C}úô¡N:‘¿¿?Éår:}ú4yxxPùòå©E‹Ô¡C‡B¥###EÉ+D¹wï^úòË/i„ DDôäÉš9s&5oÞœbbb>)Ÿo×$>L#Gޤ¹sçz²áëëKŽŽŽb­ÕÇLJN:õÉÂ:zô(YXXÐĉ)**ŠhÆ ´{÷nš5kÕªU‹öîÝKDDçΣ6mÚPÇŽ髯¾¢èèh¾qÙYì,v–RÅÞâÀN#PÜpׯ_§ü‘¤R)ÅÄÄP­ZµÄYÃÏœ9C†††Ô©S'±ÀÊårÚ³gýý÷ß”˜˜øŸûŽŒŒ_CVVV@DùÍ‚ ‘‘‘(¯¤¤$º|ù2_½z%þpåw|ÖÖÖ¦#FP£F¨_¿~âìöáááÔµkWúöÛoiĈdhhøÁ2ð¡ägÏžQNNEGGS­ZµÈËË‹(Ö¨Ÿ>}JóæÍ# Ú¹s§XærrrèÍ›7|ã²³ØYì,¥8‹½ÅF 2::šA y󿉵ñ†µ¶¶¦o¿ý–þ{çVÅñ¾ý{ pè*"bT𤰡Ø+ÖÄc0±~1öĈ• öX°DEÄ‚¨D 6»ˆ ¥?¿?|Ͼ¬ çs]\zæÌÙ¹§=óLp09:: vû¼íÚ—.]¢¦M›Rxx8ÿyÆŒTQQAwîÜ!CCC7nM˜0dóò:QQQÔ´iSJLLäÃŠŠŠ(''‡žü(¬wïÞÔ²eKÊÏϧ²²2}óÍ7”––F¾¾¾4fÌ>=B(/_¾LšššRÛÝÃÂÂèøñãôøñc²°° ƒòBاOZ½z5UWWói“xÌo×®©««Ó”)S¨¤¤„^¾|I^^^äééIãǧ±cÇ’±±1ïvá]ÉË—/“žž…‡‡ÓW_}ED¯œgvêÔ‰÷SU»q‹ˆˆ '''Z·nà: ¡¨¨ˆÜÝÝiÚ´iu~/YN›:uªÀðüÉ“'ï¼LÃ`šÅ4‹iÖßÕ,¦[¬c÷¯#++‹zöìI¡¡¡¼FFFÇqtöìYª©©!+++ ¢GÑôéÓ)  A…µ¼¼œ‚‚‚H__Ÿ7P7oihhЩS§¨¨¨ˆúöíKS¦L¡#GŽÐœ9sÈÖÖ–ŸÖµ+ïÉ“'iÈ!ôÅ_³³3ÙÚÚ F$UUU²¶¶¦Ž;~ÐdD¯ÜŒ7޾øâ Ú´iõïߟôõõù]xdaaA¿ýö¹ººRPPÿLUUU”™™IšššEYYYtìØ1jÕª9’^¾|I/_¾¤™3gRß¾}ÉÅÅ彌rïÞ½K¦¦¦u.…ܹs‡ÌÍÍÉÓÓS~ÿþ}Z°`Á;Ù§H(..&'''Ú»w/–––F?ÿü3Ó¶mÛ())‰ŒiÚ´iì$ Ó,¦Yÿ¨f1Ýb»%/^¤Ò!C(44”´µµFºçÏŸ'255%]]Ýw:§ººšBBB¨yóæ4uêTÒÓÓLóïØ±ƒ<<<¨U«V¤¯¯ÿ^GîH„îøñã4`ÀRUUå@VWWó“——G7nܨsK|cQ{$øüùsš6mP»víÈÊÊŠ=z$˜yøâ‹/¨sçÎÔ£GÊÌ̤ñãÇóÓöIIIdffÆûÞ’Œ MLLhÆŒ‚g_£ÜC‡‘««+åææòùTûîܹC¦¦¦RBù¾3OŸ>¥–-[Òœ9s¨¬¬ŒV¯^MööödmmMþþþ$++K³gϦ .ªª*Íž=ûƒÄ`šÅ4‹iÓ-Ö±ûW#©µ+ùsç¨ÿþ¤®®.åPQR ÓÒÒ•¼¾k×5Í=dÈâ8Ž6nÜHDB¹¹¹tëÖ­OÉ×® QQQÔ¥K^$N:Eƒ¦€€:sæ Ÿ¦×+õ‡>rgóæÍtüøq*(( ©S§’‰‰ -Z´¨N1ÍËË£ššºyó&qÇÛï\»v,,,èСCAüý÷ßIOO²³³ÿöè}Á‚dllüÆ|ÎÎΦ:­­m£äÍ¡C‡ˆã8²°° &MšÐ‚ ø‘ûùóç‰ã8ÊÍÍ¥””ãSÓ,¦YL³þ ÍbºÅ:vŸ¼@J*ÖÝ»wéæÍ›üèêæÍ›Ô¿êß¿?¿Äñº 5ôÚ·nÝ¢ÌÌLÞk:Ñ+‡ºººü4’뾋½CmQHHH •+WÇqÔ»woÞ öĉFþþþtöìÙžÇäïïO³gÏ&¢W†Ç“&M¢€€ÞÆãõ|•¸øë¯¿HEE…BCCéöíÛÔ³gO?~¼@(Ξ=K:tx¯ão^gÇŽdkkK>¤ªª*©wQUUE”‘‘A;wn°ÃÕ·‘MÇŽ8‡­©©¡ŒŒ j×®Ý;yìg0ÍbšÅ4ëCkÓ-Ö±ûäG¾‰‰‰djjJ;v¤6mÚвeËèÙ³gôçŸÒÀ)$$„7’}×k'$$……YZZ’§§' 8B:::tóæM)Ñ{"""HUU•¢££iÆŒdhhH®®®¡6l988PffæGÉÓ×ÅGEE…ÒÓÓ¥„rýúõ|¼ÚÓõ’´Çq´xñb:räµk׎ƎK;vì GѬY³ÈÜÜœòòòþvÚoÞ¼I***4wî\AC$y¦{÷îQçÎéòåËå`ñ9sæP»víÞ:ËÂ`šÅ4‹iÖ§ YL·XÇî“àÂ… ¤¦¦F«W¯&"¢ï¿ÿž”””øcPÒÓÓiðàÁäããS§CÌ7 Å… HKK‹bbb¨¸¸˜vïÞMÇñnª««©ÿþ$##ó^W×ÔÔÐÓ§OÉÎÎŽÖ®]ˇ?xð€ÌÍÍÉÍÍ^¼xAD¯ì=æÏŸÿÑ*÷ëÆÙÆ £¯¾úŠ_ryòä M:•iÏž=”››KK—.•2´ýùçŸI^^ždeeiÆŒtìØ1êÛ·/™™™Q«V­ÞÉ«}Cˆ‹‹#‘HDË–-“úîÛo¿¥N:5Š ¿‰ÄÄDš6m©©©±%L³˜f}òšÅt‹uìþ1~ýõW);ÄÄDÞUÀ;wÈÄÄ„FŽ)ˆ“––F#Gޤ{÷îÕ{í­[·òÂ*aÿþýäááAD¯¦­ iìØ±R¿:t(]»ví½ŸËÛÛ›7Æ•pëÖ-RUU¥¾}ûò~’jmó¡ó900~üñG>lóæÍÔ®];*((àÃ=zD+V¬ ªª*ºtéµnÝšæÏŸÏOí/Z´ˆÔÕÕ)==rrrHII‰¦NJ>¤;wîÐÙ³ge9£6ÕÕÕ´zõjâ8ŽBCCiÆ ´qãF û(‚uõêUòðð ooï÷:#’Á4‹iÓ¬©YL·XÇºštttÈÁÁApîßîÝ»ÉËË‹.^¼H4jÔ(~yá·ß~£óçÏÑ›8>|ø DÝ»w§Ã‡ FR=zô ÒÒR244¤#Fð׎§øøøwz†ºÄ­ººšfΜIݺu£œœ~ä]TTD...Ô¤IêÑ£‡ þ‡ÈÛÚ=z”"##©yóæw~~~R PígKOO'{{{ZµjMŸ>455ËIYYY¤¡¡A|—ÕñãÇÉÝÝZ·nM:t ¾}û~4Ázðà 1a0ÍbšÅ4ëSÖ,¦[¬c÷$Ñ+¿LmÛ¶%ggg~ý?33“¼¼¼HSS“† "¨´AAAÑ ÑâùóçiüøñÔ£G~TII µjÕŠ8Ž£ñãÇÑ«¥ˆÊÊJ=z4EDDð#Ów¢„„Z»v-mÙ²…JJJ¨¼¼œ:wîLtõêUzñâÕÔÔÐСCéøñãd``@‘‘‘$okçÍåË—»ãòòòhÖ¬YäããC:t ñãÇS—.]xãëºl[ÒÒÒ¨}ûö$‹)66–—ŒÜ¯^½J†††oœ‰h,^¾|IÅÅÅTZZJeee¬"1˜f1ÍbšÅ`»OÉh©¢¢‚Z·nMÎÎμMÅòåËÉÀÀ€Ö®]K·nÝ¢ÂÂBš9s&5kÖì­Ë µ+zZZ3†zôèÁûzÚ¿?Y[[óË999ôÍ7ߎŽeee½ós|õÕW¤®®N>>>¤¥¥EtèÐ!*//'rvv&²³³£Ö­[See%Ó”)S=Ok?ûÌ™3É‚lmmÉÌÌŒ¢££ù|ùò%}ÿý÷ÔµkWâ8Ž,XðÆëfdd­­--Z´Hp,ÍëË3 Ó,¦YL³¬c÷™Q»"Kþ_^^N­Zµ"~êxÞ¼yäééIšššäääÔ g›’ëÕ™ž9s†ÆŒC^^^tôèQ"zå5ÝÈȈÌÍÍÉÚÚšÌÌÌl<+¹vMM ]¼x‘ôõõéøñãDôʃøÄ‰©W¯^tâÄ ª¨¨ ¸¸8š;w®`díïïOS§Ný`yüË/¿®®.;wŽÙsG7nÜäÿƒ(::šLMMßzètZZÙÛÛÓ¼yó¤<¤¿ë8 Ó,¦YL³¬c÷HI…ÊÏϧÒÒRÞçSm¡,,,$¢W[Ã;F)))o6¯íóééÓ§‚Uééé4zôhòòò¢cÇŽÑ«)ò¤¤$:{öì[Ïh|“pèèèv8åææÒ Aƒ. $ܼy“&OžLZZZTÉsKþ9s&?ºÿí·ßH]]~úé'Á¬ƒ„¼¼<òööæ=Ë¿íyiÖ¬YeƒÁ`šÅ4‹iƒuìþ#ßÝ»w“««+µoßžÆÏï«-”ï²¼¶@îÚµ‹lll¨cÇŽäââÂû\º|ù2/”ïêOŠˆ(99™/^LÞÞÞN;wî¤ÒÒR²³³£ÿý§OŸ&999ºrå ÿÌ¥¥¥´aò¶¶nÔ]QµíSÎ;GD¯ü-_¾œRSSIQQ‘Ö¬YCDDeee´páB)îÔ©SgÖÅ™3gÈÓÓ“Í`šÅ4‹iƒuì¯ìE”””hùòå”@ãÇ'+++Ú¹s'/”mÚ´¡¶mÛ vžÕ7â«=š;p੨¨Ð‚ èæÍ›äééI¶¶¶ü.³Ë—/Ó¸qãÈÞÞž7„ 6©©)ÓøñãÉÑÑ‘ììì($$„¾ÿþ{ ¥˜˜>þõë×ÉÆÆ†wZ;ÍOŸ>m”|ƒiÓ,¦Y Ö±ûLxöì :”æÏŸOD¯¼‡ëéé‘ YYYQbb"?J³³³“r4ù:YYY4kÖ,^ŒúôéCDôêcccjÑ¢™››óŽA/\¸@S¦LÔ¾‰¨¨(jÒ¤ mÛ¶?Lº¨¨ˆâââÈÃÃììì(<<œ|}}iäÈ‘χ(_OkÖ¬!Ú¾};¶iÓ&êÚµ+ÿyùòå$''Gû÷ï§¼¼<º{÷.ùøøƒƒƒ ]åååü2ƒÁ`šÅ4‹Á:vŒóâÅ Ú±cåææÒãÇÉÊÊŠFMýõ……ïQým”––’““‰D"š:u*=zôˆ.^¼H)))ôäɲ°°àm6\\\¨C‡´oß>^„¾}ûˆã8GvɨûåË—O>>>4uêTúõ×_ÉÆÆ†ÜÝÝÉßßÿƒ:ò¼~ý:5Š)..Žˆ^¹SÛ×Tii)-Z´ˆTTT¨M›6Ô®];êÒ¥ËGs0Ê`0ÍbšÅ4‹Á:vÿ!jÛTUUñË’dtt49::R~~>Mž<™ ÈÉɉž={öÖ]Keee4iÒ$ÒÓÓ£aÆѤI“øí–-[ÈÃÃ_Bøúë¯I^^žºwïN%%% ~†K—.‘¥¥%-[¶LpX³ä¹ž?N¡¡¡Ô§OAC Iû‡p€)¹wvv69’zõêE{öì¡Ý»w“¿¿¿TüÌÌLJII¡'NðÂø¡s2L³˜f1Íbü[Ñ`D"öìÙƒ°°0„……!##ÊÊÊ€ââbÈÊÊBVV–;aÂìÝ»ªªªà8Np-"|nÚ´)¦L™UUUãþýûX¶lîß¿YYYddd ¸¸P]]ØØXlÚ´ ŠŠŠ Nûöí±yófÄÇÇ#66wîÜáÓZUU„††âĉ¸w磌«¡  ŽãPSSÃ?[cAD‰D¨©©±±1f̘mmm$$$`Û¶m¸rå bcc±nÝ:=zÈÉÉ££#\\\ ##ƒêêêFOƒÁ4‹iÓ,Æ¿Ž^¯­ŒzùóÏ?ÑŒ ¡‡ IDAT­[7ôêÕ =‘#G‡>}úàÒ¥Kpuu…››***pîÜ9¤¦¦¢U«VRש©©H$ÂÓ§O!‰ ®®Î·zõjTTT@KK [¶lAëÖ­áåå…;w"55æææ8pà233affö^ÏqáÂL˜0~~~2d UUUX¹r%Ž9‚|쬮®†ŒŒ  ´´ÇA,ãÆX²d ’““‘——///\»v rrr(++ƒŠŠ Nœ8‘ˆI ¦YL³Œ×‘™;wî\– õΈˆ¹>xðUUUøùçŸ1`ÀÈÈÈ`üøñ077‡§§'ºuë†Û·oCEE?ýôÚ´iSwošãpëÖ-XZZ"==999pqq¼xñ‘‘‘øöÛoallŒ¤¤$ÂÞÞVVV(--ņ кuë÷~®æÍ›£cÇŽX¹r%^¼x–-[BMM /^¼ÀÒ¥KaeeOOÏš¯‘›3g–/_ލ¨(˜˜˜ÀÎÎ;vÄí۷ѬY3ôë×+V¬ÀÈ‘#1`ÀŒ3†1¿>£À`0ÍbšÅ4‹Á:v¬c÷FD"~ÿýwDFF"==EEE tíÚrrrG«V­àíí øùùAOOï×}òä ¢££¡¨¨ˆ3gÎ`ÿþý(//‡››¿l1cÆ TWW#-- ?Æ´iÓ ]]Ý¿ý\µ…²²²-[¶Äˆ#pïÞ=lÛ¶ "‘HÐ@4¦@J®¹{÷nÌ›7aaa "Ìž=zzzpssC»ví––†ÔÔT”––¢cÇŽ——ç—XØè—Á`šÅ4‹Á`»w®Ì©©© B³fÍpýúuœEëÖ­ahhÈÛË|lûœÆ¤öN²´´4üùçŸÐÔÔ„‘‘:vìˆÜÜ\$%%AGG¦¦¦€Î;ÃÊÊ þþþ|zØRƒÁ4‹iƒñvXÇÿ'™H$­[·pÿþ}ÁÂÂNNN8xð ®]» AMM úúúPQQ»»;444Åv¤cÇŽøé§Ÿðøñc´nÝ***ÿú¼•ˆÜ—_~‰9sæ`çÎHHH@ff&ÜÝÝáèèˆ?ÿü‡‚®®./”mÚ´á}U1£cƒiÓ,£áñYR— Dbb"µhÑ‚ÈÐÐfÍšE< ›7o’—— 8Nœ8ñA—Μ9CžžžôäÉ“uþ¾xñ‚ÿÿÎ;ICCƒRRR¨  €bcc©ÿþLyyy”••EãÆ#;;;:wî›Gg0˜f1Íb0ޓϲc'±¹~ý:íܹ“ˆˆ®\¹BÚÚÚôÓO?Ñ«ãvdddx›”¬¬,òóó#:uêÔMßË—/ÿÕùOcÆŒ¡ììl""Š%Aœ#GŽPïÞ½iéÒ¥DDtêÔ)Z²d ;?‘Á`šÅ4‹Á`»wÈ‹/Çq´fÍ"":|ø0¹¹¹Ñ+ccSSS1b„`„|õêU ¤{÷î±’S>$###RWW§©S§RNN=z”èîÝ»‚¸3gΤ:ÔûŽ Ó,¦Y Æ»ñYÔÔÔ@FF—/_†³³3fΜ‰±cÇ”••!''‡“'OÂÅÅX»v- 11‡†¥¥%¶nÝŠ-Z°5üzPUU…»»;”””PRR‚+V@GGÄ„ pûöm>®››PPP 4üü¾¨ ¦Y ¦YŒÏϪc'‰ WWW„††báÂ…üw’ñáææ†¨¨(¾²îÚµ û÷ïGEEš4iÂJÍPPPÀ¬Y³ ¦¦†²²2Ü»wëׯ‡ ôôôŠääd¤¥¥aéÒ¥PQQœ;É`0˜f1Íb0ÞÙÏíËËË¡¢¢SSSܽ{X´h-Z„/¿ü/^DëÖ­‘––†æÍ›cåÊ•8|ø0Nœ8Á²233¡¡¡fÍšŒÑ¯_?hjjBEE[·n8::B,ÃÇÇfffPTTÄñãÇÙ‘; Ó,¦Y Fcñ9®?_¸pìííiåÊ•4}útÒÒÒ¢¤¤$""Ú°aùùù‘ŽŽÙÙÙ‘©©)]¸p-Ú×Þ={ˆã8òôô¤¯¾úŠßu·ÿ~jݺ5åççÓîÝ») €&OžLOŸ>¥'OžPnn.¿ËïC{g0˜f1˜f1>8¢ÿçåò3ãÂ… >|8nܸ¨¨( 4ˆÿîéÓ§xüø1ª««¡«« 6¨‡+W®ÀÓÓíÛ·Gnn.LMMÑ­[7 0ÑÑÑÈÏÏÇÊ•+±yóflß¾ššš˜7o 2 ¦YL³Œ¿Çgë ¸yóæprrBJJ ôõõahhUUU€¼¼|fff^yÌgö) Ó,¦Y ëØ}P¡œËÂ… ±{÷nV?þüóOôíÛFFFPPP€¾¾>¼¼¼ðã?~”rñ1êÍëiðàæÎ‹Ë—/ÿ#y^YY‰   <{ö +V¬ÀæÍ›ahhÈ #ã“D–eAã±XŒsçÎáÖ­[055e™ò7puuÅË—/!'''èØeffbÒ¤Iï}ÝèèhüWŽI¾~ýú=°|áÂ…F¯^½Xü‡9}ú4ÜÝÝadd„Q£FAOOwïÞEjj*V­Z… &|ÐrQVV™þœ‡|~ðà¾ÿþ{˜˜˜ }ûö=ßoݺ…;wî`ýúõ6l+ˆ Ö±û\ÈÉÉAjj*V®\‰™3g"..ß~ûíGMCMM *++Ñ´iÓÿDžr‡&Mš4ú¬¬ì§è×îô~¨wð_éÿÛY°`ÔÕÕqþüy¨¨¨¾ËÏÏÿà墮ºØ˜¼|ù õÖϪæååTUU?è}ˆååå——g…½å„Q7l)¶‰‹‹ƒ‚‚ÂÂÂлwoÄÅÅñßUVVBCC£ÎÑ^QQäåå1}út>¬¼¼033ƒ¼¼< 1cÆ TTT_ H„ððpÄÅÅÁÊÊ òòò8tèà‡~€££#´´´ ‹agg‡ÄÄÄ:+Éĉ¡¥¥ôêÕ ÷ïß—²§€û÷ïcذaÐÕÕ…¼¼<Ú¶m‹7¾5oakk+ó÷÷‡H$ÂÞ½{ù°³gÏB$ñÏ𺛛öïßÛ·oC$A$IÙÊUWWcÁ‚Ð×ׇ‚‚ºwïŽ[·n â¼nc'¹ÞÒ¥K±nÝ:˜ššB^^;wFZZZƒÞÿ7ЧO4kÖ 000@ÿþýQTT$¸GLLŒtE¬#¯àÉ“'†ªª*´´´0yòd”—— âÔeKõìÙ3Lž<——‡¹¹9"##¥Æšš¬\¹ÖÖÖPPP€ŽŽ|||páÂ>]¥¥¥ˆ‰‰áó›Ùóýsܺu VVVR:ÐÒÒzc¹ØÃ:u &L€––ÔÕÕ1zôhTVV¢°°ƒ†††4551cÆŒ—ÓÚìÞ½~~~hÑ¢äååaff†ùó磦¦FÏÍÍ ÖÖÖ¸pá\\\ ¨¨ˆÙ³góßIlìŽ?ŽÎ;†ʗؘDDD I“&RZ5jÔÕÕ¥4óuŽ;†®]»BII êêêèÝ»7²²²Záææ ‚H$z«ý_FF\]]!‹a``€ `ãÆRöˆFFFð÷÷Ç¡C‡`gg±XŒ¨¨(@vv6‚‚‚ ¡¡EEE888`ÿþý‚ûÔgãX—mríüvtt„X,†‰‰ ¿·±qãFtëÖ×~+++¬]»V§gÏžõ®R988 S§N‚°Í›7ÃÖÖb±šššèß¿?îÝ»÷Öròõ×_¿SY€Ÿ~ú &&&‹ÅèÒ¥ ’““ë´ålhÛËfì>£Ž]@@”••1hÐ lݺiii°³³ƒœœ±cÇDEE FÓ»víBEEúõëÇ7¶HIIÁèÑ£aii‰ŒŒ ,_¾ׯ_ÇÎ;¥„)>>áááÐÒÒ‚‘‘`ÕªUèÕ«BCCQQQ­[·"((ûö탯¯¯@¸0xð`ØÛÛãøñãðóó“š{üø1ìíí!##ƒ‰'B[[û÷ïÇðáÃQTTôÆ¥Q|ùå—(..†²²2ˆ)))‘‘Arr2üýýÉÉÉ‘‘““S×ùæ›o0}útÜ»w+V¬()) â,^¼222˜>}:ž={†ÈÈH 8gΜyë¬ß–-[P\\Œ±cÇ"##ˆììì7ÎòUTT G¨¬¬Äĉ¡§§‡{÷îá÷ßÇóçÏ q}³u…ÃØØ‹/æ—Û Ã×í‘^¼xWWW<|ø£G†¡¡!RRR0kÖ,<|øË—/çã>111ðõõŨQ£PYY‰äädœ={¶¶¶ˆÅˆ#Ð¥KŒ5 ˜yÁ?ˆ‘‘RSS‘™™ ++«·Î´ÖU¦ÂÃÃѼysÌŸ?©©©ˆŽŽ†ªª*’““aff†E‹á÷ßÇ’%Kжm[„††¾µœÖ&&&***˜6m”””pôèQ|ûí·(**Bdd¤à:OŸ>…¯¯/ú÷ïÁƒCWWWê>mÚ´Á÷ßo¿ý£GF×®]ŽŽŽpvvƼyó°}ûvŒ?^Pûí7ôíÛ÷³ŒGŽÌÌÌðÝwßáÅ‹X½z5œœœžžŽ–-[b̘1Ð××ÇÂ… 1iÒ$têÔIÎ×¹ÿ>ÜÝÝ!##ƒ¯¿þb±ëׯG“&M¤òŽã8\»v  À˜1c0zôhXXXàñãÇpttDYY&NœMMMlÚ´ øí·ßлwï÷šy/,,„ŸŸBBB0pà@lß¾cÇŽE“&MÞ:`[»v-Ú¶m‹Þ½{CVV{öìÁ¸qãPSSƒqãÆúõë‡Áƒóíž„ÜÜ\œ={?üðƒ`öùÛo¿EHHF…¼¼<¬^½...¸xñ"?;ú¦rÒвöóÏ?#<<...˜6mrrrðÅ_@]]‚î»´½Ÿ,ÄhÒÒÒˆã8Ú·oUVV’®®.Mž<™“””$ˆ#Á××—ÌÌÌøÏ±±±$##C)))‚xQQQÄq>}šã8Ždee鯿þ’JSYY™àsee%Y[[“‡‡váÂâ8ަN*ˆ;tèPâ8޾ûî;>løðáÔ¢E *((Äíß¿?©©©ÑË—/ëÍŸóçÏÇqtàÀ""ÊÈÈ Žã(88˜ìííùxdkkËþã?ˆã8:qâæççGÆÆÆR÷ĵ²²¢ÊÊJ>|ÕªUÄq]¹r…2dñŸsrrˆã8ÒÖÖ¦gÏžñá{öì©ó½ÎÅ‹‰ã8JLL¬7Žä111Rß½ž×ÄqõîÝ[oüøñÄqeddðaFFF4tèPþó¼yóHII‰nÞ¼)øí¬Y³HVV–îÞ½KDDÇŽ#Žãe´.”””×güs>|˜deeIVV–húôé”””$(ïõ•‹7Çqäãã#ˆçèèHÇѸqãø°êêj200 77·7–SÉ5sssù°ºt`̘1¤¨¨Hååå|˜««+qGëÖ­“ŠïêêJîîîRúQWÝqtthÑŽ;¤t£.:tè@zzzTXXȇeddŒŒ 2DJ[ÞT¿%„‡‡“H$¢Ë—/óa¤¡¡A"‘HW-[¶$Žã())IpÉ“'Çq‚6 ¤¤„LLLÈØØ˜jjjêÍÿútS’ßË—/çÃ***¨cÇŽ¤««[gzS{BDäííM¦¦¦ü碢"’——§/¿üR/22’D"¯=·oß&Z¼x± Þ•+WHNNŽ.\Ø rÒ²V^^NšššÔ¥Kª®®æãÅÄÄÇq‚rö.mï§ [ŠmÄÙ:mmmx{{¿š ••EHH¶mÛÆO wëÖ ZZZؾ};ÿ»ÂÂB9r!!!|XBB,--aaaüü|þO2eüÇîíêêŠÖ­[K¥©¶]aa!ž={ggg¤§§óá~ÄU{TÿºíGbb"üýýQ]]-H———ž?.¸îëtìØJJJHNNægæôõõ1xð`¤§§£¬¬ D„S§Nñ#ò÷eèС‚Ù5ggg¯l ßFHHˆÀަ¡¿•üæàÁƒxùòe£•«Ú³µßËëK2µIHH€‹‹ ÔÔÔïÉÃÃÕÕÕü;HLL„H$BDD«ÀÿºwïŽÔÔT ##K–,A=ТE IÛ>|¸à³d™³v¸H$‚­­-²³³ß9µíÊ‹‹‘ŸŸggg¼xñ×®]“Šûw—öŒ³gÏ ÒCCC¸¸¸Ôû»‡âòåË ƒššnmm OOÏ7Ö±7qðàA8::¢]»v|˜ºº: T§ ‰‰ <==aû÷ïG—.]àèèȇ)**bÔ¨Q¸}û6þúë¯÷J›œœF-õ9//7¿¨ÚíÉóçÏ‘ŸŸdgg£¸¸ ¬¬ ÄÇÇ ~»}ûv888@__°cÇúöí+Ð(]]]˜™™Iµqõ•“†”µ´´4`äÈ‘‚ÍD„ººº”v¾KÛû©Â:v@uu5¶mÛwwwܾ}7oÞÄÍ›7áèèˆÇãèÑ£ôéÓ»wïFee%_À+++»7n 33ÚÚÚÐÑÑáÿ,,,ÀqžQñ–•…ìììЪU+ : o݉__¯+ü]ËdzgÏàêê 555Ì›7ß„táÂ̘1Cʨ½1v6ª©©¡gÏžˆ‹‹Ãœ9sðÛo¿¡¢¢ƒ úGÞË»îØ¯+zÆÐ”†pëÖ-xxx M›6X¾|9 ФIüþûïX¾|¹à½úûûC,#>>ˆ‡H$BPP =á8¬³Ü½n7]W½kYkH›ð¶¶÷õÁëØý‡‰‹‹ƒŽŽÖ¬Y#õ]bb"vî܉µk×B^^...hÖ¬¶oß''';v sæÌüÆÌÌ —/_F·nÝÞ;M‰‰‰‹Å8tè`£Æ/¿ü"ˆ×²eKÔÔÔ ;;[0¢¹yó¦ ž¶¶6”••QUUõÞéêÚµ+***°eË3P\\üÖ÷djjФ¤$J-I|*ùÍh’ç’äŠãÇ£  »víâÍ$ƒÙYÆÈôôôЭ[7Áðʾ£v^K:y"‘ˆß&¯¢¢---œ8qB¯®„Ÿ~ú©Î÷âããSïo‚ƒƒ‘ššŠ¤¤¤:G¹’Ñ|ß¾}ADou_¡¨¨ø^KrŒÆ§>‰=X]Ëw³ŽHt§ölIEEÅËxCPTTP¿9…´´´ð¿ÿý'OžlÐl]³fÍСCÄÄÄ–¯\¹‚¤¤$ç€w¡GHMMœ’QPP€¸¸¸积¯/Î;'ØÉ_ZZŠuëÖÁØØ˜×NÉònmM©®®Æºuëê¼nUU•À½IEEo^óº;ª·½×çÏŸcãÆu>SHHD"-Y²DnnnN"‘ˆrrr¤¶í‹D"Á¶ýÒÒR8p ©««Çq¼ëIÜ×]Ôåf$,,Là2EgéÒ¥ouERŸ+“áÇ“™™)((¦¦&yxxбcǤ¶ç1‚ÔÔÔHEE…úõëGOž<‘º‡ä=eeeQPP©¨¨¦¦&Mœ8Qà2¢.·×_ý5™››SÓ¦MI[[›œiÙ²e·ÕÕÕôÃ?¥¥%5mÚ”tttÈÏÏ.^¼Èǹví¹ºº’X,&Žã˜ë“ƒÒðáÃÉÒÒ’”••©iÓ¦ÔªU+š4i=yòä­îND"]¸pAORÖž>}* #eeå·º;yÝ…ÇéÓ§ÉÁÁÄb1éëëÓÌ™3)))Iª»¹¹‘µµuÏéææ&pC!q=deeErrr$‰¤\ŸH\¢x{{¿Sž=z”œI,“ªª*õêÕ‹²²²êÔ¡†¸;!"ºt鹸¸¼¼<Ђ x·Kyyy‚wäïï_ç5²³³)((ˆÔÕÕIAAìííiÿþýuÆóôô$yyyjÖ¬}óÍ7täÈ©üvuu%kkkJOO'GGGRPP cccZ³fMƒžiïÞ½Ô¾}{RPP Z²dIï_ AƒH$‘——W½×ܱcuíÚ•”””HII‰Ú´iCááátãÆ•“†–5"¢Õ«W“‘‘ÉËËSçÎ)%%…lmmÉ××÷½ÚÞOŽ˜õ4£.]ºÄÅÅ5xôËøg044„··w½Ë/ ÆçÀå˗ѱcGÄÆÆ¾uGì?ÁäÉ“’’’ÄnÕÍÍ ‚›Ï™ššhkk£oß¾ >}ãß³±c ¬¬L*lÅŠ‘‘y£(Æ?Oee%òó󥎓b0>7¢££¡¬¬ŒÀÀÀ<-¯»Iyúô)bccáììÌ6#ý”——K-çþúë¯(,,ä‹û/Álìøßÿþ‡ .ÀÝݲ²²8pà<ˆÑ£G£E‹,ƒ>Q:„mÛ¶¡¬¬ ,CŸ%{÷îÅÕ«WðððOâpx¸»»£uëÖxüø1~ùå”””Hy@øØ|® t©©©˜2e ‚ƒƒ¡¡¡ôôtlذÖÖÖ7,ÿØR,GŽÁwß}‡«W¯¢¤¤-[¶Dhh(fÏž-ðÔÍø´èÖ­nݺ…±cÇbæÌ™,CŸ%ÆÆÆxüø1¼½½Ëï ý'™={6~ûí7Ü»wÇÁÖÖÿ¨ www<}úô³\ŠÍÍÍÅĉqîÜ9@SS¾¾¾X¼xñrµƒuì ƒÁ`0þ#°éƒÁ`0 Ö±c0 ƒÁ`°ŽƒÁ`0 ƒuì‹°°07ê5ÝÜÜàîîξ}û6D"bbbõ>sçÎý¨›âãã¡©©)8NE$!<<ü?_N>Ö;ml6mÚ‘H„;wî|2õ£¡ .ÄîÝ»=Ÿª««‰' ŽþÏõo)'¢ì|ªÏþ>üݲèíí 333,Z´ˆ)ôgP^Ö¬YóÁJ+W®„ªª*úõë÷Ùi×Çj÷>Fy:t(®-ƒuìê%::×®]kÔk>|¸Îƒ×›o¾ùFÊæ‡êØíÝ»ׯ_ǨQ£>Ëròú¦q###¼|ù²A‡Œÿמýcuì`ôèÑˆŠŠBII SéÿxyY³f 6mÚÔè马¬ÄÊ•+1bÄ©ÎÌçê âcµQMÓ¦M1dÈ,[¶ŒU4Ö±«YYYÈÉÉ5ú5ee?œÏçÒÒR€ŒŒ š4i"5ºùbµqãF8;;£Y³fÿ‰†§®S6Þ•&Mš0ÿ~oiÿݲˆòòr$$$° e¼ûöíC~~>‚ƒƒÿÏ#ÑÿO¹ú#77üñ+ÜŸcÇ®¸¸“'O†‘‘äåå¡«« ///\¼x‘óº ‘ÄvjéÒ¥X½z5Œ¡¨¨///ܽ{555˜7oôõõ!‹ñÅ_ °°Pp߆Ø/ddd ,, &&&PPP@³fÍ0|øpâIlVþúë/ 0èÚµ«à;þ%ŠD(--ELL D"D"†ŠãÇC$a×®]R騲e D"Ξ=[oZËÊÊpèÐ!tïÞ½Þ8»víBÛ¶m!//¶mÛâСCüwüñGƒï/±{ÉÉÉA= ¤¤„-Z`Þ¼yR¿­©©ÁŠ+`eeèééa̘1xöì™ ž‘‘üýýqèÐ!ØÙÙA,óç©nܸݺuƒ®®.äååaee…µk×¾µlÕgc—€6mÚ@AAÖÖÖØ¹sçËØºuë`jj yyytîÜiiiR÷ÊÊÊBß¾}¡©© têÔ {÷—™™‰nݺA,ÃÀÀ ,@MMMƒë‹äÖN{]üðÃptt„––Äb1ìì옘(”zÊ"ðÊIè¸qã`aa±X ---^¬_GGGíÚµû ³ÐŒ¿Ç©S§Ð©S'(((ÀÌ̬Þ3ŠRÇŒŒŒpõêUœ8q‚// -((À—_~ kkk(++CUU¾¾¾ v°»k×.×i+Êq–,Y"uŸòòrDDDÀÌÌ òòò044ÄŒ3¤läÊËË1eÊhkkCEE¥Þ<hhh0MhHþ¿øPcÆŒAbb"ÂÃÃѦMäçç#%%YYYèØ±£ r¿ÎæÍ›QUU…É“'ãéÓ§ˆŒŒDHHœœœššŠY³fáÆX½z5¾üòKüòË/‚ë½Í~áÈ‘#ÈÉÉÁðáá§§‡+W®`ݺuÈÌÌÄ™3g¤â¡U«VX´h‘`¤ö}bcc1bÄtéÒ…_2555E—.]```€¸¸8)Š‹‹ƒ™™ºtéRoZ/\¸€ŠŠ ØØØÔù}rr21~üx())aÕªUèÓ§îܹ ¸»»¿Óý«««áíí ,Y²@DDªªª†´£GFLL † †É“'#;;?þø#.^¼ˆ””~DÊq®]»†`̘1=z4,,,¼2ÆmÛ¶-z÷î YYYìÙ³ãÆCMM Æ× Y) ¿ÿþ;BBBо}{,^¼1bZ´hQgyزe Š‹‹ù†!22ÈÎÎæÓž™™ '''`Ö¬YPTTÄöíÛÑ»wo$&&òùùèÑ#¸»»£¦¦³fÍâ;¯òòò ª+IIIèÓ§Ú¶m‹Å‹#??Æ ƒ¾¾¾TÚW­Z…^½z!44غu+‚‚‚°oß>øúú¾±,Àùó瑚šŠ@__999øùçŸáææ†«W¯JeccÃDüãÏ?ÿ„——tuuñÝwß¡²²ÐÑÑ‘*/ ©c+W®Dxx8”••1{öl€®®. ;;»wïFpp0ŒñèÑ#DEEÁÕÕW¯^}ë*ÂéÓ§ëÕ®ªª*ôèÑöööXºt)>Œ¥K—ÂÔÔcÆŒÇq Edd$ ¡®®ÎÿvïÞ½(..–2ÇX°`D"fÍš…ÇcÅŠèÞ½;.]ºÄ×ÇcÇŽÁÇÇ:uÂܹsÁqßNNNF§NÞªÿïÚ†¼®[µßSii)ºuë†ÇcòäÉÐÕÕÅ–-[pìØ±:[XXôéÓýúõCBBf̘kkkx{{ó¤¤¤`ôèѰ´´DFF–/_Žëׯ Ž#FŒ@\\GGG=z~~~õ¦ßÆÆ)))¬"¾ ú¢ªªJáááoŒ3dÈ222â?çääÇq¤««KEEE|ø×_MÇQ‡¨ººš0`5mÚ”***ø0WWWrww—ºfLL öòåK©´lÛ¶8Ž£ääd>,""‚8Ž£JÅ—|W%%%:t¨Tܯ¿þšäååéùóç|X^^ÉÉÉÑwß}÷Æ¥~ýú©š=_åÿ·ý y»ví¢@´lÙ2Õ}ûè£Òý¾½½}ªs·°° jÕª©®Ûºuë(]º4^^^©ÎS×|àÀ½»† –*#F¼ò·=666SúJgg²eÁnÆŒœ?ž‚ R­Z5¾üòK¢¢¢Òý¡{q]¡B…R}Öý,X0Ýõ/ö³{<`øðáäÍ›[[[ÜÜÜ(V¬˜^~/ò®±Ä¼¼¼¨R¥J*9­Y³???}ºoðV7Ýõ/^+݃—òš¼Mújµ:ͺ%JÉýÓ"##yôènnni–gÏžq÷îÝ7º~¿þú+ 6ÄÎÎ'''ÜÜÜ7n*•*Ýûð2týÊ/žæoº&È×]7Ýîº]ºt EQ˜0aBšsÔ5ßܹsGŸ¾î¥¤dÉ’o|ìoºý¶mÛ¨^½:666äÉ“777¾ûî;?~üF×*66–‰'R°`A¬­­quuÅÍ͘˜˜t¯¹.ßåÔÐ/{öŒ5¢óîÝ»ÄÅÅ¥›_¼¼¼Ò×»>cŠ¢0{ölJ”(‘*¿œ;wîŸÑ—]+]~•»t…µ_ýU nݺu$%%ѽ{÷4ûLïºxzzꟳÈÈHzöì™æ¹^¶l iÎ+=½íoÈëž§^æ®”z¹sçNuÝ"##ùóÏ?õ÷K·xyy¥q—Z­N“Ö«Ü%Nx3²e»:P»vm6nÜÈO?ýÄÌ™3™>}:ëׯ§Y³f<|øP.D—AtÆÌÌ,Ý}¾lýÛJ¶cÇŽ9r„Ñ£GããヾoYzÞ_ìw”Ñ·vÇçÆÄÆÆòû￳páÂ×n§ßÇñððÈð5Éhúé¡ÕjqsscíÚµéþÝÕÕõµ×ïòåË4hЀ2eÊ0{öl ,ˆ¥¥%Û·ogöìÙo5ð #¼îºéÒÿôÓOÓ}’R¼†Ü¡C‡hÕªõêÕcñ⟻»caaÁòåË_z/^dèС¬X±‚‘#Gâç积uîÜ9Ýk®û±pqqɱ…:EQô}›âããÉ—/_*g™ê\f»wïR½zuêÖ­K¯^½ þãæêêŠÍKóKÊûþ6ÏØ«òKýúõùþûïÓxôÅ \š6ss<==S5f'''š7oΚ5kèÒ¥ ¿ýösçÎM÷»/^EQ¸té’¾§«ŒÙÛÛ¿ö¹6ÔoHáÂ…ùûï¿3Í]ÜzqæÌ™7r—V«åÒ¥K©ÞÒ½Ê]QQQ”.]ZJn¯óFv;!­V›æu´««+îîîÜ¿Ÿ=zЭ[7š6mŠ™™Ó¦M{íH¢Ì®í¼X«š3gÎ;ï;W®\/ýÌ“'þþþ¬^½šµk×âïï³³ók÷Y©R%,--9~üø;ÛÛ¤¿`Á‚Tb\°`–––4hÐHÑhÒ ƒ’””ôFMé݇GòÖ|Ê•+ǪU«RÅ™úå—_8þ|†®—››õêÕcÉ’%ܺu+ÍßS677kÖŒ£G¦ºGwïÞeÍš5¯=www|||X¹reªæÔ={ö¤‘½îš%%%é×]½z5ÝP6/Ë‹æææiòþüùó_ú–áäÉ“øùùåX9«T*:¤wÖ/¿ü‚“““AõbhÒ¤ ›6mâÚµkúõÿýwª0GoûŒ½M~Y·n7nÜx£ãõóóK7ŒÐë*Â/Ò½{wþúë/>ýôSÌÌÌÒÌb¡cÕªU©j¯_¿ž[·náïï@åÊ•ñôôdÖ¬Y鯤{±‰!~Cš6mJtt4[¶lIUÙz±0ý6/:vìHtttºûˆÕOM©I?oÞ¼7>—S§NQ£F )¹å´7v?¦@tèÐ *`ggÇÞ½{9qâ:t nݺ :”_ý•gϞѭ[7êÖ­«ïÃõ®¼ªiÖÁÁ:uê0cÆ ñððà§Ÿ~Ê”´+UªÄÞ½{™={6îîî+VL?ð’›CÛ·oÀW_}õFû´¶¶¦qãÆìÝ»7U¸‘Œœÿ›¤ommÍîÝ»éÕ«U«VeçÎìØ±ƒqãÆéßÚÔ©S‡?þ˜©S§rúôi5j„……‘‘‘¬_¿žyóæÑ¶mÛWc“&M°´´¤eË–ôïߟ§OŸLÞ¼yÓ-H½®¹}Ê”)´nÝšš5kÒ«W/>|ÈÂ… )W®\†ƒŠ.\¸ZµjQ¾|y>úè#Š-ÊíÛ·9räÑÑÑœ>}€Ñ£GJÓ¦M>|8¶¶¶|ÿý÷)Räâ}M:•æÍ›S«V-z÷î̓X°`eË–Mõ#Õ¢E fÏžMÓ¦M àÎ;,Z´ˆ%J¤Içey±E‹„††âèèHéÒ¥9räûöí#Ožo²9öË/¿d×®]Ô®]›Aƒ‘˜˜È‚ (W®\ª|ð6ÏXåÊ•Y¼x1_ý5žžžäÍ›—>ø€-Z0iÒ$úô郟ŸçÎcíÚµ+VìºÀ´nÝšÐÐP"##Ó4¾MšæÍ›“'O}Wž—u È“'þ9ºuësæÌ¡D‰ú*•Šàà`üýý)[¶,½{÷ÆÃÃèèhöïߣ£cªÖûú Iyîü1 , €áÇ“/_>Ö¬Y£o~Ó;R®ïÞ½;?þø# `ÿþýÔ¨QFÃ… X·n?ýô¾¾¾x{{À¢E‹xôè~~~ìÛ·Ë—/¿´¢÷ðáCZ·n-%·7¸ÉÙŠ„„eôèÑŠâàà ØÙÙ)+VT¾ûî;eüøñJëÖ­•k×®)¶¶¶Š½½½¢ÕjEQ”•+W**•Jùæ›oRíoÿþýŠZ­V"""R­ QÔjµròäIýºzõê½64Ftt´Ò¶m[ÅÉÉIÉ;·Ò©S'åæÍ›i†wñÅŠZ­Vîß¿ŸæuKÉ?ÿü£Ô­[W±µµUT*Ušp Š“““âää”n—±qãFE­V§ o  w’^H™"EФêâué÷ìÙS±··W¢¢¢”&Mš(¹råRÜÝÝ_’åûï¿W*W®¬ØÚÚ*Š···òÙgŸ)·nÝJu,-[¶Lwû­[·*ÞÞÞŠR¬X1eæÌ™ú{š2<À›ÜSEQ”ððp¥téÒŠ•••R®\9eóæÍJ»ví”2eʤÙöÅ<¦»ž/žë•+W”ž={*îî¥¥R°`A¥U«Vʆ R}ïܹsJ½zõ¥`Á‚Ê×_­,_¾üÂ(Š¢lذA)S¦Œbmm­”+WNÙ´i“Ò«W¯4áN–/_®”,YR±¶¶VÊ”)£¬\¹ò­òbLLŒÒ§OÅÕÕU±··Wüýý•þù'Ý<³xñbÅÎÎ.UøˆìŽV«ÕûHGJg,XPùè£ôßÙ½{·röìYƒçÁƒ•Ê•++VVVJñâÅ•¥K—¦›Þô»}û¶Ò¢E ÅÁêPKL IDATÁAQ©Túç->>^5j”âáá¡ØÚÚ*µk×V~ÿý÷4Ïä«~ \]]Ó„5éÕ«—booÿF^Õ1xðàtÃ,¥ w®)yóæUråÊ¥´lÙ27ua>Úµk§¸¸¸(ÖÖÖJÑ¢E•Î;+û÷ï#ÿ¿éoÈ›øLç¥-Z(¶¶¶Š›››¨DDD(*•J9vìXªmË—/ŸæxÒsEbb¢2cÆ ¥\¹rеµµâìì¬T©RE™®_¿N‘"E(T¨… Ö7eÄÅÅ1kÖ,~ÿýwêÖ­›m‡QoÚ´‰{÷îÑ£G·¾Ž“&MbÑ¢Eú¾ï+ý¬zí“’’Rõ=ƒäXMgÏž¥^½zÒ,ð–ìÚµ‹Ë—/3vìØuÞâ¬ÌgäÈ‘<}ú”ððð ï#..ŽÕ«WÓ®]» Ø2et"Ržï’%K(Y²¤ÉÌ‚••Õ;Çu•¦Ø,ΩS§ggg%888Uôþû÷ï+Têׯ¯äÏŸ_iÒ¤‰âææ–ªI5;qôèQeéÒ¥JÁ‚•J•*™lúYù]TT”âéé©|ñÅÊ’%K”‘#G*666Ї‡‡òàÁ©> â¬,È;w”5kÖ(mÚ´QÌÌÌ”3gΤû½¬þÆ®iÓ¦ÊǬ,Z´H™:uªR¶lYE­V+aaa’ ²(Ù6ÜÉ­[·([¶,;wÖ×hpvvfƌܿŸ-[¶P´hQÊ–-û΀M•ï¾ûŽÕ«WS±bEV¬Xa²é¿É<»¦Š³³3•+W&88˜»wïbggGË–-™6mÚ+#ß ‚8ËtùóÏ?éÖ­yóæeÞ¼yT¨P!Ûµ6@òÈØàà`Ö¬YƒF£¡lÙ²üðÃtèÐA2AE¥(F cþž cРAܺu +++4~¨øÅ‹ß(2¿ ‚8K„¬D–ïc§ütöiÞ¼9>>>Lœ8‘GaffFRRÏž=cÉ’%F‰%‚ Îá}’¥ßØ)Š‚V«ÅÌÌŒcÇŽñ×_aaaAƒ È—/K—.eÛ¶m/^œÏ?ÿœøøxæÍ›ÇÚµk9xð`ºóÞ½Œ{÷î±{÷nŠ)’)Ó| Bv#66–«W¯Ò¤I“; ˜8KÄY¦ š,…nØzÊÎÅŠƒƒƒÒ¼ys¥X±bJ×®]•={ö(Z­VY¾|¹òÁ(¹råRªT©¢¸»»g¨ÓñêÕ«@YdyͲzõjé½,Î’Eq– žx=º>'çÏŸgÍš5|ñÅ\¸pQ£F1}út ÀáÇiÒ¤ ·oß&66–Þ½{Ó«W/¶nÝŠ‹‹  ÌÐ$ĺŽÊm·-×ïšfðœ?íFü s26!ÿ wËÐvSFÄ4'w†¶]FŸ·ÞæØˆõTÓ>Cém›ŸÁŽÁ{G@à N—Ñh1‡F@í ¦é•Á4ß2Í›Cp7éÔŸ œõ.Þú¸J sJdðBOÉ`š`ÎäŒmä<1Cۆ·Þn÷ôÖ†÷ǵ Þ¿G@i;+#n¾ÿ7lÍ~ÎÊ2; OŸ>¯¯/“'OÆÊÊŠÛ·oÓ¡C ÀÕ«WéÕ«Íš5C­V3mÚ4´Z-­[·¦U«V.~‘ ð¶‘}¬3°ß|Û.·UÆ·µ÷µÌØv¹Õ”Íà¶y(ôÖÛXæ¶!o¡Œd>ß f„Üßöi3UnpË`š…3˜¦mn(ìûNÏŠê²®³ÞÅ[¾öt–yÆ·¥BÓtß nëì–±‡Ë2·-ξØ6£x<Îàý°È ŽL3_F3|ÆÝœÝœ•% vŠ¢`ffÆ™3g¨Y³&ãÆcܸq4nÜwww´Z-ƒÆÏÏÐÐPþúë/jÖ¬ÉôéÓ‰‹‹£S§NòK#‚8K„lM–«R©¸yó&Í›7§aÆLžü¿wçkÖ¬ÁÒÒ’'OžðàÁºvíšüÂÁÖ–ªU«RµjUj×®-wZq– R°3?~LÅŠqttd×®]Ìœ9“îÝ»óèÑ#xòä Ë—/çöíÛ,^¼kkkƇ‡‡ÜiAÄY‚ d{²L;///&OžÌ¬Y³øá‡X»v-»víbÏž=T­Z€+Vжm[jÖ¬ÉÓ§OÙ±c‡I a.g„4J>ͶM¯h@eßd™Ã§YÒiV @ȹÎ2†·òÁ“m Ÿfá€jÙßîFH³Œ8K‡I¿±Ó…ØÓýëããÃðáÃIHH`Û¶m 6Œ è¿_¹re.\¸@xx8gΜÁ×××$Σ¼1 ve²Á®X@•œ!cˆ¹šH2';ËÞ2JÁ®­ìÞ R°3&&ûÆN]¥RM||<...T©REß_寿þb×®]4mš<(?11[[[*Uª$wVq– 9“~c§V«Ù°aõêÕ£C‡Ô¨QƒÙ³gãââBPPjµš+V°{÷n,,,äŽ ‚ ÎA v¦†J¥âÔ©SôíÛ—#FpêÔ):wîÌĉùõ×_)W®Ÿ|ò VVVÌ;—}ûöÉÝAœ%‚ìLÐÐPnÞ¼™jÝÕ«W©S§C† áÚµk¬X±‚€€š5k@ÅŠ6l  T©Rr7Ag ‚ ;c£Õj5jíÚµãÎ;úõæææÄÅÅqúôijÖ¬IÆ ùî»ïˆˆˆàĉTªT‰yóæ‘?~¹›‚ ˆ³A‚±©V«¹víOž<¡]»vܾ}€âÅ‹аaCêׯϒ%KP«Õh4ÂÃÃÙ¶mF¦0Aœ%‚` ;µZMRR–––œ:uŠ{÷îѾ}{îÝ»G™2eð÷÷ÇÖÖ???®\¹BLL ãÇçðáÃtéÒ333¹‹‚ ˆ³A0r¸]hsssEÁ‚3gÎP¾|yZµjÅöíÛ1bOŸ>%""‚qãÆQªT)þý÷_¶mÛFÉ’% ~Ì»Hž;%å0N¬:A0¿‡Á±°ÔëžÇdûÓg B寰ä%%qÙÓYF+ØéxÜ¿qttäܹs”/_žæÍ›³cÇÆOtt4/^ÄÊÊŠÂ… ­JSÀ]!§S- mãOÁäìMœ%Y˜2iƒß:+²Ÿ³ŒúÆN¥R±e˾ýö[bbb¨U«Íš5£Y³fzQ6k֌͛7“?~él,‚Qg ‚`ê­J¥bçÎtíÚ•?üñãÇ0zôh6mÚ„¥¥%çÎãÑ£GÔ¯_?ÕÈ3Aq– ‚ ì=zĺuëøì³Ï1buêÔ!""+++Æφ ô“­­­yþü¹Ü-AŒ†8K)ؽKKKZ¶lI÷îݹsçõë×§uëÖ¬Y³OOO‚‚‚ÇÊÊŠãÇS¤H¹[‚  q– R°ûEA«Õ ÑhHJJÂÆÆ†† R¨P!¶lÙ‚££#_ý5¥J•¢X±b<þœùóçóèÑ£T–AÄY‚ F,ØArì§-[¶Ð«W/zõêÅÙ³g±··àÉ“'˜››cnn®ÿî!Cغu+ŽŽŽ¨TªLõ«> ‚ ˜’³Ä[‚ ˜lÁN¥RqîÜ9úöí‹••111T­Z•ˆˆ>øàNŸ>M=ð÷÷gÅŠ|øá‡899ešuBŒŽŽæþýûܸqCî¾ &é,ñ– &W°KÙ”””D@@ÁÁÁlÛ¶Ï?ÿœÎ;†?ýô ¤páÂìß¿?ÓyªÕj6nÜHóæÍiÖ¬-Z´ 88Xr€ &é,ñ– á½Æ±S«Õlß¾7bffƳgÏô;v,Ý»wG¥RѹsgªV­Š¢(¨Õ™[ÞT©T=z”Þ½{3kÖ,š4iBDDýû÷§B… T­ZUr‚ &ã,ñ– &U°ÓM»säÈzôèÁ|Àµk×8þù„   .]ºDhh(Ó¦MÓ×v!9¸§¥¥%¥J•ÊTIëŽC¢ææ”(Q‚¸¸8j×®M³fÍøî»ï ÁÇLJŠ+JŽ„ˆ±%ÞÁd vŠ¢ðüùs̱cÇhÓ¦ Å‹§wïÞ¨Õj¾úê+Ôj5;v`Ĉ™š¾®i䨱c¨Õj*W®L¹rå0`K—.eÈ!L:µZM||<¿üò 111T¨P33³Wîÿãà›Ïp7苆Ͻ§Ç}J×®]™1#ùUØÍ›7Ù²e žžž’!êLÅYâ-AŒ^°Ójµ¨Õj}‡c•Jņ 6l… "::š®]»2tèP,XÀ AƒF­VS§NŠ+F`` >¸gf…‹‹ mÚ´ÑËQ«ÕbmmM`` 5âÊ•+(Š‚¯¯/… ’œ ÙSw–xK„Ìâ­›b5 jµšÈÈH6oÞ ÀŸþÉ€ â·ß~c„ ̘1ƒC‡áééɼy󈉉aÖ¬Yüúë¯É%Ê÷ H]ÓŠfffÄÅÅ¥’ºNžåÊ•£uëÖ|øá‡"GAÈæ˜²³Ä[‚ µ`§Ñh033ãôéÓxyyqóæM ¹Y lÙ² 4ˆ«W¯2mÚ4z÷îMÇŽQ///fΜ‰……E¦NŒ²Ÿ üo4YÑ¢E¹uë‹/N>Éÿ—ãýû÷Y°`çΓ;/9¤PgJÎo ‚ð¾yã*¨V«ÅÌÌŒ3gÎP«V->ûì3€½½=ÿüsš6mг³³¾dŠÎo ‚ð®Î2xÁNW ^°`»wïfñâÅDGG¿—ƒ´´´ä‡~ fÍšÔ®]›O>ù„… ²zõjjÖ¬‰½½=]ºtáìÙ³ 4ˆ–.]J®\¹$g B6áîÝ»Lž<™þùà1àLÍYâ-A2ÃYáC©WªT‰Y³f1a¬¬¬2íÀRNЭ«UÿðÃôêÕ‹Ù³g³|ùrüýýILLÄ‚6mÚP©R%’’’°±±ÁÝÝ]r• d#<<<¸uënnnœ>žÏ>ûŒZµjQ¼xq½$ ,øÞKÃ#~†Ü/ü”†€2’‰…Äá°ä%%ÏbÞk’–––ú )gn0g™²·FDBîL7y„ÃÉ08õ‚³b³Ž³ ^°2Uºšîúõë?~|ˆ¹¹9ÏŸ?§^½z4nܘ °nÝ::tèÀòåË%— B•cÉ’%_ú÷‹/šláN¼%9“Ù³ghÒÎ2z;@¾|ù>|8^^^Ìš5‹Ÿ~ú €Ö­[…-[¶äûï¿G¥R‘””ľ}ûøóÏ?IHH\&Y]·0(ÅÒá…¿›"â-Așԭ[7·LÍYF}c§ë—R¹reT*ÁÁÁ|ûí·h4üýý™3gcÆŒA«Õðï¿ÿ²lÙ26nÜÈÁƒ3e’nAŒKÿ_tX™øñŠ·AHé-Ss–Ñ v:9êF…éb9­X±‚9sæ`ee…¿¿?jµšP²dI¬­­‰eçÎxyy½qZ†1+ÂÛ“ pxᳩêÞ··ÄY‚u¼ejÎ2JÁNïI¥RƒV«ÅÅÅ…jÕªaiiÉ’%K˜>}:*•Š&Mšð÷ßsèÐ!)P oœ–F£ÁÌÌ €k×®‘””„‡‡G¦&!cX6/|~ , &&†7n°eËþûï?† †ƒƒC–÷–8K²–·LÍY/Ø¥ â¹yóf&Mš„¢(ØÛÛ³xñb*V¬È AƒX´hÓ¦M#!!&MšÐ¨Q£ ¥¥䨱cÙ¿?—/_¦]»v”+WŽ!C†Hî#cýBÁîUÑå¾ùæþý÷_ yv‡7²aÃT*=zôxo;CyKœ%YÏ[¦æ,ƒ¼ë×õ5IJJB¥R¡V«Ùµk=zô ]»v¬[·+++zôèÁÞ½{©P¡ƒ ¢xñâ|ñÅìß¿?CéêBÌ›7ï¿ÿžo¾ù†£GòøñcæÎËÅ‹%w ‚‘Ñ5iè–W5kDEE¡ÕjÑjµh44þÿ… ÊòÞg BÖó–©8Ë ;µZÍ?ÿüÃĉ¹|ù2ÁÁÁŒ9’   œ¹té·nÝbРAìÛ· *зo_üüüðôô|§ô¯]»FPP5kÖäâÅ‹lÚ´‰1cÆP²dI‰%%FFפ¡[L¥ÁјÞg BÖñ–©u’0HÁîùóçôíÛ—éÓ§³hÑ"nß¾Íøñãiܸ1÷îÝÃÏϦM›rýúuÜÝÝ5jÛ·oÇ××—©S§¾U©VWËNÉßÿÍ£G8xð ;vä›o¾¡_¿~ÄÇdz~ýzþùçÉ¥‚`Äš¯}ŠÅT:"Ê[â,AÈÚÞ2µÁ)Ø™™™Q¹reÜÜ܈‰‰aêÔ©8;;S£F öìÙCøê«¯¨U«.\`Μ9<{öì­: k4ýH²M›6qòäI†Ξ={¨W¯sæÌaàÀ@r‚5kÖè;2 ‚`Üš¯)Õ~ á-q– d}oåˆp'º‘cú `eÅÈ‘#ÙµkOž<áñãÇ|ûí·|ú駘››söìYží&L˜ÀgŸ}FîܹQ©TüöÛo˜™™¥ 1 ‚Ýj ö)Úlµ€'g0¦·ÄY‚µ½e g´`§V«¹|ù2+V¤N:øùù1nÜ8Ê•+ÇÈ‘#Ù±cnnn,Z´ˆ={öP§NÊ—/Ïùóç9yò$Å‹Ïpú·nÝ¢Fx{{ë;k4J—.Í„ 6l þüÔ©S333’’’077—œ*FÀÚlR”O¬5†—¤1½%΄¬í-c8Ë ;HpïÞ=V®\ÉáÇiß¾=mÚ´¡[·nŒ=šÕ«WsïÞ=¶lÙÂÓ§O™>}:ÎÎΩšB2Rã¾s玾ÿ‰………¾VËíÛ·)^¼8ݺuÓo§ÑhD‚`L YƒEŠÞ æ ÀSÇ¡½%΄ìá-c9ë¥Õ÷±S///>Œ••ýû÷§lÙ²\ºt oooþý÷_._¾Ì7èÞ½;Mš4áñãÇ$&&¾•5Mš7@¿~ýxö왾S³®©â¿ÿþcÒ¤IDEE¥ÚNš2ÁÈX‘ÜIE·©'òûö–8K²©·LlôÄ{«öU¨PY³f1fÌ7nL·nÝøàƒ˜7o'NœàÂ… xxxЯ_?:vìøVÑ—S6C¬[·ŽÈÈH¼¼¼([¶,¥J•bذa¬_¿ž§OŸ2~üx®_¿Î§Ÿ~J\\Ü{ (B±xAŒZãÊûò–8K²±·´¦uhïõ}~•*U˜9s&C† !11‘ÀÀ@j×®ÍíÛ·)R¤ˆ¾É!£…º1cÆŠû÷ïÇÁÁ1cÆ0`Àøê«¯XµjŽŽŽ888pøðaÌÌÌd‚mA0%l0©@P™í-q– ˆ·²MÁ R¥J,X°€ÁƒЧOŠ)¼}“Bhh(ÿý7S¦LaݺuüøãlذêÕ«óí·ß2~üxÿüsöíÛ‡¹¹9|ð¾¾¾úð"HA01l»‹­iÖ»zKœ%9Ä[¶¦uh{·_©R%f͚ʼn'Þj6 €¥K—2|øpÖ¯_¿¿?þþþ4mÚ”{÷îÄ„ ˜>}:Í›7çøñã|òÉ':t(Õ~¤Ó± ˜ º¾*ºÅÂt-£Þg Bò–…išA;mT«V-[¶àââòÆÛ9r„0aÂÚ¶m«_ŒF£áþýû˜™™Ñ°aCŠ+Fƒ 4h5jÔÌ'¦Žå ;KÓ:¼·õ–8Kr˜·LÌYïkmýv“ohµZ:tèÀüÁ™3ghÓ¦ sçÎ%wîÜ888pùòeÖ­[ÇÉ“'™D‚…j¾V/|ÎBˆ³!‡{KÞØ½œ”Íëׯ'..ŽcǎѵkW¨Y³&†¾þúkÆOÕªUÓ4]¤üœ^`OEQ2<'í”1ØçN½¿¶´°•Œ.äv„%/)y“qAfѦØ÷á¬ÌöÖˆ û…XÊm  ­dc!±/,yIÉÓ˜ŒïOšbß È¾øâ æÌ™Ã¬Y³=z4aaa4mÚ”]»vQ§NV®\Ɉ#¦L™2¯­IŸ>}š‡R¡Blmm±±ÉXoÇ 9¹)ëk)‰³i¼¤ä¯SбÒÛïëŦX›¬s2ÛYïÃ[s&ƒoɲB§A@ò’’‹§ ¥Œí/¥·dðÄËQ…‡²}ûv¦OŸN¿~ý>|8uëÖÅßߟ;vP§Nâãã9vì^^^/ÝŸNŽ£GfãÆ-Z”òåËHþüù%³ ‚±ÉÂM±™í,ñ– dAoåôp'¯B¥Ráì쌋‹ QQQúõîîîìÚµ‹?þøƒ=z@£F=zôkㇳjÕ*V­ZEdd$žžžüðÚýB„÷€5©ÃXgCÎo Bó–‰9˨»ôä¦Õjñññáøñã\½zEQpuuÅÛÛ›-[¶ÐªU+,,,^àöíÛ´k×???¶lÙÂêÕ«™0aU«V%>>žØØXÉ ‚`L¬þ_ŒºÅÊtÕÎo Bó–‰9Ëh»;/Y²„°°0bccùòË/yúô)ýúõãÂ… ÄÆÆbgg‡§§'?ýôýõ3gÎL>ŒÓ“®Z­æÖ­[üðÃtëÖ3f0`Àøá‡ôDA0&>óÄût–xK²·¤)–Tr=z4ýû÷góæÍ 6Œ.]ºpàÀ:Dbb"ýû÷§AƒT­Z•#GŽP³fMüüü¸yóf9ꤻjÕ*V¬XV«¥N:ÄÆÆÒ£G&NœÈÀxüø1!!!œ={V2¨ “,Ò›ÙÎo B6ñ–‰9Ëàƒ'tÃøEáÌ™3„……±qãFêÖ­Ë7˜>}:‹-ÂÚÚš½{÷²nÝ:"##Q…   ÌÍ͉M3ì_'ÇO?ý”µk×2qâDîÝ»G… hذ!< >>žóçÏ£V«ùä“Oˆ‹‹£OŸ>’AÁ˜X½ FkÖx_Îo B6ñ–‰9Ëà;]­W¥R¡ÑhHHHÐý÷ððà“O>aܸq,]º”:uêÐ¥Ký¶—/_fÁ‚9r„3f¤Ù÷¾}ûX³f 6l zõêúõhµZŽ9—_~I•*UP«Õ:tssóTµfA Œ‰‡;yŸÎo B6ðVN wrøða~ýõW8@‰%¨_¿>7¦P¡B„„„0zôh *Ä Aƒ¨[·.cÇŽ¥L™2¨T*ž?ÎÁƒÙ·o{öì¡T©RiÒxüø1… ¢J•*zé%&&baaÁ¨Q£8~ü8®®®*TH¦ñSÀâ…¯…i–!œ%Þ„là- Ó:4ƒô± ¡W¯^œ:u OOONž<É×_MŸ>}hÕªçÏŸgÕªUúﻸ¸P¾|y¬­­õͶ¶¶ôìÙ“àãã£y–;;;.\¸@TTfffhµZ,,,ˆgÿþýhµZªT©B‘"EP«Õ2 ˜&8*ö}8 o BvôVNkŠ]ºt)C‡eÕªU4kÖ {{{žL£FX²d jµš"EФ.…ªÕ8;;§j‚H9õŽŸŸ 6dúôéŒ=š%Jðüùs¾ÿþ{T*õêÕÓïOš1Á0±¦Ø÷á,@¼%ÙÕ[9©)vûöí 0€Å‹Ó©S'½ÐìííiÛ¶-„„„`aaAçΙ3g—.]ÂÎÎŽ;wêy¾8÷«îóÂ… ùóÏ?Ñh4ôéÓ‡ªU«Ò§O‚ƒƒùôÓOéß¿?666L›6P»vmÉŒ‚`b( X¥þl,Þ‡³Ä[‚½½¥ä¤¦Ø PªT)ž?οÿþ«¯ÁjµZ¬­­iÒ¤ ...üûï¿tïÞ“'O²}ûv6oÞŒ……III©yçÎ}-wìØ±|þùçäÍ›—Û·o3~üx‚ƒƒñ÷÷gäÈ‘äÍ›—N:1vìX’’’øí·ßÞ(â» †%ÎFÅó\jýg£2Ú±d¶³Ä[‚ý½eLg¥Ç{}cçííÍêÕ«1hz[•í?Ç–—÷þ!©ú»¤']AŒOÄc–â³Æ¨’Ì g‰·!çxËØÎ2xÁ R¥J©DÙ½{w .L\\ |ùò/ÝvÙ²e 8íÛ·ãïï@õêÕ)V¬IIIÌ;—2bÄnÞ¼ÉÚµkY¶lNNNtëÖí¥ÒÁ4ˆÇšØñâIžõ˜ÞÅYâ-AÈYÞ2g¥ªdZ”Û·o',,Œk׮ѵkW¢££™2e 6ÀÙ³g3f ½{÷ÖË wïÞüý÷ßüñnnnQ´hQ¶mÛÆ²e˰°HòYF‘ BÖ¬ùê–ÄW̨Ϙ1cðððÀÖÖ–êÕ«³wï^£»xKÄ[¦æ,“±‰®ãÞ½{úumÚ´¡}ûö„……ñüùsÜÜÜ?~<Å‹gùòålݺUr— dq’ãAYé—„WH²W¯^Ìž=›îÝ»3oÞ<ÌÌÌhÖ¬¿þú«xK£xËÔœeRÕÄÐÐP>þøc.\¨_W¿~}vïÞM||rð?FMÇŽiÖ¬™ä.AÈâ$7iØè——5k;vŒððp¦M›ÆôéÓéׯ?ÿü3… fôèÑâ-AŒâ-Ss–Q vZ­6ÕçüùóS½zu¦L™BÛ¶mY¹r%]»v¥`Á‚Œ3Fÿ½¼yó2|øp™CQ²ÉM)ä_û]¿~=æææôïß_¿ÎÊÊŠ¾}ûräÈ¢££Å[‚ Ü[¦æ,£ì4¾_ÉÙ³g¹rå ¥K—æÓO?åôéÓ”*UŠððp*V¬H‘"E8{ö,—.]R÷k‘Ђ}j¾¯ªýþñÇ”,Y;;»Të«T©ÀéÓ§Å[‚ Ü[¦æ,£ìEÑ‹mìØ±tìØ‘Ž;R§N‚ƒƒquueÒ¤Ilذ¶mÛröìYŽ;¦7^PPA²&I/¼±KzIí÷æÍ›¸»»§Y¯[wãÆû|^¼%BzÞ25g¥`§ÜòåË !44”£GÒ Aú÷ïÏ¥K—033ÃÚÚš &ÎÒ¥KY¾|9gΜ‘%ÙˆäNÈÿ›Rìe‘ccc±²²J³ÞÚÚZÿwñ– †ö–©9Ë “´Z­>ººZ­&22’¶mÛR¥J"""øñÇY°`Å‹O¬ÓÝÝÖ­[Á•+Wðöö6ÚÍ<6b=–¹mR­+P™bU$§ 9‡a°+,õº'1ÚÕ¶‘±vü_SFÜ£¸t¿gcc£Œ’¸¸8ýßÅ[i95" Ëܶ©Ö¨Fá€j’…œÃÁ08ô‚³ž½½³víÚ•Æ[¦æ,ƒì4¾ãäÉ“T©R J–,ÉÑ£GéÙ³'3gÎdàÀÄÇÇóí·ßÒ¦MJ•*$ò¼ÿ>G¥M›6FËUç´'o!yH„œ@ò’’¿OA@¥·ÞUÝÙÍÉëë¡ÿ|ûÔ VWZœæ{îîîé6]ܼyñV:øÎ ÀÙ·°äY!gS' yIÉåSðÉÛ9«iÓ¦Œ7.•·LÉY`€¦X]¬7mÚÄàÁƒäiz©Q£!!! 8€˜˜<¨ïX¨( /^äÞ½{téÒE2¨ d#â±&[ýÿ’ŽÈ+VäâÅ‹ X¾ Ø2ÝïµoßFÃÒ¥Kÿ'×øxBBB¨^½:ùóço ‚`poÛY/ò^›b6lÈéÓ§ '))‰.]ºààà€­íÿú{ôïߟ¸¸8:wîL077ÇÆÆ†C‡éã=™™™aii‰¥¥¥ä&AÈf$bžJŒ‰/ÑRÕªUéСcÇŽåÎ;xzz²råJþûï?BBBÄ[‚ Å[Æv–Á vZ­–%JðÙgŸ1uêT~üñGìííõ²ÓakkËgŸ}F«V­ˆ‰‰!))‰š5kbff–ª#² ÙÝdÚ)?¿ŒU«V1aÂBCCyøð!ÞÞÞlÛ¶Zµj‰·A0Š·Œé,ƒìEÑ"+Z´(cÆŒaÚ´i¬[·Ž¤¤$Ο?Ohh(±±±xzzâêêʵk×hÞ¼¹~Fä(9¢ækñ»—Ï»heeÅŒ3˜1c†xK“𖱜e°‚]ÊQd±±±¨T*<===z43gÎäСC|HÇŽõÃÿ=z„ƒƒ*•J+J„œSóÃ7vïñ– ïâ-C;ëudš‰EÑGfß¼y3Ë–-Ãßߟ²eËÒ²eK–-[F7nÎÎ΄††²|ùrEŽ‚ci™jJ±D 7Ø@¼%»zËÎz2í]J9®[·Ž‰'2`À¼½½;v,Š¢Ð¯_?ÆǨQ£ˆŒŒL%V‘£ ä<â°B…MªÏ†B¼%»zËÎ2hÁ ::š7²}ûv ,¨_?lØ0T*AAA¨T*úöíËüùóquuE¥R¥’¤ 9¯æk–BŒ†®ýŠ·Axoe«7v/6AäÏŸŸáÇ£R©Ø¼y3õêÕ£I“& :•JÅG}„››-[¶Lw‚ ä´š¯5Úƒ'ÞsGdñ– ™é­„ì2x"å(²'Npÿþ}ªV­Š_|ñ_ý5sæÌA¥RѸqc† B¾|ùð÷÷×ïÇrL¯†ý¶µîmó;@>_ÃÝ¡ÓFÈ>ÉEÊAƒ¦w[µÒàç¸S¹jð4/å/n°´®iî‘‘ýÉ 3x"«y+3œµ{zkp3 ³ÁY ŸäVe»AÓ;¡úÙàçx@©nð4/{z,­O=`R·Mé­l3xB'ÇQ£FѦMz÷îM½zõ:t(–––Q¨P!fϞ͞={ôÛµoßsss’’’ z¢Š¢ ( ?æÞ½{ÀÿúØèþ&‚aIL0'>ÞR¿$&¼¿8pYÉ[â,AÈÞzŸÎ2HÁ.66VÿÿM›6Bxx8þù'Ÿ~ú)<`ĈäÊ•‹ÀÀ@Š+FPPÇOµcñT«Õlܸ‘-ZPµjUú÷ïϪU«¤¯Œ ‘¸XkbŸÙê—¸ØÌoÖȪÞg ‚é{ë}8Ë`»uëÖHTTOŸ>¥\¹rÔ¨Q'''ºuëFß¾}IHH 44///ºtéB§Nðõõ5ꉪT*8@·nÝh×®Û¶mC£ÑðÕW_qôèQÉ¥‚`$’,Iˆ³Ò/I ™Û9«zKœ%YÃ[™í,ƒìnݺÅèÑ£ gÁ‚\½zŽ?Îõë×õßkР¥J•"44€š5k2jÔ(ýÄØÆäܹsôë×áÇ“7o^vîÜIãÆñóó“\*Æâ™%<±úßò,ó$™Õ½%΄,à­gY´`çèèÈ|€OŸ>eΜ9¸¹¹ÑµkW† ÂÕ«Wõß­W¯666 9ÝNzýO._¾Ì½{÷¸uë>>>´hÑ‚ùóç°wï^.\¸ ™U M—bIȼ]g%o‰³!‹z+Á´í v666Œ;–ܹsÇõë× Æ××—|ùòѽ{w:ĉ'øæ›opppÀÉÉÉ('•²Óñ¥K—ˆŒŒ K—.ÄÅÅQªT)š6mÊÒ¥KQ…ðý÷ßsêÔ)é,†&þ…‚]|æí:«xKœ%YØ[ñ¦uh¯ì üçŸâì쌻»;E‹¥sçÎäÉ“¨Q£¶¶¶øûûS¼xqråÊÅŒ:ÝŽZ­&""‚ñãÇ3lØ0\\\(R¤ÎÎÎ*THÊ !!Ù³gsüøq¦N*’ÁÐÄÏ^øüdUo‰³!‹z+δí¥»­[·Òºuk6lˆS¦LÁÜÜœŠ+ÈáÇɕ+Ë–-C¥R1a‚‚‚xþü9 @­V“””d”ѯ*•Š={öЭ[7fΜI@@¹sç`òäÉŒ?žùóç3vìX¼¼¼8vì»wï¦X±b’YÁX5ß”Ÿ3HVõ–8K²°·²Ê»¢E‹’7o^Ôj5[·n寿þ¢~ýútéÒ….]º0iÒ$æÎËãÇ '00É“'S¨P! 9¨1 uŠ¢ Õj9pà `È!<}ú”K—.qðàAJ”(App0‘‘‘¬_¿ž%J0oÞ<< Q„<ž¼ð9ƒdEo‰³!‹{ë¹iÚK V®\9víÚň#øè£xòä ?¦B… Ô©S‡¨¨(bbbèÖ­±±±\¼x‘üùóë·7ä@ U**• 333âââØ°a}ô3fÌà¿ÿþã¿ÿþ#!!aÆ1jÔ(ÆŽ+™SL©æû޵߬ä-q– do™Ø»Wv"ñööfÆŒlݺ † BDD П<‘ðþ»Ì Þg ÂGâ­„œujoLâàà€Y³fÁÛÛŠ¢ {÷î(_¾} “z⺙dƒÆ AƒpöìYU”®®®3f 6lØ€±cÇ¢téÒ2dvìØêÕ«Ë)9‰/Ò½2yX#§xKœ%©·rãPlzêÖ­‹ºuë@¶'ñL?”¡{íØ±mÛ¶ÅðáÃñÛo¿¡V­Z044„³³3LLLðÓO?!66üñGæœÄ¾@¢úÛ>óH{ Â'BàêëZ}CßsÏ28‘‰³bsš·r„³Ž ò¿â¬*i/AøD8µú6N­¾­·-þÙ{Œ¡æÆ}ú`ôèÑX»v-6lØ€íÛ·cРA€-[¶ÀÁÁ÷ïßGHH6nܨ®)B%“󨉳AÈVoåÖY±‚°°0ôïßqqiÉbîÞ½‹bÅŠ¡S§N°¶¶FãÆ±víZìß¿cÆŒA0nÜ8¬[·;wîD5äℜN<ô'OÄçÞ¢ˆ³áôVsVŽnØi4Ì™3ßÿ=RRRP¡BàÔ©SÒ‚ «W¯Ž™3gbéÒ¥¸yó¦úYCCC¹ð!·õ|sù;q– |‚Þ’'voÇË—/aii‰Ë—/cýúõèÙ³'òçÏ+++lݺaaaj´‰‰ Ê”)ƒ‚ ~°•/AÈ„žo.~b'΄OÔ[9ÌYyrZ]¥¤¤ Ož<È›7/QµjUDFFÂØØ¶¶¶8p |ìææ'''lÞ¼qqq’™]r#I”Wþ‹g Â'î-™<ñf"""0cÆ Üºu P @ÀÊ•+‘?~Œ9{÷îÅ´iÓððáCøùùÁÙÙ+V¬Àš5kP²dI¹Ø!·ñòÿĨ{½Ì=§.ÎñVNsVŽzb÷ôéS,X° ðòòBùòåñûï¿c„ 8~ü8Š+;;;¼|ù3gÎÄË—/sss”)SF.4AÈÄC?F%%÷œº8KÄ[9ÍY9ªaW½zu¬Zµ ýúõƒ‘‘"##±hÑ"¬^½5kÖÂÉÉ ·nÝÂ_ý333¹À!7ójW›{N]œ%â­œæ¬cW³fMÌš5 ÿûßÿ4kÖ @Zp²µµ5Ž=ŠæÍ›ãþýû(W®œ\`‚›ÉåyëÄY‚ ÞÊIäÈéXX¾|9lll‰ˆˆ@Þ¼y‘œœ „‡‡‹ Ag ‚ ¤#ON=1;;;øûûÃÇÇ)))ðòò‚™™òåË—vây>Щë¦8gU?@ dÿ!ûÝ—­ÇÛÉ[Ù^Æ“J@¶sÌþì;fp0!CŸLþXl. ²Ë κ &÷!B?À%Óúú¾l=Þ!ÖÍö2TNg¿³feß1ƒï¿¼×E÷2G:+G'PrppÀ¬Y³°{÷nÌ;wïÞUÿ¦(Ê;ï$´Ú\À#ŸqbÓ½ârmIÄY‚ð)z+g9+ÇgÆtppÀ¤I“ˆüùó¿×¾EF£ÁŠ+àéé)×¥ ä‘ö(\÷JÌÕ¥g §歜å¬\‘ò¼N:غu+LLL2ôùô½ÞgÏžaæÌ™¨Y³¦ºX· ’xè?±‹Ïõ%g §䭜å¬\³–.ñç»°aÃ\»vMíõîß0N‰ IDAT¿]ºt••ºwïž¡¡A²¢ç›î•y½ßèèh 6 7F‘"E Ñh=q‡â,AøT¼•³œõÑ.RxöìYüõ×_z k+V §N¶mÛ””¶ˆÄ¯‡&镆]æ­ÏŠ & ** öööcGâ,AÈ­ÞÊYÎúhv5kÖÄüùóQ¾|y„„„àÊ•+¨U«öïß|ùòá‡~H«FD)”8¤MÛÔ½2/ÙÑÑOž^—"àú+b¼ÿÆF®áó_ddFª8K„Œy+g9ë£zb§ä7ß|ƒ5jÀÛÛÀ—_~‰èèhtèÐ^^^ˆŒŒÄï¿ÿŽ«W¯ÂÞÞÖÖÖrµ B6úÿ·ÀÔt¯U€"EŠè½? †††oõºvíš8K„LgÙ²eÿà­œå¬ê‰ÝÇ1eÊŒ5 ~~~xþü9´Z-víÚ…6mÚ`Û¶mèС’’’°mÛ6ËU*ˆ/¿üPµjU½:AZYYém³±±ÁŸþùVû.S¦L®¨q– ä.~ûí7Ô®]û5oå$g} ;’P%K–DïÞ½aooû÷ï£~ýúøòË/ñÛo¿ÁÖÖß~û-æÍ›‡®]»¢M›6022’«T>&&&øöÛoßúý¥K—F·nÝ>в‹³áã÷Ö‡rV®ŠMIIQ§û§¦¦ªÛ;vì,[¶ ÕªUÃøñãQ¸pa899aÛ¶mðòòBjjªRq– ¹î‰ÝêÕ«Õ bسgþúë/T¨Pîîî¨[·.€´õ£¢¢T‘š››ãСC(_¾< 2~Gù_É1SÅ#í%Ÿ«¤½Òó,‡f);v, $$@ZŒÌáÇ#GŽüøue ÷g™zeÅYÂ'ä¬@`uÐ+ÎJø8¥0­* ØÛÛãàÁƒ8sæ œœœàéé‰3gΠJ•*hÚ´)úöí‹]»vaÚ´i(R¤Š)‚¿þú ¡¡¡033Ëбƒƒƒáààt JÕú¸›Þ5>À1›&fëáv–kžíE<©dû1ÇìϾc‡}€   ÔªU+ÇxC£Ñ@QuøS§4oÞ\Ý ‚8K„cwùòeuÈB×ËÕš™™aÿþý¸qãÜÝÝÕÏ”-[C‡•øAÄY‚ HÃ.'ˆˆˆ˜››«Sþu½ÙÔÔT˜™™aïÞ½xøð!ÕϽWzAq– Ò°Ë|lllP¼xqDGG#55é³³ 55K—.ŲeË```€Û·oË·*‚8KiØåDìíí@QhµZU–ÑÑÑØ¹s'Hâøñã¨P¡‚|«‚ ˆ³Aø$ÉñéN,--1wî\xzzÂÈȃ ‚FóÿÛ£óçÏI˜ššÊP† â,A¤a—Óùæ›oðäÉ|ÿý÷8{ö,7n EQ€Í›7ãàÁƒ(Y²¤|›‚ ˆ³A†]NG£ÑÀÇÇvvvøùçŸ1aÂ(P•+WÆ‘#GP­Z5ù&Ag ‚ »Üt²5ÂŽ;’’FIä)‚8K!76ì|øev¬dg¬sÑPƪà˜²÷{ /W9Û‹8f@öÓ5ûŽ%>͹Î*“Ç+óÊXãóRö&‘¾ni™ýþ˜u:ûé#Îz_4AA¤a—ÛHŸOJAœ%‚4ìr± u’|úô)¢¢dàHq– Ұ˽…Õh°qãF¸»»£~ýúøæ›o0wî\$%%É• ‚8KiØåEÁ‘#Gàåå…nݺáèÑ£011Áü'NÈ• ‚8KiØå&®]»†.]º ÿþÈ›7/6oÞŒV­ZÁÅŀij‚ ÎAv¹†»wïâÞ½{¸sçвeKÌš5 °gÏ\¼xQ®AÄY‚ HÃ.'‘>è8=íÛ·‡¢(°³³ƒ›››ºfcLL -Z„Ó§OKXq– ¹–<[t‚Ôh48q₃ƒadd„êÕ«ÃÞÞ¶¶¶Gƒ  Õj‘€‰'âäÉ“7nE‘«Bq– Ò°Ë (ŠEQ°iÓ&xxx I“& CéÒ¥ñå—_bܸqHNNƲeË0bÄØÙÙáܹsعs'*W®,W„ â,A¤a—“z¿OŸ>Å/¿ü‚_~ù~~~ˆŠŠÂÞ½{1uêT`Ò¤I¸sç¶oßsss|öÙg¨X±¢\ ‚ ˆ³A†]NëýæË—ùò僵µ5ÀÔÔ_}õRSS±lÙ2´jÕ UªTAŸ>}ä Aœ%ÂGC®Ÿ<¡Õj_ 644Djj*þþûou[‘"Eиqc\½z!!!òÍ ‚ ÎAv9…ØØØ´h4Pׯ_ÇÝ»w Fƒ)S¦àÀ;v¬ú™Š+ÂÊÊ ‰‰‰òÍ ‚ Îá£#WÅΙ3çϟLj#`nnŽÍ›7ã»ï¾C‰%`nnŽï¿ÿ-[¶ÄO?ý„Ñ£GãêÕ«hܸ1Ξ=‹sçΡN:?øš€aQýmµ=€:r5 Ÿ \ze›4=r¨³ö  ¼â¬Ï<Ò^‚ Î’†]NÀÚÚ¿ÿþ; Ñ­[7Œ;¿ÿþ;Š+†àà`øøø`úôéèÞ½;¬­­áçç‡U«V!%%¨T©RÆþÍ4 B-¹K„O»ÿ{¥' À|©šœç¬¦Ó€2â,Aœõ©8+×4ì´Z-4 >|ggglݺíÚµCJJ ,--ѱcG*TNNNÈŸ??¼½½‘œœŒöíÛãðáÃHIIÁË—/ahh(W¸ â,A>JrEÃN'È 0VVV˜««•„„1kNrÖã+ÜÁ3 :÷×Ë žpÂ3àNý‘ÑU×^<®eð˜Í!÷ ¸þîǼœ±ƒøgÉþlð :+!ãŸg½? IŠrÿ›•+W¢k×®R‚ð¬X±]ºt‘Šg ‚8Kv9—Ga÷îݨX±" ,("¯ö˜qóæM4kÖL튳Aœ% ;AAá}ÐH‚ ‚ HÃNAA† ‚ ‚ ;AAAvBÎ@«Õ~teú§9HY9/‰d¶Õ£Ì¯ÄYâ¬Üä¬OÝ[Ò°“›ñûÉŠ#55MÚewçÎܼyIII9RÜo[~’ê{cbbðèQZÚKEQ²¬EF£ÁŠ+àé陥כîüŸ>}Ѝ¨(¹ q–8+Ç:K¼% »\'Èôkttt¦ÝŒé÷}÷î]<~ü÷îÝËôó700 >:t@íÚµ1`ÀÌš5ëƒÕkzqŸ;wÄãÇÿæþ·¹‘4lÚ´ _|ñj×®Þ½{cÙ²e ©~?™Ýë}öìfΜ‰š5kfiïT£Ñ`ãÆpwwGýúõñÍ7ß`îܹ9âÇMg‰³ÄYâ­×+]È%hµZ’ä† X»vmZXXÐÃÃóæÍcbbb¦ì{ãÆ¬^½:k×®Í5jpÁ‚™^ŽéÓ§³D‰|˜… æŒ3x÷î]z{{³B… êÅZ¶lÙL»Xç͛ǖ-[’$oܸÁÊ•+óÛo¿}¯óý§·U«Vüé§ŸÀÂ… sΜ9$ÉÄÄD®ZµŠ¡¡¡Ù^¯Ó§OWëqË–-,\¸0çΫžW||ü¿Öñ€عsgFEE±|ùòìÕ«—ú¾½{÷òÊ•+ïu~OŸ>%I^ºt‰—/_&Iž;wŽ%K–dçÎÿµ¾ß—Ÿþ™­[·fDDÍÌÌôʶ{÷nž?^nLAœ%ÎÊ1ÎúÔ½%1v¹$>EGDD¢¢¢ ´jÕJõسg.]º”á}çÉ“VVVHLLDÆ Ѹqcøûû–,Y‚³gÏf8dóæÍ  0{÷î…‹‹ ¦M›†¾}ûnß¾•+W""""ËãSþ)#::kÖ¬A×®]1aÂôéÓÉÉÉX³f Ο?ÿZ½…‡‡#,, йsg$&&¢jÕªhÞ¼9æÏŸ’xòä ,X€ààà Å”èbSŒ???Lš4 ¡¡¡¨^½:víÚ…;w¢Gj92:ó쟮 hß¾=EÜÜÜÔ²ÅÄÄ`Ñ¢E8}ú´ÌœÄYâ¬lw–xK&OäJA*Š‚sçÎ! СCh4T«VMïb}þü9-Z„3gÎüçÅš~ß§OŸF``  Zµj˜={6Š/ŽÎ;cîܹÐh4HJJB@@:ô‚yº ãÁƒcðàÁØ¿?âããQ¥JÔªU NNN066VƒŸ}}}‹&Mšd© uçµlÙ2üùçŸÐjµpvvFBBºu놟~úIwLL –,Y‚ .è uÆ hݺ5öíÛ‡§OŸ¢bÅŠ(^¼8ÌÍÍáîîHNNÆÔ©SqæÌÔ­[7CɺEQ`jjŠŽ;âÉ“'˜5k®\¹‚Zµjaï޽زe zõê¥÷™Œ^o'NœÀìÙ³±|ùr\¸p¶¶¶°µµE¹råРAhµZ$$$`âĉ8yò$\\\25ØZg‰³ÄYâ-™<ñÑ¡{d¼nÝ:–-[–£Fâ;wøüùs0€ööö\ºt)I2..Ž#GŽd… þÖû^¿~=ùóÏ?«·þþþÌ—/×®]K’Œ‰‰á?þÈråʽվ_eåÊ•,Y²$Ï;Ǥ¤$uûåË—9dÈV­Z•–––tpp £££¯’’’’¥õûÃ?°lÙ²œ7oïß¿O’œ|ø{ÏÈÓñàÁ6iÒDí…>{öŒfffÌŸ???ÿüsu(fùòåìÔ©“*Îwù{µnRSSéààÀÿýïzÛoÞ¼ISSSnܸQnJAœ%Îú ÎoIÃ.W‘>6!=ÏŸ?§‹‹ ýüüøìÙ3’iÖ_¼xA__ß|,ÿ¶û¾yó&K•*ÅQ£Fémôè}}}ßi*xúžáÚµk9nÜ8®_¿^.?kÖ,º¸¸pèСŒå•+WøÅ_°iÓ¦YÚÛM¿ïôâ‹eûöíùí·ßòÚµkêö'OžÐÃÃãµ–©©©Ü²e ÍÌÌèëë«n¿té’Þû¼¼¼èååõ^eJÿ]­Y³†—/_ftt4---Ù¿ÆÆÆÒÜÜœ­[·æÝ»wÕëäm‰‰‰Ñûwxx8###Õ|S´°°xíGÍÙÙ™«V­’›Ug‰³²ÕYâ-iØåJAênªS§NqÉ’%\±b…Ú›ñ÷÷gëÖ­9hÐ >{öŒ÷ïßçˆ#haa¡—üñMûÖÉáØ±cœ1cçÌ™£ŠaçÎ400à?þÈk×®ñÞ½{5jMMMyëÖ­w¤ŸŸMMMÙ¢E 6mÚ”íÚµã©S§˜’’ÂeË–±J•*455eÕªUY»vmu(!+ò¥ßç¬Y³Ø·o_öîÝ›'Ož¤V«åöíÛùÕW_±m۶ܾ};8@www:::òåË—¯ý°ÄÇÇsÛ¶m´±±Ñ öÕjµzôHïÇ+55•ÎÎÎtrrâ™3gÔs‹‹ãÚµkY¾|yõ±ÿóçÏùðáÃw:ÏçÏŸ«?\dZàsžqâ[µjEÿ, :^¸p!5Ú×qÿþ}¾|ù’®®®jß»w¥K—fõêÕ¹|ùr=9†‡‡3,,L;‰§««+]]]yêÔ)5uÃwß}Ç•+W¾Ó 9Ý1®]»ÆŸþ™ßÿ=/\¸@kkk*Š¢~ïÞ=Ž9’Í›7W“º’i9»Þ…K—.±xñâôññáñãÇÕkåøñã´°° ···^jˆpĈ´³³{-`Yg‰³ÄYYí,ñ–4ìr÷î¦çîÍIDATÝc¹r娦M½í+V¬`hh(Ÿ={ƺuërçÎjOØÝÝ øÏá†PQuêºî†üóÏ?¹eË&''³^½zœ>}ºÚƒëÑ£øá5YäÛpôèQvìØ‘íÛ·W{a_~ù%+T¨ÀGñÞ½{,R¤GŽÉÀÀ@¶lÙ’}úôQÏ'+Dyþüy–(QâµéîÝ»wç¡C‡xÿþ}Z[[s×®]ªÛ·oÏ™3g255U=7]Æ|{{{+VŒƒ â‹/˜@wwwº¹¹ÑÛÛ›}ûö¥………švá]~$ÏŸ?Ï2eʰÿþ2dɴ䙟þ¹š§*ýÛèÑ£Y¿~}Ο?_o?oCLL 7nÌÁƒÿãßuÃi¾¾¾zç>|çaAœ%Îg½¯³Ä[Ò°Ëu„††ò‹/¾ §§§* &PQž:uŠZ­–¶¶¶ìС£££éççÇ6mÚ¼ÕÅš””Ä:°|ùòj€ê¯¿þÊâÅ‹óèÑ£Œ‰‰á×_ÍAƒqß¾}5jÔÇúÿEú›÷ðáÃôòòâW_}Å ÐÁÁA¯¸k×.ÓÎÎŽ5kÖÌÒ™ddZºƒ~ýúñ«¯¾âŸþI’ôðð`ùòåÕYxmÚ´¡µµ5ׯ_ÏF±C‡j™RRRÂ%JÐßߟ¡¡¡{öŒ/^d—.]Ø©S'5Hö]÷½nÝ:Z[[ÓÆÆ†nnnìÒ¥‹úžN:±T©R MzïÂèÑ£illÌ pèС477g£FôDÙ³gOÖ«W!!!ÙR§¯ÊÇÈȈÁÁÁ¯‰ráÂ…êûÒ?®×{LL Eáï¿ÿÎ}ûöÑÞÞž}ûöåÆÍáÇÓÊÊŠeÄYâ,qVNp–xKv9‚   -Z”3gÎ$IþòË/,\¸°º Jpp0»uëÆ-ZücBÌEPPMLL¸téRÆÆÆrË–-TEM3ššJdháj­VËÇÓÑÑ‘óæÍS·ß»wVVVtqqa||<É´x±cÇfÛÍýjpvÏž=9dÈuÈåáÇôõõ¥““·nÝÊÛ·osòäɯÚÎ;— `žˆ É´¼LÕªUcƒ Ôñÿº»»³D‰ôòòÒ»i;tèÀÑ£G¿UoñÌ™3ôööf³fÍÔYP/^¼`•*U¨( ½½½I¦ E¼|ù’ß}÷G­öLßEDëÖ­ã¼yó¸jÕ*¾xñ‚III¬]»6]]]yùòeÆÇÇS«Õ²Gå°aÃhjjúŸÃ éoôÀÀ@öéӇ͚5Ss=íØ±ƒvvvêpÆÍ›79räH–*UŠ¡¡¡ï\Ž!C†°X±blÑ¢MLLئMîÞ½›IIItvvfƒ X¯^=:::²jÕª|ùò%;vìÈAƒez¦/û°aÃhmmMV®\™ ,Pë=!!¿üò 6lHEQ8nܸÝï… èààÀñãÇë-KóêðŒ ˆ³ÄYâ,AvŸéodÝÿ'%%±J•*¬W¯žúèø×_¥››K”(Áúõë¿U²MÝþÒ÷LOž<É>}úÐÝÝû÷ï'™–5½bÅŠ´²²¢+W®üÖÁ³º}kµZž={–åË—ç¡C‡H¦eÿþûïÙ¶m[099™+W®ä˜1côzÖ­[·¦¯¯o–Õñ¢E‹Xºtiž>}ZíÙ+ŠÂ°°0½ú¿wï,X@KKËÿ\t:00uëÖ寿þúZ†ôw]GÄYâ,q– »DºêÑ£GŒ‹‹Ss>¥åÓ§OI¦M ?pà;öŸÍÓç|züø±ÞŒªàà`~÷ÝwtwwçH¦="ß³gO:õŸk4þ›8J•*¥7ÃéöíÛìÚµ«^Jááá8p MLLôòQ½/ºrëþ;lØ0µw¿~ýz+VŒ³gÏÖ{ê ãÁƒlÞ¼¹šYþ¿ÊÛ A><[†1Aœ%Îg Ò°Ë=ß-[¶°Q£F¬^½:½½½Õ™`éEù.ÓÁÓ róæÍ¬U«kÖ¬Iggg5çÒùóçUQ¾k>)’}šdZÞ¢©S§òĉ,T¨çÌ™C’LLLäo¿ýöš ?ÿüó\ÛðŸ8yò$ÝÜÜdñhAœ%Îg Ò°ÒâE .Ì©S§rݺuôöö¦­­-7mÚ¤Šò³Ï>cµjÕôfž½©Ç—¾7·sçNqܸq §››ÔYfçÏŸg¿~ýX·n]µü6,^¼˜–––ìØ±#½½½éääDGGGvêÔ‰¿üò ===¹téRõý×®]c­ZµÔ¤¡éÏùñãÇ™RGÕû÷¦M›øù矫?BŠ¢PQ½YsÑÑÑlÞ¼9W¯^­þ¸\½z•ÿ9¬‘ž›Ý'â,q–8K†Ý'³gÏØ£GŽ;–dZöð2eʰV­Z´µµå† Ô^š££ãk‰&_%44”ÇWeÔ¾}{Ž=šdÚ24,W®­¬¬ÔÄ AAA4h^@í¿áïïÏ|ùòqÍš5êbÒ111\¹r%]]]éèèÈþýû³eË–ìÕ«×®]«nϪ\OsæÌ¡³³3ÿúë/uÛŸþɆ ªÿž:u*óæÍË;vðÁƒ¼sç[´hÁzõêéWRR’:Œ$‚8Kœ%HÃNxkâãã¹qãFÞ¾}›÷ïß§­­-¿ûî;^¹r…mÚ´¡µµµšQý¿ˆ‹‹cýúõ©ÑhèëëËèèhž={–ÇŽãÇimm­Æl8;;³Fܶm›*á·aÛ¶mTE/#»®×ÀµkײE‹ôõõå²eËX«V-6nܘ­[·ÎÒDž×®]cïÞ½Ù®];®\¹’dÚ’;ésMÅÅÅqüøñ422âgŸ}F{{{Ö©S'ÛŒ ‚8Kœ%Τa÷‘>†$%%E~Ðõ ,X@'''>zôˆ$9pà@š™™±~ýú|öìÙÎZJLLä€X¦LöìÙ“ P{´«V­¢«««:„ðã?²@lÚ´)_¼xñÖe8wîmll8eʽŚuåzþü9===Ù¾}{½ݹgELݱoܸÁ^½z±m۶ܺu+·lÙÂÖ­[¿öþ;vŒª³:1§ ˆ³ÄYâ,!· ðÖh4lݺÝ»wG÷îÝqáÂ)R‹öïß .àæÍ›prr‚³³3 šššéç%â,q–8KÈ­(|õnÞÈÅ‹ѤI´mÛÑÑÑØ·oV®\‰öíÛãܹshÔ¨\\\œœŒÓ§Oãĉ¨R¥ÊkûÑjµÐh4xüø14 Š+¦þmæÌ™HNN†‰‰ V­Z…ªU«ÂÝÝ›6m‰'`ee…;w"$$•+WÎP9‚‚‚àããƒV­ZÁËË fff€””LŸ>ûöíÃÎ;³´.SSSa``ˆ‹‹ƒ¢(044DXX&Nœˆ#GŽàÁƒpwwÇÕ«W‘7o^$&&ÂÈÈÐh¤O"â,q– ¼ŠÁ˜1cÆH5¼¹wFRí¹Þ»w)))˜;w.:wî x{{ÃÊÊ nnnhÒ¤ nݺ###Ìž=Ÿ}öÙ?·¦ׯ_‡ ‚ƒƒqóæM8;;âãã1aÂüôÓO°°°Àž={ðôéSÔ­[¶¶¶ˆ‹‹ÃâÅ‹QµjÕ —«lÙ²¨Y³&¦OŸŽøøxT¨PE‹E||<&Ož [[[¸¹¹ei½ê$7jÔ(L:þþþ¨T©Q³fMܺu ¦¦¦øæ›o0mÚ4ôêÕ ;wFŸ>}Ôó«OAœ%Îg Ò°“†Ý¿¢Ñh°}ûvL˜0ÁÁÁˆ‰‰A»ví 6DÞ¼yÑ¿T©RÍ›7G‹-ЪU+”)Sæ_÷ûðáC,X°… ÂÉ“'±cÇ$%%ÁÅÅE¶:t(RSSˆû÷ïcðàÁèØ±#J—.ýÞåJ/Ê—/_¢B… øöÛo‰5kÖ@£Ñèý@d¦ uûܲe ~ýõWtïÞ$1bÄ”)S...°··G`` Nœ8¸¸8Ô¬Y P‡X¤÷+â,q– HÃîoæ'N C‡055ŵk×pøðaTªT vvvª( (€¾}ûÂÞÞ666o%´jÕ {öìAçÎahhˆçÏŸ£_¿~055EHHZ¶l‰  &&—/_F³fÍÔø˜Ì lÙ²¨U«¦OŸŽI“&!&&ÁÁÁÈ›7/RRRÔa‡Ì$½ ×­[OOOøøø mÛ¶(R¤FbÅŠ¡I“&¨^½:öíÛ’puuU?+½^Ag‰³áÍ2ÞÀÕ«W9jÔ(uæ°°0þôÓO´··WLê˜:u*/_¾üÎÇ8}ú47nÌñãÇóÎ;ܽ{7[µjÅÔ®]ááá¸ÿ>ÌÌÌP©R%-Z+V„V«Åرcaaa›L‰™6m?~ŒªU«ÂÜÜ\—ÉîøœÌ$ýL²ÀÀ@\¼x%J”@ÅŠQ³fMܾ}{öìA©R¥`ii ¨]»6lmmѺukõ|d(CÄYâ,Aøo¤a‡ÿ?“L£Ñàúõë¸{÷.bbb`mmúõëc×®]¸zõ*Š/ŽŠ+¢hÑ¢(_¾<ŒŒŒÐ¸qc/^Iþ)bÆ ,W®ëÕ«Gsss>œ÷îÝcxx8ÝÝÝÙ¥KdéÀÉ“'éææÆ‡æêúWÿÓ¦M,^¼8;Æ'Ožpùòåôðð`ÇŽùàÁ†††²_¿~tttäéÓ§å9º ˆ³ÄY‚A>Ɇ.äÚµkÜ´iIòÒ¥K,Y²$gÏžM2m¹5&%44”­ZµbëÖ­yôèÑ,=¿„„„\]¿k×®eŸ>}xãÆ ’äòåËéìì¬÷ž}ûöñË/¿ääÉ“I’GåĉeýDAg‰³Avï.ȳgÏRQΙ3‡$¹wï^º¸¸L 6¶´´ä·ß~«×C¾|ù2ÛµkÇÈÈH¹rÞ@TT+V¬ÈbÅŠÑ××—7oÞäþýûY°`AÞ¹sGï½Ã† c5Þø ‚ Îg »ñIhµZàüùóhР† †¾}ûŠ)‚¼yóâðáÃpvv†««+æÍ›ذaöîÝ ¬^½åÊ•“1ü7`llŒÆ£páÂxñâ¦M›†R¥J¡K—.ðññÁ­[·Ô÷º¸¸ `Á‚xòä‰~àgä¢q– Î>>©†F£Á7ШQ#xzzâ·ß~Sÿ¦[»]»vpqq¿¿¿z³nÞ¼;vì@rr2òåË'WÍ¿P°`A >E‹Ebb""##±páBÔªU eÊ”§§'Ž9‚ÀÀ@Lž<FFFzëN ‚ Îg BÆÉó©8)) FFF°´´Ä;w`ff†ñãÇcüøñøá‡pöìYT­Z([¶,¦OŸŽ½{÷" @ùBBBP¼xq˜šš,,,ðÍ7ß D‰022ÂêÕ«NNN044D‹-P¹re*T‡’%wAœ%΄ÌâS bݺu9}útúùùÑÄÄ„{öì!I.^¼˜­Zµb©R¥èèèHKKKÉ ýغu+E¡››‡ ¢ÎºÛ±c«V­ÊGqË–-lÓ¦ ÈÇóáǼ}û¶:Ë/«³Æ ‚8Kg Ÿ ùY.?1‚‚‚ð¿ÿýaaað÷÷G×®]Õ¿=~ü÷ïßGjj*J—.R¥JIà \ºt nnn¨^½:nß¾ KKK4iÒ;wÆ‚ ðèÑ#LŸ>+V¬À_ý…%Jà×_…™™ýd ‚ ˆ³ÄY‚ð~|² ŠË–-‹úõëãØ±c(_¾<ÌÍÍall (P J•*…Ò¥K£P¡Br•ü ¥J•‚››¶oߘ˜˜ )) ={öDpáÂtêÔ µk×F\\Ñ®];5+» e‚8Kœ%™Ç'ûÄ.}/ØÇÇ­Zµ‚———Ú+Þ3gÎÀÏÏnnnèÝ»7®\¹‚9sæàäɓػw/*W® -c¾Ä§‚8Kœ%Ò°ËRQ8 6„···¤xÏœ–-[bÀ€044D\\Œõ†/t¢Aœ%΄ÌEÖŠEÚ‡­­-V®\‰N:ÁÐÐP®Œ Ö£nað§OŸ¢råÊ(Uª”º¦¥Ú›A ‚8Kœ%Y‚<±KGbb" ( ñžãûï¿Gƒ àëë+Ü‚ Îg B6!éAfµjÕ¤I“ðôéS˜˜˜H…‚8Kœ%Ù„<±² :Aœ%Ò°AAÞé’‚ ‚ HÃNAA† ‚ ‚ ;AAAv‚ ‚ Ò°AA¤a'‚ ‚ HÃNAAxþ,Ãçx·„½IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_match_distribution.pdf000066400000000000000000001200771202542755000232070ustar00rootroot00000000000000%PDF-1.4 %¬Ü «º 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /CreationDate (D:20081112170628-04'00') /Producer (matplotlib pdf backend) /Creator (matplotlib 0.98.1, http://matplotlib.sf.net) >> endobj 3 0 obj << /Count 1 /Kids [ 4 0 R ] /Type /Pages >> endobj 4 0 obj << /Contents 5 0 R /Type /Page /Resources 10 0 R /Parent 3 0 R /MediaBox [ 0 0 1080 720 ] >> endobj 10 0 obj << /Pattern 8 0 R /XObject 9 0 R /Font 6 0 R /ExtGState 7 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> endobj 5 0 obj << /Filter /FlateDecode /Length 11 0 R >> stream xœÕ}KÓ%ÇqÝþþŠ»lÔûá-¬ÍFxA‰a/L/(¤© Mÿ|Ÿ“u¿™é̬¾3æýBv@ P·»*«³2óT¾Òý—÷xÿþ÷‹[¸‡û·÷ÿò§õ—žø×ÿÞþ¿üÅ­öcÔKâŸ÷<ÆÑòãŸ"¯©åH~¡ð§›þAõx{]ɘì<¾žŸ‹ü·ûåOælGy›¿ÝÓìGè}¦Ä?ï?|sÿo÷ïn©ŒcäÞrŸ%OKejãˆ9â¡€Gí*ôø G,uŒÛl Q¿_?™ŸTþêþ:/é£ã%e„”°>‡N=>ÆL=¦éáÐy/±ïÏ9ea[µ çá'³¿ÊK*¾Åöç#b§g ÿÁ¬C“ŒP1Uš­ ™v>2ÿë輦t&ˆ>Gï±EÇ@P㥤cö‰£7r$×ê}PãOæ!—t€ÎpY©Ï;û­ÆKîG›µ0[å÷Ôû ÆŸÌÿB:/é-¡õP`Ÿ%oÏ㥶£¶Ò¬› tª}PãOæ!—t€ÎŽÜBK¹¶îñíy¼ôz”LœXI§Ú5þdþÒyIèœó‡AâwXi–ÌÓpé퀉š¡6`åJ½ çñ'³¿Ê+*¾½×8°®.ƒ¹âP©Æ¡¡ñf˜RÔ.¨áëÙ_Gä5 2#•˜Ûœ=7‡ÊóxMÿÚqÊDCüIï’2ÿ 鼤tbŠ ›³¦´t&KÆ1`ÖÔ–„ÊóÛõø“Ù_Hå ëÂ!Â/R)ËžÇ ¬ó>s¡¤.¸ú¼ jøzöyI¨ÄK€c$öõXö<^°¢g…¾˜].Λp~2û ©¼¤âÛ{ƒq­ÍQcqv[—L]kت´ô.¨ñ'ó¿ŽÎk:@g.G\Ö`9tžÇiÒ´¡Y[Ó]ïƒ2ÿ 鼤tÖrX -u‡ÎóxÜ ú¯ä 6Þ5þdþÒyIèìùž(âÓj¼„zÌYG™½ "k½jüÉü/¤ó’Ð éX'VÒ”€C§‡ºOß úa ҩޯƟÌÿB:/éøöÞc<Æ€=6ãŒÎ~ëqÐÒlsÁ(Î>|:þdþ×ÑyMèÌñˆJ@ù©9_ëûZ³ê¾öÙ>¾ŒÎK:@g À„¼Ü(´],zü|_k^¾¯}¶‹/£ò’ PÙæÑ”^­³;HIÏc¼–€w&žNý~5þdþÒyIè$¬¨°Ò°’äq­7\«÷Así“}|—t|{a¹ÆçhÃÙï'ã_¼OïEçõ:AgêG+5†BvöûÉøßºO¯£ór ³ôg¬ i8_k¾Õï×|ûl_Dç=Üyûï÷†þþþõ-†rÄ\)“c4@Nâš/4\`ª£'ü Åéå÷ØÒA>ŽœG– 1PNÙ×ß±0Ža`¤ekŸOq@A©•^›ã)ÄðqF÷tuªã(£€Â:nàE0Õ`óùÞÞciS”G(µ¶ˆ×F¯=Ž• 3-g`ª 7Lùè9¶#ƒø^ þ'À¶}]×cØHéÑaüWv‘T\°üñD›ä~{(L˜'ÿ‡ÍñÑÓÀIÇ×E ®†ÐJsàùBiÛŸ¼Ìñf”s†bÌCáþŽ1Á©ÜŸ>ÁL8öi œþc"r¨ateÎO5  }VHÅy¤E0âô0 ì`«ÑjïF é€Õ¬ëwƒQpV±v0^jÙÃ(š_jB>WƒQ ({ ÜÎìiÈÝûi´ä!”HÒ!¶ð/BšB(%sàE¶ÌpJ›ÐE<ÝG(˜-áCQè¡Ä)™¯+~CP å`k- -†‡P`PàÕPÉ=9j……Gø¡6,BÁâ€ÞJÉã n߸ˆF(Ðé-A΄,ÇÒA( Äw ÙE(¢vBtIxR8@­á?‰X7… _¼#ô;¥BagdG­pRü<`qù¥ÍŒs†³26ø˜±3íJ¬%=´‡PpZ!Ðåó»3Om‹P"˜¡ËÁöJå . LŽ‘® vgzzå#BIß«ä,û«HJÆVIrƒsU€ 櫱Êm²½ûÂט±;°Éy­?6ú§Ä÷±+âßžâ„uõI§S¡ˆÄôô âhnÀ ̈–!_ÆÑ'ÌqÛµîc•T`Ž’­Ç«àaý¡n±Je‚ÑrB:X¥Ô6Kb1zX\UÂCr/¿&¶?À`šViÎ=ÐCÖo° Žm ÊD2ªtšã³Ói”}¨‚# ÒW ¢ƒT:­‘n*8@ Ûœ!wêF@àÀÊeö ,T& %Lr Îw¤5×rr¼ó:tt…¶Ä­*` jiÞ¿¨P\ÆL™²bUP)àB€ (ÒåÑ0@Ò©FÌâ9ç£ Áˆ¹ñ@ö€J„ö`n ôÙð‘JKa69•>R!Кâ ôJ'õµÉÍ’*oúœBÓ*ƒ"n:Ú„ÇfðZ†ÒxT2ÎìhP!ßö\×¼x2Ðc±Á)<€ŒÝÎÅ— N‹e%·8@…×~ƒSn€ }°sq¦‡SÈ€Ýzæ>æŠí€Úá+lWÙá”Mq>Né8xU|ÐïSž«þZe÷EK¦nÝÁð:…ØsÞŒ=ˆ¨¼‹ûª8žÀ¹mS>2ÌÝuåÀ”‰M¦ßfã©Ç'oTKr‡äÁúƒÀ6yƒSðWHºYw@¥ŠZjËÚv€ ä84ÌÅ PY—«¼)ôJ°ö\§ ØkÀîÕÓ+!P"Âq5{@%q~bP‰Ã°@n@?€¢ç«—tVI¨€ LõD[—¿Ë*teç©k©4¦âAµØ+0 ‹#óæÞ\¨t,\«aÅI  ÁK"ˆ71´MØ$iâÙÏE\ý¨€³ä¯] ‚õAŽ1rkùâ TÈ>P‰÷jêP POàòZ_=þ m5ìGtJ¢(fbòØE}á`aª(—@NÔWÉCÙïã”ÈÛO78¼Jƒ¯Éòœ‚À˺ôpJƒbkùD,N&€à*Ë’wp qÄ}O>N¡Ñ‘N ôÔÏ_ý üäz׃)8Eq‹;˜’!“„7\˜ÆƒÇ½KûK5Q_ïRvÙi. öÔV“ŒÆ9;o DKa6uÜh’ ;U(ô5I£ K,n4 ǃá€B~€.hèØxà¶*·Šž7…Þóö`h×›s‚â`ƒPp ¾,Q¡à8^{ä±A(qÒQÅ›ä ˆ€9ñ^¹ðsJajn³¸Q_8?·DÏÄ FûAPÃÇ( |P^¬Üy RÆÁJ¬ž”=¸ Þg»Q_ >U6ð‹ RèËÁi€žöÒ‹†RŸ>»a_´"FÆ[›D´9(…ŒÕÉŽÉC)ø™QGÁûJÁWOìæ8è%#6‚a`†yzÉ$…paˆÁpÝ)‰îfì-ìï Úh´£—Ý¢^öÂ’]—JJœÁûS ;˜^ 8D+DÙ)tP¶ L1˜6É¥¢S"41¤LHJc‡Sr‚,˜Q®{=œ"˜ó(gÓÃ)t¯³tTóq „5;vG™,# ÄÑ([ ‚µcòå1q*¼¨Ç'š; 2h‚/KÁ*¼ùÉbÃn*4ÕZxe±ãPÙkúó2Ùcç§— ï[Œ1T  vš%p¿Ãû®:R»°¯Ú)¢2ô呸 ÒÔâm¶ŸË³á:‰>œߤãóÄ·énÿðëûWÿ9BÝý{%,8Ä÷ÿë¯o×~vÿõ¿ÞþÓ¯ñF áGA¢˜ßþ†ç¿ú¯ßüðÛŸûÇïþòãZV¡(¦‚z‚¡Þ Õ\’“&Y=ãÑœ·4GÞƒèÆZ]]ˆ¦©}&ÑåDg¦ƒH•a ÊE­žñˆ®[¢s¦Ó€š`Ê„_ø¥Ó+ˆ.R»£ó… ßÑM­žñˆîg¢O„zAÊÐñÙdÊ3Ù¤,²;(Ó«mд8ðkrÿ ½ZõŒ·Úy±Z‡añ”ò˜Ò®6íVËze²GMB½ÕF#9ÔC®èˆë…â>²òÛ¤ç“ôá°xë uË@@ÂÑþzͱW¹ëÍëëóÂ"RÉwÛn½Oz÷¬¹Í‘}ÒÐg=U/VŒÄÓ´vÉc·äçª$šãöYd^¸Ü§òqR¼­±ÜRüpÞŽí‰;/ÇB(Î2øçcjsâô‚ݧ®ÎÜi2¾MÊ‹Æ_U>¾¼=tç³²ÓYe‚si.sæô‚ݧ®LÏã‡IóA›¨0¸¤>¼=ujÁ8¾°~"d#þ|LmY°÷ÔÕ©#K0qåmRh±È„ŒÌÇׂ·ÇNÙ6 ´ÏÁlüù˜úù¡óžº:t\0«å¼MJ¡Û?3Þû±àÏ|ư0X¾pÛÉšß}ÿ÷oÌ÷äaÖØmÀ’Mü.|ø§Ï|’€9Œ½”i÷¹Ï& k°çÂCõýë÷ÿó»qfþò™oàÝ0å‚h Ê?ÿ×o~ø”ð·S§$@:ÞÄCšž:[ùPs¬«Vº“ŒüÑ׳»mO¿ø¬»^á»Û0í ©ºÏŸZ‹άñ¥Š¸\¾ª—Ÿ‡¯çÞÔ‚ý[H½¢Å6LÔ¤šaf%2¨Y.lìË?¾žûH½¢ÅvMT«ÑÃj¬1{·¯Êêåçáë¹_Oê%-¶q¢&U +R¯wâzîw õŠÛ;Q“ªZB¯³‚”ø§ï¦s¢¾žûH½¢Å¶OÔ¤ž‡«Ô6‘¯$ÁÊêåjøzîw õŠÛAQ“z®Œ -)5|9‰P;q¾žûU¤šö…ŠBÝõO-B WFK†P_ÅÔœ‡¯ç~…—$ؾ‰šÂó0=KD0ÈY\pç—«áë¹_Gá ¶c¢¦ð<–Jo! ½førî—xI‚패)<Ç&Y׌֘+›E퀿žýu4^aº"*6=Þ`”±»l÷µ¶­vàzü½ØôŠÛQÄóp䥲”z¥Pœûu^‘`»!j ÏÃÔ a‚p|Ô¸S; Æ¯gWDØ^ˆjj˜Õ-ðšÉhÉ€>¿\ _Ïý2 /I°]5…çᆆ‰°ZÝÝô@TÃ×s¿ŽÂ+lÿCMáy¸¥#g`Aèt1kôœ‡¯ç~=”º¤Å¶@Ô¤ªˆ¬SÌp#¢RgX5@<_Ïý¤^Ñb» jRÏà ÐdÍ@ýU÷EíÄyøzîw õŠÛQ­F öa VÖ¾›6ˆjøzîדzI‹í…¨IUÃê6V¿\ÝÆ>ÙÇ—“zE‹m‡¨I5çÛXûòÓmì“}|9©W´ØžˆšT5Ì,®8˜('ù•úåçáë¹ßÔ+Zl[DMªÖ ¬^®øz_Nê-¶3¢ZÍõð—nÔ;“z¹XÛQ“z9ü·mÔëI½Z¬í¨«†ë—+~²/"õIkDE°NîPkŠ*·C}[•Ú¡GUn‡Ö©zXe ~:|³‰úi•+Èxê^ ã›„=è´†¶¦P¥N¬ÎÄ&Ô o:©#3[ 𪗡Ó °Zeˆ¶ØâMJĦœ×L:-³)ÉÞezÙý™UÝñžäT1!JŽ9–!µt*kÇbXì*šLŽãññŒßœu=øÈ$î4Ãõ»Í刉I(_=†q3ÙQ¦Â¯u»)†u=Ó_€ÓÂÒç\ŽY ‰MØÛÊ;U¹äŒÂÆU•um.”%”*6ÑüŽ£uHéÎÂ*6—#M¹øŒAŠ Ø\ì?x‘8pH5&Ë!Ü“¹ÓZ·Å°Àm‘ý'Gd‹ds9ðÃ\Í$ÿà4®OßÄÖ³"z²©4ì4ùØÖ/‘ñ:ðsœ©å­“ñ± «G€7¢m0"ãgn¬ò0:“C ëDó´J Ô¡*ÃÄZ¨Ü@ý¸Êã0ëÜ@óü)Ã>®rÍãç<ó¼É Ô?ps¿\gH×mרŠï{ACW¯`‰ V^È^’9‡Áu®ªŽÊ€PÁYL^: †¥Îm]-®•1¸ÚWR•U‰ˆXvVWedü¶a¢•ÊgTFc׈Mv•ÊFf Ëœ$Ge0ò˜c¹Hî»Ví`Ž#$ؤ–c¡slé(O«Ìr&ñ±¦Öœ$@ª…É $ø6¯üÖ˜ †¯U磚ûYiP-´Ê ¶YœŠ ñF€´½™@Þc²A DÖ*’zҬؒ$î©ß¨õ^ÎVˆ‘zçnõ÷<³è3µ(ØÏz#KµñÄÛ¶áô*dâM`-ú¥Îz³jiˆü¹›¬ò(i)°æ3»)×ÏzC:U¦À”’7¬Ôk­ãñê«»é @ö†ü¬vp7)åƒÀî‘å7%ÃKéŒ2ðÕÀØl„éԼ‘Ä€ŒôP Jc`n¹i-y¯*Ý^à¸^¤ØšVù`Í‘ÒçòØ}Á\zð>^/-ßµº8|^X0j8©ä8¤,¨ÂÌ!‰WÕê§­¾úŽ1êÂ-D4¹ÑìöOv›HNÙ„'{[U®u¹60•D‘Ø4r‹‰b±›2W=Ù3¦¶›M"_"œµ’³-rõ6,MQ³«&–˜,°ð:-ñù­ ˇ ”v#M–PrË’¬c™êâô ‘mO1.±ëa †‘– ¶‰£0Xy Çh^·ƒNû:!È]…‘"{­–.–¼ƒ1¤…/´‚§0˜xÀžriǵNBáâc îNZõ BTi+ LtÚxgújb*̈ì$Ї£TÜ»é¤qس°D[zô‘µ0#³f.å ”¼R8ƒR3ƒ-F^¥Ï2¶±ÚÌÎvÖ`ªÎk¼Êê¡ÓÖÜÙ@41rÚè‹[d©x|‚´UHÀ:õ(̲H¬ÅfôÅ ß|—Ù |ÛkÜÁ®0Uò¢Ô9ë‹Î>쨌f«g@Ê2" ؾS·DÄKúJŸÁìKèåÕ×å¬2ÀAÌifcöžòqÎN}4À=) œ%ªkÀ€Ê.·>Îè:!Ú¶S7ˆÙXI¡JûR 3?°ouÚãÞ8>Á§lj6l§u1…ƒ¤B\MÅΊãÆqæÎ%y@¦4(a§Éf˹Ëó¬"ÑsZÅì=¤Ù7ê‚OÊãñ¸”›Zåy|¤ÁjU«¢ñY}Üãà­¹Exý ì8+Û À2-WHƒ N=«/]RÎ_¨C> þð!ÿüWÿ?¼ýy[“…”Ø®ÈmÁ(õ²õ†×$K4ÛäM¨”¨ðk.ÕUPØAJ¬yYW§)Aê ^mR!û@ülÒHÔi”€ÑØÂλ[#Pšûêä¥Á*Axgµwœ$)R–ÃÃIL÷˜ìeîÖ' |ópäà„¸ÛRß®(+À®•š (E6Y Ì`öÛ¯„âö… $õÂmR5Pbm¦ÔÁö‚íF ÁìVÙœbóJûÂ@Y§X ‹øóFòæÂ¤,â’D9x0 œ±›+΃Iƒeé–Ö¢$¨TFR©èË5puÀ™ÀïWP‹’ËGr…½Zƒ‡‚ e²ÆÕxDI‘ BqIJ½XcmÍNy¾ši9 ‰бÔÍÑwI@—°¢l',ÁHЧì"8½šÀ¼çfÃÆß]Çòñ,ØÝâ#±'óªïb$|y|Òá4죗d.ÓPÛ¢\)¼_÷ˆÄš'mF[ øÍVg'àB±âB¤ÌÒhZ–¼ S,LÚÓÛ»4¬rëTDyCH“¢ö‰­<ʶ]É ÒSm `þ5¯z㢢3¯ÂüÚ~¤÷z·4tqTÜ,ô#犫™öÐØ¹Ó›W»8GÇUFïÈý†wôÌxŠäu,-ƦÔCÎ…£äØèK¼¸îM â°²ØKŽß$•Œ²Ë>&âùâÕuvìU »ðyw¬;Æ&Y)8W,Â’¨4hÜ[ÇV¾£I3ÖéùØz¿f›åäØáð±Ã}IR¨ÜB"È öKn€›³Eô¸D2“—iÕ¹ ¤Ø£%•J±­Ba÷Éèر' s šÓ¶…"~Š Ç °Ã±(ü"UžHÄ E¶ÖsbJì’\ÝWˆŒ‰XÜŸ]9Š`JÒÁ²NÇ–"—Þ|óŠý±ˆ½tø)º×¯…ê_Ÿø³s :°?Ÿ9:w€l6ÊGb‚HÄIìÜîô&–°$éåu&¦!š)ÀØpÂõ%©ú_W]z'¾ŽžßÌk“›ç<âÍs꩸j ’ Z+¬6œ6Ÿsvö ‘‹a1€½…lÛÝ?b÷بbY+"¢¬e M£ÑVlŽt{a¶BD®–€!Àž¿;w8"Ê=¯„JçUló•+¶²ÊlÞ¡”;q”ˆy‹„Ø3„=_7AuP:¬ú÷føÀl^½œðnâc•×»O:‚dU^—uGâ8‹È`Äpr³å„ÔeFžçNLí„Ô‹ÕQÄtbaÇuˆíÜ9AARB7V©ãà ^Kã¸ÉU¤ÅA9°AfžNk/À p!ÅhX1Ö6u‡a„ôð[oø=ìÙû©y0ˆÞ"œ²™h8;Þ"|Äðð´I4™ë4¤½ŽMÝa›F§¯ôö`Dlå&·lê{áå³®¨(ƒØ²­wËÖØÔÆ9ºÂó&¢ŽBUü‡næÛRwÖŠÍÁÍÜ Ø]~ü{Ùdîv âÓõPP¤Ä Û̶"ÐÈnæÎ`ïÓÀ.÷}ú™;¼‰åýW²‡—3)a·kNAAЛ2}ƒ`ÍUžâçî`óð÷Ùýû3ñ5±9îd(‚—»ƒ8†«lÀqFÔ¤ÕùÕs1(ŽÞïÁ bÔ±p}g¯L“+±pî¼ÊÝi€ØÎùÚˆºw ¥{·P¸*@»±ã=°ƒø6vœ—öàFEÄ(Ù}=‡ï]ËêŒí—Ñ!.vÁã• *9ù1tW ³ý°ÚÎlxïßø1Pf÷â{ãÇßfƒáÞøÁŒÊÌÚ‹^¶¯û ñ ¢ †*Û½§$‘º¢5ßtÝêLÕÒ*l¤³ àïÔæºÕ`GÂ3¶sÀ¶â,Ix¡†Ê!ÙÔbŠ0ÔiÆVîM² œ,ÕÁ03¶ØdAî°Õšè†2{PŽ‚}ÏN`±/iYº_Jh0»XÙDPâ.,j‡ôÁw[pÆ€¡ÀáEœS Aîc%à±P­ž»q%0ö@hÊb‡¦¶ÅäÅ(Yƒ£3?Š…Bƒý«¡¥‚FÇÞŽØ„±Zw:Þ!¹äL#ïžO o'ZÕËM¥yPÙˆ¬÷ž1—™yÚÓ»åoµ<$9Îu±¸}$åá ýæ"!¦)>ŠzX ê€ß¢ä¥yQt|\›}×PaSêÜo^²ïE«ëV5 ô¡óª¯R²^²GZÙ~²û93LÛ÷EÞð×0we g¥žv"^ô·b;.8â5^äeXC‚ª7at<7rK¸Í5¢úúT£7Õñ~éF›>£ÁæiÎÕ8Òô»ì&²ž™ŸÙa*‡Ž§zÍ÷ïÑ`Ó’\L—2󌥹컊ª› úÑL볈~—›ѦәyÆ!zßVTuØüÂ/ý. 6¢M·4óŒCôU³4ÕaóLö5ØtVkZ¥™gœÕ^uJS6íj?»Á¦³Z#8Ì3Îj¯zªþšçsôEí5íj«9óæ»ÚzÕ˜Pu×´{ûùÍ5å>íKè®÷ª/¡î­iü¹­5å>íJè=ô¬)áÇ)Ñ;Ì·ÇìsûjÂ6`>}‰üó1ñÓ–„ÞCO:~ÒUsÈuG"äÓ_ÔT3²–lÍ$%'×ÄO›€z=éúIKM˜¤0µ»õòe5äzLh埖ÆO[€ºO=iúIGMX†01`üÒ–k_ÖQ*úoýRÓcê§GÍ}êY Ð5S« 3¶#¶ÿ²ŽšÞ)oŸqØœ§žœ¶O:j2É(‹y|üyGÍÓÙþ÷îgwÑN“&6ÃM¤fdŠ,µ^K*ÿãï~÷ÍŸ‚µý¶Î¼ÿþûî?ýõûŸÿôÛ?þ雯ï?}óãO¦±M¿‘>À¾ÁÜuénkûiª؆š¦éÍîÜ}žA?YÓQ³e)+óÆôAö¶úéæÄRß@ÒXÔzeÓãNLõÂ4¦$QðÖedûB5~êZ©_ÕqP¨acãUŽ}Õy|}{û–šxÛÄÌ^Êcû–ó¸Ó3T¿Í“è¹:/<F;Í"Ãq?~¾âb&îù[;ÍßüÝ?þ=ô^ùÍÏî?ýù«ßãÿ¾ûûXûWá+ ßßülÓµR½;± MfÑ364^Ý6_óbXoÐÏ92À¡¼5ã|¼zœ_]äÕù³_]ÆQf *}hÔ½:×1œ'H2Aýì 2ÖÈà1ùÅN½<ÔÓeÊãã·ÿ†é† endstream endobj 11 0 obj 13555 endobj 82 0 obj << /Filter /FlateDecode /Length 149 >> stream xœ5K! C÷9…/0R~„pª®¦÷ß6aZ Û/Áƒ‘ŒKL`ì˜cá%TO­>$#ºI9©P7OhL 3lÒ%ðÊtß2ž[¼œVê‚NHäé¬6¢Œf^ÃÑSÎ ›þËÜ$jeF™2ëT·²²`æµ<÷3î¨\脇ʰèN1¢ÜfF~ÿÛôþ{20c endstream endobj 83 0 obj << /Filter /FlateDecode /Length 68 >> stream xœ336S0P°0¦¦† æF– )†\@>ˆ•Ë˳Ì,Ì,# –.C c0mbl¤`fbdY 1 ºÒrø‘ endstream endobj 84 0 obj << /Filter /FlateDecode /Length 52 >> stream xœ363T0P0±T026Q064b…C. ˆ•Ë˳@ªr¸ Ês`ªr¸Òé À endstream endobj 85 0 obj << /Filter /FlateDecode /Length 49 >> stream xœ36´P0P040’F†@–‘‰BŠ!HÄÌå‚ æ€Y@¢8®&‡+ Æè & endstream endobj 86 0 obj << /Filter /FlateDecode /Length 80 >> stream xœEŒ» À0D{¦`~&fŸ(•³ JÜpOº{¸:2SÞa†‡ž ,†Sñ™£`5¸FR죰n_uæzS«õ÷*Ovvq=ÍËô endstream endobj 87 0 obj << /Filter /FlateDecode /Length 90 >> stream xœMAÀ ï¼"OPDÐÿtzÒÿ_«Ô½ÀN‰E‚ô5jK0î¸2kP)˜”—ÀU0\ Úî¢Êþ2IL†Ó{·ƒ²ñqƒÒIûöqz«ýzÝÒ"X endstream endobj 88 0 obj << /Filter /FlateDecode /Length 210 >> stream xœ5PË C1»g ¨džV½uÿkmÐ;aÿBXÈ”y©ÉÎ)éK>:L¶.¿±" ­u%ìÊš ž+ï¡™²±ÑØâ`p&^€7`èi5tႦ.•BÅ%ð™|u{è¾OxjrvCÉ` jºMX´<ŸNâÿ~Ãî-ä¡’óÊžùœíð;³ná'jv"Ñr2Ô³4ÇE> stream xœ366W0P04‘FF ¦@VŠ!HÀÐÈD!— $bå€Y@¢8®Âi„¨± ª-¡²D6 G¢Ë endstream endobj 90 0 obj << /Filter /FlateDecode /Length 147 >> stream xœ=O¹ 1 ë=8Àz,[ó\ê²ÊFR"@ñ‘eGÇ \b“Ž9/i?øiX5Gô„ŠaXàn’ƒ,JWž-^ ‘ÚB]HøÖÞ­Ld¢<¯;p'£>TYz@;DY®IÃXÕV]j°²ÎÂu=̪åÑ'k)PTB½tÿŸ{Úû o/ë endstream endobj 91 0 obj << /Filter /FlateDecode /Length 17 >> stream xœ36´P0€ÃC.”ì endstream endobj 92 0 obj << /Filter /FlateDecode /Length 317 >> stream xœ5RKrC1Û¿SpΘ¿}žt²jî¿­„'+°-@B./YÒK~Ô%Û¥ÃäW÷%±B>íšÌRÅ÷³Ï-¯GÏ·- Q=ø2'"ÔÏÔè:xa—>¯N)x“¯á_x”NƒÀ;2Þ“‘$ÁšK‹MH”=Iü+åõ¤•4t~&+sù{r©j£É X¹Ø¤+)$=‰H²r½7VˆÞW’Çg%&Ý&±M´ÀãÜ•´„™˜BæX€Õt³ºúLXã°„ñ*aÕƒMž5©„f´ŽcdÃx÷ÂL‰…†ÃP›}• ª—ÓÜ #¦GMví²[6ï!D£ù3,”ÁÇ($‡Nc$ Ò°€9½°Š½æ 9Àˆeš, mh%»zŽ…ÀМ³¥aÆ×ž×óþE[{£ endstream endobj 93 0 obj << /Filter /FlateDecode /Length 248 >> stream xœ-Q9’AËçzBsÓï±Ë‘÷ÿé ʃ†C :-qPÆO–+ÞòÈU´áï™ÁwÁ¡ßÊu9HÒTM¨]¼½vfó¤5,ƒë?c 7zqxLÆÙíu5{×kOfP2+qÉÄSuØÈ™ÃO¦Œ í\Ï È¹Öe¤›•ÆŒ„#M!RH¡ê&©3A£«Q£Å~éË#aU#j û\KÛ×sÎ4;«<9¥GWœËÉÅ +ý¼ÍÀET«<p¿ÛCýœìä7ÞÒ¹³Åôø^s²¼0XñæµMµø7/âø=ãëùü¨¥[ endstream endobj 94 0 obj << /Filter /FlateDecode /Length 52 >> stream xœ366W0B]K#c ÛÜÈR!ÅËÈÔÌÌå‚ æpYƒUåp@i˜¢®4ߪ ­ endstream endobj 95 0 obj << /Filter /FlateDecode /Length 163 >> stream xœM;Ã0 CwŸ‚ êãÏyRtjï¿Vr ƒÁÊ(usfà !¼ÞÀ‹-eÇ· ¬Oãø'庉}€ù‹º ’*†³©Æ€F ;tõ’³™{MÃXp¤¤ï¶@'<,›ÙVµQ•°{ì“î"I­Ú£Ó Œg í° °»›O㵦¦_š)雨3˜·ðH›BdˆZÊ÷qêg{ÿ?ë83 endstream endobj 96 0 obj << /Filter /FlateDecode /Length 131 >> stream xœEË ! CïTáò>©‡ÕžØþ¯ë0šABøA";ñ0¬óò6ÐÅðÑ¢Ã7þ6Õ«c•,ºzRV釼òPi0QÄ…YLCaΘÊÈ–2·á¶Mƒ¬l•T­ƒv<¶§e«~©maê,ñ ÂU^¸Ç ?K­w½U¾BS0— endstream endobj 97 0 obj << /Filter /FlateDecode /Length 88 >> stream xœ5Œ» À0D{¦¸ø8€÷‰R‘ýÛ[.¸{Òç9ÀÈ>GèÄ-dCá¦xI9¡>Q4Zo:¶Hs¿¼d3ý3Ü}…íæ€d4Iä!ÑåråY)z>—Ú~ endstream endobj 98 0 obj << /Filter /FlateDecode /Length 160 >> stream xœ=Kà C÷œBGÀøžtºJî¿­ l°„ôÀ}b"£'‚¯Ä‡¥Ã$ðl„{0Ùr„äM†²ƒ$q ¥Â¦c™ïɦuÒJ¬¼Ñ~Ùw4ftŠ-E‡v!ÿçõ"Ü£àë<`1ÈÚJ¥ì™0Ze¦®ò¨èµÓá=D«Ååõ®ðÚG7©(*KêþDw4Øþ‘·ûß™e8$ endstream endobj 99 0 obj << /Filter /FlateDecode /Length 227 >> stream xœEKŽ!C÷œÂG þpžŽ²êÜ;.:Ñl°%(×3¹{ñÈL”n¼d¸;ÌŸá0søJ˜lÄLèN\#”®áTŸŽË޼頉{DΣžYÕÎ jg’æ‚í‚.çŒ7ÎÉ­FåÍô£×¾iw×y‡öHãÞÃT¾Î9ÕλŠi YÕ´¾lÉk?*MÛÎ˱àlVèÞ»Ww'K~¿ò0%?ÝúQ|]7£ëg'W&kÏyèIé_õÊ£Åq)è±íÌ$÷_§S’©S{gïiý§¸ÇûnV9 endstream endobj 100 0 obj << /Filter /FlateDecode /Length 247 >> stream xœMQ»mD1 ëß\àëkyž R]öoCÉ ¡/)§%öÆK á[¾ä‘UC?1ì3,=ÉäÔ?æ¹ÉT¾ª›˜Pbáýh¼t/"+Êße sÎ÷ࣗ`&4`¬oI&Õ¼3d‰¡ŽÃA›TwM,®Í3ÈíV7²:³ lx%âÆDÙÍ`£Œ±•År¨ ’Z`×éQ‹‚+”Ö t¢ÖĺÌà«çöv7C/ò਺x} ëK°Âè¥{,|®BÌôL;wI#½ð¦fR™‘•:=b}·@ÿŸe+øûÉÏóý (\* endstream endobj 101 0 obj << /Filter /FlateDecode /Length 87 >> stream xœ5M¹À0뙂Ì£Øì“Kåìßì¸A:} ”kä‚áo!ø¦/„uO*»%:l¡†³ ’‰áW6xU®Šöµ’‰ìl¦1Ø eúÑηIÏ¥Þ˜ endstream endobj 102 0 obj << /Filter /FlateDecode /Length 45 >> stream xœ32·P0P°4†& æf )†\–V.L,ÌÑ–p "žŸ} µ endstream endobj 103 0 obj << /Filter /FlateDecode /Length 304 >> stream xœ=’;’Ã0 C{‚ÈŒø“äód'•÷þí>2ÉV€I‰(/u™²¦< i& ÿÑááb;åwØžÍÌÀµD/Ë)Ï¡+ÄÜEù²™º²:ŪÃ0[ô¨œ‹†M“šç*K· žÃµ‰ç–}Ä74¨uK ÝÕhY Ípuÿ;½GÙw5<›TêÔQæù!O¢‡éJâ|<(!\{0FäSÑ@޳\­ò^Bö·²ÂAjIç³'<ØuzO.nÍd¹TøNQìíÐ3¾ìJ =¶áXî};š±é›8ì~ïFÖÊŒ®h!~ÈW'ë%`ÜS&EdN¶Xn‹Õžî¡(¦s†s êÙŠ†RæbW« ;o,/Ù,È”Ì 2F§Mž8xÈ~šôy•çxýlós; endstream endobj 104 0 obj << /Filter /FlateDecode /Length 230 >> stream xœ5QInÃ0 ¼ëóâ.¿ÇAOíÿ¯Ò ``hKœÍx‰ÁÏAäÆ[ÖŒšø›É]ñ»< ·‚'Q^†{Ù .o—ý8Ì|ð^Z9“O2 ÙôðDÈ`—@èÀìÔa›i'ú†„ÏŽH5YN_KÐK«(OÙ~§ J´­êÏí³.´íkO8Ùí©'•O ž[²—WLcôDå.ÅôAª³…ž„ò¢|²ù¨!]¢œ'£@;°ç¶Ÿ‰W… uuŸ¶¡)Oÿ645I"ä%œÙÒ¸[øþž{ýü¦TSŸ endstream endobj 105 0 obj << /Filter /FlateDecode /Length 237 >> stream xœEQIr! »÷+ô©Â+ðžNÍ©óÿk,3IN`k1i-x‰!ÖÀÌ/¹|Mè4|72Ûð:ÙpO¸.Ü—Ë‚g–ÀWT—w½/]ÙH}w‡ª~fd{³HÍ••:õB4&Ø!=#2ÉV,sƒ¤)­Rå¾([€.ê•¶N;’ #áo”#áéJvMl«Ô: ¡˶.ˆ:™$¢vaqjñ–!"Ÿuc5Çø‹N"vÇãþ¬0ëQ$’ÒgÝq&£M–]9¹yª°V*9ˆ>^ÑÆ„êtªc¼×¶ôià¹ö_á>}ÿú¹Þ?Æî\" endstream endobj 106 0 obj << /Filter /FlateDecode /Length 245 >> stream xœEP»C1 ë=`ý,{žwH•Û¿=JFp…!Z?’Z˜ˆÀK ±”oâGFA= ¿…â3ÄÏ…A΄¤@œõ™x†ÚFnèvpμÃ3Œ9ÅZp¦Ó™ö\Øäœ'Îm”ñŒBºITqTŸqLñª²Ï×¥µl³Ó‘ì!„KI%&—~S*ÿ´)[*èÚE°Hä“M4á,?C’bÌ ”Q÷0µŽôq²‘GuÐÉÙœ9-™Ùî§íL|X&™Qå)ç2>'©ó\N}î³Ñ䢥UûœýÞ‘–ò"µÛ¡ÕéW%Q™Õ§¸<ÿŒŸñþŽ Y> endstream endobj 107 0 obj << /Filter /FlateDecode /Length 227 >> stream xœ5O;²! ë9….Œm`ϳ™T/÷oŸd² þHòôDG&^æÈ¬Ùñ¶ˆøSñ¯=íÄê=¸‡åâB˜a$œ5븛§ãÅ¿]å3ÖÁ» ¾b–¶0“õ•Å™ËvÁX'qN²c×Dlc]ëéÖL(!í0%È)}²£Œ9:Nä‰çbªÅ.¿ïa}Á¦1¢ÂWOÐdP–=ï& ôßÕßI4‹^2‘`a$æÎYNøÕkGÇQ‹"1'¤ä2Òœ®b ¡ Å:; *—êsÊÝ>ÿh][M endstream endobj 108 0 obj << /Filter /FlateDecode /Length 338 >> stream xœERKrÅ0Ûç\ 3ægãó¼NWéý·•p:Ý<ô  2=eH¦Ü6–d„äò¥WdˆÕŸFŽDÄß)¡À®ò¹¼–Ä\Èn‰Jñ¡?—¥72ͮЪ·G§6‹F5+#ç C„zVèÌîQÛdÃëv!é:S‡p,ÿC²”uÊ)”mAߨ#èo<ܳær³¹Lnõ¿î[ ž×:[±m@ –sÞ`Äà ÚÄÜÚÞ)(UºŠI­ò\';P¶Ðªt¼7€9`Ã’­×hoÃ>ô¢FÅö ¨, þÎÙfÁÞ1ÉH°'æN=q:Å‘pI8Æ@Š­âºñØâ/®ˆšð u:eM¼ÂžÚâÇB“ïRqð"n]EµlOç ´?*’3b¤ÄÑ ‘ԒΗõÐû¸‰¯Äæž¾Ý?Â9Ÿëû¸ƒà endstream endobj 109 0 obj << /Filter /FlateDecode /Length 133 >> stream xœMAÃ0ï~…ž€±óžtzJþ-6î팀‘†03× endstream endobj 110 0 obj << /Filter /FlateDecode /Length 68 >> stream xœ32·P0P°4†& æf )†\@¾©‰¹B.H Äʳ €´%œ‚ˆ[B4A”‚X¥f&fI8"—É´å endstream endobj 111 0 obj << /Filter /FlateDecode /Length 163 >> stream xœE¹u1 CsUx€:ê?G³ý§ i¼Þ@úx„xˆ= Ãr]Å…Ñ ?Þ¶Ì4¼Ž2ÜõeÆø¨±@NÐ"W£IõíŠ3TéáÕb®£¢\/:"Ì’ã«@#|:²ÇC[Û™~:¯ì!ïÿ**çna.ªî@ùRñÔÙQêš¡*+kjÚ¿»"”¶}\Neœº{´Âg+Wû}¨ç:€ endstream endobj 112 0 obj << /Filter /FlateDecode /Length 126 >> stream xœ=ŽA!ツXeAÞ3[sšýÿuAÖ9¥+˜˜®‹U(ÕÞ”°˜T}PŒi²Ò·„ôlªvÀ“ÐÈvv¼ ¢ RþwJêUÞožD 8ÊnI2¢tN×\þØ}Rk‹¹kg—å蜔 …%/äíþî . endstream endobj 113 0 obj << /Filter /FlateDecode /Length 255 >> stream xœE‘K’ D÷ž‚#€üä<™šUrÿí4˜L6v—¨ý„J#¦,çy0ýÈòÍd¶éµ«Š"Ìä*ôXÕ)â̵Dµõ±2rÜéƒâ 箜T²¸QÆ:ª:8¦çÊúªîü¸,ʾ#‡2lÖ96på¶aŒ£ÍVw‡ûD§“©£âvløƒ“ƾÊÕ¸N6ûê%‚~¡ LòM u†@ãæ)zr öñq»ó@°·¼ ¤läÈŒA»N®qëüÞÿ:ÃçÚ WŽwñ;Lk»ã/1ÉŠ¹€EîÔó=­ë ïÉ™crÓ}Cç\°ËÝA¦Ïüë÷PŠfˆ endstream endobj 114 0 obj << /Filter /FlateDecode /Length 71 >> stream xœ³0¶P0P040S047R076R015QH1ä ˜¹\0Á0˨,,‹`AdA,#SS¨ ¢Ã®Á‚Ȧëç2 endstream endobj 115 0 obj << /Filter /FlateDecode /Length 214 >> stream xœ=P»C1ë= äÎ|í7ÏË¥Ëþm$œ¤B6B”šLÉ”‡:Ê’¬)O>Kb‡¼‡ånd6%*E/“°%÷Ð ñ}‰æ÷ÝÕ–³C4—h9~ 3*ªÓK6šp*º ÜÃ3ú mtV‡±[ Ф`×¶ rÇ Á™‹" JMÿ­r÷RÜï=o¢ˆ”tð®ùåôËÏ-¼N=ŽDº½ùŠkq¦: DpFjòŠtaŲÈC¤Õ5=kµ®Þzù7hGt€ì‰ã4¥CÿÖ¸Ç뇊Rô endstream endobj 116 0 obj << /Filter /FlateDecode /Length 161 >> stream xœEKà C÷œBGðG|žtºJï¿­!M³€§±@w'©µÑ/mKº >[ ÎÆxè6n5äu€V¤ãh”R}¹Åi•tñh6s+ ­fz”£ :Þí¢är¦îÎùGpõ_õG±îœÍÄÀdå„fõ)î|›Q]ÝdÒcnÖköª°´¬¥å„ÛÎ]3 î©íý©s:„ endstream endobj 117 0 obj << /Filter /FlateDecode /Length 236 >> stream xœMPKnD! ÛsŠ\àI$!ÎCÕUçþÛ±ÃTí*†Hé²UëSbu‰ìò¥M—Ê2y¨åOÛÿQ nÿÐÈA´·ŒbæÖÅÂ$<å4#'×,;Of…ÆÄã.`Ÿ5[•Í9m:7@º·ª³ÞdP "êBÍ“.œ§Ñ—ˆ9ž¨`Jw&µ\>Õ¡qZ½ ¹c‹“oÄY¡ÀaÐLqÖ_֨ɲYÈ I†!Î}£{” ¨Êy+“¡õ†Õ •¹…¢©å’üÚ0¶Œué JªÁß*§}¿$]S endstream endobj 118 0 obj << /Filter /FlateDecode /Length 332 >> stream xœ-R9Ž$1 Ëý ~`ëòñžLÔûÿtIUªlË<ärÃD%~,ÛQkâ×Ff Âð¯«Ì…ïHÛÈ:ˆkÈE\É–ÂgD,ä1Ä<Ä‚ïÛøù¬ÌɳÆ/Ù÷Vì© ËBÆ‹3´Ã*ŽÃ*ȱ`ë"ª{xS¤Ã©$Øã‹ÿ>Ås‚¾#hÀ/ùç«#x¾¤EÚ=fÛ´[–iG•–ƒíiÎËäKë,WÇãù ÙÞ;BjW€¢0wÆy.Ž2meDkagƒ¤ÆÅöæØ¥]èÆe¤8ù™*ÂJšÌl¢ þÈé!§2¦®éJ'·QwêÉ\³¹¼I2[÷EŠÍÎë™õw˜2«Í;y–¥NEø{¶ ãêÙk™…F·9Á+%|6vzrò½šYÉ©HHÓº N£ÈKØ–øšŠšÒÔËðß—÷ÿ3â| endstream endobj 119 0 obj << /Filter /FlateDecode /Length 157 >> stream xœE¹C1DsUA °ê±ÇÑwÿ©ùJ´o-‡¯%Sª'"¦Ü×hô0yŸM%V,Ø&¶“rAJ1˜xN1«£·¡™‡Ô븨ª¸uf•ÓiËÊÅóhW3“=Â5ê'ðMèøŸ<´©è[ ¯ ”}@µ8IP1}¯b£œv"œà>G™)#qbn ì÷f¾W¸ÆãÝ7y endstream endobj 120 0 obj << /Filter /FlateDecode /Length 320 >> stream xœ5Q»qÅ0 ë5ðø•4s¯ÊÛ¿ @;a@ª¼dJ¹\ê’U²ÂäG‡êMù>`¦üõãèÙ!ºSÖ–{ËÄ<¥ŽXM–{¸/ M‰¹…ó÷è+£0ºÅß?@³$0ipðSk­Zb‰<,X³+Ì­)TÈU|;6¹rq³Ð§š·Ü‚ðeˆdGj±¯Ëe)ò»õ „æˆO‰…çf"ñ'b{öÙbWW/ªÖI‡RÒln04E²êƒØWÇ5?OGÙÁÉA¿ŠÁø68™/Iy_¡þÏÙȱ’C$ò}µÀˆ#l€¡Oí#e 4E÷î™R>&UŠïF!}ªW2¼‘Ùj†Íÿ]Ù* UYŸFp&ƒI8ód£ ÓRµÓ¿ûÜãóccz€ endstream endobj 121 0 obj << /Filter /FlateDecode /Length 338 >> stream xœ5R9®Ý@ ë} ] €vÍœç©~î߆”_ C´VŠšŽ•iùe!U-“.¿íIm‰ò÷É ‰’W%Ú¥ ‘Pù<…T¿g˼¾Öœ K• ““’Ç% þ —Þ.çck?#w=z`UŒ„Ë£kY:»Ãšü<¦?âr®X·cH ºqÚïCóyÈ f˜–Š ]V‰~Añ G­}÷XTX ÑíIpŒP‘€vÚH 9³»¨/úY”˜ tí‹"î¢ÀIÌœb]:ú>t,¨¿6ã˯ŽJúH+kLÚw£IiÌ"“®—Eo7o}=¸@ó.Ê^Í ASÖ(i|Ъc(še…wš 4LJÌ<‡3”ô}(~_K&º(‘? ¡_£ŒœosÑŸ¶ŠñÙa¯`…ÒÅšä}@*z`úÿ×øyþü¶€T endstream endobj 122 0 obj << /Filter /FlateDecode /Length 88 >> stream xœ5Œ»À0C{OÁ‹÷É¥JöoƒíЀ¤w÷‚ƒ:Aò¸)œ.nÙWz“ž&±ôLCíß`EÕ‹Z-_ncÐb*¾?ú$ –uò^8ôÞÅ{ endstream endobj 123 0 obj << /Filter /FlateDecode /Length 72 >> stream xœ5Œ±À0{¦Ð6X`ï“KEöoC|N/—¢ÁZ º‚#pu©üÑ#]¹)E—c΂áqª_H1F=¨#ãÞÇO¹_p} endstream endobj 124 0 obj << /Filter /FlateDecode /Length 392 >> stream xœ=RKn1ÛÏ)¸@¥ðMrž©ÞîÝ[›ÌTª /¶1”— ©%?ê’ˆ3L~õr]âQò½ljgæ!î.6¦øXr_º†ØrÑšb±OÉ/È´TX¡VÝ£Cñ…(-àá¾ÿñ¨Á×°…rÃ{d`JÔn@ÆCÑHYAaû‘è¤P¯láï( WÔ¬…¡tbˆ –)¾« ‰˜¨Ù ‡„•’ªÒñŒ¤ð[Á]‰aP[[ÛxfÐÙÞ‘3íÑqYk?=é£Q2µQMg|ñÝ2RóÑè¤ÒÈÝÊCgÏB'`$æI˜çp#ážÛA 1ôq¯–Ol÷˜)V‘ð;ʽýÞ’Ï{à,Œ\ÛìL'ðÑi§­¾býƒ?lK›\Ç+‡E¨¼(~×Aq|XÅ÷d£Dw´Ö#Õh% ÂÎí0òxÆyÙÞ´æôDh£DÔŽ=(²Å地§ü¬Í±ž&{o´”Į̀„Ôvz¨¶ÏcÔwžûúü.¡ endstream endobj 125 0 obj << /Filter /FlateDecode /Subtype /Form /Length 37 /Type /XObject /BBox [ -184 -236 1288 929 ] >> stream xœã240S065UÈå276³rÀ,#s# $‹`AdÓ_ endstream endobj 80 0 obj << /FontMatrix [ 0.001 0 0 0.001 0 0 ] /Name /BitstreamVeraSans-Roman /FontBBox [ -184 -236 1288 929 ] /Encoding << /Differences [ 32 /space 40 /parenleft /parenright 45 /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon 61 /equal 65 /A 68 /D 82 /R 97 /a /b /c /d /e /f /g /h /i /j 108 /l /m /n /o /p 114 /r /s /t /u /v /w /x ] /Type /Encoding >> /BaseFont /BitstreamVeraSans-Roman /Type /Font /CharProcs 81 0 R /Subtype /Type3 /FontDescriptor 79 0 R /Widths 78 0 R /LastChar 255 /FirstChar 0 >> endobj 79 0 obj << /FontName /BitstreamVeraSans-Roman /Descent -236 /FontBBox [ -184 -236 1288 929 ] /CapHeight 730 /Ascent 929 /MaxWidth 1342 /StemV 0 /Flags 32 /XHeight 547 /ItalicAngle 0 /Type /FontDescriptor >> endobj 78 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 636 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 636 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] endobj 81 0 obj << /parenright 82 0 R /seven 83 0 R /hyphen 84 0 R /period 85 0 R /one 86 0 R /four 87 0 R /zero 88 0 R /colon 89 0 R /parenleft 90 0 R /space 91 0 R /six 92 0 R /two 93 0 R /equal 114 0 R /slash 94 0 R /nine 120 0 R /three 121 0 R /eight 124 0 R /A 97 0 R /D 98 0 R /R 99 0 R /five 100 0 R /a 103 0 R /c 104 0 R /b 105 0 R /e 106 0 R /d 107 0 R /g 108 0 R /f 109 0 R /i 110 0 R /h 111 0 R /j 112 0 R /m 113 0 R /l 102 0 R /o 115 0 R /n 116 0 R /p 117 0 R /s 118 0 R /r 119 0 R /u 95 0 R /t 96 0 R /w 122 0 R /v 123 0 R /x 101 0 R >> endobj 6 0 obj << /F1 80 0 R >> endobj 7 0 obj << >> endobj 8 0 obj << >> endobj 9 0 obj << /M11 23 0 R /Vera-minus 125 0 R /M40 52 0 R /M30 42 0 R /M43 55 0 R /M49 61 0 R /M50 62 0 R /M16 28 0 R /M12 24 0 R /M21 33 0 R /M19 31 0 R /M32 44 0 R /M2 14 0 R /M33 45 0 R /M45 57 0 R /M22 34 0 R /M8 20 0 R /M23 35 0 R /M64 76 0 R /M3 15 0 R /M9 21 0 R /M60 72 0 R /M14 26 0 R /M51 63 0 R /M36 48 0 R /M54 66 0 R /M17 29 0 R /M7 19 0 R /M31 43 0 R /M56 68 0 R /M18 30 0 R /M10 22 0 R /M55 67 0 R /M5 17 0 R /M39 51 0 R /M46 58 0 R /M1 13 0 R /M53 65 0 R /M63 75 0 R /M26 38 0 R /M20 32 0 R /M6 18 0 R /M57 69 0 R /M65 77 0 R /M27 39 0 R /M41 53 0 R /M48 60 0 R /M13 25 0 R /M58 70 0 R /M59 71 0 R /M34 46 0 R /M52 64 0 R /M29 41 0 R /M35 47 0 R /M44 56 0 R /M24 36 0 R /M4 16 0 R /M61 73 0 R /M15 27 0 R /M0 12 0 R /M37 49 0 R /M28 40 0 R /M47 59 0 R /M38 50 0 R /M25 37 0 R /M42 54 0 R /M62 74 0 R >> endobj 62 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 51 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 23 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 38 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 44 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3P0VÈUÐ5¡(edäp9qSÉ endstream endobj 55 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 26 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 17 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 50 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 75 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 42 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3P0VÈUÐ5¡(edäp9qSÉ endstream endobj 40 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3P0VÈUÐ5¡(edäp9qSÉ endstream endobj 33 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 59 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 60 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 52 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 36 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 22 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 16 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 49 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3PÐ5VÈÆ 9 ÒÄÍárâSÅ endstream endobj 18 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 43 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3PÐ5VÈÆ 9 ÒÄÍárâSÅ endstream endobj 64 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 13 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 45 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3PÐ5VÈÆ 9 ÒÄÍárâSÅ endstream endobj 37 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 72 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 66 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 74 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 57 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 73 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 20 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 34 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 46 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3P0VÈUÐ5¡(edäp9qSÉ endstream endobj 67 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 63 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 53 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 15 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 70 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 12 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 28 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 54 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 47 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3PÐ5VÈÆ 9 ÒÄÍárâSÅ endstream endobj 71 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 19 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 27 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 39 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 61 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 76 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 56 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 58 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 41 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3PÐ5VÈÆ 9 ÒÄÍárâSÅ endstream endobj 32 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 14 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 65 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 77 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 68 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 31 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 35 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 69 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 30 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 25 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 48 0 obj << /Filter /FlateDecode /Subtype /Form /Length 28 /Type /XObject /BBox [ -3.25 -3.25 3.25 3.25 ] >> stream xœ3P0VÈUÐ5¡(edäp9qSÉ endstream endobj 29 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 21 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 24 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj xref 0 126 0000000000 65535 n 0000000016 00000 n 0000000065 00000 n 0000000216 00000 n 0000000275 00000 n 0000000512 00000 n 0000027253 00000 n 0000027285 00000 n 0000027306 00000 n 0000027327 00000 n 0000000383 00000 n 0000014142 00000 n 0000034227 00000 n 0000031739 00000 n 0000036404 00000 n 0000033918 00000 n 0000030953 00000 n 0000029239 00000 n 0000031269 00000 n 0000035006 00000 n 0000032983 00000 n 0000038113 00000 n 0000030799 00000 n 0000028459 00000 n 0000038268 00000 n 0000037641 00000 n 0000029085 00000 n 0000035161 00000 n 0000034381 00000 n 0000037958 00000 n 0000037487 00000 n 0000037022 00000 n 0000036250 00000 n 0000030027 00000 n 0000033137 00000 n 0000037177 00000 n 0000030645 00000 n 0000032056 00000 n 0000028614 00000 n 0000035316 00000 n 0000029865 00000 n 0000036088 00000 n 0000029703 00000 n 0000031423 00000 n 0000028768 00000 n 0000031894 00000 n 0000033291 00000 n 0000034689 00000 n 0000037796 00000 n 0000031107 00000 n 0000029394 00000 n 0000028304 00000 n 0000030491 00000 n 0000033763 00000 n 0000034535 00000 n 0000028930 00000 n 0000035780 00000 n 0000032673 00000 n 0000035934 00000 n 0000030182 00000 n 0000030337 00000 n 0000035471 00000 n 0000028150 00000 n 0000033608 00000 n 0000031585 00000 n 0000036558 00000 n 0000032365 00000 n 0000033453 00000 n 0000036868 00000 n 0000037332 00000 n 0000034073 00000 n 0000034851 00000 n 0000032211 00000 n 0000032828 00000 n 0000032519 00000 n 0000029548 00000 n 0000035626 00000 n 0000036713 00000 n 0000025650 00000 n 0000025435 00000 n 0000024884 00000 n 0000026703 00000 n 0000014164 00000 n 0000014386 00000 n 0000014526 00000 n 0000014650 00000 n 0000014771 00000 n 0000014923 00000 n 0000015085 00000 n 0000015368 00000 n 0000015508 00000 n 0000015728 00000 n 0000015817 00000 n 0000016207 00000 n 0000016528 00000 n 0000016652 00000 n 0000016888 00000 n 0000017092 00000 n 0000017252 00000 n 0000017485 00000 n 0000017785 00000 n 0000018106 00000 n 0000018266 00000 n 0000018384 00000 n 0000018762 00000 n 0000019066 00000 n 0000019377 00000 n 0000019696 00000 n 0000019997 00000 n 0000020409 00000 n 0000020616 00000 n 0000020757 00000 n 0000020994 00000 n 0000021194 00000 n 0000021523 00000 n 0000021667 00000 n 0000021955 00000 n 0000022190 00000 n 0000022500 00000 n 0000022906 00000 n 0000023137 00000 n 0000023531 00000 n 0000023943 00000 n 0000024104 00000 n 0000024249 00000 n 0000024715 00000 n trailer << /Info 2 0 R /Root 1 0 R /Size 126 >> startxref 38422 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_match_distribution.png000066400000000000000000001023531202542755000232170ustar00rootroot00000000000000‰PNG  IHDRôMö7sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ %pÀˆ IDATxÚìÝwxTeÚÇñï”L2©¤'¤7BMZUPEЕ""®•ÅŠ`ÙUY`U`m/ŠJMEz‡„–Cé½'“Lyÿ@G#‚²’äþ\p%sæ9çÌüÎÉÜóœª0™L&„BÑ¢)%!„B ºB!¤  !„B ºB!¤  !„RÐ…B!]!„RÐ…¸!Ö®]Kll,™™™W=î§Ÿ~ú—½æªªªK†—••±víZÖ®]KVVÖÿüZu:§OŸ¾âû®ªª"&&æ’ç’’’.¶gÏ222øòË/Ñét—®^¯çøñãlݺ•œœYA…‚.ÄóÙgŸÊŒ3¨®®¦  € 6pêÔ)ÒÒÒHMMåÛo¿¥±±€#GŽpàÀ’““ÈÍÍeÆ ›‹ÚîÝ»III!##ƒ-[¶ðËë;=zÔ<­„„ó°ï¿ÿž¦¦&Ž;Fuu5œ8q½^϶mÛHLL 55Nǯ¯•‘‘AFF]»vÅÑѱÙsGeûöí¤¦¦ÐÔÔÄ–-[8zô(ÅÅÅ|ýõ×;vŒÄÄDæÍ›Çž={šMcß¾};vŒääd4 AAA455±yóf¶nÝJAA/¿ü2k×®¥¬¬Œääd¾ýö[¼¼¼°··çäÉ“¤¤¤°mÛ6ŒF#.\ ¨¨ÈœÙ‰'˜3g;vìÀ××[[[šššøþûïͯóÔ©S¤¦¦²yófôz}³ùFY¡…t!Ú*“É„^¯ÇÂÂ¥RIII ~~~|ñÅœ={–M›6ñý÷ßc2™xï½÷ˆ‹‹#66–††Ξ=KMM Ï=÷ÞÞÞ̘1½^ÏóÏ?••o¾ù&{÷î%''§Yoöܹs|ÿý÷”——³jÕ*víÚņ P©T¼ð 8::òòË/óâ‹/âääÄ+¯¼‚J¥"11‘-[¶˜§³jÕ*²³³Í­¬¬ÈÍÍåÃ?$==ý’ž³­­- ,àܹs¼ð hµZvíÚž}û˜={6 \]]qww'00Ð<þš5k8zô(™™™TTTP]]ͦM›Xºt)uuuØØØ`ee…³³3ݺu#//×^{ :ĹsçHLL¤¢¢‚ùóçoþ‚ñÙgŸáêꊫ«+ÁÁÁìÞ½›¼¼<^xáÔj5ëׯg×®]¬[·Ž={öP[[ËG}ÔlþƒAVhѪ©%!.¯¦¦†ÔÔTÜÝÝÑjµlݺ•ÊÊJòòòÌEñž{îÁßߟ­[·baaÁý÷ßODDk×®åìÙ³ôíÛ—^½zÑ¡C éܹ3ýúõcëÖ­ÜyçÔÖÖkžç¨Q£˜9s&Œ?ž]»vñàƒÒ¡CV¬X¿¿?NNNx{{“””„µµ5ƒ///ót&NœØì½tëÖÅ‹£Óé˜4i«W¯6?×½{wúõëGaa!ÇŽãÈ‘#888ÐÔÔDMM ÷Þ{/k×®ÅÓÓ“ &àâ₯¯¯yü¸¸8^{í5Ùºuk³÷òÉ'Ÿ`2™èÞ½;ŽŽŽtêÔ‰Ó§O3bÄÂÃÃÍ[2ƃƒ?ü0æ­ &“ '''œÍï ´´”áÇãççgþR4vìX¬­­yýõ×™6mZ³ù[XXÈJ-¤‡.D[äååÅĉ6l111œ9s†‘#G¢ÑhÌÅF¡P˜Û÷ëו+W²e˲³³ !>>ž¸¸8Ξ=‹‡‡‡¹ý/Çû%Fƒ½½=;vì oß¾DEE±|ùr6oÞŒ»»;ñññxzz¢×ëIMM¥wïÞôêÕ‹#Fеk×f½îòòróã””ˆ‰‰!$$¤Ù<“““Ù·o7n¤gÏžôîÝ›¾}û2bÄ:v숅…cÇŽeïÞ½X[[“Ýl?ü€ø¿ÿû?Ö®]K]]yxEE÷Üs deeÑØØÈ‰'0™L(•—~ü¬\¹’+VеkWüýýÙ±c›6m¢´´KKKòóóÉÈÈ0·wsscóæÍ,_¾œ\2½_Ï_ˆÖLq-nÎræÌÎ;Ç­·ÞjVTTDBB·Ür Z­V’-Rbb"½{÷Æh4räÈ‚‚‚ˆ'88ª««ñòòÂÚÚšãÇÎñãÇihhÀÊÊŠððp HJJ¢_¿~899™Û¥¦¦ˆÁ` 77·Y‘ÍÍÍ¥¨¨ˆˆˆNœ8AQQƒæèÑ£ôìÙ“¦¦&RSS gÿþý466Ò¿²³³ $33oooììì())!!!¢¢¢š}¡HNN¦¢¢///BBB0 ìÛ·ƒÁ@TTYYYdddгgOÚ·oORRuuuDGG›§qèÐ!ììì0tìØ‘ÌÌLœ9|ø0ÞÞÞ„‡‡sáÂ’’’4hååårþüyìííÉÍÍÅ‚ÜÜ\† ‚B¡ >>kkkL&“¹7_QQ¯¯/®®®hµZöìÙƒ››aaaæLÕj5©©©¸¹¹5›¿RÐDZcÇX¶l|ðyØóÏ?ÏôéÓYµj¯¾úª$-„B\G×dzDDööö͆YZZLCCpq˜”"„Bü1*•ê²»æ®[A7™LÍþ+•JŒFc³ÓDbccQ«å¼´´4:vì(9H’C ÊÁh2a2),.âBy!~”Ôè¸pô0ùµ* ±×ú1pd4‡×îáxU1Þyä8†òü`k1ä")³•ºˆžá·9¼+ù?”óÝÁï°Wj±riG?|ƒƒ©«*çB~66ÖxyµÇÁ¡`¢²² ¥R‰F£ÁÒÒRÖ‡VN¯×3nܸ?Üþšlrß¾};Û¶m#::šÚÚZî½÷^öïßo>’µcÇŽÄÄÄ\Õ k­¼%ÉáÆæ`0™È8›Îæ“ÉÏžAUïͽ“ï¢zë”þ܉݃]P(ÜÑ JÖ‡_Q*•Ò!»Üß+èWK º¢UÑét$ŸRF'ÃY†i;Ñí‰;ÀÆïÉ£%,ѪHAB´h&“ ƒÑˆRi"6é§7nÁMeGô˜ûèZ^BÄÝ=žT+¦×ë9zô(EEEtêÔ‰   NŸ>ÍÙ³g:t(Z­–#GŽP\\Lpp0MMMdee1lØ0öîÝK§Nš]ʸ¥’+Å !Z$£ÑÈŽƒû™³àf½ºÃùsô.€ys_à‰×ž$,Ìe·.T Óéxþùçñòòâ•W^!55•¥K—âîîÎßÿþwt:Ï>û,ÞÞÞúè£6ŸôÐ…¹ºº:Ôj5uuuüp®†oÿš<:H8âw³lÙ2 xê©§h×®t!„¸‘Y¶låååØºGð·á¡ pź½- ż¥ØWYÉùï¬y= tpÀÏÊê²Ï»ººÉk¯½&=t!„ø+äääàêFXp-½û @­0€­Óœ¨©!±ªêºM?T«½bARÐ…úúzŠ‹‹ñññ&~û)î{p(j`#×µo©fzy—×_ú|||˜;w.Ï<ó RÐ…âzŠçÛo¿eèÐû¨.-eü· ´Ö º›™h½fÏž-=tY „7‚Éd¢¬¬”;F?@‡ oìê*QÚZK0B\#rÚšâºñììlªªªèѯÞ&%íÔF4ÞÞ¸!¾þúkŠŠŠ¤‡.„ÿ‹¦¦&.\H§Npvq¡¢Bö\ >ƒäœrqmét:Þxã ,--ñôôdòäÉ,Y²„’’Ì—_~ɘ4iáááRÐ…âj8p€qãÆâçÀŽ˜zGyà(żUÊÎ~›ÊÊëws_ßÙ88 ¸ìóz½ž¬¬,V¬XÁ´iÓ D¥R1wî\ŒF#‡æ¾ûîÃÏÏOzèBqµ† ÂÙ³…$¯ÛÌ­ãGI ­˜£ãllº]·ékµA¿ÛÆûÇ]8†ŠŠ ÜÝÝ‹7eQ(­æ,RÐ…7Dmm-{öìáŽ;î`צãtõ7|ŸóÖÎήÇ_:…B……ÜvÛmÌš5‹ãÇ3xð`ÂÃÃY´h>ú¨lrBˆßSUUÅ[o½Å³Ï>IüÚƒDßÛ •|ĈëÏÚÚš7ß|€E‹°dÉ’fm†Þês£Ü…×DJJ 3g>‰Öž€~RÌÅ ¥×ë1— olll3üé‚n2™Xºt) , ºº¸x£…ùóçóî»ïRRR"kšm@ïÞ½1èÛQ˜œŒ»§"n¨™™yÉðgŸ}¶Ídð§¿B;v WWWzõêÅêÕ«™:u*ÙÙÙØÛÛãââBJJ ”µMˆV¨  €½{÷rÿý÷sdÛiܼtÈß»ø‹zè&“‰˜˜Ž?NPP<òµµµÌŸ?ŸêêjæÌ™Ã_|ASS<õÔS”••±jÕ*Ôj5sçÎeÓ¦M>|___¦M›Æ¢E‹0”••1gÎvîÜI||<žžžLœ8‘ï¾ûމ'²téRf̘Ѳ zII ®®®¸¹¹™{㆜œJKK›&pðàA¬­­‰ˆˆµOˆ.77—%K–ðòËÿ`ûè?ý6l,äm‘Nzýõ›¾¥%¨Õ¿¿>*•J¶nÝʧŸ~ÊsÏ=Gvv6µµµ<ýôÓ,_¾œ£G’––Æ”)S6l+W®Äd2ѧO†JSS±±±|ùå—¼úꫜ9s†„„>ÿüs¾þúkâââØ¸q#S§N¥K—.TWW“žžÀéÓ§¯Ùû=vìuuuW=ÞŸÞäÎþýûùæ›oèÛ·/ äååáëëK—.]šm‰ŠŠ’b.D+QYYÉôéOÑ[BÔc·K1oæNw÷ë÷Ó¦?úÅB‡ÎÎÎÔÖÖâææ†……Ô××Oqspp ®®Ž§žz FÃc=Æùóç±±±ÀÅÅ…êêj\\\°²²2·ÿ׿þEFF=ô*• ýßdþ—|9DEEÝøº»»;ãǧ²²’^½z‘’’BçÎÑjµèt:úõ“ IÑ…‡PQÞDEUÎK ¤ ûâ‹‹ÿÿj...ØÙÙñÊ+¯ÐÐÐ@ÇŽ±´¼¸nªÕjT*•ù±B¡@£Ñ°uëV’’’°µµÅÕÕ^yåjjj˜9s&«V­2°jÕ* iß¾=NNN”””ðÖ[o‘ŸŸÿ—¿…émøqãdÍ¢…KLL¤k×®¤ì=‹ÖWO—.=$”VîfÿüÖét¼ôÒKÌœ9“€€€V“éÕæ.ç•!þ°ÊÊJ¾ûî;ªã³èøè¼l%ñ—3L˜0¡ÅóëE ºâ[±âKî6’½P+ä2âæ ÕjéÕ«W›ÏA ºâ1™LLyôQH££BR¡PÄMA¯×sèÐ!JKKéܹ3¡¡¡;vŒŒŒ n¹å***Ðh4444P[[‹¯¯/.\ C‡lÛ¶ kkkÌéÓ§ill¤¾¾¥RIcc#J¥’¢Ó騲e ŽŽŽDGGsêÔ©fm°²²ÂÝÝäädFeÞ_£ÈWl!Äï2 de•±ÿ»Í ¾¥*é‹›ˆN§ã…^ ((ˆ×_¸¸8–/_N@@O?ý4 ¬]»–+V°bÅ vìØA~~>óæÍÃÊÊŠóçÏË–-[8pàþþþüë_ÿB£Ñ°qãFÒÓÓ™3g¶¶¶>|˜o¾ùæ’¶Z­–/¾ø‚íÛ·ceeÅÇ|Ãs¿J!ÄïöÌß}åm,kÏ3ìÞ±ˆ¸T}=TW_¿ÿà$÷>}úFdd$ëׯçöÛo§gÏž˜L&:vìHZZ ¨Õj8@TTÉÉÉ>|˜üü|T*wÝuÞÞÞøúúÒ¿úôéC^^ 6Œû￟Ç_Ò¶_¿~„……ÍàÁƒÉÉɹá‹A6¹ !®hãÚ¢úRçå%aˆß6}:lØpý¦¿|9Ü}÷›e'}ýü% !¤  !Z¢²}q*IeÊmc$ !¤  !Z$Ž"'?nŸò¨d!„t!DKudõ^ Ý ôr”+Á Ñ’ÉAqB´aqÿý”ÐG'âdi-a!=t!DK´mýzκPk4HBHAB´DF£‘“§Š|k|´vˆ­€lr¢1™Lÿz3O½<µR%!=ôŸ%$$°uëVŒF£yXJJ ëÖ­£ªªJRâæ©æ”feÒÔ«z“QòB úϲ³³Ù¿?F£‘Í›7““Cll,Ý»w—ËG q9ÏÒ¯÷éç‚•ÜtE)è¿”ššJdd$ƒ âĉ9r„¼¼<Ö­[ÇÑ£GÍm«««©­­•Ô…ø 4•—³îÿ–óʳ¡PÈ-Q…¸YÕÖÖR]]}ã ºçÎ###êêêðöö¦GŒ=š””sÛÌÌLrrrdi q£ét•*FÌz¥RŽ…âf–““Cffæ/è;wÆÒÒ’øøxÆǦM›èÕ«666ìÙ³‡ñãǛۆ‡‡*KKˆ¬<¯„w$04Ô[Ââ&JxxøUwMŽrÿeѾÿþûxàd©q3tÎSàx^>OŒ&aъɶ7!Z³šêÝÚóåÞC²©]ˆVNÎC¢Ë9žÅÜý;˜~ç-†RÐ…-QýÁØ:òzÀý´oß^¢•“mpB´FUUT†Q¤3H1B º¢¥JٞʮÒShËK$ !¤  !Z¢ê‡pÙ•ú„d,--%!ÚÙ‡.DkRUE_E¥E$™!]ÑÒįK¦ò6o†¹úÒmæL D)èBˆ–¦zç!:=Ø‹‹›Ùííí%!ÚÙ‡.DkP[K¦KÎÕUqðàAÉC)èBˆ–èÀÊ}õ´o„ÄÄD Dˆ6H6¹ ÑÂÕì9D‡`¥¶à½ÿü‡GyDBBzèBˆ¥¾žãV^\h¨A©PðøãÓ®];ÉE)èBˆ–dûòýxtµ§ƒ­#VVVŠRÐ…-†ÉDÍxú=<_+;–.]*™ÑÆÉ>t!Z"Ž=z‚+JÙ½þ[(,,üͦVVV888HfBHABÜT 6}±Ÿ¨‡£Xýéçh4lmm9sæÌo6?uê3fÌÜ„‚.„¸iÔ×Ss&þãûऱÆÕÕ•qãÆ]q”ËõÜ…­‹ìC¢¥0A­fckk+²²²$!„ôÐ…hqjjØøÝq?öí§¬¬L2BH]ˆ¥ €ºŠ zÜÒ•†ºzöïßÏ=÷Ü#¹!¤  Ñb45³3+Ž—ãåÚ­VËsÏ='¹!®mA7üç?ÿáÝwߥ¼¼Ü<¼¦¦†‡~XâϺpoöœdêá(P R©°¶¶–\„×¶ =z___ÆÏš5kÌ×/_.·oâÏJK£ÖÕ•ÝüIOOg×®]’‰âúôŠŠ qrr¢¢¢¸x·'­V‹Ñh48xð ÇŽ“Ô…ø#1ùs0G[ Ë–-#::Zr¢•;vìØÿtä?}”{÷îÝY¼x1YYYDGG³wï^|}}qrr¢  €¼¼<óÍ"¢¢¢dI ñO§² G¾­ ‰‰‰<óÌ3XXXH0B´rÄÄÄÜØ‚îââ£>JMM ;w&33“€€ˆˆˆÀÏÏO–ŽW+9™ÚÎèZÞ@ïÞ½%!Äõ-è¾¾¾æßÍ¿K1âÐØH­o0›ÎlSM{·”J9!Eqeò)!ÄM¦&ñ8GK+‰ð€={öH1BܸºâÚ0%'ÓØ½+u–}úÏ>ûìïŒaÀ`¨ÅdjÂhlÄ`Ð£ÑØ¢RÉ&BHABü59¯õ!;;ŸùÇ?þB¡ ®®”£GÓÈÊj¢¼ÜHE…‘òr#çÏkX½újjjÕÔ7(ð÷­aàÀ RÒ…B'Ù !]q£œßq˜úÈP"¬\0ÉÊ:ÇÚµ¬_g¡<˜ÎÁê­j©°¨ÀdcBg£D嬣*°´ 4‡*=Ø| Šmñ±È¡c€=……ß2`€°±qG©´l6ïþóŸ„„„\ñõ9;;3tèPYPBHAB\¶sž”„eïžÚ¹Ó*%FcGÖ|¡'g##ˆg‰ÍV\9Fm\5 ÀB©ÀÒ í}|@¥¥L&ŠJŠ9êäÈîaìvëA\uw¾ÿÎ Íüm²éÛã{Ì‚>}"Q©.^q.$$äwoÃzµ§Ð!¤  Ñv˜LÐÐÀÁ*gr%²bA!^ùŽ„å,c¶Õ,¼ÊÉìAí¨û° {›šòZ0ý<ú‰'˜>}z³IºUTp[r2·íÞ »¾";{炃8xWgNz c_f1øsWŸ$^zÉŠ®]Ãe9!]ñ§ôìX¶ƒs_§à±o lÓIïâJâøž|ì{/Ü7ž;]½Ñ(û‚2¹¹¹—l×¾øÞ<Žò wzy1pçNXó.†&6ëÇ{†Gx§÷Ýz˜[oÕa2éQ(ä#A)èBˆ«Ò•MÆüÏq[±Žê0{>ýרz>Î]ÁÁ<ëêÅîM[âðççÓ®Œyñ¿É„&=±K–pﶇØ;d( «¦1uæââóäSÎøz‡ @! H)èBˆ+1éõT}»…ÊÙoPfYÏë¯?Œï¾¼Ðv.×wæ tèg";›Á‹3xÓ¶w‰à³æ0p >tˆ‡§yì$e]ˆD®X!Ä «ä&Œ‰‡ÑMú“³y¡ß]Üù䞸u(ÿÖÿúó_óõ…wß…;±W³ò‡1l [Äù}Ü2HÅ»_죺±N–›ÒCB˜¥¥azó-Î|{ŒÝºðú¿_gÀÙ“Üwô4Mí<‰9™~É(999×dÖuuu\¸páŠm²§M£ÏÀtúðC¾Z=Š8çÌ|åy¾ßžÄ¼7݉ö ‘e(„t!Ú–åË—cm}ñt0jjüê+\óy¯Ã=l›s;=ú¸2+ÕȬ—ç^q:×ê4±úúúß>xî×ÜÝáµ×à‰'è÷Áì^6‚×öÌåo·»rÿ[ûè®ÕÈÂB ºm‡µµõÅsº¥iê >KïÌ?§Ï"t¬–¯Ðr¬Ê†¼Â À­7äõ8;;Ó·oß+¶iÖƒwqyó°¿ç=ݳť IDATý4wwæ¹ÉsÙ3É€eX:wû¡VÈÞ:!n6òW)ĵ֨ =èAª˜Â»LàŸO‡ðE‡ÁœÙùŽŽŽ7ÿû‡­[¹åõÁ쵸—Þ‹Syæþ¦lßOV]¥,g!¤  ÑŠefýï…¬›uˆÛû|@ͲvëÃ8½ŠÆÎ}Ù³i'ãÇOÀÕÕµe¼fΤ]Ü÷<î·ˆåI³I™¨fäÂ$>>—F“Ñ Ë\)èB´"¬XAyßÛ™›:™çg<ÅÃÿuáëèøXÚ°ýX5FM<4ŽîÝ»·¼÷Hê›o2ô³IìÔNåÞ¹‡xóÉr&ÅÇQ¬«—å/„t!Zâbxäö?ü ·(—‘ø–7+^aVH8ºF¶}·“ðÞŽø:9·ì÷©RÁ`wxo>x–u[Ÿ#÷‘ †}}ˆƒe²!]ˆlçNúáõ5Á<þ>ýWx¼}ýžºº:ª²sØVoÇ”»ÂÑÝÚKKËÿÞãââ~û‰ñãÑê–³å›g™ýÃL½\ÏG:3ȹ½¬0BHAâæ”²r%γ^`…z:ï8>Ä“KŠâÕjõÖКNzŸÞ óuhÅ _¿~—¿gú„ pü8¯ Á¾éÃy襉<>²Œg:¢QÊÇŒ-¦ gdd˜˜È!Cððð`óæÍTUUqë­·¶Œsn…¸£V®$àÅ7xAû ‚ùüS=·tŠú¹^OEzŸ×X»z s^y¥meÎñ¿ÍäS§è÷ò‹ÌHŸÉÁ¿•óq·<­leâ:»&ûÐ?ùä† Æ’%KÌÃBCC0`‹/–”EËVWÏù$[¾æý[¹÷ÙrǶmì+•MðB\ŽŸŸ!!WËâk²]0,,Œ°°0˜={¶,qÓØ±cåååWlsæÌ^™<{Œ¸L²žául[ìH;‡_]å­© £^ÏŽÔzª««˜1m‚„|Ö="PïÛɰY/ÓkúóÌzf ÷Œàé€.X(U×€œO"Ú„òòòËŸrõ£|@ãÐ!üÇz,‹*Ÿä¥Ù9<>½juóMì˜L4––²bo:ß…B&ÿ{;Åýë×g6k‡}aiN^<|Çpr_ð«¢P(ð{à^ z†3rÒ?ˆžüS^x‚™·ßÆ7_ H)èBüŠ‹aÆ v$3Åj+Qá¾g‡‹Ë˿ٕDÛ£ÓÁÂ…äÜ;‘ѯc1“o×W0fŒÇ%żªªŠùóæRa0°?¾gûJ)æ×B¡¢ïÝ}é’°œœÓùû3qò±™,:²—:}£$„t!.#%ÃÈ‘¬[²•(åw8GvdÏ.-½{wº¤iaa! üo—4ÚØ3vdWÉï:qusbì§Qºz%NÉŽÜ2z ‹ÞŸÏ‰²| G)èBüLðÞ{ä¿“‡³ïe¦a9/¼TÏòåÁ¸¸¸_:‚É„‹½=‘Þ½¸ÿñQ¸;;Hˆ×½·®fàÝÿoâï˜Ç-/oäÜýY¿¡IâwÈ>tÑú¥¦2üƒX—fÏ,Õ&zv‡ƒïÔØã’¦•••$$$à«ËÈHúŒ¹•JΓ¾‘\\œ˜òÑýì¾;œÜ§¿`ÈÈ©Ä>9–nÓ'Ì3@B ºhst:øøc Þú€4Í"Ámó߬æî»ƒQ©¬.i^SSÃûï¼Cˆg(}'MD¡0`gg%9^côHø¡#»Þg6Ë_&ø1¬¼oŸ™Bäƒânï$A !]´ gÎ`|òï|sÐ’-7àÛë$Wjqq¹ü¥‡5yÌøÇlêkTØÛ[’ãup5GÂ;;;ñÌ’Û‰{ #›^#êéÏ(øtç_|š®w݇µ¥VB ºh•ÊËá¿ÿ¥pÑrf×üƒôîƒù¿ÉÍ·Kš×ÖÖ¢¯¨àTRڎݰ±ÒâÜN#9Þ„½ø‡!uä³”¬ÊaÄÄ9õÚ¹óðŽ‚Z%eBÈ_¸©¥¥¥qòäÉ+¶©©©á‘ûîƒ/¿¤æÅ|ž?Oì¾æooÀÒnX[Û“|Éxééé,k!OÍŸðHò·be%ÅüfïÅ7Ô}•ƨ[ga1Ê«9spï%Á )èBܬNžW¯«§ n…OE¿a? å]86¿ù½yùAwœí.'áÈa²²Ïê핵 ® íìDèv+sÅçu>©Œ>9‡m±°nÙNú‰ôXކâÎ;!, läŽyB º×E“Ñ@^v&Õë×a»"×Sz¾í0Óô¯è=&€Ñ]ìQ©,̽÷ÄÄD¾Ù´‘±cÇr$= W<š4x‡ P[àÝ?\Bm¥þȹì.<4Ó…Æi¡ÄË'kO£Ywˆ® Ÿ§›w=öÃ"aôhèÓœ%T!]ˆÿ• yµ•fePw8 Ëï6a¿û$e.½É¼ûeRï®æ™ŒGó›IÿoíB½¼éã€B¡À· ÷ HrÍi4Ö âÏÀ!þ44 "%åI6m;KÝæ}¬YD˜¶·¨0ú.8<<ÀRîË.¤  À?üpé@……“=eyùTM¦)v-EsæÑ®L‡•Gg ưþßDFú¡ÕZ¢‹‰A£ÑpøÈŽ9LBɘ[F`ª×3Î/ûÈÊò/8ç>P6«‹K{é—-òApv˜Žê{î#ß"ýÁT\_ÞHÇÊwpó´"ÇJOª=Ùž<ýÁb®. ”ûY )è¢ Z³~úS[ZÇÙ Y(ÒÎAÜújµ—烂q›?M·.øù8¡T*1ä•”@Y#ÕÕï‰}bÓNÆ=9™ú¸ãxyz€Á€²kÈÅï–r“øm¿¿Yþmž¸…’Ê¿q6½†Ôä(N<‰Ë‰“ôÞ}‚üð¡8û8`Ù'}ÏHÔ=ºcprAåâZ¹ü¬‚.ZzC#Uõu4ÖA~A9¥ç²hJ+¢î‡dº&Çþ£õt¬¯àV­µ»#ê[G`2Sç.àjKÚª\Ã;bídEFú:Ö½_Tô}h,í«ª˜üÂß/~pÞ9LB׋C;\zµƒ^Þ0e(:CËWÇPк“?P–„ç’ ´Ë]ˆ‡©;{4Î6XtBL½—6aÑ;¹€½v(,äcV´‚®×ëY¸p!z½ž)S¦àææFcc# .Äh4òøããèè(IÿèÌ™3„††Þt¯Ëd2P«k ¾¡‰¯¾ZƒÉ †&*=XÛ[âìà€m“eFŠ/œEQ˜Cy5Ê¢Œey8Õ⮫&Š:jëð=†n÷Ì¢ª=™¨(ÓãâBñÑs¸W—qüÓ5ìËNÆ«¨žÿ /]Ú`?fÍú;X_ìõ$z¹\|­´t³®’ÃE–* 5ÜÒ¿3ôï ÝMYc¥5uVs$÷ÖùÅ”ŸJGž…ÇÖChrsqÒUa«¶ÂÞÞ“¥=*OWlƒ|©³u¥Þ¾*Ol¼ÝÐØ;Ф´@¯P‘ž›M‡ŽQi-±°¶D­VËú n\AOJJ"44”^½zÃO<ÁÁƒéÙ³'~~~|óÍ7<üðÃ×åÅוPštäZU´Ÿm6ü’†¿nÎÅC»~~úâs¦ÿ™ÌÓ0É©)(C;a2ýø¼éâ&¿xüãO£ “ñâÌLFÀøã´ŒÛ*Œ&0€Âxñ÷‹?üýÇçúztuUÔÖVÒT_‹¡¡Sc# …”&Ôõ&ÔõMèëJQÔ—3¨¾ K X4ÑXÚP_Z^Q‹« Ø¡prátÖy²l-i§±ÇûÉQ46âûÔ$Ö.ZN‘¯ UpÚ^I'gWœøáø1ÚÛZáêB§ÛÝ9xú4÷½úŠØX†ý´É3¬S›û,))‘®ÕöÅ×XAC¨QŽ¡º©]UçåRYU©¾Çª33 ¬¨D“ka ÚÂTՕФÃdÐcj2‘ÖØˆ‹µV–j¬´VÔ¶4ª,Ы,0¨Õ˜4`eR«Aec‰…­5 …Æ “Ê ƒBA¡Â¨PbP*/þT)1)˜” L (èMF &F˜`Ä„Iñó'šIVZ-jŠÇA¡+àâƒ_þ¯Ñz¢õÀµÓ_·+L&ÓŸz/;wîD¡PЫW/þûßÿ2{öl6n܈»»;~~~ÄÆÆ2sæLN:Ejjê5}ñ†ÊTç3[ÔW-p³ŸùjBÁââ©aj{ªÊÊ)U*p´ÒbëîŽÂh¤²¢[g4FãÅsyuºKŽ ®¬¬ÄÁÁá·s¨­ÅÆÆæŠm~o­¡ÍO9´Å÷þ[ëÃÎÍøžÎŸ?Å6øùù™ fUS5úFtF#½uƒUm6Fš&=CcŠkVnäsòzktvEãåyͦשS'ºvízã zyy9‹-ÂÃÃ^½zQ^^N÷îÝùðÃqpp`ذatëÖÍÜ>??ŸÆÆFóŠÝV555Q\\LûöíÛl555äççãáá]›{ÿ äææâçç×f7­ÂÅËûÖÖÖâïïJ¥jÓŸ eeeXXX´É¿‡ŸTWWSPP€¯¯/–møÔÁÿ¥VªæÎ;÷OmbÐjéܹ3téÒkkk<== %44”:˜Û8p€C‡ЦÿpW®\Éš5k9rd›Í ))‰¢¢">ûì³+^þµµzçwP©TlÛ¶>}ú´Ùõ`ûöí”––²{÷n"##Ûô—ügžy•JE§NÚduuuÌŸ?ŸvíÚÑ®]»Ën½jírssYºt)ùùùÔÕÕáÿïEpMNªtww7Ïð§§§çÅÍiii¤¥¥qáÂÖ®]K]]qqq †6³p²³³›åpæÌlllÚÜ·ð_çЯ_?ئօ_x5ŠÂÂÂ6ýåv̘1„„„´Ùõà'«V­jÓ_ðÉÎÎ&11‘ÒÒÒ6›ƒ½½=•••dggãîîþ‡Ç»®WIÈÉÉ!==ôôtrssÑh4L˜0.\¸ÐfίsX¹r%%%%?~¼M}˜ÿ:NÇ;ï¼ÃO<Ñ&ÿhÿäÞ®V#33“5kÖ0mÚ´6Ý;ß½{7IIIÄÅŵÙ´Z-‘‘‘L›6M›6µÙN:ETT“&Mbß¾}x¼?½ýjœ9s†¯¿þ…BÁ¬Y³Úìþ²†† K–,áùçŸGÙF¯>µlÙ2RRR á±ÇksïõêÕÊm·ÝÖf?¼&MšD=èܹs›Üõò“ÚÚZRRR(..n³=u½^ϻヒR©äž{îi¶Ë¶-)--åƒ>ÀÒÒ’Q£F5;í¦)èB!„¸>äÂÄB!„t!„BHAB!„t!„BHAB!¤  !„B ºB!¤  !„B ºB!]!„RÐ…B!]yyyjüââb²²²þ²×_[[Kee%eeeètºË¶3ÈB º×Î[o½ÅG}tM¦õÆoü©ñÿÔø³gÏæüùó¨í›o¾ù?ÏçrãpþüyV¯^MFFÆeǯ¯¯gÑ¢EæÇeee,]ºôº¿n!Z"µD Äï«««#;;›ôôt¦NJyy9o¿ý6666Œ;–ÒÒR6oÞŒ••óæÍãƒ> ¤¤ž}öYfΜ‰‡‡¥¥¥¼öÚk|ûí·F&Mš„¿¿?3gΤ}ûöŒ1‚o¾ù…BA=9r$¯¼ò vvvdee±lÙ2N:Å]wÝÅ[o½…N§ÃÇLJÇ{Œ©S§@EEï¼óóçϧ®®Ž.]º0nÜ8¶oßÎéÓ§©¬¬$66–£Gb4™;w®ù=õèуaÆQ\\̦M›0 tíÚ777233ijj",,Œ’’T*»wïF¯×3gÎìíí8tè›6mÂÙÙ™!C†°víZª««™9s&¥¥¥”——›ógãÆFž|òIJKKY¶lîîîÍ–Ãþýû‰ÅÆÆ†~ýú±lÙ2 >ø yyyìÚµ +++ÆǦM›P©T¼øâ‹² )èBˆ‹Ö¯_ÏwÞINN !! &УGL&=ôË–-C­V“••Å®]»?~<ëÖ­ãÂ… ñþûïóí·ß²eË"##yíµ×šÍ£´´”÷ߟ/¿ü½^O÷îÝùüóϱ³³£cÇŽ<òÈ#Üwß}æî©S§P«Õ¼úê«Lž<™‡zˆÚÚZ^|ñEÞxã 8sæ cÇŽ¥_¿~æù >œ 60zôhxà¾úê+V¯^ÍöíÛÉÍÍeÁ‚æ¢ìêêj~­EEE,^¼ƒÁ@aa!=ô/½ôŸþ9»wï&66–àà`òóó;v,‘‘‘<þøããááÉdbíÚµDFFR]]m~M ,àî»ï¦¼¼œÏ?ÿœóçϳpáB ùøãÍíú÷ïOrr2“&MbêÔ©ôïßµZÍÒ¥K "88˜!C†Hdd¤s!]Ñ\ll,AAA455qìØ1BBB0™Læç E³ö„‡‡›{µ&“Éü_¡P P(0(•?ïõrvv6? "<<œððpòòòÌóúõ<ùÀÉÉ …BV«¥±±‘ùóçsâÄ žyæ>ûì³Ë¾¿Ÿ^—F£1ó_sss#/////”J%gÏžÅÇÇç’iâææÖ,“÷Þ{û￟ÒÒRöîÝ{É´--- ÃÂÂæÎ‹ÉdÂh46k÷Ë÷¬R©èÚµ+vvv 4777ÒÓÓyíµ×x÷Ýwe¥mŽjîܹs%!./??ŸÒÒR^ýun¿ývâãã™üðC<Ș1cÈÉÉ!..ŽÔÔT̺uë8{ö,iiiLŸ>¥RÉW_}EPPíÚµ 99™èèh:tèÀ–-[8uê•••Üu×]ÄÆÆOvv6'N$99™{°uëVÂÂÂèÝ»·yééétèÐ?þ˜³gÏF=ÌïéøñãDGG£T*ùòË/)..æÑGåÔ©SDGG7{ÿ………|óÍ7DDD‘‘AïÞ½ ¤¢¢‚ÁƒcooϧŸ~Jff&Ó§OÇÕÕ ûöí#==¾}ûCYY...øùù™¿øúúÒ½{wbbbHMMÅËË‹þýû³`Áòòò°··7oa°²²bãÆ1~üxV¬XAZZ¶¶¶œ>}šÝ»wcmmÍÈ‘#IIIaÿþý—¼!Z+…é×_ñ…×ÜÌ™3Y¼xñÿ<þŠ+hhh ;;›yóæI BˆëSÐwïÞMFFS¦LiÖHNNføðá´oß^’mZaaá%x]ÜÜ\ðõõÅÂÂBB\âšœ¶Ö©S'ÒÒÒš [¹r%wÝu~ø¡¤,Ú¼?S̼¼¼ ’b.„¸¬krPœ‡‡–––Í'¬Vãèèh>"¶²²òŸ÷*„B´u~~~888ÜØ‚^WWGCCµµµTUUáîîŽ^¯§¸¸µúâ,¶mÛFXXX›_@Gmvp’ä 9H7õº*ÊJ+(-ϧ(ÿ]ú¤$7…3™µäæCSïLcû&ޏ›ÏÏìÆ´?ƒâWÜNœ£÷Ë/Ѹo/YZ;2wï@íêA—@î4”äÜóýn+:{ÜPáѹ#>~EgÎ`áèH€»;®>>èëë)./GXZYáèäd~}?í9ýå™—; ã·Úþ4ü×Ãd}økmÛ¶Í|ýˆVГ’’ðõõåСC¨T*\\\˜4i[·neÆŒæv¡¡¡m~UVVJ’ƒäp“åÐd¨CŠœÂã(Lí9ua75iÊç|>ï ‚è‚ “\¸p€°°0ˆŽŽ~,7ýïeggLii©ÎrµZMHH:˃‚‚ˆŽŽ&<<\組„„gn+)) ¥RÉ–-[~j™òIyâããÿÔq«T*"""HJJÊæ´÷÷÷Çßß_^vÿþ}yYqq1P–<©|›áááro|FCjj*‘‘‘„……éÌmðè¾?ºnQQׯ_]áu¤ÕjIHH 44”¬¬,Š‹‹ ’OHH !!´´4âãã %77—ÄÄDbbbˆ‰‰!$$€Y³f͹sç˜5kO뇬T*™5k~~~|þùç:¯­\¹’;wîðÙgŸ‘––üÿ&I’pttdûöí:Ç1gÎüýýQ*•ÄÇÇóàÁù‚@’$Ö¯_ÏÏ?ÿL~~>vvv$$$Bnn.P6ýwß}Ǻuë°°°ÀÄÄ„””‚ƒƒ)((xjÆÇÇsèÐ!yû¢¢"¾øâ bccå)sãââˆåã?F­V°~ýz‚ƒƒYµjçÏŸ—gÙ»uë·nÝbëÖ­\½zT*Pöz„ ­kjjÊñãÇÿð"JtA„ ¨¨¨ˆQ£F̧ŸØÝHÀ IDAT~ ÀìÙ³ äÓO?%''‡9sæpñâE’’’5jAAA|ðÁ\¸pµk×ÅéÓ§éÞ½;VVV 4ˆ)S¦ ¯¯Ohh(žžžìÛ·Oþ äæÍ›¼ù曌;–ÄÄD@Âûï¿Ï€¸rå øøøÐ®];ŒŒŒÈÏÏ—yI’D~~>±±±3dȘ={6ÙÙÙÒ¼ys’““Ñh4deeÉÇ=cÆ Ôj5—/_¦G¤¦¦Êw>ùä‚‚‚X²d Ç×9ޤ¤$œ™8q¢¼ïå3 Þ½{¥R @ÿþýiÙ²%mÚ´Á‚ÄÄD9~ü8'Ndúôé\»v €K—.Ñ«W/Ž=JFFqqqÄÆÆ’””DãÆå}ùýºNNNò…Õë@t5ᥘÈ/¿<·÷o^µ9£šúÃrmÚ´aèС\»v •JEII £FB­Vãë답µ5&L   €¶mÛ2lØ0._¾Ì„ °··çÁƒ$%%aooÿØ{[YY¡T*©R¥ŠÎrkkk¢££155-kiéé¡Ñht¦×…²Ùæ233Y¹r%ƒ ÂÛÛ›ÈÈHêÕ«‡™™¹¹¹ØØØ ¯¯O:u8p -Z´`øðá”””p÷î]|||˜4iW¯^ÅÞÞ;;;:uêİaà #&&///V¬XÁÝ»wéÕ«iiiôîÝ›#Fàéé ”¥$.¿e^¾¿gjjÊÐh4Œ7Ž£G°k×.ÆÀ©S§xçwؽ{7&&&òAI’(,,ÄÜÜœ´´4f͚Ů]»¸xñ"'Ožäý÷ßçêÕ«ò…Ë£ëBYÊåÄÄļ7¹h¡ ‚ <ƒ¡ž!–Æ–ÏíÇÄÀäϵrþ;”P¡P```@AA111øúúâì쬓O¿¼lù²òùÚkÖ¬Irr2Pöü;99™{÷îáïïÏo¼!ßÞ.ÿIOOÇÕÕ•ëׯ)¿gùø~ ¸|ù2mÛ¶¥OŸ>¤¤¤››+?+/((ÐIjbbBLL ¥¥¥„††-Cff&¶¶¶:Ç@ll,ØÚÚÊÇÿ(}}}ß#""tŽC©T¢R©HHH //ÌÌL²³³IJJ"&&FN®V« ÂÅÅ€‡R¯^=:uêÄéÓ§ñöö¦fÍšТE ZµjEBBÉÉÉØØØÐ¿âââÈËË#99ù±u¡lêãZµj‰º ‹ÔÈ® :-øW÷ÁÈȈ>}ú0`À +V¬àÒ¥K 6 ggg ðIJ5à7Þà—_~¡U«VôïߟS§NaiiÉöíÛ111¡gÏžôìÙó±í¿÷Þ{\»vU«VðàÁ7n̪U«8uê}ûö¥iÓ¦4mÚTô]»v¥¸¸˜J•*éÜiÓ¦qñâEÞyçêׯÏ74h’$Q·nݲ»Í›cff@ݺu¹zõ*3fÌÀßߟN:йsg*Uª„‘‘‘Ü/?ÞÑ£G?v YYYxyyѰaCüýýiÑ¢òsõ¬¬,¦OŸŽB¡ ++ ›ÿ¦±íÕ«—|²dÉ6mÚÄÇ ÀêÕ«9}ú4íÛ·§}ûörKÜÜÜœvíÚ¡ÕjuÖ…²gõåŸÉkAzA~ýõWI„ŠGœÛOvíÚµ¶­˜˜)**ꩯ¯ZµJþAATPP ózVV–ôÃ?È¿çææJ¥¥¥/dß‹‹‹¥¼¼¼'¾–žžþ?¿oaa¡tûöíWú¼ù«ç–h¡ ‚ <]»v}aÛrrrzæëóçÏ—ÿ_Þ"TåÊ•™4i’ü»••Õ ÛwccãÇfë,ggg÷?¿¯©©)mÛ¶}­¾s⺠‚ ˆ€.‚Pq”––rîÜ9ù÷¯¿þ€;v°iÓ&~øá¢¢¢žù7nÜ`ãÆê,OOOgóæÍüúë¯:ISÖ¬YƒR©$99™ŸþYg+W®}èØ±#ƒfìØ±øøøÈÃð._¾Ì;w ãí·ßfñâÅxzz¢R©X¹r%7¦oß¾r»ï¿ÿOOO$IâæÍ›:ëêëëSTT$gŠžM뱃 º /kë.¼ñÆ¥çöþúúæXÆØØ˜„„Î;‡‹‹ !!!´jÕŠââb~þùg²³³ÉÈÈ }ûöäääèd|³²²¢råÊò³vsss¬­­Ù±c|ðÝ»wgíÚµDDD°hÑ"ƇJ¥"11‘^½z’’¢Óc½víÚìÙ³‡wß}—èèh¶oߎ——_}õwïÞÕI$àïïÏO?ýÄíÛ·5j%ƒù½-Zè\DT©R…¢¢"vïÞMxx8çΣU«V9rI’äD-EEE$$$P¿~} ,«““ýúõcÑ¢EѱcG|}}iݺ5ÄÝÝ0uêTFF£áÞ½{ôìÙ“ââbu¡lr›·ÞzKœ †«*‚8·uÇ>'&&JjµZš7ož$I’”””$EEEIIII’F£ùÃñÏ111RII‰$I’”šš*I’$iµZ)>>^ÊÊÊÒ)Ÿ™™)©Õj)++KZ±b…Îk*•JЉ‰‘”J¥4uêT)))IÊÊÊ’’’’¤H’$IEEE’R©”$I’¦L™"ÅÇÇKyyyÒ½{÷¤ß~ûM’$IÊËË“Š‹‹%•J%åääüáoµZ-EEEIQQQRrr²¤V«¥øøx)..NR©T’$IRii©”™™)I’$)•JiÛ¶mòúÙÙÙR\\œ¤Ñh¤;vÈãÌËë ##Cg{iiiO\W£ÑHsçΕ´ZíkyÞüÕsK!=mêŸØ¡C‡6l˜¸‚„ ¦"ŸÛÙÙÙT®\ù…l«¸¸­VûÄÛôPÖáìIÙåU>‘Ijp’››K¥J•^Ëóæ¯ž[â–» ÂS¼¨`OžØäQÌ Ì¡,7~E æÏ‹¶&‚ð'•””Èc«yxXpp0¾¾¾<|øðçßÎÊÊ" €ÒÒRåjµšû÷ïËókµZBBB •çiÿý8ò„„„gn/>>^ž×Üßßÿ©e222ذaƒ<1ÌQ©T>^Þï¹ã[ù6ááá˯I’Äýû÷(,,äþýûräçç?uü½è‚ ¯1­VKll,dffeÉfîß¿Oll,~~~¬ZµŠˆˆ¢££yðàsçÎ%55•+W®0cÆŒ§Ùüü|fÍšEhh¨N:V€/¿ü’€€,X@jj*;wîäâÅ‹œ?ž;wâààÀ®]»tÖY¸p!7oÞ$77—ØØXBBBt.86lØÀþýûIOO§jÕªò±eeeÉǶuëV6n܈‘‘–––$$$ {’””Ξ=+'ÞX¾|9iii:ëmܸQî_¾?AAA|ýõ×\»v­[·pëÖ-¼½½Ù¼y3^^^„„„ R©8x𠜖6%%…ÈÈH®\¹ÂÖ­[±´´äðáü 'Ç? «T*¾üòK¾üòKy,cff&‹/fÙ²eDGG‹Z„ ¬"ý1-**bìØ±<|øO?ýTÖ¡¡¡PXXHAA¹¹¹œ>}šîÝ»`iiI¿~ýøè£066&44”ß~ûM7¾{÷n¸yó&]ºtaäÈ‘¤¤¤èþ°°0ÆÇÀ¹rå ŽŽŽddd™™‰££#úúú¨T*ŠŠŠäu IOO§¤¤„‘#G"_DDDP¿~}233Q(”””0|øp"""˜9s&ÅÅÅ\¿~Î;Ëe¢££™>}:‘‘‘,\¸€'NèGLL 5kÖÔÉý^þ=¸uë–|!tòäIÚ·o/÷²OHH Fœ8q‚‰'2eÊ®_¿üÿ³ÿãÇ“œœLDD’$Mjjª|˜éÓ§“™™Izz:§NâwÞa×®]ËÓŸJ’$ÙÏÌÌdöìÙìÞ½›‹/râÄ ÆÏåË—‰ŠŠÂÙٙƣV«ñððàÝwߥJ•*$''ËSŠ€þ7cjjŠ©©©|å˜-ÁLOO—ËzyyaffFË–-Å_BAxÅqúôiD#‹±1FõêÅw7¯0úŸxÆ aîÜõ˜ŒŒŒxûí·²¨P6AËÅ‹qtt¤W¯^´mÛ___ ÀÞ½{quueРAœ;wNN$cllL=èÑ£ÇcÛøðùqãkÖ¬ ::šfÍš±zõjNŸ>ÍÀiܸ1K—.åĉ( –.]ŠJ¥ÂÌÌL'ôÑGòv6lȽ{÷èׯVVV8::褖mذ!^^^L™2…‡âææ@‡¨Zµ*íÛ·×9þ¡C‡>v ùùù\¿~Ö­[€››·oßF«Õ²qãF,,,ä =333¬¬¬°µµÊzë«Õj¢¢¢X²d îîîL:€5kÖpæÌºtéB»víäV¼™™mÚ´!""‚7n`ff&?›ÏÌÌ”“ÝTå8NŽó§üä³³³åä å‰RSS¥¤¤$‘XF*¨ôÄD)-+]rÿiók[å‰[^„ÄÄD)""⩯ýõ×òÿ‹‹‹¥‚‚×‹ŠŠ¤M›6É¿+•J9ùÍóVRR"'¿ù½ß'Úù+ÊèˆÄ2eþ‘q莴±±ÀÞÞ^4a¡:þ<;w&:!³ºæT·x}ÏõÎ;¿°mU¯^ý™¯Ï}äîÆïo£CÙ8÷iӦɿ—Ï$÷¢î|<)/>ü½±þ–––âî?yË]„×Grr2÷ˆÎJ`ä ¾T6s$„0Q1‚ðãÐAøÓ.œ8AînLñ•L«WÈcüá‡[–À?þøB÷cçΤ¤¤àááÁÚµkÙ¸q#×®]{æ:qqq¸»»sìØ±ÇöíÚµ\¼xQ^vþüyÖ¯_Oxx8«V­Ò‚˜ššúÌ9Óƒ‚‚ˆ‰‰añâÅO¬3€ëׯ“““ÃŒ38xðàŸ>öƒêŒ_ÿõ×_qwwgóæÍ@Y§± 6°}ûvŠ‹‹²¾AAAøûû³~ýzyH”ÍpæÌ6nܨ“dgïÞ½°nÝ:ÜÝÝ9~ü8îîî:ÃE@¡BÔjFŽ“½9úz†r‡¥ŠÆÖÖ­VËÞ½{qww'>>µZM`` ›6mÂÓÓ€}ûö±cÇöíÛ€‡‡îîîœ?I’øå—_pww'::¥RÉ®]»Ø¼y³<ìÀlذ???nÞ¼Ijj*GE’$îÝ»GµjÕðññ¡uëÖŒ=Nž<ùÔ}_¼x1Æ Ãßß_§w»¹¹9:ttLL çÎc̘1,]º(Ï}ïÞ½ÿ¿x»põë×söìYNŸ>ÍÑ£GÙ°aƒ<ù×_%** j֬ɑ#G8pà[¶l‘ƒì©S§ðôô$((GGG<ÈîݻٱcÇ3ó´jÕŠ°°ÿ¿óãááAß¾}5jPö˜w̘1sàÀ lØœ «V­bܸqìܹ“ììlÔj5^^^\¸pøøxúöí+qóööæÊ•+òEMPPo¿ý¶œf·]»v>|XtA*ŽÂÂBBB8öð.uÚVØ`^<Μ9Caa!C‡eÉ’%@Ù<æ£G–³µíß¿ŸþýûHbb"Û¶m£_¿~´iÓ†«W¯’––ƈ#Xºt)EEEœ;wŽQ£F±wï^ 8yò$ƒÆÙÙ9!Ë•+WHHHû#AÙØv;;;&L˜Àùó版ˆ`ùòåòφ €²Ô´ŽŽŽtêÔI'8W®\YîõeÓ¬¶k×{{{ P©T¸¹¹é´j›5kFûöíéÚµ+ׯ_ÇÊÊŠîÝ»Ë-ù¢¢":vìH£FèÚµ+ÇŽ£yóæ8;;³mÛ6 033£C‡¼ñÆ´nÝšУG²²² äæÍ›:DZÿ~êׯ¯“Û¾cÇŽxxx0{öl²²²¨S§vvv„‡‡Ë½øË/ˆ±³³ÃÅÅ…°°0nܸA§N¸té<ààÁƒìß¿¥RÉ©S§2dˆ¼&MšpîÜ9>ÿüs\]]_©Ô²âº ϤÑhølÚ4F¬œÌ(‡ÁÏm;gΜaÊ”)ÏíýûõëÇ–-[þTÙØØXÚ¶mK5Ðh44mÚ[[[LMM¨S§U«V¥V­Zäææ2gÎNœ8ANNÎÎδhÑ`Q¾¾¹¹9ãÇç§Ÿ~¢Fr’­V‹F£¡´´CCÃÇö+--J•*abbBÍš5åååÉ^Ê[½ùùùXXX<õøÊÇÓCYu}}} uæE711ÁÔÔTžýÍÅÅÒÒÒð÷÷ÇÅÅcccŒ133ÃÄÄ„ÆcooÏ¥K—¸xñ"½{÷ÆÄÄcccLLLptt¤FÔ®]›ììlllltŽ£ÊSòŒ3(ë\wóæMú÷ïÏÆiÚ´)mÛ¶%..ŽZµjaff&O/¯ƒ³gϲpáB|||èÛ·/mÛ¶eĈ¡T*9v쥥¥ 0€9sæ0~üx”J%fff¨ÕjÐA¨¶íÙÃȉhaó|3quëÖM¾ý<JJJhРzzzÓªU+àêãã#ïÿ?þHQQýúõãìÙ³]|i46lØ@LL ÇçäÉ“|õÕWòí÷'©]»¶Î(©òVù±cÇ cóæÍLž<™Ý»w£Õj¹qãk×®eÇŽ\¾|™AƒÉ,Þyç*Uª„……ß}÷qqq4nܘ’’LMM5j[¶lá·ß~£sçÎŒ9’réÒ% å¼ö†††òEWxx8Í›7uNÖ—iÌ /ŸsW.Iñ™·_‹s;77Wš8q¢$I’”““#%%%IFR©TR^^žÎ¸éòóóó¥ÒÒR)++KŠ—Š‹‹å÷JLL”Ôjµ¤Ñh¤œœy=­V+¥¦¦Ê¯—çîÈÍÍ•ßwåÊ•Rff¦”——'ÅÅÅI‰‰‰8n\£ÑHIIIR~~¾¼oÅÅÅRII‰'ÅÅÅÉï_PP %&&J*•J’$Iš?¾üÿriiiRFF†4wî\)%%EJNN–$I’6nÜøØ8ò©S§JÙÙÙRZZš¤Õjå1ïZ­VÊÎÎÖ)[PP ×Ó“¤¦¦Êû«Õjåº-Ëž••%¿ž““£³?¥¥¥RBB‚TTT$EGGK§NÒÉ™’””$iµZyYaa¡TPP iµZ)%%EJLL”JKKå±ýå9V^…qè éͬðW'jáß÷ý±íŒèÝ“Êæµ_‹s;00ââb9ƒÚ¿©¨¨==½'Ž)rss±¶¶~âkžžž´oßþ±´°ºzõª~o‘æ/‘}ûö‘‘‘Á­[·9r$Ë–-cΜ9ÄÆÆ>uÀÀ@fΜÉôéÓILL”—çåå1kÖ,9ÍGŒÁòåËåqõÇì½-ZôÔmÝ¿Ÿ“'O²|ùrÙÙuöìYîݻǒ%KP*•úØwíÚEïÞ½‰——………Ñ®];ÂÃÙ>}:sçΕÇß—ïÏÏ?ÿÌÂ… Y¸p¡<ÿüŠ+P©T¬\¹’åË—sþüy l”À'Ÿ|ÂîÝ»²d;K–,aÆŒãáá!'¡y‰³UYdd$6j¾·Vî9ý:)**’çó.))aåÊ•lݺ•ÄÄDT*+V¬`Ù²e|úé§ >œ«W¯²`ÁæÎËêÕ«166¦eË–´iÓ†yóæÑ AªU«Fjj*YYY :”¦M›²lÙ2LLLèØ±#®®®:eSRRHOO§qãÆdddP©R%>ùänß¾Íøñãñðð K—.|üñÇÄÅÅñù石{÷n€ eã±7lØÀºuëˆgÛ¶mrö5KKK¾ùæ>øà¹¼Z­¦nݺtíÚ€ðË/¿0þ|n޼ɥK—äqÞ·oßFOOöíÛ3dÈΜ9C§N¸yó& 4`ýúõäææ’ͰaÃèÔ©ׯ_çí·ßÆßߟ®]»²`Álmmyøð!óçϧZµj:SnàààÀرc‰•‡•––²wï^êÕ«”åøè£¨_¿>ï¿ÿ>û÷ïçÌ™3Lš4‰)S¦pàÀ¾ýö[|}}qqq¡¨¨ˆãÇcllL:uhÝÕ(• IDATÓ¦ GŽ¡N:òÅÆÃ‡ùüóÏqww'//Aƒ±bÅ Z´h!Zè‚ ¼¼Š5LMLp25yâèç-S¥âV^Þsû ÿóKkµZlllXºt)&&&„††rçÎV®\IíÚµñññ!;;›k×®Q·n]<==±¶¶fÿþýèëëãääÄž={P«ÕÔ©S‡eË–‘ŸŸÏàÁƒY³f GåÈ‘# 2„Õ«WsøðáÇÊ2„ ͲeËä,fŽ/W«V-²²²(--åâÅ‹òÏ¥K—(--%??+++jÖ¬©ð ÅclK—.¥U«VL›6 µZ“““¼m(›bÕÍÍ?þ˜ÂÂBzöìÉš5kä4³™™™¼ùæ›r™¼¼}ú V«uf³¶¶ÆÄÄ•J…±±1EEEòí_à±²ÆÆÆXYY•µºôôtþ}T`` Õ«WG£ÑðØÅ‰©©©ÄÇÇËcܵZícR«ÕÒ¬Y3¹W}ii)zzzÏì˜÷è1DFFÊ­åß—Q©TèëëãééùXçºò1ßÆÆÆ¨T*Š‹‹uŽãÑ1êJOOgÛ¶mÜ»w={ö0vìXÞxã RSSIJJ’÷§¼®%I"<<œAƒqàÀ–-[Fvv6’$Ѽys”J%‘‘‘$''³yóf’““y÷ÝwILLÄÝÝõë×sÿþ}:wîüRß¹]Nß¹ƒÊ(¾.Kÿµ}è^¹2ÝÿÆTšÿ”¼¼<–/_޽½=uëÖeðàÁ|þùçX[[ãêꊥ¥%ñññ4nܘʕ+ÓªU+š5kƺuë ¢^½zôèÑCžîÔÑÑQzæììÌСCùꫯ¸~ý:“'OÆØØø±²†††r5ggg9¸cmm-'˜100`õêÕ˜››Ë9Ù5oÞ<¾ýö[ôôôøì³ÏˆŠŠ"88˜2oÞ<òòòØ´i&L`åÊ•( ú÷ï™™×®]£G:ïgggÇÖ­[133ÃÛÛ›;wîðá‡ròäI†®³¿/^dÿþý|òÉ'8p@~_^¦ü_333ªU«FýúõŸxÇ',, wwwæÌ™ÃŠ+€²”¸ãÆ#..Ž;v°páBöìÙ#ïÏ„ øüóϱ³³£I“&h4ŒŒŒ4hkÖ¬aÑ¢E|üñÇtéÒ….]ºJhh(ÕªU£Gò>·k׎àà`Z·nýòžÈ"±Œ ¼ÞÒKJ¤Ä¸8)KõÚŸÛJ¥Rš7oÞK¹oAAA’‡‡Ç ÛÞ¶mÛä+¿·k×.ÉÛÛ[þýúõë•Y¶l™”––öÌ2ÏËÓ¶•““#ùûûÿÏï»{÷n9iH,#ËÂKçäås´laJÍ*]_ûs[’$ù¹³ðt………`dôôùùù˜››?ñQð|ˈš„×”$I|ùó÷tëØüæB¡ÁüO033{f0‡²e"˜¿X¢¶á5õã‘#t©åŒ¾™¨ A]„W‘V«E›@3·F˜Ùˆ „ @ôr„׌¤Ñ°Ãc/¾÷9†ú&ûýììì8tè¨XAø‹çÍKÐ>L~~>£G–‡g\¸päädÞyçlmmŧ'/µ$˜È».]Ñ×ûg’ÇtëÖMT¬ ¼þö-÷ÐÐPòòòpqqáðáÃò²;wîШQ£Wn¶A¨È®=Ëí뛩lS =…¾¨AýÿÅÅÅQ·n]6l('ò C©Tùsçä²!!!DFFŠZ„AfV»½0eÌ …¨AxIEFFòâz£F¸wï^^^4kÖŒÈÈHš4i‚5kÖ$//O.ëàà@•*Uħ%/XžZÖÄ„¯'/Á\^rUªTÁÁÁáÅt'''Ú´iCii)ýúõ#!!† Ò®];233åô{P–¯XŒñ„¯(%…ß<Ý©îÐPT† ¼ä¬¬¬tòûÿYÿH§¸Ž;ÊÿïÒ¥ P6û ÿ>ÿøx„œgX¯ù¢2¡ãСK)-¥–¥%a·CDÖ.A]„WUfd$ß®}#>•!œH,#Ô…‡idQÀ‚û±°°""  ‚ðª‰+.¦£ %(D0ÐAxUÅøù¯„±~KlEªvAx-ˆgè‚PÁ ¤Ikîyáèè(*DD@áU_\Ì›ÖÖ©4¨Têÿ)9… ¯&qË]*€+Whâb@mû^L›&’È‚è‚ ¼rŽùûÓ³k3,Ík ŒŒŒD¥ÂkDÜr„ ©¤7}4h9s欨A]„WÑ­sg0t,&/SŸøøxQ!‚ º ¯šÓÁ÷éûV'ì+µæäÉ“üç?ÿ•"¯!ñ ]^ai¥¥4Tæ£Æ…BÁäÉ“10§µ ˆº ¯” Ç÷c×´*ÆÕË®ÐE0ÐAxuHÀ¹ˆû }g æF5Y³f¨A]„W-˜g«ÕTKLB«§åûï`ذa¢bá5'îÏ Â+F+Iÿõ;FÇÎm¿`nnŽŸŸ~~~O,Ÿ––ÆÔ©SEÅ ‚è‚ ¼,еZ¼“0fÐŒ,±··ÿÃÖù¡C‡DÅ Âk@Ür„W„F’ÐHèr÷î]Q)‚ ˆ€.¯š"­–C¿~KÛ·†rêÄYòóóE¥‚ º ¼J’KK‰ÏMbä€ÉC×®]EÅ‚ º ¼* µZì I¼z sKÌÍÍ™1c†¨AþÙ€^ZZÊâÅ‹Y¶lqqqòò””ºwï.jXþ¦L•ŠÖÒsè@žžžH #Â?н½½éСS§NåèÑ£òò}ûöáêê*jXþ† ‚LT9ôë÷wïÞåÒ¥K¢RAx>]¥Rahhˆ¡¡!*• €óçÏ£V«‰'""B.ëååõÔ±²‚ èRj4425%ðì1”%¥œ8q‚=zˆŠ„ ÎÏÏ//¯¿¼Þß¾oçææÆÊ•+¹sçƒæÀôéÓggg¢££©\¹²\¶cÇŽâ“„?)¦ €tÏ_è>|2Ì›7==ÑíE*º–-[=‡Äßè,Y²Fƒ……µkׯÌÌŒJ•*±~ýzLMMŧ#‘o~> Š©÷æHš7o.*E„gúG.÷MMM±°°ÀÌÌLg¹ R£¡¡VKÈõ+xÞñF«ÕŠJáù·ÐAøgùÇÇašâ‡žM]âÅmvAD@„WO^.-ª˜cdÛ“ûö3iÒ¤g–Wh4™ yy› ùùàì ŽŽ¢2AtAþ  U’“HÎK¦[w>úè# E\Ý¿Ÿèˆr²²ÈÉÊ";+‹ôÌL¶êé‘£V“«ÕRjh@ º7jD—îÝiÝ­F"E¬ ˆ€.‹sÑÿn•õ0rlTÖúÎËÃÿØ1öíØÁñÀ@ ÝÞ zã˜7¬‚Ö ³,õKp®jŽÂ8S%F ‰O$ÙÏ…ž~$mû–z%Æ„íÜI—îÝqéÚ77øoŸ—róçÏÿü††† 4H|P‚ º Oã••LÏúõ9¼ÿv*N„„°ëôiîW¯Žq÷n}6¤t"¢2A%¡ ú }ªU©Š[«Öè)èV%›Ì‘¸ ÷§]¡úáaß¿Á‘S7H[·‚–†ÖL›8‘sæ@•*¸ººŠiXAtAþW£V£wý&G£nïáâÄWˆ¸ „D OIÁõöm~?ÃØ ùt‹ÜM§º{iÕ`Ésæ¿g¡¯ÏTGG|]]©™©$xà8ê:JTÛŽô=™uãߢ0;F|p‚ Zè‚ ”óÈÉaqTa>t3¼Áð*Þ$Ø"=ÅšïX¼c['!!áÙvJJ .\xf™!FFìtuå@ZîcÞú[O¶¬YÍ¥6-XóãW4ïú±øAtAx½lÚ´‰jÕªVZÊšâbRÕjz?ø‰Åírpk4†ç]ùdÞçÏ|Ÿj˜˜­­-íÛ·f™ .`¢§ÇøjÕeoÏ>GG¾Xó5!G2èÝyÌŸ|]Æ‹WD@„×GµjÕ6lg33Yˆzß÷|Uóþ3+ûÙ;LDná ÛCCC¬¬þüí|c==&88Ð×Ö–9¶¶œiÙ’¹k¿æß¦SÓ6•&­f£¯'zà ÂËFž¬EóYat€Å[¢½Ûvô ,É»÷Zu.ƒßŸ@íÚµ_¹ã«d`Àl##.@Í[ØXk*Sÿóçw!· J|á% ž¡ ÂßYTÄàuìõön`ƤjŒšæM%óºiµìóØN§ª°­Ñè•>Nð¦µ5wÜÜXSµ*_·oÏä-kùüAkú¾ÿu†‰/ƒ ˆº ¼šö¦¦ÒÞÓ“[ òÖ‰UìÙ3›:K©d^—°ÂBRóд *ÇOœ§B}Õ™éë³¼NnôéƒÍÊ|š<’Í‹Æã8RM‘øR‚è‚ðê(Öj™ÁÔóç)4‰O­‚ùñüZwø=…±ÅÅ405åá™\½Èì¹s+\¸ZZrËÍgÌbC;w¯<ËÕËÈVFˆ/ˆ ü Ä-wAø RRRðg•¾>GRyË:v«Lë«ð+&€s¤¤¤ )ÉçÚ™ïé9æºkµèU€Üè·nÝzâò΀dfÆ‘‰Û˜qô;>kC§··P×q”øÂ‚è‚ðr:Éš’ÔÛ·Qïê1~üe MÞüí#Sšzf‡ïçM‡·>¨Á }ûöO3}8ðyI RS™‘ìÆì½3éÓï7Z4Z‡±™øâ«ÐoÞ¼‰¿¿?]ºt¡éçfÞ¾};%%%ôë×ï•ìÕ+ÒJ«ãâø:5ão¾¡[i"n\£Z½ÿÏÀ¦’$n¥‡‘{5˜ çb:wyûµª£êÆÆ¬60 mÄ8ÝmD艵|ÙV­bcÙP|‰á9ûGš§NbâĉìÛ·O^6fÌÆÏŽ;D- ¯´,•Š!ÁÁüøÛ5L>ù„Oœ­ÙyÍG'˜j4\º„¡™9S,¨0àþ }…‚5jàÙ½'!ݾanp.\éÌÃÄýâ‹$¯B ]OOCCC?`¦¦¦¬]»–#FÈË|}}155•[ñ‚ð²óS*‚Þ• ¨¿Zɸní˜ÿóizº§NŽZÍ•£k7z1J£Ã¯e0T KKnµmË|KK¦…¾ÁlÏ/éÑì:-­ÃHÜ‚„g ¦¨è¯ùGºF£!66¨_¿>ëÖ­£Y³f8;;Ëåš7oþÚÿ¡^;SRXú0«m›0<K‡”¯z,˜ÿ–™@ÌÙý ë?Ä÷[f¦¯Ï†fÍèmeÅGaÕñÞÃ9]psÙE}QA‚ðõë×G’$¢££ÿZãúŸØø¬Y³ðóócöìÙ I5jÔ //   ¹œ±±1FFbRáåV ÑðწðÆ`þ4šøãqËÆ}=VÖ+3†¨穪_³Ê•EåýŽB¡ ¿“>mÚ‘_y<3³Gsâö;ç~&,[ƘÐP4þWP.]ÍÔ6ùììÏèÿn¶²B­•F⇓m%º**ùªW®Ìé=X÷›³ò–11x'Cs®Ó²Ñ·雈 „€¶&¼4ÍS‡\•‹¨Qƒž÷î`sø;”;ΰwù ºÎü…¾¾N9 È/(àÒÑuŒ}o‰¸Íþ'éëë3·[7ÞôócLØ8|õ˜™×—.Í·SÙ¢®¨ A]þžb­–¹‘‘H ÃbãW8Ä–2dÚ'dÔ¬Åá£GuÊÞºu ß‚ê–(ùàý"˜ÿU íZµÂ×ÞžI's™\oŸøNd óXך êGD@„ÿMTQcBCÉð>ŠÞ—ëøÀ­7óîÀÀÖö‰å/&Ýäמ8ÙÚ¢/úƒ<æiÙäåääD›6m8øá‡lÙµ‹ùFcð’B˜œ1ŽÎ×biZMT¤ ˆ€.ÞÉŒ ¦„ùcqpš]×øàÍn,:r~‹]’xXT„‰*‘.úuʆ]ê‰ižäYÙäÊ:tˆ6mÚ gdÄ´‰éêáÁ¤k±Œï؇”3ùO½aÔ¯.ú$Â_%þ* ¯¥FÃ̇™xë ‹&QçL(7/]£åûï?ÌSRR˜´d•KJˆ;wãª"˜ÿ“ šuëÆoŸ~ʼ»±lðïÀøðpŽÌ¡ $KÔ ˆ€.Ov='7_o.ž[ÞäÉ|X¹§||©Ö®Ýce“““ùi×.zutEO™MÇ‘ãD>'†•*1wÁ¼›6Cïh ãâ\ùÌg9Qi—EåŸ$n¹ ¯f=|Ⱦ°ÛXmû“ßb8ðźL›öÔ·MÕª;ê3ì­Q"!Ò j­7îуk­[³é›oXbdËUU8KÒï3¨Á$L -D ‚h¡ ¯³¹¹,©bËÁýëQL˜Èh©6Þ÷üé2cÆcÁ<99™#GŽpÀï2IáþÌ6]óÝʰ¶fÖ_p·CGìwÞæ?!U™àýþIEå‚h¡ ¯£B†Å11l÷¿…áÆµ4‹Îâ»-{h:dÈ[åéééü°s'uM™Ùøcô$ }‘ôäŸö§{Â÷èÁe77¶¬XÁ¥’󜸅 zàh-foÐ…×ÂÍÜ\&=%öð>,·í¤_Ãf|?ýJ•žºN¾“ 3ÃÄÄCÈŸ›¿ÒÞÀÊŠkÖ0Ü×—¯6l`[õêê}™ÕØêÜk;Q¡‚ ºPÅ—”°"&†=þ¾h¿YËßž¿ÂØØ'óÌÌLrT%\»{‘F…–Tªâ€Â@œ/c+þÍwÞaRÉŽ­‡YÒ¢?vV±ÄÉqµÜ0Ô9Aüå^jIIIøúúþa¹N}û²6>ž-¡Á”ØKÍóWÙðÙgô9…¡!ÄÅ=¶Ž··7Knäà ŒnÛŸ3×®‰`þ ´â»ÏÛ_~É^÷½|Ø¥3›Úåñeí:ôwh$*N]^V^^^ >ü©¯3Ð †©T¨/œ£ö©3Ì1gwwòŒŒ8|ü¸Üâ+ZIK¢2›7Oqh;–66"…ë+D¡¯QÓ¦œY°€kÛ·³pÍ ì÷6o¶LešcMU«ƒø<Ðáåó¤IÕúúììó+F&îî]Οϼ¡Cãç‡qµÇS‡æææâ¾u%Ý:öÇóá ¦™ÊüÑÓ±´Ï`_UzÆÆô˜:•›ï½Çá X³üÃ;u©c&רÁû5°76%ˆ€./‰'žùºÞxÕ*îÚ‘eï½OXt,M,`Z|<ë²²0|Ê|ä!ƒ8yõ#g.¢¦M%¦ œŒ°´·@ oiɈE‹ZPÀÇù~ãV¾¨R…å}z3²^=>v¬›•µ¨(AtAxž  âÝg½þߣjز·WovöêCl|2-׬åЃ ”$ŽÌ5 W®\ÁÛۛɓ'ãŸéG›:iT»£Û¾)*¼"vss:üç?t7Žoïßçç={ØöËAvwëF›V.Lu¬ÉP{{LDê^AtAx>_À§õOηÐçA7z½õ6¿Ù×ÅäŠýæ.dKR½% ý'¬sÇÇ C- ú»b¤'ádX+#cÜZ¶•]Á26~æëÉ@PF×~ù…6næƒZµ˜Ùµ }ª3ÀÎŽ·ll¨$:A "  Âó¡Ño7~îÕ‡Ãíz’ïCïƒgÙåíÍ;*–”UÇS *IxŸ§V&dæÑÉ©.XÙT•ZA +-ýã?p––ôš4‰ž~H¢¯/‡ãlf&ïÛÚB»öt®]›¶¶ô³µ¥–È= ˆ€.O²“‚€N\wuáL뎄W¥ó…K|õý'h32˜$I<©Ïò¾jtKSÒµ …‚ª•šS·j êVu*èRèéQ£M>iÓ†™ yÑQ\¹t‰37½XYZ W7Z6jÄ;;zW®L ŒÅ­yAtA(sü¿CÆ~¯ZÈÕªñ*Îãøþ…Ä™¿qR&üø`å~Þ½Ÿê à Ž`h­ ¥5JCc\õÌ©•ƒËµ4©QCTº ãИ1Ï|½r|<<=±7Òãr'ŽwîÈŠÆ­Ð:;Cj*ö¡¡T åÀÑ£Ô33C †D@^KùÃÓ©&d« ¸Ó :±µœ¹Ú¾%a¥-±*PÑ9à>½îÝcBÀfæçc Ih‡– Î‡´ú¶‘IZ»F|v;Œë iú $ ½ÿ–d…§¶ÿ–y TË›¢YM†Å>B%}¼Öį~c;4£ùþýXÖ­K[[[ÜÌÍiaaA##ê[Ya¦¯/*Z]xõi´*²2ÃÉŽ%*SIP~qÅÜ-M%õëeÄÛÖÂÀŠÆÉ)ÔeÒ‘ºÜÛƒsVjC-ûK@eù&zDX[€G$U­*óŸÈhôsÊn{N¾óÐ-4LTºðÜèI`Ÿ/aš.w£‘îEsXq–6á× ŠÀ;á6^E)•H6p ×¾:6––4±³ÃI¡ÀÙȈÆ66T+.¦ž ö––è‰$7«Ћ‹‹Yºt)†††L˜0ggg”J%_~ùíÝOY‡Ÿª¦¿X umb+³†ÕE‹Ä K4ºWfcŒgW&¨W¹Û£lúhbD.üŠ™ 3ÁxAbt—¸COdŒ#¨ Ó3Ðò%ÒÝÐôG³Ý0ÀÎÑë!Sk‘<ŸCH IrA#!A !4¡éºNÂbÁÐtâ±(áð(‘0“ÑÑD‚¸!ˆ °neÜê âpbØíÈE·ÛЭVrÆ'L³  à²ZùS?9¡0áh”¼ïž³&+“š~ÉKw5ÿ~Äß7}Bþ¾Eüa#ŽÞ^ì+rqÄb¬Ä`ÝX””úºø8Ýñ”Ïýß| @ÁÀ€ép||\ÕBK@‡Ï?ûìÍؼ?›œI_Oe8ØIbx„Øëþ Á«@EY:Û2O”Æ;IDATz6_åg3–—A<ËɤtI8 =ëðiĬN 4Òb1lñ6!pHphéiidØld8¤;ØívtMC3 4Ã@º!°] ,B&%:Ð5Ðøä$‰xRõ"YO%ë5‰”—»‚ŒŒ t]G×t4]O~×Ï.:šþÓ6hhÓi´¹ÛI妛,ÚOéîg]|íʘyôgï­MŸkî1kS{o÷å Ó,”äÿîWl€Ê·ëúÏÔ suÐu¢¢"úûûMUHçê°}ûv‚Á “ÎÐe±X(,,$¶€Ï>f¶mÛFkk+¦ÖáòåËTUU166fZ |>½½½466²{÷nÊËËM©C~~>ÝÝÝøý~jkkßo@ÿ%Ö­[7=tät:Y¾|9ÕÕÕÓ=u³8ð\®]»†ÃáÀçóÈÏÏ7¥¡Pˆ³gÏrêÔ)S:íÌ)ÍŒ×ëÅçóqâÄ Ój‹ÅèêêÂï÷“H$Ø»w¯)uÈËË£¼¼œƒråÊÓô¶¶68@qq1·nÝâøñã úÜ[ßCÿäêÕ«¸\.>lêJLJÉ7øÛ<3Y}Ì\¿~¾¾>\.555¦»þû÷ïóøñc***زe‹iËAmm-ëׯÇãñ°k×.S× /^¼`dd„²²2ÓêpéÒ%Âá0UUUäæšó] ‘H„ . ¥äСC¬^½úÃ è …B¡P(Þ êí …B¡P¨€®P( …Bt…B¡P(* + …B¡P]¡P( Ð …B¡P¨€®P( …Bt…B¡P(3ù/ëòþˆ¦QßIEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_projections.pdf000066400000000000000000007564551202542755000216720ustar00rootroot00000000000000%PDF-1.4 %¬Ü «º 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /CreationDate (D:20081113013352-04'00') /Producer (matplotlib pdf backend) /Creator (matplotlib 0.98.1, http://matplotlib.sf.net) >> endobj 3 0 obj << /Count 1 /Kids [ 4 0 R ] /Type /Pages >> endobj 4 0 obj << /Contents 5 0 R /Type /Page /Resources 10 0 R /Parent 3 0 R /MediaBox [ 0 0 576 576 ] >> endobj 10 0 obj << /Pattern 8 0 R /XObject 9 0 R /Font 6 0 R /ExtGState 7 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> endobj 5 0 obj << /Filter /FlateDecode /Length 11 0 R >> stream xœ¤½ËŽoKrÞ7¯§¨¡=)åý2d à,Âz[&`œ–ANôúþ~‘¹j׊̮`’§›û¬ÿŒŒ¼Åõ‹ôùOŸñó_ôÏüŸáóoŸµ7ý÷_ößüó—þôü·þýÇ¿×ßû=}摾FuŒ”ke ù+Íco¥Gÿý/ÿ½ÆñUôƒú©ýÿ~ž¿Êxÿzù÷1ÇŸ¿sýªßþü·ÿúù_>ÿ›Øý§ÏðUñû—XÂWJ}ŽžëÈŸ¥–¯Þó,"ŒðóüJ=‡VC¬ö¹é¯‡Pj€Ï˜ÅdŒ-ö˜Š}Ž#÷FjU¼ÇÜ¿º~½ÚÔ÷üUCˆ)Î0yÿJc†<Öàé«åÑz q”M®ú̽¤¨ïñ«éçklúçB4˜d1sŽã2z™_úñ¹\ø×}ÿµÌüŽéë»ØÓþJ1Uèøbÿš­‰:÷ØŒ^+ÞJŽ­Ž’nôÂÔ5ÝÆ/ð_´}fÊþõ½•‘KÖúÇËüõ½kÁFõ&>OîÅï†?–ϱ,¿›¾ß=¿n¾uå»I¹EÓÐ^:#½®£:F¯Ú©©ÛU2Cº·ù.>+g-$KÍn¢’êlë{СÔéÍD•ªÝd:¬]ÌkK}å2ÅnÑù5úja+¡2×R¾ŠÆÖĵX›^·áÐnÕ±×wÉB¿ÏUSoäéK„«*öÛðMÿºB»±}‰J[ÅèÝô%¶Yš–¦N[j/¾ð%YIÐè§]%¹F]€úì*µvÌeülwcÈqJþõpr¶Øty_æ¯ïºJõŠheú)>Oî¥ï‡÷«çÙ?VßMÿØ=¿í>»Iõmå¬Û·s/Ý;ºÊcÐyåõ“C3÷U¶ï:”z7’. ã°ò“¡jy}×AÏZòõÒ–/ŽŠ®<Ûµëhé\VØ4úÂãQ†vgµ¶/±;‹äSú¦—HRæ<¢GÔ¯¡ßOµÌXnôE7cŠ’¨þÕmü" êÒäüÇÿÙø-/5ÃÍ>}Í0$™ÎÅó×)==ŒUoi\,ÐKú¬í ×îF¯›Å@*Îsôi¼kªs¬òLêäêÿFJóãœ:‡!iÖY‡èNúCôïáß+÷ùæýã²ònîïóù–݇Ûy¶7uç½% UÒoºÖ›Î.äµ7×i%誷ÏRh§NÃ\[SóÓYÖP“V¾å/=q:\½§¹ù×aìE×A-qËg=¹šÔ^}жÐ?ö™÷$H å™Þ˜Cï†Æá»Nº~~èÉõBŽJ£Kt¤>Òeô:¿tm4­ÞXûòͼ„óMMˆ[…ú1u}FоŸFý–œ¾ýQW0Û M’oC Ül7ú¬½PcNSwÿmx»Èx6t4nÜëÔ¥Þc¬ .º sÚMáyz/|7þ±vŽÿcíÝüÏ­óÛγ'þ‡¡¤S­ƒ KW,êïö¯ª³&æRìR©×Úã#¢Ñtûή/I›u!J=×9È’l@YlíkÖŠòÒ–¨¦î:i8\1úœ:v›þÇÈõ]2Òë‹0õ½êÁ è.5ÏMÏ4®^›Já“´ªõÂyzSæQeRÜÆÇÐJä¹µ!Ï~„}TWiLÐûéÇ/¨¾Ë`õÒÓßnUš³žq»¤t%©v×à~?Éu+Â\¨=çÛðÅØ×ÏIǸ±/ýGƒÞsÓŽéWžd™oºøP€ñyz/~?¾_>Ï¿[}?ýcóü²÷¼**5_'¬è¡L˜}è*I¾^¤n}ÔPµž:Y1Ùwé"©´¥µW²€*.š.$DFˆŒ73ëô=….Gû®oZŠ.Ýq«íX‘}hêKÔ¦cŽáúhýQÏUF;[ºž~_fAñBÏ Š…”õôËø#L‰ †ç_ïNüMÚ—=Hnþ¼OzŒªô·%k'?}Ï\îqÔ5}=p°èV?òif.6÷—áeeÓ#%²ya_ßEÊGÜçôõ]WtKA¯B¿ˆÏÑâwãŸË÷æÿ\þ÷üÏíóÛö[V}þ’¦š¦¶/f+^*=²GN¶Aõ è”È´%ÚwCé¾A÷ò6ÌdjJ:¯|×#2’þJÙ~ ™Å-ñÉ@Xß&eª!.z½¹²«uRíÑÍYìYüëDoz½p yusÒ#¤g-¥õhxr]UIÛuÎí¶ñÃëM6cÒÿõ ûÒížtmÜÇ*ÿ9}}×-¨-f‹âÓw©Ú­†±Ï—¶‹þlÕq£—¼´üM«Çm|TeýQ¦ø˜7þeè•Ñ/ý‹Ëüu÷i%¤0ÜJ‡øù!}7ü±zoöÏÕOÿÜ=¿í>ÛŸ!êÈ•%Ói†×=?[Åí¡ýtÓjCKͰ ê»4& €0u€ª. ](=ø ´–úµŽÒó9¥ë׿ÜrJ±0ºÊªO}–†3;N©Ë‰‡,à\Æ‚>ë8˘”ж|&M?®K¦±yjìN]tzu¸\üØ:êz_ôëÒìóOÎ?ø,ε3Dl+ë&ÎM ƒMÏXYêÚKpæ/Ò/Ýë‘ Ú ZL½‰9¤=®p»)§˜nãgc¿D¶ëɾ–X¯²tS ŸÒ9{¾×&“Xw<'¼ƒÞÉÞï—ÎóïWÞÏßmœC~ïçÕQÙ¬±qõêÜw»çõ¤¡Ã謘E_¿ô;²Asèe½Ò²CŒëÇ–Å-Þ5Vìщâ4®{^S†`“©7çz¦±ŸGeYäe_*‰ŒàbïTnRÓÍ6Üôz ËÔÕaÏ(®öyæÖ;åéõŽJ—ÓS{¿Œ¯é25|“­_ø×tá?ëžZ﬛?÷€¬õëØvß[~úž¥.J©2m…¤ꦞWr½ëýuŒz}À½vÒ.Nî'¾Pì×ù9yŒîÌ•ÔÚ¼ ïM~Èþ=ú¹v/æÏ¥MýÜ9¿í<¯f¼¨âB‡±¤ÈVí‰(,š ?›º’,‚í»”­Ü‹^ÓftÆp.e€&&CåLmϘ¬ˆ(þ¥oÛwÝê}¶4·_Lo°,Ö¡cl‰1ë·§-qB÷uÃ{bMB•&Ô/äx^d ƒ—þÕt²¥˜§å´rÌ—fÌ-Uùv þ˜»¾k^¥ã*,Û­øSvú®eÖå¢_ë¤ ªšù›â¸Ñg¬¨:d–¥qºæ)sy^ø×wYQ‘¨6ã1ÿŒÿ>àœit‘Ÿ£÷âwÿÖîóÍüǹònòïóù–݇Ûwþ.ÕÌ¥J¶-â¿ÕXú‹¨Ý¨Øx $9ÙÅ]KZ‘4ÉAG*>‘<é42ìN×jmAOGÀ Ü~é8ºŠ}˜ tÉ7›Þxü ºÌ {¥Úw)7ºlzëwÝÄ·±"‰2“4zTì ½Î¯$£· ç2~ÃÛ/S6Îå?vü믋ÿ„°„鿝ïQ?¦Ë í¯C~¸}¢¬»>Âò‹á‘t¡ÈhØÑ G/ÅcF5ÄËø¦¶,ê=yó¯ïši+Dvâeþú>uYêYßçø->OîÅï‡?–ïÍþ¹üïéŸÛç·íç/ÔÚ¿1°¤­¬µì• V ˜·´êv–†Á ¹tô]×z—Srßž Ôß–Pí»žé‘µòslO†LǬ7—\×+; KÒc;2´´Úh„’ôóNÌw=}“‡0%I]i’U'’BÌZ {¹ÑK‹cp«ÕxžgÇ‹’K¼qà¾O]kô÷ä›F÷ÖiæµQÞÂkxgsã–HË 4tJª¼wýF/ÚÔGÌ‹ËðÓ˜¯xÑÆ…ûf–¥v^/Ø>Çä›™–Ò7+q«Sxžþ¾ÿX<Çþ±öïéŸ{ç·½g¶Ž3q§s+µùSÇA MeƒÝÙ¤37o8uíûŠ_Çf'¿&Cà-¬Ïü:jË:Èøý"îI ¬Ê Y–£-7ôhв9 ñµOý£ÑdJ®Ý²èeÅ&­± ¬¥€mšÇ:ˆž¼IYÏY ïáõžèÜë^ Ú–ådŸï°Ÿ°ìÁ|Ï^×ì‘)“AWÚþKz|/6¸l 3Í÷8Zji('½.FÂYw_»ßŒÝ^½µÿ]ª^+¤xðŽœó׿"Õê¥;åçèñ¿Æ¿,ß‹ÿËò¿æîžß6ÛsXŠØ—@$Ù{²ù$†:,×i IÒ™äk`îUަŒËɲü©+!”õ¹J‘xmøÏnéMöæÀ± cx.ÊÜŸuJ;±—,Ó\ÌM­´ü`kÓ-9C¼óê}ò9DÌD1/Ôº¤VY$ecK¿Ò ÒugÉø±Ï?9ÿȬ›?©¦Ñ\6ïyó9Èî–ÐmY?ßRÓÞ×ó§+؇¾ZZ†nH©éBlYzK5µõùçÐÃ’2ÚÀ[ŸOƇådW¤høir2DL@(~BóÔN䯱?Ž{s~,÷kÞ~³|þºÕ¼þ ŒéÁZ%Iç¶ãÐBÝÞyN /­# F’µÉ NÄ·íD!Ùf‘8ã\߉”˰ËË%QI¿Ÿ‡y,ñ+L©&ºÛÓ“§d‰;zŠb’“ ¦ò ìôŸ”d=жŒ1ò^’‘mJº^F'W¢ r¢ž$¨?¼›ÓÞQGÛÜîÔ×ÜI•àþ9º²x~ÊΜFºîò”wj&ïN*i¿Ñ§•öÓ‰1ÞÆÏÆ}oºèÆÉ~$¦¨…’b=úÇ1÷h!Å.QÙÑä^ô~ô÷ÒÜû•÷³ïœCzïw$9Á½^½/{Tªq×k™ƒ=î6»€1sÞ ˜Yú\!0}•®c/#s}­²õˆ´¶LyÝæº7Æè ¿¹lšÑQ«réðw˜ž×•á¤gKOq¨ßaýI½Å•ठ©¯šM¿‘‹OÙ'}eIøÑeŒê?îÃrã>÷øÌóJ°rsוšt;DR+Œþ-;’.¤‡Iu›Ã6J"­#py¥0nôUºd$ã¸ßà¿&KZºñß¾pméJªiÜæ/Õ.I5”‘’ûM~ŽÞ‹ß ïÏq¬½›½Û9¿í»Rêäg¢Zæ l¼–zÓ$à¹cžcKi…Œôûxºeö2¬!ÍoyëÈ›ÆÛþ$$©Ÿ×¡6gŸþ¤MÐ;¯åŠHdX­¸Ì,¢¡3®§$´ï+@6K%÷q…›tCp\Ów<æEž8‚Ú¹4~‰W=ßx'¨ézAÍßá˜×Ôuÿ q>æŸxÝOÑÊ; |Ç;Ñßšn1²€OúÉ ##eXDâûMÓ±x©ç_SûNö"yê—és!½Ñ?üE|žÞKß ï×Îq¬¼›½ß8¿í»gg2:i±þq­&¬ÍN ÌŽÆëZÑ9LF†Ò%¾•v@°,aÑÉæ]^d)$ÒŸëÊ­".ƒbH‹ÇžÈ¤~5)y9ÏggJR¹’þDJ«ä¨¡í­Õ¥ñ`Øð–zÆ;j¾ÑãÒ¯E²_Y ~ø¤¥•r>ÇòÐýdþÃâ„úq½÷;eâ=s©Kü!®ÛÌKM—·Ô7ÉXkYHw”ÝZ?©e¶·ÔÄåì;BùcdÛ2â›À—ÛÁ7q#ÄT¤¥6?ëõ’ˆ½&ÚD‡ÐNò·ÐÏÑß‹vrÿ^ôcîï=sÊîµãÖž$z@¦wDéæHû1Y²2‰àR«»Œ§½çƒT?RÒÞôI ôäZ×®“2¤K:Ö^öÂJãî:ƒyGpI>èäQ罩#¾2غ,nà¦)>–ktú^Ö}ˆ:JØÓûAýa×s‰ˆì6¸ônšÜŸœ÷ŸÌ°³ sÓèöÿ9÷Àm#ó8åÐ÷âüÝ·¥^EôÍeí°¸zVõ6U«©8èÙ<âVA:íexb’ú}íÇû…}ôKmÅ$“v™>j ‰œuXÉ€ž'÷²÷ÿ—îdß/½Ÿþ{ëâ{ï<ۛ蠇 K&ð2¦c긠èéAÈue»6Ù÷ºƒãØšF°9/ë;iÜ_}nM#“[%º®‚¥ž-{!¬¢t ý^Í•ŸQdp˜…½Àù aä°R'i]²Ý—ÂÓcs6i>×óeüˆ]HÙK^E žÿÿaJÕ[.B7ÿbÙœ–ŸB‚Ÿò£hHZ‰é{»,ˆBzKñF?« Ì•oãOã¿óœ¦ÿóKßlíŠ-7œçÚ})?™Öoñ9òCünøcùûÇò¿§nŸß¶tZ:M7G 55•¿/µ–À’ö'þ ÝÄd«ð8Ì"UHß’=Ó Ò8Íi¬Ï©L²¯‚ùŸõYJp§ÿZ´|‚´Ãžüu¶ž“ÑÉÏÐV”™F@¯ìÏi‘ïžL¿NÈKû5ù ŽH¢MMß ýؼrYF§nÔýùç|N„3æv–¸yS¹D>#»œ{ï%µ>7"…úóÎüÐ6ÃM„õåÉÉŒÈxVeúöxŽNfÌk™§Ç3o™#Q¡¡¥?çÎw’Þ5°¶É!¹ƒÜ þÞ­ÛÁ¾[v?}·k¼ôÞ{îÈ ¡T‡jb1X,Œh¥ sì€{–ù7©Ó[±2 =´¸1÷ ,8ô%Ûw-IlHs_ƒ¢-^ K+©¤óãeMÏùË$vYÑäŠvòWÊÊ £PE—IÒó4—¯'§EÉ}9²<¹U(’’ýÜ^ïÁÓi :ÎuWA9Þ#¼““[–/ÈÏÝ µj9Ž'àþ’Ù÷ZQbêOÀ=‘®-#éB/~õØ“1ûmülì‹ßÞÆ…"⾆fØ/Ó'çePñŠU”zñyz'}?¼[;Ͻ_y?{¿s~Ýy+³]xàÐÝ:©lUâ ¡X^št¦.k Øê{"ÔÔ%A{‚ø£l«4K1Í®rª ëŸC®ñª^‡fßõ²â—âm§tJ»‹Ý.Ø)Ô^Ó½Öö):ÿ²3"Ñ@æ¡¥+Px¡Ïö%]ª?n‰ãë²3Q æ¼ño—P¶t±'=í5ònd±è–šûó#G~ß ,žcÿX|7ýsóü¶ùŽl:~è¬è¨Z‹>¾€H-}XU‹¡è$7ûž¥ãhîß©ƒ–þ4g¶“ɧӫkeÅW™=fjçì{$PšºS» ãd_Úzúÿ*ÅE CE–2“Þ‚´2²d‚Kq“ÚnôE‘…šâ:¶~ü¬ÇŒ|›œú¼ñŸŒÜë±ôó—^¨u¤š¼=…‰/ùIØÃR–;³f=¾äU,  ¹.|LÝh9݆§ìX€„ta¿‚YC"fÇð>§_¿:“U`œÒóä^ú~x¿zžýcõÝôÝóÛîó—*YR¡€óÁǠסJ›æXÙŠÊÛÇÊ ëö] ^Æ•º(µ¥¤BÂâúž v­Aë-Äë‘plF 6Ï$C{«5dH3µ1hãÉêÕ‹—kWßõHtÐ|Hbû¦Qª­›aÞè)”Å­Ö.ã‹]m:Ý•æI>ùG #7к-ˆŸó×ÏIýªTA¦ö$©ü_0­3GÜšK«¤ØH÷ÿ._È­(bq—/ÃÅ#% €¤\.ì“haÉz¸q.Ó§*òiª.ÓE|žÞ‹ß,Ÿãÿ\þ÷üÏíóËî[J)ꈴMÉêu(~Å GêŒ6>‘©5K:”ÚíÛïl¾–©«h…3ý <Ø(®¯Pã”BŒ³2À¥¥OËHVìcþ8Ùñ¨g;îÐëˆ8Á-JHxÙ¿‹v’p•;ªòº ;°o'óÉ|¡ºÍ•ôžz"¤]Bßà9oÉIÓâ-Ö忣TóÜÊ¢0œ­“¾†Ûºçvž0íÈZó ÜsIödažv›=~"âR0êExžÞ ߬ãÿ\û÷üÏ­óÛÎ;ªãÉ%¡n>„ý—3’šR6žâcÙ^™D—5V2W´¹»L˜cvL`ãÀƒ„ß·ìc¬Žü®Ú×wrQœëS{uì“‚¤_kZÝv›>)Lú„ºY/Âsä‡ìßû¥;Ø?—þ=}·uñ½wÞºB'® 4¬8F$í'˜çžƒ/Í|²° <^Ýù˿Ȗ䩚ä?¾K/×M’— MÖ±N<¡¾”®çL´{îÐ& µéc!x4=¥x6vèŒtŽ’A%“¦ôr½Ú‹íB_¹rñë ƒó;Ưأ±ÿùÂ>`5ú}™ÃcGßÓ¯ý‹ 3Ýœÿ?¤ŽQìüñm}ËLdVæ 99&2AÈ¥å2|ŽÆ¾6“y·ö¹ö*\Ýn¡cúì7Y%²¤tŸ£?ÄïÆ?–ÏñïWßMÿÜ<¿ì½A,êfÀ«lhŽšŸ´Þ–ítÿmÛÔÒ³s4†RB‰c݆À…¿¹î_ßcáïöc£X°àÇCÁ6ùêïTjúòxblíuÔIî“hÃ@¦Ë¦”¨U)¹5l?¢„õFo1¶ŽÚJfòãë4§fw5Ýø/Æ åA só·!錩<>—üH>OäòŽ•´”©Jãºö²œôãk6üˆ2åçmüiüS‘/ìãÒm$•1´q™¾Õ“©‹A=yñyúCüïáÕsÜ«ïfìžßvߥœ“ ïÐGå!Ó\pþRÕ¿Þx<&Ä÷)]`t¤Z‘"¸ùBÝ ïšîþ´’€‡(zX–¢ ¯8îêú»&”UF£ï:¹Íê×Zd¾Žþö€˜´ðp›N¼‘Ëh&¿@µ~>~¾R ·Ýýû¤lÖíÿqÓ§,—è3ëoôN|ÿR#E®<åŒ2ÒªÕ/Î=hºÃµ=¼?á¿;.ì›Ã¨Q™añcúTc¢K’%?NéyòCøïѵsÌkï&ìßöÞzå#©÷#†2ŽUB5i„í½—¼>À{[­dòª·âI^ĦK¸†W­H¡|K,.?nèK<"/–ñß3¨©eyÉÄ}‡m¡“à~–¼Á[H•`¸«WÈ ‚È;s¿‘“_F¦á¨Ë‡íGO Z•ÌNcwÜGã^G¿¤ÇÎ{M^Z§¼ì»žþºøöáœÂ¹ªÇ=Þè3ek!ÞÆg»u¬}—º8þɘš'…x™~"aV"@?/âsäNø~ð×Ò}¾yÿ8WÞÏýµq>ߢûpûn…çÙRÉr«£ÅÉs–!-Â\L¤ûYîeG¤ünÊ.Ìc×(Ù Åîì¶¾Kù¶zÀùÊ–íEj åzÿdèÎ9ˤo$r˵¸ƒI¹. R÷_%DQ"`ŠVKFm Õ3ñFßa‡zºÆ9¾¬Ž/Z±c;ö“¾Ã‹;òøšž oÇŽ\¾äÇw^™C‚èì¬@4òF/$. rÊmüÿɼýõÆÿ´4#²Ó[¹Í‚c™uÞäçèù¿Æ¿¬ß‹ÿËú¿æÙ?¿í¿XD›!$уÁž‚¥—B‡oå9%ðat·KÕ^a`ʵqjz²U´ÌÒд^aŠj ~B7‹~ž:¯ b+ ñQ·³ÁZÊä\ –±lxG›^S‘9nÂÂÖÐÏW³Inô”ââGùä5>9_º™u å|aH’B{H[}OXO­å‚Árâ+¤¬‘Ì/l~£Ýè+õPJ³‘nãW㦨xò¯‡“GUƒÌx›Ö Àt“ž£>¤ïF?VïÍý±øïÉŸ{ç·½·¬%Rñ§–¼lY²¬ÓJu„¸Âs§ö <Ÿm¬3Q2´l]ƒQ!¸ñXsèî–ŒÙì{ʉ‹)Œ'ì ‰¨Å¥Íƒ„ιŸÉiIÖaiA[¶†¾Œ O_t“á~ëùÏîþ9~w@Í‚v9ùO_ûMÛZpó'݈w-í'>íå„©¬b3\/²öÎÅp¡¶ÍÜ@¢ß ´ì#¦"ܸͮÇ8j òÆ 6ífo›¹ &åt‘ž§÷Ò÷ãûÕóü«ïæìž_6ßzè»T+ÂZ}2®ôuF rí¡§4G§ Åh•èžé\Eý‰Å6‡–™6ºU²C~ʬß³Ü AÇ2ôÙ±"Ìdcá\Ó±õ]¹“ä½³¹@>#\1,ÏÓžj]gëòñôù‹šUŠtæmx‚’`7î häì…?¹r?gO䥂ßÔÈð)ÐZIïé 1BËàrÊ{(`k½ÏËè1ó$דwÂ<§©E8™G+”’ÖHºÑEpžÜ Þ ~¬›ãýXw7õcßü¶ïŽx',q'Km2Z—f‹{zçáñzê¤D*! uRÚr XÒ5EQƒs³s§>k¼'ç¼SÖ€‹xEÌì·ð¾/zìÞFª—"¡MÊqJlzÒePý-`9HW}¡Eôd8VÃe_efnü` ýRžZX ñŽ2õû;Ûö˜>YgøòfhõQ†Š/Xσ#ܙģQˆÞè)DÁ8,—ú¾÷ʯ<¸7$]QVr™=†³vO7á9òCøïáÏÅ{s.þ{öçæùmó-ÔúN˜*Xºn\—|Ö—¶ÛÊv25 ”É^•$h‚9Ö±pv¥QÔU,ˆjH'{8ζÒ$oË’œBtûÎʈ‹²üÅå$ép˜÷f¶ µrÀNä4·²{H%E7.µ§'MFª6h3·á -IåJ Óêdht²lvó#7}P‡§4а:fxé¡€J’O‰ÛÍ¢­ P{°~ž\ ^7œ…©\F¯x+õ86íœzá¾Z•2†t&ç'‚`TŠ‹ì<¹—½þX;Çþ±önöÇÞùmï­žÒ‚†![öñË$Wg]¹öä‡S¼Àõdß#X%:@k«H ÙJ±ÆÊµ§h:Qjøi)_àÎW2†¦:J3؈‰!ÙÙ=mß= ÅqÏuQ' Ó¹6ŠnNpØå.¨-×6ÚÚ‹õ•ê®_¯™”^ûî¦ñ¶âe¯å¹XÿˆÎè#Fí,ñäµéM¸¡ÜÈ)Ê ø­ýXnÃcŸ æzcåPFçìM¹!´Ÿ#ŸÂ;èìñßKwòïVþ˜ÿ{çœâ{í¼ïòãÌyKqÇØ©D [`¦§üÿ®åU­@ªÆ)vÁÍXѽîe©%¿[O$0k­|×óƒIöÒ…Ÿ(Y¾4¼™—ñ©Öï€3.ì'h¦·ÍËô韤 JKéyr/ü÷èÇÚ9æµw“?÷Îo{ïp1¦5\ëXàó‡3%ó’ÔÓUë ðu7YÎâÁQ ì$ÕõÈYð¼a+³¥)QݺžH¯R•q¯€8)^;ɪXQ¨ÊÉßùìzbwŽN€> ñFßÅßãôXÀÔd Ôqá(Lù<ùæ?gOÔ)éÈŒÖvÈî-½R’†~ ?mpðt-™à¤èlwÊý2>°$‚‚ìpãÜQ“0SúeúPƒ„—¬]Äçé½øÝøÇò9þÕwó?vϯ»ïȸÇu¶’ÒvçQAÞé¡f=hÚȵd»óòÇ…'û‡ …'s}'çw¢?ÂFJ%¬ª‘lÉôP™O5ÃH¥åŒ[-u+u§ÐÐeÁKÅ­5`£Š›ƒ|£VâZqc\†7ô¤r5¼°o)à[¤åLøçô)ý¨z>cøÆ9þ!<}%*3ZÜ™C Âà©”äžÔx­µJY$é6v7Þ®ñtãn.„læœñ2õŽgtfª‹¼Ü>ßĹ¿wëöùfþã²îï©»}óù݇Ûw—ûT\‡0ü(0½„Y©ù‹û>ÕÍ)Œ«€Ô ü&Ø…ûF*4¯¤>rÁ‹ ­9IûBë5XÝ8Žê[CÔ-˜áÄˉ§¶n¤@NA2rÑë¬é-(èÙ†qEF‡¬‚2oôzœÈ…áÞÆ×ÛÖŸL9´ÿ¸~Ä\4 þ¯sþxŽ"…bc>1ƒ—üð<ÉèÀ„{ºêòÓ_(»~È‘'R€˜qn—Ñ9CÞê ÷¼ÅôÚ-+ á'OÜÔX²¸/Âsä^ö~t¿vŽy¿ônê~çüºóü]j°ï9ƒ"WZÍx—GÞ$–»](±´Ð ^ؾ| –gàŒµÐù©'¹õ;‘N•~>J*€¿³Ôð@˜cHvN[uh‹’7†å®E—)_¢Ü¨0`Ú0¨ž^G|ÒƒŽÛøuYêÃôÑ ÿÅøgcï8ó{þx«Y7̈ç˜þ”‰Ž ÖÂS'×-‡‚àæ…>[î:Pt£¥ËøÙr×3~·œ/üô;qmàÊ/óÏ–¼^QÞx‘Ÿ§÷ò÷ãûõóüëÿžÿ¹~Û˺ŸÖ[C[‘X‰*—r™sá…†±P%5á¸JˆÍ¹–Âü°`ýŒ³ÆÀÊX„ù”ØJŽÒC¾S쀅ÿÿB•ñÓJluÎHnÜwÎB«H 73™µ¥ƒÐÕ7`¨£—ê‡ôgØ&ªž6Ö=­,ü.Ï~†ý@ßßö£¿¦O³7ÐÞ[xÚB¿¤GQÃ=oùâ«ÿ½èÅå$'GœÐøËet|…Ù «O;¸`6%ü–ýå'O’¶^\ ó1/Ùyr/{?¼_;Ͼ_{?ûcïü¶÷ŽBZp*·ÎÓ¬ÙYXj)€ÑÌ/ÒSœï„hè>Ÿ8/ÖÇúÎ#€YõÄBˆÀ¯í¾yxéô—äI›4EÁŸ´ÚòÕDe ˆªO$¼,gµ¶~ (05òžŽ=zTgêñ6|¶÷Ÿ²ŸG·úfþƒ¯0˜mzÃ×ä±'ðŽü¤Dþ‘ÝŸ 彿“µïÜ;´Ëí³Ô J„au¼ÆþXŸAC Û€òßœz(áß§—äY[faŒ¼§yí ~Ëüãú½fçï%ÿðÓ~ï˜ÏßwÜ Ígvt‹À¯®úÓ4±KƒÔò8b™¯¥:W`HéÂnOâH¥6ʲk—ï™–ªc±’¸Aò¦õÛµÏ@"eƒ¢Ø¯CáaËGßN,ý~ù­O-leUßcgÄv£ï;Y­Ùm|šÆ XMÛƒâØÇÈ#ÎÛè¦ÙÞ¬‡Uh߉#?ÄGâG$yl@dëˤËBÇ¢Í=}™héFzòm|΀'ŽOÏ›7û\€jaæmúôÆnD-е?<Äçèñ¿†?WïÍý±øïÉŸ{ç·½÷4CNÒl‡ùþW‡ k Qq&þmusÎØ¦èõö=‘-ÙÃÝÇ£t<“Ý$›µé}ÄžÖP`E/¨xûÅ.°—3Ì;Î?Ämp‰²=­«Ù¦70 ¢óÓN·ªNÊݼ‘[ã™A.Cí·áÑýd9ŽfسŸý úês9¼¦<‰QÅžŸÚ÷—ø2E8’]Þ87Öî¬ 5oô²R(¦¥Q¹Ÿ \¤‚ºÿÐ: Ø[•†Ÿ?° ”¸tÊXNñyr/}?¼_=Ͼ_}?}¿{~Ý}ÏþÌ@J¦…oØé•Cè¢ï6Èô#%8øh%Í3'^ò½¿(Jm€P­ŠíIÿ?ÿ<šd~gSñMµ›NÜîãëé Ky¡ÕO¾O˜8Z[¸–oìgcD§ù”Q¼¦ŸiØ‚“/ƒ¼Ä—¾¨øwd°h3P)…ºÑã´¤,ˆ$ëÛøþ«ßbðÁ?ûO[K7èÎù[ÇíþZÃö;äçé½üýø~ý<ÿnùýôýîùu÷9;~VËÏà&« :v’5šu™– µMzt·Ï™6§ –"­‡åÁän€…æÙÅÚp&Z7‚”1±ý5p~z•}Vft2>Èn¾šZë°?+—­=®à«ö‰¥{b Бi—­ñÚÇ9tE9K<*–$üb܃0Îsd€×nÚa5X§—²åE¼eXìŽÀòƒ Ú4TÃŒ–'f3Dš #C?4’Ö«‚öq2Nï! ái°Å¯i¯Ï$dhnÁzyüÙÇIìþsèc¹><ã~±Nû²U~ÈìÃí³廊—þ·ÑPû¬S)UA÷¾Yë´ ¤VPÿ2Û÷F%*çcqñŠáñZß55 -ã“o†ã-ì~×dÜØ¶“ªûeŽÝz>¬¦«ú“ŽÔrƄ峎º.sÒ¸)‹l7rp؉8ÛñæG‡MÇ8=ÏŽy /+áê¼ý~nò ì^’¶<æêáaM³2ü•ºÍ]]šŽþwÞèi¨Ó°Û]ãÇå¶”µ0ó…} >»õ,Šm^¦oE½{t+Š=ÄçéôÝ该û|óþq,¼›ºÛ7ŸoÑ}¸}wÔÅSUU,ÍyÕµ¿¸¤½GéÉÔî\qWp¿UuEþ·dN.«ñè0‡Þü?µjçyì´F½kt¨ˆ{›eže ¤WV¤ŽwÕz…`pùÐ÷RÊÚ‚(Ðå ³|¦ësä­u‡Iõ2¼¡K¹Y,î`øî½|7©ù1}}×URx„BÝ»ô§ô’Ù´€Æ„ù8eÈÁˆ8"ëž6-J»Ôñõ6p Ènˆ‡7ÿÚGÉš.å¾{‚¿ç¯ïº»å}–‹üý!~7þ±|ŽÿcùÝüíóÛî{ ï²nUú¦Çe”òù¹¹ú†¼+ÔN;†ÄZiz@Šß.qý üާiÔ:|t.ôV-£P ´=²¤ L ËŠ5ß'<˜xK¥É¡®@;…Õ˜¤ æÇ‘Ó†Q„RÒmt=7ÓzúÕ½òfÞª;Ý|w¾ñ{ê³õH‘NLßA¯’#BG¾þ'>ºÀõerÇÚž–\zç)â¹þ°Ž©_¸ÏV®YZ _î2{ƒÀ§”•àöExžþ¾ÿX»7ÿçÚ¿çnßvžíÍíšÎô`¦+]&/€˜(˜æÚ›'—v&¤ËwýwKfV1‚´Ø´Àë;ÞRqW6`ÇG´t¥»W%ÁªÄüêº(mä$ð(ãn{§é6îž•Hs8=Þ%€+b]÷à ÚåÐ~ÓÓµ2ì:J¸ OÓ?ým2Ìã…{>Ã}³@*äïÙ[OÁi}»×ò¾…ÇgºeÊžÎ+t î’v²µ\ôä&ÌpøÛèŘ¯@óÌ“ùA·QÊ1e©sêú¬‡Jì)¹7ù)ù÷èçʽ¹?Wþ=ùsçüºóŽªøI:PE}˜O‰=~ý€#ìo–tš}VsH}×;«9Zþ²œS<L«߯G…Ú:Ç$üJçÒL¬7e5Cœ„ðÇkLÉV.º”U²TÌuÑ÷=b˜v°¬pšcØy%nôºe&¢h/eÉ_’‹¶—ÿô `5”øô(~M|†sìOÊñK|¼¨RXÇГÿCÙ§9]è×Å0Ú9¾¾7ÌèÐû xóÎ!X!Ú,tà=ÿjñz r‹ùyz/?¾_?Ï¿_?¿}~Û}88 \7ì+«N-è«ÄiWõq²bŽ:¢}Ï~‡Uj)Ï#'a©*T¿‚B˜l~Sc!–Õª}¥­Ó+èKž®D©«WµµègIñµY/T³êìlµ»šlãÞKñFoO¾”ÉUÛëGÏÜ3dI.¿ïÁ{ú²fêGW@ÖÍ=}qXþåWö²#WîßñXL¦ öBÞ¨p#C"×q¾ó$W¥ycŸ|ô¤ÿ¥àmò2‹2uI¸ÝnÂsô‡ðÝøÇâ9þ¥wó?¶Îo[ï°”èÁH.¾E¿2H$ÒÙ–½œ¿9Ž<ˆÝ¾×a¨>a·oB7n}4”}Å*gÆŠ F«EÀg—ûÎþ¨8YèBmôd/ÀÐ,8Nî/‰c£pYö ‘r¡©nËÛTpôÔ*šÑ9F¼ U^yöxã¿ÿ¨X!nSã5j©NuÁ³:ñ Žž¸ÿ lЖOùFN­ ]³ómønì÷UItaŸ­¨Ý£w½äÛôµwÀT&^˜nâsô‡øÝøÇò9þåwó?¶Ï/»ïãäf†D]ma·n ±ÆE3Và]É15øÖv;…§ a¨¬_Þ,áI‘‘@ö°´åpÁ†”ŸÜ¡†þ¦Éµ­ë:39}+37ë ÏuR”)Ž7z­†Uæ”Rëe|¬‰FÕu­«¶ã¥aºåþ`xÿœ?IÅ4Sâ! §HOŸ‘jj$Ÿºk+¤ÐÞ®ùBN¶; øùå2Nã^×@¨;Žüsòú¬% $K.‰¨<€çô¬“Ž0´±ì7zPZÔ¶ºÃc¾ÒAdܸ×)j4é$Wõ6yñ‰¬Né§ðý!|7þ±xoöϵOÿÜ;¿í½ã½çŠ^@‚i]¹Äm:Xý)W"½1Ž¥Ýè4)/a®t@ê}ˆ.Èn+÷¼Xziíéƒiõ/–a/Ê4PÚãî#‘û Ë.š¦}°FcÓÓ1€ƒÝ26Â9®R>OOÊ= æÓ ÛOºfо Ú=¾øÏV®õkåi‘úš?ŸÚÇZ¾¡y_ò£¦®œØæ| Ÿb°¶©¥ =»«òˆcO—ñ©"¾çÉ?G “ñâ¤Ëü)X2@ònù÷‡ü<½—¿߯Ÿç߯¿Ÿÿ±~Û‡‘_@!åÑš@¬ÊSkÔ³´Sâ¯`½’«r•†Fä>nì¸D¦ÁÓ±ª@úã“F[gŒÈ±*c) Ôú§ïÞà¯w-SY…µ3ŒE.}ÓKóoæÝ±³yçŒåFOs€@­rèǧnxÒÛ·ÞØ7Ü—Ú>Ñ1y ÞðæzhíàöOáájÔËlŽÉå⨥“K\ó¼!ëÈX÷c7c¼àXžñO¼´ˆ§2®~\¦M"u«˜ub;È©»Áß«öùâüã²è¯y»=óùÛ‡ÛsOÅgÁ¹c¨+£›çAb]ZiDKÆ9€‰hß;nr¬Ú¾‚ê´¼k©Ã§*â)¹œÁw­.£A“)æëyÚ(ëñM×(â%<ÑEkKk^=²U–ýVøC (9ß¡ä=¥\>ÔoÃCé¹=°Ä˜·–±0¯¡ëÖøß“§ÓʃâþüSv 59ãöy °É½×{;‰½žªÝ¦,ükìõÎñ'Žxpž’w]wÉÏÚîEš S—æ!´ƒú-ócè÷š¬»5ÿxÏÛí˜ÏßwÜr7en¢¬3fq°³y$ rËhgëÞÖ]µïójMãã0’¼YÈ aBçðâ±;š¥u§z}·jÃQzx*ìc£0wÐŒÂ.ȹÖS¾;–±bZËwJƒ~ßÒ^²ö}i^Æ'§~XEMXXŽ ÃMš;¬þÌì;,Qü6O7»Ÿò£,jÑÒt‘¬§ ÷0nÔ,H¥dy¥À£Wã¾Pa4o܃áƒË¬Ä4n³2Af¶VKƒ9¤çèé¿Ç?WïÍÿ¹úïùŸ»ç·Ý·Ò”Ÿ^&1†·#@Õ§¥’®ŠNýQ*n7CYwp$ŠUâSë‹n4K{ îK¬p¬Ó—¤ÒP†8­ØkÒ²§>A7ø‘ʯQV5'KœtÙÄôI‘6Ën£Ù©Ûl;lò“Úú\é  Ökör›>ZÚ‘~ªß…µß¼[Ÿ.Jjy —Âøž9¶B^®Ùïä?‚3r tÀ"+úÖêSV,û oäŒßQ 'þ¾Á~ :öû€*gò6ýNΨnMõ&=Gï…ÿþ½r÷ç¿gÿÞ7‡ðÞ»Îöeµ:i¬­¾¤ƒY»8–9T­ÎHŒžŸ Ê@WYêlµ:í…¼·2$i@ v{Zö  TŒúdPâñšs>-8WÀºÇÕ2(’NLÇ ‡žÔÚZÏžž¬Þ–:ïé ¥‰§'-sÀO ,@CQö@ºð߆ñ_,ËÆèßó×w]³þZ;æ-?Rxs´ÈÔŽãXyaŽ } Ô.FºÇ„q¿Y9 –Êrð߬Î\'+OöÏ1ÿFy1@\`úùyz/7þ±~Žÿsýßó?÷Ïoûïâ«§ãP¡Öq®Ên]d.¬åˆ1 xÉhÛÙÞh'QRxJµçbß•˜Äi:QŸ ,R](®Ët¯ô|«­=®ú`Ý: ]JÍ—¬ë„×§Òj’¨Ý‰h/W´~=Uj„o䣓E—C¹ž¿è Zñ„”÷Ù¸—å;Ò“|öš<¸D`ÚŽ8záq-Ó3ilÃH@rÉ«EOz¼£dNH`é6~3þ5£¶]ýŽÿF*жÕ|ê@Ýü1zR¶Î<ñ&?GïÅï†÷‹ç¸?ÖÞÍÞoßvÞQqÌ-Lã‘wE®®˜Þêêí•h­STè|ißeÿÎF/ŽÇÅ̇©þTÌÖNK½¼ûfÒ;p½ E ‰F¼`éQJ…ÈyÛOxØ Uü(‹ìªÁÊ (¢†H²7ríKëÒKi·á×Þ:î’BǾ¬Ø—¦—WhÝMß²Û¤ JIªöOñaåPÕËÊK&Š\9²Ýò¸ÑƒmGL+÷6>Kt%¡•Ìÿ\#¹ŽÛü;8˜³¤ùC|Žü¾þX½7ûçê¿§îžßvߥ¢³á«Ù ¯–d¥„á¶+:©oê å­6&øµ²Ì˜o´ŒaéÆÑâ_¼6¢ÑìíÑ_b´Ún“"Òj—ävÝ6«x¨#­6+2J©Dl[=¢Ý0Ýã»™ê¤)ðºbgÆ}ÿ²âà­Æe|}G«—i¿½qŽÒ,"é6¹çG{û9ÿJ…¹Ú·7ÐÉmƒ|]œ}«€…¤È/„ÝàMOI&3£~Ò1>ꤕL>ÒÁ>¨µ’gFû1}F0ã¦ÌE|žÞ‹ÿ=ü±zŽûsõß³?wÏo»ïr«’™F‰­5Ó¢’™MMÉ}«»Ô¨*XŽUš_ÍÞœº¾+´F¡^Wø,¹`ˆÍÁAäÖÖë…àHSöú\‹¤ÎÀ؆=0”ùh2¹?ŽãŽ%Xï“®Wi:s–r£¯ô\ô¶Æx·$úNÊõüãõÓ wV?}Êàɯ2Í_§ø@Än~¢Ûµ"c™Ö¬oêIß,9-jøeønÜëbÂ.»pß-s^G­XÊò1ûŽ“3+·Fn‡ôý!}7þ±zŽýcõÝôÝóÛî{PVæd§ð‡( úÛ)mÖ§€ƒZVMºK²Zis! [Þi‰,ö7@·zýN¹g‚zƒr^ŃfeºNƒÐÊö è¿=’º](lO’7ÇDÕ«7ún%8ßïœû×øÀ楨"¯þéO85PoôïùÇjU8YOÙvÁ¼Å‡>FQY}Úƒu,feé¥q!;w²àQ:Gëp~7÷Ý›{ûÎöÒ6•}Ì=šž[Ûî1';Oí%ïÇ~¯Üç‹õsáßwûæó-·÷¶;ì'¢ªc®džÜ&J²¸1û ”ÙÁ:dûà%±ž&c.ÜíÙB˜x²cjx&JC§HòÕBbêÆÙù»¬|k¬ã…ÄHY|ÂXr˜-aCm‰^fýLÅëèró~S×@lî2<ðL'†fpaß(¼­bI7ûu£P‹NsÇ¿éŸ5d}ª2» |Ž9ßÈ¥j4Û2é:z7îqF˜oÿàž>¢4ƒ3h‹sòÔgZš…:oÂ{‘¢îVîóÅûÇeá_3o›Ï·Ü>Ü®;^ù`h> S—ÕN)sÖ‚µ\þ›E("16®Òý }.B|!qÅ%kl]sd3ROÛû#§Œº‘II·ï¸qu“?p0ÝÂad[b…ëYÚvâÎx– 4 (]¢VHeÙ'íFN!ˆŽÖïû2|"u jÆ~c?ûäQ–'òš~¤ù«n­ÄFy‰Oú[¢öËVRpÕÄš¬ ù¤O÷M f¼ŒŸP tYAÅ…ÿd±Èª ¶XK$?Z(ÂóeÄSzžÚ ßîÏsïßÏÞož_7ߓ՜¨è²¬@Æ,};î¬æÔ€ß[åJ Ñ T 0îgœ€+Ð@뽚 q‚¼cz“ kWƒ!‰'ÎÁzuëM\Ž:ÉI"[!mÐ Ô–RÊj; `M þeÞè¹£À_ð=š5K®‡ta>Z ˆDßj~Š“Nž«œè¶Öx>ÅÍ?…§ï-K µ äoo¡7K·åñôäbÓŸXÚ\é—ñ¥ À>¿Ç…ÔL’æq÷ËôÍÃ;ÕÖ.âsô‡øÝøÇò9þýâ»éŸ{ç·½÷”}70˜¬faLé˜yC1rÇÁb]ð¦U V'_¼l#0šFRìúÍ£›úwkôrª´HÞ‡’ˆ,s/”íZÓɈ¾ã-"ûˆ“Ô =ýþ€Z¥„/ÌSsÅ =MRiƒ  ú¸ŒOÞ¤öm+6Øö›ŒTE* ›Ûˆý9¹º]¤#êG×âOùáãnÄtfžâGê×(YóF/í!¢YH…ž—ñ)ÞœôNZhÛž}k¥?[—éŒ 9ƒåâsô‡øßß«÷æþ\ý÷ìÏÝóÛî[h8Á‚D³@' _»ä*»j§ÛÓ5Uªö¼Áºyÿ`ï­0ýÔ¤SlƒyU€Sÿ†K*@¥päìi›¤×ñÀÙHYÓb’³Á´è™^ZàM¾Diùp´ŸÄu´(GomŸ)Çñ6Çÿ±únþçîùm÷y÷§ÁÂÐÈrŒÝªÛOîÅï‡÷ËçÙ?–ßMÿØ>¿m¿¥êo°@º_É\4Éè´óYhŒÖv¤3¾w†hk·ðôhÛGö¹õµd°AÇÂíå…ÇdëÖŠ¨MʨAGLåiWéZÖ-yÍrÑ$ "ß Ðqvj¹!5MP?¶½Ñ}£ ^çñqqûñõÇFŽðØ­c_ßaŸùn4Ä÷ô!9‚Éywqâè—·å÷=m+9ìm\È«ré¶35î½Z3NR3:Þǽ!.P©ÙˆÂS¯Ñ½£Å"áoÑý$vrÿ¸Œü^·OÇø{Õ?ܬݞùü}Ï­ÔeJ_$½<†šMœ;X“’d>O™–ˆ%Ëz‚9…¤¹íäPD¼Ù¾9˜†¸s4hµ ÔÙzb(¥"¿<<Áš´vêõB·@ßÉçS™é4H ÙB²Ðõ_{}šzzÔoÂm–y > Ì“zýæžæ}ÖRµ<ùÇïÙÓü/.]øûGzuÝáxF–Ñl9ôWààBo®ÀËÖ¸{?¿ÇǺ@ùÐjqá3:®µ5„÷ôõžã çvŸ§÷âwãËçø?VßÍÿÜ=¿í¾£É¬¹´ÌC†ºŒ®È¶šoºú$rd¥ Ó÷ܹäM»‘ÿ²* :ÒÕÔ°!iTN!C"Uë¯UÅ¡ß×Ò¬*¶Бu"j€ó\Qf¶STnˆšÓ€:Éã+Á2höœÛç?ÔDÀS(†¸¹3Üà€ f°z{¾ÿa^ôÀ Ò©oÖà&Og7© €Ñ.úŸÂ3ú …œ–g±½û€ÊR*æ¾È¤–’Þ·ñ­IŒ,9+Ç;Ù¯ÓÑhù5oÓ§1‘Y‹ã”ÞAï„ï‡/ÝÉý±ônöï­sJïµõàP‹ûUs.’¦‡_¿ãßÚ®yÞ0|ªr¦ÈÄòh_zÍ:H s»_1©sèn¨ÌVy÷E؉â­X¿»là;4ÎZEÚǶ¥Ý¾@ߥêè /' ‘ðÜ$ßÈ¡/z*©?¬Ïò½Ç4?VSÚSº°/ùÀ>¥°ßÈ¡?§O<›JýòÝëúô„Ư—îÇcOC¶žoä–ÀÍYF¾ oÉ@m/×ÚÁ~¤ò¢­>9ù2}pR¥|Ë·vˆÏÓ{ñ»ñåsüûÕwÓ?6Ïo{ï‚ êFÜÎäŠ@BÔ¾›¤~4’ŸKÙyjôd’•½Ð^-$­Z ä¶¾fOðP¶EÂíý[JÏnœ’û“T4cqe§=[³uÀnLW:ÆÇï¨E« Úño´hªmMŽù=@ÿ€xs“Ÿ£?äïÆ÷ËçØ÷‹ïfìßöÞS%–«7d.œJü"E¢qÉÏiñÕšÖ÷NÓsJ׃C%™Þ‹ÕÈw%ÌJm¦ÔíID’ÕHÍ3GçFÜ~ü•ç#€9З^W«‰2ÂŒ–¡@àyEï8èƒÌý«UØåé#å<Áà8Ûmüh­Uèì»À,=ÿÖéƒ&Êz”þ=‚{ôÞ¥MÖ|N ÑšãZ61¥Ô+zw’ãœjDhÚãøc[?O*`/ö­¨I‹}ß“ïé'+„{6¦xŸ§÷â÷ãûåóüûåwó?·Ï/»ï‰)õDë‡hŽo ò©´cJàe:ï*›>­'ÕønÝì­¹¸¼ze¤;öïÖÍ$ÆHS û™¤J¦êáf½Ïúò†ÕI"Vw\Gv¢zno\Ðyí)ßÈ~ã¡È}öÛðÅš(²£ßØ/ƾXèßm³_Ó¸.ʼš¥?‰r/ñ|Ç;ÃîÆ Ä£î‚\f+7zÝî–gÀëmüjüë'ùì'ÿš0i†:CóÈÍ¿~ Àj²É§ø<¹—¾Þ¯žgÿX}7ýc÷ü¶ûV&÷õ,æk+Ù†ºÕAzÖ~Ü­OIPß¾ßóõ;× G%6ÜúÙb:>¹VÄJ ³Ön̉låyÞ'íX-Ÿxe”S…½ûX»ôgk´Ó(«“AÂoÒœ7zôÿRÛhí6>AäImÍêìq🌞Èñ亽æO²ÀEHu?P/ùE˜Í”Öô­÷‰?<ÑI¯óG[d̬yox¦¹pÀÙ}°Á±Õ¢5rðÓÇÙ¬% Ìã">OïÅï†?VÏq¬¾›ý±{~Û}ëyO_–Æ«4no¡D1ôKoU’}ÐCü¹ßa®üè¹ С•Š ºP£M랟5Ⱥéº_ͽ­Ó¼ç—ñŽ,àEŽ30Vs„G÷*ÖµKÀ´Ûƒj‚Þl¿‘s;ñÅ÷£'j èЛʕûdÜW«ÇxÌÑŸ“'­”Þòmä§–ù%ïk"‘KW6Xhu5PK™Œf l§RªKĺ¹Øw0/‰–§ƒ˜–{Ð!޳Ðï£Aë\n1˜kÌ>XnRÔÇR ¾½jä´Ñ*IOIXè!àPc³§''O Fé\S@Ò²u¶ =èÃî‰Þòe|š£&Òi>ua¿‚çC†x³œ}g‚t´]³@% ™‘(ñ²Æ Äè¤54ñéW†I+pK_sàFˆÛ®½A¼bÒ ¶Ý¨«­-èÀ»¹é{l“dÇ\JÏç?œð=à™'„½Â®næRðËk;Ç·éä¬]r¶YaÓ_VÙß[¡g:PØz’$ k¦z¿û“8ù¸ñϳH‡¤&å6}riIåÞ‡ñ9z'|7º_¹ŸÌ¿—ýã2÷÷®ùü}×­¬»Œ·ËJíÉ…¦³"w… fUËéÀöR¦FOð'ia•ö#¡¬SD§íHÐ%|'3C0„=?¶¦kÔ¬´‰À@=A³Æ‘d/d¬ï7CÖBu5¦¤+%oÈ:yž^–ªQl·ñ •^8­TÏ¿2^nf? ‰‹[®‹ÇË°ÒæXl£§Û!¥Ášèœô$Ñ’~®Ä9~³6H˜¤ºœüSmÝ€M¼ÍŸJ`,¨~ŠÏ‘âwÃËçØ?–ßMÿØ>¿m?ï¦'ä?V{2[ +pn4µ5G9…iu7³¯2ì(´žy§mÕ•_Œ9RÖ èÕ&ca¬îjvR¹/ãÌýEO$vug³¬£¦,%Xq…¥IáœÖÝ Ç6]v¡Ão7zD›+=–­âÇ×E\L sô+l§>-W‰›9AƒE/ýë_9“Řu>)ž1[w7[‹“ž‹|uwKó6~6þñ¬_¸×_·ŒaîæeöÍŒ­·Ûn0ý–ž§÷Òî×Îóî×ÞÍýØ;¿m½e)UàÉšuʈlš4íÇ–¥DVeÖ`€~©!þ§¿t f‡•EmÉú½ô]ÔôLiW4Ðÿgß}ú ߘW¤Yj’´%öP0m}ÓÓÎW;«íþè}–Ý'ÐÓëi€ËèMJ·ñu ʉ›:^ØÏƾ¢ Là&Ÿ¬•çUÍèe—€²•ª¬EúžMvO~´9Ê[f4wy¨¨˜ìóFÞˆKIÈyF¹á}”6&J¿±_Œ}^ì?…Q?¦Ï¥Canž««Ÿ“^³¤ç6´…ˆMßZ?PG—/äT²þö´ ø1|1ÕìV/öaêÜSÛw™~1Õ¶gfž“ž'÷Â÷ÃûÅóì‹ÿžþ¹y~Ù{O“Fɱ«ÙšhèÆL!ÞjSÓ-ëwÿ‚‘Ç•·Û=Y"´a\ ë+þ”ÐÃî"ÞZ¢W«®ŽÝ†„ü½ËßB™?ašJ5êné˜ô5Åñ4©±<pcW—z§bãB¼¹¦-WæŸk#ÓC†.þ Yô} ~å§IÍÏÙsm4YB£KÏZjv) i×—YQR¤<Ͱmzê¤ âžæe|r8Hç5ô™ƒ{+IÂÏMìå2{"›´=@O_¤çèé¿F?ÖÎñ~¬½›»ß9¿í;væúü×O­™nla)Ôäâ˜iLæ>BÐS²@æž?þÛýü/ŸÿÍ´×øù¿ÿǵ¾«¿Vk©Š¢Xëݱ:†àý¥qß\ÎðöE7ˆ±Cÿùÿ'¦Iÿñ!›§6,¦¾:Ò䣎²„áóŸì÷þûÇ¿~Ä=ÃA÷tLŠÄ‹ÿçß>ÿÝÿ>ÿÃÿûñŸþEï~ýŸþbøüý¥ÿþñïÿùóßý¯šWúüçÿûc´Ÿ£ Çµ‚È(ÿü}üOãþüçÿçóùçÏ‘]µ¡€ù1® &Ï £ùÁbþ…E+¯RǵKédrþ]&ßKsc²L¾i~0Yc2é®Ú_ÄÚÚÉþ.—ŪÇP0¦.—íàòMóƒËþ—u±IJ„FâÉHß#—ñïr‰rè ¨–ùpãr\¾i~p9ãR–W¤cGé"Ëôw¹x6÷‹W.ãqpÑÏ£óÛÙ¡'oý1Ö…Ïü÷ø<¯5ÞqfØ-n£+Ño§ÇÚ„È$ÌèJ}­uÿ…»pºÆ¹6Ùè8,Ž»+ÑoǦÊ6 ?ËjJœ[×$¤Æßß½|úÊä­ó9{¨ã˜xþnD¿øë+Ç Hg:cîï^:=ù7`sœÏÜè·sR-\ÉâZ0ІÄÖÓÙøK÷ºé«Ü–¢x»æÚ¾­cáù»ýv>ÄÍ®àÏÐÞiÏl¤Æßß½hàO'«=—Û>Šé+ѯGƒÍÖ·“VSâ¨FjüýÝ+¦¯æÝa¿âk õÇèŽj«;iRé¡q÷ÛÅòãþJÿèDüü»ÿà ¤fÜÔT˜‰Í8)'éóŸ>ÎkíoÿàûëÎÑ_ßùërY¢6™Òôù/ß|ý]{‰3Í›uG»–‘o»vÿóÿñ~ð«yþËG" êÑðêÉj¿<ÿæäÄ}˜v?ûwþõû×>Ðÿõ÷¿ó?ªŸþÓO_oš6Pˆ²Y Úú<lQÖhRI“Ê8ãjHFÏ¿@3‹!“’·Í2wÂú.+UvýH†(Ì÷D¢Ñ$µlµå¶ Lz=EqÊú6ýšÌgC²»A8ñ½Y}´¬ßföˆ°Káëˆ|ÐSR5(#ΨìÇ/Ó|N ™X=¾çßÚdcÔdYW~þø„ô2˜æ\ôoùé{Qu„jH'‰Ž÷¹bË‚ér¡ŸÖÀv*äÎñÅ•ñOÙ‹!$9þùÞ£¨ äÖÏž¯xøé æ!½ÏŸÔ‡ìýØní>ß¼\Öþ=w·w>ß²ûp{Ÿð/7Ù©UmÞI—=| ~Š„w: dÁ`NËéµòäÔ¬Ç:Åó»§VÀÓ`xé ½ÑF'QYk9GŽmiuÙä{¶Öí,äÄã ÄòL;Ý4–aHÑ q^È­Ë 6@1/¾ú¥¢y‘>[NæÉv§ê“»ß3'w;²«÷Ù_‡à¢™."Î+[5QsÁéÖÇ÷ ïšMçnÑøí2|Æ=¥ß£_¸'2Ê Žûv™½¾çJ`Žáyz/|7þ±vŽÿcíÝüóÛ¾sž^m_ÛÆ4mY-E ]µÈ®æ`7ˆVzl‘[–zD Í¥‘íâäl¯6IëÀ:Èß9…:"•YœÐ tk%§%²¦É]^wJé h8á|çµpõX([ú}.˜z#'WM‚ÓecÇð$1ˆ@IÚýhìS’m§ùéÓ œ& ºþ-½ ]Ouñ.J²À¸CH­·6\¹5ZתBÎᇱߩ[-7ö7à ©[?‚súÃnPòl7‚Ý[zŽü¾þX<Çþ±ønúÇæùeïÙ ª÷qN«ÿJVíNàW·ÖÜñ2¾Sd\Xx3]Ê.^,æ¡§€IkŽG c!Ég½¯t!L4oëOµ:h»$w.ú–0žÖòT»’`Æj©«ÞÊ"8‡}õ[@e"lËžVÂ)¿dÞÊc|¦CÑÈŽ9ügã?´üh¯Ù“50h»ZŠÒ#ë@/h«#©iLG€#nôL—þöÅ–ßÞw‚d3¼±Wë¦r›;­ÕR¥ûSÈ7Ù9úCönücí÷ÇÚ»Ù{ç·½·vç¤*HsN+'HWoìày­Ý©wGɈÕЙ‰óÄ> §?ÚÉ|™†Á+'‰fJeçža»ÈZZÑžÐúµíÒ°Vjí{´ÌÀÙÊØÚŸ”&r[#Y/D§;~²–,"yГ@Ê=×Áe|Ë,H³ïþÉ?™ úýf‰¶{…Îß2‚˜Ymù‘až~òí¶W¨€kÉ€H<}‘æyè­ÇsüüÓ«{ Äxþù|a%5žóç;}WÉš§ør'~?¼_>Ͼ_~?ýsûü¶ý\VL·?ÛVc]`:»¡L‹¬Aê­º#ö«h —#t—þ’F\éÓJWõe6(cú\çVVf)@ßèKe‘¢{M,¬¬•bÛ²Zfåg6(cDhI+«„O%­~½)óthj=߯gå&=Œ–Jt°OOy¦ê\ü»éÇ/i^ ÏncØ‹OK×H}­ Ì)S¡\D¦ƒÄ…ž òï£uâ9ǧŽèï€Å…Z>å¬Ï9 b¦OyG¬ßòóô^þ~|¿~ž·ü~úÇîùm÷y´ƒûDpËPÙÑYÄßÝlú^¾ _‡¤Ÿ…«ª¿:i—Ú–ò.ë!¼“Þ ßïïàÿ\ü÷üÝÞ9ä÷ÞyNŲí8UÂj¿Jg@À3ªõžø›YÆ ÓRžx;`B!ÆõcËòâ™ö)+ȨC$Nãºçõ=E7[¯Ë3#=¼’˜º6ú¤à4&Ú¯²4üLf!} ¤|ëPDÁE¡ ­gÊ“ë#™êÿ~>[¹GÇA¹u÷7û&P* àDߎŸÓç°Î uot'>ð°‹}Á‹¥[#«ªï®œŽ¾â TàÇz¿ÿtpõÆ?ýí*Eö!•Ûü1¾ :¾X¦C~Žþÿ{üsùÞüŸËÿžÿ¹}~Û~‡‹”Æ+–Åf† eÉÌœVð·å&£dŽhU³ï ˆw-]Ü^2 3Øs)ˆÄlÀé/ «ð3Vû”û\È/|Ea¡|…—rÈH<<b3ŸIV׃c8iTCêÇÙXË âȉðÁÀ­Q.ƒ“u¬GÓ ”Ê…yËœ`/„òí"ü1wjiÁÑ£ÇӢˎR\àè¹¹ûœæLýHzZ*¡Ìt_ß»­ò\=<ÿ:H@7âRé2ÿ™ dƒ/òsô^ünø×Ú}¾™ÿ8WÞMþ½q>ß²ûpûî0ðQð€I1Yi«‘WV³µV<9P¨A»É`'Nê3ÊíòF€Ô¥)s*m¢ºæi¿jÀœæÍ~‚nc戟䟨c|{C:y¯qíÃ@ã,àgˆ¹†Cì;/4’®èANzAsý2º®‡1'Z@Hî u%xN,ëæ¯cö…V_ð2ý[zúb#òFÞþ‰ŒNG†v£§A(AØZ»ß"Ú;Œâø§/=»ôêÛüÁ‹²®Ôa”›øý!~7þ±zoþÏÕÏÿÜ=¿í>wŸæ¸Ð‡pÍ¢Äv‡ `ü¦ôš2®š"¾ëZ=¢X~¼9; 9Éë;mW2(·c;3"oE¡mžU»éoÒ3X=#ÎŒÎ['ÅÄÊt ÿ ÓCÓ¢&|Ç@œªÂ;Í:»ô†>nXZqi?¾¡WàJÉÖûàßÐ/¤ÓÕ=ü{úÍÀ3d i:¾_3ð–h¾|Al¾ŽüÇ®PsôV­G˜?ç9|7îA&ßrŽ{30 u|ÆÛìÍÂ,­÷v“£>dïF?ÖÎ1¬ý{òçÞùmï±Q3“i^^@sù¬c; (ƒ•מï4æ50õbߩДÑbyÏÙ :qТoŸ zCzË:ÉH°.䎆ðµÌÇ–¶xI§¢=à2–]U0§iÚ¾ÄK‹ÚÄ>§ï³vzþd-„)7{¾ƒˆ lØÊUzKÄ\ÝÎÉ/‹‰æñÝГ|Ìn%y—áÁÖ`ŽÕF:ÿÁ>&YÔ7öËìé`eˆ>¸å/Òóô^úïñÏÕ{óYü×ü/›ç·Íç­{ë) µ.î…¦öhèÞæ$¥q>8XkAð­›:Ø¡+ûhfk³xî5f@ì|®ô#lŠQÇ‚«[)t€=íÕAÔ VàG‚L&.hY"Ð<eÎ+gÒ»Hz¾Ñ§/tK‚Óõ6¼D¯÷¦–ò…û`ÜK—ÊÖ7ï˜=5N‰ _\£“ž5á%Z“ˆM-k“¥Ÿ `ñBOݱ¦ìNÞzßiÇœL¿ móϋÜ0àl霼>ëFÖÞÓ›/²óä^ö~t¿vžûcíÝì½óÛÞ;LûHÊ˪o1µ<‚oK“ÍeÙÓÀË`!£e¨XǛҞK²Ì좞Á–ëµ §„å뀋D†Í®îšVxÈöí»úSp¬£ôñ)Ñ-chÌ}e>Š@™L¿‘Ké •Ì¡…hrŒNw×B½Ñ¶¬=÷Á¸Çž—eïæNQMq>¯Ü×·èÀm’Z!En`™Yø~¤(ÏžoäŒieg#ß†ÏÆ¾¹ØÊ…ý¡·X—+Íg¾LлŒê¿ÖCºˆÏÓ;éûáÝÚyîýÒûÙÿÜ8Ÿ/Ñ}¸]·‚L ‰¦Æ´ ɤGééi¨0Û¼Uº·…‰Åç ËK·ÏòÞ‘JMÙþXÖ¨å/êç›þ'®Ó KîSä„Òì%Óƒp…˜@âÏtNÞ¸ë ž O„}Ö›Öò°ßÈp^å6:®R­ x²ùÆ=ÝM·Kíß1–×äuýáó á½…Gˆà½õ;Je>®?š€Üè©îÒýL¯Ðt¿Ã¿^ÀiP›'ÿò”DƒÚ<çO:k¬´Õ˜ñ&?GïÅï†÷‹ç¸?ÖÞÍÞoßvÞÚ›ô4¨lHÎÝŠížòúÄçµ÷éêÝ–ëE¥“¤Öžøö ¿`=p.¯­?ñq šG8G^˜Î°2ÛBkÒ‹ôo˃wG2.`ÅÏö4“ bßéÚ ¥Ú²ŠNz€ÆeðôÕYá>}'RçÎyòÜGã½u‰üìéQQó]þ);ë´¤£ ¿Ÿè4ýèi Oj¢[µ‘zPâmlØ 3cº°>¾ÌNe'^&N»VbG½ŠÍQbwƒËæ˜?–ÝMýØ6¿m»µ1‰)è×1°VÌ%Pn¢éYã(~ [‡Õ tÙù8ðn>¶µõ ×á _ß‹!>G!¶¥Õ Ñ ×îØ.Y ø:Âsou;ÖÕŠ-²ò£:æ·î-4ìB“Úu/¢Û‡¾ÏÅ‹œ¤ñÉIí6ßÌ\Vþ5õ÷¾ù| îÃí;Û™/ †G*+‘¨ƒij¦¥ní]T`8šŸ+ǽÒD‰àîJ2Fù•âû£Mà~4˜™«*[JCX–'ÚFÍt½H+‡xtˈk]õ9›?)Y›z²€­ãÚ*ä÷äd¦k2däctÌÐB!L^µ ž{ÌÐÈýkÜŠÖŸ¹ 1ãyŸëL:ÉQ@¤Ë=Rn¿´DRÒ;@8Ö£þ¤‚’Û:š.rŽN?VÙΆ%}ãžô©ˆûÔt‘söÀ¡&Цâ,7á9úCønücíÿÇÚ¿çîßvÞÊ1ôé7Õýc‰õŽ¤Ô¿YÊ‘UÍzÖ…ŒÍßÕÇ´’x«•¨eCwYßÉk#µÑ¼Ñ©zMkälMCÞ®­ZOÊõ®TC¿AÇéF.í.`|¦½ ÁòþîÄÀF®¦+{òζÔÂ`IÚçè´„çqŽdD_¸p_ç\^“cöä1Z?ëj¶í¥g8àp¶¼sJω-J™À;éÏÁæ0÷èe|Ïét ³6Užÿfà9ÍÀŸëeþÍÐs4¸9HOñyúCünücõÿÇê¿çîžßvŸ÷*QÍR9ÝíA¦I$ÄtlN»FQAÀŽIu¬ &_Ç{îèÉɹ‚dԛĆ<¿/Ù»€‚Ö°¼&]2KNë,‘$‘ò‰ñ‰˜[Y@ŠYÎâZæ¼ Þ‡k7òüE’ÜŒý¹ÊÜ許4&$ÝñÿcíMvtÛ•$½y"—Ì;­Hèó*sÿáè+Ôí'lEÂ5ëÇg‘žæ¯CtñäEÍõù’ƒý}düïÀÃ,§²ø/áþ RħÂÿúŒ¼ë$Ù NªIÞ'€La”tkŸ%x«l˜·þíeoNü¨9oöë$²¦œtÛkü¬—}ô0ƒ©ù6}9F9m^-Ô@«‰_Hô£yq*Fsù¸õ^e½ª“æÍzRæƒ;·Ñ£“­QÊsöööûìïýï«·Û¬þ6üc÷|Ú}{ÐÙt€||ž¾îðg‹q3y­N@Ű‹TH.m®óÚ*¶ÐÖ]šø`T-Ę«”ŠxtV]7ñgsó*¿e]¹€Ùí¢9dÊÝÝmû=NèȦÀˆ'Ú 5†xkOâÕ¹2øô™ÌŠ8ÒôÇf¿¤;¹qšœ¢cü\ZÝ|&ªâu˜ló‡:'ONË)kÐÅtÊ0[Ÿ·ööò¶+¾’j™·þ³ì·ÍÝë¼ØO¥õ¿Bæ_ÆÏf²_Éq/mË÷üíí÷ùßú?Öo³ÿXÿmüÇþù¸ÿž<àöí;/`Òæ™äZüÁ^±Ið?ž¾­îuZC"'âtZœàŽ·Õ':íÏ{ÙŠV¯g€¦)σ©‰;‹•&ÑYŸ azñT{÷REêPxE»š’2gs|6s ÆèN°÷þ¢"ÔÝWdüm=ØÈí•`/´'2þ{ðYZq³qÕ>‘ñß“"Ŷ–뢇x }’"bƒ³=ê6ä²HÎþ»ì‡"¼¥›ý¨Ûà¡Îâmü¨Û‚Æá2}[ó}ö·Þ÷µ{.ý{ðÇÎù´ñ s#ôjN@UJÕ‰üjVœàª0µQ$ ͇à`¢ý§UÿX ¢ þé<•|v ¯ùÔ÷fÀŒ¸Ä‹i2 Z½> V$[‰Fgš„²›ÇøÂFÚÜTS4ö8F ‹xi.~Zj!`2¸t5›½ªÉQûÛc3B[ îŽ1½ý{ø`Þ`‰ŒÈ}¨ý{úŠBÍÖ=J#j°BS¶gó¡·VA·éÖû”õ<^ì<¬—0A"ê\ÎÁO½´P®sŸ»ïWë¯ËÌ¿;ßVîûeû×eá_#ßöÍ÷{â¾¶}w€í#‹Tµ P5þ@@`g0Ó.éa”•M%Ê‹ñþXXìè#HÑDÄ·•AGó Ó\‰2S“¢ß# ;½Ô‚#A•Û,u±îšƒ?=ÑSiUX°j×V7¯­¶”ÞCÝHDŸóëÒ3ÁU8¶fŽX|žd¸}Õq1ϼ‡mþ`kߥ‹û}̺´¼­fñrJÜS;w‚ü·Ksô–íÁ0ªDÞy‡ã3PmÞ/ÆÛ;œ#1 aÖ¶Á«=¥ø ˆ ®€cæööï™?ûß—m·ÿ½ìçøß»æœ¾×¦;À"ˆI‰TŠbäÊ“ŽQsWìák@-M1ŽÀíWKNË™”“Âqõ;8`Kôè¯ýž$µ1Ñi!†b7'tÌ!¥å;#‰C0Z/“©Rdcôø.Ÿh} Ä^í÷!©L{)9_òѾSëZI=—vé? '¥[^€…·ýƒ.“?ZÈœmüžýóI¶e½=~Ï_» l¼Æ,‡8¥¼ëm²µGÁo04nýÙ_8=çÍ~¬mBƒjè.ã§d0J»0Í9[ûcþßýŸë÷¶ÿ\ÿ÷øÏýóiÿ¹;Šç ±åØÈª*õÌT÷ÈH®®5¶¿2K”’!›õ“"µ‹‡ÝŸŒò´¿uæƒxu¼µ'“iï9ô™ã¥ÿ‘d¿½Fú*}ÛZ^°¡æÇð‡*á€usíÓ·5ßgëýX½Íúcõ·Ñ»çãî;Šç#cIЭ«ðÌ|8æIüîÚª z×*k«&E zûáŽj ŒY×V5;këø”'S·@ýiqÁuû°¹®ú”7W„mˆv¬ô9²¸éœÕúŸ(B.O@-_]Ìîhn/q j·Òû¥û$ì{ÌHÑö‹ùp¡ÏI¹ržsØïá'Ê&(õ±»êÁ®üž>ûPdËS¼o;Ý¿ Zr4ÔíXuë¦.D€]Ìç¢Ï,p‹—ÑÛψVÙÃ:¬úkò¾_­¿Î©ß:ß–îûmü×¹ôï±o;çû=u_ÛÎóc´¶Óç»±s<‚j ¿¯\ÑžŠb¾‡¥ð .r-2.¢Õ$ýw¸ÇÑý}¸ºP- &e:ág°ðãùŒ;€V[Ìê­ñ:ª}åÒ2µ —EÊ9¯Ü¦2¹Æ÷Þ¾NJ¿¬ó!¿£ÿ:xØVÙŸ/æCg4Ùcåßïæà6–ò$ÞÓáÌSv²Œç]mÞ4eŒ“šÑ³=P””qëÊþ²“ßö!F~ê:ÇϰMÉŽè·ù{·?çÿÝÿ¹~oûåÿÜ=ŸvßÃ6¦ä Ú°>>¸²>îøsºØ#«ð=êwª ãð³A¥‚œëöØíÙ·;%BÊâ1d•‚à¶³¯i~ÑdãqÇ“á@yU¨q­_µÑÙ†x«l­%îdd ª9Ò…õÖ^¹63u=·þEmב¨éf‘ý5”‡°k¿r…p7$oÓ—Eöj tN³’ïùÖÖBö®ƒK÷]æ£Èøð‰½ÍG0ǾL[Ñœoǯ“T:|u·éÛÚÓ¿õ,ßfÿ±üÛøíóa÷Åž.DY~²úÄ~ÃhI—<ÕT& ]¿›õæt$øöbK{u›í¨$½rêTž»öØ@ ËQÄêáZUÙ„m­ùg©v§µËÄÚQtójIE@sžË‰ãpØ/º5·{”ÄkýÖ=•·éº%óæw-Œ%¶áS³;Eµˆ·Þ³,5B Å#ÖBž8½å[sŠáÁ'Ž;ºï2¿ tÏnæ+þY¦—^†ß¥¤Y¼¸ôœ½­ù1ù[÷Çâmæ‹¿ ÿØ<öžãð&U@<Ððö©#QéÁ{¢p#àÎ:@Tfg¶ç±R©E$Ïí?À #¯Tmo TÉ”spƒÿï´ùg*IòÚ)Lˆ;£¦÷À Á]ûÔVaJžŠýÖšFÅØX¤¿{çÉ3!ƒºî›ñQÆÛ%TÒÒì÷ØÃŸÙ[%F5Pþkî;Y±ï»'5e÷yêzi?ÈÚÛË—mø;ØÜ ä‚Ë|X§‹‚s¹ëÌf1¥úìža?z€‹ßSNIà­L-Õ•ߺ#o‹ƒ× 8ËÞ¬`f–glÅ¥ºµ/ԃأ´çŸÝýêß2p^/ΗÓþôgÝ É ûøÁ5ˆ\WŽyŸ¿„Ê=\üõyæ%(y3 ·æÐ€µ)ÂòžßÝóŒÃµ½•y1ßöO"¡Ï˽_†Ïþ²•LDgÛeúööûôïýïË·Û¿/ÿ>þ}û|Ü~~ËWÁÏøÀß$y²tLy…Çz5µ§¾pRÕG.ï)Ph §ˆÔ»Ý I ­Ê£S»:ÀÖœˆ*Úvç´Úz"õw¥Šx±>TY¿€¶ÛБH$|7ÃBï¼&î‹ßYPH KZþ¯½[mOÙ¿µ§EïÕÖÛ×Ñ9!E1©Ù6è‡íú½M`pÜÈ_çØí÷¡€¾uQŽ©;ÛïS¿õ¿­Üaþ±òÛð·sLß{߉üÆfÈu…x¤ùáÔ2ê²XÄl_Ûë6¨ÊòéïÔáÀ€³I…«Atiè4²->¡¤Ûæ\’?ð±pÖÃË¿B;)ðͶ:=¸‰å: o‚ 7ˈK’ AŽl¾µcW5ü3·î#¯}{/9ÍÕi>ÎòÍõŽásâ ÙG¿Í®×¨àzг€Ù{®Ö}쥹¤xÉL>¥R[ï]ÖÛ‰·Ä¤6ã¡,±½ngÞ—±KŠ?‰bŸS·5?¦þÝû±r›ñÇÊoc?vΧ÷0Ûâ3£VˆBuŠ{Šö¦N–`¾’},€N„.²ëÊÔºN¸{D\´ö”M£ÜÖÁ—UìB+ýncpñö²ÂNf’Sƒ‰áJ?µBè(ÛkWœ–`Äíïƒüõ<ðÞXn@sÐÐÑ¿ù‘d__ÔÜ»ýQöÃó<žsÿ5~P¶DÀ9Ÿ¾ÿ:çÏnï¬t_ü‰=Ø‹AUóÒœ| '!b;óÒ=~MµÓM1×Ãxû•›VÕ ó2xÜ8;Ðzì—ÉÛÛï“ÿî}_ºÝö}é÷±[çÓÖû)>VXuL™Lljv¦U{Œ]{Ö‘ä©u ›ß"M)èûNæ"I°®µòS{ ¦ÆvVtJó™ü?œ PLàé®ߎ½ÒÛOí1þ4—™gŽÍWB¼#^›ÛÁ÷¡=~8çw+·¸Q©º˜Ÿ†ÌY?µÇ¿‡ŸäNýNÿ©=þ{ö’À˜•äLû)=¶©ËK¾5ç ¨iÈÿ OîÇö/~ÆvÛò-?Q¼_#§ÄÐNãßÓ–‡Šz‡ÍúŒ_áQ¦‘Î?[¥&Á×äˆm]{žjò,ÂЋåö"f7¤Jú_WÕ4 ÖClõ˜¶³ù{Úî·U;ÌßVýkü¶iŽÉ{ï¹Ëi:ðPº$£DÛ‹\«}’K=¤¾9ØE,ƒ*+…Ðo¢(±N#ÂÜ‹ÙÙ±+8ÐÛzûû° £ªÕa×s>ôî†Î+ÔO£@äòš´NÓ|5ÕÊ2±=k/‚2oÍmj™ÇºuojÜ!åÐnæð1Û"¶u˜¾†O¼ˆÓ¹õ…mÓG¼‰rq)…ûa"uJrëÒ~ùɳ‹öýì_¡ÂÌpÓ#õó²ŸÃù]ˆÁêeüÄÂg£2K¹ÌßÞ~Ÿþ½ÿcù6ûå߯lŸOÛ羽‡ ž,½ùG^vV3aå‘ I%,n7IÕ˶²í|Nÿ* Ä)l[|oeÚ O‰î¿„ž£>¥fq&sj4*‡J]D™r"nE€MC.øá[ö©É÷¨m–&ÅE¤±µofLî³/ðÚ»{Êu³TSº_d| á練ßc·ß¹‘ˆ‡Fä÷Üm¬[OI¥Bd±ßÚ?PìC‘ú­ÿ!ë'ØÍq3&ø .ÁÈËèíVöiz_fokÌþÖÿ±z›ýÇâ¿ÇîO{ÏcöÄÚȲ ½0¨IåT¶E[Œ¡ÕY%í¿ ¯Vh#xtâË‹$º¨¡»â0E ,Âb„O I­$¸ø E¼Òõ«dâžSM­}c°®¬£€¸:%‹^oÕäÚç9W_Œ¡[ûŠ›¤àq½u_ÐfA[¤äy3Ÿ!Õãm®àòkøè¿ÁþÞš¹Ï)BÀO]q…‚Ð _o^š#Ê'vð‚ã£÷)ë'Ì7ã) ¶Ï’sk^ÆNA‡½…ìü#ásNÝÖü˜úwïÇÊmÆ+¿ýØ9ŸvÞ‘•Ç_OóÄÝרãk’? u Ò"cE0®¼ì*¥ëÆB²]lØü÷@ÊÅþ$ßÐÕÕÒ]Hw%Òˆm%ÏpáÕÊ®ÓG \Cöôñ^à,έڠ¥lÐfÆ’oÍ‘ð±+u¦o½S?µ>úõ·í_üŠí0¥Gsæ5öô‡÷,¡ÖÇ/ü{ê¾øF.±&xçæ,HÜxöT/Íy8Œ¤ìvë}Èvh¹xî¶«:ÁõÍMþ{à_þ30¨zÎÛÙü=í_GçïeÛŒ?–ýëû{Û|ÞvOR~¢ZÙ#Û¶š™›3üÀE†ÍJ¢‡†èªˆ‹¦¶/áÙ€@Åñ$Z¤ñ°±*•IuA.CäB@±.^"Åг2ò°¿_~rêdï(·…çÚ6Rl·öÈQÞµå»õŒ äðæ‹ù¥Êü áfä×ðy¶7I[…¥ôž>@ ¨ìŸ×Јù€Äs¹µ§ -§¢ÏÑÿ̲–¤X/öOˆÁ‡$ºŒŸo{zæËüíí÷ùßú?Öo³_þmøÇîù¸û|“ËÔO俢0«Û7zûúB\B¯ëw;¸;¤¨ëäÂ÷í*a•@«ý9 ×¹4Á¨ å,$þ…D3ƒ0˜sgN±öcm:ÉfÄÒfzž­PÜü 77~‹åéoÍ)¸…cÎ[÷8€ €ÄbÞÍÏ2ßæÿ)7߆Ÿ)ž±ÁÅžŸb÷×ôÁÜš‹ß†zt{ŠqÇíÑn¤á)lœgÿÒ"††Ïü³qšÏÏhµZƒÇ9|~·õžRïÇìÍ·Éß{ßÖî0þXûmðÇÞù´÷žÝ)‡¼À»ñmÆÎg2ÝÕ‘¥E> ÇtdB¨gžˆ6ƒ˜kyc†\jÀV¥zgP–5ýìã“«Æ€Ny? Š\Öî‚–ÚLè¶U®=‘DGâçêJ«¢’B¹7(äåÖ;vk1CbÈ®|ôO¡R”\\Ë7ó³Ì/ÔF<¥¯áÛÝ›¡ ̹>üš> Iì¶³§< Da1q‚Ž{{³-#GÿYRžÃ>ói¿ %‘È)žãWÖ8£Gd[,žów´ßæÿè[¿Ãþ}ù·á»çÓîÛŸñ5Ïß'5ÕБ“¿4ן…L¾Zƒ” íw˜¶á2sx‘Ê@sÅ,” :D?Ó«ÈÄeùQŠNhõ¾$ο-軎‰‹'‘§ÍôoÑ~'Çä*fI$B†Ÿƒ{s·v.J‘íÒ{ÅM#¥]`7¾Èx›Ù…ñÙê´3ª-µOžýžÍP›¹…}«È»ª27ðT9Ûó w„ñÖ¿tÁ ~ŽuÞì—.˜…ðÂ߆Ï-Ý”¹ÏÞÞ|Ÿü½û}ñvóµÿÜ;Ÿöž?ã-U•ãp%¹€&KKø£dd!'UOüÞf±žW’¹ÁÛIäfÿ¡%©g°Q¯§¹„j¯mOÄ ]ÄX‹˜»mI#δà µ)hvj)l·æhX&à9+·÷^A2™øSûü62LÀöœ¬i½D>òæ·C±é²^²¿'wvÓR•Ÿ‡´yÇA€žriß‘ä–tmì£ÿ®pfÔEÖ‹ý=Bb£Eç2~*|‰%ós¾ÌßÞ~›þ½ûmñ6ë¥þÜ9ŸvÞÁ€gîèÜûJ·WÅláµK©°¯ y[OÈÚ«6 ÏûÔpÛs¢<| pBÉ“žf>¤£ÐÑî;jÞ6@@‹òÉÀáºöBnûu+!¶% ï·9ðÉ“€[{òÙ±;ßJ½ôŸô\ È¿Äz±>BsºÕþ=~û½¢ \U9û×1}IÏ];œa5^µÖºÄxkOÍ‘=V2'Ù­ÿ.û;pt³_Å›°…ˆ{òÿ0ßõÏéÛšÓ¿u,ßÛüsùßÃ?·Ï§í'„(¹`¾0”æßÝU{(’Km@s»Sà9MÒÀÕO ÝoÍ»Ži¹ þ{°…ÔŒÃQy ”÷Q&h¿ë²ùÓõùÝ>&󬡫t=xY²Ó«=Ò4ö¶$uD4E°Ó;Êñ݉?»d:¸îK÷v°$$%Oëùë[–ù¯}ôÒäÙ§“©½æŽ_ÕDnÅá¡h$5;¨zŠ’fÜZ“…ǨF=Gç¤ÒÑ'b÷”Óv’ðþ2«sä$GÁ À|™¸wósâß½Ÿ ÷¶þ\ø÷à/çþ;Êã›hôá€ñ"¥ö|TÁÜ¡˜+ñ°«J&ÂKî‹Äò·W8#ù¬r/`"sh_Ãü! zÆ^€bòèQ] bs<¾Õ#¤²Ì„3º!Ò*†–€ÇPëõÈ­=Rç¢bT~vÒ9º±ºÂên=¬/¥ý1¼ žØ‹Zì ù5y¶tæï…†©«ú#älOÕ%x¨ÎxëÊ|jØyÀf?>HDVåÏáÏ?û¸<Úmú¶öÇôoýË·Ù¬þ6þ}ó|Ú{Sxœ‹MÐT©\U@y1…'ÉN ÁÂï™ ðàUªªÉ"Ë‚…*Xh QrËfÀÉ@¬¸êw$/ ›n˜ÏÚîø¯²B—Ö;0„§=xE±«ˆ—ËÚ®ˆ¥‰±·oH%ŽùžýC«cÓÉt›ý.¢'#xÂn¿y •PÝXÁæ}þ š/ÂG>™ZP"…0Ýš£ôf‡jL\ù—î‹Ì‡rkæ›ùU(‘F {º ¿!)a%Zñ2}{û}ú÷þ÷åÛíß—ÿ±}>m¿ƒNÌ&WåJ„øïè^›ûÑU©Ä“oÆHVr®`r­&ó1Gx6' @ý‹JjFz2Ëxdðš,8Uˆ· V½œm3Û†”6Ï܈»{Ñq5á&¼‚¾6Éz’e‹õÖ¾*I³3â¥{(e€yçÙãÍú"ëíà!®ñkôPÚPµ0ªüî³'J¨#â/Æ­h‡ ds·ö:å½"ê>û‡Q nï Ìùi?[ÑV^ ¯ËðíwB–öZ—3LßÞ~Ÿþ½ÿ}ùvû÷ÕßÇìžO»ÏŸKD®É×Û\ŸÇZWÈvëÂßÁ+®\¾£Q;Ú£½.Bp?É!òè¿'‰éÍüè\€ÞÝÝåFí•m¦ü¼6௅‰5/w¹³ã.†RæQèäi»s/%ãÖÞ¾eÕì@a}éŸ×D£»V¯kØì‡#Ù\´‹£©ßãmŒ65×ùóÜø=}‰°Bb¼/fÄñGÄ¥;Ž[{òævÖP,l¿ÌLÉK¥~JuÑH‘S¨‡L£ŽRî±$‰ˆ¤ û¶f˜*ô PiØô2I~·þ¦¤~~ß]ª‹F‹Æ˜gûš+äYÍf@¢v mHjèyÏ€JEcScom´!oíÃâĶх%÷þaÙ¤¿dÐvûÑ¡·¿o‡AxÊÆû˜a:t,ã>}Q¤²fmZK5ñŠ !¢—ö6ß¶5€Ïté¾Êzt‡TbrXo[[¤¤ÀGo£oÄÊc®­~ÎÞÖþ˜ý­ÿcõÞæŸ«ÿþ¹{>í¾ãÖçL-PVe–Ãg“=ùc«š©@à© Žu´ÌaÕŽý¡4ƒP­‡‹8½´öHdºZô}ºU¦èý‘ÏUsÆ‘ë°^Jˆž·êVò ¡_¾n­(Ñ¥½Xkoo—XD¼`.ùì½Àœ6Xqéb¾õÖà_ˆ­<—æïÁƒ[È ,Lî>w¨lÚ‰cä|¸~[Eº¦K–ùl°<Œ!uæ~ëžwp (T²Ì§õy³Z‡ï£'Ynÿ8Èß¼ÌÞÖþ˜ý­ÿcõ6ûÕ߯lžO{ïxèÛ ¶º¸„¥J·Gb€GkWoM» ¸ÈU @Œ¡F‹tÙF>°ŠT`›r98 Ñ÷›v)ýÀ2%ÄÃt.{ö˜³l‹ç߆Œ?#ñ@ûë…¯¾ÜZ! hn=Œ‡[ï”Û¤Ž¥·/"˜Ú¬èzS§‰×¤=$|¿§ŽH£]˵ŠÜt•JÛ‹Þ»Yoíqf'*Å)Ô³÷"Ó)çìm7]?C)8¬_ÇÈù}@aÎM]Ž™;Ûoó~tÿ^·ï·ñ_ǺïƒßöÍ÷{ò¾¶}÷ÔƒÎÆå ¾Í)arÝ3µßíè¶þ“Tê‘$¥>FËGîÖz´ï&‹(ŽÏœª…– \¿ «”uLd²y1G Wèº ¦RwÝš»Î:D‡ \gw…¼F¾5§Ì‹²ˆÚâ­÷ ¢ž—”ïoÛ¿ÈÐ`;içåö¿ÇN¹¦ ˆâÏÏOÝ—H”E—òój!hΣl Îs4·oÍv´rë}Êö Þ¨¶ƒÕ`¥DÜñ8@Ñaÿšˆ$ÏçrÌÛÙü=í_GçïeÛŒ?–ýkû¶m¾?o;>Ž$k0bvvs÷ K'ëú½’P _‡„9üJ`=Uôƒu¥0Å+íÿ 1[:sãÄî…o§:‡|£tOþAK©by8Û¿í‚ý9>!ÿ£2ye À8Ž Ö—K{Â{°Qîzé¶K)ûrþ§ý¨!àÈ!5öwôêïñ0 ÕJûQÌü=P Bí! i¨½}Ì·ÖûPƳ÷®à9v㫆·ž2"?mágöÑ{¦à4Èì³··ßgëÿX½Íþcõ·ñ»çãîs(žÎz"¶J’P¿×TLJøÎk>yîÚÓ®d¯É²×^ºÿ)颸гäÒ^Yáü_/Â"åÞm* Ãc¶ ìO¡ ¾XH5*?'©®ÍtYïÁê9$½.ýùV«â#—æLߤ"lþ¼‡÷Ž´|,PV–‹õ8OèÃ?8Ü߃'Ý„ bs˜ò1yö;ŠBŠç‘…Öª#?ZsMF´b•x8{×5Y¨öñf½®I²Kì=ø©[R2ui^&ok¾MýÖù{á¾ß¶ëþù{Ó|Üs_Êz‚•‰@*:Äc'O QŽf;¬®³P†êÅ@ XY‚?…ªÖŒÖp%š ´Û#øSÀ®@ãWB²›Ë;çtÁpb¿Ø]p(B‚ƒžÐ#8D´ëZ‚>…?8ÛàÏ«=œÇô‚þ¹ô¯¸)D—5ëU±Ûd Ýö½{êr?’-ÀÔºÓjÿž? ¾n¬¸’:Q¼ºàyDîu¶ï$Lš(v¼õ/^]d\ЏûûUãl ®îÛø'^Ì )ªcþ¶öÇü¿û?×ïmÿ¹þïñŸûçÓþ»h€€ Jzý÷èÊe0 ¸ à–ïJ÷’ÂSÎe®pÇéY¥šd ¢¨OÐú'yEüßö£ð‘J°Å} EßÃïdKaœ³±]¦oo¿ÍþÞý¶v»õûÊï£ß6ÎÇ}w”#CɃ†§&ìlO±ºè—9Ú|0ìeÿ=OhˇCMq¤4É ¬WE-eèöh™e9â‘PÚ@wÔ9S: yAY»^q—µPð§Êü¢n¤V¥ŠC ]`¼@ÈüÖ<Âà‚ˆU)íÖ}€ÁuÂUt¸™oÌÈbzàý=|ÜÉ Hüž=Þ8 õØÒnP<'^ðò­y½¨¿ùÖ}‘ùÉ»r1Ÿ¼D/¸ïÇð‡Þ%CDè霽½ù>ù{÷ûâmæ‹¿ ÿØ<ŸöÞQñI€lï¥CY"÷ ÊÑ1/‘OšÚÿ$€…ª ¸ÿœ³+/KE³f §‰ôò»5?|{â{Ñ\è´TS¬i£ý8e¼¼k® 1àl£‡®0ÝU[D:Yî¹µ·¤Dâð­²õo¿ãÎGû{a\ìnÝ䞟ÀõïñWj+Š6î|d1~Ïr@v ÷=uHÔTn„rkO€QY›&Æ¿£ÿ!û+äVõf?F°²Y/ösüç@7I<ÛÇümíù÷®ßÛþsýßã?÷ϧýwª |Œ§rÃðÐyº¾6ªpªð&´\%6{s‚õ„`·ûD’®œàÔý„‡›˜cËþ>̾¸A\|ÓˆJ'¼am!&(ΑJ &÷§}–êvÈz¿ -"lÎRní+2ì•|rŒ·þy ˆÕ8w·_TÚÈþ•Gýà5|1iSÝç£Ôöš>†  ÷Jõo‚ƒ‡kÊ ;ÛaÔ•çy龕¾¿ÏháŒ(IÀå}ðö»=º©žiÒÛ'oo¿OþÖý¾v»ñûÚïƒ?öΧ½ç¡§=9ÛÊ‘AqÑq‹êžÕ’ õ›9.I…ÔßœaqsQ]¿#" 6`A¯5>¾U‰–Fpb@o{ùAݳ¹*Ó"  ìZ€uÏæäeXõs°?ßÑW·ævÐTH–…Ñ¿tß±/°€¯ÐÇÛ|TãÑÀ €ðÕþ=üÈk™s©çÐýïÙãÅ«\}ÅL)Ⱦ[û $ëYoýëÛ²³(*ïuØ0Þ¶/À¶cüö;Ûª§ÅÀñž¿½ý1ý[ÿÇò½í?—ÿ=þsû|Ø}Øl‘ˆ«5‡ñç6]Tp.Ø_%ÀupŸHJb µ«ÅŠÏDùCxj pl;ÄâÎ%l€¤ÜòOA£vÆž¿KçÏÿ8–cÜ9>ÓèjIÂ/Ø×¯7^ñoJHÑ]:‡L‘ç‰ÖïÿEy†E+úTý;ňQv*qÖ#áï¹Sû8¤ÕúÔgPó)s”°óÙ^bÇøÝÜÌÙ•ýh‘Ê8íÇ#ÇÇz?o&{…ìb­ûümí÷ÉߺßÖî0ÿ\û÷ðß[瘽÷ÎÛ¯{ MY§E»O%ßµÎ:ÚA  ‚:]v5B%eÝLJ7²ÝÊ QÓé62êNû3Q"ÎF¯Ä…˜äwÖÐcçoj®åc5R”m>ë„(tAJ ‘L§S¾¸~þiýÞ!¡L§ÄÇ­s.—PwÆGÇéÇö/>flç|-¢íï‘Gè‰:²XŽñ|MœšÇDD[ÔÇËOiÐbg<í¸¤4E^ß.ÝÛïXϤçÝn=’¯v™ˆ2ô6z•i~ ü õœ»½ù>õ{÷ï•;Í?V~þ{ãœÓ÷Úw~ÕG¸•¶8ì'i¯AqÞ?Â]¯gÏ2qî—ÐýKãY¡~AIÂó 7Ëž"yei(ØBx¬úïðR(O–ˆ,O@× XUÂÚMw“²Ûü ,*Õäyûûé~e‰~µç‚2x,òÇ­ y)Z¿Ó.ö“çA¼Ý˜ÿ:ÆOÉÞ¦H­.‰÷üGqØœú0ÁwõÄÓ­=2î8…ÙÎþ q£’ÇÈû©@ ƒ¿®:¶cü8; Ðõ¸LßÞ|Ÿþ­ûcù6óå߆lŸÛïñE«}8àÜÞj€³ÿúrFy&rˆdŠkm€\ëóGÉʺ™6)ÉOd+~Ä&„¯Bº¬V×Q«(ާÇ3AÐÈ«Ì˘°Ñ¼º!-›*H6¦Îf»““Ì¥]ÚGŠ‹DAb¾ôõª% ×Cº˜©–ý}‚&N(· Ÿð5)nü㼜©ßÓÑÎ4wTõÈ?a^äíoí•;B%®Ätéßœìó>òÅ~9›±eNé2~ÅyíøŒ°]æokÌÿÖÿ¹~oûåÿÜ=ŸvŸ›ëÅ(Ij€åžNÓ\€bO Õƒ³ Úmº”#V„¬“ˆ$é¿GR’ð¤Õõ˜#(VVgÆÄ™•¸ËzÌ5Õ­ŠŠ“\^ ‚\ío@fþ\>aªšî³}VIÉþC÷ø»(h3é½1F¿ØÏcµÂé6ûº@ßãÏ€P½@e½…MqnŠÒ£¦û/á¢í&+lÏ·æHDÙëGÂ[÷Cæ­åf>ë=Rž Ķ Ÿ,‡=͂Ы—é{·?§ÿÝÿ¹|oûÏåÿÜ>vßC˜ƒm•¢jW€ƒ¤ÀÞû xOí¢í}j¶Ÿ5SÙ:œcMGO$vw¾+â[6C?|J锃µÍEçâÁƒ #¤&ÓX|[^iý!L+b»i…,¿•r|(¶ö*¹#ìôÃE÷êžäq¢6ׯÿ%ZY*º9MŸækð(®•Éåaªû{î¾´¸MEžáö§çåh°/+«^lÏÞÁ¦a»s2ï¶‹ÊÆžwaxî÷À¿–r/¡PŠ0Ò1ogó÷¼¿×m3þX÷¯cìï}óýyßùÁ žKre¡y”¬ÛµiDwìòüC±TÙñ¯v4GíÉìà5Ñ¢ŒHÇöÔ¬ØâB^«óPBc·®ú#_ËwM.%:BËž L}ùA·Á>²{!À\—õ©¹ÙÚC¹Ò(‹Äcëßv‡9uæÍžnöGÙo‹øÔ mã·£‡§mîNÀ~ÌuÀümôç3o YÚK{ q±BU˜ýÛÍP•öÆß¼Ø?A±Õ¾Ìx?7‡жsWêè=}{ó}ú÷î÷åÛÍß—þ¾}>n?‡’‡"zϋөڪS$‰%Þ ?jnž1QõIæÞ¼"üßJaž‚y'Ç”€ðr9q¶ŰÅÊÀ‚ùDI”ªé‚r˜kIfS¤ÔMP‡8wA1ƒ‚ù®Ò÷k‚JdÈgø»µ¯(D¢ÜAo×½é¤S@œ¢  »ýàùDe Hîû¯cü¨â$ˆu¥‹þ×1ö»¨){ vI/’w<ÚGìèä™ný‡D;†ƒêb"މï=G?ÆŸäZЧ)^¦ok~Nÿ»ûsùÞæŸËÿþ¹}>m¿ƒ'¢{¶Eý*ªí‹ÐzZ¬ÌdÛ춈ÃcªZÉ)ùaÀ;ñr†°b…IÌi!=pC ~¨f•œ6ˆ•ÚîQÅÜ3WÝå¢í¸G³o…¬‘§FA“«¢›ÉI½w¼4ò\Èô†Þo½g/²×€WìÖS¡4ÁÒ®š}ôdë¼õ•1Øf/ª:-Ø…Y=D¸? úÑ#ñhß•kd{´vëÈ~ëëºÙOézŒsŽÜëmüªÇDg¦KÌû˜¾­ý1ý[ÿÇêmö«¿ÿØ=Ÿvß#W7§’!:¬kحד_'zàņoÎ3…Ð6UÓ}´%™ÐJ §…fïÁ¹b½” H¾ þ.TY…græT¹¸¥ç@2ÞQivÑÛ|{Á´OÝž€Ám¸vHÙV sÑnÍÄö5®H÷ѽ –JÈ1ê¢=|[¯Âs›®‰¾Ý÷_Çè‰Ù„˜ÖÛ¿gO…çæ'ÖâDL’t+¤pl‹Ô[{” 'Y©ï£)v’l-åiÿ€gqEnãëUˆ¹Æžoó·µ?¦ëÿX¾·ýÇ꿇nžO›Ï_Ih„’%-N·MÕHèÄ “¢ <3A%¿#䋸QüÑJ‰•2“¸®jòSœò†Í»±¿ _rìUV Î=BkðÌÅöáWucÑîxX‰g-| ¤ÅUg÷€]ÎKQðh7élʇÞú¯g0×ÍÆ~ÛæŸý}Óù=~Ø®QfôÚûkþ i€Pç’-¶¢GÁy¼´‡ø•¸tK)zëÊ~*š cžö£mƒ~JJËUxŸ× AMbKéz›¿­ý1ÿïþÏõ{Û®ÿ{üçþù´ÿ.¢´ ¸™á¸’+Bm;§Waˆ}Y#§.#¿+ŠŽ1ü¶ªÂìf¾o6!Aù*aF…Ìaªëž—pÊ .ŽœýÒ€ÍÙQ‘ œÕžh;1³ê*l­‰k½µÎPDÎéùá½à Ô˜q>ÜìOØOíeõüô>~{wÃ:Ãáá!Õmþùwž¹ÓÑ6û°½™'‰£}D[Ú5­\úGüuJ–ÉÃÓþ&Ìq÷¤öeü8CöGé’=?æoo¿ÏÿÞÿ¾~»ýûúïãß÷ÏÇý÷‹&ÂT<<+ øÃÛݹ¨Mf@Ô½éd"ËãÈ?Éd­¨lCúC.jw‹}¿<¼D›í”h®˜y&J×{¬^ ïü}éÑèÀW‚›ðIÅàÑ“zÑW{j= Y¬½¥Kÿ8ú’Fs§ÒÅ|› Ì·±¶zÑß÷ß#ñ?ûåQùø=},€|¯ò›Î<.í8€·˜Ê¸ôÏ9WÌí°_ ú¸Œë¸Œ6•¡Z!ÝŽùÛÛïó¿õ¬ßfÿ±üï៻çÓî;NˆéâøÍ¶˜eÌŒnwG_O*«îlS Uš•µÖöA$xÂºãØ‰JØ‹r)[9˜ÈÈc¡ÜmÈŵjí»·o[µ½Kh£Çpà…d¤“Ãw3,i¶_E¿ÚÛ“Õ¶] ö¿ÇÑ;àâÀ•‚ ÕÅvê3SؽA–ßcO° ‰£=L®¿ç.©L Dyä`ð@+8Ÿ~kîAÊ?ê¸tß…´3fæ‹ù¶Í(ÉY%¡çàíwÈ’´T/“··ß'ëÿ\¼·ýçÒ¿ÇnO[ï¸ô̓#X`]”½€]ÁÅTûµOùHdŽ °”‡£üŠÖYß°:•é¿‹d?„ü¨ú"åÇ%çY@F!ÆôS, Au'Wü¥í7XYò›Te%Ý8Òu.èvkoÏÑÕRò¥w}°¶3Û¯$òí_E²?ÏD¶çÂ| u!ªÓóý=w_\Øtäî€9ÿJ¢½hÒ·öÍv–®7{ÅÝúï2ŸÀꢋÞì'ŒŒ¹.ý6|n`˜¿ÂT¥î1}[ûcú·þ÷ÕÛÌß—~ý{眳÷Úy^B}’VdWèb„š?®zð Ý9Ïa•ú}ÝœÙËÇVTLžqý#bÃQV¤˜ÊÔÉ¿xh@`ñc¸Žà®2Ýð¤¨íÃbf!ËðCv G`ÞÚ£1@ ”ê—î£YЮíf}õ zF]y„ߣOœ¤Zü˜ý{ÿÇòmö«ÿÿ¹{>í¾'ÓD~.©é¢Ø°ôvÒUieš2Œ=З­"œ.‰ç9ž$xû²XÏõ»4ÐNôÙgâ¼Ùä@G 2äŽÊ²e>ñâè?$¾ñžÚÃ4CÒ$ˆ`v…çôý«jkÎ~ãžà£¾uOtî­²rÜ»ùEæ› ýGtû5|Èí .˜ž 9¦`,÷d íaš1þÚ¼µy ·"L{ö?@^òq•/æ#8 ÉL|>p÷†Œ2ïñsööæûäo½ïk·¿¯ý>ø}ï|Ü{þX¢è)Ù̓¾#p„]§ºR7;¼•pEƒ‘Öïv8 õ‚:œÿ=&èâÍg{nÏa÷Ý€¿®/U¿dó呂 ÁJ¦„Upóa ¼iµf¬£Ëéb LLHsÞÚSÐìW‚·þíÂs “e»ÙŸd?7äxp¯ñƒB³ÝþÑÏkí÷üEÑÐ"Èìç'׊0”@”[ûþ‡O¯£*ZnýÃÛ™ ª×Oûáí´w’ ºÞÎ$‚è”oó·µ?æëÿX¿Íþcý·ñûçÓþóûè•\¥tOt$œ"[B;T5”æÆðs¾µd ŸÔ2âªôì@„ÈžáѼl¤ÞHS&}À…ʃÞ~lцŠS3òý“ôœ#ü8_’«³óÏs#ÔØQýøØ›s:Á¦Wš|ïÝ–Š+ˆÛ¯Ö'Y_U¯ñäf~„1Å?mä§Äà5y¶=›tGÊBÙÛ}v[kØ&TG¯öÛÜ¡×ݾÊá! °g™Í—=ÏÒ­=ÈÀ¼I0γÿ‚ý £äLûa5£8fè :ƼViÏ!à9{û÷ìソ–îûmü×±ðûØßûæû=w_Û¾s^D¾¹Ak6\®ñR’O1 Fé]'ßxiCÞJ\BvÖêEñÕ>¤]šaÁúA-ðV[Û)±HÄK,Zi]o•¬‚+½CwÊyÀGû€²ôO¥àÓ«´Kù{ëÃ{7‡«vô D·Ýz/ÒµÉM 3ñ6^IÄÆô溮ÇßCOR½á‡Î>sI¢¹àu†cÿ$êmž¨­l»µ·þ‚BÓoÝYoob‘MÖƒ=lÐÅ6Ñÿ£ÒõÆ –6Ê1y{û}ò÷þ÷µÛíß×~ÿ¾u>î¼Üý¼L‰5>:Á­[òÓq¢Àao-:v ô¿}&ŽÞGIZ@àà%ˆºJ~¾g©¼JEsÏUsÍÏÉÏy{Ò‘ö¤­íª¼Òí‹Ó=)8¶(ÑÔ7nž³ëèµ£½9ñp±ÔoýƒÈ·ÛÚ®ßXoö«Þ½!ÖÔþ=~Þóö|µÕá¡ìú=}T÷Ã)F>ýÁy¶‰Æ «qiOyǬ2gÿ…²òÔñÔ‹ýԡ‘ú‡çø“#‰(Åt™¿½ý>ÿ{ÿûúíöëÿÿ¹>l?%%8ËÝ«"ß§F =óø/@?Zw'ïGe5xD¥¡{§æeúï™× }mé§Ð˜Êýiw(º&sP–¨ZƒÞá®/šÉA™Vsñ‚|¬,Á½=·Ä3±¬“xëßΘ:‰QÇ›ýYöÛUô¼D¶ñ£ŠÌ›Œóhy`¯ùKPJÁÑëãÂéGÔ°Ç[{H‰Øô¡Zˆ£Tº)¤àÀ¿Ù_¿¡-¡ Â9~ðzöîA蘽£õ6ûGïÛêÖ«¿þØ=Ÿvß…Ä gmòÇ ™m±;§EâD9Lls9Ó áRˤ³ Õöм{G¢ gŸÛCª1ÂNáêó'ÓRŸ7g½ÀHúB”Ñ&ð¼Ú› hõ*VNð‰ Zß[óFʾ¢¼ª¥¶î+”—•Òoæ™ÏÍýwµÔ¯áÛïˆgžXêóïékÚI¶x¡¥‡' /pŒqk?ìñdÞ%Øßqë_´ª¨::Ní°_¸=½ÛøE« erTÉÂ>}[ócö·îÕÛÌ?Vÿ=üs÷|Ú}Œ |ü£*ºr;¶m&~å26vi@z(ÑBèÎ ä-A(xliáa þ+ñŠˆÚ#bƒj<®8=ˆ”41{‡éO%»K Êv<š `lˆ ÏÂÉÇí"*æÓ™Û5z—ö0ÅÏ4E?P.ýðHÌ´ÊÅþBml8íù±ù=zûÖMܦùˆØüš<)nÚÓJ‘5§?›É>…r?›c¯5µ>Ë­{®‘ŽV/æ£QAY©6ß@Ü *󜾭ý9ýïþÏå{Û.ÿ{ü¯Íóýš¼¯mç±5ÿÃ÷úN¤Ÿ*Ð}øP¿ÍA¤´ŽÿöaHñßìùiÿ³þ©?ÿûûÿý?¾ÿ×ïÿ›£ø+~ÿÏÿƒ—–’E%r›<•£ …½rÔþx#˜lÃÅ‘QdùëùÿÍ¢åkÿl€E¹J@EÙÓ?µ.op#Ñß¿¢||E[£ßv~úŠø¿úºØ™ÿéþüx&©ïr|F¹I§~ý³{£ß0ñ(5gu (cÖ×èÿFƒÍùäf[ßÊêûø 6ƒ¯>~Y„Hx257˜ã as­½ þçÕf0IÏÕ³ÝVÞ÷ùemß}üÄ0˜wÏêÔv2¬1¹€Ýà~dm¿/ïûüÄ6ƒo>}k)*=Jͱ:Í¢r\—öœþéÙµŒT+U\+mõ}~k›Á·F¯.J!¤µæêÊOCš(Í þ§‡Øn0êU¾´DiÔwý×>ºk£í£X±ö0aÆ„bmU{üOO³Ýà š—;»Pãè}ÿ«Ý­Ñ¿öÑÅ¿O‰2a(Ð^ÿ[µ_'iý×¾µßÿöó'ÅÅxvl”¥5„dZyLKßÿþëó)ûå@ýëëjâ_÷Qÿùý×¾ðüä÷}ÿÇŸkÇ ˜žöÍÚ ª* 2¬–Œçúoþ«_²Ùø_ÉõgÓá2üc™³eýçeëþGž!|þÛ¸øÿé_ù7ÿFÿßÿ^óº$¶¯Wo@І<ªmDü•¼’we¶F%1²Ð F²âl¨ý)R Ò”þKÏê4(ç›®ÌVU£?Ãôö¢Üƒ,WWfã8ê®NïíÍen½‰§¤Fm«$nÍ©ýTGg±FïÝ—©Ø<-"ØÍ·ß1ßž±Iè±}øD· ä¥cNoÿž>ûÝ.-»×C ¥Š‰Ì¯õÖL |èä×oýwÙoÿ×R»Ù?HîÉÇøms%²p+ÜæokLÿ»ÿsùÞöŸËÿÿ¹}>m?6= "’“ð~,„ÙSQ$s’4DŽë©°„Œ½ðɪ]æßÛTO›:ëB¯Ú›Ò+^íün—`@#ø5_êtÉõD½Š2>/fŠÑV/;NEˆªDšiö…ï bÒ™Cè×£=µMLF+ÊNìýSŒU`ÜïUø¯Ý~ÐûhZvhaÔþ=|ŠÁ"û+qŒýuLŸyE¼†DDMíA‡8 ¾Ç[{´#"\iÄ[ÿSöƒ—­éfÿü†'QoãGˆ ¹ o³·µ>fÿÝû¹zoëÏÕþØ<ŸöÞ»V\?‹V%:¥ÙV‡ÉnTe«É p”Ø×¦2•XŽuGX›ÎJä(ªÔ¡®@=û³C\bø—|Š`e]":ƒÈµ™N’Ÿ9 mbÃð,›¢È«¹¤lÿC%fžƒ¦Þš'P?¨;êÞ;0E³•v3>Êx›(B‰ƒ§¨.*xÉÕ~›¼ð§HfbsIêÉ!ºhýÖ¾ê"íÕÇ­ÿŠùS8˜q³¿é,¹÷Ûð›ÎQŽ2pÜÇìmÍÉߺ?o3ÿXûmøÇÞù´÷tŒ*܈ÊR bó!nÒŒ*Jr3P桺֤߻ùɈÚ(³nXÄ´]ɨC$Û\‰ÓÃ¥ö%f/0£Ÿ@:XU_ jê›6i«„ß¾»?ŽO0Šduû(./÷@H™£=äE)š·æ`”£ÿb3HÌJ¢ögÙOÕŠZo£j¦»ˆê1{à)ì"ÅmLj¯{‘*Š’ç­}¨Z`(eŽÞ!­Ôˆ×8o¶#(€†V$å|{E=½ÚnÒ¯Ýçno¿ÏýÞÿ¾v»õÇÚo£?öΧ½ç»“LXàCJ<ÁÚÛA}ùîlìȶc½7‡iE lW]´ 6ug̪#±Ýjp\$ŠN¦¸˜&Œ’¥[Œ\ -/&®¨âle¬æèPAí J¸§`oýzii3˜té"*pO¨ƒÄ‹õ¢<…ö—õkðxl69º”å1w-A² — Ê„­Eì*g{Òh’š*¹ÝºŸ2¿I5÷b>|”lå!êcø4Z!Õr™½½ý1ûïþÏÅ{Û.þ{üçæù´÷6¬à¡ö)$X‘/‡$ à!°’d´ÃÑ¿F. ±…©±Š³Þ® ø—ôÏ'ôõÙ+IÅÜc=¨äXÖÎë­8uƒ°/¤ÁsçPrQpŠ«–S¶wIêô•ß-üT’K{íõÝ¢EÕTLpôÏk€Ðú\þÐn~Äü,¢·>NY_‹?a÷Ù‹ö¿ª$ÞÝT­EƒÔ_ª›gsj-$k’Z¾u?e>ðœõ¿Í:à OD%_†Ù°Ý ‘ÚÛx™¾½ý1ý[ÿÇòmöï«¿ ÿØ<öÞîŒæDn•©á¯@Ui·R׳>3w¨Á&©ÑAÓ[$ª2Qó„^*ž6ôDKﺈ‹šÞi‰í'[‰j]~û†üúcDí2þxýÃ\t¢qì)Y6)ÆKû,ܦªýß»GߎŠéJ¥ÉÅúlž¤òÆ(üþ>zŠ ì2ªÂœ©ý{ö²*0Ôç>øÌ+œpzZ¤Æ[ó‚¯Ñ:Mú­ûªÐzî:næÛ^#E>®™wŒ]n{ïÏo—ÙÛÚ³¿õ¬Þfÿ¹øïñŸ›çÓæóG½rÝöЄèەݨ!B+%éQ¯lwÂ}î^Šü®Ší½˜Lyý¤æ O»ýP>ô ¿az|¿¨MzpÅÛ¿ç˜Ñ€©7;å„jPsö5r¼µ—º¹`èìÞú‡oÁ#‘~³Ý¥iMÌÃŒ·ñ“G¢ÞHEçômÍéw.ßÛüsùßÃ?·Ï§í·;¤örMMµjš%ŠäÞÄüÊ»7#:ù„ý.°—XˆÑÿ˜¿»íÛŽ*ÚTÓ¾$³4úY/<ç„d¾¦%žEö¹ŒjU»MÒX%’ÍÜO½W{ó¶æ{´fm™#WßU{{ô€&…{^È·÷ŸUÁÒ O¶~±úJ¿a;è+.ð{üœ’‡¨k¯lóýDRG>›ç ›²9móÖ>£Ô‹>uîóÖ–ýÔhÖ‹ùö7>ûó2|žÞUüøqŽËôíí÷éw¬Þfý±úÛèÝóq÷RâTÂM•j+*`þ%§Šä¹-Q ­øí©ûèËȾS8èy7+>¸ÉyÁø=£È…Š¢ ë¢bÐ*y,v¾PÚ®`M#(üùü DyBåžV,jòÞ¬µ_š“å!ƒ‘»3½»Am—”¨ ž_ÿ6üˉP~‚ƒ¿Æ ?Œ€ÈX•{ü{ÞÔÍ®ØéŸ(|¼<€¹…oíI—B ¼ö[ÿÇBç\cá°_”4vÝv{ÛÝF/JšDÍAo·Ù{·?&ÿÝý¾r¿ßVýëü{Ó|ÞsÇãÞüÖN.arÑЗH+Ìti ‰ãÛLAv»z2cƵÕY@h£Á×mþKÑÑCÈ’c+BéŠÍ¬xrmàæ·µŠÀñx"!¶.1*Šk÷ ÄD0C>‘Š$†y3É“‰0.£OUê­=¹¹ЈéÖ?¹9ˆ£ãô(òf¡RÖ>A~þ:ÆOкÁÙe§«·ÏŸýŽ‚;T”·7ðYi9ÞšÛE'—¤›êè½Êzª¾Wþd³¾JhÓN²r|ƒç³KieÞ&ïÝ|Ÿû½÷cí^ÆŸKÿú¹s>í¼ý¥†×ñȵ—…j1?/ðõKá_„^$ ‹L¢=¡ÿÈ_QŒaŽUBú=È«æXAŒ§_/LÌSâŸ!Ä1^Ue $ä•`<[Ú;œŠÒL^Û¾m×ÄÉîTý$ÿä?ÂdXùÚ­½ª<«¥}½•lBWÁ³y³]SÍÒ\¡ù>ö®geôÞê1ugû}ê÷þß+wš¿¯ü6ümãÓ÷Þwz8uóœ“$ ˆýÚƒ &Z>!>íL»:Ðïß~ÇV{¬©@‚2ÎŽ.ÌÈC?ó×ñUüFr¶¥†«o¿‡?þllimç¢$oªM¸7à ÷ F±B9ER@HÔ¦¨)ÝšS Í4Ç2¼»·OõO³ƒŒª;Soóùó©;[ë÷}™UÅ>6øè'Ð{öø½¨s{Zè]ÓyÜÇziÚ$yJzꥸ¬ìïÛ»D\T‡ý®–)Txm¿k…A„O¼öœ¿½ý>ýïþÏå{Û.ÿ{üçîù´ùT)‰vÒbæ#Öh3s“'%ù‚¤Aƒzƒq€Óö–ÊÇÙ½‚$O hÏ©}°C¨ DY`푳ÁÛ ¹À¨á5Q)Õcæ¹Û¨"êW¬°­öÁ*$Bº~‡#ŸLˆÀ:G{!æIgÿæ^AD †6»¢ÊÛþÌ¢m‰C¡ªð÷øù^_›~_àmþ€O[:{×»à•ýo;‰lI&LÙ—æöïÑ'šƒŠ—K÷CæKS>ß̇z2¬&šÑsø¨WšHqf¼MßÖþ˜þWÿ—å{ÙYþ×ø/ÛçÓöÛ}Ñ„{C¥aP®iØNˆ ×{ÁžÐ)Œ(qè½èYG·Ã†ìþÂá!WHS*²¿JA- T =åHˆÁöܬÈ&|;j)óhŽ. ŒóBB0åø4SÚB18ì>÷ËF¾4ç»oHˆÍÿ诳ØhõADý˜þU\¥í˜,IÀ}àÒ”€¤2¯yS,‡X ¡s±¡*¸jÓ¯€ùŽöø…°’m¼u¯ävA ¸÷‹ñ“3.й¾_çÐí­wa¦2옸³ù1ñ[ïïu;­?Ö}ý{Û³÷ÞuGŽÉ|ä•a ^ЇœVB=T·}&Ý­Ýýý ÎÒ‰iuÀ^a×$ ^¤aÑ+ÉAn º¯§ê¹7hÃWóŒ2ÿúMG@±÷8Œ½©á+ŽvBJÚÙÒo͸ZÐBÝß¼{ïךëE±Ü¬²žzö ö6vê} áF¶GíßsUv7†9<Åbÿa6°È=K{àXðZ‹úüÒ?‘øy-΋ýö&Ú€ ^Æeüü4 `èh—ùÛÛoÓ¿w¿-Þný±öÛè·óißÉ%å`ÿ;5€}.QÉD¹<ûiGL¡{ùq׿¬pJxè»Bv ¨)ÊëJ¾†RÒ3ž\2/ÅÐÚVêqœ”â¹%ûÄ!dn?'@&@(~G~¶Om†ÞSì·æ‰/pê¿”[ïÅñJÀ£ç‹ñã!?ê+¹ò¹~Ôöùwæî÷ÄÑY&ðÃOæÓºUUº¶/‚ìÊýÖ}‘õÚ„~³Þõ±»Ô©.£g1"oì¦ÌÄ1{{ûmò÷î·¥Û­ßW~ý¾o>íºg_Úµ‰örlìæjI€¡ê“•‡©Û9ƒr“ƒÒ¹ Ú“9Ëmì±BáHBLtež¤8¬5“ˆŠÌ³0FžíIœE¢Û­<9Sa9Êhkgd ÁGq"‡j¾4ÇW­pº;xaïÜÞŠö‰"D×¾û1]Áth®<#´ œô}Ä/ôM³ÍZøƒàk†ìG!@VR³g¶³5é°BHç}ï]k˘áæ÷Ú,ö‹á‚›@LAïaë!¯8Ä9wLÚÙü=égïï5;­¯ù×1ö÷–9çîµã|O9ý˜ï*ÈR¦OÚWô€WÝà´[ ŽP`¦R\M{:#s góJ4é#‹AYÞÑ9¨èŽû€†]" ióÚÔúÂì“Õ–qI‚ †Ï‰…W Š/î¼YðóI¼ZÇ"ÄtëÝþgMî‚¿ŸÖ£ìT!Ÿ;ð9úÀcf»zúsdüš=¾¡ÄßÄš„®‚‚­ÞÚ7Bª@7z¯·þöw4ŠK»Ùo Z@kf•œã7?¶êÅþ{LßÖü˜ü­ûcñ6óÅ߆lžO›OÛG£Hz¾o°dŸœËSI#; ÐŽ¤WM"> t ËÕjÐÑGòß Â`©çr5PݲõUþ‘”,0CðœÐ299ÅôUÎ"¬æÊ ®Sœq û„ª·ö<:Ö&)îý#¦S(É^Á°ÛÃA„€:zÐp˜ƒ¨ûŒOUÁïù#W“ÑÕ ÕodÀ=¾â)ßš“?´[ŒO$Þº/2¿yýýÅ|ÊåíY2N£'Ek%»¸ª¿Þ³·5ß'ï}_¼Ýú}ñ߃?÷Χ½çH‘ò‡Ô²íX‰D`þ ¦È/ )’ÿØ—Ó ''÷n0Ø ©£é*OAå"ÿ6ï(Vðˆ4õ ä«œÝnÔfWÓX䤰™Ã;;.ºëöRÇñÔû°-Øs5FñGöScb+9=drŒ?L¸¨ÀɹŒø>ö{#uHÊ‘$x¢IJnkîdèÖ€JНKç]ÆÛ㺩´ém¼ã0pM‡ËÊcïÈÀ"¾’ÉzÏÝÑü˜ú­÷÷Òí¶ ÿø¶o¾ßóöµí»=”Dµˆ}°@ 8bÐr§ÆKr+ïŽnw§]?ã]“Ïs}ƒ(L;¼ÅKK"õ„ex ‚휟þVËHÕgO:ØÏ*óÁ³ê\à"Ím¥€ÂacVòG¾=s›ŽíÒšEœý^[ßH(ú^ýúúmº>g0çT9¥çôù=p;»D™ì5o_^S‹RëOÞ`lB³ÝÚ$£aç©ßºXoþùª›õöT$’kWbn·ÑO8$Žl©·ÉÛÚïs¿u¿/Üfý±îÛèßÛæœ½×®s(TȨÛ2tPª„ƒEÿpØzÙ…£ßíSÔŽW8VƒÄë •Â5ןÏ{å±ÓßÇMŽKS{2Äö½ŠÌ²ÙÊ'˜ì¬J?ß¿í: ¥ÚÀ! ¶0JºµÏ’i1g§ü}>üîÊQ¸l¿Ï›ý:l€i-À>~°7¶Ô0š)Pðž½øGlåðËx”‚óöÏ?>ZÃyˆÌDàè<%© _ýa<Öüs[ru¿žñña¤Ëäíí÷Éßûßo·_ü}øûæù´÷ö8§-Ô¯%‹Bœ_@`„°ƒ2g OdÿÆ#¶+ì´àµ}ì#R8Ú+bUô°ÐävÀ§z-H“©¨;'d£š%ÉÇ€/½ÙsIéuUtnŠÁ³Áåí"€D¼µGm ¡<ŽÝKÿ‘©¬-r7õ‹ýÒå¢iÃcÎÛø¹«º9I”À?hÎ_Ó‡¾I"•–fã Ðª"conóA‘ÈÄ„|é>E™_@Á•‹ù¬PLi¬^†ÏN2Æî˜¸Ô8ßÓ··ß§ëÿX¾Íþsùßã?·Ï‡Ýç/¤Ä½CÎ)„‡6/| 0óý&>é…€Ý1s<±ØŒ¼Ä ΀j Õmõ‰Å6¾!:ƒ~ÕÔ «›)øÎ¼'²‚ŒbS—ô‹×<¸”Œ{ü™ÙóóûOk™bWׄ*Ú‘k{ß.ªùX³Ï§$úoÛe Ï|{¶ôDÁ=KÛnŠïý'Êý3uR‘pñCW—a†ªÄ§´[{êÅáê…'íÖ?Ü©)HífåÊ }[½Œ¿P˜HaŠ½á˜¾½ý6û{÷¯¥;¬?V~ý{ã“÷ÞwLYÚ"鄿ØNÂÕÓC©ÂœÊÃ/;0).Lj«H1IX«àl;H°³‘žÞï†ÊTÄ%ìÞêõª"ìÕ`užR±èR¹·n¿“»Hâe5lj¨4qýøwc •gîÀÉ.ãÙó|¹?4^ÆË•Âxó[‡ù¶Áƒlkb›nõü3yj¯<3òèŽ D°Øžpö6šõÖÞþ(™ë­ÿÆ ¯£(Îi?õOv9˜ã)ê1~‰³ÐÅDxOß»ù9÷ïî·µ;Ì?×þ=ümïÓ÷Þ{ûeÜ–Xg©fškHÂ+<o{6°ïCÁæþ#$ç7íÀ®Â Ô”ìTq§¹-ž,!ãjð{œRSvUY/Á´OhNYÅ场ñëœ!/&Š»¤•;4TníUñYÅR:oýgÄ/…¿ïóf’ý‘ ˆÃ·ñ›c˜©îí®ê{̪º(?Ng6àüx .„³ùä™Á3|´xé^%˜Ð8Åa> ;®Ò‘¤i| ß~œáñÂsööæûìïÝ«·™¬þ6üc÷|Ú}D"ñ<ô&› Þ( |W:SSR]ž]7ƒH”ë`_£b­îÙT´´²d‹ø=Q„عäÙØ\ñÇJt!yTŽzGúhy6ÔBŸŒãˆb•¯æž9^+Qm`¯'‚—<`;uÛÝéžöŒ}THs}¯lý›?‹Mä€yãbàØ³'ØÑºÞ¿Çº Ÿs:µ¥òkþ‚ý[ÿçò½í?—ÿ=þsû|Ú~ûÅŸ@•ÈêÛúÇ™™?½NS=3¥áìêd®3èmqEê}.ó½jvÖı¬¯bÇÌçºääcdºêSÒ Ýæb¬½ŠŒ§=%syj’‰ôÁcá{5áŽV×â;ZBæ#´âud[ïB™d4ÅVy³œH{L¸‹¸ÞþgV}OŠõ­üž=jlyPMñÔ$ÛV'¼ÖV}·7ƒíNU¸{mÕwÿ¤í0M´Ë/ö ±5c^[õ=þ ž F)'Wß§oo¾OþÖý±x›ùç⿇nžO›Ï_ùc÷tTNBu~-:yþ¡·šÝ1OŠŸœżÛø®ÒÍcœ/D‰«½¹è ¸Æó%ÃkVìrâÑN® EY#ƬZ …šÝ<Ä%V"-"Õ ¿¶W ¸èp;¸HùÞ¾BëFgˆæï迺Uöç‹ùpØØßBºòˆïáWŠÂ¦íåR¿Ökö 8B/¥·'R_q‚^ä[sñqÉOŒùÖ}“ù¤ÆEݘO¨¸!±”h<†o/¤ÙTüœ¾wûsúßýŸË÷¶ÿXý÷ðÏÍóaï=äbInG¿Ïë$øº\ ¶ØN’3ú ²~:xI F¥þ{´­`Ï•j£‚ö¥¡R‘Z¢F5)^‘Ð"¥5°Ö¯ÚèÌYUÐjÚÈ“ƒÃÉÇQ'ÞìõÖ^é¶Åš¿ ÷þÑ(oD<[M7û‹ì¯öI'€ð¿r…P6¤òD7^ó—EfÛ5Î+@"L©[{tdýDèò.ýìÇ9s–ÔÃ~Ûvõ’uIë>~^ؔ۟ ý2{û}þ÷þ÷õÛíß×ÿ±>í¿K•g&XÕ`ˆ‡A݃^øªB»W†3ŵ?âöä‰ê,D®¨Í ©¾YÜ O Ä"£S,APæ½H“¼æš(¡ØrñÍbY—:]^íA²_(C€+·ÍÝñÖœ“Ñ. ¸Öú­{n. ôt¿)wóâ ÃérkÇð©Ö˜›\0ô˜¾@°Igoy*¡•°Ï©*’w´gsÚÀs·þ 3Ï´p³_1ÑÀªŒËø)Ô„H'¥;öéۛﳿw¿¯Þnþ¾úûðÝói÷ù£©R•’1ÏæDÒ¥aŒMÀN§î Ap”V¦g¶çÑ‘€%ç]Ö#ÒÎ3qÅó ‰"©çÅU¥jñòNAf©û‚ÄKo@‚ÑúxÕ:Ûô”¤ØÚbÛÍÆ“±ßšƒ7ƒvÔÑßz·'9]•ði¹Ye½]E%=/¾×àÃÈFpò—sò!TÄ=¢Ÿ‰Èv‰rSæð3‹O!æ[ïÈÍÚ–…Ê$Þ¬B›U<<ñ¸Ãª¾•Ëä½›ïS¿uþZ¸ï—é_—eüµi¾ßÓöµí9OÖ‹å'ØV%P!ž<›Ñ<ü‡fgžZÅàÉjûHÊÌcÕ+åŠÂr?Éls•aWŠ?Y°@ú7PU­Ú.sÄ'Ô¾ãáTá+6ëíV©—]·¬„•Eå]»|†×–Q8XC[IЭ}^Cmy ãìŸR­Ž3J2£Ÿöó;ö“7\YÈ×ø©¤kz ÀÚúĪ~¦Ÿa~eîÀ%q$áq’ξ4—«ÝªU»tïO_¬¯åb¾jª'ÀÎsøâ !Þ(¦?§oo¿Oÿ»ÿsùÞöŸËÿÿ¹}>í¾ƒfĶäÍ\f¿`:1fJ ý©ÇŠ9âQÐï• ‰ 4ËY®(Tã©¢*dÁ"¤Ãª@W¨¸„É5ÙDEo®µÈ>¢“4´JŒðjoŸ-4¶âX„mqU=Hní©ÒÅïù‡-äÕ?Ð/[9NÄ|1_ÌÂ6ÚGfl~Q>Áv~ NµM*;“¨‹üa±ÖöШ*8ÚWñÂp8c¼ôo¿c? ‘.ö“‰óÁ”®ò1þª½Ñm={¾LßÞ|Ÿþ½û}ù6óÕþÜ<Ÿ6Ÿ?äQXkI©|á**/èX´=Ɇ٥¿®?…í¦Cû¸Ì‡j ¿`†žÊKdfÒÏcŽénWý.n%Æû@jg,P´FIæ€ØÚàIÇ•ó¦âÀŽi_¢“ ž²DÚÓ­½”šç¤JwÞú·· D׋îå´®@Ý i½Õ¶ñK©y"¸޲Ûü%D;"Žl î,59ÝšÏ?H© ^îó»{ø¢*‚ç³Ä|1ŸµÏË®VÓeøì¯BÖþîx™¾½ý>ý{ÿÇòmöË¿ÿØ>Ÿ¶Ÿßô”ŒØ÷0»Ç²:*˜DÆÌYi¥@u¶®ßø—æ"¡:«£ÝPîþ0v5ó]dÔ2â(wÝ£!‡Àw[i¡ 2ê ½e‚ðö`ó½p}xI° Fé-õÞaÞâ÷ÛÚgDHE;óÖ= JóïpòoÖÃ"€i ṩ_£¨ë Äoý¢Ý&»8Q$}ä"(‚‘pŽKsô/)šÆ­÷*ãI§®r—·ñ@½* Õ㸠b¥†fZLý6s[ó}æ÷Þ•Û¬?V~ü±s>í¼ýË^Œì]˜Ö„t7¿˜‚ÞÖ,/î2ÛšCÛí 6(?XÐsóÁ{~YèpÄOçŒôÜÞ!¼ „P]n!V¯€äŽ©&HŽPÔ³6‘’D‘rö<•½ÄA¥ˆu8ÀÑ EÏ Ï¶þƒ(ýU4ë”ò›ýˆ@Ûßÿßn÷Ÿy9Ìœ aŸ¾ EÑ–´¾²Ô€ªùÒ¨(.gï¼»ì¯SÅ®Ôån|Q]sGcçáeÎ`iúeî¶æûÔo½K·.ýkìçÎù´ót„µáÑÏxûàuZY¦Î€ÒÃiö‘‚Rõáñ “ÐC÷+Ø|06Ù%¸–Æ6y8`ö èB\Š*Rä¼´6ú{>Ô|ëœP%(½NÀæbKwÅ\˜áŒ½D,9ôEͽÛeÍ£ ý”չ¶é£ª²ÂŸ(o…ŠK¾µ†Þc" •f¹õ>e=8¹V.Öƒ˜©¨ùv%jŽÑ…@»©4AÙÛÛ³¿õ¬Þfÿ±úÛøÝóaóý#ƒXôâyR"áàfzŠ‘±Û$ þ¹uMÜˉgT‚O,‹‚‡h¥yG©’ŸbdN.Ü"/b7ç9—é?ÅÈ“Òo²{î_ñõÀ¿úSŒ Ô‘9óBuófz2‡úÚ€S0ýðÎÿîfî$å‚•§ùiÈ|»iZü©Fþ5üÄc3wŠzúO5ò¯éKjV25í§ÙNeë8œ>Û«þ6ÀÈãÖ“ýt?íïÀÄ Äø2~[qÛ?b”é—éÛš³ÿîþ\½·ùç꿇îžO»ï3áß™oš§øE‚¥’Šˆ’4í”›Ææi X€$zâ,™OÁ•á< Ò(b穨g\²OËœå²Òe{e¶îÓpö‹Ü¯‹#^ L Ühú¬öæûÙM3«^… @Gè×{ûNØtÙÚ)[ÿ•àZë)ÔqšOÇ_òü×à iÙ™d4Ï×ms'˜;ùº‘ò“Ï6Ó  Eüپß miýÖ}—õ¶9[î7ëÇ„±í3½ÝF‡ó˜í“z›½­ý1ûïþÏÕ{Û®þ{üçæù´÷ŽòOB×xÒ¢?_%Õ³#¡÷< Ûö!€ÿÉ‘ ø@™š¥PXTÊÕÙXí™l ¯J+W{hQ™â2iµL§]óeÝ‹‰²­Áš/dÖ,q(È$31bÍ·öAµ®@íÓ¥{1)á¡ÕæÅ|*Nû´Wy~†ßëùGŽá‘û=y$YlåÄ“òÈŽ)ÓE¿·®zLjc¼ôwÉUkC£Ën;rœPÅÛÉ•â9tÄMCQ€ÍsâöÖûÄo½ ·Y,ü6ösã|Úx—㪨 ¼†Â¼È"ÆRO,< žMô¸¯ˆý&Âë@ª¢mIÎLì!ØGØb{xiCê[Y07¢Ž´DÊ©,›V·uÆ•®bÅÙÐ3 kBxñ DJóÖžÚ™jnªc/ý'ÈLÐ|MÖf¿éñ•ü„e_ã'p»hrŸ´Ákþ<Ù³£IŒÜ¿2Û•c‚û¹5çêM(±Žyë½Ëúáø‹õƒ½1íOPüs½yí"æü6{[ûcö·þÕ{›,þ{ðÇÞù´÷Žã.xsy3djú&mÝ€cåEH’×+Ä+²fœÿ‹T"™“‚T$ÏBÿæ‹=džÿÒÜ#v Çy^畽]|„‡ÐÄöyäC,®(ûWQÇžd¶3@ÌÒc‰)N”MêÞ^a¤ŠŒ÷²mýó å…ÍμÙ_d á©{?ëA !}ùaù=YÉøžš9{ÀÀÜ]FºµœÄks’ný?ôø½¶t³Fxà yèÄ>Æ¿èñ{Jñ6}[ócú·îåÛÌ?–ÿ=üsû|Ú~¿/RÜ€§|¸zJåTFãÚã÷Ù9&í¤*^O¬ø†ƒ°= ›ºá]XJ{ÓQ¶À̧ඡŸ—-êwÊx#¤'þ/ŽIàv®8lŸ´Òë, 4N,”`§¿¸K‡±«/òЭ½9Ìþ ~íÝÔY¤çóÚÍG£žºraøÿ:‡,ð-ÔV 3®8l´c¹4‡ª°Ÿðjä£÷†õÈë‰qZ‡ì >!ð×1ø.½ ü<˜çÜm͹ߺ?Ön3ÿXûmôÇÞù´÷ö+Ÿ²Gé6¸Oæ®4É mTrwh‚×ÏúÝž'h¯ÿiìR{ôß¡Jÿ¼ÖV‹ æñBˆÒ:_©8*cXºàr|•ï áÓö¤âö¦^¡(t‡ õ%ßÚƒ¡°[u¦oÝgó3C h¥±ÿ6þ‹_1¥‹ô¸†¯Á›/g3IÔƒˆü{îö+Dí˜øA|B ?ÍóÒÜèbÛdÎ[ïU¶C_ÑOÓ9Å ·áïqùÏo{{“EÚ¦ílþžö¯½ï÷ªm¦«þuŒü½k¾?ï:ÏÐ>:Û³Y¤eïò:%ݰ$¼¶:xusˆ1©ðøb¿‡Ï[´IÝ*´ɯéB UN€¤@!gÛòõÞíÑÔì+ÊsôÏw5˜L×,ÚíWHŸw ³.ãçË#ꉤa¿ÌßÞ~Ÿÿ­ÿcý6ûåÿÜ=ŸvŸ£íõÌöYÇÞD&0€‚8äÀN~»Pˆº¹àF‡Å/­c R$`Eíøìûꔩ…G2Š'^éŠúñ{4+ˆƒ-€NVˆI¶î(¸1sõgzÀêö*°G¥¢Ž|ß(MÂ;oÍIƒfHvBí·îñÿˆÊ=ÌûùYæÛô?ÅèÛð3¥4"Yn³— ùÙÔåE|C±zµ :^šøAáH(KCvë~È|øIëžæÃÿ í½?„ϰctŒª£#°>û¤uŒ¹!FŒ7B5ÓÄpæ`™ —À°Ð¼ú]^èQ´V°h‘Æt<üIUZjϧ ¾…ô†0ªX˜q†§}D‘ËÀ3±æÝ7dú­¹½zêYºl·î+No¦è »ùEægÄuŽmÃ·ß ´4.¥òÞÓg¿KÙ%§…ƒ‹¨¼Š ƯKûôçÿcíOvtÛ•-M¬ïOáMeg%뢙*¡ÔHéz)3€Ä>)„:ùú²o§/Ÿ$ÏÑPw/:œ¤ÑŠ1`ʸŒÜ"õuÇôEþ¨à3ŠŒcŸ?7Xá)Чúöî»ö÷á÷ÕÛÅßW›þ±{>î>ÆÛÇ;Î(‚Þ%§çkµû¿”r ûÙh5ª”#xý[â)–H’¶÷‰·Ã(•ãÏàBHŠlçP5iÁêOÂ6¿©H¾e(Z#Ôòc$»7,b1Èv¨®€F¯³Ýºã4Idè,‡Ü>:s%©ô§ú-<¹T•@v^þÀmòöŒ`\ÛMè–My<³Yþ¤®wð ‘45Ùpg*@í»ƒ!{ÞÆwfr˜ùS|»Vm1áxî1ýI¬Ù³€ÚÝÔ·õßµÿýµtßoÙ¿Î…O}Û7ßoÕ}mûî(š'2ì"™uÅÛ+€{ä‘­=jW©5©¦fû028‹æ=S‡b°taÁƒë1tp˜ˆ”­€nR>E„È"._™éü|ŸN†`³Ï`_{t_i|•î݉4q…]ºζ–øHª—ᓞŠ&˜X/âƒÏ`¿oªïå/“Íßé'N¦e³¯B]»ô·ö’žºðº‡ùxk2ÅBf/s8û“Œ×:êŒ?Çï’_ÈHí&?ÉÁÓ¦ÑE¤qΆ¦Ð”Znú{÷?Õÿÿ\¾·üçò¿çnŸ»ïÆ+öUO²íëi·þpâ†ÞUã9z3\1¶Cq{÷‹â_£ï ·KY÷×ä÷}³+oÛwGµ@àô9ûƒëÓHà +ßx¸Û `Ÿ’oòƒëCyP/ Œ`›?6G¨ò0ÝÔ·u?Ô¿ ,ß&þ±üÛô÷Ýóióy:óTR‹2£Š W‹M“=l•Ï Pqpü¨öL5xðÂUe¤Nû°$CTa,H… z­‡C QìC=»š<QÖ£ÁXöÔ«CñUw‹}f§^ÿÁvöÃ,(³ìT×›9ö`ÙŽ·þd’Aâu¿Çð™?å˜Ý|HŸÞ¬7{(ø#x›½mfÂQ¶þíÉG~iz³(œý…ëš@Å–—îTåRN$ÿæex³Ÿ‘Þ¦GÞÝ)¾µ7<£Ž@ΞW¦Ù.ï‡vÑÞÞ×þ>þ¾z»üûâïó?6ϧÍwÁbj±ÿ7e½õlÏÅ:ß›f~àÒ{=Ú£>âelCt Š·Û‹“ššá!;^|\Ñí!*ÀåÔj¨ úvã\‰[êAèRbà 4¡Ü\0^”Q“×caëOƒžcÄÛøä1S“§»üEòsÅ…‡xó50n(^Õ€wý #'Âß°˜¶±=`}ÖcàÝŸÜk[§È³9]ÆÔ ¬ó|‘?³É~ ?æÏë2ïâÖü¡¿½ÿ®ÿ}ü}ývù÷õßçìŸOûï³Ï vêx²ÎUôN a¬ë¬‰)zNj‡¹¼×@‚›½%Jµ•âV"×›%< tÜ[@·—m7ÙÇR~ˆŠ°÷˜Uˇ5É|éç¹"Š“Q¨ !msÀÚÕDÂÞß>fUîàk¾ŒÏ{‚TˆQ«×6lò¢,æ!{O>Xß¿çOᨇBÌO]õ/í‘æl'õ“OYvã·ÁêÎ·îø®ï6C.߆') ®»ËMüN„ßÌóæbž›CVÞ{†Lu3ªÎLèN̬Âi-°SAÿã». í‚iaUS§SBuëŠZ&1Q›ú<Ô” ×jôb­½…= áôEûø$rE¦ˆ!_òCNClåaS}ÍŸ¼¼¡Ètøáü­?˜7íÀ‰:`þq <6Þú·?Ê]ÁØsü&ùí±"ŠæS~À½ åfOÞ?æßÁ´‘¿4ÝÔ·u?Ô¿ ,ß&þ±üÛôíóiûG*• ²!1ExYªø|Ü8åa޶Íeú3s‚rÎ+Ö³ìah†¯=-Å/‰‘OÊoC"D@Ôü$ePtÕ°©ô‚ÐÞ#@v«?ìd­ë/¸ðé—[(°6Û€¸OQ1ÇÄ¢¡ÛÄ(LíiÅò¶É—é&²­õþ­¼¢àýö†¹D`Lš>B»tob„!_xÙ=¿Ç–‚Luå[¾åVZŸœ£â‚Ÿ_ç´›À“UÓnj;ûïjßF¯Ú÷Kò¯sÑßóÞöÌ÷[m_Ûž{ªA©Ñy:^Åä±ÖÁÙ]'¨Ý.ÿDó¨S˜´åCî s!nP,€¯ö€ƒ¦-JÊì'D&óxÈe+¥ãö'Oí ¦57™WÀ÷» éñÍg6+;ßúSæ5ýoÃa…ôÜáþ /óámèºìý÷ä2¤t(®æßºÓëËÌ}@žçJøÈ^¾JCrZY´s›ö@¸´s„Р=rî—Þ ûÏ1“§Äì£Ë_ÃNñEzaûØ»r…ÏÉSy01šçÄìÊÛûïÊ߯?o“ÿ\û÷üϽóiïùžŠl*K”G¢’={÷©äR¯õ¬ƒüWµGÁ¢—øTu³qú /ãj¼Â¨ð{¶¸d¥Æ&ܹT³ôŸ7¬X¤Qt§ãdñ(ºúáÓÌǪP‹Ý‹©ßz£½IØüyÿœè)•‰Àè•‹ðLkÉ®»¼V¿çní JÄæyɇî2þ*;úœËø/Pm»Î꥿çÈÂo³×Ëøv»šü…DŒÒ.ò+㿃Íä†ûüy¼DqG¹èoï¿i~_»Múcé·Ù;çÓÆÓÖ$±ANý„rmÁŠþê LI<½bSn"ü¡¦Ù³=þQ–nêJ[·Ÿƒ<€ða{˜}&™,ö{c¥FR‰Á®º… ¦0áÈ0i„zê=Ýíï  ׫ÃÇ•E2â­?°Ç”ñ’õsOb¬ /VÁt‘ ¼Æ6UŒl³·ö4¥ÛɔشG^/~,ø8µº":*Mãõ[;÷mçØâ„Üoã W×¾Ÿ˜ÂUþ¦y«ùxÏé7Cå¬-Õ¡¾­ÿ¡þ÷øçò½å?Wÿ=ÿs÷|Ú}W}̪hÙO ¨ÉH tfˆV¨ñ&“ØK0D%…§†+S.á¨Ä¡£¨OV³ŸWE£?Ì+X <^–£=b±³Ùý]Þì|'öaò°¯’=%Áâ‡É»Ryën&ŽªÓÂÊlÜGÏ€]6c–›ôYÒÛ¾éI>{MÞ 4›˜õ+â¸+ÏN­À™=À!Æ¢-CQ…µƒm$.âtß Fä/0½ä‹üXÕXo _íeþd!ÙoÅâî­½½÷¦ü}ðmévÙ÷•ßç¾oœOûn²ó 'a¨RwÏÔ fÎþÅýÄi†Ç+(/'¸’÷FÁb†ôÔÑÖë^öÿD"?‡·ÚÁèÀNØ À Í®¯ªP¬Ä¬E™àv?Qi€7’YûàÇ­;\^¦†ÑKi·áÃ5+È·í">+•\‘™=°¾M_¹mf ¦¼ò‡7õñÄæ ÜȧŒ’6ûÄwô÷Qà4!˜yŽO8"‰)–y‘Ÿë¹ÍIÿeþ°Gnß¡Tú]}{÷]ûûðûêmâ«¿MÿÜ=Ÿvߥг'%ÐF<‰ M€xµ­BOÈX0¦ø,ZTþLÎ9üÀhÌ@\¶(ôÕ€e‡KB‡î¶%õ¶*%ÙéS2èÈ}Á²S‚âòp ^x ÂWS–mCâ:àâô-œ,øÜúC+€[q\Æ·vŒzŠàýòÙä'Ë"’l“{~ÜÒ¿çO¤ý)Èî ÜôWÅëV&ž>/« ëƒ M’ÓnýÉúh'u—ñ›äiá¼Éo§`#OÖ¬Íq›?Y ‰ÄÀÔúM[ÿCÿïñÏõ{Ë®ÿ{þçþù´ÿ.ç*N0æšûU38R¢Û:WI=§@P ª’ÃB-C­sèãÓ̧û!n>‘P,D{åu¯?çÏù¨í:]#ØûÄ}ƒsÚ)Ä>p» ¿1V»AÏ&l‡ù˜.ý+Ìì*èŠñ6>^;Ó€xñ&?N¿qmùá\û=}êã+e q>ÃK}0·Eïê:X&€²nåÒŸƒ«¥B5h(çðdUüGÓ)åvé‰âŽBÐ_ Çì †eÃáT8ñ[{{ÿ]ûûøûêíâï«¿OÿØ=Ÿvßï ÌÉfŸ@s4…9ø\SZèS47{x±ÀrŸÆOÊ=ËkŸVÈy!òûëOÊ=¤ð y]¤Èä ý¤Ü³½ÈK^Bˆ$±ù@·²=íÓOÑ‚ý~³`ÜúÛnµ¶vñ‰\ÆÇš5}R\^/òƒç#fÈu弿çñ*CíÖóòÁ¼Õ'¼ÈÀè*§ü!€VT~ö’'só6¾^dIÍ›ø]û ¬2ÚÎéߟ³ë(;Õ·õ?ÔÿþX½·ôçê¿gîž›ïˆ*X„…¸N A“"v*4Ñøœ«28)âpV‰oÏ’k0μÁ3Qúž™RŸ¡iôv~Št®üS\@n=%‚‹ñ/“^´ð¡8É•ÝYî¥ñ©ýâè—îrSÝ@€î2<%9´š”À½µ÷ýêýuÑý6ø{í¾ßÂ]Ö~›ü{ï|¿•÷µí½'»9ãG#Ãz!‘ÏDÂè:ÿzðvI{ðpA.XÈÚ t OàtíJ3+W¢ ÷Øþ;ÔåíXV³ÖV¨ˆXO¦ …›(xþü>Õ¶fÒ'+ÎNCR.þ¯PÑßîP€>¸Ný®5¥É“ýžP©¥f¿{¦Ñkæ„‘ìÛj{)õöE;~Eê¬êŸ@5 tÝ.ýÙǤQcÑ¿ÎÑ1r°L87á=ñ¸aTûñuN#‡“ÚN°YÝýwÝoãoKwÈ,ý6ÿmçú{ï»§:™#;ÀÐë_Þ  6ç¾*?¡.‡ÎL­¿#PöÐYq_8ä)vàIÿ¥™H Ÿ‚ŠBFJ¢ ŽlÂì)•ø…TÆÿ’iñ4ñõœ&*—${(íÒŸ,n;Ý*U¯ù2~Ôs–\锞 œý|33"?µÉ§Ni/‘m[ßùÐ8ÿUœ¶9LCCåÇ{·òb zKŸý9T"Uo:4ÎÑÉ+¶(Úq¿ L›-¥síë2yÜ»üqF÷¦¼£ÿ©ü÷øÛâòkÿžþ¶sõ½÷‡@óQ_ÚÑ[»Â„$Îú¸ŒÏáUcô‹ü¼P+nvJ÷õ‚ý=ÿ¬¨©™†Z©ÿ[¸¸TÞö5=…6"À<ûƒä`‡åÚçøùÉ®qÞäè<ñ€¾òÖ¶ùó¤‚ Ù®~Óß»ÿ©ÿ÷øçú½å?×ÿ=ÿsÿ|ÚDQ€@ùW®K@åŽd0é0•ªmGÄ$AÖ°ÜY8sí{§ìÍÛS5ëÚTôƒ T©¡‰idø"A˾ï:›ÖlulyæuҀƲç‘ò’Àõ­žø^ò­¿ø Ðñ6ºí [)n:·—w飤·%|*„¶ÙÛÉÃ6wG]?´GÆ@$ã6®G3p =¢ ª£ÿ„hÈâQåÇøÜ4ÆK»È,Ѳs/ó×Q —þ£‹úöþ»ú÷ñÕÛä?V›ÿ±{>í>Ï!Áýó/ä•^|k†\#:¬×z‡}˜áuˆæÞÌ"Lß'‰"&>Y°ØtR¸št²w\ê !ó& Ò¿Nö.»’ˆ&驪¤bOÁÀóIUuoÕ£P‚ÿÇ1Ïî¹q­L¾ßËèâH§TmžÂ×.áùc·ËÞSÆ ÕÛ©÷[s¼l83y´¨;¹t‚0J¥Ýúã8 ).ÖÉmø.é;Ù3ý&=~K³ãrԋ㜽ÌJ°ä•~t*ïÝÿTþ{üsíÞòŸkÿžÿ¹u>í¼#\QS^ Þ:Ô‡Þ#Πh=qqÏêN%•©Ø“«=È”eñ"\N§œ„“Òóü‹$‹îN%h©|óL40}ȘµÏTÏ/qV‰¨où¨A›²C`4QÄRæÜ*¥ÝñÖ?SŒEx7ô~?{•Pÿø&?“$ÚU¦³Ï?Rfc£·^ŸçáKQµhÁ.ËQ'-`éÖ䙨‹b|šôšð ŠGû¶2ŠC¼NBZ|öœ£7å½»ºßF?Öî-ü±ôï©;çÓÎsj:³ÎH̳¯ƒCºÃÕ–pNÇgl<~ጚKí6u3)Æ:äEÞ ´“ÙÛYg·‘WÐp6‹¡¨ÈK%§òpÃÜ ¹ÜÂtîvaK;B`;gMe< bÝíÖ/Rûa9¶÷ñI+#Ax¬;vü —æÌޏM¿l$?w¼ÿ[}`ÛΠ:zEEáíÔ -lä­¿\Mv,UABã‹¢Ó^%Í›øò4uŠÓ¼MŸä.ñNÝ€‡ú¶þ‡úßë÷–þXü÷äϽóiïùÓp׊[Ê!µ©é%+’…ú/½-h©`¢ªê^A¥8¹.Ç:õçyú%AÌ` P0·((vÝxžÅT䘇9¸‘¿ @üvšD8)gœOu¤XQ˜£Y4|”õáÜûc€-›rj—ñI›È…{f%ѾŇÛÏ~–ôòTWþš<Ô€Ô7{gþÆý«;’&`ls1|`ìù;oýIÑX{È©xß%=4œ±ß¤7ó-!^Â2¶ÙÛ?Ø;¿‘#\oÚÛúÚ®Þ[þsõßó?7ϧ½w ‡þ‹r“¤+9ý}ñ(’}Ö§C“Ç%w ¨RGî€öœKx‹¾ýç¨e7ü¯ã€½…°¨ŸSæRj,‚¤d-¯09µšÔ”{!÷D”Ÿ,åõsʯ‰¡ÞúÃSY„¿¹<ÀÛø™ZGh&ûOÉK~ô¨¯¬‡ÞçOÒeè$ï×'6ñÒ_"Ì.Ük+GxÛ±Aš—Rý§­>ùx| —ñ)=¦ös^äÇ™-ž›Ëüñ{ ÚxÊÜ>ô·÷ßõ¿¬ß&ÿ±þÛüýóiÿ=z³fæS0*¯4î}Õœ.½Ùhaòzd6€Ñc ’°!wOl a:ô?Ô¾~³!+õ®•H W¬?40è´1”F„OÞf>_zœôf’ üy¬Ë¤twÉl·þèÅÚWˆã=>Ì”xÍ6|ƒlâKŸûöƒ ú{úQŒnäé–òÃ…ýK},€¼ª‡ÇŽ3mã¹æø¹ô׊š6•HtŽO~@Üîd;å'ù7„®D¥sþèø£åe;õ·õ?ôÿÿ\¿·üÇò¿§îžO»ï‚" |®®îɪYÙÝÑÄ)‘ßWÈWškVq‰™ =÷¬Ö^e‰J°ì ð½ Œìºöнí*›‚ÔwZtXPæÂ¢ÔÒÔCNÒƒSÌNÊaåz¤?*s'§iÑVBë‘fû‹Cô»?¥$t߸pŒÞã“K¸Vzêã"?Řöû<5ŽÒ{þ,@È%Ž…ÃôÖ_ReI剩TbU£úãì.T/ûéÜSº ¯ŒÀ:É)Ê7ñÇ®ìŠËïµMøæS[ÿCÿÛøÇúmòëÿžÿ¹>í¿'Ĥ˜—°V\ø‰S¥bàE²Ñ»_6öÀ]5~8žIh…œ×Û£Ý4³þÃñl7CæY'Ÿ¡º’9ü°× K§x¥+´• ç;¤“ 3‡Ã/5Õí¦žoÝÅæÇ“±/†ëmx±ùe–`ô›øÊ"²ÿ0l¿¦Š˜‚Jæ^ê»2†ÅðÙG6ðí·þvÀ*5ìm[.ãÃ7Ha)\§õ"¿Ø%)¹Jcao½çO~;pcéTßÞ}×þ>ü±z›øÇêoÓ?vϧÝçÏ&»’`¾´¯BïÒì%=ZñL*ÌdR°ýá^qûÄ~0ÌNÕ´·ÖU |R¯`Ö$Lý†­h’Âù©Yx—ì‹ìÀ~Àl`¿蜷þÔqœí£µÛøPƒÁÒgm7ù“äç–Oìá5ò h·?úy·ýÖ_à,£ù ʶYk¹Ïþ‚ä耧µy¿JþFTÿ&~%?ÞžRlºÛôíû£j§j¿©oë¿«þX½Múcõ·Ù»çÓîóý‰»¥:‚P(‚•­í©²ÉŸÌH}`-Äý˜ºTð‰ÿre•ƒ5d¯ðÃnÙ•OÕõè‡U… UeÄúô€+¨bÖרÕá±¾@pŸ·;òu](í·îN`(Ä ßG·ÅΪã¼IŸ$}UuÆó(ý=y²‰í#Wì)mþ­;Ð_ÉÀå§ö¢e{¨ŒÿÖ}âþªb+—á³j&1{-ñ øCø’²•ßÓ·vI%¨duWßÞÓþ>ü¾v›ôÇÒo³ßw·}ç%[|3årâZXÞBSèÁ¡øµÃIø£Ö^„s B¯‚ ÜD9`ƒç}Ùk|ýä•S„t«òs^ðf%(yÆŠìèéRV])‘$ÄØ°ªBÔqf¾Lªàìçmôwo$o€µc¼ _u°à®öÊš]|ØÌŒÊ9=8á¿gOn…Y«Q÷·öÀ-²uˆ¸û ìJDwa½õ‡*l00C.Ãw·@´ÙnÒwXíàZXÇì;aJ;š§ö¶þ‡ò·ñÅÛÄ?ÿ=ýsó|Ú|G9ò°gVâq–µ”Én&JA&Ht+D½:Tð—öÝ<|ī̙ @ˆú18ï+Ä$›‡%\ÒÎÉHöÞ$¸ášè%;Ôds§'AnJW ~Hx]g»ô dè”è-ŸÃƒïžHMð"|Lqä”=Q–ß“oï‘–_sSC0ZZ~Q’ÜlÜ‹Þú›ý2ØKöDé—ñK‡S±‰úèŸo ö˜þeú„}ÀLQIJ‡ú¶þ‡ú·ñÏå{Ë,þ{úçÞù´÷'ØÄ·ÆÀ³  —C Âi et­?ËàÀÙ£ìáUမ¼ÉÛ™ =`WúlÇ»E\‘¦>PàÈÓí5km që³æÌ3f®Ö‘0~šOaî¿*ØÛn½«ÖàE}úÛ¬" d =M%×7€ß2Ù½êaŸy¦oA±ì_Íy´tØÖrxœ¨®±ë±.fÐwÐ_3˜ö—ý2>Köûe`ÞòWHÑœ—8öËô•W üâPHâPßÞÿ­ü}ômå^¿—ýë2÷÷®ùþ¼ëü~Ÿøâ€ŸJäEwÅ&Oý¨‡_"ñ" Uí$JجҺ"ø? Þž•¯UB{R(*Á“¤£n7Žm³A.fZW`Â6Ì*À!ràü¹!¡C¢Úv87%äHÜ +waë¯øOŸäç¶ÛøÄ: N+ub“_E ‹5û>ůTq¹žMIð¯$î Ï€Žì‚,:£?Ù“2‰$‰cüØ$¥éQ ‡üEd“–!Fcþ@2ñ¶ž­Ä‹úöî»ú÷á÷åÛÅß—Ÿþ±}>m¿ÝIß—á+K¾*snf¿¸©ã¤!–GLÇ¡¿ jäÍìɆÊ3Æ1Qº_ÁœJW=8 ú°ÆÊ'ÉÍiŽèÖ”Öfb‡%! 8~m(°­Wÿ8‰ø€Á¡;Žbª:ê¸õ7KÞÞ‹öÙ*ûøT4$.µâ‰¼»üªq''-¹—d›+B¿Q ÿêk€h²³Î'Ù“ºi3µgûp[JìËøCòÛ%šW–Ó&?à2 C] ÒÛü•h\#¥çý¦¿­ÿ¡ÿmücý6ùõÏÿÜ?¶ŸŸ¥Ø¯v¢CF–ýbÖÎñ[žB+ QY|`õêÆ<ÔÍ„µq1›eY¾­¤Ÿ"‚ö¿¬:Àì‹¶´ãÁM2‰œÛ¥Ý;9`*ØòîЦe•Ø8SA"‡¬,ÖÀ­»# ¬3rÒmt“«PÔGc>Kx»ŠJx ¨ßSOJûe«{ÞÆ®9^]äß^ó(iÍá­?”0ðŽNqg÷$é õ+ý"=‰¿”:¥ªÂ1{Œ ŠþCñVÞÞWþ>þ¾v»üûÚïóß·ÎÇwÁm¥×¾£îé|ߪ˜ÄlÓ´ãº*ÑOðlìÈw¥•Æw—¨/Ë·óƒôþ{«@`Qgên‹" ηÅU=À„ÑñÁ,„ÌÏeoA¹g&J»Àߘ°Âæ{ëÞG»Pò*“Ú†¯Tuv»^Jé7ñ‹ÄçÎî¹ö{úÖÕ0I‹)þ¥½¦D:E[èD2Ð)å[÷jBÁ¨Úïsx¡©Š~Wø)>‘{¤dà½oÓœj§ÒP½]{[÷CùÛðÇâmâ‹ÿžþ¹y>콇­f #ÔêÌk`çˆæâ«]8‡¼,}µ 'ñœp€¨ö‡¬Ì[ñ§ØÓlQ¿f¿xÎDí>1r ÝßBa´d$œ‡gVUâêOö kv gmUJ³Šqé(<Ø”çÊeüBJ e­„r‘ßÎ “`³ç‡­æ÷ìaoÑ©Áªÿ[{b×ìmÊ«¢þä­“gk·þ¼Û¡Ý‚Âñ6~—ü§y“ìò¬m¼q›?·HL"qÅŸú{÷?õÿÿ\¿·üçú¿ç¿ïžO{Ýù?~ÿ—o»ÀT jf ÉÖfðóÿÎßL‚º ²#z?ÿýýÿýŸ¾ÿŸßÿ+GñWüþ¿ÿ_|½»]TcŠ=«h6<é‹É–¨z›xÚ(ç\ÿüÿM¢egÿ·È¨›vDÑEÄ•èð’)|ÿ'Ý6ÿÛ×±‰r÷Dç’7ã¢Ã¸pHùÿú×÷ÿ³óöÿøÿùúÿ}§íy¼þ¶û߆ïÿl÷¿}ýïÿãû¿ÿ?ÛôÒ÷üÏ_vë¿ÆÂÔk[‘±þãÿýõ¿ÿÝ÷ü/ßÿ§ÿø:ÄÄO\¯°»˜ãóÝé·˜ó“˜Tä°õ9­ûMÌùoÅ|¯ÒMÌ1ß~‰Ùâ'13å ”huŠÿ•¦Íœ˜¡µÜåL‡œïN¿åÌŸä¤6@c=5·KúKrÆ+ç€cm™t—³r¾;ý–³~’³Cš¬;Qc]ô™þœÐÊFRÙIZ¼‹y|Dï>¿¥üø MU?#]„ÌÿNÈÏ’}|C.×õo?}CZe;Ÿ±ì‘Ç æ÷¢÷ÿF9KH¾Év7åèc÷ã#r9¯ûé#r’÷årÂJI3vft9ÿí™´ËIˆsl“}|DKÎÛß~úˆ$'Œ‘k,¨ì!¿¡õ—œÿöPÚå|_>öñ-9oûé#BN{jBĤ±ˆmAv,¾hÉ™þí¡´Ëi¯§Lo²¶Æ>¿"—óö·Ÿ>#ääº|ä嵤QÉùo¥]Î>DͺhÖ'ÜÿÍwtýÛßë.Ì5V 8Žªþ’óßJ»œD„aV_¡ŒVc÷Ýþö¿öµ¿ß»N){¦Ãôbý%çë¹ôë$ÿæóùý'ÿµ¯†HçZå3€Šp0H¢òH”¾ÿÓ×çÓñ_÷ƒðŸ—@ÿì?²þù¿ròbœÉ4ûþÏ?âëÇi_ˆ£ƒž+ôݪ€ ”<ø¿þþ‡_3°éÿç/;piÃù1&MòòoSskÿgkÿÊ<&[qùÞ~óöoûï˜!þ_.ÿþßhzÿ§ï_¾HzDlÀíümgä´¡ÌÐÙêâðé£cú¤Ñ@Î,x,@‰*˜˜Ù³Mí5 øJ“°Ehwj˜­Çž‡Ö‹d{ØS/ ³ËÚ ÀŸyÚëŽýoÚíΘªí®v¢ŒT.‹ßãèŸIÔ$Ü“U»yŒŸ.öü*ü>ä’ŸÔg‘Yótq‹eþú øT!–lzðE¥ê¥ §Ä¥fé|LDøÏñ… IzL¢Ã)?ë¤ÚP£’.ó‡Í0•…£ìTßÞ}Wÿ>ü¾|»øÇòoÓ?¶Ï§íÇF8¥)4Æó?¾3y¬à“â‚!>qJ÷!d\[@Ú[ €ŽA¶&€!8wÕÁG @Ì#a/ð߆X+¨ÝdÉazìE-P‡«½\BÅlÐGl(ec?ý=é âàÊ0)Øï‡˜¥³°‡Ç XÌ—ñI½¦xÓî-%îò“ 2ØŠUýßó§(EÙ"ðô©ÿ[¥t¸vz”¿.ve€’þ¥¿°&í:q˜]ÆŸ’¿ÚœbºÈ?Hߊàpâ;çoí”ÒÚÎÍí¢¾½û¡þ÷ðçò½Å?—ÿ=ýsû|Ú~Ú ÐaÕSb|'z”^@ÅÃô fˆ ¬_%-à…/û8ìâA›©'o7³ü¡’ËÄp!$°G]j]EUMÌtêKˆò¸ÞMj¸¼"Ät›E»fή`Ä“'凰ãÞúCþÊ•¡¨Ò1¾ip€Å òëSüŒøC([ê½ÍžóÉžŒ1xàáО¨oAFS`ã;‚á˜!o€ä^úƒ±kkQÉn?‡IÂ7ØËÓ)|c´^˜S.s§¾D¾I*Ä©º½û®ú}ô}évá÷¥ß'¿o[o Ge@'àÉa2À”ð -C7=ïHP¢HW;¬PÃ)óŒä6ñ`Îæº²ÿ´«9ë3¦4‰DÚVÍ’•¼·Óë |¡Ië´}KܬþÖúbÓÉÚä0ÊÚ­? DÖ †|ßîá1F³«]~÷Cú éûÈí„÷ìÅåÐ8·~ŽlÚ³v¬ÝTœßóì¡Û)œ¾ôOòû(Çmü,ù õšBNù©D5u%°_æ/ àDázá¢?ô·÷ßõ¿¿¯ß.ÿ{õ·Ù{çãÞÛÂsÚ‹8Ïîï Jk @kÊÆŽÀE4oæ%š#ÙÙ HèDmb‚“@@·®”ËN·4Mü €ŸÀ¥ö¡+"ÑSý¹‚&1]¸ÒÂ21QDæM»}ä;èB·ó<> »Kl©D)¶ËÀ³= ònõÏàaëTÍ,óþoõY»Yaƒ ]_+hØýi[Ý&|éßÄþ§ß¸çøŠ™Ø—T¨þ»È¯˜ È-Þæßè›ú¶î‡úßßË÷ÿ\þ÷ôÏíóa÷íG*[6—á¶Ÿø3Lh;ü R³UAS D »»ÚÆqÀÅXã…\wæ£öTÂ*}ø›vjÞ:Äè*$GÙÉŒÒUQÎA͸Ò[ŸÈDôÉ7í”ùÍVHÓÌ𛢗mýÓ4q&¦ÃÙó¶ñmý!˜Å!+LÒM~ÚáNj¤ƒKÕ¯é'<~¡‡Ìgÿ|i¿ÔG»î}€6÷|©5€€Z ¡¸ôWÒÁlBX» Oñ¾r&–É!=ÄΟœ³å2{vB¶û; iåÔÞ»ÿ©ý÷øçê½Å?Wÿ=ýs÷|Ü}û¡ {·çpFNEÂÔQ¬^B Š f6-j·}3!1ŠL$’j§€Ý¿ä^ÑÎfõT‘í™w6„"|V&,…è!Éζþ•¸»PýI¬ÂóšÞߎ¨’„ø¬ÏnPoJÿ¼õ'G‚ë†Èæeü€·Ø<”xÈYj‹eïô) }þv,fW¥½ÿC_ŸÊoýjÿÃ%f>Ÿ*™ùdÅ”qéï\\UÕã2><¥öû$Õâ·:ä'¶r7r¿Îù;‰ŒäŽúÛûïú߯?Öo“ÿ\ÿ÷üÏýóiÿíç*¨„Ö`O P8²ª×Ud÷®Þüöe™ñ ÌGWs¨pŽîf1yˆºŠ[;«vPÃä6DJûu;óìà·v¯ãŸÎn•“šÈ#"ñMívêTÞïnÕˆI=ÈÄð·vj»IÀÁ_{eî÷ȧoã { =Né…\áè¬q¹ ~M]¸âHýiþ«¹¯,Ü@ÈéS;•Ë0„ž÷—þMù©à_–þuŽÞ%º­C‹c]Í“² Ú×eædÛ`6‰œf×ÜÙÿÐü6ü{åéÏ•Ï~Û8‡öÞûn?QÁf—sÚÛÎn·Né¨uYHY¼Ý$g·ó¾ªÒmÜdíyøŠiÚÚО)È€u($øâø€‡»:B»ý¨KÃí”ÀÝ ã¦Ý‰ô'>Cµ0Ëóð6Ñù jìmFއ.Hé[’9!ˆ/Áý:ÛøD oÝ*3©ý>Ÿ…K÷ù70!€ì7êzûþV_ñÅ  ¿´õô&LÔ"•ö·þܾs ö ÞÆ¯’¿’öžnò«Ì¢{ñÜæ^¬Üs^Ô·wßÕ¿ ,ß&þ¹üïéŸÛçÃîs·”  2L¾'û¸8H'¥†Wû¿eJöÒ:{lSô[oãwÉßí±ëMþ' DO d/󇂗`\.êÛºÊ߆?oÿXümúÇæù´ùöÛžÌm=‚‰®Ìh€€KÏvªê‡cñÂPµ7ÀÌÊ­î!pà4³cÝ×"“üÛËO&á}ì\ªú”e6‹$mÅ :xßf=ãzêä$18åºùVŒÂ¾ºéî'¡ˆá†V[o GíÜ”Ìï¤môt-µÊ¦œv‘žròíEªŒÅ}öx™×#úNÙ´§ÂCÌg÷;y‡0½W~éŸÿ€--(€y¿H~ò ãE|A­Ø(8/ÓXæ+@ÖÆ¡¼­÷¡ú÷àÇÊm²+¿ÍýØ9wžNQX9:\Âö³'bÈÈ 3ZüÕTŦ$%ÇР¢bv³PDoÝíØ¦¶do/fògdÜjÇòu€;¬Z͹±p¾hO`$;þ!á1ûK@¡¦jãi'œ7?Qá5ò5ó,mÞúCõeFg„‰ó6>Ta©ÝäçÒ²K²˜º^m¯ùóâ’ŠeWßÈÔJQR›=ºHú­­ŽêFó­;°?‘„rçðCâÅ—yŠ?E¨GÍLÏ·éO|SÀYÆ‘nêÛúê߯?–o“ÿXþmþÇöù°û޾Ýh|w ìyy(:ÅW  –ß@ pÊ[!âá±N|çå†)ØZší+„bÁa"Œ$Y^˜q†¨dvêùøE3>•'OùRì´šâþZ½…ÝFê²ZmÊ18ÄÑ›gBÁ—ìÛà8‚0‹ì·b>ME¡§ØøžÏì×Üi§X¹–.k›ÿÒÝ™Ü~“Ž Á6£ÚmkS®·þ•lÛàú߯o’ÓØnòwetàëmþ"íΈxÓßÖ×þkøsí^Ò_–þ5ûsç|Úx:D“²p‹E¬‰™ å`ì'½æ“ç,àh‹IÍ © 'Ä =ó‰ÙÒ”y†L«ùô’çLŒ¨ïÂn èd¸¸Ÿ/yÎ…=@C¢Ú.¤WèGõ]Ÿ¥>3=j’ƒ8ìýí+…„άóæ§Ð6¾p†‹¶^ä Ø#‡º¾²B/¿çOS‹ÒŒ'tóK}äHउøVWèÇ–›‚•Š›õìïIÄ)Ǹ¯íJÙ!xæù=i£X÷9nó÷¤ è¤C¿éïÝÿÔÿ{üsýÞòŸëÿžÿ¹>l¿ÃóDeÄGFµ4 ss4‹â_ò ØNçá,7câYˆÅQ½DTÙT(@ÂáíTÑG¢O¶‡]0˜/¹¤»xª|?­€»PîÁþ€‚æÝ oGü'U^XÅ”Éu·«þ”Ú›qÔ€K?‡˜5œV«¾c—^0‘ØŠµÿøO~Ï){ð¯Ùua| Àéµ)òÞØ®¬PÞÊwµõ¶7?]„—±§Dï^(}‘}þÿÒè·©“¨r³ÝT·õ?Tÿÿ\º·üçÊ¿gîœO;OÇèT‚Äyeº •¯®¡gÒ˜¢T“Ú7µƒ!H Õ1?ÿÀÀ‚¥ Cp"*)*´§=ÙÂ# Þnw@b—ÎùAø„/ù24H”iU(ÂÕ_áò—'âŒóÌæ“šªƒî…h^Ò"œ€cx{iWwêîâ'‰ŸUi¯þÛô¡µ/AÖK3s™8~vU€Mg«ãÖO%éˬ§0ñÓË mžîhÞûó¤lä÷Soã[;N»rk«ù°ßÇûç~òmþÍï]3è£ûÙ7õ‘ºÓ0ϺS™+ׯ¼—þdƒ”ų=^Æ+VXà2ÓE~2”#´kyÄËüɵ ’X7/êÛ»ïê߆?–oÿ\þ÷ôÏíóa÷íOxRiš2 Zr—¹™)y z•I Zœg(h«6RÖÿq &j•à JD}`Ò¤•Š™ÅºÔ„€¡vØÅjÑJÙ4åéÝV$Ü Ù;ÛþSr†ÂIðHeôÊBÝzãÏàÑgNƒ›cDKee¡n“¶ƒ¹“ˆúos‡¢ÉŒ£!:²NÝÑ­Ð,,²X@$;£Å[ÿ瓲3z¼H—²3bI7ùÍ^ ž±âAÛümŸTÏΘ7õmÝ7åoƒ¿Vîû-û×eá·¹¿öÍ÷[u_Û¶ÛHd¹ˆ@QŒ ’iŠdG³EÄÕðf“I3vp6ž ÛDTUFo¦¸fCËÖ,¤ÊN¢ 5GPl#P`Š^O8•+4°vÙ~%@—›™Ôf"ÕÕl6’žÆl‘LÝÆtõÀÖ‚æjÊ&¢žc;â8h?g^’ÑŒäöÐÎk½'î€ãö÷ ªý·Þ¾’H@í[²Cei'òî#xÔóÖ]tÌuÊ ûü‹Ö"Ù ‡xÊN»­w„¾€æ÷Ìõí øTB$ôPÜÖ}Sû×>ú¾joÙ÷%Mükß0ß÷Û~~‚‹³_5ò3ø!¸'8“ì ÚòS¾,§ØÉÉàOÂzàí%s`MÏá¢$Û¡ä-74öuãàÔ³¿¥Ò¨Ë‹2yÌ{èñ’Ø÷)ºŽ±|Éœwn'ý›€ì7–¯xÚœÄËš/ÒXly ·å«Þfoíð ºøVÞ€àošð)ÕúsO’î†ûÖ¯`C6Ôu¯Â ñâÛƒI¤H@·æËôa@° š¹éÓE}{ÿ]ýûøÛêmâïk¿ÍþØ:ŸvžŒPr{„"Oï2û`Â1Ÿ¤f‚nT½ÈŒÝ¥÷ðV½gÁ‹•½è'H²‹ç S‡™C‚—ÒÏ 8š‹ÝSé_ÌxjJʵ§e-‹T©šä4¤*©—ÜŽ匸ô'ûÁŒÖ)GÐe|ÊdÌîŠr$]ä/’?éP÷mú0âh’ëŸS}TùPu•Vö|µí˜É†«ìŽKΓíå"Ç×1|“ô½(î"=Ïi3J uI·Ùd%©«7ímýíoã«·‰¬þ6ýc÷|Ú}G… ~™H%„ü^•Ì¿ÜýÁ4x$ø1t¥(¥„@aÅX4¸ÉÛ!—´r.ztöû°°'–€$+œ¹,v®¨ÊÛ¨ã=žNnòT”VÛ,¶”Z@MŽøS¬·îØJ:7úH·áÍÒàGé7ñ³Ä/¶W|­÷é㼇>×ÖŠç¿Ô'¼Kî©>Ë Ãz韱,Ô§ue†¼ÇÇs}3™/í"?T2E®­™êeþ„¢D#9좿½ÿ®þ}ü}ùvù÷åßçlŸOÛÏcòØîÜu‘\*âÓ«‚Ÿ«|‘)\ÇHQfW» *åuUQ±Ír©ÝNìNÛã)8Çì÷‰sÓÎ(`?“8¬­™_T·4³Þ†.{ Û5¢§òf…÷ìò¬rÇÈ1áìîž »õ窔ˆÙ¼ŒÏU×m]C›üÖŽüv:DOEÞæoW)ðíf3Í•JýÖŸµÛÖªéÔlM7@cXnÝà«8ÃæÃc "—&}½ˆONÑLe¾_¦v¡‡‰*ÐtQßÖÿPÿ6þ±|›üÇòoó?¶ÏÇí§ Šó7‹e4,—O…/Ô^&Mïxû„lÕ*¬ÔÄLgõª=¹,¨ØrUõQ]Gso }Aö‰`x­ÌH…ƒÚ,Ã…„Ú’;T 1¡ù÷üI…Ø^“+x`>[ž¨¾w·w·ˆsëå6º˜¢§¸NÊMú"é3ÖV^çÇkò\òú”'ûTžää°åñœOê,šü‘g1¼BdÃèe|1¼š„…ìë‹üÔSšÆòwmóW}Q&13÷›þ¶þ»ú·á÷ÅÛ¤?Ö~›ý¾u>í¼#™@iÔJUÏ0Õ/@A$—=š [HOQµ¦–¥¹ë•êTûÌìWõj×CNô~ÄÛB'g²,Ï5îvy<Å«Añ»‚{ÎÌVO€^ž<&“÷ˆî™KöÓv:‚ºvöoz¿›ÁVJ=G¬¸Éªaþçû-û«d²'q-ªù=u’âà°¬x`Ôþ[u_î´œf”Äþ“½k[ª'…«nýy^ ­Óì—á+²(¨²‹ðvgwêø=s¼öRSgo²M6ÅÝ7Åí£o · ¬û×>ùmß|ÞwG‰]ÒC”³ùàô׸ÞMø[I«n¥®ÈIÖÑÔÇóî!Û¬Fº=³‡Úo¸Çz÷dàìD烱öL-L\~Y‘’ Û€¯}–?…´Ÿù¤7RöB Ebž{ 2š6ÃJŽÙú˸bK·õrØÆÎF»l¼É$?èi=»^Ó—m(Aϳë·öðeS–Fž]ö(1cD|*—îv8*dL'—Ñ«„ÇZ$‡û¾ ä”’n“¯þˆÇŒåíýwåïãï‹·‹,þ6ýcó|Ø{ÛaбXqPf?ï÷À÷dª±³'I&?ËZíS¢ÊµÊä1½Ú/ècÜššµ½Ïœyû'½bþ›VSálÀÛOo7%ÃÖJXÙL‘hæØüRk„[™8-®9²âI‹C¶ÎÖlÖ üQVbØ>r$ôf[½¹d~Kí^AûiHèU¼ù{ÆrÕf•EψÛÕŽ/¤·q “¢cáþvéM ÔÀáÄ9t‘ÜðAq¸rWbÛxO !2åÆÉ7•í½+ü2ö¶Z»äï¥~M{Û&_§Ò^{ìHªçT…XP+áL$ u- ÚÌn Dª½8)hOØ­¨`Mµç‚w& ÏWÀ ´ßçbÑýþ ÔÝö˜‘À6x&‚—0;Pó#iñ¿çÏQrfs<õ]}B}fòÇëQ™Vø¼î©N ‰ËèUÒÛ®‹ YœÒÃfTIÛÆu™=E÷ÍìŒÀSw[ïC÷ïÑϵ{K®ý{òçÞù´÷ب\4 ¤µ®` ¼§5Aƒá9(:ãX”‰‰N2ß*­"˺*;±í"›yÍ¡5’ËøS¡×Äj·ç äuÝS ™¬Áž®Ã= fÿ$!þ%P€É1ŸŠ©Oꆤ£ËÐÞûGÑnóŽ´±Ïwn¯žôã yËOùoûu(lódHN15ùcuSß}IÊ>?5ù6rƒJ¿uÇV-ÛèCÒ‹Û)Þ¤Ç ÆÁ–û¼Md9L¿¤ÎSyïî‡î·Ñµ{ .ýkêçÎù°ñ.QMÈ„ ÷§e'”Œ+¬ÙôëðÍ»?.›Qœv¨ÙãtÙåy…æÏ¹=Ymü÷ôv ñÁ/¬}9Ä[)AüÙñP„’´;Ôù$;5/Ò!ë0Ö½fï‹òÎê5ãûð$x5‚ÉúØ¥pœˆUü?çìÉFËô†öäï¼´gfiH”x9ù™ »þìå0ný)ìµ§l €sŸ¸£ý¾½JZ?ÄW…Zi çä3iur±_t·wßu¿¾¯Ý.ý¾öûì÷½óqïm&'E¢Sû€WN[Êžp-WöioÐÆV”_A‚M“…HÂáWnÃ,'«=í1ˆ¤¸Nâ©P2úE0 ;ÖÉ7¬_U”%f†è±ÿ-ÿíäµ²qkÑõ){ù1ù_½uà Œ5à¾Î¡MPœ}‹}o“›Ë¦Ni½g ïxòZÎÆïMeàMŽPó Ÿ“Äjgø×Ñ“AI¸“µßFþAb£œ»Ô_ÖØí´³§ƒ²æ~ÏØ»Ž¡Uš×®®WçSÙÛÀûJ½¥~­ó×6åc—ì {ï1´sÔÚ§¡+ÕDÀÚ˜^lh=Xqé÷¢vbS`Ñ/œûâ†`w Þ$ݵ‘Ç`æ­CDÀ˜A8 ¾7ÏžTÀ¬ýø  .­å…IpИ¹5Ÿþ”yÛ;nªEžCÀÝÃ{ÿ†sº8Ï–Ù‡¯BW„'ݤ/’rÞ½g¯[]ÁZ—_Ú£¤4È}Â(‡k0ŠŠùÒ½ƒ‡h¥inÇèÀ{@LY1þ6á­î¼à¡±¯sæê ©ÍCqGïCïÛØïuû~‰þuYößßwÍ÷[o_Û®Û/tPL`xêÁK2oø.Ö6G´þ—[ˆ”h®f¤öÚÚ—E3„˜Ú!$6…¬&Pj$ܖই#E4r¨Å(†äµÅ§>)“ž­²À\Í("ùx%*¼:K%9/žå¸œÁ.å:ÀËoÙ­Cv2‰Šá6uk‡!ÖµøÄüUúS³ì†gám¶ƒ ‹Àrþ"hž,K«·ñ§ä·ç,§Õ)ÿ€f 4;€@.ó"hÆU˜ï[[ÿ]ùïÑß+· ¿-ü×9ù÷¾ùþ¼íøžÎ³fÈÀñÊgÄ» ˜p½ûK±ÜÆ*„[U€%Â4¡LÃo*ëÖFo|Q^cKôŠÂz#Þàæš½€íð`îŠ~Úm†d¥êU¢UA7Ea/ý‰â:Šã«ß| 7è%9šÇ‹mítÌÆú,CX!÷Ms}U5×\{´ó¬ö÷ÀÑŸG5Qìª:þ×øË£CR¤3!›üvz…Ž GuþÛä=å ò~™ð&]”·õ+ÿÿX¼Mþ÷ÊŸóïœS¯w„„(@å]çÌ‘Tk“¾€=¦+~ü¡4fNGÄJ†âi’Xòº¥l&øÐãÒBÈÕ³e+åÒÉî%GäŽD=Ìt´“Æ·¹µ+[”)µù*±\°ð”$Ú®•«ÕÔ)´xéOö¶]iuŒe”oãƒÏÜ€n› a“?4äÚœWdló·v³ &%±^±éÏÚUnµ¦ À3]ê™Ïþ`ÓÂüç“íö¿EÉ_‚Crò7‚«ÈÀè>¸ ¡Þ¨ùª¾­û¡þmøcù6ñåߦnŸOÛï@e מ¢/À«GJjdÌ<"¡Í #£Ãî‘§2á™òÚ|è¿*¹,âñlEeùàaÏC‚`Å… ¦ ÈÈ=“e=¤L–ÉÚp•ä¡ò #˜2xõLÒcyÒ_¿X ûÎÓÙ¢mpÀI°¯oýýþ‹€ðvÈ–éþ¡÷äÙ(vþ8IÐr¢üUžúƒðHzCù! _½õ'õhÀömæÁmüü|ŠÐg\ä·•†ë™Üz›¿ýC%I3bœê{w?uÿ~[»CüsíßÓßöΡ¾÷ÞóÇÒÜN©B’5ǃ|,['©çðå–UÍ^m«4j|ž“hîm0:Ò!E–T]?†ËYÅV”L›En†‰Ýë 4ó#PÕ½Ú"Qêмà,kÎé&=%Þö©cá®ÇmöéÕlmQʃ:ì£T×ñdÇU#k×îÙ½·² c²ƒ‡Âž¯slx^#ö-¸Ú»èŠ\À=Hò³“Ÿ8 ¸¡‹uèíì¾ë}ý½n‡ðû²o3ïšï·â¾¶]w£M!ÃD†êPýñT>€Ý~„âéOT•؇¦vÁ¯aÞ>©ùð U¨³¼=S2hW\}rT&köŠ 2 ;Æ$·?ŸL¶Õl2öµ[‰2‹å¸ˆx:£ÉŸ5ì÷œ¸åì_d(Ã9ß÷ñåWá„°'sˆ§ü¸e?ŒêwÜ{úöP"Øã>δö¿ê£½S…SžluHÙ3¶Á“mþ ä)جx~Hz1‹§›ôrªúèx›ýTÑ´°ðÑ7彺_”ÿþ²x/é/‹ÿšýeó|Ú|OÝ‘Žw€%aÞ~Ú>˜ÐEµ¦å‚BU;8Hvëæ5C€+) °ÿïÛs´¡´‰ðû}`À°vû1øŸæOÝP…-( æEåÿk×±EVÙs«Ã¡©€'€iãÙŸ(vI‚x^Ç9¾À È•Ãþï§ü‚o°äðóyüš?í¸ÉÌO Ù/ýÑžŽÎK/Çß—zš[2?ìüÓ0ÞÆWæÀ%âß:åp b€9çß)E²cš‹ú^Ý/ê Y¾—ø—åMÿ²}>m¿ý­”äá1ó áu ¶-€‘²ïlÔðäW/L §”ç‹úN2zp†‰-€XØ€{ ®o™sžÂò¶½B±KÛ‚<…ʘˆгûÈßòðË{„BœFYÌ p‡»Ã¾Þ~ëNÕn<ð„n£ƒ!nƒƒøSnÒGIŸÍ2ZåŸÛä©zèÝîÃ!·+À™yöo‘°Î‘å <»ÛÑ1K×kå6z–ôÀÁ†x‘>{ŠôDû6ù$÷N«|¿Cy[÷Mõû௅û~‰þu.û6ñצù~«íkÛsÇ]OÌæ²(àv<‰€>¦öµÀ½^‚s “f /f%V«˜æ)òTÖux¢øHé n Q©äØN8a€m³ìEœ!\€O{ùsXRW;*T¾„tëÓÎ6¦™—mÞÆ'hRyÓ‡À&?yDÐ[ô2ž÷Úkþ¤!¯ú<×Þê¢(Ä2ÊóÞbY“UO‘æ«ûÏzÃK·Ñ'ÒÛá›EpHß5ÚÕÊÙ–.³oÔüèß0Vyμž5ãäz_wÕŽ”ïµÞ¼×î$ÝÛOxêu‰åö:¸†ÒWû—â,>ÄðJÀõ¸àü½»cÍD{gYÕ0"=é1Ç[¼ <ÀW½e_…óglò«d ×4`1z¾çoíf´‚ ¸ŠÞêSÁÅÍvµ?åºb¾>ߺÛí‰4ö¬ªù6|–ø¶ô-•‹øDI[*P÷ÒeúDvÌlé"Õ¸¨oï¿«_¾Mþcù·ùÛçÓîóT‡"EÑ–•g(a1w]ú¤aR¼ZR{HGž;3ƒ ©ôȉMÉp~ç6BkiU«šO®cl®;Û¹à„i-i€âÑáCR'_µåˆ;boU{Œúó€yõï|ÙTF¼mãc`ƒcº\äB;WÛÌÎ_|Lã Ÿê ?bÝZ¿Õ.æI†®ö V‘Va&IL·þö„¶û’bð”oãOÉ}ëÌùíÖæ­dwxËé2nõ†É¡ƒ;õ·÷?ôÿÿ\¿·üçú¿çlŸO»ï^ìT—Œá¸¥½“)§õ¤¶lÄF’æ"v^ÀïfQƒ‹,S2ÔE Ü“<a­vñA.Ï^BˆtíæM.LPoCÂS<˜¦°tÏÔ@Œµ{¯Bù,£…×&,^°ºõ‡”†È|„ù2¾Ójõ òî‹ôaHz6˜W¸m³'dÛ1?È‹¿µ2Ç Ô„òù•A®ºmªKwXc¨ªàLºŒÞ©2µÿiÛ'Ä‹ôÖNâ+£y^fßÅ⥂·2.ÚÛúÚ߯?Vï-þ¾ô¯©oûæû­¹¯mß9ÌÎÇÒ9„Óò#ì Èùräw*ÅTîèRU ÕP˦}óa¡DÚ…AîrÃr}që ÂÜLSuªO=ý1ð'­/"D¸~„Í¿<ñP,Üåe±Ã…;&Æ«»Ü„‰¨R) Sã5<öÒ| 6ÃtŠï^$3>ñ ÆåÉÿ5}챑Á4 O9ÑK}Jà…ÄîûsšÁíRkõÒ¿_Fü¬^Æ/IòS1\ÚE~kodÙI5êeþ‚\°%s¹\ô÷îªÿ=þ¹|oùÏåÏÿ²}>m¿²A{[ÚÜ cœVµa.Ø »ä¶ÑëBå±"À8šlåÏ@x Zø}!RdÚ¹òoxŸØå§ÚÍ>AûÔl¬ü›‰Ýdë–£²ÎV•ÇMþý~™æÊÖ= ;V¡ª¼ /ž žñ9ýpÈüŸ²P ¸ÐO{Œ¨_ÓÏ…­N²^ý_ÚX¼RÃñºl8.líJ¾u7uSJÄËr^AªT‰³_Ä'¹9’ùZ¾M¿Ùžì­×Ë“ýõÒÞÖ}Wþ6ü¹xoñÏÅOÿÜ<öÞñXjŽD,äEø éÕÎò¬D½ìÜNnÎ5ÐFç"ª€¾>*eQîî!~’êÕÖ8¦ì@N¨R(]µý÷SŽ@ú` ÑÀuvX®Ik¢ XuH(›»ùzQrüè·î|¦ ÌEs±Çõ Æq9)wéñÝQN7ÍÆ>yŽ~ =³ß”gеC{ö²h>¸R<Ë\¼õÊgÉ3…åÝÆŸ’ß,¿¸jQ6ùÁ”§ÑéÞÏù“?3^º©oë¾k}_»Møcé·Éï;çÓÆó#´Sm¯zÞéDRþAÙ(~†bšÛ³YS»½²`M ë3ªTÛƒ<%,af€b áÏZ]ÜÍ˜Æ È¸ñÈeògwi¦5—˜8È ÆÙËçÙ]`úL…vüÂ,d£[wðØUº1V©Í6¼½;;¡Ä6s¿‰Ÿ$>É)íÉxMŸÍQ27dzLœ—úd'jVÝíoTòô¨B“³?äB aÄãSc߀‚ ä"?wh Ò¶Ëü©²'iÜ¥xªoï¾kþX½Mücõ·é»çÓîÓþ4c˜ÞäGÇÆë)ñ²R¤È`ª–!•X„‘ š¶V¢˜óFP¥ÿI‡)~ËÁPi¿_„ã„•v`øÖSÃ.Ò 1ys¢7»£(Öˆ®`­í»m1"<µqçð°/·þâ§´gd](¿ûø…‚³Hd¸É_$XP ûìÍœ7{€ç€g]îÚƒž²ÃmYý+Ò[È›óÀýÉ‚ƒr³st…a©aOi^dë-¨}8‡.s¯‘Ù4d ºÛûïºßÇß×n—~_û}öûÞù¸÷ðÎI@¯^Ef>ú>ª;ðæµg"ÔßYíCTá FdÃþ•Ï‹—[¢h¯·qî¥m4tZC$4r“ÓÃçk—Ž#±g_¶K¬¥éye‚Ç„ôÜL”"~å1„^ÙÝžÚû+7Ó5;ÀÚ>¾RPq¬¬­]~jÀ¡¶²‘Íx›¿œý¶6}emíú£d³›­^ Ä3œ’HŽyë?u”P!Ïcñ? Ž$LÛ½õ"~‰=ŸzøK/ýkú$$Ã)GÂò¸¨oï¿«þX½Múcõ·Ù»çÓî;è’:·ÁrôWÊ_ì3„g-¯R¦ßÌáQí$Æîèqã#§~V ´¤¡D­½žÖ ÌÉ”§™ª*€×Ëö4¦|ÇIÈÔ$ð*£vzЛºO3ÕíÌóVÁÄ·bÖoý±qÀ­0uËðõ´ðHÕq“¾Hú ´ÕCGý{ö”Óãù$]ÇÝ/oí‘.M9Z_ñÔBÚmIý8[gwN;°ÅP}ÞìW¤/¥+Êsˆ}Kê,|‰ý2ûsÇÐ\®ãC{{ÿ]ûûøÇêmò‹ÿžÿ¹y>m>÷Ý“@ r`VÙ §°¢~¸ Wrž­=éïu‘ áUe»œç“‡o¼dqD—B¡«Çq®·]c]ÙCÀ”äÓ¨¿Ý‚COáÔn¾}Á{ö6ö‰®öÌ$XóÖ¿SŽ òPjí6>¹ ñ\ÛE~° ß U|æÇü­=@á„ÂüÏ¡?®e³Îz}úÊ>êx™€…¾õç,‰›Çøù£Y¹UFß!?gYR¶ÔâþØæ¯ b;)UK|ªoë~¨þX¾·øçò¿§nŸOÛïBþ‘(â¥t0ØLÞÚCþaÏ„…ð§²0a‘?þ!Ù¤”‚šìY±æJ|¸? à­00{{ÄyÛÃb¯bÏLÔwéÌÇr‡\:¯Î*e³K„t[¯ª_{¬ õWï/.,{’ÚÿuÀÔslÕzšà Îð%û&²SÅ0~ì•_3ϪÄEï¥,sà¯âÔ&k˜½óÃüAÆd+´[Û6™‹–æ6üød}"8ÅŸ"Ã9ÔToÓ·•„z³—ÿÐÞÖWþ6ükåNé…ßfÿÚ7§ò^»Ng¨ißæ+,âì;gTÏýrÂ2üH: þû¤‰½?¬2¸cl9Òôö„ëÕ¾pÿÉY\Z"͇ÙÛu@)ÙÂß°v0æÈv As'Á¢bÿWÿ<ð[à‰‘µdV7/¿à© {ÿBæ¸=‘lÈz߬5Û‰PÑx*Å.–ü †g󾿅4¾pÊ|ÕSÔMémµ­àÑ ¡QO·þ<„aÌÂax_EB8¼bÍ7ùÁÕf–1}ÌßÎ8{©ð¡å¡¿­ÿ¡ÿmücý6ùõßæìŸÛOPbø!¨qá¹/f:» 3i`qbð£ÌAíWÌÀ²ïa¡K‘•!_pü‚ošOüÕùdp¡Ø/ –æG¸S¾>E6¸™vaر§ZŽ[ÍçÔÙY„~Å~<™­#>˽·* ž´é|Eûض Å~ íEò$É!ÍJ Ñë5ïd–vaMNuó[gêm@ «×(‡8ÊAÉiãÒ[±2}"5üÇØ,8µ¾$e\$ï"€¯ÔAõ˼)ã’Ÿ|n‡Ö¶Þ»Î·±÷Û$ß×{›÷¾[þíNûÒAI‘ ÀdQX: æøºo‚SƘ›„P†Ré!„*Š‘ù—Q$Ï…1¦·G…a¾“BÓ‚x›öjEI¡DQ‚Åx8áÞõPväÜìg‡cŽ2·ÍZ ݳ?A^¥>ÐOš½?Ï[´Fœå6>ê AþM~rzÍ4ŸsÕ˜ïóÏ: ;I–ÞÓ„bUþ¥àØÔÏMª)[·þ ŠË±•rÑñÙ ¶¾¹ÉoÖ >“Lýv.”ûSEc]ñ7ÿn†™À>{,•¯Ãô¼KÌ~1M 9s+l¥v˜‚™žný Ï‹ixU§íãCŸBrdJy^ä¯Uò›é¿^¾Ûü+´Èd$Q°¿õG…¸@®w…åA€+—î¦/2…“îÔT÷(ñɆïõ">€šŠ9×Ïé7JÖ)Ba3\Ô·÷ßÕ¿¿/ß&ÿ¹üïùŸÛçÓös`FÐY@':!𑘗ÍC2=†³ÚaâmÉë¨$ˆOWYƒÄ­ÌzI剴Á¯f·†J  ã³KFPÓù‰FØ7)¸ÎÊZ˜‚O³=‘>QSSzäl†Ø˜ÎÕ[w*gê–Üä߆'é’çˆYož×³‰ß(K³£…Ûæ©oü=}ðáíàVYX_ù¿ÕÉ`0ì>1Õ?àA˜™!p©G³-lûÛ h׷Ϩ¨  Ç[ uŽøG<#PüRããaDh0Äšþp¸˜º@AŸÅãpördº åœ÷L=RuXNö);†¸?v.’üÛ„¸; @~ÉlÝÃûu¥+lƒG;GÈ!ïs½e~‰.„0CÈ¿«nì¿&) î*ËMë)ðWmê]né£ÊŽ¢½ßÙ2ÂD¦Íô6xGôìYöÑIC€¾”µ¯sâpÛ²j;»j¾­Ú!ý¹êïÉo›æPÞ{Ï9_|ûÃ/ÚÆWª1É}@W$3T…Ü d²O,p%ÐŽY_Ißì‹A„ÚPªy»Y˜ÚsÕáñ(‘‚õîT—”Óè#yjaÁô+'´·g¢}5Ó rlÆ0¨š<ÕîqåÖŸh2¸y¡¾Ç'W—(5:%žòÓž¨2LÝ_ÓW*pPT¤¯r¨ßÚ£ÙîOÒÏszØ'iøµò­ûøƒ{Ìñœ/£O _ql•›ðл“d-,êsò$Ê‚GUT~qQÞÖÿPþküËâ½Ä¿,þkú—ÍóaïÉÛÙ)*µ§âe穌 xñw’ÑüWfH‘³X Ê_³yñ‰µ¯0%€d’;9IõÚ• ûÞrõ"˜òäÿºhÁø¬8Å Ê\Í]¤¢I¨u‰Ð#Øû<ô.½ñS€Ïãelp­aK D×=w%÷SƒâEhVókÞ4ö)~í´œŠ?Zû¢:Ëî\¿N D"©ÏKo¢ˆ#ËÓ2ϱaþÆ]n×n§ä4“U;ëçÄi· Ú_ýÔÛÑSû>ü¾h›ðû’oSo˜Cq¯íæ‡e惀Äp|ÈÖMLÓV5ámu”yÒN/2·œì5þiPùš¶“·“€É ãèîïÐOp„€û%8½;‰íf¯d¢¸*R±ß‚>'…§Ös¢`r 䨊̴/Òî­¿-}ê2Ñ÷ñãŸ@`Cä’7ñY ‘L'¿k·éSÓsÚ¦äýßêÃkÇÃvÌöÖiì¡;oýý¶å7kÞÆ'µ½ÔìNÁS|hdNÂAt›~ÃËH@&¤~SßÖÿPÿ{øcõ6é÷ÅOþÜ;ŸöÞ‘8?ˆbPÒNÇFQµ¿Òí­¸®Ûªâ­ ¿ˆqùAòâqV†{…OèLù1åR3“N™ÊGdç„Оäf{P+Â8ïDyc}R×í BöfKË@­ÞÓ­;±p¦ÑoÃÃ}~jͽ_Äo2Jø<ÂCyû{úÐJâÎ!ãý_Ú#ý±ÞRþ.;, …µùÒ¯`/gÛØ9_†/bÏ>…r—j§U¾L¿ˆ}¼ÂzXÓ©½½û®ü}ø}ñ6ñÏÅOÿÜ<öž¿Ó©¯‰ Ãà!å!ÙHã)æõÈ[„[`Go1Íán>õ?©€¨ŒIÚI·3.«¥r5Ûµ!"O-O„ý—ÑÃ3x_9Sy//ìTÁ.€{²Ÿ+vjÎvëxoæºp÷á!=z¨ù"=%Ú$‚ÙÁ:ŠŽß³7õc°OJà¼ÿ[{”€¢•áY»’¡VáÛ·þXÔƒÔ²FžÚ9~‘üfÕ2oò[Š™pŽËüÅéÊ_‹ø2wýíýwýïãoË·‰¿/þ6ûsï|Ú{eìàqÛª³S¡]±Cq£(æëŠk?®· uø˜àu¹20$o7¯ã+”d¤‘ŸÇa³xc^u€ØÖfÙ¬ ‘Àº‚ 1ì³£ Ìm%kÇc.tÇk#«–\äâ{õçõ™ËèvãÎs|ÕAb`–ÎS~ÕQÚŸÛÎá òýš¿ê0ðµË‚˜ÙÔ§2NJuÛ€‰S0-„vë C’=¦ÈË—ÑSô0x uc—ÞŒ•@ž3\Ùù2ûñ5ð{¤y^´÷îjÿ=þeõ^ò_Vÿ5ÿËîù°ùüz³æR•7_¨*a²sc,üúJ½ˆM)úã27»¤Šügþ)ð R‰¿d'|mu¹øRáqku¬¶v_Ka<”ƒPùð0^ëc¢‚¯;Xw˜W=9‡Y@híÖ_þ8»‘D¼?+ àoâg‰OÑA~Êó^ÓÏ|ÙèqÎ'ñR\E¤æP·Î1ê{ÁðÖ°¸ˆ 1Ƽß%'}ã&¾3eÛ9–T}L¨»J~g㦾­ÿ¡þ÷ðÇêmÒï‹¿MþØ;ŸöÞ‘6ORÎ0‚y€Ö^lb¦s­d$Í–b»JR¾uá €—ïÍ" “Ыa"xDÃCÜš¦)lǹ2ü;¤:<Ͷž /ƒN2¶÷&š’GœŠmÁ¡t·ÅöÞþôÂ#Òƒkûà|¦ºº‹îÂ' qê9æÁ6wÒ¨€À®+Uu× V]×ñÉùo$+¹òÒŸ„22Ê'¿ËøMò“ êM~’ˆì„yø6¢ñdé“ÜuÓßÖ×þ6ü¾v›ôÇÒo³ßwΧwd$StN…©Š–„!ì³LQÔ¿”:/˜]§”ŒÑn&.‰˜­<©ƒvcâñ!}š×%‰Ú0dúë0Ýt‚݈ßÌ÷ Ü…§9„°_Hzùã`Xû9/º¢HMøÈäÙÚï—AíÒŸ”åvåâãm|Rv¨ižvÈÏpá•M¶ÏŸLÆ"‡XžJœßú#Õ–Ô¨ €‡î;h¶ºÈD˸ôx''àñBI>ÆgA åÏËÏs0œ ¢·sþð°S©^T4wêoëèÿX¿Mþcý·ùŸûçÓþ;Þ÷“`–}4Ô$+V)¹gëa´rPž³ÚŸë|KsÝ”‚|ȱ7Ò<]°A>䭳ʂ"=ӾʟÞMåŽ „jDç(ò¼µª=« !¾ÃVÚ¥{'áÆÄoO¡Á6z'a§$Á³å‹ð½KøžB‡mò¼@ìªv|>Å·¿•gí™óÎ,h\_R½ï¸tçù•§IÆ1:hÞ?¼ŒêCxÀAªÒ ¡T<'/°>Ö¢^w*oë¿ëþ=ú{á¾_¢«þž÷¶g¾ßjûÚöœ[¤ÔÂ6"ÂZ hHÍ@8öngGÄb"5kDT¹JÌfy"àT2DŒ°UU›¡vk‹šxDQM l»´ÕEüÆO¬=p•¶6•蓎Úì…WpºQï*9æ`Wå0õÖx¼­ Œªé2¼à°AÙ€nþ"~?Ÿõ„c~O_pØÊ«jËíõVXY¢¹îjrƒp £nã? DTžðu:<åË“Øt‘ŸÚÌQØ µ^æ¯9¢ö.ºéoï¿«ÿX¾Mþcù·ùŸÛçÓö»\÷pê¤XÚòÄó”NÄl¿í±u'‘g³ kÛ.À8ªn‡Š|’ÂÆ„ƒøŠùbÖm›ìç§RíàøEŠ´Ÿª_BÐ%4Ç1CÏfÙyRzTÆm±¯Qàè¢Ý·ùç[ÿHà:«oÃÛ)RÅ<ý´þþËýðp±åŠÞ&ÏU ½“¨ÿù~©N½…ÙH\ÁÐeCåwï‹uä@›„¤Á™ªýz ‚–ÞE'Ó P¼,`é×¼¿¼Ù>ˆ<ÿ2Ò~«íìþVû×1ø{Ù6áeÿÚç¾m›ï»Î“D¼‘Ó‚í P´ ƒùœ2Å¡˜i…Ë•Ú}èã³1û+bB—H=Iob£åó¡$%<žž³]µì0 EÛ¸aùÞ?öMû{ÃfLHw›»´¦ãªô‘nÝ .ªâ*—y_gŒ¨äy? ~Ùºý¸œþN_ñŽwÚ$y\N¿Ô' ÒÉúcNBBÐâĹt' ^ Ûzè%ÞÃ@³Ÿ§dxyìÞâã3‚é,d‡”Þ§ïøÛð-”åóy«oï¿kÿX½Mþcõ_ó¿ìžO»Où Wn aùŒR<«Â/BÖÓr¸¿óÖ^{I‡ÿÍi5ìò%”Ýjÿ«=ÆÚŠZƒ7ÛÔpP¸Ù•ó»ÊQì¿Í$²3ÉŽ-§KJO­Kçä')Üé#H.v¹ rmï “«YM$?ÖËØPGx¬Žûÿ[pO\H©T³Î¿þÙ'ý5•ëí@›ÂÄzeV]Lë„ o[ ·³{$g"W2’û6¸ú'‰®ó±Ÿ¢Ó>ðüØ.¨î†ú=ó//¬ÄЋœ´›âŽþo½ŸãoËvÈÿ^õsþûžù°ßö7–s…¾!'Ø~»ª½!È3dzè–0Ø{˜iÔ‚“¸öØõöôµ¦‡µìS%Š–^Ùî¸ Ù°gIOXLÛÏ£bÚgClò{Âì=OûXÏ$"AæçA;Óô¥£Ç[ÑC‘I\ò¸ oj³Á»ÊÔ. ÏARŸáï¹7ìzÊfÇzUüÖRÜí ûí‡ „x‚©6ô[¡¼Áäòe|n:˜ñJã&>Ñn&Oo³§D†j®YôªÚµ·÷ßµ¿¿¯Þ.ÿ±øïùŸ{çÓÞ;˜?Hê ‘ïä,2JÉ‚H¬?9w` ¤Q xÜ(¸± 0k©tœ 8fv  %Æè-'Ai-é êV2s'‘Fø°øDpNÛºãpdƒ Z{[WhñYò;âÝßI„"ùŠÃÙ^Ã냶ßHd\¦Cx¹­ IÉcå½ç®ó¬\Q ¨ûKwbP¢ ¨,¾æi· ŽýÖ¦ÕâÔ¯Çøx²JÊ%›ø“7Úò÷³ç B6óº‹ö^ý/ÚY½—ü—ÅÍÿ²w>í½ Ûï |OJ¡pòæp@‘ ;»ÝUS®ŠÉÜà À¸Mñ™ Àîív¸ANšã ¼îU|9î |õàV Wì6Uß´^çv`­¯î‘;¹6&ð´°Q2€ì—î[Íö$ÖmôF„„"ãÜÒEzû¤‘¾Ø‰á7Û{òœ‘›à\uëªðü\¸º(î ;© @ïì)Fø¬ @ï' IÀuÜÄŸ”©€î9ý GòxCÊM{[ÿCûÛøÇâ½å?ÿ=ÿsó|Ú{^5º¥*,õœd¹nß!‚˜ÝÑf¨¡L¯=W–]v\a½xUXt{¨bí«+£øÁoÌd-Þ,KÊþ«UÇ`Ã3F]bynL`À©P-Žá¦ÄÚŠô­?û#¢ð¶@†·ñ¡‡![ª›øxë*’æÑ>ý$TÖBö¯û!ßÚÃÌ«„æ+†Xdó­»3`LðOoÃƒŠ›ìe2tNŸâOøhà’TÍà9};à’ÌuaélêÛúê߯?–o“_ýmúÇæù°÷Žë>ý¡h ÃNÊý² ±‹ìR˜B§XƒGò'}¬ÿ?ÖÞdG³\ÉÎûSøPšD±o¦5@”t=€š„L ¥I½¾ì[Æíé›dz º÷ š±ƒ?ÆÎhÍZ@œÄ…EšfMƒ„·èiÒ7#ˆÃÏ£—BsÚŸôAô†,Ÿõ(4Õ’bS½<âl†ö§¬7¡éñcpk#AÌZKp k%(]sheÜz7’ÒQà-½Ò," iÕœ½G¯øN¾X[ä*oíñ=âÔŠArsÅÞ6ØWní |ÜÖ¨p·þ«äïT´›üD‡`•b½ßLÁL‚3ëᢾ½ý®þ½ÿ}öÞò_fÿ5þËêùiõí¾ ·Z¾ëȨvê7¯X%²Þå!¯¸ö°r} Â6ž\íêaÏ{rè™ ë¤Øï‰Öa+ª_â,ØgR²t¨d¨xû=ÕŽ—Q’%ÛÞ”ê6ç:ßš{ ô}N^±÷Nä?Ûâë©Å‹ôÀm ö#|%~<îó*Y!.ÊãàºäRÓÀW*÷û«}¶GOlx.Kjg÷“`•ß/ÒgB÷S)KòŽï£Ç{>ɇau\”··ß•¿÷¿ÏÝ&þ1÷ÛðϵóÓÚó Ÿø )2ä’zh¬¿ ÿçwùÀHa[W;BåH=dŠëÈ7Kö…d±˜ôä'=4S*Q:¥¾Û‘hš*M‰—ãüÒ¶[ôÔ–mtÓð +v ëwÆ«}À_µ§#wíýcñ/Ç{»üEòò®ì÷øyãÚÐí\‹–à­>ûÎ#‹ÒrOKqÐv)<ò@ìí+,d ª—Îþk”ü,!]ä¯r åÙÇ_Á®jvNæZ/êÛ›ïê߻ߧoŸþmøçòùaõW¾.…)V†¨Pjä>iˆ«s”J(Œ)Gä Û½¹íNÑ›’½—Âg^Ä{ľ+ѱ¹íM%-‚ú7ëÌïPbQmå¢N ?vKÝöo§|èdÐ&±¹e½·Æòï)ñ6Y ”ïÞm"„û„Ï®\¤'~n¿ß³2„~;oß)ŠVÓ}1›òlÀÐjÂvwiR¦An?ßrkoǼ*Åã쟚LëÞlëVoòƒ,ihoŸr?qU »ÈzºéïÝ~×þ»÷sîÞÒŸsÿý±t~ZyOÁ'8< ¢Vb$ÖÈù¿{K‰&?ij¸s«@[ÅP²òˆBâý0Ðëš!3‘ƒÒ÷A…_ñ´VU„ñ °kÜq‡ìÍ €öØ3ƒ#ˆ9·W‚ý|wä­½ÙK<©K÷6þBjî_¾³—ôIÒÃæsð5züõ™$ê¼²Š7íÙ¡c÷[žsUlRR6(¦h+%|kP€®¦~ë~Jz3ÎE|;µ²‡4s¿,šŒ#9—vÓÞÖþÐþÖÿ1{›üÇäoã?ÏO‹Ï Ô¬ýd¥€€Wì?Ü$•.n¶Qbú ìA8Ì™Æ ËD¡…@¸Í;Ϲû¶+Â6ôNúNždÏϱïöä±£‚:9UB gZ3¯À<´ÅÁi,„I±A_°{sVãäø¥/ÝÃGß…#ûM|ù•I[×ïŸÃOÊင;<è—ú€±é MîÎdqiOÚš}6äÒ}LˆŸ“Ç/éE°8RÁr=œ[—Ý#ùPÞÞ|×ýÖû>u›ìûÌïCßWÎ+Ïó›ˆn“òˆR@CȲ²›6 £’á0T£<¥/±yÎñï ÌÁ 5|™B Ѱ®ÝÑ+ŽËOO°±•L,ç°òà:¬½áa¯äÞ¡˜Gž”ƒÜ†žoí+œ¾d–¥rëÞ¤Ujnýb,yI_~9>^‹Ž¤°¾<æ àPê»önÛDQÚŸ„yhéÓ ƒ[{Up(•8—[ÿñí×K õ"¾lRŽRÎÁ›ÌÖØW]Y+‡î¶æ‡î·Þ¹Û¤?æ~ý±v~Z{G(ÔŽq¼ÁM¨À`¡$ARëO¥c{)$(5í5ÒÆ¥uù^ORÕ.½WoX¶ÔŒ^¤¯¾÷5Ëzi¼Goß9׆þ碽½ý®ý­ÿcö6ùÙ߯®žŸVŸ¿äáVðÙêXÎm³®Û—ŸÉ毃œS³+v²&¿|ÎM&@*ËûÌ­‰¯áY¸n)˜êÎD¨à«ø 7ÙáñA?ûÂ]]ŒÐøKrH? S{™Ïú~·Ÿá—¯eë.t*¿|5›üU¹ê”îlã¯]õμ—<8´é¯‚Õ)Ô™•æf3€Ç°þ>/íyë=jHº;ûgØï÷^ß!½}m”á$0/£§Å5à/¿hokhÿÕû1w›ìçÜ¿Ç~®ŸÖÞw'°FÓZ‹Š¯)µ/8¯<ætÁa—¢3 BIÑÈp}¢µ$ËÙë´Mÿnbð Èãq)²‘Áÿ]±‰†Ï Š'Z;ðgØ)FrÑ€½Äî³hË2·m…5|Ý1§FWLmAjíí«3ŸÏÇ%¹÷¿ J!—N7ù ò× 9ò-ò—" ÁôdDW¸ ¼Q£;/åÙ;+%ßš'’`JDîÜš@¦ qHâ“Pl3Dªq¾ì%[Ø\Ô颾½ý®þ½ÿ}úvù÷éßÇ¿/ŸŸVŸ¿å¹Çj!ɺzM ”$Ä Ýó8ÌÒ)h7}v4o[×s¬RjÞŠL^¸x:pa¥»¿ÂAE°ÂùŒÉûJvÔ'¸QZUÁz$ðÎá2­«=G L7h“j gêé־ì` ÎKÿÔ ÕŠM6ӼȪä·ÐëW¼áÛø ~˜]xw|žãßõ‡É8ÌÞ‡…îy œŽKsJùƒ½þM„.ÝãòT•ŒØóE|›ÿL¨ÆŒé2|Jh»ÙÈöJñ¢¾½ý®þ­ÿcú6ùÏéÿ\>?-¿#™„€Â˜8ʪÇL$mÐ9³|Âõ0í* BYž¼-[Œ*h@˜ãŸ©C"ÚXF‰JÝMÔü„ó CË_·F°Ç%TâN‰äì [ö1iìá“ð¼M…“ÉâÞv¿5§r>‹[zñÊo½—_`L0fËMú"é‰î/^÷mð€’ê#‘ÚoÊ#èZ¾c'Š‡Û¢¼‚g{Ñ9&à¼g¹õ_%Æ.¬7ù©æÒ9$a ã‡×Ä[€hoúÛÚïêߺß'o“þ˜ûmôûÒùiåm7>À]fIÛÖÅõ2ü$)Ùð,¬M Ìê3¦÷° Vtd€–2ðD¥¾ü#ݤ®B×þ½I«ì—]U6ãe.j/†EÐ[QL»S@ÖâPÓÚCÀ±UÉ›ã`ï­©Þ)l\‡Üú&êÏ]cïRE^’ &ÉIóË Ïìû¸{h7]õø|iM­©¨—JÀZÕ±jVåãÞ¸92CvV÷ï=(7[„ïÉÖÐElæB‰sô‡2·í̸¨lk½+ü[×çl½Ä>¦ú5ä×:ùØôµ¯2¿ÙU(m7…ãqF±,G;çq ®Réce¤¨P¸¨™k{‚0ä²€:]«ÊÔ0‰}¥ÇÍN*˜2·ëÊžÓ¦¿!6€2UB×ìÕÓ\ Ò‘"I 0¥x5l*­Ž¯Ô«} Œ{,÷qé_EB„º¡å¸È†ä·q.Límü\ª_â…Oä›þp4ÃÐÑ|Â(¤ã‰ØýÖ¾Sýå…(·þ‡äÃ̽z“P5Út-·ñ éÍžs0ØS[ûCÿïþÏù{ËÎÿ{üçúùiý]ÐÆjrÆô•J™[Ñ €ô7fC qáuÙeÀo…|𺨳®ù+×±ã¦næ)( Z`]8d„œmÖöìBÍZõÜüαXÔ¾Êfï äõN‰ì'·ö”fƒÔ‘P¡­ÿHˆÎ!“âM~ì¨TÌ ì×ôkøT–g.§ÒÇæK}¬•d¸škˆ£æÅ-G{J Äk‚ù<º§4À~¾¤…×µK^X«¸Í×m½}¬J†m¼hoo¿k]ücö·á«ç§Õ·_ï QÌoSé MÜh¡ŠŒ"kl6®œ¸Øß£U3 Ã:Ó»xK£-ƒ¾î‡VW‰HZøƒ“<¸f\Câ!uò+ÒLΗ®Û4u;ðIò ¡b;Úî{°ùµ7uQBáјQ˜•d6 ê²¶žAÅ”ÇCr›ÜúlrW@\ýªú>hAn‚pNðÃpô]e<Ùlq˜Öc\ÅQÇ!$mñÒzÁÉÆbµ}Sÿƒè…Ta N7Ñùnû–’_ ?ö‘ë{ƒÑùq¨íhýMé—Î÷{‹~L÷÷¿×ÊÇ¡µ÷B{Þîf ˜U-. ,J­â“kGìtØž0+Ã+âYã¤J®|)ò¬ÃnO†&¼ý.Ü€þäÚáCO`A@Ê÷ ·brí@«¤N+{b$`ÿIÕÝù‰„b‡rù®ìv1 ¨>ÉvïöÃnPA_¦'ÛîÝÿed¶ìñŒM|àÒíç V~Õ1|ý œ‡~’íÞÚ­]óñlºØ)ë3]Ú Lß.`h4ÒÙ½°ôÉu£çSøLÖFä!¯b®cìT¢3»Š¹ÝmíÝoÝs·IÎý{ôçÚùií±:ÿñóŸ?ñ\cPg|))•\ë¿sõèÞüúóçÿþoŸÿùóÊ(ˆŸÿñß;I=pª@ž²ÆJ/Š>t¶ O=-ÚÉÅ®úøOÿ»–Uò§G‘œ•†ü$7»y d¨«óðùú•ùøç¸£·Óú©¼Kö_~ÿü»ÿ`ÏÎó¿>þñOÛdqÏ®¿(«Mõ6áóŸìßÿËÇßÿíóïþ -}þí¿Œùê×P¢Š]]þí¿~ü«ñ¯?ÿö?>ÿíß>vaP ¯å›´m—vkt·ÿ .¡y l\:=å*ï6S7yÇ!ï»ÑUÞù“¼œæFÙÕA§§¼1ü©Àí%áMàßnÛúÿAàJ^T…Ù\‚æ4¾~NÇ?x¨ˆ×ÿõ¸ œß®çŸîxêXŽtzÑpú3Ïíïý›ÌîÚï§ÂµÑO»¬Bá rXg<¼ÔÙ’®¼”ã›j—îÖè§MUAÞ%í3©[›€¬©äûÓ`Õˬ~a¶õ®ŽM´ËwkôÓ&ªÊVžk³Úi'áþt·w]—þãfý•HüÓŸ6þ¿é9Ä1NE‚¤?ÝÅÝÞ_g^|::vÂ&Ó½ÕO[F¼ ˆBvua©ÓVþé¶EÂLã³íž¾þjÜ[ý¸`‡TÔK”´)›Õ§¶’ð§}z;€œù ¯­þb/TQ¬TаI §†ØåË|éó>γã÷¿8&~Û¾lÒývço—3 û!~þÓGâ™ñüíq¡ýþ™PðO.¼ß>¶ïGÏÛïïßÿ¢¬»ÞãÿÍØ2Céãëe-ÜÎzåJ»É¦xk¦båD_@E>úA~•½ÓìÁ¨X§‚»D ÅR!v%ðŸ³â1¿­${LŒÐeïÛy  ×ç;Å–`cxB¥¬¶¤“"µ|Ã3Ýur¨pâ%¹4§v3‹Z¯‰£÷ð±mDð€/ÂG _y-D5Óc õM´‡æaj¨œUÆTO¢—ÖÑ^é6e_º' F Ü•pHO‚‡Œ‹Úmôª5@NËÊçÙ”·µ?”¿õÌÝ&ÿ1÷Ûø¥óÓÊc½Ã»l¯!;6†`›øc¥¶Š,&v$‰9jÔþY$μÖQHŸÙ+8ø :¾HœðaðÙ…;«,h1HCh›Õ#üžšZ¿FΩÔáˆs·ö[oªP·AM°ujáY05… ßâ­ýtüv<Ûíãè\^v3ÔLÙ¥ï¢/'{Pÿ õ>òNÒ›íÐC꡸³ý®ø½û÷¼Òó¾þ½nNí½VÝßQ+<ê“ê9 fLÐt8ÆY¢M`ŒiÑK;;È£¾“îH}>ñi_²Záó²†Ìs˜CÛ@%yk’-Ù`›;,d ‘J?%ü©Ð«~ÝáPöë\ývkoÇi…•r4ÕƒýS¯5†]å]Ò‡ôAÒÙ’Æ>zêv•ÃFQ»Ú¿µW©@³Îµl*3€;³†tiO¥¡ý©PK›/ý“ÿk¿OâúÈùñSsºŒ®‰õ’RŽýííwýïýïó·Ë¿Íþ{ôçÚùiímÑ ‘Ë ”?Ð!C$GsÍ“ÀÅwX1× ®;hiœÕ@>“:HÅ”gC†=ãmöãÜ|u® |›qÒ¬Õ\éWD¾tÑ ÓÆ­<“Õ<ôÈC¥Ÿ"Π_—ä‡áÞÜî%Š©©P¨—Þƒ¸¨ZRý)<©hÔ¶ŠE…æï¡¨¨l†*”jýV‰pv<Ö,?R›Ðní³ÀÁa\}ñÞݤïİG¿I_Mj™3³]F¦šzQÞÞ~WþÖÿ1w›üÇÜoã?—Î o;M%\Ä Æ¢Äv<Ù¹Þït9v–±2f•ËZ³,ÖE)ǶÖÙ¿'À¢9àd’k¿oS+)ñr†ØbF_h˜ËAªFÊ}m2ƒ*Y„ú¨3ÓE"†Ý3”°V1ðlíåD7ã[$?ñìß©%€e˜)ÇS~Çôy((£g>]Pevü³Í¾©Ï©·­eMe\TãÙ¿´<¯È³ÑÑ}Œ’¾*Pw /?·"SmÁ•¼ÏB˜“3äqQÞ»ý©üW÷çܽ…?çþ=øËÚùiíí§i ’*ŒÚcêQÛØ(ˆÿ}¡‹ÁcYÈyRrâ÷hUåþ’ô¢ïYÐcžBâc²)Ð F°k;â2|áþ$¨uKº©ok¨ÿÝÿ9}oùÏéÿ\>?¬¾ýHÍd£MeF6ÏQH*å$3_ï{È™ Ä x0øNEÉPÒ^i"w²ynU4ÎЊT¡îdåÚ¶Š@õ©çäÛvÓÂl¡W” ÌÔ·7IJìApm²æùnÓà•^VyaÚ‚Ð3êhOEÆ9·þ)Àš¤z+Ùl_ˆMUÄ(q9¾> °h­¤ü¡]{€'r{í)–‹œ+Ø‚” v´·©¥ÈZxé¾"<ÉŽ mœÂ“PbÇgÒÌ^ÆNF 5ù5ä‹êöæ»ê÷Þ÷©Û„?§þ=øséü´ô¶•W]"ñ 7¢ƒš•\–ßõ¨c–*·£¾fBÓĪ£žË¤E…D::@fÎw’Ö“NÔɨo®<­bÎô”¾§¡—¸`3¨ü†Y5ÈRs.lN³Wš˜ òï¸4·!™m•9{ïzŸÊà’· Ï{” ;ŠËzÏ~º}F©„æeîŠkÄñÁ؈¹ø+"R¹QÈ™K×övíÓ$\líÒ=4LÀ:M܈é;°]‚ßÍ¥]Fɦه$ÍÕzQÞÞ~WþÖÿ1w›üÇÜoã?–ÎO O^(u àAqÚ»ßÈI5é‰/C²mö=BÑj]¬G28Îc²’s®ØlvÜáñwÀ¤’üº™AÜvÝKE„([&_Eœ-* 4ë}x™rú[‡ÎAYð¨Cƒâ%·GóbïÆÛ—;åÕ}0÷] 5‡ø ñ›øaŸõõ>¶­CºšÇšŸ—ú(¹5 ÷Ej @b`])Å›·ö”ÞÛjSFëÙ?°nÊQ**Oñ+ 0ЊvqÒÃçUMõ †ß©½½ù®ü­÷}îvá¹ß¬ŸÖÞî‹"…7¤5Qš2ƒ;’eW°Á!°f_ÔÂ@¼bßÖ'XRf™!ý»YödË–lXhë(Àr›øÊU$„¡lÈÔ; áO øYS¤¼5ž‰ÖU¾0§Ÿƒ$4êÑ~¶ÆK'vMüÓ—Þ ºpC]¤çL†ÿÐ^¢ªØÚGßT£@íwô…²i¯AÞj›ªLϵ%-QóZU¥ÍÞžL4JgAr+—þÉDƒ‘Žz‘ŸL³°6¬ñ—ñO¸Œ!ð°K:ÚÛZºßz?æn“þ˜ûmôçÚùií)Ð(š’DCý bd3%’›Ë 4*A%HOÉ^á 5J#ß‹jÌí¨w£™ –>É”öô D#¹„Ñn³ÇóD¤™DÖÈ)¶gApV µƒ–<ÌÊ‹"Ú‹´Í[{ß«Þv´[ÿf™¨fŽ¥v“¿ ?Y‹³ú£e?øEqPûz³}×ß°'‰pÀû£ ì0kï帵‡9¼P^¤ƒîì¿I~A)Ì›ü0‡c™Ì¿ËøˆAø,ý¦¿­ý¡ÿ­ÿcþ6ùù߯¬ŸŸÖßñ¾¿¨6mDšX@ØO-V¼`pÒê ×ÜÁŽù±¶yƒ¬Eׄpå‹# OP­öóÔõU'ÐTnO½?DÈ î÷Xq.üwÀý¨µ™pÚÊË]°`š“9Í)ð)@{ÅZÎÞqÁâ’¸æ.Ò_‰žP%”×Nù6x¾Û»Â¾ÇUÝ”qœ4DÒ³Ò[0壵|{0£KçEƒ¨=â!¼/±hÚ íã»@b)$ˆð*º;š¿5¿u¾ÍÛ[ômÖ?¶qoKæóç';”ä…FÑü?øg²ôSÕånÇ—Î8çìµcª}QÜÌ…Ä¿qŠûÂÖ¾4G¥–Ÿ*ò{žž3Ÿt屟`š¸uÏ»6ÙC'Ço2Mph`:c ±½f&Sî·£=‰fDÙ£ªÕz韼q°³ìú-õ"ÿ ˆD„ ïá1~#äì#±{…j¾iDˆ¶%jÎ[·wÊ%ßš›]Ù)–0Ë+ߺ/¿)wä"þP ©xÄ0ÎáÊXLHAãE}[ûCý[ÿÇômòÓ¿ÿX>?,¾Ããd›$ãÙ]^ p›¦ýp,+£ÄÌ@3Cºœ‹‰!¦†¯.·ˆ×¶bT× ñ¸Ö Ú“b¿¯¿*§INkÕùô¤[Í‘£½.–‚,€xžöÁ.6xÏä|åAœì¤ènSí)ÈæÈ°-?/ýÇFŽ Õä3Ì‹ü‘˜Aá—Ûäûøáý²;Ÿbšåtù®=ûZÐŒáËçc–­‹€3L¼ŸÕ\¿i‹f2é—<¿Ÿ N2[8ª!ÔxMS­šmnÍ AŽ.Øò~é=Ba{› ä›ðIÂS1éž}ð@$Ú[‚9$wåáq„—C¹´'.'ÙTýÒ¾†_Z¶IýÒ ¿ÛÉÆæ!?@Å̯Ý/Ã'–pÑÆvjoo¾+ï~Ÿ¼]ücî·ákç§µ§ÕIå˜í{YE‡XÅÏa¿ÆËïîb ãe§È¡&ç1*ÓCCbB>FÑ=3w¶ã±51f²9ô¾•»Eí9öa&#Fö A˜K” ÐKLnBån=UxMZ‘ ¾·—¡ÚG¡<«žÝc»Q1ÛRï[z>ÑRe½ öÑË4´Ç”=B“wþ]w|åî3CUÁMÕWrÐ%³Ê¥µ 3 Ѱ¥_ncßdîã–ÊEöñkŠq¤@“qŽëßFŸæ¢¸Wó‹â_½_&î%ýeâ_ƒ¿,œÖŸMÈÖˆ4ÝË8c¨ ]Ì€?˜&.”jAh:îc% ØÎ`J_ë§c;’Ùš¾’ˆí×:ë^æm+ ÂÖ^ëÅLp’£ƒ˜@ʨϫ¹÷MyÆq¹°c„Ù]Ì[óNÂ9ÂÅ=Ô[ïòöaµz‘¾5IOî£{È߃o~çÚ{ÖñvÕ5ÕÓØØIêýüm%å‚ã«Ë­=|,öš³’Û­û!ñMâúM|²kˆÉ´VÚmøðÉ@„YC-7ímíí¿û?'ï-ÿ9ùïñŸ‹ç‡¥·G‘Yï¼Y®î+Ç%…5 ty¥:¶Ñt´Žo[é²^Èïv¿’ôëža»{Ø28ÌÇ¢½¢¶§2½>‡Nj™í:y~q†á¬$=RÑ•IFÃ~u4@T÷ÆË nÚ(€U\ºŽ”#¡¡²boÉõ@·¡Áp­½‡@™á ܹ·k ²î.úà*0Y²¸AÒµ½-é¬C_L•g÷MÒà úMzR<;娯eü“û µ6«S{û]ÿ{ÿûô½Å?&ÿ=úsíü´öôL"PlAö¬/O°½š „€¿+£ krdÏŠ9´ ÿÉõ³}[IJ²² ö)oÚSdOjž}&Ö‹½>@€W w@ •³iLB±=ß½Ú¿³8ˆkØþC}yz·öæ6{JTgëÙ»§,¦â‘ÎóùüMv1ÎÒW<í¸J~y!Ïá9˜›â¨é‰%±ôB†FÀÀ¢Gì·öÖÀ¬·Ö¤ÉW÷j^ ­¶pîß²GJUÍîå>výïCW{ë{Ú ¦’¢Cu{û·êÏþ÷©ÛÅÏü9ü÷º9Õ÷ZwG824‹y.P°5QÛ×J\ÁÔç!WêPÌF¶¬C(ƒˆŠ7È¿@ôìážC°Áê>¡(WnÁÊnÃP/¿(60ќƔÚ@ x{û:Dm`“ZÅîæ.µ^d;ÄzkÝ ÇÆ­ÿ笭lÓ^ºÉŸ%!Ñ/®Cô5~ªü¥=é/ýQÅŽ'Á:F"™ívæõ[sÓ'Õ$£¥që}JúJÚK¼H/|Á>hó2xâáØ§ ›ú¢¼­ù¡û­÷cîÞÂSÿú±r~ZyzΓú 0µ:bñëÀÍ"Pßå XÙ˜‡£ä@ëF…_PDí"ìhÑý äDÑÓy8e2÷GOŽpû yð7í$gÕÌ»š›¬Üäpøä»ír°°JuøçNާŠ<.í¹ 2„fßÌKÿ\pJB3¿Èoß‘ŸÀŸ×°mãþº& cçJ·xëOIÁïw"°3ñʸ5gúøÎ¢úÞ»Õ¦ý¼=w¢î×M|E`;x]1?÷ó÷áó (…N½ŸêÛÛïêßû?§ï-ÿ9ýïñŸËç§åç |æA­ë[kû«»ŒôŽ'º/ª©d%%–"¯öx ÜôŒÏ G©Qc±<. {ÉÉ‘WNdæl³|y\(‘ @íËcRHžÏÁÓIM€Ê¥uÏ$"ÏÆ.&ñœÍaû#g8·^n½á]ŽfA¹I_$=é“Ë~ÚŸá̱‡•ÜØ‡î²à.›œúŸž 4(ωC5ágs¼òv+}‘/ÝO¼ò`e·\ËEü ɘ ©.×{øSEq ñ¢¾½ý¦ý½ûmîvé÷©ßG¿­œŸÖÝ%e¹ˆXØ·+Ñ•cšðÌÊYVѕßzÝìïQñ„1u“èjжÿO¡*`‰Úƒº_µ »ÃR_n’0@Šnm%º–$B³§•bjÐqª;æ€Û¦•KûæüÀÔ#ÖK÷ÊR†Z®ú2Ù¤W’³j&òWî·Á“g ¾Õó“vû]yòZR2ûWÚnÍð÷‰õýÒ>‰“’‰jéìsf6Úò)¼}®p^Ï¡“–ÙË$69.ŠÛZŠß:?&n“ý˜ømìÇÂùqáíáø>;$ÔdY{ÜcŠnM½¦ŽÐ~aq“\p÷ñÛT ˆÑ@ôl*½›Ð‹½XeRªÂå᯽Eí®š¯žGt&Ó®,ò«ë3WZ£#û'\{Ex|²ÓÈw +™hkC'´D'.ÝÛMÕÕ¾Íx“>Hzà9žÂÕ×àñîÅðùÛ©<þHEX’•èÕŒvø5ÉQ¶‡ózà ñèlbûù‘²ÞÙ‡ôxv[Uqê¤?Ï{k›«Ø.ÊÛÛïÊßûß'oŸû}øûÚùqííÇiÁ‹P°°•Ag°ýW.A!Úíò¡tk}·íD¶O–}‚·ÞLÞl×ç¡pÊ †tñÉg`xÉ[EŸ#A#¹•ÕœüE3ȱ[hNlÙ,’U–Ú“¿hÖ:œxçò/¨Û©'W~äÑ>EÜLºì׿Þ?)‘G§à!¾ÒMmhdùªý6|Šš'çáòùìê ¿(G ö@n?Áí€Æf4^ÚÃÃÀ<”iröu–ý~¢H.]ä·ïmâÎä7/ã·ï£ào+úù]}{ó]ý{÷ûôíâo³¿þXÉzàs&­ÕΠÑóÐ~ÓYÐá—ðHä}Ý¡‚ˆ´:f‚Yù$µ‡'œØ1¾I|‰rªÛÝ4¸Íz¾47KÜÆ)ÐyéݾƒJ ²à%Q?5>‡/Ô:»§ò­;ð pù$´QI&r2ÚKkŒ‰uåÖyGvNßQËEv¸¾L‹Ìs¾Œ|üÂŽa°HNÅmÍÅo½÷–þœø÷àÏ…óúó=¼KÅž€œ±ºa"¾MKø€©Š`­z®1®‰ÏÊw•…ÖH뺛9ømÝw~ÙÕ‘)µVAi‹Äߦ»‘…÷¡”dzœs¦Íè)±Äщã&‘-Lùñ#‹}ålÞðñ™¥æ¹6Gï•Q9Ƕ܅/Þ¬©¤øß6x]uÀáãzüFß”Ç÷À+d/×(W€bmæPoí)sƒx¥[ÿUâSÜ1êE| ä2„®mU¾ß”BG"}Î7ÝmÍwÕï½S·ILýkô—¥óÓÒÛK=³B»0tÛ®š¸¿í…–•2J‘Aà)ϋ׽ÔÈ´f†Áe‘'€òXù[k8‹ûè’çKl‹ù Ou !æ-¼(†6ìø‡ûØí»-•Ašz|f¾ëξÇèVR9Ž 0°víìS5ÏÑœ¸(À¢%_{ïH_ ²ëëì<Ïxƒ|\ÆÓb€'3Šg𭻣ý®ùï}¿'ís“{›òmÔïóùózóØ'n˜žˆk÷A62ؽ Îã°^eSº×u’ð2BG¹dJTðï¡ê¹= ßÙ~?Ž,€s6xHœeÙÈåÑ Æ^±6xaJ?ñK3œ‚XM»ìøªè]\ˆ,{ûôËôvÓPË}ë?¤‹‹y!Âìò£}<âï}¹A¾?¯ÕâtìÜ]vT“Ì×jsÐlB„{oôE1´µ'ë ®,³)Ó­ÿ"ùíïÄ}}Ê_Š…˜Óeü<\"PBÔS^ô··ßõ¿÷¿Ïß.ÿ>ÿûøõóÓú;ÂK ŸV¼9ZêÉž]Âï:멸ÂËàŸñ$raò:êÉãôÊ‘ÖHcü×1°IèÂG‘ÁŒ¿ º"å›+ÀaçòÉé'Hh œk–uQؽ2ñ™ÏĽd[5´x6:35p0ÝPß{'TEÖN˜ Rá-<8¯R¨¥­kîÛÐÁ7€ÞnüàÁ•·æxOñ«éw4áÙ@æŽð³ÏöãWÅDÉñI–ÛºŸ’DîÞoÒ¡-1ÆLzŒ~’$B¢»ósÊ{·?•ÿîÿœ»·üçÜ¿Ç.ŸVÞè`3Mf:èøýsÆÀ5Š==è#•’ЃÔt’ΖI¨JÁ ®¼ùò†â8@òíÀËlvLôïf½p5{RÅʸá'q.ÌYÛ• $Ï…>’ Ùáðm¡,Ò&Ë“¹5W¢³®œÔw÷ÇC‡¬ ›ø¶?AöÛ–ëéûð=(Û& y_à#ßÔx<ÈÜå |¤‘l0ò¥yý°f/å¥÷&éÍÄ‘x‘ÞfÚLqeû¼¾Ëÿå½›ŸºwÎÝKúsê_c?WÎO+Ï_JÚ™"W^´Ü1ƹB=›¹Q/Ã)’VA|í‰áU±Ô€›&p "$%ʶç:Ɔ2µjì^0oÇYf5x6™}/ÄÕp¼yÁ¼ÙÍÔxÔ:V{›Œ®`¢Ì[ßTµz<ëhoû¶ªoš[<[ÿ‘@)úË}ÉßòGê½À†‡Öt=7¾ßþy#úD¦®¿VÞúÓÏ©b6®"DYuu·öS¬²¥ ÙçÒÿ”übíÈù©b§Þ¸œx? ô|ê‹úöæ‡úßÝŸÓ÷ÿœþ÷ðÏåóÓòsƒ”J²ïóSõOfiP%¯ Rât¶ÛíqšœÅœÜ˜ÊóÚ“ª0y¡<‰9.–ó2¡LýË ²ß7Ùár;€vE˜«m4ör³ç[¥$‘ a-'<œ+îfφ ñÊÂLáZL'ùÖJ'*éjÊ·î…ƒ ‰sÀìÒ,lÃbùçoçèÓ/ ãš6œÊÑ Ø¤T¹¿c‹Ý›£Le ñ¦ºô>%<€â½^„§‰Ã4òæ:‡>y)w[CH´‡æ¶æ‡æ·Þ™Û¤?f~ü±r~Zy‡)Šÿ?0Ïq8º÷T 4:G@­¼âzqi!¸aÜöÏ'Û¥'4Â4NÚbÕ“íRÉÌìGìiD(ì\N,8Tµ@lÚòå°š@»OBHRÝ ¼ÛaTŽæhnLuñì]Nγ_C<¥G³Hoæ“_rïÁ£Xâô?ÍÇcôMy|·ó#æ²ÞùNÉ®`3Û­}D™¼TôíÝ7IOa¥JÿéT<¼sf®·ÑCtÄj.妼Wû‹ò_ý_æî%þeî_ÿ¬ŸÖÞã¥ö‘*ÿ˜¼ô¦B»aƒÊË ’É$!ÇñÉÍP"“×ͪ±C4˜æ«ÓÞ€ûÆð° Ô>ñ`OÀ+&’oÃzs+f‚FAÊu_ÐÉ®a+zUÒ­ pû•n?OÙûŒGsô_ì’ €2³wáp$Dê§ôÚ÷ ·T~*s^£ç;î@["mÙµÇ÷Ô)>bÒðå‹`NK»µ.u0ný—_žëÔ„{Ê/ì hR«—ñÃ²ÐæMB¹¨ïÝþTÿ»ÿsöÞòŸ³ÿÿeõü´úŽÄf9x€ ju1@w"¹fχԦ“TœÄ`ßÉM%gÝ¡ºt6L’ÆÃªN´‘ÛûÅ÷²hêyPÆïÕø8IèöìZ0lR¦Jxrñ½tr;¥Ô²ž·ëÎt:í”(v…=8g`Ë…èyÑG{IoGi„GÿÄR3 $ÀÊ^䇒¦c‰d¥ãrîûËAÂì¡¿½ý¦ý½ûmîvé©ßF¿¯œŸÞåº7£{@ÈïøÁ5ž~뺟l¿F N¨).£ÖëCÌl H‰*…;TwGB“¶ãåoÂô¯ÀÛ9®¶®k*ãfP2®òqÑyØ2ÕhÛÎZD±8…%x¶'×'ÚŸkuÀ™­{R…¦(pœƒ`—žT£À,[tÛèIUú7Ûwå…õ¯ÁÝŠë<ÃñOæÒSèùjNí}OŠP÷[ï]ƒŠ,Séž Ù©± ý6ø¥ÍÌøMy[ûCù[ÿÇämòs¿ ÿX;?­½ ˜([P0i‰´Qƒ½™Eÿé—É=»mTLÏf@8‰#hA!Ø ”°h]BâçÂògÛè"ùîá2N°¤3£ðD!2cû€ÈÖ^„cµ7S„ûºð:£ý¾­Ýê»ro_~q~˜¡KºõŸÅX<”7ùñ‡“´SåH<ÇaP¶é ˆ°œW/ý%r¢Ý]f¹óŠdˆ¿ZºµÏ¼ˆ{À¶H·þ³ä·C?-ì×ü¬n^TçtŽŸï>GÜôw´ßôô¿Íß!ÿ6ÿÇø·õóóú;ª–í †ÃÜdë^õk‡Bhj¦•ødû˜ÂB/º2:Ͷÿ€€ó‚+f-g¯«µcÅΠѼ´†+:¾ð…Öµ^†¶ôÓó–:†P¤(Ä+i.øãú‚ò¢A Ø¥5¢Mé«,ho¯8| OÍKk¶îž­f‡,ìÒ«þ HQÜ7Ÿ¿£·ï‘08±ù±B_ßµ§ê³Ø‡u×þ¨û%Œ‰áyiO Î';ùb¾÷?£ÄϠüT€záNüsøÄªìêæ/s»¨oo¿«ïŸ¾Mþsößã?WÏO«ÏŸQ…b)Å\Ê*øIKÞ.ºuëÛä˜M¤œr¾‹ ’—Ù²ƒ'ä½àŸC¦¬ Øîuë’+Ðí”ÌÔäö0–«’L4È~‡ÃÈtaTtø…¯@ª•ê^—L%¶Q×3dkß!·¡t1†rvýCy½=f¹H7.ÿîtÇÇà±Î(&¤G¬kë»òÀ)•c.÷çÚ³/…ç¡÷[{{EÃc’Àš»õ<(‰o#Öq“¿ÃAÛUÍÕo×;hRõÚM}[ûCýïþÏé{ËÎþ{üÇâùií9~£½.°öIÑŽ>¶šÍ ¢g/+G¨îÓ™¡@˜ŒòÕ ±ØÊÁ1ü{ìJu‘z?WHáîÙ#eRZ Zgjaaž*s¬ÅHXºgGoMü\¡; ¦6ûuˆ6F»´7«§'3þa3Ì—þ—«ÃöRòEzh®T¶›²WËm£'T|Ñ…7íï¡TòÞý‘œ:f$´oM6ñÑžŠUh±ìò«·þ‡ä¯ÓÙáOù篈!Ù]n㟿€M7Û¢Ä|Óß»ý©ÿwÿçü½åßgÿ=úsíü´öö'>”ÁÑ‹óñ' Vú€H$±FÂîïŠvј}¾€$?ºŒš— ÒÈÏ-«ÔèÀÿM“¿št¢D ¡",ÂYLŠqº=9g t‹îo!>aöéŒõl/4aC±þÎþ.Q m÷tÊïþ¤ÖT|ç^ù×øå‡ÎDøÂÂâzëO9䑨9›:`…†{sð@»Õsn½S±ßVnâKx"L‘„: ë6xÔå0¬›ò¶öåïþ2wß…¿Lý÷¡_VÎO+ïÁ~¨ð£FÛáES èÉ–N¸„A¡8uPži‹¼ öø1"zzdÿN}«Ý~Ëð=À>ѧß±°C+?rÂ¥Êw=Lõ&­_r"šîÓvW\é?öóe>Ð-[s"÷f°ò6êg流#Ï&§ECó^àœ€7”àtGÛàE“aSc7tîöMyTv]*½ò±+yç”Ò[ûô‹:x`ñÆ»ÿ©8BLø.çE~Ô•ßµä9|’“<=3­ä®—ööæ»ò·îÉÛÄ?æ~þ±v~\{G(é‘dŲ(cp}‘d-–Áäè×û\nRpKçÈÎF²¡eçæ9™šéá1I…æ7gp>–B±kLó!ô!…ŒŒ.¬¦F"s._q°Gû:º—¯ѱ~U~oͤ2= ![ßðbì2œdã%ú‡³\+ˆ¾ê$¿›ã…æÉ>ÞjsŸá †XÊ*säU€ [ä«?ÛWOf „ÂnÝSfž ×üÑ)=u¡¨Â âÏÑwê˜@Kª‹igSÞÖ~×ýÖý>q›ôǼo£­šSy¯5çǧª É7–,töœFpÒ´*¡@£n‡—#gdBY0¯-Ã9—ͼ6\AkîA<'E¦:M[0*¿V5¬B. EZN ŽòjáãLRè1l]#ÝšÃÂK¼‹Kïöê„ÛÌý"{’ìf®:}À1tVFÉ\‹é±j^ªƒÚŽ ( kjUð@Z¿µÇOiK¥EÕ›œýwIÏ{GÈA‡øð¿‘,ŒÏþ6zøß†ý:ÉöåmÍÝoÝs·‰Lý6ücåü´òü} L­¸{Š(%_)BŸxß’%aÝ1dȳxº/—·(\æÙ¿›Ý3‹â2‘Â,\¢Ëƒë2C* ˆŸÚó¾«I$@½"(ñÃ(Ò]Bc‹#.r=Žî ë{ûJ¸UGˆ>úÇKñ#g§ƒÝå/’?,0‘}ô<æÇT-\χ/å ÓÙ/fõ¥êפ,4²KŽæ™Ä¡@”vprlg`Å'7Ë!úbÊ…ç0¥Lë}èdÁ“Ú™¡q>Tw¶ßU¿÷ÿžºSúcê·Ñ¿—Ρ¼×Ê;PÄ«N‘E{K@®„ȽQ Ñ“ïúnO^J]ªcÓ¨E•?5„þÄÐZòë© t…üÿºŠ&`ȨÞ^µ§nÖÌÄNÓšdKÀ9ÓjoçÐxÀðè&Ó~ôÒë¼µWF ðÙ+Ãöþ±¨L/_{§N¦ õRGz"$;ÃW &Q³aæÉCkAàžvtWä]@“†ð)AÏš—æ L‡É­w2†½—J®íDJ&C÷ù>tûàù5e¯øô[sÜÆfïÛßÔüTPÚÒèŸí)&¡ò¤?¿¿u¯ÌŠ ®á~“žSŒgEª‹3d=9ø-Á½)ok(ëÿ˜»·üçÜ¿Ç.ŸVÞqÝ Ögˆð¯»—w LëÞIC’€þAí땄©×ů Éj=å“.ó:Ë/ˆ ŸÊúNÍ 䎣(PŸÑl ¿°Øñ<> þP¨Z®>5”`rÏ×Ù›S– ·+±Û{‡z_óÀ8nÒgIO¢ßx¬•×à3×èíÑó•våAµc—-çÇZÀ†Ìà$ÝšW‘ˆz8Þº§ jP@ãnâ7åO5P@n£7ƒ8ñšøàí½›ïºß:ÍÜç[öËÄ¿‡þZ6ŸoÅ}l«NyX[ˆMjxÕý¨žë5Ö² 5'E¿Ô} SÚ,†¸fÖîM*ÔÉsP,ŽV$J ä³«±Û«‡â±…ÁÑ@°æ)×›åAì ±ú7Ù@í1 þ·TOb2Užu²·/¿ˆaþbËxwôVÀŸßz½IŸ%ý ÿí=„Ó ¾•´vå¦<«›RÙj[ê³Ö~sä~kÚCÇ•‘ü¥<$Kã"?ŒZíãY¿ Ÿ§¢mH"ÛM}[û]ý{ÿÇômò³¿ÿX=?,>­ÎjÖ%P9Ê‚5¢Aô4˜øÈÊ”­ÂQ+Á¹Hlö©†z y1¶YðD[ë550³e«˜S„+ŸUU‚h‡˜þÀë›67ä…¬ö *óI™ŽŠ® …îÀ[{;WH;¨³9ÌÞ¿=¶MzE«ëMþ$ù!Ýò³a¿Y”?Íš†·ß´'´De‡»Ù+ ¼põœíkbÛηþ‹ägª<å­\h–ÜeüUñ±(ÛïÐßÞ~×ÿÞÿ>»üûüïã?ÖÏŸ¯>­N8¤°va6ËÊ ó™¶ßepG¢³žÿG’MÇ^æç{pc›BA¯8Œìµ‘¶Kô_Kfhpz©b1Bݽ¼)Ô"¨t¶±]ßBv&PÜ É‰Ås?[„"-æuø¼›ór n(Ë­wÜ€$ÛÃ4ݤ/HozšÃÏŽmðYG#AþÝuÚq•›)x ´…ö7Äšs»µ§?ó5+ýè¾H|ö›øwDÉ©÷¸ ß¾ƒË’Én­íííwíïýï“·Ë¿Oþ>þcñü´ö.õóÕ3ýÝ¥ ©smy¬úy ×:;%;¦$±›üü•Òã•yøw[Yfj¯­¥0e€q –ªníjMq;§' šÚ7ÇÁ楲uæX¯@A råÓ­pžÚ=;Cºµo@z’G˼õOôƒÌHŽÖ‹üœ+ðÁ¼^ÁÛø«þy€ªcåä¼õgßɲÁs3©HË“`8)ä—æC‰Â fíyëî j&@¹H/uÈçyž£ŸÄŽ÷ùr§ö¶ö‡ößÝ“÷–þœü÷èÏÅóÓâó`’YyÉ¡.Ä~ÍÝC*€H˜õ„hˆÞ=Ÿˆ¹8#=Ÿpà®IíPœ™ÞØ *'`gAàÏŠ·‡¹Jèý39L朷ÝÔžPh­p©+ß[__¹7LJ,œ·4û¥{Ò-y™˜57ÚEüFU)'vÑ<<߇o±RdG9øÊ”ø¦=\‹ökP_¶‡æƒÐ2Öòٜ̋nSÛ=¿îè^4®öóÉóëñ=·Ü˜ÜÏá Ñ=>ì–]{GóMù{÷ûäíâï“¿ÿ\q»c:ÁºâY ˜2&Ë“6@ šÔÁ,„É'Z(tá–óÄD;¤fþÂ#ü£±à×0ïýÒ9Í\?­.Þ×ðž€Ò›§Å1ø¡$É {Ayʯ¿t§æBÁå6µ{=Ú­yÅÅn( •øì^÷óà©·2R6ñ­CÐн-òmøø)«ÝÏ=­„šïºûÞxSüÇÙù6q›ðÇÄìƒßÎçëîIf²õϳQl&Äë‹ê™òX¹L¼á}ô`?dê] -+$)B®e•Ò‘>Mýi‚z`8PÙ$¹€¨@ ðpïr¶ÙäLê‡ôé©L Ü U¶g:Ø’”½}6¢Ý´#ú[ï&Õ‚ÒßÀ»ôQÒÊ=ë=x<]`ÖÒ­—êl¯+w׺lk_t¬Ò^T³y¶‡ÍÍÎÒê8RG÷Ì–ý>ˆÛ¡_ÄVÿfÖñ2|àÀíUeÏè^ËE{{û]û{ÿûäíòï“¿_4íÔ•®°u-6´Œ!_¤7[ ÀhÔq`=pEµËXz^Iß•'S¬‘—¶°ì;³_n=ÐïæPª*vÖKïUÂwèÓEx2¨fG—¡CjL^}Ê󢸽õ®ø­ócâ6áωý\8?-<ç›ôÌ®zH̫ވÿ>…?Mç¦=J š¨ <o¹Þ:z ‚3çèß1¦¿UD™6_,N”IMƒßø)ƒ­b‚å*¦N³Èú›«ÈTŠáhú`RáìnµÜÚæhGëä}õï¦v¹þxÈÏ÷D̓­ïþ5|eEHú*ƒz©O0  ;Ô¾ÂÞaœaŒ[{ 3ïc/çß»ïHPÕü‡ôÄ›à4·ÑSÂÖm™ ú¢½­ý¡ýWÿ—Ù{‰™ý×ð/«ç§ÕçÞOÂô@šºwšúSÛ;AÈå¿ëY*Ûµt¢(‘÷x:ÇY%Çv•‘V @òÇ>l'ç/)˜+GDÂQ™¶Ü_¼òþäîY ìÆ ¹ÁjŸ9Àò 6yôН·öx¯­}1lýgêÄì+Uº7ù“䇩º<î¿×ø©u¦œ±Ï’ØÔG©´6¹-†`˜=€'Äg˜oͱA9°’RÐÏî»Äo@Á—›ø$yd;kGnù6|nŠÇ¤§›ú¶ö‡ú·þéÛä?¦ÿ±|~X}~|F6Há±å°>$ t°£Ýê ¿ìè1;˜Ê)‡ý™Ó­NòÒñO‚n€Gá;5R!LÏðïx[Aë"&È¿„.œè¼òê ¶P2…—ëûÖÜÆ“!Õ*¸Ä.Ýg‰OÊR)ñ˱‘”…5¸ßN'3Ñ]YàPßÞ~WÿÞÿ>}»üÛìoÃ?ÏOkïÈ §‚¢Ç.JˆNA¢Ù ˜di!‹Ù4Š‚{»DW^}<…4ìÅ&ï¢Ù%öº#ó:åÇĸß,³P˯ÙðƒòÉu†•Ä«àL{Y6y=­'FQ‹bL‘ x­¾ªˆ¶æ8PÀÏ)iô[÷„|}‡|BBÝV!Ö[{¼!ÌðÌ/z`»X!—öÔß‚’lâ“ÁvôO-Q”ZÌùy@Û|°ÃÄ£¹ß¹bíÒU%sèoo¿ëMü}ò·ÑŸkç§µw@6UÞ Ä`ԇ떂C;9†(麵ÉÍÓ‹/¨®Šª°wì’ÄFèþÎáÈí‰yÍ;pT.·ýÓÜVÄÍÙÄäHÈí%šÅ[eß›ð­!ðúÂâUV)í>wfcÒÔšñÎSvù A‚äPþŠ÷ý1vÅ ìȱ)«NøÖ\†”ì6ǂѲaÞ#˜›·æ¶l øš°‘ߺ^Äã&>€ €6 ™þ2x‘iSñQôÚ¦¼Wû‹ò_ý_&ï%ÿeê_ã¿,Ÿ–žû@ÉÕ±îm¡GìV•4 Žó÷ÇkKàèþÚôÚTÁyº#ËvÔxsiÈNxáR?%‘¼µIeþãHú³‘"Zµ×5A¹cOS+°Ž1ÜÙAoM04ªHk·öòÓ5Ñšæ[ÿøù@´þ&~–ø‰B†Ç÷~¦¾Ôzs>ÇØK}Ðá–¢(nYf}F°ÃU }´'ðbËö˜rëì92+¨šù«^Û®Ár?€7àì <“ýííwýïýïó·Ë¿Mÿ>ücõü´úŽœz¥ÙD’¡lÁÁ‡ÃÎÙ@4—¡m›õ½êéç7޲øœ"W7‚}(…O O ×Qì¨w^!ƒkzò¿“XØîµwyð`8HE`e?­£ý¦pù‹Çº‹ QºÇ ÷æfö†ÜöÞÙ©à2Q“>Iz;i’üöÁSgójXt"›ò".OÎÉöUP€We¢™·öÌ$nInýgÉuW¿ˆŸÍ>´6žªVáÈ T5Nõíí7ío½¿¦îó-ûÇ9óûØ_ çó­ºmÝ Ë”T`:Š?ŸA.%ݤ*·© ët×-b6p`7–'µ°5”ÄìÏkKÉö÷aÖ) >T±)Q~ÖÇô¤¾Wr½³ªàô¾'¸¶±ÚS”htJ$IvšõÒžü*¿š™ÞéÒ?ù;Tº Ï ;äýÊÊé¹eÇøí;ο9§ðºvõþŽÖ+p j>ø÷m9–þÑÜÆCÕ™Ð[÷RT»ãUÉvŠO>ÁïF%Üeø¼²:ñDUÒêÛÚŸê÷Nß[þsúßã?—Ï«ïx߃l¡B»=ÀX;Èâ}¬›¿ý¢&pà½ú^(ní¶êçº:Ìr+k,¯9Ž.#Ÿz^¥ªÌHŸím¦žÖdPß‘Gu¬OH§Ì@_#ök˜¥Å lžú¶_Ûº·ÞÍ;Ù7ÕY©ò¥wì°Vœ•*_„ÇëEwaAìƒÇ+1ŸrÜïʳŽzŸºžÇv<Ù!ƒ§ìÖžä¡6¼PFÎþÁ±‰ŽBu<äo`¥•süŽÛg?góÕó©¿½ý¡þw÷Çä½¥?¦þ=øsåü´òž·=OòQZ)ÂE™¿¿í«Â`g¯ˆ%`CBv‚ãf‘‡“Wõ¶ö‰;!?$™ö³Cª×ãÂÄÅ‹ÎPx½Øë%²$´ƒ•JBv} êŠöxÇ[òj`W½µ Îæ&·vé¿ò:5ú˜t‘¿ {µ'à´â2‹¿ß¾sU’ÏïÞ›MÖÊX©X¯kh¸çßzûØÖÝ媷Un–BË"¨¿€¦q¨ë®·Ã|– jUÕE‘½ûUŒ‹CHBtüÿÆf¯¬»VÔ&l+[3sbuÏ€C:»:ìí×Äayå©3:²ÉÝ]$<ÌÍPÜ…³·Gq)òoâ­{Zã©qøCøwÄÃå>–'z<7¥26sEyéÎÌA†$®‹ÎD±Þçxì”WsØ®©ø${óÖû”ìÞs²w0–‹œé×À?ü³Àøºl´ïz;›¿õþqtþž·MøcÞ?ö±oëæóçuçÉ#Âá¶syqþ4Û2d×Y“/”¯6!„¨Û¨è÷¿¼6"ƒ€ïZß‹½9È¬Ç ^®–…z¥,q.⸠ˆå3 IUÙ³Ô/3K$>>'Ø®jî–˜´ÒGºµ'ƈk Ö[ÿªÅHªdž7ùò—æ—ýoûø#︧Y±OÆú£É4úc’Í™$„·æ„È»”®½ë4Î`β»'sÕÀ}xŽ]DZ½·A¡9tw¶?tÿêý=sŸ»èß'þãù¾p>^xœ·2A©Uö2ñe8ðt#Á»Ûõéþ¬[tC\ÑÕ†ÙÇT•¿¢UÛ(ðŒ¥܆‹ìüêþ‰¯+ϧ6¥ü‚p¸PÝëx̤q€Þ?žà8×¶ýÚTÒ`µg'ÙŸd1ÞÚ¡ ‹åÚÝû‡QŠd¡Þäã Ðén÷}üI¸‚‰xu]Ñé—úćƒ^ò³…è÷„t]6—öÔ^[ù±ÄxëßÖ2É(>Ž‹üv›‹®›$ýxSí•*òE}{óCý[÷ÇômâÓ¿ ÿX>?¬¾ÝÝľ $ñÕ=BE"p!KÑ©>' v@QxèK?‚›7ÄžAÎá t/¼ÜNJûM–‰WuaÊ¡žvJ Ó÷óÄÀžÍðüû†ìýüäçóG°´»ð삳áıR ·öâŽÊ¦¢’Ç­Š•… V¿‹^òÉ~p}ˆßÇÏ­‡î©°ë‰ñ]Ê€¿¹öàÐØg`äõÝã­=x»€oôÌZØû×ÉG¢’\^§üâÙ ZZ‹ç¿x6”6µÀª_Ú;ZoÚ?zßfï~›ý}ôûêùyõí–(9Qx|íJëN _ –±¾2òà'±]š”3e×+˜ûòŽ•U`¡ìJ,o0쀗™NÃ3âìÏ‘2×òé =IÒõÜŠ¢›½ŠeN ?¼îróçe'‰KeVºO ›8no¼Û;à ”m8lÛ»mkû‘DJf:å×ΰßmÙs†Þã×±ºj×së¥?,U^Ïe¡Ö¶á¾êq[[{•X‰謰Gÿ]òWÊôÒMþγ#ÀgZâmüœsYü=õ¦¾Wó‹ú_Ý_¦ï%þeú_ÿ,ŸŸ–ßQT‡m&ÔÊ><³º½ N‚¢@Gqdù@KdÆR¿Ø†8_I貄fk…¼4Ň¾=˱@2ƒ<#ƒ}owFñöd³¶»žÎöt$’eýXˆB\µ;Æ l÷¼„ =Xí·öûÍ ‚zºõ§ Ñ“‹wùmc#±sÃÑÛø98¬+ý¬OQßwýÙÁ3 >Îþ°yáùâP++gkn²M+é¾I|r’¹AOñ5ë+Õëè!H ž{jïÝüPþÖû1yoéÏÉ þ\;?­=ÁâP0 ?½žý©°ÜsêýᢅjÜî A©Qz¯xÖhŸÃè”!BsmÃô*˒÷èYþ…ïhK ‚—u꓊×(9RÛèàKA{°Üz¦=òƒªÒê/eÞBÐníYQÌ` }xëê˜IIïé&>ž»:áü iÝz¯á’ÈÓxæ/BÕ—ú@n¨‘fýâc­ÀpÛú·öœ4rüªfðì¿I~»áüÈßl}À6ÙÏ?Çß8º(Zõ¢ÁC[ûCÿ[ÿÇümòïÓ¿ ÿX=?­¾ãÒp™ð’ ÕàžU©]dŸvXá°Pì眥(Ö”0!òÆâyÓBl·­CF;xÄÏSдE•õ]Љ¼÷Êzå‚°DŽMwš¢ˆUßûªËë$‚“Ý`OA7*H«µá‡ØÛG3íléÍ‘®÷þ/‡9xË/—5g®3åü¶_yòä¥ iH·ÖKžG@Óì½'—Œ£h¯½vk¡‚!q%÷KïÙlÀ4Ywò[úß2š¶í(º ~@U º‹ò¶æ»î÷Þ÷¹{ NýkèçÊùqå¤5x |ÃÒu¿!Ivæ7¯âžlþ¢ ûn ÆúÉî ƒU&s¢-=ìù6È/vMÙ‡>’KÆá¸„p^ã,Ô àðaz( S‘ØÁ^ííj°•?²ò bÆ¥åÖ>:8}Â\¿õO„§¼µS~{Á"?ì‚Ožà÷áãL¯â˜ á>ÀPÜaøäùÙš!F¬³9i§dÏx,ŽÁ*°««¬[ò»òà%-hŒîHJCtqÌƒŠ Ïöõ¥H\ç­ÿ*ùq[䛸°Õ³îDx>é-¶t‰7õ½ÛïÊu¾ÍÜç[öËÌ¿Çþ^8ŸoÕ}lëî)¥^¦â8KtÛÝÌËéDÂVó¢o {ޤ’^wÚ0í06…•J<<ÄÍ.d!²ìPBtù¬‚b_•’j»¦[)0Fb´§}`GržHôa;Ìñå/ííH-6ñ¦€9nýç_²˜ìáðå4{ÉŸ$4ħô5~ù°Â°ÙóÜâ]Q/ç<çªã¤ŽŒ+åÅZ½5o*(¡u¦[÷Mâd6\¾‰úqm¶ zH·áƒO£qÜñ©¾­ý¡þ­ÿcú6ùé߯,ŸŸ–Ÿc4ÚÂÆƒÑ2d±Ø`¼IiÅçÍ"굩“4ˆœ¬™rhG}Rv›°ÙUéWíBî„V}ÑÁ*Å 9<ñõ†8$2U§gZ^II®…òÙi¿ß»ãÄÍÉÜ›¹òî·î©gêˆý&~’øuøïŸÃOJã€™Û wõ/„)ÓJ¿Èm¿ã­½Ý¢6›‘‹­\úÇ¡Ïr3A…`°ËO®]5ãϹEÎñw’éá¹GÆS}{ó]û{÷Çìm⳿ ÿX=?­>O½gþA¬‘‹äáSÚ „óä)xʉ1O n0ª´¢· AáoöŒ²/ NÚ!ÄöòÓk`ê J)ñ Ø¡ò ¶Mɦñ<?´¡Y=ßÚ×ÅkSR¹uoË5ÃXY¿Ø€^Òk;«ÂÌAöÑBɼn}×qn›J|¢§aòá5- ¾­=Ú¢{üìÙ—øðo÷‹ô ®™ùÇ;“©rp»Cu[óCõïΙÛd?f~û±r~ZyGœ^3ã æÔMBª„'Tï$@zLrêûª¥V „ÅgH\ÍÑ9µ ˜%8w§µ lkz¡ùY©„ò8OfÑK¨f´O#µ#¯Ó5ëz)‘í`Ç@^œñâ…¶MÖÒ­} ·†|`¯Ûûï ;F*zå:äW"&С—±ÞRßÇ h' (ra.âÚSñ4Ép‹Ü˜Úñù—ýø­­Ï{P-º—¾§d‡"–CvŸwò@p‰—±“l·C˜*íÚtw¶?tÿî›»CþsîßãßÖÎçwÝ}l+ïyÂ'ìÿA~‚{ƒ¸Y®%Q›ƒR…Ã+TgXÒ×Ò"‡.ä†åm†!Ã\k‹bj;5FvÊ ¬¹‚‹âqךXäT•èºó|vbý\äÐ-à9sˆ?€T{™¬íïíI~ÀEø8Xöþí;Y>áq-íòWe«S_<–³ä3§¨wª·ü»þ*ˆRB¢ñD7æ'Úz0«üòK{جžÇ6Ë­ÿü#’^oòÛ_&mð´ÞÆoë+ªÜH”»§þÞíOý¿û?çï-ÿ9ÿïñŸëç§õw<äÁV##}ˆ ÷¡¬*˜“wSë‹ÓÊáoKgWàWJ2N¿lÛËÉM^y…… /Œ\.ø%"„º‚³¿Z-<¸+'‘bY‘jCéV½µ¯Î„>¿‘[ÿULêÝæt“¿ e{·'Fþ?ä0fß+™Gí7ýÙÞð ¡Àå/¤ÌÁDÊãÒ^Øt’H©èÑ¿}˜j6q^ä7kÇúè`«`a?Ö–g¿èoo¿ë]þcþ·ñëç§õçz®²!´–äÅ)p–T°/”5Ч{@ÊŠsLßG ¼ÿêz‘Á k·¡,^é@Ìô°ò^ygjÛŒËIg"ÝQ×{z⛞ö‹Q›?‹¹i]Î;,‘ÍæælR%äL=ÝÚ“j{yžÝS:üx­ó"½Hoÿ ×¯8÷Ñô0£Tï…ÌñÖž|¬¸õórÇp—eüŒBõ9›÷_fžÙYO¾ä­{í§á7ñ€ªç—åýüM-™ÊÌ<´·µ?´ÿîÿœ½·üçä¿Ç.žŸß‘C°—m4´UaÑ ½B¢ÍcØPù$B7O=§Æ‘uoæ1åaVXí%WŸ{Ë®…Q`ôI+Š[%~mÀù› ×Á³ÁCÏfÂvap¶4¬¨w A,^ñ$ ÜýÖœ”Ù,ªé•Y¶õ^ì 3ÛOV¹I_$=åNô¾èà ÜVe%°¼”gï¬ +P•áöÃ3oíEó˜2¬6óÒ?¨ÔÈ·öE|r0ˆÜLâ2ü`d  “S}{ûMû[ﯩû|ËþqÎü>ö×Âù|«îc[wû…_ñ¸N‘ÝFÚËL˜–b\4 dQ€åÚÝ¿ƒõ=>s -afBû $&èWl ÐøpOX>Ò¢o •ãIeeò<—&«ûw@ ÈCãN–ªŒˆP%­Äaæ­=u!ÆÃ3Š™B´bKršà6öBåNãVÂ3c˜Õ—̪‰ž¯g/& ¼Sõø¨ÕÁ°Ø• ì¾ú„‡HE2‹eU³,À4¹°À*)3¬jÙÅZ§¾·”ŠlW5×»û†Êã"’߯¹ È·ñsgŠœ‘Hâ^ú¦?ž^bàOˆEå¹Ìyk_@뢒òÞKÿùídŽuÜÄobΪª º ßž'˜Ce¡ êÛÚêuÎÞ[úsöߣ?WÏO«ïFÖ'$}… àÞHÚî 8u#SµOZh^6t~Ë®É?м„&ýA#êIh@+g£MÿÇÁŒ³>k{¨‹#eÜ d´“ýŸ(ºåê´‘•¾AÄéÔ\ô´J¶ö”mƒá‘¸¡w÷„MÇRŠá1­l¬½ö‡”ú5tjÎE®Vúãè|©Žeƒ¶ÍMz|vÐ0ñ¡ßÚÃU_›AÏî‡d§B}Œ›ðäxüèé¡ xG<˜ð%Ýt·µ?t¿õÌÝ&þ1õÛð•óÓÊ;î|› {ªL 9 ÕBD‰¨u€8jùLl»6ü‹Xrµô5À¯ÙêÒ”謂W7Sâ 'T[µ/Iôn0QUá…ØÅl@ïOãàïê&7yú¥uW.R? ¶¾AÍ”'$>uCßD—²‰^|]wÕkÜP5“8ÚÈô]m¢r¶­@ue\UUœTvt€ ÞníÛ/’ŽŠoÝwI?¨Úì7é%š!‚”Øn£⇳·7ðååmíwÝ¿»?&î-ý9ïïÑ¿WÍ¡¼÷šó{^E8‹TM.Nj÷ã“‚%WÁäi,è4ûïÂ×~RèL^êÞ„$h±IÅ'WqÚÏWÒÎ>N›¥? x@ZŠÀ*  ?hKóI³¥ÓjÓ½éŽ/»T̪OÞ»=Àö•ÙKOÞ«{¹‘Ì(¨‹Sø»ìÒ²Èüªlø6rŤÕí‹é¥9OȈ|›Ó«›Ñïå­=Ïì$˜êÉî‡Dö¾Éã";þuE$mß~\F>kÖæ±]sGûSóïî·™;¤?'þ=úmÝÚ{¯;Væ?~þógb·PojšÅK‹Ÿ?FÀwü¿sÙkãWýúóçÿþoŸÿùórþ~ÄÏÿøïå¹W86„/†}ÙR1›Ïþ‚uõŸþë}*{ÿR”¯½’žœjuõ>ÿAWÇ¿|ü³ €‹$®wÕ’aìý—ß?ÿî?3ü7ÿëãÿ¼U®Ô‹ `'Z­¦· Ÿÿd-þåãïÿöùwÿÎF•>ÿöß?à0þÞ-¤DÉ»ºýÛýøWã_þí|þÛ¿} B0zó.q ‡ÄïVW‰ÍNýAb¯($UÝžÏ?•Øçé*h:Õ?¾Ë—’n„x Þ„‹áϤƒÊK´?³ìbn­îòÖä•Ï„qR(¢D.ã«[‰ÿTä¢ÂÞÕÝŸˆÜ‘ß­î"÷ŸDÎ8‹ìö€­5]µœþt ü¸óWçÇ>Ëpú.óŸµúqŸE–}-O·|òðÒrÿ¿¹P^óµe½ótl´]äk«78RÔF4ïòsÐm¢Hõ$òŸŸ ›ÈMQ¤gÓ¯Î-·‹|mõãÞCdøžn±©Ì¦ô£B"ÿùá°‰<¾”tî¹MÎ?þéO-^ÜÕÞ<”EQ ,ýéÁ°IÆ‹¿þ±ãWÏç.{ yoõÓ.C™D’–¼*‚²{,jÕºÈz0ì"Û†ìøÕù_í²{«¿Úe™ºŠ%rR$w? ‘ÿo†ë©”ÿj—Ý[ýÕ.‹ Y,µ¤­Rî"çGäôù?Ÿ_¿ÿÅIõÛÇÏÿöjøí/úǾ‰Ÿÿô‘Á±Ïz;¥¬póý¯?™¶_û‹ï‡LÿñÏûoü¿Ù›ÿ€Õ÷¼úKÁ5 CO ËŒ$Å0Ú··?Qáõº2cäH6å°(Ózúw^ž” (´Ë÷” ¤Pb¹"í‰ü®î¤öø#£E1Ò$÷v¨}°(=’{ô=opâÜÚg\6·1ë•sôŸH ·÷%HÆ7ù£ä¯“û;Äæoí¯­¸oà~ö‡´‰¬±›üì`^…Ô„cü¤{PVQò©¾½ù®þ­ûcú6ñé߆.ŸŸ–Ÿ(¹ÛpôQAël‚—4­È»_ )³ª’¢(ª;í¥’5ô@î¸í8˪ðˆ:ùx ¹çB¡çG3†þ«ÕwÑÈA’c86sž¸‹q†öÕ^#äÄh^6.8`{|–[ûJqîlÝVf¼õ/pÓs¾‰Oáˆ- áÔz=ǦmþÔÈ4 gšˆ.­}“þ)¯XEý[û¾@èƒÞ}G÷]ÂÛ5Ë{|Þ>{sÁ©ÝÈÒ<‡ns\óPÝÑüÐüÖù{æ>ß²\f~û{å|¾u÷±­¼-esOˆ×~ŠÌ3eP­†ÇÇLú_ʦ€ë{'õa´må›%Ñ*hþ=;%¦°üKV€7Šâ¥f…Qˆ9×çD.­ ÷¶lÀl%é;Îy¢ÓÝ¡Hà´[{2àÛMµl{÷Ôš‘*5{ñÏßew /ûyü±Jc%ß•œ½ýwÝ ÈËàʧ¯ƒÜ KÙ³Æ[{r5Kžè÷[ÿ ïJDH;åçÐ¥Gý6|rMÉ.³_h7õmíõoýÓ·É¿Íý{ôÛÊ9´÷^y[ª€¤ðiÀ[’3dqÛ-hç/u,©?Qu;ŽA’Õq\ØcpÇÙjFµÝ6­aô’¦Ÿ6%•–Ê*ÀÏZfñöí—þ Òé¶´§­¥É¨}ì‰øŸízŠƒà]Ò: ÷öÖ-»NuE½ôO&\€U@ØN§üdÒQ› Þ¤VÚ6~’¤É®3¨ý[}$òÙmn'Nñ¹êAçU8ê—öÝÌÏ ’³_·Gÿ=IþªÌ‹üøE©X+ú2üÎÊ,@Þ¤'©à¥¾­ù®ý­÷cö6éÙßF®žß~žª-CvÖÑçÈ“Ÿ8+• Wp¢-|}§fÆÆ”E%YÈ=†””D:}8ÖYÍ4†K†Â' §"ö2ጾÒ` ÃÎ.$áè@ÂŽ¨ËÔ¸yË ÿKà:´¡XE"´µ×4my†ÙoÃT¤=5´›ú¶ö‡úßýŸÓ÷–ÿœý÷øÏÕóÓêÛOU{íŠPkPÖZ|ôàí6(+åµ,$Å$úTÊŠ{8ÑJQ¹º€ƒÍžà£…íö4Uá TúwvÖLŽ\Îþ’¹&b|áÊiìAørnÎã¼ š4âþðœHž™œåÒœ‚4“›§C¼õÃ!M½¹pßdÿ-·ýxì³Æå%øcÜQ€ãMáC}Ý´I—'+ÙDNî#P.|/ž­v´·5cGo ëÿë\o`$¯ÀƒöSrx’À€¦>¡ÿà»Ùšö oÎöþÖÛÙþ­÷³û÷´ÒoÓþ±~[5‡öÞkn?KíÍFˆ`ýê]f;%—åw=Ù̬--\Ü<ÙJÕ«Æx²qIUÁ*alRqüTZO:"?¼éÄLHBYá÷‰ç´^”n/Á-øaõúõçv*_Ùxv…˜Æ­½ Ël+TãÞœ­’Ä‹Éj Aœn»üûžÉûû´­uÏ…²$ù#ÏöÜ»~ À¥˜¤:T‡á©ŽxË/÷“Ù-0 _†ŸÁ᥊Z/£S}[ó]û[ïçì½¥?gÿ=úsõü°øä‹B€ Ú.€ÌÁC |³¸µ< Î ©&›ˆ©?“CƒÊ°‘Ÿ0cì¡ÛqX„²<P¼¡|Dҹ뺺ȣ® …ŒCi#à˜5_ÓÓ„A𙚃;Ù¾n#z½ñÑœÔÑÀ1Ò¾*¯î³P̸ï¥ßħ`¢6 ¯î«k~‚ÝCù™Þ—ú¨6 ÷ÅÌ`/\Pÿ"È~ÊŠ9ÚƒP¨Á’ÑzôŸ“äÇ÷«í7H¡àS|õçøqƒ˜q@Yó̧úöæ»ö÷î÷ÙÛÅßgþ¾z~\}ûMO\´¡iç{“®¼<.‘ÙK܉܂ÁoY ÉP\`ßÖ'nˆ„Aié؉L­ÞËWÜÅ®‘D§P†tf "iE`=0zb²ÝghrùlˆL˜v1ãr*íÒöâ¼´æY”½„ýNÚz7ÒJM[»H[ C£]²{l¶ÑãV˜*_¾R6íñ°SGÄڷᤰ¥˜ý¼µ‡ÛÓ¬ƒÙ!%ù?¬ýÉŽv;Ò¥Îý*|¨š|bßL R H@I?PPj€B YÝ~Ù³ŒÛ?ß$ãU™ˆ?ÎÙΗFcg´f­KÿSò÷ÑÀù=Ň³$2Ùv§ß†oF¬MñÅýRÞ»õ©úWçç̽e?gþ=öså|Zy:F¡õ!‚§R5e}BƒFuDöS0ë„{B¸fŒÖlò eò‚dˆW"ˆïšïö޳åbG½+‘ý n&ϼ°ÙéTÍ Á¯ð]*)ˆøsÀìZMþ¤êµ'‡œê•aJõ-¹ ·ö {Ьn8CnýóYŠÐhÚM~’‰•³Öõb{ø%ÊÔcþäyëoÀ³Éoe/æÉÅ™ˆ‘2ò­=ôç@SsgÿYòƒ¥,`·]~ð#nõ ·ò .nÑ=~èoo¿ë]þ}þ÷ñïëçãúÛ-RP5mi‹kam¡a·R!mŸÉNp@µç‚ê¢>b¬CV‰"…Ws NÐ.Ù4•|óFŦr3Ág§ì|êõøÅg›`\÷E'Ó2ï½µRÛ9Ô YÕ×@±iNIu´¦‰Š¦¦¸uŽ"ÀøËExÊ*á*™žökì^aç®MÝüKw$Kšù€=ét^,ôˆßVN«—ö¤f\„ú´^ú·ï;¶‚£pxwùñMôªº¨Q/ã–þ&uqÑßÞ~Óþ»ûcîÞÒŸSÿý¹r>-<7GyµR·ZwB;“±÷“óbâÌH%.¾]8åAJ•=Ñ1w ‡É9.î5@\³jXw³‘w® p¸±+_oÞ¤œlf_Z¹ýª9$9b57ÊM¾ËˆÔ$ÜÑ^lÍàoS¿pv¯|s°gwWú&=Ï:¹Ñã=€±½‘®öoå‰u„2ª;tÍQ`HÑiì—ööݾöª²õKÿ%"~iY—È.QÑ ‚ø~¡è¾¥6Ä{±«ok¨ëÿ˜¾Mþcö·ñŸ«çÃâ;ÜN&‹ªl•»F¨Í<ȘÿÈEÐIÈÁg¢Ï,8 …å¢PØ©sÑç@Æ)aƒ'Åz|Uî|!°®ªÖÏO‡øÔ”)÷+—o':ØÜƒ/qÂØ~¥j­s[ZÝÍê£=EåXÒáѽw÷±ÓN=ü óÞ>%ÕeI¾‡+(ËE>É'õ&†ƒ¢°ft\7 Š‰¦ Ÿ­©Þ·³[›àëÒu‘à`‹Ë³ø–\ß›jõü~j°¨Hú­¸³ý®ø­ÿmâùyßF¿-›C{ïUÇ­â(‹v_•¹gpú"/°Uþóm»úÀŒc˜NŽ”ÀÉp¨6¾ó(çßy?Ä2l¸B„§Ú u¥ªâJ@3'•™T´)µi¨ªÏNÄjoQhŠÚ“Gì(ª ÄufUñ·æ…(GÞz¿uŸAåLfçWùsñ“ħÀSQžcø <Ús‚y¨ý¦><°‰ð¦V{{ BÝ}^Úw@¿àÓÔÞ8û–&B/ =åÇ0Xžémüãîäñ/êÛšÚߺ?foÿ˜ýmøÇêù´útÁSÞf•P—Lœö¦e¹ëqÝÆ Cq¡`×äaª2â¶©ÕÇ„ Ĩƒ»ÜqÝÚÊ"9ïO\ù\ÔžtðNø7&Ów (,úÑ„Þ]À=ð07õ°#Ÿí½wÀ¬ìWÜ»{Ì·™¦­œÒ{1®M²ÕÍÞ×èeâTÁþ¿våñ™«¯§1ü‚Ô³'b¿ñl:›Wèíì‡Ë6Þzožg—lã]ø&àn¢ëi\†ŽqÓöÝ¢ˆØ4÷j~Ñü«÷Ë̽¤¿Ìükð—•óiåimøHTÖÛª×n˜y3Ú•× 4ZW­6^{£ È}­@6³íæpvÞö^ƒÙw™/°¢šùË*lof-Âwù˜/v®›ÁýGŽìhó—ùb§=ŸBÞ±<Ù1B3í®æ½}'÷ ß]qWõÖ#øT„ÉäžîM~¢|¼ÖCÊî)߯ßüòÍ¡9B®¾¦R~ïî©'³·€àT¼5§8ÕD 9ÈQtß$þ˜ª½ˆ™ àw£ÄÛèáÂI”Hr×_´÷n~(ÿÝû9yoéÏÉ þ\;–ÞPI&¿z ? 2#”)Œ|{Þ²qú÷´œºv„ÛRwã/Â× µšŽ`ü žI,_G°Ñ\!I#¾4€ ÊãlG¡ÖÒx° áÿP^ñ ø1P°·ÖøÃÍV$i¤Ü:Bá‹m1¹“¯CðuË_¿=(bˆnØtÈ"œ“Kf"c&uÆ[{.ìaJãæÙ‘üölh=^äOЫà8jà1|‚q¤pÊÍ‹ú¶æoÝï}¿&îû-ú×9ïûÐ_Ëæû­¹¯mÕí¯#3¼IÉšæ1jð «u–jV½@h›=?‹>wÛƒBj_côwð÷ayã»àº½•–É(Ô®|é¼ íç Fo¾Ä3VTT‘ÌUFî%¡mª=Þ8(C’hiíÝGÍ8°^£°µÏWÁ ‘œÍrï?sÖ€ô˜ì}—ß¾#?àn¾Ê¶ñgò-àTA•â»úì;‘eàf<ª.%™°"Îæ¶É¦6XÒ·Þ'ÒÛá”»zJ–â ¼ÓáS9G´s©BSwÑÞ»ý©ýwÿçì½Ä?'ÿ5øsí|XzûIj‡6Y0©ŽøLçlÕ2-0½„iÆ·À”¬„N-p¬CüÔÊ{Ïý%ãžž&£ûR“bÿ‘;¤‹½/ô¶¼‰ÄóÜ[ ¦D¬Õ-¾#,_„“‚N¬FÂëLÚõgSæYbF¦?taÐÒÏ1UKÙ6¬þ½ûgï†ôœƒà¼÷µ2LF3Nxœþlæ)î›ÎzDþLì­<å¤-’'<Áì±ÞšWd“°3Ò­ûH¶3‚#½ˆŸ%>ùP>Õûð)GÂ&8Ô꣜ À#Á©z\ŸS“ôÉ\oímñÀ­;¹õß%?>ÌØnòƒÖD¼(—¥Ÿmüv 6ŸŠÍ›þ¶ö‡ú·þéÛä?¦ÿ±|>-?¥•¢''jö¨€I3«ÂOÑNøÚ@ Ÿˆ:lG«áU­Îlt§òsXŸlrò¨Jåâ4sσJäÃÀ&éïZûN’76|r+¢CäSBôlÞ*œ €‚ä•J,ïÖz6ìÖž‹JoØœ„Òº÷ÏE‡µ$hö‹ü£K~»¦£g#oã¹Øìbrª|‚Þê¦'Aðk¾ÂÍ‘íj#æ[k¦$69¡.½SñfFNòr“žk@ºŸkú=z îLs` ¤›öÞíOí¿û?gï-ÿ9ûïñŸ«çÃâs§L9vúzΔP~lƒ™}KªÊ?Ú?¢¤ÙÝŸÀ¢æ{r[g-¢ÊÅ¡;íàmÅÌ*ORƒ{=2W`›å¯Ï%Q±2ª;MLlS×ß³>œ(Åù™I¹±k'z¢úÞæB’ˆsëåÒyÁÇ1~r“½HöŒ•×Ññ: ’ú)oö©:´ð]¯­»Ãåq×L O2ΑSº÷Ú'ôu€‰üËDÆ%n ñœS5W’c2='v\ pÆBÑmzšËùU¸LîùµïvZ\Ý'D€XÌlOQkpR阖Ï&ÁàÞ:mkÞœÙxzyé\Ú”&Öú¤'ÿˆ.–+c§Ý½Ozé¯q“ÇQRCÌO5ð_µ}¹Ë’«¸ÌÈ w¬ìÂ&?ÚC[4G©½ç Ñ' ÂýdE@g ¹½þåŸÉ˜cK=Ôv4ßÔþµ÷¾ÍÚ&ü1ë_ûà·Eóýy͵upÚ¥_ÈbóȇÂm.‘ óŠ÷ˆÈ µV x<ÏHy ™ÍÓz¨ønl½7Àè´S»r1è;þ»§>¬’â|PWÊ(ÜÙ$k®ôFJ^  =UO=(Ä„V-·öéI 61m=—¶þíšêú6ãMþ ùÁìxjã^Ç,ήq1¬×ÖK}öš Uqðþ<·&…{vKÖtk?á?°c¢þ³{[[Â'1•ëÞ¥·ïƒ’ÎLÅÊeôL jgñ¢½½ý®ý½ÿcö6ñÙ߆¬žO«o?KAmûtÑüØ%Hú³É:¤Xì5˜qL63Á§¾Û†€µŠÎÁ&¢MžÖø’ݱ*‡Á]ÈD¸íçªþÎŃ7‡|]ËBÁÉcFŠd·®æÉì';BDòS(£¤ÒO”Üšƒu‘sÈ~eî½G‚pÉÌÂâAÀ]x x`r#ÙWí·Á‚€ˆËë³+|3;rìyÜ|ôƒ€¼½¦É̼µ‡ö¾çz½õ?%?h6Û‡ü1C<-Hº÷ø#$àz4¥êÛÛêßú?fo“ŸümøÇÚù´öއ=WDèFlÎ÷e»ÇÞ!¶ÒËc™â2Elo¤°¶{L?9H¨~.}'~;MÈÑëÐ~òá€_o¢Óûd¼ Q4ÙÓÛù´lžìÿ§žŒw»N̸I”ð‚Jlz'6Ÿ{¾µÇÒïS(óÒÔ– Ùy‘_–¾©½âiÌÓ_ã7KßΣIâSz ¬_꼫â²ÊÎX,û¬‹´» BbkŽyp¹QñÒ;Ö!õ ºH_E)CEžrÑcœÚRš _”·7ß•¿uLÞ&þ9ùïÑŸ‹çÓâÓà §.*A|Û_Rz#N ™¤øä"˜ØÂ Çé$ú=…W"Є^ÃŒ*«\•ÝíÎg¨ìˆí„šF$Bm\Ý0#‹‰à³Ýà®Á‡Ô–éMñ¶* ¨|D,¬±×joÍÛŸ`ÿ;&/Y;{§hÇÞöBù:e/’=BÚø\¿_àÃ=…ç­6kN¨«(±ß´GÙh=Yg{[õ„®qX·[÷CÂÛKIÖSx`b)b‡¸ä6x±NÞÿX:§î¶ö‡î·þ©Ûä?¦~ÿ±pÞú{-;÷ÜcÛ%É1† 8ײDm'5H]TÁèÜ¥‚:ƒk9,†‚}@QË–±FÁŒ?•¸!ÈÌôREž­žÄ ú:Æ‘i=zk¡ŒÚ,¿}Wƒ-@Y’ ÚXR–Y¾·ç˜È-@ Poý³ñMÕéÇaò–_Äk`ÏÌõ¬ØÆ¨·)è„…GòVŸˆßìŸàNÈ3ŠÉùh¬ìw&íÁ jÏÑw4Pbè‡ìŽ€Ñ3ØHöÔø:ÇN‡B•µ§qèîl¿ë~ïÿ=w»øÇÔÿú¶n¾?-»¯KÜ'ÙnBÓq¯+ðÙE&ØgðD󤂌6<À¬Z6€«¢»O”~{êùÓ³'ˆ{x1 e-Àzy¶íÊÀcî܉DqL„Zúr¹ÛÕ<Ìy¨P¹)ƒÏ·öö2dÃçêÕå[ïä5»™Zdû+»Hq:„¤¦§ùà¾ÆJ´2*r{ju§öv”pUÍú '6jWliýímÿÁ. ]¿õ?$=`{">ÜÅk(þ`¦cìÃýŸ^ÆCugóCõ[ïï©;¥?f~ý{åœÚ{­¼÷ž™à뀣ŠRkòiÏ2ÍpŠŒRk0ýì  ß–1†'Jaûc r%ë™áDRÆ‹j­ "/H”¬óƒ„-³ï’®’îß2濳H'Å'?±@¨5¶ßgû&ÌZô*<»¯B -;Ýë&=)1HÅζ^uúÅôèÎÉ]ydMŒadz±æb§hLžé£9V„™f²ÎÞ«„‡Õ#΋ðÔ€ "Q±cè"gìÐÜÞ|×üÞû>s›ôçÌ¿®œO+O·¼€º©‹Üe³:¬¨±r8 .W\[<yvUØ>Z-$¹òÊÓ‚jxkñ&öår O?ÂÊ3ž\Œø¸l˃yI•…êÀ&y¡ö4ìËãƒMG×BCŠ`X¥Ö=l¸·ox÷HÝõ$›½{{j¥ÌAç—»ôb1 «&ú½G¯‹Î쥔)Ë[›_Úã{àå1êÔ!o®Q”†ûûÖž*·LŽÐìóÒ?QRû}Îõ”ž)?oËmÕ¾ÆnŸ+Y dŽ‹êöæ»ê·Î÷™Ûeßgþ=öså|\yûMï5P…\Òê`¨™Ç¾YLž+Š+.Ë«˜Iª¦ÞÁŒ[ÐÕ(\‘šF³ ‡°Vy·DòŽ~`dìç/5gxâ¹Ç £i²´î·9„äj·.¼`O‘ἄ"Y¢8°Àظλu¢ÜÌD¥»³cë<±âñPWGìÞ…  ?ma ncOT–V{¥/¦Ùu—(Lr+=Å80 . ˆ\g{øÊÊf¹õ_%?Dm?ä)Yk¾‚ÜwŽß^"tCo¾èok¿iëý=ußoá¿.3ÿü{á|¿u÷µ­;{bØJŸ5û<º ùÊ%š1 À€ÏÕÎï ¹Ù“?†3ïKðï‚ì2cº=ùg.SŽ?pÕ€ÖúÄq¼K4ÝgôB™~²Í¡Ö„ +’á*p0ËÞÞLÖÀ`(é¾táb·«~.X˜]z´7Üþæ±Ã^£'­Ù6<Œ†Þ~Óž™¶¬b£nj¹gÈ”¸÷KûJ-îm[.ýÒŸ¬Ò:.òWxí²`Hf¿ Ÿ¤³M:Çn»¨oo¿«ïŸ¾]þ}ö÷ñ«çÓêÛ¡ ª^Ñ~ˆžHî£øþøÄ¨Gt@í¨ì-³´æ*îõ'Á|:òpR2BÈÕK:›‹µà€ÞQÙ[öÎ,Å…í€ôË\RÕuTöÖ ¦Ë+#Í‘.P<({ ºêÐâ¥}PîœUcí[ÿA©wTd.p…Mþ Ô=AÖyaÇ6þ Ô¿Ii­/–MA©ƒÔ1òt´™â!jŸí™]Û2ŹÏþ9Yé¡Bô>å·Ü.ÖÖˆ·ñãÚz{0Dßê{7?Õÿîþœ¾·øçô¿‡.ŸOËï@n´¹63ƒB´ó\!<òô‘D²Oj_Ø}죉³Ëý¾hK<ûò…²iØü·³¨š."¶WùÉ·A”Bj'>ÐÝÙ/<ø D`/&gq%m²xbäÑ^vqcÎêÆÑÖ=äáÄ‹êm¾‰ºÄO·å%ù=|ñÆÛZhÐ+Ȱ}«Ï¾Cpl?1ʉ=W"êrkŸy´QÕƒŸúÒ?@Êü%ˆæOùÁ¡úúðr?8$^YÓw>Õ·5?´¿uÌÞ&þ1ûÛðÕóqõù»©˜fF©^¯;bc[g)€Äì¼0¾öÁÄX™­Ö#H…£‰ä9‚ŸÈÕ<¨!|5’áQê¯í¤·CkwØI7±»ƒªÇ!T3{I ×ëëHªõNÓ)¸P€/׳uÿcš¤ö¦¹É³õM‚T—»[L¿EWé:U

    µu[U6è[j ¾0€¤–IcÛ ß“ƒ.4ò(£ˆeÒÒ^qš’Õ(ÿ𣃈ÕbUÅÚÌp—»w´–oíËX€qÈ·î…‰Ù©YH7éÖ ?ú‹z}úCM\s؆Sy rŸ”ê€Ky¯óÒ¶Hqš„ué½Iø<Ú,Ùí–Ñ”:/#ï<˜í9«àhÅmÍÅ¿;?æm“ý˜÷mèǺù´îS4*²G9Æ÷TþôÖ:>Ñ«Jq€L¹ä(n·Of?ÜD°9ÿž©=´ëÍ·¡!¬ë­©Š°Å@Bo?ÖU¶¨ýJ¬ª·96˜Ý ^hØï“Z·à‹^íqŽ åo@°vö/ß g„=šC<åÇ7ƒü ^ù)ø>f=µÎ}è:ú×®>¾wƒË“ìng8äD¶Áò¸5üâzÅžd¯T)©öÿ-»¾ÛÍRÈýý:GÞá=²¿·…桹wëSïï¾÷yû~IþuNûkÜûªù~«ík[uO¹45·Ô›Þ~9ÃSó*WÂlÃö*ŽNn¶‘B„k]PÐ>šÙ×%éœä‡‡"”L\!ë{¤4ËôõSndÿÓö­+`&0WËpiÜ—Lçz pRüäÏýjö‹õˆXgÿÂ>¨œ 6#ý”_àó “=‡Ÿ}ñkü|Ç!ØÅÑ´Öõ/ýñÝþ/ÉÆ‹O£ v¢Âä/ÍñÚIÆEºôN=åMüf¼Hß;”LÈ—Á+uÓ·S,Ï‹ò^ÍOÝ¿{?çî%ü9õ¯¡_VΧ•·¿Ž `—óö÷Àe'‚k&ð\”6™ [*°UÈø8št2EÇìé½®= ©Ì(úµÝ6`§m¡¥bW ¿ÈVWw‰ —‡’& H9RB)žL' êê·æ$‘Ø«¼…ê¹o{ï¸P¬s[—nÜïÒGIŸg*^1¹žR {÷Âòö›òL©ÓŽ;é=3ø2Ò‹³’¡Ïæöò öXS¬|GïCÒg æâMz{ AÊ 0ó¼^É¥7ímíwåoÝ¿¦îû%ü×eâßC-›ï·â¾¶UwÜðäÀh_úŽ·!UÖ?˜ƒ;®-¾°¦›÷Vx áÚ"¯z†*g;Ôøð\Øã±7üÊ‘7’ãi;OE$aÁtë…Ÿ,.0o¯7%dµë{ÀG‰C#ÝÚ“ßcF¹ÙùmÞú'?hR°Ó¼`h—Ÿü¢{MÏ#í5~ò“: Ãé¡“ù­¾@z“‚+£<Ϭ´²êSØùjnhÂ|6U-Ýz/’~RP”oÒÛ²¿†¢~¹ªÞ£ï¼Û¨™i\”·7ß•¿w¿OÞ.þ>ùûèÅóiñ0¢C[´“¡ê¶kªÑ´‚\A® =dîf:¤'ÓÈÌŸI-_]„.v $],»R‰jê{Œ±ðÔ"D!aÒl7üå Àz‚CÆ’p9ì©n|!uÚšÂb©~˜ïí NT³ãíý.ÝããÄÓåMzÞOø jhOžÕkô $l›Œ1ÒS˜öÒ^'Ú½U}»üÇìoã?VϧÕw'üDâ`ö"_ÈÏ€–št¸i`æ1® 6ãÜ(c%ÈžàÆßÚÐx"[_þDàÎ&Át–yk_5àÊëfÞú«7bŠù&¾-Wp¼  œ·áÛå ?˜éA°¹‡úÞíOõ¿º?gï-ý>÷ﱟ+çÓÊ;lRêϬJâr&DúrâË·˜(¦tOW´‹†²Ë'¯Áv©„mLR»Ý•¿µò(ó³7f‘ÿ5’æÖFªOÕ ¥AdÎöÇ$e~yáíŒTO÷ò‘ÃXMÝŽ¦ñn//!‘w»ÀÝAùî«iàb:åw?R£L·,?üküXe@S±ªŽ^úS^Äi$v_)ªb¨P¨Œ—ö<}IŒyùg·þ»ä§ˆW¦‡ü¬|;­ÇrLŒÝ)ßô÷jÑÿ«ÿËü½ä¿Ìÿkü—õóiý=x‚>Ãïá©‹Ðãê„K…l€@ÖõÔÆͤ™o)a˜°2¼IÌöü}Ý4à¥À›íÕS=ó†`Åì3?Uqº$³Ÿ†WÛ +[7<3 |ÚÖïžDå|™\ËÖœ;\{ª¶9»Q€ 9ýÐÐüL‰Ÿƒªmþu _D‰ˆëÈ Íoõ â ±(Áò±É€OµGûI½“½$b_ú¯Š €ÓÅYvÊo¶ñ•évŽß¾'êØZ +±ë¥¾½ù®ý­ûsöÞ⟳ÿþ¹z>­¾ýÕT9ç+fv\¤1”Ž’f½xBx©ˆ­×åö³t.ª‹Bz¼Ñòyã4ã†`È’ ½œ¢Ó¨4˜£qþö̦¹(g€^7k(—…7¨c]–Â5ùûº’ ÑÅÞœ:AÒ\D{ï0dã=Ë]¹K.T·Ÿ™ú=øàpqé=j/åáÅ.ä/¢Jàฉ+âhŸ=“%ªpíÒ‘ü]Ÿùí; «öÑÜã·ïd:àˆ¯õíÍ7íï½os· ¿Oý>ømå|\x¬OTìsÊãcþŠÂÍþÇóÅðÓõÞ9#Ñ‚X=À)(^?È@aƒ¶fð"þ+gËâ­KŒçgu€F8”Äå æÄãxâ¬ÕeKÇN²ÅpNHšhÞLãÖ2^‚6ƒýÖ½ÝêP"1ª›øIâ‡ÑÀ>|䱦ÇÌy©2bâ 9Æ'ÚßíWíªí-ÞÚb2Ô¨ªöäì¿J~ˆMKºÉK8öéT!Ü9~°£¹X™ðC{{ë]ù{ïûäíÒ“¿þX<ŸŸ¿–Xð_œxóš RíýP)=uWügؾ]¤“€¯VVê;( vgÁáßÍ šì5¿å´]qnñæAz éÌÅoÙÌ)€CËô6Ji‚øP½½]ß@¦‘í!²7ªºú螺¾·¯ÄÉí-YVðÞ¡\.Úì ¬»ü•˜a¡‰ì£7uÛ:åIà —»ö¬3³¸l€Õ³¢ÍM*± Ôs¶Çmž¡•©cœ½+‰´×y“è ˜ßÆ>Éqƒr³À"sênkè~ëÿ˜»Múcî·ÑkçÓÚ;€’’F”× ˜X}€)-ÞºÄïo}k­¯¦<¬a¶L¨É¿Û#Nê7À-º¯¡€,£’äàí¸7”ZÅèüÌ0¯Px0¬`ám 6Ÿ˜zAï½t·§ööÊ ">{5ûÞ?LÁQààž|³ËŸ_…QåÁŸš»Ñ2(Þ~ÓÕœv©Xí³8ŠœžûÖ¾è(!ñ]5*GÿUòÒPæM~S˜-4ð 㸿œcË{‚'rÑßÖ~×ÿÞÿ1›üÇüoã?Öϧõwp.‘wÂÑ”Ëß.ÁŠG‘¬÷¼Š™ dή>ÛôžKA¶Ï‘s„Íñ°¤‡Ò´BôrR…OÁ¶-dÞšÕ`°^–T™ER….hßÉÜmàN~%ìV¸IØu0ºÏê™K{{`/|Û¡K÷ ^Ú¿³Ù®ã"|‘ð”⎇Ñú×Ð 4¿ä£G7˜vÍÁ5J9Z_°ó”CÎI¼[±–³¹Írÿ«9{ÇݪG‰b=§ð•R –f;îÖb¯ñ SØEw[û]÷{ÿÇÜmòSÿÿ¹r>-}›øÇôoÃ?—ϧåwá±ÝÓY¼Ê±Ž]Úô<ü!Å6&x=í§.3Ù+·=ô°U­ª,±ÏJ.Xñ\X›Šûð²Mjäa%wû(ð‚»ïJ¤0.tªí wü©©$ylÌ~k 'PÁ°x oï¼üÑÈÔRËMø,á)_?öÊï±C7ÖHˆˆåáyé¨ »lÉvyìü1ˆ ?ÙÙß·=M‘ÃKÿYò÷jÔ.òÛ¿€ÎÏZ/㧩İrßô··ß´¿w¿ÍÝ.ý>õûè·•óqáéMò’àÕ‰Í× íd9oÈÄ a åéæýHqIš]«£óì®ÊVÅ,ÞWÛäùa§Á›ƒÃx¾øÌKö‡U ¶Y4|³vì¬ð¥úÒ;Häžðò }qYV14\Ú—?‚r!#¹Þú7㨒búÇMþ,ù ;ÎküðPƒÿVÒRð¦>x¬›Òܪ[ƒÒ‚Á¥:ûKûôhm³벦ßý'•AûÑÄj¹ËŸ Ø²‹œ¢ít’—©ñ˜Ïñ¢¿½ý®ÿ½ÿ}þvù÷ùßÇ¿¯ŸOËÏ1Ç&YÛŽƒZÄoGP+EÏ"9Ì—Ê!äkn¤à†îy²éVÉ.Ú(v½™„ϰ޵T“á¥rYŸí…i¶7ä+jÞ¸URöšÈý@L°w^ñ±Èùúov7 mwÒk‚ǘ÷ö¤ƒòð™‹ûhëÞæ*PšÚ¬7铤‡"=À_¯ÑÛ\à3A-UûMw‚N¤}¸ç= h%Á}y´ U!uõKÿ1!>”რæ!?5'$„ØÍûeø‘Йˆ;+u‡úöö»ú÷þ÷éÛåßgÿ±zþýÚó³“H¨ÂQéä…HФ…>YÍvv€¬”½´°’€c¿¾6õ ¶E’û÷È=LEœ|‚¼í* 39­ s\‘ µ'Ã+6ühJ±ï mWF¸PžñâÂí‡ÙïU¼öûÀú¯ÃgkÏ#ÂæŽÓ"ÝúÇ)Hö°½lÓMþ‚üÕ ¦Q0æ×ø³ÇN¦·ßôÇYTås ž!LÍEå/츺´ÏÔ\4Ò3!Ü:ûgÁ“k‰g1^ä‡+”ºÎäœûðYïDíUDá졾­ù®ý½÷}övé÷ÙßG¬žO«ïRPÍDSOx$ȒЗ”²Š@#ɉ_tpIB'--¢jA¨ˆŸß¡ˆÖVÅü(äâÛ^i×Jƽ²|£`c\BCà—Jä{û)ô T;PÓ=…i»0¼3Ò­=é"1^åj{ÿ8YØ×)åy‘u+v½‡·ñªQªRéynüÖŸ}'•ˆì´’ç¼R”nÍ+YÄpÎo¹tß$~%üSoâ÷?n±¶îÕ9üì,Þw¸ã.êÛÚêßú?¦ï-ÿ9ýïñŸËçÓòóð’zf§Ú ;6:Ô¢@Û{ÓÃKx0 qµËÀó¡øm)-˜`Sp¨ÀaÏ7ÊW¯…Pøl’nDÎetž?»i¬+ù‰Pd—£M'…ÉÊž±=Á?3­›àØèfXOœ~åÞ×’0à’{%·îIÇä…’)Á¹ˆ/ç@SÚH|*"Ÿ¢¿Šº´Üÿu¨æ‚Ð8nJ¤¡9ú¸µÇƒQ8ú·þ•·Þ¼Òü"¿Í(I¤ÙãL;Æoß1{±áÂßÕ·7?´ÿîþœ½·øç쿇®žO«ïÈxâàöâ…EÚó¼+tF…ŒÒ £²w:v:¼P ×'£ËFíÛÊc'Gú'NNÔJJå3`ј, ºiÕ~Pž ¹)ñ~ã}Âô<Öm96O\„7>ÿE+üi,¼Îafáb9ûWÛiÃëéùüWt ":ÌCãÉåø=tÀAÕ .íÉÕø«:µð!ˆ×rE©íÌh€¡ÖqkŸe¢0Æ­ÿ"ñ1YD³ËϹˆm€µ>wTd?¨ý¿t÷j¼)þëì|›¸MøcÞ¿öÁoëæûóº{2²^Iô&Dñ½:-•èdC±C§ô€¬:¨úµ?K•*j6WúH³sƒ¨Øµ”ϰ'á"WÅ®«ö0òfϸP©0 ÑêäI–’ûq® ˆ }aNnÑìíù$8àº?f÷þ#´”Ÿd¯7ù£ä”&úÆÚÆÏb2IiöK}œY”˜š]ÕÖêç„nÀ×_šW`jæŒÍ¦Žîí;âb×ãE|™àA¯@î£mÀS6*Œ‡ö¶æ»ò÷Þ÷ÉÛ¥?&ÿ=øcí|XzZ›fÎf<ü¢Í“§¢ŽVUæï„6ä³wJ «ü„ÔOàŸÑqü<ÇLKÝã ±JTì1Œöz¥<Òý€Ìð€ôöL~¦€›·JîoNvŽ9º:~¹Îü¾ ÀAF\èì[óðG–~]ù [çx¾ýé™—ì_"ÒI%ñ‡Þ{ì‘jᮂݴ^U§æƒ-U á%¢–‰L§³y²—ʼnӞЗÞí»²ín噸 Ÿ†ˆl©_ÇЩ‘P©ÒœvÅÍwÅo½oóvHÌû6ømÝÊ{¯;?5ÓŒqªÒ¼qàè‡ÀM™#¸“¹ ¨u×w¬z{ñ¦•ß"Pˆ„F¾›Ñ”nìïÀÉÃLí©W¸½ríQÞ`†~Êd©\£9ÀD#°hïX¯ÔÉ œ$µ”†³šíÎ+·öl€ã‘®à»x'O£Ã—¿åç{R½dqËí=|å…Jú*ôù­=>sÂÐÝbaÏðvÃSó­9àÐ%O/óß{/^@5å&<$·`,ÖØóeð$ÏÚœäΑ.ÊÛÛïÊ÷NÞ[üsòßÿ,žkO‹YìpýÄ™jÏ­N¥(1Ðñx¸¿È<û4‚Ty,†•Nôæ^GI×0Ìn¡¶ÒE$)jO˜‘߯Zöt…f÷À¤òB>HÒEìh“=]dòî%¼ÞÚãÀN€·v'ØûÏÔ‘ÙWŠxoò'ÉËoy|€¯ñSC©°|ñt‰]¤éuÁ~,úüwx›Ç­=é@#”Ç­Ò5Èâæ&?Oy8º‚êÏñ“.ਹßô·µßõ¿÷Ìß&ÿ1ÿÛøõóiýùÅÎ{ÃN‡›´À~0A:ÀÒ²:sÇof×À„Œô.ù6àZGÛ…Œ }§ˆ*Èéö/•òcB÷JP@PC ÀpîóL©‹,øVe‰ç•«ÁÛÃI£’Ø”ŒR[jwZé½½-€ ¶Õeµïý㨢‚¼OMÜŧNÌn¨ÄÿSû÷ð)O€~åŸêõ<4ÖÊ䪱õ‘Æ¥=„Kì@ˆqÆ¥ÿ©%Î@)\ä·ïp$òÒ/ã2~È|!äÁÙ/úÛÛïúßûßço—Ÿþ÷ðÏÕóiõéõàLcåáá¥&îHúþp·ÓPÒ½&9Á¸Rÿƒ÷EÅl£Ýk’G~GÊ„*€l”t…Eük&¼0´'Ú®ÙDÞ*)Ê ‰U7Æú$¸Ã›ØüÔ­ÞÓ­9>”Ÿd!íÝ\R“ ±Þ/â7¥O%LöðÐêþ>ô•xxŠðáþµk,É@l\xr¸ÀŸ3‰ëãÖ\üfªEù%ÎîR ·|Œ§øöä Gav¯ø=†/Ò¬Z¥xÑÞÖüPþÖý1yoñÏÉÿ\<Öž›¡ _Ú‹ŠDÚ¥F->úýÇñ‘1,"¹•þ:ÍôXž:¡ŒG n6ÿNR!¨çqY2T»Ïê¤ÎšIL\_“é׿à|†]¯Éî\ß íu)÷j·ÁØ>¯-»xoºoæmºÀ·ÞŠ é4®e¦ý•ýKÕÜä‹™•6Šßc¹‹rp²"ÞÚ¿ºûRµ8üÔ)¬ÉQN‚Ü=‰9óho6¶Ý±ƒ×x¿õ»’÷²ü‡»ü<žþ¶ÐÀ›9†ï̱ )ªtæPßÞþPÿÖÿ>{oñ©~[9‡öÞ+ïtÂí \v_H^˜;õ?z¯ п^s‹šÜ¬òºÂ^…t è³ý;|(à¯äç½ÖÁxC«^s¾hožl¯Zà}XüvùR,æŒB€®.Ó€ÇözEûÉ Kg{$d‘Þǘgÿª—´K”"'ô{˯zËÒNá ûý¿ê5Íöo¶îOð­?Õ{V1å®ç.x²f ‚œ—æäáMè®kJ·î«ÄÏûº‰ß€H8–rº _ìÚ¶yˆÜÔ÷jQÿ«ÿËô½ä¿Lÿkü—åóiù=0÷!ƒË逈Un3jWÌ}Ók%7½XAWâ‰fZôs`9˜Qäù›„üfËŸÀfÉähÉqÆç$·YŠŠsÂ+÷‹O@–ÛLP—~”UPýïÇIÇo&¯ç­½ütø…sÌ·þå”&e(¸‹øYâÛ„¥üTñ½†Sº<(£ÿ:ÕÝ>[Jå#E AãG{Ü”6£Xq^ú¯IòSP<æE~ ÕR<.㧈”ÔÓ/úÛÛïúßûßço—›þ}øÇêù´úv{t(ûlbò-ÆHxîDm§¼ÐÁ\âwÁÛ¥ïU¯¿Pè%1ƒºS†^7c·&c³¥ º™…SßU 0p§›u&Š Á3<Û[C»Ÿ™œ’ yÁ§t·Çöæ™u[ƒåÖ;;5 ‡â%‡»ôIÒG’š"a<sC1hOÜ•ñzrN¶ø”ô”Uô'²Ñ½=”ÊÃ^uÁ.ÚréâOxId£»üËâû9Æ?)áãaÞÄ÷sèoo¿©ï~›¼]úcî·ÑïKçÓÊ;Ò—)Pƒ"’âæ…Q&"ªrÝ ufñèé{Ž#°!Ë“d˜j…EOÌa–‰-®âOÄ$,ÔÔgöïqVPÀVö%A“ÌmÕÆé‰ €¬©Öë³VÏÆáX#Næ]Ú“‰\ËÅŸÈ[ÿdòPþ6­¿ãO}– Ò½JÝŽâ‘XúãÁ#aGªAß휯½S<¸Þi¼Àí¾"¼$G1@FŸG2^Úæ\‡ÐNÍŸÖ6¶Q¼ ÉC”ŠùXÃIÌQŠþÆ# ’ˆºµKó.çGí©JØzïäñ˜zpˆä‹ð½Kx€Öåû<ïaÖó©Óý­v‚*èÖ—ü$¼›øšI3(£hxÏáƒðÑö‰Ü©¾wûCû¯ÞßS÷ý–ýëœø÷зuóýVÝ×¶îž~ U½Ë¢â†\RÛÃø?RäR‹jì{ì\'9ö'U"¤jkãa׆¡Fâ¶]èÉ~^ ^õÖœ‚y›™*Û¥{xAb%é+xÚ&>¼"öû‹û=|ûÎ]I »;p6õAkb˜¶îkã@Û Q·³=ð…Ú!œýOÉo†·n§üó»Æ o{k_ÆÏ¾`”(/úÛÚê÷Nß[þsúßã?—ϧåw\ù6vDþ ¸‚uåCçhIXÁÉ/Èë¶G¯è&½ÊŸ,a…æÌ–YW.1KP“¨[‰ºAáßêã©& ©VUωž€êÀ˜WêºØ$8Yâ‹¡‡¤$[›ž$µ·mLÔ—!Þº'ZãùúWø/wɬ9–Oz|P¥ž­Ýä!•—îÔ<> {H\×]'·ÓìÔ‘.ÍD²‰&•=ßz‡‡“HÚSvà˜l%AR¿þåŸg°Ó¿«ln×ÛÙü­÷¯£ó÷¼mÂóþµ}[7ߟׇ›„Ù1A–·ð~áßpþå‚ÍÁÌ^á‰UxG©ö÷x?þUdª.ô½ˆ¤ƒ!-ÿOãun¶`öp?¨l£¤ÇÿD†:>ê«a†ÇnÊ*Ã\þ'È,Brn«•H,}¤[{Ž8ÚìRŸ·þ͘ž”§y“ŸÌI½MAûñ?ý¿"æüµ³?ýkןX’h[W¸ TZ3þ¨/·æ•SFõg‹Žbë^48‰åå¾Ûć‡s·9Æ1|!wkJb¾©ok¨ëÿ˜¾Mþcú_ã¿,ŸOËÏ#öÅN⣶3<ã!ñ8éÙë’Ù2D¸Fw´5ì\‚:~0 ©ÏL¨á¾Ñ[y´Œé³# ?‚<3GwN_y.O/ÑpP*mºÆ—hVa;na îj5›H êŸþKgïÙWœÙOdHÖ[ï ã‹¬‹7`^Œ4׌;áß#Oàxëb¡ï·ÚÔ»OxOmºg±'oæ0¸µW-–-(.Å[ï]ÂWBý&<ÕABò³‡òmð*Æ!rÎzÓÝÖþÐýÖÿ1u›üÇÔoã?VΦ¿ßËîx# Vƒ·Â|Ð|àeÍÃLˆâaR³0hÉ?XÉÊ/”p uå¹Ú´+©PË¥@\cC‡šÃHÊW ¤XÇÃd±#`x¦áÖ\´RÙ̹’Ç­÷@}íèªj»$|"ÎØ×á×ÐÑ%¹‡ãâAPÿ­9åÁ›AVH-Wóz]º\»µ|¢ˆ?¯Ý“O¾’5.ÒÛ÷_€J„v}ƒVT@#ðPÞÞ~WþÞÿ1w›üÇÜ¿Ç.O+o7BK®q¶ºî· ëOfñÛªêK!Á懲w¬ÌðS §;0dV3;Ć2 …¶xnæ·ø$½Gû“·ª]ýO$¬µçk0µ¼Øhç!®”5ǯÖN=Éhæöî[›Y8Ã}¬·Ô/Ñu઱ãb% ½®£Äþ²ˆ—@ŸëMG‘½Zy[- ;’Ò:±¡@ÿÙ^˜6ö`°u×nÝ«ú)€ÅÐúMúÊKà ¨h/£ç%0c‹õ¢»wûS÷ïþÏ™{ËÎü{üûÂÙõ·­» ?XÆ4èžõ !_›ö^8$f7ê~¢gÛi0A‡ªŽwU‰!ÎÖ ›ir`8JqT±Z©ŠÅ'2Øòv‘ºs¬‰ÐsEÏfûnöÍ  zƒ* L.S-,}=Ô[óþG¾Q°—î¡^i#æ–.âö4¨~­mÃçÀ°ã†ZŸßêõ£Z׊/<^TMMáîíEˆ9ÅYoýgÉ?©@où)Ф#Qt?' pXUPw§þöö»ú÷þ÷éÛä?¦ÿ±|>.?' ‹XIç“özNÐŒ#Ãl¤JÐËj@ú°ö\Yö¨°6£. ›E=ÝzY’ŠHO?¸¹ìQJÑÀŠÍq8xÛ  Ö¬®òܘvÛDÊX»ƒ¿)ývp:ÜÚ³@"ÅŒmáoý –JÈ'ïg¿]5£«6?ŒöáœÈ‹Ø¶üÁêoõààÑ¿úCÐ ö„{ûÖÞ[@„~üwôŸ%?¤Ò¦vùñã H(½²ð?~œ,ʸpxÞúÛÛïúßûßço—›þ}øûêù¸úŽÜŒ^â¥vyE¶X'zÛ†„qª@6xÑã¢ûª Zv±ïNüñX$€ù<#J„*†SáÈà÷ðuÙF‚´4d§2‚ [råb–?Tp”…iÏĆ^Kp¼½9• õVÆ­û@äÕËñÞâ+÷"ÂG˜VuÚ{øÊ•§¦V¨CjÿRß#ü1‘¼)µ03¦zko[Õ¥uôoV ò“oÚEþ?™)Ã4Zêeü‚²Ê„°wNýííwõïýÓ÷’ÿ2ý¯ñ_–ϧåwÜP9€);•¨Ó”f î €¬ÿxƜћò|Z¹õ©ˆª±íøýØ×0C§#ô{.‡¹ 5ƒ];öÛ>KZÙ_ëôU°dÊ2[Lúi;=­cß^ÉØÐ"°ìÕŒ±íúp]Á‚Æqs³I)uiæðpeÉiX•7¦@c§X²þ½6^í›ðm9"ìýcöÁ6D¹ïMþ"ù‰Í¬[û=~¬¼ ÛPPëÖü­>XÞtBö&st>àîHkÔùÙ¼QijGè<·î‰ÅØòb<ñ&>΢ˆW_™ÞÇèA½JÔÉ…>oÚ{7?”¿õ~LÞ&ý1ù¯ÁŸkçÃÒ;žøº:öSH‚à=‘wvP»‚€®ÛAL¶5:sãÒ8ª© ‡ðÏ^{)ºÏ-ã«ä6:ÇQ´‡&ž¼8'S¶ÙÀ¤P®Æõ pñcê:häû¬—x×ÈxBûÖÓ¿'È˃åïÞm’B'©¦r‘ž`:¡²íòrü<ƒ)³3»¬ëò—îl‘siOØîÍB~‘IìwižH‰*.—î …›;Û1^.âø> ®äœóeø”ÆQŠb÷µ võmí7åo½S·ILý6ú}å|Zw¬·ësrܧ5áB€¸0·ï¾'ð(…¨‹7²<çc<“cf4åÙ9;k @¨/ú2LÀ)=!©A|`Ù(ýù E$5.-~aˆØsAHí1dôf ¥.ä"3 ©ùÚÙ¾®¹‹~JRõÎMB`îã1Ó~‹ž$z´ÁÆþõ¯sä™¶ÜŸ‚Ÿ—æ°C"È›ó±[ ¡Kˆô[s ˆÈæTvÏ»û•†@I `¹iܤ·’@ î~ïc÷«“dèTÃEw{û·îÏþ÷¹ÛåÏü9þ÷Â9Õ÷Zx;FM+P¤¶}“±À;ñâ¬t¼DVU²Ù1ùì$‡:zlk¥jÞ‚cúÙ“-ÙÍ6½šCû}[>y•Œ’H€Ù³tì;‡€ º²JaÞ3-/©$Ý®“SËá舙•SnÇîÍAFž™ƒ6õ[÷™ja øØÅO¿ÿýsøIyw‡'ýR!pj'`Â\!l …Ÿ4oí‰AµrîÏ[ÿ]YM!«¾á^ã "š·áÛtÁü0r㢽­ù¡üwïÇÜmÂs¿ þX;ŸÖÞÃBþþÊß§ü7›G*j]4!@”á°ŽZ†‰f[±8Ì•2 Æá2ðïÅ1'âxh°ƒš©Co@òX³Í7ì˜+˳„¬â¶¶—}ñ7<¼—ÓöÓÔù§í;ÅéNMð­=©‰‘³TnÝ›:2Ä–õ‡ää%}‘ôT™9ÔÂ>úBôÓßÁ×7åܦ,Õž¼ñIß bj¶ó(ßšƒ{4”R¼ªÑ·î? Î¿·\.Ò+²fkÏԑϱW‚=$òÃ#qQÝÞ|WýÞû>u»ôûÔï£?–·•·¿Þ[]¥'ª& ·r0VA {cv4N3à?âó¾ ïæ'Ûå?á¥V±­÷Íôàs¯+‰”øÒÂCå o§m‡ö¶æ‡ößÝŸ³÷ÿœý÷ðÏÕóiõV)°¬òäÏÅ36(kËÑéåÖ%Å·¹'Ÿ ó¸ôÇ®²¥ñV[¹kÈä:j}ì2V «lO ¿ ê~®¨šÂ%V”½ å«uÆ‚ q(Ž\EzÜ}£Í+â¤^™e[ï¢WÚr“¾HzÂÎÓºøÃ Z}r‡Û¦;{vøÕ\Qt:Å®PH„c¾4ïâ´ š’ÉK÷]ü&q!Ñ!¾àHìœã,Ê—áÛwضgÅ*½¨oo¿iï~›»]úcê·Ñï+çúÛ/|í¹™ØÝ72„¦¦¨üfÊäGÆhÐw¬ïÅKø/‘$* “vF‹ÍQèÍ ÄÔnãÆÝ?p¦/^DÚS隣­§‘ܽx¬=Ø«'x–ÚC!@úåx„ªj%ø2oíÑ\nhá nýGÊ€#ÈÃùã6ù!!4gïÍlã‡]‡ /ì•1›þì;ÅÀ8Í4Mönµ3&„yky%›ø˜\ú½âG¯j¾‹¤‹Án€ÖÏá+‡;QŸ*8¦C}{û]ýïîÙÛ¤?fý±z>®>¿îA¤0ƒÁì /@ᓉkãy"J¶ö¢Ã X”šö`|‚2öVµó߬¶®˜V 2%ƒæ êØÏCx®Â'Á£™ÇÂkË]ø]Y/L2a‡õ·¨6Hä€Mµ²…¬ð:~BR¯öøâák'»òÒ¿Š‡{Ãêq‘? Éoã\@ÜÛøYÍ€£)xøFþªï³MN éqîS2ÕåÀ¾5'SCÒ{æÒ=a@…`¦JþŸ PÀ×”–/Ã/Ð7Aèf¦‹úöö»ú·þéÛä?¦ÿ±|>­¾ YË0¸#­žÙÂ9í#ëBBC©‹üž‰Ï ‚Ý\R;ǵ4O±qô¼¯®ÎõYÛCil÷è3e8\0”QÄjÒ+” ¸ìt½So“ü­=5uàxäUѰ÷í’iªoòcZ¥ÖÃXý>U癫ôÇÙùRK%±-B{³MŠãôxk n‚=»§ÐÈ×”j¥›ô JB*£ î=HŒà€*ÿàÐÝÖúÐýÖû1w›ðÇÜoƒ?ÖΧµw\ù ¢vHx>ñ,®Aš¬Ã”À³ÃûŽ”Ç¢ï¶ jmð͕Ԁ}6£¦q‰Î” à¦ðëÐD¦µ] ~ásb©Ì;G§8³ý‰ësq0M€® p^7ARß¡±öã9Ð[f?U‘ÌŸ½ )gHœž¶I/zWJ˜Sÿ¹±~>ãa£ç ðöoå‰ÞÕf:{ªˆ.ÜVé,@½yi_@ÉCœ[ÿöã¾€¼8ÞäßÊ%’û/ÃÊÌ^àÐØÌ‹ú¶æ›ò·ÎßS÷ý–ýë2óﱿÎ÷[u_ÛºóËž‰3E5åSØ[fåÆ' ÏìÃ`­U}ÔoQÚû£É°—7‡I,CüR+ ?;`9«h-‚æk£îOWÍ ?Ϙ{ –èùä¹Sð–,ï–­¢öOÙ»ý öÇì¥'íÝÿÁ ¢š=ⱉèºý<áÌŸ:‡_£ ”ÝýI¢{kÈ÷È·ùø~È5ÎJüMñÖ òŽº*ÊîãÇ)ßJHáq³ú‘Tçu޽“ ö2Çÿ©ºwóSõïÞÏ©{ Ný{ðçÒù´ôXœÿÃ÷þÎP‡ž ÖüN˜Ûü/Ûf¾F°Ëýs'ÙøSþùûÿ÷¿|ÿ¿¿ÿwŽá¯øý?þwŠoõç»Ëò dŒ~ ôS€mÉa'ÿ§ÿÛÄX¦Ë'A*AÿšKv².øÐñcÊ‘‚ áû?éNù?¿þ³ ‰&ú{‹Ž$Þ.ÚÿçŸïÿú¿;ä¿ù?¾þ‡ß*ÎñüSyZeo¾ÿ7kñ~ý?ÿãû¿þÙðÒ÷ü¯v-”W·¸•€Àñnÿãþú¯Æÿãû?þ¿ßÿí| að§³»ÄåøÝê.qý$1±|ò—FV·§ÄóßJ¼MØUâvHünu—¸’Df¹ÜÔí)q ÿVäϪ/AÊ2®"Cäw«»Èó“Èð“ƒ6”è‰Èeüt+‘ã¿yªøÙ7W‘K8D~·ºŠlçÛ‘'ž¥V'a¿j9ý;‘?Ÿ «ócóU(þÍÚs¹‹N'?½mno»ßÊíÿ¥’ÖyzOçǦ[’^ÿøÓ^Ë0ØCÞ[Æ?ÖHå$é¿=vI‰¯YçÓù±Ù–¤×?þ´Ç$é{Sr^íXtÓ%ý·ÇÂ.éøÑͱ±–xÿâÓ&B&{êoæ¿«·a ”þí¦ßâõÿüƒmï¹;Èe»ÿñ§ƒ˜<–˜DìŽQ+Ò%ý·{}—Tˆ¿·ÉêüßlœûÜ8Lr°GÞ’ÝD˜~@’þ—nñëùRÿÍÆ¹ÿñÿÕÆi·¸©Ól>RÓugIÒüHš¾ÿÓ×çèŸûQó/ÿ×_›xÿú¿ëþýkÿY³Qâ÷ÿöÕÓwíèÝž!¿ #ýÛíÿ6ÂÓõ÷ÿ×wO_—·Z›]øŸþé¿ÐþûOß¿ã0¶êwŒÀ^R‡‚§Àdæ{-/ bŽïöº2C¬ Ù¥1€›E!Á äß–;‰ÑMÆØ½‘+¯Ž>šÊù!o¥ä¶«½™åð â·-ꮤ(äJ4’ÛHÁ‚Õù›îŠý~ŸÓÓÎöfÈE1N·[÷®V{_šaß/Ò“¢†VвØÇÐg§†ÞA0vÝ«u\R1±+#¯F®ÀÙœ§¾-f{ÁÎyô 8 K«š6â.¸>“ÍRË(_Ç £°¾Hû¥~i×Ù«ñ¦ñ¯³çmƾ7±· ÿÚ½­—ïÏëõŒôö*JYLÂöÕç‹Ý»D„$é¬ %°â(v²¹OÎR+/äϵ/äJQ¾ŸŸY±ßBà”²ˆà" i ŽxòXQøtƒYE¤›Õ>ƒ4L¨ªý9mªp=ÚOçò²ÓnýC”–›€ãÚE~å-ÎÉV®ÿ>~©ý©ÁÛ¿õ(¡¢,™>P»"f·æõžÅdt¼u_%~%boâC«ì!\âmðMñ ¯ø<”÷ý»õ×Eõ[ßï©û~Ëþu™ú×з•óýÖÜ×¶ò´6цÃöÝŠ´bg‚ÊOK,»L¸ßEñ6íjmë´‚+ œ:$¯ýeg¹ŒuÚQÚoƒ´ËEßùuJ×yl¯)¼ù©\À§NK€©!.-O++t¯H=šÃitš|wGçP¯ÙE²*»ß²k™#»-UaqCšHJåUAóVšÛ…9„î?Ûª©@’ß³=©\8¾ëÙ½°¨ m%ÖSx†Ê#ÎUËkäÏ‘7a2‰°sìz;[¿Õþutþž¶MöcÚ¿Ž±¿—Í÷çe·Å´ È_™ªsÖØ ¶ÝÄÏÏBq¬GuÒ|·“ 8‡÷õ]ÐÐо †­»òÏåAú§Ñ¿j°ó£(ªT©ëãR0¯¤ü|7™0`\h\Dê†'wí­mEeX5ìøhmïšÕ+›Ý3µýlÞ±1zWªÙ׿ŽQ³B‡gÈ3"v­ª\áS--u¬±?í¿J¿µ‡{ÖV¸{ÿjß%;æiÜÄ7Kd½YYSûØ¿øží¤jïÇ©¹wëMïGïç¼½¥ß&ýý¶fí½×œNÎÄ_PNWêdæ $ö¦ UI™7Â!šúžÔAOФÆÄô ÷ßîMûNYÔÌ`#(Ñ &Ö†µž9tÿNµ5Çwñö¬-0‰^°;Ê(ÝPžßIJ(`¨Ùgp.UÿXÝ(Ø›³a©T13fžÝOÅ5(Q‹n¼¥ÁÈþN™mƒ·Ïf\ØãC»î€b£|È–‚6dbn0yäˆmísùNÙã¹~]w ^;gß.¸}faBÞ™S÷7Ë’4¡Ð97½íµ¿ºß§m—þ2í¯ÁïËæû­º¯mÙmIíÕõSÅbmE€Õq‡ {‰]0"Ñ~•ÉG{ïÍbÙE°ì¦Ó¬„d©wÒw³šE_ç³KÈŠ®rö$ŸRoC¹¢Ú‹¯‚ŠóØÔ&*ž7¥eé ³å…Å}|§ ¾]oíMwxòš˜½/ý7jfwÆç]þH]v¤:qθŒ³ßãÇ>jj‡¾nŽ·þ€Œ„ìS^§Œ’‹l: ºµ§ \„J¶îÙ¿²‹¨¬äÌ<ÅObP®Ö»-îËðèwŽÆúE}{û]ý[÷Çì½¥?gÿ=úsõ|Z}~†‚lF Š P{ßÛÛGHrn°×à[€U +Á>Ã5J©ñÙ€I!ªÅw®(*6´öZ&d5}¶«Ú¬½2‹7Ç<´S#l–wA‰°…ľµ»Ù+V(Ú~-À0§JÙ£=D¿v¦B–R/Ý“F ^Kx.€Mú(é3•e4¯Ñóð¤Ü©<À¦<ñü’ ^Ä3°p"­ 'âlO¸¸ÕäωKÿ9I|³Ð€§9åÏÀÂu0ßa>‡Ÿ…ç*ë‹úöö»ú÷þ÷éÛåßgÿ±z>,>­N*•¾ÊÊØAú•o[ž¸Í;HjäÌè{ê‘ò<)륓Àã߃…jeMP‰DÓC ŠnEÌŽð¸Wp‹2d»y @‰*¬VÚCô«„\*³©(Ÿ¶—ºØl§û öödÓPOª$?ú+“ýJÚìM~1c‚7U|Œ?üiÂc3ó½ý¦?€¸3©ô~“R„I«·äh-u4pÛJ¨öt=;ož½É»|^ß©¸›¬¶¯ËØmïÆ)øzζMwGóCõ[ïï©;„?fþ=ô÷Âù~+îk[xZš¤OÛ¹Ò­{Œg`T›×,2Žl£Í¶KÀúÃëŒ[Ð1ù"L³`7ȇ؀⬠?z"ß©Im¡‚­É~¶MCEóJu$™ÔJ˜¶ÏÝÄ3ËÚ^“š™FŠ P+[;’·N˜ÔÞŠJ,8šW \lŸÎõÛ{‡HrØ«#%6Òƒã_á>\O²}ìð´\pËxûMw¢ FU­\Í~ TÞÎ[{;(;$éøÖýø“²ã›ô$MîMò‰.£àrئƒDû¦½­ý®üwﯙû~‰þu™÷mä¿WÍ÷[o_ÛšÛßìêbª>@ºý¦*©S„Ò©8B¡ü‘å·˜˜È›^’Ås‡•¼_äµPè¤1;sòδ?QÂÚN̵£DþIN >kQ7ÀúÄEAW@®öÚk¿|“c?Œ™®'çÖ¨9|¢ËìÝ~ 3UòLò.ò7« ·’¯ïáÚæÆë‘l µ7UA“Ey!oc¹JÀ}!±âJ9[Gý #ž˜½kÞ'"yì¡}orëùbÿÂΡ‰h´^/€/Ûƒ¥å]cGë·¶¾ßSuH¾Íó>î÷"ù¸Àüò†¸‘» äY`>ójŠzú@˜Å6qJMNŸ½÷}l\PDá’ò‚ýì¹@E©è$ËúϬÎ~ùUq:q¨pybì@!jãÏõÖíLH¸Ôª[_¸ÚÎ_—ÿÖÞîòŠ©ÔrJ—þä)àZØ}”.òÛwà°ìÜM>9Ûø16»=*á÷•ƒeÓŸBªvÊžW{ˆ/) #aölNî3¡DÁ\ž½Wö 45^¤w(¶Ñ1x§* pÌÊÛšïºßz?æî-ü9õ¯¡Ÿ+çÓÊóµYTÕ0^ëâõî¡TVÿèþï4âXúÎTWš–]FIX÷¸ŠØV’Ù.¹Çe—Q“&NI}·WB—-…[‘Š ó"®ÓBJYب¸á%ÚÝJ®L ½·æ”gÛ÷Õa0öî!(»ÇlTw½mâSQíL6ú£z} jj‰ ŽÚ¿µ—Uo@Þ˜í±½(¹Áání!åJäÖ—üã;?åïÂ3»qº^FÊIa¾éok¿«ÿÝý9{oñÏÙÿX<ŸÖÞî?â‰ÏhAþ„Ê‚%Ð!~è„U!žö'–"pXxxFO\»SqÒ=Ñ„jÐrŸ?/dû}¸îyØ÷@å*\+åyaS•ÊÐ!YáߤÇÇSh–Ó,µQ3ÉVK˜–ÔgÅ[{ I% eÜú'P† gªèð?"?0íÝ£SûøyPTUœàÐ_$±äcGð'j%æZ¼´××·Ùž=^ú牌OfràNùõĶ+¾ Ëðy¡›Ac}vA‡ú¶æ»ö÷Þ÷ÙÛ¥ßgý±z>­>÷‘ò> Ë~r™nìAO1ß?Zp3AµÈ=A¶8&šY!³¯õAÔJX$þ"‰^ÓXÎÖB‘‰ÁÌkßꄃnî)ìh³;¦ø*³zÜàf¯6­˜én?nL)·æØò•LeaøÝ£À™oÎ!^ÄgpM·"h„}ô0ÿà™nNCphì²É©ŒËÏê¶sgªØâÖž{0É{®ÝµuoÓ‹ô3CHx‘žéo°^zÚÁ1zª! .ìžvphoo¿+ëÿœ¼·øç俇.žO‹ïq á ž€…¹g°;³ýÉã@ Ä· ‹únÚ¥6·÷ºnZ]$¶:²‡Ôäq÷ð|€{ð÷aØVÔWËÿ Wæ‹zk:úŒiŒðwÈò˜é^·Ÿ§Z%¥[ûä†u™°¯îù5›¯`wŸéí;ÒÛ½äl“ûèm~y#¥XS{ÜG¿µ85ÔÀöšmËL€+Nâr·æâ›¤¢¬ióÝ ¤Õ|Þ7ñáÃ,„ÛèYît)ëE{[û]û[ÿçì½å?'ÿ=þsñ|Z|ûs=/6döŠdú•ÆÎûÇ• ²Åѧº™'ï¶"Pf‘ü{‚ûØ)wÅbÓ@Y'€^me(ÂÈòö¼,¹–xJúQ@®‚½×Q ˜*§†»z;u“”Y[{ªýìÚ Âö¾ô_ äV®7ù‹äw$µßÆ ?ÉA,õeeÆg£bñÕ*„à³=gKe³¥™.ýˤ6›Ž›"_ägqA^ÒqŽ_ ?À§`è\ô··ßõ¿÷¿Ïß.ÿ>ÿûøõóaù6)‚DgS°©„•<ç#™+쎹ax¨<õl—à´}Å­)Oej×@Šnƒ‘¿b><Û/7öá7/ÁÁ#½;.ŸE•'Æ;½ÁiþîTk›r²†ì 8>-Žmy4°“üòy÷ÎSÀ–¥UÊEú¢Ü³A*ZÈËÞø=xŽ(`ª‰a•wÿ¥»¢ä3 §ç¿éŠ„[fä[óå:ï…¼[÷]âÏ¢jï‹øÊ&´ÍËð}]5­œ›ú¶ö»ößÝs÷–þœú÷è•óaÝíÇ©<öf%Ã-æg7ð¼»2–ôFƒ2ÝD©ëlÆh‡Kâçì2P¼Òüc– ®9Ø ÿ¾(J\q±;R4¸ÙãÎü 0¤Ü‹¾ýÅHê–ó w@ Ų}‡ý>€±aÞÚ+ÖVg¬½Ýú4¬©_w×_ùm?#² nþ„G~ß¾yX¤ÚÖ÷·þt·wjr‡ç&UéšÊbjñÖ^©{"¤žnýOÉßà>L7ù'ÅoàhR¶{ÿT´ÉL§õ¬ØÔ·5?Ô¿uLß[üsúßÃ?—ϧ巟§£PR3`U2ÃÅþ‡Ù!ä\8g„ǻ’ p¨>gq:×åŽX'$€#|Î .†EËÇ‚·6;›#K`Ž”œ:­ãßK—‹Ùž­ê ™-$ßíšÁÇÌJ´ÞlÍë_Vß~ªªtž+u/ Ðs3ð|ùGÏe³ØºÏ^P±aÉxžÛQ]àï*§I›~·²HZ£ˆËõBY@6Õ aݾ6ŒAÊ[óá¦ßã—SÝN²@ÂǺò~ë›É¬¢¯ñ+3ãêš±³}¥gy—þ«PJ:$¬òWåyÚ˜EY.ã¯Ü3@%q8^ô··ßõ¿÷¿Ïß&ÿ9ÿïñŸëçÓús_)CÆÝƒIí¹Œ„¿ ʵ6yÄg•z™¬±-tßq@W’a.ñ©œÌIó½@R×BZ%/ª"±O í’mƒ£~hBìA“5)´›@dƒf£¬È1à¸v“6ú+:³ìHcœå©Ê’ꬑª²ÌæIÐ’¥¹ÞÛsäò˜áÖ}®F)§ŸØ¥·Ïv€Ù>öLú÷ÐÉt§ÙÞë¾^ªSb~Ép®´ü·ÞØÆ©TÒ³y£œÇŽö6ê»k•ò€ØhÏŒpH­AÆ™8›(È<ÇLŽ64„¶ÆÆ×®²³ù¡ò_í3¶Ë}Nø¯Qíëåûóz;^GTšŠZ•T 0iî¤VÈS„£/Aaæ²XÏÈ'¿#XÀ5%O( E┘+šhÿÂþ¼ŸðZàŸÌŠêå)V€¬1 ¼MßñÔ²ÈO±B°“Gˆ^ëÃҕ9oí¥xXu§+cï¿ý!UÝ^0Á}>›üà²YkÊ×ÇO=Ô¯ñ»ê!Py܃oýE‚··sÊÏó » Oò¼µÇˉæ­ÿ*ù§HÚ/â³RrI)ÍÛðyhìœÆM}[ûCýïîÙ{KÎþ{ôçêù´ú>Ð`Ú 2WröÊ„9Ÿ´¡â&6xôÜ:*Ì‚^ü·@uí&3|Ø‘îØ•Ë¡ÚT Ù^yAu¦ýÀ“Vªœ:Æ<•¼#{º–š‰c»°æ•{‡! ðÞœä6fÁì1?¶îyz2Ñ-DЦ ›\-…cø$Òš• §õ¸hïÝüTþ«÷sîÞŸsÿü¹v>­½ýL­ÄxÁ‚PB¬PS“ ¦[„ñ©€v{§3ÙïböDBÒqaÿ.#ûwýc\GBÅ,l¿6ùq;¯Š JŸ¿ ±Ê;²$Ç€…6ë­ChäÏ„èOB»¹åÉíÖö©.Š?©÷Þ’æñ5ûMøŒð@쌕„¹ žU›ñT˜åÑ‘@À[ÉŵËëŽyæ­}ÇëŽc¦„Kÿ$„¯ÇM~›-"A@kÛøçgòÈÊÓ<õ·µßÕ¿u¿OÞ&ý>õÛà•óiå¹ÇÉ6<[þî0¡¾¿âÑðÜÁùÚíчH*è)O¬ká oÞÊMŠ]}þ$$æÂ•ÜUÉ“¨M}‹;ž3u²¦I‰‹BÊS«+¹‹:Ù¡ÒÂU½eÙ ¶Ëc{{•NòÏÝÓ ÷þ!-Ôƒq(Oñ?K~{X8—ú1~[]~-áÉNù­¾dúï­yZán¼ð¡Bl¾·õœLÞÇâïKßY²ÛýÌdì²»÷‡÷1hÅ´ßÇNÀö+òIÒ¡»³ý®û½ÿ÷Üòïs¿ÿ½v¾_ºûÚ–Þ~×S#@”0™¡” d& 60—Ã?*°æª'¦ð)p3R›ÄÈkð& þ;Ž ?ÁÞºS){€×3§:CÉf¸×KëBFT%C•èGçUÂÃa×ÛMx˜ƒI(P½\ß@Ï%-'°ÊNåmí7ÝýïS·‰¿Oükð—uóiÝýu9•$nÚ¤óŸg?Ú˜?.'¥ð()¥ålDrJwÚ`C¾ =I*.å¯Ó§(Û¶¹Gß^$'Ì'B‚  Éo·D^H«á §¨zÁž3ž#žÀ,$‘ýÚ:R; ~S\n•­ó€wÖNgsÙ…é™k5¬¹ÝÆŽ;>*>∻î8.fêëÛ…‰Ë#Ö[ûBÂPƒ¸5Õ[ÿ¸}À¤Š?5où+4 —åz?V"‰ÖE¹èoo¿iï~›»Músêߣ?VΧ…ç¾z¸PÛð„ÒlšæµyÍ“œpC<éž›ØCY2n¹ðÔîÉÎ*tªkÌŠu$ÅåìÎNi¡ûwVЉ¿*³쬠ÚJ/²Ä©×(ËÕN-œqxƒñÉÙÏcùx¨ooÞþ t3T{¹uÏËF⾊ÒvñÅÇ©æÏóì×èí{¥´Di½Ï~kÂÓP¶=ž€ÁTÚÍu¶Çým?ÞI©¸õ_$¿YgQï·C~¹¿íÅe·B¼ŒŸì0f WßÞ|ÓþÞû>y»ôûäo£?ÖΧ¥çç&u{„–<ó†â³~ƒ§4“” ˜Éèu™•©ØšËeÅw¬pAø{Nÿˆpþ #gàËHBw³Óô—¡osj‚Ùæ*³5Üì´ÑÛÆü‰D üqv£˜J¼f!ó’p„ßÚ³6löMžÕ»÷;Y¶cšÝ›üIòûóŸPÃküéEëOÌ:W—ît ¤è…½í<à QaáÌ—¶ð¨‚ßffmþºt]$:uÞƒ›èún—«­<“-C'«4ƒ¯ÐcK‡êÎö»ê÷þßSwÊ¿Oý>ü÷Òùþ÷ëîË‘ì„wdW qP޳+²¶³#ÙEÊKÈpU„<¬$ìÊž[i¹Í±1±¡‡íY¥G`^5аÄ3Ïg¢aJ `×Ωâ(‡í!Æô#ng•4Ë=Æ 4}Uÿm­¡ðvmÁ¥ë¨—xú<¸ñoÿN8aû¸ùkXÎHÃY6èKoAï6{Ó®È:5ÀªÐééÚ-·Ã7¶;añ`AúU§dg4´a*öÅnóE¾Æ|œ^-‘ÝW•¥E°š€£2 Ÿ… Û}á, ƒåþ¹‘€$¶-ß{ÎÎÙòs§Ü»db¹óÙ~¿8æå¥=Ê ‰­xéüÑ?I_fÏDân7ù‹äOö`M}ùü~_´P“,´´JuÞú‹â”µÚlÊÐ. 5*îu4·íeš fе[ïSÒƒ  Ô‚]z®ÈNñDÅ“p ž+•Æ{QÞÖüÐýÖû1woá© ý\9ŸVÞþV/@ŸÂî š|ÁŽ-–É?næü® ê}ã $[ìÜ¥(“…¤^>ý{ÁmKN…ß0]•Å“šý"$¤LvæwŸ'®ŒIºy%—kª7+·éXíèXCy¾ÊжßO€ÐÔ[ûº^p¨{ÿ w¡¤‹üeJ~Sõ\ˆDïñã”#¿f:šë¡?¨a‰1/¿ NtpI29ÛGù®ñr¶xéŸ2 /ì ¦Ý!?.T*¤¢}ÏñóÌISY㢾½ù®þ½û}ú6ñé߆,ŸËÏ‘”»¢­œ%JĈ:¶\‡³ãaB0"{*Ú _Êb4s´]x»ƒ|MÀ£U¡ç¦üôH ‚™¿Co¾uáUÉ“1¬["ÛFSŸ wS £ê0SVáeô8nÍûamPAQ/ÝŠZìXq;_ć™ª E~ï‹þ5|αHP&OÏQÛ´¨khØN’'ƒ n>Þ"¡ÞÚ“ÖÀ¿ƒ÷üìŸÃÅ~Ÿ2«Ñ.òT„G2ëz?pv¸ÿ+ìÚýííwõoýŸÓ÷–ÿœþ÷øÏåóaõý,ÏÄÝô—[i$êžÒÜ"‘)XLÀ|ayYYøzý0z(AžœŸ–…qZ‡y3Q¸Zç|Т)ÞíX@SãÚËÆï!è½yçái·èŒ©_ºùº€ù­¤ØS|@ɱ,øš×úü=|r@"ÕË ¶=úý¥>u7À;ÌóÁ„E“L©rk^a­ÀFŒzé_—ŸÙv Õz‘?‰›Òþ–úeüšžTõ±²^êÛ›ïÚߺ?gï-þ9ûï៫çÓê;,Re(ÂõåÙ øjÍ,§ÂCð3„Þý+eÓ”º–¼¬ ^q©T³:(ˆC>;ÛÚ¬awÀØ©XL¢'K@#€ˆ2=§¬sÆØÀ½¼…/Œz6ƒÜC8,¸°Á@_¿þÓÚý¢u2Gns k ðxOÿÈî; ÁHÜÖç¿s„ÀÈàÃ_µiÊzM!ÕŸLA|'6 žD²·ÏT·hfrCëè=kÒ˜¸'á³2;)û,J—Ûoohj’xÈ(ÝnSÝÞ|×üÞý{âNñ‰[7‡úÞ«n·F³RmCÀûà.]ûkØõÒrÏ›5IgUMjý# §t³»ƒ8d/ãêß³b-¤D¯±Ø¬Ô Ì×ÜrÑPÔxÈFÖCKOúUcXcµcôÔ‘à T_btuÜÚã½€'‚b™[ÿÀ]Q›3Bõ.?Ø$‡èàöÛø©Ÿhx0ó <çoõ1¸kÚ¿xÜ1ðeî˜æ­½…'`·yÞú¯’–ôxŸJž]{/ó6|e‚vÌù:.êÛÛïêߺßgo—þ˜ý÷èÏÕóañ±PÌ„+ûÁ\ÛsFy[›Ã~¼ÉÁÜð±zq 7X;…’ÑKß.XÛÄM“ü« ‚í|2«iÖoï²6õ5ª²Tb{ RÜ…1˜«NRýe®_»±†Ðü€·)Ê ÚÚ Í¯‚÷+ëëÕ/ÃÄUB`—9¢ðŒkßoãN‹!¯¦ÜT•©œÈAÎÚ”ÅjwáÞ–1ä ¼.ùê_G¿Påð2î 2Ôc§é´÷˾¶@¼ÔÖc3.?N#¯G¡¢ ‰8±6Fcg´æÿåÌ Æ_Ò ñÝçA*Hòûr¿¤Âàõ­`u¿³å¨' =­Ôn 1à0nŸ@–v¶Î)d„•k‡¹ö3NMŽXÀa{ÿôÈåy¹Ž‹ü²Q^›pØ>~X»†?Àa»þ˜yØy¹>a*|`úýyiOr€Q5Šwô¯Y—0+—‡{cŸð &#ÌE‰µŸÛ\N(Rg'Ö®>ßÞ«ïþ˜='ý9ûûèÏÕómõ J`fD¤Ù_ì¢AJOIöf'm%é Œ©~&Í–B^38³0BZÑ\+ùž4£2 ¿L"ŽÊQ » -ËeYÌgà Ã5<æ¢d#• š»u¦Û.ç„eÆÑI$ R4níá“À’7ìÖ?#ÐKäëMþ¤ò‹ÎêâPrã@Äʪ…\h¥élê Rü"+ˆä†ñü¸ÖvS—Ö”Bé켩ðrÂj–žÞªESrâ—ôºŒ]îmø«Ciº;šªw½ïSwÌü6ò}Ýü|[v¯ã4ÕÔYH˪\HÀôU`ßÿÒWâ¤JÇôª\èu*˜ÅÒ¦ Ãh¬ø%SYÞ…_§"f•úõ²hYLÄSÃrL›À(ë«ú7FKÙ·¼rÀSr5ÙÍ6*µ„oÇÆÖ^N ÐAâ*ÁòÝË? Xæ»ôĨu^û}ôòÜ’RVÛér¸ýJê–ªCA[錖/­ >Ž­Þó­óŠìkf)Ùõ ;K—‘kÊ1 ÖuÆ‹â|s¯xß»Ÿ8'ý9ñûàÏ…óeÝé#(mÒ¼˜ôô…&Ê£ %œ/UX|CYq²øë ¿ "_u9° 8=UòÏF>ŠLª˜  .ÏT ù7Ù¶9ðÓJ@¢“Éö›Ÿ *%^ÌŸ.÷4f¹ü˜8®-EñIÓÎtËný¾zù¥®øNƒù§gY—­Úõûp37*Ð…£f{™}hJó‹h«è1ÇÓ«§ œµü±kÊWy-t|Ö-¿Žn3"Âàr<{‘y0ɵš€‹Ê~¸<6À3ê…'Õ¡*×vWóÞïËOÑ&ó›]7Ü}a|[Sþæn`>` ’•ú;~é&iõã_Š~ŸÈ· 1l*C´ÖnZªSS A´€¡óö07ó77Pà6-ê‡ÕËåE†áª£i@p'ê3F` =q55Û^ò2’ÑHxÐï¢x¹’!ðí£²ñ¨·îYä$¢r‘^”ôüBm½¾‘€2À÷,¹æ”¯;ÙŒµËö‹|Ú;+Á¸£=Ò’$&çKšg÷=ªðº$æ)|§Ú’¬iZ~èò™-Ú5é¢9ßÜkÞ÷îgÎ ̼ü¹r¾­¼'¹xV¸çºòוÆ ÷Ý4˜:µ´À¬œ© 6¹ Œh‚‹¼¤á ±Ï°Žò“\\à:‘?¯–BZ™=Ügï,5yz_54 9ÒGà=¸ìgY” Ïq°ì×<5ÉåýÖ*¸:e,y”[ïbÕ‰jæ|¹IUz ȬòÆOgœYCÕËù¶)Ð#E"mõÉ.c·ƒNv´¶<5 ÒM8ÏΫ /Jñ~¹ú†f–Çùº ž´w˜rIãPÞÙÞéÞw¿ÍÜ.¼›÷×1òmÑü|_sâ'̲2¦>äëZd ÆILÍŠœMx°§å1²pû[VÙ…Y¹ ‘S´Èæ#?ê™b¬$ …‘·ìÒšÈkŠyR‹¥å9A J;äÖ€è ð cÏK{M’…ª¦Kÿ ú * _ä—÷:ò絃ñTе¤hÏž]}¸(¾áék‘P8,˜sþh ²d¤Ýº‡K£GØñEü¡TV›Ûðg%Ü:ÓM}{ûSý{ÿçôíòŸÓ¿ÿ\>_Vß›"”yⳆç#FuŒØîv`ï#=ÙÿVþ&'±ØµF~f$²©*倖/*§‡bèÏw‰W£P¯^ð_ÐSòÄl+•e$-mTrU‹0ýjŠñ¡îj€íŒÑV…V¤@Vð|kO‰Y5ÕKï2)kËÚëÙu©*êˆOùÙ6öŒaDzÀ!ÿ¨N›ü(SQœ둃S³(çÔ¥ySì-ú¸õÞUöBLr\„ïàè¯sä•2I`›íPÜÙüP¼ë}Ÿ¸SúcÞÝà÷us*o[wúæÑâì ðú‚µñ Š”Œm;56€7»ÊÕ"0 érá}Q!]ê¥ÒD•_&"˜õ0(RŽeE3Ä$¡ê<=ñƒÅƒ‹,W%Û{(V|«¯ò:ðs:Ûbü Þ)Z*µ÷ûRÓGô¦=q7™š=å‚’:–-ÿg¼‰Ô"$+ñrºÂÄ”õ 0Àö‚˜üîsß’Ç|ñrzµù::­*0¤àrIó¨÷µF?Ô×hZMN’V˜§š>[î Þû|“ó!îÏ1¯ŸuKâërz¬êT÷ëI/§.Ø(ùáŠá9KQ‚f |Rb©7ËÔ€ø®kÐÌ’Fp3ñUöC\Ù ÔÔ‚}›ó <‰š^Ó /A{'϶ùàB“ƒÒ4#°Z¼?>ÀL¿5ì1ÉJ©Éü{¾÷Œ/³´fLÀ§ôI¥'7·=T1Ûàå‘#YŒ¯™ª˜Myø{3€ÍuàV¶¢Æ[{®1Bu¹´xë¿©üÔÇt“¿‹¾ M‚þ6~yɵFB븩Ï5÷Úw½û¹sÂSïïWη…w zXR´ÑØXyY ­QînМpEóþÆÙ:£e7,O•8»æb 1gh~NÂmðX;Àܤ7.ç¦;l¥ìBµ² d åru-öó͉ ÁÉbIÏgï¤É/3qí"<¥›I ½^†®Ylà:…B94皊w½ç¤?&Þ þX8ßÞSKÉŸ"p6j\:¡W-¥Ø¿ALôDš™æÇCá¬Yˆà>ègŠªˆà¿ +nE‡‚p•ˆ—òŒ®¯˜7«”çØe +ä–l–d€Õ¤Çúº%.íQ¸§` ½£[²ñ>~ùѳ–!òmÆúúí®ÏZxhÂpzËäjQØ¡Çr“j ÛªÄsí„Ôaôê»_{Ù i#ã"=@-˜Á…ÜØuב?An®Ýùö»îþ¹sò»™?ÆïΡ¿}Ý=+SöÈ ¥×`2Ó$Z¸*r(N NÂ+ki·*½ÄÐBÕ‡´ž&óR~_áõ 9Ø*òj³ÛV\lÀY‘9L5B|NeN~~ñKÝ+#ÞÚ¢À$dž2.ýcKc¨ë+ñ"?0òûòhíú?oV‚À£ö7Ó§þx 0—ò]Ar^YðöÍ7>ÛÃn‰ÙL@òÖVù9¯Æ¼È`³,À¤@­—ñë½ ÏpªÝúE¾½×¿ëÿ˜?'ÿ1ÿnüÇúùºþ¼¿(6è;ñ̶J´d/dÀñ4µ¸3òªå¦H_€1ô0êS:!ýø§\B„ôå•W˜•¦È÷(?_ÁÀ·Œ"~£«¡âj=É)‘Ø‚˜†ù¬ÔÂ@q²mòó™—ีWwôPV¼zvO>„Ì(Æ'é¤'‚7êŒu<‰ùŸ£''‘¯æöÊ#£LÐf~ƒßV—ú¥½\k) Œú­ÿ©âãâ\àÙN~¸±”ûMyAÎáƒ~KrOå}QŸk¨ïÿœ¾]þsö÷ñŸ«çËâ³£´àF¿²”ryÐBN,ÖòB”«=Ò´µL.ÿi:Ú'HÜÉ6ïyf{Gˆjålë1>5óð|$¬{‡h"é»È.Â.NÚµ¦°¯`]ê hŠLü¬tOÝ ¸;Ìû~iα¨L¹ø).½s郭@zl¹HQ5Þ¸ôŸƒ§®¡S;ì:‡>•õÕ ©ýŠ¢`TñÖ¾Q€ÌAÒR¼õßU~h41í_~°‘GQ»úÿ%—j$¬]nêÛ›Úß{?ænþœú}ðÇÊù¶ðìO ²Õ­ØöðQØ¡B‘™Tb0Ow‡ˆi€ïËXrꤲn.O80(˜mÏRÌ yã5åáŠ<ÐòzR¤/G»òŒ%pÊŠÆKâó†Å€œ-°)/pOQŸk<±hón݃²¦5†Õ.I/~QñI4T?ü,VWàÁ-TçÕGüŽ3+ 3`õLF˜½\Ú×øK™eÉiiµï¿&•&êZ/òWÈ[`²'/è2þª±ÇJ‘[ȧú|s¯}ß½Ÿ=/¾Ÿ}?ücõ|[}¶>et€*r?7! ´tÀUô+Ï‹á|µâjy34 7ËJ s~Ù˜ÞÄ z™ðø„(“'=¿èÝ€7ƒÄ€²" b—9³åÊAÄ´½¯E"w2ÿ“å…®LmsAñ¸æÔ?c‘ºpé=09ŒI«ÍéÃPéSOŬx7z-)žë-ÙÙç´°A@›#?PiQ¾t£J»´Çè#.+ôèŸð#¤Œ0]äÊ­²à­¿Œ¿M"¢DL‡ú|s§}×»Ÿ;'ü1õnðÇÒùºôZ ¹ã)SVŠJÐÍ1 ~W9|&a5ÐCÍ¿WK+ÖìùNˆ{TÍÑT1üz.ñ!Q/A%båV$cñ„4»E1! ¶’Sôê¼سDžÚ3ëâV–ª8æ¸4Wp鬄îfv¹î#ÄÐz ×Å¿‹Áùƒ-¬P´>”ÏNËg?´æ°–oמ«AåU‡õÒ^Ò”àH]“{ÿb$è× â¸ÈM;P­eŽÇpÙÆ_5¯#Ãîù¢?×þP¿ëÿ˜>'ÿ9ýûøÏåóeõéòlŠš<ɺ^°šX¿Š—Ððü7¹‰ðéÿ¬‚kÀº‘/5M®­eZç•cOH}À6ås†™>GKÜ …{KÎvkþäZmŠIÊþ“÷Ý$bÕˆMÓ´ –µ•˜ÉczZ£eðí£ž¥Ð™{Ê÷å…ªc3Ðg' -[/7~¯ ‹~Ö~S¹—ö„VmØp9Ér!¯4ßš+¡4°–q%gºî»Š_1.ÊM|œÜ«€„Þ†/¦ ÄØæé¦>×þP¿ëÿ˜¾]þsú÷ñŸËçËê»°f‚Âé;Í ‰¸I5~"@Ç(.hÇŒf2T”Žjù& ÷­ë=Ož¡üF`ážQ;-¨HJ~KÍ”Á-ZèDÞTE-3k(IE·Œ+{ÃÀÛ ’Ú>à4ë9¿pôÇgøGqŠ^‘(Ã+úð… ÜßCóÑÏö2Xv¤S±½ŽÞ5–ߨo£²¯X>Xƒ¢¯ö:Ç µèrÝçz¨îh¨Þõïfîÿ˜y7|·põíëîHö0¼ýÖåY‰ü©!ñ—¥€é†ÈJßÅдÉpŒé#YÆ‚+/E_v0©Š6ûÉËöéÙ¬pò@LÖšýS'±²çêŒdÆÍP ®:ò‡=²¨QÇ 2ò1×^}Í„ ý]ú'j…ƒ£Bpv‘^€pÊ}ø@|Ž>ªÇa´ff¨Wž>‚Ø"%=ù°¬À ´vkÞ°"å„Õä«K÷±#Úx¼»Nü©“L{ !߆ßÅTPDÓÓM}{ûSý{ÿçôíòûÉßGï–ÎϦ¼—[yG%¦HBéMä °‘-ïEž|¡Òq=·ƒâ=P`¤¡±%­7EEÒUÊ6QDFõŽÅX–›ZîÒL–«6 “­P…Àwè÷:Õ•†WNªÜëT²¼•\ñò"¤kO½4ÅV#Yb¥ï_þ){•¯–iàÅÏ*~&!íÁk߆.›´âfÓöN}L•eøµ½Øpx–8Pâ­=GdÑ÷x·þÁÛ¢Üç›üÓ¢:²ÌF¼Ÿ2Á®à:ó¦>×üP¿ëþ˜>'¾Ÿ}7úcñ|[|—‚ÌFÔ¶‡'h¬A+¾­ŠLü2š¨bGÞ°ÚûÞ¤)’«fY€Ï%ºsþä6€Ð èKJ(,|âq]sÒxØœ"qbyŒ?l–ä6¦º.n9©ÞÚ`†"Iz3^úçL#ÃIÞ+r½ËÒ›ü~×ï}7ŒŸ¹†š Ž¢´^sŸú©«ÓžÍº|[ޤ(šîÙžâYY$Æ”[ÿUå/†Æz‘0Y+ƒ”ÛøÙj`d.&i¯?ßÞëßõÌŸ“ÿœÿ}üçúù¶þŽc•>΋E@H™Q×j¿(/)\ÀêÄh̹ÆÑ©!À Ü©IŠ 81z²Û2` m1&çÜ4'…îW+ibÂÃö¹+-n›Ã8ç€ØiŒKkä„v¨ÿpïZw,io¸0uÇ n1hùq¸Í{éÎ"¨Ô#ŒZžÊù?zSSŒ¿J±·yOCú¥°ë¥)uüÙ>To%U¹ÿný+Ë é ­Ž›üÀEÊ’Ç,êçèõ¾¬°.ž.§¼£½Ó½ïßO—ßO¼¿[8‡þ¶ugp‰$ëñøËÙ ¤FÓ’ÒYþ2S)NMøÊF$&‡;p8‹Â‡¬ù{™`e¥…ó—Æ\…XÀm*Ö \àu©‡øVmÂTÅ#W‚«â}Pà?W{ÐXœÁhÒT.<ÕѾ=|ê`Zäd`j¾^µ3UÀ[òE|²D;Ù¹—=IÃÇC%/9QŸ²ú]}€µáá7ãI )x^aµ(—öàN* «&¨ý³ (ºà¦^äçÔ¢NÖÈÇøIkÀTªì²‹þ|{¯ß¿Ÿ?'ÿ1ýûðÏÕómõYR ™¸¡C 5¬†¨“D,úéqÝò™pFY\ã—Oî½ö0bÒCÀ¶ï1i™âHωÞ+E]Æ…ºˆ¿b{¼IÓí+C²ýªä å':G~'<ôˆdfrÁ€Ø›ã­9…ˆ„VâèíÖ}óŒÊcœ<Å'ÛŒÊy:< ¢ÛðåNJ°RësImêKº‰å/ú^'&DÔXní‹ú­äe¨üBgÿEåŸ$ìÕ›üà›_|~ü¤Û6Ê’}¨Ï7÷Ú÷ÝûÙóâûÙ÷Ã?VÏ·Õ÷0º%!7"R· ŸâFK‹Ñ½¦F•­1-ÊyOøüŠçiÄ­œQ¾í¹†‡û±LR´´wP΀5[ù§U¹ž¼w PIÑ] ¼LA;MzþeÍË‘w_\ǯk­i=ò·£Ö~éíOä›—s¿HœÈ9ø“Ïòþ=õ DÞ!C|lðOíÉw¼O ½,(O²¶“8Ú3?¼‹±ØøþÉ$ägÑ!?÷)”E+ÎñkÖËGkõùæ^ù®ûcòœøÇä»á‹çëâ;üO®D9sYE"y„°Þpå)dÊ9X¢¯Ê‚_rp3èŒ`B¿`ßqu•bȶ?†Ù€t±DcjeÖyú>`b£ðÒDeEA•³f„eéÀç4&–‘UÃjn!ô¿ãÒž$šÞeê½^ú§&ÿ «õ"¿-%3&Ÿ’òÏñ+-“3K}pí?ÕG%Éé6æì¨LÕ>ÚOꎨzO)ÏÖ?‹©èCšh|ÈOÀ"Ës&EMT>ÆO>%’mj¢ó¡?×þпëÿœ¿]þsþ÷ñŸëçËò;^K€ò7ªÎGÒ嘸¸þZ¹»ò?ƒìds!ûYÞ 0BèsÉ8ÀÐÉö]” O˜…,ˆTlÊšÚÌhR'%ý"X;&«¨ƒ§,5bÐË 4S#íGCè•‘ÊC»»ô|{`SsVŠÁ|ë?iØ0“Ü›oâƒØ>;p•ÚÞ ßxâäÈêfzõERœiÇJ`íÈ%«›áÒ>’Ï–´8¥Kÿ1""R¼²9wù£qÈÅÚr¼ŒŸÔe jÂcïêóͽú}÷~ú¼ø~öÝèÅómñ‡jüEO0Ñws‚8(æÅ*QÄ^È£Á©7->L0>Ä"Ð) … YÏ¢ný)Ó•?I†*–(’·`zBÊdÍÊŠ +¹‹ÚIk«zaÀÇ[ŦnÑ’Ã`èrá,Œkž$€hù©žØ»Á-@8nÒ•žÔÛö mo£×#(PUþ'*ñ©=À4‰A.rL%çŠØ‹–±~4‡+CÓÙoÝg•ž¬â1.âËy-ÆQê—Ñ+™–¼–óÊkôÚóí½ö}ÿ~ö¼ü~òýøýâùºøŽ3u(¦Ólœò?‡Ù³ƒ@a‹]±³zîÕ>` ’#=Žm€·DùmqMBUÔóMF×]±ÚÒ*áàS0¿ ~2(ÐÈ©9LŸ²ŠÊ™©h rËÏ÷‘ʃ_ønm79vû­syd“Ä3Ââ ø”Ýf ²òIyÃòJŽœI IhoØMqF4,M±Þ/Ò“/*OjnZ‚”Çè ˆÁk8uç›{Õûî÷™;Å?fÞ _8§ú¶uwd(D¸»­­l0 ­AžVhÏŽ„9'K ÇélYð““øX@`ÜÚÒ‰ô³¢›ãhDÃ`ÙªxßÖw±µ!~˜YoŽJžùáÝI§€U[q8~Ù|—ÖÔÒð®T¾³sY‘²X!Vkv%ï²eWh²J~àD>Æ Ï®LfOÓê¦6ÝlEó†È´Ôï ú*’´øålOŽ+Ɔ<“Û­û®Ò³&f¿I?”ì‹ çÜn£'Á;ÈÏ[ñË©<×Þë~ïþœ¹]üsæ÷áûe³+o_séÓÜSs¬ î¬^^Á+ŠOzD“¤V2ãÊM¥T+Ž‹N“­eÜúFYUá ãËî#O¾r#P·Áûq$C´É@´5µá1MÀaáq¨v]·øøN©Œ ›Š¸¡™¡—æF.ˆª”[ïàˆŠ?½\¥Ï*½èu.À!7ølÈ “dßu_nÊÓü9³œ¼'eáµ\ní+uÆ¿^ný7ä—y šJ|ÊO\þxÐËmüph…ç›þ\{¯~×½Ÿ<'ý1÷nô~é|[y‡Y `­o¨¦ QMÀ·-?Ÿ¨†dN‹˯äP@ä¬ÐIôç'†~¤ct?é€ËI¼X„jÒÈî45½bГ{Ó šÊÏRõ³Rk…øY3%£Â·ePFʼ5Wø7Æ“b»uOhNî£öà!{ñ~N.±ócXmÃWô:dó&ÛÔ§ØwÑ.ÑÇW15+¹Ö[{×+äºÖ[ÿMåWÞÖv“%Ù§¬´z?¨”™]hÈé‡þ\ûCý®ÿcúœüÇô»ñËçÛò3hÆ@Á[äJ}5±WîãP1c9O#?"ñl"µ°Ó ±Ñfߥo@J~r\Yã8©àÀ_Ðp¼ç(B°æ$ªeÞ3YØ:$^±_°(%¸AŸ¨b˜Vˆ)l‚|{± )?x3ßúO¸IňÝH¼øñaô«v”øáËÁ ˜GÆ•úlOõE½_I~óÒ€öš-9õlž EÀoÒ¥w’±"…<¼SzL\åˆY~~ôø~än†ùsÍvíùö^û¾?{N|7÷nìûÊùÙU÷r+ï©cÎZë›Æ°L<¼jà P¬Ž™ø1 Õ&?+ŽšWW”¤ÅÖË=ÂÊçḼºXàçì¶8(NlÉrt,±É-”·´É­šR“ÇÓ“¼’œVVä„ê¾ZE„kN®Dê—î¾$üaxôâ“Ó)?¯×ôãó9|rB+pÎjœý>Ô§ ƒíÍPi1N\ME“Îær6)¾vMùÖ;g )íEq÷NéItæ=Úuð„CÈš§ Éëîgkýºh~ïÜÍÜÏ&ûë2ñÛÈݺùÙ÷rëîFÌ¥™¦YÙ€µŠ <ÔJÍ¡1s"“X^ ¦r˜´îùûŠ•ûŠW@UaÆ73VœJdTõ3ZS€—ç *¨ŠÙebjQ)ó0òCBVˆœeÂRSŽªY3ob¯­=4ë kVFÏî£"K|]ÇMú ÒC5jmôL3¾ýجjÇk/ü";¯÷ TdfdúyôlO3•µ-ø[×Uñeõ>nòsÁj”ø~å„Ó`Ž·C}¾½W¿ïßOŸ—ÿ˜}7þcõ|[}–WÂÞ!¥·f<‘òúÅH‘Õ¸h€Rƒ°Z²²+œdUk(Í+êÈ` ¤åXcÛ†º²bÆ/h¾•øÇ¸I:)9aaÂÀéÉÂÑŠ­DÉN ù>ò¸éÚ<â3L´×²ï`GfZ†Sxe‚M@¬¡Çáò1rù1¼ËÀcn³Sep?ŸŒ#8ðž¶ØoíyU)“ƒâŸÝg¤ï0jöq‘ž”Ò ’€èº]FÏdˆqˆéÖ‹ö|{§|ß½›:'ý1ónô~Ý|]ugÓ¤6å¼"jTf [ ¢M n‚ñ8£7<\¡`õÈ–“Kd.ÔGx¦€ÎjoŸŽü¾X"#–eB«5Ë|ÊÆe“RÚPWDQíq«d\>£6wP‰e“aßÅEã›cÄëËuù}÷Ê‹L2Äbjõâg?%ìÄåÙ†Yö®Ö‘þ>Õ'g€!?7–×…÷N(M™¨Ïöä"X3[·þìP^ÄESCNù©¶“•+KtÄÛø¡ÝèNí¹Ö‡ò]ïÇä9éÉw£?Ï·ÅgO$¨I¥éJ°”x2'…ƒNOdiR3P,µSPK¿µV¶ ìc‹³~Âö×,}×r%gd+¶$‰¬v ƒžbGPÕ(´MVÑaÔ¦›­'N•©Ü«b£Èï2hÇ­=Α®nöToýW î¤Õ›üEåÇ<*þýçøcѺv¹ïÃÛð©¾H¢%i‚¥Î¨]¬-Ù=Vmy¶Ï”ltþÒ­åm!®Î¢C~Š.†,eà¨Òeü$kð‚ÄTýùö^ÿ¾?^~?ÿnüÇúù¶üc´‘#œˆˆg3‡äN`-‰4+¨/p@#”e.e‘$­ˆ-,Ø.d–en.ØÚߪš„°¼ÔB¤f‚`ÙÛ5¦ÏuKÃae‘¸ ÞGUú< Ýð/¥Ͳ±$Hß^G£Ä))ßú'¼?”;%æ‹øàs’ñÈ£öIù>Ž>hTe)„§:éS}D€5mcÌÇ/)ÿM‘¿z¼µ'J[qcÖtîúŸÈOµ”REœòOîh™ü0çeød†pjóÿæM}{óCû®÷cövéÉß®okïð‹r(ÉkN£+óaTB]Õ^M¼FÁ§»•9–Ó|{ÉôY«Ú÷H1`&çë™i‚Å­ÄE®^<O’ìp@Þf±CYîo€“Û›˜B7tœ iz 6\kñÖ¾ì úr¯ãÒ?Ž7ÒÇJëݲË/ß‘_ßú£ìÏñGe䥚²äg®>õ‡ãp ðb­Çü%W(5˜šcu4ç%—FÕ'û¥{&ìù"~áLÀ”š.ÃW|P|¾q´xQŸoïÕïú?¦ÏÉNÿ>þsù|[~ÖF ùO¥œÔÃŽ…µ#ÿT ýdë#PÎJý·… XÂSFI]€œáJÖ@dfòŽµéŸŠâèê2J†–ÔÈXÂÏŠXg´­\HÅQò>%§º¬Ê©øk»µ‡ÛŠRá”S¾õ'‰ò1ù¿ù&~B|1³J²ƒÌÿË ›‡¦íS{”èC>4×ÓE,ÂdêH‡Ï—æ5`„2öB¾t_£Š/«Çª©½øŠ–‚>nòeø@é”L«â$êóí½ú}ÿ~ú¼ü~öÝðÅóeí™cT‹/åÊC- ät"3ÀÆ©ˆJêç]X2¹@˜RVXÏcš8V \Z¼Žzö‰¤?WÒ¤YÆ“ ßd­uÅ¢é¿S­*ÞÆo³Q¨?Kìy S«$¢ÂwºìÖ'Š(&Ë[÷9(„-Ì›øYÅ—½ÛÒu» Ь/®Mmî´—•¦§óxÐOö'þ¼4‡É À6ê¼õÞTzeæ¼ ¯äÚÂkM@ðc×ÊËT0’ÆMu®ù¡ú½÷cæœðÇÌ»±+çÛÊ;Ð ¨¹¢ÀµktŠzç4 êzÂÁ5‘çJoœ x©Ì"ÿ&ª;a"×ÏUL+½{\2.Â]\ŠEÛ“ü8:—ìlÁìê Èk]fwÔBy'ªÙNA–MšÉbÌ®9%²Äã *—ÞÙ¥2‰òëŠqÒ“à¯y¤$›¾ý/O…ï WUL‚Çý󩼨'²," µ=U™D)¸â¥}ûeIijÍqë¿«übÛjŽÂ)ç"ÛT¡(ÏñS(/).ý¦¿½ý¡þ½ûcòvéϹßG,o+ïb‹ŽAúxZ•]$YÉÌ5ØIMÀ~Vee0!YœÊØŸHˆŠ,O-0ó²HQƒâz?`NT-Æö°O/” èÊ¢\2‰#Œ=Ró̰DW²±ŽÑ´,Ö[{ ‘HþŽbÌ[ÿ2É’Œ œ^ä§ w53dåçø)¤‚$8µ'¹©ÂM²ËÕÜ[¦Ø‚¸‘|iNº¼ÒÍÕ8Ë¥{LEùù¤N¡‹øJ.%Ç(DÆù2| è;µKó9Evõùö^ý¾?}Nþsú÷ñŸËçËê3K4ak‘úW¨©( ËÜû/pI¨©–3¨}¸œàƆ4o:yÉX¦všÐeW²ÉSž­Ï`^hÄÇó(·@2÷\Æ™†å÷L¯VÈOF‹g²»ú¨%ÞÚ“G!g¥–þì^®ŸÆ@Û B:á‰g¹§{X–”;¸/À€½ñzî`6™“„Œþ€qHUbßÚy8ÈÒ°:ÊKÿU¥4tŒ›ø<¼:iÆiUµºÑ ;#4³¹]´çÛ{íûþýìyùÉwã?Öηµg Y‹ÖK¦J¹,'Î_u^ý¥ ‰”E'¥ÕpàTØó°œcÝÕ‡±˜«ì è%-Á¥w_dU:lêR£Bß™÷K^¼êQšZŒ­jJ+µç†Z¨pWƒ;¸Y1^8¼½–ÁàÛrÈ•6¦%ø¸þ•U¨Â‰´œ“N~¬3òmgXˆ·nüò=`+M]ú¨*¬´háËVÀEš wv¹5'<©™pF utßT|QØ,å&>p7–º˜Ýð›V­gÏÒM}®ý¡þ½ÿsúvùÏéßÇ.Ÿ/«ÏOªŸHK„ÐÖn‡¤ [€ÕzÞX¼å±†þõm©¸Z)bák“ÞˆÆj™j·“ØÆP\,òVÎ/±å0,æg‚¬gà›~ŠÍU³)ƒùài°ÜÄ[{žIäúÒ¿V&dœÇ¹‹ü˜MòûE_·+´õ9~«Œ˜(ŽýíS¼”ÉÓÀÎТdÂ$•‡tk\^…ÈcÄtë¿©ü€xt“¿Û ²h<ÞÆß@¯c¶|SŸk~¨ïþœ¾]üsú÷áŸËçÛò³àÄâ&T§a‡•Œ±ÞhdTSÊß+…"[Bý—Ç,À6«}/UcºO~&y$#¯ú<­ÍHF ¤±…ˆG—Ì;ž¦‚ÍŸ­©© !Mû§G¶|x£‘mí o¢ùíF¶õ_”ËýF¶IŸUzbCo4²môYÃÈ ¦älÓžá¢êŒ¾Ó/T²páÜÚƒµà¹"ùÖÓZJ¬GÍ;ä…Áø8I徬Œ“Ô–õãôçÚúwýóçäw³ïF¬okÏMš´'æ\UºþåöÁú‡O0·`4=H‘’ˆn•'½“óÜí˜VlSWdÌ,oãÀz³ýÉ$`¹Z4a1¬S Ã Û ½Y­2 †µ—å…O0qˆýòfÅÚÚsýŸSË·þ1Ï {¥gzñ‹ŠFÄbµÚ‡OhSþá¿å¬ÙÕ¤;èкÂVè•èKáÙoí!\ûŒ(N¼õ?U~1àâòcîòš­Ô·Üâeüd“¸•fïõùæ‡ú]÷Çô9ñýìï£?Ï·ÅwTÕ)IŠPÙ®Jä®ÿFÉÒ/àäE,zÈ ©{&΂œT™Ò¶:W­j D+.ä«@%ÑëbŸÜ…h¦µWÄÈë ÆJa¸E¹å»,$ÐãbÈo?•¶vÓøöægËx¬ã­ÿ&W”lÄ›üIå§2Áà‘Üð#yáÀ¥L 2{õ¿‘S$RF¢íñ *ïñ¸µ§0ml®|÷éSÆÎ›7éÉ,Æ÷ÓB·ÑËF+J.WR¿iϵ?´ïú?fω̾þ±z¾­¾‹¿‰üÃÞ»ñUG4™lþoW´<‘Ý€€ðDiåJŒ š2š©Z1UÞ E#¸ŠxièÄiLÀnœ ™²3{pÉáGZè·‰»dhxÌÒ?åçËL­´K{EGàB›)æKÿ$§Hcè‡Þ\éŸâ£Iùý¬å6Ú~>/–$7®œšóñ6ýQ÷¥g`:ŽÇ1©0 °"\Z«¹Ý¦& åKïÄ-»ÚgíÉۤǙ&õ0£æËè Œšòý¤Õ¹^{®ý¡}×ÿ1{Nþcò÷ỵóó©¼—[yÛ@2ã, Ô•¹8lEZÙ#@…ØŽ‘A(à×ÍKÕ£"`"=Â9Uò( bP.3Œd³e-oÿ½ Q{ÑÏêN±ôPp1.зĒ7¬/¼M‘T×÷wkû-* {_‹Ä÷Mþ ·”\eYd:}”›KTaVƒºØÀŠíž†®OÕå*ÉVz}rÛå‡Á­ôvk˜g"â"Ïà[ÿCå'z­¹‡ü yjOŸõ6~^A ô¥´`œú\{¯}×ý6u§ôÇÌ»Ño çTÞ¶îüI ¥ «]3Õ{„P±Å—ˆ³Â§“Š"±0¯à ËÉVV˜uæÜÔØ_Î=Pùe–çYw¿¨µÙ@ "‰–߉‡`yh{è´e’åž9Åà[¬U¢” )ÖÑoÍ oQË¥w (¤yóáJÚ¥‡^+”Ü÷ü™?=)õòZµÑïºÓðlnɺBÜ`çõùÖœ£‡¼õ xsG÷5‹:œ³u”‹øò‘ §i¾ ¿’*4ç$§‹ú|{§}×½Ÿ;'ý1õnô~å|[wöªÇ/ÀÕLÑná 3|"/wåáu¸x«ÅsÎC @qÖ“³H}©Øâ£FS)Ü5;è‹F"&ŽÝ305ü´ Š‚_½Ù=%Jm ©£fxë ½ô'õžâó?” `ä©f7zm_pés3Ô+ïh¿©þì~Ÿ·Cú}ÖÏÑokæTÞ¶äXŸÿöóï?rjTYçº|E*êHJ·”Úúþ÷Ïÿ÷Ÿ~þÏŸÿGÍøó¿ÿ¯šëžšÖØ4;VH™wݰcóxå.¶¼2Ñh/Vmöú?þ»ºV{ä¿¥så`à ­‚ßBr§œÃõé<üü«þÞ}ýû+®a=âü_ýüËÿ&ÇÈÏÿôÿ¾þmÿ.mŽÑÖ_vûËðó_ä¯þëëüÇÏ¿ü/XË?ÿøÏ¯† ØëþëúóÿøúýøùÇÿýó?ÿãåûŸÜuM sã&Éð’ly—i~‘iôæ.e½›lãïdÓü#Y\à—mjjÁ ·ÿéUº¿H§.Âbä.ìâÍ¿o[Ÿâ¥C¼}ñ\ÅËßÄã•0ä”òw›x1ü­|6`Ê#éS¾rÈ·ýé]¾úM>Pg…t\ÚÿYv1þ­pMl¹uÎ6áŽ-°ÿé]¸o»AÖ%þ ÑWð®¼ô·ò¢7ívÛíØîoï~Û±Ëüçvó߉˜8©ÿœ`"öc¸¿½ŠØ¿n øD•³U1y?¦¸ü|rtÉA5ÕÁrõ­nŽÝá„»6ú¶;j% Z'Ãã` U¸¿=÷DŠ¡,JºäûŸck8ᮾmЦt6…æE^!PÕ™x{ôu»×›v“å>}º:v‡ŸÙk«oÛ oȽž —× ¡Š÷·G_Oþ\{ËwmõmoTž_:½†úOt$Ó Óß~HXÔõaSõô5þéÖ¸¶ú¶5*ÀšÙ@áxP†«mU¿=‘ü"‚¾›W_ÿlÜ[}Ý Àw7å:"ÒA[•ðoÏ@$‘Ú YŠÕ×?Û$÷Vÿd—Tã5< Šz¡ò½Àôó¯¯Ç^úëzüýþ'ÝoÓëò¿­Öb¥ÅŸÿòJŠ_½þ¢>ýeM&²•›ëÓŸû_÷ß–§Šû­£ï[_XÉÿ~ýòßh´þëÏÇ#PÞPbáKJš¬+Ô¾¹¦N9¨[ÿœz ÅIYaµ"Kj–%A¸eúMbˆlJÞÛ|'©-É›vZ¥;5zbýŶ—ÇÁ/œXSé;V¥¼˜p<’UâóHH Ùs„¸rÛ•[s Š[ï5ÖÝûEx …å×!¶ÒÆûÐìSĈþ>T4}³ð’R„^1éTX‚ž‹}ÒµŸD°õj=zïAEWçBó¢ëgyC5ÀÊZ}—ÏØAPǰ×ÛÙÜ«Ýõî¦íg—ýu™ö}ìnÙüìº{¹eÇGy¿3wqe‘ûˆ##‘]¨r®RÜm¥ÅƒRM2BÓÒnÔ,ñÚú™ ûÄràUB|3×/ „‘æhÁÚk>\J$GüuãÊÜšÖn÷ÅAFvEN0 ßšs;‘1oQÁ³ûð‹my’köÝ!>¨ /ÖúLÐÇð/tÞý´wêS¸ Í™·¨hêšN‡çIqòÎö`eâJ Ê~ö¯À8I¶µ@vùå;™j1ÔËø{!²@‘dÒ2*¯?ßÞ«ß÷ï§ÏÉL¿ÿ±|¾.?] ­i~ÁÊÅ‚G[ª,çsrjNÌÊúB^é¹è9|ÄœhƒÚI«]Wxð9sÏÉ'¿ŸIV_…j “‘õœœ€·ß| ÝxèD=µ½¿Ëÿ¤ßʳ@Õq¹µO¿r•9´²þè=j¦ W3ãwá íæÃ¨x²çØuÿ‘ü7-³Úu§ÍS Š±ÑŸÍ¥¬`¦æ­ýøEM Ù®a^ºŸ*|W›Söù‹¼Uãt׉W˜4i¼È?Õv¶ÞÕþò}ï³æ$?fýuŒ|_5?ßW‹‘Ù&è`¨;]퀀té& ŸqŒuJSQ‡B½7ÄBdzUäPˆ¬Ö!ˆlKcì$2ƒakè^D@f×!¹2sä¥KBµà%ľ*ÎH ãÒ: µÈ!ÒÚ¥w®@Xa€·méå…ØœÍTéF“'à¶„­ï}„üÑy&ÄÛ'däë¢ ‘âå˜ní <:à•´”nýƒy«þÿ¾Ø±üõ๲lô=¥€Ù_œò~öƯSõ®s7u?»ð¯ËÔïƒwKçgWÞË-==?QÈ1Ó2xõKOª=Èë‘Å9è’Èhëú=iÊ[/êœÐƒì½­Ò“¬#9Ì‚&Dðÿ‘ï¤7 Œµ}gyátV.™H/–¾ÒÌvñ8 å½áC¤>"·©€‡—ö·k) ‰Ì³ÿIµ$´É=Ú·‹?‡J_qPèüí£'"B¹;&“µÞ”75÷dH;£¥B™ãËgæ–º‡Ñ_gÇUÅ–o£{©õ«œ5`¶̼úeßHø™ª€Cigû]鯽w?g›ä·ÿö˯˜Ÿï+ÎEÇtƒÊ 2€Æ I‘{Ô¤¿t’áŠëVIÖuÉš ÈþàÐoÊŠ¡ß+ˆ@hÏg$€Èsšâ'ßlp^uødy“P ,F/’R 4×áCö4\„j­ŽÂ:9ÌB½µ‡DVLÍVlùèŸ0Q¥¦5¶t‘ i”WaŸãæe“‡T_WǦ>€{ȳª”ÒisÒQyL ÅV=›kXj’UË­û®âWP2ÊM|…—cç©Oý¾ÁËQ°ÐÓM}®ý¡~×ÿ1}»üçôïã?—Ï—Õg§gçâïNKÃ)8¾*”nž$MÂ,Ô•¢Y>'óqg%bŸQÌ+ö”f˜d—Â\êF¨$¯…ÆC ^I¶¬=æ¡l(®ƒf)rNHgA3}øžÉ)ZÜÐt2ð³ ÄÔ[{±²¨n–ÙmõÖ?”yj„çðwòG•_n¯0ìtãçýI¡}Y‡¿W ;C8££°q›çtk309•tëªü0ÞÅ|‘’ó‚ñ"WHºŒ‚zB=_W’æC¾ý¡×ÿ1NþcþÝøõóeù±>sÐÒY™Ç œ5Å6 -CûÛ¹Ý39Ï”>²‰ &ŸüYÊsš)h*Ö<Ø4Ó¡À½žåþJÉÞSKg¹Œ¾\Ôb‡‡¥àØ‚‘C ½êªD»I¦‚C“×KJ/ƒ9Ñíùç›§_Z:×ñ5ݺP +r™²ñ£Š/w^Tþ£cø¸kJWš:ÚêÃ]Dò˜Is9Ý3áŒLÊÖ¥¹\œ ·‚-vë^Á¡å¦<÷ñ3YÔ=“8XÏáó]!yð`”S}G{§ý£7{‡ünöñ»Õó}õéúL†Ì–p“ã5ŸÊs È‹’œdãÛ£ˆýÞD E1†¤µâ²i¢ä´¯ä¿‰}•”ì"r"¿®Ykrüá왊»¡IJ|N0½&Nóɵ¼€[«uPW FZH Çõréö[óªãV¨m~ôNi(…‚"$Òåèî3ÚÛà;Há ¤ú9­½Ó]æ,ÆyT5I$“UŠ]’“Bäœí `á²£&èý+ÙX ßÍ)£_S¬(Ý9ǯG$™K»èϵ÷êwÝûÉsÒsïFïVηuçßïµ£Y@äxìƒx›CÁ)Ä2An1µAä+Éè=¬GtU˜ ,müKøL)‰Oz˜´ò¼þ‘ó^Nª•§ðµ¥H6?Þ!ò3HÏZkOkv´HH£ü‘ÛVìuüÍžî®5ÈÆ¨4‰¾ïòKßpù‹äE%§H³Ãü¸ Wì?;ùÒàîb¥G%ÅÄœŽƒÅµ–ÏS.68°äõ–õÑKªêÆæKªßÚy—Pû­í³ÿµsž»Ménñ«úýã×vƒéÎê೺¶WÞÑ~ÓýѽŸ:/¾›øcøû²9´·¯:ïNÒSùOùRåÁ”«ìr­j|?ØeŒ0«=¨°G2‘…ò~ð6ˆ”3ƒD寧éóσ9ÃH«„©”ê ÔúÜûÁ]¨3jnQ)¤ü!> ›2i¢í÷{ýcø,\‘D6yï÷æ‡úýäÇ©z¿WÅ*K]ñÏö¼w©á½õ?U~P*yòë{,½K½Œ_ßëhæZËE¾ý¡~×ÿ1}NþcúÝøåómù™C T[Bã®{ í@ðÌ£6wwTqaÓ *U²!Éã|æJXì;E ‰ƒ{,ç«ËåüÐ7{],³j~gõhËæ!)º(\Œœ°kð˜V{’È“ _Uê?Ë­=F}¥ö!Åxé *즘hñ"?30!­îôÇ>xys*šW¹7d‹YF~8¥ýoš÷_ãà »tÞ‘=QïãMvfªd¢"7žcŠIJÕr7ݹö‡î÷þϹۤ?§~û¹r¾­<»ßÁTU²‹°œ9”È4àÀ5TDMGÐnSw,õ x¥eWoŽØÿr O.6=È#ØV¥æÇ™„:”w¸š;xb¢¬Ö¾SÈXa vÏÀÛIe¯=ä;ØXÿ—@Ì!"o ¾_ÚÙ½D góÒVç]¨©Ï‹üQŸ)/P{:¸ñæë¸é\Χþä{Ó*Ž6Ì›3¹Z´âìh3ŒòøøÎî¹'u5¸˜OñÕŸ Î¾œYÛðùŽc>C±Oõíú}ÿ~ú¼ü~úýøýòù¾üü›}SÔð{õXVÁ“ƒ±ÏRmxƈ;'5É´^ŒDªší¢Í£boæ©$0YÞË›F~¾Öb3U¡ÝÂ×f­¡â àaù”‹ÉË%¯ƒ`Â{Üô–] ô] ™gïãÖ^KõäàhyyM·ÞµÐJÉbÁ;/» ªÒí}ìÇ®…†3r/>ÛlS*â„nñÙ¦I,@ŸJ¿µ'7\žÏxÊû­ÿ©ÒOjÃÆ)?óLQ˜¾äú9ú¬ÑÎ&ÊèíÔÞÑþоëÿ˜='ÿ1÷nüÇÚù²ô{TëèáÓT$ÕôË€á>Óë>ýÒšJ˜å“ÅÊÍɪvfS¸>«Ó-S9Ó©z¤4r¿kP\®(Šf¡¥$µ­àwhÑ@‘Z‘£‹NíÅ©¡÷ ‚†ŒF7´è[®“ËzkÎñ)çÍréŽX@'äTéå"}i*=©i!/[ásð¸Ÿ!R€ ¤,[áSyÐÈä ¾î\æüK ¹™Åþ#8{¶/àŽ¢/nÈKÿX5pœpʯ°¯^Ì6nãÇ~¥d*¸Ï©?×Þ©ßuLÞ.ý9÷ûè¥ómå¹Ó”' MC4«lÀ°n`×G Rþ2×OVK*¶u2c³¯r\;ùá"R’F¼eG’&¨Xðü JBö¶§¬1âO+Œäš³ƒ^© RRŽ®’Vó1¤EvoQ^XʪEöÍ!†æÕ ®ûè]ÏÀ‚o×Ö[x¥5 ¥ˆ¼ÇëõgèÀ{Í–ã§¶õøýÔœ^ê€aŽQž·³VaƒW;Ûk _k'·[÷ðKsxDúMzðWÄà”Ki·ÑR Ê>\ëMy®ý¡|×ÿ1w»üçÜïã?—η•çNÓ ¶ ݽ˱¸JÖ<;>+rl)ZsK’‹ &²EÕÑ ÊQŠ«†Ý¢c²¦À%œÊ¦šaoE°“ªßS >¦”|I=Ë“tËA4™q‡¡é’njņ+Ù r¼¾ÔåLÑl…£}üUð<ÂPoýCÅÌÒ]eë^~ŽoèÄcUÌ„cü¬"àŸä&³ö»ú:´Ú(Ë”Ë UÊÛ N5ní±bí'Í[ÿ꽂ü*½ú.äÖ„ìþ2z8Øð±Œ4.Úóí½ö÷ÞýÜ9Ù¹wc?×Η¥çmSgT‡êŒzË=ŒT—£˜µ2áCѤ>ù/$Y©.÷"äWÊx·òI¹AÙ½#–; s9XÒü3'1¤0ßÉQ”‡¤@¤í‚x”z^ä¨(s$bDKjŸòûÒù¬—æPõúA¿tOíº,èÀ[¤_Ä]Å'Ù7?ùcŸÃ Låµ½úHè¤^B,®wê z'Årk¯qG‚š4tößTþ©(¨7ù»Æ}å^ï¹ÜÆßa0•k}Äyªoo~jïþœ½]üsö÷៫çÛê³w¾R]ÝZ–€GAŽ-âØ©ÃC…â;µûä½!Geù 4ÉñLm™R ±1;¾ ¤W¦¼MÚrË™CWîðáǺq'Þr8Åí!Y2àæc®´‰ôK)åŽÈf@§Åcê}coí±Œ ŸI1vô/'QUr‘”ÒE~Ò¤@@z—ÃúsüêOá—Ìå/ÿÔw6ð×u¡Gq'¹€DiÞÚwÅ¶é Œ†[ÿùI§ÌWñ¹f”ÕU÷Ï9|³C'uý¦>×þPÿÞý1{»ôçìï£?WÏ·Õg5Iò£F\WËý_Òµ {ê ‚K-*÷À2Ë*ã}dÙZ#,ÌP‹ð’º’¶¡J©i¾}ÖBî8žŒpÙ€ðœ‹Ö•½(sØŸöÐbHîìü°¾’RžníÎX°aÞú'%NSæ¼ÈOʹÂóÆœž¬ÈÏñs@^»–9áÕ'Ÿ;ØÊø¡âzö]!•c¤³9¯¾d¼U3]zðQ´ÝZ¾HÏíRÀwXô2ú¡å“CÖËëPžoî•ï»÷“çÄ?'ý¹x¾->]ž3ü"‹‹ Î4p"8Û3Ž6sá9ÀŽ”ff™ivWµ‚ÜÀ°‰‚)dßŘáMºj ÈIß§dr¢<¹‘,ÂÇ Œé‘çÔ ðoyhè7=í#>øú Ù 5ÒYní©Ø'ûÉSðýgy2Èa $~¼ÉŸUþÄ´b,ÛðNU`QƒM°W_Rš¾*‡ÞSÖ”6‘<Ï[{€O'NÍ´)¶îå³HÏa[Êë.ý”÷œè¸ð/£—ï.Ñ”ÃMy¾¹W¾ïÞOž—ÞO¾½_<_ß‘\ymQ­—ºå77ù?rŽ7«:îä(Dò#G6ÈÙbTì©=Õ‘p]sù$ûNþVd×ridª—k!,z[iU°³;¤ËÑŽÄŒ£’s–w•ôx¼ ©ŠxSŽ¢UvìÚƒ%ʃ`†[÷Q +ª_ÉÈ»H/Ÿå`€iK}èÊ!é¶ 6Õ½÷9kù]xÓ›R{(·ö¤gdzW˜Ñ?¿VV¿üxWW\?w*Z` /~ØZð$¯ü»%çCkgó]ë/ß»›µCt7ë/?t·j~¾¯ºã­Ú :¡lœ8™gª«vnbËý$ÖòZ‚CN–’ó:®G'i¦XV‘ü¸‚}ýcqtœpµ’¼Jº×ËShgk‹£}b|C[8¬ÆQ¾WÈRè‹Ã ßå,ë®víåìJ|<—2\ÿ î$*fê>ÛåWjå®îã]õ1~؈&·ñÇÅû©?*<*ltè¯Û¶QŒÆÒ-·örü{Ã¥\úYÍx§—z‘ŸxnÂáJÀeü u1ÔayËýùö^ÿ¾?NþcþÝøõóuýÞ|êç3å89ZdEËæ|²K@`Â{55@™³–;@U¥\6™­Ó¤°ô£=×Ò-ï±ïžÅb'.§ß#E\Ю•µXHr•û§j€9þÒW%Ïb/òŒ$ml¥àaÕS|4.ÍÉpcò `ïZfšÉëñðªcÌ€Áø>TJ].¿NŒ{™vŸêxV_ =Æ'÷ †ô,*·ö\Íb•D €Ÿý•È1œêE~²kH“ÛfAvîã§ìMŽÔªD¸§ú\óCû®ûcöœøÇì»á«çëêó}±‹Å–3ÛXÆ¡”ùozŠÈ\>еGUF:n53@P·0f9E§¡ÕißÉüÑN>Ëo*f²zu•«N:¥¤‘BîuØÓ#Á£º•®t¥>ñ¿ºH-­¢Èðävk.g·zùè½€¾œ¨ºQÊ!<‰°õ°LL?øLك̼Ùþ>t—àôÀZ¶´jÙ dË iÓ­9ñÙàš_E/®û¦â7€ÃËMüFˆœAÄdoÃoPM0Bº©Ïµ÷ÚwÝû¹sÒû™wƒ?Ηug¯'ÒXÉIÍšlF£,úŠ{Ã"÷²«ù{1†Vì}‚xåѽ`ÅPÆ`É–bÆ‘=Þì}Hô»€Ø‘Š͋¦/቞‹Q˜SÐéPz$”»¥xÉ÷w\íOI—XeÔ¯’Gß^K*EÁò+óÖ?ÄÈúzqÞäÏ*?ä<+ÅÍ?C`OD O’ʦ?Ø¥àyÒ\‰â ãh¬¡õV;(¥3Ž×ѹf²òu:½ðú½“ï>p¼ŽÁóÈ:±úÜåíòþ÷É;å?&ß_ì¦_s#{éÙf“,_3ÌöÑ“U“º¹Í‹½+O Üe•’ͬl°0È6”áËWêÎY¾³¿Î®S ¦À4uˆ®ß•\þËx#—Ï$4P4;桹£¹W¼ï}›·]ö}Ò_~Ü~Éü|_rœO6$MN¡¤[—·Ü|œOI_ošœ"ßãTÎàå;ÂB]ÈqìîéTƒGñÇ÷ƒ° ê÷ ´O!®£!çüV˜nÕ–´zž@Â3ÐêSUÂä–®ÍAœ«Q‰oo½¸Bsåý^.ÒCŒZ9kfÝà³z¢:ô›–Ðá”ÇöoıjYåÀXÿ|3óúhùa†p¥o맃øN溗þÇ\G’‹ù:Ç®~'¹sðµÎCw[ë]ñ¯K×Û´ý8Áݤ¿Ü°÷%óó}Å™¿ÔªÈÍÕàÖEebö*¦Ö_ö,‘eÑš†f1«‡æÈä¶^Ð×–ü…qëNyë ±ý’9RRŠÑleA䃋ì«$«CÈ™AjŠ êæ 6¹>ÂÑ=íÅQx¬§©¡¾­±ØcŽË½­çGײ3…}%º9É‹J.'\°#p6„Jà`ûø<ö>µŘÔ‚—x%“ƒ±Ÿ.íñ£×‘aM]¼¾{÷è- œp¼\¤×LožFØÚnôÏËš<¤ S§î|ûMõg÷~Þ¼øû¼ÃßWÍ¡½}ÍY¦ýÔèšÞfU5¸j–ÍÌaR¨“˜V{È€ ÝÜTFuÀ1J²\þ!7>µw™?¯ÀÙ¡ øÀKÔV·È¤lìôbëÀ&@S}Úg(¨áÒ´\õ aP>éÖžõQ5½Ã.ß?Ù»YbË7ù“Êoh…ÚÞ?)~ÇùòóûT_¢2Bk{—ŸæºLÅîGsÎPv“qÓ½Ë÷¡0#%õy‘~rÊÆ!’3.£—ï…z$\5ý¢=ßÞkß÷ïgÏËïgßÿX=ßVŸ®ÏªÀG˜u! ãÆª =©s^ °.»*¿EÏ ¿¬¥C`àÉæÓ:,l@o‡ì^K“¨ðú°K¨Æßa&Ø¡3T)o¨QþeY °djù‹íoêSpažtpíxðÍÑw†tÝN'ß»Ú=l€|^9z‰c¼«‡·±SÖ3 ¡$;¼î8‘ˆájPLîQ"ÿèÒ¾AåG YŸ±žÝ·¤ÂSï§ÜNxùÜ*@ ²qê9ô¦øG²Sb¨)6Íùæ^ñ¾w?q^x?ñ~ðÇÂù¶ð.¹L&a±$}/…=0ñ…¼ê•¨ãᨘÿ]Žhªjž`#Õ€µ“¸•Í¿Þ:éÒ³¾Á¢Šü~ÅÉ`K“H]" lÝBA¸¤y[ø3ô›Qéõ™bD KÕÀýÜ ÝŽUÎ훣 2Úʪ÷݃ÞJm @lj_T|IÒã2ü>0… Çiôdù ?Õ'ßIu,¤¶?@_"Ëœr5¯T×¾ýÒê1õÚÞúï*¿‚Ú´›ü9„ß5—ÛøåÀŠì¶’oúsíõ»þésòÓ¿ÿ\>ß–Ÿ°Sÿ3IÓ7ªtàJ#õ‹ÅŠBÄz ±BQ¸ £‰qHêÍXž±ŸõÁ ôž[¨¿çr ­š[­?¯6À š}ÔG€]Vf•mŽgzd¥É•Uó¼µ—Ù%ã rÞú‘ä;¥»=ÅLLfQɼ Ÿšcr™úc_íÚsÍåo½Ÿs· Îý>øsí|[{‡)гFñÓÊ4‡ˆ`7V‹¾WÑM‡I=h¨Ÿ]ÞÁÊ/åIŒ¥=`‘zHÈПS[N~Ÿúßa™&?®lâyÙ‚/3,–÷Ö9`0mòJU ðC¶A6ÒØAR/зæTâP¹^Sí·î¹A7 t?¨øDÏWbä>|°2ÁÏÊïè÷®>¨â¸ JÑ»L¹JfE²L’£ý C]+‹KÞõ?Uþ ži¼É¯¹"´Îê¾\Á°§Ïª»ö~¶Ö¯‹î]çûÜýì¿.s¿Þ­Ÿ]y/·ö;”:¢ Ð»«ol”Ù0aÍEɨVcÍê_³&€—øäW‚8ýJ´ïb¿(†§ªŠ¬Më„B*VËM#¦aÍ.³¬…ò;/=Ü'? \†ó4pÓeœ)·öÊ~ ƒuJõÖ?Ë”ê.Ü)?ÍäC†XŽÏñyç ª'< ŸêKS³Ę,óqÝÄ ~P³…ŽöZ )lQ[âè&ä¯Ü ½^äŸ0y³àm½Œ*^ ÷½"fúóí½þ}ÿ~þ¼ü~þÝøõómùé¯ê]v\Ä‘Á,Òª¦h‘Ÿ‡k:ðhãkµrÁh0M%PmYÕ- ÆY>’+Ge£ÖÒk€OËŠT´ØO¿Rlˆ¿=(WÅ9™yàoWîôÞÕ%œ@nƒ˜JYKr­ë/úA:í{×ä@*Ùp0,¼O±ù€³À¶ÿ6æ—å¤U`â,.ä–)¨¡$™ñIžKýgký²ÏƒvRÚû¥ï¢rw (‡\&«R`9åéÈ[Âú‡Ï`-•¦1 §³£õ§Æ/}ïóõò’ûÉvãÞWÊ×ef̤á4Nd˜ÈôÇB©RÓ…Ø¢¨‚è@4ž Ôùް¸_7TRUgÒLz¾‹5}r™p«?6=iõqƒUEÊ_ŒJ2vy/f³\*X SKkˆ”¹§Eåêëû»õK‰ÀNë\úrdRŠHáóýìÊ|‰ì›,Ú›}ìÊŒI‰[ªoãÝi{¼Ý ‚1nê{BW …³}ªsB …üÙ¿©sS ÷C~¢I2T™ÕÛøqJj캅rQŸkïµïºß§îþœù}ônåÚÛWÞÅì”Ð’zÍE¢øì˜fvÊæiЪws½Vùqa‡^I6¦“&û.€ûódØÔvG°\ÐiƒCÞÝ ýýE ða! CT?Šm*añÖ>Àx¤é SlïŸz¹Í€ÑÉã"?\ÄI½P¦×>~`‡Â?˜`»þ(·”× ¬C S 8 °èFY\Ç®=>Ç)¶˜ü/åÖÿPùyê§z“ŸÈ#À•ÉØSŽñËÚ”¥5¶xÓŸkèïÿœ¿]þsþ÷ñŸëçÛú;r–Ɉê¥ÉFv"O6¦½åéÏÒuÖÆãFî­ gÄýT ú/ΰcKÞϘ¼Õ¶5I?DIÀƒ±Ò]Ô¬:i  [s˜'°­Ðÿ­û„°6õÀßÄO*~ŒJÝòû¾æ‰ÊÂÙØ¸¼ö”ð·ç†»dSgZ½µÏJÿ•‡B]ú/*¿b¶›ü`“ò={?Çb&Å£TÍ8óúóí½ú}ÿ~ú¼ü~úýøåóeõ] ?0 Â\Až’”¶º ?1˜JÓUØ@Ü‹Çs‘LZµm¡XÜ€÷å¹È/å´N]YxŽôòdTT¬*é ‚hÊùq»ðº+D–Ì8‰ð«€—oíºIÔc–[ïr½ÉM(»¸>E!dWZ@9-&$Üvc‡ÞŒ' ÀôÄøT6ÇeÂû·<©8 3®_š'|>¤AÖÜ/½á¢œçá"¼Þ'š-æÀë9n9º3áƒv(îlîï{ß'îþ˜w7x·nåíëNíRpÛ:i¹kê(šZ(§Šš¥™U_3,}²ð('dÄlV)òµRµ"Ÿ”ëúܳPûqÒl§)@@>Õ¼>å¢\}8Ê_”ùS¢íù\åf#T,O|k:H>GëŠåÊâÖèùut]¨gKµ“õ°û;«ØÀ9[€Ç :sÇ6$ªµÞU–åMB~hàëi&'˜ÜzÀ>ž­É”“ç.ȇiœ}ó8ÃGaž’dHZ“œì¹ïÃ^­;ŽuyË:”æZï*?úöæ$÷“ý9ì—[)‡Ò¶uæ‘o `±hÉèr4HŸ„ÃþR,}u9LòU¼6§»FÅÞ˜¬#uü'ð jÁÃÙxªQŒægïSe/z\dÇÍJ-JÕ,¯cä À}«äu*Î5?ïz?&nþœø}ðçÂù²îž|d€:&Ç{Ôb“Áð¹Pž|df:,†ÁÖ Àü«B„}ܸÔhÛç¤\7)çRÞÅŽË’O+“‡³m¹*ñ#âðÐJ"¹ €]ä±øxu5¬–ð"“5 “Uì·æ O=r뜱B´ôr“>ªôZìøx¥·Á“¨.ó ‘íå©Û”dRÐÒÌúä#C¸ûÊ­½WÍ뽨ð¸‚c¾_Iøh¸KÜçÐù\€°·x‹§æŽæNóGïnæéÝ̃?Vη•g#-ì@lÊC¿SÓ”§–Oi&=vn!å u t‘£' ¤-03HÞ¢7,[Lu3؃.ƒ¿ÖÐKäÅ‚IpD–ÿÞõªf3P¥Ä¨.¿Ì;³Yö_a•¿0¾À5O¹•ë:(Ô€<ˆ×CxÃO~\nh1Î^¿ý°±)pHOØ®4ÌN‚󷯇…œ“´`ÑòÙÔ·"×p|{ëzfdEƒgè\¡¹›bðËÍ醭­œ¸°åSi®õ®ñ£ï}¾¼än¶ý¸ÝZñJÛWÚCxˆ©‡ÀX¡X ¯ä¹'«;OËHšý$‡õ¢J äRÿd )x¨øâ|°£áøVž¢¡ßÅç¬Ož#ìŒ\KYo±Lfì|€§©.dödI²rÎñþÁïÖ/rÄêƒ)•rë[¦AÔ R~XhþÈþÒ ’i;)ëû6t™Q’˜k3•Ÿ§8÷Q¶O\‡Šàù³`÷d¨>ŽõÖž;Ž×ì­ÿ¢òk$¾Ýä/0^M¸s=ÇÏ9HQeÕì¨S}Gû]ûG÷ÛÔÒ»™?F¿-œSyÛº» ~â*wY‹Ð§GÈs(¢7ÔoàÆ)ì¬Fd ©µG~+ )õE²AÂnÔ7¨ w ¬ÝnåbfK> 0#óR訞€‘oXÃHF;“Ѥ”©üÖ¾½“ëc•¸ûîIl’5¤HJé“J2yâ˃·[(‘÷f8Ù”‡)%ÿW.íá¼ír÷5M½q­- Š÷ hó¯KßMEÇ– Ñ‹nØœ‘< Í¢þ÷˾V3Wõ<Ôv´Þµþ:úÞgmý˜ô—÷¾f~¾¯¹VQ1“Až—aLšqÁ*60¬È†´×┳œÇaPI±¯+eß)Ù"{ÿM6-RË?z[¯Õ4ºò™®d?ù[2WÊC¿Q€àˆÃ²Cº&°õ&¯×j›{Bž–iÞÚHZ€µKÿè—,o\‰í"Ö‚G>.p7~À Èw&õŽ8|è/“FÍåËk/?.ê.ãÒÏ3t,ÀCÇKÿ fX ñ×\äÿ ¯hPEÇøÁåè»i©Æ¡>ßÜ«ßuLŸÿœþ}øçòù¶üž Ú=•V.Ê„K±Y ˜ è̲F+ræ„ç *+$äú-¤b7ã'‘Õ ­§Z)n$T,˜z|иëXèJÏ º2 7•éʱÖ'ÉI‰Jóö2":¯Æ[{®k åÅ4.ýcgcÄë#ò"?àòû`4·wLécü(-\[ò°xÒÌ?ÔÇ36W9ÃãTm]®ùÒ\/…DÜ©Ž|éžÀŠb¾’xû7B{¸”÷áëµ -¨1Žõùö^ý®ÿcúœüçôïã?—Ï—ÕçÝIb·Fð$*ð'“/l+YºRy_¦ÈjЪ(ð* ”£¾«1Š›+Q)ò†€†Ìb±·Ú)Ÿ‰q¥pô“Thí£ÒŠcŒ¬ü–±¡¼sò^ˆJÈ(@8o” ²À¸µWŸõPʽz韔 °G0ªJ/?)•y¥êý}Œ_¾§\@5·±W)!ÒsA…vá.JÂPV72^ì»æ¦>5{º®Ò>'=àDFyÕD‡¥‘Iå?ó¹Eß­_ ^©¼)¶réðËI.d^Å·›ì/ê!=Hõƾÿ3rÊ%:…6rK> §Íy5‘'?ÉZ»‰"Šîœ£}¦®Y:«¹Ýº/ˆ/Gøû7ñå µ«k^œ¾|øà•ûí¹ö^ù®û}æé‰w£ß×Í¡¼}ÕÙë]ôç6Þ}Ã^Œä ŠYó©­ƒAô«RX]e Ì<ò.í;|ó ¿ç‰9Éë])̈~Á¾Gëãè“!(…Ñ/>äRŠÏX5öô *#^ã`ÅRGóªé± n”~ëä6­Â®zEâŸÜÃfž>7ü,&â-šçÕG¤ú4+4SäöLIXpóÖ~’ ZJ*•מX¿Ê%#=Öy POáöÔ¬_Rüe Ù´Ò8Iм5ôF5´ü~Å·íS¸­äL·;…¢¸%Û(fIË›n Ñ¢F¾Üé$ɘ%.pÓ(­|{<›ì´j€•®û ¿¦• é"} [2ÀTŒ“Êž³kæ"gŸµßµG¦f–Ó“³S϶D‚Å€ÿ7hÉÑžH$mæq뿪ørÆ»üï)% i^†KR^z#µ‹ú|{¯~ß¿Ÿ>'ÿ9ûûøÏÕómõ]¼ò€-gJdó‚Ÿ&iV±TÌ+Oü®ûÇÒˆñqkWÅÉŸA·ðHXîo(î²Së0’"›PmeØê?£DžU3®†’^ôùЪðp)EǰͨpÑwk½4—¦˜3/Ýz'¦ ÉÇXÜÈ^ú¨Ò­¯o÷çàAæËKË)¿éN.QÊoCI ò.z žíõÝ"‹âŸ[÷UÅÇÕûMüö‹ !¾ÒXoò¡ˆ-Ù•zïÔžkhßõLž“ÿ˜|7þcñ|[{gЪ¼¡Ðµ¶+åQ²æþðp“–sîVů¦†à±9x´âQ1‹Hl·,ÿ?§?<ØgGš‹ˆ¬Qb}£™('ä ZücN©jzC}â€kÝÊ­=Þ\ê-9û§x pµ®°ë§ü¼š&¥×AyØñ[þ„XÆê-ù}èO´”ÔÇb„1KÔLµ[{ %ä­Y:û7"ì_3cÒxùÕä äØÒ9~#â2¢©xêïhïôïû÷óçå÷óïÇï×Ï÷õwp̰ ô"\¨;“ÄÙ™(ÍS_(¬»0†šÖï ,¹áúƒŸÑ•lSp¢ÊòH‹J}«˜¦Âê'³oÙôm&uK«/ ö°AõŸá ˆQƒë3Ô‡LE. ±¿kW Ü>î°ðp*ìíAÀ æ¡îÄKÿpÙ¢Ào¯ÿ§übª[‡å ü>#DSˆÚåJüTŸ|—· “eÅ cЦ*Ù÷Ù“€'GÑ:Õ£û©ÒWrÍÒEz½UÀ±™m^£“ah‰í¡¼½ù©û½÷sîváϹß®okïHJÍ›!®+¤’®¶Ä_šB õ->âaÎ*™Á•ÉO æÔÊ+°q—)Lþ¢•ÅS%(¿p|0ô ¹"h–+ú6~Éör¤õÌ’—M¯×±¥7hä'ëpjóD˜vi¯<))Ö|é "|ê´‹ôÊ)Ä“UŒ;;“÷ÑGÅ­™%zhOŸA‰GEI¨BÏ ¥RÆ­}Æ’LÀzÕq뿨ü…$Îy‘x´¨h©½Ëøñ€4EK½_ôçÚúwýóçäw³ïF¬¯kï¨áDöDÉÓ‘DŽDUa…5±%ðpàHÐÏA¡#(Îþ±"<â´] Œº<ÌÔïæô”@ö®ÿÄr1u”“ FÑõ=ãž‘S¢¨ÿZ Þ~>k:· Ù²®#œÈíÒògj³FZÀî®wF:@?_–Á§ìZ†ìVôøýsähQ \Û¯*ÎJË䎬_>Uå ×NqàÖùÎë¹Ýºo*½&“:”Szª‡ˆWÊ Øn£ï¿²– %Î;•çÚÊwýsçä÷S/œS}Ûº»”o&-÷a—ë~Ó7:²®}Î#pð‰ÚÙ~šPŽÀ:¶¢­Jª‡cçaá"e®É pžuCž"Rœ(C|Bpr¦)’e¶MBEa'ŸüáÈÄ ÓåM†ÆESE„ToíøA×Ö/ýsž‰šå U»þuÓ’î†ó"¿Ì$òCi¡r7~VBDŒ*ym¿«3'´ ¢Œ…êÈ”4BÔri߀îèò•rŠKÿMc¨“6óÚˆ¬2¸rÝ>~ù1iž=^ôçÛ{ý»þùsòóïÆ®Ÿ/ËÏ’ž`†¤°¡XVšØaÊ,Îöу”愯ƒ"}¾÷ˆƒ¶,> —X*‹]!áט#>dޏ{§Æ5ê%[\Ì衵9`U8¯ ¨sAݰJÑìQ@¿·nœk½íú.Ãwíɱ“ëFÖ|ëŸPÓLd)/À]|ùŽøšPþ¤B|_ô'ÇRÃϵêðwõü–F—›óI’Ψní;ü¼(bŸ·þqØS'…ÕM~Øá1Û“ñO㟠·ÐÁó¾éϵ?ôïú?æo—ÿ˜þ}øçêù¶úr:€&ªXÖeZôÓã"÷û€x‡ÑŒ_:¼Í™Âw€ó  öâ+ù:Òƒ½ ¨±¬/KK$ @vWgJ8ñxÏ•)ïéNõÁ•ïàî21ŒFAîÀs¼5'šDp%ŽÞnÝgÅb%1½µ›øY±Xå|êór؆Ÿdý)g˪óðêSR ±ûg,o6mé\ìÄÑÇ¥=ü•r÷¡Qô³ü¶€å´ Tñ)?7±Ì½üÇx üø[ÈT[PðtªÏ7÷Ú÷ÝûÙóâûÙ÷Ã?VÏ·Õ÷$­ºÁ‘³M_ZZY£ø$ÄVXÌlŽZ¢ÙåY_T7“ãR-™&{± kx²>+xE#*,gV>R¹ÇJÎOÖ¨Xñ ãje»sÕ’–»J\ t¬Yw˜fätBnóÖ\½üCƒº\({÷ìH¼œûEü4Tü¤k~­ïÏáS·ÀûLž²ù±Ã?Õ'ßñ>ÁF›Ì”Õ—E¾5—ù‘'Ìèu”Kïø pk†]tH/ß¹ˆÛ“QïG¯ÙZ…ʦ¶O7åùæ^÷®ûsî6éÏ©ßÆ~®œo+ïð>ñ'¢¦lÌzà[œWê|*¿°áÄP°Ü^xóÙÖò¬FI²ÜàÌ<Ⱥ2 Ü…) cî‹{T´$κXÏÁ÷$ûjn2õ«òr-#´ò80‚¼* ¹aV«é„P K{’gä)*A·ª/×âÖ#+­ ‹¿8ùm™%ùd¿|Ž_®I óäØ.õamüTÕ;Ðk¤%y6£ÄDR}´—k¤%5ånýw•¿føÀnòÓÐSÒääsüâ®MMn>õ··?õ¿÷Îß.ÿ9ÿûøÏõóeùþ'@$'Åæ­ŸµPþ3,HŠÙ ‘ik—æ”|A8— °ïòÿŸ´3Ù™u×Íó¼®â&“eõÍÔHÈÀÉri û$p&¾ýð!õÕ*QÚu 6 ¯ýý*QTG±y_Ñëîùþˆnõqß¶/ÿ1ýnüÇòù¶üŽã´*ÌS&¥ÑX%Åþ©ò•Ý¥Ç)‘‰Z8ž§ÕÕXH}å½(_¦%ûN 1/JVˆ*9kR´º/å3Ë%>lUÀ‚Ú øPóÀuÿ€ú*VÀw3ÎÞ&¿/V¿™h¾9@b‹Óºßº§H—×ëÊ9>Ä/*¾4ŸV‹ê‡Ï±Æ÷ÅvåÔ‡S^^/¥ec0jMA¶êlšbu¶ï@t±ÙÔAtö?Tþ ÖoºÉ?~XC(ã6ü¡ðb™¥4½ö~¶Ö¯‹î]çûÜýì¿.s￯Ÿ]y/·öŽ´ ¿Ê1,„2ZÀ˜•;l!@°6J +‘ˆóVn;)Aš1¸`ƒÀ‡¢–K³%ûzpé +2“iڞƇŒõOmˆ!7  )[R Ÿ’£*?O9§-Sß\nЦÉn/—îC° ¼–ÊEüÐTü¥ê“3ò9x²N‰'&£o=”懦‘nùc9ƒ„‹ie/g{æ”Ã-9:û¯È¯0t-Ýä—… ‘Ïçx?Mra­{ñê;šïÚ÷½ûÉóÒŸ“¿Þ/o ï W@þð ™V¤Ÿ*gO£*ÀÂø-@tÚ5ŸX¾'Í|ª'ÀÚìgü¹…í WN á‰ãvà¸ö^(`§ò:ù¡\½veÅÔó‹âSñ Þr^V˜õ#ðjº47ÖÊ@l¥Üz/p®!ËUú¬ÒËÙ3ß0TÛà3bx º]\^yšFÇ–ÓóŒ“%Eö‰Rí3%àšjÜç쿨üÕ¸íñ'õ3#SÃJÇð)s ©‰œ“~QŸoï´ïzߦîg—ýuμû¶p~vսܺ»äšvDaÍ0ûsPF#+<ƵHWœ‘”_ÉZ…Ö<š"»'¯¤v˜LHânI# WlñnLt¤ëëÒÖ˜ÐúeÔ&Ù®C¾ú¬S¶?ðj_*°[–y°Á펠M20(ß?‡£ÜIíBöò+0\C3Z¥˜¿Û!Þ?Ný)0L2ºt®"X[£Çtk®Às³îÙ{Vؾ\-Õög„wMŽÎU©³ž\~[LÔ2.Úóí½ö}ÿ~öœø~òÝàýÚùºö¬:tPåÖ¨˜( ,NnnC¸…¦}î&%€ù™8¹¼›O?¶e¢–— Ú±. –ÀÏJÍ VÜo¨•µ¸ÀÃjåŒÐ¬R—…zŸð/ù˜U~a(5/81òóPZ¬ÅåÚg­:›ræ[ÿéT*8ꌾՋ¿V0~møäðGðÜs}î€M}Í~óÛ`â½ÝË¥=ü,@9CM<ú'K~¿©÷ç"?ÔÄòs..@?~p³,Ûù¢?ßÞëß÷ïçÏËï§ß ÿX=ßVŸ­OÐõ*Ø3퉹Â/Ðà×õ¨k¤ ÕŠZð-V‚X=<ð5p”4ˆKÆò”°úy@®˜~—H Ͼ'på’åéXL.2¸6æJk¬Qþ\îõ§„™ ¯¼R함\îÈ:ë¥uTâ*yí§û¥w²tÈ-}¸"½ôdtÊÏë%ýøÔ?G•¹jP_ß8 ÚS¶Âöæº4ø‘ËP$¾³½œN‡˜Î­¥â†(3®Œ'¡®S6o*¡\Æ¥«¬>2ëc>ÕçšÊwÝ“çÄ?&ß ÿ\<ßß…é‹”ðôÔfhXý€ÍQ{¸¨¾ä†¤lÕeЀ?£nÏ=«yámBªÜAYŽ“†Í‘ôÁí;€ZS1‚µ=YNj¢¥n(i¬PhY~$]¨³ x{N~?ÎYÞTa[{’%Þ”å¸õ1‘ X„^þ òö5R·müÌ5Ü—±•±Ž’M˜`ï´Ž¢Hô•:…%=ÛãG@ìæž.ýcÓõ¤ìjo{ùõ¦Q«xÿ$Ï)‘çE}¾¹W¿ïÞOŸßO¿¾_>_—Ÿq,Éa…ePŸ”º^Ox}Rl³“E+cm9O”á°Yër´‰±=ÅJŽËÿ FMSÛʸM:©9aAÂ4ytR6,ÆH7“UyZÈòY_Ôrõ5«c!ï'À|m.ï`—[ïœ`|MÍȧôJB¢÷ýq žRÊAÀ®åúùT^ LÐwî ¼™³h¬GõÞ¾‹]šôÁÑ{¼ôߣÊ//î<äï€òöŸ–¾šýøå»˜ T’ÖyQŸoî´ï{wsç„?§~ü±r¾-¼Ãó$&L¤Æ¥†¹‚Ü €¥PbßÓä•-ÁSâ ?Ÿ¾„Í`!%¤„:žóª\¡Ù°“KW¬ù›øÑZÃ&r€—Ý ¡Ýw®åÌŠ“žï¿…×° “¨»ê“÷±k55¾Òüwý­:m.+,ÉÏaž¢Ò$Òe¶>ÛS2I"}/¹Ýºo*¾âàõ›ø$ž’~)s» ¿ýÒ(o•eLîÊsÍÝ»î÷©;Å?¦Þ _:§ú¶•÷<–Ѩ jâ ØEÓ‰ì­4IYÍ2ÀÔeÖ±êÿ!Û”‡UïP„A"¦eñZÙ"QäÒW¦?c‰`=/)Š6äHo3jB7ÕÙ0-Ì÷K+Ê;`i3õ ¸ªø‹Ç­=$¦Ô÷åîqÝW¦úm}|È^Tv1_S)¯?Ž‘ËwÔ(Âã#øTœ|—K.á4>Ø*›•\ígЊ y¶ôÑ]ÿëòDx ×ë¸HÏå òµÞh69ÍH÷«åùö»òÏþýäyù÷¹?ÆïVΡ¿máv(ޱ„ÿ;³ƒpM´N>…ú›€ô%‹SisÙIä¦ai€¤ot"ÑIÉwÕÎ*˜õ‰çñZ„øy¬–æl4{»Éwè–‡£8¸À×ñ˜qEë ÆXp¦òë¤ÙÔvkNJ3” ݺo0tÈÖMÝ"\Nzp9å÷+¯ÚÇßò9ú Ét0=¿ÁÝ?µGH§T¯äªÜ;p_%×[{¢µL[Ï¥Þúo*?ø`±ÝäçÔó@ Œoã+\“8±{oúsíõ»þéÛå?fþ¹x¾-¾K”l1øô=fYxsq˜éJ1@Vy)Êê Yè9Í· ™*6P[WF$ù5“õµæZ¶q†ó©Ú¦ÂÅ‹oãÉC“† ´í@óô‡öv€Ã“™ÉQ´tu’A*7Z¼µ§J$+?Jg÷øÞHœ„Ûo\¤M¥ÇWØUŽ>*k’æ7ÄЇöðŽ`Ìâû‰Žl¢0f¿5'ûì4а¾Ä|?!~—תâœÃÇù2ˆÚ…e‰;õ)°¼®f]]”7Ð~òâ2uíɆ¡oÞÑÿPù©7PÏú!¿\ÂDhÅ^\6…?βØ&497ý¹ö‡þ]ÿÇü9ùýô»á«çÛê{\£¤ß¬{RŠ´Ê›êrŠí.¿ [Ö/áQ)+2‚óQ,{Ùƒ¯’£¬³^ùýÆÃÑ 0W BO:<~ä ´‡„fiYÉZxÒáÙ{8Hââ-4#áî¼µ—«˜0oÝŠn FÛÊ–vâg_¶oKË6|‡då™äM{Y™ y3§hÎ u¦bYÍ¡¿äÍ;(¿ô¯BÀßÕŸà¥rú+ü_ šƒà?´þ’DE²:tç›{ÝûîýÜyñýÜûÑûµóuí°IÑûhèVðå˜äUýN8"l8ÀI©—–ôV¹Âã9; 2û\aK¤å¼}Pc½àd†âPF‹´© a\ämÕîZ׫«i­|#àVíšÛ¸ê—æÊÊyJ¢ø"ÏÞ{g›FˆÛºfœôÔºC?)VCû}>Oï³)Ö•–¾éŽCîÊÔ 6+ñ1{ žÍIq*Qk:ò­û¢âËãE“Nñ«RÈ5;z¾ ¿Wå>€¸a¤‹ú\{¯}×½Ÿ;'ý1õnôÇÊù²î[´ùÒ Ø tüÐy[¶h!,Ǹð0åp¡–#µÇš£ä”²ÿnµi²µª¦íÌe Nò&É^NÔ-ÆöRi1!°A£™°ÅÃþiOÄ»â#µ¡’AcF¬·öZ{Oíï8óÖ¿˜Sr¾ÈC*.œ]~™h‘_ì­üdDìãDL1îÆö¼{>õGí&ðîjò­wK”cÍ;Û=àÝО´ë¨ü<ëì»]~ùAÞ0%å…éàÆ?‰Œâ}N§?×þпëÿ˜¿]þsþ÷ñŸëçÛú3s”¬5àԦѦ(/ƒX€â4$¨¼Ìµ`eZÕ Í£aСžFj2ÔÁKBÀ’åEz²úR ¾åyYF§„Ø’¶3Ã,õÌ0q8¹C·P¿˜B²H«žõíÉŠ“Ç€œŽ¡ßú—³7ÜV,ÒËŸ‘J]Üçø€ì Øëô—)úŸ‰ê¥7­PTPöÄ[{kÍfëß2×äN†ü(ò«½.’àg<ÇÏw±m©Ì/§öŽÖNûGïnöéÝì£w«çûê3ôDz:Q¸hí bF5Ï |Ä<DQ½YÙ ,±¡ãSRøÅ$«_æ·Úw9®ü“F)qePü¥ÀZž ]Å(æã»l'ynÆRVYÙ­” §Õ^ÌA¢U JÛ”õ:8Ú¨–F½æúWN¡ ¾µú(ù©‰ õV&-½ë>~ùjY þmôª»þ¨.ŽIœaô®Ê#H2J[´Š®½2-“ˆV­¢ëÞݨ¹X´Š»üïÂõ*+lÑ*îãOJ¶ÌŠÌ‹Vqןoïõïú?æÏÉÌ¿ÿ±~¾®¿‡/ŒJ)-~2™”@|wäÅFu°¼·ìÀ¼„E Ò\Œk, 9’dªS®ï B6 ¾Gûð_´7?+hTâÆuÿÁÖÒØºÉ„‰˜™ššÎb¥v¦…žâ¥y‡Æz›d‰®w­RÈ8³…àváqI4Üãß#· œ'ùÞõfX6¤ic7×ٓɘëßÚs™R¾$ókX8®÷¬rJ#Ñá ‰½Ümséoƒç{5ælýØuw¶wº÷ý»©;ä÷SïÇïVΡ¿}ÝÚ8iÎ"NŠPÃޢ̼šŒäW*ôô—£hª‘Ǭ ¿ª)ÀHáz N-ÌëhezÕZÒn¬á¨ƒBJ¹Ô »§¾áÈÈ”k©™é \OÆEt¶/¿|·põíëî(¬#X¤¬Ò˜¼?Îl#aª#r\jeÈ+r^i †Éw­vǶ[½Šƒ¶²€Œ”‹S£fXçÀº”,ϱÂà ‹*‹îñ*KU¸q2È÷… Uv†gEµ­¾}þÕ’,,\ÕñÖÒ¤ÓA­F¼ÉŸT~µ¥´¹~T²Ú€igÀF»ö`s£°hQõqEŽTâ”e>»æ |å ¨WÏgïj«×ß‹ðTJ­º•‰ûÁË÷ EÒlq¦‹ò|{¯|ß¿ŸÕÇ])˜ŽãñA&V ƒ·ö¢˜AÍÿªfpýOä—÷GÈOvØ.?µpTº‹ÞoãW4jò›àã¾èooêïÿœ¿]þcú÷៫çÛê»@äSÏ%ç¯X)°ŠäH"«Aä7½:±„lÛXu{§žS(û¤Ù®Ã1KÆŽíj"òó„ì¦íÚ "ºìû‡ ³G–£ú9àK÷nuéŠÚ0ÀØFõÖœÜ],ô¾Šï],x¹gpÃÛcÏKUz¸KÂc9lƒ¥P9Ù£I^yT”FÅÛ4g›\nMfe$%<›×_š4Båã­÷¦Ò÷Ù Hí¾‘ ÊȵÝßÈ›6Î…ƒæ”·7÷ªwo÷³‰þºLû>ðmÑüìj{¹5wdŠBË ð|àÞ²<ý «QÎ àöÀÅ%†ÃÌeX9‡ Ú›ËŸÀâR¹Å·©R…!6-–¸{RžýXVÞ dUé ]³ÔðDÇÙ )MTã®kÄþÖ\¬›Ò㢖KïTN È2WÆ›—çdâä»[t{¼|NZL€±F¿+O?PJÔ’.šDt]0.í•ZiRl¡ ®Gÿ1¨ü­FŪ;䧯à¯ì†uçÇ©¤¢:³Îe²ìúóíú]÷~òœôçÜï£?–η•gzÅRz._ÕäÇHÇ]9x™Ü–&·×‚`‚€Ò,‹F$î °ÒZ¶ï”@9ª×«ìdé[ž‰Íî”È“1<ùŒœEß잢ì`€ùäCR}­ù.+KZ~‚¶–níIއ@z>¬{ÿlãIÐ ’‹üdúÊïÃ=WžÔ¨Ïñs†$ƒóFö¡>Èå"‰»N…x' ‘£±fþÈI)S!†Ly]:o*ü„ ¶Â[ <)J1 }Æ ž`;T¹=.Gñ§òÎö‡ò÷þÝäòŸ“¿ß-žŸMy/·ö.ˆ¸À}@ZÖ¬,‚h8)0m.HÜÿUJÂè'Ä–!‰¥­w‹>©Xä«CnÒ^DÛªÅm²M­*  ¬ô ( -ECžßÑÈ1Ø¢bl[®eå…X`ùÁ’ @ˆ¦ëzu¹æè…[Mn”rë7 L=¾_]›ôY¥'ÛÓ0ºýàÕ (JŽÝJn¼òÄÜ¢xŠ$ê÷³«qÏ’¤viß´D‰m ãÒ‹*?(öXƒ‡üàÕÖl8cã2~yØH#6…]|èÏ·wê÷Ý»ÉóÒsïFï—η•Ç2ýÇŸþIŠ(òàÁ©?ë‚_ÿ¥(Š eÏ¿þïÿøù¯?ÿ[m„øóŸÿ£Á+¥8 øÓ+° @­ì—uCº=ñx‚J!ÖªŠ¸ó_þ¿ÅPƒå_%ˆ’Bæ6V%z TäðÎ]’„ŸÐü—×?¿âãM¶ÿöן¿ûO`ÿ»ÿóúÇ?ÿÛHIÛo™W«n­ÂÏ?I‹yýý_~þî?`ÿüüå¾’¦š’j?PÊ/Y ùï¯ÓÿíÏ_þ×Ï¿ÿËë¯pWbþ50ƒ>ŇxûßÞÅ›ßÄEâ÷<¯¹›„ãO%¤4 €1Æ&á ‡„ûß^%œñ›„ÀÎbØ$œ*á¾t>%L‡„n™]%Ìß$­>Ãö îö.a &¢Æ`ºâmPAñ)bñ"º¿½‹X¿‰8á«W¸¥UãŸÊ§µ½ÍÓñ&ß±KÜßÞåû¶K2iZ5rØñ» ÓŸŠË=-ôö)â±SÜßÞEü¶S2ÇÕïØEÌ*"gþ:³ò§ˆbê"î{Ä‹/"Vp@)¶ÎüÀÇ,—?Ý(ûùJáÔÃ%¿º·Ï.ïµÑ×Ý!öL²H­SŠÚ‹<} È3yÿü¨t÷‡ôÑonñÝ÷¹ŸÜJ¸¶úzë 1˜)O·‰·OA~@Eþó³Ó‰¼_»«ós9‘¯­¾ÞDTàŠíÔÚê."7™@äô§g©¹¨Æ&øé<þÍývmõõjŠú†ÈÈÁ÷’õTä?=^½ÈÒªßô¹¿:ÿ[;ïÞêom½¬¸ Ö-a¼U@EþÓãÖ‹ :¹®H9øßÿ­Íwoõ·v_ü}ZD¸gZƒ×ŒP‘ßÇoúù‡×ͼûëõ þãû‘K™æWóïøn¿*†güù§Wbý²<ƒ—•¤©§{ûÇñ«{Ë×ßøþôú÷¯¾~ùWšÝÿðóñÊ-¸0[id|t£¶­¤[Ã$M¥DÑlÎÙÉ)†W¨¬·ƒla‘¥h6è×r伊ïå™õ…¢ ` 9ÈTÚ÷D˜—´è®íeÎåµ Kj*«ø_^id€vms)“ [ËÖÇèWâ¾rkß)TnÝs¾ÖflïéAÿÄ?¨7Á])´Ù„1+Z´×]ÐÄÔÂ#Q¡ˆ yhbDE¸¨nÍz™Ä¶è3·¾‰¿h•m[@‡‚Ëg}q6¥ô{£#PÉÇ  8”v´>t¾÷íæìgüu™òmØnÅüìZ{¹ÇêF¼ ×BžVò, Š¢U‹˜º&)ô$÷½=%Ó ŠÊÿ´ºæ¾÷º`ÝJ "ýÊìW©f‘™×5 <_ËMÆÒš×&O .¬•ð„àgZ#(…\‘ÜÂç,oQ1ukÏWCÏö<û ËHã¬é„‡üÌqC™užøñÜ ¼“­íwýQE¤+­¨o!C•xIƒýlžÉg•å#›']zÏJj¬µŸkuìÒã”ëCC_ƒÛŸ•Ó8Ëây^”çš{ÝûÞýÜíŸS¿ ý\9ßVž­Í¢_®(+M¤-•£ÓÎËlIEIeµ¡‰zß¹9äN 3 K(Tðó9sy,ÈÂtë™üzxøµ½l{q€8˜<”ç¼ÄQ%2)“ ¥ð1kˆþÖ^¬„*&ú(åÖ{ÔÊRÙêšw² ¯;á[T˜Üsì(  ƒÖíºÓæ€ò -ÿöU ŽVní› ÉAØ{¹tßq›í¡^„ÁKîCèÚÊ6ò—}%Ùk(ÎΡ·³õ®÷×Ñù>oNöcÞ_ÇØ÷uóó}ݹðŸnÈ™à}°MTˆ¶tr&'˜Vyê¨Ü‚µ¾wAQ¢e[䣒/MÈfèÅ(HIéÌ ÔkýiJ¾²NLÊ5ò|—ªûUGtkLõÖXO.‡_gßÜ{°Ü€Ó×ÖÅö[r¹3A—#ü°öÞ6l„òÍTUé9­…¦q30Ž£'ÇÔ ÝníÅ©œH`»tŸ“ ¯/ý"|¦Žaò.QÔÙmðÚžôË É—¡šs­ÞÞisÒ»i?FïÍ¡½}ÍéÑ `@HÀÍZÌ¡€.ÎK/¯,eª *éÏò=i=)9Iö»€T{·˜©T²gB4ýñ܇××@pä{².P¦í©²!8´Ž‰§r_n£ºÚC )”}Ä©øxëjqí°jÃxE]ÿ8Ï$Ð=®‹m•žª‹aó·žlàäÓÖ»ò¦æqƒti§SAVêaId÷å3s«š*­¼Ž®KRÁ³–½zÁå3+K,6Ù³»Ç¸ Õ9 Ë¥sz;Û{½ïÝûyóÒŸó¾Þ¯›Ÿ]u/·î\ÔO· õx‹e§p(˕׺.Ràà 8·á󦲖R}‰@!!<‰ö$tP~ã|¶‰ü>ë¤Yò¹tc†±îÉŠ-,Ö»%'ˆ¨<‰ bœïÞ8-BVR”!hºµ‡·‘5fÒGÿ¾*Yg±¥‹ü@g·£¤Ëþú?e;Ak«þ8ôdŒuLÉ*s5öl»µ**h·þ«Ê?Á¥œ7ù ,/‘Ë;nãW°<’Ô»É{ýùö^ÿ¾?Nþsþ÷ñŸëçÛú³c\±k ê,‹KŽê5˜êþª»½KŽÿ" LCÔ«˜rz°½`á„Äè•dó*n§n6 -!K5Œ‰p¼µÆ@¬–Åh.²=º„šÃÄ^ûE‹åF©6r«Tå=ÚgMeáâjõÒ=4€Ôæ…u8ᣠ/WXe4ÛØyzPÖ àU5•E,,Ãl-E‡<±3eýÖžôÊfkýÖ?Fb‘'~‰‹¥Ð‰$‘q'hŽã1z ËàVJ=}jϵ?´ïú?fÏÉL¾ÿ±v¾,=]›UKå3ÎEÚ”jR7ÜõŠ'™{1J’±!qÊH»‚3ÒiìER ²~‰{ð}Ùüìj{¹e§ S“^)Ù”tÆMм á·%™§tþx)òY¿ÃaVº] ]1æ åP/¢|%ŸOÆš”·ƒïÊp ïC2‰QKÔuV!Iïð—e…ñoö5yú¶¨#ŸYвqç@V#—á©+éÈÑœÁá°™ïhàP:Åz8¤/H/³׋Ì=ÿ’‡Ðrëj{¯;Ý+ÆXUΖ‚£¿ëCZÑ~ÎöƒäËeM8<úYå—u\oâ“øZå¥.ÌòcøCÁš(Ž˜å‡ú|{§}×û6u?»ì¯sæýØ?×ÍÏ®¹—[uþÑ®µ£0y^øÀc/²Q(‘$ÌF|+’–ÇæÕ“9*܇\0,ñYn\~Qy qØL LƯCU¢ì/n;× ¼LLt8ý›vß³L@\­ƒ¬M2Tå¨ÐÚ¥Ž·ij¼o :3'e%—¾µt©R¯¯Ö·—¼¨ärÌÍ´ò㦞…*+y{êÎtJƒ1¢‹2znDòIÓxUÎÖ$#”iàY—¾Y*ƒ²u|:§är[÷^yxÈõŽ›7Å–Ò©µ½õ¡ó½ïcÆvÉùÞÇ}¬–?_jzZRV$ö)ÙiÍ([g ,¹2ƒÕ»@¤R¬øl”¯rvëbcã®Ðš_’¼ÍŽ!ßÈò窑 6hž¬ÑpÂYÕÄÖb .ð¡e÷ÅhdÁ2§€†/Æw Ä + F x˜ °Û¼úö&ˆœÒ¥ÞLÄ(MùñAŒ‚(¶N\wáçø•Ï7ãr6|6¯?ØÊ±á¸muaé'ï‚yi-_aEd;%ž«gçŠF+/™Âx¯ßº·¯ñº ˜K™NðWÆ¡¼³ý¡ü½7y^üsî?ÇîVÎÏ®¹—[yfbNPð:¨«äI`5ó“jb¢Î Ùx/ë'ZXŽ…"‡M6 V ] M~ãTW©Ÿ¢rMk/Ú‘÷ð‹d…/c“«9=¢>Ø!8'0² ¯‘»gX¸Ó7ÍV¦Ú‚ré>O¹~ÄÌ’´\ÄôÙ×óÚ>ƒÆ+ÆE"À£íwíÉ÷ë3ÇC{Ì0Xª2L$—ö ŽJê0·.ýËζCa²ÒE~ ;—·„ãggñ:1ŒñC}¾¹Ó¾ëý˜<'ý1ùnôÇÚù¶ô¼#IßJ²ÅdgT{Ke1¯†¼KÒwzÁó {&)¦o-1I21…ò~êj•ÆÐ3¬± áëó÷KYþ:¥-wÀøAÝû¥ ËøP‚ ªLqPª¼_êî EõÏ4ÌLiÄ[{"ba—1ʸõÏ?•¼SñùÅBƒ9\Û»ñƒü0R†±m¼ßšúUoÑ)¼U¥yÉê¬uÍì©›Ääõu鼫ðpìöxÿcmø/2€àçØ‡Â`ˆç¡»£ù¡z×û>u^öcâ÷ïëæg×ÛË­;s å_bÐÆŠ[Ì‚(šÂ`¤„e¢'l IMűrà64$Ú÷@ì¿°Õ–¿U^yÒ3NâµÇI:6w³º²Å8¡jØ*5åŒ(`v+§ºyÂ1€H›“]µî ?Ü­=–R¥Œ#Åxé*x(u!ùQ?.—¦à¨ÇðeöÀƒ® ·ëZØŸê#ËFÎ+°öG~œP°C–Vní ^—JùZ(—î«JOõZ¯7éaá•ã¸f…Ÿ”Ä“SžD¹òµ|îh.ò$ãgÑÍã»—+é'L¤ã"¾\±nyO,Ö>zùNü ¿Ö.Úóí½ö]ÿçìíòŸ“¿ÿ\<ߟ²WùÊd±Wl.AgiÛB͸ćòdb>àAоÀÛ¡" ."ÓuÂõ  Ê*æL"Z[̶2bhGm#£†X»º‹»n¥Áö5[6RÌ þSŽë LØž³+òÕÑ^ ÷N!uËË[êúÇÇÇÔµÜù”¿¨ü¸„›³nüàGY×øÃµ½S_Ö£¬qÇ?~8`£’áh§£<§ÅLéÖG~±$UcùÁ ‚¥Z¸à?(/”—VnêsÍõ»îésâÓï†,Ÿ/«ï°F€ÓºcVI´ÅÓ’på6ÜÒbk³kdaàŸ†¯§¡ëitϺi*gz.¶YÜ!S ¨|¾M]ɵ ÔÍ—¶çò”$3aPlWd‹v¦×ƒ“0‚¼0eÝÒ ô@XŒýÖlžÁ+¡YÔÅõÝ-her®ôr‘¾(ÒƒbØ{Û ç3”ؽñ¡;îOÐb0Çê2¤Iâè ÿä[sØÒJNTúçK÷\ˆòóbä½0½øEák'ˆ†<™á€(Â+yQŸoï´ïº÷sç¤?¦ÞÞ¯œoëΟ¦rôKO8ªö] YLz‡f-éë R®°ïz4c±¯Êl;ú©žš*,ß³lH’S^G? PÊGkO{˜´EáÙBϼÅ(r={Ú˾T–±’ÖÛÄtÀ{¦]]£Á€²*³öáUó [³Ýú3V C\ÉW×oùóTùSïïý:ý=~YÖðŒMXµÚº:?õ§W»GÀœöõ:–Y—»ÜÐâÎöš¾—y…x뿨üÀ÷,Á]~ùÞ@’_ñ2~ÅY—#†ŽVÑXù×'eècj<ßI„,—# Ï4wp ø¦íe‚ø–µ€xH&)& {€™œÔ¹œÈRÌ=LöÖ¸µ¿ ¾gì¢zëbi9BÂQðò÷©ò¿³G¨'¥L+@ˆµý®>åzU04M•û© ºI‚eR*$ß¾’c”ý—Oåì_?*¿ÉS Xœü|2AiýÊ9~¾ƒ;. §š×ßÑÞéÿèßÍŸ—ßÏ¿ÿ¹~¾,?¬²ÑˆJd9Ç›f¶}n£ æˆ@"Ä£%î ¶g4¦W}nÃ)•c +±OÔ2@+ëú$e6¼l$çrÑÊ9¸à‘¹~‡æW5ƒÈÚíb[cªµë™Àn¯Ã²Ù! ÂwR/Í¡c H‡~éžR|ùCÒïC¿ˆºŠÏóÊù؇ÀÍ¥laS{õ‘ÕI„,ýwò\‡†¸ò޹µ×ðcr)Œyë¿ ?lk©ÝÄ/¿ôõ–H‚º ŸcJ'Y§ö\óCù{ïÇÜ9á¹wƒ?×ηµ÷„šÊ0ð§¦Æ•èV'¨`,ÒD¸5QJÑõ;Ðóux<ºär¸dϹ Nÿ0T$½3»U'æbþýˆ¹3W¤Jv ð¾rcþ•+ ê˜Ïs—Ò¢ ·ÉÐK©I(¦_«·ö˜GPé$CM;ú—ƒ¨*SJz?w?åç9Ýe+È×¥õ9~õ§ËQÈúX—Þ‡úØ ƒ|³…†ÅYx=AŽæd)zÐ ùÖ}Uñ[ã軉Ï=#·.åù6|î0Ødé¦>×þP¿ëÿ˜¾]þsú÷ñŸËçËêÓåÉ›Pr¸²¥3vò 'ùA<œ°"äb©X5Æ€ÄÀZ;¼²"qƒ,gs‡üçÌïÃw çPß¾î̋ߥ ÄÁ–ÕCŒ™ ž6óâËE¥è‰ÂÆ Cù¬–Ã35rR´¼8ôøñË?á_ˆÅñÉÁÐ~¼½ÀC.lü”†`È"#¬6ÖµBeaÁ€ððPs XJk.Û–Ÿpöžå©ÐÔ/Âg>qò,øçÈY0õ‚Mí¦8Å«1ÀojéHòÀ†Í ÔèÙníç/r­^£Þz—4²“g²ðj?e×ï$Aáôï1öʳ©©ª;Û{Õûþ÷™;Å?fÞ _8§ú¶uçŸI$/TpêxZ£ü¯Wu1à½8Ha5xÝ &N«º¸“e(Ï@9Âí;™[ྦྷԔ4–•Ù‚ Ìd •/NJõÎJÒÒ ö:Þ^¹ Ÿª,øœÈëÆñ$-ȃ+\íÛSËU4íû(›šRWyõ‹ô$åȯ÷U̶]9*yÝŠ¢ß?U§Ìd Q¹ø»ÞF§‰¡K{ ˜ÖÙƒá¥þîüe’…¡z¹õ^‘é­(Q­¾mÔz­È*­ç8”v6ß•þr»9;wsþòwkæçûš;*倱 ÐÚ´tû”;é‡Õòš]¨O‹; ²„‚QaWlS¾wöBµH¬ºòsŽçѹ<À_Yöïèå)W­. ºÆ}¡\ò 0¯ö‘TR?mâð zeÝÑ®=°mÊ݉ŸJP¹4g‡â`YdŸÃ‡ ŠLHt­ý®>ÊPy¨ÈÜÅ'kA?<¦—ö¸3“¬­ÔKœ—þ‹‚ÒÉâÀ½ÈOZ\Î8ËÓ¸ŒŸ*7rä'40ëÔçšÚwݳçÄ?fß ÿ\=ßVŸ?U;A^ø‚æg’€¼¤ð¡ÙöÆV÷•Q¯à‰V²…0ÌŒ¹OÒ™Ü ö|­¬ÐWØòó¤ª'·ó¶PÝÙ£Ž¤6¬OÅá à~µ«}µÀJïUC2ÅÒÂ%’Û­9áþ®•õ¦v½ ¤E6æ3ñÂóÄ¡¤Ë¿ôƒÏÔ:@”[‡¥ë;å%hI2Ø–WÜdP¤ÁþÎ#y§üÇä»ñï‹çgWÞË->áS!@~•­gAT©ÈÊèJˆA‰Ï:’]µ^]ážè/™q£<G(ö®c«ÀÛELD^âc•ã‹é5’í$­2P9 §VeW 1Ds­™KbPœµ˜¾*ø@¨fØù怑ë ×m¾õHsktožc/<9z‡`–Ù>xÈ%jRǶb»î´¤]ÖP+Áj34H.ïÝ$gëùk(cr—Ωê»Ø9„ÇÐSÒ—ÁCj ½Q%«ë^y¾½×½ïßOßOü6øËºù¶îÞ¾§ ÎAÖÌÜ5ؼ„›çÛ÷T‘'œ|'Ÿ]öèr±-3IàUquðá¢x»xÕk߃2<<„å,ÐðTKàKÀ'·ž€JWö€ÞíúLJ›*'Àµ5èùiÀ'¾ !×yÀƒœ+Gb¹/[áAÇZ†Ø>v\òQNƒšÇJçØuÇÐ ¨å]lAûžWÒ˜kÿ¦Õ,wv­—þ«’AËQR»È¯þ#ŽäØAÑÿzAé NýùöNû¾{?w»ôçÔï£?Vη…g{ª[ÊÌJp¢f´hN¬àÚ›e:QZªµ? ”bÌì¡©2f¼ðÞîÔï]=Ц0´Ž(Ååô¦°Q ߌ´pÕeÉ÷@k ±ŒI˜×·lÆP–Ë}RÛÐʬFPëMsEû|syc£‹áÝË­{Ùš9Rè-×È‹_TüB Ùûö1z@…×Öäyã}jö±¥ÚÃq¹ ܡ޷Æ[{ E8÷³&¯žý+ü9xæ¹=äŸøéåFê2~^) ÚÃoySŸkîµïz?&ÏILþ>úcí|[zvn6;»fá©SüO°%6cJë÷–i)Ï1+…²`.wjÆ¥‡å{%ý%舡Ù÷Èí ½d[GÔf-ÓRÆÿâ Jh= ÄrCnð-E 3¥[{VG…æ¹Xn¯ïŸÄ3¯äâ›7ù“ʇÓ;è°?)¨Ç!³NÞOíÉÁ­Ê·=EAé¬åKëR\bh=ß:7œ;\á¥Ü„çRƒ—ÒH—Á× XqòîPÐÄSy®ý¡|×ÿ1yNþcòÝðÅóeíé⌠Dê_Άž•9J™V_=Î7-òÓ‡ Âc%E³4Ö,:Q…^–¨Q•âpÈεD H!Kúå;¼t™à‡N12¹ˆä¬·<M÷’K ÞîÕ^.må‚êfQ/ l ]Œ¾=µ`ùZnÝGeh$ ߤ×\;âïBâmðpòÉ•åòzåð¹csXQ¦ËZ+J6Ÿ”)Ü׸t>UtŠþ”¬c]­AŒWl€1_ÇÀ“ÂÉ+YßÀ^ogóCï®÷}Þ~6Ù_—ißG¾¯šŸ]q/·êŽT¦„! ^†2þVÊPäDÁîþ«%£Ê›b*_˜~Ã’ßú8Áäâh²ÏÒb\mÄ€ÉGx¼Íà¯LŠ©øa;ùãñ\Oø(µX¾$çDhx|ßLå¨YA;·1·c0üßeÕVZ·þÉ †›üEåO„ãúr~ŽBæïq"~êO¾ƒW€Ë{#yIØ ïÜÚ“SIåxcÞú¯ê¤¯ÝÄ—=6òoÎÛð1Àéê=Œ‹ú|{¯~×½Ÿ=/ý1ûûèÏÕómõùÇ{­²(Þ7ÊwІJ#G S7SQw6ìš$û’Ë•Ù7ãqóÀ­#¿¥W2¥Êj,¬—ªaiÜÓ…Àü¹üu±Ý¦ª*ñ]§pšÐ‚ü“´Ú ÆXí£Ž&tîbò¶å÷$;õÖžiDÙ!¦[ÿ ÀŠi0HºÈÏí&¿/ºž–7îÆ£Ž¬›i8¯‡þäöƒµ<ãÿÎË“è„q ßÚwõgC09ã­äÍØ7ù5.ÞlãI:Ç?´ÔH¼©Ï5?Ôïº?¦oÿœþ}øçòù¶üì¡”4 +”ƒE6)T1ÎóX++ÊJjvQDÕÄ%#·¯2Tˆß!)¯pÓ>á骜Å}‘؅Γ[^]$»+åq]$xTlFå€ZQ\¸¼Pµ¸§ÜÛ<º{·æý—BoPWQ/Ý—ZPòÙ¬!'~$ÝF޹ˆÖSa>GY$RCEóŠjoW‚¸Öwf¾J«r½µçèl µëú¯*?>%ÍÝ:䯸ÍIwµÞÆ_õ©:W»éÏ·÷êwýÓçä?§ÿ¹|¾¬¾÷òìøR{ÊE¬c@ªI$|pIzXèT‹úH$\\•~ZÅ›@ÁW!\…åY òû™Òµn‡=™ƒb#-OIxž«>æ"n˜,û«™á0Êèu3ª`y)SûUÛ­yç%Š×9¦~é^æÍpëñ &ñ²»ô¬Ïác½R©V€s{ôû¡>âî²>I˜šZ,î>°³C¹µÆ$#Š¢nýW•ŸÌŸQoò£X€÷j©ÜÆ £<¤ÉÛ̧ú|s¯}×ý1{Nüsö÷៫çÛê;¬RuÚP a9" ¢'÷UÒ ‘1‚o)G‘fhjpù¥äeW@¾IUW´ï¿n|ά:f»ìæ”+ ’—š%‰Œ1yûË–ëÆ‡­ð…Ð/ŽtãæÝ ŸãXà­Ÿ_Œ”Ä2²j¿uÎ=ØAËï°õoáŠ>‚L\|UŸƒW×4ô¹áAZøTދ‘‡ŠÏAÙ4g½µ—•BF§èêÖSùÔ¯ÝäW§ ¯¡ ¤¼Çøaþ«$+¿Ä¡>×üнë~Ÿ»Sücî÷ỵs¨o_{Gh—]1Aí««Þ ²)VpZ^{Ì—HAV¶rجéà%>æ79¸Œ‰dŽÑýA”3DTŸ¨zH¸nd†ð GÊ•AfOï†ú$Þ`ЮÔb+C]·z[Q51‘LJí½’{ÂÏR½õOê=e;s!X{ùAÈDBcyÃn|ŒßÈII~šáAïüT7h^ŠÃµ|×°;×iñ¸³=E;Ä«ÚGÿØ ¼XZ å"¾|nšñZÓeøUÁk!c\ÔçÛ{õ»îÙsÒ³¿þ\=_ 5…“·ß̤JjŸX¯{T®­_œ‰ˆJùZ­tЊó¤'j/+Žá®Ÿ¡"L\9Êy<ñ¦|uà ð±åÍ+ïF©KZz¨¸µ ,6i æÆPcˆÏT§Å^É­R¡Sº´ÞA^NÎñKß²ˆ‹²)µä¼äÉåø“w§’=»q¶ÅÈŠÕ\z¥eê+àÖHf††ÛéÁtøÖOŽE[9ú.n€°”sxÉùL¤¡€¤qóœ¹GAÜ•ö³7~y•û®÷ ûñ‚N÷ëö¾X~¾­4ãø CgR–ùÉÿ•kr-ð>Á…jÌX_LÀJåê@- —–Ë[ Ú9vl?`RIÿU7|Ý©²/êò%f͵"CÉüzÌýA%$ö‰RcR‹ÊÔ/Í!ÿ?:©ßøì=@|1œž-_¤§ M~Ÿ;Ð` Üè•mz·T-ä´‡G/³€$XŒ- Í8Ûµyb2Áð¨õÒ»¦ãOŠW»’xé5Ÿb^ ûà•¿RŽ%y§pŠÊÛ›{Õ»Î÷‰ûÙDӾܭšŸ]o/·ê›hs¶Úxê`g‚*+/ §™€-ɹ˜'Pëÿ±ßè`ò|›¤D$­_i„¬ÉU}@ HtIó~èbÔªC¤ 3¼´—Ónr5O\úo*?·ó¼‰ß~p£Ôó6ü§¹§SŸw‡ú\ûCý[÷çìíÒŸ³¿þ\=ßVß‘Æ$ǯÖ>…MP¸À×ì!/Ç \¹:•ðI>cŸçŸÈмÌpnhJ–|O¤c+¶ã Èr7°êäÀ@ËJ¼sE©,72¾ª%[d§°ÜHÄÖ°S'Ýô¦qkcÃJÖe½õŸðÖfÜ`ù“Ê/:«fõùñS1K19–ê mê/K.MJû:6Àß‘‡ëµ9Oרè+Óhï#‹çÊàj<…§8*Ëÿt(.ƒ‡ ¿ljŠ™p(Ï·÷ÊwÝû¹sÂû©wC?VΗ…wÔtHHçÐÊó—$à ®:@X!®BéŠ?l*ôÅûpmfÅ.ÒÈ0YúÍaATÞõ÷eèå34ÈåqxÈ5Ó@ «Pšôâ–²Ew»ˆ,ù3I" +y<×^ r`ã*ÚòÝS#&‹>ߥ—ãªAN†ØSù9zøê'FkŒ±Î§ò ”“;KÞÙ½<ð@ð5Ð9Ò¥9ÀE"bê “V(WkVc4O’ÛŠ ­ØØ>5ÚÃH^‰( ‰| % à\Ÿ„cb<Ïö‚•¨²[®Ï¥¥ÿô¦‰íNš ¶·þéUóÆÉTëùuö](pKOFÖÖ»àY ÜÞlû°Éš 2š×›íSi™´ñ’r½ºˆ-PJÒ¥5öUéù³ï¡’®ü|‘œœ¾¤„۸כ-“†Ñä`Š­í­w}3¶Kî§ûsØ/·V¥m+Í_ëäy‚Q±Y/i "÷þª¸úy¤¬µ•²î»Â’’À:-[ d}a”=Gý®€Ú°Q.?7YÇê‰DÐ:¼9YŸÙ–‡(ß3Lâ¸âøýD*7÷V³}70ÎIƱ„—®ˆ,DÎ Èïh•ˆˆ‡B½uO’±Ò9ÊEú¦x,€;™ùçq:i´wm¾+¯QÆ€+¦«Ñºf¢f®[{9°«’XÎ:.Ý7^3׿Ex.R*TºæyC‡ƒ¯ãÒ4¯Ss®ù¡y×û1s»ðçÌïƒ?Wη•gyvì (Ä‚ráa-3~nËO&yð®–|!rƧeº°%¹†.þ)MÂM~ò“Q§Á°,ÔÊìáj[Ö5¬“;À@)õ <—q öZ‘]™ † %¬ª•¨æš'ütŸç(·Þqä„¥—›ôQ¥§má͹Á“¼å-@pûçSy`'-Ø\i¤‡Ö0¤æ­=.záh½ô_ƒÊ_£é_#ípàYd÷~%w¾Á§«çPŸoï´ïzߦîg—ýu™y7ömáüìª{¹uw€‡¢T*¶j…4DC‹b7ë"z@8I– ù%†ÝRકûQ¶E4òïÁ$µê™g ¨A7’Å‘© /‡¬¼;Jžá)8añ8?8 re,Y‹ð¥FÂÆ—öšl))©]ú§>SNù"¿ÖÒ7Jgú¦?¹À晑¶üÙŸúÓR~ŠñÑöZ(™º! EÒ­}âÑ-ï⌗þkRùAšÇð;ä¯Ð*4Ä çøÉ€»]ËBâE®ý¡×ÿ1NþcþÝøõóuý½©:ù¨#/21ºÉ?vÅC»¤)™EÑø3‰€Uì^£S3²‚ Õ•Oƒ©°¾ÜEó]-¤jµTütd|ÐJk3¤MêZ _5*ê‡ìχ ¬CŠÁÞÐŒÚH¹-LãùÖžð]5ÕKïEÁZe©‚Ý&»VªÕгº=•lÛØ3¨rÚ¬D÷MuÚ<ÔÊARÓÃ40ÀATðã³9°P×Ðñ½CtÀ Oõ8…oD)å”,¿¿Ž‘C²H'`ùíPÜÙÜ+Þ÷¾OÜ)½Ÿw?ø}ÝœÊÛÖ=‰(ö&q/@=×)pʼ‡/«™;[ ¿§¨}.ï-§Ë¨+`j10æY?Ëù‹F_tú júœI/æK"é¯<›JÅK€%3Ik\&£“ÉÑêj-†{~:>ƒcAÎrN—Ö¤! r´öêè;ü˜DžÄúö’cöN Ë_ƒ*nÜXÔ7$+óZÃèê’(àóî$!‰9}cý‹ô@êF-çÙ¥×c Hò*_çØAÞ°Ë€­rènk½+þuéz›¶/ø>é/?ìmÉü|_qGʼ(GB´ìCN]îF]àŸY6*úѸ6Àì¡åÝ’Éë¸+×Y~¸PóãÝPI‰5“í;C§Ðƒ“A†.ÄúõªÁwV¨Ø㨑Ž“T0`U¡lçÖ¼®k!¬roß{ƶ`4›ðI…§ª5<ŽÅmðX@©ÂMý nºÃ€‚z¾ÔUpºœ> ´ÖKóLæБšA}ö®9hŠ,ÕÚ)›׉¦@×Cj‹!ÀÀÉ–@î)kirL hdgÿje.pÇ ¯„¼sy8 „+]d¶æ ¶€Ë=hC!:Éh]ÍeèÄ´E@H€€h"ÞÚ‚ǵâ>g÷L¦»>/ÒƒqÌ4i ïXÒÇèÁ]Ò,åÚß@OŸÚãu „õPx®ù‘ÿŸ—}Y 4®=WÄ”áÝú*>Èô‹ÆÉÏC›Ññp(»ácºQä4º©Ïµ?Ô¿÷Nß.ÿ9ûûøÏÕómõqKøs‚¾TçªøRöt1=t¥’—OˆtÌUïÎC£>Eð‰¹V,( MÁn«q¡@ŠæN•˜¥t¸Îk±z,Å~TŸ…¬ ­É QžÛ5?‡-ÎàBšš@™©øöê¦Ê·W/ý“EQ9%‹æsŸ ùy±¡êxRü?€n!‚ZÍMìUG ˆôKÑLþ®[€]UÚ‘³½LlÂÙ`Ý­û¢Òw¹B2÷.=û h9ùJ»Œ^ñuC¢à¼Ö‹ö|{¯}×ÿ1{NþcöÝøÅóméÙ1J 7óÆSllìïP¡?†‡Ùë E“·2éU|gÛ@sûD•©"¥LµÙãa‚'Û6>ÕøÌ-töÓp^5õ©ÖON.Kª¥øgÚ^(V™Š… Î×SÀf•hºšõæšb© ¼).Ôû½w@0'™9-$„]úØUzé,¼Qï?OD§º¦ò.5ýPI}rÞ4ê=žRU*jÊéÖœ[±†D‰·BCûîA›“ŸW¬¢xŸZGü¤‡v=^ù$OKM÷½hooîuï:ßgîg—ýuNü>ô}ÙüìŠ{¹UgóòÈrXËäuCy Ÿ±(¾ï_3<ä¬&C¶ïî4|`Å §ŠŠÁ%û×<ãóý¬”ŸOÀ›.]È÷",Ú$?*X³²r%ЊPâól•™`CëóOéxážãÖœ¤öuEy³¼lÝßܯتý&~QñI5lKË6|%äÍ °ZôÎiÐ8™)VXfˆír4t-Ľ5'&"c¤–(ߺï*~Ã3[nâwB¥ÔšEw>†­6¼0]ïœC{®ù¡|×ý1yNücòÝðÅóeí™?É*áɉ†(O…2IøšOÝ,è1ZHZíT†-™êU º%Ì=Õk'†C!ÚUš „, ¬uÊ *ÀŠ: !±0AtÒ—ïA¶j¢ˆ ž1½“pñÍ@¸5§„»Hþ:_z—;1‘UIn¾H†JC¬Ùînô¤e‚ÖÚ[²cÏi/`{e ÆJëtêsͽö÷Þ¹Û…?§~ü¹t¾-½çä ÈðEÙÁ­ÁCÛ€ûëäN¥Ç_Ç~\GxæÓjɰ.’XÞñq‹ð¢dD&ªòÊàáXúf<ÊZ%j5…ô^Àôž  ‰UZeúO“ËÇ—ö \MÅÁXÐ[®¹4!NQ¢·z‘?‚Õ[X¡i7~2K3 Ý–ù~¨LЫ=?G/ÀM¢te»8ÛËaô ßåÖSù+ õ&? À+ÌJÍzŽŸJ•L„t„|ÓßÞþÔÿÞÿ9»üçüïã?×Ï—å§ës(³Ø]-¯\ºLЉ¬  $<ºè\Yœ@´v€*³Ü$%¬,ÎG}ºöþ‹b;‘~”uø.. mOjEr¹´•űr€‹Ö˱kZ·6 cËi:9O.Ä·ä·‚ŸVÍ5âûÇì‚ÏEŽŸt‘?PL9Y(†9ïÆÏñ5ñq‘Ï ™5»þHÔ”‡jàøÔhÈ"*CÂbºµÓ¥W'³’.ý“5WqëcerîòËwÑDoT`¦ËøNÉŽk£®\Î]¾½×¿ïßÏŸ“ÿ˜7þcý|]JNÌXÆR_€Ô¤™*˜Šqr‚àÈòŸ Ìããݦ@ŠÍ2,Áµ -nœã0Œ·•ÃŒÒP9ÁÄÐè ÆŸ°­ &èei eÁè«DÜ^0C÷ŸZj¸íô [oí±+Eٱ͜ný'Íz„ÎÔ±¼üQåe¬0?~ À JOþ‹Ó_ÔÄG,©ð bãz ½¡ÝšÛ†J¨Uâ½wL€Ù©<‡Í.>ô WлÈlx6ÓT¾C{®¹W¾ïÝOž—ÞO¾¼_;_×Þ‘¨4´OŒ–Ú­–'©ïOì¦þðq[5Z,VEB>À¬é è­|CFs®d׃ !ÿ›Ó››šÃÞƒùAÀ×”.ÖÊpÊN1K´C‰8,Ñ`1Õ[’+’?&|‹0IU“Ñ©a¾“{QËåŽö IÈ2ê²Yú¥ÿ¦ùy`(éJ:äWBmÌi™’~>„Ü‘ä jÐ/êóí½ú]ÿçôíòŸ³¿ÿ\=ßVßÁ‘ÀZHÜWz€'MÁÂ#È‘ÑuÉ<çªnýŠ{áïûò‰%å0ÐŒh )WÐLÓ"ÏÉÔ³@Ê$&’Y¸lxj©Ú»!&Èñê[Çñ`ìá6 U·ºPèÝŠ…½yÔ 8öéÊpÝGÍ “3d¤·çÿSüH^"q6>ÁÏÑGMà 5(ÈŇöš-©'¢=d$´Y¿¹ÞÚËã@±^J½tßUzÚb»Iß1/©~( “Æž•€¾ÓÂÔS{{ûSù{ÿçäí⟓¿ÿ\<ßßQÀ‰ç¿Ièëú¨P«%ñWÍ$… ¤€ƒknª—[ÄìÇ’/+éb²”r_¦0™‹Ýî.¼ö šk!‚d™¬50ä‘âýð\Æ&âƒjÁ›Pë¸À›”͵Vã¥sí•6…à1Àw—þAÂÉQaP»H¯CFË•÷` |Ž>껄 ¹±O6åé;HVªÌEz€fK.)æKsRˆÉΊšƒuv_£ŠŒÈz'íâãiŠ“Zs¾ ¿’¨¢8©³¤‹ú\ûCý®ÿcúœünòÝèÝÒùÙ”÷r+ïàï’®SÆbæ4בÛôýW­À“× ¥}áôŒÐøZ Œ´zÊ׋sÖ U?ˆÂ—Ÿª¦¢ÀVÛ»žzJ¿â­=yŸrÕ*©ç­ò>ÕµÞzºÉb åѼȦ<¨ßG÷$&»,Ø÷‚ïLFš6KÍi ÐÕàЈ×lO,Nl¶Ø¨Å²‘ÊêN*ùÕٔ®U…ßÞ«ßõNß.ÿ9ýûøÏåóeõåð \ D[·œKRoH#l e9$’_xÎXüvåhŒ¼Æ«÷t£ÃŒŒ©YÐpE ”ºlœAhƒäikŽË®‹1“½z§ü¡XßÝ\xöpQ`šRMÑCß\€¾=€µ‘ría.Ľ{ݳd¼áƼHÔˆü<(™æÁt£g!T™œ æuÊãÈ M )óƒ& B³<å4¾r¶ÄÔåóÖ¿òÇDˆ7ƸÉOÀ&G9¨”öõ¾â$Ž"­î¦>×þPÿÞÿ9}»üçìïã?WÏ—Åg1{¹bdÄü–¤È¸äê“Íc  éš2=±YɶvÜÙØ£\0š‘©ßñßGð¼~¤7}€貓Ünk N˜•ÙŠw‰²ÆU†N)6î¤`˜²ë: ®ïRjמCOî"ØYó­94+å1å7fä§øòñ5™üñ1üJ†(2¾‹ð?•Ô›,»ÔC™O>P1©|k]¡ÇWªùgïM¥gmÄr“¾‰QM‘Åè·Ñ7¨ÆÁwê-Ý´çÚÚwý³·ËLþ>|·v~>•÷r+ÏVfççåFxj‰`•—eÕk7I¡ÛðÁåPÊ–ZŸêS{êG“ÆòÐiƒÃ,‡M+ùÖ\ña9škÍ·î§ŠÏI”ÊE|2­ñ;ôENà‡È SX©S{¾ù¡|×ý1yNücòÝðÅóeí=4ñU,”ªîeKÖ&tŠ--¿Sc’ƒºêµ½‚rñœ]sdR,‘S­õ\ß¼1 pò5ýD~GY…L˜·õ'Ó$UvûÚû‰‹óÆòè5!Dºµu]sMçÔÆ-ÏÉÞ=[Ÿ°7öR¿ˆ/Gâ'”ŸÕý9|J»Ëë8÷÷êþ­>ùŽÛ©’Å;Öêe}pY•[{…—­IVS¨·þ‡ÊßE£‹ÕÇÉO$´Q©«hÓçøIÖûÉÈÎõ¹æ‡ö÷îÏÙÛÅ?gþ¹z¾­¾Ã›Ÿ~)Ý‚¸«® ¤$–¼U߃Ìqª9[v¯Ê¬ù4àçàS¦²fßñq•bȸæ} q«iõu0màϬõA‘ì,…657™¢UPŽGhå)°nZ— ¹Í€`âB£Ü}\Ú“@c7Jïõì^>SÇ(“=,ê⤷…d&äS\þ9úÔµŒGÈTüOåQ¹Ã©›XäJe Ûä~kÖÁP2·§vg↑ø$ÄÇq“~dyÈ”¢¹ÉçðõÚ.ÇeÀíêsíõ»þésòŸ³¿ÿ\=_ßá{"d–ðà–EÈKàV•d¾§l„ÂJSýÞlê’]&c0Ô-Âß0÷Ï¸Û øqȇ§tN òû!R÷÷@©ªtá1çj/Â1ÌxÆœ“‘)*­ÝÚ·J^bZÈ¿¾ÒÈEE}zñâ'£õÓönøØ®bìcdäå¼ÙÔ º¾Q!GÖéÊñÖ^ìË<4—fáF»þ›Ê?I¯K7ùÁj¹U}çÆß)„M=)3÷©>×üP¿ëþ˜>'¾Ÿ}7úcñ|[|‡/¿ý"‹¡ºfîTš– ,^/ØoØVË9yä–•ð_dS±µHýVç ñ1HMçCK¢)ôÄ@?¤)>‘ä¢[>Ô•ÖE•¤Ü«^†>1‹ ¥)–£ˆ´äå|qíÁœað^úlñ¶xOñƒŠOÆm{º?)ÄØ£ÿE|êÄM¢‹i³fÚQ§%©Íî°¤Òo½^®ÃûMx ™­„Æcðð†Ž¾å¹ö‡ò]ÿÇä9ùÉwã?Öη¥wœ¨Yáp¿L£žH.ºÞ_Õ#Kf".èj•A„ä»’_ñ‹Á ÊJZÔÉ8‹(fy˜¤ðî‚€ª¸P WBÁc)AñÀˆ·e+‹Æ<(pÝj]=àäS+ô/ ú­5Ó²ºhÜo½ry@À^™Ç^ú¢ÒKói‘~ôX@|4ì¦=œñbîÂ`1–;<‚–Å¡Qoí«%¨€²ÐnýW•_¬…ÚMþ¦¸`²—“â¹ãoš¡Ëk-õ¹æ‡ò]÷Çä9ñÉwÃ?Ï·ÅçOT* éÐm ÀO…NO­T¶%i`bQÛ™TÀå ùI£­²amö5@¥C¦í“²1µpu´i) äдúkù^(¸šz³ƒ Oožù¡îÉØÚEjš#@t–ÕäÝúE¾…`¯–KçAëLäcnáù-¼¢!<è£ù]þý1tØ{»8,þÖMuÊÇV4oˆTË•ï‘LÔLÞÚ“TJ7pd—þìk”蔿å_Y9ÌäuU/ão계OVÓÆõùöNû®{7w‡øÇÜ»áo+çPÞ¾îŽ>¬s^}€­Ã0…×;A’3WŸh^5ξÃDÖÛ*^I†Œ2%*½#ÖJ á‰áSXr…ï"Hl*¯ƒ?iiŒ-‘_#ž¬”ÍÖ:h¢m3cc›kŠ[øÒÜØ*±7k¹õ³'¯áËUú¬Òr«óº÷¶ÁS²ZÉšìù ûÔfÏqœå7JHÚÓ_ÎæJR È ¬,—îkTñ§¾œâË;$Ô’¾œÃ'B/çn3—S}¾½Ó¾ïÞÍ—ÞO½½_9_ÖÝašI @Þl–rNü †F®!áuy¿Áº-•¢Á`[^€¨Év×ÊAýu èíÉôIl¶™Í~©Ïökí!ò;²ÛQ«hlrÉy8Còµli’QÑÜDÜ`ƒ9Ú+ñšÛ­ÿ¨á+î¨Ðnò+¼6gÌ}µ_Á쎚Ñ?Nýi²ä1ºÔ>ìzºŽ1Ê¥ý‚›KäKÿ5ªü½Y’í!U(%ùè —ñkª¯sK²=ôçÛ{ýûþýüyùùwã?ÖÏ·õgX Ö€"³Ö!Ñ¥HFW(< «§¾`Ø(\—íõÀÐÃ’#?j°š‡ %?rC·'^¿Nmª½“Q%¢ÍARjEK+§dUð ýRÞ ÀJË LÌ 6ZŠœoOQ-6™ÜPùÖ¿ÕÊCŒñ›øñËT;VÛ»áÇ_ á‘[6×¶W¨¦AӀߤ6òf—ë™›àÖÔl Uו±èúeàÜìWñXŸ`§çÍ1üA½UŠzªÏµ?Ô¿wÌž“ÞO¾ü±v¾­½§†¹€ Lv³€+vè§iÕ0˼Ã=6‡M?®Cy]öÔ“Ÿœ¼&å&ÈËKÂÚת`sí´Àƒ5˜~e%àdÐh“jĶ–‡ ‡!çñõd²)'LOF)–“Ì^½4'¼\Èc¬_º'EGfÿMéÅ'£Ó”‹úq¬ŸŒP¹dÍOÜèS}JSØÞ4—†ÀÓ´ˆx,ǽ=à¡„8ËèíÒ=Ø8Åßt¼»ô²73Å)¹Ä6/£/DEp€¦ÚÇ©<×üÐýÞû1u»ìÇÌ»¡Ÿ+çÛÊ»1{a`#¾!ÖŠÑ· u‡Fíɲ˜O¹-s†Œj@ÒŸ}ëîTtxþ•å’Ò„¥uIG,|%ˆÐïÀhME^gÙB!ÌX‘HÔJ¤$®# îip³Á¡dy¦\BñÒpA6+\Ø—Þå“ vრ±Öx˜8>‡ÎÃt›•ìxÍA‚åGÒÛ:€ÛLQHÏöº¨j„Y½_º‡U‹òf.á~‘^/Øü­’ £‡Õ ên’ÂëEy¾½W¾ïÿ˜;'ÿ1÷nüÇÒù¶òŒM‰3ˆç~~51‚¨ø¾¡ï$9óÅhS EÖ¨ ¢-Gl+P;ŽUî Êpú° Ã¥íNÿfÿu/Ÿ÷Q¬¥Ô“'ÃþS2 ¬µþïö0òÒ­54ŠƒJˆj/eßw ¸(~{DÞ¢ÛC6Á:Ðk|.ã\”Üdr •åÎù­¶ßGÿójÄeÖ*õ¨éÚ~¦hLÍíÖý@zo{è7é9”sâÇ8GO•bО<‰Sžkïuïº÷·KÎû>ú}ÕÊÛ×Üálÿœà6VPš³LU«B šI0×( e`Q,ÂðVyŸ‰UÃù³ !¤.«½=:0oÔª\D mV¹ äxŠÆe‹’U«€Y Mþ°‘Çô”}n Ùà\@Èvqq´øæ˜ð…Lžn·œïž'@lvQ½zñ³Š/WW[UÉnø²)Š"Pd»£½ú€¾Ÿú‹ãñØ‘†{wÞšSÅ.6@ñÖ}VñaxŸ¢`¸›rYq¢}ôò™t7QeˆÓ+ïgký:Uï;ß§îgþuN½û¾r~vÕ½Üʳש´œýÑJêa¼‘ xL¬ÈÒJÅÖŠ,tX±ãûj¥Â¥ŒÑ¬¤NìÖ,qתÁ€®Vc µ[3òZ~ŠeQdÅ…®–/‰dÆûuøV¬ê&Â~SÎm*ºníáZ¢Z¸/?ï¿*Rp'ù¨Þä/*",÷`áŽ_¾W…΃ a=ÿ?ÕÁÝ“?ȥ·ݕ—p|¨ŽöƒëNžÌrÆ¥[ÿCÙ`"˜±é&?5L ‰Ùâmü"]_u0N}®ù¡~×ý1}Nücú÷áŸËçËêó&(.1p6Sƒ Cˆ2u¹Þ’厂ËOò&à2eJ™€Ä Ø’¹A!Y*z̨¡Å›¹Õþ֔ܗYÞ—Ù‘@ÛNxuqf<ÙG *ÁZØ-;¾e™?×[¬BÈáqa»S²†îf¼µïDì``èVæàúÇÙþ¾©q‘?6• Ë Ýø£RøRXò[èC8 Ç#&<«pŠTZº5—e)dpjµ^è辩øÊµoâsQ%#ƒˆ·áËKÌ.­Ú¸hÏ5?´¿wÎÞ.þ9ûûðÏÕómõ¼Žlõ‰ n#HœÔ¿êª±¯BѤzþ©n z!)ïû Œ !n\UP#äGÑúªjÂÇnÓ?A?ÎÀ«jsÂAU´ù‰šÖmËwV޽Äu~#Ä~8wÛ­}!—Œ#1§|ëŸ@ • ¥u?ýR"Ôôý} ‡ PS ¹k{§>(BŲ˜s½XÄÖáyDÄ”níåö–Éîò:ÎùÖûE¸>Õ‘B¾Éß~õ ØŽ˜-é6~Q¸–¹§QãM®ý¡×ÿ1N~?ýnøÇêù¶úÌJI€ãa®Îr¡Ib‡ë²)„¤!^˜RV0„‹Emb^< @ª IŽuÔËw2D¬š-²Ž¡z’àûTW|ZÌÅ*ò̉ù•:¯¼±¨…#I_ræ[{1+¯¦Üã­{¹¶&¥ï¢…y?«ø²}[z€m·á“+$’䙟,áM{Yi y2v½Ê7õPqÿœ gï¸9kX@ó"½|oŠûG â9ø¢Õ–Ô×?¬Í»î|s¯{ß½Ÿ;/þ1÷nôÇÚù¶öŽD'ʬ0´ƒ]ÔYv<¥`*ªË çƒ<ñdÿ¬ÜFùgKÀö©ÏI^ÔáUX8S‰ ¹8óA~^ºÉ«˜Tñ'ãb &‡ò’®:P]ë²¹‘” Ò“]3\ŠÓ/Í)‹•§¬èyXhzïœ]‰Â·uË8Ù©m‡j2÷Þ»}~¢^ €ï´ö»ê8dä@V ƒ×¤é!?¸´§†J–|i\úÏZϱ„õwÊL>láò„Îý2|JpGÈ,í¢>×ÞkßuïçÎI̼ý±p¾­»‹5:ABk-QØ!OŒ…ª“Áá”ÄMeå`‰œ£”.JdzŤ%ÐÊ^ÒTD ÿÑ¡ÖïdÓÊß?ôS°;&ö¹md ?‘¤¦ÊO®'exÑðÆz±Ôåvrí#ÖQmìêtë?¨u ëÂÕÙå—‰–_bO„6Ÿà 1©ÀîGóAH2œqâÞ½2ëfè^K/ñ•ZW®ëBIáeø#j‘zT0§‹ú|{¯~×ÿ1}Nþsú÷ñŸËçËê³£Scq:Í…s›y“¹’'XPoÙ_ËÄ»º¼)P”㆕‘Ø>.Locò²3Ç—ÝMb ¥ÜVŽ/™,2‹yý¡åZø¿Ž?xò6ÐTnl°ÄMzŠ·öðý–Yàô—þµ(?…ùq¥©êODêsüV1åboÈ·OýñP¶ÊòZÈ8” #/í9ÀxärÅKÿ-ªü,]äoËÔdÏe#ïãÇQAn?èE}¾¹W¿ëþ˜>'þ9ýûðÏåómùYT ¿xŽ ‹K‰)Û*½ÑÇ(ì¡=öcòòx£å¢ð/mðbO0ON&E€ð«0HÜxï’1)cÑLKÚ óÎúF ø @12ËwVx­Œ€èl/w=6¾¼Þèc[ÿDA¹;r£mÒg•ž Ð}l}Öà±Ìh~£mÚK{îzÇ/ËYÉ.+œL—öU‹” )&9]ú¯Z¤$? CÞËÏ{¶PbïjZúñ“¼,–,ô=5^ôçÛ{ýûþýüyù÷Ù÷£?Öηµg«“W—"œÄ¼Ò²rÀúOM‚7÷`Çcìĵʓ¨%¬O‚55dUGzÀ„BÒ¬ö`–écRÞ2æ§™¿*] hYÌ3j&vˆoþ*¡\^øñF#…öÖ¾‘‘Ó Y)³®Ì3<þåÉÈtâ_~añW¹áÓUø[Ë{W0îs-ÔüÔb—(À_¼µ/ø5“VìÅ[ÿP2(Œw«é&?üP`~‰mo㯿´0 .'å®=ßÚkß÷îgÏKï'ü¹v¾­½ÊiPhÝB³\Rðc_Âù:/È Ðl&ý€Î4[&ÝYV*|ͬX Õ€0þüav:h.pþXsr`Mk|¥>dyv$ZÍ劖þ”|Bß òóØÚ=ãÛç_ò’ø>ÑÞ}ú——NŠ7é“JO-‚!A¹ÁGþŒ®(£MyиÉ5Ð÷‡A!É2Óò/ìí)äïÅfÊuã§É«#ï&½&JOÌœº6÷Á“(-’p2ÖvQžoï•ïû÷“çÅ?æÞ ÿX;ßÖÞájøéÐ’•6Ft3u,_§}¦L×ÐgÀ3ž@_Íuc$-T—Ÿ7“W ·¦1먙šºPÀ=ç¼\Eòü£hMSaaJì?±˜W“²„‘ c°Q "È&o¥]Ú+*÷ÙL1_ú'KGÃ6ôŽ­Š.å÷åÔ‹ùA-ø>–Ô@(ëAº« “z† !õ²§©âTYÈJ®=övÐüsõ|[}ÂÚ÷¦Kð!*x+sÖ&däI¶RúaÛÐ!®ËzˆkZS…w–|ü`£•MBþm4”Óe[*Tà­{Y~¨1£\I²S‹¥¢ál žzk BCx­ß¹",sÐQ(r[ˆDiLÀý›iùå¹GEX\ˆî0šÁÉlœD€BËó “O€«Gi¶Ìñ,ëÞlzÓ©g9¯×èÂr¾~k.Ni mQË¥wE$¬8ÿE’“^ Eg¤¼çfþ¼|ÏÔDP¢WV”ú·ê4ü#Ï€òêŠqeÜ®Ã>Zë='=g™;{É 8†¬ u§ôƒz¿‘ë4»côã—æo†ÞW‡Óžkï•¿wLÝ.ý9óûè÷…ó󩺗[uæwÂ1&ÇsH½Ø=<'dE¤ãê5Oô „Ù©0ªœóPõä'iúŸßÁ¾Ðå¨^{£cVjY»g4^"‹!<`L8ùi÷ÔhT·8ŸZ‚ú¿i÷n_èÙZºµï cv¥Ô˜—þÙÁS™jKœùÉõ•ß§·<µŸãçidKà _vƧþà–‹à~3ØE¦›û¸µîØþ÷ދJŸ©–Ÿ7é jú渌ž˜ŒˆšÄÑžoïµïú?fÏÉ̾ÿ¹z¾­¾ n¥Î4+ÓDB²áH„iz‚’H+“\£&ê*é 'éÁõ.`kèËf,êUÜÁ¤½ÚË¥ú“ÈûŽV'H†â𠛢ÂI©¹ lQ›å )È ïû8š!4À $š®ëÝåšC×-}aN•[ï$ƒ»Ô×5ë¥Ï*=Éž •Ü žÐà%Çn%7NwríÍÎÛEyiíá•ä–m±´|k>€ØÁ\Î=ߺŸ*þLò²)7ñI½ SŽí|þÄ}¤/%‰:ÔçÚ{í»îýÜ9é©w£÷+ç˺cþãÏ?ÿä!""›à—øëÙ-‰rìä¨ù½õýïŸÿû?~þëÏÿVë þüçÿ¨¶¹1g4K… ýÉò€•â¡€RZ~Œs‰áÊ8ÕËð_þ¿ÅPSå_!¾;y4Êå§Õ]!?™z§— áçô÷þåõϯ¸†xí¿ýõçïþUéÿîÿ¼þñÏÿVžè0!="¯VÝZ…Ÿ’ÿòúû¿üüÝà„ÿùËÿ|‰"c:L@ŒDY ùï¯ÓÿíÏ_þ×Ï¿ÿËË‹Wæ)*Ä.Þð⹿½‹7¿ˆ'WÍçP±@`X%*!e,«Iý0…CÀíO¯òÉÊÿ"žŒI´bHûM¼ù§âmËæS¼tˆ·¯°«xù›x²@ô¯ ÂìâÅð§ò5„`#÷M¾rÈ·ýé]¾úM> Ū &¾,¾ÿT¸È$&Þ”Ýü)ܱ7ö?½ ÷mk”^ä,& û]yéOå›WZSÀûM¾sslz—ïëÞ Åÿ+ì\Òa ¼÷=A?)*ž¡giï¿-ˆT!Áu#™Š3¼BRŸ¿â‹¾•­­3®Øq¢˜˜x∠kO²úñ}êÊŃÒh×FÅ:â#7YÕ_Ljδ!/49Ç;d./£ùËóÓÕ»æ.u—Õuæêº#FiÚŽø;“ÐÖ0â‹kéò¦²]éŠ^;:JüFr—¨ïŽ#ÚצñpØ(1)‡7NÅØæÛi@ºú×"½Ž›ê¼c‹"5G,é’ßéœÔñ9·°¥&H_®¶HÙS)Ýy8_<þ˜Æ#þ€t'#©"%h—z,Q¤®,¶H¹:™RQæêÜ!“m> stream xœ5Œ» À0D{¦¸ø8€÷‰R‘ýÛ[.¸{Òç9ÀÈ>GèÄ-dCá¦xI9¡>Q4Zo:¶Hs¿¼d3ý3Ü}…íæ€d4Iä!ÑåråY)z>—Ú~ endstream endobj 263 0 obj << /Filter /FlateDecode /Length 232 >> stream xœ5Q;r1ë} ] 3æoŸg3¯JîßF°“fa ç=؈ėÒåŠoYf~'‹¼øY)œ¼QTEX!íàYÎj†Ás#Sàr&>ËÌ'ÓbǪ‰8ÎŽœf01ëh9fš=!×#nì4ËU i½[ª×÷ZþSEùȺ›åÖ)›Z©[ôŒ=‰ËÎë©-í £Žâ¦ Òác‡÷ _ÄœÅE'ÒÍ~3å°’4§ð#1”êÙá5ÂÄÏŒOÙÓé}”†×>hº¾w/èÈÍ„LåÊHÅ“•Ƙ1T¿Í$õý?г>š0TG endstream endobj 264 0 obj << /Filter /FlateDecode /Length 160 >> stream xœ=Kà C÷œBGÀøžtºJî¿­ l°„ôÀ}b"£'‚¯Ä‡¥Ã$ðl„{0Ùr„äM†²ƒ$q ¥Â¦c™ïɦuÒJ¬¼Ñ~Ùw4ftŠ-E‡v!ÿçõ"Ü£àë<`1ÈÚJ¥ì™0Ze¦®ò¨èµÓá=D«Ååõ®ðÚG7©(*KêþDw4Øþ‘·ûß™e8$ endstream endobj 265 0 obj << /Filter /FlateDecode /Length 49 >> stream xœ3²4U0P°´†–æ æF– )†\@>ˆ•Ë˳ €4XiLEW¥D ä endstream endobj 266 0 obj << /Filter /FlateDecode /Length 210 >> stream xœ5PË C1»g ¨džV½uÿkmÐ;aÿBXÈ”y©ÉÎ)éK>:L¶.¿±" ­u%ìÊš ž+ï¡™²±ÑØâ`p&^€7`èi5tႦ.•BÅ%ð™|u{è¾OxjrvCÉ` jºMX´<ŸNâÿ~Ãî-ä¡’óÊžùœíð;³ná'jv"Ñr2Ô³4ÇE> stream xœ336S0P°0¦¦† æF– )†\@>ˆ•Ë˳Ì,Ì,# –.C c0mbl¤`fbdY 1 ºÒrø‘ endstream endobj 268 0 obj << /Filter /FlateDecode /Length 80 >> stream xœEŒ» À0D{¦`~&fŸ(•³ JÜpOº{¸:2SÞa†‡ž ,†Sñ™£`5¸FR죰n_uæzS«õ÷*Ovvq=ÍËô endstream endobj 269 0 obj << /Filter /FlateDecode /Length 90 >> stream xœMAÀ ï¼"OPDÐÿtzÒÿ_«Ô½ÀN‰E‚ô5jK0î¸2kP)˜”—ÀU0\ Úî¢Êþ2IL†Ó{·ƒ²ñqƒÒIûöqz«ýzÝÒ"X endstream endobj 270 0 obj << /Filter /FlateDecode /Length 165 >> stream xœE;! C{N¡#€Ày6“нË;I,Œ%?¢+:öÊÃccÊÆk´±'ÂîR: §©Œ¯Š§g] Ëa2So\Í\`ª°ÈnN±ú|¡òìæ„¯Už—L 0•;¹‡õúQœ–|$» ‚ê”ÊÂ0GÒ÷@LM›§…ü/yjAP™æk–•GkS4g˜*[ ‚õ :¥úÓÿL§½?Üô=€ endstream endobj 271 0 obj << /Filter /FlateDecode /Length 338 >> stream xœ5RK’[AÛ¿Sè®jþÍyœšÕäþÛ쬠8ÈÄK QrÅy‚ñ:¿ëåiü>Þ…Ô‚§"ýÀµiïÇš5Q°4b)Ì>öý(!ÇSãßè¹Hfd2r ˆûµ>Ö›L9ü¤isú(Iz-ØÝv|YAÒ“–ìä‡u-°ºM˜k"9µ25ÏÇžá2ž#AÕ, IŸ¸OŒH3;g-yáxª/~½×2©—U2¶ æ`;™ §("¿ $¹‰»hê(ŽfÆšÛ…†’"÷Ý=œœôº¿œD^ á,ÖŽzÊ2'; J jå˜a½ö…qš6J¸SÓí]±¯ßg&aÜæ°³R2 Îqp/›Ì${Ý1a‡˜÷îŒÄ¼ù]l\¹Ì¹&Óý(ÚH×ç\M™­(áªä‰×øÿüÞÏÏ?7}± endstream endobj 272 0 obj << /Filter /FlateDecode /Length 392 >> stream xœ=RKn1ÛÏ)¸@¥ðMrž©ÞîÝ[›ÌTª /¶1”— ©%?ê’ˆ3L~õr]âQò½ljgæ!î.6¦øXr_º†ØrÑšb±OÉ/È´TX¡VÝ£Cñ…(-àá¾ÿñ¨Á×°…rÃ{d`JÔn@ÆCÑHYAaû‘è¤P¯láï( WÔ¬…¡tbˆ –)¾« ‰˜¨Ù ‡„•’ªÒñŒ¤ð[Á]‰aP[[ÛxfÐÙÞ‘3íÑqYk?=é£Q2µQMg|ñÝ2RóÑè¤ÒÈÝÊCgÏB'`$æI˜çp#ážÛA 1ôq¯–Ol÷˜)V‘ð;ʽýÞ’Ï{à,Œ\ÛìL'ðÑi§­¾býƒ?lK›\Ç+‡E¨¼(~×Aq|XÅ÷d£Dw´Ö#Õh% ÂÎí0òxÆyÙÞ´æôDh£DÔŽ=(²Å地§ü¬Í±ž&{o´”Į̀„Ôvz¨¶ÏcÔwžûúü.¡ endstream endobj 273 0 obj << /Filter /FlateDecode /Length 248 >> stream xœ-Q9’AËçzBsÓï±Ë‘÷ÿé ʃ†C :-qPÆO–+ÞòÈU´áï™ÁwÁ¡ßÊu9HÒTM¨]¼½vfó¤5,ƒë?c 7zqxLÆÙíu5{×kOfP2+qÉÄSuØÈ™ÃO¦Œ í\Ï È¹Öe¤›•ÆŒ„#M!RH¡ê&©3A£«Q£Å~éË#aU#j û\KÛ×sÎ4;«<9¥GWœËÉÅ +ý¼ÍÀET«<p¿ÛCýœìä7ÞÒ¹³Åôø^s²¼0XñæµMµø7/âø=ãëùü¨¥[ endstream endobj 274 0 obj << /Filter /FlateDecode /Length 70 >> stream xœ3³0Q0P°b3s3s#K…C.# 3 @.—X ‡ËÐÐÊ261R044²LÍ¡b0@YKA9Pý9\iOT/ endstream endobj 275 0 obj << /Filter /FlateDecode /Length 320 >> stream xœ5Q»qÅ0 ë5ðø•4s¯ÊÛ¿ @;a@ª¼dJ¹\ê’U²ÂäG‡êMù>`¦üõãèÙ!ºSÖ–{ËÄ<¥ŽXM–{¸/ M‰¹…ó÷è+£0ºÅß?@³$0ipðSk­Zb‰<,X³+Ì­)TÈU|;6¹rq³Ð§š·Ü‚ðeˆdGj±¯Ëe)ò»õ „æˆO‰…çf"ñ'b{öÙbWW/ªÖI‡RÒln04E²êƒØWÇ5?OGÙÁÉA¿ŠÁø68™/Iy_¡þÏÙȱ’C$ò}µÀˆ#l€¡Oí#e 4E÷î™R>&UŠïF!}ªW2¼‘Ùj†Íÿ]Ù* UYŸFp&ƒI8ód£ ÓRµÓ¿ûÜãóccz€ endstream endobj 276 0 obj << /Filter /FlateDecode /Length 338 >> stream xœ5R9®Ý@ ë} ] €vÍœç©~î߆”_ C´VŠšŽ•iùe!U-“.¿íIm‰ò÷É ‰’W%Ú¥ ‘Pù<…T¿g˼¾Öœ K• ““’Ç% þ —Þ.çck?#w=z`UŒ„Ë£kY:»Ãšü<¦?âr®X·cH ºqÚïCóyÈ f˜–Š ]V‰~Añ G­}÷XTX ÑíIpŒP‘€vÚH 9³»¨/úY”˜ tí‹"î¢ÀIÌœb]:ú>t,¨¿6ã˯ŽJúH+kLÚw£IiÌ"“®—Eo7o}=¸@ó.Ê^Í ASÖ(i|Ъc(še…wš 4LJÌ<‡3”ô}(~_K&º(‘? ¡_£ŒœosÑŸ¶ŠñÙa¯`…ÒÅšä}@*z`úÿ×øyþü¶€T endstream endobj 260 0 obj << /FontMatrix [ 0.001 0 0 0.001 0 0 ] /Name /BitstreamVeraSans-Roman /FontBBox [ -184 -236 1288 929 ] /Encoding << /Differences [ 48 /zero /one /two /three /four 55 /seven /eight /nine 65 /A 67 /C /D 73 /I 80 /P 83 /S 86 /V ] /Type /Encoding >> /BaseFont /BitstreamVeraSans-Roman /Type /Font /CharProcs 261 0 R /Subtype /Type3 /FontDescriptor 259 0 R /Widths 258 0 R /LastChar 255 /FirstChar 0 >> endobj 259 0 obj << /FontName /BitstreamVeraSans-Roman /Descent -236 /FontBBox [ -184 -236 1288 929 ] /CapHeight 730 /Ascent 929 /MaxWidth 1342 /StemV 0 /Flags 32 /XHeight 547 /ItalicAngle 0 /Type /FontDescriptor >> endobj 258 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 636 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 636 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] endobj 261 0 obj << /A 262 0 R /C 263 0 R /D 264 0 R /I 265 0 R /seven 267 0 R /one 268 0 R /four 269 0 R /P 270 0 R /zero 266 0 R /eight 272 0 R /two 273 0 R /V 274 0 R /nine 275 0 R /three 276 0 R /S 271 0 R >> endobj 6 0 obj << /F1 260 0 R >> endobj 7 0 obj << >> endobj 8 0 obj << >> endobj 9 0 obj << /M195 207 0 R /M95 107 0 R /M76 88 0 R /M16 28 0 R /M203 215 0 R /M233 245 0 R /M236 248 0 R /M74 86 0 R /M138 150 0 R /M29 41 0 R /M7 19 0 R /M191 203 0 R /M9 21 0 R /M193 205 0 R /M121 133 0 R /M64 76 0 R /M119 131 0 R /M215 227 0 R /M173 185 0 R /M19 31 0 R /M140 152 0 R /M168 180 0 R /M219 231 0 R /M177 189 0 R /M198 210 0 R /M82 94 0 R /M63 75 0 R /M131 143 0 R /M225 237 0 R /M211 223 0 R /M134 146 0 R /M139 151 0 R /M227 239 0 R /M141 153 0 R /M229 241 0 R /M112 124 0 R /M179 191 0 R /M231 243 0 R /M162 174 0 R /M88 100 0 R /M104 116 0 R /M115 127 0 R /M129 141 0 R /M117 129 0 R /M158 170 0 R /M216 228 0 R /M182 194 0 R /M175 187 0 R /M181 193 0 R /M96 108 0 R /M38 50 0 R /M185 197 0 R /M11 23 0 R /M210 222 0 R /M108 120 0 R /M205 217 0 R /M80 92 0 R /M17 29 0 R /M50 62 0 R /M45 57 0 R /M187 199 0 R /M200 212 0 R /M89 101 0 R /M56 68 0 R /M147 159 0 R /M26 38 0 R /M58 70 0 R /M28 40 0 R /M199 211 0 R /M240 252 0 R /M192 204 0 R /M164 176 0 R /M111 123 0 R /M65 77 0 R /M222 234 0 R /M172 184 0 R /M57 69 0 R /M13 25 0 R /M71 83 0 R /M148 160 0 R /M196 208 0 R /M123 135 0 R /M235 247 0 R /M87 99 0 R /M91 103 0 R /M18 30 0 R /M67 79 0 R /M46 58 0 R /M234 246 0 R /M52 64 0 R /M118 130 0 R /M100 112 0 R /M126 138 0 R /M190 202 0 R /M237 249 0 R /M213 225 0 R /M69 81 0 R /M35 47 0 R /M239 251 0 R /M98 110 0 R /M47 59 0 R /M214 226 0 R /M122 134 0 R /M243 255 0 R /M142 154 0 R /M79 91 0 R /M245 257 0 R /M124 136 0 R /M208 220 0 R /M14 26 0 R /M128 140 0 R /M218 230 0 R /M24 36 0 R /M220 232 0 R /M226 238 0 R /M207 219 0 R /M163 175 0 R /M133 145 0 R /M230 242 0 R /M54 66 0 R /M12 24 0 R /M150 162 0 R /M15 27 0 R /M114 126 0 R /M72 84 0 R /M33 45 0 R /M110 122 0 R /M116 128 0 R /M25 37 0 R /M36 48 0 R /M188 200 0 R /M174 186 0 R /M176 188 0 R /M149 161 0 R /M159 171 0 R /M49 61 0 R /M78 90 0 R /M242 254 0 R /M197 209 0 R /M85 97 0 R /M157 169 0 R /M130 142 0 R /M44 56 0 R /M154 166 0 R /M20 32 0 R /M144 156 0 R /M206 218 0 R /M23 35 0 R /M109 121 0 R /M180 192 0 R /M5 17 0 R /M221 233 0 R /M143 155 0 R /M103 115 0 R /M167 179 0 R /M27 39 0 R /M169 181 0 R /M66 78 0 R /M6 18 0 R /M93 105 0 R /M10 22 0 R /M120 132 0 R /M223 235 0 R /M2 14 0 R /M70 82 0 R /M51 63 0 R /M42 54 0 R /M0 12 0 R /M83 95 0 R /M86 98 0 R /M106 118 0 R /M166 178 0 R /M68 80 0 R /M204 216 0 R /M8 20 0 R /M241 253 0 R /M101 113 0 R /M77 89 0 R /M40 52 0 R /M107 119 0 R /M183 195 0 R /M61 73 0 R /M34 46 0 R /M160 172 0 R /M202 214 0 R /M39 51 0 R /M125 137 0 R /M94 106 0 R /M43 55 0 R /M30 42 0 R /M217 229 0 R /M59 71 0 R /M62 74 0 R /M48 60 0 R /M53 65 0 R /M201 213 0 R /M228 240 0 R /M145 157 0 R /M184 196 0 R /M21 33 0 R /M97 109 0 R /M178 190 0 R /M99 111 0 R /M244 256 0 R /M60 72 0 R /M151 163 0 R /M153 165 0 R /M31 43 0 R /M92 104 0 R /M155 167 0 R /M146 158 0 R /M152 164 0 R /M41 53 0 R /M102 114 0 R /M209 221 0 R /M161 173 0 R /M156 168 0 R /M194 206 0 R /M170 182 0 R /M232 244 0 R /M75 87 0 R /M135 147 0 R /M238 250 0 R /M37 49 0 R /M137 149 0 R /M55 67 0 R /M127 139 0 R /M22 34 0 R /M1 13 0 R /M73 85 0 R /M4 16 0 R /M113 125 0 R /M189 201 0 R /M224 236 0 R /M32 44 0 R /M136 148 0 R /M186 198 0 R /M171 183 0 R /M90 102 0 R /M212 224 0 R /M105 117 0 R /M84 96 0 R /M165 177 0 R /M3 15 0 R /M132 144 0 R /M81 93 0 R >> endobj 252 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 105 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 164 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 200 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 254 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 84 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 204 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 219 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 253 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 19 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 212 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 250 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 229 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 123 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 194 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 214 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 76 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 31 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 196 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 169 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 87 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 171 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 246 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 131 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 50 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 225 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 241 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 158 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 51 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 71 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 161 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 45 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 79 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 207 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 41 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 62 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 149 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 35 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 220 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 113 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 135 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 156 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 25 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 155 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 148 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 159 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 193 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 162 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 236 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 112 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 65 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 177 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 119 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 132 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 228 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 224 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 231 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 122 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 59 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 192 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 80 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 163 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 107 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 175 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 85 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 170 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 138 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 83 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 210 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 239 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 213 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 145 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 109 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 199 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 117 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 77 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 181 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 90 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 120 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 91 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 54 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 18 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 217 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 146 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 174 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 243 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 157 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 69 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 40 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 110 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 63 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 72 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 223 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 244 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 97 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 180 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 216 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 52 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 26 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 187 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 125 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 100 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 30 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 211 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 127 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 136 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 256 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 142 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 238 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 186 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 95 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 215 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 70 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 195 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 179 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 67 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 88 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 39 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 15 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 188 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 111 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 130 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 16 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 94 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 126 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 68 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 43 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 116 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 153 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 245 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 108 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 221 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 237 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 152 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 202 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 124 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 74 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 226 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 73 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 28 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 248 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 173 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 182 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 139 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 209 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 208 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 140 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 151 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 103 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 167 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 96 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 101 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 56 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 29 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 133 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 14 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 206 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 255 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 22 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 143 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 191 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 172 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 251 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 185 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 99 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 144 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 114 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 89 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 106 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 60 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 102 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 218 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 17 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 27 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 232 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 165 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 257 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 34 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 190 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 184 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 118 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 12 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 13 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 227 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 154 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 249 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 242 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 147 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 93 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 75 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 49 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 36 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 46 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 92 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 115 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 38 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 20 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 141 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 24 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 234 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 176 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 48 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 98 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 104 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 198 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 57 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 58 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 23 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 66 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 129 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 82 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 205 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 247 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 128 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 32 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 137 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 86 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 166 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 61 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 233 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 240 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 150 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 197 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 47 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 44 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 78 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 201 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 33 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 81 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 134 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 189 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 53 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 178 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 160 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 183 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 55 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 42 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 64 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 37 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 168 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 222 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 21 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 235 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 230 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 203 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 121 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj xref 0 277 0000000000 65535 n 0000000016 00000 n 0000000065 00000 n 0000000216 00000 n 0000000275 00000 n 0000000511 00000 n 0000206100 00000 n 0000206133 00000 n 0000206154 00000 n 0000206175 00000 n 0000000382 00000 n 0000200227 00000 n 0000237533 00000 n 0000237687 00000 n 0000233500 00000 n 0000227759 00000 n 0000228380 00000 n 0000236137 00000 n 0000222021 00000 n 0000210839 00000 n 0000239857 00000 n 0000246829 00000 n 0000233965 00000 n 0000241558 00000 n 0000240167 00000 n 0000215963 00000 n 0000224656 00000 n 0000236292 00000 n 0000231015 00000 n 0000233189 00000 n 0000225277 00000 n 0000212080 00000 n 0000242644 00000 n 0000244659 00000 n 0000236914 00000 n 0000215186 00000 n 0000239085 00000 n 0000246364 00000 n 0000239703 00000 n 0000227604 00000 n 0000223108 00000 n 0000214721 00000 n 0000246056 00000 n 0000228997 00000 n 0000244195 00000 n 0000214255 00000 n 0000239239 00000 n 0000244040 00000 n 0000240631 00000 n 0000238930 00000 n 0000213168 00000 n 0000213789 00000 n 0000224502 00000 n 0000245280 00000 n 0000221867 00000 n 0000245901 00000 n 0000233035 00000 n 0000241249 00000 n 0000241404 00000 n 0000218449 00000 n 0000235673 00000 n 0000243263 00000 n 0000214876 00000 n 0000223417 00000 n 0000246210 00000 n 0000217206 00000 n 0000241713 00000 n 0000227295 00000 n 0000228843 00000 n 0000222953 00000 n 0000226829 00000 n 0000213944 00000 n 0000223572 00000 n 0000230860 00000 n 0000230551 00000 n 0000238775 00000 n 0000211926 00000 n 0000221092 00000 n 0000244349 00000 n 0000214410 00000 n 0000218759 00000 n 0000244814 00000 n 0000242023 00000 n 0000219846 00000 n 0000210218 00000 n 0000219381 00000 n 0000242954 00000 n 0000212546 00000 n 0000227450 00000 n 0000235363 00000 n 0000221403 00000 n 0000221712 00000 n 0000239393 00000 n 0000238620 00000 n 0000228534 00000 n 0000226518 00000 n 0000232725 00000 n 0000224037 00000 n 0000240785 00000 n 0000234898 00000 n 0000225122 00000 n 0000232879 00000 n 0000235827 00000 n 0000232413 00000 n 0000240939 00000 n 0000209597 00000 n 0000235518 00000 n 0000219069 00000 n 0000229619 00000 n 0000220624 00000 n 0000223262 00000 n 0000228069 00000 n 0000217051 00000 n 0000215496 00000 n 0000235208 00000 n 0000239547 00000 n 0000229152 00000 n 0000220936 00000 n 0000237378 00000 n 0000217517 00000 n 0000221557 00000 n 0000247451 00000 n 0000218294 00000 n 0000211460 00000 n 0000230396 00000 n 0000224966 00000 n 0000228688 00000 n 0000225587 00000 n 0000242489 00000 n 0000241867 00000 n 0000228225 00000 n 0000213012 00000 n 0000217673 00000 n 0000233344 00000 n 0000244969 00000 n 0000215652 00000 n 0000225743 00000 n 0000242798 00000 n 0000219691 00000 n 0000231635 00000 n 0000232102 00000 n 0000240011 00000 n 0000226053 00000 n 0000234119 00000 n 0000235053 00000 n 0000220468 00000 n 0000222331 00000 n 0000238464 00000 n 0000216274 00000 n 0000215030 00000 n 0000243729 00000 n 0000232257 00000 n 0000230086 00000 n 0000229307 00000 n 0000237998 00000 n 0000216118 00000 n 0000215808 00000 n 0000222797 00000 n 0000213634 00000 n 0000216429 00000 n 0000245590 00000 n 0000214099 00000 n 0000216741 00000 n 0000218913 00000 n 0000209753 00000 n 0000236602 00000 n 0000243108 00000 n 0000232569 00000 n 0000246519 00000 n 0000212390 00000 n 0000219536 00000 n 0000212701 00000 n 0000234431 00000 n 0000231324 00000 n 0000222486 00000 n 0000219225 00000 n 0000240476 00000 n 0000217361 00000 n 0000245435 00000 n 0000227139 00000 n 0000224192 00000 n 0000221247 00000 n 0000231480 00000 n 0000245745 00000 n 0000237223 00000 n 0000234742 00000 n 0000226363 00000 n 0000224810 00000 n 0000227914 00000 n 0000245124 00000 n 0000237068 00000 n 0000234275 00000 n 0000218604 00000 n 0000216585 00000 n 0000211616 00000 n 0000226983 00000 n 0000212235 00000 n 0000243884 00000 n 0000241094 00000 n 0000220780 00000 n 0000209908 00000 n 0000244503 00000 n 0000230241 00000 n 0000247295 00000 n 0000210372 00000 n 0000242177 00000 n 0000233654 00000 n 0000214565 00000 n 0000231947 00000 n 0000231791 00000 n 0000220001 00000 n 0000225431 00000 n 0000210994 00000 n 0000220312 00000 n 0000211771 00000 n 0000226673 00000 n 0000224347 00000 n 0000222175 00000 n 0000235982 00000 n 0000210527 00000 n 0000215341 00000 n 0000229774 00000 n 0000246674 00000 n 0000223726 00000 n 0000217983 00000 n 0000213322 00000 n 0000230705 00000 n 0000237842 00000 n 0000217828 00000 n 0000211304 00000 n 0000247140 00000 n 0000218138 00000 n 0000236447 00000 n 0000243418 00000 n 0000240321 00000 n 0000246984 00000 n 0000216896 00000 n 0000229930 00000 n 0000226208 00000 n 0000220156 00000 n 0000243574 00000 n 0000213478 00000 n 0000238309 00000 n 0000222641 00000 n 0000223882 00000 n 0000229463 00000 n 0000212857 00000 n 0000242333 00000 n 0000231169 00000 n 0000238153 00000 n 0000211149 00000 n 0000234586 00000 n 0000209442 00000 n 0000210683 00000 n 0000210063 00000 n 0000233809 00000 n 0000225898 00000 n 0000236758 00000 n 0000204833 00000 n 0000204617 00000 n 0000204202 00000 n 0000205887 00000 n 0000200250 00000 n 0000200411 00000 n 0000200717 00000 n 0000200951 00000 n 0000201073 00000 n 0000201357 00000 n 0000201498 00000 n 0000201651 00000 n 0000201814 00000 n 0000202053 00000 n 0000202465 00000 n 0000202931 00000 n 0000203253 00000 n 0000203396 00000 n 0000203790 00000 n trailer << /Info 2 0 R /Root 1 0 R /Size 277 >> startxref 247607 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_projections.png000066400000000000000000004371471202542755000216770ustar00rootroot00000000000000‰PNG  IHDRô¢d}sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ %@S IDATxÚìw|Í×ûÀß7÷fY"#‰‘3Ähh¬ØJQ­U³Õ¢:´Zª­¶65J)~5ŠÒaoµ© A’H" Ù;¹¹óüþÈu›k54|ÑÏûõòjóçÞÏóyîóœóœsžG&„Hü#—.]bÁ‚„††RXXˆ••...´oßž¾}ûÒ­[7† ƤI“°°°0¹7;;›®]»âááÁ/¿ü¢E‹øâ‹/prrÂÒÒ…B““¾¾¾¼öÚkS¡BIèeâÇdôèÑxzz¢P(Ë帺ºòÖ[oÑ·o_£.åååqòäI–/_Îõë×)..ÆÆÆ???úöíK=°¶¶6¶ËàÁƒ9}ú4G¥uëÖ’°%›Þ½{sõêU®\¹bÀÒÒWWW&Nœˆ¯¯/ÅÅÅ$''sêÔ)F͈#xÿý÷qvv–„/Q&d2³gÏÆÍÍ‚‚öîÝËgŸ}†L&cÈ!²téR–.]JÇŽéÝ»7®®®pþüyV®\IÓ¦Mñññ1¶Á­[·puueíÚµ´jÕ ™L& [¢\P«Õ¬_¿ž¹sçR¯^=ÆO¥J•P«Õ\¼x‘Í›7S«V-“Ždll,—.]¢råʬ_¿ž7ß|333I˜’C/;¡¡¡ÄÆÆ2}út `4jBòóó±³³£M›6ìØ±ƒððp:uêdÒ=|ø0r¹œ.]º[YYH`` ñXß¾}™7oË–-Ãßߟ×^{M2 e&((ˆjÕªȶmÛ8uê½{÷&,,Œ… Ò¿&OžŒ“““ñ¾=zƒ»»»I{¿ýöT©R…#GŽKÍš5%AK” qqqL:•àà`¦NjÔ]€®]»wÏàè÷ß§zõê³~ýz®\¹B½zõ$aº6eÀÜÜ!III¤§§S\\l988`ffFëÖ­©[·.+V¬@§Óï½zõ*GŽaÀ€888<ôsœ7næææìß¿ŸœœIø………r¹N‡‚5kÖàææÆàÁƒMœ9€¥¥%þþþØØØ%$$pèÐ!Ú·oÏG}Dnn.Û¶mC¯×K•(6lØ€\.gðàÁ&ÎüŽÍ­]»¶I”òöíÛlÛ¶àà`ÆŽKÅŠYµj•‰½•FèÿHË–- fáÂ…œ:uŠ àë닟ŸþþþXYYQµjUÚ¶mËêÕ«¹rå õë×G§ÓqæÌ233éÕ«W™>ËÚÚâãã)((¸ÇøJHÜ!.\ %%¥RÉ((( iÓ¦ØÛÛsîÜ9j×®M¥J•ÊÔÞÚµk©T©mÛ¶ÅËË‹ÀÀ@Ž9Bÿþýñðð.ñ¯9wîîîîxyy•éú;v T*yõÕWñðð }ûöþøc†ÎìÙ³ÑjµÈd2z÷îF£açÎ!P*•lÙ²…-Zàíí]¶bf† J¥RêyJ<&L`äÈ‘Œ;–]»v1qâDúôéƒB¡ ¨¨+++Šî禦²wï^©U«ýû÷çüùóDFFJ‚–(ŠŠŠ0777®+zÙÙÙœ[·nP±bEìììØ»w/­Zµ2 ÏKH<nnn\¿~¼¼¼¼6<<œ³gÏòæ›orûöm $šéééÉèÞ½;+V”Fè’Z•¹\Ž­­-...øûû3|øp*V¬Hxx¸qt=lØ0._¾Lhh(+W®¤fÍš´nݺÌ+1ãâ∌Œ¤^½z&Û5$$þ‰Ê•+S¥J<==©X±¢ÉȧcÇŽ\¹r…ëׯs¿ªwŽåææò矢V«™9s&!!!„„„0räHòòòضmééé’°%þ5;v$11‘ˆˆˆûF#…ÆHç‘#GÈÌÌdݺuF|å•WÈÊÊâøñã\»vM¨4B/ñññ¨T*|}}MFÒñññäååáééi<Þ¸qcã~óˆˆzöìI5þñ3„DGGóÍ7ßàââB§N¤QD¹ñꫯ²mÛ6.\HÍš5Mæ-sssÙ·oíÚµ#>>ž“'Oòæ›oÒ§O“6.\¸Àœ9s8|ø°´ÿW¢\ú²eËX±b~~~4mÚÔxN©TrðàAüüü°²²b×®]tïÞ¡C‡štT˜>}:û÷ï'((è?¿+Hrèe 22’3fàææFݺu±··'::š'NàëëK·nÝŒ×:;;Ó«W/¦M›†µµ5ýúõ»ï¼e^^ë×¯çØ±cÃÅ‹)**bÆŒ´nÝZÚ²&QnÔ¯_ŸéÓ§óÕW_ѧOZ´h§§'999œ={µZM@@GŽ¡¨¨ˆмys“6ê֭˾}ûX³f ƒ *Ó|¼„ăpwwgΜ9Lž<™ÁƒÓºukcŽÐÐPrrr˜?>ÉÉÉܾ}›É“'Ó¡C»˜——Ç_ýźuë˜4iVVVÿi™Ê§L™2ER­‡ãáá——EEE$$$póæMèß¿?_}õ•ÉÖ …Bƒƒ………4iÒ„Q£FÝÓ^jj*ÙÙÙdgg“@VVnnnôìÙ“™3g(K‰2“‘‘A~~>½{÷ÆÖÖöþ?t¹œÚµkÓ§O¬¬¬HLL$>>½^OHH'N¤råÊìÛ·—^z‰Î;›d°±±A¡PMƒ ¤Ä7pqq1€d2ÕªU£W¯^xzz’@\\´jÕŠO?ý”F±gÏj×®MïÞ½ïÉ iii‰••Ô«W77·ÿ´Œeááá"44”ääd,-- ¤U«V÷†„„Ö¯_OÕªU………L›6Î;@jj*€QGïÞò·páB~úé§­Ÿ:ŽÌÌÌr]M›““ƒ……E¹æ(o}/ïöŠŠŠP«Õåš<)-- “(Îã››ËÈ‘#7n\™®¿yó&“&MÂÏÏ¡C‡¢Õjùå—_HOOgΜ9Èd2c’”ûÙNµZMõêÕË%yjj*®®®ÿZOê½k4rrrÊ5«[vv6ÖÖÖϼ¿(***—’ع¹¹\¼xñþ'…"99Y¼ÿþû¢W¯^"**J!D~~¾9r¤ Ó¦M³fÍmÛ¶ 4?ýô“ÈÈÈwÓªU+Q¬ZµÊø=Ê‹O?ý´\Û»xñ¢X·n]¹¶ùý÷ß‹¤¤¤gö¹³³³ÅŒ3Ê¥­víÚ µZý×ét:ñË/¿ˆ¶mÛŠeË– ½^/„bß¾}ÂÛÛ[LžÓú^Þí9sFlÚ´©\Ûœ5kÖ}íÒ£²eË1wîÜ2]{ãÆ 1hÐ 1lØ0/îØÓž={Š×^{MÌœ9SÌš5K4hÐ@´iÓFlܸQäææš´¡R©D»víÊE3fÌÙÙÙÏì{OLL‹-*×6×­['.^¼øLëû•+WÄêÕ«Ë¥­‡ùYEFFsæÌáÚµk|÷Ýwøùù• Ý BBBˆŠŠB£ÑÿiµZŠ‹‹ï›>RB¢¼Ù¿? .dÈ! 8Ð8òöðð`äÈ‘h4”J¥Q'U*Z­VœÄ'!!)S¦ Ñh˜>}:U«VJöë÷îÝ›¸¸8ã"bN‡V«E¥RI¶SâɅܧNÊŽ;1b111ÄÆÆСCz÷îmRÿ¸°°ØØXÞzë-)ñ‰ÄçðáÃ|ôÑGÔ¯_777:@5¨[·.µk×6^{§VòÀiÒ¤‰$<‰'JNN_~ù%¡¡¡¼÷Þ{DDD™™]»v¥ÿþ&ŽûÒ¥Kx{{Ó¿ÉvJ<9‡^¡B^~ùe®_¿Îõë×’ÕšAAA÷dŠ ¤zõêO¼ ˜³³s™Jê= •+W.×ö¬¬¬Ê=S–««k¹Ë¶<Ÿ[.——ËüyYÑét£T*Ù±c‡Q7;wîLݺu±°°0^[¡Bz÷îM•*UÊmþðA2(ïlTŽŽŽåž·¿¼õ½¼Û³±±)—õ6¥qss{jÎR‡‡-Z´ 44”ÐÐЃªPЭ[·{~ÇmÛ¶ÅÍÍí‰ÛN77·rÕÿò~ïæææå¾âßÉÉé_õ_ðRÌr£¼æÐ322„R©,×9Œòž›.**™™™åÚfZZZ™æ•ÿWÏ­ÕjEJJÊSC//Êk]£Ñ”› J¯M(,,|¦õ½¼Û+(((×¹^!„HIIæ©Î¡—å9‡~ûöm¡ÕjŸÙ÷®V«EZZZ¹¶™™™)ŠŠŠži}W*•å²¾ãçПŰ‹‹K¹·Yº"Zy`mm]î½Â'QÏ·<ŸûiПɖBQî2xerË[ßË»½åœÿ7ü×uJ ž<ËïÝÜܼÜí\y¬ÒÏmeeõT ÇHõÐ%$$$$$^$‡.!!!!!!9t É¡KHHHHHHH]BBBBBBBrè’C—ºÄ3ŽN§£¨¨È$õ¯„ijÂjmÏjµš¢¢¢ÿÉg+Ž;ƈ‹‹ÃÊÊŠvíÚÑ­[7HNNæ÷ßçâÅ‹SµjUúõë'åÊ~Á9|ø0ëÖ­'--ggg @Û¶mMR­> ’““Ù½{7¡¡¡áååÅÈ‘#ñöö`ëÖ­Ì‘#G¸yó&*T sç΄„„`mmMtt4üñQQQèt:¼½½6l5jÔ^â JAA+W®äرã¨Õ*ê×oÀ°aCË¥,n™úæÍ›±³³ãµ×^#''‡åË—såÊ&MšDaa! …‚=z`eeÅ¡C‡8p ;vì V­ZÒ|ÆB V«Ñëõ˜››?r^k½^϶mÛ9ò#òòª£Õºaf–ÌŸ~À¤Icyë­‘åžcÿa„……qöìY‚ƒƒqrrâÀ¼ùæ›,[¶Œºuë’™™I“&MðððàÖ­[,^¼˜˜˜>þøã§nà%þ™; Å#w…œ?žqã>æìÙlÔêZÈdEìÞ½”óç/²`Áwåžþaäçç³sçN*UªÄ€HHH`úôéܼy“±cÇ’››‹½½=¯¿þ:BvîÜÉàÁƒÙ¸q#ÕªU“”áC§Ó¡V«‘ÉdXZZ«:>Š3÷Ý1lÚJqq „°fïÞ]>üK—. aÆOÇ¡OŸ>ÝXBB¡`þüùŒ;–Úµk›T´ âØ±c?~\rèÏùùùœ8ñ¡¡gŒ£ÙvíÚS»v­2+gbb"3gÎ&+«)PÏàä))W™?]ºt~ª#ŒN:ѽ{wc±‰Î;Ó¬Y3:Dݺu1b„ÉR¥R±uëVrrr$‡þŒu4ÃÂÂ8|ø0ééé8;;Ó®]{7nTfÇ®V«Y¹r5'O"DgÀ !@©ôcûö]´i³•!C†<µgrrrböìÙF=BŸŸÏ† ;v,M›6¥iÓ¦Æë_zé%‚‚‚8wîœäП1ÝLHHàСC\»v +++6lHHHÈ#Eú6mÚÌöígP*» Øœ:uˆ¥K—³téâGî$<–C/]åéÎO.—›|¸^¯G­VsæÌ”J%õë×—4áB­V³bÅ ,XCR’=BØ`m½—fÍ6³jÕrcˆúŸ¸|ù2©©…€o©£2„¨ÂáDGG?U‡~wîc­V‹V«5©X%„@¯×sûömÂÂÂðóóÃÎÎNRŠgˆ0iÒÂÃUá‚™Y. lgòäOèÙó•2E’T*‡…>@i½°''§ááá 4è‰VÚ+™™™I§ñ޼»ƒ¢×ëQ*•=zi ôŒÇ„ Ù·/Š‚‚J@1•*mâ­·"øê«/ˤ›BNž£‚³gϲwï^“¨@ÇŽÉÍÍE©T2qâDÉ¡?c,]ºŒíÛ£ÑhÚ€ 55eË~套ZÒ¥K—2ëÀý×˜Ë ÿž²COLLdâĉxyy1|øp“¹ÒéÓ§“——Ç©S§˜?>tìØñ¾½è“'OšŒ°jÖ¬‰ƒƒƒ¤9O={ö’—çÔ,¥TvèõÍ9yò(IIIT¯^ýÛ©[·.žž$$\Eˆ:õÐ7ðñ±3™~yŠŠŠˆ‰‰¡  Àx,77·Ì÷²jÕ*~ÿýwæÍ›‡ñ\›6mð÷÷'))‰%K–°hÑ"f̘qß LW¯^5©ôT¥J)üù„‰ŒŒ$2òz}pǦX¢×ûpêÔ.âââÊäÐ--- iÁõë§Ð骶€²qq¹M³f#{t~óæM’’’LôäQê–GFF2eÊ‚ƒƒéӧɹÿû¿ÿ£  €Ã‡3oÞ<¼½½y饗îi#77×ÄvÚÙÙQ³fMJGP%ÊŸw Ñ4J×*÷ +«»ví.“C—ÉdóûïGÈÉÉœ N¼¹<†îÝÛ<ö÷ËËË#&&†ââb?ûP‡~ãÆ ¾þúkììì˜4iÒ=ÅÝ===ñôôÄ××—'N°iÓ¦û:t½^OFF†‰RjµZIkž0ÅÅÅÈdæ÷é!ZCe¡Zµj|ðÁûDE}Jvvª!<šCÅŠ™|ôÑ»xxx<Ö÷Óétäææ’m<¦ÑhÊ|ïêÕ«Ù¼y3ãǧeË–&çííí±··ÇÇÇ¥RÉ_|aœ§½›üü|ý|e%LÑh4hµ÷¥È¬̺iaaÁ!C »Ä™3¢ÓUC&S1ôë׉®]»<öw,**2Ñ‹üüü2ëFdd$“'OÆßߟqãÆÝ³0ÏËËËØYÞ¹s'¼¯C×h4&ßA§Ó¡Óé$zÂ(•jî TFÜæ¨TeßÙ­[WŽ9ÆÊ•{¢&BX —'м¹ o½5â±£›Z­–œœ“ÁÐö+’’’˜2e ,X°€*Uª ×ë133C§ÓÿÿŽãÈÊÊÂ××÷¾Y[[óÊ+¯HZò” VY†Þ!†ÑË5*W®\æÚ¾2™Œž={âèèÄÆ¿KÞ 8‘   Ç^ánooOëÖ­MŽ-\¸ðïÓëõüúë¯üôÓOL˜0=zB[%ßµôzNGNNr¹üó^’~>eªW¯NåÊܾT58vL–E•*xx”]74¨ÏÊ•Køå— 9r ;;zôø˜¾}ûü«Î™ŸŸ~~~&zûÐ{„DEE1iÒ$ÜÝÝ™4iNNNF{©ÕjB —ËBPTTD^^ÞZ¹ººJºù? (¨!;w&¡×{•rì*llnзÌí8::2mÚ74iÒ˜;öRX¨¤M›Wyã×ÿÕ4KÉÒv&ÇæÌ™ó`‡>qâD:ÄàÁƒÙºu«ñÄСCù믿شiµk×FADDùùù¼÷Þ{’&W¥J•7njµšœœãñââb,--éׯ±±±áééÉŒ3hÒ¤ÉSÝ+/ñpÌÌÌxë­‘ØØX³k×ÒÓoâädÇ+¯|«¯¾úÜÎ[XXЭ[7š7oŽ^¯7ÚN¹\Ž™™-[¶D¯×“––†\.§_¿~´oßžJ•*IJñ ѤI/žËƸv-KK ºòöÛo?— ªo½õÖOV¨Pá©îí”x|ªU«ÆøñãÉÈÈ ¸¸gggÓ%Ï#Íš5£Y³f<ߣGéÅ?XZZ2dȺvíJAAÖÖÖ¸»»?µ-fO{{{Þ}÷Ýž¿;Œ/ñlbnnN›6Á4n܈ÌÌL nnnÏm …ôJ_¬¬¬¤è‰Ä3‰\.ÇÝÝ]„Ä3‡L&ÃÑÑGGÇçþY¤â,/’C—º„„„„„„„äÐ%$$$$$$$‡.!!!!!!!9t É¡KHHHHHHH]BBBBBB¢Q!Ðjµh4cassscù@N‡Z­6Vx‘ËåXZZþOkcKü7Ðëõ†j]º°´´4f¿S«ÕhµÚûê­„Ä“æŽnêt:£þ) c± Fc¬˜&ÙM‰§âÐÓÒÒøþûï §   š4iÂ|@åÊ•ùå—_øã?ÈÎÎF&“áääÄgŸ}FóæÍ%å”x¢„††²lÙ2âããÑjµXYY1xð`úöí‹¥¥%ãÇçÚµk(•JÌÍÍiÚ´)£G6–¬”xRäçç3þ|N:EAA …‚úõë3vìXjÕªÅÎ;Y³f ™™™!pttdôèÑtêÔI²›OΡËd2üüüèØ±#Õ«W'11‘¯¿þšŸ~ú‰É“'ãèèÈСC©W¯:Ž 60iÒ$Ö®][沜ƒ\.'$$„úõëcggGDD_|ñîîî´mÛ___úõëG•*U¸}û6Ó§OgÕªU|úé§Ïmщçooo‚‚‚ðöö&--Ù³g³páB-Z„ƒƒýúõ£qãÆÈd2¶lÙ”)Sðóó“:œOΡW¬X‘ %T¯^   NŸ>™™]»vÅÌÌÌØ«>|8ëׯ'>>^rèO”€€š6mjÔ=///¾ûî;"##騱#ï¾û®Qo«V­J‡8~ü8’C—xp›^ IDAT¢ØÙÙ™ØMoooÚ´iÃúõë133#88™LfÔÝÁƒ³fÍ®_¿.9t‰';B/]õ(33“K—.áïïo%ÝA§ÓqàÀÜÜܤ" Oe„^šØØXÒÓÓ©Q£Æ=çóóó9{ö,5kÖÄÖÖVžÄån»™——Ç¥K—ðõõ0©r¨Óé8~ü8ÖÖÖx{{K“xb˜¬r/,,dÅŠdgg3|øp“ õz='NœàÇäÝwߥzõê’ô½^BÄ#’ÀçŸN‡hÛ¶­É9FÃÚµk¹yó&}ûö•úc"„0.~•(;†õë×sýúuFuÏïýܹs,]º”þýûS«V-I`©›’Ý,ýôkÖ¬aÏž=|òÉ'&Š'„àܹs|ýõ×tíÚ•~ýúÝ·±ÜÜ\¦NjüÛÙÙ™=zPµjÕÿ¼ SSSY´h1QQQXXXзoºu놕•ÕïÑjµìÚµ‹Ó§CQ*•¼ôR ºuëöÜ9¬ôôtvîÜIrr²ñX|||™ïOIIaÚ´i¨Õj&Mš„ƒƒÃ=Î|íÚµL›6Æ?°ß~ûK—.ÿnÕªmÚ´ùÏëfnn.[·ncïÞ½èõz›2xð`*UªôÀ{t:—.]bÇŽdeåàåU•Þ½{?—¿õ#GŽpâÄ ãßQQQ”ùþ­[·²víZÞ{ï=š6mjr.::š¯¾úŠ€€FŒñÀ6âããMl§§§'=zôÀÕÕõ?¯Ÿ`ÆdeeãåU‘#G#ÈâÖ­[üñÇÄÅ%P¡‚¯¼ÒƒF™DNžÙ±cYYY&¿×‡õ|Daa¡øá‡DóæÍÅþýû…V«wÐétâܹs¢E‹bÚ´i"77W<ˆ   ‘ŸŸoüWXXhÒÖ•ˆˆ$,- ™¬»É: GÇšâÃÇ‹ììì{®/,,6luëú kë*B¡h"äòÖÂή†èÓçuqãÆçêùu:(**2Ñàà`¡V«ÿñÞÔÔT1pà@ñÆoˆØØØ{ä´xñbѬY3qàÀ¡ÓéØÎœ9sÄÆM¾ƒJ¥úÏëfff¦:t„°¶®)ÌÌ: ™¬³°°ðÍš‰ÔÔÔ{®×ëõ"44TtìØIØÙ¹ sóúB.o-,-뉪Uk‹°°°çN*•ÊD/6nÜ(æÎû÷)•J±fÍ(¶nÝ*4‰œ¢££EëÖ­Å„ DFFÆC??88Øä;=TŸÿ ¨T*±dÉáää#äò`=„BÑLøù5Û·oZ­VkŠE¡ºÐ(óøøñÑGã…‹K%aaQKÈå/ só@Q¹r-±`ÁB¡T*Ÿ+hµZQXXh¢AAA¼^QXXȪU«X¶l&L Aƒddd —Ëqqq!44”?üÀÀ@^{í5”J%*• ,--ï™W²³³“â¥ÈÏÏgéÒ9^ƒVÛ(™wËÉñfݺ}´ió2=zô0.žÑétìܹ“?ü„”” à@AA.Û¶ý‰¿ÿÏ|þùD,,,žy33¬­­MŽÝ=?~?’““ùú믹uëß|ó ¶¶¶¤¦¦bkk‹µµ5«V­bùòåŒ;???ÒÓÓ177§B… ÷mßÊÊJÒÏ»øóÏ?Y»ö:]W "juΞÝËüù ˜>}šÉ6«˜˜Þ~û""®­&€NCRÒY&Lø”7P±bÅçF&¿¥»íÚýP«Õlܸ‘ï¿ÿžÁƒÓ¢E 233‘ÉdT¬X‘‹/òÑGáããðaÃÐjµ¤¥¥aooÏoáÎïAÒMS.\¸À’%?‘Ô0D-u\½z†Å‹—Ó8 1G3‚ ^÷Üì\¾ýv?ÿ¼ÆèX£ÓéII¹Îœ9Ëiٲ͚5{nd —ËïYàû°mФ¤$V®\ÉíÛ·Y»v-¿üò nnn,[¶Œµk×™™ãÆÀÑÑ‘1cÆÐªU+IëþÛ·osåJ4:]=£3/Á•ôtΟ?OçÎE©TòóÏIIÉêy hµ~ìØq€¡Cß|áØ:tˆ-[¶àââ´iÓŒÇûôéCß¾}ùî»ï(,,dÆ lÞ¼___&Mš„›››¤|e`ïÞèõÕÒ¡]„¨Ï±cÇ(,,4q47þJTTšÁùû•šµ3Gˆ&DGÿÁ±cÇèÙ³' …â…•[vv6+V¬ >>ž;v°ÿþƒªP°iÓ&¶lÙÂ_ýE£Føðð¶¶fÔ¨QtêÔIR¼2péR$ Z ô4ŽðáôéÃÄ&Çòãåy§é;˜É̸ví›7ïC£1Zw:NfáCrr;wî¤aÆeê´=(|||رcZ­Öô„B¥¥%_ý5&L¸§×àìì,i\Ðëõ†…Fwe€Ng²ØC­VsîÜ5À°¹Ï=–\ºtöí»0tè@Fz77·2YE¯^½hÓ¦Í= µ°··çèÑ£÷œ³´´”tóÐh´÷ÑME)ÝÅ0:ÒråÊT*G@ ܕϜ[·25ê=Ö¯ßÈìÙ3¨Q£Æ ©›®®®üþûïh4š{FOæææ¼ÿþû 6ìžH•“““¤teD§Ó¡ÓÝoÎÛ ­N°:b5®\éV«f23bbbÈÎÖ¹Í=ú ÌŸÿ‡ã³Ï>¦cÇŽÏM”³ÌÝÜÜü¡ûÉ]]]¥…ÿwwwüü|8sæ*Zm¥R#š œœ²iذ¡IºR¹\N¥JÎܾ]Ü”¥zšjà&Z­–¸8%S§Î$1ñ&Ó§O®BœeÅÞÞ{{ûž—[þ{:tæ×_§£Õfw:BEÀ%š5km²ñNG^¡­V Ü| MÜD§S’™iÇ–-{INNdÅŠåÔ¯_ÿ…sêr¹žwrr’œ÷¿Äß¿.Õ«CTÔm šAÏtÈdñTmhÍÁÔƒ¬é¸G+G\\\P(,ÐjõÀ5 €¿7re©Øò×_‘¼óÎ;̘1ƒAƒ½Pº)gyÂÜÉ´çç§D&;\Îaeu”×^ ¢U«V&+/­­­éÙ3…B€hƒs?ލE¸I¦ˆ}?ÿÌìY³î‰°HH”…®]»Ò­[CŠÀ9d² ÈdhÐ@Á¸qïÝ3úìÞ½;y†ŽéIà"œöS‰bÚq“N.œÏ'M"&&F´Ä#Ó¸qc†}+«£Èd§Ë˜™ÇÝ3Ž A–4«ÝŒVÕþžöõóó£I/Ã( 8m°›WƒØr‹$Ò…LÜ““™:y²ÉîÉ¡K”‰–-[²aÃ*†õÇÛû‘´kçC‹-0333 ¹[XX0|øP^½ööZ,,âQ(v#“mBF8þäÑ’¢V@µš­«WsèÐ!IÐLÅŠùþûï˜6mgP±ây-éÒ¥-ÖÖÖÆâ"wh×®-'Ž£B…",-³17?ŠL¶ 8Œ=©ôCdÐÏŽZ-Éþɯ7¢R©$aK<ÖÖÖŒ=š•+§Ñ¦ ¸»Ÿ§V­tšw÷%Ï9F`nöwt³zõê|ùå'ԫ猵µs󳘙mö`K íÐÒhFÉr9¯›7™öí·dggK]¢ìÈårüýý4¨?NN¸}[°gO<#F|M×®½9þ<………\¿~+W® P(X±b)[·näë¯?fĈ~¸¸¸`Ž@CðIAÉ’¹J99ìÞ¹S´Ä##“ɨV­o¼ñ~~Þ¤§k9{6—Ù³·Ð¼yÖ¯_Oaa!ñññDFF’˜˜È˜1£9qâsæLá‹/> Z5@A :\(™‘—N@M†#ûöQXX( [⑱³³£Gî´mÛ µZ}CËÖë‰9ÄžŸö“››KZZQQQÄÄÄÄ¡C{X¼xS¦|LëÖ ‘Ë+⎺€wV"•8ö¸èh"""^y)$•)„Èd2„ÄÅÅqùòeCu¦¥œ;gôl|ÂÂNñþûÑ´icÂÃ#Q©4xx¸ðÚk}èÕ«íÚµãöíÛÄÅÅsæÏ8䥒%å×D½å‰lÞ¼™N:I™Ò$ÊDvv6¡¡¡äää°{÷n¶l¹„½ ®XORÒy¦M[Dxø9¢¢®‘]„­­íÛ3zô»¼÷Þ{h4T* ³fÍB^jÖGCI 3J²¯^eÍêÕô0wwwIðÿh;•J%$'ß"&&šï¾[K^^s„sðÚ…öX-–ïÛŽ™Z’’FBÂmd2 ú1jÔ(† †L&£~ýDF¾,óïÑ«HnP’êü—õëqvr¢~ƒÏ]âÉ¡?AnݺŢE‹ ÇÖÖ/:JF†FFzz,%ò;[&ì—8yr9gΤ¢Õ67œ»ÅÉ“ß2ÊõÅÝÝéÓ§Ó-,Œ„¬LªÀƒrúúÂ&Cä»ïòå—_J/C„üü|~ýõW¶o߉N§¥ZµªÄÅÅOq±Œ¼¼ÛW4è¤Ì0Îö'&&™%KÖ¢Ó…Õ¢ˆ°°uäçç3eÊWØØØ0räp"/]äÜŽí´pˆ¼€J™™,ÿö[".\`êÔ©ÒbF ôz=ÇŽcéÒedeeQ¥Š'*•гg#((¡Tf“›«l a$d;ÁÍf¨56,]º&¨è '"â=víÚŠ³³3!!øðÃ1,œü)ª:š'J@Ãü|Îþò ÃΜ᧟~h¦IÉ¡ÿ‡z•g΄2jÔ8._V£ÓyS²ã0Ð ð¥¤GÉ"7G žÁpÚ ×Û¡××îì+÷ =]Á¤ISyõÕW‘Ëå4iÀ¶Ý»5t(cb(Ðj±B«’_·SRX6u*mÚ´áå—_–^ŒPR£aðà¡lß~¨‹j`ƒA{SˆÌöû€ÎÜÙæ£×Û¢××-¥ÃPXèÌï¿ï¥C‡ötìØ///–þ¸”÷--ؼu+ IÀëÀ5òÊœv­[ÇJoo>ý쳇¦<–øï T*Y´hS§.¡  &BØôÐèjˆ©K\°Ç^¨UÛúÚju ;;4šJœ9³Õ«×ðÑGbeeÅøñãÑëõ¬_°€”ìlÎ ÁË@]ƒÖ+•œ¹|™÷ÇŒa÷þýÏu‚i½œF??ÿ¼–ÈH3CÆ­”ìÑõê”suÀŸ’@ùý½· ãl÷»: îܸq‹Y3g²~Ý:’’’`ñŠÔ>œ$++êÜqæ*UõzvïÚ%½ #;wîdûöp„èŽ]sšœ9×ÛH2ïh6 ¸L߬¹u Vþ´’%?üÀåË—qsscÞ¼yt~ï=R¼½©e0Éw°êAØéÓÏE-ñŸâÒ¥HV¯ÞD~~B´6ØH´78sJtÔ¼>44ƒ›• ÅÝ`?c z[Ú Z•ùõ×ßY0>`ìØ±|2{69-Z`Ô,¥Ñf@#!HIL$22R¡ÿ×ÉÊÊ",ì BÔ2H %[μïÓr48t5%ûx#“)âî=«*„NÖ/¿Déäĺ&MX¹z5­ZµÂÏÏ?·lÁ¢¸øžïb%Ê¢"é¥HÙ½{Á„¹ŽäP²†ãîµJ·Žœ»ã]]NGØï¿suÇv6ðÙĉtîÒ…‰“&‘™•Ej\œÉ2ÀB&#_¥’*ºI-‚7n]ÜÉ…R`pÖwåÕ¨œ• `OUƒm½\šß¥› D ¡¡¬‰GëáÁ€·ßæÓO?eèС!˜uêÔ=)‘,¡×?÷»1¤z¹"+ÕO²7ŒvJoûÑ d6ðð¯¼Òww+à Plè daF8É£‹^O·ÌL²äÓ?F­VãêêJ@Ë–DËd¨ï(1 $ZXÐJ ·K”v¿zq—Ñs2ż»®Ì¦$ÇŸÀ*¼½ éÔ© E¬ÁÐj%2.S›tzº+•8:ÅŒ)SˆŽŽÆÉɉ€ÆI´±¡ôºöb ^&÷aC)g¹ÄßSÆ]ºig°Ÿ)¥¼­ êEBB.d\~ÂÖ6”¾}C°°HÒ º©¢±$š®èè®VóR|<«æÎeû¶mÈår‚ƒƒÑØÛ“Àß1R8¹¹áçç÷|Я]»Æ•+WÈÈÈÀÜÜœ:uêРA¬­­Q*•\½z•7n––FãÆ ,SaÿNNN4iR‡sç"Ðé< ý½:”,[»@ÉÒ %sè7€—K/0bÄpzöÌdæÌÅÄÆÞ@¯·Á‚$|H¤%zä”$1l©Ó±ïìYbcc©S§ïü1^½Êñèhª Z&ãšBAãŽéÞ½û !לœ.\¸@\\jµ‚ƒƒ™ oÞ¼ÉåË—II)ùñ÷ïß_š›½]»væ—_&"D]J²Á¹Q¦ ¥¤¸ŠÁ™ÿ4üÉNóê«ÝèÓ§rù4öïß‹VëäáÁUZ¢ÇÕ`Škêõì'22___º÷èÁ‰'8¼y35õ%:œ(“A@o¼ñÆC³ÿ=/hµZ®^½ÊÕ«WÉÌÌÄÆÆ†úõëãïï¹¹9\¹r…ØØXrrrhݺ5þþþ/dÜÇwæ2¼½½©UËŠ¨¨$J¦( ÿ=DIñ¨”nQðg5м ÄÒ²¥S¦|…•Õvï>JV–= ÁXɦ %Ë:=€*99ìØ±ƒWzöÄËË‹cư}ɲóóq‚ ™Œ8&~ðÁCK?ý‡~ 33oooŠŠŠX¿~=C† áõ×_'))‰… ’””Dll,o¼ñ7þÏ;ôââbþøc111X[[Ó­[WÞ|s§OŸãÒ¥ýètÕ # Bà8a†¨()hᜥAƒ*øùùáåå…¯omΟ?Ïž={ˆÚOgþ€bïk5òòJFUÍ›7çË9søeíZâ¯^ÅÞÙ™¾íÚ1hðàûVsz9~ü8kÖ¬ÁËË öìÙÃþýûùæ›o¨T©[¶laÓ¦M¨T*RRRèÑ£ÇÞ¡«ÕjΜ9ÃÑ£Ç03“Ø„:ðÊ+›Ù¾}7BÔF¹aÄ}H6t@‹ aN_ …"…¾}ûмys,˜ÏñãÇ9~ü8·ï }–šê¥ÆU€¥ƹqooo¾üê+;;séÌä2õš5cÈС4¹«^øóJnn.‹-B¥RQ­Z5ÒÓÓY»v-}ô;wæÚµkÌœ9“œœ®]»Æ_|A:uþó¶3::š]»v“••…;†0|x?¦N]F^^BØß‰5R²@Ó çB²=¤6r17åå—GS£F æÎEïÞ'‰ŠŠâÇ ©•žM3L«Øéõäåç£×ë177ç½qã°wpàÈþý¤§¥áU·.ƒ{õ¢wŸ>Ï¿€ãââDvv¶P*•¢  @,Z´H´nÝZ¤¥¥ µZ-ÒÓÓErr²4høì³ÏDqqñk±¶jÕê…¯Ñ/^yåUáàP[XX4ÖÖ…¿øñÇÅåË—ÅÇ"Z¶l+4h*œÝ¼, «€Z¬TPI€Ÿ°µõ3gÎ6ÖåÖh4âÏ?ÿ^ææb ˆ¯@Lñ%ˆ ÄíÛ·EzzºøtÂQ»jUááà ªººŠY³f‰ôôt¡×ëŸ 9¶k×îë¡§§§‹””QXX(”J¥HMMõêÕ+W®B‘““#RSSÅo¿ý&êÔ©#ÒÓÓZ}ëÖ­/´næçç‹/¾øJ¸¹ÕVVÂʪ©pv®)Þzk”ˆ‹ÿ BBº‰Æ[ OÏêB¡h( ‡€Æì8 pPC˜™ùˆ>}^3ÖñÖétââÅ‹"¨E ñ¦LfÔÍ) Fðµ³GŽùùùbõªU¢eãÆ¢ª““pwp^]\»ví¹‘ã–-[þ±ºZ­ "''G(•J‘››+>ûì3Ñ©S'!„ÅÅÅ"55UDEE‰nݺ‰¥K— ­VûÀºßíÚµ{¡uS«ÕŠíÛ· oïºÂÖ¶°°h)ꈎ»Š3gΈݻw‹W^é#[‹š5}…¥¥w‰Ýôj"xK!pµ7ØÍ*B&óµk7çÎ3ÖAW©TâÍEk33ñy)ÝüD€¥¥˜üùçB«ÕŠÓ§O‹ÎíÛ /WWáfc#^~é%±oß¾‡úµg‡ùY…———ѹ !pqq¡¸¸ØØ›quuE¥R½pUi‡ÂÂBæÏŸÏ¾}7P©zsguåW˜;wuëú3gÎì’yŽùóç3yò¨TņñL5J¶XTì)*Šfñâ5 2www -[´ ¨ONnÙ‚¿J…µaV󒃟½û.|öÙgœ^½šæ  ³M«fÌ@.—3f̘f”zwQ …Bµµ5T¨P𳳓B™ÀÁƒ‡˜9sZmG„ðd§ñÿ·‹ÀÀ¦Œ3š1cF£ÓéØ¿?~ø!ׯï¤$ó°£!üî8¢×k9vl3{÷îeàÀ˜™™Q·n]^ïߟÅW¯Rœ›K!(–Ɉ´²¢ý›oâïïÏÚŸfÁĉøåç ù@ø¯¿ò•^ÏòŸ~z!ÂíæææT«VÍø·……...äçç—LûZZâææ†â….#[V"##ùòË©ÄÅùR² H†Z]ÌŸÄÃc9óæÍ¡K—.¤¦¦Ò¯ßë?»ÑT@”%dÔ¥d‡;BÀõëXµj 7F&“aaaÁ¨Ñ£y/4”3±±xéõè(©‚aÛ¨C†åìÙ³¼3t(®ÑÑtÒë1.œ:Å”O?åû+hÒ¤ÉsoGLÅegg³{÷nš6m*-\¹III„‡G¢V7Æt«„7nÈ8þ¼±HJrr2aaá”ÌWjÄFÉV ¢"IIy¤¦¦[²±µå«o¾!äý÷¹Q¯§\])lÝšqS§2pÐ BÏœáÌÞ½k4Ô dó‘?P?'‡í6pëÖ­Vþ»wïF©TÒ¼ysIïÃæÍÛÐj}ŒÎ¼7 ›6m2êfQQaaaäææ>MŠ4˜@=`IVV¢£ÿ.¬"—Ë:lã¾ý–ôæÍ9]±"×ýüxeÂÆ““?ΟOü| AECËs‡qìØ±Vö :tˆIïCXX811ņãÝ´pøð9RSӌמ>}†”ÔT¨.+ˆ¬JÉöÞó†iK Àƒ3g.˜|F“&MøvÁ\^}•0"ªWÇgà@f|÷UªTá·_ÅúÆ ^Òë©LIb™ÖB ¹xñ¾%ÄŸG¥çÞæÍ›GZZãÇÇÆÆæ‘B{¨PRÿ×ÊÊê…™7R*•ªù»œ©ÑÔ¡×Û››ƒ^¯G­Vóã?²uë~TªŠü½§Rg0š‡(Ù5®F.[[[„£R©¨èêÊøñãy÷ÝwÑj4ØÚÙáââ‚…… ÈSRp(õé2ƒÙ¾õLîñÕëõ›úx”^¯çèÑ£L›6>ø€€€€ÇúÅÅÅ&úiiiùBEžÒÒ2–{·ñ8—ƒF£A¡PpêÔ)æÎ]H^žx¨b¸'ØOÉv6ÌÍ5F; V«Q*•½žþýûÓã•WP«Õ˜››S±bElllHOO'%6–VB˜Œ*ŽEE\¸pnݺ=srS©T¨Õj=yrrr˜9s&vvv :ô±¾ƒN§3ÑM¹\Ž••ÕsŸŠô(•Š»ÇaAv¶ ¦DþÑÑÑÌš5‹ëI ÐÑ®µ€¼JÖx¥$Ç[Gd2ÎÎFÙ)•J´ -Z´ Q£F(•JÌd2œptt$55•qqxk4&óëÖ”,œ»ráƤ”õ³€N§3FÌKûÙ‡:ô¬¬,.\ÈéÓ§™3g5z¬ÏËËãûï¿7þíììL÷îÝ_˜TnnnT¯^‘ˆˆDL“mäae•Žƒƒiii\ºt‰Í›7£R] óÍ(YðŽ\®¡[·f¸¸¸pæÌ–-Y©={¨Û¼9#G¦K—.&a ;{{ô¶¶èrrL`íäôL:¨¬¬,vìØa=HJJ*³3ß»w/sæÌáµ×^cذamävìØaRʳU«V¿0=((ýûC¯¯WªÓ©¢©\Ù“¬¬,t:Ó¦M'//¢dú~½ иŠL&¨UKжmnݺÅâE‹Ø½q#™™T®U‹acÆðꫯšÔü¶³³ÃÜÆ†¢» ±è¥BAÅ»¦PžN:Å_ýeü;**ªÌ)@SRRøæ›oÈÈÈ`æÌ™”žÂ|Ml§§§'Ý»w¿gÚéyÅÇÇww ÉÉyüAL–‚——=yyy$''³jÕ*""¢ÁKvÕà˜?èí)YÜ ØTÃÆ&Ž7ÞøŒÜÜ\6mÚĺå˹…­³3úôaì¸q&S"ÖÿÏÞy‡GU`müw§d’Iï ! B€ HèHG@Aq±¬€…²«ˆJņJµ (Ÿ(¸¢R¥7!Ò[BBôÞ33™~¿?îMHh못™÷yò$3sgrçΙÓÏ{\\pww§L ŽA´É®BŸßmé<åææ²eËJKKëÙ<žé IDATÙ›ôòòr>þøc:Äܹsÿ—­§§'³fͺkÓFüíopäÈ ˆbÒ„í)”Ê<¾ûî;öìÙC^^!©©i²¢ô¹åŽJ•@×®í™6m ÅÅÅ̘<ËÉ“t‘=±¬­[™‘”DÐ?Ö‹H;tè€{Ë–$=JŒ(¢ª¥’˜>}nËå~~~Œ7®Þ}¿uÝk||<|ðƒ âÙgŸýC_ºQ£F1|øð»V>ydëÖmãìÙƒˆbMj3 HàâE='NÄjµŠ«$GÊkr=^@ÁÁf¦M{&MšðÖ[o±ÿóÏik³á"Š”œ>Íâ30<ýôÓh4Òngggúιï¾Ã‰ÃË$ ö€z÷és[^·Þ½{Ó»wïÚÛ?ýôiiiÿöyyyy¼÷Þ{dgg3þ|"##÷94iÒä®Ö]»veÈ.|ýõ¬Ö¶r(QûŒµk×2~üx4 gÏJu‰Ö­[#Š"ÉÉÉäææ’››‹Á``ïÞ½DDDТE ”J%ÇÃÉIÍ믿GjêQDÑŠÕjF¯ïƱc!H,[ui Šêx¤f¡œgŸ}„©S_&,,ŒóçSvò$ƒívj ýéé|ºd _._^¥GFF2söl&?ý4—Š‹qG¢ªiÇóS¦Ô‹˜îtœ8q‚éÓ§Ó´iSzöìIzzzm¦$88˜‚‚8sæ z½žƒDllìï*Ý鈈ˆàÓOç³`ÁGìܹ£Ñ„(±Û£HHˆ%!ÁœBb)´ µ[ÚêDèv ˜^½ÚóúëoгgvíÚÅþM›ègµÖq6E”%%¬þúk†Z›—_y…éùù¬ÿåìvt‚€ÎÃùï¾KDDÄ]s­u: ,àÀL›6 £ÑÈÙ³gvíÚa49wîqáÂöíÛGdd$ááá N6ýüü˜3gnn‹X¹råå:ÁŒÝîGNN99®HkSÊ Ò®îÔ luÎb¼½µ,_¾€Þ½{ãììÌç QTDŒì¢"ŠÛ~þ™0dÈ@*ÿŽ=šÔ”¾ÿä‚å­nEÎÎŒ~æ|W”7Tééé²qãF6nÜXûÀ?ü€Z­fíÚµÄÇÇR÷áüùó9rdƒ3è¢(’ŸŸOff&~~~|ûíÿaµZ™0a§Nµj®G˜•oAš§ÜÏÕ*·AH MOÞ{o.žžždee±yýzBês˜à#E‘ ))TTTàåå%}`*C† ¡ãÙ³lذ‚‚Z´hÁðáÃïšùóºiHoooòòòêm{ä‘G˜8q"‰‰‰Ì;WNé5cÉ’%„„„ðþûï78ƒ^YYIZÚe,+Ó§¿Ä¼yïòÁóùòËD$Žöšè£ðR“Ñ)¤ÞޤJbM›fñòËïÓ·o***ؽkªœêö¦+€ Qäì¹sT]“þkÛ¶-?nÚÄÞ½{9uêÁÁÁ 4ˆÐÐлjÁh4RRR‚¯¯/_}õÕU…ªR±sçNÊËËùꫯHMME£ÑpîÜ9.\¸À˜1cœA7™L¤§§STTÄÈ‘#˜8q»vídÖ¬©¨¸:-!આn‡à¨ÊO ípÊpq9Æ /<ˈ#°X,ìÛ·¼ÔTºÁu=ž$œ;WkÐk2Èó,`Ô#°ÿ~A`àÀÄÆÆÞ5²©Z¶lÙ-xçwpΞ=Ë[oÍåàÁdªª¬„†ºÒ¶mùùeHLpõüQÙ¨×ðï\Q(ªéÔ©ï½7‹/’’’š5k8sæ ÷ÈñQ]Á¬Dj˜»ÑZ@@&L¸«¯ùˆ#1bÄMïׯýúõkð²™ÍçŸΪUÛÈÉ1à{÷¤¥å Mź©D¥ì|Zd#~©Šø¾¾™¼öÚT"##Ùºu+?ÿü3«¾ù/›kÛpL‚€ÆË Õ šˆ\]]:t(C‡½«#Î+VÜôñ   >ÿüó/›v»/¿ü’¯¿^Mrr ŠÁPŽNH½i!A-Ôì….H¬š[ îî&žxb?þ{öì!áÜ9>üè#¬²ôÖûŸ@µ“^7ÈV* ºtéB—.]îÊëíü (//ç•Wf±cG)m«š´´r22~Eš¿V݉²X…!-h¹ìE+)*Òòñ‡’vé¦ÂBòJK1Ùl¤! tÔ¬((Î*•<ÿý:Sn ƒÁÀ×_͇nB¯Ü)-µ°eËiÔêTÙ©¼V¤2P/ Rs\Fãn6mÌâ«/ÿªœ²ssÑY­’¡måg›ó¢H‡~ý-þ;Ø·oo¾ù!EE±H´Âpð`Š(^“åu¯„¨L8§sw¤ÜSÀqÌfIIIücÒ$r/_FWXHžN‡iEK€Ç‹H¼ìV__úܦ=ƒþ'Ãb³°çÊB=Bié×¥âÖcu[¶láĉ+ÀCu.™3VkS¤¶Š#rjH+G>)H”šÅH´¯E˜i&ÚpMKãÈåË<(Šø"U0#Äþ(Çú {â‰ë"p .òòòùúë  íeÀ‚(¶Ãb9‡(&Éê.Pv2Ë„“òNt0¼y‰vúTlN¥·¼/Z]ÑÝH$œIHéÌ,A I—.LŸ9ó®êÙpàÏ…Ífã£>¦¨(R6Î`—·R^–%ª ‚ š§H÷§Ù‘ÊB -"­LF. ò3=×êjRRSŽ·„Ùl&%%…²2oÙPëeY,–eÓ(Ç5UH=€}ˆX¨BÄ&?r‰)°i4TªÕ4C¢¤ —£öj9þ±XHOOG¯×;>n‰¤¤$JJLH;”²¤]–Âe5D&ƒ>²×É&£CÀŠÔçž*Ëæ@íæF…R‰‡ Ð)yŸŽTR#õ€¤Ÿ?¥Î²†ÇzHÝ_ëϼþóXvr3vÏàùNÏó`ÔƒX T*¥¬C‘Ú3NÉ¢ä.+ÏÙW¬iÆ(Â*X9®P’g³‘ŒT#w‘ÅÚ5/árÌRei«,´-€j¥’F9>n £ÑˆÕjCÌr§{8ÒÈä:Yâ H3GjBÚä£P”sZPâd·s^QÊñ“àl00œ«+…u”*•4ññ¹ë˜ øóM)õm£få©”zÿY’M´LƒCjз–Ÿe 18k8d¬¦\—d½iÑéè'òš¾ùd¤=l‘@• à‚²î wôkàêäÊ„ŽhìÙ˜ý}'öc9j¦°0A(Gû#$œ’•¥NŽ„<‘Z8HÕcÄĶ¢M«l^³†žV+í©aË–H:ê’“z!õ"_’#!Ÿ˜˜?´(Ç»‹…ðã?râÄI! QŒBJ»ÇËRT +È8à%¤nà(ÍšiéÝ{›×¬¡Ie%=ey<"g“üë9»’«ºCŽÔ3==yîP©êÃë!Š"çÏŸçûïàüùDìör¤>õXYû•KP[=TˆÙi–ˆDs‰qÿ˜ÄÞ]»(OHàþšÈ[–Íš‰öÙŒåö<©R1tÔ¨ëlª¶nÝÊ–-[¸té... 4ˆ¿ýíoøúJ Errrøì³Ï8vì!!!Lœ8ñ®¥Í«V­ex‹á|»t_ëV By{Ï UnB‘¶Õ4ÈEÈQÐn9ñ£G«µ1{öªª*9ñÃDɦ¾fVòFªP ä*¸DE1gΚ6mÚ Õ+WX³f ‡F¯×Ó¬Y3¦L™BëÖ­£ÑȦM›X½z5&“‰aÆ1zôh<<<îêëb³ÙX·n=sæÌ%5ÕQŒ øÏHÓâ\­™÷^¾A"ë0 Ñ6l=ö({7oæžÊJÜ®‘MÅ d³D8©Õ2}Æ  Ôà3#›7ofûöí¤§§ãííͰaÃ9r$nnnˆ¢Hzz:ï¿ÿ>W®\¡iÓ¦L:µAdffò÷¿?Í… VŒÆ¤Ç£ræH–MŸjˆaOs0–?È‘|%qqm˜0aééXjËšŽ õ dS޹¸0øÁ?qbÃ[‹§eË–Œ;–²²2/^Ìùóç™7o¼ð xyyñÎ;ïpèÐ!ÆŒÃæÍ›ïªå,6›ââb***P*•qøðaü+Qxú$Àƒç`—Åf°ŸDÀ‰æ VÒ*`J’PcÇd€©/½HŸ~ýÐÈ)Íš”HÒxZ[ "²¥«T<9io¿ý6žžž ÞÓOJJ¢¬¬ŒçŸvîÜÉ£>Êòåˉ‹‹cõêÕ|úé§¼üòËøøø0oÞŠ²2‚AÞ_(¿J‚,õ*Ù¸(|}ùîûïéÛ·/J¥²ÁÊ¥jöìÙµ\á¢(R^^ÎÂ… ©ªªâôéÓäææ2wî\Z´hALL GeÅŠµ[®î†ôК5kX¿~#YY¸¸8ѵë=dgç`4úƒ©9ìòÎÿ‚Avø5ïËUxÚÊÑqœRаÓ¸LWˆÆŽ›œT:—‘ÁºÄÛÕ•2®VqvýÑ‚@SQD®¨T´èߟéÓ§;Œ¹ŒÔ[kˆ øõ×_騱#+W®äá‡fÔ¨Q€´qì£>b̘14kÖì®Í'N°bÅ NŸN "¢1±±±œ;—Äéf“UœCË%ü¨ÀN&Ù´ï_…+Çiƒ9±™\RÂê~ÀY©$Mh'е݉:© à$Šú-øà•Wˆ‰‰q&àååÅœ9sjwÁßsÏ=¤§§³~ýzfϞ͞={E‘éÓ§ãææF»ví8pà7ndòäÉwÅ5ÈËËã³Ï–½ÞD£F> ØŸ_~9ŒÝÞM6¹¹H…šH”dLæ  ŠƒmØwùÅ(‰§:"diÎvlߎ»‡Õ 6‰\Æ©v~(|E‘rA ×Û›‰Ó¦Ñ¿ÿïhªê.þEN‡Z­FE._¾L£Fð‘ËœéÔ©;wîÄn·ßûcwíÚÅ‹/¾NaasD1A0säÈÏxx`±ÈÄ.: ƒ'B¯‹´ÔBÜY0QÅI w ôFOKÙ'µž¢È>‹»û­Vºxȉ'ÑÝ=¨ª¨@¥RñÈ€ümôhG#\\›6³X,èõz´Z-%%%[+‡Mš4Á`0P^^~×d(fΜÅzl¶V€È¯¿^a×®]X,5‘&Yi*ð ‰!èñNð…„"0 gèJ9Z“ì@°½ªŠ€6m8i4b1™h*Š”"Õ)#úôÁ*TVUѲ];žzæ:vìèÊšl†BQkÌAÚ*VUU…‹‹ &“‰K—.],iµZZ·nMbbâ]¡;ív;3gÎbÍšc1ˆ¢ ‚PÈ Ñér€ò‘©€+.ÓB"Õ"Ç£ìxB^áy*)#’+ ÄFÍV€hàG“ ÁÕ•¥’´%ò£\…Ï&MðnÓ†üÌLÂ"#y桇œgǯÍ ‚€B¡ ²²ƒÁ€Z­ÆÛÛÛÑWǸmß¾íÛ·óꫯb2™¨¨¨  ž‘ñ÷÷'55“ÉtÇ7míÝ»— P]=©!D±1¥¥jŠ"á4¢X3eQM+ éŒH®Ÿ…ázî¶Se6°4š#RwÅ›œÅˆ¢­ÝJÌE5ÝÃ\ŽÉ¡•k¡&¾²b¼v‰ª]’rvlÝʇK–0~üxt:¾¾¾× \QQ?ýô{wïÆ ÓÌà!C1bÄïyÖ”oÊÊÊê½ßßŠŠŠ >ýôSNœ8ÁâÅ‹ D¯×#Š"‹¥Þgj³ÙnJûxìØ±z·£¢¢hÙ²åmyÍJKK9qâ$W‡Éj Í ÎÂnO!?¿0 Š&‚‹REq³á“fã‘ »”1rºF6E àÊJËÊø~õj*++ñôôÄÃãžÌÙív6nÜȶ-[(ÈËCëæFÿþàƒøûûßñJ099™Ô:œÇŽ«m þ-8rä‹/fĈôí+±J¨T*Ì×ÌB[,”Jå k¼ÅÅÅõt§··7íÛ·ÇÝÝý¶»^F£‘øøxÌfêí3G@vt":Z 9yv»A,ÃC>òŠK{[¶ “É„B¡ÀÏϯÞõ³Ûíœ=s†ÕkÖpþìYTNN´ŽŽfÌØ±wEbii)§OŸF§ÓÕÞw+ÒU@Ïœ9³¶Óßß»Ý^Ûf4kŸ‘‘A```½tSÝ(3  ö¶³³ómÉ©k±XX¾|9ß~»Šœœ$>¬–²0æVìö|zhááá|÷Ý÷?¦Ä¨8Ë ®äM£ÙBL¥Xê9•‚@žÝ^KQX“lr4©©|¼`›¶oÇËËëºóÑëõ|òÉ'¬_²„ÈòrÜ€+¢È¬;Q«Õ :ôÎöUªë2=¿µ Õf³ñÙgŸ±gÏfΜIl¬´S9((AÈËË«ÅÛl¶^cOOÏzòéêêzÛ]+Q9xð ~ø‡Bò¥Ë嘥iL²”Ž;òä“O²víìÞFi©@‘]$Èb¢ëI7[);‚=—”œ1ÛèZG6s‘úàïÑëùnÅ ztïN‡{î¹á9mÞ´‰×^|‘F`ñ®]deg3mÚ´;>SçêêZO.þ“–'NðÚk¯Ñ»wo&L˜€»»;V«???.]º„Ýn¯5@ÙÙÙøûûßP'ªÕêzçàææv[f@®\¹Â¢E‹Øºu+&SÒ¶´öH.£Df¤VÛY²d!Û·ï`ýúŸ¸|ÉŠÎ.b´mÐå4Gc9AºìX¦ËÙÌšo£iÈ-J9¶iû}”‘=tÃó¹œÌ´—^¢òðaš[­XD‘-[¶p>1‘%Ÿ}vÇïÃP«ÕøøøÔkò½UÖV•ÀÌ™3ñóócÖ¬Yxzzb4Ñh4DGG³|ùrpww'??Ÿ={ö0a„F†®]»ÞÖÈh4òöÛo³xñ§TWÛ¹Êìv8†Ô$ Š&Nœ8…R€K§Ne0Ewây™{ù˜`ãI*±sLŽÂ-ÎÎìEÚø"5vd½Öþm?x³Ù|CCv!9™ï/¦—NG(Wg+“²²X0>:u"00ðŽJ—ëVmþ¥i0Xºt)ëÖ­ãí·ß¦G˜L&”J%Z­–®]»²sçNzöì‰Z­æÐ¡C„††Þ4jŒŠŠº­åÓjµ²nÝ:^yå522 Ei‚"SvýˆŒJÈÈPÍÑýûhT^J ÝÎ$>_ƒ‘¶Ç@W'»ÕÛÆ‰DŠ+ª‰Ýƒd9/ ìMK#55õ†=77—>úˆV™™´”r-Ó§¼œï?úˆû￟N:ÝÑJ3,,Œ°°°ÚÛ¤¥¥ýÛ ßáÇ™5k]»veòäÉ8;;c4qvv&..ŽÍ›7“––Fhh(™™™$&&òæ›oÞPwzzzÞöº3//ûïÊÅ‹YX­v¤±È à'YNýv»#GŽpúÖŒËt°ÛÉDÞ `sÃfs!;ñ€Ÿ éâÂz“‰› ;Òþ'$^ÃãV+÷ï¿¡A·Z­¬\±‚ʃém·£•#ýH›Í{öðÍÊ•¼2sæátww¿ŽäFÁt­Aûí·9~ü8Æ cÉ’%ˆ¢ˆ L›6˜˜FÍ¢E‹Ø±cDDDÔvßîHKK#%EªY…†6¦M›6¬[·Ž¥K¿£ºº3‚ÔTtiŽw 5µt(gÇŽ9µg'ý-|Ä&T0{¹È:ò°c’ï~ ÉÇ! €‰‰[,¸÷!ñv]”jõMëô™3¸èt²+!g;äœAr~>/^¼£ úïÅÓåÿâ IDATöíÛY¸p!­[·æðáÃ:tAèÑ£ƒ bòäɼöÚk̘1WWW._¾ÌóÏ?_/Ò¹]Q\\Lbb"eeåx{{Ѷm[òóóyóÍy¤§{"-ƒ‘h2Ï!ñDÚ5UÍ™3ûxùÅ©ô­t¥´e<°KNm*¬`N„Î:Hî .-|IÙ”Gi‰ /¤Éà(9®Uª›Fƒiii”äåÑ¥Îè¥Dl Μ;wîŽ7è¿7úÎ;ïpåÊ:tèÀüùók³Qo¾ù&}úôaذaL›6¨¨(RRR8p ¼íß›Édâôé3äçç£V«iÛ¶ îîîL™2… lˆâ 9÷˜+ëNO`$ÒR ;K ¯¾ò*-±ó y_”Ã¥2œ1Q‰Ôsä)Šè:w&%9™#ùùxËyÒŽH]#V9J½YöîT|<¡¢XKÒ%È:¹‰^Oâùó †Û2÷_ˆ>ñÄ 2ä†iRgggžzê)ÚµkGVV½zõ¢cÇŽ·}Ã(ŠìÞ½›÷ߟOrrF£@X˜ƒõáäÉ“”—·BbÔª1Ÿ^H¤5ž¨Ân·¢7›9'f¢¥˜,£€*öÈÑw„|´R­føÈ‘,OO'®¬Œ&²Q6ʱU÷o*˜jµW‰jVʯ4Øæ£V­Z1þüzur???Z·nͼyóHHHÀjµòôÓO}Û7¦¤¤ðþûïsð`ee6||tîÜšF‚IN6#-P©QB¡²Ó W{Ô¥6» ¹s£­ì!ñ^GÑ"x]Bƒa¼+ešî®EWëé·ˆZ¶juÃsU*• PH²X7B•êšJ­VËĉ©¨¨¨wì¹¹¹ñòË/søðaJKKéÛ·/ݺu»etu;À`0ðÁóøñÇ­äç[qr‚ŽC‰ŠŠâðáDñ>¨ma ‘3œÉ²lŠ²Æ“J´5û+î‘ÝQàGœpÁL¤¹òD qHAœ_½š~¢ˆ‡¬™ó€,…‚· 1R:9]'›5\¡P4¸¦bÕ°aÃny€««+½zõº£ÞÔ©S§˜5ë Nœð“;„”——šúP‰(>Fý Y^AA j2nˆÆL^¦&´åI|ÈG#›þP9étJ¡ Q›6<öØcX-þµx1Yn6Y ±±L›9ó¦çÛ©S' âJ~~í  pBhA«›(Û†`ÐoõÞ•J%QQQDEEÝ1喙ºš×^{ƒ¯`±t\(+«&337·=HDEu# 'YîCàj. À€-°ÑHvs€!²»ÊQŽ7RÙG_©aÕÈ/øîÊw¬õûåªiœ¥ %¼ö 7mlժ᜺p΢XKæ‘.!! v”M«Õ2bĈ[ãááÁàÁƒï˜÷d³ÙXºt)Ÿ|²š²²{‘Òè"?ÿœÈ¾}_c46¦¦£ýj±Ò•Ô$£¤‘j±Ó©ëc+Ò&É0À ^˜ A¢CJsqa|\<ðOKcwB¡&&A ÃÕ•QãÆÑ½{÷/•оƒ³êðaÂ-–Ú3ÓéÞÞ ëÞºc٠ ßmoÈn·³cÇNNŸ6"б²ÐÙE5ÕÕþ²ê+”Õ²Ž?gDÍ9b°Ó ‰d# '‡/= %Ÿ4YH-r2´ ;t`Î?ÿI³f͘ùê«ÄÄİmÛ6**+Õ®=þ8Mš4¹é97kÖŒæÌá³÷Þ#'+ O»<• Et4ï¿õ–ƒhæ.Â¥K—X·îDqRMܘ±XSV–ŒTá6PŸé_‡Š<Âȧ=R“D'´:r«|ÛiMP-òÏÉ“éÛ‹Ž­;áÁG>‘}ØÌ &ƒ˜÷Ô$ºuëvÓóõööæµÙ³y!7—ígÏl³Q©PPÎs3fáøPïdee±mÛÏ”•u” 5@56›z½³,›•rF³f _vÐIv(«6]”}xÖO •‚Jqtœ®hµt}ì1zè!BBBX³a«V­âÔÉ“jµŒ4ˆ!÷ßÓ”¹R©dôèÑ$&&²{ÃÂu:,@ާ'½FâÑGmp³éwA7›Í”––`µzËQ¸©™ ‹T9¤“ÿÖËê1æØÀÕÄ»‰¾œæ!ù˜¦$s©æ™J%#ÆŒÁf³̰áÃk눆#Gòàˆõ:\oFÃã?Nxx8 ¤¤„®áá 8{nÒyìÀ‰ììlDQ#G? 5¼ý*ǽa²,îºÈ2ªNâ @$X~V(Rñ8ÒLy3$>.…RIl¯^‡„àçëK·îݹï¾û¤l›“+/ÝûAÞA¬h¶‚ˆðæ´½§í¿=çN:ññ石sçN222ˆöñ¡OïÞôèÙ³ÁE@w3***¨¬Ô#¾u¦+Ë!Œ‡¬+w U¸eÓ„‚2z#•}jàŽTú)BêÚŒTÔ´i½ñjÙˆÀöO3¸}{1¢–L+$$„éÓ§c³ÙP(¿É‡……ñÎ;ï°£GΜ=‹R©ä‘víxðÁd t×t'''|||Q©ÊäNÌ4Ù?ìµê°P¯cH4& ŠVÔÔŠiA<¯ÆŒlʵ6–· &L 22ggçö‚ðq »¹¹1hÐ zõê…ÙlÆÅÅ¥Á.¸›‚BaÆn¯”Ó—;‘Rê1HõÈJ¤e«eÙ´!PRͱ YQ‘Õ®BŽë]ívôïÏÓÏ<ƒ‹‹ Z­¶^Q¥Pñh›Giìј¹¿Ì%_—ÏÜ~sñrñBàæ 4..Ž˜˜ª««Q«ÕwW¾<<<ððpEK‘ 7Ge‡r¨æX‘šà6Õ {*ñÆFØ5¯åÔ6W*Ëmµ^iœÜ1bÏ=7ww÷êÈÿ”‹=,,Œ§ž~½^ hµÚËç~×u ( † L§NZᨷD#%'Ý埦²— Œž¢¨DJˆd‹ g­X‚#EHS–=QÄf³áííý§7º¸¸àééé0æw)¢¢¢5ªNNÇäH\ƒÔÎæ-«ÀF@wù«ùð"=1Ë1|]e%©Gª£wÂE«Í†§§'nnn7l R+ÕômÚ—•®¤ÂTÁ˜c8žs«ÝúoeOOO‡1¿KѤI†Ž—×1áRQ±à+˦—,e~@o`03î\+96ÙüƒÔ2ש;»//-^^^ªÑU*•xxxÜÔIpô;íÚµcöìÙôìiAÒäHHyÍÛö”EÎ.{£Í9ƒ3ÙøÏT\) ’HB¤\Ž™Z õq:yyÝUÛæøßffÏ~•Çk‹‡Ç%YQ^ë¼yÉ2j¦fy!ZRêõj¤t»YŽ£œ H^^4kÖì7uŸ‡x„°è¾EDxG0{ßl~¾ø³ãjÀ1cždÊ”Ç »Œ”À½¶+ßIÖ—5“'Ñ„Ú{DàÒréd¤±Ý6HyQ7/±Êwå<”B¡à¾ûâââÌèÑ’Ÿ_,«Â£n—ãmW¤4§hEØÈ£ØiLÓÙN)ErL+ÿ>*Œ™8ñ?¢†tÀºJS·{ŸK—.rèP†k×­EË¿k𼩤»ÙÃeD<‘&€Óeõê4~švíʽ÷Þû››‚Ü‚˜}ïlVž]ÉœsÐYt<Òú” ¥ãÃj€ðôôäå—_D­V2kÖ»²ëX—iÝ$ç„\dgÓ‘n'‹bô!QÍ\”MÒ€pP@@P¸Ã ;"ôß§8[µjEçÎ]äX&©ï² 84Ù²ŽªÆQÎlÌ&DôˆÊœv891êÅyyÚ4‡ä8ð‡dÓßߟ"…HËJ ªáiHíDm¹ºE@Ä3ÒŒÆqYAúʱ|°pëÔ‰ÿûúk7nü‹S:Oaþ€ù,þu1o샒êÇÕ@áææF\\¾¾®H½Fy²l!å*¹Ú ÆŒ‚2¤¶ó²Î ”ãø-@Fh(Ÿ­\‰—WŽ>JG„þ» V« E¥²cµnCªäøÆSö r’(•j0>Þó)/?‡‡Ebz‹MޏºÒ.&æ¶\˜àÀ‹ÅBttkT*;ËI9Þv••¦ˆ”•¨3‹‹K^^ÁTVV`×ëéŽÄ]½‚@‡öí7£  ônÒ›E÷-⛳ßS™ƒ¯‹# Õa·Ûqss£I“&”–žD@ª›W! E¶ãp' Aˆ'8ØN@¯×ÓÚf£?R_¼8xDF‰Å"8"tG„þŸÃd2ñÚk³Y¿~v{s¤Áž ÁŠ%8±X œG­¾—iÓù`^?BBBè sR¢>//çäÉ“ ‡ä8ð»a6›Yµjï¾ûv{ 9SdB WtaÃ…_€uÀ<<2sæS|õõWtîÒ…`®Rc*Z;;‰"‡ö졲²ò÷+AA·ÐnÌí7—(ß(ÇÕ@qîÜ9¦OŸÉÅ‹zD± RQ'ÅaÓTü¬ÆÙy£FµeùWË7n~*]¹:”©EJ¹çž:EZZf3ƒþߎÐu:åååµ»Ž5jT¢°¼¼œ¢¢¢ZÏ-88ø¶¦ÔE‘O?ý”¯¿ÞCuu9/Á…lzb"V”a!:¶aCÑh?͸q¥<3v)ÅYYÄ]ãí(_Q¤  €êêê;~ÃÔ-Ô\s³ÙL`` ÞÞÞõ·ÂÂB NNNøûûãêêzÛJˆ¢H|ü¯¼ñÆ"²²Ú"ŠMec¾‘¶”ÓOŽÉ«1³‡,üî½—ÅLHH æÏçìÑ£4áúV%_ÀPUEII Ȩûiý‚÷`0(++Ã`0 P(hÔ¨Q½©—ªª* ±Z­hµZ‚ƒƒo{犊 &MšÌ±cNØíÃGiD.÷É%H+6„b’|²l}ûöcçÎ|¿r%®f3×Î@h¤¦¬¬ “IÄÉIpÏË [,Ö¯_ϪU«ÈÍÍE«Õòå—_ÖnǺrå .$33…BÉd⥗^¢ÿþ·…Ò4™L¤¦¦b0ððð **ŠÊÊJ6oÞLuu¬œ* š¡çž:Ê0 莩¾)<õT8?üðÇŽÑÜf£@N,Õ|ý¬@®BA°°[’ýWTTpôèQòrsqrr¢]L QQQ –ý¢¸¸˜gžy†ŠŠ X°`Ï>û, Ѩ®ZµŠ­[·ÖF¾:t`Ê”)·EÓ¢Õj%++‹ââb4 M›6ÅÅÅ…ö“™©EêKWY¸R̤ÆË%ØØö,gΜaëÊ•Dët+W[æD¤Úº·¿ÿ-Sî&“‰ÄÄD’Ο <<œ¸NnûÝ ·#l6»víbéÒ¥Q]]ÍòåËk7¦eggóÉ'Ÿ””„R©Äd21vìXyä‘ÛÆÙ,,,$33Q ' €C‡‘–VˆÝ>R–BÎ$'ëËÙì,Šäét¤\¸@÷îÝùà­·hR^NR2¾.¥‹Àb¸½(Š\ºt‰3§O£7ð÷§c\ܱhé¶2è …‚˜˜|}}ÉÍÍåË/¿¬8³ÙÌòåËÉÎÎfþüù¸¸¸°víZÞzë-"""hÖ¬Ù_zòùùù,\¸ˆ~Áh´ãææÄÈ‘2dÈ`y‡ûUŠB|<¯‹lB)â¢0›-šøÃ‡‰¶ZqAªûx"­˜‘Zè*ÂÃé׿ÿM`EE³fÎä—­[òóU*|:tàù)S:lXƒ]dñG Õjyê©§ððð`úôéõKMM嫯¾b„ ôïߟÄÄDÞ}÷]š7oΘ1cþòèí›oþÅÚµ?R\\‰F£&66š—_~‰’’®NXTâƒk{…Ü{EEEEœ?MAªí‡€8Ù¸‚D‘4õ©§n:#^]]Í·ß~Ëò¥K1&'ƒ(¢ eøãóÊÌ™·ýÒÛ ‚ Å?ÿùOÌf3³gÏ®çÈ­]»–“'O²hÑ"¼½½Ù²e .$&&榼ùÿK8p€ ’•U@DDc&MšDii)v»S°Ç†–R¼å%@Wõ)xädg“””Di~>ÈŽË’í‡D“ô‹ }ï½DEµÆn¿qÊýرc¼2u*%‰‰(õzD??: Ä«¯¾JóæÍ÷[ ºR©$&&†˜˜:TïÁ¢¢"NŸ>ÍÈ‘#k`Œ?ž÷Þ{Çÿ¥½´´”×_ŸÃ¿þu£±‚ EËIJZFYY9žžžB:¢è $£"…J¤¡ MȦðôÔâçç‡( j3¤!·xYQšåçuiÖŒŽ;ÞÐöÙl|ôá‡ìÿæúêõ¸v³™”øxÞ-*¢yd$íÚµsHÜ777zè! ÃueŽ'NàååEÿþý ! € 6ðý÷ßÿåýÛoW1}ú|ªªîAšÂ5röì RRþÁСƒQ©bµê T¥3Æ:&¾6²qsÃ××PÎ¢È à`,§Õ€Ýɉ†½éùüúë¯,zí5Ú&ñzRvé?,YBXx8cÇŽmp¼× …‚–-[Ò²eËëv§—˽6ýúõ#::¥RÉ“O>É‚ عsç_nÐ:Ä”)S9{ÖQì (HHH"-íU{ìa4#Ç›;±a¥\ŽÐ…Z3 Á!"R©¨‡¬77ÈÇV*žŒ‹ÃÃ#A¸Þ çææ2í¥—pŽgRySŸ—ǯß~Ë"''}ø¡ƒbø·Êå¿óBAÀj½Êd±X¨ªª"33ó/=ñãdzukùävïÞÍÃ?Ì‘#G8vìÕÕÕ7<~ÇŽäçç×ÞîСqqqúû-**¢°°Q¬ÙP%K^Kû÷`àÀ~¤¦.Á˜•E'ù¨ƒHS¿9:¯prâŸÝ»ãííMûöíñ쳬þðCò*+q¡ffÜ||xlìX<½¼nzN%……¸+(mõ d}€lƒ½^ÿ‡šéîd?~œS§NÕÞ>{öìÚ"çááAÛ¶mÙ´i?ü05â›o¾¡ªª “ÉtÃçäææÖÓôêÕë¦ÄïEUU99ÙØí5ñ¶ HA".fëÖmLœ8¸¸T~§;"!²†=,ë3ëÛƒíÚ‰ ¼üÊ+̘4‰’‚Ø>.!Í¡÷4ˆÎ;£ÓÉ:ñ𽬤£ñºèR Xôú=U”ŸŸÏþýûë95ºš ùŸtFÃ?þñfÏžÍÈ‘#Ñh4DGGÓ¼yóÎb»¸¸0pàÀÚÛjµ¯[(™?-.."z½iCÕn$*ƒ^z¾új7Íš9¼nRĦUÃd”- еF:((ˆ—.eåŠü°r%…ÅÅX€¸˜ýúëÄÆÆÞô|üüüðòö&©®Ycöõ²CÐë@nnntîܹž2[¹rå~ÝÖ­[3~üx–-[Æ_|ŸŸÁÁÁˆ¢xÃãccc0`@=‡ó¿Ôj…üé»Û‘Ø Ûb³udÿþdrs¿£ªªm¨ä>®.OÝ ¸ˆ"J¥Aðôôä¥_¤]»v¼óÆädfb´Û  bêôéümôè[öh4Œd¿(bæ*Ѭä~¾¾ zEoóæÍñóó«aÿ‘Œ…Z­æ‰'ž ++‹ÇFC‹-hÖ¬ÙMeÎÇǧžîÔh4ÿ•Išš×„DÑŒ´¸êfG.]ÊbÁ‚¥øû:£À]”䳋œk*G"Ž)Ô*U­î¼ÿðôôä³%KøõÀªL&œµZÆ<ôoÌ™ƒ»»;%%Ü0åÞ8, »;f½¾žl–î ÖѬÑQ=zôÀb±ÔÞ·bÅŠßgÐAê„]¹r%¥¥¥ˆ¢ˆÁ``àÀtèÐáúS©hÚ´éÿä¶oKÏž¡ìÚu›­©c¸5UH®1 ËQÈQŒ©ÉÍCV±y²§QO`š4iÂsæðÆœ9#Š"¾¾¾ÿvL/88˜'žx‚÷Ξ…¢"üdï4I¥"´W¯z†¤¡¡fòZçïÂÙÙ™‰'2fÌJKKqqqaÆŒ7­QþOäÓÃÃÇ¥K÷a±¸Ê’6Ššî ³9ˆÄÄí@"ÒÕH9"ÑʲY „Ó84´öu=½¼x衇9r$UUUTUUø›&(üqönÛÆ±äd"m¶Zz¥Ü¦M™öôÓ z኷·w½H8 à— 5jÄ'Ÿ|BYY‹‹ÅÂý÷ßO÷îÝo*Ëÿ ÙôôôdÀ€lÛö&*9:ï„×h|òó5äo9Ê’@?Y»³ pOÇŽõ¾ã}úö¥Oß¾X, ðöö®7d4rÔû}÷ÝÇú^½øyíZ:Š"Q¤8çáÁ¸—^jÐÝÙÙù:æÇ[}ßU 5˜åççsùòeª««¹xñ"jµšæÍ›“MII ÞÞÞäçç³lÙ2 T»ÿû¯BÓ¦Myé¥1ærð`Ò>Ÿl®¦àÏ¡­hê’ûÈ4µH#>G³JÅÄçž»i½®×þ[ð·¿ýŠòrÖ÷‰©©¨µZÚõïÏĉÿc:N$ØívRSSÑét rrrHLL$$$ggg’’’pssCEÖ®]Kvv6o½õÖ_~Þ“'?GAA[·nC§k%›O•ìVžFC>Z¤†ËƒHlî5©Ê€Y¡ ]—.7tœAW]þvEײU+Þž?Ÿÿ[¶ŒøC‡°Ùl4j׎Wžy†>}ú8íw ²²’ììl2220™L\¾|Z¶lIaa!¹¹¹øøøPTTÄ7ß|Cll,½{÷þKÏY† Lffï¿ÿ1åå.²ôen Z»ºê¨,µaHpg‘¦*‚BCoÚ„©V«o¨ïL¦Gèîîî¼3w.sµZN8@uQÞÍ›óبQŒ;Ö1ô@°sçNæÏŸOYYL›6°°0Ö¯_OVV‹/&++ 777ºvíÊ /¼ð—«( úö탯¯=zôÁT*숴¡œ`l¤Ë^e’,ˆ*Y‰Ú/æOuLœ™8iƒ‡ ¡¬¬ µJEãÐPüüüÄ¿‹…ñãÇS\\Lff&ùùùµ£“}úôáÇäàÁƒØív¢¢¢˜:uê-K#ÿK‡sÞ¼÷¨(/fÇŽxÔ$cCÀކ@ЉÁBÒ–R`‡ìŠZål’ZMëÖ­ñññùÓ²$ý  m»väåæbEüýýiܸqƒ^7ùGpäÈfÍšEEE¹¹ÿÏÞy†Eum øa†ÞEQ Šì½±K¾DS®Qc‰ñF&&&ÑÄ–hŠI0E£Wc×(`‰QÁ6¤Šô:´éçû10W¬(3j¼ç}aÎaÏ9û¬³ÖÞk¯½VóçÏÇÑÑ‘ƒ’™™ÉŠ+¸zõ*¶¶¶têÔ‰™3g>³M'''Þ~ûmÅ ¾X´9aHÐ!ÇŠrzRŠ¢r"TZ9r¨œ&©A"! M›Þ#®VßÙ 4nܘ¯–.%==Šòrœ]\ðòòKõ>ŒAþùçyþùçï8šëÙ³çmn¢'Å8©T*~\½ï A•.¡ •3YåÏ^¢‚S+gà lÜêÔÁÆÄciiI³fÍDÉ2VVV9r䮳/¾øâ‰”M­VKxxWOb<%4ÅĶƒ{ý†HÞ¦Ö#S*å2Cù ¥åm˵Å“·û¿ÊÀ︔&‘H¨S§ëÖ­{"eS²²²X¿&„gPÒ%:`7æ ‹C>‹®V6`ˆv¿4ððxà`U¬êÝR¸ººšlû?mÐï'hOÚìR­Vsôhûöí M– IDATc×–-ŒÆ°} ÛÑÊ*ÝCÃ+•$âŒÃ+•g* ‘J ìÙó¡‹Yˆ<:î%Ošl ‚ÀåË—Ù¶m;[ÿÜD‹ÂBš`’¬*” ´ÃP\EŽ!Ö"ÃK‚(]ÝÜèÙ³§øðEÙ4)ÙÙÙ„††²}Û6óòèRiJ+½C)¢‘žÁ¨)T:#0ìø¹Ôqp G¯^X>`Rvµ¤R=èf6èÿ4þüóO>úèKÒÒÊqЕ9•#ÉB Kå̼ { †mAe mÚðæÔ©b]s“rêÔ)æÏÿˆÃ‡S±Ö¤Óšÿ&{°Ä°Ô#`ˆ®Òkr p8ƒaWÀœ¹sEOˆI)++cÆŒ÷Ø·ïE @o4’J9-­”Eë›>÷©œµG2kkF¿ø"ƒ zàºJep·‹«æãWmíÚµkÌû9ÉÉmÐéú¢Âš›ãQbØ[{k^!I¥â”YZòÂøñìÝ¿Ÿ®Ýº=ÑEfDþYäææòÍ7«8xPF3%(“f6À°,dAõŒpUFÝÒ‚Î=z°sÏþ5a‚(›"&å§Ÿ~bóæ žA ùHÐÝ4ò­4·Î»-*?spsã§5kXº|9uëÖ}àïW*ïînù5臢¨HŽa%Ò5>Æ$FSi¸Ý€ .Î*4¶õxæ–W ¤¨0ELIffÇŽ]¬,‰êˆ?b±"ÃZ¤¨/‘ H¸^9S§òÿdÀÍLJ¥K—Ò«W/±˜ˆIÑétìØ±®àŒ@°ãBå¬\Si´e Wo’M0ÄÛÛ³páBÆ÷ÐiXU*3¸š—œÖP*•‚¼r,"EG. $›$Ñ¡’ËiÚ½;¥*¢£ñ×é°Â°þSÚ¬ógÌxàíh""5UšJ¥¾rNc´ä:%ì%Š:¨Ð–^^ îу¨;PTTPÈ’H8'•òþ´i};¨ÈÓ‹¡`UÕ¹¥ à\  wueDp0'@——‡—  ÎÊåt>œgGެU\@•Ë]äÜ ëõzŠ‹ŠPk4xyyaeUHiinå\¼:‘A>`¥ÕRrú4nõë“ekËõ’ä>ZZŠ{EL.›ååå”——£ÓiiÖÌ™¼¼,Á CŽ­är<’‘6™™h"#Q¹º‘™‰µ^^¨œÐëõ¢çHĤF¼¤¤½^OË–þœ>}½Þ°DÀŸRò(åh°).æpx8.õës2/8 O¥ `ecƒ´–ÛźhÐ)--%<,Œ_þ™Ü¤$l\]‘É”XZ†£Ñ´EäXŽ%E¸íÛ²22):bØ ¤"ããY´`ÍÖ¯·îˆ˜Ä˜;vŒ?~ÿ‹ÑÑè´ZŠõ––ñ¨Õ*ÀAˆÆŠœ€¶€»FCqZç0Tõ ®| t:Ï›‡¯¯ïcO>"òt””ĺµk9¸{7êÒR¬êÔA*½È„¦B:2N`…žÖ@]A paH¦­Óñ÷ºuüѲ%3Þ}÷¡œâúÿ¸A×h4lÛº•ÅsæÐ4+‹‚€R"!°òòÂ×·„ .RQPD «ò5©t.%Í1¤| B##¹víšhÐEjÍÕ«W™9u*V/âS™?þšTŠ¥LF~RSΑ“œˆTèŽ!S¡†õɺÀ^ Û)Ý*e49/°ÐPúôé#&"©|ñùçÄþñÍ5ä‚@¾D‚“•M˱wÈ"öd$Ö‚? {Ì«¼á^À 1Gî@}A •VËŽÿü‡iÓ§?´AW«EƒnnžhßÞ7ذv--²²-g;•Љ¯¾H‹f ±Ç6óæ•ñªºæ {ÓÁ4A®ÑT«¸%"ò°üðÝwpé½? å"ûéõøèt´lË”)/ላJƒmq“lzaȾ•qÓgÎj5¹yyÕ 1ˆˆ<(‚ pìØ1NlÝJOµš‚@ ƒ ÐE­¦¡§Ÿ~:+¹ ûÌo^Ú¶ÅñžÃ¬ÔÔ»>ª *•hÐÿ§ z~^Ùññ4„jêØääPV^NÔÖÈõ·ü}U5â*EZèkUQD îö¨'hª×s³Ž²|u:®ÄÅáîîŽ`i‰CÊÌ[eSË·¯i€lûú>p‘›Ñh4$$$àR\Ì͉f-/A äÆ \\\°ÉÐTÊÞÍfº*Å«¬Ò˜ë0d9lP«ø¥R\C772½^ϵk×8uêIII¸ºº2vìØj5ÌO:Å¡C‡(--ÅÍÍ#F<’Ê@r¹™Ñ0ß,pZ¹¹\Ž£³3eʲ¤`HØÿ-$På¸Lb--é5z47Ÿü?¥RIhh()))äåå1räÈj‘àYYYìÛ·k×®ammMÇŽéÝ»÷Co­yìíí¹S¥ær‰„º†ê„r9•г@·Ê™C¢Žb r€+ 6-[2jôhñ¡ÿCfÁ©©©œ8q‚ääd¬­­;v,ÞÞÞÆsââ⧨¨‚ƒƒiÕª•ùgiR)¶¶¶(%ô·Ì¨Õ€…!âÝ‚b ©\}*=F`Ȧy¹Ò«T†aKåzõ˜?iR­òþ«T`‚"‹"÷zöZ­–Ý»w³zõj"""X·nyyyÆ"""x÷ÝwÉÎÎÆÝݨ¨(Þyç’““Í~qžž´èÚ•øJ%XÅu@îç‡^¯çÔñã´®¼ðÊÇ­•‚šìÂllèöê«|0w®Ùê`‹˜žÜÜ\>ýôSûŒ¡Ã†‰ÛÖžôº¥¥%3gÎdæÌ™;vŒ™3gV;aïÞ½¸¸¸°|ùrÞxã üýý‰ŒŒ| YºR©$--ââbär9žžž÷­3îææÆûÿþ7³íða\ËÊ(“ÉÐ5oÎì?$%9ëë׆!Õk|¥Ϫt½Qiü“[¶dËÞ½øøøˆOü†——gΜ¡¼¼œAƒU;–ŸŸODD+V¬ ((A˜;w.6l`ܸq¤œ333ÉÌÌB"‘àæVooïûº_›2…ó.ºk®ùùè%ŠêÕã…—_¦[·n,Ÿ9“:ÁÀY uΓ*•eg ¹ÜÿãáÁ⯿fôèÑbÕ³’â”ÉxõÕWyõÕWILLdø-¥D#""P©T¬X±+++t:]»veß¾}4oÞü<¤§§£V«qtt¬Q²^½{3õßÿæ»å˹˜ˆµNGž£#­dÒäÉLŸ>¾ ^•Ð+•º²C¦Ía@ð°páB“$:]î@.ïwB“&MŒn¥ ‡]5×ÒýGf*–/_ζmá$'bg'§_¿¶L›öíÛ·¿§âl×®ß}÷Û·oçÆ8ØÛ3 (ˆnݺñÙÂ…Èt:$ÒjVånÏvñßÌGÖrùc/÷*R{n ȱ±±ÁÃÄ„ºuëFaa!7nÜx ·¦Z­&,,œŸ~ áäɤRhÙÒéÓßdĈá÷Td666|õÕWì0€óçÏ#µ° Cûö  "%%½V‹·zU™-°Ê4Ä€•L†½½½h̟¨^¯'11‘&Mšgæ¿Ï’%Ë9rä<%%j5rá¹ç3eÊ”{V&“ËåLœ8???:„R©ÄÇLJѣG#“ÉÐU&ܲÄPã¢ê9Ša)HVùÏÁÁÁdY Å ¸'À =šäädƃƒ………̘1ƒN:ÕøKþøc=‹­¡´´3І‚ 6Ä‘–ö![¶l¸oÞyçcÒ*·OËV­XooO…JEÕÒŒP9C·©üù† ТC‡G²¦*òh©W¯o½õß}÷[·nE­VÓ´iS&Ož\ã6NŸŽaîÜO¹t©z½Áì9’Inî'8992`À€{þ½««+/ŒÇsÿ÷H$ãàÔÉÑ7??ò/]¢Ž c9J"ÀCÕ5+'§š±‰ü3 "11‘I“&áàà@qq1ãÆ£OŸ>5n£¼¼œ÷Þû€¿ÿÎA§kXRPPÀµkë°´´â½÷Þ½çßËårúõëGŸ>}Á8hÔjµ4òñáÚ©SxêõFÙ,¯Ô>Ò½XZh²>·­=fƒ®×ë9tèà7Þ Y³fœ8q‚Zµju›Q/,,döìÙÆßÝÜÜèÝ»7«Wÿ@ii É$•BåÈÑ£;Ù·o_Ü£‰ä¶YÌСCùkð`ölÝJ`E I‚@PØ ”º¸ðJ÷îb†¸ÇHNN[¶l!--ÍøYbbb­ÛÍËËcݺuøøøð /——GHH›7ofΜ9·¿víZNœ8aü½[·n9r”‹m„@þs^—K— ùóÏ?éÒ¥K¼;·Êf&N›Æ×Œ*7—ú@¡ Q9Ð<ƒÁýþjŸ>b èÇ̾}ûøûï¿¿'$$н{÷Zy’¢¢¢Ø¾};/¿ü2mÛ¶%66–ÿüç?tèÐáŽF=11±šîôööF§Óu n4ÿ-7å†B!°xñ·¼ýö[5Úq«T&“1gî\ÆEEq$-æ‚€Vˆ®4èràЦ[7<==Mä]3Å= )))lÙ²¥Z\[QQÑÃôÒÒR¶mÛÆ€xõÕWèÙ³'‡fÏž=tìØ±Z„‹‹ ‹/®ÖÆùóç)))Áò忀 {$'“úfmllXºbË6$öôiRJK),)Ayñ"ZAÀ p(,dÅ'Ÿ`iiÉK/½$&ìxL3é©S§Vû,::ºÖíÆÅÅ‘žžÎ‚ Œnv•JÅ¢E‹˜5kÖm®ÂW^y…‘#GW(¬[÷$·ÊúÆá#‚àINN%%%µ\S%o¶66lݺ• ¹¹¨t: ãâp­¨À ƒ›sÿÚµØÛÙ1óý÷ʼn2pà@ãï;vì¨Õ€³¢¢‚½{÷Ò¦M¦L™‚L&£gÏžœ={–7Ò«W¯ÛŒl“&MnÓ‹‰ZíDõÚ‘ .ÅÅäææ>´ÁmÛ¶-ß®Yï¿þÊåäd´:ÙÉÉÙÙH1$æÊˆˆ`î¬Y¬üá‡Zï ÒjA§ úƒÒ¨Q#ÞÿýjŸEFF>œA¯mjµÚj¿«Õê'pvvÆÊʪ҉ss…rz}îîõjuÃnnn,X°€ŒŒ JKK™õî»Ø^ºDAÀ Ã6+éé,ûâ ºt邟ŸŸ(%O ‚  ÓéÐét7)-Z­¶F7™LF:.B†à›gÙù88ÔŦûlìííyù•WzæòóóÙ°~=…ññ êTªæ…‚Ý?þH@` Ï=÷œ˜Çý)’MFSMOªÕêòÖ­ë†LVvÙ,ÁÒÒ''§Z]cß~ý $++‹K—.1û7høW…^ÏáøzÅ –-_^+/§Fc0è¢ËݼH._¾ÌºuëØ»w/¹¹¹lß¾M›6aiiÉàÁƒ9pàK–,aË–-|ðÁ(  P#¥Ù°aC†\aS(C*=O“&–ÕFÆ‹••¾¾¾xxxsô(žz=Z Û‚ä@+A€Œ :$>ñ:Ž7²nÝ:rrrˆŒŒä×_åêÕ«´lÙ’:uê°xñb6nÜȪU«X³f cÇŽ­Q™ C‡ÁÝ=‰$¥R6•@)ªµÒ”H$xxxP¿~}ð,7ì\/ÇÉð(.fx8jµZ|àÿ RRRøã?زe ÅÅÅìÙ³‡ßÿ‰D€Ê@ÉÅ‹³uëVæÏŸÏ¥K—9rdmÇÇÛۉ䆹J K˳L˜0ºÖ¾‰üýý¹víäæR§R6µxu×ë‰<~œ”””ZÏеZqº¹‘!ÅêÑ£GQ«ÕôêÕ‹k×®‘ŸŸÏСCyñÅqww'44”Ë—/S¯^=V¯^]ã` ©TÊü›ôôtŠ$#CÀÖV 0ÐY³¾ aÆ&¹‘¢¢"V¯^Z£!ˆÆxÔƒ³_®ÕR¢PˆOühÐ###Q(tíÚA8|ø07¦W¯^Æÿý7VVV¼ñÆ<ûì³5VhôgÞ¼· ù‹ÏWº¹$L™òcÆŒ6ÉF£!<<œ¸˜J1¬Ë0¸Ü+‰„2…¢Vi5E=¹¹¹DDD T* âúõëddd0jÔ(† F:uعs'{÷î¥N:|ýõ×ôêÕ«Æí׫Wï¾[ÆG}Ê… á”–J©__`РÎüûß³LvñññlûóOJ€}•Í&@ i`Õj5µ|D—û#3è ¸g4ï­kLŠƒƒ+V,':ú4éééØÙÙÑ®][š6mj’í::ŽÍþɺåËŽa¥þôc•F]akKÛvíÄ'þÃÒÒ’U«VÝõxãÆoËð ØÙÙ1yò$:wîÄÅ‹—ŒmvíÚÅd”—/_fÙ‚x§¦Ò ƒ«=½rÐiƒa'ÆØÀ@1póF§Nî¹Û§GôèÑ£VßÑ«W/BBVsîÜyJJxzzÒ¡C“Å[dffòÙgŸ!={–á•òXˆ!(.Ãê}ƒúõñòò2‰A]îÀ ? \\\8ð³´}ãÆ víÜI›ÂBšÝô¹-†ä{d2†Ó»woñ‰‹Ü†••Õ}•smøÏúõÈ’“éÌãèëP™ÝP*% K† f²ý¾"Oøùù™-öçxd$ñÿÍ@ΘúÕ¥r–~œœX=mZ­³kV¹ÜÅúSbÐÍIQQÅYYÜ:†´©Tœ‚ƒùzåJq/ºÈcár\õôznžK1,¥6nÌ’o¾½G"…¬¬,ä·ÅÑ;Ör9óW¬`Ĉµþžªº¸†n^žŠZ{{{ì\]«åÔ†ÊÒ©R)ƒÆÑÑQ|Ú"/__ %’jõr%š5kFûöíÅNy,¸ºº¢qt¼M6Ë%œ½¼èÖ­›I¾G\C ziذ!]ºwç´ î"=p W&ÀÝ™"‹ÿ{þy®ÛØp­Ò¨ë1äÍ>#‘ðÊ¿þ%¦}yltéÚ×V­8-‘ Åô¨ 8-•Ò}Ð xx˜ä{ªö¡‹kèæå©°r–––¼?kJ¥’›7c]XˆV.§Ž¿?ŸÎ™c¶µQ‘šÐ¹Kÿø#+–/'þúuƒf«_Ÿw&LàÿþïÿÄyl4nܘUß}Ç»ï¼Ã¶Ë—±,/GíâBïAƒ˜=w®É<›àë+tÑ ×{{{>ûüs‚ "9) kkkº÷èA£Fħ,òX‘Ëå<ÿ röìY4j5mÚ¶¥M›6bæB‘ÇN›6møcÃŽ;FQa! ½¼èÕ«vvv&ûX´Ä•OÑ ×üfd2úõëG¿~ýÄ'+òÄÉf«V­¨œˆÈ£¢~ýúŒ;Ölí[[CÓ¦b?›1ϤˆˆˆˆˆˆhÐEDDDDDDDƒ.""""""bƒ®Óé e„ tèÐ!C†pùòeã _~ù%;w6þ  Y³füöÛof»¨ØØXrssMÚfxx¸IÛËÊÊâìÙ³&móĉ(LœoÞ”÷]QQÁ‘#G©€1mÚ4ˆ¯¯/üñ‡ñXJJJ5ÙìØ±#Mš4aРAf»žòòr"""LÚf||<éééO´¼›º½ôôtâããM򾄣G)¯,~ó(Ðh4lذqãÆÑ¶m[ÆGff¦ñø´iÓªÉgëÖ­iݺµÉûòfŽ9‚R©|bŸ{qq1'Nœ0i›gÏž%;;û‰–÷ÜÜ\bccÍoÐõz=J¥’F1dÈòóó«•K4i7n4þ{íµ×°°° mÛ¶f»¨óçÏ“ŸŸoÒ6M]i-77×ä éôéÓ•µãŸÌûV©T&k¢4---:t(VVVÕŠDxzzV“ͯ¾úŠºuëš5ÅoEE'Ož4i›—/_®fžDy7u{\¹rŤmž}:/¿üòm¯ÓéX¹r¥Øé"5ÂÁÁÉ“'×n†~ùòeRRR˜?þ]Ϲۗˆˆ˜­V˦M›èÖ­Mš4¹ã9:t¨±‚1‚ EEEýû÷¿ã9¼ûî»bg‰Ô)Össs),,D£ÑŸŸO^^ž1bS¥R±uëV:uꄟŸŸØk"T!æåå‘““ƒF£A¡P““S-šùСCܸqƒñãÇ‹UõD)¥¥¥äææ¢P(P«ÕäååQXXh\SÏÍÍ%44”aƃ‹EDÌ… ""‚uëÖ‘‘‘AZZ‹-Â××—¯¾ú  ‰ˆˆàý÷ßÇÙÙÙ,RXXÈÁƒIHHÀ† R«Ò’W¯^åàÁƒâëëKppð­O+ >LZZ%%% >¼ÚRDii)GŽáÂ… 8::Ò¿üüüîêFÖëõ$&&KJJ uêÔaäÈ‘Æõº‚‚¢¢¢HHH ¨¨ˆ^xá¾(­VËñãǹrå 9990tèP£1LYYíÛ·§W¯^÷Œù¨¨¨ààÁƒ¤¥¥‘ŸŸÏðáÃ}ªÑh¸páqqq\¿~¦M›2jÔ(,--ï9KMM%::šÔÔTìíí1b•%9“““‰ŠŠ"%%‰DB“&M2d¶¶¶÷¼ïÓ§OGvv6-Z´`äÈ‘Fy>yò$ÑÑÑ( ,-- ¤[·n&-4r3»ví⯿þ"))‰´´4æÏŸO@@³gÏÆÖÖ–””®\¹ÂäÉ“ïÙWµ!77—={ö‘‘¥¥%:u¢gÏž­;õz=çÎãØ±c”––Òºukúôéó@•ײ³³9~ü8©©©èõzFŽYÍ{VTTDxx8III¸¹¹Œ··÷=¯)..ŽsçΑžžŽ··7#GŽÄÞÞÞø}ÇŽ#-- …BÁÔ©Sï¡ÑhØ¿?©©©äççÓ¿ºwïnœÄ:tˆ„„ …q;ì½ô» ܸqƒ¨¨(RSS‘ËåŒ9Òx_=z”””t:õë×'88˜† šL,,X°ÀÊÊŠFѳgOž{î9zôèAûöíñññÁ©TJ§NèÞ½»Y^ŒÒÒR–.]Ê–-[hÑ¢¥¥¥üòË/XXXо}û‡j3==×^{ŠŠ êÖ­ËŽ;¸rå ;w6*½ûqñâEÞÿ}233Ù¾};:t0t•JÅš5kX³f Mš4áâÅ‹lÚ´‰~ýúáäätÇöÔj5¿ýöëÖ­#99™èèh‚‚‚Œ0ú?; IDAT‚wâÄ ¾üòK®\¹ÂÞ½{éÑ£Ç} ºB¡`ÆŒÄÇÇsèÐ!ôz½Ñ «Õj&NœˆL&£nݺ$&&òÛo¿áëëK£FîjŒ¢¢¢øøãÉÊÊbçÎtíÚÕhÐSSS C&“akkËñãÇY¿~=ƒ 2IÀÇ­H$\\\hß¾=Ï=÷AAAtèÐH$xyy1xð`ÜÝÝÍ¢0£¢¢˜9s&r¹œºuërðàAü®í———³lÙ2ÂÂÂ8þûì³Z¿;¯¾ú*äææ2iÒ$Mv­OÄ ½  €7âææÆ[o½Å”)SÐh4¬_¿¾Æ³é[yùå—‰åûï¿'**Š/¿ü’¼¼<“]³N§C*•V{¸U?ßk†þ¸255•wß}—=z0zôèZGƒ?žéÓ§Äž={ˆ‹‹{j ú‰'ˆ‰‰aÔ¨QLŸ>ÀÀ@¶mÛFZZÚCµ×¬Y3üýýùꫯˆŠŠâ·ß~ãðáÃ&“›ªYÎÍ3‰D‚T*}âd³j&½jÕ*"""X²dÉC{>ªð÷÷ç½÷ÞãÕW_¥¼¼œíÛ·SZZúTÊfff&¿ýöíÛ·çí·ßfâĉ$''³{÷îj59„W^y…°°0Ö­[ÇñãÇùúë¯)..6™lêõúÛt§T*E„{UÁxóæÍã¹çž3Iˆ©S§òÖ[oÑ£G6nÜHbbâÓ5C?{ö,±±±lذÁæããÃĉ3fÌCØûõëǼyóøë¯¿8zô(þþþtïÞ† Ö:m­D"ÁÝÝâââjY{rss±³³{¢fçU9Î?üðCš7oμyóL²S¡ª8O¿~ýHKK#$$„.]º<•Jó§Ÿ~"((ˆ·ß~‰DBÛ¶myýõ× ½c›ûáááÁG}ĺuëX¶l<óÌ3„‡‡Ó AƒZ_¯‹‹ –––ÕÜ÷J¥’òòrœŸ¨Ù¹Z­æÛo¿eÿþý,^¼˜-ZԺͺuë¢\]]™;w./½ôÒSYâàÁƒ¤¦¦²aÃãÌV*•Â!C* òرcQ«Õìß¿ŸÐÐPZ¶lÉõë×ñõõ­µìÈårÜÜÜHHH¨æ¾ÎÊÊÂÙÙÙ,ƒµ1æÑÑÑÌž=›aÆ1uêÔ{îÀ¨);w ((ˆ!C†°yóf>þøã§Ç W­›Ý<:ÓjµèõúZÍ(ÆŒÃСCÑh4\¿~}ûöÕ8Ró~4jÔˆ²²2nܸAãÆQ*•œ>}šöíÛ?ôÚ•9HLLdþüùÔ«WÏ,®G½^V«}ªsûët:ôz½ÑÝXõsmÒÈúùùñé§Ÿ¢P(H$Ìž=›®]»š$娣£#þþþ?~ÜèIKKC“ LiÌþùgvíÚÅ‚ èÙ³§I7?£'m‰Á”ï_•<šJwZYY1ažþyôz='NœàÀ´iÓ¦Öý(“ÉhÒ¤ ›6m¢¨¨ÊÊÊˆŽŽ¦OŸ>OŒî˜˜æÍ›G·nݘ>}ºÉwñTÙ=S޳ł»åq}„XZZÍßÿ¥¥%§OŸfùòåòòË/?”{8##ƒ 6PPPÀ¹sçX±b={ödüøñ56èåååìÞ½›ØØXÂÃñ±±¡¨¨WWW<<LAA2™ ­V‹““ãǧ  €Q£F¡T*IJJ¢°°77·»®±±gÏΜ9Cxx8äççS¿~}bccùå—_(..æêÕ«üúë¯DDD°`Á‚ÛR^>-¨T*Ö¯_Oyy9yyy¬]»–øøxf̘Q­¢VM)//'<<œsçÎqãÆ ~ýõW.]ºÄâÅ‹(O©S§ˆˆˆ ""‚äädlll(++ÃÓÓooo¾ûî;Š‹‹ÉÊÊbÅŠôïßÿžÅA4 »ví"66–}ûö!—Ë)))ÁÞÞΞ=Ëáljˆˆ %%[[[cއ»‘’’Âþýû‰ŽŽæØ±c8;;“M£FX»v-Ÿ~ú)ãÇÇÓÓ“´´4®_¿Žµµµq;Ò8vì‘‘‘=z”ŒŒ ¬­­Q*•¸¸¸ðᇒ““cÜóûý÷ßÓ§Ocùݧ 2dC† aÆŒ·­¥5oÞœ™3gÞu¿|jj*Ÿ|ò eeeÕ>ÿä“O°°°`Æ $''£×ëñõõeÔ¨Q´k×î©)•JÂÂÂ8pàEEEøøø0fÌjt­R© cïÞ½(•JZ·nÍóÏ?ÏÄwâ‡~àÈ‘#Õfg:uâí·ßÆÒÒ’ãdzyófŠŠŠ bÔ¨Q÷TnLŸ>…BQíó©S§Ò¹sgþüóOöîÝ[íX«V­øè£î򾄣G A¥R?³µµeÉ’%lß¾T;ßÞÞž &Ü3ÈréÒ¥DGGWû¬oß¾L˜0õë×Cqq1ÎÎÎ1pàÀ{Þ÷?ªü)))X[[Ó§OÆŽûÐîëÔÔT¾ýö[£|̘1ôêÕë—/_æË/¿¼­ÈÒ¥Kñòò"77—ßÿóçÏãééÉ„ î»|µvíZBCC«yZ¶lɬY³ÈÉÉaΜ9ÕŽ¹¸¸0uêTãòàxóÍ7)((¨öÙ¿þõ/š5kƼyón;¿*iÐÝt]LL +W®¼­&ýêÕ«IJJbûöí¤¦¦baaA³fÍ7nœ±ôSeÐEDDDDDD©Ø""""""¢A ºˆˆˆˆˆˆˆhÐEDDDDDDDƒ.""""""tÑ ‹ˆˆˆˆˆˆˆ]DDDDDDD4è""""""O²ÈÈH>Ljj*ÖÖÖôîÝ›àà`ÈÌÌdûöíÄÇÇ£T*iذ!£F" @ì9³“™™Ixx8±±±Æ:Ïÿú׿ðññ`Ïž=Æüõ¶¶¶ôéÓÇ(»""æD­Vóè§§§ãääDPPýúõÃÚÚšÄÄDvîÜÉ•+WÐét4jÔˆ_|ñžyïEDj‹…­­í­VK=pttä—_~!77—Î;“““Ã¥K—hÙ²%-[¶äòåË,_¾œÁƒ›¼j—ˆÈ­5##ƒ÷Þ{[[[.\ˆ§§g5C_TTıcÇXµj«V­ª¦T«8tèb¯ŠÔˆAƒÕ¨žxyy9ëÖ­#$$„eË–Ñ»woã±’’²³³¹~ý:ß~û-îîî|þùç·Åx$%%qùòe±ÓEj„¿¿Ø.]ºÄÌ™3iݺ5sçÎÅÙÙÙx,99…BÁذa?üð;w¾m&vºH°±±¡_¿~w7è©©©,\¸¥RÉÂ… ï*Èz½žI“&aeeÅêÕ«o;Þ¶m[ÆgÒ‹¿pá®®®Õ¦D¯×sàÀh–öÓÒÒ(--5ë2EXXƒ 2KÛ …‚¸¸8ºwïnÒvCBB¸|ù2r¹üžçét:Ö¬YÃÆ™oÞ<<==™={6w•ãÁƒÓ«W/æÏŸ_í˜Z­¦eË–Lš4ɤ}süøqZ·nm¶ }èß¿¿¨0E ...Lž<•JUM66lˆ••Ï>û,W¯^%##GGG>ÿüsºté‚•••Øy"æUœ2}ûö¥U«VPPP€……R©”Î;SQQAVVŒ1‚ÁƒS¿~}±óDÌ'—÷r¥:;;3eÊ”ÇzÞÞÞ¸ººš­}‰DB»víÌÖ¾›››Ù“œ˜3sŸ­­ímëÑŠîÝ»ßsí~̘1U6-,,L¾>v+Íš53ë6ùd99öèõÖXXìâ§Ÿ~eíÚ5´lé/JÇc@«ÕrðàAfL™ByNr@okËs'òþ¿ÿMݺuMöüsss)..F§ÓaccCÆ ¤²³³)**B¥R!“Épww7Êí£àܹs<÷ÜK¤¦êÑé\JKYµ*„/¾˜Ï /ŽRÙ©TÃòåkyç™3g6¢°< Ÿ|ü1›×¬A¦V#H$¸5i‡ 2tذZˇ,;;›%K–ššŠL&C¥RáææÆìÙ³iÒ¤ 6l <<™L† ”——óæ›o2tèP³õøøx–.ý‘7Zm :Šóç³xñbV­Z)ÎÔ.\`ö{ïÑüúuZ V@šRÉîï¿Ç½A¦M›fÅuâÄ BBBP*•H¥RJJJèß¿?S¦LÁÎÎŽ>ø…BL&C£ÑP§NÞyçZ·nmv£^RR‡~ĵk®BÀ NËõëçøè£ÅôíÛOOOQX1ÅÅÅ,^¸ôÐPÆN@1püèQfð«ü“<ÿ¥K—rõêU£ü9::2}útÙ½{7›6m2)//çùçŸç¥—^2»ÞT«Õlذ;ΠT\Ðé@£ÉfÍšm´nÝšqã^gêafòóÏìþþ{©Õ4´@L|<ŸÏ™C“¦Mk]ŽYfccÃ!ChРuëÖ%77—?üŸ~ú‰/¿ü’víÚѶm[5j„^¯gÇŽ,Z´ˆÖ­[›l´{¯PB‚hT ŸM{.^Œ%))‰ÀÀ@QR1áaaœL;A0axååìÙ¼™É“'›Ä »»»3iÒ$|}}±¶¶&11‘×_fÍš1lØ0ž}öYš5k†››yyy|öÙg¬]»–?þ{{{³öÁÕ«W‰¿Œ Œ¬ª^'ÁŸ¤¤8Μ9#ôÇ@zz:Ñ¡¡Us' — ÃÙ³géׯ_­¿G.—3`ÀƇ»»;EEE,Z´ˆo¾ù†ßÿæÍ›óÎ;ïдiS$ aaa¬\¹’.]ºÐ¼ys³Ï#"¢P©ü€›ë‰×#7·>§NEñì³#±µµæ’››Ë_{öÐI­¦J3XÀž«W9|øpí zU½ëªÑZ½zõh×®111H¥RºvíZm$7tèP¾þúk233ÍjÐA@¡P –@uã ‘X¢Tꨨ¨¥¤–}\PPÀ¡C‡ˆŠŠÆÑÑÞ½{ѹsg£[ûVôz=YÙÙ8)•Õ"*%•ªãjRZ­Ö$××¢E üýÿ»¬R¯^=œœœHNNF&“1räH£lÖ©S‡Î;IEE…Ù zII :À­ë²VH$r E«%åååDGGqŒÒÒ2:vlOß¾}©S§Î]g—YYYHÊ˹աl HJJÈÊÊ2ɵÙÚÚVÓ›îîî´oßžÿüç?H$ª]cpp0Ë–-#--Íì]§ÓQRRŽD⌠Hnyçm)//7Ù;ú¿ŠF£!55•;w’››‡G† J£Fîê)(( ¨¨ˆÀÛ48K$¤$%Õúºd·¾éééœ>}šnݺUOIµ›Ø¶mÞÞÞfŸK$¢*^K IDATZµj…³sEEù@ƒ*‘RðôtÁËËK”¬Z””ÌìÙ²kW :]]ôz%rùÏ|òÉTÞ~û­;E©TŠ·7‡lmÑ–•£*õ@àíïo²uÂ[e366–‚‚Z·n}Ûñ‚‚Ž9B@@€Ù9Pép"==Ah^9¤H2°³ÓЮ];QÀjR©dÉ’e|õÕ/TTÔA"±ÂÂb3Çw`É’/hܸñÿ®aÆHœœ(,.æf)P‚³3ÞÞÞ&ÕQ7ϾN:E‡n;¦Õj ÅñÿÙ;ïè(ÊîfKzï !¡%„½EŠ `ư€T|•"*‚ vÀ‚ ü$ô–¡„¡CBBBé¤×Ýl™ç÷ÇNb!"ú*¼rÏÙ“³™ggŸ¹së÷Þëäô_Wæööö´oÌþýÇ€fŠP…]ÁÁ°··¿ÃdB™oÞ¼™7ß|”3`e|ùåJ–.]Dß¾}ê58===ñôðà²$ÑVˆß W hÙêÏcÂ4W‡j–,YÀرc¯±ú¶mÛÆ÷ßÏœ9sðõõ­×k©>ÀÅÅ…ÖûÙ¡:pÿý½øé§TUµìQ©²qvNäñÇgÝ iþ 2 üôÓOlÚ”€Á0°L E,^¼‚Ö­[3bÄðzÏrャYµŠØãÇi/¶@2ììÌ« µùâ›o¾ ,¸¡ë¬ªª‹/½{÷;wî¬#eY111¢OŸ>bÞ¼y¢¼¼üºkôêÕ«Î5äææÞðóQ #î»o´ððh*ÜÝŽ÷+W®qqq"//ïºÏÊj˜"##…V$`ˆ€¦ŠÜô*š6í v튼••bþ¼y"¸Q#èè(š8;‹»û÷ÑÑÑõÊ[½^/²³³ëðF=®»>BQPP f̘!ÂÃÃűcÇê|Àd2‰mÛ¶‰°°0ñõ×_7¨@{÷îý_ÛD½^/¶nÝ* ¸G¨Õšgç¦bÊ”×EAAÁ.ûƒTXX(BB: pÐIÀx `/&L˜ø»ÆXee¥8~ü¸ˆŽŽW®\ùCß~C+))I :T¼ð ×䢢"ñÎ;ïˆ~ýú‰ãÇ7¸ÎüùóEDDÄe/eYIIIâ±Çžvvš kë@qÿý‰cÇŽÝœ7AO=5NH’Ÿ€æð¢€Qü…½½ó Ý“ .ˆ={öˆäääë:!õÑúõëoH¡‹>úHôìÙS8pà¹#:wî,,Xp]e^­ÐÃÃÃÿk{™““#æÎ+üüZ)FQcѺu˜Ø´iÓŸ2þ­!ÀQ12‡+¼ù¤€6ÂÕÕ[¬YóËïòfNNŽˆŽŽÇÿÃNoCzVSRRÂ’%Kˆˆˆàí·ßÆÝݽ¦„Í××—]»v1mÚ4†J¯^½ÈÍÍE­Vãææö·¢$srrøàƒE:T…,ߨPR’ÇâÅððpçõ×§Ö #™Íf*++±µµ­)¹Cµr- Íšùrþ¼50"o@GEEz½kkëë®akkû_­2HNNæ?ÿù>ú(:Ž´´4œœœprrâ“O>aË–-¼üòË8;;“––†µµ5ë=7 ,]ºŒŸ~ŠCˆA€+UUålØp³ùC–/ÿªN©”,Ëèt:4Mƒûûo&KͶƒaàS´´˜L»)--ÅÉÉ©Áüv‹-hÑ¢Ååút:ß}÷«V­b„ øûû“––†$I4nܘ˜˜¦NJ÷îݹçž{ÈÏϧ°°WW׿ãQ[FEE±páäåµ yë­YxzzÑ­[×k~›[[Û;¥mõ··7vv**+ð`ÔU€'à‚N·òò²ßÅ^x{{ãííý×ËõììlÖ¯_Ozz:sæÌ©Aèùúú²nÝ:6lØ@rr2ëׯgÛ¶m€QÌÌ!''•JÍØ±òøã×('•Jõ·4mºõ…¦'ƒ÷U¼€ÑhÅÅ‹ ýÇ®¯´´”5kÖpéÒ%–.]ÊW_}XÊÙöíÛÇ®]»8{ö,%%%F.\È@ˆ¦W)ƒÙÙYèt:"##?~2¹¹&ETw–Ÿ^C@@K„€.]Ú2yò‹´oßþ_mtÚÙÙáëëÆ•+†«ŽÈh4œœÿ1Ã綉E7oÞI*Cˆ ¨SezGG[\]]Y¸pÛ·'£°„Ž‹Èrññž€+çÏ—søð, yþù‰XYYý+™ÒÊÊŠž={âí½™ÜÜK@uh²{û³tëö°âÁß¡ß#???,Ù§â«”z)ju%7fÇŽ,[¶Žòò^@0–B¿Ìæ823‘™é ˜9uj§NeÙ²Å7…pþ_¡nݺáïï@qñ)„è (õJà={¶ÅßßÿãÝiµZš7÷ãܹb…çTµŒú\<²³ã±„/µŠâÃRŽU]¾–,_æèQ11N€*U,û÷âÃß'<|Àÿôž~õÅÄ­YCƒwÀ ‰çÏ3oæLºwïNóæÍï0Þ PEEË–}ÁW_ýHr²KePŠbd†v‘„——;cÇŽeË–Hâã!DE*8ñ@k,%Y&$é8))¹$'§#„7† ûÈͽÂäÉ“þ§÷t×Î|µ`= ðV´IF~>¿|ú)-š7硇þÇ î[Z¡gdd2oÞB"#ÍÈòPårÍŠÜtÇÚú4v£_¿~„‡‡SVVκu›).ÖQVV€2°OñÜ}Ðj ∟Ÿ/óç—óÑGŸž~œÒÒRÌæ Exþ4G­®B«½@U•£ña,ÀN Y&.î_ý mÛ¶¹åï½^Á`@­VcggwCaH£ÑÈ/Ë—ÓÃ`¨©þWŠŠÊ0Ê”Ýÿh‡$i°µMG§KG–ûy,“““ÊG-áÞ{‡ü×êþÿJ2 5ƒ½ìíío¨¼¬¼¼œ]‘‘øgg DMì×È-*bë–- 6ìç}K+ô´´KìÝ›ˆ,ßÅoS­4@Tªs4mz„ÁƒïbÖ¬8:ZïóæÍe„ñìß¿Ÿ7qþ|ƒ‘FhÒÄ Ÿ6üúk1©©­!\M˜L-ؾ=ò–Wè•••lÙ²•½{÷P\\‚¿¿?#GÞGçÎw0JEETT Å‚@HS|ÊJ § €Ü+WîHÄ ’’6lØŒÉÔ‰º#*ƒ€óxzîfÀ€^Lžü>¨T*ÆŽË AƒØ·o;vìàøñsäåéððÐÒ´©MÉȰgëÖ<,¹ËêÔ‡Yn‰gÈËË»¥ºÁ` ..Ž-[¶pùr:NNNôéÓ›áÇÿ. ¢¢‚ªÊJÓ(]áOPf4’”˜øÕ÷ÞN¤ÓéØ¿ÙÙžµ"•(Q¡0ìíwѾ}&NücÆŒA¥RÑ©S'6lXÇéÓ§Ù²e {÷$;»++#-[ÚãîCK–-[‡Ùܪ֚* eeq9rä–Wè/^dݺuÄÇ' Ë2={öàÞ{ïýÝ¡=UUU–fFÊP•B,qßb,³J/\@§ÓÝQè¿oIÉ\=>TØÚzðüóOòüóëx§†àà`‚ƒƒ>|8‰‰‰F5jDÓ¦MÑjµÄÆ#5UÔû·zþ¸ªªŠ/¿ü’¹s¿æÊ•F€*ÕvîÜËœ9³¸ûîÁ zC>ÞÞH¾¾”\ºÄyE`ú+*©X–YúÙgtíÚŸ;’ñwŒ*£Ñĵ}T¨Tö ΢E ðôô¬ÃS^^^Œ=š{ .ŸŸ§§'M›6ÅÎÎŽÅ‹³uëêzøÒòºÕ)::š×^›NB‚ ³Ù ÈfíÚÝ\º”Æ›o¾Ñàóåèèˆw@Y  A,ˆ«+à&ËÄìÛGdd$ƒ¾Ó|§2›Í”——+ÑGõU|dOÛ¶­™?={ö¬s?éÕ«Ý»w'))‰ììl¬¬¬ ÁÅÅ…øøx¾üòWÌæ«e§¸-ö%55•7Þ˜FD„%B ÿ÷Ÿsôhï¾;«ÁRHûû³[£ÁÇdbbn7Ü„ #1‘•+VðÆ›oþ£:ä–~*ÜÜÜ ´G’Š®bšR4tïÞ­ÁP³——}úô!<<œ–-[bee…$IÜ{ï`Ôê XPðBy•¡V'qï½wÿåá¯êOUUBü9æ?zô(ß|ó#yy=±”â…"Ëý8}Ú•/¾°L|jˆÂ:w¦ÛàÁl³¶&è§¼z#„ ;:šO?þøO_çÿ:yxxÔjÌ#×Î!I¹ÜuW8^^^×}¸èر#ƒ "44ggg´Z­RW…$ÖZ×€$]$,,è/÷ÎM&:N‡,Ëj-Y–™9sññŽ˜Íý±”äõ /¯;K—®h°Xš½8e 'ììØ„ƒ€îÀ !ðKJbé§Ÿ’™™y‡ Z´hF“£Ä7jT=’t™víÚЦM›ëò¦Z­¦U«V„‡‡Ó»wïšVÊÁÁÁ4mê$%awZÖ„œœäš‘ÛɲŒ^¯G§Óýéùí&“‰•+W²eK"fó½ wu¢²²«VŲuëVÌfóuÏ·¶¶fÔ¨QÈ­[³Y1ãïQäæ ¼¬ŒåJ—½’ni…ÄÓOߣãa$é‰$%ao¿‡1c†Ñ©S§›Z÷¹çžeðàfØÙíN'°·ßÅ!­xê©§þRKùСCÌ;—É“'3kÖ,¢¢¢þT ç™3gINJ^¬Úú¶B–›pð`yyù žïììÌœ?¤qX°¦Tc®€0“‰;vPRRrG26@VVVL›6_ßT$é(\D«¦wï&Œ5ê¦ÖíÛ·/Ï<3w÷h,¹Î³¨T»éÑÃÀsÏ=û—•l !¸xñ"_|ñ/¿ü2¯¿þ:«VýLAAÁM¯YXXÈ¡Cçå`~ù©@ŠŠl9pàÀï®ñð#ðÄ+¯à¤Ñ„¥J…%áÖÂl&qï^²²²î0`¤Õj:t(x¡VÇ— $é­[óðÃßð×ÆÆ†yófѼy*Õ^à’t?¿¼ýö+4mÚô/û ………üòË/¼ñÆ›¼öÚ–,YBbbâMœ“É„½½}½Æ«¢F‰þ‘C:Ž5kÖ°qc Fã@Å×TV°|ùf:tåÑGùÿÁÝÝšqúô%„p¯VÁ@.å×Lõº6i‚äïOqB‚‚ó·¬R I¸¶ly‡7o€T*]»v!(¨yyy!pqqi0 t#dmmMxx8Ý»w§²²ìííëuNª ¯êX7Jûöíã›o~¥²òn, >C9ûöíaÉ’¥,^üé¾nwwwZ¶ ÁÊjC‹ZÑÍ2$é2Ý»ß{CÍ´´Z-!:‘~ä~²\â®òììý îÿI…^ÞlÒ¤ÉMŸ_VVFNNB\]]qwwG¥RaeeÕ pHNN&22’ÄÄDlmm¹ë®AtîvCÞשS§HN¾ <Äo >-І¬¬SÄÄÄÔ;uIÑà×»wožyæQ>ùd¹¹ÍgTªLÚ¶­`òäwoxÊØ¨Q£ˆø¿ÿ#*2’Öz=VÀEI¢ I>ž5ë’ø(uŸ›VUU‘^¯ÇÞÞ___4 *•ªÁ°h~~>`ÿþ¨T:t`àÀ7tÿ‹ŠŠØ¿ÿ0FcPÊ•wòóý9rä0#GÞ÷‡»Ó©ÕjæÍ›ÍË/O#%e7&S Pˆ»{*/¼ðÝ»w¿a/hÌã³bÁÚâ"I ^^¼üâ‹5Ó¿îÐï“««ëM²‘e™+W®PTT„••>>>ØÛÛ#Iööö×åƒÁÀÙ·o%%Å4kÖŒAƒ)yýß—+7nB¯À9«&GÌæ¶DDlgáBC½Ê·!Ù©Õjyþù‰œ={Ž;7b2`gÏtbäÈûnØa{{öl¦LœÈK—h"•Àº zÓ©¶¿L>}šcÇŽÕ ;uêD÷îݱ³³£¢¢‚“'O’@VV={ö¤ÿþ·°BpöìY–/_ÁÑ£§0›e};ö† Ö๠¼òÊT"#Óe˘Ñ+61uê8Æÿ»“Ú,Öiuž¦N|I’ê€<„deeµ›ôôtèÝ»íÛ·¿&j`eeÅäÉ“ðõõaÏž=”––Ò¨Q{x`4½{÷ºaKØÑÑ‘ù‹ñýÊ•œˆ‹Ã ÓÑ2(ˆ‡~˜öíÛß÷/??ŸØØXΟ?OUU>>> :´Fy&''Gzz:’$ñ /ÜVݪÊËËY´hû÷ÇRV¦ÃÝÝ‘#†1fÌè ͼ¼|æÌ™Ãòå;()qWøb#=ÅüùsohÎòµHåßø³vTªÚ£ßµkçÎÅбc(ýû÷ÇÆÆæš³ èϲe‹Ø¸q#—.¥âêêGïÞòÐCÞð¾hµZ&Mš„³“‘;w’VT„³§'ÓGbÄ}÷Ým‰F#'OžääÉ“\¹r{{{ºvíJçα²²¢¤¤„cÇŽ‘@~~>C‡%,,ì¶éÂXYYɶmÛX½z iiyØÛk騱S¦¼F£F4~úiï¼3Ÿ¬,GÀf]»FðÑG³¯AÖ×GÙXŸS!DÝÔŽÁ`àÔ©S<£¤§š0p`x½v“&MøôÓY¹ò{ΟO@¥RÑ¥Ë8F~€Æ߂܃ IDATðÞôíÛ—–,á—µkIOIÁÆÁÑ]º0aüøœ75Ÿþ9:޶mÛRRR¬Y³xì±Çxê©§ÈÈÈàóÏ?'//ÔÔTôz=}úô¹mzVV6Ó¦½MddFc@MllqqoáêêJ¯^½ê=O¯×³dÉvï¾¢Ì_WGÉÎNåÃç’žžÎôéÓº­ZµÂÙÙŽìì$,­1ª)kk=aaa5ÿIOO祗&“Lq±=ÖÖš5[ÁûïÏä¾ûî»fm;;;üqFŒ^¯ÇÑÑñºÆ¥K—HLLÄÆÆ†.]ºÔ(>žE‹>%;; T¬“)ŠØØ&LxžÙ³gqß} {Ã}úôfÙ²MP'!hF¥J¥K—ö5†¤,ˬ_¿ž÷Þ›ËÅ‹`0hpu­¤gÏ_øúë¯êMi¶hÑ‚wÞy›ââb$IÂÍÍ­^}Vm°åççãïïO»víê¤î¾çºvëFaa!ÖÖÖxzzÖkàþíTXX(ŒF£0›ÍÂd2‰åË—‹nݺ‰ÜÜ\!˲0 ¢¼¼\Œ7NL›6Mèõzq=êÝ»·¸•héÒ¥B’Ú˜*`–òš)$i°5ê~QQQQïyçÎ]ºtð’€—´"`´€ÑB­n/úô ‰‰‰ ~ÿڵ넷w¤»Œ’4T¸¹µ~ø¡Ðëõ"..N¼ôÒdáíÝLH’§€~^0]HÒháæ ²²²ê][§Ó‰ÂÂBQ^^.dY¾æxAA˜>}ºð³µð×hDhË–bóæÍ¢ªªê¿7áááÂ`04ø™²²2¡Óé„Ùlf³Yèt:Ѿ}{±lÙ2!„F£Q ±iÓ&Ѻuk‘——wݵæÏŸ/"""nÞÜ»w¯hÖ,DÀ«WñæXáç×J\¾|ùºç>ôÐX¡R 0C@ ðP©z _ß`±yó–¿?..Nôï.4šnžðˆ°±i+ÆŽ}Ldgg‹ììl1{ö{¢uë0¡Ñ¸ è `¼€w¼$\\ZŠåË— ³Ù|ÍÚƒA”””ˆââba2™®9n4Å÷+WŠ¶Íš‰Æh¬Ñˆfâýwßååÿø½Y¿~½X°`AƒŸ1™L5¿Ïl6 £Ñ(fÏž-úõë'„Âl6 ƒÁ 222Ĉ#IJeËêÝ !„¨ªªááá· o‹>}î’4\á±jþ|[xx´Ë—¯¸î¹‹/ŽŽ¡Êycø*ríaC„£c31kֻו½Õ{;zôƒÂÁ¡²ÆB«í!Z·î$Nœ8!Š‹‹ÅêÕ«ÅàÁÄVë. ©"›ßð†P©Âijώ¯w¿eY%%%¢¨¨¨^]f6›Å‰ãÇÅ€Þ½…ŸF#4ÑÈÚZ<ùØcâbJJ½²ö閭ô¬¦v~EV«EQ“ÐjµÈ²|[ì8yò *•f³C¢ÍÉɱ„ÊêËÍ›L&dY(áòóÊß{k¬E³9˜¸¸-¬Zõ3o½5íºžÔ}÷@’$6oÞLVV&Üu×4î¿gΜaüøW8y² !B± B¸ì† DeegÙ¾};ãÆ«¹f³™cÇŽ±iÓ&²²²prr¢oß¾ :´æ: ?üðk?ûŒ!:~Êê'“’øàí·ñöö¦sçηüý»ÚûS«ÕhµÚ°Mµe};,IMM¥¸Ø ­6oz•UI^^ÞuÀz}PO®Â3C± †Y"'çsæÌçî»_7šÆ¢E X¹ò{.\HB­ÖбãL˜0€ÿüç?,_~IjŽM±”>Eá€/ÅÅMˆ‰‰aÔ¨Q899!„@¥R‘’’† HJJBAX§N >??¿šï>sæ ï½þ:­òòh- µ €¯çÌ!¨eK|è¡[þþ©Õêk¼T++«ÞT©T¨T*4Ím'; ƒlìwUè[KQ‘ÉÉÉ ž+Ë*Å»> „]kReeÞüôÓ´Ô¸_oo?ûìV¬XA\\:]AA]xä‘GæóÏ—2wîr a™éQ Ä`©‰ï€,wbÏž\¹r___dYF¥RQ\\̶­[ÙÀR¢æïïϘ1chÓ¦ÍoñÓŒ fΘéÐ!1›q L&¬]˧®®¼ûÞ{ÿx7¸CîWç,7lØ@=jZ©ÞÎäà`‡,WaÁo×fLZ­öºŠØßß__$)! €fÔíf…NÌ÷߯D­V1iÒ¤zLZ­–ûïÅ]w ¤¸¸\]]Q©T,[ö5§Nb –ºH€Àz E’ìHHH`îܹœù'EþºnÎW®Ð¾–j!E+¾ûŽ1>xÛ)Á””víÚÅСCo{Þ´€Þ¬))1ÔsL‡Juý{Ó¶mœË©¨ÈT܈¦ÔÅy“šjbæÌYL™òC† ©÷^ûúú2uêT 1 ¸¹¹aooOZZŸ|²œÂÂv@KE®ËX*~öcŠäHU•íÛ·wŒ+Wòðó󥬴„Ø-[ÌËÃ8©Rsð Î[“=qü8—®™uò„u¬ªâÐöí\~î¹:á÷[V¡—––òî»ïb2™n\d6›ÉÈÈømq77· (Я_?-ú^aª@…±*€ƒTT¸péÒ%ŒF#ÖÖÖ¸ººÖ\§««+“'OâܹÉ\º”‡õ@©©:æÌù‘#GŽñå—Kk¼ªª*²²²8þ<²,Ó¤I“šÖžÕ´cÇ~d¹c-eÄqsÅ ÄlÎfÕª5äçk1¼‘¤*Ôêxššô„?–a²¹,ÿâ :vêD¯^½(++£8'‡à«%+ÀÅh$3+ £Ñø·)t£ÑHQQQÚvý¨×4lÞ¼™ùóç3sæÌ›íÔáO''§›®ÿ³ÔªU+ÜÝyyÇŒEuwýsq…‹/âàà€Z­ÆÅÅ¥¢xôèس'š½{c0¸a)êª}§eŒF™¥K£‰Œ<ÀçŸ/¤ÿ~5Q¸œœ’’’(..ÆÏÏ-Zàââ‚$IŠwv†âbŸZùK°´viŠ¥ÙM’”Ξ=)DF¦¼<P¡ÑDál* “x+"¶EI Ûü‘õýúñ¤Ò´éÂùóx\åMH€—œÊΦ¢¢âwA§%•––RZZZ‡Oþeee1cÆ yòÉ'oꪪªê𦕕®®®¿;›á¿AVVV´kט¬¬³Xf 8*Þo&²liWœ––†J¥ÂÑÑ''§¼Fÿþý3æ^¾ùf5Úzå¦É$³gÏeNŸ~™Y³Ryî¹ç°²²BAii)©©©¤¥¥áèèHPP5ªY?>>ž¬,ƒ"Ï«4•¢Ü(Q+W®äðê«ïPQá‰Ùì„Z‡5it0›ñÀ2§³,³g÷n¾üâ æ/X€³³3ù¨ ¹ÚÕsʳ²jÊœÿ.ªªª¢¨¨¨ˆº¡> °Ìtž?>iiiÌ;—ààà›úòÊÊÊ€‹‹Ë —Òü7¨¬¬KëÃý@²"4³-.dðÌ3/b6[ãïïÊ}÷ÝÃ#ùd!_}õ_½šŠŠ´Z® ËØKwL¦!$$âƒ>¢ÿ~!8z4Ž·ÞšÁÞ½IȲ566y¤?¯¿>•–H’„F£¾oš*UvvÉ”—ë1™€< Gc ¾²•+V‚­f3»¶m«Qè­Ú¶eï¿bä78ž dKþp¹ÜŸ¥øøxâââjÞŸ>}ú†›—\¾|™™3g¢ÕjyçwnZÖåååÕ‘ÞÞÞ 8ð«¹W©´HR:BlSäO%‹,7eýú¢£j:u âÉ'£_¿~hµZ¬¬¬˜3çÜÝÝøá‡U$'']Õ“ (GˆAäçëùòË•tëÖÎ;sùòeæÏ_È?î ¤DJe¤sg?>ø`wÝ5°ÆØ°ð¡¹Þ4‰88a0˜()1+×]€•¹F˜©*‰®Þ@!H:{–ÌÌLœñòôDöð@Ÿ›KíY)àð·;………DEEQ\\\GÏ^W¡²`ÁΜ9Ãüùóëäþ(9::òÒK/Ý2áK3/,=¥K•PGÀƒÒÒu”–º¹p¡”cǾ¦¨¨ˆ·ß~»Æs´º´ë‹/>ç7@£Ù¯xæþÀ0,s  v~þ—_Ö‘•etPBUöÑŒÊʬX±¢&Ôü 4È[Û­HÒTªý88lgüø‘ìÝ»‹^½z`0ØÃ?@O?å1Pc™£ª˜g¹I“¯B«ÕòÄOðüôéôóã'~quÅÔ­.ZDÛ¶mo‹û·ÿ~^{í5hÚ´)±±±DFFráÂÒÒÒXµj{÷´”_ý•Í›7SvUËÐ[‘‚ƒƒi×®=’tYp½€v@‰"øº+¼„ÙΖ-§Ù¾}{úp[[[Þ|óu–-{—&M²1å ÁR2d f˲àsˆÃ‡/!Ë]m øPUÕž_~Ù]A>|8=6 ‡Í¨Tû£ØÙm¦gOÆŽàÕWß'3³T1XÛ£¢Š6˜ R|8ë×ÿD—.*,ø‹|, Ê°Z±‹ñf0øê«5ètmî±\¢+ Ålß¾Þyç5ΣÑDǰ²ÚŽ—×iÖ­û™•+¿ÁÞÞ³9LñÁÕø`¢“"+Õµ\¼K@¼$Ñ$$¤¦nÝ××—¹}„ß½÷áæÆ..ìôòbÐøñ¼6eÊ--ÓH’DXXÇçøñã5Š,44­VËálj‹‹«iV±uëVdY®SG}«RÓ¦MyçW˜3g ˜ÍN¨T9‘ŽcµXãGRRb`Û¶m ://¯švšjµšƒc1™\Ÿ£u-¯º;»d:tx'''._ÎDçk2„BxRR’Eii)666³|ù׬^½†£GbkkÃÀOqÿý÷cggGvvåå>Ê÷”F®†ÝY)lŸäèÈkO>I÷ZÓŽxåÕWy`ôhΟ?­­-aaa7ÝÿþŸ ŠŠ :uê„N§ãǬáÍaÆDFF6l W¯^DEEáëëKçÎoùÏÖÖ–>xôôg8yrz½’TŠ$%#ËaŠÂ­ñç)-µ%&&†ž={R“S¬F–ge™q5 SõHRýûwÁÆÆ†‚‚ÊÊ´\;ŽØžüü t:] ï|ôÑd–ìµ=NHˆšiÓfàçç‹››Ì̪:§$•Ò¸±SܵF£á‰'ž¨ ÷¥§«xáxè! ´B­˜ÍF@… O®pž*¨&JS©8.¬7ìâârÛÞ?WWW-ZtÝãžžžÌ™3ç¶åMÞ~ûmºuëÆ©S§$‰ƒebb²\-g À à,ÙÙ:ž}öEºwïȸqO“šz‘²²2–/_IUU+,É£Šsâ”`g—ʳÏN¡]»vȲL` 'ii…Q»Ë›[Ûš5kR‡7{ôèA=0™LuÒ‡ÖÖÖÊûê±±žä¢¥S &€\IÂÑË‹…\/ŽF«Õþ¥Ãþ6…Îÿ8ÙØØÐ«W/ºté‚Ñh¤²²’ãÇOsìØ „Ã’»Ü¡(èÞ$'K\¼xž˜˜—ÑhTèõ6èõTT8(¡ïÁJ 1 KN>›W_]L`` ÷ß?Šo¿ý™ÌÌÈr%ŸŠÍž{ni½ˆÿ«ë¨…tïÞ oï•\¾œ©„½Ú³— 4˜ TØõ JEЀŒŸ0áoEß¡¿ŽZ·nMË–-ÑëõF¬¬¬X°`f³¿"zö)w{yyÖäåsæÌû¸¹9Q^®Ád2RR¢Ã’ l¦ËdåœbFŽ|Ž>}úÔ@aa-ÈÍÆdê­D¨ŠÐj3f̈zÛeªT–v›ß0b¨TîôìÙ‚’ÂA NtÅpK 7æÝ)Snd{‡þYòòòâ‘G©éOŘ1/RU•­®O(ÎKwŒF/bcu?¾ƒ·PY)a4j))¹„,ÇR½ã‚zÐѬ™ãÆÃÚÚ³ÙÌøñc™5ë[ GEæéQ©ŽÐ²¥C† ¹n4¡6¹»»Fll£7ˆ@ ña'—èƒÀ H“$Ž[[3áÕWéÑ£ÇmÙcå_«ÐkÂÓVVXYYaooÏ矄 /‘”´‘ÊÊ…9û+Êׄ,«ÉÎ6cÉEz(Ê; bÒKnF©hµÛë”QµiÓ†+>ç£>"%ef³ÀÝ݆±c§Ð·oßk,Ê«Éh4Íæ±·’‘X… °%Orb“½7''œÝÜèÞ£S_½ÁÞÊwèÖ'µZ]ãOœ8œœl6nÜBQX**îç7pš‘âbÅŰä1ËMŠ'ÑÐagA@@`éááÁW_}Á+¯¼ÊÉ“‘èt*ÞóÏ>sÝʇ¸8øõWøôS™ÒÒ ¬Y½³¾ít†Ë€z8`UI’» Žø5n̲3èׯß|“$I5iºaÆòúëGX±âÿÈζÃl¾Ü£D„@ˆ"ªªŒ¤¤x+òTD`jaÉ7ÆRA±›öí›×Tý¨Õj^xáyT*¿ü²–‚‚8¬­>|øáØÛÛÿîàªÜÜ\6nØÀå‹)hS0H?@rs̲#ñ+2ìqutÄ«Q#¦Œû§A¶wú-B;wæûï¿eÏž½|òɧ¤¦Ö®i¬T° ¿•©`ÉíìÃqÆ‚ã=‚FSyGNëÖ­‰'99™3gÎpâÄ Îœ9C›6m3f žžžckk[gÜæ–-[˜>y2.ø Á%ÀcxFI…ÎÖ;ggºtëÆ[ÿùOƒÈÚK—.±}Û6ŠŠŠpuuåž{î¡IÓ¦w¤Ô-LMš4aîܹôí»uëÖ²m[.Ô) 9­D“BžµÃ’—<Qá«ððI$)÷š& ÞÞÞ|óÍל:uŠÌÌLbcc)))áý÷ßÇ××—|öíÛSRR€ÙìÊ¢EjFŒ‡3¼üÒTò÷ìÁ]\eç à<E;œ\] `êÔ©5‘ú¨  €={öp19kº÷èAÇŽo‰Á+wèúÊ}Ú´7éÖ­Û¶måÛo3¨ªò«õ‰j@q—Zª¥#°]‘¥Õ5‰@ju‹:ë;;;3eÊk 6”¤¤$âããIKKã³Ï>ÃÙÙ™0dÈ :WW×:Ý1ßž6ƒ«W£ñ¨Â0H`u¶?)Û‚BR[£vtÄÙÓ“ÇŸx‚'Ÿ|òºÍ›ŒF#$îÈdY¦eHƒï¾û¶Àý+ºJ¥¢]»v´mÛ–˜˜C¤¦^©uÔ¤¼ù œa P<¡µX2…:  ®Š”””kæûøø`ccÃgŸ-!*êååMƒÃ6mÚŠF£¢¸¸­VËÈ‘#yá…0,œ;—ÀôtBX,°£pÅ„0Ê2çòòˆÍËcwz:v¶¶Ìœ5«Þè±±±Ì˜1ƒ¬Ã‡±Ó騴µeí/¿°`Ñ":vìxG:ÝÂäããøqO¡V«Ù±c>²\»æ¶Hñˆª P­"4‹€Í ¯r*+ dee_²··§S§NìÝÍÏ?o%;»1àˆZ½—;wáïï¯T{HhþŸ½3«ªÞþÿkŸ3È (*Š) ŠbΚsjiju-µÔÔn73m°l²IK®™7˲¼•š9Ï38 8""*¨Ìó<Îüùý±7jÓýu¿)—õ<<aÃY{­Ïz¯÷z/Í“˜ÍO²`‰U«ÖRÍ«•½]JS¦B'[“ŽJ‚?¡øeû:‡Ð`,–3µ}ñ¼¼<Šѵkù1ত¼Z‰>äæÂºu0;W‘×îÉ)*,·úfÍ‘ÃMR/\ °  ^B¯®®æø‰4ÍËç>ë„êõœŒ¥¨¨è¶äÑÆ„~‡˜ÅbEVèj"‚.@H•/¯ì›³’b+€±Üè«ß0{{{²²²øä“OÙ»÷z½@§“HOOW*¦›­f³Æ\ÉÏw@§sÀÑÃK¹¹µ"ÙJØ®1=2ýÉ_ù÷v;¯ ¶ÊÊ[¦Õ€TYù«ÒvçTèBl6%8–(i4Ð#I1‘HHR¥RÉÝò:5þ±lÙ2Ö¬ù‰ââjÔjÐë‹õ®[ž¡„2_ùž`àC||ú÷æpt4 ^Uõä[QüÕ¹èz³VVVb2q½o:óÇuÔí¯1ùh§Ä7³âŸ@’tÈD;Tªjl6wŇëzŠ@§s@Q«™””‰`ggUd‘¥Ûø¦ªN씀@ΦÇ:0‘,h•z8ŽÜ­Ûõ.Tžé$ß`òW½\`¡¬¬ ê¯ò’ß,¬¨¨·âN4ÕÝèLf³™£G2eÊt:wîÀÃùâ‹üá×2d0M† Uv…­ ¡7ô¬¦íoVïyCG~ S§Åikú™fà2Í›»Ä»ï¾ÏÒ¥»¹p¡7×® çâÅÞTVú «Z—*®$”ƒÁEä)òuJÀÌF¥2ÐŒw>ø€‹þþ×hh‚Ü HVξÈë¬JýTäíMDDÄ-[ã¼¼¼p ¢ø¦ßµÐ4oŽ#+þ¿ZY§§§óꫯѭ[?""ú0oÞ«¤¤¤(Aê÷[Ë–- Ñ!IYÌ#A’4ôíÎÎ_qìØ:ž~zMµ’ðkªób|} ïÌO?ýļysòdk®^Æ•+ÉÈh¥Tõyu¤ YšÓ¬Àšk\+iÚÔ—I“'ã9hû»ˆLÅ+U¾.*¸S pY¥bÈðá·ø¦~\§¾w²–{x#¿ã¿jEEE|ýõ7 4’ðð^Lš4•C‡¢0›Íèu|}}éÐ!X9µº#+È9ãä¤eÆåœ>½‘+ÞG§3×Áå¨Ñ\fôè¡ÄÆÆòüó¯°s§•ääá\½:œÄÄ0„0g_Dñ–kŠ¿žGæ2Å‚g ùÒÔ{£|'rLåB©$Q®xnž;¯!'ù C’hÙ£G½•¾ k´mÛ–l­¶vŠqJW©hÞ²å½:õ®­Ð£¢¢™>}ii.!o!;vì#Î;ÏçŸ/ýC:å=4†õë7°wïL¦Ö`Ô Š/!Ü;ŒÐÁÁ|“ó Ç3yÖßøìÝïHK+¢F߸E‹ ,x‰²²2~þù KŸ:¼=B A’V!I»‘YÉ`³]Q’y¨IÛnNhhGzô¸Çï¾cã¦MÄÅÅ‘Ãa¥‚©©ÑB€(•ŠÞÒ·oß[F/Ú´iÃȉÙøñǘªªp‚ I"ÎÁ‡ÇŽý·•5Úo[rr2³gÏeÏžLl¶ @âüùÝœ>}Ž¥K?¢}ûö¿ûµ:uêÄ”)²páJŠ‹ ‘$g„(¡E‹,f̘Ï!CP«Õ888põê|<„ÕÚ 0áä”ÊäÉrï½Ýyüñ‰Ý‘¹ ·’îE’ò‘¤$9b³å 3ÿ¡TèûTªbÆ[J§NXúùç|»j'OBœ:ÅÙ²2.Q³CIæ€ÞLJO?}Ëï¤Õjynî\^¼t U~>~Ê1"Q­¦U¯^ býè\-Xð._}µƒ!ðåüù+ìßÿ4ß|óÉ’ÝU«Õ¼þúË<óÌ<®^=Œ$ù#„gçkLš4šÑ£G#I¡¡¡>|ŒÍ›QYh°³Ë¤wo?¦N}’õë×sáÈýõšÃ_ ;’t°!I¾QŠç •œè].AÿBútdA¿¸ßçΚΑ;v ÇǹšM±’ T©HvwçݱcoIèvvv 6Œ}»v{ä­­VT@¶JEYÛ¶Œ7®1¡ÿ7 žE‹>"5ÕYïZ^»g±²zõ6ž|rÒÚ åääÄ?ÿù1ë×¯çØ±S F""3nÜXZßÓšƒ©Y¿šjm5c_ŒHd¦åмù½ 2˜^½zqâÄ ­Ô_7 àˆ£c3úöm‰N§%##“³g ±ÙîS¼¤¸›þþ6š¡V«é?`z½ž ññ8*`•N9m×€NtëÖí¶ \...Ìœ9~Z¹’ÒìlÜxbòdžxòÉÿh5n£ý¶™L&6oÞLTT6Û`¨«5˜£G°iÓ&Zµjõ«»Îëy£#Ó¦M# € 6S\\A³fþµš5lð°°0>ùd [·n%!á":Ž>}eÔ¨Q”””PZZ‚¬Ÿ]¯A’<éÑËÀ@7 Š9qâUU£G”*¨+àŠ{èÖ­kíañÉ)SHHHÀf³Š<(W¤ø§E©Ö»õìù‹½Æ¡C‡Rºx1k¾ý–è3gpòð Ç°aLŸ9óŽ˜w³%$$ðõ×0+G/ 0“›{Š>ø˜¾}ûþ¡ØÐ¯_?V¬X¦M›¹xñ*^^î 0‹±cÇÖööö|øáBúöÝNlìI #ááý9r$þþþ¤¤¤"IÞqó¸bmÛúÓ¹se\»vM‰ùCe|Ò© ú§£R[é#úÒ¢I Ôj5›0üü|¢¢¢ðSpƒJd"qµRç{Ò-2ò¶Óí;tàÝ… Y¾l'öîÅf±Ð&2’÷gϦoß¾wüg|×%ôœœ¯"vjœ@B_,>ü‡Wb¶lْٳgóÔSU!ppp@§Ó!I´{€>-ú°.aßœû†.÷vaÎŒçhïÛgGg$IR[z ¯ ñxzj˜9s}úôaåÊ•œ>½¹g/Õù:pñâV¢££ñ÷÷çĉ¼5ožW®Ð yº³‡ò,2eÉäëËСCñwòóóãÙgŸåñÇÇl6£ÕjëÍm6ÚŸoÄÇÇS]ÝŠ›‰&SKââ⩨¨øÝ äÙÜñãÇ3lØ0, Z­—z¨ŒJ¥¢}ûöc0$ GGGÔj5ƒµZƒÜ°q«ç›B”3jÔcÌœ9ƒãÇ3uj UUÓ2E9:#Ä)V­ZÅÛo¿ÕjåïÓ§Szô(¡f3)J3 ¹’Ìó€GG=úÙÀvvvümÂî1½^F­ÆÅU–žmhBw’ÅÄÄ`4º#D@ø£EˆP®^ÝNZZÚÒ,·³³£ÿþDFFb0Ðh4899Ý‚úúúòÄOðè£b³ÙÐétØÙÙ¡×ëÑj5Q¦xO])"44”… ßÇ`0ðôÓ³IOwÇfsç èw\,ضÜ˱’c$M&00eK—²îÓO‰¬¨¨ìÛ!OcTGÕjÂ""~Q½P­VÙ½;÷´oOEEBqww¿-_©1¡ÿÿ^°F£pnÞ‡+ëûм¼–J? „6²Ò¡ž#GÓ²e99Vl¶ ï5ȩ㛩è(¢kU»6lÀÅÇOƒ¡¶Û9@ñË4à’$ñÕ'Ÿ0tèP¼¼¼â³¾}ûâàðz}BÔ „f$é¡¡!ê(«^¯'&&†óç/ „^½zQ{à´X,,^ü1‰‰Väþy2¥Rä#D)))¤¦¦’ŸŸ——+’]¢g ¸—ÂÁPªEG]„ØAEJ nB AÓõTÍ  N˜À‹/½Dˬ–©Ù¼y3Û·o'%%NÇ Aƒ˜0aM›6­eì.[¶Œ³gÏâççÇSO=u["Öÿ•ÉdŒWHJšÎÕ«»±XQ«+ppHaöìiÚ «‚ýû0{ö‹de Ìf;œ«èÝ»=¯¿1Ÿ®ùÝØ¹›ÚTvs‡ØP¨ q ™Lä „‘™YͳϾ„ƒÌU•˜«J؆ à‚Š\¹HO’€Ýññô¼ï> ÊØ’¤ÔTM½$JïÞ½±ÙlØl¶»úOíÚµküøãœ8q½^O‹-xî¹ç C¥R¡×ëÙ¸q#ëׯÇd21bÄ{ì1<<<þ’ëÕjµŒ?ž˜˜lß¾ƒ¡×2$”‡ÿ§H› !HJJbÞ¼W9zô••ÎØÛWóÕW«xç7Ðjµœ?Olì NÊGˆ!È,Œlï©@¦VÂâÅ_ðí·?PQñ$ÅùQñ6š-(Àžóô¢Œ–Àõë×Q99¡×hf3’rtí¤¼zž“<ðZ­«ÕÚ ߪ««Ù¸q#{÷î%==wwwFŒÁøñãqssCArr2‹-"---Z0wî\Ú·oÿ—ÅÎ6m‚™7ïi–,YIee:V«+Zm&ÍšxóÍE¨ôkf0xíµ×Y·n'ee€„·÷×<óÌTúõëË‘#GHOÏà矷£•´Ûy†çŠRì´bÏžx.\ÕTM…¡Ñ£´°£;f¡&—î€ENŸ:…ÆÙ“"[l‡LŸóŠ\]éß¿?µ-È™ÐÏ;GçΙ1c¥¥¥|úé§$%%±xñbJKK™3g>>>,Z´ˆ˜˜f̘Á¦M›þÒý°ìØñ3«Wÿ›¸¸sxz¶â¡‡æ2hР?-ˆddd0}ú,ÒÓÛ!DG@Muu%›6ídçΘL¾H’ ¶&ÞÐ?Æþñ÷•d¨ê Tì:,YY‰Ø³›§©Ä ìÂH{ðCФ÷.KM<==n>Œgi)5;·ò€‹vv”ÅÅñä„ 4ñña̸q 0 Á‰’““1™LÌ;öïßÏäÉ“ùꫯèÞ½;k×®åË/¿ä…^ÀÃÃŋ“——Ç+¯¼ò—ÿš5óçÛo¿æ»ïVsðàA„Üwß³Lœ8ñO«ÎKJJX¸ð¶lICˆ1€ƒ ..†‡$5Åfk‚$ٰي€ ÈÒ<äy‰)Ô8‹‹‹(+ÎBGWFó)äp޼‰Å‰ŽZ*G•“?ò_Ÿ”D°4‹€ó’„cÓ¦<:z4NnnôìÓ‡G}??¿é›ƒ+W®Ð¯_?:wîLjj*}ô,X°€ääd¦NÊàÁƒ™9s&{öìáÉ'ŸdíÚµ´jÕê/‚Ü5¼øâ\ºu‹àçŸ7’ŸŸK§N#˜4i"ÁÁÁÚû¬^½šO>ÙŒP"› ªê*/½ô’ô!à‹j„Ð ‹Îô§f?ºœàÛUUÕ$'ï£}ízÚ¸Þ w˜q)8D%YG(5}µ$Ñ3<???.¬[‡½ÙŒrãè¼$‘¯RñÝ7ßðãªU„EFòðÃÓ!4ô?j3ÜÑ ý•W^©=™ !(..fÉ’%TVVGNN‹-¢M›6tìØ‘ãÇóÝwßñ[{Ôÿ›&I­Zµâ­·ÞüÍ <ÿ©8p€âb5B„rCsHž£4;}dff¡¶‡v§ ÃqhQgÛ@¦Vió«€v˜9K*•„}€íj‰jFÒ.£Ægøðá\5‹Ÿÿõ/.`r4,f3n. ¹plIâõ}ûxjþ|¦OŸþ§®ï$»ï¾û2dH- Æúõë‰%22’ÿûߌ;–‡zI’(++ãÓO?åÉ'ŸüË‚&Èìô§ŸžÉÌ™3jýõÏ´¬¬,ŽW ÊÄPyS`0ðTd_k£¦J…Þ±N+ )VFÓ”Sp/df й™ I4 gÔàѤ Ÿ¾û.ÉIIè„ O’(U©hsý:ºëשVlÙÂ¥ÄDÞ_´¨AöÉÝÝÝ™?~m/6<<œëׯ³aÃÞzë-8Àܹsqrr¢cÇŽÍ ¹V'jÁÐ âS M@—r —+àDw08$tµ4£ T¹G’HduîJŽ>ýûãååÅœ9s2dgΜ!//~ø¾éé„(ý!«\ÊÏçë?fäÈ‘iûoÙÍð´Ñh¤²²GGG ÉÏϯ…ßAÞT¦×ë)))¹#®ÿ¿å›ƒ‘âb#BÔ%öØ…bz 7iPŽŠÁÈëqC ¾îuÎ8²5•4ZHg€|!ðDžáÍÕj™JÓ¦Myä‘G %..ŽÜÜ\vîØ1&†~Bà¤ÔZí„`ǦMìèÝ›I“'78ß”$©±ÊjµRZZŠ££#F£¼°©C‡µqpp¨ÝÀØc§Åb¡¸¸!ê¶>-ȃcÍ•èWó¾^Èr°‡•ôìZ?ÞJ:gb×ÞJ×½Ð<t¾‘$*„ ™zœ.­Ú´¡mÛ¶ØÛÛ³tùrNœ8Azz:§NB¿m÷ëõ¸)ïÜÆj%êôiV~õŸ/_Þ &+êyÕÉ“'YµjS¦LÁÕÕ•¢¢"ÜÝÝëõ|||¨ü 넃C òTm™•?ÙÍý ØtPRU°¹xåÁã?@ûËàD>5úlVÀ¬R!)7µy^2Â`àù™3IJJÂÍÍ^½z1kÖ,zö쉛$5uBuKÀ–Fbb" ÝJKKyùå—iÛ¶-£G¦¨¨I’êÍá;88`ooOiiiƒþ[xxxЮ’TÀ ƲEñOçÛÜâÎÈÒ/¹JrWä+là„ZúΠEÖi7&I’ŽJÍ4ÐdbÃW_±níZT*ááá<ñÄ<óÌ3òó ¶Ùjõ$%47+*âDll­–|C5›ÍÆöíÛÙ³gÏ?ÿŒÉdCæO#³3}ö¨TçñõUSQ‘LQÜxì²»âj·€ ülS¡·Ùð¼ç\RSiª×׃HÔ€ÉÄåË—ë]S‡pöóãJZ•Ÿ K’pjÙ’6"¡å¿aZ­??¿zÁé÷ú…Åbá³Ï>#::šùóç+§Y¬B’$²³³k[QQÕjýE’ O=ÿ¬IJw“edd°|ùrÎ;‡‡•êÅÅ<<œèß;vÁhÔ"ËiT#ëa[ûíV<=ËQ«SÉÊJ@ÊÖÒ¤¥ ²w9Qm@s Tj\œJI©ç›5K0/]¾Œ©N…iggǽrìâEZ"³Ýk޹Mš0¥k×;>©»»»×ó‹´´´ßýÜØØX^{í5†ÊSO=…³³3‹ooo’’’°Ùlµ¿ff&>>>·eX;88Ô»''§»Ž‰]\\̆ 8|ø(Z­‰¦M“(.¾ˆV«¡gÏPRR®síÚAd*[ÍÞ«@?Àgçxš65™yS¥„æè8lÅÿàŒ˜ÆE)‡ µš nÝÈ;~œ›õ1=©ªŠ´´´Ú„.I={õâÀš5”—•ÕJ~€ë@ŸßÐJ¸L§ÓP/ÿZ§9wîóæÍ#00W^y'''ôz=„††òõ×_söìYúôéCvv6û÷ïçÙgŸ½mßÁÎÎŽ®]»ÞÕÐÙ²eŸ³`Á§TU`µ:!Iî4kfä‡>'88ïE†A IDAT˜9s^ÄlND^ज6;),–jÒÒ$tøco{„ ¼”9d0bÒ$îíу€À@"""?r$e±±ˆ:P (U« ½iyJ@@o¼ù&ÏϘAvv6~ …*EÍ›3gþ|š·hqGÿ]n™Šø=•Gee%Ÿ}ö[¶laáÂ…tïÞêêj4 ŽŽŽôíÛ—]»vÑ«W/´Z-‡"((è««ààà»Ö?m6QQQ<ûì \½ªÂlöF¥òÁÉ)ƒwÞùS§NåÓO—b2í¢‘WQ¸(ÕúƒÈm¢jrsMh)¦½­š&åzÈŽ >qÖ„k½®ñhûÇ(ˆÎçäÒ¯±™,µI]’„W@š:‰ÆÎÎŽiÓ§såòev>Lkƒj ÕÍÁ<ÂØqãîø¿m³fÍhVçžËÌÌäÚµk¿ú«ÕJtt4¯½ö÷ÝwÏ<ó Z­½^££#Ý»wgëÖ­\¹r…æÍ›“ššJBBï½÷Þmc§‹‹Ë];³³³™6m&&a6Í‘¤dFŒèβeÿäèÑ£¼ðÂ@<ògäe»52´ÉTVZÑë ñ·•,Yyÿ&CÕ]»½Lz†Aƒ:QUUÅĨ4›ëmR«¬:ÞÞõ7Ž7ŽãÇŽ±síZZ”•á ×u:üz÷æÏ=wÇ÷Ï ½%ÏþbBï½÷8wî~~~,Y²¤ö¼úê«tìØ‘Ç{ŒeË–±gÏ233iß¾==ô Ñ®^½Ê;ï|Jyyoe¹„&23±t鿘4éoDG§"D7%h½;9ÕÈJqÎØl£Ðs¾œa¼ØMRµ`ÿæÍ¼ñÖ[µâ ›2…O.^Ä£²’@¥†º&I亻ӱS'ŠŠŠhÒ¤ ’$!IÆ ÃþÛoÙ²y3¹yy„zzòàƒÒ¯_¿;S¹gÏ–.]JHHûöícß¾}€,1räHžyæÞxã ^~ùeÉÌÌdÖ¬Y·ÜÔ ÁòòòX¶ì_\ºäª0…%¬V(/¿Ìš5[iÝ:˜~Ø€=¹ÁŒLD’E;r±Ù†c$ÑtÃF˜ÁÄÁSטöðS4íåËʸ•¤º¦’ÓÅÄÓ•´²´È”¦D{{FtéBIII=)Ì:°ôóÏY·v-q³³ãÁîÝ™8qâo*ˆÝ­&.$==’’Þ{ï=eS«Y¸p!ýúõcìØ±Ì›7Ö­[sýúuFŒñ§ _ÝIöÍ7«Ø½û*BÜÏvä=lÛ¶¡C·s‚œœVÈ­!#ÐE)‚´È-ÌSѫ՛\vò eDŠ2X”ÙšÌÌI‚FSF§9»w/Ýl6\‘…Šc¿-puu¥ºº‡Ú wчòCX±'N`4™x¸}{~ä‘?uTïN1Í´iÓw›S´:ŽÉ“'FVV®®®„‡‡7È)€èèhôzg„¨;:a‡í‰ÝJÛ¶-©®öPê•& x³W9iVPÓG—)nm°°6|XÊÊXµjÓ¦MÃÏϱcÇ’–’Âú/¿ädq1Väq![u5Ë–-cÆ Lž4‰‡ÆŽ­½¾лwoªªªpttüSDJîdëØ±#Ÿ}ö‹åÄ ]»v|ðÁ$&&bµZiÓ¦ !!! Rl'==ƒsçj“u«Šæ$%]dÛ¶mèõ¹õs ¹›vP#åuªòÈZàF>ñS„/àXZÊö­;x=ìu–[ʦ˛ø\µŒ½UøÄ 4Åò³Ë…`×Μ‹cÔ¨QLœ4©–”Ì«óçSQQF£ÁÁÁ¡Aë²;991{öl***êý¼Æ÷œœœxî¹çèÑ£%%%Œ5ŠÈÈȹKAÁÖ­»¢õ¹EÞ@V¯þ«Õy¢"Q)€."s;´ÈD8o%ÉÛaÁʈ)à²ùmöî %((€3\xù7xÏba{t4öf3U’D®ø_¿Î?þñ:´oÏüùó lÞ¼ý˜1c“&MÂb±àììÜ`¹4¿µ2ÏÑÑ‘ž={ò¿`rŸBK}ò¿lèõÕlݺGw\•Ç P‚fò([ 0»û1qxà4`´ZYñá‡lüáž}ñE&MžÌü×_gÂãŲ¥K HJ¢WU§Nq]’xáèQt >¼68jµÚ»²÷ûŸXÛ¶mq‰BM5Ü OÚ·ƒxÍfA}Z$€³ÙÄþýQ”—W'‘×óåÆîèŽ@_åà©ÔX°# ™ýQdîÝËßNžä¡Ç繞çÁ§äµ6¯q¤Û4Ô°/‹1UFš^¾Lá•+üëäI ˜÷ꫵUxöÿ‚988ü¦ü²‹‹Kƒ­ÈoFnŒòÖ˜ !l$&^A-Bd!sÓ½‘Éq»âÂwöé”xkG1²q*`o:I^òLÞ~sM›3n\wV¯[ÇùóçY·n[¾ÿž~z=ÒÒЧ¥q66–iW¯²úÇiÚ´i­oþ/l™TÑhµvï½÷bo_‚<>QÊ,¢±Z=ÉÌl‡LèÐ)aðœR© åôéŽÜO¯6áL%Ç‘ùÅÓ'«ªh›œÌ[³fqôèQéС~~~˜’“‚ÌÜlt‚ŽÅÅ|úÉ'”——Ë·‡Í†Á`hðc@v«ùûûÑ¡CS$)­Žo ä6Oùùm±Xz)>hFæk_ @¦´Õi2°£€sJ Ì0œ—Çöý‹ŸŸÎoú†¹=æRPó0+Ú–àhÁBгªŠ +W’ššZ{F£ñfw£5|“$‰ûîë‹$%+±J.SQBeewäöJ©ÎË‘9H.J!T“ÌóÈ!_‰¼ÿV&[vѺü=æÌÊáØ1»{zõêEAv6ªª¸WÜ‘#CÌf²NŸfýO?Õ^£ÙlÆh4Ö›Øjz£;Þ°.]º0iÒhV¬ØÅÒNU»¬8çp%Õ¢T<[•„î‚ÌéÝ Dž_ˆŽXVZ)gКºê!È7øö›o0`gÏžÅK’p»ÉÙÚ{óòÈÊÊ"%%…ïÿýo qqqáÁdàÀ Z˽ÑnX@@“'?N|üÛäç°Ù¼¨òp¿âw*%™»G”C§ Y+ðÊQs°à†Üª!5:ëõÙ³‡I“'L‹êøî·ÇÃ÷¿lè~š” ¬ùù¤§§ãêêÊOëÖq11FC{ïeô˜1™¦~£ýßÛôéS9|øqqû¢5r;ò,pлN퀼Ÿ/¹utBIÝM•„~Š)W¼º©ò,7lôe#ß—ñæ› øì35ÁÁV.Ÿ>M—›p+-àSQÁ¥K—¨ªªbëÖ­øàc®\IÀl®$/Ï‹¥e€©îA«gäÈžœŽ¥('D>´xùzÓ)¬+ qqxäåÕI%ähbF•JoØÑÁUµŽÈ¹'#aãCpO,˜®ITVU2í‰'ȉÅO¯ÇY¿žS'OòÑ'ŸÔ’“­a[»víXµj9_}µŠ}û£×WQX(a0´¥>ì´`Ð òrr¸zñ"*NbA‹£›;aáí(É·'÷òe¼n*p\1á£ù–ââ!|ðÁÞ~]]1åäÔ{œŒj5‹…÷Þy‡M«Vá_P€½œspàø±c,þøã»Rƒâ·ìº¼BP]]]oÆÏËË‹§ŸžÉÑ£ûIL<ɘ1p{n¬{̓ ¢»uvÖ*Þ[´ˆñ&GýÍí6 W’hÓ¦Mmu=à¾ûÈÖh¸¨ÔS6¥¶: جV¶mÜH“³gf±Ð d³ž’—K—×M¨Fôz}­š•N§cÀ€ìÞ½””x,˜VkÇ­û­ÁjµpúÈÚääð¬ÌÅÌxô¨ 2ùÛßþÆ}„ÁÅãM° ðhÞge‘L§NpiÖŒ8 xdƒ›!ôDEBÉ£.|{ðrâþª*z Ao!TZÊŽ/¿d÷îÝb5‹ÅBUUU-aU¥RƲeŸråÊY6oþ??ß_м‰Auå 3€°2ÍôE´ iˆmÛй¹ÕhÆÕZ`t42k–› >üPK·ûFÌ >• ¤:9‘—ŸÏÖU«˜ŸO_!ïÎx°ºš‚ýûYñÅ·+ô»8‘§§§³iÓ&®\¹‚Z­¦[·Hx`T=˜ÐÁÁ.]ºàèCUU»:Uº ‰8ÊJЉ¼ â4ãéÈ:ÇÁ+¹DEE1ö‘GØ¿q#JJQä “%‰4ggÞ˜2¥^à6§÷JÛ!rØ€‚ÔT,YYô§>·¹ŸœLÒ•+wõüj£Ýj50á±cÇ0›Íµd„¿Ñâ&½^½záèøCÝýÖàj[%Î…F"¹!ö TÚl|ûõ×,]¾ÿÈHNGEÑÅjÅY6Þɉ±Ã‡×nI³X,›Mzw”'€gTv,gOË=´ï)0ăƒ¢¸ë…ÜØµ};cÆŒiü@™L&Ž?Ξ={(,,ÄÇLJáÇӽ{÷zH¡¿¿?áá-HMMFˆ¦u¢W.*Ò°×ëéS'¢z÷Z,œØµ‹ÒéÓõ·¿qèË/ÑX­ø"wÜO­;wæá‡{н;Ìš¥ÆlŒ WÒ±WhªDy€}u5±±±´Îϯ‡­ªöBpéüyòóóÿ´ ˆ ýÿ i×B‰7•Ø………̘ñ411TTø!I<<ösæÌi–,YR;¦Ñh9rûö`ûö˜LPãn\Å yH( hÑÂ6tXð±Bjj*Ó§O祅 ùø½÷8™‘$I8ûûóâË/Ó»wïÚë¹pá¾f3=…«¹ÁûüÖhÄd6ߥH€ÊjÅÒH»«ýóf߬ªªâƒ>dåÊŸÈÉñìqpˆáĉã|øá‡„„„Ô>¶mÛ¶Ìž=wÞYŽÅÒ›ÍHÅ‘D<0â]'™×øL3!¸š›‹»»; Þ{fÍâÇS§ÐJ­–G¦McÆŒµÌõ””ªŠŠ¸_Iè¥@ €ž…pô(\º&(ì%¯/¸÷´»"ïÔÐ QOQ®ÑFìܾ};/½ô&ééN˜ÍM°³‹cݺ­|þù† Rû8¦M{’sç^ =}/6[P†–³4¡œ&ÈšêuÍEôYYòÚî_¤Z¯g×úõ¨ª«±¨Õ„öêÅÂ>ÂÍÍŽáý÷aЀ0ÂÅ(Ù@6Ü€P ßdbWn.÷p+ ­„ÅÒàtÜdB·Z­dddpøða’““qvv¦gÏ^DFv«]¸ðöîÍFˆ‘€! ¸¸eË6sß}÷1zôèÚ× à»ï¾áûï¿gË–­\JLÄœ‘Î8!8\£ ÉŒgÏâB& X¥¢›¿?ùùùXm6ú FAa!‘ݺ1zÌt:iii8;;ãí퇇B’ð‚º5Xàìá³·7i/â!*ZÊ•$4mÛÒ¦M›ÆtYII GŽ!..“ÉD¯^½ˆŒŒÄÓÓ!;wîä‹/ÖSP0„fuµ…mÛvÑ¢ÅrÞÿ=œkaΗ^zˆˆÎ|ÿý\¾œHÊÙsŒ@P€,câÆ0‘ò% 7ev<''‡®={⯨ëM˜0æÍ›SQQÁ` Y³f899!ÙÙá‚Lgª Ú,Ý|"¨Þxÿv6Žõ†k­!ì0¤Tk˜´nÝw*üýï/‘Ÿ®¬•–0™×®Åñì³/Y;R«V«¹ÿþûÙ·¯-K–|D||</^¤GyÞÈ:††›’z`ïíN§#=-f-Z0`Ì$•Š1cÆÐ­[7ª««¹~ý:žžžté¢#²Ç>â£gÓŠJ²›šöS¦J…—yF#EeeøÔb«¤VÓ¾cÇ)@ÕàzBÂEæÍ{C‡®a4zÕ~Ïk¯Íâ©§¦a6›9p !ÚßT¿È@Ꮋê%tå÷fΜɌ3xó7Ø»hî xr”iΚr²—±U+¼¼¼xù…HÙ½O!0ÿމáì¹sTS]Q§¿?÷E×®]qlÝšËW¯ÒIùPô@¬JE¯>}|8ÇçìÙ³Œ‰ˆ ‰aÆ#Ïa„*I= 8§ÑðÄý÷³øÃÙ¿z5MÊÊÀy{{r220[,T vtdððáŒ1‚v:púÒ%zZ­8 ƒú—§¶myåµ×XüöÛž;Gp¦àJ[ÈsÐеß0FŽÕø¡ß%f4Y³f ï¿¿œ”BØ£Vo¢_¿µ,_þOBBB8sæ ÅÅf„hË ]Bˆ{ÈÏ¿@\\ýû÷¯÷ºÁÁÁ|ñÅ¿HMMå±Ç#(&ÀYÝí^ÅÓË€8­–ðAƒ8~ü8_/Y‚k^:d9ìÔ¤$š‘—šŠÚÎŽ6íÛóÄ”)<4ƉS'vrÐø"ž$ãÁUrt77æÎ˵ë×9üí·›Lh‘×kY:uâ±Çoz *¡Ûl6þùÏ¥ìߟƒÅ2™³k"33…Å‹—Òµkùùùäåå!ïá½j²Ãhüå9ZI’hL©›ú¢J@²˜ÃZ¬òæ3^~ñEbOž$oÿ~†+;¢mÀ•Ü\üô’DK!($9ÂË|À³¯¾Ê‡¯½FZn..B8†„ðÖ[oѲeKZµlÉÊ+Ⱥv&¾¾¼9q"#FŒøŸKh(¶iÓ&¾þz+zý`”u”•eòÕW{èÔ©aaa9rDI¿Ò-·ªÕjûU˜ÐÇÇ'ŠsrBPŠ,s¹whrp`ü´ixùøðýÐ[¯¯ÝXUb4²uËœ€’„øöäIòòò˜ùôÓ<á›.]ÂYÓÝèëËËóæ1tèPš5cíš5œ:|˜N:'úÍÂ#<ú‹KríγÔÔTÞ}÷3RSƒmµX­DEañâ%,Xð[·nÃj·IvA½M†·óM?__R$‰`!¨DÞ ˜¡”UFI¢óÀ <˜O–,¡K^-x¼ÒjåXl,‡bc$I¨³ÇŽwæ ËV¬`ܸó¬ý)™Íæwð’f“+ðØÔ©Ì˜9“ŠŠ Ö·kÇÎ1UWÚ¥ OMŸN§Z5¨„n6›ùñÇX,øA·°Gˆ23¯0eÊS¤¥åRVV®œ-ȪEn@M ƒMüÕ÷xàصc«7$Qa{œü“ rÉC–ÇL²ÙÈ/(àÜ©St7›k·S«‘II)òÉ@ P ùlÉö>LÏž=Ù¶u+ÙYYt ãþ#j 4ˆ¾ýúa³Ù$ ­VÛ8ƒ~Yyy9‡¢¤¤-PwyL UU¹¬Xñ5II×(-­Dž wA¦>ÊRÃ*ÕUBCïÁÓÓóßÃÛÛ›©sæðùÛoS\^Îd¹£”‰uƒOooÖ¯YC€^O@cƒ'‰<9ì+dýv½ž]«V1lØ0v:ÄöíÛIˆÇÏߟG¦uëÖ¨ÕjºDDŽÅbA’$4Í]±6µÑnXTTiiV%™×4i\±Ùú°sçZΞ=OBB*6›^9&¶Tb§p//G:uêô‹¯ïèèȬçžcúÙ³\HM%Lv+AÞca²Z¹ré–äd‚¹ÑûvV®* ðVdš Á¶øx6mÜÈ_}À#NðæÁ˜-øü->¼+ööö¸ººòì³Ï2sæL9«Õ v÷EƒKèF£³ÙÊ­„F#$$\ÁfsCOå1§”¤Þ­6›!C:Þ·ßl¼¿èCÚoÙJ[S:m9„‚n¼¾¤„oW­ÂXYy‹H§Jùƒ›k¯J¾-Δ–’žžN—.]yñÅ_Dºv{C¶¥*l¬ï›Bh9yò46›+B¸#+h%qÈ[«ááV{ì±_k±··gâĉÄ;FâæÍ„*ä&gÅÏ€mëÖ‘™—GÇÛ`v ’dU*#W@WRBzz:dJÉŒ›}S£Ñ4ê!ÜÅVUU¥|ê·VßyyääT)žÔD9"^WŽîx{çð ³jeVÉúöíËÔ¿ÿO_z‰påÈZslme³±#)‰²²2„Ét|J:ß·0™8þ<:Žûï@P¼ðB ññ0|øçþÒú†h ªÄsrr¢C‡HR]éV€J„ÈÄj5(É|(0 ܃Nw„I“ºóÏ.ùÍ1†ääd–,>€ÊÒ‡æ|‡ÓMÓ’îV+£•½=7/`,C^ÀRwˆÃH*Õïà°Ùl”••QTTÔ š Ù\]] j‰]êM¾iDˆl¬V rþí§øåH¥fN¢GŸþ)={öøÕ÷¨¬¬dåÊ•ÄÅÅá}‰Kg!Ⱦv {''²‘y5f’”š«æÈaC^7ô{­TWW“ŸŸß(ÿzZXXju©‚åÔµkJ¬ÈlŒß”Ó®]‹¿Ìĉ¿ŽlZ­V6oÞÌ–-[päV†»`)*"3#ƒLI¢î„¸ yÂÂþ¦R­ú¦"'$æÌÝ»aË–ú¯o2™(((@¯×7&ô»æ—Q©xõÕ¹4mšŒJuZqÎtº=7QjŽpdÅ_2ÔÞ! ¡uëÖ¿¸®_¿ÎÜ9ï²j¥?.¶µè‰ÁZ'8[XÈN­ÆÎޞÒD ò\d °z÷VpJdáCŸfÍ~‘­nµZ1 $$$ðè¸qD´kG÷5t(‡þÕ¾U]«Ñ©ªªúÝÏi´?Ï´Z-O<1™ðp{TªJˆ*@­Ž&  äu’­” ÝY63ºwüÕ ØjµòîÛoóÝ;ïàœ’B~$¨&(%-[·&I¥br3 yFò&+2806kFPPÐmï !&“‰´´4Þ˜?ŸÈŽéÙ±#}##YñÅ(xšL&ªªª0 ^oûN4Yöz :]4²4K’t7·“xy5AÖaï¤ÔÔ:äÝ~8;;Ó¹sç_]“k³ÙØðóÏÌŸ=ML Fd˜½~ÉéUU8»¸ óð`#pE)€N! Ŷ¬ƒpæÕjúõï_ë›j5 /¾ GŽX©¨¨`õêÕôŠˆ Gh(CBxmþ|222~·ŸY­Vªªªê‰<Ý©¦BMrr2¹¹¹¸¸¸Ð³gÏzÐÞÕ«W‰‹‹Ãl6ãïïOÏž=ïÈ>„$IŒý Z­†ü‘¬¬Ó8:ꈌ¼Ÿððp&L˜‹7;ž«Õí7“œÍf#:ú8‡ö4ÅËbG/–‹'ä>¥EIÚ—·¢"ú V+¯_'Z ’*åHqTù7H—$Þ3†ÊÊJ\]]kûâ6›K—.qøða²³³ÙøóÏ”D?›ÿÇÞyD]ÿüqîØDQPDÄ…÷ÖÌm¦–e¦¥f–3¿¹Ê‘m3µ4M[–Š[+#æÀ‘X ²d*{ÇÁÝ}~ÜI¢(–’Øïóü îóù¼?Ÿ{^÷ÚøšÍÜ´4>þâ zõêuOE¤¤¤„s¡¡„œ<‰J¥¢qãÆ 0€6mÛÖ{FSYYIXXÙÙÙѹsçjØ ¹|ù27nÜÀÆÆ†¶mÛÒ°aÃz9ºÓÏÏ-[6òᇑ”… èñókI`àdÖ­[GD„=ÕáRÀ†òòÚ-Þ«W¯²wÛ6ú–—cfTÏ-ø+Ãý H$(LMéÜ¥ .\ F§A@gT#B g)+•2¬{wÐjµU … dddpöìY’’’8uêáGÒ]§Ã¸ž“û¯¿Ž^¯gú+¯Ôú..\¸@HH™™™ØÚÚÒ§wo:uî\¯g© ‚@NN±±±deeabbB·nݪ•B¥¦¦Fyy9...ÖÛ$V;;;V¬XF“&[c¤Õ¸¸81zôr~øáŽ-áÎp‘%åå‚1”twäää°w÷nï<ggkï¹nqq1×ããiŽ!£“Q¹ø¹\ÎñãÇyûí·  m=µð$ ŽŽŽØÛÛÌo,%6ÖAhgÔ-Œ¯¶™ìôï߯Ö5­­e¸K¾¢±pS#ó²ö=0LG3J“GŽð£Tе•M}|ôÄ8::òí–-ü j5J• —'P_~ù2‹–.eݧŸ"?}šÁz=r£ ôk{ãÏÊMH¸r…²²²» ô¸¸86}ð~ééx]þŽÐsçXýñÇ|±iS½žaíääÄwß}À„ ª‹ŠŠ"88˜U«VÑ¥K’““yã7ؾ};oÜ%¹°>ÀÒÒ’-ZPXXÈÀC‰ˆ(G£éd|»€1„MÆE<÷ܳµ®immV"¡ÂhÍ4ÂÿC‡…@ãçð{R_ý5­üüpnØ€Ž ä§C‡8´kê’LÔj\Ôj|¢£1‹Ž&ÄÄ„°‹ùhÍ‚vî$æÀúVVbetç'!€§ÑÂ÷.å员˜xW^TTÄŠå˱‹Š¢ƒñ·£Õë‰IJâ“eËèׯ_½Š%•J}šqÔ²1Ì.ÿCCÙ›-n':…^Z­F§ÓñÄSOqö‹/pÕ2åóT B&cˆ±-á±ë×é¢Raiæ­­éÑ«mÛµ£W¯^ôêÕ«Ö›öíÛ3æõ×9¸a­Š‹±HH²<=ù`ΜZC ÎÎÎ̘1ã—ÞƒÂÛÛ›O?ý”õë×sðàA|||èܹs5ÅáVLœ8‘#FÔú?~,?ÿü†È3@>¦¦1<óÌôjç^¿~U+V :r„17…_i)—.\`å[oÑp˼½½IHLäÈÞ½t/-¥µÑb¾6ú©2ÖÌMeÒ’LMMéÔ±#ÁNNää`ktS^.   F>ý4Û7mBŸ—G#CŽËqmÛ–ÞýûÓ¶m[XkÒP£FX¸x1ÿ›1ƒÜ¬,J$qvvL™;//¯å= 8°šbwàÀR8e2“&MB*•²xñbôz=}úô¡eË–wMÖôôô¬7¼S"‘àç× 3"#“£¨(G&‹¢cG/š6mZíšõëÖqzëVžä¯´¹”k×xÞ<:uêD×®]o6o¦ñõëýeºt ¬vþáŸƾ¼œæ·0ýžVOM5j†àà`232°±·g΀Œ=¥RùØÒ¦R©dêÔ©<ûì³èt:®_¿ÎèÙ³çcñü-[ú2sæV®\Gzz&`Ž ähÅ´iÓªy´Z-?îÛ‡?Õsà›M½»wÓµkWöïÛ‡êêU† BUȦ-†æZ猞 áÄ[S|3ë¦MqwwÇÙÙ™Wß|“ +W’—™I¥ pC*iÃŒ n܈­·7nO=Eüµk ÓѤE Þ|ñEz÷éó·:ƵiÓ†W¯fÇŽÄ^¹‚L.çI^™1WW×zùÞä7µÿ¤¤$ÂÃÃ)))!,, •JE@@qqqdddàââBrr2Ÿ}öÏ=÷Üc3å«mÛ6|þùZ>LDD$VVV П=zÜQ皟Ÿ…^‡†hèŒ/©,)ávýîfGxg A*%\"½_A@ DH¥4ëÚ•'‡ A"‘àëëËÚM›Ø»gë>üï’:ïU¦ÕÃuSS¾Ù¹­V‹¹¹9Mš4ùGí5]\\˜6}:£F¦¢¢lmmëeÙáíÐëõ\¼x‘’’Š‹‹‰çôéÓ4oÞKKKΜ9c?+ìÚµ‹’’ÆŽûXЦ™™|ðƒçìÙshµZ'Ò¿ÿ;<`šòrôÅŘÔ`½HÊÊP«Õ”«Õ$DFâ*Õ4u†ìs9†:ô,ssލT´1 ü‰„"ww¦¾ú*,^¼6~þ9êÈHcHÒ)7nËÂwÞÁßß…BAƒ jí²x7kpܸq 4ˆ¢¢"ÌÍÍqtt|,ZuææærõêURSS)++ãÏ?ÿD§ÓѹsgRRRHHHÀÕÕ•ôôt6mÚÄ€ |lhs„ øúúrðàA ŠðòêLjÃïPÚ´Z-¥ÅÅXÕà·„*wqøŸâ¢ÑTË¿Ã?f@€DÂY¥’­ue%vÆDGXZ2{üx<==155e„ 4kÖŒŸÎ郸Ýôy……„„‡3xØ0–-_Ž 899ý£Q©R©”Ž;âëëK^^R©'ãx×ú 92¡×¯_Oyy9VVVlÚ´ ¾ùæ*++Ù³g 8;;3uêÔ;’!ê»çééÉ«¯¾Z5ØD*•Ö(Ì:tà;SSŠ´Ú*MSg´^¸»ãâ₽½=‚©)j£ðå ¼Âh­ëõzÊ0µ¶æbn.r¹œýú±pÑ¢*ëZ&“Ñ¢E zôìÉÖÕ«éf$jŒNÀŽèhrrrèÑ£Gµç¼™\S^^ŽB¡ aƵ6¬Ëå÷¬®¯¨¬¬dÕªUäççcffÆéÓ§ åÿû={ö$**ŠãÇ#=zô`Ö¬Yõ¶Ô©æp„ãÆc̘1UtQm:9;cííMöåËØÞ×,äîî4jع‰ v..”I$·Ä·ÁP‡k4~S(ðìߟ˜ÔTt:~­Zñéܹ´k×®ê|ÈÞ;q‘Hp4ÞSn´º®%'ÏèÑ£Q(ÕÞWVVÅÅÅȤRœœ±µµ½§{RjÌ8¾½Ê¦¾#**ŠU«VQVV†‹‹ Û¶mÃÔÔ”ýû÷£Õj &""{{{žzê)ÆŽûXyÌÍÍéÞ½;]ºtA¤RiïQ©TÒ²uk’’“it‹2Y¤ÊdŒ6æ#8»¸&—£¯¨¨Š‘ ª2”@3A F§Ã·o_Ròòˆ+/ÇÎÎŽgÏfĈU2çfÕÀ½{i!‘ÐüZo´Ñhøqï^.\XMN ‚@~~>ÙÙÙ‚€µµ5 6¬Õuniiyײàz)ÐGŨQ£îbá¶eóæÍ<î¸1ÞŠþýûÓ¶o_Nüò ­ôz”‚Àuàš³3KŒ !|}}iס§èŠ!…IaŒ†Ôh¡'Ñáá¬XµŠ§LÁÄÄ++«µJ¥B*wô`Rµ×âââjŸgff²mÛ6~ܹÕ˜9:Òwøpf¾öÚ¿ÿ·¡P(øñÇïz|þüùwĘ7Ünr/xzz2ò™gØ’€¶¸kA@%‘©Tòä˜1´nÓ ú Äæß~é´7 Aé@ †°P **B©T²=({{{ìììjümhµZ´jõ£Ž¤€RP©TÕª$ôz=ß}÷ûvìàzl,2SSZ÷îÍ´éÓéСÃn:`ïÞ½ï˜ÿ}vvv|úé§ÿ‰ïy?ÆÛÌÙ³yíòeΧ¦ÒCh'V"Á% €1O? À°áÃÙ¹e q7nài 1fa(ÔlŽ1 ½¢‚˜ÈH~9v GGGllljJ%‘H().Æì6Å£a¤Ñh¨¨¨¨J\Óétœ?ž/7m"òäI—-xùÕW:tèfð•8é67Ó{Ì&//Nù„Ö¥¥X ê¬,öÇÇ£©¨`ùòåâ|ôÿ0mNš4 +++¶®[G^j*ÖÎÎLxé%&NœX•€6fÌâãâøé«¯°R«Ña˜hÐÞ¨l¼t:bÏž%=-í®3lmmiàáÁõ pã¯Ìã [©ÄÃãšu~äÈÞóMZææÒѨLĦ¥ñ¿ØXvîÛ‡ËPáa@×®]Y¹nßnÞÌéÐPt}â ^ž>½jäo»v혽d Ÿ,[FxN¦F“3†:ñ(£w²üÆ Ž9¬Y³îy϶lݱƒ[g @ªTŠ—O5oHlL o/^ŒöÌt:$@vf&ËÒÒP( 2ä?ñÄÚ·ÁÛÛ›wß{c—.q>1‘]‡ñì³ÏV‹·ûúú²ûàA–lÙB©§'%à21”5Ú ùÆþã÷‚»»;ÏOŸÎ ®b(­HΘ›óìŒÕÜÇ)))ìÛ²…€’¼W£›ªŸFÃÑC‡î»Gyy9¹¹¹Uµ±â0ŒÇLž<™àÓ§9—˜È±‹™;wnµPŠ««+ïø!ßþú+6Ý»“*‘ÐØ¨p6ZN]]NùµÞoì¸q¤7oΟ  ÙÀ ¹Ïþý4hP•õ¦V«ùdõj|ss«Æ5ºkµd]¸À¾ýûïë;jµZòóóÉÉÉ¡¸¸X¤ÍÇ&&& 6Œowî$4>ž“áá¬Y·Ž€€€[†§Èxéå—9B¯©SIR*±ÂtC¯öŽ@cAàê}4¼z~âD,Ú´á7²€\‰„óR)é..Ìÿßÿªî[YYÉá_~¡àÌ:ët42ÒgÀ51‘   òóók½Ÿ^¯§¤¤„œœòóóïZ‚(ZèõÌý©T*ku9;;3eÊŠ‹‹Y¶`Z-ZlzW$œ6ÄÆÆæÞ•Tʼùó1·°àØ‘#$çåangÇó0mÚ´jÖ}AAeØR½ìÈfg“‘ž^+A&$$°k×..Ÿ?R)-üüxzìØjñSõØ¥&—×Zå`nnN=xÿƒxvÜ8rÒÓÑÍVF/’¼A–Ó½hsØðáHe2¶lÙÂÅÌL¤2Ú·gÖìÙ4kÖ¬êÜÜÜ\²³³éy›•`8I$Ä^¹Rëw+..fÇŽ„;FYI ÜÜ3v,=zôøWj~E< u(•beeuÏäHZúù±vÝ:ÂÃÃIºx© `a µ-†>ï~­ZÕz?GGG¾üö[Ö¯[GTt4ºÊJ\ÝÝùtÊ:vìXu^ee%‰‰‰8;oVñz ±^OJF………÷ÌáP«Õœ>uŠýû÷“™’‚¹¥%=úôa„ µòxQ ?F7n_o܈]Bà €d‰„æNz_qC+++æÌ™ÃرcÉÍÍÅÞÞ77·;â:J¥©¹9·¥Ô:ss,kÉ2ÎÊÊbÁœ9¤?Žge%‚ pôçŸ9¶  ÜÝÝÅú‚q†@èwßѽ¢G }­Ï›šâß³ç}1M™LÆðáÃéÔ©ׯ_G.—ãééyGhÇÒÒ…BA!†¢[iS%Ø×¢<”——³öÓOùþ£ðQ©0ÇP?ü¿“'YòÁŒ1âUxˆ¨ŸP(¼üòË,¿|?­/A0La“HÐ7n̰aÃîËøjÓ¦ Ÿ¬YCZZ¸¹¹áèèX-_I*•bggÇ#=ÞJE%€…‘vïeýúë¯,Ÿ7Ûk×p6Nm[Lfz:ËV¬¨7´)ºÜ 6ä³-[véÂ>[[¶ÛØÖ¸1S–.eÂsÏý-—•‡‡:t Y³f5&i4nܘ¶OyEq1åVV4èЕ«VÕZ–vöäIšètÕš?(?Žß/]B¥R=6å"j‡D"ÁÝÝÍ[¶9kׯ_ÇÕÕ??¿‡^v*‘H˜={6ñW¯ròèQLnÜ@ob‚‰·7Kçέ–ÜY¢£¢0MOÇá–ÞîrÀM¯çØùóÓ ž6óñÏ`eeÅ‚7ßdÂóσµµ5-[¶üGý j£ÍÞ½{3sñb¶lÜHdt4A@ãêʈgžá¥—^º§…]T\ÌÕßg45 »YÑd‘ŸOXX½zõú –––µZȃ0øtíZNŸ:En^ööötëÖížC0ª^¶‰ 5¥qTre}"_ÁÞºukZ·n]§÷133cõ'Ÿzö,‰‰‰˜™™Ñ¶];Z·n]ë\s™\ŽN*åv‘ÊåE$ÿŒ6ÝÜÜþ–EþO T*yqòdÚ´mËåË—Ñét4mÚ”>}úÜÑ`ìvH¥R¤r9ú’àtR)&õ($ ôÇÔêrþyCó¿Áè ̪½{ñÕ鸙þQ\15et¯^b⑈†C†ýÛ´Ù¦m[„&MÈŠÅCÂ’Û ¯Y IDATH‘HðíÑ£Ö¾ð"DÔSSS ü[ôimmMëž=I:y½ åq€ÆÞž.0ÈçaC4Ésáþw0bäHú½ü2Çmm9'‘pøÙÊ þý™;w®h‰xd´È«³gs¦INJ$\~•Ë)ëÒ…Ùóçÿ£Ö"D< úT(,]±uÇŽüjjÊ@ˆD™† ™¹`A½šk"Zèÿ`kk˲eËø©C._¾ŒV«e°Ÿƒæ?þ °°[[[ï™õ)BÄC·,¤R&O™‚³‹ §N¢¨¨ˆö3xð` ‡F.—Ó¦M\\\DåSÄ¿*ü;wîÌÚ øùçŸINNÆËÎŽnݺѦM~ùå´Z-^^^øúúŠ]Ä¿^|ñEƇ^¯§°°•+VpöäIä Z…‚î½{³lŊDz÷»ˆÇr¹œ#F0hÐ 4 ‰„Í›7³ýûï©,(@"“áÒ¬+V®| yå"DüÚlß¾=þþþ¨T* 'OždâóÏS˜‘TP:91mút^˜4©ÖœQ ‹x¨Ö¥¥%¹¹¹,Y´ˆˆ  †iµ(1ÄÔMIa¡FÃê5kptt7LÄ¿j ™™™affÆgë×óù›oÒ_¯§!†˜ú©©<7z4¡þùŸœ] ¢~ÃÄÄBBBøß¬YxÇÇÓCì:%-/F¡Tòì³Ï>’fb ýÿ1¢££‰|˜èèhÌÍÍ™9sfµYáçÎã‡~ ''ggg&L˜ðØÌCqw”——sýúuœõúj±pHÈÎÈ@­V?’g“jµZ.\¸À¥K—J¥œ:uŠ’’’ªöíÛǼyóð÷÷gòäÉ(•J&MšDxxxj@¡¡¡Œÿ]»ögôèqSv[ËSkäNNܾ«e€‰£#Öõ GqAA@«ÕrñâERRRªŽegg3kÖ,¢¢¢˜0a]ºtaíÚµ|ñÅuö]»vñÒK/ÝqÂ¥K—pwwgæÌ™ 4ˆwÞy‡¢¢""##ëä*++Ù»w/cÆLa÷î γäàÁ\žyæu¶nÝúÈ4Ÿÿ"Z¶lIÀ A\65%PÙ@˜©)ƒ?òŒM€FÌG}tG¯ùââb’““™ýô$&L&,ì²ØÚù! ôPîí͉„" =á¯)ÎÎ >ü‘õM¨5†îïïOnn.W®\¡¬¬Œ,--«¹–&RRRزå[nÜhŽ^ß h‡^߃¶nÝAŒ×}hpttdÎܹøŽÏO2€Ÿd2Z>ó sæÌ©w q·3$KKKÜÝÝ £¨¨ˆ„„âââèÔ©S=Ãúõ¹|Y :"Ñé±oßYŽ9"ÕCÄøñã;{6—]]«h³²S'V®^]ï+0¼½½)//'<<œ²²2Ξ=‹N§«³n}‚ pôè1öì ¥²²‚ÐhNן?þÐñÃ?Tó¼Šx0t äÍåËÉðóãpˆtscú’%<ñÄ$!î#Ë}ðàÁÄÅÅ1nÜ8ÌÌÌ(++cÉ’%øûû×É¥¥¥‘ ôä¯!¡À˜˜+$''Ó¾}ûªóµZ-………h4dR)VÖÖ˜››‹uª÷‰DBË–-ùtÝ:’fÏ&;;gggš5k†µµu½ßCGGG^yå>úè#víÚ…V«¥C‡<ûì³uæ= 9 ´Á>x“6Ñéš|„Q· !Ñét”––VYîæææXYY=²ûã{{{Þ\´ˆ‰“&‘””„••M›6},šÌôèуgŸ}–)S¦TñÍéÓ§×Y{èòòr"##((pn¯«D§óâ? s&¬­­«Ž¨T*JJJÐét( lllY¹Õãh¥5Š.]º””„V«¥Y³f¸ºº>Ò÷è:Ž={öpìØ1>úè#<<<¸|ù2kÖ¬ÁÙÙ™~ýúU;_£ÑpæÌ™ªÿÍÌÌhÞ¼y5"º!#•Öì2|þ—)--eÇŽ|¹v-Ù ˜(• |榽ò ­Zµ{“ßç~ÛØØÔé<ô²²2âãã«Y#á.==uëÖÈøñãÉÏÏgݺu|þùç¬^½úŽócbbªMkܸñßk )} û( •þE›„„„ðźu„Ÿ<‰D&çcG¦½þ:Æ ió>annŽ——^^^uv””ÒÒÒªÑIMÓïz½žàà`‚‚‚X¾|9¾¾¾DEE±zõjÜÜÜ9rä×UãVVV4oÞ¼ÆÉv—6AÏíºyBB¾÷§~ü‘òÂBx{3qÆ ÆϹà"nžry÷¡/..&>>¾Z¨Y£Ñü3^RRÂñãÇéß¿?ƒÀ××—Ý»wsòäIúôéS1ÝlTr«õ¬ÕjÿÖhÜØ ÿœ8‘ÜJXéøøXѬYÓª{±záBZççÓ^¨Ôh¸ôÕWäääðñ'ŸÐ¤I‘êêôz=¥¥¥wÐÆƒ"::š’’&NœH‹-CqÙ²e¼ÿþûwX*•ªÚ3ü]KÏÄÄ„¾}{whŒ¡ HâÉ'çW KçÌÁ"6–þ‚€H;q‚¥×®Ñ¨Q£zÕ.òÿ;ÊË˫хJ¥z ®V«9uê >¹\ޝ¯/Ççðáà 6ì/ÍMOã­Š¶^¯ÿ[£¿¿?ŽŽ?‘›[t ï¬@*½JûöÝ«uvv6Ë–-#nǺèõ(€Üèh¾xë-^zé¥úþ"´Z-%%%”––Vã§÷èz½½^N§C„*A,—Ë155%''‡ÊÊJ¤R)Z­–üü| Å.Y333†ú@_ÀÝÝiÓ&“ð6ÅètÎH¥88¤òò˳iÙ²%iiiìÙ½ÿü|Z B•ÝnYQÁ±Ã‡¹8~<7]ïõ–––tëÖ­ÚgkÖ¬ù[D­Õj½^V«E*•bff†Z­¦¨¨¨êx^^R©´F·v‡˜>gÍšÉÅ‹a„‡ÿ‚VÛ ‰Dƒ©éUÆŒéKÿþý«Îûáûïââè"ÜtÀ¹!×®±yÓ&DÚ¬'ðññ©–¤ÕjILL¬õ:AÐétUÊéÍ¿¥R) …‚ôôôªŽw:ŽÜÜ\\]]kôÎ888<mJ$žxâ FŽ<Åöí¿ V7G˜š&`Ëĉ«J9CBBøãØ1†èõÜ,ît„ü|‚¾þšQ£Fá*Žª­°··§wïÞÕ>ûàƒî-Ð/]ºÄ/¿üBRRlذ///fΜÉ3Ï<Ã;ï¼Ã¼yópss#""+++†^' I.—3vìX¼½½Y·n=™™™88¸2uê[ôìÙ³êžÙÙÙݸ·:áÁ°Q«¹zõ*z½^ŒW>樬¬dõêÕ––Æ¡C‡HKKcÔ¨Q´jÕŠÖ­[³ÒØ ´  €sçÎñꫯ֙KÛÇLJýûƒøæ›o8þff<ùäbž~zLµiuQ—.áj´~ný±yèõ$&%‰³çÿˆŽŽfïÞ½dee‘““Ö-[8zô( ,`äÈ‘,]º”yóæÑ¬Y3bccÉÏÏç7Þ¨3EÎÁÁÏ>[G×®Û9tèG**4 ç•W^©& ¯%'c‘—Ç­³¥€³ -V=Æß¢fffÕ4U333$ ÄÁÁ . R©èÑ£}ûö¥y×¶mÛ–­[· ÓéÉdwü,,,0±° Tª¥€T*‰'''Ñúàf+P½^Ï´iÓª>—Éd888°jÕ*N:EZZnnn¼õÖ[ôèÑ£NŸ©qãÆ,]º´Ê«IypjØ4‰Ä0¦ñ–Ï $l¬­Åá7ÿÈd2ÌÍÍiÔ¨sæÌ©ú  [·n¬[·Ž3gÎP\\LÇŽ™={vϤW(¼øâ‹¼ð ‚P£AckkK¹¹9BqqµÏÕ ŽŽÈåbGðÇZ ·oß¾ZæøíèØ±cegÖÆÌïF\M›6Å¿m[N_º„sEE•%” ‘`Ò¢íÚµþ *—3kÖ¬»oذ!ãÇdÏv7Œ3†×wïÆS«¥‘Q¨gWLLX>r¤˜Mü@‹-ªr7j‚¿¿UÕ†{ñ¾nÝ»óE“&DGEÑ ƒ‡S ü)t{òIìììÄ—û8 ôÇfff,[¾œ¹ÅÅì;v ËÂB*ML0óõeéÂ…÷TPDˆ¨k zâ æ|ð[6nD‘™ @¹““^x‰'Š$â‘¡U«V¬Û°×_}•¸´4”j5¥ööt0€7þ÷?¬¬¬ÄMú¿GGG>ß°#GŽœ˜hèå=`ÞÞÞ¢»]Ä#W8g̘Açιtñ":½žöíÛÓ90P¤M=zô`Ç®]œúí7 ñôò¢oß¾¢u. ôG ++«GÞR„ˆš P(èÚµ«8»[D½Dm!Ä ³"Dˆ! t"Dˆ!B„(ÐEˆ!B„uC×ëõܸqƒ¸¸8JJJðôôÄÃÃã¾§Üìv³lML"ñ0!%%%\½zÕØ¸Èooïûj{³“¢ ˜˜˜ˆ´)â¡C­VsíÚ5’’’Ëåøùùáââr_¥ŽZ­¶ª¡–ØTKèa;vŒ·, +"SA@kmͰI“˜;>7¾ëu™™™œ9s†ÄÄDLMMi×¶-Å®Z"mFGGóÁªUœÙ»ÓŠ 4R)>½{óþêÕ´mÛö®×–––ÊŸþIee%^žžôéÛgggqcE<”––òÞªUìùòK„¼<‰»-x}Ñ"ž~úé»6$ª¨¨ ""‚‹.—Ÿ««+]»vÅÇÇGì¢@0ÄÇdzlñbì#"è"(ÅŜز{.ZTcSŽììlæÏžMÔÑ£ØQ)‘ð}ãÆ<3cóæÍ;‰x`±~íZb÷î削 l•^ÏŸ'O²bÅ 6lØ@ƒ ¤¤„7òýúõX¤§#ò--ùíùçY¸pá]•T"þv±kíZº•—ÓÐ 111|¼t)~~~wŠøË/¿ðþ[o¡‰ŽÆJ«¥H¡`G‡¼»z5;w7öÿ ê$†þ믿¢Š¥½ `(€&€oY{¾þú®ãß6nØ@ÔÁƒô-*¢ÐWh•šÊ¦wß%<<\|["ÙÙٜܳ‡Ö¸iÓÔëI¸x‘‹.ÔhÕŸ aÛÚµtÌÈ /Ð PZÊ©o¾aÇöíTTTˆ›+âPRRÂΠ Ú–—ã!˜–@[@žšÊ‡Ýõº·æÏÇ."‚Z-= •çα|ñb*++ÅÍú?GfF–ååÕÌ †Á)¹éé5ŽÎT©Tìß½›v••Ø&FfÛp.-e÷®]âÛñP,ôŠÂBnà˜òâbr²³ï¸F­Vsêôi33i$˜éÓhS^Ω“'ÉÊÊ7WÄ¡°°ÂÂBœnëÿoØi×®Õx]HH%©©´Ç0ÐWnT:éõÄ„…%n®(Ðÿ9š6kF‘…·ŠmÈ—Hhäí]cr‡F£A¯Ó¡¬a=…  ºe¬ÿvvv˜7h@ÑmÉlå@¥ÜÜî¸F§Ó¡V«QR}²ßME@[QN§7WÄÁÞÞ'''Òk Í\AÀÛ×·ÆëT*&ÉñS€ PVV&n®(Ðÿ9ž|òIÌ›6å¬TÊÍA|i —ML7iR‰666¸5iBÊmĬ®mî;!âïÀÅÅ…¾£Gs^"!ßøY "—ãÕ®ï¸ÆÌÌ ÏfÍȔɸձ®ÒFîîØØØˆ›+â`aaÁĉ “ËI0ÒW%pY"AëîÎà'Ÿ¬ñ:J€Û}Ki€ÜܼÎ'cЍ? ‚@aa!7nÜ ¨¨¥RIóæÍ±°° !!ëׯW»H&“áîîN£Fj\ÔÍÍ{ö0óÕW9”˜ˆ´²[[^›8‘—§N­1ëR&“ñöÊ•LŠE—‘A3#1ÿ)—Ó¤kWžyæ™:Û„ÂÂBlmmëdmFƒN§ÃÜÜü±|~NGYYÙ#Ø Õj¹víÅÅÅ”••áååU•´VVVFXXØט››PãzVVV,}ûm,,- 1ɲ2…‚¶|öùç5ö²–Ëå 1‚S§Osì§Ÿh£Ó!’??–<ÿ|õÀ.--E©TÖYBh]ÒŽV«¥¼¼¼N+TŠŠŠ°¶¶~$僂 ››KVVÅÅÅX[[ãíí©©)QQQÜAKÍ›7ÇÑѱÆ5ÇGii)7làr^‚\ŽGóæ|±x1~~~5^ÓªU+ÆÏ˜Að—_ÒF¥ÂÆ(Ü/››3oáÂ:«Â¨KÚ¹ùû–Édu6j¸®Ÿ¿¢¢­V[§¼ÿ^¥ÕjÙ·o;vì ??¶nÝJ«V­ %$$¤ê‚œœ.\¸À'Ÿ|ÂóÏ?×…===Ù±s'QQQãééIóæÍï9Ö¯cÇŽ|´a;wìàjB¦ææ8š˜ðæ›oÖÙ¦èõzöíÛÇäÉ“ëdý¤¤$òóóéÖ­[½Ä={öðÒK/ÕÉÚœ>}šQ£F=ž››Ë+¯¼RU–óá‡òòË/W1ó¯¾úê/oŽZ͹sçðõõ%88ø®k:99±òw;n™™™8::ÒºukÌÌÌîIÏ+W®äËÆ‰¸t A§Ã¹IÚxxгW¯:ûþ!!!tìØ±ÆÌûúN;¹¹¹\ºt‰¡C‡ÖÙþ«vÂÓO?Íðáëþߺu+ééétïÞ½ÖÅmmmïë¼[­ô!C†Hvv6¦¦¦œ>}[[Û:ÓÀA 11±N-ˆœœœ:}‰ uÊ´ÒÓÓ™ ÉÚÚšE‹¡T*yíµ×ªsqqaÍš5Uÿ_¹r…¸¸8ÆW;áËå´k×î®e@w³„ÞYµŠŒŒ ôz=–––|ýõ×uÆ222êt¦v]ÒŽZ­&##£Né#)) ½^ÿHhÓÄÄ„¡C‡Ò»woN:ÅÉ“'«å•Wªe˜/Y² ‹*cé^|°iÓ¦4mÚô¾ŸÅÑɉ9sçò̳ÏRRR‚­­-AAAu깨KÚCEJ]ÖÐ×%ßCõAv I¶u*Ð¥R)Í›7§yóæ‚pÇ fffU–KQQ?þø#C† ÁÃãNH*•âääTÕµëÏ?ÿDÄÿ_˜››Ó§OÊÊÊî° ¥Ri•ËL§Óƒ\.§gÏžuöù„ââb Y¾|9nnnakkKvv6)))¼øâ‹ÿ QêõzÂÃÃY½z5(•J†ÎĉÊý5 û÷ïg×®]ÈK/½DÓ¦MÿQvíÚ…Z­fàÀLš4©Öºç›¨¨(¾ýö[®\¹‚N§cåÊ•U¡¬¬,öìÙÃo¿ýF||<3fÌàÅ_¼ïp‹V«åðáÃüüóÏDEEѲeKV®\Iƒ C‡±ÿ~RSS111¡OŸ>L:õoÓÿ?Åž={ضm[Uã£7Þxƒ€€>ûì3,--INNF£Ñн{÷:Ï:Œ“ÙÖ­[G\\ …‚^½z1sæÌ‡æ***"((ˆüFCŸ>}xá…puuýÛ¼SÂÃÃÙ¶mW®\A"‘°råJ:tèPuüêÕ«|üñÇ$&&âææÆë¯¿N@@À}ßK£ÑðÅ_pþüy=z4 .¬:ÌÁƒ‰ŽŽÆÒÒ’íÛ·ÿ­pKZZŸþ9ÑÑÑäææ²|ùr @rr2_~ù%‘‘‘”””àååÅÿ±wæá1ßÿÌd’L6Ù‰DlAÒØEí”*UUK[kÛ­ª/ZÕÒÖVª¥+Z¥Õ…R­­E-A,A-‘$²I&™Lf’ÉlïïÄ|M-_tp?Ï“çÉÜ;sæÞ÷ž9ç]Î{ÎóÏ?OÛ¶mïÚVW9ÀСC‰‰‰!..ެ¬,Î;ÇÎ;­[‚êÖ­Kllì=%%%1zôh7nÌÒ¥K™..Ž^x¨¨(,X@:u3f ééé·ìÔRSS©W¯Ö}ÐWhÚ´)999×-~ó¿~X*•Š’’:wîLjj*:Îz.##'''¦OŸÎÂ… ©V­#FŒ ''ç®ë‚³³3»wïæï¿ÿ&33“¤¤$N:Å AƒË常¸°bÅ ¾üòË{=¬×ëùøãÙºu+“'OfÁ‚˜L&Fm—ªVÉÉɼôÒKxxx°xñbzõêÅ´iÓØ½{÷É3 $''Ó AªW¯Nff¦ÍöÔM›6ñÑGñì³ÏòÖ[o±oß>,X@qqñ-G~~>z½žÇ{Œ¤¤$«îh4rrrhÒ¤ ...¨Tªën½™COOOÇËË‹ÐÐPÒÓÓ­úm6›9uê:t`Ñ¢EÌš5‹èèh¦OŸ~[×ÿo˜)æÏŸo}žÛ·ouêÔæ_Ë_¿~½hÛ¶­ÈÊÊBa2™Äˆ#ÄðáÃEYYÙË5 â­·ÞÏ>û¬ÐëõVÝìÙ³§˜7ož0›ÍÂb±ˆmÛ¶‰:ˆsçÎÝöwŠzõê‰Ý»w_sN­V‹gžyF|ðÁwô¶X,bݺu¢G"##ÃzüŸm²cÇѦM›;ºþªÎÁƒEhh¨HHH°{ûí·ÅÀÿ•î\Mdd¤X±b…°X,Âb±ˆÍ›7‹&MšüëöÎÊÊ 4ûöí³[½zµèر£ÈÏÏBQRR"zõê%æÏŸÛòõz½;v¬˜>ÞîY§JKKINN¦E‹Ökwuu¥Q£F$$$Ü·,W7ë5_³.£PØL÷ªT*ŒFã]̓\YQ*•´oßž˜˜âããÉÉÉaÏž=ÿ3uì­¢Õjqss³N‰;88P³fM.^¼h÷¬S*•Ь¬,Z¶l‰\.G&“„ÉdB¥RÙEwî¶nþ3åkVV...(•ʇN7CBBhÔ¨?þø#ùùùÄÇÇsøða»N÷«ÕjüüüÉdÈd2¼¼¼0™Lvu–••‘ššJ£F¬K‹...„……qæÌ™;²›wS?¯'ÛÁÁÁÆ_©ÕjJKKïÚlë”{e£FLŸ>+VЭ[7ž~úi"""ì–”!""‚Ç£R©0 œ9s†‹/’ŸŸo÷‡®×ë)..¶f¾»‚¯¯/ÅÅÅ †*e4233ùðà »«Ù*+ŽŽŽôï߆N¯^½8rä“&M²Kg³V­ZœœŒÑh$;;›#GŽXõÈž „°Ùç«T*Q*•¨Õê*õ\, 'Nœà“O>áÙgŸ¥~ýúnúøø0yòd¶lÙÂã?ÎSO=…¯¯/O?ý´Ý–£5jıcÇÐh4èt:N:ENNŽÝ;›ƒµZ¯¯¯Íz³ŸŸZ­ÖfI³*ŸŸÏòåËñ÷÷§gÏžwí{•ñæ;Æœ9sxçwxä‘G(**bþüù|üñÇÌœ9ó_Wo;v,Ó§Oçõ×_' €¸¸8¼¼¼puuµû:ì•^ZYYÙ5=ÐŽ|+;jµÚº¾úþûïó0¢ÓéXºt)J¥’5kÖàááÁo¿ýƼyó û×»@ZµjE÷îÝ™3g-[¶äòåË!P(v¯:uet{u§Òb±`2™îZ…«»åÌOž<É›o¾IŸ>}>|øC©›çÎãÝwßeìØ±tïÞNÇòåËyï½÷˜?¾]öÖOœ8‘eË–1}útÜÜ܈ÇÍÍÍîÁÒr¹GGÇkè”””pìØ1f̘a-ì2tèP¾ûî;Nž<ù¯ºŸŸÓ¦MãÔ©SdddÐ¥KöìÙÃÙ³gí^q­F( ›â;ÅÅÅUn9%99™™3gÒ¬Y3¦L™rOËUV&Ξ=‹^¯ç©§ž²Fù?ûì³L:•K—.ÙÅ¡÷ìÙ“ÚµksþüyiÙ²%ÖúöB©TR½zuŽ?n¨–‘‘AõêÕ«LžzƒÁÀÒ¥KÙ·o .¤eË–w5x·RN¹W¯^•JEJJ •JűcÇðõõµKOÐ`0P£F z÷îM¯^½¸té¾¾¾DFFÞqc_™"*..Æl6£Ñh(**âJ5»ØØX)**"66–ÔÔTºtérËßWRRb]ƒ1 ¡ÓéB`2™P«ÕhµZ, EEEh4šÛŠØ4™LQTT„ÅbA«Õ¢V«1›Íäååñúë¯Ç~H£F(--µKTwUC¡PàééI||<ùùùqúôit:ÿZ¾ÙlÆÁÁÖ­[óä“OR£F >̨Q£îØQét:Ôj5z½£ÑˆZ­¦¤¤¥RI÷îÝùý÷ßÉÌ̤  €={öP«V-k У;‹Åúº¨¨£ÑHii©õZn•+Ÿ)))±~Wqq1‹…ÄÄDFŽIãÆyíµ×pqq¡´´ô¡ÌXéëë‹V«%)) FCAAGŽÁËËËn™ïL&uëÖ¥ÿþ´oßžÄÄDZ´hqÇKF£ñºº#“Éhݺ5/^äÌ™3ÖßYllìm/½£V«1 èõz«½2âW«Õèt:Ìf³ÕvÞêý{ûÏë¿b“ßyç¾ûî;–/_NDDeeewu™U&îv$Ë››Ëûï¿Orr2!!!èt:ÒÓÓ™2e }úôù×=œ¸¸8–/_޳³³ÕXL˜0N:ÝñýàÁƒ¬[·Žììl¢££éر#uêÔ±NM/X°€S§NQ·n]RSSéܹ3¯¾úê-×qþꫯ8|ø0§OŸ¦°°:о}{ÆŒCrr2K–,!;;›C‡ѧO‚‚‚˜4i’Mõ¥›‘””ÄÇŒZ­fË–-´k׎ZµjñöÛo³k×.¦L™B§N¬#ó+…&ºtéòPM£ÑÈÆùæ›o¨]»6J¥’””4hÀG}ô¯—PÔj5_ý5iiiX,²²²hÑ¢ÿùÏîx6ç³Ï>ãèÑ£œ:uŠââb:vìHÇŽ9r$éééÌœ9'''ÜÝÝÉÌÌdÒ¤IôèÑã–ïåüùó¬X±‚¢¢"~ýõW:tè@`` |ðNNN¬\¹’¿ÿþ›Ã‡ãííMDD}úô¹åZÝ¿üò ;vì 11‘ääd:vìHxx8&Lॗ^âÏ?ÿ¤ÿþÖQé•uã‡J7U*K—.%66–† RZZJJJ ãÆ³Û:ú¾}ûøé§Ÿpvv¶:±É“'qGòOŸ>Í_|AAAÛ·o§C‡°xñbœY±b{÷î¥~ýú¤¥¥Ê»ï¾{[KBï¿ÿ>‰‰‰ÄÄÄ P(hÓ¦ ½zõbРA8p€uëÖ‘––Æ©S§èÕ«õêÕcÚ´i·Ô ÊÍÍå½÷ÞC­V³uëVZ´hA½zõxõÕWIMMeÔ¨Q´hÑ‚ÈÈHëg{ì1úõë÷ð8ô+ÊyêÔ)ŠŠŠptt¤~ýú4nÜØ.SÔ†#GŽP\\ŒR©$44”ºuëþ«éö‹/ròäIL&2™ !ÎÎÎôìÙggg45˜ÄÛÛ›V­ZÝÖlÃÑ£GIOO· Ú "**Šüü|8Pþ@+¾ÛÍÍvíÚÝrDe~~>ÑÑÑF« ™LF÷îÝÉÍÍåÌ™36ß-“ɧQ£FÝHH¯×“`ÝíëëKXX˜]¢WF#çÏŸçâÅ‹! ,,ì_M#>|øššöuëÖ%22¹\NZZçÏŸÇh4BãÆokJóòåË:tèÝéÕ«=zÔ&hJ.—Ó¸qã[NÄsæÌmFM¾¾¾´mÛ–£G^ÌêîîNTTÔ5¨jµšÓ§O£R©ppp víÚ„……ÙmŠ:77—“'ORRR‚‡‡M›6%00ðŽ; W‚>ÿ©;}ûöÅÅÅNGll,*• OOO"##o{9hÏž=¨T*«|Àª.\àĉ6¶³ZµjtîÜù–vJ³gÏ ƒÍõwìØ½^Ïñãǯ ´nܸ1ááá—C—¸uäRHHHHHHH]BBBBBBBrè’C—º„„„„„„äÐ%$$$$$$$‡.!!!!!!!9t É¡KHHHHHH]BBBBBBBrè’C—º„„„„„„äÐ%$$$$$$*% { ›:u*R«JÜ+W®ÄÁÁáž|׎;øñÇ¥F—¸%ž~úizõêuO¾Ëd21vìX©Ñ%n ___/^|÷ú¡C‡X»v­]dY,–,YÂ믿nyùùùüöÛoŒ3Æ.òHHH`À€vk;!:t°‹¼ßÿBCCí"oÍš5ôîÝ›êÕ«ÛEÞsÏ=‡Åb¹gýìÙ³´iÓ†îÝ»ÛEÞ?ü@‡ ²‹¼+V0fÌ\]]í"oÑ¢EL›6ÍnígOy%%%|ýõ×¼ôÒKv‘—‘‘ÁÁƒ6l˜]äíÚµ‹sçÎÝ3‡n±XHHHàÛo¿µ‹¼ÜÜ\vîÜÉÈ‘#í"ïüù󤤤Я_?»È‹ŽŽÆÁÁvíÚÙEÞ¯¿þJhh(5²‹¼¯¿þšþýûãççgy‹/fêÔ©Èd2»ÙÎ{2BW(4hÐÀnJîããc7yøùùÙM^ii)jµÚnòÒÒÒ°X,v“W£F êÔ©c7y~~~Ô«WÀÀ@»È³—ãºjÖ¬i·öð÷÷§^½zÛEž!!!¸¹¹ÙEž···ÝîÕÞò´Z-¾¾¾v“'—ËIJJ²›¼³gÏ’’’rOuÓÅÅÅn×ïêêjW[§ÕjÑétv“—ššjW_@PP]m]pp05jÔ°ëoÇ^]¡¸±Û–ÖÐ%$$$$$*µC—Ëå•VžL&³»<{õà®Ü«=å988ØU^•ÿáØY7í½ôPÙåUæß¢¤Ÿw·}ím›ª‚í¼W(*«BÊd2l7yžžžôèÑÃnòj×®m·éQ€¦M›"„°›¼6mÚàééi7yÝ»wÇËËK²”téÒ»Éëß¿?ÎÎÎv“÷ÔSOÙõ~í)O©TÒ¿»Éó÷÷§sçÎ’RVàíím·X€:uêØÕ–4kÖÌ®³]»vx{{ÛM^=¨V­šÝä <øž †*µCoÙ²¥]ˆ½ļ¼¼ìêàìÚ~õêÕ³«¼&MšH–ò*6lhWyaaav•gÏߎ½å) »Þ¯»»»ÝŸGUÆÅÅÅ®¿Wooo»:Ìš5kÚõ~íÇr{ú‰»ñ[¼éoëÏ?ÿdëÖ­$''ãââBï޽̜9úõëßõi¤S§NqñâEF··7;wîdÈ!¬ZµŠÈÈH, O>ù$AAA\ºt‰Å‹“˜˜È[o½uO~<÷•JŧŸ~Æ'Ÿ|MA™ÌL‹õYºt>:t¸ëº©ÕjÙ¿?¡¡¡Œ1‚ .ðᇒ’’ÂŒ3(++£Q£Fôë×!›7ofèСlܸѮ»$*F£‘íÛwðê«3HK+äÔªåÁ¬YSxöÙgï®m*))W°X,âûï¿QQQ"''GüF#Ú´i#V­Z%®GÇŽ…ăJ¥£F E”€‰f/œ[ˆ &‰‚‚‚%¿k×®Â`0Üô=z½^˜Ífëk“É$¢¢¢ÄÇ|Í{M&“øâ‹/D¯^½DVVÖ5ç-Z$6oÞ,=Ø‹Å">þøcáîÞDÈdÏø€ÉB&ë&"#ÛŠÔÔÔ%Ó¦MbñâÅ7}Ùl¥¥¥6×´páBѾ}û뾿  @4iÒDlÚ´éšseee¢k×®Òƒ}@8p Z4h.d²¦ ˜.` ¨Y³¹Ø´i“M»nægå...Vç.„ ¤¤…BaÓõX,”––²oß>´Z-‘‘‘R7ìçÔ©SDGÿÉÔ¨85)+{„M›ö“™™yׯÁÙÙÙ&ºÖh4RZZŠR©´ÑY³ÙÌ¥K—8xð aaaxxxHðFÁ_¬C«mŒ %àmHHбuëÖ»~ r¹ÜF- :îš)‹Å‚V«eÇŽ¸»»Û}}V¢ra6›Ù²åWÒÒ\¢à¸ÍÉÉ©ÁÆ¿b0îÞ”ûÕ/Ξ=˺uëxúé§m¾FE\\z½žçž{N zÈÌÌ"?àŸÓCÕ¸|¹Œüò“÷ NÇ‚  ¤OŸ>Öã¿ýöï½÷¥¥¥4hЀ×_ý¾$­‘¸·F3!! Ãvç­z½7IIÉ÷ôz, {÷îeçÎL™2Åæ\·nÝ(**B¯×3sæL»pIT.t:™™™ÿÐMBø“Ét÷zrr2³gÏ&""‚áÇãääd}Ó¢E‹(..&66– ЬY³ën;)--eçÎÖ×nnn4oÞ\ÚîT©^½:^^ŠŠô£órd2->> |||nY–V«åܹs¨Õjë1•JuËŸ×h4|ñÅüõ×_,]º”ZµjÙÌ-ZÍçŸÎÒ¥KY¸páuÓ6ž}úлwo›sk×®E«ÕrèÐ!>úè#‚‚‚®»Å®  ÀÆvzyyѬY3ÜÝÝ¥^…puu¥zõ(G0™ÄUºiF&SRû¦™ÞþIaa!çÎC§ÓYéõúÿ6™9s&5kÖä7Þ¸&_w@@ 6dèСDEE±eË–ë “Éd899Yÿ¥d$U”ÈÈ–DF† PÄÚ+®¹ü8}ú´±qªÿ ™L†B¡°Ñ[MTa6›ùꫯرcÓ§Oç‘G±9ïææF:uhÓ¦ Ï<ó gÏž½agáŸ×p/>HØÓ¡Ë3æiÏ"“]P†\~‚Zµ,ôë×÷¶ä988ØèÅíÜ“'Oòæ›oÒºuk&NœxÍþåÚµkÓ¤IF¿¿?{÷î½%ÛùÏeO‰ªB¡ OŸ>Ô¨¡ÎWFãÉxy¥1`@›ÁòÿÖu9ŽŽŽ6ºqÓïOLLdÆŒ(•JÞzë-üüü0 8::RVVFYY™u]H£ÑpéÒ%Ú´is]aJ¥’Ç{Lzª~~~,^¼îŽß„Å⌃C]»¶fÖ¬ÿÜÖÝÍÍíG|+ûZËÊÊX½z5ßÿ=³gϦk×®FËå¢T*qppÀh4réÒ%”Jå ·.………Iúù “ÉxñÅçQ«Õ¬[·‘ÒRGd2,[¶ì¶g]êׯOýúõ­¯‹ŠŠþg.w‹ÅBll,3fÌ ,,Œ©S§âææ†Á`ÀÉÉ N‡ÙlÆÙÙ!………¨Tª7òöö–tó¡K—Î,Y2—7Þ˜Fó7 ÃËË—_žÀ€n+ëž§§ç5þöêYÆkúìÙ³9xð O=õ«W¯¶žxùå—‰‰‰áÇ$((!‰‰‰8::2~üxé©=F³~ýúüúëFŽ=Jff&AAA´mÛö¶F0ÿ†íÛ·3wî\ÂÃÃ9{ö,gΜ mÛ¶tìØ‘)S¦€»»;*•Џ¸8ÆŽk·2•>øà=FŽÁ™3gðòò¢U«VøúúÞ“ï/,,döìÙ$%%ÅŠ+¬£ý7Þxƒ 6pðàA1œ;wŽððp»gð“¨|8::2dÈStìØ£Gb4iÕª•Ý“}]ס4ˆG}ôºÓP”––’——@dd$QQQvÏô#QyQ*•têÔé¾|wýúõ™3gF£Ñ渫«+NNNŒ=šôôtJKK©W¯#Gޤyóæ·5¥%Qu‘Ëå4kÖŒf͚ݗßÅsÏ=Gaaá5×$—ËyôÑGqss#??Ú¶mKûöíïY‡Câþˆ8pà=ý^ÅÓO?}Ó 4Hz:÷…ððpÂÃÃox¾k×®R#IÜÜÜÜ>|øM;£WOãKH܇.5ÁƒJ¥âÂ… èõexyyÂÕ¹$$î%%%\¼x‘‚‚B”Jg‚ƒƒ¥¬D¥Àl6“––Fnn.B@PPm+} ­äÐ`RRRx÷Ýy:tÆLíÚn Ò—çŸþ†Á9÷‚Ë—/³zõj6nÜNzz1´kהٳߔ ­HÜW, ?þø#+W~KBÂe„ÄøñcéÑ£ŽŽŽ’C—¸·ðæ›oòÓO‰Ñ!ÉËS“”ô-ŽŽŽ¼üòË÷¬…„ÄÕFÖ®]ˬ¥¸¸%Bøpù² Ž¡ÓÍ`Íš¯¥l÷½{÷2{ö¤¤4Ú2¶nM"9y6µhÙ²E¥½v¹ôøLvìØÉž=c±ôFˆÀ!BÐj£X±b¹¹¹R#IÜ´Z- ~Yá̾@M,–>DGŸã·ß~“Iâ¾PZZÊÊ•«HM Zþ€KññJÖ¬YƒB¡KÜ[rrr)*rl×|„ðàÒ¥"ÊÊʤF’¸/”””pùr1ày9ÒéÜïI ‰ë¡Ñh(,,@ˆn}uD&ó!55½R_¿4B@ñòòÄÕUOy­ÿ"“•âãã‚Bá(5’Ä}ÁÙY‰‡‡3Pò3”ÊÒÛJZ$!aO\]]quu ®ÑM!´øûWî Mi„þa6›ÉÌÌdïÞ½ÄÅC©,ŽP^ÄBhqrú›gŸí¿¿ŸÔ`÷ !*•ŠcÇŽqöìYBB¼9uê啨ªQž"ó4Mšø^“]BânSRR™3g9r$³Ù„R‹^_ð«¥ãïŸÃðáoUꔼ’C@°X,‹Í›PZê^áÀ3‘Ë7!DuÜÝ-´hQ>x_Êô'qOÑh4¬ZµŠ¹s?£°Ð•òeJ9rù ¹\NX˜;ãÇO¡mÛ6Ò]âî“••ÅG-ãÈ€#ŸRà(ÁÁY¼ðÂ0"##‰ŒŒÄßß_j0‰{ʪU«Ù°!£±åFF ™l7¯¿Þ‹¶mÛÒ¬Y3iËšÄ=gïÞ},Y²šÂÂö@å+ÑÙ±‹¾}ƒ2d(Í›7£iÓ¦7Í£^)zaa!ëÖ­cïÞ½äææâååEß¾}>|8ÕªUcçÎüôÓO¤¤¤ —Ë eÆŒIšP‰HHH$::“©p¥¸+BDPXXÀ#}úpöìYÉ¡W"\\\®³óÊÊLÀ•ÂNf ‹† U©x#ù•êWô²³³­Q¡PX¹‚””\\\ðòò’´¡Ñ´iSžx¢+îî€tÊ×Ï/áæv€ºÐ¼y³*wOŽŽŽ6µƒ5 EEEx{{#“ÉlôÖ`0‘‘Tm­ò^{íªUKD&; h<нDDøVÉP2™ÌFÏ ¹¹¹Ö-w …ª»BÒÒÒËåÒ–¼JhcúöíÃ#TC.ß:d²X4P1hÐU*k¡MP\YYk×®åܹs|öÙg6o´X,œ={–yóæ1jÔ(BCC%m¨D¸¹¹ñÖ[oâççdž ÐéJpssaРç™4ib•jÏÏÏçÍ7ß$<<œ¾}ûÚœ3›Ílݺ•C‡±xñb<==%…¨dôêÕ“¯¿^Ê—_~Ifæ.hÙ2’ÿüg:ÕªU«Ò÷f6›Ù¼y3û÷ïçwÞ±9'„ ))‰ зo_Z¶l))C%£yóæ¬^ý%ï¼ó.çÏÀb1Äk¯-å±Ç«R16}óæÍ¬_¿ž‰'Ò¼ys¥LHHàwÞ¡yóæL˜0áºÂ´Z-kÖ¬±¾®V­:t ÜC§>uêk ü$x{{|ßR­VsèÐ!òòò¬Ç²³³oùó*•Š%K–ššÊ²eËl*r™L&¶mÛÆÒ¥K™2e íÛ·¿¡œ¿þú µZm}.Ø{8zâ‰tìØŒŒ \]] ÂÕÕõ¾_ÛÉ“'9}ú´õõ‰'¨S§Î-~ïÞ½|öÙg >œ:ØœËÈÈ`îܹøûûóꫯÞPFNNŽíô÷÷§}ûöÒLè=¢qãÆ¬\ù©©©˜L&êÖ­[)‚k/_¾ÌÁƒÑh4Öc:î;ô?þøƒE‹1nÜ8†j3”ŸŸÏ믿N­Zµ˜5knnn׿ììLëÖ­­¯œœ¤ýÎ÷™LFpp0ÁÁÁ•æš\\\hÚ´)¥¥¥6½[Ád2±dÉŽ=Êœ9shÒ¤‰Í¬Ñ®]»˜;w.ãÇgÈ!7noذ¡~J1 ÷^7ýüü*]»×®]Ûf;Rqqñ-§FŽŽŽæÍ7ßdÈ!Œ3ÆÆ6–””ðúë¯#—Ë™7oÞM×ΫU«f£›...R™ã{Œ«««Í@¶2àîîNxx8ƒÁƯÞС—••±iÓ&æÎËäÉ“6l&“ ­V‹››ÉÉÉL˜0   fÍš…§§'Z­¥R‰B¡¸¦.MÅK\¯£W¯^½kfned¿páBvíÚÅâÅ‹ §¸¸gggœœœØ¼y3³gÏfüøñ 4ˆ²²2L&...6kïWnI?%þ‰¿¿¿MeBB)))ÿ³£¹cÇÞ~ûmž|òI^|ñE, ÅÅŸ»»“––Æk¯½†ÅbáÃ?Äßßßj7¯W~ÓÕÕUÒM‰ëêEHHÈ5~ö†=##ƒeË–¡Ñh8~ü8'OžÊ£2ßzë->ûì3Ž9‚¯¯/óçÏ·ö&‡ &MWJÜUþøãV¯^Mýúõùá‡X¿~=?þ8Ý»wgÖ¬Y”––rüøqâââæÅ_”‚$î*………,]º”¬¬,’’’˜>}z¹AU(X²d ßÿ=;vì G,^¼¥RÉ!Cnº,$!ñoPÔ¨QƒùóçSRb[(ÁÅÅ…BÁ¨Q£èÑ£‡MÉ8gggjÖ¬)µžÄ]¥M›6¬]»öš} ÁÁÁ(•J>ùäŒF£Í9///iªRâ®ãááÁœ9sÐjµ6Çår9<ùä“DFFÚØM…Bq[kó·íÐ=<<èܹó ßADD„ÔR÷œºuëR·nÝžïÞ½»ÔH÷¥RÉ£>zÃóMš4±‰÷¸HåS%$$$$$$‡.q;\=ý&!!馄„¤Ÿ’C¯Bh4Ö¯_O×®½iÔ¨=zôã§Ÿ~F¯×K#q_1›Í>|˜¡C‡Ó¤I$-[¶ç£–‘››+P‰ûŠÅb!%%…Y³Þ¤Y³(š7oÍøñ/w^ÒÍ› •O½‹ –/_ÁüùßP\\hNJŠŠ}û¦òÉ'j^|ñ…ën¯’¸üõ×^ÆŒy™ÌÌêÑ0pþüüý÷Y.|_ʇ/q߸xñ"&üý•Ù ââŽqôèó|ÿýji‹Ÿ4B¿÷äää°|ù·hµ‘@k B´ÅhìÄŠŸsñâE©‘$î |ùådg!Dg  NYYg6nÛŒJ^±¤Ó‹å1Tªp¾ür.\¸fð¤×ë­3K?ÞGÇtd²ü«ÞUŒRyž¶mÛVù }wm„n±XBX“\.· Ô²X,ÖFþç¹­VKLÌ),–àêìcÕP«8}ú4z½¥RIZZŸ}öû÷ïÇÑÑ‘Î;1iÒDfΜÂôésÉÍÍÆb©ŽƒC—™3g·ûì3 Mš4¡aÆüôÓOÝô…»»;íÚµ &æ/ÌæzWÒ5xyå1¥RÉwß­çøq BôÜ*Œm0±±ÛY»vo¼1÷Þ›w²•””àååEµjÕnè”/\¸ÀòE‹¨“žNkÊ×ʀCII,Z¸å+VÜ´,cU¡wêÔ‰ÿû¿ÿÃÝÝ'NXkKwïÞ @VV?üðÃC§ŸÝ»wã›o¶QR’wÕ(½™,‰=:!—ËÙµk7[¶@ˆ€WE»ÖáÂ…C¬^½–öíÛ3uêk×8«‚‚\\\ðóó»áhÆd2±àƒÐ=Ê“€`‚8•Š%ï¼C·îÝiРÁÛþ¼öÚk„„„››ËÂ… ùøãùøãqrr"""‚°°0›:çÐ¥‹'{öøç° lK¥qco4¡°°?^…Z4¢À—_~M÷îÝ8p ´~Ú`0‘‘L&£zõê7ŒC2™LlÙ²…¿¾ûŽ^eeVϵXØõÝw„…‡óüóÏ?p,ÅsÏ=gœÐ·o_>øàJJJ`äÈ‘”••ýÐL††Žpüø6Ìæ†€™ì<ýúu ÿþÈd26nÜ„…ÀÀ‡òµöê Á9ƒÑh´¶qQQ_ý 7n@¯×S­š'ãÆeèС×uêÉÉÉäž>ž³gÏ¡ÑÈÑéÁÍ­=?þØž«'Íf3+V|JJŠÌ—2C€íÀ~œhÙ²¥U—úégNž<þÀQÀ‚0블x™¸ÄD+¬éŠèhN=Ê‚?¤qh(;år™Í\ž ŽŽ<Þ°áéãÿuNÑ,\¸¡C‡Ò«W¯;Z[(**bÁ‚Ö×>>>ôîݛڵkW™‰gÆŒY;–Jq± OOA›6 Y°`þ5½ï'N‘!€ 4i} ކ ”GÄ~ÿýz._VPž5Nœ}øƒÐð«èA†Z,ì?wŽå}Äç+WÒõ©§ØùÕW<¢×ãä§ÜÝ™4xp•äçç³}ûv²²²¬ÇÒÒÒnùó¹¹¹¼ÿþûèt:æÏŸÇÑý¿üò ñññÖ×íÛ·¿i ÌÊFaa! .â§Ÿ~'/O££™ˆ?¦N}Þ½{Û¬ukµZŽMú]åÌjÞÔª¥cðàÖ£-[~#99hø#ã0$à„àÑŠnª¼¢Ãë¯Ñ°fõjÚ¶kÇÄW^aÚÉ“˜ôzê ˆ•Éh;`ÀmEÊßOöïßÏáÇ­¯Ï;w[%£ûí7Ö¬YÃĉiݺõ]CZZší ¤wïÞU&ÈóJ§fùò/HN.Àd†O1n\}ŠÿztFC|üy †&Øîòªígøðw­¶-++› ~­HO dàÁ,˜ˆ:Q¾˜$€:Ûü‘£O?MÿØõûïì?}šf» âår µÖVv.]ºÄ¶mÛléh4š;t“ÉÄ®]»x÷Ýw1b/¼ðÂO·{xx0nÜ8›)SWW×*ÕÃ|é¥)8 Ãdê8S\¬''ç0Ã46nü…B^¯Çd2¡Ñh0™®e,íÚµµ®Ñ\¾|™5k¶Ý€` • òp©ù\½ñH 4‚ÝþIµjÕxkölêÔ­Ë7_~‰A¯§š·7³&Oæ™gž©Éi¼½½8p M†¨­[·ÞÒgU*3fÌ ¸¸˜… þ«‰ž={Ò»wïÿ¶sJžb0X±âS–/ÿ­¶w…!ì݇Fó>5jÔà‘GÁh4RVV†N§«Hy½`K9M›6¡yóæÈd2òòòضm+EE‘@$P¨i‹ °ÍsABŸœLRb" B.—óùòåìNKÃÅÍA0ᥗ¬£ÿÊN«V­lÖj·mÛFNNÎÿü\YY›6mbÉ’%L›6Þ4YÊͨU«–íT(UÊv?Ëÿýߊ‹Û DpÅQbbLlÚ´!Cúb6›)---_ª1çëê&˜2ä)kuóæÍ¤§;U „ÎÒ3iMåUºY4™Ø¿w/ïϟϧ_Í‚÷ßgÿÑ£4oÙ’·ß}—ЦM«D»0lØ0›T·[¶l¹±Cÿã?˜;w.>ú(´z___„¨T*Ôj5Z­gggÒÒÒðóóÃÇÇçÚG!—Wé ƒS§Nqøp&ÓPþ™éŒÉÔ†}û6‹^_Æ®]’››KBB2Y:åëæµ+TÊ\TÔ¬HJJ þþþ[«ä@`ÅûÔxQ>t½DˆfÀ¡Â8øúùñÚÔ©ŒŸ0¢¢"|||ª”3rppÀÃÃÃæØ­¾ììlæÎKjj*sçÎÅÇLJ¼¼<\\\pwwG§Ó‘——Gnn.F£‘ŒŒ ÊÊʨ^½úu廹¹UYýÌÈÈ`Ïž}hµQ\‰V"”“'wrøp NNNlß¾ƒÔÔÌf3r¹³9¥¢»èX1†ÉÒP*RPP€³³3*•ŠììËÛÚä@12Ê#ƒS¸vcœDžjggg† Ê’——‡§§g•qäWpqq±­Ýʶ(ƒÁÀÏ?ÿÌ’%KxöÙgéÒ¥ jµL&yyydffRRR‚J¥"==ŸëÎ0)Š*m;¿ývZm`Eìŕٕ/¾8Nûö-ؽ{7111X,RS¯$–©\鸨Tœ())!==€€NžùäâââpvvfâĉÖ+W®D¡P°|ùr¢££IHHÀÉɉøøxÌK/½ÄƒFjj*‹‚ÿÆì^Á“IÆ÷ßÏŽIIQb±øR¾ÌBùºO3À³Â¹Ç6lØÀ¾}{©[·;v¨pÝúŠ>¥;:dÔEKùnÍ+±êz èøøã6Knnn·¼óA`÷îÝlذ/^l=>pà@ÆŒÑ#Gxÿý÷+R6S¦L¡^½z¼ÿþûÔªUëj‹¢¢"²² (_αéa±TãØ±£üüó/:¤Æl¬ÐMp ÐR¾,Tœô=z”—^z¿Š%Ö‘•@©¢ë™x_5Ö¿x„„иIëU899=pm~3Ôj5Ÿþ9iiiüñÇìß¿ßj€7n܈J¥bîܹœ={–„„2228xð #GŽdذa\{ÄÇ'a±xa‚Vd’’R›¹sçòÃ)*ªUñžÒ [¹£bÆRVa7/"„ŒñãÇãââJ»vm‘Ëeï·rŒ¸aFP8]Ñ]½2ÖÏ2årº=þ¸|X**>ÿüsk:ÈN“Êd2&L˜Àˆ#lÎyyyUú3›Íœ:uŠï¿ÿììËñì³Ãiffl 3Š]¸p‹¥”ò¿Š±HyPYY1¿ü²“¬¬Æ8Qž2Ó‘ò Ø«$éÄŵªP¨x¶oÿ ¥Kz¢¡¬=XýôÓkFþ•ýÇk±XÈÌÌdÆ =z/¯j<ñD?ºtérÙ—âb-yy½æUºYä³eË´ÚF˜Í=+Ì›…òÅœ­”`&UMP›œœNääx!“e°wïçXÌjd¤ Hy.…#ÚÀ!ÊÃäjyr9y¼õÊ+4jÔè¡ÕMÖ­[wM¤ô•]>>>üç?ÿA¯×Ûœ« ÉL4 [·ne÷î½”–êéÞý1ú÷¯ïu·ÖZ,òò²*ôÎTÑ‘´Tüí'#£kÖ,C¯ïP¡E2 1ð\1Ö†ò57 †v< ½w7ÂRFù„zfêpŠ8Úa&†ò=E!@©LFª«+O=ÿxþy:vìøPë¦B¡ ^½z7<ïèèX%w ¨T*¦M›Î7ßìê „?ýô}úüÎG-"88øº®¤¢ÛS1Ê«°Ÿù˜Í}°XZTØRs…íôÚâàðŽŽ77W Lш¨púþèõÕ)ӯƕ"œø ž(p@†…#¿‚L''LÁÁ<Éè~ý0`ÀC5“i£—âM%''³xñÒŠ&€‹‰ ޱdɧ´mÛöº•€€ärÌf=ð{ÅTwÅß劑wB…R:RžÝè2‹2™?NN¢B‰ka½)“Ac7\# ü ¤èŒÔ ‡”¯©€£2m:ubÑâÅÍV´‡‘ÿgï½Ã£,·õÿÏ;3™ô^HbH¤ÍPEETë¶qŽ ¶[,{A±`AETP@6XèR¥‡ @’@zïÉL¦¼ïóûã}&$löùþÎ1AžëââÊL2õ~W¹×½Ör8|þù—ìÙcEˆ±è³×ªZÈ_|OròŒ9òçååI@@¥¥&™“„£ë1<_„¨G¯xçH|^./ïR%“É7·Z%Z5@ê†S#ˆ®q˜©Dò=WM˜$:ÖˆfÍšE¿~ýþãKÿªgéÒ¥,]ºCNÔuRNgÖ¬ÙÈ Aÿâ¹çþþ‡®§§'¾¾Òš¥É¤§³´‘ !:H¶¨ ½üd (a˜Lxx8äï»4F®ã‡B©%Aµ ”`Öø˜ÙÌ3Ï<äI“þò[Ø.Ê õäÔ) B$pz¾š H`Ïž“”––žõïn¹åf||l2’\\)ÿ¿Jf>Cd”¹8‰·bµ^GEŵTT˜¢©…½Ð9 †"h'Dd‚›‡Þ, IDAT #%yŽ>)YÓ8•ž~ÑÎe¿tôc·ÛY½z›yµpªQTT°mÛÙ'2vîÜ™¡C{ (¥èºó±“#âZ™qØì‹^Ú ÀfGmíH**be°z¦ÌMÃH/ŽóFJÈ¥É턎UjkÉÏÏ¿äÌ/âc³Ùعs' ±ÍÎ\re8X»vóÊ_îîîÜ~û­R ì!íåÕŸãÑEÂc$6¯Ff®"p:'ÐÐ0ŠÂÂArÍô™ë|n؈@P^–ˆ.AŽDo²Œ±XÈÉÎþK-ûK9t»Ý®ò7üáíª*çœÔ¹sgfÎ|S‚²§ÌdŒÒð&¡×ˆê%]Ô_š¼$iOéÒ°f§@q@B& _‡qO=2Àªê—Ê™9RPvü8õõõ—,ËEo8-ÍnU3œ›L™ò±±^è·A2HuG¯GÆ¡×"ýÑËE=ÐKB±òöCèB¹‰O›tìV #nL£+›ðâDRÙêÊñüjk9vôè¥/ï">š¦áp8âÌ,WŒX­¶sþíäÉ’œÜ}ê[ŒÌ¶MÒVª—¡2·€Î`vª¤Ý<%) ]¼)$F3ð£€HykÜWއLŠ2ÒÒþ°Êú’C¿HN݉Œ4¢×Og!PH·n¡DDDœóoõa½>YÓ"›QÐ…p®Õ]Ì,t¥f!§… Uúm‘`Ð&8VM—#zK6¶x×±M_~ñ³>þ˜ýû÷·êÛ¾t.Žc2™>¼¯4`-³‘jªÏ;Œ¥cÇŽ²…Å"1æhq›iÝ TëÑIs­Ù0ëx]lLx3ŒÁüÊ >€ áù;Tª*Û¶nåí·Þâ·ß~k%öºt.ŽãááAïÞ½ñòÊ•Éu,@.#F$Ÿ3 vww§GèUí tjÝujd"Ø"Dô@—[îhaÍ(Êaô®¡ÍÀ:̬e0¥ŭ>ãyU ^rrsyû­·X¸`Á͸äÐÛ•CïÁ}÷Ý…›ÛFe¯4ž» <ÈÃÿíœËL„lÙ²EÒš«%è"$ : _Ïéþô&3Go࢙Æé*0_·SQìwb°k¸KªÈláÔ›dþ¤©*;>ûŒo^x￟5kÖ\²2Ùqwwgòäÿ&6¶Ø„NGV2fL2×^;òœÙSFFUUU›ÿBï¨B×m”¡«€]§TâÕ ŒFÊq-p=>>n äA``p ^Ì'ޝð¦‘Hùj[8óC@¹ÓIÉÆü4}:S'Ofæûï_Ô{þŠGQî¾ûnú÷EQÖ wGd£(kéßß›;î¸ýœ½¼¼œ#GÒe†ý“ü—)”Š.$víF¯—ö´Xbsd³í"œä䢣Ob4@¥fôòÏat¹ëG…Àž™ÉŠW_å­§žbò£RQQñ×L.Æ7e6›yúé§‰ŽŽfîÜo)+;Ldd$O<ñ)W_}õY‡Ž8NÞÿ}Þxã[„˜(©¡r`«„M…$w|¥Ýä¡«‰ûÐ<^Sñ€°`ªú7”ïÄs£ FÓ¡ý:9êm2q 8˜ì¦&¼›šÈµÛñ‚ñB&ÂbáHz:ONšÄÀôô Þ¦¦‹«TŒFã¥Z|6š£F⧟˜5ë3>„··7Ý4™G}ä¬ÓÁ„¬[·ŽG™JAAw‰7›4”‹ÑéÌZi0kd›ÞÙSb‰ÑpHÝÝMü o^¡†Õ,B£ ”ùûó³Á@`}=åªJÓÉ8!è$h•'OòÇÃ]wß}ÁµKUUQåR­³ Ÿ¨¨(–.ý‘>øßß‚ª:>üZ&O~äœ]7ÅÅÅÜ~ûßHMÕ€ÐK”é2Ë>,íä`t¡æ*ô] ½lé:A@8{R R!šF-°½p¢(¨ÞÞ¬öö& ¡§ÃÁI»ÀBপX+*ذ|9Ó#"øäÓOÿ#lí^#rÑJ 'Ndüøñ455áééyÞ/7++‹%K~Ân.:BæÓW¢«Šýed¹ ƒÁ‚¦Õqz†»ëq `? ?€{MáÛ GÓÀËduÀhdì-·pûwPYYɱ£GùþË/¹Êbiµæ¯›¤×Ö²~ýú?Ì8[övâÄ ¶mÝJII AÁÁ <˜=züGQ^:ÿ»ØìÛ·/ß}7‹Å‚››Ûy¿'»Ý΂‹ÉÏï€^4¡× ¯’™x•ÄçÉÿ”£×Ð OšØ%›t…‰ ]‡Âëxó½Ñp™ŠB|ïÞ¼ùøã˜ÝÝ9’žÎŠåËéqä9­=:VU±3%…q7Ýôo—\TVV²aò³³q3™èÕ»7W]uÕ¥Žmô„††òöÛo5—UþÝTÊŸ~ú™#GªQÕ›$#º0Ó¤Hëw}åô²O§‡¶ ™ÁïÃtМ8ÐIÿné9@Mh(S¦L¡ëå—“{êëÖ®E]¿žd!šŸÕè«ilY¿žŠŠ ÂÂÂÎûÚ­V+;wîäÀ8:ÅÅqåUWÑ¡C‡v™]ô£ÑxA=‰999TVÚΈ‘Ù«§·‰»{:¡¡aäåUpºØ <¶b±át⽄U—‡4H#8@æû!ÁÁͽðéééü2oK«gu<¥yœäùΑ#GxâÑG©:xŸ†,,LLä¥×^côèÑ—²õ6|.d^·ÓédïÞ#è­@¦3.ßÎ’A”ãë»ÿ0JJ q:ëÐEpQÀaüÙƒp2–ŽLÇ›mTáÄ\!«ÒÛ›¡Ã†OQQéééø9Òª‘È g}}}«Óg;EEE¼õÖ[üþ¯áW^ŽSQø!.Ž{}”Ǽ]0þ« ýnŽ9‚ÅÚ™#v„d‰®C¯€ûÓ¹ó0 6`³YЅĽB ¬%’BÊЕ ¾œƒ4TZß›äAƒ1b Oë«Ù¸óôT§“†††ëÐgϞͼO?ÅœŸQUi bÕ˜1¼?sæ¿ýÛ6éÐëêꨩ©Áf³a0ð÷÷'00°™zp8”——ÓØØˆÙl&44´]- ¸“™™É×_KaáIIe¶Ì–lòèfœÎãüòË¿ÈÈÈàûï`ûŽß°(ÁF¤ãat±F7žž¸¾…:¸\UÙøóÏT¾ò ¾¾¾âæíÍɪ*º ×Ó-òË^½zýÛóïO? ))Ü i˜µ©‰CûöñÜã3hß¾ÿñv²?ûØívª««ihh@Ó4ÜÝÝéСCsf'„ ¶¶–ªª*4M#00ÀÀÀ‹ŠÒ­¯¯ç“O>%+ë§'Ä)-2׿¥@ «5‹×^»ÄÄ^|ûí7¬_¿›Š ³–‰‰g°3ˆ[y˜NEA§4× „í%9™™ìJI¡C‡˜L&BÃÂÈP.UX;g00.>þ¼¶Àf³ñýüùüþõ׌¶Ùð–ßYÅÉ“|ûÉ'tŽç¦›nj—§ {µµµØl6L&Só $þìv;%%%Øl6ÜÝÝ oË”.ô8–/_Ά ¿£i^gÁ¦½†î¡'Ò½–ÀÜ/sF£¸¸8úöíË„ xùíòÉÁY˜¼l¸¯†>­åI—£káÓÑ…•<ûì³DDDè¸ÑÈéøkdäšÜÜp:hšvN'uðàArŽåfMk&°L@Mãpv6»wïfÔ¨Qíò»ÙµksæÌ¡®®EQhjjb̘1<ðÀøùù‘››ËŒ3ÈÍÍÅh4È“O>IRRÒEáÔ_=—wÞùUí‚N™‡I SEïâ8.ÍÙQ ³Yl®¹æj†ÂêÕkxóÍ/Ù¿ï9DÒ—'H £ìÞp)@2ÐŽj«ªøâ‹/HÙµ /OO8ÀQ77,v;id¬îî8Ç9©óªª*¶oÞLO»¿¦>L‚òòعs'×]w]»ÌÒëêê˜1c!Ð4°°0žxâ úôéCSS‹/fáÂ…xxx`³Ù?~<<ðÀESÛ·oS¦ü“ÂBô‰ÿYèÕn} ‘Ž*°¸EÙCCÃ-ôèё޽{3qâm¼òÊ+¬_wFIÔ{µ`)‡ 䣄`ŲeÔÔÖHÖñãT¬’¶¯N>s=0 8˜ÊÊÊóîX²d ‘MM­¶#=œN–-^ÌËÓ§·»ïÊÔ§OFŽITTV«•Ù³góñÇÓ»wo ùä“O˜8q"cÇŽ%33“gŸ}–Aƒµ+'a·ÛillÄ××÷“„²²²Xµjp“¼eºz8@æ#VIúä;Q/®¼²_óHR£ÉHyB™n[{ÝW»(òÑÊÑ+EšFÝ‚Ž* }ô*“;0N^Ù ¯NŸNØìÙôìÙó¬ï­±±¡ªœ9,ÔC‚û|»sÛú âoûñññxzz’™™Éã?N§N¸ñÆùæ›o())áí·ßÆÓÓ“O>ù„Ù³g3cÆŒ³nl‹Ç)©A?8¶¢¢"Ö®]G}}º^czZ°$&ËÑç ˜dàé$>Þ£+&“ 7·84í5 äadAd ´,£Hª¡kŽ­^;w’¹s'{ŠÂ5Bp]v7}fBÕÊÏ_}E¿þý¹ùæ›ÏúÞTUÅÞØH ¢ ˆÖÏé-Ù¥öÚši2™2dãÇ'22’ªª*ÞyçfÍšÅ7ß|Cjj*³fÍâµ×^£wïÞ¤¥¥ñòË/Ó³gOÜ®EQðññù“òÓO¿PTäƒÞAq]$]q•tcѵÞ€ƒúú{9u âãÁ××7“!™Õgò=>2Á)Š… *+‹Â¬,ÖuŠÂHéìÓÐuò¥Cß³y3Ÿþ9/¾øâ9Y¤Úš¼ÎÒ»î%±©ªj»sè†ë¯¿žääd¢¢¢HHH`È!äååaµZ9|ø07ÜpQQQ\uÕU 6ŒE‹µ9ZrÉ’%ÜpÃ-ôé3ˆÛo¿› 6PZZÊÌ™œ<œ¾}3|øHæÍ›OCCC+‡îp¸I3ÕA:ö$ôö´RôOW •t²9r8ìÞ¿››ß½™E[àµÆÆ˜b:øZö™Ûe.UŽ®v$#ÑQ@!¨‚$ô9JM2„“÷ÕìÝËokÖœshB||<~~ärºcÞµ$Óf6Ÿ3h§{÷îŒ5ŠÎ;ÉðáÃñ÷÷—ß™ƒ•+W2nÜ8IHHàæ›o&==ýœ“ÿŒ£ª*{÷îåî»ï#)i0W^9ŠùóçS^^κuë6ì’’‘˜8€W_}ÒÒÒæïºªªŠòò:% =L¼FÏé^£$AyЈټ™þý{âããC^^>Ï=7—I“Ê8”–ÏU<ÊdPŒhÕý®¢‹5«Ðõ½$?5½Ó!áè o¡è}ÀèÚù¨Š ¾>c9NËãííMTBE´î¸·EîîÄÅÆžun}{8ÞÞÞŒ3†þýûI=8p GŽAÓ4¶oßNddds²4fÌâââÚT+ª¦iœ:uŠéÓ_eÀ€¡ t/¼ð2§N"--{¾}‡”4ˆ»ï¾—ýû÷·²C‡EˆP™>ô•λ£´@tAqG閷лw>>VÖ®­å»ï¾cü7²ü—_ˆ±X¸NÚ½ò³Ø±ôÖI_‰ÍÒJû QFÈÛ³åïDƒl66­^ÍÑó Cêß¿?Fc«Ž{ÈUºtïÞ.E›¦–Ôdcc#»wï¦S§N˜L&rss¹ì²Ëš÷ zöìÉüùó±Ûím‚v·ÛíÌœùï¿?ÆÆx #‡±jÕ$FŽÀŠ" !z“›[ÌÓ©¬¬â™gž 66£Ñ‰ªÖÈÑ]!\-)£0tñÆz ÕÕÞüýïŸðñìÏpô²â *Å5t+Ñç™%Áä&Í­ÈPʽ¼p·X%Ds½Æ]Òÿ’Qåe2¾-@¯·›€ ›¹ïûlŸwLL “y„/^}•úº:‚äcex{së¤I$$$´[‡~&m~èÐ!ªªªèÖ­EEEØl6š3‡ÐÐP4M£ºººM¼~!ëׯgÒ¤)”–†¡iQ€•ÔÔ7èÛw.ÇQQÑU޵ðÖ[KÈÎÎá½÷Þ¥C‡äÕ2àt—”f¨4}è›~ìØíá|óÍï¬X± ws7Ê Ã,"x•¡”SŽ>¬xºÈÈ+ {M&œB0Ôéd@ j99ÇÙ³ç~~ûígâããèÚµ3ëÖí– ­Láa6™[ÿŽ.̼Œ´´Ze ÏýÝ‹Pç“D9¬øqZ™%mg’tÌ5Àn77šœNºÁ•œž°$YÍl\öF/iÖÉû|…ÀQVÖ¼ýlçŽ;ïdáüùlܵ‹nN'n@¾¢PÖ±#O›ÖþUîK—.eçμøâ‹øøø`µZqwwo\OOOJk#=//Ï>û‹%YfÑ„аX‚X¾|BŒ‘6ÍæÅgŸÍåÞ{ÿFHH]»veĈÞlذKVlü¥ Û&Áé”TRŒ¤Þý@i¤ àwÜýó¸a‡Bz© PÂ7NFšG%Àìf3¦ÐP‚<<ðÌÉivæguòÙ -~®5› >ïÒzƒÑÈú•+9˜M`Tw^w÷ÝÿE3{;33“—^z‰qãÆ1tèP P¥U­SÌnX­Ö6ñšËËËùâ‹/)-턦 ”߬Àb cÇŽUÑ}„°"ƒÓV¯Þ„ »¹ñƉŒŒdĈ+IIùÆFÉ 9ÑWõZdØ·QfCcd6ä ÜíŠozq3³Ð(•+Xôü~ºpÈ(¡¡ø{y!ÊÊèâtž›*­%OÕŠÂegÙ¾ÕL­+ ÆçÍ™3ùî›o8rð ³™¤aÃxøá‡Ûu°yfR1wî\ŠŠŠx÷ÝwQU›ÍF@@@+§àéé‰ÃáÀét¶ ‡¾dɶn-@ÓFsºPØ…C‡–Ëo{<®%SBDýsæÌåÝwß`üø›Y´h G¢»üû“’~ ‘VðZ\£k|&ñ9^Ä;¬äÉg6ʿ؇>?Ρ(8}|ð Ç7?ŸÎMMg-eº²y‡üÙõi[c`ày·5úøøðñçŸóõW_‘¶c¶†âúôaò]w1dÈöY rQ/«V­âÓO?å©§žâꫯÆ`0àííÝ\KhIo»¹¹•ލ®®æùçŸoþ9$$„ &œwÍàÿëIKK£¢B“×å ÑMÆ{æV"Žòò]œ8q‚ÜÝÝ™1ã ¦M›ÎÖ­?!„B4"D=Ng74mŸ4}ƒe–„þ˜Ž8R'`ÌZ‹·H¡ Ó;ØbÑ—°UU"««1ª*eBP,ãXE^2G% }ä¥P)³öc’n²ÇÆrÕˆçyùøøðè£2qâDðôô$$$¤ÍЙeee,]º”¼¼¼ÙAöÿýÉ“'™>}:AAAüãÿÀÇÇ„XZ´û9ìv{3£tæ™?>)))Í?_}õÕÿ«ZÜÜ\N*FÓ’[`SÂâ2‰––.ÔŸÊJoNœ8ÓéÄÝ݇~„ªª*>ÿüG4ÍC:ôZœÎP4-!JÐûÑ;Ÿæ}ÌÝaèJŒZ9NÔrTè% ƒÌ„¥™Ý ××ã^_O‰ÍÖ¼xÕ e9ºŠÄOü'$™#³§4Eáíûï?ïg`6›=z4ýúõ£¶¦Å` $$¤Mu^¬[·ŽM›65ÿ|âĉ ®s«ªÊ¼yóX¶l/¾ø"}úôÁf³áééICCC+Šº¡¡ww÷³:óìììV¶3::š &ü¯¶Nmذ U¥µêÇ kL?#ßs:³sgJ³H÷Š+®àÍ7§òÖ[Q\|E1 Dš¦àt–"Ä1‰Ë4O`O܃ˆÍ 契.ÒÖˬ:}KA50ðlj"¨¨Ån']Pì.±Ù(³óDéÌ÷IœVI†3ÝhdPÿþ\~ùåçý zöìÉëo¾Iee%N§S²bAm&:uêK—.m5ùî|­Ì&—óÓO?eÚ´iŒ?¾ùÎøøxV¬XAmm-AAA8NöíÛGïÞ½Ï ÊÀÀ@ÞyçÿÓÈX¯ó þ8]kñ¯å±b0èÑr~~> ²xñ÷¤§§³råJE!??ŸC‡Ò©­­%7×—VëPpØ _~c}™F¿€ƒ8ywtÐת*IÒ鬓”gÉäÈX6Q:ÿlooj›šØ¬ªxK°ÿ–1›Ímvw}XX“'OnuÛÞ½{/Ø™O™2…ððp^ýõf±[dd$~~~¤§§3lØ0 1›ÍçÄÝ{ï½ÜtÓMÿ'ïYUUrss)//;6ÏÔE¨z@RQQAMM F£‘—_~™I“&±zõjJKKq:ìØ±“ºº2Nœ0 i­ƒSˆíþœ¼2‹PhÇa«ªãÎ,ƒÆã’·mµb–¹Ôvy_„tØÛeÁ)8êæF…Á@…ÍÖ<‘ÛäéIIq1MMMçUª+ŠBhh(¡¡¡mŸ£FjØýúë¯pÖ××3wî\~üñGf̘ÁðáÛéõN:±jÕ*&“ »ÝNFFÆ ;+ÛÖ¹sçÿSÛY^^N~~® ÑÄ¥óߣ?())AÁM7ãÆDznÝ:ÒÒÒpwwg×®=””“ŸßHccØé`6¢’öÃú8êқǹîq•hÐ5D{P!çpìpP‰>ÚkzÇ]çÚf°Ìdâ”шf³±Y†Év£Õá ¢¢__ßsÒ犢àçç÷o‡#ýY'66–©S§¶ºmÇŽçvè?ÿü3Ÿ~ú)7Üp}ûö%??¿Ù`&&&âããÃÂ… ™8q"dÏž=|õÕWmâÍnذï¾[,a…^é3Nå &“CFŠÑòk¶èÖ-†uëÖ±uëÊËëð÷÷døðÁòbÞ@ff#B@B‚;þþä‘-WV´Œd«ð`]8Äq^!€ö°œÃ4!Ðåtq2ÛvAi¸$ò7±«*²&´Ï` S|¾¾¾pë­·²lÙ2zö쉯¯/‹-¢ÿþ<*÷ó0kÖWW W¢‡ÉŒG÷ŒÆ"@CUm-òŽââ ¨¨˜gŸJNN&“Bbâåôí›Äš5IIÉ¥©É@X˜BtG_Ü”ø qqqäçç£( QQQ >œü‘Å‹3hÐ RRR(++ãúë¯ÿÓ_{cc#ï¿ÿ>99Òywåôâ”:%°#„kÜ5èÒÉ#ôêu7/¾ød i11\sͶmÛβe{¨«S0›UzöôÅìfÂB‚dð²Â §| Ї,8íD_ä-³õ àNN,BM³Xª(˜… Ð…¾¾ÄwîŒwA}**H/ Ông÷Ï?óUTÿœ>ý¢›rN‡>gÎ222°X,¬\¹²ùŽ•+WÇóÏ?ÏÇÌòåËñòòbòäÉ 0àOáÕÕÕ,\¸ÂÂ(™wì@—ì„x{ñÜsSùì³ï(++Q”2<‰‰éÊÛoÏ¡¶¶B$ (õìØ±!Šhjº !ô™ØÙ'–/j¹…L6¢2–Óíl[PÉÇÄ¢ÐÈb*6ÌtçG.ÃI zE³%Qî)©øò  ®7ŽÔ­[qsscüСdeg³oÏnr8š/!OtÈ:HuïÞý/5õmóæÍ¬]»///¦L™Ò|û=÷ÜÔ)S¸çž{¨ªªâ…^@Ó4’’’xì±ÇðõõýÓ_ûêÕ«Ù¹³!®—äv̆êñöÎáÎ;oæàÁtRS—á(Š?¿JúöMfá‘“Ó!ºRRR ø™êê.1 pRVú;ŽÒT†[8€Ú,r©í¦4ps‡##@«‚Ðj=ÀÌ—™xKÒÛ Éјz FyA5å匼â ,6»vî$¶¡¡ÙñÄ Ay}=‹/æÆoüKíJ¯©©aþüùdeeñå—_òÍ7ßàææFJJ ‰‰‰üóŸÿäÃ?döìÙøúúòÒK/µ‰®(—ƒ IDAT“}ûöñË/«Ñ´1’¬^&“! 8Áˆ‰‰‰á‡VátFƒ¡ ®dÍšõ9¢âtöŒìÚ•ËÚµ¯Q_ï‰Ó©‡ˆ6ÛAŽíÛ@"p‚F*•ÝÐÅþu°1´ªpp]ï3]Ô¶Ó÷]EªôÊ~ãÆÑÔØHaV=££éÖ»7«W­Â³ºšþB4 z45±~éRž|òÉ¿ŽCß°aÃY[¢\´ÐðáÃ:t(š¦5/Vh N¥¬¬ŒÜÜšEVÖeèÚ_£Äg$UU?K4ø`àgŒc(‚DÀ‡rRYL4¡¢bçvÈÞ‚nk ¦Ü…þJªÐeu®«¹(±Xhܼ™¦ª*L?~œâ¼< Ñzµ„j%åå444´Û‰„ÿ“NJJÊ9ÛIÝÜÜ3f £GFѦlçñã™”–º¡ëŽ"Ð;Y¸æS¾ûîb¹çž¬_¿MÓ¸öÚ‘ìÞ½‡¥K÷ ª9­MŠ¢ºÚ5‹=؋ۉA—ÂõÆÁÏáë¨ì†#Z]>]„ ÷ ¹¤cå«©Eá•#y×§U TAÕ¾}Ô"³k—-£¦ €9%³%6}ª‚ìÇ_—¦ qƒ¡ÍMÞòôôÄËËS’4Ðå>Q2ÖÛHDDDó,ß'žxƒÁ€‚÷Þ{òòù»-OtiZPF¥TKP¸#øáäN<¥aË“Di,*ÖRƒ­¼L#Þ”3‡ ªØ)ó&7ôšúA!./'Y|êÚZR¶m#H:üÒä’ ¨3›éܹó_nKÕ…à®­~&!!Aè•iU‰#ä=™xzâææFSS÷Ýw_svðàA֯߆.rky]eðY dáÇ1üÐñã$!ðC° “Yò¾xî‚j?Øx%\· ŠÊt¾`z÷°¯|äí€GCý‰‚&«•´pA¤$]-TÄvìxN!âÅ|þíT¥Mà~~¾xz:¨«SeØGþ+ÆËk=îîîX,µ˜›^WWÇ[o½ªFq¦ÐXç"exr˜šš•ë Ñ_P_^¹N¡[lM2D‘Òî¥H–ÈU½ß.¯œ¸ ¥zÚ¯°®2ˆ:yäùrNBz‰Ò½6«…ð„<þBK€Úír–ððpú÷À¶m˰Z#qÍR”üüJÙ¾})))FúöíÇ“O>‡ÆjuM¤n)ä±Ki¸QÊåö¢wPv–€É@et’€9Ž.~› QÁ&~ÃÉ~þ‰‚/Wó.™ÔsLÂÞ&A>Lö¢#¹3úfìôz’— 7lòçÈädxiÉJ;:×]7ŠÙ³—`±ä#DŒD@Fã>,~øal6qqxè¡éׯû÷狀º‚ÖcX\Ç ˜PÈ%F^¸.lºoɰÁ„^‡Üì2ÕÔl‡mWš«Á´ úYu´¯oakзS÷¢¹Tä/?KLž”†5IþþQà¤Ó[%—NÛ?$:Ú‡²²ÃÑGºR;AD„™iÓ¦ÑÔÔ„¯¯·Þz+wß}äçÒºPã:zϹB=¨ ½-Ò t†ãá¶®°ž.XîB/)Ž•h?&ñê'x(ú’U§tþVôÑÄÉB4;í!¨ãt€°}ÀŒ¯ä ö»»sßwxÉ¡·õc6›yæ™§9u*µk¥®.ƒAÅÛ»«µ‘­[}PÕDÀÉæÍ«Ù±c~øuuµá†^sO–18(ݶ 3 =l—ÏwX:Ùa-r§HIe£ÏðòG0Œ­¬b* ¯‘Ï Æð" UhèjáLix[esò1+Ðå}‹å%¦* #Fæ·ß>ç.âK§mžÁƒóÚkOòÉ'_QRrM3âéY†¢Ô²¿U‚13زåAfÍzG R…Äb˜4žBæÆÎô™×]¥ó“ÆÎŠ>2Ø·6‘†ÒÄ4€Ø +®Û ôôlБo“AÁ ¬¶ä<¤qÍ–Fs«|^ƒ¢Íûï½×¬î¾tÚljå£fòÀP\|Ц&_<<ª1J(.6““cCˆH¥’õë_¦¤¤˜N:¡w8%Ñ%‘R‹®9·•¨Òñfë‚ h¨Î(;-Û’…üE:÷HôS¾´}¤eî'q­Ê„'ªEîr^±è‚:OôF»ƒòUyðÈ“O2ù±ÇþRýÚõúÔàà`¾új6+W®äСtÌf7ÒÓÓùé§ã1×\!›­3{÷®bÉ’%„‡‡c2Eàt¢7B„Èܤ}ðe*5Fp4b;¤I½þ "ÔU…:Ö‚|ê€@p…©dñ:0ƒá¼E'1!h”ÔûŒøÖ"ë2taÈQÀâãÃÜï¾kªíKç?;žžž<þød®¸b¿ÿ¾…¦&+uuuüðà Tu®ÂŠªÆpâD |ðwÞ9“)§S ï@‹ùK‰4“M@§ôDŸŒp]àæÚí:éˆ3$¾ü€ FðÚÕ×ëB¹ØÍP¯gß.ª³FþnKÞªAÞÖ]þœ {{3mútÆßzë_®ÔÞ¢( <˜+–²fÍŠ‹Kðòòâûï—’•ÕIÚABt¦±1‚9sæóÌ3àNAAºl-Tº×ÉßÄ"H§#§€áî°ª4ÖAÀˆ§ëአW½$v#¥]õG/”ŽÜGr¨4HçnlÁ*ÕJ†³·ü¿PÚãÑãÆ1ý•Wþr¬f»ß‡îííÍí·ßÎí·ßަi\}õõ2nké2ݱZ;±páBzôè‰OµµQá^ûiD_;ÑSºîMdQ&¬§RãYž¿áŒ¨±Dþ®Á|áx‘“⬼IÓ8n.¢ÖdâÅÂPùáÛÑû0döï+ƒˆH`“ÔÕÕ]rèí˜E2dHóÔ©W^yUî<ãŒaëÖµxxˆ‰ 'G“ƒgJ¥y 9 J …¬Eßê/˵¨’3œ±Ö"ã®l lQ(eâ·!®Ø®;~·à`vWVâ'ñè”WGp›4áÈç]ïtb±Xλ ðÒiÛ§K—.téÒÐt½þú·-2oš¹žÜÜ&¾ûn>¾(Š«„$¤åŠ@ŸñÆÉ6¶a%* ´H0þª¦;è3 œvNWã5iyê½½Yo±ÐS¶ eU^^X…èÆÆf|™dNûËlÞ ƒNw ±¶¶YŒxÉ¡·ã£¼œmXB^^ %%ûðóøúæPWgEQlxzºc³ýŽªî•±a].¿œ“99Øíežä¢ÝC䣗Jƒ—,ÿª H•¡Aƒªr*¸†°ˆE”–ý[ëæóàcHNîÈÇï½ËÏGâãpPi0Pe±0AŠä\ÙUàëp°{÷î ‘©ª*,Z¸=Û·ãÄu7ÜÀ cÇþ%Kmòb3™P”³aSÃfs²jÕ~› 2Q]]ˆú´8U=ŠÃqÊeîðñóÃäëËÞÂBÌÒ0ã´¾C‘¹|ªtø&‰Í½2ÔM.‡”]î”ñágg!GC~ÕH>zôQ>š9“U[¶àoµb5È·Ûîp4ÏHD>fLSéééX,– ÊQ]]ÍŠåËÙ´n uu ½új&LœHdd䥀 ØMÝ÷©ÚØlNvïÎÂݽ‰èè  ª“I`2Ua³-Fw ³Y%0:ŠãɘN€©P$÷qºÀéDW²ÛÑëå è¤=è{ÏwY­{÷&MîšKH`ö”)¤:Ä‚¯¾"­¶„ PU ´Ù$ŸàJÝôJ;32¨¨¨¸ I{MMMìÝ»—æÍ£²´”èN¸oÒ$zöìÙî´!•CW…ë®ÁÖ­ßb·Ç¢&’ØÙx`·RQ!šsi£Ñƒ¤¤^dddP]]„Iѳä“ÇŽˆ®-6ËßÎ3ùIb4}Ìk¹çnIm6I0]XU•»·ÞŒÙΔ)ElÜxqqy¼úö NžÌ¢¼¬ ƒÑȬ×_ǧ¾¾Õ{ÑUˆ šù,„à`ZÏ>þ8{ö­iœRž[°€}S§òÒK/µÙIH¥3tè:tX@nn¡ä` ’÷9 4¡i~TVº4çVŒF_ºv¥ªª‚‚ü|PüGF}]Ý$£S œRV˜Ltv8ð„æ gNôÂ’ ½7w0à)¥Y Ä›î"óæL<0€.µ]HKKãÁG¡þî»É:qÅ``ÕòåxïÜÙjý)òqM&Ó9ãššž›:•ß~K,à!_­YÃÚ+øà³ÏèÖ­Û%püÉ'$$„ÁƒغõBøK«§¢K‹"œ¦¦rsšsë°Ð0:„‡røða4MÃ]€›S£0¼€0't>NUoAÛc0P„iUõ6t݆kdöh™ï+šF‘§'¿,[Æ‘#GÈÎÎ&//^½{3`î\Ž=Š‚û÷s|áBÜÎ‚Í í0°Z­Ìýúk>}í5B«ªðÑ4v( «–,áï¿f̘1í*Ë¿èú„ ·²sçnV®Ü€Ý%á’-ó–±2šÌiRÁYIÓŽ$I3š)NÏV¿š—©Ôë„ Óhä°x A/ICnF_7*#N:áï!k×®åÄÑ£(ÙiX›žåïSúÓ½÷J>øp<“&MÂb±°ê—_ÈØµ‹B4ÏËV>> 4è‚"Ìï¾ý–Æ={¸^Ót½¿t–ÏŸÏrë„ —¬ÖŸ|’““yè¡{yõÕ/p8bdÉ'}jÿPô!À®|z#ŠZEýÁ4â\†. Ð4,’btÕ mÀ^!HQŽ) F!ˆ@_^¹Y²J±›®™t€±Âˆ¡@aŽ÷l‚@Dš‚!6žÿš2…ÇŸxƒÁ@}}=+SS‰³Ùš)Ó Èߟ;’’.h_ÀŠåËÙºt)c…hžþÕMUÙ¸e óçÍãíÿѧ—ÎÙOpp0O=õ(EE¯“•µ!‚e¨˜.Ñ6]IQ#S˜“8‹‹ñ).`(pÊ` ^hxu{w¸n Ä5žîÚh0'åƒ×¢wf€.‚ ç´ 38X^ÎܹsY±p!Æìl BÐÌÐ[náÍwÞ!88˜mÛ¶qçâÅ;\æ²…ÀE¡ÿ A^€º=';›yŸ|BÏŠ zHÛ­ ÁþÒR>™5‹^½zÕn¾Ç‹Šër8¤¦î£¢¢/¯ e‡tÜUèuH×X1sqX…¾gm´ü¿XÀ–C7ü€žš†Ñéd¤ÄHc-Mpˆ  ÍÄ(ÔØllÙ¸‘ÆM›ÕTÆ ¼Ã@ç&Žï»…—_zââbŒF#ÏN›Fvx8kM&›ŒFvùùñôË/Ó±cÇ rè»×¯'ÁåÌå ‚+*سgÏ9`\:ÿ7GUUŽ;FVV¾¾vL¦Ti«%Šz¡WMyƒ¡š†W£…>€Ø(]¿¹ÍØ0Ùít‚+ä}a·~ò\Z;zî¶­[©[u˜±»ÀØ ¢º ²NðÙo°ÿ~Eá¶Ûn#dÐ Vxxª(ìV~óöæŠ[naìØ±ÿ6 BðûæÍtlhhvæ®ë)^ÓØ´bÅ%p´S^^ÎþýiaÅÃã8º8_¢m8zÜ€Þ£Ó0r *W¢kÆj>PÜúeAlL²¤-q:ñWU®—ÉŽ·´—Fy¿o3Á¯—2KKJXôÉ'\ž•ÅH! \]YɶE‹øzÎl6‰‰‰Üòàƒ¬÷ôd›ÁÀ>`µ›j<÷üóÄÏÌÄ’M\ Ûm.×4*²³9qâDû¢Ü…TTTŸŸOUU^^^$&&¶ŸYPPм*$$„ÄÄÄó®óü3ŽÕjåƒ>àå—?.GˆA(Š+ûqB«* ‹œðÅŒw©ñ5¢‹*ŽHƒx&ÑâA¬4H»%(£Ð!$sº(Õd"²{wŠÒÒ"oר&‘w1²”ƒi¥<òðÃx¸¹¡©*׌G]M õ ôìØ‘×n¿!C†\Ý#Îs¬¾T„@UÕv+q:;vŒêêjéÑ£G« §¾¾žÌÌL*++ñöö¦K—.„„„´©÷ªª*¿þú+Ï<ó ùùÞ1@f?’-ò¡õ°€ (¸Ë65W«ÚQô’é,hö@b%9©lôΉÝÒ`¹ø*£K§N8¹ÒÒDìqð°y($•€µ¤„éÓ§„Ãf#¾kWBÃñZ­x¹¹ñÂØ±ÜvÛm” !táÜ9² g;žâU]]Mnn.UUU˜L&[e…¥¥¥;v »ÝNPP=zôh“-T999Ü~û=¤¦Ö¢«wb%68­5oy¼Ì-ph€Ž=à¤tO¥Eþ`”¶³› ,³dvÞM¦[»Ðõ&éÌÓüüèÝ«êŽ$Hœ8döíÓØÈWsæ~ø0–º:|y×]TWW£ª*·À=÷Þ{A‰ëÚä,ÉŽMkµi´]8t§ÓÉ/¿üÂâÅ‹©««Ã`00wîÜæ™Ãééé¼óÎ;Í»§sssùïÿþon»í¶6e4wíÚÅœ9 b,®.\}ßôv ™“´ž×”ÓõFƽîÓ§Eäè”·¹Ë1|®­§€2E!ð £ïµ×2j̦Ý}wsfTìÀIÇ©«ƒœ+ˆ–¥‚f3Ýn¸¯æÌ!""â?zïîô»ê*Žœ©ëäÝwßåÁôu”³gÏ&%%…°°0ÊËˉˆˆàå—_&<<¼Í¼‡ÚÚZ>üp6yy—I¦ÈUX‰~àô¸–âÅ<¼­z5\Ùxú”–}½Ù£¡èÊ‘Áõ®YÙ¿ ÏÂ6¹»啽zõjb§ÓIZZ?þ¸˜’8=Réjãe¸½rx9®– lj}¸oÒ¤v‰KƒÁÀ!Cèܹ3ÕÕÕ<ñÄÍ÷9–,YBaa!Ÿ}ö¾¾¾lذwÞy‡ÁƒÓ§OŸ6ñ***ؾ};7nÄnïzÚB¥S/G_ü|DJ°ª›Ë{B”d°”Cd¤iº 5Il–ÈG)Ao G/ožv( ão»Iÿõ_¸»»JLl,_|ñ©óçc‘Œ”kÍô~tÑqOÀMœ@Fq1¿þ:wÞyç9W'ŸëÄ'$0þøöý÷©®¯'(T²|}yïá‡/8Óo3Ý`0CLL ­;­KKKÉÈÈàoû[ó®í»ï¾›gžy†mÛ¶ý©]Ó4öïßÏSOý;#„ ]ô‹ÌOü¤ëT¤c(ÉÇ­@=aX ~—tŽ¿tÚÛ¼¼ŠŽ¦±ºš¬òrj5péx=e´¹ }Ħ— êÂÃyfÊî½÷ÞV¢Ýnç‘^à»·Þ¢´®ŽôZèjôZ}Ë|,ˆs:Ù¸fÍìÐEaذa,úåfþ9»÷ìÁÛË‹)7ÞÈÃÉGí&SªRƒW]ÅóӦѻwïV¯ñ–[ná·U«Øºu+‡ƒŽ22 ‹A]|£ëñRKKIMMmµ×þBŽ··7ÏO›F¿þýùâóÏÉ©ª"66–·ž|’äääv‡ËóÂÍf3f³™êêêV`mll¤´´ôO}áùùù¼úêìÚ¥"Ä]„UÒEÿ"ó˜8y[€Œé.ªP8J)\%£Ä2»)þvÇLyê)Þ{ï=R-bŒ¦57¿å$M´PÍf `Úpç]wýî1›Íü—Œ<—üø#n»w7‡g«Ì¨ÒPüOOBB|ø!‡EQÚœÎáÿïãããƒÕj¥©©I/¢45aµZ9yòäŸþÚ>ýt6óæmEUÇHn‘,Ñoèzói¢êЗ±„Êìçî¤Ðƒ:¡ë9òd†Óµf¾ÿ>{SSùhút’ív.—Æ­AæQÅè=½Û…è®]¹yÂ~衳âjäÈ‘¼òÎ;ÌýúkwîÄKZwí\ØüÀ§¯¯/S§Nå©§žB\`;f{=&“ ª««›Å¨555455QXXø§¾6!;o^yå#êë‡qºps\²DÇ%>#%òå¿j ˈ£–ŽgëB <<ùòþ«3 fêÓOsYf&ýeùÏ5<+MÚÐÀoH×Þx#<ò½zõúÃëŒŽŽæ­wßå믿fåO?R^ÞìÄUZ«¹5iŸÿ§eE777®¿þz®»î:f³¹Ý¤9ï'LŸ>}ø×¿þÅñãÇ)++cæÌ™ÍT÷Ÿy<ÄŽ9¨j?ôJ·ARBWH€zËŒü§»É}€h¡œ¶( ÞèB"èÚ½;/¼ø"ÑÑÑÔÔÔÐËélVæ*œnÿ±žÁÁLž:•/çÌáþ8§@($$„É“'óñ§Ÿâ4›qíy;"ù„–T.0â?Œ0ÏЋݙ$%%Q^^Ί+¨©©aݺuìØ±»Ýþ§¾®††.üMë'¿m£Äh²Ä Aš¶u’ “TûeÀe4ùc潜÷æ¾óι÷Ü{Ï!//•+WRRR‚þw^XRR¾}ûÈÌô©Ð.E…î…T|*\pl…6ùUèoc :©gär®K$4S€¢ŠàùžÏ3räH ‚Fcv敞6#uµTJhT-]Ê¢E‹j,:%•J‰ŠŠbÁ‚Œ?žÜŠîoe×C¸G7“%dnn Ž|H¥RlmmÿÔÙåär Ó§OÇ`00vìXär9=zô eË–¸»»W9¿  €7ß|Ó™1Âêa5AÈÏÏ£°°2di1n«0ž­€ÖÈdÛ°µýF@Ü‘JÓð÷ÏdÆŒ¥dfdp 6“ 0´[7&M™BóæÍÉÎÎF£ÑШšÞDBx×®|½y37®•qR(DDDð÷©SÙóé§´ÖhH¶Q¾ªÞÜtp Ã! {úéGÎÀegg³uëVRSSÍßý:LYBBB˜7o+V¬`ݺu£ iã IDATVQä¤*ëÖ­ãĉæÏ½zõªsˆ®6äääPT¤A~½³BIùäŠ ‰D²…"£ñ Cs$’"\\nðâ‹ÿÀßÏ—­›6Q\\L@` 3Þxƒèèhär9ùùæ n÷b…„ðÑâÅôìÙ{{ûZ±ÐÐP^xþyæ^¿N`J ÎÀ6þSŠ\Ž<"‚©Ó¦ÕjoïŸØØXéÏÎíÛ·Ùºu+¹¹¹æï ëçÐ+ô½÷Þã_ÿú™™™|ÿý÷DEEU9·rÓoD"ÁÃÃww¹¹,sW¸H;À “© ƒ·ÁÆFNQQžžA<ýôLÀÜÿü§<ËÑ=5sÝÜÜhÑ¢—¦©^on¤R C"aT¿~u^‰.“ɘ1s&NÎÎüKÓ¬,l5Âà鉳³3ÿˆŠbÔ¨QVÿxzzV™Ó>sæŒUB›ƒ¦oß¾!‘H˜1c111ÕžÿÜsÏ1tèЇò{ÝÜ).ÎÄ2o{埀#‚ÌcåÓ©S$©©)899óÄ3>üi5jĤɓ1 UB€á|ggGFcŽ À ‰„Àà`:tèP+gn1R>­NÇ×_}…mZþr94kvvtkÒ„ &ðXXØ#9¢îÛ·¯EÇnÇŽ îp:;;ó¯ý‹—^z ƒÁ@AA¤[·nÕžôPl§““¾¾~H¥—0™‚ï‰ñè)ŸØqì‘HšÓ¬Y1½zu$;;A ȤI/ãïïOÌžÝú,ÃÛ ç¥ö/!—ÊÍl‰³3w22Ì9×ÊgèMÎÎôíÛ·ÎY+X¼lŸ~öÉ—/¨Õbçë‹ÎÙ™ÖÞÞÌ|òIbz÷~$ó¶0cÆ ‹ïŽ?~‡žMjj* ¨T*._¾Œ^¯',,Œääd233ñðð 55•Ï>ûŒ#Fù»þÐððv´oß”³R1:/ßVéììÌŒ3pqq1Øär9z£žUçWájïÊè°ÑfgåëxÆŒǧo¿M{ÀKÌuŠL&v|÷¯LZ'}’J¥tîÒ…à–-IIIA¯×ãé鉣£#ÎÎΩò¨µ ¹9r„ÿþ÷¿¨T*t:}ô>>>lܸ‘¢¢"¾øâ nݺ…››ýû÷gܸqµJ*ñ[âáá··G…‘L¯•k(_óø8 G"¹CëÖö·ÄÅÅŬ˜µ!22’ϾúŠi“&±ýòel)ŸMzF¸vàS&Mbõš54nܸN÷­T* 5¯–èõzÞxã òóó)--eçÎìÛ·Y³fѳgOŽ;ÆÏ?ÿŒ ´oßž>ø€Ö­[ÿî÷ÙXNùòÉÊœín”oرòËo2dÈ”JeöÍûúúòÑÇó¶BÁÎmÛ°5q¢<“\ab"3&MbÝÖ­DÔ±Ó-•J øÓ®<ØüòË/üûßÿF¥R!•JY¶lvvvìÙ³•JŦM›¸rå ...ÄÄÄðÜsÏáààð»Þ³D"!88ww[rsR¾BW¡£=+:›eH¥7éÔ) »iL¸u€½7öò铟âfçV%j6å•W0 üwÁ¤j5JÊçЩT¬úðC”J%ÿ¬ÇžñÆ×ÙÞþ%úˆ#QC®ï:°nݺ?Ü+ üý› P4C§‹ |‘Ñ•ŠŸt(¡Q£›¼üò´k×¶Îò¥R)Hu:zH$„ܳÈÃß``ûÉ“ìß¿ŸQ£F‰ZôbkkKlllÇgÏžÍìÙ³ÿ€¡²æ(•>”•u¬0˜—(_|”¤"—'òÔS>|x½Œ²¿¿?R¹œ0A ÿ¿ No4Rpû6ßlØPg‡.R7bbbjœÞqsscåÊ•Èûöõõ­ØzØ®B'¯UD7K€ËH¥©tìhÏøñã« ‚rÕ¹|sùž yŠÇ<«V¾½½=M›5ÃC«¥GE¼´2öhÊÉáûï¿gÐàÁ4mÚTT"+ó§Žñ<oou…2FPžª%“ò G‡>¼ãdz˜¯ eeeä&'ã}3§âp,**¯€%"R -ZÓ¶¢sÙ´B7)ß½û3íÛ{ñïÏ©wŽ€’’2îÞ¥YEþ~é=ºÙ¸‘ >‘jñññaРAH¥¿P¾(¦b }ˆÅÁ!™Y³Þ"*ªj‡P!S0¸Õ`ž {…¬zÝ5™L$%%ÑÈhÄãWNÆS"¡$/Ïb‘—ˆèÐò°ø¼‹£ã $’¯(oæ"•:áççÏŒ¯×iqЯ±‘ËqpsCó«ï€ÖÎî‘\ñ+b7nÌ[o½NÇŽ¶Èd_Û+FBŽxz6f„ ´lÙ²Þòíííqtt¤@"±ÈuhT u\´)ò×A&“1uêT z …â;`C…3°±Q2|øÓôíÛ·ÚEf®JWž}š¦Î5®Ë-{ –JùõR•  °·ÿݧUþÔ›•år9#Gþ __>þøcRRR€ò9¢éÓ_#88¸AòÝÜÝ0v,?/_޲¬ WÊ÷Ž_“HhÁ½z‰$R}O¹"5èÖ­™7o>çÏŸC«ÕÓ¸±/¾ø"Ï<óLƒrØÚÚòÜØ±¼}ìî……x å‹ã²ÝÝywìXñ!ˆÔˆ³³3ëÖ­eõêÕìܹ“üüBœœˆ‰‰aÆŒ÷]´&“Ȩû=zôà›ví¸|ñ"¡&rÊ÷´³cTŸ>ŠAtè5+Oxx8)))H$š6mZ§p5áààÀ /¼@QA?oÞŒ­J…V&ë}{æ¾óÍ›75Hä¾4iÒ„+–“””„Z­ÆÇǧÎ[kbÐàÁ$$$°mÍŒwî ‘HPòò´itìØQl|‘ûâââÂôéÓ5j™™™¸»»ãïïo• -[¶dÆìÙ|òÑGì9}… PæìL¿çžãÏ?/îšúƒ•³º‚ %88˜÷, aìX’““iìîNHh(-Z´x$÷=ŠX›ßdgƒR©äõ3øä“$&&"—ËiJP‹ šjùë •Jñ÷÷opÀ_£P(4x0mÛµ3o; lÞœÇ~UbVDtè•Êù =zУG±ADþP888о}{Ú·o/6†È®#DPPØ«ƒ&6ˆˆˆˆˆˆèÐEDDDDDDD‡.""""""b ä‚ pçή\¹Bzz:ÎÎÎÄÄÄXT®¹rå gÏžE£ÑàêêJ·nÝêœÇ\D¤>èt:âââÈÈÈ °°=zЦMóñ¼¼ÿüslmmÉÈÈ 00ÐìÐããã™3gÎÎÎpäȶnÝÊ’%KÄí®"¿C·±±a„ <û쳜?ž9sæXœ°k×.L&K–,ÁÆÆ•JE§N8~ü8#GŽlðKa2™ÉdõÚ¦ÓéÐjµØÙÙ5(Q‡È///¾ÿþ{ Ï<óLgÿÃ?0wî\ú÷ïÁ``Ö¬Y¬_¿¾Á]ŒF#R©´^UðŒF#“É„R©¬wŠW‘?&2™ŒaÆѷo_ÒÓÓ3fŒÅñC‡q÷î]V­Z…““jµš˜˜bccùç?ÿÙàë $I œTê¶F£Á`0`ccƒR©·à>*]"‘àää„““Sµéø<==1™L”””àîîNNNvvv¸¹¹Õû¢z½ž„„Î;OAA>>>¾DGw¤yóæµ2ž&“‰ëׯ³{÷n®]»†T"¡CÇŽ <¸NU«Dþ *—ãåå…Z­®b¼ îîî"jµµZÝàé ŒŒ :Dff¦y[X»víjÝaÌËËc×®]œ²³³ñöö&&&†'žxBLöò(ØËðôÓOsýúu^|ñEÜÝÝIKKcâĉtêÔ©Þ=pà³gÏ'>^…V«ÄÁ¡”ÇoÊÂ… j•æöíÛ¼6y2YÇã£Õb’HˆÛ¼™¸£GYµf¨˜<==™8q"›6mâÀ¨Õjììì˜:uj½e&&&2þ|¶m;Fã„DRFd¤3fLeĈátê………,\¸ïW¬ ™J…Ø&—sôðaÞ[°€ˆˆñÁýèÝ»7W®\á•W^ÁÃûwï2pà@z5 ]´Z­fÁ‚øúë½ddØ&|}õŒÝŸùóç=0 d2™øöÛoùïܹ8§¤à"$K$ü¸e ï.^ÌÓO?->¸?9Ò…f®^½Ê¹sçˆŽŽ¦ÿþ„……±oß>ÒÓÓ«U˜ââbóŸJ¥Âh4Véa¾öÚÛœ?ïˆVÛˆ¡´´/2{ö¿«œ_+?ûŒ¬Ã‡‰Ñjétž()áЖ-ìÚµK|ª0L&¥¥¥ºa0,W¥RqäÈìììèÛ·/]»v%##ƒÓ§OW{¾F£±¸‡ÊéšJŠ‹‹ùì³Ïؼ9fƒ à—_|X¼x—.]âAïKll,»¾úŠÞ*Ñ@ÐË` ðÀÖ¯__íhNä÷E«ÕZè…F£i°Ìäädâââ§ÿþ„‡‡sôèQnݺUíùF£ÑâJKK1™LçìÞ½‡¥K·’žÞAè ô%=½Ë—ËîÝ»k5ºÿpölšÝ¾M7A è!4¿}›æÏ'''GT†?F£•Je¡¿Ö‹ZÐKKKY»v-]ºt1ל9r$ `Ë–-¼óÎ;s/%%%,_¾ÜüÙÍÍAƒY,žÛ¿?))%Â@Ê‹=(0ÛsèÐ’’’î[…J~úþ{Ú8V|'¡¼ddNÇî;ÅžæŒüü|vïÞMFF†ù»´´´˽xñ".\à‹/¾ ,, €F±páBÆ_%D¿gÏ’““ÍŸüq‹ì·oßæçŸÏ`0DN÷tHZpîÜ Î;GxxxasNÇ… hœ™I£{zË@ £‘‹qqàää$*ň“'Orüøqóç„„„ER4 ›7o& €¹sçbccèQ£xî¹çX½z5Ë—/¯2g}çÎ ÛéëëË Aƒhܸ±ù»ÿýïk4š@“{þ³ ee­X»vÝíÞ/¿üBiZ¡÷X^Ê«¢_MOçܹsôïß_Tˆ?ìÙ³‡üü| ?[/‡n41 UÂŒ‰½^ ŠéââÂÛo¿}ß,..F"±½G¥*±C$?p$’êbQ þ`4nܘñãÇ[|wàÀËÕétH$ +•JͺùkFŒqßÅrz½µÚˆ üZ7e‚µZÉdºï<¸Éd¢¦åEÂ}zÖ"¿¿Në¼cGùÀ¢!©J»y¯}¼W7íÐh; ‹·jÌžEEù¼/¡Û(T ŠÑvþáhÒ¤ /½ô’Åw?üðCçK+GKàÌ™3Ç‘#GP*•têÔ‰]»vñõ×_sâÄ –,YÂíÛ·‰ŽŽ®×ŸÐÐP$’à× ˜½½ü[:¤R){ô éWµvUÀ-™ŒžO•‘œeË–qäȶmÛÆ—_~I÷îÝëµã¡Q£F4iâ äýzÌ…“S ¾¾¾÷]U¬P( !»Q#Êîí()@ˈ«Tùc••ÅÁƒ9v쥥¥œ>}šýû÷#—ËéСÇŽãË/¿ääÉ“¬X±‚Ó§OÓ³gÏz/Œl×® Ri:pï´¤ ©ômÛ¶yàÿ‡……!qq!¥Â‰W:ó›€ÜÙù7)n%òp‘œ?ž•+W¢Õjñ÷÷góæÍxxxΔ)ShÒ¤ ß~û-øøøðå—_Ò¹sçz]0::š¿ý­›6 ¬,ApD"ÉÅÅå2o¾9Ù"¡MMÌ|óM&ÄÇ{á-´Z´ÀuGG"úôáïÿ»øT!ôz=Ë–-£  ///.]ºÄåË—™>}:ýû÷çÿû_}õ~ø!vvvŒ1‚çž{®^× `ìØÑ\»öwï €‰›³<óLgºwï~ßí=‰„!C‡rúÌv­[Gk• %pS.Ç®K&þã¢C„HLLdÉ’%h4‚ƒƒÙ¹s'{÷î%**Š1cÆàííÍúõëÙ¾};žžž,Y²¤A!íéÓ§qðà3ܼyAh‰ €TšH` †3^¯U¤ìí>âã¹sÉÉÌÄ[ÈHHóöfîþ#& {VŒ³tëÖ£G>𼌌 V¬XÁ‘#§ÉÎVѬ™O>Ù— &àìì\«QÛåË—Ù²e W¯^E¡PÅèÑ£E¥ü“Ã?þøÐv$,Z´ˆàààîOW«ÕlÙò-6l$=½{{911]xñÅjå+''‡õëÖqúôi´:ÁÁÁŒ5Šˆˆq¿ïŸ€Êû믿þP®§Óé0`À§¡ŒF#‡æË/×rùòíŠQwsþñ ôìÙ³Vº¥R©øñljýé'2³²ðõñ¡oß¾ 2DÜô'á~~öwÉÄâëëˬY³?>ÒÒR\]]ñõõ­uò ©TJ»víhÙ²%………Èår\]]E…i0ööö<÷ÜXzöìAQQ6664kÖ¬Ú 5áááÁÔiÓÈÏÏÇh4âêêŠØ¸" B&“ѳgOÂÂÂÈÊÊBÀÛÛ ww÷Zw>|8}úôA¥Ráää„£££˜ááwK­fooOpppƒdØÙÙ‰†RÄêH¥RöbY!‰ˆˆHuºéáᇇG½eH$\\\ÄéŸGQ?Ä&G赦¨¨ˆ½{öù2J{{úõëGdd¤˜]äwÇh4rìèQöïÛ‡Éd"<2’aƉº)ò»c2™HLLdÏž=äfgÌ“O>‰¯¯¯Ø8"¿CÏÍÍeÌÈ‘¤œ>›V‹A*eý§ŸòòÌ™LšbÓêÕ4.(`³­-{wïæ£E‹Úi‚ °óûïycêTìss±7Ù¥P°~Í–,_NûöíÅF±à7¹F¼ÿ>™?ÿÌ •Š~z=´Z¢³²XöïsñâEñ)ˆün£ŸŸ~ü‘í+WÒ3;›þz=ýõz†©TœÚ¾5kÖ ×ëņù]HOOgÖë¯Ó:=ÁeeôÕëRZŠéôiæ¼õV­Òd‹ˆݪäääpøða:‚9™¦©TØ¿_| "¿ Z­–¸'ðÌËÃçžï6*§OŸ&//Ol(‘ß…cÇŽ!äåÑF¨Lg¤Ú —ŽçîÝ»b#‰<\‡®V«Ñétfg.Z@($r²³Å”ƒ"¿Û½¸¨{‰i…nê5 T%%V)Ô!"R ±5™Ìó¢F@CEšVƒÁ"¿·ˆÈCqè>>>pU"¡ ¸l67F._¾Ì¥K—î[AFDä·@¡PðXXwmlPÀOÀ&à yç'NœÃî"¿ ”(•d%Àñ ÝüP›L~øáâããiÓ¦ ï¼óŽ9¡Ðk¯½Æ™3gÌç›L&”J%ï¼óOÔ¢ˆ” ³çÌA&—³qÕ*†étTnV›âb¾ÿæH›6mÄ"‚Ü`0póæMT*mÚ´!..޲²ÿ¯5vìX dþ|èÐ!/^üÀªh‘ËéMŸMSS‘Ý3gnx••qãÆ ÊÊÊê”bSäѧ¤¤„„„Z¶lÉÙ³g-BŒ>>>|ñÅæÏiiiÌ™3Ç\…­6Èd2Ú¶mKPóæ(Žã^í“SM:}í*• GGGñˆ˜Ñëõ\¹r™LF“&M¸qã†ÅôÌôéÓ)--5^·n‡ÂÛÛ»Ö×ðöñ¡ct4‡?ÿœF÷|/<‹‰‰ä‰aw‘J›¥P(7nãÆãرcU‹^^^xyyå[Ð.\H»víh×®].dkk‹Òɉ_‡L@©D‚‹³³˜ÈC¤ >>>lذµZÍÏ?ÿlqL¡PbŽݾ}›¢¢"ž|òÉ:_ÇÝëIy­ê{¾/j]g@䯃3fÌÀd2±aÃ6lØ`q¼I“&£ù³gÏÒ±cGët{{{L -;€ÜÅEÌã!b¦Ns艉‰œ>}š#FÔ9‡º‡‡QÑÑ\T(¸wÝp&PäïOûD£)r_î·B«ÕrèÐ!BBBê=ªäé#¸-“YÔŠ..J$ zê)Q7Eê­›.\ 55•þýû×Ù·yì1Ü{Œ„{tÓ\‚;w¦i³fâ)¡×öD£ÑÈÞ½{1 >¼Úsôz=ׯ_·Ayyyagg‡R©dò”)dff²ãûïqÍÏÇ •¢mÚ”IӦѷo_±´ä#ŠN§#33Ób*ÇÚ yrssÙ½{7¯¿þzÙÝ222,ôÓÝÝwww:tèÀÛK–°òã¹”™‰Ü` ØÝn2õÕWŇø“››k±,##êò 6l I“&ôîÝ»ÚsÔjµ…n*•J¼½½Q(3wþ|Þ~ã ¶'$à ÑPìà@³Îyûwðññâ#ŠF£!++ Ng¡O vèYYY;vŒ¡C‡ÖX¦T«ÕrìØ1ógºvíjÍ{xx°xÉv÷êŵŠ:æÝºw§sçÎâb¸GµZÍÅ‹ÉÉÉ1Wø«ðaC9tèvvvtìØ±ÆŽaBB‚Åè(<<ÜìÐår9/¾ø"ááÄÅÅ¡ÑhhÛ®½zõÂÉÉI|ˆ0)))+¯^½Úàj{÷’œœÌÉ“'™8qbÓŠEEE¶ÓÃÃggg ‰„=zð¿õëÙ»gyyyøøø0ô©§Äœî8ÅÅÅœ={–ââbów÷ŒêíЯ_¿ÎÍ›7™>}zç8::2qâÄûÊqpp`äÈ‘â“ú áêêÊàÁƒ-¾ûõ|cC0lÚ´‰:Ü·$oïÞ½:thÇmmméÚ­]»uÚ_ˆ¨¨(¢¢¢ÌŸwìØARR’Ud ‚ÀéÓ§)**¢OŸ>5žçããó@ÛÌ41Zô—ÂËË‹#FX|·víÚÏ—By¨¼¤¤µZÑh¤´´•JežÒétìÞ½›6mÚЪU+±•E**•Š’’ŒF#eee”””X¬&>yò$ÉÉÉüíoçºE*Z­•JEYYF£•J…Z­6ÛÎüü|bccéÕ«—yq±ˆÈo…àĉlÛ¶ÔÔTÒÒÒX²d AAAÌš5  ‰eÊ”)bõ)‘‡—ØIDATŠ^¯gÞ¼yäçç“’’¶mÛHHHàïÿ;]ºtÁh4²sçN¼½½yüñÇÅy¨üðÃìß¿Ÿ«W¯róæMÞ{ï=Ú¶mËäÉ“±³³#%%… .°`Á”J¥Ø`"¿½C÷òò¢cÇŽDEE™“vØÛÛ›ç{”J%ï¾û.ÑÑÑH¥R±ÕDR©”¨¨(ÊÊÊèvO(¼2yÀÀï»¶CDä·¢iÓ¦DGGÓ±cGówæ5A^^^Ì›7èèhqѯÈÃqè­Zµºo(ÝÙٹƕí""¿%2™Œ¿ýío5+°\.fqù݈ŒŒ$22²Æã~~~øùù‰ %òp@bˆˆˆˆˆˆˆý7åÞ}™ E«Õrûöm«É+))±ê~Õ¼¼<«VNº{÷®ÅV‡†rûöm´Z­øÆTpçΫyó&F£Ñjò­ú{­)Ïh4Zµ“Z­æÎ;¢RÞcëRRR¬&¯¸¸Øªµ×sssÉËË³š¼ŒŒ JJJþ°¶ÎÚïâŸÒ¡ ‚ÀÖ­[­ª”±±±V“—––ÆÉ“'­&/!!+W®XMÞ©S§¬jäöïßoõ½ãf:dÕØ®]»¬jD¬ùîX[^YY»wï¶š¼œœ:$*eì߿ߪ×S§NYMÞ•+W¸zõªÕä8q‚ôôt«É‹µê`hÛ¶mÌ$h-þ°ÉÓA@¥RYMžÉd²(”ÐP Æjòt:UkÂk4šûfª+¥¥¥VAþÙ©Üâi-îÝ&j ¬9b±¶ýôÓ¿LûŠò&kÒ¤IŒ=ú¡è¦^¯§gÏžVÍñ!ÚºGWž‡‡Û·oÿíºˆˆˆˆˆˆÈïƒryhp¼3--¢¢¢*ß7iÒggç:É¢¢"rssÑëõØÚÚâááQïò•&“‰ÂÂBòòò0¸ººÒ¸qã:…yÕj5ùùù¨Õj¤R)¾¾¾ØÛÛ›ët:222Ðh4(•J|}}-Jtþú÷•––RPP@ii)¶¶¶çët:òóóÍÅGš4irßß.ÅÅÅ¢V«±··ÇÏÏÏüûŠŠŠÈÏϧ¬¬ ©TŠ««+5†öA   €¢¢"ÊÊÊprrÂ×××|~~~>ùùùèõz$ÉÛSrss)))A«ÕâêêZcíæÛ·oc0ðóó3—ÛmZ­–´´´*«s õJ«ÓéÈÊÊB¥R!•JqvvÆÛÛ»Þá4­VKFFeee( |||,tëAïJaa!EEEh4ñõõµ(C\TTDvv¶Y÷ïMIZF£‘¬¬,Ôj5:___\]]ÍïRQQ‘Åõüüüî&Öétäää˜wøúúšmBå±ÊÝöööxzzÞ÷Ù—••‘››‹Z­F"‘àë닃ƒƒùX¥U§ •ï»D"¡Q£F¸¹¹ÕºÌuYYyyyæB5¾¾¾8::šëõz233Q©TØÚÚâíí}ß{­´Ã¥¥¥Èd2 ;¡×ë)(( ¸¸N‡5zàûs?[———Gaa!:™LFãÆiÔ¨QµÏ¿Òo¡V«qppÀ×××l‹‹‹ÉÎÎ6ÛMggg<<>ûì3³!Y³f ;w6+íÆÙ¼y3ööö¨Õj†ÊóÏ?_íÃ2 lÙ²…M›6‘‘‘““kÖ¬¡uëÖ\¼x‘E‹‘œœÌõë×Ù°aƒ º¯Cøüóω%%%…-Z°fÍ|}}1|òÉ'œ?©TŠÉdÂÖÖ–W^y…ǼZåÐh4|øá‡œ>}šääd:wîÌš5kÌFqÓ¦M:t“É„Á`@&“ñÏþ“^½zUÛž*•Š7ß|“›7o’˜˜È3Ï<òe˪œ—ššÊßþö7sûFGG7Ø`fee±bÅ ‹çÎÃÅÅ…иqã:;ßo¿ý–o¾ù¥R‰Á`@"‘ðöÛo×ë~KKKùꫯؽ{7J¥•JELL “&MªU¶¬¬ŒÅ‹Ç­[·ˆŠŠbÍš5¸¸¸åÉ;þóŸÿ””„B¡ÀÆÆ†É“'Ó­[·pVVÏ?ÿ<ÅÅÅ\ºt‰¥K—2~üx³QZºt)GŽáæÍ›DEE±nÝ: #ýkxë­·(..&))‰Ï>ûÌ\+âüùó,\¸“É„D"A§ÓѵkW^{íµj;Ä‚ pôèQ/^Laa!ÙÙÙ¬Y³†'žxÂ|­U«V™;便¥tîÜ™™3gVëÔããã™5k–ùÞV®\ÉSO=Uåš;wîäÕW_¥cÇŽlÙ²ÅjÕüöîÝËž={ÌŸóòò8{ö,«W¯fÔ¨Quî8$&&òÑG‘““ƒB¡ ¬¬Œ'žx‚I“&ÕØ©¹_çàÔ©S¬\¹’’’ 5bêÔ©DEE=ðÞAàÔ©S|ðÁ’žžÎ_|Aß¾}Í©;v°nÝ: †®]»2sæÌjÛ×h4òÃ?°jÕ*rrrÐëõ¬Y³Æœ?ÿÚµk,Y²„k×®‘˜˜ÈÂ… ™0aÂ};›† pöìY’’’èÚµ+kÖ¬ÁÎ΃ÁÀœ9sHOO7ÛN777¦NJ»víªü~­V˧Ÿ~ÊÁƒ¹}û6!!!¬Y³Æ\]oÏž=|÷Ýw˜L&ŒF#F£‘ &0hРjý„Z­æ½÷Þãüùó$%%ѽ{w¾øâ‹*Å}222xñŹzõ*Ÿþ9}úôi¸CñÅÍ/½^¯çóÏ?G*•Ò²eË:Ëúé§Ÿ8wîK—.%00S§N1oÞ<ºvíJ¿~ýê,oùòåh4>øà”J%«W¯fñâÅ´iÓooïþ¿D"!$$„)S¦ Óé˜={¶Åñ³gϲ|ùræÏŸOÛ¶m¹téo¿ý6mÛ¶­¶ò—T*%22nß¾Íúõë«ôÎÇGqq1‹-zpxE.§[·n´k׎“'OVItÓ¾}{ˆ¯¯/Z­–+VðÉ'Ÿ\m)G¹\N¿~ýèÝ»7ß}÷ÇcbbèÓ§ÎÎÎh4>ýôSV­ZEXXXµ#o…BÁðáÃQ(|öÙg5¾XË–-£mÛ¶œ}:ݺu#&&¦Ú‘på½Mš4©Z½ËÏÏç믿®—-{#GŽdèСf¸qãFŠ‹‹ «×;°iÓ&rrr˜?>^^^üøãü÷¿ÿeРA„††Ö¹³¹téR|}}y÷ÝwÑëõ,Z´ˆ… ²aƆ$ Íš5cÒ¤IØÙÙñ /Xü¦„„–/_ÎóÏ?OLL ×®]cÆŒDGGÓ»wïjåµnÝš©S§¢R©˜?¾ÅqFŽIYYüqíBÓ¶®oß¾lݺµJ^„˜˜‚‚‚ðôô¤¨¨ˆ÷Þ{/¿ü’yóæ™;Í•Èd2zôèATTGåÂ… Ç£££‰ŒŒÄÕÕNg^ Û®];«Ü›   ÿþlÙ²¥Ú Z­–ÿýï4mÚÔ"IOƒú½£‰œœ>ÌÀëUfµ¸¸777BBBpqq¡E‹8::¢ÓéêµRððáÃ̘1ìЕïæÍ›µrèR©Ô\¸&))©J/öرcøùùÑ«W/lmmñññaÍš5ìÝ»·Z‡.“É'<<œƒV9îïï¿¿?7nÜÀÑÑñ‰Fär9;wÆd2‘™™iáÐe2ýû÷·è¥öë×9sæ——W­CW(ôêÕ ƒÁÀ©S§ª8ô{ ø ¸té:®Úû³µµeàÀhµÚj3™L&öìÙCZZ“'O¶jæ=™Lfœ>}š;wî°xñâz‡ÇµZ-íÚµÃÛÛ£ÑHPPgÏž­WB˜³gÏâççÇã?ŽT*ÅÇLJ   ~úé'üÀizöì‰ÑhäÒ¥KÖ`0°uëVž~úi"""H$ >œýû÷“œœ\£Cwvvfذa”––VÕ)•JºvíjŽtÔÆ¡ûøø0tèPJJJªtxš7oNóæÍÍïtÏž=Yºt)‰‰‰Õ:t‰DB`` äççW9îî»»Y¯"""°µµ­v:ðA÷V9ŠüðÃéСƒ‹/ZÕ¡;88˜ÛX¯×óã?Ò£Gj |mmg¥988ŒM½’i4._¾Ì¸qã  wïÞ̘1ƒììl|}}(# €€€ŠŠŠ,ì¶ üòË/(•Jú÷ï§§'>>>DGGóí·ßVëÐ¥R)¡¡¡„††V›aÎÛÛ›þýû“‘‘Qëi^…BAïÞ½1 ÄÅÅY¤—Ëå<õÔSfÛéååE·nÝØ¹s'*•ªŠC·±±áñÇÇd2‘ššZÅ¡ßûLF#ìܹ³Æd=•÷¦×ë9vìXßS­ºté3gÎä§Ÿ~²žC¿—Ë—/“™™I÷îÝkœG¾Æ ãСCüç?ÿ¡mÛ¶œ:uŠ–-[Y¯^«D"±È–f2™Ðjµ\¿~Ýlœê‹Z­&--àà`ó¼’T*¥E‹¤¦¦¢×ë÷rž÷:sNÇîÝ» ªÖ™×–;wîpôèQòòòØ»w/£G®q^üAܸqƒ­[·2qâD³1þ-P«ÕüüóÏ\/!!!Œ=š… Ò¿ 9räHaÂÚ<›Ê9µJ]Õétdff’ŸŸß  ]YYYj–ïêêŠR©$''ÇêÛhêý×7™Lœ>}š¢¢"ÂÃÃ$wÇŽäååqüøqÚ¶m[íè¼6Sm;vìàÚµklܸ±Ö£¾úróæMxùå—ë=ç=vìXæÍ›Ç‡~H³fÍ8vì½zõ¢iÓ¦õz6‚ XtŒF#Z­–7nÔʡׄN§#55•¦M›š;­R©”öìÙƒN§³Ú´†µl§J¥bÿþý„††Vqæµ%77—ØØXŠŠŠØ³g£Fªwç-++‹¯¾úŠaÆU‘aÕUî›7o&,,Œ°°°zý¿ÑhD&“‘’’B||ùdƒïK&“agggþýeeeõ*Q¹÷7Þ0¿`àÀVi“ÉÄÚµkéÚµ«Å€úÜ/”Ï VöÒÃÃÃY¶l¹¹¹uvèvvvLž<™ &PTT„““ãÆ#,,¬ÁÓžžžøúúrîÜ9úõë‡T*%''­VÛ mvÖÄd2‘˜˜È믿N«V­˜;wî·ÕvtYÙ¾ÞÞÞ¤¦¦Ö9ò¦Õj¹zõ*'N4VJKK™6m~ø¡y^ÙvóÇ$//1cÆ4HVrr2:u¢qãÆæõNNNܺu«Î²¤R):ubÇŽdggckkË®]»¸~ý:mÚ´iÐ}* ‚‚‚Ø¿?%%%8;;£×ëùå—_ {h™#DåÂÀ½{÷òßÿþ·Á;o¤R©ydÞR]WòóóqvvfΜ9f}ÍÉÉaÞ¼yèõzë8ô¼¼<:ÄO<Ñ cÔµkW¶lÙBll,-Z´àÌ™3œ;wŽ)S¦ÔË¥¦¦’••…»»;©©©¬_¿ž>}úÔi¨¸¸˜´´4RRRÐjµ$%%áääDHHݺucãÆlܸ‘Çœ¸¸8²³³ïëŒòòòÈÌÌäöíÛ¨ÕjnܸL&£E‹FnݺÅÍ›7)--%55•«W¯âíí]£±ËÌÌ$''‡´´4T*×®]£¬¬Œ&Mš°cÇ/^Ìøñãyì±ÇHOOÇÆÆ77·{Âiiiäææ’Maa! x{{ãééÉ®]» ÂÕÕ•‚‚Ö¯_¿¿ÿ}&''SXXH~~>r¹œøøx7nL÷îÝ-¦fnÞ¼ÉK/½ÄüùóéÑ£‡Õ^̤¤$nܸÁK/½Ô Qå®72dÈJKKY½z5õš§T©T\¹rwwwó–¸ÂÂBžyæ™Z‡JÓÓÓÉÍÍ%33“¢¢"ðóóÃßߟ1cưlÙ2:tè@“&MøòË/iÙ²å}çíL&ׯ_§¤¤Ä¼F$>>œÉÊÊ"//¬¬,Š‹‹IHHÀÃÃæÍ›W+O«Õ’œœlᦦ¦OóæÍIOOçÍ7ß`âĉ”””PRR‚‹‹Kó”*•ŠÔÔT Ðétܺu ‚ƒƒ¹zõ*™™™a49wî üýïà½UÖ' €iÓ¦ñ /˜Ï]ºt)—.]bÉ’%õ^/REEE9r„èèèzm˽—Ž;KDD>>>æ-T‘‘‘õêl%%%™€9s†íÛ·óÜsÏÕz­V«III¡¨¨½^Ï­[·ˆ'88˜ÈÈH 6l`È!œ?žøøx^}õÕû¶Uzz:7oÞ¤¬¬Œ¤¤$ Ád2‘’’Â;w())!==Ýl·îQ¸sçyyyf[wåʼ½½ñòòbÕªUlÚ´‰É“'ãããCjj* …¢Æ¼wïÞ%77×\›ýêÕ«¨Õjüüüøá‡ðóóÃÍÍ •JŦM›puu½ï»XݽyyyÑ¡C¾üòKsT¸¸¸˜0kÖ¬ò-΂Ø¿¿ÐªU+áÌ™3 ’“-Ìœ9SèÒ¥‹)ôèÑCxÿý÷…ÜÜÜzÉ;tèлwo¡}ûöBïÞ½……  ™™™u’+DEE -Z´”J¥ „…… ¹¹¹‚N§~øáó5zõê%ìØ±C0 5Ê[¿~½.4kÖL°··…Þ½{ Brr²Ð«W/!((Hpppš4i"DGG Û·o¯QÞ¢E‹„°°0Á××Wprr‚ƒƒ…1cÆéééB¿~ý;;;!44TÂÃÃ…!C†çÏŸ¯QÞÌ™3…ÐÐPÁÓÓSpqqBBB„éÓ§ ………Â+¯¼"tíÚUˆŒŒºté"¼üò˹sçîû{ÇŒ#„„„nnn‚›››*|øá‡‚V«µ8ïêÕ«B›6m„S§N Öäý÷ߺté"äçç7HNYY™°cÇaÀ€BTT”СCaøðáÂ… ê%/''G˜6mšÐ±cG¡sçΘ1c„3gÎ&“©Ö2fÍš%´nÝZðòòœ…V­Z S¦LJKK…ââbaþüùÂã?.´oß^˜0a‚pùòåûÊW©TB×®]…V­Z ööö‚¯¯¯*|÷Ýw‚J¥,X`ÖÊë?¾FyIIIB§N„V­Z J¥Rð÷÷Z·n-ÄÅÅ ëׯlmm³n†‡‡ K—.­Q^\\œÐ¡C¡eË–‚­­­Ð¬Y3¡uëÖBJJа{÷naÀ€B‡„: Ö®]+h4šjeݸq£Ú{;}út•sçÍ›' :´ŠÎ6”³gÏ íÚµvíÚÕ`Yׯ_&Ož,têÔIˆŠŠzõê%¬X±B(--­³,½^/|ûí·ÂOûì³ÂíÛ·«•µ`Áá±Ç³°ÃãÇ „wß}WèÞ½»%têÔI7nœ'èõúïíÕW_BBB,îí7ÞÔjµÅy………BóæÍ…ØØXAáÿò¡™&U‚IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_smellit2.png000066400000000000000000004703371202542755000210710ustar00rootroot00000000000000‰PNG  IHDRôÅ¢‡6sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ  f¡A; IDATxÚìy”]U™öûŒw®ª[sURIÈL’N˜2 ¢ahDÔAA´—-Í M/éoéÒÏÖ4‚.A@Ò6£C>&IB I3‘„T¥R•ÔtçéLûûãœ{S%hK·ÚŠy×ÊJÕ=ûî³ÏÞûžç}÷)äQÊå²|øá‡å׿þuyÓM7É-[¶üÁï±{÷nyùå—KÇqÞÓ÷žþy¹råJ)¥”^x¡,‹ïÚîæ›o–ÿ›â8޼ä’KäÈÈÈ»Ÿþô§rppð÷n¿råJùüóÏùìÁ”«V­ú?O&“‘^x¡L¥Rÿí>FFFäYgõ_¶ûå/)ðƒÈ£ò—%étZþèG?’_ÿú×åÍ7ß,{{{ÿà÷øÕ¯~%ÿõ_ÿõ=鍊n’<òˆìéé‘W_}õ»Ú¡¡!¹zõêÿÕ9Ü¿¿¼êª«¤eYÿí>Þ‹í«T*ò’K.‘óùŠ+ä‹/¾øžî;88(/¼ðBY(Þõú®]»äç>÷9éyÞÙWww·¼ð ßõÚÀÀ€¼üòËÿGsôç&D¹ï¾ûØ´iW\qù|žR©ÀÐÐ{÷îEUUfÍšE8fdd„l6K&“AÁÌ™3Ù³gÅb‘9sæ`»ví"ÓÓÓCgg'ãÇ@J €çyìÝ»—¡¡!¦L™Bssó˜ñH)Ù»w/###äóùÚçW_}5†aP©TxóÍ7©T*L˜0)%wÜqóçϧ½½ñãdzsçNŠÅ"'N¤½½Û¶Ù»w/áp˜þþ~¦OŸNCCìÝ»—H$ÂìÙ³Q…žž<Èøñã?~—]v†apTþ2ä+_ù &LàÜsÏe``€\.‡”’ÔÖ·ºo»»»Ñ4¾¾>èêêâ7Þ  1sæL\×eÏž=„B!:Ä´iÓH&“cîgÛ6Û·oDz,fΜI,sÝu]ÞxãZ[€¦¦&.½ôRE!N³k×.¦OŸÎ«¯¾Ê=÷ÜCWWÓ§OÇ0 öìÙƒëºÌœ9“D"A>Ÿ§¿¿×uÉçóÌž=›P(„”’ýû÷ÓßßOKK “'OFJÉÎ;Éf³µñWÇ\(èìì¬éEU~ö³Ÿñ‘|]×)‹lß¾Û¶™º»»immeÒ¤I!Èf³ìر£¦×U½-ù|ž—^z‰ÆÆFŽ9æ:„”’ŽŽŽÚ³M˜0H$ò®ßݽ{7–e½cívíÚE.—ãØc%ÖöÈÁƒéì줫«kL_£×iÆŒ477ÓÖÖÆ‹/¾Èâŋߺ£~õ«_ýê«ó§žz Û¶9óÌ3™1cFm‚þóŸ³k×.^ýuyä–/_κuë¸êª«‡Ã<ðÀ¬[·ŽÖ­[GOO‹-âÊ+¯ä™gžÁ²,V­ZÅÂ… Q…7röÙg³zõjþó?ÿ“r¹ÌwÜÁI'D"‘¨gݺu|ó›ßDQ~øa’É$þð‡¹ì²ËøøÇ?Î7ÞÈÖ­[Éår ‹ÅX½z5“'O&S,yüñÇéïïçöÛoç„NÀó<.ºè"†‡‡éééaõêÕœyæ™ìÝ»—/}éK¨ªÊ›o¾ÉqÇÇsÏ=Ç-·Ü‚çyÜsÏ=Lš4‰}ûöñ­o} ]×Ù½{7³gÏÆ4ÍÚ˜¿÷½ïqÎ9ç0~üxî½÷^zè!ÇáÀÌ;—›o¾™Ç{Œ¡¡!n»í6Î=÷\žy殾úêšxúé§ihh@Ó4¹æšk(•Jlܸ‘Ý»ws 'ðo|ƒçž{ŽC‡ñ‹_ü‚³Î:«0ìØ±ƒ»ï¾Ã0øÕ¯~Eoo/3gÎäÒK/墋.BJÉç?ÿy–,Y2Fén½õVzè!\×eÿþýÌž=›ÿøÇ pøða~üãsúé§³víZ6mÚĉ'žHOOßøÆ78ï¼ó¸êª«xþùç)•JÜvÛmœp „Ãa}ôQ>ô¡qÝu×ÑÞÞŽ”’ë®»Ã0عs'3fÌ ‘H°yófêëëß¡ÜGåÏWîºë.æÎËÉ'ŸÌŒ3hjj²,î¿ÿ~úúúøõ¯Mww7 .dÕªUµ€uÕªUìÝ»—îºë.ººº¨««ã¢‹.âÀ:tˆ;}èCôöö200À‰'žÈ 7ÜÀÎ;9pà=ôøÀÐu½6žÛn»G}”L&ã>ÊâÅ‹‰Çã|ë[ß⬳ÎâòË/§P(pðàA ௯õë×ÓÞÞNgg'¯½ö[¶laïÞ½¬^½š|ä#ìÞ½›Ï~ö³¨ªÊÆyå•WX¶l?ü0·Þz+BvíÚÅßüÍßpË-·°nÝ:Òé4wß}7Ë–-ã¾ûîcÍš5X–EOO ,¨·\.óÃþ‹/¾˜x<οüË¿°k×.Òé4…B®®.V¬XAOOÛ¶mcíÚµ|ðƒ䦛nbõêÕ(Š‚”’5kÖ0yòd¢Ñ(©TŠn¸€x€ºº:ZZZ¸òÊ+9|ø0Û¶mcóæÍ|ò“ŸcsŸ|òIž~úi~ô£ÑÑÑA±Xä;ßùgŸ}6ù|žK/½” .¸ f÷ªvöœsÎaË–-lܸ‘îînn¿ývN?ýtòù<ßÿþ÷q‡W_}•5kÖðá˜gŸ}–ï~÷»xžÇêÕ«éêê"òôÓOsæ™grÍ5×022B__¦iÒÕÕ…¢öý÷ƒüQúç?ÿyn½õV.¾øblÛæË_þ2gœq‹/æ±Çò,6nÜH&“àä“OfÅŠ¼ôÒK¬ZµŠ[n¹…ÞÞ^®¿þz®¸â TUåsŸû‹/f„ ÜsÏ=\z饵ÈùŽ;î`ÅŠ$ :Äš5køÂ¾PCç÷Üs×]w'œp¼üòËcÆ{ðàAæÌ™Ã¹çžK{{;š¦ÑÖÖÆ?üÃ?P©TصkÝÝÝxžÇúõë9óÌ3I&“µû^~ùåôõõñÃþ/~ñ‹,_¾Çq¸óÎ;9í´ÓjÑíOúS–.]Ša,[¶ŒiÓ¦ …ÆŒiÇŽLž<€Ã‡ÓÔÔÄgœÁĉk}<÷Üs„B!®½öZÖ®];f.…üâ¿à¢‹.bÊ”)ÜqÇÄãq,X@>ŸçÎ;ïä‚ .`Íš5lܸMÓjhä7夓NâË_þ2###üÝßý—^z)Ç|˜ÖÖV–/_þŽ`µT*‘ÉdH&“H)9tè‹/fùòå´¶¶òæ›o’Éd¸õÖ[±m› /¼îîn„|êSŸâ‚ .àÆo¬=Ãå—_ÎâÅ‹9öØc©¯¯çž{î!‹áy_ýêWÉçó¼òÊ+ﺞŸúÔ§8ÿüóY°`÷Þ{/·Ür …Býû÷³iÓ&N=õTâñø»~wîܹ8p€þþ~R©[·n¥½½¶¶6¾ò•¯ „àoÿöoéééáöÛogÙ²eL™2Ó4¹÷Þ{¹öÚkk¶hhhˆÓO?SO=µ:&MšT[÷ƒ(Ìθá†xüñÇùîw¿Ë7ÞH6›å’K.¡µµ•~ðƒ$‰ߨØ€a466¢ª*š¦áyž?XE¡¾¾€d2I.—C§§ÓiúûûÙ·oS¦Lá„Ns½R©Ôè´ß¤Ýnºé&ù?ÿçÿ°råJÇC!}ûÛßf×®],Y²„™3gR(ˆÅb„B!„躎ëºd2™1Ô³”’L&Ãàà ûöí#söÙgsÖYgq饗rÿý÷ó±}Œ¾¾¾± ¤(µç¿êª«X´h7ß|3—]vét!¦i"„3'­­­ïJ¥ÓiŠÅ"ûöíc``€ /¼)%¡P]×BÔæøÝÖSahš†eY|þóŸçÎ;ïäg?ûçŸ>šv$F¬Î_8CÇE£QÂá0Š¢ ëz­]õ9mÛ®¥Q èEüáp˜J¥RC!¶mÇB°`ÁþùŸÿ™§žzгÏ>»¦¤žçIa•?9æ˜cø÷ÿwÖ¯_ϧ?ýi¾öµ¯ñÖ[oqà 70kÖ,–.]ZÛ_Š¢ÔR\áp¸¦×¦iÖèñH$RÓÏúúú1é¶b±H¹\fÿþý¼ýöÛœuÖY´´´ŒÙÃUýBÔîU!«W¯¦¯¯Ï}îsÜu×]ïHS}ùË_àø---µ=ÜØØXÓ_Çqp]×uk6JA©T¶mzzzØ·o ,àØceåʕ̚5‹ï|ç;|æ3Ÿ©éËèqyž‡¢(¬Zµ ]×Y¹r%_ûÚ×(•JD"‘šþUÓBˆ1Ï>Ú~¤R)Òé4ûöíÃq>ñ‰OP(ˆÇãµ~~3UQ•êšTm}(âŒ3ÎàÑGå¾ûîãâ‹/~×ïI)¹þúëÉd2,[¶Œ®®.ŠÅ"uuu(Š‚ªªD£Q …™L†¡¡!öíÛ‡¦iœwÞyµ¾b±ßÿþ÷³NÕ9:êÐyæ™gX·n;wîäÍ7߬Ѿ•J…qãÆÑßßÿö»¤J»½þúëÜ}÷ÝchMÓ8í´ÓPU•%K–Ô"ÉÑŽñä“OfõêÕ¼ñÆÜÿýïèË–-Ì™3‡‹.ºˆ}ûöaYÑh”W^y…¡¡!2™ ãÆCÓ´ßVåœsÎá?ø¯¿þ:›6m²,N;í4\×eñâÅÌ;—ææfvîÜI$áÓŸþ4Š¢0222¦Ÿ9sæÔœÓ+¯¼Â„ ¸ä’KÄu]¦NÊüÇðòË/³víZN>ùäwŒ¥¾¾ž×^{ÞÞ^>øÁR.—™?>'t´µµ‘L&yä‘GxþùçyöÙgßõ™ž|òI6oÞ̃>H[[õõõL™2˲xá…X²dɘö¦irì±Çr÷Ýw³cÇŽw0"£eÊ”)<÷Üs¼ñÆ<ðÀ5£÷»Œþ7¾ñ ¾öµ¯ñÚk¯ÑÝÝmÛ|üã§­­ÞÞ^öîÝ˱Ç{ÔKþɃ>ÈæÍ›Ù±c»víªÕU„ÃaZ[[Ù±cǘ`þ¿’ƒòóŸÿœ—_~™7rüñÇ×®M›6¦¦&&NœÈ’%K˜4iÒ´h³gÏfõêÕlÞ¼™'Ÿ|òNç•W^áÔSOeùòåµ:”B¡ÀŽ;Èf³5{W*•عsçogµÖæ'?ù ;vìàÅ_¤¥¥…©S§’L&Y²dIíçmÛ¶1uêT.¿ürvïÞã8cú©¯¯gxx)%Û¶mcáÂ…|úÓŸfÛ¶mLš4‰C‡±aÞxâ‰Úø~SÂápÍöwÞy¤R)N>ùd,X@[[Ó§Ogß¾}lܸ‘Ç{Œ·Þzë]Ÿëþûïç7Þ`õêÕ5¦ì£ý(?ü0 cR{¿)…BqãÆáº.¯¿þzíóW_}•uëÖñë_ÿšt:ͤI“øèG?ŠmÛœrÊ)Ì›7oL Uuî—-[ƹçžË¶mÛÞ—öášC/—Ë<ûì³lÞ¼×u¹úê«innfêÔ©<öØcD"æÍ›ÇÂ… kÈmÊ”)ض‚Ù³gãyår™ ðË_þ’E‹±iÓ&.\ÈÇ>ö1<ÏÃuÝZÎmçÎlܸ‘t:ͼyóÆDsæÌ¡··—­[·²téR:::˜9s&©TŠE‹±sçNÖ®]K?_üâ7n“&MâW¿úRJ>ùÉO²nÝ:z{{Yºt)'N¤««‹R©Ä¼yóPU•\.ǬY³˜?>ªªòôÓO344Ä‚ X´hCCC¬_¿žþþ~fÍšÀc=Æk¯½ÆYgÅI'4&bŒÇã¬Y³†ÓN;žžžxâ Þzë->ó™Ï0cÆ –,YÂóÏ?Ï›o¾É¾ðfÏž]c"ªTý”)SX»v-¬QtO=õ;vì µµ•É“'³dÉ~ýë_“J¥8å”S˜3gÎ4RUú;w’ËåX¹r%±X !‡¢­­ÓO?ý{`éÒ¥lݺ•Í›7‹Å˜6m…B¹sç¢ë:Ùl–3f0eÊÇaÓ¦Müñttt0oÞ<2™ sæÌ!R,kt[>Ÿgùòåüñ<öØcLŸ>'Ÿ|’­[·ròÉ'sÆg`Û6·ß~;×\sÍû* ¿KUG^}õUÚÛÛùÒ—¾T+ Ú°aS§NeêÔ©ÌŸ?Ÿr¹Ì„ hnn¦T*ÑÔÔÄøñã±,‹p8LWWÏ>û,Ó§Oç…^ࢋ.bÁ‚5™5k'tëׯgË–-!8î¸ãÆ0MK–,á™gž¡¯¯¥K—Ö ª,ËbîܹlذM›6!„àK_ú---5Ý?~<§œr O>ù$¥R©6ªÌÒìÙ³kì݉'žÈ¢E‹èééá¹çžCJɼyó8õÔSy饗xá…(‹Ì›7¾¾>ž|òIvïÞÍ•W^9†v×4ÞÞÞZ¡ìÖ­[yæ™gdÅŠŒ?ž¹sçòÔSO188È5×\C{{;¹\ŽI“&Õ˜Ò‰'²fÍš­mYk×®­¥&OžÌôéÓyüñljF£ÌŸ?ŸùóçIV‹Öžyæ&NœÈ%—\‚®ëD£Qžxâ .»ì²šf+•JÌŸ?ŸãŽ;ާžzŠT*Å©§žÊôéÓI&“$“IÒé4Û·o窫®ª=S*•býúõôõõÕ@]užþùÚ¼þã?þ#±XŒþð‡œþùtvv¾?”ç/©$ÿ3ŸùŒÜ³gÏ_ÕÏóäW\ñ?:¶öÇ”§Ÿ~Z._¾üÏr]Ö¬Y#ï»ï¾£çÀþŠ%•JÉ /¼Pf2™¿ªçîïï—×_ýŸå‘¬R©$W¯^-Ï?ÿüßz\øO!rÅŠïùÈóŸ³ù›É—ß’ËØ·oår™iÓ¦©ýSÊ /¼À¬Y³~kÅQùÓËš5k7nsçÎ=:G…J¥Â[o½E4eÒ¤Iÿëã±,‹—_~™… þ¯Ù­£2VJ¥kÖ¬aÑ¢EGOŸüå÷rèk׮婧ž¢¹¹Ã0¸âŠ+ŽÎÜQ9*GåTéªU«Ð4½{÷òÙÏ~vL¾ú¨•£òÇ•ßëØÚÃ?Ìõ×_OCC×^{míèQU‰ÊQù‹Žj…x×ï&àÁømTUåÊ«®ú«›ÇB¡Àk¯½ÆwÞÉþýû¹í¶Ûj]JÉïŽÊQyߨŠõë׳mëÖßÙfê´iœuÖYZ‡^­05MEQ(—ËÄãq^}õUæ|  ˜7æ.„< I¡HdYÅl+P§fQ5EJ âb`aR!B89\TZä–0HŤB…*.*}¯§˜8'ŠŽƒ‡ÀAC͹’^ )@Ø€*q ¸غ†« ÏÁRtEE A ,¡#ØèX(HŠ„H$ ‡»+Ä4b …IˆaÊ ã¡à #O†.*#‡H%”ˆà¢`b1HQ ”ƒç±1Q"OŒ( l;ôÑx@ØÔû÷$4m²€ðǕ˳ÝÐ? Sæ/á¡Ç7ü^ ³gÏÞºöZÚ~G›Í¦ùWéЫÇÈTU¥µµ•ÁÁÁÚµÿûÍoñ/ÿºÚ4˜»m^ áH‘¨–'.r´ÊC4 r„(á¡àI•YC»q£àª ަ¢H¢Á’yÅA§‚‚‡†C™a·L8ãÁ±íh¸þfêÝ0)ûF‰A —qýlnE’¤F AÔ-b–DY¢d@Æý½$Füý+벿½^ï†9óü»IDD ö§dÓß“²¬¥o%Q£@gÏ“—Ù@ÝÜ LgYÌ)g(éã¶ƒÚ Ùz“·‚²&™xœ3ê` ?²0‚ GЂ$¾µHÇsEh…''\ÈÎúShUÞæœöç‡ ô(]”e²ôœ8§¼•¦ó팯9`²ö"þß”+QF,æ|è ›Þ¦H„!šˆ‘ç„~‡…»BHC"F`OC ÿ6ûbä™H7- 'Jš@Ò`¥™ýÔ6:'J:÷ØV\ã›—œK%j£Àx`R¡Ž 2”ˆð¡_ï÷mMDÞ_‹‡>°ÞÎ\Tfó9âdI'Ç)ùý9(zl±aÜtøÙ{8,#þ ;øsã¿—C¿è¢‹øÎw¾C$aÙ²ecß¹»P@S'üÇA?='â[´m ë¢Qb¥ ²›ýL–Hœ”fd¤#\¡¤Di"ç%È(þDæeŒqŠDÉPG„"QòôÑIˆ2™„Ç :C4a`‘dË5QKC8H!ž@”ÅF?òD‚^rÉ„ãØBÇE%* 8B#KyR4P ‚…Àgd$¥…Éc¦„ÎA:ÐqбÉPG“4õ4‰¨H.Z ‘{(h8xÁo‰@R"Œ‹ß>I 'p . ÑQí IDAT„J„4)ð54î3 þ3h88hƒá"ˆbRñѼp¨hYD(R&Lˆ2IwÏU©˜:1·@C)‹žó¨©è¶ƒZE´Z€~+¾!ÊPÂd@+:hxh¶‡8(´ œf!AT¤=$R€r<¨‹ûm•òÔN ”ˆ!ý¾rA`¡ß­öçŸ+Á5-pîn€äËÁXÔ`<ÕÚ(NÐö½8®À&ÿ”ê}(‘H„¥K—rà 70<<Ìõ×_?ÖºMÓ!Ý/õ gNIJø†Š A*”$fä(ÅA#A=`¬”<¦‹vQ„GY a{?OQt ²Ô‘'ŠP$ÍúAÔX„a ,Ê„°0ˆ‘ǤB‰v`rmô á‚Døº*l¡#|"áûL©ù¾ŠÑ•D]ðsõ¹QûÑ 6ì_+ØŸ‡=Áþ±<"y §ÎßI2àíp= ús,GÑ)‰05†JP •¾0-›’n"¥ÿi JÅv½BÙ £ %@¸¦¬ xž¯g%¨8&%¦l‡ +%„êá Ð!ŠDð\eŒÞR‘ô é -(‹%B S ŠŠ‹åþw¼€±sÀuUr$pÑH‘%L‰4õµµq=¨!D9!È’ Hƒ6ú±Ñ‰P ­6÷¢rĤd‡iE"Pñÿ~…‡B™:Š-e‰° ,A·ÿ Å1§ÿ'wè ,`úô鸮ûÎ sH8±6öÂ^"ìG®û@¶ª”Zâ°ÇGi¡7Ý… Q‰ái‚ð¤ÅR 3V¢NdèÑÆ3D#:61òÄȦD˜T-i£—>Jc*b„Båݨ¡zØšŠeêØBC¢ âà •|(BQDpP)A^M™môZ¤ª ñP(ÁF£yV#žÐ›"tl4\J„É’¨yb„(ã“ 1°PðL*èØ8¨TQ!„ŽMœ1òº®%Ž…Éü%¦Ø§ÿ«Ô`”" ‡ÚùìAõ^*†V¡aJ¨8è8”•qòDq1\£ä‚„E§èˆ¬í+fÕ€‚Ý’ ²JÒWxµâ¡È€N/msÁÞ°‚ôG5TÍ • kÙo·xR@_F‚ÏJ@¨é;ët€¬­ ÿª1¬öW¥Ø• o´qƒëÅ ª!µ}#¼¤^yý(BÿíùÅÏ~ö³är94MËä©sAëÕrÚxtœ4 ÷Âô:úfLâPçx¨sHÖ "¥BRÁõTþ¯ü®ªÐ¯¶×ÒJYâô0ôÒÈp ¡k8d¨Gz#Lm¬c„:6)êÑ.¦D¤øVjŒ\…\SôrWt¢^Åñ|ã«€Ôü Š#ׂE7üý»d¾¿I¤ ^Ô„¿—‰ÿ‡„¯hj+àI?ˆuó‰ ž­²»{ZÅ\óu¢mä‡Y ü5é¶+¾šþ?{»I^‰QnŒ_#GŒE›m‡ŠË vÖ€•;ixZ°Ž8¶D¼–µùËFèÀo}­RúóƒÀÜñðêH5Â)ÿéûv_õd/§QÜS‡ TÃAzÐÛ?3RBum†d;Å rZŒf†( ÒL<ÈKž*ØÏDôÀ*»h¨¸LJôRŒ8šBE5°5œÇ–:.eaRVLT\ŠD±Š¥Œ‰àæ!šjJ>ÚY ÅÏÇhØä‰¢L+‡É$!ÊAzÀÏç•¥ÿr…(EBT0°È’ D“ F°ilt *D(¢a“%‡BŒaJTTŸŸˆ“ó#a#ôBЇE“1$ £@šzŠD®X¨¸4&"‹DMX„ÊŽªRŠeÃõ–QÏß!©À1†*=ØØ2& C"CY–x:¨MÃt‚Í…Nª¿7R®Š¡«fð»r$ÏÍxð4PÔàÞÕ\x4h‚à¡>ø¼)pÜF`8E ü2pìF°ëK~Ÿj{€ŽÞ£Òuè¿Å@)Jí/ouö’úÆaFštlLX4vö@ç8¼}eÃDAÃÊk¸)p´HÑŒax6•¸JÖˆR&Dž6:#4Ö‚íá ]nÍUëŽCȰ S&AaêÝ4ž¢Ð&Õ +W"ŒS+·Õ(¥" ¿­ØaH¹„"¤¿èΑÕÀÕ£æøH{+@r¢šê©¢WF›Ê¨´‘.QbTéX‚·õ 5– Šk‘¤蓇osM‰g‹Z;½j/¥ãƒ€²ôÇú‚JÉ$C9âtÑ(ÂCÂô|=Õ‚@yC§O´û`“0EÂÑ4Ç×7툎Æ#YÚâÉ‹2i¢á ’ñS)–ÏHÔг/¯Rx±(Ï c%ô`eßæ{¶_‡Sõ†1Àz ¹-$ÛÒÐâ:–DˆŠðmuÕfU™9L9ÜÌ݆^q8t\;Lš¢E—þš¹£@ïs‡.4Iè“ȽÀq&tÂöA£„qÄd·×ðÂD‰hð­SÔ±Ë:j£‹ci”Ýš°1$”¬¡×(…Z|•R(y!OÅólS£¬™XÒ h„ñ¤@ñ :6•Á{(AÚZÈà'ÿxŸÃ·Ñ¥_0§àÕÚ»¨ÒŸ[O€§*€‡'„_T¨YŽr´U‡êáGÊŽ_´ƒ7 aì1ЦÒGM¢2*R®"oTÁ}$Ê—j@_ºAê(ÔÔî¡*àã7Š–”QÿW5É5ž£”û¡O‘{8\×JÞ‰Ó;=„«h¸¦‚íÞ†¦‰G·8µ£]¡‚E<š£QŽ$9µ_$B=iTé¿MrSX4ºÃÄJyía*ŠILæqQI)IŠ)‘"n S³É2E5‚)lZÝABù VŠ˜UÄìu|$ž ˆ8Æh°ÏÒ£öOõ$HuÿVÇüÓ‡ƒïIŽ¡ èûP{Ž®P7Ùd=1Õ?ñ¢K›&gG¨„ó¥#Îåÿ¡K¿6h@Å,Vˆ¹E\*$œªt‘®‚HI´ràlƒÚ5á ¶»­J5EQ)‘%4é`:FÖ…”¬¥Û"ZhcŽp¶@„¢–]‹¤›"$+¨C®ïÈKÁºe!^Ì3N$§ÅIŠqr”1iô†‰É<¡JÉŸ‡R0ÅQÅ´a?­Øì Q& ™#,K„,Ëw®Zàd‡ƒ¾ÎŸoMwˆÈ"q™#YÌÐ RXªî·­¦ì#u@T$JY’Àÿc?q™£ÁMûAâ°ýIU¼G‡þ—‰Ðc.JÜADœJȧ€BÀ"S:aëœg›a\01 î+ î±:¶† vw ’C3›P,pô}¡6ôp™z="%õzÊ/\“ªðè–H*#5¤ªà1EïA‘ªá†)iiü|^˜RP<—D ªgK„I¡Vzã0-”ˆ @™BM%¨¨M%B½FÏW¦ƒN&#L‘$#µ6 ²x( “ ÿrÁ9t«V˜#‡…‹ŠŠG”B-°Ðƒ£6Ú(ªÝg²Ôá ÑÈPp¾VÇ V\¯¥.Œ€°¯ `‹x©ˆ£©þYÛ#,+˜EáP£Umb£ ˜*!ŠâOT*«æ,•QÖ‰GG¡ek”£6FEA6çxõ ßx`L•QÕi±Q”XC p#Áçj ìÕ{¹â¯"ÈiVÞ;B¥ÜߣC÷˜ÅNFŒJf„ôäf*ºIÅáõ˜Ð4ùúh1Õ_ç¿nBØ\£k~ð8ªÏê)—edšFoS©Ð\!:\¦±n[30eKbåè*WðB*ºc£hEDð™6ä(çe”aÏwº¥À 3ª(³8=ØßƒyW‚ö¶8¸bðy6‚‹ ” < ¦=Ìlí FêˆZ<©âI…°UÂ*f¡rÄ)å|笴zhÓìAC2E»Û'…†ãàØ:â h!ÏwLA€dü…Úoc6UˆQÀF'^,Ð`gñ¤‚VqÐú¥ˆd|ØÙ´Ÿñ“:‰K¨ª‹I…°[¢¹A+Á‘„›ŠŒ“©s3D ELÕÆT,ßñW¥ÊþiAAwÖOmVz³3èŽ)·öü2B¼÷¢¸Ð_B¶d]iô¼Kn¢ÄJG $Q'Ù Áë‡Ü~Æ·B,ä/Fc°ùë‚ Af^‰WLJqt]€% Jåeaâ¡V‹þÚ¡1LÒG—"”pPñÛÑQm‰)-ºÿâ– &6*þ1 ¡à-v ‡(£âR Z;rV}É‹ÿ‚‚—àƒÉsˆR@"¨'M#Ô1ý"8Ç&ªæqßáVCÄ(àˆ\ ©'Mž( Á‹ªGÐübž¸›§‰!¤§"ô#9Nžebä)ã­æô þ T fL×w½Lu‹Ž« ¢¥2Šãa¨ZÅC)JLé ûÇ5Ї^­’µŽ®©†¬Ñ⢠Ò †œÀˆQh¹êäalõ|õØŽ Zõ»å¢(à``,Ì ­ ÆV5°eŽTØWsö¥Qí ¿‘[¯^÷Þ»C?šCÿoÿÂg¿rÄ)GuJ‘0Žò5Å€d'lé9ÑgùûkfH‡°Zª)¯urQ)a˜$q‘ÇT¥Ž4õ臉ÑnDÔ£,t<üZš4u„"lSÅŽ¨8BAõeŤ „"^\àDU„mûÅ–ÕÎUo…( Š2­ ¬¾ç Z´Yl]õºQÍ5K¿zZEPÁôÁꦨà >›Uý{ÔÿpëT* &ä–0(~šN±ü°ÇÓ…¿Ppß²à–Âa¬†å˜ÿ¾  ÏTü—pyŠ˜«GRkÄ@Õ]PÁ1U<᳊ºb£Gm„%‘u¢ö^‰jZA3l Õ¯uò‹âb”“×cþ}ÍŒÿGŽò{@§ ù§¤vº°ñ…rÈDAÇ)~{ DÓ¨tÉû¡7ëƒ8æ=¯O…­ Êlm‚…õ\äHÔG»àߺ!ÙSL8 ÿE Õ<Ð<à-Ü£@›$QŸ&£%È¥êñ*±ƒÄDž7RÇQ‰™˜Ò¢Å`&"”h$EiÃCx’J½ÊˆZGÿ%ƒ4£c¡N{„$ê(¥…Ã8hìaJ€l‡k•õ-  âQG†~:( ÐvŽ89âµUˆbaP$B+´XƒôF; … u5G¦Ä Í5¤‘d„·™D‘*M 1B2 Ë15OÔ.Ò­w‘¢$#T0 %pî6*.}tøGú(£“gˆæ Ÿ^¦QQqMFHâ ©AD+1Þ饢!¢Ù zÎExPiÔ YÍŠ]-ê6¶‘вÓ72Âh½"~5|•†TPb }ŒUDT¥Ý³£¾ÑÞŒ³UxGΘWé÷ì(*¿.ÈËç‚À¢uZÊjÑÞÐ{GèG­ýwDÒÈ0ôùyԆà ·“;&t¤"¬ƒÛ½{aòdèUqˆ‡‹Äõ,6b„(©*‚ß%TÜà°¦‰'áá¿‚L q‚À¼Zgb8RŽCɦDÈõ\Õõü—SUE7Ø[;ª(³Z¯aIIy¿ÄVF¥‚‚Šm]XD(¢â÷òÄ•, tÇAªÅ•GîYƒ’Ð1E,ÅD8(H?‰çH„'Ñ]glQª2¶fE7ü㲊”h¶ž‡j{G¨é 舒'¦ä1Œ 1‘÷Ïç(þ ¯\Mñí™ËÊE• ¤ü”níä CÈ#GþĨ\gP ÷ÿÙ{Ó`˲²îó·Öž÷™ï”÷Þ̼9TeM€E!¥ˆ‚(¢ïKŠákDÛtð…á¶¶A8!o j`¼a`„B†Úmh·( ˆEQ…U™E•y3ï|Î=ãž÷êkí}w($oÍȨ[÷ ÷ÜsÖ^ÏzþÏhK\2=4$Á%$=ÏÉ!ÖphÄ\aWCÏ2ÃR%BfÏýœªCXx2 tŒ‚É'&Ç£8¹ß—XuÿCËÖþ­¯RJ°"W(#–zƒ]3oØBÀÅóðé0XƒãPß^Á¬¥ÙÈ-Àä¥C&,ÒÜ¥œõ¹Ò)–"Î|+ç˜>Çéé(Ý} —ãV‡£°ËÈêsÄ2¹é„ï°©YîFźÇ¹Ñž»$Ìè Œƒ dŸ52ܺ.Ì ñIj–-(fF¿©7ñ¼v«æó´l‚kx-¸ž› #½ËÍL]Q-0ýœsG“᪙zeiXÌhËKM¬:Y³{5‰Î/s3R.± T)DIf9zŸ‘ØBÛV³żºˆªY¹9]?g³©ŒhNtàeƒÀ–5fÙ•„¤b½WÌ_yBV«%*ƨÖîVë¦É–-Ïé˜ß[uNcõ;w_п>CÿR67Å ´Ð›<‚Ö‚i<ПcËØà×à¾s¨@t,¦v›Ûœ¡Àª5ä·9MŒÏ½\¥À&EÛEW;wì†á’Ö0[äÂ& Ùbn…¸2%6 ±ôñ; ǧ¤X­üäЪÃìÜ ÂçñI\ShÛ¾Q¬$Âe.Ö™ÓbÉinŒên±kºÌ ñÂG„û1¾Þ/úN‘!Ÿ¡c×¼ªÿ{-ѰtjOnK”dØÐƒ0ËôaØ8ÛÙv¡ XdQ;©E2 ÁÁ* d ôów¨M¨¼PRŒX2Æ5š9¤«™Ðï…ߨk¦†w‰ô ‘73Ç´!KÝP¸æ}­ö¢ÛÀ6ÈiY[hÇŽ‹+„(u@cD70qA MÀ®Ìh,J­ h)ý;â9÷.¿¾ê:ôD¹8–/î1´Ö(3›bìÂ7–ˆ…@]ð,ðº¨?s >^@ÑÑoЈ„60èéŽiX¬yTÛBpx´Áݘ·±[£2 ëú̼€©èq'=˲uÈkÅ_ãº9¡ˆˆ-í™®;æ=ÇЛA‰‘«X5¹¦ê|Š–1(ô‰IpQ„„D¸¤ô3¥CÀ‚žªå†-VÍÔ't9S̫œÓ7·>£ê޾"âÅX”LèÖ'm„BÙ ôëC‚KBŽEËü®Ð@ø]ãƒ?¥ƒBÐc‚OD‚¯ë¡ˆi3§k°…@E¨BÒË&,yRìÈ8DY âNnVç€úT­0f Í™y·1£qP«êm³IØ $ktÕ‰;µØê„ ß3·йlÀƒ}³¡Ü2ÿo76^i µ°AŽæïIïþ"ýbœâ²,ãòåËŒF#.]ºÄúú:išòØcÑív¹ÿþû‘RrppÀ•+W¸÷Þ{9uêJ)®\¹Âh4â‘GÁ󼯂~2÷¶ÉéËc¢ …蕨\jdghdg,8{>uqÿ¶*vNÈ‚9-ZÌXÒ3íŠØÕ5OE;ZàLs–ò‰åâ)má<’¼4OÑ.çØ^†“ÌEˆrAãgtÓrQê×45ëmdÖQ5›ŸUÞ‘!¾U΄•¥ðŽù7äDŸ\[êò­„Uöun…8!¼¶ÔœT¸¨“9ðÐüëRòÀh«SIIgáäiªÉ`Â7÷Ÿ™C‰A¬na…UØy¡Ç"“\ïÆ¥  •Í b©Y;…]äôË NZ"ÆeMÖcd;S´™Ñaf”9Ey°ÀK¸EœHIãT Î b -ãË!rqâ3±Ã‰áÔ\_ËrI©bL˜$xv ÒðÌÂ<Θ[‰EI›–1õ ˆ´MבҟgÞ ßmÞÝšÿbYîÓé”§žzв,yøá‡ ‚€ÃÃC._¾Ì=÷ÜÃúºN¸rå Ãáoø†o CÒ4åñÇ' C|ðÁ/¿ wÅ”À2Ø’/ &Ï®h]òj‰œ)²u áåfQµÎŸmÃ7~G˜Oš‚ZÁL°ØkQŽ\8¹m‘G¬†`)ŠˆÒÎVD!óÈá˜fý.ÑŸ… j™×+zöŽv6:`µ–»XŒéšû#EëqÌ€Uök ú—cZÆÉmAH›) F©ºlíT•¡Ì\*0sîÀÀ¹™Õ룈ñXc™¨fÐÛ`²(´K†u·Ÿâ’›B>£c@vß„áxÆ.&Åc.Z”êÈ(×cBø"bæt䄳Œ\J]w¥BªòNls"u©Øê¦ ÓY˸5 §‚“ç1ÒËÆ}+˜ÝoÌÜÍŒKØÆÞ1jtþA£ ¶AÑ Ô•Žª2+K0[¥Gµ¾4Ìë‹-è|ìccuu•?üÃ?ä—ù—yßûÞÇéÓ§¹zõ*¯~õ«yÙË^ÆÏþìÏòÚ×¾–ßÿýßç·û·yüñÇùó?ÿszè!þâ/þ‚w¼ã_€;dFî©yI–i*ÄIÇÛj^$7 IDAT¬ƒ®g×Qw®“¹± ˜ÑfNH†ËˆqQs™ÓFšC±o“2© t‘ÐNk%6Ùчo R´Ã\¸2#–ºso9)EiS¸%öR©•~ƒo‘4ˆ–ç‘/+™dÅá¨ôçóøª;w‡Ü„LéÖ’Ø —9!‘ò)±ÀNN®“Ьg­ïH2[[AƒÐÚk™S8t²Ò‡¯ÿk[(E!tS*—LضV+Gù¦³÷!–º9 ™}|A¡l’ÒG© »•ê×Õ>!·ŽVóT¦ÔHñ2ÅüVRY8AB™K )`Í\°Ÿ6ÔgWŸ†¿» ‰§ßnèÇLA¾²Ðo¤m.„¥Õ·%¬‚ ä…œìvJ!|Ex~Œ²¥ ¡¤@0`ÄËLèã7¤’Ûœ&ÂçûDì°BÐba‚SdM¼é1Ö†xl°Ã’Ñ{V§Î.cSu’6c–“™«gK•wq†KÀV± ¡î,·Øg¢Ç119.¡Z°Â!c¡/ö>ǸdLèQ"YbÈCY1NGmff}·‘¬•ûxIV3ð#g[ZãÎJ’ŽJ$b‘ fhƒ‹ª6YåI£#h¥;&€B6ºùʹÆ&Ö3«{ÚàNHsQæ qÐ@öÑ¡.‚Iä¾é|ææb>jtõ‰¹½ê¾gè®ábcæ¾ÏI\¥¾ËÝþè[õvmnnò†7¼¥ûØÇØÞÞæ3Ÿù oûÛyúé§yÿûßçy<ðÀüÐýûûû|üãçÃþ0?ú£?Ê _øB~â'~‚ÉdB·Ûýª.èV^òªOþ#/;ý/ˆ1üoüI×füMmø¦wQ@©ðã w\’v-ì¢`.¶~òïȾù~òﵑýuF+˜±$‡ø2®Õ%¹Æ%>Ë–ºÉêÓC»ýÑC-6¸Ã"oñÀÕkL.øŽE‹ÝÑ‚Áb±‚ö„h`ãE9ÖGJºgb¢‹´ã“H—\X,OÆú ‰ÂÙUÊ6ùz´ˆ²ÍÏRô>V­½eà¼A…ö9s}8›<Î/<ñª ÿùƒÿ']|„{ןáŸî{‘ÂìœÏ hg :• ø¦Áǹ~ÏY(ÿOð<É‹Xg)4 2í\ù΋´™qjsDO£sÿ¸öR¦mþß½ÿŸ¾þ_ Ö'<2ù æW)2ÉÁ¹.«Þ1²¯°L…ø¹äÝŒ§m®÷ñ_žúÆ“ÿãKþwþ×Õw±b¢^¥H¿MSìm%l¬í³|gÈÃñe~ló}ü­ÿ¼X}ŠB!$þƒ1ªâÐì+9|ãÅO°÷_–±çŠÑ)ÝËòcöìUúê˜ÓÎÅ·D®Æ"ì/xzù~ð™à!þ˜ïgƒ;|—ó׬–ûØyIü?YøÛEG|ñÉ;ÇôøÏü)! þSùÜ7½†/ò˜¼°G8Žé¸‰þŒoÝ]AÿB(}µW|Ë·| /ùËIÓ”~ðƒ\¾|™Ó§Oóƒ?øƒL&>úÑòÑ~”7¼á \ºt‰7½éMò‘|„?ýÓ?导ç=ïùò ºOB©Úá„ØoQÎ%~/¢˜:¨’ÂFùÖ é¡Ì„gàÊM-Q¹ãëEo «|îèÖ6‹MhÖë}‘¨®E!,C„¨H0·z¤«³~‹-Y%Á3]¸–®UÎmž±aÑÆ%cŸµš¨Vœ4CO|b㤠[ÝCbGi ªW…ÐveJj,)«ù·SÏ‚âÚkØ2»[ÓyÓá;ÚïX)„ÐñŽ)–µ+–ž×[5Ã=«âôº@Ç(=Sw×uiü¹´AfhºÖ• Ob;ÅÉ<[6àíf…Õ(žnƒt"ݯÕ躭¨"Ý¡sÞxnÃ&M–|Õ¥7ýŸE£¬$)vcÆn7È@MN@õØâKëП/GÉ2gˆëÏ»íoþæoPJ±µµE«ÕBA«Õ"ŽcYZZ`00‰¢è9÷›Ïç_õ²ŸStl™!eÎ"h‡ºX¶…°pT†d$®Kn+fªÅñ ^Lyç6<³Ë‚dä³hwÈû.~+" x"Á9wؤ+ÆønÆÌésÀ69ÂV¤k6ÇV,Mä}ðZ)NZy6S?$ðcºK ²®Å¡7 Ã¥T’T¸8½ R ÑÉcrObG%–*Qä)H%U­ÂÈW%¥.üŽ™cwµc6K&Zu¼Q‰3Ȉ;6SÙb6l3OC_ÚE(E&Ç¡°lZ§Ž°’’r I}Í ˜ÉS:Ú„Êíb[s°Ú8fКQ JBê:ÌeÈ\†D-²©ÇdµÍ¼ï! 8¶¸­[äôV:•¦U ¼’’h°8 9>°³ºA&\zîˆ@&Ý9Õ™–-- ÊvÆtÖåŽ:ͪuÈÔi“ ›–—à,çX¢ÄöJÄBá²uyÎÄn±Ë)Ëã€Ubà¶s:î ©JºË1hUÂiEá âÒáŽÁÅwuújDhGv‚µ¶ÀŠ2WàA¹¢ Ì),8Ú]aîÄÙ+ì¶W±TAdiWЮ?£3ØÕýöÝôÏ'[›ÿh¶¬q­¤iÊ»ßýn~ìÇ~Œããcúý~½/3 X–…mÛ$IR?¶Ûíê …/÷:uÈðÄË*˜¶zÂ’Û(WQ,lT)ôæÜçÄé†éÌÎlÁγðÔ:œóôiv ù­çî+ ‰Aå‰\I•&b“h⦄D´XÐfZ¿63SPS"¬²ÄQM<ó‰é16$:Y§®õ96A(9]ÆøÄ:nÕ¸Õ Sà+›Ö*Û]RR–ÛXÓVE¾*®ù¾*¶™ùT:•çz€–Zô,J§µeF.7#ÇÁ©“˜z–¡ø È^)°²B{B“ÒQ3œ2 Nžã̹’ºx–`¥eíÖUϸ žkSœÌ¦ErÂÖ­Àq£–¦£¶8±~­ sÚ(®Nv¯ IƒPÔnüŽ¢QÔ㘯NT“<×–³Ò «ËØj@õwSÐÅç’]\àUÕÈT<·˜ÿå_þ%ïxÇ;ð}ŸÉdBY–Òï÷¹páŸüä'¸qã¯~õ«¹zõ*\¸pÑhT_Ø_í½ðÇnŸ¹—rÇÞ`AÈg¹— ‡eïÈ@º BoÁm6 ‰©ü€Ÿ> ï»/Ù"Ï=òÈí"ï)Ø{å¾·`;<Ͳ<¢Í”bí“ÄYÀ6g œvOGŠº^F*‚ ZÖY…¾„,xÁW8nµ8b™C±BK̵C#±ìKäÌÜ…ÎìÎün†*þ"cºåá–9VG!Ý’ýõýµÁz†Ø†â’ -Ê……ê(œ¨ÀK Ú—ö×ZL­6é.<é-+î½ÆÚ:Õ¾–ÃÊýc‚NÊt¹ÍÓò\Rnpž#´ÇúKÜÁ&¯é"â¶Gºä–ÍuqÛœæf²E¾í’Ï]Ž^±ÄÎú*#ÑGùÏqü Y*öݶÝMö’5ÔXÂ\í‡ì>´N"uÊ…ë¤Ìºs„·‹Sfd–ƒ;-8öÛ ÿqSçðÚ7ÏŸ#ÇÆsr¬AŽl)Zi„ŒU—¿³¿ÇÎÙg=N±&öëpÔvYµ(ÎÝsÜ’Lº| Ùå³ê^®©‹ŒE‹\à kÊÀ:&>5!È#:Ý%árû>®ÏA¼Êá?œ vΜ噗Þ['cXdá![÷ì£àSw·æÝÏѯÿÉ|ÿþßæ=ïyëëë|ÿ÷?O>ù$ÿ÷Àöö6>ø [[[<ûì³ôû}Ò4¥ÝncÛ6iš²³³Ã©S§¾ü‚ÞcLŸ]+ÅZ/¸>¾ˆU(Ú iËc8Y#½À Œ/p(u^õ téú|ú&\\‡-n@zìén|ÙlÈ{fn4†¾* lº#°Î¸YFÛ™Òí:3Ü#1‘‰ÚÒ&cÀ1ŽùÀ$Úø À21|Ú}ªÇ×Àî+ÑgD‡ Kƾ016±1«šn;ÅN3|•`‹¢6¥9d…sN±G‰dB”eŽXáטŜtó)efáå!Gx®q¯“‚µô€ÄvqŠŒ¹Ý¢/Æõ¼*Çf¥Ô¯e!B¤*ñc¶ÖÉf,-ÆÈL1œE¡Ó<ãôW‚Ž!§qh¾o5æÞ%'²Äy£˜VA ‡ <©b¹§ ùOUøÇ ö©à¹ihk¦8™ûUúñìyDšãÆüµeîŸ6æ••¥dÒ(ð•éG…ÜÍ!Öïß™¥Yæï¾zõ*o}ë[yÍk^ïýÚ¯ñ“?ù“¼þõ¯ç-oy I’ðÖ·¾•K—.Ç1o{ÛÛ(Š‚Gy„¥¥%Þýîwó|€ïþîï&‚¯ ¦{8L¬vÕ=¡ËØ!F¡b|Š:åPk—E§€UGG^ oÀêEÈÚÈ©"ÉÏ#‘..…e¡œjùéC·mÒ¥AÍrìúP^Íõ‚Ìwˆd cSQ À9n™j8;××tYJd¡–¹4"¥ã~…ÔIbª”º7ˆ“*Ño©‰¨¢U83§Å‚€¢cT¨5¤ ƒª9†±£ŸP³Ôï°‰KÊ«Ó'dQ“{µ÷†vš´”±°Gb™CVXÌC½. )ò¡}ˆ?ú£?â{¾ç{x×»ÞÅÛÞö6”RüôOÿ4išòS?õSÜ{ï½¼óï¤Õjñè£2 ø‘ùÞúÖ·’eo~󛿤8ÆXì©uâ5@Ðó†DóPë…8[ ·Nˆ!¯2y „¾g ž¸ ·× |ßœ…ÝÑ‹}¼ì•”üIפj)hÞ.Ý’rURÚÚ÷yJ›‹63öY3 }Æ”Xµ)Í*ûLis‡ÓæÂÏÏ{X“غ†oQàIŒ&Ïõ‘”œç†q—” vXŽFLÊaiGº —„A9"–¾‘eœ+o2‘Ú¾Ì&§Ç13:5ô–1­EDÔs)¥¤•/XÈ€…€„vas޼>¾ˆµ9‚Le‡[å,EcmÞƒ ³l¦í;/p‡)6b P±Àž”BÙYi»Ç Ya5£>ÅIHÅ®†ëâZ±i{'D•š(TÎÜâ$¥ÇI Ëù<« çŽAvªúAãp—4˜ÅÆ>Ë|_]DÕ¼¾’­UÅ¿x*¼ËÝïß!ÓÙæ¶‹/òØc¡Ìì8çÏŸçõ¯=Bl[_~¿ú«¿JQX–…”’K—.ñ;¿ó;”eYßçkáË’¶ÊÉ,ÛŒ”dmØädI!ˆÉqðIH…K¸9a1ìQ”¬nÁ'®ÃÚ\°À,ît _²çlr}ù}Æ\r¯‘Z.;lÔÚs‹‚O¦äFæVå£GfæsÁÞf,zŒéq›Ó ÄHÕ¤£U+v^S×Ç#(#훾<áØïâZm¡\ų‚Õ*°NMqDIÔsˆ=—Âr)ð­·» SÑÖ„¬Ž@>œSÉ®(3 i¡„ ]ò¹Ãˆ ÁŒ6¹ÀòK _à9ybᚱ㈷8CŠg ¸Úµ"`Þ:À9©å¢„&5'©O”…ËŒì%Å2¡‰ŒV#Ýc„PXv¦Ñ™"®“ãÀg—uMÜ#AP¢,AÚ·Q–:©À_LA_¸ Kót?üÃ?Ìë_ÿúBw‡_ú¥_zξpþüy~÷w·Þ„üÀü¯{ÝëêýäËÞ-´cÙ1 ÒñÇà”,ÙG¤ÅQÂÄêX¨=SÐsà¢Òfú–)Øç ·àŸ·a´LÙz¡U™ÚRO¢+½ªðª[“–¾½ÖZŽíf„i„ïÇf^¬aæ ]Ã/0&3lw‹ÂHØB†,ª†¿µ‹\Ž0’‰ÊÆ3PöŒÊÀ2=Ɔá.Xà§ …:Ñ“ë óÚ‘±¢Ž´“›aÞk9š‹g'ì\LdP’¸a¹ SJH-×I ±ë`‹¼¾ghù†«2:ñœ$ó4^Q&øy‚“¸G%E,uA^(]g¦˜]­Õ ¯Í8 ^Áè¨ÑYÏLqí>o\ÒŒ˜œšY£8æ¹’æ/ s{Ɖ‰Ì°Á4®òГÆÿ7“Óæ9ç Rß„ç`D_„XôùÛçß›[¹˜ã|îýüŸI)‘ò¹'˲°¬¯E»0m…Œ­3Ú±lâ‹u0JŠ«ÈÌh,ÅeB—npLÖõ)Î:PX°² ÿrV7Q+6å3jËbZ¸¾t‘±ï¯b{»¬£Ð°z@Ę-cwZe.äØLè™Î1 t¡:4¯¯Ž eÑ@Ò‘ÌUÑ£„í„\Ú$¶‡¤¶Å>kvŒf„aÂ0èS ‰p…ØVê ”§c`„-pDF±bn6 ê2%ÂçØêá÷ŽÎ>ñæK ­%\©ùA6av($¯E«œ’+›!K:&Újékã gƒzOÔN™†ã*C a1¡ÃœSÙ¦ô´‰Lœû±Ìœf5™x$g?W0.»äÊÖim»æ+{8"Ù&þÛs’à“âpÈ2Ûœ%"àöÎ@uÑܹ¯"ËãP¬° d¶h3=ZbÞm3^îsèhUÓ€‘QH·D ¥;§ÅXõtcй Ùaƒ ‡%†¸¤ŒE¨íXî]¯{ç‹ìÐ?ßõþÅî ÍýäËסãá`iKT1ÆI×N5Ü´°Q{ øBwgSq’â3C»ÆI[gà±Û$Wz'2(Ødm_C©(WêNqÛ ŠÔEµ%å@ƒ?®ÙôëK Äæ0£…MQwÚáÍ©}Ú+˜^{¼·Ì÷ÔÒ´êöÇœB+×9˜mvØdÍ¡di6)Y§¼ åRí§„`_®2d‰Ó"ÓZÛ¹žy[qß#µ-´ÀDB}X~¡)uº ¨u푘´ZØ–f¸—B­K!È»RD$-SØí†”ÄiÀãU¼é’)Ö¿dŠnɉN]4HiÒtçUy× ‘ó¸*)Í1ÝxÐË­pÒQ™Iô9±Ó¬Øñ¾ùÙ’y<ßåÄÌC6 }¿¡)ܽtͲuQÿ7OÝ%_ÿú<_±òkTë›LèrÓ̸+Ü"Ç#eS´™2¡KÏ“tB⢭÷‰óx§àÙmðÏ¡ÎJDTB®í˜‚…ÐëL“&†f8ê5ൖP¹FBꛃEÂdÐaF uF‚Ö)5É55>ÈJT>PØÚŠÖ)3¦ªM^Xd–Ô¶>´Ë‚¹ÔV¦Â†BHJiÓnGäËz¼0¥ƒ³”]T¨åu•Ķ oÊ f":Üd XŒJŸ´p:Kup”KJ‰Ž‹È‘ Ùg;l2v{à+ÒÀ­%bsôktI8°´ãä!+ì±ÎP,ë§ü§¸æ=ÎjIšvñÓü¥TºÌŠ6åD¬ 6ûg…\*!È•†Ò'¢Ã6g(Lè‘ ŸæÔæäæ=˜Ê63Õ&Ãæˆef´9¦O*<7£È,”#ŒjÕ©%“ÑAR²Ã:3:ŒXÒûÄ P«Ò˜{‰†I—žÓ—âî6 !ÀþBý+l÷eôäÿÊ}Å Á5÷²™_iÓzÅ –`þÔêúŽ>‰Ÿ O°Rê>¹T¨«–¶ÌMa ¬s%¶¯è·¦Ì{!R("`…#\¥Ý F è© ˆŒ\j`·gÁKÆodÄ)v™¡?üSj~1¡Ï8p—éª)~š K1v{YDê¸Ú¾qoFÈœ\Xf1–ÌZm|Ѳ"l b×§•ż0øWZ‰¶},Mçí¦¶È™ÇmœýWd8K{¨RØ)­qDî[XYI V­!…´h…š‘ß;㦩ç 2…=Cös¼YŽ{§@¤:ßYìêŽÕ²Êçz¬ï5Ø^±¢lVÅtÉÌÊŸitÆÏš.øøyz[ÏÖÜ<¦b¦O…¶¢€V‰ v¿ÃIàÊÄtÞ•IÌÊcSD+Æú.µöVÅ ¶9qûŠ9Év÷A€Zºk&迯Gɾ^¼?·C—ìºëì±Æ‚×9O†Ë.Æ®8«I¬>C–êwGN™õ;ˆó µ0É~Ë\=½/¹€JTöË5¦¢Ã¹AáÙÆcÂ2&QZjzÒ›gudqf¢ˆ‡,s1¸Á3\B˜ÃúÌäÂ4.Ò$æ95,+ñÚÏZçpdJàk Ñ„(qÝ%f.Zú@oåHRÇeeéˆÃ`™ËÜOÄ SZ+S”«Øg „ ‡ˆ)mΈe?eŸ5ŽX" âx1àNyšÐŸsÓ٢ǘmẔ(1 6#1`Ÿ5FU´§ Tj3n÷Ùg‹1}z†¬£D3î°Ég¹—™ê¢\Ýœù Å6gY°ÂQRÚäD&hJ!ØQëdר„¸åq‹(#)®R-S¡cq§n—VɱÙeV)Ìh¦ÃTɘ‚°"±…ŽŽžÐaÄ€IÑE%’ø ÍaoÃpE#•dôa“3ga•§IÐŽlj„oÚë°Ïª9DˆÚ3dâ·jÏ»¢ÿw¶Šû² úÈî³mm’XW¸mqÖÌO¶Èp¸&ïáÀZã Z%—qRìûú¢ÜAÛï]…YÔƒshºs>~ ®šWW¤ŽÓ¬ÌNº¦£Û×pj–ÚÌ×}Žì;lrÀª9á9´ÄŒÂ@ík5ÆÇ!倵šxQ9­u˜6€=¤×žpÈ ¦x^Ba6‹Öi9 "úÓ÷&Ä›6©í œö (8Kc{Š=n³ÁÀÕ(AÖ@ Ê©Íf ɇ™b©‚¹hÁJIê8øiJb;Le‡Bh@µ5K>ÃÁs¬ý’è´)8Kd ‰Û)O:éŠÈæ7 ïªÓ­VËÔüiH‹ C^«ãU´áZC~V˜n¾k?1ò”“ …*”¥š¡W@•d% §ÁŽÌªË‰Õ&'Ï#æfæoUNuÍ ¸y÷ú¢_/àŸSÐÁ¸"ê.z8heJ1m¦Ìèq?—‘æi3ÃïÆŒ¾g1…x/$»ì¡ÎÛðçàýÏÂ=[°+¹!ÀZÉé¯Mx™÷1ž-Ïq ȲäAû)npžuv5?…E=ŸÞe ]6Øal÷Hð1`‡Ú”j‹›f$Vup=Æ„,Hq™†]”€VÌ\>ä㼌xZ?Æ…Oð( Bíü´ÅŒyЦ߲Â!>÷Wœ1UvY×yåĬr@„OŸcY!"à>EŇ÷32Ûg˜t˜ÞßÑÈ:L™ÐÃ'æ®2§Å:»t™®{z­&°ëœBñ"zÆiOÛP[t˜² ¤Ã”‡ø £Îg^~Ë$žÃ+$x¬±_Y[Üd=:Ö ñZƒìÓ.Ÿý¾{Hñh3«Ég:Ǿ$Åã|„‹Ýdg/²mm±×ßÃ÷lŠ;ÆŽû$¹2Ãá~®ð™Ãˆÿûÿø^èÂÁkWyͨo1'6 „sài2öÜSðm%–Ÿ±×[å1^‚Bp–[ô3¦Ç;±üœ´¿/úðÿÕTÐ{ŒYáˆCV° ¬ÍŒ!K:ÁIðZ1iäMZ”Ê> Ǩ\lš„éüΞ…ÇoB V} n›nqÅlÂ;¦p„Š ¢„ÁbŒêÀ¶8M— Á!+8d'sC@«ÒÎJ,öY52°¬†Y*iZ—qà‘ÐaBhNìúä§Ó´ :é̉°“„RÀB†º#P9+ÙÔu5)ƒ‚%5d(–´" -µÐÌtÔS‚ãaÙ´d( Gâäúv§ÈqŠœÂ×lý[åJ¼<ÃV^–#°Ë'ÉQ dΨ¬™ß"5½ò£NL—]é¸]󳣯 82…rÁ‰¥å¤1¯™rN’ÚªD´Ô<®’Ã)NÒ«œ®Ý(’•„­Iœ«¤i‘yîJo®D¸´Qd+v»‘<ŠÂd­% ú×;ôÏû5£ÍB Ó éÔ®ýÕm•ã‘QˆÈdØ„,(Ð…9…íhûD¢P3 Ö7ao¼3¨¡ 6Ißgè-³spÇOqTư·ÄqÙ§,$mgƤì"„¢#§Óg”/!¤&²]ã" ²¯ÖhËYÝåV®ŒÛZ;@j’_dùŒé2§MLPsX¥Ã”¾1-ŽéS.èfcŽã©Ú`*Á%Wú9o²…¤$dAiƒGÜÖ3dÚDªBB IDATµ©Žº-È(àê¥{p­„ ½º1ÙäIíÚV`Qf~“Ÿ±J`L¿¶•” 5@ÉŒSÚä…ƒçÌe›ëÑ=äÊf'¸ÆB„,p Á¦Š²D~lC ™ks»8£cmÐSÃ$?Q ÐþõÙA@~=$ï•Qâwæx~®µ(Ì¡¦4R_Us§0ØV§É±Yûô›lF‹ìj®•ÊE;,üÅ e©ex•áˆábÝe‡þÕVÐ]£á¶kí·ofÉ®HX¶˜mÂ΂¼´)œÌméB^éÌ#ó}»ñGö€­-¸¼ Ï.ƒè ~ȉwr5ƒëòX…8*lj!¹Øõ‚ñH ›]CpÇ521IiægšFWI}[ad/ÖsnOðLÔŠª­3éà”1R¨“ņ¤V=£Ép˜‰¶1¤‘& Å6§VÈØRQ¶¥%É,Ëøº%…°)!”Ž44º‚"Æ. )I\Ǹ*ÚHV¬tèIå±ÞL†rór§Ah«‚WªÇ4gãÏïJ«Ûsž+]UW-öÊ6Ön<ŸËçÚc6CXü±Í7¿§9ó¯ZB× nãwØ 4Aê¼õ»¾¨¾PÜZòõâýoí\M)Pu]´™±¬†t˜Ð–‘\¹ô˜à’ò—ñdÊ~w•²eqÇ:ËÔéëЧ¾„ÖáÊ-Ø:‡JñfÀÄê1»º„XÎi÷¦ìv×Yd!*¶ÈC!ó2¤#gLT—8õ±½œ=ë#úÌè°«Nqʼö€ˆs\ÒZÕ( öaÓŽ”¹™,±lÊàŒ%1dLŸ]6Ì|[²,[ImÝ|žgIÅ׸È6g@Á†¸C‡ S:¡gäSÚ\à.)¾ë5¾ ;å¶•·É”‰yG,ÐeBŽÍ ÄZçÛ½ [KØ$5H« b Õc30pu— ÚWi·'ìOÖÙm’G.“­®Ž¼6Á-! â:·BÀ&ˆX¡JI”¥M,}&¢KauZQ4f‰¡>Ð #=ÂëHâ Í\‚¥ˆQk@䘱Ay.pCçp ¸ G†c»‡0[…¼&†˜\`q/WYc!Alæšõ”܉NC& ûs“Ö1Údæ®—üWä>£ÍŒ>1}ÆŒé׋Xÿ‚Œé¢Ç}½§i­ÌØÙ=C· «´œB{¹ßb³DÝ’z~¯ÎmÂãw _†K†å«pû­Æ¼ÕÌTE©CVä¡YôV8¬É-•¯»0.k«VÃp9C“ÒVAb9#BÓÝ«šlbQÔó©©‘S´™qLCVXs†´Å¡ œrA)$ÇbÀÐé“’‡>Áw˜Ñ®“–"ÔÏ%Q$Â%ómÜyNâÛÚ®\é{n[8yNæYJ Ñb!B‹A”“öRéàç }@ˆ mµX…TzpÇ #4ØâUVq5·ö Ì4Šv¿Ñ½Wª…ˆY™×(àU8˪ù}¡À«Ìòv÷Í!/otã^£è2díbWåPÛœÈâÚœhÑ«¤·J+ëïEïK¸¨¾P‡þõ¸µÏ ¹ëà£9Amöd“³Ìkå&&ÁKgt˜{䛜åm9£”’Ë«÷s«)KŽÓÛé=¨™k›ð·ÏÂųÄaHöÍ6‚zÖfqªÃíý $3ŸÎ`BºáRZ‚( ‰[“ý%ÊÔF­Iâ–ÏDö˜Çt˜ J$kìÕÍU¦BÅ$ÏqšB«É^ú¶¥k×È¡™ÅÇ&1&W6vY˜CN£|‚63þE½„÷Eÿ IêÑòäþ®ÉïÔÆQ¹¦ßו92Í)g6Q€ÈJ‡%wÈBµH…Ö¦kTõ¸n^áòÌÚ¬°£6i‹-fÚ¢´ðe\Ïâ;LQÀ·òìqŠ'ò‡ùødµc‘®útœ‰~ÎÚûc®3'¬6gºÆxÐ"š´8xæ4‚ã3ËÌ–Èp ™#QDœá–†ÆÇ \Õ×g1w)ÌÎõY|›~«½Ü%¥oºz¿!Ε¨B2ï·Iç6YáðòÞGɰk‰¤Ç˜Õâ,øæ³ÿ€k¥ìímrù__DÜ!õ8E;„úx_iÈý?)ΩÉ%ÚÔ7Á*Ô>1Ýî1eii‰‚ÌtQœÈ¢º œKf䎧 K\Í]%<° »wà`úÞzÍ¿Š/,R’HýTÐ’¶Aµêî×A’á1¥ƒ@ëÄS<£ÛíÜô Q'·µ˜™ ÏLÑ “ÏV}o“C ©å‰À4°’Xxf–ÞªO‹U¢[E …2þøŽ((d®G\ú¸B;ÏEv`¦%%qé“K›\è46³À£RÆÙM³ÛU  -”­ƒˆêv³k¯LWT©´æ²qºL‹öù–¬NãgU¸Aј­‹C^4:mõ¼çhÚ·ZN;o<Ön@íS_6ºú*a­i[[4ö_É‚.¿^À?· WFš¼46¦JÒ@Ö¶U(O’`“³Ä3:¼„O² Å€‘NF”CžÖXÇÒGž.(§•8ÐÙ€+·‰pµœÌxú¡M4a&I.ø$žŽ"™¤=l7„¦ôž]æÈ]&-|2y²äØD, b“’X–Ÿ)Ó™úDø5“ûˆezŒk™^õ\3ãèØ3âÀçeR<îå³,3¤SNï/QFɺOækNÏ„níN9¦§‹hßA,Œ£|i±pµÁMŽfàOé2b ­Å?-o3ñº¤+L=Ç£t6…‘ÁzZÚE¯Öó/s„ äºº5×®:Yéë×pð3ææ÷ÓÇ"º#ré’=€Y×E-KR&ôt<+9ûœÒž_ó£B`¬GKÇ®­,ÒvÙG¬áp.aÏÈ3¬tÉ&.Yj¡z‚ߨš´ÿÀË´-Ý„uܩޥŽ3ÔŽ>‘GIHº†KåÄpÈ}oow¿ûÝ$I¯ÿú¯ã8úЇxâ‰'8sæ oxÃX,¼÷½ïe±Xðš×¼†W¼âõh½ta|Ô–jHc‚†R„Ø"g;9C†M”¶u°}bbUGzsU;’|䳡™ÖCàŒ„åMøÇ;Ð^†v ]ânšBa$S ­w-¤ÅAm.Ó¼ªØÒ9Úû¸ÍŒ˜ÀÜ'¯çZdžéY"M,ªmì!s2W,° t˜x?Æg•}<+!“. 階\—_ÅX¢¨7‰j®_¹VéFÃ;’)bì´dÜqˆm,D@ a#eA!$S«cm‰CÊ´êÇ—%~šµæN€ÛI‘–Æ¥ÅD¿×ÊÓ(Qy©/™1FÓT¦*»<×ß½*ô-žc[‡³Tsí®é˜Ssˆ[2m7Xã#óû½ršÇV¶­Íq@þð ”âÍo~3«««'èc™é(M©;,h¤Xå€~qL7›"Ý‚–Xૈv6'1§n¡|›´ã£„`Å>bÏ9ÅT¶9”+¨›bÅ"Y H“€ìY—ì™gØGl½à¹ò(3AV8pí³Sœ(e¢zÈpŒŠ"žQL-D¨XœjÑwqeFK è3Â%eÀ1†8eŽ’—„%†t˜rÈŠ6™*oàŠ”±ª-m d—1ƒü˜Ð^0'¤m’µ>ÚÅucNs›Ÿs·ØÌvˆ½€{–®°8î²^ì±Á, 6ØÁ¢ Ï1gÓmÊÒâÒÒeƽ‹3-zþH_ze‹ó\'dÁ–ºÅ}êöå*m¦´™# °£‚MoËR|zþ „bÎ9÷¦éÅŒ{¹Ê-Îr†[Ú“¾Pœm3”ËDA‹ë÷'…\ô®r¯ºB*\ŽÐbΪ:Ô‘®¢äe|œ?b¯»Á3â!”l•Ïò O1§e”­rÎÙô6‘°ôÐËê€òXâù ªôW†<ÂcD¬±Ïi¶qÈ9ß!·,ŽÂe^tþ1Ž{1Wmài ¬Z7±šÒ/ÇH¡x­ýW”–à±üQv»§‘¶â볜á&fôÔ„©èÞ}ýýï]ЃozÓ›ø¹Ÿû9Š¢`gg‡|ä#¼óïä7~ã7øçþgž|òI.\¸À·û·ó ¿ð ¼øÅ/¦Óé˜fDïñ"„ ¬O¨™r ß‹ˆ¢Â)!zS]ã„a½l6ù „R¨ž¨gã:WBgnßÁ ¸¾¾¥ç˜ ƒRáªWdX”Æ:Q[¯VNK¥a±ÇøXš¼gUgï)G‚M^Ç—V§r‹‚aìc#Ã’ÏÍoÊ<›@QëV…)¶™°k´ "`LÏ8À{5É&3Úu‰Ò:ô¶ÃÜÖäŒ\èCƒ'Rá‘¡c…Tö•Âp9]/Ò³~Û"÷rd¡®qIS ¤Ž+EšØ2JU«Bm5jņ¯0UzuЪìV³ç¼ ¯ŠºÛ`¼» ‚\u¿1°ˆÌìysyÙxŽyvã5WÂêy(ÂWr†þ5ZÐ~øa<ÏãCúögÆÆÆ¯{ÝëxË[ÞÂK_úR~ï÷~7¾ñÌçs~ó7“w½ë]zY¨‚‡o>>:xe q}ŵF ÂÉoœ§6”¶À”–Å3Ý"étèlÍ‘N‰åÞb=<$[µ˜:^è?űße¶™ÿ@H,}œyÄÆo=ÎÆ7É.ÚÈnŽu*e·ñ󄮘2ìôqÊ KÄËó¨CàÏñÓ”Îጥã1¢S F` Z©†…“÷¬ß N}z³1¶—³fÑ GÜZ§çÎX[9D)Ø{´ìé.wöùÖÍ“zí|FQZ´Ó9Ýàk¡øÎÉß‘J—äï}޲U¬Pð½ßú¡úà,r·Yë ÙÌîзñUÌÙƒdRòkÇJçÈ ±¢ Éòµ“cº½3»GØ‹y…ú^‘2™tÙ½±Î™å¾ùô?qOï½/<å V Ñ1Ý`Î%û÷Û—i‹Yd3~|@§\p¿¸ÆkzKéJN'·)K?ÌyÁà)Zù‚õxSÖ®þüsÁº:da<ûmOP`±–ÐۙѦE„ke´Ê®Ý^³ò×Xßš“ ‹ÖÑ%ôàÌÑHÁï&a!rÅ#ã'qDÆZ8bÑi±hµÉm‹ KI;6Áí ß›Òs¼ &P1÷ߺÊÚñ‰ã³Ó> ­á Zh¢^¯ìDxYÆzyHß›r•Óÿ±gè®ë²¹¹Y[LÞ¸qƒ{ï½—n·Ë#<ÂSO=Åc=ÆÏüÌϰ¾¾N ‡Ãº _þ‡Ñ´ÀÞÈé=zž‰€ëØPQ`Éœ ÌŽb*ú$ª‹l” #q¦áàY˜ƒ»†ÕËFÑHÈÏÀ䔫0ðõæjº7á•iæ·+ÓÚ¢Ê$×p¶0À.ðÕl½J!ÃÕ‹šm«‘ˆ´vtÓa q=O¯tæ. ¶™Ì+B–5¥’Ø"7¹é9 ®‘í,LÖzQkd+øI”7.èúsb7£Z«&1Ž•ƒ€Ò’F¿^›Â(ýZE) TX…>”8iŽŒ*v·@D UhФ†¤+æzeïºh¾fbZÖ Ä©QF!§ÁxÏžWЋÆcˬž5`ÿÊm.á$ö4käŠé^4Øø'yëé¯Iê+aÃGnB¶;+_BAÿÿa‡Þï÷YY9y³>õ©Oñã?þã,//ãyGGGqÿý÷ð+¿ò+'ÄÿBðûŸÖ]ëæ#kl,YX¾^ïÝ1+Ýéº^B*J,zŘ™èpçÑ3ì°ÁØä\çG,#(9d•ëùyŽöO1ÿl_;PðèÃe²¼ÆŸþ×Gá¥çàòÅå¡CÏ’²+Ȇ²S’Çbî™ÿóÒûÿØ{·XM¯³Îó·ÖzÏßyŸwírÙÛ±c'!„Äi ÃL¤¹† ¢%"¸áfÔh€“¡–x’tÃ@PÇ Iw“4&±“ǧ²«j×a×Þû;¿çw­¹Xë{k—Å@œ4ŸTªªok‡÷°žõüŸÿÿ{ïƒCî(‚Ó):–œ?ù4B¶¹GÍ4°;ºæ øˆoçsË:‡ÜÉ œã"1Ê÷ñ¬¹›é|Äõ¿8 œ¼ûENÞù"žiØ7ˆ(8Ã%~!4ŸþÂÛø÷Oý”EûžµhŸ÷ú’î[QªáßFŸ —̉È9µý%ŸÎ¾“_ü”Ïu‰ÆÙEâµßó_IHYÒaȘ>sNÞs‰N5ãÈð;òŧâ¥gÎñÅ?4ñPM¸–ÑÝÿ ßûÒE–$¼ù•Ñ_I~ê?Ô Ý÷}ªÊ®¼UUáû~ûœ1­õmvt¯ûNŸûÿMB <ÏÍ–©ÝaA‚Õe±ë_ãÐ[G=¦Á"ÔÐsîd‹U—mIrf"ís+;Ñ#`k$#€³§á‹—-¶º·þÝe(™¯‡ùÖÆp‘ZÐct$9Šˆ¢ífWð¶GÃŒ1¡c|*Èõ…vµáV$éIkÛeN¸(ñ×jzÌ©Q(m\Á® EÙFŸ&nãà;æïJçx‹˜ =A`*´0”&$)±Îi‚YÛÎ?TFB72Ph"]‹£%bYµƒ¿4ˆÂUàÆAí ·RÎRnÉÍVdÆí‘¨êX7^›I¯ }qìü5Ç:ý•)L}¬ƒ?~–Ljk¥+Üå±yýJgnçvSQÛX¬ÒÞrn¥­y·6 ] ÿÓ«,áïyï¸kþìÐÿ®µ¢i<ÏCJIÓ4!n['„§Ø}ÇëœW{ÄM·9¶2§ŠR.\  ©’–ór‚«ÇÖ?kÙ)Ü=XãÛT«¸d9Ôð¼‚#È õ=>¼ú$|iühÀT'|ÄȺ“™¥ © IÌäM—l=¢‰%ø<(Ç1R4äu„Q03=Œ”,›‰²&%3ú\ᔵ ¥OÍ6’†Y:¤ÍYÈ®›a÷ZYØŠ”{ÄëÊŠKÎq‘Sæ {ò”  9Tó€zÇ#¯#J°n7\ãAÏàù%å FwÎÞ¹’úÀ£Ñª›/é´în»\G£ý’rÛˆÔÈO×tY2qÊ'¤e—k”tû ‹¬ÎAW‚®œ·¶ÖÚ©vVaW}¦ŒÄ˜2ài»è5Iu§ï.ä+r›4huàÙ{}‚•(ÙxUÞySGÖ­SQ»¬É^I½¡0’ºÄHËó*Cwš¡ü_#…¦òm,.G Ѓ‚&xKm“ªr¬©Oæ˜é©SÌÝøãú±‚ºêH+7ç^ÙòØ‹ß+Â7iƒ¨ÝÈd%5›»¹üžC]*w.W‰mãc$¸Õó÷z7¹•âÖ9¶q˜¾¬€—Ç:ûÚÊWn“‘]9ñG`öÝ÷}¥Ýû·\.¹víóùœƒƒÞúÖ·òÑ~´-Þkkkœ>}šOúÓŒÇcÞô¦7[· =fv£IÜ¢fÊI¡º®¨„‘)jb“Óà3ýÛ º[,qIQE4Ä+ªEøô\Á XlÂóWážSp]`zb©bØØ¢yÓ]Ÿ™À5Ñ Ek²ˆ` ðYÔ=Br&b„ö^?4k¬‰±µb¥OHîŒgìEêØ‘ý,qvÊ”Øé®!}Qò Ã.רðZ Wìe¨íŠfáQ6“ň¢ˆ)ƒ€¥è2bÂN³šn½¤çÏȶšÔ&›ÕÓ€¤É˜û²ÒmLì C&mB[§?CÍk¤_£×ݵ FÛf!úmnpІÚ(ÔFj‹d„ a ¡,[ jKlÞ¸xRëÓlel«EâVlžq¾Á~›À$œôjW½ÊË]%˜ÕxHšVQzS"?Å„’Ú™éWøQA.C»ã5ŠÊ÷\Ça¨0mÀJ ­áA-t,À34Dª†FIt#(|Ÿ®ŸYY‡/h”$“‘õ09FCå)Œc±¤t€rE5ÙL¼:6‹¸=ZtÅVu¢Á1f¼:Fh3Ç ½|Ù¿¬Ã?O­¤hÇýäå±Ï³"¤é—uÃá±Í@õ2†¼:û¿\wðÉ־ν®k´Öø¾‚²,Ûô5¥žçQvÇ!¥lƒ^þ{ÿ/¼ðŸùÌgØÝÝå/þâ/xÇ;ÞÁr¹ä“Ÿü$üà Ã÷¾÷½<öØcø¾Ï{ÞóžÛV.«ä°¾ Slr¤Cê¸+¥+×VNZ3}|æ»—øBïg°"é²`á2w Ÿbáõ¸ÚßåòáyôeÅÒKHî™!ÊãE¶+ø.Á£gðî«aÃPÏÀÌ={]ÔXlKÙ!éÌJ2žø ï¸I”¬E‡ Ř ¹ÌiÎú/±&Qh§@Ÿ9G²˜#¬äv|ƒXeÌ裑¬qÄÈ! 6h$cÈ„ºãq•H4ß»øÏ¬gGLÄš-8»þ§ã‹¼ÞI$ gßY´QçœÛ|†W‰® O0ÉGxª&[ïpïÖ—Ø?½Å½þWØæFÀÒ é±à-|†ç8Ï—‡¯æ(‘ ±Ÿ²qŠ+ìr­åäÌéÒgξÆ]<ÏõS;øA†Ô†µî÷ȧɉØà€ 2Á§bÊ€\%"ç’:ËóîE„šÓk—¸ÀW¸.vÝæ¬²?/²ž÷‘‡éH¼º¦~½„+‚¤N9^j‰mwÌKaÍ_<¿æ‘þ§x©{†‹{÷°0]š‘ß&bÆ2kýí•hðššP•œWÏRãqñÄÝÖjÚoX1Ú8d—=v¸æêFô2C7ÆP×u‹|c(Ëò64l…šxž‡R c UU!¥´ik½^÷½ï}·½Çk_ûZ^ûÚ×ÞZ¿ø ¿ñ¿Ád2á‰'žà‘GáÝï~7ßñßÁÿðsêÔ)~ò'’¯|å+üú¯ÿ:Aðæ7¿™ýÑý'QÐxàxàÛžû¡ú¡Ûþ¿¾¾ÎOýÔOý­Â5[´U|²J2›ÑçP­ÓeÁÜýÌ£æ@nXÉÐÉ8¸¥š±â‰¨ML».vHEB¦cë7ˆ…!+ ¹^LïÂ]F§›è3>lPÚŽúRÜž©¨ê¡ ƒÍCJmH“â‹Ú!s…Áqtæt‹¤…LiPTÒ#&åWXç¯p%!'ÙC`, ÜhäÒ"‚5>‡ÉÄ[ë=QphX®wYnvQ²¡#lNÄ)‡j—ÌY®›¦ùå¥>(ƒÞ÷˜œps¶ÅT 8¥®Rpƒm†L0`=ëܘœàðË»ÈÆœ”$aʼ顕pÁ&–(<£ÏÖþ Û†¹G5Vt†Ëvô¨hH‰[©Üªñ»Ìiö²“ðiSáJ¼ IDAT‹Á¤¦C}·¤õÝMú(<ò¿ÿû¿Ïç?ÿy²,ãøÀ7¯C×Î--rqŸ–t¦[&·q¶|¡3ë_ó¹X â3s2ÙAKž³¨wGN=Žák® ûR]I·¯¹…üÛ°áÓÓðßöГ’2ð¨„GNèL[l¶xâhÓcF­µkÇ‘ƒRR rB´4(*1 ×°µ\ì8fã:vÙvñ«T7m$¦QÔÊ jPLè­©¥d):ž›k»<å"t³t›ðÖEX¸½6F å1L—¶–I2RÔ£6–ÐSId&†"ð‰F”S[’LÄð›ÝsEþ¸ùJ|¬@ÇÜ®;_±áãcsíÕk$Ç.ØUÑ^Âãšô•©ÌªðvÉÝVZxÅíqêØæ¢<¶!QÇÞs‹ÝçYëÖWò¶èØûþ@î¾ïó«¿ú«|ðƒlôÞ÷¾—º®yÏ{ÞÃÛßþv¶··yôÑG¹ÿþû‘Ròð¼ûÝïæþûïç]ïz?ò#?òÏ>JU`8É91kõŒ5*ê)½lAhr¼Àº?TDMA +–2&Õ ©°Ê…ÝÌÔo½ejá'zKö ôRáÍjô†²6¿gæú\½Œ\?QîDic¹;sKÐ]ä=Ê4Æ×%Må¡’)L›|f¹3Ek9P“·lv®µ¡ •3&É\wW°$±ñ¤tÈ)ž_±Æ¸M›Ëˬ‹~QAM%­ºŽ(ýÀŽ'Œ,Œ}&`Ö È:4Ïù6fzb˜g}L¦0"õ­ÆdÆôÍœ\„L…M4+Žbš}³ÐT*f\màKÃÞö©Ö#tcŽ”ŽEQæH 4•ò9`ƒˆÌ%GÞÊš·)qVÖ«‰6˜J CáΊˆœ’€@—xEc6^]#"ƒ^“˜¾@œÒÎèÅjùÙ  $.s¤ÐÄ2£‘Š"‹©÷šC³o³×CwÎR‹Ö–žÍ`§fwí†SˆÄŽ´o¿«h`¡:ÎÓ¤yeú×YaÏœ9ÃïüÎïð?ñíšðK¿ôKÌf3þú¯ÿš‡zˆgŸ}–ûî»ïÿþï硇ÂÃc=ÆG>òžxâ >ò‘|óýÜs{¼æžëÔ±âŽñuÞ¼þ9üÆƓ˜ê$ ¨BİaǘJ’Þ•Pt}Ên@|2Cœ·‹k¤ ªG<üW7Tž¢“¨¥ÁøX¶6SÒ†¢ã!z© ò- sÿÿäwñÿçg¨Ã„âõ!u×£é*h@féÕè» "jÚ*è„KglQ·9É%K:¬qÄyž##æk\àN.¶ð9[컂}Ö9DѰc®š’îç|îÁ×#eÍcÖÌÉM±NNĈ gæ{t¦9ánAª—ÛœC£tŽ00ñú”‘Ä+5B6x  J„i༾¡4Ã"£èø4 ñM(ˆ¯Õ¨§ÁÜ7O é­-‰Š’¼ã³<•p]ì˜%I™!}Pš(+ñë Œ õ#â2Ç/#÷xTôš%Ñ‹ ͺ@@jPgìÐ …õŠÏ@;8Ya½pŸ+Þ+Æ|vŒ\·š‡\A#ÓÍ\q_ºßÛr{uó¬œßRWìçÀÝǤu×Üû®´ñˆËß<ä^køü>,kxvñwÿú•+W(Š‚óçÏcŒáÇüÇ988àç~îçø­ßú-f³ëëë(¥èv»Ìçs†Ãá?û‚¾Î‘sS«Iݦx%묕˜ÈETJ|¤)EÈfcYÍ+U‰tó›Ï`»acÙÝçÙFÂ(:`Ó¿IrbAZuñ:êdMV&DÍ}ýYăgH']„o0™òtÍ(:¢g¦Ô¥GÔIIÂeëk¾²?µßIÓeѶ¬™1sÑ¥Cê ¹ÇI¡o9=kµ¡1Á ˜²ëí1V9×OÆïÔ}Ÿž?#èÔ¬7[w¾„Ô‘â,ùЧ¢7œÒ¿p„‰^§&î, ;7÷©HX‘·ð{DNÒŸ3¼ë€ú”O/¼…2™R°Æ˜MöYУόMn2‡ðæ‰ >—¶y!9}1#31…\¯ñã_TÄ*õ‘뺵n2q3•Ý,Ë:!®b‚w`Ñ 6ŒƒÿKr"<,Y9¤°9AË[`„Wc–IÑgFOÌY爦Íþæ ÷Yi× LNýÝ/ñÑ~”w¼ã(¥xøá‡év»|þóŸçÏþìÏxÿûßOE(¥ØÝÝeÿ›/è1)=_R7’ЫYz±_Ѷ«”¾FÔP#™‘૆Å(¦Ti”Ðaiã;MC¿ZP>žlXŽbÖ³1R´ÈÒjÞµó†Ù(Â×5^fž¡ ³ÞÃS²[Û0  ƒä uƒ<¨Z EC<ɘÇ*¨UŽñ¥ DÁ¸Y#U ëê‚°…“¤cªWøtX´™¾ Ú]슊`Ys$‡ŽŒG×X‘“!=Mìg¤ÆcIF`Üüº ž®fì÷ U‰j¢°"(ÄÎ/j0ž¦ò¬•e¨k„´T“J[ư‰*hlWž©Ô–­u(D@*"‹˜‡ =;c¯üœN•!¤&óC‚eðíç3C-EöršDaB †#…•$6Ú±Ûºc ¬Tæ–ÖÜ™!Ó^Þ>7ʘÄ1™[ô²Y€õ4XIß‚—ÍÅC[ð 4·òÐWrÈØù¹“²5xí ›ýÅåß“þÀü@+}×»ÞÀg?ûYöööˆ¢ˆ4M1ÆeI’ü‹ Õ)Ö8$'¦Cʦ°‰kÛrŸµr‚ojš‚º&SÚªdzù’Ìè‹™ó¸ˆ1À’nk#›’{^R"ò˜#³Á4éQEŠfÍ£.}‹ö)Aæ /(¿;ûzP( CólÀÞùS,›>Þ¤âúógé¾zŒ +*å³)o¢d.zÎôzÙ"“bÝâÖdk.z4Ææ,¬qÄ’G¬ÑaÑ^¤#9Fu­¬4"gXOèUKÖ9@^7è…¢9a;à+Ù)¨àP¬qZ\áîù ÈÆpjó2Ï™»È›„¨ÉðòÝx4Âã°Y§6v-3â^$KÑ¡‡%ƒ±‹‹}ô‘‡º§FnÆÁG½5& ÙÔm\©Fy9ˬ‹É%ûl£¨‰È™0h ³68tizŽ1Rdt! ¨<Ÿ0ah7&ÍŒ;³KԡdžºI˜W Œó˜W`ŒSCÎb|aÉÎÕ%ˆlG1kOÆE+ß²æϲ½Š9wL¯P$!'â«Tø Ô=ö €ÃjYÞeKísYž¶ÇÁY_ÑZñ²G׃¡( Œ1Ìf3z½Þ7_Ði 6‚:R6 Ä%h|µDÇ %Œfb€¯+kÊOŸ9=:,‰DŽ’yØ¥$dϘˆ>yZhÛhD¥ôFÓMRÆrˆ’ ¹}ça w†Ï]½éÅphÙκð0oV6‘g_PlwðNåhOB ázŠl îœÃ»ø½œÞÖOU”Ž ¶º‰ÇŒ(ñ ¨ˆIae )l4b'®H÷¹ÏpxxÈéÓ§ùžïù~÷w—³gÏòš×¼† þÙs»©­Èè·\›€ÂÆŽŠAàd•ÒÐø% ÙÁ“5 6nÎèy)ª×¸hO›tv\âÖ ™è“tD=`ÝTU‹³ÈÍ =óZà¬Àvt6OÀ]–N‡Íy;zïu¦„aÆ–¼IDƦ¸ÙJVÌZbmŸSôXX;æ•Ï»ðaÕVÄ90¤$V¢ù,IÐ(‚²¶lë\ ÿJA ñƒ)'ÙCG!¬·ÅŒ>Gë}"r¦rÀ‘YãRzùßôaRÕx¦"ŠRb/u!Rй°‰k«ÂXã‘^íÓÜ …F{’Ãk›ô†sf.læ†Ü¦AÑaÉ€©=W• ,"tªè56»c•K“;»lk}[PQ7u€Ôú–ÉÖ*ó]yÓQB#<Ž.o0ÙÛ@ö\3QC5˜›F<¦ô0cÞI( ™0¤" õæ%…h ±ƒôç¦O."k$–ج2±F…GZwຄ}¨_ï 3¤°¡1æëb¹ýýúj™®yIÓ”?þã?æÒ¥K|üãçï|'O>ù$çÎc0ð©O}ŠÉd‹/¾ÈwÞI·Ûåá‡æ·û·yæ™gøÁüÁoAA¯ª„Æ7ÔJR¨ØÔ^€ô Ë(!RsaÉ=¹à€ *<RÒ \tiyì³åfó=1'SúT" §f±ngã"m}Ñwô¬ 9¾g× LnÙúÀ¾s$qq¡r ê…d×ÈÌÀIsÅ'¸+gRéÇ3Çà (õ‹×ZÆ®Øð)vÆ72c@è,×À²â;fI!B|jJéÓ(I`JëLGƒ1m£%RÚÀƒ˜ŒÔœ‰¬³/{!µT-S>”%Æ29&¿¦ô=X4Z¹^HclœMž+HLF§I1–.2°ÓdˆÆ &R@·IÛ ™’&69‰)2D]Úë|Ê Æ ¬Ú€ZRK”e ¬(­ílÝQ¨ÜöVNuLZ DdZ{Vñ²®Üô\qv·ñ xH_ãUFÐD­ öÁFMÓ‘èH`B;Í+׿ÙÚh4jÙÞA`ŒáW~åWè÷-t·µµÅwÜ1†_ûµ_#Š"}ôQNž<É|>çá‡þ#{»åÝ`µ#Ë€ð) MÒ ²iðuïW¨ºÁ5T Ýš:uX¶‘¥‘›]U—¥ê²tYT—ø²B% u¢‘$­dSÄŽ‰¹±Ù5à„=q޳#R•@PºqÜKû~+Î*\fåÐ(Ñ6 Öé¢WL}Ùº §Ñ·Ið”°äÖ€Êz[jû…ýî4Ý:žOÑ -÷&×x tºK:fI?™P˜¦(­Kº³Ên·±jZ+ìW+Mc€L ¼UœŽýsKP¶)qJV BjyË¡rõÝìfK»mCIDF"Rw1˜cžº}/e4AÕPy×02ȸ¦É}; u{|…3ðtƒ‘vßeAŸþ²"Ëí¡×îxyÎÑ´ À4Y <ÐŽ[Wä<ŒEU1«LßÍпµâïz¸·“R²³³Ã/ÿò/£”BÁéÓ§yÿûßߪ\.\¸ÀóÏ?ÏÙ³g¹ÿþûBð|€'Ÿ|’·¼å-ÜsÏ=ß‚‚Þ1èÄ CA©B2/Bmjf^bȼˆDfŒ‘ÒÁ 9b ‰&%qzu{±˜P9£ˆ}¶è²h#Pm°ƒÝÝO0§KE+%[’F1¢£1R·Ÿ€¿º €ó1Ž‚yJÚ‚1°½¼Ý’Põ° L—ºpy¿Ã<11C<¿&òs–tÚÍÇ*îPµªös¦2&‰*.q¦5™ÓcÊ#`‚íÈ—^=”Ü[ÌØèá<ç…-Æ2Ðôäœ1C"Qû±—ÚHº)©ˆ¹ÁŽ%|È#çƒç¹Å²Â„‚µ`Æ"²q…« ¼ÒE Îe<Ž(DÀ„!=9§Š|S0–î|9µ'9’#KRW’ÁhÁ82—ºqJ¼[Rè€yÔ¥ $Ý0CkIÚ³QµÑ‰d Õ–D MÕQ”Ê'¡@xÓm‰„yßG÷ žÔögˆIÏéÛEÏž7S;h݃&1hO¢ JP¬Kd x†Ð„’&®Kox¥©ˆ¯D¶ö·äãLñN§ÃßøÆÛ÷Rrï½÷þ‹Ò°[ ¿-ì ^{ÏTTÊG‹Â•JS Ÿ‚ˆRö,),pj•×+\.ö‚.˃õ&©Îû”y7%:•–OQ]ƒ^zVQs*†tž¾ 'ÏB”×`4B Í$Ñ’¢’©-%c†„º@J[ÀônÍHú8oz\œÝÅVï:x0eÈEî´þºC"SB kXàˆ¸&°¹ÞÚ—¡šÁ<ïqÀãjdƒM„2×enc±„À5*¬1®ˆA£˼Ã~´…VXã¡V’[§Ò›îøô fh]+­ñ3r”õ °°uDíù˜X`*A¦Br—&'݆?À£&&Gb( ÉLÜ*b²Ë5v[eQIÀ:‡VÝ#ì¨Í<À,A5lÔ­ŽØW[n®/©¤wì: (…X3pL.ܺ­82kdÄ(Ñ`ŒÂHI)çÌÙ jÓ:d–EˆßDάl‹;^©ýï[[\luE·e¤¬6ûÇ»»»ìîîÞö\†¼á oøº÷?Ë=’T¡‡)%Z)ò0B CÓxv!'¡P!EÛEŽ1bÜîV—tè²hw~+Iʪ`.é´–¨+†ã‚¦®˜,éRu|Ìš#\]“9ï÷Î&ì„–Tõe‡wœuEaîþ>çâ=0G@dJSItÚactƒØO1H&õïF+·X}ÞÕ,mFŸ¬·;ñKbG(¹•¶d¿× ±ÝÂ_–-“8÷, 4‰ëÛƹPUÂgCPI»¹™2pÚxá|޵_ZO}¹Î ZÒ4ÖyI¡Q¢aÂIƒt#‹…è´~%>¹I…•Ÿ4!˜«^«^¨ð™$=*ec]k)I£m•ñh´Gí+L#ñ*Má ÊØÃ5~€”Yt$)}1áTc=©²NÒ(MÓ-À5"·R<"h‰ 5F tòØG_4螤}J©ðUMíÙ²ÖõñFõÊ zÀ¿:Å}ýù”!9!)v]A澬IdJ.§ˆñÐ-8ÅšÇ,ê’S“9Ãä}n°Å´0+ûTãs()ý€ÅnÏÞÛ×Üâº< f$¬R¦qã™"‚|ž¸"¥•ƒ–È&=HjÊ$ ’>c3´fÍ¦ç’Æ—L° KBJá0ˆ’€ºòŒwæHlŠ9]Öå‘Ë‹°kZ¡CÇ÷™ø}”©)M€­³ÔÆŒ(ªÈÏ,wI,˜]ŒÜÔ›L¥û0¤UÂò°ÏֱܰÄ.;÷IJ}–t,qD)ð”]V£uÜŒÜèÑ&ç-³.fª0‡ y§v–Ù BçHWãµhìŒ7Øf\ެªIC‘„”w-Y:ÙpáùÔ£©}h f)í9œƒ‰\6†´ìþ•¼x•˱¤ËuvØ/·ÉtbÇuG´áWVTÊÇ£bÄLU‡…ËÉ0ªC¿•ÉúAIäø¦D¡Û é·´ çßÚ»ì[¹ƒÖŠƒÑãŠqϤLÃýfŽƒä§¹ÎR0fÄ„!]„,èòçP4lp`5…¬µ¬RŸŠ CJ|i®rÒ1O-Ô" lÊHênâm ž€];pWo¾|É}þWÂúž-&•ð´€M«iYÔÆf )4•r³Ùd!»Ü-žå,/â¹…`È”D§­O|AHFD@á´¶6ϸό®ñ"w‘³Î!™sÒªðñeÙF/XNÀTZÏüŽX“1§Gì–:‰áu|*$š!S–^‡ßóô´ÁרeÊ€®3l&TÊgŸ-|jb“ᛊr›’Xç¬×c²0v=M?_²FTÊ'6Ý4g.º”Ý)çxyC!‹8F45òÔ9ëÀ¤cð hC8¯­1P`:âeÎl3a9ô‰ÓoÒ Çæ©­°9€( 2ƒ¸ª¸~bDÏ, Ëš`Y“ïxÔR’©˜î~‰îj)lr{pÌ×Çîú×<ôo»LÒ8VwhËê ¾©½Œ¨)HeL§ÉÈE„¨Á7e ¹'¤NG-3â×PB#}¨Oúd¢ ¢ #^_’žêÛÝ`ƒµóô$b½Áüw[°™§ÐÛð•=ò,@ÏJ5è™e[{AM–wès²d.ú$^JBFè`^¬dcD' ÉeD·?¥Ö>3=`.{n–’6 ¥ ܸQ¡•h*C] ŒÁ7uKõ:5µQä“.y#=ÃRwˆçž©Yë霵๷ŽiL*ijI$j‰tžó¦Ä¤­ ¯$À÷KÛ ˜ «Gì˜Á’Ÿ³VY h0¥ãÏñ½³&˜‰f¬ÛfÌ£¶Ö×hLY—‡04®`Z?wDá ßÔ„y S‚~†H Eƒ'‘ÁÖ’Â ð‰(èÖÚ³n„ÛÜ`):L&Û­‡Æ‚n Ï7Z1e„¬ Is”oèö,ÚŠ6š»ÌcæK”†´c¦nÿØikßô+øÐ(Køl1Ò&žYÆwãšš’Þ1‰ÂÊp`%°³(;+ö©è1ÇsÉw‰f+¦¸5n˜QºíÏjä—”nˆ[ÚèDƒ§á©ËíØ7†ÖzKÜ2 ¹î=¦Ð¼¨X&=èªeÈåÓ†Á`š:bÚô1ÂΪXo=¦W&6çý—XÐu°–×êÊ­ö}Ä„€‚]ÆÎ qÕí×í4]"…!r䡜ˆ>3¢cÇo%qY!’>aË+ÀÁ›¸`í¬%+|Ƕˆ‚OÕÎ~S‡¤Ha°VI.c޼7±˜^HÁ<ì0õ¬_³T†I·GNHalw/XŠGbH +†Ã9ÑvEã Ò°CíÙê'|CiêDÚÏøÔÆc"†tÕ.‘AÄ=øsÉì9ÎÖ|t#Ѿe—" ÷kd¼²!U6ï^ 1Þ”F´'­ãÞºxåw÷¯ý•>¤Ö<ðô׬ÚA  bI%<†ûs¢YšÙ žDÓ üiMøŸ¬\pßÝÏ‚g‚k”IÀx}ÀQ0âȱnqà¯1阞±({œ×/pró·I“¾¨˜7=D£ÑZ‘DKž?yžJù4¥Â÷+d©)ç†üks¾ÿޱݹNÞDltxS)é2g­žp)CmðV÷Ð úÑa 'â«,ea rƒB„±Æ]<ÏÇ뜉%öÄIB N‹Kè@r•–h&EÛŸæ2µàkýó6òß.0Ô#>ûÔÛ`Ïçwñ”x5ãxÄHŒéˆ%ëñ!—ï߯7ŸõßÄÝQT IDAT§Å#„<}é!L`Ýòž=€ ¾ì݇ ÓåÛ¶þŠŒ˜Ó‚›r‹¿¼þ|¡x&“ˆ¯8 Û£=^=Z#'ædo-nâuj¶†û¦àó‹oã?Þ´ß÷Kè› YÓW3Ö9dÚREŠ@”¼ÄY&fÄ^q’ÿ˜þ •lEr–çmë"4‡¬sO÷ÞñÚ“‹¿1øŒ~¾®™/‡h­ƒŒ§¹OÖœå%" „Ò¼ížOPðŒ8ÇçÔ·³'Nðtp?7ÓXJ–"$¤àÀ¬36k Ô”ï»ð§œ¸ã µ”<<Rð—ÅùLñ:÷©ëlÄ7AþÜÄ ¹÷¶`ˆÝ„©jÖ² ¹Qû>siç¬Bf \»îPów²Î>Ã>ÛŒ³Å~Û¥Žµ3óßÙ‹7,‘îuNq…€‚¹K:ÊNúxQA)=ļÁü•²…û;3^>±¯Þ„ŠlHÈ×Üyƒ%Uqô×|™ÖñL_ò/,Ùé]E¢ÙKOs2¾Â®°©C‡®C÷\Q?`ƒeÒ¥q³o›Ä–9j§5BØgË1' K†%]G´^Ï%!9¡cÁWŒ¹°„Sµ°š}×xÌé±Å>‘Ë|¿!·Å3Wü 7¸ÈŒ3`JIÐn¤VWš•áÙd«’LF°ˆÀŒ.7’ujWÁJá³ô;i¨¤G¡LTU³^N˜«.e¢ð· ú(¥‰ÒšÂ÷С¤Ø* ²2Lúv––5Æ“äÛØ jm-[Âæ¸Kƒ–aLX•ÈÆ`b˜L(EPÕiXœò¡´ŒW×þaIqÿú¸µrUï`eç®f¬$(4Q^èUh¼R“Ä~Úàù%Ë»|Æá€% Tíµº¢Û•ÖEQëÊØh¶Ô>ÙtȲèPbbÃpxD©}ð`2¡TƒjŒ´2Ûº P^Í'÷xüíßEùùk˜AŸ£Î&±—2è©=E#Æ b”hÓÖ4Ò¾–ÛÖƒ¡6´þo+œõ°X¶pvÔätŽ2Òåâ,{‚²fÙ$¤¤áF¸EÚ”uÈHIXÒ•v\šOÔtYPÖE@×Ðyì];Ð0¸{J/ÑHúÞ”. r² gó%K*ã“Þè#6ð'ÉMÔ’c<ð,m1é2hد¶Xz–l¶£®ÙñŸÌdéR•µõÆh|Š0Dy53¯ÇÜôñEÕ_E¦ )r:䌂)}9LJl“—y@aÀÎÅ·¿`­ÊÜêÈ%–§äYëÝ&±cÄÈY׆¢ !eTNéÍ—T2À츾Nh)¨;†ñbƒRtÍ‚AÒ’_1߆¼Íÿ7]ÐUÝ ˜Ä}r¶7Ù”>‰HE¢b̈#֬Ą© 3Ñ.‘烵ç«ðY3Gtż…’Ãc]©u6*[Øy•жÅ>r†e¯ÞÄz8ØÀ…/:H=‘ðí'á©« Ö¡‰qè±…à×]×>6pUÀ] NÕ4=Ÿr?f6PyÖDæF±CæÇœV—­¬õ—)2ÆoVð¹bNÏ%ÑYg§Œ¸ýî%cFm¬«GÂ.1Y»(DädÄ­Ë‘¢aJÎq ÷³Š¢Ý…Ôx ˜‘š„6X8RžF8=ýÜ™s ˜âS1§×ÊS<çµRÒ5 b‘9 K;#³’¶ØÁô ”iÈLÌ„Hè5†Jd^Hm|)2Èý|ð£ŠB„UI¸´&òu ‘žÆ¯kæ^‡°[ÕþR#RKŒÁS j%ñÂÓX¢×ÔLÃÝj‰W7ˆÊ.øÚ“ÔÒcs1&<ŒT¾¤×ßX‡üCÞUÿ˹f×\GÒX[dýrŽöÃå‚ärÊDhM†üPà ԆaÖXÈ./r‡Í¬æ S†hG¬ó%`¬G\ӻ̳eÐñSND7¨nØ¢»(G¤YÀËñu…25G_ކȲš…´ÔëzQ~ÏàísÊÇ»Lþ¯ñ}fÅ7ïÞ%99O17]_°ˆº Ä„Kœ¡ë̦Vc§ËùiÉ„ÌÄ ÄÔÃQk…”†Mn©œüë.>Ù54‚Ü‹…Áhkz5Ù_çàäã õœ_>D. ½‡–ý’‰’Ü=%P%³dDÐÏI¿Ú§“¥lÄ7YÒáÂÁ „*g?Ú Obkj™S˜ñú†h+¥Lƒv4w¾z;ÅEüªæj¸ÃBv1‰@ÄÖj­¬BT\Pš‘(é1o¨þ;s¿ÇUq’‰² ú›v½ßö®‰Œ¥ó{î2§“-é|ÅUõɶµl–šJ‘×!ñ†áê‚Îó½8%Œ5³“}n°ÍäÆU ”a¬‡(Ñ‹œ˜ÚÙ¯J—4ÍPPïØÊó*têQge®Xš>õΓ¾­_6†ò[HŠû§Ö¡×Êcêõ9­dÂa …ˆ¬‹®‹”à:ÛŒYk­çt9`Ó² …õÐ- Úb©‘L8‰ŸŒùÿØ{×Û²²î÷7Ƽ¯ûªµê¶k_{wÓ½›Kƒ}ì÷àíEH8ÌAå|Ð55jˆ!M \ˆ1Â5D?)¾&’V*^- 4ÍîÞ÷ÚU»ªV­û\ó:Æù0ÆœÕý ÊVßxyé¤ÒUµwÕ^—9Çó<ÿçé³ e©†¸â· @" Éí ð5L@Ã5à‚mø{°9„ÿ;4šôëöÅokä‹ Ô<Ø…,ú†äXm_Ðí0 ñšóFÛ„¥±¢A†‡FâÊ¢†¿—4Mf±%•ÄD5Œ¾Æ179c3ŠK:ÌXÙ¬8ACÇ´Ä‚)]r<Œhn³CH·hsÌ fÑW¾Ñ•yÇ6û_£m¢UBD‰S#"7èÖk‹À&Ó«Çúa}¬êGž ýdÎa°A.}ã(~‘z†ÁëfŠD¸ÌÜ®iH Zó æÍ¢Ðx±"<ÌÉ{J@Ú JšŸJh$)brå@âÎJä!ˆ¨Dy’•dÚE¦šÂ÷X‰/×„ÓŒÕ v#Â<Å™€Û0MC@®‚fî–÷¿a|ê¿® cÐ:µä§œf™ •¢9ÎiÐŒ“¼†0Â4dçÌJ¯)H­i‹Eíº¸¤ÅÇŽ ´½ÛìâÄàߓ޸NB{s\'A6œyÃ#ôWèR’iÜDgÐòæ¸IAò@QHøüM8sýŒduÐãÀ÷I’Q–¤íj(qó‚lÐäNkÈò¸‹£ „¯IFMŠ~HÖ¹åZvžEÒ¡,ÉBTFBÕ„õâ!”ÉeÀ%’+6¸IÏ4?±E¹pÙÿÎâaƒ­â‘hc¯œx_މE'È™%}Ò½}ÓáKÝËI‰ãi¢2ÇÕ==ۼάÙfÑscr‘NkLÒôÙe‡±êSÆ>a™ŸtßÈ (§±¾@8%ÓÇ×Y6;8Q‰¼W3òÖøNñ7¡i§ ü03Ú½$òWä¥Çåž9|½rð ²—Óž­`dî±ÎúŒsë×(réþE¢™>>„TðÌ·ÝǬß屃ðÀé*‚Œ ZçÆtü#ró3÷!Bp9wN̪'m˜×™¦ALC&´ï¡R‡éÇ7È ŸD7xê¾û9\mðÜù·­°ÿÑ z ”4Ò“•Õ…fxF~ NÌVÌdZ…˜”Ô½*É‚OŒ´†¹ÕJ®hPØ0S r£›|–Q€1v É_§Ä þg“&¦9± ½$œ:ÿp¼uh'®bë…gr´}àP&õ1”Ï2ê'z@7>)>9Kšô¬–~Úíp›S¤4YâÙt7ÜèII(­ÙÌ!C¦ôêC¥­×ºÂì½÷Ù¶¶çžMw2.{•sÖ.;´±Òµ¼“d´/7ñ£‚æ´‰­qLõxft(‘u@„‹ ú‡v5°’!kŒk™\‰C3ZpÌ3Ú$2 ëO(]‡‘0¬üU´¬§’~cŠ·]2ï…”¾Ã\¶Ðž$õbg¼eš™D†LdÏtÅ]‡vcAØÍI›.Ñ Á‰ t%Ù–C©\æ®YgÉ5<™£;#B'g7ØF!p’h{Eì6È…‹v ;\=7’÷ßbBÿäþõ–sDjEs• …ÄOsÈ0œ‰…•ïT÷ó½È+2m <yèÃLPàß“²ŒÛNJžøxí„(\P*—ŨžÂ‰§œ]ºÝ1Éí&:ê< ~ýž¥Œ<Ý.44ìûä­(X ŽÃ5tW°ˆÛ„%Eé‘_kàH7È™ø=ö‹mÊ̵M²‡çD,š§ ™ \Án´Eàäd® Mš{åM4,÷;iŠÔCÜ1g]X¤ô³MÚ©±Óîä«} óE—–3&j§ÈCm20\EŠY£UÃFËYàvMü|Ù#ÕÓ¬K8Ë诬Ñ2wEé#Q  Tâ¢ÛãÙ€, p|蘿éÆäžG*Bk‡­‰ÓóÃB Ü,ÀuS–qËœÅøE†+s´’䱚ºH2Ê©ǰz‰A-]BnÌÂT(­ûƒ¤Âð©ÊØHvK%ñTˆ*$j!N$~˜ §,( ¤B-%¬ ,\ŽÔÝÉÙ»«Àÿ't¤À%§¯Ç8¢CF@Ž_k°ÁhûŒŸáö˜ÔQ†O‡° UÇv˜×Ìì*7¹ÚÇdøl±_GŽâA™ NxEN6‰ 1u“¤Ä“ËÏWHhîÀ“·`{^ì›i^[rÜ9s¸ˆ~‰Þs`Gí,ÎqHØ]ÒoŒhêKÑ"'«£ftYºÍšäÖdQ“ùVD¸Ö”fI“6¨"+_ãjJ60~ÀÜ¢•Ý¥´Ò¾ê5®àúÒ5¬ˆXã¸vkZÐÂÕÊþ^S¸«»Ç„63›gr’m<‹üQ5%.sZµ~xe=«MÈZ‰¶ß+¥S³ú«õB•_;.Ë($qBR驤Þ.! Çìܲd) ji“ù»eK¢¤q‰’fë@Q‘$¥!I6uŒ« ´ qhtôÆ–~äT¡Í®³)þM¼Ü¿UÐÿ™sKÃÚx;ÕÆ£¿ŠÅ¦YfßÞwU3]¬4Û³#ÂVʾ›ª„\z´˜£­†ý,7ˆiÐ`Ŧ0®=&èM—‹ƒ¯2ÝìS(uÿÐ4ÈÂ¥QÄLÜgDâ„$‹Èò-|¬»=f)Úè=]nÃc»ðâS°àKiaSõL°ŠZ,t}Ëe•uÁÓAy'`²rùÂýL‡¨Ø%íDdQÀ¬×!ñC |ÂÛ98°µ}€—œîïrλÎ$ìr vX-Ú @¸,dŸ¸l›°£6û\ؼj\ßÁ%¡ý¼Öi{)2TäGþÉd~l¥iš“Îpœ; ·nÁÕMã5ZIØ :tŒ.Ѩ¦@†B)´+ “ ÍpI®¬i‹0Q²ÒWv‡m4˜.¥…u\{æv/j½z…8˜ÿ‰ƒ*i™aýKë+|B6)-'¡‚ò "ð¬=né‹Ú¦šþ+í¬B’ÒdQs"Vu’TõøC›¢íc¨&¤Ì’öªXÇD„Ö%jEn›O†¯ ‚<'-}2¡&']à%‘LPB µ¶1šž ¬¡JDÒ¸eŽ[”ÈB AXdZ³ª:pZÛeª¯!)T}Ý:ÚìØÅ¿ä®ùVA¿Û¦=׈ÒïÄÏR˜$œÄéò¬ûT1H\§@ ULS|\JŒj½sjy,[ìq(· YÓÇ‘…1¢òJ£»vͽŗœ"tQÑ”<óñÃÙ‘ÍœæÚ”åZ­|p†ðôÜw öL‘ý´-ð¾iT2 ²’È=`((Sr‰ÛÊ‘~‰:2b`š_½á‚LÌ*³T澉œ¡JÌë¤; v4z*ë¨cG\ç.çä¬ ¢íRÎ<Š/ùˆÉ ;!U‰« )Ð'gÀ1݃BPh—¬¯¤qˆ(v\gUx¸n kíš#& ö¤¯…xÒNºsÓ 9¥É²HˆèÚ4¶ÛM~Ýdž+eÝñ”k^3º0§bDLK.Œ47qáŠ1ÁÉ!Eé.ŒÝ4cæ´-ƒZYf%Æ^Ñj5%Š#†vf&ûÊñÈ¡ ÅœP&´œ9žŸ’¬Z†àvÊîÇ•=0^ŒysGö ù?lïÀ_݆;pɇW1nR.ˆ{ú¶$;‘k9"*È>å-7ä47™‹6KaïÚ̉ˆëlôcÖ,°•Ð ¶(Df t&…¨ÊXï0«-1•Ü›,ØgË‚ÜemwÓ±Óñ’& âZQphùF ‘…>sÚ¬™Ð'Ãg“ýÚc1!)`‚ ªu@‹%+&ˆ©%Ò­Õ.RM½@‰mRë]oÌ0L¬ Å¡]æÂ’ñ´ÀÏr$¯Ì¹ã¯›U…š°VÎPeNâù¤ŽODÌIJø{LñHVPx …4ûòÀA;moL_dìŠ|2š*Æ/KJKD4$>M&|2×Ç#3Ó þ7.èßÚ¡Ý‚îÞVuÁ‚“µ°UF}ÁIômjR+~GX¤4­ccµn«rÉ»ÌXÙD­F¹¢•ÍkÓ™¤ Ùqw9b`-L1£Ï˜ëâsݦér:ßå‚•˜qC6É¢º!ôð»ð’ÓƒIØ4Y¬ièX³¢¾•CNôÀÝÉhôÝÞÄ›i÷Å”§$Â5ŠgT"Ÿ1וØTx…¢θ/¸Ì‚‹éšñ™ßNk¼µ„ÈY˜³LCP$¬sXç}—8$^È\¶™úCVÚG¬—ÈHÁ—M Û )Í ±Ã®ANÅ„ýöÅ3$NȨ5 \¹ÆÛãœuE#[‘E.=1áWÀ?œË!5äG¿·Ít7 ÊÒ~pQËu×8fA?ˬbD#|ã ¯obëè§cÎpe]›,™;=¾¶fì½½^J°£ ß¼%È@ãcXìgÅ KòmÁš6¯­ ®—£{@lÖ=BjÖ0ñÖ-–ì°‹@óø ² aæàµ2Š"¼{âÈ:º0~¿YÍ‹®TÕØÂ^Ö;ÝØ®•4ª²6­&̪×,pëÀ×þtLTCð'Ôa »ó^ÙƒÁjËisrxW±¶UÖv.a° 7÷ ³;¹)=@ip„-%J»ÈD!¤"Ë=ò,0þÁ³vµã’GžM3:1õ¯Œprëvg’*{„†•ñ©:ãX`HaKCñ É’kÎSéÖ%¹õÅ®‘¿–XødÌD‡48&!dA»fÈg¬ˆ¬4.¬MmVöïUæ=æç ù0!¬wT)!KѬß×Ò&L A µ¸uÚT‹+O’IWæµµ¯/2’À3²$é×^ YGB() ]Ž‘;¿iBÔ{ýʱ/—.RˆÑ(1;û•‰‰0“^SüËÂY¾5¡ßýá¶fïGãË?·ÍÏ[Ð%F*ªžu¿v@N54Staï›*sBsÚÓ¯¯åÀÉ®™¸Ò•ɥǓ\"b…CI‹ûj‹¹l“â³/¶)µä0Þàrt¯±Y-FÓ rÇ3kº1p!„¡ñ´xþ6ÒR)È|¯—Pt<8fº0Ï·¸êÃ&ˆä¥ÏèéM”ë Ö âfÎt½ƒµéÀOMz\y5Ìéì^?4ˆcv­A’7Í9–Bê„Üa“6,'Æa¦:FZç œa† ôHבÞeËÁ-…ï0ÁðU´X üuæY‡EÞ&™4(ZtA5…tñÊ´àØ1’ݲ”8í5uÈFMtE¬Û° :Lü^ÝqÄ%MÒ‡+ôžD漓·@“¨ÏMÎá›÷‘ˆ™î_÷1ä7B”çŽSs½øPô̹´ Å®Þ¡-fÆg?°2I‹é¸‰Þ ¤ tò…=MÈÔ.;8”dF!!´2;x%þëôʇ¼b£/iš;Áåx²NÛîÃØ´æ$¦ 1Ä#£É’ “û;±$1e aËß°îfk[RX·.–¡Lhµg¨¾ñQÖ#aÜàz 2…Þ7r6±¡ lnáþ›Óm¸¶7‡æ`Y ¸ê@D'G¸ ½ç"Nå4{1a°dA›\û8ÂÀy‡lpìö)qðÉì4n$ a]Ðç´Øg»^·7cï‘ÔjB¯¶\\ÒÄ¥¨]÷LÁoÖÅsJ—ZWÝ@gØ­ýŒM¼£Ù­¹Èe_S€ÀrŒG½[§-`İö®_Ðâ[ÏidftqDi¯UÍÊÞ(%sÙ"Œ2ŽÅ±Hk(=&âP®#)Émvó±U“ B“X'MZ—Ї%B*´p)„cËph´Yø¢fðgøLu—R88æðj›Û»†Ñ‚oô»Fó¼ØÝQAì-öς٠)ÎŒóÊ“4T ZÔ±«M–Ï"âú¶Iõm“_— Y‹eÚFxŠµð˜¹µUHšr Ö É- ’²EÄ8¢¤P.qÙD„b©MärË2ñ£ήÁßïÃ=[JÍ A¹é>·1™›ÏÅ–FxÊ„.éo#!+#¤W¢–æ|ÑÒ\[¥/ ÁK;'ãsßüž%$8fª¥mŠßÊë\ñ©îP”é3Ìá“_÷á 4ˆu #ÐŽyý (JÇ‚.Ó¢KR$Óq³ž¸Wáy)¢oÓôäÚhÎÇôB×¶²Œmƒ8±I{¾‘¾V͹YQJbÝ`! K%< +…ðÄÿ‚‹þŸ#ÜþGÛ¡¯Ó-ÏiÕR³ƒ¯,I«bS™ŸT0TÑvÔ±xUÄiüzZ­H_Õ´UM´®µ†­Þ¼,÷¡£a"Ì7¶P^˾‰» ×íÁ;³tp¶à±;pjÛIð[èT FŒº+X)±¦9ò$Ohc—ê““qİ֟¤õE“Ôù¼صšqn ‘ Í¼F!$¥m |ËCȈˆëÇj]Qa$*b† ‚QMŽÚèUYç!›™>³ „Ë‚æs¦ÚÇF@R‡ëT™Ö-,iX)œK‡9ZY?Ir²ÉK1 ærFè§Êu\§ ²;y%®Wïô]K¬"k+s¡†“ØÃÛLô$®6á0¸¦ó·öÁ+™C‹vÍ»ðEV7 yÃA;wÙ&;ÿLѶ7©ÖšÇœgžy†W¼âôû}þâ/þ‚Û·oã8¯zÕ«èv»\¹r…/|á <òÈ#œ9s†²,ùô§?Íññ1¯|å+ ‚à?5× ìýfâÖ¹…Ù'–7}V!tìשqôÓœV¹ÄÉ!w=\ Wn‡M,m±ÈñØá6åÊãLóošé-öèÙœ …C‡™AÝŒØm±â¢ºÂEù a˜€Ò,ÜYî \C³a!ÀŒ¯ÅWvá;Îmb OX` @º/¡Ò-ðœŒca£@ê):sðÆ9âºew»92…¾?åùk_aI“c6Ø—§¡¯}…5®ÈÍÔ^À`yÌ|•63ÖÄ1™ë#úŠýt›ùzŸbäQ†Æì‹'L£ä{Ãò<Í|µ¦:,¢&Ûì£Ö$Gzh´éŸQrï—¬™â7N9·¹×½Œv$W£ûIüÀý5ð¼”f#®ƒXhÖ8d›¥A?ð97¸Ñ—¦ió´4b¢Éå.òe–4iº1‰rÜrõÂè~?å”'‡¨±â<×jnO›9züeø*3ȹ ·Œß…øûö@v§Ôm´œÕ7x@|ŸŒ'×" d¢ð܂̹ËÝœøæ›ûÕjÅc=Fš¦¼ò•¯$MS>úÑ’$ ½^ïû¾ïCkÍc=Æññ1ßû½ßK³Ù$Žc>ñ‰O°±±Á#<ò¯ï­l¤i¯†:+'4i³›,m@‰!¹U.gÕÎ|`[ªi°Ùm™ýñ’žõC l¸É#¶ØÇµSk‹ëâÛ”ŸtÙ ˜ùf¯º¡™†}Ð{6lW{Y²JÓÂï“ âsàÁ-¸zOgæBéØ&à)ö¬™Â ¸°š´ðJCÄȵG¦}ÒPq×»´dÁª‰É­? e# [D´ð-‘.µå9x–$.¦ƒ!ÝMé1¥cÃWŒæ®ÊHn°Â–í# IDAT4Ò/;Õ¶Y KmÞŒÆED› ûÞT9Ó=&x€_1äÏšÙ4Y2`T'ßE¬lØN†°¹Ç]¦´ô¢Î…6ĺU½FUB7›Ó׺Lj£ &KÖ9¤a“éŒáÐq­p)èk¹QK4ˆi' ÚË%B+\U蔾פ?—‚µdBHZ#Fú N¾ IfNv—Î2Õ„þ>l›\–%_þò—ùÃ?üCnÞ¼ ÀoüÆo𢽈½èE„aÈh4â—~é—ØØØà-oy qó‘|„O}êSh­yç;ßù_gD_Ù‰;µÓwõ¡ì÷-¢nš¤ý7VYN ò­rlR`‹!).)> éé‰%˜‡ÉŽí$ÚÌê¼ìÐ& JÛüv™ÖHc‹KA(Ô9 §5œµ¹æ[À:ð@/Ù†¿ºS31«;FR&V”¦yºpP™‹ŒÎ…?ÌÒÊü^l2 ¤ÝÏA+ÐZÔkLÑÕfeá ôÜìÞÕJÖ££+É«_‡¤4ý%îNŠúP¢FÒTmGdfxªÆNÛhä°ó¼cì«㬨h4ašáEMŽ-b‰>6Ï[KA–xæ}5½º‘ŠXKëLÁà+ ÷%úº4gv`P‡X4êaÇ4ìˬ…zFÂ5P‰KçòåËüöoÿ6yž3øã?þczè!î¿ÿ~}ôQ>ùÉO’ç9ïyÏ{PJñÎw¾!ýèGùøÇ?þ¯ŸÐ¢Åœ¶õ&ÏPVÖÔaj5ã9‚Œmöè0«¡×ØF¦vì VŒ*=Él—Vºe SE¨3мooh…½ÍØa—…hqØYÑyá”Éþ ÷*ò«>zß1²˜`.¤ Ò[·r™…Èî—pö4|êL6 oI×MЛJç ßopY_¢±6'MCÆr‰×çÿ’çgHu@`¡åŠÔ7+;„Ί \`mŽé‚;lÚ›Ñd92ÙéÖœ¦a-#«‹ÜÐP$3ºäöî^ÒdÀ¨vyr(kIWf“ßV41 ÍœmX瀚N9`ƒG,iÕѰG ¸Ã¥%ü5Yr›SÖrÖÜüžÈkø¾ÚwŽé‘ãÈ”2òXÊ¨Ž’}6;j»ø«oï°Éó˜DHâ¼3Ö¼ žÌ¸%N c[›XƒÄò7áˆ=¶kèþ@¬[´Ã\±‡ë=Rß¿û‚þMâ\×åG~äGøÚ×¾VÿQ«ÕâÏþìÏØÜÜäÂ… üÝßý/{ÙËøîïþn>ûÙÏòùÏž¿ýÛ¿åg~æg¸pá¿ÿû¿O’$„aøŸ¿ ¶`[–uýúAËžõ½g¡ ZÎ1iŠB# …ë”äv ªí=P!}%.±h€GÍÁpêäðF¾*D Ûz›$²±4îi• ¥” ÑÔèÜÂÕÕ©™Ê…Á)¸³‹Ž#s ³gäÐQhT!a!Ñ]V^–­cŒãY~8i|Œ:$E+»liè ðKtK⯠™kÜ0*S©ŸD5È ¡4"6qÐBØÕAÚ‘¤Ê5"WŠÀbpfÍ) …yÃt(Ì{Ô(åÛxìJª+Ú ofxZZ£›Ð¬:+"d©”ö> )PßVÀ•}žh)jþ•¶ï­£KhkPÂr«”ñðNHÚ¥åeUdJ…4ÂÕª/dS™•EÃ\ªp@@.ü“©ºm”Ê“8AÐÿ‚kþ›Ü¡ollð†7¼¿ù›¿1Gˆ”ÄqÌŸüÉŸðíßþí\¼x‘~ô£¼ýíogccƒ}ìcríÚ5~í×~ç=ïyüÎïüîåË—¹qãÛÛÛ\ºt ­5O<ñóùœGyß÷‰ã˜Ï}îs ‡C|ðÁÿ },l.xFÇŒ¶•h­jø·´zÑJK½²>Ìʺ´l÷–×&$F¢æØ¼ô†•i‰çì"b„Ýãgmêyq²ã°,šä]4 ýéVƒ$B ¢’2sÁ‘¦sõ$„f·¢gö¦Ý.œ†ƒ[à¬C70oNËÞl!8ÝÜtv±CÑ(%Ve‹…lic”SG$Z¢—+Šºð.-#UXÀ+%°r-³j¨ xe­ ¤Õ· ´%šø5Y-µ¤ 3«×XÐ$ üúsl[BXgµw:Y ¹Ý·xö½uIìÏUWbŽÇ’fÝps¡ÈZÖb‘‡Vím]5s§U õªæ Ös °ÈÊ–¶‚Ý«¤¸*Õnéf„BÚ$`JÇèØCÆdpwk’¦‰àí×ÏO#É¥¼Ë¥÷×!Å%üõça¾„¯\ÿÆ?úÞ÷¾— ø½ßû=þèþ)%Íf³.öóùœ<Ï ‚!A¦é¿{AϲŒ/}éKŒÇcžÿüç³µµE’$|ö³Ÿe0péÒ%¤”ܾ}›§žzŠK—.±µµõœƒKE9Ó'Å<³MubwæK[è;Å/M1 â´&ºÇ$®¯Oè´cÒȧݘ³j7HŸ…0YØsÚ,ir±y…ïDq™û¬×Å””6sÚjÁXvYc\Ÿfº5\”ûùÍžØb¶60ĬYý<‰ã,öZhGà;9å ôMX\ŸrñU»,Ëó£6Z ÂÓ+ ߃BÓaÊ :Ä RoE#]áʜٴϻi^ÄgÍsož[ñ‹Op$†Ü<}“yÔ¥ô%¥ö¬©±1Ï*à¾ù3 W‡kìKÃ=Ù’{h_ð×°÷ÂʶÀ™iäÇÍ>8¼•Œ3š÷ì29ûn;§Fß»ÍmÖÃC®…ç¹\ 'ƹ/Ö4&)Q/åÂù¼øþÇÑnž=¡âh±A¢Cú˜SÓÛ0‘ivö÷pË’~0%iG¤Lî0j H§ÆMTFŠÎµ‰Q …°Sîò|¾ÌŒ}ŽYÑÀ½bƒüȧh Nº‰nKäTA½å”—¬çLx“±èÓÔ1SÑáü†tfÖ’áÙÒSDÙÂèÐÛŠs_ÙC‡p§y“󧯒ð䩯 ƒ’EÞÂõ î;wÇaû¤¸ÉÜœZÃñìëÿèúú:øÀRò–·¼… .e¾ïãº.Bâ8Æól¼m±Z­pÿê¯þŠ>ô¡ñƒ?øƒ,—K{ì1Ο?ϧ>õ)Þò–·ðž÷¼‡K—.ñè£ò?ð|Çw|ÇÉn÷ÂUÄ©à„álJ” µ¼…bS‚ZÚeŠx@ƒ˜u¬îpEi'òj5’‚……vó\©-øMUjàOæ¬û‡ÄýñQƒ ¹¢è{ˆ–ºåA*÷+tú†4‡Ê…è ]ôui¦ö!Ð;·ß6„SA­eÇzð4ÅußÀk¡B ‡ÅaÀ²ÛeÜZ#ÕÛáž™ÌóÇñ¡›âz9ÒUÒ°Ê3|0){t䌮˜’ã1bPïTj‘YT®rlâPÚ¢k&ëMöi‘pÌ#†d6ªÒº»äÜá\m¯» Å”9>mkÚaH,m:ÌjRßÃV­Þ犘Wñ@×½¶$¥ŠhŒhú iòî·¸–<7ÅyvŰËizŒkîD•®—ᓸ†‹0§]“zŽé³Ãm\ë€7¥Ë˜þ³blEý˜×nƒLü &tÿ×øïý.óù•ÂîùÔ©S<ðÀ<õÔS¼ô¥/åcû—/_æå/9ŸûÜç¸sç›››ÌçsÚíö¿ûp}çξøÅ/²¾¾Î;ÞñÞýîwóþ÷¿Ÿ|?ýÓ?åÕ¯~5=ôïxÇ;xÍk^Ã/üÂ/ð¡}èdÿ¯AéšåŽ´±gàU‚ŠÇbÿAËÄ&.‚^ÌÏ8Gk®ÃÂmsä (¤Ã\´™ÙT›Ëk<3ºÈÕͳõ™Òµ0{‰C&ŒEóÂ"Š>yÍig ¾êßO›…!ù¶ZPJâYµt-…:#)6R1õ¡1Üdü{9Ù MögHnŸR{„½%JH¢ss\§Àurdhî“K½œ»zãÄ7ã’Y §‡bݨf2ù¬ƒŠ ŒnÎÉnæ<1L‚·ÜmÆ¢ÇÛ30–ÚbÈx2$½ÒP±áŒD 8¯9¶™†íÚï+<È’&7ÔYvÅ)RiÜáÈ@5Éýx’ãnŸ}¶ðÈío0-zä Öƒc _2uŒž\ n7¶5úÌV%‘«&yà›¥@“sÍ0åÁÒkÔÄ]mQ•@¤Ìâ¥pÜÑruà¡Û†\W´]b7ªïýjÀ™íö(„KÙñ; ²$D¯™s^…’ý3´„…á‘Y±ˆ¤ŒˆW šrAxjÁ]éßÀ)®7€ÿç•ö¬ø_ÿG}߯ϊ­­-¦Ó)§NâÖ­[A@Y–¬¯¯“eEQpóæMN:…û?ñL§Sž~úi¾ò•¯ðÓ?ýÓ\¼x‘×¾öµìïï3™Lø¡ú!~øa~÷w÷9=Y–ìO#fÞ·a¸Õ9º„¤õ4u“3V†–Õºó Ÿ63“pÇjÙOsÓÀ<6;}ƒƒÚXƳˆ@‡Y](Ät˜qs5"PâºÃ=â¢Aº Ñ3àü’|¢¾êÆãy ¾&Q] ·lk¸*ŒRHxd Û‡«ë&OýÀ“˜}Ù:pQ£JÞ ÀÓƒ9HIÒˆEÞa‘¶Q©GÐXȌմ…l [‡l²ÏêEŒ’Ž,h…KfE‡Ô Ð%ì8·‰XÕF;mLhÍSÜCÉy®±âu“anS‹v9À°<ïá iàÛð·¶€m± Ãç›xä 9"´ùçæLÙdŸ]b"ºö½Ši«)}†{ÈèÐaFŸc\JÆô¬'|LŽ[Ñ)gäÂE ‡@ãP²Í¾õ¢µoý ÎpțܡÌ.F qÉäc\Y0r5w£a_‹¤¾¶ÆôXصP—©IìSÙ"G«9ºˆîžç~s,÷÷½ï}üõ_ÿ5W®\áç~îçøð‡?LQÄqÌÛßþvÖ××yôÑGyÓ›ÞÄÖÖ/^äGôGyï{ß‹RŠŸú©ŸBÊaû™3gxýë_RŠüãìííqåÊÞýîwóÄOðð¤iÊÃ?Ì÷ÿ÷såÊ>ó™Ïð=ßó=5ÙjêšBÞhƒçñ\KæèY…¼xÖ÷"³=×°8W¯@K©JrÇeJ§&†.iZ²§KZ†6ø¨S»3údæ\é³,‡N``·,Ùå´áúh‡ƒø”™Çá‰fÞ5P±˜jôÜ@ë­fãýŠ¿^@؃Pœj"|My8nÁR7qUNWN)‰,4¥ãÐñ§fGžR™,A5%sZ(æ³ã«sÞd0uzLãgj¬e1õ:&ûÀ®ÙŒŒmƒrÃù:yRè):2.ÕȾ†®&“>SºÌi3bÀ6{,„IŒ\ê&EèB DW#‚Òä²²ö¸3ÚfÞm£I’;,u“•×0Ïi eG7Ìš­ZÌ7O†&X)3„É$lÕ ^î°Äáu \Ž‹5Fóuˆ!XÅxýñ²gà} ÷]æ^‹ =s–ÁëχàÃ"o1µqdAz†ãhÜn†#JJíÔa1GbÔ ˜' ‚ƱînÍe¾É¥öññ1ïz×»øêW¿Ê[ßúVÞð†7ðÁ~ÇqX[[ã…/|!Ãáw¿ûÝ8ŽÃk^óZ­?þã?ÎÏþìÏ"„àmo{›ùç¾öµ¯ñ‰O|‚_ù•_áóŸÿ| ú¾Ï|>Çu]\×¥Ñh°Z­žó@n^ÎH[X÷ØxþÀò¦3âº(dÖé¬]‰–e¿  Vô[³™œzå Ç©ÂGK U›}MõûÄõ½btoØ NÛ{Q"=ÅÜm³7”$íœaÿ€e·Á4Þ@ s…ê ò22,Ë–!>蕱$Î8ÆInoÖ7Á÷L÷•Ùi½ B ô> t(P¡\zäi€*ÔRRö‚ !G¨LÊÉÚMâ¢I¼0!/Ž£ÈVsݺݓ²§¶X• ×%wô&M±°f2Š6ê}t¡»m&X§Ë‚&9>Ç ˜ÚX[ßjË+õA‰cŒ€&K³¤ae]¦Vs.kSŠ]\AôfzoÔû¸Ó1¸Ä4IdP¯\ª)ßµDJÃÊwë:±ã1ML×.PÄ""$­ÙðKšV%Ð"ůaúØ k‘>ΗÝ/ÎXå³™¾û ý›”­½ùÍoæÍo~sýõ·}Û·ý£¿þË¿üËÏùúÂ… üæoþæÈ5øG>òz½[[[õ9Ñl6Y­VŒÇcºÝ®™Bz=&“ɉdMÃÿ71…KØ\³Œ÷üYP;¶À »w®vê{æs/*‘ZÓ•KÒFŽÂ¥å,ìà×ÈÍ”.O;÷ÒêÏh3bHnó:Ì(ºÌ˜ÒµgÏ1kµ/Ä®¿M[ÏqEA"BdjdKyšf£«á–Ù)ëÈ t‚ÅÕúÿ à³üå<´C+FÉó#Vû§Dõ<йG°–°J;Ü Os¶sÛ<÷‘y¾BAz> ¦I¦ÙI*‚@döó»T2TůIu`$¨ªÀ‰rʶ7uMÆòu‰Ø‡NSD×H^ Úç ´d™·XÎ:”¸–¸X |‰l—µR‡¦&ì,‰‹é¨ÛШ@ÚKMÛ™ÓÕ 2á×öÒI |…ž8FÑPhˆµ9s³s¯dÑÕ¤=]K˜9”W]’f Gªçý|Ëç2Ž–fmIËð£´'QÇåÜGÍÍ_¸šæ*¡ðÐ’‘3À#'Ÿ…†<·;¡¸ýeÒI­ïrBÿ&ekkkk¼ÿýïÎ}àxÎ×§OŸæ·~ë·žó½W¿úÕ¼úÕ¯>éžyæÞ÷¾÷ñÖ·¾•Á`ÀÚÚwîÜa8’ç9¬V+’$áöíÛÏÝ‹÷¾¸ÁÙ—­qÀ ¶/­v¥CY¢m¬gƒ9}ŽéÚ ®AL`å]9lŽˆŒ­Òª› WnQ¸UÍö®‚Q*¿ps“×ð{J@*ÖúGuhC,"÷MYv»H+}(âá—†Å9òÌ }–»Ø6·áÚ\Û„À3^fålKÇL.¨Ü%%$·ÈF7O ™#ѱ‹Ê%ÚÕ¤ÒÀàq‘ÍB¤«˜:}Têà„9:w8ʇ$"`\®‘%+4› k}XÍ·àP¯[ÛÙÓ¤#K¢ &.8¢äØésÀ¦™Èõ&ã¤ÏÒoâÉ Ä³ìN®mxç¶ 3 {#KKë伄ˆSºua>`ƒ€”}6i³¨w“)~­w9ft¬ÕØJÊX}^ÁèÕc‚z"@Ô){ÒÕD¬˜Ð3ð æ´™Ò5u`×]r+§Ü³ºÿ´Ðþ®MÎiÁ¹û‚þ¿¡±Ì£>ʧ?ýi~ñÏó˜L&(¥Øßßg8ráÂþüÏÿÜ@‰W®ððß¼$¼ì¿aÂDÜ“BTïÌõ³V…ýÿ³U!”m#M›©ã’*¿nO¸Ùœ¬•T‰ONÈŠÄ^Ÿ§šÊut@¦Íjh,̽㈠ÌU‹Ò“”… ŠÒ†¶íŒ”)\ˆ†¥ç#Ø®ìÁÅÓ¤L%É¢ŠRI²Ä''B è´§ø*=q³¬Èq ³ÎZÐ"sü“œ‰pzeôêdØçšÕê&&zå¶{Š`{… 1Ófï^‘mHlŽÄ}yV”!…"w ŸEW|‡Ô<>é*„Cº(s…v\”kŒž´Ô¤‰µÁM™È„OŽks'$~+ÅYËP«2mV*»\Ï<¦*Bº¢ÿ:npÚ…²ë{2së‚.„²VÕª^Õ¸HY¢´ƒ™ˆÞb䢵a¶#Œ±¢æö¸hÓ¬ O¡·Ö£þæKÿKHqÿf:ôŸüÉŸd8òÁ~—¿üåüðÿ0¿þ뿎”’û±£ßïóÒ—¾”ŸÿùŸ'MSÞö¶·ý#c™‡63âšäeR»—4kwi'í•uâ0ª !¦t 0Ö…)!û1¨ŠÚ˜ÄÜtsÑÄú¶¨ÈS Vu~øA±NC®èI“Á~sqU¸ô»#â¸IrÔ@qƒËb"ÐûÑÐè ËR½ Ü ´nÓ·áe[°eSÙ*&«í|‹Ü%Y…àé×OQ‰ƒö¬<¢a\ír 6hFKcQ d«¯‘"<æsP¬yÇHW1I{¨RpÚ»UïÍ≡5J8d¥ÏÀÑdŽã”äÚÀÛµžÕBE+ÆùMgÉC»/l4m%2¾îqÍ$.pi²|Î4`ØÂªö0J„˜ˆ•mRSäŒ,§"¶ïB’RX—¹ÜJŽ*³›œ%"fÀˆˆ„B+i+­1Œ¶¹îªÖÌ»t™ó¬[þÅœÊÖVÛœCI*Ê»¤¯*Ô?q£êÿ‚Ö¯O>ù$o~ó›yÕ«^Å»Þõ.ÞøÆ7òÚ×¾–7¾ñEÁ[ßúVvvvøð‡?Ì›Þô&|ßç/xÁÿôÂY]€Š@xV‹^²¥…Ü«â.íßï@1”Œ{mD‡îC9$–¦û,pÈ:G áŠgœ]çÅ$›”R²îr‹Óõ4»-nq…äêø"Ž,ñ)ûÞcݧÌ\õÊ‘oŠÍ 8–枟€ZsLß‚3(qN§”+Ö#¸>„Ü„ï:;Ðr–ÿÅ:¬CÖqÐ-AFƒÄU”]§.æÚ¿,7<ÎK˜ê.»ñÎ Š±k‘6¦qv›§x†{¸Æyv9MLÄb‹¶Xpt¸Eº qºî0­§ü¬ë1=ßàVxŠ¿ó%^`³r|û¹¼¸ŸÃù&Ë/ö(# Ó ˆûI3à¶·Î5Α‘ UµX@y-`±Þ§Ø ã_À±ìó4÷rƒ³\á">ã|bâ›ç=0kÆÖ<'„;þÿÀC,i0§c,g=ôMãå®=IzØ$,sÃ%Ð0iöø<s›mŽX§D2¡³B˧¸áÂÂ;iœ¦1x&¼€CÉ“ÜÏçy‰"NZà*ÊÔ¥Ì]Ô5çîl¢Å?}NÀÝ#øÿlAÿä'?ù¾ù¡}è9_¿þõ¯çõ¯ý×ýMødLè!дXØ8Tð1§IÌÛµó}\fA¤Íœ#–ök‡’üF×±ªkzNÛþÞcè[¼CÉuÎÓà˜µ:HäŒ{‹C½Î¤0ñç[׸ŸâxcÖó‘›0Žé£,Wb›Û$ìŒÛìqóµíín²Á¦ôðÉ8]î∂]¹có¶—HëûÜaλ<Í}äø„$œçz&“›œá•wG:+](þ‰UýœÐ/]ºÄSO=õœï½îu¯ãu¯{Ýs¾÷«¿ú«ßøu‘à¸ÏšÌ«)1·HW¿;vrYÚì‚,5ÎBÛð9¥pXÒ`ǬÑ`Iê,|R”#¬;¥6·ÏQI(%‰¥AžÜÐ4£yé1wÛŒó>ž4¬zJDK£c>ÂÀ>^‘PavÀÂ×”K;In×Mlk›lâ›ç½2YŒ¬»Üš¤p­½l`šå”2ëÃR8ˆB›f"±¯KÌsÒérm¬)!{l‡ÉÂ\ç¹ò(táÝ´€L)À…Ai’âs”¯£<É|ÖaùL}GÀyãÙ¡ˆ$ MáxÌmôr9ñHMô- {PæªáÔ¯•–²6¯V¢É42¹U³7±ÏÍò)RXÕOi±CIYJ‰»5ö@åuBŸpt4VvÖ1 ò݆yýö8  ªëOP §NÍ|ïPû¤Kµë""Nî®új!þÉsâÉ„þ¯ýUѾÅ)CFÖÖÔ°& ÿ,hYv´¦ËÌ:‘™”aš½§ƒÂ)UíK®í¿áZçJúe˜ÙMZ,k«Ôu‰X™ýAd–ŠÀS»gÏŸ¨™0v ÖÂ#"¹âr˰ä›í%±lP:Ü"PÈFA9÷ÍE”›îÝOÝ¹Ž ]£ŸÜ7-—s_j œqab gP½¯»"Í”k4™Ž((rbièÁFJœ6H ‰ÀLÐÀ2o¢„ +}$%±hâJ‡ ­È•GàxCÄì/vðš ¾8alÎiãè’©î‘–>g½ë¬T„fÊí cÞ3¡k÷å3zL™Y‡?‰bƒCŽm²]Lƒ6ó:EÎ'cÀ…`ßjÕ+Å‚ä}|RºLYYÉœq ë$9c¼ãÙ©þˆC†µNÝ'£Í¢†ç=ÚÏ@Õï¬V2UXNelÓbqÔBIOOð¸;R\îJ2ï߉¥ó­t–\ÍÁy³+-Aö1,Æã¡š:öëbî§Žùs9×t[1:xëtSFÄôÜ ‡)]Ž2ecKê:Åÿ?{okkv–wþÖZßüíñÌÃk¸UåªÂe»Œ+¦b¤Q„Ai³ Ò/ IDATº1F( "':Ф±‘' BÓЂLPÒ86ÁÝ  x(5Ïw<óÞûìù×ê?ÖÚûV\™H6rI%Õ½uÎ=ûîoßû®÷}žßó cYŽÀ }·ú›ò¢¼ ’„„INlæœê©˜rwøÏê;ÈÏ$Ì:)Ùµ¬¼Í’J{°k-çæ1’JxÄ;cfA}ÚÆäU|¬ Ÿ8dr÷ºmî¤ßb‰I%ÓãžqOä9HߜɸmûæÄTçBƪ‹9‘–¤f\|Ö·;^õÉù1/rqiE-Z yüÌ”Áz—Ñ´ƒÈ<ø¨m𢭂p\й{Ìý­Ç¨•}›þ„Uz˜–d°¹B=á9{ ¥ohŸÎ!šsq÷*ì|ŠW/!·Kf´ÑM…¿™#G6FÃÅ3/’&cVÅ C:q}¡`ÔJ™ö:˜ # |Ú¤vî»ÁËx’) F4¹¼z{¯9‹> àÔMÃð´ýìt½ñ!®s‰¦$ Âã±Û ¼[†ˆÑðœ²QÚ=PÝŠ»gÏ’y=ÖyÀ<¹*´Ýߊˆl3";Š1‡Ê6§PB²³ ô±BŠÓj•ý{v)N#Èuå1z&ñÏ䬮³}mß¾7/úIÅ<Ü„ªåY”qGÒ;Þ@x)kxÌ6Bíé]ÙÝöœÜ`‡„Z*Ž¢ ¦QÂ\6d£P‘6Ï=8¨9^gœXëjƒ ç¹B™úŒ/49Šwð^(lZ×3è&§¼lç B2Þ¯Ž«=±Îéá*q{N8Ûkl f¬¶TÊçBpÙÖ ¯ÉQwqÒfX¯’OB‚ÖÞk¯ùZqÂ]<¢b„õúaŵݳd”<‹ujàO L!êä얎ݺmF™ÕËŒ¼.¦’Pr/A=UÁ‰õÉ'‡±,؈{ܹñ,%>çW^¤%‡Å.#ÓFG qùVNèPùþçùùÅUÐÁ,g¹æö“‚>]¾R;ðKÄ.7–êÉ…ýJ1rŸ_å8˧Li ½z9¾-–@µÌµ¶âusŒ25…´(‹‚¾@¦Lé±ÊE^dJâÞ+N„—ó´˜2¤MGò`ç£Ë0™Ëæëg¹_ ï¥Ô׸Í@WØQêR‰þJ…ybþÓ!\\‡$€(ÿ0䤱‰Šjˆ œ7°'a_SÛQžÀ¬ßâéÙýè\Yy!ÉžiÚï)ºò˜R†ÝŠÖnñ°E-$ÒÓtVNlö»ÐôFkíUp:Z¡ì%윽ŒŒ+æ:¡7[%H «ŠWsâîœÓf—Ãé»ñUv¹ÎÈo9&“¦óçXÑ^@Á6{(4'¬;Æ»mºŽØ FÑ`b­It0HZŒþ³À‹«µéXÏ‹ÛI\4ê }ºôÒáˆe#Xáñ·9~FÇÈíùÝSºËÔ¹) »Ãž·ÈåN5tâ¹ Ún1&  Ï ¥¸µ\ Eõ9nDýåüÔÏÖý߯/¼çÊ­µšî÷C÷kG3#¢V·Ál© ïxŒâ„±i1÷"®q–©°×N̈&©˜SyÖ’¹X±t8¥çP¢‹xâ…Ìžs¤¨™J›I±àiLEÊ©×fF˜=Ÿù,E–5ú†dÔè@-ѹDµ5FÀ¬H¨M…¦z1²é`‘8SQüAîÛ±ÙÚc‹ *F¢md!VOƒÞ²ûߌˆÃÓ]Žv ÖÔû>ì‚–Êî›5ôãnx›°Å;ÿ™;d.O.2.ZDƒÒz¶5˜¨ïŒwcà Ù¤F1¤ÅuÎp½Ž+ÏÜIõ¼OyV¨Ø}N@“–ÍÆ~Êèd‡ÉÕåã1³Õ&ù<±\£4åF´ÍØâ„5æÄ¼8¿öuîS÷=ÊýxÉ#ª7صûl—Ôvšu9¸q=ô=C•û¤ÙÔæÓ{0žóoã€Í¥Ž*#âd¼Å|”¢=ÌÌâsk#aâ‚:ì‰ß_.,ôK¾Œ MÛíØ*rÚ?;S—bÛP}LåÚ.ßî„è È<¸k žÚ¹ ë>Ü…\¬ìMKáFl ˆ¶ÆôåÍ}a ‘YŒŽ0ËÿWÎBª\1ÛkQeÂ3ÔUÀŒŠ™— •&4ЫڑCÿ`‘hj)‰ƒýh…#³A,3e—É´…1‚iÝÀ—¶HF"³"»b ±ºØuIŒOÅ6ûK¸‹eËWË÷;aæœÅˆÓdì&(ÁÒââ»±úK¡@öÏ·´Á 8‹â)NXu‰pÒe®×ä.m+`Åar¼åX½Ç*I›¡ÃâÚSÇ"íoaÓk0a›ý[Þc•xŸCÊ^ÿ•ߦMþ‰_òÄY@d„[c¥/ýôiW»u²ÔCT)ë\K ˆ¾Á.cšKj∹ yYû)FXàÌ)m|Jz¬º†tÀ””„5Š1=VI˜1”-'¼”LI˜œ¶©+•L£¢ž(ª~9˜¦Bž«Ñ3E¦VÏî3/b¦Gžª(Çvô.¶4é+JNÿlÞ{hÙ L)ÉžOÝÕ²ïAìDaÊy=˜žÁÒ t#+ÚŽš5œú%*yAFáN†µí§¸.ݶr#ø€Â]ÓÉs[1Im¹¿¦/í ÃÅ!êRÙ1aˆ$Ûðñ}¸w ^î!Rc÷A[ÌOì)C¤ŽÍ’Í,VkÄ©²p ¥Óeî4“/3TY`;ÄLh@ &e×ÞüÒ jƒÙWî*Á×d“fѨ eÉ´n‰i §Ù ÓãÍ•>µ°êrßùûïËb\ž0sbÏ]ß3‡«µ¢H;í°BºÚçŽ3`–Ó’Ò­PLXa°¤Ë-4í>†ÌH\ÞºGÊÄ h¬“!r8áÊ-c”ÓH,^«Ý›Ï9d‰q¿p'å,3Õ²A´Ÿ­en-Íl§ýì'ôúËÅû3E&Ü `qÊð›Â¤ÿâȰ´«Q»ƒžï!•fæÝÄ[ØÔÍ@ ûL¨i1FiQrù\ZœÒG´\n@‹1 *|2ãË’ÓªC_­0M"2Nô:2©ðç%ºȰ"Šr2“ "ßÉñ“Š2öHC{Ÿ9³T£kGœ‚é ŠãÎ9Oô£°º•@\°¡"xîï¯Á4 ŠÕò´¨Ú5þZNuRÏ,ÍË¥g_Ôz™69q *bìÏXW‡d:²¼LÜ|«5TÆs\È–EmgYD},-a‹ÌÄ *ƒ06  Ê²2¶Né“«,3Þg$ax!95ŠNÒ'-ÆÔÆC×’R€:_Àãöð“{áRLºÈ\…FÔY×ȼBzÖî&í듾^Nít±6¦œÔFoq>q®‚ L)–)}‹ÃaIL>™©˜jØgñš{þßÂG¾ú¼]|qô1Mn,´Ø¡/:ÄEêÕ‚ò#ÜéȼäêQ-w¨>…ݽªÀ*OºÑfjûÎ#i–yÆÖ·.*-=¢¥Ç´½!‘C‚Noê3gnÒ¨%$%aÆK\­6`d®bæ€6î+Òñ°cñ]gkÛ6¼b ŽàúÙ,D†ÚvÃ9з1®¦-¬U¡°\d®˜»™Ì}h†Nj*0 V ê «@ ¤ÑȨ¢šÐÔ˜ÛxÁæÜ3ÔÚe+ „PåÄþŒ*  K/FèÖ>‘ÈþU,ÅnMF(4•‹]|(ß-¡4 ôkæØô•K×ë³Â€žSWN¿°$N]~ú"þ¥ð áŠébZ`DdLI\àLä,”“%B.‡ï†Ðå,B9|J2}Îñùg›J}î‚þåúgVq3m-tªÊú±ûN­Lä~Ïw¿§Aƒª Rk1¥£FŽÑËkb5 &„U†ïÛk½ð /2.{-K*éÑ`ŒïÙhâ˜9¾,IÒ)e@ Ì\¢Úsäu'ª€‚cJ¦$¤L—üld›שÅÌHÝã7sZ÷š.Ö8á˜up'Ã.ƒ%›¼FÑ¥.Ð#$§ëF‹ÌmOTø¢ Á„UÝ#—lÑd²ä”Ûóàdékïӥ͈möÀQæ|ó\†ÔqÈä …ßέecnS†¢•)æ¨Vê? ,âð6®mÁ‡ö™¿Æ'|MÆÔhd£¤î˜g%æq¹Ì|Ö¹„GåòÔOåT«ëNÝ«¡ùLEƒp=#«=L-1Dëc²AŠ5f,ðÎæT“ÀÒê®CzÇѪ¼¸E¹mgøAA$3¶£=’{‡gQʪÁ§&åØXSkêOð¨˜qJ‡§ŽÅo±±s‡É”hNœ }4ÒíØ¥Ës_”Rûë.*<ŽØä ×™’Òᔓ¥Ý°pMÛœSºËË¢y³§cßÑ7Ö Ó"#æMîãñå`ÊR¡h»Lt;á™âQsÀ%ƒ¿â‚þåúg<® ¸I€‹Ýäj!€›¿¤àãN„s–šQB¨+„¶Ï†@ÌIÐJ.…°¥›â„ä¬qB¢çlq@Ï”Æ225a¶œô,lJ)³¥p²Åˆm.ÚY#©ŨnP©"‹MÒ`!6s{ú¬kÚùˆî|ÄY¹7­ÑJë9µò8 Ä÷JjO¢…ÀÏkÃ)FZº©úº!Ü«Y‡ÍÏ¿ÌN焘¹-Î(æIló‹ŠÑZ‹©²£6IM‘øÌË”ƒpƒN=äX¬qÜZg"›¨¨"W!…˜ +~"Íl3ådcÓú%“šl’ÿmâdÀóE¿»…nfíÎKª©‡ Uí‘©¿²D&K´–Ô#EÐÊ‘‘A™š¯Oá{4“1³Õ”SÝA(Ãf´Ïi·‹”5yÓÆT•ÏéF—ⶀݕ«„AÎÁÅmf³zÊ×Wà|~íKæ2⨹ÉF}ÀZÞcZ5¨”Bj”"·jVËJÔd*ÂÔ.5-ˆ©©œ"´!6s a³àW«H Ä¡¶¬j©5#¯e}½ÎŒ÷¸M]&, ªX²áÕ5¡ÎAÂP¶9#®ã‹ŠÓ#0%S•°R ìk%j™ñ;é>g¼Œ¼ÇjûóǨ„âTuÑB`j‰š´ža¤ 6sò£+Š àÈÜZ’YéVŸ½àW_.àŸí„¾  _Rȸ¹Îj¸¢Ÿ»uÖ O©!P$´Z9:)PíC²fÀ0hãQ9!¦t„Éš5ÿ„ó„N¸…³TZAåB‹±°\²éNö ¦t,…¡ša˜¦)µïm• ÒÆó©KE]„œé\aOŸ¡*íP¥%úl€lT´6dϤ ÜtcÈ4æcGL¿&¾ùžÜ°ïE0*¸óžgɈxœûP¦ÆKêó>µDk6-ŒÕ”ÊMÆ ×ø°E…G“1}³B‡SfAeFá\†È¯Ø8sB?]Y¤ŒÙOϰ~nQÜ…¹±¯OƒØÚþ3k×1º ÐJ ;‚Y³i›£N¥U‘·ûSôº@†š±i›}#Èë)5^PRÍÅ0²Ó V󸼴½ÚflJ3¢DÅÉJ'CõK«Œ·UÑbLá&t-Fv—n2D U¥("X!òFvÒ~~NšäÅSÖ6¬Ý`Ã;¤%"I—‰ß$Ÿú·øŸó9ñEYÐ{Á Ï'›TÂǶ0–LEBèvâks]îÚA¼(h‹SŒ„™±ãðDL©&²§ŸN5"ï†DµF™œ®´{ð©Jñ)‘ ¼ ¨Jc|0•àÓ›÷³÷À6Ñ¥«°M¡‚åi¼FZ€€ˆ0Fp¬l`HG ÒÆ“µ§È¥ 86ë„2cw˜ÎlâüFBð‚#$Õq±Æ9•BxiÆÞöŸø¥ô÷`g½.©DbÅŽàÿRAû®ãýU/°WCÌž°¶QÓlŽ˜E æªÂä Ñ­ðüÈ@ÆÙ,&{:![%UîñO>hÓà´`e÷„ÛF/òŽã7 ô2—ZcwV3IÕ÷ñÏeÔ•D†š´5FC+2 Uí‹9ݰÏQ½/-­í>ñ(OWwÛQŸœq^]!õ';l¨r 0U æ"æ¼¼Ì]<Íûão >Y!eM,2¶ÔS‘ˆ‚‰lXa¤HÙ7hÛuwä©H‰È8\ç…öEJ0–M21#æºw¡#ÄÌyAÝfãyUɦ8²Š R ¯æƒÜêºþ<;ôš/ÛÖþ«÷DK>ú샘Z  Ï Hƒšˆ:Ç£&_i"4yUãMɇ ×Ñu…‘Š:TˆTÀ®D‡>·w®’·CŠÄ-È£€< hö¦ẗKòE”¬m–z­‘QM8-)V<Œ S/¡Òö×}³ÂËÍ£Äà H~Q¸(^N Ž6שj$Ÿ“…–"w<_絓?£Ð!ϯÜjÁiÔA•çFWxòü½è@RÖV©Ž†“݈kðÈãbš‚ÝÃ'h7gT%=ô•RÜí?ËDüs?¦¯‚4ÕˆGÔ}TuEó²aeeB#-Ø^=¤ð|j­hgca›SÝ%Ùä±ÙËtIzuÂÆôjW²ñªÉö§F“û!|Ã…ê*÷™ÇÈ›1ÓIÂ#W_MÐÈ8ÇóHYÝŸqgòRÖü/ò­d"âÐÛäÙíKDbÆ…Ë×yäÅWÃȰþá#ÔõФQrÇÆUDb¸˜^ãëý?¦ð|S‡²[òqyÏDOsÏÁ³”Êà xpG÷^˜Ì‹xñÜíh-H;öüó3¬â”N<åöÆe¢¤”>ÿrå2›_‡!eî#½SžP[HcXÿXiÀZ·ÏòQ<]r.½NXŒMƒ}³M¶™`¸ð×û„>÷cFAË)“­Í8Äæ‚ ìQr¬Ö^?³Ã1u“ó.ÝŽ4"³ê÷@Ú‘Vi‡¶JÔxd^°Üs7ÍUUÈÊ ¤Fzà%%©ßFd.k[8O5Ë—‰aJâÂD4Gº‹È,YŸ1)%CÙ¢—­a*żna2Ah2Jíc úØÄ ÌŽÌ”,ɶšïÞWÁkß”ïz,‰O²]1XoQô˜¡ {À¦Æ‚j"C[I`™GÔ¹‡¯3T]¡k‰R5ΘÌÛTÓОŠë]z¨¹¦y¨¤D˜š¼é1œ50]I=ö…AHƒ§2*`bIÚR–>eîÓ’Q8' fVÝ`B4‚5qlA5&$3™Œù «s™ ñ(ÉcA9ÁÔq¼æÄ& ‰¦6Ö&ÒÀ …Q7÷N¹ó—·HÂPà¨Â¿,ã9ðŠ¥Ê}æ0Ú“Îîf“ÞF´–'·Ü©ó 7¶¯BË[»©¬ÊÝÿý˶µÏôœøú7½s á ˆ{4¢¡iïq1yžÿ: Mƒ1%+ô™?så-äí€kÍufžÅ½f"âTtxQ\d]s(6ñ°E{FÊù"wñ_ÅL¤¬™ŽÄ: 3aEôIW§(Y»}q†/J&4QTCyåahq€j8V¶PkƒˆkÊDÀ†Õ–U¿7· åÁÝÆÚj;^“ q¤1=Ç„¾ ¡'-%«-¨Ï)ÊʧzΪGKRõq1äg­•=ÛPÔAˆšêªE×Ö­€Y³Ép½ƒ{özU` øŠ j÷`ʬ…OFÅIBÞˆIƒ‰Ž1Yᩚ0Ȩð­2¶NìÈ?éµ§±YBb´³$ú”ÎìB\„Às1¸ÖïkE8ëÛ¼t§X^d°÷X[ªØ6´…Àóqä˜æ»É!Áœˆ†CÃ.š…¥øYîµÛãöúÍz¿ßg<³½½Môû}F£­V‹••Œ1\¾|€0 ÙÙÙÁÃññ1EQ°½½úkªÌÓÝÐK0Š—æTžgN"Ić $!£0¡Öe𣚆˜RúÞÒíÒrÌ„ÅAbÑ´×(”ª©|ålªöpP/V‡s¾,ì” 3ÒrN"gø²$2A] +»¹+S³ KÒØUAéF¸ÊB°(¬ËUT.~*²kƒ¥ç|j¦3KÎÂÞ)ž6D¦"T‘š[‡ˆ¶£rkäÄ ¦ #ƒkTlÝ=‘—-\‹ÃI`J w¨•Ad†yQÄ í ’xN.,êy!ôK¥²@Žíë̓ÙNBÑñiùSB¯B¸`‰FäÖ '5Õ0†2ö™%)ž_“†SÒÈ:—¤“0E“Í IDATbŒ=X8A›TC'1s"·Yä§k¢51  *3ö=)j¼¨F%„Ø©à"sB¢# 2ÖèDDZ̈’½ž’ßÅìFdxE, "7ˆSsS ýß@å^×5ÇÇÇÔuÍÎÎZkŽŽŽ(Š‚õõu’$a2™p|lQuÝn—N§CUU†!kkk_xAo1b…þ’ŸÛtÊÑÛùbÇð±³ù‡ä$îAnóß R¦”xË45_—¤FÖîÍÖšZšå‡Í35amíHÊØHEYB[‰È©¥ZZ©^J+õÊnü¥â9p68^bk‹Ècœýͧ.<ê‰g‹dîC.0î&e_Ú½ß(úÐ#ÛŠ]ž³‚õm¸¶£-«›Å¼´B“ —J„õ¤œz³rŠRin*à'b‰Ãd˜Hê@د5ÀHXÏhåE>-(ð5¬[ÔÝƒÈ êÀƒ@ƒ4„aAÖΉ“ JÖ4˜Ð NÖmRa9ý |j.C‹„ß+ñTå‚OÄÒ:²´ìˆßk¥YÄßÚëaåI D«F2¡aŠ&@ é÷Š%"v1ÑI™::!KÛIé¢x*}ûß7©…¾óL„ÔBÞ²ýó‹âìÏ*Ë’_ýÕ_å½ï}/¿ø‹¿È}÷ÝÇÛÞö6Z­?þ8?ôC?ÄÅ‹ùîïþnÞøÆ7²±±Á·û·ó‘|„w¼ã¬¬¬°±±Áþà~É—ó€‚"†²¥ðîÓˆ±aÚŒ˜©]ÃjqB#Ñ’#fB)?óÄO2"†ÚI€öyRv$¥òØ ȈX¥Çý|š.Î]c8hÞU°F†™pOù4ý CªçHQ³Z÷)Ì)q]P‚‘lÑÔc¼+[ë”Ò†Be*¢j„´ôºÑÑD¦¤ö%JiÄÌÚÌÄ>8X¡ÝQknæ»ûNù}Ö `Oœ^À ï.ÉòOþ»_ Íy×G^ÅïOþ{âtη>ôm,qKqxn/.éM¹aCñÅ{ ¢œLDK"bƒñ²i9òÖV[CZbŠïü=~‹QÞD憟ÿäÿJÞ ù®íÃíÉs¨Ò0öí„ÓÛ¬à>ûúÞ0ým^!¡L=~é±7S÷<:÷ö¸ýì³6‚¶-é‡Mb“6J؆‡¼ñãæŸ!¾Ró)}?Ÿœ¾œÕð„oðÞg3!Å9‰WäÜ@ÍtÌkø &.ÃÞâ£çÄÄÌ8ãß`¾ Œ&Z/>ÈØð€÷IæDôXåÏù¬Ñc…>)0¹Ò(ò¥÷ »á BæÌtÂÛOß„‰á+ø4_ÿ !•/èµÚ¢dõåc{½®ý·Q¹ïïïó ¿ð <ñļóïäè舷¿ýí¬¬¬ðä“OòÖ·¾•w½ë]¼ÿýïçÁäÁ䕯|%o{ÛÛè÷ûñýßÿý_xA¿Ây$gÝÈÔsÙÔ‘;}[[Ãâ!hpÆ*0ë%¯ý„5bføT–V7)ðh‹Á©êP+e±½”7L˜QRyÌãˆRøxÆò¼[fÄT¤LI \—fa65-FÌœm*$c‹ƒe?#f•&4l¯i&sª–Oæ,l*çkòi 7œbÍОñ¬¥­k@ ØPp~>qþ&ÏL=ŒL1ÏÚÝ;1pÃAea)ßK¨w<ÄùóŒÂ’ît6ж†#ßþì¡SÏìصþW3ÄÛs‹° âÚîñg’ªPIIÙ‹™ô[Hj†Z+&Eƒ¹ JÐRÒr½>ÃX41BPûb‹ÑhZÓYƒ~°º´™•N˜³8µf:âHmð·ÍhYý–"w•sVËàø׋³Œu“•¨ïмõOh Ñì±³Lx[D¸Vxl³ïr´#Ée³¶°WF. n`V(tvKŸùê/YÐ}ßç'~â'Èsk=’Ròc?öc!øÝßý]>ñ‰OpñâE|ß§ÕjñêW¿!ï|ç;yÓ›ÞÄÝwßÍ÷|Ï÷ØÕó¾´ º)øŸåOqzJ:ÉÉš>ƒ°Íõ`€¤žQEÃLié1Grбiò÷ÿ]JÛÄzyI£š%r¨‰â)/?ÿ”ÆÇ›Ñbăxúà.Öï:₹‚¬5/=ÃI§C]ù©i3õÖ;¸ýk&¼é5ÿЍÎѱdØHQº¦ÚÄzzÈw®ÿ; ÞÃ7/öæx™a1 KÛ ©EÕ’Uñ]»¿Í¾ØæcÏ¿†þ'ÿ´áïÆ¿Çï*¢6ìù[´ô˜h5'»ËÇ›Õü­wòÊæ&WŽ/ò¦_ù-†²ÍߌßÍמýkœ :5=Ѧ•iûöTÿ`ôa^­?D~WÈ·<ÿ~žÎsWçqþ¡÷/¨ðY úäk>ôj‚I1´Õ¯åO^•Zc‹rB: ؇Œ¢” ,ñÚ64e,øJï#q/ïá[¨yÏT¬‹"3g´“¢†U×¶ óç£+ì˜ë ëï{üuiv:‡ŸúÔ§øƒ?øƒ/¼ 7³BÈEÐŽPdwç7G?g¸ŽDÛ“!MF4ÜÈË£b]Ÿ°VŸ0ð:DN¸šŸRKI/j£53±#,aÊМOm£‚žX¡ž§› ˜:?¢qÅ|F¼ìúRfît'–_3¦‰F-(ͨhÔ%^2@V†ÚW4…“‹-³ H4¢QcVúqeýà;Æ" ×5 %46ᓇpiv<Ì®¤KœüÀ޾¯:Uï=v eJC}¤ˆÎL)ª“‚ß͉3f§Mü8' <‚³sŠV#›vÔ¸ˆìÖŒf«0¤rJ¼:ÁAêO©dðÌ**iøSúÍ€jè#|ŸxsdÛžYÈiØ¥ËÀ4%Ùs/DÈëk„Íípˆ-UnAŒ‹0Ëp„&cjeí0#Z´’²Î‰‹iM—‰} Ḭ́‚UûOEêÂ^Ë[!'`ê¾o‘ wÄ:]úäL)ОÇ-<£ÇªûÌÙîÿM*qã V¹×•ᱞ2×¼øDþÙ{v!8<<ä=ïy?û³?K†üôOÿ4Að#?ò#üæoþ&Óé”N§ƒ”’4M™L&t:/õ‰;B‚–’¬pšØµÈ6%méÛÐ^1V Ù"aÆ@v ïÈÑÏ ôÓvæ#`vuãX5Ÿ_àçxžÛi™+á¡×fOïâQ«9{í!ÙEKV’Õ¨G©}â`NåyÌIHÔ ÷©/¡ò}B]PH„ÅþFUŽ©s0ãˆB`jðVkò®ª4ª°^ï¬ãá7ÓÖæÖ¶Z#,“BäÕ4ԙϸ3õcäFLp!@<µÏA¹‰/-ìJ ë£Î;!þ¨bÞtš$±ÅŸ“z͵„¢6㽉…ÄÛpd›wá›s*˜æ±#äÕLÍeh‰1qš¡d.íϪ¥Ä_)ñ‡%Y²¯·m3¥J†DA‰§k«m* Y"††¢2¦K?XE IG ‚¢U“ªYæ"æ˜uBrÍ&7Ì.™ˆF/9›jL ÂF…H4•oí´SRÌ6¹°Èê¾Ye¿Þ¦Éˆ®wŠl²$® Dh«&¹ðÖmä ËÈdÄUs£B´”Ô^í°gý·0Î3ŸEå>=­x샧ã~ýYŸþ玂óçÏ£”âÒ¥K<ýôÓ¼å-oá-oy q#¥dmm^¯÷Wƒ~’.#6lüæ)·i,h3â„5loA%CÚ(*šUzÌdBO®0¦É¦È\DLbûð^ðxKal¾óW¢.ÂXhhŠ%Œÿˆ ¦2åMf$Ë‘$ÅZQ¬ŠZº)Áb\Uá-A9Wõ9Jí“!ý“MêS“IÄZM>1µ‡écE/}i1°Úb™h86/ý†´#õÛðÌ!è hxpð¼¹ÇîßžÙÀ=BÈ®6mÊÒyC•øŒNVa"ÐÆ“{ÎöÛ±ßä°mÑ´' îÐÆ'%˜™$S L **‘ÚÐ?\£žØ¦Aøšrá‡IcÊ–·ÏÔ¤dÄ¢`;¹Á^±KU{„*gGîqjºŒt _œç -3b$Z 3J|F´¨¢)&ìr¡Ë€1Íå|“CÆ4PhJ|Ö¼Žõ:ûµ±Ž„E²[“1cšËÿ{Li8–ÁœúôX[îËWxé«8º§Ëõz<Á‰\³Šó  ¬0%a_lsƒ~uö÷)§_µöA’²à]~=¡(ˆÎLI›c&]‹PþQ…~\!=ƒÞ_ }ÍWŸûcþìã_CåK¼­‚3W¨¤Çyÿ 5е‡ð !çô5k«21—ÖŸa/ÝAE¹æ“‹G£ûH3v¶ö¹£z–ká9„0”ÚÃ(ÁªîsÏÚ“l\?à(Þ¤>?õm?_Ï\;Ãÿô½¿„ØZãÌ®²óÐNÌ:+glnoø^þ5>CÓæ/ô+\ßäOÞùͶø¬š¯ï¡+Å×¶>@$r2ñ·Ä»X£ÇלùëßzıYã7ßóFþÅü#jCu»‡œh67ö¸ýkŸ†Xð°úMF$í)ÿô;ÿ1u­øèñCü³?ü)T^sé›C6-*u³yH›wÈgyEðIƲÁW=ø.zOq0Ýá‡ßÿëàÃÝçãö Ï %Ïê;yëŸýæ=JT|ã?}7*¬éû+L£&©žðÝþ¿åÞò ¦AïýºÿéÕ\»r7ýöoÁ‰ ý»§ø›9©™ðwîù¿­6ëÿ“·ÔÅ~¦zØñxÕëíäò‘>óŽÝßþéŸò;¿ó;¼õ­oEJɹsç8wîwÜq‹Øó,ËÐZÓëõX]]ý«ÅeŽ};#!fFNÄĤR&Äd˽fZ¦žá²z)Æ(¬CWTTøÂ ¤ NÖ¤cÅ-¢2¨†UNe<§ÅØÑ&DdĄ̈Ý~¶ °¾IòÒvyêVtew¼S™’Ɉ -PAÍ4lQç>2©Ò’¬Š¨f¡E)fnW6²…8¯BDCcŽKÑsØò!Ú€çŽáÑuèøö{ô¢ÈÍj.Û[ý2 3i¿flô‰¿˜ç û¾g{n„WcwEÒ¥ô@QÔ¦”v—' Bƒ9U[>²U¡K™ÔE…¤–BÎ-ßÞ­74’XÌi…Cr0(»K¡š•±¢’DÌ–×…À¤Äc"Òå ×äXîÿbr£‘ÌIð3¢– _Z4ïâç,8ò±ŽåˆÀsárØmÈOŠD»«*IÝÔ`ñu>Úíã«[Vš.TõÛÚ;Þñ>úÑ’e?ð?À›ßüf.]ºÄ‡?üaªª"IÞýîw/wîgÏžåõ¯=¿þë¿ÎÚÚ?üð—ü¸l6ô~´µäéŽÅ¯‘(4‘±1)*¤°÷z(r„1œ‹žçFwЛ9ü‡l,qÀ—¹`u±7;CÞK鬸ؼÂÞå3¶áBaÅ£S ©°ôUw¿¹ûOÀöË®ñøä~ÌP£üŠ“õ.ù<ä$^a¿µ¯Üç5ZNt#ÚdD€Ýä㼊®pmàQð(÷á»Ée…b‡}ÒxL·8åT¶©ð¸ýQZkc¦~Ês/<›0ymÂð¡”«ós´ãSvƒ=º èrŠGI$2¤ÒŒý„ãéqÉ–ºB´ÆNz†š¸ ¥°æpÀ];OÒ`—÷T߯S/ÞkŸaë¶A—)È’±lò>D—±7çe;‘òéù\ë·â¿²"qy ÕeŒ™z SRV[ÇxôóUžß¿„ˆšÌ‹–÷÷D´Í)µð˜V)£ëñ=²Báàœ£{»h$Ýp€šN¯%ÐNL—QKÉñm¦O¶À7\âQ p"ט([¾ A³˜ ½šÛ7ŸEQ³ÿÜžûØ%AüM#¼nNTdÜ¿ú(º¼ÂŠýeGîåç)±‹\‘ñxÌÛßþvžzê)~í×~oú¦oâÍo~3oxÃø½ßû=^÷º×ñÈ#påÊö÷÷yàHÓ”‡~˜Ÿû¹Ÿãàà€ïû¾ïû úB¸ýäbÄY;B˜e 7–ûiíöè]N—¢¥9‰³9Þz¥<æXåe·ÄÈæîæ±*Fá¸ð7G éœu}Bœd S?Y¶„ŽUÜF;5ûÜ•ú¦KÞZ4c–Û4±u‹ô§ôŠ2õÐRÒV§”: ?Ú k¥˜JØýte0Ê l.ŽGmd¥1§`& ³+`ÍoŽ¡·a‹úªA$Æ¢ «›Bt§F„  iñˆ#wæT©‡6 +Dª1- Ê®¼´DEš²òѹdîÅí9RÕz®ÈçJÕ¬wÅm­“¼A¡c”(Y ú¤L-FÓ]߆ƒÏEL©lÁŽÕ „EäFd„. eAâJ˜Ò¥bLkyÍ•J6˜0u;[X­Â=eæÐ—6ÓÝZáBg…»‰h8S$hÔRpç»×P.•Ð6Ö5têWk[2‹…ç-ôà/UÐ_ûÚ×òÊW¾€íím~ù—™ª²à™µµ5Ò4å;¾ã;0ư¹¹I<ôÐC\¼x‘<Ï9sæÌ_ãš ,B;Ár"ÅÊø‘ª%EêœÊ÷Fƒuˆ–ŠºPøº"a†pk¾Åênî²ìCrZbÄÄR„%AVCª‰/NȯEˆÒxB‡ÈV ¡AL4¦”cŸ:P¨Dã‡%Q4£JÁê=ôP¥a>NPe͘ó0¦*«lq‹ÄéÀ z‡“ÅK erˆ£ KºËXVu¡Ï]ÆÔð]’úZz€Ì Ú—ŒÃ5U4Ò Q™@jEƒtèb#þ%qœœ€cÜ&$e› ªL HÉ]T똫ìSaÆ2‡¼(NS#ò¥Ù7«tÍ2§Äu´ìÞ;àJy?å‘ë$\—¨¢ y¦K²àÕSŠI@ѨXßöóX ÛõuøÒ<±'&2vŠ?v§KöWS²2 v®Çxµ…™‚ïål=pýáI¯BvP!¼0!Y¯! ¾©hží·'ìÝ8†¸K^—F§O= {˜\’R¯ ت¼Äa¼Œ0­ž,iWºÔä˜1U–8b]†4È‘ŽoàI[d7âMªb·?OiѧÂtÈb%…’ØûÀjl²íÒ°ZŽÀh•Mú çGÖ‰Ï%»Íý­Sg¹)}Lö‰™2rùêU&,sHH²ìiÑGRÚ׺Këõòˆ³ÜåŽ?þÊçåo€ÏO:õÿÛŸ­¯¯ÿW¥CWºäõ/}غ”•ÜqŒ“NѱoS,Ÿ¤pLð#0UÁ­ÿy‰‰¨:ÿý‚„H ˜Å³Ü¡Ë…Öó¤ÍGø<·wO°uöÓÓUÊTññgÙ½w}á f€ŽéQ¢Øe}‘ùTù®mœd¬kv…÷oN Ýrvà9lÙ÷gåkà¤%¤nÆ ÷¥ì¬nrõò}¨AAóþ#FEƒ JY¯móÃÓÁ«®<¸rïq&qLÔžòðÏ>M‰Çö¯¬òÅØÀ<¸ŽxJpãhùSN?· ÿöÛœ¸ÆFe‡+ÿàÜø\íÝÃÍÎR^ øÈþë¡ÍrÀ¿:ñCÔʵU®Ü‚Ÿo~ê/i˜.Z+>uðk7ÙÛ>Æ'®}+zÇãœ÷ßÂ'HZ!Ÿ»÷©Òìq¢s‰ 3.ÿæC\Ý®XVÿÃ@ixí…OñdöIŠCÅäÁ³zŒlh¿}ÉZzìWþå}UlYO˜Žç à5¯ý÷ì>¸ŒGÁEó€åa\<û›B ÿï7o"WJ¢Œvø¬ÈÊ͈OÞ S–_ÝE>®é›ú¹ï² „Ð)BˆRXK{4Õ”µÿe0œ~ä =ü š¿úÀ7sty¦ðßsn ¾MÿÊRœçyœ={ö¿wþüùW|EÍfó•›>ÏãäÉ“_=z†Ï.ë‹È˘™ h‰SXHêvèå"áê";çþ}ƲÆ~°ÊÇÂÆÄôe \xg‹͈„QTGDÆÉã2‚応²ç­R+§ì©U&T]HKÕê°D¹6œo<äôh;âœbHƒ#::ßòu®–g™å&iZuÈç'2K*d£ÈF$ܼknO— v;d{UòIÓ®»–«ÂB|K ¾eÞ»Íuhy¶˜Oœ$MA"cĪfülÛ²áOBÖ¼øôʫʒ窂乚ݩû vàè“«ˆ6èË osJ’GôV”Ñàk*Ñ´àùþý£U9"–3´ðˆ•½6ÇØv>ж‘ IÙç8)!‘HØ`‡ËÜãúQíìdr‡ÚX‰[ZXkFNQ0'­²b×<%ÄNiP¥!l›c—È·ÌËt]ŠÒŒ-n;ÿëA¯ÜßÄÒ"¨ã/ñ"§QGRr‚› i8£¡iÆ¿Ë ]}ÅýëwHqyE¡DiÓÄŒ@f!@ÌsÐ[=WØuCœ'¾NòˆËˆÈ"DÏùODd„Ì„•/©ZAOZ†èBq›c‘1‚Bz”W’Ñ+ÛÌŠ˜aÒ¢WmY'Aí3×-2–c='æ)p}÷³oì¾:†¼ô1Mƒ©ZYè\©b:WÖ[YO Z`z–”'†³,Y>á"æ´ÂŒ†4ã“»|®UŸºød,;¦óóðÝëH ×5|9ÞBÎæQ éS Ó\ήs®«âQ‰ÀZtÞ5äîEû×?^6®L±> ÚØçdê&ô„;þâs"qè&õÚŸŸ­¨U;鋪!3ÆT­Æ˜%Gt\IJ*2qÈLŠ±Ù²K*"jŒ˜&ZäÚ'Ó‘IÐ… rž+ ÈÎT(ûoßŪWú@,KÚF)‡ =‰PÚN©]î$'΀‚}±/tG260SEz\2>=c`꘩iXÚ¢Þœ2nÔ˜ê ù)¾µ ûþrX³Evž~»8b…»Î2VÓ {6ÄᢠIDAT,ŸÜçÐ_#Å”w¶¸‚YÆï؉½H4lÆ=b3CšüJ7œ¶ˆƒW”ïQ„’çå-¯O 2»Æha¥…W€MJ`"ëå¾\v™8¥ÓŠ8 3I½FÏÉö8tçbãeªˆÒ,øRËⱩ1•5{”Áѹ²÷ŽË7Ílh3g¾+YZòqÏ]ƒ½ŽÎ3@FÚy©@GtïLÖ5 f`ßq-ïþ–Ïÿ¾9ÅÍ3x3—HîQ,´¾ó‹áQ¢]ñ½cë¡P(p‡ðÜ€¤X(Ô=w0ÞérJG]›»ÊÙH=ik¡I‰™RS§„]äªv{}ÏAv6‹}¾ï;ÊÍ£:= Ç«OìèÈO(€"òñý Q‡"ó)‡þw(ek„;¸JîNxî/°ExŒ%ˆ5èíC JÏBï‘Md3íHb(†Âþzì~Ýp’7g)ËÀu¢ýÜ ìûªe'xk¨„É…už J›G,­ ‹kGÍ%.YÀÜa !(çÀóÀÙª†‹lòé¬[ÂÅuœÒ)ñ‚É>/Žó&k~oLMln¬Ek!¼ça^œçIÚìùŽ=&Yd–kwTÍ›É9¿c~¯xhQ|U ú×'ô¿ùt  {àkGØœO±]W&zÅÝ»}{À«‘¡¶™P-vAC{­Ï°j¯}ßk¹ÈÜ!ËÒ£Íލë)÷ŠK ‚悈9k^ááÛ¦2—>¡L‰ý£¨N+PõÆŒ¢™0ÞkÙ¬ï-C°œDÖªaPq†yP…Êò˜lR±MöØÅ+»ç3ÍbLb§}í{P1èHÍBLªð_²1¤¾Ÿåõ[ßp‹‰ªr{ó<¤5ø#à {wŠT kã=îãYšô1R0¤N½m¹/: §-²IˆZÊá‹ö}¯NgD„8œ²îïrÓD2A.ÛüY\cTmcRà–6õã’õÊ!Tàlå:÷­<‹BsõÂý”MI¾`>«¬^CãjôTpöž« Lå$7(„ǸÓdçä1LKÁ-0#iÏ®C;”¬?¸Ë½\¢À£)Lý ûÍ n¾êœ½7"`É@ßÀó® 3ã87 I™*› ?Mž´Àt-·€÷½{ö,öê%÷•Ïãé’m³ÅVpäúC÷E%éå*æY§XjÞ%oäËtùw« ×³Ê>ëìà/"7Û¬r€Í&öñ(X¢‹¢dL)Úô¨:V¤GI‡#–èrȲۯ,—]J¡(¤=xçH€Dc4 e¸Â6 ¶†æTÊ)e§MúN«9ösI±‹z­â¹œäùd.0,Ñeે,y ²VR IÒˆZ<&>=apØfö|ËNKn²ø,ˆCƒnÙÎ Æv„ÛžÖÌ è¹úIú«ðì<ºÇl, cYî›Î¤fÎ`?o]æðÜCÝrE}\ùTYsä!Fz ÁJ‚ r„4”¥ÇìFêÊN|ÀþÑý~Æ3”ÐŒÒÝ0YØk‚á6›¶ˆj«N8KqÇF³ËÒBã?ït3|½ÛëxÄ-z̈¨0]èÿ§TÎ}ÃŽYÇHh +iÒ â¬|mÖzì&EBÈ”*‡,s—QÒ_Y(”›â¼…­ôhSÜe|ê×'ôÿÈæ?(Å/çîe7m m,´ilÚû\(C%™b¦‚²”má`U2i›¸ S ;4oÞû2[¬}æ«ë+z#˜¸ûÇ3‘H˜š ‰‰AB‘‘˜œfÜ#èdÌ’&SÔã>“ i üF ÂJIqD„”õfìÛ¢±ê È‚Ñ ÕqÍöžûÿÕJZ+G¤³€qPE”NS›ÈXx‹cµ>¦vllŸ–-þî-Æ›U;ôhÏ=9ÁÂLÉ'·šü¸KàeôÆËD£‚i^±ÁLy‰œ–¨B[阘ЧíL¡KDœÎ ™ ‡5„Ðy#ƒñ…kÉ ªÞ˜BK‚¤€†…÷E¢™‰˜ÂW¤"t\;@•(êá€öꙌ13;$„"e<¬Aˆ …rÃÞ<òzä5©Åã;Ι=¨Ì¦LE…qX#÷|ªLëÝÚÒ†¤TÕ —6õi-Œ2ÆT턈GhR޲É´B>ˆQõ “´A’Ŕۡ6Jçð6°Û[ÊÑ{Âv#Õen7>yÙžü”mHáÃ…xq‚5вc(Cca¯b;^²2‹Ý㎛t¤mô%Ïîéo9 “qƒ¤WuþÓSHT˜3×¥ =ô‰;É@´P^Î@4Ùc>-Îñ)!Kty€‹Œ©qvú"µþ„ª5 Z.ºcUÅŒ¤ÏQ½I˜¯dêÅÔF3–wŽøæ{>Nc:¦yuŠN%å¡ÂlK›C0ÍÑž‚äQ‰ö%¦*ñw3Š“>fäìœ%ÖÁQ[ˆW¾¯ÄlHˆ æÐBÒƒ×OyúÞûø¥7¿•Ù¨ÊWßEµ2&ñBþw~Ñ(‡Õ«)ø6lãþ‚ÚàÉO¿j«¼¦ÿaîá9:ñf§M8µ»M’†x—4ù4`2©ñ?ÞGºò`ã ¼æÜ‡)ɃæK¼†O@iÑØÌ0Ûê‹¶ñú¥¥ç§šÿ”%ÿ7Ÿû jjÄDUø.ÞOÌ”·ìþ.q?Á G  ŸìA~â¿û?¹žœæBýYÎr…)U^Å3T™ðý·þ5ígFö{†–@xMáÉð/a_ûßÈg‘h*LðÉ¥ätöSö¦zÁ¾™ xó±ßf¼^ãØÚK|;ÿŽ%ºüÐìw©„2áÓø?oÏèÊõϯnþ?×üY‚JÊ·¨?Å X¦Ë›ø=†ÿcú.ÂçsLO > Ôᣧþ§ÿ,¤¸¯ZAÿíßþm^xá¦Ó)o}ë[ñ}Ÿ_þå_&Ë2Þô¦7ñªW½Š}èC|ðƒÄ÷}Þþö·Óét^AŠ{y‘ŽHa6ìÄ2•'C»cÎo!\±øz@f÷ãEJá RáåÌ¥dÍbǦÆXç84qjõçE¬L†/2ÏðÈ-A†ð;ù¹ìNºð†yÀ‹…€ÇV–%ŠÐ£È}‚Ö ?Ȭ†º(ßíä<ß—íÚ‡XFU-í>/à%p[h±ºñ 쮦íî€vÍUøÌ,­£ŸrL¾+‚\qP»ƒÚ6±GØ‚ßr‡HÓí%Û–4b"Œ ”*Ƀ ~˜!CM‘ùÄÍ1¥ÌŽª6iÍ›-4ù³Ê>!ž¬016Æ´À§4Š™±Ùò¶hZÝw ô)U4©9%„OF•)S—h§ÝDqÈ’s0vM#,qJ;˜|@“Mw?t– é"cÑyÛuŽâ%FAá[bé\$ ¥:Ëéô†w R ãÊ·òÌô[àÅ!÷ZVNÂ9®Ú;Ôœí‘'ŠðÀ†» ò&_8z˜Ñ¨Ž¯gœ .ñ(Ÿ³Ê#“á•aQ Æš°W‚‚íõMž©?ÆÆl‡®ê†1 §¸N@Æ™ámÝñîîšÜ®mòbõëb›©sn\æ:#Îæ/qb´mÇ-Êñy†Wp¿üëìR h2´òYSð ùEû={-&A•‹í8W˜xOògD$œN¯Óöº¤^À±ƒ#{^n¸2…½éψWQÑåS dö$7lÛð•›éξE>vò¾ÊûW÷Ã{ã߈‚?ù“?áýï?£Ñˆïþîïæ‘Gá-oy ¿õ[¿Å{ßû^~ñ‘OúÓüîïþ.?öc?¶x–Û7ÍY¦s=·µ|¡ÐÔͱ¨-ôÀ8ùIi9M†ò2v¢‹º´ò¢ ëäÂFxΓxBâ›;²2a4Òh´ƒölìfHé`Úù¤6g´Û]ª%ryÎÜ`Þv¼6)JÏ®ŒŠŠAJÐy€7,ѹ±,Ê‘ãAzàÉ‘¤ÑÏ]¹PX¦}ìÐ2°"0¹ý3"<³± ÃmH–ž‡™ØÉ𑱬àÄ`Œ°žÑ…#Þå.ù G–+ìM%Œ¡‡PPY”0˜¦$WÃ)5Rk ©(µ$+”)¬Ìýg¾ƒÂç%l™õÈ)r†0ÅœÓbã,]fùÖÛß'[ô¥–HWu¯SPuòeM_Œ»NB¾bß4/ªó=ºt$†9IªpE5ÙŽ?!^ìí Gг<Œü® ú×Ú„^¯×yûÛߎ‚ŸþéŸæÊ•+üê¯þ*¿ó;¿ÃÇ>ö1~ï÷~oû¶oãöíÛ¼óïäïxW¯^}…G¡­éOQeý°K™13PE‰ÊJTRbn[/j9Òˆ©fïü*r™m69d‰³B×,qÈ2ƒ²eƒ“E‹>{ñS1[œŠnrivŽÌó¹iºTý /r’¶?Äø†q«Î@Ö©Tf¤2¤k:l5n³Úìr…S4£ýc„ÙÒ„õ £b]#K‚SKÂ3˜–$Žgä[>º”ȼD†éz¿bá|ÿ(cz¦‚6 Õ/@ äLã¯gÄ­’@gÔÌ„#:®æXÝ´GN»3fýìÄPñgxã‚Dlf=Äå ³7_: >´W{x²ÀhÁ¸z]ƒÎñ>Þ¨dTÖY9Ü£º>"3öŠ5D —ý{èŠ%ªjB rË~iå,ì#Cõ؈•æ> Ó§K‡®é—3&º†g ä¦G#¡¼¯^b¦‚¬ãSgIJèÒŸ¶¹’Ÿ·ü—›ÃQ‰[N’§èL2+"N_½Š( ; ¹Øx܈Ŕš7¢åi­LFS9?ƒ®! #Ž•7©ÆÔÔ˜«ÛçÐ&®¥ÔÕ ôÉçñLI¹dÏä´Ó.g&W ò”£ÙB„„Ï|Ãr@ýÄ//h<:D7”³ýjNèåW· —eÉ{Þó>üáó³?û³üÆoügÏž¥^¯#„`gg‡jµJ«ÕâÂ… |àxÅ \ùÄåhJk#æÂãÕA-fætÊj9£å l¤ ‘¤4ôO—ö ʵ|J5Mž$Ÿ„­™ šÔñÑ´Ô€Bù(]`´ÂË h¥$>*N(ˆò¨Ç#´T(QàËÜAÁU"ÚôPÖ¿Ù9‡kgV2‡k+NËÜe‰euHÖØm¬#Œ¡"§%8j-1U™$5ë]\jôØg%Þgùì>³3#;ydŠé^rªð9ùc!** ;3fŠK!Ó0ˆA×fºLíæô7­‘=P¡Ü q ±ÔgvXA65Éa…¢P˜™B $Þ±Œ 0»U#gœXy‘öì_x+¹µ§œúT—GTÄ„, ñUF)Õ)M¯O™+0Pç¨Æb?’¸÷°dÕÛ'rk¹ûÝÅþoåHN‹>¾q>ÓÔÝ~>Ç[¸úÍÑ’ÈÌXG´E˜Ù¢IlcÎ9pJ•ÀÉéŒS)¬p°P,øä´è-ôï›ü%Æ#®|ì6ãlŸr;¾ë‚ž}…Æ2ÿը΄`ww—÷¼ç=t»]šÍ&Íf“J¥Â¹sçøó?ÿsž{î9|ðA‚ àá‡æÙgŸ]tQ,ý?¿Ícü)[ß°DüÀ2ÙÖç‰.ÕrJ‡.…RHÌâÞSç÷ùú´¸ÁI49ÔËô˳¢Â ×¡81ŸS À»!;Ožø «ñ!ÿêÖt¦lšÎ/=Ïóæ…òXS»ÔÕ˜užåÏì—«lxÛ¼îìŸóoù.êáˆÊƒÓE¤òI®/Œ‹ŒóD_eA~4ùÝ Œ{Hc%šÎQÌ,ØðÚ)%ÚzÒ“Ö|Î¿á §Œä¥«ƒ»zhæj‹¯µúÖÖ?þã?λßýn.]º´8'²,Ã÷}*• ƒ}/g³q|§Q’žà›¾{•Ûl8_ˆŠ»žnݦ­è0PÙB9³§¸ÈmŽ1¡B•1…Rxª` $S Šj ](^ `â3Þ¬SO§ä{!Eê1]°Í&ìÉ(h0*šì%ë4ã>ž—1Jš¨°dß[³Á>EˆTš¶è9OsÁñÈñ™R¡Îpá>8ô-£zŽà(·ú™C¹ÕpÊ„3"4ÇÅPLÅ!YÕÆŸfœâ:Ïæ÷³×ÛdV­P §t¼#fØð‚.K¬³k¥·Ç+ЊàK‡LnuH;Œ‚v|Ä k‘„=Ú¤„´9£¤é8½r…ÛK›Lú5 |¦ª‚%½á¾,é·[ N‹ÀPcð.2¡ÊKã3ì^93˜lÕ(jÊÁヅjiþ¼š5u L` 4³.¢3bçô(«70x‡\2I®ò,à@¬³´ÞeJÌC• ™*Òzy܆~Ò¦ØUe®5œw]¹ÎÏ&6¿wHŒŽ9"|¦k…ôˆÆE(™-yÖ*JD.èÖ›$*¢NMʬí$¥5JóžH3•1Ó¨Âë¶Š(^³O©pÈ2»¬/´ÒÛslhë3½Ç#jäT˜r‹-zºÍn¹NKõØg•n¾ÄÑõ5êÇú̺UÒ+Ud¤ OMi6{˜E~`n)Kz;gP'rô¾‡Ø\åÞÉëVgžºù®€/™ ÿ*ˆóô{º°éÃ13UÌzµ;:Þó`.*»Szµ%ÛMŸi0¥a™ÃMÁdÖ KCÂôbÆy¡¤ð%£¬Ž J6·(¥â¥Ïb:#–¼Žy·8d™}VišçÅe¶ÙÄ—e¨¸W\â2ç˜&±°’‘6=öXeJÌ „$ì³ÊˆìpÆ\c(´±ï㘚ÝÃqC–„®9ÎMnslØÒáˆcú´Èñݾt˜ ”xœå*/pžÉG4,B{¦Äœà™; êŒ8ÁMv¹û ýkM¶Öív¹uëFƒÃÃC–—— Ãpq.<þøã<öØcüäOþ$O<ñýèGyÓ›Þô×Þ7‹˜Øé5ÅsÓU‹-=¤©XßI=QO§Ä2eMî³"hÈ¡3)ZçˆÕd¯ºÆÑl•ý‡V÷k¤ã4Š0SEž0è#Ÿ¾j“F>ÝËÄ£·6+øyÎ`·Í,¨STå¾Ït­Á­“—¸ux £ÑÖ˜±¨S÷‡ qÁN6õkîµ1/î{j.K ©®rva„‹)78¹0X²°z@SY8Æm"NqˆµÉ„?øÐ1m7ˆîÏO¥êejr¼ˆ ~5Oã‘S¤×)®€ùƒCòÕ5DUÓÿ¶ešÛÇhC"žàãÄ$4é㋜µÂ_~áõlO¡¼Œ0LIÓˆÑj‹ƒö =Z<Êç¨3F¢9ŋ̈ùøÈð|÷!8„£l‰¤ ˜ˆ*¾,œÒeÌ:»¬È¾ñø§91ºÎÑî2—¾ð€%+{-—–Q/ó Yæ-s i4Õå œg”;>hÁ4op°¶Œ/ Yv<®€öñ(8Þ¾Á‰Ç®2<ß`šÔÈ>! ý#ëwqP.“Ë€%ѵH‡îReÂßùS´¼ø¥ó\ü⣔ VÛ”m…–Š}•>-ÚÜÝ„þ_œåÞï÷ù«¿ú+Μ9Ãë_ÿzŒ1üÙŸýW¯^å~áðú(ïz×»øÃ?üCyä^÷º×¡”âïxùÈGø¹Ÿû¹WØT kfŸHX4lH}a×Û¦G=SÏÆø…¦ô$‰ïÑ'L¢ê(¥ÝêÓˆ‡NÙaDƒ]Öé˃Õ&—Vïå6Ç” †¦É’ÚGú%ê˜ ù‰—fDþ o%ÁH(#‰—Jʃ€™XûÑ fE…íì8ÝþAsFÍ µæk¡%GÆ,ŒG!<‡C…‹, À9Z”èevØdƒöY!p¤aKØŒYGœ]ºÎ®1¦Æ}ú9b“0Éêð%›oY‰íDT¹Í&Âe›l3eõ¾mçºôϯ¢ÿ‰€Oícþ›¦&&ÎFÒ>ƒÉ·6ÈmútY⠽ǹ}ûE3¦ˆc¸ é«#®pŸœ×ðI¶¸éì˜mñ½œµchǺº L“ƒb?Ì©3b‹[´éѢϫ£§D .ǸtÃÚ¸&~Ä€ M•邨º¡wtN³3†G@ÕKÌP¢'Š2Tôò¡JØQL©°Å-ÖÙÃ#g«s““O\a5ö/#û\Œñ-與Å*CU'ó,v]ïRhG‚ÏÛë4¸˜Z"ãxÒ@´JÕ&¦ŠçåžfÒNPª Žg.8ÇNÖ}­´šrã‘dÝp‰š²~ófÉ8Bèì^"ÖØ· Îá/%B¢iÓs…:dBŸ‚Ü¥&õiRScB‘¢‘™JX5ÄÄYòÎLjd‘r•á»0—]Ö ŠŸ}V1)!=ÑFËÿÈýk‹×h4xã߸Н5›MÞò–·¼âk<ð<ðÀßxpˆfDÎ Êà íÄD2#ðCòРŒ¦Ð>³P“)½bÊÚ"ÄgâÒ2—½°Ã]:ŒM^Öa2j°m²:8 ì{˜]I¯¿LxºBþt=+1+ö1±ìj—¡pMoE„K)ì ÒqÌ~kC¹J\™0Žk”ÒhŒŠ:Ò·vÃ]:¬³»p'›RÝʶh{=²Iö–ØzjH|rŽh“çþ"„j(‹dJ Ë®ï¶)‹3ŒúMÂNŠ/sV9°g$ÒjüµÄ(QÝ6ô—з—#Æ­&ÁÊŒLR9ÄdæLÀt),KiNÖµ¿’2¥²†§™Q¤ž}gp˜¬POL°ƒ×Ütln:Õ£Í(©[/`ÖŒ™œ³ïÓ¡X¦@Y‡ºŒ‘¡„™¡˜xèË$Pn*¦Ç+d~HZ³çô„ªµÆ …dDƒ‘nìW¬š =ÝÆÓ¤Êдš6F;7>¹ðbT öJ«fÈ øÌÚU¤†~Øb—5α{Wzùe•áÇtè¾ÖðH™G¢Z9‰YX¼ÎÝÝ$š BÎ!±¶¡© Ar ½”™Š(…DKaˤMøš£…+*A)ö%™ …Wü8G–gûì I¶°6œO ó.j>ϧöy÷kwë¶)ñ]SF)ei"_f–8&5fäYùák”,PEiwÜB@àþ=¡F*ÐS0c(„u“k¹Â\¸¢žÙ.QgŽ8£7«puŽmÀ1¹¸a÷Fé®êÛ$DVÞ^*eáb«Á¥tp½HÎЪþ˜T‡È™+È ±K)›¿/5Æø2gY ÍCmc%íu±Eq‘ÙnS3pÆPoØ\z‰½'×)'Š0N­7üCŒ¡Šñ Näœ_{žOŒ_K‘z™‡¾ÕcÌIK×L£ˆRJ¦ƒ*ÃZƒvÐc\Ö9éßà çØ7«Ô˜PcòÌ"HEà‘¸ghîjX8çÊ¡iRÏFÄfäí9gê‚Ê›Dµ)Ù$bÿ™ãhùcSY%.orâ`•kê•~5§µ~HÿVqŒþ+0ÿüXåæê dPå)j/Ð*†Ü”Çy©bWÕ× ¨=v9LŸn¡Û’¼,žÍ-nqŠëÌtÌ5q†L˜ˆ ”æ`w}]á-gTNX9j(¶¸IHÆ%îEb¨W‡¯³þ(lrõð<Ú/.HuÈñÙmš' k«;œ8wOçÜ”g(KET’\nưýÐ&K¢K©=–¯i”C®×[)±˜‘Ü?Bl¤Ý Ï^z”hsD:Ž­GT£½=f¹;dª+Èo2xdTÎO¨lõ¡$/V™öš¨Ü^>F—æ. úWŸêý]+è±â˜ ››mI‘s‚³¬ã›l¹£´d“gÚâ3cµ8 vW¡$šd„Õ ¯´D ¯,ÐZ1i´MŸ°È©ecr?À ð2Mc<£Ô((lç¼b‹*3*ŽÒ#!â&ÇSe™.3ŽXZhæëŒÙgÕµ$«ìs™{80+”(¶ü[‚D­vôø”¾Y…*kC6«·)™@ß¶)œ%¥¸‚€Êé ›¿ÈõOÞK1 ` â”ÆJKŠ+¡²1!-"²ž%ýp¿§Và_oÃñMxXÂ7µ=%pƒí_²‚z¨ ŒPeI%ìX#‡êC}Ö¶¶ID…aE¨Œp)§£ñ)8Ïe4Ñ EŸ“Üpnq¶X?Ä‹¥Pnßc“&Î8èÛà[.€å€3æÚÂê:§,aˆ xžC–I ¹Ågx‘„Â9ŽXc6GÜbka"²Á6¬.ˆru†\å,Cƒ!çy/ñà"õíW“|…)gÌ5¶Mó. ºGñ·îÐm“¢µæ£ý(/^äû¾ïûX]]e4ñÞ÷¾—õõu^ÿú×ãyÏ=÷ùÈGxâ‰'x衇(Ë’}èCܺu‹ïýÞï¥Õjý½/èÈË-Á¯ ´°3Œˆ5b¦‘‘kÿ¤] ¤¯1B,¬€çCÂæ6®©[4Z·1›$äý"JʺB‡‚"õ¢Ï/)"‰‰œ,9 ѹµ”j4!^Ÿ0z±…, úL&+Mc¦”!Û¯hÍQ]R$>ýf‹™¬`Jiýˆ)'>©ŒÉ+­L ÐÆ®µæ k!<„0xh |4ŠŸ™£›’Ô(G>¦´áNY ½!4R¤. ãíàˆ£l±d›¶jvývmŸô±i$S³îÒFê¤ô%r©°þé! ž¶rN+/¶²baÀö|Ï²ÆÆúDø’2õðÆ9B•ê±Òh¤°FT¥ç!:îó©"Ä 3A´4£î ”He…ÁS„†RKDi „è¾BŒ4:õ(#+‘öd' ¤´ÁÝž(Pq‰(­Û`–0« 3Eµ3¢âMñu‰g4Ê3 d¹TŠRvËF+dâ ¨ÌݪÆÅßzNX)§-èãñ˜|à$IÂßøF<ÏãÒ¥KüÅ_üO<ñ?ü0Æ>øÁrëÖ-¾ç{¾‡ååeÆã1ï{ßûh·Û¼á oøO/蹸ãç]aâ!w`׌€ •…sÑÜn5w±©%ŠD…H£ñÈ(ˆÉãYà ñda¡ÎL 2ŒÉ¥éå˜\á%ÆHµ˜“».8qh€}m \ñÂ*²æLdr·:/37™ïÅ"1cBu1Ý+Yâ¯LQA.ckª a¶_c·¶Ž_É‘”uß[ßPìè‰McÊsŸýñ:å5ߤÎÏxûδžu²At'Äb8À‰5xnÇþÜ÷ìß=uûóËónËþZ{ŠìT€¨…“MÈu`ëóˆBxtõu9bj"b*dŽ¥›-<ô{´9pD¶1»¬So1-iRyÙtž¸)Ýâ3lN´vMàú¦Åk‹×µ–¬£²ÁDVA²@Y†4ñÈÝŸ­°ÇGt{ø;ÍÑ¡OÓ­R,4o!ùpáx V(Ey×ý+1–ÑZ3øÌg>Ãk_ûZVWWyÛÛÞÆ[Þò>õ©O1 xê©§øùŸÿy~æg~†w¾ó¼ûÝïæãÿ8W¯^åÉ'Ÿä'~â'xÏ{Þƒâï÷„n ë³}ü¬ ?-‘©A–q„µ4ía[´·¤¢Ñ…Œº7Æ“vuRJ%m>ºD³Ï* †Ö¬ÊÝ‹f$œæF—b‰„Ž8bäÕQêÞ€ÌÔ«C»ÎñÚŒÆ‚Š˜Ð¡K»yˆ¿‘QL|‡1e×ãH¯¡sÅ$j!sC2>lâoÍ0=Å §/päµ98Z¥ZTSŽ+¤2äZx†ºq-=Ç(«‘ÖBrá/Ì“±rpˆñáf|ŒŠ™²¬9¹q•¢ðè=·JòùÔaçÔ1f«'Ó[T>—B›ïr¦rfcˆw_i5èªM&CŠg5É—Æ(¯…öÖŠ>lDÖ¬rìØmªb½µç™1%×χë EêÑ/[ ³&+½>§“m¦qÄ`©‰ç—tVŽhU»`ÃË-è rÒ›v ?ãìäj¦9Ñy‰žß¦ð<6Vn’d1£Y“ÉK Ê(`/—ôSÖ÷ºˆ/Ù{æÿcï݃%Mïú¾Ïó<ï­ï}úÜÏÜgvvfgwµ’VhuY!­ˆ‚ƒP%ãrÀÁ¢ I`'ˆH¸D٠Ĥ H\.—*9‘-$„A’ÑJZi/ÚÙÝÙ¹Ÿ{ß»ßûóäçéwVŽ*08(VWšÓçtŸ9§ûyŸßóûþ¾—•ΧŽ^¦,ñz“¢ô LÂÎõã˜T±?[#ó<¼²À<ç¡J¨­§llíX4VAw¥ÏtÒfçé$}Ï®¯È”ÉÕö@ú%§¼ nÖŽ³ÚØF¢Ù1Ç)fRãKú¶Gy”§îàûç“âWÐÓ4EJɇ?üa¾ïû¾ÃÃC>ðð÷ÿþßçøï}ï{yòÉ'yê©§xó›ßÌÏþìÏòÁ~÷¾÷½<úè£<ýôÓüæoþæ×^Ð#R–èÓbRÊH´›!i竜¢’ãÑdFJH¾“(ø&'*SEL KBQj§ r嘿,IÏLÔQ²ÄA#㥥 ‚bî¡MÛ‹I?(0BVZdéÜì4‚5ö,©Í™ÜÔ™»|m{©3cÅ…ÍH4›Ü""¶³g$«ìá“1R”,¬ý«YÓx ?ȲȞÕÍÓÓȰ„è}2÷H'œ2°&ì½ûã.ú¢d|¢KÔˆQ#IëZ‚JîõÓ¬tØ«Ôsò†Ïc¿Ž/~áUè†d~¦Mº1Ýo[ÇË޹ÎCü(ñëdŒn.±³Œv–˜[ød”׬JhÍìóŸ`@¤Yã©å_Ÿ¿ÛYù×jøK ú¦mž<¯àž±Íc»FŠG9¿}÷;·ë¤ƒˆ~¶LQª;¶vûjÆ2å÷¹Ïñ©O}Šw¿ûÝœ8q‚}èCpåÊÞô¦7qöìY~ññ/¡CÇga4’VVŒ¶;–ŽQ<¥AHVYzNhÑb‚O&²‰ÐÐ*çHY¢A*Cü²ÄHA&=›§ë,@ ©0@»œ£JVF>:´_×=%2dL»Êè–äU‡ÖfŒÀ0¦]ùÊk$)!CºÔ™WóÞ}VP”4\ZÓ€%—Жø“¬Í¼ßOcrA6‰Èj5Ò$¤HBD»´]êLPŒD[Ûùø@‘N[¶·¹má¸ûC(†že¥ßíŠtä:õ7û<»ŸÝƒ{Ö y›¤Â†#ÆM°9饢œ{ˆn G ¤†òÐc|c™Î™‰‰Ê%¦Y“i¿ƒî)t¨è›%V奰¹ô‹b<7uFe—kÞ1úz™@Ø…ÙxUèE‰¬Lgú,W©g ÔÃ'wùóK•sÛb|ó|y©ŽXöÐB²Çm©ãÄ´¸ÁQ‘¹ÂÝaä²=ÊŠqÓlQŸ-nU$ª…>¶ÁŒ[l1ÿ1á,ÿAAÇ@«ˆ ˆ¢¯~­¼ÄÇÁ÷}Š¢ Žc"÷ø(ŠH’„¢(ð<¯zÜBïýuË_©94)t Âséþ­¹Ï]H‹õ™ˆ¢Œ‘o£Ž-csF´™¸‹(#`æ7 ¸½¡ÆÔ*™Ó˜69C–Ü‘Nºè]Ÿ)-¶½ æÔ ȹbN’ç¢4$±s±$1 ŒpÑÉß }q@1ñíu- ¿±í£½2&+CÊXq] çK„*¥ÝQx.ÌÅ£ ¯yĵ° ;*”o¯í] L]fÛ]ûÿÍ +C¦4Ób@—Ò™•(ŒNµáòÄ*eNÛak©mZÇX5Ò(^bæ7˜ –H®¶Ͳò»0R …D Aìü84pЂ|B!™¥M›LM³R$ŽC¯ûV¦‹#Á"Ëóqù3Õ`ŸÕÊŽ;dz\+wK÷k¤¹ áÏ+ŸvŠªùØfÓ6 FXÔ3N[4Ô1‰Mž4¹­Q‰ÍêtŒ sU’guLãÖ¥ö/ßÿGA÷t;¶™ðâ¯úÜ$I*‡0 ‰ã˜4M‰¢!RJʲ¬»0 ɲìk/襓þÌi k3 eH—3J$]rnrÄI™lˆÇˆ¶³÷,­nÝkS4< ¡èÎÆÌ¼:Z á˜SJUÏžÀ…õr?¬·‰ÂÌÐ$ Ÿý¦íÂvX'w2§Åï¶(6}z•Ý'ç:GñœyBÇKS»l0¦Í¶Þ¤.çì˜ fºÁáÕMj« •_WèHÞ•°RÛgò\—òпíç¾ j­@ßPp¢£ }®É¤ÝÀÚÖC A–wyˆ°Ä<©ìÆwÌm~Ÿt_À}+ð™]hlÀk•íä_IJVk N–4gt_‘Ô1W AÞ_"j%cËü^^>$ Æy¨²dÃß&Æú¶×ˆi‰1;ι&cŽsCVҥɔ.CZLí¾ƒGà$lh0cËÜbW¬¡‘°R9D­±We›ÇD¬¨®™ãLM“¶ÓaDƒ™‹9kìVkl"Ó`Æ5Ž“²Æ«bKÜ]Aÿëì:%ƒeÂo™[ê;—­åÿ¡”oËîNÞRëöc‹¢2ejµZÌf3f³—/_fkk‹{ï½—üã¤iÊ“O>É;ÞñnݺŠ/¼Àææ&ý~Ÿ•••¯ÿZ.}~åeïd°¿Lž˜¾´»Sy½N@YWÔzŽ8oP~ÁO®ýc¦­:»Á 9se£vwYg5jÄNkSôjÈe^VaFÓÉsf48ÉšL9ÅRÚz˜65bNŒ¯óPãÏXUû¬Œ‡|×ô…ÁÜ6³üYwí)ÇSI-2VÌIËÈY§ØNsÍÀuÏêÍ q`ó¼UVP¦¢0ÔëSž÷ñ¡ó¦‚·‡¿I§9`â7y%_À ¸à_âû½ß±„Ùëv(cÅO'ïƒ ôÌô,Óç ü ˆË:›r‡¤Ù¤¾œÚøÕý ÿè3ºklêÜýò§ҦɄS¼HÇŠ8¤£†ˆÄ»$!„?Ðoå£ò;h–c^ÿÊO ¤%Á¾ŠÏ‘ð°÷áñÜ"‰Ï¹†Ÿ=ñ3·Bj@ÄÜù“@˜ï>ÂÖûvJäèPòÓ'ß$kІ…¶³DÉQo›oïü‘}®ÜFu~yõ]˜ž€^‰ç‚\Îñ,Š‚Œ?mc%•:èOWæW¿©4ǸDŽÇ€%ÖÙ#$åÇ—oh›/ño &(³|‡¤¸à«áì'l±aßh yžW{ÅñãÇùèG?Jš¦\¼x‘·¼å- ‡Cüq^óš×¦)Ýn—z½N¿ßçâÅ‹œøÁò±}Œw¾óU·þõ|+„âw×ÞÎÅä>ô:Lo-cn¸¼ð‚­µhƒhhL(LÊ;Žý3¶å&—8Ë. Ûl²Ë:sêœà*!—+1¥É&ÛÜS>Gè¢:íˆOrÈ2[ùÆ3l²ÍX´ IH¨1-VØg3>d£s‹e}ÈéÉ <©s‡|¹Q‹3Ûž»®¸¯~å¸ Ï=g›C~Ág,E8€ÿyý¿åW^ÿwÉãˆõgév oä)ð8Õ¼Á]Ç®X5ÌóöyŸÌßÄ#ÿ üÉ¿ä•ØÑÎ7óï(QDQÂ˲/“ÖB–¢)œ„ѱÇþÉ—™¼àóMïxž7ïǘSç ü xƆ)E æ´Š9ÚœGÆÄ'ã7±!¶‘&Áó¬›Û7ñ f¼±óïYKn#.Cø•“ïäZÿ{ ãUÞ þˆ»xŽs\¤É”×Ô¾À+VŸ´¯QfŸ÷ýZ^wðièÀwz¿Ïëù¤2eJ˜åú€ï½ðØæçó®“§Á©þ‹ìG«œÌ_à{øßÙ`›WðEZL0Bðúµ/Ø÷c¡&šÃ[ãÿª}‘ˆy”‰ApŒëÜÏ´˜òȱ?eEíûþ¼}îÿXûÀ‘âò¿`ÚÚp8äýï?‡‡‡üÂ/ü?÷s?Wí ¼úÕ¯æüùó|ààŸøoûÛiµZüÄOü?ÿó?ïû¼ç=ïùÚ úˆŽË©¶3ÌØ’¤'j²B`UŸ¶Û£a;jgèbåPÖæqBÎíLWÚÙl""ðpÅUºn+¹ç“JËíèU¢2E”‚¶3¦Mä|ÀK7; ±ºæÈmö!]†¢Máf(ZºµëU;î€Í ßo­3šu¡­A ؘ]ż×Dµ DX`š öÝ©}êb#@ÄË^­¹"=r ®n7©Jt]ÂË܉¿çž›»ÙcÃ=ï>Ä\¹­-xƒ´GÄ[öPyM¦kkL`Ã$ÄÔÐèŒiû#&I‹yV!hô&´£i’š€®a„= MÛÎ÷DIèg–„¦#êþœŸC–i1®4é™#AŽ›pÈ2uæ´e¦DW]÷œ:s§ašûó5´´Â !¥“(ên½GtœÑ`H—E›qeô±HùËñ¨aG‰U@,b}3±s‡ýÏsŠ»m,ó®w½‹w½ë]_ñý‡zè+îÿèþèWÜ_YYá}ï{ßÿï¤k%¤óº¹ÍÿLÓÉ7=‹f™@Yˆ·´Yå Œ‹Ïµk!Ãw†¡¦V‡r#«l‰ÂÉj < ©ÐJ¡÷Ãw&WŽQØÑ^.}ÊPâ•Úÿ%¹“|Vc‚ÅGPÑ—ísßWî£t²TCegMÅÜgÖoÃP ´Æ'wI––³ó½ííÏswÈA•ú%R\ᤡ ´¸-Œ’îÿ-P1Øw•çÌŒ 7&µ²\JWh•Ûk¡qV[Yn%°–ØÕkÙO(QRƾeÇ¿ä烰PøBf»xMcÛ=C™ªŠ%¾h²J^2Ç._"¿µ–!È@WrÔ…‰”AÜ~ÝÌKF?c÷¹'*ã,Kœ¶þêoÜn¨îÀTÒT#éÿ·ÇØÃÿÒÒ¿ôK¿ôßûáþ᯸ßívyÿûßÿ_{ðÁyðÁÿòdk5§š\·,ÅIõ¢¦´Ý&Ÿ’áÓF‘TÝ’1‚ç .ì‚ uŠ%sQ¯>)Y a¬_°Ä>§¨ ÒÂ#!¾±„¬1-„ó /ðœ™m›oÏrMõ&N_#fæ Ì>«U¦ÊÒ²ÊjFY*òa ‘ ›ºZƒ†t+Ä( ©D4 fêrÑ/a½† à ÌŽMi#u ìY»¯;RÜÄ=vÓ-¨Ä-ª3Ø™UÃAô§šWÖàÙmxhÖTúa† Jd¤!()=ÝW$ƒ&óîœlT'6ñ Q=±ÆYA`hz3·Yvò ìü-/=v¼u2ÐS< öXsáT؈À%µÙY]«ò{_¼§‹â¾Hâ3Hæqã v7­S'&"©üöµ#ÒÙóË– Û™9Ïð3ß°¿KÍ%þáÖG›’ý;&Å•ßÈC¿3ò¬NùÐèoqñèY<™3ýÞß½ÊPw( ”ø"Gzš¦ž£ & IDAT˜2õjöý¦g?M6 Éú!z  !(¢lYŸ…?<Åk'oò-âé0dé`Ìs;ç¸xßyVÙ'Çã~žâg™É:ZX®†ÍHÐ(—ʨÐÛ’ðh˜6ÏöNS.yˆMÃÆéÝÅÀ—z‘’È€zd…§h|>#}@Ùëí@#¥aïL—öÍ‘ŸÃ*”¯”¡Dd¨)ˆKðÆ[ÿ†œŠùÙ:¿ôÉ÷ruz’õ`‡÷÷O‘²}d…ñZOÜÓºŒ¿_p¬u•ÿîÿÅçüWñ¯³ï¡rÏThã•ÖIêfν/{†U}@Yj~â›ÞÏ Xb÷Éÿô~sz¥¿=¢vfN› ¬pÀ íó‚c)ž.x§ú ß¡~ýÃ5~ù׊x»Î}ßò%þ‹oû×Ì©såÂ&7ï^µáÆÅ­ß~‚»½§ëð?ò>>[<Ìfç?öÖBâ`³ÃóËGéäcz“1¦lz×ù…oû{D2aÜh[s)fÎï}NÍùÜéûDÆ]µ+¨¼$ ÿ}øsh%¸<¾‹ßxâÇhÝ}Èø¿Á=Ê’ÝžzËV9 P^QÒ¹0åÑÿ›‚’ÄüÕ+ðð©OòÀ«¿D‰ä©¥sÔZ ­|Æ…ú%LøØaË?·Cÿ˽}ͽcFD´èÓ«ÌAšLéÓC¹¢½ÄÀË´µ)dÏ¥eÉŠª‘;+lÌf‘¢4 Uj6²}Dý®%=…d&#Õ:&1ÞÜ7}raepsU#!""å€ÕÊîs™>#Ú•.½Ë‚8SÁò͈6ubÖÙe™C¶Ù$ÇGCK˜u®öO‘í4ÙܼÁè°Ë|ØBu3šŒØìÝ "€©Àì8]ùx÷e”™‡1=£yvÀèOVÐû <[9 5ÛÈ5jÄdŸ­9xÝÿ+/)î«®¨ûÀ¸w~sŽo€Tˆ7‚+ÊÊØ=¶ákgèm[×Oá×3zGv©G3nîG¨’n£ÏŠÚ·ö®Å*m1â®à·8bÓÒLÀYó<_*šLLËÎ%Å‹¬pÀsÜ¢d“m" ŸcaÎûxš=ÖXá€8Ø615Nr¥RH”Bò@ïqž‹ïf¦ôä!-¦Îï:$'¨|âÛŽp“6–]~“#„¤¬²O—!79âÌBV¹Y¡ fœä —ï0ñè?Ç<ô¯¹;†nxH×_¶1¼-ã\mœò¢!°£-PNæ †ý#’KòYh;Å¡ƒ°·°ŽŠ,á“rØê²ÚÛgMîqWô"ƒ¨g 8 zôYå€}VñE^m¥3ê´™0wÈ¡À°Ü™¸ˆ€ÐËP”xaJjB‘‘–3&²ÁRk„ІR+‚S‡L–kàC+H0>\kaëØ6j`ÿæuúÔ,uMÛìñFœÓðg¾Ç~m•á&f*x»,èiûc ‚Õû¬t‡d5A؈)ðî.s•c4½17äQ×û›}Á„µÖžÅ1ŒÀHcCav7èßÚ€' ®}×q6ÎÜb„)M Ð §ÔÂ9‘IЀ$†ƒƒUæ» ¶6¹Ìi26ÂmT¨i3ªöÔ6!3¹Yc˜,Q çì¿Õúyt¼1ÒÓôL]ްXÇ÷3$%;¬ó¾Ê‘è¯p®k0s÷­lɆ8XCDJ‡Cº$ÎX¦ÅÄÚÒ¢h1ad:4ºòaZ}Ƭ°³p£$~7%¨§Èna)÷ ¸­gP«º¯0>ÈVI}eÊøHô´uÝÛ·¹ “à9ù¤‡9ÍÚ„š?GMèYÏí®94CS–ЦšÚ®Zx4Âm1FR©ñ¼…s~êôà u’%¢eøxN&hãl›ŽÐ”³Ä bÍjRj(¥Í—ötåô¶ šÔ™’1¥Eê ý®³¶£ãº²XÀì%Š˜M¦ÿQõÖýFA¿3ø1õ,M8ÞD‹‰½òŒ¡UNðŒEô‰ÏX âÃ|šqÔ#ê莠úä¥$Y= Ë’ $ÜìabZ¼ž¤¨\ž! ƒ>Ú“ÜÌŽž—s=>A–ÔdBDÆãª7AÕOÅ÷“ŠBCOô+¯R(«ÐQ9sjÌÕ>(ƒ.þ²æ0ìPzŠf;¦ð%Ïq7ÓZ‹tó-5åJíˆm.TIH:þ˜•õ!ìÊÊ÷û¾Þ¬Š}ü~ÆÅ. ¼’­¥›¬´÷‰©áûëK{ìÊ5Κç‘Bóÿa®ÈãLfm^Ÿ±ZþšÆ,[è{U‘ Ÿ v­ò¤gߺCþ¥9£+—VÏxq§†L5­`Œ×s†-hÚL ’Ü{þIâ•:QwÆ•ÃSxiÁ‘µ[^ê®æIµÏ/1DR²ººËdÚ¢V›óâð I#š#"ÃHt˜ûÖ^6×'õžÊ^Ƶì$cѡˈš‰™yMÒz„¢¤Œ«d¶ vÀöýuê«SrásetŠ|7 *–N*«h% ZjJÛLè•F¢ËñsWëÕ(¹xëZ Fë"?¡%Æœh]qfZwÆrÿóãSÿš9Å„õ(žS§ææÎ3Ì©’2dÉ‘ä¤K>óÜÙDW°§·ý¸çQB j&¥ŠÒS(£á§‡2š‰t³\©Ñ¡$“%qàGSÑDJkº XÙ9¸El0Œ 1Q¥C_Œ†t™c™´S¬DfDÛê Ë6(HËJPaÎX·H‹¤Á¤’ÁÕuöO¬£§ J}{ðuCÞªW³¯< Øk¡|Ò·úr%Ð7|¸áе†ôrƒøZÛvã;@,ì÷ Ö@F‰Û³¤ýt/  á®eÌ—v)×z¨·•°ëëTU³T§€™"N[Ü Oõf³€Ù¼E,ëžgå9@!=.s†[ÙyÆ—–‡Œç] $(¸áµd3§bÐsüœopÔ‰þ" X}Ýå’´)i!f…qÑf2i“éÛµH«-÷ÉÙa®ÌnæÔ+ECHÊ€îKæé! ·>in#:Ö‡kw(©þÏ3>õk*èB²ímV‡¡€¬Bd–MŸÚ<¡™Í¾FöÁËKráó7~›Ñ©Û÷­Q"9d¥òLßc繋«œàen”GØN¶ø·aÎÑå|áÆ«IÒ:íÕ>K½n<}9×ÔW¦ÄWêdWkåZ²LkÑÑ|˃å“×ÞB-˜²¼µÇÑІ’çÍ;$n_»À—m„¯êpïÆÓÌDÃî5ël÷^˪ØçLãî?õ$ŸåÕ”H:á,‡‡œ8u#ìQ øå{ßÉR:æ±ñƒ|ë/ý ¸ïÛ¿Èù·<É!Ë,óšjÊ2}~Üü øw½oæEsœí#|ð_ý˜€Ü*8öƒÏ3ÍZôë=zâ mþ+~—u®äµÿç°Ä¯ýôßâ·þÙ9¸{ ¾ËÀ¡àÔ‘K¼ü‘ÇHˆøü[ÜâTûE^ÿŽ?%!â·nü ¿ög?û0}´IرÂ/…¦É” <Í=\Äx‚ïúþÅuŽñÜøÿâ£?%¼üžÇxàåŸsá,3K^}~2û Ò”üQÿ[xþðJä”ûhh¯ ¸÷þÇ È8¨äÄSÞn~ÇúQlÍùí7³§×øÔÇßÈìß´#ƒþ_í|Óa[l²Î?eþ1dO’Õ<ÞóóÿáŸÿ6þÅ?ÿHàÌ}™Þúf•Vã¿z‡×öòøÔ¯õh#hn"Ѥ"´a "#r‰k쑺,ÚC–Ù0;äYf)±<×te*iÅ i$‰ÃUät³1s¿FMÇäÂgi4AÅ–I^„’hhíGýpS*TÓ ¿‚b3Þ†˜±i¶ÙŒèÐ`Æiq¹rB»ÁQV8¤æ|Ìûô8ÉU+q‘™ 9ï]¤PÛ[›d+a‚·ZPN<ŠaÀlÚdåÔ.Ó´MyÔjÀõÔG¤ÕuŽ=˜ƒ~ÖC(à¤Õ—š>Vs.,ó]­fðÙÓÙ˜&¨o*Ñ5…Ù–\wÌ1ãÁD|§Fן\†Oo£ÿKWŠò „´EñLˆêj6_v™Á¤ÊP¦Q#Æ+ ¼(ç`¸Æzëǽ½ ÕX ö–KÌFú7'7¾3­´Úp‰&$e…Žp‹k§ÉŒ1트òr¾È!+\çÙc­2&j‰ ‡f™Õ•]"uf4éû¹ðkk×Ú”ÓŠG2£É»g"s³8‚ö$=,[wH·r\¤gýyöŒwNŠûFAÿj·…¾·D:%Œ®¨Jj¯D‡––{ŠHd¤" !2¤6‘v± . ~Ä1á`æ|0L—Ùlm#3HG5öÅ:úš‡I5™ É.G–„5rD®}0ž$¹¢‡’¼0I;ŒÂ1! ¬PgÎnår8¥I貦ÂÈŒ±MŽ 1±Q½NÚ9uyè¥#¢dLE­D¥§´h¡Gi/©±É…{¬¹ ¡ÀòRœ©%J”øí„$oCz(IŠˆB*—·¡!Y:î’ …M1T›M5¸² “u«¥o;@ÞæŽ¨ê÷öƺ0•MÇB* ɪÈê—4ÆÏó*PJž°ÙV=cÃv"réQŠÜ l>Æ‚<—»=Ò9°ÍhT꣜€Bx#~"Z ‡Ò’q-(ŒÇ„J”Œi‹ˆÂ¨ŠÏ%³ÒàJˆ  ^gÎ!=ÆtX½£´µÿâS¿Öpæê5¸´MæÛ.J(L óÐ’’Vh≠WŠ ÌXó‰¦6¹KäožÛ‹8÷P…!<(,Ù+%$m“ cM¾a4C1Ïs¹@*MX–ø×ÔŽF6 ô†fÕÒëLHÂ] ‚&ÿ@ ù¥›|÷ñßasiÃ`Ùºõ9ÀHÁQÿ:ª®©3C”°+ב¢´‡4ch—F.æôhvƒDÔ˜„MvNn°,­LX’áªÙ§gúÜ”[„dtÌȺ¿ ½jÃSILX¦¶½MΊKÓ7¬‡´±ªI`ž„S”F±",º ôŠ>§²kÄ^ÀL6éË¥jãYh@sÏwªñÛæ,ÒAúM3E‰’‹î`ùW![ûÆí6änx.¹«fb áÙD>ãk;^Ú×¢$%8l·˜øM¦´ÀYKWhRBZLi8Ûéu@°”qZ]B^VäãÀ²Ÿëa-¦¸?@ ª^ Nþ)1ë6&®bvùNÈ4ìηˆj ilú·, ×xD*A Ӧˀ'yÚÕ(JkT¢Cj2®¼-Ík=„Ÿ …"65„g˜…u8k÷ÁÁRšqÚ¡¾:§§ú•öÞ/ ZÒz@ÌTƒiÝ`š‘Aò\‹¼ð¹~þÛMÆI—(J¨;ÅÇâjî1ÐjŸ܇s+[üIŠ6'«”LåLº8fÃõƒSøóŒ0Š9Õ~Ž(“VfR)­hŠx¹AÈ’ƒõ^4§¬(@X|ËLðË%4ݨO{í(ˆ9ЛèL‘„×F'Ö:»U0O£œ!¤¦Ãˆy@&W7ˆÏ7à <•ÜOÆÄÔÐHQÓ ­ÔŽn‹ÀÒõº‚WjÈ`8é1ßiÐöÆLWZŽcu'׿¸lí¯MAöäi¢»—ÜŒ<­4ÞV¾4©4æƒÖR•3’ –l÷&0• £e# :ý1zI Œ…Ü%A^0:Ë= ÅÓöë¾HñrC^„YFÚV”¥Ï,°sݹLïüž öYµ‘}¬ºdëœ]6*Æk•ÔÅ ˜Ðªˆ[;là“•YJ‹1‡b…qÙ¦,<:þï~‹_¸üs¶Ï$ƒAtæ”sŸ¢ô k1Ý•CúûkèXáyA7fvÐA%&U4;#L]“ŽëÃÙÐiðý=ö’|¡ûS)5Ò+)öDSÃPmÎycmÄïþÓo‚7wKLÛÐ>Ù§L<Œ€ ‘Ñi÷ñUNºL§1´±¥B¢}‰Ò%…ö8\aÛl’kŸX׸ ¾Ì‹å)´’H£¹WÂú‰7™Y$J-Éo;àMÈ»>ó F^zø"'r¼¥P§ÔãœÔ é›ÃYã#%£›=¤ÔŒNw)’ÔØýªîÌxªÑ—QPp´ —Fð‘C²(à€{˜v’.å¢PÁåN\¹v§ëÔÍœÍöM' ¶ˆŠU%YçRILÃþnóz±B`2– )lLö(Aå¡y¨Bõã Šºâ0]ÆŠ©ŽÑÏ©ù3. “°ÅÄ´0  iõ9û¬RcFQúäʧ&bšÃŒæ0e^*¦çšÖ½.ò¡%¡0$I“lRïÎ/(»ãClþõ6CJ*Ÿí ’q.aKX¯pEIDBÍr¬¬MS7vîâ“1DI†Î!È 0 ªÔÈÔ – …”øe‰4ÚB8s_hÈ“õ€a³I,jø*g¦êä&`îÂ` ‚Ðé—3gb³¸šÕE0}‰Wý=8E£qD@²³$ æ¤rŠñÒ/iÉ)Ǧ71Û ÚXw©ºÁ’20±]è²QR æ ¦èÈ®£ž*ÐM4šr¤‰ÁdUO¡Æh‚: t 騅@tíkC, V*3zÇFpf >¾ƒ™mÀqIîG-IÆIP’ñjY?B·<êíB¦ÓÒ³›Ýv'åÆðR”ˆÂ/×Îz¤"´s­Ö ¹ñØÏרùs›$…a¨;”£%-ª4ÖpD›¼ È‹€Ø«UÄ ‰ÆÂsãcßOXà/)uf•ŽvAp\ÂJ,yi‰»¬¡(¨g×å l˜ž¾³p–Òib¿¹ßÙ>QÓ B‚g 4¾.ªD•º‚T…}¹ûW@3M˜©sšô̱î|ÛSÇÛÓ!.#rXiš/©Á”TZn-$¥ð,üš{˜´–¡s ˆPÛý¬f Ù4"oÍíÏP¢Z_…ð¬“#Φ„Ì©»ìS+MuƒšP•v-/Ö GaÙõ¾©œ@¤ÖJ¹Ä’ck` 0!¹ÇˆN%ßT¥F–m$¹öÉë ‹<4€º@Ça,r%„qîÅKàj=qn–G;°? Ø;d¤;”Bã8ÕLŒÊ5?ÂvèS›pYæ¹±èƒt;i‹‰‰Ù÷.‘!ÂÓ)A bmɈu5³¾&DæÖ¯ ‹kă6t-1–ô\’:Rä Bä´°½Å„âKj"+Px’ØÔÉóm ñCL.©Ý_Rç]`´°Ï™ ´’˜f@†Î?¥n|û—­}ÍзÌM¶(9`•sZL*ï]Ë —ôŠ>o ‰¦ËÀJ܉-"ecz@âø"Ge^/…±0nnC{q·T‚ö-ñË+óŠ 274ë1"0èºÄYm¬‹–Óy¡7ŸÐÆw'ÎC–I©‘ 1ÄÔ+ƒŠ”}VÑeÛl²"ö)ðÙ-×9œ­p¾ù #Ýe{¶I¤„Ñ5kÞ€øV&V‚xUIĤIrðDIKNðüŒ,iaYŸbRAzØDxÿlD$_hÙ ˆaÑÖèx0]R˜%0W”%Ë5$ø%¼æE‰èÚ]qX_B¼ÌÃäËðÑ]ØZ§üo…òÙ¬ÓëpTÝ`Vk‘å™ hÈªÐÆ'ìFä™ÒÙDH[Œ-9N-¡µµì]á€Óâ2>Ïrž¾¨Q3ÎðcÚ65MØÃàõâF Ï£Á”€¬ZW[lÓaÄ+Ô˜“a79Š¢à$™›Kzdî@¹(övSœã‹¡ô²Ü=Ä7dkwVÐ3ñ÷ïÛb“XDÄ[#kv¦-š ¾ ÖWÔÎ$cØvHˆØá&{¬Ñã1"“ãó ¾ÈÁòá© u#dÉ)q…ƒÚ ×gSl³³´^u›¥Íi$ÉOSlºzH,kì‹Ubj õ{“uª‡ôJ泓v‹ÔDÈ\42®p’²TÌË:Riní#Ùopéèyž©ßË¥g/ Qv,œxxœÓgžå5ÛŸãÕÿÛ Äë4ù–âÞè"¿ûh‹ ÏOÎrù™»!‘<3[æÅ­)½ðyÚÿ>E¤ðªxœòÉðìÏž>ç ” R”6§A·Ø¹q”ÆÍ˜cŸ? éM˜ÒúÖ »b+o;ÉIžCÅ®^cª› ?.¹öw6Îrbi×_ h(v¾} ?ÈyøÂ³}nà‰ù^Üdwxâ!Ã7çñ:ÿ ”3Eþ_‡_¿Î¹à"Çî¿Î”&§øÒ—¤¶ÌüñöŒòð§ý1GîÚå[ýCüö\%~…üáãßi]ì2ƒyÆ£?8j÷¹|•ñºŸÿ 9>##z{$D|fòz³e÷ÖøçŸø»Ð(y…ùµ;êг¯·ºtäÔ]ŒÀªŽVºýRQâ›) m)ZÚ«(ë\Šg#}…K39ä¡°Ð[i3ŽÝ`ÎnŽ©¼í…ŽÝnî —©Ÿ„ˆ) "'c²§U¯‚¬Ô*t®qÖä`P,ø6KuH¼Ófx|‰QÖevs‰¬ž2Ú[¨%fÆz¹ÏÁŒ%e/@§ “HòiHa<Œ–`$¦Pä&ÀÌìÑ’üxHLäXð`V$f$mHC Jåƒo¬.·º£0-g%›‚i ÊÌÇi¿¾A³Ïí]ß@ÜíC]PjR(ÊBaFi³Fž¨vnÌD •=튨Dø%efs‹Â##üzŽnIŒ˜Ê U%&ªˆ5¾ëµ|r„Ðxª¨ ƒJÇŠ/ŒG–…„aJ)$…±¡ 32'¢Fìúî°Br|bS#V¹ðŠHÝüÕ†ÆGp3æÎ½ÜÅ7dkwÜ¢ËMwÁΦ5 Br;¨%w;ÒKÖ¤íReÍ"wBJbŒ/¨‹ X²(™“o”ÎrØs”gG/Êδ„"A‘©¤Bw¦4«x^!R (C@Faó¢NQøäÓ€¢åQÌëÌæMD­$)#D×£ch%ÉË€QÒÅ’øj =ñˆË&£“KÌŸiÀ†•š©B/{lr VPum(3ðú¿S"›š952PB`ž‘ÄiӸƔc¶Ø)èʬÒ`F¬#fi“l‰d`UJ'0D^âvŘÖ"jøøqŒò0O ¯1¨@#Œa)c „~JXKn™¼ÕŒârˆ~AÀŠ%Ë)¥–Ô€©Ë´÷dNHJ©ÅÀg6ë’Nlvüì°eÑ‘H eR5f)>sÓ€‰Àô³´.¥ôX\r· ¯>™ò1Ê‘(Û}èÁТ–fb vr®u½ R0í—0Ø!“GôM;y,s&~“Õ쀺IRûá,£±›¡C‰Ð µÀÛ7U±Æhï‹Ü½ª7;µae^…§H¼À:9% ª®9d™%PÜr&#kì“Ñg™.C6ØAº†Ås,!+äÇ*MóHvæK÷¯²êï#·`?Ya¨/¡la§¹ >eàÚjÇôfÑ(±$íG¼xën¼zFýˆMHvšÈVS{Ч4dÏ6÷k[ s‰hj¢ SŠ, ˜˜™Dœ·ór¦ ‡Ñ#S”_0´Ð×í“§FäAHyÔ£¼Úƒì .™0ÿr‹á +0Ð5ˆö7—]¢¥ «k;äx<—eª›dYÈ´ß墺‡Ü÷iˆ¥V<¯ïbKÝtnl–g°DŸÈψ.Oq_và‰‚‰lq™ÓŒiÓ`ŠDóÜü¡—°©¶-çÁØ —DØì€ë«Üs½q IDATþ†tÉñÑá8׈©‘p•Î aFàB‚"šÌÃuŽ‹oÈÖþªo¥T|ìÜ·’D膄ÀÁµM aWR"æøan¯ÔZ‰š””‘âÁåÇ)jöЙ€˜ &¦ÅPX¿ˆEèÓ" !dEõYc¯B欌6`™C:Œh2«ˆe]d„Ôˆ9’ns=Üa™>M=e#Û£œúL'MôÜCì[½´Fâ rdPP!+û»¨vÁB¯ þ”†7¥0’ó<Ö“^1zã ‹rÜ‚ µÃï7…¸Zßt9ðsîæ[lSàqŒë+ä³TÕPæ£Þ·ã›œŽè³!n0§Á ûlÑ!"a•}›’é?Çô´ÐÚfúUËˆÈ +9ÅÀƒKã:ˆ;¦$[!Ù–SK0¼¥”i·Jû˜-‡®Ó&:qP~ ÁnºÂnwäÄሱ¬Ê £i¨9a$«lë%‹P.FìÆËLÒ*IË'=Ý ívԔɤJ7[À …¶bA¢°ö­¦Á–\™ÁR]¬gø"±€Æ¢F_7¬Í-5SªŒpÈXe“\ GEÁ!®”ˆmA!.Ëz› ¹J…1Š‚!5št9ìÒô÷Xf‡g$v3‚ÝÔNÁ4V'b©Œ;—ˆb »¡Œ[¾]³±TÒâ-¿î(×l’`Ø„_‰zî…üÏ¥qøÈEúÔy ï'dÊÍéYnÒç1u÷>½ø Ò|]ôÿq!м˜÷Ïí«ŸÉÃøÓ‚•‹{ˆ)ô݇»—êÏk~˜×ø÷1¢Ê!®ršÇæâ^ÉQs…S çà9ð¢?ÿs>ôà¿áàÝ?û­ÿ7m—1Žp‰*C^¹÷^Ž6ìÔå”ý¹~öðòÍé£.¾Ñ¼›Ûxˆ—º4éñüìxÎô“ökFöºüãÊsxщ¿Æ«&¼ ñAná1" j HXpºü‡ö»‘9Ö GÂÄ ¹ýùg¯ÞdÍlòü!1· ÐMðyÅîûl±ÝÑq¾ç«ÞÎ]û>ª ¹“O‘am–ŸÅƒø$¼L¼µî¶5æ9gsÌ/·®Óœ¥ø#wó¥Š+ ©ñé»¶³ŠŠ)A–àù Ž)ðòœ ²S]@`»í^Ÿ¤â‚/.ý Š! bÛÌA1LËC¯ÁxeGžÛOËŽ™Cì¾CX·®¦Û--2Sú4R£Â˜,¢ù,'­ò{,”¶~ZôR£O³D¬N¸ÈѹZÔªÜ`=]c¨k8¢àˆwÑòM Wd„rB{Ð!‰ƒœX$¹¨X Pº¢•äÀ±«Œ®ðdÿÃõâ…˜F£CÚ ð*S¼ Å)Õµ.q1éÕiÜ£îõuâ$dµ±Ní¶½É®—Ð{Œ– vŸ8@šøˆ>´n_§ì‘] È/x–ç€w§!ÏÛ¿¶ ·¯¡îÑÔ˜¾ÝÇ;iwxÄèL‹,õðê1(ÃäB )ÔJFm¹ÇöC‡HÒ·š2-ÆèÔ!Î#/¡vé÷š\ÈŽã -e»£ª14uÞ½ éç(©9étQA Mß4ˆœ1WúÇW*,;,©Vä¬RCNŠ3„L9Ïqº´h–l‰M ’ˆ'Õ&*¢§›ÔÄcâWÔ!DYxFÄ$æ:Aq¹Â¤î¿p&¾9Š ÄUKŒ•i¦ žƒç¬J [2e2 )ËħçF.v­â#Œ¶+@aW$å£[&æýµÛlÿïsM¢y?*P}֣طZÈÊ÷mÀÄ ™¢Qø¤8dHi®ý¿ûF¤¥Ý©"åƉ&˜­—´ƒ"ÅHÈÍ5#“2íÎÁÀªdóÛoUSe‚'3[”(`¥ëÅ¥MºFȃ(¡~1Â1s£™Ù÷åx2Õ˜ª`¢¢@xG®zúרÒo= ÉFYÅÅsÓùå“VMp¦Ü;3¹Q‚$÷™f!™p¯é; Hñæ+¢iñWt½¼m»ÊÌÍmœòªHm3]0ÿú³¥1¥ÿÊúT„LDˆolOqÉ\#$™q(‰¤ÈÌR”„ÑÄ¡ýeÀxÙÐä(œØRdÕ@ÝØÎ<-otU&t»¸·èç¼¼Áköõ\« —âá+@2%¤RÂ7­9HeŽ0ù³H|Rty£YÝ÷´ÜÓZaÛÙ¡wDnw·NŒOBoÚb¤khaÁV©qÉŒC*|LGY<.«õ¡$÷ìµA †ý&ÝhL^8WcrÉpÐD<≋ð5¹ð˜ê ºP˜B’V¸'OŒ´hc]!Ï’I@šz¤Ý¥4$:L'N”á6SŠÐT`rIqɃ¶;—áü:¦¶ËvEŶC!½ù®©È=ƦiGû€ÙQŒZMŠõRxbàÓ ¨O1¹$Û èN— 8$=‡MÖhU{ ÜÓiHÚ !Ðx*¡×lÒµ¨„#¦EÈpTGLÁYÈ0F°—µÑޤ—6©C¦",¥±<~å0ÉC§`l*8&Ç•©ö0FàŠt>š/J¥1Œ¸Na™ÌEü Õ)l”ŸL&<üðÃ乜:uŠ­­-ºÝ.RJî¸ã¢(b{{›óçÏsà 7Ðn·ÿ·Læ¾Nùù+ÿ™+­5\r÷TÆuöÜ6:ÖèH “š ±ˆ‰™˜ˆï~ò÷ÉQÄ〤ç#MR÷‰Ý4s¹ò‡˜˜ˆƒâ wó ô9¸»Á^g‘éM! tðÈ8ÊcÖSÂh„°Î‰‚ò’–Ucˆ9e­u•ÐÄtE U-Ô[ ÷x+sŒ–x«)FŒ+PMrL!ƈ 9¢P;g¤móqS‰ š”Øˆ'á®ÁGxû¿ý¤©Ç=úíì}°M»µËüÚû¬4ö‚ùàÆ®ãì¬-^å{~% 6Ë\0G9$®ÏéqgŠYò·«-O0²àû^ñ+ìª6ñ^…ßx×ÿA!ß÷¢_åè‹8eA¬LA¼êÑÿÊ€0Mù¶g¾“[ôCdGüÑ›¿–ìÔN>ûIž{ú#DLØ\iÓkV eÌ¡."ÕÜÓø÷y¯atS?ýø·òÞ“ß@«Ùå;–IhdljQÄTúSŒ+r“ï]y;JÔ„m¶šôJφ‹ÎgZGðIY>Õ“š4¼ªñ߈CŸ½¬ÍÒ³âm±b¶X C$&œ;yˆÑÁx ŒÆr^Ôü 7ŠÇÑSÉÏ7¢kŠ{Ž˜;O?ˆF²î®°»¸@¥9æø‹¯ $ð™ëIèâ‹Nèœ={ÖÖ…JqÛm·ñ裒¦)Qñ¬g= €'Ÿ|’ÑhÄ­·ÞŠïûŸ?¡k­yó›ßÌáÇyõ«_Í;ßùN{ì1VVVø¡ú!†Ã!o}ë[IÓ”{ï½—{ï½wþ¡ŽYІj1¦2NÈ|I¬TÖEeéŒ ÉY´'0.¨‰A¤ ›,üqnÇO5¬ÇpŒÕ'7e'.AvÊŠ´MÐß·¬Pà3ÂZBÐL¾B IÍ ­£’sûÌ&]"&L ¨—Úæ ðöõ‚1 &D´èÎ÷£) Ñ# ݨ5ÿ7IAŠOŸ…‘È㮓ã9)Ú’$ X÷ñWGhåPYèC­ÆU ¤f<©âµÇÕGæ8&%)–[ £ ŽÊY v¨0f·X¤®äRÑ ö˜è ºÄ½:­;xNÊöÕUŒ¶zô•v}NB–{L.U‘µç6A>YBzn9`ÝRÈÎùd»¾­N›†bâ0ºÔ´€<@¯(ºz™rÁ…É%“ÇjÄ«Œ/1.Œ¦ŽírB‹êì´¸:>¸°··L!$Ž““ C.l K|â¥>yêïVɃV‚~ÚD¥†‰_e’‡¤®ÇyˆªrÞg#^£æèvÚ\¼„# võ"¹vˆeˆ6’˜ˆÍR­Œ’ÉpžãàÌõÜ3…H/Ø¡EA¿ß'MSî»ï>Þüæ7ó–·¼…×¾öµ8ŽCQ ÞøÆ7ò’—¼„ßüÍßäíoûç=¨_*N‡×¾öµ¼å-oáèÑ£üÌÏü I’pï½÷òÒ—¾”‡zˆw½ë]h­ù‘ùVWWç€Ø:ærëˆé-7Øb…mV(„LçRHÌ„EÁÀÔùé½· w¥ £²[*‘ð"Ð\¸|ŒPÇôŽ6Yeƒ]2í²7Yd »’™±Ì6=Z¸"E–†0²¤:©2 fig£>®É‹ q– b­µnAt¥ö|†Kµ˜àf¹Q´Æc’ÛÐÔ÷bšÍÅ6m9¤šÆPøûº×Ë¡ªq&¥ G½Àjk›±Œøÿþ„¢àÇXg­\‡TÑ(*j•úšõ92Á•S×åN÷!xht'´õ*–Nnð,ç“´Ù³zkm(µ)—J¥Âí·ßŽRŠóçÏ#¥$Š">úÑr÷ÝwóªW½Š'NðÐC}IwÚ¿õ[¿EL&þøÿ˜Ó§Oó¦7½‰ßû½ßc4ñŽw¼ƒïÿþïçÕ¯~5¿ø‹¿øôižçˉœÜVçüñ™IÏl”ž”ì„L¸DÍ!¾œâ¦)®Nq¢ Çä8£ågh ZK2íY¶†q(”µî5i9j.ì 4×Z+‹G1Ž;·|î‘‹˜vMf9Ɇ¹W¸k2[žxnGõ^–¡bƒ—èTâ5•nŠ*ôØRÇŠB’%.ÅXAVʘNfªÐ±B'’̱~ì12Òx^‚k2²Â%)|Œ±ÖÁ.)LÙÈ%‰}&¥5X–OVxè\‘åN¡©ê¢ÐxyŽÊ5"ŒMDIèã¹ð*\í“SØÝ¯.¬­µ.En4 |s¢Žåˆ]’Ô'M}Bc§žIñ´uÝÄ”jµ@c™Æä ÔÚ6B…Æ$ ¨sº°Ö’¬pÉ´‹É%:·JÄ\•LèX²»»jíZ æ²ÀD®Œ¬àµàݰ²¯ößÏ”€žäKsôŽÝ}Æ nÌ)r\¸Ûàd)Ùß[óN+n±ëÃy(Z.ÎBÎÔ¸øË#’ÍÉÙ:ÂÜg§˜T2ºÐ$:1À;“\©0xÂŽíe%'`„ ›,Òl H•CG·IÓ•d„• gº§(2I;Ú#_m’.N)ŒƒƒÍÒKp¦W¨DcZñuÔÌÏ¥å9|üoa<„'žxÚKù—ÉË^ö2<Ïãç~îç¨T*üú¯ÿ:£Ñˆét:³/..²··÷%›ÌÿþïÿžF£ÁM7ÝÀ#<Âk^ójµAÐétèõz;v !çλvÉ„â÷&/$Ÿ(ü… ­(Á%c‘]ôiO:ÔRS#rG‘)‡z:bLÄ‘»¾žõ»VK“'Í« ¨“à±É*»´9;º‰'ÏßÊc“ÛxáMMëá ú;¯„£ Ÿ•Ý6`r©‰7šâ®%hG’t#¨h´+1[þâ„o¿åÿåwžøè€"Æb”ʹ¡ú.G¸„flëeŽ×Î#kš1¾bñã<&nÁ Pk.p+Õ>§WávæAî$Á§Ñî‘°@‡[nxœÊãS>©n#&ä^õK´ÙãÁþ³ø·ÿío „æ¿ÙañÐ&ìƳ–?Á±;ÿþ˜ˆ yùùØÞ ÐOHþGþÍöìù oÍÑ;’ÛïúQs€Bój~›S<ÎÛ6hÿö6[¬ðkû?ù/÷³xЏ_{ŠÛ_ö(¸“iÐ'hù±ÿòtYà“ïº7½âÐh³ú³ç™ô©Ë!Ïp?M‹.Ël[ļþ¦3hRƒ&ß÷Îß–Ÿy•ƒÏ¸€ ÂMj 8ÄU¾ß܇k2>ð©—ñO~?4 ómž¡ä³ÒP ¦†h!hÈ>Æ„iŒëeè\a|òr/%y8nB9Õ1oDEŽ˜J¿Ô…68nNP1\•!lC8¼1¾HÈ…cwÅž•˜Ô…Äw˧\•ÙUE’2¡ºyàbê “«&îÃ#D!´ÚÐ_‡ÉTJå¤jùz!f| ûÇ5öÀ%Ve ß e1Ë ¿e05‰WI𣠉“¡«S²J€Ðà˜'Ê(´ÄQ©U­k¡ÑC)5ÂÑVñK ×êâ…ÂU JAjFY Gåø*!/\dPà¸Ú©qÜ‚"+0;{è`‘$×™Ð%¤Ÿ}°=¸ë%öé… ûµá=ïy÷ÝwÀ<>ÿùÏçá‡æÙÏ~6ýèG¸xñ"÷ÜsÏ—d2Ï󜷾õ­¼êU¯âÃþ0KKK(¥æ±¢( \×EJIQ!PJ=Ól÷ÉðP‘O)¹½ßÉçgÏ((„Ukœá…Žr±TlÔs}«#P)µÂ-NÅÂ*¿!èŽÚ‡rëHX¾O{˜±ÅåH¥™vCŠ‘BhiùÊCA8ì-´R#ý]Ë›v’²C¶q#Ç™›ÍFòS2™ƒðfºÆä%ðl¦Pé—šî9Љ ‰ªSkŒa™mZtY0;+À‹­Ò‚åÒ+¦ó˜%),¦(36Žê2>º ¢€'­{ŽSÂÒ¬b\ƒ>CjÈ®˜¢RRê†PLU©¦I)º#Pè|ªñ[·Û@½±G(¦Gã‰d®ñá—Êœ¶™ Hkm§ª‰¥› G•‚Ov¢*„¡ Ë,•œñôÚšu¦—?ÃÐ¥Øs*ϧ."±MŸUï“Æa*Â9¸RÒªbd•D“Ä®ËX'”FLÇ :S†øûÑÉ[K?O,ÀW}ƒ}¾s-Vœ9s†(ŠX[[Ãqn¼ñÆyÌØÚÚbqq‘íímÂ0DkMµZýÜ„þò—¿œõõuyä\×妛nâ/þâ/xòÉ'yÿûßÏýØQ«Õx÷»ßÍK_úRò<Ÿn¸î¼ÃàN@ŒA” iθ€ÜŠºUŽggˆõ|ߘ}ÿól‚TïKþQ™Ø®¹î”»÷9¬Ï€—¤ÔÓøM§èТXCbë°S"9ÝòF›ù1×â•h×™µ&˜ÒÔ)š.“y6w«2šl+Œqd>×:.rÇîÊ*S•Û®2u)¦.n%Eù)5@EŒ-€V¦F2MC”S •Ι&!ÒË©;]bâû15ž;&UÅ8…a¬«ôãÙ$ V””[ŠS€SÉhÖö˜†ãí:òV«‰Ÿ>`6¤½ž/ kÃ…uPá@™Ð§ Q”Æe¨Ø“ÐV*3ˆ3‚bÕ#ö¬›T`z¥Rˆ†t7`’V˜*—É^•"s‘K9ºã2Ý«PŒ\d¥`|± Ñ,X$=pÀµ‚,Æ¡Õáö[˜ ‡4¬ ÝYט±C'YÂwcôØ!!B7$"48a…K~ân²åüíùëLèepùgçlמ>òÈ#¬¬¬°´´Dš¦üôOÿ4ÆÖ××yÃÞÀáǹÿþûyãßHQÜ|óÍ_’ ]JÉÿð3Nq]ß÷yñ‹_Ìý÷ßOQ(¥h·Û=z”¿þ뿦Óéð‚¼àÚ× ¸û&ˆc’b‡p{Š*rB5%J&„½˜J‘ ƒ”9ÊѸˆÂq\ÓݹŒpŽš›~XÑ" 4…:vÉ•²J„ÍœÖWì¢s ¨:CL½‹q aãº)A#¥p%iîcAVSv/Q©À1äÊa´Þ ™f\á(Z*F•Ú• DÔ )|IR öÒE&ã*RH·àª{„aÑ >Yäñ¸¸#u=$5‹Þ'²÷qºûÉbm‹¦êrØ¿Ìòí¹D4½Ú$YÄååcôë-Žë ¬ím#sÍñöYžqäS¤Êg ê a¨ëd¡"•![ý5ªÉ•5W©ŠèBØŒ-‹çðcxiBøìv—©ŸìaÃ8¯Gúë7çÁ1Œ[!cYáð±‹,ü» oo›É?eýq(Ù\[cäU¹1;Ã-Óuw{· IDAT'ɵC¯Õ"rcöœ]ô)×®D"Áöú…–$yˆï¦(ÏÐØœ€kX­lpü®3¨"§¿Ð Ë]dS3ÞŠ …‹k'¨‡]œDSß›PWŽº—¹£ñ úØÕmDC@ÝÏ,¢|Í´îáW§$£g(¨Œ„«xæ­Û5kKpå¶ÃGÐï7©!•‡Ù8ö EÛÅ“×wpÒ/"é—ï}ï{ùÚ¯ýZÇá©§žâïxǼh¾õÖ[ùÎïüNÞö¶·Q­V¹çž{¨ÕjŸ›ÐOŸ>ÍéÓ§9uêÏ~ö³9uê¯ýëù›¿ù¾÷{¿—“'OrüøqÇ™ïÖŸÚqÒhdl«:« "7ˆÔ ËJ[tËd-JÛ¨LÈ3hÞ —îKôq‰ÉA¹KÏÊÇ×h.¸Y)Rd:ÀçR×¥^ ˆäÄJ¸ Ë>h®ˆ)› E×vPîÔ#ê çŠe9§·ù$Œ©p”‹T³Â]ZóN¦%ì™”u*bL„EÄïøKì…‹¬x›aæ:äØdIî 0ìùm|‘ [EgÆåª³ÆIuŽDøÄ„´èrgØbÙ*:;Ëî6£ ŠÑ‚]w‘ãî9ê¢ÏãÞ- ;M*fB¨bT¨Yö¶Èš&w tAsu—~¼ÈtÙkzМ_„¿» _¹ '\6™Ïð èuÇvè+ö$¦c,;( 1× šÎÒ”4¨"”fÚeò­€è}L.˜n¹¤à‚Yˆ• ÝspWbœå)Ó­º¯`¢,Ë!)ïÖÑM¢˜i¥‚j'ä]ŸµÕ èDÑ-0F¨FFe±š8 JDc†&S ¯—7žï»w¿@B¿å–[øå_þeÛÃ{ÞjcÄÌÜnVàïa»¢é¾‚¾fùÙ¦ æpHÃé“ ks ”ÂP>5†,ÐaÝ[e°Ø _´ósÍ?ðéøv*Ïê¢LA¨'RWá ©±ÀÚsZ›UŠ´.ˆ‡ôà &y…$ è>v€iW0Ô V²à$ˆVŽé;\jœÀ‰4Ó›.®Ÿ$íYí §•RhÅúègWo`Ë]a=_Cx~ž1ä.§Ýe^í¾‹¯ØúH¸,c,„»´Ÿ³ŽCA÷.så}ÇABï+–Q§r‚žæÄS—a·~Ý£ìh2\­ñ„¹ Ä]ŸÑ™%LGpéÒ CcÜçîÓQ“C6W–š¦\8ý1¢ÍÎcKd‡ÝþA6ÏÄhÉ-éâýLœ€OÕOS“nÞE˜Rñàòë¾Ó‡VYÿ®#¨FÊKœ¿ãeÉÈc‡I% éöèV[Ä÷$\yø8Wÿì(¸°Ù:U¨† ÀCϹÌÉç?Fkö4!B^ÎýÏ€þñžç¡j9¾HXütŸ%w‡œãî{þ‰ú*ç‹LTžü¿î€F©pÒ@_`ö<Ý ¾Ô»õI÷X‹µch÷ÝÅør“qµÉŸ}ë+ ¼ÔÒ³¨Ð)Fšõ=„1LDÈ ·€©J2_èŸm°{i=ví ¯‡ÊÇÃ>ÜÒ†ÿ± ÐsðDYx k…å­?f•¿ÄÍ ³‚â!Ǿߊ@k‡d£WAŸV„‹F d‚É#M;F”…Ä:˜M Uç`B>ñÈ/{˜]…hÖÈf"0™$X’%.ø6UŽôÙ鬨‘ “6'Œ®4˜ú(C»µÍÞæ I¬(bÃîe9½þ=ùâºRêiIúóRMçik¬/õYbøê¯þê§½V¯×ùŽïøŽÏ¸º³1dYìÉ2ÌxÛ3~õl*€ð LR|‘"$û|Ïí4m6BÖ¨’^jæ”Ô¢p(2ëbèK{.gžà)>MŸ¦åE· ˆ=Õ K|tæ€4ˆšÁd„óÂÞ÷žÒoÂÄå¿¡#¡Fy9Æ—è]…h t$H'>ÒhtáO«tS.ÔH]S6=˜2™ñä *jL&¨—ñQ‚¬d¶ªÛkX(ë ß§Áîh¡4éÔ‡¨Ïµ±ö,×䲎.ö’˜ ¼&¤`¸½@1p #‘Í]-½Å•˜Zå…Cž»LU€¸¥ ŸœÀ“=L\'÷|kÀ2[ÍËï6å5Ö¤¨¤°Eœ 4Ê oŒëšyc:í*1M»j•`¦‚¼ããE¹ýù|{¿ËXÇ•Gçá¨áëò> ­ÔxLHRÊGK4Žå«ös¼ ¡pëÓu3_ NPÆÙÙÒÎóž–sÃ0ü\úç`Àü¯k¹_ÂÒœfûñr)ÒkAŸ= ]þ€“}IØ-+˜×T£f;uµ¯ŠŸÝKûFî³ š• ~bw^š[OqÇ HÌöVÅ<OKíæZiåhâú4æ û=||R:%"·Oƒ c†%¢}@5®ÎÑð LiЧ’HRéi²Ì%1> N%m’XdlïãºÏ´Éƒroï’±*6Ù`—t>rìÑ(‘ùv\?ÒVÂ269]Î#„íòøh-©è 15¶ö µËÂÚ&IP}{W7µPÜ*¯©ÜéÃöüÕ&ܶUE©ÀcÅg'äÝÓ-`–2—ö4ã²ËÀõ3šÍ=zYS—dŸö`C Wr›G¤«ùÐGé¿:e²g]‘ÖM-g rG±x`“a¿Éˆ·šà®Ìè?²„jäTnZ•>¿   º©¹&Û bJsqý =ýü—?>7¸Í&pIY˜gå™ßŲ*fÁÝ-ŸoÛÏ÷Ÿ,XZêá¬ZgÏÉ‹ >Éü¼,Ð)"»¿‹ '›g¸É=2ß{[E¸|nÙ< >Wì‰&“¹ù²·…ï% u yŒwêä™C‘{xÇ'䱇n dÅ`|ƒ’‰¨P¹©‹UÉzŒæ) #Hâ »7®0üd Ù6˜¾Àô$ùaŸÏœ¸“«j•ã/ Þˆ<Š9V½Ìj}—ŒÉѺm|àȦ ®1OÚ£=Np–C¨ƦJìG¤-ÁÃnƒ´ÀÈØëª ¢Æ;y¥Š2E4UääÃUpõ©cì<°†î(Š›ˆÀ R¿ÒpÚyŒÛÝñDÆ·5Hpóxóû¸¡ KÚ ¦†Õã›d%FàWHñè.­À±2w„V)T”Ues¡~jH›]B¦¬²Î”€^Ô†ÃöŒ™Ç•Í9U1Ï'žJXbWds`?÷N»»çËÇÔ>ªPs+ÿœàó8§ÈpqnÍqž‘Plx¤‹0cqZî×7rÿ’–¡VvÖ³Ú|ÖÁTû*r±ïóÆeU®÷%r±o$¿PF½oÏÞÜ÷53ðÇlDço2œ‰¦ (2—Ä÷çv§)!+ÀÏ„ £¹É‡Àà—£¼™|è,LË.¸A§ÜUF¥ ¬5§±úÄÙ\ç; |\‘YΫ«íaÿ”—1}¥ƒØt®E=+(fžÉ> u1˜ˆPc8×CßÁµ´6a¹§’@MIµ‡¶ÚœJIaAèMȵƒ)$Ò+pRŠi€)J}ítߪcK@-€•<±Û@ÛK zÓÅìÚ eZPx®=¤ÛqIû;܃ô²Ïž¿Dº‘{ ötAk‡ñ庭 ò¶$¿`÷è3ÍâŠK±áBMƒ=od"BCÒȵGª\DM£'ãi•±® w]DÓ tA·Ó&ÛŽìø>íb™–‰®“‹²olüªî/|V¡3YJ÷³|›e6IL®]…© \“!¥&`JR:ë¹dŒ¨–Æ<š¢T|S¡¡†4°hò—*#öXØ'•Qe„¢`TZ,«š ëé«„N}qV±ïo\òб ´‘e\Èjc ìj´-#Æ)¦äãÀ É Ì®¢ˆ¯1v ÇbILKÚ˜XXc#ájürÚPˆ2T×Ë88öy .¤\L‰ˆÉ„ÇTø~Œ¤…A9²WØ"ÀXáDFåõsÉëºßGQÐÍÇ×djGÌ'A"}$9U1¶1tU[€meìÀN¾nÐ3H­‰KûØ™{R” n‹QÑ6l–Í€W¤øeÃ5kΔ*쵓åÄGî»§ d™K—1VtÊ'a(jpÀØ3{FØIE9°4hS ÍÜW`ÐG ÂÉ0xV7þò¾¸øÅ±Ù¿²„nÆeå½["WÊ»UÔjyáž*ëåŸ}t·¬Æ»e²OËq¾Z,w÷}Ça™,J€1°+¡!49N’Õ§ìU4¦#Æ2‘#¯Bd&TÒ Ê·.K–.q…‡Mº´¨Óç*‡04æ.³Ã•ã°@‡]vXb6G¹P&dmÕÈr—£ÞEÚbª²Ê®iq%?̲³…š c‚R)$¦@²ÅZtæ ½r$x”S ã¹6õŒCÝ}&¥aÅŽ^â6õi|™p«ªt$»Â­î#ô[ VÅ1!gó“bªÞˆKéIâO×ÀõM9º/0çKiÆ÷„pVØNýÈ*´,CñdIy;l¬û#ÀQ_i˜³eqs9É1‚ä\„Y6˜u wdE£7$t$"ÔˆvHxB"Žxǧd}}ÖúË«ZŽs !$ºbµY—ä…Oþ ŸÆWn!„Á$ŽHIM1™ ¾ØaÔià­O¯Ê¥½cœ(Ü믺¿Ü¡__œÐ‚ËŸrH¦I0ÿÞf×59kúb‡F¥Ç¦{˜CKíV®F M“!1MzãTísõôQŒÑc1ñ™*¡;aª}&Ò:f¶Ù›ûs´è0¡ÂÑ¥sx•˜¼î“g$ 'šØäB•¹Õ6n'8G‚G¥ABÀ m‘o…p'ˆ'¯åþÅÜ¿$ºh9lÙ.“µWV‘Y™¬æ¿|ݹVU=-±×ÊÄí_µöÿ‡ûÞ§Ø×1¹0^ É–%}¯N53öBú²NìG DWÚ¶`*B\?e@£ÜÃY"XE©M†ÔXg¬Ô‹a)Û,Ïm8‡Ô¬ø.QÙ=Û%kÉN¾Há*:,à‘0¤N?¯ãˆU|'™ßD}åμ .wõSs©Zd6{´ËN>¡K‹iÑC£èÒbJH!™réÒÄ#c·XbIí` ɦ\ag¼BºäR‘ŸQ·Á0n‘ž ìu÷ ¸ ¬Ì¨œ¶Iƒ>‹ì”Ø•”ÅKÔrËÆYVnRaÄÙ§É¥d±7ÀÝ+`âŠm2LÄ…2þqÉ`êX'¹–BšŠ½_ÄG°¬Õ²i¹TÆÄOÛÏûµÞ÷qï·¿Óqø«Ås·ÿ¡˜ðmü! §Ô¯pª~–ÌU¨®Fn\½ïúî£Á€Ãò27p† !Ïåï­oUžÉÃ(nؼD¸•Ò¯×øÊoû0ø†—È÷óÝâwhžÉCáÒ|šYeÄáê7·ÎA ¾®ñ>ºòlngx§ÿm8¸"ã WY Ãê¿Ãã+Ö óÃîßÃÉïî*ÿY¾‰Ã\Â/÷áKìò-ü)/Ìþ10е,©Õ~÷MßF‹B¼ˆrµtÉ\ñ>ίxHðT†Üwø‹ÿð5b²È¹J›½ùïü7ú?h(ëñBƒ|ÌðOwßÉ_-¿O$H4+ÞsOÒ Ïð6Žî®£Sÿ™ÖàíüôÿÞ#wãZ u®¹ ©òfMö}Ó3Å·™×q±/8ŽË×g p3ÓH†khöy¡îß Ðž ™tH…Kª¬Ì§Q’1AÉ£œ–s=+íªÊѺÅ¥xŒ‰0s¾«šs5’!5"$Y)ú?ó]ŸÔìxÈehÇp,ˆ$+•ëf†vOžcM:´KËQæ]ƒ¢(~Ý¢.˽ýŒ¿G›¼”¦Õ%°eæ”díC}ËS×9C·ÂÀ4ˆ‹ˆN±@!%ã¢Ât‘v|ˆå5þ꺸6VžîÃ@$ÀáεáìU¨´ÓSŽ×ó² ˘û³S㚦@\â^|ÊØß/Xþk§ü]g Ç’?IŸ`és…ý\¹än€ñ ù†}0‘ý^&*ø‘iÜJJ±çC #¯EXï“öË•LªÐ×k}QZñåþy/Û3]{ÄÝ%ÒF@(p Q®ÁDDŸ:è26¼ð*)“Їï¤$ÊŠVÂÚ¤.0.ÝV®9&$sž›”¦šˆ11Qi£šà‘Ì©ªùÌ0E ÛiDÄDÅ7)ˆöÄL5±ÜA3,‹Ù°<#2.¥eÌ^ÛÓÒ/_÷Ê¿ÏX>]{vŠuAòL :ßfRÄ ®ÛpžzŒ¼*Ù$d°_Ç¿-c˜Ô¡ÍS»VóŸaÙäiîÆ§`B<ƒa{4©0fFTÆŽ³ÅLè„=R"n²Ê$ŒiÈ!ñ|Jì'¨¼DV4¢eRVS”_bj’º7à ÞDø?Î1uA¿Ú š$Ô£ñRÊ`¡j-“ã üANkwÀòKë¼íü¿FO$ ~ÏM¦ ¢ù¡ežWýNƒ¬ê³rnZ6¤ß¬Ñ.¨‰÷oájr–,ö ÚvÓ’:Öº§J’ÆëD2¥6¹à½Bo\g0lñÑK?M6 8}ëëtævgEDÂh¾Ž¸]à…gú¯²¶h…üγïEy%£vÌ`µÊ^¨_`[ÏÈŒJmŒê–Ì›üàmŸ£x¹Çót’×Îß Cü¦!>ëþ"¯ÎŸA†š¸´Z÷;Q›uBÖÍ2#S%”©ë‡'Êã©úÝH¡™;»‹¨&*b×ë0¤FÒ‹yfóÍ(¿äö¹ç˜kì ‘<½x'‘Jf-qΰU] Oƒƒ¬Í_ø>´´OìR9=d›Á€ëí]*á„“_³ñéeñÆú`¹ÿ[‘н~I¸îvec¼C@³JÚH S‰Ðí`[ÆVpG¬öØuU]C†¾{­–ûàS¨}úóºK"Òz]£²Œ .Ñ… ÒLðj%õ|Dª"“°´ˆÅ˜¥| Ï/ÙeŽCB6Ȭ± Š&=v˜cD Ÿº3쵌ø«Ü¤Â˜=:ìÑ¡I̺ŸQÁ3ç½×ðLA¦”HL‹íz—µf‰ÂÂóǹN*­ QO´ˆ™ÌDp%Õ`Äq®31»Ñmö9Ïkl³À˜˜ËáiVXcìUIDÈv­Ëy^# •¥1ãzµÍÿô¢"–cRB.z·F!Í…=¶ÃU’Ë–ñ+Εö÷À” q—AÌ—èkÊBëw'bØ6°±÷-ACÚÄY€i÷ÒõÕq¢ÀH”u+S‚|­„èÂOÀ¼µ6”óúŽÄ’Á¬ [É–AÓ4øŒ0‘¤u»Ù݇ڛö@ F;Mʱ‡\-‚(L˜ô«ˆ¶Æ«åÏè NY¾ÁÛ ø6)î~2ãÞúK¼Âr|¶X`D• –ˆI¨ÓŸAß1h1¤FFÀ?íþ§ì,°s°»`Ry¨vH â¬æìò‹4‚«â&›å2Ïr7 l³O›s¼ÎuŽ#)©1"f‚FReDFÀ. 8áÝàgð(¸!Ž‚NÆ|gÇÑP‹6gvQ¢$5!gç/s©s©4Ms@!<.rŽeÖ9u.ÅÛ+¸±°ÈXÄTòãAEOˆ6N¶.ó#?ü¿SàñØú?bmí¬Ïóë–ØÕ®q±}Š„·.ÿ‹f“LÞÄ3H4ŸZû;¼´'j5ådë‘°ÄÁ+œ²#³'mRã.¾Êm6^Xå±?ü à‡ç>Áù¹—ñÉS% £q¼O~Üêkœç4%ãýýËÌDVX¾ý:çW_$$¥»¸Eeqä\-(JæØàïò[ Þ^ç—Þÿsõ³çh]0<ô¦'(ðh6{M«³¾ÀÚ79/r;¯”·ÒfŸy±ÃœØE(ß´Æ'çM÷<;󱟪wnm,ó{ÿÏAÞñæ&§¯[#ž[,û½D¢ÐÔÎZ‚dBDžùüoŸ~Äp.{™‡NÆŽGzPíŒhvzD?:¤Da^áoþÿ6Uèº.ȲnPcƒ©„2èÒÊõ ßz›—g¦’°Xº…# ö)D»j|Ëý>å*E.iûG¦>’è1Î`AVQÈ2 DÉXÄŒ¨È„•ÜKì0ï sŹ|.Ѥ„ôhÑ£IJè´Ü«ìÓ£d‡y2¶èZo_‘çNŒFÍfºˆ/sŒ†¢$ 2°ÊRQñÇt‚=v™#1ž°¸¬ …}½š ÛÚ1óx²àÀ´¸,N‘‘ ìš9rƺÂ$‹¹)WñtI/mS© IEÀ~Ñ&™Äø¦ IbrÏC%ƒ^‡ò¢ƒC5ÖDÆslÓãØjzÝm²¦óÄp¢b7V²KKP*W +;Ù“Û—¸,0Û±r^£ç­^tùœ¨`¥ÄæÑ‹f]Ù÷ó<ˆÔZQš ˆV‰(DÇÔ2T˜â‰ rƒ0`"0Ïš=DT3g|£7â´Ák&”ƒOd” Oæo<{lí¯Â¶q­! hÚq³ûdTÒ`à*ôÄÁ¿0¤F‡=†^± -ÏbKÚtǵúþÔ®7“H®ž:C}î€+µSÌ‹=nšU†¢FËZ¿Ìiê 2¦†Õ|H ¶…f“BØ–×¾³Ú œD´Fͦ`2FTˆ:ÜŒûS IDATF$"¢(„gÍ>„5‚ºÈY{{¼Šáº8NBÄœ¿k[|jH¥3Æós"&L¨àÇÕ3=ô¾`6Âq{Ø&#`“EJaÃÖH ñ H¡¼’œŠ˜ˆØMöLØfE6QŽ-^säÞa½9»:=ÝdeÇÉ‘³¶ß=šD$ç:»ÕyÄÝ%¼“ æ€ÉJ7––8*x!2ÀýóðG%åS}vÌ…ðÙfž]*Œ]2*Qå4Wxf|{ý†qA\g/´dªº›LØ£Mät<æÙA¢ì7á³À9ÜSg‹®ëäY™àÄ!5É2ë¶Ð’m‹ÎC¯Ùä '1[‡)»bŽMà VèÛzèÂð¦&ÄŠ/d¶J©KÞˆóõ³ãÑøü€Ãñ³é»ªé‘OnûÈHKqä„¶bUƒ‰!kIŠÒ§çÙ~¦gÈ2Áw‹F{–h6íëìºAykâѧÁ˜ŠÓ .RŸ9ªUѧA‰b‡yê fým’E6©êû¦m7yÅj±Gšª7&•!‰ˆÐB²Ä#gübFôd“¡©»½LB̘MéÑ A#Äì½N¥g7Y"×5¦Žm‚/|rÐôöÉEÀPÕ8(:h-Iê­>Å0`TÆ­`YÃD¿ªìù_60§1¯K;š–ƒ¸M[¹×Â^yWˆþR>·ó+ð÷Ê/)_ó0›ÎÜ¥#Ð;\sžN—¨CþZt¨x—¶Jp0±€“Àk}S9xÞ­þ\ ‡^3³c>…@4µ5þYÐ 6í¸[|b@ØHìZ·§Q¿Fu±Ïh»B¢j˜‰dî–mü0ûæ&ôo÷Ðÿ‚S"y†»PcHÝ Œd´ØgAïÐ`ÀXÆ4%1c&TøÍÙª,rõìit)Ù>?Oÿþ&©´°ìÚÛVØs$*bgg™Þ+]žŸ»—óg_fíÉÓl¾P"çK.ÉÛ¿T!8•ÀqðÛ9E/@ùÅØ§\W )ê.Í'¯üûȨ¤ÝÝFM,ÇÖ’7 ÌXè»tèWšd"`‹J< ðoâ*'¸…Ü¿Ä3ÜM†O×M±tØ£¯”K/q%lþsz——õíüòÿÁ±Û¯püÔ•™³cƒ>É^¡DQ9ÛGõÌDñ¯žøŒì Zoߢ0>¦.XK ¨9RÚüÒ~âezE“/öá™?¸¿–#– ¢–s6¸Dm~È-' #‰ü ?{ÇËèt•gvîã‰O}/&|í¡mæç7‰H©1Ä'£ÎÀ²TÀ]?ò5–¾oý×á…÷ŸD·PïäïfJœVB{ȃ|ø×5ùkUŠ¢Bv£Æn¾ÌÞé%ÞÓDbðÈisNWÀ ¨Ü6dîCkôó&/oç•?¾6 Ýß" cÓ,2uVXãÍ<ÉÛÔ¢?þÃEøðú×nákÿì!ðaû‡é®nФÇ1n²Á"Ñ·zBÏc‰~f+$í[¤œ¹‚c¯‹Ü~ƒ«¶²ÖÕ¢‘tßâH¥£ŽôpÅ‘ïi²—®ªÓVrÖK5ª(¢œBzVeH"'Íê‹a ÈŽÌ¡§Ö¦ÓÛ¦ºíÊ‘ßìxGòuV…’’¡ë¡K4‘“rÍÈ%J”Ö0E+’IDQQøž#š‘oan% ·sTHa(šÍ¡çîø†7€QµÇ=œÏ´O®|‚H$(U¢•´óèÒ=”(ñý*²ÔG„%rkˆÑ—vs•»•6°6‡d@hàÀ*_ÍÎ{zOAC4ûk°»JYU¸·i«úº»† °%(w•åHŒÜu ÁeGYtƸÛefkÉ““z¶Š ïGèŠAç ³/1™ÁDY)ÑC…Î%é$tœ ƒP‚|ØÏç†qV¡(¾Éû·ú_ø:#åêô $v´lNïÑ4=¸5 úLˆhˆ>ȱA#©0`9§†°Å-§b±Oƒ¤ÃU†l±83~ IS±lSe¸¾boe+é~Ü`$ªtÙÂĂФ®6“"1ô©Óe‹ãòúLò0!â¯p šh¬žõt¾2 £"ÆÔÄq` *´8ÉUŒkÞ*ž)˜7;œ™4cb&ŒkÖô*¦ Rh6'È/˜–@œ‘j̺À$ÎYVª© Øpȉtpü6p'ð]Ü\€ÏÞ€Á ÐåPÎñ#z0¾TÅ<äàõyÝÞÖJ³Ì¡üïIऱ»µ›j&*ºšlA7†è­ :ð4¿o‡¤U¡+rÀL Í¥†ÛMÄq¤d£€Ý‹ËIðm–ûß4àn ÃYûJbE‚Ôš¦îSËFÄ:A9GA#ÎÂPkŒÉTHU AàÄ“<ç°|`íEÌØÏ(ãêЮîዜ¸=Ƭعí¸9&Ÿ ¡®Qõéƒ6ž5aÑ>e,ñ£‚ÐKˆƒ~h]Gy SÚãŠÒ*QŽ}FªNj* ŠûÕ™ äM&^„ð4“´Â@Öé‡ z´ØÍçÉL@ÅÛ¶š)BsÂ[cy°A!=Ñ€*ªbD#î!rƒ7,(ö}JåÓ[Ï鄯Ðêf7TfeRøäu»©/Ú ¯’“OÆ£˜^Ñb¬jtÄuÓ§ð<ˆ u¬O38@ú%ãJŒpêw;ÙêÔôˆ¹r£õÐ:KFᄸ1ÆHëx˜ÄH ÂÇj ø×X)7¥a7ž£'›¤aDíü ̨˜ì2^¯¢c‰¨ íQÏGęըçµD y×C«ò½%Kö£9 i×â‰5™ªÉM¯‡ %24_ cÉd¯BîLŠ*©1òkÈÌ––·Ñh;„ R¯÷x²„\ê˜Ýx޽lŽÓìk³Üåuƒj»À}¢Å¡f{y¤ºî©¼B³ë#ÐùØ%‡ªKþS)Ùi…®ŽTãSÖõÞ‘j½Ú˜Š@¡M!­j[*$>a¡A Râ•Æj* Ai^©‘*-J£Œ•ht2[;‡™€Œ :ì9}îz.=BRæ†{Ô«*Xs–гE—9vì[#|rê ÜNÓŽÎødøŽx²Ì:Æ3Ï"›ôh8{BŸ&”x´Ùc“%VXÃsò{¡HX)×èª-&ÄT1’U2éÓ›´ACPMÈÛ¶zĘ"P˜¶BO@ÉŒByÐrÄ4WY‹†Æø|ƒhŒ a²—oªMäcauh n!ø LÑ: ‚š/ ®Ñ+²¦1l”s ãI¤oð› hÈýÐVÖ9D :ñƒ_ÉH—µ}¾'‰¼ Á|BV„èLQ¶|ôHáû)^wŒDÄõ!†:ž.P~ñÆú·!÷7hLɼþidÆ) ßXíó¡Aô ¢g¬vAà6m}Ëß«i´F,U·ʰç5éËcb¶ér–‹ly]^þíM„6< ¾ÂÞ Ö\$¹?¢-ö¸À+ì¿¥ƒV’†êÍ|š5³BúÖˆ¦èñˆ÷§\¬ŸA`˜“;|zûûÙ)ØŽ–½ÔB´5²RP>Z•¸-‰™žyäÍì{-Òµ*¢U ÚùZŒ¬å\½å$—ü3|aým„qB·½nÝ‹”XMxGý}üäÓÿ¦æd‰4 ¾û>…0šž¼‡‹Ÿ¼³ Øé®P=µÏÃɸÿKσüàCÿ7‹çnÒ3MnÜvŒUöÆsì¦óäã'?û0blh,øåŸ¢^ èÍW¹vË2;Ì3xS«w|–°›â錟æ`~²Ku5åõï:Ë^¥MåXÂÄD Ë:Ÿúwc˜]9+¸qò Ý‹=î>x™LìýTÛŽ7>2B‡Á9ŸyýûÙ¸Ùbã@°{˃6÷™_ÿï¡Rípè~f\õ6r {œ>’¤ ¾~¦|ßUqÓõ ɶŽTä…«Ô£#›g3×ó‚rY0©”]É$ É*I5"ÇŸm¶èRólÓµ-y±çu¬Ú”*Yg -$c7§nÜsBÖY¡Â˜C.qš”ˆ&=R&®^g@ 3ÖX&"%q²”Öï|92ÚìÓ§ÉóÎ eDÛ=§¤Î 1ë¬Ì®ƒ»tH‰(®ûK3 [äEn' ›Zn¨c\ä,{ÉZYéÆXÙØZ%Ó!&W˜º„ L¾XµçøŒ½>ú‹ÑáÜÿ]X1Œ]0iÙì׿5a¯Õílwà7Öàì ÜæÖÇ §ÿ&ðoÉïÖ å®/ÚɆò. Ð}…8¥ îœ]®’^±ïGÌkD£@<Æ×ŒV˜R25!€ –¢oÍgO@ÃÎðýŒ|-´=±+«DËò‹=?Ä ݇/â…ùOèé·úýŠÃÔÞÇ.aÏüÔèÑ?|Ý% C+‡¼/[ h8͈*= ©ÙZ]µAÔÉ=Ÿ‰1P5„(Ù`‘"°²¯ CjÎWöh[‰dB†N:17Íqò­ žO¿a^U° èÀ®é†/Ù÷7:YcR¯QløÐ÷a;¶S!µ€+Ñy¼¥ÒZ±vcÛnKëT*Cª•>YÕP I!IÐóí¨^’D”ë v@ß è¥]Fº…—•Ò…ðŠBÚÖ¡$ŠAa<@¡=‚¹Œ@exD(7Ê—+k;[ࡵ¤”Šá¤Îd£†KdWš Qè™9Ž–’¡¬Y£œ!Åš7sÌ¥D´µlbÅ®œVG"#Šª²mÉî2Ŷ€Ï Á´lQÖ´Æ:xªˆ-ÁŠuù±Å2M ýŠ‚1$Ç«$ELµ£ŒÆ ­GŽÏHÔH½ˆ1/"É?4낾¬=ƒ—–žž‘¡ ßgןCQR¼ê“‹Øi,£oxo,ÿþm[£â“Ì7ؤƒÏ§¾åSsC¡‘é=U}ó޼+ÿHp”‡°:>‡zñúëûð^Oãm@Ø“I…jj„u5°³•eB!= éQ5C2auÙ+Ø1®ªa8&«rRvŠ-ðÉܘš%ÃØ}­ÂI±–ž¤Áàëtˆµ«ì•›R#Æú{nV^¢ ÈPG¸ÇÖwʤ·b8ÆmÿÔgNqSÃk+œh†}í˜ µÈž m¾(j Ae°hƒ°šËÚ({mêî\/»ó[‡&Ó”3Mc! f(,ª6Øu*°bàútV¬Æ³qÌ‹>&àPUnÚŽ)Õs`Vy/:œ€3‘˜Ä·}ý´QèH"eN9 )&¦bÝ=°²µÒ·Ä é•xscÌXB)0R@…P”å´,ýKöÐÇã1ùÈG˜››ã½ï}/ëëëüîïþ.KKK¼ç=ï! Cžxâ žzê)¾ã;¾ƒ‡~ø[•äNÖ’ø©Fˆ#ÈÜ´}‘i³„ N à"TF9K§v‘™!žKè‡u&&¦"Æn³naã}r|b&ÌÉ]Nq…=Ñ™™2M [óì2 ŽOŽF0¤æ\Û$u3¤-öÉ…õH f,(; 1WÀŽÄ4žúûþ‹ÂCT ˆ|‡L[„T@Žm/XÔJüú„(ž ê1&ö&h#g¢ZÁMi—ö9qú:=šlÏ­Ø"É­?1)m,Ü·Uàj~“;xž{l±Àm*ñˆ,y¾{7y;F+ï°j ^pa8¦Vr…SN†%`^n³Àª[rÝ+é­Í!RЂӛ7Èj§Ã«‹nq£y–ò>…ÞWpÂÐ\Ü£Q݇5¹á7)º¸Î²eëŸ<ï8OoÁÍ}x°mc‚îé–[\à§æ—0¦Ên§ oµí9¯žžá k袡Þp/0Ï6ûN·LÅ"k¾S#E _¶Å¦Üj^Æ Ø6ó´äu¼x"Çk'è¸:dÖÿ $³¿\…þúë¯ó[¿õ[T«Uî¹ç¾ÿû¿ŸÏ~ö³<ùä“<ðÀ¼ímo#I>ñ‰OÐëõx÷»ß͉'þ¦6™e)•4%2 U3¢’'VÊ™¡49`mô©2¢I˜ñLãyšx+Œœµ@B‡½;3$up¹M¤253"ÐôqS3I9#àM u¬/ñT˜&f2¯ˆH˜cwvŒé{©3 Î`÷{”xh-ܬۄš¶,–Ä‹bË'˜Ðð{x~Ð]Ø’3GÚ‹Æö²ëXæúÔm­î’ðÔÎvz=[«°Ú‚×Ö`ÃŽ'ö@8u,®¹kwÊõ×a_«´×Ð\•Vj3Ð6M×VnJ£' SZ³rƒé+Dáܯ“"=KD[-o_樨€šÁ[L­Ì­VvƒðWÜÿMß.¡§iÊË/¿ÌûÞ÷>~ìÇ~ ¥?÷s?Çýб¿¿Ï'?ùI®^½ÊÇ?þq~ôG”Çœo]Ø}llzº^&G6èÓj=vk¢â{ÕÞó&µsF eI—ÆX›Lå6­S÷µéæ¶Êxv?+JÆTñÈ.\ÀóìÓf—¹™àÔs Dm&õܧšOQA{ŽÀê.ðqP‹¹Á]Qs¨Õĵ·Öù‹!k7O FŽcvÚô.wémÏ“¤1f:Š;u)J!gŽp:”6Æ¥À ЗÀw~çwrùòe>ñ‰Oðè£ò±}Œ«W¯òÛ¿ýÛh­yøá‡ùð‡?Lžçú«¼R—lkß }÷÷ôL}'Gtv:Ÿ2Þ‡G÷tüÏé9h—¼ÍaOݸ¯ (@ *°ÁÜE™{(¥-‹3W¨ œY’†&Åétnô,¹7§:eœ{”3•9;™nܦîl¸`¢}›ˆ§r’™ó†šP¡ÂÄéÐYx¾Êh&"3õÿ˜XýrGü Ig½DÓaÏ±Û °ÖAŸ{t¨0B`\½‡'sjŒ¬`b‘Ø#{u”.¢„¼Ø?g ˜ÜzŒSÓW6)]òsD7“K{»G®I!,)®V…¼xî]…%V[½á®¯´ ¤Ñ.1wH‹öÆŽÇå@Õ "ÙUˆ†¶UÓêˆJx€ CQ3”‰‚]¸1D,”&CHƒ\Ê1‰æÆC45ªZP˜’Á i«£¿nÝ”°õ$#Ø»èÐ {®>üáÓívyôÑG©V«œ?ž<ÏùØÇ>†çy<òÈ#œ8q‚x€çž{ŽïùžïùÖËæäÈÚ!Ú"'G6ðÑ7À•=¨E~¿´fà JåÉ ÚÉ'{á’”$D„þaÄ”ºl1¦BšY)Ûc7Õ 7 Þ3MVÄ‹lrµr! ¥’&¢T ÑÖ˜¡D‡Ö6Øì L¨­¯÷Tâd‰i(Kê}Aº­…ŽËalRÉO lNðÏŒiczºC±X'8þ ýÏÅèZh3Š"^}õU~þçžw½ë]EÁý÷ßϱcÇxðÁyî¹çøò—¿Ì/üÂ/°°°@žçìïïÓív¿¹ ]ÇP.L$PÖ ˆ°‹#ãJ+GøÞæzæ6uÇxö° p{þ´ç¦ÜbÎŽ S]„±}œé‚Y$Ë 9$ (¥bÄì «•¾Pî0RU6ª5ö˜só‹’M±ˆ@Ïäa{4Ù`щ$6X¢Gƒ”yvØf°‚Æ œæz•^^°Å‚íá¸mªR´Á"Êë4é±E—=:3;Ç)„.œ{R“Û̳Ë<óìà‘óç‘hºl"Ñl°4óƒ6®sb&YÛaÌ„lŠEúEƒÀËÈñYa Ì¸1:AÚ¯@dQ†Þ í"G,%¤/W-\å9.Ä‹®‚Š þÝò×*‡Ú'@HÙ“öºÝSKþìœ=Áí iÅ6xÒîê‰ Á± ÅNˆÉAoúȳ9úsS!N”ø«ê•>ýƒqoã3(­1™¢óÊ€q£Ÿñ LtÌ»>I¶ð&žâ¡þ„D†Ü]>Ë[Ä—Ú`rI%MÉ_Èþ,ÂŒ¿ñö÷ò¡¹ÿ†¶êñ÷Ûÿ+õ GŽà'ù b3á\ýu‚í¤Àܰç¥ß©ð›o~”WŠ[ k ‹lЧÁ;ù#"&¼?ù ê»{žJ[ \ë×xäwVæ¹ÿÁ/ò&žÅsdD‚Ácµø/-©ò+ùËLÀOl|ŒQZeµ¸Æ;ßñ±ÈË“M‚ÐS?ûÕ_ÆLÛºZÀeøèÞÄ/D"¨¦|üC4’¦èñ÷ø%ÿÉ•A¸–Ú6Ÿ L_¾óßûëCî¦í\~ €û￟_ûµ_#Ïs}ôQÞ÷¾÷}]\(Ë­5RJ„!09û_ŸåÞUweòÔQ-âpvxÊl÷°Ók‡»#Ë–9ÁO½Ïýoè›{îñþÒÑøDïƒ,A'àM4e¡È…O*„†@ØyLLn|"RÌÌSl¯(°ã)v*Ü›UÖ‡&,´gpxßr¬Bœyi³Ï ¬“˜!¬ÊSa<2íË„@Ø„ja>«@5=æ”Õ~€±è²ÅsìÑ¡Gk¶c·³¼ö‚®³ìÌX7J<Ê/à&«ô„%!!7òƺ\fXÔQ~ŽÉÀäbGÁ;-@$ÉÒØ×CUªrëaÎXPø‘ÝõöÝ5­cÕe× ó8‚æ|ñÇ(|І5TAº@žÒ…*¼âXñ ÐW|[ñ`®*òzÌžŒ`Wr0êrc9EÇ‚¤_E¯û˜BCÅC$½ç1¤A(²õr;·¾Sé2¹Ù°7C)®ÖHËð›Ð§}f ;Ë2†Ã!žç1Y]]eŸíímžzê).\¸ÀÝwßÍã?λÞõ.ž~úiÞóž÷|K&tôã7X%!â«ò>²a…ñ¤q¨Y¹µ °J Î,ñ66ôƒûîÞRcÛAæxEAÇYsÖ°lÖYMÖi”û)hfCúA…DÄÄiJ*Bºz›¡‰ Ë0L¼ˆå÷! IDATšã§šû´ÆcÂý®õC#•C *.þì¸xÖp|þ‘8¦Žpúîÿ».~õÝÚ¹ —€×Zg)PN# Dp'Ï£LI­Hiã¯[ƒ9>Ÿ†2Ÿ¡AŸ€Œ»Ëg‰óyÔvq×·Wiòdðfe©2îT_%%b1ßæ¤¾B!QZö Ûs ÿ©õ3üYý;èŠ-Þü+”Ìiš§¹D5O¨' ñ^jcyfÏÍ3żR;Ã5ŽÍÜí2Îñ:UF¬dÛtÇ{‡±>Ùz+Ÿßzn .<Ïd,°måŒäÎüµÃÖÁFa•§6îe»¿À½gB~Œ>ö8‘_§#÷(¥d®?šÅ§)!óö>Äç[S‘#îå‹”(ÙäV^F`85Þ ÚIm Ú·9è+üð7almºÓ›þÃápÆ»QJqÛm·ñÑ~”ƒƒž{î9~ú§š+W®ð¥/}‰Ûo¿!­Vëor÷Ü{šph¦2e¯ëà 5ëŸßПÂn©{Ì´2ŸyŠûÙ?½§GH3¹;îMÛ†pÏ`´&œ·27´ã>ž¶D’f0D”šJlw‡q9¡Ã>¥´ðS¨R|]P•Cz´S¡Ã¾Szn 0´8@¢©3p¬ÞŒÌæ“C¬9-®Pä*¹ð¨:¾ƒ¼§F.‘ëûÕ¸m¨!Ü®´Å>Mú´è±OÛA„5†³þRBD—-"h‘0ÇŽëø×¨0" gž–07R‚°•²"5¯•Höjˆ…Ýòž¡L<„0p§AŒùŽoÇÓÎ9F{hZcÎ9qŽ w-çsÚδ¥œŽ ²Û7I{MÄJ ©‡\уÞRö¹ñtÂÁAƒ§r¹DúeßÃH‰ì”ÈN†ŒJjµ!ÚlwbLJäÌŸÞbÐh¡T‰æøç'˜L²pâ&ºTŒí¼s™x˜‘r Hßü±µÝÝ]~ó7“4M¹ï¾û¸÷Þ{ùà?ÈG>òZ­ïÿû©V«Üwß}üʯü ï|ç;YZZú–í¡dÌ92Ú¢·IÇŒ”.ñTލX£$º%ðD4NtÄ„ÎÑPδ!†ÔèSçJq ‘Á k±uéã°V>7‹–$§úºN^úÔ‹>[ªË(©à‹]HÒ< ¢Æ,Å;¬3OÇtJ”)UCPÍÐZâU LlÍ}üZNILM)zÞ’åt!1Lê** üŒ¨“0é¸Ñ.@#ð†—âw j ˜j@* FºÊ‹ã;@Â||ÀÂÒEÇ#(SüNN¡ÎòÂMäfU¸²{š¨H©EcÂ"§ÔŠvu€É!^˜ 3M?nÐYÚ!Râ…1¥#ç^2§š*’üü8§²4:Í]›7é˜}J¡Hˆ(S…I¬¦Ç|kŸx”bBð½ÙԤ̀Z02UÖX&ÏB^ˆÄ„‰¼Nºc”Äór‚~¥Æ±·1—·H·&\¼|•ìóD&Á—D ÊP96†>dA@w²‰¬Dõ„k£“ìçs$²B-R*ɹÅëh-¬5³0È@S×=N´®ø)cSA Ín:ÇKÉí a7©.Œñ­ =J%A|“•â\{åùçŸçÓŸþ4eYò³?û³ÜrË-<ðÀ<öØc<øàƒ\¸p¥¥%üq¾öµ¯ñ|€0üó…ˆ0QÝþ—üzæ™gØzæ^¾ï6{#ÎÌY¦³äÓ~ÂVlV¡î‡ÙâÕ¦«èêîߥÛ+·«õ݆aª$§4?ÝW$Ûü6±è芺B•šrÎѼ}MrÜgÆTÒ™—˜H0¶s4“›Ñ";Ñ»^‡z1dìÅŒd•‰ˆXÈviê>;A›+ò”«ÌèÓ`“EÞœ~׳&a(ñ¸Â)h±ÌúÌâT`8ÎuþòßG\4x÷d˜ž‚Ððwø cQ¥@Q5#Þl¾Ê q•!uþ»ðçB“\©±ùô1Âò;¯Ò¨° vxwùû¤"¢xüþáÏü£¿ÔšÿÏÿëÇxìµÿï8ð£ÇøÄÿòÍ‹}¥¸]c{âSæúèq-=R¥ÇGª—üpÔÌö4Žôܧzùôi%:2ö6µN-Ýc"àœ«îš–£¤ç$ã–( F â$'­+†^•v@¿3r#ÑFÚ¹JScM.3hX›Ô\xÖ7]YºÍ]+ÝHL“}ѦÀŸÍƒk$]¶8³}…ßZù –äÆŒ`7µ3´â4̘ísi“®‡_:&¼A2›²ËØq=}2¢:ƒÔ-#× Û> ã&ÇðÉè;¡J?-y9¼‰v¦ÖÙh£\¤§Z\õNÒ :vM ‰¡Äg’VÙ¾ÚEä½£¬Ÿð>DªQ‚Á #Kxã¸&‘zÍÇLY±Ê ':óáœfþÎ!k¿ïQT–À,[c°d`"á«W`F>£°†P%ÂQ~†ä¬ Ž â¸%D1/x©¼ V ÃPVˆâ„›Þ ÔJzIƒñ(f°Ýä–s/Q­ÞØ¢Ïø¶}ê†Ü›,²GǶ©D ¥J„2¶õ¤%!†\ÚV—@;XðMfe”ÝtˆÄÎ ÷Êý¤AQ8‚Õ–]sý&½¥6ýQú ›̶ÂôES1J#D" ›;Îh`ìÇÔ[ìs¤E…"”Ô}‹žÕéϰìS>=gâ²Ë"ÆTíœ5>XnÎM&D3)XÛ¤1$D M•J=e@}Öv›Nàô' H`°Ô ß­±G›ºs3›¸òÎ(˜ÄFqÍö–¥Æ¤o’1ôª$:bßkÑpEDB„@S:2 À0J«ôu ß³ìå‘_£e*ä±Ç˜xæ. KÎÍñÉÊ€ÞAö¡o4¢J-Z0 Î>-Ô)¥GZÄ$IŒÞò¬®ÀÉ:QÓq}앵O{/'µ“ŒR^̡۲÷•§ÙڀဆÓùˆfç­*FeÕŽöe%8g¾QT™¹iÊÙ¼³å ‡ùäL ¯7 ƒ¸láG)'õ{@“:ßdûÔÛ„eLË‘XB—x#÷÷´ÇaÜQ¦ãgÓÇÅ.ùK÷·<òüüt?5˜Î·«# }:ʤ<Þͬ‹ dªñS4þ_öÞ<ÈÖ³¾óû<Ï»¿gëszï¾}uu¯tµ´ û"lãm»â! S)ìLRTÅ¡œÁNa—1`Êå3ØãàTŠÇÁc\ž£ñe ÙÆHHHH @÷j»[ßÞOŸõ=ïú<ùãyÎé–ÇUæÚ 埪®ÞÎú¾ïóü¶ï" M!H*’¹ ¡5ž.pdE”gh)Z–8Neª@Zþ83 j=[lmÜ„ììÚ¥¢°¨xe¹ÎS9—Ò&!5+cö~w†äôÉg8ÝØÒßr<„EÝO/FÏZ²”3t}ŽK…²("bB,2A&è­™x¡ûÖÐHKUÑ”Ž‹‚ C P¨ÂÜ¥¥\Ø&ø Àw¨ïè|H3wש6¨ØÈ´áuÚFU®”(ÙBw=Ô;pÓªé®ìX ÎtHˆ5ÅD£R+*”o,xËýáø A…@1 NP›  —¦;À•%ûÅž›ÑW áT`È¤Š©û†e*\ç#pÅ?Ù§^óMãÏ(›-ú`=:t©ësôf&E5ù¨ë1Eé#\M[¢¬°M…$#Ä£`Ó?I²à¡&.\6Œ¿*ðÆÆ3]®Fž*(/ûˆRá´4e$‘2*)F raSprE•;xaÁž^ÀÕŠyߺ5Ôu¢cQÍxìó PÐÁ±IÇ!mûwKe8ÑhÚô0:–#]§•éÐia4Òvk™€¹«—ª&Ú1DzΈ%vP88Q7jž—Rf>N¿bЛcœÔÙ^XÅ <ðÜvÛmÿi5⣢MùôÍ*Û:÷e+ƒc¸€©§´¿{t¤ÇÀXö “ÙûNçïÓŸ{–ºÙ$Û ª%ä®sg>ÃFLßmà©å …Éú4¦…c˜v¾õg6ªR)!9Pg4Ý ¨.°¦,¦¢p §±*IˆÙgìbN íÇ5€·Evéе³nó<Ƃ՛‰Î˜¬«2nNÖeI ¹ÊYŒdŒfªv‰æ 'Èñ™qϹ"b®pbV¸UÁ¥Ñõn-Q.Þ\FrÐÂqJTîàŸLÈ7cÔÓîÑ<|×Ò=ñÒä±&úÐRÌš)ôÔE¯iƒôcõ.JÂFBÿûÖà>¹ ·¯#æ4þKÊ-9WQN|üfF>У7Np£‚@fd M´:àŒó,ѤŸÏ¡ûZ{øQÆaÚ!-êrÌRm‡ýd‘´ˆi=êrÈÐoR$!îò„†þýhkßeZîY–qß}÷1™LhµZÜsÏ=¤iÊç>÷9Ö××yéK_Š‚çž{Ž'Ÿ|’»ï¾ûx…ä7áRÍt\+‡©”€Ç©ðɈ,ås,bðŽÌZ$Š¡õIpEÉjg“n0Ï0j‘oÖÍl;È;Ú;ÕØ3ûÉ&äõ€l?¤Š\(¡òù~dƒ˜­õ5òíûíê I q¬Ö…°0ÇÇO ª®O•z¤N¹œ³Â.%¥ÕÍŸVÏ-z¸Ôc¸*`[É*…í ‰˜ÌºƒÔe-ØÄñ4—.ݤƒˆMÒ8¹ÙþAÝšÔøµÜpüÛ‹pß>P„ ö+c{=vk3}}ÍFøTŸÔ¯Ãªg<È`@  Ï.%)jŒ™W]\Y²Â%»ÉNÄÓ㪺¶úŸZ«¹®É£çÒŠ9‡¤0‰ƵÂu(=É$ôÊ:•kå#§Æ®³Èç;ÎCš2G…‘,œVÐ%.)ÑÌZµË¼]¼F­m—e[aäFˆbæµÜ¶¶…) F3…DXg7m†qqS³`<Ív¯p‚„˜æÙa‰ ÆÔØf…]–Øa™ž5ŽhvXæ ë i˜÷ê· ·Tû\Ñ'¸À)ÆÔèåó¤" r%î\Šï¦”çЧ#´H­`Ô£.œˆÕÊiº'McM´oŽá°‡ÚP‘.Øs´¤Í¹ÌAÖÞZfÎ׋b¨wàs›è-¨š=çPf¢® Ú“Tý€ô N±’të¨Òa´Õ&)k¤{5’qÝX÷"ñ✫WN²·¹Î8m°W-1î7ÈsŸýÑW³ì_\açëë¤Z‹Qø{âþa™ï¤Ûh4â·û·9}ú4H)y÷»ß‚ßýÝß塇bgg‡_ú¥_¢V«ñ®w½ëoPð4…íuéY²\Zvˆ-…ö¨´CF@®}RÑ™ôié>¾Å›G”–b‚ºë”ÆL#Õ@Qx¨ºÕ;˜ Ô˜=FÚˆÌ8ÒG2Õ™`¨ȸBzea°,‘LM¢¾ÖËáè’Lh-(qq1 É´¡+ѳϣf€!S‰NÛߥp‘‘šZô‰ItföÉ øUN]ðÔÔ›]ÎŽDáÅ9n-·¢\Â|yÖ&x­Œš;ÆÑ•Q«CÏ(´M„LB1‘b…p4B›1ž™^ËYÇ2fb3ãÂtT}pe‰§s„6œnÓI,ˆIf]ʆá;™91øNŽ£+*í µ@kZShLû¨ÌHA“ àhôv¥eéPig–läø†Ò(ü CÖ* *Œ…VäÚCii<<ìë ¡Œó¦UÓtd53 S¹C•¹¸”3ñ¢k¦v|“Â2ß² Ýu]|ðAΜ9ÃM7ÝÄç?ÿyÞóž÷°²²ÂüÈpåʤ”üÐýÜ{ï½Ü}÷ÝGïy ôçu [™å©>M[êÊnxãcº<Ö:ÇÎÁëÇÀoÓ¹e| ñ^KÄQe$&àô€P!eNk*GàhE81B#¾.³”ÈÉp( ªŒØI@€Ò’±ˆqmk°ÀŸµÔKâYK{ªüÖcŽCÚ”¸³$akab&ýªm{]!ñ-ôq@s–1Nì¦Ú7—Ki%+õLÉ*%À§˜àJ\ú´f¶s ©sÀ%{å‰Ótlç+¨ÊÁZ º^‡Ñ ‰ð²R¨O+D®Ñ®;äC×ÌË[¦mϾUÂꛂD5aWÎú¨ ãʶŒ[\7› ”{‡Wæ­¢–„ÓóðÅMÊùuðô@ÏÏvöŒ5•ò ¨UáàÓöè:dEL5ðI=—É^„h¤ ý²ÃdQn†ÒÐ!÷Còç#sݤ‚gOÞÄ|ùW×п gèyžsÿý÷s×]w±°°@–eüàþ ËËË|úÓŸææ›oæMozozÓ›xðÁyâ‰'¸ãŽ;ÌF£KÞº÷ûF­4›©T 'WxI?ÈqFÊ5&Â×ȱ¢ªI· ©\ôŒ¸SÝšMÙ±HØ–éúFÿ¢‰Îá•ñC¤"¢õûd¯iµú¬9›d"€:x²@k˜TŽPô³J9ønƉÚeVüM†A7Îé_d4’|y­†zÆáéùœ¢rá²àks·Su]”#¹ð²³ ƒ:“ýºføéÉ7ê\iŸæ7¿ˆÍæ:_¼“ ʉâ#ՠɀ…¹þÝâ»øvÿ/”#¨·z8ºâd|‰åï»)dÏ|ã·^fæÀK¸§JÄ“¯" Íg%YŽØj­±“¬P–.éå“ç›[>_~þŸá B7å×nýYjîˆ^ÔäÂÒ |r^túqâ“”’<Ó½\\Ͻ_y+Eîó_]÷ûÜ¥¥p¶;‹dÒãë×]¢öÏ»PÁÖ³ì}q • ¼S%nTòßÞð1~LþGŠÜç/Ú¯å9÷z–—v¨Þ预dôd¯|è.ªØA¼Ø`#îðåæüy´¼xå«|ù'nCêŠîdžl ¿>¤ÿ?6©ô÷½ý‡ Û"•òße¿ÃœêQkå|áìCìÖ—¨Ö\F74ÈTÀC¿õzªÂ¡;8'îJÉ;‹q*ßb,ûÜô½çŒÏÆí–O^¬0Úo“»5~ûU?Îp·Í»ôïÿãž¡ÿüÏÿ<¾ïó‰O|‚ßû½ß#Ë2Â0|A«Íó<„Ôëõ_nzûÂ9å°Z‡»NÚx|¬%>¥­íÙïSŽz÷XåØÿïpd¯:¥©Y@Üc-ý)?½w,9Rœë£5²¥qWáH¡pEÑrÒ‚úvkŒüa™³Qm’¹>#U'õBæÙgD‚«¬1Ïs‚ kl m™ŸÉ°x¦*V1\& cM\*¶X¥ÇœmU¸>-V1ŠTcjÌ1Â¥D¢aÌÎržsŒ©á“q+ß`‡å•gм5 œ˜—ñ8MœsÏ2 ÅŠÞfÍ»Šïçœä É%NÒ^ØgÑÛåb|û—WÍ\êÖ :3A:ߌ'Þ+2ò§#ôž0L†º=ûÒ(½Ý¨aËfÔs¦“™‰qesÖrÊZcAþLˆ^Õ° þ›RÊWy¨?œ‡?¾ w¯Ad„fô¾ƒ\,aC£¶\s}¤m«®áN ½µÆ€ÁÁ<•ïÀ¶`åµÏSh—Þþé(‚Hàµ&xQF¾"–^´OñéGéÿÇ>ÙåÃk[5åß´¿gè­V‹|ä#H)yÿûß?S½£r•¦)£ÑˆNÇPMÃáØP•š/ú Bkî¸6ÖŒœ«°2¿ìs¤€&lEm×w¥§éÁ(;†*mÂk,ˆC‘¸jiˆÂ¡Ã>ûÝeDGáu2wB&ÆûŸ:cbmg©J¤(A)b'Á÷Rœ,&+BtÏAw%cÝ„ginæÚì ]Go ¨iúy‹ƒtÑ(. „i—“€I#â²Û¥Û]Äi”y“$iÐæPMMàä\Ÿ_ú:&žqkk*åPžs?߀ŠA`|2Ÿ¶ÀZ'ÔçF„Ñ„81É#òQ@1 ѹdÎÁ´DŸ•»4Â!ŽS±Í>9õhH“…öpÇ9Ò)I’É~ 2A{~Ȇ¼ÊDì©6®”8~‰n›ÑÉ—"&“Ø{À‚Fö᤿IUºÔZF1³æim’ã‘\l0´Ì¯föþ¬ÑLF !ZO« _dDjl=ï;”© rxu&šZ‘Ðr‡,8]Ú^º1rë¤õY3ðÉþ…ö‘ßDÓÄ&W)âmûÖö4 £²³ F6‰Gº©ØÅ¡šIÌÖ’Y(œ²mI5ü´è“ÏÚlÓ9“²­uÓÆ7zîÓ}ºd4RâÑÔCb™Ìæ`S™ÀIñDÎP¥.Rš6”vÍÜ[Jjs^ýcçJØÅ8’þ8Òw· ~bÕÊ`N[žV´º0Þ׬F0™ƒ/m Ü¢0‹¼xÂ<ïTmpXWhòQ#ól¢ !Ÿ´²¢ÖÓí† 4q}Œë–Œ'u ü¾ï¥±±ƒß}êï×rÿ.š¡»®ËÆ†qY^^& CvvvØÜÜdmmÓ§Oóè£Ælâ¸HŽëÂÞ#ðm,T\É»ö%ðÓÑÛ¡9–ÎóÐ\NXYÜChMèçôÜ>cQ#$%!Æ£¤Æ˜! k±¶Ëïi†y“šk<|Û6m0 G›yq`Æ]€Æík=¢ e"CvCbÞ¥UÍA†ªë@e»4Ÿ#½â^—£´¤ºâ@dƒzì9LÖcÔ¾Ñ[ÈC=” —½+«Ö:ÆEB#›PéœÍ-ÎΟ'Ñ1[­ óóGEPÏ_.§;œåÄÚÌÙç€Ûk¦µþ§Wáõëf£÷lµ>,(èIh³X‚tH·#8/¨jσëå(@&ÎšŠ¤|ÆGÝ, OŽqe7©`Øk£Õ5¢Ü§²žßE-÷³gÏòáø{ÛÛÞÆÛÞö¶üíoÛOf·ôØ:®ŽalŽ˜mG£ºãîcpí¥t+V ²„B¢+ ®0ûÞ¼Y?Ó¢IfR •-&**Ç¡Ô.Uσ<=JœÐˆ@áÈ#÷Ga»ŽMYyèÄ®[q4BÕFºF—Þ ö]*_¢ Çô9 ÆÌHÐ%(%­•qär¨(SC!“N…ˆ*¨W¶©4«SU„¤ÇØ>%a™WF@žn£6{0Ïâ€(õŒ&ì“Íl­µ#Í{ªŽÅˆ)ÕVL/>1sΔ(œf‰¤¤J½™±;\û^ñí èÿÐ'Б=8»vÎs$õê`æ­Žm“–6/ÚŒ|°›v†~p 磷-päÂvœ·¾e¿7˜!'‘öI(kI;$Hr¨$¹ôèµM´÷Ê’DÄLãn&…Y ‡´­€ÀˆuöY`—%êŒÈì|ú€yÙ£Í!šl³2»ÆÔÐ`Ë]5 R8ø¶ÞUªÉ‚³­%û´էÎh[¬Rc„ÂARŒEEöŒ‡0u\JÖÙ¤ÄcŸ.¨ëiˆ#Ñ`/[$ËBnkê¿1Ñ,盜ÑOÓ¥Å:›Ìs@…ÃmÕ“4ó[Õ*›Íë¡„Ç:/ãÉÎ-xnÁËå—ðE†/r^Íçñ(Y<è#«eǰ[úpãÊ9;qÛù »qIň:ëlœCÑçµ£‡`¢Ñûpë÷s>¼÷ÓFªÌÙà®EÉ;T¬¹;œ‰¯˜¸Ñ–Alíòÿ<ù#ÈV'*ˆé²È'ô‘‘逯aiÎCí¨Ëö¥Þ|uòdY±Î³3éí³œG YR0LÆ5ª}Àq¿ÅÒ¯êY@WÂ8®Ée³™jË-s&3#6ªmbÍVòžiÁŠøX^Ú ®m`ÈŽèä1ú›w,£)µÙ§¯mî#V * šd±C^Šž0”15t Øe -ŒpJ„¤"ÃTÖ)»,ÑcŽ>†GšãÓ£…ƒbL.vX¦o·kMQ'Dû,ÒgŽ€ÌèN—MFYƒ²f{@J¬'LDhµÝ51uK-1IÂ<ûl³Â6¬ãÉ$bÚrXµ‰:ÚäÊgRD\¨®{ƒeÚñ™ÏpãGYBù zmvô£«s”¥‡kÒ´Žhhtî bE–DÐsÌFTgf˜‚c OëªÌƒî;A‡Âзô]ó¸yð›e…§)’*VÂè»'=œ,m‚\7I]ëýHBä™–iâyGàJ ÛŒÑC ¹Ålƒ c³  +5…V¶òÒ–»þ§€~M‰¿#yêugx€×0¦ÆŸª7³ÿÜ Ã§;&kÙëghû¶¹¾ünÎOv>Â`)âÉàÖÙŒ|Ei3¶PŸ|F÷òÉY¬ö¹%9O‡=㢥ûôD‹ 1óÙ!“ d]mÒ ZD:%!êÆNÊ óçX˜ô¨_Ê̘'³„k¯¿©V×4Mûÿë9RÈ MÀa‚‘©ÞNräc!mPºð¢{øÝÿú_YÎöň¯ä!cÒ”²”vÍõ_™÷ð—7ðƳ}xgða^Å_ã“s_BjEX”,^ê£Jß0ï·/Zl\™áå¯sþ‚‹?A9¾GÝφ¸ŒTšF6&NrôÄxØãÁ¿¼ýw¸õÚÕ!ÿsô+ÌÉ1 wð1 ?¶ûGÔ/'GY_»î,¼ú|‰;ñÉ8Ãs$D¼˜'i0âÌÁENmmuirx°ÿJ^uðÀ¿,>Á¹ŸÂ8C’T%¯©9µº0>Yãú?û"{ϯóâöEþ ÿ+mö¹¹<‡ïš¶ÐOìþž¥ô1Ó8ysõ§üYø}DÞ„ÿ†â ¸§y9ãPrûÁ þ|b¨«fùw'å[Ðÿ±UèNè Ê8¥6=«ö5± ¨ ¨¦0Ô¶dW£§:÷©]Ó2±Ùùñ6ÏÐ~o¼MyéS \¬p$ ë ܉¢©FõÐx÷ª‚v:À‰ŒbS Œ•GÎUÖÑHëQžSc<ó=ßf…Ä£dÁ"àbJ6¸dèÆeŽ 9`•-S1è‚%o—†clR(êzÄ‚ØçŠ>Á 2ªS§ËXÕB‘©€XŽ©3f—%òÂ'tSŒLd¿j¹æÜÕÄQ%Í OÝ1)j¨ÊA§A=§žáÊ*—q^£ÈN5žc?]¢Ÿ·qW2ÂÈ ’GçÛ bE¬ŽÉöjè‰@4îÍÅ£¡i{…à¿8!?ˆÍ¹nxY…/3²ƒÈ3Æ‹\ï8Pyº vò¸!Ø­kнØÈn–w-£{èç:ÿ¢÷^…[VáµÀ¢‚±ùA®¢¼Ø:êõu×¼v­Ä¹± x>2×ÈnLÉ·CTjÀ;ÁÍD\]{@Wß¾Eúrs,*}BHY¹„^FB‰hƒ¨)ëÕ Žqëà:%UîAeDJ% ¥¥áT#(ñÊÐM+áʉˆ»1¥ãé€R¸x"§O‹œ€ÐÉ(¤ÇHšZ. -5%ÀuKüÐ$ìMgDV3³)h³‡y&Xkm0oSLpMðÓ ‡JHD¨±FÔ´¡å)À×à€È€@£gFM•ZáˆÊ’DLÛÅN´L–û:£åõñDA+ì3‰ Š^Æíæ.i“V6P—=t‘AE¾¡÷³Ø‰¹fuhŽw±g4_ÌfžÚ¶ã)A%®‘bt5오.O"´«¡¸œr¢$Å×#„cî7ÃXœ­PÜã[°² »Ž©va\«SvØ–¦Òñ±*Côh³Î^»øwBÞé ±aœÿNäWB# …”Š‘®ÓÎqeIîúœ?GÒˆ«59F ÁW¼ÛØ(/s]v¥Q—Ç·1Ñ!Ýq™Ðõi_óRž`Lßÿz¦;¾Ì6>í3=Wö©\‡›_üõrÄ–7ÏïþJI¾òù—qßÃ?€ˆ4¯ú/þí@å¹ÔÏÌÍ-ëO±¤v(Ÿpÿ€¢ðHÆ5>ôÀ{(GÜõz:K{t8ÀsKòºOtKÊ­ëß4K~Àû4™ò±Ãwn×qæ jstæðC·þµ³ 59BU‚–aø¬W›Üû—oåO¿òÏqdÅÜ;öÐî8ý(·¬ž# +l£µà°ló³oü¢Ò|Iü3þ÷Gße\;Cü¹„õú¸ã5xÜtÓ9¢2¥Bò¯~èÿ†¶¾áð¿¼ãÂ]®sÓ¿~’øÆ¹ðxÍ›¤!†$ޱ8žÏ»¼þž?ãNñy²2äßî'ÐMhÌ÷ظþBi^râkÌ-ö©WCîzÑ# Eý‡×Œû»@qÿØZî:¶A8±Ï6µ„žâØë>Gºî5ûA§·:GB1S£ïØ}Žƒâô14ýÔÆfÃ/Òx C(<'Ue‰Ì4YÝE–™jüzF.´P("2+F’2±zî9>¹¿nø»øäV60†-¶‚ÈñIߢÒÍ›6`†¾œªeÍÑ£b„ḇD6à»””841 .%=5G!= )qS'×>u1"Ç£Â%S> 1Âr5$ãëÜ€`´6U½[1粕ÇèKU9¦bÍ¥—zˆP¡Gô@áç 3ûªÄì|é=AµìyÝì¤Q¡]T_«2sÐ… ®2׎zNµÏ/[€ÍËëfóøU8³9¤iˆÎt´A®¦¶ºp aº'Ì{‚‘ž“GÀ+@ \Tq ¸ê›[ˆyžóÈ#°³³Ãí·ßΩS§ø«¿ú+¶¶¶p]—ïùžï¡Õjqážxâ î¼óN¦4ÒïÄ›DÑdHHF,FQ'ªh0 ¡FÌÓ%•ÆÀÈx”‡¹›s$˜qT¯Öb?Y¡ô$UéA×5žÆó„b¡³K%=¾¼{'NPÒ‰÷I£€'‹SgÌ‚·K@FFH‹¾™Çë9vÄ2Kõ=¾Î­dÒ‡š˜)9&„”8„v—>¤ÍWgkÙ­ réÑMêŒ)ðx‚—0´ƒtY(žöN“ã1 nFôIË//éÐ%&ጩqÀ<¸—Š¥ú.õËLÑhæ9 %à6G#x,¿‹snî&”Žƒ0W·ä뺢O—ëy–—‹Ùu<×?C5ð«€]–ØÁ‰ˆ‰ ºa4âšô‰3vë|U¿˜«K'¨rj×E \6n¹Hà§3 æ$—˜£GS èŠE®Œ6pÓo°JYzxí’¤Ó`È)šÖ6¶âŽõGŒÛÜ£wñÜWn€&È9*¹²´AÒŽÈíj¶/ÞÌ×È©ò»8ÿ§áy—Á[#DUQ)‡ÖjŸ&C†4fÚï7qŽ6‡ôó9~eïçÁUìU \Ý_Ejͨ]g.îÑæ¥…mº´¯ÍiYó ¸n·Ë¿øE”R¼îu¯Ãq>ûÙÏΤ–¿ÿû¿­5?ü0Ýn—×½îu3ˆoi@™ ¬Ûvík…;v&>± 8Çnªkö÷iõ ¹+)Á59šÈŽ¡`Çw娬ªiŸCZZL,AUˆ]'”1g¹NãWîͲÓcÐŒðtA;‘úCÝ ò'tÊCºn{vÁÌÑ#ǧɀ=9Ís4rëØc‰ÐÎ@“R+ÖÝÍÿÜ´ÏBj$3«@cLàp†g Óº¹50 a¹ðm)q9󔸜å=æØg‘\ø¬°=s_«IŸS\ åôÙ éÈ.§¸@1šö1¢(ú èF²uŠ¢nÓ¥ÄcN÷™+4õ€Øs õJøÄ*Á—9my8[/¾(Pžs‚2ó˜ä Š“>*—TžƒnDs¦}&eD5öPÊaB½Ö"ãIɸNÕv('.eàÒR}rÇgw¼Dî†l7çŠ:A^ù$U†?0’ÌÒÐE𣡴D´ÁÞô]æg4U Ç[¬QgŒç• ¬¬ô„fDGVt¾­] VÙ¢ÀG(¸\OHJd¸^ÁXÕY“ƼD!yqù5\]ÒŒøõŒ*wØ,áëŒqY§ ]ó:¢ÎH˜ÃYΣm;ÿÄéç6æ¨<‡Ãq‡J»H¯"# ¡GôÂ6.%k\É›Ôý»û«\=8 ‰`_-àYÊ\‹þL²ZZië†ß§v]í@6¨RŸ<P‘q€3\‡–î3Wö"g¡F4õ ³S:•ÚÇL-¨ïVàˆ’vóðõ ÊÍ.ãKœj“&Û'VȬv¾²ª·V_§SuñªŠùå}p¹ô) ‡2s8hÍ“•¥4ûîˆ:1׸W|“æ,Ï<óÌL´æ§ú§ù…_ø>ùÉOò®w½k¶|æ3Ÿá‘GáÖ[oåƒü ¿ø‹¿ˆ”ò[Ür-²]Ú–y|,po7,ÛìrÛÎÈ3[åw8òR·s*û}ª8çCÇϫЧžè‘¢`^Ccf«eÃÁM+p¡Š\ûsMrá« yäãPš‡}·Ã+ hp•5«ßÞA Ùe‘Mö¦vªÖq)³Njaš³­’Τc [wl³bå`1cv,J~ÊQŸÚLj„M$<bz`çRrž›Ò°:Ã;VG~*63 IJ@—y*ÇÐé.[P]Ä„.RRàò,g¸:Xg\Ô)Æ!jà î™ Y<!”!ú ›€¾YÃóŽ9]à ‰ ê{†;î3ŒÃƒexJšƟÏÈúå^L?ö ‘¦ºžÎÙszAš«ó¼@W–Ã~s rNmàvJ”'©.¸ÆPaÎà(ªËúY;«<| ÔD¢6|Äm } KÔ@àÜ–ã¸×8C×ßÜÿWWWyë[ߊRŠO}êS â8æþûïgmmm&µü†7¼{Ç{ŒÇ{ŒW¿úÕßqÁ\sºO]Œg×~C ɤϒޣ=êã šƒ—…ñ8cļÜ}œ+ÁϋӸ\ 6f]î­,qåå'¸¬6Ø‹ìç‹dƒ˜ H‘cÈ4ÕÐc0×äÉôå”;b¨ŸlRüUˆ 6Kà:³§ ö—øÊ½œG_[,ßx×/˜¸ 1d+d"œÑ¼D†|üãçÞ{Îþ¦\êwÖF¢n}̵Ås•¡¨ãE%^PЗ6ÊŽºáTF¹qêàP’ãáXeÅ-J9$‡MŠ~€’N®QöA µ `O +A¹ã£[¶«ÛsjéU¹‰Ä9‘#|E®}r8Slt)™QÚ1ÚÈz™KËtv×è1ÇûøVZtLÍš–˜DߥBiªLÕXXžD™k÷‚Ù/‹¾¼òüœBÍ …¤_«#µ6Z•o\å:Ýpȳ€*7XŸ¦hØý¤ÄµFª1jW˜Žg$о¡/9Y5+2†¢aö-¹¹E IDATáZÃfÓ!5‚R¾Êp¤1œJ-½·°b\F¾ÚŒ/³,„K OÖg]ʘÄt9d“$ò©¤C‘zp (sÏ0ö ‹}zzÎô3…²bà4‘B1&f¨›Œ“:úd9†qˆÄt@ÕF¡,§sôi—DT }(…®rÏÃqy壤 %2huàˆÊÎÀ…m§›OJ`½‡ôÌt%±àÊòÇ•0–€ÓÅï H¬ÅéÔíhj/Xc„´ã…*·Î¬57E‹–zÍu\$$¥K‡‘6íùR˜ ¢$#œ 2$:f¢hl( JÞ'7_åãËœºg|§'NŒ”ÂSà—ènˆÓ.‰ƒ„‘6›¨ÛI)ƒ&Òø²»x •xxí Q0¦œø¨ÂA(çÔ䘤fföž,˜dBÜwHŒ+} f 3±ª ú=ÒV¬H˜×G°ÓA=½…nnàžÎ)뢦a±$®'”¾G.Ct_Br£BdŠjâ@ŽWPI×+úZ‘)êo¢Kàõöçgg½÷Þ{yì±Çxï{ߋ뺜8a¬k_ô¢ñÔSOñÊW¾’Ï~ö³³¶ÛßøÆïÌv»Ö\wyÓœh4„*EkAµÎˆ©_Ç[OÑR’Õ\Ò‘ $[•;lå·(º’¸æ1Ùm!æzq/M»+äÚ¡+zj% "mÔ8Êl[?s wåã¼Å°ÙÄx‚çÓHŸª7&Ó.7ÕyvœS\®ü2wm…^_=&”µ=îûîg [?o*Ï»ôë«<˜™æþ‘6/ìs®q“ngÀì‘B³&ã*:R\{ñ~Ä&–œªíS3õñºÇ^yÍÔg¤øÜ9uŠÀ‹™ê /ì=H®õbÆY½ƒqà¸Û¤¢f¬­î³~e•$ת$ÏU˜… ³µR<<Ï™t—,wÙYÛ&õ|áøÕ] ­@ n<~ íIT£ ÷\©©ì¦h%9[»Áƒ=…RÓÕE¦0Ž`ú™&Bž\·–áÇ ÿ`øKTåŒõÚçÎßÀu3f—ë8߯ÉwyþߟEµC&íãn ˆ)f>Á$CJ8÷è Àp~û*—¾ùˈöÇä×±òiõ¢4äA>óUì_ùhßZ~}m·ùéŸþi^ûÚ×ò¶·½ !Äb¯ØÚÚb0°¹¹ÉÎξïSõzý/  ?UVPÇœ ‰ç ¶¼ Àñ~.sç+m‡,ä­ü9J¾ÂKµÃuyÌòy§|>)_Ÿ.%‚%ºq9²jÄ-C 3äŠÆ‰4¾(0JT2ëà3L‰CŸ™Ðô†Ô’C×;dD“ílŸ„c·U¶¶Û ”zŽÃý{/òHý ê%-Î%gHƒcÚtè!0̨£8Í…6û1-‚¹|#.}VðKŽm‚ψ¯6O1u†4¹!ÎÒ* ásR<:ô™qÈ}ÕæÍÓOCUÐdÈL¨Ù6½¬p–›Üá73 ë-ÒŠGV¸ŒŠ}g•¶ß£ÊŒþf‡¬¢E„jdƇPÎpLFt¶Fæ)ZbÀLõ0F’—§GÓÐ87Æ8ÇDI•z8dKíR­DÜ}݃¼ƒïÏ3ãgih¨Æ&“:ÃÞ fn#C%ºWƒ»·©¼ªAÚÎqü ÕÌX“¤Ï°Û${Ó#¤‚Þt•°5à ¢ZH³:ÀqïU«õåÙ­½øâ‹¼ç=ïá-oy ?þã?Î÷}ß÷ñ+¿ò+äyÎt:åGôGY[[ã7~ã7øáþaVWW¹téÒ_Ë€.´áì]û¶Íñ5“òþ<àÄœe®åÞ°¸¯“­ *&¡QãÈœ ‡ÇL¨— ³õDœˆ*‚œèºÏsó¶¼)Áv¬[ž«!ÐJÕ$þ8 YMA»`°Q!Ç!L"ÏGh› ÝfUp,ZÄ„Œ©Sør¡Ì¦(¹u,xD`˜R%"\¸öœoq‡ÓTËÀíÞ£Ë1+(rÂ’w‡S i~EH°J~ìÜY­@Rg³â…üìŒ*Qià2ÌGs½÷Ûb—-FÔéÑaBÊ™žõRoqH—Lzæ]ŠÂe6²í¼þÁ*n%%»¸nL²WH§©=Æ8ÒØ‡ÈÁmÄ›.“£Â×x~ÌØ¯‘ÅIG!ÍNŸŽê磤ÉÓþCÄ“*Ù~ˆÛIˆz5ÌHbFu9ewз•U ;g` Åó8ïè‘fô¯bØnÃ)÷i†‡«6Qœ€8U0}¶ ·J:ååœl¯…AAÏ š¹­Å„Øü±€~éÒ%žx≗ùÞ÷¾÷í=ïyÏ_ÖšXºwÍî%[b­¨%: 9ùÚðjÕ)®É˜( Š ‰h2dJµGye’lgô®É0%8ËJ»: PTŽƒG¶À¼$åý2Ç x¤¶ ëXËe(»gMmA"„¶âEÒÀamƒ# ½Ðß(&¥6y$СK¾â’WìÈÏÑèL–*ÖVm.6S‰SÜ<Çó²Eç/Óî “gÌšÕbÀ±ï›+2ªÌÒZ N-AÔmk|n~S*qz*%3+o[¾O9aÅv'µc™.Œ$&’ F(\“£…íBšº°ûqŒÂ/1-嵯‰1 Æ¥”šXÚDnÄBDÌH¹@‡çZ-F“Ö:: J ¨N€+@fN”E…Æ+¼“ÒØJÂåmxqnh¸Ò:‰åÒ›+h*4c="Ê"X(ƒ‰¾šASü²úŸ$£üó?ÿR#˜3gÎð‹¿ø‹±´5êeÛ}\^Ìå¶w¸DA[¶9u–:šC±TÅK´5-øt e¼ì…>ÿÙ¼gÙcDap¦†ÌShW ´ÁÉr{±t© l4žÎÆ …—1F‹q©ß>Ÿ ͵Ø- m¶@–gåÌ{J•)AsôÔÈ­îpÀU¦Hвz·S³!Ípn>œS×fTh0bRʾZ•¸ ujLÈqpÈí‚' Ç]´!çA_+¤(C°nG„ä8$øÜ7ÙK6‘F“æ>E¡È÷}œZŽ”Ò+0xä·}蕚Í+‚Ù¦õW¯8Ä7kˆ¶±úÒ‰KœJŠ\¡ÇÓi ‰¢~¾Ç0i’Liz`"…ÙjÇôÜ,góQ¹fåý12°²­¡Ò€gRøÜ$Û˜\"ÎhÌTÚQÕºXl‚œby¢0؆èÅÅä^zþ§ÀW_‘ŠûU+-Jó&“˜wØœ%P-KûDÉ’qƆjk†q¡f¦äÂ-É rªšRaD“u®r‰Jhé¡CÓ$Õ¡šq›Ó ÖˆÀ02 9Å:iîQU3nºg¸™%yÄÞæˆ¼ã⨌™ßÀif3# ªY »3øëSVj}g“H”›“=Zá—ÓQòg}d«@¬ƒIFIÆã&¹ã‚Ú³KSƒˆá†w% z•Žílºå>w§Ü7-~dÐhqÀ#¼ßOûŒWpê ²^ 7$Ƴ–Èœ*ßã%í6à&gùƒâõ2fVT,@öÀµêv‡ ‘è– ¨JråRH¹@‹Mó±üxŠ/»äßè’¯ÛD¢Pv,yÀ:_2WHµÇQÑ…m¬ßÂY,#e_X0 ÓZm00-2agþl² /›¼¿nØ{:núÜecV˜P㘎ÒUøFàÑ-øü]x^Ó±ÇtÀHHJžížÙd-Œ$øÈFŠî{èž»ò…`Ìˇ¹ÿ9=þì½YVĵòfœWÍó1ã\ÒqV¾>ä„c.Ë z.*3±Ç‹Ñ]M–çž#çÕÒ¹GK]”á¼2w­Z]Þ’ÈÔÔ< iQ©ZJ2áràum6놥«š ÖØ@KÉÝE«'ÇaL´TFòH©0£G§$¬ù¥¢´µ ‚öÙÀ%C#IJûˆ!ÍÒ@šJ4#0Œ©“£Èq€k a•ëæU´KÆÝ…n|1=:D©#ßÀ)µã'ÔÑ Ê”}µÎ«DXs–yG`.#;uCòL"”$ŽC•c´Bû9Bå¤ãÓw(–µ&ݤ×ÂÒÅÈ^oáhkÅ:p(2È 20Dk^+ÅÕ!¹+ɇ6c7‰®I3¶7v¾çŒeb¬&»^_FÂzàžkÀ„OÝ‚ð F—ŸLKÚÑL‰ç03i×[ Aá:èì^oƒôeµÜ_y|E!ò<ˆ¹NDµ¤¼Ê²åÞçÄ}m~Ï”ûIÛVH~7G¤†je†qÅ¢UÞ¦_*ªi|R|bjL¨Ñ¡G b„2´¢ÐôhÓâ˜]Baƒ~Ó±Ô5ë>¨p”1 0Š`eJ’d±å¥«jJ‚5Q‚E%2xÝä,£¸P„¬•-ù¾$®$ÅDXÕµD’møõ=“p¤cƒ“¨Óµ\ÚѲÎtè2°»L"šŒ,ÀW$V¤žqûÜ¥sUŠPɲ Tà; «!`A ¼Ùɨ÷u¸uŸ=„×ÚÄQ:zAµëŠ#Ö8 .·«¹­¾ÆNYÄÜs…þÿ®²ÌŸ= Ïieój:,³ê1'Úìr }î–Aþôy++fa°œ¸35XðËm¹ù Î9À-¿‡s%º¢©P³Wä(¡Iª.† Ni­ ™¨*Š‚V1$“¹q˜É 3¶ Ó£CÈŒ&£ ¥†Uš2î°@Ób@LÀ.[„|Ka#&.ÝÚî²N›þ?¡F›¾U“+)k]zÔË@?+y–g¹Iq¹HsNq‡>m\R†4J¡‰‡œmº²Ê׸HE¸·8¦ÉŸ„*Snr¶|~ÀQÞe8mC ÙZ½M‘+Cšø¬ÝE¯*ŽÂ5²çªÐÐ¥+”Aï+ÔzŽ\Ï)úú†ƒjçT/HW=Ò£ &Ux§6) ²©‹#sQÐÞÜŸp4ÚÂŒÎV†H5q\³ñëeö>×2¨ØïŶF­¦_€ãY=_¸…ûOVÉïó0/(»Þ_®¯ ì–@˜Ømî‘[úÿGCô?‡Gâ{Ä©öQRäŠB:#NÄzæ¶²5/0œMnPäŠXúÈT’‡fjGPVªÉ—Œéœº©cÖ‹»\àCš$ÆrÆH­i‹c ãàÊŒÔxø&%ŠiVeE¸\£÷™&5Ò$ žÄÇ5L¯‡š&c×ÊKË„ÜxH£YÝ;Dµs“É~Õj[§å>õ%hú=¼»åÚ;ž U3 -}µ‚1‚j:Ť ]É6w0H„pMf÷Õž=GK ¸ž‡ü4e“=ÆÔ¹ÄU2éÒ ŽXI‡ôÓ6“¢NJH`Rn'§ e„ÇÓ^+eËìqNÜ`f*´MŸZ1a_žb_Y¸é¤Âo„Ó JAßpÞ¹Ž0†Ál‘3×'çÁ‡Ü¸tèY—5;Bp5çk×OFµdÌÎp›‰_cµXç.ÉB±¯Æ˜X¶íuÊýäÉC†· ®wÏ£+bÑù Ë$0ÇጼIœU -­V“Rv÷ž“ÿ¿Júµ“Ù7¬ˆýÜ»<^ªÎ²Âr"õ:×rŸW\ª|þè+{¿üùœ»ž-µåÒ¥1…W¶ÿ×!«HŒYM2©‡ÄÒ'$Æ!cìÔ!:|“€€=g“¯ÄûôE›!R fÊ)>Gt ˆ9b•CÖ¬#"* W¶ÓÜâüì&¿Ûx )Z$øtè-‚¹¥h1$&XTÌ+ ­Ä¬œó(žã~€Å¼ð:ç™R-Ûÿ’=6QhjL0À5."0 i.M&ÔScbêtD#Óå€UÇ£RŸà:)G“5òÄE‚j{ÈÁñÙÍ „^’ìÔБĸ‚ú}Ç$³ éªæT!”a|µ©BИ¢‡là# tÏísJÞa¬jt« ó&Ó&Bk:q*Ãi·ë"ÿvNz³‚¹f7|±®‘§s˜JŠDQ«ŽI¢}¸¤aÝG¾ªMö¾¸rZ Ζ.o)ð´@œ×˜±€›´ ñXÿnüUôä•€~/º#øâÛàS¼…>m>ÎßäÖì G×¶ÈlE>Æe•–ƒ»š2~c•^³Áƒ×0(ÝÕ&Ô¸Ã)Žèòõü.> ëÜ¥eLDÉ!Ûwöø–K!WÕdF!;áá †À°9; ©;x±¦P’ãJv4Â}º`ðÆ*í;cÜÏØä•A„ç²Æs›èÃrßY)ÿæ‡Ëý®(‹•²“xøXLæþÂî}æüú£ñáþ#Ä|ùhaµ#þMñ“2êQd“Ñ© êŸ8ý7¸pé\ƒÿ)ùç<ÆïÒâ˜Ò?o•ÔbAû »TŸ³ûäÐkrúáÛŒ§uÞ\ù$ßÝúwh$ßž}˜¿ŒÈ Õ(&ìåözØë÷®¯ÿYþÑ™ŸÂD‚TùZâ˜3àÖÿ ?OiÝžáßÉì{1°ûø ç?}ãÛ¹ÊE†4¸Àu4’wðËDœ»½Ãé/íŸÜ2>}ö¯A?ýK¾‡Ø}ÑÓb€[h.Dwì5yÆ^‹iXåüà:‡r•¯q>ÏòOy5Ä÷ßOÓ’8.ëOíвqâ›?üoùîáß¡ò Ãñ/0Îr“ŸäÝ8&çôÞÁ ©ýÛž°×ù¹ræ,ÿTèòÏ|—_òZùuQ.r“yemi.f8Q‘«–Åüji®>ç"gœè¸,8æ|¥Vþl)a(տܤÀ3–“íè /)¨ä3¤±›®¯Ó…\kŽƒBSeZò¾­ú*‡‹yw­dV6•ÁS,¸èöòV8¦aÆÄ8L©Zi©UeŠO‚ÀPeB•)M†Ô³É Fåì]QcÂ:w-ר0C—­Æ¹m¤ORÎÏí¸ CIÁ€VÙY–ùáÅ„ŒLƒˆ–8¦%†ÔÕ„õêm·ÎÒÉ ê3V¡ˆÔÐÚèᜉQç2D'geó© ˜ ÌTànÆ46Ž1®ÄôÊ-ðVbL*ÑE¡ÕÖ˜ª;f+Ø¥ˆ]ò±P†jg„Ö”A ±¢!Ôöz7ÀÔf&¬º›&¶t¿È 投.üÞÈ ªZØ5QÒ*MP*ÃõìúrÖ2 )¿Š€þÿôñJ@ÿ“Pqó{̺H²Ü·\æiôfe0˜²pì*„1H(雪ä4K4ño2׋(äÒô…Pä®*1-®5r‘ ¥5Jm= ¡Úân$B›—øæXgé³·øó–ö.¾bL(—ŠoéûòÜsÿnUâ\dÉxWåøÆ(qrÌò¾Wj{¨ÂªØ¹dx&³T̹ÿż£9ï|”Z ²\§Š§ÜB£R}2U*)Â®È©É ¡•R¸@h¯¤>ƒ.íËÚÈ…Œo…YøÑ[CñÇÿŸ¹¬t ”´û›À …@c?^ÍI2@ Ks-AÈNa¯¯2ùÉmi–ŽimB>A Æe—,|áÁœŒ5ô¾ëž[îÚ^ñ—­Bï–€„9H­Â‰€‡Zª´çÆòs%¹l üÖ(«ì¤ ØMNÌ9<^jÔâ,-ýíöù"@M5Ð §9EÅAëËì¦À7–ƒê™Œ¦¢KÝö t!G8ZˆFè…­©oÇT˜1+¶SËNq VËyx†WJEh1¡ŠG¶@Óæ%=í˜Y‰2ìù|Û-«tëîV”â50 I³ËÍÁmG¦‹/’E’qL]ÊÇc¥lC"šrȘ¦dÔRëDå# ðT嫧 6>"xí˜bæÐßY£8òÈcëxÔ«¯‘Ž|„W`&Šén“|ÕEú9:“¤#h+c› ƃvª§^Nßt(ŒÂmÆ{w›äŸbäP<ïPì×m«k>¾qºpmÕІãÕEáÀ-07 •U•;ë‚.àÓ{äMûz]¶ïg®³‘;:hSÌîõNMÿôê+3ô?is«™1k‾†/ÒUúëòÔ%ˆ#Ê4Ú$øø½„lËãß:ÿ=GQ‡ë×/äê8g×™úUrßáÖé ¨´ Z™rjí_ë|žßåËÎeêÂBåbÌø~ Ê0ª¶»ª""’!3Ðúlwv¹Å·Z 2x:Ãd‚Æx„V7I­þ‚P„ã£Àx’Æ©1£Óu”.pó á›]ªgf4ÎP†éÅ“ Ä GâE)Õ[1­Jć IùÈð¿b×q†9o½ïwpEJsmÂÊ#ò@Ñ]?¢1£›¯Ýz§™q3<LJ¿7Hù–ðÃH¡QÊàoæx*¥ëâÆ9‘xèüÆ-dTð‰O~EOR}cÄåõçq:˜¦ ¸˜ÐQ=\7£S?ä"/’¤!Ÿ|êo¡SIwã€Ý³[*áÒåëxí åÔâ Nœ1;ЦÏP7yòÓ¯ã9ÿ!”ŸSyx†KŠî:$¯ñqDNUL‘™F Í×Þÿi$†ávƒßäíT™Ñ刚³R1¹¿‰”šõæ]ˆ u<^•<É Ö¢êùð ßI5œòhõ÷i»‡(™qök÷puŠ©K\‘âmeœ¿üNÔà&Ÿý¥W#Ú5οê*G¡Ù;s—0H‰¸ÐºŽöìÝ«˜ûËC¹ÿå è“r¶9·­°ð©]PR N8æ¦ÜX÷Ë×Í9©ƒò¹ÚRK=ZJŠò5UN²æN¨2³7ö¼²f0M0¾„iAmãÌ4Ó5#­£ rÃ0«(“ÓÍûäJ1¤ÉÌ iëc„4„Dì³Á;H ·9Í!«œå.f ™ÕgáUžâ‘y.[ì.ÚëËîrÈ*z%DÀ*ÀŸã:kãЧM•) y™©ä8¬r€F±[¶ÖâK X±M|Óf›]ŒLE•˜€3ÜÂ!g—-öŠ °!öYå irÓœEÃ%ù"s¯1Ëm+Ü 1 Éì¸ÊÆöº)MV@kª—Æ$qÈl·F>ñ¨à†IìShÏOP±¦ÂPó&T7ÆMÖR“¾±ÀÂ×®}ž»ùwâó$‡!Õæ„Ä ¯7dW}ä«s„Å-×v \¶˜h·Š® Ä}ڂߎlR'Þ¨áµ5Ìg5|d®lÙVgørÙ êØ2Û÷0÷jÎò (î«¨Ï ]ÝgSÙU1GÕçØ«nb¶5ÆÈRq.ëÙ`Ä]~ÖüCŽvÖè?»i+ù9 vl÷ÙÎ0ǵòMü&5&\P×¹ãŸæ£â­\ä*myÌYyƒCÖì Ý&}Vh:£‹eXiâm¤¼è\¢h+T»(S‚S¥¼k1žÉH„O[Û 2/\šW ³ó¡ŠP±@HÃÝJ‡–QÔGc¸cˆîw(„‚D‘†ŠJ"©>³ö\Ä&{ø$üôäÝÜxê2ÝøÆýÇ´é³zæþ™1>ê³!N%æ>Cx_ÄÇï¼ëÙ9<'¡éر^X0Zùè×Ü÷äBGÿëód‘ IDATø·9ÍÁ³›üú¯7Ü€ö¥#’mÏIû &*kÛ‡\|ø*-Žiq̇ÄQ…ÿÉï#r*\~ðËœëÒP#Ä×èE!´É ê( jÅ„?xâë¸Þ¾Èf¸ËÙ‡¯ÙâèŒ!;#©3fËĮ޸:õ)|®r‘ó·8Ç Ö¹K1ëõ»Lß–ÕtBÕª¿ÏŒ 7wÏó+ϼy>gÚ 9ë]£ÊŒôí Æ‹©ÁˆWñ$[Ü$¼÷­ÿü*oú{+¬?¸GbÿÁM‚cV9àÔo¡ð¿Þ3r䝨 }.½)—ZOsa¹4óž·ãçv§ÎÒÞXò/ç¶ÉJ4ì|¶’,µåÅR'Ã,u7ç¢2Uۮў ¨ r%È*.¹tDJ!%±ôf Z¤ÚÅ1V³Y˜¹Úš!Ñ>‰´ ̨.Ðê͘úB¿=*oY°æxIƱע(ý\!."\È樒–f9ìKJŠW¶éݲ §™R[¼>Ç]HMºd lµî”@;ë–’³Šºš,óCZä8ӢЙÙe‹¾n“*á´Ir·ŠöÚŒ+¶É…"9 ×§¤G!:sQ±Fvr²£"õÉ3E±%Ð…Œ &4˜¦"ÉB¢A g+Åq3”V¤Æc/:Å`¶‚+dWSDzä Rc¯õ]‰Únà”sÌ®-¡)WZE¸xΒа/0«-8ð…]Ð['m³ƒríTAÔ4Bßk–ü (‹ŸxJ•ˆ 4XŒK_ž‰&*yæ'R¤Ô' ‘ªìâ•3w! ŒQHmÐ¥óY¢|2Ç]P4íÐ-dʉ‡GJDeqßL¨Y6×]ÐM ¶[0Œ²8›#Äâþ¢lëkW ËÏ\U6~%©ðÈ•D9†B(2á!…埧²Àx㈅¶fG²òwÎu¹ÙްXHDk)ÑF¢sKíšËäÎG9j¡O1?¦p”-À"оj! ÁB‚zÞ‘4 ©ì{/íÿ|2F‘¥n†YŒ ì`Gs0­Iém‘–zQþ! YyN R³=Ñå¿#]¯,ÀH´uµPNYj2í’áQ”ƒµËÌ÷òŸTø°½»ûÓÑÂø¦(…Aˆ{ϾCô¿lz…ã•aÜã¥à][š7ÍgFº?Ùü't¾¶ÏÓã+ü‹÷¿ÙÓl>v‹í×ߢ§;\’/ÐøD|¿ŽAð\ýAnÎÎ0»Sãß}ê™AšÆÛ{DýoÞþ[Á3*\âE.rsVòæÿîwè>ýÔ›ù¿>þ­ÈŽF_²€×óÞUÞpÿ㌩óÏr?Ï!š†×ççè›6ŸßyýµoCõ4/þË4×øØu•)[ìÒåˆÈ©ðè÷‚uu›Ãýuþ÷ŸxÁ密‹ßð< açØ51á{øüo/üC®>w…›ÓûQ· Ô¬ |pÊöß½ð>Eƒ1¯çs€à +¯ãS÷½™h\ã??ùm¨ç5òXóöü 0™.©pYåo⣼Þü³z…á¿l!uÁ‹ŸXá—~ð{1տߣyᘦ²n±#¶X½'ØÙËÅýe«Ð°sÎZÙ÷ÊÖ÷\5(ç„_:G¥›¥ª;*__”_ÏÇs „\¹K­üùL~ÜçÀŒ+ÐÀ8†ÂD®O"<|“`Œ&^¹e˜2ü òÉ2€‰ Ë,>¡(+ï°4D™·ÁçUy Џ›ñI¨Í&¨ (+ölÑ’Wåä¼Á˜£5M”EY‰Çe‚`õÙÕb¾nÓbÆe&9ÏXrŒÙï\oÞ%£j¬tí¼ýé—f/ªh-i1ÀAä…ä¡EfŽGèFÌ2I.5n=£Ö0¬KášÃíéÔÇ rê›Ç˜\0™4‘NA%œ.ñ¸‚4†ÕÓ»l¹;ŒU–’5gLãé¤J½6À rƲIz&DlçdQh×—±Q kšÂwÀÀ‰Hc÷ÅrlxZXm T œªCU­;ˆ7mcb îŸàüQv‹þa™¯¦é.„^ˆ2é’Æä’Òæ˜®î•÷‘\tÅ*DL©r%~žVãµR” )û* 5¬ÑA;‚é¤ÊhÚ„™àpm•÷ÁQÇî'^™: LfyàG®Ë“"£MÝæ;é6jš¡Ms³Âˆh¡9¢A"|V8F#‹:£ ¾øÙXÔ™QaM›D+E[õ¸Ëšµ/ kè$<ÂpFÑ pße÷ÖZå]ž\‡ð¯L©3`WØóµUŸÖÙÇ¡ ]=BERçèhÕIuƒö3†ªÃP5ðH˜Qá|ƪ¢¹šÚÚ˜¶™þ^ýþLÅDiA­2bMú´¹ç ™QQ3º+=Ö¨óÂþ öÚp {ùQ¹7ÖÓ¦O“![ì‰FgÈ:{DQ…«éƒàÁšnÑ£Ã&¦Ô˜rVÜdCrjP0»]=iˆ‚ߎ(ŒFÉEyI Nn”@›¶×g¥Õ#3“ƒé“v?`• c±B†cý:ˆØf‡©¬Ð9}€Bs}óÏtA¹ ‡g8Κ4õˆƒÊ*=:¬’Ýc@ÿ«&,ã,ÍÈç3ô¹È\€$+ç—s¹×N¼ËçJQ“²ÂNP˜‹Ö¼_>7f1ÿÂ)Û¯iù;*eB!AÅZj¯ꓘ*)n’“¶Í|ŒßËñ63b”<Ç”™Ò‘– >ÂN°VXã—CÆ h±ÍNi޲²¶¥–œA„«.üÐçV‹A»t؉ñ‰ñ9ÅN¹ aL}a¹:ïH4ì#0Üe â<׉9¢‹F²Êá"ÑHñJûBëä6¡N"|Ö±€$Yø2û"ἸÁ¡\åU«í§$³áFã&­f¥rfû fyu.†‰A»ï¬!»n=Á$ŠÉ ÓiŽ‘¼jÌjgŸá¤E¤+ìLN¬LñØšeL,˜ì5 ×§Žƒ8S }Ä«5â²AJÌSŠbE!.ÌTÐ?î`2‰èjŒ’v xÐXîh <',›â¾*ƒùÐ.lnYT|ñçk¤cÿ«˜‹½Š»wPÜ”ÂÄdxÖ!PÇ8"£™¨Æa‘x®màJƒ—åh7!—vÎ6o#Ï[¬VeÑF…1:%S3´+©š ®Èµ£$RhDË '²R€äuÓÖÌÌ1³"L‚A+Òc «\æ9GÁ*³¼B¦]Õ:…LD¶{Œt Žò52ã’I‡IÖ`j¦Œœ&G^—YÁ5VšÔh‰+r*rÊý\eÕb„uuTÚਵ–ƒkÛó“^]8ÄaÈØkÐ`L­˜!rpœŠŒÐ•)q§UÐ…$ú˜©`2iº1Iî³Rˆ˜B*e°as†¿¡[‚ÜóB“Ÿ™®뀚œÐá×d ¿SÉ«ájÒ‘Oâ…` 4B¤£i™£‹ )ŽÊpÛ F Ïg8^!)|¥é»mqL˜$äÂÁsÜfŠÌ «N—*[¨Ýµl™ÑJãYFC%ŽpdA(b\‘ã%éŠAÎaÑa¢ÌÜièâ “øYF.s¼V‰rò3äÃí#÷ ¦îWŽ*޲n ôúë ŠK—p±T¼,WÏéR²2’I–Ðîb µ>?^/#[ üziæ¾l¯,½?ÚJJ-¹@ƒSvæIŠ”1¸EŽ&C‘£…ZØ<áâ˜_¤Ä‹Jb.—™¢4dÉ_2³’hZé'Ì~å.^æU¸,çMóß«Èþyk\¢mv¡Æ´œ/Zé½#Y]HÈjäâµsŠO… F8%ºž’0Ô-2é.À"ä‚|à[ªJ5¦È"§láY[X‘ÚÞ†‘ÚjW%b*0Ú » =õ`¨©•²Ô¥Р1”d5ÀMH⥠û\ˆÁt…ÕÌž d=‡ÄCD‘ip¥Ý)즡ŽWØZ¸ž’Ç Ü¡Xˆ•ø,9òU`ÅÀÍ=¸¼iƒ~U õ½fɯ´Üïy£1sø)dªQ™Á(P3ŽAÄ^9~›ÛÛVíÞi¶aÿ--&²¶èRI4+/f¹JÕ™Ò\’>曀׉ÏöBœ+ úU‚ª7%lM©z¶›VeÊ^²‰),µJg é$ÓSíÛ´ûLšL^lÑÿbÐ?cAyîƒÅÄEGN#CK”†›gÎ1¬Ö ˆHâ´R¢£·“óÈVÆÝÕunš3–N—(FãÍÆ1ÔŸæ»êæ¡äi )è;+ÌdMðÿÞ×͘¼Pç ¿ñ(Âí×_Æ9óæÙïóÐÞUÀ=Ï­Óì¿z­ÓH ñN•ÁgÖ`¿ß7  ‡foȸÿû¨ùnÕ¶yvÍvÏÓsäߨ™äuöþ踆Ýâ‡GÈïõþ)oTŸ#ÊCþ ýZtfÈ×gõ 7>tÉÊ£ú ¾=Á[‰yCý ¾9û8™tˆ*+J³sô?vIñ88Zçêï>©UP LJ ´\¼ï*í¿»KK8˜­3é7a{8)üæ7n »9Æ!ïýÒ?£[í!ªÝ÷%vOõ¹\`ú` ågü—_úÛö¶½ ø¿‡éqƒÇÌ/ÿ9ƒâþœúµk×ø…_ø<Ïã;¾ã;X__çg~æg(Š‚w¾ó¼îu¯ãCú?þ8J)~ìÇ~ŒV«õÒîâ\F•ÿÜû|¤çšëÞR°LA›|v ]Ú„ÅR@—Ks›Yj×—ÁÜx «ÂÊ¿–ºò¹«Æ #È=A¤Œ‘cˆÜ·À ¿ Ý~ Ò©”joÖuJµkiPYC„Ôp¨1&w,¸cî…¾ŒàµÎNs#ˆdAS³ÂïüÎïP¯×ùÁüA>ûÙÏòÛ¿ýÛxžÇ»ßýnêõ:ï}ï{é÷û\¸pú¡zI±âörTj™<Šiy” 'tפ¼fõG7„0¥eQ¶°%NðKÈ›Mº¤ÐÔ™pœù(?‡B"ÐT ®HÉ  Æx~B–»(r¤[ •­U¼ˆØ«ž”=s¯ˆŠÈe¬1‹ÒH$WdV Ý©!/?ÄdWæ%o[cŒ@{¼plÏe„ÓÁpEc9Ò·ô[©õI£ ¾£tn…¼ÆàF™•oe†ë§(§ «û1¸NB^Õ0ÓˆC®ÁÉ Ü5Û-pÉñEÊLi¤[ šÙ0i÷¯gáe™)pZ9ŽR(Uà6"”Ÿ!sÛ{N¹9BiäÌà2¤4[ ž²®¡;C˜‚Ä ¾†@£š9Â׸EºëñÏ$„ÎŒ:cŽœ G9Yµb‡ _9²£[Õ.öÐ*³ÞŽ£O0V-ƒ sŠ™o÷‹ž-æJŒðÈ4÷È6Ö)vúˆIN‘;6ñ¿§­Â¼ŒäþϹåþ“?ù“üÈükkk¬®®òîw¿›w½ë]œ;wŽw¼ã¼ï}ïãcû?÷s?ÇG?úQ>øÁòÎw¾óä sd¹·’›sÇç³óyÙ.!àçÛ㥖§óçæ’±sÐÛÜÁ­»Øj-Íâ³ò˜5 ¶]먖W3/DKëj„?¥PŠ‘[¥âFÌTÆ)MU|f%ÂS ÉqËvºÇqßàT4Ià/›s¦ÞΕÜ3|Rê“ w«k4/ÌSææ+óváüsR"EOrº×´ƒÝœ-äç®C³äÆfßܯ·±Æ.óaF…:cªfÂHX {.EÁŒªå|Ò´úñJ¢ï¢67Hs)òÌÃô$‚Éþ ¦¯ì5™Ù3q /Á×$Of˜D‚€¼ç‘ç.¢Ð˜ÄVà•ZÄíëÕœ4÷m…k‡üôªu­JA¤-¼*â< Ë›@ Ò+hÙ$¼\hËx‹•£1¯üZÀ¸®[{„AÇ»×úËç¡'IB¯×£^¯ÿ‰þÅU;;;üÚ¯ý?ñ?AµZ¥R©ðþ÷¿Ÿ~ðƒüÖoýøÀxøá‡ñ}ŸŸýÙŸå]ïz;;;looŸì[×AŒ "]ʼn2pß-¿Ÿ‹KM>ˆºOë9ë«}¤Ñ¬…GL P=–-jL8bׂѰ`´ËúzyŸ7åÿ ¯ÛÄU›Î>9‡ù]uÈaå&Ž)È]‡YQAÉœY«Ê)vX“w¹ÐºÎðMMöû›L§5FÓEà ›6ø›YŽßIÈskôT8’ñ¨IôìêÛDãªÕ88$=Å—f2n :'ÉH§£S†›íóL£ î—5FÁÚ¥>¢bH*/òºæç1Zp«yÁV×ηŸÌÆ Šžgèr8}ø¯îo­±UÝ!/ߣ[9à¹ô 7ž»H6Ô$±EûÕ”‹×ÐÊá.È—¦¿J«ò‰‡¿™Á¥$‚ô«dëù4@$चK+/àGìa„`&BžV¯fXo#<‰­Ô$nÁMSÎ>t“ÇÄãTˆ8ãß"Yñ‡ ~oóµhSƒ‰>p™M›˜;hšð[ì°Þ=`V„Jñ±7}ëb»¾íœïÛµç9›§ ޼™ëò¹¿ÿ(³ÿ¦Bôù)£“bZ [ þµÜG£“É„n·‹çy_]@üñÇ9wîÃáGy„££#¶··©V«ÄqL¿ß§Ùlâû><ðŸüä'_r‚›×ᙜ*°üÞ|©ÅÞZÏœ(ÂõÊÿe^±O°Ô¤…SÚ"yi–¯Û³Ç?q ¾ýlyN³4«o”èù:„U+CX[M1òšÂ@-Œ#¨n¤h%p³œMzdCìøLk!nT0¨Ö9ÖÁ¨÷Â1ÕsujAVº5 ¨0eF•ú¥š•5˜¬Tx »ó²nÎpØg“6ý…XŒOB“ÍÌâ‘"ʙÓOÜfãÛÏÓ¡GDH)§¸ÃI ÉpèÓaFÈ:8äÜ䌵š1ñ´•O$cLuBÑ`ÄkÜáJæˆëŸC<ø-L“YÕeÝÙ'Þ NV˜Ê*N£@ÏÂÑDÃáÖw#%Ï=¦½:Eê玑AA”T¾¡V’µ=òÄåöîy6Oßbbj4Ýÿ»½3ê¼úÿç¹wîÜÙìïØxc)Ê’¤-ai%@üª KTBDÙ[µ*mZŠ„’ÌIU)jÉÒ* 5TQ! $CÒâZ Æ›ŒƒmÀà}ÆöÌxæÞ¹÷÷dž¼zßO~úEoÎ?h̽÷<Û9Ïóœå{S=´\> ®áp…‘r ¢'† R²P›ôv;Rº²‰MÑ‘Ò5\Ýè×dËM`ZEY4„pã•xfn\ýŒÜÿ3œNR(¤?>¼¶94âÅOºh#‚J“œm“ÚT²ôfFHðºü´‘æ°AØ$´IS‘•ÄLLU"¦É¨©aŒnQM¥¿ï&áš«Ø&N³*vi §XõaM/èWì€X†‚¡ º»œ4uænt!}l‚ ³R ×Û̘¬Oˆ¢t{©S[Hhó®›'ã÷¨!õd«]dúòH‘:é’<ø/§Æ”ü¡T„бƒ=–Îuu…p†IUŒRÏa S2R,ˆê.›—:}F“ŒqN¶¬bY1ró[0Ò×ɯ 2´hg>APv`†Úiæ-©ÄUºL~ïÂgàãE£ZŠ/@rÄÙ]4QEÁÒ¢dÒlËÄ0%.w×0Ho!¬;‰)6ò"·ÑT…†Œ\ô ‚ÓF϶•ÚCéV†¯7Dg0•°äÁãîÄ•Òi•–í¶ÎR~ºLÁ` ¡.7ã•£›ÈF·ÏÁ'y-ä§vàt…ÑRm„²ûì×rC·Ûí 6ŒåË—óÞ{ïQQQA8l•ŸŠF£¨ªŠËåJüísºBe´uó–z€ z ²¤Y›·Å-s"~ð÷Åøn0S­Ê‰è&a¿šbå• 'wéG')„-cy¼*¢T{ M¸ ðÝ8ˆ¢ÐFQìV=<ø±¢žoQÈi“Óh"Û*ê‚Jcwmþ,bA…Øm…˜;^tÅZºA8Å ~’ƒ”ZÄNä®61®Ê¶†´Tª€B0 º@9ˆèÑT»•©Ç7IQ¨aAÜ4wdYœN×T>ÉJÔ èuÓN:a ¸ÁxñãCÂàV´€@[º…IÑ„ÁÖØ›ýÁt•6ÕÇMQ@-ÅñâNV…Éà Í&\˜Ýº°i)2Q¯‘N#ÙØH¸Ûa³kR :þì0`˜AètzhéÜ"Ÿë &ˆ›[ÍÅhŸ9Ð'DLh˜w$(¶.mžtj)&†Lk|ÞÚ;2èþ,ìnˆg»  (°ö›H¦U+€—2éŽW4B6è”0°,‘øEѦ[¢ÍîC˜&7E.3ÌJqkëGÄaÃè23áF÷CXÈ¿XÚÚáÇyòÉ'™1c¿øÅ/hll|¨Ã¿Xµj•9räHt]§¾¾ž~ýú …èß¿?Ÿ~ú)«V­bùòåÌ›7÷ߟiÓ¦ñƒü€»wïò÷×¶¢`Áòš÷"ºî¹ä, â×i½×ëgÂ/"zYëM¬—^íæƒÛ%°q=bµ-þ¼½¾'q?&¼ôÀ8‹{í× åxD¯þôÆd6ïõO“”¨vÿ3.†Þ.ñÀøÄÿD­uK¯ñ4…¸‡3ÃCT­{IDAT-À”⿉c>÷î,ÖóšP°›QDÌŒc\‹ÄûÂ0­ß=<5°«ü¿$¬ÃS¯o›LqÏ”bÒS_Þ´þ"îÍ`O|€wUXxÓF³‰D$ võ^*aÏ·z~[ï[9Êf,ÐLdôÔf¶†(–éÁü&þ¼‘èùvwD"¿_>?]´ô ÌÇÌÔ©z¥[|žTõííåœ8q‚ÿüç?¬\¹’ãÇSQQÁï~÷»¯å†ÞÙÙÉOúS^xávíÚÅSO=Å[o½ÅÒ¥K)--eÊ”) <˜5kÖð«_ýŠ?üá¼ýöÛ ÓáG•QyêÃûe«·¬÷e¸Ý“±°*)¾¶ãëÙH$z t”ÄoâÿÊèÃ$ª °+ñua‹¯Ñ«{)ÁÚN %ÑDÝ´a˜ñôP]Üß¾^²-IB60ºuLEE`j"¡[$›–î¥ØöÈ—0ñ ?Š®Ýëo¬¦C²N81]ƈI÷ D²Œã3ü„;º$ÍF ›…yϬ‰!c¦iUšËˆµZr% @*²b¹óH`™Çt±¨ 1«²›]D­y° L!ˆ¢ŽÈHª -f·ÆÈ¸w)uÛ‚¸ ‚ ºjC—äHŒ‰ ³ÓåûÆS‰i¤íVms»JTQºÅLCBëÆºÙ )Q‘/ÃlEº$Ó­::¡gMDuû½x«¸GÌ'üV¶è.9>´Jð4Ú3&,¥hHL4&±ÿýOôüókyõÕÊÿö™§Ÿ.àí·_ãå—_fâĉŒ;–’’æÎˈ#¾ü†‡ÍC‡!Ë2Ó¦MàèÑ£tuu1cÆ E¡­­ÒÒR ÄØ±c¿ Ùý†¾¡/@/^dçÎlܸ‘={ö ë:óæÍûÚöçÎ;|ðÁ 6Œ1cÆ8xð  `ܸq!¸|ù2§OŸfÒ¤I|³¾¡oè жmÛÈËËcúôéüò—¿dÍš5äææ~éïÈ›6mZ7lØ0yädYF–eÌðáÑeëÔât:5jùùù‰©¨¨@UÕ¯$ØÇ4M®\¹Â¥K—ÈÊÊÂn·‡9uê¡PˆÌÌL„ܾ}›³gÏâv»q»Ý}âF©¬¬äêÕ«‰ï}Õ<êëë9sæ ­­­dee!IW®\áÊ•+dee¡( ‘H„Ó§OÓÚÚJ¿~ý’6ΑH„'NпLÓäüùó|öÙgäææ"IÁ`O>ù„p8LfffŸùUVVrîÜ9jjjÈÍÍEAee%uuu žœ:u MÓÈÈÈHJ?›››)//§³³“œœ¨¨¨¸o{Ú•••…ÍÖ÷ŒNŸÏLJ~Huu5gΜaáÂ…_ëÀ¸””}ôÑ„_Üáp0jÔ( °˜YYYŒ=¯×{Ÿ_¹r…ììlEIz»Âá0•••÷áݹs‡ŠŠ \.'éó«ë:/^äÂ… (Š‚×ëEÓ4ÊËËimm%;;!­­­”——#ËrbL–b±.\àüùóÄb1222¾ržÊЕ+WÈËËû/õbCCgΜÁår%E?~œk×®ÑÜÜLnnn‚g$!==!õõõ|ú駤¤¤|Îü°tíÚ5ªªª°Ûí¤¤¤pñâEª««º8S^^ŽßïOZLLVVo½õ555hšÆìÙ³ê;òºuëÖ}Ù—‚Á +V¬`À€lÛ¶ &àt:“*¤º®³{÷nÞyçÆŽKFF%%%8N:„ÏçÃápPRRBaa!¯¾ú*S§Ní“ Þ¼y“òòrl6ýë_™0a[¶lùJyöÜäÂá0'Nœàúõ똦Éßþö7\.{÷îeòäÉlݺ•¶¶6***ƒ 2$)ã¼wï^V¬XÁÒ¥KùðÃ)++#rôèQÆÇÚµkq:¼ÿþûø|¾{QËA†a°zõjŠŠŠðx<°ÿ~***}{üñÇY½z5>Ÿ½{÷’ŸŸßg¡¹sç›7o¦¨¨ˆp8Ljj*ëׯ§°°×_I“&qìØ1:„®ë=z” &<vóÂ%ËL˜0¬¬,¦OŸNvvöÿº›ÇÉ“'Ù½{7N§“={ö0eÊ”¤ó¸uë‡âïÿ;óæÍ£¹¹™uëÖQPPÐO'OžäÝwßE×uÊÊÊ?~|Ÿæ·½½£Gâv»ùË_þ¨Q£Ø±c~¿ŸÊÊJZ[[2d¿þõ¯)**bûöíŒ3&q¸xÒ4ªª*$Ibûöí³sçί”gï Öïÿ{Ž9œ9sX³f ªªRZZšØLW¯^Maa![·neÚ´i}Ò‹mmm¬^½šñãÇãt:ÉÍÍåùçŸ'--üãäååaš&6l ??ŸW_}•§žz Iê[Eðýë_¼ûî»äçç#I555ìÞ½I’(--åûßÿ>¯¼ò ¡PˆcÇŽ!Ë2 èóøz½^žxâ òóó™9sæCÝCõþÔ©S<þøãÌœ9“Q£FqæÌ™¤ ©¢(üæ7¿aèС‰Sx}}=óæÍcÞ¼y9r„“'O2vìXfÍšÅðáÃ9{ölŸx³xñb¦M›†¢(466ÞÇóƒ>àäÉ“Œ7.i<ÆÏ÷¾÷= ‰F£–-[Æ‚ ¨­­Åï÷'eŒ].C† !==ý¥)±´´”ùóç3wî\ü~?ÍÍÍIç1`À~ûÛß&n…=ó;sæL† FUU»víbùòå,Y²„«W¯ÒÕÕÕ'ž,]º”'Ÿ|’‚‚êêê8wî ,`Ñ¢E”••qá ™={6“'OæØ±c}⩪*?üá5j>ŸP(DUU ,`áÂ…|ôÑGIçÙCûöíã±Ç#55•p8L]]?ùÉOzñÔ©SŒ3†Y³f1bÄ***úÌ3RUU…‚öövºººxæ™g˜3gGŽáã?fòäÉÌž=›‚‚.]ºÔgž[·neøðáÔÔÔÍøùÏÎâÅ‹9wî~¿Ÿk×®%tñîÝ»“¶Ž333ùÖ·¾…Ãáxxýú0/utt$L9iiiIS~ÿuuu%Nš‡`0ˆßïO€Üx½Þ¤µ£ç˜––ö9žííí÷ñ I9ý¾÷Þ{?~œÜÜ\@b|UU% ‹ÅPU‡ÃA÷—ŽÊþ¯Íwo¾ù& ,@–e4M#‰àr¹B`·ÛéèèÀn·#Ë2n·›P(ÔçÍ|ÕªUüìg?ãüùóìÝ»—h4šàiš&ápUUBàóù’2§ ´µµ1kÖ,þøÇ?RSS“˜CÇCWWáp§Ó™âŠF£|CÉ1‡;N$IÂétöy } ‰ùMII¡³³3!S²,#„@דƒæ÷ïÿ›––FŒ¢(ȲŒªªèºžHùHMMMŠ®hkkcçÎ466b·ÛòÙ›gOßSSSéèèHФ¼¼œ©S§bš&‰Ã“Çã! ݧ‹}>_ŸûêõzÙºu+3gÎäÏþ3.\H¸«ztqï}(YºâæÍ›8FÍ–-[sØcÍÑu!D‘Œ9M&=Ô†^PP@}}=µµµ~å MKK£½½Ó4ihh ''‡ââbjkk¨««KJ;öíÛGUU+V¬ 33ó>žÙÙÙsãÆ¤ö]Á¢E‹xþùç9zô(yyyÔ×׋Åèîî&-- »ÝN  ±±1)¦ÛP(DMM o¼ñUUUìØ±ŸÏGss3º®£i999tuuFihhHŠï¾¸¸˜ÜÜ\ÆOCC)))´´´ÐÝÝÝn'==@ €®ëܸqƒ¢¢¢>ó8p #Gޤ¨¨ˆ¼¼<<ObýÞ¹s‡~ýú‘ÍÝ»wéêêÂ4ͤÄF|CMSSº®ã÷ûÿŸX*òòò¸yó&¦irçÎrrr(**¢¶¶–`0ˆUUûÌçØ±cìÚµ‹-[¶àóùˆF£D"ÚÛÛq»Ý 0€ººº¤ê§ììl–/_δiÓ¨¬¬Lðôûý ž½ub2/]ºD[[/½ôgΜ¡²²¿ßŸ߬¬¬¤ëE»ÝΠAƒ(..&//UUillLÐûõëGaaaÒõÿÀ3f #GŽ$ &t±¦iȲŒÓéDA(¢¶¶6)ú)™$LÓüÒ™u±XŒ^xMÓp8 ?k²iãÆìß¿ŸaƱaÃŽ;Fyy9Ñh”5kÖ™™III ±X §ÓÉæÍ›ûäC9þ}:Û·oO(ŽY_¬«V­B×uš››Y¿~=MMM¼ù曘¦Éüùó™8q"¯½öÕÕÕD£QÖ­[×çƒDKK «V­Âåráp8xñÅÙ´i‘HUUÙ´i7nÜàå—_Æáp0iÒ$æÌ™óÍnœª­­eË–-(ŠÂw¿û]–,Y’t ¼ôÒK>|˜¹sç²råJ6oÞL4Åét²nÝ:nÝºÅÆq:Lž<¹Ïó{ûöm¦OŸÎOù„7Þx§ÓÉ”)SøÎw¾Ãúõëq8Lœ8‘¹sç²gÏÊÊʇÔ””0hРÿoäíÿÌõ7fK‘ÈIIEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_smellit3.png000066400000000000000000004676161202542755000211000ustar00rootroot00000000000000‰PNG  IHDRôÆ$r˜sRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ !#~N IDATxÚì¼wx]Õ•÷ÿ9åö¦Þ{±d˲ä&ŒLM`ãÁ’ÄdÈãPl xB d„7!_„“€qŒãnÀËMÝêíª—Ûë¹ç÷‡ä3(˜™öNâõ<úC÷ìsÎÚkïÕ¾kÍúõëÕÇ{L}â‰'Ô?ýéOªÇãQUUUwïÞ­þüç?WÏGgΜQ÷îÝ«^ éô³ŸýL}å•W>ÕØƒªßþö·?öúÉ“'Õ}ûöý§òwüøqõî»ïþTcÔ¯ýëù}``@½óÎ;U¿ßÿWóñÌ3Ï¨Š¢|êñwÜq‡Z__ÿY¿úê«ÿa™ ©·Ür‹êóùþêgôööª7ß|ó'ŽÛ¼y³ú«_ýêof¿ï{ßS{ì1õ?øúòË/«###ªªªê©S§ÔG}ô¼÷tww«›7o¾`,þŒÞ|óMõÉ'ŸüTc›ššÔ5kÖ|¬µµµ©[·nýO寳³SýÚ×¾¦F"‘OÛß߯~å+_QÀ´ßC¡ºzõjubbâ¯æãå—_V‡‡‡?õø|PÝ¿ÿGdý£ýè3¿{õêÕêÙ³gÏ{-‹©+W®Ôtà/Q,So¹åµ««ë¼×ï¹çµ¹¹ù¯’üÊ+¯°{÷n;wîäü#/½ôsæÌ!??€¾¾>ººº0›Í³wï^Ξ=‹ÉdbΜ9¸Ýnººº0Ìœ9ƒÁÀÀÀ‘H„ÑÑQDQ¤¼¼AP…¦¦&Ün7¹¹¹ddd …hhh@QÊÊÊ0™Lø|>‰F£’œœÌù¨§§‡ÎÎNA ¬¬Œøøxíz8¦±±ŸÏGvv6ÙÙÙÓxÈÉÉ!33¿ßOCC’$QVV†^¯§£££ÑHoo/……… ‘e™Y³f¡×ë‰ÅbÔÖÖ¢ª*‘H„O¢¶¶6FGGñx<ÚoÑh”ææf¼^/¥¥¥X­V¶oßÎàà :ŽÊÊJΞ=Krr2”——3<|ø0?ü0²,³eËW\qO=õdtt” 6pÑE±mÛ6úûû±Ûí”––rÝu×166F4Åï÷óƒüUUyíµ×p88nºé&<]]]üö·¿eÅŠœ:uŠûï¿NÇ›o¾‰^¯çꫯæ¿ø»wïÆívó›ßü†eË–ÑÝÝÍÚµkÑétlݺ•h4Ê 7Ü0-øéOÊ—¿üeøáHMM ‡±±1JJJxøá‡©««£µµ•M›6qÕUWñ›ßü†§Ÿ~Z €Þ~ûmÍ™ªªÊ}÷݇ªªlß¾][ëx€ÆÆFZ[[Ù»w/«V­šÔ;vŒ×^{ NÇ+¯¼B$!++‹o|ãÜrË-(ŠÂ¿øEn¸áÌf³füþõ_ÿ•={ö …èï裡¨ˆçŸ—ËEgg'üã¹êª«Ø¼y3­­­Ì;—¶¶6~üã³bÅ ¾þõ¯sæÌ<Ï>û,ÕÕÕìÚµ‹‹.ºˆû¼<ü~?<ò:ŽææffÍš…ÍfãÈ‘#$''“••õ¿Þ¡ÿìg?ãñÇ'==ªª*Ž=Š×ëE’$^zé%ª««¹í¶Û4˜˜H]]'Nœ 99™‚‚öíÛGcc#uuu¼ñÆ\yå•9r„o}ë[èt:vìØA__UUUüú׿fÆ Äb1ZZZX´hßûÞ÷¨©©ahhˆ 6pùå—óÜsϱoß>TTTðãÿEQÈÍÍÕøw:9r§ÓÉã?Nyy9ÅÅÅÚõM›6ñ»ßýNs¼‹/æ7¿ù ¿ÿýï‰Åb477³hÑ"¾ýíoS[[«íù+¯¼’W_}•ýèGèt:?ùÉOèèè ««KÓ‹7ÞxƒŸÿüçÄb16oÞL^^Ë–-;¯¬¸ë®»ÐëõZµråJ~ÿûß³iÓ&/¼ð‹-âÈ‘#Ô×ד˜˜HAAßüæ7µ¤CEþå_þ…h4ÊÎ;q¹\”——³bÅ †††æé§ŸæÆo¤««‹µk×"IÛ¶mÃívó…/|A“K(âW¿úUUUx½^þùŸÿUUÙ½{7ƒƒƒÜ|óÍZÀ ð“Ÿü„o¼‘ŒŒ ^|ñE¶nÝJ8¦··—ŠŠ žzê)öìÙÃÐпüå/Y±b{÷îeýúõFTUeÏž=$$$ I‰‰‰Ü{ï½øý~:¤­ÑøCöïßÏÀÀo½õW_}õ´u?{ö,/¾ø¢¶¿Z[[™3g·ß~;7Ýt‚ °víZ***4§ ðÆoP]]M `óæÍ òòË/“™™Iff&Ï?ÿ<¸\.ž~úi.¿ür|>÷Üs¡PˆÐÞÞ΂ xýõ×¹âŠ+ذa{öì!àt:©¬¬Äf³ñ /píµ×b0>“NÊÓ¼»$‘““C__ ‚@ Àï÷³`ÁæÍ›‡ÙlfñâÅ$&&òõ¯€Ë.»Œ]»va·ÛÙ»w/k×®àŠ+®àÞ{ïåÌ™3<ûì³TUUqäÈ^{í5Ìf3ªªÒÐÐ@cc#ßùÎwƒÒÚÚÊÀÀÕÕÕ\{íµš!¿ÿþûILLœ6ùóçSYYÉÃ?Ìý÷ßOYYï¿ÿ¾æúûûÉÈÈàúë¯'++ §ÓÉ¡C‡Ø¸q#‹UU©­­%ðøã£ª*—^z)CCCÜ|óÍÜxã¼ýöÛx½^/^L$á¿ø}}}¼ð ìß¿“ÉÄÈÈÈ_ö/ùKyä/^LVVGÅét²k×.Ö¯_Á` ¾¾žS§N±lÙ24‹¢È#<‚ÕjeõêÕTWWSRR‚ÍfãøO<ñIII¬[·‹ÅÂêÕ«q:¼øâ‹¬[·ŽË/¿œmÛ¶±uëVÆÇÇyýõ×Y·nf³™ÖÖV8À|Àš5k¸á†Ø¿?/¼ðÂ4þEÁétjQ«Ó餬¬Œ•+W’‘‘Ó餾¾ž7ß|Q¹õÖ[©««àºë®ã›ßü&O?ý4wÞy'’$ñÈ#0kÖ,*++ÉÈÈ`Ó¦MTUUÑØØÈöíÛ£GžWžW_}5ëÖ­ãìÙ³|ç;ßá†n ''‡ãÇk[RR’6Þív³}ûvvîÜ©eH###ÄÅÅqß}÷a³ÙX½z5ƒƒƒ»†±XŒo}ë[311Acc#¥¥¥tuuq×]wñÀ°páB<ÀÒ¥K)//×3''‡––/^ÌßÓÕÕEYY™††ŒŒŒPYYÉÂ… µÌ¬­­;ï¼€eË–±}ûvB¡µµµôööjz½~ýzzzzxàøÊW¾Â›o¾É³Ï>Kff&ªªÒÕÕÅ»ï¾ËC=„$Iœ>}šššúûûÉÌÌdåÊ•Zv¾zõj-°û0¿………üüç?gÕªU\qÅÔÔÔàr¹ÈÍÍehhˆøøx>ÿùÏ“ŸŸÛífË–-üâ¿ ++Kã¡©©‰Í›7#Ë2_þò—illàsŸû÷Þ{/uuuÔÕÕi6î§?ý)MMM¼ôÒKüÛ¿ýÅÅÅFÜn÷ÇÊö•W^áÖ[oåæ›oæðáÃ<û쳄Ãa^|ñEÖ¯_Ýng``€;v°téRÜn7ßøÆ74½]¿~=<öØcSYYIff&¯¿þ:«V­Âl6s×]w‘žžNKK ---ìØ±ƒ•+Wrûí·súôiüq-Iº÷Þ{‰Çårñ§?ý ‹ÅÂ%—\ºuëhnnæøÈš››µlÖét’ššÊ5×\CNN7näСCFî¾ûnöíÛ§í‘uëÖ![¶láË_þ2………¼ð Øl6æÏŸÏçãÅ_䦛nâ­·ÞâСCȲ¬­ÅŸÓÂ… ¹ÿþûñx<¬\¹’5kÖ°hÑ"vïÞMaa!ªªRZZzÞ{ÓÓÓ©¨¨ ¾¾³ÙÌÛo¿MUUƒµk×RZZŠ^¯çõ×_G’$âãã™7o>Ÿ_ýêW|õ«_T¦§§³bÅ ²³³ƒÁ€Ñhdxx›Íö™tPüsƒÝÓÓ3 vš1cO<ñ‡æúë¯çرc‚0 b¸ë®»(((`ùòåèt: æ8gLÍf3¡Pˆ@ €ÙlF§ÓiÃÄÄ„»µµµ±jÕ*yúé§‘e™uëÖñÝï~€ŒŒŒD,Š¢ðì³Ï¢×ëY³f ªªÒÓÓCkk+n·›G}”‚‚žxâ î¸ã¼^/&“i^¯‡Ã(ŠH’„ÝnÇï÷h²˜˜˜  ÒÖÖFww77Ýt“æŒF#‚ LƒúÏGG‡(Š„Ãa|>ÝÝÝ´µµ±téRŠŠŠ>r¯ÕjÅjµ0>>ÎØØ­­­Äb1-‹¶X,˜L&A@¯×Fñx<¢áp8$‰H$‚Çã¡··—¶¶6æÎKYYÙ´±v»}ZtýaÈéôöãÿ˜øøxyäÖ¯_O(Â`0 Ë2¢(bµZ5(ñÃ{êÃ4>>ŽÛíÖÖëK_ú¡P³ÙŒ$Iˆ¢ø±r=÷û¹àPQ¾úÕ¯òòË/³aÆiŠs®ü"˲¶‡Îíc»ÝŽ^¯×Þ§( ¢(‹Å4xîéõzìv;€Vv(Š¢)àÒ¥KY·nÛ¶mãºë®£µµU DQäo‘ÚÚÚ¦ÁÛv»_|‘ºº:nºé&¶mÛ6m¼×ëå®»îÂáppÉ%—àp84y&%%!F£‘H$¢­ÅbÑÖÎï÷‰Dèèè ­­K.¹„¼¼<{ì1²³³ùþ÷¿¯ÉÉÉÚ½¦?ýéO466òàƒ"IN§Sƒ°ï¸ã–/_ÎsÏ=ǪU«´½üaÎÙ´s{'..N+mÛó.—‹H$¢Ù¸•+WO$ÑžõilÇ9Ý´ÙlZ bbbBã¹°°E‹M³Ïçöé¹òÛøø8‡¶¶6Ün7_üâEQCÎéS8Æívk|Y,MoÆÇÇ µµ•ŒŒ ª««§Ù6³ÙŒÑhü¨³ùN=øàƒÌž=›§žzŠ5kÖàv»EQ³¥ ZY2--í#s:LJßï§­­¾ô¥/¡ª*ƒN‡ Ú¼Ïg;A@§Ó¡×ë ‡ÃÜvÛmüö·¿eÓ¦M¬X±âcËbüãÙºu+K–,aþüùx½^t:¦ÿñññx<&&&ðù|·ÜrË´ç>úè£ñÄOpçwj{LUÕóÎùú¹z@]]Ï<ó ÑhTËTUehhˆ‰‰ V®\ÉÌ™3ikkÃjµÒÝÝMGGY–ÉÈÈ »»›ááá}YNNªªòÆoÐØØÈ©S§¨¬¬ÔjóÕÕÕdggcµZ©««£ªªŠ¯}ík?~€ýû÷3111í™Û¶mc×®]Üxãtvv¢( _øÂ¸ãŽ;(--åÔ©SÌœ9“5kÖpöìYRSSE‘-[¶h<”——ÓÜÜÌÁƒÙ±c¡Pè#µÑÅ‹#Iååå,[¶Œœœüîw¿£¦¦†;vh™ÉÃ?ÌÀÀÀ´g|þóŸçù矧®®Ž×^{ EQHKK£´´”ääd–/_NII v»‡ÃA{{;©Íÿã?þ#.—‹eË–±páÂu–粄^xºº:6nÜH$Ñ"F‡ÃÁòåË™9s¦ÿÿö·¿ÕƃAþÁÉÊÊ¢¿¿€ššæÎË­·ÞJ}}=)))Äb1vîÜÉ¡C‡èèèÐjR&‡ÃÁÉ“'äšk®Áår±téR-ZDFFÙÙÙ„B!vïÞÍ{ï½GMMÍÇÖóÏœ9믾ʌ30™LÌ›7––úúú¨¨¨˜6>..Žääd6nÜHSS§Nú‹Ùæ¾}û¨¯¯çÕW_Õ ÑùHJKKyôÑGy衇hjjÒú:n¾ùfq:tvvžW&ÿ›xCC¿þõ¯©­­åúë¯×®ùý~ÚÛÛ¹úê«Y¾|9uuuFFFFhmmÅãñ ( YYYŒÑÑÑñ±ï‰‹‹#''‡—_~™¦¦&Ž;F~~>ééédee±|ùròóóIHHàäɓ̞=›5kÖhk\SS£õrœ£'NðÌ3ÏpÛm·Ñ×ׇ×ëåºë®ãŽ;î ªªŠÓ§O“““Ãm·ÝÆàà z½ž¼¼<6lØ@SSG%//¯×Ëž={4HõÏ3»òòrEEETWW“››KBBUUUüîw¿ãÌ™3lÞ¼Y³¹O=õ”†l£K/½” 6P__ÏÆ èõz.¿ürt:Ë—/göìÙÄÇÇc±Xp:´··D‡¯¾új<‹/fñâŤ¥¥iÉÍŸÓòåËÙ´i“fÎ9®k¯½UU©®®fΜ9$$$°lÙ2¶nÝÊ™3gØ´iãããyÞ¬Y³´Àöĉóµ¯}b±yyylܸ‘ãdzÿþó¢X‡ƒÚÚZúúú¸ì²Ë…BÌŸ?Ÿ¥K—’™™IZZ‰‰‰lÞ¼™#Gްÿþ­ç;vŒ×_ÄÄDÈÏÏG’$vïÞÍe—]ö±{Ñív“––†ÍfÓ|Ó¹Àíµ×^£¶¶–Í›7³|ùr.½ôR‚Á .déÒ¥dggO“÷‰'())áÖ[oÅét  …B„B¡Ôï?U ý+_ùÊcÍÍÍ477“••Å·¿ýmÁ`‹ÅBff&;vìàƒ>`æÌ™ÜxãäääÐÑÑAMM ‹-"33“={öhMN ,@Q’’’ÈÎÎ&‰DX°`Ë—/çÀœ8q‚¸¸8fÍšÅÒ¥KÙ»w/'OžD’$***8yò$ï¾û.ÃÃÃÜwß}$$$°uëV µ àäÉ“„Ãaš››9sæ ùùù,/gÏže÷îÝ´´´hHBuu5‡âĉ8ÊÊÊX°`;vì`hhˆ|ÄÄD<………$$$Oii)»w禮¶V«mWWW³ÿ~z{{¹øâ‹™1c‹…?üá¬\¹rZ¤Z^^NOO'Nœ`É’%äää0gÎ/^̱cÇxÿý÷ ‡ÃTTTPXX¨9òòrü~?]t€Öıwï^ººº())!99ŸÏǼyóE—ËÅìÙ³Y°`###;vŒ… ’““CEE‹/æäÉ“>|¿ßOEEååå:Äܹsµ±ް].===Ì;—ÚÚZöîÝK__wß}7999,X°€wÞy‡öövÖ­[Gnn.>ŸŒŒ ­·¡¤¤„7Þx¿ßÏŠ+°X,ìܹ“ÖÖVrss)((`Þ¼yìܹ“P(ÄÒ¥K©¨¨˜?ùý~ŠŠŠ8vì˜uC^êë멪ªbÉ’% H.ºè"Ž9BMM à÷û™;w.’$i5Å¢¢"<GeÑ¢E¤¦¦RQQÁøø8óæÍÃ`0h–III®¹æ***رcEEEìÚµ‹ššª««¹òÊ+5ˆôž{îù›ÈÒ‡††8}ú4Øívzè!RRRˆD"ZÏÌ®]»8zô(ñññ¬Y³†ÔÔT¼^/û÷溺¬Œòòrvî܉N§£ªªŠ9sæ Óé0̘1ƒX,†ÏçÓÖ³¾¾ž÷ß_k]¾|9ûöíãƒ> 3wî\Z[[Ù³gmmmÜÿý¤¥¥±ÿ~¬Vë´šh]]>ŸöövN:Err2ӚжoßN}}=·ß~;³fÍbÉ’%466räÈdYfîܹ,[¶Œ;wÒÑÑÁÚµkÉÏÏ'’’BVVƒE‹ñî»ïRSSƒ,ËÌ™3‡ªª*hhhàâ‹/&77—¼¼<ž{î9V¬X1ÍΉD8pà€Ö°\YY©ñsðàAÆÇÇ©¬¬$77—‘‘>¬5ò-X°½^O~~>6›MÓ·œœrrrcÑ¢Eš̘1ƒ9sæ Iï¾û.³fÍ¢  €¹sç²dÉ­L7<ø f[ÆÆÆ°Z­ÓÓ;ìÙ³g3wî\êêê´uKOOgÖ¬Yøý~²²²x÷Ýw¹æšk¸ì²Ë´úúŽ;hjj"--‚‚\.sæÌ¡¯¯]»vÑÙÙÉí·ßNaa¡Vö¹êª«>»R^ø`ä?ŸÆÇÇÕC‡ýMÎmllL]¿~ýè³µÿJÚ²e‹ºbÅ Õétþ?ÉÛƧvèo—"‘ˆºsçοٹ­]»ö?ôÙÚ%íÛ·O½öÚkÕ¦¦¦ÿQ>|ðÁý¤í“HP?î› OAÃÃÃô÷÷“››;íÓ  tþ§hÓ¦M”••1sæÌ ÂøŒ¢Ñ(---Z¦ø·ÚKpþwÒöíÛIIIaþüùÿkçðW;ô‰‰ î»ï>–,YÂÉ“'yúé§?¶s.к@Ï?ÿ¼ÖÐù¹Ï}ŽË/¿ü‚P.ÐúO$ù¯½ñ½÷ÞcÙ²e¬^½š‡zˆ––fÍšuA¢èï–6oÞLww÷_³hÑ¢Ôöÿ^hçμúê« ðä“O^pèèïšz{{Ù´iÓ'Ž[¾|9sçÎý¯uèçNkHIIѺÛkkkùÍ_Åœ¬'.æFbE#úX1¦B ‚:*% ‚JDÔ ˆÄˆ C@%‚!ô„c@Ž)D#:&;¾U„© D‘PˆbF!„0EÆ@…:DbÄTEЩd!J*z¨¨(H¨H(S¿ŒB AãQBAñ‡1™Ñî3¨!D%FDÖ¡ !#ŠL KÌGH4 ¡ C@ºþïð£Ž1D$í>PP‘à ,"1Ä)AbòsA‰"ªÆï¹çA‡Š€ ªÈJ”¨,OòN"²Eˆ©„¤ÉµRˆúÃèÍ2ªö^ …(2Ñ©­$ "¢ QDT¢HÄ&לQ&ß'T"üûg"1Möçæðƒnê½çøÓF§F zTÂèQTt±aQ?µ– ¢bRš² IDAT*Eß)A”0zíù"1‚~ã‹+ocÆŒŸJ'ö>÷i{öüå@øÿüŸ¿[‡®( ²,“˜˜ÈØØ˜öûÑ£GÙ¼gF³‚?1D¢‚¬í+‘’ªLê-Í>H(ÚÿQujÿ 1 „#ABLÚ‘Ø”>‰„ÑcVüxC"FóäU‘)½1†B„ ÿ¾Î锄‚S•˜ Níõ˜¦O7©#”LÚ™èä^õG1šEmlIUÕ(aQL”“×T$UÁ¨„@…¨(‘t“<«"‚nšîI(šnã#ŠLÔÁ® HLÞ£‚NôˆBLÓ=‰0zέ€‚ˆYÖìø9{%ôS¶öœ¬¢Èèˆ ¢  £‹Eˆ‰"Q$tD5û|Î&+ˆS¶uÒ"Ÿ³SAŒ˜(sçWïüØÓ ?Lmmmœ½÷^Ò?aÜþÿûÿëzVV––ôööríµ×jL¾í`nußš¹•Da”ZSyn¬/R$Æû ‘b îzd}„fSÂL"‚Žn2Qqc§6 h¥Žr*†x3ù2è›r®5ŒQð’N?-{zð/½Œbs+! Ô3‹Q’˜Ë Ò¤‘™˜q£*ãb©ª“¡‹aQUG) Œ ‰„0àÃŒ½žrñ*)±!Ä4‚é%d†Qzó$ËVÄ!cˆT*¢§IñÒ`›;!Äé“¡‰jæ:ïÞµ-GG3Œ% BèQ)žf\ŒC/† `bœxTü˜P)®mæ`ís¾˜Ã˜ŒŠ€/IêAŒô ˆbÁ‹‹8œäc"@:Ìâ äáÃB²2œ‘:Φr–dÑ2i b12bNŒþìaQ}ŒIô¿yšÙ+ò°áfŒDt„Ib”nrðcc˜ „H£ ~¸0ãg€4¼X1¢˜zÈÂ…ƒLºÐ¥ž2TR”!tB·h#q-°9þæ+æ¡gòe?f²ÔVò”nÎÊÅx°1B.AŒäÑA¼:A•«†#qU8ÉÀ™†˜§Ô G£6,ÁŽzÒ¤ô„ñbÅŒŸº7‡™Ÿ?JOOϧvè"ðIºÆþŽ3½^¯Ð÷çÝæõ+l”ª,™y†Q)A1'ô’…9Á^:Œ…̤‘"‘E…j &!@k¬£À@˜3Ìa1µœaÄ1Š£$2A&WïáÅÃI”\_D´2H*AŒ\üþN/(#,ë§\šÄé$0F~ ‡èbÜG=vÜSûß„Ž(c$`!€/Lø0“Â0=ä0;ÖĈ˜Dû›,Y‘Èi$2D/Y¤œÌŠ5pÀr© àÁÆ ¨D›¹ØsfFô‰4ZJ!‰|¥©ˆa24ç›Â$“ÁIŒ’Ì=äÐúF߸´NK6ª}dˆ™˜n¢F?Tq¸ˆcˆdš)% © àÂA±Ú‚^ÁÊ Ìç²¢íc—á ªÜ5$‰#øe†:„<\8è~³–y+lx°‘Ä0Ä1F"6Ü€@a¤Teˆ†JÜ‚ZÊ™GÝ”ã”Id”:f£#Œ4¥=C¤F… t2D zÂx°Âoî&E1ãÄãÇŒãÄ“Ì0ñŒB$1‚ ;=äE/ñŒ1HEÁ6üF=d“K}d2A ñŒ3D  ¢N%f|XðsäÍQ†íE *‡>™d}²ÍøoÜ«««¹ï¾ûøîw¿‹,ËÓγ]‘ò¦Ô$¯¿K4q‘r˜Ü‘^:’²1 !2T'9¡^6Äß2oŸ1¸™·áÁN2Ã|… ÔSÆ;\NW´¾ÇÉ{8ÎRbg(ˆtð¼~ *ƒ„YJ-os=nl$3ÂÅ Œž F¼Xé'"©…k”mÔSÆNñ*B¸2´‡å,?·Lžd¶X}ŸžüÉñ “Lc\íßÁëõx°Ç×F·qB®äÅ$Lõ$1Ì+òɱw“é¡B¨e—|%A dÒÇB¥†”Ð6››SÌ%†H#ÑBbl”~18&(ïl$” ãÿKXƒ+8)¢•zÊpàB±KäG;É‘9‘2—0zþm´ ùœ¦¸œw°á¡“| i£ˆVT¶r-! dÅz¹JÙ‰lˆ¡ ÂÀ{\JŠ:ÄÚþ_òAâ<ŽÛ‹°ã¦$Ò‚(Gùéø°Ê3Ôö Ëé# ™(K9¸€8\,à8ÇYÀYf`ÁG=HÄØÇr"è( Q’8ÍbHÌ¢žkÆ·ÓnÈgØ–H=e„0C$™Zæp†!Rh¤”«¢»èóxI^ ytr5Û8M%vܤ*C¤8‡±Ç¹ñb!„BÚ8.ͧCÊ#ˆ‰«ØL„Ã\D Å”ÒLNNQ‰ z)áìgÒ ø¤ƒƒÇý _ø?ü0~¿ŸÕ«WO»vKîÛŒ9è9£ƒy&Œɦ#AUÅš ߨA=¸ˆ#1²è%-6ˆ]t1,$Oy?|äÓ@Œ,z1ªAâ˜À"øa [í!Õ;DºÁL&fä*=(’D/Y£2cNºÉÆD^l‘Á.¹1èB ‹I8p‘ÄŒØñA‡‘àTð©bÆO ‰lzÈRúðŠ,ø‰CÂ:ô„ÈŽv㈺-ÊbŠ=aÒ£ÄAîzÈŒõa‚ K) áÃŒ‰Éy&1B CèÔÉQü+aúp³)H‰ œ ˆiØ/IŒ`WݤFF0Ša’å!R"„=!,øH‰ cÓy©…Q JIPˆEDÒ NL0…B(’ˆI ’ !£àe ") ›@¬‚=aˆAŠk V½ƒ¢˜VlxÑ©Q"‚Lrt˜ ÙI“§pú°LÞ‹Š?‰ŒNýI ãÇB¯ÃŽ3~D"è‰g|rà#Œ3,1©±!¬²“ ^GAF£˜"!’äÀH3~RbCHD5„&65/ >¬xUF±óÙƒÑ}‚ÍPÿ»ºÅbáé§ŸÆçóa³Ù¦*vÙ\Æ´ã4Ë¥¼ut>KæÅg3Ód*A F2ÃxÍ&úIÇ@;.BF½¶8á)¸Ý‹tú'ÿWƒ$ÜGÙôÑõàÁJ³ˆTf1œ&€ ^M©$☠'N2 —hgLˆ§‡,Ò *èh2•A‡ }B&ÖÉñt$1Ì5™ FRBBѱ¤*OS" …d†qá Q¡KȦB¢ÈØñ%ì>tIQlx˜ Ž FFH¦,ÚH~>£$R’sE–'<Ø™t¼}d’bÙ¼0Ÿ3~ô„qá €™tú ¡Ç‹•0z ŽÒb˜”©g)“‘¶.‡Ã…‰ŒâÁFP0â³S˜ +d5ŠG° UÍcÝTp€VRbÄó“+v¡ áÁÊ(‰ŒÈ ©XñR@;2Q˜pá ŽqLQ b$†D4&#ª1¢S 7‰H@bU~<Ø h —,¢ÈDÐ1A>,“2r*~£ ^Ò`œ|˜±àÃHC¤ ¢ÀD#¤áÀ…32 %Uv"Ãògvèº ýciÕªU\y啈¢ø‘#-õJ˜´¬ N)†2˜QåfˆTTLj€¤‰QºYŒ“@y¸ˆc”$’›]äjÐjc„Ñ1@*"a2CŒgœ’p.£Jö¢tư!¥KÌfŒB°˜| É“´ àÆ>‰Îé2)Å‹ªôŠ“HS=~ÌSûÖ ~Ì â‘>¬Œ‰ ¸q`­*a˜! èˆ0N<ýbIÆQ`ˆddÂèÑ&&‰4™Jè0äbVýè•0Aǰ”„‚Œ+1‚%V|X°ã&Oé&%6„¼Pψ9ž Ñ^ #Š*AÕHD”ñ`Ǭúñcb\ˆG"*Œ ñä¨Ý¸^¬“H…†€ŠWµE¡zðbcH—„OoBÑI„b˜A…äª<†0aÂF@5ˆ™ñÈVLj£‚—1)—`GŠ©(âdrÊd)#*2.O¢!*ÕELðb'Ìdé2ˆ=aFH"ˆ‘™ l„ÑáÇ‚füDÐáÃLñŒcÅË ˜Š„B=.Á‹É¿Äè8aAÏ„GTÕÄHHÐcˆF¡'&‰ŒI „ïÁFºÚOνMÒgvÀŸd3¢ÿ& 8ßžÂür7¥n¥YÌå½ ùòÜ> ¢aÎZ .íÅ „ð6zÈ&‡nZ)"žqj)GG„º! †…NòH`Œ2lt 9¤3@*ƒX“¼(èù<;‰ÑJ'˜? ËÅÚ‰'&±U¤](À †Y,%ŠLŸ! úÉ¥‹ Fd¢œ•ŠI£‰V¼DБG'*Ýäp\ž‚DyÚ‰Œ"Ã…êÄ©.Åbˆ”QÏ8ñ0qVœA¡‡qâÈÀI Cè ãÇLXÖ‘“ FÜ::!ÂÆ‰G&Š3µö2¬x)V[P€ÞÀˆDnZQdB‚‘ÙÔAG?é8ÅtSï2¤Ÿt¸ÉÀ‰‚„3*PÉ)FHÒê|‹xŸ>2±âeÀ’†[¶áÃB½ïŽ4=âT¦0ƒ³ô‰è SN-¡©Z_¹Zg$„$+Äᇙ(l¤1€/}dj=“™œŠ cÄ“‰+"i:&†ãIýŒÝø c¼ÇýÜѨç£~)“,˶ È6Î5`X‡Ž(J4àÆÁT‚§jŸa$UAbø° "àÂŽ65DÐUt¨ø˜ÝÕŒ.>‚;ÎJ¯ÅB>Àƒ.r ªFĨB©Ú< ã~FI¤1F&}(ˆXUÃBåÔBL SÌaœ’&™arèF‰H$ØÇX=Š[¶ÑN3"-¤ ƒ J)ô SP"] ÆIeUh3AÉÀ)¹OÔF\·oþ8‚¤23ÒL@o ›lJ•fRGFÙŸ²”³Â$l~ ïNFî$Ð+d2‹F Ñ0fÉOP† |ÈD!™LµÅêQ†Ä$úÈDFa1ï3H*½dbˆ…™9E½a^¬Œ≠>Ì,ˆÖ`Žùñb£UŸO#Ùô å$s)ˆu°Ô}”^s:mú|HÇ>cƒY 56H(fÄ+÷áÂARh”JO- I%t“C#Ä1UõÒ,L"4YôâÃÂ0Ɉ±ÏVñþ4û:?µ …$$‘1Bé è”qêŽ'#V¦P$µ¢†$†¬)(Hô=ÙHF+l‚—²°áe˜dt$áÂA½¨@#ñØpLÕ»ÆH WÌdŒÜSØ 049-ÎÁ‡/V"è#:’•ŒBˆ ÑA9èO!@,ø´ÀXG„ âpcGG/6ÚÕ²H7vBLf²Mj ñò8vÁÍ (ˆ “‚;™ô2K OébDŸˆ_šÌ2ý˜0ág„d\8¦ÅÀ‚_kKFˆÈ2z!Œ[¶ãl#LL’`CE`XJb€T\ÄáÂÁ ¤ªƒ´ E¤ËýBL«í' #D‘ñÊ&ˆ'MB¸±EÆ}²ÁŒ:"S‰’‚.âˆÃ@n£“€Š€3tS¨ÈÊqÈDqáÀH …zÂè&GkÀ 7¶©¬VÆ‹a’Hb?fI™l¬À:…bzE«V.ñcaŒD²•>|’™`Ðúµ&ˆŸBbø1k%'È(šmç³;ôO‚Ü}ÿÓ=×ÛƒIJædb9ú$é? µ0ÿ ¥‹ÜTrŠ‚Xï$_ŒSÌ Pl#ŸŽÉL £$±c¸¤8ziø1QxÚMNA7-Ì`˜$²è#>`!>,HDÑá˜PE‚:†Š@"£t’GP4ÒI}R&ãb<³h SÈ〼 ‘9tÑÀ¬)¸i²#u'è$ 1Ž|:É¢SB%&ZæÝL Ǩb‚8â¤IØýtVr.Aa2ê«e6ÄcÁÇ|å±D«PHTÕi›?‡ntDp’…áNôcô‹iè„(FBdटôɦ›Ô UãÇ8WI¯œÉ©Äá¢Q.¡•B†…dtD°ãfp ¶¬à.âh”KAv B˜ˆMF Œ›ãé’sñ`£€všÄR†Gñ6ÒèÇ…STâ,Ó‚?{¸œ ±%êQN“õg=’!‚Ž“Â\"HXñ¡ iuöDFÉzh’K¨a6¼ä…º‘“IF:Å<|’…qdч“$ÜØq0A)ø õÖRºÅlBHb„Šh ŒBÚ( ·Ð$ÎÀ%NƒRšèÓeÐ—É ©HDi'²#ž(" Üœ¢™(>,” £Ÿiß ŸB¡„ ¾û¼4BòÿÏÞ›ÅÈ•^wž¿ïnqcß#3rϬd’¬âVd±H•¬R•$«eY†—–»µ§îæÁó0˜—y1Ð10Æ]?ΊØ#N—}–¡¥ÖR6c| K — "ô)SÄÅPûT¹G-±@ψQ#‡‡À!D‚-RRj B7&ôLé1+:c,„"iYHòªƒœà:$3”>:a¥>q…®¦u-Px˜8DÅÍóÑ„\«M1°“¿Æ¤iâ`Ñ E›´bã`Ò'ʈ0X8´H¥OYŸçX+ á‘£JOÄgÆ¢KŒv€lô‘ŹM’–°Ñi<4º"FŸ ô‰Ò$…‹IGÈ/ÙùIìg‚EW}&Y¼ÕŸšÑ1¶õu"ôécDˆ  " XKÎÇQ&XtHü•ÁŒ‰ xSr!¥­žçûBøD´>¶6 > ½Žü0†Rî„Æ01­GΨ* “Ç&¢¢Ïˆ0=b´Ha2Á¡ã'žé¾×|ö×ý|xýÿq lÆ„‚¦v(¤NÀÀˆ³Ǧa¤éù1ºÈirè‡éÇC£©ŠP•ÙbÙä²ȺÄi!y3Md*Ø‹ sÁJfHŽ•À}µƒí¥C‚.q\ÍÀÖFÔÈQ¥€CˆÖ(± ô)>MRTÉÓ'F‹$Gq1ƒßSfž&Ž™§FŽŠY nf¨P FŽ:Ù`’>ÔéòÜê«]½Í˜}–é¤Ä"’Dèã¡qÀ"m’l³Î±^àP,‚€©Ð‚=q‡¢Œ…EœT÷¹÷7˜fH u²¸ŒD8¾Ž°™`IÙ­&Ï˺–ÁZ õ•Õ¦FŽ!¶:?'ê÷§èÅbŒ®ËÛ%âÙªcÆ"ùVm’¸˜Ôj$7X¡ŒU£Ð"E…Uò4Ib¤øDe‘؉HülÆf‚I“4®®,uúŠÃ^¡Lý]âCÂTÈãb°À¡êcLQ«GŒ s<æ9&ŠdÉÊ\Þ(²•x1!Ë‘ºJÅv©ÅÄ¥§Åèåà J á¥‡É„†È á“µî{ ù°wH¨}™+w†ö”Æ(ËÀ‹RÕó®RÎZwщ0 I ?xh5¦™$ÂIÈdªË©¢Jž‰‚ÉR´mèD•¸Ù.ªÌ<1zhxÔ¼™Ö›Ôɨ}Ô0¸Ñ,,Y"K]M&RO_YtÒ8Xr"1C8 2CNqº8Š×U„?M󨓥ƒ,¼6£à3E#8¤zÄ&F— lµcìÄC§JžÆ„ÆFâÙ'ñ ÷'ô~]½ETÓÈ¶ëøº ng»!J p·Aì+WöYì0†Y‰°0*ªHx}2óm|]HߣÎ1?:æÈ*âw :¢Åzr—~$ÂÒÃ[ÉÇdì^TãbÿåH‘Ê$Oº^bË‹²hÉF7æRdÑx¾vT¼…¡MÙ¬<%êQˆÕ˜˜&–ïЊ%Iöº¸}9‡¢c„æsÊxÄóÕ»$c]†z˜è Ï4¡ãu5VNï‘5^N¾M¢Ùôý(¦å²08$}ÔÆðÇ0uЊ-å‘v¨Pg#¼Ë@D°Ü1‰Q‡a(Lº×B.ñÁ€xl€Õuq;!âö?ÂCèÁJüÛ“t{è:ø!+±a0#´h“ˆ3b)Y"Úbi†9Åš„ô kb×2Ðm˜sŽÑ<Èt„æÂ‰øS"“>FÔ¥í¦ÈØ-a@¬Ó#£·˜¸&i½‹q˜kÖH»ò¢Ž°¤Ï‰ƒElÔÃèº ,kJtУ‡žò±û#2nÛvÐ…>õÉÄ[x-´Õ&® ˆë,Í!ê°ä–0-—Ðx„íŽ y#LoÂRc©¿‡,÷¿îÚ±WÙô&¼4}‡¦â½ð9êd9ãßáÒÒ„ïè/òn\á_Ÿÿ·Œl“‡lñGüŸä›,q@„>w8˧¼op¦wn"Nä§´„5rÜã4m’œæ.K$p0¹ÁE6Ø&A‡Ûœe.p‹ ÜbŽc-Ä6ëê—®ˆS!¾Æ«ãkŒ,‹ïW¹Çi6yìè"ÃVê +쑤­Ðïr›iš´H±Ë*M‘â<ï)-k”–Xà$´cÁ 6«b—œ_¥/¢ü9çÊô:klsK¿À=Ná`r†;T˜ã>§ð|Çë\¡¢ç)ÛstBq©õõ÷ˆ0»¬±È!—Æ7ø®ýšdp18Á£ÀDã€%žç®bÞ/ð–~™5ÕÄ„y‹Ë|Œk¬²Ë1sÁîð*ßçPé‹'¾ÅU®1ºDYŒ< |Öû*St޵9vXÅÁDÃ'I‹7x…ç¹Ë)ÿ>S¡S'Ç>Ë\â5¥è¸ (}²4h“☧ýû¬9»ÜåyòT9Å}BŒƒ½ØscAÿ :ô¯~½i_&°ݧI“]ÖØŸ,“¾ÜdíÞmÞyÿ4ç/­¨‰mžE9=ŸCîñ|°;*I؉è#jäpã$hsÄmœ[¿Íû‰Óuú®¹ IDATTÉ3EgQ'CŸ§ZxðÜ ¥„î1sa—Q$Ä–ö€]}…JnŽ5ž²NŸ6CÆØ„CCììP!12Ô9bŸò>/àbÊ6%ã:Ùä)ôܧÄ}îë[$Ò`Šùc.¤M²Åu#C‡²Œ°±ÓcöX¦­P ‡-*äÉ竨¡†ÀÅEÃbÄP­ †XTȲ²ò”crj2i’ Eš2s ˆ°À‘\£-p°¨P E’ìr“ŽÉ“£t˜ Ó&Î19F„é#Cƒ æ)Ó C5Ÿ'J‡,„Øg!øÎ}Gå„îMYnh®ä%ؼÿ5r´H1 Bˆ±" ·IЕ¨=:Šõ~Ì ÚôÔž=®þûˆ" Åc5t&±‰Ñ§JžQ@`à’ CŽ>°¿yæ ýï„ý¯»Î6ï2^Üä÷íF›$Ÿž|¹nr&¯ ®,Ý…éˆ}ë¿eáªO†ÿÝðßp-ü %ÐðøŒÿŸ¹­áÍøzÄøüûÀ©Â}öÅœàsƒ*ù ”ŸOðmÞâ2dG¶@‰&i±É«èBÂðŸïü1ïÆ_àÏÄgÀ•Ñu|Cð-ã ³Á6wþ‚7¬«T)°êïòËã?â¦}ž‘*°Ÿîƒw£gøCñy" 8ÃmZ"͗ÿÂ0†ï².¶y̦”5pÄÅæ{D+C*' Üá:$Yc›ù^…DZ L&¼T¹‰c¼‘¸*¹šþ˜ÓÜå¡8IŸ(ÉXSµëyÞ,^‘‡ùšþÓ1m]Z¤x— ¤irÙ›¦ŸâO´ŸGgJÌíó±é5’^‡Òtž¾婨 KœÏõ¿Êðó쇖ðÐYìÓ‹D8dEï‹Þ-öŒ%ÉþÄæ£Î÷¸a½H˜ó”9Í=Þâ2oñ†<ÇÞà#tˆKYšˆð‡|ž ÖyÊÕêuBK8 ‹ïj¯à+¢Ï >clÙ¤yïrG{]±J”yåKpŸSx"þãxŠØðƒ~…=î‹“¼g¥N–eöéç+|—žò{ˆ›]lÄæú1·jç¹ýN‹—HÒfŽc +dÅfŒÅ«8X,rH†:}¢ô‰²ÆN°6‹0$;l°™x„‡¦ XƒIÖÙfÎ9fÁ/c Å\o–ð¬fä‡ÉL›ºt;“#cÒ4ñÐB'U).²™(3O†IZT)£FM¡B<%<}2zƒyÊêïÕ™ oªö†,RO§GO‹*¯‰U,åRæK!F¬xû\nÜ ’s¬8%lÓÁ.ÇVOÓYtJ”ÌÖØãÌø.õPš[Úyæ(S¡@‘#ž°Éâ´„®¹$E‹ó“÷‹'ÊÛT–òl ÷Ð,W—RÖ2sœá9¤ƒèβÊ.EޏÇ)" IøÎnÓD™‹–’"¨’¥Î›5—ŽHkŒ((±Í:u‘å÷©’£MJ­7u–Ø'K§¬3Å @…ûœ"ÄXNõt±•\ÚöǤE3Àt34Xv›,á°é=&.º„…$½2ïh¦{”>IÚ¤ià£S뜧lío½ Çb\ÃeeL\"ŒH¸u¾ÇrZ ƒ çÖo3‰æ¸v=ÉË—÷ÐÃ<¤ö:Ì9q,e$BZ°(Ï\Ðÿ¦™þCÈý‡_ ”ˆÒÃ`J“46CBŒñ$ü.vcÌ™•=zºÏý›–/8,ˆC:$Ðñ”f|€Í(r°Yg[í:%É­F–“<À³]“XDÌ"ô¢‰`UÔ#†®VnI½ §­%+å%wÕgÇG¤…«&JG¹Î$¨òÏBÌqŒ‹A‰ò~‰0•¯Cˆ):=U0²¢Æ¡Xàgäkh \êdƒóG³B=q²LÙÑÖxš[¥FŽš åp1:$¨+F<Ô¡IF²„é F€}u~?à$Q½O„A°¢œ˜aF4—R¼Ã%Úá”’ŠÉè ‰`³.9„ù>W–|‘#ê"Ë|ôˆ]ÖØaˆr—1µ‹5è$¢ÁŽ2ĘIÂAÔÕØy˦v9ËŽXÃf¤ì3Šh4¥C‚ž§§^Oê®3T”;ÔLÙ#F\p⟶HÒ$‹à t}ªv¯KTý¼’–Dé(¹FÛH0UzN—ºÈ2Q‚—cm.ØßþÀ#X0 ,™–Šlb2!‹’(’ w‰ÐWÎ@É-æÐ4)›±pèéQZ欉ôˆÉßc Úƒ$acH„A ¡ )˜ÊSd=)ÆØáÄìsêŠ8MRøBã@[ M’âtÑ|O(1BŒØ3—w¥) ²Dâqz8XìˆUŽ™c‚A˜! Ò ± 3Tû¼bÚÖÁO“,ÉÀCúØšcªkÊ$'Lœ#Bý§„Õ’T((£ Inqëu&}q1Úòpi“ N[Áê1$c¶:˜ù…Ïþ®¡xurQäYhqâà ýG¾:$xL–0r‚]±É‹‚¨ O8fŽÅ'ì:«¼{Cø0!©w*xt‚IŒžZ™Hh8I‡ªäIÑBS›j$Ïc6•ÌíªŒ}–96oq(ÙfMQK¥y’ƒEZ´1¢I:¸o%ƒ;Ø7KwÇ£€ŒW'0ù·Us1”ŽY6ž+æ‘HqÕðG°%RÖŠÊ@ƧA–qbJ&ç¢3ö¥ùI’Nàí>&ÄM^¤FKÝš¤™ s&*Xàˆcæ$iw:ó¨ûYÅb`žÒ"Ø Îàæ Y"M+`‚ÏÈ»%ø2hˆM_ñ_D¨P`› :$ØaUUÃd©ã!ca ×øŠ 8¢¢ ²¢ôÉÖ J/ I²¤†¡xðÿê¸Äé  iº3E§E’IFØTÉ¡C‚cöi‘’Æ„èùQÂb°îå¹?‘<$eH&ùUÏ^€ÍcA׿øÅ/~ñÇù`Þ¿Ÿo/OI&Ÿ~•U}m™–‘b‘Lîsš#_qþ/>š~_ÓøòƒŸãÅâC²BÂSßš~Šü»ü\ÿ«„¬#-ÂÎ~šMž0Å`UvYã$“þ\äý?æ2oáKí¹«lð“u›šÈñ¦~… M>Á·‰0ä®þÅ7•~\gH„2þC.ëoÑ Þæ2«ìa)ÙÆÛâ%¶ü‡ì™Ò;øXaÖˆ(º2§©šyŠ-.r“Uº$(3Ož*&.«åÊ©y‰0Ñ`]³É‹Ó[¼Ä ,1f—5,&jñ˜ì³ÂÏó§äü:=åˆ"Ý=Z¶,ª/ùï-®™?Ås<åÊô:5-ÏŽXc—5i'Ƀ)Ùbƒmžã -RÜ—°+N±Ï«¬³Ã ¼O˜eæ™`òÞ Ìˆ. B¾Ã«\òõ¸odlØ3Çÿ]ÖØ%*<æC >«ò>/0çó îWÐt—–ø ^¥H™,5 ¦„­cS=bì±ÂUÞäeçFºd&;„8ÇmNòGœP6œEÊtHЮLØì_bccãÝû×~ï÷8ûôi Eùa??þq^yýõ+øuݼy“ÝFŒC æ9Æ`J Sj~Ž &E·L5”c“'¤ÓJyö÷’¼PÜA2–Ãb¢[\:$9Ï{”ÔšÈG(Ì‹—ÜÜ0.Jg8z¬±ƒ†ÏÍÊ™°Zÿùj7o’ Ë&™ áò€SJ{žaDˆ}eb3Tj™¨²/–‰'üÇìˆ5¢ Xä&zÄñ|¥É!¿ÊS}CÉ&eón1aEì³¬í«†Ä£OŒ)9êJ_%‚˜AÕtƒ†£I†=Nñ€ ²4£È%˜£¢6ÇèJö—¦…-Føh¿ƒ‰CŠ6Yjxh,sÀ dh§FœúÕèÄéR»ýMžH¹1µ qXaOYÄÆHÓâE–9 F, µëN*'Ný€¡^@ZÔN°ÈSc@TòhÒ%†O†&yªHïö:›±`'Väˆ s 3 BiVó6/fHš&=b\³~ŠŒhP#GJ`šàªÉu¤KùUl0¡Ï,ZgŽL+ìñ„çxsÁd`á°ÇŠ \ñ“ÌùÇ”üyvÅJu¤Ùe5pM“ZZ]¡#<ïq–žˆS%ÏOéÛá@n3ÒMé9žP%ÇXqÈ&.QúÔÉ0ÁÂbL˜;¬ÒRšØöXQŠ€2*Ê£K4–ùѮ󼋅ÅGŠZ’Ü ±ãYœ«½ Oí@{œ?õ”Áî„Û›Ó,™kƒ§ÌS&Ì€–•Jš’¤i±Ü8dµ¸Ë±öŸ9¿Ž.¦Š“Q§î§Ù?(@3zrÚaYìcë#^âm)‡¤‡ŽH¾F„ƒÝ|CÓ):«“}^°Þîi¹§žc"LæGe¢z ë©rd“ ÿ“9·‚æù ­°R‘ XeT*áû E 9ŽÕ*`„‰K†ºJ ;`II¬lµ’)½¾ô«×•6^çHOh¤h#€]•œhàáf¤~ä©0Eg›u¥H‘ÏÖ*; ‰Sôlªž¹·Y8ÁúKz ŒXä0@õ„ @IÒbN¥e\eâUûðRv*eÀ- jðêc@8p œÙD ã#0• 9FOIœÃÊÀe¬Î¹±RÅE—ˆ ÝIÑRHžDZÆJ¥#YëÎ3Ý÷/XîŸ}±B™yæ9æ4÷8åßg[¬©XT‡â1wÄ„‚À®Ì¿Éï‹_äö7W™û„ÆÏi_¡-éEjä¸ÔºE’v`x°Î9jü¿ücÖØÁfÄÛ챪|ÄsœT{‡8ÇÌá¡1G™%p1Øf]V‰Òçc\ã÷ùöXa•]^âm¾Á'f‘¿Äñ5>M%8ÃûŒ±¸ÎËÌSæc\CÇeW¬*bU˜ÇÜç4‡,§&Õº”KÍÏ´Y¤„œ45¦d§ "ú€oð)2f“ǼÉtr,ëGœÜá0Vä=í6#^ã;‹9np‘ —y‹EJ|Ÿ«4ȰÆ[<â€E³É2,P #Š}–Ñ™òÏù2šðxÂsô‰ñOèç›xÊ…=Þà*}¢´IqŽwÙf_ïïrž#Š<Ç–üùP —w9¯"§¼È-FØÔÉP%¯,qMîŠç4ßeŽ2w8KJù4‡GŒ“ríqÌkìâbðçâUpŠŸçOæm.“¥F˜qº´9ETy ˆg|œÄ`¬~¸Cÿá×Û„=“¼_c^+SsL°(±@ÃÏéÕØà «ìÑ$ÍN’]­óÈ,2~§ÅÅ‹7h!,†ªšÒïA¥t…”uð"‡ØÞˆD­ËrqŸë‘¥ÆPiųÔIÓdŽcu.%™"Õ.ÇÌ©É[¢‹3Û ÒÈP–ˆrÙÛäqàÍqà/‚¬¨Kž’7 ¢õ+‹pMiÙóƒ½p„ÌPЭ¿ë]ÆØ…@Å ¶H±/–ÙeMîfÈ’¢¥`‹©‚D—q IÄV‚Ò×<ùG„Sî×ÃP˜§lP'ìN$ó9D™yL&A!ª)º¥ö³!ÆÔÉŽ>†zðÅ m‘â>§)˜ vY¥Eš.ñ€²£Þ¿Pºî&R;î`REîóeøHŠŽ"´=d‹6Ibê¦ê#ªÊHHf¶×2™PS»¶]}GéÝÇ„h“$N—>ÆØŒ"6 3CSO»›2ó´•{’‹©ôó’ØrìÏÒ©mfÒrL2ó9RMJ[YèJ®°Š’R#Kƒ,Çj^#˜%èrŒ”ïøKB$UòÁ÷Ð$­iàQ!HP<´ ™Ø×—M¸ÔƒKã—]Õ¤ÉÂH`Þ13t˜YtÎv>¥ð%²”V* ÕŒ°ßî!ai©Ì†jH]ÿ›Ä3Ú8j¬+öt½ÅË$4©x™­ÌÌAl1ÂÌMÙa…9ž ‘½ žpfaË«ñonü"ÙKr:Ÿ‘Q—ÙW²4 K¢Üç9­F¡X£+âì°Fœ.××”ÑËE»Ê‘ç,û[:˜ °#­Ï¾ÈN²ÊeŠŠ/"ù?³æ¡KW¹¾µHOt)± Ñ),³‰Î”œäjä:¦p¸lÐL>C›œ]#gÕØÓWd¤ª|W0u—2²ñ1q°Ó#.mŽ©Ò#Êóþ=FÂ&å·I;-öÌeР%¤Ò¼_¦$dι¦ÓV.j5rA Í>Ë,P‚iQª!K®éò” Îo£qz ô‡ÊÜf¥OËHÑ%®â åj.å·h‘¢)2˜*u;PAIï#m¥g<¡'Az—l©”½>u²ì²Ê‹Ü ¼H:$ˆÓeŠÆ!‹AwÆšñµ24d°s¬°Ç€0‡,òÜ­²B‹$–6aˆM•Qµb 1f‘<¦±g+èâïAAßc•EÚ|Šo*RÓ2%Xä#~ Òÿš˜ò¦…7üpF»Cqåˆ'bžï]Ûà³?uƒ×Ä·¹ÉEº™8÷'§yÙ|3H«‘ã,wT0½Î}Nñ*É„›þ‰-樦É2{¬°O‰"OØà ïs[踔Xä>§¸ÈMª°Ë*ß壬°ËOÑð¸ÁE²ÔIÑb„­bA{|Šo #ÝÜ,>Í×0qx“«"°Ä€(§¹Ç“§¬Ó Ãs<¥GŒì¨Æ“Èv2³=Å=NsŸGlÏËì½&i>Ç r¦+õ\B±1sT8L«»Å.p‹—x‹?GF¤±9Å=e“*§÷“ÂDéÓ'Ê#¶3¹ò¼èÃïq—Ubô9`‘MžðQ¾Ë-γÃwy9ʪQ³8Œ.¦Àkeæ9Ç{\àqºÔɧËn’¦Å÷¹J“4ëlŒÙÞ3>œš€ùá„þ£\snÛ3 ›ºÈ“s–:¶’5ëì²LT9[û€­¤bÉ…ºkQ~O`ŸK(ÈvÊc6yŽ'2äCe—Ï{34Q¹«Ã•È7q æ¼ ôXŒé Øê#aQUÄÛ%˜`‘¤8¨¥hÑ £R$;|„‰i—ûFqÑ£/btý8ó¢Œ;58EZ8ˆ95pñÕ®ÞC0Å M mêÒÇDÇ}„9•‘§*‘®Ì<¶7&¯UɈºjè¥ ]˜aÐ Eè“¥ŽƒE+x_6NÏŒµP@:Œ©Ä˙ϺLf”¶Ú2²N×a§Œ"vÀ_ÉQgLˆ°Š>ÍÐ@SëŒ1RuÓ CÃÏ-Ò4a“ £ õ$=Ez›}¾.QiýÅ"‡Dé£3 I¤¶ãYL…ÁPH‹Ú]$áPš„M"ôÌ%t¦E/<£lÍ4 $þŽô9މ’ ¾„0C<_Ã)Z,r@C¤‰Ó%-šœàQWk,»˜“,õw\¶/nPÕr¬vIéM–š°M‚&<24ð”Ý ¦ü•u!÷m3Ø4NOÉ":˜¸#Z‚.>¥ÀËXfwÐö“D„ÜÏ‚$ñE²º—8P2³q$ÃäW¬3%GMI =¢9"ì ”[j ‘ MÁ¯  ÉòÌxM,1Á.6#òÔ˜¢0”?ò†ô&ŒµPðïž±¹gL×ÙþJJÚúÊÞÐ ¤²–³~°!oÆJèL‘9ÃrºHø\!@—\ðΤ5yªÄé*²`_uâ=¢ÊB"%AË’£4³!>EJlNó{¤§-Š“2ÉH›ÐÔ¡£Ç ic§‡<D¼!s~…ˆ!Ï ™–Øf»¬ HM󔥨 4œä! 4I“¤M‚N`-k3¢À1 U¤gçA˜!¶"ïž=Æ1-Bæ˜â¤Ì±^`¢Y䨧ËóʰÆQ®šm’Šåï>£ÎÅ2 ¤}°‚>  ä:0‹aÛ6ŽãÐív …BÄb±ŸLAÿyþ˜›üßä“„ò²Kµ÷ØËI9m f•̨ÉïDþ9EŽHÐæè~‰ŸøeJ,°Ì¿¼ñüî/ñ?¿ñ/X|yÊçŸþ ÿÍêïñ—Xâ€+¼ÉjoŸÿ=þ/Yf—¸ËÿÍ?Qò.Ÿ×ùqzJÀ “––ÙçcÞ5¾/®²-Öcñ™É×Xôømë¿'N—ùרê>æ¿@•KfÀ¿ã Dè³1Ùá—µÿ‡¯éŸ&Ę<âcÎwIÕ»,,•x  " S<`epÈÝèI ùôî·1ÿ[ö_ á³@‰"G¼Í%rT1'.W†oRëäyXÜbDˆWøßå£1ÏÎq›ž²ÁnswéãÿäŸaàrvr‡_õ~o¢³`—p1xÄ&!ÆüÚðå+ögyS¼L˜¯»†Ï»œWºÛ=~Úÿ:wÄJ,aÀ§ø:ÆgÉÐ`‘CÖØá|ŠÛœ%€¹I’¶Ò®GÈSÃÂá6g™¢±Å#þqí?p×>Í eó]>JEŽø,_•ÌDyÂ&¯ùßá–8ÏáQäˆJ¼Î·x›Ë,PBÃãlùw×NMÓU¾Ï‹Üâ<!®ò&.·¸À1ólñ$mªäiá4÷(ò—À¯>Ó„n~ÀçùË_þ2ׯ_çôéÓ¼öÚkœ:uŠßüÍß$‘HÍfùÕ_ýU,ëŽï\œ.ó´ƒØSeåÛ'åKÉY]9β*ˆÑ#O•ÖÉ$ÎÝïYœ<פOŒE©’GgJ•<5)fö2 IDATò8ÆTQÁG)P H¤ê 36–p*íz\P†ºÍCNà`±Î6Cõ^$é7¥Øß:&#Bj…#-®-,ß¡,晢Säˆ}:ÄU~B˜§b=8_*]q‚ÉH„Ø+ì°JŽ:ºð0qØcU5@#BA²\SÙ)}Ùô4E ǰ¨ûYº~ MøŒ„Å‹dôšðp1N#ôÝ8m#À“{g¿ÉžX!­µ˜óŽ WèŒ|IÛëèQ&˜ìš«L…ÆH·éûÑ€ø'½Ù¥ru²Ašå““ÖCî[[AäáQ÷³L„IG$±õu2di({桊lžGÃòäCŒ©’£AšE•œ–QC…øÅ |¢~_™ÐÚ~Šc­ sæqhˆ e}^æxÂÕLB~Ž1ºÊøH"³ï]†õ„Xñö‚&áOÔ˜ú+è_úÒ—(•J¬®®ò™Ï|†ååe~ã7~ƒ|>ÏÂÂ_øÂ~2}›uê䂎¨.²ìÅ©‹4®eÐ MËL1EcŒ%!ùÐ<J?8Ë·ö62ØžÎÁ·5ÊùyJÌQz÷8M/£Bžy²|lFôUP‡‡®ää”³Ï d( é¥>#hmi0=GæiÖÄ2ùPM»H÷Š(ÐR®,qJÜg‡uYPF6mZ¤1fDSO±#VU>s’{œ&kÔ9¹§öÞ6‚0Í–0vŠ­x’qÄ Jƒ)}Å~ßgEj¼õ U#cȇBŠ7fä©•9Ë2l`]ˆ冄)é ìjòõfa=â8„8² Ê 5Æiô# ƒý øL…4(¨ò![° :SJ,0Azö?æ924˜¢ãbúßcŽQ¡Àvh¶™dŸ%:Š 8&ÄEu¯ÈUÇXHmºC›¡2z(±š1ztCqjäØg) >Ê}æX*Y4¦ì©œx OiSåîí)LXUÛºHŠ`<侸¸È¥K—8sæ _ùÊWˆF£œ9s†³gÏþƒ*æ,ãe•Ý ,eȱÌ>G!9Åéb3Tmº„×CŒ•ÿÁˆèóaÆ5î¾™å³Wv蕇¸Ê8B’lÛá8žÊ˜Ý“CÅÛ6†.Stt”MªôzˆÒG÷=™)®ÎR´èªÔÄ$í  AÀÔžéÍ]a§KqÅ= +3¨´/%Y29°d©‡Që9ÿ)ú2­Ì0&Ž)STÈ›J*f2Q,m„çñ‡„¼1kÞ.=‡ë›TÈ“¤CÄ—(¦îO1|ÛÑ&N…¹À¤GgŠå;hB¦ÃMˆñ%Ýv¤ùO 1zj¿,¡zÄ);„Èú <_c¤×—ŸI˜!q¿KYÌßIˆQ@h”$¿>&…jvƒp.I“#øAîùT¡/³ z€tÕ‹(þUD\S êd˜ç˜˜Úµ¾KÈw¤,Ïß§B>ÐÜG࣫ R´”>@Íašbê;2á¹Ò.ó•*sȼS%›hóBó¢ãÓ[ˆYt¸0¹MÇH0LÙD¬¡·&<Ÿ}ÀòàßÐ7c„NÈ6œÕîµú„‡<'Æk;‰çiL,“„ÙÁ4|¬¾Cf{[ÚR>žr¹p“º¿KÁ®­·èbhiT´M(>biPf Ê ±º~þádBÒg:6‰Nl¦·I ºLäodF9o¼ÏzmŸ§Ùu’‘áÄ3Ó{hC؋بﲪ0LDù)¯4ÞÄÈŒ›X†ÃÕáÛX£1nØ`<¶IÆÛ„ "Q¦ ÆÄåLõ>㜅e8Cy·ŠÈj¤wûC<¡“Ë´†mt»ËE÷]l{D¶Ò&Ò ‡¦x¶ ”v87¾K¬Þ%í>rX¬—Á×ÉηI :$îvÑ=—ý…eòñ*Z×çUç»DôFÌ%é3è11MF–¶í@ôY0÷NY=œÂ;Òü.àÀ¾öÚk”ËeîݻǷ¿ýmlÛææÍ›¼òÊ+|ñ‹_ä·~ë·( ÿ` ú2ûd”C`‡yªT(¥.¡N§Ëfô1«ìðç±p8Ï»DC[j…5–8àÜfƒ½PŠ7®¯ñé—o«¢ï°Ì>MÒôˆcŠ)ÏùOñ„†ÀÇCSrXÇ 6ª3ˆ»¯b6Óa1b¨…9ÁC¦ÄèÒQÞë3ÕNQ5EµÊšåR´H(Gº´ÒH—X$e4Yð:!µÐšlzOûCtÝ#FS›pD‘ Å#¶£C•ôµÌ>s#„OÚlâj: ·‡n»Øúˆ†ˆÈ×S2¢)-iý6Q¿OEÏ‘¦…ŽG•<ËBæ|oM1±t"Iƒ,èÐ:ø¶F’©iÃtp0‹!EÊŒ ) ÞX®Ä_Èâ¿(©ûY¬©KR“puM䘣‚+ ™Ø&l ~•"å`_Ÿ¦p24”Ã`ŸmVÙEÇ%E[5³äÌeö—šóký2ŽnÒ!ÉIîã ‰ä¥hSUjz—º‘VNGÄé.†EŽ‚†'áwˆ‹.)¿ÍÜ3²Ü1ù¡Î2ÛS¸=ù«ýgögi·Û\¿~ëׯS*•h4¼ð üú¯ÿ:¿ýÛ¿ý“)èùk+ðÙ•¯2$Ì7ø8'ŠY¼t€I˜·x‘]>ö3‰©9¼ÍK|‰_ã"7èc—UÞp>ÂϾøŸø9¾Â€+¸òüO·ÿ)¯ôž¦3$Œ‘/T¨!§ý·¹Ì§ùE¸ÁE®ñË|dþ VÙ¥Fƒ‡jb;É6ã ó_øiš¨à¢ó6/ò>Ë©Ì} Td^Lé1{tHp“$sm^âm &Üg“!a~†?#áwøŽx?ãÓr¯úå?åsüù_¸ž¸D˜Ëì¢ÏÛ¼D*-¥>‚#‘Y¨+÷ª•`R’#çWycý*œô•kÜáç¸M^y/ßäœRÈ;)nDçŸÎý:·¸À¾¿À/Öÿ”;9)­»´uƒ)6ÆOs[,PâÏñ/P'Ë;Aå.«œYºÃÇÜâ;¬¡-zÄd¦CµéÒ$ÃKLѸxòæ(3O‚6«Ïíñ„5<4(Öo™y^_ø6!dLå¿çó„“§JŒOx޵¹^á7¸Ä!‹Üã4KP\?’šÖJF1pÞj‘â“«ßd‘*}Np—ŸÂfDN…W|c3bŽ “ëÌŽÃéÊ3ôòp.š°¨üŸª~kk‹­­-.\¸À¯ýÚ¯ññœO|â¼þúë|ó›ß¤\.ÿƒ*è3ÅKž*‹*ùp‰ºŠµ=¯KëT)ñ„ÍÀ¹¬Kœ$-† 22@ûÿØ{³˲³Þó·ötæyŠ81GäœY™Y™YeWÙeƒéâÓMûÞ6¼ðb¡~@¼ !K~0ض@W¨üÍC«¥î è¶À ¾ª\®rfUfV9Å<œy÷ÔkÍu7$×nÑ6û¡*#”qÎÎØk­ïûþÿßÉ#o4Ù¹&u=‚!ì@h&ýÆ6u‘ ¢‰Ï²%cB ã:#¥KJø4cI¸š†+´ [ª¸Ó*HÄHg²-›:‡#"hžLþòÐÁXŸ89äìø¾.«ÌYžzU½HÌnÝS±Aƒ .¢±ò–'è*ñ]¶Ì3ìˆU‡8®Î±˜cHŒ©frÄ<ûÚ"»b…cÞ8¢h›d•SIFÛ‡ŽH)ºZ’mmSØŒ¢QvYÁ4lÂb,)›Š¾6CYKRœ@è~@tì‘@h>ORkôý8m‘fH„> òÔƒ*{Ë8M…R œ‘ßäpÑIÑ¡KR}_™ D9°­ÍòÊg±¼aÆÜÒ®‘¥IœSaÑ §XS&„¸g^¤§ÅU2¸fýµYwp=ÒÔÔ3=WÀÿ#*nÍ„µ°ÜÐÿ£úÜ /¼ÀÆÆ¿û»¿Ëúú:7nÜàõ×_ç/þâ/èv»?ž }•]\àoùy\tæ8ÁCãü¬B,J\ë_jŸ Âð¹Á-XxݶޠMš¯ó1ž²ÁŸù* ±!ÿç7^£ôëÆ-Êñ€óX ¯fÌ7ù(&6%B“ñ›ò°ÍUЬ°Ë¶¿Æ‰ô2ÙZóy‡—$ˆ>x ˜ÀQbô¹ÈÞâ2´è‘à:79¦Ì÷¸4<¾ÉGAHoª‰Í·y-@Ö^ã¾)'¸ÌC.¨S¶œ·Ýä21,±à.W©ô² -îrY~/³Ç%q‡Ž;⊢`µxÈyns5h§i¸ËÏcc2!ÄŠØe˜ŠÐ%É>Ël³N’./ñ½ ßù˜yÎð›{\BÇáYdŸ\à×é’à[Üä&6.Kì³Ãoñ*BÁ‚ù->Êe’tÙ`Â.ð.×HÐã°ÿ’}mMw¹ÏŽ)cbs–Msš‡œîO›4_åÁâ‘§Î.+ä¥ñ-öâK8˜°Èy²Ï"w¹Ì&çXe› !pAÝÿ â¼Í* HÒáUuª.#ú?s†þ•¯|…V«ÅÎÎ/¿ü2ÿøÇùüç?ÏŸþéŸÒétX^^þ©j¹Kìñ€¦²'6ÉR#O¤JÂJð„StI‘¥‰É! j wBÔÊóǼí^àÞ‹«WbÔÄ8«¸]“A8F8‡,eÀ %I•‹@ËÏ2a>̱ÊLîóS”¨îƒ]V˜bžcº$IÒ¥«B‹º¤(Re‡UÖ´íÀÎyŠÇ{|L˜†ÈÓÒê°Hú kvžsÞ&°|n}_° ¤¿}¢¸ïS=$M‡}b,³GÙ? â…“v©i‘¡M[¤©‰"ºë1Ñe?"í·ñ4Y©¦”­8Gƒ&YRn—>&.ú´pɽÏÀˆrª¿ÃAjœÝ$lŒñuA’.÷„tî,pˆÍ1er~ƒ˜ð€ Rðê);'xº` Ëó]®IrdT(t„‚%öéGÇ D‰‡,bØ„‡D}FD9ÙSté’dÅÝe ¢DÅ’wžX¡!r,p@Êïò¾x!˜›Ø8è>B!\4Í#9ï ãlMcþce ¡=ê4R÷ÇQy—¤mBÇRÇ™•a¦ Ád¨‚´WÌÚkž’=è¸M*IÍà—GÅ—³+ O½ß C4 FD”ÒÓÂ3´@éÝU‰=>’Y? ”h’Q3o©š” QCE;2°…œµD&ðý{h©V/_ñù„²—Ȩƒ©öÇÌIߦ¹´°^Àî‘ĤØÐfvW9âtH)‹O”apØi(¥î¬šŸYǦX*—Ýb¨Úƒ¾ú¯‹†­L…¥èv‰ÓWX‰¸ Q‰ª¿-T›TÐ%ØHlÌ@3a•®%õö²}jc`c©ªPmAÉê1eª\cõšŸOæþÏx8Õ·¼~ý:ÇÇǼôÒK¬¯¯c_üâ9>>æ—~é—H§Ó?Uú‘âÞ€‰"‡´@öˆ£û…zsÉ-N+L¯Å„ÀR–TóÏU’ÊåfÌ‹‹OØóR<»›äêå9Ñ࢟Ĵ§8’ŒxŽ-ÖØáë„<¹æ´Èà¡eÈË|O'N•‚^Gó=úBVn¹Oƒ,:^`£Ê3PÕz“Æ’óÄEŸ \VÙÁÄ–ð(o‚¦¹œe+`"ÌÂ_ÎòHu™2´I3–Ôº¥ÑbЦuÒ #ÛòamÄ)\{?|‘cæUWÊÃEc¬…$åLÀžX\žÊ[™;Þ1’ؘ°€žëò ‘0¤(-Ð%©6Ù‚éâ ±ÄX© M¦2·\Uë<ã¤-Ëð‰ W×±i¯ðäÝ8Æ.`ivà‰”Ñ§Ï(PcŸEšdƒŠ1ÄDu¤H&+š„a¨ jÖ*›áE›dIÓæ4OÈ*…å‡Á¦w¤„wóã!TH§Ç2{¨£âg›`ƒ,{LÜìSâDιðƒÀƒYôá„0u2>CýÊY$èJ‹…>Bs|4Óe‘ä‚“i„!-Õꓬâ U Œ 3 Æ5Þ Ô½G”9ÏC,&ÌqB‘*}âð0K“fÉ"C“E˜´ÆÉvá,2V¦'ÑÔ¡iƒ§ÇÛÄfŽŽXÂ8­¨Ä'h‘§®<ùò4f¨St(PS"$ù€ÎÄ4):x¾dYÇ0&̲" Œˆ(•ª¯øø2"3A, æ9a›59+|Þ ýŸ©e+•J”J¥ø\±Xü©j³ÿ×òAX“ñ»2£Zú~tBÆ$ˆI2ÄÄ ‚ž 2J:Rq y…/ë |—Ö]‡ÄÙ;“»w¹Â›|ˆ3lQP‹ø{¼ÈKÞM^˜Üã0²ÀD“¯i_§tþ"ïžaï{¿ø{’r‡^öß‘2!S»ŠTÉÓ O‚«þmŽD™&Y9`™=¶YS)9 .q¾JªQàüÁY¶ˆù¾!>ÊUn3 F…5 *Ãy+ØlZdøÀô¬©C7–dW¬ðQ¾É"+ì*:’<±Êû5áë8,q€Ãœ{Ì`§9fŽŠjÏqÊ"9êbJ›L .Òq¦üKöMŽŒyvÄ*R”zuZñ %Qåšû5=Ïm®°æïq~¼E%R¤IŽ.s—ëÙÆä÷¹Ä=69Ï®£ÉœÊ§ž=$xÀ.ËAûüãü5GÌs‡«$ü—¸ÇXH«M¼ªZÊÞëls"J|K|„CŠj†>›©}Ø{ƒ¬Öä˜yîr™ -eQì#tŸ³<¢CŠ. Ä8åf‘2´”‰fÊ »ÊwoDªG…þo×^6az+ö¾‡.T<"ÂÆµ4ZÊe2&Œ‰Í"jÚç1§èdD„yNÐX–qÄôY]ÙáX‹ñÝ÷Öxå*„í1KìS¡„Å”‡œW°¡.aLÂïCÕ%Óƒ¼ƒ¤Ó'£·hu ˜PM¦f{–†¢+º8˜Dü!–˜éYê™ÅP‹á  M µY™ØôÝ8i¯Í‰9Å”%÷}ôEt<ú$HÒQìw™y£A‚‡Ð*Ñ递Y%*†x¾NSdˆ‰‹î!]=IÊï°èÐÒ3Á=9dˆ?¤)N±æm“=zBº ²^ Ï”Æ5¢ñ!y¿.?BƹJ `3ÈLh©"Ar"¤aÎ?áüp‹è2† ‚¢å¤èÐ"Mɯ` ùžúJ©®©îeWQí$ ~J›'̱Ⱥº†âØK ¡Œ¸^aWøŽUJ¦ì XªR7l—¤Ñe¨EIx=a°#dØ•æBTH|®:Í^eïˆåçûÅ×ù‘Æ­ýÐ Ý÷}?~Ìáá!7nÜ ‘H0Nyûí·I§Ó\¼xMÓ¨T*€Í±Ë2ÿÙøyÈ9~î蛤ÎtxÌiä8»pˆe¶ùÚw.R~Õ'NŸeöùŽx ORÐÓ"Mœ¸@…’ªüŸÒ!Å7ù('”¸Ä}8â;¼B":.W¹ÍMn°Ï"çÙäîñ/2@¦”½Àûl³Æ_ñ‹$èòÞ¡CŠ¿Ò?±y*Öˆ0â-^¡B‰0#.ñ>Âð9ažCTlŒ!1<ä<6&×¹E’.ïñ"aÆŒ Qæ˜{\’ùÞa—Ÿq¾ÉûîE¾­ƒs<ä–¸ˆAÊHû\£Oœ5žaÌßèÿŽ=!Ñ®‹`G$°¦I–ÿ¬-Ñ$Ë˼Mƒ,úYŽ™gžcÒ´¹Å54|Nñ„ žò jn”ã4yº×û²À.+Œˆ䯯ó1Ž™CÇ#&ü¿È.°Â.×¼÷ÐpYÒöù–x÷x‘±W°j“UÄ¿2ÿI|Š*ERt˜ã˜û\ ,-Ù~“»‘KTÔâ¹Á3Þ×.ñVâƒÜæ*ë<£E†oðQòª½›§Î}.*˜IL©®3ôŸ´«Óépÿþ}‰D Þyöì{{{\½z•t:뺼ûî»ø¾Ïµk×0¾Ï¯óŒu¦tØGVbUŠÔ(¤C$!³§sÔ´kU1" Ei›‹t\vY¡£²Òg³Ò•¥) ‘çë·ÏóÑ¥2#"ÊR%ð‡,È¡mÑi l¦j”×!…ƒNY;¦%2Ô´œšŒ‚ÊÌW#: ™£¥"}6YcL„ž:pÌ¢>-b[rd7$t(gÕrVk‘òºªcàSÓŠtER ëd¥=Ť£º|³8á(F¡0-‘&¤OM§$ô>]#‰# º"ÉX“xçŒháy:®§ÓÓd´²IKdñÑÐ\Ÿ¦že $ zžcBžíK[ªæøÄ´¶fÒY5:Ì-{“=ahD1…çË‚«j‘\›T 1ÈÑ`äGH«®`Ou#<bÕ"M”jT˜ ˜ý³ßÙ@v BA×bÆÚÏÒ$âËN±¾J€#€¡e(¤¶(*A°Ô s„ti{Å/Ïà9ºJì=ï ÝüÑ®?tCw]—¯ýëüõ_ÿ5_øÂ¸|ù2_üâÙØØàÑ£G¼öÚk¼öÚk|ö³Ÿå“Ÿü$ŸûÜçøÃ?üCR©9šX"ı˜£J‘«¼Ì­§˜äh²Î3:Z’!QÂÊol¨äïY;6¤MHhRÃhõ¦gzâŸ/ÖÙrÏðè» ß8Eؘ¨Ü[iIÑ Úã@ÑXR– Ù šsî¨Â ÎÒˤºQ''$E¬K2 Àåhó TÖ¶«ëTÈà+ ÉeÚ¤9ËIzAÄhW6p‚@€Y›n6g6TòÑ,ß\û>ˆ§ëáãkêÖ‰ZPBJ82›­ÉYµDKÖµœúžšï"„‡+ Æ„Š˜eøL… BŒeK5ÿž'8§o­ñÙ©ö,›pFÜ 1¡O C7öYdŸeòÔ‚÷7U-üˆ7 ‰}ŠÁƒã¢ÓPã›Y-„¯Ü8&Såõ¥PN +/ª,&8šN_‹)ŠôLáyÏQTUçEÃ#Nïù+të§sCüø1ßþö·ÙÜÜäOþäOØÞÞæ÷~ï÷xýõ×ùüç?Ï—¾ô%þìÏþŒƒƒLÓäÞ½{üÚ¯ýZðõ/·nRvz»uÙ,]#N"#!ë7IVú,I[˜‡v8ÅܤÂZs—È`D¾Üb`ŰÇ&ºïr.S˜6OFèS ûÆÀåLì)7Óœ¼¥ñÊõw8—xÌÀ’˜ôx𨠮÷YØ> ”ãÆu×ıu„îŸô)›G,ö±lÓµYá€Q4LXŒ‹0“…&| ÇA{$ͧ½§¬¹;äD“®• ,&Lü)¯ÃÀŒQhÔYl2Úˆ’õ[œw B÷ ¦œ=å´÷”iÔ¤Ëâ†u¢­íPŠšQ`hE°MCØ$ÆÂîXFG·vÈG[ÄGJ V´CƹípŠj$ÏòpŸb¨IÊíÖéf,Fj1&~ˆ‚S§g$بì0H†…"ôý8çÜ-Ä2G=üÓ¹J‹ŒÕ¦‘ÌжR¬ù;xšÆ'ļ!ݱü÷j¥R\´r& ÖF;¬…v(„ëè¶GO$ÀK3qCœmÂ!ítÈ›˜¶M?§­¥Ñ ‡˜3d,Â$h‚¶•¢h×hYZZM¸Â[ y>¾'ð=AfÜ&:á邃aJx Y IDATÒϹ¡[?æ Ý0 ~ý×££#9ÓLØÜÜäw~çwxôèüÇL,ãâÅ‹|ò“Ÿ¤Z­òï|‡_ø…_ó^h×'dE ‡Ó”¨Òÿ:…`s 1¥G’©ZˆCLU&­ ¥„q3vo¸9"G]‰¤bD’¥Ilª£<ÃoyŒ&„®Iq˜ eŽÈ#Ì„„R…J(¥ÀN'‰0&ªþœ¤«Ð²r¶7Û¤"ŒHÐ#G#H ³1Ñq‰2 Â,&È”oÉŒž½Mû‡9ά%+PË'szû¸D¨ÓélÎ7&LÂìaôô¬´g›¹ˆçâj’4›õÈ8B¡¢þ|,aËD)ßA²õS2”‰²í8 ØQ NN4pt==¸ê4¬©\à™%X 3&GCÙ„<’Èöø, !Î@Á3dªUX1&DT}Œ‚òÌ‚\d{L÷EŠòAád›„˜fDH›(»Œ¦lBdܤ§\!•°6 vÈÓ@ÇÃ;˜Óá~ãG_¡ÿ„¶ÜoܸÁÆÆ¿õ[¿¨ø?õ©Oñúë¯óÆoprrÂW¾ò¾üå/cY¿ú«¿úº-†Ôm‹hFG; ùDµ>]bÔ½ Q}È4n޶ÙҤ˂ê|ž¢SǵcBDÌ!!JV4ÉêMœ„FÝÏóu>ʲ»‡¡;\Ï=Bì{ü¯Õóra‡¤ÞáÜî#ÊÆ[ÙÓt–ÒlæÎPÕKè8Dý!Q#äNXîPÕŠØqƒœÝÄq"ˆ˜ƒ­é‹ yT÷zóøa%òDü•Q‰¯G~†ò6 Þ!}c<ŽÐ ¥±âSFñ±H:\_—ƒkðó“¿c/µ„Ð 'x^ÃáÜ”}™´pM8œ÷7y>«°Ö]ž†ViéBé1s¹³@Äc‰ S7„ã4i®_<¡QElß jJHÌÓ…5laÒ#!Gxv '¤ÏôÙ1—)Ì5Iûì°ÆØàu lqF®¥!›wÄu"F"Ò£dרYê‘ ‰Îˆ#¯Ì4fÊÃÂð!kŠm˜|¯ô"UQ¤D…°/ÇšûbWè”bUªÑ˜‚±âixƒ‰°p|„|ú©!E·øvº´Cijã(Žësà·l¢¸ñ†þ¯ápH4EA4e2™Ðl6%n*•¢Ýþ‡7òæý4ù†àüÒm–6ªì±¬Hõ }›5.ñ>Cbì³Ä›|ˆ <*ù·ù7¸É ¼/Yê¥4¸¨4Cz$8bžËâ©õUš¾Îæ;YþÝÞ£ êœ0ÇNUy½òëF8èÜçIzœá±Lú!K—$gÙ rÇ·8KV4±˜)6@Wék#"œe+ ªµÈpw1pxÆUÙ—Pß3Ö8dA¶¸h1ϱªZexÍ,A¬¥æßsœ0ŤOŒ-Î’¤K†&1oÀãÌiFZ8@²À%¤/\ÃcŸ%êä1•Ÿ³B‘QÎð‹I ñ¦½°´Ø¬óLŸ.©HÒ -ÒT(ÒWp†<,0lj¢CEø/){ŒÜ±vXc™=EÐK3$ʈ+ì¾Þi9¤I“)ÛböYâ2wƒðŒ.É@laÄ«ähpžMº¤xÊ;¬±ÀA@pjƤBy±Ã*¹Ï:Ï‚–Ý«ì Ç sì±Lˆ í½ãö³¬üˆgè?%W»Ý&“‘ªX,Æp8d0ëÈtúƒŽ[ï›hÑ0—×rhÉEº$i’¥N_hèl‰Ó4õ,G”åZÏP¢BèÂI]E&'¹fÜ¢B‰†ÈK¤¨&ÕÑq«Ï'>ð7ôþþa‚ÕøkòðX¥@*6¤¥eÙgðÐeºm˜4æž=ú"Î;Ö JTU‹[:*¾êU¥ì c/BÃÌpÈbЪwMVIÓV(\®HÑ  æMr’u‘‚×(CÆ„iiæCÇA*šŽÃ@eT)0¡ Ð&#Zh¸´ÈR¤ÊÈ’.5¶yÀEбjpx–Ùñ ³bLLªdJK]Y’ñnj6Ïr öX–ñØb‘^<†Ë mÖ9ÅF"Œ‹Ð4©Ë™b‘méˆLÉEê´È2QÞ´h3 Æ&g¥{@ÈÃNTí#‡,Hë›ÈÓ×âôWâ´Iá+‡S‹ M!Geñ4*E‰Ìµ lôG÷ÐjUî=ÿ²ú?¾‰½^Ïó¨Õj¤ÓiÖ××yë­·ØÞÞæ#ùÈ÷Éë=ú«g¸Ç º\â~ÐÖ”•™¬Hq–&Y ^ä=ž±Dl^àG”ù¿ø%*”˜ãoIÑfŸeåO<æ,¸É Yemh 5‡¿}ó‰IR¡Ä 䕯µ€‹Áó˜ÓÔUjÒÿqÑã6Wƒ¥S<á׃YWŽ·¹Jž:I:œeKfÎãIzDòwüÂÄp†-¶YÇS–­E¦Ì QJtikñ”0hÌyg“ªQà^’Š¢ ©PÂEcD˜e}—Ú8ÇaxaŠÔ8¤Ì«T)’¦M zÐp)P§J‘;\ lzÌÜó/RrÓ/P§DE¥iAÆð‘‚zÌÞÛN£á‘§N™#*””ùFfS‡³Å•™\aB˜ûüƒ•fÑ9ä@,Ð{ì±Ä@õJT”[A>H3XÏ›|ˆæp08Ë=e2a÷q,#.±Ï&çðT(Q &7¹k¨ÎH<Ã3W‰és&÷ª?â ý§äZYYa{{›k×®Ñn·I¥R”J%*• ¡P迲å-¼¶Š™3e@ƒ<'”°°é“À‚~)Æå`Ó~Ÿ+e¦VïÂTn‡]V©‘g@œ5:¤è'F‚°sùô>o>½È7o.|©ËcNã#XOîª-£,è÷¹(“Âô6E+Q¡­PÐ3JK¹cf30Ž‰Í q“C¶YS _0$&½Ì–I]˳ËJ`ùše°ßÕ.s]ÜÂÆ@WBÞ™"}™=º$¿þÌQ“¢€€r7Kc‚Å€(û,±È}âÄésŠ=jØaU1Ó¥yÎC°Â.>‚"5¦È WÙÌfO¡h-Ú¤(P£HUt$0¦AV‘íDà+Ÿ‰%÷=‹ø€¦\(®º—u zÖ,P4 -ñ˜’¤£â­å(SZŒÝ îzH”4mÎñP9d.ûÌqä«®, •­ãJÝSŽ(3ÁRñ²2c |1MM¥àÿW5Cøýßÿ}¾úÕ¯òèÑ#~û·›_ù•_á7~ã7p‡Ï|æ3œ:u ß÷ùÍßüMt]çúõëÁמõqSꡜ2Ï1Âõqt]ùažcþ‚KA Òçýÿ‹öØÊöt[Üá [œ•PþÖ¹­rޏÀ}Nyϸ«½@‰ŠT,¯ðÝÿ™íÿâqúç#üOúŸI[ƒo`‰)cÂähð"ï¡áq‡ËtH“t{\÷ùž.7Ð«Üæ5û ¶Ì³ÔÔ<ûgùz`©À÷!==ÉM®“£Éª¿CDŒxŠÁ:çÎ1$ÂUn³Ã*w•Ú÷EÞcžãà5Ss×™bQöŽøo“ÐzŠ8•`—U\tηè™I6ͳÅfÞ?¡)²Ä¼â¬¿E_üÃévƒ' <ã²ÌW¸Ãm®2$Œ8TÀ‡Õ¿ÁU¥DîqnºEJïÖ[¼Å«8*ïÞW â·¸NɯPEîs‘8ä:7yk¨‘ñZ¬··ÙŽ-£’"²ST¡È€¯ò¢ xƒ×˜b²Á3Îó0ódi’£þ£Ÿ¡ÿ„¶ÜïÞ½ËýÑñÝï~—?øƒ?àÓŸþ4Ÿýìgùö·¿ÍÆÆsss|úÓŸæsŸûÀ´ÛåBä°è°àq_»À"lrŽ9N(P%?i1=V4Gƒ" Yï‘ 7xÈyÊQ'OžFà`Ðq™ÐfmN(ábªM¸’¸ƒqÊá`?ÅþwéWÛ,²Ï…“-gW¹ª¸G”9a—ä¨Çunq™“•!퀙¡…­l«³`™-ÎRæˆÇœ¦è׸ƻdiR¢@–&›œ#ét¸¬ßÅ1uŠvC³Œò憮 î°_”Âã{©°ÈuäØg‘St’ô˜ç˜Êî1çwžÐÌÞÄ›,tN˜d,|CЧ٠¯pµù>2ëäÚmò£&tŒõÈ3Ú†¤ßržrh”9³÷-âÑMÇ©ë9®õîà MâB/N™«T±âS†ÄpM½èÉqŒÑ$<°yÙ 0¬ãÇ'F Ëžv§,cÌOÙŽ¬0!ŠT){G2mÑ”Û'Ü+ž'ÊHZJí 3J[‰ö.ðƒ‰æ‘~š)~Ùû?˜haöT†ù {Ä'Ä„´Û!äMˆÙC4Íe%¼Kl<ÆÕ5ÖÍg¬ÖY!Žcsltv¨G34#i’j×lýP¡æ3Ÿá3ŸùLðñ¥K—øå_þåø;_úÒ—~è×>§8fž8\4qšœÞ `2$®$ÿ¬pG»´A nqæñÐè’¤žÌ³ÉÆ þÿ„SŒ´(m2„‘¨#Ê”Öz¸Ñ Go yûµ—‰k¢BV·3fóCÎ غŸgÇX!N²¥³ÍwÍÔüV&0ƒ.ƒeHóŽþ29OOµƒÅ‚Š1ue›YK³ÇRÑ9fž-í QS¶ŒŠT4òD:Ô#ì°J‹4{sóÔE^-F!Õ2Ÿ Z×M?ËAbv8É&OÙ KRzC"_OC©Ðg•LŒ.:]‘䩨`N;¡FAU Rx'úurŒ Q£@Œ5QìDiç‘ã$9ˆù*”¸Ç%I)‹5 7UàSU /ß9îE.Ð#Á.+ÉIà³Ï’ªH¤¿õ}q‰¡B,NQ¡Äm®rÈ‚¤okÍHF†êP¤J‘\PÙÓ}N˜g›5Bʃ*ðØg‘0cº$Ek’uÎ=ï Ýøé¬È/_¾Ì—¿üåøÜ?þø•W^á•W^ù¡_o1%)ºL•ÙWkÙLñÇŠ“žÂÁ$Gƒ8JZ•¤IöH(0ŠƒŽÇ&ç(#7‡"ÆDØâ¬T¤k:%¯Â}.YÒÙ³.Òþ®ÏâÐz.­E‹t Û˜…5Œ‘dD˜ˆÂ·šL{V‚^P±/³§r·™ß.F?ÀŸ…‡˜ØŒE„¸'y †æÐ'0êÝÀ KeÑ«’¦ˆI~KL•î%Äó„Ôë¥ jøš‡a»¤ŒƒP”Í#rFܤ…çAGK’£A•" !“ï¢î˜´ÖÂÑ4L-‰¥MHŠ>ñ‘ÔÜ„ô †fc„ ZRZyE˜?Â0<¡“ò{ô…ŒSNˆBó™·+[9"††Gš6-EÆk1Ðbô:¦²ºM±šOŠ r Ð%Å˺.;M2 µ¨‚ÊD•v†`t:"šØ&§5I‰>C;ŒN‘ºBfÕGB#\CÃב؀„!\„²ë΂e¤-Î&Oƒˆ>$î÷‰<ï`üh׌Ëòs‹ë˜$yoÓ!ÅNáóTµJÆ¼Ï ´IsšGÄž¾7y•uN0¾Ï×Äë,rÈO™ú&Ýb’7y5h18¤›Éü_ÖxMÿ6NÙà{\â/ÿþ/l3úãÀ:Åâ&7T‹é ¨ ÃÀamúj¦ò>A”!‹ úÅY4Õ"?ažïð*@`k‘¡AŽWx ‹ w¹Â>K,¡I–Û\唷Ͷ¾´©†Ä8a. =µÈr[\ÅC㛪mWZ †°G»s‹ôŒ. zÜç"9œc“žJœë¨9P<]’XL¹ÁMùZEާlPôªXÚ‹)§xL‹,_ãu5vxJ5 tI*¨lY=æ4%*ÌQá1§xÆ:1¿ODH¥ûgƒ$¤!zš¶ÁS*”8fŽ8αÉCÎ!ðÙ«Ô(°ÏR¼é©¼gùðN)Rå §‰ÑçeÞ¡J‰¹«F FTEd5Q÷µNžK¼O’RJž:¥H% ê’Ý’#h%e1°Ë »áeŽ(3Åd‰•²è›:Æ6 ¦i“=RÏßr·þ•oè§yL\¥$Ù˜œá1ssÀqæ8VÙ·>Mr¨ŸRºÇD„)&ʈÓ<Ƈœ]xD–¦<(ã×l¦–¦Kž:ë<%Âo^0õ®Ð¾9&üòˆ‚¨)«P “4-ÖÅ6F2Yˆƒ€VÜßCÊ+•üÖfË#ÅŽÂ&èab³Ê]¤WÔG`(;Ýú`›¹t…#2´pÐ9`‰¤zýr‘YšA…Ð'Î@ù5³¢ÉÜ´ÂÔ°”ýK`bS ÆY¶‚‡²MšIѦD•6©€ˆäQ_!6x¤éÐG2® T)sDŽ:[œÅVÞS<¦¯rœKTcÊ¡XPc\ű—Mb¡áe â”9¤E†(CRN‡”ÖÅÕ$ ^ú?5Eç“¡ªÊùQ•J8è<ȨGéZð‚t¤C™cb ±Õ™Sœì:¤‚Ô¤‰ò1GRâ„ÏÛ>JäòSØrÿo½>òøM<+…p}V#ûŒBap½PÓµIתœ™{LÑ®r+sà/°1z ¦ Ø¯ósþ¡§%Iš]ÂÚ˜¶{Ÿ¡#¥µDbè¾GjÚ¡:At}Jõ ­å,—Íûœ3ñÊÉwYÔ¹;X¡ùÖ}ŸI(„'4tÃcޭЮöo£'\ÆVˆÈ³1ãT˜Ó¡mœ¸n¸,¹Gø=á8ôŒ±ð€ž'&†,·öÙÏw9£=Aw<´ºÇPD'Â\lIùÅÊßà¡æ£éšáq¾»‰?Ö(™uÒÑfÔ÷!¤M†á:ÂMlۤح¢G\’~—©káNMbúˆ¨1Á!„˜j„u›um„5$ÙrΌհ—œß&m¡ ^(AlÐG7÷Iû„p™Ð'cu‰t§¾«YlDw0}ÛйXî+Þ}¼±FÜ1[â5ÃM'3éb¸}-NhâRð›¡ãheªØžÉPD ér^ƒphJy|Œ{,Šún ]ȘjÝwП’¨#tÝuˆôe礮0Ç$*[H$¸ïËÙxÂí¡{’ô·hžÐñR$±, ·Æ„ ‡¨1a‹°*ö ¹R?t#L‹9½…çk„£#ô¡ÇÅîñóÙÖôÿTè+ìÐ&M‡”¤9y-ÂþCw±}“¤è²Ìžd 3¦Oœ—y‡MÎ’£œv[Jœà£a8ù!_…#¸,pÈ>K„+›“lå |„ðy}ñMºšÎö»Q²×¦,‰=æýbb@•bà!?ËVa™ã„vXe‡C¤¥!ë7I‹#"ÔÉ“¥É{<æ %j‰0¦H•:ù€Ò´Ìžâ KözÖo¢·=VÒ»êe¹šñžãôùàømzf‚§úºMøï~Cæ­’>¹h }â\P!cÂL±8Çf`a›ªƒ#¦qˆ)ö3ª*ósèºKÂï‘’ÇuļâËÓþ‹Üy¯ANkJ޶7¤¨U 1æˆLÕ阵ïÊ‹.ï›TÊÊÃG=°¹-±‡ÖÆ»L “iXzÏ ~ [HýÁl.Ù#Á*»4È‘¤ÊâeHƒl”3ïÓU‡$]åë˳IimR*"R ^,&¤é|Ÿ@'BÉ«<…ú·Íù_rmÍ&•Za¹¸BãØŸ§¥§ y†~„A>Ædjrl•k!úɺç2ˆGèk1>u-+4"IÊïªîRBf!8.}3Î8bÍOÑÈep„IWOP3óL4“ЊE¦1å^e™âK>šçã:-?ƒŽ#‘ÇF‹Ãè<ñÓ}0àИÇ1 IWÓ˜³]zzŒ‘"î÷Ù×GF´")„–7ň9„Ý1Û¡òñ:óâ˜f:MÒïâh&=! p=Éú`›iÊ *J˜Æ+6%äM8±æñ}èè ÏA‹8 õ†+1³Ù~ ,°Ä”¥á>ýXœ”Ö¡­¥HF:äýÃP„°“·ë¤Œ6=#ÁHãérÃêšItÍ!¤1¬)]+Áiã¡yDûcž¦×(ŽU§OLq-¦™Å‰ë„QœT™X&QoÈH3 ‡Û# Ý&Ùk܈Æ@D˜1Jã h`ûqg€è1azÇÃ0mÐ||×'ìŒ0„+Ó á{”ŒlË¢c%1Í ÂõÐ5ß÷ yBþ˜¸ÛWôQßð)úbô ycòƒ&ãDˆa8‚çjÔÍ}#†æxD½!}ˆ©Ûxè˜b‚ðÁvLHØt#ÏÙÕ3ÿ‰5ÃÿW°¡×)à)`þ€( ­ËHaùº$3 Øâbô‰³é™2ÔRh=Ô&âè²õQð›]–Ùe5ðXªN–së8.”!íwxpkŽ¥ÉÀ~å 3"Ê! äh ”¥âˆy>i:´ÈLsG5z$·Xªf{$ FŒ¾Lò U'(&¢æÒzÐÊ„£LÔ,\2êÃZßÁ n¨R☲ 9„"³èFG‘ܲª’xê猴(ƒP”‘‘á`+”âL¼Ø%¥_b*¾1†+¤¸±E]xÔÈeÈÀ¢ 7 'Í‚féYaª8"ä$;D¨0G˜p–êÕ#ÊL…D0vaköµ3´äLcÑ$CMQã4<¦š¥lHÅÀ“ë¡Ñ©K{ÂM²”9dL„ˆ J!yÍUQxþ ýŸz¢þ­Bÿá·%áÑŠ¥ð…Ïcqš¨?äXÌ˹©ç“÷[ì„VÐBÛ¬P¡HÇLR¤Ê€(G”úQ,1%Â0è¯õ‰3F¢…Oó/ÛæMÞˆ~ˆˆ?¢ ªtž&d@Èi—;ñ ÿÛ£ëä/k¤D›%$–yÞaÅß%ª x3þ*I¿GBt‚Ô¿8}n›WÈ…›27Bø¾ƒ+tV‘›Ü@6¼ëL¡{.ÛÚ!gJˆ1^D°Å™ zÕÄæTî)o¦_¡ne™ú!„/c“3~‹}. ÉÒ IgˆEÁ«qÞܤ®å‰Šh–Š(’õ›Ä´m=ÅžµÈ^&êiy)v´UJZER5Eˆžž ­§xYEÃã~’¨°g.á õô6Ö"¹xQ a3ò£ø†ÄÀ¶È EéFÏy„˜rzž‡ý*7E!Èø<áTè°¢D)‹åcÚzš¯¾s…¥—ÂŒ©ø%ÅC¢´ý4óÞ ‡ú‚RÇîcºGú<=’´Eš—ýw8e…(Lóoc‰)»¬(ôŸC†÷xAŽ<´hs_\¤K’Yàˆéœ<´ÈpD™˜j? _ÐIlÆØS‹©añ®v-X$–ØW?¾ˆ“4IN»T­"}b,pHÇÌÓ#Ái“ Ç6k˜Øx ª²Ã*]¾‹¯ûì§Ø‹Qæ)˜Ø\uï²¥Ÿf¨„9óÞ -Æm®>Q#AMÎRy|4.ð€cÊ)+ÎUn›¬‹Î »|ž²Á˜°²öšäØc™5¶)»Gie†ºL:Úf “<4Ž™£F‘8=º$ù?Äf®²ÃKr$á7‰;µù{T(Q¤Ê %‰3°È5Þ%Æ€Vi’a‘Ã@€×@b=WE÷ù[îÿ6Cÿ]C"hZ(8Èv…<,Ë4<Ÿ‘V‹¼¤iÕÈ«€# @ ¹‰; ˆ"3ɦv–Ñ=KPœb("$èÔJ€a8B~Ùf õI IDATr˜¢}§Ž5MACúDä…œ­¸BS‘%á ?ÜÀe,ÂAÂ`KddÞ„ãÐ3d”²‹.󿵄T‰U­|9¢ ‰Ó§£%Ñ4©²……-äúvÄ<}UTÌFf>]E <ÔȆšJ€ç6ÆŒÓQ!&bL´PÓjë²£7ЉÐ1å¬_×\b ÈÑ4JKŽÓ„)‹MϨµ_ŠÑÆ„¤pÖY1}Ê s ˆÒ%ÜÉÓ=âL1‰2”‡n#¡bq£*%SZÞDAÀTA¯l¡ÓÓôH(èV„ˆáFô@…ncâh2§£bd#b@¥l º¤ˆˆ¡LoÔ3´bi¦è88º„gµÈ0ÒÃ$•ލI ÿ;d¬Ï\ÑŸ¼zבŽY¥3ðâ´ é†T‹V(¡E–¦T¨‹²Šõói)!Cˆ)ë<ã€%´¢K]AWuUM; ªhcžR@Çéc1•™Çhä©q–ÇÍ-ÐñÓ<~3Jü•óJ-Ù–ÕŸHâhzÐ2Ÿ¢¦åñ¤¢I–gÿ7{ïlÙyžé=ÿŠ;ç}öÉùt@4r"Ši*kFÖŒJ3*SV•%Ï•xkëB7ºT•k„ò”U’UÅ›œ)—5I$ ¡Fçî“ó9;ç´öZËÿ¿)›£(B¦MBìpöÙkýëûÞ÷yÄ2&IRõ)Lòªƒ¢G†*=ÂL(*ž'4NDAI$¸¡'ÂGvC£´¨ %jø,Ñ%¡)]qšA*}ˆ¥\ÎiÜŽÎ gõe·;®<¾ºÌ±GU‰$¤«× Oˆ)E[“£k!|FèôµCEbsÔ7qCK¥Kž2;,¢kßU»†èèÚ-ªdJFÈ÷²G(0¶3’çl§¥ØÓ!eyÛcNN? ›¾°Ÿ öX D?èñ·ÕûÛT_ÏyÕ›­e›¥@™Ù!†!™FMS§JžŒLqd*ÆmðÉQ Æô?I¹ü¯>aLU íUŸá$Cl¢¢Ã₉^‡(:#$ùÏU²  —2ù@‹;æs7I(ðŒÔG®AJ9¿ÛÄ)’ÇE—@OH£Ú¼EX@ñCÁÔ£1>#×ÄŽ"&JÐ’¼9v‰7‰±d t› ’tô( Z D%Uœ&M?IW—ŒóñᣧôÂqšôü1¯EÃH`*t° ¾©)Þ¸2®¹ºèÄh1Í%ò„蓦Jƒ¤BcËUgگѱ /Ô")=D`œ›á0øBôÉS’¡àÑ.U#M–*‚Ñðè«ZŒ‹!!%æ²£L‰|@Ú”¿¯¦tU0TÚã‘Bx7ˆ~±s<í4‘¤Ž© žÕÔ™æˆ8-ZÄþ‰rœÅk¦%ú;‚M‘Zy¦h0íSÖ²8X¤©Ñ$Ð*¿—î9ž‰{ê@åÿ ã·ò]û8>œ§º” œwï1É1u-IWD˜à”¨˜Í¦Ÿd©¿Ëç.I¿Î!ÓÄTêØGã.ÈT©¿M– Ýp„m–ÈQ%E]¦5É“¦®$õš°È6óì¡K‘‚Ü¿ y=;¹Oz~ÄÃ÷¾Ã"»$h²Ëa·‹ëʤ{•4gX§@Q32¤y;¶0Ë!zÜWˆÐ%ëWp0)‘ç„É€z7ë8eRÔ•Éh¤š ò@5Í…èŠUÖIQW›|ŸINH{ÄQÔ'j®ÒaNsDŽ2-•–«'L0Ç)jX 8f*pÝkxø¦ ¢.&²Î’!AƒEvTXÓBà“¦Æûô•o=A“ 5<¤<âJ¹ÿ]?~2rÿ¾¯Šr\7‰?6® ±I˜&#¹ÖRáÍ8ÍÀý0É : %1¼³à¡Q%C »,ÊÄå.q‹Õ¹"SÉ*7oLª‡C Pìàûí*d×Ä8‹:œŒ0¤[Á“ð±¼¥«Óâˆ8r´£±SSà”&U/CƯ¥£d%²º¦OŒ¶"êåPÇ ‚¨Óêú¦GÂoRpJÌ{{¤©b(78È&h1ÃQPí+éKO²^ÀË2)jòfçu™ôOHÒ$E]ݘ¦9dJU3T˜ 4o¤Wb ¥ÌFÖ[ÛêF,×mòÏS&‡ƒDÏŽ«ÁšÒ¡Z8TÈa`MáÇ7ÚñDÄÅ(•mb$i°Ä6zd©0Í‘ÄEkH!Â|!>)êLsH‡ŽšɶA[­‘?²¡Ñü{\3þß~B/øE²^‡8m²T‰ûå—5Ô¥|²»¬ÝÆ1tå’EÅ蚊Š6!Q§n¼Q"Ùo0É ø>SýO'Ÿ1£èBjŸÃH~°|˜'Ø Yœ‹PCçô}X{ÜaFPb‚• õ¶ªâBŸ2ye¨³Ô{fpÄ´dmÇÅ`‡†ØØ 0ª¬“\¡Œ†ÆªíS ˜Ê)_%óTö¸ˆúšî3LPÆS¢–:ˆÖ?RÄý Å}ãßàöíÛüÎïüßüæ7¹víÑh”_ÿõ_ÿxnèËb“v†/ó«ø>-¾Éý÷¹z† ¿DXô±Ä?³~)`–ÿ‚ÿ—|[|JÉì[|š×8dš¿6~–Iε7¸ÈmÞäZÄXf“KÜâßò/ÉPÁÂáY®ò:/’ …MŸ%vðt„ì:®‹5²Tø©¹wøKñiþõÕ_áñçNø¬÷uÝàu^b€ÍYð´ÿ.ÿIüW ±˜ä„Oóßæ¥@2ó„ÿ>ÅWy޵`ûûŸR™5Öy‡g¨“bž=–Ù"êÉÀÎs´‘c¼<%2n}\ݤ­GùsñKêç*3Û¬JNu<ÉEq¿®óFf‰yÎq±Ä34HP ˆƒÁ:kªS¾N‡oó –’¾\á§ÑEe5{ÿ›Á—øJèŸó5ó³LsÈš»IIÏñ:/â¢S Èîð.O1ÂÀCãE^ç[|*ø<½€Q¢Ïc|@‡(·¸$+sô¨Š Î?¡K„G¸ËÙÎClsZ8Í6KA‡t™-ÉZ&ÇM.óWÙ`•ÿMü F¬±ÎS¼Ë=Î3À&F‹h³Ëðä¹;˜,³Í¾ÂÉVÈ2Ë}B¼Á'è"O‰)ŽÙc>NåÔXñ‡Z[ó¾û—ív›/}éKT«U@‚šþèþˆ7Þxƒ/ùË|ñ‹_ü±¹™[þ Ò~ OHK×&+ -Z'Ño¡Å=ºJÌ4Ǿd•ûGØ8ÄEèc¨h“cQR‚&êiw!F®‰ïjtŒ(qÚ|Y{5„Ü3 ˜5uˆêÆrÙ¿ÉãÃȘ5¬Ñ,ÚZ Ýó¨jiÃdÑÝ¡£EYí°:ÚdÃZ¦¯‡hc„Á2[ì1OjÔÀ35‘ÆbHÖ«â«­mö“s,;;8ºŽ¡ÔaÆž\Ç2ªü¨Ì´vÄ@³ Ñ'æ·YtvÑL¢˜| Nd(Ú78ë>dߘ Ö2‹ì0Àf‡E†˜LqL…Lppëa™-ZÄÕÚ`Ä,e6YQ`e2TåêÅ—6ͱ¶6J‡ew‹²ž£MŒ3¾| *‹,SœóÛøBÂÑtF«?M–ŸPÖÌ8r×ÿþÿy¹\æ+_ùJð÷ðÀŸþéŸòWõW|õ«_ýxnèÛb ÁT°»ðÐØÍ2Àb]¬jÊñFì˜)ö…¢Œ_r¬e¦+ÃW^Ž Y¢BŠN*ä¸ÎT\FÞ$:X8œø“¸BîL%¬`†[\"¢œÚ%òÌÍÖ90:Üüv–•—–%¡ˆdˆšEz„¬BÖžÒªÊIQgƒ5™&G•EšÈ—Áˆc¦êê=ùî2Ï@·ƒ1â8øQd‚ú -I-#J‘Cl:@‹>pÀ,6šæ M/A7&›cí¸OïªÍ¢…ƒƒÉËÁLRЦŸy þ)=VÜbI^Û-¥C• ·¹D]OÓ!¢5y'”´Ãà¦há¥LTaV&9¥À r÷š÷Kè¸ùÓ”E– Ü `$CLFê¥ÃS…»ÜÐÎqýõ ~þ¥CÅW–U‘¦òcûh”È1Í‘úµÛX¤é èE“œ +»QΫ`1`][UÀ“f*Ñ0ãJ?êÓˆ,’4H«Ý­<ÐôÕÞOã” E1ë3B'Vk£Y>NBš~ÆÀœ”_§+"TUMm‘”ÉQTØÕ,¼]tá⩺EÎ+3­±Á #ߤ)l±ÌŠ¿IƯrW{Dõè]2T‰¨¼‚Í€9öqÔÓÆøÉØU{Ð8-ÊGß!J‹8+la⻾˜/u„BȺ,æØ§âgƒ ›Œ=Édò,TÈI[’×åT+ÐU‡š8-ÒÔÈQf’f9¤Nš"úØ*á‡p4‹‘Z©Ì³õBJŸ;}äu÷FÎrX‡ër³ÃP~{óî»ïR¯×1M“V«Åññ1×®]ã÷~ï÷xÿý÷yã7xê©§~lnèßI=Ï#ñ}z1›#1M‰<}Cî$£~‡ÙÌw¬óDÌ.M!Ñ¢Ïó§é“þ)»Ú|@Cì¡M3&É‚²Ìq€î»<g±ð)ñ:÷£g9|C0̘<äŒt%¬9SyÚZ˜®¥oÈt|“Wî²{Šõeþ‡§¨‹$»æ<ûÌqlIvƒüœÈ„zUKã«@铉÷ø–ñ":.sÆj8)ÍU0ò.u]ŸºDpƒۈ¦Xv·8ÕóôD˜µGqÑØ2š$:9ƒ‹ ö±(ˆS,†<ùf‰¤º¤©a3äiê$)“ç³Ö×éiaºDIªà‡<ŠÀ§B–yöØgŽaDÀ›$p:Oø×‰è=N¢yÞ2žcÊ:ÆfÀ¦X¡EŒ1i|w¿m-“¦Æ6‹Xú¼.%/xXI•l¡d°2ÑqiIÎ÷Ùcž]}qJäIj ªd0Ĉ#{šI"¢«Òò²bpÌ}ÂÌI¼¸­NÓyJ¤*íh”Žˆ².V «UpgÅ~’29îkgé¨~„!1ìxl|qZd¨ðAìqr~™w„ÏËuéý}®Û¸u ¾*NÆk¯½†¦i¸®K£Ñàää„?üßÿýßçµ×^ãêÕ«_mí²óÏtßãAl•º‘d—µƒÕIQ£A’Ïô_÷}òZ‰?ÿ„Ÿáo°p— ¼Åó\ä6¿Òø3–Ó[˜!&qãGLSFŽDžãª|sqØb…Ÿóþš¬_áŽqk<«Ì@.s“éÑ1oOKn·ßçeÿ\œ¸ÍMcÿãõgù­ÿ}¼ÃÓ\åy^äuVØ F‡¯ñ9æÙã EVØdŸ9r”øgü{ê¤$;Ý7ùÅÚ ‹áÙïð¹M– -bTÉ’mÔeú<ÏU"tbs‹‹d¨ò(R%ÃM.3ÂäùKL²F…,KlsÌÓ∮ÆŸâ[ô ñ6Ïò´û.?'þšu}÷yœûœãîScä1~Õý}=Ä5ñ,r¤Ú-¦’2<39:¥hæy•Ïô¼4x=,º;,ª€›løÞåã–ý-nŠË”Èó ÞTµ‹#f8Ç}Øå˜)Jäéå<÷‚ðPÎ+óOÝ¿àU맨¡H›U2üòèÏðtAS‹s'i)ôíË|ƒ\aÊ?ægºÿ'·¢x ÎòϳÄv ’½›8OŒ6¹Å,œ2Ág‡ß¤Ð-òô³\å9:Dùy¾JÔïðšø)N˜ä÷‰ÓR{Ä`‡þ}NÛ3òÀ–‚Ï¥R)fffxõÕW9::âÎ;8ŽC:&ŸÏs÷îÝ«'ô52"FÝM1Ò Â¢$Ô;~½éM·™ó¨‹;,²É «þ%‘S»U8PÖÄ2Yâ´éùa,_†Ý¢~‡ùÊ"k¸BcI)t—Ù’±‡mŠOe©’Åó%w¼KDÑÜ.ÿcú⎿ÀÿúÖOóÜó;Ôü4–r…T~Dúz¾ ÅDƒ2YbN‡sÆý@êR÷SŒ„l¡ÌvŽ8çßç;©húIz„ð„<ÜǼ6ýa˜²)o裈/ÀzP™“êgyÃj"FKnò]—°Öcb(Žö­Y ^‘ˆÞ%"úÏg[,1Ç>ž/Õ§kúCŽ˜FÚ ¥ìWÖz á 8ö¦œq60Œa§'W&â=ÂæØ˜¢«äS ?É2›ÌºGLéÇlh+„üYêîR´slËLøEÅ43ʉ©ŸbÊ=¡hLઠ_Î/SYEšl+–…¡Âv0RÓϦª¨Msˆ¡Òð +ü¯íq<Ks°Å”_#,úÒß1’ÆÆ¼^B÷]*"GQHéOʯSö˜~ý°?à%ïu,wȦ?zŠíû\3–¦ä߇Ý—ÿ,—Ë‘ÉdøÖ·¾Åþþ>>ÄóóD Úz’ëÜWøßůÑ#Ì¥ÌMž8»ÍÿríH?#ý¹Ÿó¿Æ}qŽ& fÙç·ø€ÇØSˆ‹Üâçø7ü÷ÄÕ7½>ÿsö¿ÃC¨zD‰H~±Ž+Ùì¶ÅÓì1<Ùš8¤h°|ªqôªzš¿¿ŒÍs”¹ÆFLFJ<æ½Ou˜âmëN™`ŽÞ1žâž¤Mœ ä }5\ôàiÿß›ÿŒU2’ëžL°Ã" ’¼cÚ8X|’ïp_;ÇFx•IæÙ#K…CføÌpÀ»¼Ïcl Yµ›áˆwxNÉQæ¸Í,¿ü ?- stiê ¶õ¥ ÿ™Ákµ<3Âߘ?ÎHíä[ŠoòyŠÜçØ‰-J }žà:8‹Å€$MÂí†.Ñ %W œò5û3Xö€;ê%ðùK~KÈ*P†*¬µ¼%î~ô'ô¿ç'jmmµµ5z½ñxœ—_~Ó4ù“?ù,Ëâ·~ë·~¬nè15 3 ‡*b´ÙbMí'ã£ClՂбrJm“ 4ŽDãfŠÜpÈ R¢&Õb€Õuð=ALëÐ I˜žÚÓ†0\ ©8Ί §H)LÓH` ‡Ç“¼¾üß¹³ÆìieÓñ°€&\úß#$êÙá ý¢&<õ{´hcX¾#Wj"Î6‹Äi“¦FÂk`h.ØjUéÉ*ëXfòݪš¦ªwUú„˜áUo“<%4×'å4p ƒä ¦Ç®5OÒk’Ó˼")·Î=ü·OJ«Ó#Â4G3Åüè€ÕãD+u‰zmªfšÕö6ƒˆAœ6%êvévùÒÅWÈf@Þ+S¢Y.QÑÁ÷«¥RÙ:øEÎ/ã Uo¡¹,ø{$¼&%rÁƒÁœØ§Dž=¥Ñ^`—iU©bŸôߣ(d.¨G˜IN‚ÀœÀ'N›°èÑ5dpú,Є«n#θi1j"ÍB¦‘àØœ$G‰ø¨Ã©™'¦Ú>2sѹi )|ÔâØß,£nè—.]âÒ¥KÔj5fffxñÅév»üñÿ1¡Pˆ/|á Ï }ˆM™[,Ó#Ì*Ì I2 Ñ ` ›,S H‹1Ñæ„IÊäˆÓd‘9z`‘]Æ,¹g’( >¶ÏËlÒ'Ì ‡|È£ œ 3¥˜Ü–¡ƒ kl¢ÏK”ɳÀ.k…u^u>Å7Ó<ûü6¶6à”%r 1ù_c“:D9`–ËÜÄ`Ä‹¤¨s…4I(Ñ‹£zÖ}˜ ‚960…³Möy³ÊCÜEÓ]â¢EYõGu…†-2!ƒ>"ILtˆvûì[¦r‰[œPàžÿiQ ê*÷8x€3TÙf‘"&9&M5D”ɱÏ.Ÿãk$hÊ‘vÐ…¯‘Âmâ>%?Ë]!IƒŽ 'ÊmýÏð6QºÊý0Ë”LC$qÑÙe,e"ôØcže$¨“dC[!#jÄ--Ž2)‹,[þ Ox×¹Ïy:F”+Ú‡„¼>j—qѨ|OU,cW©‰$C,JFŽ ƒ{ØÞ¾°ØeéÑ Y­JÕJ!\?øœN)Æ “ØÚ€®æ˜I¾\5Ö&â8Âbà‡ØÔVØcž°&§3u-ÅYó]"¼ÍÓLPb“|aze묪é^•Œ Áºa£Kƒ)tÜ Õbâ¡Ë.ó¤ƒ$äõ©h²r˜@ÿzaŒ°‡¥ Y¯R&KƒijtÌ[ ˆ6®â¥ý:;¡t\î1Ï/üžÐÿ®”{:æ7~ã7øüç?Ïç?ÿù·¶¶Á* ¹È-N™ÄfÖ °ÚWÙ ´„ð6}…C²Á J6’¤‰p|N) ©à2’èå#Tß\ P.p9¥€‹Ft<¢Ô©!Çu6²TU dÇùÙC:ƒ7Þ™"õì³ô ‹9S IDAT©F5ЯŽÅ,Rro3Ï.:5æ¹Èm<4ÖYc‹åàÔ¢Ï!Óô|¹3JÒÀf `/òÏì¢Sd‚ûâŽJpމVŸ UI(Ò ÞKq01…¡\ã Rd©rQܦFŠ&‰ M+k.,†¬±¡Nó8ÇEn«ò͈9öiP³°É =Bl²èO‡Xœ0)¹î”)+ZŒNp8ˆÑf’•¼©Š À äM(ªÀFc”p×q(fdë¸éa3„(4•"µÄ—Žƒ¬]3DIËS×åŽ5³,èoÆ9º9ļœSõÍ6T%uÜU¯Š 5Ò”U&gœÛh *2œj|I²¤@Z’¢IW¨§ï¸Ä*u‰‡Ì½ìfÐٶ飙RQŒ ºë ‹†æà 0¢Y!y Ž&Ÿ«¿÷ÐÑ%B‰iQ ¤}ÂÒ¹ ™ ûrÊöh‹0}lÁ›hx<ä ò(çݼÜ||²„‘]¿xƒuÎÈ/Q~Š×)NP'ÍKÞ·I{5Þ7çM^`‚ó삹ÑwŒó”˜`–.ù·8yºÎ~Þÿ*gVòðc¼õæ2?ûÂu.q‹<%ÞåIæÙ Â`ûÌ1Á)Ï®Ñ4dßqèÛ|¦ñ†ábE‡¼.^ä)Þå”ÇLö˜±˜c$MºDxƒO¦ÊÓ¼ì›L^ö¾Ð<6Y¥Oˆ§x—#¦XìíÐJEÉŠ /{ߤ«…Øe‘ £»\ôîðÐ\eS¬P#Å“¼ ]ë¤øåþŸS³’| =FËO”¨†2LqÌùþví9ÞOrÉ¿Ååá-¢V‡šu˜KÜÂV[»fyŒ87ºÏ{Æ“™àîÎà&qÎs—IN½dÇòo²%–¹ÇyRngýkä 93’5€à3Ão’¥JYËrÍx‡)ŽY`—MVXðvùéîânø<{ú,×x–U6ÈQ–èè+lÒs#$uIÒ{¬sƒL§Nn¢Ä-.“¦Æ ¼IÚ«ñ†ö \^àM œ²Á*}ÿ#ŽÏ~BŠûŒÜÛJÂ3 FÈã{œ¾ºLr¢.ä"h-Dé`]Y #t9d&€Pµˆ3áòˆ[´íàRM]iˆØ“ÍÙZá`¾Ãu9ñ'iê¯Ü#ÌêJ™íÝ,÷o„X¹"õ¼:•¡K‚&ƒ`ʦx œÊ‚›-»ÐyJŒõ.L: ¾ÔºÆà›q¥ÿ»\õµ“Y–Â÷±ÅC8 tøžFR4)‰™aEk‡ˆÖ%êvj ­äÆ„¤ßÀF@uAÚ¯¡{’1ax.šðð4)Àë&G—!\O§­ÅÈQüô®0ÐÔ"b\¿“à¡$súMÒ¢FŸ=Â*wd1 ƒ©HB Œ%AA9u0”adA‡˜’Lɇ§ñ„W*šRd©(w “!©AƒfÑÓe ×‚„¢ëu §Ež/P0×H“¤ñ=¹P[ûQg¹'hrhMÓ²âl±Ì2[8¡H!ð{Ûôy#ô¼‚Șà”uÖþ¸`_ŸåÍô³l³Ä•î-"t¹ÏùàMóÄ \¾EJ4ø–öI­)“꛿Eœ"ÔûJUzÄ4Çb*¨Ve©pS\æŒégüÞººÈþss¬°IRí¸ÓÈo®yö(2Áã>BòÆ…Æ{©ÇñÐRÚužPçcÒÔhÇ"”ÉI±‰®è¸ ±9f’iVؤEœ·´çU€,K‚fÐÍž·ŽÈ‹"ƒQˆKhêTÿÐX£IœC¦© 7 2Tp1x5$h>sbŸVH~m†X‡¦¨)åjS$x×~‚ S jssì+/ù*§F]˜guVs\š*{,°ÇMLqŒ/×y‚MVäÉZOñm^ä>çISåQïa“MnYé ª:tÃbȉ6ɱçÙa‘.,õ06¸Eœ.§á:ºO ·¹@J“"“!¬R'%o*¢÷±Üò’¯"4¢LPT²¦ŒB˰[5,Ÿˆ\5r>e’IŽé&Œ½ÈvÈÇ1Sä)O{aµê;d†$ –M“¤ªPÚœå>UÒTÉR ……F—Eõ9HMJ"Ï>³\âCt<’ `k}>ø`†KI$tWÅÆ‚ qUuœû¨ÃCã!k<í¿Ë‹±È Ø )2!«™Â¦¯IF}C­õºDˆÑæ˜)%e2ÈRe‚"%r¬±A• wÅyöX 'JøvYÄÑÍ`’±ÚæXL1À¦lÈõÄ>óªEŸ@g$¯ÛBVòXì3Ï„. ‹'É7¹Œ¡Kê zD8`VŠPhÒ&N›÷µsl±La\ttMv¹åÿ¦DI¬‰4÷8¯”Ï"€ÆÈÞk<#ñÀt¨ _}Ekd„4áÕa1$®8ª ±¸ÇùÀ¹Ï<bÕ ž«©‰a›5Òj¥lÒV9‰q‹b¨Œšµ –ùFîÿè7tI‚[`Ÿy…cÝáâà×l92­’áïóu>ˆC.«ÐÙ¸Ëü$ïQ'Éu§I’+[8åCÅfÀã\g=6XEgHXô)pÊ!30‡‹ÎY¨“«ëo²‚Å<%Eü™Sžì=Ùåmž¡I‚U683ó«ÿSÞºš üL–¥ýÞàl"tˆp‰[ Ôè9EÙ¿Áb´‰Ðå÷y•ÏÐ$βȦï`‡=æq°˜å€INHÐÄWIÎ5â`ñ7üL€ÌR¥F‹º‘tZ u‹Cc†=áŽ×sŽi&(2A‰µ?–¼×y‚:)VÙ`™­ÀqJûœ%LŸÏñuö˜ç˜)l,±ƒŽÇ×ø# ™6¥Ì “Üç"<Ï[ÜãM’ä(³È.¬r žÎWØ J—{œ§B–HSçç•|Ab)«"¡;l°ÊóDép™›$‡´c¦¸Âœ2É Uë ™¹¨“R{÷>ÓÃ#¶X ˆ]³P#Í5š¿Ä- Ž¡ÊVaºÅ„Ÿc >¢>õ?S[ûÉÈý¿üÊR!¦.ä#uî!¤ÐÙQ•"yEB|ï bªª£…¡xÝ&#†ØÄhKä*]¢tÈPÁC>Ašîˆ(m5¾’¦Î©B [­ZA2ØKql†øŽ ¦·YÔwøA˜ÒEGÌùRhrc@ìQ]†ï¥Kˆ(Q:€ Aƒ 5*d1p™â„¼S¦@‘{ÖyƉ+VÇŒwDÈ•½oM÷iòГ§ÇÉz—yö‰Ó$N›9’_'·NO—µ¶]Ê~žØ¨CÈè-f9P‡û“àç,(râ ‡ê&™#E¨×A×dUwŠc2Ã:1½‰«étED - Äøº8^K °˜æˆ¡oÓa,UŸk¡¿)ŽÒŸ‹®Ì‘2/1žÚµˆ1fÚû@Þ+ÓÕÂê°%µÚžªô-ãI£|Oäµ;J‡Yö‰ ;ø¦À#…©–¤pU 8M ª²,Y+#²*¼û­­ýHÝÐSÔ1Õ7y„®ÜUx0éÓÑ@Ú!Ùà-:jï£MÓàTœ   \l[^¨-†LqÌ%f¼#Ö´u…ù“]ï¡Â5š IÐ J—¤ß #ä©kˆ…PÀÄñÞ#¤hFY* U:O‰ÅÉSZ£(ÕwŠOç ›¾ì˜zrZ%è/Fý.†pÉQVxÖ¾¤Dý{ÆnCtá2Írøt™@RŸÆ;gMí¢ Àêøì'Oè?ð+Jƒ!&-ªý"”n7B¨Óg·‚°©«4ÀR$b+&{28X÷+TªžÒGêr× ‰î¡áÓRÂCf(ªj¸ÝÇö”D>H·5½‡ö4“â„]ö˜SU\Ô÷ð™¹îxsÜ»9`ér„ÖÃï™Þõ©¡IŠ›eYl+Ú]”ùÀ!qjL3š”˜P0ùç×qIÒdˆMŠ#Lª‹/ÈÒ#»Ê.çáê’åQ‰Q bdh‰8 죥XôÆHÓv \aÒ',?‡šäÑgÜ–> aÅÊh×&Ê+¥Žºsì£ãfO’&b6`øzDNÿ¸2–S…ècàS7ù´-ù$C¤ÀçD+8ny/QUøVƒ„ú~“Y›>¦ZÇØ4-9QðÕ×@þú&>šz=b0K™45t\Ì û÷|ý—À2? 7ô Y–œc^ô¿Cß²9`†uk•¸h¡ã¢Ï}ÿ¿<øsú!©Éü:/ó×8˶YäçøoðÜàmîÙgQ:i.q‹.6Ya¨™<ÎûTÈÒ#Ì ®ðIÞ GY†PÈ0É) Ñ”õÿˆ#1­Æ{.Ÿà@ÓyŸs<Å»ô±©“æ>gy·xbö}޵óÞãÌ>9""äÓÁ}MRÝ^½…a y Îaû~®ýñ£;b‘»â>Éët/ú!gxap\¨Ì‹¼®v`-îsNJ8¤IRUÝ’<ÃÛhxÁˆm™-†˜LôŠ4FÔáeÿ¸Bç&—yÒ¹Î<{|h^æø<ÃÛ4ÔóL›¿äÿ‚»âøñqú';ôÐkl ›cŸ=æIRç˜iª~šÑPWãt›~÷Øe:)âŠmž@¶,u •¡ÉâÂ˱½ÅßÑ©˜:" øœå&ë¬Ò3ÂôÝ0 £©p ]ªd°é«OR]®,L2«öñºD8³pÂqî~˜ãì£uú"$©ˆ^S7JÙ³OÊé¨Òa% ’µ6Y‹2©ù)ÚÄñ„à€YjdHÒ O8àÄWÕ?KÐà„É@1ûWØd•9öqÑÙd9ø}ŽoÞ÷9G‰¼’Ô¤8UÍ‚aN˜T;kù¹ôÕ!kœð4‡œ¡E‚ UÕ$r9`Ž6Y*ô3Ã÷9Gƒ$¬¥Cœ7¸Âƒi ÕnðÕCV›7x”*º„IQ爙àÉ;¤E}BÔIÓW&ÅS¯ÀH31cH[ÆäÊcÄ:g˜—ÅŠ‚òHnl5 ‘DÏ»ÈÌU¶2Æ3M›¨²a T!À)™îýGá†>ĤbÄp})IQ§¤çYg(’æ“›öEŠt”¢Á>s„èsÄ azì3GÞ,±Á*—º÷lk›3¡Ë3}ˆÅm.2Í"Œ0Øf OŽÛÅ€b´8dVõ–åZ‘8 Rx`†g]¸JÞÒf—††Í&ËDéJg3a0‹¬ vˆ2-ލ%E]uÞ5¥!¬Sd"HŸŽ/Öûêƒnà „ÏβŒZ7Èà)vÌZ$‚ÝÚ:kJ–Ó&I“ªH³n­¹ ‡MV&wO¿Í˸B§AÁ6KÓN°Ímb0KƒqÚAËS{Ó]lñ“”û?ÖKb–],¥¶ÒTï‰-¸yÑ·`ªpX0 uQ [ı”¹k|Sª’ ¬`CUÃr‡DQ:´Hô´=°}††©.ë>uÕÌébäË`˜çiDõv B§¯ÇUªÂBbç=›ù§¤ÆX.=5%œæ(HÕ÷ Ñ%˜Gض”7ÕI«‰£EØðZtÌ(9¥ŽÓ þýö$³&r%1 ËËl)D›¥ /wäq¢¢M’* ÊÀ þ\qZOa<át0Yd‡.a–Ä6'L"+Áƒ45"tÈSVO×Z°ßHÇÎ @V[ Zc\™$É©ƒA†*# 5g ©ŸS žÀ}`AÛ¥¥jÊÒ¨X§M<ØŸûˆ FR‡Ã:1Úhø(Ò AŸ0yJ$hÑ$ÎEÂÊiÓG¨{¥¤c²ÊöGîÿ_xBOТ&æx(֘⇴W£¦¥HТF’:;b‘*t\–Øæ—ûÑYà¡qW{„-–¹ ¥Âm.µ5®ó$1Ú˜8AͪF yöøÕå1`‰mê¤Ùb‰0}VYç¸ÊsDé0A‘‡ëâÉÀˆô‰É|Mÿ$ÛoY4Ÿ¿ÄËâUX\O¢.Ÿéð@?Œi¦9b‹eŠL ãr;辫N¤ZÄIÐ K 6± t¥Ã7ù´ºÁw™g]d×±¥'˜á¶ážyžQVÙ 'B|Àãì2Ï*›d¨±É }Bêã+ h&¢ä)24¥ªK”;â9Ê|Îÿ=ˆªºgâp \C,¦8–:XÇ‰Ó à Š »š¢B–.ÙQÖºÅ`Ÿ¡Æž˜(tóƒ=¶ôe°àDLÒ IKÕÛN˜¤I‚&y’wéáñ´ºÈ9Çîqލ—§;uºÉm£¤XU2ìê l±Ì;$h±ÉJ àHÒÕBÂRÿ;&:üdäþ±¿Bôé¨ÚaQQÇãraùŠøÕä˜I5’ÈuœâQŒŸ {„p°HÐÄTï«ô’{4Tè3.Út «:“‹ƒ…†ÏÇ4I»5îè_HÏAHôéŠm-¦æ&QÚd2¾AŠm,g+l“¼ÿv˜'ž9&îµiéñà:=À¢­°§CÍ¢¬å‚ƒ¿twË1sTkÑ1Hð“|PYRÞñ¬Àþ許sj¤9aŠŽÚ”˜à™` >ÄÆS_ß‘º&Œ§U×Ó𔿢øÐ]tªd¨“"B¹àëÞAаÆ×MVÈ®=‚éà`0å2ÔÛÆ­ƒñ ÕGã€9,†3‰CŸPP;»ÅeUKlÓ AGá´„T8îÆŠd¯GœRP쀤’¾Hk_™œ 7†i‘ J†àúÝ!BB5*äJ±…ýQïÀ&?úµµ#¦è1\4{„i²í\&§dö­`¯[#|UIKi4å«>f’ú0I“Y*¸è4Hq‹KjÏ*‡OlVÙP¨R©ÌËSRºBÓQ&¼™rY¹…÷‚ÑÜ›Œ¨ªM“ œRϧ¸)Ö¸ùí(ÉO=¥ªs1f8d™-v™g=â4Ù`U‘žªêVªö‚Tì¬ †´èC]"1m v‚ÓÑ"އ†À§MLÞøEŒAϦÏ”:ILFGzü¡3ð]tÒÔX`—]¤w4†6d’•ìÔIqS\0’93d"8©Cô˜æX¹Ö%~WÃ#¢Þ‹ñMÇe›%,$[»IB}˜ÃÑkˆÉfh9èvî3§\çà«Ýù VñÑ‚ «ö’eòxh’ŒåHßúãCãˆiµcß`Ô×å»÷êÊëäù¿Ø{óK³³Ìów¾åîûûž{äZ[–Ë{1©j0Û `Ü’‘‡2¶…,ˆä²d$d°ÿ`Ʀ1tãÆP´ÁÙàªrÙ.—«*kÉ¥rÏȈŒõƽq÷ý~Ë™?ιŸ«hãÔ´[óI©JEeFÞøîýÎ9ïû>Ïï)³Í4·94Â(ÿ÷k¹ÿk…þ/Õ6'Ðl€²¿ŽO]¡>£NŠÐ›ïH©ª,Õ†é%zº%ÝÑ<Õ€µ¹Ë]bÁ&¦²”©G'bQ3”~C=Gj“­;£¼ïQ4hG;iTB™©ˆv„ÔÜ|ÒbF¶¹ñbŠÃd;\Q«òU–» ŠÐq½IÍT¨”'«ùψÎuý;u¢ú€ãÒ#J“4¶¾/]bºï¦´J¾f˼ì]âDéÓ!0ëU¸’êvøŠí ï‹¥Ùæ] GÒµcxoàKŒZè*Ù.O”>=ÍâÙÏFöÄÝ⯻¬¿2Ð<Wû4D(úUCâÔ½³µëÀÒ;ÕÝ©mÂxmôZ”r?L›xPˆòÏC èeŸBpˆè¦I _k†´4j¶r¯*÷ÿ-÷'Ÿ|’_|×uùéŸþiNŸ>ͧ?ýiö÷÷9~ü8ï{ßûØÛÛãSŸú?û³?Ë}÷Ý÷†–{˜¹ÍÃÞKx†Å5ã(ct8 btùÐ’IÞÙÿnØâã~v˜æ«Œi@,÷ó Çý«x†=î ,²P˜<,Žr] ˜:Üæ+òš:m Ÿ"JÜÆº:AÉ&®°‚Ð öôÃa–MNqIƒ”e–Mµ¡øÐ69JŒIÌcKÜý¦ÅìÛJœä2YjDè“"Ì#î $Ý6ƒˆz0fØÆÂcƒ9u¢¦Ù!E#ÈF¶p™eSå“¡G”eVuíŸÅÅb‰5•ßßÇ·™d¨æ]×Èr̿΢XgSÌÒ#Ü@àóÃ3Þ%Ư‰ûT¦¯/HSgž ÒN“º­NÇä5¦Ý]Êö®–a.rWWL*gþ>.•5„¬±Ä<›Ê³JCßÓ-Æ)±Í e X8<À«ì2Å.S$iq‚×ÑPMdg0ÎÈ ê0'T®r’Qzä©Pd’Ey—#ÞMv¬ m̱ÌR4ISÇ4< ”´ÏÁ@²ä¯‘í5hÄÓt´E*C4@„´€§ŒÒÝîy†þ}X¡—Ëe>ó™Ïàº.Ùl–øÃ\½z•?û³?öm>ô¡133ßüÉŸpíÚ5&''ùЇ>„m[Þ› Í·¤ž%³OŸ";bJ Je“©Ö.‡’·‰ÐÓïëcÞ>n‰ˆßg?2¾¤dŽ#¥R(OÊ=¶Åm’ÌÉMB iKK ¹CÞ5øóæu+KΩ!mÁ<›,ß¡2ž%K éÔEš}1¦„™~•£Þ ÊÞhCJ0¤ž…«ÊìcË!–á⛂Eoƒ´_'é·Ê µ ªÉ åh”×bÇž¢e$Éûb²KIŒÓ3#Hß@JŒû"ÌØ?Ç–ûüÀðØc±¿¿ÏoüÆoðþ÷¿ß÷ù­ßú-~ý×·½ímüÑý?ó3?Ãøø8O<ñŸùÌg°,+8YK!¦À†öRô¬#‹@ÒZá=#J›„>‘úäÙg‡=ch(e«×5µU£Œ}b “¢6ªäµµÊÁ±Ë$6Cö5íHˆýw"APÂËZ©æ]»LbÈeb¢Ç]ôýä&úTëç=¦ôé‹.&%&(™< W(1N–Z€¬“¡å%jÑ4;:LÍkF¼ò>ög‚aø”)¤©fÑiƒ=1Î@Ïa)AC¤‚ÎB•·9„X8l3þ¡„@m¤©Ó÷#ZÀâu‹(]V9ÀŽ˜Æ2Ýà4¬,,{ô caQ#£ú¢I›ûÚS«rÄ÷©kB×Ò%Fƒ4Ç¹Š…Üã ö‚ø[Õºƒ5–Xw%jƒ¶šùëù{[ĉ˜]] Ú$‚xØ8m6¢sTÉSל2Z"ɲ½ÜŸ»Ì­%ƃD¨¶7Ýã†n|¶µW&“á£{(nµ IDATý(Ñh”'žx‚ .ðÙÏ~–O~ò“ܹs‡Ï}îsüÂ/üÏ=÷ŸùÌgøä'?ÉË/¿Ì#<ò†1]“†™B éŠX Hïë’ ¡ÜSYc‰»ÌsÈ0±l—1Ê4E’º‘ÁÄ%*Ô<ÓfÐ-*‰q¦ÙÁJ©\•9þÚþ ¢Ì4;,[«$i²Î"ûÑxå•W8zô(7nÜàÔ©SD£QfffØÝÝåêÕ«<ñÄ!¨×븮lèË»ßdËz ’ø ò—wòu"ô¸Âq ÝúZ‘Wù’ñ^ú„ñ°øqžäÏø_ÐË{ø{V9È_ñ“l2Ç7/rrár0;:ÁeÆ)ñ$?Îj‘>Ä-¾Æ»´ˆÅäWèaŸwX¦JŽ%Öx€W(1ÎyÎr›ƒü_bžM>Çÿ†…ÃAVùaÿïøªñ(U²·y÷þÎü·ì2Åó<>{Žçãüß/ý‡nòž#BŸ¿?JJ(áÅQ®³É,MÒ„ðÿ•‚¿‰ÇV8ÏC8ØÌ°MŒ79B†÷_£mÇù+ñ“t5ò·9σDé‘ 5ø7Õ§¹lŸà¹ÐÛi‘à]|›â0·8ˆä­û,O<ñù—I¿¯BÃáÛ¶ ‡Ã B¡B„øöJÕ«ôðÃUÒÂd"Càå4ô|ÂÀÇQzp„pìr© ” 3P€‰pŸ$Íkhë©Ù¼2ò ¦uúƒ¥?À6)$KË0° ÄèÑjÇ1öµ°ËÆn MÐfLì³æ&)•°¶ÔeËê±ÿ’‹qV¡sÚ£­lv –IÐfR±;.ÑL(}F47å UºÍ!¡Zg“mV›JL¶x@GØè~šú5+¢œB7ŽÞS¡&#…¢M5bëÔ:W'pU1õd,¤ý®&ž¾¯ <ä¶Û¸Z'Ñ£®õIZ:ÊWk"šq ˆV öxÕäï±Bÿ>µ­µZ-~ó7“÷¿ÿý,,,àyRJ\×Å4M¢Ñ(ƒÒe Âá7ßDÊ[„ºiK`&c:ÇJ1¢²‡Ó³9]%Ï>E¦ÈPgŠ]=7v‚9oŽ*IZ*½@Y%”鉪‹²¿e¢õ áqÄcâább{YYÃv =éëÎGÅ5ÖYÆ@£1”¡sÂZí,9Á| ¶˜eÌ(ó?}†ókGøÊk§xç}7ˆÓe%&)1%w¹ÆQB ƒu.M“²Y`ÆØf@Hñã©îœ8*´fôÜ3Íy*Á×2ÔÉQÅÄ%N7¥ù„ü!qÑÁ Ê3R×÷µ)+O‰`Š"v 5£BÔè‚[G—šoT»×ÉÒHÔ,5j¨QÆ8{Ú¿¯´CB* Os'|5r̳AL¿æ‘1„¬ëJí¯Äw#‹\TïJ—ÑÔ|¡ qÕR&B_§¯µÓÇÔL‹ï £ÆÕëg›$7IÖkLŽ  8¢Ye¬v—Ëõñ~3ôgŸ}–?þã?æ·û· œ={–?øƒ?àØ±c¬®®òó?ÿó<úè£üùŸÿ9³³³,--½ivæÄÊ¢¤Ä{ÄiÓ÷b*EŒ6m-Â8Áël2G–œáBÀ)ù³¨r¤ÖÇÕÕìÈV4Ã6g9À'¦Ûº”—e†ÂÖ |ƒ6Њ¥ùa¹Í8% ”éå07x„>XP¼Fä¨b¹ öxûÜ€ºmsù…<+oi0Ç&= ˜e;Ø sT‰É.]'®A)M2Ôôï•x.M’²IÜœ6/Ò ̬ïçU:ÄUR˜¥ΰÈ]ŠL°Ã4y*œåEJLÐÕHÌÖñôü½IŠCÜâ·(2‰é{LÕKtó1 ¦º]¢t‰bãpÀ¿CØPÐ[‡À(e¾R´«Ôµ.–þy·@dzµà-kÊ—Ã{ÚF³Ï"ëHÏ6šB©]æ@ùn”Ãašm¦ÙaŠ]ò²‚éI*V޶ö€Ž¬5I?!I›iv8Êu"3Æ8{¤hÒ"IŒ.ïæY-ÛS ]ËÜÁš÷°æó<`µÑ®šïºB—߇3ôN§Ã¯üʯðŽw¼ƒ•• à “Éð /pëÖ-Nœ8ÁéÓ§ùÝßý]nܸÁÓO?Í/ÿò/¿yC?s˜L²Ôa%}¢8ØêÈ& ¬¸«-†-"š…PÐÜî"“ÀmtÀ%… ]YŽQ6R ¤Á!s4* á`¶<Œ)WÇmúÚ%˜B ªFŇÐQ»B¿[j-š2Ié¢c ýÒÙ%s³ÌÖ+6“È`c±µTà«JR‡>…EK(Wú(ðh@‰¢~£:BÖÔp©³¿Ó4¨'+kD™"“Z¢«,¢Sì¶Ó‚ܧ'bÁÅ@bá?¯¯…¨£j?JŒl` —<• øië€&õçºúg‘Úrf¶`¬Ú&Ä€6ñ ]?I1(nfØá6‡‚˜m W“â, áj ùfÇFz#‹´òõ÷ˆÑ æÝ ]Ü™Ú)`㟅¬Pš¨‘ûÂÔö·96ð1Øc2´YëRK™…8ç›÷æC—ö?½fÈ{ÜпcúD¯×ãÔ©SüÍßü çÎãØ±cüÜÏýO=õ¿ú«¿J¡PàøÉd’ÝÝ]~í×~ Ãøö·z^4J»,R32Œ£ø¿u²¼Î Ò4Xæ!†œç¡à¦ú|“·±Ã4=Cn/&¹Æ1­’TŒçU>ªÄGö§%±FŸ(4h#8 l1Ã%NQ¦@ž ú™ä2'™ H˜5²|M¼‹º¶_ìˆi^äa:$Hè¹î-Ó"Éq®pròÙe¸ðâ8Ór›Y¶ø\çˆ @ ñ.‹“4cI=ïU¹á”gŸ‚j#2Îmû·ÌCÚX2`@˜U³êŽçNaQeÿùϳ³³ÃÇ>ö1VWWÉf³¼ÿýï'ò±}Œ§Ÿ~š|à8pàMߣ@Yë”zºEW#BÃ$mât±pÈQÓBOå¢ëŠl´HÔé+\ ”Ë!íbQÒâ._¥ñÅéy }"øûI·¨ \LòTXw 1䈼ÉózÊ2¤À>+\%M#pP4I!1Øfš%’n[Sk¼cî"µÉžzå$¶2ÛØ"Ó®ÓÔÀ–¦f'¤t7),A•=‚sùÚSž£J‚6iêÁf­Pºmʲ@‰5?‹Ù—ôü(ޝTå> ‘¡*ò[F­“=…Û¥¢³0TÈk›š²Ð6H³Í }W©ÞÛ2-ÂRÆ(ý¾Štu°Yb96Éky,‘áß·ˆÑc †„‚Î[ ª$⇹‰KB‡£L°§S­€·ˆ0`%ÖX ªï,5}Oö™a;°Cæ¨1ö"{Òb»d©±&–i“ BŸ¤li«\©½ô® rà#ôYâKþÚ=ã¢=óÿ{Íøÿ]¡?þøã<þøãoúÚC=ÄC=ôí¿hYüÔOýÔwü¦gýó\åqþŽf‰;óo0¿½ÍÚôÖÐ#n°8¼ËßEªíŸ<É—ÃÓ"I‚?Íâ9ÞÁWøAL\Þ]þòUV9ÀEYgf¸Ã¹Ðc䨥Ç[yžW¹?P'ÿO<œÞ”¿U%‚Ýï¾Êuq”‹æi„øÑáßb9_Œÿ'äë¬tnðÍÄ#™dBîñc­¿å©Ô£AäỽgyÁ|˜×¸eÎŽ¿Î–Ìòû/ÿ;îp—Ãî-Έ×xÉ:‹…Ëë®kß§LŽ©9ÌM¤cP³UèÌýk—è¤c<™/MRà6‡¸É3L³C\t8ÐY%áwx>óºDyœs”(p™€à4—è ‚Is“ãò »Lñ¬x·Ê*rëüØðK=I(£Z¡»L‘– ÞWùOümî1¾j<ÊeNõ®à†L®šÇø¬pIYäUq}"Déñ0/ò$?Ž@2Ïf0ç^gI«Ù/Ó&É.SØ ™fGyÉ9xôÏT/R SHìsƒ#Áâßòe hfƒ9Þé>ÇMëçxœ(=fØæ|u–ð1˜‘ÛÚ]å…ƒ•Ú}¼Æ–©0F‡8ïàÁ¢t‡%¹Àq,\ÆØgÉ_»§‡É‚aèûÏ—V(øèG?úß|}”Ù<ºŽ9‘#G¾ã÷èA üUò´HbHIÉÐÅ#»j’6ë,’¥F‰qÕBfH¤¸ÎQB è`“yÒ4‚èÒF:EÅÈÑ lºÊ––¦1•fלd‡i,ÝúW¨uCéOÊ¢@‚vPÝõuÄp™1ÐyÝCBZPªÒÉŠæd`kaz¦…!}^|m‰Ù#;DÌ>h;éÈm3Ã66e l1C‘)íùŽ£K…}M£ó0ÕxQGlŽ’*aWw€Ðº—³w)¹n_K3{&LVWÙ£d¯.QJw2b¶+¯y,øÿuƤ,Ã!öÉëê¾Áq®P`?°³…tc„~=î_Á6“‰ËBH„ðüëë¸XLÉ]•X'B ˆpP®¥ÇA÷6ûöXÅGkæHcãb‘ C“9¿ªó/z,±N‡ý›¤ þQ< Y²Ô—äš^gTæýkl0O4 ™¢H‹dââ¯S!Çv@‚l4¿¬j7“IK&IµÖ̳Þyš†R×O±K™2[Ì‘Ö1µê3 Haí5êÈxÐÑù®7t˵Å=µÜÿâ/þ‚K—.ññœo|ã|ùË_&‘Hð‘|ä{³¡ßÊ,±i-ë0ø·ìˆ¬‚ƒDéqW,àÙ&˜a[ûÅBÈábñ2²ÎbpBÛËsC NSk,A\ÅéØGhÄhЦŠ!d‰—t‚NœEÖ&Ák‰SŤJbŒ+Ñc¤µýÊÃäŽXf6ºM‹d ì(< ZØãÑ{L(+Iz1ZžÜÃ$Ï«/O‘?{T«Äy,d6I¶ÔkÅì•W¢žø*ûŒÑ"I93†Œª€h0#.2A‹$™^‹J$G/ T¥k,±Ã4} c¸Å!Ò4‚׈ Ò¥ºf”]k‚‰è>žPiRUr”DW §ÀTÀUV0¢¾~Øâ8ØÜÊÊa@•<5r\0ÎÐ$EŒŽ&.-q‡%*Ú#®ð¾µ :qƒ924Zµë°b34GMceÐQÕT¦ :Äx5rš]&Xƒ.pš+œ @Yý¹ð5…Ú%Î3$iã`ÑÑ•GŽ*A‘I]f‚ÊgsÃ8ÌÁ{¬Ð]óŸ~¤ävôZ­Æ—¾ô%êõ:RJ>ñ‰Oð‡ø‡|ë[ßâóŸÿ<¿ôK¿ô}³¡ÿ»ÖYhW ù?ü:}7Œ±)YãÄÝÙZ“‰Kd»5ˆIÚF’PmHÆkî·xOáiºFŒ=kœ¾«¡±H›d½C)<†!%ÑfŸf2EVT9|~ yÔ Ë7;$-¢ ‰‰6 §ËLy“³áW0=†•f,\ÂÚäŠ5„å³0¹É­Ÿ£MÓËD(F'¨‡ÒÌù[Äš}Lá’CöüIL鲟ËsßîE.Nb$c¡éFÑ€÷Ì>ÍF?ƒûU‡_xàÿÄ÷Lî D£]ú^„éý"“õ"'R×@BÏŽ7ÛìY`Jºá8Q³G¼ßÆêyl¤ç±.†ç±R½Ébl ³ãñzÂUL|lÓ¥hM0»¹Å±ubþ»íà™&ͱ®m°-¬59nß`¼]",†<¹H7aúÊ!×!TuH?ø%¼–p  ãÚG­Ûd™¦"Ó®³š=ÀTk—V,A߉’m×&Ì—wËÔ˜OoaÙm?A¢ß!ÖëÑ‹…‰VŒOTˆÄúT¼<…a™v$AÃJà Ý2­h’‰~‘={Ç´YÞ]Å5-™ ži lÉÐ !=ƒ1$Ñmîƒ!aZf‚˜ì lh{ ^_ô\J] ›àØ6õP†äP¥ßuEŒj(‡#-Ì¡OÌé0œ´˜Ú-³ßOßcËÝÄ5ïzCßÙÙá™gžAJ‰”’OúÓ|îsŸãܹs|ñ‹_üÞlè—S÷¶y‹÷"ö,ž0¹a!N'hÁ܇y—ü:¦ð¸ÍAΉǙ`i¶Yå /q–Óò"ÿ{ïÿâ[±· ç!lž öã%â¼õIZ´4>q“o“Ï‘’-nhi±È¸ž‘®¸W¹bç–8H„>‹¬câQ.qšÓ\`‹9np„¢5É8%V¸JΫòœù6MGëã`ñ’ñ"¼ƒoP#Ã${ÔÉ𓽿¦[ˆòwæ£üçßÊ#ßE%¬y*öüû📦ÁÛù&iì0ÅeN7º&õosà⫘xl2G,ÓìR£OÔ˜'Ÿ.óç^õy¶Ùcº"Pb¼ã\ä4æÇÜÿBÉ(°n,ðŒõ(»_aON’-Þ뉦‘â¼ù “r·¿ÉËá(‹»L1NI“®Ò¼J Îò›Ìq…MW0Äæ‡HÑd‰u*äp±)3λy6˜qyÒä^ÆJ@ôÍÔ[‰‹6×9ÊÃÞKdŒ*5‘ãuN(¦µ¶Üó ºÏrךgM,ñ ¾‰”UŠ+Ž|^V¨ˆ<79Ì»¯ñ˜ó^Š=Hl Ô›fG#Uäæ4;*jU¹§ ]µ÷ÿÛGj8€VSÑˤ¯dÏãSŸúùÈGøøÇ?N£Ñ “ÍfYYYá©§žBJù&÷È¿äëÉä0‘ìiWŽª®2‹LbØ>ǧ¯r;r€ñˆz–÷ä8G&n¥Î$»Üâ0¶âº‡Mš$™g“j~DI¬"’PDäÿ—‡þšóÉû¹ÂqL<JžçGèã=ÍgØ)L(ƒÎv¸É²áo>‡esŒä15_½Å!?nñ_Íb,[Ñ!AáÀKïbÑ™ŽsM¥J2N™Úx1.éáþ¥ $#;üw~‘•«š-¡2Åoqrþ2 3¥à f@ %Æ&¯‘£B•üáóÙÏ~–J¥B6›%“ÉpæÌþôOÿô{³¡›¸ÍI¶Šb’3\`…+¬±¬‘{aæØâº8JŒ.T›µBŽ.s¬³È2wØ\Œž¢Nšs ä5Î €£\§@™W¹_C R4x]œ$#ê £«•ŠÊrÅ:Î:‹,qGÓæÔÃ>NŸ< ^Ðvª×8Æ Ž0mî0Ëk,1Å.&>K¬ë‡#Ž¥-1º¼¹¡‘+ô™}þá['ˆ>’ãñ-R4q£6]bl2×̰„Mô‰£‡¤ÏV´0$M‚6UrTÈqTÜ"d; û®FW3 @9°Ü•( t›ú6‡ñ08Éëô‰ðUëÝÚâårTÜÀ˜ E[+ãØ8œæû¢À†=Ã4;˜x\ç(–ó¥ipƒ#ÜârœæWY îÝ"ëì“ç2'èå>^ÃÅâG¹Æ 1:ÂçǸÅ!¦ØáÔà2]3Æd¨È¦9ÃëB ÝV­“f‰uZ"ÁEû$»Lë¬ê~0sw°RmËQfÙ¢bä¸9Ê&sL±ê6™¥FFE92Xö&Åæ½‰â4Ìè_µ–ÏÚmÕ¼÷ô†þüóÏS­V¹qãÅb‘õõu\× \Ó4ù~ºŽstGL…‹4!F_DJ’K-ÒÔ¢!Ò˜ø´u.C—ˆC\!¯ÛÕu¦ÙQÖ5Ñ'Ì€”†5M:{”­[b££º‰£ IŽiêó%a™U²φ˜× n(]rT™%¬;GÊ­òÄ=Ý™QVÍ4RÏÀU7KbsjLU±Ãa®¼œcéÁ~ vÏû|ßd`*•¼@2ÁžV`+Kæ]‚5(¡m˜>†Ð)Ÿ²ÓEè3A‘5–iŠTê6R‰«Ô¶f jûÝm IDATÅ,B°²ÚŽÚq’fK³ÓÚ~ij·NK[\]@2N‰M;;¯ƒ©º˜ú¿J‰>Ð\|ìcqY3F‡4M¢tA«ûÕû× G,Ï©qëV uRßKhü@qM0£¦”g+àÝÇè5» ÀvLS|p1ðƒÍ|¤ò»G²”« šÿøª6|6Ö¼7mèÿ÷ïû\¹r…­­-vvvp5’tÛ¶¿7ºÔqu{b‚mf˜f›4uv˜¬”Xg1P¥&Ø¢F–uéÇÄ¥O˜m1Ã.S•«¸Xl3ø#ám$N›*Iík´ÉSÕs¦XìQ’ãD™>aŠšhfü«,“¦É»ì1¡|©8¬pUÜ&h“`œ4HábëôIEäƒtµð˜AÙ=Dç9‡Éw,1+¶hÛ16˜£Ämâä©0ÇuÒxXDõ\OU ‰7àTÓì1AÅÏsZ^¤hLrM#&º f!¢AºYœYªÜö7ºô¹Mˆ»LÑ%FŽ C¢Žke"PÊ/p—&)FZÏÕ&¹Á<sl2ÎrtHnŸ5íÓŸd—*y®²‚pXÜ ØêÌ“§B’6û¨ "F‡˜è²'&4vÕ Ä&§¹HŸ% €ЬE¦4RÖÕsÇ R‡³Xž§€¦Ä8óÜeלb•ì1N5b‰jTT›"“² ü{Åiïí?¾RcpZÃo¿¨*îååe{ì1ºÝ.®ë ……B\¼x‘矞ӧOßTçèщ§s°Ë‚ ÕÇÀXm7)6™ã07ñuXHŒê²ˆ6&a[`—©à3jàcø’m¦·Ë]cKY«L\ä´Î;7KgÑœ !ZJG!ð$w‰³ƒM‚6›Ìbkõõ¨#Ù!¦…asDƒì‰xpˆ¿eÄC¦§šÔ\“‹¯N2y¿Ä¥&”ŒqŠ:ÝÔ•êè°:Z¿F´:Õ±SY§¸Š}Ì@½Òt÷(]2ÔgO‹ë¢¤uqº„ék!ã»,¢ÌÇGŠû:­5TÉ’× G{íM<½‡´Ë NDæG¹Âì0Í€0cTðôç/ªéoûŒQ'M˜!–X dpŸbtIÑ 4?ßý†n}Ç5#;©~I ëçÕ×VVVð$èÐ"Iœ.úTÉ1ŒÚA´¨Ð*L•†Ó €#°Ê(p´ñšø„(t©k媥Ռ)úÚÿ¨2wÚƒé3à ÚAþ±‡I“rúÔÂÄ'N#6,±F•[Ì’£Ê»&ÏsÃeõ|ŒNãÛ :ö°Èã`ëà5ïïÅ—]Ó`–!5UIN6n×Oâ‚9±A—ø|¬'õC·©’£¨-c‡¸E…==Kv S‹ÔÔ"Õ"I_'¬ $—8¥+ÙpP™¢- ì³À[Ì0Ô!†øJº{‘£F]d(2< ºÕ¥¬% Ê3l$q„²ÔLR$¬s%‚2…ÀZ%O˜9júß3Tn4Yâ¨HKËvˆÓÖ chau†„îÈ&9 ŒÉ<Zè¡vÙÆòÿeCÿN×ÌÌ 333 LÓdee…ßùßá _øããã¼÷½ïý¾ªÐ×Y$©ík#qW“”Bœ2 .3+Aµ˜CtˆÑÔ>óI]ƒ…aÖ(鱩×uœPÙé¾M_ëS’Ms&ø¬˜Qååe]u8K—M‘¢A†šHë÷ÛÖÉe¡Ãìc"4ì¨EJ‰éÈÑ1lݲU«&u™¡fd©*,%67ÄFÙ½4À8§èOReªFžžoñ0¡B‰ø¦G›ÓèùvFhm;(Bö#CM“Ýr8„´lLçC¨rƒy=îêæÑøqhØTtøQO{ð„©’'F©a;£CZ•,›Ì3Å.¶ŽqMé¶9Á:;Rîƒ ’ÞTˆ—r ´HÒ!®C]"ŒQa …Ì£BLÜ)PÆÃ¤B“EÖÞ„¤.Q ­» £¿×!N“ ÚôˆR!§-ŽÝëmânƒ0¦ÙaO¯Sß}`ü“kÆGèKKK,--ÑjµÈårò4O;»Œ‰}„í˜êŽ>P+êeHCCU÷i·ÊQ!ì 1mEÖÉS fÉ&/*¤Eƒ u|‹jt® °.µ˜8¶GÒk3gm2ÐN1¢¨¶üˆ¸&1=:©ìGžé}rTh'ƒÔ‡¦)M¿ŒÒÓ Í@É=jS+^F= Löõ&æiK˜!ÍxèëÕ¨Ö™šà§ºMÝaPôI©)k3ln 6IÆØÇÆÁG§Jž}Ýj—:›<¥³ã:ä¨Ò#¢¶âMÅHBîG‘ÏKÜ!J?¨¨¥ÇætÞF„~ð9 1ÄÃÔΧLŽ*Qz”h}£û;Aá«ó^.GçqÜ‹k-™Lò£?ú£Aað‹¿ø‹ß[ÛÚ7Ïq¨íphpÙ5)…¯’i× ;CÀÂÁM~˜#Û«I—L®Î²\'kVU¢iÞâg¥ÃÛ¤sMÌ‹’ü©*ÙPGØ8nˆX¿K:R'ä9x†R†.šë˜¸,˜¸®ÍB{“l¥Æbj+7äþîEºvÛrHyMj–:ùg» â¡®eÓò’´D‚D¨…%¥­7ˆ#Mˆ:=ǵ°„Ç¡Á*FÇ£e$pDˆ©ÞÑò€T®Å}É‹ÄDv,Æ{ò)vZ ®>™å]ïý »C"Ú$ÒrV¾‚” B =˜ÞmQNHƈOÅÌãûi¿©HG­:í«IäŒ@„%®eÒ5cL7‹Ûg:¹ƒëZÄ;]|Ëä!ëUFˆˆìs²r^ä ÷G.ÒF‰Ö{¼]I‰ücåU‹g.ç}÷=E‡‚8s:Ù0I‹ æq±46UYóÔf½«µIù§Sìâ -–ÛwYÏ-’mb¢KCç˜WÈ“¥¦qÐ*Œ1çn6A2A1¨¥©kÖ›êxdˆ¨lgOWÆsliðŽz_÷)EøÌ[A—4O…Ëœ º.#_{Ž*³r‡;bIY{)ÁÓ@ éCà“Öõû(²wdQSð£l¶î±B÷ô‘à¿“ ý{³¡o$g)%&¸[€¸``‡Yȯ³!çó+¬…)È2œÂ&–åàc°Êu+,¸:H!YfÛ˜æ‘èyžN<Š/T{u2Td&ºÍ Œ‰2ÉÓ\åzl0OÕ̱d¯‘ÏVØSÄEaAZÔi‘TT3'G•›–;1`#ó²BS¤‚Sëx¨ÄMã0ØjÖ=/7Ùc‚Wãgä°dBî^Ð ‘Z¦ ç,}æNl‘îò©ëïeámJ\±úDdŸ¤hR%OÈr¶ð2!»ÇšµˆkZx†AÅÌáÈ-‘`yvƒL¼Æµ±ÃÜâ0CBH‰¨â*wDòQ©Â h1+–õvìB¨VÜÜ` »ër79˪y€‹ò$}a*ZÄð$aÙ§.0&gè…é’¢©íx L–ê@špè •z7$Äé±?'S¿WQÜwo[û×ëÛ׿¯þGRÐëGéf¢ …EÄÒ¶ã4DŠùµî˼J¤7 i&)GƘ—›DZ¢ý>L”¶'ì1<‰rÉ ›<"_ ïƆô œEºß$[¯s:u‰ñx‰ü Ê½»ìç²Ôì ··É†j´¦£t¼y¯ÊPØ´e‚HwȘ]æøàíXŒä°ÍÃáó ­!ˆ/ <Ëd`†è¹Q’~›Æ3Õ"û±UΚ/c¶5d Â8~ˆ‰j™T¯ÉôÒ6 -ºà,ØD‡ev¾šbê¡®a2Û%löÕ¸@J–;˜¾GH:`HvÄ49ªXÒeÞß jôHµZ˜C ±*q:D…±Éäp™È.r`‘òV•G¢ßÂûrŒ,u"Mί*²“Ô„C ›¾aÚÝQ] ØK2#·ñ0éŠpÂ}D¿Ë0fç5bC¥#˜t÷hD“˜Â'áv8lÞ$&{_Ò2’úûW›´«Ü.²G[$HÉ&¡¡C&ÔPd?+Œ/ r²Ê@„™’»„!VÏ'ëáÙøñ„äø ‹gšD¢=¤c–uR¡³r‹þÿÃÞ{ÄJ–Ýgž¿s]Üð>žw™/½)Ã*V±HB-CÊš†ÚŒ04K´ÕF A‚ Œi´›Ô˜Y4D Ó=šnÎP )’U,“Yéíó&Ì oo\7‹sî­â´H1 ²G*€ÜTÕ‹Ê朿ù¾ßç¥hYÆZZN%„ͧ2 *ìq$V”(oˆ=uÈϤÜ)C?üëT¹ÿè®áË…žc"Ã#ý2ARc™cÆA†º¶È)KœQ!#F<Ö.⣫qP‡S%r’Lö:S‘  3Ì…¥`¡JÍñÙgM‰¥äqíZ[T)Ò¥¡IaU$Èó5% Ç"©MkÐæÔY”ìdä¸í 2£w…lMŽZLæôɳ.’)ÆÌTâS(#>ât°>yÖ9À• S,7ÍÃo…4>S£$º,Š:a'b C÷9¯ïàwÌë8JÄ0RVÑ»äõ>sÏæÔ\Š1‰]!=éSõ3Y1â„e ôX Á,GÚZŒ6-Ú]ËMºôúï‰ ¡“Ô¦ÌM3öq †d91–™‘`™SÒŒâÔ€1ä,&U ª¢…c&⟇-¦´¨1!E•-*8Ø´¨P¡M_Ï“Ô&d…ÉC®0Ubœ©n“T6 ±£Æ•enY²Š«0–«{¤¥±)1‰-&}òxÂÀ²Ê¯Ñd"dàCBȽüºvÀ!«hzc•Xú1íÐ?y|÷chdq’&ÔûÆ:›áS&£ ü]ÁœÏ¿Åôt¾”Í3¦¤ÈÓ§¨ËuI˜†·y“N˜a³Å.wÄMž±MU´($zLHQ1[³ŠÍŒUqH—ް˜Z)jV3¶Óµ4«Ú‘¤Ò™AœŠ76Ó1¨ê³ü=3Sÿ¤CN*áÇb…'\Œ‰¤Ã«É0BSÝ~AQœþïЇöãør&‘Õãë4”ÅÒ$¼#RFjÅ(sCfJiØ#Ϫ Qé«7":äésÌ mÊuèv••«OŽ"=XgW!@k4çxˆ‡®5 ¤UªX¤Xw±X NŸ<d¬ß;¸˜œQ¥C‰$3š’ƈ,eÅOŽüÞXæXÁûðÑã\ðÈ{Y¢M:9b¥Òez~™o¾}žÁÒŒ)‹ŽêðL,Û¡(zœQ‘Ù»d(Ñæ˜eù\AŽåé &]Š4©QæŒxÆ6;œÃÀg•CùÅWYå«ÊªÑWYå" ™'$ukDš[¼ÊnR¥E¾RÑÚqÆy7ÞÝM(ÐW8ÊUF¤YãHæ$«`†,CƤ9e9Ž5¬Ñ¢Á‚òíZ¬p¢Ôõ«œQ¡ªµXÇl²‹Î ËœQÅÄåŒ ÏØæ„Ågîq¨^{ÉG',Ó'Ï”O e@†Å*GX̹ÇuŽX%CY½?=%¦Ë1ÀU¨1•˜õb*wWæå}Ï?Ÿ<¾ÇkçièSȺò}ð+f~ÏHpêäãľ1i5v¤ø59䥰­”ÆóØ]¶¾:8¥àÊ! ˆdS¸¡Ç‘!J¸6ó$8$Ý)¹ñ˜‰+}ÍQjßKŽgƒ¤L1TIq)ÆqähhÀ"§H‚¤ç<ÂÃMÆJžc€ƒM.C?ËfåŒÂZÀ£ 8®MÑëÅdC“9.fœ°˜fÌM2 a.ÐC/ˆÔÔB‰¼Ê±€Nǧ©)ŸY‘ÙRC€j\";\†&žJ†¯«¤x¶5«lˆo=å‡êõ©Ø¡T OZéæXt)0 åë¤ã“Q¯u‰7¸Ã6Ï0pÉ1Pbè@1íû*Míãú‡JlÌ3Q?I²4p1É2¤D[&…sŒÐ'¯¬{ògd†dC,Äù!eÚÕHxñó½ØÈÝü¾çÅ‹®ð~<:“˜½;%©Är¿}åÁ›”Dœî#Ré{´Ua0!…Ð /õ¥„Ê1WÙ¸)å3—6G1z“ñD >\ ¥·˜Ç<àèðÕEùø$˜Å!IX wj©8½é£CbÎ\Á,æ1e.RêÏHH¡;%a9ædÐè¾ç0|=ƒ/ôxw£M ´…ê)üø¹¥è*ë˜$ô9¹ù€‚ÙcLšPKÑ JE2qñј*\¡¯¬xB„xºŒP¬è†Ñ÷óxºô¬Bˆ£rФ8i¦FDRÑ^¥E]H:@å{,QªÅ]ެ/3ìX (€.Å8,&ÅÛwúG;+éG–B ^ï.EúäèPfD–Pդѡ!Q®Òó yt™pF9&ÊÙó«G;B_ÙQdðƒ‹¥„A/6ÿÅê'#÷ïýx¿ô2é¬F>èã£óؾ€‡!s¬E+ç³ÃfÞtë±CeA—…{_H+¬ï+,Ðä5Ô0TH‹ÍŒ'Új+g|¨ßT0’kÒ¥È[ #žêÛ±;ډϰ¹d=å®}†¨ÅΊ:‹*™-à±iªï›ŽQÀRÁìó€ËÌH²Ä) NYbLš©‘äP[á)ch‰Tp'ÉZc0B>¹Ï#™¿°ÍêK‘oYž§AM XåˆUuÉ9üG;G‹$ ªÜ¦*(Ì„„RͱÔÙi3 Ï›9‰ø5hQº-j±ã¤IÛ¼¢BN¤m®K‘}6dçKZuõ°Á>¤µ»¹-òô9`ƒcÅt—EäNì‰~Œ¼N2å!WÑ”9R ËéK¤—Yôã8í\r "ѤÇû¼FŠ KœÆIzRØ×•$QýeƤðDG†ÒL9£ÆôU s4a¾Ç5B¡ñ˜³ºþ¨;týK_úÒ—~”_ÌGqo±A¾ X ¡ªS_y{=ÖPg‘%N©ÑbŽÀŠtЩ+k&=ЬYGÜÍ^#… ´?AÚL< L<,E#*Óa‘Se;¤˜Ò¥ Þ@_YœÆ ÑQc<=è È¡!Ñ´E:4U×má2&CG¥è¡+e䈬R¯KÌ!ë,s‚¡" g"Ég‡ïð(u‘®ežbjoß¿HiÅeOlrÊ2gF•'ú„±q’ÁÂUÓƒ9 ³&©ò˜‚ÑÃÓ8ž0Ï€«Ü§F €5òô‘¡É"-ªœcG%Óm‚Mn‰WAH¸Ç9mWUì ,ÐPQ¬ivÙ’YÁ¸è±BŽçØ¥Ož‹ÌÕ^\NJ4Y`™æ˜*Z2ÍE¤ý€xª!^§ACxÜÒ^a›çJµÞã —h£Fªª g›gäTsŸ<]ŠèsÊ)¦ŒilöÙdF’7x‡ëÜeL†yõ~ Ê´iSQüoÙ‘ÉpÒ4yi|™sçÎý@Ÿý¯¾ýX{s¬Òáÿá?õ·ÏóÙ7â“üc[·n¡]{ˆ“ÈqÁyÎ\X¸š…zh" ˈ…°E˜†-oGKУÈuγÕành2 “\ðw(;Zf•‚ßg&l ¢O‚«ócrzŸB0`Y?å¹qž…°Ï…ÑsæzBŽd{'„ p¬(O¼K™.„‚í˜cmK¸l»;ÃUÑ"%¦ˆ„±«Kœ’WþŒì³6?¦iÔÈ1ˆÁFB£—ÇOHxs”ˆm¸I¦˜¸Rœ§éä½>ù´C#¨pëùyÎ-6)­Ž!ýÝ63–¨+ðNVù¾'Ê.ËÇÔç>[ì©<ó®:‡SLiS‰ùðÑ®8J"”ûT ö‘e‰S„²Ìö)ÄB6Ùݢ[ÙŽ•(ÒSMON]j Ã"qŸ,Ö… ])²ÊQL¯ëPäŒ*iµæŒRÖäý0V§è¬Ž~ט#ï„ x¦V%vœð%±ÉÉoEMéDL²>¢”=ÊŽ+§Aý½>Ÿ·ß`qqñýÜïïïÓHü Kö÷93­w®ñæ›oþÿסH“l†ûl{;4-iß8Ç.A¨ñLlc†.7G÷˜¤“ÜÓ®±ÇY5.qeiÍ?âÒô FF^ØTü¦„åϱ¸ÂÃXúŒó\ïc….šÆUô¨OX[ÔD‹9¶Â=ªÁ;ú f,3fCUÝ¥ÐYæ4áÉÌà>3”h3$C€Î»q4«C‚¬3æÜü#+­]káËâ4†˜ ´Œ J¥ýe{©L¨}Ž;ïVX~½Ë‚hpIÄ¡ ’!‰É1Ël²G‰ëú1m·BÚ²°¨ÕéPâ‚÷Œ„p8ÔVé‹<ΰ™Åãq‡[î-½Â@Ë"B°Æ>‹™SFd¹ê=$Э„íÏY˜·h$› È«5Ä®R »¸˜ä‘»J‡÷¹wâ›ì1"ÍO†OX ÁHdxÈe†äXæDyûû8aB~&„†NÀØLQPYÄY$ =P4>F d³°í<ç(±‚/$Xä÷âЗ­Á€óLH²@CÆ+ºç¦;\Î=¢Mù£]fà i!yúxTiò˜Ë˜áà‡¹òxñÇÔM‘žZÛ4´Ùu ¡èc#M%\Ãb—­ØƒœaÄë\Ôž"ÐRÏsš] ¡¾#Nh!Œ0^wEÔ8WL‚&>sarh®R¦O&B†sH}>ö/{˜4Y`Qí¹sªøÇÝcž#k…œ.£”mf³guE†&UNÍ%ÒŒ)¬ù,z}¾WB{-Ø”i£pÊi&ŒI³Í3Ψ°¨å2BÄAF‘ÏÜP£ó¨ Øb‡EòôéR¤Fƒ%N’ÁƉGæ%:´”';ÒÄ[Èž…ƒ®¦{Ž"õ53ÏE- IDAT¨É"Š63®q$Ô'jéTiªü‡>ÂË4E™Zÿ5`gD–>9fØ\à#Òxä¥]›™æacàѤFBQÝ"ÌLLt(±ÎBfWñA/êÎu‚89.O$³\c3}á¹§Fîüˆzô)®+Š| ^Ƶ,iË`,}!÷#9ÑçVö&.G¬°Åò;œcBŠëÜc__£ŸÉq›—YÔ ¼Í„hT8#Å„{\W±{r sWÜÀ-ªl²ËL<2j ¹{_嘱Hs¬¯°Ã9®q%N¹Å«ŠuÆ5îsëhêõÍ3nó R´¨r…ì³Á»¼N™67¹ƒFÀ­ÄËÔ  ¬ò-ñ.9†2ˆÆ’„§b‰glK&ó‚%æ|ó-ҟγ!öхϼÞipë21È1¸’¹ƒÅ=í3’¬rȾ±®ð°e©#x ä((Dá7ÍÏ(èKŠuqÈÉÅ`D–#Ö-oÎ’¢¹ Èɬtñ$Vkj¯ÜP¹Æ^œe|Ê2uH„ÒjãP„¦–b©;1*²I-Î*ŽöÞW_Òð$Š7Í$>¤à¤ÆuEΓ•o´gìRŒ³ЏXT8SNJmRü7"Í5ó1¨ ‹¤‚IKªNYb¦")e'¨Ç0O‰•^¼CÿDåþÃ<îsEånQa¨:¯çȱxÞrÈ#2œQáXŤJw%ŽPž(ĪÄwãÉTtÙÔYÄs®'`3£­VgÅZTð1Ðý®^ˆ»m‡OU¼jŽV8§K‘3*˜xì³N‡2¨K,DcJ*¤f³ÏKö)!‚6eLuá B‰2ÕWXÖNØeKN)/@g_là†F5<##,XÖñܾ­±þÖ KÌe¾·¿HJŸªQp'>ûJtâ‹üŒJŒ`=f…ŒÑ ¨Œ§,ã†&—Å#Fd(ÐS¢×#Ò,Ð$͈ê¼Çkñš @ÃfÊkŠÚg’! K‘]À"ã³­@OM2*êLZfKŧÎHR ÇX¤yÆ$ ®Îç9}rèÂÁ`u•À¸Æ.f\ÈEZ,—9s@(-ŸÅ Ä„ª[cRž£a¢ȬÊoÄH[Gé š*çïÐï{fü“¸Ð+´¹>ëS¶ÉFd’ûØ¡ƒ£'d&ph±6<Æ6f”Ì.gf™`Ÿ‰–¢I‹ó§lö°K vƒ*g, cK£@’Eê±ÕLÇçâì)¶?c9}Ê!k,rʧÜ(š=<ÏàÈX‘âˆÐg+Øc[«;7ý=Jz‡.E,æ\ã>E:äÔ!³Â1i&¬(öú*GTÝ3RÚ„² ‹Íæ¾i`e\&‰KœJ+ž5¸yþú<`®[tæe¦©$7Ã;tJœYŽßÓ)¾¦q•TÂ6ûÚ:Û&ÚäÍ>¾£é #²JA¹€Î‰Êth)×M‚9)m‚¿eP’ÌÞŸ’xÙ¢lté’¶¦©Ý±d?”iÇÉoQp‰­V’ÑŠÑG§IM6HBŠär X¤ÎH^ú”¦G…³˜Œ'ð…Xqo3cU¹G$g ;ÝX#à¨b#ºØ#±ª£ffEº¬p„G‚9=¤ÛÁf¦âN8eIé˜dלeg°GE½®tò bžD„kR£ˆ„ E.©HGÑázâ×wEºÊJí¾à….;óŸöÈ=Ë%ï”KãçT Éð%*a›Yrá€F¸Àkãð‹SwØá‹\÷ÈÓçÛ<ä2ëþ!Ÿë}›Z¡Î|lS£É{<ær ù…[*0Àã˜U¶õgTƒ3JaKÈ h)¬Ë/u0¤D‡:‹ÂㆸÄ jÜå&Ÿ ÿ/6Øã/Qg‘mž±È)I¦<â2ÛsŒD†—½Û õ4²ÔY¤èö¨$Ï(Ñæš÷ˆÐ‚[¼„%\®Ìae¦ôɳ@“ŽÉ…#6ü}z g\óà£1 3äÅ€ )±šã%n³Å.»l‘dF+ŒDy.yú¬ÇÜpg¢ÌHËʼnGGOIN¬eöY§D›S6Ù“éZaŸOÏßç}ãŽYŒ™ÍyÕIX¸X¡ƒåzÜ´ïÐ¥Àúè˜Lk ‹"ˆu¹Á=²ÁH©åßk‰SŽYá ˜¿ðÈý°Ì÷XVbÅr–!m%jÕñ  +#½)ûlâc£Ï!k¤˜¨P9%ÚJÜ•aJ2}ëøjþ'uÅ]f$TÜo–!.Ǭгò„ëäÄ vÑDxÙI ýêC‘Užk?žüD˜‰øâp•³ÇÂÁ -Æ"£r­˜‘ô&¤´ šáÓ'GŽȧ¯MyEi2¿¢,’М˜E¾p~Êóªì½Fÿ¬OJLbL«ÄÄJÒÝ\M¸šÔ¨³È8LSF¤cÀ ;V´ÏB›œª†M=\DbTìXýÜ,m•K<õÉ+£›´Õ¥˜Æö]G©÷;JÀ¶Ì -E{ Ñ8d-fÐ{˜ŒÈ²®°Ï§,2&SÝ¢©mäSTN$9Æi°Oé,œx“§Ç)K1{~Ÿ j4©ß% žj+ìµ hÑâ)„Ä€Ïã)b€¦xõ/¦»ùÇ:ô}üX.ô Cng^âÿÎü43l>ÍwdÀ‚®(p4ð¿-ý5rªpžçüñÅ¿Î>ï%_åÑÅ‹<á?ÏW˜aóU~Zý?F”iówü¤Š×”†ÿÅüŸÀ Ñ 8ÏsƤyh]â/á[ºP<åÛ|¨½Ä”$7¸Ë&{ü¯ÆÿÈ”Kœp1|·Ä[”9c…#ÞçSd"¸Êv8Çë"ËœpQ{˜4ÿîêÿ }´$™ò5þE•˜Àa¸œæ¹8ÏAr“Ѐ%šT¹Å+̰ùÜÚ·xÈ ÿó·þ- oêø¡ÆMq—–å˜ÇÖ¸‘¾Ãh˜ã…Ï2 Ë{Ü.Þäâë<ç<«H2Ü߉Ÿd†M…3,ðç¹_SEÌŸߢ)ò”m\®ònFæË¿~‡wy‡å+¸,sªâS¯Õ†h–<Äî‰ëìæ¶$œGòŸùYŽf‘g@‡gŠŒd‰9¦EªºÍÑGS)wC²,q¬ÆyÁQΤÀIÁb‰N¬ UØC‹š1¤C‘.%•]ì°¨2Ðd§,#TeúÑ’bBWeAËšwp!2Ç"ÉTZ†frZPg‰IB4žp‰”6Qü޾ä¤z˜^Ñ(Óàú?ÄÈý“úóè‘ÇRT·& B] <àC Oå+f©³À8*Z·£isLÆ*&ÔfÊ“&UtY¥LÓóèXEEtéR$@ZÆDJ^†‡JMŸPLSacá0'A‹ .2ž7Re⇺B UŒgdËí¨Ï{$â ÐèQàÔZ$©MbFĵf’$ESxt(ál÷û„‹´Ã2ý OÑè°xq†{°ó÷6kŸ³h°@‘.]ŠTiž~)‚KÆú$¹O7™‘ ¡qÊÜŒ$= ´¨ «8a7¬ã`¢©ä;ù:É÷ÌÄ!¡Dl2¥,ÒéœQ¡I%Nâ&¬C‰6YÅH3QqÑRÇpÊR|É'9 ’êæ3Çä”e.ð4%p”CN$dê]F­q\4eQ“š¤,',±Dv\Ðé©Qxˆ¡ôTQ"å„»á9Š¢«Ö2g¾H‡Ì 6ú?rfü¹·©(ë—¯€(‚mIm6Rq†o”¤tĪòfâhº1pf†ÍLKÆ”³$S:)PŽãü< téQ`DFQ”4 ‘‰DO]Š ÈIa™Bš±ŠÍT| K¶b™è‹wÌJüsQ´_”.¥hvl­Š"¥0_°mÆŒ¬”Ê%–‚¶4ã¸CcJ’#}…±L¸’%i¸}ÀâOÙtD™9 .'ž2ómæ¦ ʢݘ )H¨Ãe¤š2] å,zBÆ ö(°É^< ›caã0 ‹¦ðº}åH+ˆC’‰[Ui«Nc@.¦_E¤.ÚêjSAÄcÕPE"Ÿ8$8d–Q%š:\ì˜ò‘æ"¤\·$H3aŽÅˆtŒ ^á˜cV˜¤S8XqôjB¥FÉÏW•EJ”è0$‡¦‚ ¢î C‰ñ1¤ð‹¨ÜµOFî?ÔToD‘Ú‹Ç¢Wƒq˜¦æ4Õ¥ê³Á>:IfqÔñ"$§jV8ŽUÜyúLH³Ê±<øæX‚<=E ëà£É¿‡ÓÅ =Š¢‹«4òH‡²³"T´ ¦:2Œ¨Ñ")¦ê\ñŸ5šq7M”Ö8Œ÷ûξ\3,RˆŸo‡sjÊà+¦Oš1‹Ôea*1V»w/>ÓòôI2c†M’)Y†ŠÄ&‹çx]€vì>’¯}*ŽŒª<‡ gè‘b¢ìc!]Š”i«õY_¨p…¢5GÔ”m°‡…KAYÕrôÙ`ŸÙ˜úYæŒ'\"ÉT£ä}ÊsJ8­ã³@MÒŒÉÓWÄ»œ²ÿvÙb'\`*’˜j×.ÿA|¼èÈýŸ¼Ê½Kþ;þ¸jšbCl²ÜçCr|6ø&š&G+·x…-vI1fŸMžp‘×ù/ó!I&¸ƒcV¹ÂÃø>a™—¹­:Ç4¸Ì›¼ „±Æ ˬ³O’ 4¸@ŸENXfyÌ}®É%*¼Ê¸˜8X<æ"[ìb3SÞ¢ÊÑ•ò. ò¾HƤywI‡cžˆ‹ì±É&»`H–Öq|›™n³Ís…24ø—TŠÐ æ$„ƒÇ´¯Ð^*sdUxô­ o¾õŒ‚èSvÛàS³L…67¸«&I\ .ò4Þk=æ2EdźÂ1ÊlpÀ2' Ér‡›èx\ç.++«KOó‘|ù=}#æ&o±«ÌUY£ÂeÚéòŒm©ó¾Í3¶Ùe‹CV¹ÈS…ú1I¦È3ˆ§/Ç,³Ä)oò6)Æœ²Lš1Ÿæ;xè<æ2k‘À¡Á wÛá'*÷ú±Æ!y¥0–*f7žòBlwÆ2ÇThSg1î¾ešÙPílÅÇ&8>.kХĀœBEKHI.è«>Wê&¢Â:¾,‚ µŠQyñú®L[]×…±@Ÿ c:”âÎ2Ã8&6J8Mì|DÆ¡+¤pJ9>†dɈ±Š?•éh rªÀY AE| L…:•ãZ •Š„YÑ.9»`j‚“w`üé¡Ê®%¢G£Ê OB¸eÞ¸ü£f'¯vÒ–²j UØÓˆ4&.cRqL©¯ 2šzßµŠH¢áÇŽ—$3ÖUAíµ%ª·_ÔÑè>§¾Ã2ªÔ¥F3V°GÌ’¹ÏE¶F_1á¢Éèˆ,EºèŠWR£“H'¤âøÃ0øÌg>C&“aww—ðÚk¯±°°@†¼ýöÛÌf3Þzë-‰Ô}I5Ɖ`÷‘ù€õý9!Å»ÚëÊRæxÈU„ën±Ë!k Ès—ëlkÿ;9<æR\5æéó˜Kq¶î§ìp.el±Ë€<9†œ°#ûαÃ)K±8äÏH0ã/KÔÙd\%Á Ÿ žp)ëKú&¹B‰k0%É-^Áž„ë0æ”%Õ=o±‹®~¿ÈÛŠôÙg—×™Q Ç{¼&U›e—ÌÅ)¾S£ðÆ&öÌ媸‡ë›<7ÎÇ_ÂÇ\–DŠd)?i…)IL\*´yŸWe×Cš—¸Í@ËÆËr·ð:ï²Ï:lpÀz ¥ØSt·…¯Ôí6 ÌØÙá‚'hS8É,R Z’2›¼4ï²iíQò;T'mr¹!&e¿Ã§êw8É,ð<¿É$L²29ÆÉIÿq…3j49ó+¼æ½O×(âé:kþºð˜Š$ž0baÖ5ŠÊ@(rû,l—Ÿ‘Àaƒ}< p• öÙšíƒâ&¥ßûOã¼í­p—JxÆuÿÇú ïkŸ"@£L‡±ºh%ÚÔãO1q9·ðœ[îþÝ»?ýrŽKÖòôãÑw¤rj„>Và«$Óo*clWbDê€ë`àÆÐÛ¼BŸ<6Ëœ¨‘¼œžD*«<ˆ/ô hæ¯Æv¹”ÒB8X³OÌ8ló”,#zHVƞƎ–%Nd¬´Jo|Â¥X$ˆK V ÇC®Ä;iƒ-ÅSœÏÙÆÂ¡@Ÿ#Vð1H3f¤Ö¢>)e±Œ:t š“xA MäÄøA.飣#>üðCR©o¾ù&ŽãðÞ{ïo¾ù&¹\îžöz=lÛ¦Ûíò;¿ó;òû¿ÿû˜¦É—¾ô%ƒ_þò—ùêW¿ÊÎÎú§J~TIŒ•ÒY#`_eGñ¦¹ÄH»åˆÙV^>Y³Âa¸¦ºú´² Ìa" ü-åAõ•gxOuó‡Ê÷ñz£uLR‘Y`—-ZTã*9P6(å­É¸Ê K«p€„ @ˆFéšbÇO”ÚAF¨é*gYkÜçªÊZvÐC?Þ¡ïpŽÖ˜cÆ•¹,®Ê@ tÑñ¹RÝg¶QãÖÛK RYªó3†Z6GÌ”F *T¢Qÿ Ë|À«Ê.ÒÁfÆ@…ÉŒI£ ¹§“žÙ*OÙæ5lÕùD¾Ò <âŠdk+Õ¾ôqÛ³";†$•¨QS ÖSõžËBoʘ ;lqÄ*E5æi}LNh"`[—+‰‚ßC8!DαêŸPö»8A‚¼rEDŽ!= ªZ›´:³ÞÝðÉ…CæšI~Ú}Á]îÿ¿ßCÿÿ|Ç<Ïò,nܸÁ7Füõ_ÿ5ÓéÛ¶ÿY\è¶móùÏž££#2™ ®ëòôéS~ë·~‹z½ÎýѱµµÅåË—ùÙŸýY:_ûÚ×øå_þåø9YÃÄæØœ3034ÂEôDÀëœú,ô”óôS:Ê5ܦÌ)‹x¤™0yž'¶0LŸNXd®%8ÒV8£Œ…KhºHèËfƒž1ïꛜ¬VÙO¬Qg‰šÙ¥ž¯Ñ"7U2ÑR,êu"Ç {Ú†æÒ@‚R \ÚTâð©CÖèRÂÃà1É¥G4©â*¶ú(Ì0IŽX%-&]fDþwŒŠ] aH][bŸuºXVá.²xè4•íËfF‹ª,.5›—v9‹xïw±^—ö±(0i‚ŒîQˆ’¤6( ŒÙå]Šéª Y.¾}t%F]&«œ=r*ër¤t/‘þ G!^iÌÔå›R¨×4czèRä˜Jt”Gî©C= q!"Uô‚S–ðÑ”f(£~¯"ݸX’ÿÇ\GV»IŽ”å123”m¯ .ùH/å`1öÓdõ! æ4H©Å ÉB ÀÙc“ºjBp•»ñ}ÏŒˆN›7oR¯×ét:4›MÞxãø¢ÿÛ¿ýÛï}¡|øá‡|ýë_§\.3  T*Åt:e<“J¥BÁwuè­ÿ€Åâ=._šò¯ÖGÞ2KÓ?~/ÔéŠhºOÞbF¶ÆdšâÓâzà3Ìe9 J¬8'”'mN3‹hÃÿ¢5'« 1táƒÞöùBá«hó¹n1Hf©ŠÁD§c–cSñ:äzC^Ê< k éiÄ|[#“1sRh=Q Ñ=Ÿ@×ð×ÔùíkèÏ̓mcËqñ O3­[TºghfÈ,´˜%l‚éÉ„VP¥[.„'˜Ï &aŠüÃ1ÿêå¿ÁÔ<ò½>žnp°¶J¦?áî  ŸÒY×°x5yŒDš‘‘á§¼¯‘3zi—½Ÿás7îsqå9~hÐ׳ÜvËa–²™¤R8%Cøxމ/4F"Í–»ã%è¥rTÛTFmv/¯£y!µ£"€éÈÆØœcõe Œ—0ð3:{H(`&ðMƒ”+wˆg™ ·Èó9éÞ„Ü`ˆoh$¼)ÆÔL2 3ø9Á²[ÇÑtS|_£4ì1ɦðæ:Vßå\bí…笜ÖI¸ƒÙ®”±'3RÚ„±žf>°Hh3G-FéƒL–¾‘ç_:ÿ‰´7!ÐEÑ¥:è0)f†™“d»óœÌ|L#_£—ΑðæXsÓvi¦*h³€¬óà¡Ëþ©`ð¸ ?÷¢*÷ÿúË98rú¾ìH¯Í ñ?¿}û6_ÿú×)•J„aH†üùŸÿ9?ñ?ñÏjäM¾ò•¯Ðï÷ ‚˲Ð4 ˲ð<^¯G6+E“™L†f³ùÝ…Î_ýŸÌòyŠy— ox䬉pFÕlqY{ÄåÁVÃJ“>w²W™c±Å.׸Ê}®;©›56ÆGLg)F5›¢Óç’ÿ„=kG$ÐÜ€šÙ¤:ìRjvÙ¨ì#D@Ñï±ôô mñ!‰•5­ÝãV FÈì…5ÿˆÇ\ââø9‡ö2¶=åµÞmúVŽ›Ö=f )6 B¹°0Ö5R‰o±ËÒ¨Á(#Ó/ð”²×¡ª7Éhc6fô­Íw8a™U yŠt©Ñä;*|¥¦‚|¡¬c#å`¨p¯LåäÁæ<ÏÙAÝUL>6 É(Ä*ÇñêW¢¥Û±P»¨ÆöÑenâ²Â ›ºÔBer{hø$™1Ušþ»ÏèŸN°ïyð ÿý 4Æ?xfôv{4î¶ „7Y‹ÿù»ï¾ËÛo¿Íææ&aâº.ò'Â/þâ/’J¥¾÷…þ3?ó3|ö³Ÿå×~í×ø¥_ú%vww Ãf³I¥Ra}}ýý}ŠÅ"©T ]ÿh4°ôkY^H°^¿ËÌõ(.v&Rìë+ÒZ¥—YvO1w]zÅÓT’»™«¬yGx¡IÇ”Uøtš wÚgºÀ~.¸»qËá#N´eYÅ®»,¸-ÓÂf|¨½ÄíwÉcšåÇú2udЦÂöä9š0ÚL“žM1‡.íÅãmªPtv²›ØÌX˜¶0B{âpT©1p󘺋¯IÏ©ÁåÚæºÅ~b =ðyåÔ£—Èӫ晥M„ŒìsÍbl¤È”GÜZ¾Ar>£ºtF&&CöK+¤µx_í23 MY"“4éZ9r^H×ȳ0*ÚüQö_óÖö>¾¦ÓÕ ÜìÝÃXð9(­Ò×r”ü.¦˜s¦—)ÓÆ l¦‡NÞâ¬Rd¯ºÎw¾Šž÷yš>ŸÐ ­b‰…v‹|nÀ~mÌŽVburLÏ*t¦ì¤7É„c.¶ŸÓÌVð,]¢3Ë2Ü$DãÂésÁœqÞæNæ „Ðt«èx  ìtIZå2£ˆ£™X¸LH¡>fèÓKäqR¦‚Û4ÈOÌ·LÒí!á^Hó\…v¢ÄÓÄ6Y†ÌB›Mz>÷+WhPãêì1Ó„Åa™jóŒÆJ…FªŠ+L6œC’³ûÙ5rá€=Ö(.õH&ϳ}ë+¨fáTîÿõW*µRäüм µ¾'_øÂxë­·øßø ¦Ó)ögF¡PàW~åWþÙ‰Újµ¿þë¿Î_þå_òèÑ#¦Ó)óùœN§C.—c{{›¿ù›¿`gg‡ëׯ×ÏÿÔx5›ôúvŠyh‘Ôe,ï”$xÒ³ëc5.ŽM3’ÔõEZF™”=%¡,f³dm.W8ûlP6ÚŒµ4ÕYmâ )–ÂZÎÇÔ\¡ƒ5›£6;j³H]‚£4OÓɉ„! »F  æÂÄCc¦”OZí&*s;­z*7=Úýÿ_öÞ,ƶì.óü­=œyâĉy¸ó”y3ïÍOØi—‘«š46T÷C º[ˆÆ‚7„Ÿx1RKHÍCw«…P=€‹¢«ÛˆÐvI“™ÎtæÍ¼7ï<Å<gž§=ôÃZg¥ FøZP)·”²Eœ{âì½þÃ÷ý>g"‚Ô’´: Í &ŽöÔO1žÔì,­ Kß»Ð@­1bjbÀ6+d@ $štn±#2<¼ž u9@H…LOíl&޲DU†û€0õ^N»ÿAíDú0QšO W›æ2 ›™ã!A&JÀ6-(¦ƒéˆÙÄ!MS»m‚Œ8Vè]•ÄS8q9%¨“!C ñ=#ì2)O2çcÊRиnC§"A龑¸ìKÜRA,2T[®l-Ft°h’%C‡ƒÍúÕ1,&‰' gùÁ¶µØjŽØjß~÷ïá _àÅ_ä7~ã7Füöoÿ6§Nâ _øÂß/Šû£?ú#Þ{ï=†Ã!Ÿþô§ùÜç>ÇW¾ò~í×~b±È‰'øå_þe~ë·~‹@ À—¾ô%lÛþ>HĽð%n¬^"Ȉ§¹AnRãë AÆt‰±ûüÙéE—83³È¯[¯ð˜ØLx™7¹¾Àõ“t‰ññð›4Dš?¿€‰Ë3¼ÏŠ¿ÍØ?/↎}-ûEÂêC’¦A]Ù îqŽw#W±p¸È-º¡(ÝP\¦”ñˆ þ:ñIÆˆÓæï»üIø tˆ³Ùçãþ·yÃ~O‡8ŸåÜá<ÿ!rYU}û„_Ÿÿ×ôˆ§Ã›ü§äË4ü4'Å#>á}›^8Â;<Ç^`I À›\á1¯Ë=žÅ´\f‡e¬‰Ã7g?¥Sƒât¸x– y^мÍsçÞ%è…ùßnü,©+!.r›©ÓÔÉÐ'Â,%¬=nr‰0CžãƘ¯-ÿ#$uïbø&õÕ»¡yÞ2žçOæþ Ÿ_àyœ]£—Ð"ź·ƒÅG~†!ž±Þ'A›¿Ÿæ¹Ï`Ìgø&ð4¾ª€ÏpwŠWØe A’!1àÏŸg@ˆóÜeÞ>à06Ç}ÿ +b›Ÿü'î盾‘z•mV0qù4Iƒ48E 2á7ÙÉ/SÏeØ ¹Á:Bøx†Áâð€-V)Sà 4Ïyîr=õ©8˜<Ë{t‰s-x…HPúg(sg„G¤i’7ŸìæôÿàÈ=¢þ÷k_ûׯ_g0ð™Ï|†×^{?øƒ?àÕW_å«_ý*¿ò+¿B*•úq˜ñ»¿û»8ŽÃp8ä7ó7Éårüú¯ÿ:¾ïóå/™¥¥%ffføò—¿L à—~é—¾ïglÇ[9‘6ްØ7tPMdHÅÛÔE’N´Æ.‹0O–šÎþÞ dˆX}‚‘ ‘À>VH²ÿ‡96¤Æd’³±Û=~µ,—nî}¶âK| .qÁz@'ÕÉ‹ Ò ì†œ]£i$)–{ø¦ kÊ`¬“xì³@Œ.‡ÌI+˜íQ#§?„¬÷8#»M³ÎØpÀœÊq0Ô†<À†µŽç}˜#qLž0Csˆ«VRDZQ(Ò¢FVÚÀ\„/¨Üð™<µŠ-&*<«¹r'n`âÒQ"0iî3e ï³ ñ©.&UE¶“6Ù ö•Om£]b4ÔsIn©ãß÷Œžþ{§6E¹F°5ºuÊI÷‘a-rÂÐÁÀã€9•—‘ÄQ9 %f1qÐ$»)z×Ç F–}­ÁèÅG£C(;,+Á O=#ÊQÃSNŠ!úê9/‰t•}ÂÝúŸÓë÷~ï÷xøð!Ýn—Ïþó|ýë_çÏþìÏè÷ûìîîò«¿ú«?ø@ÿâ¿È¿øÅïûÚïüÎïü=ûïÿþïÿàœ¢„Á¨Š¯Cœ€=VU§Ü£4Dš)|%f™ãPG%N«®®JJ;`žg|¥8}Ó…¯F?Uåkî©qXíS\%¸;­Cõg’Œð=–h‘dž,)Ò$MŠ& Æ>u•ø`ÄH0‘‚6™ÿ] BNP æ9ÐB—:µ Ò1i³3Šœ5ÒW±®Ó×uŸ3¬Ûì²ÊÁ®)Qî’&Z°ÕH8Åâl°0©_ã]´…”‰Œ‘ÉKÓL_Až j :žcfäÿo·ØËZœÓUÈÌéû_%KÒh²Ç]âx-z3q‰!±©%ŠZ°a@,›¬jì4ZujÚgA½Æ4—(Z¯ˆ'L¶XÅÁÒ#± jdiÑÅR“”Ô(bÓ[u&5öjvFAFTÉ‘§J’6s°É:´H²ÁIÚÄè*• ¨È±+–¾gØõéÜX«ÛÏÿüÏÿNüóŸÿü¿HËY±Xä«_ýê÷}mvv–Ï~ö³ß÷µ¯|å+ïϘŠLçG‡ B²{û]Bò¹F“ g@Ôê“¥FŒ®Ì ô«ÄdÝ:þÄ jg˜u1=€5&-xŽEÍÎp&Äìy¿‚/¯?c⓱Ò“=MJTJuœžk‘õê´E\&´Œí`L®à\Ï’^ö€?FOÇw¦iñê:É/O…ˆß'/Ž@ÊmÑp”£ªm°#‚dý:®0‰ÒeDÚÉ}tP{ä¥ZZ>³Ôö4¯…a.ÅE‡–“ |Ógù’‹%¤pLZ_ ÄoB&“ùØ8Ú»>TÊñ‰:(#ô(*„AKÉSñ§ÍWyõã´µðX†œŒõa?%ÁÉ÷˜Š Ž™T¡:ñi¶º:NmzÒ:6f‚¥¡=¦N¢C5F)ió˜"‡XÌh˜ÌÔâ&áä÷Eéê®ÿ€¢*»±«P¿ÓiÃÔøéCÿÞëñÿÎ×¾ô¥/ýÓûÐctˆQÒÀýA*äé)õá!E<ëlP#K¬±Æ&y*ò¦Ï2»Á=š‚T< .pW=„™g–#" ”;N”¾ö"K2“„Äô‰°Â¶&$u˜çt”à@Y禑|÷8§iF_¦Îs›¾RNg¨s’‡´IÒ@Æ$®°EˆQ$_¹o‡q±H)ÈŠ…CX¥¿M«߯&+lk(Í´è©“!Û­ÑH¥¨ÎÌPö"|÷Ý%Î_­óŒØâ† ±Î<û¬±‰«<¤ ÙãÙgžcf8ã?d–’¶·Y8Üἆ_8X ˆ¨]ÝâDéé×3 q‘˜È¡ú{ßâ" ì“¡A¨®Ê-ÒJm/ð¹ÀmÝÑôaU1ø ïÓ"©“Ö‚Œ(rDDýý´eD+g4­n•-­N%€öÓʇ¼Ùç9ÄÇà1'Õþð]u³ÎkqË÷îõž,cÿßã~d:ÿAšÿ)‚¨EdNý«DE—Vh‘ˆÀ6K¤B öXd‡GÌ1!Âôé`c<9¦5‹8¦­’¾ê l™O~,RˆU¨ˆ<÷8ËŽ±L!Wâ=óY™¢íQÍdðAÙ9³rÒcÍcÙòÀºÏ1:2$¹–§Eéc )–›LŽ(Bä nr‘9ÊHŠY'JŸl¨k¼ËUà9P®‹ ÷:ŠÄc‹U² ã:VIpûÞc#ð=B9[“kdu@͛Ī ¾mqïý0ágl‰Uenã)±™ÍDç{ÄèÐ$­"Pe€Ì› u=-1ð©“%À˜Ltúã&ë…˜=dÏŸ%)Z¤”ϽJž)IôàC[$˜ÔȲËq:Ê¡"£p¤À0ÉÐ'ªïYK"’4`ë+Ì@®_¨±Á ½Np°Èª˜f)ž‹iAàÈ ’2šä©dÄ!óŒ±I!?w.ÚÄÙxBú?Îòc–AÁ¦I6O¢tÆP‡â¼dˆ‡©­RSØ‹¡|߆ðt´ì6넨`yiñÉSÁÂÑÕ[•CÅD–»‘: ZÔÈ£‹ÈhFO /†©“&®„ OU¾õï!OE”=âÃ ÙÆÑiCBà( >¤ÇMüˆœÈ½ŽŒDMÐR`‡-‘Àô]\!U¤}Âä¨è±UŸVÈáÔä ;MnqD×JðøÍ0¹WLNŠG2Ç1´ˆÒ'¤ R$UZQ‘#Ó /"¤idHq…‚åH[Dê 4MÀšÞŽÚZŠ`U¤„ô”Ç[à«›¥¦IzS<í”"5¥Æ…F#LÓ[ª;M\eš(H…´æ˜¸Qd†2)šÚb6Mªj’¢"òy;yÎp¬ov)®‘Q¾q5¾k’"NG3ÆOè)ýáÀ2è?èºì^ÇñÓGe¼XÆ„Œß`FT8¤ÈéæBs}^‡”!?Ó†’!E“§ýì‰æ½C™ým4e1éEÙ5–¤Û°$v‰û²:ÑLc¬_çDw›Q"ÈŒ(“kW±3#Úv\?7æ9 BŸY£LTt‰¸} ~™ŽˆsZ<$ Ô^Ö·èŠ(m!#˜=}¢ä©°0<à(*mX§y@Œ.-,³K¾WÁ¶Æ cA=jÏS!JUo‹±ÔØ×Å·˜ãæi!yÐäy¾‹‡Á»<Ë{\ö®Ó ­8å]^à-ª*ääˆ"çÛ\å1¿Ë€5~zÅ}“xGu¾9§Æ¿ü!‡þwýó¤hò3ï“VÉ]aÀÏtÿ_æ8Ô{·çœkÌRâ=že“5Îq—sÜe‹Yåù‚ç½w4U(BŸç× Ƭ°Í8Í!s\å3£.‹ìóÒƒwùÔñßhh‹Ãnë EÐròÑ&Á昳Rä¿-~ƒÌYÁ|û¼ë_áwùYþX¥3{¤ið1^ÇÅâ>gˆ»=ž]g®Qfv\f@˜÷y––ùÌ䝸”ó=¢L°Yf›y‹eò“¡Á§ý¿TÉL9B ¹È-i)TUògù)šŠé,s¤Oñ@¯BÖÙà,÷¸ÍšÈÀ‹—úosu|WxƒÇœäPùÜ?Æ·Y÷7(P¢L56ÈQå6éc…mþµÿŸ5¥îãÎßð±òëŠ$eÑ'Ì)1$ȼÌ-.ò*ßä%Þä‘ú=ç¸Ë«|“C"Êó:-žÄ¶6Q¡¿ï¿®¿G%?IÑq”'3t8/€ë›rºã'[„ïcL$ýzjZcCA¼F^ˆ‘ÂyŒý Žk3òBÒ+îO°Ý žg2ôˆ¤ü&a†$ýxæX2¬º‹9‘…CÔïQ÷3D¼>‘ñ€ÙÑ19Q¡ì MÆôœþÄ 43ðÂL|ϳT¶€Ô¿}yàçý sž ©yåÜõcXLˆ÷ú´üŽoéi–DË:ÄE›˜×%£Ôྡྷ·… #ÀXœ‚ª$i¡Ç*›<Ë{$i1CE*Ï›œX­Ð|³§ía†¶MIjaúê@Ó4 ‚þ‡ˆ× c•=_ã4xžïrŠÌRR„99êOÒd™µÚê“¢Á"»¬°ÍûDé’TÙ ê̳Ošy*S÷³„UêÝ€0qÚdUtë´HÐÇP¯ËChB_XEî¦iP Ä<䨪HÚYê,²Ç:ä‘Vå%vIÓd‘}’4±qHÑÒqIísÈQ•?Ó?ä¤xDúIT´ú@ÿÇ{fü“tèæ;,S%χl²†–n“]±6ÄÕN¨E’wígÙeI¦Üâ¢M´IP/f4@fºc©yºÄØa1øštˆ’Z4?|`>E,Ǩ“á¾ušˆb©O°9b–ûS3C(®0YŒíòÓš€÷¾õ4¬Ñ'JŒž¦àµIÊ*XÀ¾˜§B^ÕÞŠ<Ï%ë–Ötˆ‘¥Æ.KÔƒvX¡A›ÒrŽ^`™÷x“=šJìá!p6G©Õ”¥µübž¹lƒÌ“ǯ…Xýä:Aµ[®‘Õ…†L¤²¸i^$jv9kÜç¡u’mVtq´c/iö{‹$;¬HR ¯ ¦pU\ T?æ7ýKt½§Í UXÅ€0QvAN ‡âj7ÆQJÓV¸?Cɘ倢Bð©“å6iYR$DzÆÝ–)Ð"É@„è¨$ä 5¤ó˜”(Pf–5ÊÌaÀ6«<à´û9¦@ˆà³Å !µ²¹ÎÜvè…³ühW3œ$hÙÔc<ò4‘9÷ ‘¦fdÙ«Ì9&/GÖ4¯Û¡m&äèS°¬ m‘ d ÙK4IK…²%Ógäèd¢ÔÍ }Â<6Ö¹b½OÓNò˜uN'78Œ•*ÝÆUºƒR`Ø0ôô‚1†Øf[¡…˜#E“&)öY E‹¡±•\âPÌÑ'‚mKAZ„>M‘¢Êâ ª"«#Y§Ù5‘ÁöÚ†$?VÔsu:Éœ†ž€O2J$ï2="ê¾—¢· # ÉJ\ÊÆ,ÞèsîÉ‹Ÿf3tU¾ü´ ¨5§' µ;~ð‰¨dºãŸ Ñ‚*ƒ¡M’)Õ:ê½ êN»­ÄròÌRRä;WO8ûBN&»Ä˜AÉïñôk(ûEnëýûEâtÕjWªô«JWôPœÒ:§.1"ôd‘=ý5ÙpFt‘¡Ç> ZI?Pžú]1â€yvž°Gv¨pçŸ÷@¤À±âÇtÀBMdcS!Ocæ8TÙ´-¶XeMm™öŒ.‹ì)ч¯öêÍ÷0ÈSQ£QŸV˜ç€Eöi‘¤Nš’”ÉP×¹CäM5Ã1q¤èfENñPq‡}*"OL¥ÿHDé |ÊÄUÖqŠ—¹®¥AFœå-Eik)Ä©Z4‹õÉQÓ#ã #2Ôñì‡æ8Éc}H8X(Ë ‘þ7iÒ°ÒDè3Ç!w9Ç*[¼”}Ÿ{—V¸ÿFœäË ØbŒ¥„r-qL’&4Hcz.9jÚÂb3a“5f7¿ • DÞì`"ÇN²Ò<)Q5³Zt7ÝaOC¤*ÖP£HùÁ?Ë=p› #N]¤µŸô€yöY JN‘±Fœá¾´ÈQågõþšÄT%O; Ä€5Ú1!©ØØ-’âœäû,¨c@Åvöµøó@ÿ(œå_2G ÅÒhÏí3^• ³ChK< IDAT…<Åñ)¿Nd8„0 TªŸC‘#Âʾ¶îlÂÐ`?Vdu´CÞ®R5² DÃϬŒw Fj¥ScÎ=df¯ÆéücÆùѧ88‚€G¬âHVº!Îv0†œ™< év˜ âû‚‰PÐ¥šÊ­ꆤ@™Bï+))ˆ þ¦ïòÀ8Å0kÃ-š"ÍYîéÕb•œ¼¯üG°@œUòL°)3ƒGƒ Êž£ÜÒ48b–ÇœT´m’Œ Ð"I‡ ìËü‚|•q–¿~gŽÕ«¢¢O¶Âœøì³@Ÿ(9ª8в`Ì}ÎP÷Ó ó(!ªŒÕÉP¦€‰C[¬é½$-U°DˆÓ¥O˜9)PÖB×.1JôóG’ârôˆ¡O‚w8¥øöÓ(Ó–´Þi¢˜S]HYÖ„IÒâˆ"û,¨ÈX)¾ 3PIm.‡•ä.À]ÎSš‚qæ8ÔÖ¹a•Øød+µ.œeôÏ{ WɲL‹³Ü£D:Y"Ì [*ãºÄ,g¸§•çp‰3< @™còUr,³C™C‚RdŽC…Xó€Sœä1y*Üâw9–Ø!I‹yö)3ËH %–ÙÑJüë\æ9ÞaHˆ#м/ž¡@IïåwY"E“ÊtHP%‡‡àYÞWÕø<;,ó*ß$EƒV8`žŽ&PŠñ®ŽÞ#1Ã1óì3VÓˆéh¬EŠM!yô‹ìb*[ÅÔ÷9"ˆ0¡”!#jœåaó^ÄfÂÇy“ÙuÞ8q™ï¾»ÌÅ«UáÈ]üД®¿½ûsñð ¹CJ¢CÔ³¤ßÂrAâvKÝž¬Ž8FVHv}¶M|ÐÇ#+€gNäÍ:>‚€1²{é0& —°%…šÁáaB™M’„’§‚oÆaaùä‡5F¡#3@Þ¯H‹›·1½[6ð´†Çµ-ÕQJ}LPŒT|iž¾!>îjˆÌg—¯/?®±e¬ÒU Qz´H2K‰1=f(dDƒ.Yíúé3Ç†Šø+E¼ȵÔ^¼!q¥ó‚î$Bå&,=UÅ'¯ïgù;»Ó$EQ­'XÌ"ª:[\Òárß“Ÿn*ÍM_ÖR4H)®|VÝŸÒ7.ƒr\ÌïùY.®2ÁRÑÜ€#ßk §l~jÔU ÷&k ¡;`H˜qR4Ô”ÂÒ>ù!!úDT.zOkƒR4ñUÊÛt™¥¦Âƒz cžå&j<ñ>þqÅå¨Qã4ÿ…ÏÐ#ÊEn§ÍΫ½ëlð|^¥øtxžw¸Ãyš$éá$¨“áoøG9ß¼Oj±ÁëL°Y`Ÿ5¾Å'ɨp–5Þçˆ2KIÅõ…ÙeI¾y~€gÅ{ì±È[¼Hˆ!Ïò¸ÍM.QQ§<æM^"FU¶x–÷x‹«lãy‹[\ä ^ÁÅTa 6oò²Þ§†ð¯Ð#Âyîðœÿ.Æjd%¿œuBª30fŸÓx¼ì¿‰' ¾Ëó§ÃkÔÉ2›¨°èì2"ÈŸ>‹É)òˆz­Q˜íb¹^»všÂ3‚Ÿ0ß^v®ê$§KÜÄ5¤ð¥Lm–é*ý.K\7žbLU¶¨Ðe‹Uå)or‘ÛÜåœ;…x‘·yWˆ¨Ï%nòˆ“Üä—¸IœŽV¥dÌ_ñ“ì²Ä:¼zjôRá$ò5ƉÑãû:8Á!sjRÖæˆ"û‘‚Æ\Ò@”‘:d^‹~ ×7é írÛ¬èóQnò”ŠPõe¿"¶5í¬¦”çSQ˜ä·Çh’â ÷õïY]©Sß4xïÆþS3 „rEXaG¾× YÃÅT‰c=Å{®Ÿ23„RQ‘ÉÓÂë1'5Žu%ªJH7RÝ|‹„„‰)í˜}¤irD‘0Ž˜ã@-Á¤¸-ü}é#5 3бËuÒ8˜T˜Ñ.§iNFT=[KT°wŸYpš:ü[jªS¢¸iH͘€~ÖÚL(+æü&OFxtÿRÜßîÑÿYô»œ#BN)ž¥ç»Ì¬Îìn+;Ù‡ú÷@í§wYäÈŸ£%R! U²´#I¶Y¡CB½HK\H[•d†pGâBÉÑ$Í:*G;ƒ‰GÉ+#ÒFƒ4uJyŸË:Q¬O”G¤••Ê×ħ2½n’Rû»Œ£J?ey1ðxÌ m‡¨û*b† ±ÎZt‹ #„Õ>HF«“g›UFy 61$¢§Ä|y*S Ä,çxÀÐ S‰ä´òÜÅ$Cƒ±JN‹Ñ%6?ÀñRÜx=Jäãϰ,vIÑäPe‡?æ—ù€2ä%F‡qîsFOîp)¾ë—¤?òʯ&NGíèW©‘£¦¬>RUÆCpÌŒ›{Ju^¤M‚y‰Ò£¡"m7¢kš&5µ%N-?»Š0%ZÅèV7`‹$u‘áÀ›C¦ýY¶£€ivX’ Tlb3¡Ä¬´§Òö“T±!†4HaÀ&ëYàÒG#÷ÿ*׋dsο‹>efõ³Cà3!|U$gh°Í*MRZñœ¢I”¾´Ê ýxŠ›¼Ãs)ú„üüM°Úò³K<Ȉ”hÐ'BÌíR9Ý „U^wŒ®søô„û×È*r™\#ÅTðÊôï¤% ÓP!5ŠÒcD[ÈÁ®­¸ôòߎæ­Ï¨nZBil5ÁÛ£LACÉÔ.CxzW¥§‹GíÓcä9¦G„-µVú ¬…hnØ~½È™WêL [¢e.ø@ƒg¦‡Y•§xHB©äåÁâR#£]2®J•´™hŽÅt÷/•ùaR;QäHMЊÿ*9R4TV8C£YÛĉ0` Ö –rjAðKØJ$7elL½þršØÇWªø€ âšú×ÕzcÊ­HPïß§NžYztŸ°CÿavèÿÌz‹$9ú¬²¥÷់ÜÂÄá§èç,÷2âžbŒ­,iU„ðUlf™usÀQB¦,ªTÊ)ÙmLw%MÀ1)ýÉì'Q" hÑß7ýÞÁT’Û1±w‰á!ôïi¨ûpÊ4i'A[‘âæµÅ¯JŽ JŸÒB;GåµÇÆÃ$ÀXÿ<ùL— ´I­Û KLém|ÒÉko¿PBß) wýýÏi[û'yúÌp̬òOcúvYâ7éªÝK•`nt„oÁl¨ÄD‘e÷¿Ì˜)š¬ŠMú„Æà"·ð„ ®îÑe¶9¢HЦäÅ“P"ä!†µÈMRÒÅ£bG§¯øo"„Ëm.bàÉ¢É÷x$NòÏâbð*ßäÛ|œ0|/ð6÷9Ã;€ŒиW‹})S EƒæØg[Á¼¦8lK­ËÒŠÇ#Ä€ c µfi«µAL)ß™ã4èÓϽ){úz§,ü©=ÍÁ¢È‘&_ÓWŸ©`øI»í¿yþcÙ¡O-Óy+“úvH³ØÇÁ$¡¼ÒKþ.ß/±Ã’&„Mw½c„>Jl³B‚–ŠÖé%­p³”â4Ž¡~Æ›¬_c[¬èýN”³IÌ ÿ,ú{¼#®R'à [äü MR*˜`À%ïe£ ;æY÷˜¼UÑ‚e¶©’WÝÃ÷ɉYä6³^‰„Û!¦¬y-’ÄéPdŸ˜×cbÈ!>n°†X¦«×ëlp+ô 3ò52´I’ Í:ÜáœR›wõ{²Ç’T3æüì6×ý§Ù½æóÒÓ–'»¦OŒ!R«øÄ 5Vý->à"§Žoù8ÂÒ£²Þc6Í5¥ì’¥J˜>ú,³Ã¾¿À¡(’ÀPC­žæÈÞ1{,* ›OÑ;Â÷e¥|‹‹ÔȲÀ>kl*Öþ&95”Ýc‘0Uéw©(enÈ2?r•'Wm!†$hSäPßÇ2Q.¡W‘³jÒ1=×dq!ûlÑú¤;ôúNÓRp› Û¬PŽ(3ƒ§Bš$ 2V–¬<×ÄöYÀàK”÷yFw\̱›^â=ž¡BŽŽJï™µŽ¨0ÄB1yÉãø6}á.çð‹6YÓ{—ûœá˜Í hä˜s—Gœ”¾V£ÃRlŸØa™mV°˜UØà[\ä:Ïà!(QÀð}"¢UÍoó"k¢ÊÂÜ?R¹ÿ(×SÞŒÈ1ïhrXÖ¯±Ç"[þ*‹ƒ=‚ HÒ¢JŽk<ËyîÒ"IÖ¯QðË”D Þ]ü¡Éq,Ë’³‡i{Œ}AšókX¾CÂít ¦FdØá¬Ÿ®Q*î°™#ÚíQèõ‰Óá4dÈŠbe²KÓJ2 „i¸,úŒ² £ò :"ŽÍDAq Z§3ç2×+qºsêµûVØfq¸ÏÄ Lé¨u_—(ÇXó·ØòaÑØ“b<¢X¸d)á(+×Hù¦¥5ØÓ¨Õ#æ”xÐ$•N%A› c´•H7J@¡n'ôISgÏ_âĉ2Íý¯…Y»Ò#(ÆìªÕ6+zŸ¤© _§ÏM9òyŽ•À%•‡å!sÌR"‰‰‡C’–‚Ô„h`–2iêÌsÈ-.âb°¨ènÓ©@‚6ËìR ÌÎb@ŒžÒÈ‘úÜç4¶(Jm–‹)©€j`â’¡ÎM.©pº‚Ë65cú;$t¦C„¹'<€%fü±>л~Œ‹î-~Îÿc-.)Q$"ø¾¾h?Æ/Œ¾F%˜e[¬rƒ§ù¯`Ì.K”)ð ÷5>5z·Â϶¤¢ð*×xÄIrŠ.s>B 9`žçÿ{2~-±Ê+¤i°æm‘5òTiˆeµC¿Ìu*äuZØøSÆyÀiîs–çù®Ä z]þÚø ìc©Cò1'ÈQåS| ‡¡/S}þ‡Á"„Ç[¡¸.žæs|ƒ2ö™çž–İÃ|ò€sÜÓÊü·x‘u.p‹>Qnˆ§iâ§ÅŸ`)ü3`Ç€ÁÉþCláP+¦ùIÿ¯(‹êdyÑy‹¤hñó%åݬ³ÂŽ: qºü/ƒÿz.Íÿmýß|ý"à³äïôG, ñâøm–;{¼‘•ÅY„?ÅŸ¦Ï#NDò2~kâ =/ú„MæG*÷õºgžÅ Šp9f†a6Í5Ž(ÒIr‘:9AÁ(+ÝÉ)•Éà ƒŠÈË(TÛų Ä$¤Š€€ÚãGÔa­TŸzܧaS%ÅÂè¡î§ Ù¬Í3QÅÔ âš0¥_º ˆ¡®D}¥‡Q¢ù#ŒÜÌUîŸ>~…¤A؉÷0+>Wš7égC»cÚ31ÚFœŒÛ$ä ‰0âB÷^&¦ÉEï6žKÖ¨Ÿt9ºK²Ôc1»O/bÅÚ&ìÉwk4qÞËp°úñ@ ˘fÀ3îuâN—â^…j:M#`Í…ø ÇQ°@À±àïñ=6I–Ù!5h3 ËPƒ”×âßÖþ#ƒxkâщ… ô'x– bˆŒ„Û#†¡ ‰VÛpø‰Ð[\2î`…&´Âq<ÇÄn8”÷f¹bß l hÄfÍ#Ò6í¸¼Eæ%zá0fÀe`„¸àß&ì h›q\, *«Ç»ôºúKÖmF†EzÔ"6êó±øëøžå¸`úœ÷ïa Ñ…‚(Sp«üOÖr\ŒóÁÛYžzî ·Ep¶OS$¹z|n*Âl»Â‚uÄddQNä©E¤Ru¥¿ËåÞ-̰ƒž°înr±qv,ÆÄ²p…‰…KÂk4†Ì˜Þob°† ­þØÀv2½&"÷AFÄF}D Vâ{œv2¶-.øw™ç°Òµ¢`ú$Fƈ¨ÙãªM+‰]ßÂò"NŸåë‡dN´˜¤ïÓ EŒ–zû½O>à„±D&¬‰ËZp›\·F3š$[jr:óˆVwøÙ'¹„~ýÑ®q’xx¾#,½¯– €.Ý€<(B ´ÎET³™(e´œøjzDQÛÄ|Åö®‘!ÌáB–º†£TÌsä‘7+ìÙ ½’ÌJ0< <¥†–¯[îde&ƒš,<ǶÆZí-+M©’F˜›!a"ô\%J!q·‹ïÓ´¤pv †öÒ#ÇÜúä*FXLÈQÓ£xAЦòÆQ§Ã{ÔÈj€Ëèâ!0”Ó¦¯¯™¹8;VŽÊ›cN¿¼ÍR Ì2;:¢tê GÙÈf8VyêR‡ EžªÖÒ„ék†@”.DéIõ? zê51K‰]Aíò§ö¼i®ú4ZK =žÏQU–f›¢ ’”QY<ØbŒ¯P¼§xÈ1y]ŒM‹»ø‘\ÒÁb¢Å’±â<ÑçþŽOý18Ðß,<ÇùŒŒ¹ 3 3S'•’éd"äÓ Æi)Ží›bhZŠ*‚ŒhIqb’¥Æ#Nraí>¤Z9 IDATÏÓ%Æ13„Ís‰Cê"CÔì1 Œ•¼IU¹§Ì& æ>ƒ•·­ó´H00¬Ç7Ùgžq‚bÌzhCs{ëd¤",ÅQz˜–ƒ›—ñ›Áà˜€Ê8Â_!7i‹8VÚ!ë×i’dC¬ë<ø 9"2ÛçãÑ×y?ö4†ðú#Æ~€Gœd)¾Ã.KŒq)u“’D;‡¶HP0K´Ibá0^ÝdìE<ž¤N†”h`‘PŸmc…(}šÁ$# •ÅÏ 9:Ýè˜N&iò<|žË?æ’‹ ;ÆŽ•¨Z ’!šVR² ©–µ|‡J(O9R À˜„ßáŽ8G2ßR¶‘j„i{`,³ÎÀ“U‰„ ̱„ÂCŽEž#ŒÚ…·­ó|ÂbøŽoshuJÒ‘?ËZ`›°è3ã³ç-Ð7å¾.Òä©21-ž~î&·ˆù=Ä3¡cÆ–MÐñmûc2‘ÏÓ D°l—šÈ0Ÿ: DkÑaHlìurÃFîÿ5® þm:ÌtÆÄÌ}#̬_BŸIæú‡„é‘w+˜ šàæcö!ih ·MØ2†I{MƾaxtDœ€?&#êä=9­‹+îBƯ³Üßà  Œô!Ým2Jñ0ˆ«Ñ´í;ä‚ÇÄE›3<ÀõMÂÞ€¿BÌèöL„Í‘˜ÅÄåÿgïMc-½Ê{Ïßz‡=Ï{Ÿy¬:§æ*»\®rÛ$˜ 7ƒr/-„:¹­DùtBÒR€ŒŠ Ê" J‰‚rCú¦¡Ó9  &x.\U.»æªsêÌãžçéúÃZï2è" Ò ÝŽï‘J ÛçÔ>çìw=ëyžÿÿÿóä)1 ̈_$ãÖgO}Í&aúÜcLîf›»ÄÝÉhCå7˜ä¨H šÑd“iºD¨#…‚]¢Ô”Ÿ;CUGl'¾wZWYø52Š„æk;`ž)RPˆ—0ûŒ²Ë8Y**FzÉ}…{)Q 7š`d¸Ê7_™¡úhV£ªÓÊÓÔ‚KK‘*äx’çhÖHÖÀæ'C¦tˆ“¡¦?ON’Ê®&iÑRþ}Õe1 ¤¦ Ú¬2¯ÝB€ÜIËÊlöŒ_c BßBŒthçÇU®€`›Ieknh[^Š- ^#ùìp‰ß§Àí=r7~8§`YJäaáZ&pŒšH3J‘†H1’ýGå$"Çàãl2Í4ûǹɴb÷Ö5’Óÿ–[þcl0­P¤2îtÍœeÙo‹> 3 N‡Ž£Œ²¯wA’Ù]Óêï&uÞ÷®SEßÁÁ¦$òaWŒi‹×£Hˆ’R¥âšá0D_H†qQŒÐ5"*˜À¦¯üç¶bø Å…}õÆ5.µHš’]àž8@QŒ €®ˆ²iLQš"¡Ô¨y¶™¤|ãî2Î3ò{xœ7¯‘:lðõ—r›#”Í-‘ÄñmêVŠm1IWD(‚#,b¢£Ñ¸u‘R”É3j$×´¥ÀÀöZŠŠ•n‰)nHAlgH’&;b‚}1Êž1J‡¨FávDœ°è鑦T4K*\ƒ4ŽòÛbˆ-†t0-ÕÑ•Œ<¦|oX8X‘Á4"MK%ѵˆ«AÓ¿_ÛšÌøn‚‘ûòò2ù—Éç?ÿyºÝ®þ/^äßøÆ[® 'ibâ5»„…Ì:HŠ&YªÚ6dàa#I¨¢P D\´”èÊÃ0<0¤kBlc.1ÑQ¹ Ž2ѶÈôëx¾¡sÓS^‹Œ[—ÑaŒ[W"G[;´#¢‹- `ÒÝf˘DO,á0.vȉ u.Ù u—="^WwÓËÅ”Én‹ŒÓP]žÌEׂ®ˆ|Û;)x¶úêLËRaœ2T•J\NŒ‚0—=­YÉP#FGŸ.>VB¯btñÄé(u¼$ |¢t8:µ7šd÷5ƒ Ùd`+ªZ]uŠC½O¯ºYÝGÕ÷ÖU_/N‹!"Ф&ÿùûÎS&Ä€61"*ÈÀÕÔ3O›a…eí©5f˜-uf§¨kÏ|K­9\,„ñÄèê3?®`aA ˜P¸Y©½’?'ɧ]4û*7 F—°"5ÞßÈÝúžgFðqëÖ-þüÏÿœ/}éKôûo滿ð \¸pá‡×¡÷oð:?Kƒ;Œó0—Ixm.Z7ä(Åð=®‹ô ‘¤EÌïÒIÖ˜Wªñ5v˜`ŸQŠ07]òʼÁä)³À29¯Ê7̧t AŒË,hdgZå‡é«¸Ã¤©§M‰<â’EîµÈùn™Gh“à0·yxx™KöÃl3É({<æ½ÄMã˜Q9áÜÀµL®ð 1Ñe‘%¢ê¶Zi’~ƒE–¹%ŽÒ&Á›3Þeâ‘ëÌr“ì2ÎŒØàIž#êvqM“æ;tB®X§Ùc\‰^"ì2A—ãû%Þ–™¯óWB)xA_nq”s‡Ó\¡JŽ=&ÙAàs‰‡øäü ÑH‡Ätw™/óåá“|ò»Þú5#MÕÈR!Ç ÷)¼a>À›ÓâuŽy7Ù3ƸÄÃd©rҿƆ˜¡Eœ 9ºDØf’M¦°pAe>?ÏÛi‘ä —•¶bŒ%ŒùYóË\3N2Ë:w9Ä=q6ïæ‹:˜Çf¨À;9ÖÄœžâ*6CöcÖ[gau…Í#SÊæÅfÈsÆ“Üã ME‘’û7Õ(ó¶]–YÔÌæ´yû0ïû°­ÛÛÛœ?žµµ5þàþ€üãT«U>ö±166ÆSO=õ–*è‡+$©5I%, ö‰r~…|¿LÖ«0R­ÐÎË÷Ø)®R&Ǥ»‹m®SöóœjÜÄ« ’3M’ÃI¿MÛŠ¶ú$º„鑯װkc9 tZÄ.ö™«pmÑÂ5L6dz7iç°w —{ÎAŽwîP‹ÊШŸêý“ꇒ£’Ö¨”ÛdÉ\ F‡M¦9Ù¾‰_1É$kŒù{L‰M:+$ÌŽ09T_¦1È07¹ÁŠ5ϼ¿FMd˜ô·yhí­|’D²AŽ 79FœÓlÒ&ÎI®±Ì5ÒZ›“¢®])%v-“'IS¦á©Ô;—9ÖYbA«ÄGÙ'M][Þ‚"URa*YjÏŒÍÍMž|òI._¾ÌG?úQþðÿõõu>ñ‰OpúôiΟ?ÿÃ)èqÑÒ‚ >««h8y{C•©Û#A“¬¨R·ôMrT()5¸OÈ¥K’¦Žü³> Rd©bâhz›Løò5  '*$,¡O‡}úD0ðñ y¢F‡„°!}BDè‘ Í„±Ã8»Z€6úÊ¢ ”‚ºM”.Y*R˜! ¢t0•¸c@˜˜èïW Çä8ºëG)ûlcÈ%%tñ°|´/oêaeyÉSf‰E¤i÷ãRÐßE$}Ýeì2¦G^1:ê lk;IІf”§E(††EÁ+s`¶ÌK~ŒµoºÔϧˆ ¹«4ðˆÓ¢a¦”ë@Þ”'Œ¦Ù¤E‚,UF…¤ç1Œq::<&LÃÜÑÂYú„Ôï¾­wd ·EÂhê‘X?§¬‰k5ðÊ[xCïÃô1…KÊi*•¼¼}g”B5ðŒZ õÎb¨G Jú2èßçë~‚ežxâ y£¶,þñÿÏóøÓ?ýS~ý׿û»¿{ËuèWb'éˆ1fc›ôÌ0%#OذÉu‘ û4Eœr´À&Sl0£~Gë;À¦-âÄ¢]LÃe]Ì0aìÒðS£A’jhHÏŒ0š,’pÚÔý ÛbŠ#ÆmÊ‹i6R“€[ÐÇ©+_yÊoÒ1¢4ÌÛá zFˆŠ™Ç0=¦½M) 3Âô S#…‰GÅèjyŸ0·ì#L&v©“ÖžpÇ´ØÒG±‘šf B¬[Szü]%K_„¹=ºÈ^h”296ÔIJśIw§BÚì Êä8ÄEFTŠ¢EŽ qÚì1†‡Áª"S&h²ÌuÒìúãDE‡%)2B’†œz(‹—›Ôè«p˜è¡.‘{C^½2Ë#§=Òêâ ×6˜ÑX×Û¥G˜:JˆÑVÖ1£x»Aœæf…tˆ1É652ì3ªmq̰Æ,“ìhÀÒ6“R$HAŸç2LŸÊä4ñm“ibth’d[…Þ ‚`{ Õ&Aˆ>1%*,“×ÁEz¬1G„ˤï{ä.¾OÛÚÓO? @µZ寏®Ëg>ó~ù—™K—.ýð:ôM¦îñãÕ¯²”;ˆkÜ30ʾövÖHós­ bw)šy^³Nóo0Ê>{Œò"q~ªûO\‰žÂÇ`…yžä9=ZoŠgyCÙÖ~Æýº~ŒÖ1Ö˜#£v/£ìó€s• kš f8é]cÎYçZè8×9I„>Oñ ’l0ÿšO±È2ì0êY5æY@îÚ <®¦Ïðu­nøa~®ôjv†2²ÆOñ ÖTôéuq‚ã½;„ð(¯ð€xO2ðÁ éð”¥ØcœâªsY¬2Ïi®ð˜ó2kÆe#ÇËtˆÑ'Ì&Ó`EƒT$ISç§ù + Oˆ‚Wáôð*ép ›o&ÎéQúCþeà ê"¥“ûrT8Ê-.q†¼_áÇ{Ávt‚M¦¸Ë!*ÙÁÍD‚)‹:iÄ2ÌpιÈ#ƒKÜŒfŸbt8Æ &ØÑ˜É"³…dÙÏÝçÈÝý·mwkçÒUùß ÞÍ”Ëe>úÑò»¿û»|õ«_ennޱ±1<ÏÃó< ÃxËô®|áÙÍy¿J‹„´`ÈØÍð›{Ga!n¶ ‡tì(%3séûÚfŒ–§cÊxΰ%9à3GÓŠ+5w’ªÈÒÎF©Øò¢é† †K'©í›ú~„†‘¢bdñ…`ß!kU¨zYJ"+dézajB ÜZºHYX!‡‘P‘]$K"LOì1Î(ûT# KôH $“£ÍI½qújý ‰ƒ„²Ž²ÎÊìó*Y­¢–a)\â©õŸÌ&ßWXêsbM£ ÝÕKÔ³¤Æ)nrÄ/™p©ƒu®l,²Ñ'~ÖÒã뮥d©j–ú%"ôÙf’!!´tàLK5="˜¸*;ªé–’¹Èõlp±g—2˜3PkE~Ó¡MB%æI~b&óù»ÚUÍ€…£× ¨ìŒà¼¢@‘(=•’÷¦H.M]}ŽL»_•ûwêÐÝ• œ«·þ›úöö6ñÁ‡>ô!þþïÿžÓ§O“Ëåp]ß÷8=ã×Éãá†dÐɸo³#$ê.ÈömŸ5{–˜ùÙ!À‚X&K•}FˆÓ¡g…HÒ$­q€UÒÔµ¢5¥T†R*AŽo3émÓ%B“$»L0Ç:Yª„̾ʯ²mL¶ûd©ñ$ÏqãL³I’¦V4ޱGŠ)¿!½ã~ˆ1!Ùòë¶ISgˆ%Dg+9Ž+$»\ >¤2SæÍ Bu‡ø„ dÄ!÷8H‹ij´Hâ !³Ñý2¾€Ev˜$G›!‰h›P®åºL;ôˆ°Á ¶7䔂Uâ:'Xb‘E–g—$-ns„ª!é51 A#’¤g„ɸ ÆØgbb‡›Ö_ùæi~öá‹ÌùkDE—®B ¶‰1ç®S5¥À%a´È‰²ÚóËÀà@ÉR%â÷(ˆ’Î;îÖò–1ɬ±NŽªÜÝ9]\àiJ„gZBl²T5_ú0w©‹4¦å¨U‹œŒL²C‡(à³åOaÑS£u—"#¸†Á–@å tˆsˆ%>-âŒÒ!¢üÎaÿþPˆž/8ßAà26ƒø3òÿ/ÿŸ‹E>ðð|€ÅÅE®\¹Âo¼ÁË/¿ÌåË—¹ví<ðÀ[¦ Ÿî¼Ñ­¨ç㤿ȼ±Â–?ÉÑÆm&ØÇڴ̸¾ü—(0ío‘vš$­“ý]\a2Þ!ìX¬P2å³9ômú"̉Á-æËLæ·‰˜9¦½- ­ ~|™T¸NÄìQh”p“§Â„¿£»Ú¢(0åo3Ý–{ðB¸ˆP)"^Ÿ¦™Ðv6ϣ̳ÆT{‡ÉU\L ”Èûš")1ÍÝPŒ“\£I’ 9b´ÉQá ’V¸0}ÆØ#F‡}F±²Èm!/-#”¨%G‡‰‹ƒ­/© ZÊÒZS|ˆ!§¸ªôBcôˆ’¡¦üî10 P¬>ó¬Ò'L‚&!†ŸÙ`ߌñêÅ<©‡c$E“QŠL²Ã=•˜¥Æ.ã´H`3T u“8-¶™"K•q¥–FûQzô ¥ÃC¼Fy KÒ`HH£Tƒ¡ÂÖ6HÉ:D Wæû,W¯^å™gžaee…_ø…_øáôñÞ>E1Ãs™'âǽæ@sZ:ƒçL±MÁ+ñLøg´7ò?¹_äÌŸ¡«Šó#|“—yŒÿbÿg:ÄùµÊŸs€î²H˜>3l0=ÜâûgeŸ! ,ó5ëGôü®²Å¤$‰Š.cìqλÈñ/‹·áaðÓÎWxÒxžÿÛx7aúåçoòOÖáa²h.qÎ{•gU!-6;/ñ¢õ_ãL²Í1ÿ&–Èó7‘Ÿg„"SÞ6ó¬rÛ8€|ðü»xCÔhfA'Åè`ô}–ËÄèp¢~›R,Ãíÿ¤Tã¦Ùà§HÐ"k78Ò¹3°¸6z‚"#¼—Ù4§ùÞEŸ0‡¹CƯ±/FÉQfÔß§-â|!ün)ðñ{¼Çýq¿ÃRè EsDÇøC~.ùÿð,üÿû•wsâ\…Ç»¯p(r—7„,0¶pzð—CÑ1¤"õèð6¯Úçp09ÄñüóTE†$-æX%B[ÁÀ'K‹ÿËþŸøã&3•MˆøtÒ1þÉúqíï<í_Qp ‹[âG½Û¼`<ÎçìÿÌE&Øá ÿnŠc*(£ÉD{›«â8Ëþ"uR̲Áª!ŽŠ8Æ-Êä¹ÄÃt‰2É6Ól±Á4}Âò°ñïÏ‚â{ÎðûS¹ö³Ÿ¥ßïó·û·LOOók¿ök¼ç=ïakk‹¿þë¿~Ks€V$†eG0#>m;F[DpS1¯1úF”’(ŠHxQ:Ud„‚(‘·* ……c[tͦ!Wz¡È-1)SË„P&è¥C´ é3ßµÆpÂ6ÝH„†‘$ÐGi(8ŠKƨ±Ï([²¶Ò®V²òDÍ6m“ë'Q£,òÐ$‰‰’èÕ %ì%¢§I>B ±¬Âðé¨quwj‘ ëGéxqØ0U€Ð#Âl{‹V6I7ÕÄ"ù†íRW£ö QâB'äMÛ3#6(RÀó ê^†Po…H¼§ÆU6=áº8ÁÂ]?½W³äN!å7‰ 9]i{ jn–(Bôi‘`9• ä+JUNƸŠ.[L“¤É¤ŠÜ äÀš³ÇõH aûú}ÐW Ï—0œè¥Ç=Án#ðèe… B±‡ï ,Ó#å70„Kƒ4Û¾KFÈŽ»Bž´ßÀÒf6Î.ކ>‡MSÝô¿ÿ‚.ìï9–øßùïøï§¦¦ø½ßû½·Ü½Ë‘‚Ø.}Â#G‰ y*"G1SÖ¢.™&™Ðµ(]Ú¶´qåD®ÓV pK8Z[!—9 Óe.¹©ö½:~Œ^$D1$­Y »Gß{³èxÈ3«E‚¾b‡q <‰%„ðèú1•4˜ /"25Ncð©“!Mƒ-¥=…|.‰‚ÊïÑ·Ã8–¥øÝ2I÷4ûƨŽUèŒs¦ƒÌ /©ˆìmß"¡~–’´HÑTˆè]-+mbQºÄäÔTýL‚µF]YÚ‚ŸŸÍP+ÔMµêªÔµ±É'Ké5—øé Q££GþÒ±#!2ÁX:°¨XÖ„©‘Ñ£qKùºƒL‚}F‚;¥0ÔÜf¨¶:¿ËtOùû ¾ž$eÊhp°Ó×?»šråDéÒ#¬/WmEd“¤69¬·¦O›Y,z÷i[s‡Þàû+èüÇüÿ“'Npâĉï½Cÿâ¿È—¾ô%>÷¹Ïñâ‹/òùÏžP(Äûßÿ~ÆÆÆøô§?ÍÊÊ ãããüÖoý¦)¿™j4Mذ9ܿˬ±‰gÃRr‘1öèaia޶ï`„<®ÛǸnžPc’*EF¹ÅQ¦Ùä˜s“¢Pb„6ØcœZ¸O†!•£»ÃyJ$há`Ò&Á({Ê@bSðJTŒ{Æ(Y¿Ê¨·OÙÈS·Ò¸L³¥À a¶ìIÍ ÓgÝœQjù¸e¥©H^6Cö…D"žlßš‘$5RLª0ÿm&¥+ÁÀ%O…}MC„Bd©§4¬$³*Ú°È›Lkns<Õ¦,rtÒßj y™™g•Uœ ”èaSLÓ!ÆcîËäÄ(÷Œƒ¬3œà&C/Œi¸rîÒ0R”Ã9ÆÜ=It(Î=ÉëoŒpä‘3làb²nN³g¦AÖ¯QpÓ>Šƒ©îï=¤9 Vs÷iš ^â1|“J-De.r— 1C‡8kÉY¢¢«“üFü-gÛ˜ I’YÖ¤øÏcÎ[c¡³Â~l„=c”-1¥oÛ–phŒ$)ŠQv”t_Œ’w+Ìô·¨ÅÒt„Tú`…œ_aOŒ¡‡‹…Ë‹ Œìýt_à Íïµhÿ÷»ïvyï{ßËoÿöosîÜ9>üáÓëõ8{ö,ï}ï{¹{÷.ŸúÔ§ð}Ÿ_ýÕ_åøñãús×Å,1aâ[‚ºH*±M™œt£D’¬1‹¯ƒUZ$ð¾‚5I²iÊÎ-0é ™f“¶™ Aš¸Ž/mUX·#cÜFNÓæÜ-ºQ¹BrÕ^¿Bž"Ê~^Np„Å~xDÆ‹,]$¯½¯ŠŠœòX Ïg9fÃ4IP!Ç;ì ã¡Ãô¨ ÃU©š¤°ªçT³»;Äð”T-¸8LQ#«üç-Jb¥Ç(û ”2Ð<…6qm…•ñÓÒ›ÐÈZ$‰ÑÑ–´yÍ(7qRÙç’M/énòœìÎÆè3`ï5ŸÜ™0aÑ×°SU­D‚–öž ô&Iz„1/]Fz§(Q IR…½ô(ܲÀ£G”²®ÄÔõÐ…ÁßüÍßpñâEþê¯þŠ÷¼ç=ܽ{—}ìc|øÃæêÕ«œ>}Z‹âŬYaßÑ·I‡7-‘ ³µ_±J–45 Õé,ܼY–\ìIZšb“’*p}Â̱Æ@½!|£±|‡šH³Ê<ó¬â`bòÍØ%Š)B浇Ã({ôˆ°ÆkÀ!îh¶xWAeBŠWÐÄië †i¦Â›xžÉMŽp—CdTöt›E¿€é¸ŠûÝ K6Ò_?É6=² ±ššË;ŽìXzDÞ|¨ívbˆgúý×%B S çZ&ÏmŽhv³¤Œû …ŒÜ6'¨EÒ´¬˜â¯—h²Û6M—ƒ¡U¦Æj4 ‹—/ÌbœwA|e Äèb GqÝ#Øj,¥éDÂ"e8BGÑZ4IÉ(Q%A) ³l,°È«Ìñ0—™›ÔIs‰3ì0‰K‚¶Œ‘!Œ¼AÅõ.ã*óÚN IDATAvöùPU h$q‰0Ç*³Þ›L°ÂAv— t!Á.MŒ±¯ »Ç“÷·C÷ œÁ[Îâû>Ÿþô§™™™¡Ýnóå/™……~þçžßüÍßäGôGùÔ§>ÅoüÆo‰Dø£?ú#>ó™ÏèÏ—  ßD«ˆîq.Qr~ž¢ÔµQö°p©’SœìyQÖV±QöÙDò*äèF ’T"YS,Sã¢Mˆ«Ìó`÷:5+£›™N6†‹%í—”(2Š8À({T8%N›"£DèiÎù$[j\lP²óÊ÷Ü¥NA…,ClæÄ:–/co£ IX§"©BšZ9£CŠuÒr¢¨èiÅaÏQ¡G˜ ¦Ù`šIv˜aƒ"#rÍÀ¸Ž±ÞcLE¹¶p°Z9F\¥ð ±Ë8MUè!›dr”XfÃÜÖìgÖd…1._Œ2zN’ÉeA§kâ°Ç(Qz~²Êœ9WÈ©éc”5f™Pô¼ºê΃±¶ŠxtÂ`oë`êŽÛfHŒÛL(VœY-L”xW¹Â&)uÒ!ìöqM.ÖP™r tMbѼςî møng†ÿ(èÃáO~ò“¼ï}ïãCúFƒT*E$avv–½½=nݺʼn'°,‹'NpëÖ-]лk%–œ,•ìc”ó‡8Å5¦Ùä*§ÔØcHÅYmáÈPU!2“ôˆh6÷%ñ0{ŒsÔ_"F‡Wx% ̰Á;\âað!#¤¿ñ*'±…C,!…×;À }"<Ï2CœªdYf‘&IÄ[âEFèfžU^ám\â,ǸÁ4›,#§U²á6EF¸Í"ôHÒ DŸç­·+ñXŸ¯ñ£ì1Î$[,Še,[@{Œóg°•U-A‹«œ¢¡næzl3AˆB`…Ë<Ì>£ŒÚeNZW¹38Ä…Ðy \&Ùa‰åÛ‘‰{¤XeŽ:iŽr‡¯Š§é¥IŠ)±ÉJrN³Ñ׬9ŠŒp”[¬3CÍ–Ét§FÖ¨‹4Ÿ{ñäð³Ö3$)ñ°£rµOs…×»Íֵ߾Eœ3\¦ÄÏòN–XÄbÈI®s™3|ƒ§˜eG†¯5ºdLɾÍa|5Nx™·1͇¸ËžåËÖ L°:`öÕ—»S½l%'ée‹iŽq“º™æùø×9Aš:EFÙû–³Ü_}õU"‘ÇŽdÆ»Þõ.Âá0¹\ŽjµÊúú: !ØÛÛûöƒèÞ]ñ$ÑÜ.N®À<«:ª5Ä€p·Ož2s¬ò*+¦ÐI†RGêê.u!Q'£yßiêDúº¶ŒYgx¯Ãë.^ÈÀ6e×V#K“$Jz}˜qk˜Â¡mÊ•Vœ6SlÒTD®Šø@Ž ®òs÷ŸØ° !Ÿ¼"ÿå)§#í¹FÃèq€½ú±p3`Âßa‡ aé ™oíØÓÔÉQÁÄÓ89–N¡Oš6CªdeÚ# š„(aÛ@áEs¸XL±¥3²Tñ•_ÚGÐ …‹A›µq1UÓfhoûÁÙ]¶BY6_Š“,¦Æë2Œ%B— uÕ¤È4ÌÀ‚:Ξ ru8L•“Ýû(û”ÉãbQ ¬"Â,²¤.4}E¡LÆU8yô ies­’c…ôü‘Ó»ôìã© Á6“ÒkÊ®½IBáXÓ$hJK5}Ú»M"­2ö¶™ûxpÖ÷83~Iq/½ô<ÿüó¬­­qãÆ ƒ.ö–e‹ÅtÂU·Û%}SÝgö»x}‡–#G!žúE7HÒ E‹¦Úm3I™<åìófÜ¢Tȫĥ–´Ýœ‹A\Ý(+^N5sÔ¿%•,½ËÝs˜q•0äjÛK[ѵ¢Jt¨åâ(>nDÑäÍÏU»›šb­Ë·,äeÕ1„M.H¦ ÓghÛ i sÛ„1TŽ2@Ø—b—|Åc–;¤ˆJqêȬi dçŽ4A4Ï·®:`©Ö´4P^l%‘F‹¶~ Rš'ß¼IÝõ¦óC8”cç%éé5‘ÝÄ6Ò7Œ»ƒD)›!ª*ŠWªRM\í¡¨õE´J¡ó±!ÒiO5]„[ATÝõƒ‡¼ACƒ'â´¾¯YÔòu›IöÅ(¾ê.‘M“$-¥ä-“§éDéôMbƒÚ}¶©ã»ÿùwøá8ög†mÛ\ºt‰W^yEN¾:}fضM8f0ຮ^ÏéìŠ~³ßÆó¤)x(“ MFÔttFA–)êýgaàëKrБ¥hª¥›CˆIšÄ­–¶cÅiÒ¾dáî ˆ {ú}cªÉS”®iÐ3#ü’Ê÷I¨ˆã UUÐ…šæ µ;C„hRLÄM5M K‘Úp@Êm赚|?Ë×mª"«W žò¡'AýœEv0*,g^'˜$ϳ¥3Ê|6ú*n5È( ²ÒåÉÑbÄ8öcË›¢¢`)—<(î&¡q‹ÞlÍW¥¬mˆÍ[å½™êŒì닉«^»œâ¢wô]5üÖÌó)e‹ê36¸*÷‰ÐT‚Ä›ÀiäªÁTYõò @øŠ6—Ð;ýàƒŸ! ê˜§/ ]bÚ*g»˜ý‰Aåþ÷{œCãÿ{‡~òäI~åW~…N§C<gjjŠD"ÁK/½Ä… 8{ö,gΜá3Ÿù O?ý4Ï>û,ò'òæçîaÌ{¸té²Lž2¯Ç1ãmâ¤ep§Þé̲¦Ç&2žP"ô"ª„‡¼£ì‘¤A‡8Yª(1ÆGŒÛØ ÉSÖ¿Ü.Qu£_cÄ-±m¨Ï(3l*q‰Œ!`‡0=Ö•ÍÃÄe’mE?Ë:‹ÞCÃÖ#nœcRŒÝ`ü•B¦9í1FІÆN°Ãœ¿†ß2Ȧ%p OEÓœ ”8Ê-„ðxGïy°=ls Q‰aúL*a,ÖÆj{Lù;Œ&ö #íxÁk›aShÁÃ!%w}F(±Ë8aúã&cý"}3Ê”µ‰‹Ÿ{»ráûTŒ<“A2?2ú U?LóB‹ç»,°Œ«ôº1}¨M°#WjD.r=‘¡Æc:DÇÄae¦Ù çUp ieñ0Yà=ÂäÔÅ`ŽU5¾’S±•!Å#¶Õ4Fb×H›’Ñ\#C†ªÎ•r¦ó”9Â-Êô è Ç&jÔ&²$< öï§Cý–ú0 ƒ~ðƒ´Ûmnß¾M>Ÿçܹs|îsŸ#NS­Vãüùó|á _ söìÙoû…cyIAŒ0 \m ’\qŸ°¨}5ÒŽÐÃVE=ÈF„W-’Äif hY!,EÐr°q|»å‹TôÁ]îäiÄå^×2†Øþ@‡YߢXz6¦pñ]ƒˆ-]*rZ0+€}\UÊØjÏïMX‹P]oTq݇¦…ëÛxj­È'ûJ´—ô›8†E޲²§Õî·¥S‚à“@h;Îì°Í$Š˜¸:yRØL ;IÒ$«ì¤-̲Âô¨*‘YN1׃Ô5[ ™aƒ[aB Kƒ†¬G„Y6ˆNw鹸²Ïôé&cjE‘¤AŽ2s¬«€˜i¥./0B‘}-JnW±±]}m"¥˜ê;LhÕ¹‡`„"E= P§%òX4U3Òìó–)“W HMk‘zDp1õnßÄe„}òTØg„>!bJõ¦O~Æ"Fšåâ}Nà†â»Ÿ÷©¹ùŽ=ŸÏóØc1q‡¹¹9>þñó…/|ãÇóôÓOcš&ùÈGxöÙgùýßÿ}ÆÇÇõç/±ÀI¿ÅC|„ÏÓlÓŒ±§ÐsQ6™æ'ûÿB+åG¹ÈYNpE–Xfx;ïà_yÌ !|z¹Kâ —Ùa‚%©ã1^Â2 ÿ6Gxˆ×HÑàGYgF˜cì1ϪIGèrž R]Mš f8ÍkÌs•SœäšÎ$ÿãÇH*•è»ÜæqÚ¼“¯Ñ Å=bàòÿ_Áƒ‹æY–Xà1^¤BŽ2.‰‡™Lî¥Ê[Œ²Ï€_çGb3É6w# ôˆpˆ»¸XÜã uÒL°KŽ ‹Æ2+ö<µDЧù*ûŒr—EÎø¯1#6¸ÇAÖ™¡E‚“\c•yÿ¿¸Ÿ£mÄxN<É3ÙÜg¿ ÇpçÝ 8¦ÅUã³þ:'š·x1õ(÷Œƒôˆð¸xÜàæ`’ÿzáGø¹G.p‚\g¸Áq¥ hã`s™3å&ó"+à§ÍQnëCd„Çü›Ìˆ îr˜ìǘd‡ fùŸýÿJÒoQ4ò|…Ÿ`‚mæY£LžEo‰'ûÏs'zˆ›ã2gH(ô=ÐÉÇt,d0n<ï}“éö_M¾ƒ œgŠMÞÎó$iòOP!Çaîbà±Ç8¸Ïýû(èþ¿Ï‚þàƒÊN;'“É077‡‚W_}•|ä#$ Þ÷¾÷ñÌ3Ïàº.ïÿû¿ík4I’¢AÞ¯Ð1RÔµå(K 7$¯ÚeoŠªrƒ49¿Š#$)Ë÷®oÒ5bÄý.)Ñ È •±Éþ#¦§2}ÂT’iZfBÎÿ },Û!¦@'C,2Ôiûq†~ˆŽ°Ø·ÆxÊûW:"NZH-Ì£(k÷†d·çUâ ÐÅ¥­’lÈ<¦èZ1fHj:èP%ƒ«V ·§/4ÈÐsKå“K,hðý ÕE" ­ Ì’¢A›˜âFÈ(Óƒ*ü©'4jþ%[©xزÉ4kÌr€Uò¢¬»ù 5Êäuþ¸ƒ¥ÁLss5Šý1n\Ê‘{ØV¢5A‡¸Þ«ÓÈ`PÒ„A6U °#—t6_ó‚©…‡Á<+Š[1Á2IѤO„¶šÀN²­&ûŒÐ&Až2[Laªæ*€Ê š¡ &ÚSa2Ò×Òv· ´hÝ'>•á¶ ø®*wÛ¶ù‰Ÿø b±¿ø‹¿ømÿ~qq‘ÅÅÅÿæóL<öÅ/ð81Õáf©q2Ÿ™ìp9|š]Æq0™b›Û•9æYe@ˆ›âûŒ’Þ!I“×8M‰¦Ø"N›×yPe!yˆJ4I’§LKíafYWÝù&s¬£Ã 4T4ãE™'ÎrTIÐâGHª ä£Üd›)nr “¤JVzE<Š£Ä./ðuÒd¨R ŒcØTȲÎ,+Pc 4Xe“S\ÅÁä:'1•-G…m&è£`W™ë®s“C\á´»QdGL(öú´zXá'ibŽ5B xÅÄf™E†„¨“ÆTkZWPƒP¯ f¨©@9òo’W+„%>î3 BžÆq#P¼¯3‹ «lzÌ££cp-ƪJÆûþwèßãÌøï¡ ï2AŸ¤¾é¬3«r‚}\Åßg”"ôTÌ8¤g´AJ{B <ŠŒÐȧXež=ÆHÒTø rX • Cþ³€>¶Á qZdªÚ¥…Ùa‚)¶(+¾¯À§$ Z¬–¬EçÝð“2³Ë¸Ú]ì‰18€]ÿ7 ùêE x˜¤©1Úe‚]êHÐI ¢[g–yV)“ÇÃ`)}O”(b …f;LP'ͼ±A)‘Cx2#ÙÄ¥BŽ¶Âˆö• ¬KD‹ÊjG)á+1*V–+â´èIûE•,]bÓ&NDÈßÑ|™d%’ØÓaÂfœ›_3xàó”EA§T­2¯ ð@Ýã´ ÑÇÅbƒY¦ØÒÉMeòÜ3Re×1¨ø9Fž¶î#ѵ›L3ÄR;Žq—Ã)0Å65;ÄaØ Øc\)ŠåØ5@ÊYÞúì0I˜÷䨰iMsü~Gîý·ÞÈý2¶W%Oz/xŠëd°!ClzDe±7ä"Ä»o`‡åjGÐI¶TTªœx%m~‹šHKƵß`CÌ0Ä"ÒéñúŒPÄR¢Ni{‹2T1ª.&M3N˜ž q(8QŠê¤õžzˆ…ŨÓ%–h’CeÏ]d‰ü „ayl3‹E’6Ž´¼úqlHÂóQ™‹.zJ@øfÞx”®Î,Ÿa ‡:)RªlÚ 1•·£BTªÈ¨Š8Êâç¨×Øâ´¨’#¯8òC5¾–0#_G 爛% ®¡ð³=²‹U¾{˜×^râ|WXúrà#Øa‚-\,ê tb_C½6™Ö9óazú÷ÝT©~iêú‚b3TkÀ kÌcã¤ÉóÄi³È#ìKH£ì«&cK9z ”žß–°pï³j—>¼Ï0*†ßãÌøï¡ ßä(‹8ü8ÿŒð} M‹Cþ]†^ˆª™å.‡øiï+ÄD›oˆ§¸È9²TÉPg™^áQÞÎ œâ*¯rŽâHž5æx˜KøuãÊpœ:Çýyœ±p¸É1îp˜‡¸Œ' 9Òåu©ÎdŠ™`Kk’ªæÌRab«¨ECFU]Ñ”z„©ÊÈ(B—)–|­MŒCülp–:Izn„5w“‰«¢efØfE¬9Tê’›¤*S ŸäáÇø„mrÊ àbf$ÎlücŒö‹1‚‹2¾x°›I Úä Rj´/Q65ÕYÐ@"/®¦& ©\ðÀ½ e~ëÖ¥0¡ñr G‰"iWÚbe] Å y‰°Ø:Ó#LFˆSµ ?>¡/¯ÓÇG—âÉ)NÀÄ—㎠܄ˆ¡Ë Û,ö8Ï2Áf•G”É1à ™q€;âÂà“¾G¹% íSj‘$q«Íİ öGœ÷?däªìs‘c}b-nW˜|Œ³>Bí>™d•™°rd«‘ê”ô´Æ…ñN|34­kÕm|æ˜V,JÛŠ2r´Ì(EŽ]’%–ØÕd¸™é)Oð>c|,°GtÚ#` –Æ{ôÆa\\ÆØ²ÈªI[Ú¨·ÖGÜM]`Ï¿ˆËyTO{‘’š2Ðâ"÷é¥H‰:)pž >,zÌp"Ïç jj3ª9"Bc :ã®òÿ–Ø¥OP§?FBFS°eôêˆç9ÐèiϨÖ$¡cyËì å/ÈyàL*N­÷b¼ôä\F"·ª¢¤¨Ž{›ïäm˜æ9ZT%GFé¥Â˘8âšO‹oKÝDéŠeoBššÀkT¬7K…°Lñ<¯€šJ*I¯JF'<¦»bLÈPe@€°<«kä>þW¾ +×j”kŒ ¿˜W¦<4βûÔI±À>Gv‘‘Tmæ8•ÓT†‘ä,Œñi­™6…G¬¡§wëǨªP/ô_&§ÆÎ†yc¥!rNePeAðïIä8ÕcØ$u2T8%O‡ˆÎºzm=~Fz'¹Ã2ª:¯ºc,cH€Ë ô ‘ I’&Ó€AUòò²*ÒGŸöXÔló61îq›1iê:ë¾ìî“Ö8õåØg&q.q.aq†{Ó‹¬[·(pL‰"C̳Ÿu’J·6bæ‚%„(“ã–q…4ueŠ1¢œúf¨‘fŽC¦˜l³Â¿ŒÏ{첤=kÙ#n¯ü$§owà…k¬›·•niè"À“»\¢GX—Μ’çˆYåúu·…¯®ô°QÆòïyF…1Ú púJ™œ*Ï"Ÿ%J ›T-ÍQ¦B–vX&B‡*ivXÑ‘ºl²F@ð—ç÷¢ÿ—¸Ü?~}××ÙÀL´´ IDATþÃH†ˆÕ§óƒé’ô7™ÄgzRÃ"Š˜è{Pµö…Ó &†Í`b `›Z±(¹I•ŽV›~¿EÝJ’×IL[dœ*%³À eŒü”QÌG˜¾À˜è°K_/p*…½ižeðÓ5Â4Hvz`DÝSCå¾£n—‰acÈ©ÎË[‡è“˜6pd’×#L’–î\ÀDz¤ ÜàÊÛœpÈc†–¨s+¹ŒÐ%KE/v^ôvò¡1r@ü=KìÑ"ÁPQ:ädŒî9ðæ8ÐàI-™ù¡£?Ï‘ƒÕ©ài+d@&žcÝsª+äkB×’Z³Afœ_ú`Ë×+D³ñ€óšOámæuµ®È‡=ÂÔDª Ó#&“›~NÉ–»ÒÑUF}E‰ ÚjÓïô ›= h™n¬¿o/&©!Žxšú4H’ I—0QºòŒöÞ•ÿÊLqiªÌ°­G&qé-R}W—™¨“hŒy0pYbW»Ò•i¡Â"{ ùØWFµ()„hœ–m©¼*d©hB\ˆiª,³KÛˆiýØ‹|d¨¢1&.+lS%£¡#Q:¢¡5¡nö45ý3z‘†0=­Ï¥*5À€6qòœrÀ~Æ„é2Ç!ó–R?#"tåâP¸Ú€„ÉqŠÅ“': ­v˜3Ž˜DMØ'JJ¢% Vئa©rƒ=f8¥Fš<§XLH‹³s‡eú„ð™#Š”ôhÍÃÜÚLXdCŠ”h£I’}MÆRyóSá|öL‘ÝHŽã·aá™i³®‹4æ„á>$@“!ú9"-­k š$†8Ìýz7¾/èΰçÌs Éz— UN˜ÁpQŠ:¶P§ÒÝ:OÇßå˜<»,“ç˜ 5ÛÌb€>ÝxÜ‚r” Ò×õ’?ðúǯïî» åiÚsLb>ºvˆhMÙdG cÊdèXQ1‡Í0æ:3”Uƒ™ AŠaÔÏÈðS&ÇŠ¹MÛcdøÔÎB5bù¢œ™îRvf86‹$ÜGÙ§â¥q»Ç´sQ¶Y¦+æQ:4;æ2 £I‚&ßÌ>KÁ9ah*Ívdø1]G´ú‘žÎµˆ±Ë©@S&jJîZAvXV$3{LÂjíPyoBÒÆX2 4Ü #©‰jÞ}¥¡Lù0¨Iá`USX†qڌ𑦦§mê~(àg¬µð,N…(ç’U ¦j?ô’ÖªŠT±?|Œ‰Ò!AS¿_ÊOäÒ‘IÛ *]pJŽ¢tYÄuNßs˜ªN“¸&‰Ž±åà°¨Ÿ}ªÓì¦{÷C^¬1ú„¥Œ«®ñÜ] éZ€!~c$ˆ×€¬UÆwH"6Vy¤+RÁ%JGªf “Sp~ð¸Q×ñ'tÅ;^e‹*YôÂüG̱É?Éuàm®°Â66Êä8dV#ªd1ýS Tá§‹ª>ôô‹ 9.r-îsQï,ƒ X`Ÿ”œrUAm ¼Qð³8&N‹Sf¨’¥H‰0=ÆøØe‰ UÒƒ©ÃÇX¿”a à"÷tíá?‹ìj˜A–3Å5UÓœ2Ý(WišsÒ%¬ËÖ¹-ìbu2÷XÉþɈ~(ˆÍ„¶‰Ñâ6ëÌrÈyîë2˜1–Ø%D_7®rK£n0\—8MV7 pÈqZ¬sKS“&Ø)a1Á$YbG;ê{\b—X¡Í¾‘æá[1^~îXƒ ,\Ø'N“)Àà2w´£Ö;M7Hò¯é‘{• šÄhã—keŽ#Ö¹…ƒÉó4H’çS(YpBŸZ$hg-fe3Ç].²È>¸Í„7y–.aŠ”t!„ñ¸w“ó±)î{öÝXðÜ€IËP²Gƒr Ép‹#ŠÚ­~À<N(Qœ'eÔ‰¹mZFŒ7xŽ3Æ–Îj{Zò!aŽÓ9ú¶JÍoOÌj¤©EËœDftÂ?-f9d–´#Ó+sF%5LU Ì a£G•´ŽÎz—2Y*þ ;,ãGüòœs=H#œÀ6Æú~sÅ0Û ÉÔµ5µ,ÀPW°Æ¤LäTë*ª«4fO?÷òáŽ@Amñxúþ ÄôƼg$M$ ]úR!«'jºÚ8[àD›j=# K™ÒÔØgAØïIÍYïᘋó5y¾ôNš…§•?À›œa“!öYéb c d¦"HY?C= ‹1n@„šh÷ÊlgÉô¢d©•šœ&Êå(Ó!B‡(%ŠjºB“CÒRçÉ–Œóë(ßSóqoðñ¿à™ñÿ÷‚¡‹-¨=ïÄísÇ„à’çXWfznÁ Ü׹ŀa<§ú> œéï’¢&8ũ޷}¸TàwõÂ¥p®}íxW:sS²šGTÉ`Š;Ü;m+cIˆ Câ´ô ”¥B’Ñ‚[ÄIÒ K˜]–ˆÓ"K…¶è>T=Ä?cbthS$µv›Xª­'*ÐÄ(“5Mš Ñ×¥e¹èúnˆÅjþÙŒ®âb²Ê#mä¡(n¦v ÅôÒ%ÂÐ 4TSØíágLº¾!sœâ`RqrÔÌ4Y¾¹ ˆ)GY­„@çñ´g9"—?¥mÙl}#Èò¨‘£eLÑЀ®ŒêUJaŠŸ1áˆÕ¥eÇ4Ñj†S\TÁC˜ž.zñ mRÔÅ%=Uõ™Ô˜bbM”Kµæ¦éQÕôäŽq“±©6'!úS ASŒ2Šñì=ø*RòX#÷ckßÓ뫤 SLŽ˜ÅÁPÉ7ÍüôG¬Ò !Q+%Q™ò,HÐP5ªDè!„Tfœçp0(p¢«/ÇØ8C“n0"‘,¿lôUyp<¤áWúï…jÞbMŸÝóìq»Z¢Úd ‡ômO±ØfE®í IÔH38dŒ_“ìöY`@ ºÓI³Á6Ë„PØÙ±lr·Ü54èJ«K¯y”6U²’$Q4³#*dð‘a‘="tØf…0=.p_ cŽ(“ÃÏØaYî²T¸Íz„õs£E\ƒ^BîLR—Ά}¶Y!B—5ºÒжÉ~†ä…ÍîEÔf8å®S!KVFý3œ0³82¼ýÖÏ?³i(–½_Þ3@ kšú¨žMªÜó;, }n‚(Rb›Bô‰Ñæ.Šmr†-)¨ ¡JŒ6‚Dd ½].ŽIÐà]žÖ ¥t¹+î{‘ýǬOýAÇÖ>¸ô*[LðñU~”¯ó".OïQ' Äis¼ÆË¼ÏuºDx–7ä6ëÔIqô ó/sÀña“N¹ÉUNÈsž<ÁûlrFïX½˜Ê¦”®xÕ| áhs›u­SO±ø€'h#A‹unsÀopºtÓ_ä¯óß2žg„Ÿ«Ü$lu Ñç”^çGxŸ'Xc‹±ëã}óSL®Mn1Ç9ËgÈsÌs¼Aƒ÷¹@4Ï8oKiƒ:m?—½I÷ÌÿûŸâ§Ÿf…m²TxÀyn±Î)3L°yƒç¸É:.ÏÖߦÐ9ZÜ_åSÜåëÜbž]=y…ÛŒñññï¹Íº„õ¤ÆÃ5ÎÖôTc@€ó< bdù;û§¸ÇEÖØÂbÊm®ð6Ï`à0ÆæçØa™8-®pû{;¡ÿ}||Bÿ®/U¿9Ò.cCq!zDŒv`*zqO£_•,Wcž|ŠLyóqr”™¥Ä2;,°O‹="¦#²N±:ÂOŒΘ&ùA™ 1L 528` ˜˜6u#EÖ­’p[dU±ªb²K ˆçñÜ↤Guáλ‚ˆí‹Ô5ÂïŒÀ…­U{›KÇ4ðc©„m¢‡%Ò’B:D¤¯Ý£Ñ¹2³u$òšúžO;ÈwX¦IÑG>ßf÷ý U'É;£[Ï>ܽÐ%¢û<¼ /úØ"Î6+"m(C³×KïÚx¦¶Ùé‘#G28W„GœáYÍÝðdÂ#fÙgQ6zŠÊ?Á’‘ÃG#ýØ'ôêã1=9É ½ŒêOФELUÔÙ9:’ù­¡z¦‡{*áþY )CÙ1éágh9¡ÀuRR3¨XËž–¤\×èÒ¯èÞ‹!yu…‡ÒèæýÝ5Òº¨!ÀH²Î ú´>Á¦D‘1 Ðõƒ}Båëjd¤·+»ð¨Œ®‚´Ým#¦ juÒ2ŽéhÈØôéÓFÓLj·©!„¦I\Lj¤éÛ!š¾8Í`\÷—ɉ›u¢¦C:(ÍÑËü«ºRõ9Ç=)WP7r›;,ã)´‰Ñ°c²iRS‡šx¼›¹K˜š™Æ‘"¯¡ÊÍGñ‚oÑx.‰ÏœˆæÑ¡ UµI!I=”¢ìËQ•S»gB©K ±#ï×1­É©©C”}©’øEˆf A‡m…+¡C¿d]] Í=P Õß>"À›>–äÓ£¿ ÿ oÀ½½=þæoþ†H$¯üʯpóæM¾üå/“ÏçùÙŸýYüþž*ÖU¶cÑ=ÐÙpå ©u»D‡VxDŽ »,¥M‚&C$ihÓûSèY*ùᓊP¯Ë`‰=¦˜Ã}bF‹´È2sÓC¶­˜SF;§‰‚@…QP«›\%iÔéŠë~ÙØaŒU&ŠÕŽŠzYðI© ޲À>~G墇øIQ—Y ?#æ'‡ÆC’ц‰{q¹%g‘ë'eÕåÚWq­ àÇÜá2GÉP¥À IŠ—! „^~=A“]é¡î¤Ù6WµÌ¨Rã ™2ZË㈃¼FŠ<³»„i‘à¡húcüTÈrÈœ zÕDO•^YÌrH… ]™Ø*™sޱ,Ø.à3Æ,-Õ¹3šcëý±+bå½ZdWŸÄÕxBLÌy9NÕ&IÉ¡{Úy[Фk,‰«>mé70¤MLÀE#“-p¬[ Ñ—µ% S ]"º(è[“c÷ææ&Ÿÿüç)‹üâ/þ"o½õ¯¿þ:‹‹‹üÌÏüÌGsB/‹ÛxžÖ¹­ã)êbIÐ%¼'§y[ÕØÔ€ÿ]–ô¤OgªôÕEv™g_ú†óÌP&FKG>¬ux»ÍšXÁòœJ7º‚C¬J¹ˆGBJ‰Ž–‚û"Çä(ëì«ÍTë0ÙbUÖ.®Œë뤘ç€%v4eè:ð¤ñ®Ž@$‹ºËxž²F8b–=4ñË&b†Sb´iðÉ%²Ñ2'ƒ{±yí&íÉ)5%£0O?;ËyN8!¯!ªØd¢/†?Øg•G4IW]Ä7Pà™s<÷ÿ 9Ç@6m&8¯ý9Ê´‰²lîðß,}…ççorãí<-b¤©³Ê#½›õJR&ØÜŠ_fRú”%݈ w=š[®·}×Y`_ªSºÌ!J‡IÒ¦Mœ c —mV1p8Ça;ˆÐ£À gyUÉP•Žë Çâ‹x¬‘ûøŸù—eY¬¯¯óÅ/~Qœ=ⳟý,?÷s?Ç'?ùILÓü¡:¡ŤåyHúÒŠå†Ts–:õ ‰Û¸+§]WcûY>½¨(¦¹«kV½SüÈR†0ïá?umm4³Œ)Žk2Ä/½×cÝàè}þ‡ÿ®¾4˜Å)íMòaŒ{£_ÃçêEÅÓ¼U¥g¡¡j@›$Ĥ5”¸«AÛˆâêòò¤8ô9Ùû 0ÂÅ`*M“€(áù{8b~õàRÞä5Bzï‰w(qAÇÔ¼BÓtGzš¶WÈâŒc´%—p?Yà‘¿ÏóSR"eÊ ºOˆàZ€@ÆÔô¸½BNU6äß ˆ¦=Ñ/3îMÆÒ¼¦v`è¿÷žªÃ“’Y½ŸaŠEÏ kh7Ê÷Ø#6S=½A_ßSlíŸúøÐ8Þ¶m.]ºÄ«¯¾ ÀÝ»wùÜç>ÇÏÿüÏó‰O|Ã0>šºrw5]ñ‡3$©kâNƒ$׸!´IJIQ§À1 ì°BŠ:çxÀ!sL2Š`´Â6-âzÍsB‚&S¶Yá,€+ÍaJoÊPÁbÊ ÛzñöIl†2A2G–*uZÄ)Q¤H‰45|Œ8bNÿ’;ÄDÿ ©±µŒÆÊäˆËÉáTÐKÜ%F›‡œc›œ¾Å0¦ ¼(Õ}.p(¿w£ž0CŠšœ§œ’#N‹<="N“DV ]© NµËì¥Ís©z™Uåi‰"Ïò&!úÜä*]¢8c› o@Ö¬0Ëmbz$§ •ØÐÍXš«ê¤Yå‘n¸{Ä*.A12ÖH3ë±·SܰW¹ýõ$?ýâ.aºrM¨^ù>Ft(“%N›-Öø$ß M•*Y‘ Hc_0Œs~†HcÒO\ft­c’º0£žp? o„9!O•Œlzâsˆ’çTàÅ@ ¿5"=6±‘rëŒ ¿È)U†ñ1æ²{‡†‘dy¸¯Æ¹›Ü¤BÛŽÐ#BSWñâÓ6ñJ—n1¢µÓÅý#ºù›„Â}B“>ã¡E<ÚÆb´8ÇCBNŸ'ú7)ùòì³£ {Šm«Åcìú˜)ê8”ÄØ °Ä‰VƒTºŽÃ»ÄiKQKâà„–g•G²lŽèÐcŒŸ…éƒi ¿OÛˆ‹Ð~Eˆ8MRRÝz†-ñ4µ/¨/WŽÞ˜5å-FKø4 GŒ¬^]mSÌlIÊ"çø)1ÚRK­ÆÿSlš¤æHÝHÓýOª8Š@JŠ”ø Ÿb@ˆ9¸ÌÞç:!ü_&8èøA2T¹Ìâ4Ùà,Iš\>dÙÚãoíË‹ʬ°ÃóÔI1ôùynø¯Ú?ÆMß:=¬±Éžl2NÈ‹å„#æ±÷(“ã+|Š$MüŒXa›¨Ù&n6yÀ9nr•0=~Žÿ“›\å)rÌ6éæ-žaD€ø&Yª¼ÃÓº_ú§øÏüŸ¡AŠ8mÖ¹E“[¬âcÂúì €ÿùµÏPxÉæ)ã=â´¹Ç%¶Yf-þÛÎßòŽý4Ë¡ꤸÏyZ$xžoIl.N!?Ϋ¿÷{¿Ç½{÷¸~ýúË‹˜D…Ôû,â7F*Æeø‡l²BÚ¨³Í ;,Ñ"Ne´½g\¤K„c‰asBž5kSƒ‚,¦ Œ U2ÌZGœop‹uªd(p̃…U¶¬Å*ˆE(E÷]1×ÕF±b戇[ôŒ="¼|š($•¡ÔPgáCfu,µNJôf› $eR~©úTæ¹8Yá1XpĬΘ{S†˜Õ¦n¥èaN(°Ç#üØÎ„²‘%e4d9Uñ©#fYa[³9٪¡!z„¨’%(&1å+Ñ(L• ’b¨íQ!ËŒñqÀ¼ØBħó€ó\æŽæ¸{%I&¨Œ·Ê‘·Ü¶1Ñ,øqöñëi¤ÍׄñrŒqÀàk¯Åè½Æ5Lj¤p%¦š¤Á‘;‹a(é®-ò…!Yþ ÊdUSžüRm[!K‚&Ǹå¬S4KTÈrÀ¼®¨-QÔä;ÏGà¡e+n¿¡ –~Æ\å&I”djñ}ÇÖ|9ÈÆÀu›ßõKûý>/^äw~çwøíßþm?š½DAôaW3 Ã¥IG“vªz‡3¸Eœ29ݹ«Þ,õçcÛ'®52*b"zt˜óè{‰0Ææ .Z5Ž ®5LY ZJkW¼æsÿ;š}:ÒÐãÌ”“ÞίC^Fìz4EïÝgmVh‘à"÷ÔdÀR:®Ç öÉ¢¢ŒiyªdÉŽñ‰ËÐísžtÐ Þ‡© ¦«#ÞM4ƦC„˜ Ù>ìŠ5™Ò%ªÇM ’tí01ÏÔIÑ8‹¡«Ç¢corVSœ<Æ~€¡ŽdôVÄ‚BÐt!žã¿góu—ÈœçYã-\ ê¤9¢O׎bZÊÝ:î뉘›öYà˜ŽYddܦhxiöYd‹3ØLØ—Ô`šq 3Ë!÷¹¨±¯áÁ[LhÓE |¨Cì[óÉúÄ3Ni·ÛL&ºÝ.W¯^ekk‹Á`Àx<þ¡:«·Î"I›©aˆ$ÖÂϘšt„žúªêÔ¶îÈV\Õ’82üšíà¦æ„·‰‘ !“ž6¦_Mì,¦ÌsÀÈöcà¨VÄA¶¡KS°ž ’¢Xrw94æôAAÕ•Ú¸ÒËîm <ŒâkD…ºÌr¤c©A¬±A cÛGÎ*sDQrãU¹7Lc*Rd5 «›¶îgðN—Šõæµ_å†ÖÕÕ"U\“)Oó.÷9OІ6›Ès×Ç"û¤©“¥,Ð8FÉ£Í!s„¿®îsh’ÐàÏÄØ$AÚ¨S „)õ®cü<à1¡ÐEé‰òÙâÿñ ;ßô3ÿ‚Ú±%FaÕt5:0O‘#b"‹ÌqH‹8]"ª~––Óx§lÅþPýç‹æ.j˜ÂoÿopÀ-âbÀ³‰Ó=JEzÛrâÞÓÃ/^Šï?¶æWÆ·]´“É„N§Ãx<¦×ëñôÓOóÆo0 p˲>ªr–.>ýÐôze3Tu‘‰·¥©2䦧 M±8`‹!SÚDéçT>YQŠ¢ÔIrÄ,CÄ¥³×ÁÔÈ>5B éNc@Æ@>šÄ¿C?ñNñ¶<ØËä4ÍÃÌŽñ½¸#å2BzÄä}mX‹Áãø˜h7f™îDˆR´™-ë«Ú  wE¹8FZ£ò4›1>ÚFŒV0NnZ!lõÄœfê_’&>ëx ½×” ©±ŠS,†Ó;ÃTn„!)²QÝÌÞ†@í´§’¹LIr°8ä·Yf ñ;]œ£8La­9^Im±qižÃoÂé 3L [ºœC´¦qƆOèÌHŽ—,P®Û¸žT¨ÑßK3³g8U$>_Bªío§¨3Ï>÷¸¤ó²m¢$hÑ—÷És;˜SàÜG[ÛÝÝåÏÿüÏñù|üÅ_ü¿þë¿ÎÝ»wù£?ú#®]»Æùóç¨ô\&„ÈB9 W饟­ŸA†DèÒó¥Ê+g¶÷9J öQ'©ãGÞ5X#o÷¹ÏñK¿ôK<|ø?þã?æ•W^¡X,~4 ºÍ”¤˜µª¢¿ZLU'0û̳Ç ìácBI@ šä(Ë"’fž Ó#Ì8®¾Õ3lÑ%*7S³l Wá—Píkœ'N‹(ÒÔ°>ÄöHq^ _ƒ¤T Æ™¢Fv*jUgwŠy%ö1F¸âÅ1_!Ãeî²Ä˜;\¦N’%v™áDÇ'\[µHÍrD‚&% Üæ uRÄijò\Ÿ\¬ mÂËs¢Ü±ý6ålšNYç]‰Š(‰©-©§$+lkÚS‰"OðSlޤÖtà†ˆÒež­}÷ätŸç„ }©µõs‘û7Q““‹Üצ¡–E㑇OgØ£ŽÚÝ_ç écžãƒ·ò¼ò‰;\0î«^á@ˆ JšKÜe}Êäág™f8ÕÊ.žâ]glã [z×ì=sT} IDATº†8OÃRk¨jS¯qS¦" \Ñ6=zU˜>)êúD7|Ü›ó1\î«««üÁüÁwü¿_ýÕ_ý¡­…%-rû$:%©:öˆc>k¬óÇ^\+'hç"%اI‚,†hËÃÛ+F Ñg(n÷}&–ObM5R¼<úýkœ’ã4’c8 õå‰j’ ÷œyÀm.3q}!¯SAÍ2/é• RŒ±¹<ûC'Î;,0w}‚i8Ú¯åÁvâÒ¦æ‘%½T à,55n¢ÚøÒÔxÄ*QZ¤¨3 È-Ö¿£ Ö›¸xÍ tÊ@òëÐ$A†*¶ü®¾o ý»,è—/_æÿð¿ãë·~룭]â.G<ÇWy™4u^æ5Îu7Ù‹Ì3uMBFŸwÿdüY¼þó×üæ/èÓîó*Û¬p‡Kœ’'ºÝáZñ¶YežÕ±îòŸÌŸ×Å#Ÿà-¾ÂjÞïóª†I `K3Ó3îÛlgyCZ·ž½Ï§Ì×øö C”çxƒëã|Þ÷Óì°BšÿnúóEë'ÄÝáÓ|™·y†œ§È+l“¢ÎÛ>sÄmÖd‘=VÝG¼f¼¤;•Ÿå-¾Ä+d¤ôà¾É›uïßôœñ쳈Í‹"MA¬ª©šÅˆ€€²ÂºèÄ•MüPÜîGÌ’”zV/ÎZ'ÉóL°u÷øH¢m~F² êB›˜,¶qÂô± '½ÃHhžyƒwÞÌýDËœR%#Ío æåEÍ<¨WÍì UǼ_ÊfüºvµID‡bâÒZœš´Ž±¤ŠÖµÉcÝTÒª’6ø½¹Ü@Ï‹¨>õ"UVbÇ0Cïò>CeÿÚFŒºhÂ.7Ìk¢“u{™Â*òZ;ã6ël³S96 ¼ËÓìR‘S–ê(WE-1n±®±¯Ì+¤¢k02üTÉpÊ =ÂÜò_æ”,'ä)QPÑ4ŸÁ}.ÈTÄæ¾už ÎjÈÀ,%vY䄼@dš’§4ÔÎÓÈsL{\¤N’3d X#¢l±J4û,h3]ß s—K˜8,÷™š–t¦ºî!çÕn3`q6¸Á–•îulcBŠG)Q”Ú?›]îpYjdß×ñ YLËá-ëi–ý;”Ì%ŠTIg£š)} ³A…_çE I ·3Å"K…)éRá`pÈ{,àcÂUn0ÁÇCÎQ•a¾pÄøæi&/ج…±k/óˆey€duN“%Š”ÉIE¢2î(·zšn±Î,Gä}''<äerl²F’.&{,pBžMª¨J^ï¦x—§—™æ,ÒÄþýjè¿þù8nW˜Ú^Ý¥‘*à‰i*&Ç1w0•+’‹AÝI5;Ä¥"ÔdFˆŒº„È¢ºÃK•ŽL°0¤n¤ ¢:Э鄡àyLÝdÖ%BÓHèÌ»‡xöÊ=u²&FÍ&>|Ô¤¯a$z¨*TéiØL’MâÔÍ$óXȇ®®ˆUºyæµ&¢Ï6«:ãqÜÛDácHŠx‘"t5Ó‘d½-=á-b8‚BÍR•4KŒœ½ÄÄ…o3ÁÅÀǘ23ÀÒØWO›öÑIÍ8d^û„<  ~† &ÐUÉàg$›…‘DPUjf"Òh›‰Åwz ì~ÅÆyÑ"é¯ ;¾­åÓû|”毈êYî“h³âä{8o=˜`“•ª\Ïçàu¨ÍÈX{§< g‚O8ùªÅï±sèÿÚѯj·h²Â¶Æ›ýf2öXbW_dCd¨1pŒ*I™0ÏŠú'z7犮Õ'DžM6áÓ%)žæì—ÂÓ } ¨ÝÊsއTÈêŽï8-üRßç™gNQE·Æø°Å´¡4®³éÛÀå ›œ’×c§8MÆÂšw1p,“8mZ¢…éi*Tœ–ÚŒX1ÍQ6%F¡:Õ‡Ü>ÎÔdè 1ªŒñÑ#LІŒÏ ‚‘5$Æ‘Ó7¦ªŠUÍguR\0î`(8•›ö¸ÅUZĉØÏT .ß~¯¼rW6@uÒ„%ç­ô®Öð$—YŽˆštÌg9ü¦AóÙ8®áb3¡H‰c R¶âXbŠ3bî™ãˆEö(ICžÇwîV7fÈ”›±¯»³TäÔ“Õ~‡56‰Òf XQiê Oû±GîÿœÉõãúwwì"Ê@ƒ¢>ìôLsÊž³ÀÐ èí ›©XÁ, Ó儼K|ú™0EEÉZÒàçc„5vðùÆt„îù2ÒÔˆX=ÃÔùd¯C«A’}T±#}_Ld“Ü!JŠš6]ZâÿIKóÐ ÐãÙ 1YÆX84H‘qk•A .}\ùw'²Xe¨¦Ï‡:aây?¦Ø8Xßñ|}‚÷ÙcQÁ<ÆÆ?û,ˆ†¬úË=¹I-jU¦Òï®6Àª¬ÙÛ`8ÆÏHÓIòœpÊŒ®*u1ÉsЉ–°’‚çm'J ‡³O(YÃÙ¢jféH[Ô5>ÀÁÄÂá6Wøor›|Ùe‰, ô(p–#žç[l³Â}.Ð&Æ¿åo©‘a‹3!|™™2{dù_ßü4?õ N™áÓ|™—÷î‹ü¤\?·ñɃtŽC>é¾Î†q––xŸ'™gŸ(] "J›l’`‘}N™á'GÿÀ¿o~žWs/sKL±¸À=²Ty›gp0x†·ISã6ëÜá2/=îÈýãúÔïéu÷ñbŽCÝ6é2?ºSÒ­ŸÊ½FŠ:·¹‚Ëì¡Kžú²áLSÓæ-:äZĸî~Àlí˜bX•/)q•›2¥ÊàN {aWbk-ŒHÐä‰ÉŒ ?%«À2;„èKÿAY@Ó’Gá×ãú§xBï”k‘Ú‰m3º¥Ë¥Á],{J.PÖxÕAf(sÆyDÉ-à·Ô:ÀP6¡A†øE»è8f„.ËìŸ—SóœÜÇSù{rˆJÓ'Œ_»žLJ¼d’qE3ŽÐåçèI‰Œ§»Gň캼Ÿ·BVó4L9Õ·‰ ´KŽŠèâŠß%B$#WeÁϲ©6Fg.ß!zxÌÆ{³äŸêL½WOë`2Ã)#á,±C•,.†î·˜åˆ1>™ÓfÁmVtˆŸ±Žz-vJ§oêM›Ç4‰Ñažv÷0þÁ>3>’ýÓ|‰ÙvÐɘ«D83Àçaô Ö€±³ø1©6“HëÙ„Ã=VGÛ˜¦Ã¬}ÈY6Xªï:óLþ=;-^,|âè”^`ÇP4¤Ä¨eLØçXj2ûX‘)Kî.ç†[¤ºuûø‡câ6=;D¸7`¶_¢9¦a$ñ9²Í]ÖBê‰;Í>ÆÈ jbŒ î€A @ß ÂÔäBsƒ¡í§îO24ý„vF0µ8SÜf9¶‹S·™ žàš/_£ÝK2[$œ&ܰÆÿüK°Àr§8¦ÁÙÁ­@§éc²)N80æ˜1¶m–NK G6•h«ïRpËø##2'u¢fŸÕÄ6~{LjPgbÚ¬„Ԥę˜$·;$cm²±:þÐL­Îó7i[1‚ƒ1V°Åó±o‘«UÉ”ë¸óߤ ñ‚õ:ùN•f F× sÆ¿Iq|‚;°¹ºÏœ}€éºXÆTzªÃ,žj È'*dsbãáÚˆPð˜‚{ŠkäkHo°–Ùä¹±KùC|ê…¯±6x¤Fnþÿ!ò¿á`š60¦Û¾%æê%ò‡UÜE‹`xHÀ7RÍvŽK¡W&W­p”)’VLFtì0½V”J3ÍRè@hŒß³Ð9ÀíóâíÓ  ]“xºMjú à•Ç;¡\Ÿú=½”¼ À±Â%ÃÀ¡NJœ˜-Z†2byœö*iP R'­5T¯Ûº µ¿=Í’„JÅÈ2 )ݶJ†<'† (Ï™Ò÷©º—‹žÊI¬k…µQÊkhì eÞ«ÓlË÷ì [ÝëŸÚ¦Ô€ZZoVæaºf”ˆÑÑSÌ–Ä@M¦4¸Žayhå)®jxëQòœèœxKŒbj:PÓ¦4¥[p>$xZºW!ì-Â{,ÈÈ{ ‡¾N´x§zoŠX!+Ùm5©KÔÐË´{-Ž#üL±9Ö› ŸLÕ"âšj ì ’P‡BÏùß%Jß1™·é’ì¾×£ød„ž¡–ê!AênŠ$ :FŒ1~ú„ik ªK¶ê¤8qò„MU—Ú$!ÒE@Ç”§Ò ¯$ C²þEÂ"Äd#©¦¾ì ý_Â~‡+´cåXFÆÁ!F„‚ä9¡B–¶ãèb‘ŠätÊ »~Õ\V&Çóœ¤f覂Üä*O.Ýâ«æ§ˆ; 6Yf—¿§£.‡Ìq/¡Êgxd¬p.´ÁJh›c ø}Cµö©F2D"LA~nškdRUqcñ1¦8f–#¾÷¸@7‘Ž4µ ëZöÓóº¥l„Ÿî¹0>Æl¢³élSftYËO¾È?D^á [8¦ȲÉÖØÒT£µð¦Š¨¤Ç“S®þ»¾KŒñqqî‰L†‘ NS¢È y¶ «œeƒÿ<’Òڙ̈́¾âÇÎ~—wxše®îñnê:Wã7鈻{œñ±–Ùdƒ5&Øœ’'mjò ÌúJÌúÙa…6QFROCÚÄÈÏœžéÒ–.á’¯Èl¾„‹ÁgHSãjâ&÷¸ˆÃÊÌw& |ãÆUþ§gÿâF›i*dT>Üê`X#ÜK_d=}“CæUL¤:e›ñh›gCoq׺@„m;F>ËÙ]³ßây±JÄêKµ!¥²þ¾”TȆà˜<ϘžûA»Ü?¹ÿ“/¯#ÀPà ¨“Æïª\ôˆ iª:‚¤#5R÷té°drÚ3P ^ «MÇ´´F<ÄOÌép`*3Øt¤ ¦º¶“z´o1%.p&?#ŽÅwã—› uÒzS½æ†¦ŒYBœt%j6zÄhó€s$i‘Sd—¨^È"t…Ÿ GÓðrÜ>áô*BCòõ 9]À’w³)ѤGõ¬*Q$L—"ÇZ’š¥$ߥ-m“êÞ÷’!úä9‘nƒ ú™á”)ü‚Pu„â6ÇqšTÈI,WiùxÀó •®ªé‹5²Å‚q òBKÇÚz’ÂYY}ÄþN‚á ×#„Œ ZÄŒ6.ÏDGªe= \Á£†d¨²lî 0L% ÒÔpeƒ£|\*¾¬*¸kÉÏë“ï?CUH‡÷俲ºŠƒ-JÃÌqHp: n%R¨Ewš¡t¢23\äp]×^â®^Hªd🠹8wOô§S ¸0G„.¦ ]‡¤-Ë|€ÍXJYÒÌqHš:³²À>UÒÜf§ÌñeÞ6ŸÑÝÛç§Ù³Ìd‰]^™|™»öEj¤9e†³lð³l°F˜>׸!m<óª4ÁuÉRel¨¶·<Çœ–'»œã!‚´¤s{žÆ®–'N‹•Ú.µp“ÍàšÎžGèP’‡=’¯– $Fì– 0äE¾Î,0Æf ¦X1§QÞB\!Gp:à’ssþ´Ü%£HU4Ëóî*dÙ0ÎrÊ EJDiëGŽ2/¹_g×X¢)ÙØhÉŽz™ïè@ö€«lk³ãá·?ä,lRÔI»U^ž+3ã?åµo­±ð¼CÐPüú=l©MÍs">EÉŽNÈQÖüûùé+´óQ6Y£C”yº °ï,Ð6£|’oP¢È> Äi‘¦Æ»l²F†*>FŒw·ýñÈý{~©ñî@sÒ=cëPœÐLÑ.oï„ì•ö eê5 °d3–lr‚ö©“¢L–9ñYcBôèä€vŒeöYPºhÈfhû5Ul$1fC´èàM…¬t•«Îõ¾t‹»‚7)µÍÀòãcÄ.ËbÒ4¨“"B‡ŽÅfLGÆÍŽJ©ØX—IYdRºýÌ×öXœ×¶ YG’ÆŠi«DAûŠšÂˆ¨’!NKÞÓ3”ç¼ÁHžuR,³Í‹¨ü~¼ºÚ€œ¾½ßaƒ¤høI]±ìö 1 MT2ä)žR‘¿CIT“ ¸Ò}’Qjâ›_ö“ZvhX¶ßÎ~"ÁEß=5ýp£t ÝõˆoºbÞUþ§8ê-)˜Q5Õi‹±®OX_†x„”‰ÖG”¼ê}jˆà_Õ‚þ¹Ï}Ž¿ÿû¿gaaÏ|æ3<õÔSüîïþ.ŽãpöìY~ã7~ƒ{÷îñ'ò'X–Å/ÿò/óì³Ïê¯?Ç6Xd—eL–ØeazÀ±Uò‡‚{Ì;ÆÓÚl±îÜfçÿeïMc,Kï2ÏßYî¾ïqcŒÜ3++«*³ª\Æå2ÆÝ¶iÑÆC‹‘’4yÂy ¿;&B—»¢XŸçÇxØ´ÇÀ§@8…I™âäˆ7‚ªsV#X§BŽs ¢‡´ v+¤©¦GeŽÉãgÂLâ\¯ Eê<·0pùÏü;ÚĹê¾Ê¥Ù5B΀¤¨h¿Ê3Déò~çK Œ0#¤ý¯k¸|™g™aRäˆ5w›-c N1smþñŸÙf• 0“ç9 Fšk¼(îÛжÖn·ùáþaNžÀÏýÜϱ¼¼Ì¯üʯP«ÕH§ÓüüÏÿü;Òä*ä„qØcEZrP{¹N(F…¬¤én4f€B¦zÂÑ >Z$°™j1«úZŽ™ÃÏ„Äq-ºFŒ8m6ŒÓB;Âp•õ­Fš!!†b›ê¡BS:I晴PÌD$¸ …ò~Ž 6}3,øÕ°>œ½Q}Êl2rÀ«¬KFÐ-#NÈh?u€!# ¯é‹µÍ£æÕÉè,sƒvHS'I“,Ué’Ñz„Q:´‰“¥F¡N'Ê!§Í.Ëø˜’MŠ#ö8oh¦¹†ß‘læÈ>>GE§—…ééÝ]‡éI¼¬J\óÀ6JmcÉ”WöÉE]ŒñÑ"©#] \Ãnè[k[ûVèÃá÷½ï}|øÃfii‰?û³?ãòåË|âŸàgögÙÞÞæ7ó7ùÕ_ýU\×åSŸúW®\Á²,±QLu·‡^´f®&ñ4Ib˜*±%õU3£#ñ¼qQ‘I =5ì2jSÛ*é!ööïé©9»nÓpt\§Ëi3UbS½³Ô0ÆfŠß¥ª÷r=+" OJ•Þ7U%¥‡C™¼Æ=Nð0G"–h e®k€mL™J¢Ï SÜ¢ÛÖq{ÄÔ´‰ è!Àˆ1~æ(©Ý×´5™Ñð¥$©hFEDo)šzeq›R%×IQ§%žð 5BfŸš?ÍÊl줆ß?’Üd—¾Öѱ>g‚eN1¥cð3ÖéOƤ#BôɈÝÅóºÆèꀗ™À[$´0QœzÃr™š ¡¹–+Ñ4BýK=šïO4FøFÝ<Þˆ±"Ö¤ó™ÏðË¿üË\»v+W®è¯ñ/1!Ų³GȰg,QäHƒMƇ\åUR4h’ä—XdŸ5¶D¡]ç˜9–ØcŠE…ÊÌs¤À `Ì{äur¾ Q_—ÓÜå´»AÚPŸÝ°Zß¡žIé{u™]êd¸Ìšh™¥JÆ­Q4ޤ°té¹QjF\0"e4dÇ\çbûÍ„ê`Os—cqf¬²Íéáq»ÅzH­â<+Z™< ê`+•çH„±Cˆ!az:Œdˆb/œá.;¬°Ë2e z²'=‘ßÉKGËs,n"K/ú„p…péñ2FˆÒÅdÆ1 BÄôÉdAý›íxŒol¿È>EŽØd-B‚—í‹¿>„J~[a‡q"ôå í“¥ªE~Š5ààg¬;ü:iÙcºlÓ¹ùwqBß•%cÖ¸hÜ ÈU¶Ö*ÿ¦G¸ìK$Å!TbŽ»œ‘5C“.Q@ã¼xeŸ07VŒÎp—•Ù.œ¾÷álkão]ð ôK—.ñÆoððäóyúý>ï{ßû°,‹T*E£Ñ R©P(p]—F£Át:Õúÿù×)Â…»ä×£.,«´¬P@³|§Ø\ã+ìP'Å>K¼ÂUµ·¦Ä1>ÏG9Å=ãuå'^Êq›s,²G•_åöÌEf˜õÁÄ%I“-ªdÙfU¡N¨ YÝçˆ"-‚ 5Øf•]–uT_‰9þ"ðž¡ÇçÌïÕq¬6S¾Æ{èb‘}Z´™ò^^Ѐ‰W¸BŽ*mâÔIó_¬ñï#ÿAÕy ý›ÏóÝœ3nk|éË|”A¼$±MN¥#Ń —{É“$ÃuåMË%X䀓lr‹ó’7<¯}±¯ð$52<Îkô óÀ<Á_ñ¯ùîÀó¼b_e†Åù[\”ÿ¾MœgŸ²™ç–y^[#ô¸Ï:o£Ã3|•\äEÞCŸˆ‚z¸y¾lÂuªd9¢Hœ6Ëì`HÇógÁqÖ¸Í6«œã6§Sl^^â3÷?ñԳČîÛ`!'ä&mçM.Q¤D!¯[‘[©ŠåpL(/òWy…nðor‰=’´ÒæEžÂoóÍ=^ÙòêÎI~öüwFîÿØå÷ûyÿûßÏ×¾ö5>ó™Ïðã?þã$ |>…BjµÊææ&§O+îéÓ§¹ÿþ;ôͿؤÎ<Ó$uFuž¦xäˆôº¤r*Q̃zLeÀìe(„'ª@+AØ)7@s”˜£DÐQ1óÄh3G‰uh¬s`4¡o1…¹¡GŠºz€»u¥d7êL±‰ºª`4 WFÒª£ #­]‰ÑQÿÔ’ž; IDATXŸ¦©±È.†ˆ«ú$&-ânKÓÕ‚¦Ï °Ë²täouõ=¢D„î‘ -f¢[òQ¡À¿äh˜ÔÉèÜW“=<´n`ˆêXPƒ²DE{MÑ ´Äè ½ÕÇ‹ ¨Ô{’§¡ÿˆ¬ü’,a’”TÃ1Æø¦þ¶Ê²ÖégQ:Œ P%'ü>…ªm 'L~ÌÞäõ¯ ‰¿ÇÇÈòëõ‡Çè \¨kEèªó7qÄ£¬ˆZZMÅ}µ‚š °ä÷~ðJƒû}ŽomÁGR÷nܯ^½ÊÕ«Wét:üèþ(ï}ï{ét”b2™à÷û±m›étÊl6Ãï÷¿#¿9ó¡G9±:ã wéJ·¼Ï¢V‘*¿µE޲&÷xÈDê¤õM»Š´"#!þ¨ßC*Å¥C”©áPñ…&ÇäµÝÁQEVà <üâL|¤Kìb3åy@¡“4‰ÒážÔ~To”4ÁÇZ,ãcÌI6é‰ÈoHˆ9޵jwHc¦& i˜Ìи·›éÊXLE)N@ Þ„×Àq FŠ@-&ø´#FGWÛ~FÚ²æcÂ:÷ée›U™'6ëµUø„WðTÉ)›»Ç!óÂ¡Ï †Rý¶r€«E!Þ˜ÍÄ!h´±™•]¥¤…èÉCZ3”¢Y‰jÔ8«k„iâyλ·¾1érÿü*_ÿÚFòºåïˆâþ±+ ilíd2áÎ;ŒF#\×e2™àóùˆÅblmm©i·K±øÎ¬ù¹ï½Œ‹ã>¢´‰`DU$Gm3®mWM’Úÿ­@O*ÈËaðò#<Ñœšì©”Cô³H+ªHc]ÙÓï‹1¯ô8–C'ÕÝlm)¶ u{žëyóPûåGðB 2¤O˜ C™çtèS|ÔI³Ë²pçÕîù(8‡e©Aœ6}ÂøÓ!ÊKºCÂKóDx ö2ÒuË“0Z‚®á“.¾­)iÞ륫émIÙw«ôµ°¶{L{oÑ&NŒ °ŒêJ¾2Á&ŒÍH [*Juø¶qùLgYĤ…IѤDAõÀ%LŸ6qÖx øÜyéøU‡>’Î>A›†›flø5è&™Ÿ0é½ÞÅx\Cé <¢ž'Lœ>åîe¨ÕB‰}‚’Iß'¬›9 [+ûóW—È_ p=¹ø/o‡þÒK/aš&·oßfyy™~ðƒüÖoý~¿ŸZ­ÆÚÚþð‡ù½ßû=‚Á W®\Áç{K@¤"ùT-Ü$É)î1G‰V$›·/qwq­€,rH…<;¬Ð Å[¸bg$8¡G…<‚9$MƒmayyübUª˜>/”Áê3Ç> ÌqLL°¢cštÖAÑëºDYe›†(`ð׸!XÐÎr‡A=ò]`?᪘ FæÇØf•}Îs Ópp1éŽ9R4ÈSf uxöˆâç€4u¦‡h1ã÷ø2ï£L޳“ ëïRŠå¹Ç)¦ø4ò6ç8`ž9Ž¥8)rÈ<§Ø`…š$8d0}rTðS‚ 2ÇÎÒ%Êî ÔÆÅÙ£O˜MN‘§Ì2;úçÝe™*YÎp—[œÇ‘ᣗ[Ÿu˜g• ªd¹Ë‡÷©‘a›Ul¦<é¾B”KÆUCÁ_ .ç6øÒø n¿"v¥ÃEó¦$F¥õ£ËMVðË×ÍŒëlûWpäµ¾ÀMB ¸ÃYnsŽevq0¨‘%F‡4u&ØTÈIá2Õk‡êЧß~z­Vã7Þ òòË/ó ¿ð ¼öÚküå_þ%×®]ã¹çžã©§žâ÷ÿ÷yüñÇyá…øßøw| ~¡îÇ#æä&èÁfFÛŽS¢@—œ‘ƒ£Ç6+bSV$¯o‘Ð,M Ðp2Œh9 ö %½ÁEýßÕȰ˜.q˜§$B²sd©ê€¯PHSg‹U\ñ\7$rÔƒ¯ qDclfìû9¢H[ +^ÔKík$ !XÐS¿3¦í$صW›¤O„=’Ù‘¢&CÒ©hÞø¾/ÝñX’-½}°íL$èÊÏ‘¼~ÞsnžC)ȇïPôGé‰`Ìóÿ«Õ‚ ‚»õ‹n !& ^äi¦Xº)jfÄ!&ŽØý:âÔó¢ï³¤s6RìŒj±!„>CBÔÜ ¶1å ß×®i.×ß̳ryÀ [¨¼Lˆ}8É!( Ú€ +lÓ!F™œŽš1 OX4*FÕfÆ6«”Ü9.ר3–h<ìéüá,ÿä=‘Hðæ›oR,ùÁüA?ñ?ÁíÛ·ùÔ§>E$áG~äGxþùçq‡çž{îïÙOäà&ç 2¢À±ŽÔÅëV·Xc„Ÿ N²I•ŒH i““l±Æ©Èò”Ùä$C±Á©îZ±•=äK€Ëe‘ó>ïy"ÁÐ0·9ÉŒK\'Àˆ NSbŽ´TPM½ót^åÚ—ÊÝÏ„%öâ: ÈÕc{Œe›#+ #Zý’(5qž'z)LËt¬(ÛÆIÙ³;SÀÅ @™~8L7fqtÈÍÀE½ã£IŠ¤Ç©‡LZƒ:Äô<$È ;ÜöŸaÏ]f`„tåºÄ8AËŠPŒJ1ËH‚•ê~¼iF›¸«û˜èЛc ²& €Œ÷ ÉR¡G”[œWV?"¬²íLq “c£ q•]8\^Ød×HsûÕ…'³š­r™Gº ‹Ó!ì`lè¡AŠ*Y*äÝ‚•yáAh¢LAº?ßßlß úõÿ§úx î>cBßPÊP/‚o‚!AÖØÖøÃ–Ø£G˜{œÂ$G‘#-²KJþ­G¸È îqŠ-Ö8ÏM’4µ5Aq¢„ékj’W­î±Ä6«ø˜0Ï!AA§qnº‰åÌhù‘¬å=-V9`‘¡òÙctÄ6Öû¢˜XâV‡žb™]†ÙgA­ä ˜¬4i-% ú,²/zLï=õk’†L-|²w29ílà3§TÉb3%?­P³2:CºCŒ›œgž#’³&;Öª¼z!.rCXîj7x™7˜a±ÇÒõû˜à[¬aàjàÅ6k8æ·ˆÑåˆ"FÌQbŒ²U­ aúØLô!mI Dœ6—æ›l[y^yq‘ÂÓ&Oò2My¸—É¡'ûÑ!Q:¬°Ã÷®a°Å'ÝM Ó2__D{ ”ISçy –Ù•U¸_WîßÅý¯p8ÌG>ò‘ð¹ïû¾ï{Çç–——Y^^þ†_c—e²‚TJˆh_b+M\æì2Û¬1Œ²²‘EC'm åÿ©‘¡K Gw³žÅk@ˆc¦u*Y‹ÚXËXP äÊ*k&“›Ò³~F4ÄúåWú„h‘”äÆ>¦º»ÓVQÆvˆû¬¦¯×l®ŒÏvŠ 9á—[Ú¶ 9Jî}7¬ºQaÛ{æ& ê¤tª˜G™àÞÖZ8ºO ÅN)é!µõYfWû½=ûTRè½çʈ 'Ù$LŸ4 ŽÉcÉŠ­IB7œÞA¡§Ð¶Ôô³z  \=¢4IÑ#"1Ûc9¸ÁÍ Y2p 1”"|H‘’hQq‹(]\ z„‰­̬)‡_7™íðÎoÔî­¼ÜvC¯€ßb´u£çÈkãýF9"B‹îÃèÆ¿púÇäŒ0³KÉXÇÅ Àˆ>! ùC÷ S7Þ™Î0ÉP×êÎ*Y$‰µ¿h9s®ÞÁzæªBéñ”Ç,Þg‘ 9XèTE0ó:^/G]Y7º3'¨©èL$¤jSF&õFR•¿2" Iå*=¨F†™ibš*pÀ‹pT•P”j·hæ’R¥·8¹…gsq0~½—2$MCßälF½ ø\â“1¿ %ð:ø45Š”4öQYK¸âÅÊ ëb¨›pÖ#e×5q«K”CI¡Z0„=` ݓLjß|"7;¸Äð‹/V¥3•ÅÏ:"Hˆ>uÒò^ParÑ–lõØ´ËÔ´˜ x`HO|©jÄ5e\ð³a>ÉÞW]VŸ)Haè‚Ä©Lº>–Ó»8®ÉޱB…=#BÆRÝÑEꤰ™©Ð¿§© zJõa«ío&mí;×7¼–Ø%«íWo½7fôÜ(énl®*ö!KìëûÒb&ÜsC‹˜¢t(rÈ€0-&$…IÞ'Ì"ûÌyÊlpZ‡‚¨±ExÚgqzˆéSŒup3Á‡R“£„ÛfjØÚûî—m“yʺƒNÐ’)b´©XÇääþ_$ÈĨ…eÍT1Ú -ïé.G¾9fâi‘Ðð“æeŸ>"Àˆ4u‚ µÓbFLÃUÛL±°˜âH^†¤¢¿ˆž¬ªÒÏH,xÞZÓÃ`{Så¿n‹Ï}ž™ÐßfXÂůi}OŒ¶ìž}ì ¬¶ÊVlò€ÍñÂwÔ­¤ÒÙúD€Cý8&LL?§½Ü o+ïk£ÇÊ_Z¬rÛXâÕ×RØgÈP'kT)rÈPžyªø˜è(oZêM?¼†!FCVDÞô5F‡“l££˜ÿ_ÙÖÌwãæüžñó„œn|¯ñ8Ëî.Ï5¾L‚6‹³}Îs‹íþ׋ܿ3,þ—ÑŸ0ÁÇK„ðCüï,pÀw§U|L©åçY2÷8¦À “*f0È@=PÌ(œfÍØ¢>ͰëSJZ×0¨FRz:Ð %èZ KHqlæÙ­pƒ‹òŽXðÊž:«÷•EŽt”Çê…Æ¨t( Kâ)¤)¥ T}YXÔ(ÝCæÙ0N“ E]Dp'ó4{¯úH_)rß\§J–VXç>D’ÛÖ9XÐŽ¯šw„ÐÕ ¥ã`·YåØf…<¤˜çî?í@ÿ&®¿ø‹¿à _ø¹\ŽápÈ'?ùI Ãø¶=Ð#ôS|Ž#*ädœªîÛÐ`¨´ ®"+6ŒFQÔé|^—7q} e9õ"’S2åòƾ^Ì¥GV;çÞæqBu§®o6%gVH¤ªŠÒé Â@\81:’<¨òúÀ N[çh{g’ÁÙÓv˘9Ä#æIÒdqºOÀ1ÁfHˆ UaÁGå¨S¶­ ÊÈSÖ÷²ÅLO¿ï’Ö¹ûZ’ü•Q£££mÕ³s"™&²|À®h ²T‰Ð“ƒ:¸óF™=À/Ç=R§ðÍÿôOÿ”ëׯ …ˆF£üÌÏüÌ?xf¼+ú‹tˆSà˜~ÚÄØŽ.Q—ÝÖEúD(r(1u!^ç1m(Qäð1&#ð€~&Ì.Kú¡¾Ë²÷Ä…ªÆÎŠØä…'DèI*‘Ê·ÝeYšæ9¤O˜]s G¢ô”°,É=ßIél)òŠy… y"tb‡UF4CºB›ŽW‡G¨èC¥ =4æé‡C’ÑìèJ…Cí¹§Øl$OÒ0’zMqÀ‚>àfXÌ “V,NÇÓB¶]–ÈSÑâµ#æˆÊ>Ç‹!UP5”iã§Èeʾu2Ú7{Sú&lâÈ7§“¼›yƒÓ´HÐ+ÐmÎÑîô®r=ëŽ ÛpñKwH‘´(ü)*ácèm3¡éZÞs—emc™âc‡U,ÎÍípÏçîK1¬§¯2†„P6ó´²qòw¯“f‡M ä>' /:Ȉ29±Iå4L$Büáôo’·¹¹É‡>ô!yä~é—~ ×u¿­t¥BW¨Ñ¨Ûe$²ÒƒDˆÛm´‰=ÒÔ¹Î#òr*ÈÐ[Ú2ù¨Û)ÎL7ø¼ý"tŲe“ç˜9·D´×%Sl VG»L>ƆŸàpHtÚcÎW"B—Œ°LæÜ63eh3T9D©·ÓŽ ^tD@ïhã´‰Ž{ì®¶¤Fè’¥FaTÆõ¹Äè*†’rGÝ1«ƒƒ¥Å©‹`ÊÊÁó ç)‹‡¿MŒŽVî‡é‘¦!—¾îäÕ}#®I€‘¶¦e©Ò—t7upÇÉPÇÏXûäU÷¬Šb‰“=¼!î#ciêݵú¹Z¨ëýÌ€dÉ7eLß ¢tÄy2£.Ø[/ EñmZ$鑱· ‘£Ö²¬ZÛÄOµyaï{¯ŽX¿$ftµß_íîGz-¬0{4H’§B–*EŽä9¤;Aym”È/ù°óó‡Åݹs‡ïÿþï'‘Hð»¿û»ÿ|úmγƄ÷ò% lK•ãaþŽ(2ÆÏù[Lnr¿ãYÞËWÈRe““|ð]|…gø*CBt£Qnð'xÀ=¢Üå 'x@Bl³ÊGù="˜8Üg*Z$Äû\ÂfÊ]NkX“$÷u,f\å&øØb•IæE)°GÜ\`äóKd鈗xŠÇ<Âu,¦¼ÌSl³*Pµ›bó]|…™WÕ¯ëà&iêœbƒ ~^âIÎq‡óî-^6žd‹5ªdÉQ•.=ͧ9Å&.7¸È+\!)c¼©$*]â R&Ï>‹Äèp›"HI3Á殉'Å—ìgEÄá w ˆíp‹ä)ãgL‘#îršeöøþo^+>Η­'øüß]æCÏÞ"d ¨‘a3¿ŽOnê$M69ÉûùEŽ0b‹Uj¤¹ÈM2Ôø/îÇØ5–unˆ&â[³C?¾þ¶¼ç=ïáÓŸþ4±XŒG}ôÛú0Wº›#L"Ì\‹ž¡ -êv ŒFúÁëÁO<-„‡õ²Ë'–B-ÏlÕí² (WY¹œcÜž©ÇâA†ø§RV‹„¯…mÍ[¶ŽÌì!Ä€!B“!1³ƒmLY~ÉØ64´ÄÏXêž„ñ¢J ÃeŠ¿Œè#ôÈRS€3HÐj&ø.>¦¤Ü:GÎ<]+¢í5¶t¡à©Û \Â55Ÿ|‰=­X7%–5G™¬ÜxM͈€Øcž–G>ç‰`ãÁÒ»zƒ"%m]›b£CŽ*!úTÞ&˜ó4Kì±À šDéI"\’!E\cGãb=AbŠ3,–ÙÓßË{}UÞ}“ æ9ÄçN*0ËÛ©g¨ág‚É¥ ]J/»„ž´‰mM‹Óæœ{›¾Ö(hK²"VÙÒú 9yï p°2"F—ÔÃZ]§ÿo¢¸-àú;l1Ï=÷Ÿþô§ …B<ûì³ßð™ñ®è="싊ثôÚÄØfƒˆÐã&´á,w¸Ï:]¢TÈ“¡J™7P{ö…Y GÇ* ƒÅgÄæ2&E“¬K"QRÆ)>ÚÄØeE„Zy™xÇÞ#±xÇ)“×UãËÌqLcbtØg‘Q¤Yc‹ 9^ç1&Ø(ã`rŸ´HêˆÀCŠK·|‚Œ\…fà€ n8Ìå%f²ÓQ¤v¸ÉJ#í½É­äns––$̤$b¯$M:ÄØrרw¹hÝ KU°° ôˆ2G‰–‘ ÄU²z¹ È#ŠR$IK& „ágÄ/ò4‹ìQ!Ç[lpZ[…æ(é°‹c d©2"À'¸Ã†y„Üå,׸„ÅŒ'xU“ú‹Üâ¼Ç~§ÕCÀPÝ¥™ãÞÃèßp…¶ €°Çÿøÿ˜_ûµ_caaŸüÉŸ¤V«ý+×·ÓU%G—Ô¬EÛŠ4FìÉ^;`ŒhšIf˜beŒhaì2;ÄdÄ="@™~&Z´äˆèVôì+Ф™%UÜò9JŠHç_|€2¦jeez¨O8`†IËM’s+Ú&:um†"ÚUÉ ë!IŒŽ˦©«çZ@©±=”jˆ«lq‹ ÔýN[$iÐ'L—¨drÉÌê´œŽÏЈR€"G£¥+ãyWÓê¢tYfOGÒz±©Yj˜Ìè»QæÜ#fRp¯’,²Çó$h²ÊŽPé\Æ2ë¡àƒ¡‚¸ºDYqv”ÍΜH·[¥NFSü\˜RäH§n.¸DÝ.53C˜yʬζ™X>­7Pb/Ux9¤AšCæµÍoH¤èIš,O÷©ØJ†ÚŸ«G¯ù.óVqFÍ q÷kÎ?£ÕÞYuyø&‡"3Ëyç–BMªÛ;²fpIЦB–¾¬2ú„ˆPyø©Þ7¼ÖäÃ~ €?üÃ?äw~çwðûýüôOÿ4ÿøÇ‰Çãïþ®¬bS ‰Èþ±2)˜‚oxþÍ(]=úò ÿ1:Déê?D¤ÙcžC­÷hIQº„ékñ„y˜¢ŽƒE˜¶„…P6¯%BLÐ"KU'8Eéb1eû´‰“¤É ;L±E€¡¯ÞJÝt*æ4ESWzi“¨úQÁd¢t±œ™T»ÃwŒêR4dLÖe‘}ñç+P…Ñ©Ã6T¨@¼×a’TAU2¨›ˆÐÃ0\LË¡@‰U=TQ¤„ IDATØfUÁSœsVI» Ô.p@„>hœæÛÇæjÍ Ösãb²Ì. RÚÓ£-c´±xdGèˆ'7I‹9J:ÒR©ä»2.S¾d—©¢ +d™a“¤É{Œ ?EJ2cº—/Sÿb—ÜsbÃfÐë b~{– -ä³z™,¡º§¨ó€u’´ÞµìêÕ«|ö³Ÿ%ŸÏFI$ßÖz“$}¤ õÞj'"3ƒNXåƒÜC#D”X§DéÉúG±ºn˜²‘%çV° Q¥Ó’õÐ*Kî>¦åhË÷.S*®Z ö|abN–×ûw%‹Pô•86òb§s˜£¤1¡!2OPÞëSÝm³Jœ6É„iÀÖЯØì&0Q¶rÔd÷¬¬TŠV×°Sô1¯V`(ÊÞ–»Æ¶±JcÉ®PˆÓ¬‘§Â}N²Ï’†lyö,n‰‘4š4Œ¤<Ûâ2/|Œ1’b¹Ï’覺Y`ßXÄfªÁ8 3…‹¡'%#TÈräIMNð€楣¶™ãH} Œ‘Ιhqà”I¤ÙvV9gÞÖa5m’ñ³Ç¦ëpÂxÀ?Qº\÷=¢­ƒÇ´׳zþúåü.>7—¿šaþõ|>`#äÒ"¡¨¦‚[Mñ)òžY‘=ºjÒzDpdíãÅþ¾[×SO=Åoÿöo …(‹„Ãáž]©&-ñFªÑ…òë)ü¨Rë[²gqunošº"ÔÁ¬”†سաì©;³TYbOòMÆøˤ¬UMJŠ[9À˜¾d{± ­ÐŒÈXÈ«€½QpŒŽ(V}º[_f—€h_=!žÉLºƒœ>ì½d£ 5²T‰ÉˆL©s ü¢Ì\à€stˆé1Ï[W›¢ti"0cÇÆÌMK4í$!†ôˆ2&À*[kÐ#¢_ûMŒDÈ7,k ÓpèëŽÍŒ uÚÄÈQ!GUç›÷ä™]€="BÜ IS²ªcúïâ!18”XÅ„êëíªIŒÛ Ì q»M–*ÇäõUQ±Bzà%J©ˆH¥uˆ¤f„/X~Å¥s)F–ŠÀbÞ²œx‡—ª‘âÂcUÛLé'O™Ä»x âŸ`ŸñxÌÂÂÂ;H‹ßŽ—ÅLʼnZ)úÂS ^MÒØæ”:)FKö¾!áC„ìp•”70ƒØÌh)lU425 «›I¿¡ ‰–‘`dèJÏ<ò‰PÊ rjRä0£©Æ$Mú†*t=ý m4Äf6eþÇÝ–_ÖÇÕ Ó§o†[Ê'ïù™Pb޶Œ±Š„íV£_ï³Éû‚ÐQE½¢ÁyLå¬Ì,=ú®’²zfS= Dœ.¦ˆ”Ñêò±ëÇ6¦Z— E…œþ~BúÀŒÒ#l 42¶ »ò6qâáwú5Á¦CTüü ù”7`5•n*®†ž¼GÒÔh Í& ÉDs† yò„½cAÞz¢À€°’… íq„Ò«3V¯¨ã°CL¯PÊä°Þ¦ä÷ôð–ï?L_"b}úïýn\?öc?ÆÞÞ³ÙŒÅÅElÛþç9З{OÂh‘6é»^H=ÃéÑ&9§FÇŒ35ÔÍr®w‡Ðt@-žÆ°].NnÑ6ãä‡UÂFŸÔ¤ÉÓ“WhúTÂ9Rí&†7¨G2ìG8džµéž¿ÏpàRå†ép+rkârzï\„ø¤ÃÚænÄ`Ï·Hß q²yŸ¹m¦1›˜Ùãjÿëø1¾èˆYÄâ|ï§«›ÜÍŸb095ºO¸?P¢¤`ŠX¯ÃBï€Rd3æÐEYœìS33ìGYl°ÔÝç‰ÔëÔ£)fC³J"Üáƒ[_"àŒh ÞXy„SÆ}¢£.óã#×Àhºœ?ºC)U¤žO²\á™ÙKؾ)¹Í—ú\yúëSf~e°9{w»>ã‰Ç_çfôNßdi¼G`0áöÂiÇdqx€ás©[iJåÆC›¯¾YTœeY¬¬¬ðK]g¸Ë÷˜Š‘Ó»äevɸur g¹Ë´H0GIg¤hÈnÓGš‘逦­•y­XâYª B­Ø¨KRŠùy‰ô|eêÁþñXííe×í…©„]%þê›ĄRcS`žC™'N[VNjEš¢AdÒ#ì1ÏžüEéÒ!ª"NÝ& Ñ{x‘ÂEޏ0»Å¡³ÀÌo½ ÆäÓzevi§Lž"GMx›?ÝÄ嘂n˜R"n‹ÐcÑÆ$铽ÊH8ìJNìJ×½g,a3•P¥®ÏP#J—x IS€"Åå¨P¢@šº×mêdHÐb@W8ê+ì`Ià}_•šw¨?·Ë2.’4T´62ÔDôXÑhm¼µF”®nX<ÇÑ%ñÜgY[ªq’aãõ«—ä²>´Õ^¼Aˆc¡{zSÎ(]]|yÚ<‡ùÎÿ#ÏŒ·vè¶m³¶¶öˆKß…ëAp·è’(®ª$!·E€ûF‘0Ž$ˆåvò4mâÚÄ?xB¢H D:Á0¥À’wÙö¯pÓž)2T1™r7~JWÞ}ÂlfO’¦Nˆ²I„'L1õØËCžVÉò ²†ƒ)€‹×CêèÀ,5^ ^ÆfB23îÏ ¥ZkqÈåX–‰xM'ø8ʨw¶¹*¼S|úµàcžCÉŸWãCŸ¤Ýu‰RàXå•»S\ ÆØ1–±pbýš$B—–?NÄP¤¿MNŠÀa™=Í8Á¦é¤±¨±ï[äÀXÀ'^b^uvv—•È/„ÞÇ—_Ìsõiån ½ç\aG’ýRødì›uYÊË|SݬDU|ë;ôï\Oå>,ÓŽXÄ'Lßæ˳=lKui«N‘#ÒÓ:g컸RÔ»ÌË:§ìæ91Ýb<óÓ ™wŽh»1f¦M‘#zN”‰å#ì ˆWz侦ãPì–qÂ6ÛϬo’¯TY-n3 H†º**Ý.'Ü-0!A“Ä´ClÖah‰[fŽÉÈ à˜–R‰ª¼J–EwŸ…æKá}Z$Xqv˜™ ›|–;¬w·˜àc ’¥ª™ä –b²Ä.Y§FÝLqŸu êaYáy|x•ß¾£lY3¥©1‘õg÷êÍÒ[Þ¼L±sŽõ¸~…æ(q›s¥ûïÉ!­2ÌMÆ’hf3å w™`s‚XL9bžcò´ˆ“–TL•¼Y¡È¢´HŠ(­ ?ÇmÚRìd©’¦¦yÞúÌÃtßå ~y¦Ÿå®$ÕùIÂ'öÝ #V&»,ؼdgO ¹·WàÆK2OúI =Ѱ™`(á0QòÏX`Ÿ"%–Ü=–Ý]¶$¿âáôÑ·îì}7nNY¢CŒVHM ¾cZÄ1 —:*ä˜ ¹h““ÌsÄ=Nél[@ó\ç˹î³®+>¯bÜd--LS¢ ?5²œàXÍj”(Ò‘¶)QÂ'¸ÉE&Øœaƒ\Ô£¹ 5ä>ëøduÑTá u2<à63ÊòÆLÒb‘}=~àÈ(4F:ÒÑÇ„®ãBè6B”Éc3a‚_¸ëMîp– écjd¸ÃYñuYbk’ám\‰&‹“6|gÄJ’• ô"mIêe““TÉbHJØô{,13,bV›¹è÷uÊä8d“°Ù—ÈÔœ&O™™¨Þ= •·“lbŸEJ̱Í*A†¼É%˜a¨ŒyE\šèô¥#ñ§hÐ#Â6JØqUQ5²´H耋6eÁeS`Ï|‹AÐ%‚+BÄ{œb…6¬S䃖uêv–/½p’þ{#œfƒ~^áªØà&>áдZ(Õ#Âëö£âv~˜ý;ì×Ê•µ+L©a‹€5¢e&$ÅKÙº"NO…<uŠçHRbÀUÖ¥ÙãI;0!é65H(F‡>]Æ€ 1À²g$Ý&C‚ø“W¨†Ò@sààŸYà€Ž#ëVô÷ŒjDw:¦e‚³!ø\ L×}‹ÝÓM±µ½4/n˜œ¡2¢tÈsÌÂð€ÙÄ–!¾M„®†.ÅÜ.~wBBã®|ÌQ¢E‚%J©‘E¾ÂâÎsÈ °“Ñ´椦 eˆâŹ«Ò1uÔÔKHtM³íáV \¹§Â±OÒ#"\e3|»°0A“±Äe{‡±²çE èhÏ¿)ì(]ÖØ¢Aš›\÷L¹Äi¨Ó=îp†ì¶}Œ‰KÇ®š§‰¶Ûî”0=´›]gi)À×9Ëñ+cN>é×"¿‚Ä+›òóx¹ÈŠa¸ZÓðpúä_v‡>ÁÏ{,³«»å1–ØkI2y.J¤åóQd½#+1Çynr† jd˜Flá0+…³GR Ý®„ Xg“ ~­†ÌRÑHUÈé¬õ%öi“ÐÅÞ.jHcû'„4´Í*1Á#z¢˜0}N³!j~ ¸Ì›:Bñ˜9Ê„è Š2ƒc%Ù+I“6qnr—9J2* ©ì€Žä7WÈRäP¥)u›”ó9ŠÖ!§Ø`&â»"Gd¨Q—Ä5%F;1`Ž2y>À4dÆÀe6³ñÛŠ÷¾Àc|0OŒëî}ÊF^ã5OqO“ÕÆø9ËHÜcI+ÈÃÂâÓ—nC¥f…pž[Äi³Ë2C¬±¥óê»VT$&¬³IVöb{,½ÍûjrÈ<j<ÅKÿO{omW]ßý¿öpæsÏpï=çÎs曄ÌHŸßSŠˆ>m«V]u¨K…â€%®R´Ê²h—Ë§Šø£”A„›ùæÎã¹Ã™çsöÞÏßïÞʲ­…\úÔ–½V+¬äîœ}öwú|Þï×[Úð:™¡ƒfXͰ˜ÂU‹uœ¦Ó¨*ë8ýlˆm;sô+‹,©1–h"@‘~F‰æ k1Ðé`ƬÖËÞ9› E8¯Ð_ÞuJ_GYi&èÏ3¡õˆÃ€ÖãØÆ|ž tѤ-1̇¦aˆÀ%%.—E‡aeY}ÂÉ|PÀP4‰áSФc!Ò.‘«žP[8íYØÒÇ,mô¸æXhjbAn,3Juf”‚–ð°,…ºWÃgUP0©).LMu6¸M,9%ìùnÚ§LawU޲ö¦‰Hžø}7“,Ó$-cóÌÒNJâbmò›W²õEXŽÈ†ØØ[¯S'ÎYB´3+ÛaaÄ%5Á /×ZÈI]A]&(Úè_I[”épŒ::^ÊÌÓ†îH«xë_Åív*·Š ê °£ë4gôÎ páÎI,é÷¶ã¶½Ž¨¶â´»”)!ê|Ù-·ê`Îø¼ ¿ÁxŒ,)ãÅOVæ0 %ÍGMZÖp–ˬކ©+Ž"K˜~ thb™¤‰%„&‰nz'D5Zë Úó¼$‰h.0Ø?´Š;½R$d&M‘†´Ýµ3ã(ô›Y¢¿þ<ð^Æ›ÿZ:Ë+>¡[KÐ)é>\Šà“GeÆv–|Õq´X Ì)írÑ\fŒ^šXÆGI|×V·R£ƒÀde©('f×G‘VšŠ©¨T¤Õi•5B^õ3K+ň£öËÜn;ÆK™V¤­)-B·!&û²ê¥Ž&,oø¥²ZÀfÄ Õ‡‚‰bZd9˜j;hJÅÀã+“ôFœˆÓÀ"M”5Ç”"Z{¢rGÁrlfvÌl MÒó$ïøø3„eÒd?%–¥Â\Û ”(“’`;FÅd–vétÇ%š)É –ØPåH²‰ nò4 `’ ÕÛÈyÖ$JŠEšÉɶ¢Em'oÚÕ¨<äñ3O­ÌSÂG‚8*@ã•©hYhq*®n*4’’1ÎUçÔ?N¯tY‰¤º9ÚˆfÆê ¤øœXW»—¯bi«ã5Ë<öôf|;‚ xź‘ ÅiKˆ¬DÞÆd ÜË]Ðë+zBUÂYÖæÏá1*åÆè'f-±-qUú§ÛšdGù“t;©JWV~æøÝT¹’Gif‰1úpS¥³8ãÜ*xØnqÙÒÓääîTÅ`“$ha‘ dÙ là$ŒS´ÉÌäQz'@ž¤LRê-OrañuYBî°fص8$|’7»'ÿŒÄ' ù•Ù'¸ØxƱ¦u"Bgfèà[1«Ûj/0B¿ˆyý“ËNœâóìd8›9ƆÜiZ™§›I:GgÙ=ù¼ƒW\Í9.ãç(PÁ‹e*lN¾ˆg®Æ)Ö“#ÈçÈæ8¸³>ÃÍø)²Å<ÊÕæƒŒÑÇ tW¦¹$ó,¡jžvC,ÀûÙËak—eÁšê9\ÔXÍ0¯Ï?ÁÅ…geUÄK«‘àÂÒó”ðó,»Y¦‰‹øÝLc‘f¹²þ8qc zÈäbžáëiFà$ƒ¸©ÒÃ8 Ä…ÀȨrå¹§èÊO³Ã¢`9Ì6¦éàJe3Ç„}‘{+OKQ?K4&ÍNž',C"¹4¡qqzkf™€UäºæŸìÕ¹÷àL›\ÀQÖšg¥ÝDT”uò¢{ê“lX~™,w§‡þïýzíú×® ±´YšŒÓ à±Û¹Zc‰6mŽ#l%ƒˆQ°(á%C„:ÈùD>Ï)Ö“!BV ‘o rˆ+˜äHp3gXG /YÂòœVÖ1 âòT—þñw?5Ec’RD™¥ wk•MÅŒÒÏ ¤‰PÁÍ~ö -r€KIJ¥Ž¥©œaìÝÅYÃY†ØNž †2]þ)–ÂMLÓ‰›QÒLÑåôýÝTÈë޳‘Ãlã¤zœFDÿñ k){<´yfè.Mó´ç"^d“èi)ž ï ¨øIeœŠAÑ <ÂVÁÐæ}-åޱžá"4 æi¥¨8ÊLÒÅI6°D3-ŠÈÌÓÊ~öÒÇÓt2M'i-¦¾Œ»zÈ(a›5š‰i‹ ±ƒ™ Ÿ'À´§SB†¥ú¸‰Ÿãæƒô3JK$AÓ†$'dŽ6Ž*PTü´ÄsÄ”ûеë4Õä\LœR4’ E–Þ5ʺ—B|ŒÍ‹¯dA­äþr¯1¥ Í4ªI‰;˜ ‡+N¯{’iÚɨ"xÖh㸶Qœä¡¯È§—PåéµY–ÔfǦh&¼dÔ0ýú8‹’´ )u¦›[™SÚdZ›—… (·çhp”ßUÅŬÒ.ÑÓNzÖÓB‚ z¨àÆ¥ÔY¢ÙYTíœô‚ÌëŠ{œ°‹)º˜¦%ÚôºV—ý_a³«à&GHä(âDk‡6Õ$èÄnÚ‹|Ѝ« _¾Wö¼=õ*q}ž¬lµPS]²g‘‹d@”íÝNÒ(-z†Œ_U wÜ3ó´Ê š,2ÎßÉAšµ%êh2ÛÛ IDATG„-5’$BÚAÃ.£Š›V$i$Hžifiw²ÐËò3š¨4uBMBd(ã]‚´1G\[âÖ4n‰øÎ#ÈkÂC.ж6u/Æ"M,3C‡@ðJu½ Ç*$D†’„ÓèÔ¯/ã 8‚jKÒK2(JÇ`N¶C»™$BšÎ1N/%|DepM’F:™’¶B“.uжn„+ȉçèÙ”¹!4)Œ6%~·™%"’¨÷ßJWÂO;iÉà^%a¿ôu2õ×ÎïA3 DÎɾµÅ‹4£"Q¨™%Yfw1K»C3å.o / °„$h¡“긜ݤ<Š2ãô²šai›ˆ9å/eR© àPålõj“„õ›¨ÌÓÆzN;‚[(f#k¸ $CÄXtègs„d   ¢ÍÑJ ?a2x¤:ÝV›.ÑD¹ê¥ û©h¢”–½û*nÖs :'dÊê¦C™qÈT" Â DŽFR¢ëäv5Ó¸Õª#–KÌgEí‚8ÎFY^ó°šsÎNÙV»(cÑù½ÐX Ð>IÛŸ[§N¿ãob™y¥SQ¯Mv¬Å_É]J4hQžã¿‘¤SÂLÔ㲌Vrè¤i7æ)6ûRÙ —‹öNËÉ/$'êÌâ¦âð^;¡¿úW:&~«èˆØì2n<Š%D£V’³Êèb¢²rd!æ²OKÄIÌJQÒ5SÌ«­ø(bh*,;}n%Ü2iÌ´T°{Ü'¯AòŽÞÇDÁE”6sŽ€RÀ¥ˆÒüÍŽ=T ¨'ÆÔC]©Òʼ3>ˆfš܊ЂˆOÓ®ÙXhC–§Å³íB;ó!JJ–§ë^lr¦ˆŠ—²t¨NIZô s":Kˆ$ÐŒ`›k4±,õsT%ε.•øÒ(à`§m ݃OIû™Â΢`èQ&œƒ›&Õ趈ÍGIfŽ›š[´ÊŽíµ s"Z[ôü#d:a-ª¬bˆC„F;3Î\'!ðÓV… Dä3nb™(i‡ùa‡ë4µ•X¶š˜øE‰¾‹Ë¸©’sª—Štd$‰¼ì9ã·À¶f¡0E7gYK–{8 åÝŽ¼çõŽ·üBžc?—²,3Æ7rœ$Q°GDkæÇh Ç}ÔdXI9~Îå4³ˆŠI/gCª mqVŠ(gXËÍNÔâ,ía)¢\Æ“\ÀQö³—yZ‰³Àöó .&‹P¸®ç4Oq)s´‘¤‘+yŒi:y«if‰ yŽ2^Žr^ÊÌÐ…"J†ÄiežõœÂc‰/o”~,¹ùƒ\åëQ1ÙÅAªäx– ‰È ’>Æx–Ýd ÑéŸgsöE*i¯§Š‡í 1J??à¼Tèeœˆ’â¨âf3ÇP`˜5Œ!Lvó,j 7勒¨ø¤ð£œÀV*Y‚䉕–i .0O+$)Jž±xžËN)ÙCù%ßOÓÉM³BÔL‘QC”$©.Î9H&@ž+G\Y #E. äèdŠ1úP€‹x);å®F’Äåg®à‘1‘‹Îwi—ÚlZ–Ož • º«FЗžÕŒ lI"U‘€´ xÆ-„Èà¦B7“LÒE˜,}æÑrŠ0iò/j‘È $L–ÞægúH?[`ó®%ÚÔ92„tfÄJ¿vBÿOºª¸ S å¢(»ÅTÇÅ¢c0{ŠåP?9%D–22L¤U•YÂÇ0«1Å©¥ˆÊI^ÅP„赓i¼FC$×pVê3‚bœ*)²QM,ãÅ@eª¸9«¬!Æ pHÙÁ#œfSÍÓeÅpŠNÊøœJS %Gô– PG“1A—›RºˆêI ¢‘' 7:ŒÑ‡ª˜, ,¤‚¬Xfœ^'°…~Š$‰2Â*Ê2f©›IgÎIH—XÔ‚Riãuð¨^JLÓEóV+q%áTìƒÂ-Ź"X«9f芖Œ#&œ¡* ²õ—Gd+(0€ƒëŒfi“ õZXÀ/R‹i:IXqÚ”yç_þÚ8}tÉÔGÕñç‹ N‰&’œcUÜÎÁ2L(à—±hOÒÍfŽ ÐYJ²]º@œ>F‰v¥8SkeèP/ÛE¤l³è¸©0-«(/_÷_xAŸUÚÑñ8‘~ Zð¨e©ÔeDdùŠ,^·#@CîJO²ÁÙ6’¤è÷3M'5t´`ɘ(Ñü2úS“»Bчït’½Æ9Æf ’þ´–ÓÌÐÉ16£`ÑÆ0Äv,‰¾q3.yÊ]L±žSTu$2„FØÝF™“xÚQúhgŽ1úN©#@ƒ;É“û{éÝ+Ji^v|ê¤äþßó*•J<ðÀ”J%®½öZt]ç¾ûµ•7¼á ¨ªÊ¹sçøÙÏ~ÆÞ½{Y¿~ýKþ~;³¨2 M˜¸t4’DµL…<-MóDÈ0FR²‚$Fàpì¾zŒ%IôHq]A¨¯YÀ_.a6¨ÄXÀC…fhfI¼›µ:–ª¢b8­bÓ"K”­Ö<ËJ“h12ãÄ< ︆2K4c‘‚ÏnX:2ÄYpÊͺ¬5VS4éÉ—ðÙ ™4¶Ö8KÆ áu•œñU–ï|€\°„M­œ<¥‚¯¬ZˆÀUÆ}Š8j7Z(Èc‹—4QBä(ãs2.*²Ì.<êͲ/m9v>[nW0íèk‘ÉQ!6Ê"ˆssr#fâ•UJ hf ¿ŒGö~éT9‡W¶2mx˜§moÔ…KÈd½œk 4ޱÙi¿fÌ0¦ª9ŸÅDsôvÔ³>'Ht>™SQÃOQnâŠt)S¸©RïÑÉ«¦j¸.\1™è÷ÿjAÿWÁ2û÷ïç›ßü&¿ó;¿C<ç…^àë_ÿ:»wïæÖ[o%›ÍòÅ/~‘b±ˆ¢(ÜyçXÖ/oÜ^›@E0ÛEäðBFHgAæX ¿K2º™p(pnªD%]LÐ…Ô!,b­ÌÑËë8M”]L«Ïµ’LÓÉ}äh …=LHµxEJ8TÇþbgœdÿÛ”*ÑFèg”ò ÷~ùØd²fEŸºVqÊ=a2ÎN²ŽN—ôX IŽ.¦0M8 R4²Lùâ¶ C™¦16qœUœs@öî߆iø¾ZŽh9M —„jˆ>{ž ó9¢¤_¼_¬Eâ”$üb9L0+vóvŸ(GÌg 9üÑ©3Àµ1z” ] …— Zœüà G1!å$*yäwÚÉ4~ X(rP×¥PÒ,:Íi|f‘vf0Í"~ü5ñ|ì^º=ÉÚÿµß­°tV4’"L†Væ (yÙKIH# ’¶·ANÐÄ2 ‚Ëßh²ôtO%OLYx…%÷ï×ÃþwµÊG>òZ[[¹ä’KøÈG>B?'Ožäûßÿ>Ùl–›o¾™={öð¹Ï}ŽÙÙÙ_ë¡É£š&Í2âNT|ª²¼-¾c/eÉE`¢yBÅœCxl!! ®Y‚–Ð)8牢AØJS­¹qÕKø)$GO~ŠfcYœò*îr•6æK5Ýjk­'(^–ŒmÆíµ9YêÕ(ÔÆ‚¬'Ôhb™1Ž”šPu×2Ž€­I¶Cþ e¯Wž~sô3êhoj–ˆídZ.z¦–)i~™—P—ÊsKBW*xF¯• K›™à+Ž^Hü¡¬ïeÜ™ã\²”b9M&ØÕic–NYÑ´™îvìª8ʈEÊU+á’¥ì_"•! ê>Ê´2G˜, äœï£…y¹Näi¶–Ð0é`Møö™¥™EšY’ê‰M,Ój&ð×2rºÛšÀ'7z-ÌÓiMËfE Ÿ´š •|šFˆ“ ÉZ¦•yÚ˜u°Ú&ŠcÝ ‘Å-«›âcìZu–™ƒ*FM€u^YÉýßúU;ÿúøC"‘ßüæ7¹øâ‹9}ú4×^{-›6m¢££ƒ‰‰ 8À~ð Ãàío;µZ ·[œ¾ŸÝoгZìJOô€3DˆJqVŠ(]L³L#YÂÌÑŽ)®:ºäu/ÑΜ° ¸ý²0M„3¬•jN‘j”}þÊÖÍD¼ #½«‹Yès&;Î-ûê)"2©KPlᕽ}[ae+HdìÖ²@Œôþ£Ä®d™&I­ÏÒ ûÂü¬å,³´“¤‰1ziõ,PÄOœ&šãaÕ¨S$€Oö¤Ó±jH[ࢊâ5yôY/ßi£™%æiÁG‘Nf(âg’nür@†È²@\îžëlå°ð|³Š£ÖfB¦Ð9Tð0À.ªÌÒ(4g‚^fèBýGi¿b y‚LÓIë8íÄ-–ñR €F1úi$I+ó$‰J¿¦ŠŽA˜4I™»,BmBTñ0êîcYiâ,k¸€£ø(“¥“ûS(W\*3“µË¶'•¤ðÈBa™f²„i!AÎÓÀ(}”ñÉRb?%6YÇ9¬luúš6AJä?«„£ük žýÊ<ý—Åé]q•»ØøZ–Åðð0Ùl–M›6áñx~kô‘‘&&&xöÙgÑuë®»Žz½ÎE]DGG_úÒ—ˆÅb\zé¥lذË.»Œ¡¡!ÚÛÛEëë"h% ™YJª6fIÒˆN|Š8eÚVO•K¤ˆôç¤åLd€—L?%ÕãèO,9»­*QR¸­I%ÊèþY¶]!6í£@Þ Ôò4T ŒùrÚNC¬£a¡â©V©é.jŠ›u’’îu àYBødIY„‰¸N‘iÄ2R4’Ú‚ÝW”h¶–鳯˜P{ÐMƒ€QÄòXÎbŸ&̼ÕFOe’ªé¢®k”¢,{ _¾_Þ/M„ aV3L±‡™4n*ÝŸf×~â,8!)‰Õ¶ãXÝòݵ­½ Ìà§@œE*Q_~Ƥõ.OŠŒPÃEZ:RDñQäÔþE6^ptO™En3(Ð"7ne©hcž">"2€+¨¤¨×¢Ž‹‚ ú)ÐÉŒã9÷S¤Q]F{â z¯èeFi§¬ˆvA–ê(ºãغ ƒ^Æuãì°± ÄY$F’(u\bÞâˆà,7ÜÔ(y|¸Zjd,ŸÜS!´Á»Â*÷_™9,‹S§NQ©TtÖÛ߸ '“I6oÞÌÕW_ÍG?úQÚÚÚØ¶m›ø ºN½^Ç0 4MCUUjµÚKNèKÏŒÐÖ\¥o`‘ø`3EËO“•dr†œÕ@^ ÷õÖ)TÅä0[)#ì öb_ À†ÙÀI, häèbš+x‚$bA±Üt*Ó„Èâ- ÓjVé$‰%6¬ Ýœ¥®êlà$iIEÒ©ËdžuΠˆvrˆ± OszÝ9«~e”"~ÆèÃ@#ÆV~†-ÔˆY‹,+ì6âµJìW÷²@œ Ês,ÓH‚VRV”uKÃ\|PpQ%IÙEÀ*²F9+°‡u7%ÕÇzõ*³t8^X“ÆbŠéL=ÆÔ’ŠØèØJö~FdÃ2Y­ sŽÙƒ/òÿY0F:†8íøXoœbP=A‡2C‚L­2f’Œ&ð‹Âèù3´1‹*OÆ;¬C¬2G8ªm&Aœ=2-@žnj¸ØÎ3[p9?gžV¦è’jùiÈQG#¡µ°Çzš•¥K™¢×œ`^iáûùò$a ‰j¸XËɯw±@Eb,á5Ë„ Yþ·çN*˜W[P€+K?£±"Ú¼ì@(ÈÑb%˜Rºˆ˜i.P‘™žäþéÿÿ×£ìºæÕ±­íß¿Ÿ‡zˆþþ~yän¾ùæßÚ½\.“N§ù“?ùüqî½÷^\.Š¢8óE©TÂçb7ŸÏG©TzÉÏ8ð/NùU¶®í&ºV(µÁ+W\(º"ÅQ*xeŠ˜I†"Éa ã§à`9]œa­£Æ¶M©tøæ©äëŒ0 bAÝSœSV‘"B›¾ÈœÒæä‡«˜Žè4)K$‰rDÝ‚F“ :¯">Ú™£ ºŒž Í-Sù(Çóh¦]MàµJœd½P`c‘¢Q@WÜ&ŒH-’H{Œ³@^&9ñ“&Œ"µÓtJv¹ˆŽž —‘üz帩ãrÜ:â`B„.¬ç k)Ja¢meEf¾×ÑP€i:¥›Fg’©7¨ L/ð"›P`1):ÉÑ€‹šm²s;„“ÉÇ Tq3ÂEüT¥RÊOÉ!úÙ9çuªxduR¼9ÖB-wK¶SDñS”vY‘àg3=Z˜. bÉ%McJŸÄኬά“£³¬U™0ç£DfêɱiÆ_Â_®´mMˆszè!ùãQº¢SQžÇk•)• L'kè‘_pÒ«RW5<Å:¯ M1¨)Ï“©)”UÍEQ0 £ZaÌdŽ2^£Œ¿\¡äs£U-t·O¾ºEmÔ$}Ü"_20t'òeð@Ùó/( œÔ¡¤ûÐ-ƒH¡Î×r.<¡§¨øÜäÜ"ƯÕx}©ŒÞì-ÀR¦„êª3íÒQL‹ªêA¯”)ü”/ÇFr,Ž¥9øœJ¡uÓ­â2kŒÉ¼®ê¸ª5t 꺊¡h¨×ñ–+WG9À¢"üÆþZ‰¼fð‚Q¡hœAs ¦uMõ‘Sr$ë:Ï[ÂjP¨ú^Àq£Õê<¹XÂpkŸBÓ긪uêºÎl±BM÷©Wɨ ÕLz–¼nªª¾Ìý7©\ÅÏûçþgþâ/þ‚žžÞÿþ÷“J¥ˆF£¿• zKK ½½½„Ãaš››I$d³YŠÅ"“““´µµ±nÝ:žxâ êõ:'Ožäúë¯ÿå$¤ëT'²Ìx|”FsTN“dTVÚ¦0,T5AÊ“r (KL“a‹„T¾[¨„IƒT*·2/ó ë,Q”Œp:5ŠÕE&FêŒú¤zš)ÒD™O–ȇŽPÑ=NË,!{£YÆdäqQö «$¥êÛEMV÷ò2½kDêi¼ø9iÌ‘ÐHœJslT••1/.Rt—§0QFHŠÅò©ábÉJs†4ue‰"sL’áE4‚ä(2‡êÀ¬Ò,S`\Šèjò2åS<9ê–)Œnòd°€9æÈÉ ›IÙÆJ’¢*ixSÒG?¢Ô‹ƒò¹x°˜eŒs,HÏvJ2äó¢ªqjšÄ(È£QÄGiG\gŸ” N‹Ã ³ÌJìk7ª2ÄU”Æ—¥ÃÀC/%ªÈeJžû8%ò§||˜žžúûûWäùÞzë­Üpà ¬^½š÷¿ÿýüÝßýݯí¶ÿ'\+=fþ­ï·X,²k×.\.Éd’cÇŽ½êcwrr’öövÖ­[‡eY¼øâ‹är¹WmìZ–ÅéÓ§™™™!³yóæwì¶µµ±fÍš{Ö…BC‡qÙe—Q¯×9|ø0Š¢°mÛ64M[Ñqdš&CCC$“IEáòË/GQ”_»étš#GެèØ]XXàøñãÄb16mÚÄÌÌ gΜaãÆÄãq,ËâØ±cäóy¶oßþØù\ï}ï{¹é¦›ƒ|ìcã®»îúµŸ­}ò“ŸüäJÜÌ4MöíÛG­Vã±Ç#ÐÝݽâôÉ'ŸäÁdaa /¼Çœ|EQx衇¸ôÒK¹ýöÛ±,‹'žx]×AûJ¯“'O2<ô!:::øÎw¾ÃêÕ«ijj:ïçÛÚÚÊ—¾ô%öïßÏ®]»Øµk×ÿ¸ÅüôéÓüýßÿ=---ÜsÏ=\}õÕ+~\.Ç÷¿ÿ}¾óïpÕUW¡( 7ß|óKÆîÔÔwß}÷Š]˲¸ÿþû üà?  ròäI}ôQLÓä‘Gá’K.áÓŸþ4º®óè£âóùÎ{¾4M“£GðƒüŸÏÇÁƒ"NóÜsϱsçNnºé&ššš¸ÿþûimm¥µµuEžõÝwß;}ûx×»ÞÅ×¾ö5ÆÇÇgxx˜M›6ñ|€îîn¾ýío³víZ_ñ½ªÕ*·Þz+kÖ¬!ÐÕÕÅ7¾ñ ÆÆÆsÆî7ÞHgg'÷Þ{Ýééi>ûÙÏÒÛÛK¹\&ð©O}Šžžî¾ûn.¿üržzê)~ò“ŸP¯×ùÙÏ~Æ%—\r^ó”}µ´´p×]w±ÿ~^ÿú×ÿ«‡æË Ξ=Ë-·ÜÂôô4Ÿÿüç ËJ^¿û»¿‹ÏçãøñãX–Å£>ÊÛßþvÖ¬YÃ[Þò™ŸŸçæ›offf†»îº‹Ë/¿ü¼î¹e˶lÙBµZå;ßù333¸\.®»î:¼^/=ô¹\Žë¯¿ž½{÷rðàAFGGÏ{÷{ùå—“L&9sæ Õj•ðîw¿›Þò–·H$X^^æãÿ8cccÜsÏ=ìÝ»÷¼ŸñÉ“'I¥R¬_¿Ã08pàûØÇhnnæÿøyÓ›ÞÀu×]GOO?ü0[·n=¯{ªªÊââ"ÇgÕªU9r„Í›7sÍ5×099ÉÁƒyà{Ôûßÿ~’Éäy ÐL&ÃÃ?Ì5×\Ãôô4^x!‡æoþæop»Ý¼ë]ïbÇŽ466òæ7¿™@ Àc=ÆêÕ«Ïûoذ/~ñ‹†±b;øß¶ë‘GáÍo~3W\qO>ù$SSStuu­è=Âá0úЇ8wî333¸Ýn®»î:<?ü0™L†n¸={öpðàAÆÆÆÎë;V…w¼ã¤ÓiÎ;ÇñãÇyÏ{Þó’±›L&ù½ßû=.¼ðB¾úÕ¯²gÏžóú¬š¦qÅW°¼¼Ì¡C‡(—ËÎØmjjâmo{o|ãQ…믿žîîn~øa¶lÙrÞÏùàÁƒx½^:;;©×ë:tˆ;î¸˲øð‡?ÌîÝ»‰F£\{íµx½^{ì1V­Zu^ÏØ²,Ž?Ζ-[0 ƒÃ‡sûí·£ë:ïyÏ{رcMMM\{íµø|¾»÷Ýw±XŒááaöîÝË¡C‡Ø±c×\s ###>|˜ûî»Ûn»h4ÊûÞ÷>ÒéôŠ´Ó¶oßÎÆ±,ëßtŨ+5p Ã@UUE!’J¥þS&…b±H l n·›\.‡¦i¸\®UM{>¥»»ï¾›7½éM‹EÂá°ìoDI§Ód2Âá0Š¢àóù(‹ç}ÏJ¥Âý÷ßÏ‘#Ghnn¦T*á÷û_òYu]G×uü~ÿŠÜ³\.ó­o}‹?øƒ?p ö¢£ª*º®“Édœß …ÂyßwëÖ­ÜqÇìÙ³‡|à¤R)"ÁEnhh —ËQ.—ñz½¸\B¬V©œÄ¥V«qæÌ6lØ@8æóŸÿ<¦iâñxÐ4 Ó4) Îû‰DH§Ó+öîºÝn|>ߊìÞ¯_õ„B!²Ùì«~Ïl6ûïŽ]¯×»"ãàìÙ³<öØc\}õÕÎiî_»+5_Ø«ûî»S§N‡©×ëÎXÕ4l6ë¼sÁ`pEÆn6›åG?úo}ë[9DQ\.—#–N§Ó444¼d<ŸÏ¥ë:ŸúÔ§ø³?û3ž|òIzè!gì꺎aäóyg¾ŒD"d2ç¯íš%•Jqíµ×rÇw022â,ÖÁ`|>ïÌS¶­¬V[¹Heǃ×ëý7ç }%''{¡¯¯ïUœ¶Â~~~ž––jµÍÍÍÔj5ŠÅ¢óÿW¢ð•¯|]×ùÃ?üCH$X–Åèè(½½½är9ÆÇÇÙ¸q£ã8ßËçóñÎw¾“Ý»wóío›ÆÆFˆÅbÔj5âñ8år™R©ÄÜÜÜŠ”Î2™ ãããÜu×]œ:uŠo}ë[øý~R©˲hkk#•Ja333ç]n·ORáp˜îîn*• ìß¿ßD¯{ÝëˆÇãÌÏÏã÷û©×ëÎñJ/¯×Ëàà 6l ££ƒGy·ÛM6›u6„ñxÜù®ÇÆÆV¬¥ñÚ%Ät333ÎÉy%Þ£ßtÙï=v{zzÈf³Œ388xÞUûáÎ;ïäæ›o¦©©É»öü‹Å(—Ë”Ëå»öÆè=ïyÛ·o硇rÆ®ÛívÆn2™Ä0 ¦§§Wä™' fffØ·o§OŸæþûïGQ …¦iâr¹èêêr`BSSStvvžwEÏ^cvïÞÍÜÜ.—‹L&ãpZZZV|ìöõõ9­ÍÖÖVB¡€ÐwmݺÕyÇì¶½‘ûϸVLgYßûÞ÷xê©§( |æ3ŸyUzè?ü0ÿðÿ@2™ä/ÿò/Ù²e ûöíC×uÞð†7pýõ×sï½÷òôÓOS©T¸ùæ›8ï{~ðƒäꫯvv†_øÂ˜žž¦T*ñ…/||>Ï'>ñ \.}}}üÕ_ýÕy÷w?ùÉOR*•X^^æÝï~7@Àq\uÕU\{íµ|ãßààÁƒT*n¹å–óÞHY–å¨'o¸á~øÃrôèQî¹çÞúÖ·rå•Wr÷ÝwsúôijµÿøÇ_ y%׃>ÈO<áIþèþˆÛn»r¹ŒËåâöÛog||œÏ}îsx<öîÝËïÿþïŸ÷g½÷Þ{9pà•J…÷½ï}d2¾ûÝïbïxÇ;ؽ{7ûöícvvÃ0øÔ§>µ"þk,..òñ]×éïïçƒüàŠß£\.ó±}ŒGy„‹.ºˆ;3¯|å+LOOS.—¹ë®»^•±ko@ûûûyýë_O{{;wÞyç«:vK¥·ß~;•J…ÅÅE>ò‘ËåøêW¿úªŽ]Ó4Sèõ×_Ï~ô#8Àw¿û],ËâOÿôO¹øâ‹qT¯×¹í¶ÛÎkår9>ó™Ï`KKKìÛ·ãÇó½ï}Ã0xç;ßÉ®]»Ø·osss+6v‰·Þz+@€@ ÀM7ÝÄm·ÝF­VÃçóñéOš‘‘î¸ã<W\q7ÜpÃÚ˜ú¿$Íè²ÐµgIEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_som.pdf000066400000000000000000001775571202542755000201310ustar00rootroot00000000000000%PDF-1.4 %µí®û 3 0 obj << /Length 4 0 R /Filter /FlateDecode >> stream xœ…}ËŽí:ÞÜOQ/ÐÕÖÍ–ž @€¹ 22Vòj7ÒÝòúÑw¡äUUÿ v‘Ë–)Š¢(ФþùHøï_þçÇ?þ·óãþë‘Úgoù#•Ïó¾>Ú9>Óü·”ñYëøø—ÿññ·ã?|ü3»óýQZù¼çã-ÿPjÂÿù㟎þøÇÿßþÏÿùÿòO¯ýøÇÿÝ>þõõOñ‰óãüh¥~ö\Zm\ýóºÆÈÙÍóxèüøÿf½ôÙ>þïÄþÛùÿÿ:þËý8?Ïÿ~Ìïþ»\?K ’ÿxüúøO‡¥åÏ–Ûz ÔNOèk“ ¹}¦<>úg*COÎÞ šŸWþ¸?{éý®Èåúx{®Ïk>xL(ûc²¨~øïÙN¹õ ÀòYÔÞÊŸu6âÓl¾Î.ñ ¢ãü C$ x¼ëúíúÌgñKÇ„ÚÙW“ìéŠÏ]ŸãAˆ€E¤@Òø-uÍ-®nësf‰1³ž|Do¢ë3â Ï^}÷g¹Ûlr¤Œ/̶ÀTÚle¶7ùp}žirVÀ"Zà‚«ÆkILQ“é3]™´è{çgé#(™ÒtæÍZ/p=Õ¿MVî·Žœ?û=V›,W‰ïåÙd J,*ª‡_SïÜäê¹¾g®ˆóëÉËל1k®Ìžhüc*,Äž ÚÓaa~›é¼çì\—Ò$yÜׂûç‹ ž} Áõ<ÚdÌeÄH}ŠÖüî‰IsNÖˆ‹c{AX×)¶™Ð5ùv`´ôð}ßóÇ”N''Miöó¯Oy…çÀ'ˉ8€¸®>‡ä¾­LèœS1 Ây-xŽÚ(zsŽrâÃvÎ9CNöíÅÏÖ ©s¾€¤ùì9…²“Þ6ª!u.O ø¹SéN¨Bõ‚æ–ùpÿ¤„–)2ލbfO(O Ká³B¤©ù=¯ý–ÕòI…PüÒ©,F#c0Z gJC"˜PSÄ¡–Ѓۀžë?‚ý=¡Ý¾$®‰’+¾ÌW'³j"p€ ØÌ6xתfgö“hsN£ã=?XÉú fN‹Ô‚RìÕäõ$2~X §ø~M>M ™ÑåÊY Ö1é蔦A}Êæóš_oSp@o_)ˆÇ4ê1óëìúÊF-N‘;³á¯ß”÷/>ÏEæþ|)V£ûù>Òœ¤ƒ¿Éñ7p·^-4‚@Li½Ýü ¸¾ñøßæóhùZk*à’Nc’Ýš×@° bœg/-?O/Lþ;«A­gñš–ºhôˆ…0¾©e2èÑ ÔÆòšÆ§ËípŒ+–åsÎJÌ•Xa'|kEŸÐAÕkH¯…™à7½ÌºÝÍ}5˜$’Žàà“¿¯/•—Ï€ù!Ú4˜Çœés ú^uNLÛKÒ„í.¸†ÖZføðJçW½ºáµBú»Z?ƒ&-­Añ /hLµ?OjF[¯NQ½¨aÀз1>sA$´…D°úã7ÕÕhVŒ8^ë«bTP$&¾³øm η~ÚÖh ö¨Q‹40¿Ú¤wá"4Õë´‘ñð\ÙúmøkÁ“BÎo<wL©Æ<å嚊Ð/Üm©¯|OÚÚøïLê° >1G$Ç@áw8^øÛ´Üæß£m°cÙ|Ò° ‡ÜçškÁ7pÙ@\Õv€žmGiaGä>——+ì@¦±,€°gÎȽÎ%<ìˆÜÛ\9ºí@=?ì Mv k¾*;" XÚ–¡7SlùlËàwÓ°!𠥦;û²$ØÝ+…%°õË– vaI`z®6%ÕbKÀ™–D Â’àÞaIºKXøNJK‚ãÕÃ’àøô0؃³-SðèëÇ9U9›aI"›dH€/xS– fCBof ¢/ÉŽp‹6#âk2#Lˆì„ r™dtß?Où»³Ì¥µ0#žµØŒ §r±Ó ìˆ÷iñfHÌÁœµc+’…ØŠ$P[‘,ÌoФ´i õmHàášöÒ°—òÒæzs•ïà±oX8¡®’A…M‘k?;µpR¾fÓ'gp™8Õ+ÀqPåJœ£s4ZáÃSÊÄÁ¹!Ô9XFAµ4~ôÀÃÚRMU» ÎàœîÔÎëãõ€Ç¥_çbpÌía×Àš{Õ ¢\Ôª%“þQ“;“ºõí¬4°ð#zÞ¸JU,¯´Í:gp©À7¹Ô©¦¦¾ /:I‚a¸éñز© »­}§á'P;å•dL ’5Å€$¶d9´¥Î]=÷¯™3{ŒÔ­ 4”¡gç4£±9&›•ÐØº4½œÊ6OBÕ» Øsª¶ÛŸ¿f²;SŒç¬i(ì ‹VÃ-^©ŠE/D+¤¥Ð¼µ\œÉ²©†:Ns2ÓVzŸXÆá‹ªe™ªsü±² Ýzg_±F¶e¢•ëšC @ÊdÚv„p1Óø¢LÆhuy⣲7MlQÓ†j¹ÕNü8È{‚ös¬vË='uºã«Êá”2°ˆ(_P¼¦^F£›úf0HôóŒå¬%<–n›»ý%€øÊR>m—žD³ìÙ°Nu ‹. M¼`YƒñªLÅhøCÒŸ••i‚d€.NË:Å(Ào?^ÔtG¼8‡mö–k**X¢•6WÛ+è1Ôpgüª;ªvüU3ɉÇs߬ÓZ;­ðµ¨,Ä^Tµ•…ùmQ©u.­wY‹ F'b•Ø«H­9|OðØo© ßMý¨5_’Q¥5¥ÖÉ.èM­)µ=ÁšRëE—Y¬)€åZÐ=Š×@PîkM©›Éê5T•Ö” iMÙ0Ö¾9瀴,éÕ¢xòÕ‹ ).ZFØ™óŠ5 ÔáágϵúLÁ Çó½Ö0©s#s“KкÃk ø;¸–ñ¢ðá~[ŒØPÉZQøºò¼¢ˆË Šè ‰WRHº Å¿Nž¤ìPki-(*¬'¦Vözד b9¡œâ#ZOÁ]ë ›Í^NðMø µœª»ÂêŽÍÏåêå$¨-KP`ÉÆrÂ!»š×@ -'ÇûTÀÄ« ®–.ßÊœ­ÑaWK€Xå+á©&zýÏmÏ=ib~©Áe5¨pGB`ºBb%?- T˜¶€`*`ÿÔðèœB ÍŒÖøpáž)~­öKP&ZãZ;í^ÚÁ€•Ö5µÍY68§ ”ɺ×Ƅś–>D‘ Áz<Ù·—>;y9—›‹õ®w’_òRÀ€ë„cÿ,~)äÙ}¢™SâÕÒcÄñ€ûO;"@­póTn Ó„¸4søè"-·š–Ó“25!8Sqp´è:kÓà ¬ Ø”³¤8ŽfüZ?åÏÃ" ¨Â=Á–ãµ»7rÞ7œŒ|Ì}mïëU8¡aÈ}uÃtŽ`‚¢©ÛXôÍò‘?Ë AEÇq ‚ÙUÍrˆõl¸ñ%Só^wýˆQ¹’¼>ÞfÈ»'U'‘9Q‘Áõ„±Íhù­GZNOÄÛ:58Z8;¹0'¹ÁN”g.(&º+äðEMÍ“ºë¢eGJžÆ)f˜¨þÖëÿMYº’_›$Wžl¡ÅÔ©}^ÐéøÜ„åBJ\~ÇUL£x™§¤Õ€q 0âµ4¥v5˜’vÔúŽ!&&$  2`uáð«î_J«ßþšybJÌ®7VÎþž“§IŸŽË¡õª“A¸¦˜Ì%2×80É\4p¶Þâp¥’žZtžó޽šº8£†'”àÓ|Åw'ã*˜+Š`âä¶y|Rþ:Vƒ7ýâ~ kæ¢Õ×Ç%Ÿ±>) ÞÔR ª‡^s'Õä‾göˆòíÁÐ×/S"§ðšxNŠýPÌŠçSkZÜÜ–ãÚå8›xà"Ä×BœƒæÆ&Ë•À¤PqÔ£iÈR†#3Èv]s„u b§M#(}àb‡…åæ›óe•&Ç뉠»¾Fù”9:¥ RqföÏÓMžMɳ‘à ŸRÈ}CœØ¢óè‘•^î V!XZ§Œf£ôfÚØð`˜`¡Ýpá:ñ…‘äLÕ6ŽEià«Ü2<+¥Œ8a|ø¼æÌVA°"Û†`ÄaÀ"ަxJ&ÏðëætµÝ92tLÛ ã•è<¼íôõöÅÅ|µ~qo%!XuW¢±Þ\á n 슯˜ä;$5Ô§È`‰Ä-“}§ ìt=I09ÿœ3¿-ZÓê™C{?f¨o3t=´fèã©5C±SÂê­]çô¿üð˜+*—ГswuòÄ#×N§=·4@\tçÉTý®Vá‚N?à¹æ\Z¨ƒªo`<þ7 ¢@ ø·å0€èÞ94€ÿõ¢tNÃg9…ÃÞu¤=`,@Œz-XšXo¦>¨³ÙìÉÖ-ø(ˆì—é™ÀÅÃpQk’v×ý;Ê4öËI^¦Ý6´f«? •„Yeº ›îõ{o»ÇÑúâH|Ýü:‚:só¯_3 ÅmH[ﵦ㲊iœµÖJ;€:‘JoRÐå„f,ÀÙ°Àè͘ÙýUì×{wÝ|÷…¿µˆ¨£tÝ\Ï<1rØË,/h¼|+gµ}Øcæoßôa†á‡EÇ7ÝéÃ-/¦ø»æ™i ޾sü·e;ß6QÛ’üfÉÆ#Ë’ÝÏ<v¯ùÎ\ΠJÛðׂ‡lvâPËà‘ûIAåã'/°’¤ Z.?áÕ¼œ.‘h*~-ú¾ÃÑÀßÀØ6Ö'ht@Þ÷71‰¾R¢MÍwøÀIe¥þ<Ühäaa%t!lª"÷„0¯á A8ðb&ôš»,ˆS ^¥@$çÄžqÊŒS¯1s®Âƒ;&ðÝhŠ‘âÄD™Í6.4oœbrQ`’Øzç1â¸UÇ FÞ‰¢>èÓ:DG+NdÖÏ8„#=Y"„z‘"íj †Ú¡:~H `ï¤C§ª:æ¾zB?w:² ™›[¯j^tTMø.0òBv/ªäû^YÏ… 0I®|4%«’$"›9|½ðÜ› ¶‘Õ'äô›õ˜KÛÝÖÛÓ¿vÛ—-J}šÃŒ‘0e¯ºè@¶·òø1ÿšÀöžÕN«I–öïn{ AÚDjtáx,Ú.<¦Í»Ýññüñoÿÿá»ÿéñ›ñ‹ýGŸßÎ4ØËܶ+šªŒÈ]š'b„KáejX¸Qæü Ä ï fÜ/†B,žÁÌ’i^ãäü ÇÞoøçKâÎÚà‹ˆ¯ßá3úðËÀŠÃƒÝ¼N)âóyP䂸{Ä×qÌ„ûçxý¢—-šÇ™}On¡ ŽÑ m‚7—0oøµ:gDô}½.Þëw->x&BUôâ\.)œ¡÷§!@*㋳ìxÀؽ¾ö0‡ A¦k€×}°ÂÇ‘R×ÉÈ­Ô®)©/5ôà¹_ODæQâñÀ€ñÔF_ÀÊ)QîD˜ìÅ•Œœ½ÄR;ð饤K L¦õ{b°'@‹7§ÜÚK|©}ô`¾ø<\g`»qÕÌ#GìÞ$z:SL¯Dõ‹ãBN¿N©@f0Ï·i~à$Ïú•“g‹[£÷ikhØeþ^aâüipe´Vª:Êw`&S¾ƒÍKÔ±WI8¼¨Z&ä·ÄIéý"âÒ2[§¸ĹøioÚ¯àK—BÄÛIK™«!œ=Ä0´“^‹Ç0M!܈ÙóNc‡‹<¨ítÊí5Ç{Øâž*¤*W*Öx¸‘ {i‰nsʯ_Ú¼¹ù½ ûó\¥±ª›<Ì)0Ïä|­î=~Gß»ŒÉàMo±G0󺘃µP›í^¬ÇŒ¥z!pÚ8°åÒ-ŠÚ“rꌓ ¡·Û“„æBƒÀm0AøÇ·F^-XUËBÓ–.:¤ƒxƒ¯Õ9#Žè;ÓbM’Ó0ƒsÁ /3v‚”Ö˜Îsö5h¬Ã*(8ªÍõ'‚ ”‰5ñ¡¡Ä$-ù⽟ø¹(s÷5—´$bø…ÀáneÀ.v®}üD$UJgó8*x%N5íM`F#1 enåd¥&~€XE_ ñèß\1±×ûÙ#ü@tëG•Š^]Ô óôf;Uñ游“w Q*™Ù|Kа+…X’B[¢ Ž3‹æ†ß”.>¤”8CYC\R zgÂ7`H+öPSwL‘½ µÂFÈ!\ŠŒ¡7DÂñÛœz³\tö}#¦»ø(-Æ î%ì¤A}±ƒG™ŒíJ‘L0¨yˆEŠ_Ss+*Özá4 /UÁÈì."Pµ¿@W'—'(Ql œûÆÇO6ϨôjîΡ•Z¤:Dô¢ ZÔcãþº÷ØèjÉ{ìºÒä¿(åfšÍêù„±—0µÓTêÄá †¡þˆDW3_·þj|JýÒ¯¥šBýbHÆÖ͕º±¹òþÙk(¯ò;gz™ÍV¾”ùÏ’ D—æ7 )Õ¾Õ“ üá0‘¡u«øŽa‚VF¤+vA×Põ˜`X“È÷úŽ83öFÊ °õ3ú~*L‚”WY²î)Ï]Ÿ5w¤Æ)ì‹`æ8ŒÌBowç7“ émTu2™؇¤²¿0™23y÷b½àX2ÒqïðRT«……Y­CBÀ‰åu `걈eœ}ÓE«0–_ˆà{+ wÆýزŸÏÊ´ÒPl€“‚n°ç³ÐŠ^ 4^<*Cg²‚¸¼t¬å?06âm[Ñú’þøº¤ÿâ,ߦ}‰tmý¬~ÛðYŒY–‘'»)˜j«ê}E âŸÂ>Œ°ÍFB{˜“€tŽ,ƒ0>m{tcòiœ ê”:â)Xªô߇BJ˳>š4ܲ´ &T¶å†ÝœK#aϱ€»Ÿ†‰9Ê z‡s-ªÜ:ÈÜ´ù*\u8FõóD ž\¤´ÂBKlAäÐ`:_¤ü0^•sÒÖ.š9`…žnƒâë1F‰±S_ÏG(¯•Y•˜I`ÓX•Z8ˆÙäÚ.1ó¾c‘ädè}¯¡ °kË­ßsl×xLñeó:{¡xÎNt—Ý׎ù£QÏKn‹Étj‘89¸š-° a¨'ÍMÕû0u`>T4¦àQ—}“½Òn Ÿ”½°~¯²? ݉à$NÆAvlÀtÓOSÀÂnV?EŸºu\¤Ë. ‚-QWK6%F5s{O3 ÁÙIË©¨ŒLÖ Q³æ¾xç•«´~?¹‰Á×56ƒ‘*…ªÞLÕ¸·Æ> `ÑV[šÎàé3è@™«R?k#µùŽ  '߯0޵0¸6sGË!.\àYÖp3ÉNÊ€åI*¸Y a–­¾‡ˆûzþ¯@•I{÷xÞ±Ü7™%}l‰âˆÊ€Ðáå·!>˜ÅŽòM5‡M†a¯œõÛH ÄI5 ÄÍ\ÖŧوjàlÎåÆ`DŒ‡’áóX%CÄýÌr#ÓoÊg÷ñJ‰½÷;b‘:»SªÂjÂVY¯©8½—Û z¢y‡ÌvÓ4ÎêßÏ8ÇÍՎ§pÂè}†»Ç̨'2[>C˧ÒÑ`ä `˜´ŸÜ()0žçѓʄÏÀ˜Ô €*@ìï!§c¨(ØBàpîà!YJ¾ 'î [œŒCæëUÑ«Â^ìAEL¼B:±çq§¢j ‚›}8-x²„?x nd†hb/ ^1@bètÛc†tú†â[‰èJçŠcr”>ð¶Ø ÂÄð2T9B=PKd‚9FüÚÃÀ@=Ô ¸òÈÈq] IÕf³ÇïU‘—ŽÀÀ¸‹Í+~’S˜CÌöÁzåÙ"¸£V‚ç•wäÉBÜL¨úÒ 8&@T$N½Ð^ã<ÂÀ {«„F "ör¹'cärÇ¡bÆÿå< °ó5‚ýïø¡”ü5³ ŠìåX«Xl¿™Àõû5ü<±‹ÛJé(,»Æ˜<íE9+¾ˆØ €¬"Ââ$^ÁŒòÉpÉ –ÇUQ0CÇ/Á¨¡"'„büS3§³ÍNžÕÙü õúx@>\ D¢û t=ª%úcŠ´Ê ñ œsm"xjÈùZ"+=á¨~ŸÒ.@1 ˆÊ<&Š˜AžŠ¥ÐÚ%sÂS÷è[ù^šéªâ)àj q]ýóQϓӈ¯…ÀrDU\ \СG=›¿"Du@a!­*Èznñ q<>SêÛwã‘ õb‘ú·ÙÊPÀVcŽ º3¸sè•Û÷z®è[$¨ŸY†½FSicG/TÎõTæe/ÌñMnÏ{ñµ•Âp|ñì Œ¢*æ €wâ,œ€ØÎPùÓÐĪªÒ ±DÈ Å*ªºr©µˆ8Ï ³Çà(Aô,«£œ˜ §D»n?TÇìx{åÁfr>õ˜F•éˆÀR€RI%­}e•»+®;Y ¦m…],ƒÐü€1^Öf“ Œe/\ú½18Õo€¡íËGŸ—tÑ&д¿q‚ˆ}·»J)Fë`­Íø<”-ÆÈÄ…n ê—nÞ_¯÷PõѼxw¬ï›×AÝë7ùàÆÉB=©1ŠJi~@ìTRж$¿R§ fSܵˆ`¤‹‡VAY}dé(ÒßÓ~ [PÀ“kb&Ö¤ô#ÍQ¹Á¹"€4ÀGoŒè&V¯{a‰æeœ¾âë˜ý^¤yUÚת}3âpÏ»ÊDc#­f¥5˜heñæÚ››‰{$¶âKEiß[ßF#?0NÎ68†¯õÖOçAe”TR(/¡{#½çþwm>¡‘z)·ˆ“ÅME ‚BWp9žHYÈéŒQA¡¢|ÓJ5ø"Â|Ðï]æÑÍ]:@äsÃØa¶ùÌÐa‰›<¨Ä 5?Aí6±{Ç<þÔaÆì‘ˆF~ nZ€_$‹¾ã®dp’)YÃéÀ$‹)Sw³“Ò”¦¬j\KÖPOä‡0ÂTúÖÜx¶‡öN ã(J†t‰¤1ÆüæáÁ7`Ù!Dôdå_̽~ `…+….æ7E¼Ãú92BY€8íYUá©+L`‰§¢`='ÔÒ°·:Vް~Öï×”'šà¥pe/µ¬¢Jå–ÁzÓÕ ð¾Ã<~-V#—]>®Pî”Ø4Êv‚¤»¦) Úq(ØUr dÂIe}h‘ýÄ9Óz 0p#w£[ÊÞ|t;«†–¨­Eù.XnÊ49†-¤¢UF@EBÏàõ¢Àã¢Ö½CT¢3Is¸ÈØ õ\š2»–ú.®¹¿{îyUÅaíPa3pö¢þ†÷#Dhè|󛈑š+2ÐÀñ^»FäÝò{Ôn,FT.ž/2È:Ffh?óîÐ[¬èŒ2!´ÃGg›¨Óï5+pX@ÖØpá.ðê"‚ko‘;½IC Òl!º3‡{ó«áôyó4 !|­)Òï¯|(NÏÂ:Ôýó±1™Áõ€•e.O`y‹+p•ÓáwØÐÌÍ2«Ö+UّņfÀ/bRÝOÌ.Ç}¸…Kamñ `Šn\pzÑ(øˆn¼(of5@Kû}Ð]¥\Šš\ ™]1 «#†_»«ë qâÑ„™õøŠÙ¹èv‚Ÿ]A½ Db°n>== sS%fý殤o4Òy~ E0ÆÛwe²ƒT5Ñ~€Îá8`Ïë÷#—+´Os‹Pr¢8ÈXÖÞhr î¡Áíϼ¢(ÁÆ\ÞåÅK¬­pê3i¸ÒÔ¿ËŸ¥pIÖ©P&‰Ã–õlÀŠÔ|hÜút¦á œ«˜Hîu•#É’X×£=Šp¨,í :*¾Ô\øFÔŠág𤧶&é9U("_5ä‹q®ð ©k<·s¶äÁ¾µ{!,Å®# åÞ…A ´Épž€unë8ãÁ £àw¥ƒ‰cñ ï©lÏ>ü:«£Ð£_Àì^4‘øCúØ4Â344±˜bˆ×îézÄœ¼97àÄÔ` Xi9¸’%¨Ã¼æY ÇÎÂTç»Ä´:~¢bî1ð}šê ´*Þìé01!k·«b-@…'¯,ähM͵W ˜˜î2áq×z¢R± P D±Uù?`xf?T&ª ~êTÉ”to˜Š¦æG,;è>+ÙÿD<´šùŽ"mŒ9(H…ÁH"[) VQwXÔ†Z£Ç!#„èq Sùx 0¬Dóx„Œ*í€Å£ãV½ÁCrb<†~¡Çæ&"/³ô}à•QÐíd-e súþ$WèKo˜¡g`²@hm&W{*ÀVàÉõ:­-eu fv.BÏ#‰)$RǬHI)6ßõ!¹zq·Ãl ®W¨=püÁcÛINVJNËxœþz :ÍÛ/µq« ú¯sÔÚq0~Vð2eª¬Ô—‡.ÍŽµ&Ì<žóÓ¥ ,Ž9wý@ÒuEü$â¿y¶×UiɼHJ4áyŒ¦\œx!Âka̤’³…¤9ŽÌa|$yÆ)@‡cx«¹¤kã!’ pz“Zl§=ôDÖÉ(æARÖÐÅÜqøŽuJ“‹ëüÚø[Ü2¾ ¤S¼r×LG#ŒR±'''qÇNocÔï(ÞQrŒ’µüÅAQâ0»ß•¼ÕZ[°sŽZÙOÀrYg1L? ;BORp°šÐSqQ*¬˜6<.EOJt.ú¦9y/=Vœxv«NVxTlÆl§VxVøÎª±Kä(Õ'_N¤kP@p3pñ¶-”ø¼Í%Qó¥Œ2¡t˜òÅ×®°MÉæÁ‡Â4ÁÞžt†J\NUâ• $ÞÅÃ}z@*ÁîÙÔº»â"îÝq¯ L6ýÒÙ¹-Ñ Ì-• ØYÕŸ¡Ë»öCÅù(o¯=yÏñðž—U®XŸec2ÏÍ3k(z°ôc‰ Š…;c¯*˜Øç²·%ŒµÍÀެoÌÁLªRMȶ¿Lí2JLQIðˆ~¼ö'‹¡Äë8²(u·¥ãDQ@ÍD —»zaøµû¹žM˜W¯˜›‹ŽàviÄ/)®Ú¤²*D_)V Õ¹D•ŽŠãaƒ¡/¹Ä’ ²Ò·j£ fÃ"3³ ËzÄ¢ ®“Ð)R±ÅeyĘs6ki(#ž= ̹“ Z ÊXÑb!et`=Á>Æ„®õ&º²W$wv¯YÁ ¬r‹Yš€ÝüV^E§3z±ÄÇ€`uÞˆeŠÑSÃŒÛ1G«™…ù6КžCu°ýÐ/™œÇâ&õªÎÙ‹…ÊYcüЉúPÇBa÷‹ÃòZÕ©AK vƒƒžÇ1šBÚ®Ìäw‰]à+& +`Ôz/õñÄ¥¼]°Ë`Az?·w˶ªQZwÐDEø"ÂÒi°¢/Ú½UpÍ/˜=@ñÖÂì†ìBÖCÙ×*\p{[ˆóvô'[›Ý­Âòö)¤­6 Y¬ .ˆ+Âå\SOT^IÉ9À 4Ô<±éè„»âU¨ëV“Ö´Ê >BDxÆÛ.F…=lã…Y–pKËÞ-Ea#h꺶mŒ˜ª«>ÇAW×6ŽŠ´c”o¯OÛ¸U^¸lãVeì‡mŒºåµ¼ÙÆp§Y®h£||Þ¦qóU·Ë4^ˆmãs‘¶q EbÛ¸5›!Ë6]g ÛøÌ|й¦$ŠÇضü´–Áx¡`þ°Q¬âNÛ6^pØÆÇFÙ6n,º´Lc|¢ô§Þn)¶TìŒÙ{jþÙØœim@8ؽMep†Ó> ãÖè±±Y|ˆÝäLØÅKÔlÆÛ`,ß2‹9@ò<Ú0nMc†1ªYÜãi·ºü Pr¡ò0{çݰ ã§QÜ6qSØìñ0Š›rS—QÜ’Ó~l.ÛÄîØñ4Š¿;‹ê4Ã)“t¦”/í'ÿ"C´±úpaå0–Dÿ±P ¾=È è`iCž 6c¾6&¹Äþz)?šy<ãO?æÑpÖAÕ[CúÞXÓ’o€ûûýbæžÈ4"ðy;½Ìm¶Rs4Fæ£xwÒñðÑ’Ë4gջ̔–¬južšp¾ð„±8ò}úc‘d1w¢ikÁ᪼ÀÐæBöÔ ŠëÈo‚oZ\Fà•¡$¶õˆŠvFH|CH/ÖWf%bj6Òs‰ÄúÁþ†»½Á ·Û1ëë#zºíô@¨ÆÖÅÆKH\ßiÄÐÓÕ¤ë÷ޤðå¤ nRŠl&enój¢²~Í«\µ´¼ï߃9¹w¤^MqC•jpþäÉôë»b~Ñl–Û-њí üd@Ä›.¦†¤äÃaÆÔ­í‡AöVw"va'˜»àgVþí­úñ"gðâ `å䕬[2c°0$AoéÄÏ 6{õ-LGV{\Hjièˆ_Ù¿¬³÷í¨Þ­XÅÃ[|ƒŽ:ëâjcJÀæ²ÂÃX¬Vˆ÷ À|Ï“™‚h‚QPø©ñ,Pƒ¥(So$ž–² }óeÞXÈtÉÖPó%0óLéU͵à“.VŠ_{¨'^l/lV¨9KÁ±Y¾dž¬1aØ¥”£¦€MÃï/L2T2:¾#6ÜÀwXÕ‰¿$ú$­ å&¦“éb®,ºÂ½âaº¡šÕ¡‚W‚²kœùñóPy<\¾Èy"H ¬'}XYI>®Ì´]Ü­šå^ÉQìÿ}9¨ZãaºŸ0÷ÎŽ:Ìr‘=a„Ög…©g__œu1dÎQ8DŠK¶ÕµŠó±4–¶*4äz@̬åùUüŒ4[vÇ׬ªØÂf/jìÏ;ÇiwÒ’FÏÉè3’ Û¸úúð™×``ZRá“*q½tµ]¢'ˆkàÒSaªÄ;«6¦€ØÕ¢šŽYõ·àFdÆ~gÚähe÷5«,«iÌ*\žu1l@(@¶¤UÌ¡2g‘y˜•ÑAh÷ÔJ®Âºœ>ë:0pÿ^R•å§\Š“±¬Ÿñ “X©úqR(¶k/F¶qóR‹ìÊß%H££ìN¼ü‡pa6ç8­­tW^a–­²+ÅI,—ªdŽ­k]µOñ?K»ÑgõUãÇÂMiVÕ`áÛ.x¡‚,:_‚³Ì‚® ¡9DnýA>5ªkp‚ZÓÁÙšOx¬Ù1Ta@“ã@ÅÔöì@=ÄTbv×}•Œ”¤8!1¸jáÔ"ÈŸ3Ö<=ñ<ÖìÐÑ¡'‡+\bn0¸ÅÜÀ7$ýU!º%ÇêÊ‹î]SâêyëÉÁ{%î59†ö¶šG‘ÐêÉ!ã9&‡v>19 yrAÍ…D5ÕO«Î ÄUE ²hU§©TæPX§ÁÉ‚Îè¤øYîT¼‰ta9SóŠÝ’+5ë†ä£ÜQ ˆÆ,(îQ—5zÄXÿû|,‹!ø‡Qn.¥.ÚnP*N½,ˆÂ« m@”®Ëœ, Hݪ%1—ª?Pb²Q7¥Ȕ2 ?¤ZÈ2 bPå…{âã·},ª}AמξO:…øËò|$3®²ËŽTѦ!A” C°Q­a³MpÈ”,-€¨Ki¯®§›¤³Á §àÄïbâ©MÖnÀÜ=»ƒï±b¹Á®[o±îTˆÈ[ (ÚˆCÚ×­‘ïXùLÁ‰6¾#Ø!¨Ò/•œ ‘·Jñ°šöɪuÁZRé {y0&6sßì «øº˜a¨`©AÚ€27„È*¡Á×eTñ:DÂÝÏ—ÓÜZfx'¬.^ÀhžU à}x™Ü)œ·s⢒§YY\™s#ªž8e²j òtåH€Û`ríº§œ@Ôbª³Èú¾a·úâiyBÆ~À½”ùTU¥QN+'5±ñÎyviÕm·Š:UÂR³ Q}5ßH” ìòóå &B7d‘cŹ©‚EaüheùO6ì6÷0ë° «L߯xtžMgVÕÀÌüÚ"žð†\ º6xÉÎùY¯¢hb©èG6[pa Ì}Ë)ŬºPÛöĺɆ¥BKÚå˪.>ªYK«0„GÇáß„‹Ã•\ós’óGzP“\Í48gNÔ¶úŽ‹]ª*õ ©(‡ýY«¥Ä['Y¡Yë÷¢} Î*T±$§Üeß®ŒˆÊ8«’*L`ÑèÊ–·Ž(ÀÆû¤UÉ‚ Œ’ øÐý \ºÈ?0”lîòK±¶­ªÌœµ3EÂ8F-ëõ΂«ù%±¾Ñ[âR>‹d¿D6º¿»óV¼fõòm ™Ì£â›µôU½%i¹\©öTÅ:!ôKÉ’›¶\ÓìÕ¹¨ïÊ hA<’)ÉaëºAn#hï–õvVa¯Ý8¶WR¿üx/Òñ@¨þ§×ÔÊ\“h½û2ãõñB'Ò†6-AºÀWôíXœKUðõàL4¿8§ï?8ݹî¾sþWgý™Äcwý_»êJ4 ë7cÜB%¾ˆh²'…€¼SáQ(Œ Z8Í•I€¡Ñ(Z©¢h㲟O'TÈGkÙð$¦1© ¼Û¤Ö(’nŠ®qoªŸrabÅ0Ä:«:`õÏI'HñªJﬦÏ8OŠOŸÔ¤Ç¢ÌgÕAxlüV¿öï²¥hÇo¶œqB|;éá ¦ž¬Óºx~2ùëµ>ucL‡]ÕšS%áæah´îuC7é)B F ¯²Ò®½å±éE÷½ÏÕïÇLZ&ÀI_p"+Ža4H¢àÑ=¨)ZÊãM¸‡Â·{œÙ~ÏÛçÌÏK†qòFo8çÃ9tp,°í.AeK(–ÒkÄ; Ç“§’ß!ÁããÛtx9NÆE/„ëyóÜ+˜n/€ðÒ&‘S¡$mì0\E§(¡‡,m«4ž`¾}oï7²>Z„¹y» ©Vå_“3Úݧ[¾k;qÂY9Û’üO«ž6û#ßIó×·'ís‹q‡3¥w½´¨xO\L·y6òÆbF'e_ª›é©øÃ˜‚!w™¢Ot˼*<âôÌ>/Y1?t )š‘ÆYYÛPI`Õ6.šÎLZdˆƒÔE[²7™Ù”¦”u™ssˆAùXˆĵÒ犆(r )ЖÁ*\+!®I7f.Øe…08£ˆ–ï¾x,K8ÂÈŽÀ,w@4ò‘µWâRu7°ˆd°ãàBÁ>¥ Ê‘6R)Xé‘´Î …ºêÒH‚1ò~Àñ1CÇÖ<:œ‰¨/ºTO•DU,UªÂi &—D]ˆi)–I[ìZ6¤€ÕCcÁ\b8Š"·¡€ ;˜”÷º˜%ÄñõĨÆBèüYñ,Ú$`óðÚ»¹”¼ªfÇš…7¹e]¢K(ƒ«ZüHg)òô.«!uŒC=m±aÇ ˜ ¤«ò¹åà- œâù¢s¤~ižØ¿—§¡4õ©UÕÙO>ái>< ×%eâq~È~çuÔÔX<š3$Ë!Õ\Kàh̹ñÇ8å/‡ß„žªÜ·ú,7` R?”-ø±<Ç£H=”/ +ž‡3ˆó´·ŸÑWÝ@†g´åT€GÓ‡~¿eˆÛÜBP‹\r 2Ì…Û9ºœw?Ë”W0þ5'šÇl}ü@„kmíådàŠNhvÕã|‘ôéå­ß‡ÖúÁ”2Þäb¨†fÈ…*«ÚIˆAL ±F6í ù ×°ËQøM ~³¡ëP”Jfnü¥ ¿ >}âZY!–´KióEÇ]\…Ã=-ÍΫ<ž9–}óx­ºéMݦ†‡òÀ¼žkè©|Û'ICÒõhÛ˜GK~ka~4ôx¨^ÔÇϦ…y4]Wnà~-PßRdrÕ½ïµÐ<–ÉÅÃ5c»¬É”z„eÙ•’š-Ø)ñê©J3F%-¶ Ó¤‚µÖ»ØKÀy/ <¶~éóEãxÛäÂZ¬ÜÃÇ‹(ªÒõHSäÐj¢1Ú“‘—ãhã¨èXžÝœŽ½x÷bcPïy5Q3íŒc}„|â¦b1ÒT.>¿¨JÃàaµrcøÙ*Qd˜\R±Ÿ·F¬ÖjÖ®2©º 8÷¸»fLQ±êÝB‘Ÿm}Äü}m2pTq¥M&2Úýè‰WpCAíÑ ß ù{±|‘´-4 ~ô$0ìêna±BßXÌZD,všH³ûLj¼ºOûÔÓê—à~¬<¹¹*öpð¬0çÃnd€Ï†Ç‹8ãJ²#«Å¶z ¦æ/ºXq«ôLAÐ/Å­êN(Ï ¬7-½WüÍg,'4jpª”Óz+ªÈq«§P8‡Pܪí·#9Öönn„vq_jC÷OÝtæ:s)ÇWé}-7Wµ×cu½?åË —ô`Aªã)_1ÝOžð„xÙ{!k™)EߥQoð:b `Tÿªhªh¥øeVG̦¾©xG¨¸p¼‡„^ÖÐoŽšy̶¬$Áý„Jî« ¦†(¢7zb^&ƒd©¢-ûvê ¤ ¨'½?:}û²qJ|U´”¬SaÖ²kïäOD±õöh&P ƒŒ×>¾aŠÚpˆH¦dñiJYáÖE÷*q~¡O8ÉçÙUg¬C+ ö3ˆiʌ٤nC#ÞÙ;±‘½~iÊÁr¬ÙÐíëF”w¥DÀó\ØÑõJ`6ƒ`¢{úŽÙfÙzmñ~a4`¾.Ì/åÊèbruæ7?Q¬Lµ_yÙb‚šV…]^y‰â…<†Gº·â8±’œ¹¾®nýPu]ôVqÝ€^2qþZðàÖmràæþ}#¤a¾i’‚Ìߌ"‘´˜ºÂb¨ŒLõ³ðw0ψ—z²ÔG'+x?)ïÛR• æk$nÁÙˆÁ ¿Â«7p,Ä‚ºíñ€ ê>ߨ,Âmžr˜t 8r‚µ.DñÒç»ÝÞÍ÷nâ.{ݰÀ»N+‡.LÞuÊ…Å|nݲ‰u0©¤'/ÝÔå*8Ç ðEwafޱ»£0B—¹5_š‰ZãNOÄw¥}«4=¼*IWŠžrœ¼ü%]…L¾…CgݵÊì^RAPkŸë¡ë;`YCÎQo d×Yâp=P%‰øÖEÖåQ}Gz¯AlÒ¥€°æ .^óBñ¾£ áHS }d‹kÁC}×Ȉǂ‡ÉgÂbCrô²«uÃI·”òå‹)¸™Dó¾Ç~˜ׇ%G®û.g7ät±H€–9`Ê[•²MJNù×…½Î‡×——Diº9Q..`IE=|3åõ{ãy_GÿGP/nþ<¨©<†`wN& m‹ÄSã¸;ÑET$†•:þŽ-šUáï?ÀÓÎݧ?Š+ Ìi`IAýA @óÑ,ʦ²Œ6ƒ8z½T‡»Áè`‚@îý:ðâÜyécíùqMTìä@/-–4/ÒC¸±ÖŠÅ~ YÁ'Wðâ9”Ô™Îajñã,RÄM IS,ÃAûÁ˺ãu%Þ­Ö›6€þøœ3qÁ×o|mÄíÍ_Iž{B€ž”TL‚÷,èðàÑ€î;¼¡pýãÔíÞÄïYõìâí¡…j}ñ6¾~º|Pe&Mý¹Õ·žÂ0_y½ŒÉÛ­ãú·ÑÖ×ó­…K¤´dÈ0;v¬WÕm·½Ù²¾-¶™.ñÔT[#1Ì÷2›åÙaÖç‡4-“G×m‰‰¹ÖQ8ÚõÀpZ÷+p°”Èz@q•6°Úœq3´®àæt#`ˆY¿øZó›Ñ¡û‰£\Ü¡<ÞyïÝofêIS/!L‹‡JÂÿ•‡Žµgùå‹iX®VLæK¥‡5•t€ò»çýx‚U‹+¬ÄKƒ5ToUÔgªªÔ>ªŠ%äµÙLEFCÉW·æfþ.äjèÎX޾^[Ï úÌoo½÷”°5Ö¥â²$ ³ß«Ú…ý‚ávQT¦²´`IMUýâz[”k”_F±—¬õ Ö(àDÁk´kUØaÀ/b¬¥ô€néP”ÅÆê34Ût•g­ºYT(¯*­H!½ÃÙ5¤õè«Ê¿ü‚©ºLøëÑP`vCµYÂAvwÀ`S¸˜(ÉÅþ ½1T´n–—.–Hï]*:j8iâ©ÌAa8,¹“ÀWֺͬ&Œ¶ÖýÆüš-•g ?„Ì[²é¼¦LËžàK²³Ùo=Dô[C‡ÌÉgÓ‹Û £Ãô·†õ½! {Ó½Mxj°òúBìï3põDcÉ~+^ ÔÆÈÊ~Ç`K ¸[™ñÆ^ @K™…dj»<ƒtó+`©UE©æ¦Î0ä#hfûà¹_zÃÀ[R?8ΜªZ•­W[]Äcs øºe¨ÓôÞˆäë{6fóH7-ý†Ùºo½¶ÙÙ“³FÌa½šeX…Ðæ¸.L¦:_»NO¥7ÌÐiH.dȆ UH9dtL ]z#„ |áè[l™3¼^J =ñ"J†UÀL õõÀ]s€÷S“o÷H)l–CèMÒÀœÁˆ][_^2{‡Æ¼ c.ö#*M/%ÜÉJ)ÐÆ”ë`·¨`¥þ%kU×f|“F©4he= "æÔ–E›“¾ÚÔ´ôU¬àª rxRY«%zrIL”¯Ï®Åêy…´¶Ö>ö)¶?¸T“âÍ|÷ÃÜ«®<—õˆöŒ•…Ð8cº¤æº{vD×~3ÉRÜ{*d¤iYÿ+ßV‚»¨(×O£T@`ªë³$3Ó~`ÓÎØ”ÝÐBmLc¼®0û½›Šªά>ËŽùÍÑ•‰×+(ÄÅ-R¹§Ý`]I^-˳‘Ë‘ÑñH£qÈFáX)>^?›£ã’oíÈ,Î_ /2V°pbrtÀÝéa3äUˆ&¾Ë—ñ•t:–cÑó'ø‚Nœ?Ý»'Ù÷50+l†a f¥äœ‹Ÿ)9u:ž´||mÅË6ݳ?Ì-³$¹hd[€nºÎ ©FtGúTÏè¡GpÏꉒvš“$€a¢‰1 ém«‰Î›ˆöGÔ™ûAFˆ—èÜð£À »¥Ø€"Qê&¾á1{m*Òi½W: "Þ£G ^»¯ëób5an=>"~>èŽïcÂøX‘érZ‚JLDžŠ0‰ª£†[$Ùtf6R•@ÕÈ{¹™Ó83äfÕ†ã‚'†¼±‰¬LV$)LUhŠÞˆÈsì @V$ŽH@÷9ž²@=yoY¨‘eÑx'jªN²…,(¿(%V ŠŸ°È"¶x=}`bTà¼Æf8KãAÄfþ€œö#7‰láVþ ŽV3%oJ¢lˆ]“Øõ=)ØC}Wñ–ᢋ¡Ãub7Cuéé×ó‘ËÂÀÛYæa¦½+¾Âƒ PÛ‰ Nz’ ‹1s†_âpË'Š®|#â‡#à&=3œ‚„îƒ굘]¬ó²S<•y>"a‘v§ßÜë‚«U©‰a͇Èä$å7f.ƒÈÍ^P̉Þ¡Y3ô@Íš6¡ÞFÑx¨Ø³T šÖ÷ﳄº ¥&W¶¬.`x -¢ðJ°ÓM^"ÂÖîq¯2P¨ˆÑÄ[r¿íÜU§N¼‹{<ž`¼®’qAå6t‘¼ˆ QÄÖ+µHyQHQÀ”]]±Ù³}¬‰ù ƒAâ!Îjç;F)“DÐRÜ»HG˜-mø÷U³”b u6y˜ÅMåÎŰƒsµ=†½3ÇÃŽK O (šK؆³å8<]p-½¾Å ãËø¤´]½ñrZ£­*4Òf"ÄÀÕ¶á˜3\©ù 7øu$lo®ôäéõé4¸Ê‹êð'Ò‡6”¬þ0HŸÒQðÆì×LòOÌ"yv캔Ù¹¿šý Äà’ž.GË„ŠºkíQú3ÔÁ/æhŸ¿¬†‹µfÅ4÷#øf!¢«,‰W Yyë#À´È„zB&Õ°IºÝŹ¥ÄVº4y}äŒ[6Nµ]„ž<ÐˆŽœ>ÞXŸÅ‡c¿n^­/ln fvø6˜×­©32¨6¦27ï(OÑŸj2ríŒÜ_Í:½½š›PBúÁIvF‚:ÎúIÆ3²I2«Ç¦U“}ó¸yS¡d­¨ä>Aš=WfýɃ4Ð-(®ôïx§0чM:‡’E¬ðÍâ$I¹®€*j¢pŠJY®¢’©´†5dJ%Œ'š+‘€îÎbf X’žÌ”å+‰;vÞ Žûºœ˜WLL…¹ó ]BSY~$x+©(mÊU×+(wXÉšÉìVßÊÛ’›úã‰ÌJ2Ì4Êýo¾²;a[ïN¥éz%ç„ê:® ï •VÖ(n±ZM`–²|T|óºö˜¶ÅÛ8œÅ›L+÷èÇÞFOã3"‡`ÕÞ7“¤Çb7–ý5{KˆP¿1›¾#Ž˜qT’watÊø‹‚_ø³‚Ìø³âFÀy"¶Œ€›QÁ±ÈߺsåaÜÉÞx"}æ‡pŸJÚfÀ}:¥ÚfÀ}ºD ÍÃO3`=²Öˆk83ñf±hµó³Í€[)%aÜŽ\ 3àN4ØfÀ´-Š‘¾ó¶o‚×›þ>Í€;;Ùfà73ô0n‡¸‡pâm3àÛ K³ëÈÁÁê¨t ú^µ¢oD³›GU ¼?­Í;ž+ OÞ—óAUÏðÚVÒR½u“R ðŠêù&ÝÝùèIf€•YÜœât5Â-¥qUy"ÒFõr1Åiôq¹‡l]¤Tb7r»bÝ©ä À4Ê»ô\W ÷­ 6±Ý»£†ÁÚÞ—Ut<Ñ´—8UèÃïû•F¨)Ç@vgdz ß‚;«Q‘Üùß^±ÃÞ_pº»ý] ÂÛÂÛ)oÕO[˃݇¼ÞJÚ‹Ÿ»**²FÖ¦Ë{².MEn+‰îŒ%gƒ©Ûß%Qœí±CírwÞÝ6½îâgΰ­»sS«R#†7òRê;閛ΛGô«ïͤ†ÇÉþz@Ó¾idó„Õ‰j¾1¨ùTˆ1ç†KÚ (@{‚THòˆnE¯8 {]jK…s€‘«´(¬‡§¦ðÀ0“\μîEÕÏNÝ”žzöBm«¨gËÙ²ŠzRfŽpØ…)”‚/¾”~`§m àKæZeÞ.>[eÃ(µ„É“\x>X>ݪRúÝ[‡X} £ñ€øìɺ/KE÷i¸ªØ &‰RÏpùó¢÷3·} —ž|ÿÕOMÎ+ju{Э¶¿ôÓS–+/BÄŒþCêyZŒÌÞLs²4`8ïØ;% ˜Ð HP…U'µ|fÿjxcøE ޽ ‘mDæ](E§n¬ž«(H„kQx“Ke²Ea’V¡…8]¿faàËS$ˆ]O¿a¼ÐY6‰Jd4E€æ%fÞ‘t^!CÆY—±\X 5K®}BVòƒÇ`†%ÎåºOœë XW¹Œ`¾qšÇIÎÝ®ŠT€ë¸àSªŽ…Ù½½uì/˜ÕÿI´ÒµTá;)K™ŠlŒgÿ±ÒÜ÷ê¿Ö¿Ý}-4Wöÿ¾M­ûUÖ£Kåxéä½§ÀHÉ›.Y 26Ù®,»ÿ ±:«Õª··þô³ËƒÚù‰É®ŒEbx–—TŠXâÌÈÐû¢‹Òœb âIu*.5 :Ž)r«˜ÁcŠ€«8]OHk’%É“HŸ€‰©ÊPß{ÐcI.×X¸öd§“mÈÚãË¬Šµ0X©Tû¸Ë0Çdߦ}rˆq{ÑmÙuø.±¢«mc–èK^;uæíÛr¯Îè*Áˆ—®ÕbÁÛEÖNê„o]²t']Éí¬YÞêsú–î[W_~ÍJ͸BæÖåÄ©¨4[`nö~ù Ù®‹»Qi%ñRsÝÌœõYF1ë५îÛû¢:˜ÆD$]+……(`qƒ±¥ë tI_ôíˆLz2CåPƒrÞõÈ<ºRmÃ#*s`Žœ·/e,šÊttA<ÉÞú‘êºØ‰C[“Å®o1ºd=KŶèóšeÁâ#ª'E†{>}‹NJßR/0aˆ·ó,q¨-Þñµ§BÈ8ãòquÌg!¡"*¨¢0B§ bIد˜)wV¡ˆýD×.…Mø®±s)xw™]ccš$ê²2­ª§ þÑ-÷J¹  gb;ˆÆbZi †Âø ?”\¼²•ÜÂÜ®¯…«ñ%ø–¾ŽbE†².$½-lÊ^|„Ñ€h–÷òødÉï¸<ïBÂgJËÜèž‹âS@ÀÒ*·m)Þuë2w—èv\*ÔLÖeX„±9ÐiÒÂ$ùL£ ЏnäJ±ôHƃŒñ s °{²Düˆ¾®'Ì +óŬ­îƒŸ\†øI†³&ýÇ·qQÈ›ŽýÙl‹TN£jÝ…‹›÷É5Åßž‘2Åž4é:~¤)üMUÝ(÷F¼ØW¸NÞŒ´[¸eÇ­OPº(´‹Š-‘¹{¶Ghcz{´œþI¾YjAc l"¡A>¢R(î5»éŸÍƒõ²¹´[7ýùãÉúuõk{t%çu[pØìj} X“n½³gæ÷fq:?šÕì^`e0ù[zoBò+ݼ2þfNE`VµÇ_0§j+É '”.‹WÀV bOz¨3z:4³ðô©¯ ®›ndºaî¾>Tþ,?è,ŠÏÑá}Úv©»º+…MºqrÃ#rˆj÷»âRÃÖ&0³0ðÚÄ '±ܰ÷@8ÝDÚØõ&çY=ßí³ÊUì !¾»žbÕT×32¯üè[Sºg׫©Gªæ¾79•µfF)X$Š ]RP>ÛÚ´úNðÑMI>§s Z@m|‡cç8hf"3Ïs-¾'æN"ÕÞkL\›,™lB—B‹®<ÌuöØÄþÙjÓ {(Öàh¨^sœtÀxܳ˻¬Xú=æÖÌ3&5"g­>}[@ñ|ÀòJì"³î (mí;åŽÍEG‘äÈ-Uy=Iq¹ÔåWU\0çFÌÊR§\–qYÇðÞ¦êúU¤§Âd'¯@a"Òà‰PUâ@ìuÒõ¥Á,&=ÚY|[˜µVâ²–Ò¼V6Â2 ÑÕ;03ÏÝÙcË Ó¹ ? ai¶§ÖÞœ¨ñö«3$UÁ+_$Pb‡X¨NÙB8Z++<)…°Ùú>ü‰šm­„ßta–—ÕM´!à Þ§ ‘Ý^bºéU9†½Ý)}ï©\—eX­dU?áÁÛQˆ’AÉ{¨æªO˯ÊÊQ§· á5emžn™‡×Ny{MYr¨í5ݘðšê,e4X¬'ɧf·)¿ùjB·^­*=E336CE·Á<6C,€òØ.][~SÀ©¦7v Ä_I‹öìûQÂoºáð›fùMÙDº>ÂoНp™ZN%ãm…×]àJyê!—Ãúbi¼z®éÀ'Yœ·åÈ BíÙžS1Ý~;ΞÓï"é-Ç)v‡°ÔQÒ(ÚqÊr`q@@—Ç(”; û¢j½áeÇÚ½à—k µÇ}{lª*w1»*<§d^•«Ô ™Ì/Ï)§L·›TžSwëá8e54«1’üÃJ=<`9u1`$Àé,´Ù»Gó$šu62,šSå µy·QT¥·Í&$%Œ¶0_ª&%”ªÖñµÊÂÐwl >Šî[jŒ…¬aTØEq~`ê#8hXäª1d½/㊾ (tÔ©ã[e׺d20—½Ý‘ä³!ÕO~>4–ÚÞ¯=¹ÿku¤3)U4)± ɳù¯sÈÐ=j{,-ðåýR=¤KÁ–3n³:y Q ¾åzYõ~½³0?šy<äO?b7Ì‹¾5¨ïÍðö –iA‰‹›Ác¨´±1ëy“á—µ&Vr!¨ì™„%\&ÁÉç­4/Ì’{¥“ ¿¤eú~âÐæñ~4‘YÁtE¦K~áR“y< ƒÛ˜‹h7!Ëz¤Å-±›%©lB+íÝÁ¯Gg…yp#š0¿â#›¡AF0\dþ¼¢`›Â 6”¬…Q-1¼Cïoœ)j}ÎVkû«I%WRsI7¦Ué^"D?®ß‹Üz»ã/xûIrBJqw`ª /=_ysý&zÁWV,ŒÊê}=^Rl1›ähdÅVñ«Ð(·î*7ŠÝ†÷•$–:$(]‚à?ƒàªéx éxÕ +aðÒ |È2ÏÕÂä†u=Ìë ƒX·/6ÂeV",…„ªU+å/gŽ|Vf¬äŠþ=Ôl¹îXOPRøb„XÁS}c(îU‚x^Éž Éö¥ xì€-pnÕ$U øÚr˜ÎíY¼pžÖòøFÜ'³¨(¼–}‰j3·FÝ8ñÚ]]˜Ї=m^•3nb17|vXG‰ßÃwðĈ(`ù1F[ÉzF?Q1í¨0á#¸¤f[ûçcc–RÏ.,ö æŽzÕ©ÓÐg #•×`ØËØÕ‰N¦+ÿÌö4!bð¥¹Vûã¤<<Ÿ²nçðu•u:C»Ã¢-ô! Nd`À7w'/µñ¾‚qQ…ð³×«xka ºWô}‘Y¹Å.pŒ2•rÒ¦œ‚à 8“ÞÀzkѶ,ñRÒòñ6TÍÌ[Ú8.ô`nJ sJtnªŸq–²Zï*±!!¬£”]G#“Ò? ±d­8Ðí'…¿T×:ÞZ˜…hÜp¼!tgf—-ç«n8Q×ê¤Ò\?«.GÙg\±äAÇsÉ;6eB=iݯmŒŠoÆÉ IçmŸ¨çzKKÊ©RÂY–u]ôRw÷NMøPñŠÙ<òaÀOÌâõnh³a4f›· ËÇ|¹Í§†æSQžæ²[J³VÞö¼ùa?¦¦,ó©Tëõe>•ò鉢 ϨŽÝ@fÊ÷ÃzÂE\ùa=•ì±*]¿±õ´š°Ù²>² ›M‡MŸ Ó’´:²Œ§èi<ŒÐûÇfÖþF°3¨v•ïBöÞÒÛxZOsGÍ‹'VMµòX#¤¯Úx Ï£Rx¥È6žŠË¯îß³ô­­'xÆÒ›õ„û¾ú²žÀû¦ßa=Á†gÐ'Ü2·PËzZ/Ùz*9L¡Òª5íøØ¶ÓQ¢Î]O…çK6póqþX¦ƪåmZ]y,Ó©ð†Æ‡åTÚZÏû9T6œ Ëi=²,§âãe[NüŠ4OöðkÑÞ†S©òØpBíµ´#v«¼ÙME[ŽýHV9¿0œ|ñô6œ€aIµ°›PȸJ Y%'À=™cÃi5`»i}"ì¦cQaÃÉT®•,ú±W²èéZÉ‚a8™YÃ)¸i³i1[fÓC½-»)0eê^Kì7ÌÓlBõZªHQ² ¡´©C6—¬,›”½ej Ö’Í8j±š½t ò¨¢àµàkÑ7a «,†2-ÉoƒÖªi®ÍÄlú÷]Œ)º¦lcÖRW†W٘ǒ¯mÆ­†–Tu•¬, WœôZ6†º£2Ía±Ç%m ¨&Wj²ÜTo‚—܈­×õöÈUÃF÷ÈxÌUT nŠŠnT?4˜n¢¨¢½íE÷ܽ>¾ €„b(  ?sŽ7æ¢ë÷K%‹rÿ޹õŒl8¬lˆÞØ\5ï}Q†4ž¡aÕ;!È‘JôÞy!^¬ÿê2½<þ‡LWæ [å2][s]z>Ö–n°páÐÀä8ÝÝ$J™Š_å©–jÔÝïá¯VU–½{+U•½UhÛ‰®šv²~ŠÃXº¯ÇíÓ/tºÝ«Ëb>˜Q½Sé¬M}jœª_<ƒ{©€“P™«¬h÷ BTÆQó’Žq¢²×+5¢Ö^’J¥7?ÞìZl õDÿlK»•¸—‰V‘ªYáY_=Yö0¤­3Cå»<¾Äµ‚­šéz«Î8ÈòJò«E¦6¶v€éÚÅGJŒ”û;7VX½4ÏÛ¥z‹£,PCDoüz@×/«W(«Þ•¨ì7ù—Õ—;©Þ¢L ZWU®âžhEwç¢oœ’­.]–\XZQÖyø X'¦ï1u™š&ö± TÃ)[†*¨Å>UÖPó65Œ¥æì!¾‚¦ qeK$ †ïp˜&ì+JGØíƒð˜K(®ÑdÜp©hE‘293l pö^7S yÂ{ÐðËW„@ÐÖ#ݹ.\‰îuE•ê¨{5ÝpŠãJ.@¨!ˆsµgVñy=0‰ i7q*#>Âò|Ég4¤e5š/y•MõZVGZÔo9V_ã‘àE늟3¯ÐbN>­"7Q%7D»ÛðÉeŒÇ¹^1¦uú[ºâ.Àù÷V—ª§o8y§»1'B» Œ€o÷ Ûð]¡$¯@B)±*õÝägÚiq=0 ‘6gcÌ9\- ísù ÅLFdðnÜSvÍ¥ç ¯ž,LæM» 0ãñ°K±YAÆâ§É4¿ ‰z"ŒJÿa#tôï§y¹zFí¼q}$P!L„B¿àèÛ±Q'—ÕD“ge}dó<èh>‡Z„Æd\ôC".…ÿ®'œ¿·›h,~ñYWÌ :`>¥ Þ]Y(÷6šnÄGL7‹¥AhðüÛ¨p:±èîÍ9‰|v*Ù@„Ïœvºuá:uh³'ÜÄäÈÐëçC>Úð²´'\s`{L8jñ¶'Ü‚·˜&&\4®9pqO¸¦è•5]@f½3.z²Çß+{RfTMíìÕyL8 G¯{Â]öÁÄ„[ðêÉÂÄ„‹&<áâ#{™Šàgüv7ŽÇЯ1ZóíbšøzJÑ–ÌBÃõ½ ÝÀ¶ìª \ðî™0Çãh"ÄÜ_y2Ütx®˜ÌcÍ¥5Dk¶¡nðsqÄ*øh )¸òxNiG€¬IË_J!à-lÂ[µ¸‰¥zÂùPN"#øi*Íð÷á\Cái¸Âh\ X@#H)”W¹ô†fL˜>•KEó!(ÈâW°+Ê®ØBuîSç!WD¢äkh;mÌ”¿î•~õƒ/mY_Äp+wɽš/Ýæàd+à ì·dÇ´¸¤+Èm×oӪĬ†¾£È#Þ j¢C2åÛ«.Ý]Œîf|ݶ¬#$ °æ›‡æVa¶=4Ä0îíñÈíáåÕ/·Ëö%ÉÆª i(‡›€¥Á¾ü€$ù}ø±I˜2‚M”劅ÑMD_Äè[ÝQ¹ÛSwß¡&DÖFà¼u5J:Ñî‡ Ù“’ƒ\T°a•™@1%KyÆë”„ˆ˜¼ŒŒqÛ‡*lLÕÞ!Úwg4Øã…|}Ƀ0åì²%` ”<à‹.!O½2¬ aƃ*)\U[‡ò^\˜F]¥Dž1|‘atË\º­ð°eÁ0oŒÀÖË Éè”K×…åîcÄKu/7|ÒoóÚ˜¦’êhA1ÈXLŠ>¬ŠÖ#³ EnÏ^0”h¨†¦CÉ…«nåøbï™K kßÖK?yyÔ׎ë!èKu;µ,£·Oš²d_ÌðÉß¡÷†|Ôhc4}(¬Ð^M(å­)Utsv@K“ãê[À/b¸‹\O$Ez,ö©&‰P‚ù'=ÿ@zv°4#Î4`îC“_¸èwEísÔ³ÁLªÚºbϬ-"XU·AƵŒM"ÀbE_8.-î¥Çqÿw)œó‹Üaˆõçƒ{(ƒÇû§£|ijª‘[õ) Õ(­‡£<´þµôSÕFja Ï´²Ü îDQ©[û*yyÖä…®'ѵ:ÖÎmö‹“}íìbxÖ¾ {;D ‚O½ª•Òçðpá‘hI >ysÒ»êã9t•c(!¨C‡í.ÍÕe„UN»0tb˜Qþ¢s©°0`¤•ñ6¼vÇ “ûh×­o`•W×LDSäõ"2„×Ý8ò=Ò²NõH–}MŒ¢@ëõQèv;LèæžHÜðêĸ›n Øp¬O,V-"‚™Ad0ûÛp€¹ %AøÃF´•³hÌÏ0{~ƒJº¶‚åªHZ‘H}Ûù7ÊP¥kÊw~»sIÎ!Š&RÖGÀN…Dô¢ôMærÄDO¶zÃHS}i`_ZMtϪõ‘)(×2yÔ2­D…Ÿ°Æâý€·¬¦:Á4šfÄW¿ÁÑ syb¾ Š¦Ò­ãCPÌȪ„”ª¬#õaç)4¢†íÂɾw ©Àõí-!–i‡—ªÿ†±‰ÂfŠ·cƒbáÚÁÆ[ ³ZÞýږ州²úÇÿîûäú endstream endobj 4 0 obj 25892 endobj 2 0 obj << /ExtGState << /a0 << /CA 1 /ca 1 >> /a1 << /CA 0.5 /ca 0.5 >> >> /Pattern << /p5 5 0 R >> >> endobj 6 0 obj << /Type /Page /Parent 1 0 R /MediaBox [ 0 0 534.823547 368.669922 ] /Contents 3 0 R /Group << /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R >> endobj 7 0 obj << /Length 8 0 R /Filter /FlateDecode /Type /XObject /Subtype /Image /Width 150 /Height 100 /ColorSpace /DeviceRGB /BitsPerComponent 8 >> stream xœÔ×÷[Ów÷ýël\µ­mí°¶ZëÖºGÝÖ½•½„AöÞ!aÂÞ{ï½Y"(2dÊ^ @ò=îo¶çyÞ×qû·û{<ÿƒÇñz ûÿ–ªû_+)ß~¶ÜùÙRÇç‹oÖ||­µÐª=ÿr­üÅziㆹ†/¦Ÿ9YóõXõ·#U[†+~è/ù¹·ð×®¼íÙ»_gìkNþ£!þhMÔ©'agË/Kþ*ð½‘íq'Cô …¯›ÄÕO`Å2L£iædHÅ&˜b@u”P¾4´ëÅ$x²ÉšéÆc‰Àøl¡:ŽÏ x"0W¾ÈU ºº‰„n"‘»››»»»‡‡‡§§———···¯Ø××ÏÏÏ_" ð     ‹ŒˆˆŠŠŠ‰ŽŽ‹KHHHJLLNJJIIIKMMOOËÌÈÈÊÊÌÉÉÊËÍÎÏÏ-,Ì+.Î/--,//ª¬*©~Zú¬¶üy}eCcUÓËg-¯j_¿ièèlzÛý²÷Ý«þþ¶Á¡Ž÷ï»FG»ÇÇ{''ßMO÷ÏÎ ÎÍ É¤CrÙм|pA1øa~ð£¦Å…°%u}K ï–z–º—º–:• o” ¯U ¯T /…À|0_(jųՀÿ{ÁÙÿÿŠÿK08ôÿB0ý+X÷ÿUPño‚‹ÿ{Á¶ÿSAÕ¿ viÛÿÔe+‚õjÁ àûª-C?® æª_­ {uº*ì\ià¥"¿«ù> àÝtуd¾n"× žeÃ0¢™‡“!¡äÿôÖz°Éî*((R"þ‡ ñÿTÐï¿Cþo3r²ÿ—¬[|ÚÒú"8ðIpð?> öÿ¿;>m°UµÐ Ì7óõÀüs@Q(ž®¦zû?þ­)Áºþõi€Ÿ|½æÃ+­ùEóZYÓú¹†3õ_LÕ~5ñlóè“ï†+¿,ÿ±¯d[wáöŽÜßÛ²ö´¦ïoJ:\w¼:òLEèùâ€+âk¹Þ73Üï¥ &òôâ9†±,ã(ºYÕ"”dL†’a \Lqö¦¢½èX&ÁEvcSE\¦Æså±]yW>WˆÈ BWW‘P(‰Ü4‚ á Š5‚þ †‚¡Ÿ##Õ‚11jÁøøÄ„µ`rrZJJzšF03#;;37'+?/§° ·¸(¯¤¤ ¼¬°²²¸ººôY (XQßPÕÔ¼"X¯|û²··µ¯¯mp°}x¸sd왜x75µ"8(“þ§àØâ|ÿâð½]á[þ‡ï¥†¯AÃN¯PT­¦êú+jê:A;uKퟩùÚÔ|à U¼Ô‘¿X§9¡§ë6MÔ~=öì›÷O¶ Uþ0PþSoñ/o v´çìz•¹÷eú†Ä#µ±'ª"þ, ¹P ù+×÷F¦×íT·ûI‚DZƒh–Q$Ã$œfJ± "Yl%d{1îCqö¤`$'/²³ãNÅºÑ B&É•Epš˜|.‹Ïekâðy\>÷¢««P=C7 á¿ ‚3ôóý$è¿"ü?g˜Ÿ” g ‚3LOÏÎÌÈÉÊiA~NQA®Z°¤ ¢¢èI•Z°Vó66U¿|Yóêu}{{cW—FðFp¨säýÛ±Ñî‰ñÞ©ÉÁÙÜ€\:  ,È>(Ô|ŸA¾^oi¾k…oYÍתTó5ªþƒ¯—ò¢Õ–?nÅn©ý_ Ý*ß+oÍÂKíùfmyÓZiãúÙzõ'Ÿ9ölóHõ·CUßTüø®lëÛ¢_;ò{½ûeƾ¦ÔCµ ǪcN•†/ ¼œ-¾žî}+Åý^¼ë£ž^Ë(ŒaB3¤Xú“­ýP_"̇èàErò !ÝÈ+¤\$“ÂgÓùÃäqXšØ<.‡Çåò4ŸÇçóÁ~2\¡§‡‡—§§——¯7(è+‹$’ ÿà€€UÁˆÐPµ`DDLddlttœæ®&'&¦&%‡4#55S3ܬ ðäeæ«iYI~yyaUeñÓ§¥µ5åuu MÕÍÍÏZ_×½yÓØÙù¢»»å]/ø¾ìx?¬~ 'ÆzÀ§pfºov¶ÿ¿  šoñßÒ ŸâµRÑ¢T4+*EJñ7_ /ä€,wµåö­ö´û×Rh÷ÙâëÏ>¾ú\çò)^èÈÁ®Ÿ©Û8õ<¡_=ÝüþÉ·ƒ•ß÷—ÿØ[ºµ«ð×ö¼­Y{šÓ÷7¤z¼*útqè…¼€+>7R=ï$ºÝ<Žâê‡2ƒé¦Ts2ÄdíC°õ&À¼ˆŽD„)"a„¬+  “øL Mç±\6S‡Åå°¹WóñÔŒjAÁÿBÐ[ü_‚¡AA«‚aa `ôß‚±±‰qqIññ«‚ÉÉ©)™i©jÁÌ ðæç‚‚9Å…y¥ÅùàSX¥y kž•Õ=¯hh|¢| 6üOGÞŽƒ‚½ÓSïfgú¥³ýò¹~…¬AÞÿäSô-*Þ-*zÿæS€|¯–ÿƒ¯F¥~ø*E™fwù€,e®¶üê_+-©ûl±õ³Å–Ï>¶|öáåç^¬YhÒšoÔV4èÈêÖÍ=_?S³qêÙ¦‰§_>Ùü¾ò»òúJÁúsgþö¶œ/3ö6¦xžtøIì‰òÈ3Á³%¥zßJò¸/zÅÓ gÓMifþ ?’•/ÑÆoçI°÷ 8º""Ò•„±|*G#ñ.‹Æa18l&‡Íâ°Ùœ5+äñWCõ/š•ߤžîî^ž>žA‰¯8ÀÏ/Pâì¿*>…!¡‘¡aQááÑà £¢â¢£ãcbbã’ââ“RAÁô””ÌÔÔ¬ô´œŒôܬÌüœ¬Â¼ìâ‚ÜÒ¢¼òÒ‚ªŠ¢ê'%5OËž×–×7:&!&616.9>>%!!-1)œaJJVZZv:(˜‘ŸU›]”ŸSRÒ‚ÊòÂ'UÅϪÁCZV__õ¢©º¥¥¶íU]ǛƷͽÝ-ê§°ÿÍð`ÇÈûα‘®‰ñ·ÓݳÓ=Ò™Ùlb®{AÖýAþvQÞµ(ïX”¿Y’·-É[—åÍËŠÆeÅsÐN©¶+W)ŠUŠ|•"P¤Š@Ècy ]m©á³•Áê?ûXÿùǺÏ?Ô}¾ð|ÍB­Ö|–â©¶ü©Žôɺ٪õÓ'Ë7—}5RòÍPñw}…?ôlíÊÛÖ–ý[KÆ®ú”ý5 <‰=Vqº ä\¦äJŠÏõ8÷»ÑÂûüG!lý@†‘ÕLL¶ð!A¼Öžx¨;ÖN„³â]ñ>É#b¸$,‡‚çP‰l™Å ©cÒYL‹Åd±X "{ñAÍ/š•º‹Dnn^îÞšн}$>A?ID}HC‚Ã?Í0:,<&""V“›—Î0=))#99+55;- <¤ùÙ™9YÁ\ð)¬,+|R –Ô‚‡´®²©ñÉËæš×­ÏÛÛº:^ô¼} Ò¾¶¡ö÷Ãc#c]Sog¦º¥Óoe3os] Ò®²ÎEYû¢¬mQöjIÖ²òÉ–åÏ—åO•ŠJ¥¢T¥(íTŠL@‘ (hÈCy ¯¶XûÙj5Ÿ}¬ùüã³Ï?¨[³ðtÍ|µ–≖¼R[^©3W¾n¶lýTéÆÉâMãE_½/üf°à»wy?vçníÌùåUÆÎ©{jVÇ)>QúgNà…TñÕ¯›QÂ{ႇ!\ݦ¡„fâC6÷"Yz­Üñ6n8[!æŠuàà|<‚‹Gr6Ë&ãY"‹JfÒ©L:É 3 &ˆÈ\AdÿÛy¼Õߤà¿C‘««›Pä!RRowµ —·Ÿ¿¯8PìäÎ0 4 0,0(<(8"X=Ãè°°˜ðˆØˆÈ¸È¨„¨èÄè˜¤ØØ”¸øÔ„„ôÄÄŒ¤äÌ””ì´Tðæeedgåe—ä”çUhéӪ⚧¥Ïk+뫚_<{ÕRûæu}g{S78Þ–þw¯Þ µ¾oíœì’Nuʦ;³í sí¤m‹ÒW‹ÒÖ%ió’´iYV¿,«Y–W+åeJõôò@;•"E¥¶‹a€"ûro@îÈ]W[¬þl¥OÀ>ÿVµf¡jÍ|¥–¢BKQ®-/Ó–•êÌ•¬›)^?U¸q¢`ÓXþWïó¾Èý®7ûÇ·Y?·gþÒ’¶³1iϳ¸C•ÑGK"NæŸÍô¿˜äs-ÎãV¸à~ïQ[OÂ0ò¥šx‘,<ˆw‚•g#ÄÚººÀX>ÎÅ!8x$›€a±,žI&2(dÊ Ñt:c‘ù!{U»òß‚ÿIPè!yºi=ÀCêíçýo‚ÿÿ€CB£BÃbÂÂcÃ#â"""££¢“bbSbãRããÓ3“2““³SSsÒÓò2AÁÌÂܬâüð)¬(ɯ*/|ZYTS]ò¼¦¼±®ª¹éé«—5o^Õu¾ièîxÑÛý²¿·u°¿mx°mtøÍøHûÔXÇÌD‡t²]6ýF1Ó¶0÷ú£´uQúrIúbIÚ°$­[–Ö,Ëž,ËÊ”òB¥"W¥HW)’UŠX•"P„  ð+v\@Î\m±ü³•>–}þAÓBé°ù-E±–¼H[V¨#+ЙË_7“·~2÷‹‰œMcÙ_ g~ÓŸ±¥;ýÇÎÔŸÛR~mNü½>nouÔ¡²ðc…!§²Î¥‰/%x^Ýå=â<ögê‰iFÞdS‚…;↳bm\]lùÏÅ‹…sp6ÉÂc˜& Ï J¡ƒˆôDƪ¡‘ÅúqEЕÏ n®B¡ÈSäæíæ®ôôòóòö÷ñ ð‰ýVÁ†EG‡D‡„Æ„†Å†…Ç…G$DD&FF%EŤDÇ¦ÆÆ¥ÅÇg$$f&%e''礥楧ågfædçf•ä”çU•TW>«*~þ¬¬áy勯êÖægm-µmõoÛ{Þ6÷õ´ ¼{5<ðjtèõøû×S£m3mÒÉ×ò©WŠ™–…Ù—ç^,j얤ϖ¤Õ˲ŠeYñ²<_)ÏT*RUŠx•"J¥U)…/ ðB@Á WûXðÙ§>ÿÿùBþ°ù¼5Š\-E®¶ÉërŒèF¸àN û¡?󱘮ïM1ò$šŠpBÄk%p±áclyhãÀq³±ÉÀ£:G'èd"J¡ié4ýDÖ'Dðw øËte†®Ÿfè.‚‚^  »‡¯‡ZPâíà#òõ KBüüCýÂ#ƒ"ƒ‚£ƒBb‚CcCÂâÂÂÂ##"“"£’£¢ScbÓbãÒãâ3³“rR’óÒRóÓÓ ³2г3Kò²Ë s+Kò«Ë žUÕV—6Ô”¿¨¯jmzúúeMû«ç]oê{:›úÞ6ô¾êoln™i™o‘N4Ë'_(¦fê?Î=_šíª–¤eK ,oYž¹,OU*â•j»•Â_¥ðV»S PÐ Pà;¯ö1ûó•>hZÈZ3–©¥ÈÔ’ghËÓµei:Ò4ÙÔuÓ)&’¾Kür$á«øozã¶tÆüÔ½­%ò×ú°]OCö•.Ïö=“ây!ÁíJ¤àF(÷Ž„ùHL×õ¡ê{’ŒÝ ¦B¬…« DàbÅÇØðж\4Œƒv`c™.IÇ¡éx ˆ£‘ð42‘J!k©4PðoÃÿFäq8|.וǪgèê®™¡—f†¾ž~ž^/PÐ7ÐG,ö ñ“„JÂý##ƒ¢ƒc‚BbƒCãBÃBÃÃ"’""“#£R¢bÒbbÓcã2ãã³³“’rS’óÓR 2ÒŠ²2Jr³Êó³+‹òªKóŸ•Ö>)ixVÖTWÙÒøäuó³öÖÚ®×uÝ ﺚú{š‡Þ5ô¿z1õþÅìØ Ùx£|²~~êù‡™š³ÕKs•Ks¥KÒ‚eYβ,}Yž¤”Ç*áJEj^¬š÷TÍ»ó`ž̯ءP8 ØjR?_-åó…”5`óÉkÉZŠ$-y’¶,Q[š 3—°v&~ÝT܆ñ˜/Fc¾|ýUä·=ß·‡ýÔ²íEðöÚ€]U’ýE¾Gr½O¤{ü™ º#ø+Œs3y×—öØ›¢çI2pà q¦|Œá¡­¸hÊ–‚±PL´#ƒ »8Ó°(C%`©D<•D ’I "õâÊéš'‘¡ù]Ãdªg"r¹ ¢ˆ/p¸z…^B‘ZÐÝCìá%ñôðö ôög"ö õó—DH"ý£‚bƒcƒBâ‚CãCÂCÓÂ"’Ã#S"£Ò¢¢Ó£c2bã²ââ³s“’òS’ ÒR‹2ÒŠ³3Êr³* sžç=--¨©,®¯.mª­xY_õª©úÍËg¯jß¾©{×ÙÐÿ¶q°·q¤¯a|°aj¸av´^6ö\1Q3?UýaºêãlùÒlÑÒ\Þ’4cY–²,]–G(ÁJ…X©±SÍsTó4`žÌ»ó`„³6€(ÌWûÿùJ êÖÌÇi)bµä±Ú²0i´Î\ôÚ™Èõ“‘ÆÃ¿ ÿr8ìë¾oß߸µÅ[£dû3ßÝÞû \"\K¦%Ó–…jKCuæBtfCÖN¯ŸÚ0¸é}À—Cþ_÷ú}Û%þþ•ÏÖfï_ê½vT»ï.s;çz4ƒ*‰{6†})œq5vKL¾çIxìŽ×á .Æ<´)iÁFZ²‘V,g¦3”álGGÚÓQŽT´ƒ » ÉX4ïB&àÈD<™D$“Ôˆõ§F¤jžDð÷)m‘ ÎÅâ±Ù| ¢ÇwÓÌÐÓUè-ùˆÜÅn¯Oï@/Ÿ oßoq¨_¸¯$B,‰ôóö ˆ‘ÆúÆÅ'…$‡&‡„¥„†§†E¤GDfDFgFÅdÇÆæÄÅç%$ä'%¦$¥§–f¦—çdVågWæ>+Í^QØP]Ò\SÖRWñº©ª£ùI׫§½ojú;j»kFzŸ÷?ªžy"­PŒ—.L~˜Ê_œÉZšM]šKX–F-ËB—å’e¹·Rî¦TðT ¦JAR)p*R}3Õ|àî,…  0z€âñj ’ÏWš—¬SøiÉý´dbm©X{N¬3ë»vÆgí”Ïúqï#^›†<¿ðøºÛý»vÑ-Ÿ]­üVÉÛSÌ9˜Í:–Ê8O?I½B¾*!ÞòÁßsÃ>ºè Ð<”1iÊB˜3–L„°¦# 4';Fuv  àd4‚„A’\P$,†„Ã’ð8‘@"ªÉêOHQTº:‘"² “ÉÕ 8W.OÄã»óžWoW¡ÐM,r—¸y¸{zxyú„xù„zû†{‹#|ü"}%Ѿ’±¬Ø?N/ LðJ N I M K O‹ÌŒˆÌŠŠÎ‰ŽÉÍ/HL(JI*IK)ËL«ÌÎx’—õ´(·¶4¿¾²èEuÉËš²WõåíM]-•½¯«úß<êªé©齃,Ÿ{_"-œË[˜Èü8•¶8“¸4³4¶, X–ú.ËÜ”2¾RÎVÊ)*9^¥@©NšÇÎæ?튀âîjókþN¡Iî¡&s×–ºkϹé̺­­­nvÝ4(øª¿¹‹÷ÝîÍìmõ¬í5Ìåô½…´ƒ™”cÉäÓ±¤sa„ËAøkbìm/—{BôcJ4à8±& 's†“Ý Bs²¦Ám¨p[ŠŒŒ°'!I('"Æ™ˆA±"Î…ˆÇ 0‘¤ùÔˆš›J£P蔿l5"‹ÇbóÙWWÄå¹óøž|W/ÐÇU$ºù‰<Ü<ݽ‚<¼C<¼Ã<}½|#½ÄQÞâh¿¿X_IœØ?^à˜( JòSƒBÓ‚CÓCÂ3C#²""s"£r££óbc âb JR’ÊÒS*2Óª²3ªó³kŠrëÊó›ª ›Ÿ·>/}ÓPÚÙ\ÖÓZÞßV1ÔY6Ú]:ÑW23P4÷¾@1’3?–±0‘üq*~q&ri&diÖyÎkY*Z–q”2ºRFVʱ*9R%wäv€ÜJóÞÚÆN~ß\MÁ]óïÉ9`Z2Ž–”£=ÇÑžeḛ̈×N³ÖM07Œ271¾ì§ÕKÛÜAÝòŠòcyÛsÒöjâξ<ü¡4ìñ—ÓQ˜sÁèËþ¨kÞÈÛîÎ÷øˆÇ<„ÇÉ€7bÀMhŽf4G ª£%ÅÑŠâhCv„’àv$'{¢³# Ç£x4ï‚Æc1,–€Ç«#5[)êÈT2™F^A¤2itÁa0¹D›#äpݸ|žÀ‹ïê#Š]E~Bw‘G È#ÈÍ3ÄÝ+ÌÃ;ÂÃ'ÒÃ'ÊÓ7ÚÓ7ÆKë%Žóö‹÷‘$øú'Šý“ü’%©þAiÁéA!Á¡™¡áÙa9y‘QùÑÑ bqB|irRyZJeFÚ“œŒgùYÏKrÊó_T¶<+l{^ÔÙTÜó²¸ÿUÉP{ÑhWÁDoÞL®t8K1’:?š¸0õq2lq:`iÆgiÖ}yŽ·,e(¥D¥ «”¡T2G•ÌYrs@n Èõù#@~ßѨ]äWù•ÕÔ5'W§%Ó$¥jÏQµg):Ó”µSäuãä #¤/‰_ö¾î!|ÓŽßÒŠû©ûKËŽ*ÌïEè}9¨?RÇãœOG Î"®ø9]ó„ßÁïñsõXŽú #ºƒ ÅÁŒâ`Nv°$;X‘¬‰P¢£-Ã#pÎp C;ã0(œ çâ‚Çáð8¼Ú¯Ù"‘¬¹©jDÒ*"ƒJcÑèl:ƒË`ò˜,‹-dsÜ8<.ß‹'ðỊB?W·¡{ Ð=Xä"ò sóŠpóŽt÷Žr÷Žöð‰ñð‰õðóô÷'xû%úH’|$É‿ÀTI`ºpF@pfPhvHXNhXnxD~DDAttQ\lIb|YrbEjrUfÚÓ܌ڬ†’œ¦ò¼—Õym5ù ù=/òû[ †ÞävæLôdÍôgH‡RïæG£ÆC>Nú/N{-͈–fy˳´å9¢RŠVJJ©ƒJUÉ €Ì2]@þßÕØÝødw _XM[³’\˜L“§=‹Ó™ÁêLa×Nb×¹lÆ|Ñþªýõ[Ô7mÈï_"ªsþå)â· Ä®§ýYð?’Ç8žs8àpYìpÍÃþ–ÐþÇþË^— Ó§Á ©0cÌ”3#Â,0f…‡Ùà 8G;,ÜÞáàâ wA"\PH4 ‹Ac]\°X,«–ÔÌ‘:ˆ" ìoD&…Æ¢Ò94—Îä3XB&ÛÅñ`s½8<®@Ìs•ð…Q À-ØÕ=ÔÕ=Lè!ôŒzF‰¼¢E^1"¯X7ï8wïxwŸßDOq’—8ÙÛ/ÅG’êëŸ&Èfúeg…䆄慆ˆEQQű±eñqåI •iIO3SjrÓë 2šŠ³š+²^Wgu<ÏêiÌî{™=ô:c´=m¢;eæ]’t0^15?²0æ÷qÂkqÊuiš³4C_ž%.Ϲ(眔R{¥ÔV%µTIÍT+|²€ì. »ȯò¿Ùe@vdgW“Ã׬æ¤&ûÔœ“ö,\g¾v¾nÂqýˆãÆ!‡M}_õØoî´ÿö쇰­µv¿>±û­ÌnWžíþ Û? '¢ §C ç$ÐËÞЫnÐ[|è]ô!ú˜Õ£@ HP#Ô5ÅÙšcm-°¶;+ ÌcE;Ø¡áö('GŽvF ‘Îh Fc0ÑŇU;px"èˆ'AG‰J$ÓI™Â¢PÙ—JçÓ˜®t–ˆÁö`r¼X\o6OÌæK8‚®kW̆òDa|·¾[$ß=Jà-pxÄ <â\=ã…ž B¯D‘w’›w²»OЇoª§8ÍÛ/ÃG’éëŸå- Ì Ê Î - +ŽŒ,Ž*©HŒ«N‰¯ÉHªËNnÌOm.Iy]‘Òþ,¥§.¥¯)e¨5q´-~¢+vº'zn \>8?,^uÿ0Îÿ8ÉXš¢,Mã—gP˳påœrÎZ9g¡’«¤*é#@zÝd7ÙU@vIcwý ÈβS«É¡Z'³U'µÕž³ÕžêLA×N@×C׿·Ù8h³©×úë·Ö›;¬¾mµú¡Ñjë3«í•%Ý9iÃqÓAsbÈe/ÈU¡ÕMžÕ†õCšõ#е.ÉZŸ`mˆµ6ÁÚ˜ºØ˜a æh¨%Ê‚²³FÂlö¶H˜³£ƒ3Üéä„D ÎÎ($JÃè‚Á¬"‚o#GÄiñD*D#’D2“Da“© G¥»Ò":ËÎöd°½™\1‹+añØü ¶ „ãÊq ç #¸¢(MÑ\·®[,Ï-ŽçÏwOx$ <’\=“„^)"ïTwŸ4ßtOq†·_–$ÛW’ãçŸ+ È *) + /‹Œ¬ˆ‹~’ó,5®.#¾!;ñEa«҄ö'ñݵñ} ñC/cF_GMt„Ow‡ÎõÊ|Cî #¼cŒÄ¥IìÒjiÚqyÆN9k¥œ3WΙ¨æôUsTÒ{*ém@zþ¥áÓìNzž¤'éñÕd¦Zÿ•ÔTlÖTgÚtí”éÚqÓõ£&ë‡L¾è7ù²ÇøëNãoÞ÷ÒøÇz㟫·—ï,4Þ“e| ÅøpŒÉ‰0“Ó&ç|L/y˜ý%0»Á1¿C³x@±xH²|Œ·ÔÃZ` Æhˆ ÊÊimælmް±D@!N¶ÖNvP'˜­“=ÌÉÁÞÉч#œœggg$ ΣqÄa\ð.XGÄâI8G â‰t Dd)l•G¦ (t!•áNezÒXÞt¶˜Î–08Ln0“Âä‡1ùá,A$KÅrf¹ÆhŠe ãØÂx¶0#JàŠ¹nI|÷Gª«gšÐ+]äáî“éá›åé›í%ÎõñËûH ƒŠƒƒKCCÊ#êbŸ&D>OŽjH‹nʉzUÕ^Ùý4²¯.bèEèhKÐøÿé.¿¹wÞò~‘b;ÿžúaÿq¹8_š´_š²^ž¶TΚ(g •³ºª¹ª¹;ª¹*é5•ô2 ½HA»Ó;Pí =Ìý±šLOëß“êiKõÕÍêëLë¯Ô[7¦·~DoàÞ}z_¾ÕÝÜ¡ûm›îw/t¬Óý¹JoG©Þïùz{2ô&éŽ28bpZbpÎËð’›Ñ_<ã,“ÛTÓû$³‡³GXs=Œ¹>ÊÂiaìli‚€˜:Y™Á­-m,m¬m­í Ž0;G{˜£ƒÜÑî œV‘H‹F«1X‚ D$cñ " GdàI,™M p‰T‰&$ÓÝ) O ÛÊSY;Î ¦sBèÜ0:7œÎ‹dð£èüh:?FS,CÇÄ3 L×–k"K˜Ä%sÝRxni|tG†Ð3Sä•åæíî“ãá›ë-Î÷õ+”øû”–…WE„< ­«O oÊ kÍ }SÒ]ÜW<Ôè?òÒo¼ÍgºÓs¶G${ÇU Ðç‡ñFPÇÇm—&¬—¦Ì—§M–gô•3•³”³wT³7UsWUs—Usç?ñPÛÍv‡¹CÀÜÁÕd÷´þNzL{NÓÌ}©ûk'¿áýý÷7½»ÿU×ýÍí÷¿}uoKãýŸjïo«x°£øÁï¹ö¤=<ðèpÄããAO‹uÏzè]ê_á\gÞ"Ý%ßÇ?ĘN4ÂãŒÄ"QjD†„v¡`°4 Žá‚g¹8X"GâÈîxŠ'žêM Š 4 ‘Hd!$f‰AbE‘ØÑ$vŒ¦X;ŒÌŽ'sÈœD 7‰ÊK¦ñRèüT† éšÎfpD™\QÏ-‡ïž+ôÈwó,ðð.òò.ññ)“øVúV‡Šk#ÄõÑâ¦$ßÖtŸ7y^o‹={+<ž ß×ñG›Ù“¯˜3é[¼¼£è‡/ Ú}xY1_5YÓ_¼¢j‰°6PX"lŠâ·$ðÚÒ89¬îBF_9e¨š8R‡xž~˜kwvÚÊ{ ó}æ>é/?^zyäÎòè åØUåøåÄÕäYÕÔiÕÔIÕô1Õôa`æ0³_Ó>`f¯¦=«ÉNk­$=­5wZ{ö´öÌiéÓ:“gÖŽŸY?rfÃðŸÿÜÔ{ö«®³›ÛÎ~ÛzvË‹³ßמÛZuþ—¢ ;r.þžviOü•‘ýxí˜ïõ“î7Îðocß¾H½s…x÷šËý›¨·î8êÞ‡é=„<¶1Ôµ6Ôƒé[Z˜Y˜[˜šX˜™Zš›YZXXZXB,! #b½²Hk[芣ƒ ³GØ; íAD¬#w&9!)ÝÍtư]øÎXWgœ;ï‰Ä{# bA‚"¢IÁhR(šŽ&G )Qj †«)C×” )CKt¡%aiÉXz Žž‚g¤˜iDV:‰AædQ¸Ù4^ƒ—ÇâpøEðŸv»ÿIv\k%éq­¹ãڳǵ§ë€M_7vbýû†N|ÑrSÏɯ:Om~}êÛ—§¶4žþþÙ™­n+8»#ëÜï)ç÷Ä\Ü~éÿ•£ÞWOˆ®æÞ8Ǽyrû áÎU̽Èû·œÞqx|ÏN÷µþ#+]ˆ¡ž¥‘¾…‘¹±¡¹‰‘¹‰±¹©©¹™™¹¹¹…¹Èhi±%-W¡VÖ¶Ö6v6P˜­Ôn CØÙ#a˜#ÖNpp"9"¨pgÉ‚£xNhW'Œ›“‹§Ö#p>ÐìLq&†;#¤($9IŽÕ‡$ÇkJДˆ"'¡(IhJ2šš‚¡¦¸ÐR]hi8z:ž‘A`fYÙ$v•Gã09Eln ‡[&àTº±«½Xµ¾Ìz ³)„ÖIy@êH!¼ÍÄ÷ J‡«ÇžÃ&_ØÌ´Xν6“u)ºõÞ=úØwÿãÀÝÅÁ›KC×–ß_QŽ\TŽœWŽþ©;­?¡š8¦š<¬š<L¦öS{é=švÓ»V“ÑZiîˆöìí™#:ÓGt¦Ž¬?²nôÈú÷G7 ý¢ïè¦îc_uÛÜzüÛÇ·ÔŸø¾úäÖ²SÛòÎìÈøó÷¤³»£Ïï½pÈïÒQÏ+'„æ\;˸~|ó2þö_è»7œïÝ‚?¸mÿèž­î+ýGýÇ–º†úæFfƆfÆFf&Æf¦&f¦¦f ¢†ÑÂ\3Gµ£•%Äb…XÙZYÛYÛØÛ@ml vζ0”­=ÆÎs$Ú;QtËÉuD ÑnŽOGŒ7ÜE w‘À±p\°.Ä æDˆ@¢Ä1VS‚¯Ž”€ %‚9“’Ô‘“‘ä%MIÃPÓ]hXz&ž‘M`ä˜yfUÄ`•°Øe¨3upíø¡u#‡6 Ú8ðÇ}lz{ø«öÛ[Ž|ÛtdKÝÑ龜m-9±-çäŽôS;ÏìŽ<»?øÜ!ñ…#—Ž .Ÿbÿu–~í<éÆ%Ü­¿Pw®#îÝt¼öð.ôñ}ˆÞ#KýǺæ†zf†ú¦F†¦ÆFêLLÔ†+Œfê9ª!–Ö–`Kˆ-ÄÊÎÊÚÁÊÆÑêdcëlc‡†ÚcmvŽdœsbÂ\{g=ÒÍåaò¶Gû:`$˜— —Gl˜#.Ž‚ãcà„X8!NS<œ )QS’1ALs&¥:“ÒPät4%CÉt¡faiÙZ‘^@¡Ñ%tF‡^ŧU‹(µä:Rcþe¶5 ó&Õ™ŒìÎrìˇ –ÙŒ<Œ?7›n4ži6˜{­+o8ÿöÛ{o.ö]]¸²ÙŸǧ iN„tgb’”‰"e¡ÉÙ.ä<¥€H)&QK)Ôr¹ŠCªjÝpužØ1¦9Õ†h‹rêˆw|›f÷.Ûz Èâ}¹éØ3ÃÉçúÓçZÈ^ßUtÜúÐuãC÷µ½Wû.. œ_<«:£>©>¡zT5rD5ú‡jì 0¶ßŒïÆ÷㻉]ÀÄï«Iwi­4·K{f—öô.É]k'v­ݵþý® ƒ»7öíÞÔ»çËŽ=_¿Þ»ùžoë÷oy¶ÿ‡òƒ[ ÿØ–yd{òѱÇv…žÜpê ×ŸGDçŽñΟd\ú“råþÚE—ëWœo]ƒß¹aïôÁëG÷,tšë=2Ó{lª¯gb olh`lhhlfdld¬f\u431Yq´05³45ƒ˜™Y™™[›Y@Í-íÌ-aæ +¸…µ³¥ ÅZÙ­ak{ºµÛÆ‘oA< N^P„/ÔÙêEAQ!¶¨0;t„& æs‰…¹Ä©ÃÆÃ° š5%iJ¶Ç¦¨Ã¥:àÒqép|†!Ó™…$f£‰y.¤©˜@*%‘ËiÄ*¾š‡­qÅÔ¹£|œ_H-!Žmöí1°®dëÞ Ëþ|Óá£Ñ'z“5§ëξ¸+k½­xsc¡ãÚ‡®¿>ö\Z|wa©ÿìòÀŸË§•ƒ'•CÇUÃGUï«F©F£û±}ÀØ^`l0¶ßŒÿ¾ÚÜN­•fwjÏìÔ™úMgò·µã¿­ùmýðÎ ;7öþ¾©û÷/ßìúºu÷æÆ=ß>ß³¥zï¥û·æÜ–þÇö¤#;cŽî 9±Ï2Õ{l¢¯kl gd``dfhdh¤ù@FÍM5ˆ&&æ&¦&¦–&¦S3+SsSs[3 ˜™¥½™¥£9an…¶°ÆZÚ,¡dK[Æ‚Øó¬„VŽîVpOk¸µ“Ÿ5"Àdãbƒ ƒ¢" è([tŒ-&Ö§)Þ“`‹IüT’¦d;—;—T;—4˜Kš=6Ý›áˆË„㲜ðÙH| _àB(ÂJðÄr ¾ŠŽ­æ`jø¨ç"d½—Ó ±cKýë0»ö(hW"¤7ͼ?×d¸Èp´Bw¢úÑT̓™†»ÒæÛòW7Ú®-´ÿõ¡ëòb÷Å¥ÞsËïþ\î;½ÜR9p\9xT5tD5ü‡jøðþ0²ÙŒìFö¨ݽÚÜ­•fvhOïЙڡ3±}íøöuïw¬Ú±¡ÇÆžß6uýöeÛί[~ßܰëÛšÝ[žìþ¡dïÖ¼ýÛÒmOücgô‘]!Ç÷INôÔr4‚d úúe§[×î\·»{ÓæþȪàCS½GÆzºFúz†ê4ŸQ³E#£Dc3csc cµ ‰©•‰™µ‰9ÔÄÜÎÔÂÞÔÂÑÔÒÉ ‚2³r1·&˜Û, T [–¥×æ ±wƒ8xB} p±•“¿•S"ØÚ9ÌaƒŠ²AÅØ bmÐqšâmÐ 6èÄO%AÑÉPt “j‹Iƒa2ì]2\2±Ypl6—‡Ä qE.ø¾Œ„­¤až°PÏxÈ箈zOx“¯ÃË»×!Ð7‘Öñ–=)f}ÙFC£eº•¦ž>˜©»+m¼-yc¾õÚÂë¿>´_þØyq±ûÜRÏÙåÞ3ËïN*ûN(ûªލ«†©†Ã€áýÀû}Àû½šö¬6»]{¥™íÚS¿êLþª3þëÚ±_Ö½ÿuýà¯ú~ÝØ½}Sçö/_ïøºù·Íu;¿}öû–Ê]?íÙš»o[êí ‡vFÞ|lŸäÄAÓG\5‚´‹gHWÎa¯^D]¿ ¿uÕ^#h­¼köøéã‡&º êÿ¢f‹†Æ†+ˆjGS#c3#cs# ¢±)ÄØÔÚØ jlfkl31w0±p2±D™ZbL!xS+’™5Õ̆iå˜Û ,`nö–Þ–ŽbK¸?q ¶B„Y9GX#£¬‘1ÖÈXkdœ:T¼*Á •¨)IS²5*ÅF]*•E§Û¢3ìÐ0L¦=&Ë“ wÉC¸ä#±Ehl‰ ¶Œ€©¤ Ÿ0‘Ï8ˆZS»C“7ì¥?ôU°õ›pHgœyO’i_¦áPžþHÉã‰ò‡SU÷gjîÎÕÝ–5ÝP¼¼6ßzu¡íòÇö‹‹ç—ºÎ.uŸYî9µÜ{BÙwLÙwTÕX5ð‡jð0xÛ íÓ´wµ™_´WšþE{j›Î͵c?¯ýyÝÐÏëûÞлmc×¶MíÛ¾lýåë¦_7×nÿ¶zÇ–Šß~(ܵ5{϶”ýÛãîŒücWÐÑ}~ÇÕ‚‚?±Ï¤^Á=m›ý¬_BÞ„ZtD›ö$÷¥ eë>š(y0U~ºúÎ\ÍmYý EãõùWZ.x}ñã›ó‹g—:ÿ\~{j¹û„²÷˜²÷¨êÝUßaUÿ@ÿA`쀦ýÿ4³M{¥©Ÿu&ÖߺvtëÚ‘ŸÖ þ´¾o놞­;·nzóó—/·}ÝøËæš_¿­Ú¾¥lÇù;·fíÞ–¼o{܇vÝ'>~ÐýÔaPõIsõ¢óõË·®Úݾ½{rÿ¶ÅªàãÇ uèéê¯~úÿá>Ɔ`&†¦Ff ¢‘…¡±¥¡±•¡‰¡ ÔÐÄÎÐÔÞÐnhælh†64Ú -ÈFº±Û؆ošØº›Úy™Á|Íì%ææÁŽ¡ðp §(KDŒ%"Ö§)Þ‘`HÔ”dH³D¤X"R!`ÎiVÎéÖÎÖΙ6ΙPd–-2†Ìu@åÃQEt1]ꂬ 8WQž2k8Ï]íݡ;V¯ü-Ú‚Í:"»ã ûRô‡2uGòN=˜,½7]yg®ú¶´ö¦¼îº¢ñêBó•-—>¾¾°Øvn©ýÏ¥ÎÓË]'—»+»){Žªz¨ÞÞúV:øp+Mü¬3¦á{ÿÓº¡ŸÖõÿ´¾ç§ ]?m|³uÓ«­_6ýüuݶÍÕ¿~W±}KÉŽrwnÍØ½-qߎ˜;Ãíö?²ÏçøAѩü?1Ï$_<ƒ¿|}õâúeØÍ«¶·¯Yß¹ayï–Ùý;Æï=z`øø¡î#}]]=õ§¯§¦ž£&C}#MÆšLô ÍÀ Í Œ, Œ FÖÆP}c;}c{}G}g}S”¾)Vߌ``N6° Z² ­xFÖ®F6nÆPO[;?SX€©}™C¨™c¸9<Êc5‡Ç™ÃãÍá fðD0s§$MÉšR,œR-œÒ,é`D†"Ó‘e㜠fçœCæ; ‹àÈ'T)Ú¹‹¨"ŸRjèöuÛFM³‡Õ+Ë7~f!&=‘F}ñúC)º#™&rLåߟ)¾7WvGVu[ñôæ|Íõ…º«¯|l¾´øòÂRëù¥×g—ÛÎ,·ŸRvœRvžPuWuÞÞU× väŸ&4vj¾ŸuÔ|[ׂ|?®ëýqýÛŸ6tü´ñõO›Z¶~Ùðó×µÛ6?ù廲í[Švü³skúîmñûvDØzh·äÈ>ïã…§sΣŸ;Iºxwù,ò¯ ðk—ìnþ½uÍêÎ ‹»·Lïß1zxÏðá}ƒGô?ÒÓ} jÒW;ꀎzú†šŒ4ë˜è˜ê˜é˜ëZèBô ­õ zF¶zFözÆŽzÆÎz&(=¬ž)þÿ¡¢®ãÚºþ€ÿÑä&÷F 7H ÅB’’7ÜÝÝ­hii¡BÝ×®î.[·uíº­“N;wïÖ®n@r^¥ëóüžózÿyÎ}Ý×ùÜïÍÈïÉ(È(\Y´0³xqVÉҬ҉첕9kr*ÖåVn̫ޒW½-¿vG~íËùµ»òkwç×îɯݛW»oV~Ýþ9æ,¨;TPw¸°þȬ¢ú£ÅõÇJê—6œ˜UÞpº²ñluãùšÆWëš.45¼ÑR©£öJwÍ;}ÕWT|¸°ìã±’ÏÇ‹¾XYðõúÜ6gÿ¼3ã÷½î¿;ÿ9ê¸uÂ~ûŒõîyËý æ‡o¤?ºdx|%íÉ»©Oß×L}˜2}-iúãÄ™Of>Sy?÷^Wú¾ˆ›¾Œ_ÍŠùÏ×Ñÿ¹1×nÖŸ ìïsù~¦Á?Òïh¸¯høë4Â'tâ5:é*Ãï “ò;ðUNÐYõxã ½[ÄÛ²I"\--/Ž“ ÇGõ«c»’âÛRS“jÓR* ©¥F]±IŸoIϵš2íÖL‡-Ãa÷8n—ËåvÏñ¸<îg2çdÍÉv{rܹoÎþ9òjgÌ«=”ÿÌá‚Ú#uG ëŽ=s¼¸îDIýɲúÓåõg+ÎW5¼ZÝøZ}ýÅÆºK­5WÚ«ß骺ÚWñá`ÙÇ#%Ÿ/.úriÁ7«rX—ýóÖŒßwºÿÚç¼yÀñïaÇícö»'m÷ÏXž7?ºþø¢áÉå´§o§N½«¾ª™~?eæÃ¤™½³>Vû>Ið}š>SýçóøÿÏl¸çæòa¡Ï惿§"ßÐp_ÐðŸÑшÐHï0ü.3ý_c¾Â >ã a²_ñ¶E†n”'墉hñ¢8Ù‚ø¨¾„˜Ž$ekŠªA›X£K)×kKŒº¢t}žÙ˜m5eØ,»Õã°¹—Ëéú߈îŒ9™.OÖœìÿ"zrÝž<·'ßQàÎ(re”¸2Ê\™®Ì*Wf­+«Á•ÝìÊnsåt¸rº]¹ý®¼AWþˆ+Ô]°ÄS4žQ¼"³d2³tmVÙúìŠÍÙ•ÛrªväVïÊ­ÞS½'§zoNõ¾œêýsÌš˜[s0·æP^ÍáYùµGòkÔ+¬=>«¨îDqÝÉ’ºÓeõgËëÏWÔ¿ZÕðZmÝÅúÚKM5WZªßi¯|¯»üZ_Ù'ƒ%×Gо-üv"ïÇÉì_6fü±Í}c—óæÇ¿û·9î±ß?a{xÚòèœùñã“7 O/§M½¥›~;uú]íÌUÍÌû)Þ’}&û®%Í%>óñœOÔÿÏïsífýÊÀþ<›?ûÿ¤"_RqŸSñŸÐÒˆWi¤+ ¿7™þ¯²Ïq‚Oñ¨‡C˜û„ì"Þ–ÈÐõáJyIJhñÂ8Ùüø¨ž„˜ö$es²ªN›X¥K.Õk‹ º‚ô´\³1Ë’î±YÜ6«Ûns9ìN§Ã9WÑér;]§{VÆœL§;ËõL¶ËãrçºÜy.O¾ËSàò9=%NO™3£Â™Qą̊uf68³šœYmÎìgv·3§ß™;ß™;ìÌ[äÌ_â*Xæ.\î)^•Q²&£t}fÙæ¬ò­Ù•;rªvåTíήړ]µ7»j_vÕþìªÏåTœs(·úð35GòjŽæ×˯9^Ps¢°öDQíÉâÚ3%ugKë^)«¿P^ÿZUÝÅšÚËõÕo7V½Û\ù^{ùµ®²OúJ®Ï/þj¨ðÛ%y?.Ïùemæ›<7^rÞÚéüw·óÎ>ç½Î‡Ù²<>gzòªñéú©‹úéKiÓoéfÞNõ¾“ê}W뽪õ½§ñ½¯³>HyæÃÿßO,ø¹˜ðwLøò%¹NG>¥á>¢ã? Þ¥¯ÐI~Xþg9§¸ÁÇxÔ¡ÌÝBö6ocdè©pB.Z-^'ë‹Wt$D7'ÆÕ'ÇWiÔeÚ¤B]J~š6Ç Ë4êÝ&ƒÃlrXÌv«Ån³Úf—Ýn³;lç—Ýé¶;=vg†ã™L‡+ËáÊv¸rçä9\w‘Ã]âp—9ÜvO•ÝSkÏh°g4Ù3Ûì™ö¬n{V¿={¾={Øž³È‘»Ø‘·Ì™?á*\å*Zã.^ç)Ù”Qº5£lGfù®ÌòÝ™å{2Ë÷fVìϬ80çବÊY‡²*gϪ:’Su4§êXnõñÜêyÕ'ójNåל.¨=[P{¾°îBQýëÅ Kë/—×]©¬}·ºæýšêª>i®ø¼½üË®²ozK¾*üy4ÿ·‰œ¿Vgý³!ãßÍw¶zîîðÜÙýpûÑ~çãCŽ'ÇlOOZ§ÎX¦Ï™§_1ͼ–>ózº÷¢Ñû¦ÑwÉà»lð½¥Wæ¼=ç´ÿç;üÜ7lø+òùŒ|BÇ]£ãß§ãߥÞbßd^cúgùŸâçæS÷†2w†±7GðÖ‰CWI…K¢EÑâXY·RѪŠnHŒ«IR–§$kóS“stš¬4­Û sõV“ÑjJ·šM‹Ù2»¬6‹m–ÝjsXíN«Ý5ËæðØöYÎ,»3Ûî̱;síÎ<»³Àî*´»Jì®2»«Â殲¹kmž›§Ù–ÑfËè°evÛ2ûmYómYö셶ìÅöÜ¥ö¼ Gþ*gÁjgá:WÑ&wñVOÉOé.OénOÙ^OÙ>OÙ~OÙOÙÁŒòY‡feVÌ:œYq$«âhVå±ìgNdWÌ©:•S}:§úLnÍùÜÚWóê^Ï«¿˜ßp©°þJQý;%uï•Õ~X^ûQuõguU×›*¿n­ø®£üǾ’_†Š~_’c"÷æê¬Ûk³înȺ·9óÁ¶Ì‡;2ïò<Ùë~rÀõô°sê˜cú„}ú”mæ¬Õ{Þê}Õâ»`ñ½fö½nö½aMàÍ9—æ\~á .üÜçäSò1ù…{Ÿ‰{—¿Â \fß`’.0IçX~§ÙþǸ‡yÁûC¨/ ˜ÛÂØ"x«Å¡Ë¥ÂÅ ÑPtdo¬´])oTEÕ¨c+㊓Uù) ÙšÄ m²;5Åž¦µêu&ƒÞd4˜ŒÆôÙe2¥›Íéf‹Él5Yl&‹Ýlu˜­N‹m¶£Ûjϰ92mŽ,›#ÇæÈµ9òlŽ|›£Ðæ,±:ˬΠ««Êꪵº¬îf‹§Íâé´xº-}–Œù–Œ!KæBKÖ¨5{©5g–»Ò–·Úž¿ÎQ°ÉQ¸ÕY´ÃU¼ËU¼ÛU¼×U¼ÏUrÀUrp–»ôМÞ²YG÷é¦Ü©­¹ÓÛs§wæÌìʙٛí=å=”é=šá;–á;‘á;é§<à´œ™svι> Až{Ÿ\åáÞáâ®pð—Ùø‹,Âk,«,â9é4‹|œM9Âõ?À Üür(u›±1œ=É[.“ ‡¢þ¨ÈöXI£RV¯(Kˆ.RÇæ&*3“âÉ öµU“dÒ&S5iºÔ4.-m–>MoH3Ó ézã,³!Ýb4Y&[ºÙa²<˜a±eZlÙ[ŽÅ–k±å[l…f{‰Ù^f¶—›UfG­ÉÙ`r6›œm&W§ÉÕîêKwÍOw¥»GÒ=£¦Œ1Sæ¸)k…9{Òœ½Ö’³Ñš»Õš·Ã–¿Ë–¿ÇV°×V°ß^pÐ^xÈ^xØQôÜgñ¬£®’c®’ã®ÒãîÒ®²S®ò3®ò³®Šó®ÊWœÕ¯;k.:ê.;Þv4¾ël|ßÙtÍÕô‰»é3OÓõ¬Æ¯s¿-hø¡¸þ粺_kjþlªºÑQ~«·ô΂âû#EF‹.-|þ‚G8Æ#á‘ñHûø~»Cüw„nmRׄÓWˆ˜K"9Ãþ€4´S.lV„×DG”ÅŠ ã¤9JyF¼Â©Š¶©bÒâ jeZb|jR‚&I”œ””’<+9E“¬™¥MÖ¤¦hu)Ú4MêlJƒV—žšfNM³èô¶4ƒ#ÍàÒ=zc¦>=Ûžk0LÅs©Á\n°T,µk£ÁÚ¬·µëmz[ÞÞ¯·Ï×Û‡ô޽cTï3¸Æ îFϤѳ6=cSzæVSÖNSönSö^sÎ~sÎKî!KÞ‘ç¬yG­ùs ŽÛ OØŠNÚŠOÛJÎØÊÎYË_±V¼j©|ÝRõ†¥æ’¹îйá]sã{æ¦ÌÍYš?µ¶\·¶|ikýÚÙò»ù‡¬æŸsš~Ëoú£´áFeÝÍúšÛ-Õw;+ôV<(4\ödQéÓ±’©e¥S¥Ó+Kg&KgÖ–y7”z7•z·–x·—øv”ø^.ñí*öí.{‹Á¾b°¿˜sðœ•àž;‰;;Ž;.Ä Å Å %%ì %î %½ê·]@Ù, Ø´6Á³û%ÜN)¿I.¨UË¢DÑÙ±bwœÔ'³(éʨ´øèTU¬F—œ LTÇ«Õ ‰‰ ‰I³f‹ª“RÔIšÄdmbrjRŠ.)EŸ¬1¦hÓS´fMªU“j×ê\©ižT}¦Î£3äëŒEié¥iéåi¦ê4Smš¹QgnÑYÚu–.¥Ggí×Yçë¬C:ÛBmTg_šæOs®Ô;'õ®u÷&ƒg›1ãecÆcæ¾ô¬éYMÙ‡M9Gg™ŸË=öLþ sÁIsáiKñYKÉ9sé+¦ò ¦Š×Ó«.¦W_2Ö^1Ö½clxÏØô¡±ù#c˧é-Ÿ§·~ijýÚÔö­µíGëOîÖ_3Z~Ïnù« éŸ’Æ[UõwêêîµÔ1Ù˜œž”bNÒX“µÎ”T·F—¡MËѦå¥ê‹R ¥©ÆòTcujz]jzcª©%ÕÔ®5uiÍ=Zs¿Ö2¨µ k- S­£©¶¥©¶q}¥Î1™æX—æÜ¬wmÓ»_Ö{ö<ûŒŒ™‡Ò³Ž¤gMÏ>ö?ާçž4åŸ2œ13¿’^zÁXþº±â¢¡ê’¾æ-}í;úú«úÆôM×ô-ë[>Ó·^7´}ehûÖÐþ½¹ý'kÛ/޶ß]mf´ÝÈm¹YØüoY㪆ûõu›kµ×<î©~:P55\9½°jz´jf¬jfYõÌòjïÊjïdµwmµo]µocµoSµoKµok5ØV ^š³£ìœóò £pÏãöKqû$¸½¸=á¸]aø—Ãð;ÂÛÈÛÂH›ÂÉëÃ)«E+#'"‚F#i Äôn1«U©—r+dübyhŽBè‰ ·G‹ÌёƱ.F¢‰‘&ÆÊÕ± U\”2.:N7G¯Š‹Oˆ‹WÏRª’”ªäø„”øM|BªJ¦RÓ’̉Éö¤W’Æ“’š’š—¢+Ò¤•hôåZCµÆP§14jŒ-c‡&½K“Þ£IИ5¦ay¡Æ¼XkYªµŽk­+Sm“©¶u:ûfc»Îùrškoš{¿Þ}Ðà9dÈ8jÌ<6çø3YsrNóNóÏ _1¿j(}]_~1­â’®ê-]ÍÛºº«ºú÷u×tÍëZ>Õµ^×µ}©kÿ&­ý»´ŽŒ?›:~µ¶ÿaoÿËÕþwVÛ­ÜÖÛEÍwËšîW7>¬oxÔ\ÿ¤³öioÍÔüê顚鑚™Ñš™%µÞeµÞ‰ZïŠ:ïª:ßê:ßÚ:ߺ:߆:߯:°¹l©[ëÀ¶9ÛëÀK/ìRâž{9÷r4n§÷’ ·]‚Û&Æoã7‹ ÅÄ bÒ1y•Øo\ì?&X$š/¦vKhÍF”U!eʸ92¾[j“ ÒaiŠp­B”¤ˆHˆŠTF‰c£$1QÒ¨h™"Z.‹VÈ££äÑÑòèEt윸¨eTŒ*:&!:V››§‰ÓÅÆéc•éJ•E™`W»T‰™ I9 Ʌꔵ¦"Q[“¨­OLmJLmMÔu&êºÓúÓæ'ê$êG £IÆ%IéË’Ó—§˜V¥˜W§XÖk¬[4ÖíZÛ.­}_ªc¿ÎyHç:œæ>ªw×{Nè3fÔgžÔgÒçœÑçKË%­èBZÉ뺲7uå—S+¯h«ßÑÔ^ÕÔ} i¸¦iúDÓü™¦õº¦í+MÛ7šŽï´?h;JëüÕÐù»©ó/Kç߶ΛîŽ3ÛïäµÝ+j}PÞü¨ºéq}Ó“–†§õS½uÓýu3ƒõ3ÃõÞEõÞ%õÞ¥õÞñzߊߪßêßšߺ°¾ll›Àæ°eÎÖ°­ñ?Ûո綩p[•¸­±¸-Q¸ÍrÜF9~ƒ ¿NFX+#®–WÈÈËd~£RÿiÀ 4°[Ü*¥ÖIéRf‘”•#åxd\›ŒŸ. ÑÉBSäÂDy˜J' ’E(äry¤T.–È%b¹T,—Iär‰\1K*’Ê£¥òX™"N¦PÊ*¹"A•$JVDiÑ©QÑúèXStœ5Féˆ÷Ä©²• JuI|b…*©V•\¯JnV¥´©R:Uš•¦_¥T¥%è&è'¤©õã‰†å‰ÆUIÆ5Iéë“M[RÌ/¥Xvk¬û4¶Zû¡TÇó˜ÎyBç:©sŸÔyNé2Në2ÏèrÎéò^Ñ\H-z=µä¢¶ì²¶âЦò”ê«)µï§Ô_Knø8¹é³äæëÉ­_&·}ÜþmrÇÉ?%wý¢íúM×õ‡¡ëFz×?–®[ŽÎÛžŽ»Ùí÷óÛ·>.o}RÝò¤¡iª¥qº³q¦§q¦¿qfA£w¤Á;Úè]Òè[Úè›hô­hô­jô­nkšÀº&°¾ lœ³© ln[þÇ òÜúdd}"n]n­·&·:¿*¿2†°<†8C‹&-Œ"*(}rÿ.y@³,¨V\&£HéYR†SʲJÙ)G+å%Iù*IHœ$$Z*—Äba¤8l–H.…‰#ÂÅ‘sÄ¢H‰(R)‹Ë#ÄQâèHql¤X)QEJÔbI’X’"‘ê$2£Tn–)lò(—<:3*6?*®$ZY£ª‹Q5Æ$´Ä&´Çª»cÕ½±‰±I â’‡ãRF•)K”š¥ñÚ UêJ•n2!m­Z¿AmÜšhÜ‘dÚ“dÞŸl>˜b9œb=ª±×ÚOj§´®ÓZ÷­ç¬6óœ6ûUMÞkš‚74EojJ.§”½\ñnrÕ{I5$Ö^K¬ÿ$±ñ3uóuuË—êÖ¯Õíß©;~Pwþ¤îúEÝý[r÷šî¿t=ÿè{n{þµtßqtÝót=Èê|˜ßñ¸¨ýIYÛÓêÖ©ú–é––™öæ™îfo³w°Ù;Òä[Ôì[Üì[Úìoö­h+[Àd XÓÖ¶€õs6´€³ZÁ¦V§!ÏM¦"«4Ȫ$ÜJ5n… ·<?_¦$,U–(‰ ãHƒ±äžh¿Ž(J‹Â¿VX.*Q³d4—”n‘2 ¦VÂN’pâÅÜ17*’'äGF†„G„„E„†E„"@$ ……ŠÂ³ÂEÂðax¤0\, —„…ËÂÂaáQaá1á"e¸H.R‡‹’DšˆH}„8=RbKY†T‘/‹*–GW(bëqЏV…²#JÙߥš0­‰I\“4›´,.eyœf¥R»:>u­J·Q•¶-A¿CmÜ“˜~ 1ý`’éH²ùhŠåDŠõdŠýtŠãLŠëlŠç|JÆ+)Ù¯¥ä¾‘\ðfrñåäÒ+Iåï&V¼—Xõºæšºîㄆϯ«š¿Tµ|­jûVÕþƒªã'U×/ªîßT=$öü•Üû·¦÷fjï­´ÞÛ¦ž»ÖžûÎîGÙ]Oò;Ÿw<­hŸªiŸnl›iiioõö´zZ|C-¾‘ߢß’ßÒV0Ñ V´‚U­`²¬ikÛÀº6°~Άÿ1‘ŽüÇ€Œëq-nY2ni"nL_¢Æª ‹Ô„…jâ ŠÔOnókŠ¡ÔEû—G*³äA.Y°EJÓKèZ #QÌŒ³b"Ùò¶$‚!↉¸¡á¼°Y|~XO8+”'ð¾@È„…ÂC¢Adˆ@"† ä¡‚¨PAL¨ .T/ªÂda˜Nn™Â#ì¢HO„$/RZ,–WH£ê¥QMÒè6it‡,¦GÛ/‹”+‡ñ ª%Q K£Ôãщ+b’VŦ¬‰Ó¬‹ÓnR¦n‹×íTé÷&$©GÓ%™N$›O%[Ï$ÛÏ%;Ï'»_Mθ”ýFRî›I—‹¯$–¾£.O]ùABÕ5UÍǪºOã®Ç7~ßüµ²õ[eÛ÷ÊŽŸ”?+»Söü®ìýSÕ{CÝûOrß-MßíÔ¾;†¾{¦Þû¶Þ‡ÎÞÇ=OrºŸæwO•tMWtN×vÌ4vx[Ú½mÞÞ6ßüVßP«o¤Í7ÚÆÚÀ²Ù:m`E;XÕ&ÛÁšv°vVX7gý ‹Ès mÈB 2bB† Èp²@‡ÔáRñ}ZB¯–БBlN"Õ©É•*¿R%%/Ö?3&Àh’¥É‚“¥Ô 5VLSDÒ¥Œ3<œ)c…„±¹B6WÀáÌ å²CyìY|6?„ÃåðžÃ ãòD\^$—'æò¤\žœÇâñcxü8_ÅIä‡jBBu!C¨Ð,sEYaùá‘¥"IM„´>BÖ)ïˆTôŠóÅQ $Ñ %1£ÒØ¥²¸q™r¹<~•BµZ¡^¥Þ´%&ù¥Ø”]qÚ}ÊÔƒñºÃª´c*ý‰ã)uúµùœÚúŠÚ~Aíz]í¹¨Îº”ûVBþÛ EWU¥ï«Ê?Œ¯ø(¾êeÍgqu×㾊kü&¶ù»ØÖbÚ~Šíø%¶óרî?b{þŒí½¡ìûGÕwSÝÿoRÿ”þ»ºþû†þ¦þGÖ¾Çξ§½SÙ½S=Ó%Ý3•ÝÞš.oC—·µÓ×Ùéëíð tøt€‘0ÚÆ:À²0ÑVt€U`²¬îkæ¬ÕõŸÁLä¹ùdÀ… 8~+ÒgFzL¸ît\§ßnÀ·ê :b–XžL*J$ç%øeÄSqþéÑ:E@²,P% Š•Ë#©’ªHD†ÓCÃè‹­ù"¶î«˜†ob¿‹nþ!ºõ§è¶Ÿ£;~îü=ºûÏèž1½ÇõÝTößRõßVÜM¸§x xhxlxb˜rõOeöOçöÍöΔöz+{¼µ=¾¦n_[·¯«Ë×ÛºÀPXØw±.°¬ Lt]`U˜ì«ç¬™ÕýŸÎB乎|¤#iÏFÚ267ÒâDš¸;®Î†¯±ÊM„b#1WGÌÔ’\)d‹šlPùib)êh¥Ü?J FD EA!aÁ\a0G@e…R¡4ZƧÓx —Aã0©l•Ŧ±84&—ÆäÑ!´ÙM !NgˆèŒH:CBgÈLƒÅ`Æ0XJ&KÍd'±Ø'Í5qxNnH&/4Ÿ/( « oˆÚ…‘ýBñP˜x$\²8\ºT$›ÉWF(&#¢ÖFF­ŒÞ³E»]ª|Y¦Ú£PˆJ<t,&åd¬æt\ê9¥î¥ñ5¥é ¥õM¥ã²Ò}%.óݸœ÷âò>ˆ-ü(¶ä“˜²Ïb*®GW}]óuTÝ·Q ßG5þ hþYÑú‹¼í7EÇŠÎ?Ý7=GõÝŒéÿ7¶ÿ¶rànüü{ªù÷“æ?Ô >J|b|jœ²ÍŸv͟ΘÉðö{Kû}}¾º>_c¯¯­tö‚ž^0¿ õ€…=`´Œõ€eÝ`¢¬œ³ªLö<³ú…ær书R¤±i,Dòàú¸6 ©ÎD*=¸27¾Ä‰/°r,·‘h×Í©$}2I£&'(ýâbü ŠDê/û "xála SÈ ¢…SùÁÁ0Ò õ‚%½`i/ïË{Àа²¬š3ùBU=ò\e-RQƒ”WÁeåpY)\\Œ"ùù¸œ\\V6ÞíÁÛ“• 7´bb*1>™¥"IcÉQd¡Ì/Dâlj 0Ã)4!%8Ô?($ À ôçús‚üYÁþÌ`ÕŸFó§Ñý© ÿ`–Û?ëÈ œÝ- F‰ƒ¤A²À EPptP°2(XLUS“©´4ÝBc8éÌ,»É©`ñØüvnèO0ÂŽòÖ†„O„ˆV†F¬X¹A Þ,oH^ “í W쉈Ú/Ž9,‰;&Už©ÎÈÕçI¯F¥¼¥{3Êp9Êôv”íj”ó}EÆ5EÖÇŠÜOå×åE_ÊK¿–•+«üNZýƒ´ö'iý/’Æ_%Í¿KZþ·ý%é¸!éüGÚ}SÚsKÚ÷¯¼ÿŽbànÔüûуb<Œzœ0ô$yø©fx*mxÚ80Þ&úÁò~°¢¬|¡°ùORÐç7Áyõp^-œ]gV ž2ÄUŒsâÌ9xc&>Õ‰O¶Ô&B\!JK”¨‰¢x’ †Ä““9R2#Ò&ò ó PB)þ|^…@aR˜AF0…L ¦R‚i” %I dQ8”%€ÿì@€Ð? Ü?@ä öøÈ1Ê€@U@`b`PJ`°>ˆj ¦¹‚iYTF!YNg708í,^?›?Âå„.å &xÂU¼°5ü°uüð|Ñ–ˆí!‘;BÅ»„Ò}a²ƒ"Å‘ˆèã‘1§Äʳ’øW¤ê×d‰eÚ˲´·eÆ«2Ë2ÇG2÷'²ŒÏ¤Ù×¥y_I ¿‘')ý^Rþ£¸êgqÍ/âºß"~lú3²ù¯ÈÖ‘íÿDvÜwß÷ü+é»#í¿+¸'| Xð0jèQÜÐãøá'‰#SÉ#Ó© gô#3ƯeÄkñ¹‡}Yþ¼a_ñ0(ÕC ~4 ö {è_æ‚¡A02FÁ’A06–‚eƒ`|L¼9€<—ÑgôÀž.ØÝ»[aGl«G,µˆ©g,ÃéŠp)yxu^éÄÇXñ2#A¬#„%CˆÜ8"+ŠÄ‘¨brP9 Œì/ð£„úQø?.ÅíOfdZ™L¢’iä:9€Iög‘)l2…K¦ðü(!~”Ùca~‘%’B‘P(2 EAñ¡ø+)þ ÿ$Š¿Æ?@h reÑʃé TFÕOg08£LîRo‚2É ]ˬç 7q…[¹a/ñÂwòE»C#÷ ć„ÒcᲓáŠ31ç#b/DÆ¿!N¸$N~[œzU¬_búHbûTìü\ìùBœùUdÎ7‘ùßEýYòcDÙÏ•¿FTÿQû‡¨îOQã_¢¦¿E-ÿˆÚnFtÜŠèºÑs'²ï®¸ÿždà¾tð¡lÁ#ùÐãèá'q#OU §N§,šI]4£_ä5-òZú }ž…¾ì…¾‚… x!¨5# ~´Œ€öÐ= z‡ÁÀ0X0 †‡ÁÂa°h,K挽`^ ?gZ›Fàô!Ø8`}¬ëD´mHr#’T‡SUàâJpŠ<œ4éÂ…Yð¡Ïb_öb¿”,壠jÔ‚¦QÐ> :GAÏ(è£`Á(ã`d,‹^H]?§€µã°f)œ²NY' ÁêXÕƒ(;ØDQ‡H+‘ˆ"\X..4ǵãØ&]‡ NÆ$à)±x¿hYF ‰‰D‘ $BI‰À!XdÃ@£àƒðxJ0ÞŠ÷£áÉt<‰'²ðD6žÈ%ùb( ÈÄ"qöAR"QA$ƈñ¢š@L&S D#‘d#’\Dr‰œOò+#SêýüÛ(ýþÃÁ£ÔeAôåTæj*k½‘ÎÙÂàngðv2ù»Y!ûØ‚CáQ^ØI^øY~ÄùÉk¡²‹Å[˜w„ª÷…‰×„šO…ú/„¦¯…Öo…öï…®? ²äý*(ø]Pô‡ ô/Aù AÕß‚šu· ÿ šn ZïÚï;ï »ï…õÞï>ÿ¡hÁ㈡Ǒ#O¤ Ÿ*MÅŒN+Ï$,ñ&-ñ¦,ñê–øôK|¦%>ëŸsÌ—1rÆ@Á(åc f Ôæ1Ð::Æ@×èýc`` Žc`h ¿ Üÿg·Ž[Ç®‚cWÀÑKaÅ(,†%ýHd7Þ‚ê~9Â)D˜9Í…[‘â§Å‘qÄx!—ãñ<.‚€ #àDˆãñLŽNÆQ)H ? R0B¢"D:B` &B`!ŽÀÃøxB(†ÇGàñb<^ŠÇGáð±8¼ ‡OÄá58|ŸŽÃÛqx7Ÿ…'à eR=‘ÔF"÷‘ü†Éþ‹(Kýƒ–PWÒÖÑ73¶3_¢²wÑ8{éÜ Þ&ÿ8+ä ;ôÓ2Ÿu™Ï¹ dŒƒœq?ŠÇAù8¨uã a4O€Ö Ð>º&@÷è}  ¼ x ~N¾ –oe›`ÙXº–¬‚#ÇaÑ8l·C:n3ªF¥5 Ê@ˆ_:BÒ!ÄdŸ€ÃÇápQ8œ Dâ‘p" <"Â!â$„FF‚)p€?L „IA0)&Ra"&Ða<Ƴ`<Áó|/ÀáÃp¸HN2û,.ÁÅ!85‚KFpZg@pfçDp.‡/Âá+ð„<±@ê%’ü’)Ký–SWû­Þ@ÛHßÄØÌÜGe¢±Ñ9'ÜsLÞ«Ì×YÂKìð+ìȫɜ¨¹qŸs¾ä¦|ËÓýÈ5üÌ5ýµþÊuüÎuýÁÍü‹—}ƒ—÷7¯ð&¯ø¯ì_^Åm^õ^í]^ý=~Ó}~Ë}~ûƒÎ‡!=Cû  <= ™ŠX4%–.™QŒyc–yã–yUË|IË|)ã>ݸÏ0î3MûpM€Ìå g9È_JV€ò z¨]êW‚Æ• y%h[ÚWŽU kè^z^ˆØ‹ýÏn¬èe¬h¾ ß ×ÂI8dæ-†¹#0«f´Ã´:8¨(„)Y°Ÿ !Y‚ÁÏ^m"‚‹Ç!Ñ8DŽƒ%8X„‡…˜O„9D˜A‚idx® –ˆ%aIÁX"K a t,ž‰Å³°8ŒãÁ¸'€qá0 #RQÀH Œ(a$F40¢ƒát±ÂˆF²`$FJ\%ß€Ã·á ½xâ 4B$‘ü&Èþ«ýÖûn¢m÷Þ@ÝH;H?Ä8Ì–ØŽÅ×cqX¤F²aØ Ãk€±›c•6ÁʞĄá1|†MÄÐH˜`2&ˆù@~1"R!ÂÓ B‚ácàP †E¬ƒ•c°Ñ¬ƒUc0 F‡Á1+ãÂ`²0Ø| ¶ƒ­Ä`k±pnÃÂÝ0Ò# Üb?Ž#LâˆëñÄÍòKD¿]DÊ’ÿrÀq¿À3” Wüƒ_÷§^  _ `] ä|Èÿ8(ô³ Ñ—Á’oƒ?Pã~¡&üNKú“¦ù‹–zƒnø‡nºI·Þb8þe¸o3²î0sï2 î1‹ï³Ê°*²ª±ê±³[³Ûž°;žpzžrûžr§xCSü…Ó!£Ó¡Kf„K½aã^ÑrŸx…O¾Â³Ò§\ Ô«@ò* i«q °¬öµÀµd®9@þFP¸o¥›AÙfP±TnU[@õP³ÔnýOÀk˜ÿ\Àø¿‚õ?‡õ?¥œ„ýÃä½XÒN,q–°‹[†EF°pÛ‚ÅÔ`1%XL>ãÁbì0Æct0&ƨ`L,ŒQÀ1‚ ÇA|Ä&B4ìRÐþh¿@41M ¢ 44žŽÆÑѰÑ0 ‡@X„ ‡°‘Fa¢ L,„QA˜$J… ™!ÈAÊ… "Saj L=„i†0mlÛ‡Á.À£Xxö]'aÜz·!ìÀvãI ¤£òI¢ß9åÙÿMrÀ¿ wýhPQØŸQ¸_ø ¾ } ù)0ê·À¸?ƒn%þœòOpê­`ý¿TÓmªõÍq—æ¹GϺGÏ»O/xÀ(yÈ(Ĭ|̬}¬ÂlzÂjyÊjÊêšb÷NqæOq†¦¹ §y£3ü%3!˼¡>á Ÿh¥O¼Ê'Ÿ1“ ~5HX’Öí: [Œëy°nÎÍÀ³dm9[AÞ6¿¾Šw‹%Çb »±ømXÜ,²üÙÝ`û±Øv,¦‹)Çbа˜,,Æ…ÅX°=ŒÑÂ5ŒQ˜h#A  !@"D'£©~è ÿ)Hü¿gó1ç òÐp(+„°"#†0ra”F A)”Aéd… ÊDCùh¨ •£¡Z4ÔA-Ôaº!L?„Y€Á.Æ`Ç1ð$^E6ø~ŽpG<Ž'"Ïý^#R.‘(o“®’ƒ?$Ó>öc~îÇþ’ò-%ìÿÈŸýå¿Dÿ ü;PõO`âÍ Í¿A©·ƒ w‚Íw©¶»T×=ZÆ}ZöZÞCzÑ#zécFÅFõFÝfãSfóSfÛÔlAVï{`š½`š32Ãá.ñò–yùË}¡+}a«|“>Éj _bÖå:°$mš m0l¦-Àº 8¶÷KÀ³dîÙ/ƒœ] o7Èß fí…{@Ñ Ä+Ð.CÄ71Ä70Ä×0ÄW±„SXü,n·ƒlÆÀ«0Ø¥ì Óš1P5*ÅB¹Xȃ…ìXȈ…tX( †fÇ0†¤‡B‰h. M÷CS)è ÿ¹‚AhÒÿ-È@ãfó±Ð0 óÑX†ÆD 1R4& ‰EC*4”„†´hÈ€†Ìh´Î@£sÐèB4º®D£ëÐèF4ÔŠ†:ÑP/€ !³ÂŒc°“ìz ¼‹ì„q{üa„pG8'¾‚'½N _&’ß!ú¿G ¼F¢~B¢_'3¿"ó¾óüèþ EòE~Ã?æoåÍÕ­€¤Ûš;iwƒŒwƒÌ÷‚í÷©®ûÔÌÔœ‡´‚G´âÇô²'ôª'Œš§Œ†§Œ¦§ŒÖ)fç³gš50ÍZ0ÍžaÎp–x¹Ë¼¼å>þ*Ÿ`Ò¶Ú¹HÖÅz³Äm ›@Òf Ý tÛ€~;0í–À¾ 8v×àÞ <û@æ~µdÏ:r€ÜpïAÏ!ïBÈ;rB.a‹ä<9‰c°»1ØíÌ: f9³ `  Ô€*1P!ÊÆ@.,dÆB,¤ÁBjŠƒ!9ãÑB"šGF3(hš?:8ˆ¢¡HÁ("E £ð Ž…BØ(˜‡‚Cæò‰Ð1#GC1h( ©Ñ ¥¡Ñ&4Ú†F»Ðèl4:….A¡ËQ¨jª…jF¡ÛQè.º…žF£ÑKÐÐ8š„ uf3»ïÅ"³ßâIwÁ_@q„+xâU<ù‚ÿÇ„ÀÏÔ/‰ôoˆìHüŸI‚_É¢?É’¿ýäÿøEߢÄýKQÝñO¼ ¹ »h¼hydì~œùˆš÷˜Zø„Vò„Vñ”Vý”^7Eoœ¢·L1:¦ÝÓŒþæà sh†µÈËZâe{9Ë}ÜIµ/t­/l=mâM@¶DmqÛ€j;Hz ¤ìÚ] m0ìéûé°ÖCÀv8ŽÇQà< \Çžq¿€½†þÏö=û.„}¾a_ƒ°g!Ì1³‚vBÐFZA‹!h„îÐÍt-]‚Açaд ¥c¡Ô¹1Œ‡¡($™-HBóÉ(EóGýß‚ä`‰Š"ÎdÎä `> EaÃQ˜$EA ‡‚PP ŠBPh íD¡3P¨\ª…*E¡*Q¨Zª …jE¡:P¨nª…D¡FP¨1zžD£×¡¡-æe»ÅÀ§°È9,òŒ{Á½àßÃ?Äù}‚÷ÿô5žúù#ó ‘ÿ1ì/RÄß$ÉM²ü_rôm?å]¿„{”äûþÚûiÒZ9yç<ÎB-~J-{J«œ¢ÕNѦèÍÓôöiz× £o†1†1äe.ò2—xYã>Ö {ÒÇ]ãã¯ó…nÂM | o²í ú%·$¼ Ô»AÒ^ ÙR‚´Ã@‚ôcÀt˜OóI`9 ¬§ž±þú3ô>A£?B£?DCïAлô&½ ¡OCèCz„Þ ¡×Aèq½BχкBW`ÐEt6íÄ -XtJ¡ŠÁ¡et8 â‡bú£è(j *0åÿ¼ Ed ,ŽƒBž ¢°(ŒÉQP ­B¡Qh ­G¡M(”…ò PÙ(T UŒÿ&}†ø}øƒ üGûÇüÏùrƒ ü‡q‹(¹M”ß!Eß#ÇÝ÷Kxà—ô€¢}à¯þ0Àö(Ðù8(óIPî“à‚§Á%SÔò)jõµnšÖ4Mk›¡uÎÐzgè^ú/}¡—±ØË÷1Vø˜«}¬µ>Îzwào¡ÛAرHwÅn»ÄíñúH<’O€”“@s hOƒÔ3@w¤úó@ÿ 0Ìzõ?èÏÑÿùŸˆè÷Ñè· ôëú„> ¡÷Cè— ôF½BAèá¹1l…Ð5ºtn =´‹6bÑ©0: FÇáÐ *‚„ø¡Ø(f Šˆ F£ü¨(2Eb¢lž‹BfP€‚ÃQX1 #CAQÏ­F¡SþOûõý¤E½åq¼¿çœow?9‡ÉÃÌCN’3¢("‚ ( *¢€‚¢€LW1b@Å„(^E ‚ä äœ3×U‰Ÿ~úÔöÓ̈líVío[µu«>ÿÁ«ÞçÛM²ÉnFê‰t;R?¤ˆ÷ Þø âÄшcÇ!ŽG| ñÄç_B|q*Ñ»DÓIÎL ªó¥¶PÕ–¨úOš¾Js¬×›uׇg‡Ã·Ç<à vÆ9ÓOº²N»ªýË]ð»§ðOOÑ9oÝóÞ†}M.û›_ö·ºh[ìXêRêV¾¥4Ò«,Ò§<Ú¿<:°"6¸"v"þ`">"eÄÇi㌴ É´§’i““é/$Ó§˜é¯™o™™ï˜Yï™9Ó9÷#®ö)|Æ5fríY\çK®?‡ÎåÆßpÓù|ÝwÜb!·\Ä­~àÖ‹¹Ín»ŒÛ-ãö?rûåÜÁÚO•“»eåþ âZ)WH¹DÒ·’¾’4SÒ‡’¦JzEÒó*MTéQ•†«4DMeØG“=uy£•¡C¶sÈæ.ÙÈCE~ª¤œ0eE(=J±EâL'ù²È“KîçüY\c6~ŵ¿æ:ó¸ÞwÜà{n´ˆ›,á¦K¹Ù2¾îGnþ·XÁ-Wp«•ÜêçÔZ¯ªí£Êí!ÚE)ÇíRn•r£¤Õ’–KZ(i¾¤/%}*iš¤7%½,i’JãU¥Òƒ*Ý£RzëÖk(»:¬ ©¥›šz©žŸ ƒX-‚9QÌŒaZ£éÊÀ@úsЛ‡îtÕDgmtÔE½!jMl¾VU|7Ú|·ö¼pà}€C†<0 ` ÀcOLx`2À S^C|+%ˆ"}Ž4›ä·$ u™TWJmÔ6ªÚ¯ªc›êÚ¥¹÷jÞƒšÿˆ:®GO9ÒÎ82ÿÙó‡3ÿœ«úywáwÑ%O½ËÞFÅÞ¦Å)ÄÖ%þv%Î¥ÁÊ‚ÝËB=Ë÷W„ûUD$"÷$¢CÑØCFl”{4{<›ŒOJÆŸOƧ˜i¯›iï˜iÓÌôÌô9cg|ÎY_rölÎýš«Íãüï¸ú÷\󮵄‹–qÝŸ¸Þ n°’®âF«¹ñn¼–›¬K­éznº¡r´Ÿ*wq7ÑN¢íD›‰Ö­$ZL¸€páç§K|GâkŸ—ô¤JcU‘ÊhÔW£:usPg'µvÓu^ªÀÚ!Ìbn ³â˜ž†1K0ƒÙèÏEo>zª£«Eè°lŒj3-A¶êÔè&Àž€½û 0TÀƒF)`´c…'Äx!žb’ϼh ¾ðÀ4Ä-Á9Hߥå2R&u­T7Im‹Ô·KçnÕµOõR½GµÀ -|JÕÓÿÑõ§3÷œ3ÿ¼«ÆEW­Kî¢bOýbO ±ÄÛ¢Ä׺Ôß¡4Ð¥,Ø­ªâÃV† Ò¨ƒnuP7'vô`k6 b½0ÖŒa~sÓ13Ó²0’ƒ¡<  ¯&zk£«.8€£1èÍAm²=ÈÎ@7u·ìc(`€{Ü/`¸€‡„%Ä#U>a >m >o ¾*Ķà{|– Z‚K–#¥QþBr©;IÛCú~r–®cÒ{R œVCÿÒb¿kiçôÌózÎGµ‹Î‚ËÎÅ®Ú%®º%î%žÆ¥)ÄÖe¾veþ.åþ+Ý+‚·Uû$Bw%ÂwáûŒðFd„ŒŒMFOFª£ošÑi)ÁÈÇfä332‹#s8ò5G¾åÈBŽ,áèrŽ­à´Ÿ9} g®ç¬Mœ½™s~åÜ-\m+çm缜¿“ówÙÛ]9¸. #P+5Ò /²³ =¢Õ \Á௠Þ:à®®Æàhz+ÐÚìÒºŸ7ÝjØOÀ_>hó¬â{Ìp‚à3Ö µ_²ßâ€÷mÁYs¿G\ŠøÒj¤õH¿¢Ü†r'ª{I;@úar“ž“ÒwF þKü¡ÅÎiéôÌ‹zÎ%GÞeGA±³°Ä™B,u7,u[ˆ-ʼ­Ë}Ë}×W¤{Tz%‚ý¡Fh°ºß3Â#“á1ÉÈcÉÈSÉÈsÉÈ3ò¦yÏŒL7ߘáÏÍЗfh.‡æsh‡sh‡VrxGÖrtG7sl Ç·rÚvNßÉé»8cgìåŒ}œim?g¨ÃÊÁ«ˆw^Ép-ÁJ„% ¾"ø‚à‚w%¼žz ñ)‰ã¤•!Õp û:ñVÞà…~h‚Æ(ŠCÍt(È„œlÈÈ…X>DªC¨üEà«î†àj ÎæBo#´B^/d7A=öØGÀ]UZ/à0EŒTÄhEŒQģЧˆñŠ˜¨ˆ§1IÏ)â[ð5[ð]!,ÁO¾ø`!à2À€k6¤i;Ê]– ªH;Bú1r’Þ3Òÿ›úCžÓÒ.hµ¬Kzn±žWâ¨Q’B,*uÕ/u5,s7+ó´,÷¶+÷uªðu­ðwOz&}Á;àÝFhˆzÀ=œ N†M†ŸL†ŸM†§˜á7Íð{føC3ô©ú Í6ƒ_›Áo9¸K9°œ«8°†ƒë9¸™ƒ¿rh;‡vpxGöpd/G÷sôGrôGsôHåà8^Y ñ(^q/áŽT†°a5‹¾!ø'ÁgïL•ð’„É&HxD…á v@'ôrA7/töC«4Šºi¢V†¨ž%rsEfžˆˆHM®-u…¯ð4®ë„³•ÐÛ ­“7ºYPO·‹T€ÿ P#1JTñ=®ˆ ŠxRÏ(b²-ø¢"^¶§Ú‚ñ©-øMJ®®ܸhÒ.”û,AT vœœ§ÈsFú~“Á?Ôðy5vAM»¨e\Ò²‹õܽÀB,uÔ*uÖµËÜMÊÜÍË=mʽ*|]*|Ý*ü=Û~Fp ¼×5B#’¡QÉðØdxâßß7C™¡fp–œc晦û—±oûÖ°o=û6±ïWöncß.öífß^öïgÿAöfÿöåÀ1{Ç+'°r–ã_ˆGR·Ôʶ#lFX© —"|Gð5Á—L#xM‹ž‘0N…‘: qÀ@ôqCwt ˆ¶aÑ<*¤‰:™¢f¶È«&²óE¼¦ˆÖá:"Ø@ø O3án)œm…ÞIh]…¼YÈ[õx‡À»l¾û< ˆáŠxØæ«ˆÇl¾+>eø¬"ž·§(âu[pÚA!þi .ø`%€%¸1%ˆ;wíCyåT£ã¹Î’ç7øS†ÎËÈ5vQM»¤ekÙ%z5 ±4…X»ÌY·ÌÕ¨ÌÕ´ÜݲÜÓ¶ÂÛ±Â{C…ïæ„ÿ¶„¿¯¸Ë 6‚CŒàðdpd24&š˜ MN†¦˜¡©fè3ø±üÌ |iúçšþoMßBÓ·ÄôþÄžUìYÇîìþ…]ÛØ¹“{Ù¹ŸÙy˜]GÙuœ]'ØuÒÞ)v®Ü5‚•ˆ¶à‚=;~ÁT†?[,$˜G0‡`Át;Ã)ž“0^ƒ1:<è„Á.èç†[}¢[@tˆˆ–1Ñ(]Ô͵rD~žÈ©.Ò E¬HDê‰`#áo"<Í…»µpµŽ.B»QÈ[„¼MPa}À à=V€Jê~>d8¶*À'lÁ'ÿ&ø‚"þa ¾¡ˆ·lÁéBÌb¶ó®„k‚<šÔO¡-Hþ?dð¼ _Ñ‹jü’šQ¬e–hV†y¥zõT†Ž¢2gƒ2W“rw‹rwërOû ïõÞn _Ï„ÿvÃßß 2÷aFðádð‘dpB289œ’ N5ƒ¶``¦éŸmú¿6}ß™¾E¦w©éYÁžÕìÞÀîÍìú•ÛÙ¹‹ûØq€‡Øq„ÇØyÂÞIvžbçivž©ÜUÁkì%؉°a‚‹í×к¥³¬×P¦^Ã7ì[ú´ëð†¸a€Gôö‹îAÑ9*ÚÄEÓ Ñ [Ô©&jˆj5EFm‘VWĈP¸Nx[ w;áê$7Í °§· ê'¬?¼Ûæ{@U/à_÷s|Õ }ºê„^|Å|[ï ñá_‚~Xn ®Ø°p§-¸ÿŠ È)AçYtÿF¾?(pN†.ÈÈE»¤¦]V3J¬ 5+ÃüR½¦…Xæ¨Wæ´2l–ÊÐݦÂÓÙÊ0á½%áëeXúþ{ŒÀFà!#0:˜ LNR‚ÉÀt3ð‰éÿÜôÏ1}óLïBÓ»Øôühz~f÷Zvmd×/ìÜš б‡ûY?ÈúaÖ²~œõ“¬Ÿbý´½3W' jø×›h!Â!„}»¶l&°¾g~&XJ©×ð[‚Ù3%| ám ¯ªð¬0ʸÅÝÑ7 n ‰®QÑ>M\—)刺y¢fu‘_(2ëˆôú"ÖH„›‰` ÅÛFñtP\]G7E¿EQ{)²¯Bw*8HÁ{ªX/ \ pLß6ßÄk•å%EyEQÞT”·å}E±?ûKPÀr? X'`“€­v K-ÁC@)AÐN£ã,º~Cïä?G•^’ñËjz±šU¢å”hv†za©£n™£A™³i¹«y¹«u¹»c…Çʰ{ÂÛÓðõ1|wþÁ†¨áaøGñÉÀ¤”` %˜ôjú¿0}_™¾ù¦w‘é±\nºW±{»6±Ó p;¬÷²~€õC¬aík'X;ÅÚi{gì­Üßáš#ìÇÔ!ÝNð+Áz‚ÕË)õQú=Á\+C K˜&áM^ÔàiŒu‰nq¯Wôˆ^aqcLtL-²D“\Q?_Ôª) j‹ìº"£¡ˆ7‘æJ°•âk¯x:+£»¢÷TÔ>Šì§Ð…+xŸàp®8¶Šo|•àSögŒý¦_V”WmÁwlÁ””à!æÿ‚{îxHÐQA)A¸"èù}Rà> >> >> stream q 150 0 0 100 0 0 cm /x7 Do Q endstream endobj 9 0 obj 32 endobj 1 0 obj << /Type /Pages /Kids [ 6 0 R ] /Count 1 >> endobj 10 0 obj << /Creator (cairo 1.8.6 (http://cairographics.org)) /Producer (cairo 1.8.6 (http://cairographics.org)) >> endobj 11 0 obj << /Type /Catalog /Pages 1 0 R >> endobj xref 0 12 0000000000 65535 f 0000064820 00000 n 0000026007 00000 n 0000000015 00000 n 0000025983 00000 n 0000064520 00000 n 0000026139 00000 n 0000026353 00000 n 0000064496 00000 n 0000064799 00000 n 0000064885 00000 n 0000065011 00000 n trailer << /Size 12 /Root 11 0 R /Info 10 0 R >> startxref 65064 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_som.png000066400000000000000000001533011202542755000201210ustar00rootroot00000000000000‰PNG  IHDRôYnTݺsBIT|dˆ pHYs Z Z®ÃRstEXtSoftwarewww.inkscape.org›î< IDATxœì]wœUÅõÿÎÝ¥Ã*Ò;H ŠPÁbA%¢FDM,±übšÄ[Œ£11š¨1‰1јD£±„ØKD»¢iJØ„Ý}w~¼÷î=gîœyóö-ˆ8_?+çÍs¦Ü2w¾sF@@ÀƃRª€l À»þ µþØSÿn˵Öç7s½Zø.€½tð)€—Ü¥µ®'ù†8¶Pÿ%^ðg­uLò`GÿÒZO6Ê9ÀÖîÖZ¿Þœmø*#ú¢+ðU‚Rê[Þ°€©&à}¥T·/°jð—˜à/>ð=‹ õt}ü ÀWxZ)ÕØ:Àé~L PJup€³ ÙP ø*¢ú‹®@@ÀWJ©žîðK­õƱ›¬#¿[ø:€À›t†,Øn `8€Fo3ê®êÔò¬ÕZÏ4ôûà[ZëÉ¡«IžÞnp©Öú&’þ¯¸ÀED÷{*¥új­çÒŽð,€ý\í (a†°ñp:€Õ®1h­§k­W€Rj_s< àqÿSJí"UJíàcx À,¥ÔÎ$ËŸüÀL O«›ø@Ü/ùgX à£î‹ü À÷•RTU¡ Ç“´ õ hf„= `ãa”˜m+¥Úø3òá€Âß þ¢”jaÉß®ÿ¡BÞþ^ðg¥TÉz€3µÖ´Ö˜v´ÖK§ÜïUJ=¦”:K)ÕÅRÿ×´Ö –ªOÐùµqŠ»‘Ä¡”Ú@¿BÛša@Øxè`y‰<»è àWZë5ZëZägă‘§àMì €›´Ök ³ü[‘|·#ùþ«µ~ÊU°Öú;Fžæÿ)€yJ©ÛȬ»«£þËIЧ´SJí¼#à}¥–š†0 l<ÌAޙ̅Þê´Öï’´éȯ÷¶äïà3­õ,’ö*òƒ2Íÿ_Ÿ j­ŸÔZŠüKÂNp€GýûþýȰ—p€S|nØ`z@ÀÆÃ«F*¥z9ò,ÐA)Õ—¤m‹üÚöbKþOlUp¸+b;äïmšßF“‹ÐZ¯×Zßà-ß,$O°[ÁÉÎÄxóµÖ‹,ÇŠ´ûR­õŒrêà0 l<üùOÂî.|¾PJµPJ]©”ê`òÎdßQyDÈ;•} àM‹ÍW÷^ÿvÁV„üzùBä?ó‚Rª[Á¦m`€ù…¤ßøÀï”RmI¾CœàB›íÛp €“}ëP>Âgk Zëz¥ÔÁþàC¥ÔÈSé#ÿæû&­u­RêLäÿ‰Z"O£µ^k±¹\)uòƒì±Úè`¢Öz™ß-<¦”úùYy7;˜à×…²Ö+¥p€”R¯ÊÚÀ…Zëûmÿ{u hTØ). `ãB)¥·C~Àž©µ~ÕÈÓÀȯ…¿ µ^HŽ Рµþ¤õ/äo,ä_DŽmüºüÜõj‹¼“]ä¿[Ÿ¥µžjÉ×ùïÙ‹;ÅM/|ºFól @›ß»“ã{Ú½ÔU§€€„= `3@XCØ ô€€€€€€ÍMvŠSJýãõ˜\Yñªd¶" Ít%äãéšü.cibKˆcjK%eÆšÛÒ´.1Õ¬²ÖQRf¾ŽäÉט«²êDZJt´VI=izV'µ•ËѺp[Zè#Z¯XóºP[I¿@A+ÒäýQ«ÈžŽˆõ% ùò&©>)SÙí ìZ“-0(ùõ€œ_ ”¢:RžÈøm/„Ù"Ç¢Hh—â:,M—dC‹7Å®ãS/¥L»fÝÒ6²2Ŷðs—K¨ü’¶EŽ)¤ÍT,_DÎ+µE齪  ×¾Šˆ¾RˆX_¦¶Td· Eê¥h)ãÜ}±_ô…²´Ÿ´8•7¢t00}G~aÜ€t´i»€ØÌGÇ !ŸY¶¶¤Ð’Ž€m ûåž§ŒrFX4ôÎÚ—6 ì±ÇWM}{!z ñ¡–­:wtÛð_½WX¹br¢>hk–…•S8¦¡Œ2@°~5Muˆ ¹ÝĶñBËõ ­[E™Aœëa°A˜µE(Ÿ¿\¤/*¼^r_È2R[Hí¦¿ åÓAØÍß@±«íƒ8}i(¬^³íÛµcú÷¥ÏKf&—0ðXFtë¦ØòÐK§CñÇhÝê:tèP“±,ê{–Yn½\µWz~´²×…à:‚m6(ñŽIe ¬_¿­[·býJd¥ [v™ôŠ\ûJ)QÇ­OÊ^zÄ~1óóñ=•Xº0¸;ô¥Ë— k'Û<t)ÝÌc{Ypåq½(Øqs@wÕÅÀ3ÓžÄ1|§Çž§Œræ3ôѰo/™ÁI'Ôk̈yÔÏ~|Á§@ï”~x­Wþ:·2ixf† ²1ØAøø`™Þ Ù™¬JòÛfµùcd†Ý˜vqΘmg¹æ¬zÝú+ërèÒ± -ˆ->Ã.θã8øiºYf.—Ö¥¡!•ã8Jʧ¶²í²Û™(6ðæ@ôI ˜¤Çˆ …t†Îmi2ƒÑdËò8ªÂ¼ù зOq“´âË…öÀ˜­:ò lÏŸÿ)<ä„:X›3ôâ1Ï|$èø¹sç`À€­úæàXnù>õò¸$}Ú/JìøÀÇ˰ÙRFÓòu¬±|ùrtíÚJ©Ä¶"³ušUä:¦éÕÕéýÁlEQRfÆVU•U6ûžêKýErÙúU)…¨ŠäcC=I7>šï·ÞÀˆF × ‡Î!;Ûf3iáM>3“.ä‹=õsFzqœ¢úF½Ø Ýd |ïšïº3Ьߡ¯ý¼3Þøcvë‹8Öxjòì·—«aÓGðûØÜ@¯i?Â4@,8fë›$ÌúKVý/¢ª-Û¥“qy)Cy§¿{öïŽêv6·.ÿ–«‹óƒúWÍê·`Q-Nýþ#ù:Æ¡Çþµ9Íe P]ž:MÝ”‡-2Ý<¡”b3c!—ñ÷ÕÄê5«ñß©<¼@ñ¾ãO?÷ 6É>ÚÄO]Eºëöníéá³÷Ò¨®RèXSêÁ ¡g’k=z÷.;&@BEèÔ©Ó]/æÍŸ‡3Ï=ƒ¥uë’wÈjhhÀáGOÒÏþÁY¨­«Ý¨õû²Â: ßÿý= ÄHû1cÆŒ¿üòË·€[n¹eà%—\ÒwÜ¡¿Æñ§?„·ß[R² )/}Œívÿ-zns#Fîó;L#¿‘Õu¿z7ߑߌjú‹Ðcèxû½ü¦S?ýÅóøÕm/ç Ø¼µî ‡ºp@ÊoÚò®–ÉO_‰å±4mÿs•)þQŽöJ:M_Ÿ§ÿeóÓ=OfSêU¡­Š«û%ko¤þ¿)æ•ëñ Ò›hwûv^™ÜªU+Ô-^“üþÛý÷áóÏ?÷/£9:J²ãñ Ì<ó¼®%þ¯vYô &,Z½zuÛû¼÷Þ{íg̘1ôÌ3Ïœ5cÆŒš .¸`ÂÉ'Ÿ¼ø™GÏÁ„ñÃðÃËžp²zM=&|÷¸â½°ð½à„c‡ã¨ïÞ††vúzO<öx>òãS“?ÄVÛàé)ùŒ=þvÑÓeÚ_G²¡Ê4íšôé!oËkË&÷Ð ب8ôˆoâÍ·óq„~u˯0b×áɱ;¯¿ù:€üëÌE—]ˆAÛ Ä~‡ŒÃ´Óõõõ¸]Þ÷ê’+.FÝê:pè~ØyôŽ˜7ÿc|¾îsœuþ™è¿M?ìº×(ÜtË/Ëm¢ çù(RîãÇŸ~ûí·ï×]wÝð]vÙå½nݺÕß{ï½kjjêæÍ›×êÁGÞÀòk1ãÍO°ü3ù jú‹Ð²E&ŒßQ¤ð½vƲåk1sÖ2ŒÞµ/¦½¾ëÖ7â¹ççàêK÷Á³ÏÏÁªÚuøà˱ëN¶Ð›"¶Ývž~æiÀž˜­5Þù.V¬\¯MÇööÌ|&†m; ³ßþŽ<|nºå&€ÖK–æYÚk¯ºÚwÀ<…é/¾†¾}úášëŠåŸ-Ç»3ÞÃÓÿ~ÏMy“_˜ü…´uSƒ8 _vÙeoΘ1ãk .l5iÒ¤Î<óÌéPWWתeË– j}}#Ö­kÄO/Ý®=áW¯®G·®í’ß-ZDتc¬^S¶mZ`øöÝñÌ”°`Q-?x(ÞŸ½ ÏÝwÛ#q~ëÒ¹ ¾=ñ;PJáˆCÇ /=ïeÿ_ý }{÷Å?ÿõ|øŸèÕ³7|䟲I_ˆîÀ½{÷^7bĈYßüæ7Ç·mÛöó#<òØc=ÝsÏ={íµ×^ ÷õiúúg+ ³tcí`Ø×ºâí÷–`ùòÏÑi«¶˜õár|ºd5†ê h`ïÑðÓŸÇî»ô °ÓðžøùÍ/â¨Ã¶Kl¥k*ùMé úMÛØ…¬ehs=‚å³—œÙeÎò{f3j—n¦bÈÅßqFŸäsÈÅßYYØL†È9#][le¾C‡_½’~±Sœd‹ÉäÙ?í,ÔÓÅ•‚4£¹#=Ä^Z•G6%Úõ(®â/Å„ª‹éØúªKm‘ÓÍŽTB>¡@áôÅ•ëÂ1b »\eƒá§!\‡ì·2®QÁ€´ YÁDz@èt~hkºyŒb7¦3+òÿl½öØmÿÝãðÜäç°Çn£±÷ؽqõµ?AŸ>}°ï^û$*]:wI¾woÛ®Ö¬YK=5PWW‡–-Zbݺ|tà‡ïˆ^={gê‘€~;“}¶÷‰`‹<Ðtæ›vA¶ÁÓ7Àù}ÏYg5íè£þ¿sÎ9çÑbÚ‰'ž8ïž{îyû’K.qÄ!Û`«-€)ÿýSŸçž¶+`ß=à{罃ÛùÍÒ-Ødо]{l»í0\{õøþ™ßÇÛí€÷Þ³þ7 §~÷ÿʶ׵k7ÔÖ®B·®y/ø‡ïˆêêjüßw¿×ÜUÿÒÃ9 2duëÖ­×]rÉ%oÓô§Ÿ~úßW\qE·-Þî»uß–øÁY»úôÚ¾íp@ËUxâŸÇ%:7þdL<|;Ìúp9Núöl¿mºgìn;÷Á³Ÿˆ pG¶ì„¶ö• Ød±ÏؽqÝ ×aŸ±{C)…á; Ç‹/¿ˆaÛ +ÛÖQG…¿w†ï0—_t®»ê:zÔ¡˜öÚ«Ø}×=0óý™ØiÄN8÷Ìó6@K¾\ô?ýéO}oºé¦ÑGyä‹Ýºu«7÷ëׯ~ÌpŶ~mÓº£vì ÏÞì¹[¿K§&vÑ ;È×Éÿ€ªªcwïâšö­0v·þ,ŸÖ6ZÝNS›ôwJ¹Û)sR•Œ>¥ƒ5ñ"‰LÓ‹¿}Çþ甲éè&Pî9BåýÞH·´e¶¢dÏ÷œsëWz™ýB1ú$Èà”}" “3rZèt's•ágKÓì"5.éÂ¥—)èò9s%¨Ðîqm«)­JPW¿Ê4»}é#»Ä -‘úœnçëè{f5碲æá¶µmt`BíkVKñÚå4¹Iíë¤ ÍúÂX_̶$³.A—Á”¶%»»[¡.Žûó´SÏÀþã@Ç­òßå_wõϰªvUr¼¿þ¸ó·¿O~·iÝþó1@Ë–-1é¡ÿ$Ç®¸øJœqꙘùÁLÔÔÔ [×nxý¿oàÅ—_ÄÒ¥K°×˜½±ËN»$´´¹+ÒÜÊ]™ä÷¡ÉsFºf7liI߆^;à‰úÃ?Š<òÈþC:Î4p+ÿÂüûÚð×rkeÅümrZ4hB¿ó“/ÑïÜÞ®ŸµUºZ1RÆÆduDÏrÓK¾/§©1/wÓ›=‘c.Ûè{——»d—-%d¼Üiû¹g{¢´/\§;fT-¬²]³øìv^S¤f•PeðÜöëß cáGÛ!×ÝǪ£å^K•C¢ÕeHËŒ~wõ‹£]Å#Îei)ÁÈ“Ø2Ü•µ d^†66جô|uWQGX–íÄ@Ü“cö]_J+›¬—•£ñš¦ûÐì®D¹›Ôº%]¢Ù3^î’-´Gdôy…¿’˜:uj]í!K ×ûäNëäN(Â2 |iQSÓÕÕùÀ/tŽ"óÑ­’y8S’CyJ+˜áPI©©ä°ËB¦’ú)¥°~ýz¬_Ÿq- øBÂRlptïÞ mÛ¶-ü’ßä˜ñÒÍ=Íã£Ã³ðY%³E5ðÙòa@ØäPÑ€î5yvdðZï t¶VŒVá4µ,—M“{Ø¢ÞªŅ^Pe×E¢Æµ6¨mCÇ*“|1Ñ7ûˆë“tãkƒ¤]Êhˆ,ЋšsnÚÁŽ &`¥ÖuÆ ƒöq(÷¹Ž¡nUZ¥´q”.ê(ÒÇJñ~a 2ó`N9à̘'ô¹Ï …bíÊæ+{ã×1tèP´iÓï½÷zöì‰-·Ü’Ù3õçÍ›¥úôqGƒ³õE¦îf_ëϬ“{J)xtçïúâ’?wÔ=ÿåKöddžÂ’yî/wvS*æÎ¼ä9½x\°b½Èë"ae4¦Â¥ãTظd|¬YlG+C–<Û%™è¸¼Ü©N)vM×hhÖx衸֭Uڡɵ«Ü.…<ÚÈ'égò ¼?Mþx:¼t¤?¦£á¥#þiãÏ#_q§ºâZ|Ùåxåwµ‹ž)]þ+ûòª@·©¶YºÏCÅ·<>·2Ó}Ízêÿä'WañâO·Þz Þ{ï½’:>ú&Mšd=6}ú4<ðÀ×K6`ý•*Fó0¯ÁÜÛXEUi~ø><¬c†0nÄM°kêÄÍðWl_ l:z@@ÀW¿ýímØ}÷Ý+²1wîÇxíµMÒ5£t5뀰‘QÙ€^曋6þ\ÇhžR²÷Ê×‘êØ¤òÅz©Šô‹”yþO|VÎÒíåÇžκ¿Lÿÿ<νÄ2—›dWÈ—=_:ýóÐÏÖ?Õg׈QgéVÙ(`ló™ò1ë›ï¢‹.ÄôéÓË–-õ×^ƒƒúN9å\}õOðÐC&ö–-[†“N: ûí·/®¼òr¬Y³Ë–-Ãí·ÿS¦LÆ‘Gë¯ÿ`êÔWpâ‰'àÀÀo~s+>ø@¬®[ h`ÂQpϽ÷ààCÆ…^øÇ?þ}ÇíC¾y®½ö,^²0qâÌþß줾ÏM~ßÿþÙä|Óÿäëµ(ÿŸüçy°¾¥v7ÐEÅ®o£pvß°º í¢íðù3ÚU‘-S/NÿøƒŠü™éÍ1öü‰u±ýyžãÊgèetlöЂMmÊ$‹¨/QèÞ=Õ“›]>Z^›ÇhxRᔲ6)ø’T¼g9b½ÌSë£#ä1ÏqEýÝ|úµµµ¨¯Ï;—Ýu×]hÓ¦ yä1üà?Ä#<œà€gžyW^y{l>ýt1^~ù¿èܹ3N;í Œ»xàA\xáEˆã_|~ðƒâ±Ç&!ŽcÌ;7œV¬ø Ó§Oǽ÷þ7Üp#^yåÜqÇmøë½ãü:wÂÝwÿ °Ï>ûâïÿø{R‡¿þõ^Œ·_ÉvÉ×Ûft%n¨¦ÏÃ̱rÇ–JƦء¿ú/v@h<ÿü|ë[G¢ººC‡ň#Øñ}öÙ}úôA«V­°çž{bÚ´iV;o½õzôè‰í·ßUUU˜8ñèLž ŽÂ[l¥žyæi 8ÿýïKxøá¡M›¶xòÉ'ßúÖ·0iÒ$¬_¿‹-Ä;ï¼öÿFó7>  PÙgkžw¥h9Ÿôä·9e“¦p>ù<õµd‹zs›ì§œê+‡7:¬r‘7eêýnÓ±§+Ø<Û›Ö.Ò/€¸Yóî… ³ug¾Ì5ULP`^ÇB¨È ˆk:õ§úTù¨“üæçUÅCÏt˜Üi ]u1ô-”RbWµ'ÿLªKöžNé\­8ÖX»v-ù´-R3%³‘l%ª´iÓŸ¯ûÜÚwkÖ¬ávÚ¶AU±Û·ÿþISÖ¬Yƒ–-[a}}~S–-[àä“OA¬5:uî‚‘#Gâ‰'žÀ‡}ˆñãC‹–-¡±&{ýeë‹L¿H^ê$—‚õr/Êʸ¦›ÕËÖÑÈ^<ãÚlŒ%OÆ–‘'ém“ Ô3\|6Ë:âþëTÇôL—t$YÒ7½Ü‰ì±—{S6–)EÚ¡,x<Éi²ë¤™u‘äJ_˜Ž²Èí/ÈÙ]eäüïÒ²ÜÅf'},ÊÆ o‹íîm+sûªä_)€ƒë‘".[_ä|•|KS©¾`UËŸ„ùèÐZùÖPÊל=T®-¥ÆŒƒ—^zãdžµk×bÚ«¯bÔ¨Q%u;uꄺºº¤_FމK.¹«W¯Fûöí1eÊıüÄ6l~øaLœxLZŸ|¥GO<7ÿúWX°`>þr÷½^í‘ú¢)}œÿh.«%¥;miy¹ô¨@ e¤+Kž2Ì&Ꚙv>Ûã‡m@.þNd%¤ ú¾:œ=tEtJ^ñkÃÆ2›Ž=öÛøéO¯Æ¤I“°dÉ º ªªJ?¢FÚ?ûÙu¸ðÂa§vÂĉGãôÓÏÀĉЫWo´nÝ ­ZµFUU•U‘Gá©'ŸÄᇊ}öÙµµµølùrÜôË›»îº+®¼jú÷€4k›ša@ب¸ú꟢{÷€sÏ=ݺu <þó=˜3ç#ôêÕ'N@×®]‡~c2Fƒá…5ö¶mÛbÒ¤Ç1kÖ,´h‘´>úvØáX²d êêêðê«ÓþÆoBçÎ[-Z´À]wÝ×ßx<:uÂÎ;¥‘À [·n8jÂÄ Ó!Í„ÊvŠËº±T&€î’”=V]T|JM'É™59"ë,Ú–Ç\ÿø]ÑVœêÄÆú6Ÿ‘‹#&Å1¨Ò˜ó“s¹l ó\¬Ë‘2%ÙAß‹ÁYÄ€, ééos éæJˆ-`0oì<š9}Vóäì44û˜‚­KÚë"Çç¦:¾ô§À{j!ÝÔê.î”f–.TÓ¥“±QøwذaIÚàÁCùwÞÁ;ï¼®]»á÷ø°Û®»èѳgbCi s§ÎèÜ©sb5Іš4ïþþš5X½ºÿûßpôÑG'ywØáëI>Úe#FŒàŽxX°`ž~æ)Ô®Z…o|㚘~žEû’w†=:I¿.XóùFÒÙýFòÐâ%Ù,Sºþtæ®LEzÍPuî–"]¯BÉɦ_Èô—sG6š^¼HMjÛES9&ú”&§ù¤uï³.$Os¬¡7ðØi8x¹lèÑ£;êëë1cÆt <÷Þ{ZµjÕ$[ƒÂìÙ³0wîÇ8ùäSqî¹ç5ÉγÞGmí*Ü|ó-"e°© Pî›:uêŒã?1ÿCUæ 7bDZãŽ;U\§}÷‡}÷·Ü!š• è9îK]‹?dš]¤žýžaL%@ÊáR*Çäv%ú=¦´©²R_ÅYRJ¹k–ž§Ç‹yÌøäEärñwŽèçâ9!:“òÊ=æ”;DÊ=m‹é‰O)wÑA•Ò†>h3EøÄGþl †‡®6Ì\WB0lN§Ót³|;4»%xã¼¥xP*…7]®‹8w“f–0oþTE….é¤HŠ–¦Ìð©T&aNaê«ÄŽ>ßÊó릘~¾^ ÊÞÕÉÒuÍ.iá¶|¶üï˜íÊÜéÍ÷ó0S¶莗ñ³3{]š²S\x.å³#³®& |‚¾ S¦<ö: _¿~øä“OP]ýå&¦Änqô—O¾&íZGL±ì*µe¯¢·>KoB]$Ãþ]ì·»›×}Pвƒ®ÏNqæ«è?âgÀUQ{ºô<…qíÐç´ííw}Ó±¼†ÎœtØ n¤Ûa×€Þ Èj@÷XCŸ­l2X±b%V¯^ƒ•«VáƒY³¨†Úº:Ì™;7“¿¡¡Ìš…•+WeŽÅqŒ>øëׯgéãÆÃ;ìP(oV¯^«««ÃÊ•+«W¯ÆŠ+°víZÌœ93±³nÝ:Ìš5Ë:Ëù裛+V¬ß'|ùòåhhhÀ»ï¾‹5kÖ$vfΜ™ü€ÚÚU‰^Ë–-cu °Á÷rwÅé=ã‡dêÕh³Í² }s»±ô˜7åNå˜ËÅßšœQævYkN§›Ü˜^J×+&¿©¬}Ûe¼u³ßJΗԽ ÿéž¿bÉÒ¥øtñb´nÝ9sôQ¸÷¯CuuÚ´iƒ›n¸0ç㹸ìŠ+Ыg/¬]»ݺuÃ¥_ D ¯¼ò n»ývôéÓ ,@‹-’2ÿx×]:t(>ø`üù/Aß¾}qøa‡&MúV¬XÓN; Ï=÷žyæÔÖÖ¢S§N˜3g.ºè"ÜvÛmèØ±#–,Y‚ßüæ7¨©©ÁâÅ‹qÍ5× ººŸ}öºuë†îÝ»ãüóÏÇË/¿Œ|kÖ¬Aß¾}qÒI'cíÚµ¸êª+1hÐ |öÙg:t(Î;ï|Ìžý?ÜqÇíøÝï~Ÿ?qŒÓO? ×_=¿Ž Wi’ClgÒìFß›ù]6#ñöê—J¥¬ƒ²íÒÉ&}>>2iòRË@™¬ŒìÜ9Õçô½íY¥`”Ie5M˜¤<õ3÷'o@éz¡  õ—Úe"ÎЉì ß)å®/wå ®Rümΰ%Ê^’7Ä Ýc¬¾Ê]Êg2äO’"2µ[ššwÊMѱèk£.~ƒ ¡¶cN¹—œ…Óä~úf Íd‰rGiYxXšÞ«P[W‡?Ü~”R8ù´3ðïIÿÁ·ÿpüI'cÁÂ…èÝ«núå¯pôĉ8ä ƒ ¡ðãË/Ç;gaÆá†oÄ\€Q#GbÉÒ¥8æ˜cšôTš3gî¿ÿ~´lÙ×]w~ö³ëñ÷¿ÿUUU¸êª+ñúë¯cìØ±xê©§°Ã;à”SNAkœvÚièÞ½{bgÖ¬YxðÁQS³à;ßù6Î>ûŒ3€ÂgœŽùóçcÇwÄš5k0{öl <¯¼ò :w·ˆåËgðΫ„BÞDÑœ”}Shòæ„TfSêÒ$[ÞÏ]bËã…&cW:æ%“%¹Ì€.Ñì™ èb@W •rt×t}Et])傳|Ù°Çn»&³ÉAbÈàÔ~ÐÀ˜=ûèÙ£f¾ÿ>:wî„wÞy°|ùr¼øÒKèÖ­Ö¬Yƒ [xvíÒ[o½u“ê2jÔ(´lÙ2_ö A¨®n‘ì6hÐ Ìš5 cÇŽÅÔ©Sqê©§¢(Â.»ŒBmmmbçë_ÿ:jjj«V­ÂüùóñüóSðâ‹/Pøüóµxá…pì±ÇâÐCÇã±ÇÁyçý<ò0=ôÐ&Õ= ેÊgè>_Òhö=‹Ïtδ%Ì~3Ùôµ‘MÐg49)‡yskÈ3qÒ?å®cƒZí:,]§Çâ8=–ŸíÛëâôLׂ YÇ*'ÿC&^²-ò¡yÛ´i“üŒ¢mÚ´N¦kQT•„Á¬ªªÂÁTˆ‘7ܾ];@)är9är‰ó[}}=--ù·E‹¨¯¯ORW­Z•´_ë|]ŠHêRÈEâXCk`Ë-·Dmm1|§ÆªU« q§‘/Î8«ªªPUU…Ã?íÛ·O/ÎÞ<ð wÜwpä‘Gá­·ÞÆå—_™œ‡b=%ïàŒg¹°ÜÁói’ί >[N3q¯þÔn³Äy÷ÐϬØ:Æ1'–®o9—˜ú¶ee¤K›"I1̵ªÌË] Þ÷ù|¥Ù8–`ÜßÂ%"Òìf:£Ìi¡>³mßý×%™ÎěⷉPî•9Å qýå÷2Lþ}гGTWW£cÇŽèÚµ+¦Ly€Æ¬Y³0þ|«í¶Ûo¾ù&€¼ÜäÉ“KnÁî»ïŽ'žx«W¯Æüùó1uêT1oûöí1xð`¼öÚ ôîÝ}ûöE÷î=’—ššŒ5?þñ¥7nZ·n±!=l}PÑw¥ÌØ¥Ÿµ¥È_Sô×} ò¼øØµïH—L‰÷–Q_Ÿ¶p»šgJDmä#÷­dØÑ±^÷=ý‹]Çù3t,Úçù[| ªøWÜU­ð§È14~qÊø+K?Pî›3Î=÷\ÿó0aâ10 ?–.YгÏ> #GŽÄe?¾·ßqîàTWW³è^;í´}ôQüñ¨ªªJ¼ßËÅ>ûì‹U«jqƧc«­¶Â®»îê *ré¥?Æu×]‹‡úúôé¥K—â²Ë.Ç6Ûl?þ0œqÆé¸âŠ+šTŸ€€€¯&”´É@)tïÞýñߟ·ä€ýGº]<˜S›3_yNqYG4»ƒwòB"ÇZA‚‚;œ‘0¥qIWˆ :9"çÔˆŽNuês-¹!—¾?5ÆrÛùý׫¬ùê‰~cšžËU1ý$|j.µ›?Fd~5GÊÈïåed­ùŒJê#­y?²ïЩwµe‹Ö~£ßÖƒÓôÌNq[¿«²víZ¬^³;uBELwÕªUØb‹-‰ f0‘jkk“5ns);fÙ(œ}öÙØo¿ýpè¡ãc\§®®ëׯC§Nóu/Ø2e2î¿ÿ~Üzëo’¼Ó¦Ï@}}ƒÅ–¼Å)ßÖ”’q©ßóÜ×m‡k‹U{ùîíqK×…É'“v1Ù°EÚ9êYÊ4·”­bú‘UŸm#kØØ6´é½ZM"»)¥’ë#RQ"S».ýˆôQDlѶäå4_ˆ¾±w¾B”ʤ#ò:ÒÛÖLן«ô™ókW _æ42ˆ*á%@јâtv è’7;Õ§v‹K¦-c@§õ×%täà=Pî¢OŸ>8ãŒ3°hÑ"Œ3Ûl³M“w£¡Ü©]·>o#mWR—æ Ü%}&sN/uæV"eo•v™ì°•÷€NeJ/K¬u~·²ìL<ŸîS:ÛæéÉn_†y~]3Wm£üT¦h#_j—x=«ô:–š˜…²¥ ƒ‚e§Ëy“»Áô3Ñ…e83‹Wùœš·ó³Ëï ã[•xêÙM(w¥Á¨i¦SÉNo€7åÎörÏYÒMrivº¬P´m“mˆ=ò`clýš9ûÒ'¾úBºÇƒÐ\C÷²›¶T"Óµfq=žmýÊ×’Øgoôoq œê§öbbË?Ð ˜œ,_m¡ð¸}t Z#=}DnÒ8Á¾1 ûª{¤—Q1¯òEíÊš%«4¡ZÌ–Ñ/®ñÑj‹èk£.¢ŽPÑgÀÔ/ý.–í0A_•I^X;4S¶ÏïÍÔùyâ¼Ñ>¯¢ÖÂ!_"ZéÆ7âV™VFúÔ«ø»Çàn] „ïÅUS>[“¾=§ß·“¶dÖÓ+Ð=vŠ ”{@@@@@Àf€ >CwQp»çÔ×Á­oÎÊ™¾4ã¤é1Ïc›•ggèD–‚³P}B™îA¹SšÜŒ­î»¬ÀfåÎÐ¥s× „Ó€v}^ çŽ©œNÓ-ûÒdLe)ðԥ͵ÇÔNÎoÌD-é»&—^¼vŒúr¯i{ÃÌ€.–Ò,¶ì\ÁaÊ…;8‹4¯´ëóµdW´êU_¹lß”hšø¬a2/3õrO¿HÉ7K[u¸Ìkàº÷¬u¡5ÑBo˜éÂ3ŒQét&«Áf²Î¸åE˜”{ñ·9.Uœ…~‚Dw—“lmIdš^´m“m0uT6 ›tD¹`š‹«+ÐÉBº]§˜®²O½b~—NâZ3¡¶µb¶ø §É™-‰&>ó0)sm¡ì/Ò€ [ß–¨³Ù½ó¸àc·IШ„ån͇ «Òœ-¡¶ÜKå-q4eYC¤ìû°ìâ €ôÂh9f³Ð%Ù„‹_{Œæyïú^g³ÔÑeL³íZéóWq ÍÎdòlö¥Ü]ƒ»´†îûBPîNqRltã¼f¡Ü=ô@¹l¨˜r/¹-Aæ¥O¢«\Ó1mÏâãåNi!–nê³6·+Rî’-OÊ],“ʆ‡hOÝ´ÕÊÝÚ.ÞË̇ÐÖôL!4Œp­4¦tyܰ"*š¤ÑiäÅé÷´xB›’t©ì¬Hv»×´»äxæfumùšD™{RÛÍ q^é•GºvéæP4tߤ†70&¿#:ƒR :¢¶ y ˜ûÚBôrWÉf0ZiÄ»ø¤M‘u;~ÒûK¥k:©6νåÎèwmÜ‘tÓa_uæåNg²®ä.Y˜¡³ihùÒ ß¬‹0“––ÌMr¼(÷R³o“Ú°‘(÷"Eãi×ã¡ÔìºqiÓL0ªÏtgƒ0§Òù *Pó’,¼hƒÖ©h@‡Ò •5Äç­h[#}à8ôýÐZ§µ4Ïå*åWL¢“›D-“Ò™ìiKÊç­ïSÈ=ä{]m(dê_*Ÿƒ×–®}@gü&€ü @äᙞ]÷N)÷ⱜbõ^^#¿Ù¸ÔNÃ.»Þ¤g;¸ˆa:^Ðʸ"œù¬[»(wF u1?[“vŠ“a©].Ê]ZаÁs@”{@@@@@Àf€0 l¨Œr_`­;‹“%fh[[zÆ–@c‘¼4:Ýõ ‹GÎw}KÓsF ôâš[ŽÈÅ߉ ²VI¾œœEÖ§yÒ¯)èNs1IÏ´%¶§g?[+¬×9|b¥O_2Ÿ1GX¢ úBy–›~ƒFÓ#óÊhNøøûøP»êèëP&÷ëVÙ´e:;“%ú]Ûó˜&=¶áÏèÓøÞt‰DIu$†#º¶Mך‰¾‚â¶èulÙ¡»¦Á]Œû€œ×*"³ØêDG«ô³3¥`xÖ—k;é#°þ²?Ùù&Ï &~@ŠÐÔlÙ‘W¡Ÿ­¹(wM7m¡APÌ]ÛŠešËÐuóõDG Î#ÝÇAßgÊ/Â\C·ÉÅߤ|'€¼¡”Ò_ÛRaT7îi˜±áU øÎ2éö‚¤³²Ó®‘Ç6«Îΰ=mѺHú.šœì¹Î_µ _Ú×…s¨²—;×Oe“ƒ¥u)mËB'7'Hlö|³Ê+‡±¾çp Rj{#QãM™Kƒd+ãå^ÌO&å&ãÎ6m!¨°U4Ù¿,·((NæžyÏ#ÝTJ)®ü(£ Ø~Äf#“st"ç7–Q$Ñ7îb*§±Ùuê=on?ã¶™Èæ^îlÿv‰2§žÛ„íUæ&*>”9Õ1½Ü…¥þÙ¹3ti3˜Ì—4gèÃÛî”È«¶j–:E-€5È;É¥•ðЇNQÍNô}Ÿ§î5pûÚ­H“ÃÔOóp[>ô»|ž½ÚæÈãz¹)•‡×ERù”­¸>˧Í|6Ã~× }@k³óT*(¡LÎÎò2)ËNã´WB“Cë4‡ÜEcDÇw`fT„sw.ÑïMy¨Ú®ÞKÌÓ%é˜txñy­Jìú¤ëìæ‚~Dò Kt|0ëA/M.CvïÒÙЋÙzºI¹—KsÊ\çŒRŠAnæ©„&—q—-Ÿ‡¨$»ô+@¤”ê­”  €­•RÕRÕ ”ú¶Rª§Rj(€›¬ðfóÐ\ˆLð+Ÿ8ª ׎ð,€Gtp€Ö•l%°!P­µþ%€_Új­r)ëõ€.€Èwù² ”ææé47øîn©·¨ù©ùü„~Öb¤óâ 2LŽ–Ò]úÚª“#é9hòŇNt¨œµe—] ÿüÅNêiÂGk­Œ¼T‡3½TD‡r¥ŠÅkæÛzR‘qu :†> 8ÁÌr}¨†î.gƾfõOK´Zâô¿f}$ÙUÆx|]T ét­Ö®4ûØ^ž¹D ÒÙ’¾Ã–dW*?]Òd¶œ-´‹/UkC_ºŽ€ˆA¡ëùÛ]Ž<_hlu\%Í)è+¤eäuHùÂZ[•‘*±Áý¼ŒÑÌ:õ'ÐHÊ1Øît1ÝÅìô¦Ö“RèçiJöR§;Å9‚«ÐÝÝÄÏÖ *³OÕˆo€Hÿ ~™urÊÝg§8Oø°—{@@@@@Àf€0 l¨(8 °ÞßE7C± ªrÜíò%oòL rCG²Ë³ô;`Ú•äò23uI>9)PÝ…)uX.åžgˆì\'ûÔŒÑÌÜ–-ýŠ }ó;›¢(¤SNL)þŽj °‘±åçÐ= ù@ótJ¨J49ï#¡Ãmš•H—ŒW÷„’U¦ýa§“MÏxJً붺[òˆÔº½ZYÓ¤a>4»Ã<-OÖç]!è+ð€,Dæ;ÊúÅç”{œE%Ô0M/ "×O+œÞíf\{Š˜ÐÉ‘ñÙV±þñr×1X@—¨ž\“„~§ñÌ9å™ro$m4²0[ä*ÑäâNstÉ Fz›ô½°^f§8ò%€8hIw´Qa†° è›*£Ü+Œ‡Ná¢ø>Æ©,雞å©79Ý]ì‡eNmI”yN ò3û("Kù¥ÆdâÍCq[,ŸÝVΠi+D¨| F³3f•x¯C ^êà±›)UÈø1•å.-é²Ç;¯³äå.Ë&7m7-ë¤_M:Ùƒò—Hzeœ ÞÅöJ²d]'~ àÅs:ܰ­Ænȧ’˜èdR&÷Lçr,õ+[{Qî´í‘A¿«¤.t×9Nù3Ê] Ï9)M¼ç /y Vx¡§Üs9rMÇ V Ù ¹iÜqMé÷u¤ñŒr×ånä+‚z¹K^Œ]똗»ƒrO(mM–<uÑ.ÊØ?’v ³@›ƒ„€0CØ ô€€€€€€Í•Qî†Oe „¯×1QöòrŽeª”i‹Ë¢o²{˜“ê˜Ñ7l%å+j!rþ7¡¼^ê¼-Ô ÖîAí¬oÑÃ3‡Z’ h‘ÞAL(LÒ:«äŽûm×g1ÔìéÙà,Î*:mñ>d_Tªl™iåVÇeוÎí¤‹pìÜAöþg«@*ý¹ jÞV¥Ó¥|p—|z¤`^ÑV™-B±s¤“| Šé°er}R9Bº$©H9JN×”f7èä"=œß˽ð¬ˆ4ýZ%§¬úšÚ]y{–Ó¥Å25Xcè†7šÄdE(wtF Ââñ9 Îb+ËËÝ3Oez“‚³Px,˜IÐ.%ûÚ¹f¤…|™b,2–ùÁU(G éh†½¨¯¹ #Ÿœè4ö27æUG¢¢q¨…Ç2-R ümÂxÓÅyþI’«;gúB‘ê4¸Š£)Ìí r¾ÌvI7F2²3Ö8… ïWÒvuSõ7òW´‡Ó‚™Nî)ŸËÐðIéO¢Ö -[æ8o9GÊ8áÒ¹§r¬Óòcš¥©#ßÐ IDATA[cà5×zé`—Èš –âú²Ç€®]»³ùg‘N×wÀÖv•Ð)eË”aä³É6xÞKrØ °Q)wפÚõ¢,½ì”û²ÄŽiýT&qÇgÏŒffØ:c7ÿ›êÈrJ³+åNd©^¤n±Y¾Ô®2åLŠI—a^ÅCÊÜK=}e3“˜Ï“Š3s:+W*¹çOa6eJ)M¥IlÎtr VˆíÑ0^½“nd‡ÕLºqâ‹¢~¦ž¶$ïl¾±`–4†Rææùb{ÜSšœ¦š.[JIå”Òœ¾gžñFý ˆ3ehú#S†Y>ûÒ‡Íö5¡àÓ}ÙͧPL6s‰ cÉ5NFÈSMõYTF)Ÿª]ƒ­Ù2eH6³R[šñbšK«bomi³ÍW{×}e·ÌóKåû¤ƒœWs‰CüìŒ>ÔiIßeK艎2¯=i@^h>³§ýtò[ókšÚ£Ÿ­Q™|4º¦ÁM¶#›¼†®ÓµvÏY»TºSœ¶ëHkàŒæ7áJg5Ò€#_3 Pî›*§Ü}fèe¾êË/8Ê*Ûtlú¥òYe£îìÅ­’º"o·Æ¼–çÓ¢l§Ü¹G¯Ÿl!Íz¹Mj¯·«t™¯¤NyQ©üršôª,éTjËÅÉm0ªËZ“ _š?\õÒ$ÉÒì™ñIœ~W$½xí+(¶¤Å7%JíFšïåN)wöäâ.ó è&1€ØB DÈ:â%ú ="3t…”~§2`ÎÐI{åžÞ“*§5¯<½ÜÍ]Ü£>ëcJWxÍеåX YÑÍh ÊúT¹n[i†^ÎãÌdT6 ›'A¤'}ÒäYýòleûÏN!gŠ—òHÇÊ¥Ì]ùú©.¡Ü¡!Ñž¾¬P*“B`¼PÐtz7…øeªñ¸V$ÝË…Û$d)!íU2Ó´²÷‹o‰¾™*ÕQ¶aãþ”îõf¢-…XažùJ^H¨—¼Ócž€y³;*às¯ÇH7Ž£ Óc>ó|°È±Nm1/wmœzaÖŒrO}Q✆’¼Ü*Ћ”·6(s6@ 3 E\ÆNq’-sàMòID‡¾—\êX3 P°`ƒ¶æbdöSá>LˆDõi²–•ÁòYeƒ5dK>„ú¢ùx@*k&KÁYµM^¹Ì8ç,:‘Å€.T&Á ¶Š-E1°e-¢/2«&×(l©¡ —¹ÞÒ5JJí’taÒÔáAHh¦´.‘é‚,踂zŠñº˜}%,_°†L»R}–.­ xæsÄ`)Û–lÀ{>ßO½bËеnÁ®2m‰²¶§É2µeÚ5wl´Öä£÷ª‚å- Gn¯Èàß‹kÂùõݢ̟¨9òÙÛ®¡Ç©>bÅ¿ ú äl ybkÝ\O§ 3ãž[dæ¥nRöžô?{ðÑ¢`‹}¦Wîæ3¥Ž5a†° ²z@@@@@ÀWª#ÐòÂÁ¦QÔX»?¶î½õלëÊWÙ€Þ`½v_VÁé-x†³¸åLõùWv/wN™»PÉoJ³k£L_¹H[çé{BwQ™| Âés»¾i‹ÓìiËbMÛE³€v( hõ¶ª-ZÕ´j` W¾@¹l`Üðäuø÷Û”Ì÷³'~ŠÇßýwÉ|³gÏn»xñâ–4- èÃzn‡^[ö.™oÎÒ°tõÒ’ùN8á„®½öÚíiÚ>Õ×ÐÆ±™^ê®*ÚÀŤï•[Îè8äD_qïf–y£Y«Ô³Ýw§8ZM'å³% cw6¹¿e­4qÃ5Æ ¤3×]úÃåÓÛŒpF@ð)_è%)¶;uaö-OêG™É>ĸ/¼œÜ7Py&|z’îüÅirºtäØ)N(ÏœѸãÌËÝ£ÃèRÛN é†]dˆíà¦I Mtˆ÷;Àw‡3wŠ‹ ötLž;®xè‚7¸ŠuzKÄ*9ÆvmƒÑHà*JCÞQNº=5)“<Y:²Ëô_¸oÚ=8pØÁزmG@íçµxøÍqÜ.'¢Cë´iÙ6É;ó“wñø{“Юe;1|:·ïÂëV°;gùGø÷ŒÇУk-‡ŒX]SSÓ8eÊ”­-ZÔéÕW_Ugu–7nÜ‚Ã;ìÓÊfèqsþ)òç›GÒQ%ÿ´SǯÎÚã/91®?ß|ìO'ÁtLd­Y>-ýqSB:›¯[N}üñ Ó_ŽvùÔ‹Ú&åeþè옣Îäþ¤ûRÃ.á/ö±ã<ºÎ¿ï¹¬D¿ð™hñåÛÞeüUR^ë\â/&ç8ÞöK–/<[¤tß¿ØñçgC烲ä£2Ïçz~–’}ŸìVoÂóT—™žù+àÙ÷ŸÆ}¯Þ“¤ß?ã><õÞ€û¦Ý‹—?|0yÖ³øÆ-ûbͺ5˜>wv¹~×~ ¯ÎŠƒoÝ«×Öaþ§óZ8ðô3fÔd2¼ÜšÇŽ:?þ×E8}ìÙ€¿L½—xy&ß O^‡óöý!ÎÝ燀£î<¿{ñ6\vÐU,ß•ýçíûCôÞýz÷[’Û²qñí·ß¾íwÞ9µgÏžËGŽ9ïæ›ožQÌ¿qör÷4%¥k*¸U6iòrõ%[ àQhº]'&Ö2ÁU(eNóQ™ÚeyŒØìIF—-BƒQÃNÊÝÞ.ÖGÌ ^á¤Ü®‘Rö”CvÚ*.ú^[¹˜mGÚŒUYÉ9bì»âý'y¼½S/`Ê *~Ž]Îä¶Ö+],'·è¹ìnH˜ULºÅQáC€ ®,—žRür—û;¡ì©-£LÊ]Ú‹<ÒF>ªOƒ«PjZ“%­¸L¯cåž\ãqª¯bŽÜsv™ÑÿÄË=ŠÓzæ)ó4_DÉdãs…bkã:ö‘éoòÌÜÐÃc‡ì¥«—`æ'ªóWÌÃ>C÷ËèÌZü®:äšä÷˜A{bÚǯfò½ÿéLüþ¥ßaÝËŸC) \ݸºsŸ>}–HuÙdtÆ-@Ö­³ù Ç\ y‚¾ë… ‘uzL’m:ÖtÐë‡TñÒ7Ÿ¢I»ÈOhCE—HwÛÒé‚!•]:æ•þHÖ5u€0¾ö i…ÔYkµ²=\ú‰‘ï Mälº7¤Ê”êE³_ØkÜ”¶d.)Ëe캤ÍÁµ¸žIuhºY&ûôÖ¸é=©I18 ©Œ9 '^´N?_Õ<èL,铱N^,óQØËg“©­(NïW4Æ Îâ38Óà,Z{êCNOn)-¿°ÚÒ•ŠpÌÈãpÏ«A¤"3ê8TEU™â¶j× .ývî7 ðá²±U»N™|ÛwÁ%߸ իпW¿w>~ÄÅcQé8ŽÙռܚ ßÞåxümÚ=¸oÚ_pÜ.'Xó1âHÜùâíøhÙ‡x~öd<òæC8|ø·2ù¾³Ëñ¸á©ŸaÖüYÐZã¹çžëtß}÷õ€áÇ/˜6mZßW_}u‹åË—·šÃËÝc†îËxHéŒ ÞŽ]3l›¾6u$ý åNdKùßö£‰‡n‹mS;ðMfØ Û´­Ó²ùóȱ k÷œÆ3׊-Rj¸ëŒÛæh­1¤ÛÐäø®CЭ¦´ÎÛ÷¬­ÿGÝy8Ú´hƒ«½{ÞÀn_C·šîÐÎÜë\´¨j‰Û»¿¹ÿæÁ:uh{î¹ç¾çŸþ»_|q»N8áÐ &¼þ“Ÿüä¥Ë|°ѽ{÷Çok·ü€q5î›;ß·ÊÚp‘f¦Ô¡ÏdÂ}åÈ­•cútw7•ÐZ9(äˆ~#Ño$éëUúÎCuU„ÆÂÎaùôT¿žÈë£j’žR/L_qý’¯>¢:©œS qA'Vis*JÒ‹¿™<1rÄn¬TÒ—ÔVqX-‚ö·&vY:`p’t¹DÍÇ­ÏŽpâ1·Ewz½@Nç;ÅI¶"«ÌwËØNs‰-¥ }JÏ™ÑvT'"å¨L™v»t‹¶…ëó>–ÚeìƒæÜÞΖîx~xØrÆ&®å‘'È~]P9úK‘s¬HÑtˆÈ9¢¶ªãô¹¡´BTÐt”èD$ªtzŽ[ýqÉ¡J}"W‘HP­‰~Žèç"TÇ8Õ©ŠªâˆåKÚBåÆÔVžþW‰­(.Ò÷à;Å‘7 ¨Ñž®bòÛÐýŸSÖt¶»œ6eÅò™úQg õbËw¦Z&­~ý{õ{‡Rî6/÷€€€€€€&B4¾)ä2ñ¿"ZT½|çãG¼âÊô€€€€€€&B¯ê_¤ \V¶ôŒwo.~kZ¬ÿäˆ[yÜ•¯¢]Ç€® º7&EYéw »ŽKË·­›Ë4âz6 JA—ſĮ=ýlë³Xã´^™æt ½Ø/éÚ:Ìz Ÿ­e—Ÿå.õ‘è'`ÒçTɵbiK7ùixÁøÔ.Mæ~Ãöà,Ú Ü­¦Œ±AÈFÄY{”>U3|UD6Zò˜ÏŠN¬°™ç ‰ãÄøž%¡^åkóÕ)¿p@A>¯¬¹Žxè‘¥ÿòéö:²µyá2 7+õx7óÑÏÖh€§d·šDLejÆCXp–4K~—Â1´ûT-GäHølúc±ì¥ÆS[F:ûöVzpѾ0òh[~þ¬TÒ@Ó”y}ûd^° ²5ô€”»/¸Ç;÷š¶mâ¦Ì¹­"ÙiÒäæFC‰Lc ôy¢¯4‹AN=æsôÓŒª´f–o©æ¸DºƒrGdPë±nçZU$œ ƒŸäí¢¶ u8:Í¢ãK¹‹„d32•Þð¡ÜÅéO_úÝL‰L)wöóx·{`g6–Ñi:=9r#42j;Í“û ý©L©å*ÜÈ:ÖÉÃ#¿1L‘~‡(yˆúŸÅi'Ëè8]d»ÙÁ±S“® nPöR@ós8æÙNy=w„<sV(ŸL–²\3ô€€€€€€Ía@Ø °QvŠ£06KÉô7c˜”é]MdÉy‘è8c;ìÚê¢Í|¢¸Q/ê”Ét}Æ?§ÔY¾/‘…vIuÌ´EÙum¡Èì3Oê,*%yŒ$É åo‚¤Ò‚˜]’î©î«â¾ªm²WMæmwn§P¼–tÈ1ó2hÊŒˆ>2#é^5îûäY¡Óû>Ö\‰ÙvzS:;ž÷’/Pæ:ÝõÍÔwŠÓ*‘£XeöiOô™]Þö´]ä7Ú%=3;È‘U(-=) ÊœÝêÌ–]}cÃg¨­ü;ô ÜXɼ8Äk‘Žêdô…2+lŸëb /rºÊ-WЦ4½âËAˆ~¡µæŸZy׆tŒJO>ÛâTzªkrnXµ´q^+èp_U³cU‰tÛ1Ÿ|®QMÈâÕ^ ‰Í Ÿ‹Ñ·¿H–2UJÚ³Êâ€NŽél¾DÖŠul·¥µ JЧATbœ…¦Ûê_n» èÈBzÌP…ÂÌc\ç{S|©”{@@@@@Àf€Ê6–ñ¤#´ñ/Õwå·é‹´”ƒ27–êâ´UB6ë錄 Ûö|rSY,_ª‹‘ÎÛRä›”£þšÈ\‡Óì’7µñÞkq[ÏÓ`B_(á„5'åž9@áÕûÆoʾôòr§›å·[*ÚÔBù*Ófš_x/Elžâ‘+ð©HO¥±£R™Ú2gÅô¥ÞØ|yŽÊÄ›m§”}þù­ˆl/_œU“c,è 8ÍN=ÖcçÅ’ÞëÙ뵘Ã~Ýš1çù&Í«7Â=áX¶£ÃR%ûîgSy<ô7sö°°¨ë­oO÷yŒzÂTöп`îEª{ÅvM¾©Ìº4±Tk¡M¨ ×2(wjMºÝÍB]ŸÇYóXjÓdx)®~gÉ> Ìf9>'ÌÙ®f¼±¤å9×Í[!·îóìó™Ê¦Ü}dÉn)}›ìhW¹ÏfLG:uôV‡1Gh |.=Ÿ{B’›Ÿq&Pî›6ø ßÐ$ÊYÒoηÀ朡»ôYFÒ¥AELÏê¤¼Ž¶¦sÙ¤~t6ÙQ€í oóš±¥2û#3}Z:ûÔ6î½äa…ÌØk¹þÌ–'™IñÌ3†¥DºËYJ°Ô%9h-Ôa«t¶/3¬©åßÇäZ7<éLš|í¡û=kì¶òúiþ”~W.sb‹´„yò íÍzmçæ)wZz5A|Ø4#<Êð¤Ü76ª—»3«ë åãóP²LšOzŽyÔ+³´ëq-m¨óúE?[¿èò›ŠÌçÑaŽÁ)ã¯ÓÝ eï5ÙcD’„= Ç×^Ã[³ß_f\zR¾¦éÅZëCŽIçž”g.é”é‰â/÷¦ è-´ëܹsu‹†Të2&ùtt."—ƒ^Sׄj”‹GAMÇŽx”':ç_.RYzxja@ΞbŸAÁsà°ÜØO?ý V®\é§°£)ú@Ï?ÿü~ƒ>[€VÕeÌÐÁß| ^ºëî½³ ÕhNÌüà èß­Zµ*K¯®®K—.ÃÖ[o½jàƒf ÜËÊΰ>—CµVбrRËEö‡RÞ1 š²l£Ù3ñÐúݤõÓxèHâ–gèr—¼[ù¤<Ćs)ÂԱ؀Ûîü~xî÷Ñ»w/Ñ#Øvª?üð#üû?ÿÁ%_lÏè5ùöt1em)Ò†æ¾ê>;ÏW>É,Ÿ<-¹*S®Ô¬‹gNùI’nêÊ]ѭÄØêGöäí.nægT™ó]=± œçG¹PÂ/1~»Ù.*%g˜y’^ÜN¢˜RñYPÊ֖ܵOˆŒúæˆN•œ%&ÔxæÁ‘æË VTœRèÚùà±·‹Ö™~jRîôyÌöˆ'¶ÒEÃB¿2Ù¾Th_Läú&¤ëÅEDZm¹–KÜ7ùeQwà vŠÛã¿ÅûË>û"«à@©èfqìÿ§4L;åGU ¨ü;ô€/%>š;ÿ烘óñ<ì4|8Û{ù”^€R  À·; }ûöü袋°Ï^{ãñ'ŸÄ 1fôèDoýúõ¸õÖ[1t›mpðAaáÂ…¸ÿ0kÖ, 2 8øàƒ±í¶ÛâŽ;î@×®]1uêT444ছn»ヒ?þñ¨¯¯Ç Aƒ0~üxôï?wÞù; :cÆì X¾|9®½öüüç7lÜN Ø„QÑ€>õaòÊ•X½~=žœ9·u(zmQƒ_M~ /~ø1Föí…Fí„Þ·¬­oÀ¦NÔÙaâŽ_Pð´ŒýibF3K¬”ÁÒÆD–"‘²§Þž&Í®‰ì¨¿U¦;.[ˆÌ™Pfñèúúz\}ý 8ùøïà¢óÏãÿy?ýt’kìžcpä‡^zùe<øð¿pîÙgPXµªïð®¹új´mÛo¾õÚÚUøù 7bôèÑ8à€ Üýç?cäÈ‘8çœs0mÚ4üâ¿Àþûï­5k×⥗^Â.¸]»tÁÊ•+qã7âÒK/Å Aƒðæ›oâ®»îÂUW]…]wÝûÛß’ýÙgŸÁöÛoªªªÂU޵ Úvæzj÷€öë{3—Ïlž•¦K”=¥J#®k¯3 Ôb–Æë¬HùÜK_Xc‘\˜Áýb½¿ÐO|árqY’öèé{¤§{¼Ý'ìRK71YU‰K*²_:/õ¤ÈÆCŒ”Ï({AßÁúˆ\SÄ.ù4”ýR(ÓGÂr‰ùŒD§Gìä ïï*ék /ÊÝõp)ãÒ5NˆŠ(÷ùË?ÃE?Ž5õ ¸~üèÔ®-ÎüÇÃx÷“Ÿæý1¤kì÷›? ÇÐZcÜ­wbβÏpù7öÅã3?Àœ@·!˜;o`]w…R ûï»/ª«Ów»¶mÛâ婯ຯ½ñ^ã F‹ï¿ß8´k×.YWüì³øÉÕ?ÅøC¿‰8@~¶>{ölŒ;J)Œ5 :ubõØm÷ÝѵkW(¥ðöÛo£¦¦ ,ÀäÉ“±bÅ ,\¸«V­ÂvÛm‡ºº:ÌŸ?qãÙgŸÅ¸qûmèn øR¡bʽ_§-qÑ~cµëÖáo3ÞÂs眊­[a—þ}°M÷®xáùèܾ-f/]†ÉßÿZVUáúCÄß_{«â”õëë±EMM2 ·lÙmÛ´IŽßzÛmèÓ«7vÝeÚ´mƒç_x hÙ*ï†Ò³GfOk††FÛ×××#Š"ö¢Ðºuk¦Gí¬[·-[¶DCCC’6qâDy‡¤ýöÛO?Ÿ™wéÒ½{÷®´6+T}ç>½*á“U«QE¸yòKIž­Z¢nýzh­1¤k´¨ª‚Щ};tïÐ>aj(+bÒߔՉ CÄòQuÍÓ‹¿32m‹§\.Í]îÆ0îòMr5¥ì‹´gf)‚Å^ÎëÙ£,Z„•«Va‹šÌ7µuu4êëðö;ïâß?UÕ-ðêôéOrZ3N[m…SN=×^{-êë0zôhtèÐ=zôÀìÙ³1dÈ|úé§X¸paª«¹8`ÀÖX¼x1F“øµÆŽÝ ?úÑ1þ<ì;n?¢îòrWéog Þ—+³Ó©ü˜§­LÝmW‚ëêáu±é¸ô˜*ü(÷&ÐçžÍõV¢Ébu*^ö¢âŸ?p}ÊA¸é–e˜2e'Àðð0ö[´ÿöïÿiÓ§áÞ{WV«l¯òaì²óÎxß{ß‹}øÃÁ±Ç‹SN9gŸ}6¦OŸŽÇ{ óæÍCQ„»‡=÷ÜÇw<ÞúÖÄG,AQ¸þúëðÑþ+`òäÉ8à€Å¸úê«ðÎwý³q‡¡;v`ß0Æçè|"õZbj‘4ФÞ$§³ÂéY™ÞêL„{h)Ôr Ó¥jÁåžšîŠl¡XýùÊXÿy,ÞØÄ×ï{e3¹(°u‚ôÀª#· žâÅ’³%Ù2FNÙrºuU¶îfn\«ö²öЭ‰ÈJ Üæ€Jµ·y‘D½z™n™]b»áa¼é˜gà5ßø^äÓ°ûô©¸ôŽåxîþ‹°ÿ¬8záxÍ׿‹S;_¹ôJLÞ¶7#oN IDAT&ã‡S^ôB<ëØcpó²[ñ’¾«x»ì¼ àoÿ'ܸô&lÁi§î‹Ûï¸'N¼õ-oÁäÉ“«|öÚsOœzê©€©S§âï?î^±Þ{xàøøÇ?Ž{î¹Ó§OÇ™gž‰iÓ¦µË?åì¸ãŽ¢N§Ÿ~:Ž?þxÜyg»¼“O>Y\Ÿ>}Ž>æ o¶vÉÈÈÈøsÅ@úþsgcñTÙ)ðäð´Ýçá×ËnÃåwÝfÏÄüim-÷ïýÍ_á'7Ü„‹nýþñøgâÆ•û`çí·kRÎLC–+lCFÍÜB+aí¿7f ß±vJ¸‘—§‹®ð™®»êá$Í®¦uœÇÔ)S°äðÃàá0yÇzvÎá€ý÷«ò[´hQ'3ì½p/‘Ï“&a‡Iµì¤I“°hß}W]}5}äl³í¶8çœs°×Â…˜5{6<€¹sçPê:Î;·±?¾fÍÜpà ¸øâ‹Û+vZò°Oç±Ú Y1Õ³kke•°ŒVªo<Ù.ˆò¶ O_ø0ç·¯_ÊÝ*¿;ú¢ #ϼ:è§Ž©›1Té)w¯.ÔöÓë­£Â7WßUz#Ì+t~sô"–eZêZ˜ßHZH›õõôJ3}®‘RY1§Pî]òîš&²ZOM§cq èûΙšnž»ÿ"Þ v+ºV›ý47ËXá”<´mU£‡=Á6Ÿ—¯¯¶¿õv¸„Ô´üv]0\¢Þ¡ñº©RÉÔÉ\ãwGœË/¬Ký~u^CjXEŸ[ƒp+¯ëÂ(Ô"Žý–[tº0‰p¼¨ƒŠ7'*Ýt=ã0ÐÏ€~€ï}ÿûß?aöc÷ì5gb\eB 6ôbc³µ ëû¨BÆŸfÍš…¿øÅç3þ|œvÚéãP£ŒŒŒŒ­ý èkÜpå•W>þhk5F»x[ë: gl1ܺt)¶Ó J/pµ‡5çĶŒ™¾0„ãTS)¼zŒ$‹¤lǯ_Ÿ'„À€”{‰îƒ2kO6¨i¶ DJ5è×Pz׈€õûœW r¾ ;¹7¤ºqùnËGu_1ç0V8ät¦‘ÎaÀvÎ"ÒÕ?î¾ãö*<ÊþÐQÊ¥SþÐõ`Ý ‹|£+‰ð„ ™:e×*%Þ†¤:»ŸrrãU­J Z³wÇ¢ªÄéyÊ› ªíªk¹‹¼aA® §‡: &?wœ¼&í0±#Bˆ-º?׿«.ßiì]à˜<°úáõظ©¥|e‡óò¨‹Su–MIåy®Þ_¿Ní¡[' 8º@Ý卑ɢï-úŸûª܇I*žóý)w-¾~ú0ÊNXxÀûñ$£5ñ¹½9_¦ÜMí}—ñIu£ÌCyõ_­¡îé²-÷ŒŒŒÍŽ»MÅž»ï¸ÒOgïýZéìd±+öµK¯XûX+<#c‹ã õ¶–‘‘‘±9°ú¡UX~×­Ákk×®Á­·d+•[’Vèιí¼÷ÍJï]E[hî¡×0éhƒZŽÒÔJ¦ »0-Ôs=ÃÚ¢–Õºf],mS;Ú Ža•‚ö•0;w‘Û”Ž©qfƒ¹ W“Î¥¯å,’ cù~#ªœ t´o¬„ ®9a1×8s‘@…y“`ÔÏÔ7âÇ)o·¹ª‹ €‰&×γ+•b¹Àï‹ ìiêoäEé“EáR,ªóÚ«~›oº÷ƳȲï¾ëOøŸ¯|þØ×#¾Ém t€¨ïÈëݹä(¦ßu¾¼ºj8TárIVÔKÑô¡R ¢Ö9ìÐ6ÖÁØÓÛnµ¼µÊ÷"ÞbµÕæ(}AñBÞÈŒã ÚŠÐÔ¶ð§nl­ ÊÝË{N¡Öc”»¹QØÃQ:$–)œsç8çnrÎ=âœÛAèÜι[Üíœû£snaz2222ú; ì lY<‘egd¤b€_øwW¡9™ø&€/ø¿>à+žŒŒŒŒ>ñЃ÷ã{çžk¯þ=fÍÞ ;ï2û/~*Ž:öùøÞ¹ŸÇ† ëqËM×`å½Ëñ™/ü÷­\޳?óA<üð˜¿ûÞxÞ OÇþ‹Ã÷¿ý8/~Ùk›6mÄ?½ñ%øðÇά]ûÎzßkqÏŠ;pèaGã%/{¦MŸ!êrç·àœ¯|ïýàÙ€Ç×<Šw¿ãUøÏýpÓWá ÿy6¬_‹½ö^Œ¾ä5Øs¯ý·\cedô€ Þû¯é•98ç°Àg¼÷£Î¹Ïx—sn7ïýr ©Ý‚ Ü!éMIg[ñäP…òb*^Ëíu„©mMsÛa'½çeß·‹%ÛVèPFíò=…Ã4{©µÔi´_âšF³xRMÿ×pІŒ—艦é¥Â×¥:ÜbÜ»G€Aé{z{„5˜ðsq¥zJ¤v-|WÏÕ±Ol©ÚV[ê~ð/bòŽSðéÏÿwÜ~3ÞóöWa¯…X¿n~û›á½<»Íß›6mÄ¿žõ8팷ሧŸ€»—߆}øøôç†%G>xÏø‹—¾EQà÷¿;³ç.À¤§Â¸üÒ_ãù*öÞç |ã>‰Ï|òÝxßY_õÁš5TMX–%}d5¼Ö<ºýÐßã]ïýí{n¼þr|á?ÏÂGþí\xïV›¨¿#I€ó¶Fø[Õ¹°1˜N¹mí÷ðVCSá‚Úvï°È“N¦©·Søö¤Ñ–p##7ÞÖr÷Ü!áx¾/݉ûaùü$åÎßoeÒkxûZß_»“',Ä’Ìp‡÷~xïï°ÀüNÝÖyÇÊöߦÌHedd$àÊË‹N|)†††°×°pŸƒÄõCžzv›ßÞÝ»ãö›°nÝãØ°~-.ºð<üéÖPn[v=fÍž9s÷ÀÕW^ øåù߯ 'žRå³`Ï}±ïþ‡bhÂ<çäWà†ë.G«¥ ™Ú¸áú˱ýö“±ò޻𛠀U«îÁªûWà¡ï‡VÈȈãñÑG±fô¬}£~S’LL)n"ÚFdD*ß–…s•òDV—ÏÈÈ膲,±iãl³ívUÜöÛK‚pöœùUxýºµØf›m±iSÝ¡ü‚Ӱ䶉Nz.üÅw±ë®s°ú¡U8ø©õŽà”)Ó«ðŽ;Mƒ÷£#²ctEO{õ#t}ÃúNÙ«¸—½ò p†ÇÀŒŒñÄ›P1¡Î¥½s±ý‹œsCÞû–sn2€yVŽ]÷Ã`Cq¡¹/ke’_qÍtNÓ¹æéš¦©5ÍÎñ!j¼…Ms™V¸)ïx]/–ÚèœÆU×Òó¢òKΗ¶2<*C%09"IÙÓç•:¦¥¥Îœš¢¾‚e:ؤ¢–‰iÒk™&& ú©þÀˆn¹Aâ+2ºòcílÚ¸³3à\§r$®¹ê÷xæÑ'cýúÇqã WâÐÃU[smì¶`o<öèÃ8ðà§cÆÌ¹:Kvøqøê>Šs¿þ‹áPTÂ7ÝxZ££š€ëÿx9¦ï<·Ù®ÚJò˜=wÜÿ ŒŒŽ`xÂ0®ºâ·ÕÝ/Øk¬ºžqÔÉØ~‡ÉU¼àýІËQ§ÂõkíHëÜ š]Ë€~U!WË·ó­ÃÒe*kZ3½ ¡åîêSJ¤aÖrgíw_¸ªZî…|öÂÆ¼±k&µÜëíLE!»'(û$Ê]e&N%P^ ëZŒJïWË}bQOt 7Á´Iψ èרà©.C[î7wxaB4„æz ~¬ÙÚ7ZWSa¶Wí;S¸ó;$ïUQ—@XËÄê˜d)Î ûúžGâ€îÂñ{ ¿i){t ÃÑÉLflî›7& •‰}X)÷bÏMìªèž­—øD (Þ3Ú¶}­ƒçýÅiøÂž…‹óc<ôàýØc}1T ©™;£©SvÁ©§¿ï}Ç«pøÇcÒ¤pýu—áŸÞõILº Š¡!sü‹ðƒïœ3Î|·xvÙuÞõÖW`Ÿ}ÆÕW^ŒWÿÍ;©Fíád›‰ÛbñGà¬÷¼»Î˜‹Ç[]Õw÷‹pÒóNÅ[Þð,9ò9˜0<Œk®¼ŸøôQûïÂ^ ¶¼¿,a¹ŸÎCLv¾ž°ñvN”ŽÃÌ"Ðæ«§ Aéë£j¥wbO™ý™ò}•®Ú ¢ç¤u †Ä€nLTH tõ$ ôjÛGà}ç8ô°cª<ààCÂ>ûŒ¡¡ ¸óö›ñªÓÿ±¢ùwÛm!^óú÷TißúÎOâæ›®ÆèÈöYt0n¿}iuíU¯þ'û¬ãöÛ–bxâ68ùù§m–6ÉÈLp€I>1WñÞŸíœû=€œå½¦—¼Zå† Vè^®RµÌSVŦ¼ Sîqš<4»ë=/M`vXµAËWk¶;™—l’1 ÖH¥LXÏm¾_*7²¬…‘&–Ž“¨6AƬ¹u[ƒî$4âx‡.TÂøƒm/»ùZÜqû͘:ug|ÿÛ_ÀÐÐìàÓàì:F«ëZì2cv™1GÔrã†õ¸áºÿÅyßý"ÞþîÏ¡)SvÆ”)mS³3fÌ«êÛn? »ï±¯ Mí{HõkŸE‹ô³çì‰Ùsö¤›ûfT%Å[èxeê*ê‚WØß¡ps½8&Ïô»s€Œ ò…}®c]~a„éCØÞä먭çÀ2‚°»}õB„m_Ì^Qt¾–0Ú2…ï ã¹}ÐÈËñý䎧ÙT“VMé°R‡ö4I…ß|Ó5¸iéÕX°ç~8ãÌ÷`ÂÐp¼À@Û­]»×ýññš×¿óæïÝ¥)Ã/¶\)”ÄÛCQ”r÷¼W^§“T¼ìÍ]ï"ú]”!åK#^×¥à0É´ ú¼U:¸ÎÏk¯(_çêï¹.rßž»–ѹ¥èõq4ÏëÉU]†9Ít@Oˆ¯ªáF¹wO’‘‘‘1~˜:mW¼àEg œÏ´é3ðׯýçq¨QFÆÖݧv;Õé]=Cjh¹SØTŠ£™—\¡;±úey‘—“JqœW¯”»eL&¾gÊ›(óX:A“sš0åÍ‹ã}Oíâëb,¿,Eöæ21¼ .Â;éz^[™9úšé`kÿÍG¹[[š“±X,_~b+ÖfVºú–ÌŸî|˜¼“…WoM8#YÊ:Ü|A;”°B¸E}è‘ cß\÷Uµ$—å Ý\á«øšr/j:Ýɼ 㾤Á—ZùÍ5ÂéBᦖ{ÏÌZa¼zšíÔ‡µµïIÆ`EejÞIJå^(yvq+âùw„²·`¿‰Ýã;HÙÞÐÜk VÄ×´–îzä€î‚ñMšòr,c˳E5¦ÉM¿çÎó Þ+e®Z¾—Þ'¬åîë{ôèªÎRéØÁÁÅòGnBãÀ™F«¾îݨJÃÁ‡A 7dS*™4R[ø‘G7à‘G7ŒýâGóˆáÜœ9ð«ÁÚø»O­p\Ê«ÑÝ‹pX³]îU›º¢Ì+ vïHަ數6Òr÷tìÍ»Ššw^9gIÐr/H³½¡ånÍøÅIÖlg{5‰ œX^ú—ð¸]†ŒYXLzÂÆeK è)”{¶‘‘‘‘‘± è[¢Ü[Îa´ˆ“ÂRœ‡¢ kÙ–oi¶kúžÇ y¢Öý®(wÞ:h)ùP^-W×9fu.f0‡å-€ñB-Õ^¡=x½‡Þ²(w¶_›pŠÇ_âá{êdayM§òqÛP Ë[|W*çÜ-ßÌ©7>»oÊžaÑÿžÛ›¢Õ-ÖmæÔ£ôA™ 㸖¤ÿ`>IpŠú7Ò…Ë“ïE¸xo¼{öÑ«8µ®0É8‡ÎÚ©]FØ€ o?8©ƒ]ýn;4 Sîœ×âgùÔóŠN^¤YÞ×2…A™—®¦Ö _[š+K§ WQ_Eñe-ËwU<—ÎZöœ¯ÖR7å Ã2…¢Üe‹×ÿZÔzŒrï•ZïöÙ”0š)÷ŒŒŒŒŒŒ'ò€ž‘‘‘‘‘±` Ê}Ô#]¸¦ÆÛaI§×a+¾–‰Qîæ±5ÔNØLƒšô;ÓÜ®ëÙ"™&Ím„½Œï”Ó Ü™f·êâÃ4{“þ/)\ÏßZß¶5–Æ7éÙ ‚Wbªy“Ÿu†¼¦FëßÞ¤ß;è’ecu WR¡{ºA•Ä£ò ÕlRë½ÉhÛ[õw(¿$Aá ú>Lå5¯ÈJpºò¢øÞès΢օ6y¸he4&‘rZêä¡›è÷öÖ·‹a¿]¿ÓB³=L¹³Œ§pÉT¾A³s|£|>MDÔzá†Æ¨ý!çµManAÿKûëBK]œ`ªÁýä¨/=-ÊWËL”»® ݲÈW¦ÓiÚyÁ„õ¶XiBðûCÏÈÈÈÈÈÈø3AÐ322222¶ fX&Aó®¡åNÔDÌŠZ%Oט²O¦Ü'‡*.¨ñÞ–±µÉ9Ü©K ®’áxÔ8Å;NSSðM-÷°¼ÔX÷U=ÛÛ u¼Ø¾`mW¢©™†ó®¦¶Y‹µMõ±%&†èé5´Ük j©åŽ 4êòÎ9E¡2e_RXä.0 K]Õ¡ašª‡r6+e?žHÝ¥ÂÅ8ì„|ûy^)y¹HñL“kr´Ó×ôA¹³Œ Ù‹$Ã2Mkv®Š÷p;YX¾áÀ…¬ÃÉ’©ßà¾Qìu! Ƴ45}Rumʽ·"å®ey«3¼£„‚Æ)+_À¦Ü-ŸH)t{·kÒ³tOb£åRtW…¹q…W1´Õ¶Ð¾yl@O²ýÒÊ2Cñ-ÇÇÖêµ/÷Úë°½_É{%ÃyÒx¯ £)w».)µŸAº7„IA¯«cU?Vå„}ëØ4Eˆ'Ô%š—£XË"›E*:[”#dŒ^ä-‡Û"\¯²L—4 3ýîä=šô¿±Ÿ/ÛÈ™2Þ¨£¿kùòØš·(wÈÉEÕ®^Sëá¡^[fèâyãuìÙÒ¹ Ëp^>Ïù‰úzû á2ôÂê>Õ ôØi!Sî[WŠë2k³+gÏä ]ÓÁÍYœWéb+\±’5Vè¬ÉÙ²Ü\]N µ6{LË]h¼ ú=fËÝ÷(·"L-w60ÁT>i†{¸Šv.!Ý>Jž›gÝe(šr4½ipFÆK-÷Àj !`¸)oÌ_…Ñu¿žê"¨ùþWùÿ_Óç)ü €z&=Ëo8§¶kìw¯¯l±[+q{…^T¿5R#´ÙM?ëšîÎèœ8÷‡ÖÉOŸwêF•Pû£Ï‹ór2»ç«û1î癩µªÞÁ‹m4v 7ꜘ®“`³Sîe¢s–ê¡+þÁ¢£™Š'Eʾ)wOaóØ×Ë Sº–£0ì½n{ f-wok¹ š]Ö…÷Í} ª^f{£öÍ.)wo\ °f»|àRËÁx)/a ÜrŸ>¶‡Îéd™aô³}Ð=¦tLÉ7ÜÁ7eSëÊ»÷«)NåÍ+MyyÀ¤¶£u÷Yj¶+wWdÔ=ò$ÓKmv©¥ni¹K ru¸l èŽÒP:¦Ü©wL­“f:¼ƒ;dIÓr¯³rªÎFPÀÑÅÆ[dm×(ù”7WȘ[G‰ò i:ÈZîO"ä=#####c+À@”ûHlЧiPî†æ­¤€¥¼E¹3¢”{€fZŠ#ºiTí§whöQ£Ê’2¡¼Fˆ¡4£®vÒ‚ÔLeër´ÿÀõ*A¾ˆQÓmíø:/±WÎzÄß´5­kz±i1« ëðŠþßË ¥ák¼oîºÈtâU>UDaRî1Ç#¬`Ù)1ùà†Ñ”î2–¦os“2Ô.NÒ‹ŠÎÜþàvú..˜^Ê8qQ«#„3ˆµ‘ F›é9?¡Yn¿¯Ò¹‹6“@¹ m0¦Ô…©xY—è¶ÓìâÙ§øSçxWÕÙ9I¹³>€pÔâe{UÖÝ|®ôÒºØFãwÒ´­³9Jß©‹z'>H¼«à/5þétÐÐ’W¿Cyi™b+ã^é÷J‡ìœ%#####ãÉ‚< gdddddlÌzlêŰŒ¦Ü­b„åÎÿ·Œ H*ßÍN~¿ak¹3ý>¢â%åÞ9¶ælÊj6Bó§QulëÏ2£Â‡¹º¯Ý…š:,ᄆ*SŠBsUІˆPî ¢á"DRœŽ‹µhGX4½¦ÜÃ/žE¹KOa#n¸h86vá ¡âjkï[Ù*RÏä 5Û-_ùìÍ] UOIuñúùï_¾GΨ‹~לU놣\%¿ãÆ;éù=Ðé ‡èwI¹Kú›©uMÙšíf¼¤Ü¥oôðËÇ–+õs`ç.&å^ˆ‡TÇûÚIRákbŸ›´e8Lò|‚‰ûv ;ö»ÊJ¡ Þ˜”»‘—îBtºÎË¢Ù-Ã2:Ükš²?ôŒŒŒŒŒŒ'ò€ž‘‘‘‘‘±`³»O…'JOSî¬mhúzŠHÕr×ÚóÂR\§îJFRîõaéÍÕ>Ðåî$>*¬±Îy±?tiÝ­%hvÒrgúìFZzÚ¦¼-aPî@M_é­ ›>·Ò ˜ÐT:§Ò”s˜rÙð®ËPåÑ“%±–Ê-„Ø¢ÐoÖØoW¿}N×Ñ ÜUÍÍ./…E"Dœ™—µÅaGpV–U-!®Ò°a?ðžd¹ÃÑ‹iïUø’M–¦Ùrg¿å1ÊÝÊ· t,Ãñ±òu¸™—¦Éío’(o']¦š†eŒšˆßÌs«t¦ Åä[–â,#*úóè'/D¨üT *ߺqòcÌR\´z8¶ÖÐ è¦1}••¨ d:ŽYTk è5Âí=tWÅ Ó¯bB e‚a¯,ÍyK&œ¯ÜCgKoR·€«ðàÞž4mŽ]¥KÐÛ åé9¬uÑð–æêA¸Þ÷.Å%ï‡ë½¾æíÛY÷lé“tP8!¯˜C’zO›d|¤.Ö3öË{-’Wd¶ó å¡óÒƒpxß<ÅÒ›p´yT­¿ckÝ-ʼnúS^ÚzŠsé„E¶Q©ÒÕ¥«w'ø¼´Çy‘¸ØkæwÄS©2Å#õ’ùZkKÑ} èá÷m\ô.v¶—‘‘‘‘‘ñ$Âà+ôA(wNfi¿;© ɲ–f¼´_îz^¡ÛÎQjʪDó4»\yw(÷²Q>Ñ즖{}/m-w¢Ü)ûú3õ-ï«p½1áÔŠ·×:ñh€ÒL'æÕg]3^AcNë•6kU:ç¤aË!‹¶–qi‹j³rzåÞ-} Þ×?X³ÆwÕrçèÕò HÍW­âCÌCc…ÞýÆ,c2é”»ÅDXˆžï9F¹‡Á›MºV–Ö¶vEZÖŸ¤Ü•¸åg]ß»ÙBôCÔE-‘­¬5NDWØ b‹Rî‰Ð9KwUúرµFºN2Üû€.Ãe Üò±Ý ûÚ¡ŠÊצÆ9ìE<{néX·Àðg^z5 òÒÚÈÓÀéÅ *é{ë÷ê¡:’Ÿp¢®—Žà2½ ¿$<éiPÂKòÎ÷1 ó`ém‹jVï£;G5úB IDAT/KÈÚ76Ó;]èaî=™žÀ…ß=ØXò2l¶m¤aú?6ˆF¶"d¼«ÓÍ490eRt¶îËu¿/˹ÎËö¡Îßp}Q„¡({Ö×ý™~¦®ú§ÞÏ·½šÅd9 »`º”Ýô삵m\ÓwÍ;€”ÉA¦Ü322222ž$r÷mâPhPîÆÌ)²Bç4>t1,3nyÒ w5å D”â˜2‡Ôr·ü™ÛZî\^½Ú/álV€m¹«™vÈåiéåLY*°¼½Ê²•┦1u4äÅê×2,£}x•d–ΪMÑûªìÞWè,Cá-Oa1EVuvu@ÔÞâéc‹UÎËP"4¥m¦T*©ke’a;<€“÷’BßǶÄö¼Ò=ìø·« ò6îö‰þÌ{Õr×+ü´ûRlA(¬dL-wÔ†§ô]1,Êœai©²­¢Þƒñ%újò–ö½§|R:¾óŠ3Ñ“ºòî‡~­ðûͰckƒj¹‹Áƈ7höä¨õ–¯5Ã[^îçð`Õr“ºògn èzÐNÛƒ—åW÷= …½<'O°¼žX¹F¸Ï½{^r@×½}xgO#ö€œ2ˆë]jɇ«liá6ºj—ÔŒUÑ€lùǎѱb@ô¢©¥oz£Ñ¿Ã_z8¡-’f:uÝD -sv´bÉǴܓԦ–»Ö’·Ÿ}ÌRœñî¤j¹'$,-÷²ñÆ&rwNV…ivÎKsé.Á{½ŸÏuQU;z·…({C^¦é->Šn£¸J›)÷ŒŒŒŒŒŒ' ò€ž‘‘‘‘‘±`0Ê}é’CSË9d¦®HFð¯Â*_IŸ„édI¹KúéìQ#¼IQæ-JSQæNÒä#$/œ³ÐM²t6£Ó1}ÏGÍJºOI¹7HgúÅT<§©¯iÊ]ÒçœqŒ–ïNJš\Ï+C´­r¨’½Nù ‘êeí¡;¯ØM¦é)Þô9#ïEÒïœ,L¡6¨p¦Ù VìnZž‹á¼BñÏÛªŠ¨‹Ú#t–¼|wêSgŠ&çý1¾npÈ6&Ã0Bw§»16,“ê=É0MŒþ· Θ”¿¦Ü è"ž³Ôï[k—N}?Svîâêþ…ãÇ .“^„Bõ;ÕשÔ[R´ÄÅVŸ Zì´õ­Y=–†uœ¯TBVÖ¾y7Ê^©Ÿ™È+ôŒŒŒŒŒŒ­y@ÏÈÈÈÈÈØ 0å>2lê–Sî|¾ šˆÄYÇ´ÜÙ¯uÐòµaI¹K òâRåÎÇÖˆf%÷v¾u¥7Ñ5¬ÈØÐr÷”¨C§{@Ø)/IU›5$™/}퟼,°>Jer¸ÅaÔÎ]Z^úFïÕk W×RÓœµï5Í^Ë×2Ú@ƒÐÓ6,„œ"4â½M7Yò€&Ùù¹XZê–|¬LKË]æ[¹luN¼#ä]Øæ–ñÞ×þÔ}å[Ý)W°ìÛå¥GGu©Ä¤!¥FlŒ‡ _Íœ™2,S};JËÝr—k)œÃS¤-]á”í•Î j]ÑܱÓ¬Œ¼úsΖ‰9g‰œW(^"íKã4òm³œ Ç)®Þ¸Ò]»i€%R‡Ðj™§1âõï@·KZ;uOϽž‹¤ë)ùlQç,ƒèâ›Ú+6>k^ì»'ùC÷µLËißèrß¾*ŸëÈ x±‡.-ÝYòò¾Bí¢O ¨ö &Ií ÌkzǨN¾gÄ*M/Ÿ³*–÷¾¬;?¶{ØŽWžÛ̆õ2èBaµ¿kî¾¥ |ö`aœ¢|Ucl |Á2#u±&bB1í’✅Tc=:ÇŽ­õ6 […ÔçméµøF;voã˜oôеf<išaêÃP÷oÚÛš¯ w~KŸïqD~‡`É[½^r8NÝd¦Ü322222¶lv[îð´hQ+ta³Ýà{¼¯iS¦ÙÛaZÕF´Á;t|{…ÞYa%%¡âÙ Ûe/¶ß®)wËýê¨Q¯RÕ_¸L5üÛv”©ÄÊ,ÌçúF<¯Ly…0’(÷˜Pï”{J\ÃÅ*Sà\ݣР—d]_Q‡ÆT¨ z©]!ï7äÝA/„](hÚrg­e½â2µ–Õ*Í´ÏïAa?•Z1ÝU÷Ò¾¯psX»æ¬Ê,\Í®«wúWÐ5›yðÞZ­Sù¤Ù_­w_U§ÊÇž—ý…ÄêÒÌË;ñ˜”¹µ“Û2ºó†›k,0K:dÄ[«åX]8ž{ ÝÚ‚¦W¤[(EŸ+ñÔüÐG{pÎÒÿ€Na4ÀM¹·J¹‡^QîNî[{è£ÊR\MÙ·óî„î¤LV·X9gñjÞ‡ÃÖ–ƒ‡¯©/Õ.I|“¯‰!Í›Jd ·_¾úŠKJeCï•W²âJÔÇwäºG´g’¯Ÿ²Þw¥ |8¬‰C× ·;U£óÕƒ§¡ý]k@æ°/¥<[ã³&a¿Ùò]w<Øùz°–õBc?xLÿës:>Lm‹0É{ïrŽ¢e§ÌcÇÖš÷,-ÈA¤±ê"ÓÙñ¼cÛw¤Ý„'œ—¦ÖÅ„L”Âi ·³í:Ø41ž&ªåÎÔ:qËÚzµo.öå^¯Ð,'ν,ë½g±Ÿ^-âoFIf”¸qÞCgúž}£—¥Ôr¡i˜ÜO§zAú3/µOt• Ù‰úò5-Öõ–éêÕY˃åU^’*Õ~¨¹@Þ™cX;X6ì“PÖÁIvÕûÛüòÙ¾Õå^µÕ´ö¥u8 —´ãç´u¹ª*Ç%†AgKKq–µ°†¥9„* Û…‡B¯B¶CÐ:œÖ3hÐôÍx8‡ÊBZ©8FgÑKª©qj±§Ç49É{E¹hë¸Æ¼E٧ʇ)oÍ·†Ùû溽SžKij¿óWĵWu$qv*%ÞÊ‹û³Šþ¦OzTÄ»P‘o»Lª‹“é:`ç0fÊcŽ–qµÜWÿ¼þ¼öÕÀmw\ïüà3xç?~?² ù¿¯ÃÇ>x^ß½FÖrÏÈÈÈÈÈØLxôÑq÷½·&Mš‚ö{`ddn¹õêq-+Sî[Ã&bÇÉÓ‚×®¹îb\¿ô˜´ÃwÔK1e§«k­V ç_pÞN_úŸ3kÖ¬5o{ÛÛnœ;wn#ôõÛÆÓ4(w¾–àœ¥ÔZî0´ÍNÔQYSðL¿·JIÍ3ÍÎZî|œ­×Xy@e)®TeŽÇ3JÜÓ=ìEƒM!hö0•Î4{Ã` sD¬"ÚP×$šÝ²ªÕ éCñвTa¯Þ„½¤Mg–Í(IM[û=’ÖçÖ‡¢“©Á×´­+8_©=ò§ÞöA¦=aÑï‚×”¹ÑF ÊÞpEÁ4;i¦—DG¥¤òk홯ܖ;dq^Ö±’/ìíP{Clkå^8¢ÐÍÍÔºSîLÓGš™šøTÇ2º.”o‘$Qî².VX§7·?ŒpÃLud²îÃ4Mnƒáí'Ü”gG+â^(/þºÕ›Ó(Ó’m\9EÅ›Zîªßm Õ¯C§Û-°båŸðµoÿžùŒV¾óï//:ûîóT¬yüa¼îÍÏÄ{ßþe°ßŒŽŽàcŸx&NÜfÚsN:þšûï¿Ò%—\2ý¯x4ò =#####ã ÆÛÞôYÀÞƒÂøõo¿‡ö[‚_]t.Ö¬y ç|õçw<çyG9ú< gddddd<ÁøÌÙïÀu7ü“'MÁÈÈ&¬ßð8`ùÝ˰ß~OIÊc }ÓD`ýv] Ê]òB›Ý¢ÜKÔ–â´Æ;[Q#>›©ôV«¦Ã9¯v|]Ž ÆYc낚>aëpH‹pì[Ó”®–×ÊÿLÍK–›¶(ôE¯#BaE]…<½427T<èÀ©Ki&4i,ß0Ë [Dذ`PÞ :ç+XöåÎ×êƒÚï²Z mÿp]ä¶„  y_!ú^ÒÉÓÔB{ÞÒl—ó‚æõol%xM¹…ÃL¹3ÍÎZòNÝ—Aß{} óÁ:è–1lÜûê·Œ‡ˆ—ò¾áü:òŽV¡ZFÿQ/R Í.6±œúA”»å7Ýý€ø µÜÇÂÎúºÕ™K(/½¹&jé¶<¥a«q–¹>_¡³- êï]½“Éô;Sîwܵÿ{Åùøï/\ çÎûñá§?ÿ*Jì¸Ót¬¼oE³s k¹gddddd<ÁX¿~-~dnûÓñãŸ}¹Š?樗`ÅŠ;ð㟜;õᇾꪫv¼îºë&‡òÈzFFFFFÆfÂÔ©3°ûüE€¶ß{/<0qx°ßÀîó÷à Ÿÿ:¼õÏŧ>÷VœúòªÒíºË\¼ùMÀÅ¿»`§½÷Þûõ/ùË_²råÊ :ºóuÚ3gÎ<ߣ9qÖqÿ©‚fWtn:å^§—”;¥cÊòj‘fzY¢²iÝ ÜÉbA‹Â##Lå×e¶Zu™%œiæ®Wé]U~ã^¸]ˆ§—šíNµkÝ.&µ.´Ü5åîša%ØÔ襼RèE“È’vÆí¼ÂòšÂEÐèŠÎk(vCpß*Ì醩*µ¥%ç¶¡ðÀ ¥ª¨^ç&À¹á  ÓÁÎÕ»cŽîË¡¨ïÑŠejœï±@MGsXk@×2E1!ÒrwNÓ÷DÙ…)s7Ä÷H2…“Ž×'<Ëp|QT6ã½sµýxE“cˆ¶¸^/dˆr÷‘¼„½zJçe)ï ùF^uØy±ØÉ ¹-‚@¢÷`HåÕÑLoQ®ª"»,•_TÏ{¼Î×”½Ðr‡üºYf˜ó2´Ôµ<×e˜d8_¡åîe¯“B¹ë•ñ´iÀþÖy„À W¸ñæbÞ¼ù7œtòÁߥèOxœÓý9 ×ùZ–zDXí[Ta•®Ut—Tç–kï“èøN9]ÃÞWû»18! :æWH„±Ÿ’.q~{™S²°äÓ§§ÖDCMN‡]3^Ã8×v\ÈJV¸Q-–G ãØ}ñïXeø=²&y<9by:B•Ö¾hBá ˜ÎY¬‰%9tÞÒ”n€<¶fLXµLõ­Å&©ávÑÖÓž‘|^™NrùñzÅÒ ‡,J#éô*º‡¡âa C4Gå¹Öƒ˜?©zÃT›ZÀ#6[ÛB·4+W>ˆ‰§®pE·tº¬åž‘‘‘‘‘1ŽX³¸îñéâ;øñ.ÁÎÓWÝñê3Žþj,Ý€¶Ü=6 wYñJ:¶B7ì„xk…Na@j¦óŒ²l麯Š>Ìé¯ÊGy…îë^«¨ivÖ^¤ašØj5<Úgp(lB·q²ÆûØ:¿t$ädB!c©‹J{%Íizßö±5æ H#»œs¢)´»Æ`n¯Üµ† Ë´ËápXã]›ž·mÁu1+éêûrrÅjjS+ ¶64"5ÞS¨§nRhìs=ËpcÃ4¥C‡ñŸºú@ M~‘¦ ™6ŸÜN¯ë[á›Ì±*6ìå×åêê«4LA«eþ:Ùºs®‘..œ«ú§®j¢ª‰ yíÍ!åKLª‘/hUÝp!M0MX©º[+t!¹ºÿØj¿[;x§^ƒ èCÀÈpö&Ê÷f«”¤%)E%‘¼oß(ß’Wá ö´Æo@ÏZî[ò€ž‘‘‘‘‘± J¹;çÎSQÿ潿¤ócÓD`CÎY4M›rl­A¹—žÂDñV™j+[D¹·ê¼ÚûéD“3}Ï”û¤¯;´ïÁ3(Íx‹£ûÔTŠ¥-*ÖVF#] ,Ž+мœù¼d¾ÖÞº¤þe.j¦ K4õ‚ô]zM„Õä›Üß ‹ˆH,Ä‚*–[”Îl´Ú ”[Õá Ì£Kú^\èËG¢„OkåG8j‘éjùˆs–¢¦ÜEðG5 ¥8AA‹FVë›Ð¼ƒÊË8¾é 9è ¡ õ±[ô»„Ü_?¯²ñW‰Ôs©É[?§ZµïÂ]ÇË„Y>f)ÎÜCWåóӲޭIg4ÆÓˆr/–ßÝöÐÿÀ±ôû–îYfddddddlitUŠóÞ_´ê‘‘‘‘‘‘‘1ºèιe6ø1€³¼÷:×6l ¬Ý¡KÄe4¬˜¥PîD“[ô;”›ˆnbFn´Î[Pîà‰š·(÷ÕKS)d íýÆ©/Áà†ÝE9Áóøê¦ä¼A‡›”;ßX”r·ö¢BU(vT­ÊÙÇ©Ç.Òꈑâ¤ZŠ<•îŒúƨuáÄ…‚E_H¯/eŸæxCrö¬M®ªp¸ Ç·µÑ;/9É;•EØRœ«Ë)”a–êÈ‚–sõ;jÒߊrÎ`@òÜ^*/g¼Gš¶ä­£jZ›·< v[Ltꊦ½ø¥­Ëq á}ìRX»¢š.­SKÖ’QæFuMæˆä¥m@…ìHêÇeõ¦Æ½¬fß”{éä¸f¡Û€~<€k àc&xxï݆•o×¾•mvvÞ±×Î7######Cc劫P¶FÖ­N’‰èÞû_éœ; mÛ±oçœßv–ä=²¢|FFFFFÆxbÖÜC«ð¶ÛOK’éŰÌ,qÄè„¶¦{ ©†e´f{& 0ýÞ'ÊšµÌ À™n+ ¢ßeUMÎFfJE™W”»¯éì¶e"«|¦ÑÂiÚD–’^•5`ŒˆÐfO‰'z2UcÞ,°–F“O®ï{'¯š”»EÊÅè÷Ëíþ!!ì 0O^7“ÛŽ?¢¹Ku‹½¦Ñ”³tÐ æß”{€²w¢SÀÞh#¦é½lcgi£ úº¨òöšr·lɳö<§)èÝqDA3•®ë¢µÜ-Ê=ú¾ŽÅj*t‹–y6óä‰ü)é÷:lÙ)oîd¸*OûtN˜âçÇ¢)ri¬©–ât˜ÔãŽÔ?„˜–»°©„pXw{¡'œÚƒëW ¨åîœ;À‘–¢M¹¿Àû»g™‘‘‘‘‘‘±¥óoG{À>€íü¥÷þs[¤V=Á\¡{ïïB—y«†WÂÁÖrW¶Íëx%Nl0(,(sÃìsYžm®wê¢("i=nË4)&_H [j{Zô9ÕßAd`³Ö½ÓÙ)Ú¢éFWXH<Èñ«L_òáòãn&SéûaÖ;yæœj2J-£=½_Òy¯"M/ž6¢-¬x8Š“1íùŽmtk&|rCú\—{U:çìÒ©½ˆê™ Uig:g1ÃÂ0 $µoq°’'V8•‘ðˆ£œq(ßÔ¼H^WÅʪ¡pO?h'À_Ó;–»AÙ‹º; Qêœ$OñÕ—î"÷É+µwéV—<¾RÈ9K9´ºåÐϱµÔ¿1Þë¦2{ݰ:#,ÍEôªüBåkL(¬§&¶„½.i¬Q_å ãæàþ[ã¦R?еȀlúÄNÐ-oeì½QÿˆÞ PUÈ!KÄ9Kì~+^[Ó3Ú5ÅCY©ê’"ßЬ.òøgÂû1ùt†£ó2öÓÅ%/öݹhóý®ë{÷¤s™U°)œ,¹Ž”¯1ièÝåõ ÏGŠ­ým}TMÄ»NÝå—ny®‹MÆ}@×ín «¨gdddddlh…ÞjkºÇ×r7èh^¹;Ôší®¾Æñ€2æY¡szV(6éû¶¼«;-”%éz°Ž®Põ4¶JsºÐZ¸GJ¯ÁœXIÒ~÷ô;2¥LºI½4èC¦WÊÜôi(ß×\?ŒŽ¿/¤ ï|eÈ9O×¼¹ø“Fmj-{ÃÉU©0(b…AþÐå^À6NÎ ŽN(ÊÝ¢Í4ålóˆ-w«Žpо'[îBÆ¢òµ4¤¼’Ø(ÔåÑó²ž1T³r<JPJF„xD’š¶õ®î‡Txà³Ðñœ$…ro¬–:o³F™ÇeäkTE„SWñ!¤®ÐŸàfw<5‹ èbpVýcÊ€nÑïÍâ9_ãôKòXu-ЄYo°-°éN±çŒø×|(]y5fP‰òžz?–·,ŒQ¸IÓ†Ú5uF±Dßk*ßÚ÷–4m}Í;`½“Q1¸«ãauyE%ï½<ÂæùØY)eBñp䜥,¤7aQÛX¦©êÝ7޽‰x*S;û¶>ꘗ%~tíÓ»z.xà ÃÁªÀzöš‡å×8Ä3CVNÆN§FáB]»äv¥÷wÐ]0ÞÐnª!o è ù@™6ån½ü³‡ž& 6‚Ã@zÆÿŸ8hÿÅ8á˜ãÛ?,oNi§Ñá0´Ò™ÆáÓŸý"6nÜÔKµ322ÆÞ—([%†& wO\Éx”£#Ùˆ ÃÛŒW36SŠ+|¢–{gÅY„ÃQmGk¢Kv¯õ »šÙ°"›VŠ3'ÍNÆÓÔËÖ¹aÚ4œo[†¦º +ۤůŠ¡ Øf›¶_ÛrÌJNQÝ{²,1T !i@åüÐPãZ»Œ” #}U߳ƘõÀBé¬pà!;W÷°¥åÞDû%©YY³{¯4Ë ÊÝ\±"]ª–{iÄÃÕÚìΙԺOÒr'Êž)s ‹ÃšìŽÔ¹­Ù®'¼¡­'ïzÄêT‚§°^ÉÀ­×\„ Ïýþöc¿ä%o³siõýwá3o~Þwîmü€·?g*>vþØ0q±zµàU³vºþt¥¸p^)+tý¸“VèÖ [ǧt!ê§ ' 06<ìW˜10å>^Zß×€ÎZî–?u¦É#Zî>Ìô‰>=Æà¦h¹[cE#â#øÍ//ÄÐÐŽyÖqk×ÿñXvÓMxé+þ²÷Œ¬X±çÿôGxíëÿ¡ŽìyÐ !ð øX#%4r¿”{Hf@mpý Ŷ9ç…íkè ve|îË–×E÷°9ih¹¥¥å^ºšÕ”y’–;ý.GòÞq–þwX~ËÕxáß}³÷Øÿþ·G£Ei`M- IDAT36/¢ÜG†×MO‚zi^EPîD5ò~Y ï[žÂRÞ¶ÔFTQ`”ªÅÕl…Ø xϘׂ8 o/7xRƒ8Mpºë»p4tÈ —ýáR<ë9ÏÆ>ûïŸÿèǸçž{pÔ1’‚oµZØc¯…xÆÑÇàûÀw¾õuœùwoÄ“&µóo}Ç=ëD,Ügî½gE£¼_ýòç¸oå½xÙËÿª*ì`WšêgQ•š;ëH‡äu^CF˜Ó ѵBîñ¸˜|ögfÑìVI0zÑĦæ¯6šBúÂ9‹È,Õ9 µ‹áÛËCÁøöÙ§1™¢ÚìÎxÆN;jéhɤà ÷ㇸ-,ç,ò6öQ®âËPmÌò· ÚFt5å¿nÍ#Ø´a6¬[ƒ]æì)»Ì­ÒlÚ€ÿ>ë•Øqú,œþ/ç¹C>öå¸üÿƒã^þO¸ê‚¯cÑáÏÆö;íŒ ÇèÈF<ÿo?Š©3æcÎ^áúeܹôr,XüôvPwAÞ¡ÌÆõkñ¿?ù Þüùßa›I;aþOÃÜ}ÆMW]ˆÖÌ1ZÈûåÓ¾<4¨ÇeŸRÍ]¼eØOl³r¶NÊ‹#ãû*ìÇ%ªkõÔ½Pîe!ýYÈZîOÌš=‡?} àg{ ~õó_4ôI“&aïE‹°òž{°æ±G±ó.»â–›—â§Ž+.»>å`<õð#;í4¥úšF[£øÞw¿‰ CðÊWý5 —ðÖedd Œý?kV߇ï|êo±qý÷²·ãˆ“Î<´ò¬Z± oøÄoĤgÉó^‡¯¾ÿû²·â?>/ú‡OV×¶Ýa'L1àŠ³öXŒÇy°k=:6[}ÜÐ.:÷?ªk&n‹ë—ûÍèŽ< ? 0sö¬:ÞüÀÖ¬y _üÏÏaï}aúô]044„XU]Ûwÿ‚y?öè£xô‘‡ñê3^?¦I¿yî!##C¢š€§Ÿ|&ž~ò™¸ùMøä›ŸŽ§õÀŒùûâY¯x'¾ðîç㌳~€Ù{,ÌZ°?&OÝ~ó_1:² {=åè*¿ kŪå7c×Ý¡5:‚ˮƔ]æ4Ê6s>Zy'fïµk}«–ߘºë<À §½óT¥w.¾3w [[Ô–{;Lô¢Å9”*3ÂL“S=g:Zî¬qOñlÖUÈg6„º'ý`Ê^ð2¯å†–|š3×àoV,_.Â;î´S£È«¯¸>å`‰€w¸å曪kS§NÃ]wÜŽÅÜ›6m:N<éùøÆ×¾‚—ÿåé˜3g^ R›½ÕLO ÜMš=¾÷Qè œ u_êáÙNd`Äëv!XÇBõVQÐ~»“F_uu=Õ¥¦©•‘Ëþ¸æ3YKžeް Ã2žÐ%–¯ù\¢Émh7ä5lí‘˜ç« _Ñ1\uá×Pú»ÌÙËo¹Ógí‰ÛíTÝßĎïøo|ù}/Âéï;óö>ðÀ’矉o|äÕxþ™­»fLÜv|ÿSoÁ‘/x=®þõ·0gáÁ˜»Ï¡ »`û~~rö{pøI§áÊ ¾‰ÛîÐ6À2q"žõWïÀ×Îúk}Êßc—¹{áöëÿ€ý—œ„rø ”N9Á¢f‰QæÖ«7iîÒHgí°è2ùD±E³[ñ‘*ËGo¥  tiþÐ3?ú$ÀëÆ?ý®»æZüæWbÉ3Žl¤ÙuÆL,»åfÜzË͸àç?Ńc«sxÆQÇbé7àWü wÝy.ýýï0::Z]ßmþ¼ü•§ãÜoýîºëŽ-rOOvÌÜ}1VÝ} .;ÿ‹Æk>ðC8ç0}æö¬¶.Ë‚ŽÄ«ß÷mÜ~ýï*·½9C†q؉§Uym7i Nþ›᤿~?n½æ78è˜—à Ÿúuuý„Óßb¨½j:ùµgá £_ŒÛ¯»Ï~õ»ñ¼×“§Í<÷µÀÉg~÷Üz®øÅ7°íö“1}ö‚-Õ$OzdÊ}+Ç‚½öÀ‚½öÄ«Váž»ïÆ+O? »ìº+à3gb„ö+°Ï¾û¢,KÜ|ÓR̘9§¼âTŒŒ´-½í:c^sæßáê+¯ÀÕW^޳f¡( ì´ãúÔ§æÌ™‡Sÿê ܶìÌ»Ûv¿OÌÙã ÌÙ³¦¶;KÆi3ˆAtîÞ‡`îÞ‡h+»ð›Ã’ç¿;ì´s•f»ISpÔKߘ¿ß¥Þ³OwÞf;þÜÓw:àæ-:T¬0÷?òyX|äódµÈ”û–À@ºweÑåA5(w‹\s…¾¬JÊ]j÷šö!ýv›æl÷§ šœ¹˜p^2lXa.GÉs²”Ï@—`™{î9öïÌfÌœ‰3g¾mInÿÅ‹±ÿ‹ƒÏhúôq‰Ï…ì¸ÓN8䩇×ù͘…»Îi"•6âÐзYÊÔˆQÓF^ƒÊw%Ìt1*/Kûe­L|ÅRÞ—¶•N˜vÁØ"Y2œù@|£b1ëjo¥+0[tÓÙ§ELÇÙlÑMûœH‘gnÔaçÕI†¤v‘Ϙ­ÆY[,Ú0MŸ~óј>k^ò¦Ï@ÃÚ­±Òé÷3ö¾v4ä55Ý𭃸¥7+ÌòÊgM’<Û¨çkšr· )jú>Ö½ô ÞmKqÚÚZ8Ô€Þ{!Ks «s Û¨Â+Z?§ ¸L–Õ¥×±"*£Þ¦Ð[çî½ï>üöÒßÕdLGï*0 eõ–å®ö?££™XÒA¢×At<dãØÛR—„/X÷¤&êDm‡.n,LÇÖ<ì^ŠåU•sèco\¦k¤×ñâï¦orq„¬|QßK=ö‘—××edD80{Q¯pš x!1Þøéßw="¥«b% â!ÇsAkgôê‘a>óØYÌœ5/ò†¹ïÔÝœP¨û2/ 0 §XŠË”ûVˆ•÷߇•÷ß×þa â-ãkà/«1 s86 ó`•‘‘1ž¸înƒõ³L+¨†3æ¨âkòjÒUÂNp…¸V¯GÆÀ€”{‚æ^¡Ãx¹žRòÆ Ý¢ÉSWè&ÍÞX¡û¦|Cã=aæPOÕÕ40EiºaÚ¼Gl¾-c Þˆ­«×m¹³fz/yÕ«OS>å5ºl. òdcÏ.æ=-ÖR7=dÄ–9ô¼­É(‹¤xÛˆ5»E™›K)•YŠÖ¥Ó4t‚uú…”ÑØ£‰ èy®Ëz?¶ÖåžBßkîÊ|ƒTñÖosòÕÅDÊãß±AÔÜ׈Qæ½[“eZô{¨þ°:ÖséI_²æÈÈÇÜÏ3âp÷û²hî¨÷£$¯r°¼-÷ðzr’Wßû ¯Ú«ˆÝ DØq]ÆF8ï¡hzK^Ö¥ú©åÍn¿ Õ–‰Wƒ’vÁøÆ#Å#íqñ€ÎÈÃ>Ö×€bTýõ|»WÊÝÐUp =;gÉÈÈÈÈÈx’`@è€KÒr§©—¥maåÓ0ø;$íw&ëi2­‘…‘tªW)yñ’É…‚}-ÒR0®Tº4ÃØ*Áº ÃÊ/q%ÛóÃɇâëÐM§=T³ÔsáÜ’i³³Æ{Ï/Ú+¹p™Ö½ë°µBWéLmt# k£kÍtcõÖ¨W Î®T÷käë€ µ>Zîì]¼¡4|É‹t ?µK°Š×;$¡ºSuI$Tìº%£Vû¡Õ÷ +ôF5ú\¡—n h¹Ãa³k¹›º>bí‡;„™Ö-¥åÓxïu@o¡;!+_“ÿéçf„ûÊ+å!m.-w¾ÖG^‚¾Á’G%ÏïUÞ•H6µÔÅoiõÎÒf7)g–g«oy¯äkmtWk£—Îôg¥ÏZî¾Q*^ä… 6{TË]?#FH˽ñ}ƾɒåµݧ•µñˆcóå΀U¸4yK˽ñyX”û8èÖäBmʽ[Ó§ŒµÈ”{FFFFFÆV< gdddddll}à‡»$â£^‘}1§­ö3ì¤×¬é(…Y>U³Þ²þ4ª6+;òž2Ó¬);gªå}ØKÕ25ö)íðÌ1«–{„4­¥®åS÷8û"⸂–Iðgî•?ó$ùú%ó¢üTÊ>Fß[{?–¼B{ŸçJ÷žÂ΢ÙÍ Ãžî«Jç áèEøV·î×±‘›b¬Í›éœæJY¾òöA¬“ô½ÌËØ (öâéqIû;òÔ?ÔNcdùf¿ana8uQlZÛrßÜÚ>i”¼QëZîšæ.(L]X’?sÕV2ª.˜ }ÞN×¥ÇnS„ÕÒØ¤Ù­ÇÚånÀhÂhWè[ò€ž‘‘‘‘‘±`pÓ¯)tÓÔ†–»žÃI(ÄbMK*SÓýü»e„u ÊÝà=cué@µƒ`õñ›@Xhùk {ó G[ê–,¡Ü mè6?Éò)4{˜æŽKèn ÈèÝö§®ïËÚVÐmj×H'jï{joIS°a4…B$oj©Ç¶ µgGï´ÈË´õ½\eãØµQÞÖ…üTbßDUyõî ­S/Z¦•z_ázŠ£j)Ncøg´#t©0^¦Ù™þÖ¶–˜~75ãéS×GØ ’·(÷–Q¦ÿ;¿{ ofʽ,dÝ-äzFFFFFÆV€< gdddddlذL϶}±‹žÂá²Mÿš5eÃ0S*´ÉUš|Á]9íjÈ ÷ʺ"!MÊóˆ!Ù‰Hï7fÓ¶íšØHQç( 4wò>*Ÿ‚ÞR’À´üåT|J:Ÿ8„ý±« 'P»ŽjÊ=UÞ²ÈÖ£¥9Q²4çŠDjÛ‘ å園7-Õ©ºŒk‰x-i¯P^¡2C⎽ZÄAñ©…ü¤*^Q䜗uÇ {*“ÃU=CaÎKW}(÷-ã>5u@ɧ„úääSP!KoÝä9<ˆ¥8î|Ø©ºnk±ÅaKÞz›(B›YJñ$f=0í#)/½W0 '½<}ì¡'¿|½ÖE_ƒŸ’>CÆ´4×÷‹Ø£<×E«T±ÌØ`õ4¹hXdK×ǶØzå\¥”wÔÆ)[ãëÔ«TMŸ0Qi[§£>߸ßê÷õêñuéÇ2³8ªf|ª1ÿT)Ÿz_{èFúÎ-¯íÜm®U7,dÊ=#####c+À€þеE”Þଣž]Ѭ۴ ?®+tʘésöÍY¡{K^Ý£3ä“µÆ ¿/·á,ä¸.ã±*îCÞ‡äÕKr`_ËøTú¾ÑÈ¡†ígµmÅë¼ÂÔª’7g÷&M±2 Sæ©H¼÷$mj’±ŒKé0Ó䚯.¸$y]Üæ Ü9¾!o„k£'RîÑ0¯Êèwë¥pö% /ÀôyY+leǨBÃH!ÏÚìVØR^ä ™Ž¯…Â{«þIY•w[¡»-䜥ë?uîU>–—>*f è)>е?ôÎïõG×/åžr/âÍäÏ…'ö› w¾,¾¸b´|ç­o˜óëm–/X¿{$!ù^(÷ÍAÿóµ~òêv-#é§=½.žîÅéÄq8óL’N‡p:#Þ³ï`9”±öÍEOõ¤>¤I¹;!ÃùVƒ•ÊËÒMˆÓÿô}Z”{Ä:œ ó·Nñ=ŽÎb‹D½:É;uôê‰=p5ØV0â-«sÚF";á„=ôÎ慠ü¼zЃ×BñÝôBm7È”{FFFFFÆV€Á ˤÀZXj•‘Y\ʦAÑ8 w.&/ø¼ˆw%MÝxÁ£Þª°¼_/¦)òá0OºQ zžÇ3 …,Å&‹ÚNÝKGè>Yž`¶c¯+j{fß(Ò¢DY^§Q«Ñn2!ßÞŒÄ%§FùF^œk¯t²ÝK)Wb‡&¦ÈÆyu~ôA¹³6»ÈËAÙ±hvUG¦Ü-¿çIþÐù·#ÕXïcànév¡OÝ\ýê¾Ò˜+t'¬Ð•3è óÒèi…Žæ'«å®ó²ÂVŸÚ+kÊ´ÒÁàê0ï[4{´]\ÞäˆẨck‘/#Æ)õ¥Ïaž…(~ø¡¼ôK‘OœDîеԼt>.&–WL>å#N¹¯~ÚE½‡c¿Ût²¾Ö ‡ãã2ÝåMæ Ê]¦«îDÐÿ4@é¼ k~IûÞz{ *]7è|] œ±;§‘Ðmˆß‘W2E]&6 ¢å>è€Þ¸ftí]t‡¤=Sî[ò€ž‘‘‘‘‘±`Ëh¹‡Â€yd$J?th,Û‰Šµ_è¹mP_ºÌÇk“[¬LùØý êF˜Ò4܃wÀÚó€¹W-Ï|TÿS|•â¾,ÕSo9WÑ/9NIñaÞs:zàž~,¯ö5é´EåÕph‹¨ö~l+ 7yá*%Åþ`¤58™— n«¸H™)[$‘û¢37ì(¦QóÐNB£þF¼urÃ!ÂWÚôwÕæ^³Ù‡ QÞzÜ7ifµonrµV£¹;hô ag4¹èøó¶» 8£ @aSîâ¨ÚP8>Ù°Œ•Fƒæç£é#hÀhÖrÏÈÈÈÈÈxr è[£Ü5sBÌ`%khxFbÄüއè*¯2"þÃb`õª#„¿i¢Æç%êQ[dC\/³<‡ •¯ Þ,©ú_“rg;,<íÜ™%£Ó QØ¢Ü{;–`ûF’èdA³Û4¹¯FlÆkèújõ½„›(®Ò’W|¢0,ÃT~‚Ú´¦øå% Ãø°Œ¶eîùX)×— ³›ܬ¾9ö“·Á´0õ5eîÙü×Kmωò –Ý[÷¨ì…ާEúió)rWyÜòËcÀ•±¬‚äu^±®‚ÂŽ>Oñ\)ðÍ®vׂtºÊ+…Нî!®çÏ~ ¥ËþÐ322222ž4ÈzFFFFFÆV€Áœ³)¬š¤¹’Ç,Yô…EkYK¾$!¦»†¿š9H‹rl jÔ ¿5'({¦Ù ûEÆô;Ë(š¾ƒB5DEU*ÊÝ⻜a ÙiÕUKžUW•ºªÉkʽ{ئÙ5ånPù «uåžj¤&EË‹QÓN:<2ó’\©§çí,-÷¨!¾±WASËK…ꈚU)eë[¡­iôÅâ¬-8Hc.¾y#¡%¡ÉÍxëÕ³ݰf{©ªâƒÁ8¬Ý‹>w¨²ƒ¤ß-j=¶ëFZòüŽ”––|?”»ñ©Ç(wóuK¡âÇÐ*Ô¼BÏÈÈÈÈÈØ ôŒŒŒŒŒŒ­–ñi”“EW‰¼šÉ«ø;¡Ï½r‚" óò©JÓd Þø† ku:™¦“®´ïŤ®Ø Ë  ®™P $Ò¹ ÉGo8$_ Ò‘øÞ©iXÅj ýÐç½^±a:Z‰ QÐ’IÍWhÌIÔç)~ÖuŠã‘†–;oÑÆ FSœ.ߨ¿)OnRÙŸ9Çw~Wâšf§° ´‹®£®¿Y_6rK ÷Sœ>¯v›û }£þTEa-ïŸ:Û'ŠÉÇòe¤¦ÓØrþÐ{éuúpÜ'ÇN!u®ñËÛ§IБ4 GÂIòÖ›I¿ƒ{ÂÛ¬Ã!G/º‘SÞfË[Z0] /ñÀ¸‘8°¸ŽOyyz\ô"ÀïTùl/×¶Ô}…ò¥3êèé=Žë´œ«pv±¾&Á’¢Wƒ-΋å­pj^–s–h­úêx^l'6Óçí6Rä#ÝFpœ»Cit|¨n½„HÐ3åž‘‘‘‘‘±`p-÷HŠÎ´Pa#i× Ù;(Pk°‹U-gNÊ®ðƒ®Ð…“ü©«p -¼ö‡n6q,³Xº>+Ö|lµ?ŽKoòÌV]z‘MG_JS~@úÝ*4ê+›W-±Ó&¡¼Äбg¿ß]®uKcù çju®…•÷ 49ºq@}Á ßc÷eÒ÷œ.Æôr£qM|^áQÈ'v;©î B”»ÎËrËÚ× ÝJ€‡í „1åžP‘qÉ?ô tZ'ù2˜rç¼Æ“r/#錨Ù.®Fá Íy›-úÜ)yëÌJt$¡.ц$¯ñ–Gàw?(&¡÷‰~œã5!‰µQåyÔïU?Ûs@œŽÅǾŠ£v=ÊGiò„°1òæ¿9höçÛ±¹{_ê2 ]¶:gQî¢ LéÛU9æ„ÀJ@ö‡ž‘‘‘‘‘ñ$BÐ322222¶l-w{+-ᘂ¡Åêõ‘¹˜¥8AŸeZt•ò‡.Ž¡1ÍmYfbù–*¯ÊÊI.†­ËÎY|ÉŒ•/$OÃj’ÚR\Õ°l©Ms_†¥¸†£Ú‹0ý¦Gw®9Ê«áÃ<Åj?˜ZÞGý™÷£%£ü{Í‹AÏ[¥‰ý ¡áÅÕá4®“Å#å1UlÔË%ÔPûÃìOóRï±øôË*ÚtÂb:gašÛÉOBìAÇÚ¢sIÓä¡4:œ`¬‘W;¥ŸtÈ¢û «œhßJÉhrñF?õºPvVåµÕ¸Ž|äóöCápã@M§nÒï¹P¸×4c(ùŒ ¯Ð322222¶ä=#####c+ÀàZî½@Ñ æ }!A2™édL¹_c“Áå¼cԙȋ.pk'úC‡E1å®ý¡[ÆhL#5®æÉ—Š»JRñÔêÿ†|Ôºu” •&çpû·ôÍžJ¹s~½ÓäéèŸ>ÈEš´BøïµÊ±w?EÜâ¼5ïƒA¹#§Î¦Yt¾·Ž­15]×õé(‘×–?:? „µÔq<·Ä¢þÐéÔŽ°4gÐìMKqµú~å´&rœ® ³ç§6víøènª–{”Ê7>ïdù”O=%C¿ò±.‡Wè[ò€ž‘‘‘‘‘±`óS¯yº(D´îÑ>l*C3½lÔEÐáVõeÃoi¹ñZËë849),´ä5åÎÜ•¥ÙÎ|צ©IE´“®Ðª•.cïD“ûÆÃèæ½ån9F&èâÁh5Ö^5ÓùZŒ‡ƒãô,Äò­å%ýÞ+ž*i#>m4·ú†ôíÎ8 媾㺱ïDRéD™ó–ûw€§Ó-Bãžin]޵À›$üyòV¢ÜE]:éÔ½;’—Ûs2#iЬç$[Läì|]ík¢*v|§Û‚ðg.(sKc]‡-Ê>AžeR·vM túwÊ'Õ©†ûò =#####c+@Ð322222¶ H¹§½Q9Í\ôÀÕD{± ª0ƒ«2¤Úe·(¢Ôº8 WZ¸®wíK!3X#ù9FM÷“W›™ëãôj‡²ëY{ãPËV”©¦®äù;°¨uƒ~—ârO˜œQnNë2øäIKã^ÔEiÜ4ÈcÎYÄU¶ïU3=ÒvA/…œP ‡ oü²Œ ‰ôÆûéõ§n–‘·®õ!ÓkùOdWa èsì<âˆ#&/Ÿº\î›èñ©æ7l¸­ÎæP£ïÙô5>¤œbâ;: SÆ…ÏÇâ'²\8ÌûL%]k´KJ˜~Çü¡#1ßàž*ì™JÃÏz›Y‰Ñ¢™˜´Ã6c¿­ÍqSêÂH°:×è½RêÕ~ø×]÷6mò‘òíY6SÏ”˜ï~ûc»íÚi]Am!¾ ÖßPûî¤{ã,§Öpÿ+îmlÆÛØ„$Oýƒ÷êîäÎYRäS0ΓIÔ9öxÎÝïC]æÓ 4ó¶ÊLDk÷Ý0}ÏݧxJàòÝìÞk1€§Å xÁ ^°ëÝóî¶K©Nÿú-oAKìÎÈèÏ8rÌ™3eìWÊ ªÑëJ>ÖcŒ¡1 [á¦A„Ûn{›6X•ý³Ç3Ÿ± fÌh?×Ï$µÓ~N= %sÙÕ-¬¸7÷1ƒãÀaàaô>pwI_>õÌž?.€¿\þ)ÆôèúÈÈÈе×^;ïÚk¯wî¹çνçž{¶Yºté¤åË—o k^‹õ¯ÇÆÇ7â®?ÜUIXÿÈz¬¸bF7v ™ûêoíƒk±âÊ(GkÕËr´Äê;V×÷Ýp6<¶!¥ êÙÓñWÐ_ìZŸWiup ánòc|&6†§¿ñiØAä5B×›éî^~#6mZç|šX·îQ¬¼wYðÚŠK±qÃÚ üªûoÇš5FÊMòè‰×Å{ú‹\cÜ~ûo1Ú ÞËŠ»¯À† *ÊZm‹± ^ý±×—Yéu~ÍMO•&Uƺ/y/Ô(,#þK*FµqýËj{ïTñAê»ïÕ§¬óiš7Hn·¹¯°¼ø£ºl܈{®½ w]ölZ¿£›6á¡;þ$Òo\û8Yq7<€Öè(î½öjÜ{íÕ|WÜvë6eYº_üâ»,]ºtR³¥"üâÚµk'~ñ‹_|Õ²eË&ï{ß›ÙEÂ!yÞïüî槪OTõšWÔš“鬸t£‡pˆrwêë°äuƒ;º1aV‹ÓÅ øxYè᩼¢Jú… ¿@?þÉà”—¾»ìºἃ{ï]†Ëþ÷{8õUm\;ÿçŸÆIÏ}æÌYÔÈë8 ö8øœHîVÙÖ$ÆšÔè¼béÆãWÆw¾u:Þðæ«°ýöÓ×~ñ³wá„çœ…Ýæ/IËŒ¿U—¯eSoËÂzdè1ìÓêܸ…DZO2nÐݵ¾ä ãf)Žâî½ö*|ó•/Æä™³±óÂ}ÐÁ‹Ïþ*¾tâQø›_]‚©óÛ}ͯ?ü/˜¸Ã$÷žàÛ¯þK Ã{‡þt+žû¯ÿŽùO&àƒ¯zÅÂó?uø‹Ö¬Y³ý}÷Ý7ý¸ãŽûãw¾ó‹ø>Ìý¢‹.:È9篸âŠ{_ûÚ×Þ2}úôÃæÍ›wý©§žz<§[}Çjüýå¡á!¬[½?yóOpæÅgbÚÓ0ºqŸ=ü³8ì5‡áÑâ×ú5Þ|ý[°ÝÔí°nõ:|ùÄ/á W´·_õ8Ž~û1˜wø<ÜsÕ=øÙÛÚÐ32ž(x¯&!êrYš×6zM222žHüðÎÄûFùo­#pð©¯ÆU_ýžõ/Âè† øã·¾†×_|àåç|»Ú^ºõ—çãªÿþR5 ÀñÇë‡?üáë—.]:éˆ#Žx}Y–¿-H¿ÄЗ/_¾×Î;ï¼üúë¯?ìÛßþöO.½ôÒ]W­ZµÇ>ûìs'§[xÂB ·÷÷î¿ñ~Àüâêzk¤…;w'Ö­^‡á†ñ‹>¿º¶öÁµ¸ï†û°Ý”í°ýôí1÷°¹€ÙÏÆÊkW†+Æ3¡ÔYå 3/k…ÞÏjŸg”-÷žmž°–zLËÝ\¼7Ú¸NçÓ*Öåz‘4/‰ûVþ ]tî»ÿv,\ø´±Á¹öâß~ ¼îWpp˜5k!žùÌWb×íÙôçÿëL|ðI¸üŠbÎì}°øÀgUyŽŒlľÿì¶Ûb±ä¥€Ûn½ ç×^½/9âe8ä“ë:µí|³f-ÄâÅÏ\vÙw02²ÏxÆið¾Äo~ó\{íϰýö;aÑ¢cp䑯ÂððöÁûà•j†-2-HYñÆÄÕ ôê+þ×\s&Nœ„£Žy;öÝïu¶céÎýú+±äÈÀn»/é~Õ×é…6¼¥Mnå¥8âžóêRç°ŒÌ h²GEyã—×z•m²–»µZÔ'\¯îˆ¥]ëÄnØ€û®¿§~ë¼Fš§žñZ|ñ„gâ¸w¿7ž÷]Ì9ô0ì4o7ÀòK/Áµß8÷^ûÿÚ;÷訪{~3““0’y’ò4| h/] _\½·¥(¨T—zU´ë.–®[mK»tq/>Ú®úk}ÖG©¸¬hÑŠABP‰…‚BB2ìûÇ9™9çdÎd„$p¾kÍšýøýöù}öÙ¿}öÞ¿ßþ —ÛÍ‘ï¾5ñÞvÛm_”””s»Ý¡O?ýÔ7ujd»›­BoiiI=zôv¯×Û\]]’™™y ¶¶¶°±±1rL¼^øè.·‹¤´$¦Ý5-\仦‘–“Æ®¿í"-+Í’w!¾\͇šIHILÄ%¨6¥5V›‡Þ¥þ½«úá„v¹Kt»és1Ä­ªÄÚÙx\D< tyÊÝ7N¹+‰³,—9¬ì*Ùfú½Ã”yw(ôH8ðüïãÒKsíu?gãÆ7Øüé_Ât&ÌbúŒùì(ÿ;ýãO\}õR@hj>BuM97.zŒääT*¿Ù ÍMGøÓ‹÷1~ÜLʦ\– jÏç,¼áQüV¯¾—ä”TJŠ/ˆÖÖcþpÜïoÇ7o~êêmÜzë $$$³fÍoرc'^nsÏÄ‘n¥9-êý¤QWWÎâ[>æð‘jV=9‹ò2t’‰æøñÄ‚­áxkk#@3ï¿ûwÜ[N[[ˆW_ËÐa¥ Îï8ùaζæEC,åhÃY½ÛÅÅo£Ðmùíp*§Üc½’±x¢ñw×wÀÉòŸHY€x܈Öãòä=n_½³†Í+Ÿà‚;ï -âõŸ.dުșø{lú„§¯šƒ:tZ›ÎÌÌ w.—«-˜J·Ý'"mÁ`ÐSVVöõC=4¹©©)±²²2¡ººzˆN¢HDÛå>H†œ 9„ü!ê+ëÉ•Aƨ ¼ƒ½¸Ýá5õÖÆÖp^ò€dRâ²{sàà”¡®n7(ÅØ±!"”–ÎÁ펌m“’½TìXÏÚµ³k×F*wm2M¯O.½œä”´ð ähc=Ï>w\pI™Œ7“”~ýñù²3f»¿ÙÜ%Ywî\OzúP¾üòC¶o¯w ïŸÄÝ÷]L*ý ‰‰ý<¸˜Âá3ø¦²kõ°sÇ[ô÷ £|ÛkTlŸo(å¯w“´Îf¸(œ~1Ÿ­zжfAl 4Ë-f݃÷Ó°·ŠQ—Ì ¹þ þ¦cdŸˆˆ°õ­×A” ‰q]×ö =%%¥ñàÁƒƒW¬XñÑ’%K.X¸páÌœœIIIerrr0O¢7‘yÏÌã­ÛßbÝëÂkå ×.¤N®zò*^üÑ‹x3½x’<ø›üÜòñ­ñ×’§þ@ ^BNð$’”ä ç¿ùÆÃddæQR<¤¤~|±}Á Ÿ„DÍFsРaæ•"ôwp,àM§zÓ9zô`Êà<Œ˜¢ùýÍx<‰õ¯ÎrÈÎ}wÝ÷‘šš §et´JÐ\ÈDžC0±˜immÄíI § Í€ô<š:ãÀÁIcîãOðò‚ÿàK X8‚þÃr¹æ©Õ͚͚»oãœù q¹µ%ëÔ¬l~pÅ5<^6q¹uÉlCiñÍ¢Ù*ô¢¢¢Š-[¶L÷ù|Ÿ<ùä“ÿ|þùçGMš4郹sçÎ7nÜ?B¡3ï˜ f¾‚iÜñùQË3g cæŒ1¤hBú†ù¸«üníÿ4ü<®pà «È”K}} MÇð¦¦SWWEsó‚A?»woáškîÃíIà«/7tºù­ÿL.»ünž_ý3‚A?ãÆEöVíþŒÑ£Ï`wÕrsÇvàÏÊI]]e8¾k×FŽÔvl2†@ •É“¯2pô)òSªoþÎàÁÅáðŒ.í@“3ŽÚýÛ>òbÚÚ‚Tîz‘0dè9¸Ý‰”{S˜^DØø™ úIn8i~} äpóûŸD}ôþ¦c„ü~J¯¿Ñ”>gùc¦ø¥¿^ÿaãgå'ܨ:ôˆµ\[…>cÆŒŠêêêÂ%K–ܾuëV÷À-[¶lVqqqÕ‚ jV®\Ù…»sà ÷ ­ÿ f\ôcV®ZBQѪ«ËIÕ¿¤=žDò ÆóòËàó æ`}5nOçËB>ß`,XÎêÕ?#heÒ9Úèú»}_ñÚ«¿àxK#~ e“;ú…9r*~ø,¡Púú½xûÑt¾¢ÕXßÈc¸/åê€,Ì;…ÏС>Úwºküžšš ò Æs¸¡–ÌÁ$$¤ ”bïžm‚­äç§v%¹ycqñmM9CF…×Üo¤ñh=ƒ³†‡ãT‘—;–ÚºÝ L¾ý_ãvyÈËŸ Ëõõ5¤¤¤áõ¦B ÐBeåF²²Fâv' T Õª§-ÈÞ½Û8zô>_6¹¹p»yä‘/8|8€í¹“ÖÝ$ÉîFÂ<öºt_ÅëØäãÙ˜î"úq·YÄæ¸\SºG„Å7§‘­{Š«©ÙDVöXöîù˜´þ9dçŒ×É„ýû¶1pÐp’’Ó¡¹ù{öT­'7ïtF õgi±ÊªàløF»Ñè{EæB[é8ï2-¯A©-â¡‹÷MއÎî~ã4”µÔ½2 (Œá"'.Å;€‰çúV™£…Íñ ¡í›¨ì¼÷uHÓ_|<ÑE”y&(?Hb”j‘hÁªb1 TâKF++¿q,yž™cm#‹jiBR¼1ÃØûå°ÐÙð«X¯Q'¼Ö¼˜ÝS<è ÏÎíȈQ’°Bohh¸SJå)[ŸmN×MÙÆrª`§Üc)q;žXéÑ”»•Ç8›gô(2ômÒñ~Ú_(;y]ýúmØ÷FÅ)––·oôhüÖ·D,ÿñÄ£¬cÑXeLŠ‘ ±¾r»ú¦vµ—‰EOYÖžÔ»¯}#¿Ñe!@šÍ5»ê¾Ðšg'W4™:»Ž19Æ`ÈV Û±XÛkôbmL{løííQÆ<±Æ«8M2Ú„°k:.«,úx^o»f( i‰‘$Û.ÌæÞ t'4^õÅ“~" ½+_ MG·vFf·)Î8pЇpæ.À9pàÀgNxʽ3ˆÈP`<°M)µ¯»®s¦ADFFA(¥Vô8}"’‡­mMD)hF†›•RQ½ž­‘"`2emg"²˜È‚:ÀJ©m§S¾Þ ÉJ½J©/£äç%À¥TÝé–¯7CD\À9@:ð‘RªÅ— 5û•R§YÄ>‰nùB‘yÀ.à RD®ìŽëœ¡˜Ü 0üØ@DnK,yiÀ‡Àog€wELÙg5ôúù+ðïÀÿ‰tXþ%0„H;têN‡ˆ\lE{WW‰H¹®àÛó¯v¢õ»Eä’¨½¨–7»DÄèü'À_€úïÓ/^ßÄ)_C°X¤”zGD.GëP •R§Òà󌄈\ \©”º®§eé ÐGóÀƒ€[)µÄw'p9š£$7°ø½Rꙵ×BD£yãq)C‡ "b¥T} ×K¡×Ùa¥”_ÿØ©”ú¥ˆ¤ß—)¥6ˆÈ÷+¥ŠcyVAD†)¥¾ÕÓÐ̤ó”R­"²ÈQJÝÓ£BöAtÇúx47]èñuhÓ'ãl9X1QDž‘_ŠH^çäg/”RÓu\ ¬WJtš±,g8èËEäw"rEç¤g”RÚ•¹Ž=@žŠæ¦ï=þ7`Œˆ ?mör´+s{L̆Î#Dä¹ðôJÖ·Ñ = ¨TJµ(¥š*´©;£ xxȾ‘ž©Ïb0Pnˆ—c^›s+€7Ñ9?&"÷÷°<½úZùÍh3‘ µ»ŠöÙ¥ÔAà NÛ³Ão€ÕJ©=~8\¼""o‹ˆÕàÍAtǦ¸ ×Ú’1{Hw`¥Ô&`“}ID>æ£M);肘=Q'cöúï ”R¿Òƒ‘/Ç_ô H½"’¬þ[)õ¹žlmw õ‰NÛ³@D–¢Íêþk{šRêit—e"ÒmùâJ šstÇz-¯o¸ADÒÑF¦5Ýp­³ûéØ98ˆµ€ñ¼Ò±À·6´bc?Φ8ôýïëJ¨µÀh}?ú²Yœ¶g‚ˆÜ \ \ª”jŒF£Ïðn†NÙú*ºC¡—£yr¿A/¶+¥vvõÎ8ˆÈl%"Ù"²˜‹¶ÙA×ñ 0[¯Ë<`&ðRËÔ« "ÅD=Ed´ž>\DþED‰Èt`°¦§äìm‘AhÊ|¥Rêw–ìhJ}¾n9p°Á²n|VCDîB›yœ¥”:lÉË3„KŸž^ û&ºÅSœˆ”o M=¹SJm9å:¡ïÌ^€fŸ¹xT)õçªC·¢XMd£X¬”zIÿBzm§»G§û/Õ¾BD^À¼¿å¥Ô"ƒ6Å>ÍŠà=àA¥Ô‘³×AWHË£†äõJ©¹zþ…ÀkÀq4З9¶ÔˆHípjãÆÂéJ©/Dd-šý~È~¥”ZÖbö9ü?>¼³ÌÒ;é„IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_svdclf.pdf000066400000000000000000000472351202542755000206010ustar00rootroot00000000000000%PDF-1.4 %¬Ü «º 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /CreationDate (D:20081113012450-04'00') /Producer (matplotlib pdf backend) /Creator (matplotlib 0.98.1, http://matplotlib.sf.net) >> endobj 3 0 obj << /Count 1 /Kids [ 4 0 R ] /Type /Pages >> endobj 4 0 obj << /Contents 5 0 R /Type /Page /Resources 10 0 R /Parent 3 0 R /MediaBox [ 0 0 576 432 ] >> endobj 10 0 obj << /Pattern 8 0 R /XObject 9 0 R /Font 6 0 R /ExtGState 7 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> endobj 5 0 obj << /Filter /FlateDecode /Length 11 0 R >> stream xœ­WQoÛ6~ׯàc Ì,ïŽ<’m·(–EŒí%/†ã.ìx•²öïïHY–D9²;¬@j‰÷ñîûÈ»#…ê³õ$Ÿ*£ŒÚ+çY~wù×Ê“9ýÊxõ^pŸ*2¨1á!hÛ¾ìŽ/‚ò& Ác ‘ùßNoÖr‚[§YÕõ—zVFŸ*0¬‰‚ep\ ¬X=G$#ÿw1‹Qð¬uÿ*±}íjb?Ñü¢®!QÃq®åŽ(¢Ähù AG´ûš=ëj¢èƒ6ÇØ&tD PS·tÝ•£„aL´ð5¶«‰ý爓Å& Ñ4¶ÂÁÒ­6c¢…¯±]Mì?GÔÚ¨}±É{eƒÕ†;NÑb¨ØúÂר®&ö«‰ªÏ iwÜ ï8§]D£óÖ¦¢*ìÑkë-°7S» MÔäº ¤£ äù˜³½°Ç¨ÁÀà]ë!:!ˆ²[£IÞ@š˜‡É©?ÏD¹ÅSmºDGYQÏ2ÝšÈ!eCa—W2Äǘ=Xfº &%\´³N"¥m*ì)3DG°Ö{›=\^Zɧ~Tß*È­&K9^êõ^½½5ê×à œ½Šh& ÖBtx-8í½aïc4ñ ç²Ê‘ÙØˆ^Rê"½T–'ÑÈ&öð/ÿÇÂŒs,;‡©“u™»¨#!á"|ÞK¯¢(ôýe<ír BÝ ài]®žW-ÏÂvÖ«ÈöäÌPj¡&ŸÓ?ª÷Kõöc«壜” ¥n¼³!Ï2:í×ò¡ºy·Û©C½}ÒoÔò«úm9ž'%LÑv©ªÑHÛog>nV/ÿÔ›FÝß82÷o:¥¶¢ð{m¶ÔV ÚÜœ65³lþqÖXÛ‡Ãþïæ¬6ˆV#1»ÀmÊ»¿f4åžÔKቔ¶iõ üŒ”ì"©ØÜÖÍ‹rg¹£œúÒë䌛”;±Nbõkœ‹vØ“%ù9PgTPª)ÒVàT ™³RˆQ³É{Ðvé«ݹ¦TT@Šf$Y›Ø¤ši§)"òg¨g99Æå€ÒÓ©!oàø¨ˆý:”‚üpW`Rúƒ;t‹˜«x—œ“È”{W·š²#3¡Á˜Ó¢LJ³=„Ì•¤ÏA£ôýQ|˜‹ïRˆÖù¤žŽñ¹‚’øÑäòH[1b€3 Pâ¶Î'%ÑÆïs…àÒ—F®f„t* ÃÓ\xOúè'|$0€Ì%®PHy*'´¸a|;ŸNÇÎ+É7„\ȾÔÌäSfœn.|_”øJþ !òÏrn§r£g Ÿ-Ùb‘bÉ%-œ\^™mN¡å¾º¹Ý¬žÕz·jšíãv½zÙžÕ¦®µœ}ȼu}hšÅ÷Õnû¿ˆÛÅãa÷П (—ìÿþ9|Wå[ƒ|Ot´EW>Ĉ4$Ær7Ñl»æôûöy³ªÕ‡ÅÝŸ·%ñûyhÔ÷F«f½mšCÝô4«8GR( endstream endobj 11 0 obj 1117 endobj 42 0 obj << /Filter /FlateDecode /Length 149 >> stream xœ5K! C÷9…/0R~„pª®¦÷ß6aZ Û/Áƒ‘ŒKL`ì˜cá%TO­>$#ºI9©P7OhL 3lÒ%ðÊtß2ž[¼œVê‚NHäé¬6¢Œf^ÃÑSÎ ›þËÜ$jeF™2ëT·²²`æµ<÷3î¨\脇ʰèN1¢ÜfF~ÿÛôþ{20c endstream endobj 43 0 obj << /Filter /FlateDecode /Length 52 >> stream xœ363T0P0±T026Q064b…C. ˆ•Ë˳@ªr¸ Ês`ªr¸Òé À endstream endobj 44 0 obj << /Filter /FlateDecode /Length 49 >> stream xœ36´P0P040’F†@–‘‰BŠ!HÄÌå‚ æ€Y@¢8®&‡+ Æè & endstream endobj 45 0 obj << /Filter /FlateDecode /Length 80 >> stream xœEŒ» À0D{¦`~&fŸ(•³ JÜpOº{¸:2SÞa†‡ž ,†Sñ™£`5¸FR죰n_uæzS«õ÷*Ovvq=ÍËô endstream endobj 46 0 obj << /Filter /FlateDecode /Length 90 >> stream xœMAÀ ï¼"OPDÐÿtzÒÿ_«Ô½ÀN‰E‚ô5jK0î¸2kP)˜”—ÀU0\ Úî¢Êþ2IL†Ó{·ƒ²ñqƒÒIûöqz«ýzÝÒ"X endstream endobj 47 0 obj << /Filter /FlateDecode /Length 210 >> stream xœ5PË C1»g ¨džV½uÿkmÐ;aÿBXÈ”y©ÉÎ)éK>:L¶.¿±" ­u%ìÊš ž+ï¡™²±ÑØâ`p&^€7`èi5tႦ.•BÅ%ð™|u{è¾OxjrvCÉ` jºMX´<ŸNâÿ~Ãî-ä¡’óÊžùœíð;³ná'jv"Ñr2Ô³4ÇE> stream xœ36´P0P07WÐ544U022P042QH1ä2443s¹`‚9`–‰a$Ár¸`ZsÀ: ²P­9\iM8õ endstream endobj 49 0 obj << /Filter /FlateDecode /Length 147 >> stream xœ=O¹ 1 ë=8Àz,[ó\ê²ÊFR"@ñ‘eGÇ \b“Ž9/i?øiX5Gô„ŠaXàn’ƒ,JWž-^ ‘ÚB]HøÖÞ­Ld¢<¯;p'£>TYz@;DY®IÃXÕV]j°²ÎÂu=̪åÑ'k)PTB½tÿŸ{Úû o/ë endstream endobj 50 0 obj << /Filter /FlateDecode /Length 17 >> stream xœ36´P0€ÃC.”ì endstream endobj 51 0 obj << /Filter /FlateDecode /Length 317 >> stream xœ5RKrC1Û¿SpΘ¿}žt²jî¿­„'+°-@B./YÒK~Ô%Û¥ÃäW÷%±B>íšÌRÅ÷³Ï-¯GÏ·- Q=ø2'"ÔÏÔè:xa—>¯N)x“¯á_x”NƒÀ;2Þ“‘$ÁšK‹MH”=Iü+åõ¤•4t~&+sù{r©j£É X¹Ø¤+)$=‰H²r½7VˆÞW’Çg%&Ý&±M´ÀãÜ•´„™˜BæX€Õt³ºúLXã°„ñ*aÕƒMž5©„f´ŽcdÃx÷ÂL‰…†ÃP›}• ª—ÓÜ #¦GMví²[6ï!D£ù3,”ÁÇ($‡Nc$ Ò°€9½°Š½æ 9Àˆeš, mh%»zŽ…ÀМ³¥aÆ×ž×óþE[{£ endstream endobj 52 0 obj << /Filter /FlateDecode /Length 248 >> stream xœ-Q9’AËçzBsÓï±Ë‘÷ÿé ʃ†C :-qPÆO–+ÞòÈU´áï™ÁwÁ¡ßÊu9HÒTM¨]¼½vfó¤5,ƒë?c 7zqxLÆÙíu5{×kOfP2+qÉÄSuØÈ™ÃO¦Œ í\Ï È¹Öe¤›•ÆŒ„#M!RH¡ê&©3A£«Q£Å~éË#aU#j û\KÛ×sÎ4;«<9¥GWœËÉÅ +ý¼ÍÀET«<p¿ÛCýœìä7ÞÒ¹³Åôø^s²¼0XñæµMµø7/âø=ãëùü¨¥[ endstream endobj 53 0 obj << /Filter /FlateDecode /Length 163 >> stream xœM;Ã0 CwŸ‚ êãÏyRtjï¿Vr ƒÁÊ(usfà !¼ÞÀ‹-eÇ· ¬Oãø'庉}€ù‹º ’*†³©Æ€F ;tõ’³™{MÃXp¤¤ï¶@'<,›ÙVµQ•°{ì“î"I­Ú£Ó Œg í° °»›O㵦¦_š)雨3˜·ðH›BdˆZÊ÷qêg{ÿ?ë83 endstream endobj 54 0 obj << /Filter /FlateDecode /Length 131 >> stream xœEË ! CïTáò>©‡ÕžØþ¯ë0šABøA";ñ0¬óò6ÐÅðÑ¢Ã7þ6Õ«c•,ºzRV釼òPi0QÄ…YLCaΘÊÈ–2·á¶Mƒ¬l•T­ƒv<¶§e«~©maê,ñ ÂU^¸Ç ?K­w½U¾BS0— endstream endobj 55 0 obj << /Filter /FlateDecode /Length 88 >> stream xœ5Œ» À0D{¦¸ø8€÷‰R‘ýÛ[.¸{Òç9ÀÈ>GèÄ-dCá¦xI9¡>Q4Zo:¶Hs¿¼d3ý3Ü}…íæ€d4Iä!ÑåråY)z>—Ú~ endstream endobj 56 0 obj << /Filter /FlateDecode /Length 232 >> stream xœ5Q;r1ë} ] 3æoŸg3¯JîßF°“fa ç=؈ėÒåŠoYf~'‹¼øY)œ¼QTEX!íàYÎj†Ás#Sàr&>ËÌ'ÓbǪ‰8ÎŽœf01ëh9fš=!×#nì4ËU i½[ª×÷ZþSEùȺ›åÖ)›Z©[ôŒ=‰ËÎë©-í £Žâ¦ Òác‡÷ _ÄœÅE'ÒÍ~3å°’4§ð#1”êÙá5ÂÄÏŒOÙÓé}”†×>hº¾w/èÈÍ„LåÊHÅ“•Ƙ1T¿Í$õý?г>š0TG endstream endobj 57 0 obj << /Filter /FlateDecode /Length 74 >> stream xœ357U0P°´¦†æ æF– )†\@>ˆ•Ë˳ÌLÌ€,CKd–‰±!eba†Ä26±€Ê"X@lMÌô®4q“ endstream endobj 58 0 obj << /Filter /FlateDecode /Length 87 >> stream xœ=Ž»À0C{¦`ó †}r©œýÛ€?iÐC:N¸ 6 ÏÑíÂÎ7AîE/°.o€ !‹$ùöÎÅ¢V™Å¯¦Eê„4Iœ7QèN‹Jçãôx>ºuz endstream endobj 59 0 obj << /Filter /FlateDecode /Length 59 >> stream xœ355W0P°´¦¦F æF– )†\@>ˆ•Ëehifå€YÆ@Hœa¤Ášs`zr¸Ò©áZ endstream endobj 60 0 obj << /Filter /FlateDecode /Length 75 >> stream xœ5±À0{¦`ËöÉ¥Âû· øh¤ÈäæÁž²t°Mçôç¤MóBQª0Ðtf}qhäV^hJ¯ŠèÏAï™êš endstream endobj 61 0 obj << /Filter /FlateDecode /Length 338 >> stream xœ5RK’[AÛ¿Sè®jþÍyœšÕäþÛ쬠8ÈÄK QrÅy‚ñ:¿ëåiü>Þ…Ô‚§"ýÀµiïÇš5Q°4b)Ì>öý(!ÇSãßè¹Hfd2r ˆûµ>Ö›L9ü¤isú(Iz-ØÝv|YAÒ“–ìä‡u-°ºM˜k"9µ25ÏÇžá2ž#AÕ, IŸ¸OŒH3;g-yáxª/~½×2©—U2¶ æ`;™ §("¿ $¹‰»hê(ŽfÆšÛ…†’"÷Ý=œœôº¿œD^ á,ÖŽzÊ2'; J jå˜a½ö…qš6J¸SÓí]±¯ßg&aÜæ°³R2 Îqp/›Ì${Ý1a‡˜÷îŒÄ¼ù]l\¹Ì¹&Óý(ÚH×ç\M™­(áªä‰×øÿüÞÏÏ?7}± endstream endobj 62 0 obj << /Filter /FlateDecode /Length 247 >> stream xœMQ»mD1 ëß\àëkyž R]öoCÉ ¡/)§%öÆK á[¾ä‘UC?1ì3,=ÉäÔ?æ¹ÉT¾ª›˜Pbáýh¼t/"+Êße sÎ÷ࣗ`&4`¬oI&Õ¼3d‰¡ŽÃA›TwM,®Í3ÈíV7²:³ lx%âÆDÙÍ`£Œ±•År¨ ’Z`×éQ‹‚+”Ö t¢ÖĺÌà«çöv7C/ò਺x} ëK°Âè¥{,|®BÌôL;wI#½ð¦fR™‘•:=b}·@ÿŸe+øûÉÏóý (\* endstream endobj 63 0 obj << /Filter /FlateDecode /Length 70 >> stream xœ3³0Q0P°b3s3s#K…C.# 3 @.—X ‡ËÐÐÊ261R044²LÍ¡b0@YKA9Pý9\iOT/ endstream endobj 64 0 obj << /Filter /FlateDecode /Length 304 >> stream xœ=’;’Ã0 C{‚ÈŒø“äód'•÷þí>2ÉV€I‰(/u™²¦< i& ÿÑááb;åwØžÍÌÀµD/Ë)Ï¡+ÄÜEù²™º²:ŪÃ0[ô¨œ‹†M“šç*K· žÃµ‰ç–}Ä74¨uK ÝÕhY Ípuÿ;½GÙw5<›TêÔQæù!O¢‡éJâ|<(!\{0FäSÑ@޳\­ò^Bö·²ÂAjIç³'<ØuzO.nÍd¹TøNQìíÐ3¾ìJ =¶áXî};š±é›8ì~ïFÖÊŒ®h!~ÈW'ë%`ÜS&EdN¶Xn‹Õžî¡(¦s†s êÙŠ†RæbW« ;o,/Ù,È”Ì 2F§Mž8xÈ~šôy•çxýlós; endstream endobj 65 0 obj << /Filter /FlateDecode /Length 230 >> stream xœ5QInÃ0 ¼ëóâ.¿ÇAOíÿ¯Ò ``hKœÍx‰ÁÏAäÆ[ÖŒšø›É]ñ»< ·‚'Q^†{Ù .o—ý8Ì|ð^Z9“O2 ÙôðDÈ`—@èÀìÔa›i'ú†„ÏŽH5YN_KÐK«(OÙ~§ J´­êÏí³.´íkO8Ùí©'•O ž[²—WLcôDå.ÅôAª³…ž„ò¢|²ù¨!]¢œ'£@;°ç¶Ÿ‰W… uuŸ¶¡)Oÿ645I"ä%œÙÒ¸[øþž{ýü¦TSŸ endstream endobj 66 0 obj << /Filter /FlateDecode /Length 245 >> stream xœEP»C1 ë=`ý,{žwH•Û¿=JFp…!Z?’Z˜ˆÀK ±”oâGFA= ¿…â3ÄÏ…A΄¤@œõ™x†ÚFnèvpμÃ3Œ9ÅZp¦Ó™ö\Øäœ'Îm”ñŒBºITqTŸqLñª²Ï×¥µl³Ó‘ì!„KI%&—~S*ÿ´)[*èÚE°Hä“M4á,?C’bÌ ”Q÷0µŽôq²‘GuÐÉÙœ9-™Ùî§íL|X&™Qå)ç2>'©ó\N}î³Ñ䢥UûœýÞ‘–ò"µÛ¡ÕéW%Q™Õ§¸<ÿŒŸñþŽ Y> endstream endobj 67 0 obj << /Filter /FlateDecode /Length 227 >> stream xœ5O;²! ë9….Œm`ϳ™T/÷oŸd² þHòôDG&^æÈ¬Ùñ¶ˆøSñ¯=íÄê=¸‡åâB˜a$œ5븛§ãÅ¿]å3ÖÁ» ¾b–¶0“õ•Å™ËvÁX'qN²c×Dlc]ëéÖL(!í0%È)}²£Œ9:Nä‰çbªÅ.¿ïa}Á¦1¢ÂWOÐdP–=ï& ôßÕßI4‹^2‘`a$æÎYNøÕkGÇQ‹"1'¤ä2Òœ®b ¡ Å:; *—êsÊÝ>ÿh][M endstream endobj 68 0 obj << /Filter /FlateDecode /Length 338 >> stream xœERKrÅ0Ûç\ 3ægãó¼NWéý·•p:Ý<ô  2=eH¦Ü6–d„äò¥WdˆÕŸFŽDÄß)¡À®ò¹¼–Ä\Èn‰Jñ¡?—¥72ͮЪ·G§6‹F5+#ç C„zVèÌîQÛdÃëv!é:S‡p,ÿC²”uÊ)”mAߨ#èo<ܳær³¹Lnõ¿î[ ž×:[±m@ –sÞ`Äà ÚÄÜÚÞ)(UºŠI­ò\';P¶Ðªt¼7€9`Ã’­×hoÃ>ô¢FÅö ¨, þÎÙfÁÞ1ÉH°'æN=q:Å‘pI8Æ@Š­âºñØâ/®ˆšð u:eM¼ÂžÚâÇB“ïRqð"n]EµlOç ´?*’3b¤ÄÑ ‘ԒΗõÐû¸‰¯Äæž¾Ý?Â9Ÿëû¸ƒà endstream endobj 69 0 obj << /Filter /FlateDecode /Length 133 >> stream xœMAÃ0ï~…ž€±óžtzJþ-6î팀‘†03× endstream endobj 70 0 obj << /Filter /FlateDecode /Length 68 >> stream xœ32·P0P°4†& æf )†\@¾©‰¹B.H Äʳ €´%œ‚ˆ[B4A”‚X¥f&fI8"—É´å endstream endobj 71 0 obj << /Filter /FlateDecode /Length 255 >> stream xœE‘K’ D÷ž‚#€üä<™šUrÿí4˜L6v—¨ý„J#¦,çy0ýÈòÍd¶éµ«Š"Ìä*ôXÕ)â̵Dµõ±2rÜéƒâ 箜T²¸QÆ:ª:8¦çÊúªîü¸,ʾ#‡2lÖ96på¶aŒ£ÍVw‡ûD§“©£âvløƒ“ƾÊÕ¸N6ûê%‚~¡ LòM u†@ãæ)zr öñq»ó@°·¼ ¤läÈŒA»N®qëüÞÿ:ÃçÚ WŽwñ;Lk»ã/1ÉŠ¹€EîÔó=­ë ïÉ™crÓ}Cç\°ËÝA¦Ïüë÷PŠfˆ endstream endobj 72 0 obj << /Filter /FlateDecode /Length 45 >> stream xœ32·P0P°4†& æf )†\–V.L,ÌÑ–p "žŸ} µ endstream endobj 73 0 obj << /Filter /FlateDecode /Length 214 >> stream xœ=P»C1ë= äÎ|í7ÏË¥Ëþm$œ¤B6B”šLÉ”‡:Ê’¬)O>Kb‡¼‡ånd6%*E/“°%÷Ð ñ}‰æ÷ÝÕ–³C4—h9~ 3*ªÓK6šp*º ÜÃ3ú mtV‡±[ Ф`×¶ rÇ Á™‹" JMÿ­r÷RÜï=o¢ˆ”tð®ùåôËÏ-¼N=ŽDº½ùŠkq¦: DpFjòŠtaŲÈC¤Õ5=kµ®Þzù7hGt€ì‰ã4¥CÿÖ¸Ç뇊Rô endstream endobj 74 0 obj << /Filter /FlateDecode /Length 161 >> stream xœEKà C÷œBGðG|žtºJï¿­!M³€§±@w'©µÑ/mKº >[ ÎÆxè6n5äu€V¤ãh”R}¹Åi•tñh6s+ ­fz”£ :Þí¢är¦îÎùGpõ_õG±îœÍÄÀdå„fõ)î|›Q]ÝdÒcnÖköª°´¬¥å„ÛÎ]3 î©íý©s:„ endstream endobj 75 0 obj << /Filter /FlateDecode /Length 236 >> stream xœMPKnD! ÛsŠ\àI$!ÎCÕUçþÛ±ÃTí*†Hé²UëSbu‰ìò¥M—Ê2y¨åOÛÿQ nÿÐÈA´·ŒbæÖÅÂ$<å4#'×,;Of…ÆÄã.`Ÿ5[•Í9m:7@º·ª³ÞdP "êBÍ“.œ§Ñ—ˆ9ž¨`Jw&µ\>Õ¡qZ½ ¹c‹“oÄY¡ÀaÐLqÖ_֨ɲYÈ I†!Î}£{” ¨Êy+“¡õ†Õ •¹…¢©å’üÚ0¶Œué JªÁß*§}¿$]S endstream endobj 76 0 obj << /Filter /FlateDecode /Length 332 >> stream xœ-R9Ž$1 Ëý ~`ëòñžLÔûÿtIUªlË<ärÃD%~,ÛQkâ×Ff Âð¯«Ì…ïHÛÈ:ˆkÈE\É–ÂgD,ä1Ä<Ä‚ïÛøù¬ÌɳÆ/Ù÷Vì© ËBÆ‹3´Ã*ŽÃ*ȱ`ë"ª{xS¤Ã©$Øã‹ÿ>Ås‚¾#hÀ/ùç«#x¾¤EÚ=fÛ´[–iG•–ƒíiÎËäKë,WÇãù ÙÞ;BjW€¢0wÆy.Ž2meDkagƒ¤ÆÅöæØ¥]èÆe¤8ù™*ÂJšÌl¢ þÈé!§2¦®éJ'·QwêÉ\³¹¼I2[÷EŠÍÎë™õw˜2«Í;y–¥NEø{¶ ãêÙk™…F·9Á+%|6vzrò½šYÉ©HHÓº N£ÈKØ–øšŠšÒÔËðß—÷ÿ3â| endstream endobj 77 0 obj << /Filter /FlateDecode /Length 157 >> stream xœE¹C1DsUA °ê±ÇÑwÿ©ùJ´o-‡¯%Sª'"¦Ü×hô0yŸM%V,Ø&¶“rAJ1˜xN1«£·¡™‡Ô븨ª¸uf•ÓiËÊÅóhW3“=Â5ê'ðMèøŸ<´©è[ ¯ ”}@µ8IP1}¯b£œv"œà>G™)#qbn ì÷f¾W¸ÆãÝ7y endstream endobj 78 0 obj << /Filter /FlateDecode /Length 320 >> stream xœ5Q»qÅ0 ë5ðø•4s¯ÊÛ¿ @;a@ª¼dJ¹\ê’U²ÂäG‡êMù>`¦üõãèÙ!ºSÖ–{ËÄ<¥ŽXM–{¸/ M‰¹…ó÷è+£0ºÅß?@³$0ipðSk­Zb‰<,X³+Ì­)TÈU|;6¹rq³Ð§š·Ü‚ðeˆdGj±¯Ëe)ò»õ „æˆO‰…çf"ñ'b{öÙbWW/ªÖI‡RÒln04E²êƒØWÇ5?OGÙÁÉA¿ŠÁø68™/Iy_¡þÏÙȱ’C$ò}µÀˆ#l€¡Oí#e 4E÷î™R>&UŠïF!}ªW2¼‘Ùj†Íÿ]Ù* UYŸFp&ƒI8ód£ ÓRµÓ¿ûÜãóccz€ endstream endobj 79 0 obj << /Filter /FlateDecode /Length 338 >> stream xœ5R9®Ý@ ë} ] €vÍœç©~î߆”_ C´VŠšŽ•iùe!U-“.¿íIm‰ò÷É ‰’W%Ú¥ ‘Pù<…T¿g˼¾Öœ K• ““’Ç% þ —Þ.çck?#w=z`UŒ„Ë£kY:»Ãšü<¦?âr®X·cH ºqÚïCóyÈ f˜–Š ]V‰~Añ G­}÷XTX ÑíIpŒP‘€vÚH 9³»¨/úY”˜ tí‹"î¢ÀIÌœb]:ú>t,¨¿6ã˯ŽJúH+kLÚw£IiÌ"“®—Eo7o}=¸@ó.Ê^Í ASÖ(i|Ъc(še…wš 4LJÌ<‡3”ô}(~_K&º(‘? ¡_£ŒœosÑŸ¶ŠñÙa¯`…ÒÅšä}@*z`úÿ×øyþü¶€T endstream endobj 80 0 obj << /Filter /FlateDecode /Length 72 >> stream xœ5Œ±À0{¦Ð6X`ï“KEöoC|N/—¢ÁZ º‚#pu©üÑ#]¹)E—c΂áqª_H1F=¨#ãÞÇO¹_p} endstream endobj 81 0 obj << /Filter /FlateDecode /Length 392 >> stream xœ=RKn1ÛÏ)¸@¥ðMrž©ÞîÝ[›ÌTª /¶1”— ©%?ê’ˆ3L~õr]âQò½ljgæ!î.6¦øXr_º†ØrÑšb±OÉ/È´TX¡VÝ£Cñ…(-àá¾ÿñ¨Á×°…rÃ{d`JÔn@ÆCÑHYAaû‘è¤P¯láï( WÔ¬…¡tbˆ –)¾« ‰˜¨Ù ‡„•’ªÒñŒ¤ð[Á]‰aP[[ÛxfÐÙÞ‘3íÑqYk?=é£Q2µQMg|ñÝ2RóÑè¤ÒÈÝÊCgÏB'`$æI˜çp#ážÛA 1ôq¯–Ol÷˜)V‘ð;ʽýÞ’Ï{à,Œ\ÛìL'ðÑi§­¾býƒ?lK›\Ç+‡E¨¼(~×Aq|XÅ÷d£Dw´Ö#Õh% ÂÎí0òxÆyÙÞ´æôDh£DÔŽ=(²Å地§ü¬Í±ž&{o´”Į̀„Ôvz¨¶ÏcÔwžûúü.¡ endstream endobj 40 0 obj << /FontMatrix [ 0.001 0 0 0.001 0 0 ] /Name /BitstreamVeraSans-Roman /FontBBox [ -184 -236 1288 929 ] /Encoding << /Differences [ 32 /space 40 /parenleft /parenright 44 /comma /hyphen /period 48 /zero /one /two /three /four /five /six 56 /eight /nine 65 /A 67 /C 70 /F 76 /L /M /N 83 /S 86 /V 97 /a 99 /c /d /e /f /g 105 /i 108 /l /m /n /o /p 114 /r /s /t /u /v ] /Type /Encoding >> /BaseFont /BitstreamVeraSans-Roman /Type /Font /CharProcs 41 0 R /Subtype /Type3 /FontDescriptor 39 0 R /Widths 38 0 R /LastChar 255 /FirstChar 0 >> endobj 39 0 obj << /FontName /BitstreamVeraSans-Roman /Descent -236 /FontBBox [ -184 -236 1288 929 ] /CapHeight 730 /Ascent 929 /MaxWidth 1342 /StemV 0 /Flags 32 /XHeight 547 /ItalicAngle 0 /Type /FontDescriptor >> endobj 38 0 obj [ 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 318 401 460 838 636 950 780 275 390 390 500 838 318 361 318 337 636 636 636 636 636 636 636 636 636 636 337 337 838 838 838 531 1000 684 686 698 770 632 575 775 752 295 295 656 557 863 748 787 603 787 695 635 611 732 684 989 685 611 685 390 337 390 838 500 500 613 635 550 635 615 352 635 634 278 278 579 278 974 634 612 635 635 411 521 392 634 592 818 592 592 525 636 337 636 838 600 636 600 318 636 518 1000 500 500 500 1342 635 400 1070 600 685 600 600 318 318 518 518 590 500 1000 500 1000 521 400 1023 600 525 611 636 401 636 636 636 636 337 500 500 1000 471 612 838 361 1000 500 500 838 401 401 500 636 636 318 500 401 471 612 969 969 969 531 684 684 684 684 684 684 974 698 632 632 632 632 295 295 295 295 775 748 787 787 787 787 787 838 787 732 732 732 732 611 605 630 613 613 613 613 613 613 982 550 615 615 615 615 278 278 278 278 612 634 612 612 612 612 612 838 612 634 634 634 634 592 635 592 ] endobj 41 0 obj << /parenright 42 0 R /hyphen 43 0 R /period 44 0 R /one 45 0 R /four 46 0 R /zero 47 0 R /comma 48 0 R /parenleft 49 0 R /space 50 0 R /six 51 0 R /two 52 0 R /nine 78 0 R /three 79 0 R /A 55 0 R /C 56 0 R /F 57 0 R /M 58 0 R /L 59 0 R /N 60 0 R /S 61 0 R /five 62 0 R /V 63 0 R /a 64 0 R /c 65 0 R /e 66 0 R /d 67 0 R /g 68 0 R /f 69 0 R /i 70 0 R /m 71 0 R /l 72 0 R /o 73 0 R /n 74 0 R /p 75 0 R /s 76 0 R /r 77 0 R /u 53 0 R /t 54 0 R /v 80 0 R /eight 81 0 R >> endobj 6 0 obj << /F1 40 0 R >> endobj 7 0 obj << >> endobj 8 0 obj << >> endobj 9 0 obj << /M21 33 0 R /M22 34 0 R /M17 29 0 R /M9 21 0 R /M4 16 0 R /M14 26 0 R /M5 17 0 R /M3 15 0 R /M19 31 0 R /M11 23 0 R /M8 20 0 R /M7 19 0 R /M6 18 0 R /M2 14 0 R /M18 30 0 R /M16 28 0 R /M24 36 0 R /M1 13 0 R /M13 25 0 R /M10 22 0 R /M25 37 0 R /M0 12 0 R /M12 24 0 R /M20 32 0 R /M15 27 0 R /M23 35 0 R >> endobj 23 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 36 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 33 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 18 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 13 0 obj << /Filter /FlateDecode /Subtype /Form /Length 24 /Type /XObject /BBox [ -3.25 -0.25 3.25 0.25 ] >> stream xœ3VÐ5PÈUÐ5V0PÈá æÀ endstream endobj 19 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 14 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 17 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 32 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 16 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 15 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 26 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 22 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 24 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 12 0 obj << /Filter /FlateDecode /Subtype /Form /Length 24 /Type /XObject /BBox [ -3.25 -0.25 3.25 0.25 ] >> stream xœ3VÐ5PÈUÐ5V0PÈá æÀ endstream endobj 20 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 0.25 4.25 ] >> stream xœ3P0PÈb…®`.¥ endstream endobj 30 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 21 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -0.25 -4.25 0.25 0.25 ] >> stream xœ3P0PÈb]…®`.¿Ò endstream endobj 35 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 25 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 29 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 34 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 31 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 37 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj 28 0 obj << /Filter /FlateDecode /Subtype /Form /Length 20 /Type /XObject /BBox [ -0.25 -0.25 4.25 0.25 ] >> stream xœ3P0PÈU0’9\Á\¥ endstream endobj 27 0 obj << /Filter /FlateDecode /Subtype /Form /Length 21 /Type /XObject /BBox [ -4.25 -0.25 0.25 0.25 ] >> stream xœ3P0PÈUÐ5R9\Á\ÑÒ endstream endobj xref 0 82 0000000000 65535 n 0000000016 00000 n 0000000065 00000 n 0000000216 00000 n 0000000275 00000 n 0000000511 00000 n 0000013985 00000 n 0000014017 00000 n 0000014038 00000 n 0000014059 00000 n 0000000382 00000 n 0000001703 00000 n 0000016547 00000 n 0000015000 00000 n 0000015313 00000 n 0000015930 00000 n 0000015776 00000 n 0000015467 00000 n 0000014846 00000 n 0000015158 00000 n 0000016705 00000 n 0000017013 00000 n 0000016239 00000 n 0000014382 00000 n 0000016393 00000 n 0000017323 00000 n 0000016085 00000 n 0000018251 00000 n 0000018097 00000 n 0000017478 00000 n 0000016859 00000 n 0000017787 00000 n 0000015622 00000 n 0000014691 00000 n 0000017633 00000 n 0000017168 00000 n 0000014537 00000 n 0000017942 00000 n 0000012449 00000 n 0000012234 00000 n 0000011685 00000 n 0000013502 00000 n 0000001724 00000 n 0000001946 00000 n 0000002070 00000 n 0000002191 00000 n 0000002343 00000 n 0000002505 00000 n 0000002788 00000 n 0000002926 00000 n 0000003146 00000 n 0000003235 00000 n 0000003625 00000 n 0000003946 00000 n 0000004182 00000 n 0000004386 00000 n 0000004546 00000 n 0000004851 00000 n 0000004997 00000 n 0000005156 00000 n 0000005287 00000 n 0000005434 00000 n 0000005845 00000 n 0000006165 00000 n 0000006307 00000 n 0000006684 00000 n 0000006987 00000 n 0000007305 00000 n 0000007605 00000 n 0000008016 00000 n 0000008222 00000 n 0000008362 00000 n 0000008690 00000 n 0000008807 00000 n 0000009094 00000 n 0000009328 00000 n 0000009637 00000 n 0000010042 00000 n 0000010272 00000 n 0000010665 00000 n 0000011076 00000 n 0000011220 00000 n trailer << /Info 2 0 R /Root 1 0 R /Size 82 >> startxref 18406 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_svdclf.png000066400000000000000000001012331202542755000206010ustar00rootroot00000000000000‰PNG  IHDRô“Þ'àhsRGB®ÎébKGDÿÿÿ ½§“ pHYsaa¨?§itIMEØ 59¤É3 IDATxÚìÝyXTeÿ?ð÷ÌÀ û¾ ˆÊŽ""¸+ä–¦ej*áR®iešiîei–[¹/©¹dÙbOh™ &(® ¨ *n È"û:l3÷ï~œGÔëùÎäûu]^—3çÌaæsÎÌûÜ÷¹Ï92!„éœÔÔTܾ}Ï<ó d2Y½éû÷ïÇ;#ƒÂÃÃC/>Syy9nß¾¢¢"ÔÔÔÀØØpqq¡¡áC_{ÿþ}ܽ{eeeÉd055…ÜÜÜ››‹ëׯ£U«V°¶¶®÷Ú¢¢"\¾|ÞÞÞ077ÇÕ«WQRR///¸¸¸Ô™7++ W¯^…±±1‚ƒƒù¾sàÀL:€——×ß^Ûªª*̘1X³f ¬¬¬PUU…Õ«Wã‹/¾@ee%Œnݺa„ ¸|ù2þ²¿ŸsssxzzÖyÞÃÃS§NÅ”)Sþ'Û˜Z­Fxx8zôè)S¦@.—ÿ%ËÍÎÎÆ­[·Ð®]»ÿz›Ð'çÎðaÃðý÷ß#$$D§ßëk¯½KKK,Z´FFFOun0:uÓ×_¹s確º …¢Þô-Z`̘1°´´ÔùÏ"„À7ðÅ_ ** *• *• ÕÕÕ066Æ Aƒ0iÒ¤F_ñâE,[¶ III°´´„\.GYY±{÷n\½zãÆÃôéÓñúë¯7®ï¼ó¾úê+¸ººbÊ”)ˆÇÔ©S±dÉ’:?úkÖ¬Á’%Kàåå…'NÀÞÞ^/¶…BîÝ»£¼¼*• pýúulÙ²£GF§NàììŒêêj¼öÚk011ùKÿþ;#àà`,_¾¼ÎócÆŒAPPÐÿ¬Dvv6 ô—…9;v sæÌÁ¹sçôf›xNNN;v,uþ½Ž;S¦LÁ¥K—СC:馆Zæµ¼½½1yòd˜™™´Z-ª««ahhF­V 044¬÷æÕjQSS­V ™Lƒ:; Biºr¹u–£ÑhPSSCCCi^CCÃw>îÝ»‡Ù³g#11+V¬€”J%ÊËËqñâEœû IIIX·nš4i(,,Äõë×ahhˆàà``ïÞ½xå•W`jjZç³~ûí· ‚ÊÊÊþþþ8uêîܹ#õpàðáÃðõõ…F£y¬•ë¤P( P( ’ššh4! “É P(``P÷+X[×Úyjk/“É „€F£ip …}ûö…V«…‘‘jjjpûömÈd2ôéÓ~~~P*•Ðh4˜>}z5ôÞÜ&jÿfíöòÇ÷T]]-mSÒv§P(0eÊi£¡ÏøÇm«¶¦ —Ë¥ùj?çþ%%%øê«¯ЦM›>t›ÿãgxp=6ôù«««!„@ee%*** —Ë¡T*ùÚ?n/ÕÕÕÉdõZùµËW*•n+ …⡟ÿ¶-=ê{Þ¤IL:Uú}ihy¾§Ç©ÃÃÖ{m \ïµÛ‘L&«·ì¿;>>>prrBTT‚‚‚¤>•é¤O>ùDÈårQSSÓàô}ûö OOOqóæM!„?ýô“ðòòk×®/¿ü²­Zµü±(//—^wÿþ}ñ¯ýKtíÚUøûû‹   ñöÛo‹¬¬,iž˜˜1pà@Ѷm[áëë+BBBÄâÅ‹EQQ‘4ÏîÝ»…§§§øôÓOųÏ>+üüüÄ×_ÝègqrrGŽipzcŸQ!’’’D‡ÄÛo¿ýÐzíÝ»W4mÚTDFFÖyþÆÂÒÒR¬_¿^hµZ‘œœ,:wî,fΜ)Ú¶m+¶mÛ&4BˆmÛ¶‰   1{öláãã#îß¿ßèß+++‘‘‘¢GÂßß_´lÙRôíÛWúŒ?ÿü³ðôôÉÉÉB!222ÄäÉ“EÇŽ…¿¿¿ãÆ—.]’þ~NNŽ˜>}ºhݺµðññ­[·C‡×®]FÄÇÇ‹ˆˆáçç'|}}EPPx÷ÝwEii©¨¬¬o½õ–9r¤¸ÿ¾Xµj•pqq*•J4kÖLx{{‹cÇŽ‰}ûö ‘-}–¸¸81vìX(üüüDûöíÅÇ,„¢ªªJ,^¼X„††ŠV­Z 1`ÀqðàAQUU%rssÅĉ…‰‰‰°¶¶ÞÞÞ"((HìÝ»W!D‹-ĪU«„BhµZqãÆ 1mÚ4ѲeKáçç'Ú¶m+¶lÙ" …Bäå剈ˆ1räH±`ÁÑ¥Káåå%  Î;'Õª!ÑÑÑÂÃÃCœ;w®ÎóyyyâóÏ?:t~~~¢U«VbøðáâòåËB«ÕгgÏŠ—^zI ???$>øà‘››+„âСCÂÙÙY áíí-F%Š‹‹ETT”xá…„ŸŸŸðóóÁÁÁbñâÅ ¾¿œœ.†*´Z­ô|II‰9r¤xî¹ç„V«7oÞ£G-[¶¾¾¾¢M›6âÍ7ßéééýû‘šš*¦L™"-£uëÖbìØ±Òï…Z­¿üò‹èß¿¿ð÷÷þþþ¢gÏžâÇBqöìYáîî.âââ„BܺuKLžþøc(•J¨T*<ÿüóhÖ¬ pãÆ ¬^½ööö˜0aBãŠQQQ˜4illlмyóßç¾}û ÿF»‹cccGGGDGG#22pss«÷š^½zÁÈÈÑÑÑèÝ»7Œ_}õÜÜÜеk×:õ211AŸ>}ð믿bРAÉd8zô(ÂÂÂ`kkûкkµZùîîîðõõElllù3220mÚ4˜™™aΜ9pvvFnn.ªªª¤ÏêììŒiÓ¦ÁÆÆ•••ˆŒŒÄ‡~///¸¹¹áí·ßF\\|||ðÖ[oA¡PÔÙjÿ^AA>ùä\¸pï½÷€÷ßðꫯJ¯‰…»»;,XµZ+V`íÚµX½zuƒ‡™„¸yó&Ôjuãøؾ};V¯^iÓ¦! BdddH-9¥R‰gŸ}-Z´€R©Ä;w°zõjXXX`êÔ© Áë¯¿Ž 6Hã,--Q\\ŒeË–ÁÖÖŸ}öŒ‘ŸŸ/µ4ÿÈÖÖ]ºtÁêÕ«qïÞ=¸ººJ‡F.^¼ˆéÓ§C«ÕbݺuHJJÂG};;;£´´ô±[žZ­;wîÄÑ£Gñá‡ÂÁÁååå(((€J¥‚111˜:u*úôéƒÉ“'ÃÄÄiii ŽA©ªªÂ®]»#½§²²2ÀÐÐjµZz~Ù²e077G^^žT!–-[†¨¨(¼ùæ›ðõõÅ… °nÝ:(•JÌœ9Sú[§OŸF“&M°`Á(•J899aúôé077ÇÒ¥Kaaaüü|¨Õê:¿Í›7Gff&îß¿ÿÈï/»ÜI/(•J :LJB¡€‡‡Nœ8ØØXtëÖ éé騻w/Þxã Œ5 BÀÈÈsçÎÅ+¯¼‚Ö­[#$$¨®®†F£A«V­˜˜ˆ_~ù#FŒŽ¿VUUaÖ¬YÒÎBcnݺ…–-[6vv¹=ØÕ­T*aoowß}3gÎÄ´iÓ`nn;;;ôìÙáááhÑ¢d2,,,0hÐ DEE!%%~~~ÈÈÈÀ¡C‡Ð©S'øùùÕù[†††èÚµ+¦OŸŽŒŒ áÊ•+ظq#bccú>óóó±gÏ`îܹR·¤1uqqÁÈ‘#QUU%u_WUUaþüù(**‚……ÒÒÒ`aaçž{uºe³²² ???„……Õ;¼ñ`ˆÈd2¸¹¹Á××ÆÆÆÒᆆ|ÿý÷ÈÉÉÁÊ•+"…oízP*•Òû®í.µ°°@\\.^¼ˆ-ZÀ××hÒ¤ :uêÔhÝRRRðÓO?aùòå6ld2ºvíŠsçÎáßÿþ7ž{î9iP“³³3æÌ™SSShµZäååaéÒ¥(..n0Ы««‘––{{û:uKOOÇîÝ»7ß|Sꦭ]W2™ ðññ‘º¹póæM;v £F‚¼¼¼ R©"C¿sç233ѯ_?tíÚJ¥ÒᮆvÀ{õê…M›6aÿþýxýõסÑhpþüy¨Õj<óÌ3¨©©Aff&\\\лwoi™†F£Avv6¬­­Ñ·o_Ö©Iii)¾ù渻»cîܹprr’jÒÐ{¯®®Æýû÷aooßà{*))AZZž}öY„††ÂÈÈ …Bú.¤¤¤àÀ3f ÆCCCtîÜøî»ï0|øpiçÆÝÝ“'OFË–-¥²»wïbøðáÒŽóƒË~pÇßÌÌ 7oÞ¬÷]g “^222BÛ¶m¥úÚ–Dnn.àòåËÈËËCdd$N:%½N­V£°°iiihݺ5°nÝ:\¼xQj©åççÃÏÏÅÅÅR »¸¸<Ö{…B!ÿjLUU¶oߎ_ýUzîý÷߇¿¿?ºvíŠèèhœ?—.]B||<¾üòK|ñÅøá‡Ç®]» DEEáæÍ›øì³ÏüQ „··7¾úê+ÁÃà ôÂÂB$%%aÒ¤IuŽEËd²FqæççcóæÍøñÇQ^^!ÊËË‘™™‰üü|¸¹¹aРA8~ü8žþy´k×:uBÛ¶máéé ;;; 8Ÿ~ú)†Šàà`¡cÇŽÒòãܹsptt¬æöšTTTàÇĆ PPP ÕÈÌÌDzzúŸú[7nÜ€……üýý¥¿ehhˆ^½zaùòå(,,”>KPPT[¹\{{{TVVJÇVê)))……EÏQPP€[·náÙgŸ­³ Ô®+!±nÝ:ÄÇÇKc áááââbØÙÙ5ø7íííŽ 6 &&FÚîÔ©Sƒ-]ðóóC‡ðÓO?!<< …{÷îEÿþýáàà•J…!C†`ñâÅÒvбcGÃÍÍí±Ž¡¢ÿþˆGß¾}Ѿ}{´k×íÚµC³fͤ±+ƒ®Óš­=6ýG¦¦¦xî¹çpîÜ9ôïßíÚµCpp0:tèwwwaôèÑØ¹s'Nž<‰N:!00íÛ·‡®]»hß¾½´c¡R©Šýû÷ãÎ;R ûøøÀÙÙ¹Îg;v,vìØ³gÏ¢K—. D»víꜥadd•J…¼¼¼§:èÿ0~!k¿üµ{Ý*• õ‚xàÀð÷÷‡V«Å‚ “É0þ|4iÒ …;vì@RRR=x¥RùX?0ÞÞÞ¸wï annÞà|8üüü‡+W®à»ï¾C×®]ñþûïÿ×§ iµZÈåòF?Ë™3g°`ÁŒ7!!!033CVV-ZÔh¸þÙš5ô\cƒÊS;H­²²²Á×4öùª««ñ¯ý ¹¹¹˜5k\]]ahhˆï¿ÿ'Ožl´µ fffxóÍ7Ѿ}{$$$ !!Û·oÇÀ1þüF·õððpLš4 —.]‚­­-®]»†×^{M:L4pà@4iÒ ¸zõ*.\ˆæÍ›céÒ¥} dïÞ½áè舳gÏâÚµkX±bìììðÉ'ŸÀÙÙùOm¿Ð·o_¸¸¸àÌ™3HJJ²eËàææ†… ¢uëÖ˜>»víÂ3Ï<ƒ•+W6ºù`€?¸î Þxã ã·ß~C||ñãÇK£¸û᪪ªÂåË—áçç‡W^yEªsRRJJJê´2€ŠŠ üöÛo˜0a>Œ¨T*téÒ:uBii)¢££1iÒ$¼ð èӧϵnpùòe\¿~ÞÞÞuvår9’’’P]])S¦H?–'OžDQQQƒ½0Ó¼ysàîÝ»hÛ¶-d2´Z-Î;77·Fðq7999áþýûuÛXZZÂÅÅçÎChhh½©©©A||<&OžŒ!C†@.—£ºº›6mzdø!`ff†^½z¡{÷î(..ÆöíÛ±iÓ& :´Ñó·CBB`nnŽØØX”——£Y³f ’z  S§NèСÔj5Μ9ƒˆˆ$$$Hã4M££Þk—ѦMB­V#99Ï=÷N:…ˆˆøøøàüùóÒwïa;]µÏ=¸¼;wî K—.8uêZ·n “:uغu+6mÚ„äädxxx@«ÕâÊ•+ ƒB¡€F£Á… `bb77·Gö<öìÙSZöŽ;°jÕ*\»vM:%²¸¸%%%Žãa Óÿ9!Μ9S/d\ö(^^^èß¿?6oÞ …BV­ZIÝ’xá…`aa¦M›"&&þþþP*•8zô(ê]„åq <ñññ˜3g !..IIIضm[ƒ¯MOO—¶µhÑ&&&())Add$ÒÓÓ1þü:?ºÝ»wGóæÍ¥cÛ={ö|dÈìÙ³GXó8×Y²³³Cxx8fÏžuëÖ¡K—.P*•ÈÌÌ„›››Ôcð`«ÃÍÍ ÇÇ‘#Gààà€Û·ocóæÍuÂ'22 …BºÐÎÕ«WQQQ'''àÈ‘#°¶¶†££#4 ®\¹ ØØØü×ÛØðáñwï^¼÷Þ{˜0aìííQTTµZ¾}ûÂÕÕßÿ=Z¶l‰ÂÂBlÚ´ ÙÙÙu–ãêêŠëׯ#..fffpvv†••UyZ´hÞ½{céÒ¥033ƒ ±ÿ~Ì›7NNNuvpþŒÚžššdddH=-nnnˆˆˆÀ† àêê*%¸ÿ>|}}áììŒæÍ›#&&F ¦“'O"66¶NW{íg9yò$¼¼¼`ffcccì߿͛7‡­­-***póæMXYYÕûìÜ!2d~øáäææb̘1R•••á矆™™œœœ —Ë‘˜˜###X[[C&“áêÕ«8zô(† Ö`ÏLEE> !ÜÜÜ —ËñÛo¿ÁÀÀ¶¶¶°°°Àˆ#0uêT¬Zµ }ûö…J¥’”ýqG¤¬¬ QQQR=e2’’’`bb[[[¨ÕjlÞ¼­Zµ’NÞ¾}¦¦¦°²²BÓ¦MñÌ3Ï`ÇŽptt„§§'~ûí7|ýõ×hWWWcíÚµhݺ5lllPUU…[·nÁØØXÚîµZ-îÞ½ ###4kÖŒNºk̘1õö˜wîÜÙh‹óQfÏžM›6aË–-(//‡\.‡‘‘BCCñâ‹/B&“á½÷ÞòeËðÆoÀÆÆþþþèÙ³§t,ìϲ··Ç‚ вeK|ùå—P«ÕÒ¹¸...ˆˆˆhôµ&&&B`óæÍÒ±çÚØÙ³g× lwww„……aåÊ•˜0aÜÝÝùþ0ö8ÝÈ … @uu56oÞŒ]»vÁÐÐvvv˜2eJ½@—Ëå>|8nÞ¼‰©S§ÂÚÚÎÎÎxæ™g™™)Í—““ƒÝ»w£¢¢Bi´zÿþý!„À… pòäIi\ƒJ¥Âœ9s¤VÊ×ÿãto»»»céÒ¥X¿~=fΜ ¡wïÞèÛ·/BCC1~üx,^¼æææ°µµEÛ¶m¥ÁZ¯¾ú*æÍ›‡‰'ÂÂÂ3fÌÀóÏ?_oGhöìÙX½z5Þ}÷]©U?}út„‡‡?ô l³m·jÕ Íš5ÃÑ£Gáëë+m?µ±j/z£T*ѼysÌš5 îîî˜>}:–,Y‚É“'ÃÆÆžžžèß¿?Ξ=+-;00/¾ø">üðC"$$ï¾û.Ž?Ž­[·J‡ŠÌÍÍ1wî܇†”¡¡!ºté‚Í›7C­V£ÿþÒç“ÉdHNNÆÁƒQUU% Z6mš´ X°`:wîÜ` Ëd2¤¤¤àû￯³-½ñÆèÞ½; zôè?þ›6mBdd$ aee…×^{­^ Ëd2ܺu ?þø£4º\.—ãwÞA÷îÝ¡Õj‹¯¿þZúþXZZböìÙRë{îܹX¾|9–-[&‡Þ¿Lž<ù‘šÓ§OãÛo¿•j\»ìÚk ¨ÕjÄÅÅ¡[·nõ®¯ð´‘ñÒ¯º©°°ùùù N«=–——'''¢¼¼ùùùptt”~µZ-rrr¤=ó÷à ¥@J¥–––011‘.⟟òòr( XZZB«ÕB­VÃÁÁ …¥¥¥(,,„³³ócuS×îm ¢¢†††055•®þÖØZ­V£´´TzB¡€‰‰ ,-- ¢¢"äççÃÊʪÞà¤êêjäääÀÄĤÁV”ÅÅÅ(..®wxàjjj——'ýÈÃÊÊ *• åååuÖOíû*,,„¦¦¦011A~~¾4J­V£¨¨•••ÐjµP©T°²²‚‰‰ ´Z-JKKQZZŠÊÊJÈd2ÁÎÎN:[!??Z­¶¶¶Ëå nåååÈÉÉ«««ôÙ´Z­ÔeYSS¥R © \­V#77Wƒaii‰¢¢"iÔvçääHÛ”­­-ÌÍÍ‘––KKK©Å,„¶F¥R [[[é°…V«Enn. Em¶¶žÎÎÎŽúÖjµX¾|9¢¢¢ðÃ?Ô¹(Jee%òòòPUU%]:ØÊÊ Ðh4(((@ii) …4°®´´T5_û¾  Ñh`dd{{{””” ¼¼UUUËå066†Ý#¯RWYY‰œœh4¸¸¸Ô}_VV†ââbiÇ­¶u^[£ÒÒRiÛúãE{üÎ×ùŽÛØØÔ¹4jMM ¤e###XYYÁÈÈ•••ÈÎΆ£££t¨’’’:Ë«]oBÖ©ƒ‰‰ lll¤m¬ösI‡Ðj·íZ¹¹¹BHÛoíëþ¸ìÚÖymÍîܹƒ!C†`Á‚xá…þÔØ:‘ŽÊÉÉÁàÁƒ1yòdéÔ8úgûä“O””„Ï>ûì©>NDÿ8'Ož„™™Z·nÍ@ ÄÄÄÀÎÎN:wþ„âââ°fͤ¥¥ÁÅÅ&L@—.]ì+,,Ä矎ãÇ£¤¤þþþ˜2eŠtÌ‹ˆˆˆþ=77C† A=0xð`>|?ýôÖ¬YSo©¬¬ ,@ff&&Nœ(fÒ¢E é¦DDDôç=ñ(÷èèhTVVâ­·Þ‚µµ5ìì샳gÏÖ¹"ÄÇÇã—_~Á¤ÑÇÞÞÞ\ DDDÿ×~éÒ%4oÞ\Mleeooo\ºt Z­¶Î(á .@&“áóÏ?ÇéÓ§!„À€ôæ¾ÞDDDÿØ@/--­szHí)Eyyyõ.ÒQ\\Œ;wî@«ÕbÍš5ÈÈÈÀüùóaiiYïÊeIII8xð ×Ñÿ"Ð¥›¿Ÿ ZYY)Óü ÚËwN›6 öööðòòBXXâãã1tèÐ:;ñññHKK{䕾ôÍ®]»0jÔ(ny“S§NÁÉÉ -Z´`1þUUUøñÇ1lØ0ãoòÎ~¡t IDATã?¢W¯^u~鯓––†Û·o#,,ìõ¹æÍ›÷äÞªU+?~\j©ãÖ­[èÙ³g½‹+xxxÀÊÊJj‰×Þݧ±qyõ®6¥ïΜ9óûLº¤²²-Z´®žF­òòr\»vÛðßèúõëèÓ§O£wl£'“””KKËÜ6üé§ŸBþ¤ éÞ½;är9¶nÝŠ›7obß¾}ÈÉÉA§NPXXˆ/¾øW¯^tîÜ~~~X·n’““qêÔ)œ8qíÛ·êï’CDDô$ž¸…îììŒyóæaÍš5øæ›o`mm-Wž––†uëÖÁØØ~~~pqqÁâÅ‹±páBüòË/P©TxñÅñâ‹/>öåC‰ˆˆ¨¾¿ìJqBé6{;×jµõž«@½iµvîÜ ­V‹Ñ£Gÿ£ ~áÂ…FïÏMO.55fffOý% ÿ.555HJJBëÖ­YŒ¿Ibb"<==¼N;=¹ÚûdüÓÆÙôìÙó¯»ÛZcÁÜÐM ›÷iÀ0ÿ{=ÎÝÕè¿g``À0ÿ›ñ¦¯GÝÞVŸÉ¹z‰ˆˆèDDD¤êt¹«Õjdff¢ªª ööö°±±áÝŠˆˆˆô!Ы««qëÖ-|÷Ýw8räJKK¥›Ý{zzbذaèÝ»7T*ȈHWýƒ>@||<¼¼¼0eÊ4mÚJ¥YYY¸té¶lÙ‚ï¾û3fÌà`"""] t'''¬^½õî_Þ·o_àèÑ£¨©©aµˆˆˆt5Ð_ýõzAþ kkk <˜•"""Òå@?~üx£ÇÆ…P*•èÚµ++EDD¤Ë¾hÑ")¼322 —Ëakk‹‚‚TVVÂßߟNDD¤ëþå—_bbb°oß>Ìš5 ööö(,,Ć àááÁ*é8¹‹‹ \\\ðÓO?aÊ”) ‚««+Zµj…‰'âØ±c¬‘®zíÊËË‘••Ugbnn.Š‹‹Y%"""' o6l/^Œ«W¯ÂßßwîÜÁ?ü€~ýú±JDDDúè/¿ü2***pøðaÄÄÄÀÂÂÆ Ø1cX%"""} t¹\ŽÑ£GcðàÁ())‰‰ ¬­­¼ý)éX GEE=t¥R‰ÐÐPVŠˆˆH—}Ù²eÁÊÊŠNDD¤ë¾eË–‡ÎÀ.w"""=t777éANNîÞ½‹üü|XZZÂÍÍ ŽŽŽ¬‘®zí²²²ðÎ;ïàúõë055…Z­FÓ¦MñÁ €•"""ÒaRúÎ;¡Ñh°iÓ&lß¾Ÿþ9œ±iÓ&V‰ˆˆH_ZèÑÑÑøàƒ"Mœ4iÞxã V‰ˆˆH_Zè¸sçN‰™™™022b•ˆˆˆô¥…þÒK/aÑ¢EHKKC«V­pûömìÞ½ `•ˆˆˆt=ÐËËËallŒ—^z jµ{öìÁÞ½{annŽˆˆ^ú•è)'„Î~B ¤¤Ëåpww‡••‹D¤ ¾bÅ ¼õÖ[ˆÅ‹/¾ˆ—^z EEE077‡¹¹9+DD¸ÿ>îÞ½‹òòr¬]»3g΄B¡€HW}ÿþý9r$6lØOOOxzzÂÁÁPSSóûL¬ÑSJ&“¡]»vh׮Ћ‹ñÃ?ॗ^baˆt-Э­­1oÞ<\¹rŸ~ú)lllêÌ`ff†yóæ±RDDD:L>wî\4mÚZ­ååå(--­ó¯¬¬ŒU"""Òõzhh(:tèŒ1NNNÐjµÉdÒ?"""ÒñºL&ƒ‘‘Þÿ}xxxÀÄÄG…V«…©©)LLLX%"""]ô?>!„ÀgŸ}†ÜÜ\V‡ˆˆH_ˆˆˆþ^{ŠŠ±±1«CDD¤'  ô9sæÀÒÒ’Õ!""Ò—zuu5ÒÓÓ‘€ôôtTVVÂÆÆ …åå刎Žf•ˆˆˆt=Ð9‚—_~ãÇÇàÁƒ±~ýzøýrsçÎe•ˆˆˆtœÁ¶mÛЯ_?ôï߉‰‰Ø²e rss±hÑ"V‡ˆˆH_Zè÷îÝCxx8ñòË/cÕªUHHHÀüùóQXX!«DDD¤ë-ôÚcå —Ë€•+Wâí·ßFJJ JKKY%"""]o¡;88àòåËužôññÁÂ… ‘••…¼¼|øá¾}ûv\¼xãLJ——Wƒ§·…††b÷îÝ8wîqçÎ$%%aÈ!ÐjµÈË˃™™Œ¡V«QSS¥R ­V‹7n 77...\CD³ììlh4š'ZFII Ôj5222þ’% ®¢¿ÈC]¡P ++ óæÍÃôéÓZožàà`¼øâ‹øè£Ð²eK\¿~Ï<ó Úµk‡””DDD`ÆŒÇO?ý„ÇÃÑÑHHH@DDºuëÆ5Aô7ëÖ­lllžh·nÝÂàÁƒŸh9¥¥¥8p >úè#®¢ÿE 5 áááHMM}èHôiÓ¦áôéÓÈÎÎF÷îÝÑ®];XYYA.—ã½÷ÞC«V­:u‚±±1òóó¡P(ðüóÏ£C‡066æš ú›YXX`ìØ±O´ŒŠŠ |ñÅO¼œÛ·os…ý®V«Q^^­V+='—ËáååõÐ…˜™™¡wïÞ þ€ 0@zìêê WWWVˆˆèï ô´´4¬^½×®]“†Â !`ee…={ö°RDDDúè7nDrr2FŒi†Æ®óNDDD:è—.]¼yóбcÇz—k%"""Ý&(Þ¡Cܹs‡÷?'""Ò纣£#Ö¯_k×®ÁÍÍMº(Œ‘‘Qƒ÷J'""" ô . ªª ‡†\.—ºÝ­¬¬èDDDúè7nd5ˆˆˆô=Р¸¸±±±HIIA“&Mеk×ï‚FDDD:è©©©>|8***`ii‰ÒÒRÈår¬\¹;wf¥ˆˆˆt˜4Ê}ãÆ ¿ÿýoDEEaÿþýèÓ§»â‰ˆˆô)Ð/]º„W^yM›6…\.‡££#† †ÔÔTV‰ˆˆH_ÝÉÉ çÏŸ‡Z­TUU!11‘·7$""ÒÒ1ô#F`ÆŒHNNFÓ¦M‘'N`ܸq¬‘¾´ÐðhÑ"áàÁƒHOOÇÔ©S1lØ0V‰ˆˆH_Zèxþùçñüóϳ*DDDúèßÿ=ž{î9>|ÙÙÙu& !`llŒÑ£G³RDDDºè'OžD=púôi\½zµÞ ––– t"""]ôO?ý0oÞ<˜™™A¡PHµZ-Š‹‹Y%"""' Š[±bE½.÷üü|,]º”U"""Òõ@×jµÐh48qâŠŠŠ Ñh¤ùùùˆ‰‰a•ˆˆˆtœÁÑ£GqõêUÜ»w»w£#€ß»ÛaooÏ*éz '''#66EEE¸páÌÌÌ~oºËå°µµÅ;ï¼Ã*éz 3#GŽÄwß}‡^½zÁÚÚú? `bbÂ*éz ×öøñãQ^^Žôôt”——× õV­Z±RDDDºèµÿ),,ÄÌ™3ñÛo¿I7hkkk;vŒ•"""Ò‡@_»v-Œáç燶mÛÂÛÛ[¶lÁÀY%"""'‡~æÌŒ1¶¶¶°²²Â³Ï>‹·Þz ?ÿü3«DDD¤/-t™L•JSSSdeeøý²¯wïÞe•ˆžbB\¾|™™™¨®®Fvv6<…B€€899±HDºèíÚµCJJ :vìˆO>ù8sæ Z´hÁ*=Åd2üýýáëë èÕ«äòß;÷ Y "] ôW_}jµÍ›7GFF¢££áì쌉'²JDO97‘º»»»ôä˜1c0dÈ(•J±JDDDºè›7o~è ÆÆÆ5j+EDD¤Ë~âÄ @ee%¢££áããäääàêÕ« c éz ¯^½ðõ×_£yóæ˜8q",--QZZŠ={öÔ¹jé&¹µµ5¬­­qðàA„‡‡£E‹°µµ…»»; €ØØXV‰ˆˆH×½ö?–––8vì˜tÙתª*œ9s …‚U"""ÒqÒ(÷‰'bܸq8qâš5k†ŒŒ \¹rsæÌa•ˆˆˆô¥…ÞµkWDFF¢]»v(//‡ŸŸvíÚ…ádzJDDDúÒB___Ì›7U!""Ò·@߸q#FŒ={ö --­Þ ¦¦¦˜5k+EDD¤ËžŸŸFƒ‚‚dgg×›ÁÜÜœU"""Òõ@Ÿ;w.`æÌ™¬‘¾znnîCgËå°±±a¥ˆˆˆt9Ðû÷ïÿÐlllðË/¿°RDDDºèK—.}è ¼m"‘zXX˜ô@FFÃÊéS ×þG£ÑàÈ‘#¸|ù2ŠŠŠ „ðûik<7ˆˆHOýèÑ£X±bòóóáêê ¥R‰¸¸8 <˜U"""Ò—@ßµk&NœˆØØX´mÛƒ ÂîÝ»‘ššúÈ…TWWãþýûP«Õ022‚½½=T*ÕC_SVV†ììl˜™™ÁÁÁk‚ˆˆè H×rÏÉɯ¯/LLLPQQsss„……!..î‘ Ù³g&NœˆY³fáõ×_ÇÎ;zõªª*ìØ±ݺuÃâÅ‹¹ˆˆˆþª@wrrBnn.\\\pòäI#!!UUU]@JJ Ö¯_ððp¬]»ãÆÃŽ;˜˜Øèk®_¿Ž'N iÓ¦\DDDe :ÅÅÅ8p ÊËËÑ¥K,Y²ãÇè:¼üòËpvvFXXZ´h˜˜hµÚzó«Õj¬]»={ö„ŸŸ×Ñ_@:†þàf>ÿüs\ºt öööðöö~èîܹWWWé|u¸¸¸àöíÛÒHùZBDFFB­VcРA8wî×Ñ_èkÖ¬AHHBBB`ee…ÏO˜ÊÊÊ:àär9”J%***êúÕ«W±uëV¬X±¶¶¶\öþýû‘žž.=îÙ³':uêĵFDDO­ÒÒRDFFâÎ;Òs)))ÿ ôââbLž<æææèß¿?úõë‡&MšÀÊÊ 2™¬ÑÛØØÔ¹íjuu5ŠŠŠ`ggWçujµ[·n…ƒƒrrrð믿"##*• hÙ²%”Jee÷íÛ£FúÏÞ‡×$=ÕLMM1tèÐ:‡µ=úŸ@Ÿ;w.ÂÃÃãÇ#22žžžèÕ«FŽÙè‚Û¶m‹Ÿ~ú YYYprrBaa!’““1bÄÈåÒ!z!àåå…û÷ïcûöíB 99 …@óæÍ뺡¡!ŒŒŒ¸öˆˆˆþ?™LV//årù]&“ÁÓÓžžžnß¾C‡áÀP(1bÄC`nnŽíÛ·cõêÕX¸p!üüü°nÝ:xyyáÞ½{¨ªª‚F£L&ƒ©©ià€J¥‚¹¹9×Ñ_è{öìÁ?ü€ììløùùaæÌ™èܹ3œ¹&Mš`É’%õžwqqÁæÍ›}ÝŒ3¸ˆˆˆþÊ@?þ<ž}öYtêÔ nnn°´´duˆˆˆô-З/_à÷®÷o¿ý}ûöe¨é ùŸB`Æ ÈËËcuˆˆˆô5ЉˆˆèèÁÁÁ066fuˆˆˆô5Ðår9.\SSS”••±BDDDúèûöíÃálj‰‰èÝ»7ú÷ïS§N±JDDDúè»w¡!4 V¬XÐÐPtëÖ «V­b•ˆˆˆô%Ð `ooììlܽ{o¿ý6FŒ¬¬,V‰ˆˆHÇIç¡;88 ..*• VVVhÒ¤ ®\¹Â;œéS ¿ú꫘;w.d2&Mš™L†äädøøø°JDDDúè=zôÀºuëPSSƒÀÀ@@ëÖ­áëëË*éK ÁÛÛVVV(**®]» T*Ñ»woV‰ˆˆH_}Ñ¢EÆÈ‘#±qãFìÙ³*• ·o߯œ9sX)"""&rONNFË–-Q^^Ž#GŽ`ñâÅøðÃÃ*éK ]&“¡¬¬ ‰‰‰¨¨¨@ïÞ½‘’’«ÅéS wêÔ Ë—/‡J¥BëÖ­ahhˆ{÷îÁÖÖ–U"""Ò—@;v,JKKQQQqãÆJJJзo_V‰ˆˆH_ÝÙÙ ,@~~>ª««‘ž={B©T²JDDDúè555ؾ};>ŒœœX[[£{÷î3f ¬¬¬X)"""}ô`óæÍ5jüüüššŠÝ»wC.—cêÔ©¬‘>ú®]»ðÁà…^€L&ƒ~~~X´hˆˆHÇIç¡«ÕjØÚÚB&“øý46KKKTWW³JDDDúèmÛ¶ÅÆ‘žž­V‹¼¼<|ùå—hÖ¬«DDD¤ã¤.÷3f`ìØ±èÕ«T**++áåå…O?ý”U"""Ò‡@×h4øõ×_±hÑ"dffJ£ÜÛ´i{{{V‰ˆˆH].—c×®]øðÃÑ£GV…ˆˆHÏÈßÀ…††âرc())aUˆˆˆô±…eeeضmâããáää¹ü÷ñr¦¦¦˜?>+EDD¤^SSƒ: ¦¦÷îÝ“N_³°°`•ˆˆˆô%Ðßÿ}VƒˆˆHOI硟>}±±±u&^¼xGe•ˆˆˆô%зnÝŠÒÒÒ:Õj56oÞÌ*éK §¥¥ÁÙÙ¹ÎD[[[ddd°JDDDúèMš4Á¹sçêLLJJâ 8"""= Š=z4¦NŠ{÷î¡M›6¸qãöîÝ‹×_U"""Ò—@ïÖ­æÎ‹ÿû߈…µµ5^{í5 :”U"""Ò—@—Ëå:t(úô郢¢"˜™™ÁÊÊJºÀ éA ÿ¹º¥¥%+CDD¤GØü&""b ˆˆˆþþ@¿ÿ>¾üòKV‰ˆˆHŸ=##«V­b•ˆˆˆtœÁ‚ ¤[¥þQVVŠŠŠX%"""]ô5kÖ cÇŽpqq©71//†U"""Òõ@÷õõÅË/¿ŒAƒÕ›xùòeL™2…U"""Òõ@ïÞ½;är9ÌÍÍëMtrrB‡X%"""]ôéÓ§C¡P48ÑÃÃëׯg•ˆˆˆt=Ðmllê=YYY ¥RÙè`¹?JMMÅš5k””oooLœ8¾¾¾õ^ŸžžŽmÛ¶!..UUUhÖ¬&Mš„6mÚ<öß"""¢ú궦ÕjѧOܹsç±P\\ŒqãÆA«ÕâÃ?„……¦NŠ7nÔ›W£ÑÀ×× ,À¿þõ/xxx`ܸq8þ<×Ñ“´ÐŸtÑÑÑ())Á¬Y³àèèÄÇÇãìÙ³ðòòªÓòvww‡»»»ôØÓÓ_}õRSSµADDôWº‘‘Ñcw_¼xîîîpttXYYÁÇÇ—/_†V«mðø|QQJKKqèÐ!ØÚÚÂÏÏk‚ˆˆè¯ t¹\ŽO>ùÎÎ倂‚XYYI aaa´´4!êͯÑh0{öl\»v ùùù˜0a\]]\öÍ›7qêÔ©:-ü†Î—'""zZTUUáæÍ›(,,¬ÓP6(//¯7³´Z-j§™˜˜4º`•J…¼¼<é±V«EUUU£­|…B?þHJJÂ{ï½WWW 8°Þ¼åååuÞ°““×$=Õ„(--­“ÕÕÕ0 mô°²²ÂÉ“']°§§'Ξ=‹ªª*(•J”••!==AAAvÛ[[[lllФI$''C£ÑÔëžoݺ5úõëǵGDDô@Cº}ûöuž[±b æÌ™SoæÒÒRDEEá×_•Ž7æÙgŸÅ¶mÛðõ×_£W¯^8sæ RRR0uêT”••áäÉ“ðó󃻻;RSSQXX!œœŒÔÔTDDD4z.<=šÁK/½$=¨©©A||<¶nÝŠ7n`„ xpzCš6mŠ·Þz »wïÆÞ½{!„À˜1càï ÌŸ?ï¾û.ÜÝÝqíÚ5ìܹeeeR/ÀÈ‘#Ñ£G® ""¢' tà÷ ɤ¥¥aåÊ•8sæ ºvíŠÝ»wÃÕÕ*•ê‘ :t(zô芊 ¨T*ØØØ@©TÂÝÝûö탥¥% ,, ¨¬¬”º jç%""¢'ô‹/"22@PPÖ¯_<þ)ê vÍ¢I“&Òc###l#""ú;}̘1(((@Ÿ>}гgOàÈ‘#Ò J¥={öd¥ˆˆˆt9ÐËÊÊ`llŒ¸¸8ÄÇÇ×›ÁÆÆ†NDD¤ë~úôé‡Î —ËY%"""]t[[[VˆˆHÏɧOŸŽ3gÎ ''FšP{%š[·naݺuˆŽŽfµˆˆˆtµ…îîK—B©T"00vvv000@aa!nݺ…ÔÔTøøø OŸ>¬‘®úo¼~ýú!..‡BTTª««agg‡víÚ!""mÚ´©©)«EDD¤«n``OOOxxx`èСÐjµ™L…BÁAqDDDúèµÿ‘Édêb2DDD¤;Øü&""ú'µÐ‰ôUyy9ÒÓÓQYY µZ …B¥R SSS¸ººò^DôôºV«ELL Zµj{{{V…ôŠZ­ÆÍ›7QRR‚}ûöÁÝÝppp€££#ˆžž@—Édذa>øàúß@«ÕJçø ! “É€ƒÿ"¶¶¶èׯ %%mÚ´ái–Dôôz›6mpúôixxx<Ö-Séñ:u GìØ±¯¾ú* gÏžèÚµ+ DDDM €±±1V­Z…ÄÄD4iÒDj9ãõ×_g¥ž@×®]¥à>~ü8,XÀ¢Ñßèiii°³³ÃÅ‹‘˜˜(u [YY1Љˆˆô%ÐW®\Éjé{ ×¶Ò£¢¢™™ {{{„……ÁÓÓ“·ˆˆˆô%ÐSSS1|øphµZ888 ??[·nÅÊ•+ѹsgVŠˆˆH‡IMïÏ>û ]»vÅ¡C‡‰Ã‡cèСXµj«DDD¤/~ýúu 2~ÝÞ·o_dee±JDDDúèŽŽŽˆGYY4 Ôj5¥€'"""Ý%C;v,¦NŠË—/ÃÛÛiii8uêÞzë-V‰ˆˆH_Zè;vÄG}SSSœ={555˜5k Ä*éC ]£Ñ`øðá˜;w.>úè#TWWÃÀÀ*•Ч¬éK + X[[#//FFF022beˆˆˆô-Рÿþؼy34 <<< P(r¹îî>ú÷ßóçÏãÊ•+00øÏälllÍJéz kµZ„‡‡c̘1033«3ƒ¡¡!«DDD¤¤šèÒ IDAT/-ôÈÈH̘1>>>¬ ÑÿPrr2"##QQQÛ·oÃÍÍ †††ð÷÷Ç‹/¾X§×”è¡.—ËallŒ›7oÂÛÛ[ºu*ýý<==1eÊ!0fÌŒ;NNNP( súó-ô6mÚ`õêÕÈÉɳ³³tºšR©DXX+EDôÿØ»ïð¨êtãß)ɤOz/$!”¡×ËEš QÀEl ,* zEQ@вˆ ê‚……E”² ¡,Ih&’ÞHBBêd23÷oήˆîfðý<Ïcf¿À;gÎûë¿ßˆZ­F§Ó߯:Òét²ÚHüò„þÅ_ðÍ7ßðÏþ'''¥•îááABB‚DJ!„°†„þ·¿ý ‹Å"B!¬9¡«Õjª««¹xñ"%%%ÄÆÆRWW‡F£ÁÙÙùw¨mÛ¶qùòå;.'==¥K—ÞQ¶¶¶,Z´è®ŠïåË—Ù¶mÛ—Ç… ˆ‹‹»ã²æÍ›'‡ !¬/¡WVVòøãO}}=àüù󤧧3gΜß} >úè#"""îxŸÙl¦¦¦æŽÊؾ}û]—Я\¹Â7ß|C÷îÝ靖ºº: ÃÇxß¾}Ìœ9SºÂúúÊ•+±±±á«¯¾âÀd2À¦M›$¡ÿ¿ððplmmï¨ {{{Z¶lyGeÜ­“e¼¼¼î86iiiøûûßq9Ò+%„°6ÊÉ+ñññÌœ9“€€eBœ‹‹ ååå%!„ÂZº££#ׯ_W&ÆY, Ðëõ%!„¢™SºÜ'MšÄÊ•+©ªª¢¼¼œcÇŽqèÐ!†*QB!¬%¡6ŒË—/³qãFJKKÙºu+ýúõcâĉ%!„ÂZºN§cîܹL™2…ššt:žžž888H”„BkIè I=00P¢"„BXµ„@!„„.„BIèB!„ø5(cè‹…äädÎ;Guuµ²ÝÞÞž)S¦H¤„BkHè_|ñ .ÄËË {{{T*‹WWWIèB!„µ$ô-[¶ðôÓO3mÚ´Û>€¤¢¢‚cÇŽQPP€··7½zõÂÃãÉu¥¥¥\¸pÌÌLêëëñ÷÷§oß¾899É'!„Bü ]«ÕÒ¹sç_tšØo¼A||<;wfÏž=?~œ àææÖ躯¿þšm۶ѲeKlmmÙ±c'Nœ`Á‚’Ô…Bˆ_#¡=š÷ßWW×F›É¨Õj|}}oYÀéÓ§Ù»w/7n$**ŠË—/óØcѯ_?† ÒèÚ?üáôïßGGGT*Œ=šþýû3`Àù4„VëÚµkÜq9eee$''S\\|Gåh4"##åƒL&ÅÅÅÔÖÖR__ÉdB§Ó¡Õjñðð¸kN°Tú·ß~Ë'Ÿ|ÂðññQN\suuå³Ï>»eÇŽÃÇLJ®]»¢R©&22’S§NqÏ=÷ Vÿk"½««k£?«×ëQ©TÔÕÕÉ'„°j›7ofÇŽMz&oWRRK—.½ã£šÓÒÒÈÈÈ0 ÄÇÇ“››Kjj*IIIŒ9bcc²Ñj• }òäÉMZÔÀ¿½©òóóUìììðòò"77³ÙÜ(¡ÿÅbaË–-øùùѾ}{¹ã„V/66–¶mÛÞQï½÷#G޼ã“.ß~ûmù@þŸƒƒÆ S¡:Ž™3gÞuÿN%¡÷íÛ—úúzJKK©©©ÁÎÎ77·›Ð-‹’Ì4Ì¿•êêjÞ{ï=>ÿüs6lØ€¿¿ÿM¯Ûµk©©©Êσ&&&FîN!„¿[ìܹ³Q~LOOÿWB¯¯¯góæÍ8p€k×®áææFÿþý™1cF“®òòõõ%%%EI샒’üüünÚ:7›ÍlÞ¼™Ï>ûŒ%K–йsç[–=f̦M›&ŸžBñÿœ›äÆ'Nük§¸½{÷²iÓ&bbbX´hÇg÷îݼÿþû?Yp=ÈËË#-- ø~iZRR’2¦þcü1~ø!O=õÿó?ÿ#ŸŒBñ+PZèýë_yñÅ1b„ÒeÞ¶m[–/_Μ9snY@LL ýúõcÞ¼yÄÆÆròäIÚ·oOtt4ééé<ðÀ<óÌ3Œ?ž;w²`Áî¹ç زe Z­–èèhZ·n}×ùòåË$''ߟh×0É022’ˆˆ¹ …Büz ½¦¦¥U­R©ÐëõÆŸ,@¥R±téRöîÝKff&#FŒ`РAxzz¢V«™6mš2IÄßߟÇ{Œúúzòóó°±±¡¦¦æ®r«V­hÕª•Üm¿‘ÊÊJ®^½Jmm-ÙÙÙTWWS]]³³3¡¡¡èt: ’â÷“лtéÂÆ Æßߟëׯóá‡úo ¹Õö°îîîÌš5Kù¹wïÞôîÝ[¢.~U¶¶¶øøøP__··7jµFƒ­­-Z­V$„ø}%ôùóçóðÃ3hÐ t:ƒˆˆV¯^-QÍ>¡{{{K „’Ð\\\Ø´igÏžåÚµk¸ººÒ©S'¼¼¼$JB!DsOèƒ[[[êêê°··oÒ%n0îšmñ„Bˆ»6¡Ï™3‡W^y…_|‘ï¾û®É†0nnnìÚµK"%„B4ç„>~üx3f ±±±Mº´Î…B+H辟©Þ³gÏF'­ .^¼(QB!š9e§¸yóæ‘ÝèÍÂÂBžzê)‰’BÑÜ[èUUU ŒF#ååå”––ߺ’œœ|ËÓÒ„BÑŒú믿Ξ={HMMeúôéʘ¹Åb¡®®Ž{ï½W¢$„B4÷„>vìXzöìÉæÍ›5jžžž¨Õj<<<ˆŠŠ’( !„Í=¡GEEE«V­ ’}¯…BkLè ÿʹs爋‹£¤¤³Ù €££#úÓŸ$RB!„5$ôo¾ù†Å‹SVV†ÎÎΜ;wŽ˜˜‰’Ba- ýÃ?dÖ¬Y$&&Ò½{w ć~ˆÉd’( !Äo¨¨¨ˆ‹/*GK=z;;;|||èСƒ¬6·—Ðssséܹ3ÉÉÉTUUáååÅàÁƒyúé§Y°`DJ!~#Ê9}úôA­V£R©Ðh4’ÌÅí'tJJJ "..ŽþýûsúôiŒF£DI!~C{{{ „øuúˆ#¨¬¬dÈ!ìÙ³‡x€ŠŠ žxâ ‰’Bˆÿº“'OòÚk¯ÝQ%%%qáÂ…;þûÌŸ?Ÿèèèæ—Ðï»ï>, †O?ý”+W®àææF`` ÜEB!þëòòòÐjµôíÛ÷—‘žžNJJ ýû÷¿£¿K\\¹¹¹Í³…~õêUŒF#mÛ¶ÅÙÙ™.]ºpõêU._¾L»víäNBñ_gccsGÃ:­V{ÇC666Í.6Êl‹wß}—”””Fofee±aùƒ„BˆfNIègÏž%,,¬Ñ›þþþr|ªBaM ÝÍÍ+W®4z3;;[9¬E!„Í—2†>|øpV­Z…££#;wæòåˬZµŠ>}úH”„BkIè“'O&33“E‹QQQ££#÷ÜssçΕ( !„Ö’Ð5 .dòäÉáîîN‹-°µµ•( !„Í=¡ lmm©««Ãl6ãç營Ÿ&“‰ššÙÁH!„hî }òäɼóÎ;Ì™3‡ÄÄD,K£ <<<ˆ‹‹“H !„Í9¡?ñĸ¸¸(cç?ÖÏ !„âG ýwÞ¡}ûöìÝ»—‡z___‰ŠBam =##ƒ””>ÿüsúôéÓäüsF#I^!„hî =""‚ùóç“––ÆâÅ‹qttlt^¯ç£>’H !„Í9¡¯\¹’óçϳxñbFݤ5.;Å !„VР¾¾ž˜˜\]]%*B!„µ%ôóçÏÓ¦MZ´hARRR“ lllèÞ½»DJ!„hÎ }åÊ•¬ZµŠÕ«Wsîܹ&¸»»sðàA‰”BÑœúúõëqvvfõêÕÆ&¨Õj‰’BÑܺ^¯¾ŸÍÞÀl6sîÜ9´Z-mÚ´‘( !„ÍœÒü^±býë_øøã™8q"“&M’%kB!„5%ô“'OA]]ýë_yî¹çX´h;vì( !„Ö’ÐNUËÎΦ´´”1cÆÐ½{wÊÊÊ$JB!D3§œ‡Þ¶m[>üðChÑ¢z½ž””œ%JB!„µ$ô™3g²hÑ"ŒF#O?ý4yyyôîÝ[¢$„ÂjF²²²¨¨¨ ??ŸÂÂBΞ=‹­­-ÁÁÁ899Ý] =22’7b2™ðññ ::ZºB«¦V«qrrB«ÕâââBxx8:­V‹V«½ûZèçÎÃÆÆ†víÚ‘žžÎ²e˰··gîܹJ‚B!¬F£ù]ä1eRÜÚµkIMM`Íš5”——SVVƆ änB!¬¥…ž››KXXׯ_'11‘õë×c6›™7ožDI!„°–º³³3)))|óÍ7hµZ:v숽½=f³Y¢$„BXK }Ĉ¼úê«ØØØ0lØ0®\¹Òä|t!„B4ã„>nÜ8ÜÝÝ©««#&&yä‘[ˆÅb¡¾¾³ÙŒZ­F«Õ¢R©nz­ÉdÂd2a±XÐh4wÕ C!„â¿EérwttäÞ{ïeèÐ¡ØØØPZZJË–-éҥ˿-dß¾}Œ=šAƒ1jÔ(þö·¿a0š\W\\ÌÂ… ‰ÅÏÏ×_]>!„â×l¡F¶lÙ™3g¨¬¬Äb±ßŸÂ¶qãÆ[——Ç«¯¾Êĉ>|8GeýúõDDDЩS§F×ÚØØÐ­[7ºvíÊûï¿/ÑB!~íúŽ;ؽ{7©©©899áççGRR!!!?YÀ?þñT*3fÌ ,,Œ{ï½âââšL¨ÓëõLš4‰aÆÉÚv!„â·h¡ïܹ“yóæñÕW_ѹsg&OžÌ®]»8räÈOœœLhh(ŽŽŽ¸¸¸Æwß}§´ò…BñJèÕÕÕøøø`kk«œ°Ö¶m[Ö­[÷“ÔÔÔ`gg÷¯&¿ZN§£¨¨èŽú×_Ýh,¾W¯^tìØQ>5!„¿[ÕÕÕ9r„œœåµÜÜÜ%ô°°0rssiÕª»wïfàÀìÛ·N÷“;;;SPP ü\__OUU...·œéþsEEE1tèPågWWWù$…Bü®ét:ºwïN‡”×>øàƒ%ô©S§R[[ËÈ‘#9{ö,S¦LÁÅÅ…… þdÁ:uâàÁƒ”––âîîNyy9W®\aÔ¨Q¨Õê;úK»»»,ŸžBñÿ4 ÞÞÞ^³³³ûWBïÕ«—òÆË/¿ÌÕ«Wqqq! à' Žeýúõ¬]»–1cưÿ~*++éÙ³'×®]ãÝwßåž{î¡{÷¤PPP@ii)yyyÄÇÇÔä/'„BˆŸO››› Ðd¼»¡{»¨¨??¿[àááÁªU«X»v-sçÎ%88˜e˖Ѻukrrr8yò$QQQÊõ«V­âìÙ³TTT‘‘Á™3gxæ™g˜0a‚|B!Ä/MèãÆûÉ ÜÝÝÙ»wïO^Ó©S'þò—¿4y=$$„={ö4zíÏþ³D]!„øµú›o¾ù“ØØØH”„BˆæžÐûôé@ee%f³åͪª*êëë%JB!D3§LCß¼y3hôæÉ“'Y³fDI!„°–„~äÈ‚‚‚½éëë˱cÇ$JB!„µ$t€ÚÚÚFo ŒF£DI!„hæ”uèÑÑѼûî»xyyDaa!|ðíÛ·—( !„֒ЧNÊŒ3xàððð ¼¼'''þÝ,x!„B4£„îççÇ'Ÿ|Bbb"iiiÑ­[7Ù?]!„°¦„ß}Kll¬DF!„°"j B! ]!„’Ð…Bñkh4†^__ÅbitòšJ¥’ýÜ…BkIè—.]bþüù¤§§+‰ÀÓÓ“'NH¤„BkHèkÖ¬! €§žz GGGåi !„V”ÐsrrXºt)Ý»w—¨!„VF™7|øpΜ9CUU•DE!„°Özyy9[·nåôéÓxzz¢R©prrâ…^H !„ÖÐëëëéÑ£&“‰¢¢"傚š‰’Ba- }ñâÅ !„ÂÚ:|zFFåååʲ5­VK·nÝ$RB!„5$ôüü|{ì1’““Q«Õ¨Õjªªª áèÑ£)!„Âúš5kˆŒŒÄËË‹nݺѡC¶lÙBïÞ½%JB!D3§,[»xñ"cÆŒÁÍÍ úôéÃôéÓÙ¿¿DI!„°–„®Óépss#--ÚÚZ, yyy%!„¢™SºÜ£££ÉÎΦoß¾,Z´ƒÁÀÙ³géÔ©“DI!„°–„>eÊŒF#>>><÷Üs>|˜2nÜ8‰’Ba- Ý××—ºº:JJJhÛ¶-ýúõÃb±Èá,B!„5%ôššÖ­[Ç×_Mqq1;wî$==¢¢"Æ/‘B!š1eRÜÎ;9xð >ø õõõFT*»ví’( !„Ö’Ðÿö·¿ñüóÏ3~üx\\\ð÷÷'77W¢$„BXKBÐh4Ê)kðý lööö%!„ÂZztt4›7o¦°°€ªª*>ÿüs:vì(QB!¬%¡?ù䓨Õjî¹çRRR˜2e —.]bΜ9%!„¢™Sf¹ÛÛÛ³nÝ:Μ9C^^žžžtíÚOOO‰’BÑܺÉdR~ppp _¿~.0™Lh4‰”BÑœz·nÝÐéthµÚ›^àææÆž={$RB!DsN踸¸KŸ>}š$v™å.„BXABÿüóÏùꫯøöÛo©­­e̘1 4½^ËV»B!šYB‰‰!&&†êêjvíÚÅîݻٸq#111Ìœ9“àà`‰’BÑÌ)ËÖ?~<>ú(ÎÎÎlß¾´´4‰Ba -tƒÁÀ78vìÛ¶m£¨¨ˆ=zð /Ю];‰Ba ýÙgŸåøñã8991~üx „‡‡ƒ£Ñˆ^¯—H !„Í9¡¯]»:tèÀáÇ9|øp£ ôz=›7o–H !„Í9¡¯Y³æ'/ekB!„$ôÙ³gK„B+§–!„’Ð…B! ]!„¿†_eo×¢¢"¶nÝÊ¥K—hÙ²%S¦L!$$ä¦×VTTðöÛo“’’B@@Àïn7º¼¼<üýýåÎû”••akk‹ƒƒƒã7`6›)**Â××W‚ñ),,ÄÓÓSN¹üÔÖÖR]]»»»´Ðoœ'žx‚””FM~~>óæÍ#33³Éµ•••Ìž=›¤¤$F…ÑhäÑGý]íH— ߨßPFF¥¥¥ˆßH}}=çÏŸ—@ü†¾ûî; ƒâ7¬ô§§§K ýfŽ=JFF»ví"((ˆÎ;3}útNž¼½½)))!66–™3gRXXÈý÷ßÏüùó™8q"f³™mÛ¶±mÛ6üýý)..&::šÇggçfœÔÔTvïÞMtt4½{÷nôÞúõë1bÁÁÁœ|˜òòr"##8p Õ?Kàû!ݳgÏ’@YYÎÎÎDEEѳgÏ[ÞÒB¿M3fÌàÕW_eúôé,_¾œGygggظq# øþ—©ÕLš4‰•+W2cÆ ^|ñEž|òÉf™Ì>þøc–-[ÆÖ­[©¬¬lôÞš5k”IÇŽcÏž=¿ÚÚQ;;;\\\š YX£mÛ¶±lÙ2>øàªªª%è5kÖ••…ÅbáÛo¿eïÞ½ÔÕÕÝ´œ#GŽððÃóüNG]]Û·oçõ×_—Lý3:uŠ¿ÿýï8::âåå…——z½N‡^¯ÿEËF/\¸Àòå˹~ýú-¯IJJâÝwßÅÅÅEù½Íõ;;îY''§Fñ´³³ûÅñ>žºº:Þ|óM>øà«·Ñhdݺu<óÌ3¤¦¦âääĵk×xíµ×سg|Áù•vг³³£C‡M^···§k×®^³±±¹éµÍMFF_}õ ,`Ïž=$%%Ñ£G_TÖ7HII¡²²ggg"""Ðëõ˜L&eS“ÉDAAááḸ¸`±X” …\¹r…ŠŠ e‡.³ÙLÛ¶m›u ÓÓÓÙ¿? .dÏž=¤¤¤ü¢y)))Ì™3‡'žx‚Gy¤ÑDË‹/6j¹dggS__¿¿?¡¡¡ØØØPUUÅwß}Gpp0YYYÔÔÔ@HHäççãââBDDŽŽŽTWW“””„ŸŸTTTàííMDD666˜L&rrrÈÎÎÆh4booO«V­¬bç©°°0¦OŸÞ¨W£¸¸´Z-µµµ$%%áããCaa!eeetéÒ£ÑHzz:UUUèt:‚ƒƒñööV†Ø¾þúk|}}‰ŒŒÄÛÛ»ÉïurrbÆŒwE"ÿ¡ˆˆf̘^¯W^+,,Ä××FCMM ß}÷þþþäççS^^N÷îÝ©©©!==êêjt:-Z´ÀÝÝøøxRRR8rännntèСÑ*"€2pà@åç{|É“'Ó®];vìØ½½=+V¬ÀÍÍN:±xñbî»ï>eɰ5úüóÏyï½÷Ø´i111Êë555äçç+ÏíììlÌf3~~~„……¡Õj©ªª")) rrr0 ÄÕ«WÉÏÏÇÕÕ•V­Zaoo¯\Hnn.•••x{{Óºuëf½ƒŸÑ„ÅbáôéÓTWW3vìX8qâݺu»íZwee%¯½ögÏž%00ÂÂBÚ·oÏSO=…““ï¼ó‰‰‰´mÛ•JŸqã¸|ù2ÇgíÚµhµZ6nÜÈÁƒiÙ²%jµš+W®Ì»ï¾Û¬cxêÔ) ãÆãôéÓœ8q‚Î;ßvÏ×_~‰ ÷ß“/Sûöí•Äþ / Óéprr"//‡~˜#F™™Éc=F—.]prr"''‡ÊÊJ&MšÄ… ¨¨¨ %%…Gy„ &——Çܹs ÃÙÙ™šš²³³yòÉ'1bééé<ÿüóØØØàêêŠÁ``Ê”)üá°Š{û‡›ï¨T*NŸ>͆ Ø´if³™ àéé©$æÀÀ@V­ZEAA¾¾¾˜ÍfzôèÁ¨Q£8sæ ׯ_çË/¿ÄÃý^Ó„~ãÆ V¬X½½=‘‘‘Œ1Q¯p IDAT⎗€6×x=z”?þ˜wÞy‡ÊÊJž~úiBBB”JT`` +W®¤¤¤oooL&}ûöeðàÁ$&&RZZÊ_|^¯ÇËË«IBÿa/WUUñññøùùáåå…ÉdâôéÓôë×O©dôêÕ µZMbb"C† ±Ú8oß¾¾}ûÒ«W¯& ǰ°0âããyùå—qppÀÎÎŽ‚‚fÍšÅðáÃÉÎÎfÖ¬YtèÐwww²²²¨®®fêÔ©œ9sF©ÄÏž=›1cÆ••Å“O>Idd$ŽŽŽTVV’››ËÓO?ÍСC›mï©$ô[$᯿þšÞ½{Ó¢E ¢££Ù½{7>úèmÓìß¿Ÿ/¿ü’-[¶Bjj*³gϦcÇŽ :ø~röìÙ`ggÇ•+WµNwìØÁÒ¥KéÛ·/¹¹¹Ì˜1£Ùǰ¢¢‚#GŽÐ·o_BBBèÓ§;wîdÖ¬Yhµ·wÛ¥§§ãããÓhƒª««cÍš5¸»»³|ùrìììøøãY¿~=;vTz@|||xúé§©««c„ ìØ±ƒ+VàïïÏ»ï¾Ë§Ÿ~ª|& ç%K–`kk˶mÛØ¸q#:u"11‘ŠŠ V®\Ipp0555V³wü·ß~Ë}÷ݧ$ÓeË–Ýô:•JÅ¢E‹°··§ººšo¾ù†7Þxƒ>}ú(;ʹ¹1qâDÒÓÓY´h7ý~øúú2iÒ$Z´hA^^+W®äÒ¥K<ûì³V¿;ä¡C‡9r¤rO¯\¹R‰ßú¶¶¶,^¼;;;®]»ÆéÓ§yã7èÞ½;F£µZ««+cÇŽ%''‡¥K—âááqËq FEmm-ƒ·Þz êêê(--ÅÕÕU‰­»»;666VY›†Ju¯^½nZ¬¨¨`ݺu°dÉllløè£X¿~½R鯬¬$<<œ'žx‚ªª*&L˜À§Ÿ~ÊÊ•+ñôôdýúõìÚµ«QÅÜÆÆ†%K– ÕjÙºu+ï¼ó;v$  YÆIN[»‰ììlŽ=ÊСC±±±¡OŸ>äççÛeÅÅÅEÇŽquu%22’^½zqúôie¼866–ððpe<ó‡.\¸€ŸŸ]»vE¯×IŸ>}š} 3228~ü8Æ C«ÕÒ·o_rrrHLL¼í²T*ÕOn“““ÃÅ‹yàðóóÃÍÍPYY©l £Ñh1bøùùA‹-hß¾=îîî´iÓ†’’’Fó ÆŽ‹¯¯/îîî 2„ââbrrrhݺ5µµµ¬^½š;w’™™i5itéÒ…µkײyóf6oÞ|Ë!ûî»___ôz=„‡‡³yófÞ{ï=.^¼ˆÙlF­Vcgg‡Z­ÆÁÁGGÇ›VÖúôéòe˘1c‹/fõêÕlÛ¶sçÎYý³¢W¯^¬[·N‰g»vínzÝèÑ£ñññQz0Ù´i[·n%)) ‹Å‚Z­F§Ó¡V«qttÄÑÑñ–÷•££#›6mbíÚµ 4ˆ—^z‰ììlåûòãÖí¯0÷ù¿ª¡‚t«Gvv6IIIL:ÜÝÝuuu9r­VÛd‚²µµÐg̘Á©S§Ø¿?555ÊýTPP@ii)AAAûì3öíÛGPPƒóçÏ3f̘»ö;‘••ÅóÏ?Oxx8:Žóçσ»»;AAAxzz²fÍBCC6l­[·Vþlmm-[·nU†ŽJJJˆçñÇ¿e÷ôÝîòåË,_¾œððp´Z-çÎcÀ€8;;+1W®\IPP#GŽlô¼1 ¼ÿþûœ????ª««‰gÊ”)DGG£V«=z4 ,^¼˜={¶ÕŸÿ=pà@fϞ͚5køòË/ñ÷÷çÆ\¹r…‡~˜Ù³góòË/SXXˆ££#'Nœàü#¿øpñâE–.]ŠÅbáØ±c<öØc„……QTTÄØ±c™2e ³fÍj6½¦š_|ñEIãÿRYYI‡èׯ_£®r‚ƒƒ %00OOOºv튳³3ŽŽŽDDDÚdÌËÎÎŽÞ½{£×ë±±±¡gÏžL:T*•2.þãfhÙ²%ááá899ѱcGeLtt4W®\¡uëÖÄÄÄ R©ðöö¦GwÔýµcELLL£½!†aaaàååÕ(†­Zµ¢E‹77 $&&4 ^^^ 0€1cÆ Óé ¤cÇŽØØØàììÌ„ 2d:­V‹¿¿?;vT6ßpqq¡C‡ Óé ¥]»vTTT°{÷nžxâ ‚ƒƒÑétŒ;–aÆakk‹^¯WZCŒ9’!C†4ûYÛ Ëë"""uÛÚÚB›6m°³³ÃÇLJ¨¨(¥[ÞÞÞ½^­­-öööÄÄÄ0qâDÜÝÝ•y! C-[¶lÔ¯V«qvvV>‡   ÆÏÈ‘#­~Bœ££#­[·&<<¼Ñ=Ûp/µjÕ ;;;üüüˆŠŠRΪpppPâéèèHÿþý?~|Û“Q›]w²ZMÇŽéÖ­öööØØØĘ1cˆŽŽ&<<œ¨¨(e‚á„ >^9-99™¬¬,ªªªˆ¥E‹ʵõõõ¤¤¤páÂL&mÛ¶¥}ûöÊ’@“Éĉ'ÈÈÈÀl6N§NpttÄ`0G›6m¬zîÏñÉ'Ÿ`ooϬY³­‰vttTö·~ë­·øî»ï°±±Á`0ðè£rï½÷b±X3f -[¶D¯×“žžŽ 3gÎ䨱cddd““ÃÌ™3™2e <òÈ#èõzìíí),,¤¢¢‚Ù³g3jÔ¨»2áddd°ÿ~V¯^Ýh1;;;<<<0™LlÛ¶;v V«•ïÞüùóñööfÓ¦MìØ±ƒÁƒ“––F^^#GŽÄÉɉS§NqõêUذaz½ž¿ÿýï,[¶ŒqãÆ‘‘‘Áµk×èܹ3úÓŸðòò’Ìö;eõƒ: {%:tˆ¼¼Ë±cÇ”÷ãããyçwšl°ðŸb±Xøúë¯ùøã©««#99™åË—óÎ;ï°hÑ¢&;Í>}š pìØ1NŸ>ͳÏ>Ë”õ»ÿûßyî¹çHHH 99Y‰GÃúÑo¿ý–÷Þ{ï®þ’×ÕÕ‘––FË–-oºEmÃÞ ñññ¬X±‚·ß~›|—_~™ääd¥bi4yôÑGY»v-666,[¶Œ!C†°fÍzè!>øàrss•r333™5k6l`„ ¼ùæ›Íz—­;qíÚ5€[®­ÏËËcõêÕ :”·ß~›E‹‘Àßþö7åšÒÒRúôéêU«xøá‡Y¹r%×®]céÒ¥¬X±‚äädŽ?®\_UUE‹-xã7X²d ÍêÙ%¤…~ÛÉüøñãdggóè£*Û«Ö××síÚ5nܸZ­ÆÓÓSYJc4)((PÎfvqqÁÓÓ­VKqq1ß}÷jµš¤¤$ñõõ¥  OOOeÉSyy9eee„„„`±XHMMÅÍÍÊÊJå¤/FCAA555ØÚÚâãã£üùššŠŠŠ¨©©A­Vãââ‚ÏM[.}ôaaaNVspp`áÂ…ÿª•ýÿd­VËСC¹çž{”÷Ÿÿüg6oÞÌÔ©SÑh4¬_¿žÀÀ@–/_ŽN§cýúõ¼þúëÊ2½Gy„#F0bĺwïþÿL«ªªØ¾};cÆŒÁÝÝggg¶nÝÊõë×yðÁ›Äè7Þ k×®<ûì³¼óÎ;¼üòË 4­VËæÍ›:t(O?ý4*•ŠíÛ·³}ûvî½÷^üýý™8q"?ü0÷ß¿²óÖݦá‘[-«+//çĉŒ3†: R©˜8q"«V­"!!6mÚ`kkË€hß¾½Ò+T]]MÿþýQ©T 4ˆµk×R\\¬ô >œŽ;¢Õj™>}:6l !!ÐÐл.Æ&“ FsËÞ‡¸¸8ôz=ãÆÃÛÛú÷ïÏþýûyüñÇï÷[2djµšÞ½{ãî…ˆŸŸÉÉÉ 6 ø~)gý¾¾¾ôêÕ‹ƒòÐCý®’صk×øàƒøú믩¨¨ M›6<óÌ378¼wï^Þ{ï=JKKQ©TtéÒ…Gy„V­Z¡R©¨ªªâý÷ßg÷îݘÍfzöìɼyó¬f ¿U'ôÔÔT¶nÝJqq1ùË_ˆŠŠbÙ²eìÛ·?þ•J…Á`ÀÓÓ“—^z‰€€rrrxõÕW©ªªÂh4¢Õj™:u*T¶b,(( ++‹öíÛ3iÒ$üq-Z¤,aúì³Ïغu+‡¦¾¾žèèh†Š­­-...̘1ƒ#GŽpðàAìì쨭­¥k×®<þøã899±eËöîÝ‹ƒƒ†ððp–,YÒä £ÑÈxî¹ç½×°Y|¿“\tt´26Ùp]ÃIL%%%Êšw“ÉÄÉ“'yúé§•´W¯^üå/¡¢¢WWWÜÜÜ ãØ±ctéÒå?>æyõêUrrr”SÙlmm•.Ë›ÍNMMe„ Je©M›6dgg“••Exx8!!!+›ñàçç§ì™ßªU+ùì³Ïxæ™gîÊž­­-ÁÁÁœ>}ƒÁÐ伓ÉDmmm££M5 :NéÉÐjµØÙÙ) K«Õâää¤ülccƒÙlnÔCöÃñ\[[[´Zm³ÛYë×âíí­ìy«Šª­­­òýT©T888(Cg õ†{\¥Raoo¯ 5¬}n8§á3hX Ñh°³³k´ùïÁ`àÕW_¥°° àëëKaaá-·âõööfΜ9øûûSUUÅ믿Ί+Xµjz½ž>úˆ>úˆ—_~{{{^{í5Þ|óMå$GIè¿¡víÚ1{öl.\¸ÀÒ¥Ki×®ééé¬[·ŽiÓ¦1dÈ*++Y²d ›6m⥗^ÂÓÓSÙM¬¾¾žÝ»w³}ûvzõêÅÀéܹ3]»vå©§žB«ÕRZZª´rnåÆèõzæÌ™ƒ»»;‡fÛ¶m¬^½š°°0233yþùçiÓ¦ ±±±üýïgüøñŒ5ŠúúzªªªnÚzÊÌ̤ªªªÑNQŒ1‚²²2e¯ô©S§2sæL%ù&$$°fÍ Q©T¼òÊ+¨ÕjnܸAMMM£­ÝÝݱµµ¥  WWW¥õ•œœLUUÕ/žðK:u ‚‚‚~ÖõNNNö¿~ý:ÕÕÕäääÁÂ… ™;w.“&MB«Õ¢Õjyî¹ç”•JEûöí9{ö,F£ñ®8ÒóÇT*÷Þ{/»wïfß¾}ƱÍf3¹¹¹„„„púôixà4 ………”””ø‹ïÙ³g©««ÃÞޞ˗/c4•|î6tîÜ™-[¶«lâb±XÈÉÉ!$$„ÂÂB®^½JÇŽ©®®&%%…–-[þâßYZZÊ•+WèÖ­åå夥¥ñ»Jèñññ9r„mÛ¶)òüÔ’Þ÷:Ž;–·ß~›ÊÊJL&dìØ±ÄÆÆ0{ölž{î9zè!«X*lÕ ½aW0Fƒ‹‹ ...$$$`4ñöö&++ øþÌì#GŽ(3Lß~ûmΟ?Omm-ÔÔÔPSS£$7åßЊ»»;ÿó?ÿCxx8&“‰cÇŽˆF£!33£ÑH@@§N"66–ÐÐPöíÛ‡F£¡S§N„„„Ü´õ™]£·úõë§´ÈÍf3‡fñâÅôêÕ‹N:ÎܹsÉÊÊbË–-lݺ•:(•’v 6l[ûÃ1s???NŸ>MMMÍ<¡geeáä䤴¸ÿ‡zˆíÛ·ãææ†ýë_•V ÑhdûöíÔ××óøããààÀæÍ›ùôÓOiÛ¶­R‹÷óóãäÉ“TUUÝòˆVk×§O.\ÈÊ•+9zô(QQQTVVGÏž=™4i‹-â…^ 00}ûö1xð`ú÷ïߨëþv¶¯½öÞÞÞ|öÙg 4H™è8uêTyñÅ­¢åóïxzz²xñb^xáî¿ÿ~bccqppàÂ… ”––²xñbºwï΋/¾È=÷ÜCJJ —.]bÆ ¿8¾%%%üùÏ&!!óçÏ“‘‘Á‚ صkÿû¿ÿˬ~ËןÒ0Aø“O>Qæ >œ3fÜò»\YYÉ¥K—(--åý÷ßgĈx{{sõêU233™;w®rmÃÐRnn®$ôÿ†ššrrrزeK£nêþýû£V«yûí·ÉÎÎæÕW_U×+¯¼rË/ÓÍÆÄ~ØíÕÐØ0ÙÈd2a0HNNfݺuÊiß¾=z½ž¥K—ràÀùä“OðóócݺuM’gàw³ýp Çž={R]]ݨ«O¯×Ó¥Kºt邟Ÿ³fÍ"--MÙŠ²a‚@YYuuufõ7œfôߨC§Óa2™”“¢þ)S¦`ggDZcǰ³³#&&†ôôtÂÂÂÈÎÎfçά]»–˜˜¥E?{ölrss•„n0šÄõn£V«™:u*;v䨱c¤¦¦âààÀøñãª,½R©TôèÑwwwJJJ¨­­eøðáL™2EéÑ8räÿüç?Y°`A“Uâ—Ñét 4ˆÖ­[KBÿ´lÙ’áÇßÕÃD?‡§§' ¸¸˜€€ÎŸ?ÏöíÛ¹ï¾ûˆÅ××\\\”³***0 ääü_;w‹j!pü_,v7q4¸‹kÐr’Éä 4؃èÌî@¬º‘+˜N0D8·7úxï‚¿% ÃÀ|0/º®CkM†X–…RоïB ”¢®k„Að±~~¹ÿs˲eQ}­Ýé8’$Á÷}¤”RŒµÖÌóLÛ¶TUõqrq—mÛHÓÏóR>Éöx|¡iš(Ë’u]1Mó:Šû¹†<Ï“¢(Ç‘}ß1 Û¶‰ã×u¯f©i†a@kã8äyþ«uèNo-JZ雉.-IEND®B`‚pymvpa2-2.2.0/doc/source/pics/ex_topo_plot.pdf000066400000000000000000000700441202542755000213310ustar00rootroot00000000000000%PDF-1.4 %¬Ü «º 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /CreationDate (D:20081113011300-04'00') /Producer (matplotlib pdf backend) /Creator (matplotlib 0.98.1, http://matplotlib.sf.net) >> endobj 3 0 obj << /Count 1 /Kids [ 4 0 R ] /Type /Pages >> endobj 4 0 obj << /Contents 5 0 R /Type /Page /Resources 10 0 R /Parent 3 0 R /MediaBox [ 0 0 576 319.5 ] >> endobj 10 0 obj << /Pattern 8 0 R /XObject 9 0 R /Font 6 0 R /ExtGState 7 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] >> endobj 5 0 obj << /Filter /FlateDecode /Length 11 0 R >> stream xœ­™Ë®f7…ç~Š=„Á1¾UÙžF‘ZDb1àbÒ ‚I^Ÿoù?AgÛ»9¡“ô%Þ¶ËU«V­ª.×W¾þÎ_BºÒõÓeÝùõëúµæß§¿c-|þyÕ­çV†~¾ZoêœÕòUXœ£§\øyûÓ¿þvýåú™c~à¿/Tj[Çê×Z¯Ö®¿þtýáùúþ×áÇë7_õ;ûýõ˕—PJ‹µŽ”g³Ô®ÜRÓZkµNãí¥ Öëð”‡ç+×{N£÷byðîRsìVkj)·ÉúŒ#·V,Õ2ñOˆi´Þ¸žåfXêe¤TzYÛ±nz¯#Wž™mÆê|ìæÅ×öË,Éj¯}\ÙG Cr/íýv>ž©˜ »rÏÜŽ+’Nc{!FØ:[MÖY/±ÎR1Å[×þíu¬ÉøQúÚï±æZúì-c~O±¥2SÜu?ëÙ½;ëÜï3NÇ3µ§—ùÅØPy,æëüûhfÝòûýwïwÌm3×ôºßt›

    Z,UŽto˵%ÇÊOzž÷¾©i—jEë´ŽZªÉöYyJ6ÞûòMîËöá^{ yöèNðlËk½El˜mdP•ð­ãª9m®·å'~˜Î[ FqâÆ„UyQÒˆzÖÖŠöϨǘ¢·ÌcCÏÎÞTF%WB™Pû:>)ü!¬íÙãL¼åÚpËYêØ‘<ï¤Ýj÷œ”y–Ö݇ÕëH¹Áa  ¦ Lî;ìT±«MqížðjoŒQ¡“/:ï³c T¸³M7òrÅ#e†ƒ¬€{ ÀMép':X·Ãq";IRÇìœLŸœ»8ß ìE_|Þ§'bÑá`xÒŒßq—‚³×‡Ë’à Š)[y ,7|@°B{qºÜê pñQÚ›S³\úÂü^uuí|Ëq>κº=k+Ë»»ïU}[çòÇXr·G² ¨ïHànroHRœ¾ãˆTîr˜ä“„Ô8(nöNzË¥7“Ç„‡»`¹>ç‘ð0"Iž3{rN0Ã褺gž( ¡ ^ÉsKÛ 0ÑÏ0*àžóìN±’¸œÖÖî;er‹ò0wÎEmò$öÊïtx§+ìÌò%™?jØÙîâ•€}B¬£ûI–£ã`~ƒ—Q\_ÃkåAÒEÆÇIÕäíl|nE…áNô ÏH¡Ð׳Á%ÌÚ©ò¸˜Unˆ¹±x´ÁëD€«Éø@ÉÎÔ¼\ê8ŠÐÅ2—¸aûXËV±iC‰H·ÝòŠ‘nÉàÎÒP¶ÇÝ·¹¶úº={+Ï»ÓÂVÝ7—oâ`XØ´Å-܇4ÙÁ6es í¦‹ †MW8¿Ë²#MÂ&ëŽ$»ËÂ#E7Uy$ø]•nü°ößDíF.wI|íÔvI½3Û†?ÿ?š¯ÕçE ¿¼º½W¯'‰;ÎC'$ F}L«õ«üS¢üÏço"ý$/QyLŠé×öðùëëL¤ÜåËÐ,€м}ûtxåÛ'ǃèÁCÉ0ÄnŠeäÑá­gSðò Þ’úNWôáäçw®ÏÅŽ`¾_oJSy*öôýëó '0¹þ 7ÎH±"ŒbG¦¢+퇷§Ó „t¥s.^ù_O'"¼o‡î€JZVê×&Ïï\bŠÄ˜¸ë?¿­¯QÊŠ aÉbL²Q‰§=mXß7Ò§ªê}Æ7¸ŠÌô—¸ÄH'ƒfýT*\¤>$ΟþúœìçÓ l–ª…p>”Ù}ãpÞ9EzOŸÇÓÂNù ^]¬mdîí †o–¡Õ†b´Zìýµ¾“öƒ'“ê=L¥°ôgØ~8±ûú#ž}ööÒ¨¸¼¨¹¨XÃV(³üd±ÖQt ˆ˜›?ž"/hPzлM‘7u£äo_„ñx8i¯9’å[ =ž-ÃÑ€‡AÞ¨!Tª>Ðñ·Ãß'mYµÜüúùdûpLõxÔ¯c½òa¬÷/[s½ ²b«)ít¾H:›VÖ¸Bbj¦ K¢wÄK¨é¥ã$:•\ªЉtT£yµ>W%¤D®R=Uæ‘#4;=U£©}ét¹RCmÕñ`jÉ•x N“/º" Š<³¾ö«´Bá¹¼:/©ŽNu¯ÉšÑ²;ªv"›$CH§ÇPdÆêeÒ2˜æÖ%É´N®TµÃ×þûûX'Þôy„}ÝÀ¨"´G^ãu÷¥%{ÙÏ:í-Óh”µÎ ‡¿T³Ihð=Í*ây >údG+w¾îe®ñE[½!] s{Ø\Ó*Ä¿©²¤e~æy8¼/YG¤ó<¤ÐXÝ!%9JðÙ’´K´ÑˆãNOËzDXói$eÑ–ÒQù]ªÒÄéžW»B½Î¢Íƒ—¥±L§ñEFã" ‰F¿æe<õÆo€²DÓ\‚ Q'•Õ4Ybcw±5„Å­ÈÈSΣXDšÔ¼úŽ5ãENMðuS—¬okøÔˆçK2²µÞ%I[€˜‡&‰;Þð%Q›¦ àgš½Ñ… “úÝ%îq¬°9¥35Þ»Õ O/x‡ÀZ±/iö&ê¨êvWÃEN è9 MÏƒÑ œŸpæ@9j?Ià:r£H2˜š”9VcÃc"Éš*hÊ»MÍÕ8È—ýÔô‰€0U3"ë±ÀTðj_£Q­XTÃ=ÜÃmëij>–ûåo%3òGÄÜ¥y›`LíÕvHƸ ,‡ýRðI#½=\Ÿ4ô¦Bʽ‡ù*^4äN¯çë+XW¿¢ÿçíôVD ¼ÔÚŽÃûH•mSKKªÑ«¢ >†=Öäw>õ[#7Ê&&—=U£•®aÕ¬žè¤X%îÔ‚è6È<›ZZÙ±¡þ£™teë\Ù±e,".i›Ïì«RMËõ41v$oÅ$Ƙ„g™OS¦æQêŽ6hç –aEÊ,ÿPrÂA;t‘KËÒÐᎃ¶®ª9j Û©Ûá ½*gª3Ä<Ÿm²NÑu ²ÉÂκZ®“Þ8k2v6ëUÃ%µ‹¥rýNúUsdj B¡k`· Ö“¦–ÀÜ5ÛkNE)Ðtãq–šÅú2iË3€GÍÓ~PÒ4ýªGÉdsÉí¢¶l„£äÞ_w”ìÃù÷’¿¯ï’`nPsÜD¼ÑNpp?Ü—j³ØZs'î™JËwì}D¦¦VECùÊíÀuÐÐëU„(¡/ÜßòBƒI l™¯¼¾åUP/@RºæÂe™wÏK5i’Œ>5è<òZ¼DŽÑù=ío´@ £v¢=lÍ%vVïHsê Õ' ñwˆû+¥ï”6ôwžšÒy2âHô«I“²þD¨}DM?P(\·èú‡N% 5,>ÉœW@$YŸº*Å­ÐȪ±â‘¨²U(zì"–¬ºÆøÍø0£»ÖÅEÌH€ù‘]sú©<‚ÌY¦X¦+ÚG»+á@ûý¥S>wCÛ ü¨(+çÝ÷zX~¯ÀÛ«ïåûðØ­ú‡ÃÝwñ°kÓ·P-ߤË”Mù|DÙ©›vˆn²kø®ÚŽüØTßž_»j<òs{~ïšõà‡MòîôrHæžvɽÑÛ'Óšý…©ÎÛ endstream endobj 11 0 obj 3090 endobj 6 0 obj << >> endobj 7 0 obj << >> endobj 8 0 obj << >> endobj 9 0 obj << /I1 12 0 R /I2 14 0 R /M0 13 0 R >> endobj 15 0 obj << /Width 234 /ColorSpace /DeviceGray /Height 234 /Filter /FlateDecode /Subtype /Image /Length 16 0 R /Type /XObject /BitsPerComponent 8 >> stream xœíÝyLYÀqÂQ@QèÔÕèY)°®ñ,—² ‹\â&MV%@)ø·Ñ%Á3Ê!W[ {Ä5f ŠPÚ⑨›è‰‚µÜl¹Ah ìè€a·«í¼y³òûü?oæ‡:SïYXðy²¶s¢ËÎ÷Åš%¬ldŠž1y8î‹ý$–Ó¤´KËÃgÂ}ñÁšïI9Y;F³T¯øqú˜âÿsÛnL«¤(ZŒ4K'^ÖO“±Éwmñ¿(ÆIš¡SS“Æéc®ìsÂ@ƒ áuêí@SÎD“cø lqÇ|Ó±T*­PjÍ(Õª*É1$ÛàŽù E®’Æéþtþãø›!®ZŒ;æ=ì~ÁÁÁ1ç™Ñ8Ûã ±äxþËy¸ÃL8‹²ŠŠŠÊUm •¶«+ÈñŽ.ÂfÂ=±j```ðµ¡RÃëAr¼ÛÉ|ÜaÿÄ#|ãòž2Ô8[cÁ^_—n`‘¤\݉ ´«¡";ÈwÞ,‚ä*ݰA©a¸÷ö‘/qçÍàñ½ãòdRš ã}Ü‘o- Ì”©»•v7Ȳ‚–âŽ|kå‘êîA·.E?Ø]“ºs£#ß+ ¶° Y&åÅ¥xò<ëùŽØJÝB²rssKU݈K{ÔRò<Ù¡ØJ׊ë4M{ÿ8âR};yEæ:<™ŽîëJ_!nœ­µìûu8n`̲†^KûîJ%; ¥ž™uÚ>t¹¦ô}­ŠìõJ…9-,fR4¹P ¥ærXº*¶„©—núÚ¥ñ«—²û ̸’€d:eD9wþA)†ÊH(…R(…RŽ€RsXºù†ŸTàýúÈ”±>'"‚áǤyÂdY]Ëî´™|©(—3~ m®‰Q.§Ãß¼ÿl='ÖèP;°…@Xjãè%eñ=SåÑÎN6K-æÌZ:PÊ:6J}Å7žtàýBIßù´*Ëy)±ý‡‹JÌkÓ©óï@¿¸¢ÝB·)Þõuò8·…öÈKI>7;Ù_þ”¢ïj¬’°²†$‰¿=1O‰m]PU~’ˆ`©ÔÞESŠm­WYœ€…¥2ßñJ¿ÙÔÅþ <ÞÝTéÍ^&ÉcGr^=†5™U)"v÷Kâ¹®Œ.ne½´½4våÖ7Kš#k§CégYê)®ÑèXÝ·B§©•xa(uJ/VëX,ím(ÉÁ±QƒÛš¸b ‹¥ÚÒ„µn˜6HZ“^ÓÜܬíEý1ÞÛJž§VŒiÏ ’[°8''§X‰n 3Jª„ËõòàÌÆ ‚¤=H6ÔõT§ ß΀>—RU‚ÒNµ,SÄ¥­™íùÞ1Ÿ (ý3/ևϙ[—â~øºN§ëcl¿WýH9^U"Çö)&9oÈê™z=oSÊÈñ$"îí=mOøŠD¢¨³*}|~9ž`å{ÝO°hÿÕ¡¡¡a³öÚ6Œ “cü~KD¦œ6§—””Èæì¡©UÊÉ12¶ÎÇóA6|ahhèîÜ»f”Þ?ý9†@¹Sâ~£èéOh³Æç[—žZíשrJm3ݟ؉–ºécÒ¾axj=BVÂpÊñ;tgUêëNLãÇG³sZ»J‡&è•}‹ûbÍâ}Xö=åIp_¬Y–mˆˆ¢g·ï¸/Ö,–ó¬èš‡dª.0îo4Ïå endstream endobj 16 0 obj 1862 endobj 12 0 obj << /SMask 15 0 R /Width 234 /ColorSpace /DeviceRGB /Height 234 /Filter /FlateDecode /Subtype /Image /Length 17 0 R /Type /XObject /BitsPerComponent 8 >> stream xœí]XT×ÖÝÓªˆ"öÑh4ÆÄMÑ“çÂÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀÀ`x¨T*™LÑÜ,7é_§ïÁЧ¡SâäÉ K—z™šn0Åb{{¯ððs†> 5´ªÞ%K ©ÞE‹¶‡‡Ÿÿ£·gèÓÆ``ÐëraaQrrFhèÙßsýú½Ó§»Qý]Šu@nB:ŠDŽÓ¦mþæ›C¡¡:ð|hè9úÞ’’Ò Š˜¯xœ!—ËÒ6o²³Ûö{N›æ6hÐ&ào‹·:é:88óù.n™:ÕÏÎî Ý;»}vv{íìvÚÙùÚÙm÷ð¼t)U&“ú2 ­­­‡G¾ýö¡pãï)8ðx§[ؤÓ-€ €€ç-ì ý…ƒBá~¡>÷ =„B‡¹s·üòË©ææfCŸB†¿ …‚^m©O †VÇè5kv?ÿ¼Ëß(ÑßûG½bÝ6lðØ °   DÁä%°JKeð^ ¼T #ó Û50‹£ƒÀséÝÛaÒ$Wê…Ú?¯““tt<½âz(þc—øú›9Ó£K—:ZX8sŃªW']ê¶ìÀÔ,  à"@À €b€à«¡§žÖÂKXG`+ÍZpׂ‹Vªa†úÉ¡ë-09|wú¹è§£Ÿ±ýó¾ü²»·wHaa‘¡‡‚áÏ‚^( ŠRS¯ž^½ÚoäH'ƒú„ß7ŒºÛÑ-P—õ«[€[À+£Z0kƒnž"œtí|M¥«…£ZAˆR|¬Í,´ÙØK*úZÎ[ †—J`¬ë`¶ øÞ˜Ò/Ȧ#W­ò ˆ¤gƒš(f!~TWWÇÄ$Мúz%íÙÓ€>¡£tÛ ƒ®¶°¥„ÒHȸP ü°h…ÞJÎëN'ð5rhà’ÚXÒÚ5£¦×µânq•¦¡ü]2Þµ°,^¾ OÇCïHA+B=‰“Ãĉ. nsvö?sæRee•¡‡áÿ 2ôrI C·nff"ÑC¢Þv¯«3 ûõQW'Ý+wÊš@ †xR “¼Kàsn4«†»Jó’º^µ…äÙ}ëò,K*„w[xQRÞV)¬’«eðä50>>dÍ ©— gÀÊŠ³Û·çåÝ3ôà0ükÐËbaaqFÆ5j>üÐ^4 ­ØŽÜ„óîXóÃØH½îq€3—.sÒå•°ŒeÐ…À/xƒæhì%ÂH…ør«YE}߆üQ²ËS´ç'(ãG·¦ kȘ}§ODaŸ Ë¯ŠŒçßáO¸Câ¡{ˆè·c·.¶iåJßÇ#ÓÓ¯R[ÕÚÚjèáb¸•4¿vs;¼x±5 ô¢ihÅþF½ºÀë…Š:p+c±˜¦Ýæ¢.¿L©×UAÏxÀbßð&JLZ­rªz7<Ý–1C=ŸÌW¼£|»-èµò“Sn\›6$8«»ç]á…ð<}̨9 àO3Ä=8 AÏŒ‹Kµåå†.†û““G/ޝ¾êޣͻ7ŠDWlG:b²¶ëcûÑî†cqL PÐȆ®诅Q˜©½×îœ'Y }Ê žT]}Q³@ëÿñüJëô­vãšï?W¸/–îy£)tBn€ø£#Íð½ fJÁª à4 ¿Ô>YX8Ð3óÒKn[·¹};ÇÐÃõX£¥¥¥°°èòå줤tƒ‚¢èÅqذ‡Ê0lÔ738u¼4Ã"C<ÚÝ\àW‚@ b= <‰³ÿ@ÏðZ8©á¥«»åV ©»5^›ø ]I|~"<Èç~dÅAòžyß•|ù­öçå »gåž•šÕ? °Ûúã×¥‚qeü¡)<ë£`¾ ÄÛ€ïq¥ûŽ ãõ¢ùwyã2¡ÿY°: ¢-ÖÖŽ“&¹-YâÕ~Þœý##c‹ŠŠ =¤²³o¹»~ñE·6騻÷&KËFF—ë參«ñ¶^]²–€j÷€WFÍ`ªàª»Ã L!0—Àj?ÓÀKx'Õ¼t9¿TÚ».\›ä5rbñû‘|¿“,'³%dì=Ò³PÛ£@csOÓ+M5&LñºOÛª/=fUê_”c~¾Jì\ËÿGŒÎ…¾Ñ`ì'9ZZ:ÒsÕ~Þ¦Ms£Éµk7 =¤>许¸„žjÿlû÷7Hoؤ^G ¼ž¯.ð¦r—KÖšÀ¤ ºª 1^Á¹‰/Ññ$ü³Jáu©¸®a`ËíqsIð'd‹ Yû ±=§žv]ñD]›isƒQK…¨µ@XRÐãrѨ˜’;«ß_Óì:Gyü¹ü¤'ŽßìñC…ù¢{â—’ø#ŽA¯ýÐe7ˆ|±áNß^ß¾K—z:tŠžU™…øë@O/5 4VÐN“h+«‡ª°ð{ê eº|m'ÀA¬Ä¶;Þ<€ÈÀ\Éx˜@`¥Öã¤pVxIfœÛdÑZ5Lž5M³€ü²–¸l%%ÿˆ—?ŸÓ8°¥J,»-' äü†SæÅQ½oÆ K›Xø®gÛg_Ôx¼}õèøˆ”A;®u_Ÿiô^*LM€'ÎE˜]TÀ]»:¼ð‚‹®Á2"âbA›Vþ«põêu*]júõÛDOûCVXø—êÕ5@za×®Î6œÅRÃulfÀ¹ K ôÕr“ÂÓ¼ùÚüï¸Vœ"µ(®í®.¥IU±˜ìýŽüD“µSdfZë3E}¹BÍ%žæ0OãÂS: Û<Ä-ÛÌ*Žõ¸sepZóè`Å?~lúáíÊàñW„Þ0q-‡÷+arX_Ãb½l‰虤˜ZêigèA~d‘’ryݺ½ƒ=䆡£zuSÃÞ8C¡kÜí` „Z°"0€Àhl$›Oà#œ¡ØEx'´Æé­–eÕ6¤ð’ò _FvþH6ì!K¢ÈK—›F•÷T] Û|ʕк ê>„jae iEªefî¨Àòù?6ý¸¸ôÀŒÔsÃŽß±ö,1_Q$œzgƒÍy0 ð·Ï™z`šÄ%%¥zYtNõz¢z÷áÔð € ÔÛ B©w šÞ— , ð MöДMkœAÕ[Õ“ÜK’_'ÇiÊö3ùv±&Ó¯6Ž,+詾" ¡@\,‡æyP4®M‡sù…Õ:šì“zþÙ“wçøÞ[ýÕ ÷yé!ÏGÅÞ•m¶¡•Âä[Ð7 Ä1 þV¦Þ¿V½>¨^]Êvñ×ZY»z»D`,¦lïa¯#7;Ì‹Ðg¶t-¯ìEòŸ%IºJ¯ùæYx–L»VÿTyž:M@üd>TMƒË£àTo¸8€w{4¿iŠ@ºÜ¸Î«kù¥^wÆÚþ\õâCÏg&t.ß6XÖ O׃yˆÏ‚`'Sï_„ÖÖÖòòŠ;wrƒ‚¢–/÷6h{ùÿ{©sHÁ&Þ€fjÀJûkì}éw±7c¯öÞ8mòœ_Õ»þŸê͵Q§ H @Þ†ò 2‚ Ò®uº ˜ ª/@ÕIÝSsÆ5¾ëвÁ¶"htî5ë ÕæîM¢ùrÞØzš =B{õ]²bÏáÀèÛ·séÙf½ ……EÑÑñÛ¶¯\é;y²+Í2 -Ë?¯^ÝòŸíXìÕuæÄàê‰l€B®] K5—µÀ¬m üD`G{ÖVc­.£I™­ ¿Ï94Œ,Ëï©J ?y*_€Œ&†(dC‘ÔéP;@Ëaó{‰ӊLJ4Ìs¨ùÞ®âðÄ› C#o[z×ò×6òæçó^Ȱ5éõ#|txëÖ°3gYñáA&Âîî‡_yÅ}èPGkk‡‡lJâß«·cÅìP‡ŠÙUníÔr3 %·†b(οE` ØœsTk”ÔfVPg¥(¥JŸ©9©ËÚvë²¶†§KïõTe H0Ÿ,€ê‰puœC4$¸!‚¢¾P?”K@å(l 5«½ÙízõS¡ sZ¾YZ¿wʽ‹½®#šù.õ<»ÑÄ|ëññCÆ¿ôÒ—ôtV|øŸ •J++«rsóO/]êÕ³gg±»ítèБ®›&Ö·–e`Co%ð[ÀTÝÔ\kÙ8³ØãJ OZQ¬Ì$‡«÷>)¿ú’*Êžìý–ü¬«˜¥7=S\Ü›«9„q² ê_…»OC¢5$v…ÌnpÓ Ÿ„º—@¹´<õ1¾ò†°¬¦W\Ë”½ª¥_«Þ…m¾nšSgt´•ÿ­ Þ’Âø\èu©Gï`û%þ1ôÌÓóÏVdüw ¯˜˜x/¯£«Vq†¡Kƒ«ñ¿SïïçÚtÝe¸~WâVœ° ¿–|ßù§õD)EYR㺆!-7§(.Ì'kp¶"„¼•Üú\AU?e¾\² ÈWк*fAÎ8Ž…¡l:Ô¾­Ÿ‚Ú T¿¤ñÆ E9-ƒÎÊfìV/ûF³iž2hŒ,Õ¦´Øâ\È[Ÿ(àõ*xòŽEß„‰ÓCW®ؾýØ™3ñ÷îZiiWÜÜ8Ã0|¸£ÍÃ?7ñ/Õ«Û'ÇË{õë)ÎüÓ<ðª@ØF ®KG7Ýö:å¾#àE­¯šŸ¦–µõ«Ï{®-ñMò1ÙêBÖùqòIy••BmpæÁTk m4Í…¦w¡e)H?ùO òm((Dõw,Jz\UŽˆPÏÜ¡}ÿ[íF;ÍÁIꋃënõÈ,3•‚›–Éàù&Q¿ÂCc‡üåå—½œƒRS¯Z ôRU]]MïáÑ‹{uïÞYr´©^]—Žûýí‘XõÕÕÍJ€Wǹ_±zxײÙbs¯ nA/GÙ³¢xtKÆ+$rÙõùa7YzFùòué“ÍfòÛ"Õ9æh·R‡Ú¯A³§vã«üŠ ‘,F,Í0©ÍíZPÝ7K>ü"™HÞÙL>]C\hý'k.>ÑtÃæF©It+͹býëZ¹{ŒÃ¬¬¼.ÜEÇ‚Ž³ôRE ƒOȇúMšäbnnpþïêuî¿­é1ú}ò€‡îW¤ávª…ñú𻞀/×ß ™êîù•Ã꯿ ½ô ü‚¸{’ÏŽ¨ç%(ž/hë[]fÕœm¢Œå«#A šP ZO‰/˜U§X•f÷Ì¿7 »rDbó„Óª—ýÉ|*ÝoȦ%Ú=¯¨"GÉ3zUX^®1:)ƒíØÛ6ƒÀ )ô¸&gÌÌöNœè»jÕnoïèèøüüCK£ %岫kÀ«¯ºáH3µ‡cYåÿ¨^Wýž9»pã‘Ë‚n¢ûmŠkxè£åÔ§¢ûýÃo€bµ]nÔõ«Ê©ÍœIN½OvüH¾ß¥]vJ33S5*·¥_eU×¶"”·@•Ò›¢º<ó²ëܪþ×êF$7n›¬œ»K³Ì…¬YKœ—’ݯkž•'õmÉ5/­1–´Ž*ÁÀJTïPØä‚iœPdc³kĈÍÔ¼99ù''gZôkNÓ´‡¾ì?R¯®Wg›>wÓ¹ßýjbl6ãËÀT Ý4ÐçÝ^%°À7|„Ó”fëÂòŠ»Õqïh?'®dÍAbw†LOU¹­XÙfYÛj^Ûb^×l^.íž§è—­&!ccÈ‹¡äýdÑòÉäûOÈæ…Ú³5áñCšnt­ªÞm埗óª¹æŠe^¤ê•ƒM·×—`Øjié°b…OTTœ¡¥Ñ ð©wãýæas‡U™Á§pÞMW|(âܯQ ˜)¹‰ã'0}›MàlSßCŒNË,®5t¯©Ù|åeyÔ"í~j\©€÷‘EÇ4oF«¦')žM‘å(¯x!F5ý„v6µ¸Ô!SÝn$ßÒ×Ó M•ÿ’2jœ,yHà ›’bÓÛ üd9ÿ˜Šç¥áöê±Åšó@X—€Éeü~Ñ/šSïŸÇ#§ÞöuwýÂ̽˜¾…â’É8¬ýâ>$‚:ÉÀ„@/\àö<6L~BÀ™Ô¢8¹q¾´å½g[$³µ'ìÉ>j€7‘o¶h?Ù©Yæ¯Y ~7@=ß_½`ŸÚÞWóÁò©#Y÷-ÙH5Õí|ð91I}ñ©¶Ë}ó,Ë+Mo6 “e¼SjÞ lÒrFå-\ÎÜOÝ*Àø®Ö§&LJ©÷ÿ…\.ojjªªª>³x1ý¾\xVÿپìw#á«  àáx§ñð lV#I¬rk†Vßž H˜©ŽX ñ_¥õ¦^O6þL¾ÝHÖÓǟȆïÈÏk‰Ë'dË âG}ÂÛÚ#³4§¦¨/ŒU¥<Ñvݦ¾È¤¼žWÆKVB„Îñ~… ð_!ÜŠæžJ°¬£»x] ïЯK‡… ·EÑÑilld\ÿE.$ïÙþé§;§Lq3Ôzþ2õ:þ.};¨ß J·U/îIB#0¯LZ¡«‚+ Ö·îÐ˺/SÄ,©ÙæVÙÊ;c2&Kcg©NýCstÖ1ÙCs±%dÏb²×Ž|‡¾IŽÍÔœš¦:;A?¦5mxcöÀÚœž¥%]rk²Zy‰Juá¶`my%®§›„¡tU‚i5s°“óÀNn-çÇïܽ;ìüù$6ñ{H$™îîAsæl}æ×>} ºÓã_$àöÚ¯n¯éÝú]øÂ1ÇãVf·WÂKÁ\ËepOc ›vQ˜Â4¡Õòv½MI逺œáòk£UiÏi¦óSÉ9Júd"‰OÇÔê+Cd7ú¶äÚÔu+­è’_oz½Å(EÆ?¯„0  ÒÕrëî?Âÿ ö¹Ñ¯Œ‰Œj@‡»Rs¾K(têÝÛiÌ××^ÛâꘔĊ¿EDDìò徿æN¦:]Kßä¦û7Kß©ïœ Óï •þkõÀS‚… z«a¸^ÑÂr­nÅ„H Â,¹IA“E}u÷æÒÞÒ{äwÉoRpì¯Èé­¸×CQÜUZnÖP#®jJù·¼L \"Iàݸâž~#>ÆâÆl´ÙO`«¼@ üàéÔkš\pÆÐÙÄÄyÉŸ“'/Z,P½>ææ:é>)ÛïÙÑoÑo&Ùq×ô É8‹‘ËílfR ] w+<#‡Y*X‚ <Ô¦ ‚ã*£óm&iMæWëºÞ¨¶¾SnSf[fWÖ=¯¢knµEn­Ùíqv³ð²”Ÿ,ç]PA¤B¸ÿË5°9ãlÈG(Ý× LFÇÛO à˹ùkÞ]t§0ÇtÓ ˜Z¦Þ ½zôyºÁ•ö©·ý&AºÚvý¾|ºíÓÃ1Ç¡r²8ó).³è×£å\7—mn Åþ´/Ÿã??F³± ·G{uû n95çD®µØ‚€‘„­À¯Å&n`±7;âöã»âÔ+8ôëçøÜs®sçnóðJJÊxÌoövnÑ"±øÑ.5ü{þæ¯î¨äÍ(f/œ›Û‰[ßœA#Jíhw7S Øh`°Fb[ÚTÔäëèÞÅ}!l1ÆÎÇÎÅ]zfbäDœP‰íĽ±È`J¸m%@É­³ãfLîbí.³È`¬Šxá[rÖ¿[G¡ÐÙÎÎ;4ô,Sïc¯Þûn®ví ã-xáÞ£_’| +E ®„.u`Ó ýÚ`ˆFh¹©ñ8ã0'éfè9LÄŸŽÁC ·©'J×LbÚ¸=„¡œ«uÐl‘ûšÄàRüîlÑemL½¿So‡oÒ˸]ÉíbÖ5HìÁƃ®"!¸â|0«€. `ÕÆ• z¡&iDF¸Ê£0{Ÿ<…‡ O ñÖš@WæL´ R •ëâ¢n.vNEÇ«Ûël?Î ºãÛpdêý ˜zÿÛël>u·0ÎÄPYÁuG€Zn k3–ºc"ÖKOT,´]Ð'àkG ƒ C)þªl¬r\Âl1‹xºÀëŒÝ©÷7@õz¡záIŠÿíîBç"‚06êÖ&ß¹¹îVY¢&·€©Ìe`©ä6VÕÑRÅMÛ™)¹Y`ê„rà·†Ü&nU>·/JGéFcÙ9¯æk§¸w":ÚÙy1õêջ鑞¤x êÕ ØC¿¯TûìýÜ\!ðKAX ¢Z0jãV0nãnBd,ç(–Qˆ¤\MŒßÄõñªÐ-bfVéžÀ_~KÛÐñv ,Ü; 7ÙÙmgêEõn‹™nÿ$]ô›RîÁzZ(^åu YX‘ÈÇXZ…~ ™Û¦¤8Ñ‚ÿ¤©µ¸Õ¨Û,/\ÇÒnJ‡¨«“î®ûK ÷Q(Ühg·íñT/ýÈ%%¥©©WÂÃϯ_¿oÚ4·Î¼xío¦“þÎò~ú{ëºÜ/â2ÏtŒÃ7Ñ ¢ŒË°’PŽOJñH!*ü.u¯`ÈMDƒÁü(ÚÝ=á;–î£@à0uªÛºu{ÃÂÎÓøóXMºi4š””ËÞÞ!‹û¼ø¢Ç AŽ|¾ÁUÑYؾLc›¾AÂ%w ÂPŠ©N³QŸ·0 ßÁÇÛ(ìë¥uºMºî9 à'ð÷øãïôÓß ½Ôpy¼:N›æ¾h‘·½½L¦0´¦þ>¨ÕjzÑY¸ÐÛÄÄY$¢Òe¥†?Ïö⃮OX×è~»ÔBPQ¨ÆX”q2Z‚´LÅ#ɸ #7rBålj Œç;Ú'×:”~K>ߎM·)››£ÕT½GF/XàÅç;³BÙÈöâC{‡·¾OØ-ëqTãitç1Çb€Õ1œÃŸžÆ²0”} ®Ý‹ÒõÒßeþßw«¶œ™zÿ´z;vø¸wèðÙƒÙÖaŒ¢Ç0ÿ:‰…µHªŽ‘¨Ø“øÓPÔí”ýlòÃ_¥ë(sÖK—©÷>0õ>¶wG´wøè‚ð^”â/(ã#¨ä³Ž!x$ƒmêö >äz£×Ýüoì.S/aê}0ü—-jÞ?wé[Ô¢øUÚÎCx|?š=øb_}ÈõÔ/£púƒÒ~ `¾×àbètìh!Ú¬kéñFAîÀP¼ ¹…ºwãñøÔíV}ÈuÕgjfÞóŸíL½Œÿ-Û-„®3Í£ƒŒ·ëé…’öÑËu;þTl=ðétû_Î×?–êÝÎç;ý›š ãŸãï,;6 ·s ÆØ­ød3þÔ½}¹%þßÿ~=ìc©ÞmXéeí ÿ»zÛ,ïÃîèÑÿR·ÿ}—Ôã§Þ3¨^ƒý£D‡ûͰ.ÿ;úÛÿ5€0õ2>8vôĹoS/ãƒãokü˜acêeü èðÇ|ˆ©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±ó’©—±óòñS/ÛC²³ó1ß}Z·/»=q'åã»óÿñãçìí}ÌÍÅb'¡íÞù(l¢cgjêLùX©W£Ñ¤¦^ñõ ]¶ÌwÆ Áƒ~;y¼ƒ9NŸî±d‰ÏÒ¥¾Õ½2µZmYYyFƵˆˆØ ¼ø"»Oq'#6Ó¦¹}ûíþS§.R>V÷)îvøÎÈÇùñÁÔÛÉÔ«Sog$S¯L½‘L½:0õv6r“Bá&;»íL½L½Ü$…PèhgçÅÔËÔÛÙÈÝKK(t¶³ófêMI¹¼uë‘ùó·¾ð‚Ë€ôKmðÑaüC ýû;>ÿ¼ë¼yÛ6o>’œœù˜«·¨¨8!!-0ðôÚµ»§Ms366ü1þŒ6N™âºf͞ÇOÓQ+,,6´| µZ­P(¤R)½ -^ìeffø1bü#š˜8,\¸=$$šŽ—\.§cghù<,ˆˆ¸¸|¹·¹¹áÇù—ß¡¯3’ªwɯ“'/Z,&õ¶ßç·¬“#SïáaR¯NºÎ¨°ÁߘÉÔûGHI¹ìéøÖ[›ÇsîÛ÷ï,>´ßÚQ_u*WW7=és<èÔ!·ß¨úÑ7t,úôq;ÖyÎOw÷ÃÉɆËCšÀÆÆJöï?ñù绦Nu55ýÛFg“^±.zÑzxlØŒO<î æGßTÐ;y²ëgŸíÜ·/üâÅä‚‚"C‹å¡ƒB¡hii©­­¥)-½Êj€J|A@À-”q*þ†ŒÞÁø–vãÛÐEàÎ:³la±qòd×?ôóñ ‰‰‰gsÿ襪ººšÚ­#GÎ/[v¬gÏsèH/êýçIŒ{:ÿù ^¾uå,oŒÌ¿)ÃêêcžhŽâ¥?-•b@=@€ @ žøJ(¹Gút”ã šQÌå“©†¯ 8fø(Úà]h!<ð/^Šÿ{ôظx1gè™§ç_*•Z—/ßôô<3kÖéaO^°é›`d™ ¦i`’ &ñ` âs :ÂHàŸÞq ƒ™ÛÅì…!×3¬cç8Ë¿ÂU¸Œå`ª3-˜° Ð…€%+]ñ9=B›0%`¢ã60jQ5J€—‡¡; Dfþøw·ëÃo§ñFFœn‡ s|õUw7·Ã× =슊JÏžMõöŽYýiäÔÙº¿}  OôΞw Û-èrL³Àè*ð/ë}i<¦Wgô!ú¸¾Ï%e¼0*ÓZ°l†îmÐS} 0ˆÀPONàI|†GãOékzi ‡¬d`ÞâzàW£åÈÁDO‚ß‹püîìÂøïÒ‰ °¥%gV­òõò:“@m›¡‡ý½xUVVåäÜ >–ðþš‹}§ÝƒQ­0²žjaÍ0  z5U#˜6€° í+õ…ú‹{ JK‚Aòç`y­`ÒV 襂j®…§ Œ%0À$“ L%0 §àz|á^ó¤†h Ÿ¬U`¦½Õp1þ­Tðq´ÞúYŒÎa€{÷Þ´l™wPPTNN^EE%3 )é××¹^4·^$0ÀKøHÕõ1*i„ì­åb©¬[ { t+†®y`™ ]r Kt©„.RÎô&0„À(ãQ¢/xÀ›æx—À| ðñ<ò&þôeÔóü[4&÷Aka¦“V.‹JApxèÌÃÑŠïÀ ‰Û”A*: à¸vítCò# N½›/ Z\‰j!åV"?ÀçvÞ&ðºfj`† ¦Êab ÑÂX¢[¼-ƒ7d0K/ËàU%ÌÒÀ ª‹¬@q~…ÿë'Ž\ ¸á¯õÄ'.œl$ðõ¾$ð~Sl1 Óà?Q c4ð„ ú(À² „­h$r21‡é¼íþvƒ+ö>éÒKÀÎk×îeêýëp5ûŽûÁ¸—¾¿2`Ci7·zÑ.%iyá~´Z£4Š‹CÛŒÛÄûeF~2ÑV¹ÐU!بäoPñ¿Ró>ÓÀj-|¤åäúŠÿ{T»»¶ka—†·WÃ;¨æ¨ù‡Õü@5ÿˆšwXÍó§¹ÁN-÷ÙŒbþ¿£1õ3ѽÐx>@7¦r0®Ñ=Ð,2x'0Û‡Em¦3/á mêÖ“îôéž®®—/gzY—”‰Íðü%î}ŸÄI;²»©çGk„‰rñ•Vóì†nW«ze”ôI)ê™Pj}±Âêlu—Óuf'µˆ¥‚rÞn%o—šÓáNû"¨…cÞIïŒRpN.Œ•%H9&J’¤¢ø6aœLpAÎQò"ÕpB G øØKÀ Ãò?ÀPü:¦{4³¬„^-еL Áè:ð%X>‰ó,ôáŽ^ÂÑ@梮••ãĉnË—ûzx>ǶhøëÐÚÚZRZ~ýVN`tÒûGD– ÒTâ;­æåuÝkKÔæŒ¨¹6ª:sxeÖàò[ýJs{u+(·È«1¹Ù ºÚÂK“ñ’•¯8 ’´¢åeªxY þÍ6áÝq~“iQý¯,®7.h4Êoæ´ nÊø×”¡…d-Ĉ&Nà0=è[0’¯B Ï¢^BO)¡ º6)uÂ÷°Y"'YÂpneßýiñ¿†~ýœ—-óñ÷ÈξURRÚÒÒbèA~ôqýnŽgTÜKWžH¸7âÊíÑw³Æ•¦O¨Oœ"??œD.>GâÇ’äQÚŒaškƒT·úJsm ­ªËº–UYÕYä7ZÜk´(l2/j´(­³¨¬éRSiÕPfÝ\ÜSZÐÎ-EÝšJ»6”w©®6/§’n6Ék5¾%5¾Öf”*Å)„g”ücjÞ Š© Y‹ÉÝÛ˜Ó"Ð_ ÖR¬ã•ÿðÒb"qVî`‡ie·¿«µÒÁÈÈÁÊÊ¡oßMƒ;ì4x0gÜ݃®]»aè!}ŒPRV%Iw?÷Mdì·1¾»pöó„Hû¬ãóªCÞ"!sIð<Hùmð›Úc³Õá¯("§Ic&6ÇNhHx¶6å™êÌ15—Ÿ®¹2ªöê¨úËO7f<Ý’6Fš:V&yV‘ÔαrÉè¶ÔQÒŒ§š¯o¸>´öö ªœþeù}‹ mòˬnW™gÕKZD1r^¨öØ‚©ß§Xý Ax‚†+ —ºÔƒIòôAø,–Ô‚ÐHìÀ‰9Ï¿>¡ã‚­µµãäɮ˗û¬[·wݺ}”nnÔ0—zH#P Q\ZvõÖ”¬ë)ÙÙ”aÉ±Ž ‡WìYBvH¼¾ n_ǯ‰ÓWZ§5Z×OÕ›W©¼–+wØ+öÙÊüß‘™+ yS:G6G~ü EèÊÐ7TÇÞT‡¼¥9ÚÎ7Ô¡¯«Â^SxE9C=U~á…¶Kã¥ÉcZÒ‡7ehÈéQWlY\m|£…Ÿ¢†¹âÝX©øëoia²žTA/9X¶€Q6HÜÁÙ@]¹¿5Âõ/ëŽøÕ' ê¼r¥_PPTJÊe¯^½^TTÌ ƒa‘_xïð¥ãßgú~YµyCãÏ®Š5ÛÉjo²Ò¬ð#ï{‘U[´»k¿p$ë~ ߯'_§/‰Û§ÄSÇOÈæßó#²~VŸed—=Ù÷9ô6 šCŽ¿B"'‘ Ï”'HVß¶¼nÕ•¦ù-F×äÂx%?RÍ Ðð¶i¹‚Æ*,Oº>°PH ‚Jàåâ `Ö„uhÐEàïD¢M––޽z9¿úêæmÛŽÞ¹“kèáb¸•ÕUq‰‡âB6'úyfýäS½ú y/Ì %sN’Y'µ³NjfP¿¢yë°öÝdá²D§j*ò­ä£-äãÍäJOò)ò3ò™ùÒ™¬¥‚ÿ™|·ü´Ž8~NV9é¬êÅÓê—Oh^;¢}û€v¡/YáN¾ø‘lXC\> ¾ ˆÿkäÄ$íÅ‘ê̾Ê\«ºr³» ¢d9ÿ„†·GËÍn|ŽyÜ+Ø4»#„*ÔsË7¸õGºÞž0p»…pþß-5 ææ4Ss¢†ÁË+$?¿ÀЃÃðÿ ¦¦Z’{"n×±Äu1WÞÎ.YÛlÑTm"-ÊsùÒÛ¢ælãú+f5×,+²º—\·)¾Ù«ðNŸ{9ýòóúåßëŸWØ?·h@nÉÀœÒAwÊß®z³rXv툫M£2¤cåÏǨ^ ×¾@ÞÝI–Qƒñ#ùžÚ jŒçjÌМ«’ m¹Þ»¼°ËÝZqªT¡àï×pó_âÄôLl(J ‡,ZÁ¨,ÛÜÞ]©KâþÓ¦ˆÞ´]Çž='Mr[¼ØÇÍ-0&&¡ªªÚЃÃðÿ ­­­¸¤(ûæåؤИ _f_/«4Rä U×øê$žò_qR(?*j ·†·œ4m>mÚtÖ¬é¢yc¼yc’EcªECºECf—†+]ê³,ë®[ÖÝêZ“oU]Ö½²Îº ¥ïMùÐtíÓÉDê7“wv÷]ÈšÒüÎVûËLÍÉç•—†·fõl(²(¬3NoœVÁA,D¬!`O`66 ÓB/%˜Êïp6§í¹Œÿt"£}ãV'ŸzÊeõjÎ0¤§_-,d†¡3¡¬¬8þ‚_FììúëÝê%Ýêcº5ëÚzÐLé-"®@Ül²ˆÝ@  ä8p §€œä<8 é@n)úE¨m´(–÷¸¥”¦}A;9L;›æ€[ÉÇ?‘ ŸO{²fsÈ¥¡äziq—ÂZ£LÿŒ†wHËuþ|…Íls¼€=ðݨ…P¿Ao!$¸d©½3í?3ÀÔ'˜š:víêÔ­›³Ž3gnöõ e“¿uuµ™éçâι'D¯J8µ*!tURÀâ,Ÿ©åN}É7@¾òO|ŽOÖYä @œ¸ñ²ˆ½@‚€D‰Eš°å†ImEie܆þÙ²aIÊñ‘êW´óiNç@¾ù’¸-!{æã/¸ò«ýjò¬îU™d¶‘ñQs}kßà|Ü›XINÀFÃõs¢%â’½£8›¼ìü' CŸ>ŽS¦¸SŸ°jÕ]]9ÃPSScè¡`øA-DIqÁìÔŒ´˜ŒÔ˜ IŒä|È¥ŸßþnY ÄÈ< ¯y ÈL ¯àó¹@±²È2 ¢¶×Ùd} >ÆWÄÛ$FÍ7LëŠ-*­rdÒ”c¢µ/!s©‹p"_¯%.KÉî7Hèdõ…Qm™ýó¬J*Í.7 c”€}ßagæ?°«çI-ôV‚YZˆB\(z ×x`OÚV ¿Ê0<óŒË§Ÿî:z4š*VÇ””ËEl†Gµ55 !ûÓ¾{«e‘yË[æ-3Ì[Æ›µ=m¬xB¨êÊ! Š1 Ê  œª ž š·A³´ŸùÍÆ~ a ½êë ª€úF³ü¶>™ê‘çµSB´oí"Ë\ÈÚ¯ˆ3ÍãÞ"!SÈù§Èå¾mùVÅUâ«RÞ9 /P Û°x%ÎeLÆL-„€ZˆZ\晉5´P ¿>ØŠö/D+n‹¹ínÌÍÌÍÍÍÞxcëž=á,5{TÑÜÜ|%)6î€g¢ãòÄ—'®_žøùâÔ¹Ó²Æö/ì96p£\YƒàúP¸5 òGBé3Pó4½ò¹ ]äKŒÃ¾  Í9P_Ö šžÍ ï¢ØÀ mhÏ€2EÐzÛ¸¡Â¢¸©w–lDœfby}±÷ Ÿ¯'+‰Ï<4C}fl[ÊàÆÛ=ÊÊ,²D±r8FÀ—l|„«<¦êf“`ÞŠ«Jïb‰þÁçþÚõ &¸}ùåîcÇb"#cuÔù¹\nèÓÌð7¡µµõ\` ÿ»ï‹÷‰Å[Åb±ØY,ö‹½Äâ‘èŒ@c5½@= È$ oY)u‡°4‘$Z«MJZzf©†_"χ“ÙûÉ"OòÙ·zO'Ñ£IÚùÝîå•âmO ”Àòël2µq¥§PT`7Z,ŸL$Ú);!7á»Û¤ûç¼yÛüý#éÕÄЧÁ` ‘*31ñÄÖ­ööûííwÐ+±½½½½Ÿ½ý.{ûÓ§<8^(¼i •=@=Èx ³,Á’…+—Ç‘“@’䀴¸¬Éæ†jh"ŠÌþžü¸šlŸO^&§Ç‘äÁŠ[Ö•åÆw¤ !p›Û±£r>.ÀA ;žxÔ?Üàóã ~ñÅ=øŽ¼ñ­éHŸûlÞ|$>>U&“ú2 jµº¤¨èjJJ\xøÅðð ááçÂÃÏãÊ£6™1ã¬X|Íʬ@ÕÈh¬NØa-ÂÈN ¡@âÜi©qyƒõmå òÌiòòaò®ùð'²á²ÅŽœEN>GžPܰ©)5Éo… § ÀE kp}ô˸ªÈF—¾Uï–H”ðâ‹!ß~ŒïHÇsíÏ%’ÌÂÂb•JeèSÈð"áÔ©#Ë–E˜›§ó‹,ùŠž|ÍH¾f:_³€¯ù˜¯ù‰¯ñák‚ùšó|M¿µÐ¤¼ÖúŽ|`ªfÌÍŒ#šw|58hÖ¡ñ°×웣9>I;B~µOM¡yA3ÿІ­áûkøžþ: ©†?[çá÷Ñð”|a_pÛÄ$qñâð' }:%²32NûùY¼øÄBÛs‹m“–ÙJ>²•¬µ•ü`+q¶•lµ•ì´•²•„ØJ"mÎ.¼»ôLÒ'$KÖ’lØ%qÜ&ñt•øü,Ù»^ð…äØê¤ˆ÷cÏ.:o{Jb,±= ±õ•ØzHl7Jl¿‘Ø~*±}_bk—dûÞEÛ÷¢- óñ‰NKc‹|þT”•e¥¥] »t,$!4$94D"9"‰‘D…H¢C$gC$B$±!’øä„c‰I¡ñÉÇ/IÂc%'/H"ÎJNGKÎDIb"%çNI.œÄ†%_:ž”p,!)ä’$$Vr^# 9# ‰”„œ’„„KBŽKBB’CBCBâOMÍ*--7ôi`è”ÐjµFm8пN߃¡OÃߊÿj®èP endstream endobj 17 0 obj 15453 endobj 18 0 obj << /Width 234 /ColorSpace /DeviceGray /Height 234 /Filter /FlateDecode /Subtype /Image /Length 19 0 R /Type /XObject /BitsPerComponent 8 >> stream xœíÛQŠÃ0DÁÀÞÿÌ»dûc¢Øš¥Þ ºЇ$I’$I’$]ÜÏDÕ›çú¨zó\¤¤Í¤3¼žhÒ¤×ÓÁ¤¤ý¤w óÀ¤¤M¥‹˜ZÒ½¤k••ZRÒ~Òá¿HIIÙ#RRRÒœH÷R‘’’f+G¤¤¤áÌ))iµã%iU¤¤¤¤9Ý+MÁÞ®$]Þi­x)‘”´½t½¶JIJÚ[º[¬|FºŸôè ˆ#RÒ¾ÒÑG¤¤}¥/mÎ{‰t?©$I’$I’$IÒiÞƒdµ endstream endobj 19 0 obj 362 endobj 14 0 obj << /SMask 18 0 R /Width 234 /ColorSpace /DeviceRGB /Height 234 /Filter /FlateDecode /Subtype /Image /Length 20 0 R /Type /XObject /BitsPerComponent 8 >> stream xœí}¨œÅÆ_iþ(¡Š‹P*T("¶Ò@$” ¢¨ø€‚¢)¢býÀ(" 4Ò@DDT"*ZñbÀ€ÁL1%%¨Øñƒ ¤(’ÜÓ÷²;ÏüÆ;«h’Ý;7ÏÃóײw÷½ïû›eΙ3g",˲,˲,˲,˲,˲,˲,˲,˲,˲,˲,˲,˲,˲,˲,˲Ž9<ªyzZ>‡fû`áéŸáòÓò듾7Ö\Ww1|Mòºì…¾’¯Ç¾3þ*_OËgÆÛ³}v¼%Wßp}<*/‰×åIßk®ËôZíÊôZíÊôZsVݸ“ÿ—ý§ÈÞ<ô ß~._›åÇâÚŸŽKåGâfù¾¸]Ö‹|óÛq¦üiœ4p|Ùeï®ù]øØš×2½V»2½Vê6%ú]ö9‘Ý=œ¼?ûîOŠ|k¬•·Ærywœ6ðÇqŠü~œ!Î=qêÀñY—ýwxjèï¾ÎÖWô~5–üd¬9Xž Ž›ºl«A™^ÓÛ®L¯émW¦×ôÎ}÷ÅY¼õVV¶[٠к{‡^Ù;²WÅCïŒÓåß'Oïë.€å’§àÙúØ©8O~ VËŠÇ;r÷Ñtö1ð–¸B&ÉJ“~hÖP¦×ô¶+ÓkzÛ•é5½ÍIÊ¢ƒ{å_ï“»m1ôu0AÕjÞpZì–߉ÅǶ.›+Ô¼~~!™ôþ'[d}Ü(/Wå{nŒìkàˆæòŠnÔL4§+çÚ‡5v™^ÓÛ®L¯émL÷w²fƒ§Æ¹ÛûMös14ŸïYðùÉ›³Y‘øVœ=0g§{Ûjf ÷•šñiš9÷Ö×Ý÷ɛݚIéîVXox/›µ—«ãŠU2Ȥð¼–é5½íÊôšÞvezMïÜ×éüh\/ßwÊWÄ–ùt zŸ‰¡µ±|W/¾œÍm;*ßýÁXüËë“×Â(ïdrXùpfð×FæLž#«ÅJÓkzM¯é5½ã—é5½ Ó»¾VëQlöaêRÏ—7Ÿqc EC¼·ÌL*Jâî›"îKeºßMPw$u¤÷¢d€ÝñüGt‘ä­Øº^‹ÔÁ)¬#ó$Gÿ2c+ ž¯mO6wèóuÁª?é}agh.FšvÇß³¤A½Óù±ˆÚxÀŠ ¸Ù­ºþrq<+ó^éEÞ‚*sA¤jÖó³‚B'oò׆צöPEgZn£Óv¿'àC¦×ôšÞ#)ÓkzÛ¥WOO‡]q4Ñâ­ã-Õì‹oà"»fb3“±í142ÌLêQr·K1)Õôu)|9¬i-›íð–©d–O^¾9hÖ|²z³ZçÉêDýGŒ ØKG/oþ><öKç\—¯kBΙ3 !Dlqò8hD£j4æd¾×ôš^ÓkzMïøezMo»ôj½ž)J–1è ¼ŸL6VÊá½å'+ñËì(¡‚;_Š:‡“Y˽íiÛb?¾6¿cSyA2‹¾ýY¬’fVç²AQˈV5îcP¦ßRÊO`.Z?;ü9âOAîTÀ“Ç ¥ÑÍsnæ{M¯é5½¦×ôŽ_¦×ô¶Ko·>ù:ø8u‚âZ9w¥U3ð¬ ö ë¶ðYÏnÔ9cÒ«šÆVUë |d´šºa Iæ×ͯ5!úX.ñdqÅ6y¯4ryW¹Qýá¡ÞÜï–÷Ñ£·U±¡„‹5þéì'ozM¯é=²2½¦·azïH¾^¯J½ÜÜ]’së²äý0÷@©ûú¨ÀA­ìù2'ó½¦×ôš^ÓkzÇ/ÓkzÛ¥W¹Äâ°„ñ¨ÀYfõæTÚŸcóPš4ª™^ÓkzM¯é¿L¯ém˜^=ô¿ÀkàtëX¡¦3}4áß1ÂS°ú$ d`é¬Öî¹K®ˆwž‰¡¯I²Â7ljÕEmĉE<äH´ðE^OõØ÷êiDš£ }GíkS Ê#8Ùk‹%(zF¬7f1°–œøÆ€˜¬7>8=iRk2½¦×ôš^Ó;~åƒ{p©¼KÊa2ûW쯋üa‘ûMÅ¥y~²æo,B(Î+Tv”õ„›á´§I'z÷æ´V3UnÕ5)Íéedh‰–0æd˜Ðj ’±j×,f‰«=$G 7&««ýµTÍÒ[cV±’^=zÎÃM¯é5½GV¦×ôš^Ókz'(þ/œä+%XT{2[«tîËF!C ÒI#ùdzM¯é5½¦wü2½¦·]z¹wŒ+à¢tzQv>‡½÷=É# ¸#^÷»ÎYAQÝðÎEpòE‚ª®w°5“Ì70‚cК‰ÅážlÓ¤ëábo¦þ5îaç&AmßcK6x2V Ì@ŒOªrãå_nvÃaŠ‹’é5½¦×ôšÞñ‹Ó$NºDï›]vœ ß–Œy¯:Š÷æC©vžá×é)'&?õ"'~œ$ëññ?â¼N£†0¦Uó¼wŒª Íuù_0¿ªh‚¿ Œdy¾yv[øï]<3É:–ˆü×n¼(›Ý ºSbà†dzM¯é5½¦wü2½¦·]z)æ~s_ öâ^ §B,]`T¢ £wµo«'°¤W‘‰å§é™²~•­Ñ8ÏÜ›E $²”WÑÑb÷õœúfȶsíˆ"Æ¿üïx §Ì ‘»„rÒþ–lþLš¾Ã•é5½íÊôšÞvezMoÃZ×e¯Hæ Ûn§Δ8ÃÞR­Â³G(+¸]æb„nr5EÏŽè [XV¡çÈ(‰oµ’"ó ¹æ™'K¾2â(vùéš«mH׿;LÙ!–CO£‰«l¥ñlkÀÊIÃwØ2½¦·]™^Ó;?¤C™·ÀHí*‘ȉË 8{’Ûv´]/r\Ýu^-i ½ÅB¿Z÷°ùO~Ay§žuÑŸœ{”>å}ì[®ȲR6xç¬AåÝN³åQô2÷«ßÞvv3иcÊ}Ò5™^ÓÛ®L¯émW¦×ô¶«´>êÐíagtÆd,³£ŠÎ˜>åsÖþ(½Œûø¤t ̈2Sš÷ò3b"{Œ˜ÄÛðzXp.‡—ÁúX†rä_ ç÷Œp ™FfäÈ-EÕßÖWO„œ4dGM¦×ô¶+ÓkzÛ•é5½ó@Xçݽ¼‡Ü•F+jãb÷³«w»?±wº¶~óc«+ U¸%> stream xœ}P¹ 1 ë5…¡Ço›UܤÉþmNMÎpi Ðâ’‘ ?Èe¬Öy™C)­Ía«‹V$-}ÚbáQ'jS¶jÝO7‚IÁåò½# ·¿¿ŸS Aؘˆ‡E̲‹âéQ™:¥À¸EœÉâ†ÞÎÖ@æ¡ç]ÝçäfŸ”J^ö /øŒî[ endstream endobj xref 0 21 0000000000 65535 n 0000000016 00000 n 0000000065 00000 n 0000000216 00000 n 0000000275 00000 n 0000000513 00000 n 0000003699 00000 n 0000003720 00000 n 0000003741 00000 n 0000003762 00000 n 0000000384 00000 n 0000003678 00000 n 0000005873 00000 n 0000027935 00000 n 0000022091 00000 n 0000003816 00000 n 0000005852 00000 n 0000021513 00000 n 0000021535 00000 n 0000022071 00000 n 0000027914 00000 n trailer << /Info 2 0 R /Root 1 0 R /Size 21 >> startxref 28209 %%EOF pymvpa2-2.2.0/doc/source/pics/ex_topo_plot.png000066400000000000000000001563341202542755000213530ustar00rootroot00000000000000‰PNG  IHDRÂè|Xä¡sRGB®ÎébKGDùC» pHYsaa¨?§itIMEØ 7#€,í IDATxÚìw|eþÇß3³}³©$$!¡—PÍQT¤¨–Ó»9ÏSAÎrÍ^Q ž¨Ç– ?ÐâRÕSº€€" žlòûc“ìÌîäN©óy½æ•<;³³³ÏÎ|?Ï· š¦i˜0a„‰¸Ð4ÒÒRæÌ™CçÎ6l6›Íœ˜3s L˜0a¢yðÔSO1{öl™2e ×^{-.—Ëœœ3‚©š0aÂD|ìÙ³‡ûî»O?ý”`0@VV÷Þ{/cÇŽ%99Ùœ$“M˜0aâÌĦM›x衇X¶lŠ¢D„¦ ššÊm·ÝÆ=÷ÜCZZš9Y&š0aÂÄ™ƒ@ À’%Kxä‘Gزe ͉HI’9r$S¦L¡mÛ¶æÄ™Dh„ §?B¡o¿ý6O>ù$?è=W\qO>ù$=zô@EsM"4a„‰Óõõõ¼õÖ[<þøã:tè¿Ïb±0dÈÆÏÀ±XÌD“M˜0aâ4CUU/½ôÓ§O§¬¬,î1­[·¦ªªŠššš¸dسgO&OžÌ%—\‚$I椞F0õx&LœÕ(,,äÁdÊ”)qIÐn·óë_ÿš… 2kÖ,Ú´iƒ †cdYfÓ¦MÜpà ̙3¿ßoNìiéñÇÜœ&LœØ¾};÷ß?³gÏ& Åìw:ÜtÓM<ýôÓ´oßž.]ºÐ«W/¶lÙ¡C‡bi¼^/K—.%99™:˜¹†&š0aÂÄ© MÓX³f ãÇgÁ‚qINNæÖ[oeâĉddd4½ÞºukzöìÉþýû)..6¤VƒAÖ­[G0$//ÄÄDsÂM"4a„‰SŠ¢ðùçŸ3nÜ8¾úê+TU9&##ƒ{ï½—»îº+&OPEZµjEŸ>}Ø¿?»wïŽ9‡Ïçã»ï¾£´´”óÎ;„„sâOa˜Á2&L˜8køðÃ7nûöí‹K‚íÛ·ç±ÇãÚk¯ÅápU«¬ªªj2­ú|¾˜c¬V+dæÌ™äææšé¦Fh„ '555¼ýöÛÜy甕•Åø÷A k׮̘1ƒ«¯¾ú˜i‚ àt:¹è¢‹P…;wR__o8FUUöíÛÇ×_M^^™™™fD©I„&L˜0qâQVVÆ?ÿùOž|òIªªªb¡$1xð`ž~úi†z\ç¶ÙlôîÝ›ÄÄD¶mÛ7½¢¤¤„Í›7“••E»víÌ\C“M˜0aâÄ¡¤¤„§žzŠ3fPYY³ßjµ2|øp&OžÌyç÷_™/Ý»w§M›6¬]»6† 5MãàÁƒ¬_¿žÔÔTòóóÍæ‚é#4aÂÄ MÓ(..æ®»îâÓO?%Äc·Û5jO>ù$ÙÙÙÿ³O–eÖ¬YØ1c(((ˆëƒllå4fÌœN§ùC™¡ &Lüøe™Í›7sË-·°dÉ’˜€ÔÔTn¾ùf^|ñERSSc’äÿˆ¢Hnn.dÏž=””” ˲á˜@ ÀòåË©««£{÷î$$$ü(ŸmÂ$B&L˜@Ó4Ž9‚ ?~<_ýuÜî999Üyç<ðÀ¸ÝîõA 33“üü|ÊËËÙ½{w ƒA¾ûî;öîÝK«V­HOO7ý†'¦iÔ„ §5jjjؾ};ß~û-7nd÷îÝ|ÿý÷8p îñ­[·f„ \sÍ5$%%ý¤×¶wï^ž{î9¦OŸÞì1½zõ¢sçÎtíÚ•^½zѳgO:vìhF—šDh„ ±e™P(DEE«W¯fÞ¼y¬[·Žšš|>^¯7n©´FM-''‡ýë_ <»Ý~B®¹²²’§Ÿ~š_|1n®aãµÙív\.N§“V­ZqÉ%—p饗ңG\.V«ÕÌC4‰Ð„ g#¼^/¥¥¥”””°|ùr>ûì³&òû¡°Z­ôéÓ‡éÓ§Ó»wï“òÞxã ž~úiŠ‹‹9±›““ÃE]Ä%—\B×®]ÉÊÊ"##ÃÔM"4aÂÄ™ MÓ(--eݺu¬[·ŽU«VñÍ7ßÄÍ<DQdРA<ûì³ôéÓç¤iU^¯—9sæðÈ#4Ûêéh$‰ÜÜ\Î=÷\ÈùçŸO^^ǼaL"4aÂÄ™‚@ À·ß~ËâÅ‹Y³f ß}÷ˆõùƒœ н{w¦L™ÂðáÃOz@J}}=S§Nå©§žúŸZ59NòòòèÑ£ƒfذa´nÝÚ¼L"4aÂÄéUUñù|,^¼˜W^y…­[·R^^ŽÏç;¢‚‚„'1‘üüŸÑ¯ßyœß]ºç‘•…­Á'(XõçÔ° r´>j¼¾8m[µÿ¡•kMm-{öðÝ·ß²ní×|½ök¶mùMU6-úŽª%&&&’––Æå—_ÎM7ÝD÷îݱZ­fJ†I„§4MCUUDQ4o^g jjjسgË–-cæÌ™ìر#nzs°Ûí$&§sØßºAÊyvdtÉ>È œ£xv ÷˜#"Aáj÷‡†ófsÐ0ÞF‘çRÆÂ~rNPÉUáèšh·#_Q±¾ÃëŠ8´¦Š‚j‚‡kPªëÑä® ;N† ˜1c8ÿüóÉÌÌÄf³™7›I„§þjxûöílذ /¼œœsRLœÑ8rä6l`éÒ¥|ôÑGìÞ½ûk~N§“:ЩS'ºuëFFÛþÜùno°g‚ €è{áž&DØ›o /TEå»­Vª¾ÞEýÆ=øvãØqˆ²ý%?xž, C‡eĈ 4ˆ=zœ°(ÙÓfçIÖ7oÞÌ£>Êš5k6lÓ¦M345aâLßïgéÒ¥Ì;—+V4Û)fµÞö0dÈ.¾øb:uêDûöíIOOgg‰óϬy%wÏv8zvDõ ì?½»’)Ü´•/¾ø‚5kÖP[[{ÔsȲ̒%KX±b]»v墋.âæ›o¦K—.æhá©…­[·2f̾ÿþ{dYfîܹøý~ž{î9ÚµkgN‰3›7ofÊ”)|õÕW>|8¦ÒJs8hÐ FÅ€hÕªiiig•û@tØpvÌfXÇÁ$ Î 7ÜÀÞ½{ù裘3gN³EáõzÙ°aßÿ= .ä·¿ý-£G&33Ó¼)õ÷ši=ñðz½,^¼˜;3ââ☇¿oß¾<õÔS 8дï›8mQ]]ÍÆyùå—Y°`AL¯¾8â,)àh)# ý· w…oõǨ€.ÚÒ-B]óÜàjÝ*‰Wj[ 1Ôþy„hPÌ—†«HƘ¢QJ–Á4ª"R[wÕ ÔÎÙ’RÃþ¶ì3œ3‹øõá#zQ\ÉÑf¼àõÂòM0{¬ÚûKÁ8öï’››Ë-·ÜÂu×]GëÖ­MƒYkô¤‡Y³f1aÂŠŠŠâÓØ»¬E‹tíÚÕ¬&aâ´B(bóæÍ<ÿüó<þøã¬]»¶Ùj/‹¿ììlúÊõOû¤]Öt†”; ôþ7›¹:Ö ÈÓÛªaÏ‹°„J;Ë^Iµ‰")Æ´†:ŸŠ¢°wï^Æχ~H0k³p¹\$''säÈ‘¸û¸õÖ[¹÷Þ{ÉÊÊ2s Mœ2ìÚµ‹çŸž·Þz EQš%@ÑbEMÎ…ž—ÁEÆ’Ûéçºcë!pc”壮¶ÏÖ½Ðø•n(­ í(E&åîHúƒSðq…¸ il%ÄÏu>AÎì4 FG[5ÉaØ4¹N•*#cU¥C™Îâ£ÛŒs"D© ò9úýBOªya?9(Dj‹"Ã’Q‹%*É¿5 øB|ÿå>~¡¢/PéoÞõ(Š"999Ü}÷ÝŒ5Š–-[ž5nS#ü‰Ipýúõ<ñÄ,^¼8îª,%%…1cÆpå•W2sæLfÏžQWWWÇßÿþw***xôÑGiß¾½9¹&N:Ž9¼yóx饗زeK³©¢(Ò®];Î4Œ²GCÛÞ ZE5Ý3WBk€>¡2Íû'6§Ä5á’ ø´ÞÞ «Ë@³øðûý¼ÿþûìØ±ƒÛo¿Q£FÑ¢E “M4McñâÅ<øàƒ|ûí·Í ˆI“&1zôè¦ÙYYYLœ8‘-Z0}úô_¢ªªÌ›7êêj&MšÄ¹çžkšIMœPƒAæÏŸÏßþö7Ö¯_Ô|Àüü|xà.¼ðB222ØgúO*r`L¸0 ffý‘Îü?ª««ã¿eË&L˜Àš5kxðÁéÞ½û+oLጺº:þïÿþÉ“'Çí;&I;wæ‰'žh6J«¾¾ž7Þxƒgžy&nŠ…(Šäåå5UÔ7ó€LœˆÅ]AAÏ?ÿ<³fÍj>Æb…–™£®ÇþÇ?ÙNCÃ&;E8R)ó¥ùD¼¤FÞëÓà¡(›vÔY„“4²À~kdkàõˆpN´WsCßW›ÆN|\Ë»‘ç…‚ˆÜ^#™ ~ã÷Òˆ'üu¯© TèÞ£jˆ•Qsã0½½Œ‹‚ ÎÞÓç:¡ŸÁÔ¹<ƒ_rêR8öìïF dü±Èx /÷» «‰A¸ü‘/Ø^XÇ3›4>;•øÖiI’hÕª“&Mâšk®Áår™¡‰æQ^^Î?ÿùO^|ñŸæ"Q0`>ú(C‡mÖív»ùÃþ@FFãÇgçÎ1šáÖ­[¹ýöÛyê©§9r¤Qjâ'ƒ¢(¬Y³†ÇœÏ>û¬Ù`[r2Á‹.E¸ùv„üÞ(v¨«htˆi‚`ìüÒ )È€}nÍøWˆ"!!JŠY4¬DüŽVB†?KTÐhžóõŽ¡+D»15b}€Q\ªEõÔUÉ@„2dÝ b3ŒØ Äè×Ô(¶•rXAŒ|›æ§oºÆë?‡öÂÔ ßoñ£*±¿QQ·Ýv{÷îeôèÑ´nÝúŒÒM"üIpòäÉGM6l“&M¢OŸ>Ǽ‰DQdäÈ‘Øívžxâ Ö¯_#€<ȃ>Hee%7ÝtÉÉÉæaâG·pÌŸ?Ÿ©S§²iÓ¦fëСÃ︋^xd´l¡æžH°ÂAº6‹wfUóÕ¼jj*c;¿ßϳÏ>ËöíÛ¹çž{èÝ»7’$s`íìß¿ŸqãÆ1cÆŒ¸$(Š"×\s S§N¥o߾ǵ’1bS§NeÈ!q5ÈÒÒRž|òIþö·¿Q^^nþ&~ÔÅÝßþö7zè!6oÞ÷«ÕÊ•W^É+¯¼Â·Ü¢#A§òz;ùãSYüñé,r;Û‰'¦êëëùàƒøÃþÀ'Ÿ|rÆ|wÓGø_B–e|>Û¶mcÒ¤IͦGx<FÍ<@«V­þ+s‚ªªìÙ³‡‡zˆ?þ8n®¡Ãáàºë®ãᇦU«VØíö3fµfâÄBÓ4 ¹çž{X¸p!@lKAÈl“°?gpÑíHNK¤HÈáQùžÈ}« ý?– ìHŠœÄÚ»ºÅ]x7Ji*u~ÆGÜÖì -§DJ¤e‡yÁrGdP¦Ïú-º ÉiÔv‰°9³ñÑŒ–ˆÞè¢Ê‘M¼èJ‘†ÇQO[Z_X. 6˜F?å2ƒésMÉ‚jÄ¿ª¬²ƒ?"K”õšW8êug¿²ÁùrÏïÁ¥Eúù¾ÕØä Ь±¯XeÂË Þ8©‚ ÀäÉ“3fLSÀßé Ó4z(--¥¸øGŽ”³«W¯âƒ>h6êJèÕëWôí{=6Ô±aÃŽÿéó¯¼ò~¾ù¦’• RÃh¶˜9s&óæÍcìØßÓ½{w’“37àÁbq™é$77‘ÔÔ„³"7ÈÄ·ÀÛ¼y3wÝu+V¬hV ìÓ§<=mp¸RˆBZ‚Î%¨ iºü;M@“E#yDû…xÎ4·Ñ†¥o«gÉ!6 ».!ÞŠŒ%¤Iéx«*qˆP>Ê1ñÖºQÆE¢xÔb  6TAEç·€O÷Aõq;ŠÀêIÞH°ú&JŠ‚U–±]ráÍ)ðÜ›ðê\(:hx+š¦Q[[˸qã(**âÎ;ï$;;û´õšÒð(¤·sçN4MÃçó±sçNÖ®]˦MßQX¸¯·–£;Ñ=¨êV®ÌaåÊ…?â•õm Áqî|¨¬¬dêÔgž<7´ÄáÈdÀ€Î\zi'úõËãœsz‘’’bþÐ&"Â7äóÏ?ç¯ý+_ýuÜc¹êª«¸ï¾ûhÕËÊ—gZ3@+“î¾ :·…çf†ïAŽZÔÖÖòòË/SQQÁ¸qãNÛb&6¬nÿ6æIíÝ»—nݺQTTÄ‚ X»vm³š_,RÁ@÷Ÿ`Š]À€’[º*÷±ËÖÚ†­H$ôãñt¡´´”•+W0hÐ ú÷ïÇ„*4-ÌÍ<ų¡Pˆ>úˆ‰'²mÛ6%6X¢E‹ÜqÇÜ|óÍdggSÁvsâÎp¸œpõÅÐ>ž˜Ù›yŸ|sLMM ³gÏæàÁƒ¼üòËäää˜Dx:’`0¤²²ŠmÛ¶óÞ{séÚ5Ñ£G“ššJ(bàÀüéObÕªUÇ8›d퀟ÊGçú‰À»Hó°Ù¬\{íUŒ?žœœA ¤¤„3f°hÑ®¼ò*RSÓ°Zmˆ¢„ÃaÅãqc·Û°XL?ãÙ  ¾õÖ[<üðÔ——ÇD' ‚@ëÖ­ùûƒ×qQÕ 8ç¾€?+]£†4wXHÇ)E*"Éš…êzÕ! @…îÄ~0”õT€ŽQ'5¬ýôkÌþ:–"[×Û/• ‚zÛ§ M©ÄY;ëö‘iq$§%\Ʊ抾„øŒ–Óèµ A-b •?µC½îCjcІ›˜\E¢ŠÁÔîja¸Îtÿ#)bÝØ­7v-òƒ$ 5ˆBÇteÈäLù˜ƒ¯,D©3V¾òù|,^¼˜ë®»Ž¿ÿýïôèÑã´ŠQ8«‰°¶¶–Ý»w³|ùrÞÿV¯^E¿~ý¸í¶[›:8Ûl6òóó¹þúëùúë¯RIÃBØ yaœ§ù§úéº>àˆ¿ñÃÕ³²²9r$:ujz­}ûö <˜?ÿùÏL›6^½úÑ»÷´jÕ‘.]:pÎ9íÈÎNC’œ¦Vx£¦¦†7ß|“x nË›ÍFß¾}yñÅé“Z o?Ecšž–¨üX2„(wÞGˆ%¼UŒÞ…xcÁHdãX°UKT‰ª ŠÑg÷rübWËÇGŸC8ƘØ$}UÇR!Íj˜[|èƒaä¨ëã\WT U– ß½–Dƒ°Êšdð¯ Q5T•‰´ýë 8:dQüÌ\E‡ ŽCEQX¹r%cÇŽå™gžaРA§Mû¸³’«««Y½z5K–,aÙ²elß¾P(„Åb!//¬¬Øžh ÀétR[[«»ó’€ä†-È:œàosNƒ†x„p([%áew= 65=íÖ­[Ì;»uëFvv6EEE¬]ûÖ­[Arr.çœs.¿ü宸b(­[g›Ñ§g(ªªª˜9s&O=õT\t:\zé¥<úè£äççþÿ˜“v–Cr;È} –$O¼Ï¡í1¶o¾ù†Gy„É“'7›öeáI‚ªª”—W°hÑB>þø6lXÏÞ½{ ŰEa×®]”••‘žžnxÿÚµkñùd  CØšÜ`“p7,SO´æ$4,ûz6,„hê M+¤´ô;vìˆqdïØ±ƒÒÒÒ&S˜ªÊTTì嫯ŠÙ³g+V,â׿þC‡^ÔTÆÍb‘°Z-MQ§¦¶xzÂëõòÆoðì³ÏrèС¸šàµ×^˸qãèØ±ãYÓŽÇÄ C—Œ‘ƒ¹;óž¹í>öìÙC†k×®åÞ{ïåÕW_¥OŸ>&ž è÷ûY¸p!Ó¦McË–-ÔÔÔ¢ª±fDMÓøöÛoY²d 999x<Eeß¾}¼óÎdy aã¿­aêN& Q[c\y aG@£­D¡¤¤Œùó¿¢W¯|Z¶ |YYóçϧ¤¤$æÌŠ"STT@IIË–-¡gÏŸqíµ7ѱc22RhÕ*äd™‚qšB–e^{í5üñ¸`Vnw…ø½s=k:ÍdmÃb'”¢ú/·7W'%°¼¦±'ɺ»vÊÈÔ=`ÄvTÒ›=Õ†Û×ÀÈ€~Mšl5—•»O•ñƒvîîiHw)Lhg[$c^´ï£dÔêÈdìMµqèÚ–ðî=P¸}m6MÓØ´i·Ür ¯½öùùù§ôbꌕdªªRZZÊêÕ«yå•Wøì³ÏâFÂE£ºÚÇc½ÀÇo`Ô¨+(((aþü5ìÞÓðž*Г ¤Û,„¥ÿ:Úñæ›{Y¿~*#GöæÎ]Æ÷[W G˜|ùåg¬Zµ‚¶mó>üJ®¾úbÎ=·§I„§!êêêxã7¸ï¾ûâ÷ÇáŽdx0Uã\C©™´Ú¨Ô¥ÜøpÐ1YkLï¿ØÕæQHCˆC:R””²D#ým*¢@DAEqD°¦hÆ÷k?ðQ;ÞGóßûX§ { #s)¸¢ê²:1Žqˆ0^®£îƒƒA»!¿1 †Z¤¢¦k‹W9¡2ò†b+Ц?üî5˜÷0l] r0† ÇŽË´iÓNéÞ†g”$Ó4 MÓ¨¯¯gáÂ…üûßÿæ³Ï>£ªªê¼Û ä­¨«kÃ_$°fÍ2dÙF(Ô‰Ïó)A€bÃf"A›ns.üþVlب²e[HÊÃàÚ žå\u߀Üü<…BvíZËþýÛØµk=·ß>–!C*Ñ‹¢€(Š‚`šLOAx½^Þyçžx≸$˜&ÁŸ’à/Éà4>?ÙÝáÊ¿†Å͆OÂÕ€t2yóæÍ<öØcL:•Þ½{Ÿ’šáE„Š¢ðÍ7™9óu,XÀ~À»<@§†-»a–>ß©”p.D–ÀM[£hÕm6"¡uö"LÁ’‹€ÔnpÙ!¹=$ý컡j-”|‡–@¨yBôùjX¼ø#vïÞÊe—]Æ/~ñk²³s$ÇIb¢‡Ã,ïvª! ±xñbžy晸>A·ÛÍŸûŸÃŸ V‘fþt&޹ùpëÓðØôeŒ‚²råJ&L˜À«¯¾J«V­L"ü©4Áªª*^ýu^{í5 âÖã4’JÐÈ#lò<Á.Ç =Zt›MG‚äçh°Ÿ¸¾« ,pZ!ÑIB8Ï(U‚]@mÞaP¹¶¼û>¹Æ°º‹Ì·ÊîÝ;yå•">þx!ƒ_E~þ :wnI×®­ÈÊjaá)† 60nÜ8vïÞÛ#S€»ïø#wåçá¿¡)€>€ Y‹ˆ Uˆ¬æÕ85ûõé"Z$ @PŨÛYˆ³Öã¯E߆t áã“ô˜kÍÏSãØ8wÆÔA0Î¥&³¦& G7;7wMú÷D§³4ö€ŒÜ±>^ýïÙ¦+Üñ"Lû |·ÜZ!Ë2K—.åþûïçµ×^;åzžöE·kkkùæ›o¸ûî»Ù¸qã1޶i@W é§K?!ŽhÓiv :i4‡‚j"¹ Á©¤ &„_3€–€¨!¨¨Tª°}/Ú¦—¡t!øö€vô…EJJ.¿ü7üîwÓ¯_RR`ÓÆv²‰;wîdĈìÝ»7f¢î:ÿŠ_èHü IDATþ~dgàQݱž*ò:GºPؒƃ0—ôygHTê"[ü²“µ.Й€÷­FÁú]œ¥º>÷Ê·Áòû h)¨F¼ÍfcìØ±Lš4‰´´4S#ü_¡ª*Ìž=›—_~9nô£qé™tº5áé  …f4A«ŽíDL¡z-Ð ‚¬N°ØÀf$)q—FXÌ24h©!YU$AFHÓP]¹È-'¡\ƒVð”,ohJÜ¥eeå.ü'¢XŠÅr?ûYWœN6›ÕÔO"víÚÅ=÷Ü—=6}ü¹ØÌŸÈÄ…´®pÞ£ UCÑjƒU) òÎ;ï••Å_þò—S¦‡êiI„ªª²dÉ^zé%¾úê+êêêŽrtá<»nªÏi¤êƒbô$¨ˆÑ #B‚¸@t‚Õ. ¸…°8µÓ¤k’=„ÍÀn @@#˜bCȲl—yãѶŸÀþ…ªŒK†ååûyï½™lå÷¿ÿ#C†œOzz N§ÝÌC; (++ãùçŸçóÏ?Ùg³Ù¸¢w*wŸ[JºÛœ+?22σß<oŒ†²}†]•••¼üòË´oßžk¯½ö”¨>sÚa(búôéL:•ƒâcm &ÌâÔ‰ú<^Äó êý¦Ð(“(n`•À-A¢!Á [ºÖ°©Hî6»§Í‹ ©YNÔz ¡Ö¶/!u8ZFØ~9l› uñÍÐ^o+W~ÁþýEŒs cÇÞˆÃÑ '~¿Ÿwß}—wÞy'nÕ˜~ýúñÄ}Ãi³ñQs²Lüëxz†ßO…çÇ‚×Ø°üÀLœ8‘üü|ºwïná…,ËìØ±ƒI“&ñá‡%ÆÚ åN8ôtöQÅ‹m$ÀFMÐa$@Á¢ DØìaM0±AÔ¡®!¤)Hi Rj—»½½‹(ã9ð|B+ŠÍ†âLAI¹„PvoäïÞB=8üE1þCMS),ÜÅ”)±oß.î½÷n:uêˆ$IfjÅ ²˜,X°€‰'Ƥ ‚@Ïž=y÷ÝwùrW+:|3>²³cé @×ÓVÉ’¨íìÑÙZªÉ%⟳ —ý†ÏStδ€ÅNN›Èñ~ÅÁ'£¯ˆà­¨ Ù5À·ºqcXãwMð"AAÑÙyUDcÏ=ìƒ!#ÖŸ—Ǩo}4D÷2Žò;f×—ÆmÝ…a ÃܹðÆ9ì7_Þ2Íà3ØÑª‹a|dc.šª{ö 1æ~Ilq=~ePËŽÒ/Ú` »È¡ãU`ó ÷C…1Zy×®]Œ3†>ú¨©¶³I„ÇÐ-ZÄsÏ=ÇŠ+šIŒKüî„a’Ï‘¦’ÑkƒzBl$ÃPr€Õvú8 gƒ$5LMRd<VO›;€Ýé%ÑVC²¥’$± ‡àG–$«…f%âÀ/»ð;œø’-xSêÓn Pp.Ú®w lqÜD¿ßÇ›o¾Nqñ>î½÷~.¸à|\.§é3ü‰±mÛ6}ôQ**bK¦äåå1mÚ4²³³a—9W&~j†±Âϯ†Òb˜5jrbãÆ<ñÄLœ8ñ¤ÏœòDØØyýùçŸg×®]GÑÄÛ¢iý€öÄö]9]IPO„zi<ÿ`ƒV(ØÃ1N)l!õèȰ‘AHT±&„p¸}¸u$Y«H‘*IÊIê$ AÐÐDúT7µöDêR¨I÷ ¦y¦%̸-¥ lîû¦ƒûû(ŠÂÒ¥K8|øwÜq×\ók<žS@üD(++ãñÇgÇŽ1û²²²¸ë®»èß¿¿©•›8qp'ÂU7CÑNX<äÁÒ÷î»ïÒ¥K~ÿûßãtžœHþS’3:jkk™6mÓ§O›±QänV›Äé shåSAþcÌuß~»‰‰#ðqã76{Ûú³œÌ˜1ƒ… Æìs:Œ5Šk¯½‡ÃaN–‰‹YpËZîÞ@ÙŽï »ÊËË™>}:={ödÈ!'Eœ²D¸gϦL™Âœ9sâ:ûÄ—F¸|šv¦ɉN™ˆ&ÀFMÐшV$°Š·aF2ôhM›˜ cuqØ|¸D/n¡µ$RK •¸©Ã-ÔãÀO@°S'&àÕÜT¸R)MÎæ ±¤S#$RëðP›Öƒ`ɳ({»¢•¼c:‹ª†‹—ß{ï½ìÞ½‡1c~Ç“„$‰¸Ý\.'V«Y»ô¿…¢(ÌŸ?Ÿ×_úúØFÍm/½”Wïú 3ª+ˆÓ ºQ?Æœ9 ’M ’ÉÁ¦q&e deÓ8:~F$ˆJE0ôÔóá$“ˆoÌ'9©ÏŽø÷dÅÊŠa—/ü0F›C^¡Õ-“cø%=ÔÒ†H”¢]ÙyºTvë… ±E·£¢hýÉÆõµ*ˆÔ:=G“`†|Êp D£; J0:ýØ ‰ÿNü`*¡‡ZÃñ9Q¾Y€tÆ[ò»ÞSÜ UÕ]WkÁ¸†­ÄØ»QÁ˜whÒ;20ø -m½Ý Ô&N3¯§ú×Ïà?Xe÷;wîdÊ”)´k׎6mÚ˜Dðý÷ßóØcóÑGóãúAÄfë‚,÷GQr8½bâi€ú” 騡hI —iäÇ¨ÒÆ3B‚ *‚[nJ™p >\x¶z k‡ÉTá¡6\ÈX³ÔlTK)´t¦…p„2[&eŽL¦ej“…ZìAhó{äÍíѶ½¾mDwAõz½<ÿüߨ³çC†\MË–™tì˜Aûö™$'{Lÿá‰]»v1cÆ ŠŠŠböåååñÄ3Ïp}rrTaã¬Uý4Cõ“˜j((º±ÔÐ~Öp¼`ÇtŽY}ÆxM±ƚÛ Xûeô§ GñzùjÇ)³â}¯£blÑsAÐbç6Ú¸¦F9Ê\«qœ†Äɽ[Ó}ÂUlyô}Gê d¸téÒ¦®('ZœrD¸qãFyä-ZDü¢76 0MK懕?] ñh©:¡h ¡E0º£‰Ð­[Ep+.‹=ØD„NÂd覵¤RA:‡I¥ISÐ4M¨iá:Lªã©‰Gp´ð"·¨¬O$T ÉhêHd.쟵ÿ-£.Xð›6Ó¥Ëp.»¬II.ÝME»Müpþõ¯±|ùò˜}Lœ81Ü‹²®Úœ,'¢ÕBÎ5}©Þ²Ÿ½ÿú Å2áŒ3¸øâ‹2dÈÙI„š¦±qãF~øa>ûì³fHÐ ôGÓz¸Ï£4Âx õV, ‰F"ŒëBÔ*’CÆâaµ†°IAl±ãÇѰ95nÕ‹G©Ç£Öc †BHáD° v)ˆdUÜ*$@¹œF]m"u¾DêCç ´¼‹ÐJéBPýQ¦¼……k©¬ô’í¡sç$&ºúJM©&ŽåË—óÚk¯Å¤Y,nºé&†N9M&NØÓø «V­j&I>•°?°;gnÅx&Ñx¦Q= Ú@²€EŠŸž uÊ£`Ó°Ø$»ŒÍ “ ÄN isàÇ¡°ƒØ‚26¿‚¥FE¨ÔjÀ ’"Õ"YÀiàJò“’ZEfr)e‰™”¶Î¢LÊ¢,9oIKê[ß…oCêŽ7!Tõ}CÔÔlbÉ…ôt'~ˆ2ÈÌL!9ÙsJTœ8ÕQ\\Ì}÷Ý“/(ŠÝ/M§å-;ù8ñ*Iâ¢Ä†ctmͦëÏ‹¼°pýÉFDE³{¨¥/‘:­û¹ºtQäî­i±b0Þh¹‘¡ì¶ Žˆø½¸ØMÇÈÝ`±RÖטOæ :Øß+r‹5DJj¤²Q¢PÍ0–®q‹#Ö½ BÊ Ý"L!\CSèÛ,Û8¬q%L¡2Ju ‡5|Qu‹•(»¢/ª`©7Êy$j²«H6˜OCX ãh³gÕ1Í~õ¾Òð¸Ð`«ÜÕf»ÁwYÔ¦ Š—3‘uãº*ª¢³§úì ÏKtAŠ\W^ú÷$Û÷åcÂD’¨†î_<\Ï÷‹)5¶mZ¾|9/¼ð=ön÷‰){tJ0ʺuë¸ÿþXµje3G´."\)æL×¢ÉP¤y?aÃ&6šE…XlÚ4D›†hS±ÚBجA¬b«ÞìèQ `†°yelõ Ò!á P B „d­Åe ìª%%»Š,ëAr“ö±ß“CAnì)~”,ª"7J‹–øSï{&l}|EQ–•63kÖ?)(ø-\ÐÁƒ;àpرX,¦Vxx½^^z饸©ém< ýcZt²‡Œ ‹`ìÔ*Iª‘,ýFBô©„­„‚U•$•¬.è‚/Äó~ýXED”ŒÂ\´¨`× ×(Ø~E‹.¢Ç‚lKšŠák«Ä&ÐC j"Ô ,ÑãÆïr4bŒÞ¬®Ç–ZŒŸÐՙ׊l8§U” >\Q4zMEÐt×iÑŒ÷„¤…+ÈD~ Ãý# j¸v±^lXl#À¥WZørUÿ7õ°¡ÉÏçãý÷ßgÈ!Œ1â„”g<éD¸eË–M°9Ì.Ú¡âLÆb©Âbñ &¢ªéÄÏ!ŒÎ%Ô™K!(£·žZâlV Ñ¢"Z$‹ŒU +CáM a•e,É«b©Öàp„zDÑ@t×c Õâ+HµÆí©G´h¨ir‚‡˜h±£Úøåß![“·¼ˆV·+Ƭ]Rò-‹ ¨ê(:ujA»v-M¦;V­ZÅüùóc¢ª%IbÔ˜«é~‘ל$§,D~yGß,÷±uµ±^ôÞ½{yûí·éÛ·/-[þô²à¤&Ý0~üxV¬Xq¼ˆpíž3P÷äænáæ›3xöÙŸó«_I$&nÂX÷HÄM*è–ëB㉌¼)Dýmø_ûš…7¡!Ê/üWiˆúS5AÕ”†½ðu W‚·L£¢H¥|—Bý÷!´~ÜkëIßTAë½Åt-ßI¯Ð·tsl£s‹]´k³—Ì®µ$ ‚­ÿýÐ6Îl(Ô×ÇîÝ˨ªª Ù²&8tèsæÌ¡  Öûׯ_?þðÇÛ±ØÍBç&Nm¤eYõ@+RZZ£,EŸ|ò Ë–-;!×qR4BMÓ(..f„ |úé§qR$„¼”pÁìã1© 긦Iœº ö*¹¹ßóá‡%/¯ V«…Ñ£ɇ.â®»æSQñ³8¤'Ä·Y‡+…xªéŒ.áMDEj Dýÿ‚ª‚¢…óŠ‚ dX®¤V^%u"AE#¥D%µH!iw€´œJ¬mURÛV“‘u„"ËaÒRËIJ©¤8¡¥-2¶F0«%Ú‡‚Úâ¨û"ÄÖ­ÿaá èFZZ’))â-…eË–1wî\dÙhþ’<ì}âOÜ“æãVÃ/:®fžáØm-»á¿0’øUó³dŠÏïÐ4v&Ö“Ñ>’Ÿ–'nãB¾h'×À“‘óÕWÁ¦¥‘±+~6H'lRÚôˆÆðIz´ùNo¡cÃVÙj¡6=Ñ`ZkMļžD5¿`~ÄÜW/Óf®øFtí×\Æuf—#>ûEhe0sFûøBº„: ꨂ¥u«+Õà1<×^\3f0ªi€ù˜¦Ð,]Î'@w}áX #» ŸQB¶Á„»ÏÚÚZ–ÑY7.×Ò ã`EÕ¯½°‡Ô¨$Íìõ$#÷eÆžzTCMO…@H÷ÛÔÕÕ1aÂ.¿üòŸ¼]ÓI!ÂÇóÔSOñïÿ›P(ÔŒ&xaßà¦W$ÉKJJ ݺّ$ï¿P^ž€¢¸9Õ|‹’t˜_þò\z÷Î<ÄV+_°r7¬ÝghlOAAS§Ne„ Øl?]¡N„²,óâ‹/òæ›oÆ%A»=—`pšv|vaQô“Ÿ_ÍØ±ý¹ð $‰ÿüg5o¼±Šµk…2cék'÷Ð~,N)UÆž@LRÉHw²Xd§  ²Ý†U•©Ø›zߣ>­rGÌ=2mÚódeeqÝu×át:‘$3¿°³fÍâ›o¾‰yÝÚ£3Îß\à1 š8½Ð³Œê[K¡&já2gÎFŒÁ€Î"œ;w.ÿøÇ?ðzcùnw.×Å”—g£gŠ`BB £Fõâæ›‹Ý.ºÝ¦Mk‚Á;v|My¹ë”Ò 7+WnbäÈ+Œ&’šZ6m* —¿2°™žÕ¢6ME ko²þÛ¨Í)úÿTE@UETUBET¡±Þ‡Ðd ÕPM£S¯ÂwŽÖô¹þôÿùEˆ¢Hnn.]ºucÊ®ì™û:jÀ~„ý`q+$*u(–CØÝATÉ ]*®õ”uJçˆÔÅv'¡OŸ€jcI¶êêjž}öY’ùÅ/.ÃåršD2sæÌXÅ&1ÇÈ˰ôÊ3Fò™0qÀ"Âõ}áѯ6Uôýû÷3{ölÎ9ç~š‚ý'ŒEaÅŠLž<™ÊÊØçK*Nç…ƒmÑ´ã”h×.Èå—m"Awá¾ä’AÌž½žÕ«ÕŸá©EIçÿæÆ75ù Ë–­`ùòbTõœæU»è×Ô0É!7Ô ”ã‘ h h D(kŠ*6a”§°ASDG†‡Bè<ˆN=Î1„3»\.†ÿîV~ð.™µõp,°9d-58\~RS*Ý¢EÁâ b·ûì2ô6Ô·½ Å^‡úî“à‹ø4M£ `/½ôYY-8°ÿYßå^Q^y劋¾UApwíG}ß;ðîÊ ÍU‡­CÐ`&KÀhJmÃ>ú²>rþ‰PçHuš±’®lmgÕ•q~Á¦ˆf§ºúÉ>¿¡}!)!8w¯~•ºö…H6…Üvû æ=T>žˆŠUW3:ÎasD ®–iµ Üø¯ë­ °w§î|thgø€ØX¼¨5ºP” P2øød,좓Áý=j1Ö&­ŠjWNªa\G‚á3•(QÝ’2ƒÙ1™Ø6hÖ(Ógû ª€‡Zƒ©³[ Ÿ¹6n!m ¾ÊBÚâ×åGÒÖO™ÆÒ¢|„jY'Þ%W$Å&¸'ßÉê«ê é.= ²téR®¾új.¾øâŸdA|Bˆ°¦¦†åË—óá‡Ò²eKÊËË9|øp“£_åA9Ò‘cì›A($P_ï‹yÝçóÑlß“ ‘ââî\}õD†ϧW¯|ùåf–,)¤¦¦gÓ#Ÿ eãÖH„¡†-ˆq nzQCJÈÞ¤†¬+Ñ‚ŒD¨! KÁ‚*I¨ºJ5’CCS|È¡ØÉ¬¯­ÅnWÑ YÂ6~!¨a±)!\š—¡œkõv^§ƒJgGÒR±·HB¹ùB•U¨Ÿ¾Ðäd²Ûí´nÝ·ÛÁ;ïÌAUe ¸«Õ†(žÍ}ׯ_ÏG}D ˆ²†$ðû;îæùÔ\eŸj“bjSJQÏV´ÏOlbPG:µ$)‚àÑê°ë¦†"ÍšŒAô†4Œ'²q,HF¿•‚×GèÐ9ùœøpë“UEªWõ 5ÆÏ éÄ‚$¯1ŽÈ‰)ÁkžŠößé C‹*6žªc£ƒcŽF„Ñ>Çxy‡±>BÅðš £Ï/ÚŸçÄgø}ø>C‚_iÜZ²ÑI›£›ÑP×o€…_ß`çïñ]»vñÞ{ïѧORSSOO"œ;w.@€Ûn»ŒŒ –/_Μ9sXºt)²¬b±ô'êù?™.‹Šì|òÉçtïÞ—ËÕD‚K–,g÷n M;õ´ M³S\܃™3c± z4A£?Pïl”& RH …}„²–,"Q›æÐ"rÀ‚´²Ú 6‚š€N©b#(Z‘% Õ.¢5´sÊHW7­bÛæ ´ÌÌj*Š[UUÅçïÿ×µöáj¶t2@Ë3%B)BN ¿ÝFH²  "V1„Sòá¶yÑ,ˆWýY)ÚºY8¬"¿ûÝï9r$]ºt¡  €õë7P^^Áˆ#p:X,gWq:æÏŸÏž={böõïߟK† ãù}¦‰ÍÄé É#o²ñåâ÷W( ,`Ô¨Q\xá…?úBø''Âââb y衇šÊåää䜜ÌÖ­[9|8YîCl©óãƒ×›ÄìÙÛ §qõÕ—`±X˜7o ï¿¿‹ššœºi$d¹aåXÐ`ôO#l C¥5íèDPZ@#´l„DA‹ &Á6B‚ ÙjAµ‹àÍ ŽT8¿e óß{–â¢Bú_8œƒÅE¬^<ŸüòÏhפd°´©hY gHøS¬ø]6ü6;!QB…&"t~\v/r‚-;Ðew"W «û÷ß?;w›ðÚ´¡W¯^Lš4™NºÒµkdz.xfÛ¶m|üñÇ1Éóv»;î¸Ãà0aâ´…y=, »ÊÊ[ÿ´ÇƒòÆo0xð`,–—º~r"œ7o—]v™¡fœ$IôîÝ› .Î{ï) !ÿTÕÆîÝ™L›vwßý¢¨QR’€ßßU=jV 6üU%-ἿFâk$C_ÃÖ¨úDT¿)`#(ÚZô•F ÙbE±K¨ªˆ– @’FûÖ2£­«Ùºþ;–}1ƒj¿Nèz®êRMnn®aVRRRèÝûg|ñÅW´m›‹ÍùMÏtBôz½,X°€­[·Æì …®à8¥ðXäu¿è0ÔñQqE9¿|8 }ììÂu F9ùD|‚Ž`0\a(b¿ƒs#Ã4ܬ X•ì@{Ýñ é‚ Ìœ­£êc:ñ“«Ë´T+´ø® I%èÓ#>ØT¨“ `ðžY5èReŽÛ‹ÊJ±Gå_h`¸îVl:{«ŠÈAPCàé†s”Gå¦L›5%éhº:ž‚ÇoXË'¥Tc“"fä¶X3d’©2˜BÛVDÔÇc” †Ëv‰Ñ$ϰån‚ºú¿ßÑ“z]ÍÔtŽàÕ庩‹I+)JÈ6¤»´óÄŠ˜_C¢G²…¡WÁ—Kd w)1ÖÅ{üüüÓ‡:ÄüùóéÖ­[Ì>YVSQ”ÀqGˆ6oj´âó¥QPvˆ?=Ê ³N $Ô U¬á}ª5ÜuTQÃþ@_ƒÏIØoÒÐ÷µ"š]Dlø­êqSGBÓV+x¨–êpi^löÎD?ÖŒVQ&)Yå‚65 ðÖ )Š]DuYñ%ˆ( ²Ç‚ì±H´SçrQgwQ+º8,dp˜tŽÐ‚J-…j5‰Z̓7䯲#‡,hªR»â·îFUµ¨ßV£´ô _~¹–üü¾äåµ%9ÙÍf?ãµÃ’’Þ~ûí8…'Z¢ª7S\œSwBC`ƒ„ã—R±è¸•`Œ?N/´lš“l® ‘4H¶$¼E> ¦ hh`+c¯I ’¢"ÕªFÒÒ—æ_ÈøÅ$i©Ç75ÍpÙ±}c{ê ~aÔX3úC!šq爲bóyƒ?¤6iôuÛÙH„ Dh“C†¹pSUw9ñ|„N|Q¹ŽZŒ%.$Z ~G-ª>ic^ß6†Œ°s`Ÿ×8ã÷ûyá…xõÕWT­ð'sœù|>^ýuÖ­[Ç¢¥ IDAT¬Y³¨©©Ñ‘ Ìºu›X»¶Eq˜æ€c’aTpLÃw¯Ö j*¨ZC¼^éÖ7a-P'@mxÓê%d¿•€ìÀ«¹ dX+$P#z¨¶x¨²%Rëqáoa#ÔJDm jGP»€’r' ÞöjsÝTe&RžšB™§¥Î Z39(dSJ&‡È œ4*i BÙC]È?è$´¢‚ÎN,X½ŸÂ}ûcUï¼3‡•+ÿìY°fÍN¬ˆ 9ñÉ'ŸPXXçÑôáÌ/DoâlƒÃ)pÅod¶Šu™ýç?ÿ‰k9å4BMÓX½z5o½õ555,Z´ˆÇœ_üâ´jÕŠ… —1wî&LäÌm©ôcj„"ÆœˆF2´ÐªÉáã ‚ø…°Ù¨ Ú 7êõP' ¹Ed‡ÈN½æ¢6¡Sða.ÔmI ÊáŠ3‚®$![$6+>›ŸäÂ+:©ÝÔJjÄDªE5B"¤RE U$S¡¥R­&Q#'RJ r ­¨AÄ$v)2aêûüfDùù=غu+óæÍcëÖ­>úèßÔÕ¥âpØHHpâpØÏØÎö^¯7nÞ dÃþš0qæ¡g+½~žDñÞŠ˜Eñ|@=~´”ªŸ„…ÊÊÊxýõ×Ù¹sgÓxƌ̛7§ûöC]]ª© “ãùC fÒ ‘Áˆ†¨ aa@ 'MÕ7¡­á¯HÕ."Û­\¼7uš‡ZÑ‹KôQ%x± A$!¬eÊ6 AÉJÀnåÿÙ{óh»ª:ß÷³ºÝï}ÎÉ99ÉIß' „&€   * ZU*W-ë–×[¾ûª,Gyë{ßs\G•UWê^ˆÍ¸Z– Š" Ò †Ð&!}Cú¾;99ÝîW3ß»›s®}Ò@IØ¿1VNæ^{¯~ÍßïûýE·2ÿ@E+BÁŠ‘·ãä* I†È0Dºú7ÀhgP´3(ÚôÚ*e(”rQ¼l‘³ o@ʱ<¾¥›—_†nû íÝÅÑ£½õ³}}»X¶ìI>ò‘K)•ÜÓæZ?í™gžaëÖ­¡Ï-k ¾? jñ³| ¶6Ô˜ q6͸@òRª·£KFò+¦fûëívoöBc½é‚B‹—Im˜'µ#(1BÿbÙMfV56.Å Òþ"C.m«³~£X*}! BÒ~8íNVù´…êþCT=&¨Û”-‘-©å…Lƒd2§\G9fèc)T¡ÄÒŽ•ÕðÍp_;Bªõ$<ã¸uÇ]Å["¢K¸š>iÞPwX֮ŠTþ˰ê&wC"-Q<¦o¦kôá1ŠJŒÐÅ •›"£|gzr?ø Wé ÙN±æOÀÕÿ±§~ò²òŽ ^xáþìÏþ¬žPwÖa<ñÄüêW¿ªÇ4„ vî<,¤Rù²åÎ9þLД@Р'ti”cª9ØF[ðjE«Uëê×l -ϱ1" Œ¸ÁpÂ%)áD\lË­ök6e#Ê‘!eåH9Q}hEE‰¦dF)šQŠFŒ¼'O‚< †I“%I–4ä Úô3 û²¥4ÙlŠb.?A³& à.™xÁDeÿ„CÇBöŸAÈohÀ¡C/²cÇ&®»î‚óöIæG?ú…‚ÊM&“ÜtÓ§yì±¶FÏØJ"Jàš Ù¹ÖA«/¿§Õô”ƒ‹%•1*Ê8U/C㶨ë#@‡ÚÒ÷…¡“Nžp|++ÔÎYªªžiîY,ýÿ¢Éë†v’™Z¼º¦Ë+·ëÔAIO¨]¯ïY¨E„Íë†k6\ ¤R0§a¿ºÞÉ{ bÄ‚¢r1cÑmƒ@)üÛì¦z?|,%ž:íÊ..¸¡›8¢xW­ZÅsÏ=Ç´iÓNK¬ð´áÁƒ¹çž{šèˆÚÀû¨ÔlàÈ hHogM-[všªÕ ö–í Ê) ìÊf,T ŒV\¥Â1ðâAÂÄO›D(£„c•qª@ècQ&BÒH'OÜ*b‹šÐnËF„ ,«¦WÄ%Wk’<ɺ+tØMS(&(çb¸ƒQ‚A§ ‚ ²F%®Y¬¾¤A œ‚õ xÏ*o¥ÿþïsÇ×3~üùé\¶l6l@hSÞ &ðÑÞÎcµjUµìü·kÿ|[—Å-5ž÷¡¡!žþy>ö±1~üø³ ƒ àûßÿ>›7on²¶˜šôPËš¡<4•ÁPB‹F­¥b£-Lð­ ¥B˜`™!?ÃhÌ£ lƒ nU–”M2Y£„e¹˜f€gX”Œ(#NœQ³H”RuaÔµI]"Uþa”"1J"J8y‘  *3Ä‚H0\N“-§È–’”r1İM0h#ú-0*j Y@X¦"'&‚õðW‚8¢\©M›ÖòÔSO0cÆL³R¥â|É-•JüñäÀ¡uŸüä';v,p õº´ì¼·éWv2ù’¶½Ò§|þâ‹/²cÇÆ÷¶ßûÓ „¯¿þ:=ôPèsËŠ‰Ì§PhUknRª€'ƒa™páAŸ Às hW÷–Ù¨`o‚ˆTܦAÌÄõ"ä½$F |“’¥`'¶ÒÄŒ VʲT€PÔ°R×¾D”²ˆP ¢”‚(E?ÞøëÇ(ã q¼b” ç ú-D¿YÁÁªË+W‚†ÆÀ5×á¿ùÍo¸ôÒËX¸ðR©8¶í`šç>îÙ³‡•+WÖ㢒c”Ÿÿü&~8Lj|VÈUª»F‹y-?¢¤qµ;âb˜Ò6 u›ºÂú¦9’Š+\ÄQÝÀz•£vm\î¨×Á4T—p¥ìR£]"¢ìlB eìl›®lcu‘¢WºŸñÆYx¯ÿ¤B«Zoo/K—.åÊ+¯ÄqÞWü´áàà ÷Ýw»w‡už¢Ñ)D"—Q(´*fŸúÌ0\¦Ð…€R/ÏäUh^ ŠñŠi`TK6U{ £ÑS”Ë(§p}‡¢—`8ž!ˈZ¥ú¼Ï4‚úþL<ì:ºCÙPö"”Ý®Á+W7ÁËÛx‘5 VAp ÚÁÕf…¹*–ª@èG€¯/€”LQ‰¬ä{ßû7¾üå$_ÛdÍ `gP£e-;+Íêȸò"†žx `X™„=üðÃï> !X¿~=¿ÿýï›ÌS4”/Z@øöÀ°™TÂ&®Q…„_‚ e§âß2lˆØ•¿µÔûª2Ò¤DÂ$ˆZøv€çø–P¢VÔ7°|“À3®‰([.cɬûóÐå¤`VÂlm6(*3YQÕÖÏ©XlB„¬\ù,ƒƒ_¥’•|nÛòåËÙ¶m[“5 €ñ­×¡eï=3 RX€ÓÓ©!ÀóÏ?ÏáÇ3æ­ç ¼m ÌçóÜwß}>|X;n¸!º[ xZl$à³Õ`tA)E!bàG¡/n DJäí ® ý Ú+@(Ò&ARàEfD`DD…‘\K\5@£NžQ!û¢\©(ª*päi$Âäi¸As æ…„U0¬ŸTÛË•ç*›íç—¿ü)W]u1Bˆs:{ô¡‡ *3=pûG`^•±žd:Eß»w/6lxçÐ÷}|ðA<rxÞDz{Çàûç†G4:̘1ÃÄb>ûö¥(2ÁÙXý»™‹Ô L²—zXV™öö£Œgp°“¾c3)ç¦U²J £‚t§¢!™0*c@Ìhˆw×[Û•ž´*W*kK KÒL°LÕ%ZAùKe EuV89P&„`Ë–Í<òÈb:;»éîn;§€°¿¿Ÿ_|‘ Pß›öövnûóKX;v}ý³üPŠƒ;§4¾Ô‡šL;„¢?P˜då”k”ítlaÔäþz»DŒIìUÜVÛ¥PŽ$;¥d¤"1öHŒúQv3Yqɱ1—)RáÝEæ ©P SáBV.Šr‹)ä`£ô8ªô>GFí­°@)‰k„÷zEýQ‰äÑ@)`\&¢´õ¡ ¬05Š6Ʊ“E £!¹‹æ1%a„²²2Ñg¯U¼`?ãÕz„Ñ’²¶YÃÒz}{½æhEt“®ê.¦(1ÁíL'[¿[?¸nªzŽ“1€ê•8p`3‡Ï¹òLo¼ñ}}}¡Ïo¹åŒ–P}ËZV±ä(˜v9¬Q“4×­[ÇÁƒß9 äµ×^ãØ±c¡u‰ÄX„ØAø\x¡É'?YqÇüæ7ËØ¸1N©ÔÃÙX}¢½½O}êKuˆD®¾z!_¼‚gŸ-g+Ë.R£éPÊqú¹ùæ ™3g¦òËÎÎNþôO¯å7ÖS*9Ð Šà&ÁOVòÓMQÑ×2E£Š…œ=*Ï åYa ÙõPŸŠB„‚êLPèÃRÅ!—\ÊÂ…Eî¼ó2vî<Äᅵ;’ÄãC¸n¥Ò!e Ï÷³eË:|ÿösæÝÎçó¼ùæ›ärjî¾mÛÜxãìnu-kYÅ☱(„;vìàÀ,X°à”äÞîØ±C‰e†Agg'×]w=ŸýìÝ>ÜËÆùë¿þ*ãÆà3Ÿù0ßúÖüüç”Jgݵµ,Ÿt:ú<[ƹâfkîJ1 Ÿd2Šm‡gµ™LÓ¦©¢TàUªž ZE7Ó®Ì õÅÔR±1*@'g’ú¢êÕU *îPš¹C+©¤™Ì þþï§òÅ/ÞA{{ß÷ùâoá¿þ×ÿ—ÿüŸÿ’}ûöñðÃñÊ+/“Ífë‹_|ŽRéoΙw{ÿþýìÚµ+Triú\‹ÁqŸÅd4_¤Q„ôhº‹ÕsÔÛýÙNÞè¸ÉO ’؆“)1ú}jÑÛ6£W‰á¥“åR¥][Ñ}"Ãfæ4Ún†µó,˜¸o&ÕÞE SE#EÌ ç—$§ÕC ÂñºpH0”ÕP¨‰*8ç Öv —Ö~0V+viûÔá(jaÞ¸Ïè|cæ^6"ŒŽ÷*×M80IéJÞú>2^µàcõÚ´emÑ”™Uâ{)²Êµ‹“WÚƒp+ê x˜´âÆmcPië®ò~ÚWç>&*1ÂíLWb„[†g1äe”}–^kS\¡â¡^‹Oj×åÕ‘Ø=o‘tbG'ÇžÏô7ºÅb‘µk+qÂhôÔò:NY«ÉóÏf³üìgOQ(tJnÉË}U{°Âh²àçÀ+@¹¥”](yPò«Kõÿe\<ü2¥Ê"jÌz™DX±„aeþü€[o½ŠÑ£;q‡X,ÆÜ¹p×]·“LFùó?ÿ<øàÏùð‡?¬Œ·nÝÄ–-ož3÷gß¾}Mëç^Åp*×?^¯öX f‰Ø¥úb;n% D^´Ì_ÓöÕÅ ´!T£šÈHK¹*¿^[jÕFJA”’Å+;êâI‹ïÔãFz<)<ˆ“LÊÊqÕÕM³LCZj¹cÇ[޳ÿÚbŠ@]8þbÔYu¢y ÑJˆß0„ºpê‹þ‰‡­\§÷­‰ç¯}ª‹+¼ÀV–À5e£¾„®m¬ |µ% ´53îcÅ|œÉ]ØSÂ*K+W¾¢ó Ìçó<ùä“õoÃ0˜2e úЇH§ÓAÀ¡C‡˜2eJè·\0“ž£š uv™çµñØc»øÞ÷þ5kÖ±{÷zè7üèGÏsøp‚3PÃø¶[¶8ü¯ÿõÏ>û<{÷î套^å;ßù¯¿îSIu% ’Áphd ôŠà–¡TB ˸¾„nÃ* òM@°XdËbÖ¬cÇŽÍüùóë1êÑ£Gó©O}ŠD¢1Bðøã¿;7æðB°oß¾¦µ/¼4†åв–µLöà=y\èóÕ«×P.Ÿ:žrïÞ××Ç’%K”Ï:;;ëU‚MÓdìØ±ìÚµ‹iÓ¦)ßÛ´i+Šº$×ÙÕYlÛ6†o}k5¿þõ2‹µk =šÄóÒçÅÃS*å—¿ìç•W~Å´iq*³}{@6;‰FF‹<:¯÷dù¶(§²µôÑ_T¦l@¸†0ÔÇõµ¬ÐF‚ŒïÖ-ƒ:t„Ñ£U0\»v-³gÏ®·gÏžM,Sbl/¼ðÇŽ££cÔY]£°P(°mÛ6òù¼òy2m2y–ƒeµeZÖ2e×Ý5y|eŠ/e‡ïÙ³—ÒÕ5úÌáÒ¥KPF³Û·ogùòåLš4 Ó4™;w.O>ù$3f̨VÒ†ñÛß.áàÁ8œ¥pA£¿ ¯½æa‚ Èp~)ý›”ËlÝê±}{€I„¨e¹ÈŠ4²(Ð@±Lƒ”/¡ƒÌW ë¯)ÁÂ&@(b…ˆ°vmž§žZÆØ±cë1ÂÝ»w³víZþäOþßx≧R `‡æ©§sà 7ÒÕÕF4zvº·‡‡‡Y¿~}èóYS.‹â‚ƒÙìæ ÖÔ×ív&’N6$æ%Æ’ŸÕˆ–ùXä‚åÇ1\F+ªœ•8“+q0² 1Êvq”⮃´±Æà¶<#X&iIöò$< ,”Úíà]$K°™D$NGxŠ^jÅUuÔ~ã«us£ 1+t× ¤´é€=CóÉmƒ°Žy§ÖÖ8F¢ËŲÆM> \·q<«&ÓÙ®l27OÍGp͈ª-jÏYƒ ™!#,†b„–ˆÔµG},ÅM¡¬´uêƒ#ÜËD…¹µ8“\Ð8¯ìÆQxÚ;7ÉP2ÌÇݰÛn À/06“ʬMrö5JR{w¥†e–Îz“G3¹@òìy¼þúëÌŸ?ÿÌaÅÝôxèó£G‡xôÑç=º‡¹sçÐÞÞŽ6Ÿÿü׸ñƃßüæ%)kôl6!œs.õþTaŠ]43Ô«\Ô€*¢ Tö^C1Âvd>…þWfÝ{ Mæü<ýôjî¼ójvíÚÏ믿ÄW¿úr¹¹\ž•+×ò«_½„ç©A6;Ì/~ñA0Ž›ožOOÏÙ„žçÑ××G©T"ràÀ¦@xÁ,ÓîãµN¿É ¯t1£HÄit6¶4÷q±µŽÑ$8%Þ Þö»RY¤>µE• Ñmò¶©ÿ?Ö¨j°Fšotþ•™ú6Jõ 6+P{ÜŽP-ÖkjAc"Ôë×ÞŽ¸ê \Û©j&j1àZÜQÞljø‹ú><ìãnCBG{>4©ppE£¸¢d†Gºvʫķ뀞WŠ5gTžó¶j¬`ÚéιõZ.[¶ŒO~ò“ \×¥½½¶¶¶Ó„}}}¬X±¢É‹ÝÆ¿ÿ»Ïoü+øÀtžzê©“–}KuØä¦öðFG…‡Õ‘búáÆ¹%’y¦¥w4Úä™!Å¡\%&d×pŽæ®ó±ÈIÂŽ%¢ôÓàüú†ò ^X³U9¬ZíäúI pöÌ´ )C’<IØÓÆ—'ôµǘØhvàRqÇ„qR¸Ít 9Mëá.R·‡´= Ð$9Uéºf½¤A…QTë€ å† ª‡ÍŒÈ6鲘ÓvbhÞ—!Ô©¿‡­8:£Zü.…Ê+ŒSPÚê{[±²vbzÌPw­º8Šë¼N…wZi7.Ž ˆIþï¶…{0µç}ª³Kò+_`oTâÄWðI© äÅÛ6’*4žû€‡QlôGÏRb£Y§:Þ@t``€Õ«W³aÃf̘Á׿þu…nuÒ@844ÄêÕ«›Œd#U lÙù5+¤ øøÚbk@hp|רh†zÌÐ×@ЗÀðDÕç¦KQº%<ï0AðîÔ+—Ë<øàƒ§‚™.‡Ì¸8E³öeÃQ&éf(EnkÌ>¹S“×›MâN:P­Ò–VUC¸Ṵ́~ƒ°³U@Ñã\z»éí•K– imUBs˜Qí Q #¨9MÆö:ðÑd\׸0ØÂÓzŲ„QM@3¦µK”š×g¬’¯•~íN&F¨oß?ddŒ ¥­Äˆµç£Æy¬ßî¸zæä”xiŠaåZeR€°£<@ª$ ಠ…¹¨ ¬¡î®Ë?üÃ?pË-·ð¾÷½Oy,NÊvìØÁÑ£G›¬ƒ"Þ²sç•ãwº.èÉ,:WP®5X[Ü& x2 X›‚ŒnF½x^ö]¹¢ëÖ­ã8eðt‡E{w+´Ð²–ϦwW€ðTlxx˜oûÛŠ®ïIobÛ¶m#áÄÖÝxO¢žäÒŒò0’h¶v%íû%ñ@ÙêkÇr"s€î&@xßç0ŸÏóío»I©2°, Ë²Ž „£í֣ز–ÇftWjœŠAÀâÅ‹yôÑGëÂ0'õ¦ !Z@øžÄšH/8Xs•ÊÚTrµ ýÿ#ÖgŸúg' ‚‡TÅC¡a…ÂBˆw´Zý/ùKž{î¹Ðç]]]üÝßýúЇxàøþ÷¿¯hŒZ–…9f2WÔ¯â¨d?ýS1‚WâwEbt"é_Qã7¨®ÔÊQÝ¥–GªÉpÕÛ†…eI´€„‰Tž°2®‘ÂNF"Àº²áÖŠÙ9&±Gš¿gIK| ?œXÞ²D¦S‚ ²Ê»M É’š6H­•G±»Écƒv²ùM^ ‰&bØß'•³<¦OÙ.]W“a­.ŸN§èÕ<CdBnj¹mã)®P‡²V4‰*GTÕ•iMEbÊ/ÍUZ$F íÓÅ©n£’OÐA¿²ý‰ìUž§NúB.á©ìT¾3‡ÍŠkô²á5$‚†ï3¾µ¤ÄcC3ÂËÀŽ Ðt&MšÄûoÿE‹ñw÷w<ù¤*Ð}ìØ1~úÓŸrÅW0þü“¶nÝÒp‹F“”ËcÎsÎÝ{åÞÀÔ@J/ŒÖãèäú‘@ðxŸÊÃeQaCÇ‘ Bx¬[·†}èæSã};¶dÉ’Éß4Mî¼óNþËù/8ŽÃw¿û]–.]ʆ €‹1iÚ,òF£Çš%rÑy½¤bJçêc…¸lzL0WMžCù¿2Ž0 ÇßdPJ€‘–âX¦¯èQcH–„#K݇a€“ÐÖ'5 Lh@ע¶½ Nu½)1¡@€©pá…+•"ÅòµŽPVÚzâJ³x¯Ñ”„Ùì^Õã Ç„eó4ðÕoi`§ <ƒi†C@¨ $É)ÏD"(ðׯ(j ç¨]M¢ ¦M€•QÞŸ¿ø‹¿àK_úßûÞ÷¸îºëعs§2¹Û¸q#Û¶móù<;wîäÍ7ß$›Í200ÀòåËCß5jGFpÝ …ï @ h^ø×$œiÊ €°à5[NÕRÕÞXíhž~úi&MªTSïèè`Μ9L™2Ç9sq¸h4š:ŽSÁJÇnðWõW|å+_©Ï c±S¦LnÒ·¬e-ÓmöTGÅg?ûÙz{ìØ±|á _à¿ÿ÷ÿ®Žl»^ÍÞɳyóf¶mÛF6›Å4M†‡‡CÐÑ1žþ~×mM ß[€(×=4•Qb!¬2£!ð½U¤:=È Ôî^~ùe6mÚD¹\¦££ƒ3fpÑEqÇwpà 7œ‘+‰DB@hF]v°fW^y%===uÑíX,ÆäÉ“9ÄŽÖcײ–§¨íK/½´>è­yaÆŒ ‡LlÛ®Çé \»v-_ûÚ×8|øp=ˆx†sš¬o2—·YRÙ)û ê1ÁS–‰h@g„tbuÓ?Ó íêàNÈqCÇ,[†!ÛTîgƒÊz¨Ä •aS8˜fY»–B5Ø*z1‹iï³±¬¾ÝÝÝÜrË-'|ç ¦¨¡ P*•øÙÏ~ÆòåËO R©4‰D‹?ز‘b{:íâtÄÿNÖRœ¬¼Ÿçyüþ÷¿gñâÅxÞéÐ,Z–Åܹs™1£2œ={ö;šÝÚ²–Ë–é0é쮀þo¾‘L&}B/Œ>#4V¯^̓>ØDGtdëèE2™jÝ…Ž|'ZÎ$¦ ûØF¶ýû÷óƒü€C‡Þ¹i$ÒÔ5ÚÌM3{ölæÎ[ÿËZÖ²“}Ï`âT Ûo¼ŽX<~Rïœââ‘GaݺuMwòùÏžŸüä'¡Ï»ººI§Û8.É£eï!0<›¬ ÕŸVuÃ$“Ü|óÍüö·¿ ­{ñÅùíoËW¿úÕ3>#löRvvvr饗òôÓO3{öl²»ÛØñÚ+œ5¤må!8ÔY#&°Æ4\NfwÀŽÛ¿EòÌ»QÙg‚¼Â=lÆ5%ÅLÅÝZù$©…G›Ô8¸ŒgãzPRêòEƒ2íƒRª¼×ä9Šã”ªôG]/l(Ž—dà “£é.u›šŽAJ¨b £lµm¸Ú#®×°Pål-õ S0f”ÚOfTNvž„´”x­¯¬Ï’R\ŸYR o*õ#eÓõNõ¡î:oc@quŽc¿¢{!IHrh=Þ!¢¢ñl'†]lQà ¸’×1Òï«%­£FÚr¨n芫;fi3L¦N :fpáEc°›UŒ„õd™R©ÄÁƒq]7Ôi|ÿûßç£ý('NäþᔚÎÎѤә¶ì,´6t²˜išÜÿýÜyçÜsÏ=üÓ?ý…B£.—ËìÚµë´ÅH@(ïW>¾n¸ÿøÇ\tÑE¬,Úä¦ä^ vJ?v+¨¦Ö¬)ÚÕV‹¬’\Sé¯ýwL×'•Û•:{ž‚ŽRóЫ’¬Û’Eµ£”HHi„2Ž+õrÍ<Ó:WѦ’,a»º>úß0(DF探:2F›€±ŒµÚÕò8°¬sAmG=WÛd9tÝePrð´¶«ŸÎ ÕkIVÓµO•›(£HL:±´® *ú‰RLW`•µÁM5`Hº‚öhE‘1ÕŒiÄc0c–A,f2yj8Vz<×hÆdš¦I$v#Í;—… ’Éd¸é¦›˜0a‚òÒvtt'Z}nËÎB‹U‘¡ñ’O›6[o½•T*Å5×\£<Ïõ_ÅbgGrÓÌ›7K.¹„‰[jM-kÙÉZĹó .½Â cMð„3‘€P~§NÊ‚ êÅC‰$ÝݵŒÑ–µìl³ZmFæê-·ÜB*•jú|Ÿ) l#„ælµýýë_?íÇѲ–ÏfZpùÕ&…<#&™0FhšfSu ×uëŠù===\rÉ%<ýôÓ”J%Òé4ÝÝcðZ¬‰–µÖAMñÆ0ÞÿþëêãºnSžìé–_;•aÍ.¹ä’ê—@ ÏU\£r»ÕU:˜'µµ<6â‰yØŠ»ÍÆS¸†1Š ÏÏB•H«P6†•v§t6.=’°ƒË4)FhùìSRu{V~¤È¶ùŽÉ`wÃÅëýÑ¥ÝëtÖÛ¦¢Éj HKîZB.ã £ð;Ç÷«´”.ÓG[¨”Ž&}³îÚ4 Bñ:¹] ®¸>Ò¥¸>к¿G4QÕ^F«Û,Æ•v{t@-£„_u}Õ7j@quO8@ÆkÜÿèÆfV*«Õ èzÕÕYâø)Ô˜n …ýžtžA¦ê2·Ü ”0~RÉ2¦i6íÊårC™Û¶¹êª«˜4i[·n%“ÉÐÓ3޽{[ÝmËÎV몿À±ØFšXŸ¹®Û”*ÇÏ8 !šÆC ÆÊZ»Rx¦ÒAÈ€Õl“fu¶ÜAWHøe¥-Çøl\(m<Úµd½-sM!t%¼0ë%ªa1(wØ ˜g%ò°à 0’ÐÕ@(ü8"žmÕCÄU,3tà 8þyÍ|â¸mÝôÚ%¢ –ˆ†€°¤;+"Ûƒ)Q„Py„zCSÊîvp•PÒ-’r¥?†š2r„6y‰GŠE»^)íYÔßX®YÙ,h¢—;BŒPáŽäÕGÍsæÌaâĉ8ŽC&“ ÉD~ó±¬a熑?;ìÓ¬gî:Í.É‘Ü4'£ÚÔ²–µì4¢É Þ¹]£år™ ê%˜–-[Æu×]Çœ9sسg/ì'"gä  £È˜1û¸òʉL™Òë¯îbÍš^ … ͇ºç¬¹Œ½‹+®˜ÀŒ=¼ñÆ^V¬8B>?é<;OQ£vrùåã˜3gk×îgùò O>Cçéã}ﻌ+¯¼”Çáµ×žçâ‹{èèèÀó¼w‡††By à N·z¦–µì2Ã0”ü€ú ¹X¬»LmÃ0Ž;#ìïïçw¿ûW^y%·Þz+¶m³uëVž{î8@(˜0a;÷Üó9.¿|mmiöí;ÈÏ~ö÷ß¿‘|~òysƒ:;7s⦅aÑ¢Kiooãðá£üâOòï¬ —›~Þœg:½‰ï|ç.®»îJFj§··Çûßüæ d³³Nûþ‰½üÕ_]Äç>÷u&L˜ÀÐÐ06làÇ?þ1_ûÚ×Þ±áÀÀ@h?†aÐÙÙyÂßf¦÷sÁüˆ|9ÁÑᆨ¦?àP|Sz¹Sf6öM–è™ÐàðÅÌã8 ì#E–Ñ4´CcCô9=ÞÁU$ÓtרƒG—´='ðéÉ5ør†/ˆ÷•åW]‰ Ó o¼Úa¹F„Þhƒèš‡¤Ø—‡­ÄÂ|,úè”va(5Mú%¾E%Fx@žª7Q¼u¦ÈŒo\Cbc4×›–#•«*\CZ0TçôõÑ©¸²{­¸F3F‘Ü;À¸ÐqïR3£óÛAq…ª9<¥Œa5nÂ67e”’"±fô ;ëÖ ê²nEÕd­<4ªë³M w¢*`ÇQµ1QC ÔAŒýÅ4MF §“æóyòù|cF8RŒ0Ö­[GOOW_}u=Æ2jÔ(†††yóÍ?âû§·Š¶aôqûísøÄ'n«§¶¶··s÷ÝK—îâµ×òqîÓ6 ã·Ü2…O}êcÊyþ‡ÿðq–,Ù‹/f"uœç7Ü0ž?ýÓ×g\ííí|îsiž}v-Ï=7ŒéÓ¸¿<óç'¹ûîÛ™;wN}ãÇcÓ¦lÞ¼ù‹;v¬é~F}ÂßFÒeÚÓÄ3ðp3j‡ _¶(0Z*îuI%K †â”:y1ŠŠf„²Ó«á| uÞ #|2nVv `È\GCí´„¥vµ3/¥_ –‰p”.å¶žSÇÆ.EHß4‡ Rz;k¥4MV?¤±j…ªù¢€qAë›%.)ñ;¢ ‰)çQ ¦l#O"´Íœ«ž‡;ë´Êë}ÔãV±]åW•c ƒà0¤R5 44 L¢ÆW]mPájß/jÛó›Ï»ººBŸçr¹:ž0F¸~ýz.»ì2% Ü0 .¼ð2ƒ pOóhþûØRU‹ŠM˜ÐÃÕWOÇq œðñ_:Ïîî.®¿~.‘ÈùŹýökBÏX{{7ß| ÑèðiÝŸã¸úêéL˜Ð£|nYW\qkÖ¬yÇb„ÇŽk:#löR¶¬e-;3fšfS/LGŸ3f ûöí ­ïíí¥XÆéñ¸n‚M›¶…>β{w¾ïœ7Çuclܸ½Ét½Àއñ¼óã<=/ƦM»´l®R©Ì–-ûñ¼ÓëŽô}‡Ý»ûΆÖíÝ»—žžžc„ï„k´"FÑÑêZÖ²wGrÖ2¸Í Bòjµ´a,X°€W_}µ^Ë­¶×^{bÑÁ²No‡].wó«_=ÇîŽ `ùò5¼ôÒn|ÿü¨xáº]<òÈÙ·o¿òùªUëX²d ¾Ÿ9OÎs=örH¾lãÆÍ<ûì:<¯í4a’—^ÚÅòå«•D•ƒòÆop饗bšfS¢ûñø}§þ—%ˤÓéÓ¸-kYËF6Ã0š¡<#´=Ïcpp0ô¥t:M$aòäÉ,\¸{«®ºŠd2É’%K0Í“'ÏÄ0Nwí+VtóéO»îº‘¹sgòÄKøÝï6pèÐTΟlÊ›7Oá®»þ†;>‹/¾?üáe~x9L?ÎÓaÇŽüÉŸ|ƒO~ò:.¿|>K—.ç׿~…½{§ T¼m³8thó7?aéÒ|ä#׳yó66o^ÇúOA2™$•J5££Gž¶£ÈårM¹K'˜Å›ü÷ÕÛ3No¤ñÛBWœÞ¶FÕmϰ¶1劶œÈâÒ‰z~q0¯è#”µäOãªû°=ŸQ}R悆,` ðïË orJúºÍ*¨×‘Û˜Yo‰²Gª¼ëa‡’cô‚Å2÷Í$P„ YM}@Od =T§QáC(IEÍ,¯‘öû5ì#t+1¹ƒô(1ÁŒÓ’eÆ*<ƒC=”}5üཀྵålä¸1Âl{;D_(bÙxj‡²À ,CÝF€¢Z¿OÝGr2z2ŒÜŽjíjÜïáÂ2ò«<¾9¦R)b±˜òN–Ëe²Ù,A`—Ëee¶W³¶¶6¢Ñ(¶msË-·p饗òúë¯ÓÛÛËg?{7Ù¬Ïc­?#]g¹<ŠeËR¼þúËD" —ë@ˆ Ï»‘ŠçexõÕ+W®$]J>ßFÌ;ïÎ3R¬\9‡5kÖ‹½L¡Á÷çÒ”i|Lˆ8»vÍåÞ{ðþÏ÷I§;ùÅ/þ/.¼pf}×,1æÈ‘#§í†‡‡›çOC‰'¸”F1\ŠÑÆ9¸8JQUOI„±ñš=—C¢ÙrÛÁUÚ¾’hbã©mTÔbêÓsÂl•ôKðmSúº©dxV:ß(E©§+U¥Ÿe ”ÛC!’MŠ ËI%z»v-õ¶š,„¶9N²L³mê‚ØzQ\]õG'Ô‡Ú…¨ƒgáj^²„Z-íÀ7À7”k)SH€á¯¯ N4]#œ<#·E“cùžFikkS€PÁÀÀ®ëžxFX³®®.n½õÖʨ¬Xbóæ=g|ÆT.O¤\>ß'î6®;×=ßÏÓÂóƑ;s{b4Ùìh’É$¦Ùx–k£Ã39#Ìf³Mg„­D™–µì]ð¿E"¤Ói>¬|>88ˆçy˜®ëŽ„­XFËÎGK&“M°¯¯¯„-kÙyhÑh”L&œw188X™Ž„™L¦)­¢e-;×-N7ÂÞÞÞ3„'ëõ°>Û˜âQnî_*ÍvMÅ–&Ø6zR½`*î8“@Ô†J 0©Õ”c]¶ð”úrf ˆ¥z…>8’Ȳá U\Ÿ¡ÛP–t ]Óf3”s^‡&ÍZæ×Û… ΖRC„!ð,rýj®ì"6LA¬MÙ6Ƨ jÍx„yTž²ÎKÔc‚רšhek„6Ws…µ˜á1F—P?DFq…æH*îÕr!†çiýµñÚƒêVÌ¢º/´‘«46†iÒ½È(…˜ý !Å(1ºx„Æ#4b¨®Ï.Ôtˆ­@åz¨ÜE5¦(Fž6ºkÔuÝãÆ[Ö²óÏö¡ÀP+CŸ6IéqìI1%ÀTbgÍâXÊJÑÁU”C¬zõ*Hdt,Wë¤tý+ †õc4TÕ»©P´œüR N>hUXÜ‘6 3€ qN¦„bˆá¸¤Ú. ÅM¸[ï} ½S,šëc)÷?À…®CR# †#Ôsã"Ú3âhm›0¡>Ѐï$d‹k1‘€°åmÙ{ÎÞ©a3:FË5Ú²–½óF›jüÖ\£fË5Ú²÷š%“ɦƒ¼w"Fx2:£-kYËN¯Õ’eFÂc„©Tª„-;¯_ Ó4ÂûÐÐårù´<÷o7Yf“øŸ®·'F÷rhlƒ7˜aH)rk‚nT×®¬ i{mÇTW­ O¯?'ù˜r­7 yª–d€*€ìP)\û¹mÒo¸oKDØËÄzÛÅa ªû ×ÆÚl#F Ûä_kl8,ùçL”¢Ä²(Mm¸Ä K°{FD¹n~·ê¯Ó õަ7DÁ5Y Žäv6´k_½”Z[ucæI† ñNQÑý ª[6Àò!0¥#tqª[ÑÑ,âí :‰HóãÎå¶ô$ÚEãÚNºôñ¼ä™@XtÛÕöGu}ê"ÜwªÛ rÑ£ÞähŠvcP;6'5Â;Üd™ÁÁAÊG!“ÉdF¬§Ö²–ëÖÙÙ‰eY AÀÑ£G7nÜÛÚ¶ïûuPÕg¢ÍÊÁ4³2%I#efé7ÛÔ)I±¬ oPïœ%Ž ˆ{0ÕŽi$Ó×û¨ÊÿžÖÖÕaŽ˜gZJç.Çã\œæ1B¿Lµ-µc•Çñ&!Ò¸(X0 Êž „ú>›µu Ô ØêE-¼Szftža€˰ õ¯¡}®‹'ÙÚ„9z>Êý1¥Ü*³´~]ÌEéþ CÝgºÉ1èé£Ú3'œ,#¡è!Ýžr̦dE”ëÖÌFŠö÷÷W\£Íâ"±XŒd2Ùê-[vÞZGGGHð\qZÜ£¥R‰lÂd{{{½"vËZÖ²wÎ,Ë"•J…tµk¥˜ša<oaËÎk ”N7)¶ªÓ·¬eï¼Aд$š‚cÇŽa7{ñ[3–µf„ooôÙ,ÎØÛÛËòåË™9sæ ·q¬w4+ß¼ªÞÞÔ‘å™—ÔÛis˜)ö®Æà•=RÙ$yf±¥Þn3‡ø@j©²3¶Ìœ„SÓeÜöPc€*W-@åx%A*%ˆï˜¥A)åDtqèE¡f ¼7¥¾¨Ï€—¥/”]R; Ñe“–{# îP“(úâjBSž¸¦¦RQšÅH®9šë4©ÓlÍg"ªW(ó Û;ûñ„:°ëŸØ£¡¡º%QÛí(nɳ]qñîe¢¢±º•YJ}Ê`ŒER4x©]Ý}D}5s:’÷0„r1L§ð¥÷²×êRܱ{œ ͆«|‹1“a©0çÝLdn—òÑ£GYµjU %`gß IDATkem]r*þÔÓ]›­e-;›,•J…*P!N —0“Épíµ×òè£rðàAeFøÀð©O}ê„.R¯ìíõàÈ7ƒR4BI4Ž7%²Jœ*A^éÓÒ +É3¦ IQb„uýã£ß= =íû¶ Br§æâ„b„!MÎÀQb|äQtÊÀ€<ŠE7@?&xÒ}7DH£Sçøé1C=&h BÕÞGŠU5CËËÀ Å!•Á¾„z2Žm7‰Iê‰ÑI ø<Â"ܦz„vdmÙqµ‰©1EÇÄ*( =.©?÷iK‰#çˆ+ÏH?ŠàÁº‘ôѦ³¾M›6ñÌ3Ï „ºók¯½–Ù³gWèÍF®»wï•iYËÎ7Ɇ šfuº§IôõŠ+®`Μ9¡„³•+W²nݺムç1°}<~üãPȶnZËZ&ƒ[ 8°a€í¬¥Ø{ü÷Ãu]/^ä:ŽÃÍ7ßÌèÑ£1-Zrõõõ±lÙ²¦Š3u¤Î娹s5®[æLUhYËÞš«Óƒpê"ìß¿Ÿ¥K—†€Ð²,-ZtZŽ`âĉ\sÍ5!¾b¹\æÁ Låwïþûïç_ÿë—áß„ÝëAˆÖ-mYËdüé/³ô»›ùÃ_<Ê«_ùëþñ²;ûAø]Éf³üú׿}>uêT-ZD,þâŠ+¸ð •Qª‚矞ݻw‡À¾ïóúë¯ñOÿô?yùåW)•îÆJ~‡–µìÝ´mÀóT|<zªÿo€ák¯½Æ¦M›B`tñÅsñÅŸ–£0M“üãüð‡?T7^xáöìÙÃäɺzÅb‘Å‹sß}÷±|ùr$ßÀ›!{qã],Øí %ñ63°vvÃÝ61±›¹S74Þ[LKu×–Kå †b„Ê—É”S L@Ò ’Ù1Rº=Q¤ a‰¨ÂKsq”dâŠ^Bu}fµcˆ‚Tž°"Ù%wY ¯ HI2q† Wg)-^çk'-0”ó¨}¦^&Oi;ZÌ/ƒ*£  ×2 )îшö{/TvKwé:ãUwiatB9Îr.‚\—®PÝÒ€ h<3GÌnE’o'SÍÕ2ŽÂ¯ÜgN$"Tp:™UÎËÆSÚ}Æ(åzïa’"¸‚… ÒÆÑW^gõÿ¥4Pb÷#«Øÿôv<´œ â‚¿ÿÿH$îÓeË–±mÛ¶Ð;º`ÁæÍ«”íñãÇóñœ7*m;vì`ñâÅÌ›7ÇqÈårlß¾{ï½—‡zˆR©TíHvb=umYËÞ=+[Z\î‡@;¥Ò5”Ë*Ú‚Ï=÷œ»«Í¿üå/‡Ò«ßŽ]|ñżÿýïç‘GQ¡zÛ6~ðƒp÷ÝwÓÞÞÎúõë¹çž{xá…¤÷J²}>"0ñ;¥útŽC9)Åñ (‚Çi†ÕZr†0š›þÙ‰^aã8Àh¡hMŠx‘Æ1{˜JgíU+ŽÔð…Ž;j5 þ{¤ ~2ÚÚ1ÚÒIÛôB #›ïMê ªm« xʦÿ>À é™êm”Ó,)ÛŒR Å c1U@ÁiÇl ú%µ- µ]&¢Sž„ÒÎ’RÎËDà*€–©œ‹ƒ{Üm ‘Q€°NŽ•SÜ’'¬‘ˆãåÊ ¬?À}ï!ê|éK_"‘HpèÐ!þå_þ%æëêêâCúP}¢g'“I®¹æ&L˜ÀîÝ»•YáC=ÄܹsikkcñâÅüô§?eÏž=Ê‹îfìØ›ÈåÊ ¹”Ë­¸bËÞ-Vi½fñôÓ3H¥îbÍš5,Y²$6Ó§OçÚk¯=­Gcš&ŸÿüçyôÑG•qppoûÛüüç?碋.béÒ¥ärÇ©p^Ú¦MsZÖ²÷®wâð7]ßùÎwøÝï~ǘ1cX³f CCCMÝ¢7Üpƒ4øæÍ›Ç%—\¹µk×òå/™t:ÍŽ;BJŽs˜[omg×.—U«ú9r¤D+ǦeïŽmg$©”û￟çž{Žýû÷7×þÈG>rÒ•!NÅ-ZÄœ9sظq£:C‚½{÷²wïÞo$û,pEëö¶¬e€wl˜âö#®‚€-[¶°eË–¦ë-Ëâ†n`âĉ*Ž3†k®¹†?üá!ôÜ¿ÿqÊuótv‘ÉL`÷î½½eZ±Â–½ó¯Ž<©*•X³fMÓucÆŒáºë®;iù³S±t:Í]wÝÅ7¿ùÍ·¾‘Ò³0ëÿ뤲L©2‰Éw5í 3+Óxñ'Z»ykëí„[ vX¡ETªþÚš€N‡LçûHÒ“x¶EŸDâ+aHŠ­•‰P’Ü^.v˜>aÙáŸÌ4Pi0UjÛsFÃ…f˜=c¤z„ ÿÕmÔã–ÝOI¶Md‡SÊuñ]µH^2¥Îøí˜§]V5vÖA¿ÒNk1íØ`Š\(–©G¯»Xˆªz¦nÄQõMm½†bL¡'`œ3ô°”2^]UÚ•+a(‹‰ìS8“•Øgã9ß/ûûÃÁ Q¹qo1gYŸùÌg”Œn»æÂ¹í¶Ûø·û7Ö®]{Jõ};ÖpãóikÛeUbAàÀ ¸4-kÙ[7ÓôÂ@ˆ*Ž*m´Ø“LÜÈ2Ú<$uB½´I×"&JXzU(—pÍ:4±NЖ_q%yFXj½Á2ÑP­±g) P‰S)á´ IU\Ú¥Ž®¤}é~ÄcyéTíÊO4Ò5z;&ž |ÜRD¹N¿Sõi¶BÜA8ñ”ØZD‹­yØ! ÔzœÑ¶<-ç¸Âß.áõòýË“PŽ¡H,-ã`I¿±ª‘áÆ ¤ºÖÊ«@”ìW½%4 ƒx<ÎM7ÝÄE]¤]ߪ͚5‹›nº‰-[¶4åW8Mõ<Ö­[üy׋íãúë\W°~ý1úúbõÎÅóM†—-kÙÉZÇɦéÒÝí²`Ašþ~—M›Š D ‚þSÞjWW7Þx#ãÇ?cG>wî\î½÷^žzê)Ö®]ËÖ­[9|ø°¢rá8Ó¦M#•J±jÕ*5¸ï ÃÑ¥ UjoYËÞ‹&¸O?^‘é„ 3ˆÚ‰Ûß«„øâñ8Ó¦Mcúôé\vÙe|⟠zm-¿ò•¯ÐÓÓÊ+X±b»wïV^ÖT*E±X Éԙ䄱 † ã \°Á_ðå‚Á`,‚M  `PÎyµy'u¨ïžÙíê‰$`%ö¹CCúæ³u*hŽúü¯ÿpq•ʇÜ7öH.œ:Œá…Ci<†5kÖPUUE=<嘙èæêºNMM 555Œ9’éÓ§“H$Ðu’’Ö®]Ë}÷Ý×FŸ !8üðÙ0a¦i¶ÉWõë×±cǶÀI'U°}û-z; ;äªPÓl¦²²‘HÄfÇŽbR©ÒŒ¿ó дEEuTV&hj Q__†mÇ:è*=Åá‡\tÑisÌQ!(--¥¦¦+«W¯fÙ²eqÄD"fÌ8Ÿÿý߇¨««kûtEE%—\r eeeœ{î¹hšF4%ç¨)}þ¡OŸ>ôéÓ)e‡Ãa&OžÌ< ¼¿iÃ.ÂËÿÉqcËš§Ùé~ˆÑÊa´§?…,›Â¾Ã!×}j¢æà Ô’“'Mõ¡&H›j}Áßm %¸ÂÂÌÉTR-Ç'¤é.ĤŸ P=,:ˆ2Û7Ùpˆ–¶*ƒµßWªáRŒZ¤€¸ÒúÚòùý‰æÒÕiÕG¨ÄÛpR¡ý~‡@æä ú¯…­a˜d¦0oö§ÌeCÌœ$|µŸ€T071tºrÜÁš‰2síç •côŽ;¥W¡'â÷Ÿ6‚ÿ°JœÆ¶àštÒEΚ .………\pêN­È$ÆöëGß¾}?Öw¿0™­áTUUEyy9º®ÓµkWN:é$u¶“H´•q]—õë×sÄG((¬icÆCŸ>Þ ²#Rp55Û¹üò>úMž{în¸¡/ÇïD×[ 4ŒzNúhúôéÓ¦ßÖÜÜÌŸþô'›8ûì³0 ƒÙ³_cèС{ÜxSS/¼0‡-[B’†+-­eúôKÛŽ¼ ŠqãFqÔQ‹xõÕ4®=ho$ÓlfÒ¤¡ 2Py½²²’ .˜Ä’%o“Jõì`@aÑ¢ÍÌû.}úÖVão÷îÝ<ûìs\yåÌžý³fÍâÿø‡iÙ«W†~PþVååå|å+_áwÞQ^ß±Ñâ•w«h9”.f#|*:‘º Ú)?±]"ÿOáÉåÁ/B͹+GI=°uD¹ÊÔ šŒvA3j¿Á·ÕGhaÐäs:%Õœ@€n:TW·§…)1ÝvjM.f³¯ïPéóé8Ôàó•âRÃÎÀ L—P'½Qª•´ Ç£lÛîSÔ:.¹þ؈:æϳˆf„F,£^¡«¨U¨ÑJö¨ÒtNúEn9)uì ¦74S¨ø(Q¨Ñ0)eŸI"Êö( …ö, ®h‘z·Xò}—‹R‘êm”2[‡§7`—èl«…í¯ÅIÆÝ<:çœs>ýBè“|(ëÿ[·n]&gÐeÕªUÜsÏÝÌŸ¿èaÇŽf–.ý\p>úwÞz+E"ѽC>†áPVV’óz4!3âà^ áRRË[¯¢¢M³;àQkÔÖÖðóŸ?Ç[o-bÆŒ¯²nÝfþò—WX° Í[oý7ñøZöî]¢”OB0eÊ**ÊÊß*‰0fÌzöì©(Ï8¶dÞ3»©¹p<Ñ2›"Ÿ¯+œ°ˆlòù€6ƒô§G ç”P¥ŒøŠP °"šS0Hø|€†übc(~KC©gc(y…ù|„A½L¡I¢ÑVÈüIÜ:Žr‚>AG †Ñp•íù,ŒØ¢c£¡ ùÝ;B   ·“[OÐ$­ø#íÐ( ¥ ž‰Ïñ¯ýé@úZ0O07øESê,¶ËÉMTƒgT?¦™ ‡ N”¢Æ ©úS·¡ˆ¬—íhD&àÝ÷àƒäˆ8Œ?ž>}ú|1@XYYɸqãxöÙgÛTò¥”$“Iêëwrî¹óúëÛyå•ͼðÂ_¼‹žèB{•ŠŽg{÷VðÄÏ3xðà6ÿŒã8Ì›·˜… ÷â8Õ71š.â…sþù8òÈ¡í7wk+ÿû¿ÿ ‘¨ìÇ-e˜­[çá‡ëyê©ßaYR©n@„––zàM9­¨¨`êÔ)ÆÊßJÁСC9æ˜cr$Ø6ÏÙÄžå»9ü„Nº¬Ó¾Ö’€ÙKaóžÀÝàœéÓ‰F?=S§}ÒuôèÑ~øá9ÛÞ)¦Ù@·n…˜f‰D?‰~¨:IÏl»„çž[σ>Æòå+زe O>ù ?üOvîŒ~Ò9CGZg°j•ν÷>Î?ÿù&Û¶mcþü…ü÷ÿ‘ Ò(qòÒÊhiH*Õ+³¼Ø ìÈyçøñã°Y½ÚAÊpF§ó`ŒàË›ËÚ°aÃ?~|^_èÁf#FŒ`̘1¬^½Z©¯M0ÿÏ›po9µ ìÝÀ£lKØãcŒ ]Ô›õüX~N ÖŸ+4Ò¾<ÀÅÌe´óø ý}]ñ:è9 8R ^É„þBºùúA  ŠQÇ€Ì+Œ’P@ÅÀ¦@´¿Ç&Sý1":v÷ûE´ä$Èû¯”¥_è¹Í9@´àµNÎËAW€0AT Ž) ®]’(ºo»‰¥“žÉ áU‡Ãê0e¥©­]III={F)-50̓aÀæ==„Z` ¶NûllcÞÕ`uu¦NýêAM‰í˜cŽáØcÍy½~m›^]‡kwÿì´CÓšlxòÑ89ŽÅúõï0eÊd4-Ä–- êꬄbÍO…JÚ}‚2ðšÌ³=øÞNût¶Ø@>Zôšk®iKº?”l̘1}ôÑ,\¸°ýE [æl¤è­—˜Ø«œJ§ ¿„f¡£|ñZèØña™–µ ûúÀ6b7Õ¾)HTé[˜Ôú ï:è4øŠØæ –©õõ]4âJ±XI8 £á*IÙ.¾$½ ÏOǡ܈bà()nŽÈ¶?¸&ûžàøà÷¥¥ )ÓZ[7õiwI)h®)TF—.Åj¤ÒѼ§ôG°XIˆ?‚+þµžµ{ÐÝö¾±ÇA8>mÒ´ îþǘˆPý¯ÅQK™Ÿ—×´€/À1R”ÂÖT-Y¿v¬©ôsêba~Ï›&$ÓmFXRõV1¨MÀ“Àî< Âï_{6—|«;8¬GBMÓ;v,Ó¦MãñÇWÔ=¶lÙÄ’%¯qÔQç0wî:¢ŒW~ÿŸ–Å>À.ºûG·?•µËªGkšÆ•W^ÉàÁƒ)Z4kUUU|ûÛßfùòåJ9)+nñâý›9iÄH+s ˆù8B¨•ܳ¯ùç aõ=ÒÔrD²ýý|Õ#ö×wЕ¾D(Áù ÓzÁ2®èÜýdè8J0F°¯>ï]u´*ÔGHæD®ú‹ùÚ jUÎ+6”s( D*å ÈñŸgq5¡ÞI¢;¾8 Š Nê£ -Á78 ê1ë0)´@0Œ«ÕuòL‚Óõ;…ô½–o(5À1àåðÚŽ\l¯®®æºk¯ ¦æÀ>ç¤[uu5gžy&]»æ&Ì?÷Üߨ½{SL¥Èúý‚ô¦™iÙ‘#äká<Í¿ÝôíÃ@¥K;}‡ŸÎdf%¸&gKŸ>}8ÿüó1 ãBÓ49ñÄ9þøãs¶½ÿn‚½ÐÜy{tÚ!c»ã0k=ì ®›4Áå—_Nuõ79 @¨i'žx"cÆŒÉInlnnæÿxÛNu0Ôò€ŸCx‰ÛùZ4Ó"ûD?ú¶?¹%ñ"EÕûÈ0 Î9眼⇒õéÓ‡¯~õ«””¨2€RÂ_¨£©Îî¼E:í˜î¾³ foÉÝV4¨;§žýÕϤzÌ‹`©ªªbƌ̙3‡={T-œuëþMQQ/``ºäù‚c ÔÀ•" þd•mÙ¾æ{MОô]çwR¤ß–@@,àðÃqÆS(,,<¤Ï> qæ™gò—¿ü…ùóç+Û¶¼Ÿä­Ûw2ÊŸeGU4Œ@Nîqo _{7QboIûND){|>À8ì¢=R/Mˆ:Úõ\?JB}#*©Ñ méѧz` «R¡*uê(bÕù¶©Ð.®Z)§DS}ˆÅ4)Ô¨…Iv)ç0ˆ”Ï8Ê1KªÙ­Þ·¬RúÃê× ù¯#«ª°ÖUÝâV`Ñ?Âܺ)ЬMD %²üˆ:ÜpûNwkÕ$}Å|‹hV´D›(V¨ïVrëÎîÐj”ºˆ½GlÃô•OK…__Aß ®“8åë}†|&Ï×B!gžy&³gÏæþûïW¯wªØǀ=pÝJvïNÓÜüEÌ`ý ¤0ýÿûÛ¾¢>³@èø@Ðöýïoö>>ß ˆͶór®Uaa!\p£GHR¢AëÛ·/—]v+V¬PJN¥,øŸ—-ƆcÊÛP*×ÿ ì0Kndô°FZ7}@§ú½Ð‡Òúƒ¢Úþ¾‹–SA}:eŽJ°Økö}Áwìk»ÈéËœ~[ðFÛYã"šs€Ð¯€ã¢åˆQ'X-¾œ:¥_j7!ü $M¨¢IMÀþ2e>JQŸdàŠú ¿£éZ¸Rðû[ƒÅ‚ƒ¿U°/@Z˜J%Y(™ór]xøixcižc?rö¤óp#ŸÍ„W;;BpÝu×Ñ«W¯œméô6*+×rì±Etïù‚V€ÙU^È72D‚L‹ái¢âioþ/òmùZ¯iÓùýˆ©ÍZ€…äÊ¢ÀÈ‘G·ù¿,vÎ9ç0dHî¬x] <²:ËvÚAj«×Âï~ŸgC4ãOƒC>³ïÖô;ì0fΜ‰iª3$ËJ³~ý|Z[Q\üEDfƒcü>À°¸‚@˜ ý øa`ôš¨~ÃNÜ¿I4mÑèbt=7]Â0 ®»î:;ì°/ÕU)--åšk®Éy¾R.<· þUû¡QôÖiÎZãðð#°~cžý‡)€a~fßÀ§Òº®sÖYgñòË/3{öì¶A«ÿþœ}öÙ v$Ï<ó&k×Ö‘HŽmëXÖGyrå'4n± IDATÜ–oEhú€*‚êv1}€¥¡Ò™n†Gp|­Ìÿ¶ð¬}€^viÐ,*+—1eÊ0N8á.ÈóÏ?϶mÛÚÞ1uêTN;íT CÿÒ]SO=•É“'óì³Ï*¯oŽÃÃ[àØPU Œñm œ«tWøvê²Þ,eƒÏ‘ØL1;|ɇ ¢ŠÐÂT|„¹y„ºâ3”hJ=Cï°R¾©ªT|†Ù}S.üý -éæÙ´°/=BHI¬VuÓÈú@a^}»BùIMЫd—2ÇN†Õ¡TwÕGÝlP¿#²YMÑ«¥:|€JÝm5Ñ»> ¡* ýp`ŸâÞR5=f']íÙfŠrêZÊk{ ªÐ¥Íâ¹u<ýÒ&’ÉÜ\ó{®ù7¶?Á°Ï(Mø3á”úöíËÌ™3Y³f ›6mâä“OæÁ¤G!˜:u =öþórš›çý÷‰|9xÁÿùíÁäu„fü²-¸rËþõ¯Ú2Á2"G(³ÇôZ>0Lãy£³ª²f¦¯âþ@šN0‡®]ßçÿþïzN:iš&¸øâ øîw¿ËgœÁ¶mÛ4h7ß|sŽ´ß—ÅÊÊʸîºëXºt)7¶O¡¥„Yà”ðÑ ºŪÀ˜X.°ŠÛGÏ`áÝ%a:E8ÇG¸?Ÿ`>óû=àʸ+óŒ¾ e2 ÛûÁ}h øåËsó¿&èéÀs×"ìC ªD‡X4¡†I G$ÁêýÝÇ¿6„"ϰ¡íg;y€18Úç‘ðü8¡È$”ûÃLÓL‘*°ôõ[[yê¡f6¯ËÁI“&1ó›ß@×µÏô™úLö.„`âĉ|ýë_§¤¤„óÎ;Ã; ]×Ñ4X,Æ 'ÏÈ‘ôî%ítÉ<©•@9Pši%>Š2õh²ïÔ¢¼éÀ,ÕY’ù޲Àß Ø{ŸÈP "ÓÚ(Ñ¢Ì{Š}û)ñ}ÖO«ú}‡aß ÔÌŒ_nÓõFN9eÇs†áÝ/º®3tèP¦L™B—.]¸æšk8pà—ö !1b3fÌÈ)JêJ¸c¬®ï¼—:í ˜öÚ’yÛÅ{/Ôæ¬Šk øá ?øLÒ%>—!xÒkßþö·™;w.ÇsLÎöÊÊ zô(Á²¢D"U™éí[Y9y¨Ç|íÀŠ*N8¼¤RUÐÊúÃ> , €TvUhäªA(ü37ÿ Ôö­þ,¼­ìô<Ü„ŸfÍŠPˆ&"‘Fl;„e•Ž»7Í$ÇE4ªTišÆñÇO:fêÔ©_ÚÕ`ÖŠŠŠ8÷Üs™={6 ,P õni†;æÃÝà,Ö9ØvZǵMË[xîžÍ¤â*­›#g dàÑ}?—ãøLÃíz÷îÍ¥—^ÊÛo¿ÍðáÕmÛ¶mcåÊ¥ z&„X»Þ¥¶Îd÷^hn)}©ÒiƒëdþwÚ_kÎáð:† ÙÅôé'`šO>ù&Ë–“Lö÷­ÞнUž(Ȭò¢ …A„A„@èÙÑ^¥‚R£Š<©ƒÔ¼¿®‘éÞÿm4«?oQñ` H W3fL9gŸ} k×nåÙgç³~}O§ä¬G°,\8xü,ì\×eíÚµœ{î¹yŒ¾Œ6dÈf̘ÁÊ•+innVV…ϬÒ)ÚÓŸ±SGh4pBZ`Òa)þ² ÙAM[¿•[}ŽÅ4¡œ¼@-¿œz„Ò`oªÒ÷ûJ„)Š2¢}¼À¹|>”Ž3°?TÆÍ¿]# u ^¶ŽßvI U®N€Q”ï^V8AÕ6ú+ßÑè†êó« ô»å™çŠé¡F+TrªÕŒaûÄÞã(Ôgœå÷¯§LÉÝJ÷œô‰jv·ù…íxšoÝÈî¹÷À€#Ü;ݦ´È9øàüóÏçÿý¿ÿÇ»ï¾ËÀ …BìÞ½›Y³fñä“OpÖY’sι‚MÛ`éJ‡yK¬ÞÅq%H×kŽ Žãýµ]/á$û7†¡ÐFf̈ò‹_ÜA×®žsdÆŒÉÜ~ûùãm’É*ÍZzŒ0!Ð 0tÐ5OtÖŸkO€mõ»$ÛšGGϤj`ë`™ Ã^#I{@Nœv?$äú@;bðŒ¤´t·Ür*_ü5b±ŽãpÙe›¸ôÒŸñ¯’ë”øø+MÇYÌ«¯nã…Nä´ÓN#‹‘H$X´h¶m3iÒ¤/EÎàGzx ƒoûÛ¼ñÆüíoS¶54;<ýT-ÎøAôWš† à#$)ñeYÇ)P*ƺ4!ÅgÌ ÌÑ"•&i'¤¡iXàNû:-Oqß>F™ Áq¹.ð8ŠÀ­.òøƒB°XJ°hHCà;ì<#µ9?| ü°@“¨:?·5[èÊÄÇlÁ~šâ#n¦('¿2 ¤NÚaÁ}ï²ì•Ý9‡QZ©sÖåeŒ™ãŽ;Ž+VF¹ë®»>ÁÁdÑh”Ûn»%K–°~ýz?Z°ýß{™ûÀ ª”RTÓÉ‘vZ™R»’Íolâß/%Ý3Ðà¤iÅœza)Úç¨Oý¹d"8+¯¼’믿ž|PUз,î½÷nŠŠËèV3š’ª¢´È[Ue#4ýî·4–õu™YºTw‹3xp.Ÿ<`@oºõ˜ËÚ-ÅHYz+ÁˆðZF U*4›A±? ´|̬% - ­A*s|ÂÍP¥Ù¦™–¢ªêßw\1ýûW±hÑVÞ}wñøa4Έ_ @êºÅá‡WSUU‘³íøãG‰¼FKË'ŸãÃRàÝ6Џ¾¾žgžy†_|‘I“&qË-·‹uæù¬ÿþ|ÿê™Üpýµ4V+žßHÍ‘LüÉÈÎ ÕiÂ76ðÞý ©_W—³­Ç€0ý¨’‚ÂÏ7€ðsÂl”Ûµ×^ËÕW_ÍÖ­* ¿uëî½÷¿8ûë?B+¥nÒðáãŸt†iLË m*Ùåöbùʵôïß_Ù÷«6°µ±YQ"Â]oÏ¢ð§FÈU]Ë„ný@R£W¢@RóVŠŽôVNfõhëT”ÎâÞ{Ç3zôJK‹Ùµ«–Ç‘ÿú¯ÓÚÚ?À¿f¿ü‹ ª±m“•+w±k×**T0|ûí…$ŸÆGø>ð/”¿q]—Aƒqýõ×Ó£GÎd?¬ËY_›Î¼yïðè_þª”B³â6oÞ½”‰Ñ$-מ®>—€_€R"úÔFÏ‘Dó—rЕðø4!…ZRb¥‰ÿ)_ý:á)MøŽGRp¦ihJºƒ—¡¦?¨”¯®¤€è84Qìû¼Ú¸¤s»œ’–[QSܵ©ƒÏµê]Øàœ-ý!ôk°VdOÔ`òãTj³yP×l_15GŠp4•-±4õÚ›R¥¥#$¹9Mwj´Y+T¨Ï$a…·0±1•ßß¿}÷–îÄ[UI4Ù-É’°áÕõHGÇ"!¸é†;˜Ø”Ýíuè!x¥d¦NÊÖ­[ùñ¬¬ ]×åý•ËùóÃwQ>º ÊjÔâþÂïNl2€cymWËQ<ùÒÓ <€^=º!„`Ûö<ýÂ"¶Ê±PS š "°r+*ùPß5êOôÇë$} Äs&2Ç™22$M;8õÔ"Î=wJÝWZZÊÅOåõ×7ðÖ[i¤,@Õ0õû?g:CFY¼xÏ?ÿ:唕•’N[¬^½–ÇŸƒã|’ê.°x\E`èÕ«?øÁ;vl'%ú!Ö¥¦W]s=¬ÛÈÂ… •(ÒÖ½Iî}p3_™XOÕUm>Ö` ƒdÿþ7oÀPkûù÷á¢åèxº®¦|ãè>Lõ1j¸y´F÷¯J@ŸTü–AÚ7XëhJ_.nЗ\Œ´€Ð¥–¯¾|Œ^Ðçt}PT?cµ „V¥¦?µÉ™´¤NÂp@e[â(×Ò”©L2œŒ„yûï­+÷GÐg˜l‰oòE¹ËßxŸ…¿y;¥~—¡Ãe§ÂÙ§N¢„¡Ÿÿdòóž¹^uÕU¬X±‚Gy„d2©€áºU‹Ø“ºclwŒ®C°cv†Ì®ØB!=)Ùˆ2v¢7³vgÅÏŸæÌчaê:³ÞXÏûM£Hõ8 4Ã# µŒ0è¶ó¡.÷ „mÁ1>t|˜éDãš×â:´š $ÑÐV¦M;.g€¯®®ä䓇0þ&R©òÌŽ³,r ^&hnîÅ­·¾ÍK/-eêÔãY·n/¾¸˜M›zòñs!]`0'0ªxV\\Ì÷¾÷=¦OŸÞ ‚‘u5jW]u?üáÙµK­¨°mu#oÝ<‡SîžDIïÒÎ ÖiŸóLÚ…ÅoòÆM¯ç€ ®Áø¡pùiPZøÅäTîjź®ó³ŸýŒ¦¦&ž~úi,K]®7m|“âè9¬ïÏi®Âöh +*Q‰ˆ¸hÂE·ô´ƒ°$2-)›ÈÞGñAs_ÖmY‹LK’}ǃV°²3ÝŒJŒN{Š_` K0$B—`€02`#!m­ÀËîHKde| ˜Ì¡ [VáÑ¥-`µvcåªÜ"³ñx‚õë±íj¼tìNm¤KåçŒ:­­˜3§™yóæbÛ&¶=€O–G¸ ø'°=/{pÉ%—pÅW|©µNŸ>U«Vqûí·«ÓÇeã«ëYü‡EÿÃ1DJ#¬Ó>?[·þçìº\¥‡Ãªáši0¸×wx_È(Ó­[7n¼ñFêëëyõÕWŸ@ËêWizUP}áO¨ëz NŽ^h£ØºEȱÙi ÇÆµ5l[DZu\[ñMû¤¥aXNÚBZÂÕ®–áZ„¯òRüBLa¸C¢é@ô‰ÔH¤H'“.ak` ¤¥ymÊ·2ôa«¯5g€°éHþúÂ3|ë›Û”H×ÅKVòúu8ÎIÐkãWQöýoîç† eÉdѧØÃ.àå X)Mcúôé\wÝõt Ó¢Ñ(W_}5ï½÷/¿ü²²-Ý’fésbr3F„jl"ÃÚY™ÆP›Š»ùè¶B¶ù’ꂺž)Â9y‡Û}Î.)N2ä[hmr\Ý¥9R¬Ð”å…õaвªTåDŽ°Ñ§ªá²Û§—*pÙQóR{¨{9”ÜZ€A ù!ÔhpÞ\”w |îH•ÝЧ¶OWw•Ñ_ù-öR ºÍ[F½r½º²Sñ·F>ÃVb9©)ê)%§Ô ìoO÷½ˆj gÛNRÏþ gù-=†xþ¿tÍ„M@aŒê¿ËôKïækgŒà¨#ûñÚk‹ùËS[Ù¾ók^`Ì~ äÃDæ ñ;'¡£ w{n)‰”Û—ò®u]gêÔ©üìg?W&öñ¬ººšÛn»]»v±téRåÙŠï‰ó»ß®gÂ^˜p è¾Â¼E‘FS OÈïwJU‚cr®¥Àµ}ƒ³+ ÕÞ—ºF:R€0è·t}/ 0 h° ÐÌ®’©áÒª&\Á9^E lBêC€0Èîçx•Ï|„Å…Xzûyí F9¯½”çø ÈMT÷]Í9GþíiB9>cõ”eR&¥€c¨0‰QŸÀzø^œçž‚t*‡½è¢¯sÙ•?"ùbŠ/ŒwÒ4‘#Gòë_ÿšo}ë[,[¶,@åØì™ûaiÓóÚÓud Ò RH3 áVd(-4 , lL,i¶£•6±,Û2pm¯I[WCú}º‹ÐÐ4ÝEÓtÝE3Õ²] 7Û×2pd¥-i/pG¦2-‘i­™Ö¬y¸Vèá›ëü½ÿÁ{/"ßH¼å8ÜÔ7ÁLƒLd’ñ p³NÌxæéHúV†‚vGeö©t;Üà\T$€M´¶¾ŠãlË ‚§v·Þz+ƒN§}:;ꨣ¸é¦›¸îºëذaƒ²­! ßyþØÆŸà*tZ§pæ(ž ù›ÇIÞ÷?9+AMƒ GÃ-7ýð Á/³6jÔ(îºë.~ðƒ°tiniâÔ;³qÒí5qÌpšu‹z‚­E­Ô•%qu·m&ãVë8BÇ–abc`iŽaâ8&®càÊŒB}&Ï[ºM"4¡¹h™¾:ÁÕp5ëêH]ÃÑ ÇÀ5uÃ:®£áX:Ž¥c¥ ì”Ûjà´ê81ÓTíðP+:«~,8ÐlC‹ Ùž¨/Cu]ìï0[êÉò¢è +ÄödaáZšš^Ï ‚ãÇŸÈ­·þC‡íA€éºÎ¤I“¸âŠ+Ú˜¿mj€ŸÍ‚»†Ã±GyS§uÚ27e‘úó,’wÿ>Žì?½ºT˜âx;D$ÂI'Äm·ÝÆOúS–,Y’³}óâ÷xå®ÿbÐ÷¯gô¸ãYŸNC2ë4ƒžÎƒI{Bx¦Ð°tK˜Xºí†°3«EGê™Ð_ÌjŠ ÙÖ„(æø4¤ÔÚ€Ôv \×À‘¶«{”¬k`»ž´TÒ “¶BØ­ah áÆt¤¿~oV)‹qÍËqÂKóHé Mp" Ì xŠ4Xéž_Ó¨R ,£¶véôÞ¼ï7nwÜqG5¼s9€‹Å¸ôÒKÙ±c÷Üsz/KX¸n½ î™ {@¤ªÔ%UΡ߂y„þ2>AíQ¹ )ïW}Š®Z©äFרzhÝÝðÑˤAT(ƒ'ÃF€>õ[p¼¯ <%ƒÕGx}eO\ßìd…6X9¯EŒTt?÷P•Cöc]à,eL‹’P®mšÒwÐ:4H}—ЀãûÎ,ÆÆÀµ%ï=³™æ_¾‰lÎUÙèÕ«?üÉ•{j_´Pu'¶ý@¦ÉW¾òLÓäûßÿ>Ë—/W}†®ËŠ¥K¹ã¦›øñOn`ظ£ÙcKšV4·…¨ˆ-™Þ2)´¶Õ Êlý4£-çÅ h¶= "D<Cf´í -›–YH“t¢hN©¸Äm81Ó[Æ@Æ„çpÏæK†ñ$Þ¤‘‘–Ë„´Ú°²2mAý7}KßÈ/ =Ÿ`)ßæ’N7ç¼GÓ4ÆÏwÞÉÈ‘#;5D?«¨¨à¦›nbÍš5¼ð j²½ ¯¾צàáë¡,âP(Û®0)´ýh=šXÄ|"šq Ôà Wƒßàé ŠOëà¶øÂpr|„zN¡°võ³Ÿñ¿?èT’þ‘Jñ`€¦B5¦{÷Àc”ÍöŸ—˜ûÅ?d¤-ô«T ¬•(:Ÿ{¨Rt7q0]Wä êH?·Ç®^LýÖÜ@‚"ýè‡\vÙenÒÛá’´FÍý÷ßÏ 7ÜÀ[o½…m«!À­­­üæ¿ͶíÛ9ëëgÑ·_7œ$‰X3Ü”‰\JyT©tѤD“®ç3ª”l32«ÂìÊ0ÛÕë3 šQSÈVß¶3:iB$3½“™¸ÖVbÄE+q#F"œ U‹‘0 H…ä ¤calÃÀ5 „¡!³rrY\3ý•0  ¥–ÂlÓPKK‹ÀÔÕöñ7ŸºËšC"±./ø†ÁyçÇOúÓ/uÝÏÓzöìÉÍ7ßLKK o¿ý6Ž£®ôf/‚~+ùqOÉÀA¢ ;ícƒà²—vðøuKò‚`4¦1åÒr¾{Õ%’ùéÙÊÙšÿøÿàïÿ;é´*ÔgÛ6Ïþu[7mæâË/ ï¨btË&L1âÐJ ꤅éÚ8BÇÒ¼¨RKX„Hg1 nÙ&ÛÂo„OvJd¼*f5E˜Q’DHfVƒ­Ð*bÄõBZÃqÂf‚–p­v81ÜH]‚)p Ý+%} ;#CyJé­¥é¬2¸NnL¶?—ð‹ Gm<ÝÐyØöö¼ïˆD"\|ñÅÜxãôìÙ³sùœ,«÷ûóŸÿœ™3g²råJe{Ú†gK;Ü|³ o?Ð¥KØñM â 6ûî¶Â¡AíϦ&]Òí4£Ól¿¢_D(¤ÞÂ2$Hºj¡), aû,;Ò¡)”¡‹P|gH(}©H¬‰6ý^ŠO¡ZcªïLs*Öúú’²jŸD  z]žGÃ?Eí£ö7öôâ2¶F Pò×0@9Ï]t!åë{9€êd· 5'³f…ï ‘òê1ú(e?Íœ ª0b-ÄÚÙ£Âu\ÇeÍß×ðÊO—³ws<dBÇŸÓ•É×F´ÈìÏG‡BMÓ>|8wÝu………<ù䓊@:fÁ¼lܰé_ŸÌ©ß:ŒPZ6wQŽSj$d§1 Ó¶p¥' lK[xàeá¢#t$:ŽÐBˇȡ JáÕus…îù…% R"LBDHˆ( ‘ÂBZ‰Ñ¢µÕŠË$!#…*BwmôCÒ. Màê:RjH] uá$„’"SóÍ‹ÄrÉ”£ ®ó <À©ú}B´¢iópœ%ä_k§è®¼òJ®¾újª««;Ñés6]×?~<<ðçž{.»w«µà øÇs’tBòëû [˜–oåØb‹)Oa ò¢HIÂn÷[¹I]Mu@q[…~*0ZR(ttŸŸRôH=_½ªwšÊ)ÄJ?H ßåK¸( 5*Ÿ3±ˆDÚïq]º”D@ŒÂU¿' ô½7\ª€Ð*Ÿ_ÐGبõWH‹D”Gõ*¤Ú¢¶ÒÖnLVŽ)N„ÍcÙ‚u/®åŸ¼ËÞs†Ý=¥Šé7 °gAÞxŒN ü0ìÝ»7øÃèׯ<ð@Ž~¢ã8ìØ¾“ûî|ˆE FqñwOfð2̲4E1RFÊAO¹È´D·$¦íฎ—b¡¥=Ÿæ«iHM 5@™\C‘I³HÍ‹F•š÷^×ÐqL ÛÐI!z„¸æa+1Z(lkÍ´R âDI ""ID&i)("N!"äb™!ÍÄ éÈî¹³«Ãlæ„.¼„TÈ+÷äjÙ 8#HÅ>@ðÓ€¡On‡4°)_ÂqvïóÙ*]tQ‡r’ÙÌ0 N<ñDžzê)¾óËY½z•ÝžJÃßÿ»÷Àÿ GöïÌ3ì´}ð?I›¥,çÍß ^›»ÔMÁè¯uå²û‡RXfvì碣_ìp8Ì 7Ü@¯^½¸÷Þ{Y¶lYŽà_sÞeÛæíœóµ‘L›bÒs€…·Ñâ.Z\"ã ÇdÒŵ¤¦áê©iHC u¦hguÌŠnkPÔ} © dDà†nH#冈›aâ¡q< Œej|GIÉxM‘Æ”iòÑ-´¨'éæD50=QqK^b—íxåwj´¥c+?¿ôš_°;Ûÿ4 ˜×:<îk¡·\ØÇÀ{üñÇsÓM71qâÄÎÈÐb£GæW¿ºŠoüË—ç¦z½û.̼nþ!Œ áPç5ë4{PŸbÉ£«øçOæä×Ðã¦VñÍ»wx<(€¼ˆÒ /¼¾}ûrçwòê«¯æø ¥”lX¿?ü®ž¥ï–2óâ"Æ)DO ˆƒÖ’ÄhŠc6'0ÒÛ«D¡Ñ– ýµ³Z¤mÁ*B Ð4ðr£ £‚Tؤ &A˜¸¡@KIoõ—ÁH{‰ÂÓÁÑuÇÙÀ–:B—¤loµ‰È„…»¥½ÐR° Hš™âÄ2³èó׉ʂŸíûßáÓÔ4 …4¢Q°¬$‹r3¹ÅÖ<‹ÅbœsÎ9‘\…IDAT\{íµ >¼;Ø3uÊ)“‘2Åüï¿ÿA J¼ß¿YpÉ»2jjWD•5²}Pk—°šmýÝVWRÛÚSä6áéªûçhŽÂÝyšš>S)Û¸BSòé<É´ˆBúÓ#$šÒ5¯Ð£‹j´% ©¦ç”#2r¨ÑVŸØ¨ŽCs´DÙgE×zåÄKìFeŸ[ÃjÂõôUhÈõôU¨Ñ­ôT|›^lCûûKhÌÑþìÉf¥ßuÊyW¸£FJêr =”k·nX„Hîl`Õo^géïæA-lÐåìã¸îßfTW5aÒ¤c×>h¤ýC¡ãÆ£OŸ>Üyçüæ7¿Éû¾¦¦8³_O°jU„Ó'ôâë_;‘š²´äVÂÎZŠ[WkÞ…p\/«XúÁ.Ó̰­jE (Y 0Ѝ‹v0LÓ´ˆ˜)ÂZšPü„‹Þ–¸ád¨Wo¥f†lâ….štIãzJ~R¡#5Ñž6í1îRƒ´ VÄÃ#×|n ü$l~…˜F\w©ÔHÙºO@---åºë®ã²Ë.£K—. Ø-éÇi§]M,6’ /¼0ë–¯ÜúÃΓÝ9þë}ˆµû[(d'í‚Õuv%V½/Øe°2pùYñBÔµnF˜Ûÿ’æEkûwá÷9è¤}; ÏHI_¾l*× Î%¨ £Î†Èµ¡pÐCíà©á¢‡, 5v¯®&î¡*à#Täë(Ïc0ȧUÀ¢ »”ó&°)Š0ü×vÌTÒ¸+Éû¿x›Í-ÄnN掆NÕÇ0àÖ Øg2½ÅÁ pPÕ¸Ñ4ž={rï½÷ròÉ'sÛm·±råÊœ@)%›·%øýÿ½Ç‹oìä²o}ƒ“FKU´œÕHAýDÂñØjªî;Ó‚º³ÒŸEŠB‰s Ùh…3æ.°((L’ж1’Dô$!=Õ¦‚Ê$_hÈL&¢CØHcÄ4ÃF 9¤0ha,#“cò_(óWM€“¡Ks¢G³Ý®oµøqÌÁ“YN]ÝBö PPPÀ‘GÉ<Àˆ#:Ñæ XN˜0—^z‰Ë.ÿK–,ƶ|ê·'øã·±iy+'|o%]£­sbóe2Çr¨_¾‘yßý3õ Öç} ÓãÒ‰ ¼ýBŒÂ(pðÜ#e±7MÓ˜6m à·¿ý-ýë_Ù³gOÞ÷nÞ²›nù%'Œ>–ÉÇ à$-J4QˆÙbyãyB"Ò."e#,!]/S!¤¡Ði“BÙ"¾Å ½™­Väb–HŒ·Xx%¡4eè™ ÛÓ/²-QCdªkg5tÃAF…§µI®w¥Ž£¦hŸ Ö OHœ¤™YøÙ^k£G³%œ5º¿ë º.Ðu‰ëîŲÖ"åR`ç>W€š¦Ñ«W/Î;ï<®¼òJzõêÕ9zDvä‘Grßï~ÄOn¾„wf'H%ÔßÙN»Ì¾o5»ÖÇ™xýPz]qŽöq-Õ˜bÍ k™wë|êßß•HªËèùÍ“pÓtô‚ƒ/î ½•5Mãˆ#ŽàÖ[oe̘1üò—¿dùòåyßëº.sþ5ÅK–òr÷bNëSÍéC§ÔˆB†½uèÛw`nÛ†ÖÚŒkx gnF¸Eh™âö!ÐC`„@€Þzh… ŠA$$$%Z ¤í`J0¤†õdpA˜  ‰®yE†³TІח†È0Ÿ=«$#¶0=‰Ô½|#%8ÔÛ·W¾0vÔ㵜¬S&í£G³}?’ªha¡NYYœx|MM+Íä$B~‹SN9…+®¸‚ &P\\Ü9z„ÏÓÈÇsç÷ñë;_å/ÏÊñÃ[ ‡%³6S·©•s¾ßƒ£¿Ö‹Í¢}Âc‡C”önvCM'”ç môø3DHRb¨´dL¨ìƒ§èR¨Q¿Ô˜‹F«OÿTêX¶:ìµ<C½s¾3HúS4tå;4Ü™·`…ªæ€_²‘…ÝN7…­mè‚å¶÷KKëÐ4×GƒÖQL“²ÏÞlTúÝw¨š©z°lM!¶¯ÔS#%Ôîtøà·ï°ü¡÷hÞÖœ÷ÞéÙ³']{G_2™PA;ÍÜÝ÷;tágl\pÁ :”‡zˆG}4Gi?kM­ ^_“`Ѷ&žÚdsî§3aÜ(¢õuX‹ßEÔÆÑj›IkÖ!mx12šæý 1 ¬C$ ‘V·@¨D¥v®°@: Ù’P¡MAA!3….t‰f¸^á_ÚõµLŽ”†‹®9!jÕ„KJ„±D£ëª¨Œ•hèA2æÑ¤ÒÍ𿎯%i˜ δ"å¿Ù»w%©T-–•d5UUUÌœ9“o|ãôèÑ]?X-,z1jÈ·øåN¦(VÁ<;©´%Ôòèu 4ìHRrù‘oI­vi2‹MC}@h¢]~™OaBLW/˜ Ù¶3b~Ðòûµd Á í¨Á3Ž­Þ³»BjaP¬ÚÀVìƒÂà:E>QU¤H¨  è Á ú±öẨ¸ ¡µû!‹h¦uÜ낺z«¬kTÅÃsÛ‚.q¥æážmi^ûÞ‹ìœý>VS2ï=Ó­[7n¿ýv¦M›FaaáA{ï䆮ëŒ1‚{3fpÇw0gΜ¼€(%4´&XøÁ:­ù-ÝjžáŒ“Ndle9Å¡Œ8$4 h6tL)).!…Š4(Pd‚[è­ÍB¼ì„‡1" 2塞–„Sºíß`ÈÆÔ, ÍBn¶’b[‚«¡Ù˜aÛˈ‹Š!LpMÇÔU¦?}P×¼¢¾Ž –™Á°¬ÔZMóŠùºn]<…à½Àr`ÍÍñý‚Ÿ‚.]º0yòd¾ÿýï3pàÀN<„¬¦¦†_ýêWôíÛ—»ï¾›;w*bÝ»¶ÚüïÖÐçõ¿rÜÇÑå¨èL=èMJhitø×‹qþ~ã}ÔnlÍÎ d2ôðA<ò§?qÔQG¡äu¼)–?›³öøãóÐCñÄO°téRš›ó/éÇaËÖ­üîÑÇx²¨ˆc£QúÉ¡P»K Ž<«®kõjz‡ÃTK‰ÓÚŠliAkMJK")ôÚâO2+3mþECs0 " …$®¦áá•-ñÉ»Y˜žÔ‘ð/e†H‡3š¦ÒDde²1/í5z-ÀÒ ¡AÜÌ86Ó@Ãh¢ºz-ǧ"Ųeõ46:Äãu8Î*¤\GŽüE+//çØcå;ßù§vZ‡(ªÙiÞ ¸êª«èÝ»7wÝu .ÌÑýµ“kžù€½ï×2òªQt½ðD¯š{§”æ8ðÁ²³þ§‘—o¦©>t¹(-Á›¦¹hšTóý)ÙH×ìëÙ¢èZÇ¿œË/ÂØ±#˜?úӣ̙ó¶øÐk‹Å8á„8묳8ýôÓ;uB¿‰D˜6m½zõâ®»îâ©§žÊYÔ­ªeÎ ¯Ñkyœôe ÒYé÷ ³T^z¢™ÇþЊwSJä°‚]«‰\õMÂß8—²žEÔ¡úÃêºÎ AƒèÓ§S¦LáùçŸç`íÚµûý\E—.LŸ1ƒI“&¡iݺu£o¿~¬ß´‰xÏžT“¬«ÃÚ¶ÅBÛ¿ ¡“ç4×Íaì|`¨ûÂEh®·È3÷†Á¢.””¼Ïyçõàüó§bšžß¡gÏÔÖîfá‘Jí>úh®¹æN8áºuëÖ¶N;ôM×uFÅwÞI÷îÝùÝï~G<ž+§eµ¦Yÿð\ ÞÛÁ°ï eÌ=‰—UóØUµ¯8’µï¶'’‹°KäèöC³éÉ–ÀeSàóÚŠÍ$Ô;®NmK¥ëƒ´åçleNд”ê µéJõÜ"¦ò]84„K•côËØTøÔÅ5\jØ¡N2ìKqÅGhg´ÛŽq…ÉöẤª‘‘jë÷bsNÞ`·µªò·xVª™S•Þdy]Ü7žx¯žÝ;÷½XèÞ£¿úͯéyò ˆ¢Bú‰Cg8ä Ãá0ýû÷gæÌ™œwÞyÌš5‹Gy„5kÖÐØØ¨Ìp Ã`ܸq9œw$áÌiÓ˜væ™ô©ªb˜ms„ë2PèH¡cè:1CCÓ}Ñœ~‰Ï J ËÄ5¢`Fv]˜è˜è„С¢H,Ò8Ø®ƒtlh6¦n«‰ýa'”ÂÑ8´â:[ÀùÈ—0@pê©*fš&§v=öóçÏÏüÊËË6lßüæ7™:u*ÅÅŽ Ó>¹õêÕ‹[n¹…‘#Gò«_ýŠ•+W*u ¤eѺh5oÎ\ËöÇʘxûxBGžŽ‹z‘Ï %~ý̟˜n $…· Od,[¦Ö„¡ic¶|Á0R`¥Ô[3öŸG ¦i © ÷šp•„z[‰5°•¤þ`iöµàyúrr 7 /x!{é\¯~N –'¡>T}ÙFºv¶ÀS+à7ïÀưÝ<×ED¬€ð„ãùËíw3zð°CrøÒd†A·nݸꪫ¸è¢‹xþùçyúé§Y²d [·nŲ,¤”466æñîÚµ‹½uulݶ·¼ûƒ…… Ž•2¤¼˜~U%Tv)¢¤"FqEŒ¢Ê±²ZL´—·ÀiÒ±âé&ƒ´nbˆ1B˜„)$DѶâ¾^Ã)é’vX–CÚŠc¥‰t ñd-ñ&ZZhi¨¥i÷:¶¯¤aÇ ­»É¼ÄãGä jhhPÎ5Ó»woFÍyçǸqãêH°N;°‹Å˜1cÇçî»ïfÖ¬Y¹÷•;åòÁœ½¬ò*—–RpþdBG ÌÌÜ:í‹¶½I˜·î ³×ï',Nƒû»äbŸEuå 4ÍÉð—2%¶¸¸˜3f0yòdæÍ›Ç›o¾É[o½Å»ï¾Ë‚ ˜?>={öÄ0¼ËS__Ïc=F"‘ðÑ)°¥¹…-Í-¼² B¦Iei Uå¥T”—PY^BuU9å•e—S\RDIY1%e¥Db¡z(DÈ 5CÍÀr$IË!mÙ¤-—´íÐØ\GCc3M-´6¶ÐPßÄÞÚ½4ì©¥qo- {öP¿w- ض•÷|7nÜÈ‹/¾È!CˆÅ¼Ùmkk+/¾ø"7n¤¸¸˜ãŽ;ޱcÇ2~üxFÝÓiû´aÆq÷Ýw3|HOúí-,ßQö ˜]ßBó}ÿGò|íTÂÓ¦¡Ö]ê´ÏÓRÌÛO®‡g6ÀŽø¾AÐ0æ”Sˆ}ï„ÇŒD„íIŒRÊ/û ÒÚÚÊ–-[X¶l/¿ü2[·neܸqœ}öÙlÚ´‰§Ÿ~šgŸ}–ÚÚÚµ_]׉F#„Ãa"á0‘H„H$‚2Ñ4 ]×ÑtMÓЄ†+]œÿßÞ¹Æ6užqüçãû%‰Cb; „$Ž›&mÇE@mGK.ckÖuˆ­½6©HÕ¦}èªmÕ¦jߺ±UU5­«ºv- "º ÚRhU-–BGH ’ø’'±ÛçØgœú„èxÒÑ9¯d[çòüßç}ŸçyI‰Édê8‹ÆˆÅbÄ¢Q¢ãÛ…‚.Ú±“$jjjhnn¦¥¥€Í›7søðaYµj‡ŠŠ !€‚ÉÖHÖÞå™g_eûoœWê0ÇÐX1ÌnÀ¼r5öû–¢›R„$%(- ä )~[{0ÏÁÌ]_0Љ.Ü™ÿ 9¡d‚6’q-çNdÕ·Ô€j’²-s^]"/õGÎ3”òJjPSÓé÷\azU&öÀ@œ6g}?ÉböæœÃž·hn'žœ!ß7Y™3G¸ÏÛD<™¹M®÷0k3ó°å¼<ÂdVEî8 Ïüv…S!ˆO0:l./¢nýR~³öw”Vg®í\LX®SPaÉd’h4J0dÛ¶mìÚµ‹®®.z{{9¯ÒÆ5s“5ŒF#EEETUUQ__ÏòåËÓU`L&“(Š-¸,TU% ±}ûvžxò Îôž!K\ìAD20ͨƱa5Å+ç3µ$†F—2®ZÜÂ'¹^%:BYJÆ0sœúŒ0ª&ŽÇ3ídLËèQG¶ŠAaŽŠ5oä$¯Ò ѼwA¹D‡W¯0mF®þ„s„ðŽœe8À™—ì~–Ê!|‡e9Bø6wåtîäÝœ9Á•üç¼báu;NÐÕÿx ^ÝÞAP&è?ë‹Ì¸n¯§áW÷P|k1>€3¯ÎõЍ˜ç9Y,, 6l`ýúõøýþôðikk+^¯—@ @0üB^ÙW~cu:ìv;N§“êêjæÌ™Ã’%KX°`EEEâf ®Z'«  €5kÖиp&lZωí팜 ’Ì·ºªJr,F¤µžuO3´x<´û<–'Z“ƺòŽ Œœ>!óÊ‹ðò»p&0ñw¬hlÃÏ[˜ºf’A—î3Ü(!¼ÄKîr¹hnn¦¹¹™þþ~ÚÛÛéì줫«‹ŽŽ:;;9uêÁ`¯Ó¹–$‰’’Ün7uuu¸ÝnÜn7µµµ466b·ÛÅ |©8jœ,~êªïöÐöòQÚ·C_|etïQŽ~ÜAÑm5”Ü>“²e$æ'ÐêE•¢ËaȯÐúþöŒqp÷§Ú/e3Àã†ûWÃVßçÎaDwcJ‚½LdYÆï÷x½^Nž<™Éîîn|>ß—"Ž:޲²2Ün7ÇCuu5.— §Ó‰ËåÂn·‹|?ÁWJ”(]ôö…9²óžöy:4a1 ɨÇVëdö" Ëï·qËB#F³Ä…´r[ús#òMévL1qÒßñˆd ÊÙ¬¼A p&ò{¸¹íXž'š4žßVIÕþüt:S]¦FªIв±üOé¶–køWÎ)œŸåÎçä?P9EʈR'µ9)5t§S8‚…®íÇØùïQºÚd¼ ÉK¬´f6Á?~Ÿ=¸ŠoÍÔc³Â}#rVnàL*0Þ ¾’«D"‘@–eâñxz?::Š×ëÅçóáóùèïï§¿¿ŸP(D,#266F4E–e f³9\3Xc·Û)++ÃårQVVFEEN§‹Å‚Á`@¯×§÷"ÏOðMBQü~?;vì`Ó¦M´··çD^_¸“ÖB Ï =wÝgá¶ïWòñ”;Ñ›th´ÎQÌÛܕѰ¸‰®3 Y/"ÈÎ~Ê¿àœ`ˆ‰ÛÉáêP{+Xí)÷'«’F«¢›–µúŒªAgÍÇ©ÀPž?p.ï7‡óÚ*.Ôb0ĸÿ‡ÿL·õªÌßú6æ|ÆøT^NÆwíx¡ŽxUžÂºŽ+øNËøz”øäMµsšžukç;wÌaf½DéòcŒßCTûB(¾F‰Á`¶¶6^zé%¶lÝÊàp”LÖ,Ì`¶µ*`V4-„ª:0™Ñµ«FÓ«a¨ª†Ø°-WÔ|yb0p!Tó„0+X†$UßZo’¹û±m™¿¨Êlm_“ùº ‰‡ ¡‚¢B0.‚;á@'ôà\\C$¬¢(“4䌦ÕXùÓbšî-`EåaÌf³˜B(®:ΜfÎ ›wï#Ù}šd¿âò嬰n𳿢ŸWƒfÚ4(*kqÕ˜Ì)7éËB’²‚ ñ×Ê@(çàøÓp4­!hƒøeXaÌZJ+ôÔ6¸gyËlXl)ÑŸËQñP !×Ã$q+}$‡‚$Fþà#”ý­(G: 8xe'7Ð8œPQêªW”8  Å`-Ëø³ÖZ]*Œ5¤OKºqwN†ˆI%u¬(0…Ø(ÄFÑ&ƒÌlÚƒ2E†‘½C4ÛEŸzý0„+©Å!IPVc¤~®•†y6f70c¶cî¢B… ‚k8*ÛÔ¬ô Y!q²‡Èÿ:h;ð!ÿÝ·ƒ¢Lv¼pRi“ L0YS{u\ø´©}rüXŸÄK&@VRû¤ ¢q#ƒFGD$Žª$®Ž¡Öh(--eþüù45-föÜ*ª-Øz4šÏ—qÊ¥„Uâ¡B(®’É$‘H„`0HOO»wïfçÎ9r„±h4•¬™1¤A£Õ`)11}áT6ÞûKš4Q\\ŒÝnÇh4ŠC¡@ ¸Ñéïïç•7ßâñ×߃žv„Ñ „‡A¾¶ älzLEFLv#6§™i *ð,«bêÜ2 6y[NõpB@ Ú"0ãRâw¶zŽBàœéo/|0è‡pèã5JZ Å-öR-%åz\Ót(õ8J(­/¦¸ªp<ã=ƒB!„@pA‚ lÍŽ£Ñ&F‚àï‡?êÐa¿Þ³gééé¡»»›¾¾>'\CñŠO’°Ùl8jjj˜>}:•••TL-§´ÌHQ‰Ž).¥å:ÎY¦æ,Ô:δ¹½ÈùB(—‹¢(D£Q"‘áp˜h4J<gxx˜¾¾>|>_º.ðàà`ºpö‹Å$)]8{³X,8\.ååå”——ãp8°Z­F, f³‹Å"Öÿüò¨|゘¡ IEND®B`‚pymvpa2-2.2.0/doc/source/pics/extravaganza-dc09.jpg000066400000000000000000000775511202542755000220670ustar00rootroot00000000000000ÿØÿàJFIFHHÿÛC  #!!!$'$ & ! ÿÛC  ÿÀ*ô"ÿÄ ÿÄH!1AQa"2q‘¡±#BRÁÑ3bráð$C‚²ñSc’“Â4Ts¢ÒÿÄÿÄ5 !1A"Qa2#BRq‘¡±ÁðÑá3b$ÃñÿÚ ?ÉÖ+¨L2¬!ßòþu'gÄW–2•ž3ëÒ®“ØÙÝf…Y€Àn„}Fõ ¬ÿ‡k5† ~peëï1ß}ñÓ·Ö¼Œ5q’©žžZVęн¢Ý[2þÜàzÖ™£{@Ó®ñø”Uvêé±5ç­CAüçìDæ"¼EPŠŒdô?,úPµÝ"æH.àxd‰Œ’~Íðqtàœä»WOK‡*µÇöþ`¬™!Ãäõå–©mt­.’Oòç¥¡Ô •5ä#î­]GŒÊGbpkLÐý§’«Ó Wɪ†MHsCõqäâF÷ ú·S½?Šï=?­fÚoéZ‚ãÁsû¬r*ÃäCŸÄ§"‘¹1ºb祌¹‰qK zš\L§½U¡ÔAÆNiüwjÃfûÕèkŸ’†M+‰7â +j=n1ñ6>´ºÌ§¦OÈUµ©S+fà³y€ù aõ˜äØ@=¬ñ|?¶O&Ù‡È÷úýé[~E Ì¥ToÊã’¹ü¬M-ÕÂDŠ2ZGÀëXæ«ý¡}’Ùë3iRj“ÜxÙ¹··-eì­œ“Ø1ëU^–q—´²³nTÍ}õ{Hc "‘ØÝ\Π/õYææÚÇ‘r[ò¬z/í5ìÞIBÊš´Q1>ü–èܣוÉúcækIáî)á^1Ó£¿áÝb Èäòg–EÁÁÊ0ûPê'¨qK"¥ü`Ž»«Ý­ôŠU®]TöŒüÆÿAO`9¹yØ~ón~毳XŸ*žÄݪJTkFQ—Ek\v¨Ë«æB’ÆOb*ñq§c8Z‰žÈŒíOŒþ”J4–w6™ðóÏ_ÑÍåÞ¹§JdÃ-ƒ+Ä݈÷@>U\ÑuI¢¸:F¦ù¸A˜¥Æëæ=|Ço•'.:åÇ“Ã,¼Ìz±?3B(‚Œ V¢ÅŠ)Þ•V¤£ƒ@ÐIŽ•©dZf­J«P4b×mË7ËñÛ?ù£=~Ƥᘃ¸5’.pÃ(À«0zÒvSþÄ´‘Æa8÷SÐÒåA)S,±MëO¢›¦õL¸â;D‘žFý›rI' ¾{R#´’üJ£`7¾À:®ñ±ÊFøïNN§om‹<é ²íšÅµjÐB¢$<ǘ†(î>uOŸÚ ÞÆ×r\Oç9H?i OsŒ àüÀó¨ZiËÀo,cÛ=Sk«ÀØÃIÀæR¹?Z”°ÕÄÆUpÆÜ»ƒßù×m8¥™cv½f1È®÷7<ÊgÜ'á_A¿çZ§{NÒžâ[tÆñœïƒœŸ=ýwò^]$¢¬(æ‹=øåðŸÞýÓIé’vD9þËöb+ jš&^;yíSÝÁ0_™=þY©]ŠEÞ³[܈³r{g5Yá’]åÁ®®£ž‡?*+jz¶>g™I¯¿y ùši6¼Ø>ý£&êþ £Šî?ƼCqœóÜ0ëW[Q·Ó½—èº|z¦—;´AÞÚk Z"wÿŽý{Y­Ôž6§¨Êw/>3['xX𦧱֠-‘|)~°PF6ýíëØè.*×Çßü{Vï!KÑKN Ôunnáñ (Ä[¾G/¿!süG`*7€J¯›ÖPËiÏž9Gêj[PI,øÍ;…72ss=ôL¤dŸð#QÊvµ@pœ†»ºèe|§þõWê ˇÈíãr6—âXŸt}MugQlüUÕƒú9³ëßL¿Á¯¡Þ›=¥Ì;˜Ék½>I§ -PÜÑx…´Òm#O¸˜LÖê$Û$mÍè|êÊÑ[ÍñÆ óèi 4Õ ˜%Áì¥29)Úà†“ì¤Üpª¹”s¯†ä¸äŒeH” Ç| ço#PgHÔm­Œ±G2!&¹Lõß±lïÄ mÂ|[q÷˜-nÜòþ'ÉIè_ퟟ]òKd|Œa¼ŽÆ¾oè¶—P\r 1`àã$/µ{SØW´{Ž6Ònø]$êúZ«$Ì}ëˆÁù†Àžù®kS¢Žûqd’ŽâùqeŒœmQ76JA÷jç5›¦JáÇ“uûÔlÐ#’¸*ßÂÛÉž9ct˘µ7ÙD¹±#8O½D\ZOô«õÍ ÜPwvxÎLd\âJÑI¸µFEDObñknP;ÆÃÝ?Ò®6ØÎÕžñWðß Èö÷w&âñFM¼™—ýG¢ü‰Ï¥]źN¢¬¯“jVÅùà ŠOà=þ^t„‘zVM«ûd»»v‡OÒ-íÓ³Ü1r=vÆÞ¢“ÚO++¶¡·+ļ­ùgó­¦ÉVSõ¢Ý+ÇH²UFö’nfHu+x²ß½!Þ¯\Ayl—Ò "qÂ…ÅdžßBh…})Ó/¦i2äGÏj$Àh¾ÓíõW r§(êpÈ|ÁªÝ­î‘v†B ÷e '¡þùØéW¿/½#4M C2,‘¸Ã)ЩA1¬wq•ˆ²ÚV—4J“x‹ãä:Ó=7RÕ8wPþä¸Öå‡I•±+Àßksj2Hy™šýw;Óˆõþ “E×Úl몢`Í-à*çý$QSIÒãÁ]:ß#»'1ûœÓ¤Ž8†"Š8ÿЀ~”>·Â'Òûº¼Ú ëKk¥Ûê1IÕe²3€?úMAqiW“»ÜÛIaqsÄ!ˆ)‰½r¡ê*GŠø‚M>ÁZÌEÌŠI ֳyæyd~i’Kæ»ÔuÏAÇo‚çcí&Ýl£K›žp0̤?SRÖÐ4{£ËpÔžì9‡ÜV`-q/‚„¶:æ~˜ýsA-½ŽP}e¥õ¥êsÚ\Ç2ÿ‘³N>uçøŸPÒo#¾°¸xÝwÛqòÅk¼-Äi¯é¡¤;¸Æ$AúJ-í:h²ƒëG Hæ„ :Å̘\íöªþ·ª%¡Ô¢›™#nFø8ýjZgÄîó{§Ý󬛌µÔ’ìØFUÖg#f;õ•1†çH-Ô­‘ޱsq4Çñ ÈÌ2s»`ääö8ûTײ³û’J‚6ÅÜxŽB§+“îäùbšKK6å‘f;V„1¤SÉ‘µÀé/ç†6ˆIØŒž¢‰ y£s€ÅR{|©³#@fy31ßqMÚ¼ ÜüŠÈòDÁT°9Ü{ĉle1…Î F,NI§2ÊZV8åØ/zFø 3®I»+¨¡…ƒHæ)±Î‰Ón™üëZá.#[M¶€C.îW$õÆÇþyÖr0ÇÉ jÉcy¢³žb¼W§0nL]ÆÜÜü˜÷†üØ8ùàâ´®-ºKî,ŽÚ=B;Ùe‘cäüT’¶ä `ÇÎ~C•­¦ã¿#+?þB»Ç1¶¦éöOBë9ç³ð²‚OWèw5\ÓOáôè×q‘Ì~µ/íø”Ù~mÚ4E1ªÊ¸ÈÏIIa×½D(åEQÐ U]Rýf×à³§âò93œõüÅu1’`‚qÞº«í¼»+U^‹áâ»”Šó|âêþF•Y4`ÕÔpùeó¢½½´¹%cÝv4Ü=(¢™Ö$úsâ7£mMÞ9¢øÐùT€ŠPKçF¤üAÍmmtœ·¬ƒÔTtú0ñ#–Æd…£1+)±ÁõÈ9ɼ£t |Å5{9~ÍÃ#µ6k§@I_e æÂkU»–ëMs#‚b–ѹU[˜”Æ9qÌ09qž»b›Yë·6² ‚èÈXà!\|ÁÛìM_›6‘HùÓ ½'L¾<×±—þ,`ýêü5Rª—%Ià‹æ<4?h×¶n¥eÁÁ²î)¾“Y×õɘ®îCޤgaú¥^ÿ¹…¥¤°Úºør0g ªIÔ‚~ØúÕwŒtX-tq¨ÂгDp¬€Wɾù®iž7=ÑTÄÏ Þ6ÛèËn´7ŽR#œ¯1 óúV•ìÿ‡K—•f$Ãå=±T‹4{¹–XK´ÜÀ"÷o§üëZ§ ÙëVs(¿µ(‡ry·­<ÒÛ )i1©NÚ,\ aw,s¢,L7!Fõ©ð³[óAÅ)''n`{Ô4ù¢ÅâŒF:ãj&¥ ¹¹ÃŸ>îwÚ©ú“JÓ6} rtÑç &m îGrÅ9·=ûgþzÕ£€xæÇƒx¶Ï\†fic!.# ¼±1!—ô#Èâ´;ý"ÂñygŒ08ýï:Ï®=›.³Çv–zc¤L—r“ð aÓÌž•Q«'\š)C˜>>qǨ[ÝÙÅu f):“¶AÒá¡‘pà×z¤fÖ 8-æ8T öjm7„ÙHÀìk&iåí"‡L³Ý3Æ „«ü,wúëQ\E'ºU‘ÎG+ŒòóúU~^)cŸ{*Œ»×c¸B&!”o“Û×Ò–±È¹¢»3mþЮ8rÞ=Dºðu+…ç–Tø¢ŒôÈ÷êÏ5æüEä¦Ydi]ŽX“’jc‹5Çâ^5Ôu#3I“ “ȯ zà·ÔyšuRÈCa‡Q^§8éñ+ìÇ“–£-#6‹M¹“–ÌpN mŸ‘¥ Ò//,GßÂÈW«4ŽÒQ5”`œNÅú-£™âÓ Yøùk¥©ã„[Ž7Ëèúwˆ ËrÝG1éR<=Zëèðœ”t#ò­ÇNá}A‡–ÖÙ ŽÃ,~µŒë ö¦°[áâ–PÅÅO§¥TŒ÷ͤ36Or.á½*aŽ´–ã¨ÇÌŠîtÇÆƒÿ5?z2v²¿ÄzÄðedÞg–cƒÈ£®6Æ}k½¼šîùîÌ$’œ–ÈÆ=+Lã‰ÚÝ¢[wQ$ŠëÌA*T°cÓ¸8ûšÊݤI~ u¾U£§I«ELí§@óaä÷ÏO:HÜ’åÛÝýÜGóH±ªRyˆë•6Ÿö’äg$ù`•\¢­ü F#2Ùbwå2Æ¡UÂ÷¶ôœ!ÖLAÇž)ÌüÙÆ»TQ×ÀQ ž~U#·tJùæf ®(d’4R99ËXÓÒ›ÊÆBŽUc4T Ñ#5Ê¢`}Ü|9¥`»’’BX„œ}GÇû<Ù󥕲9ÑOºs“Ú—(®†Æo³\àÍnk‹e³œ ŒHéëùÕ¶i¤18DRØØsµd<)}4z¼1ÛÈü’äH ºo¸>µ¨,0÷¤ºaç?@+2Ù*4qûÕ¡Ïj\?¯ÚëZ$òÚ¿ˆ‰!nR݉å ìpv=©þ£ÅKªêë©ÝÞfU“Ä È äƒœB½¢‹Æ?ꙇó¤¿|P#|Ï7ë]Lá±|-!éQI"Šc“ #}é´BÝ)ô®æ¢³zÑ®±ÔRÇB’ÛµEqLZn§ÁÒ\+¬jèÓ‰dK…ÈûcÒ‰ÅE‹§Hp$—ÝLþµžð6­uªèºéÿ¦\¤ sgcæäÌki#-®o¢ºÏ7…wCOg6’jò)”÷F~U“k¼?Äv¶ö³¼–Ä’é%¸vÏl7•Xt>ŽÈ@ñò/íB€ v®–ÕCñ¹¹[EÂÉÈ% ƒ¡ÏZG‡tëùe¾Ô¬ùf!üPÞþ wŽžU–ñ©«3Gl“]äæÚÕÑ<┼Ñ?eÆ7#Æ£V·Ws€ cz±Ç¨[]BÏÔR¢ìJ° |ë¹³â=FT¶»ÑôîU x£läî}NõaµZn‰«[ÃM$Kîòóàn)Œb»/ã”äê‹5þ³¢ðÛU¶1À_f°Ÿh‰q"Ý£iSØùTýÝœVÎŒÚ*߃ŸU¦|ó¿Ú«|Q¡\ CHµš¶†i˜.6ÊáÙ=rÌ; ª!Ž0ɺÅj2Êxš£BáI%“…lži‰M¹úž•0ñ+ïŸxt#¨¦ÒÝ%¤qÚØ•*ä°ûÒ¡µg?áŸ9IþBª<¼ÙO`áV^nVBGñŠæLur5k}E‡¿unŸùK:DÙÜäsjäþâúŠWîw§ö·(êÉÿÕH³Æ?î(úMÞÁý¥íÃ|Ž?Jjúm·>CÈÿë‘åšïU|“é¿ãÏõr~˜þtÖê;kÍ.üƒ”XŠÈI4 al§&%?J´ñiÚ‚r 4[¨^£ëSÛ¡øaSV3àØ­´ýÁd‘by1-±$ïZu”Ѳ$‹"º¹È¬ÊòÙ¿ºÃ,'ÆW>˜Ø¬‰Žo‹ ;‘ŒçlÓ=?[Öa¾1éöò[+,‚DsöÈúæ¬B\–œÖ:M¿6QH9Ú‘¸“–6lãj¨iYø­*y.1-¯*ʃ‘‘ÓÏ"£¯xÿM‘üãIÐrÂp~´ÆŸG,°ì—Ô/ÄHrrk ‰e¿ã{ýA²<bV##?ó5¡]q5¥Åȳ[–WçoÝòÍWmX-Ä$r¤ò½ÑR;¶@?`*½l·\ƒžK$jø±Jq™ÏÐ ?€;Ï)ûÒžÛÚ´ÑÎã¤1ø‡líÌó¦òŸ 2:Ò[e%”^=G¦'¸ÎÜÛ31<¾µ—Hfñ V!Xo×JصÛy/­^<†?ÂÛæ³½6æÞàÕå$€ÜZº«n×ÙKW‰Ú’èŠÚG¼ýœ,A\¶w æsFx廆;zv«ç pòêK¹Ã"4.±Îvß½/ªðÅÖšˆ·×ñ dSr¶Ûw\×ëW=ut tRpÞŠÙx‹æË¹÷WÌRÐiÿŒ2ÄQƒEÔ¨ØoŒš›}>;¤…-T¬à¬\°ÁLššÕxKOÓµ}y„SÉâ4iƒËóÇ^´^ £ÑGšÊ k†"USËîœçÔbè•ÑHw­ézF…-¿à¬aD>&‘sÌ~µQâŽ}&oÆiÀÉgñ:3ì§Ëå] ɽ¬ŒšV£¾<”å<»vñŠ!,É̦ŸÛiwú£“i ÏÊ7¢ø?*‘Ö4WÑô‹t\Ý#GÝ ³÷ÏÖ›¹'Ee 4åà™öujf×I#ÜŠ2Äžçëó­{ÃÀØòù«p^—®›ä(QfO1;±ûtÞ­Ù®?*ÁÔO~FÑ­‚;`ƒß?öÚž!‡9ˆ* øzÑŒ`ôaý -~²lX¹ýŠÍÍÐmß·åI];ûDYLtòþ´B<ÁüévuüÏûRDåùP#±ÿŸí]G*}?ë]\qVžÊé†-(—È/)ûÔiµÔ­XÈýèÏô«‹BAøh¥–)öŸa§(ôV­x‹V³|‹‚Hþ!‚>£z³Ø{IÔ`À¹ x|ýð:BKXe’4õ Ó ô[Œü¦ 7%[aHž› ¼ªq^çüÍNö‰§Ý²Å,^ùì‡ýõ©ø8“D¸F·ad?ºÊvùžŸb¶k³•‹rN9ØnE>[‰mææQͪ«Ñ+tÙ››êërXâ«äÙ®®­-Ô\Ë:•sÍœŠ¯ËÆZj¾þ-¿LÖ-Ì’B#UájOr2sG 'ï2–o«É¿Õ*Eå¸ÚÓÆÀ²”Ç瑟µ%qƶ¥1mi!o7Çò5LZ)L1#½9i S—ÔóõØ³ËÆSÄVê‡ÌïI¿j òˆÔ‘œ…Þ«¼£íëBd" ï¶Æ˜°AtŠò×ç—rþë¯uã±wKyf?¼¨JþxûTw iGLµ–@A >y‡Ê¥xr)ä×m-Ù¹æA .w*þéÎ7ÜVµÑ¦Ÿ-Œ‰‰#$äAÞ¯«ôTWVj}-©Jr}‡°u™‘ÁíüêÑa« €Ò ¬öÚY´û¾PyӨϕZÖv¼S F¶æÔº§fÜrW´úí¼­%Ä6òÞ@6/:‘†G’òÚY1lFíÐýj§w©µ¬mov¾ ó9^daóÌ …^(›Noú˜/¹ýÕµ2d錑ö¦¸_6YŽJ^ä+«Adº…éð”8r#Ï}¾õ41ÁqŽ™ëJÉp×wóË;Æ×!¿j±·2ÆÝ×é°Ï¥/0?*ÈÍ/ÖRð*rSVµÔ5aª(XQ‹(|sdõÉ“òÍ8Iur$>¤ÿJN÷@:r¢—,³j¬JÅîŽÿ«oŠãêú“FŽ9b•e72±R01·Ò…NM-Ûz^é ÛÄ5{íêæØÉ&¦î< T’Tn}îƒsVmìÕ¯B<ª•sO)!Ê ò1©©ýínB·IÝ‘jÑÁ“ÔVü)4ì¶ÎÖ‚'ðíƒ7)$·AP6—úlV—¿¹<‘à„ç•)®¾§ij'³·[ˆ ÝDœ¤zôªÕγ¶æ94’e墻gçðãóÅYئ¹,BSî(µéñXËiÇ„„°ÉfNµ^â+[MNtžâ5xíAŽ$bA;y£ïO­®nAYæF€:æ5n¿Z¯¯4Ó“ÍÌXç'½QÎÔ#Çd<—j‰¸ãxUcpTòƒ÷þt°#ÌÊ“XLD®Ç­ ÏŸÜU=¥;˜ÿ›õ¤›üÅ—>_|P•;|_­JGXƒú~FÜóö§/ž>¢«Ú‡húi+%ÀšQÿnÌ~½…20ru.SQW'Dæ;}ñU~,âî‹ahü·“H¥›#Ï|ÿ>«zŸßÜŽÆ1kÏÄß~ÕM½¹žæs,Ò4’žf9$ö­m6ŽJ[¦fçÖª¬}üž•Ðӡ·¸$rŒm¿OåRÚ†Ÿ¿?Š¥›ï.I5DáKõ¹Óâš@b˜ IêŒ6`~G5b¹¸7ÖæB,ªÙ,$ÊimS£ÐÆq’B—ö0/ ]ÂöˆâUæ%pvï‘ßjƒ½àù/´´Fž<1ï·¦¤õ+½n-.-5„^oñ¾&ǨÖœO¬Çi¤*Å/2Ƽ¹>•1ß$dX§Íû !t«)–YQ;;̘“äïŒR\Ú^ß4¶r£B,j§<ª1TŽ-×®5h$™ˆ_“› ¸ÿ*µmªÜZÜC•'8ÏJ7¦”ù¾LF¶0~œWá§a-µp9­ð3Ÿþ"y|ª6å†O—­TtÎ0¹L…’Eå`ǽXmõË+ÈùKxNˆì~µO$%M‹4$û"î—9¨Ë*ÚæQ+ÇûE9·Ú¦î—'Ò›„Áéù¦¦âíSTÊâEyÃ’ßi+ã-Á><2.ÝóÚ¬ Ä–ÜB‘Xê:SÇq¿*É‚¬qØŽ´¯*¬±HÃ*­ƒò;T¥¥¶¹§Íj Í֦ؔ»árìˆcqü—ÁU¹ÑµÞIF™§.—cä8ç|tÆwÍDXÙ¼MÀ<ó¸ËM-ÀÈ>£·]M¢‡P˜•=Óò¦ŦÌüâÕñ¹­,Íp´»ÙOÒ´9#°R© ËžUó4ß[Ž¤éÈ@'ήײÇonV Æ1YÇ\È–/È}æÎ.7)‡8Ç64àY4k æâúX`ð]™8-¶ÇÔzU ‰µ¯ïí~{Ä[/ìáCÙGõëDšv·ÒîT1W¹u^_ò“ú­C¯ÃŸ#Zxñ¤ÜÏ?›3pX—F—ÂÜftÍ* >êÜÍy ÈÄ0Î1Þ´›;Ë]BÕ.-eçFêr=Õçû+–³–9ÕU¤SÌ(#êZÑ´^+´ÔeUÔYl¯À9Iòßù6Õ©Óóº(µ§Ì«l™dcî(÷*|otáàl?ˆúÕKPâOCš1tc¾¶{’®Q‰AêúT…·é:ŒVñ1{yUyH—¤äˆ½ê‡§$›.9+¦Iô?$Éÿ¥8ý›®T©¡¦ˆc=‡ÛÿzHcnAéùWRÅ$ÏCù×WYÄ£i°Ì9¢uqæ¤aya¬M4ò,h;±Åg¶÷W°L9¥‘1ÿq‡/Û:†±w}Ê’M#ª v-ú×GU*lV³(ûy„úÉñ‚¼«²3š¼Ô®%Uæ>é=À d_Ýæò’•ó =~8‘å²jrM»}LŽe;Ó¸/„ŠM˜~u¹ï°§ÕH#loG±äÉÕ`.hüþö¢£¼ØoÛjwÜËçQ²„6Çe6:P–çMÃç9£«}*(‹ÈäÁw¦ŽÜ„®ÞöãÔ÷¥óîíE‘9ãïŸ1\-“\1ŸÚº;!yøS·ÐÖÉÅVH— |£1].säÀn>¿Ö¼õ§ÝK¥ëv—êkyVM»Œî>£5餂ÛZáIíæ‘„óÇ)8åÛ çË|VÖ,úwv=£Óš—ƒÕb”Heµ²©`|ªKGâ»yŒ)8XfOÙºŠç½8Ô &u‘Hœc“U{» zò;lAžCÊ‚Gs‘ÐíÔÖzǽí®OG<›ôË®©MjÍo{êù¬Ï]žöÚê+[)Ð]Èp1¼+¿¼|•3ÖtÿÃê¯g£kú··7›ÅJãâa¶Ã9åžôÖÁ¢€<6m%üò6d¸o{2ÇËÈTäÂñªl©¨ú¥âq‚åýÉ‹(×Oc…ŽFå‰Ý™©Û˜îC£¨Y“óÚ¡r ä÷é\²˜H§qŠÊž5.|˜ú}dñJï%¢ÈVÛ·ó¥y>t6„Kl$s(ýi¶³©ÚèšDÚÙýœCeY»ó¬úmí]ž½N;wø"oKxy[WžõN/×µ[§•ïæ‚6>ì0¹UQØm׿j%¯ïH{©Xy3“ZÑú\Ú÷JŒé}B7ÄOA‹‹C¨-ºÞBÓ3# dnv£^ Ý"ìjp'20Ä‹Ø?d~ÎÄâø$lŸ þþïÿ•z@Z Ne ¤yTÇÁ' ²Ô3<Ø÷Õ pþ½a«Øä!eÏ)Bh·:%ˆžk†Xz„ p=)œ¼msrnln¥Ó\õ1þGjg7jK7…sÄ×W6ÿ½Ä#-ólšk‚K†:åêZ€¿»0ZdYÛŸ 7ñÔ 89åôô©FÏIÒ8Zâ{û”Ó­b\G À(q°PAÉôÁÍd|1í1mõmuç2Z3 éb Ê;s*ùútõ¬Çƒ.våÄBËšiIó#_‘Šø©ïE}h-ï,õ¿esÄIY#9— <—èj³áÓr„¹<ÏÜT.¿Ä~ƒµÉ3Œ¤Hw>¾‚§Ý–(ÙÜòªŒ’NÀWž¸Z“YÖî/#6#R~\Ò`õ¥ÏH©ªÏèÇŽÙ%­ñ~©«–‹Æü=¹ÿ· êz𮓰& ß4^eÏJôPÅ*Š0'’Sw&tŒyIÍ Ž‹:«;}i ØR: Ç l0ÁvÛý©É FÅe¨þ ŠßÞÛR+$n:s?QùеêL×ì.VÛÅd!6ly©ˆèüEow¦®«7„ÉþÀ8åîþF´+Œø‡GµFºÓ_S·øVê× Ì˜ìk?.)Z=—V¢¹%fµ¼IÔÞÛDæi3·•Fq´-Ð[Ûƒ4År¨Oæ})kÞ8¿Ö‘¡Ó´™â${Ó]/‡~¤ŸåYÞ¿¬ÚÙG-•É»»”æ{Ÿâ>CÒ¦å'ÈZb|¦FGs%ƧqâËâI.C7¯lzt¤ËžipF)ž’§w;•<Æ“Í4ŸçéWZ§Gž“mÛC#*ƒÌsó§ðÞËêæ¡–LmÚ–ñ ‹4‚}œ¥E²Ãˆ%VXç÷’¬Ö×]†wëŠÌRà«¡ÇZ›Ó5o{ G;@ÏÄ3¸¬½F‘5qìÑÓêåMð_ü ÊAèvëQV’Úqu¦™(^­¾Á¿‡>¿jšMWHBCݨÇùª#ˆbá½^Óß ¨÷É]Ç‘ßqYºi¸J¤¸fääÒ¸ö\¸—ˆô[Yæ™yä˜Ä‡$Ÿä* ÿèXÄd½?\®ç}ñY´W6ÚKgy#G9øG6Ï;‘VMË@¸äal·a:ó±­§¥lZsü-’Ì5 K»i¥†ùgT°lã:¢q±øˆ1>¯72ï‘ô§Zí–ŽÏ-²˜Rmš5;)Û úV¨Ç0£¤0Ô6òÀɦaě܊:¬òŠÚû#d‘¥™˜±}ö'¿­)À9ëNa‡N$+_õð[­Ä‘B­êÜ;r„`@óßjÑ£±RÛgfœ$l åùéAc—üÆ–‚ûÝÌi2c¢—’ý£kzV©$:v¹bdWe䓜όoÆ~tωtßîM@ gæ¶›&0ÃuÇU?—Þ©’\À+>§zЯ&ï%ÄŒx£ñû˳:£,N2OÃ.Ã.è¸ù#ô>+ŸOArK~ë×åZ5­ÅµýªÜÚÎ’FÝò6ôÜVÐÀ `æ¤l5k½>Søk©"ŽM›â‘›K|dž<þ²r5ÿü×U­]B³Å¬»#Œ‚¿¥uPôþåâ:â´) /r[íÿ½B´˜$õî*w‰ð'3tœÕm‹£`ûåWñ{—&·ÿ3YÇ0Ë{§ò¡O…á'!†TÓV`¸ ½ˆì|¨þ'F\Ô_OéV6Ñžù9“*zæ1s–8¤&™_>´)ã¬/r`o§6655Am”úC…•‹{µ#ÎÞ¢t§Àe;œìõ/Ħ†\pÄÉWŒmÅ( êôÑ"™{œR¦Sý£½%ƒ¹:HvE(º3L–òÛ?â ç¥,“£óçŽÕÃx2.âÁš>o!Zÿ =Íÿ XÝE#\‚Ñö”ìqÜòã~ݺœãì;¶Õ©{/»1éZŒºbpÍu<Àî?úkKé²K6×Ó@ÂÓ¢[V…¤1þ.ÝЧ½ˆÐ#}€¾rHoYý÷5³\Ûhð,wL|5Ü|C©Á=6ùüU#ÆüT÷ò3O~[eø‚ƒèç隢Ƌ{Û’zôÝ^¢Èý.þFÏQ=¾š|–q¹à™RÂËú梅Q‚v•È¥S ³Í à>FÜ£ó¬Y;ìBm‡qÐ ¼ªwDá{ÍrÝnmÚ7_<ïQÿ„üB~6S¶h㪊Ðxs…t½JHµ.â9ŒÈ¸å·˜ QÖ–þÆßÒ´‹4žLŸ…rß iW6B ±»ÂO¡ï^zöÙö›©Yh³ÄË7>,„ì1êú«Ñúv­øR1äª6 ½vYQIRE7''m“|=ÄÚ¯ Þ‹‹ ÈBi n’|Çóë[Fƒí+@ÕâDº•të³€cŸe'Ѻ}ñ^|®ôO>n_䳇S<\.Qèn:×aµáY¢¶–6–èˆG+gîÇìúÖ,G®i¼7³ò¤¿4j}Üö¥T•:m7¡±Z¬þ´÷ ’Bš(øh\á­ÙjÑPrÄù š¸á뛋h¥·¸n@ܱH .ÙTL0™UŽp¾u#m¦Bœ9·‘wY ò}¨sŠtÇC¤®Š´‘¼r4r)‡Æ•†úúØb ¹båb*fâÅ_I+ò;8ëýjf=Mü ´Ñ/?B 9 –¢+ÁjYKÉP›RÔ'@“ÞM"ŽÅ‰¦£,ØsçVé´ý$`1þ–9¨¹ô«hÜImsÌ;« ~t0ÔÂ\ttô™"¯°-žm„Pžião*;>|%eHÈïJÈ)¾l ïÈœ£–SŽûŠäú}üéI”xhÞ˜¦ãàÀ©ð@³>?Â)D–ÝdóFÛSy3•6Þ@{еÀI—5,õ;ï<5æmœûí>6­Ëαì07?Ö¬ٮLJ5ïh“ðÇØ~2 Ûg{qâ2òÊž÷No°¯UñO³Ofœ3Ázμxb&þï³–äžS’¨Hr¬éh2JocUþý\ZÈíJKŸ÷î|õÖõ;{~#•-â(ñш;ŸÔT·XJ––ê·ßd*©Ý¢Ë#3 ’ÙÍ61F­†**/ÁWך“’òI_ê÷Ú´’ÊîÜ‹‚r~ÕœsnjAÊÿt¨ Îúã$~´ÌuÍ9%À—''l2Gò½w+.̤Q\1Í¿jæ@·9~… HqI)ËçÊ€MX(2sµhÜsÖsa(#Á>}U³þõßn•kà‰¹u©¡ÎÒDvó ÷ªù“q†U$V¯ 6·“BÛ`×Rž·tƒY_É~â;¸o."’”-ê• 6=õc¼Ó!k9Ybåp¹Ux,€à®q¶qTð­±Ûbµøå)¼‘\1†lå{õ§ú^ŒÚ…ÁžEQÌyäýö¤ã†ægÄQs`~uUÔŸ%Ä¥Ú!G‰“Î@^žéÎi)¡òé€Ç~Pw4Ѧdv^@NqÌFùÐxÌHÃ.ôÍ;Bw¦©¢RÚÀFÇ;eM':4nÈÃqHÛÝ7Ų²žaRW,·Þ*üJqE J2§ÐŒø£(nhmí‰éŠo ·0ûYFQÅ7…¹Njâ2ƒÊF  B D˜¢œä’s@òÍM_½‹j²éÛxNê*ͨEnÇü² ¿'5í¯í¨>ŸýŸø£b¯8† &™ü³^öp-}¤påÉ8jVîOÊE5îÏí5 Kýžµ×QŸ Kg?/ó§cì˜v|é—ùÒ »R²:O÷³B5¨ˆ“‡ôeD‘%x¤’Ndå ûBqÖ¢­¢ñ®á„íÎá~椵nB¶!F?éPœyÓm'Á]jÙ§‘c_˜³†7¨9–+»w½Ðc—7vS óÀþU[¿Qôñª… ØvªËeãIªÎ¥KI"ˆ”ž§$/òªÞ¦Ì5)üDUpØpc|}jNèoÃ4rs\0P…sÒ‡îIÊOLT÷ 9ÿÄö¡N>/ý& I$` žá8Éâ87Áål}.imv2 îT+Æq:ñjsç¶?•W• ]÷«gó&«o;aúVT íµ]E š¹0{t"º–ñØŠê‹gR6c0 ¨9ªYˆ[ÞOo"gÃl:Øý«AzUW‰lÌö÷ʾ쿳|yކ²1¾M†FÅ; Jã#çÖž˜…ÔJ­ÔošF09yÛaŽâ”Óœ-؉ŽÎ0)™W·‚cÝí¸~ÞX¹äÙíQÚæoaà$Qª—$œy ¼ZEÿN»US‹™Rú'cÉúŸö¥A»E]g¤Tn¥HU¼Lò°ÆÝê»–”òåLôÏSæjWZ¸F‹°Ê~dö¨ˆîm–eñUš$ýÕls·rkKx³/Oí‡>GIdÈ€ÌGÄ; t±™§@— Pw§Ö¶×–“r@#HÀ*¹Ï3yzŸéH {·¿Anżû ùSZ-ÅóD”ºl‘[”â°7jiiexnÄv¶­ã7ºw&µNàÓzö÷š°Fžlg ퟨÛó­;…øNÌ]PÂ9¦`éÊ1Ê»íé°FY+…É­—/ƒ,Ð}ßÉbº†¯(µ×˜Ä —9ì|ª‰´ 9ù´Ý&ÕÜÚ‚f” î:(¯Hq%½Ñ°ŽÒÑ„&y.~èäüûRPh66ž¤'±ó'½!ä•Ùu`ƒ$yÛMÒ4äài®å·Ë©1¬ƒ•Ôî7¥U ”YÝåd\l~«OÕ=Ÿê2q5Ý®Ÿrë§ÝÌeš._v=Á%qæ21UÎ?áUÑ!Ò¤Frbñ þµ*qÝWÙKYŠ^ƒ•U/æ7€‡S'ñmô¡šDŽ6vØDµb-" ×—Îæâ3v"nF‰wpç©ò½JVÏûÓä…—|œ)ÇÞ´½>K[ks3JªÀe˜÷5œÚ(¹¿Š8‹¢6ÅyëÖ¬×6ÐC~*11 ³JóÇZ• Ò¶zo¥ÉÃ«Ë ¨_êš÷ ñ]͕͌¤Ú3ÊãoB0©Ÿ.õç&fwgvæf9&·ÍEïßû0êÒéÍ®ƒ¨Žæ¸ïÊÃÿ™¬µ0Â)Z¨Ë)KkéCACV ÀЊ/z0®87jîõø×u¯LPØRHq!¡®8Z‡µé\zW|4­»{„zÒ&”· +gÏ­p2èx?Ã4I²QT £&ñÑân®­­Ëa¤(úœPK¢!ø‘uÐ}˜j¶ü7¼’Kï"¬yÀõ9§ðû4Ôôë–K©î†ÜñÚ»«}@­5 ½X4mR© Ä!Ê0ò>FµY.ìVåXÁ¨yYWeÃVc„ÎywéKÜJž%œì˜C.zòœ`ý¦óMãLóc—ËcË&¤áC€2hêÙÀ¤ 2hèÇ3@ÐI‹sdìµ;Â`ž&µÉ ñc?é5¿ï œáUç×â”|0©sŸ–?.qn.†FI4Ù-Çpxw–s<ƒ!‡ýêš×<»"Õ«®V[»X{¢ûŸöª–÷¨Œj+pY$œ›ˆOÎø®¥qŽõÔV…š2kºŠõ‘#ùÒz–±=æšð̙ޟ8#éIi;b“’ÚB¤0zÖjÊí#Mê3W/ú![ƪÇc×Ê‚yMµôs©%ÊœùÿJ&Ÿø<ž*ø€à®psý)úéò‹3)…å}ð:šé5Ó,$ß(Ÿ³âý8À’GúúUoˆo¡Ôµ‘,<  ñŠ‹n¥g6Ñf 䑾Ek÷R¤F8×—™Í+¤¶¶ÊZ̲’P’Jþ,Ž¿Ï#$r$^™ØýªÇ.T?0ÏQÞ$¡À üèþ޹¾x­T¶ª)öHé7ÿ„–1³*îAßz·é“ íB…B©`ýjˆ¶òG ý›Ô‘Wg@]q5´R‡lvÎÔ3ü#ðó4Ehšté`¨«ÿQ$XÉýÎlgì+EÒÑ „/ÂP›TU”Q¤#^‹©Y. .Wâ|Öeòz$©—³ÚŠdTOj#KjWiWCN¾YõÊÓ(6y—?j¥ßpõÌwˆ_W–í Ëò;PK}±ÐÈ£Ò5GŠîütßl7ʨ¾Ó¬,®4 $vUxH¥Ž:¶jsK³Ô#´`²´ËËxò{K@»Õ5;§‚ÒÙej›4Ð=‡¥)a÷pÉÔeŒ°µ%ÃEFk„†Ðʧ ü#Ìž”Ö%†YKJÞñå“ÜúQcšÒû‡$¿U&8dŽ4aœ+nN~˜Zë’ÞÅ ‚yÎI?b­G¦K RKä°èvê’›—Œ¦zdäÔoj.aŠ\<½ênöE·´!FÀl*“tåå-•ùÓaÔF+8ø.<)6‘²­RÖhYµ&™ðY)‹“-·Läõ¬ îOε“y GriínîÍr…ŸþÞó ÉOJµ§†×&PÔMJ’ña… ïA\½jÙTÓ4Ź©8m«‹ÞŠ:oÚ”‚ n®b· Ë+„EX“€+Ž\ð„‰ò¥[û$Ô'öbxËñed1øé&Å3“žãùš¿Iýôÿî›D‡\ºmQâ7º†5ù.ÇQ¹­s‡ì¬­ýœ[ðõÐŽâ8m ë*ÚrŒ`\V^}]¥é3{Kôæ¤ÖuãŽO8Oì3‹ÀÁÜi×¥#Žb¬Þƒ*z÷¬Âx&´¸’Þâ7ŠhØ££Œ#¨5ëä³¼´¸/¦_¼vϲG"e^›ÿ]þuç?iòXÉÇ3þ–GªÜ2ï™Gß—–™¦Í’r©õ 1݈¤ž”¬? |é'—$ãéKA´c˜îN}*ù„ÇQŒG€6«V‰¦Újñèí§Î‹u Ôj‘O1d“Ï3æµTV+±ûÖ‡ìŠ->.$Ô%»’ÐPã#Ûÿ*Fy8Á´YÑAdÏ?%†Å/´QŸp·zƒO:Ç& Ä݈ÏP0züûUãˆum:Xd²ŽÎâKˆ#u–"¼§Áƒú€FýjoDÑm%½MX+¼PeâW‘˜vÎäù‘õ£jÚtw’ÛG,ÓIW!XOÈu+ÕO¾Ïgú;‚öôÊW êúë;A&›8&7I$<¬|‚·_=ªïc=Â'í'ÃŒ‡ÎÃýª¶xJ ìå‚…yP…SníqD·öC§[[“ÅÖ¡­¹÷Œ2LÑÀ¢)þJ785É]Ã.7IYÜGÅ<8±Ée¡õÓØ´wó œ}kÔ­nÜòÉ‘3’Bsê­êkm+KÓ®—coi1É a3êqÖ¡ìx*ËU¾†{¹ŠÆÇ•ËÝÁ'»S1Í.й±K%nfÌŘ4!eìzTw(ÔÚBܪĒ3×Ò´jw ðôöö–NßÞ2{Å ›îÞD±èk<¶’PT“œí¾Ý+C®6bêq¬rÛcÛ£âEÝÎÍó¦þëgÒ )>¢›È3Èæœfö3”qžÇʸ7(É4¤ë”WÛj@.XyúÑ¢ç=?•k>Äxƒ‰­ø_DÖ®´ÔÕÜG!…ØtÌUNøüë$=zfµïìãl³û{áþn± åûA'óÅ ¢¤¶²w8û‘˜k¶RiœA©i³i-nd‰ÉV íô¨Èpe\³¿Ê´m#OöÛÅЀú„“€?ù‡Äÿò¬ú§ähåÃ/œ¶hs\½BMA h˺ ù×7Z4#™±Ž›çʸáe‹˜{çÊ•ÈQ…® |ÐýØ_À æ®ü h$ŠòR7,«Ÿ¿õª`§-iœh`Ð\ŒåÎFþ_Ê«æÉ¶%Œ÷L¥q>_‰.—;&}¨o ÍIj÷ q¬ÞL!¥b>YÚ¢¤“Ê6Ð3I6›åµu"7Ôt*ÍSœ‹µ9š$±ák*&œ†v>½tðÁ‘”°o•[-ãG¶^f'm±TØ®¶±7GOÔéVûSˆ$ÁÜ.GËþ ËÜ_Ò{±òEëƒðö™V`&l{â³ÝzåA ©.Ë¹ÎØÞ´%–9VÕAÃdòçlŠÎuøeYðAtëLÀ½ÊÌmsÿäÓø+ñÀP~<õô¯H{8á¾¼á*æçJ†íWÄ3ž`NA¯>$ÂQȧŸ™ùV«ì“Š–ÏSn¼uU¹>%¹fÀ.F ýGéWó&áh³ôçWdüš'èÚ6‹ ·•ŠEž8U˜¹»×ª™Â:BiãË%«Û&-üeär™øˆë¾>u¼þÞV¶¸ ,³d# ËŒ<ÍRµ> õÉÈ÷6±ÿz£½»Fœð¨MI£@Ó¤ m`¿?kQ4g|Û8ÍV´«•x4`BãcW+)#ePÇ4Š-Ú’*z®›¨Bìïž,ò9×òªÞ— ë×G¡¨jos '™Q¡X×?éÆk]œDaæ,¤vX¼Ô‚Ü›k42:nåwÐzÐÉˤ? ùl}²9¨U#ŠÆ}©pD §êzÅ…²x¯‰ž\± ïùV™7iö0‰5 o#æ8ÚÙÜžÕ¯ñ_–F»3žXЮ 7eïŸJ„²'¹–§ÿáŒp¦•à{=HµÙ‘ðÃlü#ôªš{-CÆ\¤Èç”ykYÑZZÚÙB1(•W8‡„£Ôäk»]‘ï+||ü­VÅ©QË-ý3Ìj´RÉŠ.ÄBóPîž/¬­ØÎ -ÌŒ²7ñ?tþGæ*°Ö³³¼×Ë%’ãÄšTå8ò@~&òë½ <Æ’J¦…©1bPK $¡ßøÇ»ùÔ•¿]Á~#Öå&â?Ž>n¶3Ó=zmóí±,°ŠÜù²® fÈý$ºóðVµ›‹‹½SÖäÁ…‚YÛ&~<"‘õªøkZöš-ì¸[NÓàQ™ù•’©Ïþ¡Y6=Ú·‚Ümùž*ؼ7Ý4ö£SÄê(ØÅ9î+‰#s½qÁHÃoÐÕ‹­ÌÜ¢ÇÈX~) ÀÎ9ÏÓ­Wyò0w© Y¸Ðu«]VÜs5»†+üC¸ûPÍ7Ìm)¦þOoä¼…¥rüÑÈÿ½3…’Þêæ>N’{ÿ:¢hþØ83U†ÜI~mæA†YЯ.}z~tîóÚ‡ ÇtV³xYp¢Þ6ç°Øu¬Í­pÑè–E.Sê\Y•¨ÝX>+ÐXI²·™ÏM«Ê×)×õG­s#gsœ±={ÖÙ­j:§j^8°}>ÝÀRe|I"5Πåöy¤j6Ïøbö· ¶TåIóÁþX¡Å¢‘o}sÓ4•´Æ{$æ>ü^áùŸ—éJ¯_žÕò&¾üm˜Ú›rìwÇÖ—Vå9¤äœòÑ$2:`üëuþÌ¿ŠöÑÈ\;ä>¹þºÃ6ï^­þ̼?w£èÚ—I£›•¿Smk)œG„F&Ø$‚Ü£8ýÃSä‰+Tf¿ÚoLþïöá}tPµ‚ä}Ã?œf±Dœü«Ñ_Ú™n/8AÖåÓMšÉk%¯øÞ&J?7ðŒ‰^uÎæ*[MÚMpÅ—që\zW/À(àTyÓ›vO>dÓqðâ†×xõ?­CVrN”RýIÀò®Ž.QÌFõÄí@è.E¡®gŽw`£æMjW² †ß€ ‡•ÕŒΪ|¦™¯›Q•gBg»cùÖ–ãS>š?i'ò¯åUä·M%ÑkÛ'ÙGw$“Í ÄšT•4NQÔÕŽŠ¯¤ãÒºÈç5Ôih‡‹´þ‹Ÿ›D“Šläÿ›ý«; OSF |êšÓÅz‰²Ûq¨Áq8‘_—´]-’îÊÕâ`^æ™ÎÀýëæ>u~àýd¶žÚ|’„žñ cú~´pÚ²æQRq~K«^h‚E¼µcÌ™ß#b*¯^Ø0HÞ¬ÒêbGmV݇8¹‹{dUjê~k÷¸¶ˆÇ‡à=ŸÊ«Æ- ú’ƒqÈŸ?ï%â–ÙÛs¶|©Pω0“’P~ pG­Xnô¦¼!àe]ðCmЇÔt¹,*ßÃZ0›’å¡+äôñ'O¡[~3SŠçœlòÅÌÀvÜšºÕ¦’úX®JøÊw `Z£{6¿G±ŠÔKºŒÈÚ¬|X¯iso¨Æ¾é÷$Ž{Õ~&GêJPR“²å¡ß¾îž§=*Ûmy"Ƥd±zÖ[¢ê±‰{o¿ûÕÎÛTGE1à–ÆyM&QcÔÒåî¾Út!(È3×eëó¦:f§eÉ};nÙnb}vïEkxï5¸Þ\ŽHö!±‚r?CR…»´Å¶º…‚ƒ$JN9yq· ©‹ãî: RçÁW×µY¢-ü…AÇ0€ý+:"Ê~&Óg; g勯SÌB)rã;£×zеYðÎ[Ô†> BŠÃ|ÐVÅ÷š½Þ©Ïs¼V¨ WIÆXíÓÒ¥'‘í­o uù;6[»ûKWüEåÂC –cU©=£ðé»1sÊ6ñ XSòß5޵ÌÒÊÉ3£,\“úÒr_+ÉÊŒN:3÷úRcôø»ÜìÏzÆ¿ ëö«Ã6ü?ifàL3·…I$õÖª¦åï¯noä¾4Œø=²v“pœ÷š¤“JAŽ1…å'r|ëMâ ¤Ðøjâðû4Øç°¦Ç RPðƒŒâ ò¥M™o´Í^;ífÚÆ#Íø4ncÛ™±·Ø £ Öºy乞K‰˜´’1vo2Nô ¸ÅlEmTbN[¤äÎïGÆEõ£ Æ(8dѱ帢î>UÁ±\qܣʇ{Ðõ®ÍqÀÚ¸³¼Šå‡%HÈaÜVÁ¦ÜÚËkݲ¬!€ÉŒÇõ¬mŽ«Ä b¥á>8Wòô4œÜ­pdÚé› W nä9óÏZ{ky.ÎÄ ÕF@˜„ø‘™ßÚêãPDwˆ…P2K6¨Oþ© FÎP§YÍ­¹¸ÓíÌߌÍpSªFJ®}w#§©è g`zäzÖ§ÁÚÆ‹gis.±wqø» 1B$¹aÊAa¶7ï×Ò©²ðå›MÑçûà/Dž§·J³…úoÒ~ íJy\¼‘vp¼ò,Q.dsÊ*÷ “Û[C yT‰r ó« û9³ÑâŽãUý½Û ð©è?Þ­Ç Çwkˆa 'T|çoZ´¹*%]•~·K‘*¤¢)àlûÿ™ûV§ga?áwº¸Üç¥a—vWVz“I òÙÜ¡äf‰†Hë‚ ÿ:a¨ñMÜëe6¼ÝÆÌrGn¸ôóª9tò·$ø7ô¿PÆ ±ÉrhÚÍõ•»¥»PŠ}íþ/J¨ÜÉq©ÎÆÑZ(ï¸ßè)7Gc¨´w× ò©Èyì<÷«¤v°y½jžÕï$²;"tÝ$XØ•Á.þó1êjíO†ß†ÞíÀâ¨OROôÍk\ªS=+ ãkÿñ…¾ƒ§¾l­d(]OÆÿ¼ß 6_:fÊY©œqâiƒÂÐIgÃëu1g–í¿f¤þèé¯ëR÷Ú Ž³´‰Ì–ÎIqÌH9ô'žÎ (ò(Dá‰@ÆIíV}+CUEQïªõvéžøóùÖ”Ó|£¸f)­ðeÆ‚¯}j^m>VuÞ#Øå¹ßj®†ú׫%‚)l[OµŠ9" ¬†Q̤ž ŽþµŒño³mZÒú{Ý&®-›Þ0Á•d=ð§¶{h#>j@äÅ~虳 ~t„ÀH#Ëô§3#Ç;$ŠQÔà« i´¹ñI°ý)È®iÜ#ìc\Öôâ½fx´Ž‚º{‚Áæ™9 ?Ø÷¹GÏ¥z³Ù„šÿhÓðüè–zl7fFWÎŒ;`ì2NzŸaú/‘ýšÛ@ž?å"d23üQ¼íŒ<>€Ö‘ìVúÂeÖñ¤ÐxËq)u{¤˜çb°Nتï,­¢ÜqB£'Ùý¦4ËK¿epßÉgúUp±9ÍD1¸®CÉ’2¥¬§µzœÐ—ÇZ!qÚ™LGw'Öº‹ŸZê0£ -u¨ 0©­ K(gw½pƒç_‹éQ¤ÓëkvwNUælì<Íãº.7AâžÉ©U–;KÄœÈ$ÌvþU"°ó®Ur1÷¦Z~Œ£\àœóò²ŸŸzÀ‰2÷#aU=$åÇDOot†W’¼ 4vv8*˜ÉÍ!uÁú¬Ê“NŒÇ?გsúT嬭oqÑ`”naóò­:Ú+}OMŽú9dŽê{ŠíDç-½ô8ñM½Ý¢ÂZ#hº åŒr:õ#§¦jñ¬ZÅ}§I `ÊvòÚ’{s d/Jx¤Ë ïß}ê´[|³VI%µT:…ÆvÖ—AŒ Þ뎠zÕçFÕí^.e™NÙÀjO^ÒRá|e›÷‰EU%Ð cÆŽGŠMÈd8§º‘I9@Ö­/í¹ƒû탟åV¸BTÈcµyºçVÖ4¦§3.û÷ÿzµö©uo%ͼ‡a‡ô4/’Æ=k ØuM:د‰+nÝk*™"¥ôIÊBÉ’G™©{HÕõI6M‘ïtæ==(úE½äVÏq~å®ndçq×ð¸»l f²9c¶(sq¤[]—6±ÈÁ$ïúUWTàfF2iržEÜÆûœyßä~õ ºûÙÆâ¹—¨óäÜz2Û²+€¬â´Óy€9',YpIùSOjú›.i§®ßˆ”»öQÓîGÚ¬¶¶ÿ†¸b»FÀ±ùÖyí<´—š\ês Ây|³ÿQS‰\ËùZýâg}½(êpÃ~´v *{VŽ*Evq×j llßCFË|ëŽ 5Ø¢’TnBÐsŒàe«ŽÖ€¸f‹‡n§ʃ•WÔ×q9¢·aC²îNôPyŽ{Tœm¼ìæMSƒ­u”âH-žà; fFfL9Qé¸úÔ7ðßÙÞ¶›op—¶ìŒ' ¸nõPÒ5[É&²ÓãŽ%Y!Vå$Œ3±ÞµÕ¬}¥\ðíê°M?’IeÁŒœàÊ~¿@jƒË=Õ³ó³J:xz{ý_Ê¿îÿ1—û0–øÅ}©ê,-vFP¶<‰ßOë[†‡a¤"Ǧڬ®ÝsNµ‘#…²œ»?÷§ñ?‰—czVùìªÝ.:Ï/+tÀM!m(,r7¸O¦Tç§Ê¸1¾1„lg'8õ¦ÒF »Vov9Ny7cNB™¬h–Úƒ9l$ŒI¨í¿å÷ªmÖ}¤ÍÌÑ—\äH›‚FÿCÿ:V‘rᜲƒä;ÓVWdx¥€H£vCåæ•7´+¦fú‡é8²×m®-nSx®`^duóë|ÆôHý¦pýš`\Ouè‘ÿX«pnŸÄ¶Ê“?áîÁ&)—§oˆ~½ÿJÁ5=*çHÔæ°ºP$‰±‘Ð1Užž\Ž«"EÓ‰½©j:¬e¤@l }šRÙ‘‡¦>¦~tfœ/u{xúµÄOš©Dñõ æGÚìç€câ9UÕ[—M¶|†ÆvëËžËçßõ­À­¥¥ºDï ¥¬ "`îåè(£ÁTENrÈîLcc¦BmÛš1ª‘NK‘Ýz’Œ5ÑEnƒâùQÑÑRéÉä`uùÿJu!åÂ*€ ôÇJ—À)XT…by•IØã IÑ\ó0ÀiÆC)Sœ ÉÍ7?´ O`sU¥~Yj2ãáßpNŸ¯¹€‹mD.Ò´žAÇŸ_ž¬¢ÓA6ÚÌ–úÄ-²æØ¶zÈ>cï^ˆºHÖä~sçPz¶•§º>«¨Ø­Ç ªŽ¹ÇR=>}2j=Û\Hq‹’•f­Ä <Ú–— ¤Æé "ÅÌaÙr{ç¾jÅÂÜOm¥i/ew¥þ3”ód(W? j•¬Ãce«6­ä3ÍpÅÅ´9+ ú±ê}:RqñUÚ“ö‘Æø.Í9í½*QN;b:çsD‡´n-‹\‚×M³°’Î$&YOâsž‹û£ßÏ­gñE$¹¤Ÿ:žÖ½þ¡ÃáFŠ€1J†l“°$ã­Ié<)©ß‹ya·)dí¼¤€1ñÞ¬bK4ŠÙo$ÛD®‰{s"¤(Ò1ìŠMMÜpv³§Z-ÛØóÆX£+ó¯Ú×ÛèVö6Ö‰ãòíÙQGŸÎªÚ—j OðjÃÞ`y›>›mFœ™1’¨Í(#oÓj°éœ-©^ªÍw›hNàï‘òíõ¦ºF­oiªþ.þØ];¹øÿìjÁ«q¥µ´\š`ñåažfUþ¿*/5@$š»'!·Òô19`AñÈçÞcüÏ¥g|A¯OªÜòÆY-û©çêj:ëR¼Ô%2]Ü4¯ŸÞ;íM_¯•NÄžäsÈÚÚ$ì2h†CÐR„!ê>Ô##⢱t Æ‹œ ž´2É~êûÍåDžµÇjê ×T)ÉGX÷¥BÒª€¥YÁím^y–(×,jå§ØCcÊ—õ8ëý7Ò¬–ÎÜ;®fq“ééRjIo{|Ò%-Ïì:)GøŠ,¬ŠÈRÁð:åŸjD!#mÅ(«ƒœc=¨¢-Š×ánž†­!®&©;§Å­Ñç÷±ªÂÚŠã*@øÆÿ1F⧬èMã’’6«ë"•Ýþb£­p.ç?Aðßø¶q隉" E1ýáü-ëRWø‹ Â6Aêk=ãptÍÈeŽE¹³YA%±îäoœ®ÜiQÉ®»¸5)è’—Î7ÅWõ;‡ þ ‚2:·6Þ•(épCë]Œ-¼q+\Ϲve^ç劭ˆ,®I…´N¿ –@r;~X¥x‹Q6Ö"ÒÞY%¿¾`†V;…ïAAkÇp®ê£5f¾LíD’[PáaŽÀŠ5@{(À¥Ô{ª½Nh€À¨ño" bè¦û’yÎW¥*rfÓ¯¥5w íçNrQö q HpÞüL •ÈÆGQëTh©\?¦AÌ®ñ¿*žàrœÿ*¾¡\Œ¼ë=ö•e3‹Kø¹šLl£ 8È?‘ûTA{Ðõ’±Ê/Éœš6{R#ƒ]Ìýÿ*ºUFzŠàÁÄ1åš #²ççGíž•ÇοåAœ§í]ü"»oáüëŽ;œ“çC‚{ÐGEÇÖ¸–=ÅqÀr¦…wÆÂDŽyW$ùN#L°tƒ„m—- ʆѥŒg™Hln7¯Lê–ññd·*‘‰nÙe‘•Bç€?¯Ö¼ó§ÃÉkloʸ­ë^ºkZMÁ8Fˆ#È®7¬yçœu˜±§í’—uUþMHb‹Ód›\¦¿¨â;»C)HŸ”ßË‘¥þæ' ãzùÓIŸÃ•‹åâr¿|ÇùW[HÑ»XÝfÆboÌl8ùFj•:d©,'Ï$7–5–Ü)ÈÆAë]%ˆæ8ï½vHg<ªùÚ¥;!¡Ë2s™ºÍÿ!,rBÛ©%7Œç¨þùéN%@³S³ ýGûÎõ~9Õ,µ[‹d³„Å”^pK`g œ÷ÇØŠ4Àh¼µ¬N¡Ç+{ËËÚªzç³[N'¼—Pžò;Y"·}œòøŽGºsûçïÞ¥¸_V—SÒE˪nÇ™¢žøòëœTΣÜCrM€Boö&‡’x#m4Ëm FKWŽ8bP¤àóèNÛäŸÊ’‚Þ&¹[«éV(ÞIØ/1ì7è=)¿”—‡.”¿"C a±÷›÷GÔíõ¬¦ÒF»[xäÕYÂ/9æŒï× Éü‚8=aщ º°;Ú“rDLÀc;zf‹Ç Án¹0Á‘î€0>˜[†å‰I# ã½(oØ78²lr7ڛƌªdß#Ò“»`Y#,¸;Aÿ=hòMËlI?ó4)qa7ÈÎT2Íâñɹßr|©5S=Ä‚@LH…˜u'­*È,22¤Ù…¼*§ ËŽ¹4ìûžg×l_LâÍ<ƒˆ$*¹ëËÔ¶*&8¥šà²¹«Ï´;xeã9¤‰Ô©Eñ9N}á¶>xÅVUBŒ(Àò©H‰?Bòà#Uc¹ã=RãJ[e· à˺Jö_•WÚ‘r¦R}ŠÜ×B·3Îóx³HÒ±ø™ŽIúÓ~lLÑùòœ‡·OéMË`œôÇz:°ìÅzýè…Šyã븤™°*NûÍÚ’yKµ(Ö’|gÈ×1'sŠÏ@Mƒæ >uÄT–êiN”Rp(3“é\pmÍué]QdŽÂõ?ÖÉ{tÒ¾9céž…ª¢ªÜØ@[>B´]*Õm4ø¡;62ÇüÝéSI*&?$Œ¬„·Å,=i4p¬ÈÁè|©ÁÆØ¥¨’ÙÈëµ-Žø¤ˆõ£¡çˆyŠ:Å6åÏCI²’9ÁÇ.õÄår½¶ gÈQ"ø€”<’ ñRÖÚÒÜ"ÛÞ¿…rª#V#·ùÔJ€»¢‚TY o#ЊéEK°±å–7h²Á©]Á!š9¨bÛc5_»Ö/ç½nTÄAŽ3îàyÿµ6ø[~!€òeÏçJÇoâ8<¦OS°¥¬)e«”¸HB;xæº[¦ÊŽU-çßÖ¥Ð(a¾qåçE„AÛÐ`•˜Ž›QWÁYÉÉÛ69òHPFpêzœÐss"¿\Ô*êJáqƒÖ¡Ä̹“—°õ§QÊn:w¦LØs°¥¢m–åIëD×ß#Äl°êCtÅFq-¼—Z4±D@’ñ ßéÞ­R]þ*~e^_3ž§¹ûæœFî¨KĤc­§#|‘EhÚ6å‘YO“ R°ÙÝ\m¼’ÿ¡I«KyÛü2¤oçN”ÜäŽB@À$c¶ô>[Êxѯ1™y!ôvßì3­4œÈªòb~jÊæá›EzäÆ)Fyb°ÈØŸASéÑÈÃ[C4Ê D±Ðg' c¯®j”$ïáä b>UFïóò§š&…ýãs™‘âµýØü_óÖ¯ÖzU½—3Õ/*ƽZÊÕë#Šá‹ñckC –d²eü??ôfŸþ‹hR骞-ÂÜ?ýæ|·Û§åYoû2׸UšçÃ7–VxÇAþaÚ½j±~Ñ[Ÿ>Ô[»x'ŒE2‰ö5™‡[–ÜìÕÏôü9#ìTx5óœ©5»{Tö]­¼ÜAÃñÑ}ù­”lvQúŠÁðpkÐá˱ÝËê4óÁ-³8·­FÈÈïI4™4 Þè$àU’¨bǶh¬Ä 'w¤žtÏÅö® W›"¹Û Scp½¢´¯&È1]G <¡6''ÈQUËnvòE@7+“G$WnôaŠOc]ƒÚ¸álú×R8>fº âáf¶2Çm÷6¯œUí&T–I < ½M¡nlƒœvªéPÜ’±àm°NiżÀŸ _ü§ùSsžƒ4<Ìæ¥J±ëéE·tó¤c¸ÇÊû:ì}h¿ýY_:“‡jpŒ3I*pNM“†GÊ‘Š·QçPŽc†otGV(>C°¦ñ¿7SÓó£#®p(ˆû® Ï"¸çÂMaJ‡œmPÙÔ,Iä$ã4ž;÷£È„Õ؎”Ñ…Á;ç¥|„¹y¨Ë€WŠoäŸxãÖ•æPp­AÁ%cÏŠ4 +‚NØM0 œïJY\{Ò ïåMð’v2?{a֜Ü|]OZŽŒã9ó& HQ“òªòCâÈ­N{«#s&XI`qÜ~B³»„HRC´[(' '¦+bV” ñT^$áéã’}FÅKÂÀ³§tîHô§iò(½²$oÜŠè¶!rœ»:”±f6Žž@?mªÖçš.GPݶ©M%ð“*É‚BkFÊ´;Q :`ôëN’8ÌAí½&¯!^b¡½ô¨“”‚ÑdîzTÙ$a0²n<öïL.Xb¤l3žôîêV(ØŒ‚06¨ç á3?0©²æ@‹#mË¿_,b¡">ðùÔ­ú;XH°Ÿt>=HÞ¢<f³õÚEý? ³BеùtN9¤ <.<7LÁùúâµk+¸æö{¦Îk`·sE„S‘ï1Áµ`\1g5÷éö®XL¡¤LìPnsôé 2×ð¼5%»)aé|1f\ü±X:ë ï¬‹úÚÿ&¾‘©z«ÿGþ±ÚK=¸“iÇù㣠vh˜$2`ü)[ ÿ¥ŽãëGK˜¢S LòŒ2¨SËóï@n­&pÑÝò«tnlþM‘ùÖõ¿&E/F£vÊDÀ4RÂyÚ68 wÁﱬ’~'Ö¯KKlÅØò5Áö­/‹$»µá½Rk¯ÃÌ‚& ¬¤ŒŸ:ó«ÈL†¥Ô’!7ò8ƒŠs/Þfæ¸ñ“ÅjÇ9ÉœU:ÖÖ{Ù„6г±ò {}¤½„¥¸…¤ýèÕ·;É;ßÁw¸â;Ëëm­%Â9ƒJ¤d½EôŸD“Û•n®¬6úsU,âŠqAèÿìÃõ¯¸¢òNV%n`8èyÇõ§vúµ¤Ë=­äqJ½dú÷ô¬æŠzÔ<7ûL•™/ÙF¶œc|™Æ©Ïú(‹îÞ#jq”=½ÚÉjOû©ÓCmBRC«þ_:Tñ¨ÕÉóÁkÉŸw§ö¦ßðF‚ÜQ;MôG>¢œ/]Gª_[áÂíY-vv£ôï2·®¿u§µMfÆ.KmBÕ}LhOÞŽ}¯q—ÄmJØœçxÖ°ªê®ôŸ,¶¾¥š)$ÍÊl|Rñ8‹WµŽOÝe‰3ùÔû^öœ!· t>ÿÍe4Rhã¢Ä¼/¨ç—í}ϵ^9ºˆÅ>½nèAxî_ݬïTX…§Çâƒï…=sÜ dMh\¢ó‚ ŒŽ¢Ÿ `ýœ²ê'—ñ»xœó×‘Æ $Rþù~t`¼£b¬F¡Ÿ„Ñ„Mßjs:ê›8@Cæi@  8\ì~T¨¶œŒˆ›íQg ðh0Ôr ä‚:ƒA\p\yC]]\p/Öº…S˜g8®¨³‹€†;i[9ËÒ§nm¶úÔ‰¾šÇüçô62Ñäô¥¾ÎbÛ9?®ô –UǼHò4Ú'‘wø‡Ÿ•(푸?1\@»ÊACJ§Íâ¾v"’ŠBã—!¾tטÅz@sµdËõÚ¹­"²ŒÎiw<ëÍŽ¢—Ó ÀŒrÊ3µ<™2¡”ÔT„«dRvòxÖ g,=j_¹àV NRO7¨ ñ °'§zg“™ÎÙßzp6Çmª(–) ¾sLœ…rïIFÁ_”ÏÖ”''o®hz$Udys¿z) ï°¤Ý×nQéHóm¶ÕÈà—§)½L Õ"‚ÿðÆ0Ò0 ¹líJÈO1ßýê¹v#}lé úãsNBü—ø.ÚA¼@}iØŸ¹G©ª‰Ô#CHÑtݳ­MEŒrÀæ42Š 2QÜH¾äêXõ°?Þør醼pÞ˜ ö¦ko 0 ª~)a ¦y‹lì).—C=”m{Km'TY£\[ϸå觸þcçA¥á¼vë·«ÕÕ¥µý¡µ–4‘ã9ØúÒª‡I¸Òîä^VhX‚²uϧέbË~ר©Â¹@Å¿º6ô¥—œ)ø²Q\€F3ÓwÀ÷—#¶õfÅPÞ噣$³T$®yyKl}ÓRó0 ÜÛ*Šš_'õ¢DÆÁò­Ð·Â]ö¥5G$ó«wZéÓñ•Ÿ÷ª)µCŸ{áæýÜÖ.«2rmx6´˜J?$—³n×nõVÔ`°h¡)È&™yTäƒ{ôí^‹‹I´XL:“!/º¤¯N˜Ç}è«}k"+lJX{±ÇÔÿµ9‡K{ȪÜr¯Q  zšÈÊžg?£Òiá <\{²“7…6¡=¬Op°¹Þ0¤¤Óà!¹-ÔslpçÓoçOxƒ‰,ôÆš6'­×ßX!¯•UãÔWPQ|3û@sË¿ˆþ_^•¥¥Ï<ÆJ¨Ç×é1áJQwo¢›í+ÅÓ¸kðÑÊM½ÄÁyªãÞÛÓjÅHËgÖ©íRõÚ+ )™•É8ò¶7ßÈVWZqû˜“ûqk°Ø%œNÀ9ÿ†˜³³’Îʼnîi<×D°I =h¹ &¤€Ô\ ìÑà†K›•‚1–c• i+aBœ”b­±ÞŸmŽ÷;[C»ŸâòQó§±]Éiªsí”WU)è)ýÄaÊØþ­ümݨÚ;fîX¿ø°º~UO"r‹Èÿ/áÙè´¹#‹<4xßÔŸËi¯ä®—ÞØÂ»4\Ðf®žpï]š.h T¨„Ð4× Ψ£,Ä<Í\8žÄzVœUDöÖÁ”`Ÿ çzŠá+Çñ-¸` pfgÏ@ûâ–Õ.Ž£­ÜÝs¼Äƒä£§ò¡çÀjŸdCYH§¡ûRb&Y:ó/p*LËrŒCxr€¼ÙSÚ‘’î)W‘ãä=ɨ÷®:¢údk®þÌòçlÒ‘ÏlÖÈß:”Qc"€´øÜ«Tz‹É>›ð7ŽúÜðÊ%¥Ò•1kdÎ1ƒI›SØÔÒ`ÛD´°ÚÜbFElìNwùíM_GYµ¼‡aœ51ðæAî“CJ%ÕÜ'ÝfÖºŸ†u«å“N»þß0ó]鸂f81?*’MReÇ:†Å(šŒ8*cåu×%àš‹é†·´@ªÿSƒ]Füm¹Ü>+¨)“ÀöÊ# ©Û¶wÚ¤-\Tõ¤ òôô®BQÁæ ω1YƒG)d8=ÇcKC;ºdÀ*¦"â‰_’%òƒz}«ÄT“PÑɶôêÚr² —§È¤øÎ(ö7¼ŽF<ë®×Üæâ ƒR½È‡Ã, ¼¼ë¸4ŒR~-é­øÙHÞ™¥]|7GÎ…qà î?fWQï{ËÞŒ&^]ŽOsH$©ÊÒo:>v* "Ï#‡J sÕŽôÕæüCä(ÜþîGSÜÑP Ìù}†j¸ÏÏ©]?P_ʦ%›ªÏsP¶^wþ)š€dî¬$r:ñ¹qþ“³#VXÜŸ„+<¹‰n"å;Çʤxnþê–ÓïxØœãFkœ]pi—´9ø¥ÛÊœ ˆN^|vì*2&'z}bÁ[°ªÓq±DŠ` ëå°¢Ë ÍFÙNÄTæÁ\a¨Æ²ZðƤñ¶áŒ ¡‡ÌàUŽ/e¼x±<5pOp]?­V¿üy1[ËiìîJ±&>¨|é²Î_1À=«f¾à+¶ˆµï Þ²÷å¶i%ª¼4.¡M*îÒåFÜö’DÏ™@«Õ¤½èKÓ¹?g%É9>^t„¹0–8Å]í=ŸñEôoŸá·ñÊáGÏÏò¨}„õžÔ£µÕ!%¬‘œ£ã¨méëUŠOld›é3Åo”_À…Xò“ò©®WmI Uc΄ŽQчCQ×—PØÛ e$geQÔš{ÜIk¦j«suìJ’JúÖ6ÉÍ9$lãÉdŠ“£rá×þïX>y¦`YÏËùUÞ]?RÔ,Ïã®Í¹1DhÞ…º§Þ²Ýˆí—Yµ½¶c$H€ç³gËò« â;{PþíÒÔ§7ø³Ä+ý|…QiÝË¢­«Ûèº.´-tÀÌò È¡‹`wbOü5 ¼Öâl×ĵøð€~%òúU§Št;Hî ³Ó!ˆ#žy³ï0é¹õ?¥S!¸}8\é×ø9`Ǻç|ü‰CéVtyÉVSú”°&—L˽ êiÄAanhaUû|êšMHk7 s¬\Ë<2ä&?„l?!QŒkyN]HÎqÞ¥ÏNko¤-Ýc˜~uœêOM†é¡škyÄ@û‡#9­+3¨Úuþþf‡Óâ§—Óx÷ÚüÕy\¯êÂx:yÜ]MÿÚÿzãoaÿògÿìÿ½<†ÎöÙZ8®ãEfÈû)N]S˜z™,[àîË®;Ug—ž%þÿ#jâ·á§öWÿ؈ßõÌÛò¿ÞŽf†ÚÚHíݯ÷ì4Ž*ãÆ_)r¯âò|}¿ä‚ÃÝ>])ÍŒÍk}ÌŒUNø©ôp_Â9RéT.G/ï}ºúPÜ B S9¾V¯\ûS%™KÛÇ?Çþ x¾<-f÷'zŽxdb±v,³O‚vÄ_ïDhìT Í>ý?f?­=ŽèaTŽì P^N…»t¦ò[Ïs4‰%Ç:Û€ òÏ•BŸ?‹÷ìM+QMb÷?·/öþÏÀ€K`«,ìOaþ´»ÙØÅ4ׯ{!QÌ~™ÛëN? "ÞE„ÊYó·Þ äÚVÜÛüè¢ÞGÄ…j1ÇIêbM¿åýíÿOÌ4…c¿óûU…´¼†çùU“‰9tý+KÐâ#Ä$“ØÿÃ÷¨[r«pAÿ¶¡>½OçúQâÇêMDé=°±#sîN«t|3o4|½J®Æù<ß*keW7ð&yØ‘ÓðUžÞÆ4µ³4O(Á`Ù­OÉUØ•'%eFn#¼oÈ´‹ƒùS)t-Bƒ@²IËñ о0½[Há‚éžbã¯Þ3BòxZ•Fêë¶i~šgnhÊ$K¸›öÑ}AA6>%"µ³e§™‘ù¹ú$ƒ Ôdü+kpäx0¹„yH xW€½O“8#taFØúÕºÿ‚á”C4ŠÌ3†Lõ¨Ix_RB‰±ü ¿Úâ’ M2,¢žª)3 g¶)Y­oí›@ë5Å f#fB() ­0†šºã'ž>•Õ΢Èçöó4R}Þ´nïó4Oâ¤C¤Lÿ[°–.\œŠ.eÊß:JËãj4„‰Î6©]‘àïÚÏá€>b˜jÇ/r ;•HÆÍÎ=ã÷¨Ý\“,9õ£]‚)û€õ¥’^VSXþ8êh™ì2,ðòЏ„Ç!8Úœiäó ÏZs¨¾ÝéIÔ¨6­Y ÏÊsºü©ÌWDàÈõ¦óåIÄ“qMí %–ô¨ÀRÃÖŠò»œ³ÿ(¦LHÀjQ Ú†‚tf”{€u&‘ýúè·Üîs\pIØ…æ5 ~Ë>dŸÎ¥n¿Ãj„‡üùS"—£s:²È‡3Ì4…8=>¿Ê› ]ìs"Ù 6jõw±+>^ƒQ°K{M¶¹™°ÒDÙø|×ùõ¯hd›irzHqéS<'©j:w´ëc§ßÜZ&Us¬œÃmŽâ³óâsTQwM$§Mv})‚NuxŒFõ¢;¾;³ƒ$œÔت¸m+,å:fÉ$Ô}ýµ¥Ô%nmã™|A§mÒ xŽY"Ò.^9FH*pFÔÌ’ãqÇ•FoÅ6¶–¬i`ѤŒ xdçcò¨‹„†ö êÕB÷,¡Ðý b¼©j:‡´mrkûû‹©99敜à’z Ÿ½n~î’9vÊžŸ*ÃÏ…G#HõzY9bŽçgš=­ð¥¢_ÿ{ÙÄdÒÉÇ*| ùúzü…e"wî™ãŽã‡Ñ.eV¶Ã+Ž`vïšñV©i«Þ¢Fª«3€ `Ìk[CÉzrð`}KKmd’o…xÒ;©ÇÿN‡ 2õ@|ëhиÎËFIͼi$Sî„ÝŽ{ÿZó•´Q³·4jvî*ÍÃ’Ê ¸ˆJâ5>ê†8!GŸ[´NU=»_&ï§ñ%½Â]ÞÞKÉ,¤0æ= ÏëYÏëÖ²^_ÜÚ*…+×byqö¬÷_¼»Vä[©B7Upi+x£þâgð×›7¤ãÑF3Ylµ©ú“pôvÒ·4†’4wê~t“t­¤y—ØÕ–ÄÇm¢™Ê#ä“‚züV O.2qIÍ‹ÔJ7FÓõß¡d–M»›M"Ô%Áã+1À÷ºƒ·~¦ŽVLç Cõ=q‚:ÕO™€Àc,Ó˜I6— I$‚{oU¥¥®S=®¬l±ó_? ¿‚ÃÈý=ìn¹ß¡ß=i9XónÆýAØuïUŽwþ6û×+1#,Nþu+Hÿx[úü õÿ¢ÈóÃÊÅ,…\°`=ã’F<é®§Ï!ŠÒÜo‹Æùš…›üfùÒy9ëG 55+*ê>²òBx\)7áó^|¿œ±Þ-²Ê.%-Žw°˽:´ šÈù%‰‘‰ïåÞ¢ÊîÅloïŒSRNô^›š«óð":Øéò,Š-Ü|ËúõüÉë™ÌÒIÌäyž½ê¼XÐ7Z-3=ˆ§®Ö½\“ªKïïýœÔÿØ þ#€?øp~Õ¶Ûj¯÷«íe­8Ù„ãf¦³=ê—¿×./ü0ÄþQÐ~•0à±rîsçJð'ùýBÀå;S1Çu°¤Ë7 [8Š{–9ÉäSŸ½[3É 7Çëò¨>÷t~]²OO™©k¯vueØ“Ô})Éð)Žl„r#†Ãàõ'4ý4@v&ùÿ:snÄÜH 8p>”IqbØå ‰ˆb¸#½&–« »ÂpϹ>tµp¢!¡/ñf°Ñã¦(Ë,&F2@#â]©^ÔWÊŠÁ¢&Ò;+ÉdeWP§²î›Þh=Ì­A—©pEH6*ª£7þ(sÌreÆsC*QÜŠ·@ËÁ6fBVYybº§.æ•nX,Œ5Ôå§MX£?ÿÙpymvpa2-2.2.0/doc/source/pics/favicon.png000066400000000000000000000012261202542755000202520ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  d_‘tIMEØ %3°ÏÈIDAT8Ë¥“KH”a†Ÿ3rfi¥PHŽ"nuÀ©E·E»2%¤¢ha­¦‚¨EZ «EÑefp‚"A £Â„Z¡ÙvÚI`›f•Óxùßý¿üJ‹8—ï}9çûÞÏ$ñ?ò'…BL&ÃÈpå?“S'0o‚xk†X"Ò.1Tßgf–Îçæ§×" xà†Ñ°DÊÿ2c—³’¦êÚ"OëцÕH^°ìh°ÉM+Àœ|®ØgÆà#ÍÄ‘+±D4\F`fÔµEj€NCRw][d‹™ÝÚ¶áÛóæê/Á–êÏ—öÔ¾›|Ñ×ßä3I=ûx£#Í5>ŽÙ@Àv;ކ7ŽëlªÝÞO°3Û×>°Ö–4±Dd¯Ä8–Ìl¿¤S@0öðà‰›áà˜Û÷,ðž#Ÿ+¾1〠Í.à@Ïè`3pÕž²3[©vÙŒû@ZânÙ@ÿé—©WÀ[`,O¦'B]½îŽ4W±.ÔSZXpxíã8¯pÕ,¸-+žL-„̸芧 TZú‘Ÿ(öÆÑ÷’æèŸµlêÓxÁ‰ßsü“™$W…ÑI×€zƒa̲’†€õî¾[¿N×R>7?bF“IJf|ÚŸÜî^\M‰+x–¨G€ú"˜ k  !2³H4ÖIŒª€Ùˆê‡@LD‰€Zp€äÀ D( ::.þ3€áñ×qé=‰Db#C¸€Y†1 /€!Si`²b TÆ %2 ©ŠÍ Vx_È#P Þ¨©DRˆ5”¦„ZÀð…Ö lqø”, ¬Såúž ñNrH$6&!?ñoþíPé­%O ¢bÉ0`Ø"D0CD%jŒ€:9Å“  ¡U"Uq¢Å‚Dý}èÇ &0 *AÔ¡¼ª@õq € ‘Ä R"%(AIAŠáþðž‰D"±Qº ìu¯{½qT%çfër΀‚R•Àˆ`Ù¢BÖhŒUð ¥ QEŒ³ %Ò¨-3 ïxç;”ljé¢P]çGÂ<]Œ‹Û•÷L$‰ .ÐJ™e©c¢AvìÚõã?þã?ûs?wË¡[-("Þ°}ç/ô¾÷}ß÷[¿ó1ˆ‚uÓ [?øo?ô‘_þè­¯»“ FÓüÊïüúëï}ýG~ñçn¿óÖ€XûíûðO}øýßÿý+“sËßýíß,¬U#}•«m£°!^Œ{ ¯©ÚŽB ‰D"±‘ZTÁâP Ñ>ð?û³?ÿØÇ>ö?}à¼hšü}ßÿ¾‡¾ðàçüÂÍûö¢•ÍlÝò£ÿë¿üä§ÿâ7û7øù)£¯üž½{vîÚõ+¿ö+üà•Tïû¾öéÏ|úÈ‘'1>xeýà¿ú±2„¡¾]·­—ã¡_^g›“ƒN$×ΆB,ŒuYˆá¾ûî»çž{Ô‡F³1¨ªJ«ûî»ï§~ê§‚UGƒjáÅ3n¿õCwßÙ b€FëÿûƒÿXT²grÖ+¼ùðë>ü¿ÿk±Î֠Ξ:u¹2Ó:y¦QôŒ 0F+…ëó:$½o‰DâzhïªÚÎ[Áûï×bùÎw¼C%`¤™ÖÚ‚A¢ÀeœeÙ{Þq?V.JeU–ƒ~°€aVE£éˆ¨ô1ø¸¼¼\+l0 9¡ÅŸ×d׌ÂÄPP©=¤#c”·‘H$® XâöX§ŠÕ¤-NÏúÓ?ùÄ»ÞñÎGž|l°²rþüy>÷ô]ßúç\ ªÐ‡þò»o?üìO3s}  xf(Ò“GŸºïÞ{+¢f{ ¦&'/,^€ D0 *Úí_ 6×¹ÑQ!ÚTh4v¸¬HTë’€4‰u"‘ØÈ°%{êÔ©ÿëg~æ?ú‹ùèGü¿ñ‡þ??üáüâ/Á0¬ùøÇçþùû÷ìݳÒí"@+ùèG>òÖ·¼õ'òÿð‹?ÏÄŽ?N }ê)zeõÛ¿ý±üп˜Ÿ$`CD¢¤ˆD u™ dYƒDVU¨ÔQè䜉Äõ Ð $µ:L€ ë@ Q8¹÷ýßóGòŸ2¶nÑÏ<Ù¤¦ªÛ@ðV%§Âó@ë5½-,ÍFÅŒ® ™zõO¬C¨…ƒ€r¨ÆPt¡hïúïûµ±&/óP©@8€ŒÀ«„VŽå"àŒõ$Ï´fšÍ:ÿœ;‘Hl@PE “iµa­†h@ÑW°(gî¯þãïC}{èõ¯{öÉçâJ3næàmÝÏí…°÷½ïBð!úã<§—cÃlþ§o›;ztßä §Îœí.ß~ÓÕª?÷Ø£hš›^wïÙÓó;wîzþ‹–‹ó§³` òÓÙ¦[n™leO?ø%>µHh×¦í³³³¦õðç>'^®³>(E5‰ÄuD–ªlA ˆ€ (²hpË»ï¿ã»¾y||ß_švüÛnÇÎfE6€µ)È656¿óM1ÓmÿÝ»ðÆÛt²sÛ{ßݱ_§Zw¾ç~d„&üï¿{¶ëÖ©ƒo»™C®s- V1ã˜íèTkç·›— ÎÝúoØSRX. À\RžŠV‰Ä†h|#`(꾡²CÃöîKsËÏŸ@¿zò³Ÿ¿Plºñ} Íù?PÊ¡gY_ÙzËØ¿jái‹/ðȳǞø›ÎíûåñSg?ùÜvÆ ¤•¡Õ¿~üéßÿ³±{¡­ˆv‚ xÆ7¾ûmƒ{:“»o¹Ìe˜˜˜ú›??L©Ã0uc}þFèD"±aZé³ÔÍš# @7aü…~îsA™{ÕKž'n=¼tô8–=Øvó»Þµ*±ô;»0-ž=©8â¹y]Ž'1@“ÁTB³“Ý|!„MŒåÈ›¬5MDrÓã‹?rúo>ò‡U~ú“Ÿšë®îÿÖ7Â^Ò{# t"‘¸.ÚÀ2,Ä ‚A4€ËçÈÎué& 0=g§o½yóÓÿá7n¾ýv´Û t§go\ýò“½³/Œuç11ßï¯.‚*t{¶WE-º)<Я«ƒ°£ƒÛƾú"Ž/¡ì¯,.DõÈLÿñçOœ?ýıs?‚–ÇOÍ}õÉ×ÞózäÍ+µù’Þ‰D"±á°hØ:¿Ž$ÔŽT"h h™·þ‹lä¼?µp~ñ¡ÏÿUÿÄóÏkïð{ÿñÃû„VÙsŸ}à®÷ÿó§^xñ…£Oþ7ïÿÿô«¿Ê¤ðͱ†uj²ÜAøP°Ùÿ†Ãw>ü©?úàÀ|¥¡„±ÇþàÞÿöî}kî²ÿü¯^|ÿ½?ú£+½þõ×Q!t±íh"‘H\´ Zîˣxå €³üæÛò±}ùØ E§ÓîLØÌ‚ƸVkx„™·i5›4Ùlu¦—më€ †Ýæ)šØ 7¹Í1lm÷ïüR6¹µ1¶™l Ô€mg›vÀ´`ÛèŒÛ±ñ¼Ó*¶L ,+6µ²Íj84œ…1`X†öˆ&p’ìD"±±4.FqGÁQ Kðy»|é$Wã"°ê‰A D@ÔAÀÊŠgF¿PÀW<,`_^F°|·‡,C‰€ª» _ 8„AunybýA°Ý@«jp¾ÂXc•O=E6‰ÄƆrÕ==,E£— â{;ãÓr5TÕyî",çx@…1G–t) CcnzÕ¯FÓrEáWO®sèPÀš¬Š2 B¶Óìpˆ+U׃±¤ª] Ÿ“q&JÀ¨¯¿ò¨é°:ÅF`­ i*õN$ÚA_æJ ¦ºç\%àùÁKØMŠtT Ã( À)Ç(Ð'ƒ· ¶m4}¯X9Uí1PÅjøÀË@Wz]H|ƒ]kÍ„ápg  ¿nvl²Í‰Dâzèºlºª›~ (‚2ÐYÕð0@(߃‰ÝU÷I¨R|M#ŸìæÀòyðŸ+Q%÷º¼àühð«¨Æ‘åDÛ(Ÿ Öíž=8Ê€ @È ®4ÂÃ,à ÃfÑAU´~n!½W‰DâzhÈFÝÿuë8Ô¹Ä!Ö³bE‚UÐT›/UŒl²iñ ™–t1xœq–“”êëq݈uzC"£ýtI|"ÖûËZŸ:©»õóe?5‰Äu!Ðqm‘ÐÀ"µµ6¢¨xVOJ=¬´úÙ’,˜2Óçâ<|ÖhÍôK%QpC`b9¶Œ!Á4 AF 8€Ò¬ 3‚ÁUu×àŠ¨FèD"q…8H•atíU€ „€žÁŽº7‡×UhhO¼‡Z/pY¶¥8„ˆƒ! C‡nÖËëú6tõÑõ2¾Ê~"‘H\OÍ‚„Z˜í:†‚*{ ¬ D@hXÔ.`[•] P0¬i 9º«€µ® iù! k}0(qu¿LëþÆôÎ$‰$Э+ž®Ö4R‰Aãq€´t 6XT¤‚à1gsVâ( .ÇSP®Ê9ˆgX¨U< ò àU1š«—²^¶/_O#ÍŽM$×&€.‰; ãÆ="ПQNçB@ôA-6ÆÀù€ó ׄGдÎ}VaŒBQ¡Ê ¹(«ëçV1†àëŒ/óÕ=x"‘Hl(f8@e}›×jûåÕý?ò¶~¯7y3-ÌÏß¹²ï?ÿÖ#2H‘0(°Š"x™–SQñŒ,4”P DI´àQ7Ï»To×{m]wÍúèH²Ñ‰Dbcc†ÀZG}ë^ h Ú—Å•ÎμgæÅO=ûÐÙ>õ´NPFXa&•"j 7÷ýÀ»}å0{Ùh]ƒÂ4Ì¡atÅA (Õ‰wtQ éRñåuíùׇER»ÑD"±Q©Ç¹Ú¢#lzO,"b²tåñAy|бXiSØü¾½Ó3ÓÏ}ü¡ò ¤ÔÉ};ß<ÕiwøðWïß{^»pàÀíGôQ3ƒx{gç=‡›™?øùßGWÑzõ¡€@€€‹½ôêEŸÎ;¯j¸uûi91‘Hl`Ùa`ÃÖ0¬Ahoüå×b/ÚµŽÏâMß¾ƒèÍüöy& |÷O|ßA¼13mþßwÐëÀnýÙBw²Ùj03: ]zhÏ ˜AÑ7êyƒ£-²5“ ¯Y¿o¯(TO$‰ 報ΟÖ!‰HÃ=Wõ@hŒ1œE,í?x§Ëó,ß´<þ"z8úÙG·îœüÔ2õ26¶]] âØçþäÐÛ<ùñ#¨ä°½<7ùj óõ0Õ%1  R^3ö1Öîþ⭇ƦfI‰DâºèË—Ú"@ð}u€5Ð(0púàa å׿€€—‡ü‘‡ŽR†ï˜zéWÏ{«¾ôÃU”û'–Ÿ|í;îxè“`0œ¦µ—€Áè% ëvënuèzÀ¾ØU‡‘k¤5ÂD"±á5*ëc  4à úíªÀý΀e<ó×_*nÉ:Sí©ö8h ½y¬¨š“7Þs±uCQ‡‡;“c­ªmǧëVÈ‘Ã8˜ý&º€ªºšñ¢!Ö‘ºËZÊǺ„ºþbèD"±a©ƒºD4l¾L¸$a‚1uÓÔ¹ÇNf+0!Ãâ¹ù­{fw¸áàÖŸyâÃö¶ûg[ó£ù(NgÊóï¾ñì_Ÿ‡âŽo¿{rjò‹Ÿxp€Fha1 ¼ah4V™¡&@1LÐV…sˆ2L”¶¬Ì±dCZL$9+6@°ˆhVÐ´àˆ¦Àq0 V`…”5V–WA0…Q"&, `ÑP„oƒÆDè34 á ‚²>1D@Ál$Ô½O ªC÷í KéÁÄÖH•Z&‰í ÙÃu7# :ÖAÃòÂBö5ó1“ã“ͱSƒžB÷,„cUbQù¨,±†h,ÚÅ*êø9eQRÕ)ÅÍ›§.¬ö3ÅnÁöÌr«åÕ¶N»êWQ!‚¦ S0©f„\†"¯+rUU㫪*Rt"‘Ø 0 4Öú$EÀ `S–ïÅv5M›6wP ¼}|ë®dN˜f„4( Ä4=ÀfÀh Ç‚IÁ6rûÇÇ)M³¶:»0ŠB1´AE”0¦˜e Wg߉Q†ýû%h”˜—H$ ½r¥m؃ˆÆ¡75'O,-Tâ_*» £*˜BtÀô šÞr¨7¢ª¾Ñ`=4Ý UurÅà ²ŒK³ÇO?? ŒuK;¦fw¹öãñó‹ Œ³[¦IØíŸŠ+ݪì&w<Ú›œœxfî¬nhŽ«5¯ž' ¤®'O …‰Dbƒ:hÅÅí¢­UuÀlÞ9%~ X",A¼ìµc6è»PµCuÓÔxÌîžØÔ,ƒzÉÜÝÜ:­•ëõ:@ ØS´ 0¨Üóe  Ý<3]7ðØ7µ©Ë"–;Æ&0ìoÏìjµí`0ì›™™‰(|eVÑZ¸Úù%‘H$6ˆƒ®%î’Òj8Gea7#l« xDUBÙà>à’ÊÜÍ¢8À•žæòüæPÎ 8^3ãôâò\È€f»X8‡sÝ¥r²3Ì0•^pÀ6›õ&'#ñü˜[?K@ þäêʪ¯”10¡Ý0g., ì0+ÐQ¨‡t%‰ÄFsУ„뮪;‚!9àz±Ýnк瑅éP_ƒ˜š™ê ºÏ¯œŸq®,ÇÎöú˜¨€çBwnµ?³}T¾ Æ”@$¶@2ˆÁùÐÀTÑ|jiþØ…¹£'NÀ"±ë«T‚ K+åêΩÉè(UM‹„‰Dbà ´b896€Â¨àÚ¸§€/5º··Æon«ðšˆÉ€¬«Ëœõ€0£™ÞU¥Åù&0ŒÞ¼u| X   »0\ŒÔ¾µxx+¶Šóe¾?( Ðw¶êÍGmôãV4ê§¾ ØsʈN$5ÄQs™ U9Ê å³^Úi³mã“[&œŠ¼øÒ|[P'ç9`aîܽ3ûÎÍŸ;}jñæ­xø4ÞpûmfñégOöhîÙ»?øðìñç €k}Ô˜ÈëXs ”ÀÓ'NÞ¶yÇM­æ3-:rä¨ÄÆ×vž±ß®Ù3~~ñÈÇ­.¢¤ðF"‘ظÚ\©Úä 7˜Š–€ h3Àd-éZ0uÏOžZÀ,²M°—2 Zœ÷”"ÂX³µä=Žx ƒ‰AJäH$’ ÈG½•i­Çš¯Îñ>ù¯^wßA×ÞÿÐëñ_>ÿŒq&[(.‡uÈ\í‘ÑòÖÈà"‡+ fÀ€s³|ë­7é‹Ïü»Ÿþ|€z}Ygì#‰'0,ƒ !€é´J""cL–eY–cêÐJ"‘H\kX†‚ FagF@’@…Lñâ3Ø4V¼áMÛ7ÍÏ?Ç€|äüÛŒ ÞŒmß2iUÏÇR…™™Y¸ïñ dÓ3Û O0ªM;&“«“¶õÀgVJ[p¼ññ¯|N"ÁüÞwݵãBwëŸÎú ‚Ñaký—Ÿ:vòi”%$‚-l£Óˆˆ^qäé¸:xöøgßõãOü^È2!Š ”‘bT“®õt•«Ç8^^s‰hM¬Ó‡ ‘H\³}q„ÃP°BdUUUa:0>ÿðù¾>ñ¥‡–ˆ‘eÓ@ÂC_|îþû÷>ÿäüÓ¾ðþ÷½í×ó/B¬Þø&:°ÿðçþâ)g\@äÜ~Ëèž[ïúã?y"RŒŠÿÿ¿÷Í›ñ¦Îeýé/@!œ‘CŒPà?ðmƒÁÊsÏS T°ŽB¨§ŠÔz:ÔÞ:{ã•¡E$„Pï¤A"‘¸Fz4|5ˆðP Ð?û3¨Š…óøÔ'S‚³üÓ?ùg`Ëô{çoÚMgæÊ'žøêÔØ ˆÎ>ú˜¾øü™gž97- l}ê1í½pöáG—UÅ–«ç{SSgT-@*úSÿæO+–ñȃ/öƒgž=e*(³ˆøJ T/Ëú2úü2!U !Ôû)¾‘H$®aèâB‚%XƒÂ ¶(š0 ÈA–ˆeÖe¦mဆ…%8¢øã?ýÁÎ$\=E -Fó÷ÿø‡M4ê 1ÌŽ†e˜aðÛ V? BfÀ@ÓÂ9g­½øñØ™S§o¹åÐé3ÂÌÌ6Y§=Ñʦ*PyƦÙém[n8{záé§Ž}ñË_"°U(Ãæš7´ÚEgݨq_þ¤ à«ô{‚!bA j9Õ´$‰W™@” ƒ¹x@Úî`U…k:v8SS¸†Q“‘=?w~Ûö, Ân玙Åó§Íà;ey>úîùŹf3#dÁ쮙ǎ>rÓÞ-«Õé"o&‚—“Ù<»õÔ…G%Ÿ;׃ª!ðwÞòúûî¹óðöÙ-íVÞò†oÝ:½ùÍßòÚ™öX,‡i޽õõozë›ÞrÖ†@oó·Ý¸u×[ßôî¿÷mÆ(5Çî{ã}¯½ó~eYÓ‰D"ñMh½Ø²ŸÖE E²A9X\\ܽû¦€¸mÛ¶¥¥%BUVýªaiiëô–Õ¶M[OŸ9}¡¿èEbfœeã2{âĉÕ–‰Ùù……óË Ý••ñÖô ìÕ‡ ÏóN§sî¹…•ó€ôc/ ø<öØ£O?ýÔôÔTmv™ët:G޹å–[úRYëöîÝóøãO<üå/ošž!.Ëøì_Ö€}U»o¼ñ™gŽ}é+_öâyT†“H$¯ši]™7ò•¨G5>1>?¿055e­Û4;»°8ÖRCœ<;·ý†sЦMQŠPŽmjÝrë¾[íŸ?úÂMmšš;w¢ÝÈ^|éù›öÞ`Ù)b„T®–NÍx{Ü’µ0o¿÷- ,—=7ï¸åöÓ[¦È:¦ÙÈÏv¡»\Í ƒŸžœºq×®»ï¼³( Ø6EÕïŸ<}ÂÁXðøØmךžœš;{Ö€P¤ŒD"ñªa˜#q©l)Ö®Š1¨ÊÂÂüÞ½7Ÿ››•‚ tW»Y–µÇ³"þô  °²Ò}ø«W@Ë43d’i§Ó)š…BEsllüôÌé³sg¨B›Íf¯ß×eé! XQ}ä+XëVCߨ¨fȱª¼‰1zpïk IDATÄ#GŽTJ«qP§|8ë|ðUå™MåËCžå•¯X‘âЉDâÕ%З¡KA¸,+€æçç·mÛvvþÜ@}»Ó©oêWƒ3sg÷ܼï…_*l}$Q¡ÄN©Š%»wí=uæô©Ó§‰%ÞtãMEž;c} QèÉ“§6ÏnŽ1’(3+( ::fìÌ™¥òU…h³Ýfb"7¿¸0=3Ó­ú •þòª×ªhµ˜L½’ª²'%€sóó[·oë­ö^š;õri‰D"qa°®A­åCCeeYvîÜ9Y]]-˪ͼ1wnŽ@ ”ƒ²Ñhœ9sf+3q§Ý9·°5F(ƒ&&'çæÎ©ªoÈ ÊA«ÙZZZÒað›å@¢4›Íññ‰…ó Ý¥eY]YÙµsW³Õ;{n.BÇZã/;Å`kíÒÒrËsóóSÓS““f{ii)ŠäY~æÜ™±Æ¶;¹¹3‚ãívk~~^’:'‰Wui]á €!CÄDð1Шƒ˜Hª8`ë†pŠ*z…æ6+CÀÕöœÉ[úBëŒkCV4®ÏGÎlE­W-‰‰H)"28 (3Y?–”să¢ ˆ Ç -ŒG PxgÙ¢®Ô¬ÍxI$‰kþÚ¨ÄßyçãcãL\‹!YsÛkn“î¸û.TÑWÁûjÍ­b¨ÿ¹EDQ‘ZL`…Phxtò¡ 1ˆ*,‘à8¬ï¦2úúD"P/!@ @ZE¢U¨@볎@h%>ªL/Sz˜H$× @ëÛZ}!ß}xÏî=uD"wÙ7ì¾ûðadŒ`Œé)±1¶$ R[סdSmÌ£Êè"ÖvjU**@%!@"4 Š£¦Õµ ¨‚êû¡uñËðA €ÊèÿDˆF¤ÖH‰DâUƒýÚ7)gœˆ´Ú­Ìeƒjçù¦ÙÍeUk½“ÓÓTerzz×®:ö_}îs1†‰©©ýûö7›Í¿üô§G™m„Kâ¿té]<ä¥;WÉÔ;z…å¿âëƒjJ}N$¯VMWlµÕuì‘“'Oî¹i€™™™“§Nkhµ[[·n ï¸óŽó‹çŸ}æÕHÆ8p°òáØ±gF£/.?ÒÕ·~ûÛø:¥6)r"‘Ø}5ycCFDBŒ!Ĺ³s»wïÎL¾oÿþùùyU ¾f6Ö¼¸xaçÎ'Ož½ñÆÝO>þø‰—^J·‰Dâè¯ƒŽˆ˜Ùûj¥ÛýÖo}³ÄØ_]-ŠƒÁ ÆE9räÉçŸ~ß.˲,sΕe]õñ_fK$‰ÄË9h {Ûçlü±cÇ:ãc?òÕØï÷A¤Ñ|i2 ßë?wÇÝwù²_ zK+Ë»öì™Ôú"‘H$¾A¾ÂÈÒhÐï÷º0¿ðgþçóós¨‡•¨h6šÑ{ÿã}à=ï~×g?û™úAxà×¾öžÿùG~Ø9W—t_K["‘H\‡bÏ—ûñ4¯$‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰ë"ZkLxeÏÂD"ñ÷Dú²%þÎb}ÙN"‘H$®SúÈA'+H$׺R'‰¿¯oYz _'Î9kíš:§G"‘:ñ͇ˆ²,kµZDÄÌÎ9Õ4à1‘H¸ºÝnOMMu:cŒµvÍJ'‰¿?Ò×,ñ·#"ív{bb‚ˆŒ1uÖ]rЉÄß»7J/Aâë¡ÑhdYæ½÷Þ×׬í$®Åo°^ýg²¤W, tbS'o¨jrÐ×Äw÷k}ƒåâW tzç’@'‰€æË tYwuL¯Ø†x{‰Ä«Êh%¯•t"‘¸Ö-–^¾O_ãÆÄµI/A"±A,VRß GJ³K$6 I “ƒN$‰Ä?ü¤D"‘¸šLÕé•"’Ò+ÿ!I!ŽÄ?Ô‰^_ñÝÿnRrÝ*_ñÚÖ/Ä7XœR—ÖMD1ƤÑI B õ}H½Š]‰àú °¾ åk•¥¼â3cŒ1juN>: tâUˆÒ×!ÐúŠÄ‚¾ÖµªEIôú-cÖu¯ý-'¹W"ÐkÝeëýTGš:±!ú¿^è⪗ ÄD‰‚èzW+ »¿ñ—£öË"Ó_½ŸÔ9 tâU(Ít…L¯;¬ûVÓ% B뮿ò«Ïën¥Ëºî«G U( Ò«ªÌõ Í_ë·Æ7â£U5Æ`-ÄQ_L$N¼Jàaa¤®4ºr@«÷%^¡ÚÄÌ*ªPÐ%:ÎÌ*ëD™×í+.; ¨(@×s20}býÊXï Óçý›uêM$^:[f’5­!€ÀæKÒ³êï¶x‰ŠB"C—™\Pe²ÌLr1p¡Cч(TªT›h&Å %}™/wÁéSštâzUZ—>APuî¡Z;™x(ݤù/ÃrŽˆÅ{¨‚4 rÔÿš˜Hˆj푉 DTkó(Ä1§ë^‡’'N$.Sˆ2ˆ•¨XbcL†™µôƒ: f°`2GÌD¤Ùä¡:@1°:[¬F †Q¨RˆªJD 2`U!"‰B°Å­#R‹úD q$®£ü²!&"V&b€kcEef2LD^B @®Q4š RV%l˜AA$O cDbŒÑPî¬eg‰8H‰‘C`@G9uœDEU×–)¥ö•úê1—_ëuN‰×'©Gâhb"1³ac3ÆXã,˜"TTÀ©q°*³0¹"ow:E£EDU  hôœÙ¢Y4[­"/ …Íl^´òF¡Öz—£öÏuJ.qoVÖ‹?÷õUçA®çr›DèÄmAaĄ̃‹­5ÖZ—Yç”Éû P¶V…˜Ù٬ȅ*““7ÝtÓŽÛ™¹,KcŒBcdL£Ñh6™±!FRdlÆl¢D‚ª:—Yc˜™A ⺞‚ ×±h†°µš$ó™x•’bЉoÈë1“1Fl†Ø×hçà«~¨ lòªLLOnÛºµ\í?þn4Š¢(¬µ£¶Âu,[/K®ûx8“YcɲˆöÖnm·Û!„jµb°Äê‡D—Æe.6J²œHظðÅ®Zë§ØÚÌeÙö]7ì;tHHûýÞé3'5 ûÊYãäT C¦p¹ã¾'Ož »Ý.ˆâÅ ÃæR®§x¶Èóœ­õUUùAˆ¡>v·Ûc$1&J´ÖcÈB9‹(U%°bÔK/Ét" tbãÅ7h]S$bª“ì²,ck5Jwuue¥4t»ÝrPæYýîªJk—ƒÞ³Ï<ã}Õëõ‹‹‹‹Kʲ$¾Ø¤t-sî¬:66朓z2žúƒŠ*ëÂÂ3‡A‰Ñмºaq«ÝŽ1ôËRU« 1Õ+§ô%I Æ;ƒ†«kÄuë#&RfR,/wÍÖb÷Â~°ß_Y\¼ 2ÁXå¨[Ò¸¼¼b>ðjDdeyLήûø‰Ö5%Æ0q](ÈÜnµU¥Š‘ˆ¬19H¬ª*JtÖ"Uk.Ë’ÙØZaˆ#Bİ—“¾LÐæï@RøDèÄ7MŒGÓçÖ)˜©8+”‰1¶®APUã¬h\^^β̇¾h¬Ý°!µÎ¢N¨¨£µ9QaÃõš`Œ†! &D@HëwÃÕÁ`%ú}U‰ºæµ#eÍ > ªAˆˆªª*ËòÂ⢵6ˆˆÑ Ø•Ô Uv­ñ|èĵüã5½‰—hCDàØÃõ“HPˆ™Xk#¼ªB³¯¢ˆz Ëú¶ÎkÖºËÝó¹£€ˆ fc­avÆcr.ê¡V": E´žëAD…±QeÚ¼01Ë#"U¥¾ª#Ì(´N·6Š(xe“›R¥K"9èĵ€®ûË£4;½xëúƒª"0J2 È%é%6ª*Q_&§¢6ÈÃfâ½÷^B}Þ ¢à˜˜ˆÉ9Wß9s™**¿ª¢.˘Y(8—™Ì0*‰Y¢\Læ#i´^" tâÕKí”AuÜ9™a¶]À6ȬZC¥f&"#V)¨¯PÀ‚…¢()Q¼Ú`W"0Õõã"QT¤nã1˜Ø+l,96l™™Ù³gOoyåØÓÇZÍ–ª®®® cm–EP }k Ø€H8†ÒH½DèÄ«Þ5[WÔS^¡Ì¤2$†Ùh`°À:Í2—¹Œ˜‰ÔÓã®–"£‚c`™RχKŽs1¶2Œ«ˆ*D‡±U@ Ã,<­ _ʘžš¾íÖÛNáèÑ£Î0õ}k­µ³!¢¥ª| Ñ:GD*2ÌÝ…„qeuL ø%’@'®Y¨.±&Z†¹oÖˆ¬ÎuŽ{DDà2rY–3‘j4Ö^X9/ˆlYíÆØÕ^5ì¢Ï€`8„°¾ª^*©w=ÝÐÔIx,àa6+1xùÂò±§Ž-_XTÕÕ^WUG™vB ¾cô!ÀA$Š){ÜIãDèĵ¬Å—ygR"‚ˆ€•ÃZĈ,Cž“³0¶áœª: ª*103²Ö5rg­©35غÊW¾ Ö’°B‘娼y–Å®¬tMFãí6‘]î.‡2C hteUŠŒ:„2ÕÓf™ë.Ï5ªa šHáÜÜüòÒ2HˆÉkŒQ²<·Ö c0x˜Èb21z©Ë[˜™­*D¢ŠŒæÛâ GŸ5I מ@ƒV‚ª¬"cÇ.Íæä¤mµ¬s¦¬ú½ž =" U0ÌLê,;0ET1ÄmÓ… aè() p–wlß’»Ö‰“'ΜYŠ^ȉq쬭ª*–£hæ‚XIT_k´2h¤ª¤Š1H%r Á—¡ßë³Ó©©©Í›¦WW{e·gŒñBÌìœcHUURU!fXέóï0,2Ä0 2Ræ$Љ$Љk &€Ë8:D­ È´•Ù‰F{zÆ#ç{¾ç‚·lä˜äŒr^BU«J½½~¥¾j8rlE=uyùBÑUP†åÕUØa# Å`µʨaX•M£'£J"¢ DUÌðŒ±Ö8¦ljrÓÎ];çææN¿ô‚¨p¬ÈŒQç\U ÊàÉÀccFDÎduÊ  ‘˜DT×g¦#[d:‘:ñͳÏW1Ñ6ÈœÕf¬ª–È‚ÜD8AlIY<Lˆ r 6È=T”¼r%ÝAß—UÞ`Ë”!D={ö4Û¢ßïÙ‚‚QõQñ(TQ*‘aN1˜QW¬D!U…vÒЕÙk˜bðìŠbwµ?(}é}Æš¼ BF)€Q À°eæÈbÌpö7A½ÄG'N\3¤~Ðש@Y×™I ƒ"7®!–Ur.rcŠ"·Ä ruEºË¾ì;ß¹DA9H«ÇTF "ú¡W‰©0 ¯^KR“A+ T…«[á `À1,…Q€ ŽA€*ê"De0Œ©W1­%"ã½wYd.,÷Í;ã Ê.H¡>„ R ¢„UX¬±ÆšŒ™cô"qxŠÒzÉs}η&N$ø¦±Ö–è²æœuE41¬¡<Ëm³‘çù2Q¨Ê~w…˜¼÷~ËrÙæPO&Máéb±ØkK.YXû¾V"$3AVÀ§o?ýßýÚ¯;~ü[+ˆvvvwöæ»;»‹E»¶¶¶±±R75‘-‹ù|?•¼º²¶²2›MgÓéì Yƒì>ÌtÿŸü“ßúü㟿ùÄ6nŽ zÄwîëN9h0wÎ1¨¨J匙V½Õµ;±®DH›æ<¦ñp*¹ÍQDæÁˆhÑ mÛýLz•RŠëáØ54ɹ˜¨c¿fÂŽO”nR7G|ØâœR¿MÓ4ÖRJ›]7ŸÏ÷J[¤…¼Cê1 ÓüãýÙÙ×/Ö+W®\¼øÆ«ç^3U ÁT÷ëkk‡66š¦!Pß÷]ß‹ˆD¥ä\J9qôè­ïºíøñ#fªj¦O>ùÔoýÖ?»zõÚÛHy¬G|?þåŽøþ>|£_‚‰ˆf ä4˜ï3Ã{ç£ù:¬¯U¾iXÕέ(Q1ŸŠÌ%õ¹d§¥H—‡6855—ሃù"E¡lÃæW–ÄT Ð{Rpqã8qÞgPJ¹Í 5=‡ª 1¸f2ùŸÿÇðG}{qþÜ«Ï<ýÌsgÏnmnŠݰõØÖTUŠ˜Z]7³ÉÔûXŠt]ß÷igkûüùóo^¼Èέ¯¯ßè®Ãm·Ýöáø™§ŸÞÙÙ«æ#AønS3}ÝÇ䉙ț1Œ@¤|Œ:‘0›¬žUk«Ÿ%Wm‘e¢eÊs+I$›Š˜pÅä½:V®3{sNØ ‹pŽ<ØåžQ¬ôL½sh&Ï>ˆ‹©”®ˆ¨Zp8Øœ4r˜L&wÝu÷ÿúþ·£ÇŽ8øòåË_üÓ?yñÅ—‹%½íe©•ÁUÉLM†/¸¦nŽ9väð1bߥvÙ•,ƒ›]»lßxãs¯¾º¾±6›N‡'Š1þôÏüÔÕ+—ÏŸ??.˜#Aø^‘5Ù0ŸÂÌjxbpMôUE5OVV_kVV¥PRÍ­[v}Ÿ))¤jÖ™ª™S"fª¹"b°SäÁ‚p.LÉÄ=aÑ÷BŽ|èË®k³:ï›Ù %)EØóm·üŸ~ã™N&4ôݾúÕ/ÿéŸüéb±Èšì@-655£ƒù@G`G.¸8™L9º¶ºVD—‹Å²]H)Cy=xÚu]ûÊ˯ìïí8qÂÝ[yôÑGÏ;wéÒ¥qŒ zÄw]Ýàƒ~¸Áß™à‰ ÀÞ{šV>FjÜdeåðñUß4óý´,’¼LYŃœ9QSCô3Uxe°ª9v0ê¡ä½“L< 41©ç^Õà´LÚ§"äbUǪ’¢E³ªMV&¿þßÿƱ£Ç±ak{ûó?öÚë¯9òó`œçƒË)©æ•Éìøß8uÇ)qÌ›[›¿ÿo>»¿¿ïœcçšI£EŠï¼Ba,ëªADLÞ{çœgÏÌìîî.‹Åþ¾c–RŠ!Bˆ‘ˆJ)fèºþµ n}×m“¦cü±û±'žxb±XŒ‹gÄHÐ#¾³`æ4ƒ8¦Á½“ÔÌ.¸:DbŽudæÃǦ”6n?ëªMó½ý²/]×kïÀLìC ® ļ’R¶S#•étR–IU¹>¸Tоª‚¨ÔjÑyƒ1¹l¶lS3[m&Ó¬"Ë""ÎsßõÐüwþ«¿ûÞ‡¦ƒ1nû7Ÿûýe» cõ)U1.K!¢"ÅÄÈ@ Ç,f¼U]O'Ó¦n˜hoo¯ï–}× iß¹$Sõ1Ìf³bÛv0„P™Ñ›—.Ý}×]ƒÖcxcíHU5¢sÑ|C%3«B¼õ]·-—‹PG®<çCÞ;3šøèB4¢ªjB3e‹ÁˆrˆrâúÊjêóþØÿç?ÿsÎ9&&¦'þÝ×7¯¢LŒ1ºphýP·h™Ù±¯«ºdq䈙ÀÌγó.4U½¾²²¾¾æ]»È}ŸS×÷])YQBpU 1ÛÙÙLñˆRzýµ×OÝyÚ{`ccc:>ýôÓßp-2àÛ¹šaæÑùcÄHÐ#€âóÊLÞU!ÖUU9V…yçØ;ˆ>Öõê‘õƒ PR*¹¬×ë¢ÊÉ›™cv<ç)ó¤ªëºÙX[½ãŽSÛ[›>„bª*`"¢È®©ë••ºª\Œ!x|Àà)šBߥÉtzÛ­·9zäïþò'¼!z"~üñÇÚvÙuÞ1DÇ~}c}±?¯›ZDƒuU³ãªªÌ,„àœ7³º®›ªZ]Y5“¾ï½çÅbQ$‹…z犔”z³ƒÒ¾ï½÷*²·¿ÿÖ[oÝ{ß½Ãa»÷Þ{Ï;÷æ Ão‡—ߎ‘GüU1zqüM>µ8UR«A|ôìÁ½eRa3¶b戈­°¯Ê·&.—-g³¶`Jí²ë[fçNŸ¾óòåË»{Ëélvüèʤ®Uºíííå²=rüè-'O®ol[‘²»³½µ½@ëë³™w|ùêÕëׯ¯®m4M¦ÉÉŠ”nÑ:ϱŠûç?ÖL&¦Ê çžîõ×.¼ë¶w /1ú"yꛕ•k>zöõ¬>„XQasózq6›õ}_o–Ûv?¥Vµè‡™²¨t}jšfum¥©ëvÛ¤Í IDATÙ:â¢bÔÞ¼øæŸ}éÏÞÿ÷GïŸøÄSO=5ëˆïõEðˆ¿¹ô&è_7˜•”RßkQè`G7 ³Ô÷©ïsNƒ ;™NóD”s^¶í|>O©˜a1_\¹zm{{{¹\ÎfSUëRzý7¶¶¶šºÙÝÛUÕ[n¹u:^»~uÑ.ï¸ãŽ;OŸö!ÔMãœ3;^[[›L'Áû÷ýÐÃï¾÷ÝL`wgçK_ü"1ð<ÀKn—KÍ¥Lš ;Wr)¥xï›z"*Ì `±Xìíî]»vuk{swwgÙµDðÎÝT(ªªªëÚÌöçsçܑÇþ5˜©=õÔ—.]<¨š?þñ|\E#F‚ñ—Ñë_rséí†)+(É¡%]BZ“ì =iAR.Å4K‘ÝÝÝn¾@. “ÉJSOk7q®æé¡Õj}Z¯Vqš&„@fÆÌ ´}—r·»·}íÊ[¦™ “ºÙÝÞ,©sÎ9çs×÷]7«ªÛO/mëTgµÛX©«ˆIÃù©™©zçþäóìAÑûº ‡lll¬®¯¯=rèÈ¡à]ô¾´}Î9õ}J©äHÊ-$9*%/»nÙîõýb¾˜ïÍ÷E‹‘‘÷+:ônG"n—-Ô̬n-"¹¨(`döÄž¸y >úÑΦS~[¼Á*­cĈQâx§Ã™Ì@ïÀ¤b4¤’¢ ¢®r9ça¯äãLEûÔ•,¥”!;ø­íMU™Í¦++³k×—[Û[¶ºº*RrNf¶2[‰•;~üÄ|oŸ½§’OÞ~;¼÷d¶½½]Jñ!Üÿ}9e3óޭ̦þÈo:týúuf¾tñâÅ‹oÄ…,u½ÁËEî¤HYqM Á;1ĺª©†‘sž—R’Rj»0 ¾¡¦ïS)©ˆô} 5DŠó1„0[[i»6õ©mÛœsJIDDÅ W¯^}òÉ'}ôQ³Ùì#þÈïýÞïkiÄHÐ#¾‰^¿Å.ýÇY\ ž“gìÉM÷}/DBd0Utûz¤fI½gºý–[–»»%g3ìí.ÌXÕŽ=²¿ÿ¦÷^µ3$QO½£º HÉIU“æëW.çœýÀ#{»{ç΋1¾ï¡‡sÎJ˜Ï÷v/ît]×÷=ˆv¶¯ÿè´”l¦FüäŸþIN;ÞܼÞK[Š˜@TC ®o»¾†LÚ¶],“¦>uêöCGÖ7¯^ͪ¹”¢¨@¼X.‹hÛ¶}ê“ %Sh‘ܧ^‹mnn–R†hU-’ÍÔ üùŸÿùÃ?\×5ûØÇ>û™Ïèã=²Œ‹sÄHÐïhqßd3øvRþ´}] MŽ9T¡©k"SUÉ= É~‰ f¦:ŸÏ¯¾uY‹ìn/cSÊLœRöÞQŸRUÅùóù¾÷B8qâDJÝîÎ.Ue¢¾O”vÙzçX.Þ»#‡ƒ°µ½½²º:_ì_¿~Ý;X ±ž4k'NÜbfÄ|õÊ•sçÎUÁP…5µRL ªâ$笪ªÚ÷}UÅ"ÙÌî?sæä©Sßxý™?û³]ï}×¶›››m×´l»\Jê»#³UMÉÌ"—à=‰êr¹SÕ‚¶¶m_yå•3gÎpôø±;N:ÿÚ…qŸpÄ÷c›Ý÷#1sÄ»väÀÃàòp#"æ¡Nå›zèðMDßhÂf*µ1;òÎyƒ¯« Œ\Ф¢jسcÕ¦ªT³–ÜÄ0ßÛ[ö©¤’z‘¢)Û|¹\,ZÀbUåœT¤CÒ«™‰5M³uíº™uËÅl:-93ór9÷Þ›a±XîììTu]DœãiU{vDœߣœ:}ŠˆTõ‰/|áúõë>8vì{çP²æ¢RH•”ä"j&v\r)=ôÞÉd²ººvÿgb_»pa±hÍÐç¢fì)RIjZŠˆÞ(… Þ;vÎ{¿¿¿«v-nv`Û¿³»ûðÃÎ9=óÌ37Ïðõšô¨M+è¿áj†CËÂÁçf °sºQ»™™1½½ŽÆ;Èôm VpLäˆ`FE„‘»ÞÈ´OƒA(Èqh<;8ö–û‹¾Íàœ‹(›ÙÖæ6dÌÌo½ùfÓ41Äv¹\îoçœ=¹‚áÚ•«»»{u]KÎ/¿øÒööfŒ!F¿µµÝ÷y¹\Öuµ?Ÿçœ˜Ý5Eß÷}Nλý?_JQ‘\Ê‹/¼ÀŽU-§ (,[)*¥”Ò¡´Ë…˜SU·X0ñ0°¾ì:U2dï{àÌ©»îþ·üÇ_}æË¥ˆšRÏfšRöΊˆªB €3ÏŽEU5UƒÙÁ£põÊ•ÝÝÝõµ5<óàÐî¢c=b$èw ˜9°êaçØsNCø´fÆ ˆ0“a˜ã˜Ì°1@žá˜TMUÄJ2%bË…ÌyrÁ‘xçMmÞµI²!À9Q 0³'RO®ò™JN¦â˜´HR¶äÔº¿·—svŽKA×w§*ÌND˜y¹\–¶WU#LãìŽÓ§â»tñâ²mcUå¾WÕ\a ¬f('¡ŠK.`R‘¼\8ïA0CÉYÍÈ ƒUuý“?õÓýÀü‹OýÎÖæfÏÉ̤•œUÅT)«(ÔTU‰`uôð^~饼ÿDt×]w­¯®-—Ërð.xà==®Û#A¿S:VÑû`"DD QÇÌìÜ@ *2h f昇‹ìanx`Šƒ6EÔ´0³#ÇLE3ÄC !„5°Á4VÞ<%‡¨ªÒ—âàE•Ä1 ±¯1ÆÚG.IH0LêªZ.úÅbѶíD–\å‹¥A•s~:™t]®ëÆ fÔ÷=@ŽAD)—S§NyïÍLÍ®\¹2ô";ªIÉ08ï=’Õ×èRòµ3RÑ5HMõ@y7€Ž?ñßü½ÿö™?úsô‡}Û11‚ó›šÁ,ç€0îA:íÁ3»ôúEzäÑáŠåž{îyá¹ç‰ª¥’‡1®Û#A¿cNƒ÷+³YÂr¹4C]×U‰8—\ò`ÃFC Á@̓䡪7™ZM;2xUU‘ƒªšc2²ª®Wf3ö.—²×-EµÔ„¨bU«AUËΞÐ9L¡b¬¤>86b°'ï£kžÀÎy)$¢RJÊÙÔ’ä *ìb˜L&ÇŸxå•s%ç”JÓLr.§NzõÅçCAýý<( ¯]¸ÀDž¯ˆ™]IFæ@Uƒ#Š!ôÌÍ%é` *¥˜¨aH<ˆo2çC?tßý÷ÿñ¿ýã?{ê©*V¹d3°ƒ”ƒÆ ª)ƒU•™ÉHo$}¿qñ &@>øà+/½|`Û”Ó¸\GŒýÂÐAཿõÖw]½z¥äÂÎÝ}÷]¯¾zÎ9¶XQJ‰ø ܉n4jCoØ13‰|$ÄŽF vÁÌ”´ò4[[].ÛN’Áhµ®ë¾ªbAêSoZÚVLM¤¸è]Ü…a‘|›õÙÚþr¾µ½µ~èØá#Dzl§B¢ó"I#ˆ {2Í{û;Žmc}à|¨-¬­¯;~tss½m—U]¯­¯:ö”’K a}mµÛÙfÇÑØTY)… ‘88ª£ï 1ƬƒøC 2"&³Ô”Ù™ê KDMSÿÌOÿô÷ßÿùÇ?éÍK0Ó‚àCAf¦œsðဉ¨©©©*€¾ïÕ”@ͤyè}?°³·{þü…sç^õ#A¿ãz1ŸÍf{{{§OŸ>{ö¹Ó§O—\æó9;¾åĉµµõÛo¿½mç/œßÞÞ&¢‡zè¹çŸ?}òŽ•••?üÃ?<|øðÉ“':tåÊ• . ÈÚêÚdRO¦“ÙċʳÏ=«RN<ùñâl61Ã-wŸ:røH»RˆN¯\½Òúúõ×^SG©êêÚùmfîæKç¦'o»}±\înïF¯^»¶qèÐm·Ÿ¼xñ“ÆXíín 'Ó8íÚ=U!ÓB]Õ“Édo?XauSWu$ÆáÃ÷ŸyÏÊÊJÎÙT¯^¹êˆL5w9ç™p¤.Á;W…Ú¶U¡«ª®C¬À$"’uPä™wNUEDÕN>ý_ÿò}ø¹Ï=ñ…/0s]×ËÅœ™êzÒ4s°íÝÍíM)€ªR:þüwÞ Ð‰'BŒÄTDFvñ]Õ?ÇCð½Åàø#ªË¶½ðÚÂí·ß¾¶¶úÆÅ‹f¶±±1™L¶w6_~åÅýý½ûï»ÿÖ[o]YY9yÛíï¾ëî+o]~ó‹'Ž¿ÿÞûª/¾þÆt²rï=÷¯¯­Ç*ÞsòÔÖ¥Ëo¼ôÚæÅ뇛õzMúRºì š®]»võ™¯<½9¿W\昕£ïZEì ÷+‡ê·UM¥ÒdEɽðÒËm%ï}sáµ7¿íÑ¿õ“Ùᕵc“ɪÂåœsu]ÍV&«+«u¬f“•&6Á¹Ò§E?W'óÜjÀt²bŠœúœzf"i¶Ò#'N½O)ªzMè—®_¸nÛEl—X¶ºX8§`ru=;1SbòØÑàÇ/ªì\#ߨ]ýà?ø÷þþß¿ó®»677»>µm?›­0ñõÍë¥Èt614H.¢šs.MJ){{{çÎf[Æ;b¬ ßYMDMU·m{hmýܹs?þÁ¾ð C>Hßõ;;»Î¡ïû¶í 68Ðïíï¿ñúëZä‹ól6{þùçsJäÂý÷ßÿÆùs“É$Ƹ¶¶6ßÝÉ}šÎ¦óùb¹Xö]OMÜÝÙ]®(_Û¼ ²ÍåÕɤi¦«õ¤öI×Öך¦ÞÝÝeË®=4[¯ªêèñc‡ÞÞÙ“"!6jÖ÷=»U„˜MQJÙÝÝNœŠ¡išãǯ¯¯ßšALK¿ À9êS¿³½Óõ„õœ³WQÕAš`")EYÍÄÔL‘û¾ä´ìz3[©g9WU•s ç¼slaV¢"U¬bŒr“O͈ymmí?þ‹·Ÿ¼ý³Ÿþ 3O&Í믽¾l—©KwÞuç•Ë—‡Žl3 *ˆ”’www_yå•®ë†=€±ˆ1ô;HßH)Z[ïú¾ëºÅ|!¢/^J)M&“"¥Oýý÷Ý÷»ïÞÛÛ3µëZÑT“’µïÓle­[¶kkWU³œÏ›X…Ùlžó³¯¿vÇ=÷Ó´½µõê˯°c'Ítl1ƻ_¦·ÇúÕW®èêêæÌÝ}×=çϾvë­·/®v)—ˆª©'.T]*bt}{·ªB–CNÛ/½øÌþb»”¼Ì;®¶vWÔ²šKÞÚÍ—.ï¾zñ5÷Ö¥vÙ9ï÷Êüð ¼ÀÂŽwC# ‘8Òd*²©‹:µj°Ú£uÖj6sŽ«grŽœ+¥ø¡gYÅTƒ"òÞ眉I“>ôÞ÷~îßüA×uuU§œ¦ÓiJi¶2“]tÑC3 "ËåòÚµk7·gGŒ ú…R 9ǹd"Z,!„RJÓ4xäo¼ñÆã=ØOüćØßÛïû^DªºòÎïç½®m«ªÚÝݽõ–[wv¶«ºZ.–[ÛÛW®\Íêûî½Ç{«ÊÔTm:›¬®®^½z5—¼7Ù­c=©'%ËÙgŸûÀ>pìèñÂ…·.ˆhß÷¹”½½½ÕÕÕsç_½óôé®O››[EmccýÍ·ÞÚÞÞêÓ¢Q±º®’ïE »ÈŪÉY‰].…ïº>›ìï/R*UU¯¬¬ˆjÛµDT…Juˆ<1\±sô½V5›©Šh)!Ff6¨H)°®ëº¾ëûÞTر¥¬f·”úbs=*¢f¥H.YU÷öö~ç·»ë:)EM½s{{{³Ù¬äÂàÁãk´} ¸Ñ63–Ï#F‚~g¡ª*å’Û-—KUÍ%3óÎîÎþþ~N™ˆÖ×7vvvÌ«šjѵM¬–eêxþµ×Vf³â÷÷÷»”¶÷vŽœ8ásž­Lw»Î|X¦lÞ»ªÚÛ_ÌVÖÚEWUñDs,¶þ0yýõ××üÚ¥/=tÏÃ/¼ð|·è\¶BŽL•<.¾yñ½ï}ïöö®±ÜÊÊÊë_›/öÍÊl¶’{gf>nHßwycTZéÊ4Yh{!ÒÎRg©%­ôâ—¨0³HTs)ATUX3³ Œ„h#vESiªÚ±[¶ í—…ýréRîÕD•D93%9DŠŠVU4€зýÿóGôÕ¯|emmµ©›åbqéÒ¥Õµµºi¦“é›o¾Y¤ MˆU5”Ó7'¹Gv1ô;±|&ƒŠ[ÎùÒ¥Kƒ%ÐàÕyáü…ÙlväÈa½~ýúÆ¡k×®]~ë-çÜþ|?ÄØµíæÖÖÑÃG>œRzõÜùå~Jùر£Þ¹¾m/½ñfê³÷n>_¤\Dm{ww²:kšfÑî.v·êiäJ“í^ß½¾výÚåëÝB½÷¹”餉®ÚÛÛ­cõòK/Ý~ò$3º.¿ñÆëbj* Š1–”—íÒ¬ª› ̉š¨-»Þ ‹å2DÏÄf¼··X,zçò~Зþâ¥{ﻀH¹õ¶[/Ÿ;ŸR/ªZRóN‡é›.¥Ï™E XÌ{)¥x,sÕÂLìXUEM´"3f+¥À@ÀógÏþï¿õϺ®+óù¼®+¹víÚñã'f³YJéÊå+Ëv94H›AT ¸åÖ[F>{ö¬snô±1ô;•£s³ ZJ¾xñbιHI)™éµk×Ο?_UU¾i&[[[Þû/}éÏ[´K´måÃæõë—/¿5›Îöö÷œsê¨ïûçž=ËÌš˜¸¼òê…ÅrYMª®¨íK)"H¥”±Ï]«¢_¹þe€ØœôIEööRåc×uÐòf»¿»{-çÌ®êºÎÈ‰ŠŠö}—T5VW±Úï:õ!dfEÂå+»DM×¥ÝÝe¤”Ôl¿î»¥i *LH€(–ƒ¥‘²L4ƒ¨ïÔ;-ªZ¨¨ä”zä € fVò둚öÚommýËñ;ñ‹)§£YÎ[ò䜳Þ.^|ƒˆRŸŠ”R 3£+jVÕõÍjy7ÆU:b$èw(BQ•ëׯåœÍ¬ïº>QLÙ97_ÌcÛÛ;0Y)eÒLT•SØþþ>1Ô‹ †étª¢©O’µªª«œ³”¢j‹e[E5oDèsÉ9Ï÷U¬›%;â¶íÅ *iуÑBf³Ùr¹/"ì¥Hi—‰=‹(Ô@>Ä–,©ªeãÐáC‡Öçóy_:¹ïz"v>®¬MierýÚµe·óüsÏþgû§ ª*'n9ñêW¿œJÞP%vjB TP´ .F 6¨ô}„B… 0U1(eØf¢™.í¿ûÂ>û{Ÿ13©ëºB‘t]7tÑ ü+LÜrË-7ÏγÏ>;Š#F‚~§²³êMÃJ5ÛÙß ìé#V±ï{ÀR)ô›ÁrNŽ}ÎÙy×¶­Äا¾nê>õÌÜv—"Þ¹¾ïͼ)¹àcÉ¢jÅÐÏFV×UßkÎêÈ5±Ì̃èÜæ¶ïŒº }ÉäÀ¬¦©”¤j©,Cp!0e5$Æb”É|Vên¹ãØÅ‹i§íuR…êðÆ¡;Oß±·µ)Òv»;ç.¼¢* °£»ï{÷“ý‰@ fªæ#‹*AÕ³Áu4ìÁ ¾‘¹håŽ~öåg¾ü¯þåïîííªšÁTàí¾¬v#ìëÏ…éà9u÷Ýwß¼óêÕ«ã*1ô;7û„0øO@ËàÞÃ…™¸ïû eP¬" )evºZ¯Ìçóàýb¹ ªµ}7›Ns²fç¼óÎ ¬ˆ6“ÍÐÔ·}R”r)¦V&AŠZÉf– @PÌÀ!+´Ï¥·P!õ*ï=Èlh”0CtÞys­RH¶·Ì[ûiKUb=®T'o?r×Ýïzþ+×&SÖÞµÝüÚõkÇ'¦{Þ}oŒ¾d¸’H•Ø Ã;–˜&(€sŒä€›¨ªp0üB­ÍÍþü_ñâ‹Dä+E@¦¢ýz‚Æ7ÙhÃ5S€3gÎ w^¹re$è#A€˜ˆš€œ³cG€ ‘"ûˆ´Ë¶”B )âØõ©WÕ>õRD`f& ¨df¯mÛ9ç˜l BIBDßlOÐÉ"F †)J_0x')J(*Yœ”’T4ÆÈ`ƒ©šjQi¯ˬôâ+_½víÚþr§ªê:LŠv}¿wõê]¿«Ú²Gå«ç^¹õÖ[‡WúÀƒ>ÿìWC r8ˆ¨b0˜L!P‰Í9$)hùä¸2GŒ=âëK»lñ Ìò­ o¸õÛ7H'ÃÞcŸ’JÊÃx´©Šû£N‚ a[|ãÇtˆÎ2À ( ¶xGð(¢$x{mªI:rÆ•«ë Þ«™IéÛn>ŸïrιY3›L§WÞºÔwÝ$xQ¹÷÷¬­¯as (©™‚T4›ªj†š™¤XŸQ ‹åB¿ûÙuÏéw¿~þâ3_þs×9"‚’¨²¬Tn¼½Ù¿§^þ–û~Cª7€ù|þÔSOKrÄ÷ c&á÷)ìÆí[Ýÿ ·oõ4ìXÍ‚£"™ Î1Aû¾Ø DÆLЍ±ÝŒ­%½ñÔƒ2ðuBQ}²Ï¿ Ñsˆ#6…5±>©¤Ê‡àÙ5ul*L&“S·ÝÓ 6­ês_ýª‰öfÅ´g'@œ6õtWf.„¶””JRƒš i¶kW7_xáù·^ÓÄ´¨ n¡6ôa‹¨Ø_>úèüÈ ‡ï‰'ž zÄ÷£·ÀßüZœ 8ˆtBΩˆ i‡€øàB ι| _ Þ39`ÛqC€x` X`@&À|}£Â×"9¥¾ï¤dQ0ªê:„äŒúÅ'º¶~ÈCïdº²ZrN)µ}×÷©Oi¹lcˆG;|øHUU)i¿T)šSIIJÊšU~;К¿TUõ³?û³7à§>õ©q+èß±JœŒ 9vž9zï™ÕU ΗœKÊ:l£5»¡i ÚÊMyåf¡^50Ü é#2|ãƒf‚‰7'PRê]U8ÄÔ‘ªKNºý¦×õÛÝÖTèÔÝ÷3×mþ'²oÒKÞ“”4‹óq2©¦«¥èμ›Ï—ZÔ™' –@™-&Å`:l¥þõðs?÷s>øàð¢{ì±Ç|\B#F‚ñ»F" a¨Ž] ¡ŠÑÌ›äzç t Dú6R¦· ÍÐÁ5ÇÉŠ2 ÞÁW¨cŒ1TU½™ù`1Fa5³Ìl¦U"T ç\W³šJ.)¥ë¯žÿÑûHã#˜7ÚßßùÜ+bÚßèEéû´³·¿½½½;4®0̬èAþ‰© Ú·‹{î¹ç—~é—n¹O~ò“‹Åb\A#F‚ñ‘8ˆDÈ@ &!ˆˆ±) æ \””<Á‘ñ eDoÐ4½M1 €ƒ_÷ÇŽ[9²HýÎL`N\ô± “ªîR_5u¬©=‡*×B‘™÷ޝ†˜f¡v^*gÎú¾ksÿÀ{*P1=~úŽÿ÷ì—¯íí,a…-™µ¹ß/æËE?ÌIª‰èÐ÷LjPƒìŽ~;ì|øðá_ýÕ_1Þ7FõyÄHÐ#¾ã} RÜ0”pÞ©ª@™‰¢sÁe1ìõÉ vÆ×³³<ÜÄϦ³P5RÊòÚþðcàCí+ç|d Tň‰¯'MX‰UU±*¿J!VUšEï:"3¤òâ«/Üê¾ÃGMÍùxÏ>ñ…'–}ƒÄn{†¾ŽaëïF¿ÊAJ÷ÍQl{ÛÇÿñ˜L&¿ò+¿rôèÑáÓsçÎýæoþfÎy\?#F‚ñ]âèƒÝ96‘ÒS2†5&ÑÕLJÎF7¶ßNÐC] €ÁŠIÚ/»´Ó¡ CÄ2´pk)Rœ“¬øfmV­ÕqRk™Ôœª-H*}N’r—R—òÓO}ñƒ?ñÓ.DªÉôÞ3þ»/~±íÓÜ­0€Ôç¦Ìv¢«Ç_S}nšæ×~í×î¸ãŽá(ÍçóO~ò“ãôàˆ‘ G|Wiú€ IMÍœyç|ã§³Y3©Í¬ïó×ç”ßÖÄG<èÖ+’K/ý¢Egl®FEMEK1Õž²Òp3™„I$æÉ¾´}’.÷9ï¤>uiÙåÜ•ÜI–ùÅ—_üÁ÷=â}4ÃêÚú‡~âÃ_ùòW¶¶vT¬•ƒià ¾Ù¶aj7âPþÊ}òäÉO~ò“7kgÿøÿãgžyf\0#F‚ñ=€™`ÎØ9ŠÜ4®Hé–ýÁ  Ù°WÈFvÙ ¤°d€Àh«H@D#g,)vh IDATDd0ë¹(¬Tä‚/¬}În7ï·mߦ6—.kI–“iÆÐ†Q —¯\ÝÙÚ~ÿÞbˆ>úÃ/½ôòµ«WvÕLM‡úÆÞà·Ñ²a'Ožüõ_ÿõétzóà<öØc¿ýÛ¿=.’#AøîSóÁN3ó0‰âÉìô%-3ƒD`0ËA@*2¸¹–•Î Θ1´W ®™©3Í)¥eÒ½~Ñu¥×^-‹’™‹*xíÕóW¯\yà31Ä£üƒ?NfgŸ{fúµ°À¡¼Ç·cú3?ó3¿üË¿üvvþô§?ý›¿ù›ã:1ôˆï™Ð€‰ˆŒTM‹æ>ç.KGΓÂPÊg28âhD06@†RZᙜ9˜9™ªˆ1&ˆ‡)`ªRJÊ’²u–DL€DAÙ”LMƒm¿WzíÂ…³O?óÃëoU! àþ÷óÙÏ~öÚµ«íÚùèÑ£úЇ~á~áíwÎçóôþÑØT7b$èßËÂß{:ìªétâ¢#¢œD¤hŸK/ ÐÀ+t‰”aðÌgº³$ (œƒyÈ`  ÊljÀ5˜Á)«ŠjqÞ)WÔ A i¦¿ô‰O|è#Á×[ë?þøãO=õÔ—¾ô¥¿Òxàyä‘~ô£ßpÿ¹sçÆž#Aø~$èƒ/ˆÈÇ8N]ôÌœr)¥”>•"µs…Máë‘ ¬Cã4R ˜õ˜ ΃™A …8Šx!UIZBðêMMUôk£10|äÃþ/ÿÎ'f³Ù7üÚW®\9{öìÙ³gÏŸ?þüùï«>}úôéÓ§Ïœ9sæÌ™ãÇóþé?ý§?þø8.8b$èß§ÄÍÌxÁO𯅠Ë)åTú V2³PÀ*縈$$á`ÞP[63+€p v0EñA3ˆ!Sò>øÐH03/(%/Sïƒ/^UE‹Áø€ ˜L¦¿ø‹ÿØÇ>öŸð…?ù䓟úÔ§¾³1ôˆï=vvÌ0»ƒygjÅ$¥4LF#S bV¸ >8Ï,ºVU0hØõ2Ã19 ÓHÎyrž˜<{3e†w®F4S$Í9/RËŽ…TEb©èkæ¥]؆cÇŽ}øÃùèG?úÍÕô<çOúÓ#5 zÄ÷¯Ü1ükfDD7dï ààS×ûŠä†ƒªÖÊ TJ™*@ÂP´¬‡Ð;¢YáitÞyöÁ±#&©kEÕÈ)Û;k*PS¾1*C³›f ®¸þð‡yäÑ|p:ÞlˆÀÌ6Íô›”œgŸ}ö±Ç{ê©§Aƒþ2í#F‚ñÝ-“ßNÍÞ{f6³¶mgÍħªÎqÛvª9„°lót3ŠBß÷fðÁ\UUm»¬ªŠˆÍ¬ï;€ÌÔ{Ÿs®ëzo¾\]ííÍWV§C‚bÓ4}ß3³ªšd3+¥8çäœc¬SJÌ®iêÝÝ=fR³IS9¢Å¢+@ôÄÎ }ÌNU†Òþλî:óÀƒ'ï¸ãøñã˜T €ˆ0ŸÏ_=wþùçÎ~õ«ÏÚ·X÷#M zÄ÷– ékMBÞ;ç‰)·}ˆqg:v]˜sѺ®¨jŒ±ëC}‘ªétBÄ9çœKÎi°Ê¯ªªíZS›L&]ßWuµ\v++Ó¾O)¥ÃGum§¢Þ{"5U•RBˆÁ»¶M9'"Ž1ô}ŸŠFOî#‘wì|Œˆvwç“IcQ‰ÖõB0vúè[—/ÌÌþ?öÞ4ÈÒë,|Þ÷œo¹[.•U•YUªURI–eYÆBò‚l@&€F£Ñít¼s‡žhµ0e¹²²BÌR–Ö¹4Iœ÷̤XQ–e¥1o¹ÿþùùù$ÑÎù¢(†5¦?èïØ19ô!`Å€~ç;ßùÅÇ/P¤iš&ÆX£X¥YjÏó<ø²RÖZï=̬”b¢f³Ùïõ‚qÇyO€õ¶ª`M‘ #n*ˆ+¤É³Ï> 'õzí‘GÞqüø±¼–µZ­4QÝn—ùœÙ·o_š$³s³'O¾b­QJ9çjµÚñcLjhbbâ®»î:þ¼µvP¦,kõz¿×Û³gÏ‹/¾¸¸°Ðét¬sy–Õò|zÇŽ4I–——-Ddrj²ÕjE)<ÏÔjµ$I‰Ðï÷ççÏk­ßô¦7ÍÏÏÏÌ̼úê«LÔl5÷Oï_\X\ZZRZ×ò|fçŒ//.–ÆkïÝl4¦§§;ÝîÎ;Ûí¶µÆ9o­%R˜ÈIdæˆHÐ7›I‹Uõ6ƃÂ[«˜———”R‡ÁOLNöz=cí[ßúÖ§Ÿ~Zk¦‰÷.ìò…=Æ¢(–——ðÞ+¥ˆ¨Ûí6›MVêÕW_Ý¿1,//×k5­õ¾}ûêõ:3OMM}ÿû/8xðVÊ‹LLLZë”â¹¹=">Ërç\¯Ûóâï¿ÿþ§žú^³Ù‰“¦§¦'Z;gv~ëÛßJ˜çöÌ¥i–gµ©©©ï¿ôÝsÏ=ÇŽSZ/..:t¨V«9sæàßé%±¶p·xVì¬!"tÄÍ"œˆ˜œuZi&>zô(‰ ƒ'N¤i:³sg1x±Y–“ˆo4êNûìÙsZ«,Íœ÷i’$Ir÷Ýw[kOŸ>}âÄ c-yïé+­_{õÕV³¹wïÞþ`P…Rêà¡CeY–eyøÈ‘Óg^/‹b×Î/¼ø"HÓ”™æææ¼wÆ˜à†‘e¹ˆt:íóçç“4µÎ ŠbpîÜÃ?øƒßþÎwjµúÁƒWVÚõZ#ËóãÇŽˆ•j·Û‹‹‹ÌíÙóÌÓOwºÝ$IŒ1ÖZç½u`ò IbŸˆˆqs°sõ"$½WZYgóZÞë÷Äú^¯Ûn·³,K´>·²ÒëuDÄ;_%3Ÿ?¿ â‰41yãœs,,.–eÙívççç˲4ÖfišgYY–‰Ö¼ôÒK;wî¼û®»žyæɲ앓'÷í•ïœó.Ë2笵V' 3;gÆK/½T ýA_i%"J©Á`Ðëõ'''s¸HVœ&‰ˆ4›ÍùùóýÞ ?h]¯Õz½^Y–Iš2óâÒ3'IT¿RJ)£X{c%nFD‚ޏ@´†©sišö{ý¢(Nœ8¡‰Ë²ÔZ;ç—––VVVVÚKJé^¿ç¼k·ÛÁé8lëEÁ¬û½Þ‰'¬1ƒÁ@)6sõZM)Õë÷›Jyï»ÝîÜÜ1[k»Ýn¯×k·ÛÎ9À§i:(Zk€œµƒÁ KÓ……óËËËgÏžÍóL¼€=33±³¶Ûí2³ÖZk½²²R–¥rnyy¥Óé,.,ÇAï½s·T×@14êu¥uˆÄafö^1…¿"úAGD‚ޏÕ´—²,ÅËéÓ§‹Aa)¤ä§$¡Ó§OÏÍÍ #n›à …z#/‹²^¯ÏÎÍΟ›o/¯LMMZëɲ¤Ùl.¯,MMNž›?—¦©ÖÉÊÊŠR ì°)NæææNŸ>­µîv»iš–Æ' §´&"ç\«Õ‚ˆµV¥Ô ß¯Õëz€Rjaa>MÓ5¿ÓíÔòZ»ÓɳŒ™Y±x©7í•çÝ®]»—KSj¥›­æÊòJ–g"Ònw굚N’<˺Ý~½ÑXY^öÞïÞ½ûÔë¯;k“$Ùµk—Ò:KÓ33ßøÆ7DÄY[‘2Æ…‚0±3DD‚ޏ¹çé`PÖjYÛèvú“­FY Ÿh €•òÎñ`0öÙDDi­˜™Ù:ç Öï½±¨Õ¦4Y–æyn¬õÎõúÅÔd«( /¢˜kµšˆe?MRëœVj¥ÝÉó”Y9g‰ˆY)fë,³²Ö„ÚâE'É`0ÐJeYÖë÷ò, ÊñDŠˆúý~Q»wïÖZ¿þúëSÓÓ?üÞ÷&iº¼´tò•WNœ8á¬uÞ›Ò±³ÞÅ~ :â&3¼¯ ÓUâf&I’Ô˜Ò‡wåµZ¿×+-ë ðŠÁÌÎù`Ë%"ODÎI­–fÒº²›9ç’$1Ö&Jë4)‹+R¬ƒ¾ó^J+kò,!fïsÒ¸,­ê xïkµÚ ß€‰A(èzñpÞk¥œó 0‘N’4IB²‘n¯W¯ÕVVÚÎ{ïœ ®u‚hàˆ¸UmзÚ¹ÉÒ<äz»$Ú Ö×U¿wÀ•&¼éÖKazáÆU¿™Ã‡ÁïÁ£ëöP ÖÃZï\¨è†Ü c¼sž 0¾,-)¯E‰ˆòÎ)ÅxÇÞ9XK€„œ£Ä³±^ Z‘³ä={ï¡È9ÇÌÞy!kAy/á}ë¹(½1àµ]”Þ{xçbwDTÐÛühü ²† åÆÙUimOÙ,Ÿgx‡­/"Jiç¬÷`1[ëÃwU•ËtÍw7¾ µs–f«ñLªá…ˆ„ÂØÝ""AG\7lÌuõ†¶¯ºMV">znDÜ#<âo°}¼ÑE"mJб¯DD±íO€Æÿ/¼JÓd#QåÖq› nÞ’ ÿŠ3mDD$èˆíåÚK•Ð!ó<ËøqVÅ#]Ñ‘oƒ¶Œò9"tÄõ_˜ CÞLY}Ç’±Ï ®÷#""AG\ èrß'„ Là1¯fÙ𥡓Yl㈈HÐ×eÏ&$DP©%°±…"""AGÜ(0X)—xÒZ”‚Ò ©ùj}Žˆˆ±’ø2?O -¨“Ê”ËD¬Ã( Ø*Ü{h¾öѼ :âz†N57t³ÑDCEQ®tŒP€‹ :""tÄÕ3í(¤âr˜ ÅœåÙÔÔZz0,Æ+ø‘rºxáæÑ73#""Aߤ¬´/mõ¾‡xçÅyò"^Ä ü&D,7«’fæ*׳È(¥Qä興M×Ì7€CNŸ $ñÙ4éÉ$I“Ù$Õ>'ÊSÑ X Ü@îîf¼ýqÄlsQAßxÙ8" ÀJ›¦õ¹(ĉ+âK[Â!'§ÌM¬™×Ý‚€4Mëõz¨‡2 ";GDD‚¾‘¬¤” ºØ9wå‚ѳøàòL•^ö!ñþ-³7HDõz}nnn×®]ι“'O†ÚZ1ÕQDD$èFÐÞ{fRú*: €!hç[!ã±RJk=55µwïÞ½{÷ƒååå………˜¯9""ô”—“$ɲÌ{_–eY–—KÓUõKà±¢%r ì&Ë»ÖZ)åœëõzËËËÖZÑZ[ƒ #"6šØׇ›’$ ú±ÙlîØ±£Õj1³µÖ9·ÕW.¬ÇW…óÈ[OnöF-"ÖÚ~¿ßn·—––ÚívQq“0""*è†ÉÉÉN§CD333išæynŒ¹="éµôw³»<‡„µ6ê¶Ö¶Ûíð:²sDD$èÉMyž÷û}ç\š¦wÞyg£Ñ8vìØ©S§°ÅæØV6Ù ¬icÈ ßÜÈ!7Y;8ç‚”vÎ…»wmБ oØê¾Óé”eÉÌÆ˜N§c­ív»Á{Yâ±"µ››ˆ/åF/®Øã0"âö§ŽØ×£‰(MÓ©©©`€ØÁ`ÅcDDD$èÏÑY–Üì/{ï·Ú'Œˆˆˆq=P„ýÕÛ^/ý±Å­·ˆˆ[Ñ}´3Æl¯£<Ñu!"""*è›QG‡w¢:""b+Ä@•€Q¦ÍØÛˆ˜d'""â6ßÒŒ2ŧ úF_+³Öz' :""âöÆ­IÈÌJ)¥ aÓÛ*Î úâ]%ê Ø¦€i­uŒÆŽˆˆˆ}Iì¼i®ÎmUë1QDDÄÅ­‘n4404Ck­ ƒíKu˘FDDD}"ZkÝl6§§§§§§µÖÛJБ#""n8n/QJeYV«Õ²,w爎QAßèkUJkMDƒÁ ßïE«ùEDDÜÆ¸•J^9çFf kmd爈ˆÛ·’q€ˆÆKFÅ}¼ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆkŒ˜ )âút³èÇqÃÁ± "". ‚ggT7™~aÞ¿x­”ŠtDÄÍïý¯ÿú¯˜žžvÎE :"âcÄÂÌ\c #f ¸¾ˆié#".DÓKKK¯¿þº1†"=GDqƒ¹ÃÖÚPÊ„[+ò6â6ÀM—‹ãÒG€lø–ÐæˆÚ'âÂýM6¼K¨ª©ÕëõÀÔLä7µol~ˆˆˆÛ“ +ŠöQç'Ðhø 3*ž@ Øø´#.Ì®ÃÞ˜v,Yç)ïDcT¼¥,ˆˆ¸] z¤¡i AM›)èU0xŒÂÃË`hßn‚Þt?î)Ýzl €Àv{ú DÃÇHYOмµpˆˆ¸ÍZxÍp‘áÿªR„ÓÒ´…½cëqw‰<»®ìa(¸uÑ…$ ¦Ñ exñ)ÅâÅÉ…¢ˆˆY¼wCPD9ñZ)ë\¸&¾ðq"®!c¯vȈ74A‘x­ Ä'BY“ \`nïGïoãŒÿ†Œy) —™C.S­µs.|@kmŒÁrXªßBBÌU6ÔѤ.Y+ W˜0”RZi眷&P‚Vº´–AŠÙ:G€"&"uù5’Ë´ÑX±éæÕI—®h∸å ZÄ"ðމ)$FÄ Æ”#òeÄ¥ø`µ¦Õ1%I³ŠÈÆ^?\™8ˆVçÃ…1[çHXQWšñ¯ø¡nO•ö"L bˆgЬÐZL À›¦).dà g&ˆ@(V‰Ò…5™Nœu™R‰ˆx!`æ@m)WOÖ2öH< €.^"6|ÄÅÄA4üᡨ¬^hbañc&‘"Þ5Ö8 is^ ‚âD'Ú;ã ^OÍ26D#SøêXçE$Õšˆò,ï['~ü+2¼R¬’D‘1Ö8Ë 4ICíDYYV¬ˆwµ$5Æ0³xñð0ª¤<Ö;ç]˜4)0Q’$-&ÆšL×*Û “ôØŠmW®.h“Mÿ¶Ö(6}ÄÌÄ!PBŠ9Xr5U/ˆˆˆ¥’5 &ï=ˆX±”Ö0q½Ù(¼33+"RZ¹`QŠÄ7óL¼ç*˲r®Ú;ô1H‘â,àœñÖ$ÐÌ k'VDˆˆìP´²•4å”@ªu†Ü{/εҴ´&' oŒi4½~Ï;o­G̉N¥g€D²$!"0—¦dq5­sÍg¾ˆëŽ›m•FDd­+ËÒ3(wܱïÎ;:°ÿ޽{ævïNÓ$OS‚tÚí¯í‰ï=ùä»ßñ®½³s¯ž<ùÊÉ“Gܹ£5Ñ^\lÕë/<ÿü?ÿ÷ÿöÔ·¿ýÀ›ß¼ov·+‹Z–N·Z/<ûÜüé3w9’'‰3vïì,ä}³VSÄyš&Šàm./-<õÝï<ûôÓ÷=Z˲Tk[–š¨ÕhܱïS–_ùïÿí¥_8tð`žgÌ”$ÉD«E@«ÕÚ·oßë§NAdçŽÖ˜ï¿øâýûµR333z ­fkzzzÇÔ¤)ŠÃ‡¸cÿäÄÄŽ©©{ï>züØóo{ðÁöÊò‹Ç޽xüø‘C‡á…cÇœ±á eQüóWþY)õ?þùŸ‹þ Ñh,.,LNNš²Œ]y›Hü¢¬LÑ#âöVЫkHf&Å!(Cq1¤i2ÝjäYxçÝÂüDY”,;uòD{yEi=‘×—ÎÎϯ,(¥ò£÷×Yµá»‹ ;''ëšï˜Ú¹³ÙHám¿“ß{å嚢²(gZyî½Ô’dÐõæT£ÁÎ'Š÷îšé.íªçiY”Göï2ËŒ1“õ:9Wv»SÍ&‹¿ëÐ!V|÷G¾òO_n÷:J©z­Þît "ÎkVýAÙï¶5¡×íÙÒ¦š5Έïu;Y­zmeiÁåÔä${šÛ5Û]éôÛÝûî9º8®×îL7›{wí®%IYZ)Í ?رcÇ|»=èõµRZ©N¿Ÿê$ORnMtºÝØ›¯¸ï…ßjƒ‚ö€£Q˘ZÖ+fz‰¸ÍMÀ´b³ñöÕ×Oð—© IDAT_ýÚ·¾Þj¶Ê²pÎAÄXëÅw{ý¢,§uçe¥ÝQ:I’¤Ùjg§¦¦Ž9’çY§ÝièÌ{1ÆLOMi¥VÚmoCX‡Ä:[Baœ+Îkù Xçt’ó®Ù]/¼ôB·×UZyxI²dç®]Ëí•z³±¼¼üÂK/-·;J)ëíN'Ͳ3gÏ¥Yî½8/Íf „~YŒë÷zÆI–×ç—¬'(Ý^Z9ö G=þÜñ}<ÿìóœ$Ý~¿Ö¨ àH^~ídéla]krb¢Õêt:S““eQ$IR–å ?€H¯Û‰Öç«ì{kŒri–‘ØÜo‚^]NŠ8qV8aEL¬Ù‰3âzeß|~éAY¨D;ï c¼ 4f`\’fSSSË++õtbß¾}Ï>ýôéÓ§÷LÍÜ{Ï=Š9Ѻ(Ë4ËÎ/ŸkÔë€×Z•Æ–EÁÌräÎ;Y«v§Í¬^üþK§_?ýÚë§²<÷Þwz4M¼xïmYÇ_<þÚk§N¾úšsîɧŸé33;Ûí6XíÚ5Ûív?~ÿ[øÞSOe©N³ü®{îzêé§óƒÒ/dœ?{~¡Ó+ú…9}öÜá;ïÚ½g®ÝmŸ>{¶4å3Ï?ûÊÉWÎ/œ¯Õj¥5ç——jõ†J’4M»Ý. œµÖZïEkÍÄÎØÒ”ÑÇîjzÝk¿égâüñF&è'"Î&¬¡ï,¥Ù;ßóÞ²,§&Z¦4¥)Ÿx≾uRˆG1 $µBÝ^O)Ýs¾kŒiwO9[›˜¼w׬ívÏ,-:|ä{O}ZÏ/-9æ¶)Wƒž1íAÝ÷Ö·2óÂâ‚1Ìi¢Ÿ{é¥Ý»vÿÀ#$IÒé´¿úÕ'(˼V]cVú½gŽ?`ÿ·ìœÐë¾üåê}+~©ÓÑZ—âO9»sv÷=o~ËäD³ÓíôåÓÏ>7(MZk$YíüÂr–×­©…v‡“¬gì׿ûäýèc_þò——ú]ñòÄ·¿ó¦{ß´çà¡z½ÞtÏ|ùŸÉ÷ž{æþîüñÇ“¢þä“ß}øßþÕ'žc͉VvŸÇ²‘ŒrJDM}‰m·`í³ÀÙz•9Kˆ°: ÒˆÇå"´qµ&¸›â"`°f&¢\%FÃÅýo¹_A¬µy–ˆ÷ÖºW_}en×îsóóA3Þs×=Çï»"ÏóCsû^xáxRK[i-ÓZ+ëDD2}úõ×ï:xøØñãLÄÌsûöž~ýõ^¿?999==ã¬[X8¿ÿ¯¾B½³<«×ëZ'Æ”¯½vJ%zÿ'^~Ù“¤I³Ñ¬ÕjZkçpìØóÖCkͬsJ©Zž×óÚÄÄDž§ƒÁ ßïöú=ZëC‡Ž<÷ìsI’¹óÈñãÇ! R¼onïüùùÁ`À̦4{öîiä5bvÖ¼vêUï]½^ŸžÙqâä d"²ïÐÁ—¾ÿR»?8|øð‹/½l+½”e)ñçeõ€Å>úè£_ùÊW˜Y˜ÄyTYkwØýšïÆf¸­ :Uº^«—eQo4X|¨g¡—Ʀ ‘Ó¬ AÄ‘“ñÞW~QJ˜¬ÕiR£“ëýúX^aªhif"žˆ‰àœ÷âG:ÔZ“$)³rÖk½÷!8°è""R”R#ÏY­‡S™ˆÔƼâCˆ¶(°RÊzï½Qˆ\c!"o bRJÁ9)a­Ê²ôÄÆ€™Ué}aJõÛµÆzkU :â65qxº½EY²xˆ„0À•…«’isai4#ô )y!gE„,‘ÙÑцÇäa¦Q>‹Qx‚ˆˆw#‚&Vý¢ð^r¢çe)ÁóX\å2$bç !‰%“Þ$ái˜QD´Ò°ÖBˆ£ ¨yœ$‰VÞÁ9Xc¼5Þ{Ö‰÷cli9""ôv`l÷\ â9³ ›8­Wßã©;=y¤7×8bWÕŒU,ÜjAáÇâ>võR+ÖfÖùjzð©é”èճІÄÓajÀÖ‡û‘5{È;ks©ø$QLd½·âB(a͉PHs±]ë»Î–\>,À6Y£Î#®Š ·Éx:MSk­1&¶vÄÍKÐëTj`Ú¨<·à¨m¢ÔͪÕ]=íÉ…ÏE@(=*ÈŒ°{X×&I”)k(ODäŒ ^Õã5v#®˜F×¼–+}ºŽh:Ö–Œ¸Ù z‰C6£ãËW?®Ô”qU“ÔÆÒJÞ(€ ¥•+WŬ ç¼óÌ„à|ïM¿¤Kë—ʰšƒ;¦ÖZDŒ11(?âV2qȆŽý š¯ )Óš³­Z× ¾"‡Ñ¹dy±ùäüü<3ǭˆ[FA.•/¼‘x-Ôº\—{ ŽrkÊ)Ix>SÀŠ€»<À4VS§Ê’§Á\®Çz‡úeCJ0íÇà‹v›ô¦Và +¦k>°6fvÙÙ.1„„n糋ôø}PX ðØvo‚V£rk²™e Q«_‡[«¼Môõ•Pÿ3{n³í7¼é_D°!ß…åseŒ +žfóÒO5ú=RЗêP­tĦ4„=yƒ¡ëyc5©¶l²Ç°íÍ*H˜ „!ª2ñÎ.‚ò¤žyl¨=Ò1JæãBÕ­=ºÈZM]0|# 5t²ÙDA‡QT¶þüÊJ`R )R)àÆå¹š­V0Ȫ´T×uSæÌŠØÙ d¡w8µÚ!C‚EK ÏsiW½l».e¸6ÝÖù€Æ<½'Vë1ßxŒˆ`èqx‘f'èàí{Qá;jîpܤ†‡º´GľbQÎöÜãp·Ë2©åh§=ˆAžh0€å6µ›‚$ÔÌÔá`@Àô µ ÝŽrr½²€0_«/ìLðfîßoH[;_é]IÕqFkñ~ÍBAFÝ+ Ýofª8LÊ!‘Ê]›ááf½uСô8 E ¥@LØîtv-#M_#BغÏ_ÊpØ>VdƒÄ@i¨‘¿OØ×œ I””³ NMö«>¬ébh÷îÝëRº\.A¯{±Þ#a2h“ȆܬQ …:òÃ{ª‹°ÕºŒ«ÍœàÜÌÁ@FN xèàáA’ô‚§60,*îAÂ^”ó+@·™¿%mÎÚÀ§ZUc'ø¤ŒŒ(ˆ&é+àå‡&I(ØûªUC­H Àz¿‰¢X7Ä´ÖûäøÎЈèGÕ-F9a’$ÿ.3ó;g0)¬‚×ÁAA)—ô(7©6HÄ ƒ%qtÉè²”ÿj˜6¼ß¸‰~íÔWûB€ ´»1åÂò2ŒBö[ZÀ¯Y²ÿKIA•¯Zr/r°-Úyc&?,¦U9‹øŠKY»Æc{f—ºÚIH'¤ÌñÞÝ\½þ"“â@µLœa‡1Ü€â4“•ݤJß÷€ƒÀ ÔêuÀƒ¼ïÁШ‰ˆÒ´{÷„HQ™¨×%êE+ ŠÂ@ZšÀÎa¯à×|@YÌ%º:¤óä*eB,°^õÈÀ­}Ôîp),ûYàÞ©=ÈÒèÅq•òy¤jsιðbd^6åWŽàœk4ácAGc 3L"J©‘mDk¦éh¿GœÞßÔâ½ç¡ÃNåhÀBVÚB¥ ‰´Îðа/kLV?—m†¿Ü=3š&f…-6 /?¹­.@Àh©Zèc¨Óƒî 4½6‘Í6Ø /Æ4 :›¬ñ›Ï°17Tç áº©ð²î,›´MgõÈ:iÔ¬ªTÞ%]nóŒ|¢a¼KÓd¹™K¹×pí¬¬r­:ÌðE‚õ·¶6Ó¨âúê´%eìN9© FŒpÛ^ˆ1˜®å¥„1™¬OÌL630¸Q‡â,×"nqᬵ"p²%Aóªyn’°«Q£ê¯ëÛ<üOZdrP=¯±GæÅ—ðB\z7¦T¶¯1#–¤‰tGÞ€÷Ñî|MLïÿû?ûÙÏ~êSŸzøá‡Ó4õÞ¿ÿýïÿ¾ðgög>øàx ß4Mgff>ó™ÏüéŸþéììl î/}éK?þøßÿýßþóŸÏó<¼™e€Ÿø‰Ÿøìg?ûéOúÑGõÞ[kgff>ùÉO~êSŸÚ·o_š¦Î¹ýû÷âŸø‹¿ø‹Qõ²w¿ûÝŸûÜç>÷¹Ï½ûÝï®tŸQ¸8X DðÔß 9€<µ¾&8¤&ƒ!€ü&’f ½:a_QmXê±R-ë’ˆ ¯öÓPHoÍï—’\i-Á ™Çyx€ò}yc7¨©÷mPÍ ŽôÐ:ÈØ–ÒM´™éZ†ñÄ!P½ž¯e1ñD~8¨yC%å¬@vݹM…­Ñpé)Hƒv¨¬9¼‘þ¤^i æQz\h@¯±]WÖì*ˆÙI ÁôƒG€Ä¿¸ÇËwŸi–&‹°Ó«á‡I:h´1{¡|Öc­¡E´ˆI1¨r”a%!YF5­®jYVÖë] tRH*e ÔPjeÏŽ^ è7`'3Ðþ¹¹]Sèkò£ ¤ï ‡Ò—v 5T– Íö£¬u¤ÁÕj A’10¸‡j÷f“\âa_YÞeµ S 3ŠhÌ•44†öоé|ËxKùòÞ¬Ž– g^u¾uÂ(ÑC*~ ¦©G’½û†R*MÓ÷¾÷½ÿøÇÿöoÿöw÷wƒõù=ïyÏýÑ}á _øð‡?Hsbb€1æWõWŸzê©cÇŽýÂ/üBðúxç;ßù¿ñ¿õ[¿õÛ¿ýÛEQ„ÏeýÐC}ä#ùüç?ÿ{¿÷{Á<òË¿üËO>ùä·¾õ­_ù•_1Æø¥_ú¥gžyæøñã¿ök¿æ½gæ?þã?þØÇ>ö±}ìÿøƒM\)á‚‹AÜ(+ãIªˆÑD­!á~ 1+öÎŒZuô ^<ƒ¬w`f3›ì¼amš‡CT<¦Ie“[(´1•Û¥³$ ã}‡¦{šh4»ó c0¤$7º<ï¡Ù[×åÆyŒqX„o^Ћ^ƒ,$¤βŒÇ¼|Dcõ W /£}3Ù°·&\T¥þ¯Ö™Òá–@i]Œ*âS2ô ÏžÂ2š_޾å¾SÿødQ»Ž>yòä«ó§¦î˜[†MPS'дFÕccÖæÊY¥’U `e(•i7,GKVð¶zpÕ#qÛfsTõ‡C³{—uIL˜ž›õˆ$…Þ3;Ûlw [ÂZ¡žûv·ü—¿:öÐÛÁJ9mÆ6ƒÉóIDATA <Uv‚I]ßÙœàó§H‘Ø¡ÓæØ½zÃûÕÝß‘G³†*QB ô{6¿ö @§Š¥=êNJ´”åæÔkg†Þ¡÷¯FA—eù‡ø‡ív»V«}üãF†~ô£½^ozzúOþäO¬µ­V«Ýn‡ÏÿôOÿôüÈt»Ý¯}íkðÐï÷•RÏ>ûlèºY–c‚DD~ÿ÷¿,Ë3gÎüùŸÿ¹1†ˆ~ê§~ꡇ"¢o~ó›ùÈGDäøÀûÞ÷>çÜ¿üË¿|ô£%¢4M_~ùå Øƒ-{˜†0ÀÿöæGîº רR8ý¤ÏíœÊ$ò5,EÆ{Þ˜% ¤) úŸè‡w¿|÷;ßzâ‚L6›Aºr5qmRàju½Ì"¦AnäM\éˆ+Cb‚¢ÀãëtÝÆ œñ’Š«Ô€JA¸i±3¯×€3@‘˜. Àð¡{îûÑ=÷Îû|¾ßäu$éf©:/ÍŸw½ „ÒC+¬¦p€§„,A ààpøßüæ‰ÚÛV…°—={v »˜Kƒ)FaÜm{2Eò®ƒØ i‰‡vC[˜Þcñv‹næ» ¿ïî#½íÝ%Њz¦}_á¡÷>8tY#‚zäÑà:ª¾26-c=¢ß+úÀ ?ðÌwïùzíÈóÙág€D z4„ZM<]=–GßñCë6fÇ‹{%@ ¨W4`$I†tÔz“‚–E ¤Àÿ üYC“¿ÅÜ·gßùݳPŽXÇÎÌŸ-Ë.šç,8JÙÖæú˜+ÂÏ#i‡ ÖøÞúŸûES°ª"ÁáÁÐ`¬…EìuØ7Àçûß¶”ÜüÇ·=b`@¾F^ÿø?w~7ü»€sÀ™š>_o/+æé_8øÀÆ¿`Z›ûTùwþ,¶~ðDëhZ¦„ô5üûïºÿ ЄÜÓ·'#Õ^± ÀÂÂB–e?÷s?÷ÉO~2¼SEš¦úЇ>ñ‰Oh·ÛAÿ2ówÞyêÔ©^¯wèС‘ïõzý×½gÏž¢(Å‹v»Ý.Šâg~ægþê¯þ*˜˜:ÔëõºÝî‘#G¹Ž=º´´Ôëõ>¾øáøþáþò/ÿòÇüljHkÍJ©ro†ˆÔ[M¨ Þ2RǪ½²Òš““oó#hÔêƒÎŠ7"P)rÀJ¯Óédy¦”N)³À;ßõ®©F=lh¥ˆ €|lã/½ô‚ÒÁ¹ ŸØ»oŸ‚r⸲‘Ây¿>ÈõÂE³Öh8H׃o ¡@­É‰Ùc÷¼¥95Ùz@[«•nZeH̲ì 6<ÌÔ|áóna¥µVKXˆhpC§ ˜€T'ŠYi6LRªß8çuR¹›xåÕW ‘ò¨öUUÆd´EøÀ[îaU¹”ݰAWíT(VŽÎÞQÙM2mÕI2ÙÔ0Æ..-³B­Q#@1 ,§g¦]HàíšYP˜£‰$M¡ôQ®ßé§I­•´$ħ( TåÞÇPIp!"×¶Ñ*A3@à÷<úpü‡ÿãg‘Bå„M†<"¹€‡'RëlN©F’7P¬I—®\Î9èÅ•6³†Eð†0ð}Sdy– ãVµìµ×^År™A½>ùÿþ×ÇQ:jz¥Ò½÷‰¦ÙȲ¬©Q¥3ý²p”2ZUyCµ\ïÜÿ`䵇~çJÎiTnù ˜ÕxÓ½o>{欱^Tr¾½dY…–N2 ”R…[¢Aú ²Ì­V‹ˆÞÿþ÷?ú裿ó;¿3ò¸xì±ÇÞþö·‡w&''GþËeY™Üï÷ƒ|N’djjê¹çžûìg?;«|9{ì±w¼ã¿ù›¿9Ú* D¯µ‘$I´ÖƘ¢(§gYö¡}è'ò'?ýéOÿüÏÿ|ÐãÜ<Ò*÷èÔÍäK€žºãÿð›|7pd±¾ç…ûžÌQïíŸ~¥ætú=æ`&µì…AèC‹'àT ƒÓïyôG,$ÉR4³¥^RžKkÿËþÕ3ôœ+‡Þ°¥÷yšŒ†P­VOóŒµÐïõˆÈC˜™‰ƒ}§¾c Nxýzy†ÜèwáÀl $ XôWî=ü-ý‡öwj°  MÌüûÇŽ=räkoã¯L–O;7ûÐ{~ôþS˜4§ã©¤ÔÖõÎõÐ`´~ìÔ÷ÏÞEh š·€ÿ¿½o’ª:÷üí½Ï«]ÕÕ4Ý 4v7€ ¼U@ðQ£+frǸ0Ž+“Kîr²ÌºgœÄÉCÉÌʺ׌³Ç…—WïLŒ7æ&ê%ŠDÔ ¯¦ÐôûQÕõ<çìÇü±«‹¦»º%7^9¿? z×Ù»êì:ç·¿ó}¿ïÛ6a0|)¤ä¾_ ±XƒÄN½ytZ&¬üÓu¡+1sÞŠUæÁG¿¥ H$b–E*±AMQXQXQnÚÕ–QI\`ˆFØH¥3¨¸gÁ ŧ‚T²æËƒ(ÀmXÕŒBfp`0Lý,°éª¹ž<„GrËo[ŽÜé4\åöýt騒åYž2LOÔWÖ(烘 Ê t\þÕ¸ŸpĦIKEûs1 7Aà€qE’2£@d¹æÆÀÀ¡Ù¬c^Ô@7ÇɾªôPMA*å \Ô‚RLƒŒLÌoŸ»Ü;¸C–“­tP!ªÐ½C'ûiÿ¥·.EԥΪ‘$pxÎe»â³€|K„ @, „J*r(@›7fÝP› cïüø‘³ZäMaDϲfÑ]“>ô6 vTὕng£B5Â,á‘\D{Ï]ä ‡Ì-|êo÷y·Ñ˜œ Ê©¬`ái¦Œè'^2SJ~ heÛ•W^yë­·ÞÿýRJ}5®ZµjãÆßúÖ·4i¦R©’¹ÝÙÙ …êëë;;;K{ß÷øÃ.\¸°¤ÊÐX·nÝ–-[î»ï¾RîX{{{4­ªªúàƒ4‰ÿñŒÅbÓ¦MkkkàyÞ¦M›8ðì³Ï>øàƒÚœ§7ù ØPÀŠ‹¡2ä˜yåY!n¹m3@ÐÜtåu×ÇÈ0wØÏ»6ÕÜ«¨"0(%b‰Ê!$n^~™ËµXó‹]±* ”1OŒV•z=`” –]Y×Ñà 'ZðB Ì÷!òpšOØs/½X“¥ ‡êš›´Ís ÇZ¸ô"_(P„€|ÎÅu7n¥Z¹ (| ׆¯ƒª¦5gѥƴX(a†‰ 5DD(()$$WPþ¨ŠHA)%Eq]—NñCyB!’@È´¡ oÓÚ ¥ Í̲uh¡KªæukòªÀ q‡špFc´OÉ÷-DëkÞÞµÌñà "Aýœóëc3Q‘pCe<¬Óß\´pn6; ÂAèù¯Á‚Dt´…*íãöá]ºf©¯0läxCA͹l. P’ À4Ç„c†+hÓâ`¨ª«N&S0!OÀˆ„D1YEï¤cÄ¢•¶6™ ˜–m1ÃLÒ\ˆ†††‚_]r³~臑‘‘G}ôÕW_?þ’%K´IûÐCíܹ³¡¡añâÅZr·dÉͰ۶mûÊW¾rÿý÷?÷ÜsŒ1!ÄÒ¥KW­ZµeË–]»vé1—-[¦±üñŸÿüç‹-Z½zµ^ž}öÙ­[·~õ«_ýÅ/~¡/þ—_~yëÖ­[·n}á…´‘ÞÚÚú…/|áŽ;îØ·oŸ^0è±Pheèn4‡VÍ<ÇPÔ9* pò¤y7ÝÞZû™»ö? 5(̯=YŤ­`Qr\IjY¤eÀ ,†m0ÁÇR„ÛÜܼjÕ•ápØ0Œ+W¯ÆÇÞ„­(ô’𔇬dGØ)òö ¶F, ›V.ˆùUù£ÃšÅp´Î¦õuiJ'r­!aHŒÕœaH Q&åEÂN§}‡ ‚PíC¦£ÉŸ0A‰’Ü¥`° t§ÝÖ>5ªÑ"¦UUÁGÁ¥’ô£2/¥KkØñ¨—ÏëI¾ú¦UòBñ¸•q<´¾{ydø/–á°`®Yö?ßxEo² @pÊK!¬\¿¶ ƒuœèƒ.)%%‡Á‚2áÜxI¦0áÇj¥xtÙâ‚'S™Ž|Ü£¾´*v»µÝÕË1}AïFÊ ¯È †Ãâ°¼ßu¼ƒ*€ ØŠF )Rˆ œôÕ¨ÇÉÕ²írµªMGëã ®EA ꚪÓqcö­3ON°0äxɾØÈxptÜ΃D`Ù 9D$ª Q©¼O«h¤F0Ö5Ð_ḛ́}7GÀ l ÊG£òŸ’äªaBƒƒƒ÷Þ{ïÃ?ü½ï}OÁ9Ù¸qã~ðƒGyDû”{ì1͹O?ýôÒ¥KgÍšõÄOhü»ßýî7¾ñÆÆÆ¯ýëšÄ{ì1–’N§ï¿ÿþïÿû?ü°þÄ'Ÿ|ráÂ…óæÍûñ¬ùÉO~R__?kÖ¬'Ÿ|RóÍo~sÆ ›6mzà´InôìéFŠ!\U}ìH+82ïïo¥¤ó·m& ~wG×? ÎYY×õS™ P€/ªgLw]דĕ>÷Õôxl(Ÿ7¢Ñ¡þþcZ4 Ie÷pÏûGCÕ•ÈÁveog;<Å|¢‘J·{ö¹ð|Œß2¤Çáqmt÷t»¾ ™¶mÛq×u> ZÌÚ8K›yÜ„0ƒóP3Ù„;w_rÉ%þp@׎ᾞ.Y êgG áC)£è$™°™sYñ\ÙOíq¤å‹¼Ód\HæHÉ %Š*"”¡ýÝŒ‚‰‘ô¡Ýokg 7)¡jÿþ÷ˆA/j %´T„EÊäzÞ9¤އFPÉW—J£"%?üÃ!â+t:„L–‚I&;·!屡Ö#mð€'ÔP"¿kûN¤‘ËA¹z×k­†iÙßèÛsòè+ï®zf¸œp ·ûõ)à ¦P`àŒP¥¤t£¢¯¯¯ìvk¤äDRdd8Šö½G˜ ˲SyN!(˜–"fCNÇ©“B‚šºgûN­9õaûÈÉae(CrøTÁ$pûس¹$xŽ„(Rï·¤Ýt'Z÷v@¢õíÊ!ýï·À7)QêøŽ# Så* Æ !ó†BFõ¿Û›Í Ñƒ¾î!£ooGÕ´šÌ@ŠÄã8<œ DhþÌŽcýÄ#=ºZ÷¶À-²kk:ÕO”¢R*%eÁ95øÞˆlá‰ÊÄpwW[G*6F nwÏ1ƒpp•"ŸŽÂ‹ÿ"ÙYôwÞ©‰5 i¡ÛwÜ¡ßÕJ8ÆØúõë5A÷ôôÜ}÷Ý¥Dm)å¦M›tBJ)<¸~ýzÇq|ß¿å–[´œCÇ•Rýýý[¶l›ŸÒÙÙùµ¯}­TŽC)µcÇŽÝ»w»®‹ÑR û€IaI¸ YS‚Z™°ò&—¾ »Ä$ÊÓ²"b›1Î9g\ _—n)ZŽÕ6|Ž,ç ²˜#`SêI­[³ áB²èM—RrýŠY¦\šŠùLf %•R†Á¤” PžœbccŒ[NŒùwL ~(&a¨¬âýð‹82•U\A!TE}Wò< ˆš‡(V²Ï£*cK8£h&9C˜a”>WAãQJeÄ"©¤€‹Ñò˜QX2gPŸ0p]ÃU”É  6•yI -þЮpI!1cà²HÞ”åÒÒ6„Ë #ŒHž@FMx>“L,陂ðŸ„XPJZ–äÒ˜Á‹á-P¬0›‚¹F;l %4\!9‡ÈQJåê¬~Zøkp,³à¹cí´ç¢8cŠƒ1A¸à –×%€‚mBHpAl„]€@(˜0Òqßæ$ɘJ P !œ%’œRde LÓòÓ Ë*NÅé†0¹%„TªPÊH€ûQôsð TrÊ!95…ä>ÌÓ[³Q eR0 NáùEµ ! „)I^x Œê+MI8ÐÞlÛ” yŽˆI¡H–G 4p}×—~%½ÀvKéYFÜã9À%0UÑ-ò=×P¡”Ò4MíƒÖq9Ó4=Ï3 ƒsnY–çy%J-±­î[ÊÂBè# Ã(Uó[¾c\½”²õ‘¥ÔDBˆö€†aPI¡÷"võƒ¹NÞ® —±(DV‹w‰¢ŠJB¸tAA”,nZÜíÈø§ ¹PZÜÌCJ™”ŠR@ EQÜ–žãtʘò8%¥B)}c ŠÁ‹‰˜¾€A‹Zâ³¶i;—BA¦²”Q¸’™R ¤p&]½Q|€‚«1ãŠbý±xªµÇÚÝ>%”(p.%tt÷€C) '¥þ‘:gO(JгVüíÉØDJŠ] JA%„.¾E%•TRW¤„B„))(|ZÚ|…R­W'÷‰ÉxÌÖ-êt”Q58cyè*T@9¥ž$R(Ÿ è¯MÔ¸ØÇ}BÉ™³8f™SR)Pª@(„Йî Ì”"D_° „xTÄ×¥ ÑBŽ…e 2PV€È1F•’žÒ×,=m^x€ !9¡T#)P¥t†!(çñ):K¥z“ét._ 8:@€ó†\. Ž\ 'kÛÎØ­ÿ>3p}žõü¼Ï§ÎÜ caËŒØæx‚žÌÅá ™g•’ó8DÆfA9@€ó€¾¾¾þ¡!Ó² ®{!œo8bŒU„œêêêÏØ©¥}±vŲ…s›«X´«ohxÇ;û;{ûƦ\.„àþx‚.ëâ„ Ã:‡5P(×ÍSÈ0ødæd6›v½šÙ†i^P'>ÔÛÍ{º£±ÏÒIqÓY¾pþØ–šªÄ캚q]“Îd—.œÿïþÍ]õÈcgÓKŸûY¦e8¶}ݺ5k._ÙÖqbl—}o¾‘è?ŠÇ_zé¥ÆÆÆd2•J¥âñøK/-]ºti*•:›îzØûæ+Ö]_ž ÏñÚ˜xúe\3œI%7­[³vå²×vî~mçî‰4m9¡±£±ÙÕ•ÁíxÁà¼ÇuÝçþî½EМ9M·ÝºáÚE³w<LN™‡ßøôܩ։íBLúÌÑyѼ›~ýŒ!ÅÂÞÚ¾áÍÅeŸ¹ï‘‰¤<‘LQ @4}ú±¸c΢ë^{n ÕÎûáOŸáB¼úû·ü·÷h‚.‹§¤d?õ‹(&F«áÔÈÙω|2QY"OT Ç™uµŸ»öêã!|~F—sbgÛ¶mkllüÕ?þºµµ @EEÅ—þõ]Û¶m»ýöÛÏ~ä@ÿZ¸Oìâ˜à8žZï…6ßtýMëV¿ôÚë¯íÚ=®ãØÑ*#Np^ XÙ4+vü0 G"a¹\n8™\Ü0= è²ð×vl·póËO½RUuDÊÄðéøUUe\{5†“‰øTOÂãÚRÎäò=ù¿Ï~N|. ~ù8ÖºUWÜrãV*€çû™OúÚ¼ys__.—«««-.Q'6oÞ|®ãLñ^çݹ³ëOû©<ï`KÛÙc|<)O8úÒ¿ÚpÓºÕ>ú?Îð¯mF( è ÛÀ9¯«­-51Mý8_öÖ YÆùý MÖ;tpñÚß_ÿ… /?`ÏU—íÝÞ|äÝc V¼½vãÍ¿zZ›Ï mÏˇÞû×ß¶-óskWùóû_OŸe/)Ea’ …ïsY®ÈpscÃ'#æó¹±­m[c)¾ÃþCG÷:ú±Ç1Ê]:|Ò½ˆÎ´Æ_Û¹{\Ç3,ÿ\!¸/ìk;5’w››çtuu—.ôÊÊÊ·Z[ƒÉ9_gRÙheEz8­ŒdG¦hœÇÍ/Ý÷»ç¶ü'ýgMýç~ý “ââÃûö­º¹h<6-ºú·?¶×P2U¨ì®NTž“³€ëù¿Ù±kÓמ—s?z¼õW¯nׯW_¾bZUâ¼ »cÇŽ«®ºªÄþ”Ò™3gîØ±ãÓó£—!âT29í£ãe£…©ääÐ œpp_]Hæò¼øÛÿþš›çèuÚ¶íÎÁtàߘÔpK'ϵKýÉ£/[³òíW>¼lͬ“G§h,ãQ1­ƒ‹×V —ÏŠ‘¡–yËæÝ|þòŠÔ€áD¢tÚPÏØ^ï>ºþê5Ï¿üÊú«×¼ølÍÀ/n¼ùåíop!>·vÕ‰®žóEÐGû_½¶}õÊ·­¿q"M–ͽs0¨xà;v47ÏÑEŸ-ËJ¥R<ðÀ¹q¨eÿé®rñåkÇ5͘Uß4wî¸ÆÿðÕ{478|¼í©^,«·kkié>Õyú©Ä‰Ž\t)•.\6»ö—ÿþËU!¯ÿñÄ‹{ŽsR-{wßWÞL YƲÕkËÛ¤–óÆwõÖ5Ôöt\³ýyÛs'k$Ô2;&xMï‰U;Kè«©ß½nsª²:žXóû_Lï?u`ùu‚+Þù§3lvÇù˻ﺸ©áX[Çÿçù|á ™]É›3ƒ„kW.ûüú"áбöÏüü—ýCÓõï Ø½ëœt™š¦ÿã÷?=E¹LOë1/^i-ä¸öÚkµA½yóæ³”phX¡HÝœ‹íp´ì»k®9·ˆ·ÞØñÑ͘±dåJ½Ik uÏ—.šY÷Ô /nm/ï=)ÞÛ»wŠt€>Ú#X¾úªþ4—îܺvÇ‹Õ]®—B¼»ûMO|¦²‘?9A—qqÁÛ[Z\z騯¿y湩‡noi Ø9@€O×uÓÉáÄôšæÏ-%§ü¹0’L\Fp œa.O›uÑÄÖ|>g;N$=ËQúzzN<Ìf€Ÿ”Cý}PJ)é„.ˆNjh°§ódûñÐÏZ‚ûŒúzJ϶Šç|"‹Nº^µ9œÍd&:£'bœë9@€Ÿèa¤½½{ž_È_çk:!fÌø „èîìœ^W7Î]<…™;±±Œz,¦×Ö5Í;™ê®P(œloïïí nª8ï(ïâ(!—Íôtu)) ð¬Óîl&ÓÛÕÕrøp&=Lb€ü)ðt€øs!Ø%@€>¥øÿ+Må®WºIEND®B`‚pymvpa2-2.2.0/doc/source/pics/logo.bmp000066400000000000000000000420761202542755000175670ustar00rootroot00000000000000BM>DF8–:øC..øàt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[´cV|v|–„V|õkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[v|y¥œÎ~ïßÿÿÿÿÿÿÿÿÿßÿ~ï¾V|t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[v|úµ~ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[Æ´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[´c8ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=ßÕkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[´c™¥žïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Î”[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[”cY¥žïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷úµv„6tÚµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø”t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[׌=çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÎõkt[t[t[t[=çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Ît[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[õk{ÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ­”[t[t[t[t[t[ÜÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷Õkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[•žïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿy¥t[t[t[t[t[t[”[žïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Œt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[Õc[Æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹­t[t[t[t[t[t[t[V|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúµt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[V|]çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;¾t[t[t[t[t[t[t[t[y¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÞt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[s[M”M”.Œ²kt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[ø”¾÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß´ct[t[t[t[t[t[t[t[›Îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[s[¢íàýàýÁõMŒt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[y¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷6tt[t[t[t[t[t[t[t[”[žïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6tt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[s[ƒåÁõàýàýÁõ±kt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[·Œ¼Î¼ÖÜÖÜÖÜÖÜÖüÖüÖüÞýÞýÞßß•t[t[t[t[t[t[t[t[t[6tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Œt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[s[s[ɬàýàýÉ´t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[”clt[t[Õkß]ç]ç~ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÖ¶úµÚµÕkt[t[lœdÝdÝ‹¤t[t[t[t[t[t[t[t[s[“c“c“cs[t[t[t[t[t[t[t[t[t[t[t[t[ÑsàýàýÂí“[t[t[t[”c´c´c”ct[t[t[t[t[t[t[t[”c´c´c”[t[t[t[t[t[t[”[´c´c´c”ct[t[t[t[t[t[”[´c´c´ct[t[t[t[t[t[t[´c´c´c”[t[t[t[t[t[t[t[´c´c´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[¶ß”ct[t[•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾t[t[ï{àýàýàýàýÅ“ct[t[t[t[t[t[ð{àýàýàýMŒt[t[t[t[t[t[t[t[t[t[t[t[‹œàýàýàý-Œt[t[t[[ÆÿÿÿÿœÎt[t[t[t[t[t[t[t[üÖÿÿÿÿúµt[t[t[t[t[t[¼Öÿÿÿÿÿÿ=çt[t[t[t[t[t[™­ÿÿÿÿß÷Õkt[t[t[t[t[t[=çÿÿÿÿ{Ît[t[t[t[t[t[y¥ÿÿÿÿß÷õkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[÷Œÿÿÿÿ¶t[t[t[[Æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß”ct[²k¢íàýàýàýàýàýdÝÑst[t[t[t[t[ð{àýàýàýMŒt[t[t[t[t[t[t[t[t[t[t[s[dÝàýàýàý&Åt[t[t[[ÆÿÿÿÿœÎt[t[t[t[t[t[t[t[üÖÿÿÿÿúµt[t[t[t[t[õkß÷ÿÿÿÿÿÿÿÿV|t[t[t[t[t[™­ÿÿÿÿß÷Õkt[t[t[t[t[t[¹­ÿÿÿÿß÷´ct[t[t[t[t[üÖÿÿÿÿÜÖt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[lžïÿÿÿÿÿÿ÷Œt[t[Õc^çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžïtt[s[&Íàýàýàýàýàýàýàý¢í„t[t[t[t[ð{àýàýàýMŒt[t[t[t[t[t[t[t[t[t[t[„àýàýàýàýÁõ’ct[t[[ÆÿÿÿÿœÎt[t[´c—„—„”ct[t[üÖÿÿÿÿúµt[t[t[t[t[Yÿÿÿÿÿÿÿÿÿÿúµt[t[t[t[t[™­ÿÿÿÿß÷Õkt[t[t[t[t[t[6tÿÿÿÿÿÿúµXXXXy¥ß÷ÿÿÿÿ8t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[”[ÜÖÿÿÿÿÿÿÿÿžïlt[t[—„ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Œt[t[ª¬àýàýàýàýàýàýàýàýàýàõ‹¤s[t[t[ð{àýàýàýMŒt[t[t[t[t[t[t[t[t[t[t[½àýàý¢íàýàýlœt[t[[ÆÿÿÿÿœÎt[t[y¥ÿÿÿÿ8t[t[üÖÿÿÿÿúµt[t[t[t[t[üÖÿÿÿÿßÿÿÿÿÿ~ç”[t[t[t[t[™­ÿÿÿÿß÷Õkt[t[t[t[t[t[t[ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿÷Õkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[º­ÿÿÿÿÿÿÿÿÿÿÿÿÜÖ”[t[t[Úµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúµt[t[„àýàýàýàýàýàýàýàýàýàýàýàýÅ“ct[ð{àýàýàýM”’c’c“ct[t[t[t[t[t[t[²kÁõàýÁõMŒàýàýEÕt[t[[ÆÿÿÿÿœÎt[”[=çÿÿÿÿüÞt[t[üÖÿÿÿÿúµt[t[t[t[tßÿÿÿÿÿº­ÿÿÿÿÿÿ–„t[t[t[t[™­ÿÿÿÿß÷t´c´c”[t[t[t[t[y¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÎt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[·„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹­t[t[”cßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÖ”ct[²k¢íàýàýàýàýàýàýàýàýàýàýàýàýàýdÝÑsð{àýàýàýÁõÁõÁõ¢ídÝŠ¤“ct[t[t[t[‹¤àýàý&Ås[¢íàýàý±kt[[ÆÿÿÿÿœÎt[—„ÿÿÿÿÿÿÿÿV|t[üÖÿÿÿÿúµt[t[t[t[™¥ÿÿÿÿžï´c=çÿÿÿÿ¾t[t[t[t[™­ÿÿÿÿÿÿ¾÷¾÷¾÷~ï¼Î÷”t[t[lÿÿÿÿÿÿúµ×Œ×Œ8ÿÿÿÿÿÿ•t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[Õk~ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿ—„t[t[6t¿÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžïõkt[s[EÕàýàýàýàýàýàýàýàýàýàýàýàýàýàýàý¢íФàýàýàýàýàýàýàýàýàýdÝ’ct[t[s[dÝàýàý.Œt[è¼àýàýª¤t[[ÆÿÿÿÿœÎt[{Æÿÿßÿÿÿÿÿ¾t[üÖÿÿÿÿúµt[t[t[t[ßÿÿÿÿ[Æt[º­ÿÿÿÿžï”[t[t[t[™­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾t[t[üÖÿÿÿÿ[Æt[t[8ÿÿÿÿ¾÷´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[œÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~çÕkt[t[Yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿ·Œt[t[ɬàýàýàýàýàýàýàýàýàýàýàýàýàýàýàýàýàýdÝàýàýàýdÝEÍEÕÁõàýàýàýÉ´t[t[„àýàý¢í“ct[.Œàýàýƒåt[[ÆÿÿÿÿœÎõk¿÷ÿÿ[ƼÖÿÿ¾÷´cüÖÿÿÿÿúµt[t[t[6tÿÿÿÿÿÿ׌t[V|ÿÿÿÿÿÿ·Œt[t[t[™­ÿÿÿÿÿÿÜÖ¼Îßßÿÿÿÿÿÿÿ·Œt[Xÿÿÿÿžï”ct[¼Îÿÿÿÿ[Æt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[y¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{Ît[t[t[¼Îÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹­t[t[.ŒàýàýàýàýàýàýàýàýàýàýàýàýàýàýàýàýÁõ‹¤ð{àýàýàýMŒt[t[±k¢íàýàý¢ís[t[ÅàýàýÉ´t[t[“cÁõàýàýð{[ÆÿÿÿÿœÎy¥ÿÿÿÿ–„÷Œÿÿÿÿ8üÖÿÿÿÿúµt[t[t[º­ÿÿÿÿžï´ct[t[=çÿÿÿÿ[Æt[t[t[™­ÿÿÿÿß÷Õkt[t[׌ÿÿÿÿÿÿ;¾t[Õkßÿÿÿÿÿ·ŒÕkß÷ÿÿÿÿ׌t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[v|ß÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXt[t[õkžïÿÿÿÿÿÿÿÿÿÿ¼Î”[t[±k¢íàýàýàýàýàýàýàýàýàýàýàýàýàýàýàýƒåð{t[ð{àýàýàýMŒt[t[t[ÅàýàýÁõ’c²kÁõàýàýð{t[t[t[ÅàýàýÉ´[Æÿÿÿÿ¼Î=çÿÿ=ß”[”c~ïÿÿýÞüÞÿÿÿÿúµt[t[”[=çÿÿÿÿ[Æt[t[t[¹­ÿÿÿÿ¾÷”ct[t[™­ÿÿÿÿß÷Õkt[t[t[~ïÿÿÿÿÜÖt[t[¼Îÿÿÿÿ;¾•ÿÿÿÿžï´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[´c]çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß÷V|t[t[׌ÿÿÿÿÿÿÿÿ~ïÕkt[s[EÕàýàýàýàýàýàýàýàýàýàýàýàýàýàýàý輓ct[t[ð{àýàýàýMŒt[t[t[EÕàýàýÁõ“cM”£å£åEÍs[t[t[t[-Œ£å£åDÕ[Æÿÿÿÿ¾÷ÿÿÿÿy¥t[t[Ú­ÿÿÿÿ¾÷ÿÿÿÿúµt[t[V|ÿÿÿÿÿÿ׌t[t[t[6tÿÿÿÿÿÿ÷Œt[t[™­ÿÿÿÿß÷Õkt[t[µc¾÷ÿÿÿÿœÎt[t[8•ÿÿÿÿžï¼Îÿÿÿÿ;¾t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[[Æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ=ç´ct[t[;¾ÿÿÿÿßÿ–„t[t[©¬àýàýàýàýàýàýàýàýàýàýàýàýàýàýÁíM”t[t[t[t[ð{àýàýàýФð{„É´àýàýàýEÕt[t[t[t[t[t[t[t[t[t[t[t[t[[Æÿÿÿÿÿÿÿÿ¾÷Õkt[t[tßÿÿÿÿÿÿÿÿÿúµt[t[úµÿÿÿÿžï´ct[t[t[t[=ßÿÿÿÿ{Æt[t[™­ÿÿÿÿß÷·„v|׌¼Îÿÿÿÿÿÿ™­t[t[´cß÷ÿÿÿÿÿÿÿÿÿÿ—„t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;¾t[t[´c]çÿÿy¥t[t[.ŒàýàýàýàýàýàýàýàýàýàýàýàýàýàýEÕ±kt[t[t[t[t[ð{àýàýàýàýàýàýàýàýàýàý.Œt[t[t[t[t[t[t[t[t[t[t[t[t[[Æÿÿÿÿÿÿÿÿ[Æt[t[t[t[¼Îÿÿÿÿÿÿÿÿúµt[”[~çÿÿÿÿ;¾t[t[t[t[t[¹­ÿÿÿÿß÷´ct[™­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžïÕkt[t[t[›Îÿÿÿÿÿÿÿÿ~ï”[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[6t¾÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•t[t[v|{Æt[t[²k¢íàýàýàýàýàýàýàýàýàýàýàýàýàýª¬s[t[t[t[t[t[t[ð{àýàýàýàýàýàýàýàý¢íM”t[t[t[t[t[t[t[t[t[t[t[t[t[t[[Æÿÿÿÿÿÿÿÿ–„t[t[t[t[÷Œÿÿÿÿÿÿÿÿúµt[–„ÿÿÿÿÿÿ·Œt[t[t[t[t[6tÿÿÿÿÿÿ•t[™­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßV|t[t[t[t[÷”ÿÿÿÿÿÿÿÿúµt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[v|•••]çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžï•••·Œt[t[t[t[t[”[XÎ6÷6÷5÷5÷4÷4÷ÿ÷÷÷÷÷RÞ|t[t[t[t[t[t[t[t[²kª¬ª¬ª¬ª¬ª¬ª¬‹¤.Œ“ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[÷Œ¹­¹­¹­y¥”[t[t[t[t[”[™­¹­¹­¹­·Œt[—„¹­¹­™­”ct[t[t[t[t[t[y¥¹­¹­×Œt[–„¹­¹­¹­¹­¹­¹­Xv|t[t[t[t[t[t[”c¹­¹­¹­¹­6tt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[[Æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Ît[t[t[t[t[t[t[t[t[™¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿúµ´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[y¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™­t[t[t[t[t[t[t[t[v|ß÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]ç—„t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[—„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—„t[t[t[t[t[t[t[µc]çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿ¾´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[´cß÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿÷µct[t[t[t[t[t[”c¼Öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßv„t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[üÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÞt[t[t[t[t[t[”[{Æÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷y¥”[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[º­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúµt[t[t[t[t[”[;¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{Æõkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[V|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹­t[t[t[t[ÕkÜÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÖ–„t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[^çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÞ”ct[”[•~ïÿÿÿÿÿÿÿÿÿÿÿÿ=ç׌t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ç¼Öžïÿÿÿÿÿÿÿÿÿÿÿÿ~ç8”[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[¼Îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿß•”[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[´c¼Îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾÷;¾v„t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[”[•=çÿÿÿÿÿÿÿÿÿÿÿÿßÿ^ç[¾×Œ´ct[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[6t•Y¥™¥8·Œõkt[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[t[pymvpa2-2.2.0/doc/source/pics/pymvpa_on_phone.jpg000066400000000000000000001321111202542755000220200ustar00rootroot00000000000000ÿØÿàJFIFHHÿþCreated with GIMPÿÛC  !"$"$ÿÛCÿÀ´O"ÿÄ ÿÄ[!1A"Qaq‘2¡±Ñ#BRrÁ$3b‚’Òá%Sƒ“¢Âð 4CTcs²&DEt„ñ56FdVWe•³ÃâÿÄÿÄ6!1AQ"2a‘q¡±ðBRÑ#á3bñSÁÿÚ ?ö]Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@…))IRˆrMhyÓµ\³–ß6AÇq,@öK4÷‹sÐs;‘A(BSvŠ»7ÚCÏ4Ê ÝqHä¨ÅpÌS´.Ñ1Û„·‚`ÖxM¡'ÇxJÜ#¡²H÷š¨¸É˜þ:­y—6b—©Zt­–ÜîšPò)NƳOJN.^zÊÑ^§QÌ]®ä Exý³Ž%eµ6ÁïT•A ’+BÌ}¹c‚œ¶ÈyRîýS º¹Im¿x‘ò©g™s i>Í…[…uZ“©Gç[]¶Å»zm)÷D±­ùW¹²3 <›~ÆîhísÃ-Q£Â.B¥å ê@:Ò§Ü,¹ùÛÜÈíÓ¤|ÄÖü-§d•9ol’@ ©×­.¶4¨a)­)£šß#µÏdCvÙ±!iT— ²eCˈ¬Ûv·ÚXºÍ™Wò• ;ÝaÓ!>©=~"º°µ@ !Ü!—“»iéVF­hõ¹DÿGQZP·À£ËÝ·ä T¥·±Oɯ”©»Ä´úIØŸq®†âx~$°¼b嵤)*ma@ƒÁÚ¹¦fìóƤÞa¶îí΀ÌW?ºìÛË Är^5w„]³zõ4¿B“µ_RÚjÆipÊuèÏäÏKQ\s²þÖ.^¿FXÏŒ# ÆAÒÓü3s¼ $þ·§ËÈv0Aƒ Ö”ÓÕš”§JYf¬ÂŠ(¦VQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQXZÒ„­A)“@ªœË˜ðŒ½d«¬Rñ¦Ò’¯ÌLÉ;p+žgNÖÎïeÌŸdq§© ùƒP²žL¹½ÄŒæ»·1[ó¸.}Tz%<…FSŒ<ÆÚX)Ê9ç¢-ÛízÝÀÒ‘•ñ­.î‚[Hþ4«^Øðd≳Åp¬O m{ ‡ÚÜù yÚ¬o,›.¨†Òày  ÆðÆnSkm*I… ®]N!5-#¡Ô¥Ãpõ®Ó:~ŠáØÅ’/0ËÆ.í×õ\iaI?S+Ì)FaȘŠñL¦ü[;ˬ9_Í<:‘û*Ž£ÈLÞ{=ÎXVrÁ…þ¥¥h:iÄé[K)#Òzm[pø¨WZnsq¼>®^-Wse¢Š+I€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Lí´l%¶Ów«râúâE½« Ôã„zt÷šÖ;Yí]x&.ÖWÊöˆÄñ—Ò{Âà´¸ûºúV“•òª›¹sÆ.ÄqKƒ©Û‡·2zÐz ÍˆÄÆŠõ:˜,OŠZDvçÏÙÑj8éÁpå’Skha™ÛRùŸtUîXÊxfÐÖ¨Aê®I÷žµkhÂ@÷U­›e{t®[«R»ñ=E’–9i+Ú¶Cd€ò©Í´ @*J‘ Ž“RP 8A#=Jêe!B<4ëh ƒ½8Ô‰†’¤êËXÈçqÖÛA¤¶"–ÒÁ€jZYB“=jèFæYTqÜÅ»sÔö­S¨¨mø¬Zu*jZi¥ÔÃZRè6mÄì÷Õ&1`'HŠØT´‚%Q?m@¼RL€¢¬"Õ‡†«8Êèä¹÷)XcVE‹„–ÝAÕkp–ÓƒêOa] â—øæJÍzSŒX‰eÀ˜² ~ôóï·âŒ6ãK \CµëÌ:âß3`«S¦àq.#—ê“æ#jËJ³£,¯fvëPXÊ-þäzŽŠ¦ÉÓ9‹*aØË3¦é„9‘"`úÕÍtÏ2Õ´ (¢Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U^gÇð̹„¿‰â·M°Ã)ÔJŽçЧҤ۲&bWÖ˜m“·—϶à $©n-P$šáç9⽡â²Ã¶¸L\ß ©ÿè£É>½}ÜÔbxÆdíZõH½iX~\Cº™¶ø>øãß×Hʸ ¶f‹{vÚ BxªªTË¢Üîá8|iG›_~‹ûÈ™CÀì’ų IÄ¢7'ß[Ʀ­,HIu[QíÒ–PA¬Û¤Ü\•G…«¹12âk¤^…•iYêÁ7N¥i¤A®nwF¢œOMÉŽ&‹§>§¢°»Û|GbúÕĺÃè BÒd( Š“\³èѯÈ# ¸ZÕq…<«RT”Ó$‡Æºz˜MN*K©óÊÔÝ*Ž QE"°¢Š(¢Š(¢Š(¢ŠbþîÞÆÍÛ»§RÓ-$©kQ€ë@’$˜“\wµ^Ó±&q¦²¶GfÚþý`û]”KvƒúQÊŽûL@ÇûK¿Îλƒd¦ÞbÆTÕÎ"ê dq gÏSrfN°Àì;‹VB–½Üq[­ÅI=Mf­]GÃξ ‡æµJÚG·sNÉ9aœ1×uJ¸½¹Yvæá{©Õ“$“[êPh±*dÚÝ)$AI3ð§Ý}(úß}peQÊMËsÖ:i$¡±6Ñ$€$’&¬­ " Þ«íրΡÁ¤wäª$Õñj&IÁÍ´Z4àRÉ;ÔÖU¿J nä!{š¼Ãž:¦›LɈ¤à®O‘ʲ„… ù¬œE8”ùU¹NkmBaS >QÓjD(€…÷)­;KrB_I‘Ökò˜RDG*‡9"œuÔ¥Å50ä«’=¥KW4—]¸&«ÃÐN˜Þ™yõÞ‡7bØáõÐríR˜U¢g¶«5¤ªP­ºkl}èLLíZŽo¸Oä÷ußøÖD¼'gI¦7ôIºÅ `÷N¶«+ å7j™ñ¤ŸMöø×s®ôWq/¯4<›gR x€$dŸx®å]ª-ºi³ÉcUä–× (¢¬3Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@V·žó~•pgo®WÞºCL6AqÅžãBWNNÈ^x͸VS½¿x†™Nëq]‘ÔÿÏÀE¶`Ï™‹ò¾dqi·×6ÖG»e=6ê¯3ü6«ì7Äó6*¬Ó™Ð“t´éa<,£®üÖóáM²™Ð©©S\±= O mMeö fÊÙ J@Ut\m”tô¤<´´˜O@+–n¾èuÐc¢kIµá†äªO™ã›Ð‘l¹XB|ëa±¶K Ò0ë`Ê&¥L&š»‡QñKs‰‰Ägyc±V”F™­nüÌÕæ%pƒ +Š×qÄ5N!¬ÆÜ …5ã “Zžfjm–’Ÿ=ëhº~“Z¾b¹G³¬+zãâš=v I2«è݈³cÚ†9ƒ).w·–¨}}PH?¯HW™{ «¶¥ºŸÉî&Gï&½5]Î,Øxž?ŽC&6aEVã’QEQEQ\ÿ´NÒí2Þ$Î adö)ŠÜ¡E 0D4GÃú ùúMØ”!)Ë,UÙ´fÜÉ„e|!ìO¼nÝ–’Oˆî£äR|…pÇ1<ÛÚ›ësiÜ#-‡ ˜¶I)zá~’:Ùûê^•qLÅŠ7Œç[Óˆ\%Zš·ˆaö OSêd×IÃðöÛBÚ4¥<+LNo =Îå 0Ë=]eÛ±S—pK<:Ý»{[t!´ ³ÚZ„¢OÖëHi…DTû^60FàúÕt¡mljÄJzš®eÃT›Žñ %J!Cú^cî? Ôq²Z·ï¢bº¥õ².Ú Õ ò5«c¸¹iKJ!dâ4ì¯ZNJ½e£Ã¸„U£Qš^²e•¸Ðõ«d^%ÂÚ:V…šr®+n⟰ÖH2:ÕfUÌ·I{ÙnJ‚ÐaZŒMs¡VIå‘è sY Î¨§;ħ‘RðûÅAQµ‹ÊåU‡Ÿ 75W:wz‹sv®LUrª‘®8w&;urTdÌW/íSy«ØÚo.ekQ÷ÖÑâíÛ!zÖ&µžÉòâ»Aí#òÅón+Xqp~e;õ’=GCTS‹¯UD׉šÁaÝG¿C¼öM–ÆVȘn¦ÛMÂZ ¸(áNÔ~dÖ×@ŠôIYXùü›“» (¢˜‚Š( Š( Š+ ZP’¥¨$¤Ðh$kRÍyï ÁOpÈ]ýÙØ2Ljƒëåñ­Ìs9cw…ë‹ÏÉöÊ"ݼ5s>èª*b!Os~‡WÄkeÝcÇðŒ1W—­ Á! Ê•ÀäÖ´ÿi8x¹î­°Ûë†âC©@HûH5«áØ#mK…:Ö£©KY’Ië5oof„ - VgŠœ¼ªÇN&…?û%wèYÐ[*ðae=f'ï¦.{O²¶p°lD7;¬%$¶š ·P|3q‡¶à §bzŠ9õWbÏøüÒÍ|Í·.fÌOùºýµ¹ZW…cÞ“½^×ÅrÛ}÷´Z-V×)’‡YQJ“ñ7+gü[ijWéìÖ­ ßÄ™Ø/¤züúšº–*2v–ŒÇ‹á§ô^eõ;†]mæ’ãJ B„‚ .µP¢Š(¢Š(¢Š(¢Š(¢¹¦!Û‡gì\\ZÙb‹Ä®ÃhÊœJÏ’V“sí{2bm†ò¾X[iÙëó§IýÑÏÌTe8Çvi¥ƒ¯WËvÇ\m¤¸´¡#’LW;Í}°e\évn¹Šß ÁfÑ:ô™ÏÜL×:¼²Î™¥Ò¬ÉŽºÝºù´´–Ûˆ‚R‘5e„å\+ g»µ´BRçßXêãá #©×ÃpFÝë?’+±lùÚ`YE³Œ`L)` 6žñÈŽ ;}Ÿã?&ä–}¯òž"ó؆#2·®+Q÷Oð©ÊÂÒvBž UÆo|ˆJÒ8˜Þ²ÒÆV“ÔëÔÀáéCüVL»q†-šB J@qJe×ð0˜´iØqZƒ©N+ÍUqeo¸Ò*ô¥/C™R¤ ·¸Î`ÂÖJÖy&®ímÇ06¥±n„™#z•²G­¨¨£_æÀl)›—@AœïÒO _¹ï*“²Ð¢œ3HªÄ¢­êŽü(¨Õ½Û“"«.);W.¤C…ðØ£»Lˆ­_46j¥yVÝrˆZFz¾nÞÅÝdIÞ¹‰+ž‡ RÅѽÇî{j½ZYe›¬ IP€O¬•z¢¼õô=ÖèÌyAa»›„°Üˆ@’Gžêû+еéð0ÉB(ñ§síA"D‰ò«t6qÖ¸^ôŠÊjpëáïq\'镞lÙ]•üT~5U:Š×ìÅZYËOºþΦòŒÇXnë@DùW(_mÙ}Ã#¼ õÖšŽçl:Ì£ »õÖšƒ¯g¥ý‹!…rVuýiÛí $ ¶Ž~¦/¾¹ã‚y®6®Ö°Âu ’?}4Ú»]ÃÁ„X\B±Qx‰®Œ¿ôQ±Öq4[(ªBN½Ç¡®Ú~ ¬3V)fˆmFV Sø—l–l´£ù.ñãäÚ’H­[íMœnÑL~Ju‰ªáÔ¤OÂk5HN¶ª%ôj¬+ó°ÜÏj»pÚÜÒb Š˜Îh·iÎíÇRSÓzàهĺR¬¬]q'qݹ¨²µûœs3–ûÁ…ÜéÕ¦wæ&>Tã…¬úãÄh%vÏVáù•´Cº“èklÂsNÄ:÷׉°ü휬ÜÈ.@PkhÁ»VÅ­Ö Î|Ú‡%&¥,5xj‘5ÂVÒOÝ?èö•–2•$àŠ1ÉÔ¥ëË?m ³ÑmxØþ“ ­Ã í—y¤÷¯”ýt(\ʱÞ/؃Ãaæï /sº\\AJÁTw\IL\‹ü¯eÈL^§}¸;R]ís):o y‹®ûŽ1êuÖ‘¨…l&k^ÆñvíšWŒ|ë™c]±áL´¾æéD”t$’fµ<6Œù/ 8î—lÐnÞbo†Q¦@!ˆÔ­æ6ã‘DiÔªíË]z8x朑·¡üOìµÃ°[{t¶ÖþêµjÍ(; Ϻ«ìsvVtã1aN€\¤}æ®ì/lïF«[»gÇRÛ©WÜj0Œ̶­j‹t ÛøDŸp©ŒÚ•$xf¤°ÄøŒGœŠ°a„…i3—Wb©6ºº$zÒ]HSp¤•vã))ˆøÔ †ÂIéMÆÅp¯™šõã"f&+ZÌ8r/-ÖÛ­…¡C˜â·{–I• «»·JDÒ®b³Ô…ÎÆfi]›æüS+f+l¯‰ê ¸V‹GÖiG„“åå]è×θb\µ76„¢á’i}R¡¸®§Ù–<¬Å”,ïÝÙý:ÓNÇá"µá*¹,¯trxÎ0’­MY?¹³QE¬á…Q@Q@Q@[ ʘu‹iM¶Ã`Õ@W,ahLÚDzVÀÓ}QKS'ŠâònîÏ[,kبjѸˆ“K^¨|*ɶ¨mµI 7©ª)¢™bšz2F¡Vvvà’*J›#j•jÐb¯§M"ŠØ—(ê)›u) ÔÛf{µ ¢¤[„„§Þ|«TaÔãÔ¬äìzaÇR­ˆ4<³*ªQ9 ;­Ä¡>•[x¢ `ÖT⌂v¨wO„k%Yécu6c+nwQ¨w…)I¥9x7U9Š"Ý…¸µ@ó\¬MUuèQ›‘_˜±f¬[Q*cÍyõþÐ-\½o EûVæáä¶·—¨¡”“j V7:A;l Ú˜íëµpËÎaXS¡w$BÔ ÷uçµ?s{r]uJqLj“¹¨`ð3®ÕJž_¹£…ºpó}b«éUrZµËY *bØÒlI`\]­m>”ÈïÁHR”V|P¤ øŒÁÚ¹–lú]v¿‹ 'F —›KÊZWifqHÞ²ñZLmºR“#ËjâÌØ¸²?G À¨˜’Ú´Ov.y•èÔÞÈóS¡M,ÒdüåÚzÍî¸s>jÅñD*áW!‹‹•)–œTÉm¹ÐßÖ €0 mZÒ®Qñ<â·ÔM6¢I$õ¬UÆ)n-kRÔ£*2i4Q@“çB”¥R‰÷šÅghçzÅ(¢€ [NºÑ–œZšTE"³áõ h–Þ)‰·üÞ#xÝyCøÔ–³&ahËxæ$ŸuÊÿ®Ou-s=)Ô ]ŠÃÑÖ" Ô{Eˤ¾¤ôæœÊ?øö$}÷*?y§†pÌÑ Æ.”<”©¨hcRR¡í$@ŠSláeCQºƒý­¨uо.·JŸROçf2¸ï<õOãJNhºål¡_×4ϲaZ€&è×M8›,+Çí‘ÇËþ/ض3Ä-ª/rZ3c‘§î]gó¥ˆZžH÷ŸÆ˜M–S:± @J“ l)>Í–¸.ßyh Á~×ì\ªWÿì¹1½šÕ&ñiŸx© ]جx±(==ú´‘;¸v?:¡¼´¸·âî@ÿÄ«…àwn’íÙÕ&£¶ú¸ïIëá«bš1Vñô(ý¢àmß»ý³G´ÜÿÞþÙ«…åˤ‚t;zi•`w"K¢jÍ{¹r+ÅåØ3íOÏþa¬ûmæÿʞߟ©kÁ®Ò'»T{©•a—iå³ò¤G#ö»Ÿôî|ë>Ûuþ™U“cr–•êIµ|OèÕ·¥1Y‹8…á‰wèˆ]ƒ=âgÕ´ŸáM›gÿÑ«åI,º Ô>˜øÄ¯GG¹ð§QŒâˆú·Ž £h¨Jmc”šÆ…~ɨ¸§¹%9ÇfZ7™1ÖÈ(ÄßzÕ–}Ívk grG€kY ŽDV*£N[ÅÇ^Y¿s®åŸ¤'h8*’ˆ­äð•>\W[ÉÿLKæ†ñü,¾Xˆ?¼EVð´ÿnŸÏ×UzNÒø¯Æ}ÉßI®Ï1õ%§ñ`òøCÆSó;×OÃñì#µá—ö×M¨H-,*¾KUÆ_͇/ܦãÆol\IZxòâ¡*–Wøÿèœ14¯â¾ÓþÏ©wn„ðxó¨ŽÉDÆ¡^-È¿Jã…© æ›6qÛ4@S­Ão]Ccî5èŽÎ{jÈ9Ô"ÞÃnÎùcþ§zCNÏŸ ¿ªMfžxy•ŽÅ ´¦¼ÔÙ3 âtÇvˆ*ßư5¨Ê…ÃI÷쯸Tœq!Dí26ªÉcü²<”Ÿþ²~ OãQÃ;VÐÝÄbª`úòŠ(®¹â‚Š( Š( Š(  |· šis4ò‰™&˜R’¥yÖvcs%F6¥7©F€€®)Ö“¦š‹i!m ¨S™kB}|ª3[*iõ8`OßWEXËQ· àq í"—ÞÌ*•AqA*Õ4%äùüéæ±Jä·^Aò‘ç½B}ÁmXzâAL¦=AqFNñUNeôh÷ûñÖª¯Þ ÍH¸Y "ªqaDŽ+ yåW;j*ä{«€Ò šóçÒG´¿ÈxqÃ,œúà„ÏÕOíè}©ç[<³€\Þ\º™ª@>5á|ÑŽ_fl~ç¾Z”ãËð‚~¢zéX°¸oÕUÍ/*ü±£‰ý%<±ó2"MÅýÒÝujuÇ*RŒ•[•­ƒæùÀ€7 <š­KÖøe¸T¾FÃÊ«ˆÄq‹˜m·®;% &+Ш¹m±æeW'«,q|Ä·‚˜±l2Ϻš RŠ”T¢I<“[}g¸Ó .íLÚ$¤µ+ݯlr&^¶±FæåC”·Z¢¢fœ¥'vsfû´­Aä¨ÂH~ÔmöÓuÚ,ð¬—j”„`m¾FáO(¨üj}¦#—­F–rþˆVÄ09øÔ´#c„€OÓ‰·}E,¸u˜D$^ï:î©Ìv «ÁƒañÉ›d~/óªÝ¥2S†aИ)SM#Áê<·£@Ðóæ…ïàVÜíÅe É!GD ÜëÐéÍ îF‡B· Û¢~êq9®Ý V‡¸+ mÀ¥ øNà.•évs5–¦ð\?tÿÝ=|©ÆóE¸Î† 3 µA÷ôëKÂf(IrR…zÅ<Ø ¥Û/aÕMzYÆÝ”€Œ ÀhŸºžVqa`¥x^A ™´AãáG„zp¶w ‡JˆÚS ÔûKì •(»hòд’Óß]ý¬ïh.P?$`¨ ÞUfÐ=b²öw¶Q > R‰T¦Í¸å·ô o“³?g¶íwx­ƒ±£cÝžçŠUÞ7Ù˜»RÚ³yÁ§`Ado]¼ód ¶Æ ƒ¨jãØÛlT„gE)æ ”ˆÿ©6w£7¨‘ϘÇû1uðåÑy¤àŽàª`}QÇΘ»ÌªýÇ «…N„¡ˆ?ŸJê'80„ŸýÀÈQñMƒeGã†3»)úÙkIÜ‚pöÏð§uÝŽÇ2³Ä»,RBœ¹}IÖT”¼•%dvQì6û*}¾;Ù2T Д6êžå²¤Ææ`‰é&k£õlâÁV[Ë©öÚ3ðŠyòÄ­S,•@Ã[ÒHv¦¤—Võ*plwèÙj¯jx¾¤$$w%¥(ÄNÆ9˜­ÏÍE[k{~ñz)J”‡¤“Ô/*¡N}²mHÿØÌ²HÞ?'¶ ùÓŠÏö’“2¢‰Ü©[b}ÛSæ>ïóæ5nçF°íè»Þ-,Ý`­‚“*rÝÀü ;Uµ—h_FĒݾ/—ÒbTÃ~%5É›ÏX9i)9,˜Ü(áÈ$ý”â3Öã$åd¥gÄEƒÅßwùóž§f·ÎÿG’¢¦±¬¤’L™;üELg;v â{ÄcYL€tê!ÄWüõÀB\ȹb`Aöl({8à¯íy7-”ˆ:f,ïù?ϘïS¼³š{ xŒo&7ÝæGßO9ˆö&ó^c¼=Nì×ùVÍÞäÍöÿ®3ýêq»~ÄÔ¢Qq“‰O$]³ýêóòqü¤ÜÙî]2ž–ôÒ³JXRgùs:{³·ÛO™/äÿ>bn§¢œµìaM·òvƒÄݲ?⨋Â; }òyO]7íøë‚»™²¨ ³ì q¾¤°vøMEü¯ÙÃÊ)Ofø$ŽHB’ÛG2_Éþ|Âðõ;ËùS°G›RVæSÓÁŒI±ÿV½Ùß`Bû@ãÁеýêâ—X‡gK{4ÁàÀ³Ç^j+«ìÉBÉ݃f†µÜO±ÎÏ­L#°}jA´¬nzAü+_o²fä',¸’S/œ5yS²ÕAVr˜àŒAmßẩŒö[”´•±Š0$Ö‘vqinéC¬­"wqÖ·•äþÌtŒ;*˜öåGº¢¹ò ÉYeÌa…Ênæ>b¢ÝÁ#ŒbØ ¶‹†Î©ú¢yªw™u•iq'Ý]ªã³,ºâUì˜ýúÂTì+MQ⽕bãR°ìfÎõ)%ßßP°¶ŠØñŒ›™°Ô©WX;Ú¿xÐÖ#áZòÒ¤(¥I)#DCMËN­£);H%'êª<ÇZË®•¼]JÑ&@D€§•% R•¤Â’dZM :¯g]ºçLªÓx}åÚñ¬); {¥’¶Çôwã"½yôT¼°Î¸µæ|³¾·HE ¶üž.[íkY•:„¨©½Ú!:€Ô$ ŸÕe–qÜc,ãÖ˜îˆÜaØšõ±rÂô­>ðA ƒ±‚$U MO:VfÏ××å:NWLû EygèÓôª°ÍNÛe^Ñܴ±®ì%ŒX©-ZÞ)#päÀiÃ#À£ i:R}MW˜ÂŠ( Š( Š(  YNj$VYî*8XÕ°§ƒ° ×>:êÎû‹JÈ”J§X˜JX‰òàuex:<ê›nîã6æ-íÞQ°·Y ìµUZf ‡Þß>°¶SÎùÇ…#Ìš¹ËYIË.qMM4wK|)_…nÍ-›f½›HeBGJôpð£MB'ŒÄb§^«©-ßЦÁòM‹\ãw^Òèß¹A„yäÖÑjõ¥“ÞÂݦ4&?Æ«Ó+ZŠ•&Ÿ@Þ*äfÜ’·–µ)J2:ÒÒñÓ1 wêŸ!Ä3mfÓjÖ(ƒÏ•&çigR žj^á>±JJõ¤îÞ-[#t—P0Sj±jÙÝhPш­YÜ%’ ®í!`×Ω³Š^om(Qý)‚GÝO ¬BºÌØE¢Ë}ùZ‡:S5„gL» Ôê?¨kJ±Á/1÷ím[J\hAVßXO¼WJGÑë9-:“y„˜N¢;åHÙõ§É«Šë¹Z¼ïƒ+Nî:÷f”s¾´„-J ¡² Rñ¾Ãs^h.Ÿ¹Ã–Ù^Ѻ¥õðíT¿äà ­fæÈ‚¥êW¸i“ð©*S{!9EnË_Ï<'À§½?G5”ç,ÈuO*|“Tøg÷w··Vë»¶R­’C­…­µ¡FB~³pF®G”©ÓÙn9/°³þ¹ܡҚè—rqÍYx™N°=Q4÷ç†^ÓOoû)…V’¬ÂR¥&ï !1?§W_êÒeØùâë >çÕýÚ\¹öuܼo:e¤  Gí"MHg>åäý ¹Zßù,ÌgT?†øD«ôçmãöhOfôŸÃý"ãÿù£—>ÃRO©²œù—Êä¸÷?³I^xË‹Q:ÜH=’*ŠË²\ÏypX¶sqpJ@¸‡¼Rì—86êÛ6Öê(0J_Ió¥Ë—`λ—Ã9eµ « &}Ô±œ2ÉQ>ÐêAå"cŠÖÿÉFrÚ,™3ÇéÓøÖe9ÎcØÿnÆžIv ˹·';e=¥{qKç-%#MÒmZù&ÎÐäÔ|žAþ5"Ó±Ìïr‚¤X6#™yøÒÉ!æ]͘g\¸IÕz¿$Nô£›òÒ·A;•FçáZê»Ï€m‡4yÿ·Gã@ìS=‘¾Øÿ\ÆŒ² ú›çŽ]$¨âR7Í-¬ã—%7r£ÖÕ«ÿ‘\÷¤ŸÉÈŸ.õ?±\þxÃøº(´€Û0:¯ÀôŽ)ïÏ|bõ)#m…iÊìO??“Y>çÂ’®Å{@þjAŽaÑJÌ Àç< ÇewÈ;r9¥ ß—€ð^ ª"IãÒ´•v5ÚT~D'×¼H_c½¡&'YŸ'SøÑ¨XÞNkÀˆƒ~Ù”•P¼×–ÂMÓk:u½h'²>ЂJ¿7^÷wˆüi?ä›´Oÿ†. Z?5ý9¯m$7pÔqÊÂ3†¾«‹x‰P1\ûü”ö‰2¥ùÈ'ñ¦_ìÇ´D¹”ñ0=ŸºšM‰ètÔf¬-@“{n'¤Šq9PîØWƹ3ýŸgvS¹_@;ÿ0j2²nm@Ô¬¹Šÿʯð§’}„šz#² {ßMë`Ÿ%ŠmÌk )7Ì‘û¸ÑÊùœs—ñiòöG? OæÖdÿ˜qXH“ü‘;ÊV’%©Ø•Šádønå5ƒ‰áéþnåµuú¸ºð|m´…/ Ä €MºÀû©HÁ±ÅýL+TÚÝg•b; ±% 7 ž¤ê¥b6À›”@¡\˜eœÒ8,¦æOòg#ãµWÝÙbVÎ)76—l)'pãjIOÎ@íÍ=ß M¹#ÐóJö‹†÷Iã‰'zã™{¿ÃoPRòÖÑ#[j$‚=<«¯°âµmôn$I¥p$µ]·±QŽ´Î$Þ "1L1‡ÑzBU>r)¥È‡P€=zѰæ-Ù­‹ä¯ÄJ$Ïvöð#€Esì_İ—{»ûG3¨l}ƺøSîvéÅH[ì]Ûkæ¸i\¥i½(øÂh®…˜ò+.%wXœ ,(ýÆ´+«wí_S -§`¥B¥`¯N}þ“÷¹!«l¥Ÿž»ÄrÓiCWHH[ØrA€ë8Љ*JRA&¼ÇE}’°»µ¿±·¾±¹fêÒ夼Ãì¸Û¨P”­*)$AiêùÙôNúCÝöexÞVÍ.?y“n%$·0Çd¸Øä´I•¶:’´øµ%Ï¡¶v·ö6÷Ö7,ÝZ\´—˜}—Ûu •¥Ce$‚#b =EPEP‚!{t8¥Ww‚B†Ãî©–ËFÄ×.2LõÓ§e{¨*¤¶½)•q¨â¸P¡Ç¥Qbv3J9´ãËJä¥%éLªCZ€ƒ¨TWï`i“‹#C6Å‹×ZRN¡·­Sßâ[ÀPš‹ut  ªkx®&ÓED¸c«ZÇO €MÝ–÷xŠ’‚¢¡±­c0fVíZR”° UZžmάØÛ¹7 ÍyÇ´¾Ó¯qG]±Ã†É…:“Ï ¬Ð…LD²À߈©CO™Sÿdí—µ'žqÌ/ ¸Öê¼*ZLèÿÑrÎ܈b ïoãJW¾_SQ2¾ [#¿O+vЮG©õ­¨¬÷ó]ì68xÙn÷g‡âB¦2¦ihº.ÂÖâÊàÔÒY2¨W=7¦Tîä$Ó­Áçî­ ’ ž”²¢wü©Gˆ¥¤ÀÜoAи#`<éĺ&EFQ}õ†Ô#I’9Äþô`‘æi½ZRB6>tÊ$íæ&²§N‚6¦!(RŠÂ7ò“ÖŸÍ“‚²4„”’8šƒ¬S©A)žOJŸžóBu‡Q¦&†ô¥å[§Å=­/÷bÔ.ZD„éZ£è?Œu¯Hc}ÕµûΪÂé庄)›†Ð° l“öW›òçt1LfYK«jÔ„ÆÅå07ÿ˜®³‚çœçwdÊXq”6Ó)ÔâÛJNÛnx&¶a䲨ÏVæØæ¬Ã“î°w5X*îå½*qµ•!!J0w‰J«MÁû.wÛ½·Ç†ÖT]º‚I ð} $çlÙ~êíûµ:ã©HM¿‰07;tƒÏ­Bo:cm¦q´ÎÀõÜž}k}mZ)¨J×2Ô¢¦ï$n™‹.Yà·wX«—±¡/ ì‰Ln<÷;õª>ðÉÞ”U+ùÃ}!/†]HTÌÓC2ÝrlìÿØÿgNîí“³ÚÆÓjãfÚä8V<);{ê!pìx5H35ÐB€´³…l¡ÝsöМÇt£ÿT³ùlþ4ÓO±°°²X¹2wH$Ïô…a‡T‚˜ø¦EP#3\¥*þGh†ÿ£WùÔ…ãw¶ ØS ƒ´©¥´Ï_J@“7¤IÆe ñ)—:A¤f%_¡aV}òR§]-¶ÂÔú¢<‰ëZEžl»²{¿¶³´mpDè?.js9çÔ²Úñ³ ÈÜûýG5½Å«èmï P1lQjžñm…ÆxÅÝp6”[•y÷š.Ç•ö7‹#v-R.Rª Q1Äÿ°d¸›GUl•wºLóÉ« õŠ‚AjØ‘¶Èãí§ÙϘ’?Iì¬((é ÆÝþ´·s¢Y9p-[©ZŠJ´kH T Þ=j+OcJu,¥MÀB“F9æ´Öû@ÄV°gn£;«ñ§[Ï×ÛYÛÁõWO+\’v7%Ücܸ›6Ô²‘Á÷êà qç[Y} ,.#LG…;|É­öïþéoÎþ%T†óëð5Y³ëãUEÅkÐÙp»¼UXšÙ¹m+oqõtè±ãV÷Ž¾Í¢Üe¢ó€xQZ´oÏÇÇþäÉóñþÊZ3óÿ­bשÖwû)8‘Œ\{›±kÖÖÒb‚¥¨Â4DI—Ú*á—ã ©Ö‚D©=G¥i)ÏŠÔ ±AÿX XÏDƒþoIÚ?…+2Vô"gœÇˆa˜êí˜yHoBT  VÃ…ßâáרÚ%×´ò²v=*…üãfêµ»ƒ°êˆúÊX3óâsËHHJpà‘ ͇ÙRzÅ+ Bøb—e#Mª”µ ¶DO§ÖùT‹,D¾§C¶ËgB jýj×zh‰.Oèü<éÜ?97}zÕ«6+8HD¸ØM,{ 1²6åÂJÂJt×3c.ìYÚ,2ËvæáÝ'JÝN¨Ð8ëVž×v+h’?aÌI-÷ö‹C­OvãN€¤Ï#ÔzT*BR‘¯Zªf–ß lq6mœW²8ýà ³]ÂZqeKeH<ÏZÑŽiƳwrïfåo€ÃaJ -(Ðz×BÂí·Nëï\<ëÎ…-ÁäO—¥T«cßäwfÔ¹Þ›^ù=ÙXàùǤÕ1§5UþgUc0Ùžý5¶¬ŸsŽ\©ÝÓ)=õº!Z‰ñ ó©y{ºzáM(Â[RÀmÅ Äû¾U—Ëêü (Ààp65›d3m«¸ÂÑZaE$|ëE¼6hâNIÍÊ;w1âJ¸þWpûmFÅ{É1ÖiŽÖËÿ›¶K³Z‚®J-À*ØñÇOº‡0æ.Í¥è/)%fftñU]«ÞÜ·‡áLÚ57>Ú‚ÓjL¡ÃÇ==j¸AžÌ¤å©æ¼äÒ?=¯ÁLà’OôGÛ]#m,à–©OFÅhyñÇWÚ0nBíŠJДÀI˜Ú·ß«…°€>CÖF–†œƒüiBd‡•$,cÒ›Z„ýûTD-Jèf¨$1ÖšQ<‰·4’I'rZwÔÜ)²4À>uðüe¢.€ôB]Ó$PµÈÞº“¨L¡PhÔk™0g°|Al(-l“ú'JcPüj®ºëéfîØÛß!.!\&+AÌYrçqn²;ÖwW‡õEPW©¾…¾þjßZöwœïÐÖ[z[®TÚ›Öâ–R※Z–¯‰Òtð™)òÍ€û1EyŸèEÛoç¦\5b}îgÃüÇQ ½³J@¹ñºÂ¤S¥^"PôÅQEhX…‚YQuŸjÜÒª½£»V…î:UÞrL9 óªñ«J.[ ¿d×­â³@ö8yø¹u=Ì{V”l°M`_JwVÕCp·™B¼$¥<Ž¢©®ñÜ”+R}ðEQú«8`Tö6×ïÒ¨USÞâ‰D¨ªµ ìÉÝ‚CœÖ•˜ó²JåÈç­S:훩`T ûÌ­¶Ñý$D×"Ͻ ³bËŠ7 6ßšÑ3—h—·nJŒ»Zä8¶'w‰Ü©û·T²NÂv£ ƒwyhŒ[íUøž6åí²íÒÒZmÀÖ¤¤ø| ‰€:ìO]¹©º„T ÏòÖNØ‚Oª ZqŒƒŠ n|*Ûì®olùiÍA´.AL-3Ôzù¸ÂñäYâwW®Y‡EÃ]Ùh*Ÿ­¶óñ$Ы\3rÎb1&v÷þ³‹àS¾"Ç9ó­IxþâÔµàŒ$% KIB%z‚¢7#º’Œcu‡™»Ã_!m) 8…¤–]RÁˆÜ ’$q±éOšG–nÁÊvâDëcFzþi×ï¬VÚJ™ä8IY½VÞQç\ÂßÁÓ„±dæ[ñ-eCĨ «Ž“ǃQqLS ¸ÃÕmi†&ЗCšõH)ß}1yÐæ¬ ¬évYŸ ¶i¤ FÉÀ—áÔ­Ô¥‰ô"6ò“çR‘›0¾ál¦îÁ)qµ4­ Ó!D–㎵˰\c ¶aÄâµ:¤" | Œò)õb9x[wÂÔã‰@B_Žºú³æÎ})çBÉêufs~m®âÁÎí¢*ZN¥QCQIäŸâ²Æk»–YuÜ-æÚ%BTBH;Nñ?ãX…í•åëëK&ÞÝEN6Ûm§Â²ýÙ*™âØs ²Î%cíHeehÒ#pbvçyøt¨©Ç±,u:ðÌØ"îmZðç»”$)*y#Zô§TGBAÛúGŠfË™a¶ý‹ÉB–F·DxŠãú±î5ÌEöWÔæóÝ┤¡2‚ßÕõŽŠÒc~jíÖëö}Í™e–”Cá(‚âuÖ;Áˆôó¥Óê,¯¹Ù-Ø6õµÃw{ki Òê$…6'ÔWõ«7¶r×t.-î´„¼˜@L”ŸSé\©w¹eoG°Üw)-&¤ŽõJe^Ÿ(õ¦°ÕeÐõÒ¯-nKeɶ "wÙ`™=>ïZ3¥Ð2¾çWmì<¯mÚÆŸJ¬´Ïµ±éúT×/CÙ]J-&Éö™RUªT¤iñ}æ¡Û*ÎÛeäõ¼ÊÒ¦Á?W~HÏ^Hë.Ã?S®ZÌ –úÔþ4â{‰‚ó^íb¹X»Â¯1&—un›kT[¬­ ˆ*T(¥>»À“½<Ò²êÞ|%«´´…Žì¢“¹1·ˆ§aåëKš»TŸs©2í?×ùT‹52ÅËNÓ¡µ…hR„䘢ðSlµaÝòR‘ݶf4Së2jUÙÊÉaÅÛ]b¹§ôm¨Á&c˜àn}x¨óVÖ+×îuƒoÝ­Õ%BÖT¤3¬0„µpJA(#PJˆž ‰®5›Ýï0»÷gPF— ƒŸT¯(ª—Ú®;?¾ióc؃¤ûž„g¸Š®µmÖŒËP·§*NnÍËJ!*qd'a¶•ó’o.ö‹—ÇúÃø×vú=-NeÆß}aj£Þ7LÂE¸Ú|·š|ÈôDVuNáR<>ú˜'‘½OO$¤¶¡ýë:VF”Lu¤êhŠ+‹m½$²¯#VêÑ¥2)눙Üü)*ƒÊŠç­Þ)¥h3¹Ž•—íÝ!)mj¬U€Lì“Äø¸¥i ¤'·PE‹hþôÖ•Û3ϲÆÛl­È}NÊG‰$Dë½t¤¥0"¹Go7KgËöíâÔ¢¢4ÊÑä}?æ)Fwv,ŒlpÜâú®3þ.ò”ewë_½[ÛÛY´#„öW7Ç^Î×îU«w¯ôÍt âBP‘' ùV~¥ìd+ šA>7<Ò@:ŽóˆV鎛 B™VäϾ°5­Í)IQ‰0k ;ò'­7­)‚ |iµNÄuëH+è®<ë%RLAŽ´ÊŽ¨“Á¦K›$§ãÍ/Z^AmrúT:zÓ+êzSkTpw£æ,-xuÑ€KJàúùUUuí½³ [Ž´ÒÑ%¸QÉ„óÇ^=kãbÃv݇›Ið8“熬˜±|¥š0ìˀݮÓÃß0âIŽR¨å*¥IáI$}\ì·;`ý¢d\77`jX´½A%§6[.$”­µ4¨äD±ò6½9ôí1k?\dä¿(¢Šç&ÙíÎÆ¬;ÆÁðŸ#·Ô Ç¡Z8¶‰IÜyâBY^Vzßûc™n1‹Ø!ÉRN•zW<Ìxlê ¡d@RvŸZê7JJ›žµC‹Z7p’•¦}k."—Tt°8‰EYœËxªÜZ­n\|¹­vï b÷$ûIrNðv¯GX`L­M¥rcz‘‹5omjHkBR6éUS¥«³e~#?,Oö§…')·V¢ã†)#aëZQApƒ¦`zšë?IüXÞç&¬R!»vÊ€õQÿ çx¿xËjÝ ñC×¥wp+ü)÷#Zµ°Gç#=óŠl=âJAßB oç°žœÖÛŒáîbÝ–dä6´µ¡ûôêXØx›üjnJ4›o±Ei(«ÉØÑ°æ,—xrà,š XXL ŸßÒ›Äí­Ù×Ü8•éQL…‚âP}@¯m²µúÛmÜY¸Påµ*bvâcÝɨÎåKľ´‹»e~·ˆjë5Ž8ª.WS1þ»å~`…ax+Ï´Ûº[ @Õ¬$! Q$‘¨û§ÒR¼&ÁÜaûo˶a”²EÂQQÛŸ?*ÙØì—u„:1L-)Z5ø”¸uÓâG›2>3—n ]CiqkbJ@QPÁŸ ¶ÛκÒö6ÆIꘛ¬³jÅ’V?iß­•¼ ¤íÆçc¨ñü1i—™u´)ü^ÊÝ`¨:…,€Rb‹xùÕgäÌH¶µ›7å …€“¨™Žx#~’<éVö×á…!8[Žê?\°­Ièb=ãçM5Øvd˼Ù¬9Û¶ñ6 i %¥F¥+R’B`ð õ©X^[nöÝ.ŒV͓܇KkWˆ¦ oÓMT[ÚÝÛ>ËËÃÔøYmI$S7A)›Ç’åÚ-“l5¨èIQ „Ÿ!·¯Z.» &^¯/0Û¬¥ÌfÑeä¯@hj)Dø˜õšªJ,ÿ'w…÷=·¾ÓÜèð÷qΩæj ?ýë)ò˜e&×a¤;#HŽ|« ‘Ö2 ¸ëKVê:A é5™&`Ïœeeµ¥cJ”ž5&G˲šÀ¥#qÍaû‡Ü¸x¼éJ–¡¼ $€mIJÔ8Ú°óéåIø4î;[uECbIØ^”èpŸuE·qm8Ú´¬}SÌS­¨Ž¤ÒcD¤,Ìý´ó/÷`è ?®:ˆëQÚÔ¢¨žZZO‹ŠdGR G=)o¥Æ”´é+HPÌŽ‡šhìzÒTG˜ lCê&Lž:ÔU;mOÆÒÁN–]ZûÍ:»Ç ¶ME8Êtû/a—pÓªm+B ¤ÖŸ^œÔü9ßl±fè°¶K© йԙè}jWv#mGR**Û¡žxªÜ_¶Ä/{KŒÜ‹M­ w>ýêÈ qITâMUâxÍ®xã6·=Óm¥j} ”Sßµ.º £e·›qÐ)XRáÁ*‰ÛÜI$Õ”•DI#Ѝ³Ç,î.;g¹mEÎí'I ™Žœ\éÒFÒ|éH‡›Û¥q¾ÞHÏYY•””•ÕÀv4GUWí©ë_òŸ"í+-5l\–£^©QIßÔ…(nËÃÚ_{˜Ô¸¼»ZÅfº.$¿À®qó¶%;)Ù=k}ÅWz@ ©nLiN¨HŸJZW<’ lMF¤$ÌÈé48ép‚gh€qӤߚŒµ'iž”ìqµ0‹Î€ ÐÓ#y¤Óä(B’fD{Í Co:wøŒoåLÜ,©RNçš}D”í¸ûª+ÄD>\ëй¦æ9øÕfh²MÝ©¸Bu;ƒ<ù§øÕ‚†ûÒ´©³Îéû »« ë{ë—­níKÌ>Ë…4´™JÒ¡ºT¸"¦fiyÞ& oJ„ 3ºçÌUe >µö7œÏÝ–åÜÜ•2]Äl»ËjCh¸L¡ô$*N”º•¤I22y­¶¼gÿFþw}næÎî–ó!¡‹XøAC@)->’¢dI[%)6pÈ'fP¡z•(£»JÚ:§o:Ø ƒš®Äm»Â`Ç¥q*Ǫ=F¦WfV÷¥BfG˜ÜRISrG5”³Ý»¥$N”û‰Áõª¯š: ¤ÕˆŽ÷zá š«ÌwGÙ±"ýÎéE\NÕ®æ‹æÓfêÖ­´~1Y§7•¢÷ÞcÄݸ^¾Òq#;6¤¶>üjXgMšžRBTâ¾ÁÅVç‹Ãœq[ g]Òôû÷VÁ†¶³e¾¡;ûëÑa£’ŒW¢˜ó ”w:3Gô`ùÒµ"£Y¸Un“;NÉ ØÐ1RŸãNH€Ö˜&E-); BÁÞO”…€]%2‘?e(…iQŸJKh!Pf"€ò–§Ò&@ÔÆ§òEÈ2<M@¸)BÓ¢A;RíÔU‡Ü ßAÚŸAŠVb¶C{•’“[¡VŽÇ0'ý­‹c¾ +Hñ-Ÿ“ç¶À˜£”‡1Û$­ÍOi*‰‰Ú·»%½sØõ‚•…¹ˆºÞ7p”´”Én“«öL|g˜©Æ*Pi”Ô‚š´–…%íôëE¦.Ñy®õiB‚_Œ%D’ “öV÷KzÝëœzÅ·\‚ûe=ÑÕ¤¦f6ý•õÖ-®-ûܟܱ³imÉ qÙÜ9ØÄzsÍHSŽ=ˆ0†rÌ!%«T¤+Iö‰!sĈL„*¦¡{äE£¡ü²6“š1›kv¬Ãƒ]4mô¶À€L’}g¹I™±ìlj)›±ŽØÜ=¡ Û´”@Ò\<ù~ uŠ MÅ›¨qcqàÂÚ¼ $)!{¨ˆÜ‚’|Êi79e½èÃît¥’…[¨l\ß•LÈð‰÷šÓÚŪœc²$cCÂÐíêq†.S©V«îÀI*P#‰”‚O¨¨6™··„·zt•”èH '™Û­@ÆÝÃÕt‘†…†HYŸ™ûÀøUvõÏ¡,©›& Œcw8ƒVL^¥µÜ8”©e BŠ1Îäü 8œ¸õýÛëN'‡8êJVæ•%@¯m£ÓÝTx?³œNØ]¥Å°\Ä ¥'ÈFóWŒ ç\,ØÝÛ¶Žèw‹RŒaA@ã`v¡;î+[a¦òÍÂÖê[¿²sº /JÉ@;m¿#‰ôàÓVX×6]ú¸.­(iÀD¥-ë*ãŽ>ud›| Þ°ÃXUùuIHrw B¡Cq¶áQ×oZe)Á[i ¿g/eC€£¹;ýƒ‰¢Èz‘Àn_ÄWjÂÒ”¡ïxÿ0P•Dùø©Ël¹‰=ríºH-#Z–·!«¶®$jI>úqïÝ.\Þ‹ ܦÜ(…ÂA3ÇíH¨8±bÞñVøuÛ[iA*Ô@*ØŸ‘|&“In4Ø›‹ ‹lA6/ %òQá'`?ÚvŒ›(éKVê:T­ž 0Oñ÷V¾‡ÍÅê»yÅ•8’ë„ø¢@'ß±+óeZÎ#Š)ŸSŒn£é&|>ý^›‰& ´7e–/KKUųIqÆÒÞO…Sãpükk¼$¶¦Ãa²â”¥iH*|·AŸ-ªOq—šC‹â¯Z hP ¤,‡‡ž› Œû¨B°´Ý klÂúlI—R¥TR4ñ°$K­<¨3W‚Ý3‰±‡Ü:Òy°¹0™ÁÈü©Õ`8Š.˜¶BPóÏ6§¡RHç€v˜æ“о¼<0pÜbåöÞG{:ÈS`Ç’Dõ>uœ_HREõÌè‚éâ‘WÌùÔZH’l“so{…Ý >…[ºéåVVX2«Ä6‹R…j))N­·?~â©o/.nÊ\¹yN©¶‚O@8oÛ[[ ±.?pÖj¸·KcR^¥D%1·'~ƒ¤r6ŠI’»EsxòÒáWt‚ÒV\ X”%$Ì~ðú†Œ+~ÕMZ:ã+$%i LýÇäjÚážô^1â»6Ù*K…`÷Ž ¤< ø0*uÅÚPÝâÛÌ *îÞC,’ ·ßa¸*ñG¸£*‘£:ADÈùÔUVÔî]AÃ˧¶ö¦ÙqçYÔ%CeJc×TŠÕt¯Ôq"„¬E깊ô¯Ñì(dܤ+¿VÿùŠóJÖgQ“^›ú?ù•‚;{ÅüîþÈIF]Úð4•Çê|©B:PIò¤™ IQPÒIi.…8‚…¡¥$ò•n 8AÍ$ÀÚ¥p±€WêíÆæ„‚H¥n¥‰Ú>4&kϸ:§;Y¶@2¦l&‚¯¾½ɯ5öÔî¾Õñ"ÂÜ;Ÿü~4C«'sšåIV+j“035¼b*W´¶’9æ´ÜžÜbvëÙ^•µÞºTú€ØÌûª¥¹`ÂÕ *;ô¬$øe'¯4§7yäV5ißzb$•B¼öëIÔ ôÎý"’õH:и'ny¤•ANÔâÌ$A‘åM6¢yzÖ\'LM 0`ž7÷ÓkŽ Iô¬ë°£ÏXÀidŸZÊR½ô«LÄÅ%à ڒH‚v™"1ûf_±t¨»Þ¡:Ú L‚G ï¶ßuj¼Ü©µH* ßßçöV‰2ݽó̲¥­´ª¥§I#¤Šß~y½· ¯>ómY‹Ákx·]-¶†¥­gÉz÷ÚP+ê|g¯®]”c7y²ü«ß¼Û×¸Ž iur¶À S«e*\°ñ·N(ŠT|ë)XZH<Ó;±o}0ÍÈפª¸“’Lôê›q ¶•ê€dÒAÅ*åZ“ªv^nÕ~ê¦RIš ›E>= 6¨€G–ÕÉûSÄÞ²Ëw÷ IWvÊ„ïÁ®ŸÝ¥r„™æ¸_nw­§(b€¨x˜P‰êk2W’798Òlò­¨ïñõ’u¹'×zÝ­Ì(8§`i Ä›‘1½n6Ló¯SÐðÉßR—1ª\)ž+]tBÍ^ck%õ7ªG€gz%±+Å:VRÞRALÄÿ©¶Ê¼iGNE;=âà*ªT7?ÃÝLCa=êü €6»]޳´vS‚#Í"ÍcÀ¬üÅWg7ò6uÅp±²m®Üm?»&>ȨfñXÑʵ(Ï»6,!z¬“ç/Y÷ªÜ_ÉÔâwÞ¦TôcR}Ý)iæ Uò¤Z-¤Ý4§“,…b&S;×Q—dK0p‡›!mòUIFè‹•Žj•BOº@¬‡!Q×ß]Âr>%’ñLW-2óOaú£+ÈØ…O"kšHˆÛÐÅEèì(É1/¥“Áéë5$|Oê• ª­·ó©K$8žšLPK¡­Ùº‹|Ó†¸¶›wùBR:ul‰ ™òÈ­ÃxžÆ®Ü8Ьœk%/J•ja$úÄV“¥ Çðô¸ámí°¥¤IHÔ$ÖÛ€]ZÚöO®âÉ7¬ÛãÌåÓ©§'ïô5e7dÊäT,4Óöì ÓiqÝËÈ+·Ô„­K’IúÚ‰3>êq¤©wN2sSi¦Ôþ¤ÂŒ‚ r‘&'b&«ǰuw)F_m¤µ¸Ò ¢UGôFÜnO;Ôv±\%7oÞ« —^B“ÝŽíµ™=dít«.FÅÒÅå‹@áøör­a]ËiJ ŠÔa*‚6ñýÃ"›ÁžM½Æ&«ëgÕ vá úÉS„=?[ì>•ÊØ'v¤~EIÔ²½Õ¹ñ¨¥3ÐB Ç¡ŒKV›[¬9Å(é%M˜)TT ;í}"•¯ lPîzïÍ?¾UÞã…õáo!…) !± OƒIÏ2&|äô‚ÓeÃróîYÜÊHnر‘¾¹ž'Ý¿1܇€wÿ–ì…°l¾nï'N©>•¸)¬}vÌÜ—ðµ––4º§§” T¤BSðôÛO¼8{xºMš]šæ­†¨>§TU¹»ÊŠVÎ$¤! £¼ÚJ¤vl”Y‹LM¬u×%pÆxû ¡Hî‰Õã0P"Nâ#n£­<ʱw^möUf»Õ$[ÛIQV…!Jßr?[€'ã4v·˜²”ÕÀt8ÚÜQ•@©>dsP=iÌ%ì‹u\¹qp›¤2†Ð¢“¬¦AôÜϸzÔ¯ÛÿÁX¯Æ±G1 Ôºë 6¤ !ILn IQÚ7$š„•4¯¬ :O"­ÃyuËçžq÷š´  áV‘;‘ÎÕ·²·¾ X\—ÛIÖGS¹ ­¦M3i>ÔÁh%Å¥3É‘µn×nf4»wð|5²è†ô©_¦H@íº†æ6ëÒ´RÙ}¢µ”'P•@ãÖ¶¦†·•«Äe-¬)D•©ÅÊv#`Rñ÷T£°˜a÷x³®;si‡6³h°½aÉ÷ÊxÏ?¬6ª-¶+m†©ÛŒ‹ßÊBÕ©[j)Ÿª|]<©Ë7­J°ô5Š»if&á+t6­kú¨àøÜI$Òׇ`7¯%hÇÔ»§Ì’¦àk*VçìûiëÐzéô¿vûÉh4—]R ½Â–Ö£ÓsW68ú”Òñ¶ã–ØÓâ D ÕåÏÙëUš‡–”¸•%* $yÕnè’ÜïqN¤}#Îá;a3V«&? ò‘Æôp9H§2cNÂ’°@Ø}”ľLj Üj2Ô:¨Rß ò¨ä+¨54&*ATI3^¤ì9/õÃÞWö®Oá^YÈ1^«ì9!7XJIøÜ8…2ÇFp+ “XI'jÁÛ©¨ˆÜšLÒ‰óŠÁ>Tî+ Þ8æ”nM p<Åe)\htÇW–{dx«µ Ê ¢’Ý’’ê;´¦>Úõ0;æ+É«¼Ú&sp‰†ÔþÑ¡ü JÃ!õF¹“Ìâh b~U°_(‡A#~+_ÉÀþR@IÞ¯.*PÔFÿ:­_„DÇ]…!DªY3×Ê$é1@ê$ &iOܲÂH¡ÇœShú±÷Ö¡‰¸ýî&¦B‰ZR:Spfñ— PQJ§ÊåCPé°µ;,:âÎ啇“¨Ÿ@â¶uêIƒÈ¢à(êˆ"›_MÍ)J$ó3M¸|?… 0²c𠹕(ˆXYOÒ•ã=kxùR¯RÊŽ€Ï°û"¯ÜXüj“1iï›Ò 3ö ª¯¤@Ün×ú:a–,!ô»ƒ^ÝXÜK.›€QÊt>¼ Ú Ÿ›õï¯ú8.Wcxí¨Wé[Ì.8¡ä•[°þ…Ppº¶I@¤¿·SK+l|+bwmù¨°R|=+Zš’=6«‹5û‡ž,êDÁÕé½I$$DÀP‘V÷Êî*Pð,ï·ÛÉCíê@‘Óþy¬9sX¼º¤h™–öá›u”²ñTlkÉݳg;ŒRõü)SieÒ—¤òGO{wÁؼ´%o¼IRUóšòGÒƒ"Yà×cØU¯rÓ«ÑsGp¯[„„c]9ü¾&n%VrÃISùü?—’}½+#m'zÚìcÅéZ®ÿ]IÔ>©[fr q$“^„òIhkØÜwë žjžå0”ýµwŒ¤ûB¹:¨½ØQI°ëN/YJZR$‘°ÿÞ›l”’@ÇQR4¥L¨‚TñXÎÝLûâ˜ÑÒ¾Ž×ùQ·d¬í©m¤i?ÀÔ/¤M˜²í£oIHuM:6ç[H$üɨýˆß‹.Ö2ÛÏ.vä0£×Ç)éû¶¦ ³íŽFÝþnäû‚“ÿ S$ÔÓïsvdðÉvf“—×úž*Ò©2úå$zU¶¡Áš¸É-ÇN% €¥Þ‡e™¨'P6 ÿêHûÅh!DqÒºƒö‰Ø7weˆ^5n´‚Úž½Ñ«Ü<ªI&Š¤ÚØ¶F_¼Ê½šæâï[¥ÛĶ–Ї5AzÎޕˤÎþêÙó¶,ZmyË—í¡›Žõ°zqÁøV¦y©=*-ÝŽ+K‰2Ii§,Œ8¯Pj:Ƀ·­9`¢0v#åEÆkÏ8µ¢¦"áNß­<ÖÛƒ-öqœ-—/fµ*7‚êÁ3Zn.Cwq²V¼MtL˜•µeíìšI}«Ëe!«ÂUí °˜Ï&¥SD$rô²Ç~Þ…‚‚Hâ>ýª^#g`Ûm*Ù𥒵CP½$”üÀùŠØžEÏxìdö]Wxàq߬²dz'ËÆ éQmÐÒõ‹œ°µµÝƶĩ*îÓ´ìCæ5yš‹¦ôÔƒ‹m;‘îðœíö‹¥–TÂ\wÚÓ¥Mõw ¦s©>{CÃ0‹{·nÛV#nßp˜lÀý!'Ôùmp=jÓ-Þ»oecnpom(èQ :ŠO"“õ>ñ^UÎjætZ³N…߉äí¾Ü™1¶ß3VYl``àÜ gq[3¨CK™nBI'Ý|Ͼ‹<¶íËkX¿ÃQ¥IHJžÒTHÎ=ôõ£VN„¥ü¿|òû´ ¤BJÉ㙳óCmÛ¦ÍW¶Ø%Ál¶[ Rd£Vä“…qæzT¬ˆ]ˆ^[T¸„Þ0Ïy­JW†S£aÖ||GJIË/~™)¼¶0¨V¥@‚a&|É €|‡.á›°ú-°{ÅÝ¥p'JgH ’cÎAª×­Sl§wAÄ)A ,)¤¨×c¤GZZ 6ËK|£zëêd<Ò m¼U¸I Z`FêÝ#>±Qðܽsx\oWvëoH(%>¾!ósòš–½¥çÂQÞ8ò•D“÷Í:‹ÛЄ ¼ãˆDâÊ'Š4¥‹w¸Aq–’G|Z@Q *"<@GˆP m¾ß œÝÝö”>Ún !m©P NÀI1á:uW5™ }ô…çjãɶÏKئÆ–õ¥Gq¨°û‚—“¤§cç[MØ:$¤?:Ô±–ݵºMʼ&6+%E–W:tefX©f\nÄq\§é~WÈØ¢[@ZÐÖ¤Îð¤î#å]RÍAä%ÔiJu~¶çãT¹çEÞ tÊÐC(+VÀ )O¯؜âšqî|ôÁü7Ít’R~U·ØÞp+XÄ­ÿ&æ+«R’=žéHq°Q~±Y+K©3^†2¹ã'­Ä ¥Ó ÞzÕÚJ™Õé?mm9’¢HÖ¿pØ(Ztð<êHÎU²@Q“:ÿ"Ÿ!´)+HÔ#t«ÌyTP<@:’²R¯tù¯O?:`I±º~ÖòÖòÝZµq/ ˜ u}àW]ú\^1‹æ\¯[Gsˆ`¸‚<‹‹T|5×%´a¥)IKí‚[ܵ(ƒ•[fœÁùc&å|9ò}£EÅ®æIiKK“ý¥§Ü‘Qjöô4FiBQ#åÓâ‰ämWDÊ@ª¾½.ƒWeRg‰ÞÊÝ…| WgÄq¬B×>ål*ÚåÆl]¶d­¦àH#t â¡Dû mø–m¶ºÌ¸,Ý£ÉNË-º“¬ îDzU°–Ÿ2™ÆæðqKìa¬ù‚b›‹{FÜrßPݽ*$·:ˆ®@\0 ]C4gÜ´¬g/X­»ìU$\:¦ts±RŒF'ŠåZæ:T%¸SV⌙yRìúh_:eõ”ÃÖ³b¥{G¼íH™Ažÿ–õÐrq¶SYù·œp°mXye²uß ’" øŽßmhñ÷m*…ˆøù×BÈh,b™½‹gSŠÀÚy™AV¦&=Nþ[Ô¡Ô„´5kµaåj4]¡ ¸Ì)E´é¤ÌnHÓð“YÃ7Èö|Ï¥ò€”—©¤yûÆæçµN¾o7O§ó¹Xpë¹PI+A€®‰¨·‡}ª š/ =–˜u°°’’¡ÏÀØŒó+úþ{§²@rÎÏV(KaÅ$)ÐCk ‘ 3>¤UÛNÝ) ŒêÒRXRN°B‚D ò>ݧ’+0÷n×…µb0±pÞ·– ˜ 3>EIˆÜüªn ¦®í–Ëy`¦ñÄwiTÑ€Ï)Þàu&Ÿ@d<*ùë›u´î0¦ÒÉm¶ ºBt A“ÔLp'šu7Ù^ûŽ­V®²¥©Nǯ†8à.´wn-XgÀõ&Ù´·Þƒ:BTBŒIP=z{Érá‹$,¨e·”Ë¥ d¶µ–ŠLjßëûSÌú¿©Kâ­Ù-V¸“HCˆrVSÞJ€¶™ÛÔë »ÅmKŽ9ˆZjgWtÐ2°¤ DŽÃ¿;¼V¥ pwØèl¨%$à¿ÁGÒg¤TE7n}G ¹i*D4ˆ'BÆ’©ëG3Í Ói‰á¬©äÜZ\îeJ[Ž8‡ u0yói ã¸Ýµ£Ú¡,0¥E“+LŸ~¡óõ¥!XÏ”Œ>ø?ߨ¨¤]DáØÇÊ™K˜bBZö7Ô•8Þ²¤’R·$ ù#@Ú7R¸ÈéÇoRÞ–»´ˆÑ ;Ìéûk8–8þ R›«v4! JP„” D@VÜ‘·¦ÑK¹¶ÂݵdÙ³xÜ÷ï»âJN‰€êA÷ª×Úe ¥MÜ%ÅÊF€‚9HW_RG–f4‘›—™wù›T³ã'e)[ nzùÓE( …¤¨“·• ¥z”€¤ÁÚk¥@æ)0žb•;Š4§öÒO¾”„Ìî#¦â‹€¶•ââ§³ FÛT4¾`üÔ†u§Ã&EEÖB@")30:šI©¢DùyTF8&DùRTGRhÔLÇ’™â‹‚#\¨žj)5"äŽ*15$& äLW²»/„`©0c ±O~€ã^3ó÷º½¥Ùóa¼(ú¶Ö‰ù[7øÑ"ÐÙŠÉ&6¡ RU©&À4•,$l)‰ëµ@OMزR<…$¬t¤GZ5zSmì,FÓN£ÔïQõŸ*R <ЂèšÒ’“=Ex‡0>µþXp®1y>±Þ?Þ¯k„4¥¨ÀJ ‰÷øWˆ±.óò 0Cø“ÊD’ïU‰xI+“rª@eõò8©n+ÆA‘ÔoQ²ÈH³xƒÖ–I‘'ßPC #nf³¼ΚùQÖfhw¢Ùj™„ïUÙRÎÞâÆáÇ­Ò³Þ@Z“ xx§=v©wë)ÃÜ#'Šk&2§,-Û­Ç’T´@äî'áÅ€g/îùÀ )QåÍY¼HYÜyíUy|©Ë‡ÜVÓ&§¬ó¿=h ùâ‘3ÇßD<éþ´ RŒJmjß}½Õ’³§~|©§á òºƒ8ChH0²¢¦4A$Îõ]©$¥'ëFÔW^úÿ£‚Ý„ö7ŽÝ¥´‡ÜÌ.6µõRSnÁHø«ækÀµôkè ‚' ú;Ù_¥Ò³Œâ7WªOì¬[ÇÉ€~4ÑœRGZŽãÉk.©P1P”³¨…|ë-]Nšd ´­%'ž‘PoìÒûkJ’xßzR]RWÏSáE@«žžu[´–¥™\ѪظpëŲò¡²|$‰«LA->Ò:‚†Ä‰çŠo²KÈR€“ÍA°¼=׳¾xŸªxš£¦VjÒk2Üñ¿Ò‡-=þRe­ _¤“ÿ˜ÌEjkÆYr@$ ôwÒ§./ÊÞ°…)Û5÷âÈ ü ? óö¦ÊŽé2¥u03RÊ÷GšâT²Vmu6käw¶ht <­~é!B'­l¸iZ©³¹]~Ô(ƒó5¾Ç*[šEÊ4>´ÄA©ˆJT€¦R B”R²cQ÷yÖqfW!NH9¦me-ë"æ|BzDÐDu¶ݧZT5"H€A˜?yøR1$!*l¦ ”5)@í;mðßàE= m Þ…%ðw![GHŠvæ°Øð¿ÕéþºŽå–Gx'áy25CƒìèéWR7¡lNB‚«ªáMdì§”ð¼GÈßâ-—SaÅi1° ð€ó5Éço^•Ó±Üû6d<»ˆ`È/Y0mÞa+]ÓÖR>¬ZFéÍìO~Ë$ç|"ýx0ÜVÕ’òR–ÂÀ¸¤ƒÄÆÜ×$Ö²”‘>%WQì§-cX&'{‹cVk±µfÍÐCÄ,˜'`L3\®AßÒ£+_@a-JGžô»¾ü±’i—bLšÍ±‡g~”‰\«ÌJ›§·Ì™<ÖñÙsk¹ÇñÛD!ǽ§,©!I*Qî›:DuØÖŸ˜®(U¶´÷(p¸R’“ɉñ5¹vDÃnæ—˨$«/-M(,…%iBw}*pÜŒ¶ ^e⥭Ïbͬ•þŽÜY» §J§ëÎÃoÚ>[ŲÂ_júÝi¶X#Bœ¶ru(Á”Çìúr}*ñxÎ0†J‘ŒbHðÌ‹·<§Î´¤ç¬âŸÿRâ±×ùJ¿“VëùîE]–x-»Vì¸Å똛*«ZâQ¤iVÃ’ç¥DzäÜã7…çofC$‚‰HÒ8Ž©Hù @í:ÿRâ'Þìýôó=¡fÿÌ7F)’Jºtøü(¾»þ{§Ûó؉û*ͽ³›ueÔøGëju%GÒjFë¨KaóL¡°ƒÝ<©JŒ©’HJA“Ó­z}}™à'œ'>ëWÿì¦ÑÙ–—CˆÂ°„©(Bÿn–a¹Xó"BŠw‘±¬n#¥ziîË0¥¯ ÂÔµR»ÇÄ“ýjaÎÉòÿLÃátøþ4f+#Î,è×.(ï6Û¯ÙOÛ“Îñ^…‘` ßòM·Âùáü+#²L$Æßõq?»JR°)+\à!D/})N⻣ݘå¶nZ¶]¡Cë¥YQÀÿ³ÚOS†û7ÊN´Ë¨T¢ã_p¤âÂÐ \J:AŸ(¥­¯a)&pùò¬J0ߊí÷}—e‹t´»Žý”º56£Š" Ž ýjB{¤([âˆ#pEóF>i¨¦ßO°ó£Ï—ÜÔ”½>ÀÚGóØD+Ú¹<Ú\&~ªÚGɆ…r3Øvvïq±´rÁþ5Øòû/0Ëåö”Ê|­(Q„éJDÆßªjM‘¾m‹Xˆ¬)` AYàó RL|A¯!búS‚`„¢Ë«W¬º ?ôÕŸ°œ}K< Q†-]J©A^ìccMá'N8‰¤¡É?}DøY '¬õ¥'ë Ž•ƒ;O¾¤7:BŒP´áî˜éÖ£å[¦…»¶Ï©í&JBx­È敹$u&)y[º¼Âo1 nì¦Ü¢¥€A÷ÏÂÀN_Ûêp*ZÔ¨¸>¤Z¸…óN©q¸ùÒEG~•½dsr6úN­ú=èÅÐÍ0ò‡”µmL8­ÆûЛ;ñUx«„Ü”x@V!{T· Öú׿hºúÇØ6Œ ±\™…Œ8áÎ5‚ZªâÙMÔ‡ÖÒVî¤ÂËŠYTï$Í|Âì¯*\gžÑ° ¥nÿ9ß6Ë«e!Ki™—\ìt6¯ê××*ço… úTK’4zÔ·\lªr UÍqä{J~¤7^­‡"Úí)D)\q½D¸VÐ6*ˆó©@1Ö³·c[Šš±ispÚßš§º·×;z1Q•y¤è$š–ÃÅàÓ¤ð Gq“G["ÿzÒé°´­®""¼YžòÕÎLÎ.Ú8’-R”ÂúÇÀí^츴–ޤoÒ¸ÏÒ$/0åg^bØû}”¼ÁH`~?|U¸z¼ª—è÷0q*­Mµº<ÿ„Ü®û+š²Äíu IH);Ö§…ܨ·¥fhAçjÝpwÑ{l¸Ô‘»«SÉÍ~?b¥¶¨\Ö¶ØpF²¾í‰ÞætÌcÔ DqZ5‡¹háu3ÝÌ‘JåBíÒ”»$…& t¤ìHò"›Æ¦íÖ-û©QÀ>‡â)ü–îo¸:[BÖ ƒÐ978Ûwv{¥4V—•¸B½fv/˜ÆŠÜ/gSWsµQáÇô‚­ÁЉ=‡6çV¹1ãX Öp»å°•ýtlR¯x;|j¢vÞ€GŸÆ¤›ŽÄmseÆóÆfÅígyˆÿ'_×Cm¥Ç‘ŽG¥kZ¾~T*"gÖ›'~8¤ÝÁ+!/&AÜò(a^1Å̘˜ôša·¡È“± DlÃ&íSû==Õºö.á9æÍ÷¸;íÿº¿Â´Ìtü.$nkiìL‘Ú#g-_GØíJžäe°äþŒ$€|1½AsÃõohÉþ­Mt¨ƒ°ŠmQ½_£±ZzÕ…áÇÿskåXVâ ´“ú¥*ÛãçRÚ+hPÁ¶A86möé ?$`˜iX#ܳV>êM5öÝïr½ã‰B[PÔ@úæ¦`¸-…¶5dúà[7M¨xú…Š|“©;ǾŸ°WòÆÿŒƒþð§’6½ƒ7C»X‚1GNñá÷Õù„„Š×í ìÿç;÷»*˜÷VIhN+S W‹c¤˜4Æ­éĪ è4µ"c÷ëð×/=Ú‘!Ò@ ¨žõ×k¿¿ö Û6¶­¼êœ ’”4áBŠ€à5ªÑiiÀPò¤s¥I àj£9¡´dÌuHBA^þ¢•~ŒóS§fì-Ùv’Ô6ÇíÇõ?ᥣ´š£ÿæ+1ïÔ?…y€(Ç'qÖ€UÔ×~"Œµmý zœg¼ ¯«˜ðïö‘ü)æ³–UY”æ4Ïþ0¯*jõ©¶Š0} ý¿áVPàTêÊÙ™˜‰$zfþû¾ºfö×íԀӥÒÒ•ê  ’“¸…É5]ie—m˜·Ky’Ç[M©'Ó¤jeÆÔR'b¢´¨Ï:k”[+ $’¤@@!`¸ÖµxAWÛÅylDÕ,DèùÐë`°«…ç^ÎûXô5Ëxv%klÅæaà Y;j=žè ´¶ÉÜx7A­¢ÛÃÃIV'‡ëJV‹„ÌtÅy,“qX*÷|©s£µ¾¿è¾<;O7Óýž¹V+‡Æ#gþÝ-öDíyl}Ï'ñ¯¨¦ ŸT§b=õ„¨ÎÛT•Xvüö$¸[“ó}?ÙìQym§k–úÁøÐmd¥¡]`(ñÙqA2Fý oÝ)kí$­J ²}DIßêãFx¶CÃ9fÛÓýžˆÔ¤‰àq4Ó÷3qoná^·õwd ”ÊA$O¸•q~ßœwó›BZBl¤Á‰•¯ð­ó³û öFËŽºóéSº’¸¨(|ö1MÔWÊ·(žTèF³~chN'jåêìÐé/$¨¤€JcP©„ûéé“UìØ0Õò®Ò§K‹* )[*5<Α>î•0*H©$c•Û°Ûø…¥»Êiç †»Óá1§PNÆ ™ G;Š“gtÕË)zÝZÐNÇI™¬ƒ·¥W_a­^Ü÷Î\<ƒÝ„¦!0´¬(mÈRAøW,íúæç ³À­,/.Y•Ü8µ!Ò’²JI&#ª‰øÕøj/YR‹µÅ&¡›'h[˜?g9J»uÀ»u(* T5/tÏTxŽÛDŸ:óv:•-œ!¤é%8x$¾î8­ý`ÍJÅ1|Më7{½q·) }E*ô š…­mÞÙè0¤XÛÁ÷´“ükN;ðrPr¿QÒžurÂÈ÷xJwäÉ4Ê—¤ï#jX:pæÒ7‘Q×ã$NÑ5„´u·±úœ‡HÜ{ª­½ˆ€i]éJäºÐqó6©ÕÍIË8^*ý£ŽÚ4éo¬ 2ÊÛ|èt3½tl›°¬v×Ù”ñW£VÄh6ì»lá䔮¦»ÉãŽjÇ2bþ[Èm %JÙ)Ú*¡[ ™?}6µñ\¦d ©L(ÈÜ|©Ä«Á°¤–GSQÖ¡;RÖ©™Ê£\PòÊ*‚gaúÕJ£QÒI´ó/sÄþú‡@ÿ£¯*'ícÍ7ÈuŒ)eÂáJš¹¸%! øi7Ì#¬ïºâ_BœŽŒ›ØNtê#Ìçk•jJ¼$w)I=ÐB´’aK^ûÀí´È.1…W?Š&NäÔÛºRü Ié4¦l.JÁ_NEps¶}4`µc½û®¨…Áâ›x8 t ñ½KC/£ZSæ¤5n`H=I¨ØÒ)PÒÌ+»3÷TÌ>ReÏzU¢-&5A"…ÛtÆÄo)4Ðù±zIï MG¿³C¬)0"+ ¶ éÐJDñåRr¥DLmj·ªÔ®qìyG·®ÍNxöiÀØ"ÝGUó#ÿ\˾ö[¤¬ØŽkÛXÝ­½ã+aô‚…‰Øó^Bík)þhæU"Ý+uÑ*·Qáõ‘üEt08¦Ÿ._/èó\W ù±_a·m«ëY ‘µUbØ _A¹IÛŠªÊáµu,¼­)¦ºFÝ\øŠ’¤Ÿ3ç]k\áØç¬d‹›!iÜ9 ÏvúI®Õ£æ›Ë»ìX»v†Ò¤$6”6˜J@W¤®ì›83©xÙZ½+Ï9¶Û»ÄÝ”ÀÕÒ«z; Øy—zMZÎÜ}µW†§Ä|êÀ“Ô‘&ÇÛaYÏzh*²UL€£1éXR„ÒIÛšCŽ@Ú ´—W()1¾ôÃgÇ2$C®ø€Úcx¤[)& ëé@…ãj:‘ÎjÚ;*g=åwÊ¡+yÆ„¾-ö«VÆ7îº?Ưû,p7šrÓ¥diÅBcß§ìßïó©ÓÒB–Å–,Tq €£ÃªOBˆŠ§^/`•)µ¾’`&®s·âè.œïšçX‡ý~ãÿ1_}MË*H®*æÖ1[ Úå#Jü¥b¯ýé¯iuI:€#¦òisY,†ì›û(ÿ­3ý¡J–‡hhÿ\V–Ú™qdîˆç&š©s•ö.ç@bòÐ8•-öÈ`,oO¢îÝËöÖÛ‰Z C™\å “rx"ÇSxƒ@¤‡RwóMUéa´òØõ•ª‡·4&Lçþ“W%r+_´WùÁ¾?ŸXÿtÕÂ×Vyn$ÿpôÀ¥!BÔÆ Sî¡*„óQÓaõº*š©Î‹ÿؼpý=ÿÿƪ²™*7ܲîPÇ›iÔ­H°}* 36©Ö¥Mx’v<Â8扤ƒî£­{=,f°°jm©”‘ý÷Tš—f|QçµkÂJÕ ª¯ »àÊá¡`ŸÌÿÞ"µ›¡²?tUöZ?ÈÉæ~i1TWcNO>ÓøWÏx¬rq*«Ôôœ_%Ù‘äùÒIŠÈ‚ š¢Ö:QØadÍd© ¬t¦N›³NÛõ®ôyîWû8{Ÿk×6Q‘î®—ôvLæ|M³aïu5(-LÜAÿ…–ý´~—6´$ múò¥þ5¹åk\A6ëZ”Ê,­ÈÒæBµ¤§‚TTžxJÓûQHw5Ü. ·i;~ìÿÞp G»c Ã;¤iK 6TU ° ~ÏßTR©›4º ˆÊ?ñ´"·&ávøƒ8½Ûϼ¥[)!%[©ZÉ$€HHãaÅ[…oÈôª\8“· ,wij N©Ô PŸ’gúÕfÖº:Øóqvd•*5Äþ’N+‚´wÓnê¹óX»&¯w—5Ã>Î%YªÁ²çÔ±ãÊV£] ¦2#­ä9n Gr¢™‚v¥f©F>âcvÛeû­  F&PR” ˜ LùÆõœÑ¶e¿O! @ß 1ü+WžlOÈXuá'¬blpb¢¨I$«¥HZ´²€w!"*2–Iƒ>µÅ.°¤‚$Sdîy4â¦wOJoL«‰ qzu4µ­IdóÞÉNÆ !K•FÛzÐÉñM­ÏZjdzÒŠ÷zУsÌS„"™A ¥,‰вšh¬!jè&…1¸¨—ŽÉîÁØs@ -Ek*<“[Ç`ýŸÝv›ÚŽ•KÉ´yÞû} AbÕº½A* Q• :Ö€y­¾}{.{)d'ó¾0ÃIÄó+m®Ð‚¶lG‰Ĥ¸N² ¥-='nË6ì7onÒe¤„6Ú”$°t¥ÑEq“  çšœ‡LyWÛPÞÔÚHÓ¼íX(“ÅpR±ôY$õ$„¶ÏÕê)EHRFD•^·õ; È'ÈÓÌ©s©Fè+‰ÅîLh:¥ 'Lq=)öÊ[Ö“jðÛW>½iÒâàßn)§¡L¤ÛµˆËHI;éM<€P8‰RžHï’i‹„ÂÀÔ$‹#-ŠKöJ’N¹æ¹Om9yîZ¹¶J_@ÖÂÏê¬nÞ>5×ï>¾àDíZ¾f³ 86#Ê©•ãâDkAT‹‹êxŠÝå¥Å²âKo6­+IèFÕ¹å Ϋe¡›•ÊFÁF©{SÁÝÁ3ËkOvÝ‹Öît3õ’~3î‘Tl¼ºVã¨5èèÔÏ5Ôðõ©òê8>‡{F(‹‹Cݨ*G ×,ω7kp&$ÍWaXõ퉄8T“КÇ|~(©É_TTQ0Ñl™æŸû)²­K“Å^¦1dÖ €šARcΛr9MHC…Ñ é²àX0;íM%RO)õ¦œ:ð’ éAÕ’‘Í)%¢”éBáD¬êHÚ óÔÓ :dÄ?Ze _y*Û­LÅaL³¤вÈΡ¬S{AIkhÈêe?ªœAZ˜l“ÔÕ†WuÏem QÒÞ%néxÝBvß§ÝRŽäY·fÆ–¼ÓŠ¡´Ì]¹ö¨×7ÅRSˆÜÏxk£çGÜg6⺮5}Çø×;ÆÔUŠÜ(õTý•)-œm¦ä*(¬ˆ‘;Ьd›2ÅΤ•'@$GëÆ›*¶'ù§GúÁøVmÏè®G›cÿZi‘Í#•6_aÈbÍ u(W| •+r™è6©·Hnñä©à®ñ*éþ5æÈq:uD’LÔ†Ðèrt«c¸îjõ¢±W[žƒ±$_6zÚƒW)\“¸uPØ.`Ìˉßý]\ôª%«,Ž›k?Vv¥(ȦgƒYÕ Þ ÇÒ¨­fÌ<[àŠõ.€ß m´iLé'R·Ý]'jØuy ©ÎJœÿ`ÿþƒR‡šâécÌ=(ŠÅd õ©õ3™NñµL¶B‚Á‚:Tv¬m;u59¤›äÔ×KG;ÏÛó±EY[C`ËŠW±<àõ752êÒH„­caÓQ©9h—€ØI¢b§ô™ ã^ ŽÆÜJvëcÑñÙÿ†¬_rT´jó°­·•¬V:¾V6÷;|©ž¼šuF<¦‡ƒ=ËEµ8\ƒÞ$7ÛIöæ˜Þº¡øy®¥ôuç|a~VÍ'æ²…r¯«ó]oèð”…ãnj$éa$G¸jQÑ™qÒ½]ç6ûÜ{pƒáJGÉ´Öd[·¶ÔÊ®n€¤Çˆ”þ üGj™ŽþëZ¦5ª Ç øVÅo`–®ÅÊ]QܯB’ )JVAõJ=7ørxtÔñUšèÎf"³•8G±>ÕÛ'Vï²J‚ÀwB@ ‘;ìYøÓáG“ÍE²e,!ßœ[®)Ç $’zû„=:Lñ÷×n2±‰ÅKR.8«³h=N÷ÉTé@þsc &vÇ•qÞ.g°“2‹Rw÷?Æ»±QžHø×Ÿ;ew¼í ù2% ²w€W_ƒ+â.º"ªÚÌÒô¥Ë»f×% u û¤M1Œ,;Ž^87 ¹Y¹Ë6žÕ˜-HmaK3$Y܆õ¯Î»Â¢fVOÛK‹Jø–[GÊZ>¯‚D lûÐê‰Q3I‘1Ö¹¥¦dG‚`V3Ö°³¼’(GÏŠÀP™ó¬(|ÅÛŠÂ’A+ Ýb°­¸ØPÞ *ƒ@Fô…’Aóô¤—ó¤©a *&}}Ú#õ•ÄÔ#¹šqå…A’Tyòê¶È™_ι» ÊØüG{ºe*0”ìJ”£Ñ)HR‰è gCú*öF÷k¢!‹Äi˘V‹œYÉPïO…„”îáLˆJVAúr”€àV¡Øæ@Â;4ìÿʘCmáw—oI»¹)Ç” &TFÀ“ HØ Ü(¢Š(Ž>”Á*zT5¡JQðˆ™©—K—  ªTR²¥ªHçÖ¸Œ÷Ô›hmÖÓï)§Òä )ûk¥ÅÐüë#jƒF…¶¢PùRˆJ€ýèMÁ ð¨ó¾ôÚЄOwâá#§4â|EB`ý A­KE³‰€±àïÅ)Å—B€Ò#©òª´…•L‡_:XuzŠTt‘ÐÔnÊz¼Ý• 0`íZÞ.à<Ìš¿næTP±]&µüËh²ã$ƒÉ*©½.TüÖgí{)5™ðw’Ú›¶ ]»ŸÒŽ¡ãå^n!Û{§,¯Ò¦.š%½Kóª¿O#ÓÔqëŨ¼·›P… ˆ5ÆûoÉŠZ9dÉ. i¸ Y#õ¾umÀâ2\ÓOAD}SÐSÉ'NüÓ$<ýô›Í¬ÓTSØ*ÒÝ¥Âõ­.´£h¹ÿŸáQn ömöÞ§e¤¶ênmœ'ôš4¤$U&7ò’?äS‹ÔLܳќÏxµ :ô®#ú´ hF$ï¬}¶ìÑ‹7u‰›¤Z]‚¦Ñ¬) ð D k·âÎéðò…ÀR€-ÀSz¡%bšŠ±¶&açÄ~Ó|Ò=–ÐÄ\¸'Í£P°î5c7 1»P?´šC„¢A©¨³³;*ûHmC¶VÇŒE¯ŠMX&‡0ÜY 4–n›RÒ‘ Ryʬb¶mƒÜ°µ:¡L$U1°j`_ÛüI <"ö×⸫¤ºj'¤°ÕêçÍm‘þήõ·JÔ0¬_ ,ÚF#i¨‰ò`Ö¯Æ'b¥@¾¶>ç“øÕs„¯k 4‘b“ÔÈT˜5 7L©pʧˆq'øÓ­º…ª’O¡š†W}‡²$êÓ´ûª¯8Y?æ}éÛú¦ë1•kYÌEx.<—Ðç³ûÔØ ODi=e$Ï‘§ ¦G¡çÔ‚>F–â’à+Ò¡ ñ¦Ç£²O•z˜ÈÌÇ *„ó[.Y³jÿ0aÖ7(ïyä¡`Û­kv]æÆ<ëmÈßþoÂ|B} }ƺøi[ RI³5_:GLµÉ¹zËÄÚ]kR¹/˜ŸZ‰å\¨…'ÚºC®*Žü¢@G”VÅ‹—vÛ) um¨'P  zW7J¬_¿Ä×{l—%M(,äL ðRŒ+K=[·ñ7F´è_•,·ßOèÚ‡fùuA0íðÔ$~”qòõªW²ÎFB”‡1kÆÔ“ʺ36ÛM¥$·¤26 øWÅšÆn‹++*Iî•ÌAoJ«•Nï6Ÿ6hXšÉ+I›r®(…¹c‹^º”ANße öw€«‰ßÁè÷ùÔÎÉ™»´Âoý­§QP)*AN­”O>ñJºXR>¼mÆÅ …6úû°ý]u´ˆã²ìL†/v¦u¢ZäK<#+*í›LE×ý­HÔ§[%:€ˆýãS/[}ü˜k=÷v•ië±Ü|«Ifîõ眰fÝå¸vI)2¯ãVC$›·©Ÿ¬ÒŒ™Ñï,ú® ®{õ-DiâzTÝw >ë˽:V PSû0?£¿¾i‹Ym‹vÜ:”†ÀQó T”©û ã]ûhd~•ņ°òia3NšÕï®ä%7Ý+›.v¥X…¤Ýé$w’G¼˜øTÏjY?U'ÖjŸ mËl;»[¯HðéN™Û“O<§5³Ý’•¿HÒxøÅjƒÍÈ”ã~¥ºWì§Î¹ækìñÌ{1Ýâ¿•’Ç~ C}É:a s;ñ[ch½(·mo!µ†d{ý}Õ*Í/6€ÊÜ’¤ÉŸ‡Â¯£Zt%š“³$Õô’8¾%ƒ\å,ÝajÕÕ»êqÜSP”‚¥s¿>½s«q/ z×Sía7gt)*Hîðõ.yÒ…¨˜ÿž•Ë-¿ŸG¾j’©,ÓweI+"c„ÉÜsY™â"I;ïJ߯Q!S‰¬·Õ4Jxb°IÜM óëÅ ˜ˆÚ±1¼mXRäm@0w˜¤ÂÉŽ($! ¨û¨I%)• ©«‚HŽçõ|½M:êƒ@)•»7ýï3éóò£ Ãîñ;®êÝj;­j;Ri6’»%Êo,UØÕ…¥Õýõ½³×Ww.¥–e²·ZŒ% HÝJ$€Ü“_K>‹]ˆá“eDÝ^°ÍÆnÄ”¯$+ºI2-Ú= j®¡$Â>‡Ù—³¼ŽýóÙƒMž(–ClbˆÃœsRA:Ïy­kJ׬ )BÐ2T¢+Øùo1`¹ŽÈ^`¸½ë<4¹Òb`އq±Þ£‘žÌ²­ ”¦¬ZÑE2¢Š(Šºÿx ž&74ÊÁH”'¯‹Ö–R”¢Dú™Qpw€!jtžÛç\[ô=ô#ØYT©IH“éåNÈRÏHÒ8¦ÛmJN§€ .µ‚dÆÂ¢Ë£-lJ '¤+ Bu{”+ ÙIñt’“¡À®AéPh¶úXX˜FñçÖ›u%iÔ‘*:ÊHN㈬8à‰FÄ â²ýôÒ®Òê48H=i÷ T½ ÈWÈÔ+Æ@%z¼qP”m© %Ô¤Ç0З=¥êDñõÅR¾Å¶%l¦‘0B’G>žê¹¼¼u Pì¨ ¤ò*m÷¯÷­*à(mµT’¶†j´\–§í³E[­×ìRKdêˆúµË•o}…>¶Ö ÁSkN¤/ÊG_á^Å]ƒ5¥ÔÛ>B ióëLM…®Í¡¬‚{²"¡éZðøÉÓÒZ£…_w±æö’Ë‚-]î^ënê¶?º¾>=æ°¹mÕ2ûjaÔ줭0Em›$^Z8âPÒÒ´Ïi…|<ëTUÅå¨öK¶CÍ'†ÞNéýÓÊ~»«Bªº9U¨N“Õ5¥.x’ ˆž°`ÒJ”˜šJM³ƒù-Ê™Wú+ƒ·ÁccñßX{¾`§ÚR¾ª†éW¸Â®(8žk$íµ2lÄ4 }AøÐ!e@ŠH_H{é*‚Õ†”R±©Àý_ã@ZÚ›·Í²vR·Lõ­Ó%eûœ2íÛè^²Â•% R›&7`¤üGº´F^u‡’ëj!I2=+yÃ3ájÕ6Ø…¢T¨$xT FÄÓµÁnâ— 'S®8T¢ãÎØ2¢è‘±LBx£“ÍWªÓQ*U¶¤ž°”OÍ$VSžpÎUnø÷yÛ?Y«éµ,žˆ›•Ä6ÅâÁWûÖ¹ÊËv£V§p‰!hŸ“†*[yßLkzEHFxË*”©ç“åú:2¿Ë äkjI+ËøT(lQuv’>sKoÁÖÒƒØ#=æÚ{¼MÀ óõš1Ò¬šÎYd¦ âöóE<ÞlËRoS¿šhÈÇr¡ì/x…«Ò :qdö±M·€a*ÿá‰2®˜›$éø´7«ôæL²¥»f Á§ÿ.åwy¼µþ}(Ëéõas^üØÁ–á?“î´µZ«øŠuŒ™ƒ<«[Æ Hl­G ¥z1´µ 7–¿Ú¥‡òêÜnl¾ccçï¡)~\.»Lä| ƒÝ±ˆ·Öa¶ôz²œ‡f4”µˆž°-Áûž«bœ™Kö‡xÙ`MŒ$ƒ¡Û}ú@ŠiÍ×b¿ó J”&Á‚m;Uf–Œ„Û¨SnbXªZRN­Vwšwä@Ö§%‹=P‡’?uþ~Úy6í«r®8/S¸x{'³)m­Ïly¤Ì$9gx ßÿ*²×eøZÔ¶Õ‹4…&wSw(Ý-UøeÀe×Iž¹?("ïu'½ï*ühÍ>ì-Å-¿dÖW+ N?‡·¤Fï-1 ‹|úÕ¥‡cå+jâß7aM:…íá%˜ýdˆ©¨sDhű>W üibóLéÆñ)<þQöÕ±¯V*ÊR·Çýp¦ú#³ |§Rsí‰Ò‘‹³É>´”öqœ[yINr°t°8Ŷû~õ`_ãóÞk'ϼÿ ¯ñÕ V/zcDû*¼þ¯ÝA–ˆoå ÒËèdç;ITjt(ôuŸÌîÐØ]¶>‡åZ`\ÚŸwëÓ«½ÆH3‰>­õxÚB·ù}”ƒwŠýohäÌ›VϸýZå}ÿ=‡Ë¦#óG´´‰ÉTÛª~K¢ã(v’Ä]¶‚’Hd‰= *”¬GîïˆÛä+.â8²•⸷ÜFöMoöSM÷üö§LŠ2ÿi¦å²"C ‘¶ÜÏP}‹´Vßu [¶°ÙΉ25yùU˜Ä1`‚»0“Ïò&àõòóÞšUÍðZÔQ‡’³©SbÞæ"xæ6¥š}Ñ Beùü\­ ²¤ÁQîͦ²xÜr~œ öûjJ°†ÜF™)6Šù|éå½x:lR½Î¤Ú$J‚AñÚ”ÿòâäú¯aréôPí)µæiØŸa_ÈR[´/s J%@x¬œêbvé½JnÿhC~È“h‚ã­aÜOXÓªÒuI! “þõ¥Ý{ —%Íî~³¼vÖã `–ÖQ©,,¥[ă֘FeÎ RÇäÖI “©‡úT§± mÑÞ–\[®cÖ÷TBíú>²Á$̇OOEPå/Ä œAš°ü}ÇnsV+‡»l¬kWt¤´ k@Nãë±´×3µþxWdÇìo±ÜVÜ,¡ ïH/-egËÄNÕÌ1L!Xc§Z÷;ÎÿM·¨ÚKbd‘YܘéÍ ˜'Ò°T4sRA2:RJ4Ñ^úE8NüZÉ>´<ì+ q´ ˆZ¼¨T îÓ·óh>#ï<Žþ” JYC)Ô $™Ø9ò¤÷ýÑQl…8¡Â8ýß/>êS^ÓxE¥«GI2@çÞzük¢äÌ®ñ –¾mJ%BOñÿ¦­hÒW‘£†©^VŠ4ܱ–oq—‚ô©»`|K#î®ï{3CŒ7ß2«{.Hánûü…t|ÙÝŽÃJ¸e RG…¸ð§ñ5¾¦É†XЄ @qÌ«Vužº#Ö`pTðËEywþŒ§‡ÚÛ%¶BDDÔ|2ëɸ‚ñ¼ÿp⣽h‰C ?"Mn7Mþ±ÛÖª16B‘ç#z„^Wá:0Ñ«M\î]•çü7;àýë'¸¿buj£âm_㝾@Ý+Æùsw%ç›,y¢±n¥†¯Iúí¦:Ç? ö›è¹µjῪâB‡ÆºÔ*ó#sÅqÂÕʶ{ÑEq€áiK·> ׺&–Ó)lim’$ž¢”óÛƒ¥¥5jè VÚÈ2<¾5Ų¹ï”ÛBÊÂRP²|Å7Þ#}GJzÇ5›—F²°B‰<ôÒ Ü,ÎûÿZ‰(+îHqÀIÜ$N}‚¢[ ly¨!ÅÈäq½-)JÔÒèZô0c^Àoîi·Á[‡IéYy:ˆ•<üé :Q0R84¬ C.JP7=O!ÅêBÊ·QØúRn'TñIÖ’[(O>µBMÝX q•¬ #šÖÕÞZ\i2Që[í÷@©Q¨qäPâŒ4êÊDAÞj©BÏB¬÷Б„^2â ´¨‰Ò¦8ÛKPPkTÒYY(Qô©Lß>Ø)*$Næi[¹EJ}‹,w±ÄlÊemQê<«†güˆZÜ ‡ÚŸ¬6Rk¶þPSˆˆÅW^X.ù²’G‹¤T“qwކgN-ZJç”ñ,°°²m¯ôjð«üjÄ_áêSJK­õG…^ñÁø×¡s~H¸ qÛv&‘×Ò¹<ŒFÉõ2ëeHOê:Cí®†&òÈçâx]),ÔÝH¾ÓŸÏ["i³ Ÿ¼}”gÐ o:•Ï O„xßì«'ò‹56O*e\| ýôçä[“ªÛm&'Cé(?>>ÚßÍ]NCÁTýº”Ýã{9>³Í(¼é3"G•Z+,â¥:íÛnå´ÊÂÇÙPŸÂq& ;dú}è5%R©L¨TŽñc yÎBdi^ÒIÝñ¤*Ýô˜S.êšABÇ(PøT®ŠÜZè-Ní ”šÀu@ÒS¯¨P±ÂÕ·­1XÊÖT|©$Ï4°ó¿é}æh/,ó¤ûÐ? n³'Μö…Äiký’ Ö¿Ù'ð õ*"Md­GiO·vPg¸·Wï6+ ¹J‰&ÖÞIÆ€Ô¡úÇçJ:8Y¥÷íÜØù¯ûÕû½“¨`#Ú®~u‘spÏ,|idzR’¡ÉKǘ5žó 6—S×ùJ¹EÀB/nÓõnÖ4âq+ä™.j…9†•‚›[´§¨7)'ÿE^OŽÞðG’᧨ ü¯‰þX琉өÇq1ÅÛ»LÓcò1QŸo ¾¡4œ .ß×ôH?ñR¼Ó˜±i‘vôùë4ûYÚ/ŸÓYªÕ' Ô­7·ÚgÃ6ÉŸé(›õoo=“'ûôf`\7™q¿–ÜúB¹§Ó™ñÑpþ‘ª›3~ø‘¿òa·ûÔ/ÙdiÄ>ûxþ4ó>àl?ï>Þ÷¬šX͘òAýÚ×wi 0K$Ϥ ZRÄÿø³8–œþí}ÀØ×›ñ¹Ajé䀑ªW2¨ÜúO•dç<ŸkQþ¯@ZhSØ’£Çvð?ú+¦õùs;s¡ï—ótü@lž˜èØÜŸ•(g\pÌÜm³ZÑ ‰ü«c>Z]þåd¦@#±3Òzix€ÙFwÆÁ½IŽ%"”sÞ0“ƈ٭d² tŒKˆ™ W÷i*mÀ¶*Ô:,íïÚ‹¾Àlç=bçõš3ýÇçÎ+Ô3·ôkZCGµØl'wÀ¸¬)—çg¬ºå+°¹²«<âdÿ6×Á4ïˆi©ŽcŠÖ½šæélvÿ÷mïþõ'Ù®È'¼²þi¿ïS» ›#Ùß-©-¢gÄõ­^]?tâ}ej=i³nø@*~ÔoI#äiÏfd÷¸½¨Ÿ¬”!Å(»çJ÷1ÕÍÊéçF€4½yr® ¶–‡ÀʾáI7Œ Ÿf±a@S’â¾ßÙ@ e§Ÿ$ÛÛ©`r°6óÀ¥:”·üýÊT¨úŒ_5qòšÁrÿRY ~â…´É ÷°«Ü'%âW*I»‹d«„ýeŸ€ããUΤ`¯&[J…JÎÐW5òúèíÙ êáÝjøþ+cË'Å–…ºÚ™dž£s]S!vZV¤¸›M=KÏn~§Î»¦RÉ8v¥6wö”>êÁWÞ”ÑסÂrëUüŽeÙ¿dÍ0–ÝS:¥)>%WmÀ²Ý¦lnÈDºŸ\°Û퀔¼‡•\•‘ÃX²¶ï'vvhÒ²´UÂR€!*Ôž TwT@![Ç«‹ÐHJ`}õ ۦ̠õÞjLéB[*iÍ”­úíÅSb-¨Áx«´é+‘$ESbN…(’fx§ÐwÔÕsM²\·s© Åz?èýŽ+ìà }× Þe‡ T™AÓ'ÔÄ×›óá ­2 &ºïÐÝ/ Š-Ĩ6¬Ie²f n>5³õhàñè'II÷;Q]ÊžyK„'JŒ§Èß×Μ.ÆŸsQšÔTJ„Hòßü)ôƒ¡HïÛãç\Sßg@ûútTF秸S)" péôêi.édµ~Ò¿çjd…¹0=äïMÝ"*[IJ *yÊ£¥Í ‘2UÔóXh¨îUTá} o­0\¨qL<ùˆ'ΛºPJ|3¿ÛPVàO?*W¡Ç”·ÇSB @ëu5ÇÔágOñM\; ì&£rψb7k ÷cn“éT·,*$Ây5.ñjR#‚*¢ùÝ f6>µ ’VKAÀò Џµ2ë¡25 7Êiª@RG&ʤõ,ÐèÙSÍKbáAIñïÒ¨YyJ<ì:Ô¯lK[˜>¢„RÒlØš{PRU 7éZÖpʸN)láq„÷‘²ÀÜu8šR §žDÄ1e©'@Rä@sNñ¶¤&ö8Žiɯa×J øÐ:Åkwö Iâ½)„eW1VMÕð! >‘ºª«1öjÅÁ&ų¬˜ÒDïVF¼ãð oIoîV•JTAµ>‹üQ bHAÕGÊk¢cÙ°$ªÙa#õ€ÚµüöIåZa‹Œ´eráÉ«Á•èÇq”}µjýô%_x¥ ÅŒ»¶êýëVÏü5`á1 ü¨^âGÔ?*»™LÌðU—S?œXžòßryÕfÞÿ )x’\Âð·'ÎÞ>â)µY¯öM Ú‘ÊMIJŸb™a+w·?_/áGÜ—ܪAÅpåÒeë/ê8â!ËRzS µÛж2Ц¼ô¿¢Oå_[/û·k³íY}_üé?»{ø¦«Wn v¦Ú=EMåïõ2¥S5¤—²'­Ì¾®0üA¿uÒOÞšB†_<7Š'úíŸà)€Éýš ¹ò¨Þ=þ¥Ü‰¿Ú½‡J0ÃøŠO«H?ñ Oq‚ž/ïG¾Õ?ߦ¹òû)=‡ÿj•×r·JKx/¯öIXBŽØ»©ýëOÁF±ìqc(¼ÂÇÝ4ÊXTVKô¥›ÔkÙ÷þÅœ>Ïõq‹O‹nøi&Âߦ/b~ÿr«sÚ˜W¯Ê¤¥êW:-~ϸê¬[lJÉ^â±÷¦’lOêÝZ+ýh}5ܪŽå^f¥R·Oÿ¨³dïEÛŸsèüi*´y<–¹äãIîÈ=iÖÑC•‚4T¬ÿ>C~Ì÷’?¶ŸÆ²-^<%?Û?ÝÐÒK#ÈÔy… ùø†M³ãþÌŸvõg¸ÿ@çöM:Xô¤÷'Ê¥œƒ û?Ïg¸ÿ@ïö ÏqþßìWtªÇt¯:yˆrŸa=Ãÿè\þÉ£¸{ý ŸÙ4¾é~¿:Èig©ùÒÌ>Kì7Ü?þ…ÏìšÏ³¿þÏìšx2çí+çJKôRÿµK:&°²}¹{ýŸÙ4w/¢_öMOC/ðpXÓÈfäpë¿‹¬‘t8tåܨ-¸9B¾U”²êÌ%¥«Ü’jùתá×ÏõÍ8,o—±[çÞ³Px˜—Ç„Te±½1ïÿ†iæð«Å}d´Øþ›©ð™­ŽÓ.ßÜ(²âä´šÚp~Îq+’ íÊAÞHŠªXĶ4Sà©¿¿>§=c T;v“èÒ Û±à™U‡ÝHnÅû•7uP>Cñ®³€vooj»¢Uæ6®‘‚`øm“m¡›v°!;Š¢UêÏm…>…¥´s?S™å^Î1šHE£1%  &ºvZȘvÒVXKŽOÖPšÚ,ÔÒ~¯ ÛÊ‹ËòÀ)$=jœ‹y;šc·–*ËÐu‹dÛ64¤2Úà& ­}Üd-RÄH&v¡³L0í-M•wþ(“ *“5«œ@$ƒ'ž¦8ªÚ‡º‹–òì‹ß%DÈ?‡qr„¤ñÕeÝêô!>BjªâõZw_¸MA²Ô\ûj•°>ú©Än´¸  V9ˆ)$QUž(”-nFÒhDe%qŒÛˆ†ì]*X˜Ú½eôxÀîðÊ0‹Käh¸qõ¦ §Y*ƒê&+Í„äw{JÎÂúí* u.‡•M‚¿`ü«Á}PkÓëìR¡(Ò)‹ÎÇ-Ò‚PìuOõ;º8CÌ.Y‘ú´–í¨ ¯@^ö@ø$¶´«úµ=–<‡x OÖ*[X®X<5î™ÅE‹‡õM<Þòâk¹ÙöjÊŠK‹<ïÒ¶ŽYß¿cai’„þ‘Ùž ºÍ[ ŸC~!FŠñH昦`i¤À^¥‚FäŸ*èý•vš3³íby¡·°\ ¨ÍºÁMÓàqá?Q'}Îûq¸5è>ÎûÈÙ3»¸´ÂÑwˆ$ ¼ºý#’'pNÉäýP&º2RH‚¶RÂÆ:³ÏâøÄê,´ôEnXÀp¼·‚ÛaEª-­-›m æzŸSÍYÑEk8­ßVQE<¦› y‰!·ûØ &GP6†“*QÓˆ§8Òµúu®=Ïk•Ê ñ“ë°¤•$'uyµDy.6¥ÇXê+û€xSüê7D’d—?D°J¤ùt¤»qƒ×QÃJ6¥€ ŸA²ØÇ¸òÞ)“öyTu:Uãˆô¤(…$êàóHÕHµ!Ô•(íð=)«„¤øf?R]JRR¦V§"ïr1 '‘±¦Ü•pO¥:êTA˜ ï4¤¦L< Bjä;°Hæ¡” @ëSœ¦ç¥B}² ïEФí¡X뇽PÔ OÖW@ªÇÒ5ÌoÖjVèàQŽáÐØ,£½v5{l‰(@Ø(ü«^²ZJAæ¯ð÷ö)•È#zå‘EýÁÒ’½MÆÇΗn­J "#¥Ea%~’ÈÛsRJ$$ÆÜR'bŰŽvšu L„L¥B¡²¥))ÛuxеA'b<©‘±pÚÊ‘á€â–¥;li¶†Dlw$ÓÎ(Îé“D‚)\u·Á´y‘O‚dªÆžuI'aÐÔŽù¥^‡ÈФìNTÑ)Õ>´ïL¡ØQHùÅ4µÛcII÷;ûèNÌ‹¦¬J.¢&cšŽè O|i2Ù[“¸ŠB–D*)·qF•¿«¾Aij)“ÔmVO$¦g¥@}kP$"«Ÿ¡u8j]òUî¤ìjá·@Mjv·)¸e'IÜúÕŽˆw +YšŒ*=™9ÐOTlД~A¤%M”Ãnë@V°iÞø%³vfgÈ.RÒ4¨ÓJm*Q:€÷u¦KºÔI¨÷a+0v¥˜’¥®‚îwâ‘QÜ}µ«Hnµv¤˜1çQÝu(#~*IØ—-u1z¤”˜bµûå'ì«%¬¨ÁÓ«"F’¡Ö©Óp¶Pƒæ)ÖÝ(ññäÅqï©î.¥9å=DýôËÊZU„u>t†.´i#aÓñ¦nNéÜyô˜-ì>\@HxãÌÓ+¨øyTpàG %^´´-?YF¡bÕ î¢7^Àp 2û „Pê‚ ƒ'Ê£>zÌR$™j ØÏ­a.fO¾…¦­!~íÏSA7+è>µ‰Ñ:“Ò˜YØÉÜt¦’¥ ñçM¸ùշƆˆ1kðïçöT[µèa¾üS‹y ïÍC¹pÑb‰jA¸‚¨ßÒ¢Ú«KÁ2@©wAÞ¡ ïdìBÚ„v6,=cTsÅlØq žóÎùVŸ†9¸ßÝ[^êCP±©¤V4Gcd`‚€­àñR¼" ó±5—@‚Ÿaz¤¤ÉV‹ Ħ‡é ‚Ät§ÉRÖNÀ¦¢Ixâ–:A|èC±ojç„S<Šx9á ¨ªÛ'F€H2 T¤«bFâ›'–ÃWN°£:…>‡QTˆÜT[Ä4I„ä)®ÐI>••ìY{ij+ Dê$yÔnüP:Ó.=Ütó¦³È;mj$´-BûÍ€ùS$øÀ×΢°éÒ|üéIXQ"IWOZvÑë3¿ßM¼è ãšH*S%Dÿ@¹p!$t´œK›%8ظ·(Pé3åZÿxæx¹BIÚ®ð÷¤l`¶¢ã¶è¹eIÚz³UNŸTJ3Ë+2e¥á så5-d €EhÖ8‹–÷Éq:“²IäŠØ˜»“"*p–d)Ç)jíÁhiª†ëd‘Ôñ4‚uAªn®;•}iOÝR{ /±)OisAEaw) ñ¨Iâªî®ƒ¨%^/CÒ«^¿j1ºÐR-ž¼H !Q|ëRÍ7ÉïPµ*:M=wˆ¥-ÁVÝkE͸‹·e» 9]ÃËi)Ü•­Œš±’µEvY9Œ¥µýp1s˜ÚÒJ=k¢å/£eÄÛiü˘´h¨)M[$©JIäIˆ?];ú3öw`Ò‘|Ýî&¢© }ò }˜­ÐÂ>§§¥µ<°ömB¥-%n¬~À$ý•; ³Î¸ò™.XÄŸKæçrB½Ga^ÞËÝŸdÌ¥XV^ÃíÜîûIJ5ùÉ­‘›vHCL¡´ŽR^°±[˜jqi?*š)‘ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€<]¡¯¬A÷ÓÈhlxƒ¥Cl¯mDGŸ9ªèÈOôEqp›&¡µ¢U)1ÔÓw.¹ cÈTdÝ)$É߉"”—J†û¦‘%Üò‚ 'í§ á Hï¦ÔêcJ8êi—J 4™j³%‡Áþuõ­`ô‰HØE6µ¨«Ä6¤ ×¹„,£be4¥ÜjA@¦T©6‘'zI­Ç5))™ôŠa×4… 書¸ õ¨N¼¥ÌÅ$AÉ’;ÕF#ךŽë…J™ˆ4ÐqKŸ¾‚AéMøŠS„™ò¦Y*&)j!3;Žû€ÌèÜWÔ°Ã]pzñ[>øör˜’…ïå÷ÖˆÝÆ•¶œ"ãRO+l¨ÔR.‰µÚ\¢@'n•id½.DD «SiÓ;}SÅ[Ù]•6 Œ’`šMZèØC¡J3:må€QFiÆŠ¥îy÷Ô[›„¶²[t¤Ó#yX»¶y J“¹ƒçO5t¤( ÀMkí^ip‘ÁèM:íØ 6÷Ћd¬^]>4<óPÛ¹ 'ÅUVõáÓõ€Hý±ò «þÂû²+‰Æ±§‘ŠãÊ@ý!OèíüÂëÓW—”™í@ q]*4=Yæq¼BU¼1ØEVƒ˜QEQEQEQEQEQEQEQEQEQEQEQEQEQEQExŠÔë+qB‰ ØÆôQ\ާ·D…[’Ú¢¨(¦vš(¨ËrÈ ’™;Ò’`p(¢¢5¹”A'y¡Ð(¢’ÜLˆé:£¥0ñ (¢2ÂA$žj*‰ï¯4QQ}‚•'Lõ¢ŠhRx3Ö >¢QÍTˆ"3j%q5²å×T”• ÛåE–戗IZ’«'V‘<‰¢ŠOsDv,BÔdyS *wŠ(¨„w0—¡*ëJ®T'hš( “#¼êÂdŠã«$Fh¢›GеoM)jçΊ) Œ­Ålj:ßp(ÁâŠ(‰$2§Ü$I¨·n¬“¿êÑEH]JöXzAÞ¥=rï‡ÅE%±\÷":û¤™UT⎭L-*2"Š*/au(°«·’ ¶I4œBáÐI ¢Šœ ng³¤§íg*Y^!/[½‹0—P”©:ÆÄA¯¦m6†Ð”!!"Š+§CÊyN,ïXUQWœ°¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÿÙpymvpa2-2.2.0/doc/source/references.rst000066400000000000000000000577701202542755000200530ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- # # THIS IS A GENERATED FILE -- DO NOT EDIT! # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: references .. _chap_references: ********** References ********** This list aims to be a collection of literature, that is of particular interest in the context of multivariate pattern analysis. It includes all references cited throughout this manual, but also a number of additional manuscripts containing descriptions of interesting analysis methods or fruitful experiments. .. _Ban09: **Bandettini, P. A.** (2009). Seven topics in functional magnetic resonance imaging. *Journal of Integrative Neuroscience*, *8*, 371–403. URL: http://www.ncbi.nlm.nih.gov/pubmed/19938211 .. _CCK+11: **Carlin, J. D., Calder, A. J., Kriegeskorte, N., Nili, H. & Rowe, J. B.** (2011). A head view-invariant representation of gaze direction in anterior superior temporal sulcus. *Curr Biol*, *21*, 1817–21. DOI: http://dx.doi.org/10.1016/j.cub.2011.09.025 .. _CRK+11: **Carlin, J. D., Rowe, J. B., Kriegeskorte, N., Thompson, R. & Calder, A. J.** (2011). Direction-Sensitive Codes for Observed Head Turns in Human Superior Temporal Sulcus. *Cerebral Cortex*, **, . Keywords: :keyword:`pymvpa`, :keyword:`fMRI`, :keyword:`searchlight` DOI: http://dx.doi.org/10.1093/cercor/bhr061 URL: http://cercor.oxfordjournals.org/content/early/2011/06/27/cercor.bhr061.short .. _CPL+06: **Chen, X., Pereira, F., Lee, W., Strother, S. & Mitchell, T.** (2006). Exploring predictive and reproducible modeling with the single-subject FIAC dataset. *Human Brain Mapping*, *27*, 452–461. *This paper illustrates the necessity to consider the stability or reproducibility of a classifier's feature selection as at least equally important to it's generalization performance.* Keywords: :keyword:`feature selection`, :keyword:`feature selection stability` DOI: http://dx.doi.org/10.1002/hbm.20243 URL: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=16565951 .. _CSM+10: **Clithero, J. A., Smith, D. V., Carter, R. M. & Huettel, S. A.** (2010). Within- and cross-participant classifiers reveal different neural coding of information. *NeuroImage*. DOI: http://dx.doi.org/10.1016/j.neuroimage.2010.03.057 URL: http://www.ncbi.nlm.nih.gov/pubmed/20347995 .. _Coh94: **Cohen, J.** (1994). The earth is round (p< 0.05). *American Psychologist*, *49*, 997–1003. *Classical critic of null hypothesis significance testing* Keywords: :keyword:`hypothesis testing` URL: http://www.citeulike.org/user/mdreid/article/2643653 .. _CAS+10: **Cohen, J. R., Asarnow, R. F., Sabb, F. W., Bilder, R. M., Bookheimer, S. Y., Knowlton, B. J. & Poldrack, R. A.** (2010). Decoding developmental differences and individual variability in response inhibition through predictive analyses across individuals. *Frontiers in Human Neuroscience*, *4:47*. DOI: http://dx.doi.org/10.3389/fnhum.2010.00047 URL: http://www.ncbi.nlm.nih.gov/pubmed/20661296 .. _CGG+12: **Connolly, A. C., Guntupalli, J. S., Gors, J., Hanke, M., Halchenko, Y. O., Wu, Y., Abdi, H. & Haxby, J. V.** (2012). The Representation of Biological Classes in the Human Brain. *Journal of Neuroscience*, *32*, 2608-2618. DOI: http://dx.doi.org/10.1523/JNEUROSCI.5547-11.2012 URL: http://www.jneurosci.org/content/32/8/2608#aff-4 .. _Dem06: **DemÅ¡ar, J.** (2006). Statistical Comparisons of Classifiers over Multiple Data Sets. *Journal of Machine Learning Research*, *7*, 1–30. *This is a review of several classifier benchmark procedures.* URL: http://portal.acm.org/citation.cfm?id=1248548 .. _EHJ+04: **Efron, B., Trevor, H., Johnstone, I. & Tibshirani, R.** (2004). Least Angle Regression. *Annals of Statistics*, *32*, 407–499. Keywords: :keyword:`least angle regression`, :keyword:`LARS` DOI: http://dx.doi.org/10.1214/009053604000000067 .. _Fis25: **Fisher, R. A.** (1925). Statistical methods for research workers. Oliver and Boyd: Edinburgh. *One of the 20th century's most influential books on statistical methods, which coined the term 'Test of significance'.* Keywords: :keyword:`statistics`, :keyword:`hypothesis testing` URL: http://psychclassics.yorku.ca/Fisher/Methods/ .. _GF09: **Garcia, S. & Fourcaud-Trocmé, N.** (2009). OpenElectrophy: An Electrophysiological Data- and Analysis-Sharing Framework. *Front Neuroinformatics*, *3*, 14. DOI: http://dx.doi.org/10.3389/neuro.11.014.2009 URL: http://www.ncbi.nlm.nih.gov/pubmed/19521545 .. _GWC10: **Gilliam, T., Wilson, R. C. & Clark, J. A.** (2010). Scribe Identification in Medieval English Manuscripts. Proceedings of the International Conference on Pattern Recognition. URL: ftp://ftp.computer.org/press/outgoing/proceedings/juan/icpr10b/data/4109b880.pdf .. _GMS+12: **Gorlin, S., Meng, M., Sharma, J., Sugihara, H., Sur, M. & Sinha, P.** (2012). Imaging prior information in the brain. *Proceedings of the National Academy of Sciences*, *109*, 7935-7940. DOI: http://dx.doi.org/10.1073/pnas.1111224109 URL: http://www.pnas.org/content/109/20/7935.abstract .. _GE03: **Guyon, I. & Elisseeff, A.** (2003). An Introduction to Variable and Feature Selection. *Journal of Machine Learning*, *3*, 1157–1182. URL: http://www.jmlr.org/papers/v3/guyon03a.html .. _HHH+10: **Hanke, M., Halchenko, Y. O., Haxby, J. V. & Pollmann, S.** (2010). Statistical learning analysis in neuroscience: aiming for transparency. *Frontiers in Neuroscience*, *4*, 38–43. *Focused review article emphasizing the role of transparency to facilitate adoption and evaluation of statistical learning techniques in neuroimaging research.* DOI: http://dx.doi.org/10.3389/neuro.01.007.2010 .. _HHS+latest: **Hanke, M., Halchenko, Y. O., Sederberg, P. B. & Hughes, J. M.** The PyMVPA Manual. Available online at http://www.pymvpa.org/PyMVPA-Manual.pdf. .. _HHS+09a: **Hanke, M., Halchenko, Y. O., Sederberg, P. B., Hanson, S. J., Haxby, J. V. & Pollmann, S.** (2009). PyMVPA: A Python toolbox for multivariate pattern analysis of fMRI data. *Neuroinformatics*, *7*, 37–53. *Introduction into the analysis of fMRI data using PyMVPA.* Keywords: :keyword:`PyMVPA`, :keyword:`fMRI` DOI: http://dx.doi.org/10.1007/s12021-008-9041-y .. _HHS+09b: **Hanke, M., Halchenko, Y. O., Sederberg, P. B., Olivetti, E., Fründ, I., Rieger, J. W., Herrmann, C. S., Haxby, J. V., Hanson, S. J. & Pollmann, S.** (2009). PyMVPA: A Unifying Approach to the Analysis of Neuroscientific Data. *Frontiers in Neuroinformatics*, *3*, 3. *Demonstration of PyMVPA capabilities concerning multi-modal or modality-agnostic data analysis.* Keywords: :keyword:`PyMVPA`, :keyword:`fMRI`, :keyword:`EEG`, :keyword:`MEG`, :keyword:`extracellular recordings` DOI: http://dx.doi.org/10.3389/neuro.11.003.2009 .. _HH08: **Hanson, S. J. & Halchenko, Y. O.** (2008). Brain reading using full brain support vector machines for object recognition: there is no "face" identification area. *Neural Computation*, *20*, 486–503. Keywords: :keyword:`support vector machine`, :keyword:`SVM`, :keyword:`feature selection`, :keyword:`recursive feature elimination`, :keyword:`RFE` DOI: http://dx.doi.org/10.1162/neco.2007.09-06-340 .. _HMH04: **Hanson, S. J., Matsuka, T. & Haxby, J. V.** (2004). Combinatorial codes in ventral temporal lobe for object recognition: Haxby (2001) revisited: is there a "face" area?. *NeuroImage*, *23*, 156–166. DOI: http://dx.doi.org/10.1016/j.neuroimage.2004.05.020 .. _HTF09: **Hastie, T., Tibshirani, R. & Friedman, J. H.** (2009). The Elements of Statistical Learning: Data Mining, Inference, and Prediction. Springer: New York. *Excellent summary of virtually all techniques relevant to the field. A free PDF version of this book is available from the authors' website at http://www-stat.stanford.edu/%7Etibs/ElemStatLearn/* DOI: http://dx.doi.org/10.1007/b94608 URL: http://www-stat.stanford.edu/%7Etibs/ElemStatLearn/ .. _HGF+01: **Haxby, J. V., Gobbini, M. I., Furey, M. L., Ishai, A., Schouten, J. L. & Pietrini, P.** (2001). Distributed and overlapping representations of faces and objects in ventral temporal cortex. *Science*, *293*, 2425–2430. Keywords: :keyword:`split-correlation classifier` DOI: http://dx.doi.org/10.1126/science.1063736 .. _HGC+11: **Haxby, J. V., Guntupalli, J. S., Connolly, A. C., Halchenko, Y. O., Conroy, B. R., Gobbini, M. I., Hanke, M. & Ramadge, P. J.** (2011). A Common, High-Dimensional Model of the Representational Space in Human Ventral Temporal Cortex. *Neuron*, *72*, 404–416. DOI: http://dx.doi.org/10.1016/j.neuron.2011.08.026 URL: http://www.cell.com/neuron/abstract/S0896-6273%2811%2900781-1 .. _HR06: **Haynes, J. & Rees, G.** (2006). Decoding mental states from brain activity in humans. *Nature Reviews Neuroscience*, *7*, 523–534. *Review of decoding studies, emphasizing the importance of ethical issues concerning the privacy of personal thought.* DOI: http://dx.doi.org/10.1038/nrn1931 .. _HBL+12: **Hiroyuki, A., Brian, M., Li, N., Yumiko, S. & Massimo, P.** (2012). Decoding Semantics across fMRI sessions with Different Stimulus Modalities: A practical MVPA Study. *Frontiers in Neuroinformatics*, *6*. Keywords: :keyword:`pymvpa`, :keyword:`fmri` DOI: http://dx.doi.org/10.3389/fninf.2012.00024 URL: http://www.frontiersin.org/Neuroinformatics/10.3389/fninf.2012.00024/full .. _Ioa05: **Ioannidis, J. P. A.** (2005). Why most published research findings are false. *PLoS Med*, *2*, e124. *Simulation study speculating that it is more likely for a research claim to be false than true. Along the way the paper highlights aspects to keep in mind while assessing the 'scientific significance' of any given study, such as, viability, reproducibility, and results.* Keywords: :keyword:`hypothesis testing` DOI: http://dx.doi.org/10.1371/journal.pmed.0020124 .. _JP11: **Jimura, K. & Poldrack, R.** (2011). Analyses of regional-average activation and multivoxel pattern information tell complementary stories. *Neuropsychologia*. DOI: http://dx.doi.org/10.1016/j.neuropsychologia.2011.11.007 .. _JL09: **Jurica, P. & van Leeuwen, C.** (2009). OMPC: an open-source MATLAB-to-Python compiler. *Frontiers in Neuroinformatics*, *3*, 5. DOI: http://dx.doi.org/10.3389/neuro.11.005.2009 .. _JSW09: **Jäkel, F., Schölkopf, B. & Wichmann, F. A.** (2009). Does Cognitive Science Need Kernels?. *Trends in Cognitive Sciences*, *13*, 381–388. *A summary of the relationship of machine learning and cognitive science. Moreover it also points out the role of kernel-based methods in this context.* Keywords: :keyword:`kernel methods`, :keyword:`similarity` DOI: http://dx.doi.org/10.1016/j.tics.2009.06.002 URL: http://www.sciencedirect.com/science/article/B6VH9-4X4R9BC-1/2/e2e90008d0a8887878c72777462335fd .. _KT05: **Kamitani, Y. & Tong, F.** (2005). Decoding the visual and subjective contents of the human brain. *Nature Neuroscience*, *8*, 679–685. *One of the two studies showing the possibility to read out orientation information from visual cortex.* DOI: http://dx.doi.org/10.1038/nn1444 .. _KKO+11: **Kaunitz, L. N., Kamienkowski, J. E., Olivetti, E., Murphy, B., Avesani, P. & Melcher, D. P.** (2011). Intercepting the first pass: rapid categorization is suppressed for unseen stimuli. *Frontiers in Perception Science*, *2*, 198. Keywords: :keyword:`pymvpa`, :keyword:`eeg` DOI: http://dx.doi.org/10.3389/fpsyg.2011.00198 URL: http://www.frontiersin.org/perception_science/10.3389/fpsyg.2011.00198/full .. _KFS+09: **Kienzle, W., Franz, M. O., Schölkopf, B. & Wichmann, F. A.** (In press). Center-surround patterns emerge as optimal predictors for human saccade targets. *Journal of Vision*. *This paper offers an approach to make sense out of feature sensitivities of non-linear classifiers.* .. _KGB06: **Kriegeskorte, N., Goebel, R. & Bandettini, P. A.** (2006). Information-based functional brain mapping. *Proceedings of the National Academy of Sciences of the USA*, *103*, 3863–3868. *Paper introducing the searchlight algorithm.* Keywords: :keyword:`searchlight` DOI: http://dx.doi.org/10.1073/pnas.0600244103 .. _KMB08: **Kriegeskorte, N., Mur, M. & Bandettini, P. A.** (2008). Representational similarity analysis - connecting the branches of systems neuroscience. *Frontiers in Systems Neuroscience*, *2*, 4. DOI: http://dx.doi.org/10.3389/neuro.06.004.2008 .. _KCF+05: **Krishnapuram, B., Carin, L., Figueiredo, M. A. & Hartemink, A. J.** (2005). Sparse multinomial logistic regression: fast algorithms and generalization bounds. *IEEE Transactions on Pattern Analysis and Machine Intelligence*, *27*, 957–968. Keywords: :keyword:`sparse multinomial logistic regression`, :keyword:`SMLR` DOI: http://dx.doi.org/10.1109/TPAMI.2005.127 URL: http://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi?cmd=prlinks&dbfrom=pubmed&retmode=ref&id=15943426 .. _KWO11: **Kubilius, J., Wagemans, J. & Beeck, H. O. d.** (2011). Emergence of perceptual gestalts in the human visual cortex: The case of the configural superiority effect. *Psychological Science*, *in press*. Keywords: :keyword:`pymvpa`, :keyword:`fMRI` DOI: http://dx.doi.org/10.1177/0956797611417000 .. _LSC+05: **LaConte, S., Strother, S., Cherkassky, V., Anderson, J. & Hu, X.** (2005). Support vector machines for temporal classification of block design fMRI data. *NeuroImage*, *26*, 317–329. *Comprehensive evaluation of preprocessing options with respect to SVM-classifier (and others) performance on block-design fMRI data.* Keywords: :keyword:`SVM` DOI: http://dx.doi.org/10.1016/j.neuroimage.2005.01.048 .. _LaC10: **Laconte, S. M.** (2010). Decoding fMRI brain states in real-time. *Neuroimage*. DOI: http://dx.doi.org/10.1016/j.neuroimage.2010.06.052 URL: http://www.ncbi.nlm.nih.gov/pubmed/20600972 .. _LBB+98: **Lecun, Y., Bottou, L., Bengio, Y. & Haffner, P.** (1998). Gradient-based learning applied to document recognition. *Proceedings of the IEEE*, *86*, 2278–2324. *Paper introducing Modified NIST (MNIST) dataset for performance comparisons of character recognition performance across a variety of classifiers.* Keywords: :keyword:`handwritten character recognition`, :keyword:`multilayer neural networks`, :keyword:`MNIST`, :keyword:`statistical learning` DOI: http://dx.doi.org/10.1109/5.726791 .. _LB10: **Legge, D. & Badii, A.** (2010). An Application of Pattern Matching for the Adjustment of Quality of Service Metrics. The International Conference on Emerging Network Intelligence. .. _MHH10: **Manelis, A., Hanson, C. & Hanson, S. J.** (2010). Implicit memory for object locations depends on reactivation of encoding-related brain regions. *Human Brain Mapping*. Keywords: :keyword:`PyMVPA`, :keyword:`implicit memory`, :keyword:`fMRI` DOI: http://dx.doi.org/10.1002/hbm.20992 .. _MRH11: **Manelis, A., Reder, L. M. & Hanson, S. J.** (2011). Dynamic Changes In The Medial Temporal Lobe During Incidental Learning Of Object–Location Associations. *Cerebral Cortex*. Keywords: :keyword:`pymvpa`, :keyword:`fMRI` DOI: http://dx.doi.org/10.1093/cercor/bhr151 .. _MBL+10: **Margulies, D. S., Böttger, J., Long, X., Lv, Y., Kelly, C., Schäfer, A., Goldhahn, D., Abbushi, A., Milham, M. P., Lohmann, G. & Villringer, A.** (2010). Resting developments: a review of fMRI post-processing methodologies for spontaneous brain activity. *Magnetic Resonance Materials in Physics, Biology and Medicine*, *23*, 289–307. DOI: http://dx.doi.org/10.1007/s10334-010-0228-5 URL: http://www.ncbi.nlm.nih.gov/pubmed/20972883 .. _MKE+11: **Meyer, K., Kaplan, J. T., Essex, R., Damasio, H. & Damasio, A.** (2011). Seeing Touch Is Correlated with Content-Specific Activity in Primary Somatosensory Cortex. *Cerebral Cortex*. DOI: http://dx.doi.org/10.1093/cercor/bhq289 URL: http://www.ncbi.nlm.nih.gov/pubmed/21330469 .. _MKE10: **Meyer, K., Kaplan, J. T., Essex, R., Webber, C., Damasio, H. & Damasio, A.** (2010). Predicting visual stimuli based on activity in auditory cortices. *Nature Neuroscience*. DOI: http://dx.doi.org/10.1038/nn.2533 .. _MHN+04: **Mitchell, T., Hutchinson, R., Niculescu, R. S., Pereira, F., Wang, X., Just, M. & Newman, S.** (2004). Learning to Decode Cognitive States from Brain Images. *Machine Learning*, *57*, 145–175. DOI: http://dx.doi.org/10.1023/B:MACH.0000035475.85309.1b .. _MBK09: **Mur, M., Bandettini, P. A. & Kriegeskorte, N.** (2009). Revealing representational content with pattern-information fMRI–an introductory guide. *Social Cognitive and Affective Neuroscience*. DOI: http://dx.doi.org/10.1093/scan/nsn044 .. _NH02: **Nichols, T. E. & Holmes, A. P.** (2002). Nonparametric permutation tests for functional neuroimaging: a primer with examples. *Human Brain Mapping*, *15*, 1–25. *Overview of standard nonparametric randomization and permutation testing applied to neuroimaging data (e.g. fMRI)* DOI: http://dx.doi.org/10.1002/hbm.1058 .. _NPD+06: **Norman, K. A., Polyn, S. M., Detre, G. J. & Haxby, J. V.** (2006). Beyond mind-reading: multi-voxel pattern analysis of fMRI data. *Trends in Cognitive Science*, *10*, 424–430. DOI: http://dx.doi.org/10.1016/j.tics.2006.07.005 .. _OJA+05: **O'Toole, A. J., Jiang, F., Abdi, H. & Haxby, J. V.** (2005). Partially Distributed Representations of Objects and Faces in Ventral Temporal Cortex . *Journal of Cognitive Neuroscience*, *17*, 580–590. DOI: http://dx.doi.org/10.1162/0898929053467550 .. _OJA+07: **O'Toole, A. J., Jiang, F., Abdi, H., Penard, N., Dunlop, J. P. & Parent, M. A.** (2007). Theoretical, statistical, and practical perspectives on pattern-based classification approaches to the analysis of functional neuroimaging data. *Journal of Cognitive Neuroscience*, *19*, 1735–1752. DOI: http://dx.doi.org/10.1162/jocn.2007.19.11.1735 .. _OVG+10: **Olivetti, E., Veeramachaneni, S., Greiner, S. & Avesani, P.** (2010). Brain Connectivity Analysis by Reduction to Pair Classification. The 2nd IAPR International Workshop on Cognitive Information Processing. .. _PMB09: **Pereira, F., Mitchell, T. & Botvinick, M.** (2009). Machine learning classifiers and fMRI: A tutorial overview. *NeuroImage*, *45*, 199–209. DOI: http://dx.doi.org/10.1016/j.neuroimage.2008.11.007 URL: http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2892746/ .. _PSR11: **Pernet, C. R., Sajda, P. & Rousselet, G. A.** (2011). Single-trial analyses: why bother?. *Front Psychol*, *2*, 322. DOI: http://dx.doi.org/10.3389/fpsyg.2011.00322 .. _PP07: **Pessoa, L. & Padmala, S.** (2007). Decoding near-threshold perception of fear from distributed single-trial brain activation. *Cerebral Cortex*, *17*, 691–701. *Analysis of slow event-related fMRI data using patter classification techniques.* DOI: http://dx.doi.org/10.1093/cercor/bhk020 .. _RC12: **Raizada, R. D. & Connolly, A. C.** (In press). What makes different people's representations alike: neural similarity-space solves the problem of across-subject fMRI decoding. *Journal of Cognitive Neuroscience*. URL: http://raizadalab.org/publications.html .. _SMM+08: **Sato, J. R., Mourão-Miranda, J., Martin, M. d. G. M., Amaro, E., Morettin, P. A. & Brammer, M. J.** (2008). The impact of functional connectivity changes on support vector machines mapping of fMRI data. *Journal of Neuroscience Methods*, *172*, 94–104. *Discussion of possible scenarios where univariate and multivariate (SVM) sensitivity maps derived from the same dataset could differ. Including the case were univariate methods would assign a substantially larger score to some features.* Keywords: :keyword:`support vector machine`, :keyword:`SVM`, :keyword:`sensitivity` DOI: http://dx.doi.org/10.1016/j.jneumeth.2008.04.008 .. _SS01: **Scholkopf, B. & Smola, A.** (2001). Learning with Kernels: Support Vector Machines, Regularization. MIT Press: Cambridge, MA. *Good coverage of kernel methods and associated statistical learning aspects (e.g. error bounds)* Keywords: :keyword:`statistical learning`, :keyword:`kernel methods`, :keyword:`error estimation` .. _SSS+11: **Shackman, A. J., Salomons, T. V., Slagter, H. A., Fox, A. S., Winter, J. J. & Davidson, R. J.** (2011). The integration of negative affect, pain and cognitive control in the cingulate cortex. *Nature Reviews Neuroscience*, *12*, 154–167. DOI: http://dx.doi.org/10.1038/nrn2994 URL: http://www.ncbi.nlm.nih.gov/pubmed/21331082 .. _Shi10: **Shiffrin, R.** (2010). Perspectives on Modeling in Cognitive Science. *Topics in Cognitive Science*, *2*, 736–750. DOI: http://dx.doi.org/10.1111/j.1756-8765.2010.01092.x .. _SS09: **Spacek, M. & Swindale, N.** (2009). Python in Neuroscience. *The Neuromorphic Engineer*. DOI: http://dx.doi.org/10.2417/1200907.1682 .. _SET+09: **Sun, D., van Erp, T. G., Thompson, P. M., Bearden, C. E., Daley, M., Kushan, L., Hardt, M. E., Nuechterlein, K. H., Toga, A. W. & Cannon, T. D.** (2009). Elucidating an MRI-Based Neuroanatomic Biomarker for Psychosis: Classification Analysis Using Probabilistic Brain Atlas and Machine Learning Algorithms. *Biological Psychiatry*, *66*, 1055–1060. *First published study employing PyMVPA for MRI-based analysis of Psychosis.* Keywords: :keyword:`PyMVPA`, :keyword:`psychosis`, :keyword:`MRI` DOI: http://dx.doi.org/10.1016/j.biopsych.2009.07.019 .. _TRL09: **Trautmann, E., Ray, L. & Lever, J.** (2009). Development of an autonomous robot for ground penetrating radar surveys of polar ice. The 2009 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), 1685–1690. *Study using PyMVPA to perform immobilization detection to improve navigation reliability of an autonomous robot.* DOI: http://dx.doi.org/10.1109/IROS.2009.5354290 .. _Vap95: **Vapnik, V.** (1995). The Nature of Statistical Learning Theory. Springer: New York. Keywords: :keyword:`support vector machine`, :keyword:`SVM` .. _VS06: **Varma, S. & Simon, R.** (2006). Bias in error estimation when using cross-validation for model selection. *BMC Bioinformatics*, *7*, 91. *Demonstration of overfitting and introducing the bias in the error estimation using cross-validation on entire dataset for performing model selection.* Keywords: :keyword:`statistical learning`, :keyword:`model selection`, :keyword:`error estimation`, :keyword:`hypothesis testing` DOI: http://dx.doi.org/10.1186/1471-2105-7-91 URL: http://www.ncbi.nlm.nih.gov/pubmed/16504092 .. _WCW+07: **Wang, Z., Childress, A. R., Wang, J. & Detre, J. A.** (2007). Support vector machine learning-based fMRI data group analysis. *NeuroImage*, *36*, 1139–51. Keywords: :keyword:`support vector machine`, :keyword:`SVM`, :keyword:`group analysis` DOI: http://dx.doi.org/10.1016/j.neuroimage.2007.03.072 .. _WTB+10: **Woolgar, A., Thompson, R., Bor, D. & Duncan, J.** (2010). Multi-voxel coding of stimuli, rules, and responses in human frontoparietal cortex. *Neuroimage*. DOI: http://dx.doi.org/10.1016/j.neuroimage.2010.04.035 URL: http://www.ncbi.nlm.nih.gov/pubmed/20406690 .. _Wri09: **Wright, D.** (2009). Ten Statisticians and Their Impacts for Psychologists. *Perspectives on Psychological Science*, *4*, 587–597. *Historical excurse into the life of 10 prominent statisticians of XXth century and their scientific contributions.* Keywords: :keyword:`statistics`, :keyword:`hypothesis testing` DOI: http://dx.doi.org/10.1111/j.1745-6924.2009.01167.x .. _XLR2012: **Xu, H., Lorbert, A., Ramadge, P. J., Guntupalli, J. S. & Haxby, J. V.** (2012). Regularized hyperalignment of multi-set fMRI data. Proceedings of the 2012 IEEE Signal Processing Workshop. .. _ZH05: **Zou, H. & Hastie, T.** (2005). Regularization and variable selection via the elastic net. *Journal of the Royal Statistical Society Series B*, *67*, 301–320. Keywords: :keyword:`feature selection`, :keyword:`statistical learning` URL: http://www-stat.stanford.edu/%7Ehastie/Papers/B67.2%20(2005)%20301-320%20Zou%20%26%20Hastie.pdf pymvpa2-2.2.0/doc/source/release_notes_0.5.rst000066400000000000000000000047611202542755000211340ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: release notes .. _chap_release_notes_0.5: *************************** Release Notes -- PyMVPA 0.5 *************************** For The Impatient ================= * Datasets are no longer relatively static objects, but become flexible multi-purpose containers that can handle attributes for samples, feature, or whole datasets. There is some inital support for other datatypes than NumPy's `ndarrays`, e.g. sparse matrices. Critical API Changes ==================== * `.states` -> `.ca` (for conditional attributes). All attributes stored in collections (parameters for Classifiers in ``.params``, states in ``.ca``) should be accessed not at top level of the object but through a collection. * Dataset: behaves more like a NumPy array. No specialized Dataset classes, but constructors - MaskedDataset -> `dataset_wizard` - NiftiDataset -> `fmri_dataset` - ERNiftiDataset -> `fmri_dataset` + `eventrelated_dataset` (see :ref:`event-related analysis example `) * MRI volumes: 3,4D volumes (and coordinates) are exposed with following order of axes: t,x,y,z. Previously we followed a convention of t,z,y,x order of axis in volume data (to be consistent with PyNIfTI). * Masks (`mask_mapper`) - now ``[1,1,0]`` is not the same as ``[True, True, False]`` * We have weird (but consistent) conventions now - classes are CamelCased - factory functions (even for whatever might have been before a class) are in pythonic_style * `detrend` -> `poly_detrend` * ``perchunk=bool`` (in zscore/detrend) got refactored into ``chunks_attr=None or string`` to specify on which sample attribute to operate. * internally and as provided by mvpa2.suite, `numpy` is imported as `np`, and `pylab` is imported as `pl` General Changes =============== Datasets ======== Sparse data support ------------------- Dataset in principal now support non-ndarray types for dataset samples. However, most parts of PyMVPA still assume an (at least) ndarray-like interface. Splitters --------- * `permute` -> `permute_attr`, so if you had `permute=True`, use `attr='targets'` if you like to permute targets pymvpa2-2.2.0/doc/source/release_notes_0.6.rst000066400000000000000000000043671202542755000211370ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: release notes .. _chap_release_notes_0.6: *************************** Release Notes -- PyMVPA 0.6 *************************** * All mappers, classifiers, regressions, and measures are now implemented as :class:`Node`\s that can be called with a :class:`Dataset` and return a processed dataset. All nodes provide a ``generate()`` method that causes the node to yield the result. In addition, special nodes added implementing more complex generators yielding multiple results (e.g. resampling, permuting, or splitting nodes). * Splitters as such do not exist any longer. They have been replaced by a number of generators that offer the same functionality, but can be combined in more flexible way. :class:`Splitter` now is just a generator which implements only the actual splitting of the :class:`Dataset` into a set of disjoint pieces (e.g. one for training and one for testing). * There is no `TransferError` anymore. Any classifier (or measure) can evaluate error functions using a post-processing node, e.g.:: SVM(..., postproc=BinaryFxNode(mean_mismatch_error, 'targets') This is possible, because by default classifiers simply return a dataset with all predictions as samples and assign the actual targets as a samples attribute. The post-processing node can subsequently compute arbitrary error values (total, or per-unique sample id, ...). * Feature selections are no longer a separate entity, but are implemented as training procedures for :class:`SliceMapper`. The most important effect is that :class:`SliceMapper` tries to perform slicing without copying whenever possible. Note that any feature selection procedure has to be trained on a dataset before it can be used -- otherwise it won't do the right thing(TM). * There is no dependency on PyNIfTI for any functionality anymore. It has been replaced by NiBabel (http://nipy.org/nibabel). pymvpa2-2.2.0/doc/source/sitemap.rst000066400000000000000000000006621202542755000173600ustar00rootroot00000000000000.. _sitemap: ****************** PyMVPA.org Sitemap ****************** .. toctree:: :maxdepth: 2 whoisusingit download manual datadb examples faq glossary changelog devguide history references support legal todo .. Files which are not directly mentioned in any toctree but nevertheless included .. toctree:: :hidden: authors devguide docoverview index modref pymvpa2-2.2.0/doc/source/support.rst000066400000000000000000000043771202542755000174410ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Support .. _chap_support: ******************** Where To Get Support ******************** If you have problems installing the software or questions about usage, documentation or something else related to PyMVPA, you can post to the PyMVPA mailing list (preferred) or contact the authors on IRC: :Mailing list: pkg-exppsy-pymvpa@lists.alioth.debian.org [subscription_, archive_] :IRC: #neurodebian on OFTC All users should subscribe to the mailing list. PyMVPA is still a young project that is under heavy development. Significant modifications (hopefully improvements) are very likely to happen frequently. The mailing list is the preferred way to announce such changes. The mailing list archive can also be searched using the *mailing list archive search* located in the sidebar of the PyMVPA home page. .. _subscription: http://lists.alioth.debian.org/mailman/listinfo/pkg-exppsy-pymvpa .. _archive: http://lists.alioth.debian.org/pipermail/pkg-exppsy-pymvpa/ Reporting A Bug --------------- If you think you have discovered a bug, please report it. Only known bugs can be fixed. If you have a GitHub_ account, the easiest way to report a bug is via the `issue tracker`_ -- just click the "Create Issue" button, describe your problem, and submit. If your are using a Debian package of PyMVPA, you can alternatively use the :command:`reportbug` command. We would appreciate if in your bug report you would include the output of call to :func:`mvpa2.wtf()`, which summarizes the details of your system. If you spot an error in the documentation, simply leave a comment at the bottom of the corresponding webpage on *pympva.org* (comments can be made without the need for any type of account). If you don't like either way, please post to the user mailing list (see above). .. _GitHub: http://github.com .. _issue tracker: http://github.com/PyMVPA/PyMVPA/issues pymvpa2-2.2.0/doc/source/todo.rst000077700000000000000000000000001202542755000177702../../TODOustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/tutorial.rst000066400000000000000000000047531202542755000175660ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial: ******************************* Tutorial Introduction to PyMVPA ******************************* This chapter offers a tutorial introduction into PyMVPA. In the tutorial we are going to take a look at all major parts of PyMVPA, introduce the most important concepts, and explore particular functionality in real-life analysis examples. Please note that this tutorial is only concerned with aspects directly related to PyMVPA. It does **not** teach basic Python_ programming. If you are new to Python, it is recommend that you take a look at the :ref:`chap_tutorial_prerequisites` for information about what you should know and how to obtain that knowledge. Throughout the tutorial there will be little exercises with tasks that are meant to deepen the understanding of a particular problem or to train important skills. However, even without a dedicated exercise the reader is advised to run the tutorial code interactively and explore code snippets beyond what is touched by the tutorial. Typically, only the most important aspects will be mentioned and each building block in PyMVPA can be used in more flexible ways than what is shown. Enjoy the ride. Through the course of the tutorial we would analyze :ref:`real BOLD fMRI data `. Therefore, to be able to run the code in this tutorial, you need to download the :ref:`corresponding data from the PyMVPA website `. Once downloaded, extract the tarball, open a terminal, go into the directory with the extracted tarball content and run: :command:`./start_tutorial_session.sh`. On a NeuroDebian-enabled system, the tutorial data is also available from the ``python-mvpa2-tutorialdata`` package. If you want to prevent yourself from re-typing all code snippets into the terminal window, you might want to investigate IPython's ``%cpaste`` command. .. _Python: http://www.python.org .. toctree:: :maxdepth: 2 tutorial_prerequisites tutorial_start tutorial_datasets tutorial_mappers tutorial_classifiers tutorial_searchlight tutorial_sensitivity tutorial_eventrelated tutorial_significance pymvpa2-2.2.0/doc/source/tutorial_classifiers.rst000066400000000000000000000500771202542755000221550ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial_classifiers: *********************************************** Part 4: Classifiers -- All Alike, Yet Different *********************************************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] This is already the second time that we will engage in a classification analysis, so let's first recap what we did before in the :ref:`first tutorial part `: >>> from mvpa2.tutorial_suite import * >>> ds = get_haxby2001_data() >>> clf = kNN(k=1, dfx=one_minus_correlation, voting='majority') >>> cvte = CrossValidation(clf, HalfPartitioner(attr='runtype')) >>> cv_results = cvte(ds) >>> np.mean(cv_results) 0.0625 Looking at this little code snippet we can nicely see the logical parts of a cross-validated classification analysis. 1. Load the data 2. Choose a classifier 3. Set up an error function 4. Evaluate the error in a cross-validation procedure 5. Inspect results Our previous choice of the classifier was guided by the intention to replicate :ref:`Haxby et al. (2001) `, but what if we want to try a different algorithm? In this case a nice feature of PyMVPA comes into play. All classifiers implement a common interface that makes them easily exchangeable without the need to adapt any other part of the analysis code. If, for example, we want to try the popular :mod:`support vector machine ` (SVM) on our example dataset it looks like this: >>> clf = LinearCSVMC() >>> cvte = CrossValidation(clf, HalfPartitioner(attr='runtype')) >>> cv_results = cvte(ds) >>> np.mean(cv_results) 0.1875 Instead of k-nearest-neighbor, we create a linear SVM classifier, internally using the popular LIBSVM library (note that PyMVPA provides additional SVM implementations). The rest of the code remains identical. SVM with its default settings seems to perform slightly worse than the simple kNN-classifier. We'll get back to the classifiers shortly. Let's first look at the remaining part of this analysis. We already know that `~mvpa2.measures.base.CrossValidation` can be used to compute errors. So far we have used only the mean mismatch between actual targets and classifier predictions as the error function (which is the default). However, PyMVPA offers a number of alternative functions in the :mod:`mvpa2.misc.errorfx` module, but it is also trivial to specify custom ones. For example, if we do not want to have error reported, but instead accuracy, we can do that: >>> cvte = CrossValidation(clf, HalfPartitioner(attr='runtype'), ... errorfx=lambda p, t: np.mean(p == t)) >>> cv_results = cvte(ds) >>> np.mean(cv_results) 0.8125 This example reuses the SVM classifier we have create before, and yields exactly what we expect from the previous result. The details of the cross-validation procedure are also heavily customizable. We have seen that a `~mvpa2.generators.partition.Partitioner` is used to generate training and testing dataset for each cross-validation fold. So far we have only used `~mvpa2.generators.partition.HalfPartitioner` to divide the dataset into odd and even runs (based on our custom sample attribute ``runtype``). However, in general it is more common to perform so called leave-one-out cross-validation, where *one* independent part of a dataset is selected as testing dataset, while the other parts constitute the training dataset. This procedure is repeated till all parts have served as the testing dataset once. In case of our dataset we could consider each of the 12 runs as independent measurements (fMRI data doesn't allow us to consider temporally adjacent data to be considered independent). To run such an analysis we first need to redo our dataset preprocessing, since in the current one we only have one sample per stimulus category for both odd and even runs. To get a dataset with one sample per stimulus category for each run, we need to modify the averaging step. Using what we have learned from the :ref:`last tutorial part ` the following code snippet should be plausible: >>> # directory that contains the data files >>> datapath = os.path.join(tutorial_data_path, 'data') >>> # load the raw data >>> attr = SampleAttributes(os.path.join(datapath, 'attributes.txt')) >>> ds = fmri_dataset(samples=os.path.join(datapath, 'bold.nii.gz'), ... targets=attr.targets, chunks=attr.chunks, ... mask=os.path.join(datapath, 'mask_vt.nii.gz')) >>> # pre-process >>> poly_detrend(ds, polyord=1, chunks_attr='chunks') >>> zscore(ds, param_est=('targets', ['rest'])) >>> ds = ds[ds.sa.targets != 'rest'] >>> # average >>> run_averager = mean_group_sample(['targets', 'chunks']) >>> ds = ds.get_mapped(run_averager) >>> ds.shape (96, 577) Instead of two samples per category in the whole dataset, now we have one sample per category, per experiment run, hence 96 samples in the whole dataset. To set up a 12-fold leave-one-run-out cross-validation, we can make use of `~mvpa2.generators.partition.NFoldPartitioner`. By default it is going to select samples from one ``chunk`` at a time: >>> cvte = CrossValidation(clf, NFoldPartitioner(), ... errorfx=lambda p, t: np.mean(p == t)) >>> cv_results = cvte(ds) >>> np.mean(cv_results) 0.78125 We get almost the same prediction accuracy (reusing the SVM classifier and our custom error function). Note that this time we performed the analysis on a lot more samples that were each was computed from just a few fMRI volumes (about nine each). So far we have just looked at the mean accuracy or error. Let's investigate the results of the cross-validation analysis a bit further. >>> type(cv_results) >>> print cv_results.samples [[ 0.75 ] [ 0.875] [ 1. ] [ 0.75 ] [ 0.75 ] [ 0.875] [ 0.75 ] [ 0.875] [ 0.75 ] [ 0.375] [ 1. ] [ 0.625]] The returned value is actually a `~mvpa2.datasets.base.Dataset` with the results for all cross-validation folds. Since our error function computes only a single scalar value for each fold the dataset only contains a single feature (in this case the accuracy), and a sample per each fold. .. XXX disabled for now -- see tutorial_start for reason Moreover, the dataset also offers a sample attribute that show which particular set of chunks formed the training and testing set per fold. . >> print cv_results.sa.cvfold ['1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0->0.0' '0.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0->1.0' '0.0,1.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0->2.0' '0.0,1.0,2.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0->3.0' '0.0,1.0,2.0,3.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0->4.0' '0.0,1.0,2.0,3.0,4.0,6.0,7.0,8.0,9.0,10.0,11.0->5.0' '0.0,1.0,2.0,3.0,4.0,5.0,7.0,8.0,9.0,10.0,11.0->6.0' '0.0,1.0,2.0,3.0,4.0,5.0,6.0,8.0,9.0,10.0,11.0->7.0' '0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,9.0,10.0,11.0->8.0' '0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,10.0,11.0->9.0' '0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,11.0->10.0' '0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0->11.0'] We Need To Take A Closer Look ============================= By now we have already done a few cross-validation analyses using two different classifiers and different pre-processing strategies. In all these cases we have just looked at the generalization performance or error. However, error rates hide a lot of interesting information that is very important for an interpretation of results. In our case we analyze a dataset with eight different categories. An average misclassification rate doesn't tell us much about the contribution of each category to the prediction error. It could be that *half of the samples of each category* get misclassified, but the same average error might be due to *all samples from half of the categories* being completely misclassified, while prediction accuracy for samples from the remaining categories is perfect. These two results would have to be interpreted in totally different ways, despite the same average error rate. In psychological research this type of results is usually presented as a `contingency table`_ or `cross tabulation`_ of expected vs. empirical results. `Signal detection theory`_ offers a whole range of techniques to characterize classifier's performance based on that. From this angle a classification analysis is hardly any different from a psychological experiment where a human observer performs a detection task, hence the same analysis procedures can be applied here as well. .. _contingency table: http://en.wikipedia.org/wiki/Contingency_table .. _cross tabulation: http://en.wikipedia.org/wiki/Cross_tabulation .. _signal detection theory: http://en.wikipedia.org/wiki/Detection_theory PyMVPA provides convenient access to :term:`confusion matrices `, i.e. contingency tables of targets vs. actual predictions. However, to prevent wasting CPU-time and memory they are not computed by default, but instead have to be enabled explicitly. Optional analysis results like this are available in a dedicated collection of :term:`conditional attribute`\ s -- analogous to ``sa`` and ``fa`` in datasets, it is named ``ca``. Let's see how it works: >>> cvte = CrossValidation(clf, NFoldPartitioner(), ... errorfx=lambda p, t: np.mean(p == t), ... enable_ca=['stats']) >>> cv_results = cvte(ds) Via the ``enable_ca`` argument we triggered computing confusion tables for all cross-validation folds, but otherwise there is no change in the code. Afterwards the aggregated confusion for the whole cross-validation procedure is available in the ``ca`` collection. Let's take a look (note that in the printed manual the output is truncated due to page width constraints -- please refer to the HTML-based version full the full matrix). >>> print cvte.ca.stats.as_string(description=True) ----------. predictions\targets bottle cat chair face house scissors scrambledpix shoe `------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ P' N' FP FN PPV NPV TPR SPC FDR MCC F1 bottle 6 0 3 0 0 5 0 1 15 75 9 6 0.4 0.92 0.5 0.88 0.6 0.34 0.44 cat 0 10 0 0 0 0 0 0 10 67 0 2 1 0.97 0.83 1 0 0.79 0.91 chair 0 0 7 0 0 0 0 0 7 73 0 5 1 0.93 0.58 1 0 0.66 0.74 face 0 2 0 12 0 0 0 0 14 63 2 0 0.86 1 1 0.97 0.14 0.8 0.92 house 0 0 0 0 12 0 0 0 12 63 0 0 1 1 1 1 0 0.87 1 scissors 2 0 1 0 0 6 0 0 9 75 3 6 0.67 0.92 0.5 0.96 0.33 0.48 0.57 scrambledpix 2 0 1 0 0 0 12 1 16 63 4 0 0.75 1 1 0.94 0.25 0.75 0.86 shoe 2 0 0 0 0 1 0 10 13 67 3 2 0.77 0.97 0.83 0.96 0.23 0.69 0.8 Per target: ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ P 12 12 12 12 12 12 12 12 N 84 84 84 84 84 84 84 84 TP 6 10 7 12 12 6 12 10 TN 69 65 68 63 63 69 63 65 Summary \ Means: ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ 12 68.25 2.62 2.62 0.81 0.96 0.78 0.96 0.19 0.67 0.78 CHI^2 442.67 p=2e-58 ACC 0.78 ACC% 78.12 # of sets 12 ACC(i) = 0.87-0.015*i p=0.3 r=-0.33 r^2=0.11 Statistics computed in 1-vs-rest fashion per each target. Abbreviations (for details see http://en.wikipedia.org/wiki/ROC_curve): TP : true positive (AKA hit) TN : true negative (AKA correct rejection) FP : false positive (AKA false alarm, Type I error) FN : false negative (AKA miss, Type II error) TPR: true positive rate (AKA hit rate, recall, sensitivity) TPR = TP / P = TP / (TP + FN) FPR: false positive rate (AKA false alarm rate, fall-out) FPR = FP / N = FP / (FP + TN) ACC: accuracy ACC = (TP + TN) / (P + N) SPC: specificity SPC = TN / (FP + TN) = 1 - FPR PPV: positive predictive value (AKA precision) PPV = TP / (TP + FP) NPV: negative predictive value NPV = TN / (TN + FN) FDR: false discovery rate FDR = FP / (FP + TP) MCC: Matthews Correlation Coefficient MCC = (TP*TN - FP*FN)/sqrt(P N P' N') F1 : F1 score F1 = 2TP / (P + P') = 2TP / (2TP + FP + FN) AUC: Area under (AUC) curve CHI^2: Chi-square of confusion matrix LOE(ACC): Linear Order Effect in ACC across sets # of sets: number of target/prediction sets which were provided This output is a comprehensive summary of the performed analysis. We can see that the confusion matrix has a strong diagonal, and confusion happens mostly among small objects. In addition to the plain contingency table there are also a number of useful summary statistics readily available -- including average accuracy. Especially for multi-class datasets the matrix quickly becomes incomprehensible. For these cases the confusion matrix can also be plotted via its `~mvpa2.clfs.transerror.ConfusionMatrix.plot()` method. If the confusions shall be used as input for further processing they can also be accessed in pure matrix format: >>> print cvte.ca.stats.matrix [[ 6 0 3 0 0 5 0 1] [ 0 10 0 0 0 0 0 0] [ 0 0 7 0 0 0 0 0] [ 0 2 0 12 0 0 0 0] [ 0 0 0 0 12 0 0 0] [ 2 0 1 0 0 6 0 0] [ 2 0 1 0 0 0 12 1] [ 2 0 0 0 0 1 0 10]] The classifier confusions are just an example of the general mechanism of conditional attribute that is supported by many objects in PyMVPA. Meta-Classifiers To Make Complex Stuff Simple ============================================= We just saw that it is possible to encapsulate a whole cross-validation analysis into a single object that can be called with any dataset to produce the desired results. We also saw that despite this encapsulation we can still get a fair amount of information about the performed analysis. However, what happens if we want to do some further processing of the data **within** the cross-validation analysis. That seems to be difficult, since we feed a whole dataset into the analysis, and only internally it get split into the respective pieces. Of course there is a solution to this problem -- a :term:`meta-classifier`. This is a classifier that doesn't implement a classification algorithm on its own, but uses another classifier to do the actual work. In addition, the meta-classifier adds another processing step that is performed before the actual :term:`base-classifier` sees the data. An example of such meta-classifier is `~mvpa2.clfs.meta.MappedClassifier`. Its purpose is simple: Apply a mapper to both training and testing data before it is passed on to the internal base-classifier. With this technique it is possible to implement arbitrary pre-processing within a cross-validation analysis. Suppose we want to perform the classification not on voxel intensities themselves, but on the same samples in the space spanned by the singular vectors of the training data, it would look like this: >>> baseclf = LinearCSVMC() >>> metaclf = MappedClassifier(baseclf, SVDMapper()) >>> cvte = CrossValidation(metaclf, NFoldPartitioner()) >>> cv_results = cvte(ds) >>> print np.mean(cv_results) 0.15625 First we notice that little has been changed in the code and the results -- the error is slightly reduced, but still comparable. The critical line is the second, where we create the `~mvpa2.clfs.meta.MappedClassifier` from the SVM classifier instance, and a `~mvpa2.mappers.svd.SVDMapper` that implements `singular value decomposition`_ as a mapper. .. exercise:: What might be the reasons for the error decrease in comparison to the results on the dataset with voxel intensities? .. _singular value decomposition: http://en.wikipedia.org/wiki/Singular_value_decomposition We know that mappers can be combined into complex processing pipelines, and since `~mvpa2.clfs.meta.MappedClassifier` takes any mapper as argument, we can implement arbitrary preprocessing steps within the cross-validation procedure. Let's say we have heard rumors that only the first two dimensions of the space spanned by the SVD vectors cover the "interesting" variance and the rest is noise. We can easily check that with an appropriate mapper: >>> mapper = ChainMapper([SVDMapper(), StaticFeatureSelection(slice(None, 2))]) >>> metaclf = MappedClassifier(baseclf, mapper) >>> cvte = CrossValidation(metaclf, NFoldPartitioner()) >>> cv_results = cvte(ds) >>> svm_err = np.mean(cv_results) >>> print round(svm_err, 2) 0.57 Well, obviously the discarded components cannot only be noise, since the error is substantially increased. But maybe it is the classifier that cannot deal with the data. Since nothing in this code is specific to the actual classification algorithm we can easily go back to the kNN classifier that has served us well in the past. >>> baseclf = kNN(k=1, dfx=one_minus_correlation, voting='majority') >>> mapper = ChainMapper([SVDMapper(), StaticFeatureSelection(slice(None, 2))]) >>> metaclf = MappedClassifier(baseclf, mapper) >>> cvte = CrossValidation(metaclf, NFoldPartitioner()) >>> cv_results = cvte(ds) >>> np.mean(cv_results) < svm_err False Oh, that was even worse. We would have to take a closer look at the data to figure out what is happening here. .. exercise:: Inspect the confusion matrix of this analysis for both classifiers. What information is represented in the first two SVD components and what is not? Plot the samples of the full dataset after they have been mapped onto the first two SVD components. Why does the kNN classifier perform so bad in comparison to the SVM (hint: think about the distance function)? In this tutorial part we took a look at classifiers. We have seen that regardless of the actual algorithm all classifiers are implementing the same interface. Because of that they can be replaced by another classifier without having to change any other part of the analysis code. Moreover, we have seen that it is possible to enable and access optional information that is offered by particular parts of the processing pipeline. However, we still have done little to address one of the major questions in neuroscience research, that is: Where does the information come from? One possible approach to this question is the topic of the :ref:`next tutorial part `. .. Think about adding a demo of the classifiers warehouse. .. exercise:: Try doing the Z-Scoring before computing the mean samples per category. What happens to the generalization performance of the classifier? ANSWER: It becomes 100%! pymvpa2-2.2.0/doc/source/tutorial_datasets.rst000066400000000000000000000446721202542755000214620ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial, Dataset concepts .. _chap_tutorial_datasets: *********************************** Part 2: Dataset Basics and Concepts *********************************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] A `~mvpa2.datasets.base.Dataset` is the basic data container in PyMVPA. It serves as the primary form of input data storage, but also as container for more complex results returned by some algorithm. In this tutorial part we will take a look at what a dataset consists of, and how it works. In the simplest case, a dataset only contains *data* that is a matrix of numerical values. >>> from mvpa2.tutorial_suite import * >>> data = [[ 1, 1, -1], ... [ 2, 0, 0], ... [ 3, 1, 1], ... [ 4, 0, -1]] >>> ds = Dataset(data) >>> ds.shape (4, 3) >>> len(ds) 4 >>> ds.nfeatures 3 >>> ds.samples array([[ 1, 1, -1], [ 2, 0, 0], [ 3, 1, 1], [ 4, 0, -1]]) In the above example, every row vector in the ``data`` matrix becomes an observation or a :term:`sample` in the dataset, and every column vector represents an individual variable or a :term:`feature`. The concepts of samples and features are essential for a dataset, hence we take a further, closer look. The dataset assumes the first axis of the data to be the samples separating dimension. If the dataset is created using a one-dimensional vector it will therefore have as many samples as elements in the vector, and only one feature. >>> one_d = [ 0, 1, 2, 3 ] >>> one_ds = Dataset(one_d) >>> one_ds.shape (4, 1) On the other hand, if a dataset is created from multi-dimensional data, only its second axis represents the features >>> import numpy as np >>> m_ds = Dataset(np.random.random((3, 4, 2, 3))) >>> m_ds.shape (3, 4, 2, 3) >>> m_ds.nfeatures 4 In this case we have a dataset with three samples and four features, where each feature is a 2x3 matrix. In case somebody is wondering now, why not simply each value in the data array is considered as its own feature (yielding 24 features) -- stay tuned, as this is going to be of importance later on. Attributes ========== What we have seen so far does not really warrant the use of a dataset over a plain array or a matrix with samples. However, in the MVPA context we often need to know more about each samples than just the value of its features. In the previous tutorial part we have already seen that per-sample :term:`target` values are required for supervised-learning algorithms, and that a dataset often has to be split based on the origin of specific groups of samples. For this type of auxiliary information a dataset can also contain collections of three types of :term:`attribute`\ s: :term:`sample attribute`, :term:`feature attribute`, and :term:`dataset attribute`. For Samples ----------- In a dataset each :term:`sample` can have an arbitrary number of additional attributes. They are stored as vectors of the same length as the number of samples in a collection, and are accessible via the ``sa`` attribute. A collection is derived from a standard Python `dict`, and hence adding sample attributes works identical to adding elements to a dictionary: >>> ds.sa['some_attr'] = [ 0., 1, 1, 3 ] >>> ds.sa.keys() ['some_attr'] However, sample attributes are not directly stored as plain data, but for various reasons as a so-called `~mvpa2.base.collections.Collectable` that in turn embeds a NumPy array with the actual attribute: >>> type(ds.sa['some_attr']) >>> ds.sa['some_attr'].value array([ 0., 1., 1., 3.]) This "complication" is done to be able to extend attributes with additional functionality that is often needed and can offer significant speed-up of processing. For example, sample attributes carry a list of their unique values. This list is only computed once (upon first request) and can subsequently be accessed directly without repeated and expensive searches: >>> ds.sa['some_attr'].unique array([ 0., 1., 3.]) However, for most interactive uses of PyMVPA this type of access to attributes' ``.value`` is relatively cumbersome (too much typing), therefore collections offer direct attribute access by name: >>> ds.sa.some_attr array([ 0., 1., 1., 3.]) Another purpose of the sample attribute collection is to preserve data integrity, by disallowing improper attributes: >>> ds.sa['invalid'] = 4 Traceback (most recent call last): File "/usr/lib/python2.6/doctest.py", line 1253, in __run compileflags, 1) in test.globs File "", line 1, in ds.sa['invalid'] = 4 File "/home/test/pymvpa/mvpa2/base/collections.py", line 459, in __setitem__ value = ArrayCollectable(value) File "/home/test/pymvpa/mvpa2/base/collections.py", line 171, in __init__ % self.__class__.__name__) ValueError: ArrayCollectable only takes sequences as value. >>> ds.sa['invalid'] = [ 1, 2, 3, 4, 5, 6 ] Traceback (most recent call last): File "/usr/lib/python2.6/doctest.py", line 1253, in __run compileflags, 1) in test.globs File "", line 1, in ds.sa['invalid'] = [ 1, 2, 3, 4, 5, 6 ] File "/home/test/pymvpa/mvpa2/base/collections.py", line 468, in __setitem__ str(self))) ValueError: Collectable 'invalid' with length [6] does not match the required length [4] of collection ''. But other than basic plausibility checks no further constraints on values of samples attributes exist. As long as the length of the attribute vector matches the number of samples in the dataset, and the attributes values can be stored in a NumPy array, any value is allowed. For example, it is perfectly possible and supported to store literal attributes. It should also be noted that each attribute may have its own individual data type, hence it is possible to have literal and numeric attributes in the same dataset. >>> ds.sa['literal'] = ['one', 'two', 'three', 'four'] >>> sorted(ds.sa.keys()) ['literal', 'some_attr'] >>> for attr in ds.sa: ... print "%s: %s" % (attr, ds.sa[attr].value.dtype.name) literal: string40 some_attr: float64 For Features ------------ :term:`Feature attribute`\ s are almost identical to :term:`sample attribute`\ s the *only* difference is that instead of having one attribute value per sample, feature attributes have one value per (guess what? ...) *feature*. Moreover, they are stored in a separate collection in the datasets that is called ``fa``: >>> ds.nfeatures 3 >>> ds.fa['my_fav'] = [0, 1, 0] >>> ds.fa['responsible'] = ['me', 'you', 'nobody'] >>> sorted(ds.fa.keys()) ['my_fav', 'responsible'] For The Dataset --------------- Finally, there can be also attributes, not per each sample, or each feature, but for the dataset as a whole: so called :term:`dataset attribute`\s. Assigning such attributes and accessing them later on work in exactly the same way as for the other two types of attributes, except that dataset attributes are stored in their own collection which is accessible via the ``a`` property of the dataset. However, in contrast to sample and feature attribute no constraints on the type or size are imposed -- anything can be stored. Let's store a list with all files in the current directory, just because we can: >>> from glob import glob >>> ds.a['pointless'] = glob("*") >>> 'setup.py' in ds.a.pointless True Slicing, resampling, feature selection ====================================== At this point we can already construct a dataset from simple arrays and enrich it with an arbitrary number of additional attributes. But just having a dataset isn't enough. From part one of this tutorial we already know that we need to be able to select subsets of a dataset for further processing, and we also know that this is possible with PyMVPA's datasets. Now it is time to have a closer look into how it works. Slicing a dataset (i.e. selecting specific subsets) is very similar to slicing a NumPy array. It actually works *almost* identical. A dataset supports Python's `slice` syntax, but also selection by boolean masks, and indices. The following three slicing operations result in equivalent output datasets, by always selecting every other samples in the dataset: >>> # original >>> ds.samples array([[ 1, 1, -1], [ 2, 0, 0], [ 3, 1, 1], [ 4, 0, -1]]) >>> >>> # Python-style slicing >>> ds[::2].samples array([[ 1, 1, -1], [ 3, 1, 1]]) >>> >>> # Boolean mask array >>> mask = np.array([True, False, True, False]) >>> ds[mask].samples array([[ 1, 1, -1], [ 3, 1, 1]]) >>> >>> # Slicing by index -- Python indexing start with 0 !! >>> ds[[0, 2]].samples array([[ 1, 1, -1], [ 3, 1, 1]]) .. exercise:: Search the `NumPy documentation`_ for the difference between "basic slicing" and "advanced indexing". Especially the aspect of memory consumption applies to dataset slicing as well, and being aware of this fact might help to write more efficient analysis scripts. Which of the three slicing approaches above is the most memory-efficient? Which of the three slicing approaches above might lead to unexpected side-effects if output dataset gets modified? .. _NumPy documentation: http://docs.scipy.org/doc/ All three slicing-styles are equally applicable to the selection of feature subsets within a dataset. Remember, features are represented on the second axis of a dataset. >>> ds[:, [1,2]].samples array([[ 1, -1], [ 0, 0], [ 1, 1], [ 0, -1]]) By applying a selection by indices to the second axis, we can easily get the last two features of our example dataset. Please note the `:` is supplied as first axis slicing. This is the Python way to indicate *take everything along this axis*, hence including all samples. As you can guess, it is also possible to select subsets of samples and features at the same time. >>> subds = ds[[0,1], [0,2]] >>> subds.samples array([[ 1, -1], [ 2, 0]]) If you have prior experience with NumPy you might be confused now. What you might have expected is this: >>> ds.samples[[0,1], [0,2]] array([1, 0]) The above code applies the same slicing directly to the NumPy array with the samples, and the result is fundamentally different. For NumPy arrays this style of slicing allows to select specific elements by their indices on each axis of an array. For PyMVPA's datasets this mode is not very useful, instead we typically want to select rows and columns, i.e. samples and features given by their indices. .. exercise:: Try to select samples [0,1] and features [0,2,3] simultaneously using dataset slicing. Now apply the same slicing to the samples array itself (``ds.samples``) -- make sure that the result doesn't surprise you and find a pure NumPy way to achieve similar selection. One last interesting thing to look at, in the context of dataset slicing are the attributes. What happens to them when a subset of samples and/or features is chosen? Our original dataset had both samples and feature attributes: >>> print ds.sa.some_attr [ 0. 1. 1. 3.] >>> print ds.fa.responsible ['me' 'you' 'nobody'] Now let's look at what they became in the subset-dataset we previously created: >>> print subds.sa.some_attr [ 0. 1.] >>> print subds.fa.responsible ['me' 'nobody'] We see that both attributes are still there and, moreover, also the appropriate subsets have been selected. Loading fMRI data ================= Enough of theoretical foreplay -- let's look at a concrete example of an fMRI dataset. PyMVPA has several helper functions to load data from specialized formats, and the one for fMRI data is `~mvpa2.datasets.mri.fmri_dataset()`. The example dataset we are going to look at is a single subject from Haxby et al. (2001) that we already loaded in part one of this tutorial. For more convenience, and less typing we first specify the path of the directory with the fMRI data. >>> path=os.path.join(tutorial_data_path, 'data') In the simplest case, we now let `~mvpa2.datasets.mri.fmri_dataset` do its job, by just pointing it to the fMRI data file. The data is stored as a NIfTI file that has all runs of the experiment concatenated into a single file. >>> ds = fmri_dataset(os.path.join(path, 'bold.nii.gz')) >>> len(ds) 1452 >>> ds.nfeatures 163840 >>> ds.shape (1452, 163840) We can notice two things. First, it worked! Second, we get a two-dimensional dataset with 1452 samples (these are volumes in the NIfTI file), and over 160k features (these are voxels in the volume). The voxels are represented as a one-dimensional vector, and it seems that they have lost their association with the 3D-voxel-space. However, this is not the case, as we will see in the next chapter. PyMVPA represents data in this simple format to make it compatible with a vast range of generic algorithms that expect data to be a simple matrix. We just loaded all data from that NIfTI file, but usually we would be interested in a subset only, i.e. "brain voxels". `~mvpa2.datasets.mri.fmri_dataset` is capable of performing data masking. We just need to specify a mask image. Such mask image is generated in pretty much any fMRI analysis pipeline -- may it be a full-brain mask computed during skull-stripping, or an activation map from a functional localizer. We are going to use the original GLM-based localizer mask of ventral temporal cortex from Haxby et al. (2001). We already know that it comprises 577 voxels. Let's reload the dataset: >>> ds = fmri_dataset(os.path.join(path, 'bold.nii.gz'), ... mask=os.path.join(path, 'mask_vt.nii.gz')) >>> len(ds) 1452 >>> ds.nfeatures 577 As expected, we get the same number of samples and also only 577 features -- voxels corresponding to non-zero elements in the mask image. Now, let's explore this dataset a little further. Besides samples the dataset offers number of attributes that enhance the data with information that is present in the NIfTI image header in the file. Each sample has information about its volume ID in the time series and the actual acquisition time (relative to the beginning of the file). Moreover, the original voxel index (sometimes referred to as ``ijk``) for each feature is available too. Finally, the dataset also contains information about the dimensionality of the input volumes, voxel size, and any other NIfTI-specific information since it also includes a dump of the full NIfTI image header. .. note:: Previously (0.4.x versions and 0.5 development prior March 03, 2010), PyMVPA exposed 4D (and 3D with degenerate 1st dimension) data in ``tkji`` (corresponds to ``tzyx`` if volumes were axial slices in neurologic convention) order of dimensions. Now it uses more convenient order ``tijk`` (corresponding to ``txyz``), which will match the order exposed by NiBabel (PyNIfTI and NiftiImage still expose them as ``tkji``). >>> ds.sa.time_indices[:5] array([0, 1, 2, 3, 4]) >>> ds.sa.time_coords[:5] array([ 0. , 2.5, 5. , 7.5, 10. ]) >>> ds.fa.voxel_indices[:5] array([[ 6, 23, 24], [ 7, 18, 25], [ 7, 18, 26], [ 7, 18, 27], [ 7, 19, 25]]) >>> ds.a.voxel_eldim (3.5, 3.75, 3.75) >>> ds.a.voxel_dim (40, 64, 64) >>> 'imghdr' in ds.a True In addition to all this information, the dataset also carries a key attribute: the *mapper*. A mapper is an important concept in PyMVPA, and hence worth devoting the whole :ref:`next tutorial chapter ` to it. >>> print ds.a.mapper -> Having all these attributes being part of a dataset is often a useful thing to have, but in some cases (e.g. when it comes to efficiency, and/or very large datasets) one might want to have a leaner dataset with just the information that is really necessary. One way to achieve this, is to strip all unwanted attributes. The Dataset class' :meth:`~mvpa2.base.dataset.AttrDataset.copy()` method can help with that. >>> stripped = ds.copy(deep=False, sa=['time_coords'], fa=[], a=[]) >>> print stripped > We can see that all attributes besides ``time_coords`` have been filtered out. Setting the ``deep`` arguments to ``False`` causes the copy function to reuse the data from the source dataset to generate the new stripped one, without duplicating all data in memory -- meaning both datasets now share the sample data and any change done to ``ds`` will also affect ``stripped``. Storage ======= Some data preprocessing can take a long time. One would rather prevent doing it over and over again, and instead just store the preprocessed data into a file for subsequent analyses. PyMVPA offers functionality to store a large variety of objects, including datasets, into HDF5_ files. A variant of this format is also used by recent versions of Matlab to store data. .. _HDF5: http://en.wikipedia.org/wiki/Hierarchical_Data_Format .. _h5py: http://h5py.alfven.org For HDF5 support PyMVPA depends on the h5py_ package. If it is available, any dataset can be saved to a file by simply calling :meth:`~mvpa2.base.dataset.AttrDataset.save()` with the desired filename. >>> import tempfile, shutil >>> # create a temporary directory >>> tempdir = tempfile.mkdtemp() >>> ds.save(os.path.join(tempdir, 'mydataset.hdf5')) HDF5 is a flexible format that also supports, for example, data compression. To enable it, you can pass additional arguments to :meth:`~mvpa2.base.dataset.AttrDataset.save()` that are supported by `Group.create_dataset()`. Instead of using :meth:`~mvpa2.base.dataset.AttrDataset.save()` one can also use the `~mvpa2.base.hdf5.h5save()` function in a similar way. Saving the same dataset with maximum gzip-compression looks like this: >>> ds.save(os.path.join(tempdir, 'mydataset.gzipped.hdf5'), compression=9) >>> h5save(os.path.join(tempdir, 'mydataset.gzipped.hdf5'), ds, compression=9) Loading datasets from a file is easy too. `~mvpa2.base.hdf5.h5load()` takes a filename as an argument and returns the stored dataset. Compressed data will be handled transparently. >>> loaded = h5load(os.path.join(tempdir, 'mydataset.hdf5')) >>> np.all(ds.samples == loaded.samples) True >>> # cleanup the temporary directory, and everything it includes >>> shutil.rmtree(tempdir, ignore_errors=True) pymvpa2-2.2.0/doc/source/tutorial_eventrelated.rst000066400000000000000000000426521202542755000223300ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial, event-related fMRI .. _chap_tutorial_eventrelated: *********************************************************** Part 7: "When Is The Signal" -- Event-related Data Analysis *********************************************************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] In all previous tutorial parts we have analyzed the same fMRI data. We analyzed it using a number of different strategies, but they all had one thing in common: A sample in each dataset was always a single fMRI volume. Sometimes, we have limited ourselves to just a specific region of interest, sometimes we averaged many fMRI volumes into a single one. In all cases, however, a feature always corresponded to a voxel in the fMRI volume and appeared only once in the dataset. In this part we are going to extend the analysis beyond the spatial dimensions and will consider *time* as another aspect of our data. This is a common thing to do, for example, in ERP-analyses of EEG data. Here we are going to employ a similar approach in our well-known example data -- this time selecting a subset of ventral temporal regions. >>> from mvpa2.tutorial_suite import * >>> ds = get_raw_haxby2001_data(roi=(36,38,39,40)) >>> print ds.shape (1452, 941) As we know, this dataset consists of 12 concatenated experiment sessions. Every session had a stimulation block spanning multiple fMRI volumes for each of the eight stimulus categories. Stimulation blocks were separated by rest periods. What we want to do now, is to look at the spatio-temporal signal across our region of interest and the full duration of the stimulation blocks. In other words, we want to perform a sensitivity analysis revealing the spatial temporal distribution of classification-relevant information. In this kind of analysis, we consider each stimulation block an :term:`event` and we need to create a representative sample for every one of them. In the context of an event-related fMRI classification analysis the literature offers three principal techniques: 1. Choose a single representative volume. 2. Compress all relevant volumes into a single one (averaging or parametric fit). 3. Consider the full event-related time series. Obviously, only the third approach can possibly provide us with a temporal sensitivity profile, hence we will choose this path. Event-related Pre-processing Is Not Event-related ------------------------------------------------- For an event-related analysis most of the processing is done on data samples that are somehow derived from a set of events. The rest of the data could be considered irrelevant. However, some preprocessing is only meaningful when performed on the full time series and not on the segmented event samples. An example is the detrending that typically needs to be done on the original, continuous time series. In its current shape our dataset consists of 1452 samples that represent contiguous fMRI volumes. At this stage we can easily perform linear detrending. Again, we are going to do it per each experiment run (the dataset has runs encoded in the ``chunks`` sample attribute), since we do not assume a contiguous linear trend throughout the whole time series. >>> poly_detrend(ds, polyord=1, chunks_attr='chunks') Let's make a copy of the de-trended dataset that we can later on use for some visualization. >>> orig_ds = ds.copy() We still need to normalize each feature (i.e. a voxel at this point). In this case we are, again, going to Z-score them, using the mean and standard deviation from the experiment's rest condition. The resulting values might be interpreted as "activation scores". We are again doing it per each run. >>> zscore(ds, chunks_attr='chunks', param_est=('targets', 'rest')) From Timeseries To Events ------------------------- After detrending and normalization, we can now segment the time series into a set of events. To achieve this we have to compile a list of event definitions first. An event is defined by *onset*, *duration* and potentially a number of additional properties, such as stimulus condition or recording session number. In this example we will simply convert the block-design setup defined by the samples attributes into a list of events. With :func:`~mvpa2.datasets.eventrelated.find_events`, PyMVPA provides a function to convert sequential attributes into event lists. In our dataset, we have the stimulus conditions of each volume sample available as ``targets`` sample attribute. >>> events = find_events(targets=ds.sa.targets, chunks=ds.sa.chunks) >>> print len(events) 204 >>> for e in events[:4]: ... print e {'chunks': 0.0, 'duration': 6, 'onset': 0, 'targets': 'rest'} {'chunks': 0.0, 'duration': 9, 'onset': 6, 'targets': 'scissors'} {'chunks': 0.0, 'duration': 6, 'onset': 15, 'targets': 'rest'} {'chunks': 0.0, 'duration': 9, 'onset': 21, 'targets': 'face'} We are not only feeding the ``targets`` to the function but also the ``chunks`` attribute since we do not want to have event spanning multiple recording sessions. All that is done by :func:`~mvpa2.datasets.eventrelated.find_events` is sequentially parsing all provided attributes and recording an event whenever the value in *any* of the attributes changes. The generated event definition is a dictionary that contains: 1. Onset of the event as index in the sequence (in this example this is a volume id) 2. Duration of the event in "number of sequence elements" (i.e. number of volumes). The duration is determined by counting the number of identical attribute combinations following an event onset. 3. Attribute combination of this event, i.e. the actual values of all given attributes at the particular position. Let's limit ourselves to ``face`` and ``house`` stimulation blocks for now. We can easily filter out all other events. >>> events = [ev for ev in events if ev['targets'] in ['house', 'face']] >>> print len(events) 24 >>> for e in events[:4]: ... print e {'chunks': 0.0, 'duration': 9, 'onset': 21, 'targets': 'face'} {'chunks': 0.0, 'duration': 9, 'onset': 63, 'targets': 'house'} {'chunks': 1.0, 'duration': 9, 'onset': 127, 'targets': 'face'} {'chunks': 1.0, 'duration': 9, 'onset': 213, 'targets': 'house'} >>> np.unique([e['duration'] for e in events]) array([9]) All of our events are of the same length, 9 consecutive fMRI volumes. Later on we would like to view the temporal sensitivity profile from *before* until *after* the stimulation block, hence we should extend the duration of the events a bit. >>> event_duration = 13 >>> for ev in events: ... ev['onset'] -= 2 ... ev['duration'] = event_duration The next and most important step is to actually segment the original time series dataset into event-related samples. PyMVPA offers :func:`~mvpa2.datasets.eventrelated.eventrelated_dataset` as a function to perform this conversion. Let's just do it, it only needs the original dataset and our list of events. >>> # alt: `evds = load_tutorial_results('ds_haxby2001_blkev_facehouse')` >>> evds = eventrelated_dataset(ds, events=events) >>> len(evds) == len(events) True >>> evds.nfeatures == ds.nfeatures * event_duration True .. h5save('results/ds_haxby2001_blkev_facehouse.hdf5', ds) .. exercise:: Inspect the ``evds`` dataset. It has a fairly large number of attributes -- both for samples and for features. Look at each of them and think about what it could be useful for. At this point is worth looking at the dataset's mapper -- in particular at the last two items in the chain mapper that have been added during the conversion into events. >>> print evds.a.mapper[-2:] -> .. exercise:: Reverse-map a single sample through the last two items in the chain mapper. Inspect the result and make sure it doesn't surprise. Now, reverse map multiple samples at once and compare the result. Is this what you would expect? The rest of our analysis is business as usual and is quickly done. We want to perform a cross-validation analysis of an SVM classifier. We are not primarily interested in its performance, but in the weights it assigns to the features. Remember, each feature is now voxel-time-point, so we get a chance of looking at the spatio-temporal profile of classification relevant information in the data. We will nevertheless enable computing of a confusion matrix, so we can assure ourselves that the classifier is performing reasonably well, because only a generalizing model is worth inspecting, as otherwise it overfits and the assigned weights could be meaningless. >>> sclf = SplitClassifier(LinearCSVMC(), ... enable_ca=['stats']) >>> sensana = sclf.get_sensitivity_analyzer() >>> sens = sensana(evds) .. exercise:: Check that the classifier achieves an acceptable accuracy. Is it enough above chance level to allow for an interpretation of the sensitivities? .. exercise:: Using what you have learned in the last tutorial part: Combine the sensitivity maps for all splits into a single map. Project this map into the original dataspace. What is the shape of that space? Store the projected map into a NIfTI file and inspect it using an MRI viewer. Viewer needs to be capable of visualizing time series (hint: for FSLView the time series image has to be opened first)! A Plotting Example ------------------ We have inspected the spatio-temporal profile of the sensitivities using some MRI viewer application, but we can also assemble an informative figure right here. Let's compose a figure that shows the original peri-stimulus time series, the effect of normalization, as well as the corresponding sensitivity profile of the trained SVM classifier. We are going to do that for two example voxels, whose coordinates we might have derived from inspecting the full map. >>> example_voxels = [(28,25,25), (28,23,25)] The plotting will be done by the popular matplotlib_ package. .. _matplotlib: http://matplotlib.sourceforge.net/ First, we plot the original signal after initial detrending. To do this, we apply the same time series segmentation to the original detrended dataset and plot the mean signal for all face and house events for both of our example voxels. The code below will create the plot using matplotlib's ``pylab`` interface (imported as ``pl``). If you are familiar with Matlab's plotting facilities, this shouldn't be hard to read. .. note:: ``_ =`` is used in the examples below simply to absorb output of plotting functions. You do not have to swallow output in your interactive sessions. >>> # linestyles and colors for plotting >>> vx_lty = ['-', '--'] >>> t_col = ['b', 'r'] >>> # whole figure will have three rows -- this is the first >>> _ = pl.subplot(311) >>> # for each of the example voxels >>> for i, v in enumerate(example_voxels): ... # get a slicing array matching just to current example voxel ... slicer = np.array([tuple(idx) == v for idx in ds.fa.voxel_indices]) ... # perform the timeseries segmentation just for this voxel ... evds_detrend = eventrelated_dataset(orig_ds[:, slicer], events=events) ... # now plot the mean timeseries and standard error ... for j, t in enumerate(evds.uniquetargets): ... l = plot_err_line(evds_detrend[evds_detrend.sa.targets == t].samples, ... fmt=t_col[j], linestyle=vx_lty[i]) ... # label this plot for automatic legend generation ... l[0][0].set_label('Voxel %i: %s' % (i, t)) >>> # y-axis caption >>> _ = pl.ylabel('Detrended signal') >>> # visualize zero-level >>> _ = pl.axhline(linestyle='--', color='0.6') >>> # put automatic legend >>> _ = pl.legend() >>> _ = pl.xlim((0,12)) In the next figure row we do exactly the same again, but this time for the normalized data. >>> _ = pl.subplot(312) >>> for i, v in enumerate(example_voxels): ... slicer = np.array([tuple(idx) == v for idx in ds.fa.voxel_indices]) ... evds_norm = eventrelated_dataset(ds[:, slicer], events=events) ... for j, t in enumerate(evds.uniquetargets): ... l = plot_err_line(evds_norm[evds_norm.sa.targets == t].samples, ... fmt=t_col[j], linestyle=vx_lty[i]) ... l[0][0].set_label('Voxel %i: %s' % (i, t)) >>> _ = pl.ylabel('Normalized signal') >>> _ = pl.axhline(linestyle='--', color='0.6') >>> _ = pl.xlim((0,12)) Finally, we plot the associated SVM weight profile for each peri-stimulus time-point of both voxels. For easier selection we do a little trick and reverse-map the sensitivity profile through the last mapper in the dataset's chain mapper (look at ``evds.a.mapper`` for the whole chain). This will reshape the sensitivities into ``cross-validation fold x volume x voxel features``. >>> _ = pl.subplot(313) >>> # L1 normalization of sensitivity maps per split to make them >>> # comparable >>> normed = sens.get_mapped(FxMapper(axis='features', fx=l1_normed)) >>> smaps = evds.a.mapper[-1].reverse(normed) >>> for i, v in enumerate(example_voxels): ... slicer = np.array([tuple(idx) == v for idx in ds.fa.voxel_indices]) ... smap = smaps.samples[:,:,slicer].squeeze() ... l = plot_err_line(smap, fmt='ko', linestyle=vx_lty[i], errtype='std') >>> _ = pl.xlim((0,12)) >>> _ = pl.ylabel('Sensitivity') >>> _ = pl.axhline(linestyle='--', color='0.6') >>> _ = pl.xlabel('Peristimulus volumes') That was it. Perhaps you are scared by the amount of code. Please note that it could have been done shorter, but this way allows to plot any other voxel coordinate combination as well. matplotlib allows for saving this figure in SVG_ format that allows for convenient post-processing in Inkscape_ -- a publication quality figure is only minutes away. .. _SVG: http://en.wikipedia.org/wiki/Scalable_Vector_Graphics .. _Inkscape: http://www.inkscape.org/ .. figure:: pics/ex_eventrelated.* :align: center Sensitivity profile for two example voxels for *face* vs. *house* classification on event-related fMRI data from ventral temporal cortex. .. exercise:: What can we say about the properties of the example voxel's signal from the peri-stimulus plot? If That Was Easy... ------------------- This demo showed an event-related data analysis. Although we have performed it on fMRI data, an analogous analysis can be done for any time series based data in an almost identical fashion. Moreover, if a dataset has information about acquisition time (e.g. like the ones created by :func:`~mvpa2.datasets.mri.fmri_dataset`) :func:`~mvpa2.datasets.eventrelated.eventrelated_dataset()` can also convert event-definition in real time, making it relatively easy to "convert" experiment design logfiles into event lists. In this case there would be no need to run a function like :func:`~mvpa2.datasets.eventrelated.find_events`, but instead they could be directly specified and passed to :func:`~mvpa2.datasets.eventrelated.eventrelated_dataset()`. At the end of this tutorial part we want to take a little glimpse on the power of PyMVPA for "multi-space" analysis. From the :ref:`previous tutorial part ` we know how to do searchlight analyses and it was promised that there is more to it than what we already saw. And here it is: >>> cvte = CrossValidation(LinearCSVMC(), NFoldPartitioner(), ... postproc=mean_sample()) >>> sl = Searchlight(cvte, ... IndexQueryEngine(voxel_indices=Sphere(1), ... event_offsetidx=Sphere(2)), ... postproc=mean_sample()) >>> res = sl(evds) Have you been able to deduce what this analysis will do? Clearly, it is some sort of searchlight, but it doesn't use :func:`~mvpa2.measures.searchlight.sphere_searchlight`. Instead, it utilizes :class:`~mvpa2.measures.searchlight.Searchlight`. Yes, your are correct this is a spatio-temporal searchlight. The searchlight focus travels along all possible locations in our ventral temporal ROI, but at the same time also along the peristimulus time segment covered by the events. The spatial searchlight extent is the center voxel and its immediate neighbors and the temporal dimension comprises of two additional ime-points in each direction. The result is again a dataset. Its shape is compatible with the mapper of ``evds``, hence it can also be back-projected into the original 4D fMRI brain space. :class:`~mvpa2.measures.searchlight.Searchlight` is a powerful class that allows for complex runtime ROI generation. In this case it uses an :class:`~mvpa2.misc.neighborhood.IndexQueryEngine` to look at certain feature attributes in the dataset to compose sphere-shaped ROIs in two spaces at the same time. This approach is very flexible and can be extended with additional query engines to algorithms of almost arbitrary complexity. .. there is something that prevents us from mapping the whole dataset >>> ts = res.a.mapper.reverse1(1 - res.samples[0]) >>> ni = nb.Nifti1Image(ts, ds.a.imghdr.get_best_affine(), ... ds.a.imghdr).to_filename('ersl.nii') After all is done ----------------- .. We need to remove generated files so daily tests pass After you are done and want to tidy up after yourself, you can easily remove unneeded generated files from within Python: >>> os.unlink('ersl.nii') pymvpa2-2.2.0/doc/source/tutorial_mappers.rst000066400000000000000000000505231202542755000213110ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial_mappers: *************************************** Part 3: Mappers -- The Swiss Army Knife *************************************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] In the :ref:`previous tutorial part ` we have discovered a magic ingredient of datasets: a mapper. Mappers are probably the most powerful concept in PyMVPA, and there is little one would do without them. As a matter of fact, even in the :ref:`first tutorial part ` we have used them already, without even seeing them. In general, a mapper is an algorithm that transforms data. This transformation can be as simple as selecting a subset of data, or as complex as a multi-stage preprocessing pipeline. Some transformations are reversible, others are not. Some are simple one-step computations, others are iterative algorithms that have to be trained on data before they can be used. In PyMVPA, all these transformations are :mod:`~mvpa2.mappers`. .. note:: If you are an MDP_-user you probably have realized the similarity of MDP's nodes and PyMVPA's mappers. .. _MDP: http://mdp-toolkit.sourceforge.net/ Let's create a dummy dataset (5 samples, 12 features). This time we will use a new method to create the dataset, the ``dataset_wizard``. Here it is, fully equivalent to a regular constructor call (i.e. `~mvpa2.datasets.base.Dataset`), but we will shortly see some nice convenience aspects. >>> from mvpa2.tutorial_suite import * >>> ds = dataset_wizard(np.ones((5, 12))) >>> ds.shape (5, 12) A mapper is a :term:`dataset attribute`, hence it is stored in the corresponding attribute collection. However, not every dataset actually has a mapper. For example, the simple one we have just created doesn't have any: >>> 'mapper' in ds.a False Now let's look at a very similar dataset that only differs in a tiny but a very important detail: >>> ds = dataset_wizard(np.ones((5, 4, 3))) >>> ds.shape (5, 12) >>> 'mapper' in ds.a True >>> print ds.a.mapper We see that the resulting dataset looks identical to the one above, but this time it got created from a 3D samples array (i.e. five samples, where each is a 4x3 matrix). Somehow this 3D array got transformed into a 2D samples array in the dataset. This magic behavior is unveiled by observing that the dataset's mapper is a `~mvpa2.mappers.flatten.FlattenMapper`. The purpose of this mapper is precisely what we have just observed: reshaping data arrays into 2D. It does it by preserving the first axis (in PyMVPA datasets this is the axis that separates the samples) and concatenates all other axis into the second one. Since mappers represent particular transformations they can also be seen as a protocol of what has been done. If we look at the dataset, we know that it had been flattened on the way from its origin to a samples array in a dataset. This feature can become really useful, if the processing become more complex. Let's look at a possible next step -- selecting a subset of interesting features: >>> myfavs = [1, 2, 8, 10] >>> subds = ds[:, myfavs] >>> subds.shape (5, 4) >>> 'mapper' in subds.a True >>> print subds.a.mapper -> Now the situation has changed: *two* new mappers appeared in the dataset -- a `~mvpa2.mappers.base.ChainMapper` and a `~mvpa2.featsel.base.StaticFeatureSelection`. The latter describes (and actually performs) the slicing operation we just made, while the former encapsulates the two mappers into a processing pipeline. We can see that the mapper chain represents the processing history of the dataset like a breadcrumb track. As it has been mentioned, mappers not only can transform a single dataset, but can be feed with other data (as long as it is compatible with the mapper). >>> fwdtest = np.arange(12).reshape(4,3) >>> print fwdtest [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] >>> fmapped = subds.a.mapper.forward1(fwdtest) >>> fmapped.shape (4,) >>> print fmapped [ 1 2 8 10] Although ``subds`` has less features than our input data, forward mapping applies the same transformation that had been done to the dataset itself also to our test 4x3 array. The procedure yields a feature vector of the same shape as the one in ``subds``. By looking at the forward-mapped data, we can verify that the correct features have been chosen. Doing ``get_haxby2001_data()`` From Scratch =========================================== Now we have pretty much all the pieces that we need to perform a full cross-validation analysis. Remember, in :ref:`part one of the tutorial ` we cheated a bit, by using a magic function to load the preprocessed fMRI data. This time we are more prepared. We know how to load fMRI data from time series images, we know how to add and access attributes in a dataset, we know how to slice datasets, and we know that we can manipulate datasets with mappers. Now our goal is to combine all these little pieces into the code that produces the dataset we already used at beginning. That is: A *pattern of activation* for each stimulus category in each half of the data (split by odd vs. even runs; i.e. 16 samples), including the associated :term:`sample attribute`\ s that are necessary to perform a cross-validated classification analysis of the data. We have already seen how fMRI data can be loaded from NIfTI images, but this time we need more than just the EPI images. For a classification analysis we also need to associate each sample with a corresponding experimental condition, i.e. a class label, also sometimes called :term:`target` value. Moreover, for a cross-validation procedure we also need to partition the full dataset into, presumably, independent :term:`chunk`\ s. Independence is critical to achieve an unbiased estimate of the generalization performance of a classifier, i.e. its accuracy in predicting the correct class label for new data, unseen during training. So, where do we get this information from? Both, target values and chunks are defined by the design of the experiment. In the simplest case the target value for an fMRI volume sample is the experiment condition that has been present/active while the volume has been acquired. However, there are more complicated scenarios which we will look at later on. Chunks of independent data correspond to what fMRI volumes are assumed to be independent. The properties of the MRI acquisition process cause subsequently acquired volumes to be *very* similar, hence they cannot be considered independent. Ideally, the experiment is split into several acquisition sessions, where the sessions define the corresponding data chunks. There are many ways to import this information into PyMVPA. The most simple one is to create a two-column text file that has the target value in the first column, and the chunk identifier in the second, with one line per volume in the NIfTI image. >>> # directory that contains the data files >>> datapath = os.path.join(tutorial_data_path, 'data') >>> attr = SampleAttributes(os.path.join(datapath, 'attributes.txt')) >>> len(attr.targets) 1452 >>> print np.unique(attr.targets) ['bottle' 'cat' 'chair' 'face' 'house' 'rest' 'scissors' 'scrambledpix' 'shoe'] >>> len(attr.chunks) 1452 >>> print np.unique(attr.chunks) [ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.] :class:`~mvpa2.misc.io.base.SampleAttributes` allows us to load this type of file, and access its content. We got 1452 label and chunk values, one for each volume. Moreover, we see that there are nine different conditions and 12 different chunks. Now we can load the fMRI data, as we have done before -- only loading voxels corresponding to a mask of ventral temporal cortex, and assign the samples attributes to the dataset. `~mvpa2.datasets.mri.fmri_dataset()` allows us to pass them directly: >>> fds = fmri_dataset(samples=os.path.join(datapath, 'bold.nii.gz'), ... targets=attr.targets, chunks=attr.chunks, ... mask=os.path.join(datapath, 'mask_vt.nii.gz')) >>> fds.shape (1452, 577) >>> print fds.sa We got the dataset that we already know from the last part, but this time is also has information about chunks and targets. The next step is to extract the *patterns of activation* from the dataset that we are interested in. But wait! We know that fMRI data is typically contaminated with a lot of noise, or actually *information* that we are not interested in. For example, there are temporal drifts in the data (the signal tends to increase when the scanner is warming up). We also know that the signal is not fully homogeneous throughout the brain. All these artifacts carry a lot of variance that is (hopefully) unrelated to the experiment design, and we should try to remove it to present the classifier with the cleanest signal possible. There are countless ways to pre-process the data to try to achieve this goal. Some keywords are: high/low/band-pass filtering, de-spiking, motion-correcting, intensity normalization, and so on. In this tutorial, we keep it simple. The data we have just loaded is already motion corrected. For every experiment that is longer than a few minutes, as in this case, temporal trend removal, or :term:`detrending` is crucial. Detrending ---------- PyMVPA provides functionality to remove polynomial trends from the data, meaning that polynomials are fitted to the time series and only what is not explained by them remains in the dataset. In the case of linear detrending, this means fitting a straight line to the time series of each voxel via linear regression and taking the residuals as the new feature values. Detrending can be seen as a type of data transformation, hence in PyMVPA it is implemented as a mapper. >>> detrender = PolyDetrendMapper(polyord=1, chunks_attr='chunks') What we have just created is a mapper that will perform chunk-wise linear (1st-order polynomial) detrending. Chunk-wise detrending is desirable, since our data stems from 12 different runs, and the assumption of a continuous linear trend across all runs is not appropriate. The mapper is going to use the ``chunks`` attribute to identify the chunks in the dataset. We have seen that we could simply forward-map our dataset with this mapper. However, if we want to have the mapper present in the datasets processing history breadcrumb track, we can use its `~mvpa2.datasets.base.Dataset.get_mapped()` method. This method will cause the dataset to map a shallow copy of itself with the given mapper, and return it. Let's try: >>> detrended_fds = fds.get_mapped(detrender) >>> print detrended_fds.a.mapper --> ``detrended_fds`` is easily identifiable as a dataset that has been flattened, sliced, and linearly detrended. Normalization ------------- While this will hopefully have solved the problem of temporal drifts in the data, we still have inhomogeneous voxel intensities, but there are many possible approaches to fix it. For this tutorial we are again following a simple one, and perform a feature-wise, chunk-wise Z-scoring of the data. This has many advantages. First, it is going to scale all features into approximately the same range, and also remove their mean. The latter is quite important, since some classifiers cannot deal with not demeaned data. However, we are not going to perform a very simple Z-scoring removing the global mean, but use the *rest* condition samples of the data to estimate mean and standard deviation. Scaling features using these parameters yields a score corresponding to the per time-point voxel intensity difference from the *rest* average. This type of data :term:`normalization` is, you guessed it, also implemented as a mapper: >>> zscorer = ZScoreMapper(param_est=('targets', ['rest'])) This configures to perform a chunk-wise (the default) Z-scoring, while estimating mean and standard deviation from samples targets with 'rest' in the respective chunk of data. Remember, all mappers return new datasets that only have copies of what has been modified. However, both detrending and Z-scoring have or will modify the samples themselves. That means that the memory consumption will triple! We will have the original data, the detrended data, and the Z-scored data, but typically we are only interested in the final processing stage. The reduce the memory footprint, both mappers have siblings that perform the same processing, but without copying the data. For `~mvpa2.mappers.detrend.PolyDetrendMapper` this is `~mvpa2.mappers.detrend.poly_detrend()`, and for `~mvpa2.mappers.zscore.ZScoreMapper` this is `~mvpa2.mappers.zscore.zscore()`. The following call will do the same as the mapper we have created above, but using less memory: >>> zscore(detrended_fds, param_est=('targets', ['rest'])) >>> fds = detrended_fds >>> print fds.a.mapper ---> .. exercise:: Look at the :ref:`example_smellit` example. Using the techniques from this example, explore the dataset we have just created and look at the effect of detrending and Z-scoring. The resulting dataset is now both detrended and normalized. The information is nicely presented in the mapper. From this point on we have no use for the samples of the *rest* category anymore, hence we remove them from the dataset: >>> fds = fds[fds.sa.targets != 'rest'] >>> print fds.shape (864, 577) Computing *Patterns Of Activation* ---------------------------------- The last preprocessing step, we need to replicate, is computing the actual *patterns of activation*. In the original study Haxby and colleagues performed a GLM-analysis of odd vs. even runs of the data respectively and used the corresponding contrast statistics (stimulus category vs. rest) as classifier input. In this tutorial, we will use a much simpler shortcut and just compute *mean* samples per condition for both odd and even independently. To achieve this, we first add a new sample attribute to assign a corresponding label to each sample in the dataset, indication to which of both run-types it belongs to: >>> rnames = {0: 'even', 1: 'odd'} >>> fds.sa['runtype'] = [rnames[c % 2] for c in fds.sa.chunks] The rest is trivial. For cases like this -- applying a function (i.e. mean) to a set of groups of samples (all combinations of stimulus category and run-type) -- PyMVPA has `~mvpa2.mappers.fx.FxMapper`. it comes with a number of convenience functions. The one we need here is `~mvpa2.mappers.fx.mean_group_sample()`. It takes a list of sample attributes, determines all possible combinations of its unique values, selects dataset samples corresponding to these combinations, and averages them. Finally, since this is also a mapper, a new dataset with mean samples is returned: >>> averager = mean_group_sample(['targets', 'runtype']) >>> type(averager) >>> fds = fds.get_mapped(averager) >>> fds.shape (16, 577) >>> print fds.sa.targets ['bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe' 'bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe'] Here we go! We now have a fully-preprocessed dataset: detrended, normalized, with one sample per stimulus condition that is an average for odd and even runs respectively. Now we could do some serious classification, and we will do it :ref:`part four of the tutorial `, but there is still an important aspect of mappers we have to look at first. There and back again -- a Mapper's tale ======================================= Let's take a look back at the simple datasets from the start of the tutorial part. >>> print ds > >>> print ds.a.mapper A very important feature of mappers is that they allow to reverse a transformation, if that is possible. In case of the simple dataset we can ask the mapper to undo the flattening and to put our samples back into the original 3D shape. >>> orig_data = ds.a.mapper.reverse(ds.samples) >>> orig_data.shape (5, 4, 3) In interactive scripting sessions this is would be a relatively bulky command to type, although it might be quite frequently used. To make ones fingers suffer less there is a little shortcut that does exactly the same: >>> orig_data = ds.O >>> orig_data.shape (5, 4, 3) It is important to realize that reverse-mapping not only works with a single mapper, but also with a `~mvpa2.mappers.base.ChainMapper`. Going back to our demo dataset from the beginning we can see how it works: >>> print subds > >>> print subds.a.mapper -> >>> subds.nfeatures 4 >>> revtest = np.arange(subds.nfeatures) + 10 >>> print revtest [10 11 12 13] >>> rmapped = subds.a.mapper.reverse1(revtest) >>> rmapped.shape (4, 3) >>> print rmapped [[ 0 10 11] [ 0 0 0] [ 0 0 12] [ 0 13 0]] Reverse mapping of a single sample (one-dimensional feature vector) through the mapper chain created a 4x3 array that corresponds to the dimensions of a sample in our original data space. Moreover, we see that each feature value is precisely placed into the position that corresponds to the features selected in the previous dataset slicing operation. But now let's look at our fMRI dataset again. Here the mapper chain is a little more complex: >>> print fds.a.mapper ----> Initial flattening followed by mask, detrending, Z-scoring and finally averaging. We would reverse mapping do in this case? Let's test: >>> fds.nfeatures 577 >>> revtest = np.arange(100, 100 + fds.nfeatures) >>> rmapped = fds.a.mapper.reverse1(revtest) >>> rmapped.shape (40, 64, 64) What happens is exactly what we expect: The initial one-dimensional vector is passed backwards through the mapper chain. Reverting a group-based averaging doesn't make much sense for a single vector, hence it is ignored. Same happens for Z-Scoring and temporal detrending. However, for all remaining mappers the transformations are reverse. First unmasked, and then reshaped into the original dimensionality -- the brain volume. We can check that this is really the case by only reverse-mapping through the first two mappers in the chain and compare the result: >>> rmapped_partial = fds.a.mapper[:2].reverse1(revtest) >>> (rmapped == rmapped_partial).all() True In case you are wondering: The `~mvpa2.mappers.base.ChainMapper` behaves like a regular Python list. We have just selected the first two mappers in the list as another `~mvpa2.mappers.base.ChainMapper` and used that one for reverse-mapping. Back To NIfTI ------------- One last interesting aspect in the context of reverse mapping: Whenever it is necessary to export data from PyMVPA, such as results, dataset mappers also play a critical role. For example we can easily export the ``revtest`` vector into a NIfTI brain volume image. This is possible because the mapper can put it back into 3D space, and because the dataset also stores information about the original source NIfTI image. >>> 'imghdr' in fds.a True PyMVPA offers `~mvpa2.datasets.mri.map2nifti()`, a function to combine these two things and convert any vector into the corresponding NIfTI image: >>> nimg = map2nifti(fds, revtest) This image can now be stored as a file (e.g. ``nimg.save('mytest.nii.gz')``). In this format it is now compatible with the vast majority of neuroimaging software. .. exercise:: Save the NIfTI image to some file, and use an MRI viewer to overlay it on top of the anatomical image in the demo dataset. Does it match our original mask image of ventral temporal cortex? There are much more mappers in PyMVPA than we could cover in the tutorial part. Some more will be used in other parts, but even more can be found the :mod:`~mvpa2.mappers` module. Even though they all implement different transformations, they can all be used in the same way, and can all be combined into a chain. Now we are really ready for :ref:`part four of the tutorial `. pymvpa2-2.2.0/doc/source/tutorial_multiclass_hyp.rst000066400000000000000000000116471202542755000227060ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial_multiclass_hyp: ************************** Part X: Hypothesis testing ************************** Let's revisit the classification problem from :ref:`the chapter on classifiers `. >>> from mvpa2.tutorial_suite import * >>> ds = get_haxby2001_data_alternative(roi='vt', grp_avg=False) >>> print ds.sa['targets'].unique ['bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe'] >>> clf = kNN(k=1, dfx=one_minus_correlation, voting='majority') >>> cv = CrossValidation(clf, NFoldPartitioner(), errorfx=mean_mismatch_error, ... enable_ca=['stats']) >>> cv_results = cv(ds) >>> print '%.2f' % np.mean(cv_results) 0.53 So here we have an 8-way classification problem, and during the cross-validation procedure the chosen classifiers makes correct predictions for approximately half of the data points. The big question is now: **What does that tell us?** There are many scenarios that could lead to this prediction performance. It could be that the fitted classifier model is very good, but only capture the data variance for half of the data categories/classes. It could also be that the classifier model quality is relatively poor and makes an equal amount of errors for all classes. In both cases the average accuracy will be around 50%, and most likely **highly significant**, given a chance performance of 1/8. We could now spend some time testing this significance with expensive permutation tests, or making assumptions on the underlying distribution. However, that would only give us a number telling us that the average accuracy is really different from chance, but it doesn't help with the problem that the accuracy really doesn't tell us much about what we are interested in. Interesting hypotheses in the context of this dataset could be whether the data carry a signal that can be used to distinguish brain response patterns from animate vs. inanimate stimulus categories, or whether data from object-like stimuli are all alike and can only be distinguished from random noise, etc. One can imagine to run such an analysis on data from different parts of the brain and the results change -- without necessarily having a big impact on the overall classification accuracy. A lot more interesting information is available from the confusion matrix, a contingency table showing prediction targets vs. actual predictions. >>> print cv.ca.stats.matrix [[36 7 18 4 1 18 15 18] [ 3 56 6 18 0 3 7 5] [ 2 2 21 0 4 0 3 1] [ 3 16 0 76 4 5 3 1] [ 1 1 6 1 97 1 4 0] [20 5 15 4 0 29 15 11] [ 0 1 0 0 0 2 19 0] [43 20 42 5 2 50 42 72]] We can see a strong diagonal, but also block-like structure, and have to realize that simply staring at the matrix doesn't help us to easily assess the likelihood of any of our hypothesis being true or false. It is trivial to do a Chi-square test of the confusion table... >>> print 'Chi^2: %.3f (p=%.3f)' % cv.ca.stats.stats["CHI^2"] Chi^2: 1942.519 (p=0.000) ... but, again, it doesn't tell us anything other than the classifier not just doing random guesses. It would be much more useful, if we could estimate how likely it is, given the observed confusion matrix, that the employed classifier is able to discriminate *all* stimulus classes from each other, and not just a subset. Even more useful would be, if we could relate this probability to specific alternative hypotheses, such as an animate/inanimate-only distinction. :ref:`Olivetto et al. (2012) ` have devised a method that allows for doing exactly that. The confusion matrix is analyzed in a Bayesian framework regarding the statistical dependency of observed and predicted class labels. Confusions within a set of classes that cannot be discriminated should be independently distributed, while there should be a statistical dependency of confusion patterns within any set of classes that can all be discriminated from each other. This algorithm is available in the :class:`mvpa2.clfs.transerror.BayesConfusionHypothesis` node. >>> cv = CrossValidation(clf, NFoldPartitioner(), ... errorfx=None, ... postproc=ChainNode((Confusion(labels=ds.UT), ... BayesConfusionHypothesis()))) >>> cv_results = cv(ds) >>> print cv_results.fa.stat ['log(p(C|H))' 'log(p(H|C))'] Most likely hypothesis to explain this confusion matrix print cv_results.sa.hypothesis[np.argsort(cv_results.samples[:,1])[-1]] [['bottle'], ['cat'], ['chair'], ['face'], ['house'], ['scissors'], ['scrambledpix'], ['shoe']] References ========== pymvpa2-2.2.0/doc/source/tutorial_prerequisites.rst000066400000000000000000000207541202542755000225510ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial_prerequisites: ********************** Tutorial Prerequisites ********************** The PyMVPA tutorial assumes some basic knowledge about programming in Python. For a short self-assessment of your Python skills, please read the following questions. If you have an approximate answer to each of them, you can safely proceed to the tutorial. Otherwise, it is recommended that you take a look at the Python documentation resources listed under `Recommended Reading and Viewing`_. .. _Python: http://www.python.org * Are you using *spaces* or *tabs* for indentation? Why is that important to know? * What is the difference between `import numpy` and `from numpy import *`? * What is the difference between a Python list and a tuple? * What is the difference between a Python list and a Numpy `ndarray`? * What is the difference between an *iterable* and a *generator* in Python? * What is a *list comprehension*? * What is a *callable*? * What are `*args` and `**kwargs` usually used for? * When would you use `?` or `??` in IPython? * What is the difference between a *deep* copy and a *shallow* copy? * What is a *derived class*? * Is it always a problem whenever a Python *exception* is raised? If you could not answer many questions: **Don't panic!** Python is known to be an easy-to-learn language. If you are already proficient in *any* other programming language, you can expect to be able to write fairly complex Python programs after a weekend of training. What Do I Need To Get Python Running ------------------------------------ PyMVPA code is compatible with Python 2.X series (more precisely >= 2.4). Python 3.x is supported as well, but not as widely used (yet), and many 3rd-party Python modules are still lacking Python 3 support. For now, we recommend Python 2.7 for production, but Python 2.6 should work equally well. Any machine which has Python 2.X available can be used for PyMVPA-based processing (see :ref:`Download section ` on how to deploy PyMVPA on your system). Any GNU/Linux distribution already comes with Python by default. The Python website offers `installers for Windows and MacOS X`_. .. _installers for Windows and MacOS X: http://www.python.org/download However, PyMVPA can make use of many additional software packages to enhance its functionality. Therefore it is preferable to use a Python distribution that offers are large variety of scientific Python packages. For Windows, `Python(x,y)`_ matches these requirements. For MacOS X, the MacPorts_ project offers a large variety of Python packages (including PyMVPA). .. _Python(x,y): http://www.pythonxy.com .. _MacPorts: http://www.macports.org The ideal environment is, however, the Debian_ operating system. Debian offers the largest selection of free and open-source software in the world, and runs on almost any machine. Moreover, the NeuroDebian_ project provides Debian packages for a number of popular neuroscience software package, such as AFNI_ and FSL_. .. _Debian: http://www.debian.org .. _NeuroDebian: http://neuro.debian.net For those who just want to quickly try PyMVPA, or do not want to deal with installing multiple software package we recommend the `NeuroDebian Virtual Machine`_. This is a virtual Debian installation that can be deployed on Linux, Windows, and MacOS X in a matter of minutes. It includes many Python packages, PyMVPA, and other neuroscience software (including AFNI_ and FSL_). .. _NeuroDebian Virtual Machine: http://neuro.debian.net/vm.html .. _AFNI: http://afni.nimh.nih.gov/afni .. _FSL: http://www.fmrib.ox.ac.uk/fsl Recommended Reading and Viewing ------------------------------- This section contains a recommended list of useful resources, ranging from basic Python programming to efficient scientific computing with Python. Tutorial Introductions Into General Python Programming ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ http://en.wikibooks.org/wiki/Non-Programmer's_Tutorial_for_Python_2.6 Basic from-scratch introduction into Python. This should give you the basics, even if you had *no* prior programming experience. http://www.ibiblio.org/swaroopch/byteofpython/read/ From the author: The aim is that if all you know about computers is how to save text files, then you can learn Python from this book. If you have previous programming experience, then you can also learn Python from this book. We recommend reading the PDF version that is a lot better formatted. http://www.diveintopython.net A famous tutorial that served as the entry-point into Python for many people. However, it has a relatively steep learning curve, and also covers various topics which aren't in the focus of scientific computing. http://docs.python.org/tutorial/ Written by the creator of Python itself, this is a more comprehensive, but also more compressed tutorial that can serve as a reference. Recommended as resource for people with basic programming experience in *some* language. Scientific Computing In Python ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Python_ itself is "just" a generic programming language. To employ Python for scientific computing, where a common analysis deals with vast amounts of numerical data, more specialized tools are needed -- and are provided by the NumPy_ package. PyMVPA makes extensive use of NumPy data structures and functions, therefore we recommend you to get familiar with it. .. _NumPy: http://numpy.scipy.org http://www.scipy.org/Tentative_NumPy_Tutorial Useful for a first glimpse at NumPy -- the basis for scientific computing in Python. http://mathesaurus.sourceforge.net/ Valuable resource for people coming from other languages and environments, such as Matlab. This pages offers cheat sheets with the equivalents of commands and expressions in various languages, including Matlab, R and Python. http://www.tramy.us/numpybook.pdf This is *the* comprehensive reference manual of the NumPy package. It gives answers to questions, yet to be asked. Interactive Python Shell ~~~~~~~~~~~~~~~~~~~~~~~~ To make interactive use of Python more enjoyable and productive, we suggest to explore an enhanced interactive environment for Python -- IPython_. .. _IPython: http://ipython.org http://fperez.org/papers/ipython07_pe-gr_cise.pdf An article from one of the authors of IPython in the *Computing in Science and Engineering* journal, describing goals and basic features of IPython. http://showmedo.com/videotutorials/series?name=CnluURUTV Video tutorials from Jeff Rush walking you through basic and advanced features of IPython. While doing that he also exposes basic constructs of Python, so you might like to watch this video whenever you already have basic programming experience with any programming language. http://ipython.org/documentation.html IPython documentation page which references additional materials, such as the main IPython documentation which extensively covers features of IPython. Multivariate Analysis of Neuroimaging Data ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There is a constantly growing number of interesting articles related to the field -- visit :ref:`chap_references` for an extended but not exhaustive list of related publications. For a quick introduction into the topic read :ref:`Pereira et. al. 2009 `. For the generic reference on machine learning methods we would recommend a great text book :ref:`The Elements of Statistical Learning: Data Mining, Inference, and Prediction ` by `Trevor Hastie`_, `Robert Tibshirani`_, and `Jerome Friedman`_ , PDF of which was generously made available online_ free of charge. For an overview of recent advances in computational approaches for modeling and decoding of stimulus and cognitive spaces we recommend video recordings from `Neural Computation 2011 Workshop at Dartmouth College `_. .. _online: .. _The Elements of Statistical Learning\: Data Mining, Inference, and Prediction: http://www-stat.stanford.edu/~tibs/ElemStatLearn/ .. _Trevor Hastie: http://www-stat.stanford.edu/~hastie/ .. _Robert Tibshirani: http://www-stat.stanford.edu/~tibs/ .. _Jerome Friedman: http://www-stat.stanford.edu/~jhf/ pymvpa2-2.2.0/doc/source/tutorial_searchlight.rst000066400000000000000000000330031202542755000221310ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial_searchlight: ****************** Part 5: Searchlite ****************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] The :ref:`previous tutorial part ` ended with the insight that we still have no clue about where in the brain (or our chosen ROIs) the signal is located that is picked up by the classifier. And that is despite the fact that we have analyzed the data repeatedly, with different classifiers and investigated error rates and confusion matrices. So what can we do? Ideally, we would like to have something that estimates a score per each feature that indicates how important that particular feature (most of the time a voxel) is in the context of a certain classification task. There are various possibilities to get a vector of such per feature scores in PyMVPA. We could simply compute an ANOVA_ F-score per each feature, yielding scores that would tell us which features vary significantly between any of the categories in our dataset. .. _ANOVA: http://en.wikipedia.org/wiki/Analysis_of_variance Before we can take a look at the implementation details, let's first recreate our preprocessed demo dataset. The code is taken verbatim from the :ref:`previous tutorial part ` and should raise no questions. We get a dataset with one sample per category per run. >>> from mvpa2.tutorial_suite import * >>> # alt: `ds = load_tutorial_results('ds_haxby2001')` >>> ds = get_haxby2001_data(roi='vt') >>> ds.shape (16, 577) Measures -------- Now that we have the dataset, computing the desired ANOVA F-scores is relatively painless: >>> aov = OneWayAnova() >>> f = aov(ds) >>> print f > If the code snippet above is of no surprise then you probably got the basic idea. We created an object instance ``aov`` being a :class:`~mvpa2.measures.anova.OneWayAnova`. This instance is subsequently *called* with a dataset and yields the F-scores wrapped into a :class:`~mvpa2.datasets.base.Dataset`. Where have we seen this before? Right! This one differs little from a call to :class:`~mvpa2.measures.base.CrossValidation`. Both are objects that get instantiated (potentially with some custom arguments) and yield the results in a dataset when called with an input dataset. This is called a :term:`processing object` and is a common concept in PyMVPA. However, there is a difference between the two processing objects. :class:`~mvpa2.measures.base.CrossValidation` returns a dataset with a single feature -- the accuracy or error rate, while :class:`~mvpa2.measures.anova.OneWayAnova` returns a vector with one value per feature. The latter is called a :class:`~mvpa2.measures.base.FeaturewiseMeasure`. But other than the number of features in the returned dataset there is not much of a difference. All measures in PyMVPA, for example, support an optional post-processing step. During instantiation of a measure an arbitrary mapper can be specified to be called internally to forward-map the results before they are returned. If, for some reason, the F-scores need to be scaled into the interval [0,1], an :class:`~mvpa2.mappers.fx.FxMapper` can be used to achieve that: >>> aov = OneWayAnova( ... postproc=FxMapper('features', ... lambda x: x / x.max(), ... attrfx=None)) >>> f = aov(ds) >>> print f.samples.max() 1.0 .. map2nifti(ds, f).to_filename('results/res_haxby2001_fscore_vt.nii.gz') .. exercise:: Map the F-scores back into a brain volume and look at their distribution in the ventral temporal ROI. Now that we know how to compute feature-wise F-scores we can start worrying about them. Our original goal was to decipher information that is encoded in the multivariate pattern of brain activation. But now we are using an ANOVA, a **univariate** measure, to localize important voxels? There must be something else -- and there is! Searching, searching, searching, ... ------------------------------------ :ref:`Kriegeskorte et al. (2006) ` suggested an algorithm that takes a small, sphere-shaped neighborhood of brain voxels and computes a multivariate measure to quantify the amount of information encoded in its pattern (e.g. `mutual information`_). Later on this :term:`searchlight` approach has been extended to run a full classifier cross-validation in every possible sphere in the brain. Since that, multiple studies have employed this approach to localize relevant information in a locally constraint fashion. .. _mutual information: http://en.wikipedia.org/wiki/Mutual_information We know almost all pieces to implement a searchlight analysis in PyMVPA. We can load and preprocess datasets, we can set up a cross-validation procedure. >>> clf = kNN(k=1, dfx=one_minus_correlation, voting='majority') >>> cvte = CrossValidation(clf, HalfPartitioner()) The only thing left is that we have to split the dataset into all possible sphere neighborhoods that intersect with the brain. To achieve this, we can use :func:`~mvpa2.measures.searchlight.sphere_searchlight`: >>> sl = sphere_searchlight(cvte, radius=3, postproc=mean_sample()) This single line configures a searchlight analysis that runs a full cross-validation in every possible sphere in the dataset. Each sphere has a radius of three voxels. The algorithm uses the coordinates (by default ``voxel_indices``) stored in a feature attribute of the input dataset to determine local neighborhoods. From the ``postproc`` argument you might have guessed that this object is also a measure -- and your are right. This measure returns whatever value is computed by the basic measure (here this is a cross-validation) and assigns it to the feature representing the center of the sphere in the output dataset. For this initial example we are not interested in the full cross-validation output (error per each fold), but only in the mean error, hence we are using an appropriate mapper for post-processing. As with any other :term:`processing object` we have to call it with a dataset to run the actual analysis: >>> res = sl(ds) >>> print res , > That was it. However, this was just a toy example with only our ventral temporal ROI. Let's now run it on a much larger volume, so we can actually localize something (even loading and preprocessing will take a few seconds). We will reuse the same searchlight setup and run it on this data as well. Due to the size of the data it might take a few minutes to compute the results, depending on the number of CPUs in the system. >>> # alt: `ds = load_tutorial_results('ds_haxby2001_alt_roi0')` >>> ds = get_haxby2001_data_alternative(roi=0) >>> print ds.nfeatures 34888 >>> # alt: `res = load_tutorial_results('res_haxby2001_sl_avgacc_roi0')` >>> res = sl(ds) .. h5save("results/ds_haxby2001_alt_roi0.hdf5", ds, compression=9) .. h5save('results/res_haxby2001_sl_avgacc_roi0.hdf5', res) Now let's see what we got. Since a vector with 35k elements is a little hard to comprehend we have to resort to some statistics. >>> sphere_errors = res.samples[0] >>> res_mean = np.mean(res) >>> res_std = np.std(res) >>> # we deal with errors here, hence 1.0 minus >>> chance_level = 1.0 - (1.0 / len(ds.uniquetargets)) .. map2nifti(ds, 1.0 - sphere_errors).to_filename('results/res_haxby2001_sl_avgacc_roi0.nii.gz') As you'll see, the mean empirical error is just barely below the chance level. However, we would not expect a signal for perfect classification performance in all spheres anyway. Let's see for how many spheres the error is more the two standard deviations lower than chance. >>> frac_lower = np.round(np.mean(sphere_errors < chance_level - 2 * res_std), 3) So in almost 10% of all spheres the error is substantially lower than what we would expect for random guessing of the classifier -- that is more than 3000 spheres! .. exercise:: Look at the distribution of the errors (hint: ``hist(sphere_errors, bins=np.linspace(0, 1, 18))``. What do you think in how many spheres the classifier actually picked up real signal? What would be a good value to threshold the errors to distinguish false from true positives? Think of it in the context of statistical testing of fMRI data results. What problems are we facing here? Once you are done thinking about that -- and only *after* you're done, project the sphere error map back into the fMRI volume and look at it as a brain overlay in your favorite viewer (hint: you might want to store accuracies instead of errors, if your viewer cannot visualize the lower tail of the distribution: ``map2nifti(ds, 1.0 - sphere_errors).to_filename('sl.nii.gz')``). Did looking at the image change your mind? .. # figure for the error distribution (empirical and binomial) bins = 18 distr = [] for i in xrange(100): # random binomial variable with errors for each sphere r= 1.0 - (stats.binom.rvs(len(ds), 1.0 / len(ds.uniquetargets), size=ds.nfeatures) / float(len(ds))) distr.append(histogram(r, range=(0, 1), bins=bins, normed=True)[0]) distr = np.array(distr) loc = hist(sphere_errors, range=(0, 1), bins=bins, normed=True)[1] plot(loc[:-1] + 1.0/bins/2, distr.mean(axis=0), 'rx--') ylim(0,6) axvline(0.875, color='red', linestyle='--') axvline(res_mean, color='0.3', linestyle='--') For real! --------- Now that we have an idea of what can happen in a searchlight analysis, let's do another one, but this time on a more familiar ROI -- the full brain. .. exercise:: Load the dataset with ``get_haxby2001_data_alternative(roi='brain')`` this will apply any required preprocessing for you. Now run a searchlight analysis for radii 0, 1 and 3. For each resulting error map look at the distribution of values, project them back into the fMRI volume and compare them. How does the distribution change with radius and how does it compare to results of the previous exercise? What would be a good choice for the threshold in this case? .. h5save('results/ds_haxby2001_alt_brain.hdf5', ds) .. h5save('results/res_haxby2001_sl_avgacc_r0_brain.hdf5', r0) .. map2nifti(ds, 1.0 - r0.samples[0]).to_filename('results/res_haxby2001_sl_avgacc_r0_brain.nii.gz') .. h5save('results/res_haxby2001_sl_avgacc_r1_brain.hdf5', r1) .. map2nifti(ds, 1.0 - r1.samples[0]).to_filename('results/res_haxby2001_sl_avgacc_r1_brain.nii.gz') .. h5save('results/res_haxby2001_sl_avgacc_r3_brain.hdf5', r3) .. map2nifti(ds, 1.0 - r3.samples[0]).to_filename('results/res_haxby2001_sl_avgacc_r3_brain.nii.gz') You have now performed a number of searchlight analyses, investigated the results and probably tried to interpret them. What conclusions did you draw from these analyses in terms of the neuroscientific aspects? What have you learned about object representation in the brain? In this case we have run 8-way classification analyses and have looked at the average error rate across all conditions of thousands of sphere-shaped ROIs in the brain. In some spheres the classifier could perform well, i.e. it could predict all samples equally well. However, this only applies to a handful of over 30k spheres we have tested, and does not unveil either classifier was capable of classifying *all* of the conditions or just some. For the vast majority we observe errors somewhere between the theoretical chance level and zero and we don't know what caused the error to decrease. We don't even know which samples get misclassified. From the :ref:`previous tutorial part ` we know that there is a way out of this dilemma. We can look at the confusion matrix of a classifier to get a lot more information that is otherwise hidden. However, we cannot reasonably do this for thousands of searchlight spheres (Note that this is not completely true. See e.g. :ref:`Connolly et al., 2012 ` for some creative use-cases for searchlights). It becomes obvious that a searchlight analysis is probably not the end of a data exploration but rather a crude take off, as it raises more questions than it answers. Moreover, a searchlight cannot detect signals that extend beyond a small local neighborhood. This property effectively limits the scope of analyses that can employ this strategy. A study looking a global brain circuitry will hardly restrict the analysis to patches of few cubic millimeters of brain tissue. As we have seen before, searchlights also have another nasty aspect. Although they provide us with a multivariate localization measure, they also inherit the curse of univariate fMRI data analysis -- `multiple comparisons`_. The :ref:`next tutorial part ` will offers some alternatives that are more gentle in this respect. .. _multiple comparisons: http://en.wikipedia.org/wiki/Multiple_comparisons Despite these limitations a searchlight analysis can be a valuable exploratory tool if used appropriately. The capabilities of PyMVPA's searchlight implementation go beyond what we looked at in this tutorial. It is not only possible to run *spatial* searchlights, but multiple spaces can be considered simultaneously. We will get back to these more advanced topics later on. pymvpa2-2.2.0/doc/source/tutorial_sensitivity.rst000066400000000000000000000473111202542755000222350ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial .. _chap_tutorial_sensitivity: ********************************************************* Part 6: Looking Without Searching -- Sensitivity Analysis ********************************************************* .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] In the :ref:`previous tutorial part ` we made a first attempt to localize information in the brain that is relevant to a particular classification analyses. While we were relatively successful, we experienced some problems and also had to wait quite a bit. Here we want to look at another approach to localization. To get started, we pre-process the data as we have done before and perform volume averaging to get a single sample per stimulus category and original experiment session. >>> from mvpa2.tutorial_suite import * >>> # alt: `ds = load_tutorial_results('ds_haxby2001_blkavg_brain')` >>> ds = get_raw_haxby2001_data(roi='brain') >>> print ds.shape (1452, 39912) >>> # pre-process >>> poly_detrend(ds, polyord=1, chunks_attr='chunks') >>> zscore(ds, param_est=('targets', ['rest'])) >>> ds = ds[ds.sa.targets != 'rest'] >>> # average >>> run_averager = mean_group_sample(['targets', 'chunks']) >>> ds = ds.get_mapped(run_averager) >>> print ds.shape (96, 39912) .. h5save('results/ds_haxby2001_blkavg_brain.hdf5', ds) A searchlight analysis on this dataset would look exactly as we have seen :ref:`before `, but it would take a bit longer due to a higher number of samples. The error map that is the result of a searchlight analysis only offers an approximate localization. First, it is smeared by the overlapping spheres and second the sphere-shaped ROIs probably do not reflect the true shape and extent of functional subregions in the brain. Therefore, it mixes and matches things that might not belong together. It would be much nicer if we were able to obtain a per-feature measure, where each value can really be attributed to the respective feature and not just to an area surrounding it. .. _chap_magic_feature_selection: It's A Kind Of Magic -------------------- One way to get such a measure is to inspect the classifier itself. Each classifier creates a model to map from the training data onto the respective target values. In this model, classifiers typically associate some sort of weight with each feature that is an indication of its impact on the classifiers decision. How we can get this information from a classifier will be the topic of this tutorial. However, if we want to inspect a trained classifier, we first have to train one. But hey, we have a full brain dataset here with almost 40k features. Will we be able to do that? Well, let's try (and hope that there is still a warranty on the machine you are running this on...). We will use a simple cross-validation procedure with a linear support vector machine. We will also be interested in summary statistics of the classification, a confusion matrix in our case of classification: >>> clf = LinearCSVMC() >>> cvte = CrossValidation(clf, NFoldPartitioner(), ... enable_ca=['stats']) Ready, set, go! >>> results = cvte(ds) That was surprisingly quick, wasn't it? But was it any good? >>> print np.round(cvte.ca.stats.stats['ACC%'], 1) 26.0 >>> print cvte.ca.stats.matrix [[1 1 2 3 0 1 1 1] [1 2 2 0 2 2 3 1] [5 3 3 0 4 4 0 2] [3 2 0 5 0 0 0 1] [0 3 1 0 3 2 0 0] [0 0 0 0 0 0 1 0] [0 1 4 3 2 1 7 3] [2 0 0 1 1 2 0 4]] Well, the accuracy is not exactly at a chance level, but the confusion matrix doesn't seem to have any prominent diagonal. It looks like, although we can easily train a support vector machine on the full brain dataset, it cannot construct a reliably predicting model. At least we are in the lucky situation to already know that there is some signal in the data, hence we can attribute this failure to the classifier. In most situations it would be as likely that there is actually no signal in the data... Often people claim that classification performance improves with :term:`feature selection`. If we can reduce the dataset to the important ones, the classifier wouldn't have to deal with all the noise anymore. A simple approach would be to compute a full-brain ANOVA and only go with the voxels that show some level of variance between categories. From the :ref:`previous tutorial part ` we know how to compute the desired F-scores and we could use them to manually select features with some threshold. However, PyMVPA offers a more convenient way -- feature selectors: >>> fsel = SensitivityBasedFeatureSelection( ... OneWayAnova(), ... FixedNElementTailSelector(500, mode='select', tail='upper')) The code snippet above configures such a selector. It uses an ANOVA measure to select 500 features with the highest F-scores. There are a lot more ways to perform the selection, but we will go with this one for now. The :class:`~mvpa2.featsel.base.SensitivityBasedFeatureSelection` instance is yet another :term:`processing object` that can be called with a dataset to perform the feature selection: >>> fsel.train(ds) >>> ds_p = fsel(ds) >>> print ds_p.shape (96, 500) This is the dataset we wanted, so we can rerun the cross-validation and see if it helped. But first, take a step back and look at this code snippet again. There is an object that gets called with a dataset and returns a dataset. You cannot prevent noticing the striking similarity between a measure in PyMVPA or a mapper. And yes, feature selection procedures are also :term:`processing object`\ s and work just like measures or mappers. Now back to the analysis: >>> results = cvte(ds_p) >>> print np.round(cvte.ca.stats.stats['ACC%'], 1) 79.2 >>> print cvte.ca.stats.matrix [[ 5 0 3 0 0 3 0 2] [ 0 11 0 0 0 0 0 0] [ 0 0 7 0 0 1 0 0] [ 2 1 0 12 0 0 0 0] [ 0 0 0 0 12 0 0 0] [ 2 0 1 0 0 8 0 0] [ 0 0 1 0 0 0 12 1] [ 3 0 0 0 0 0 0 9]] Yes! We did it. Almost 80% correct classification for an 8-way classification and the confusion matrix has a strong diagonal. Apparently, the ANOVA-selected features were the right ones. .. exercise:: If you are not yet screaming or started composing an email to the PyMVPA mailing list pointing to a major problem in the tutorial, you need to reconsider what we have just done. Why is this wrong? Let's repeat this analysis on a subset of the data. We select only ``bottle`` and ``shoe`` samples. In the analysis we just did, they are relatively often confused by the classifier. Let's see how the full brain SVM performs on this binary problem >>> bin_demo = ds[np.array([i in ['bottle', 'shoe'] for i in ds.sa.targets])] >>> results = cvte(bin_demo) >>> print np.round(cvte.ca.stats.stats['ACC%'], 1) 62.5 Not much, but that doesn't surprise. Let's see what effect our ANOVA-based feature selection has >>> fsel.train(bin_demo) >>> bin_demo_p = fsel(bin_demo) >>> results = cvte(bin_demo_p) >>> print cvte.ca.stats.stats["ACC%"] 100.0 Wow, that is a jump. Perfect classification performance, even though the same categories couldn't be distinguished by the same classifier, when trained on all eight categories. I guess, it is obvious that our way of selecting features is somewhat fishy -- if not illegal. The ANOVA measure uses the full dataset to compute the F-scores, hence it determines which features show category differences in the whole dataset, including our supposed-to-be independent testing data. Once we have found these differences, we are trying to rediscover them with a classifier. Being able to do that is not surprising, and precisely constitutes the *double-dipping* procedure. As a result, both the obtained prediction accuracy and the created model are potentially completely meaningless. Thanks For The Fish ------------------- To implement an ANOVA-based feature selection *properly* we have to do it on the training dataset **only**. The PyMVPA way of doing this is via a :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier`: >>> fclf = FeatureSelectionClassifier(clf, fsel) This is a :term:`meta-classifier` and it just needs two things: A basic classifier to do the actual classification work and a feature selection object. We can simply re-use the object instances we already had. Now we got a meta-classifier that can be used just as any other classifier. Most importantly we can plug it into a cross-validation procedure (almost identical to the one we had in the beginning). >>> cvte = CrossValidation(fclf, NFoldPartitioner(), ... enable_ca=['stats']) >>> results = cvte(bin_demo) >>> print np.round(cvte.ca.stats.stats['ACC%'], 1) 70.8 This is a lot worse and a lot closer to the truth -- or a so-called :term:`unbiased estimate` of the generalizability of the classifier model. Now we can also run this improved procedure on our original 8-category dataset. >>> results = cvte(ds) >>> print np.round(cvte.ca.stats.stats['ACC%'], 1) 78.1 >>> print cvte.ca.stats.matrix [[ 5 0 2 0 0 4 0 2] [ 0 10 0 0 0 0 0 0] [ 0 0 8 0 0 1 0 0] [ 2 2 0 12 0 0 0 0] [ 0 0 0 0 12 0 0 0] [ 1 0 1 0 0 7 0 0] [ 0 0 1 0 0 0 12 1] [ 4 0 0 0 0 0 0 9]] That is still a respectable accuracy for an 8-way classification and the confusion table also confirms this. Dissect The Classifier ---------------------- But now back to our original goal: getting the classifier's opinion about the importance of features in the dataset. With the approach we have used above, the classifier is trained on 500 features. We can only have its opinion about those. Although this is just few times larger than a typical searchlight sphere, we already have lifted the spatial constraint of searchlights -- these features can come from all over the brain. However, we still want to consider more features, so we are changing the feature selection to retain more. >>> fsel = SensitivityBasedFeatureSelection( ... OneWayAnova(), ... FractionTailSelector(0.05, mode='select', tail='upper')) >>> fclf = FeatureSelectionClassifier(clf, fsel) >>> cvte = CrossValidation(fclf, NFoldPartitioner(), ... enable_ca=['stats']) >>> results = cvte(ds) >>> print np.round(cvte.ca.stats.stats['ACC%'], 1) 70.8 A drop of 8% in accuracy on about 4 times the number of features. This time we asked for the top 5% of F-scores. But how do we get the weight, finally? In PyMVPA many classifiers are accompanied with so-called :term:`sensitivity analyzer`\ s. This is an object that knows how to get them from a particular classifier type (since each classification algorithm hides them in different places). To create this *analyzer* we can simply ask the classifier to do it: >>> sensana = fclf.get_sensitivity_analyzer() >>> type(sensana) As you can see, this even works for our meta-classifier. And again this analyzer is a :term:`processing object` that returns the desired sensitivity when called with a dataset. >>> # alt: `sens = load_tutorial_results('res_haxby2001_sens_5pANOVA')` >>> sens = sensana(ds) >>> type(sens) >>> print sens.shape (28, 39912) .. h5save('results/res_haxby2001_sens_5pANOVA.hdf5', sens) Why do we get 28 sensitivity maps from the classifier? The support vector machine is constructs a model for binary classification problems. To be able to deal with this 8-category dataset, the data is internally split into all possible binary problems (there are exactly 28 of them). The sensitivities are extracted for all these partial problems. .. exercise:: Figure out which sensitivity map belongs to which combination of categories. If you are not interested in this level of detail, we can combine the maps into one, as we have done with dataset samples before. A feasible algorithm might be to take the per feature maximum of absolute sensitivities in any or the maps. The resulting map will be an indication of the importance of feature for *some* partial classification. >>> sens_comb = sens.get_mapped(maxofabs_sample()) .. exercise:: Project this sensitivity map back into the fMRI volume and compare it to the searchlight maps of different radii from the :ref:`previous tutorial part `. .. map2nifti(ds, sens_comb).to_filename('results/res_haxby2001_sens_maxofabs_5pANOVA.nii.gz') You might have noticed some imperfection in our recent approach to compute a full-brain sensitivity map. We derived it from the full dataset, and not from cross-validation splits of the data. Rectifying it is easy with a meta-measure. A meta-measure is analogous to a meta-classifier: a measure that takes a basic measure, adds a processing step to it and behaves like a measure itself. The meta-measure we want to use is :class:`~mvpa2.measures.base.SplitFeaturewiseMeasure`. >>> # alt: `sens = load_tutorial_results('res_haxby2001_splitsens_5pANOVA')` >>> sensana = fclf.get_sensitivity_analyzer(postproc=maxofabs_sample()) >>> cv_sensana = RepeatedMeasure(sensana, NFoldPartitioner()) >>> sens = cv_sensana(ds) >>> print sens.shape (12, 39912) .. h5save('results/res_haxby2001_splitsens_5pANOVA.hdf5', sens) We re-create our basic sensitivity analyzer, this time automatically applying the post-processing step that combines the sensitivity maps for all partial classifications. Finally, we plug it into the meta-measure that uses an :class:`~mvpa2.datasets.splitters.NFoldSplitter` to split the dataset. Afterwards, we can run the analyzer and we get another dataset, this time with a sensitivity map per each cross-validation split. We could combine these maps in a similar way as before, but let's look at the stability of the ANOVA feature selection instead. >>> ov = MapOverlap() >>> overlap_fraction = ov(sens.samples > 0) With the :class:`~mvpa2.misc.support.MapOverlap` helper we can easily compute the fraction of features that have non-zero sensitivities in all dataset splits. .. exercise:: Inspect the ``ov`` object. Access that statistics map with the fraction of per-feature selections across all splits and project them back into the fMRI volume to investigate them. This could be the end of the data processing. However, by using the meta measure to compute the sensitivity maps we have lost a convenient way to access the total performance of the underlying classifier. To again gain access to it, and get the sensitivities at the same time, we can twist the processing pipeline a bit. >>> sclf = SplitClassifier(fclf, enable_ca=['stats']) >>> cv_sensana = sclf.get_sensitivity_analyzer() >>> sens = cv_sensana(ds) >>> print sens.shape (336, 39912) >>> print cv_sensana.clf.ca.stats.matrix [[ 5 0 3 0 0 3 0 1] [ 0 9 0 0 0 0 0 0] [ 0 2 4 0 0 1 0 0] [ 2 1 0 12 0 0 0 0] [ 0 0 0 0 12 0 0 0] [ 3 0 4 0 0 6 2 1] [ 0 0 1 0 0 0 10 0] [ 2 0 0 0 0 2 0 10]] I guess that deserves some explanation. We wrap our :class:`~mvpa2.clfs.meta.FeatureSelectionClassifier` with a new thing, a :class:`~mvpa2.clfs.meta.SplitClassifier`. This is another meta classifier that performs splitting of a dataset and runs training (and prediction) on each of the dataset splits separately. It can effectively perform a cross-validation analysis internally, and we ask it to compute a confusion matrix of it. The next step is to get a sensitivity analyzer for this meta meta classifier (this time no post-processing). Once we have got that, we can run the analysis and obtain sensitivity maps from all internally trained classifiers. Moreover, the meta sensitivity analyzer also allows access to its internal meta meta classifier that provides us with the confusion statistics. Yeah! While we are at it, it is worth mentioning that the scenario above can be further extended. We could add more selection or pre-processing steps into the classifier, like projecting the data onto PCA components and limit the classifier to the first 10 components -- for each split. PyMVPA offers even more complex meta classifiers (e.g. :class:`~mvpa2.clfs.meta.TreeClassifier`) that might be very helpful in some analysis scenarios. Closing Words ------------- We have seen that sensitivity analyses are a useful approach to localize information that is less constrained and less demanding than a searchlight analysis. Specifically, we can use it to discover signals that are distributed throughout the whole set of features (e.g. the full brain), but we could also perform an ROI-based analysis with it. It is less computationally demanding as we only train the classifier on one set of features and not thousands, which results in a significant reduction of required CPU time. However, there are also caveats. While sensitivities are a much more direct measure of feature importance in the constructed model, being close to the bare metal of classifiers also has problems. Depending on the actual classification algorithm and data preprocessing sensitivities might mean something completely different when compared across classifiers. For example, the popular SVM algorithm solves the classification problem by identifying the data samples that are *most tricky* to model. The extracted sensitivities reflect this property. Other algorithms, such as "Gaussian Naive Bayes" (:class:`~mvpa2.clfs.gnb.GNB`) make assumptions about the distribution of the samples in each category. GNB sensitivities *might* look completely different, even if GNB and SVM classifiers both perform at comparable accuracy levels. Note, however, that these properties can also be used to address related research questions. It should also be noted that sensitivities can not be directly compared to each other, even if they stem from the same algorithm and are just computed on different dataset splits. In an analysis one would have to normalize them first. PyMVPA offers, for example, :func:`~mvpa2.misc.transformers.l1_normed` and :func:`~mvpa2.misc.transformers.l2_normed` that can be used in conjunction with :class:`~mvpa2.mappers.fx.FxMapper` to do that as a post-processing step. In this tutorial part we also touched the surface of another important topic: :term:`feature selection`. We performed an ANOVA-based feature selection prior to classification to help SVM achieve acceptable performance. One might wonder if that was a clever idea, since a *univariate* feature selection step prior to a *multivariate* analysis somewhat contradicts the goal to identify *multivariate* signals. Only features will be retained that show some signal on their own. If that turns out to be a problem for a particular analysis, PyMVPA offers a number of multivariate alternatives for features selection. There is an implementation of :term:`recursive feature selection` (:class:`~mvpa2.featsel.rfe.RFE`), and also all classifier sensitivities can be used to select features. For classifiers where sensitivities cannot easily be extracted PyMVPA provides a noise perturbation measure (:class:`~mvpa2.measures.noiseperturbation.NoisePerturbationSensitivity`; see :ref:`Hanson et al. (2004) ` for an example application). With these building blocks it is possible to run fairly complex analyses. However, interpreting the results might not always be straight-forward. In the :ref:`next tutorial part ` we will set out to take away another constraint of all our previously performed analyses. We are going to go beyond spatial analyses and explore the time dimension. pymvpa2-2.2.0/doc/source/tutorial_significance.rst000066400000000000000000001233321202542755000222630ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial, statistical testing, monte-carlo, permutation .. _chap_tutorial_significance: ************************************************** Part 8: The Earth Is Round -- Significance Testing ************************************************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] *Null* hypothesis testing ========================= It is often desirable to be able to make statements like *"Performance is significantly above chance-level"*. To help with that PyMVPA supports *Null* hypothesis (aka *H0*) testing for any :class:`~mvpa2.measures.base.Measure`. However, as with other applications of statistics in classifier-based analyses there is the problem that we typically do not know the distribution of a variable like error or performance under the *Null* hypothesis (i.e. the probability of a result given that there is no signal), hence we cannot easily assign the adored p-values. Even worse, the chance-level or guess probability of a classifier depends on the content of a validation dataset, e.g. balanced or unbalanced number of samples per label, total number of labels, as well as the peculiarities of "independence" of training and testing data -- especially in the neuroimaging domain. Monte Carlo -- here I come! --------------------------- One approach to deal with this situation is to *estimate* the *Null* distribution using permutation testing. The *Null* distribution is then estimated by computing the measure of interest multiple times using original data samples but with permuted targets, presumably scrambling or destroying the signal of interest. Since quite often the exploration of all permutations is unfeasible, Monte-Carlo testing (see :ref:`Nichols et al. (2006) `) allows to obtain stable estimate with only a limited number of random permutations. Given the results computed using permuted targets one can now determine the probability of the empirical result (i.e. the one computed from the original training dataset) under the *no signal* condition. This is simply the fraction of results from the permutation runs that is larger or smaller than the empirical (depending on whether one is looking at performances or errors). Here we take a look at how this is done for a simple cross-validated classification in PyMVPA. We start by generating a dataset with 200 samples and 3 features of which only two carry some relevant signal. Afterwards we set up a standard leave-one-chunk-out cross-validation procedure for an SVM classifier. At this point we have seen this numerous times, and the code should be easy to read: >>> # lazy import >>> from mvpa2.suite import * >>> # some example data with signal >>> ds = normal_feature_dataset(perlabel=100, nlabels=2, nfeatures=3, ... nonbogus_features=[0,1], snr=0.3, nchunks=2) >>> # classifier >>> clf = LinearCSVMC() >>> # data folding >>> partitioner = NFoldPartitioner() >>> # complete cross-validation setup >>> cv = CrossValidation(clf, ... partitioner, ... postproc=mean_sample(), ... enable_ca=['stats']) >>> err = cv(ds) .. exercise:: Take a look at the performance statistics of the classifier. Explore how it changes with different values of the signal-to-noise (``snr``) parameter of the dataset generator function. Now we want to run this analysis again, but more often and with a fresh permuation of the classifier for each run. We need two pieces for the Monte Carlo shuffling. The first of them is an instance of an :class:`~mvpa2.generators.permutation.AttributePermutator` that will permute the target attribute of the dataset for each iteration. We will instruct it to perform 200 permutations. In a real analysis, the number of permutations will often be more than that. >>> permutator = AttributePermutator('targets', count=200) .. exercise:: The ``permutator`` is a generator. Try generating all 200 permuted datasets. The second necessary component for a Monte-Carlo-style estimation of the *Null* distribution is the actual "estimator". :class:`~mvpa2.clfs.stats.MCNullDist` will use the already created ``permutator`` to shuffle the targets and later on report p-value from the left tail of the *Null* distribution, because we are going to compute errors and we are interested in them being *lower* than chance. Finally we also ask for all results from Monte-Carlo shuffling to be stored for subsequent visualization of the distribution. >>> distr_est = MCNullDist(permutator, tail='left', enable_ca=['dist_samples']) The rest is easy. Measures take an optional constructor argument ``null_dist`` that can be used to provide an instance of some :class:`~mvpa2.clfs.stats.NullDist` estimator -- and we have just created one! Because a cross-validation is nothing but a measure, we can assign it our *Null* distribution estimator, and it will also perform permutation testing, in addition to the regular classification analysis on the "real" dataset. Consequently, the code hasn't changed much: >>> cv_mc = CrossValidation(clf, ... partitioner, ... postproc=mean_sample(), ... null_dist=distr_est, ... enable_ca=['stats']) >>> err = cv_mc(ds) >>> cv.ca.stats.stats['ACC'] == cv_mc.ca.stats.stats['ACC'] True Other than it taking a bit longer to compute, the performance did not change. But the additional waiting wasn't in vain, as we get the results of the statistical evaluation. The ``cv_mc`` :term:`conditional attribute` ``null_prob`` has a dataset that contains the p-values representing the likelihood of an empirical value (i.e. result from analysing the original dataset) being equal or lower to one under the *Null* hypothesis, i.e. no actual relevant signal in the data. Or in more concrete terms, the p-value is the fraction of results from the permutation analysis that is less or equal to the empirical result. >>> p = cv_mc.ca.null_prob >>> # should be exactly one p-value >>> p.shape (1, 1) >>> np.asscalar(p) < 0.1 True .. exercise:: How many cross-validation analyses were computed when running ``cv_mc``? Make sure you are not surprised that it is more than 200. What is the minimum p-value that we can get from 200 permutations? Let's practise our visualization skills a bit and create a quick plot to showing the *Null* distribution and how "significant" our empirical result is. And let's make a function for plotting to show off our Python-foo! >>> def make_null_dist_plot(dist_samples, empirical): ... pl.hist(dist_samples, bins=20, normed=True, alpha=0.8) ... pl.axvline(empirical, color='red') ... # chance-level for a binary classification with balanced samples ... pl.axvline(0.5, color='black', ls='--') ... # scale x-axis to full range of possible error values ... pl.xlim(0,1) ... pl.xlabel('Average cross-validated classification error') >>> >>> # make new figure ('_ =' is only used to swallow unnecessary output) >>> _ = pl.figure() >>> make_null_dist_plot(np.ravel(cv_mc.null_dist.ca.dist_samples), ... np.asscalar(err)) >>> # run pl.show() if the figure doesn't appear automatically You have seen that we created a histogram of the "distribution samples" stored in the *Null* distribution (because we asked for it previously). We can also see that the *Null* or chance distribution is centered around the expected chance-level and the empirical error value is in the far left tail, thus relatively unlikely to be a *Null* result, hence the low-ish p-value. This wasn't too bad, right? We could stop here. But there is this smell.... .. exercise:: The p-value that we have just computed, and the *Null* distribution we looked at is, unfortunately, **invalid** -- at least if we want to know how likely it is to obtain our **empirical** result under a no-signal condition. Can you figure out why? PS: The answer is obviously in the next section, so do not spoil your learning experience by reading it, before you thought about this issue! Avoiding the trap OR Advanced magic 101 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Here is what went wrong: The dataset's class labels (aka targets) were shuffled repeatedly, and for each iteration a full cross-validation of classification error was computed. However, the shuffling was done on the *full* dataset, hence target values were permuted in both training *and* testing dataset portions in each CV-fold. This basically means that for each Monte Carlo iteration the classifier was **tested** on new data/signal. However, we are actually interested in what the classifier has to say about the *actual* data, but when it was **trained** on randomly permuted data. Doing a whole-dataset permutation is a common mistake with very beneficial side-effects -- as you see in a bit. Sadly, doing the permuting rights (i.e. in the training portion of the dataset only) is a bit more complicated due to the data-folding scheme that we have to deal with. Here is how it goes: >>> repeater = Repeater(count=200) A ``repeater`` is a simple node that returns any given dataset a configurable number of times. We use this helper to configure the number of Monte Carlo iterations. .. exercise:: A :class:`~mvpa2.generators.base.Repeater` is also a generator. Try calling it with our dataset. What does it do? How can you get it to produce the 200 datasets? The new ``permutator`` is again configured to shuffle the ``targets`` attribute. But this time only *once* and only for samples that were labeled as being part of the training set in a particular CV-fold. The ``partitions`` sample attribute is created by the NFoldPartitioner that we have already configured earlier (or any other partitioner in PyMVPA for that matter). >>> permutator = AttributePermutator('targets', ... limit={'partitions': 1}, ... count=1) The most significant difference is that we are now going to use a dedicate measure to estimate the *Null* distribution. That measure is very similar to the cross-validation we have used before, but differs in an important twist: we use a chained generator to perform the data-folding. This chain comprises of our typical partitioner (marks one chunk as testing data and the rest as training, for all chunks) and the new one-time permutator. This chain-generator causes the cross-validation procedure to permute the training data only for each data-fold and leave the testing data untouched. Note, that we make the chain use the ``space`` of the partitioner, to let the ``CrossValidation`` know which samples attribute defines training and testing partitions. >>> null_cv = CrossValidation( ... clf, ... ChainNode( ... [partitioner, permutator], ... space=partitioner.get_space()), ... postproc=mean_sample()) .. exercise:: Create a separate chain-generator and explore what it does. Remember: it is just a generator. Now we create our new and improved distribution estimator. This looks similar to what we did before, but we now use our dedicated *Null* cross-validation measure, and run it as often as ``repeater`` is configured to estimate the *Null* performance. >>> distr_est = MCNullDist(repeater, tail='left', ... measure=null_cv, ... enable_ca=['dist_samples']) On the "outside" the cross-validation measure for computing the empricial performance estimate is 100% identical to what we have used before. All the magic happens inside the distribution estimator. >>> cv_mc_corr = CrossValidation(clf, ... partitioner, ... postproc=mean_sample(), ... null_dist=distr_est, ... enable_ca=['stats']) >>> err = cv_mc_corr(ds) >>> cv_mc_corr.ca.stats.stats['ACC'] == cv_mc.ca.stats.stats['ACC'] True >>> cv_mc.ca.null_prob < cv_mc_corr.ca.null_prob True After running it we see that there is no change in the empirical performance (great!), but our significance did suffer (poor thing!). We can take a look at the whole picture by plotting our previous *Null* distribution estimate and the new, improved one as an overlay. >>> make_null_dist_plot(cv_mc.null_dist.ca.dist_samples, np.asscalar(err)) >>> make_null_dist_plot(cv_mc_corr.null_dist.ca.dist_samples, np.asscalar(err)) >>> # run pl.show() if the figure doesn't appear automatically It should be obvious that there is a substantial difference in the two estimates, but only the latter/wider distribution is valid! .. exercise:: Keep it in mind. Keep it in mind. Keep it in mind. The following content is incomplete and experimental ==================================================== If you have a clue ------------------ There a many ways to further tweak the statistical evaluation. For example, if the family of the distribution is known (e.g. Gaussian/Normal) and provided via the ``dist_class`` parameter of ``MCNullDist``, then permutation tests samples will be used to fit this particular distribution and estimate distribution parameters. This could yield enormous speed-ups. Under the (strong) assumption of Gaussian distribution, 20-30 permutations should be sufficient to get sensible estimates of the distribution parameters. Fitting a normal distribution would look like this. Actually, only a single modification is necessary (the ``dist_class`` argument), but we will also reduce the number permutations. >>> distr_est = MCNullDist(Repeater(count=200), ... dist_class=scipy.stats.norm, ... tail='left', ... measure=null_cv, ... enable_ca=['dist_samples']) >>> cv_mc_norm = CrossValidation(clf, ... partitioner, ... postproc=mean_sample(), ... null_dist=distr_est, ... enable_ca=['stats']) >>> err = cv_mc_norm(ds) >>> distr = cv_mc_norm.null_dist.dists()[0] >>> make_null_dist_plot(cv_mc_norm.null_dist.ca.dist_samples, ... np.asscalar(err)) >>> x = np.linspace(0,1,100) >>> pl.plot(x, distr.pdf(x), color='black', lw=2) Family-friendly --------------- When going through this chapter you might have thought: "Jeez, why do they need to return a single p-value in a freaking dataset?" But there is a good reason for this. Let set up another cross-validation procedure. This one is basically identical to the last one, except for not averaging classifier performances across data-folds (i.e. ``postproc=mean_sample()``). >>> cvf = CrossValidation( ... clf, ... partitioner, ... null_dist=MCNullDist( ... repeater, ... tail='left', ... measure=CrossValidation( ... clf, ... ChainNode([partitioner, permutator], ... space=partitioner.get_space())) ... ) ... ) If we run this on our dataset, we no longer get a single performance value, but one per data-fold (chunk) instead: >>> err = cvf(ds) >>> len(err) == len(np.unique(ds.sa.chunks)) True But here comes the interesting bit: >>> len(cvf.ca.null_prob) == len(err) True So we get one p-value for each element in the datasets returned by the cross-validation run. More generally speaking, the distribution estimation happens independently for each value returned by a measure -- may this be multiple samples, or multiple features, or both. Consequently, it is possible to test a large variety of measure with this facility. Evaluating multi-class classifications ====================================== So far we have mostly looked at the situation where a classifier is trying to discriminate data from two possible classes. In many cases we can assume that a classifier that *cannot* discriminate these two classes would perform at a chance-level of 0.5 (ACC). If it does that we would conclude that there is no signal of interest in the data, or our classifier of choice cannot pick it up. However, there is a whole universe of classification problems, where it is not that simple. Let's revisit the classification problem from :ref:`the chapter on classifiers `. >>> from mvpa2.tutorial_suite import * >>> ds = get_haxby2001_data_alternative(roi='vt', grp_avg=False) >>> print ds.sa['targets'].unique ['bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe'] >>> clf = kNN(k=1, dfx=one_minus_correlation, voting='majority') >>> cv = CrossValidation(clf, NFoldPartitioner(), errorfx=mean_mismatch_error, ... enable_ca=['stats']) >>> cv_results = cv(ds) >>> print '%.2f' % np.mean(cv_results) 0.53 So here we have an 8-way classification problem, and during the cross-validation procedure the chosen classifier makes correct predictions for approximately half of the data points. The big question is now: **What does that tell us?** There are many scenarios that could lead to this prediction performance. It could be that the fitted classifier model is very good, but only capture the data variance for half of the data categories/classes. It could also be that the classifier model quality is relatively poor and makes an equal amount of errors for all classes. In both cases the average accuracy will be around 50%, and most likely **highly significant**, given a chance performance of 1/8. We could now spend some time testing this significance with expensive permutation tests, or making assumptions on the underlying distribution. However, that would only give us a number telling us that the average accuracy is really different from chance, but it doesn't help with the problem that the accuracy really doesn't tell us much about what we are interested in. Interesting hypotheses in the context of this dataset could be whether the data carry a signal that can be used to distinguish brain response patterns from animate vs. inanimate stimulus categories, or whether data from object-like stimuli are all alike and can only be distinguished from random noise, etc. One can imagine to run such an analysis on data from different parts of the brain and the results change -- without necessarily having a big impact on the overall classification accuracy. A lot more interesting information is available from the confusion matrix, a contingency table showing prediction targets vs. actual predictions. >>> print cv.ca.stats.matrix [[36 7 18 4 1 18 15 18] [ 3 56 6 18 0 3 7 5] [ 2 2 21 0 4 0 3 1] [ 3 16 0 76 4 5 3 1] [ 1 1 6 1 97 1 4 0] [20 5 15 4 0 29 15 11] [ 0 1 0 0 0 2 19 0] [43 20 42 5 2 50 42 72]] We can see a strong diagonal, but also block-like structure, and have to realize that simply staring at the matrix doesn't help us to easily assess the likelihood of any of our hypothesis being true or false. It is trivial to do a Chi-square test of the confusion table... >>> print 'Chi^2: %.3f (p=%.3f)' % cv.ca.stats.stats["CHI^2"] Chi^2: 1942.519 (p=0.000) ... but, again, it doesn't tell us anything other than the classifier not just doing random guesses. It would be much more useful, if we could estimate how likely it is, given the observed confusion matrix, that the employed classifier is able to discriminate *all* stimulus classes from each other, and not just a subset. Even more useful would be, if we could relate this probability to specific alternative hypotheses, such as an animate/inanimate-only distinction. :ref:`Olivetto et al. (2012) ` have devised a method that allows for doing exactly that. The confusion matrix is analyzed in a Bayesian framework regarding the statistical dependency of observed and predicted class labels. Confusions within a set of classes that cannot be discriminated should be independently distributed, while there should be a statistical dependency of confusion patterns within any set of classes that can all be discriminated from each other. This algorithm is available in the :class:`~mvpa2.clfs.transerror.BayesConfusionHypothesis` node. >>> cv = CrossValidation(clf, NFoldPartitioner(), ... errorfx=None, ... postproc=ChainNode((Confusion(labels=ds.UT), ... BayesConfusionHypothesis()))) >>> cv_results = cv(ds) >>> print cv_results.fa.stat ['log(p(C|H))' 'log(p(H|C))'] Most likely hypothesis to explain this confusion matrix print cv_results.sa.hypothesis[np.argsort(cv_results.samples[:,1])[-1]] [['bottle'], ['cat'], ['chair'], ['face'], ['house'], ['scissors'], ['scrambledpix'], ['shoe']] Previously in part 8 ==================== Previously, :ref:`while looking at classification ` we have observed that classification error depends on the chosen classification method, data preprocessing, and how the error was obtained -- training error vs generalization estimates using different data splitting strategies. Moreover in :ref:`attempts to localize activity using searchlight ` we saw that generalization error can reach relatively small values even when processing random data which (should) have no true signal. So, the value of the error alone does not provide sufficient evidence to state that our classifier or any other method actually learnt the mapping from the data into variables of interest. So, how do we decide what estimate of error can provide us sufficient evidence that constructed mapping reflects the underlying phenomenon or that our data carried the signal of interest? Researchers interested in developing statistical learning methods usually aim at achieving as high generalization performance as possible. Newly published methods often stipulate their advantage over existing ones by comparing their generalization performance on publicly available datasets with known characteristics (number of classes, independence of samples, actual presence of information of interest, etc.). Therefore, generalization performances presented in statistical learning publications are usually high enough to obliterate even a slight chance that they could have been obtained simply by chance. For example, those classifiers trained on MNIST_ dataset of handwritten digits were worth reporting whenever they demonstrated average **errors of only 1-2%** while doing classification among samples of 10 different digits (the largest error reported was 12% using the simplest classification approach). .. _MNIST: http://yann.lecun.com/exdb/mnist .. Statistical learning brought into the realm of hypothesis testing .. todo:: Literature search for what other domains such approach is also used The situation is substantially different in the domain of neural data analysis. There classification is most often used not to construct a reliable mapping from data into behavioral variable(s) with as small error as possible, but rather to show that learnt mapping is good enough to claim that such mapping exists and data carries the effects caused by the corresponding experiment. Such an existence claim is conventionally verified with a classical methodology of null-hypothesis (H0) significance testing (NHST), whenever the achievement of generalization performance with *statistically significant* excursion away from the *chance-level* is taken as the proof that data carries effects of interest. The main conceptual problem with NHST is a widespread belief that having observed the data, the level of significance at which H0 could be rejected is equivalent to the probability of the H0 being true. I.e. if it is unlikely that data comes from H0, it is as unlikely for H0 being true. Such assumptions were shown to be generally wrong using :ref:`deductive and Bayesian reasoning ` since P(D|H0) not equal P(H0|D) (unless P(D)==P(H0)). Moreover, *statistical significance* alone, taken without accompanying support on viability and reproducibility of a given finding, was argued :ref:`more likely to be incorrect `. .. exerciseTODO:: If results were obtained at the same significance p<0.05, which finding would you believe to reflect the existing phenomenon: ability to decode finger-tapping sequence of the subject participating in the experiment or ability to decode ... What differs multivariate analysis from univariate is that it * avoids **multiple comparisons** problem in NHST * has higher **flexibility**, thus lower **stability** Multivariate methods became very popular in the last decade of neuroimaging research partially due to their inherent ability to avoid multiple comparisons issue, which is a flagman of difficulties while going for a *fishing expedition* with univariate methods. Performing cross-validation on entire ROI or even full-brain allowed people to state presence of so desired effects without defending chosen critical value against multiple-comparisons. Unfortunately, as there is no such thing as *free lunch*, ability to work with all observable data at once came at a price for multivariate methods. The second peculiarity of the application of statistical learning in psychological research is the actual neural data which researchers are doomed to analyze. As we have already seen from previous tutorial parts, typical fMRI data has - relatively **low number of samples** (up to few thousands in total) - relatively **large dimensionality** (tens of thousands) - **small signal-to-noise ratio** - **non-independent measurements** - **unknown ground-truth** (either there is an effect at all, or if there is -- what is inherent bias/error) - **unknown nature of the signal**, since BOLD effect is not entirely understood. In the following part of the tutorial we will investigate the effects of some of those factors on classification performance with simple (or not so) examples. But first lets overview the tools and methodologies for NHST commonly employed. Statistical Tools in Python =========================== `scipy` Python module is an umbrella project to cover the majority of core functionality for scientific computing in Python. In turn, :mod:`~scipy.stats` submodule covers a wide range of continuous and discrete distributions and statistical functions. .. exercise:: Glance over the `scipy.stats` documentation for what statistical functions and distributions families it provides. If you feel challenged, try to figure out what is the meaning/application of :func:`~scipy.stats.rdist`. The most popular distribution employed for NHST in the context of statistical learning, is :class:`~scipy.stats.binom` for testing either generalization performance of the classifier on independent data could provide evidence that the data contains the effects of interest. .. note:: `scipy.stats` provides function :func:`~scipy.stats.binom_test`, but that one was devised only for doing two-sides tests, thus is not directly applicable for testing generalization performance where we aim at the tail with lower than chance performance values. .. exercise:: Think about scenarios when could you achieve strong and very significant mis-classification performance, i.e. when, for instance, binary classifier tends to generalize into the other category. What could it mean? :class:`~scipy.stats.binom` whenever instantiated with the parameters of the distribution (which are number of trials, probability of success on each trial), it provides you ability to easily compute a variety of statistics of that distribution. For instance, if we want to know, what would be the probability of having achieved 57 of more correct responses out of 100 trials, we need to use a survival function (1-cdf) to obtain the *weight* of the right tail including 57 (i.e. query for survival function of 56): >>> from scipy.stats import binom >>> binom100 = binom(100, 1./2) >>> print '%.3g' % binom100.sf(56) 0.0967 Apparently obtaining 57 correct out 100 cannot be considered significantly good performance by anyone. Lets investigate how many correct responses we need to reach the level of 'significance' and use *inverse survival function*: >>> binom100.isf(0.05) + 1 59.0 >>> binom100.isf(0.01) + 1 63.0 So, depending on your believe and prior support for your hypothesis and data you should get at least 59-63 correct responses from a 100 trials to claim the existence of the effects. Someone could rephrase above observation that to achieve significant performance you needed an effect size of 9-13 correspondingly for those two levels of significance. .. exercise:: Plot a curve of *effect sizes* (number of correct predictions above chance-level) vs a number of trials at significance level of 0.05 for a range of trial numbers from 4 to 1000. Plot %-accuracy vs number of trials for the same range in a separate plot. TODO .. XXX ripples... .. nsamples = np.arange(4, 1000, 2) .. effect_sizes = [ceil(binom(n,0.5).isf(0.05) + 1 - n/2) for n in nsamples] .. pl.plot(nsamples, effect_sizes) .. pl.figure() .. pl.plot(nsamples, 0.5 + effect_sizes / nsamples) .. pl.ylabel('Accuracy to reach p<=0.05') .. pl.hlines([0.5, 1.0], 0, 1000) .. commentTODO:: If this is your first ever analysis and you are not comparing obtained results across different models (classifiers), since then you would (theoretically) correct your significance level for multiple comparisons. Dataset Exploration for Confounds ================================= :ref:`"Randomization is a crucial aspect of experimental design... In the absence of random allocation, unforeseen factors may bias the results." `. Unfortunately it is impossible to detect and warn about all possible sources of confounds which would invalidate NHST based on a simple parametric binomial test. As a first step, it is always useful to inspect your data for possible sources of samples non-independence, especially if your results are not strikingly convincing or too provocative. Possible obvious problems could be: * dis-balanced testing sets (usually non-equal number of samples for each label in any given chunk of data) * order effects: either preference of having samples of particular target in a specific location or the actual order of targets To allow for easy inspection of dataset to prevent such obvious confounds, :func:`~mvpa2.datasets.miscfx.summary` function (also a method of any `Dataset`) was constructed. Lets have yet another look at our 8-categories dataset: >>> from mvpa2.tutorial_suite import * >>> # alt: `ds = load_tutorial_results('ds_haxby2001')` >>> ds = get_haxby2001_data(roi='vt') >>> print ds.summary() Dataset: 16x577@float64, , , stats: mean=11.5788 std=13.7772 var=189.811 min=-49.5554 max=97.292 Counts of targets in each chunk: chunks\targets bottle cat chair face house scissors scrambledpix shoe --- --- --- --- --- --- --- --- 0.0+2.0+4.0+6.0+8.0+10.0 1 1 1 1 1 1 1 1 1.0+3.0+5.0+7.0+9.0+11.0 1 1 1 1 1 1 1 1 Summary for targets across chunks targets mean std min max #chunks bottle 1 0 1 1 2 cat 1 0 1 1 2 chair 1 0 1 1 2 face 1 0 1 1 2 house 1 0 1 1 2 scissors 1 0 1 1 2 scrambledpix 1 0 1 1 2 shoe 1 0 1 1 2 Summary for chunks across targets chunks mean std min max #targets 0.0+2.0+4.0+6.0+8.0+10.0 1 0 1 1 8 1.0+3.0+5.0+7.0+9.0+11.0 1 0 1 1 8 Sequence statistics for 16 entries from set ['bottle', 'cat', 'chair', 'face', 'house', 'scissors', 'scrambledpix', 'shoe'] Counter-balance table for orders up to 2: Targets/Order O1 | O2 | bottle: 0 2 0 0 0 0 0 0 | 0 0 2 0 0 0 0 0 | cat: 0 0 2 0 0 0 0 0 | 0 0 0 2 0 0 0 0 | chair: 0 0 0 2 0 0 0 0 | 0 0 0 0 2 0 0 0 | face: 0 0 0 0 2 0 0 0 | 0 0 0 0 0 2 0 0 | house: 0 0 0 0 0 2 0 0 | 0 0 0 0 0 0 2 0 | scissors: 0 0 0 0 0 0 2 0 | 0 0 0 0 0 0 0 2 | scrambledpix: 0 0 0 0 0 0 0 2 | 1 0 0 0 0 0 0 0 | shoe: 1 0 0 0 0 0 0 0 | 0 1 0 0 0 0 0 0 | Correlations: min=-0.52 max=1 mean=-0.067 sum(abs)=5.7 You can see that labels were balanced across chunks -- i.e. that each chunk has an equal number of samples of each target label, and that samples of different labels are evenly distributed across chunks. TODO... Counter-balance table shows either there were any order effects among conditions. In this case we had only two instances of each label in the dataset due to the averaging of samples across blocks, so it would be more informative to look at the original sequence. To do so avoiding loading a complete dataset we would simply provide the stimuli sequence to :class:`~mvpa2.clfs.miscfx.SequenceStats` for the analysis: >>> attributes_filename = os.path.join(tutorial_data_path, 'data', 'attributes.txt') >>> attr = SampleAttributes(attributes_filename) >>> targets = np.array(attr.targets) >>> ss = SequenceStats(attr.targets) >>> print ss Sequence statistics for 1452 entries from set ['bottle', 'cat', 'chair', 'face', 'house', 'rest', 'scissors', 'scrambledpix', 'shoe'] Counter-balance table for orders up to 2: Targets/Order O1 | O2 | bottle: 96 0 0 0 0 12 0 0 0 | 84 0 0 0 0 24 0 0 0 | cat: 0 96 0 0 0 12 0 0 0 | 0 84 0 0 0 24 0 0 0 | chair: 0 0 96 0 0 12 0 0 0 | 0 0 84 0 0 24 0 0 0 | face: 0 0 0 96 0 12 0 0 0 | 0 0 0 84 0 24 0 0 0 | house: 0 0 0 0 96 12 0 0 0 | 0 0 0 0 84 24 0 0 0 | rest: 12 12 12 12 12 491 12 12 12 | 24 24 24 24 24 394 24 24 24 | scissors: 0 0 0 0 0 12 96 0 0 | 0 0 0 0 0 24 84 0 0 | scrambledpix: 0 0 0 0 0 12 0 96 0 | 0 0 0 0 0 24 0 84 0 | shoe: 0 0 0 0 0 12 0 0 96 | 0 0 0 0 0 24 0 0 84 | Correlations: min=-0.19 max=0.88 mean=-0.00069 sum(abs)=77 Order statistics look funky at first, but they would not surprise you if you recall the original design of the experiment -- blocks of 8 TRs per each category, interleaved with 6 TRs of rest condition. Since samples from two adjacent blocks are far apart enough not to contribute to 2-back table (O2 table on the right), it is worth inspecting if there was any dis-balance in the order of the picture conditions blocks. It would be easy to check if we simply drop the 'rest' condition from consideration: >>> print SequenceStats(targets[targets != 'rest']) Sequence statistics for 864 entries from set ['bottle', 'cat', 'chair', 'face', 'house', 'scissors', 'scrambledpix', 'shoe'] Counter-balance table for orders up to 2: Targets/Order O1 | O2 | bottle: 96 2 1 2 2 3 0 2 | 84 4 2 4 4 6 0 4 | cat: 2 96 1 1 1 1 4 2 | 4 84 2 2 2 2 8 4 | chair: 2 3 96 1 1 2 1 2 | 4 6 84 2 2 4 2 4 | face: 0 3 3 96 1 1 2 2 | 0 6 6 84 2 2 4 4 | house: 0 1 2 2 96 2 4 1 | 0 2 4 4 84 4 8 2 | scissors: 3 0 2 3 1 96 0 2 | 6 0 4 6 2 84 0 4 | scrambledpix: 2 1 1 2 3 2 96 1 | 4 2 2 4 6 4 84 2 | shoe: 3 2 2 1 3 0 1 96 | 6 4 4 2 6 0 2 84 | Correlations: min=-0.3 max=0.87 mean=-0.0012 sum(abs)=59 TODO .. exercise:: Generate few 'designs' consisting of varying condition sequences and assess their counter-balance. Generate some random designs using random number generators or permutation functions provided in :mod:`numpy.random` and assess their counter-balance. .. exerciseTODO:: If you take provided data set, what accuracy could(would) you achieve in Taro-reading of the future stimuli conditions based on just previous stimuli condition(fMRI data) data 15-30 seconds prior the actual stimuli block? Would it be statistically/scientifically significant? Some sources of confounds might be hard to detect or to eliminate: - dependent variable is assessed after data has been collected (RT, ACC, etc) so it might be hard to guarantee equal sampling across different splits of the data. - motion effects, if motion is correlated with the design, might introduce major confounds into the signal. With multivariate analysis the problem becomes even more sever due to the high sensitivity of multivariate methods and the fact that motion effects might be impossible to eliminate entirely since they are strongly non-linear. So, even if you regress out whatever number of descriptors describing motion (mean displacement, angles, shifts, etc.) you would not be able to eliminate motion effects entirely. And that residual variance from motion spread through the entire volume might contribute to your *generalization performance*. .. exercise:: Inspect the arguments of generic interface of all splitters :class:`~mvpa2.datasets.splitters.Splitter` for a possible workaround in the case of dis-balanced targets. Therefore, before the analysis on the actual fMRI data, it might be worth inspecting what kind of :term:`generalization` performance you might obtain if you operate simply on the confounds (e.g. motion parameters and effects). .. index:: monte-carlo, permutation Hypothesis Testing ================== .. note:: When thinking about what critical value to choose for NHST keep such :ref:`guidelines from NHST inventor, Dr.Fisher ` in mind. For significance range '0.2 - 0.5' he says: "judged significant, though barely so; ... these data do not, however, demonstrate the point beyond possibility of doubt". Ways to assess *by-chance* null-hypothesis distribution of measures range from fixed, to estimated parametric, to non-parametric permutation testing. Unfortunately not a single way provides an ultimate testing facility to be applied blindly to any chosen problem without investigating the appropriateness of the data at hand (see previous section). Every kind of :class:`~mvpa2.measures.base.Measure` provides an easy way to trigger assessment of *statistical significance* by specifying ``null_dist`` parameter with a distribution estimator. After a given measure is computed, the corresponding p-value(s) for the returned value(s) could be accessed at ``ca.null_prob``. :ref:`"Applications of permutation testing methods to single subject fMRI require modelling the temporal auto-correlation in the time series." ` .. exercise:: Try to assess significance of the finding on two problematic categories from 8-categories dataset without averaging the samples within the blocks of the same target. Even non-parametric test should be overly optimistic (forgotten **exchangeability** requirement for parametric testing, such as multiple samples within a block for a block design)... TODO Independent Samples ------------------- Since "voodoo correlations" paper, most of the literature in brain imaging is seems to became more careful in avoiding "double-dipping" and keeping their testing data independent from training data, which is one of the major concerns for doing valid hypothesis testing later on. Not much attention is given though to independence of samples aspect -- i.e. not only samples in testing set should be independent from training ones, but, to make binomial distribution testing valid, testing samples should be independent from each other as well. The reason is simple -- number of the testing samples defines the width of the null-chance distribution, but consider the limiting case where all testing samples are heavily non-independent, consider them to be a 1000 instances of the same sample. Canonical binomial distribution would be very narrow, although effectively it is just 1 independent sample being tested, thus ... TODO Statistical Treatment of Sensitivities ====================================== .. note:: Statistical learning is about constructing reliable models to describe the data, and not really to reason either data is noise. .. note:: How do we decide to threshold sensitivities, remind them searchlight results with strong bimodal distributions, distribution outside of the brain as a true by-chance. May be reiterate that sensitivities of bogus model are bogus Moreover, constructed mapping with barely *above-chance* performance is often further analyzed for its :ref:`sensitivity to the input variables `. References ========== :ref:`Cohen, J. (1994) ` *Classical critic of null hypothesis significance testing* :ref:`Fisher, R. A. (1925) ` *One of the 20th century's most influential books on statistical methods, which coined the term 'Test of significance'.* :ref:`Ioannidis, J. (2005) ` *Simulation study speculating that it is more likely for a research claim to be false than true. Along the way the paper highlights aspects to keep in mind while assessing the 'scientific significance' of any given study, such as, viability, reproducibility, and results.* :ref:`Nichols et al. (2002) ` *Overview of standard nonparametric randomization and permutation testing applied to neuroimaging data (e.g. fMRI)* :ref:`Wright, D. (2009) ` *Historical excurse into the life of 10 prominent statisticians of XXth century and their scientific contributions.* pymvpa2-2.2.0/doc/source/tutorial_start.rst000066400000000000000000000320151202542755000207730ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Tutorial, Cross-validation .. _chap_tutorial_start: ********************** Part 1: A Gentle Start ********************** .. note:: This tutorial part is also available for download as an `IPython notebook `_: [`ipynb `_] The purpose of this first tutorial part is to make you familiar with a few basic properties and building blocks of PyMVPA. Let's have a slow start and compute a :term:`cross-validation` analysis. Virtually every Python script starts with some ``import`` statements that load functionality provided elsewhere. We start this tutorial by importing some little helpers (including all of PyMVPA) we are going to use in the tutorial, and whose purpose we are going to see shortly. >>> from mvpa2.tutorial_suite import * Getting the data ================ As a first step, we will load an fMRI dataset that is the first subject of the classic study of :ref:`Haxby et al. (2001) `. For the sake of simplicity we are using a helper function that loads and pre-processes the data in a way that is similar to what the original authors did. Later on we will get back to this point and look at what was done in greater detail, but for now it is as simple as: >>> ds = get_haxby2001_data() What we get as ``ds`` is a PyMVPA dataset that contains the fMRI data, and a lot of additional information which we will investigate later on. In the original study the authors split the dataset in half (in odd and even runs), and computed a *pattern of activation* for each stimulus category in each half. Hence, the dataset consists of 16 patterns which are called :term:`sample`\s in PyMVPA (one for each of the eight categories in each half of the experiment). The number of samples in a dataset is equivalent to its length, and can be queried by: >>> print len(ds) 16 Most datasets in PyMVPA are represented as a two-dimensional array, where the first axis is the samples axis, and the second axis represents the :term:`feature`\s of the samples. In the Haxby study the authors used a region of interest (ROI) in the ventral temporal cortex. For subject 1 this ROI comprises 577 voxels. Since the analysis was done on the voxel activation patterns, those voxels are the actual features of this dataset, and hence we have 577 of them. >>> print ds.nfeatures 577 We can also access this information via the `~mvpa2.base.dataset.AttrDataset.shape` property of the dataset: >>> print ds.shape (16, 577) The most important information for a classification analysis, besides the data, are the so-called :term:`label`\s or :term:`target`\s that are assigned to the samples, since they define the model that should be learned by a :term:`classifier`, and serve as target values to assess the prediction accuracy. The dataset stores these targets in its collection of **s**\ample **a**\ttributes (hence the collection name ``sa``), and they can be accessed by their attribute name, either through the collection, or via a shortcut. >>> print ds.sa.targets ['bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe' 'bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe'] >>> print ds.targets ['bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe' 'bottle' 'cat' 'chair' 'face' 'house' 'scissors' 'scrambledpix' 'shoe'] As it can be seen, PyMVPA can handle literal labels, and there is no need to recode them into numerical values. .. exercise:: Besides the collection of sample attributes ``sa``, each dataset has two additional collections: ``fa`` for feature attributes and ``a`` for general dataset attributes. All these collections are actually instances of a Python `dict`. Investigate what additional attributes are stored in this particular dataset. Dealing With A Classifier ========================= All that we are missing for a first attempt of a classification analysis of this dataset is a :term:`classifier`. This time we will not use a magic function to help us, but will create the classifier ourselves. The original study employed a so-called 1-nearest-neighbor classifier, using correlation as a distance measure. In PyMVPA this type of classifier is provided by the `~mvpa2.clfs.knn.kNN` class, that makes it possible to specify the desired parameters. >>> clf = kNN(k=1, dfx=one_minus_correlation, voting='majority') A k-Nearest-Neighbor classifier performs classification based on the similarity of a sample with respect to each sample in a :term:`training dataset`. The value of ``k`` specifies the number of neighbors to derive a prediction, ``dfx`` sets the distance measure that determines the neighbors, and ``voting`` selects a strategy to choose a single label from the set of targets assigned to these neighbors. .. exercise:: Access the built-in help to inspect the ``kNN`` class regarding additional configuration options. Now that we have a classifier instance it can be easily trained by passing the dataset to its ``train()`` method. >>> clf.train(ds) A trained classifier can subsequently be used to perform classifications of unlabeled samples. The classification can be assessed by comparing these predictions to the target labels. >>> predictions = clf.predict(ds.samples) >>> np.mean(predictions == ds.sa.targets) 1.0 We see that the classifier performs remarkably well on our dataset -- it doesn't make even a single prediction error. However, most of the time we would not be particularly interested in the prediction accuracy of a classifier on the same dataset that it got trained with. .. exercise:: Think about why this particular classifier will always perform error-free classification of the training data -- regardless of the actual dataset content. If the reason is not immediately obvious, take a look at chapter 13.3 in :ref:`The Elements of Statistical Learning `. Investigate how the accuracy varies with different values of ``k``. Why is that? Instead, we are interested in the generalizability of the classifier on new, unseen data so we could, in principle, use it to label unlabeled data. Because we only have a single dataset it needs to be split into (at least) two parts to achieve this. In the original study Haxby and colleagues split the dataset into pattern of activations from odd versus even-numbered runs. Our dataset has this information in the ``runtype`` sample attribute: >>> print ds.sa.runtype ['even' 'even' 'even' 'even' 'even' 'even' 'even' 'even' 'odd' 'odd' 'odd' 'odd' 'odd' 'odd' 'odd' 'odd'] Using this attribute we can now easily split the dataset into two. PyMVPA datasets can be sliced in similar ways as NumPy_'s `ndarray`. The following calls select the subset of samples (i.e. rows in the datasets), where the value of the ``runtype`` attribute is either the string 'even' or 'odd'. >>> ds_split1 = ds[ds.sa.runtype == 'odd'] >>> len(ds_split1) 8 >>> ds_split2 = ds[ds.sa.runtype == 'even'] >>> len(ds_split2) 8 Now we could repeat the steps above: call ``train()`` with one dataset half and ``predict()`` with the other, and compute the prediction accuracy manually. However, a more convenient way is to let the classifier do this for us. Many objects in PyMVPA support a post-processing step that we can use to compute something from the actual results. The example below computes the *mismatch error* of classifier predictions and the *target* values stored in our dataset. To make this work, we do not call the classifier's ``predict()`` method anymore, but "call" the classifier directly with the test dataset. This is a very common usage pattern in PyMVPA that we shall see a lot over the course of this tutorial. Again, please note that we compute an error now, hence lower values represent more accurate classification. >>> clf.set_postproc(BinaryFxNode(mean_mismatch_error, 'targets')) >>> clf.train(ds_split2) >>> err = clf(ds_split1) >>> print np.asscalar(err) 0.125 In this case, our choice of which half of the dataset is used for training and which half for testing was completely arbitrary, hence we also estimate the transfer error after swapping the roles: >>> clf.train(ds_split1) >>> err = clf(ds_split2) >>> print np.asscalar(err) 0.0 We see that on average the classifier error is really low, and we achieve an accuracy level comparable to the results reported in the original study. .. _sec_tutorial_crossvalidation: Cross-validation ================ What we have just done manually, was splitting the dataset into combinations of training and testing datasets, given a specific sample attribute -- in this case the information whether a *pattern of activation* or :term:`sample` came from *even* or *odd* runs. We ran the classification analysis on each split to estimate the performance of the classifier model. In general, this approach is called :term:`cross-validation`, and involves splitting the dataset in multiple pairs of subsets, choosing sample groups by some criterion, and estimating the classifier performance by training it on the first dataset in a split and testing against the second dataset from the same split. PyMVPA provides a way to allow complete cross-validation procedures to run fully automatic, without the need for manual splitting of a dataset. Using the `~mvpa2.measures.base.CrossValidation` class a cross-validation is set up by specifying what measure should be computed on each dataset split, and how dataset splits shall be generated. The measure that is usually computed is the transfer error that we already looked at in the previous section. The second element, a :term:`generator` for datasets, is another very common tool in PyMVPA. The following example uses `~mvpa2.generators.partition.HalfPartitioner`, a generator that, when called with a dataset, marks all samples regarding their association with the first or second half of the dataset. This happens based on the values of a specified sample attribute -- in this case ``runtype`` -- much like the manual dataset splitting that we have performed earlier. `~mvpa2.generators.partition.HalfPartitioner` will make sure to subsequently assign samples to both halves, i.e. samples of the first half in the first generated dataset, will be in the second half of the second generated dataset. With these two techniques we can replicate our manual cross-validation easily -- reusing our existing classifier, but without the custom post-processing step. >>> # disable post-processing again >>> clf.set_postproc(None) >>> # dataset generator >>> hpart = HalfPartitioner(attr='runtype') >>> # complete cross-validation facility >>> cv = CrossValidation(clf, hpart) .. exercise:: Try calling the ``hpart`` object with our dataset. What happens? Now try passing the dataset to its ``generate()`` methods. What happens now? Make yourself familiar with the concept of a Python generator. Investigate what the code snippet ``list(xrange(5))`` does, and try to adapt it to the ``HalfPartitioner``. Once the ``cv`` object is created, it can be called with a dataset, just like we did with the classifier before. It will internally perform all dataset partitioning, split each generated dataset into training and testing sets (based on the partitions), and train and test the classifier repeatedly. Finally it will return the results of all cross-validation folds. >>> cv_results = cv(ds) >>> np.mean(cv_results) 0.0625 Actually, the cross-validation results are returned as another dataset that has one sample per fold and a single feature with the computed transfer-error per fold. >>> len(cv_results) 2 >>> cv_results.samples array([[ 0. ], [ 0.125]]) .. Disable for now as this doesn't work that way anymore. Look at RepeatedMeasure for a related XXX... The advantage of having a dataset as the return value (as opposed to a plain vector, or even a single number) is that we can easily attach additional information. In this case the dataset also contains some information about which samples (indicated by the respective attribute values used by the splitter) formed the training and testing datasets in each fold. . >>> print cv_results.sa.cvfolds [0 1] This could be the end of a very simple introduction into cross-validation with PyMVPA. However, since we were cheating a bit in the beginning, we actually still don't know how to import data other than the single subject from the Haxby study. This is the topic of the :ref:`next chapter `. .. _NumPy: http://numpy.scipy.org .. todo:: * TEST THE DIFFERENCE OF HALFSPLITTER vs. ODDEVEN SPLITTER on the full dataset later on References ========== :ref:`Haxby et al. (2001) ` *Classic MVPA study. Its subject 1 serves as the example dataset in this tutorial part.* :ref:`Hastie et al. (2009) ` *Comprehensive reference of statistical learning methods.* pymvpa2-2.2.0/doc/source/whoisusingit.rst000066400000000000000000000156161202542755000204570ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. index:: Who is using it?, Publications .. _chap_whoisusingit: **************** Who Is Using It? **************** .. only:: html If you are using PyMVPA or have published a study employing it, please leave a comment at the bottom of this page, if you want to be listed here as well. Institutions Where PyMVPA Is Known To Be Used ============================================= * Center for Mind/Brain Sciences, **University of Trento**, Italy * Department of Psychological and Brain Sciences, **Dartmouth College**, USA * Thayer School of Engineering, **Dartmouth College**, USA * Department of Psychology & Neuroscience, **Duke University**, USA * **Fondazione Bruno Kessler**, Italy * Department of Brain and Cognitive Sciences, **Massachusetts Institute of Technology**, USA * Department of Neurology, **Max Planck Insititute for Neurological Research**, Cologne, Germany * **MRC Cognition and Brain Sciences Unit**, Cambridge, UK * Department of Experimental Psychology, **Otto-von-Guericke-University Magdeburg**, Germany * Donders Center for Cognition, **Radboud University Nijmegen**, Netherlands * Department of Psychology, **University of California at Los Angeles**, USA * Center for Functional Neuroimaging, **University of Pennsylvania**, USA * Brain & Creativity Institute, **University of Southern California**, USA * Imaging Research Center, **University of Texas at Austin**, USA * Department of Psychiatry, **University of Wisconsin, Madison**, USA * Department of Psychology, **Yale University**, USA Studies employing PyMVPA ======================== * :ref:`Hiroyuki et al., Frontiers in Neuroinformatics (2012) `: Decoding Semantics across fMRI sessions with Different Stimulus Modalities: A practical MVPA Study. * :ref:`Gorlin et al., PNAS (2012) `: Imaging prior information in the brain. * :ref:`Raizada and Connolly, Cognitive Neuroscience (In press) `: What makes different people's representations alike: neural similarity-space solves the problem of across-subject fMRI decoding. `Preprint PDF and code `__ are available * :ref:`Connolly et al., Journal of Neuroscience (2012) `: Representation of Biological Classes in the Human Brain. * :ref:`Haxby et al., Neuron (2011) `: A common, high-dimensional model of the representational space in human ventral temporal cortex. * :ref:`Jimura and Poldrack, Neuropsychologia (2011) `: Analyses of regional-average activation and multivoxel pattern information tell complementary stories * :ref:`Carlin et al., Current Biology (2011) `: A head view-invariant representation of gaze direction in anterior superior temporal sulcus * :ref:`Kaunitz et al., Frontiers in Perception Science (2011) `: Intercepting the first pass: rapid categorization is suppressed for unseen stimuli. * :ref:`Carlin et al., Cerebral Cortex (2011) `: Direction-Sensitive Codes for Observed Head Turns in Human Superior Temporal Sulcus. * :ref:`Kubilius et al., Psychological Science (2011) `: Emergence of perceptual gestalts in the human visual cortex: The case of the configural superiority effect. `Complete suite of sources from stimuli delivery (PsychoPy) to data analysis (PyMVPA) `__ is available * :ref:`Manelis et al., Cerebral Cortex (2011) `: Dynamic Changes In The Medial Temporal Lobe During Incidental Learning Of Object–Location Associations. * :ref:`Meyer et al., Cerebral Cortex (2011) `: Seeing Touch Is Correlated with Content-Specific Activity in Primary Somatosensory Cortex. * :ref:`Woolgar et al., NeuroImage (2010) `: Multi-voxel coding of stimuli, rules, and responses in human frontoparietal cortex. * :ref:`Clithero et al., NeuroImage (2010) `: Within- and cross-participant classifiers reveal different neural coding of information. * :ref:`Gilliam et al., Proceedings of the International Conference on Pattern Recognition (2010) `: Scribe Identification in Medieval English Manuscripts. * :ref:`Cohen at al., Frontiers in Human Neuroscience (2010) `: Decoding Developmental Differences and Individual Variability in Response Inhibition Through Predictive Analyses Across Individuals. * :ref:`Meyer et al., Nature Neuroscience (2010) `: Predicting visual stimuli based on activity in auditory cortices. * :ref:`Manelis et al., Human Brain Mapping (2010) `: Implicit memory for object locations depends on reactivation of encoding-related brain regions. * :ref:`Trautmann et al., IEEE/RSJ International Conference on Intelligent Robots and Systems (2009) `: Development of an autonomous robot for ground penetrating radar surveys of polar ice. * :ref:`Sun et al., Biological Psychiatry (2009) `: Elucidating an MRI-Based Neuroanatomic Biomarker for Psychosis: Classification Analysis Using Probabilistic Brain Atlas and Machine Learning Algorithms. Articles referring to PyMVPA ============================ * :ref:`Pernet et al., Front. Psychology (2011) `. Single-trial analyses: why bother? * :ref:`Schackman et al., Nature Reviews Neuroscience (2011) `: The integration of negative affect, pain and cognitive control in the cingulate cortex. * :ref:`Margulies et al., Magnetic Resonance Materials in Physics, Biology and Medicine (2010) `: Resting developments: a review of fMRI post-processing methodologies for spontaneous brain activity. * :ref:`Shiffrin, Topics in Cognitive Science, (2010) `: Perspectives on Modeling in Cognitive Science. * :ref:`LaConte, NeuroImage (2010) `: Decoding fMRI brain states in real-time. * :ref:`Legge & Badii, Proceedings of the 2nd International Conference on Emerging Network Intelligence (2010) `: An Application of Pattern Matching for the Adjustment of Quality of ServiceMetrics. * :ref:`Spacek et al., The Neuromorphic Engineer (2009) `: Python in Neuroscience. * :ref:`Bandettini, Journal of Integrative Neuroscience (2009) `: Seven topics in functional magnetic reasonance imaging. * :ref:`Garcia et al., Frontiers in Neuroinformatics (2009) `: OpenElectrophy: An Electrophysiological Data- and Analysis-Sharing Framework. * :ref:`Mur et al., Social Cognitive and Affective Neuroscience (2009) `: Revealing representational content with pattern-information fMRI – an introductory guide. * :ref:`Pereira et al., NeuroImage (2009) `: Machine learning classifiers and fMRI: A tutorial overview. pymvpa2-2.2.0/doc/source/workshops/000077500000000000000000000000001202542755000172175ustar00rootroot00000000000000pymvpa2-2.2.0/doc/source/workshops/2009-fall.rst000066400000000000000000000325531202542755000212670ustar00rootroot00000000000000.. -*- mode: rst; fill-column: 78; indent-tabs-mode: nil -*- .. vi: set ft=rst sts=4 ts=4 sw=4 et tw=79: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### .. _chap_workshop_2009fall: ******************************** PyMVPA Extravaganza -- Fall 2009 ******************************** This development workshop took place at Dartmouth College, Nov 30 -- Dec 4, 2009. Goals ===== The primary purpose of this first PyMVPA workshop was to gather all people involved in (or related to) the development of PyMVPA. Participants introduced their projects and discussed their integration into, or interoperation with the PyMVPA main line. In addition, we discussed changes scheduled for the upcoming 0.5 release of PyMVPA that are supposed to improve shortcomings of the original design, or missing features that have been identified over the past two years. These include: * More flexible data storage: A new dataset implementation. * Better integration of PyMVPA and MDP_. * Establishing an optimization framework within PyMVPA. * Various performance improvements, e.g. kernel-caching, parallelization, potential of CUDA. .. _MDP: http://mdp-toolkit.sourceforge.net/ Participants ============ * Satrajit Ghosh, MIT, USA (for the kick-off talks) * Scott Gorlin, MIT, USA * Valentin Haenel, BCCN, Germany * Yaroslav O. Halchenko, Dartmouth College, USA * Michael Hanke, Dartmouth College, USA * Emanuele Olivetti, Fondazione Bruno Kessler, Italy * Per B. Sederberg, Princeton University, USA (virtual) * Tiziano Zito, BCCN, Germany Kick-off Talks ============== The workshop started on *Monday Nov 30th at 9:30am* with a series of talks covering the various aspects of the workshop (abstracts below). PyMVPA: Where we are now, and where we are going ------------------------------------------------ Yaroslav O. Halchenko, Michael Hanke This talk will give a brief summary of our original concept of PyMVPA that we had in mind when designing it two years ago, and how the project evolved since then. We will touch upon several issues we had to face concerning development, quality assurance, and deployment. While the latest PyMVPA release offers a wide array of tools and algorithms, we also identified a number of problems that limit further integration of novel techniques into the framework. The talk will conclude with an outline how we believe these issues can be resolved and introduces a number of improvements that will become available with the next milestone release: PyMVPA **0.5**. MDP inside out -------------- Tiziano Zito MDP is a Python collection of machine learning algorithms and a framework for implementing new algorithms and combining them into data processing workflows. MDP has been designed around two main ideas: expose a simple API, to allow scientific users to use it as a standalone library, and organize the internal structure of the objects to encourage developers to extend it and embed it in other libraries such as PyMVPA. In my talk, I will use MDP as a starting point to hash over some basic principles of scientific software design. I will discuss the criteria that inform the design of MDP and their specific implementation, and examine their advantages, limitations and possible alternatives. I will conclude with a summary of the current status and future plans for MDP development. Nipype - A Python framework for neuroimaging -------------------------------------------- Satrajit Ghosh Nipype is a project under the umbrella of Nipy, an effort to develop open-source, community-developed neuroimaging tools in Python. The goals of Nipype are two-fold: 1) to provide a uniform interface to existing neuroimaging software packages; and 2) to provide a pipelined environment for efficient batch-processing that can tie together different neuroimaging data analysis algorithms. By exposing a consistent interface to the external packages, researchers are able to explore a wide range of imaging algorithms and configure their own analysis pipeline which best fits their data and research objectives, and perform their analysis in a highly structured environment. The nipype framework is accessible to the wide range of programming expertise often found in neuroimaging, allowing for both easy-to-use high-level scripting and low-level algorithm development for unlimited customization. Profiling PyMVPA ---------------- Valentin Haenel In this talk I will present the work we did to compare the PyMVPA and Matlab implementations of the searchlight algorithm. This will include a description of how we iteratively discovered various bottlenecks and the steps taken to eliminate these. In particular, I will first present modifications of the source code and then show the resulting change in profiler output. I may conclude with some ideas for future work and some additional remarks about optimization in general. Supervised Tract Segmentation ----------------------------- Emanuele Olivetti Automatic segmentation of tractography data into pathways/tracts is a problem traditionally addressed by means of unsupervised techniques, i.e., clustering streamlines. The core of this work is to adopt instead a supervised approach, learning from the segmentation made by an expert neuroanatomist in order to predict tracts in new brains. In this talk a novel set of supervised approaches to the tract segmentation problem will be illustrated. The proposed solutions are based on machine learning topics like "supervised clustering", "learning with similarity functions" and "transduction". These solutions allow to exploit both diffusion and functional MRI data, to avoid co-registration between different subjects and to predict tracts in hemispheres different from the training example. Preliminary results support these claims. An intended goal of this talk is to open a discussion on how to map the building blocks of the proposed methods into the PyMVPA framework in order to support tractography data analysis natively and, more in general, to provide novel machine learning approaches to the users. Caching kernels --------------- Scott Gorlin A major bottleneck in a standard classification analysis relies on calculating the dot product between vectors in high-dimensional space. This is especially time consuming when there are few samples but the number of dimensions is high, such as the case of fMRI data. In fact, many common analysis techniques such as cross validation, bootstrapping, and model selection require that the kernel be recalculated for each permutation, even if that exact calculation has been done before. This presentation analyzes the problem inherent in a high-level library such as PyMVPA and illustrates one example of how to cache and reuse kernels, greatly simplifying the underlying computations and accelerating many analytical technique implementations by several orders of magnitude. Workshop Results ================ The workshop has been a huge success. We worked on further integrating PyMVPA with other Python-based software packages, both to make use of them inside PyMVPA, but also to better expose PyMVPA's functionality to other packages. The kick-off talks were followed by four days of intensive coding. During these days we were able to integrate virtually all outstanding patches that have been offered over the last year, but could not be merged yet due to required changes in the codebase. Below is a list of projects that we have been working on during the workshop. Moreover, we were able to continue the transition towards the new dataset implementation that had been started prior to the workshop. A significant number of additional unittest has been ported to the new code -- as usual identifying and fixing a number of bugs. .. figure:: ../pics/extravaganza-dc09.jpg Workshop participants (from left to right and top to bottom): Emanuele Olivetti, Scott Gorlin, Michael Hanke, Tiziano Zito, Yaroslav O. Halchenko, Valentin Haenel Grand Kernel Unification ------------------------ Scott Gorlin, Yaroslav O. Halchenko, and Emanuele Olivetti Many core MVPA algorithms rely on expensive kernel computations. However, most of these algorithms have their own naming standards and backend implementations which are not interchangeable, meaning that new advances in kernel logic or software implementations are not generally beneficial to PyMVPA as a whole. To solve this, we have implemented a new class hierarchy which not only specifies a standard kernel interface, but also allows the automatic translation of kernels from one software backend to another. Specifically, it is now possible to specify new kernel classes in pure Python (or any method which can expose a Numpy array, such as PyCUDA or custom C) and automatically convert these back and forth to Shogun kernels. This has the immediate advantage of allowing custom kernels for any Shogun-based classifier (e.g. SVM), using Shogun kernels for fast computation in any other solver (e.g., GPR), or the automatic exchange of kernels for any implementation in the future. Cached Kernel Optimization -------------------------- Scott Gorlin, Yaroslav O. Halchenko The main benefit of the kernel unification work is that new kernel classes can be specified in pure Python. A new optimized kernel class we have implemented is a CachedKernel which can automatically cache and reuse kernel matrices from any other NumpyKernel (or any kernel which is convertible to Numpy, such as a Shogun kernel). This class will prove extremely useful for techniques such as cross-validation, bootstrapping, etc, where the kernel product is normally recalculated every time it is computed - e.g., every time SVM.train(...) is called. Caching the kernel will avoid these expensive computations and greatly speed up this type of analysis by several orders of magnitude. Flexible, straightforward adaptor for arbitrary MDP nodes and flows ------------------------------------------------------------------- Michael Hanke, Tiziano Zito Although previously PyMVPA used MDP to provide a subset of its functionality through Mappers, this was limited to single nodes (e.g. PCA, ICA) and was not meant to be extended by users (except for subclassing and writing a new node wrapper by hand). Now, PyMVPA included flexible adaptors for arbitrary MDP nodes, or whole MDP flows. Besides incremental training, these adaptors offer access to the full functionality of the underlying node or flow. Straightforward (single-line of code) wrapping allows to seamlessly blend MDP into PyMVPA. The benefits are two-fold: PyMVPA users have now access to the full functionality of MDP without having to develop custom mappers. This includes algorithms, such as PCA, ICA, factor analysis, discriminant analysis, slow feature analysis, or restricted Boltzmann machines, and many more. MDP users can now use PyMVPA to perform convenient cross-validation of classification procedures with arbitrary mixes of PyMVPA classifiers and measure and MDP nodes, and flows. Non-matrix Dataset and prototype mapper for tractography data (and more!) ------------------------------------------------------------------------- Emanuele Olivetti, Michael Hanke The vast majority of algorithms available (and desirable) in PyMVPA requires data in a 2D matrix format. For this reason, until now, PyMVPA accepted only 2D matrices as samples in a Dataset. However, sometimes this causes problems, for example, with tractography data. That consists of a set of streamlines, a streamline being a polyline made of a non-constant number of points. In PyMVPA terms it means that the number of features in the corresponding dataset of streamlines would be different across instances. The purpose of a set of patches made during the workshop is twofold: first to allow PyMVPA to accept also row-wise iterable collections as a Dataset independently of the content of each row and second to provide a mapper to transform these every kind of Dataset into 2D matrix Dataset. The mapper is prototype-based which means that each instance within the Dataset (e.g., each streamline) is mapped into a fixed size M-dimensional vector. The M values are computed by specifying a similarity (or kernel, or distance) function which evaluates the distance of that instance against a given set of other M instances (e.g., other M streamlines) called *prototypes*. An example application is supervised tract segmentation from tractography data which now can be mapped into a standard binary classification problem over the usual 2D matrix class-labeled dataset. This approach to adress varying features-space sizes is flexible, and not limited to the tractography domain. Optimization and Generalization of Searchlight-analyses ------------------------------------------------------- Valentin Haenel, Michael Hanke The searchlight analysis code has been ported to the new dataset/mapper framework, taking into account the result of a profiling analysis done by Valentin Haenel during the last year. The new code avoids significant look-up penalties of the previous implementation. Moreover, it has been generalized to support arbitrary look-up algorithms (e.g. kd-tree_) and is no longer limited to sphere-based spatial searchlights. .. _kd-tree: http://en.wikipedia.org/wiki/Kd-tree Acknowledgements ================ We are grateful to Prof. James Haxby for sponsoring this workshop and hosting it in his lab. pymvpa2-2.2.0/doc/sphinxext/000077500000000000000000000000001202542755000157125ustar00rootroot00000000000000pymvpa2-2.2.0/doc/sphinxext/autosummary/000077500000000000000000000000001202542755000203005ustar00rootroot00000000000000pymvpa2-2.2.0/doc/sphinxext/autosummary/__init__.py000066400000000000000000000402131202542755000224110ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ sphinx.ext.autosummary ~~~~~~~~~~~~~~~~~~~~~~ Sphinx extension that adds an autosummary:: directive, which can be used to generate function/method/attribute/etc. summary lists, similar to those output eg. by Epydoc and other API doc generation tools. An :autolink: role is also provided. autosummary directive --------------------- The autosummary directive has the form:: .. autosummary:: :nosignatures: :toctree: generated/ module.function_1 module.function_2 ... and it generates an output table (containing signatures, optionally) ======================== ============================================= module.function_1(args) Summary line from the docstring of function_1 module.function_2(args) Summary line from the docstring ... ======================== ============================================= If the :toctree: option is specified, files matching the function names are inserted to the toctree with the given prefix: generated/module.function_1 generated/module.function_2 ... Note: The file names contain the module:: or currentmodule:: prefixes. .. seealso:: autosummary_generate.py autolink role ------------- The autolink role functions as ``:obj:`` when the name referred can be resolved to a Python object, and otherwise it becomes simple emphasis. This can be used as the default role to make links 'smart'. :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import os import re import sys import inspect import posixpath from docutils.parsers.rst import directives from docutils.statemachine import ViewList from docutils import nodes from sphinx import addnodes from sphinx.util.compat import Directive # -- autosummary_toc node ------------------------------------------------------ class autosummary_toc(nodes.comment): pass def process_autosummary_toc(app, doctree): """ Insert items described in autosummary:: to the TOC tree, but do not generate the toctree:: list. """ env = app.builder.env crawled = {} def crawl_toc(node, depth=1): crawled[node] = True for j, subnode in enumerate(node): try: if (isinstance(subnode, autosummary_toc) and isinstance(subnode[0], addnodes.toctree)): env.note_toctree(env.docname, subnode[0]) continue except IndexError: continue if not isinstance(subnode, nodes.section): continue if subnode not in crawled: crawl_toc(subnode, depth+1) crawl_toc(doctree) def autosummary_toc_visit_html(self, node): """Hide autosummary toctree list in HTML output.""" raise nodes.SkipNode def autosummary_noop(self, node): pass # -- autosummary_table node ---------------------------------------------------- class autosummary_table(nodes.comment): pass def autosummary_table_visit_html(self, node): """Make the first column of the table non-breaking.""" try: tbody = node[0][0][-1] for row in tbody: col1_entry = row[0] par = col1_entry[0] for j, subnode in enumerate(list(par)): if isinstance(subnode, nodes.Text): new_text = unicode(subnode.astext()) new_text = new_text.replace(u" ", u"\u00a0") par[j] = nodes.Text(new_text) except IndexError: pass # -- autodoc integration ------------------------------------------------------- try: ismemberdescriptor = inspect.ismemberdescriptor isgetsetdescriptor = inspect.isgetsetdescriptor except AttributeError: def ismemberdescriptor(obj): return False isgetsetdescriptor = ismemberdescriptor def get_documenter(obj): """ Get an autodoc.Documenter class suitable for documenting the given object """ import sphinx.ext.autodoc as autodoc if inspect.isclass(obj): if issubclass(obj, Exception): return autodoc.ExceptionDocumenter return autodoc.ClassDocumenter elif inspect.ismodule(obj): return autodoc.ModuleDocumenter elif inspect.ismethod(obj) or inspect.ismethoddescriptor(obj): return autodoc.MethodDocumenter elif (ismemberdescriptor(obj) or isgetsetdescriptor(obj) or inspect.isdatadescriptor(obj)): return autodoc.AttributeDocumenter elif inspect.isroutine(obj): return autodoc.FunctionDocumenter else: return autodoc.DataDocumenter # -- .. autosummary:: ---------------------------------------------------------- class Autosummary(Directive): """ Pretty table containing short signatures and summaries of functions etc. autosummary also generates a (hidden) toctree:: node. """ required_arguments = 0 optional_arguments = 0 final_argument_whitespace = False has_content = True option_spec = { 'toctree': directives.unchanged, 'nosignatures': directives.flag, 'template': directives.unchanged, } def warn(self, msg): self.warnings.append(self.state.document.reporter.warning( msg, line=self.lineno)) def run(self): self.env = env = self.state.document.settings.env self.genopt = {} self.warnings = [] names = [x.strip().split()[0] for x in self.content if x.strip() and re.search(r'^[~a-zA-Z_]', x.strip()[0])] items = self.get_items(names) nodes = self.get_table(items) if 'toctree' in self.options: suffix = env.config.source_suffix dirname = posixpath.dirname(env.docname) tree_prefix = self.options['toctree'].strip() docnames = [] for name, sig, summary, real_name in items: docname = posixpath.join(tree_prefix, real_name) if docname.endswith(suffix): docname = docname[:-len(suffix)] docname = posixpath.normpath(posixpath.join(dirname, docname)) if docname not in env.found_docs: self.warn('toctree references unknown document %r' % docname) docnames.append(docname) tocnode = addnodes.toctree() tocnode['includefiles'] = docnames tocnode['entries'] = [(None, docname) for docname in docnames] tocnode['maxdepth'] = -1 tocnode['glob'] = None tocnode = autosummary_toc('', '', tocnode) nodes.append(tocnode) return self.warnings + nodes def get_items(self, names): """ Try to import the given names, and return a list of ``[(name, signature, summary_string, real_name), ...]``. """ env = self.state.document.settings.env prefixes = [''] currmodule = env.temp_data.get('py:module') if currmodule: prefixes.insert(0, currmodule) items = [] max_item_chars = 50 for name in names: display_name = name if name.startswith('~'): name = name[1:] display_name = name.split('.')[-1] try: obj, real_name = import_by_name(name, prefixes=prefixes) except ImportError: self.warn('failed to import %s' % name) items.append((name, '', '', name)) continue # NB. using real_name here is important, since Documenters # handle module prefixes slightly differently documenter = get_documenter(obj)(self, real_name) if not documenter.parse_name(): self.warn('failed to parse name %s' % real_name) items.append((display_name, '', '', real_name)) continue if not documenter.import_object(): self.warn('failed to import object %s' % real_name) items.append((display_name, '', '', real_name)) continue # -- Grab the signature sig = documenter.format_signature() if not sig: sig = '' else: max_chars = max(10, max_item_chars - len(display_name)) sig = mangle_signature(sig, max_chars=max_chars) sig = sig.replace('*', r'\*') # -- Grab the summary doc = list(documenter.process_doc(documenter.get_doc())) while doc and not doc[0].strip(): doc.pop(0) m = re.search(r"^([A-Z][^A-Z]*?\.\s)", " ".join(doc).strip()) if m: summary = m.group(1).strip() elif doc: summary = doc[0].strip() else: summary = '' items.append((display_name, sig, summary, real_name)) return items def get_table(self, items): """ Generate a proper list of table nodes for autosummary:: directive. *items* is a list produced by :meth:`get_items`. """ table_spec = addnodes.tabular_col_spec() table_spec['spec'] = 'LL' table = autosummary_table('') real_table = nodes.table('') table.append(real_table) group = nodes.tgroup('', cols=2) real_table.append(group) group.append(nodes.colspec('', colwidth=10)) group.append(nodes.colspec('', colwidth=90)) body = nodes.tbody('') group.append(body) def append_row(*column_texts): row = nodes.row('') for text in column_texts: node = nodes.paragraph('') vl = ViewList() vl.append(text, '') self.state.nested_parse(vl, 0, node) try: if isinstance(node[0], nodes.paragraph): node = node[0] except IndexError: pass row.append(nodes.entry('', node)) body.append(row) for name, sig, summary, real_name in items: qualifier = 'obj' if 'nosignatures' not in self.options: col1 = ':%s:`%s <%s>`\ %s' % (qualifier, name, real_name, sig) else: col1 = ':%s:`%s <%s>`' % (qualifier, name, real_name) col2 = summary append_row(col1, col2) return [table_spec, table] def mangle_signature(sig, max_chars=30): """Reformat a function signature to a more compact form.""" sig = re.sub(r"^\((.*)\)$", r"\1", sig) + ", " r = re.compile(r"(?P[a-zA-Z0-9_*]+)(?P=.*?)?, ") items = r.findall(sig) args = [name for name, default in items if not default] opts = [name for name, default in items if default] sig = limited_join(", ", args, max_chars=max_chars-2) if opts: if not sig: sig = "[%s]" % limited_join(", ", opts, max_chars=max_chars-4) elif len(sig) < max_chars - 4 - 2 - 3: sig += "[, %s]" % limited_join(", ", opts, max_chars=max_chars-len(sig)-4-2) return u"(%s)" % sig def limited_join(sep, items, max_chars=30, overflow_marker="..."): """ Join a number of strings to one, limiting the length to *max_chars*. If the string overflows this limit, replace the last fitting item by *overflow_marker*. Returns: joined_string """ full_str = sep.join(items) if len(full_str) < max_chars: return full_str n_chars = 0 n_items = 0 for j, item in enumerate(items): n_chars += len(item) + len(sep) if n_chars < max_chars - len(overflow_marker): n_items += 1 else: break return sep.join(list(items[:n_items]) + [overflow_marker]) # -- Importing items ----------------------------------------------------------- def import_by_name(name, prefixes=[None]): """ Import a Python object that has the given *name*, under one of the *prefixes*. The first name that succeeds is used. """ tried = [] for prefix in prefixes: try: if prefix: prefixed_name = '.'.join([prefix, name]) else: prefixed_name = name return _import_by_name(prefixed_name), prefixed_name except ImportError: tried.append(prefixed_name) raise ImportError('no module named %s' % ' or '.join(tried)) def _import_by_name(name): """Import a Python object given its full name.""" try: name_parts = name.split('.') # try first interpret `name` as MODNAME.OBJ modname = '.'.join(name_parts[:-1]) if modname: try: __import__(modname) return getattr(sys.modules[modname], name_parts[-1]) except (ImportError, IndexError, AttributeError): pass # ... then as MODNAME, MODNAME.OBJ1, MODNAME.OBJ1.OBJ2, ... last_j = 0 modname = None for j in reversed(range(1, len(name_parts)+1)): last_j = j modname = '.'.join(name_parts[:j]) try: __import__(modname) except ImportError: continue if modname in sys.modules: break if last_j < len(name_parts): obj = sys.modules[modname] for obj_name in name_parts[last_j:]: obj = getattr(obj, obj_name) return obj else: return sys.modules[modname] except (ValueError, ImportError, AttributeError, KeyError), e: raise ImportError(*e.args) # -- :autolink: (smart default role) ------------------------------------------- def autolink_role(typ, rawtext, etext, lineno, inliner, options={}, content=[]): """ Smart linking role. Expands to ':obj:`text`' if `text` is an object that can be imported; otherwise expands to '*text*'. """ env = inliner.document.settings.env r = env.get_domain('py').role('obj')( 'obj', rawtext, etext, lineno, inliner, options, content) pnode = r[0][0] prefixes = [None] #prefixes.insert(0, inliner.document.settings.env.currmodule) try: obj, name = import_by_name(pnode['reftarget'], prefixes) except ImportError: content = pnode[0] r[0][0] = nodes.emphasis(rawtext, content[0].astext(), classes=content['classes']) return r def process_generate_options(app): genfiles = app.config.autosummary_generate ext = app.config.source_suffix if genfiles and not hasattr(genfiles, '__len__'): env = app.builder.env genfiles = [x + ext for x in env.found_docs if os.path.isfile(env.doc2path(x))] if not genfiles: return from sphinx.ext.autosummary.generate import generate_autosummary_docs genfiles = [genfile + (not genfile.endswith(ext) and ext or '') for genfile in genfiles] generate_autosummary_docs(genfiles, builder=app.builder, warn=app.warn, info=app.info, suffix=ext, base_path=app.srcdir) def setup(app): # I need autodoc app.setup_extension('sphinx.ext.autodoc') app.add_node(autosummary_toc, html=(autosummary_toc_visit_html, autosummary_noop), latex=(autosummary_noop, autosummary_noop), text=(autosummary_noop, autosummary_noop), man=(autosummary_noop, autosummary_noop)) app.add_node(autosummary_table, html=(autosummary_table_visit_html, autosummary_noop), latex=(autosummary_noop, autosummary_noop), text=(autosummary_noop, autosummary_noop), man=(autosummary_noop, autosummary_noop)) app.add_directive('autosummary', Autosummary) app.add_role('autolink', autolink_role) app.connect('doctree-read', process_autosummary_toc) app.connect('builder-inited', process_generate_options) app.add_config_value('autosummary_generate', [], True) pymvpa2-2.2.0/doc/sphinxext/autosummary/generate.py000066400000000000000000000247731202542755000224610ustar00rootroot00000000000000# -*- coding: utf-8 -*- """ sphinx.ext.autosummary.generate ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Usable as a library or script to generate automatic RST source files for items referred to in autosummary:: directives. Each generated RST file contains a single auto*:: directive which extracts the docstring of the referred item. Example Makefile rule:: generate: sphinx-autogen source/*.rst source/generated :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import os import re import sys import pydoc import optparse from jinja2 import FileSystemLoader, TemplateNotFound from jinja2.sandbox import SandboxedEnvironment from sphinx.ext.autosummary import import_by_name, get_documenter from sphinx.jinja2glue import BuiltinTemplateLoader from sphinx.util.osutil import ensuredir def main(argv=sys.argv): usage = """%prog [OPTIONS] SOURCEFILE ...""" p = optparse.OptionParser(usage.strip()) p.add_option("-o", "--output-dir", action="store", type="string", dest="output_dir", default=None, help="Directory to place all output in") p.add_option("-s", "--suffix", action="store", type="string", dest="suffix", default="rst", help="Default suffix for files (default: %default)") p.add_option("-t", "--templates", action="store", type="string", dest="templates", default=None, help="Custom template directory (default: %default)") options, args = p.parse_args(argv[1:]) if len(args) < 1: p.error('no input files given') generate_autosummary_docs(args, options.output_dir, "." + options.suffix, template_dir=options.templates) def _simple_info(msg): print msg def _simple_warn(msg): print >> sys.stderr, 'WARNING: ' + msg # -- Generating output --------------------------------------------------------- def generate_autosummary_docs(sources, output_dir=None, suffix='.rst', warn=_simple_warn, info=_simple_info, base_path=None, builder=None, template_dir=None): showed_sources = list(sorted(sources)) if len(showed_sources) > 20: showed_sources = showed_sources[:10] + ['...'] + showed_sources[-10:] info('[autosummary] generating autosummary for: %s' % ', '.join(showed_sources)) if output_dir: info('[autosummary] writing to %s' % output_dir) if base_path is not None: sources = [os.path.join(base_path, filename) for filename in sources] # create our own templating environment template_dirs = [os.path.join(os.path.dirname(__file__), 'templates')] if builder is not None: # allow the user to override the templates template_loader = BuiltinTemplateLoader() template_loader.init(builder, dirs=template_dirs) else: if template_dir: template_dirs.insert(0, template_dir) template_loader = FileSystemLoader(template_dirs) template_env = SandboxedEnvironment(loader=template_loader) # read items = find_autosummary_in_files(sources) # remove possible duplicates items = dict([(item, True) for item in items]).keys() # keep track of new files new_files = [] # write for name, path, template_name in sorted(items): if path is None: # The corresponding autosummary:: directive did not have # a :toctree: option continue path = output_dir or os.path.abspath(path) ensuredir(path) try: obj, name = import_by_name(name) except ImportError, e: warn('[autosummary] failed to import %r: %s' % (name, e)) continue fn = os.path.join(path, name + suffix) # skip it if it exists if os.path.isfile(fn): continue new_files.append(fn) f = open(fn, 'w') try: doc = get_documenter(obj) if template_name is not None: template = template_env.get_template(template_name) else: try: template = template_env.get_template('autosummary/%s.rst' % doc.objtype) except TemplateNotFound: template = template_env.get_template('autosummary/base.rst') def get_members(obj, typ, include_public=[]): items = [] for name in dir(obj): try: if get_documenter(getattr(obj, name)).objtype == typ: items.append(name) except AttributeError: warn("[autosummary] problem accessing attribute " "'%s' in '%s'." % (name, obj)) public = [x for x in items if x in include_public or not x.startswith('_')] return public, items ns = {} if doc.objtype == 'module': ns['members'] = dir(obj) ns['functions'], ns['all_functions'] = \ get_members(obj, 'function') ns['classes'], ns['all_classes'] = \ get_members(obj, 'class') ns['exceptions'], ns['all_exceptions'] = \ get_members(obj, 'exception') elif doc.objtype == 'class': ns['members'] = dir(obj) ns['methods'], ns['all_methods'] = \ get_members(obj, 'method', ['__init__']) ns['attributes'], ns['all_attributes'] = \ get_members(obj, 'attribute') parts = name.split('.') if doc.objtype in ('method', 'attribute'): mod_name = '.'.join(parts[:-2]) cls_name = parts[-2] obj_name = '.'.join(parts[-2:]) ns['class'] = cls_name else: mod_name, obj_name = '.'.join(parts[:-1]), parts[-1] ns['fullname'] = name ns['module'] = mod_name ns['objname'] = obj_name ns['name'] = parts[-1] ns['objtype'] = doc.objtype ns['underline'] = len(name) * '=' rendered = template.render(**ns) f.write(rendered) finally: f.close() # descend recursively to new files if new_files: generate_autosummary_docs(new_files, output_dir=output_dir, suffix=suffix, warn=warn, info=info, base_path=base_path, builder=builder, template_dir=template_dir) # -- Finding documented entries in files --------------------------------------- def find_autosummary_in_files(filenames): """ Find out what items are documented in source/*.rst. See `find_autosummary_in_lines`. """ documented = [] for filename in filenames: f = open(filename, 'r') lines = f.read().splitlines() documented.extend(find_autosummary_in_lines(lines, filename=filename)) f.close() return documented def find_autosummary_in_docstring(name, module=None, filename=None): """ Find out what items are documented in the given object's docstring. See `find_autosummary_in_lines`. """ try: obj, real_name = import_by_name(name) lines = pydoc.getdoc(obj).splitlines() return find_autosummary_in_lines(lines, module=name, filename=filename) except AttributeError: pass except ImportError, e: print "Failed to import '%s': %s" % (name, e) return [] def find_autosummary_in_lines(lines, module=None, filename=None): """ Find out what items appear in autosummary:: directives in the given lines. Returns a list of (name, toctree, template) where *name* is a name of an object and *toctree* the :toctree: path of the corresponding autosummary directive (relative to the root of the file name), and *template* the value of the :template: option. *toctree* and *template* ``None`` if the directive does not have the corresponding options set. """ autosummary_re = re.compile(r'^\s*\.\.\s+autosummary::\s*') automodule_re = re.compile( r'^\s*\.\.\s+automodule::\s*([A-Za-z0-9_.]+)\s*$') module_re = re.compile( r'^\s*\.\.\s+(current)?module::\s*([a-zA-Z0-9_.]+)\s*$') autosummary_item_re = re.compile(r'^\s+(~?[_a-zA-Z][a-zA-Z0-9_.]*)\s*.*?') toctree_arg_re = re.compile(r'^\s+:toctree:\s*(.*?)\s*$') template_arg_re = re.compile(r'^\s+:template:\s*(.*?)\s*$') documented = [] toctree = None template = None current_module = module in_autosummary = False for line in lines: if in_autosummary: m = toctree_arg_re.match(line) if m: toctree = m.group(1) if filename: toctree = os.path.join(os.path.dirname(filename), toctree) continue m = template_arg_re.match(line) if m: template = m.group(1).strip() continue if line.strip().startswith(':'): continue # skip options m = autosummary_item_re.match(line) if m: name = m.group(1).strip() if name.startswith('~'): name = name[1:] if current_module and \ not name.startswith(current_module + '.'): name = "%s.%s" % (current_module, name) documented.append((name, toctree, template)) continue if not line.strip(): continue in_autosummary = False m = autosummary_re.match(line) if m: in_autosummary = True toctree = None template = None continue m = automodule_re.search(line) if m: current_module = m.group(1).strip() # recurse into the automodule docstring documented.extend(find_autosummary_in_docstring( current_module, filename=filename)) continue m = module_re.match(line) if m: current_module = m.group(2) continue return documented if __name__ == '__main__': main() pymvpa2-2.2.0/doc/sphinxext/docscrape.py000066400000000000000000000347661202542755000202470ustar00rootroot00000000000000"""Extract reference documentation from the NumPy source tree. """ import inspect import textwrap import re import pydoc from StringIO import StringIO from warnings import warn 4 class Reader(object): """A line-based string reader. """ def __init__(self, data): """ Parameters ---------- data : str String with lines separated by '\n'. """ if isinstance(data,list): self._str = data else: self._str = data.split('\n') # store string as list of lines self.reset() def __getitem__(self, n): return self._str[n] def reset(self): self._l = 0 # current line nr def read(self): if not self.eof(): out = self[self._l] self._l += 1 return out else: return '' def seek_next_non_empty_line(self): for l in self[self._l:]: if l.strip(): break else: self._l += 1 def eof(self): return self._l >= len(self._str) def read_to_condition(self, condition_func): start = self._l for line in self[start:]: if condition_func(line): return self[start:self._l] self._l += 1 if self.eof(): return self[start:self._l+1] return [] def read_to_next_empty_line(self): self.seek_next_non_empty_line() def is_empty(line): return not line.strip() return self.read_to_condition(is_empty) def read_to_next_unindented_line(self): def is_unindented(line): return (line.strip() and (len(line.lstrip()) == len(line))) return self.read_to_condition(is_unindented) def peek(self,n=0): if self._l + n < len(self._str): return self[self._l + n] else: return '' def is_empty(self): return not ''.join(self._str).strip() class NumpyDocString(object): def __init__(self,docstring): docstring = textwrap.dedent(docstring).split('\n') self._doc = Reader(docstring) self._parsed_data = { 'Signature': '', 'Summary': [''], 'Extended Summary': [], 'Parameters': [], 'Returns': [], 'Raises': [], 'Warns': [], 'Other Parameters': [], 'Attributes': [], 'Methods': [], 'See Also': [], 'Notes': [], 'Warnings': [], 'References': '', 'Examples': '', 'index': {} } self._parse() def __getitem__(self,key): return self._parsed_data[key] def __setitem__(self,key,val): if not self._parsed_data.has_key(key): warn("Unknown section %s" % key) else: self._parsed_data[key] = val def _is_at_section(self): self._doc.seek_next_non_empty_line() if self._doc.eof(): return False l1 = self._doc.peek().strip() # e.g. Parameters if l1.startswith('.. index::'): return True l2 = self._doc.peek(1).strip() # ---------- or ========== return l2.startswith('-'*len(l1)) or l2.startswith('='*len(l1)) def _strip(self,doc): i = 0 j = 0 for i,line in enumerate(doc): if line.strip(): break for j,line in enumerate(doc[::-1]): if line.strip(): break return doc[i:len(doc)-j] def _read_to_next_section(self): section = self._doc.read_to_next_empty_line() while not self._is_at_section() and not self._doc.eof(): if not self._doc.peek(-1).strip(): # previous line was empty section += [''] section += self._doc.read_to_next_empty_line() return section def _read_sections(self): while not self._doc.eof(): data = self._read_to_next_section() name = data[0].strip() if name.startswith('..'): # index section yield name, data[1:] elif len(data) < 2: yield StopIteration else: yield name, self._strip(data[2:]) def _parse_param_list(self,content): r = Reader(content) params = [] while not r.eof(): header = r.read().strip() if ' : ' in header: arg_name, arg_type = header.split(' : ')[:2] else: arg_name, arg_type = header, '' desc = r.read_to_next_unindented_line() desc = dedent_lines(desc) params.append((arg_name,arg_type,desc)) return params _name_rgx = re.compile(r"^\s*(:(?P\w+):`(?P[a-zA-Z0-9_.-]+)`|" r" (?P[a-zA-Z0-9_.-]+))\s*", re.X) def _parse_see_also(self, content): """ func_name : Descriptive text continued text another_func_name : Descriptive text func_name1, func_name2, :meth:`func_name`, func_name3 """ items = [] def parse_item_name(text): """Match ':role:`name`' or 'name'""" m = self._name_rgx.match(text) if m: g = m.groups() if g[1] is None: return g[3], None else: return g[2], g[1] raise ValueError("%s is not a item name" % text) def push_item(name, rest): if not name: return name, role = parse_item_name(name) items.append((name, list(rest), role)) del rest[:] current_func = None rest = [] for line in content: if not line.strip(): continue m = self._name_rgx.match(line) if m and line[m.end():].strip().startswith(':'): push_item(current_func, rest) current_func, line = line[:m.end()], line[m.end():] rest = [line.split(':', 1)[1].strip()] if not rest[0]: rest = [] elif not line.startswith(' '): push_item(current_func, rest) current_func = None if ',' in line: for func in line.split(','): push_item(func, []) elif line.strip(): current_func = line elif current_func is not None: rest.append(line.strip()) push_item(current_func, rest) return items def _parse_index(self, section, content): """ .. index: default :refguide: something, else, and more """ def strip_each_in(lst): return [s.strip() for s in lst] out = {} section = section.split('::') if len(section) > 1: out['default'] = strip_each_in(section[1].split(','))[0] for line in content: line = line.split(':') if len(line) > 2: out[line[1]] = strip_each_in(line[2].split(',')) return out def _parse_summary(self): """Grab signature (if given) and summary""" if self._is_at_section(): return summary = self._doc.read_to_next_empty_line() summary_str = " ".join([s.strip() for s in summary]).strip() if re.compile('^([\w., ]+=)?\s*[\w\.]+\(.*\)$').match(summary_str): self['Signature'] = summary_str if not self._is_at_section(): self['Summary'] = self._doc.read_to_next_empty_line() else: self['Summary'] = summary if not self._is_at_section(): self['Extended Summary'] = self._read_to_next_section() def _parse(self): self._doc.reset() self._parse_summary() for (section,content) in self._read_sections(): if not section.startswith('..'): section = ' '.join([s.capitalize() for s in section.split(' ')]) if section in ('Parameters', 'Attributes', 'Methods', 'Returns', 'Raises', 'Warns'): self[section] = self._parse_param_list(content) elif section.startswith('.. index::'): self['index'] = self._parse_index(section, content) elif section == 'See Also': self['See Also'] = self._parse_see_also(content) else: self[section] = content # string conversion routines def _str_header(self, name, symbol='-'): return [name, len(name)*symbol] def _str_indent(self, doc, indent=4): out = [] for line in doc: out += [' '*indent + line] return out def _str_signature(self): if self['Signature']: return [self['Signature'].replace('*','\*')] + [''] else: return [''] def _str_summary(self): if self['Summary']: return self['Summary'] + [''] else: return [] def _str_extended_summary(self): if self['Extended Summary']: return self['Extended Summary'] + [''] else: return [] def _str_param_list(self, name): out = [] if self[name]: out += self._str_header(name) for param,param_type,desc in self[name]: out += ['%s : %s' % (param, param_type)] out += self._str_indent(desc) out += [''] return out def _str_section(self, name): out = [] if self[name]: out += self._str_header(name) out += self[name] out += [''] return out def _str_see_also(self, func_role): if not self['See Also']: return [] out = [] out += self._str_header("See Also") last_had_desc = True for func, desc, role in self['See Also']: if role: link = ':%s:`%s`' % (role, func) elif func_role: link = ':%s:`%s`' % (func_role, func) else: link = "`%s`_" % func if desc or last_had_desc: out += [''] out += [link] else: out[-1] += ", %s" % link if desc: out += self._str_indent([' '.join(desc)]) last_had_desc = True else: last_had_desc = False out += [''] return out def _str_index(self): idx = self['index'] out = [] out += ['.. index:: %s' % idx.get('default','')] for section, references in idx.iteritems(): if section == 'default': continue out += [' :%s: %s' % (section, ', '.join(references))] return out def __str__(self, func_role=''): out = [] out += self._str_signature() out += self._str_summary() out += self._str_extended_summary() for param_list in ('Parameters','Returns','Raises'): out += self._str_param_list(param_list) out += self._str_section('Warnings') out += self._str_see_also(func_role) for s in ('Notes','References','Examples'): out += self._str_section(s) out += self._str_index() return '\n'.join(out) def indent(str,indent=4): indent_str = ' '*indent if str is None: return indent_str lines = str.split('\n') return '\n'.join(indent_str + l for l in lines) def dedent_lines(lines): """Deindent a list of lines maximally""" return textwrap.dedent("\n".join(lines)).split("\n") def header(text, style='-'): return text + '\n' + style*len(text) + '\n' class FunctionDoc(NumpyDocString): def __init__(self, func, role='func', doc=None): self._f = func self._role = role # e.g. "func" or "meth" if doc is None: doc = inspect.getdoc(func) or '' try: NumpyDocString.__init__(self, doc) except ValueError, e: print '*'*78 print "ERROR: '%s' while parsing `%s`" % (e, self._f) print '*'*78 #print "Docstring follows:" #print doclines #print '='*78 if not self['Signature']: func, func_name = self.get_func() try: # try to read signature argspec = inspect.getargspec(func) argspec = inspect.formatargspec(*argspec) argspec = argspec.replace('*','\*') signature = '%s%s' % (func_name, argspec) except TypeError, e: signature = '%s()' % func_name self['Signature'] = signature def get_func(self): func_name = getattr(self._f, '__name__', self.__class__.__name__) if inspect.isclass(self._f): func = getattr(self._f, '__call__', self._f.__init__) else: func = self._f return func, func_name def __str__(self): out = '' func, func_name = self.get_func() signature = self['Signature'].replace('*', '\*') roles = {'func': 'function', 'meth': 'method'} if self._role: if not roles.has_key(self._role): print "Warning: invalid role %s" % self._role out += '.. %s:: %s\n \n\n' % (roles.get(self._role,''), func_name) out += super(FunctionDoc, self).__str__(func_role=self._role) return out class ClassDoc(NumpyDocString): def __init__(self,cls,modulename='',func_doc=FunctionDoc,doc=None): if not inspect.isclass(cls): raise ValueError("Initialise using a class. Got %r" % cls) self._cls = cls if modulename and not modulename.endswith('.'): modulename += '.' self._mod = modulename self._name = cls.__name__ self._func_doc = func_doc if doc is None: doc = pydoc.getdoc(cls) NumpyDocString.__init__(self, doc) @property def methods(self): return [name for name,func in inspect.getmembers(self._cls) if not name.startswith('_') and callable(func)] def __str__(self): out = '' out += super(ClassDoc, self).__str__() out += "\n\n" #for m in self.methods: # print "Parsing `%s`" % m # out += str(self._func_doc(getattr(self._cls,m), 'meth')) + '\n\n' # out += '.. index::\n single: %s; %s\n\n' % (self._name, m) return out pymvpa2-2.2.0/doc/sphinxext/docscrape_sphinx.py000066400000000000000000000102071202542755000216200ustar00rootroot00000000000000import re, inspect, textwrap, pydoc from docscrape import NumpyDocString, FunctionDoc, ClassDoc class SphinxDocString(NumpyDocString): # string conversion routines def _str_header(self, name, symbol='`'): return ['.. rubric:: ' + name, ''] def _str_field_list(self, name): return [':' + name + ':'] def _str_indent(self, doc, indent=4): out = [] for line in doc: out += [' '*indent + line] return out def _str_signature(self): return [''] if self['Signature']: return ['``%s``' % self['Signature']] + [''] else: return [''] def _str_summary(self): return self['Summary'] + [''] def _str_extended_summary(self): return self['Extended Summary'] + [''] def _str_param_list(self, name): out = [] if self[name]: out += self._str_field_list(name) out += [''] for param,param_type,desc in self[name]: out += self._str_indent(['**%s** : %s' % (param.strip(), param_type)]) out += [''] out += self._str_indent(desc,8) out += [''] return out def _str_section(self, name): out = [] if self[name]: out += self._str_header(name) out += [''] content = textwrap.dedent("\n".join(self[name])).split("\n") out += content out += [''] return out def _str_see_also(self, func_role): out = [] if self['See Also']: see_also = super(SphinxDocString, self)._str_see_also(func_role) out = ['.. seealso::', ''] out += self._str_indent(see_also[2:]) return out def _str_warnings(self): out = [] if self['Warnings']: out = ['.. warning::', ''] out += self._str_indent(self['Warnings']) return out def _str_index(self): idx = self['index'] out = [] if len(idx) == 0: return out out += ['.. index:: %s' % idx.get('default','')] for section, references in idx.iteritems(): if section == 'default': continue elif section == 'refguide': out += [' single: %s' % (', '.join(references))] else: out += [' %s: %s' % (section, ','.join(references))] return out def _str_references(self): out = [] if self['References']: out += self._str_header('References') if isinstance(self['References'], str): self['References'] = [self['References']] out.extend(self['References']) out += [''] return out def __str__(self, indent=0, func_role="obj"): out = [] out += self._str_signature() out += self._str_index() + [''] out += self._str_summary() out += self._str_extended_summary() for param_list in ('Parameters', 'Attributes', 'Methods', 'Returns','Raises'): out += self._str_param_list(param_list) out += self._str_warnings() out += self._str_see_also(func_role) out += self._str_section('Notes') out += self._str_references() out += self._str_section('Examples') out = self._str_indent(out,indent) return '\n'.join(out) class SphinxFunctionDoc(SphinxDocString, FunctionDoc): pass class SphinxClassDoc(SphinxDocString, ClassDoc): pass def get_doc_object(obj, what=None, doc=None): if what is None: if inspect.isclass(obj): what = 'class' elif inspect.ismodule(obj): what = 'module' elif callable(obj): what = 'function' else: what = 'object' if what == 'class': return SphinxClassDoc(obj, '', func_doc=SphinxFunctionDoc, doc=doc) elif what in ('function', 'method'): return SphinxFunctionDoc(obj, '', doc=doc) else: if doc is None: doc = pydoc.getdoc(obj) return SphinxDocString(doc) pymvpa2-2.2.0/doc/sphinxext/exercise_directive.py000066400000000000000000000036701202542755000221370ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Sphinx extension add a 'exercise' directive similar to 'seealso' and 'note'. This directive can be used to add exercize boxes to tutorials. """ __docformat__ = 'restructuredtext' from sphinx import addnodes from sphinx.util.compat import Directive, make_admonition from docutils import nodes class exercise(nodes.Admonition, nodes.Element): pass def visit_exercise_node(self, node): self.visit_admonition(node) def depart_exercise_node(self, node): self.depart_admonition(node) class TaskDirective(Directive): """ An admonition mentioning a exercise to perform (e.g. in a tutorial). """ has_content = True required_arguments = 0 optional_arguments = 1 final_argument_whitespace = True option_spec = {} def run(self): ret = make_admonition( exercise, self.name, ['Exercise'], self.options, self.content, self.lineno, self.content_offset, self.block_text, self.state, self.state_machine) if self.arguments: argnodes, msgs = self.state.inline_text(self.arguments[0], self.lineno) para = nodes.paragraph() para += argnodes para += msgs ret[0].insert(1, para) return ret def setup(app): app.add_node(exercise, html=(visit_exercise_node, depart_exercise_node), latex=(visit_exercise_node, depart_exercise_node), text=(visit_exercise_node, depart_exercise_node)) app.add_directive('exercise', TaskDirective) pymvpa2-2.2.0/doc/sphinxext/numpydoc.py000066400000000000000000000077241202542755000201340ustar00rootroot00000000000000""" ======== numpydoc ======== Sphinx extension that handles docstrings in the Numpy standard format. [1] It will: - Convert Parameters etc. sections to field lists. - Convert See Also section to a See also entry. - Renumber references. - Extract the signature from the docstring, if it can't be determined otherwise. .. [1] http://projects.scipy.org/numpy/wiki/CodingStyleGuidelines#docstring-standard """ import os, re, pydoc from docscrape_sphinx import get_doc_object, SphinxDocString import inspect def mangle_docstrings(app, what, name, obj, options, lines, reference_offset=[0]): if what == 'module': # Strip top title title_re = re.compile(r'^\s*[#*=]{4,}\n[a-z0-9 -]+\n[#*=]{4,}\s*', re.I|re.S) lines[:] = title_re.sub('', "\n".join(lines)).split("\n") else: doc = get_doc_object(obj, what, "\n".join(lines)) lines[:] = str(doc).split("\n") if app.config.numpydoc_edit_link and hasattr(obj, '__name__') and \ obj.__name__: if hasattr(obj, '__module__'): v = dict(full_name="%s.%s" % (obj.__module__, obj.__name__)) else: v = dict(full_name=obj.__name__) lines += ['', '.. htmlonly::', ''] lines += [' %s' % x for x in (app.config.numpydoc_edit_link % v).split("\n")] # replace reference numbers so that there are no duplicates references = [] for l in lines: l = l.strip() if l.startswith('.. ['): try: references.append(int(l[len('.. ['):l.index(']')])) except ValueError: print "WARNING: invalid reference in %s docstring" % name # Start renaming from the biggest number, otherwise we may # overwrite references. references.sort() if references: for i, line in enumerate(lines): for r in references: new_r = reference_offset[0] + r lines[i] = lines[i].replace('[%d]_' % r, '[%d]_' % new_r) lines[i] = lines[i].replace('.. [%d]' % r, '.. [%d]' % new_r) reference_offset[0] += len(references) def mangle_signature(app, what, name, obj, options, sig, retann): # Do not try to inspect classes that don't define `__init__` if (inspect.isclass(obj) and 'initializes x; see ' in pydoc.getdoc(obj.__init__)): return '', '' if not (callable(obj) or hasattr(obj, '__argspec_is_invalid_')): return if not hasattr(obj, '__doc__'): return doc = SphinxDocString(pydoc.getdoc(obj)) if doc['Signature']: sig = re.sub("^[^(]*", "", doc['Signature']) return sig, '' def initialize(app): try: app.connect('autodoc-process-signature', mangle_signature) except: monkeypatch_sphinx_ext_autodoc() def setup(app, get_doc_object_=get_doc_object): global get_doc_object get_doc_object = get_doc_object_ app.connect('autodoc-process-docstring', mangle_docstrings) app.connect('builder-inited', initialize) app.add_config_value('numpydoc_edit_link', None, True) #------------------------------------------------------------------------------ # Monkeypatch sphinx.ext.autodoc to accept argspecless autodocs (Sphinx < 0.5) #------------------------------------------------------------------------------ def monkeypatch_sphinx_ext_autodoc(): global _original_format_signature import sphinx.ext.autodoc if sphinx.ext.autodoc.format_signature is our_format_signature: return print "[numpydoc] Monkeypatching sphinx.ext.autodoc ..." _original_format_signature = sphinx.ext.autodoc.format_signature sphinx.ext.autodoc.format_signature = our_format_signature def our_format_signature(what, obj): r = mangle_signature(None, what, None, obj, None, None, None) if r is not None: return r[0] else: return _original_format_signature(what, obj) pymvpa2-2.2.0/doc/templates/000077500000000000000000000000001202542755000156565ustar00rootroot00000000000000pymvpa2-2.2.0/doc/templates/autosummary/000077500000000000000000000000001202542755000202445ustar00rootroot00000000000000pymvpa2-2.2.0/doc/templates/autosummary/base.rst000066400000000000000000000001461202542755000217110ustar00rootroot00000000000000{{ fullname }} {{ underline }} .. currentmodule:: {{ module }} .. auto{{ objtype }}:: {{ objname }} pymvpa2-2.2.0/doc/templates/autosummary/class.rst000066400000000000000000000002631202542755000221040ustar00rootroot00000000000000{{ fullname }} {{ underline }} .. currentmodule:: {{ module }} .. inheritance-diagram:: {{ objname }} :parts: 1 .. autoclass:: {{ objname }} :members: :undoc-members: pymvpa2-2.2.0/doc/templates/autosummary/module.rst000066400000000000000000000015221202542755000222630ustar00rootroot00000000000000{{ fullname }} {{ underline }} .. automodule:: {{ fullname }} {% if classes %} .. inheritance-diagram:: {{ fullname }} :parts: 1 {% endif %} {% block functions %} {% if functions or methods %} .. rubric:: Functions .. autosummary:: :toctree: {% for item in functions %} {{ item }} {%- endfor %} {% for item in methods %} {{ item }} {%- endfor %} {% endif %} {% endblock %} {% block classes %} {% if classes %} .. rubric:: Classes .. autosummary:: :toctree: {% for item in classes %} {{ item }} {%- endfor %} {% endif %} {% endblock %} {% block exceptions %} {% if exceptions %} .. rubric:: Exceptions .. autosummary:: :toctree: {% for item in classes %} {{ item }} {%- endfor %} {% endif %} {% endblock %} pymvpa2-2.2.0/mvpa2/000077500000000000000000000000001202542755000141405ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/COMMIT_HASH000066400000000000000000000000511202542755000156520ustar00rootroot00000000000000ad955620e460965ce83c652bc690bea4dc2e21eb pymvpa2-2.2.0/mvpa2/__init__.py000066400000000000000000000112671202542755000162600ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """MultiVariate Pattern Analysis Package Organization ==================== The mvpa package contains the following subpackages and modules: :group Algorithms: algorithms :group Anatomical Atlases: atlases :group Basic Data Structures: datasets :group Classifiers (supervised learners): clfs :group Feature Selections: featsel :group Mappers (usually unsupervised learners): mappers :group Measures: measures :group Miscellaneous: base misc support :group Unittests: tests :author: `Michael Hanke `__, `Yaroslav Halchenko `__, `Per B. Sederberg `__ :requires: Python 2.4+ :version: 2.2.0 :see: `The PyMVPA webpage `__ :see: `GIT Repository Browser `__ :license: The MIT License :copyright: |copy| 2006-2012 Michael Hanke :copyright: |copy| 2007-2012 Yaroslav O. Halchenko :newfield contributor: Contributor, Contributors (Alphabetical Order) :contributor: `Emanuele Olivetti `__ :contributor: `Per B. Sederberg `__ .. |copy| unicode:: 0xA9 .. copyright sign """ __docformat__ = 'restructuredtext' # canonical PyMVPA version string __version__ = '2.2.0' import os import random import numpy as np from mvpa2.base import cfg from mvpa2.base import externals from mvpa2.base.info import wtf # commit hash to be filled in by Git upon export/archive hashfilename = os.path.join(os.path.dirname(__file__), 'COMMIT_HASH') __hash__ = '' if os.path.exists(hashfilename): hashfile = open(hashfilename, 'r') __hash__ = hashfile.read().strip() hashfile.close() # # Data paths # # locate data root -- data might not be installed, but if it is, it should be at # this location pymvpa_dataroot = \ cfg.get('data', 'root', default=os.path.join(os.path.dirname(__file__), 'data')) # locate PyMVPA data database root -- also might not be installed, but if it is, # it should be at this location pymvpa_datadbroot = \ cfg.get('datadb', 'root', default=os.path.join(os.curdir, 'datadb')) # # Debugging and optimization # if not __debug__: try: import psyco psyco.profile() except ImportError: from mvpa2.base import verbose verbose(2, "Psyco online compilation is not enabled") else: # Controllable seeding of random number generator from mvpa2.base import debug debug('INIT', 'mvpa') # # RNGs control # from mvpa2._random import _random_seed, seed # # Testing # # import the main unittest interface from mvpa2.tests import run as test # # Externals-dependent tune ups # # PyMVPA is useless without numpy # Also, this check enforcing population of externals.versions # for possible later version checks, hence don't remove externals.exists('numpy', force=True, raise_=True) # We might need to suppress the warnings: # If instructed -- no python or numpy warnings (like ctypes version # for slmr), e.g. for during doctests if cfg.getboolean('warnings', 'suppress', default=False): import warnings warnings.simplefilter('ignore') # NumPy np.seterr(**dict([(x, 'ignore') for x in np.geterr()])) if externals.exists('scipy'): externals._suppress_scipy_warnings() # And check if we aren't under IPython so we could pacify completion # a bit externals.exists('running ipython env', force=True, raise_=False) # Check for matplotlib so matplotlib backend becomes set according to # our configuration externals.exists('matplotlib', force=True, raise_=False) # # Hooks # # Attach custom top-level exception handler if cfg.getboolean('debug', 'wtf', default=False): import sys _sys_excepthook = sys.excepthook def _pymvpa_excepthook(*args): """Custom exception handler to report also pymvpa's wtf Calls original handler, and then collects WTF and spits it out """ ret = _sys_excepthook(*args) sys.stdout.write("PyMVPA's WTF: collecting information... hold on...") sys.stdout.flush() wtfs = wtf() sys.stdout.write("\rPyMVPA's WTF: \n") sys.stdout.write(str(wtfs)) return ret sys.excepthook = _pymvpa_excepthook if __debug__: debug('INIT', 'mvpa end') pymvpa2-2.2.0/mvpa2/_random.py000066400000000000000000000017631202542755000161400ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper module for control of RNGs (numpy and stock python)""" import random import numpy as np from mvpa2.base import cfg if __debug__: from mvpa2.base import debug # # RNG seeding # if cfg.has_option('general', 'seed'): _random_seed = cfg.getint('general', 'seed') else: _random_seed = int(np.random.uniform()*(2**31-1)) def seed(random_seed=_random_seed): """Uniform and combined seeding of all relevant random number generators. """ if __debug__: debug('RANDOM', 'Reseeding RNGs with %s' % random_seed) np.random.seed(random_seed) random.seed(random_seed) seed(_random_seed) pymvpa2-2.2.0/mvpa2/algorithms/000077500000000000000000000000001202542755000163115ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/algorithms/__init__.py000066400000000000000000000010661202542755000204250ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for PyMVPA algorithms.""" if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.algorithms') if __debug__: debug('INIT', 'mvpa2.algorithms end') pymvpa2-2.2.0/mvpa2/algorithms/hyperalignment.py000066400000000000000000000462171202542755000217230ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Transformation of individual feature spaces into a common space The :class:`Hyperalignment` class in this module implements an algorithm published in :ref:`Haxby et al., Neuron (2011) ` *A common, high-dimensional model of the representational space in human ventral temporal cortex.* """ __docformat__ = 'restructuredtext' # don't leak the world __all__ = ['Hyperalignment'] from mvpa2.support.copy import deepcopy import numpy as np from mvpa2.base.state import ConditionalAttribute, ClassWithCollections from mvpa2.base.param import Parameter from mvpa2.mappers.procrustean import ProcrusteanMapper from mvpa2.datasets import Dataset from mvpa2.mappers.base import ChainMapper from mvpa2.mappers.zscore import zscore, ZScoreMapper from mvpa2.mappers.staticprojection import StaticProjectionMapper if __debug__: from mvpa2.base import debug class Hyperalignment(ClassWithCollections): """Align the features across multiple datasets into a common feature space. This is a three-level algorithm. In the first level, a series of input datasets is projected into a common feature space using a configurable mapper. The common space is initially defined by a chosen exemplar from the list of input datasets, but is subsequently refined by iteratively combining the common space with the projected input datasets. In the second (optional) level, the original input datasets are again aligned with (or projected into) the intermediate first-level common space. Through a configurable number of iterations the common space is further refined by repeated projections of the input datasets and combination/aggregation of these projections into an updated common space. In the third level, the input datasets are again aligned with the, now final, common feature space. The output of this algorithm are trained mappers (one for each input dataset) that transform the individual features spaces into the common space. Level 1 and 2 are performed by the ``train()`` method, and level 3 is performed when the trained Hyperalignment instance is called with a list of datasets. This dataset list may or may not be identical to the training datasets. The default values for the parameters of the algorithm (e.g. projection via Procrustean transformation, common space aggregation by averaging) resemble the setup reported in :ref:`Haxby et al., Neuron (2011) ` *A common, high-dimensional model of the representational space in human ventral temporal cortex.* Examples -------- >>> # get some example data >>> from mvpa2.testing.datasets import datasets >>> from mvpa2.misc.data_generators import random_affine_transformation >>> ds4l = datasets['uni4large'] >>> # generate a number of distorted variants of this data >>> dss = [random_affine_transformation(ds4l) for i in xrange(4)] >>> ha = Hyperalignment() >>> ha.train(dss) >>> mappers = ha(dss) >>> len(mappers) 4 """ training_residual_errors = ConditionalAttribute(enabled=False, doc="""Residual error (norm of the difference between common space and projected data) per each training dataset at each level. The residuals are stored in a dataset with one row per level, and one column per input dataset. The first row corresponds to the error 1st-level of hyperalignment the remaining rows store the residual errors for each 2nd-level iteration.""") residual_errors = ConditionalAttribute(enabled=False, doc="""Residual error (norm of the difference between common space and projected data) per each dataset. The residuals are stored in a single-row dataset with one column per input dataset.""") # XXX Who cares whether it was chosen, or specified? This should be just # 'ref_ds' choosen_ref_ds = ConditionalAttribute(enabled=True, doc="""Index of the input dataset used as 1st-level reference dataset.""") # Lets use built-in facilities to specify parameters which # constructor should accept # the ``space`` of the mapper determines where the algorithm places the # common space definition in the datasets alignment = Parameter(ProcrusteanMapper(space='commonspace'), # might provide allowedtype allowedtype='basestring', doc="""The multidimensional transformation mapper. If `None` (default) an instance of :class:`~mvpa2.mappers.procrustean.ProcrusteanMapper` is used.""") alpha = Parameter(1, allowedtype='float32', min=0, max=1, doc="""Regularization parameter to traverse between (Shrinkage)-CCA (canonical correlation analysis) and regular hyperalignment. Setting alpha to 1 makes the algorithm identical to hyperalignment and alpha of 0 makes it CCA. By default, it is 1, therefore hyperalignment. """) level2_niter = Parameter(1, allowedtype='int', min=0, doc="Number of 2nd-level iterations.") ref_ds = Parameter(None, allowedtype='int', min=0, doc="""Index of a dataset to use as 1st-level common space reference. If `None`, then the dataset with the maximum number of features is used.""") zscore_all = Parameter(False, allowedtype='bool', doc="""Flag to Z-score all datasets prior hyperalignment. Turn it off if Z-scoring is not desired or was already performed. If True, returned mappers are ChainMappers with the Z-scoring prepended to the actual projection.""") zscore_common = Parameter(True, allowedtype='bool', doc="""Flag to Z-score the common space after each adjustment. This should be left enabled in most cases.""") combiner1 = Parameter(lambda x,y: 0.5*(x+y), # doc="""How to update common space in the 1st-level loop. This must be a callable that takes two arguments. The first argument is one of the input datasets after projection onto the 1st-level common space. The second argument is the current 1st-level common space. The 1st-level combiner is called iteratively for each projected input dataset, except for the reference dataset. By default the new common space is the average of the current common space and the recently projected dataset.""") combiner2 = Parameter(lambda l: np.mean(l, axis=0), doc="""How to combine all individual spaces to common space. This must be a callable that take a sequence of datasets as an argument. The callable must return a single array. This combiner is called once with all datasets after 1st-level projection to create an updated common space, and is subsequently called again after each 2nd-level iteration.""") def __init__(self, **kwargs): ClassWithCollections.__init__(self, **kwargs) self.commonspace = None def train(self, datasets): """Derive a common feature space from a series of datasets. Parameters ---------- datasets : sequence of datasets Returns ------- A list of trained Mappers matching the number of input datasets. """ params = self.params # for quicker access ;) ca = self.ca ndatasets = len(datasets) nfeatures = [ds.nfeatures for ds in datasets] alpha = params.alpha residuals = None if ca['training_residual_errors'].enabled: residuals = np.zeros((1 + params.level2_niter, ndatasets)) ca.training_residual_errors = Dataset( samples = residuals, sa = {'levels' : ['1'] + ['2:%i' % i for i in xrange(params.level2_niter)]}) if __debug__: debug('HPAL', "Hyperalignment %s for %i datasets" % (self, ndatasets)) if params.ref_ds is None: ref_ds = np.argmax(nfeatures) else: ref_ds = params.ref_ds if ref_ds < 0 and ref_ds >= ndatasets: raise ValueError, "Requested reference dataset %i is out of " \ "bounds. We have only %i datasets provided" \ % (ref_ds, ndatasets) ca.choosen_ref_ds = ref_ds # zscore all data sets # ds = [ zscore(ds, chunks_attr=None) for ds in datasets] # TODO since we are doing in-place zscoring create deep copies # of the datasets with pruned targets and shallow copies of # the collections (if they would come needed in the transformation) # TODO: handle floats and non-floats differently to prevent # waste of memory if there is no need (e.g. no z-scoring) #otargets = [ds.sa.targets for ds in datasets] datasets = [ds.copy(deep=False) for ds in datasets] #datasets = [Dataset(ds.samples.astype(float), sa={'targets': [None] * len(ds)}) #datasets = [Dataset(ds.samples, sa={'targets': [None] * len(ds)}) # for ds in datasets] if params.zscore_all: if __debug__: debug('HPAL', "Z-scoring all datasets") for ids in xrange(len(datasets)): zmapper = ZScoreMapper(chunks_attr=None) zmapper.train(datasets[ids]) datasets[ids] = zmapper.forward(datasets[ids]) if alpha < 1: datasets, wmappers = self._regularize(datasets, alpha) # initial common space is the reference dataset commonspace = datasets[ref_ds].samples # the reference dataset might have been zscored already, don't do it # twice if params.zscore_common and not params.zscore_all: if __debug__: debug('HPAL_', "Creating copy of a commonspace and assuring " "it is of a floating type") commonspace = commonspace.astype(float) zscore(commonspace, chunks_attr=None) # create a mapper per dataset # might prefer some other way to initialize... later mappers = [deepcopy(params.alignment) for ds in datasets] # # Level 1 -- initial projection # lvl1_projdata = self._level1(datasets, commonspace, ref_ds, mappers, residuals) # # Level 2 -- might iterate multiple times # # this is the final common space self.commonspace = self._level2(datasets, lvl1_projdata, mappers, residuals) def __call__(self, datasets): """Derive a common feature space from a series of datasets. Parameters ---------- datasets : sequence of datasets Returns ------- A list of trained Mappers matching the number of input datasets. """ if self.commonspace is None: self.train(datasets) # place datasets into a copy of the list since items # will be reassigned datasets = list(datasets) params = self.params # for quicker access ;) alpha = params.alpha # for letting me be lazy ;) if params.zscore_all: if __debug__: debug('HPAL', "Z-scoring all datasets") # zscore them once while storing corresponding ZScoreMapper's # so we can assemble a comprehensive mapper at the end # (together with procrustes) zmappers = [] for ids in xrange(len(datasets)): zmapper = ZScoreMapper(chunks_attr=None) zmappers.append(zmapper) zmapper.train(datasets[ids]) datasets[ids] = zmapper.forward(datasets[ids]) if alpha < 1: datasets, wmappers = self._regularize(datasets, alpha) # # Level 3 -- final, from-scratch, alignment to final common space # mappers = self._level3(datasets) # return trained mappers for projection from all datasets into the # common space if params.zscore_all: # We need to construct new mappers which would chain # zscore and then final transformation if params.alpha < 1: return [ChainMapper([zm, wm, m]) for zm, wm, m in zip(zmappers, wmappers, mappers)] else: return [ChainMapper([zm, m]) for zm, m in zip(zmappers, mappers)] else: if params.alpha < 1: return [ChainMapper([wm, m]) for wm, m in zip(wmappers, mappers)] else: return mappers def _regularize(self, datasets, alpha): if __debug__: debug('HPAL', "Using regularized hyperalignment with alpha of %d" % alpha) wmappers = [] for ids in xrange(len(datasets)): U, S, Vh = np.linalg.svd(datasets[ids]) S = 1/np.sqrt( (1-alpha)*np.square(S) + alpha ) S.resize(len(Vh)) S = np.matrix(np.diag(S)) W = np.matrix(Vh.T)*S*np.matrix(Vh) wmapper = StaticProjectionMapper(proj=W) wmappers.append(wmapper) datasets[ids] = wmapper.forward(datasets[ids]) return datasets, wmappers def _level1(self, datasets, commonspace, ref_ds, mappers, residuals): params = self.params # for quicker access ;) data_mapped = [ds.samples for ds in datasets] for i, (m, ds_new) in enumerate(zip(mappers, datasets)): if __debug__: debug('HPAL_', "Level 1: ds #%i" % i) if i == ref_ds: continue # assign common space to ``space`` of the mapper, because this is # where it will be looking for it ds_new.sa[m.get_space()] = commonspace # find transformation of this dataset into the current common space m.train(ds_new) # remove common space attribute again to save on memory when the # common space is updated for the next iteration del ds_new.sa[m.get_space()] # project this dataset into the current common space ds_ = m.forward(ds_new.samples) if params.zscore_common: zscore(ds_, chunks_attr=None) # replace original dataset with mapped one -- only the reference # dataset will remain unchanged data_mapped[i] = ds_ # compute first-level residuals wrt to the initial common space if residuals is not None: residuals[0, i] = np.linalg.norm(ds_ - commonspace) # Update the common space. This is an incremental update after # processing each 1st-level dataset. Maybe there should be a flag # to make a batch update after processing all 1st-level datasets # to an identical 1st-level common space # TODO: make just a function so we dont' waste space commonspace = params.combiner1(ds_, commonspace) if params.zscore_common: zscore(commonspace, chunks_attr=None) return data_mapped def _level2(self, datasets, lvl1_data, mappers, residuals): params = self.params # for quicker access ;) data_mapped = lvl1_data # aggregate all processed 1st-level datasets into a new 2nd-level # common space commonspace = params.combiner2(data_mapped) # XXX Why is this commented out? Who knows what combiner2 is doing and # whether it changes the distribution of the data #if params.zscore_common: #zscore(commonspace, chunks_attr=None) ndatasets = len(datasets) for loop in xrange(params.level2_niter): # 2nd-level alignment starts from the original/unprojected datasets # again for i, (m, ds_new) in enumerate(zip(mappers, datasets)): if __debug__: debug('HPAL_', "Level 2 (%i-th iteration): ds #%i" % (loop, i)) # Optimization speed up heuristic # Slightly modify the common space towards other feature # spaces and reduce influence of this feature space for the # to-be-computed projection temp_commonspace = (commonspace * ndatasets - data_mapped[i]) \ / (ndatasets - 1) if params.zscore_common: zscore(temp_commonspace, chunks_attr=None) # assign current common space ds_new.sa[m.get_space()] = temp_commonspace # retrain the mapper for this dataset m.train(ds_new) # remove common space attribute again to save on memory when the # common space is updated for the next iteration del ds_new.sa[m.get_space()] # obtain the 2nd-level projection ds_ = m.forward(ds_new.samples) if params.zscore_common: zscore(ds_, chunks_attr=None) # store for 2nd-level combiner data_mapped[i] = ds_ # compute residuals if residuals is not None: residuals[1+loop, i] = np.linalg.norm(ds_ - commonspace) commonspace = params.combiner2(data_mapped) # and again if params.zscore_common: zscore(commonspace, chunks_attr=None) # return the final common space return commonspace def _level3(self, datasets): params = self.params # for quicker access ;) # create a mapper per dataset mappers = [deepcopy(params.alignment) for ds in datasets] # key different from level-2; the common space is uniform #temp_commonspace = commonspace residuals = None if self.ca['residual_errors'].enabled: residuals = np.zeros((1, len(datasets))) self.ca.residual_errors = Dataset(samples=residuals) # start from original input datasets again for i, (m, ds_new) in enumerate(zip(mappers, datasets)): if __debug__: debug('HPAL_', "Level 3: ds #%i" % i) # retrain mapper on final common space ds_new.sa[m.get_space()] = self.commonspace m.train(ds_new) # remove common space attribute again to save on memory del ds_new.sa[m.get_space()] if residuals is not None: # obtain final projection data_mapped = m.forward(ds_new.samples) residuals[0, i] = np.linalg.norm(data_mapped - self.commonspace) return mappers pymvpa2-2.2.0/mvpa2/atlases/000077500000000000000000000000001202542755000155745ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/atlases/__init__.py000066400000000000000000000017741202542755000177160ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for PyMVPA anatomical atlases Module Organization =================== mvpa2.atlases module contains support for various atlases :group Base Implementations: base :group Atlases from FSL: fsl :group Helpers: warehouse transformation """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.atlases') from mvpa2.atlases.base import LabelsAtlas, ReferencesAtlas, XMLAtlasException from mvpa2.atlases.fsl import FSLProbabilisticAtlas from mvpa2.atlases.warehouse import Atlas, KNOWN_ATLASES, KNOWN_ATLAS_FAMILIES if __debug__: debug('INIT', 'mvpa2.atlases end') pymvpa2-2.2.0/mvpa2/atlases/base.py000066400000000000000000000710711202542755000170660ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Base classes for Anatomy atlases support TODOs: ====== * major optimization. Now code is sloppy and slow -- plenty of checks etc Module Organization =================== mvpa2.atlases.base module contains support for various atlases :group Base: BaseAtlas XMLBasedAtlas Label Level LabelsLevel :group Talairach: PyMVPAAtlas LabelsAtlas ReferencesAtlas :group Exceptions: XMLAtlasException """ import os.path as osp from mvpa2.base import externals if externals.exists('lxml', raise_=True): from lxml import etree, objectify from mvpa2.base.dochelpers import enhanced_doc_string import re import numpy as np from numpy.linalg import norm from mvpa2.atlases.transformation import SpaceTransformation, Linear from mvpa2.misc.support import reuse_absolute_path if externals.exists('nibabel', raise_=True): import nibabel as nb from mvpa2.base import warning if __debug__: from mvpa2.base import debug def check_range(coord, range): """Check if coordinates are within range (0,0,0) - (range) Returns ------- bool Success status """ # TODO: optimize if len(coord) != len(range): raise ValueError("Provided coordinate %r and given range %r" % \ (coord, range) + \ " have different dimensionality" ) for c, r in zip(coord, range): if c < 0 or c >= r: return False return True # # Base classes # class XMLAtlasException(Exception): """Exception to be thrown if smth goes wrong dealing with XML based atlas """ pass class BaseAtlas(object): """Base class for the atlases. """ pass class XMLBasedAtlas(BaseAtlas): """Base class for atlases using XML as the definition backend """ def __init__(self, filename=None, resolution=None, image_file=None, coordT=None, default_levels=None, load_maps=True): """ Parameters ---------- filename : str Filename for the xml definition of the atlas resolution : None or float Some atlases link to multiple images at different resolutions. if None -- best resolution is selected using 0th dimension resolution image_file : None or str If None, overrides filename for the used imagefile, so it could load a custom (re-registered) atlas maps coordT Optional transformation to apply first default_levels : None or slice or list of int What levels by default to operate on load_maps : bool Load spatial maps for the atlas. """ BaseAtlas.__init__(self) self.__atlas = None self._image_file = None self._filename = filename # TODO: think about more generalizable way? self._resolution = resolution self._force_image_file = image_file self.default_levels = default_levels if filename: self.load_atlas(filename) # common sanity checks if not self._check_version(self.version): raise IOError( "Version %s is not recognized to be native to class %s" % \ (self.version, self.__name__)) if not set(['header', 'data']) \ == set([i.tag for i in self.getchildren()]): raise IOError("No header or data were defined in %s" % filename) header = self.header headerChildrenTags = XMLBasedAtlas._children_tags(header) if not ('images' in headerChildrenTags) or \ not ('imagefile' in XMLBasedAtlas._children_tags(header.images)): raise XMLAtlasException( "Atlas requires image/imagefile header fields") # Load and post-process images self._image = None if load_maps: self._load_images() if self._image is not None: # Get extent and voxel dimensions, limiting to 3D self._extent = np.abs(np.asanyarray(self._image.get_shape()[:3])) self._voxdim = np.asanyarray(self._image.get_header().get_zooms()[:3]) self.relativeToOrigin = True # Assign transformation to get into voxel coordinates, # spaceT will be set accordingly self.set_coordT(coordT) self._load_metadata() def _check_range(self, c): """ check and adjust the voxel coordinates""" # check range if __debug__: debug('ATL__', "Querying for voxel %r" % (c,)) if not check_range(c, self.extent): warning("Coordinates %r are not within the extent %r." \ " Reseting to (0,0,0)" % (c, self.extent)) # assume that voxel [0,0,0] is blank, i.e. carries # no labels which could possibly result in evil outcome c = [0]*3 return c @staticmethod def _check_version(version): """To be overriden in the derived classes. By default anything is good""" return True def _load_images(self): """To be overriden in the derived classes. By default does nothing""" pass def _load_metadata(self): """To be overriden in the derived classes. By default does nothing""" pass def load_atlas(self, filename): """Load atlas from a file """ if __debug__: debug('ATL_', "Loading atlas definition xml file " + filename) # Create objectify parser first parser = etree.XMLParser(remove_blank_text=True) lookup = objectify.ObjectifyElementClassLookup() parser.setElementClassLookup(lookup) try: self.__atlas = etree.parse(filename, parser).getroot() except IOError: raise XMLAtlasException("Failed to load XML file %s" % filename) @property def version(self): if not self.__atlas is None \ and ("version" in self.__atlas.attrib.keys()): return self.__atlas.get("version") else: return None @staticmethod def _children_tags(root): """Little helper to return tags for the children of the node """ return [i.tag for i in root.getchildren()] def __getattr__(self, attr): """ Lazy way to provide access to the definitions in the atlas """ if not self.__atlas is None: return getattr(self.__atlas, attr) else: raise XMLAtlasException( "Atlas in " + self.__name__ + " was not read yet") def set_coordT(self, coordT): """Set coordT transformation. spaceT needs to be adjusted since we glob those two transformations together """ self._coordT = coordT # lets store for debugging etc if self._image is not None: # Combine with the image's qform coordT = Linear(np.linalg.inv(self._image.get_header().get_qform()), previous=coordT) self._spaceT = SpaceTransformation( previous=coordT, to_real_space=False) ##REF: Name was automagically refactored def label_point(self, coord, levels=None): """Return labels for the given spatial point at specified levels Function takes care about first transforming the point into the voxel space Parameters ---------- coord : tuple Coordinates of the point (xyz) levels : None or list of int At what levels to return the results """ coord_ = np.asarray(coord) # or we would alter what should be constant #if not isinstance(coord, np.numpy): #c = self.getVolumeCoordinate(coord) #c = self.spaceT.to_voxel_space(coord_) #if self.coordT: # coord_t = self.coordT[coord_] #else: # coord_t = coord_ c = self.spaceT(coord_) result = self.label_voxel(c, levels) result['coord_queried'] = coord #result['coord_trans'] = coord_t result['voxel_atlas'] = c return result def levels_listing(self): lkeys = range(self.nlevels) return '\n'.join(['%d: ' % k + str(self._levels[k]) for k in lkeys]) def _get_selected_levels(self, levels=None): """Helper to provide list of levels to operate on Depends on given `levels` as well as self.default_levels """ if levels is None: levels = [ i for i in xrange(self.nlevels) ] elif (isinstance(levels, slice)): # levels are given as a range if levels.step: step = levels.step else: step = 1 if levels.start: start = levels.start else: start = 0 if levels.stop: stop = levels.stop else: stop = self.nlevels levels = [ i for i in xrange(start, stop, step) ] elif isinstance(levels, list) or isinstance(levels, tuple): # levels given as list levels = list(levels) elif isinstance(levels, int): levels = [ levels ] else: raise TypeError('Given levels "%s" are of unsupported type' % `levels`) selected_levels = levels # test given values levels = self.levels for level in selected_levels: if not level in levels: raise ValueError, \ "Level %r is not known (out of range?). Known levels are:\n%s" \ % (level, self.levels_listing()) return selected_levels def query(self, index, query_voxel=False): """Generic query method. Use shortcuts `__getitem__` for querying by voxel indices and `__call__` for querying by space coordinates. Parameters ---------- index : tuple or list Arguments of the query, such as coordinates and optionally levels query_voxel : bool Either at the end query a voxel indexes or point coordinates Allows to access the elements via simple indexing. Examples:: print atlas[ 0, -7, 20, [1,2,3] ] print atlas[ (0, -7, 20), 1:2 ] print atlas[ (0, -7, 20) ] print atlas[ (0, -7, 20), : ] """ if len(index) in [2, 4]: levels_slice = index[-1] else: if self.default_levels is None: levels_slice = slice(None, None, None) else: levels_slice = self.default_levels levels = self._get_selected_levels(levels=levels_slice) if len(index) in [3, 4]: # we got coordinates 1 by 1 + may be a level coord = index[0:3] elif len(index) in [1, 2]: coord = index[0] if isinstance(coord, list) or isinstance(coord, tuple): if len(coord) != 3: raise TypeError("Given coordinates must be in 3D") else: raise TypeError("Given coordinates must be a list or a tuple") else: raise TypeError("Unknown shape of parameters `%s`" % `index`) if query_voxel: return self.label_voxel(coord, levels) else: return self.label_point(coord, levels) # ## Shortcuts for `query` # def __getitem__(self, index): """Query atlas with voxel indexes Examples -------- :: print atlas[ 0, -7, 20, [1,2,3] ] print atlas[ (0, -7, 20), 1:2 ] print atlas[ (0, -7, 20) ] print atlas[ (0, -7, 20), : ] """ return self.query(index, True) def __call__(self, *args): return self.query(args, False) # REDO in some sane fashion so referenceatlas returns levels for the base def _get_levels(self): return self._get_levels_virtual() ##REF: Name was automagically refactored def _get_levels_virtual(self): return self._levels levels = property(fget=_get_levels) resolution = property(fget=lambda self:self._resolution) origin = property(fget=lambda self:self._origin) extent = property(fget=lambda self:self._extent) voxdim = property(fget=lambda self:self._voxdim) spaceT = property(fget=lambda self:self._spaceT) coordT = property(fget=lambda self:self._spaceT, fset=set_coordT) class Label(object): """Represents a label. Just to bring all relevant information together """ def __init__ (self, text, abbr=None, coord=(None, None, None), count=0, index=0): """ Parameters ---------- text : str Fullname of the label abbr : str, optional Abbreviated name. coord : tuple of float, optional Coordinates. count : int, optional Count of those labels in the atlas """ self.text = text.strip() if abbr is not None: abbr = abbr.strip() self.coord = coord self.count = count self.__abbr = abbr self.__index = int(index) @property def index(self): return self.__index def __repr__(self): return "Label(%r%s, coord=%r, count=%r, index=%r)" % \ (self.text, (', abbr=%s' % repr(self.__abbr), '')[int(self.__abbr is None)], self.coord, self.count, self.__index) def __str__(self): return self.text @staticmethod def from_xml(Elabel): """Create label from an XML node """ kwargs = {} if Elabel.attrib.has_key('x'): kwargs['coord'] = ( Elabel.attrib.get('x'), Elabel.attrib.get('y'), Elabel.attrib.get('z') ) for l in ('count', 'abbr', 'index'): if Elabel.attrib.has_key(l): kwargs[l] = Elabel.attrib.get(l) return Label(Elabel.text.strip(), **kwargs) @property def abbr(self): """Returns abbreviated version if such is available """ if self.__abbr in [None, ""]: return self.text else: return self.__abbr class Level(object): """Represents a level. Just to bring all relevant information together """ def __init__ (self, description): self.description = description self._type = "Base" def __repr__(self): return "%s Level: %s" % \ (self.level_type, self.description) def __str__(self): return self.description @staticmethod ##REF: Name was automagically refactored def from_xml(Elevel, level_type=None): """Simple factory of levels """ if level_type is None: if not Elevel.attrib.has_key("type"): raise XMLAtlasException("Level must have type specified. Level: " + `Elevel`) level_type = Elevel.get("type") levelTypes = { 'label': LabelsLevel, 'reference': ReferencesLevel } if levelTypes.has_key(level_type): return levelTypes[level_type].from_xml(Elevel) else: raise XMLAtlasException("Unknown level type " + level_type) level_type = property(lambda self: self._type) class LabelsLevel(Level): """Level of labels. XXX extend """ def __init__ (self, description, index=None, labels=[]): Level.__init__(self, description) self.__index = index self.__labels = labels self._type = "Labels" def __repr__(self): return Level.__repr__(self) + " [%d] " % \ (self.__index) @staticmethod ##REF: Name was automagically refactored def from_xml(Elevel, levelIndex=[0]): # XXX this is just for label type of level. For distance we need to ... # we need to assure the right indexing index = 0 if Elevel.attrib.has_key("index"): index = int(Elevel.get("index")) maxindex = max([int(i.get('index')) \ for i in Elevel.label[:]]) labels = [ None for i in xrange(maxindex+1) ] for label in Elevel.label[:]: labels[ int(label.get('index')) ] = Label.from_xml(label) levelIndex[0] = max(levelIndex[0], index) + 1 # assign next one return LabelsLevel(Elevel.get('description'), index, labels) @property def index(self): return self.__index @property def labels(self): return self.__labels def __getitem__(self, index): return self.__labels[index] def find(self, target, unique=True): """Return labels descr of which matches the string Parameters ---------- target : str or re._pattern_type Substring in abbreviation to be searched for, or compiled regular expression to be searched or matched if anchored. unique : bool, optional If True, raise exception if none or more than 1 was found. Return just a single item if found (not list). """ if isinstance(target, re._pattern_type): res = [l for l in self.__labels if target.search(l.abbr)] else: res = [l for l in self.__labels if target in l.abbr] if unique: if len(res) != 1: raise ValueError, "Got %d matches whenever just 1 was " \ "looked for (target was %s)." % (len(res), target) return res[0] else: return res class ReferencesLevel(Level): """Level which carries reference points """ def __init__ (self, description, indexes=[]): Level.__init__(self, description) self.__indexes = indexes self._type = "References" @staticmethod ##REF: Name was automagically refactored def from_xml(Elevel): # XXX should probably do the same for the others? requiredAttrs = ['x', 'y', 'z', 'type', 'description'] if not set(requiredAttrs) == set(Elevel.attrib.keys()): raise XMLAtlasException("ReferencesLevel has to have " + "following attributes defined " + `requiredAttrs`) indexes = tuple(int(Elevel.get(a)) for a in ('x', 'y', 'z')) return ReferencesLevel(Elevel.get('description'), indexes) @property def indexes(self): return self.__indexes class PyMVPAAtlas(XMLBasedAtlas): """Base class for PyMVPA atlases, such as LabelsAtlas and ReferenceAtlas """ source = 'PyMVPA' def __init__(self, *args, **kwargs): XMLBasedAtlas.__init__(self, *args, **kwargs) # sanity checks header = self.header headerChildrenTags = XMLBasedAtlas._children_tags(header) if not ('space' in headerChildrenTags) or \ not ('space-flavor' in headerChildrenTags): raise XMLAtlasException("PyMVPA Atlas requires specification of" + " the space in which atlas resides") self.__space = header.space.text self.__spaceFlavor = header['space-flavor'].text __doc__ = enhanced_doc_string('PyMVPAAtlas', locals(), XMLBasedAtlas) ##REF: Name was automagically refactored def _load_images(self): # shortcut imagefile = self.header.images.imagefile #self.nlevels = len(self._levels_by_id) # Set offset if defined in XML file # XXX: should just take one from the qoffset... now that one is # defined... this origin might be misleading actually self._origin = np.array( (0, 0, 0) ) if imagefile.attrib.has_key('offset'): self._origin = np.array( [int(x) for x in imagefile.get('offset').split(',')] ) # Load the image file which has labels if self._force_image_file is not None: imagefilename = self._force_image_file else: imagefilename = imagefile.text imagefilename = reuse_absolute_path(self._filename, imagefilename) try: self._image = None for ext in ['', '.nii.gz']: try: self._image = nb.load(imagefilename + ext) break except Exception, e: pass if self._image is None: raise e except RuntimeError, e: raise RuntimeError, \ " Cannot open file %s due to %s" % (imagefilename, e) self._data = self._image.get_data() # we get the data as x,y,z[,t] but we want to have the time axis first # if any if len(self._data.shape) == 4: self._data = np.rollaxis(self._data, -1) # remove bogus dimensions on top of 4th if len(self._data.shape[0:-4]) > 0: bogus_dims = self._data.shape[0:-4] if max(bogus_dims)>1: raise RuntimeError, "Atlas %s has more than 4 of non-singular" \ "dimensions" % imagefilename new_shape = self._data.shape[-4:] self._data.reshape(new_shape) #if self._image.extent[3] != self.nlevels: # raise XMLAtlasException("Atlas %s has %d levels defined whenever %s has %d volumes" % \ # ( filename, self.nlevels, imagefilename, self._image.extent[3] )) ##REF: Name was automagically refactored def _load_metadata(self): # Load levels self._levels = {} # preprocess labels for different levels self._Nlevels = 0 index_incr = 0 for index, child in enumerate(self.data.getchildren()): if child.tag == 'level': level = Level.from_xml(child) self._levels[level.description] = level if hasattr(level, 'index'): index = level.index else: # to avoid collision if some levels do # have indexes while index_incr in self._levels: index_incr += 1 index, index_incr = index_incr, index_incr+1 self._levels[index] = level else: raise XMLAtlasException( "Unknown child '%s' within data" % child.tag) self._Nlevels += 1 ##REF: Name was automagically refactored def _get_nlevels_virtual(self): return self._Nlevels ##REF: Name was automagically refactored def _get_nlevels(self): return self._get_nlevels_virtual() @staticmethod ##REF: Name was automagically refactored def _check_version(version): # For compatibility lets support "RUMBA" atlases return version.startswith("pymvpa-") or version.startswith("rumba-") space = property(fget=lambda self:self.__space) space_flavor = property(fget=lambda self:self.__spaceFlavor) nlevels = property(fget=_get_nlevels) class LabelsAtlas(PyMVPAAtlas): """ Atlas which provides labels for the given coordinate """ ##REF: Name was automagically refactored def label_voxel(self, c, levels=None): """ Return labels for the given voxel at specified levels specified by index """ levels = self._get_selected_levels(levels=levels) result = {'voxel_queried' : c} # check range c = self._check_range(c) resultLevels = [] for level in levels: if self._levels.has_key(level): level_ = self._levels[ level ] else: raise IndexError( "Unknown index or description for level %d" % level) resultIndex = int(self._data[ level_.index, \ c[0], c[1], c[2] ]) resultLevels += [ {'index': level_.index, 'id': level_.description, 'label' : level_[ resultIndex ]} ] result['labels'] = resultLevels return result __doc__ = enhanced_doc_string('LabelsAtlas', locals(), PyMVPAAtlas) class ReferencesAtlas(PyMVPAAtlas): """ Atlas which provides references to the other atlases. Example: the atlas which has references to the closest points (closest Gray, etc) in another atlas. """ def __init__(self, distance=0, reference_level=None, *args, **kwargs): """Initialize `ReferencesAtlas` """ PyMVPAAtlas.__init__(self, *args, **kwargs) # sanity checks if not ('reference-atlas' in XMLBasedAtlas._children_tags(self.header)): raise XMLAtlasException( "ReferencesAtlas must refer to a some other atlas") referenceAtlasName = self.header["reference-atlas"].text # uff -- another evil import but we better use the factory method from mvpa2.atlases.warehouse import Atlas self.__referenceAtlas = Atlas(filename=reuse_absolute_path( self._filename, referenceAtlasName)) if self.__referenceAtlas.space != self.space or \ self.__referenceAtlas.space_flavor != self.space_flavor: raise XMLAtlasException( "Reference and original atlases should be in the same space") self.__referenceLevel = None # pylint shut up if reference_level is not None: self.set_reference_level(reference_level) self.set_distance(distance) __doc__ = enhanced_doc_string('ReferencesAtlas', locals(), PyMVPAAtlas) # number of levels must be of the referenced atlas due to # handling of that in __getitem__ #nlevels = property(fget=lambda self:self.__referenceAtlas.nlevels) ##REF: Name was automagically refactored def _get_nlevels_virtual(self): return self.__referenceAtlas.nlevels ##REF: Name was automagically refactored def set_reference_level(self, level): """ Set the level which will be queried """ if self._levels.has_key(level): self.__referenceLevel = self._levels[level] else: raise IndexError, \ "Unknown reference level %r. " % level + \ "Known are %r" % (self._levels.keys(), ) ##REF: Name was automagically refactored def label_voxel(self, c, levels = None): if self.__referenceLevel is None: warning("You did not provide what level to use " "for reference. Assigning 0th level -- '%s'" % (self._levels[0],)) self.set_reference_level(0) # return self.__referenceAtlas.label_voxel(c, levels) c = self._check_range(c) # obtain coordinates of the closest voxel cref = self._data[ self.__referenceLevel.indexes, c[0], c[1], c[2] ] dist = norm( (cref - c) * self.voxdim ) if __debug__: debug('ATL__', "Closest referenced point for %r is " "%r at distance %3.2f" % (c, cref, dist)) if (self.distance - dist) >= 1e-3: # neglect everything smaller result = self.__referenceAtlas.label_voxel(cref, levels) result['voxel_referenced'] = c result['distance'] = dist else: result = self.__referenceAtlas.label_voxel(c, levels) if __debug__: debug('ATL__', "Closest referenced point is " "further than desired distance %.2f" % self.distance) result['voxel_referenced'] = None result['distance'] = 0 return result ##REF: Name was automagically refactored def levels_listing(self): return self.__referenceAtlas.levels_listing() ##REF: Name was automagically refactored def _get_levels_virtual(self): return self.__referenceAtlas.levels ##REF: Name was automagically refactored def set_distance(self, distance): """Set desired maximal distance for the reference """ if distance < 0: raise ValueError("Distance should not be negative. " " Thus '%f' is not a legal value" % distance) if __debug__: debug('ATL__', "Setting maximal distance for queries to be %d" % distance) self.__distance = distance distance = property(fget=lambda self:self.__distance, fset=set_distance) reference_level = property(fget=lambda self:self.__referenceLevel, fset=set_reference_level) pymvpa2-2.2.0/mvpa2/atlases/fsl.py000066400000000000000000000261141202542755000167360ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """FSL atlases interfaces """ from mvpa2.base import externals if externals.exists('nibabel', raise_=True): import nibabel as nb import re import os.path import numpy as np from mvpa2.misc.support import reuse_absolute_path from mvpa2.base.dochelpers import enhanced_doc_string from mvpa2.atlases.base import XMLBasedAtlas, LabelsLevel if __debug__: from mvpa2.base import debug # # Atlases from FSL # class FSLAtlas(XMLBasedAtlas): """Base class for FSL atlases """ source = 'FSL' def __init__(self, *args, **kwargs): """ """ XMLBasedAtlas.__init__(self, *args, **kwargs) self.space = 'MNI' __doc__ = enhanced_doc_string('FSLAtlas', locals(), XMLBasedAtlas) ##REF: Name was automagically refactored def _load_images(self): resolution = self._resolution header = self.header images = header.images # Load present images # XXX might be refactored to avoid duplication of # effort with PyMVPAAtlas ni_image = None resolutions = [] if self._force_image_file is None: imagefile_candidates = [ reuse_absolute_path(self._filename, i.imagefile.text, force=True) for i in images] else: imagefile_candidates = [self._force_image_file] for imagefilename in imagefile_candidates: try: if not os.path.exists(imagefilename): # try with extension if filename doesn't exist imagefilename += '.nii.gz' ni_image_ = nb.load(imagefilename) except RuntimeError, e: raise RuntimeError, " Cannot open file " + imagefilename resolution_ = ni_image_.get_header().get_zooms()[0] if resolution is None: # select this one if the best if ni_image is None or \ resolution_ < ni_image.get_header().get_zooms()[0]: ni_image = ni_image_ self._image_file = imagefilename else: if resolution_ == resolution: ni_image = ni_image_ self._image_file = imagefilename break else: resolutions += [resolution_] # TODO: also make use of summaryimagefile may be? if ni_image is None: msg = "Could not find an appropriate atlas among %d atlases." \ % len(imagefile_candidates) if resolution is not None: msg += " Atlases had resolutions %s" % \ (resolutions,) raise RuntimeError, msg if __debug__: debug('ATL__', "Loading atlas data from %s" % self._image_file) self._image = ni_image self._resolution = ni_image.get_header().get_zooms()[0] self._origin = np.abs(ni_image.get_header().get_qform()[:3,3]) # XXX self._data = self._image.get_data() if len(self._data.shape) == 4: # want to have volume axis first self._data = np.rollaxis(self._data, -1) def _load_metadata(self): """ """ # Load levels self._levels = {} # preprocess labels for different levels self.nlevels = 1 #level = Level.from_xml(self.data, level_type='label') level = LabelsLevel.from_xml(self.data)#, level_type='label') level.description = self.header.name.text self._levels = {0: level} #for index, child in enumerate(self.data.getchildren()): # if child.tag == 'level': # level = Level.from_xml(child) # self._levels[level.description] = level # try: # self._levels[level.index] = level # except: # pass # else: # raise XMLAtlasException("Unknown child '%s' within data" % child.tag) # self.nlevels += 1 #pass @staticmethod ##REF: Name was automagically refactored def _check_version(version): return re.search('^[0-9]+\.[0-9]', version) is not None class FSLProbabilisticAtlas(FSLAtlas): """Probabilistic FSL atlases """ def __init__(self, thr=0.0, strategy='all', sort=True, *args, **kwargs): """ Parameters ---------- thr : float Value to threshold at strategy : str Possible values all - all entries above thr max - entry with maximal value sort : bool Either to sort entries for 'all' strategy according to probability """ FSLAtlas.__init__(self, *args, **kwargs) self.thr = thr self.strategy = strategy self.sort = sort __doc__ = enhanced_doc_string('FSLProbabilisticAtlas', locals(), FSLAtlas) ##REF: Name was automagically refactored def label_voxel(self, c, levels=None): """Return labels for the voxel Parameters ---------- c : tuple of coordinates (xyz) - levels : just for API consistency (heh heh). Must be 0 for FSL atlases """ if levels is not None and not (levels in [0, [0], (0,)]): raise ValueError, \ "I guess we don't support levels other than 0 in FSL atlas." \ " Got levels=%s" % (levels,) # check range c = self._check_range(c) # XXX think -- may be we should better assign each map to a # different level level = 0 resultLabels = [] for index, area in enumerate(self._levels[level]): prob = int(self._data[index, c[0], c[1], c[2]]) if prob > self.thr: resultLabels += [dict(index=index, #id= label=area.text, prob=prob)] if self.sort or self.strategy == 'max': resultLabels.sort(cmp=lambda x,y: cmp(x['prob'], y['prob']), reverse=True) if self.strategy == 'max': resultLabels = resultLabels[:1] elif self.strategy == 'all': pass else: raise ValueError, 'Unknown strategy %s' % self.strategy result = {'voxel_queried' : c, # in the list since we have only single level but # with multiple entries 'labels': [resultLabels]} return result def find(self, *args, **kwargs): """Just a shortcut to the only level. See :class:`~mvpa2.atlases.base.Level.find` for more info """ return self.levels[0].find(*args, **kwargs) def get_map(self, target, strategy='unique', axes_order='xyz'): """Return a probability map as an array Parameters ---------- target : int or str or re._pattern_type If int, map for given index is returned. Otherwise, .find is called with ``unique=True`` to find matching area strategy : str in ('unique', 'max') If 'unique', then if multiple areas match, exception would be raised. In case of 'max', each voxel would get maximal value of probabilities from all matching areas axes_order : str in ('xyz', 'zyx') In what order axes of the returned array should follow. """ if isinstance(target, int): res = self._data[target] # since we no longer support pynifti all is XYZ if axes_order == 'xyz': return res elif axes_order == 'zyx': return res.T else: raise ValueError, \ "Unknown axes_order=%r provided" % (axes_order,) else: lev = self.levels[0] # we have just 1 here if strategy == 'unique': return self.get_map(lev.find(target, unique=True).index, axes_order=axes_order) else: maps_dict = self.get_maps(target, axes_order=axes_order) maps = np.array(maps_dict.values()) return np.max(maps, axis=0) def get_maps(self, target, axes_order='xyz', key_attr=None, overlaps=None): """Return a dictionary of probability maps for the target Each key is a `Label` instance, and value is the probability map Parameters ---------- target : str or re._pattern_type .find is called with a target and unique=False to find all matches axes_order : str in ('xyz', 'zyx') In what order axes of the returned array should follow. key_attr : None or str What to use for the keys of the dictionary. If None, `Label` instance would be used as a key. If some attribute provided (e.g. 'text', 'abbr', 'index'), corresponding attribute of the `Label` instance would be taken as a key. overlaps : None or {'max'} How to treat overlaps in maps. If None, nothing is done and maps might have overlaps. If 'max', then maps would not overlap and competing maps will be resolved based on maximal value (e.g. if maps contain probabilities). """ lev = self.levels[0] # we have just 1 here if key_attr is None: key_gen = lambda x: x else: key_gen = lambda x: getattr(x, key_attr) res = [[key_gen(l), self.get_map(l.index, axes_order=axes_order)] for l in lev.find(target, unique=False)] if overlaps == 'max': # not efficient since it places all maps back into a single # ndarray... but well maps = np.array([x[1] for x in res]) maximums = np.argmax(maps, axis=0) overlaps = np.sum(maps != 0, axis=0)>1 # now lets go and infiltrate maps: # and do silly loop since we will reassign # the entries possibly for i in xrange(len(res)): n, m = res[i] loosers = np.logical_and(overlaps, ~(maximums == i)) if len(loosers): # copy and modify m_new = m.copy() m_new[loosers] = 0 res[i][1] = m_new elif overlaps is None: pass else: raise ValueError, \ "Incorrect value of overlaps argument %s" % overlaps return dict(res) class FSLLabelsAtlas(XMLBasedAtlas): """Not sure what this one was for""" def __init__(self, *args, **kwargs): """not implemented""" FSLAtlas.__init__(self, *args, **kwargs) raise NotImplementedError pymvpa2-2.2.0/mvpa2/atlases/transformation.py000066400000000000000000000224151202542755000212200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Coordinate transformations""" import numpy as np if __debug__: from mvpa2.base import debug class TypeProxy: """ Simple class to convert from and then back to original type working with list, tuple, ndarray and having XXX Obsolete functionality ?? """ def __init__(self, value, toType=np.array): if isinstance(value, list): self.__type = list elif isinstance(value, tuple): self.__type = tuple elif isinstance(value, np.ndarray): self.__type = np.array else: raise IndexError("Not understood format of coordinates '%s' for the transformation" % `coord`) def __call__(self, value): return self.__type(value) # def __getitem__(self, value): return self.__type(value) class TransformationBase: """ Basic class to describe a transformation. Pretty much an interface """ def __init__(self, previous=None): self.previous = previous def __getitem__(self, icoord): """ Obtain coordinates, apply the transformation and spit out in the same format (list, tuple, numpy.array) """ # remember original type #speed origType = TypeProxy(coord) # just in case it is not an ndarray, and to provide a copy to manipulate with coord = np.array(icoord) # apply previous transformation if such defined if self.previous: # if __debug__: debug('ATL__', "Applying previous transformation on `%s`" % `coord`) coord = self.previous[coord] #speed if __debug__: debug('ATL__', "Applying main transformation on `%s`" % `coord`) # apply transformation coord_out = self.apply(coord) #speed if __debug__: debug('ATL__', "Applied and got `%s`" % `coord_out`) #speed return origType(coord_out) return coord_out def __call__(self, coord): return self[coord] def apply(self, coord): return coord class SpaceTransformation(TransformationBase): """ To perform transformation from Voxel into Real Space. Simple one -- would subtract the origin and multiply by voxelSize. if to_real_space is True then on call/getitem converts to RealSpace """ def __init__(self, voxelSize=None, origin=None, to_real_space=True, *args, **kwargs): TransformationBase.__init__(self, *args, **kwargs) if not voxelSize is None: self.voxelSize = np.asarray(voxelSize) else: self.voxelSize = 1 if not origin is None: self.origin = np.asarray(origin) else: self.origin = 0 if to_real_space: self.apply = self.to_real_space else: self.apply = self.to_voxel_space ##REF: Name was automagically refactored def to_real_space(self, coord): #speed if not self.origin is None: coord -= self.origin #speed if not self.voxelSize is None: coord *= self.voxelSize return coord ##REF: Name was automagically refactored def to_voxel_space(self, coord): #speed if not self.voxelSize is None: coord /= self.voxelSize #speed if not self.origin is None: coord += self.origin return map(lambda x:int(round(x)), coord) class Linear(TransformationBase): """ Simple linear transformation defined by a matrix """ def __init__(self, transf=np.eye(4), **kwargs): transf = np.asarray(transf) # assure that we have arrays not matrices prev = kwargs.get('previous', None) if prev is not None and isinstance(prev, Linear): if prev.N == transf.shape[0] -1: if __debug__: debug('ATL__', "Colliding 2 linear transformations into 1") transf = np.dot(transf, prev.M) # reassign previous transformation to the current one kwargs['previous'] = prev.previous TransformationBase.__init__(self, **kwargs) self.M = transf self.N = self.M.shape[0] - 1 def apply(self, coord): #speed if len(coord) != self.__N: #speed raise ValueError("Transformation operates on %dD coordinates" \ #speed % self.__N ) #speed if __debug__: debug('ATL__', "Applying linear coord transformation + %s" % self.__M) # Might better come up with a linear transformation coord_ = np.r_[coord, [1.0]] result = np.dot(self.M, coord_) return result[0:-1] class MNI2Tal_MatthewBrett(TransformationBase): """ Transformation to bring MNI coordinates into MNI space Apparently it is due to Matthew Brett http://imaging.mrc-cbu.cam.ac.uk/imaging/MniTalairach """ def __init__(self, *args, **kwargs): TransformationBase.__init__(self, *args, **kwargs) self.__upper = Linear( np.array([ [0.9900, 0, 0, 0 ], [0, 0.9688, 0.0460, 0 ], [0,-0.0485, 0.9189, 0 ], [0, 0, 0, 1.0000] ] ) ) self.__lower = Linear(np.array( [ [0.9900, 0, 0, 0 ], [0, 0.9688, 0.0420, 0 ], [0,-0.0485, 0.8390, 0 ], [0, 0, 0, 1.0000] ] ) ) def apply(self, coord): return {True: self.__upper, False: self.__lower}[coord[2]>=0][coord] def mni_to_tal_meyer_lindenberg98 (*args, **kwargs): """ Due to Andreas Meyer-Lindenberg Taken from http://imaging.mrc-cbu.cam.ac.uk/imaging/MniTalairach """ return Linear( np.array([ [ 0.88, 0, 0, -0.8], [ 0, 0.97, 0, -3.32], [ 0, 0.05, 0.88, -0.44], [ 0.00000, 0.00000, 0.00000, 1.00000] ]), *args, **kwargs ) def mni_to_tal_yohflirt (*args, **kwargs): """Transformations obtained using flirt from Talairach to Standard Transformations were obtained by registration of grey/white matter image from talairach atlas to FSL's standard volume. Following sequence of commands was used: fslroi /usr/share/rumba/atlases/data/talairach_atlas.nii.gz talairach_graywhite.nii.gz 3 1 flirt -in talairach_graywhite.nii.gz \ -ref /usr/apps/fsl.4.1/data/standard/MNI152_T1_1mm_brain.nii.gz \ -out talairach2mni.nii.gz -omat talairach2mni.mat \ -searchrx -20 20 -searchry -20 20 -searchrz -20 20 -coarsesearch 10 -finesearch 6 -v flirt -datatype float -in talairach_graywhite.nii.gz -init talairach2mni.mat \ -ref /usr/apps/fsl.4.1/data/standard/MNI152_T1_1mm_brain.nii.gz \ -out talairach2mni_fine1.nii.gz -omat talairach2mni_fine1.mat \ -searchrx -10 10 -searchry -10 10 -searchrz -10 10 -coarsesearch 5 -finesearch 1 -v convert_xfm -inverse -omat mni2talairach.mat talairach2mni_fine1.mat """ return Linear( t=np.array([ [ 1.00448, -0.00629625, 0.00741359, 0.70565, ], [ 0.0130797, 0.978238, 0.0731315, -3.8354, ], [ 0.000248407, -0.0374777, 0.838311, 18.6202, ], [ 0, 0, 0, 1, ], ]) , *args, **kwargs ) def tal_to_mni_yohflirt (*args, **kwargs): """See mni_to_tal_yohflirt doc """ return Linear( np.array([ [ 1.00452, 0.00441281, -0.011011, -0.943886], [ -0.0141149, 1.00867, -0.169177, 14.7016], [ 0.00250222, 0.0920984, 1.18656, -33.922], [ 0.00000, 0.00000, 0.00000, 1.00000] ]), *args, **kwargs ) def mni_to_tal_lancaster07_fsl (*args, **kwargs): return Linear( np.array([ [ 0.9464, 0.0034, -0.0026, -1.0680], [ -0.0083, 0.9479, -0.0580, -1.0239], [ 0.0053, 0.0617, 0.9010, 3.1883], [ 0.0000, 0.0000, 0.0000, 1.0000] ]), *args, **kwargs ) def tal_to_mni_lancaster07_fsl (*args, **kwargs): return Linear( np.array([ [ 1.056585, -0.003972, 0.002793, 1.115461], [ 0.008834, 1.050528, 0.067651, 0.869379], [-0.00682 , -0.071916, 1.105229, -3.60472 ], [ 0. , 0. , 0. , 1. ]]), *args, **kwargs ) def mni_to_tal_lancaster07pooled (*args, **kwargs): return Linear( np.array([ [ 0.93570, 0.00290, -0.00720, -1.04230], [ -0.00650, 0.93960, -0.07260, -1.39400], [ 0.01030, 0.07520, 0.89670, 3.64750], [ 0.00000, 0.00000, 0.00000, 1.00000] ]), *args, **kwargs ) def tal_to_mni_lancaster07pooled (*args, **kwargs): return Linear( np.array([ [ 1.06860, -0.00396, 0.00826, 1.07816], [ 0.00640, 1.05741, 0.08566, 1.16824], [ -0.01281, -0.08863, 1.10792, -4.17805], [ 0.00000, 0.00000, 0.00000, 1.00000] ]), *args, **kwargs ) if __name__ == '__main__': #t = Tal2Mni tl = tal_to_mni_lancaster07_fsl() tli = mni_to_tal_lancaster07_fsl() tml = mni_to_tal_meyer_lindenberg98() #print t[1,3,2] print tl[(1,3,2)] print tli[[1,3,2]] print tml[[1,3,2]] # print t[(1,3,2,2)] pymvpa2-2.2.0/mvpa2/atlases/warehouse.py000066400000000000000000000073361202542755000201610ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Collection of the known atlases""" import os from mvpa2.atlases.base import * from mvpa2.atlases.fsl import * KNOWN_ATLAS_FAMILIES = { 'pymvpa': (["talairach", "talairach-dist"], r"/usr/share/rumba/atlases/data/%(name)s_atlas.xml"), 'fsl': (["HarvardOxford-Cortical", "HarvardOxford-Subcortical", "JHU-tracts", "Juelich", "MNI", "Thalamus"], r"/usr/share/fsl/data/atlases/%(name)s.xml") # XXX make use of FSLDIR } # map to go from the name to the path KNOWN_ATLASES = dict(reduce(lambda x,y:x+[(yy,y[1]) for yy in y[0]], KNOWN_ATLAS_FAMILIES.values(), [])) def Atlas(filename=None, name=None, *args, **kwargs): """A convinience factory for the atlases """ if filename is None: if name is None: raise ValueError, \ "Please provide either path or name of the atlas to be used" atlaspath = KNOWN_ATLASES[name] filename = atlaspath % ( {'name': name} ) if not os.path.exists(filename): raise IOError, \ "File %s for atlas %s was not found" % (filename, name) else: if name is not None: raise ValueError, "Provide only filename or name" try: # Just to guestimate what atlas that is tempAtlas = XMLBasedAtlas(filename=filename, load_maps=False) #, *args, **kwargs) version = tempAtlas.version atlas_source = None for cls in [PyMVPAAtlas, FSLAtlas]: if cls._check_version(version): atlas_source = cls.source break if atlas_source is None: if __debug__: debug('ATL_', "Unknown atlas " + filename) return tempAtlas atlasTypes = { 'PyMVPA': {"Label" : LabelsAtlas, "Reference": ReferencesAtlas}, 'FSL': {"Label" : FSLLabelsAtlas, "Probabalistic": FSLProbabilisticAtlas} }[atlas_source] atlasType = tempAtlas.header.type.text if atlasTypes.has_key(atlasType): if __debug__: debug('ATL_', "Creating %s Atlas" % atlasType) return atlasTypes[atlasType](filename=filename, *args, **kwargs) #return ReferencesAtlas(filename) else: printdebug("Unknown %s type '%s' of atlas in %s." " Known are %s" % (atlas_source, atlasType, filename, atlasTypes.keys()), 2) return tempAtlas except XMLAtlasException, e: print "File %s is not a valid XML based atlas due to %s" \ % (filename, `e`) raise e if __name__ == '__main__': from mvpa2.base import verbose verbose.level = 10 for name in [ #'data/talairach_atlas.xml', '/usr/share/fsl/data/atlases/HarvardOxford-Cortical.xml', '/usr/share/fsl/data/atlases/HarvardOxford-Subcortical.xml' ]: atlas = Atlas(name) #print isinstance(atlas.atlas, objectify.ObjectifiedElement) #print atlas.header.images.imagefile.get('offset') #print atlas.label_voxel( (0, -7, 20) ) #print atlas[ 0, 0, 0 ] print atlas[ -63, -12, 22 ] #print atlas[ 0, -7, 20, [1,2,3] ] #print atlas[ (0, -7, 20), 1:2 ] #print atlas[ (0, -7, 20) ] #print atlas[ (0, -7, 20), : ] # print atlas.get_labels(0) pymvpa2-2.2.0/mvpa2/base/000077500000000000000000000000001202542755000150525ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/base/__init__.py000066400000000000000000000340171202542755000171700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Base functionality of PyMVPA Module Organization =================== mvpa2.base module contains various modules which are used through out PyMVPA code, and are generic building blocks :group Basic: externals, config, verbosity, dochelpers """ __docformat__ = 'restructuredtext' import sys, os from mvpa2.base.config import ConfigManager from mvpa2.base.verbosity import LevelLogger, OnceLogger # # Setup verbose and debug outputs # class _SingletonType(type): """Simple singleton implementation adjusted from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/412551 """ def __init__(mcs, *args): type.__init__(mcs, *args) mcs._instances = {} def __call__(mcs, sid, instance, *args): if not sid in mcs._instances: mcs._instances[sid] = instance return mcs._instances[sid] class __Singleton: """To ensure single instance of a class instantiation (object) """ __metaclass__ = _SingletonType def __init__(self, *args): pass # Provided __call__ just to make silly pylint happy def __call__(self): raise NotImplementedError # # As the very first step: Setup configuration registry instance and # read all configuration settings from files and env variables # _cfgfile = os.environ.get('MVPACONFIG', None) if _cfgfile: # We have to provide a list _cfgfile = [_cfgfile] cfg = __Singleton('cfg', ConfigManager(_cfgfile)) verbose = __Singleton("verbose", LevelLogger( handlers = cfg.get('verbose', 'output', default='stdout').split(','))) # Not supported/explained/used by now since verbose(0, is to print errors #error = __Singleton("error", LevelLogger( # handlers=environ.get('MVPA_ERROR_OUTPUT', 'stderr').split(','))) # Levels for verbose # 0 -- nothing besides errors # 1 -- high level stuff -- top level operation or file operations # 2 -- cmdline handling # 3 -- # 4 -- computation/algorithm relevant thingies # Helper for errors printing def error(msg, critical=True): """Helper function to output errors in a consistent way. Parameters ---------- msg : string Actual error message (will be prefixed with ERROR:) critical : bool If critical error -- exit with """ verbose(0, "ERROR: " + msg) if critical: raise sys.exit(1) # Lets check if environment can tell us smth if cfg.has_option('general', 'verbose'): verbose.level = cfg.getint('general', 'verbose') class WarningLog(OnceLogger): """Logging class of messsages to be printed just once per each message """ def __init__(self, btlevels=10, btdefault=False, maxcount=1, *args, **kwargs): """Define Warning logger. It is defined by btlevels : int how many levels of backtrack to print to give a hint on WTF btdefault : bool if to print backtrace for all warnings at all maxcount : int how many times to print each warning """ OnceLogger.__init__(self, *args, **kwargs) self.__btlevels = btlevels self.__btdefault = btdefault self.__maxcount = maxcount self.__explanation_seen = False def __call__(self, msg, bt=None): import traceback if bt is None: bt = self.__btdefault tb = traceback.extract_stack(limit=2) msgid = repr(tb[-2]) # take parent as the source of ID fullmsg = "WARNING: %s" % msg if not self.__explanation_seen: self.__explanation_seen = True fullmsg += "\n * Please note: warnings are " + \ "printed only once, but underlying problem might " + \ "occur many times *" if bt and self.__btlevels > 0: fullmsg += "Top-most backtrace:\n" fullmsg += reduce(lambda x, y: x + "\t%s:%d in %s where '%s'\n" % \ y, traceback.extract_stack(limit=self.__btlevels), "") OnceLogger.__call__(self, msgid, fullmsg, self.__maxcount) ##REF: Name was automagically refactored def _set_max_count(self, value): """Set maxcount for the warning""" self.__maxcount = value maxcount = property(fget=lambda x:x.__maxcount, fset=_set_max_count) # XXX what is 'bt'? Maybe more verbose name? if cfg.has_option('warnings', 'bt'): warnings_btlevels = cfg.getint('warnings', 'bt') warnings_bt = True else: warnings_btlevels = 10 warnings_bt = False if cfg.has_option('warnings', 'count'): warnings_maxcount = cfg.getint('warnings', 'count') else: warnings_maxcount = 1 warning = WarningLog( handlers={ False: cfg.get('warnings', 'output', default='stdout').split(','), True: []}[cfg.getboolean('warnings', 'suppress', default=False)], btlevels=warnings_btlevels, btdefault=warnings_bt, maxcount=warnings_maxcount ) if __debug__: from mvpa2.base.verbosity import DebugLogger # NOTE: all calls to debug must be preconditioned with # if __debug__: debug = __Singleton("debug", DebugLogger( handlers=cfg.get('debug', 'output', default='stdout').split(','))) # set some debugging matricses to report # debug.register_metric('vmem') # List agreed sets for debug debug.register('PY', "No suppression of various warnings (numpy, scipy) etc.") debug.register('VERBOSE', "Verbose control debugging") debug.register('DBG', "Debug output itself") debug.register('STDOUT', "To decorate stdout with debug metrics") debug.register('DOCH', "Doc helpers") debug.register('INIT', "Just sequence of inits") debug.register('RANDOM', "Random number generation") debug.register('EXT', "External dependencies") debug.register('EXT_', "External dependencies (verbose)") debug.register('TEST', "Debug unittests") debug.register('MODULE_IN_REPR', "Include module path in __repr__") debug.register('ID_IN_REPR', "Include id in __repr__") debug.register('CMDLINE', "Handling of command line parameters") debug.register('NO', "Nodes") debug.register('DG', "Data generators") debug.register('LAZY', "Miscelaneous 'lazy' evaluations") debug.register('LOOP', "Support's loop construct") debug.register('PLR', "PLR call") debug.register('NBH', "Neighborhood estimations") debug.register('SLC', "Searchlight call") debug.register('SLC_', "Searchlight call (verbose)") debug.register('SA', "Sensitivity analyzers") debug.register('SOM', "Self-organizing-maps (SOM)") debug.register('IRELIEF', "Various I-RELIEFs") debug.register('SA_', "Sensitivity analyzers (verbose)") debug.register('PSA', "Perturbation analyzer call") debug.register('RFEC', "Recursive Feature Elimination call") debug.register('RFEC_', "Recursive Feature Elimination call (verbose)") debug.register('IFSC', "Incremental Feature Search call") debug.register('DS', "*Dataset") debug.register('DS_NIFTI', "NiftiDataset(s)") debug.register('DS_', "*Dataset (verbose)") debug.register('DS_ID', "ID Datasets") debug.register('DS_STATS',"Datasets statistics") debug.register('SPL', "*Splitter") debug.register('TRAN', "Transformers") debug.register('TRAN_', "Transformers (verbose)") # CHECKs debug.register('CHECK_DS_SELECT', "Check in dataset.select() for sorted and unique indexes") debug.register('CHECK_DS_SORTED', "Check in datasets for sorted") debug.register('CHECK_IDS_SORTED', "Check for ids being sorted in mappers") debug.register('CHECK_TRAINED', "Checking in checking if clf was trained on given dataset") debug.register('CHECK_RETRAIN', "Checking in retraining/retesting") debug.register('CHECK_STABILITY', "Checking for numerical stability") debug.register('ENFORCE_CA_ENABLED', "Forcing all ca to be enabled") debug.register('MAP', "*Mapper") debug.register('MAP_', "*Mapper (verbose)") debug.register('FX', "FxMapper") debug.register('ZSCM', "ZScoreMapper") debug.register('COL', "Generic Collectable") debug.register('COL_RED', "__reduce__ of collectables") debug.register('UATTR', "Attributes with unique") debug.register('ST', "State") debug.register('STV', "State Variable") debug.register('COLR', "Collector for ca and classifier parameters") debug.register('ES', "Element selectors") debug.register('LRN', "Base learners") # TODO remove once everthing is a learner debug.register('CLF', "Base Classifiers") debug.register('CLF_', "Base Classifiers (verbose)") #debug.register('CLF_TB', # "Report traceback in train/predict. Helps to resolve WTF calls it") debug.register('CLFBST', "BoostClassifier") #debug.register('CLFBST_TB', "BoostClassifier traceback") debug.register('CLFPRX', "ProxyClassifier") debug.register('CLFBIN', "BinaryClassifier") debug.register('CLFTREE', "TreeClassifier") debug.register('CLFMC', "MulticlassClassifier") debug.register('CLFSPL', "SplitClassifier") debug.register('CLFSPL_',"SplitClassifier (verbose)") debug.register('CLFFS', "FeatureSelectionClassifier") debug.register('CLFFS_', "FeatureSelectionClassifier (verbose)") debug.register('STAT', "Statistics estimates") debug.register('STAT_', "Statistics estimates (verbose)") debug.register('STAT__', "Statistics estimates (very verbose)") debug.register('STATMC', "Progress in Monte-Carlo estimation") debug.register('FS', "FeatureSelections") debug.register('FS_', "FeatureSelections (verbose)") debug.register('FSPL', "FeatureSelectionPipeline") debug.register('KNN', "kNN") debug.register('SVM', "SVM") debug.register('SVM_', "SVM (verbose)") debug.register('LIBSVM', "Internal libsvm output") debug.register('SMLR', "SMLR") debug.register('SMLR_', "SMLR verbose") debug.register('LARS', "LARS") debug.register('LARS_', "LARS (verbose)") debug.register('ENET', "ENET") debug.register('ENET_', "ENET (verbose)") debug.register('GLMNET', "GLMNET") debug.register('GLMNET_', "GLMNET (verbose)") debug.register('GNB', "GNB - Gaussian Naive Bayes") debug.register('GPR', "GPR") debug.register('GPR_WEIGHTS', "Track progress of GPRWeights computation") debug.register('KRN', "Kernels module (mvpa2.kernels)") debug.register('KRN_SG', "Shogun kernels module (mvpa2.kernels.sg)") debug.register('SAL', "Samples lookup (for cached kernels)") debug.register('MOD_SEL', "Model Selector (also makes openopt's iprint=0)") debug.register('OPENOPT', "OpenOpt toolbox verbose (iprint=1)") debug.register('SG', "PyMVPA SG wrapping") debug.register('SG_', "PyMVPA SG wrapping verbose") debug.register('SG__', "PyMVPA SG wrapping debug") debug.register('SG_GC', "For all entities enable highest level" " (garbage collector)") debug.register('SG_LINENO', "Enable printing of the file:lineno" " where SG_ERROR occurred.") debug.register('SG_SVM', "Internal shogun debug output for SVM itself") debug.register('SG_FEATURES', "Internal shogun debug output for features") debug.register('SG_LABELS', "Internal shogun debug output for labels") debug.register('SG_KERNELS', "Internal shogun debug output for kernels") debug.register('SG_PROGRESS', "Internal shogun progress bar during computation") debug.register('IOH', "IO Helpers") debug.register('HDF5', "HDF5 IO") debug.register('CM', "Confusion matrix computation") debug.register('ROC', "ROC analysis") debug.register('REPM', "Repeated measure (e.g. super-class of CrossValidation)") debug.register('CERR', "Various ClassifierErrors") debug.register('HPAL', "Hyperalignment") debug.register('HPAL_', "Hyperalignment (verbose)") debug.register('ATL', "Atlases") debug.register('ATL_', "Atlases (verbose)") debug.register('ATL__', "Atlases (very verbose)") debug.register('PLLB', "plot_lightbox") debug.register('REP', "Reports") debug.register('REP_', "Reports (verbose)") debug.register('SUITE', "Import of mvpa2.suite") debug.register('ATTRREFER', "Debugging of top-level attribute referencing, " "needed for current refactoring carried out in tent/flexds") # Lets check if environment can tell us smth if cfg.has_option('general', 'debug'): debug.set_active_from_string(cfg.get('general', 'debug')) # Lets check if environment can tell us smth if cfg.has_option('debug', 'metrics'): debug.register_metric(cfg.get('debug', 'metrics').split(",")) if 'STDOUT' in debug.active: # Lets decorate sys.stdout to possibly figure out what brings # the noise class _pymvpa_stdout_debug(object): """ Kudos to CODEHEAD http://codingrecipes.com/decorating-pythons-sysstdout for this design pattern """ def __init__(self, sys): self.stdout = sys.stdout sys.stdout = self self._inhere = False self._newline = True def write(self, txt): try: if not self._inhere and self._newline: self._inhere = True debug('STDOUT', "", lf=False, cr=False) self.stdout.write(txt) self._newline = txt.endswith('\n') finally: self._inhere = False _out = _pymvpa_stdout_debug(sys) if __debug__: debug('INIT', 'mvpa2.base end') pymvpa2-2.2.0/mvpa2/base/attributes.py000066400000000000000000000160701202542755000176160ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Module with some special objects to be used as magic attributes with dedicated containers aka. `Collections`. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.collections import Collectable from mvpa2.misc.exceptions import UnknownStateError import mvpa2.support.copy as copy if __debug__: from mvpa2.base import debug ################################################################## # Various attributes which will be collected into collections # class IndexedCollectable(Collectable): """Collectable with position information specified with index Derived classes will have specific semantics: * ConditionalAttribute: conditional storage * Parameter: attribute with validity ranges. `IndexedAttributes` instances are to be automagically grouped into corresponding collections for each class by `StateCollector` metaclass, i.e. it would be done on a class creation (i.e. not per each instance). Upon instance creation those collection templates will be copied for the instance. """ _instance_index = 0 def __init__(self, index=None, *args, **kwargs): """ Parameters ---------- value : arbitrary (see derived implementations) The actual value of this attribute. **kwargs Passed to `Collectable` """ if index is None: IndexedCollectable._instance_index += 1 index = IndexedCollectable._instance_index else: # TODO: there can be collision between custom provided indexes # and the ones automagically assigned. # Check might be due pass self._instance_index = index self._isset = False self.reset() Collectable.__init__(self, *args, **kwargs) if __debug__ and 'COL' in debug.active: debug("COL", "Initialized new IndexedCollectable #%d:%s %r", (index, self.name, self)) # XXX shows how indexing was screwed up -- not copied etc #def __copy__(self): # # preserve attribute type # copied = self.__class__(name=self.name, doc=self.__doc__) # # just get a view of the old data! # copied.value = copy.copy(self.value) # return copied def __reduce__(self): cr = Collectable.__reduce__(self) assert(len(cr) == 2) # otherwise we need to change logic below res = (cr[0], (self._instance_index,) + cr[1], {'_isset' : self._isset}) #if __debug__ and 'COL_RED' in debug.active: # debug('COL_RED', 'Returning %s for %s' % (res, self)) return res # XXX had to override due to _isset, init= def _set(self, val, init=False): """4Developers: Override this method in derived classes if you desire some logic (drop value in case of ca, or not allow to set value for read-only Parameters unless called with init=1) etc) """ if __debug__: # Since this call is quite often, don't convert # values to strings here, rely on passing them # withing debug("COL", "%s %s to %s ", ({True: 'Initializing', False: 'Setting'}[init], self, val)) self._value = val self._isset = True @property def is_set(self): return self._isset def reset(self): """Simply reset the flag""" if __debug__ and self._isset: debug("COL", "Reset %s to being non-modified", (self.name,)) self._isset = False # TODO XXX unify all bloody __str__ def __str__(self): res = "%s" % (self.name) if self.is_set: res += '*' # so we have the value already return res # XXX reports value depending on _isset def __repr__(self): if not self._isset: value = None else: value = self.value return "%s(value=%s, name=%s, doc=%s, index=%s)" % ( self.__class__.__name__, repr(value), repr(self.name), repr(self.__doc__), self._instance_index, ) class ConditionalAttribute(IndexedCollectable): """Simple container intended to conditionally store the value """ def __init__(self, enabled=True, *args, **kwargs): """ Parameters ---------- enabled : bool If a ConditionalAttribute is not enabled then assignment of any value has no effect, i.e. nothing is stored. **kwargs Passed to `IndexedCollectable` """ # Force enabled state regardless of the input # to facilitate testing if __debug__ and 'ENFORCE_CA_ENABLED' in debug.active: enabled = True self.__enabled = enabled self._defaultenabled = enabled IndexedCollectable.__init__(self, *args, **kwargs) def __reduce__(self): icr = IndexedCollectable.__reduce__(self) icr[2].update({'_defaultenabled' : self._defaultenabled, '_value': self._value}) # kill the value from Collectable, because we have to put it in the dict # to prevent loosing it during reconstruction when the CA is disabled res = (icr[0], (self.__enabled, icr[1][0], None) + icr[1][2:], icr[2]) #if __debug__ and 'COL_RED' in debug.active: # debug('COL_RED', 'Returning %s for %s' % (res, self)) return res def __str__(self): res = IndexedCollectable.__str__(self) if self.__enabled: res += '+' # it is enabled but no value is assigned yet return res def _get(self): if not self.is_set: raise UnknownStateError("Unknown yet value of %s" % (self.name)) return IndexedCollectable._get(self) def _set(self, val, init=False): if self.__enabled: # XXX may be should have left simple assignment # self._value = val IndexedCollectable._set(self, val) elif __debug__: debug("COL", "Not setting disabled %s to %s ", (self, val)) def reset(self): """Simply detach the value, and reset the flag""" IndexedCollectable.reset(self) self._value = None def _get_enabled(self): return self.__enabled def _set_enabled(self, value=False): if self.__enabled == value: # Do nothing since it is already in proper state return if __debug__: debug("STV", "%s %s", ({True: 'Enabling', False: 'Disabling'}[value], self)) self.__enabled = value enabled = property(fget=_get_enabled, fset=_set_enabled) pymvpa2-2.2.0/mvpa2/base/collections.py000066400000000000000000000474201202542755000177510ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Module with some special objects to be used as magic attributes with dedicated containers aka. `Collections`. """ __docformat__ = 'restructuredtext' import copy, re import numpy as np from mvpa2.base.dochelpers import _str, borrowdoc from mvpa2.base.types import is_sequence_type if __debug__: # we could live without, but it would be nicer with it try: from mvpa2.base import debug __mvpadebug__ = True except ImportError: __mvpadebug__ = False _object_getattribute = dict.__getattribute__ _object_setattr = dict.__setattr__ _object_setitem = dict.__setitem__ # To validate fresh _dict_api = set(dict.__dict__) class Collectable(object): """Collection element. A named single item container that allows for type, or property checks of an assigned value, and also offers utility functionality. """ def __init__(self, value=None, name=None, doc=None): """ Parameters ---------- value : arbitrary (see derived implementations) The actual value of this attribute. name : str Name of the collectable under which it should be available in its respective collection. doc : str Documentation about the purpose of this collectable. """ if doc is not None: # to prevent newlines in the docstring doc = re.sub('[\n ]+', ' ', doc) self.__doc__ = doc self.__name = name self._value = None if not value is None: self._set(value) if __debug__ and __mvpadebug__: debug("COL", "Initialized %r", (self,)) def __copy__(self): # preserve attribute type copied = self.__class__(name=self.name, doc=self.__doc__) # just get a view of the old data! copied.value = copy.copy(self.value) return copied ## def __deepcopy__(self, memo=None): ## # preserve attribute type ## copied = self.__class__(name=self.name, doc=self.__doc__) ## # get a deepcopy of the old data! ## copied._value = copy.deepcopy(self._value, memo) ## return copied def _get(self): return self._value def _set(self, val): if __debug__ and __mvpadebug__: # Since this call is quite often, don't convert # values to strings here, rely on passing them # withing msgargs debug("COL", "Setting %s to %s ", (self, val)) self._value = val def __str__(self): res = "%s" % (self.name) return res def __reduce__(self): return (self.__class__, (self._value, self.name, self.__doc__)) def __repr__(self): value = self.value return "%s(name=%s, doc=%s, value=%s)" % (self.__class__.__name__, repr(self.name), repr(self.__doc__), repr(value)) def _get_name(self): return self.__name def _set_name(self, name): """Set the name of parameter Notes ----- Should not be called for an attribute which is already assigned to a collection """ if name is not None: if isinstance(name, basestring): if name[0] == '_': raise ValueError, \ "Collectable attribute name must not start " \ "with _. Got %s" % name else: raise ValueError, \ "Collectable attribute name must be a string. " \ "Got %s" % `name` self.__name = name # Instead of going for VProperty lets make use of virtual method def _get_virtual(self): return self._get() def _set_virtual(self, value): return self._set(value) value = property(_get_virtual, _set_virtual) name = property(_get_name, _set_name) class SequenceCollectable(Collectable): """Collectable to handle sequences. It takes care about caching and recomputing unique values, as well as optional checking if assigned sequences have a desired length. """ def __init__(self, value=None, name=None, doc="Sequence attribute", length=None): """ Parameters ---------- value : arbitrary (see derived implementations) The actual value of this attribute. name : str Name of the attribute under which it should be available in its respective collection. doc : str Documentation about the purpose of this attribute. length : int If not None, enforce any array assigned as value of this collectable to be of this `length`. If an array does not match this requirement it is not modified, but a ValueError is raised. """ # first configure the value checking, to enable it for the base class # init # XXX should we disallow empty Collectables?? if not value is None and not hasattr(value, '__len__'): raise ValueError("%s only takes sequences as value." % self.__class__.__name__) self._target_length = length Collectable.__init__(self, value=value, name=name, doc=doc) self._reset_unique() def __reduce__(self): return (self.__class__, (self.value, self.name, self.__doc__, self._target_length)) def __repr__(self): value = self.value return "%s(name=%s, doc=%s, value=%s, length=%s)" \ % (self.__class__.__name__, repr(self.name), repr(self.__doc__), repr(value), repr(self._target_length)) def __len__(self): return self.value.__len__() def __getitem__(self, key): return self.value.__getitem__(key) def _set(self, val): # check if the new value has the desired length -- if length checking is # desired at all if not self._target_length is None \ and len(val) != self._target_length: raise ValueError("Value length [%i] does not match the required " "length [%i] of attribute '%s'." % (len(val), self._target_length, str(self.name))) self._reset_unique() Collectable._set(self, val) def _reset_unique(self): self._unique_values = None @property def unique(self): """Return unique values """ if self.value is None: return None if self._unique_values is None: try: self._unique_values = np.unique(self.value) except TypeError: # We are probably on Python 3 and value contains None's # or any other different type breaking the comparison # so operate through set() # See http://projects.scipy.org/numpy/ticket/2188 # Get a 1-D array # list around set is required for Python3 value_unique = list(set(np.asanyarray(self.value).ravel())) try: self._unique_values = np.array(value_unique) except ValueError: # without forced dtype=object it might have failed due to # something related to # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=679948 # which was fixed recently... self._unique_values = np.array(value_unique, dtype=object) return self._unique_values def set_length_check(self, value): """Set a target length of the value in this collectable. Parameters ---------- value : int If not None, enforce any array assigned as value of this collectable to be of this `length`. If an array does not match this requirement it is not modified, but a ValueError is raised. """ self._target_length = value class ArrayCollectable(SequenceCollectable): """Collectable embedding an array. When shallow-copied it includes a view of the array in the copy. """ def __copy__(self): # preserve attribute type copied = self.__class__(name=self.name, doc=self.__doc__, length=self._target_length) # just get a view of the old data! copied.value = self.value.view() return copied def _set(self, val): if not hasattr(val, 'view'): if is_sequence_type(val): try: val = np.asanyarray(val) except ValueError, e: if "setting an array element with a sequence" in str(e): val = np.asanyarray(val, dtype=object) else: raise else: raise ValueError("%s only takes ndarrays (or array-likes " "providing view(), or sequence that can " "be converted into arrays (got '%s')." % (self.__class__.__name__, str(type(val)))) SequenceCollectable._set(self, val) class SampleAttribute(ArrayCollectable): """Per sample attribute in a dataset""" pass class FeatureAttribute(ArrayCollectable): """Per feature attribute in a dataset""" pass class DatasetAttribute(ArrayCollectable): """Dataset attribute""" pass class Collection(dict): """Container of some Collectables. """ def __init__(self, items=None): """ Parameters ---------- items : all types accepted by update() """ dict.__init__(self) if not items is None: self.update(items) def copy(self, deep=True, a=None, memo=None): """Create a copy of a collection. By default this is going to return a deep copy of the collection, hence no data would be shared between the original dataset and its copy. Parameters ---------- deep : boolean, optional If False, a shallow copy of the collection is return instead. The copy contains only views of the values. a : list or None List of attributes to include in the copy of the dataset. If `None` all attributes are considered. If an empty list is given, all attributes are stripped from the copy. memo : dict Developers only: This argument is only useful if copy() is called inside the __deepcopy__() method and refers to the dict-argument `memo` in the Python documentation. """ # create the new collections of the right type derived classes # might like to assure correct setting of additional # attributes such as self._attr_length anew = self.__class__() # filter the attributes if necessary if a is None: aorig = self else: aorig = dict([(k, v) for k, v in self.iteritems() if k in a]) # XXX copyvalues defaults to None which provides capability to # just bind values (not even 'copy'). Might it need be # desirable here? anew.update(aorig, copyvalues=deep and 'deep' or 'shallow', memo=memo) if __debug__ and __mvpadebug__ and 'COL' in debug.active: debug("COL", "Copied %s into %s using args deep=%r a=%r", (self, anew, deep, a)) #if 'state2' in str(self): # import pydb; pydb.debugger() return anew # XXX If enabled, then overrides dict.__reduce* leading to conditional # attributes loosing their documentations in copying etc. # #def __copy__(self): # return self.copy(deep=False) # # #def __deepcopy__(self, memo=None): # return self.copy(deep=True, memo=memo) def __setitem__(self, key, value): """Add a new Collectable to the collection Parameters ---------- key : str The name of the collectable under which it is available in the collection. This name is also stored in the item itself value : anything The actual item the should become part of the collection. If this is not an instance of `Collectable` or a subclass the value is automatically wrapped into it. """ # Check if given key is not trying to override anything in # dict interface if key in _dict_api: raise ValueError, \ "Cannot add a collectable %r to collection %s since an " \ "attribute or a method with such a name is already present " \ "in dict interface. Choose some other name." % (key, self) if not isinstance(value, Collectable): value = Collectable(value) # overwrite the Collectable's name with the given one value.name = key _object_setitem(self, key, value) def update(self, source, copyvalues=None, memo=None): """ Parameters ---------- source : list, Collection, dict copyvalues : None, shallow, deep If None, values will simply be bound to the collection items' values thus sharing the same instance. 'shallow' and 'deep' copies use 'copy' and 'deepcopy' correspondingly. memo : dict Developers only: This argument is only useful if copy() is called inside the __deepcopy__() method and refers to the dict-argument `memo` in the Python documentation. """ if isinstance(source, list): for a in source: if isinstance(a, tuple): #list of tuples, e.g. from dict.items() name = a[0] value = a[1] else: # list of collectables name = a.name value = a if copyvalues is None: self[name] = value elif copyvalues == 'shallow': self[name] = copy.copy(value) elif copyvalues == 'deep': self[name] = copy.deepcopy(value, memo) else: raise ValueError("Unknown value ('%s') for copy argument." % copy) elif isinstance(source, dict): for k, v in source.iteritems(): # expand the docs if isinstance(v, tuple): value = v[0] doc = v[1] else: value = v doc = None # add the attribute with optional docs if copyvalues is None: self[k] = v elif copyvalues == 'shallow': self[k] = copy.copy(v) elif copyvalues == 'deep': self[k] = copy.deepcopy(v, memo) else: raise ValueError("Unknown value ('%s') for copy argument." % copy) # store documentation self[k].__doc__ = doc else: raise ValueError("Collection.upate() cannot handle '%s'." % str(type(source))) def __getattribute__(self, key): try: return self[key].value except KeyError: return _object_getattribute(self, key) def __setattr__(self, key, value): try: self[key].value = value except KeyError: _object_setattr(self, key, value) # TODO: unify with the rest of __repr__ handling def __repr__(self): return "%s(items=%r)" \ % (self.__class__.__name__, self.values()) def __str__(self): return _str(self, ','.join([str(k) for k in sorted(self.keys())])) class UniformLengthCollection(Collection): """Container for attributes with the same length. """ def __init__(self, items=None, length=None): """ Parameters ---------- length : int When adding items to the collection, they are checked if the have this length. """ # cannot call set_length(), since base class __getattribute__ goes wild # before its __init__ is called. self._uniform_length = length Collection.__init__(self, items) def __reduce__(self): return (self.__class__, (self.items(), self._uniform_length)) @borrowdoc(Collection) def copy(self, *args, **kwargs): # Create a generic copy of the collection anew = super(UniformLengthCollection, self).copy(*args, **kwargs) # if it had any attributes assigned, those should have set # attr_length already, otherwise lets assure that we copy the # correct one into the new instance if self.attr_length is not None and anew.attr_length is None: anew.set_length_check(self.attr_length) return anew def set_length_check(self, value): """ Parameters ---------- value : int When adding new items to the collection, they are checked if the have this length. """ self._uniform_length = value for v in self.values(): v.set_length_check(value) def __setitem__(self, key, value): """Add a new IndexedCollectable to the collection Parameters ---------- item : IndexedCollectable or of derived class. Must have 'name' assigned. """ # local binding ulength = self._uniform_length # XXX should we check whether it is some other Collectable? if not isinstance(value, ArrayCollectable): # if it is only a single element iterable, attempt broadcasting if is_sequence_type(value) and len(value) == 1 \ and not ulength is None: if ulength > 1: # cannot use np.repeat, because it destroys dimensionality value = [value[0]] * ulength value = ArrayCollectable(value) if ulength is None: ulength = len(value) elif not len(value.value) == ulength: raise ValueError("Collectable '%s' with length [%i] does not match " "the required length [%i] of collection '%s'." % (key, len(value.value), ulength, str(self))) # tell the attribute to maintain the desired length value.set_length_check(ulength) Collection.__setitem__(self, key, value) attr_length = property(fget=lambda self:self._uniform_length, doc="Uniform length of all attributes in a collection") class SampleAttributesCollection(UniformLengthCollection): """Container for attributes of samples (i.e. labels, chunks...) """ pass class FeatureAttributesCollection(UniformLengthCollection): """Container for attributes of features """ pass class DatasetAttributesCollection(Collection): """Container for attributes of datasets (i.e. mappers, ...) """ pass pymvpa2-2.2.0/mvpa2/base/config.py000066400000000000000000000205231202542755000166730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Registry-like monster""" __docformat__ = 'restructuredtext' from ConfigParser import SafeConfigParser import os.path class ConfigManager(SafeConfigParser): """Central configuration registry for PyMVPA. The purpose of this class is to collect all configurable settings used by various parts of PyMVPA. It is fairly simple and does only little more than the standard Python ConfigParser. Like ConfigParser it is blind to the data that it stores, i.e. not type checking is performed. Configuration files (INI syntax) in multiple location are passed when the class is instantiated or whenever `Config.reload()` is called later on. By default it looks for a config file named `pymvpa2.cfg` in the current directory and `.pymvpa2.cfg` in the user's home directory. Moreover, the constructor takes an optional argument with a list of additional file names to parse. In addition to configuration files, this class also looks for special environment variables to read settings from. Names of such variables have to start with `MVPA_` following by the an optional section name and the variable name itself ('_' as delimiter). If no section name is provided, the variables will be associated with section `general`. Some examples:: MVPA_VERBOSE=1 will become:: [general] verbose = 1 However, `MVPA_VERBOSE_OUTPUT=stdout` becomes:: [verbose] output = stdout Any length of variable name as allowed, e.g. MVPA_SEC1_LONG_VARIABLE_NAME=1 becomes:: [sec1] long variable name = 1 Settings from custom configuration files (specified by the constructor argument) have the highest priority and override settings found in the current directory. They in turn override user-specific settings and finally the content of any `MVPA_*` environment variables overrides all settings read from any file. """ # things we want to count on to be available _DEFAULTS = {'general': { 'verbose': '1', } } def __init__(self, filenames=None): """Initialization reads settings from config files and env. variables. Parameters ---------- filenames : list of filenames """ SafeConfigParser.__init__(self) # store additional config file names if not filenames is None: self.__cfg_filenames = filenames else: self.__cfg_filenames = [] # set critical defaults for sec, vars in ConfigManager._DEFAULTS.iteritems(): self.add_section(sec) for key, value in vars.iteritems(): self.set(sec, key, value) # now get the setting self.reload() def reload(self): """Re-read settings from all configured locations. """ # listof filenames to parse (custom plus some standard ones) homedir = os.path.expanduser('~') user_configfile = os.path.join(homedir, '.pymvpa2.cfg') user_configfile_old = os.path.join(homedir, '.pymvpa.cfg') filenames = self.__cfg_filenames \ + ['pymvpa2.cfg', user_configfile] # Check if config for previous version exists, we need to # warn users since they might need to copy it over if not os.path.exists(user_configfile) and \ os.path.exists(user_configfile_old): # but we can't use our 'warning' since it would not be # defined yet and import here would be circular # so use stock Python one from warnings import warn warn("You seems to have a configuration file %s for previous " "version of PyMVPA but lacking configuration for PyMVPA2. " "Consider copying it into %s" % (user_configfile_old, user_configfile)) # read local and user-specific config files = self.read(filenames) # no look for variables in the environment for var in [v for v in os.environ.keys() if v.startswith('MVPA_')]: # strip leading 'MVPA_' and lower case entries svar = var[5:].lower() # section is next element in name (or 'general' if simple name) if not svar.count('_'): sec = 'general' else: cut = svar.find('_') sec = svar[:cut] svar = svar[cut + 1:].replace('_', ' ') # check if section is already known and add it if not if not self.has_section(sec): self.add_section(sec) # set value self.set(sec, svar, os.environ[var]) def __repr__(self): """Generate INI file content with current configuration. """ # make adaptor to use str as file-like (needed for ConfigParser.write() class file2str(object): def __init__(self): self.__s = '' def write(self, val): self.__s += val def str(self): return self.__s r = file2str() self.write(r) return r.str() def save(self, filename): """Write current configuration to a file. """ f = open(filename, 'w') self.write(f) f.close() def get(self, section, option, default=None, **kwargs): """Wrapper around SafeConfigParser.get() with a custom default value. This method simply wraps the base class method, but adds a `default` keyword argument. The value of `default` is returned whenever the config parser does not have the requested option and/or section. """ if not self.has_option(section, option): return default try: return SafeConfigParser.get(self, section, option, **kwargs) except ValueError, e: # provide somewhat descriptive error raise ValueError, \ "Failed to obtain value from configuration for %s.%s. " \ "Original exception was: %s" % (section, option, e) def getboolean(self, section, option, default=None): """Wrapper around SafeConfigParser.getboolean() with a custom default. This method simply wraps the base class method, but adds a `default` keyword argument. The value of `default` is returned whenever the config parser does not have the requested option and/or section. """ if not self.has_option(section, option): if isinstance(default, bool): return default else: # compatibility layer for py3 version of ConfigParser if hasattr(self, '_boolean_states'): boolean_states = self._boolean_states else: boolean_states = self.BOOLEAN_STATES if default.lower() not in boolean_states: raise ValueError, 'Not a boolean: %s' % default return boolean_states[default.lower()] return SafeConfigParser.getboolean(self, section, option) ##REF: Name was automagically refactored def get_as_dtype(self, section, option, dtype, default=None): """Convenience method to query options with a custom default and type This method simply wraps the base class method, but adds a `default` keyword argument. The value of `default` is returned whenever the config parser does not have the requested option and/or section. In addition, the returned value is converted into the specified `dtype`. """ if not self.has_option(section, option): return default try: return SafeConfigParser._get(self, section, dtype, option) except ValueError, e: # provide somewhat descriptive error raise ValueError, \ "Failed to obtain value from configuration for %s.%s. " \ "Original exception was: %s" % (section, option, e) pymvpa2-2.2.0/mvpa2/base/dataset.py000066400000000000000000000747011202542755000170620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Multi-purpose dataset container with support for attributes.""" __docformat__ = 'restructuredtext' import numpy as np import copy from mvpa2.base import externals, cfg from mvpa2.base.collections import SampleAttributesCollection, \ FeatureAttributesCollection, DatasetAttributesCollection from mvpa2.base.types import is_datasetlike from mvpa2.base.dochelpers import _str if __debug__: from mvpa2.base import debug __REPR_STYLE__ = cfg.get('datasets', 'repr', 'full') if not __REPR_STYLE__ in ('full', 'str'): raise ValueError, "Incorrect value %r for option datasets.repr." \ " Valid are 'full' and 'str'." % __REPR_STYLE__ class AttrDataset(object): """Generic storage class for datasets with multiple attributes. A dataset consists of four pieces. The core is a two-dimensional array that has variables (so-called `features`) in its columns and the associated observations (so-called `samples`) in the rows. In addition a dataset may have any number of attributes for features and samples. Unsurprisingly, these are called 'feature attributes' and 'sample attributes'. Each attribute is a vector of any datatype that contains a value per each item (feature or sample). Both types of attributes are organized in their respective collections -- accessible via the `sa` (sample attribute) and `fa` (feature attribute) attributes. Finally, a dataset itself may have any number of additional attributes (i.e. a mapper) that are stored in their own collection that is accessible via the `a` attribute (see examples below). Attributes ---------- sa : Collection Access to all sample attributes, where each attribute is a named vector (1d-array) of an arbitrary datatype, with as many elements as rows in the `samples` array of the dataset. fa : Collection Access to all feature attributes, where each attribute is a named vector (1d-array) of an arbitrary datatype, with as many elements as columns in the `samples` array of the dataset. a : Collection Access to all dataset attributes, where each attribute is a named element of an arbitrary datatype. Notes ----- Any dataset might have a mapper attached that is stored as a dataset attribute called `mapper`. Examples -------- The simplest way to create a dataset is from a 2D array. >>> import numpy as np >>> from mvpa2.datasets import * >>> samples = np.arange(12).reshape((4,3)) >>> ds = AttrDataset(samples) >>> ds.nsamples 4 >>> ds.nfeatures 3 >>> ds.samples array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) The above dataset can only be used for unsupervised machine-learning algorithms, since it doesn't have any targets associated with its samples. However, creating a labeled dataset is equally simple. >>> ds_labeled = dataset_wizard(samples, targets=range(4)) Both the labeled and the unlabeled dataset share the same samples array. No copying is performed. >>> ds.samples is ds_labeled.samples True If the data should not be shared the samples array has to be copied beforehand. The targets are available from the samples attributes collection, but also via the convenience property `targets`. >>> ds_labeled.sa.targets is ds_labeled.targets True If desired, it is possible to add an arbitrary amount of additional attributes. Regardless if their original sequence type they will be converted into an array. >>> ds_labeled.sa['lovesme'] = [0,0,1,0] >>> ds_labeled.sa.lovesme array([0, 0, 1, 0]) An alternative method to create datasets with arbitrary attributes is to provide the attribute collections to the constructor itself -- which would also test for an appropriate size of the given attributes: >>> fancyds = AttrDataset(samples, sa={'targets': range(4), ... 'lovesme': [0,0,1,0]}) >>> fancyds.sa.lovesme array([0, 0, 1, 0]) Exactly the same logic applies to feature attributes as well. Datasets can be sliced (selecting a subset of samples and/or features) similar to arrays. Selection is possible using boolean selection masks, index sequences or slicing arguments. The following calls for samples selection all result in the same dataset: >>> sel1 = ds[np.array([False, True, True])] >>> sel2 = ds[[1,2]] >>> sel3 = ds[1:3] >>> np.all(sel1.samples == sel2.samples) True >>> np.all(sel2.samples == sel3.samples) True During selection data is only copied if necessary. If the slicing syntax is used the resulting dataset will share the samples with the original dataset. >>> sel1.samples.base is ds.samples False >>> sel2.samples.base is ds.samples False >>> sel3.samples.base is ds.samples True For feature selection the syntax is very similar they are just represented on the second axis of the samples array. Plain feature selection is achieved be keeping all samples and select a subset of features (all syntax variants for samples selection are also supported for feature selection). >>> fsel = ds[:, 1:3] >>> fsel.samples array([[ 1, 2], [ 4, 5], [ 7, 8], [10, 11]]) It is also possible to simultaneously selection a subset of samples *and* features. Using the slicing syntax now copying will be performed. >>> fsel = ds[:3, 1:3] >>> fsel.samples array([[1, 2], [4, 5], [7, 8]]) >>> fsel.samples.base is ds.samples True Please note that simultaneous selection of samples and features is *not* always congruent to array slicing. >>> ds[[0,1,2], [1,2]].samples array([[1, 2], [4, 5], [7, 8]]) Whereas the call: 'ds.samples[[0,1,2], [1,2]]' would not be possible. In `AttrDatasets` selection of samples and features is always applied individually and independently to each axis. """ def __init__(self, samples, sa=None, fa=None, a=None): """ A Dataset might have an arbitrary number of attributes for samples, features, or the dataset as a whole. However, only the data samples themselves are required. Parameters ---------- samples : ndarray Data samples. This has to be a two-dimensional (samples x features) array. If the samples are not in that format, please consider one of the `AttrDataset.from_*` classmethods. sa : SampleAttributesCollection Samples attributes collection. fa : FeatureAttributesCollection Features attributes collection. a : DatasetAttributesCollection Dataset attributes collection. """ # conversions if isinstance(samples, list): samples = np.array(samples) # Check all conditions we need to have for `samples` dtypes if not hasattr(samples, 'dtype'): raise ValueError( "AttrDataset only supports dtypes as samples that have a " "`dtype` attribute that behaves similar to the one of an " "array-like.") if not hasattr(samples, 'shape'): raise ValueError( "AttrDataset only supports dtypes as samples that have a " "`shape` attribute that behaves similar to the one of an " "array-like.") if not len(samples.shape): raise ValueError("Only `samples` with at least one axis are " "supported (got: %i)" % len(samples.shape)) # handling of 1D-samples # i.e. 1D is treated as multiple samples with a single feature if len(samples.shape) == 1: samples = np.atleast_2d(samples).T # that's all -- accepted self.samples = samples # Everything in a dataset (except for samples) is organized in # collections # Number of samples is .shape[0] for sparse matrix support self.sa = SampleAttributesCollection(length=len(self)) if not sa is None: self.sa.update(sa) self.fa = FeatureAttributesCollection(length=self.nfeatures) if not fa is None: self.fa.update(fa) self.a = DatasetAttributesCollection() if not a is None: self.a.update(a) def init_origids(self, which, attr='origids', mode='new'): """Initialize the dataset's 'origids' attribute. The purpose of origids is that they allow to track the identity of a feature or a sample through the lifetime of a dataset (i.e. subsequent feature selections). Calling this method will overwrite any potentially existing IDs (of the XXX) Parameters ---------- which : {'features', 'samples', 'both'} An attribute is generated for each feature, sample, or both that represents a unique ID. This ID incorporates the dataset instance ID and should allow merging multiple datasets without causing multiple identical ID and the resulting dataset. attr : str Name of the attribute to store the generated IDs in. By convention this should be 'origids' (the default), but might be changed for specific purposes. mode : {'existing', 'new', 'raise'}, optional Action if `attr` is already present in the collection. Default behavior is 'new' whenever new ids are generated and replace existing values if such are present. With 'existing' it would not alter existing content. With 'raise' it would raise `RuntimeError`. Raises ------ `RuntimeError` If `mode` == 'raise' and `attr` is already defined """ # now do evil to ensure unique ids across multiple datasets # so that they could be merged together thisid = str(id(self)) legal_modes = ('raise', 'existing', 'new') if not mode in legal_modes: raise ValueError, "Incorrect mode %r. Known are %s." % \ (mode, legal_modes) if which in ('samples', 'both'): if attr in self.sa: if mode == 'existing': return elif mode == 'raise': raise RuntimeError, \ "Attribute %r already known to %s" % (attr, self.sa) ids = np.array(['%s-%i' % (thisid, i) for i in xrange(self.samples.shape[0])]) if self.sa.has_key(attr): self.sa[attr].value = ids else: self.sa[attr] = ids if which in ('features', 'both'): if attr in self.sa: if mode == 'existing': return elif mode == 'raise': raise RuntimeError, \ "Attribute %r already known to %s" % (attr, self.fa) ids = np.array(['%s-%i' % (thisid, i) for i in xrange(self.samples.shape[1])]) if self.fa.has_key(attr): self.fa[attr].value = ids else: self.fa[attr] = ids def __copy__(self): return self.copy(deep=False) def __deepcopy__(self, memo=None): return self.copy(deep=True, memo=memo) def __reduce__(self): return (self.__class__, (self.samples, dict(self.sa), dict(self.fa), dict(self.a))) def copy(self, deep=True, sa=None, fa=None, a=None, memo=None): """Create a copy of a dataset. By default this is going to return a deep copy of the dataset, hence no data would be shared between the original dataset and its copy. Parameters ---------- deep : boolean, optional If False, a shallow copy of the dataset is return instead. The copy contains only views of the samples, sample attributes and feature attributes, as well as shallow copies of all dataset attributes. sa : list or None List of attributes in the sample attributes collection to include in the copy of the dataset. If `None` all attributes are considered. If an empty list is given, all attributes are stripped from the copy. fa : list or None List of attributes in the feature attributes collection to include in the copy of the dataset. If `None` all attributes are considered If an empty list is given, all attributes are stripped from the copy. a : list or None List of attributes in the dataset attributes collection to include in the copy of the dataset. If `None` all attributes are considered If an empty list is given, all attributes are stripped from the copy. memo : dict Developers only: This argument is only useful if copy() is called inside the __deepcopy__() method and refers to the dict-argument `memo` in the Python documentation. """ if __debug__: debug('DS_', "Duplicating samples shaped %s" % str(self.samples.shape)) if deep: samples = copy.deepcopy(self.samples, memo) else: samples = self.samples.view() if __debug__: debug('DS_', "Create new dataset instance for copy") # call the generic init out = self.__class__(samples, sa=self.sa.copy(a=sa, deep=deep, memo=memo), fa=self.fa.copy(a=fa, deep=deep, memo=memo), a =self.a.copy(a=a, deep=deep, memo=memo)) if __debug__: debug('DS_', "Return dataset copy (ID: %s) of source (ID: %s)" % (id(out), id(self))) return out def append(self, other): """Append the content of a Dataset. Parameters ---------- other : AttrDataset The content of this dataset will be append. Notes ----- No dataset attributes, or feature attributes will be merged! These respective properties of the *other* dataset are neither checked for compatibility nor copied over to this dataset. However, all samples attributes will be concatenated with the existing ones. """ if not self.nfeatures == other.nfeatures: raise DatasetError("Cannot merge datasets, because the number of " "features does not match.") if not sorted(self.sa.keys()) == sorted(other.sa.keys()): raise DatasetError("Cannot merge dataset. This datasets samples " "attributes %s cannot be mapped into the other " "set %s" % (self.sa.keys(), other.sa.keys())) # concat the samples as well self.samples = np.concatenate((self.samples, other.samples), axis=0) # tell the collection the new desired length of all attributes self.sa.set_length_check(len(self.samples)) # concat all samples attributes for k, v in other.sa.iteritems(): self.sa[k].value = np.concatenate((self.sa[k].value, v.value), axis=0) def __getitem__(self, args): """ """ # uniformize for checks below; it is not a tuple if just single slicing # spec is passed if not isinstance(args, tuple): args = (args,) if len(args) > 2: raise ValueError("Too many arguments (%i). At most there can be " "two arguments, one for samples selection and one " "for features selection" % len(args)) # simplify things below and always have samples and feature slicing if len(args) == 1: args = [args[0], slice(None)] else: args = [a for a in args] samples = None # get the intended subset of the samples array # # need to deal with some special cases to ensure proper behavior # # ints need to become lists to prevent silent dimensionality changes # of the arrays when slicing for i, a in enumerate(args): if isinstance(a, int): args[i] = [a] # for simultaneous slicing of numpy arrays we should # distinguish the case when one of the args is a slice, so no # ix_ is needed if __debug__: debug('DS_', "Selecting feature/samples of %s" % str(self.samples.shape)) if isinstance(self.samples, np.ndarray): if np.any([isinstance(a, slice) for a in args]): samples = self.samples[args[0], args[1]] else: # works even with bool masks (although without # assurance/checking if mask is of actual length as # needed, so would work with bogus shorter # masks). TODO check in __debug__? or may be just do # enforcing of proper dimensions and order manually? samples = self.samples[np.ix_(*args)] else: # in all other cases we have to do the selection sequentially # # samples subset: only alter if subset is requested samples = self.samples[args[0]] # features subset if not args[1] is slice(None): samples = samples[:, args[1]] if __debug__: debug('DS_', "Selected feature/samples %s" % str(self.samples.shape)) # and now for the attributes -- we want to maintain the type of the # collections sa = self.sa.__class__(length=samples.shape[0]) fa = self.fa.__class__(length=samples.shape[1]) a = self.a.__class__() # per-sample attributes; always needs to run even if slice(None), since # we need fresh SamplesAttributes even if they share the data for attr in self.sa.values(): # preserve attribute type newattr = attr.__class__(doc=attr.__doc__) # slice newattr.value = attr.value[args[0]] # assign to target collection sa[attr.name] = newattr # per-feature attributes; always needs to run even if slice(None), # since we need fresh SamplesAttributes even if they share the data for attr in self.fa.values(): # preserve attribute type newattr = attr.__class__(doc=attr.__doc__) # slice newattr.value = attr.value[args[1]] # assign to target collection fa[attr.name] = newattr # and finally dataset attributes: this time copying for attr in self.a.values(): # preserve attribute type newattr = attr.__class__(name=attr.name, doc=attr.__doc__) # do a shallow copy here # XXX every DatasetAttribute should have meaningful __copy__ if # necessary -- most likely all mappers need to have one newattr.value = copy.copy(attr.value) # assign to target collection a[attr.name] = newattr # and after a long way instantiate the new dataset of the same type return self.__class__(samples, sa=sa, fa=fa, a=a) def __repr_full__(self): return "%s(%s, sa=%s, fa=%s, a=%s)" \ % (self.__class__.__name__, repr(self.samples), repr(self.sa), repr(self.fa), repr(self.a)) def __str__(self): samplesstr = 'x'.join(["%s" % x for x in self.shape]) samplesstr += '@%s' % self.samples.dtype cols = [str(col).replace(col.__class__.__name__, label) for col, label in [(self.sa, 'sa'), (self.fa, 'fa'), (self.a, 'a')] if len(col)] # include only collections that have content return _str(self, samplesstr, *cols) __repr__ = {'full' : __repr_full__, 'str' : __str__}[__REPR_STYLE__] def __array__(self, *args): """Provide an 'array' view or copy over dataset.samples Parameters ---------- dtype: type, optional If provided, passed to .samples.__array__() call *args to mimique numpy.ndarray.__array__ behavior which relies on the actual number of arguments """ # another possibility would be converting .todense() for sparse data # but that might easily kill the machine ;-) if not hasattr(self.samples, '__array__'): raise RuntimeError( "This AttrDataset instance cannot be used like a Numpy array " "since its data-container does not provide an '__array__' " "methods. Container type is %s." % type(self.samples)) return self.samples.__array__(*args) def __len__(self): return self.shape[0] @classmethod def from_hdf5(cls, source, name=None): """Load a Dataset from HDF5 file Parameters ---------- source : string or h5py.highlevel.File Filename or HDF5's File to load dataset from name : string, optional If file contains multiple entries at the 1st level, if provided, `name` specifies the group to be loaded as the AttrDataset. Returns ------- AttrDataset Raises ------ ValueError """ if not externals.exists('h5py'): raise RuntimeError( "Missing 'h5py' package -- saving is not possible.") import h5py from mvpa2.base.hdf5 import hdf2obj # look if we got an hdf file instance already if isinstance(source, h5py.highlevel.File): own_file = False hdf = source else: own_file = True hdf = h5py.File(source, 'r') if not name is None: # some HDF5 subset is requested if not name in hdf: raise ValueError("Cannot find '%s' group in HDF file %s. " "File contains groups: %s" % (name, source, hdf.keys())) # access the group that should contain the dataset dsgrp = hdf[name] res = hdf2obj(dsgrp) if not isinstance(res, AttrDataset): # TODO: unittest before committing raise ValueError, "%r in %s contains %s not a dataset. " \ "File contains groups: %s." \ % (name, source, type(res), hdf.keys()) else: # just consider the whole file res = hdf2obj(hdf) if not isinstance(res, AttrDataset): # TODO: unittest before committing raise ValueError, "Failed to load a dataset from %s. " \ "Loaded %s instead." \ % (source, type(res)) if own_file: hdf.close() return res # shortcut properties nsamples = property(fget=len) nfeatures = property(fget=lambda self:self.shape[1]) shape = property(fget=lambda self:self.samples.shape) def datasetmethod(func): """Decorator to easily bind functions to an AttrDataset class """ if __debug__: debug("DS_", "Binding function %s to AttrDataset class" % func.func_name) # Bind the function setattr(AttrDataset, func.func_name, func) # return the original one return func def vstack(datasets): """Stacks datasets vertically (appending samples). Feature attribute collections are merged incrementally, attribute with identical keys overwriting previous ones in the stacked dataset. All datasets must have an identical set of sample attributes (matching keys, not values), otherwise a ValueError will be raised. No dataset attributes from any source dataset will be transferred into the stacked dataset. If all input dataset have common dataset attributes that are also valid for the stacked dataset, they can be moved into the output dataset like this:: ds_merged = vstack((ds1, ds2, ds3)) ds_merged.a.update(ds1.a) Parameters ---------- datasets : tuple Sequence of datasets to be stacked. Returns ------- AttrDataset (or respective subclass) """ # fall back to numpy if it is not a dataset if not is_datasetlike(datasets[0]): return AttrDataset(np.vstack(datasets)) if __debug__: target = sorted(datasets[0].sa.keys()) if not np.all([sorted(ds.sa.keys()) == target for ds in datasets]): raise ValueError("Sample attributes collections of to be stacked " "datasets have varying attributes.") # will puke if not equal number of features stacked_samp = np.concatenate([ds.samples for ds in datasets], axis=0) stacked_sa = {} for attr in datasets[0].sa: stacked_sa[attr] = np.concatenate( [ds.sa[attr].value for ds in datasets], axis=0) # create the dataset merged = datasets[0].__class__(stacked_samp, sa=stacked_sa) for ds in datasets: merged.fa.update(ds.fa) return merged def hstack(datasets): """Stacks datasets horizontally (appending features). Sample attribute collections are merged incrementally, attribute with identical keys overwriting previous ones in the stacked dataset. All datasets must have an identical set of feature attributes (matching keys, not values), otherwise a ValueError will be raised. No dataset attributes from any source dataset will be transferred into the stacked dataset. Parameters ---------- datasets : tuple Sequence of datasets to be stacked. Returns ------- AttrDataset (or respective subclass) """ # # XXX Use CombinedMapper in here whenever it comes back # # fall back to numpy if it is not a dataset if not is_datasetlike(datasets[0]): # we might get a list of 1Ds that would yield wrong results when # turned into a dict (would run along samples-axis) return AttrDataset(np.atleast_2d(np.hstack(datasets))) if __debug__: target = sorted(datasets[0].fa.keys()) if not np.all([sorted(ds.fa.keys()) == target for ds in datasets]): raise ValueError("Feature attributes collections of to be stacked " "datasets have varying attributes.") # will puke if not equal number of samples stacked_samp = np.concatenate([ds.samples for ds in datasets], axis=1) stacked_fa = {} for attr in datasets[0].fa: stacked_fa[attr] = np.concatenate( [ds.fa[attr].value for ds in datasets], axis=0) # create the dataset merged = datasets[0].__class__(stacked_samp, fa=stacked_fa) for ds in datasets: merged.sa.update(ds.sa) return merged def _expand_attribute(attr, length, attr_name): """Helper function to expand attributes to a desired length. If e.g. a sample attribute is given as a scalar expand/repeat it to a length matching the number of samples in the dataset. """ try: # if we are initializing with a single string -- we should # treat it as a single label if isinstance(attr, basestring): raise TypeError if len(attr) != length: raise ValueError("Length of attribute '%s' [%d] has to be %d." % (attr_name, len(attr), length)) # sequence as array return np.asanyarray(attr) except TypeError: # make sequence of identical value matching the desired length return np.repeat(attr, length) class DatasetError(Exception): """Thrown if there is a problem with the internal integrity of a Dataset. """ # A ValueError exception is too generic to be used for any needed case, # thus this one is created pass class DatasetAttributeExtractor(object): """Helper to extract arbitrary attributes from dataset collections. Examples -------- >>> ds = AttrDataset(np.arange(12).reshape((4,3)), ... sa={'targets': range(4)}, ... fa={'foo': [0,0,1]}) >>> ext = DAE('sa', 'targets') >>> ext(ds) array([0, 1, 2, 3]) >>> ext = DAE('fa', 'foo') >>> ext(ds) array([0, 0, 1]) """ def __init__(self, col, key): """ Parameters ---------- col : {'sa', 'fa', 'a'} The respective collection to extract an attribute from. key : arbitrary The name/key of the attribute in the collection. """ self._col = col self._key = key def __call__(self, ds): """ Parameters ---------- ds : AttrDataset """ return ds.__dict__[self._col][self._key].value def __repr__(self): return "%s(%s, %s)" % (self.__class__.__name__, repr(self._col), repr(self._key)) # shortcut that allows for more finger/screen-friendly specification of # attribute extraction DAE = DatasetAttributeExtractor @datasetmethod def save(dataset, destination, name=None, compression=None): """Save Dataset into HDF5 file Parameters ---------- dataset : `Dataset` destination : `h5py.highlevel.File` or str name : str, optional compression : None or int or {'gzip', 'szip', 'lzf'}, optional Level of compression for gzip, or another compression strategy. """ if not externals.exists('h5py'): raise RuntimeError("Missing 'h5py' package -- saving is not possible.") import h5py from mvpa2.base.hdf5 import obj2hdf # look if we got an hdf file instance already if isinstance(destination, h5py.highlevel.File): own_file = False hdf = destination else: own_file = True hdf = h5py.File(destination, 'w') obj2hdf(hdf, dataset, name, compression=compression) # if we opened the file ourselves we close it now if own_file: hdf.close() return pymvpa2-2.2.0/mvpa2/base/dochelpers.py000066400000000000000000000525741202542755000175710ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Various helpers to improve docstrings and textual output""" __docformat__ = 'restructuredtext' import re, textwrap # for table2string import numpy as np from math import ceil from StringIO import StringIO from mvpa2 import cfg from mvpa2.base.externals import versions, exists if __debug__: from mvpa2.base import debug __add_init2doc = False __in_ipython = exists('running ipython env') # if ran within IPython -- might need to add doc to init if __in_ipython: __rst_mode = False # either to do ReST links at all if versions['ipython'] <= '0.8.1': __add_init2doc = True else: __rst_mode = True # # Predefine some sugarings depending on syntax convention to be used # # XXX Might need to be removed or become proper cfg parameter __rst_conventions = 'numpy' if __rst_conventions == 'epydoc': _rst_sep = "`" _rst_indentstr = " " def _rst_section(section_name): """Provide section heading""" return ":%s:" % section_name elif __rst_conventions == 'numpy': _rst_sep = "" _rst_indentstr = "" def _rst_section(section_name): """Provide section heading""" return "%s\n%s" % (section_name, '-'*len(section_name)) else: raise ValueError, "Unknown convention %s for RST" % __rst_conventions def _rst(s, snotrst=''): """Produce s only in __rst mode""" if __rst_mode: return s else: return snotrst def _rst_underline(text, markup): """Add and underline RsT string matching the length of the given string. """ return text + '\n' + markup * len(text) def single_or_plural(single, plural, n): """Little helper to spit out single or plural version of a word. """ ni = int(n) if ni > 1 or ni == 0: # 1 forest, 2 forests, 0 forests return plural else: return single def handle_docstring(text, polite=True): """Take care of empty and non existing doc strings.""" if text is None or not len(text): if polite: return '' #No documentation found. Sorry!' else: return '' else: # Problem is that first line might often have no offset, so might # need to be ignored from dedent call if not text.startswith(' '): lines = text.split('\n') text2 = '\n'.join(lines[1:]) return lines[0] + "\n" + textwrap.dedent(text2) else: return textwrap.dedent(text) def _indent(text, istr=_rst_indentstr): """Simple indenter """ return '\n'.join(istr + s for s in text.split('\n')) __parameters_str_re = re.compile("[\n^]\s*:?Parameters?:?\s*\n(:?\s*-+\s*\n)?") """regexp to match :Parameter: and :Parameters: stand alone in a line or Parameters ---------- in multiple lines""" def _split_out_parameters(initdoc): """Split documentation into (header, parameters, suffix) Parameters ---------- initdoc : string The documentation string """ # TODO: bind it to the only word in the line p_res = __parameters_str_re.search(initdoc) if p_res is None: return initdoc, "", "" else: # Could have been accomplished also via re.match # where new line is after :Parameters: # parameters header index ph_i = p_res.start() # parameters body index pb_i = p_res.end() # end of parameters try: pe_i = initdoc.index('\n\n', pb_i) except ValueError: pe_i = len(initdoc) result = initdoc[:ph_i].rstrip('\n '), \ initdoc[pb_i:pe_i], initdoc[pe_i:] # XXX a bit of duplication of effort since handle_docstring might # do splitting internally return handle_docstring(result[0], polite=False).strip('\n'), \ textwrap.dedent(result[1]).strip('\n'), \ textwrap.dedent(result[2]).strip('\n') __re_params = re.compile('(?:\n\S.*?)+$') __re_spliter1 = re.compile('(?:\n|\A)(?=\S)') __re_spliter2 = re.compile('[\n:]') def _parse_parameters(paramdoc): """Parse parameters and return list of (name, full_doc_string) It is needed to remove multiple entries for the same parameter like it could be with adding parameters from the parent class It assumes that previously parameters were unwrapped, so their documentation starts at the begining of the string, like what should it be after _split_out_parameters """ entries = __re_spliter1.split(paramdoc) result = [(__re_spliter2.split(e)[0].strip(), e) for e in entries if e != ''] if __debug__: debug('DOCH', 'parseParameters: Given "%s", we split into %s' % (paramdoc, result)) return result def get_docstring_split(f): """Given a function, break it up into portions Parameters ---------- f : function Returns ------- (initial doc string, params (as list of tuples), suffix string) """ if not hasattr(f, '__doc__') or f.__doc__ in (None, ""): return None, None, None initdoc, params, suffix = _split_out_parameters( f.__doc__) params_list = _parse_parameters(params) return initdoc, params_list, suffix def enhanced_doc_string(item, *args, **kwargs): """Generate enhanced doc strings for various items. Parameters ---------- item : str or class What object requires enhancing of documentation *args : list Includes base classes to look for parameters, as well, first item must be a dictionary of locals if item is given by a string force_extend : bool Either to force looking for the documentation in the parents. By default force_extend = False, and lookup happens only if kwargs is one of the arguments to the respective function (e.g. item.__init__) skip_params : list of str List of parameters (in addition to [kwargs]) which should not be added to the documentation of the class. It is to be used from a collector, ie whenever class is already created """ # Handling of arguments if len(kwargs): if set(kwargs.keys()).issubset(set(['force_extend'])): raise ValueError, "Got unknown keyword arguments (smth among %s)" \ " in enhanced_doc_string." % kwargs force_extend = kwargs.get('force_extend', False) skip_params = kwargs.get('skip_params', []) # XXX make it work also not only with classes but with methods as well if isinstance(item, basestring): if len(args)<1 or not isinstance(args[0], dict): raise ValueError, \ "Please provide locals for enhanced_doc_string of %s" % item name = item lcl = args[0] args = args[1:] elif hasattr(item, "im_class"): # bound method raise NotImplementedError, \ "enhanced_doc_string is not yet implemented for methods" elif hasattr(item, "__name__"): name = item.__name__ lcl = item.__dict__ else: raise ValueError, "Don't know how to extend docstring for %s" % item # check whether docstring magic is requested or not if not cfg.getboolean('doc', 'pimp docstrings', True): return lcl['__doc__'] if __debug__: debug('DOCH', 'Processing docstrings of %s' % name) #return lcl['__doc__'] rst_lvlmarkup = ["=", "-", "_"] # would then be called for any child... ok - ad hoc for SVM??? if hasattr(item, '_customize_doc') and name=='SVM': item._customize_doc() initdoc = "" if lcl.has_key('__init__'): func = lcl['__init__'] initdoc = func.__doc__ skip_params += lcl.get('__init__doc__exclude__', []) # either to extend arguments # do only if kwargs is one of the arguments # in python 2.5 args are no longer in co_names but in varnames extend_args = force_extend or \ 'kwargs' in (func.func_code.co_names + func.func_code.co_varnames) if __debug__ and not extend_args: debug('DOCH', 'Not extending parameters for __init__ of %s', (name,)) if initdoc is None: initdoc = "Initialize instance of %s" % name initdoc, params, suffix = _split_out_parameters(initdoc) params_list = _parse_parameters(params) known_params = set([i[0] for i in params_list]) # If there are additional ones: if lcl.has_key('_paramsdoc'): params_list += [i for i in lcl['_paramsdoc'] if not (i[0] in known_params)] known_params = set([i[0] for i in params_list]) # no need for placeholders skip_params = set(skip_params + ['kwargs', '**kwargs']) # XXX we do evil check here, refactor code to separate # regressions out of the classifiers, and making # retrainable flag not available for those classes which # can't actually do retraining. Although it is not # actually that obvious for Meta Classifiers if hasattr(item, '__tags__'): clf_internals = item.__tags__ skip_params.update([i for i in ('retrainable',) if not (i in clf_internals)]) known_params.update(skip_params) if extend_args: # go through all the parents and obtain their init parameters parent_params_list = [] for i in args: if hasattr(i, '__init__'): # XXX just assign within a class to don't redo without need initdoc_ = i.__init__.__doc__ if initdoc_ is None: continue splits_ = _split_out_parameters(initdoc_) params_ = splits_[1] parent_params_list += _parse_parameters(params_.lstrip()) # extend with ones which are not known to current init for i, v in parent_params_list: if not (i in known_params): params_list += [(i, v)] known_params.update([i]) # if there are parameters -- populate the list if len(params_list): params_ = '\n'.join([i[1].rstrip() for i in params_list if not i[0] in skip_params]) initdoc += "\n\n%s\n" \ % _rst_section('Parameters') + _indent(params_) if suffix != "": initdoc += "\n\n" + suffix initdoc = handle_docstring(initdoc) # Finally assign generated doc to the constructor lcl['__init__'].__doc__ = initdoc docs = [ handle_docstring(lcl['__doc__']) ] # Optionally populate the class documentation with it if __add_init2doc and initdoc != "": docs += [ _rst_underline('Constructor information for `%s` class' % name, rst_lvlmarkup[2]), initdoc ] # Add information about the ca if available if lcl.has_key('_cadoc') and len(item._cadoc): # to don't conflict with Notes section if such was already # present lcldoc = lcl['__doc__'] or '' if not 'Notes' in lcldoc: section_name = _rst_section('Notes') else: section_name = '\n' # just an additional newline # no indent is necessary since ca list must be already indented docs += ['%s\nAvailable conditional attributes:' % section_name, handle_docstring(item._cadoc)] # Deprecated -- but actually we might like to have it in ipython # mode may be? if False: #len(args): bc_intro = _rst(' ') + 'Please refer to the documentation of the ' \ 'base %s for more information:' \ % (single_or_plural('class', 'classes', len(args))) docs += ['\n' + _rst_section('See Also'), bc_intro, ' ' + ',\n '.join(['%s%s.%s%s%s' % (_rst(':class:`~'), i.__module__, i.__name__, _rst('`'), _rst_sep) for i in args]) ] itemdoc = '\n\n'.join(docs) # remove some bogus new lines -- never 3 empty lines in doc are useful result = re.sub("\s*\n\s*\n\s*\n", "\n\n", itemdoc) return result def table2string(table, out=None): """Given list of lists figure out their common widths and print to out Parameters ---------- table : list of lists of strings What is aimed to be printed out : None or stream Where to print. If None -- will print and return string Returns ------- string if out was None """ print2string = out is None if print2string: out = StringIO() # equalize number of elements in each row Nelements_max = len(table) \ and max(len(x) for x in table) for i, table_ in enumerate(table): table[i] += [''] * (Nelements_max - len(table_)) # figure out lengths within each column atable = np.asarray(table) # eat whole entry while computing width for @w (for wide) markup_strip = re.compile('^@([lrc]|w.*)') col_width = [ max( [len(markup_strip.sub('', x)) for x in column] ) for column in atable.T ] string = "" for i, table_ in enumerate(table): string_ = "" for j, item in enumerate(table_): item = str(item) if item.startswith('@'): align = item[1] item = item[2:] if not align in ['l', 'r', 'c', 'w']: raise ValueError, 'Unknown alignment %s. Known are l,r,c' % align else: align = 'c' NspacesL = max(ceil((col_width[j] - len(item))/2.0), 0) NspacesR = max(col_width[j] - NspacesL - len(item), 0) if align in ['w', 'c']: pass elif align == 'l': NspacesL, NspacesR = 0, NspacesL + NspacesR elif align == 'r': NspacesL, NspacesR = NspacesL + NspacesR, 0 else: raise RuntimeError, 'Should not get here with align=%s' % align string_ += "%%%ds%%s%%%ds " \ % (NspacesL, NspacesR) % ('', item, '') string += string_.rstrip() + '\n' out.write(string) if print2string: value = out.getvalue() out.close() return value def _repr_attrs(obj, attrs, default=None, error_value='ERROR'): """Helper to obtain a list of formatted attributes different from the default """ out = [] for a in attrs: v = getattr(obj, a, error_value) if not (v is default or isinstance(v, basestring) and v == default): out.append('%s=%r' % (a, v)) return out def _repr(obj, *args, **kwargs): """Helper to get a structured __repr__ for all objects. Parameters ---------- obj : object This will typically be `self` of the to be documented object. *args, **kwargs : str An arbitrary number of additional items. All of them must be of type `str`. All items will be appended comma separated to the class name. Keyword arguments will be appended as `key`=`value. Returns ------- str """ cls_name = obj.__class__.__name__ truncate = cfg.get_as_dtype('verbose', 'truncate repr', int, default=200) # -5 to take (...) into account max_length = truncate - 5 - len(cls_name) if max_length < 0: max_length = 0 auto_repr = ', '.join(list(args) + ["%s=%s" % (k, v) for k, v in kwargs.iteritems()]) if not truncate is None and len(auto_repr) > max_length: auto_repr = auto_repr[:max_length] + '...' # finally wrap in <> and return # + instead of '%s' for bits of speedup return "%s(%s)" % (cls_name, auto_repr) def _str(obj, *args, **kwargs): """Helper to get a structured __str__ for all objects. If an object has a `descr` attribute, its content will be used instead of an auto-generated description. Optional additional information might be added under certain debugging conditions (e.g. `id(obj)`). Parameters ---------- obj : object This will typically be `self` of the to be documented object. *args, **kwargs : str An arbitrary number of additional items. All of them must be of type `str`. All items will be appended comma separated to the class name. Keyword arguments will be appended as `key`=`value. Returns ------- str """ truncate = cfg.get_as_dtype('verbose', 'truncate str', int, default=200) s = None # don't do descriptions for dicts like our collections as they might contain # an actual item 'descr' if hasattr(obj, 'descr') and not isinstance(obj, dict): s = obj.descr if s is None: s = obj.__class__.__name__ auto_descr = ', '.join(list(args) + ["%s=%s" % (k, v) for k, v in kwargs.iteritems()]) if len(auto_descr): s = s + ': ' + auto_descr if not truncate is None and len(s) > truncate - 5: # -5 to take <...> into account s = s[:truncate-5] + '...' if __debug__ and 'DS_ID' in debug.active: # in case there was nothing but the class name if len(s): if s[-1]: s += ',' s += ' ' s += 'id=%i' % id(obj) # finally wrap in <> and return # + instead of '%s' for bits of speedup return '<' + s + '>' def borrowdoc(cls, methodname=None): """Return a decorator to borrow docstring from another `cls`.`methodname` It should not be used for __init__ methods of classes derived from ClassWithCollections since __doc__'s of those are handled by the AttributeCollector anyways. Common use is to borrow a docstring from the class's method for an adapter function (e.g. sphere_searchlight borrows from Searchlight) Examples -------- To borrow `__repr__` docstring from parent class `Mapper`, do:: @borrowdoc(Mapper) def __repr__(self): ... Parameters ---------- cls Usually a parent class methodname : None or str Name of the method from which to borrow. If None, would use the same name as of the decorated method """ def _borrowdoc(method): """Decorator which assigns to the `method` docstring from another """ if methodname is None: other_method = getattr(cls, method.__name__) else: other_method = getattr(cls, methodname) if hasattr(other_method, '__doc__'): method.__doc__ = other_method.__doc__ return method return _borrowdoc def borrowkwargs(cls, methodname=None, exclude=None): """Return a decorator which would borrow docstring for ``**kwargs`` Notes ----- TODO: take care about ``*args`` in a clever way if those are also present Examples -------- In the simplest scenario -- just grab all arguments from parent class:: @borrowkwargs(A) def met1(self, bu, **kwargs): pass Parameters ---------- methodname : None or str Name of the method from which to borrow. If None, would use the same name as of the decorated method exclude : None or list of arguments to exclude If function does not pass all ``**kwargs``, you would need to list those here to be excluded from borrowed docstring """ def _borrowkwargs(method): """Decorator which borrows docstrings for ``**kwargs`` for the `method` """ if methodname is None: other_method = getattr(cls, method.__name__) else: other_method = getattr(cls, methodname) # TODO: # method.__doc__ = enhanced_from(other_method.__doc__) mdoc, odoc = method.__doc__, other_method.__doc__ if mdoc is None: mdoc = '' mpreamble, mparams, msuffix = _split_out_parameters(mdoc) opreamble, oparams, osuffix = _split_out_parameters(odoc) mplist = _parse_parameters(mparams) oplist = _parse_parameters(oparams) known_params = set([i[0] for i in mplist]) # !!! has to not rebind exclude variable skip_params = exclude or [] # handle None skip_params = set(['kwargs', '**kwargs'] + skip_params) # combine two and filter out items to skip aplist = [i for i in mplist if not i[0] in skip_params] aplist += [i for i in oplist if not i[0] in skip_params.union(known_params)] docstring = mpreamble if len(aplist): params_ = '\n'.join([i[1].rstrip() for i in aplist]) docstring += "\n\n%s\n" \ % _rst_section('Parameters') + _indent(params_) if msuffix != "": docstring += "\n\n" + msuffix docstring = handle_docstring(docstring) # Finally assign generated doc to the method method.__doc__ = docstring return method return _borrowkwargs pymvpa2-2.2.0/mvpa2/base/externals.py000066400000000000000000000633071202542755000174420ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper to verify presence of external libraries and modules """ __docformat__ = 'restructuredtext' import os import numpy as np # NumPy is required anyways from mvpa2.base import warning from mvpa2 import cfg from mvpa2.misc.support import SmartVersion if __debug__: from mvpa2.base import debug class _VersionsChecker(dict): """Helper class to check the versions of the available externals """ def __init__(self, *args, **kwargs): self._KNOWN = {} dict.__init__(self, *args, **kwargs) def __getitem__(self, key): if key not in self: if key in self._KNOWN: # run registered procedure to obtain versions self._KNOWN[key]() else: exists(key, force=True, raise_=True) return super(_VersionsChecker, self).__getitem__(key) versions = _VersionsChecker() """Versions of available externals, as tuples """ def __assign_numpy_version(): """Check if numpy is present (it must be) an if it is -- store its version """ import numpy as np versions['numpy'] = SmartVersion(np.__version__) def __check_numpy_correct_unique(): """ndarray.unique fails to operate on heterogeneous object ndarrays See http://projects.scipy.org/numpy/ticket/2188 """ import numpy as np try: _ = np.unique(np.array([1, None, "str"])) except TypeError, e: raise RuntimeError("numpy.unique thrown %s" % e) def __assign_scipy_version(): # To don't allow any crappy warning to sneak in import warnings warnings.simplefilter('ignore', DeprecationWarning) try: import scipy as sp except: warnings.simplefilter('default', DeprecationWarning) raise warnings.simplefilter('default', DeprecationWarning) versions['scipy'] = SmartVersion(sp.__version__) def __check_scipy(): """Check if scipy is present an if it is -- store its version """ exists('numpy', raise_=True) __assign_numpy_version() __assign_scipy_version() import scipy as sp def _suppress_scipy_warnings(): # Infiltrate warnings if necessary numpy_ver = versions['numpy'] scipy_ver = versions['scipy'] # There is way too much deprecation warnings spit out onto the # user. Lets assume that they should be fixed by scipy 0.7.0 time if scipy_ver >= "0.6.0" and scipy_ver < "0.7.0" \ and numpy_ver > "1.1.0": import warnings if not __debug__ or (__debug__ and not 'PY' in debug.active): if __debug__: debug('EXT', "Setting up filters for numpy DeprecationWarnings") filter_lines = [ ('NumpyTest will be removed in the next release.*', DeprecationWarning), ('PyArray_FromDims: use PyArray_SimpleNew.', DeprecationWarning), ('PyArray_FromDimsAndDataAndDescr: use PyArray_NewFromDescr.', DeprecationWarning), # Trick re.match, since in warnings absent re.DOTALL in re.compile ('[\na-z \t0-9]*The original semantics of histogram is scheduled to be.*' '[\na-z \t0-9]*', Warning) ] for f, w in filter_lines: warnings.filterwarnings('ignore', f, w) def __assign_mdp_version(): """Check if mdp is present (it must be) an if it is -- store its version """ import mdp ver = mdp.__version__ if SmartVersion(ver) == "2.5" and not hasattr(mdp.nodes, 'IdentityNode'): # Thanks to Yarik's shipment of svn snapshots into Debian we # can't be sure if that was already released version, since # mdp guys didn't use -dev suffix ver += '-dev' versions['mdp'] = SmartVersion(ver) def __assign_nibabel_version(): import nibabel versions['nibabel'] = SmartVersion(nibabel.__version__) def __check_pywt(features=None): """Check for available functionality within pywt Parameters ---------- features : list of str List of known features to check such as 'wp reconstruct', 'wp reconstruct fixed' """ import pywt import numpy as np data = np.array([ 0.57316901, 0.65292526, 0.75266733, 0.67020084, 0.46505364, 0.76478331, 0.33034164, 0.49165547, 0.32979941, 0.09696717, 0.72552711, 0.4138999 , 0.54460628, 0.786351 , 0.50096306, 0.72436454, 0.2193098 , -0.0135051 , 0.34283984, 0.65596245, 0.49598417, 0.39935064, 0.26370727, 0.05572373, 0.40194438, 0.47004551, 0.60327258, 0.25628266, 0.32964893, 0.24009889,]) mode = 'per' wp = pywt.WaveletPacket(data, 'sym2', mode) wp2 = pywt.WaveletPacket(data=None, wavelet='sym2', mode=mode) try: for node in wp.get_level(2): wp2[node.path] = node.data except: raise ImportError, \ "Failed to reconstruct WP by specifying data in the layer" if 'wp reconstruct fixed' in features: rec = wp2.reconstruct() if np.linalg.norm(rec[:len(data)] - data) > 1e-3: raise ImportError, \ "Failed to reconstruct WP correctly" return True def __check_libsvm_verbosity_control(): """Check for available verbose control functionality """ import mvpa2.clfs.libsvmc._svmc as _svmc try: _svmc.svm_set_verbosity(0) except: raise ImportError, "Provided version of libsvm has no way to control " \ "its level of verbosity" def __assign_shogun_version(): """Assign shogun versions """ if 'shogun' in versions: return import shogun.Classifier as __sc versions['shogun:rev'] = __sc.Version_get_version_revision() ver = __sc.Version_get_version_release().lstrip('v') versions['shogun:full'] = ver if '_' in ver: ver = ver[:ver.index('_')] versions['shogun'] = ver def __check_shogun(bottom_version, custom_versions=[]): """Check if version of shogun is high enough (or custom known) to be enabled in the testsuite Parameters ---------- bottom_version : int Bottom version which must be satisfied custom_versions : list of int Arbitrary list of versions which could got patched for a specific issue """ import shogun.Classifier as __sc ver = __sc.Version_get_version_revision() __assign_shogun_version() if (ver in custom_versions) or (ver >= bottom_version): return True else: raise ImportError, 'Version %s is smaller than needed %s' % \ (ver, bottom_version) def __assign_nipy_version(): import nipy versions['nipy'] = SmartVersion(nipy.__version__) def __check_nipy_neurospin(): from nipy.neurospin.utils import emp_nul def __assign_skl_version(): try: import sklearn as skl except ImportError: # Let's try older space import scikits.learn as skl if skl.__doc__ is None or skl.__doc__.strip() == "": raise ImportError("Verify your installation of scikits.learn. " "Its docstring is empty -- could be that only -lib " "was installed without the native Python modules") versions['skl'] = SmartVersion(skl.__version__) def __check_weave(): """Apparently presence of scipy is not sufficient since some versions experience problems. E.g. in Sep,Oct 2008 lenny's weave failed to work. May be some other converter could work (? See http://lists.debian.org/debian-devel/2008/08/msg00730.html for a similar report. Following simple snippet checks compilation of the basic code using weave """ try: from scipy import weave except OSError, e: raise ImportError( "Weave cannot be used due to failure to import because of %s" % e) from scipy.weave import converters, build_tools import numpy as np # to shut weave up import sys # we can't rely on weave at all at the restoring argv. On etch box # restore_sys_argv() is apparently is insufficient oargv = sys.argv[:] ostdout = sys.stdout if not( __debug__ and 'EXT_' in debug.active): from StringIO import StringIO sys.stdout = StringIO() # *nix specific solution to shut weave up. # Some users must complain and someone # needs to fix this to become more generic. cargs = [">/dev/null", "2>&1"] else: cargs = [] fmsg = None try: data = np.array([1,2,3]) counter = weave.inline("data[0]=fabs(-1);", ['data'], type_converters=converters.blitz, verbose=0, extra_compile_args=cargs, compiler = 'gcc') except Exception, e: fmsg = "Failed to build simple weave sample." \ " Exception was %s" % str(e) sys.stdout = ostdout # needed to fix sweave which might "forget" to restore sysv # build_tools.restore_sys_argv() sys.argv = oargv if fmsg is not None: raise ImportError, fmsg else: return "Everything is cool" def __check_atlas_family(family): # XXX I guess pylint will dislike it a lot from mvpa2.atlases.warehouse import KNOWN_ATLAS_FAMILIES names, pathpattern = KNOWN_ATLAS_FAMILIES[family] filename = pathpattern % {'name':names[0]} if not os.path.exists(filename): raise ImportError, "Cannot find file %s for atlas family %s" \ % (filename, family) pass def __check_stablerdist(): import scipy.stats import numpy as np ## Unfortunately 0.7.0 hasn't fixed the issue so no chance but to do ## a proper numerical test here try: scipy.stats.rdist(1.32, 0, 1).cdf(-1.0 + np.finfo(float).eps) # Actually previous test is insufficient for 0.6, so enabling # elderly test on top # ATM all known implementations which implement custom cdf for # rdist are misbehaving, so there should be no _cdf if '_cdf' in scipy.stats.distributions.rdist_gen.__dict__.keys(): raise ImportError, \ "scipy.stats carries misbehaving rdist distribution" except ZeroDivisionError: raise RuntimeError, "RDist in scipy is still unstable on the boundaries" def __check_rv_discrete_ppf(): """Unfortunately 0.6.0-12 of scipy pukes on simple ppf """ import scipy.stats try: bdist = scipy.stats.binom(100, 0.5) bdist.ppf(0.9) except TypeError: raise RuntimeError, "pmf is broken in discrete dists of scipy.stats" def __check_rv_continuous_reduce_func(): """Unfortunately scipy 0.10.1 pukes when fitting with two params fixed """ import scipy.stats as ss try: ss.t.fit(np.arange(6), floc=0.0, fscale=1.) except IndexError, e: raise RuntimeError("rv_continuous.fit can't candle 2 fixed params") def __check_in_ipython(): # figure out if ran within IPython if '__IPYTHON__' in globals()['__builtins__']: return raise RuntimeError, "Not running in IPython session" def __assign_ipython_version(): ipy_version = None try: # Development post 0.11 version finally carries # conventional one import IPython ipy_version = IPython.__version__ except: try: from IPython import Release ipy_version = Release.version except: pass pass versions['ipython'] = SmartVersion(ipy_version) def __check_openopt(): try: import openopt as _ return except ImportError: pass import scikits.openopt as _ return def _set_matplotlib_backend(): """Check if we have custom backend to set and it is different from current one """ backend = cfg.get('matplotlib', 'backend') if backend: import matplotlib as mpl mpl_backend = mpl.get_backend().lower() if mpl_backend != backend.lower(): if __debug__: debug('EXT_', "Trying to set matplotlib backend to %s" % backend) mpl.use(backend) import warnings # And disable useless warning from matplotlib in the future warnings.filterwarnings( 'ignore', 'This call to matplotlib.use() has no effect.*', UserWarning) elif __debug__: debug('EXT_', "Not trying to set matplotlib backend to %s since it was " "already set" % backend) def __assign_matplotlib_version(): """Check for matplotlib version and set backend if requested.""" import matplotlib versions['matplotlib'] = SmartVersion(matplotlib.__version__) _set_matplotlib_backend() def __check_pylab(): """Check if matplotlib is there and then pylab""" exists('matplotlib', raise_='always') import pylab as pl def __check_pylab_plottable(): """Simple check either we can plot anything using pylab. Primary use in unittests """ try: exists('pylab', raise_='always') import pylab as pl fig = pl.figure() pl.plot([1,2], [1,2]) pl.close(fig) except: raise RuntimeError, "Cannot plot in pylab" return True def __check_griddata(): """griddata might be independent module or part of mlab """ try: from griddata import griddata as __ return True except ImportError: if __debug__: debug('EXT_', 'No python-griddata available') from matplotlib.mlab import griddata as __ return True def __check_reportlab(): import reportlab as rl versions['reportlab'] = SmartVersion(rl.Version) def __check_pprocess(): import pprocess as pp versions['pprocess'] = SmartVersion(pp.__version__) def __assign_h5py_version(): """Check if h5py present an if it is -- store its version """ import h5py versions['h5py'] = SmartVersion(h5py.version.version) def __check_rpy(): """Check either rpy is available and also set it for the sane execution """ #import rpy_options #rpy_options.set_options(VERBOSE=False, SETUP_READ_CONSOLE=False) # SETUP_WRITE_CONSOLE=False) #rpy_options.set_options(VERBOSE=False, SETUP_WRITE_CONSOLE=False) # SETUP_WRITE_CONSOLE=False) # if not cfg.get('rpy', 'read_console', default=False): # print "no read" # rpy_options.set_options(SETUP_READ_CONSOLE=False) # if not cfg.get('rpy', 'write_console', default=False): # print "no write" # rpy_options.set_options(SETUP_WRITE_CONSOLE=False) import rpy if not cfg.getboolean('rpy', 'interactive', default=True) \ and (rpy.get_rpy_input() is rpy.rpy_io.rpy_input): if __debug__: debug('EXT_', "RPy: providing dummy callback for input to return '1'") def input1(*args): return "1" # which is "1: abort (with core dump, if enabled)" rpy.set_rpy_input(input1) def _R_library(libname): import rpy2.robjects as ro try: if not tuple(ro.r( "suppressMessages(suppressWarnings(require(%r, quiet=TRUE)))" % libname))[0]: raise ImportError("It seems that R cannot load library %r" % libname) except Exception, e: raise ImportError("Failed to load R library %r due to %s" % (libname, e)) def __check_rpy2(): """Check either rpy2 is available and also set it for the sane execution """ import rpy2 versions['rpy2'] = SmartVersion(rpy2.__version__) import rpy2.robjects r = rpy2.robjects.r r.options(warn=cfg.get_as_dtype('rpy', 'warn', dtype=int, default=-1)) # To shut R up while it is importing libraries to do not ruin out # doctests r.library = _R_library def __check_liblapack_so(): """Check either we could load liblapack.so library via ctypes """ from ctypes import cdll try: lapacklib = cdll.LoadLibrary('liblapack.so') except OSError, e: # reraise with exception type we catch/handle while testing externals raise RuntimeError("Failed to import liblapack.so: %s" % e) # contains list of available (optional) external classifier extensions _KNOWN = {'libsvm':'import mvpa2.clfs.libsvmc._svm as __; x=__.seq_to_svm_node', 'libsvm verbosity control':'__check_libsvm_verbosity_control();', 'nibabel':'__assign_nibabel_version()', 'ctypes':'import ctypes as __', 'liblapack.so': "__check_liblapack_so()", 'shogun':'__assign_shogun_version()', 'shogun.krr': '__assign_shogun_version(); import shogun.Regression as __; x=__.KRR', 'shogun.mpd': '__assign_shogun_version(); import shogun.Classifier as __; x=__.MPDSVM', 'shogun.lightsvm': '__assign_shogun_version(); import shogun.Classifier as __; x=__.SVMLight', 'shogun.svmocas': '__assign_shogun_version(); import shogun.Classifier as __; x=__.SVMOcas', 'shogun.svrlight': '__assign_shogun_version(); from shogun.Regression import SVRLight as __', 'numpy': "__assign_numpy_version()", 'numpy_correct_unique': "__check_numpy_correct_unique()", 'scipy': "__check_scipy()", 'good scipy.stats.rdist': "__check_stablerdist()", 'good scipy.stats.rv_discrete.ppf': "__check_rv_discrete_ppf()", 'good scipy.stats.rv_continuous._reduce_func(floc,fscale)': "__check_rv_continuous_reduce_func()", 'weave': "__check_weave()", 'pywt': "import pywt as __", 'pywt wp reconstruct': "__check_pywt(['wp reconstruct'])", 'pywt wp reconstruct fixed': "__check_pywt(['wp reconstruct fixed'])", #'rpy': "__check_rpy()", 'rpy2': "__check_rpy2()", 'lars': "exists('rpy2', raise_='always');" \ "import rpy2.robjects; rpy2.robjects.r.library('lars')", 'mass': "exists('rpy2', raise_='always');" \ "import rpy2.robjects; rpy2.robjects.r.library('MASS')", 'elasticnet': "exists('rpy2', raise_='always'); "\ "import rpy2.robjects; rpy2.robjects.r.library('elasticnet')", 'glmnet': "exists('rpy2', raise_='always'); " \ "import rpy2.robjects; rpy2.robjects.r.library('glmnet')", 'cran-energy': "exists('rpy2', raise_='always'); " \ "import rpy2.robjects; rpy2.robjects.r.library('energy')", 'matplotlib': "__assign_matplotlib_version()", 'pylab': "__check_pylab()", 'pylab plottable': "__check_pylab_plottable()", 'openopt': "__check_openopt()", 'skl': "__assign_skl_version()", 'mdp': "__assign_mdp_version()", 'mdp ge 2.4': "from mdp.nodes import LLENode as __", 'sg_fixedcachesize': "__check_shogun(3043, [2456])", # 3318 corresponds to release 0.6.4 'sg ge 0.6.4': "__check_shogun(3318)", # 3377 corresponds to release 0.6.5 'sg ge 0.6.5': "__check_shogun(3377)", 'hcluster': "import hcluster as __", 'griddata': "__check_griddata()", 'cPickle': "import cPickle as __", 'gzip': "import gzip as __", 'lxml': "from lxml import objectify as __", 'atlas_pymvpa': "__check_atlas_family('pymvpa')", 'atlas_fsl': "__check_atlas_family('fsl')", 'ipython': "__assign_ipython_version()", 'running ipython env': "__check_in_ipython()", 'reportlab': "__check_reportlab()", 'nose': "import nose as __", 'pprocess': "__check_pprocess()", 'h5py': "import h5py as __", 'nipy': "__assign_nipy_version()", 'nipy.neurospin': "__check_nipy_neurospin()", 'statsmodels': 'import statsmodels.api as __', } def exists(dep, force=False, raise_=False, issueWarning=None): """ Test whether a known dependency is installed on the system. This method allows us to test for individual dependencies without testing all known dependencies. It also ensures that we only test for a dependency once. Parameters ---------- dep : string or list of string The dependency key(s) to test. force : boolean Whether to force the test even if it has already been performed. raise_ : boolean Whether to raise RuntimeError if dependency is missing. If True, it is still conditioned on the global setting MVPA_EXTERNALS_RAISE_EXCEPTION, while would raise exception if missing despite the configuration if 'always'. issueWarning : string or None or True If string, warning with given message would be thrown. If True, standard message would be used for the warning text. """ # if we are provided with a list of deps - go through all of them if isinstance(dep, list) or isinstance(dep, tuple): results = [ exists(dep_, force, raise_) for dep_ in dep ] return bool(reduce(lambda x,y: x and y, results, True)) # where to look in cfg cfgid = 'have ' + dep # pre-handle raise_ according to the global settings and local argument if isinstance(raise_, str): if raise_.lower() == 'always': raise_ = True else: raise ValueError("Unknown value of raise_=%s. " "Must be bool or 'always'" % raise_) else: # must be bool conditioned on the global settings raise_ = raise_ \ and cfg.getboolean('externals', 'raise exception', True) # prevent unnecessarry testing if cfg.has_option('externals', cfgid) \ and not cfg.getboolean('externals', 'retest', default='no') \ and not force: if __debug__: debug('EXT', "Skip retesting for '%s'." % dep) # check whether an exception should be raised, even though the external # was already tested previously if not cfg.getboolean('externals', cfgid) and raise_: raise RuntimeError, "Required external '%s' was not found" % dep return cfg.getboolean('externals', cfgid) # determine availability of external (non-cached) # default to 'not found' result = False if dep not in _KNOWN: raise ValueError, "%s is not a known dependency key." % (dep) else: # try and load the specific dependency if __debug__: debug('EXT', "Checking for the presence of %s" % dep) # Exceptions which are silently caught while running tests for externals _caught_exceptions = [ImportError, AttributeError, RuntimeError] try: # Suppress NumPy warnings while testing for externals olderr = np.seterr(all="ignore") estr = '' try: exec _KNOWN[dep] result = True except tuple(_caught_exceptions), e: estr = ". Caught exception was: " + str(e) except Exception, e: # Add known ones by their names so we don't need to # actually import anything manually to get those classes if e.__class__.__name__ in ['RPy_Exception', 'RRuntimeError', 'RPy_RException']: _caught_exceptions += [e.__class__] estr = ". Caught exception was: " + str(e) else: raise finally: # And restore warnings np.seterr(**olderr) if __debug__: debug('EXT', "Presence of %s is%s verified%s" % (dep, {True:'', False:' NOT'}[result], estr)) if not result: if raise_: raise RuntimeError, "Required external '%s' was not found" % dep if issueWarning is not None \ and cfg.getboolean('externals', 'issue warning', True): if issueWarning is True: warning("Required external '%s' was not found" % dep) else: warning(issueWarning) # store result in config manager if not cfg.has_section('externals'): cfg.add_section('externals') if result: cfg.set('externals', 'have ' + dep, 'yes') else: cfg.set('externals', 'have ' + dep, 'no') return result # Bind functions for some versions checkings versions._KNOWN.update({ 'numpy' : __assign_numpy_version, 'scipy' : __assign_scipy_version, 'nipy' : __assign_nipy_version, 'matplotlib': __assign_matplotlib_version, 'mdp' : __assign_mdp_version, 'ipython' : __assign_ipython_version, 'reportlab' : __check_reportlab, 'pprocess' : __check_pprocess, 'rpy2' : __check_rpy2, 'skl' : __assign_skl_version, 'shogun' : __assign_shogun_version, 'shogun:rev' : __assign_shogun_version, 'shogun:full' : __assign_shogun_version, 'h5py' : __assign_h5py_version, }) ##REF: Name was automagically refactored def check_all_dependencies(force=False, verbosity=1): """ Test for all known dependencies. Parameters ---------- force : boolean Whether to force the test even if it has already been performed. """ # loop over all known dependencies for dep in _KNOWN: if not exists(dep, force): if verbosity: warning("%s is not available." % dep) if __debug__: debug('EXT', 'The following optional externals are present: %s' \ % [ k[5:] for k in cfg.options('externals') if k.startswith('have') \ and cfg.getboolean('externals', k) == True ]) pymvpa2-2.2.0/mvpa2/base/hdf5.py000066400000000000000000000670001202542755000162550ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """HDF5-based file IO for PyMVPA objects. Based on the `h5py` package, this module provides two functions (`obj2hdf()` and `hdf2obj()`, as well as the convenience functions `h5save()` and `h5load()`) to store (in principle) arbitrary Python objects into HDF5 groups, and using HDF5 as input, convert them back into Python object instances. Similar to `pickle` a Python object is disassembled into its pieces, but instead of serializing it into a byte-stream it is stored in chunks which type can be natively stored in HDF5. That means basically everything that can be stored in a NumPy array. If an object is not readily storable, its `__reduce__()` method is called to disassemble it into basic pieces. The default implementation of `object.__reduce__()` is typically sufficient. Hence, for any new-style Python class there is, in general, no need to implement `__reduce__()`. However, custom implementations might allow for leaner HDF5 representations and leaner files. Basic types, such as `list`, and `dict`, whose `__reduce__()` method does not do help with disassembling are also handled. .. warning:: Although, in principle, storage and reconstruction of arbitrary object types is possible, it might not be implemented yet. The current focus lies on storage of PyMVPA datasets and their attributes (e.g. Mappers). """ __docformat__ = 'restructuredtext' import types import numpy as np import h5py import os import os.path as osp from mvpa2.base.types import asobjarray if __debug__: from mvpa2.base import debug # Comment: H5Py defines H5Error class HDF5ConversionError(Exception): """Generic exception to be thrown while doing conversions to/from HDF5 """ pass def hdf2obj(hdf, memo=None): """Convert an HDF5 group definition into an object instance. Obviously, this function assumes the conventions implemented in the `obj2hdf()` function. Those conventions will eventually be documented in the module docstring, whenever they are sufficiently stable. Parameters ---------- hdf : HDF5 group instance HDF5 group instance. this could also be an HDF5 file instance. memo : dict Dictionary tracking reconstructed objects to prevent recursions (analog to deepcopy). Notes ----- Although, this function uses a way to reconstruct object instances that is similar to unpickling, it should be *relatively* safe to open HDF files from untrusted sources. Only basic datatypes are stored in HDF files, and there is no foreign code that is executed during reconstructing. For that reason, any type that shall be reconstructed needs to be importable (importing is done be fully-qualified module names). Returns ------- object instance """ if memo is None: # init object tracker memo = {} # note, older file formats did not store objrefs if 'objref' in hdf.attrs: objref = hdf.attrs['objref'] else: objref = None # if this HDF group has an objref that points to an already recontructed # object, simple return this object again if not objref is None and objref in memo: obj = memo[objref] if __debug__: debug('HDF5', "Use tracked object %s (%i)" % (type(obj), objref)) return obj # # Actual data # if isinstance(hdf, h5py.Dataset): if __debug__: debug('HDF5', "Load from HDF5 dataset [%s]" % hdf.name) if 'is_scalar' in hdf.attrs: # extract the scalar from the 0D array obj = hdf[()] # and coerce it back into the native Python type if necessary if issubclass(type(obj), np.generic): obj = np.asscalar(obj) elif 'is_numpy_scalar' in hdf.attrs: # extract the scalar from the 0D array as is obj = hdf[()] else: # read array-dataset into an array obj = np.empty(hdf.shape, hdf.dtype) hdf.read_direct(obj) else: # check if we have a class instance definition here if not ('class' in hdf.attrs or 'recon' in hdf.attrs): raise LookupError("Found hdf group without class instance " "information (group: %s). Cannot convert it into an " "object (content: '%s', attributes: '%s')." % (hdf.name, hdf.keys(), hdf.attrs.keys())) mod_name = hdf.attrs['module'] if 'recon' in hdf.attrs: # Custom objects custom reconstructor obj = _recon_customobj_customrecon(hdf, memo) elif mod_name != '__builtin__': # Custom objects default reconstructor cls_name = hdf.attrs['class'] if cls_name in ('function', 'type', 'builtin_function_or_method'): # Functions and types obj = _recon_functype(hdf) else: # Other custom objects obj = _recon_customobj_defaultrecon(hdf, memo) else: # Built-in objects cls_name = hdf.attrs['class'] if __debug__: debug('HDF5', "Reconstructing built-in object '%s'." % cls_name) # built in type (there should be only 'list', 'dict' and 'None' # that would not be in a Dataset if cls_name == 'NoneType': obj = None elif cls_name == 'tuple': obj = _hdf_tupleitems_to_obj(hdf, memo) elif cls_name == 'list': obj = _hdf_list_to_obj(hdf, memo) elif cls_name == 'dict': obj = _hdf_dict_to_obj(hdf, memo) elif cls_name == 'type': obj = eval(hdf.attrs['name']) elif cls_name == 'function': raise RuntimeError("Unhandled reconstruction of built-in " "function (at '%s')." % hdf.name) else: raise RuntimeError("Found hdf group with a builtin type " "that is not handled by the parser (group: %s). This " "is a conceptual bug in the parser. Please report." % hdf.name) # # Final post-processing # if 'is_objarray' in hdf.attrs: # need to handle special case of arrays of objects if np.isscalar(obj): obj = np.array(obj, dtype=np.object) else: obj = asobjarray(obj) if 'shape' in hdf.attrs: shape = tuple(hdf.attrs['shape']) if shape != obj.shape: obj = obj.reshape(shape) # track if desired if objref: memo[objref] = obj if __debug__: debug('HDF5', "Done loading %s [%s]" % (type(obj), hdf.name)) return obj def _recon_functype(hdf): """Reconstruct a function or type from HDF""" cls_name = hdf.attrs['class'] mod_name = hdf.attrs['module'] ft_name = hdf.attrs['name'] if __debug__: debug('HDF5', "Load '%s.%s.%s' [%s]" % (mod_name, cls_name, ft_name, hdf.name)) mod = __import__(mod_name, fromlist=[cls_name]) obj = mod.__dict__[ft_name] return obj def _get_subclass_entry(cls, clss, exc_msg="", exc=NotImplementedError): """In a list of tuples (cls, ...) return the entry for the first occurrence of the class of which `cls` is a subclass of. Otherwise raise `exc` with the given message""" for clstuple in clss: if issubclass(cls, clstuple[0]): return clstuple raise exc(exc_msg % locals()) def _update_obj_state_from_hdf(obj, hdf, memo): if 'state' in hdf: # insert the state of the object if __debug__: debug('HDF5', "Populating instance state.") if hasattr(obj, '__setstate__'): state = hdf2obj(hdf['state'], memo) obj.__setstate__(state) else: state = _hdf_dict_to_obj(hdf['state'], memo) obj.__dict__.update(state) if __debug__: debug('HDF5', "Updated %i state items." % len(state)) def _recon_customobj_customrecon(hdf, memo): """Reconstruct a custom object from HDF using a custom recontructor""" # we found something that has some special idea about how it wants # to be reconstructed mod_name = hdf.attrs['module'] recon_name = hdf.attrs['recon'] if __debug__: debug('HDF5', "Load from custom reconstructor '%s.%s' [%s]" % (mod_name, recon_name, hdf.name)) # turn names into definitions try: mod = __import__(mod_name, fromlist=[recon_name]) except ImportError, e: if mod_name.startswith('mvpa') and not mod_name.startswith('mvpa2'): # try to be gentle on data that got stored with PyMVPA 0.5 or 0.6 mod_name = mod_name.replace('mvpa', 'mvpa2', 1) mod = __import__(mod_name, fromlist=[recon_name]) else: raise e recon = mod.__dict__[recon_name] if 'rcargs' in hdf: recon_args_hdf = hdf['rcargs'] if __debug__: debug('HDF5', "Load reconstructor args in [%s]" % recon_args_hdf.name) recon_args = _hdf_tupleitems_to_obj(recon_args_hdf, memo) else: recon_args = () # reconstruct obj = recon(*recon_args) # insert any stored object state _update_obj_state_from_hdf(obj, hdf, memo) return obj def _recon_customobj_defaultrecon(hdf, memo): """Reconstruct a custom object from HDF using the default recontructor""" cls_name = hdf.attrs['class'] mod_name = hdf.attrs['module'] if __debug__: debug('HDF5', "Load class instance '%s.%s' instance [%s]" % (mod_name, cls_name, hdf.name)) try: mod = __import__(mod_name, fromlist=[cls_name]) except ImportError, e: if mod_name.startswith('mvpa') and not mod_name.startswith('mvpa2'): # try to be gentle on data that got stored with PyMVPA 0.5 or 0.6 mod_name = mod_name.replace('mvpa', 'mvpa2', 1) mod = __import__(mod_name, fromlist=[cls_name]) else: raise e cls = mod.__dict__[cls_name] # create the object # use specialized __new__ if necessary or beneficial pcls, = _get_subclass_entry(cls, ((dict,), (list,), (object,)), "Do not know how to create instance of %(cls)s") obj = pcls.__new__(cls) # insert any stored object state _update_obj_state_from_hdf(obj, hdf, memo) # do we process a container? if 'items' in hdf: # charge the items -- handling depends on the parent class pcls, umeth, cfunc = _get_subclass_entry( cls, ((dict, 'update', _hdf_dict_to_obj), (list, 'extend', _hdf_list_to_obj)), "Unhandled container type (got: '%(cls)s').") if __debug__: debug('HDF5', "Populating %s object." % pcls) getattr(obj, umeth)(cfunc(hdf, memo)) if __debug__: debug('HDF5', "Loaded %i items." % len(obj)) return obj def _hdf_dict_to_obj(hdf, memo, skip=None): if skip is None: skip = [] # legacy compat code if not 'items' in hdf: items_container = hdf # end of legacy compat code else: items_container = hdf['items'] if items_container.attrs.get('__keys_in_tuple__', 0): items = _hdf_list_to_obj(hdf, memo) items = [i for i in items if not i[0] in skip] return dict(items) else: # legacy files had keys as group names return dict([(item, hdf2obj(items_container[item], memo=memo)) for item in items_container if not item in skip]) def _hdf_list_to_obj(hdf, memo): """Convert an HDF item sequence into a list""" # new-style files have explicit length if 'length' in hdf.attrs: length = hdf.attrs['length'] if __debug__: debug('HDF5', "Found explicit sequence length setting (%i)" % length) hdf_items = hdf['items'] elif 'items' in hdf: # not so legacy file, at least has an items container length = len(hdf['items']) if __debug__: debug('HDF5', "No explicit sequence length setting (guess: %i)" % length) hdf_items = hdf['items'] # legacy compat code else: length = len(hdf) if __debug__: debug('HDF5', "Ancient file, guessing sequence length (%i)" % length) # really legacy file, not even items container hdf_items = hdf # end of legacy compat code # prepare item list items = [None] * length # need to put items list in memo before starting to parse to allow to detect # self-inclusion of this list in itself if 'objref' in hdf.attrs: obj_id = hdf.attrs['objref'] memo[obj_id] = items if __debug__: debug('HDF5', "Track sequence under ref: %i)" % length) # for all expected items for i in xrange(length): if __debug__: debug('HDF5', "Item %i" % i) str_i = str(i) obj = None objref = None # we need a separate flag, see below got_obj = False # do we have an item attribute for this item (which is the objref) if str_i in hdf_items.attrs: objref = hdf_items.attrs[str_i] # do we have an actual value for this item if str_i in hdf_items: obj = hdf2obj(hdf_items[str_i], memo=memo) # we need to signal that we got something, since it could as well # be None got_obj = True if not got_obj: # no actual value for item if objref is None: raise LookupError("Cannot find list item '%s'" % str_i) else: # no value but reference -> value should be in memo if objref in memo: if __debug__: debug('HDF5', "Use tracked object (%i)" % objref) items[i] = memo[objref] else: raise LookupError("No value for objref '%i'" % objref) else: # we have a value for this item items[i] = obj # store value for ref if present if not objref is None: memo[objref] = obj return items def _hdf_tupleitems_to_obj(hdf, memo): """Same as _hdf_list_to_obj, but converts to tuple upon return""" return tuple(_hdf_list_to_obj(hdf, memo)) def _seqitems_to_hdf(obj, hdf, memo, noid=False, **kwargs): """Store a sequence as HDF item list""" hdf.attrs.create('length', len(obj)) items = hdf.create_group('items') for i, item in enumerate(obj): if __debug__: debug('HDF5', "Item %i" % i) obj2hdf(items, item, name=str(i), memo=memo, noid=noid, **kwargs) def obj2hdf(hdf, obj, name=None, memo=None, noid=False, **kwargs): """Store an object instance in an HDF5 group. A given object instance is (recursively) disassembled into pieces that are storable in HDF5. In general, any pickable object should be storable, but since the parser is not complete, it might not be possible (yet). .. warning:: Currently, the parser does not track recursions. If an object contains recursive references all bets are off. Here be dragons... Parameters ---------- hdf : HDF5 group instance HDF5 group instance. this could also be an HDF5 file instance. obj : object instance Object instance that shall be stored. name : str or None Name of the object. In case of a complex object that cannot be stored natively without disassembling them, this is going to be a new group, Otherwise the name of the dataset. If None, no new group is created. memo : dict Dictionary tracking stored objects to prevent recursions (analog to deepcopy). noid : bool If True, the to be processed object has no usable id. Set if storing objects that were created temporarily, e.g. during type conversions. **kwargs All additional arguments will be passed to `h5py.Group.create_dataset()` """ if memo is None: # initialize empty recursion tracker memo = {} # # Catch recursions: just stored references to already known objects # if noid: # noid: tracking this particular object is not intended obj_id = 0 else: obj_id = id(obj) if not noid and obj_id in memo: # already in here somewhere, nothing else but reference needed # this can also happen inside containers, so 'name' should not be None hdf.attrs.create(name, obj_id) if __debug__: debug('HDF5', "Store '%s' by objref: %i" % (type(obj), obj_id)) # done return # # Ugly special case of arrays of objects # is_objarray = False # assume the bright side ;-) is_ndarray = isinstance(obj, np.ndarray) if is_ndarray: if obj.dtype == np.object: shape = obj.shape if not len(obj.shape): # even worse: 0d array # we store 0d object arrays just by content if __debug__: debug('HDF5', "0d array(object) -> object") obj = obj[()] else: # proper arrays can become lists if __debug__: debug('HDF5', "array(objects) -> list(objects)") obj = list(obj.flatten()) # make sure we don't ref this temporary list object noid = True # flag that we messed with the original type is_objarray = True # and re-estimate the content's nd-array-ness is_ndarray = isinstance(obj, np.ndarray) # if it is something that can go directly into HDF5, put it there # right away is_scalar = np.isscalar(obj) if is_scalar or is_ndarray: is_numpy_scalar = issubclass(type(obj), np.generic) if name is None: # HDF5 cannot handle datasets without a name name = '__unnamed__' if __debug__: debug('HDF5', "Store '%s' (ref: %i) in [%s/%s]" % (type(obj), obj_id, hdf.name, name)) # the real action is here if 'compression' in kwargs \ and (is_scalar or (is_ndarray and not len(obj.shape))): # recent (>= 2.0.0) h5py is strict not allowing # compression to be set for scalar types or anything with # shape==() ... TODO: check about is_objarrays ;-) kwargs = dict([(k, v) for (k, v) in kwargs.iteritems() if k != 'compression']) hdf.create_dataset(name, None, None, obj, **kwargs) if not noid and not is_scalar: # objref for scalar items would be overkill hdf[name].attrs.create('objref', obj_id) # store object reference to be able to detect duplicates memo[obj_id] = obj if __debug__: debug('HDF5', "Record objref in memo-dict (%i)" % obj_id) ## yoh: was not sure why we have to assign here as well as below to grp ## so commented out and seems to work just fine ;) ## if is_objarray: ## # we need to confess the true origin ## hdf[name].attrs.create('is_objarray', True) ## ## if len(objarray_shape) > 1: ## ## # it was of more than 1 dimension ## ## hdf[name].attrs.create('objarray_shape', objarray_shape) # handle scalars giving numpy scalars different flag if is_numpy_scalar: hdf[name].attrs.create('is_numpy_scalar', True) elif is_scalar: hdf[name].attrs.create('is_scalar', True) return # # Below handles stuff that cannot be natively stored in HDF5 # if not name is None: if __debug__: debug('HDF5', "Store '%s' (ref: %i) in [%s/%s]" % (type(obj), obj_id, hdf.name, name)) grp = hdf.create_group(str(name)) else: # XXX wouldn't it be more coherent to always have non-native objects in # a separate group if __debug__: debug('HDF5', "Store '%s' (ref: %i) in [%s]" % (type(obj), obj_id, hdf.name)) grp = hdf # # Store important flags and references in the group meta data # if not noid and not obj is None: # no refs for basic types grp.attrs.create('objref', obj_id) # we also note that we processed this object memo[obj_id] = obj if is_objarray: # we need to confess the true origin grp.attrs.create('is_objarray', True) grp.attrs.create('shape', shape) # standard containers need special treatment if not hasattr(obj, '__reduce__'): raise HDF5ConversionError("Cannot store class without __reduce__ " "implementation (%s)" % type(obj)) # try disassembling the object try: pieces = obj.__reduce__() except TypeError: # needs special treatment pieces = None # common container handling, either __reduce__ was not possible # or it was the default implementation if pieces is None or pieces[0].__name__ == '_reconstructor': # figure out the source module if hasattr(obj, '__module__'): src_module = obj.__module__ else: src_module = obj.__class__.__module__ cls_name = obj.__class__.__name__ # special case: metaclass types NOT instance of a class with metaclass if hasattr(obj, '__metaclass__') and hasattr(obj, '__base__'): cls_name = 'type' if src_module != '__builtin__': if hasattr(obj, '__name__'): if not obj.__name__ in dir(__import__(src_module, fromlist=[obj.__name__])): raise HDF5ConversionError("Cannot store locally defined " "function '%s'" % cls_name) else: if not cls_name in dir(__import__(src_module, fromlist=[cls_name])): raise HDF5ConversionError("Cannot store locally defined " "class '%s'" % cls_name) # store class info (fully-qualified) grp.attrs.create('class', cls_name) grp.attrs.create('module', src_module) if hasattr(obj, '__name__'): # for functions/types we need a name for reconstruction oname = obj.__name__ if oname == '': raise HDF5ConversionError( "Can't obj2hdf lambda functions. Got %r" % (obj,)) grp.attrs.create('name', oname) if isinstance(obj, list) or isinstance(obj, tuple): _seqitems_to_hdf(obj, grp, memo, **kwargs) elif isinstance(obj, dict): if __debug__: debug('HDF5', "Store dict as zipped list") # need to set noid since outer tuple containers are temporary _seqitems_to_hdf(zip(obj.keys(), obj.values()), grp, memo, noid=True, **kwargs) grp['items'].attrs.create('__keys_in_tuple__', 1) else: if __debug__: debug('HDF5', "Use custom __reduce__ for storage: (%i arguments)." % len(pieces[1])) grp.attrs.create('recon', pieces[0].__name__) grp.attrs.create('module', pieces[0].__module__) args = grp.create_group('rcargs') _seqitems_to_hdf(pieces[1], args, memo, **kwargs) # pull all remaining data from __reduce__ if not pieces is None and len(pieces) > 2: # there is something in the state state = pieces[2] if __debug__: debug('HDF5', "Store object state (%i items)." % len(state)) # need to set noid since state dict is unique to an object obj2hdf(grp, state, name='state', memo=memo, noid=True, **kwargs) def h5save(filename, data, name=None, mode='w', mkdir=True, **kwargs): """Stores arbitrary data in an HDF5 file. This is a convenience wrapper around `obj2hdf()`. Please see its documentation for more details -- especially the warnings!! Parameters ---------- filename : str Name of the file the data shall be stored in. data : arbitrary Instance of an object that shall be stored in the file. name : str or None Name of the object. In case of a complex object that cannot be stored natively without disassembling them, this is going to be a new group, otherwise the name of the dataset. If None, no new group is created. mode : {'r', 'r+', 'w', 'w-', 'a'} IO mode of the HDF5 file. See `h5py.File` documentation for more information. mkdir : bool, optional Create target directory if it does not exist yet. **kwargs All additional arguments will be passed to `h5py.Group.create_dataset`. This could, for example, be `compression='gzip'`. """ if mkdir: target_dir = osp.dirname(filename) if target_dir and not osp.exists(target_dir): os.makedirs(target_dir) hdf = h5py.File(filename, mode) hdf.attrs.create('__pymvpa_hdf5_version__', 1) try: obj2hdf(hdf, data, name, **kwargs) finally: hdf.close() def h5load(filename, name=None): """Loads the content of an HDF5 file that has been stored by `h5save()`. This is a convenience wrapper around `hdf2obj()`. Please see its documentation for more details. Parameters ---------- filename : str Name of the file to open and load its content. name : str Name of a specific object to load from the file. Returns ------- instance An object of whatever has been stored in the file. """ hdf = h5py.File(filename, 'r') try: if not name is None: if not name in hdf: raise ValueError("No object of name '%s' in file '%s'." % (name, filename)) obj = hdf2obj(hdf[name]) else: if not len(hdf) and not len(hdf.attrs): # there is nothing obj = None else: # stored objects can only by special groups or datasets if isinstance(hdf, h5py.Dataset) \ or ('class' in hdf.attrs or 'recon' in hdf.attrs): # this is an object stored at the toplevel obj = hdf2obj(hdf) else: # no object into at the top-level, but maybe in the next one # this would happen for plain mat files with arrays if len(hdf) == 1 and '__unnamed__' in hdf: # just a single with special name -> special case: # return as is obj = hdf2obj(hdf['__unnamed__']) else: # otherwise build dict with content obj = {} for k in hdf: obj[k] = hdf2obj(hdf[k]) finally: hdf.close() return obj pymvpa2-2.2.0/mvpa2/base/info.py000066400000000000000000000242041202542755000163610ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Provide system and PyMVPA information useful while reporting bugs """ __docformat__ = 'restructuredtext' import time, sys, os, subprocess import platform as pl from tempfile import mkstemp from StringIO import StringIO import mvpa2 from mvpa2.base import externals, cfg from mvpa2.base.dochelpers import borrowkwargs def _t2s(t): res = [] for e in t: if isinstance(e, tuple): es = _t2s(e) if es != '': res += ['(%s)' % es] elif e != '': res += [e] return '/'.join(res) __all__ = ['wtf', 'get_pymvpa_gitversion'] def get_pymvpa_gitversion(): """PyMVPA version as reported by git. Returns ------- None or str Version of PyMVPA according to git. """ gitpath = os.path.join(os.path.dirname(mvpa2.__file__), os.path.pardir) gitpathgit = os.path.join(gitpath, '.git') if not os.path.exists(gitpathgit): return None ver = None try: (tmpd, tmpn) = mkstemp('mvpa', 'git') retcode = subprocess.call(['git', '--git-dir=%s' % gitpathgit, '--work-tree=%s' % gitpath, 'describe', '--abbrev=4', 'HEAD' ], stdout=tmpd, stderr=subprocess.STDOUT) outline = open(tmpn, 'r').readlines()[0].strip() if outline.startswith('upstream/'): ver = outline.replace('upstream/', '') finally: os.remove(tmpn) return ver class WTF(object): """Convenience class to contain information about PyMVPA and OS TODO: refactor to actually not contain just string representation but rather a dictionary (of dictionaries) """ __knownitems__ = set(('process', 'runtime', 'externals', 'system', 'sources')) def __init__(self, include=None, exclude=None): """ Parameters ---------- include : list of str By default, all known (listed in `__knownitems__`) are reported. If only a limited set is needed to be reported -- specify it here. exclude : list of str If you want to exclude any item from being reported. """ self._info = '' if include is None: report_items = self.__knownitems__.copy() else: # check first if not self.__knownitems__.issuperset(include): raise ValueError, \ "Items %s provided in exclude are not known to WTF." \ " Known are %s" % \ (str(set(include).difference(self.__knownitems__)), self.__knownitems__) report_items = set(include) if exclude is not None: # check if all are known if not self.__knownitems__.issuperset(exclude): raise ValueError, \ "Items %s provided in exclude are not known to WTF." \ " Known are %s" % \ (str(set(exclude).difference(self.__knownitems__)), self.__knownitems__) report_items = report_items.difference(exclude) self._report_items = report_items self._acquire() def _acquire_sources(self, out): out.write("PyMVPA:\n") out.write(" Version: %s\n" % mvpa2.__version__) out.write(" Hash: %s\n" % mvpa2.__hash__) out.write(" Path: %s\n" % mvpa2.__file__) # Try to obtain git information if available out.write(" Version control (GIT):\n") try: gitpath = os.path.join(os.path.dirname(mvpa2.__file__), os.path.pardir) gitpathgit = os.path.join(gitpath, '.git') if os.path.exists(gitpathgit): for scmd, cmd in [ ('Status', ['status']), ('Reference', 'show-ref -h HEAD'.split(' ')), ('Difference from last release %s' % mvpa2.__version__, ['diff', '--shortstat', 'upstream/%s...' % mvpa2.__version__])]: try: (tmpd, tmpn) = mkstemp('mvpa', 'git') retcode = subprocess.call(['git', '--git-dir=%s' % gitpathgit, '--work-tree=%s' % gitpath] + cmd, stdout=tmpd, stderr=subprocess.STDOUT) finally: outlines = open(tmpn, 'r').readlines() if len(outlines): out.write(' %s:\n %s' % (scmd, ' '.join(outlines))) os.remove(tmpn) #except Exception, e: # pass else: raise RuntimeError, "%s is not under GIT" % gitpath except Exception, e: out.write(' GIT information could not be obtained due "%s"\n' % e) def _acquire_system(self, out): out.write('SYSTEM:\n') out.write(' OS: %s\n' % ' '.join([os.name, pl.system(), pl.release(), pl.version()]).rstrip()) out.write(' Distribution: %s\n' % ' '.join([_t2s(pl.dist()), _t2s(pl.mac_ver()), _t2s(pl.win32_ver())]).rstrip()) def _acquire_externals(self, out): # Test and list all dependencies: sdeps = {True: [], False: [], 'Error': []} for dep in sorted(externals._KNOWN): try: sdeps[externals.exists(dep, force=False)] += [dep] except: sdeps['Error'] += [dep] out.write('EXTERNALS:\n') out.write(' Present: %s\n' % ', '.join(sdeps[True])) out.write(' Absent: %s\n' % ', '.join(sdeps[False])) if len(sdeps['Error']): out.write(' Errors in determining: %s\n' % ', '.join(sdeps['Error'])) SV = ('.__version__', ) # standard versioning out.write(' Versions of critical externals:\n') # First the ones known to externals, # TODO: make all of them set in externals.versions for k, v in externals.versions.iteritems(): out.write(' %-12s: %s\n' % (k, str(v))) for e, mname, fs in ( ('ctypes', None, SV), ('matplotlib', None, SV), ('lxml', None, ('.etree.__version__',)), ('nifti', None, SV), ('numpy', None, SV), ('openopt', 'openopt', SV), ('openopt', 'scikits.openopt', ('.openopt.__version__',)), ('pywt', None, SV), #('rpy', None, ('.rpy_version',)), ('shogun', None, ('.Classifier.Version_get_version_release()',)), ): try: if not externals.exists(e): continue #sver = 'not present' else: if mname is None: mname = e m = __import__(mname) svers = [eval('m%s' % (f,)) for f in fs] sver = ' '.join(svers) except Exception, exc: sver = 'failed to query due to "%s"' % str(exc) out.write(' %-12s: %s\n' % (e, sver)) try: if externals.exists('matplotlib'): import matplotlib out.write(' Matplotlib backend: %s\n' % matplotlib.get_backend()) except Exception, exc: out.write(' Failed to determine backend of matplotlib due to "%s"' % str(exc)) def _acquire_runtime(self, out): out.write("RUNTIME:\n") out.write(" PyMVPA Environment Variables:\n") out.write(' ' + ' '.join( ['%-20s: "%s"\n' % (str(k), str(v)) for k, v in os.environ.iteritems() if (k.startswith('MVPA') or k.startswith('PYTHON'))])) out.write(" PyMVPA Runtime Configuration:\n") out.write(' ' + str(cfg).replace('\n', '\n ').rstrip() + '\n') def _acquire_process(self, out): try: procstat = open('/proc/%d/status' % os.getpid()).readlines() out.write(' Process Information:\n') out.write(' ' + ' '.join(procstat)) except: pass def _acquire(self): """ TODO: refactor and redo ;) """ out = StringIO() out.write("Current date: %s\n" % time.strftime("%Y-%m-%d %H:%M")) # Little silly communicator/ if 'sources' in self._report_items: self._acquire_sources(out) if 'system' in self._report_items: self._acquire_system(out) if 'externals' in self._report_items: self._acquire_externals(out) if 'runtime' in self._report_items: self._acquire_runtime(out) if 'process' in self._report_items: self._acquire_process(out) self._info = out.getvalue() def __repr__(self): if self._info is None: self._acquire() return self._info __str__ = __repr__ @borrowkwargs(WTF, '__init__') def wtf(filename=None, **kwargs): """Report summary about PyMVPA and the system Parameters ---------- filename : None or str If provided, information will be stored in a file, not printed to the screen **kwargs Passed to initialize `WTF` instance """ info = WTF(**kwargs) if filename is not None: _ = open(filename, 'w').write(str(info)) else: return info if __name__ == '__main__': print wtf() pymvpa2-2.2.0/mvpa2/base/learner.py000066400000000000000000000164641202542755000170670ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Implementation of a common trainable processing object (Learner).""" __docformat__ = 'restructuredtext' import time from mvpa2.base.node import Node from mvpa2.base.state import ConditionalAttribute from mvpa2.base.types import is_datasetlike from mvpa2.base.dochelpers import _repr_attrs if __debug__: from mvpa2.base import debug class LearnerError(Exception): """Base class for exceptions thrown by the Learners """ pass class DegenerateInputError(LearnerError): """Learner exception thrown if input data is not bogus i.e. no features or samples """ pass class FailedToTrainError(LearnerError): """Learner exception thrown if training failed""" pass class FailedToPredictError(LearnerError): """Learner exception if it fails to predictions. Usually happens if it was trained on degenerate data but without any complaints. """ pass class Learner(Node): """Common trainable processing object. A `Learner` is a `Node` that can (maybe has to) be trained on a dataset, before it can perform its function. """ training_time = ConditionalAttribute(enabled=True, doc="Time (in seconds) it took to train the learner") def __init__(self, auto_train=False, force_train=False, **kwargs): """ Parameters ---------- auto_train : bool Flag whether the learner will automatically train itself on the input dataset when called untrained. force_train : bool Flag whether the learner will enforce training on the input dataset upon every call. **kwargs All arguments are passed to the baseclass. """ Node.__init__(self, **kwargs) self.__is_trained = False self.__auto_train = auto_train self.__force_train = force_train def __repr__(self, prefixes=[]): return super(Learner, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['auto_train', 'force_train'], default=False)) def train(self, ds): """ The default implementation calls ``_pretrain()``, ``_train()``, and finally ``_posttrain()``. Parameters ---------- ds: Dataset Training dataset. Returns ------- None """ got_ds = is_datasetlike(ds) # TODO remove first condition if all Learners get only datasets if got_ds and (ds.nfeatures == 0 or len(ds) == 0): raise DegenerateInputError( "Cannot train learner on degenerate data %s" % ds) if __debug__: debug("LRN", "Training learner %(lrn)s on dataset %(dataset)s", msgargs={'lrn':self, 'dataset': ds}) self._pretrain(ds) # remember the time when started training t0 = time.time() if got_ds: # things might have happened during pretraining if ds.nfeatures > 0: result = self._train(ds) else: warning("Trying to train on dataset with no features present") if __debug__: debug("LRN", "No features present for training, no actual training " \ "is called") result = None else: # in this case we claim to have no idea and simply try to train result = self._train(ds) # store timing self.ca.training_time = time.time() - t0 # and post-proc result = self._posttrain(ds) # finally flag as trained self._set_trained() if __debug__: debug("LRN", "Finished training learner %(lrn)s on dataset %(dataset)s", msgargs={'lrn':self, 'dataset': ds}) def untrain(self): """Reverts changes in the state of this node caused by previous training """ # flag the learner as untrained # important to do that before calling the implementation in the derived # class, as it might decide that an object remains trained self._set_trained(False) # call subclass untrain first to allow it to access current attributes self._untrain() # TODO evaluate whether this should also reset the nodes collections, or # whether that should be done by a more general reset() method self.reset() def _untrain(self): # nothing by default pass def _pretrain(self, ds): """Preparations prior training. By default, does nothing. Parameters ---------- ds: Dataset Original training dataset. Returns ------- None """ pass def _train(self, ds): # nothing by default pass def _posttrain(self, ds): """Finalizing the training. By default, does nothing. Parameters ---------- ds: Dataset Original training dataset. Returns ------- None """ pass def _set_trained(self, status=True): """Set the Learner's training status Derived use this to set the Learner's status to trained (True) or untrained (False). """ self.__is_trained = status def __call__(self, ds): # overwrite __call__ to perform a rigorous check whether the learner was # trained before use and auto-train if self.is_trained: # already trained if self.force_train: if __debug__: debug('LRN', "Forcing training of %s on %s", (self, ds)) # but retraining is enforced self.train(ds) elif __debug__: debug('LRN', "Skipping training of already trained %s on %s", (self, ds)) else: # not trained if self.auto_train: # auto training requested if __debug__: debug('LRN', "Auto-training %s on %s", (self, ds)) self.train(ds) else: # we always have to have trained before using a learner raise RuntimeError("%s needs to be trained before it can be " "used and auto training is disabled." % str(self)) return super(Learner, self).__call__(ds) is_trained = property(fget=lambda x:x.__is_trained, fset=_set_trained, doc="Whether the Learner is currently trained.") auto_train = property(fget=lambda x:x.__auto_train, doc="Whether the Learner performs automatic training" "when called untrained.") force_train = property(fget=lambda x:x.__force_train, doc="Whether the Learner enforces training upon every" "called.") pymvpa2-2.2.0/mvpa2/base/node.py000066400000000000000000000225321202542755000163550ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Implementation of a common processing object (node).""" __docformat__ = 'restructuredtext' import time from mvpa2.support import copy from mvpa2.base.dochelpers import _str, _repr, _repr_attrs from mvpa2.base.state import ClassWithCollections, ConditionalAttribute if __debug__: from mvpa2.base import debug class Node(ClassWithCollections): """Common processing object. A `Node` is an object the processes datasets. It can be called with a `Dataset` and returns another dataset with the results. In addition, a node can also be used as a generator. Upon calling ``generate()`` with a datasets it yields (potentially) multiple result datasets. Node have a notion of ``space``. The meaning of this space may vary heavily across sub-classes. In general, this is a trigger that tells the node to compute and store information about the input data that is "interesting" in the context of the corresponding processing in the output dataset. """ calling_time = ConditionalAttribute(enabled=True, doc="Time (in seconds) it took to call the node") raw_results = ConditionalAttribute(enabled=False, doc="Computed results before invoking postproc. " + "Stored only if postproc is not None.") def __init__(self, space=None, postproc=None, **kwargs): """ Parameters ---------- space: str, optional Name of the 'processing space'. The actual meaning of this argument heavily depends on the sub-class implementation. In general, this is a trigger that tells the node to compute and store information about the input data that is "interesting" in the context of the corresponding processing in the output dataset. postproc : Node instance, optional Node to perform post-processing of results. This node is applied in `__call__()` to perform a final processing step on the to be result dataset. If None, nothing is done. """ ClassWithCollections.__init__(self, **kwargs) if __debug__: debug("NO", "Init node '%s' (space: '%s', postproc: '%s')", (self.__class__.__name__, space, str(postproc))) self.set_space(space) self.set_postproc(postproc) def __call__(self, ds): """ The default implementation calls ``_precall()``, ``_call()``, and finally returns the output of ``_postcall()``. Parameters ---------- ds: Dataset Input dataset. Returns ------- Dataset """ t0 = time.time() # record the time when call initiated self._precall(ds) result = self._call(ds) result = self._postcall(ds, result) self.ca.calling_time = time.time() - t0 # set the calling_time return result def _precall(self, ds): """Preprocessing of data By default, does nothing. Parameters ---------- ds: Dataset Original input dataset. Returns ------- Dataset """ return ds def _call(self, ds): raise NotImplementedError def _postcall(self, ds, result): """Postprocessing of results. By default, does nothing. Parameters ---------- ds: Dataset Original input dataset. result: Dataset Preliminary result dataset (as produced by ``_call()``). Returns ------- Dataset """ if not self.__postproc is None: if __debug__: debug("NO", "Applying post-processing node %s", (self.__postproc,)) self.ca.raw_results = result result = self.__postproc(result) return result def generate(self, ds): """Yield processing results. This methods causes the node to behave like a generator. By default it simply yields a single result of its processing -- identical to the output of calling the node with a dataset. Subclasses might implement generators that yield multiple results. Parameters ---------- ds: Dataset Input dataset Returns ------- generator the generator yields the result of the processing. """ yield self(ds) def get_space(self): """Query the processing space name of this node.""" return self.__space def set_space(self, name): """Set the processing space name of this node.""" self.__space = name def get_postproc(self): """Returns the post-processing node or None.""" return self.__postproc def set_postproc(self, node): """Assigns a post-processing node Set to `None` to disable postprocessing. """ self.__postproc = node def __str__(self): return _str(self) def __repr__(self, prefixes=[]): return super(Node, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['space', 'postproc'])) space = property(get_space, set_space, doc="Processing space name of this node") postproc = property(get_postproc, set_postproc, doc="Node to perform post-processing of results") class ChainNode(Node): """Chain of nodes. This class allows to concatenate a list of nodes into a processing chain. When called with a dataset, it is sequentially fed through a nodes in the chain. A ChainNode may also be used as a generator. In this case, all nodes in the chain are treated as generators too, and the ChainNode behaves as a single big generator that recursively calls all embedded generators and yield the results. A ChainNode behaves similar to a list container: Nodes can be appended, and the chain can be sliced like a list, etc ... """ def __init__(self, nodes, **kwargs): """ Parameters ---------- nodes: list Node instances. """ if not len(nodes): raise ValueError("%s needs at least one embedded node." % self.__class__.__name__) Node.__init__(self, **kwargs) self._nodes = nodes def __copy__(self): # XXX how do we safely and exhaustively copy a node? return self.__class__([copy.copy(n) for n in self]) def _call(self, ds): mp = ds for i, n in enumerate(self): if __debug__: debug('MAP', "%s: input (%s) -> node (%i/%i): '%s'", (self.__class__.__name__, hasattr(mp, 'shape') and mp.shape or '???', i + 1, len(self), n)) mp = n(mp) if __debug__: debug('MAP', "%s: output (%s)", (self.__class__.__name__, mp.shape)) return mp def generate(self, ds, startnode=0): """ Parameters ---------- ds: Dataset To be processed dataset startnode: int First node in the chain that shall be considered. This argument is mostly useful for internal optimization. """ first_node = self[startnode] if __debug__: debug('MAP', "%s: input (%s) -> generator (%i/%i): '%s'", (self.__class__.__name__, ds.shape, startnode + 1, len(self), first_node)) # let the first node generator as many datasets as it wants for gds in first_node.generate(ds): if startnode == len(self) - 1: # if this is already the last node yield the result yield gds else: # otherwise feed them through the rest of the chain for rgds in self.generate(gds, startnode=startnode + 1): yield rgds # # Behave as a container # def append(self, node): """Append a node to the chain.""" # XXX and if a node is a ChainMapper itself -- should we just # may be loop and add all the entries? self._nodes.append(node) def __len__(self): return len(self._nodes) def __iter__(self): for n in self._nodes: yield n def __reversed__(self): return reversed(self._nodes) def __getitem__(self, key): # if just one is requested return just one, otherwise return a # NodeChain again if isinstance(key, int): return self._nodes[key] else: # operate on shallow copy of self sliced = copy.copy(self) sliced._nodes = self._nodes[key] return sliced def __repr__(self, prefixes=[]): return super(ChainNode, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['nodes'])) def __str__(self): return _str(self, '-'.join([str(n) for n in self])) nodes = property(fget=lambda self:self._nodes) pymvpa2-2.2.0/mvpa2/base/param.py000066400000000000000000000206621202542755000165320ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##g """Parameter representation""" __docformat__ = 'restructuredtext' import re import textwrap import numpy as np from mvpa2.base.state import IndexedCollectable if __debug__: from mvpa2.base import debug _whitespace_re = re.compile('\n\s+|^\s+') __all__ = [ 'Parameter', 'KernelParameter' ] class Parameter(IndexedCollectable): """This class shall serve as a representation of a parameter. It might be useful if a little more information than the pure parameter value is required (or even only useful). Each parameter must have a value. However additional attributes can be passed to the constructor and will be stored in the object. Notes ----- BIG ASSUMPTION: stored values are not mutable, ie nobody should do cls.parameter1[:] = ... or we wouldn't know that it was changed Here is a list of possible additional attributes: allowedtype : str Description of what types are allowed min Minimum value max Maximum value step Increment/decrement step size hint for optimization """ def __init__(self, default, ro=False, index=None, value=None, name=None, doc=None, **kwargs): """Specify a Parameter with a default value and arbitrary number of additional attributes. Parameters ---------- name : str Name of the parameter under which it should be available in its respective collection. doc : str Documentation about the purpose of this parameter. index : int or None Index of parameter among the others. Determines order of listing in help. If None, order of instantiation determines the index. ro : bool Either value which will be assigned in the constructor is read-only and cannot be changed value Actual value of the parameter to be assigned """ # XXX probably is too generic... # and potentially dangerous... # let's at least keep track of what is passed self._additional_props = [] for k, v in kwargs.iteritems(): self.__setattr__(k, v) self._additional_props.append(k) self.__default = default self._ro = ro # needs to come after kwargs processing, since some debug statements # rely on working repr() # value is not passed since we need to invoke _set with init=True # below IndexedCollectable.__init__(self, index=index, # value=value, name=name, doc=doc) self._isset = False if value is None: self._set(self.__default, init=True) else: self._set(value, init=True) if __debug__: if 'val' in kwargs: raise ValueError, "'val' property name is illegal." def __reduce__(self): icr = IndexedCollectable.__reduce__(self) # Collect all possible additional properties which were passed # to the constructor state = dict([(k, getattr(self, k)) for k in self._additional_props]) state['_additional_props'] = self._additional_props state.update(icr[2]) res = (self.__class__, (self.__default, self._ro) + icr[1], state) #if __debug__ and 'COL_RED' in debug.active: # debug('COL_RED', 'Returning %s for %s' % (res, self)) return res def __str__(self): res = IndexedCollectable.__str__(self) # it is enabled but no value is assigned yet res += '=%s' % (self.value,) return res def __repr__(self): # cannot use IndexedCollectable's repr(), since the contructor # needs to handle the mandatory 'default' argument # TODO: so what? just tune it up ;) # TODO: think what to do with index parameter... s = "%s(%s, name=%s, doc=%s" % (self.__class__.__name__, self.__default, repr(self.name), repr(self.__doc__)) plist = ["%s=%s" % (p, self.__getattribute__(p)) for p in self._additional_props] if len(plist): s += ', ' + ', '.join(plist) if self._ro: s += ', ro=True' if not self.is_default: s += ', value=%r' % self.value s += ')' return s def _paramdoc(self, indent=" ", width=70): """Docstring for the parameter to be used in lists of parameters Returns ------- string or list of strings (if indent is None) """ paramsdoc = '%s' % self.name if hasattr(paramsdoc, 'allowedtype'): paramsdoc += " : %s" % self.allowedtype paramsdoc = [paramsdoc] try: doc = self.__doc__.strip() if not doc.endswith('.'): doc += '.' try: doc += " (Default: %r)" % (self.default,) except: pass # Explicitly deal with multiple spaces, for some reason # replace_whitespace is non-effective doc = _whitespace_re.sub(' ', doc) paramsdoc += [indent + x for x in textwrap.wrap(doc, width=width-len(indent), replace_whitespace=True)] except Exception, e: pass return '\n'.join(paramsdoc) # XXX should be named reset2default? correspondingly in # ParameterCollection as well def reset_value(self): """Reset value to the default""" #IndexedCollectable.reset(self) if not self.is_default and not self._ro: self._isset = True self.value = self.__default def _set(self, val, init=False): different_value = self._value != val isarray = isinstance(different_value, np.ndarray) if self._ro and not init: raise RuntimeError, \ "Attempt to set read-only parameter %s to %s" \ % (self.name, val) if (isarray and np.any(different_value)) or \ ((not isarray) and different_value): if __debug__: debug("COL", "Parameter: setting %s to %s " % (str(self), val)) if not isarray: if hasattr(self, 'min') and val < self.min: raise ValueError, \ "Minimal value for parameter %s is %s. Got %s" % \ (self.name, self.min, val) if hasattr(self, 'max') and val > self.max: raise ValueError, \ "Maximal value for parameter %s is %s. Got %s" % \ (self.name, self.max, val) if hasattr(self, 'choices') and (not val in self.choices): raise ValueError, \ "Valid choices for parameter %s are %s. Got %s" % \ (self.name, self.choices, val) self._value = val # Set 'isset' only if not called from initialization routine self._isset = not init #True elif __debug__: debug("COL", "Parameter: not setting %s since value is the same" \ % (str(self))) @property def is_default(self): """Returns True if current value is bound to default one""" return self._value is self.default @property def equal_default(self): """Returns True if current value is equal to default one""" return self._value == self.__default def _set_default(self, value): wasdefault = self.is_default self.__default = value if wasdefault: self.reset_value() self._isset = False # incorrect behavior #def reset(self): # """Override reset so we don't clean the flag""" # pass default = property(fget=lambda x:x.__default, fset=_set_default) value = property(fget=lambda x:x._value, fset=_set) class KernelParameter(Parameter): """Just that it is different beast""" pass pymvpa2-2.2.0/mvpa2/base/report.py000066400000000000000000000256151202542755000167500ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Creating simple PDF reports using reportlab """ __docformat__ = 'restructuredtext' import os from datetime import datetime import mvpa2 from mvpa2.base import externals, verbose from mvpa2.base.dochelpers import borrowkwargs if __debug__: from mvpa2.base import debug if externals.exists('reportlab', raise_=True): import reportlab as rl import reportlab.platypus as rplp import reportlab.lib.styles as rpls import reportlab.lib.units as rplu # Actually current reportlab's Image can't deal directly with .pdf images # Lets use png for now if externals.versions['reportlab'] >= '1112.2': _fig_ext_default = 'pdf' else: _fig_ext_default = 'png' __all__ = [ 'rl', 'Report', 'escape_xml' ] def escape_xml(s): """Replaces &<> symbols with corresponding XML tokens """ s = s.replace('&', '&') s = s.replace('<', '<') s = s.replace('>', '>') return s class Report(object): """Simple PDF reports using reportlab Named report 'report' generates 'report.pdf' and directory 'report/' with images which were requested to be included in the report You can attach report to the existing 'verbose' with >>> report = Report() >>> verbose.handlers += [report] and then all verbose messages present on the screen will also be recorded in the report. Use >>> report.text("string") # to add arbitrary text >>> report.xml("

    skajdsf

    ") # to add XML snippet or >>> report.figure() # to add the current figure to the report. >>> report.figures() # to add existing figures to the report Note that in the later usecase, figures might not be properly interleaved with verbose messages if there were any between the creations of the figures. Inspired by Andy Connolly """ def __init__(self, name='report', title=None, path=None, author=None, style="Normal", fig_ext=None, font='Helvetica', pagesize=None): """Initialize report Parameters ---------- name : string Name of the report title : string or None Title to start the report, if None, name will be used path : string Top directory where named report will be stored. Has to be set now to have correct path for storing image renderings. Default: current directory author : string or None Optional author identity to be printed style : string Default Paragraph to be used. Must be the one of the known to reportlab styles, e.g. Normal fig_ext : string What extension to use for figures by default. If None, a default will be used. Since versions prior 2.2 of reportlab might do not support pdf, 'png' is default for those, 'pdf' otherwise font : string Name of the font to use pagesize : tuple of floats Optional page size if not to be default """ if pagesize is None: pagesize = rl.rl_config.defaultPageSize self.pagesize = pagesize self.name = name self.author = author self.font = font self.title = title if fig_ext is None: self.fig_ext = _fig_ext_default else: self.fig_ext = fig_ext if path is None: self._filename = name else: self._filename = os.path.join(path, name) self.__nfigures = 0 try: styles = rpls.getSampleStyleSheet() self.style = styles.byName[style] except KeyError: raise ValueError, \ "Style %s is not know to reportlab. Known are %s" \ % (styles.keys()) self._story = [] @property def __preamble(self): """Compose the beginning of the report """ date = datetime.today().isoformat(' ') owner = 'PyMVPA v. %s' % mvpa2.__version__ if self.author is not None: owner += ' Author: %s' % self.author return [ rplp.Spacer(1, 0.8*rplu.inch), rplp.Paragraph("Generated on " + date, self.style), rplp.Paragraph(owner, self.style)] + self.__flowbreak def clear(self): """Clear the report """ self._story = [] def xml(self, line, style=None): """Adding XML string to the report """ if __debug__ and not self in debug.handlers: debug("REP", "Adding xml '%s'" % line.strip()) if style is None: style = self.style self._story.append(rplp.Paragraph(line, style=style)) # Can't use here since Report isn't yet defined at this point #@borrowkwargs(Report, 'xml') def text(self, line, **kwargs): """Add a text string to the report """ if __debug__ and not self in debug.handlers: debug("REP_", "Adding text '%s'" % line.strip()) # we need to convert some of the characters to make it # legal XML line = escape_xml(line) self.xml(line, **kwargs) write = text """Just an alias for .text, so we could simply provide report as a handler for verbose """ # can't do here once again since it needs to conditional on externals # TODO: workaround -- either passing symbolic names or assign # post-class creation #@borrowkwargs(reportlab.platypus.Image, '__init__') def figure(self, fig=None, name=None, savefig_kwargs={}, **kwargs): """Add a figure to the report Parameters ---------- fig : None or str or `figure.Figure` Figure to place into report: `str` is treated as a filename, `Figure` stores it into a file under directory and embeds into the report, and `None` takes the current figure savefig_kwargs : dict Additional keyword arguments to provide savefig with (e.g. dpi) **kwargs Passed to :class:`reportlab.platypus.Image` constructor """ if externals.exists('pylab', raise_=True): import pylab as pl figure = pl.matplotlib.figure if fig is None: fig = pl.gcf() if isinstance(fig, figure.Figure): # Create directory if needed if not (os.path.exists(self._filename) and os.path.isdir(self._filename)): os.makedirs(self._filename) # Figure out the name for image self.__nfigures += 1 if name is None: name = 'Figure#' name = name.replace('#', str(self.__nfigures)) # Save image fig_filename = os.path.join(self._filename, '%s.%s' % (name, self.fig_ext)) if __debug__ and not self in debug.handlers: debug("REP_", "Saving figure '%s' into %s" % (fig, fig_filename)) fig.savefig(fig_filename, **savefig_kwargs) # adjust fig to the one to be included fig = fig_filename if __debug__ and not self in debug.handlers: debug("REP", "Adding figure '%s'" % fig) im = rplp.Image(fig, **kwargs) # If the inherent or provided width/height are too large -- shrink down imsize = (im.drawWidth, im.drawHeight) # Reduce the size if necessary so reportlab does not puke later on r = [float(d)/m for d,m in zip(imsize, self.pagesize)] maxr = max(r) if maxr > 1.0: if __debug__ and not self in debug.handlers: debug("REP_", "Shrinking figure by %.3g" % maxr) im.drawWidth /= maxr im.drawHeight /= maxr self._story.append(im) def figures(self, *args, **kwargs): """Adds all present figures at once If called twice, it might add the same figure multiple times, so make sure to close all previous figures if you use figures() multiple times """ if externals.exists('pylab', raise_=True): import pylab as pl figs = pl.matplotlib._pylab_helpers.Gcf.figs if __debug__ and not self in debug.handlers: debug('REP', "Saving all %d present figures" % len(figs)) for fid, f in figs.iteritems(): self.figure(f.canvas.figure, *args, **kwargs) @property def __flowbreak(self): return [rplp.Spacer(1, 0.2*rplu.inch), rplp.Paragraph("-" * 150, self.style), rplp.Spacer(1, 0.2*rplu.inch)] def flowbreak(self): """Just a marker for the break of the flow """ if __debug__ and not self in debug.handlers: debug("REP", "Adding flowbreak") self._story.append(self.__flowbreak) ## def __del__(self): ## """Store report upon deletion ## """ ## if __debug__ and not self in debug.handlers: ## debug("REP", "Report is being deleted. Storing") ## self.save() def save(self, add_preamble=True): """Saves PDF Parameters ---------- add_preamble : bool Either to add preamble containing title/date/author information """ if self.title is None: title = self.name + " report" else: title = self.title pageinfo = self.name + " data" ##REF: Name was automagically refactored def my_first_page(canvas, doc): canvas.saveState() canvas.setFont(self.font, 16) canvas.drawCentredString(self.pagesize[0]/2.0, self.pagesize[1]-108, title) canvas.setFont(self.font, 9) canvas.drawString(rplu.inch, 0.75 * rplu.inch, "First Page / %s" % pageinfo) canvas.restoreState() ##REF: Name was automagically refactored def my_later_pages(canvas, doc): canvas.saveState() canvas.setFont(self.font, 9) canvas.drawString(rplu.inch, 0.75 * rplu.inch, "Page %d %s" % (doc.page, pageinfo)) canvas.restoreState() filename = self._filename + ".pdf" doc = rplp.SimpleDocTemplate(filename) story = self._story if add_preamble: story = self.__preamble + story if __debug__ and not self in debug.handlers: debug("REP", "Saving the report into %s" % filename) doc.build(story, onFirstPage=my_first_page, onLaterPages=my_later_pages) pymvpa2-2.2.0/mvpa2/base/report_dummy.py000066400000000000000000000021231202542755000201500ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Dummy report class, to just be there in case if reportlab is not available. """ __docformat__ = 'restructuredtext' from mvpa2.base import warning if __debug__: from mvpa2.base import debug def _dummy(*args, **kwargs): pass class Report(object): """Dummy report class which does nothing but complains if used """ def __init__(self, *args, **kwargs): """Initialize dummy report """ warning("You are using DummyReport - no action will be taken. " "Please install reportlab to enjoy reporting facility " "within PyMVPA") def __getattribute__(self, index): """ """ # returns a dummy function return _dummy pymvpa2-2.2.0/mvpa2/base/state.py000066400000000000000000001106231202542755000165470ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Classes to control and store state information. It was devised to provide conditional storage """ _DEV_DOC = """ TODO: + Use %r instead of %s in repr for ClassWithCollections Replaced few %s's... might be fixed + Check why __doc__ is not set in kernels Seems to be there now... - puke if *args and **kwargs are provided and exceed necessary number + for Parameter add ability to make it 'final'/read-only + repr(instance.params) contains only default value -- not current or set in the constructor... not good Now if value is not default -- would be present ? check/possible assure order of parameters/ca to be as listed in the constructor There is _instance_index (could be set with 'index' parameter in Parameter). ATM it is used in documentation to list them in original order. """ # XXX: MH: The use of `index` as variable name confuses me. IMHO `index` refers # to a position in a container (i.e. list access). However, in this # file it is mostly used in the context of a `key` for dictionary # access. Can we refactor that? # YOH: good point -- doing so... also we need to document somewhere that # names of Collectables are actually the keys in Collections __docformat__ = 'restructuredtext' from mvpa2.base.types import is_sequence_type import mvpa2.support.copy as copy from textwrap import TextWrapper # Although not used here -- included into interface from mvpa2.misc.exceptions import UnknownStateError from mvpa2.base.attributes import IndexedCollectable, ConditionalAttribute from mvpa2.base.dochelpers import enhanced_doc_string, borrowdoc, _repr_attrs, \ get_docstring_split from mvpa2.base import externals # XXX local rename is due but later on from mvpa2.base.collections import Collection as BaseCollection if __debug__: from mvpa2.base import debug # XXX # To debug references on top level -- useful to keep around for now, # don't remove until refactoring is complete import sys _debug_references = 'ATTRREFER' in debug.active _debug_shits = [] # remember all to don't complaint twice import traceback _in_ipython = externals.exists('running ipython env') # Separators around definitions, needed for ReST, but bogus for # interactive sessions _def_sep = ('`', '')[int(_in_ipython)] _object_getattribute = object.__getattribute__ _object_setattr = object.__setattr__ ################################################################### # Collections # # TODO: # - refactor: use base.collections and unify this to that # - minimize interface class Collection(BaseCollection): """Container of some IndexedCollectables. XXX Seems to be not used and duplicating functionality: `listing` (thus `listing` property) """ def __init__(self, items=None, name=None): """Initialize the Collection Parameters ---------- items : dict of IndexedCollectable's items to initialize with name : str name of the collection (as seen in the owner, e.g. 'ca') """ # first set all stuff to nothing and later on charge it # this is important, since some of the stuff below relies in the # defaults self.name = name super(Collection, self).__init__(items) def __reduce__(self): #bcr = BaseCollection.__reduce__(self) res = (self.__class__, (self.items(), self.name,)) #if __debug__ and 'COL_RED' in debug.active: # debug('COL_RED', 'Returning %s for %s' % (res, self)) return res @borrowdoc(BaseCollection) def copy(self, *args, **kwargs): # Create a generic copy of the collection anew = super(Collection, self).copy(*args, **kwargs) anew.name = self.name return anew def __str__(self): num = len(self) if __debug__ and "ST" in debug.active: maxnumber = 1000 # I guess all else: maxnumber = 4 if self.name is not None: res = self.name else: res = "" res += "{" for i in xrange(min(num, maxnumber)): if i > 0: res += " " res += "%s" % str(self.values()[i]) if len(self) > maxnumber: res += "..." res += "}" return res def _cls_repr(self): """Collection specific part of __repr__ for a class containing it, ie a part of __repr__ for the owner object Returns ------- list list of items to be appended within __repr__ after a .join() """ # XXX For now we do not expect any pure non-specialized # collection , thus just override in derived classes raise NotImplementedError, "Class %s should override _cls_repr" \ % self.__class__.__name__ def _is_initializable(self, key): """Checks if key could be assigned within collection via _initialize Returns ------- bool value for a given `key` It is to facilitate dynamic assignment of collections' items within derived classes' __init__ depending on the present collections in the class. """ # XXX Each collection has to provide what indexes it allows # to be set within constructor. Custom handling of some # arguments (like (dis|en)able_ca) is to be performed # in _initialize # raise NotImplementedError, \ # "Class %s should override _is_initializable" \ # % self.__class__.__name__ # YYY lets just check if it is in the keys return key in self.keys() def _initialize(self, key, value): """Initialize `key` (no check performed) with `value` """ # by default we just set corresponding value self[key]._set(value, init=True) def __repr__(self): # do not include the owner arg, since that will most likely # cause recursions when the collection it self is included # into the repr() of the ClassWithCollections instance return "%s(items=%s, name=%s)" \ % (self.__class__.__name__, repr(self.values()), repr(self.name)) items_s = "" sep = "" for item in self: try: itemvalue = "%r" % (self[item].value,) if len(itemvalue)>50: itemvalue = itemvalue[:10] + '...' + itemvalue[-10:] items_s += "%s'%s':%s" % (sep, item, itemvalue) sep = ', ' except: pass if items_s != "": s += "items={%s}" % items_s s += ")" return s def is_set(self, key=None): """If item (or any in the present or listed) was set Parameters ---------- key : None or str or list of str What items to check if they were set in the collection """ if not (key is None): if isinstance(key, basestring): return self[key].is_set else: items = key # assume that we got some list else: items = self # go through all the items for key in items: if self[key].is_set: return True return False def which_set(self): """Return list of keys which were set""" result = [] # go through all members and if any is_set -- return True for key, v in self.iteritems(): if v.is_set: result.append(key) return result def _action(self, key, func, missingok=False, **kwargs): """Run specific func either on a single item or on all of them Parameters ---------- key : str Name of the conditional attribute func Function (not bound) to call given an item, and **kwargs missingok : bool If True - do not complain about wrong key """ if isinstance(key, basestring): if key.upper() == 'ALL': for key_ in self: self._action(key_, func, missingok=missingok, **kwargs) else: try: func(self[key], **kwargs) except: if missingok: return raise elif is_sequence_type(key): for item in key: self._action(item, func, missingok=missingok, **kwargs) else: raise ValueError, \ "Don't know how to handle variable given by %s" % key def reset(self, key=None): """Reset the conditional attribute defined by `key`""" if not key is None: keys = [ key ] else: keys = self.keys() if len(self): for key in keys: # XXX Check if that works as desired self._action(key, self.values()[0].__class__.reset, missingok=False) # XXX RF: not used anywhere / myself -- hence not worth it? @property def listing(self): """Return a list of registered ca along with the documentation""" # lets assure consistent litsting order items_ = self.items() items_.sort() return [ "%s%s%s: %s" % (_def_sep, str(x[1]), _def_sep, x[1].__doc__) for x in items_ ] class ParameterCollection(Collection): """Container of Parameters for a stateful object. """ # def __init__(self, items=None, name=None): # """Initialize the conditional attributes of a derived class # # Parameters # ---------- # items : dict # dictionary of ca # """ # Collection.__init__(self, items, name) # def _cls_repr(self): """Part of __repr__ for the owner object """ prefixes = [] for k in self.keys(): # list only params with not default values if self[k].is_default: continue prefixes.append("%s=%r" % (k, self[k].value)) return prefixes def reset_value(self, key, missingok=False): """Reset all parameters to default values""" from param import Parameter self._action(key, Parameter.reset_value, missingok=False) class ConditionalAttributesCollection(Collection): """Container of ConditionalAttributes for a stateful object. :Groups: - `Public Access Functions`: `has_key`, `is_enabled`, `is_active` - `Access Implementors`: `listing`, `names`, `_get_enabled` - `Mutators`: `__init__`, `enable`, `disable`, `_set_enabled` - `R/O Properties`: `listing`, `names`, `items` - `R/W Properties`: `enabled` """ def __init__(self, items=None, name=None): """Initialize the conditional attributes of a derived class Parameters ---------- items : dict dictionary of ca name : str literal description. Usually just attribute name for the collection, e.g. 'ca' """ Collection.__init__(self, items=items, name=name) self.__storedTemporarily = [] """List to contain sets of enabled ca which were enabled temporarily. """ # # XXX TODO: figure out if there is a way to define proper # __copy__'s for a hierarchy of classes. Probably we had # to define __getinitargs__, etc... read more... # #def __copy__(self): def _cls_repr(self): """Part of __repr__ for the owner object """ prefixes = [] for name, invert in ( ('enable', False), ('disable', True) ): ca = self._get_enabled(nondefault=False, invert=invert) if len(ca): prefixes.append("%s_ca=%s" % (name, str(ca))) return prefixes def _is_initializable(self, key): """Checks if key could be assigned within collection via setvalue """ return key in ['enable_ca', 'disable_ca'] def _initialize(self, key, value): if value is None: value = [] if key == 'enable_ca': self.enable(value, missingok=True) elif key == 'disable_ca': self.disable(value) else: raise ValueError, "ConditionalAttributesCollection can accept only enable_ca " \ "and disable_ca arguments for the initialization. " \ "Got %s" % key # XXX RF: used only in meta -- those should become a bit tighter coupled # and .copy / .update should only be used def _copy_ca_(self, fromstate, key=None, deep=False): """Copy known here ca from `fromstate` object into current object Parameters ---------- fromstate : Collection or ClassWithCollections Source ca to copy from key : None or list of str If not to copy all set conditional attributes, key provides selection of what to copy deep : bool Optional control over the way to copy Crafted to overcome a problem mentioned above in the comment and is to be called from __copy__ of derived classes Probably sooner than later will get proper __getstate__, __setstate__ """ # Bad check... doesn't generalize well... # if not issubclass(fromstate.__class__, self.__class__): # raise ValueError, \ # "Class %s is not subclass of %s, " % \ # (fromstate.__class__, self.__class__) + \ # "thus not eligible for _copy_ca_" # TODO: FOR NOW NO TEST! But this beast needs to be fixed... operation = { True: copy.deepcopy, False: copy.copy }[deep] if isinstance(fromstate, ClassWithCollections): fromstate = fromstate.ca if key is None: # copy all set ones for name in fromstate.which_set():#self.keys(): #if fromstate.has_key(name): self[name].value = operation(fromstate[name].value) else: # workaround for supporting py2 and py3 dictionary interface try: has_key = fromstate.has_key except AttributeError: has_key = fromstate.__contains__ for name in key: if has_key(name): self[name].value = operation(fromstate[name].value) def is_enabled(self, key): """Returns `True` if state `key` is enabled""" return key in self and self[key].enabled def is_active(self, key): """Returns `True` if state `key` is known and is enabled""" return self.has_key(key) and self.is_enabled(key) def enable(self, key, value=True, missingok=False): """Enable conditional attribute given in `key`""" self._action(key, ConditionalAttribute._set_enabled, missingok=missingok, value=value) def disable(self, key): """Disable conditional attribute defined by `key` id""" self._action(key, ConditionalAttribute._set_enabled, missingok=False, value=False) # TODO XXX think about some more generic way to grab temporary # snapshot of IndexedCollectables to be restored later on... def change_temporarily(self, enable_ca=None, disable_ca=None, other=None): """Temporarily enable/disable needed ca for computation Enable or disable ca which are enabled in `other` and listed in `enable _ca`. Use `reset_enabled_temporarily` to reset to previous state of enabled. `other` can be a ClassWithCollections object or ConditionalAttributesCollection """ if enable_ca == None: enable_ca = [] if disable_ca == None: disable_ca = [] self.__storedTemporarily.append(self.enabled) other_ = other if isinstance(other, ClassWithCollections): other = other.ca if not other is None: # lets take ca which are enabled in other but not in # self add_enable_ca = list(set(other.enabled).difference( set(enable_ca)).intersection(self.keys())) if len(add_enable_ca)>0: if __debug__: debug("ST", "Adding ca %s from %s to be enabled temporarily " "since they are not enabled in %s", (add_enable_ca, other_, self)) enable_ca += add_enable_ca # Lets go one by one enabling only disabled once... but could be as # simple as self.enable(enable_ca) self.disable(disable_ca) def reset_changed_temporarily(self): """Reset to previousely stored set of enabled ca""" if __debug__: debug("ST", "Resetting to previous set of enabled ca") if len(self.enabled)>0: self.enabled = self.__storedTemporarily.pop() else: raise ValueError("Trying to restore not-stored list of enabled " \ "ca") # XXX probably nondefault logic could be done at places? # =False is used in __repr__ and _svmbase # XXX also may be we need enabled to return a subcollection # with binds to ConditionalAttributes found to be enabled? def _get_enabled(self, nondefault=True, invert=False): """Return list of enabled ca Parameters ---------- nondefault : bool Either to return also ca which are enabled simply by default invert : bool Would invert the meaning, ie would return disabled ca """ if invert: fmatch = lambda y: not self.is_enabled(y) else: fmatch = self.is_enabled if nondefault: ffunc = fmatch else: ffunc = lambda y: fmatch(y) and \ self[y]._defaultenabled != self.is_enabled(y) return [n for n in self.keys() if ffunc(n)] def _set_enabled(self, keys): """Given `keys` make only those in the list enabled It might be handy to store set of enabled ca and then to restore it later on. It can be easily accomplished now:: >>> from mvpa2.base.state import ClassWithCollections, ConditionalAttribute >>> class Blah(ClassWithCollections): ... bleh = ConditionalAttribute(enabled=False, doc='Example') ... >>> blah = Blah() >>> ca_enabled = blah.ca.enabled >>> blah.ca.enabled = ['bleh'] >>> blah.ca.enabled = ca_enabled """ for key in self.keys(): self.enable(key, key in keys) # Properties enabled = property(fget=_get_enabled, fset=_set_enabled) ################################################################## # Base classes (and metaclass) which use collections # # # Helper dictionaries for AttributesCollector # _known_collections = { # Quite a generic one but mostly in classifiers 'ConditionalAttribute': ("ca", ConditionalAttributesCollection), # For classifiers only 'Parameter': ("params", ParameterCollection), 'KernelParameter': ("kernel_params", ParameterCollection), #MH: no magic for datasets # # For datasets # # XXX custom collections needed? # 'SampleAttribute': ("sa", SampleAttributesCollection), # 'FeatureAttribute': ("fa", SampleAttributesCollection), # 'DatasetAttribute': ("dsa", SampleAttributesCollection), } _col2class = dict(_known_collections.values()) """Mapping from collection name into Collection class""" #MH: no magic for datasets #_COLLECTIONS_ORDER = ['sa', 'fa', 'dsa', # 'params', 'kernel_params', 'ca'] _COLLECTIONS_ORDER = ['params', 'kernel_params', 'ca'] class AttributesCollector(type): """Intended to collect and compose collections for any child class of ClassWithCollections """ def __init__(cls, name, bases, dict): """ Parameters ---------- name : str Name of the class bases : iterable Base classes dict : dict Attributes. """ if __debug__: debug( "COLR", "AttributesCollector call for %s.%s, where bases=%s, dict=%s ", (cls, name, bases, dict)) super(AttributesCollector, cls).__init__(name, bases, dict) collections = {} for name, value in dict.iteritems(): if isinstance(value, IndexedCollectable): baseclassname = value.__class__.__name__ col = _known_collections[baseclassname][0] # XXX should we allow to throw exceptions here? if col not in collections: collections[col] = {} collections[col][name] = value # and assign name if not yet was set if value.name is None: value.name = name # !!! We do not keep copy of this attribute static in the class. # Due to below traversal of base classes, we should be # able to construct proper collections even in derived classes delattr(cls, name) # XXX can we first collect parent's ca and then populate with ours? # TODO for base in bases: if hasattr(base, "__class__") and \ base.__class__ == AttributesCollector: # TODO take care about overriding one from super class # for state in base.ca: # if state[0] = newcollections = base._collections_template if len(newcollections) == 0: continue if __debug__: # XXX RF: and "COLR" in debug.active: debug("COLR", "Collect collections %s for %s from %s", (newcollections, cls, base)) for col, collection in newcollections.iteritems(): if col in collections: collections[col].update(collection) else: collections[col] = collection if __debug__: debug("COLR", "Creating ConditionalAttributesCollection template %s " "with collections %s", (cls, collections.keys())) # if there is an explicit if hasattr(cls, "_ATTRIBUTE_COLLECTIONS"): for col in cls._ATTRIBUTE_COLLECTIONS: if not col in _col2class: raise ValueError, \ "Requested collection %s is unknown to collector" % \ col if not col in collections: collections[col] = None # TODO: check on conflict in names of Collections' items! since # otherwise even order is not definite since we use dict for # collections. # XXX should we switch to tuple? for col, colitems in collections.iteritems(): # so far we collected the collection items in a dict, but the new # API requires to pass a _list_ of collectables instead of a dict. # So, whenever there are items, we pass just the values of the dict. # There is no information last, since the keys of the dict are the # name attributes of each collectable in the list. if not colitems is None: collections[col] = _col2class[col](items=colitems.values()) else: collections[col] = _col2class[col]() setattr(cls, "_collections_template", collections) # # Expand documentation for the class based on the listed # parameters an if it is stateful # # TODO -- figure nice way on how to alter __init__ doc directly... textwrapper = TextWrapper(subsequent_indent=" ", initial_indent=" ", width=70) # Parameters paramsdoc = [] paramscols = [] for col in ('params', 'kernel_params'): if col in collections: paramscols.append(col) # lets at least sort the parameters for consistent output col_items = collections[col] iparams = [(v._instance_index, k) for k,v in col_items.iteritems()] iparams.sort() paramsdoc += [(col_items[iparam[1]].name, col_items[iparam[1]]._paramdoc()) for iparam in iparams] # Parameters collection could be taked hash of to decide if # any were changed? XXX may be not needed at all? setattr(cls, "_paramscols", paramscols) # States doc cadoc = "" if 'ca' in collections: paramsdoc += [ ('enable_ca', "enable_ca : None or list of str\n " "Names of the conditional attributes which should " "be enabled in addition\n to the default ones"), ('disable_ca', "disable_ca : None or list of str\n " "Names of the conditional attributes which should " "be disabled""")] if len(collections['ca']): cadoc += '\n'.join(['* ' + x for x in collections['ca'].listing]) cadoc += "\n\n(Conditional attributes enabled by default suffixed with `+`)" if __debug__: debug("COLR", "Assigning __cadoc to be %s", (cadoc,)) setattr(cls, "_cadoc", cadoc) if paramsdoc != "": if __debug__ and 'COLR' in debug.active: debug("COLR", "Assigning __paramsdoc to be %s", (paramsdoc,)) setattr(cls, "_paramsdoc", paramsdoc) if len(paramsdoc) or cadoc != "": cls.__doc__ = enhanced_doc_string(cls, *bases) class ClassWithCollections(object): """Base class for objects which contain any known collection Classes inherited from this class gain ability to access collections and their items as simple attributes. Access to collection items "internals" is done via attribute and interface of a corresponding `Collection`. """ _DEV__doc__ = """ TODO: rename 'descr'? -- it should simply be 'doc' -- no need to drag classes docstring imho. """ __metaclass__ = AttributesCollector def __new__(cls, *args, **kwargs): """Instantiate ClassWithCollections object """ self = super(ClassWithCollections, cls).__new__(cls) s__dict__ = self.__dict__ # init variable # XXX: Added as pylint complained (rightfully) -- not sure if false # is the proper default self.__params_set = False # need to check to avoid override of enabled ca in the case # of multiple inheritance, like both ClassWithCollectionsl and # Harvestable if '_collections' not in s__dict__: s__class__ = self.__class__ collections = copy.deepcopy(s__class__._collections_template) s__dict__['_collections'] = collections s__dict__['_known_attribs'] = {} """Dictionary to contain 'links' to the collections from each known attribute. Is used to gain some speed up in lookup within __getattribute__ and __setattr__ """ # Assign owner to all collections for col, collection in collections.iteritems(): if col in s__dict__: raise ValueError, \ "Object %s has already attribute %s" % \ (self, col) s__dict__[col] = collection collection.name = col self.__params_set = False if __debug__: descr = kwargs.get('descr', None) debug("COL", "ClassWithCollections.__new__ was done " "for %s#%s with descr=%s", (s__class__.__name__, id(self), descr)) return self def __init__(self, descr=None, **kwargs): """Initialize ClassWithCollections object Parameters ---------- descr : str Description of the instance """ # Note: __params_set was initialized in __new__ if not self.__params_set: self.__descr = descr """Set humane description for the object""" # To avoid double initialization in case of multiple inheritance self.__params_set = True collections = self._collections # Assign attributes values if they are given among # **kwargs for arg, argument in kwargs.items(): isset = False for collection in collections.itervalues(): if collection._is_initializable(arg): collection._initialize(arg, argument) isset = True break if isset: _ = kwargs.pop(arg) else: known_params = reduce( lambda x,y:x+y, [x.keys() for x in collections.itervalues() if not isinstance(x, ConditionalAttributesCollection) ], []) _, kwargs_list, _ = get_docstring_split(self.__init__) known_params = sorted(known_params + [x[0] for x in kwargs_list]) raise TypeError( "Unexpected keyword argument %s=%s for %s." % (arg, argument, self) + "\n\tValid parameters are: %s" % ', '.join(known_params)) ## Initialize other base classes ## commented out since it seems to be of no use for now #if init_classes is not None: # # return back stateful arguments since they might be # # processed by underlying classes # kwargs.update(kwargs_stateful) # for cls in init_classes: # cls.__init__(self, **kwargs) #else: # if len(kwargs)>0: # known_params = reduce(lambda x, y: x + y, \ # [x.keys() for x in collections], # []) # raise TypeError, \ # "Unknown parameters %s for %s." % (kwargs.keys(), # self) \ # + " Valid parameters are %s" % known_params if __debug__: debug("COL", "ClassWithCollections.__init__ was done " "for %s#%s with descr=%s", (self.__class__.__name__, id(self), descr)) #__doc__ = enhanced_doc_string('ClassWithCollections', locals()) if __debug__ and _debug_references: def __debug_references_call(self, method, key): """Helper for debugging location of the call """ s_dict = _object_getattribute(self, '__dict__') known_attribs = s_dict['_known_attribs'] if key in known_attribs: clsstr = str(self.__class__) # Skip some False positives if 'mvpa2.datasets' in clsstr and 'Dataset' in clsstr and \ (key in ['targets', 'chunks', 'samples', 'mapper']): return colname = known_attribs[key] # figure out and report invocation location ftb = traceback.extract_stack(limit=4)[-3] shit = '\n%s:%d:[%s %s.%s]: %s\n' % \ (ftb[:2] + (method, colname, key) + (ftb[3],)) if not (shit in _debug_shits): _debug_shits.append(shit) sys.stderr.write(shit) def __getattribute__(self, key): # return all private ones first since smth like __dict__ might be # queried by copy before instance is __init__ed if key == '': raise AttributeError, "Silly to request attribute ''" if key[0] == '_': return _object_getattribute(self, key) s_dict = _object_getattribute(self, '__dict__') # check if it is a known collection collections = s_dict['_collections'] if key in collections: return collections[key] # MH: No implicite outbreak of collection items into the namespace of # the parent class ## check if it is a part of any collection #known_attribs = s_dict['_known_attribs'] #if key in known_attribs: # return collections[known_attribs[key]].getvalue(key) # Report the invocation location if applicable self.__debug_references_call('get', key) # just a generic return return _object_getattribute(self, key) def __setattr__(self, key, value): if key == '': raise AttributeError, "Silly to set attribute ''" if key[0] == '_': return _object_setattr(self, key, value) if __debug__ and _debug_references: # Report the invocation location if applicable self.__debug_references_call('set', key) ## YOH: if we are to disable access at instance level -- do it in ## set as well ;) ## ## # Check if a part of a collection, and set appropriately ## s_dict = _object_getattribute(self, '__dict__') ## known_attribs = s_dict['_known_attribs'] ## if key in known_attribs: ## collections = s_dict['_collections'] ## return collections[known_attribs[key]].setvalue(key, value) # Generic setattr return _object_setattr(self, key, value) # XXX not sure if we shouldn't implement anything else... def reset(self): for collection in self._collections.values(): collection.reset() def __str__(self): s = "%s:" % (self.__class__.__name__) if self.__descr is not None: s += "/%s " % self.__descr if hasattr(self, "_collections"): for col, collection in self._collections.iteritems(): s += " %d %s:%s" % (len(collection), col, str(collection)) return s def __repr__(self, prefixes=None, fullname=False): """String definition of the object of ClassWithCollections object Parameters ---------- prefixes : list of str What other prefixes to prepend to list of arguments fullname : bool Either to include full name of the module """ prefixes = prefixes or [] prefixes = prefixes[:] # copy list id_str = "" module_str = "" if __debug__: if 'MODULE_IN_REPR' in debug.active: fullname = True if 'ID_IN_REPR' in debug.active: id_str = '#%r' % id(self) if fullname: modulename = '%s' % self.__class__.__module__ if modulename != "__main__": module_str = "%s." % modulename # Collections' attributes collections = self._collections # we want them in this particular order for col in _COLLECTIONS_ORDER: collection = collections.get(col, None) if collection is None: continue prefixes += collection._cls_repr() # Description if present prefixes += _repr_attrs(self, ['descr']) out = "%s%s(%s)%s" % (module_str, self.__class__.__name__, ', '.join(prefixes), id_str) # To possibly debug mass repr/str-fication # print str(self), ' REPR: ', out return out descr = property(lambda self: self.__descr, doc="Description of the object if any") pymvpa2-2.2.0/mvpa2/base/types.py000066400000000000000000000041721202542755000165740ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Things concerned with types and type-checking in PyMVPA""" import sys import numpy as np def is_datasetlike(obj): """Check if an object looks like a Dataset.""" if hasattr(obj, 'samples') and \ hasattr(obj, 'sa') and \ hasattr(obj, 'fa') and \ hasattr(obj, 'a'): return True return False def accepts_dataset_as_samples(fx): """Decorator to extract samples from Datasets. Little helper to allow methods to be written for plain data (if they don't need information from a Dataset), but at the same time also accept whole Datasets as input. """ def extract_samples(obj, data): if is_datasetlike(data): return fx(obj, data.samples) else: return fx(obj, data) return extract_samples def asobjarray(x): """Generates numpy.ndarray with dtype object from an iterable Is needed to assure object dtype, so first empty array of dtype=object needs to be constructed and then only items to be assigned. Parameters ---------- x : list or tuple or ndarray """ res = np.empty(len(x), dtype=object) res[:] = x return res # compatibility layer for Python3 if sys.version_info[0] < 3: from operator import isSequenceType as is_sequence_type def as_char(x): """Identity mapping in python2""" return x else: def is_sequence_type(inst): """Return True if an instance is of an iterable type Verified by wrapping with iter() call """ try: _ = iter(inst) return True except: return False import codecs def as_char(x): """Return character representation for a unicode symbol""" return codecs.latin_1_encode(x)[0] pymvpa2-2.2.0/mvpa2/base/verbosity.py000066400000000000000000000532321202542755000174570ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Verbose output and debugging facility Examples: from verbosity import verbose, debug; debug.active = [1,2,3]; debug(1, "blah") """ __docformat__ = 'restructuredtext' from sys import stdout, stderr # GOALS # any logger should be able # to log into a file or stdout/stderr # provide ability to log with/without a new line at the end # # debug logger should be able # to log sets of debug statements # add/remove debug setid items # give verbose description about registered debugset items class Logger(object): """Base class to provide logging """ def __init__(self, handlers=None): """Initialize the logger with a set of handlers to use for output Each hanlder must have write() method implemented """ if handlers == None: handlers = [stdout] self.__close_handlers = [] self.__handlers = [] # pylint friendliness self._set_handlers(handlers) self.__lfprev = True self.__crprev = 0 # number of symbols in previous cr-ed def __del__(self): self._close_opened_handlers() ##REF: Name was automagically refactored def _set_handlers(self, handlers): """Set list of handlers for the log. A handler can be opened files, stdout, stderr, or a string, which will be considered a filename to be opened for writing """ handlers_ = [] self._close_opened_handlers() for handler in handlers: if isinstance(handler, basestring): try: handler = {'stdout' : stdout, 'stderr' : stderr}[handler.lower()] except: try: handler = open(handler, 'w') self.__close_handlers.append(handler) except: raise RuntimeError, \ "Cannot open file %s for writing by the logger" \ % handler handlers_.append(handler) self.__handlers = handlers_ ##REF: Name was automagically refactored def _close_opened_handlers(self): """Close opened handlers (such as opened logfiles """ for handler in self.__close_handlers: handler.close() ##REF: Name was automagically refactored def _get_handlers(self): """Return active handlers """ return self.__handlers def __call__(self, msg, args=None, lf=True, cr=False, **kwargs): """Write msg to each of the handlers. It can append a newline (lf = Line Feed) or return to the beginning before output and to take care about cleaning previous message if present it appends a newline (lf = Line Feed) since most commonly each call is a separate message """ if args is not None: msg = msg % args if 'msgargs' in kwargs: msg = msg % kwargs['msgargs'] if cr: msg_ = "" if self.__crprev > 0: # wipe out older line to make sure to see no ghosts msg_ = "\r%s" % (" "*self.__crprev) msg_ += "\r" + msg self.__crprev = len(msg) msg = msg_ # since it makes no sense this days for cr and lf, # override lf lf = False else: self.__crprev += len(msg) if lf: msg = msg + "\n" self.__crprev = 0 # nothing to clear for handler in self.__handlers: try: handler.write(msg) except: print "Failed writing on handler %s" % handler raise try: handler.flush() except: # it might be not implemented.. pass self.__lfprev = lf handlers = property(fget=_get_handlers, fset=_set_handlers) lfprev = property(fget=lambda self:self.__lfprev) class LevelLogger(Logger): """Logger not to log anything with a level smaller than specified. """ def __init__(self, level=0, indent=" ", *args, **kwargs): """ Parameters ---------- level : int, optional Level to consider be active. indent : str, optional String to use for indentation. """ Logger.__init__(self, *args, **kwargs) self.__level = level # damn pylint ;-) self.__indent = indent self._set_level(level) self._set_indent(indent) ##REF: Name was automagically refactored def _set_level(self, level): """Set logging level """ if __debug__: try: from mvpa2.base import debug debug('VERBOSE', 'Setting verbosity to %r from %r', (self.__level, level)) except: pass ilevel = int(level) if ilevel < 0: raise ValueError, \ "Negative verbosity levels (got %d) are not supported" \ % ilevel self.__level = ilevel ##REF: Name was automagically refactored def _set_indent(self, indent): """Either to indent the lines based on message log level""" self.__indent = "%s" % indent def __call__(self, level, msg, *args, **kwargs): """Write msg and indent using self.indent it if it was requested. It appends a newline since most commonly each call is a separate message """ if level <= self.level: if self.lfprev and self.indent: # indent if previous line ended with newline msg = self.indent*level + msg Logger.__call__(self, msg, *args, **kwargs) level = property(fget=lambda self: self.__level, fset=_set_level) indent = property(fget=lambda self: self.__indent, fset=_set_indent) class OnceLogger(Logger): """Logger which prints a message for a given ID just once. It could be used for one-time warning to don't overfill the output with useless repeatative messages. """ def __init__(self, *args, **kwargs): """Define once logger. """ Logger.__init__(self, *args, **kwargs) self._known = {} def __call__(self, ident, msg, count=1, *args, **kwargs): """Write `msg` if `ident` occured less than `count` times by now. """ if ident not in self._known: self._known[ident] = 0 if count < 0 or self._known[ident] < count: self._known[ident] += 1 Logger.__call__(self, msg, *args, **kwargs) class SetLogger(Logger): """Logger which prints based on defined sets identified by Id. """ def __init__(self, register=None, active=None, printsetid=True, *args, **kwargs): """ Parameters ---------- register : dict or None What Ids are to be known. Each item dictionary contains consists of concise key and a description as the value. active : iterable What Ids to consider active upon initialization. printsetid : bool, optional Either to prefix each line with the target Id of a set in which the line was printed to (default behavior). """ if register is None: register = {} if active == None: active = [] Logger.__init__(self, *args, **kwargs) self.__printsetid = printsetid self.__registered = register # all "registered" sets descriptions # which to output... pointless since __registered self._set_active(active) self._set_printsetid(printsetid) ##REF: Name was automagically refactored def _set_active(self, active): """Set active logging set """ # just unique entries... we could have simply stored Set I guess, # but then smth like debug.active += ["BLAH"] would not work from mvpa2.base import verbose self.__active = [] registered_keys = self.__registered.keys() for item in list(set(active)): if item == '': continue if isinstance(item, basestring): if item in ['?', 'list', 'help']: self.print_registered(detailed=(item != '?')) raise SystemExit(0) if item.upper() == "ALL": verbose(2, "Enabling all registered debug handlers") self.__active = registered_keys break # try to match item as it is regexp regexp_str = "^%s$" % item try: regexp = re.compile(regexp_str) except: raise ValueError, \ "Unable to create regular expression out of %s" % item matching_keys = filter(regexp.match, registered_keys) toactivate = matching_keys if len(toactivate) == 0: ids = self.registered.keys() ids.sort() raise ValueError, \ "Unknown debug ID '%s' was asked to become active," \ " or regular expression '%s' did not get any match" \ " among known ids: %s" \ % (item, regexp_str, ids) else: toactivate = [item] # Lets check if asked items are known for item_ in toactivate: if not (item_ in registered_keys): raise ValueError, \ "Unknown debug ID %s was asked to become active" \ % item_ self.__active += toactivate self.__active = list(set(self.__active)) # select just unique ones self.__maxstrlength = max([len(str(x)) for x in self.__active] + [0]) if len(self.__active): verbose(2, "Enabling debug handlers: %s" % `self.__active`) ##REF: Name was automagically refactored def _set_printsetid(self, printsetid): """Either to print set Id at each line""" self.__printsetid = printsetid def __call__(self, setid, msg, *args, **kwargs): """ Write msg It appends a newline since most commonly each call is a separate message """ if setid in self.__active: if len(msg)>0 and self.__printsetid: msg = "[%%-%ds] " % self.__maxstrlength % (setid) + msg Logger.__call__(self, msg, *args, **kwargs) def register(self, setid, description): """ "Register" a new setid with a given description for easy finding """ if setid in self.__registered: raise ValueError, \ "Setid %s is already known with description '%s'" % \ ( `setid`, self.__registered[setid] ) self.__registered[setid] = description ##REF: Name was automagically refactored def set_active_from_string(self, value): """Given a string listing registered(?) setids, make then active """ # somewhat evil but works since verbose must be initiated # by now self.active = value.split(",") def print_registered(self, detailed=True): print "Registered debug entries: ", kd = self.registered rks = sorted(kd.keys()) maxl = max([len(k) for k in rks]) if not detailed: # short list print ', '.join(rks) else: print for k in rks: print '%%%ds %%s' % maxl % (k, kd[k]) printsetid = property(fget=lambda self: self.__printsetid, \ fset=_set_printsetid) active = property(fget=lambda self: self.__active, fset=_set_active) registered = property(fget=lambda self: self.__registered) if __debug__: import os, re import traceback import time from os import getpid from os.path import basename, dirname __pymvpa_pid__ = getpid() def parse_status(field='VmSize', value_only=False): """Return stat information on current process. Usually it is needed to know where the memory is gone, that is why VmSize is the default for the field to spit out TODO: Spit out multiple fields. Use some better way than parsing proc """ regex = re.compile('^%s:' % field) match = None try: for l in open('/proc/%d/status' % __pymvpa_pid__): if regex.match(l): match = l.strip() break if match: match = re.sub('[ \t]+', ' ', match) except IOError: pass if match and value_only: match = match.split(':', 1)[1].lstrip() return match def get_vmem_from_status(): """Return a string summary about utilization of virtual memory Deprecated implementation which relied on parsing proc/PID/status """ rss, vms = [parse_status(field=x, value_only=True) for x in ['VmRSS', 'VmSize']] if rss[-3:] == vms[-3:]: # the same units rss = rss[:-3] # strip from rss return "RSS/VMS: %s/%s" % (rss, vms) try: # we prefer to use psutil if available # and let's stay away from "externals" module for now # Note: importing as __Process so it does not get # 'queried' by autodoc leading to an exception # while being unable to get values for the properties from psutil import Process as __Process __pymvpa_process__ = __Process(__pymvpa_pid__) def get_vmem(): """Return a string summary about utilization of virtual memory Generic implementation using psutil """ mi = __pymvpa_process__.get_memory_info() # in later versions of psutil mi is a named tuple. # but that is not the case on Debian squeeze with psutil 0.1.3 rss = mi[0]/1024 vms = mi[1]/1024 return "RSS/VMS: %d/%d kB" % (rss, vms) except ImportError: get_vmem = get_vmem_from_status def mbasename(s): """Custom function to include directory name if filename is too common Also strip .py at the end """ base = basename(s) if base.endswith('.py'): base = base[:-3] if base in set(['base', '__init__']): base = basename(dirname(s)) + '.' + base return base class TraceBack(object): """Customized traceback to be included in debug messages """ def __init__(self, collide=False): """Initialize TrackBack metric Parameters ---------- collide : bool if True then prefix common with previous invocation gets replaced with ... """ self.__prev = "" self.__collide = collide def __call__(self): ftb = traceback.extract_stack(limit=100)[:-2] entries = [[mbasename(x[0]), str(x[1])] for x in ftb] entries = [ e for e in entries if e[0] != 'unittest' ] # lets make it more consize entries_out = [entries[0]] for entry in entries[1:]: if entry[0] == entries_out[-1][0]: entries_out[-1][1] += ',%s' % entry[1] else: entries_out.append(entry) sftb = '>'.join(['%s:%s' % (mbasename(x[0]), x[1]) for x in entries_out]) if self.__collide: # lets remove part which is common with previous invocation prev_next = sftb common_prefix = os.path.commonprefix((self.__prev, sftb)) common_prefix2 = re.sub('>[^>]*$', '', common_prefix) if common_prefix2 != "": sftb = '...' + sftb[len(common_prefix2):] self.__prev = prev_next return sftb class RelativeTime(object): """Simple helper class to provide relative time it took from previous invocation""" def __init__(self, format="%3.3f sec"): """ Parameters ---------- format : str String format to use for reporting time. """ self.__prev = None self.__format = format def __call__(self): dt = 0.0 ct = time.time() if not self.__prev is None: dt = ct - self.__prev self.__prev = ct return self.__format % dt class DebugLogger(SetLogger): """ Logger for debugging purposes. Expands SetLogger with ability to print some interesting information (named Metric... XXX) about current process at each debug printout """ _known_metrics = { # TODO: make up Windows-friendly version or pure Python platform # independent version (probably just make use of psutil) 'vmem' : get_vmem, 'pid' : getpid, # lambda : parse_status(field='Pid'), 'asctime' : time.asctime, 'tb' : TraceBack(), 'tbc' : TraceBack(collide=True), } def __init__(self, metrics=None, offsetbydepth=True, *args, **kwargs): """ Parameters ---------- metrics : iterable of (func or str) or None What metrics (functions) to be reported. If item is a string, it is matched against `_known_metrics` keys. offsetbydepth : bool, optional Either to offset lines depending on backtrace depth (default behavior). *args, **kwargs Passed to SetLogger initialization XXX """ if metrics == None: metrics = [] SetLogger.__init__(self, *args, **kwargs) self.__metrics = [] self._offsetbydepth = offsetbydepth self._reltimer = RelativeTime() self._known_metrics = DebugLogger._known_metrics self._known_metrics['reltime'] = self._reltimer for metric in metrics: self._registerMetric(metric) ##REF: Name was automagically refactored def register_metric(self, func): """Register some metric to report func can be either a function call or a string which should correspond to known metrics """ if isinstance(func, basestring): if func in ['all', 'ALL']: func = self._known_metrics.keys() if isinstance(func, basestring): if func in DebugLogger._known_metrics: func = DebugLogger._known_metrics[func] else: if func in ['?', 'list', 'help']: print 'Known debug metrics: ', \ ', '.join(DebugLogger._known_metrics.keys()) raise SystemExit(0) else: raise ValueError, \ "Unknown name %s for metric in DebugLogger" % \ func + " Known metrics are " + \ `DebugLogger._known_metrics.keys()` elif isinstance(func, list): self.__metrics = [] # reset for item in func: self.register_metric(item) return if not func in self.__metrics: try: from mvpa2.base import debug debug("DBG", "Registering metric %s" % func) self.__metrics.append(func) except: pass def __call__(self, setid, msg, *args, **kwargs): if setid not in self.registered: raise ValueError, "Not registered debug ID %s" % setid if not setid in self.active: # don't even compute the metrics, since they might # be statefull as RelativeTime return msg_ = ' / '.join([str(x()) for x in self.__metrics]) if len(msg_)>0: msg_ = "{%s}" % msg_ if len(msg) > 0: # determine blank offset using backstacktrace if self._offsetbydepth: level = len(traceback.extract_stack())-2 else: level = 1 if len(msg)>250 and 'DBG' in self.active and not setid.endswith('_TB'): tb = traceback.extract_stack(limit=2) msg += " !!!2LONG!!!. From %s" % str(tb[0]) msg = "DBG%s:%s%s" % (msg_, " "*level, msg) SetLogger.__call__(self, setid, msg, *args, **kwargs) else: msg = msg_ Logger.__call__(self, msg, *args, **kwargs) ##REF: Name was automagically refactored def _set_offset_by_depth(self, b): self._offsetbydepth = b offsetbydepth = property(fget=lambda x:x._offsetbydepth, fset=_set_offset_by_depth) metrics = property(fget=lambda x:x.__metrics, fset=register_metric) pymvpa2-2.2.0/mvpa2/clfs/000077500000000000000000000000001202542755000150675ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/clfs/__init__.py000066400000000000000000000017041202542755000172020ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for PyMVPA classifiers Module Organization =================== mvpa2.clfs module contains various classifiers :group Base: base :group Meta Classifiers: meta :group Specific Implementations: knn svm _svmbase plr ridge smlr libsmlrc gpr blr :group External Interfaces: lars libsvmc sg :group Utilities: transerror model_selector stats kernel distance :group Warehouse of Classifiers: warehouse """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.clfs') if __debug__: debug('INIT', 'mvpa2.clfs end') pymvpa2-2.2.0/mvpa2/clfs/_svmbase.py000066400000000000000000000367411202542755000172530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Common to all SVM implementations functionality. For internal use only""" __docformat__ = 'restructuredtext' import numpy as np import textwrap from mvpa2.support.copy import deepcopy from mvpa2.base import warning from mvpa2.base.types import is_sequence_type from mvpa2.kernels.base import Kernel from mvpa2.base.dochelpers import handle_docstring, _rst, _rst_section, \ _rst_indentstr from mvpa2.clfs.base import Classifier from mvpa2.base.param import Parameter if __debug__: from mvpa2.base import debug class _SVM(Classifier): """Support Vector Machine Classifier. Base class for all external SVM implementations. """ """ Derived classes should define: * _KERNELS: map(dict) should define assignment to a tuple containing implementation kernel type, list of parameters adherent to the kernel, and sensitivity analyzer e.g.:: _KERNELS = { 'linear': (shogun.Kernel.LinearKernel, (), LinearSVMWeights), 'rbf' : (shogun.Kernel.GaussianKernel, ('gamma',), None), ... } * _KNOWN_IMPLEMENTATIONS: map(dict) should define assignment to a tuple containing implementation of the SVM, list of parameters adherent to the implementation, additional internals, and description e.g.:: _KNOWN_IMPLEMENTATIONS = { 'C_SVC' : (svm.svmc.C_SVC, ('C',), ('binary', 'multiclass'), 'C-SVM classification'), ... } """ _ATTRIBUTE_COLLECTIONS = ['params'] # enforce presence of params collections # Placeholder: map kernel names to sensitivity classes, ie # 'linear':LinearSVMWeights, for each backend _KNOWN_SENSITIVITIES={} kernel = Parameter(None, allowedtype=Kernel, doc='Kernel object', index=-1) _SVM_PARAMS = { 'C' : Parameter(-1.0, doc='Trade-off parameter between width of the ' 'margin and number of support vectors. Higher C -- ' 'more rigid margin SVM. In linear kernel, negative ' 'values provide automatic scaling of their value ' 'according to the norm of the data'), 'nu' : Parameter(0.5, min=0.0, max=1.0, doc='Fraction of datapoints within the margin'), 'cache_size': Parameter(100, doc='Size of the kernel cache, specified in megabytes'), 'tube_epsilon': Parameter(0.01, doc='Epsilon in epsilon-insensitive loss function of ' 'epsilon-SVM regression (SVR)'), 'tau': Parameter(1e-6, doc='TAU parameter of KRR regression in shogun'), 'probability': Parameter(0, doc='Flag to signal either probability estimate is obtained ' 'within LIBSVM'), 'shrinking': Parameter(1, doc='Either shrinking is to be conducted'), 'weight_label': Parameter([], allowedtype='[int]', doc='To be used in conjunction with weight for custom ' 'per-label weight'), # TODO : merge them into a single dictionary 'weight': Parameter([], allowedtype='[double]', doc='Custom weights per label'), # For some reason setting up epsilon to 1e-5 slowed things down a bit # in comparison to how it was before (in yoh/master) by up to 20%... not clear why # may be related to 1e-3 default within _svm.py? 'epsilon': Parameter(5e-5, min=1e-10, doc='Tolerance of termination criteria. (For nu-SVM default is 0.001)') } _KNOWN_PARAMS = () # just a placeholder to please lintian """Parameters which are specific to a given instantiation of SVM """ __tags__ = [ 'svm', 'kernel-based', 'swig' ] def __init__(self, **kwargs): """Init base class of SVMs. *Not to be publicly used* TODO: handling of parameters might migrate to be generic for all classifiers. SVMs are chosen to be testbase for that functionality to see how well it would fit. """ # Check if requested implementation is known svm_impl = kwargs.get('svm_impl', None) if not svm_impl in self._KNOWN_IMPLEMENTATIONS: raise ValueError, \ "Unknown SVM implementation '%s' is requested for %s." \ "Known are: %s" % (svm_impl, self.__class__, self._KNOWN_IMPLEMENTATIONS.keys()) self._svm_impl = svm_impl impl, add_params, add_internals, descr = \ self._KNOWN_IMPLEMENTATIONS[svm_impl] # Add corresponding parameters to 'known' depending on the # implementation chosen if add_params is not None: self._KNOWN_PARAMS = \ self._KNOWN_PARAMS[:] + list(add_params) # Assign per-instance __tags__ self.__tags__ = self.__tags__[:] + [svm_impl] # Add corresponding internals if add_internals is not None: self.__tags__ += list(add_internals) self.__tags__.append(svm_impl) k = kwargs.get('kernel', None) if k is None: kwargs['kernel'] = self.__default_kernel_class__() if 'linear' in ('%s'%kwargs['kernel']).lower(): # XXX not necessarily best self.__tags__ += [ 'linear', 'has_sensitivity' ] else: self.__tags__ += [ 'non-linear' ] # pop out all args from **kwargs which are known to be SVM parameters _args = {} for param in self._KNOWN_PARAMS + ['svm_impl']: # Update to remove kp's? if param in kwargs: _args[param] = kwargs.pop(param) try: Classifier.__init__(self, **kwargs) except TypeError, e: if "__init__() got an unexpected keyword argument " in e.args[0]: # TODO: make it even more specific -- if that argument is listed # within _SVM_PARAMS e.args = tuple( [e.args[0] + "\n Given SVM instance of class %s knows following parameters: %s" % (self.__class__, self._KNOWN_PARAMS) + \ list(e.args)[1:]]) raise e # populate collections and add values from arguments for paramfamily, paramset in ( (self._KNOWN_PARAMS, self.params),): for paramname in paramfamily: if not (paramname in self._SVM_PARAMS): raise ValueError, "Unknown parameter %s" % paramname + \ ". Known SVM params are: %s" % self._SVM_PARAMS.keys() param = deepcopy(self._SVM_PARAMS[paramname]) if paramname in _args: param.value = _args[paramname] # XXX might want to set default to it -- not just value paramset[paramname] = param # TODO: Below commented out because kernel_type has been removed. # Find way to set default C as necessary # tune up C if it has one and non-linear classifier is used #if self.params.has_key('C') and kernel_type != "linear" \ #and self.params['C'].is_default: #if __debug__: #debug("SVM_", "Assigning default C value to be 1.0 for SVM " #"%s with non-linear kernel" % self) #self.params['C'].default = 1.0 # Some postchecks if self.params.has_key('weight') and self.params.has_key('weight_label'): if not len(self.params.weight_label) == len(self.params.weight): raise ValueError, "Lenghts of 'weight' and 'weight_label' lists " \ "must be equal." if __debug__: debug("SVM", "Initialized %s with kernel %s" % (self, self.params.kernel)) # XXX RF @property def kernel_params(self): if self.params.kernel: return self.params.kernel.params return None def __repr__(self): """Definition of the object summary over the object """ res = "%s(svm_impl=%r" % \ (self.__class__.__name__, self._svm_impl) sep = ", " # XXX TODO: we should have no kernel_params any longer for col in [self.params]:#, self.kernel_params]: for k in col.keys(): # list only params with not default values if col[k].is_default: continue res += "%s%s=%r" % (sep, k, col[k].value) #sep = ', ' ca = self.ca for name, invert in ( ('enable', False), ('disable', True) ): ca_chosen = ca._get_enabled(nondefault=False, invert=invert) if len(ca_chosen): res += sep + "%s_ca=%r" % (name, ca_chosen) res += ")" return res ##REF: Name was automagically refactored def _get_cvec(self, data): """Estimate default and return scaled by it negative user's C values """ if not self.params.has_key('C'):#svm_type in [_svm.svmc.C_SVC]: raise RuntimeError, \ "Requested estimation of default C whenever C was not set" C = self.params.C if not is_sequence_type(C): # we were not given a tuple for balancing between classes C = [C] Cs = list(C[:]) # copy for i in xrange(len(Cs)): if Cs[i] < 0: Cs[i] = self._get_default_c(data.samples)*abs(Cs[i]) if __debug__: debug("SVM", "Default C for %s was computed to be %s" % (C[i], Cs[i])) return Cs ##REF: Name was automagically refactored def _get_default_c(self, data): """Compute default C TODO: for non-linear SVMs """ if self.params.kernel.__kernel_name__ == 'linear': # TODO: move into a function wrapper for # np.linalg.norm if np.issubdtype(data.dtype, np.integer): # we are dealing with integers and overflows are # possible, so assure working with floats def sq_func(x): y = x.astype(float) # copy as float y *= y # in-place square return y else: sq_func = np.square # perform it per each sample so we do not double memory # with calling sq_func on full data # Having a list of norms here automagically resolves issue # with memmapped operations on which return # in turn another memmap datasetnorm = np.mean([np.sqrt(np.sum(sq_func(s))) for s in data]) if datasetnorm == 0: warning("Obtained degenerate data with zero norm for training " "of %s. Scaling of C cannot be done." % self) return 1.0 value = 1.0/(datasetnorm**2) if __debug__: debug("SVM", "Default C computed to be %f" % value) else: warning("TODO: Computation of default C is not yet implemented" + " for non-linear SVMs. Assigning 1.0") value = 1.0 return value # TODO: make part of kernel object #def _getDefaultGamma(self, dataset): #"""Compute default Gamma #TODO: unify bloody libsvm interface so it makes use of this function. #Now it is computed within SVMModel.__init__ #""" ## TODO: Check validity of this w/ new kernels (ie sg.Rbf has sigma) #if self.kernel_params.has_key('gamma'): #value = 1.0 / len(dataset.uniquetargets) #if __debug__: #debug("SVM", "Default Gamma is computed to be %f" % value) #else: #raise RuntimeError, "Shouldn't ask for default Gamma here" #return value ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, **kwargs): """Returns an appropriate SensitivityAnalyzer.""" sana = self._KNOWN_SENSITIVITIES.get(self.params.kernel.__kernel_name__, None) if sana: return sana(self, **kwargs) else: raise NotImplementedError, \ "Sensitivity analyzers for kernel %s is unknown" % \ self.params.kernel @classmethod ##REF: Name was automagically refactored def _customize_doc(cls): #cdoc_old = cls.__doc__ # Need to append documentation to __init__ method idoc_old = cls.__init__.__doc__ idoc = """ SVM/SVR definition is dependent on specifying kernel, implementation type, and parameters for each of them which vary depending on the choices made. Desired implementation is specified in ``svm_impl`` argument. Here is the list if implementations known to this class, along with specific to them parameters (described below among the rest of parameters), and what tasks it is capable to deal with (e.g. regression, binary and/or multiclass classification): """ # XXX Deprecate # To not confuse sphinx -- lets avoid Implementations section # %s""" % (_rst_section('Implementations'),) class NOSClass(object): """Helper -- NothingOrSomething ;) If list is not empty -- return its entries within string s """ def __init__(self): self.seen = [] def __call__(self, l, s, empty=''): if l is None or not len(l): return empty else: lsorted = list(l) lsorted.sort() self.seen += lsorted return s % (', '.join(lsorted)) NOS = NOSClass() # Describe implementations idoc += ''.join( ['\n%s%s : %s' % (_rst_indentstr, k, v[3]) + NOS(v[1], "\n" + _rst_indentstr + " Parameters: %s") + NOS(v[2], "%s" % _rst(('','\n')[int(len(v[1])>0)], '') + _rst_indentstr + " Capabilities: %s") for k,v in cls._KNOWN_IMPLEMENTATIONS.iteritems()]) # Describe kernels idoc += """ Kernel choice is specified as a kernel instance with kwargument ``kernel``. Some kernels (e.g. Linear) might allow computation of per feature sensitivity. """ # XXX Deprecate # %s""" % (_rst_section('Kernels'),) #idoc += ''.join( # ['\n%s%s' % (_rst_indentstr, k) # + ('', ' : provides sensitivity')[int(v[2] is not None)] # + '\n ' + NOS(v[1], '%s', 'No parameters') # for k,v in cls._KERNELS.iteritems()]) # Finally parameters NOS.seen += cls._KNOWN_PARAMS# + cls._KNOWN_KERNEL_PARAMS idoc += '\n' + _rst_section('Parameters') + '\n' + '\n'.join( [v._paramdoc() for k,v in cls._SVM_PARAMS.iteritems() if k in NOS.seen]) cls.__dict__['__init__'].__doc__ = handle_docstring(idoc_old) + idoc # populate names in parameters for k, v in _SVM._SVM_PARAMS.iteritems(): v._set_name(k) pymvpa2-2.2.0/mvpa2/clfs/base.py000066400000000000000000000735201202542755000163620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Base class for all XXX learners: classifiers and regressions. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.support.copy import deepcopy import time from mvpa2.base.types import is_datasetlike, accepts_dataset_as_samples from mvpa2.measures.base import Measure from mvpa2.base.learner import Learner, FailedToPredictError from mvpa2.datasets.base import Dataset from mvpa2.misc.support import idhash from mvpa2.base.state import ConditionalAttribute from mvpa2.base.param import Parameter from mvpa2.misc.attrmap import AttributeMap from mvpa2.base.dochelpers import _str from mvpa2.clfs.transerror import ConfusionMatrix, RegressionStatistics from mvpa2.base import warning if __debug__: from mvpa2.base import debug __all__ = [ 'Classifier', 'accepts_dataset_as_samples', 'accepts_samples_as_dataset'] def accepts_samples_as_dataset(fx): """Decorator to wrap samples into a Dataset. Little helper to allow methods to accept plain data whenever dataset is generally required. """ def wrap_samples(obj, data, *args, **kwargs): if is_datasetlike(data): return fx(obj, data, *args, **kwargs) else: return fx(obj, Dataset(data), *args, **kwargs) return wrap_samples class Classifier(Learner): """Abstract classifier class to be inherited by all classifiers """ # Kept separate from doc to don't pollute help(clf), especially if # we including help for the parent class _DEV__doc__ = """ Required behavior: For every classifier is has to be possible to be instantiated without having to specify the training pattern. Repeated calls to the train() method with different training data have to result in a valid classifier, trained for the particular dataset. It must be possible to specify all classifier parameters as keyword arguments to the constructor. Recommended behavior: Derived classifiers should provide access to *estimates* -- i.e. that information that is finally used to determine the predicted class label. Michael: Maybe it works well if each classifier provides a 'estimates' state member. This variable is a list as long as and in same order as Dataset.uniquetargets (training data). Each item in the list corresponds to the likelyhood of a sample to belong to the respective class. However the semantics might differ between classifiers, e.g. kNN would probably store distances to class- neighbors, where PLR would store the raw function value of the logistic function. So in the case of kNN low is predictive and for PLR high is predictive. Don't know if there is the need to unify that. As the storage and/or computation of this information might be demanding its collection should be switchable and off be default. Nomenclature * predictions : result of the last call to .predict() * estimates : might be different from predictions if a classifier's predict() makes a decision based on some internal value such as probability or a distance. """ # Dict that contains the parameters of a classifier. # This shall provide an interface to plug generic parameter optimizer # on all classifiers (e.g. grid- or line-search optimizer) # A dictionary is used because Michael thinks that access by name is nicer. # Additionally Michael thinks ATM that additional information might be # necessary in some situations (e.g. reasonably predefined parameter range, # minimal iteration stepsize, ...), therefore the value to each key should # also be a dict or we should use mvpa2.base.param.Parameter'... trained_targets = ConditionalAttribute(enabled=True, doc="Set of unique targets it has been trained on") trained_nsamples = ConditionalAttribute(enabled=True, doc="Number of samples it has been trained on") trained_dataset = ConditionalAttribute(enabled=False, doc="The dataset it has been trained on") training_stats = ConditionalAttribute(enabled=False, doc="Confusion matrix of learning performance") predictions = ConditionalAttribute(enabled=True, doc="Most recent set of predictions") estimates = ConditionalAttribute(enabled=True, doc="Internal classifier estimates the most recent " + "predictions are based on") predicting_time = ConditionalAttribute(enabled=True, doc="Time (in seconds) which took classifier to predict") __tags__ = [] """Describes some specifics about the classifier -- is that it is doing regression for instance....""" # TODO: make it available only for actually retrainable classifiers retrainable = Parameter(False, allowedtype='bool', doc="""Either to enable retraining for 'retrainable' classifier.""", index=1002) def __init__(self, space=None, **kwargs): # by default we want classifiers to use the 'targets' sample attribute # for training/testing if space is None: space = 'targets' Learner.__init__(self, space=space, **kwargs) # XXX # the place to map literal to numerical labels (and back) # this needs to be in the base class, since some classifiers also # have this nasty 'regression' mode, and the code in this class # needs to deal with converting the regression output into discrete # labels # however, preferably the mapping should be kept in the respective # low-level implementations that need it self._attrmap = AttributeMap() self.__trainednfeatures = 0 """Stores number of features for which classifier was trained. If 0 -- it wasn't trained at all""" self._set_retrainable(self.params.retrainable, force=True) # deprecate #self.__trainedidhash = None #"""Stores id of the dataset on which it was trained to signal #in trained() if it was trained already on the same dataset""" @property def __summary_class__(self): if 'regression' in self.__tags__: return RegressionStatistics else: return ConfusionMatrix @property def __is_regression__(self): return 'regression' in self.__tags__ def __str__(self, *args, **kwargs): if __debug__ and 'CLF_' in debug.active: return "%s / %s" % (repr(self), super(Classifier, self).__str__()) else: return _str(self, *args, **kwargs) def _pretrain(self, dataset): """Functionality prior to training """ # So we reset all conditional attributes and may be free up some memory # explicitly params = self.params if not params.retrainable: self.untrain() else: # just reset the ca, do not untrain self.ca.reset() if not self.__changedData_isset: self.__reset_changed_data() _changedData = self._changedData __idhashes = self.__idhashes __invalidatedChangedData = self.__invalidatedChangedData # if we don't know what was changed we need to figure # them out if __debug__: debug('CLF_', "IDHashes are %s", (__idhashes,)) # Look at the data if any was changed for key, data_ in (('traindata', dataset.samples), ('targets', dataset.sa[self.get_space()].value)): _changedData[key] = self.__was_data_changed(key, data_) # if those idhashes were invalidated by retraining # we need to adjust _changedData accordingly if __invalidatedChangedData.get(key, False): if __debug__ and not _changedData[key]: debug('CLF_', 'Found that idhash for %s was ' 'invalidated by retraining', (key,)) _changedData[key] = True # Look at the parameters for col in self._paramscols: changedParams = self._collections[col].which_set() if len(changedParams): _changedData[col] = changedParams self.__invalidatedChangedData = {} # reset it on training if __debug__: debug('CLF_', "Obtained _changedData is %s", (self._changedData,)) def _posttrain(self, dataset): """Functionality post training For instance -- computing confusion matrix. Parameters ---------- dataset : Dataset Data which was used for training """ ca = self.ca if ca.is_enabled('trained_targets'): ca.trained_targets = dataset.sa[self.get_space()].unique ca.trained_dataset = dataset ca.trained_nsamples = dataset.nsamples # needs to be assigned first since below we use predict self.__trainednfeatures = dataset.nfeatures if __debug__ and 'CHECK_TRAINED' in debug.active: self.__trainedidhash = dataset.idhash if self.ca.is_enabled('training_stats') and \ not self.ca.is_set('training_stats'): # we should not store predictions for training data, # it is confusing imho (yoh) self.ca.change_temporarily( disable_ca=["predictions"]) if self.params.retrainable: # we would need to recheck if data is the same, # XXX think if there is a way to make this all # efficient. For now, probably, retrainable # classifiers have no chance but not to use # training_stats... sad self.__changedData_isset = False predictions = self.predict(dataset) self.ca.reset_changed_temporarily() self.ca.training_stats = self.__summary_class__( targets=dataset.sa[self.get_space()].value, predictions=predictions) def summary(self): """Providing summary over the classifier""" s = "Classifier %s" % self ca = self.ca ca_enabled = ca.enabled if self.trained: s += "\n trained" if ca.is_set('training_time'): s += ' in %.3g sec' % ca.training_time s += ' on data with' if ca.is_set('trained_targets'): s += ' targets:%s' % list(ca.trained_targets) nsamples, nchunks = None, None if ca.is_set('trained_nsamples'): nsamples = ca.trained_nsamples if ca.is_set('trained_dataset'): td = ca.trained_dataset nsamples, nchunks = td.nsamples, len(td.sa['chunks'].unique) if nsamples is not None: s += ' #samples:%d' % nsamples if nchunks is not None: s += ' #chunks:%d' % nchunks s += " #features:%d" % self.__trainednfeatures if ca.is_set('training_stats'): s += ", training error:%.3g" % ca.training_stats.error else: s += "\n not yet trained" if len(ca_enabled): s += "\n enabled ca:%s" % ', '.join([str(ca[x]) for x in ca_enabled]) return s def clone(self): """Create full copy of the classifier. It might require classifier to be untrained first due to present SWIG bindings. TODO: think about proper re-implementation, without enrollment of deepcopy """ if __debug__: debug("CLF", "Cloning %s#%s", (self, id(self))) try: return deepcopy(self) except: self.untrain() return deepcopy(self) def _train(self, dataset): """Function to be actually overridden in derived classes """ raise NotImplementedError def _prepredict(self, dataset): """Functionality prior prediction """ if not ('notrain2predict' in self.__tags__): # check if classifier was trained if that is needed if not self.trained: raise ValueError, \ "Classifier %s wasn't yet trained, therefore can't " \ "predict" % self nfeatures = dataset.nfeatures #data.shape[1] # check if number of features is the same as in the data # it was trained on if nfeatures != self.__trainednfeatures: raise ValueError, \ "Classifier %s was trained on data with %d features, " % \ (self, self.__trainednfeatures) + \ "thus can't predict for %d features" % nfeatures if self.params.retrainable: if not self.__changedData_isset: self.__reset_changed_data() _changedData = self._changedData data = np.asanyarray(dataset.samples) _changedData['testdata'] = \ self.__was_data_changed('testdata', data) if __debug__: debug('CLF_', "prepredict: Obtained _changedData is %s", (_changedData,)) def _postpredict(self, dataset, result): """Functionality after prediction is computed """ self.ca.predictions = result if self.params.retrainable: self.__changedData_isset = False def _predict(self, dataset): """Actual prediction """ raise NotImplementedError @accepts_samples_as_dataset def predict(self, dataset): """Predict classifier on data Shouldn't be overridden in subclasses unless explicitly needed to do so. Also subclasses trying to call super class's predict should call _predict if within _predict instead of predict() since otherwise it would loop """ ## ??? yoh: changed to asany from as without exhaustive check data = np.asanyarray(dataset.samples) if __debug__: # Verify that we have no NaN/Inf's which we do not "support" ATM if not np.all(np.isfinite(data)): raise ValueError( "Some input data for predict is not finite (NaN or Inf)") debug("CLF", "Predicting classifier %s on ds %s", (self, dataset)) # remember the time when started computing predictions t0 = time.time() ca = self.ca # to assure that those are reset (could be set due to testing # post-training) ca.reset(['estimates', 'predictions']) self._prepredict(dataset) if self.__trainednfeatures > 0 \ or 'notrain2predict' in self.__tags__: result = self._predict(dataset) else: warning("Trying to predict using classifier trained on no features") if __debug__: debug("CLF", "No features were present for training, prediction is " \ "bogus") result = [None]*data.shape[0] ca.predicting_time = time.time() - t0 # with labels mapping in-place, we also need to go back to the # literal labels if self._attrmap: try: result = self._attrmap.to_literal(result) except KeyError, e: raise FailedToPredictError, \ "Failed to convert predictions from numeric into " \ "literals: %s" % e self._postpredict(dataset, result) return result def _call(self, ds): # get the predictions # call with full dataset, since we might need it further down in # the stream, e.g. for caching... pred = self.predict(ds) tattr = self.get_space() # return the predictions and the targets in a dataset return Dataset(pred, sa={tattr: ds.sa[tattr]}) # XXX deprecate ??? ##REF: Name was automagically refactored def is_trained(self, dataset=None): """Either classifier was already trained. MUST BE USED WITH CARE IF EVER""" if dataset is None: # simply return if it was trained on anything return not self.__trainednfeatures == 0 else: res = (self.__trainednfeatures == dataset.nfeatures) if __debug__ and 'CHECK_TRAINED' in debug.active: res2 = (self.__trainedidhash == dataset.idhash) if res2 != res: raise RuntimeError, \ "is_trained is weak and shouldn't be relied upon. " \ "Got result %b although comparing of idhash says %b" \ % (res, res2) return res @property def trained(self): """Either classifier was already trained""" return self.is_trained() def _untrain(self): """Reset trained state""" # any previous apping is obsolete now self._attrmap.clear() self.__trainednfeatures = 0 # probably not needed... retrainable shouldn't be fully untrained # or should be??? #if self.params.retrainable: # # ??? don't duplicate the code ;-) # self.__idhashes = {'traindata': None, 'targets': None, # 'testdata': None, 'testtraindata': None} # no need to do this, as the Leaner class is doing it anyway #super(Classifier, self).reset() ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, **kwargs): """Factory method to return an appropriate sensitivity analyzer for the respective classifier.""" raise NotImplementedError # # Methods which are needed for retrainable classifiers # ##REF: Name was automagically refactored def _set_retrainable(self, value, force=False): """Assign value of retrainable parameter If retrainable flag is to be changed, classifier has to be untrained. Also internal attributes such as _changedData, __changedData_isset, and __idhashes should be initialized if it becomes retrainable """ pretrainable = self.params['retrainable'] if (force or value != pretrainable.value) \ and 'retrainable' in self.__tags__: if __debug__: debug("CLF_", "Setting retrainable to %s" % value) if 'meta' in self.__tags__: warning("Retrainability is not yet crafted/tested for " "meta classifiers. Unpredictable behavior might occur") # assure that we don't drag anything behind if self.trained: self.untrain() ca = self.ca if not value and ca.has_key('retrained'): ca.pop('retrained') ca.pop('repredicted') if value: if not 'retrainable' in self.__tags__: warning("Setting of flag retrainable for %s has no effect" " since classifier has no such capability. It would" " just lead to resources consumption and slowdown" % self) ca['retrained'] = ConditionalAttribute(enabled=True, doc="Either retrainable classifier was retrained") ca['repredicted'] = ConditionalAttribute(enabled=True, doc="Either retrainable classifier was repredicted") pretrainable.value = value # if retrainable we need to keep track of things if value: self.__idhashes = {'traindata': None, 'targets': None, 'testdata': None} #, 'testtraindata': None} if __debug__ and 'CHECK_RETRAIN' in debug.active: # ??? it is not clear though if idhash is faster than # simple comparison of (dataset != __traineddataset).any(), # but if we like to get rid of __traineddataset then we # should use idhash anyways self.__trained = self.__idhashes.copy() # just same Nones self.__reset_changed_data() self.__invalidatedChangedData = {} elif 'retrainable' in self.__tags__: #self.__reset_changed_data() self.__changedData_isset = False self._changedData = None self.__idhashes = None if __debug__ and 'CHECK_RETRAIN' in debug.active: self.__trained = None ##REF: Name was automagically refactored def __reset_changed_data(self): """For retrainable classifier we keep track of what was changed This function resets that dictionary """ if __debug__: debug('CLF_', 'Retrainable: resetting flags on either data was changed') keys = self.__idhashes.keys() + self._paramscols # we might like to just reinit estimates to False??? #_changedData = self._changedData #if isinstance(_changedData, dict): # for key in _changedData.keys(): # _changedData[key] = False self._changedData = dict(zip(keys, [False]*len(keys))) self.__changedData_isset = False ##REF: Name was automagically refactored def __was_data_changed(self, key, entry, update=True): """Check if given entry was changed from what known prior. If so -- store only the ones needed for retrainable beastie """ idhash_ = idhash(entry) __idhashes = self.__idhashes changed = __idhashes[key] != idhash_ if __debug__ and 'CHECK_RETRAIN' in debug.active: __trained = self.__trained changed2 = entry != __trained[key] if isinstance(changed2, np.ndarray): changed2 = changed2.any() if changed != changed2 and not changed: raise RuntimeError, \ 'idhash found to be weak for %s. Though hashid %s!=%s %s, '\ 'estimates %s!=%s %s' % \ (key, idhash_, __idhashes[key], changed, entry, __trained[key], changed2) if update: __trained[key] = entry if __debug__ and changed: debug('CLF_', "Changed %s from %s to %s.%s", (key, __idhashes[key], idhash_, ('','updated')[int(update)])) if update: __idhashes[key] = idhash_ return changed # def __updateHashIds(self, key, data): # """Is twofold operation: updates hashid if was said that it changed. # # or if it wasn't said that data changed, but CHECK_RETRAIN and it found # to be changed -- raise Exception # """ # # check_retrain = __debug__ and 'CHECK_RETRAIN' in debug.active # chd = self._changedData # # # we need to updated idhashes # if chd[key] or check_retrain: # keychanged = self.__was_data_changed(key, data) # if check_retrain and keychanged and not chd[key]: # raise RuntimeError, \ # "Data %s found changed although wasn't " \ # "labeled as such" % key # # Additional API which is specific only for retrainable classifiers. # For now it would just puke if asked from not retrainable one. # # Might come useful and efficient for statistics testing, so if just # labels of dataset changed, then # self.retrain(dataset, labels=True) # would cause efficient retraining (no kernels recomputed etc) # and subsequent self.repredict(data) should be also quite fase ;-) def retrain(self, dataset, **kwargs): """Helper to avoid check if data was changed actually changed Useful if just some aspects of classifier were changed since its previous training. For instance if dataset wasn't changed but only classifier parameters, then kernel matrix does not have to be computed. Words of caution: classifier must be previously trained, results always should first be compared to the results on not 'retrainable' classifier (without calling retrain). Some additional checks are enabled if debug id 'CHECK_RETRAIN' is enabled, to guard against obvious mistakes. Parameters ---------- kwargs that is what _changedData gets updated with. So, smth like `(params=['C'], targets=True)` if parameter C and targets got changed """ # Note that it also demolishes anything for repredicting, # which should be ok in most of the cases if __debug__: if not self.params.retrainable: raise RuntimeError, \ "Do not use re(train,predict) on non-retrainable %s" % \ self if kwargs.has_key('params') or kwargs.has_key('kernel_params'): raise ValueError, \ "Retraining for changed params not working yet" self.__reset_changed_data() # local bindings chd = self._changedData ichd = self.__invalidatedChangedData chd.update(kwargs) # mark for future 'train()' items which are explicitely # mentioned as changed for key, value in kwargs.iteritems(): if value: ichd[key] = True self.__changedData_isset = True # To check if we are not fooled if __debug__ and 'CHECK_RETRAIN' in debug.active: for key, data_ in (('traindata', dataset.samples), ('targets', dataset.sa[self.get_space()].value)): # so it wasn't told to be invalid if not chd[key] and not ichd.get(key, False): if self.__was_data_changed(key, data_, update=False): raise RuntimeError, \ "Data %s found changed although wasn't " \ "labeled as such" % key # TODO: parameters of classifiers... for now there is explicit # 'forbidance' above # Below check should be superseeded by check above, thus never occur. # remove later on ??? if __debug__ and 'CHECK_RETRAIN' in debug.active and self.trained \ and not self._changedData['traindata'] \ and self.__trained['traindata'].shape != dataset.samples.shape: raise ValueError, "In retrain got dataset with %s size, " \ "whenever previousely was trained on %s size" \ % (dataset.samples.shape, self.__trained['traindata'].shape) self.train(dataset) @accepts_samples_as_dataset def repredict(self, dataset, **kwargs): """Helper to avoid check if data was changed actually changed Useful if classifier was (re)trained but with the same data (so just parameters were changed), so that it could be repredicted easily (on the same data as before) without recomputing for instance train/test kernel matrix. Should be used with caution and always compared to the results on not 'retrainable' classifier. Some additional checks are enabled if debug id 'CHECK_RETRAIN' is enabled, to guard against obvious mistakes. Parameters ---------- dataset dataset which is conventionally given to predict kwargs that is what _changedData gets updated with. So, smth like `(params=['C'], targets=True)` if parameter C and targets got changed """ if len(kwargs)>0: raise RuntimeError, \ "repredict for now should be used without params since " \ "it makes little sense to repredict if anything got changed" if __debug__ and not self.params.retrainable: raise RuntimeError, \ "Do not use retrain/repredict on non-retrainable classifiers" self.__reset_changed_data() chd = self._changedData chd.update(**kwargs) self.__changedData_isset = True # check if we are attempted to perform on the same data if __debug__ and 'CHECK_RETRAIN' in debug.active: for key, data_ in (('testdata', dataset.samples),): # so it wasn't told to be invalid #if not chd[key]:# and not ichd.get(key, False): if self.__was_data_changed(key, data_, update=False): raise RuntimeError, \ "Data %s found changed although wasn't " \ "labeled as such" % key # Should be superseded by above # remove in future??? if __debug__ and 'CHECK_RETRAIN' in debug.active \ and not self._changedData['testdata'] \ and self.__trained['testdata'].shape != dataset.samples.shape: raise ValueError, "In repredict got dataset with %s size, " \ "whenever previously was trained on %s size" \ % (dataset.samples.shape, self.__trained['testdata'].shape) return self.predict(dataset) # TODO: callback into retrainable parameter #retrainable = property(fget=_getRetrainable, fset=_set_retrainable, # doc="Specifies either classifier should be retrainable") pymvpa2-2.2.0/mvpa2/clfs/blr.py000066400000000000000000000145531202542755000162300ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Bayesian Linear Regression (BLR).""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.state import ConditionalAttribute from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples if __debug__: from mvpa2.misc import debug class BLR(Classifier): """Bayesian Linear Regression (BLR). """ predicted_variances = ConditionalAttribute(enabled=False, doc="Variance per each predicted value") log_marginal_likelihood = ConditionalAttribute(enabled=False, doc="Log Marginal Likelihood") __tags__ = [ 'blr', 'regression', 'linear' ] def __init__(self, sigma_p = None, sigma_noise=1.0, **kwargs): """Initialize a BLR regression analysis. Parameters ---------- sigma_noise : float the standard deviation of the gaussian noise. (Defaults to 0.1) """ # init base class first Classifier.__init__(self, **kwargs) # pylint happiness self.w = None # It does not make sense to calculate a confusion matrix for a # BLR: self.ca.enable('training_stats', False) # set the prior on w: N(0,sigma_p) , specifying the covariance # sigma_p on w: self.sigma_p = sigma_p # set noise level: self.sigma_noise = sigma_noise self.ca.predicted_variances = None self.ca.log_marginal_likelihood = None # Yarik: what was those about??? just for future in # compute_log_marginal_likelihood ? # self.targets = None pass def __repr__(self): """String summary of the object """ return """BLR(w=%s, sigma_p=%s, sigma_noise=%f, enable_ca=%s)""" % \ (self.w, self.sigma_p, self.sigma_noise, str(self.ca.enabled)) def compute_log_marginal_likelihood(self): """ Compute log marginal likelihood using self.train_fv and self.targets. """ # log_marginal_likelihood = None # return log_marginal_likelihood raise NotImplementedError def _train(self, data): """Train regression using `data` (`Dataset`). """ # BLR relies on numerical labels train_labels = self._attrmap.to_numeric(data.sa[self.get_space()].value) # provide a basic (i.e. identity matrix) and correct prior # sigma_p, if not provided before or not compliant to 'data': if self.sigma_p == None: # case: not provided self.sigma_p = np.eye(data.samples.shape[1]+1) elif self.sigma_p.shape[1] != (data.samples.shape[1]+1): # case: wrong dimensions self.sigma_p = np.eye(data.samples.shape[1]+1) else: # ...then everything is OK :) pass # add one fake column of '1.0' to model the intercept: self.samples_train = np.hstack([data.samples,np.ones((data.samples.shape[0],1))]) if type(self.sigma_p)!=type(self.samples_train): # if sigma_p is a number... self.sigma_p = np.eye(self.samples_train.shape[1])*self.sigma_p # convert in matrix pass self.A_inv = np.linalg.inv(1.0/(self.sigma_noise**2) * np.dot(self.samples_train.T, self.samples_train) + np.linalg.inv(self.sigma_p)) self.w = 1.0/(self.sigma_noise**2) * np.dot(self.A_inv, np.dot(self.samples_train.T, train_labels)) pass @accepts_dataset_as_samples def _predict(self, data): """ Predict the output for the provided data. """ data = np.hstack([data,np.ones((data.shape[0],1),dtype=data.dtype)]) predictions = np.dot(data,self.w) if self.ca.is_enabled('predicted_variances'): # do computation only if conditional attribute was enabled self.ca.predicted_variances = np.dot(data, np.dot(self.A_inv, data.T)).diagonal()[:,np.newaxis] self.ca.estimates = predictions return predictions def set_hyperparameters(self,*args): """ Set hyperparameters' values. Note that this is a list so the order of the values is important. """ args=args[0] self.sigma_noise = args[0] if len(args)>1: self.sigma_p = np.array(args[1:]) # XXX check if this is ok pass return pass if __name__ == "__main__": import pylab pylab.close("all") pylab.ion() from mvpa2.misc.data_generators import linear_awgn train_size = 10 test_size = 100 F = 1 # dimensions of the dataset # np.random.seed(1) slope = np.random.rand(F) intercept = np.random.rand(1) print "True slope:",slope print "True intercept:",intercept dataset_train = linear_awgn(train_size, intercept=intercept, slope=slope) dataset_test = linear_awgn(test_size, intercept=intercept, slope=slope, flat=True) regression = True logml = False b = BLR(sigma_p=np.eye(F+1), sigma_noise=0.1) b.ca.enable("predicted_variances") b.train(dataset_train) predictions = b.predict(dataset_test.samples) print "Predicted slope and intercept:",b.w if F==1: pylab.plot(dataset_train.samples, dataset_train.sa[b.get_space()].value, "ro", label="train") pylab.plot(dataset_test.samples, predictions, "b-", label="prediction") pylab.plot(dataset_test.samples, predictions+np.sqrt(b.ca.predicted_variances), "b--", label="pred(+/-)std") pylab.plot(dataset_test.samples, predictions-np.sqrt(b.ca.predicted_variances), "b--", label=None) pylab.legend() pylab.xlabel("samples") pylab.ylabel("labels") pylab.title("Bayesian Linear Regression on dataset 'linear_AWGN'") pass pymvpa2-2.2.0/mvpa2/clfs/distance.py000066400000000000000000000363261202542755000172450ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Distance functions to be used in kernels and elsewhere """ __docformat__ = 'restructuredtext' # TODO: Make all distance functions accept 2D matrices samples x features # and compute the distance matrix between all samples. They would # need to be capable of dealing with unequal number of rows! # If we would have that, we could make use of them in kNN. import numpy as np from mvpa2.base import externals if __debug__: from mvpa2.base import debug, warning def cartesian_distance(a, b): """Return Cartesian distance between a and b """ return np.linalg.norm(a-b) def absmin_distance(a, b): """Returns dinstance max(\|a-b\|) XXX There must be better name! XXX Actually, why is it absmin not absmax? Useful to select a whole cube of a given "radius" """ return max(abs(a-b)) def manhatten_distance(a, b): """Return Manhatten distance between a and b """ return sum(abs(a-b)) def mahalanobis_distance(x, y=None, w=None): """Calculate Mahalanobis distance of the pairs of points. Parameters ---------- `x` first list of points. Rows are samples, columns are features. `y` second list of points (optional) `w` : np.ndarray optional inverse covariance matrix between the points. It is computed if not given Inverse covariance matrix can be calculated with the following w = np.linalg.solve(np.cov(x.T), np.identity(x.shape[1])) or w = np.linalg.inv(np.cov(x.T)) """ # see if pairwise between two matrices or just within a single matrix if y is None: # pairwise distances of single matrix # calculate the inverse correlation matrix if necessary if w is None: w = np.linalg.inv(np.cov(x.T)) # get some shapes of the data mx, nx = x.shape #mw, nw = w.shape # allocate for the matrix to fill d = np.zeros((mx, mx), dtype=np.float32) for i in range(mx-1): # get the current row to compare xi = x[i, :] # replicate the row xi = xi[np.newaxis, :].repeat(mx-i-1, axis=0) # take the distance between all the matrices dc = x[i+1:mx, :] - xi # scale the distance by the correlation d[i+1:mx, i] = np.real(np.sum((np.inner(dc, w) * np.conj(dc)), 1)) # fill the other direction of the matrix d[i, i+1:mx] = d[i+1:mx, i].T else: # is between two matrixes # calculate the inverse correlation matrix if necessary if w is None: # calculate over all points w = np.linalg.inv(np.cov(np.concatenate((x, y)).T)) # get some shapes of the data mx, nx = x.shape my, ny = y.shape # allocate for the matrix to fill d = np.zeros((mx, my), dtype=np.float32) # loop over shorter of two dimensions if mx <= my: # loop over the x patterns for i in range(mx): # get the current row to compare xi = x[i, :] # replicate the row xi = xi[np.newaxis, :].repeat(my, axis=0) # take the distance between all the matrices dc = xi - y # scale the distance by the correlation d[i, :] = np.real(np.sum((np.inner(dc, w) * np.conj(dc)), 1)) else: # loop over the y patterns for j in range(my): # get the current row to compare yj = y[j, :] # replicate the row yj = yj[np.newaxis, :].repeat(mx, axis=0) # take the distance between all the matrices dc = x - yj # scale the distance by the correlation d[:, j] = np.real(np.sum((np.inner(dc, w) * np.conj(dc)), 1)) # return the dist return np.sqrt(d) def squared_euclidean_distance(data1, data2=None, weight=None): """Compute weighted euclidean distance matrix between two datasets. Parameters ---------- data1 : np.ndarray first dataset data2 : np.ndarray second dataset. If None, compute the euclidean distance between the first dataset versus itself. (Defaults to None) weight : np.ndarray vector of weights, each one associated to each dimension of the dataset (Defaults to None) """ if __debug__: # check if both datasets are floating point if not np.issubdtype(data1.dtype, 'f') \ or (data2 is not None and not np.issubdtype(data2.dtype, 'f')): warning('Computing euclidean distance on integer data ' \ 'is not supported.') # removed for efficiency (see below) #if weight is None: # weight = np.ones(data1.shape[1], 'd') # unitary weight # In the following you can find faster implementations of this # basic code: # # squared_euclidean_distance_matrix = \ # np.zeros((data1.shape[0], data2.shape[0]), 'd') # for i in range(size1): # for j in range(size2): # squared_euclidean_distance_matrix[i, j] = \ # ((data1[i, :]-data2[j, :])**2*weight).sum() # pass # pass # Fast computation of distance matrix in Python+NumPy, # adapted from Bill Baxter's post on [numpy-discussion]. # Basically: (x-y)**2*w = x*w*x - 2*x*w*y + y*y*w # based on value of weight and data2 we might save on computation # and resources if weight is None: data1w = data1 if data2 is None: data2, data2w = data1, data1w else: data2w = data2 else: data1w = data1 * weight if data2 is None: data2, data2w = data1, data1w else: data2w = data2 * weight squared_euclidean_distance_matrix = \ (data1w * data1).sum(1)[:, None] \ -2 * np.dot(data1w, data2.T) \ + (data2 * data2w).sum(1) # correction to some possible numerical instabilities: less0 = squared_euclidean_distance_matrix < 0 if __debug__ and 'CHECK_STABILITY' in debug.active: less0num = np.sum(less0) if less0num > 0: norm0 = np.linalg.norm(squared_euclidean_distance_matrix[less0]) totalnorm = np.linalg.norm(squared_euclidean_distance_matrix) if totalnorm != 0 and norm0 / totalnorm > 1e-8: warning("Found %d elements out of %d unstable (<0) in " \ "computation of squared_euclidean_distance_matrix. " \ "Their norm is %s when total norm is %s" % \ (less0num, np.sum(less0.shape), norm0, totalnorm)) squared_euclidean_distance_matrix[less0] = 0 return squared_euclidean_distance_matrix def one_minus_correlation(X, Y): """Return one minus the correlation matrix between the rows of two matrices. This functions computes a matrix of correlations between all pairs of rows of two matrices. Unlike NumPy's corrcoef() this function will only considers pairs across matrices and not within, e.g. both elements of a pair never have the same source matrix as origin. Both arrays need to have the same number of columns. Parameters ---------- X: 2D-array Y: 2D-array Examples -------- >>> import numpy as np >>> from mvpa2.clfs.distance import one_minus_correlation >>> X = np.random.rand(20,80) >>> Y = np.random.rand(5,80) >>> C = one_minus_correlation(X, Y) >>> print C.shape (20, 5) """ # check if matrices have same number of columns if __debug__: if not X.shape[1] == Y.shape[1]: raise ValueError, 'correlation() requires to matrices with the ' \ 'same #columns (Got: %s and %s)' \ % (X.shape, Y.shape) # zscore each sample/row Zx = X - np.c_[X.mean(axis=1)] Zx /= np.c_[X.std(axis=1)] Zy = Y - np.c_[Y.mean(axis=1)] Zy /= np.c_[Y.std(axis=1)] C = ((np.matrix(Zx) * np.matrix(Zy).T) / Zx.shape[1]).A # let it behave like a distance, i.e. smaller is closer C -= 1.0 return np.abs(C) def pnorm_w_python(data1, data2=None, weight=None, p=2, heuristic='auto', use_sq_euclidean=True): """Weighted p-norm between two datasets (pure Python implementation) ||x - x'||_w = (\sum_{i=1...N} (w_i*|x_i - x'_i|)**p)**(1/p) Parameters ---------- data1 : np.ndarray First dataset data2 : np.ndarray or None Optional second dataset weight : np.ndarray or None Optional weights per 2nd dimension (features) p Power heuristic : str Which heuristic to use: * 'samples' -- python sweep over 0th dim * 'features' -- python sweep over 1st dim * 'auto' decides automatically. If # of features (shape[1]) is much larger than # of samples (shape[0]) -- use 'samples', and use 'features' otherwise use_sq_euclidean : bool Either to use squared_euclidean_distance_matrix for computation if p==2 """ if weight == None: weight = np.ones(data1.shape[1], 'd') pass if p == 2 and use_sq_euclidean: return np.sqrt(squared_euclidean_distance(data1=data1, data2=data2, weight=weight**2)) if data2 == None: data2 = data1 pass S1, F1 = data1.shape[:2] S2, F2 = data2.shape[:2] # sanity check if not (F1==F2==weight.size): raise ValueError, \ "Datasets should have same #columns == #weights. Got " \ "%d %d %d" % (F1, F2, weight.size) d = np.zeros((S1, S2), 'd') # Adjust local functions for specific p values # pf - power function # af - after function if p == 1: pf = lambda x:x af = lambda x:x else: pf = lambda x:x ** p af = lambda x:x ** (1.0/p) # heuristic 'auto' might need to be adjusted if heuristic == 'auto': heuristic = {False: 'samples', True: 'features'}[(F1/S1) < 500] if heuristic == 'features': # Efficient implementation if the feature size is little. for NF in range(F1): d += pf(np.abs(np.subtract.outer(data1[:, NF], data2[:, NF]))*weight[NF]) pass elif heuristic == 'samples': # Efficient implementation if the feature size is much larger # than number of samples for NS in xrange(S1): dfw = pf(np.abs(data1[NS] - data2) * weight) d[NS] = np.sum(dfw, axis=1) pass else: raise ValueError, "Unknown heuristic '%s'. Need one of " \ "'auto', 'samples', 'features'" % heuristic return af(d) if externals.exists('weave'): from scipy import weave from scipy.weave import converters def pnorm_w(data1, data2=None, weight=None, p=2): """Weighted p-norm between two datasets (scipy.weave implementation) ||x - x'||_w = (\sum_{i=1...N} (w_i*|x_i - x'_i|)**p)**(1/p) Parameters ---------- data1 : np.ndarray First dataset data2 : np.ndarray or None Optional second dataset weight : np.ndarray or None Optional weights per 2nd dimension (features) p Power """ if weight == None: weight = np.ones(data1.shape[1], 'd') pass S1, F1 = data1.shape[:2] code = "" if data2 == None or id(data1)==id(data2): if not (F1==weight.size): raise ValueError, \ "Dataset should have same #columns == #weights. Got " \ "%d %d" % (F1, weight.size) F = F1 d = np.zeros((S1, S1), 'd') try: code_peritem = \ {1.0 : "tmp = tmp+weight(t)*fabs(data1(i,t)-data1(j,t))", 2.0 : "tmp2 = weight(t)*(data1(i,t)-data1(j,t));" \ " tmp = tmp + tmp2*tmp2"}[p] except KeyError: code_peritem = "tmp = tmp+pow(weight(t)*fabs(data1(i,t)-data1(j,t)),p)" code = """ int i,j,t; double tmp, tmp2; for (i=0; i` 'Regularization and Variable Selection via the Elastic Net' Journal of the Royal Statistical Society, Series B, 67, 301-320. Similar to SMLR, it performs a feature selection while performing classification, but instead of starting with all features, it starts with none and adds them in, which is similar to boosting. Unlike LARS it has both L1 and L2 regularization (instead of just L1). This means that while it tries to sparsify the features it also tries to keep redundant features, which may be very very good for fMRI classification. In the true nature of the PyMVPA framework, this algorithm was actually implemented in R by Zou and Hastie and wrapped via RPy. To make use of ENET, you must have R and RPy installed as well as both the lars and elasticnet contributed package. You can install the R and RPy with the following command on Debian-based machines: sudo aptitude install python-rpy python-rpy-doc r-base-dev You can then install the lars and elasticnet package by running R as root and calling: install.packages() """ __tags__ = [ 'enet', 'regression', 'linear', 'has_sensitivity', 'does_feature_selection', 'rpy2' ] def __init__(self, lm=1.0, trace=False, normalize=True, intercept=True, max_steps=None, **kwargs): """ Initialize ENET. See the help in R for further details on the following parameters: Parameters ---------- lm : float Penalty parameter. 0 will perform LARS with no ridge regression. Default is 1.0. trace : boolean Whether to print progress in R as it works. normalize : boolean Whether to normalize the L2 Norm. intercept : boolean Whether to add a non-penalized intercept to the model. max_steps : None or int If not None, specify the total number of iterations to run. Each iteration adds a feature, but leaving it none will add until convergence. """ # init base class first Classifier.__init__(self, **kwargs) # set up the params self.__lm = lm self.__normalize = normalize self.__intercept = intercept self.__trace = trace self.__max_steps = max_steps # pylint friendly initializations self.__weights = None """The beta weights for each feature.""" self.__trained_model = None """The model object after training that will be used for predictions.""" # It does not make sense to calculate a confusion matrix for a # regression self.ca.enable('training_stats', False) def __repr__(self): """String summary of the object """ return """ENET(lm=%s, normalize=%s, intercept=%s, trace=%s, max_steps=%s, enable_ca=%s)""" % \ (self.__lm, self.__normalize, self.__intercept, self.__trace, self.__max_steps, str(self.ca.enabled)) def _train(self, data): """Train the classifier using `data` (`Dataset`). """ targets = data.sa[self.get_space()].value[:, np.newaxis] enet_kwargs = {} if self.__max_steps is not None: enet_kwargs['max.steps'] = self.__max_steps try: self.__trained_model = trained_model = \ r.enet(data.samples, targets, self.__lm, normalize=self.__normalize, intercept=self.__intercept, trace=self.__trace, **enet_kwargs) except RRuntimeError, e: raise FailedToTrainError, \ "Failed to predict on %s using %s. Exceptions was: %s" \ % (data, self, e) # find the step with the lowest Cp (risk) # it is often the last step if you set a max_steps # must first convert dictionary to array # Cp_vals = np.asarray([trained_model['Cp'][str(x)] # for x in range(len(trained_model['Cp']))]) # self.__lowest_Cp_step = Cp_vals.argmin() # set the weights to the last step beta_pure = np.asanyarray(Rrx2(trained_model, 'beta.pure')) self.__beta_pure_shape = beta_pure.shape self.__weights = np.zeros(data.nfeatures, dtype=beta_pure.dtype) ind = np.asanyarray(Rrx2(trained_model, 'allset'))-1 self.__weights[ind] = beta_pure[-1,:] # # set the weights to the final state # self.__weights = trained_model['beta'][-1,:] @accepts_dataset_as_samples def _predict(self, data): """Predict the output for the provided data. """ # predict with the final state (i.e., the last step) try: res = r.predict(self.__trained_model, data, mode='step', type='fit', s=rpy2.robjects.IntVector(self.__beta_pure_shape)) fit = np.asanyarray(Rrx2(res, 'fit'))[:, -1] except RRuntimeError, e: raise FailedToPredictError, \ "Failed to predict on %s using %s. Exceptions was: %s" \ % (data, self, e) if len(fit.shape) == 0: # if we just got 1 sample with a scalar fit = fit.reshape( (1,) ) self.ca.estimates = fit # charge conditional attribute return fit ##REF: Name was automagically refactored def _get_feature_ids(self): """Return ids of the used features """ return np.where(np.abs(self.__weights)>0)[0] ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, **kwargs): """Returns a sensitivity analyzer for ENET.""" return ENETWeights(self, **kwargs) weights = property(lambda self: self.__weights) class ENETWeights(Sensitivity): """`SensitivityAnalyzer` that reports the weights ENET trained on a given `Dataset`. """ _LEGAL_CLFS = [ ENET ] def _call(self, dataset=None): """Extract weights from ENET classifier. ENET always has weights available, so nothing has to be computed here. """ clf = self.clf weights = clf.weights if __debug__: debug('ENET', "Extracting weights for ENET - "+ "Result: min=%f max=%f" %\ (np.min(weights), np.max(weights))) return weights pymvpa2-2.2.0/mvpa2/clfs/gda.py000066400000000000000000000200741202542755000161770ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Gaussian Discriminant Analyses: LDA and QDA Basic implementation at the moment: no data sphering, nor dimensionality reduction tricks are in place ATM """ """ TODO: * too much in common with GNB -- LDA/QDA/GNB could reuse much of machinery * provide actual probabilities computation as in GNB * LDA/QDA -- make use of data sphering and may be operating in the subspace of centroids Was based on GNB code """ __docformat__ = 'restructuredtext' import numpy as np from numpy import ones, zeros, sum, abs, isfinite, dot from mvpa2.base import warning, externals from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.base.learner import DegenerateInputError from mvpa2.base.param import Parameter from mvpa2.base.state import ConditionalAttribute #from mvpa2.measures.base import Sensitivity if __debug__: from mvpa2.base import debug __all__ = [ "LDA", "QDA" ] class GDA(Classifier): """Gaussian Discriminant Analysis -- base for LDA and QDA """ __tags__ = ['binary', 'multiclass'] prior = Parameter('laplacian_smoothing', allowedtype='basestring', choices=["laplacian_smoothing", "uniform", "ratio"], doc="""How to compute prior distribution.""") def __init__(self, **kwargs): """Initialize a GDA classifier. """ # init base class first Classifier.__init__(self, **kwargs) # pylint friendly initializations self.means = None """Means of features per class""" self.cov = None """Co-variances per class, but "vars" is taken ;)""" self.ulabels = None """Labels classifier was trained on""" self.priors = None """Class probabilities""" self.nsamples_per_class = None """Number of samples per class - used by derived classes""" # Define internal state of classifier self._norm_weight = None def _get_priors(self, nlabels, nsamples, nsamples_per_class): """Return prior probabilities given data """ prior = self.params.prior if prior == 'uniform': priors = np.ones((nlabels,))/nlabels elif prior == 'laplacian_smoothing': priors = (1+np.squeeze(nsamples_per_class)) \ / (float(nsamples) + nlabels) elif prior == 'ratio': priors = np.squeeze(nsamples_per_class) / float(nsamples) else: raise ValueError, \ "No idea on how to handle '%s' way to compute priors" \ % self.params.prior return priors def _train(self, dataset): """Train the classifier using `dataset` (`Dataset`). """ params = self.params targets_sa_name = self.get_space() targets_sa = dataset.sa[targets_sa_name] # get the dataset information into easy vars X = dataset.samples labels = targets_sa.value self.ulabels = ulabels = targets_sa.unique nlabels = len(ulabels) label2index = dict((l, il) for il, l in enumerate(ulabels)) # set the feature dimensions nsamples = len(X) nfeatures = dataset.nfeatures self.means = means = \ np.zeros((nlabels, nfeatures)) # degenerate dimension are added for easy broadcasting later on # XXX might want to remove -- for now taken from GNB as is self.nsamples_per_class = nsamples_per_class \ = np.zeros((nlabels, 1)) self.cov = cov = \ np.zeros((nlabels, nfeatures, nfeatures)) # Estimate cov # better loop than repmat! ;) for l, il in label2index.iteritems(): Xl = X[labels == l] nsamples_per_class[il] = len(Xl) # TODO: degenerate case... no samples for known label for # some reason? means[il] = np.mean(Xl, axis=0) # since we have means already lets do manually cov here Xldm = Xl - means[il] cov[il] = np.dot(Xldm.T, Xldm) # scaling will be done correspondingly in LDA or QDA # Store prior probabilities self.priors = self._get_priors(nlabels, nsamples, nsamples_per_class) if __debug__ and 'GDA' in debug.active: debug('GDA', "training finished on data.shape=%s " % (X.shape, ) + "min:max(data)=%f:%f" % (np.min(X), np.max(X))) def _untrain(self): """Untrain classifier and reset all learnt params """ self.means = None self.cov = None self.ulabels = None self.priors = None super(GDA, self)._untrain() @accepts_dataset_as_samples def _predict(self, data): """Predict the output for the provided data. """ params = self.params self.ca.estimates = prob_cs_cp = self._g_k(data) # Take the class with maximal (log)probability # XXX in GNB it is axis=0, i.e. classes were first winners = prob_cs_cp.argmax(axis=1) predictions = [self.ulabels[c] for c in winners] if __debug__ and 'GDA' in debug.active: debug('GDA', "predict on data.shape=%s min:max(data)=%f:%f " % (data.shape, np.min(data), np.max(data))) return predictions class LDA(GDA): """Linear Discriminant Analysis. """ __tags__ = GDA.__tags__ + ['linear', 'lda'] def _untrain(self): self._w = None self._b = None super(LDA, self)._untrain() def _train(self, dataset): super(LDA, self)._train(dataset) nlabels = len(self.ulabels) # Sum and scale the covariance self.cov = cov = \ np.sum(self.cov, axis=0) \ / (np.sum(self.nsamples_per_class) - nlabels) # For now as simple as that -- see notes on top try: covi = np.linalg.inv(cov) except Exception, e: raise DegenerateInputError, \ "Data is probably singular, since inverse fails. Got %s"\ % (e,) # Precompute and store the actual separating hyperplane and offset self._w = np.dot(covi, self.means.T) self._b = b = np.zeros((nlabels,)) for il in xrange(nlabels): m = self.means[il] b[il] = np.log(self.priors[il]) - 0.5 * np.dot(np.dot(m.T, covi), m) def _g_k(self, data): """Return decision function values""" return np.dot(data, self._w) + self._b class QDA(GDA): """Quadratic Discriminant Analysis. """ __tags__ = GDA.__tags__ + ['non-linear', 'qda'] def _untrain(self): # XXX theoretically we could use the same _w although with # different "content" self._icov = None self._b = None super(QDA, self)._untrain() def _train(self, dataset): super(QDA, self)._train(dataset) # XXX should we drag cov around at all then? self._icov = np.zeros(self.cov.shape) for ic, cov in enumerate(self.cov): cov /= float(self.nsamples_per_class[ic]) try: self._icov[ic] = np.linalg.inv(cov) except Exception, e: raise DegenerateInputError, \ "Data is probably singular, since inverse fails. Got %s"\ % (e,) self._b = np.array([np.log(p) - 0.5 * np.log(np.linalg.det(c)) for p,c in zip(self.priors, self.cov)]) def _g_k(self, data): """Return decision function values""" res = [] for m, covi, b in zip(self.means, self._icov, self._b): dm = data - m res.append(b - 0.5 * np.sum(np.dot(dm, covi) * dm, axis=1)) return np.array(res).T pymvpa2-2.2.0/mvpa2/clfs/glmnet.py000066400000000000000000000331031202542755000167270ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """GLM-Net (GLMNET) regression and classifier.""" __docformat__ = 'restructuredtext' # system imports import numpy as np import mvpa2.base.externals as externals # do conditional to be able to build module reference if externals.exists('glmnet', raise_=True): import rpy2.robjects import rpy2.robjects.numpy2ri if hasattr(rpy2.robjects.numpy2ri,'activate'): rpy2.robjects.numpy2ri.activate() RRuntimeError = rpy2.robjects.rinterface.RRuntimeError r = rpy2.robjects.r r.library('glmnet') from mvpa2.support.rpy2_addons import Rrx2 # local imports from mvpa2.base import warning from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.base.learner import FailedToTrainError from mvpa2.measures.base import Sensitivity from mvpa2.base.param import Parameter from mvpa2.datasets.base import Dataset if __debug__: from mvpa2.base import debug def _label2indlist(labels, ulabels): """Convert labels to list of unique label indicies starting at 1. """ # allocate for the new one-of-M labels new_labels = np.zeros(len(labels), dtype=np.int) # loop and convert to one-of-M for i, c in enumerate(ulabels): new_labels[labels == c] = i+1 return [str(l) for l in new_labels.tolist()] def _label2oneofm(labels, ulabels): """Convert labels to one-of-M form. TODO: Might be useful elsewhere so could migrate into misc/ """ # allocate for the new one-of-M labels new_labels = np.zeros((len(labels), len(ulabels))) # loop and convert to one-of-M for i, c in enumerate(ulabels): new_labels[labels == c, i] = 1 return new_labels class _GLMNET(Classifier): """GLM-Net regression (GLMNET) `Classifier`. GLM-Net is the model selection algorithm from: Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent. http://www-stat.stanford.edu/~hastie/Papers/glmnet.pdf To make use of GLMNET, you must have R and RPy2 installed as well as the glmnet contributed package. You can install the R and RPy2 with the following command on Debian-based machines:: sudo aptitude install python-rpy2 r-base-dev You can then install the glmnet package by running R as root and calling:: install.packages() """ __tags__ = [ 'glmnet', 'linear', 'has_sensitivity', 'does_feature_selection', 'rpy2' ] family = Parameter('gaussian', allowedtype='basestring', choices=["gaussian", "multinomial"], ro=True, doc="""Response type of your targets (either 'gaussian' for regression or 'multinomial' for classification).""") alpha = Parameter(1.0, min=0.01, max=1.0, allowedtype='float', doc="""The elastic net mixing parameter. Larger values will give rise to less L2 regularization, with alpha=1.0 as a true LASSO penalty.""") nlambda = Parameter(100, allowedtype='int', min=1, doc="""Maximum number of lambdas to calculate before stopping if not converged.""") standardize = Parameter(True, allowedtype='bool', doc="""Whether to standardize the variables prior to fitting.""") thresh = Parameter(1e-4, min=1e-10, max=1.0, allowedtype='float', doc="""Convergence threshold for coordinate descent.""") pmax = Parameter(None, min=1, allowedtype='None or int', doc="""Limit the maximum number of variables ever to be nonzero.""") maxit = Parameter(100, min=10, allowedtype='int', doc="""Maximum number of outer-loop iterations for 'multinomial' families.""") model_type = Parameter('covariance', allowedtype='basestring', choices=["covariance", "naive"], doc="""'covariance' saves all inner-products ever computed and can be much faster than 'naive'. The latter can be more efficient for nfeatures>>nsamples situations.""") def __init__(self, **kwargs): """ Initialize GLM-Net. See the help in R for further details on the parameters """ # init base class first Classifier.__init__(self, **kwargs) # pylint friendly initializations self._utargets = None self.__weights = None """The beta weights for each feature.""" self.__trained_model = None """The model object after training that will be used for predictions.""" self.__last_lambda = None """Lambda obtained on the last step""" # def __repr__(self): # """String summary of the object # """ # return """ENET(lm=%s, normalize=%s, intercept=%s, trace=%s, max_steps=%s, enable_ca=%s)""" % \ # (self.__lm, # self.__normalize, # self.__intercept, # self.__trace, # self.__max_steps, # str(self.ca.enabled)) def _train(self, dataset): """Train the classifier using `data` (`Dataset`). """ # process targets based on the model family targets = dataset.sa[self.get_space()].value if self.params.family == 'gaussian': # do nothing, just save the targets as a list #targets = targets.tolist() self._utargets = None elif self.params.family == 'multinomial': # turn lables into list of range values starting at 1 #targets = _label2indlist(dataset.targets, # dataset.uniquetargets) targets_unique = dataset.sa[self.get_space()].unique targets = _label2oneofm(targets, targets_unique) # save some properties of the data/classification self._utargets = targets_unique.copy() # process the pmax if self.params.pmax is None: # set it to the num features pmax = dataset.nfeatures else: # use the value pmax = self.params.pmax try: self.__trained_model = trained_model = \ r.glmnet(dataset.samples, targets, family=self.params.family, alpha=self.params.alpha, nlambda=self.params.nlambda, standardize=self.params.standardize, thresh=self.params.thresh, pmax=pmax, maxit=self.params.maxit, type=self.params.model_type) except RRuntimeError, e: raise FailedToTrainError, \ "Failed to train %s on %s. Got '%s' during call r.glmnet()." \ % (self, dataset, e) self.__last_lambda = last_lambda = \ np.asanyarray(Rrx2(trained_model, 'lambda'))[-1] # set the weights to the last step weights = r.coef(trained_model, s=last_lambda) if self.params.family == 'multinomial': self.__weights = np.hstack([np.array(r['as.matrix'](weights[i]))[1:] for i in range(len(weights))]) elif self.params.family == 'gaussian': self.__weights = np.array(r['as.matrix'](weights))[1:, 0] else: raise NotImplementedError, \ "Somehow managed to get here with family %s." % \ (self.params.family,) @accepts_dataset_as_samples def _predict(self, data): """ Predict the output for the provided data. """ # predict with standard method values = np.array(r.predict(self.__trained_model, newx=data, type='link', s=self.__last_lambda)) # predict with the final state (i.e., the last step) classes = None if self.params.family == 'multinomial': # remove last dimension of values values = values[:, :, 0] # get the classes too (they are 1-indexed) class_ind = np.array(r.predict(self.__trained_model, newx=data, type='class', s=self.__last_lambda)) # convert to 0-based ints class_ind = (class_ind-1).astype('int') # convert to actual targets # XXX If just one sample is predicted, the converted predictions # array is just 1D, hence it yields an IndexError on [:,0] # Modified to .squeeze() which should do the same. # Please acknowledge and remove this comment. #classes = self._utargets[class_ind][:,0] classes = self._utargets[class_ind].squeeze() else: # is gaussian, so just remove last dim of values values = values[:, 0] # values need to be set anyways if values state is enabled self.ca.estimates = values if classes is not None: # set the values and return none return classes else: # return the values as predictions return values def _init_internals(self): """Reinitialize all internals """ self._utargets = None self.__weights = None """The beta weights for each feature.""" self.__trained_model = None """The model object after training that will be used for predictions.""" self.__last_lambda = None """Lambda obtained on the last step""" def _untrain(self): super(_GLMNET, self)._untrain() self._init_internals() ##REF: Name was automagically refactored def _get_feature_ids(self): """Return ids of the used features """ return np.where(np.abs(self.__weights)>0)[0] ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, **kwargs): """Returns a sensitivity analyzer for GLMNET.""" return GLMNETWeights(self, **kwargs) weights = property(lambda self: self.__weights) class GLMNETWeights(Sensitivity): """`SensitivityAnalyzer` that reports the weights GLMNET trained on a given `Dataset`. """ _LEGAL_CLFS = [ _GLMNET ] def _call(self, dataset=None): """Extract weights from GLMNET classifier. GLMNET always has weights available, so nothing has to be computed here. """ clf = self.clf weights = clf.weights if __debug__: debug('GLMNET', "Extracting weights for GLMNET - "+ "Result: min=%f max=%f" %\ (np.min(weights), np.max(weights))) #return weights if clf.params.family == 'multinomial': return Dataset(weights.T, sa={clf.get_space(): clf._utargets}) else: return Dataset(weights[np.newaxis]) class GLMNET_R(_GLMNET): """ GLM-NET Gaussian Regression Classifier. This is the GLM-NET algorithm from Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent. http://www-stat.stanford.edu/~hastie/Papers/glmnet.pdf parameterized to be a regression. See GLMNET_C for the multinomial classifier version. """ __tags__ = _GLMNET.__tags__ + ['regression'] def __init__(self, **kwargs): """ Initialize GLM-Net. See the help in R for further details on the parameters """ # make sure they didn't specify incompatible model regr_family = 'gaussian' family = kwargs.pop('family', regr_family).lower() if family != regr_family: warning('You specified the parameter family=%s, but we ' 'force this to be "%s" for regression.' % (family, regr_family)) family = regr_family # init base class first, forcing regression _GLMNET.__init__(self, family=family, **kwargs) class GLMNET_C(_GLMNET): """ GLM-NET Multinomial Classifier. This is the GLM-NET algorithm from Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent. http://www-stat.stanford.edu/~hastie/Papers/glmnet.pdf parameterized to be a multinomial classifier. See GLMNET_Class for the gaussian regression version. """ __tags__ = _GLMNET.__tags__ + ['multiclass', 'binary'] def __init__(self, **kwargs): """ Initialize GLM-Net multinomial classifier. See the help in R for further details on the parameters """ # make sure they didn't specify regression if not kwargs.pop('family', None) is None: warning('You specified the "family" parameter, but we ' 'force this to be "multinomial".') # init base class first, forcing regression _GLMNET.__init__(self, family='multinomial', **kwargs) pymvpa2-2.2.0/mvpa2/clfs/gnb.py000066400000000000000000000277441202542755000162250ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Gaussian Naive Bayes Classifier Basic implementation of Gaussian Naive Bayes classifier. """ """ TODO: for now all estimates are allocated at the first level of GNB instance (e.g. self.priors, etc) -- move them deeper or into a corresponding "Collection"? The same for GNBSearchlight """ __docformat__ = 'restructuredtext' import numpy as np from numpy import ones, zeros, sum, abs, isfinite, dot from mvpa2.base import warning, externals from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.base.param import Parameter from mvpa2.base.state import ConditionalAttribute #from mvpa2.measures.base import Sensitivity if __debug__: from mvpa2.base import debug __all__ = [ "GNB" ] class GNB(Classifier): """Gaussian Naive Bayes `Classifier`. `GNB` is a probabilistic classifier relying on Bayes rule to estimate posterior probabilities of labels given the data. Naive assumption in it is an independence of the features, which allows to combine per-feature likelihoods by a simple product across likelihoods of "independent" features. See http://en.wikipedia.org/wiki/Naive_bayes for more information. Provided here implementation is "naive" on its own -- various aspects could be improved, but it has its own advantages: - implementation is simple and straightforward - no data copying while considering samples of specific class - provides alternative ways to assess prior distribution of the classes in the case of unbalanced sets of samples (see parameter `prior`) - makes use of NumPy broadcasting mechanism, so should be relatively efficient - should work for any dimensionality of samples `GNB` is listed both as linear and non-linear classifier, since specifics of separating boundary depends on the data and/or parameters: linear separation is achieved whenever samples are balanced (or ``prior='uniform'``) and features have the same variance across different classes (i.e. if ``common_variance=True`` to enforce this). Whenever decisions are made based on log-probabilities (parameter ``logprob=True``, which is the default), then conditional attribute `values`, if enabled, would also contain log-probabilities. Also mention that normalization by the evidence (P(data)) is disabled by default since it has no impact per se on classification decision. You might like to set parameter normalize to True if you want to access properly scaled probabilities in `values` conditional attribute. """ # XXX decide when should we set corresponding internal, # since it depends actually on the data -- no clear way, # so set both linear and non-linear __tags__ = [ 'gnb', 'linear', 'non-linear', 'binary', 'multiclass' ] common_variance = Parameter(False, allowedtype='bool', doc="""Use the same variance across all classes.""") prior = Parameter('laplacian_smoothing', allowedtype='basestring', choices=["laplacian_smoothing", "uniform", "ratio"], doc="""How to compute prior distribution.""") logprob = Parameter(True, allowedtype='bool', doc="""Operate on log probabilities. Preferable to avoid unneeded exponentiation and loose precision. If set, logprobs are stored in `values`""") normalize = Parameter(False, allowedtype='bool', doc="""Normalize (log)prob by P(data). Requires probabilities thus for `logprob` case would require exponentiation of 'logprob's, thus disabled by default since does not impact classification output. """) def __init__(self, **kwargs): """Initialize an GNB classifier. """ # init base class first Classifier.__init__(self, **kwargs) # pylint friendly initializations self.means = None """Means of features per class""" self.variances = None """Variances per class, but "vars" is taken ;)""" self.ulabels = None """Labels classifier was trained on""" self.priors = None """Class probabilities""" # Define internal state of classifier self._norm_weight = None def _get_priors(self, nlabels, nsamples, nsamples_per_class): """Return prior probabilities given data """ # helper function - squash all dimensions but 1 squash = lambda x: np.atleast_1d(x.squeeze()) prior = self.params.prior if prior == 'uniform': priors = np.ones((nlabels,))/nlabels elif prior == 'laplacian_smoothing': priors = (1+squash(nsamples_per_class)) \ / (float(nsamples) + nlabels) elif prior == 'ratio': priors = squash(nsamples_per_class) / float(nsamples) else: raise ValueError( "No idea on how to handle '%s' way to compute priors" % self.params.prior) return priors def _train(self, dataset): """Train the classifier using `dataset` (`Dataset`). """ params = self.params targets_sa_name = self.get_space() targets_sa = dataset.sa[targets_sa_name] # get the dataset information into easy vars X = dataset.samples labels = targets_sa.value self.ulabels = ulabels = targets_sa.unique nlabels = len(ulabels) label2index = dict((l, il) for il, l in enumerate(ulabels)) # set the feature dimensions nsamples = len(X) s_shape = X.shape[1:] # shape of a single sample self.means = means = \ np.zeros((nlabels, ) + s_shape) self.variances = variances = \ np.zeros((nlabels, ) + s_shape) # degenerate dimension are added for easy broadcasting later on nsamples_per_class = np.zeros((nlabels,) + (1,)*len(s_shape)) # Estimate means and number of samples per each label for s, l in zip(X, labels): il = label2index[l] # index of the label nsamples_per_class[il] += 1 means[il] += s # helper function - squash all dimensions but 1 squash = lambda x: np.atleast_1d(x.squeeze()) ## Actually compute the means non0labels = (squash(nsamples_per_class) != 0) means[non0labels] /= nsamples_per_class[non0labels] # Store prior probabilities self.priors = self._get_priors(nlabels, nsamples, nsamples_per_class) # Estimate variances # better loop than repmat! ;) for s, l in zip(X, labels): il = label2index[l] # index of the label variances[il] += (s - means[il])**2 ## Actually compute the variances if params.common_variance: # we need to get global std cvar = np.sum(variances, axis=0)/nsamples # sum across labels # broadcast the same variance across labels variances[:] = cvar else: variances[non0labels] /= nsamples_per_class[non0labels] # Precompute and store weighting coefficient for Gaussian if params.logprob: # it would be added to exponent self._norm_weight = -0.5 * np.log(2*np.pi*variances) else: self._norm_weight = 1.0/np.sqrt(2*np.pi*variances) if __debug__ and 'GNB' in debug.active: debug('GNB', "training finished on data.shape=%s " % (X.shape, ) + "min:max(data)=%f:%f" % (np.min(X), np.max(X))) def _untrain(self): """Untrain classifier and reset all learnt params """ self.means = None self.variances = None self.ulabels = None self.priors = None super(GNB, self)._untrain() @accepts_dataset_as_samples def _predict(self, data): """Predict the output for the provided data. """ params = self.params # argument of exponentiation scaled_distances = \ -0.5 * (((data - self.means[:, np.newaxis, ...])**2) \ / self.variances[:, np.newaxis, ...]) if params.logprob: # if self.params.common_variance: # XXX YOH: # For decision there is no need to actually compute # properly scaled p, ie 1/sqrt(2pi * sigma_i) could be # simply discarded since it is common across features AND # classes # For completeness -- computing everything now even in logprob lprob_csfs = self._norm_weight[:, np.newaxis, ...] \ + scaled_distances # XXX for now just cut/paste with different operators, but # could just bind them and reuse in the same equations # Naive part -- just a product of probabilities across features ## First we need to reshape to get class x samples x features lprob_csf = lprob_csfs.reshape( lprob_csfs.shape[:2] + (-1,)) ## Now -- sum across features lprob_cs = lprob_csf.sum(axis=2) # Incorporate class probabilities: prob_cs_cp = lprob_cs + np.log(self.priors[:, np.newaxis]) else: # Just a regular Normal distribution with per # feature/class mean and variances prob_csfs = \ self._norm_weight[:, np.newaxis, ...] \ * np.exp(scaled_distances) # Naive part -- just a product of probabilities across features ## First we need to reshape to get class x samples x features prob_csf = prob_csfs.reshape( prob_csfs.shape[:2] + (-1,)) ## Now -- product across features prob_cs = prob_csf.prod(axis=2) # Incorporate class probabilities: prob_cs_cp = prob_cs * self.priors[:, np.newaxis] # Normalize by evidence P(data) if params.normalize: if params.logprob: prob_cs_cp_real = np.exp(prob_cs_cp) else: prob_cs_cp_real = prob_cs_cp prob_s_cp_marginals = np.sum(prob_cs_cp_real, axis=0) if params.logprob: prob_cs_cp -= np.log(prob_s_cp_marginals) else: prob_cs_cp /= prob_s_cp_marginals # Take the class with maximal (log)probability winners = prob_cs_cp.argmax(axis=0) predictions = [self.ulabels[c] for c in winners] # set to the probabilities per class self.ca.estimates = prob_cs_cp.T if __debug__ and 'GNB' in debug.active: debug('GNB', "predict on data.shape=%s min:max(data)=%f:%f " % (data.shape, np.min(data), np.max(data))) return predictions # XXX Later come up with some # could be a simple t-test maps using distributions # per each class #def get_sensitivity_analyzer(self, **kwargs): # """Returns a sensitivity analyzer for GNB.""" # return GNBWeights(self, **kwargs) # XXX Is there any reason to use properties? #means = property(lambda self: self.__biases) #variances = property(lambda self: self.__weights) ## class GNBWeights(Sensitivity): ## """`SensitivityAnalyzer` that reports the weights GNB trained ## on a given `Dataset`. ## """ ## _LEGAL_CLFS = [ GNB ] ## def _call(self, dataset=None): ## """Extract weights from GNB classifier. ## GNB always has weights available, so nothing has to be computed here. ## """ ## clf = self.clf ## means = clf.means ## XXX we can do something better ;) ## return means pymvpa2-2.2.0/mvpa2/clfs/gpr.py000066400000000000000000000604711202542755000162410ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Gaussian Process Regression (GPR).""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals, warning from mvpa2.base.state import ConditionalAttribute from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.base.param import Parameter from mvpa2.kernels.np import SquaredExponentialKernel, GeneralizedLinearKernel, \ LinearKernel from mvpa2.measures.base import Sensitivity from mvpa2.misc.exceptions import InvalidHyperparameterError from mvpa2.datasets import Dataset, dataset_wizard if externals.exists("scipy", raise_=True): from scipy.linalg import cho_solve as SLcho_solve from scipy.linalg import cholesky as SLcholesky import scipy.linalg as SL # Some local binding for bits of speed up SLAError = SL.basic.LinAlgError if __debug__: from mvpa2.base import debug # Some local bindings for bits of speed up from numpy import array, asarray Nlog = np.log Ndot = np.dot Ndiag = np.diag NLAcholesky = np.linalg.cholesky NLAsolve = np.linalg.solve NLAError = np.linalg.linalg.LinAlgError eps64 = np.finfo(np.float64).eps # Some precomputed items. log is relatively expensive _halflog2pi = 0.5 * Nlog(2 * np.pi) def _SLcholesky_autoreg(C, nsteps=None, **kwargs): """Simple wrapper around cholesky to incrementally regularize the matrix until successful computation. For `nsteps` we boost diagonal 10-fold each time from the 'epsilon' of the respective dtype. If None -- would proceed until reaching 1. """ if nsteps is None: nsteps = -int(np.floor(np.log10(np.finfo(float).eps))) result = None for step in xrange(nsteps): epsilon_value = (10**step) * np.finfo(C.dtype).eps epsilon = epsilon_value * np.eye(C.shape[0]) try: result = SLcholesky(C + epsilon, lower=True) except SLAError, e: warning("Cholesky decomposition lead to failure: %s. " "As requested, performing auto-regularization but " "for better control you might prefer to regularize " "yourself by providing lm parameter to GPR" % e) if step < nsteps-1: if __debug__: debug("GPR", "Failed to obtain cholesky on " "auto-regularization step %d value %g. Got %s." " Boosting lambda more to reg. C." % (step, epsilon_value, e)) continue else: raise if result is None: # no loop was done for some reason result = SLcholesky(C, lower=True) return result class GPR(Classifier): """Gaussian Process Regression (GPR). """ predicted_variances = ConditionalAttribute(enabled=False, doc="Variance per each predicted value") log_marginal_likelihood = ConditionalAttribute(enabled=False, doc="Log Marginal Likelihood") log_marginal_likelihood_gradient = ConditionalAttribute(enabled=False, doc="Log Marginal Likelihood Gradient") __tags__ = [ 'gpr', 'regression', 'retrainable' ] # NOTE XXX Parameters of the classifier. Values available as # clf.parameter or clf.params.parameter, or as # clf.params['parameter'] (as the full Parameter object) # # __doc__ and __repr__ for class is conviniently adjusted to # reflect values of those params # Kernel machines/classifiers should be refactored also to behave # the same and define kernel parameter appropriately... TODO, but SVMs # already kinda do it nicely ;-) sigma_noise = Parameter(0.001, allowedtype='float', min=1e-10, doc="the standard deviation of the gaussian noise.") # XXX For now I don't introduce kernel parameter since yet to unify # kernel machines #kernel = Parameter(None, allowedtype='Kernel', # doc="Kernel object defining the covariance between instances. " # "(Defaults to KernelSquaredExponential if None in arguments)") lm = Parameter(None, min=0.0, allowedtype='None or float', doc="""The regularization term lambda. Increase this when the kernel matrix is not positive definite. If None, some regularization will be provided upon necessity""") def __init__(self, kernel=None, **kwargs): """Initialize a GPR regression analysis. Parameters ---------- kernel : Kernel a kernel object defining the covariance between instances. (Defaults to SquaredExponentialKernel if None in arguments) """ # init base class first Classifier.__init__(self, **kwargs) # It does not make sense to calculate a confusion matrix for a GPR # XXX it does ;) it will be a RegressionStatistics actually ;-) # So if someone desires -- let him have it # self.ca.enable('training_stats', False) # set kernel: if kernel is None: kernel = SquaredExponentialKernel() debug("GPR", "No kernel was provided, falling back to default: %s" % kernel) self.__kernel = kernel # append proper clf_internal depending on the kernel # TODO: add "__tags__" to kernels since the check # below does not scale if isinstance(kernel, GeneralizedLinearKernel) or \ isinstance(kernel, LinearKernel): self.__tags__ += ['linear'] else: self.__tags__ += ['non-linear'] if externals.exists('openopt') \ and not 'has_sensitivity' in self.__tags__: self.__tags__ += ['has_sensitivity'] # No need to initialize conditional attributes. Unless they got set # they would raise an exception self.predicted_variances = # None self.log_marginal_likelihood = None self._init_internals() pass def _init_internals(self): """Reset some internal variables to None. To be used in constructor and untrain() """ self._train_fv = None self._labels = None self._km_train_train = None self._train_labels = None self._alpha = None self._L = None self._LL = None # XXX EO: useful for model selection but not working in general # self.__kernel.reset() pass def __repr__(self): """String summary of the object """ return super(GPR, self).__repr__( prefixes=['kernel=%s' % self.__kernel]) def compute_log_marginal_likelihood(self): """ Compute log marginal likelihood using self.train_fv and self.targets. """ if __debug__: debug("GPR", "Computing log_marginal_likelihood") self.ca.log_marginal_likelihood = \ -0.5*Ndot(self._train_labels, self._alpha) - \ Nlog(self._L.diagonal()).sum() - \ self._km_train_train.shape[0] * _halflog2pi return self.ca.log_marginal_likelihood def compute_gradient_log_marginal_likelihood(self): """Compute gradient of the log marginal likelihood. This version use a more compact formula provided by Williams and Rasmussen book. """ # XXX EO: check whether the precomputed self.alpha self.Kinv # are actually the ones corresponding to the hyperparameters # used to compute this gradient! # YYY EO: currently this is verified outside gpr.py but it is # not an efficient solution. # XXX EO: Do some memoizing since it could happen that some # hyperparameters are kept constant by user request, so we # don't need (somtimes) to recompute the corresponding # gradient again. COULD THIS BE TAKEN INTO ACCOUNT BY THE # NEW CACHED KERNEL INFRASTRUCTURE? # self.Kinv = np.linalg.inv(self._C) # Faster: Kinv = SLcho_solve(self._LL, np.eye(self._L.shape[0])) alphalphaT = np.dot(self._alpha[:,None], self._alpha[None,:]) tmp = alphalphaT - Kinv # Pass tmp to __kernel and let it compute its gradient terms. # This scales up to huge number of hyperparameters: grad_LML_hypers = self.__kernel.compute_lml_gradient( tmp, self._train_fv) grad_K_sigma_n = 2.0*self.params.sigma_noise*np.eye(tmp.shape[0]) # Add the term related to sigma_noise: # grad_LML_sigma_n = 0.5 * np.trace(np.dot(tmp,grad_K_sigma_n)) # Faster formula: tr(AB) = (A*B.T).sum() grad_LML_sigma_n = 0.5 * (tmp * (grad_K_sigma_n).T).sum() lml_gradient = np.hstack([grad_LML_sigma_n, grad_LML_hypers]) self.log_marginal_likelihood_gradient = lml_gradient return lml_gradient def compute_gradient_log_marginal_likelihood_logscale(self): """Compute gradient of the log marginal likelihood when hyperparameters are in logscale. This version use a more compact formula provided by Williams and Rasmussen book. """ # Kinv = np.linalg.inv(self._C) # Faster: Kinv = SLcho_solve(self._LL, np.eye(self._L.shape[0])) alphalphaT = np.dot(self._alpha[:,None], self._alpha[None,:]) tmp = alphalphaT - Kinv grad_LML_log_hypers = \ self.__kernel.compute_lml_gradient_logscale(tmp, self._train_fv) grad_K_log_sigma_n = 2.0 * self.params.sigma_noise ** 2 * np.eye(Kinv.shape[0]) # Add the term related to sigma_noise: # grad_LML_log_sigma_n = 0.5 * np.trace(np.dot(tmp, grad_K_log_sigma_n)) # Faster formula: tr(AB) = (A * B.T).sum() grad_LML_log_sigma_n = 0.5 * (tmp * (grad_K_log_sigma_n).T).sum() lml_gradient = np.hstack([grad_LML_log_sigma_n, grad_LML_log_hypers]) self.log_marginal_likelihood_gradient = lml_gradient return lml_gradient ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, flavor='auto', **kwargs): """Returns a sensitivity analyzer for GPR. Parameters ---------- flavor : str What sensitivity to provide. Valid values are 'linear', 'model_select', 'auto'. In case of 'auto' selects 'linear' for linear kernel and 'model_select' for the rest. 'linear' corresponds to GPRLinearWeights and 'model_select' to GRPWeights """ # XXX The following two lines does not work since # self.__kernel is instance of LinearKernel and not # just LinearKernel. How to fix? # YYY yoh is not sure what is the problem... LinearKernel is actually # kernel.LinearKernel so everything shoudl be ok if flavor == 'auto': flavor = ('model_select', 'linear')\ [int(isinstance(self.__kernel, GeneralizedLinearKernel) or isinstance(self.__kernel, LinearKernel))] if __debug__: debug("GPR", "Returning '%s' sensitivity analyzer" % flavor) # Return proper sensitivity if flavor == 'linear': return GPRLinearWeights(self, **kwargs) elif flavor == 'model_select': # sanity check if not ('has_sensitivity' in self.__tags__): raise ValueError, \ "model_select flavor is not available probably " \ "due to not available 'openopt' module" return GPRWeights(self, **kwargs) else: raise ValueError, "Flavor %s is not recognized" % flavor def _train(self, data): """Train the classifier using `data` (`Dataset`). """ # local bindings for faster lookup params = self.params retrainable = params.retrainable if retrainable: newkernel = False newL = False _changedData = self._changedData self._train_fv = train_fv = data.samples # GRP relies on numerical labels # yoh: yeah -- GPR now is purely regression so no conversion # is necessary train_labels = data.sa[self.get_space()].value self._train_labels = train_labels if not retrainable or _changedData['traindata'] \ or _changedData.get('kernel_params', False): if __debug__: debug("GPR", "Computing train train kernel matrix") self.__kernel.compute(train_fv) self._km_train_train = km_train_train = asarray(self.__kernel) newkernel = True if retrainable: self._km_train_test = None # reset to facilitate recomputation else: if __debug__: debug("GPR", "Not recomputing kernel since retrainable and " "nothing has changed") km_train_train = self._km_train_train # reuse if not retrainable or newkernel or _changedData['params']: if __debug__: debug("GPR", "Computing L. sigma_noise=%g" \ % params.sigma_noise) # XXX it seems that we do not need binding to object, but may be # commented out code would return? self._C = km_train_train + \ params.sigma_noise ** 2 * \ np.identity(km_train_train.shape[0], 'd') # The following decomposition could raise # np.linalg.linalg.LinAlgError because of numerical # reasons, due to the too rapid decay of 'self._C' # eigenvalues. In that case we try adding a small constant # to self._C, e.g. epsilon=1.0e-20. It should be a form of # Tikhonov regularization. This is equivalent to adding # little white gaussian noise to data. # # XXX EO: how to choose epsilon? # # Cholesky decomposition is provided by three different # NumPy/SciPy routines (fastest first): # 1) self._LL = scipy.linalg.cho_factor(self._C, lower=True) # self._L = L = np.tril(self._LL[0]) # 2) self._L = scipy.linalg.cholesky(self._C, lower=True) # 3) self._L = numpy.linalg.cholesky(self._C) # Even though 1 is the fastest we choose 2 since 1 does # not return a clean lower-triangular matrix (see docstring). # PBS: I just made it so the KernelMatrix is regularized # all the time. I figured that if ever you were going to # use regularization, you would want to set it yourself # and use the same value for all folds of your data. # YOH: Ideally so, but in real "use cases" some might have no # clue, also our unittests (actually clfs_examples) might # fail without any good reason. So lets return a magic with # an option to forbid any regularization (if lm is None) try: # apply regularization lm, C = params.lm, self._C if lm is not None: epsilon = lm * np.eye(C.shape[0]) self._L = SLcholesky(C + epsilon, lower=True) else: # do 10 attempts to raise each time by 10 self._L = _SLcholesky_autoreg(C, nsteps=None, lower=True) self._LL = (self._L, True) except SLAError: raise SLAError("Kernel matrix is not positive, definite. " "Try increasing the lm parameter.") pass newL = True else: if __debug__: debug("GPR", "Not computing L since kernel, data and params " "stayed the same") # XXX we leave _alpha being recomputed, although we could check # if newL or _changedData['targets'] # if __debug__: debug("GPR", "Computing alpha") # L = self._L # reuse # self._alpha = NLAsolve(L.transpose(), # NLAsolve(L, train_labels)) # Faster: self._alpha = SLcho_solve(self._LL, train_labels) # compute only if the state is enabled if self.ca.is_enabled('log_marginal_likelihood'): self.compute_log_marginal_likelihood() pass if retrainable: # we must assign it only if it is retrainable self.ca.retrained = not newkernel or not newL if __debug__: debug("GPR", "Done training") pass @accepts_dataset_as_samples def _predict(self, data): """ Predict the output for the provided data. """ retrainable = self.params.retrainable ca = self.ca if not retrainable or self._changedData['testdata'] \ or self._km_train_test is None: if __debug__: debug('GPR', "Computing train test kernel matrix") self.__kernel.compute(self._train_fv, data) km_train_test = asarray(self.__kernel) if retrainable: self._km_train_test = km_train_test ca.repredicted = False else: if __debug__: debug('GPR', "Not recomputing train test kernel matrix") km_train_test = self._km_train_test ca.repredicted = True predictions = Ndot(km_train_test.transpose(), self._alpha) if ca.is_enabled('predicted_variances'): # do computation only if conditional attribute was enabled if not retrainable or self._km_test_test is None \ or self._changedData['testdata']: if __debug__: debug('GPR', "Computing test test kernel matrix") self.__kernel.compute(data) km_test_test = asarray(self.__kernel) if retrainable: self._km_test_test = km_test_test else: if __debug__: debug('GPR', "Not recomputing test test kernel matrix") km_test_test = self._km_test_test if __debug__: debug("GPR", "Computing predicted variances") L = self._L # v = NLAsolve(L, km_train_test) # Faster: piv = np.arange(L.shape[0]) v = SL.lu_solve((L.T, piv), km_train_test, trans=1) # self.predicted_variances = \ # Ndiag(km_test_test - Ndot(v.T, v)) \ # + self.sigma_noise**2 # Faster formula: np.diag(Ndot(v.T, v)) = (v**2).sum(0): ca.predicted_variances = Ndiag(km_test_test) - (v ** 2).sum(0) \ + self.params.sigma_noise ** 2 pass if __debug__: debug("GPR", "Done predicting") ca.estimates = predictions return predictions ##REF: Name was automagically refactored def _set_retrainable(self, value, force=False): """Internal function : need to set _km_test_test """ super(GPR, self)._set_retrainable(value, force) if force or (value and value != self.params.retrainable): self._km_test_test = None def _untrain(self): super(GPR, self)._untrain() # XXX might need to take special care for retrainable. later self._init_internals() def set_hyperparameters(self, hyperparameter): """ Set hyperparameters' values. Note that 'hyperparameter' is a sequence so the order of its values is important. First value must be sigma_noise, then other kernel's hyperparameters values follow in the exact order the kernel expect them to be. """ if hyperparameter[0] < self.params['sigma_noise'].min: raise InvalidHyperparameterError() self.params.sigma_noise = hyperparameter[0] if hyperparameter.size > 1: self.__kernel.set_hyperparameters(hyperparameter[1:]) pass return kernel = property(fget=lambda self:self.__kernel) pass class GPRLinearWeights(Sensitivity): """`SensitivityAnalyzer` that reports the weights GPR trained on a given `Dataset`. In case of LinearKernel compute explicitly the coefficients of the linear regression, together with their variances (if requested). Note that the intercept is not computed. """ variances = ConditionalAttribute(enabled=False, doc="Variances of the weights (for GeneralizedLinearKernel)") _LEGAL_CLFS = [ GPR ] def _call(self, dataset): """Extract weights from GPR """ clf = self.clf kernel = clf.kernel train_fv = clf._train_fv if isinstance(kernel, LinearKernel): Sigma_p = 1.0 else: Sigma_p = kernel.params.Sigma_p weights = Ndot(Sigma_p, Ndot(train_fv.T, clf._alpha)) if self.ca.is_enabled('variances'): # super ugly formulas that can be quite surely improved: tmp = np.linalg.inv(clf._L) Kyinv = Ndot(tmp.T, tmp) # XXX in such lengthy matrix manipulations you might better off # using np.matrix where * is a matrix product self.ca.variances = Ndiag( Sigma_p - Ndot(Sigma_p, Ndot(train_fv.T, Ndot(Kyinv, Ndot(train_fv, Sigma_p))))) return Dataset(np.atleast_2d(weights)) if externals.exists('openopt'): from mvpa2.clfs.model_selector import ModelSelector class GPRWeights(Sensitivity): """`SensitivityAnalyzer` that reports the weights GPR trained on a given `Dataset`. """ _LEGAL_CLFS = [ GPR ] def _call(self, ds_): """Extract weights from GPR .. note: Input dataset is not actually used. New dataset is constructed from what is known to the classifier """ clf = self.clf # normalize data: clf._train_labels = (clf._train_labels - clf._train_labels.mean()) \ / clf._train_labels.std() # clf._train_fv = (clf._train_fv-clf._train_fv.mean(0)) \ # /clf._train_fv.std(0) ds = dataset_wizard(samples=clf._train_fv, targets=clf._train_labels) clf.ca.enable("log_marginal_likelihood") ms = ModelSelector(clf, ds) # Note that some kernels does not have gradient yet! # XXX Make it initialize to clf's current hyperparameter values # or may be add ability to specify starting points in the constructor sigma_noise_initial = 1.0e-5 sigma_f_initial = 1.0 length_scale_initial = np.ones(ds.nfeatures)*1.0e4 # length_scale_initial = np.random.rand(ds.nfeatures)*1.0e4 hyp_initial_guess = np.hstack([sigma_noise_initial, sigma_f_initial, length_scale_initial]) fixedHypers = array([0]*hyp_initial_guess.size, dtype=bool) fixedHypers = None problem = ms.max_log_marginal_likelihood( hyp_initial_guess=hyp_initial_guess, optimization_algorithm="scipy_lbfgsb", ftol=1.0e-3, fixedHypers=fixedHypers, use_gradient=True, logscale=True) if __debug__ and 'GPR_WEIGHTS' in debug.active: problem.iprint = 1 lml = ms.solve() weights = 1.0/ms.hyperparameters_best[2:] # weight = 1/length_scale if __debug__: debug("GPR", "%s, train: shape %s, labels %s, min:max %g:%g, " "sigma_noise %g, sigma_f %g" % (clf, clf._train_fv.shape, np.unique(clf._train_labels), clf._train_fv.min(), clf._train_fv.max(), ms.hyperparameters_best[0], ms.hyperparameters_best[1])) return weights pymvpa2-2.2.0/mvpa2/clfs/knn.py000066400000000000000000000222201202542755000162250ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """k-Nearest-Neighbour classifier.""" __docformat__ = 'restructuredtext' import sys # not worthy of externals checking _dict_has_key = sys.version_info >= (2, 5) import numpy as np from mvpa2.base import warning from mvpa2.datasets.base import Dataset from mvpa2.misc.support import indent_doc from mvpa2.base.state import ConditionalAttribute from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.clfs.distance import squared_euclidean_distance __all__ = [ 'kNN' ] if __debug__: from mvpa2.base import debug class kNN(Classifier): """ k-Nearest-Neighbour classifier. This is a simple classifier that bases its decision on the distances between the training dataset samples and the test sample(s). Distances are computed using a customizable distance function. A certain number (`k`)of nearest neighbors is selected based on the smallest distances and the labels of this neighboring samples are fed into a voting function to determine the labels of the test sample. Training a kNN classifier is extremely quick, as no actual training is performed as the training dataset is simply stored in the classifier. All computations are done during classifier prediction. Ties ---- In case if voting procedure results in a tie, it is broken by choosing a class with minimal mean distance to the corresponding k-neighbors. Notes ----- If enabled, kNN stores the votes per class in the 'values' state after calling predict(). """ distances = ConditionalAttribute(enabled=False, doc="Distances computed for each sample") __tags__ = ['knn', 'non-linear', 'binary', 'multiclass', 'notrain2predict' ] def __init__(self, k=2, dfx=squared_euclidean_distance, voting='weighted', **kwargs): """ Parameters ---------- k : unsigned integer Number of nearest neighbours to be used for voting. dfx : functor Function to compute the distances between training and test samples. Default: squared euclidean distance voting : str Voting method used to derive predictions from the nearest neighbors. Possible values are 'majority' (simple majority of classes determines vote) and 'weighted' (votes are weighted according to the relative frequencies of each class in the training data). **kwargs Additional arguments are passed to the base class. """ # init base class first Classifier.__init__(self, **kwargs) self.__k = k self.__dfx = dfx self.__voting = voting self.__data = None self.__weights = None def __repr__(self, prefixes=[]): # pylint: disable-msg=W0102 """Representation of the object """ return super(kNN, self).__repr__( ["k=%d" % self.__k, "dfx=%s" % self.__dfx, "voting=%s" % repr(self.__voting)] + prefixes) ## def __str__(self): ## return "%s\n data: %s" % \ ## (Classifier.__str__(self), indent_doc(self.__data)) def _train(self, data): """Train the classifier. For kNN it is degenerate -- just stores the data. """ self.__data = data labels = data.sa[self.get_space()].value uniquelabels = data.sa[self.get_space()].unique Nuniquelabels = len(uniquelabels) if __debug__: if str(data.samples.dtype).startswith('uint') \ or str(data.samples.dtype).startswith('int'): warning("kNN: input data is in integers. " + \ "Overflow on arithmetic operations might result in"+\ " errors. Please convert dataset's samples into" +\ " floating datatype if any error is reported.") if self.__voting == 'weighted': self.__labels = labels.copy() Nlabels = len(labels) # TODO: To get proper speed up for the next line only, # histogram should be computed # via sorting + counting "same" elements while reducing. # Guaranteed complexity is NlogN whenever now it is N^2 # compute the relative proportion of samples belonging to each # class (do it in one loop to improve speed and reduce readability weights = \ [ 1.0 - ((labels == label).sum() / Nlabels) \ for label in uniquelabels ] self.__weights = dict(zip(uniquelabels, weights)) else: self.__weights = None # create dictionary with an item for each condition self.__votes_init = dict(zip(uniquelabels, [0] * Nuniquelabels)) @accepts_dataset_as_samples def _predict(self, data): """Predict the class labels for the provided data. Returns a list of class labels (one for each data sample). """ # make sure we're talking about arrays data = np.asanyarray(data) targets_sa_name = self.get_space() targets_sa = self.__data.sa[targets_sa_name] labels = targets_sa.value uniquelabels = targets_sa.unique # checks only in debug mode if __debug__: if not data.ndim == 2: raise ValueError, "Data array must be two-dimensional." if not data.shape[1] == self.__data.nfeatures: raise ValueError, "Length of data samples (features) does " \ "not match the classifier." # compute the distance matrix between training and test data with # distances stored row-wise, i.e. distances between test sample [0] # and all training samples will end up in row 0 dists = self.__dfx(self.__data.samples, data).T if self.ca.is_enabled('distances'): # .sa.copy() now does deepcopying by default self.ca.distances = Dataset(dists, fa=self.__data.sa.copy()) # determine the k nearest neighbors per test sample knns = dists.argsort(axis=1)[:, :self.__k] # predictions and votes for all samples all_votes, predictions = [], [] for inns, nns in enumerate(knns): votes = self.__votes_init.copy() # TODO: optimize! for nn in nns: votes[labels[nn]] += 1 # optionally weight votes if self.__voting == 'majority': pass elif self.__voting == 'weighted': # TODO: optimize! for ul in uniquelabels: votes[ul] *= self.__weights[ul] else: raise ValueError, "kNN told to perform unknown voting '%s'." \ % self.__voting # reverse dictionary items and sort them to get the # winners # It would be more expensive than just to look for # the maximum, but this piece should be the least # cpu-intensive while distances computation should consume # the most. Also it would allow to look and break the ties votes_reversed = sorted([(v, k) for k, v in votes.iteritems()], reverse=True) # check for ties max_vote, max_vote_label = votes_reversed[0] if len(votes_reversed) > 1 and max_vote == votes_reversed[1][0]: # figure out all ties and break them based on the mean # distance # TODO: theoretically we could break out of the loop earlier ties = [x[1] for x in votes_reversed if x[0] == max_vote] # compute mean distances to the corresponding clouds # restrict analysis only to k-nn's nns_labels = labels[nns] nns_dists = dists[inns][nns] ties_dists = [np.mean(nns_dists[nns_labels == t]) for t in ties] max_vote_label = ties[np.argmin(ties_dists)] if __debug__: debug('KNN', 'Ran into the ties: %s with votes: %s, dists: %s, max_vote %r', (ties, votes_reversed, ties_dists, max_vote_label)) all_votes.append(votes) predictions.append(max_vote_label) # store the predictions in the state. Relies on State._setitem to do # nothing if the relevant state member is not enabled self.ca.predictions = predictions self.ca.estimates = all_votes # np.array([r[1] for r in results]) return predictions def _untrain(self): """Reset trained state""" self.__data = None self.__weights = None super(kNN, self)._untrain() dfx = property(fget=lambda self: self.__dfx) pymvpa2-2.2.0/mvpa2/clfs/lars.py000066400000000000000000000221621202542755000164050ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Least angle regression (LARS).""" __docformat__ = 'restructuredtext' # system imports import numpy as np import mvpa2.base.externals as externals # do conditional to be able to build module reference if externals.exists('lars', raise_=True): import rpy2.robjects import rpy2.robjects.numpy2ri if hasattr(rpy2.robjects.numpy2ri,'activate'): rpy2.robjects.numpy2ri.activate() RRuntimeError = rpy2.robjects.rinterface.RRuntimeError r = rpy2.robjects.r r.library('lars') from mvpa2.support.rpy2_addons import Rrx2 # local imports from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples, \ FailedToPredictError from mvpa2.base.learner import FailedToTrainError from mvpa2.measures.base import Sensitivity from mvpa2.datasets.base import Dataset from mvpa2.base import warning if __debug__: from mvpa2.base import debug known_models = ('lasso', 'stepwise', 'lar', 'forward.stagewise') class LARS(Classifier): """Least angle regression (LARS). LARS is the model selection algorithm from: Bradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani, Least Angle Regression Annals of Statistics (with discussion) (2004) 32(2), 407-499. A new method for variable subset selection, with the lasso and 'epsilon' forward stagewise methods as special cases. Similar to SMLR, it performs a feature selection while performing classification, but instead of starting with all features, it starts with none and adds them in, which is similar to boosting. This learner behaves more like a ridge regression in that it returns prediction values and it treats the training labels as continuous. In the true nature of the PyMVPA framework, this algorithm is actually implemented in R by Trevor Hastie and wrapped via RPy. To make use of LARS, you must have R and RPy installed as well as the LARS contributed package. You can install the R and RPy with the following command on Debian-based machines: sudo aptitude install python-rpy python-rpy-doc r-base-dev You can then install the LARS package by running R as root and calling: install.packages() """ # XXX from yoh: it is linear, isn't it? __tags__ = [ 'lars', 'regression', 'linear', 'has_sensitivity', 'does_feature_selection', 'rpy2' ] def __init__(self, model_type="lasso", trace=False, normalize=True, intercept=True, max_steps=None, use_Gram=False, **kwargs): """ Initialize LARS. See the help in R for further details on the following parameters: Parameters ---------- model_type : string Type of LARS to run. Can be one of ('lasso', 'lar', 'forward.stagewise', 'stepwise'). trace : boolean Whether to print progress in R as it works. normalize : boolean Whether to normalize the L2 Norm. intercept : boolean Whether to add a non-penalized intercept to the model. max_steps : None or int If not None, specify the total number of iterations to run. Each iteration adds a feature, but leaving it none will add until convergence. use_Gram : boolean Whether to compute the Gram matrix (this should be false if you have more features than samples.) """ # init base class first Classifier.__init__(self, **kwargs) if not model_type in known_models: raise ValueError('Unknown model %s for LARS is specified. Known' % model_type + 'are %s' % `known_models`) # set up the params self.__type = model_type self.__normalize = normalize self.__intercept = intercept self.__trace = trace self.__max_steps = max_steps self.__use_Gram = use_Gram # pylint friendly initializations self.__lowest_Cp_step = None self.__weights = None """The beta weights for each feature.""" self.__trained_model = None """The model object after training that will be used for predictions.""" def __repr__(self): """String summary of the object """ return "LARS(type='%s', normalize=%s, intercept=%s, trace=%s, " \ "max_steps=%s, use_Gram=%s, " \ "enable_ca=%s)" % \ (self.__type, self.__normalize, self.__intercept, self.__trace, self.__max_steps, self.__use_Gram, str(self.ca.enabled)) def _train(self, data): """Train the classifier using `data` (`Dataset`). """ targets = data.sa[self.get_space()].value[:, np.newaxis] # some non-Python friendly R-lars arguments lars_kwargs = {'use.Gram': self.__use_Gram} if self.__max_steps is not None: lars_kwargs['max.steps'] = self.__max_steps trained_model = r.lars(data.samples, targets, type=self.__type, normalize=self.__normalize, intercept=self.__intercept, trace=self.__trace, **lars_kwargs ) #import pydb #pydb.debugger() # find the step with the lowest Cp (risk) # it is often the last step if you set a max_steps # must first convert dictionary to array Cp_vals = None try: Cp_vals = np.asanyarray(Rrx2(trained_model, 'Cp')) except TypeError, e: raise FailedToTrainError, \ "Failed to train %s on %s. Got '%s' while trying to access " \ "trained model %s" % (self, data, e, trained_model) if Cp_vals is None: # if there were no any -- just choose 0th lowest_Cp_step = 0 elif np.isnan(Cp_vals[0]): # sometimes may come back nan, so just pick the last one lowest_Cp_step = len(Cp_vals)-1 else: # determine the lowest lowest_Cp_step = Cp_vals.argmin() self.__lowest_Cp_step = lowest_Cp_step # set the weights to the lowest Cp step self.__weights = np.asanyarray( Rrx2(trained_model, 'beta'))[lowest_Cp_step] self.__trained_model = trained_model # bind to an instance # # set the weights to the final state # self.__weights = self.__trained_model['beta'][-1,:] @accepts_dataset_as_samples def _predict(self, data): """ Predict the output for the provided data. """ # predict with the final state (i.e., the last step) # predict with the lowest Cp step try: res = r.predict(self.__trained_model, data, mode='step', s=self.__lowest_Cp_step) #s=self.__trained_model['beta'].shape[0]) fit = np.atleast_1d(Rrx2(res, 'fit')) except RRuntimeError, e: raise FailedToPredictError, \ "Failed to predict on %s using %s. Exceptions was: %s" \ % (data, self, e) self.ca.estimates = fit return fit def _init_internals(self): """Reinitialize all internals """ self.__lowest_Cp_step = None self.__weights = None """The beta weights for each feature.""" self.__trained_model = None """The model object after training that will be used for predictions.""" def _untrain(self): super(LARS, self)._untrain() self._init_internals() ##REF: Name was automagically refactored def _get_feature_ids(self): """Return ids of the used features """ return np.where(np.abs(self.__weights)>0)[0] ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, **kwargs): """Returns a sensitivity analyzer for LARS.""" return LARSWeights(self, **kwargs) weights = property(lambda self: self.__weights) class LARSWeights(Sensitivity): """`SensitivityAnalyzer` that reports the weights LARS trained on a given `Dataset`. """ _LEGAL_CLFS = [ LARS ] def _call(self, dataset=None): """Extract weights from LARS classifier. LARS always has weights available, so nothing has to be computed here. """ clf = self.clf weights = clf.weights if __debug__: debug('LARS', "Extracting weights for LARS - "+ "Result: min=%f max=%f" %\ (np.min(weights), np.max(weights))) return Dataset(np.atleast_2d(weights)) pymvpa2-2.2.0/mvpa2/clfs/libsmlrc/000077500000000000000000000000001202542755000166765ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/clfs/libsmlrc/__init__.py000066400000000000000000000037311202542755000210130ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wraper for the stepwise_regression function for SMLR.""" if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.clfs.libsmlrc') import numpy as np import ctypes as C import os import sys from mvpa2.clfs.libsmlrc.ctypes_helper import extend_args, c_darray # connect to library that's in this directory if sys.platform == 'win32': # on windows things get tricky as we compile this lib as an extension # so it get a .pyd name suffix instead of .dll smlrlib = C.cdll[os.path.join(os.path.dirname(__file__), 'smlrc.pyd')] elif sys.platform == 'darwin': # look for .so extension on Mac (not .dylib this time) smlrlib = C.cdll[os.path.join(os.path.dirname(__file__), 'smlrc.so')] else: smlrlib = np.ctypeslib.load_library('smlrc', os.path.dirname(__file__)) # wrap the stepwise function def stepwise_regression(*args): func = smlrlib.stepwise_regression func.argtypes = [C.c_int, C.c_int, c_darray, C.c_int, C.c_int, c_darray, C.c_int, C.c_int, c_darray, C.c_int, C.c_int, c_darray, C.c_int, C.c_int, c_darray, C.c_int, c_darray, C.c_int, c_darray, C.c_int, c_darray, C.c_int, C.c_int, C.c_double, C.c_float, C.c_float, C.c_int64] func.restype = C.c_long # get the new arglist arglist = extend_args(*args) return func(*arglist) if __debug__: debug('INIT', 'mvpa2.clfs.libsmlrc end') pymvpa2-2.2.0/mvpa2/clfs/libsmlrc/ctypes_helper.py000066400000000000000000000045631202542755000221260ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helpers for wrapping C libraries with ctypes.""" import numpy as np import ctypes as C # define an array type to help with wrapping c_darray = np.ctypeslib.ndpointer(dtype=np.float64, flags='aligned,contiguous') c_larray = np.ctypeslib.ndpointer(dtype=np.int64, flags='aligned,contiguous') c_farray = np.ctypeslib.ndpointer(dtype=np.float32, flags='aligned,contiguous') c_iarray = np.ctypeslib.ndpointer(dtype=np.int32, flags='aligned,contiguous') def extend_args(*args): """Turn ndarray arguments into dims and arrays.""" arglist = [] for arg in args: if isinstance(arg, np.ndarray): # add the dimensions arglist.extend(arg.shape) # just append the arg arglist.append(arg) return arglist ############################################################# # I'm not sure the rest is helpful, but I'll keep it for now. ############################################################# # incomplete type conversion typemap = { np.float64: C.c_double, np.float32: C.c_float, np.int64: C.c_int64, np.int32: C.c_int32} def process_args(*args): """Turn ndarray arguments into dims and array pointers for calling a ctypes-wrapped function.""" arglist = [] for arg in args: if isinstance(arg, np.ndarray): # add the dimensions arglist.extend(arg.shape) # add the pointer to the ndarray arglist.append(arg.ctypes.data_as( C.POINTER(typemap[arg.dtype.type]))) else: # just append the arg arglist.append(arg) return arglist def get_argtypes(*args): argtypes = [] for arg in args: if isinstance(arg, np.ndarray): # add the dimensions argtypes.extend([C.c_int]*len(arg.shape)) # add the pointer to the ndarray argtypes.append(np.ctypeslib.ndpointer(dtype=arg.dtype)) else: # try and figure out the type argtypes.append(arg) return argtypes pymvpa2-2.2.0/mvpa2/clfs/libsmlrc/smlr.c000066400000000000000000000164261202542755000200300ustar00rootroot00000000000000/*emacs: -*- mode: c-mode; tab-width: 8; c-basic-offset: 2; indent-tabs-mode: t -*- ex: set sts=4 ts=8 sw=4 noet: */ #include #include #include #include #include #include /* Following code is for compatibility with Python3 Example taken from: http://docs.python.org/py3k/howto/cporting.html#module-initialization-and-state */ struct module_state { PyObject *error; }; #if PY_MAJOR_VERSION >= 3 #define GETSTATE(m) ((struct module_state*)PyModule_GetState(m)) #else #define GETSTATE(m) (&_state) static struct module_state _state; #endif static PyObject * error_out(PyObject *m) { struct module_state *st = GETSTATE(m); PyErr_SetString(st->error, "Error!"); return NULL; } static PyMethodDef smlr_methods[] = { {"error_out", (PyCFunction)error_out, METH_NOARGS, NULL}, {NULL, NULL} }; #if PY_MAJOR_VERSION >= 3 static int smlr_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(GETSTATE(m)->error); return 0; } static int smlr_clear(PyObject *m) { Py_CLEAR(GETSTATE(m)->error); return 0; } static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "smlr", NULL, sizeof(struct module_state), smlr_methods, NULL, smlr_traverse, smlr_clear, NULL }; #define INITERROR return NULL PyObject * PyInit_smlr(void) #else #define INITERROR return void initsmlr(void) #endif { #if PY_MAJOR_VERSION >= 3 PyObject *module = PyModule_Create(&moduledef); #else PyObject *module = Py_InitModule("smlr", smlr_methods); #endif if (module == NULL) INITERROR; struct module_state *st = GETSTATE(module); st->error = PyErr_NewException("smlr.Error", NULL, NULL); if (st->error == NULL) { Py_DECREF(module); INITERROR; } #if PY_MAJOR_VERSION >= 3 return module; #endif } /* End of Python 3 compatibility layer */ /* Workaround for Python 3, which does not define the DL_EXPORT macro any more */ #ifndef DL_EXPORT /* declarations for DLL import/export */ #define DL_EXPORT(RTYPE) RTYPE #endif DL_EXPORT(int) stepwise_regression(int w_rows, int w_cols, double w[], int X_rows, int X_cols, double X[], int XY_rows, int XY_cols, double XY[], int Xw_rows, int Xw_cols, double Xw[], int E_rows, int E_cols, double E[], int ac_rows, double ac[], int lm_2_ac_rows, double lm_2_ac[], int S_rows, double S[], int M, int maxiter, double convergence_tol, float resamp_decay, float min_resamp, int verbose, long long int seed) { // initialize the iterative optimization double incr = DBL_MAX; long non_zero = 0; long wasted_basis = 0; long needed_basis = 0; int changed = 0; // for calculating stepwise changes double w_old; double w_new; double w_diff; double grad; double XdotP; double E_new_m; double sum2_w_diff; double sum2_w_old; long cycle = 0; int basis = 0; int m = 0; float rval = 0; // get the num features and num classes int nd = w_rows; int ns = E_rows; // loop indexes int i = 0; // pointers to elements to avoid explicit indexing double* Sp = (double*) NULL; double* Ep = (double*) NULL; double* Xp = (double*) NULL; double* Xwp = (double*) NULL; // prob of resample each weight // allocate everything in heap -- not on stack float** p_resamp = (float **)calloc(w_rows, sizeof(float*)); for (i=0; i lm_2_ac[basis]) { // more towards bounds, but keep it w_new -= lm_2_ac[basis]; changed = 1; // umark from being zero if necessary if (w_old == 0.0) { non_zero += 1; // reset the p_resample p_resamp[basis][m] = 1.0; // we needed the basis needed_basis += 1; } } else if (w_new < -lm_2_ac[basis]) { // more towards bounds, but keep it w_new += lm_2_ac[basis]; changed = 1; // umark from being zero if necessary if (w_old == 0.0) { non_zero += 1; // reset the p_resample p_resamp[basis][m] = 1.0; // we needed the basis needed_basis += 1; } } else { // gonna zero it out w_new = 0.0; // decrease the p_resamp p_resamp[basis][m] -= (p_resamp[basis][m] - min_resamp) * resamp_decay; // set the number of non-zero if (w_old == 0.0) { // we didn't change changed = 0; // and wasted a basis wasted_basis += 1; } else { // we changed changed = 1; // must update num non_zero non_zero -= 1; } } // process changes if necessary if (changed == 1) { // update the expected values w_diff = w_new - w_old; for (Sp=S, Xp=X+basis, Ep=E+m, Xwp=Xw+m; Sp 0): maxlen = max(maxlen, max(x_i.keys())) else: maxlen = max(maxlen, lx_i) # bind to instance self.data = data self.maxlen = maxlen svmc.svm_problem_l_set(prob, size) svmc.svm_problem_y_set(prob, y_array) svmc.svm_problem_x_set(prob, x_matrix) def __repr__(self): return "" % (self.size) def __del__(self): if __debug__: debug('SVM_', 'Destroying libsvm.SVMProblem %s' % `self`) svmc.delete_svm_problem(self.prob) svmc.delete_double(self.y_array) for i in range(self.size): svmc.svm_node_array_destroy(self.data[i]) svmc.svm_node_matrix_destroy(self.x_matrix) class SVMModel: def __init__(self, arg1, arg2=None): if arg2 == None: # create model from file filename = arg1 self.model = svmc.svm_load_model(filename) else: # create model from problem and parameter prob, param = arg1, arg2 self.prob = prob if param.gamma == 0: param.gamma = 1.0/prob.maxlen msg = svmc.svm_check_parameter(prob.prob, param.param) if msg: raise ValueError, msg self.model = svmc.svm_train(prob.prob, param.param) #setup some classwide variables self.nr_class = svmc.svm_get_nr_class(self.model) self.svm_type = svmc.svm_get_svm_type(self.model) #create labels(classes) intarr = svmc.new_int(self.nr_class) svmc.svm_get_labels(self.model, intarr) self.labels = int_array_to_list(intarr, self.nr_class) svmc.delete_int(intarr) #check if valid probability model self.probability = svmc.svm_check_probability_model(self.model) def __repr__(self): """ Print string representation of the model or easier comprehension and some statistics """ ret = '' def predict(self, x): data = seq_to_svm_node(x) ret = svmc.svm_predict(self.model, data) svmc.svm_node_array_destroy(data) return ret ##REF: Name was automagically refactored def get_nr_class(self): return self.nr_class ##REF: Name was automagically refactored def get_labels(self): if self.svm_type == NU_SVR \ or self.svm_type == EPSILON_SVR \ or self.svm_type == ONE_CLASS: raise TypeError, "Unable to get label from a SVR/ONE_CLASS model" return self.labels #def getParam(self): # return SVMParameter( # svmc_parameter=svmc.svm_model_param_get(self.model)) ##REF: Name was automagically refactored def predict_values_raw(self, x): #convert x into SVMNode, allocate a double array for return n = self.nr_class*(self.nr_class-1)//2 data = seq_to_svm_node(x) dblarr = svmc.new_double(n) svmc.svm_predict_values(self.model, data, dblarr) ret = double_array_to_list(dblarr, n) svmc.delete_double(dblarr) svmc.svm_node_array_destroy(data) return ret ##REF: Name was automagically refactored def predict_values(self, x): v = self.predict_values_raw(x) if self.svm_type == NU_SVR \ or self.svm_type == EPSILON_SVR \ or self.svm_type == ONE_CLASS: return v[0] else: #self.svm_type == C_SVC or self.svm_type == NU_SVC count = 0 d = {} for i in range(len(self.labels)): for j in range(i+1, len(self.labels)): d[self.labels[i], self.labels[j]] = v[count] d[self.labels[j], self.labels[i]] = -v[count] count += 1 return d ##REF: Name was automagically refactored def predict_probability(self, x): #c code will do nothing on wrong type, so we have to check ourself if self.svm_type == NU_SVR or self.svm_type == EPSILON_SVR: raise TypeError, "call get_svr_probability or get_svr_pdf " \ "for probability output of regression" elif self.svm_type == ONE_CLASS: raise TypeError, "probability not supported yet for one-class " \ "problem" #only C_SVC, NU_SVC goes in if not self.probability: raise TypeError, "model does not support probabiliy estimates" #convert x into SVMNode, alloc a double array to receive probabilities data = seq_to_svm_node(x) dblarr = svmc.new_double(self.nr_class) pred = svmc.svm_predict_probability(self.model, data, dblarr) pv = double_array_to_list(dblarr, self.nr_class) svmc.delete_double(dblarr) svmc.svm_node_array_destroy(data) p = {} for i in range(len(self.labels)): p[self.labels[i]] = pv[i] return pred, p ##REF: Name was automagically refactored def get_svr_probability(self): #leave the Error checking to svm.cpp code ret = svmc.svm_get_svr_probability(self.model) if ret == 0: raise TypeError, "not a regression model or probability " \ "information not available" return ret ##REF: Name was automagically refactored def get_svr_pdf(self): #get_svr_probability will handle error checking sigma = self.get_svr_probability() return lambda z: exp(-fabs(z)/sigma)/(2*sigma) def save(self, filename): svmc.svm_save_model(filename, self.model) def __del__(self): if __debug__: # TODO: place libsvm versioning information into externals debug('SVM_', 'Destroying libsvm v. %s SVMModel %s', (hasattr(svmc, '__version__') \ and svmc.__version__ or "unknown", `self`)) try: svmc.svm_destroy_model_helper(self.model) except Exception, e: # blind way to overcome problem of already deleted model and # "SVMModel instance has no attribute 'model'" in ignored if __debug__: debug('SVM_', 'Failed to destroy libsvm.SVMModel due to %s' % (e,)) pass ##REF: Name was automagically refactored def get_total_n_sv(self): return svmc.svm_model_l_get(self.model) ##REF: Name was automagically refactored def get_n_sv(self): """Returns a list with the number of support vectors per class. """ return [ svmc.int_getitem(svmc.svm_model_nSV_get( self.model ), i) for i in range( self.nr_class ) ] ##REF: Name was automagically refactored def get_sv(self): """Returns an array with the all support vectors. array( nSV x ) """ return svmc.svm_node_matrix2numpy_array( svmc.svm_model_SV_get(self.model), self.get_total_n_sv(), self.prob.maxlen) ##REF: Name was automagically refactored def get_sv_coef(self): """Return coefficients for SVs... Needs to be used directly with caution! Summary on what is happening in libsvm internals with sv_coef svm_model's sv_coef (especially) are "cleverly" packed into a matrix nr_class - 1 x #SVs_total which stores coefficients for nr_class x (nr_class-1) / 2 binary classifiers' SV coefficients. For classifier i-vs-j General packing rule can be described as: i-th row contains sv_coefficients for SVs of class i it took in all i-vs-j or j-vs-i classifiers. Another useful excerpt from svm.cpp is // classifier (i,j): coefficients with // i are in sv_coef[j-1][nz_start[i]...], // j are in sv_coef[i][nz_start[j]...] It can also be described as j-th column lists coefficients for SV # j which belongs to some class C, which it took (if it was an SV, ie != 0) in classifiers i vs C (iff iC) This way no byte of storage is wasted but imho such setup is quite convolved """ return svmc.doubleppcarray2numpy_array( svmc.svm_model_sv_coef_get(self.model), self.nr_class - 1, self.get_total_n_sv()) ##REF: Name was automagically refactored def get_rho(self): """Return constant(s) in decision function(s) (if multi-class)""" return double_array_to_list(svmc.svm_model_rho_get(self.model), self.nr_class * (self.nr_class-1)//2) pymvpa2-2.2.0/mvpa2/clfs/libsvmc/sens.py000066400000000000000000000167251202542755000200630ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Provide sensitivity measures for libsvm's SVM.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import warning from mvpa2.base.state import ConditionalAttribute from mvpa2.base.param import Parameter from mvpa2.base.types import asobjarray from mvpa2.measures.base import Sensitivity from mvpa2.datasets.base import Dataset if __debug__: from mvpa2.base import debug class LinearSVMWeights(Sensitivity): """`SensitivityAnalyzer` for the LIBSVM implementation of a linear SVM. """ _ATTRIBUTE_COLLECTIONS = ['params'] split_weights = Parameter(False, allowedtype='bool', doc="If binary classification either to sum SVs per each " "class separately. Note: be careful with interpretation" " of the values") def __init__(self, clf, **kwargs): """Initialize the analyzer with the classifier it shall use. Parameters ---------- clf : LinearSVM classifier to use. Only classifiers sub-classed from `LinearSVM` may be used. """ # init base classes first Sensitivity.__init__(self, clf, **kwargs) def _call(self, dataset, callables=[]): # local bindings clf = self.clf model = clf.model # Labels for sensitivities to be returned sens_labels = None if clf.__is_regression__: nr_class = None svm_labels = None # shouldn't bother to provide "targets" for regressions else: nr_class = model.nr_class svm_labels = model.labels # No need to warn since now we by default we do not do # anything evil and provide labels -- so it is up for a user # to decide either he wants to do something silly #if nr_class != 2: # warning("You are estimating sensitivity for SVM %s trained on %d" % # (str(clf), nr_class) + # " classes. Make sure that it is what you intended to do" ) svcoef = np.matrix(model.get_sv_coef()) svs = np.matrix(model.get_sv()) rhos = np.asarray(model.get_rho()) if self.params.split_weights: if nr_class != 2: raise NotImplementedError, \ "Cannot compute per-class weights for" \ " non-binary classification task" # libsvm might have different idea on the ordering # of labels, so we would need to map them back explicitely ds_labels = list(dataset.sa[clf.get_space()].unique) # labels in the dataset senses = [None for i in ds_labels] # first label is given positive value for i, (c, l) in enumerate( [(svcoef > 0, lambda x: x), (svcoef < 0, lambda x: x*-1)] ): # convert to array, and just take the meaningful dimension c_ = c.A[0] # NOTE svm_labels are numerical; ds_labels are literal senses[ds_labels.index( clf._attrmap.to_literal(svm_labels[i]))] = \ (l(svcoef[:, c_] * svs[c_, :])).A[0] weights = np.array(senses) sens_labels = svm_labels else: # XXX yoh: .mean() is effectively # averages across "sensitivities" of all paired classifiers (I # think). See more info on this topic in svm.py on how sv_coefs # are stored # # First multiply SV coefficients with the actual SVs to get # weighted impact of SVs on decision, then for each feature # take mean across SVs to get a single weight value # per feature if nr_class is None or nr_class <= 2: # as simple as this weights = (svcoef * svs).A # and only in case of classification if nr_class: # ??? First label seems corresponds to positive sens_labels = [tuple(svm_labels[::-1])] else: # we need to compose correctly per each pair of classifiers. # See docstring for get_sv_coef for more details on internal # structure of bloody storage # total # of pairs npairs = nr_class * (nr_class-1)/2 # # of SVs in each class NSVs_perclass = model.get_n_sv() # indices where each class starts in each row of SVs # name is after similar variable in libsvm internals nz_start = np.cumsum([0] + NSVs_perclass[:-1]) nz_end = nz_start + NSVs_perclass # reserve storage weights = np.zeros((npairs, svs.shape[1])) ipair = 0 # index of the pair """ // classifier (i,j): coefficients with // i are in sv_coef[j-1][nz_start[i]...], // j are in sv_coef[i][nz_start[j]...] """ sens_labels = [] for i in xrange(nr_class): for j in xrange(i+1, nr_class): weights[ipair, :] = np.asarray( svcoef[j-1, nz_start[i]:nz_end[i]] * svs[nz_start[i]:nz_end[i]] + svcoef[i, nz_start[j]:nz_end[j]] * svs[nz_start[j]:nz_end[j]] ) # ??? First label corresponds to positive # that is why [j], [i] sens_labels += [(svm_labels[j], svm_labels[i])] ipair += 1 # go to the next pair assert(ipair == npairs) if __debug__ and 'SVM' in debug.active: if nr_class: nsvs = model.get_n_sv() else: nsvs = model.get_total_n_sv() if clf.__is_regression__: svm_type = clf._svm_impl # type of regression else: svm_type = '%d-class SVM(%s)' % (nr_class, clf._svm_impl) debug('SVM', "Extracting weights for %s: #SVs=%s, " % \ (svm_type, nsvs) + \ " SVcoefshape=%s SVs.shape=%s Rhos=%s." % \ (svcoef.shape, svs.shape, rhos) + \ " Result: min=%f max=%f" % (np.min(weights), np.max(weights))) ds_kwargs = {} if nr_class: # for classification only # and we should have prepared the labels assert(sens_labels is not None) if len(clf._attrmap): if isinstance(sens_labels[0], tuple): sens_labels = asobjarray(sens_labels) sens_labels = clf._attrmap.to_literal(sens_labels, recurse=True) # NOTE: `weights` is already and always 2D ds_kwargs = dict(sa={clf.get_space(): sens_labels}) weights_ds = Dataset(weights, **ds_kwargs) weights_ds.sa['biases'] = rhos return weights_ds _customizeDocInherit = True pymvpa2-2.2.0/mvpa2/clfs/libsvmc/svm.py000066400000000000000000000270451202542755000177150ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wrap the libsvm package into a very simple class interface.""" __docformat__ = 'restructuredtext' import numpy as np import operator from mvpa2.base import warning from mvpa2.base.state import ConditionalAttribute from mvpa2.base.learner import FailedToTrainError from mvpa2.clfs.base import accepts_dataset_as_samples, \ accepts_samples_as_dataset from mvpa2.clfs._svmbase import _SVM from mvpa2.clfs.libsvmc import _svm from mvpa2.kernels.libsvm import LinearLSKernel from mvpa2.clfs.libsvmc.sens import LinearSVMWeights if __debug__: from mvpa2.base import debug # we better expose those since they are mentioned in docstrings # although pylint would not be happy from mvpa2.clfs.libsvmc._svmc import \ C_SVC, NU_SVC, EPSILON_SVR, \ NU_SVR, LINEAR, POLY, RBF, SIGMOID, \ PRECOMPUTED, ONE_CLASS def _data2ls(data): return np.asarray(data).astype(float) class SVM(_SVM): """Support Vector Machine Classifier. This is a simple interface to the libSVM package. """ # Since this is internal feature of LibSVM, this conditional attribute is present # here probabilities = ConditionalAttribute(enabled=False, doc="Estimates of samples probabilities as provided by LibSVM") # TODO p is specific for SVR _KNOWN_PARAMS = [ 'epsilon', 'probability', 'shrinking', 'weight_label', 'weight'] #_KNOWN_KERNEL_PARAMS = [ 'cache_size' ] _KNOWN_SENSITIVITIES = {'linear':LinearSVMWeights, } _KNOWN_IMPLEMENTATIONS = { 'C_SVC' : (_svm.svmc.C_SVC, ('C',), ('binary', 'multiclass'), 'C-SVM classification'), 'NU_SVC' : (_svm.svmc.NU_SVC, ('nu',), ('binary', 'multiclass'), 'nu-SVM classification'), 'ONE_CLASS' : (_svm.svmc.ONE_CLASS, (), ('oneclass',), 'one-class-SVM'), 'EPSILON_SVR' : (_svm.svmc.EPSILON_SVR, ('C', 'tube_epsilon'), ('regression',), 'epsilon-SVM regression'), 'NU_SVR' : (_svm.svmc.NU_SVR, ('nu', 'tube_epsilon'), ('regression',), 'nu-SVM regression') } __default_kernel_class__ = LinearLSKernel __tags__ = _SVM.__tags__ + [ 'libsvm' ] def __init__(self, **kwargs): # XXX Determine which parameters depend on each other and implement # safety/simplifying logic around them # already done for: nr_weight # thought: weight and weight_label should be a dict """Interface class to LIBSVM classifiers and regressions. Default implementation (C/nu/epsilon SVM) is chosen depending on the given parameters (C/nu/tube_epsilon). """ svm_impl = kwargs.get('svm_impl', None) # Depending on given arguments, figure out desired SVM # implementation if svm_impl is None: for arg, impl in [ ('tube_epsilon', 'EPSILON_SVR'), ('C', 'C_SVC'), ('nu', 'NU_SVC') ]: if kwargs.has_key(arg): svm_impl = impl if __debug__: debug('SVM', 'No implementation was specified. Since ' '%s is given among arguments, assume %s' % (arg, impl)) break if svm_impl is None: svm_impl = 'C_SVC' if __debug__: debug('SVM', 'Assign C_SVC "by default"') kwargs['svm_impl'] = svm_impl # init base class _SVM.__init__(self, **kwargs) self._svm_type = self._KNOWN_IMPLEMENTATIONS[svm_impl][0] if 'nu' in self._KNOWN_PARAMS and 'epsilon' in self._KNOWN_PARAMS: # overwrite eps param with new default value (information # taken from libSVM docs self.params['epsilon']._set_default(0.001) self.__model = None """Holds the trained SVM.""" def _train(self, dataset): """Train SVM """ targets_sa_name = self.get_space() # name of targets sa targets_sa = dataset.sa[targets_sa_name] # actual targets sa # libsvm needs doubles src = _data2ls(dataset) # libsvm cannot handle literal labels labels = self._attrmap.to_numeric(targets_sa.value).tolist() svmprob = _svm.SVMProblem(labels, src ) # Translate few params TRANSLATEDICT = {'epsilon': 'eps', 'tube_epsilon': 'p'} args = [] for paramname, param in self.params.items() \ + self.kernel_params.items(): if paramname in TRANSLATEDICT: argname = TRANSLATEDICT[paramname] elif paramname in _svm.SVMParameter.default_parameters: argname = paramname else: if __debug__: debug("SVM_", "Skipping parameter %s since it is not known " "to libsvm" % paramname) continue args.append( (argname, param.value) ) # ??? All those parameters should be fetched if present from # **kwargs and create appropriate parameters within .params or # .kernel_params libsvm_param = _svm.SVMParameter( kernel_type=self.params.kernel.as_raw_ls(),# Just an integer ID svm_type=self._svm_type, **dict(args)) """Store SVM parameters in libSVM compatible format.""" if self.params.has_key('C'):#svm_type in [_svm.svmc.C_SVC]: Cs = self._get_cvec(dataset) if len(Cs)>1: C0 = abs(Cs[0]) scale = 1.0/(C0)#*np.sqrt(C0)) # so we got 1 C per label uls = self._attrmap.to_numeric(targets_sa.unique) if len(Cs) != len(uls): raise ValueError, "SVM was parameterized with %d Cs but " \ "there are %d labels in the dataset" % \ (len(Cs), len(targets_sa.unique)) weight = [ c*scale for c in Cs ] # All 3 need to be set to take an effect libsvm_param._set_parameter('weight', weight) libsvm_param._set_parameter('nr_weight', len(weight)) libsvm_param._set_parameter('weight_label', uls) libsvm_param._set_parameter('C', Cs[0]) try: self.__model = _svm.SVMModel(svmprob, libsvm_param) except Exception, e: raise FailedToTrainError(str(e)) @accepts_samples_as_dataset def _predict(self, data): """Predict values for the data """ # libsvm needs doubles src = _data2ls(data) ca = self.ca predictions = [ self.model.predict(p) for p in src ] if ca.is_enabled('estimates'): if self.__is_regression__: estimates = [ self.model.predict_values_raw(p)[0] for p in src ] else: # if 'trained_targets' are literal they have to be mapped if ( np.issubdtype(self.ca.trained_targets.dtype, 'c') or np.issubdtype(self.ca.trained_targets.dtype, 'U') ): trained_targets = self._attrmap.to_numeric( self.ca.trained_targets) else: trained_targets = self.ca.trained_targets nlabels = len(trained_targets) # XXX We do duplicate work. model.predict calls # predict_values_raw internally and then does voting or # thresholding. So if speed becomes a factor we might # want to move out logic from libsvm over here to base # predictions on obtined values, or adjust libsvm to # spit out values from predict() as well if nlabels == 2: # Apperently libsvm reorders labels so we need to # track (1,0) values instead of (0,1) thus just # lets take negative reverse estimates = [ self.model.predict_values(p)[(trained_targets[1], trained_targets[0])] for p in src ] if len(estimates) > 0: if __debug__: debug("SVM", "Forcing estimates to be ndarray and reshaping" " them into 1D vector") estimates = np.asarray(estimates).reshape(len(estimates)) else: # In multiclass we return dictionary for all pairs # of labels, since libsvm does 1-vs-1 pairs estimates = [ self.model.predict_values(p) for p in src ] ca.estimates = estimates if ca.is_enabled("probabilities"): # XXX Is this really necesssary? yoh don't think so since # assignment to ca is doing the same #self.probabilities = [ self.model.predict_probability(p) # for p in src ] try: ca.probabilities = [ self.model.predict_probability(p) for p in src ] except TypeError: warning("Current SVM %s doesn't support probability " % self + " estimation.") return predictions def summary(self): """Provide quick summary over the SVM classifier""" s = super(SVM, self).summary() if self.trained: s += '\n # of SVs: %d' % self.__model.get_total_n_sv() try: prm = _svm.svmc.svm_model_param_get(self.__model.model) C = _svm.svmc.svm_parameter_C_get(prm) # extract information of how many SVs sit inside the margin, # i.e. so called 'bounded SVs' inside_margin = np.sum( # take 0.99 to avoid rounding issues np.abs(self.__model.get_sv_coef()) >= 0.99*_svm.svmc.svm_parameter_C_get(prm)) s += ' #bounded SVs:%d' % inside_margin s += ' used C:%5g' % C except: pass return s def _untrain(self): """Untrain libsvm's SVM: forget the model """ if __debug__ and "SVM" in debug.active: debug("SVM", "Untraining %s and destroying libsvm model" % self) super(SVM, self)._untrain() del self.__model self.__model = None model = property(fget=lambda self: self.__model) """Access to the SVM model.""" # try to configure libsvm 'noise reduction'. Due to circular imports, # we can't check externals here since it would not work. try: # if externals.exists('libsvm verbosity control'): if __debug__ and "LIBSVM" in debug.active: debug("LIBSVM", "Setting verbosity for libsvm to 255") _svm.svmc.svm_set_verbosity(255) else: _svm.svmc.svm_set_verbosity(0) except AttributeError: warning("Available LIBSVM has no way to control verbosity of the output") # Assign SVM class to limited set of LinearSVMWeights LinearSVMWeights._LEGAL_CLFS = [SVM] pymvpa2-2.2.0/mvpa2/clfs/libsvmc/svmc.i000066400000000000000000000172121202542755000176530ustar00rootroot00000000000000//-*-c++-*- /*emacs: -*- mode: c++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: t -*- ex: set sts=4 ts=4 sw=4 noet: */ %module svmc %{ #include "svm.h" #include #include // Compatibility layer for Python3 #if PY_MAJOR_VERSION >= 3 # define PyInt_AS_LONG PyLong_AS_LONG #endif // Just to assure its availability even on older versions of libsvm // where no such preprocessor variable was available (when was it? ;)) #ifndef LIBSVM_VERSION # define LIBSVM_VERSION 0 #endif enum { __version__ = LIBSVM_VERSION }; #if LIBSVM_VERSION < 300 struct svm_model { svm_parameter param;// parameter int nr_class; // number of classes, = 2 in regression/one class svm int l; // total #SV svm_node **SV; // SVs (SV[l]) double **sv_coef; // coefficients for SVs in decision functions (sv_coef[k-1][l]) double *rho; // constants in decision functions (rho[k*(k-1)/2]) double *probA; // pariwise probability information double *probB; // for classification only int *label; // label of each class (label[k]) int *nSV; // number of SVs for each class (nSV[k]) // nSV[0] + nSV[1] + ... + nSV[k-1] = l // XXX int free_sv; // 1 if svm_model is created by svm_load_model // 0 if svm_model is created by svm_train }; #endif /* convert node matrix into a numpy array */ static PyObject* svm_node_matrix2numpy_array(struct svm_node** matrix, int rows, int cols) { npy_intp dims[2] = {rows,cols}; PyObject* array = 0; array = PyArray_SimpleNew ( 2, dims, NPY_DOUBLE ); /* array subscription is [row][column] */ PyArrayObject* a = (PyArrayObject*) array; double* data = (double *)a->data; int i,j; for (i = 0; idata; int i,j; for (i = 0; i= 2.89 */ #if LIBSVM_VERSION >= 289 /* borrowed from original libsvm code */ static void print_null(const char *s) {} static void print_string_stdout(const char *s) { fputs(s,stdout); fflush(stdout); } /* provide convenience wrapper */ void svm_set_verbosity(int verbosity_flag){ if (verbosity_flag) # if LIBSVM_VERSION < 291 svm_print_string = &print_string_stdout; else svm_print_string = &print_null; # else svm_set_print_string_function(&print_string_stdout); else svm_set_print_string_function(&print_null); # endif } #endif %} %init %{ import_array(); %} enum { __version__ = LIBSVM_VERSION }; enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */ struct svm_parameter { int svm_type; int kernel_type; int degree; // for poly double gamma; // for poly/rbf/sigmoid double coef0; // for poly/sigmoid // these are for training only double cache_size; // in MB double eps; // stopping criteria double C; // for C_SVC, EPSILON_SVR and NU_SVR int nr_weight; // for C_SVC int *weight_label; // for C_SVC double* weight; // for C_SVC double nu; // for NU_SVC, ONE_CLASS, and NU_SVR double p; // for EPSILON_SVR int shrinking; // use the shrinking heuristics int probability; }; struct svm_problem { int l; double *y; struct svm_node **x; }; // // svm_model // struct svm_model { svm_parameter param; // parameter int nr_class; // number of classes, = 2 in regression/one class svm int l; // total #SV svm_node **SV; // SVs (SV[l]) double **sv_coef; // coefficients for SVs in decision functions (sv_coef[k-1][l]) double *rho; // constants in decision functions (rho[k*(k-1)/2]) double *probA; // pariwise probability information double *probB; // for classification only int *label; // label of each class (label[k]) int *nSV; // number of SVs for each class (nSV[k]) // nSV[0] + nSV[1] + ... + nSV[k-1] = l // XXX int free_sv; // 1 if svm_model is created by svm_load_model // 0 if svm_model is created by svm_train }; /* one really wants to configure verbosity within python! */ void svm_set_verbosity(int verbosity_flag); struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); int svm_save_model(const char *model_file_name, const struct svm_model *model); struct svm_model *svm_load_model(const char *model_file_name); int svm_get_svm_type(const struct svm_model *model); int svm_get_nr_class(const struct svm_model *model); void svm_get_labels(const struct svm_model *model, int *label); double svm_get_svr_probability(const struct svm_model *model); void svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* decvalue); double svm_predict(const struct svm_model *model, const struct svm_node *x); double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); %inline %{ /* Just for bloody compatibility with deprecated method, which would not be used any ways, but declaring it for newer versions should allow to build across different versions without patching */ #if LIBSVM_VERSION >= 310 void svm_destroy_model(struct svm_model *model); #endif %} /* Not necessary: the weight vector is (de)allocated at python-part void svm_destroy_param(struct svm_parameter *param); */ const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); int svm_check_probability_model(const struct svm_model *model); static PyObject* svm_node_matrix2numpy_array(struct svm_node** matrix, int rows, int cols); static PyObject* doubleppcarray2numpy_array(double** data, int rows, int cols); %include carrays.i %array_functions(int,int) %array_functions(double,double) %inline %{ struct svm_node *svm_node_array(int size) { return (struct svm_node *)malloc(sizeof(struct svm_node)*size); } void svm_node_array_set(struct svm_node *array, int i, int index, double value) { array[i].index = index; array[i].value = value; } void svm_node_array_set(struct svm_node *array, PyObject *indices, PyObject *values) { int length = PyList_Size(indices); int i; for (i = 0; i< length; i++){ array[i].index = (int)PyInt_AS_LONG(PyList_GetItem(indices, i)); PyObject* obj = PyArray_GETITEM(values, PyArray_GETPTR1(values, i)); array[i].value = (double)PyFloat_AS_DOUBLE(obj); Py_DECREF(obj); } } void svm_node_array_destroy(struct svm_node *array) { free(array); } struct svm_node **svm_node_matrix(int size) { return (struct svm_node **)malloc(sizeof(struct svm_node *)*size); } void svm_node_matrix_set(struct svm_node **matrix, int i, struct svm_node* array) { matrix[i] = array; } void svm_node_matrix_destroy(struct svm_node **matrix) { free(matrix); } void svm_destroy_model_helper(svm_model *model_ptr) { #if LIBSVM_VERSION >= 300 // yoh: Silence the blurber // fprintf(stderr, "warning: svm_destroy_model is deprecated and should not be used. Please use svm_free_and_destroy_model(svm_model **model_ptr_ptr)\n"); svm_free_and_destroy_model(&model_ptr); #else svm_destroy_model(model_ptr); #endif } %} pymvpa2-2.2.0/mvpa2/clfs/mass.py000066400000000000000000000107431202542755000164110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generic wrappers for learners (classifiers) provided by R's MASS Highly experimental and ad-hoc -- primary use was to verify LDA/QDA results, thus not included in the mvpa2.suite ATM. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import warning, externals from mvpa2.base.state import ConditionalAttribute from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.base.learner import FailedToTrainError, FailedToPredictError # do conditional to be able to build module reference if externals.exists('mass', raise_=True): import rpy2.robjects import rpy2.robjects.numpy2ri if hasattr(rpy2.robjects.numpy2ri,'activate'): rpy2.robjects.numpy2ri.activate() RRuntimeError = rpy2.robjects.rinterface.RRuntimeError r = rpy2.robjects.r r.library('MASS') from mvpa2.support.rpy2_addons import Rrx, Rrx2 class MASSLearnerAdapter(Classifier): """Generic adapter for instances of learners provided by R's MASS Provides basic adaptation of interface for classifiers from MASS library (e.g. QDA, LDA), by adapting interface. Examples -------- >>> if externals.exists('mass'): ... from mvpa2.testing.datasets import datasets ... mass_qda = MASSLearnerAdapter('qda', tags=['non-linear', 'multiclass'], enable_ca=['posterior']) ... mass_qda.train(datasets['uni2large']) ... mass_qda.predict(datasets['uni2large']) # doctest: +SKIP """ __tags__ = ['mass', 'rpy2'] posterior = ConditionalAttribute(enabled=False, doc='Posterior probabilities if provided by classifier') def __init__(self, learner, kwargs=None, kwargs_predict=None, tags=None, **kwargs_): """ Parameters ---------- learner : string kwargs : dict, optional kwargs_predict : dict, optional tags : list of string What additional tags to attach to this classifier. Tags are used in the queries to classifier or regression warehouses. """ self._learner = learner self._kwargs = kwargs or {} self._kwargs_predict = kwargs_predict or {} if tags: # So we make a per-instance copy self.__tags__ = self.__tags__ + tags Classifier.__init__(self, **kwargs_) def __repr__(self): """String representation of `SKLLearnerWrapper` """ return Classifier.__repr__(self, prefixes=[repr(self._learner), 'kwargs=%r' % (self._kwargs,)]) def _train(self, dataset): """Train the skl learner using `dataset` (`Dataset`). """ targets_sa = dataset.sa[self.get_space()] targets = targets_sa.value if not 'regression' in self.__tags__: targets = self._attrmap.to_numeric(targets) try: self._R_model = r[self._learner]( dataset.samples, targets, **self._kwargs) except RRuntimeError, e: raise FailedToTrainError, \ "Failed to train %s on %s. Got '%s' during call to fit()." \ % (self, dataset, e) @accepts_dataset_as_samples def _predict(self, data): """Predict using the trained MASS learner """ try: output = r.predict(self._R_model, data, **self._kwargs_predict) # TODO: access everything computed, and assign to # ca's: res.names classes = Rrx2(output, 'class') # TODO: move to helper function to be used generically if classes.rclass[0] == 'factor': classes = [int(classes.levels[i-1]) for i in classes] if 'posterior' in output.names: self.ca.posterior = np.asarray(Rrx2(output, 'posterior')) res = np.asarray(classes) except Exception, e: raise FailedToPredictError, \ "Failed to predict %s on data of shape %s. Got '%s' during" \ " call to predict()." % (self, data.shape, e) return res pymvpa2-2.2.0/mvpa2/clfs/meta.py000066400000000000000000001521111202542755000163700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Classes for meta classifiers -- classifiers which use other classifiers Meta Classifiers can be grouped according to their function as :group BoostedClassifiers: CombinedClassifier MulticlassClassifier SplitClassifier :group ProxyClassifiers: ProxyClassifier BinaryClassifier MappedClassifier FeatureSelectionClassifier :group PredictionsCombiners for CombinedClassifier: PredictionsCombiner MaximalVote MeanPrediction """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.misc.args import group_kwargs from mvpa2.base.types import is_sequence_type from mvpa2.base.param import Parameter from mvpa2.generators.splitters import Splitter from mvpa2.generators.partition import NFoldPartitioner from mvpa2.datasets.miscfx import get_samples_by_attr from mvpa2.misc.attrmap import AttributeMap from mvpa2.base.dochelpers import _str from mvpa2.base.state import ConditionalAttribute, ClassWithCollections from mvpa2.clfs.base import Classifier from mvpa2.clfs.distance import cartesian_distance from mvpa2.misc.transformers import first_axis_mean from mvpa2.measures.base import \ BoostedClassifierSensitivityAnalyzer, ProxyClassifierSensitivityAnalyzer, \ MappedClassifierSensitivityAnalyzer, \ FeatureSelectionClassifierSensitivityAnalyzer, \ RegressionAsClassifierSensitivityAnalyzer, \ BinaryClassifierSensitivityAnalyzer, \ _dont_force_slaves from mvpa2.base import warning if __debug__: from mvpa2.base import debug class BoostedClassifier(Classifier): """Classifier containing the farm of other classifiers. Should rarely be used directly. Use one of its childs instead """ # should not be needed if we have prediction_estimates upstairs raw_predictions = ConditionalAttribute(enabled=False, doc="Predictions obtained from each classifier") raw_estimates = ConditionalAttribute(enabled=False, doc="Estimates obtained from each classifier") def __init__(self, clfs=None, propagate_ca=True, **kwargs): """Initialize the instance. Parameters ---------- clfs : list list of classifier instances to use (slave classifiers) propagate_ca : bool either to propagate enabled ca into slave classifiers. It is in effect only when slaves get assigned - so if state is enabled not during construction, it would not necessarily propagate into slaves kwargs : dict dict of keyworded arguments which might get used by State or Classifier """ if clfs == None: clfs = [] Classifier.__init__(self, **kwargs) self.__clfs = None """Pylint friendly definition of __clfs""" self.__propagate_ca = propagate_ca """Enable current enabled ca in slave classifiers""" self._set_classifiers(clfs) """Store the list of classifiers""" def __repr__(self, prefixes=[]): if self.__clfs is None or len(self.__clfs)==0: #prefix_ = "clfs=%s" % repr(self.__clfs) prefix_ = [] else: prefix_ = ["clfs=[%s,...]" % repr(self.__clfs[0])] return super(BoostedClassifier, self).__repr__(prefix_ + prefixes) def _train(self, dataset): """Train `BoostedClassifier` """ for clf in self.__clfs: clf.train(dataset) def _posttrain(self, dataset): """Custom posttrain of `BoostedClassifier` Harvest over the trained classifiers if it was asked to so """ Classifier._posttrain(self, dataset) if self.params.retrainable: self.__changedData_isset = False def _get_feature_ids(self): """Custom _get_feature_ids for `BoostedClassifier` """ # return union of all used features by slave classifiers feature_ids = set([]) for clf in self.__clfs: feature_ids = feature_ids.union(set(clf.ca.feature_ids)) return list(feature_ids) def _predict(self, dataset): """Predict using `BoostedClassifier` """ raw_predictions = [ clf.predict(dataset) for clf in self.__clfs ] self.ca.raw_predictions = raw_predictions assert(len(self.__clfs)>0) if self.ca.is_enabled("estimates"): if np.array([x.ca.is_enabled("estimates") for x in self.__clfs]).all(): estimates = [ clf.ca.estimates for clf in self.__clfs ] self.ca.raw_estimates = estimates else: warning("One or more classifiers in %s has no 'estimates' state" % self + "enabled, thus BoostedClassifier can't have" + " 'raw_estimates' conditional attribute defined") return raw_predictions def _set_classifiers(self, clfs): """Set the classifiers used by the boosted classifier We have to allow to set list of classifiers after the object was actually created. It will be used by MulticlassClassifier """ self.__clfs = clfs """Classifiers to use""" if len(clfs): # enable corresponding ca in the slave-classifiers if self.__propagate_ca: for clf in self.__clfs: clf.ca.enable(self.ca.enabled, missingok=True) # adhere to their capabilities + 'multiclass' # XXX do intersection across all classifiers! # TODO: this seems to be wrong since it can be regression etc self.__tags__ = [ 'binary', 'multiclass', 'meta' ] if len(clfs)>0: self.__tags__ += self.__clfs[0].__tags__ def _untrain(self): """Untrain `BoostedClassifier` Has to untrain any known classifier """ if not self.trained: return for clf in self.clfs: clf.untrain() super(BoostedClassifier, self)._untrain() def get_sensitivity_analyzer(self, **kwargs): """Return an appropriate SensitivityAnalyzer""" return BoostedClassifierSensitivityAnalyzer( self, **kwargs) clfs = property(fget=lambda x:x.__clfs, fset=_set_classifiers, doc="Used classifiers") class ProxyClassifier(Classifier): """Classifier which decorates another classifier Possible uses: - modify data somehow prior training/testing: * normalization * feature selection * modification - optimized classifier? """ __sa_class__ = ProxyClassifierSensitivityAnalyzer """Sensitivity analyzer to use for a generic ProxyClassifier""" def __init__(self, clf, **kwargs): """Initialize the instance of ProxyClassifier Parameters ---------- clf : Classifier Classifier to proxy, i.e. to use after decoration """ # Is done before parents __init__ since we need # it for _set_retrainable called during __init__ self.__clf = clf """Store the classifier to use.""" Classifier.__init__(self, **kwargs) # adhere to slave classifier capabilities # TODO: unittest self.__tags__ = self.__tags__[:] + ['meta'] if clf is not None: self.__tags__ += clf.__tags__ def __repr__(self, prefixes=[]): return super(ProxyClassifier, self).__repr__( ["clf=%s" % repr(self.__clf)] + prefixes) def __str__(self, *args, **kwargs): return super(ProxyClassifier, self).__str__( str(self.__clf), *args, **kwargs) def summary(self): s = super(ProxyClassifier, self).summary() if self.trained: s += "\n Slave classifier summary:" + \ '\n + %s' % \ (self.__clf.summary().replace('\n', '\n |')) return s def _set_retrainable(self, value, force=False): # XXX Lazy implementation self.clf._set_retrainable(value, force=force) super(ProxyClassifier, self)._set_retrainable(value, force) if value and not (self.ca['retrained'] is self.clf.ca['retrained']): if __debug__: debug("CLFPRX", "Rebinding conditional attributes from slave clf %s", (self.clf,)) self.ca['retrained'] = self.clf.ca['retrained'] self.ca['repredicted'] = self.clf.ca['repredicted'] def _train(self, dataset): """Train `ProxyClassifier` """ # base class does nothing much -- just proxies requests to underlying # classifier self.__clf.train(dataset) # for the ease of access # TODO: if to copy we should exclude some ca which are defined in # base Classifier (such as training_time, predicting_time) # YOH: for now _copy_ca_ would copy only set ca variables. If # anything needs to be overriden in the parent's class, it is # welcome to do so #self.ca._copy_ca_(self.__clf, deep=False) def _predict(self, dataset): """Predict using `ProxyClassifier` """ clf = self.__clf if self.ca.is_enabled('estimates'): clf.ca.enable(['estimates']) result = clf.predict(dataset) # for the ease of access self.ca._copy_ca_(self.__clf, ['estimates'], deep=False) return result def _untrain(self): """Untrain ProxyClassifier """ if not self.__clf is None: self.__clf.untrain() super(ProxyClassifier, self)._untrain() @group_kwargs(prefixes=['slave_'], passthrough=True) def get_sensitivity_analyzer(self, slave_kwargs, **kwargs): """Return an appropriate SensitivityAnalyzer Parameters ---------- slave_kwargs : dict Arguments to be passed to the proxied (slave) classifier **kwargs Specific additional arguments for the sensitivity analyzer for the class. See documentation of a corresponding `.__sa_class__`. """ return self.__sa_class__( self, analyzer=self.__clf.get_sensitivity_analyzer(**slave_kwargs), **kwargs) clf = property(lambda x:x.__clf, doc="Used `Classifier`") # # Various combiners for CombinedClassifier # class PredictionsCombiner(ClassWithCollections): """Base class for combining decisions of multiple classifiers""" def train(self, clfs, dataset): """PredictionsCombiner might need to be trained Parameters ---------- clfs : list of Classifier List of classifiers to combine. Has to be classifiers (not pure predictions), since combiner might use some other conditional attributes (value's) instead of pure prediction's dataset : Dataset training data in this case """ pass def __call__(self, clfs, dataset): """Call function Parameters ---------- clfs : list of Classifier List of classifiers to combine. Has to be classifiers (not pure predictions), since combiner might use some other conditional attributes (value's) instead of pure prediction's """ raise NotImplementedError class MaximalVote(PredictionsCombiner): """Provides a decision using maximal vote rule""" predictions = ConditionalAttribute(enabled=True, doc="Voted predictions") estimates = ConditionalAttribute(enabled=False, doc="Estimates keep counts across classifiers for each label/sample") # TODO: Might get a parameter to use raw decision estimates if # voting is not unambigous (ie two classes have equal number of # votes def __init__(self, **kwargs): PredictionsCombiner.__init__(self, **kwargs) def __call__(self, clfs, dataset): """Actuall callable - perform voting Extended functionality which might not be needed actually: Since `BinaryClassifier` might return a list of possible predictions (not just a single one), we should consider all of those MaximalVote doesn't care about dataset itself """ if len(clfs)==0: return [] # to don't even bother all_label_counts = None for clf in clfs: # Lets check first if necessary conditional attribute is enabled if not clf.ca.is_enabled("predictions"): raise ValueError, "MaximalVote needs classifiers (such as " + \ "%s) with state 'predictions' enabled" % clf predictions = clf.ca.predictions if all_label_counts is None: all_label_counts = [ {} for i in xrange(len(predictions)) ] # for every sample for i in xrange(len(predictions)): prediction = predictions[i] # XXX fishy location due to literal labels, # TODO simplify assumptions and logic if isinstance(prediction, basestring) or \ not is_sequence_type(prediction): prediction = (prediction,) for label in prediction: # for every label # XXX we might have multiple labels assigned # but might not -- don't remember now if not all_label_counts[i].has_key(label): all_label_counts[i][label] = 0 all_label_counts[i][label] += 1 predictions = [] # select maximal vote now for each sample for i in xrange(len(all_label_counts)): label_counts = all_label_counts[i] # lets do explicit search for max so we know # if it is unique maxk = [] # labels of elements with max vote maxv = -1 for k, v in label_counts.iteritems(): if v > maxv: maxk = [k] maxv = v elif v == maxv: maxk.append(k) assert len(maxk) >= 1, \ "We should have obtained at least a single key of max label" if len(maxk) > 1: warning("We got multiple labels %s which have the " % maxk + "same maximal vote %d. XXX disambiguate" % maxv) predictions.append(maxk[0]) ca = self.ca ca.estimates = all_label_counts ca.predictions = predictions return predictions class MeanPrediction(PredictionsCombiner): """Provides a decision by taking mean of the results """ predictions = ConditionalAttribute(enabled=True, doc="Mean predictions") estimates = ConditionalAttribute(enabled=True, doc="Predictions from all classifiers are stored") def __call__(self, clfs, dataset): """Actuall callable - perform meaning """ if len(clfs)==0: return [] # to don't even bother all_predictions = [] for clf in clfs: # Lets check first if necessary conditional attribute is enabled if not clf.ca.is_enabled("predictions"): raise ValueError, "MeanPrediction needs learners (such " \ " as %s) with state 'predictions' enabled" % clf all_predictions.append(clf.ca.predictions) # compute mean all_predictions = np.asarray(all_predictions) predictions = np.mean(all_predictions, axis=0) ca = self.ca ca.estimates = all_predictions ca.predictions = predictions return predictions class ClassifierCombiner(PredictionsCombiner): """Provides a decision using training a classifier on predictions/estimates TODO: implement """ predictions = ConditionalAttribute(enabled=True, doc="Trained predictions") def __init__(self, clf, variables=None): """Initialize `ClassifierCombiner` Parameters ---------- clf : Classifier Classifier to train on the predictions variables : list of str List of conditional attributes stored in 'combined' classifiers, which to use as features for training this classifier """ PredictionsCombiner.__init__(self) self.__clf = clf """Classifier to train on `variables` ca of provided classifiers""" if variables == None: variables = ['predictions'] self.__variables = variables """What conditional attributes of the classifiers to use""" def _untrain(self): """It might be needed to untrain used classifier""" if self.__clf: self.__clf._untrain() def __call__(self, clfs, dataset): """ """ if len(clfs)==0: return [] # to don't even bother raise NotImplementedError class CombinedClassifier(BoostedClassifier): """`BoostedClassifier` which combines predictions using some `PredictionsCombiner` functor. """ def __init__(self, clfs=None, combiner=None, **kwargs): """Initialize the instance. Parameters ---------- clfs : list of Classifier list of classifier instances to use combiner : PredictionsCombiner callable which takes care about combining multiple results into a single one (e.g. maximal vote for classification, MeanPrediction for regression)) kwargs : dict dict of keyworded arguments which might get used by State or Classifier NB: `combiner` might need to operate not on 'predictions' descrete labels but rather on raw 'class' estimates classifiers estimate (which is pretty much what is stored under `estimates` """ if clfs == None: clfs = [] BoostedClassifier.__init__(self, clfs, **kwargs) self.__combiner = combiner """Functor destined to combine results of multiple classifiers""" def __repr__(self, prefixes=[]): """Literal representation of `CombinedClassifier`. """ return super(CombinedClassifier, self).__repr__( ["combiner=%s" % repr(self.__combiner)] + prefixes) @property def combiner(self): # Decide either we are dealing with regressions # by looking at 1st learner if self.__combiner is None: self.__combiner = ( MaximalVote, MeanPrediction)[int(self.clfs[0].__is_regression__)]() return self.__combiner def summary(self): """Provide summary for the `CombinedClassifier`. """ s = super(CombinedClassifier, self).summary() if self.trained: s += "\n Slave classifiers summaries:" for i, clf in enumerate(self.clfs): s += '\n + %d clf: %s' % \ (i, clf.summary().replace('\n', '\n |')) return s def _untrain(self): """Untrain `CombinedClassifier` """ try: self.__combiner.untrain() except: pass super(CombinedClassifier, self)._untrain() def _train(self, dataset): """Train `CombinedClassifier` """ BoostedClassifier._train(self, dataset) # combiner might need to train as well self.combiner.train(self.clfs, dataset) def _predict(self, dataset): """Predict using `CombinedClassifier` """ ca = self.ca cca = self.combiner.ca BoostedClassifier._predict(self, dataset) if ca.is_enabled("estimates"): cca.enable('estimates') # combiner will make use of conditional attributes instead of only predictions # returned from _predict predictions = self.combiner(self.clfs, dataset) ca.predictions = predictions if ca.is_enabled("estimates"): if cca.is_active("estimates"): # XXX or may be we could leave simply up to accessing .combiner? ca.estimates = cca.estimates else: if __debug__: warning("Boosted classifier %s has 'estimates' state enabled," " but combiner doesn't have 'estimates' active, thus " " .estimates cannot be provided directly, access .clfs" % self) return predictions class TreeClassifier(ProxyClassifier): """`TreeClassifier` which allows to create hierarchy of classifiers Functions by grouping some labels into a single "meta-label" and training classifier first to separate between meta-labels. Then each group further proceeds with classification within each group. Possible scenarios:: TreeClassifier(SVM(), {'animate': ((1,2,3,4), TreeClassifier(SVM(), {'human': (('male', 'female'), SVM()), 'animals': (('monkey', 'dog'), SMLR())})), 'inanimate': ((5,6,7,8), SMLR())}) would create classifier which would first do binary classification to separate animate from inanimate, then for animate result it would separate to classify human vs animal and so on:: SVM / \ animate inanimate / \ SVM SMLR / \ / | \ \ human animal 5 6 7 8 | | SVM SVM / \ / \ male female monkey dog 1 2 3 4 If it is desired to have a trailing node with a single label and thus without any classification, such as in SVM / \ g1 g2 / \ 1 SVM / \ 2 3 then just specify None as the classifier to use:: TreeClassifier(SVM(), {'g1': ((1,), None), 'g2': ((1,2,3,4), SVM())}) """ _DEV__doc = """ Questions: * how to collect confusion matrices at a particular layer if such classifier is given to SplitClassifier or CVTE * What additional ca to add, something like clf_labels -- store remapped labels for the dataset clf_estimates ... * What do we store into estimates ? just estimates from the clfs[] for corresponding samples, or top level clf estimates as well? * what should be SensitivityAnalyzer? by default it would just use top slave classifier (i.e. animate/inanimate) Problems? * .clf is not actually "proxied" per se, so not sure what things should be taken care of yet... TODO: * Allow a group to be just a single category, so no further classifier is needed, it just should stay separate from the other groups Possible TODO: * Add ability to provide results of clf.estimates as features into input of clfs[]. This way we could provide additional 'similarity' information to the "other" branch """ def __init__(self, clf, groups, **kwargs): """Initialize TreeClassifier Parameters ---------- clf : Classifier Classifier to separate between the groups groups : dict of meta-label: tuple of (tuple of labels, classifier) Defines the groups of labels and their classifiers. See :class:`~mvpa2.clfs.meta.TreeClassifier` for example """ # Basic initialization ProxyClassifier.__init__(self, clf, **kwargs) # XXX RF: probably create internal structure with dictionary, # not just a tuple, and store all information in there # accordingly self._groups = groups self._index2group = groups.keys() # All processing of groups needs to be handled within _train # since labels_map is not available here and definition # is allowed to carry both symbolic and numeric values for # labels # XXX TODO due to abandoning of labels_map -- may be this is # no longer the case? # We can only assign respective classifiers self.clfs = dict([(gk, c) for gk, (ls, c) in groups.iteritems()]) """Dictionary of classifiers used by the groups""" def __repr__(self, prefixes=[]): """String representation of TreeClassifier """ prefix = "groups=%s" % repr(self._groups) return super(TreeClassifier, self).__repr__([prefix] + prefixes) def __str__(self, *args, **kwargs): return super(TreeClassifier, self).__str__( ', '.join(['%s: %s' % i for i in self.clfs.iteritems()]), *args, **kwargs) def summary(self): """Provide summary for the `TreeClassifier`. """ s = super(TreeClassifier, self).summary() if self.trained: s += "\n Node classifiers summaries:" for i, (clfname, clf) in enumerate(self.clfs.iteritems()): s += '\n + %d %s clf: %s' % \ (i, clfname, clf.summary().replace('\n', '\n |')) return s def _train(self, dataset): """Train TreeClassifier First train .clf on groupped samples, then train each of .clfs on a corresponding subset of samples. """ # Local bindings targets_sa_name = self.get_space() # name of targets sa targets_sa = dataset.sa[targets_sa_name] # actual targets sa clf, clfs, index2group = self.clf, self.clfs, self._index2group # Handle groups of labels groups = self._groups groups_labels = {} # just groups with numeric indexes label2index = {} # how to map old labels to new known = set() for gi, gk in enumerate(index2group): ls = groups[gk][0] known_already = known.intersection(ls) if len(known_already): raise ValueError, "Grouping of labels is not appropriate. " \ "Got labels %s already among known in %s. " % \ (known_already, known ) groups_labels[gk] = ls # needed? XXX for l in ls : label2index[l] = gi known = known.union(ls ) # TODO: check if different literal labels weren't mapped into # same numerical but here asked to belong to different groups # yoh: actually above should catch it # Check if none of the labels is missing from known groups dsul = set(targets_sa.unique) if known.intersection(dsul) != dsul: raise ValueError, \ "Dataset %s had some labels not defined in groups: %s. " \ "Known are %s" % \ (dataset, dsul.difference(known), known) # We can operate on the same dataset here # Nope: doesn't work nicely with the classifier like kNN # which links to the dataset used in the training, # so whenever if we simply restore labels back, we # would get kNN confused in _predict() # Therefore we need to create a shallow copy of # dataset and provide it with new labels ds_group = dataset.copy(deep=False) # assign new labels group samples into groups of labels ds_group.sa[targets_sa_name].value = [label2index[l] for l in targets_sa.value] # train primary classifier if __debug__: debug('CLFTREE', "Training primary %s on %s with targets %s", (clf, ds_group, ds_group.sa[targets_sa_name].unique)) clf.train(ds_group) # ??? should we obtain values for anything? # may be we could training values of .clfs to be added # as features to the next level -- i.e. .clfs # Proceed with next 'layer' and train all .clfs on corresponding # selection of samples # ??? should we may be allow additional 'the other' category, to # signal contain all the other categories data? probably not # since then it would lead to undetermined prediction (which # might be not a bad thing altogether...) for gk in groups.iterkeys(): clf = clfs[gk] group_labels = groups_labels[gk] if clf is None: # Trailing node if len(group_labels) != 1: raise ValueError( "Trailing nodes with no classifier assigned must have " "only a single label associated. Got %s defined in " "group %r of %s" % (group_labels, gk, self)) else: # select samples per each group ids = get_samples_by_attr(dataset, targets_sa_name, groups_labels[gk]) ds_group = dataset[ids] if __debug__: debug('CLFTREE', "Training %s for group %s on %s", (clfs[gk], gk, ds_group)) # and train corresponding slave clf clf.train(ds_group) def _untrain(self): """Untrain TreeClassifier """ super(TreeClassifier, self)._untrain() for clf in self.clfs.values(): if clf is not None: clf.untrain() def _predict(self, dataset): """ """ # Local bindings clfs, index2group, groups = self.clfs, self._index2group, self._groups clf_predictions = np.asanyarray(ProxyClassifier._predict(self, dataset)) if __debug__: debug('CLFTREE', 'Predictions %s', (clf_predictions)) # assure that predictions are indexes, ie int clf_predictions = clf_predictions.astype(int) # now for predictions pointing to specific groups go into # corresponding one # defer initialization since dtype would depend on predictions predictions = None for pred_group in set(clf_predictions): gk = index2group[pred_group] clf_ = clfs[gk] group_indexes = (clf_predictions == pred_group) if __debug__: debug('CLFTREE', 'Predicting for group %s using %s on %d samples', (gk, clf_, np.sum(group_indexes))) if clf_ is None: p = groups[gk][0] # our only label else: p = clf_.predict(dataset[group_indexes]) if predictions is None: predictions = np.zeros((len(dataset),), dtype=np.asanyarray(p).dtype) predictions[group_indexes] = p return predictions class BinaryClassifier(ProxyClassifier): """`ProxyClassifier` which maps set of two labels into +1 and -1 """ __sa_class__ = BinaryClassifierSensitivityAnalyzer def __init__(self, clf, poslabels, neglabels, **kwargs): """ Parameters ---------- clf : Classifier classifier to use poslabels : list list of labels which are treated as +1 category neglabels : list list of labels which are treated as -1 category """ ProxyClassifier.__init__(self, clf, **kwargs) # Handle labels sposlabels = set(poslabels) sneglabels = set(neglabels) # TODO: move to use AttributeMap #self._attrmap = AttributeMap(dict([(l, -1) for l in sneglabels] + # [(l, +1) for l in sposlabels])) # check if there is no overlap overlap = sposlabels.intersection(sneglabels) if len(overlap)>0: raise ValueError("Sets of positive and negative labels for " + "BinaryClassifier must not overlap. Got overlap " % overlap) self.__poslabels = list(sposlabels) self.__neglabels = list(sneglabels) # define what values will be returned by predict: if there is # a single label - return just it alone, otherwise - whole # list # Such approach might come useful if we use some classifiers # over different subsets of data with some voting later on # (1-vs-therest?) if len(self.__poslabels) > 1: self.__predictpos = self.__poslabels else: self.__predictpos = self.__poslabels[0] if len(self.__neglabels) > 1: self.__predictneg = self.__neglabels else: self.__predictneg = self.__neglabels[0] @property def poslabels(self): return self.__poslabels @property def neglabels(self): return self.__neglabels def __repr__(self, prefixes=[]): prefix = "poslabels=%s, neglabels=%s" % ( repr(self.__poslabels), repr(self.__neglabels)) return super(BinaryClassifier, self).__repr__([prefix] + prefixes) def _train(self, dataset): """Train `BinaryClassifier` """ targets_sa_name = self.get_space() idlabels = [(x, +1) for x in get_samples_by_attr(dataset, targets_sa_name, self.__poslabels)] + \ [(x, -1) for x in get_samples_by_attr(dataset, targets_sa_name, self.__neglabels)] # XXX we have to sort ids since at the moment Dataset.select_samples # doesn't take care about order idlabels.sort() # If we need all samples, why simply not perform on original # data, an just store/restore labels. But it really should be done # within Dataset.select_samples if len(idlabels) == dataset.nsamples \ and [x[0] for x in idlabels] == range(dataset.nsamples): # the last condition is not even necessary... just overly # cautious datasetselected = dataset.copy(deep=False) # no selection is needed if __debug__: debug('CLFBIN', "Created shallow copy with %d samples for binary " "classification among labels %s/+1 and %s/-1", (dataset.nsamples, self.__poslabels, self.__neglabels)) else: datasetselected = dataset[[ x[0] for x in idlabels ]] if __debug__: debug('CLFBIN', "Selected %d samples out of %d samples for binary " "classification among labels %s/+1 and %s/-1. Selected %s", (len(idlabels), dataset.nsamples, self.__poslabels, self.__neglabels, datasetselected)) # adjust the labels datasetselected.sa[targets_sa_name].value = [ x[1] for x in idlabels ] # now we got a dataset with only 2 labels if __debug__: assert(set(datasetselected.sa[targets_sa_name].unique) == set([-1, 1])) self.clf.train(datasetselected) def _predict(self, dataset): """Predict the labels for a given `dataset` Predicts using binary classifier and spits out list (for each sample) where with either poslabels or neglabels as the "label" for the sample. If there was just a single label within pos or neg labels then it would return not a list but just that single label. """ binary_predictions = ProxyClassifier._predict(self, dataset) self.ca.estimates = binary_predictions predictions = [ {-1: self.__predictneg, +1: self.__predictpos}[x] for x in binary_predictions] self.ca.predictions = predictions return predictions class MulticlassClassifier(CombinedClassifier): """`CombinedClassifier` to perform multiclass using a list of `BinaryClassifier`. such as 1-vs-1 (ie in pairs like libsvm doesn) or 1-vs-all (which is yet to think about) """ def __init__(self, clf, bclf_type="1-vs-1", **kwargs): """Initialize the instance Parameters ---------- clf : Classifier classifier based on which multiple classifiers are created for multiclass bclf_type "1-vs-1" or "1-vs-all", determines the way to generate binary classifiers """ CombinedClassifier.__init__(self, **kwargs) self.__clf = clf """Store sample instance of basic classifier""" # adhere to slave classifier capabilities if clf is not None: self.__tags__ += clf.__tags__ if not 'multiclass' in self.__tags__: self.__tags__ += ['multiclass'] # Some checks on known ways to do multiclass if bclf_type == "1-vs-1": pass elif bclf_type == "1-vs-all": # TODO raise NotImplementedError else: raise ValueError, \ "Unknown type of classifier %s for " % bclf_type + \ "BoostedMulticlassClassifier" self.__bclf_type = bclf_type # XXX fix it up a bit... it seems that MulticlassClassifier should # be actually ProxyClassifier and use BoostedClassifier internally def __repr__(self, prefixes=[]): prefix = "bclf_type=%s, clf=%s" % (repr(self.__bclf_type), repr(self.__clf)) return super(MulticlassClassifier, self).__repr__([prefix] + prefixes) def _train(self, dataset): """Train classifier """ targets_sa_name = self.get_space() # construct binary classifiers ulabels = dataset.sa[targets_sa_name].unique if self.__bclf_type == "1-vs-1": # generate pairs and corresponding classifiers biclfs = [] for i in xrange(len(ulabels)): for j in xrange(i+1, len(ulabels)): clf = self.__clf.clone() biclfs.append( BinaryClassifier( clf, poslabels=[ulabels[i]], neglabels=[ulabels[j]])) if __debug__: debug("CLFMC", "Created %d binary classifiers for %d labels", (len(biclfs), len(ulabels))) self.clfs = biclfs elif self.__bclf_type == "1-vs-all": raise NotImplementedError # perform actual training CombinedClassifier._train(self, dataset) class SplitClassifier(CombinedClassifier): """`BoostedClassifier` to work on splits of the data """ """ TODO: SplitClassifier and MulticlassClassifier have too much in common -- need to refactor: just need a splitter which would split dataset in pairs of class labels. MulticlassClassifier does just a tiny bit more which might be not necessary at all: map sets of labels into 2 categories... """ stats = ConditionalAttribute(enabled=False, doc="Resultant confusion whenever classifier trained " + "on 1 part and tested on 2nd part of each split") splits = ConditionalAttribute(enabled=False, doc= """Store the actual splits of the data. Can be memory expensive""") # ??? couldn't be training_stats since it has other meaning # here, BUT it is named so within CrossValidatedTransferError # -- unify # decided to go with overriding semantics tiny bit. For split # classifier training_stats would correspond to summary # over training errors across all splits. Later on if need comes # we might want to implement global_training_stats which would # correspond to overall confusion on full training dataset as it is # done in base Classifier #global_training_stats = ConditionalAttribute(enabled=False, # doc="Summary over training confusions acquired at each split") def __init__(self, clf, partitioner=NFoldPartitioner(), splitter=Splitter('partitions', count=2), **kwargs): """Initialize the instance Parameters ---------- clf : Classifier classifier based on which multiple classifiers are created for multiclass splitter : Splitter `Splitter` to use to split the dataset prior training """ CombinedClassifier.__init__(self, **kwargs) self.__clf = clf """Store sample instance of basic classifier""" if isinstance(splitter, type): raise ValueError, \ "Please provide an instance of a splitter, not a type." \ " Got %s" % splitter self.__partitioner = partitioner self.__splitter = splitter def _train(self, dataset): """Train `SplitClassifier` """ targets_sa_name = self.get_space() # generate pairs and corresponding classifiers bclfs = [] # local binding ca = self.ca clf_template = self.__clf if ca.is_enabled('stats'): ca.stats = clf_template.__summary_class__() if ca.is_enabled('training_stats'): clf_template.ca.enable(['training_stats']) ca.training_stats = clf_template.__summary_class__() clf_hastestdataset = hasattr(clf_template, 'testdataset') # for proper and easier debugging - first define classifiers and then # train them for split in self.__partitioner.get_partition_specs(dataset): if __debug__: debug("CLFSPL_", "Deepcopying %s for %s", (clf_template, self)) clf = clf_template.clone() bclfs.append(clf) self.clfs = bclfs self.ca.splits = [] for i, pset in enumerate(self.__partitioner.generate(dataset)): if __debug__: debug("CLFSPL", "Training classifier for split %d", (i,)) # split partitioned dataset split = [d for d in self.__splitter.generate(pset)] if ca.is_enabled("splits"): self.ca.splits.append(split) clf = self.clfs[i] # assign testing dataset if given classifier can digest it if clf_hastestdataset: clf.testdataset = split[1] clf.train(split[0]) # unbind the testdataset from the classifier if clf_hastestdataset: clf.testdataset = None if ca.is_enabled("stats"): predictions = clf.predict(split[1]) self.ca.stats.add(split[1].sa[targets_sa_name].value, predictions, clf.ca.get('estimates', None)) if __debug__: dact = debug.active if 'CLFSPL_' in dact: debug('CLFSPL_', 'Split %d:\n%s', (i, self.ca.stats)) elif 'CLFSPL' in dact: debug('CLFSPL', 'Split %d error %.2f%%', (i, self.ca.stats.summaries[-1].error)) if ca.is_enabled("training_stats"): # XXX this is broken, as it cannot deal with not yet set ca ca.training_stats += clf.ca.training_stats @group_kwargs(prefixes=['slave_'], passthrough=True) def get_sensitivity_analyzer(self, slave_kwargs={}, **kwargs): """Return an appropriate SensitivityAnalyzer for `SplitClassifier` Parameters ---------- combiner If not provided, `first_axis_mean` is assumed """ return BoostedClassifierSensitivityAnalyzer( self, sa_attr='splits', analyzer=self.__clf.get_sensitivity_analyzer( **_dont_force_slaves(slave_kwargs)), **kwargs) partitioner = property(fget=lambda x:x.__partitioner, doc="Partitioner used by SplitClassifier") splitter = property(fget=lambda x:x.__splitter, doc="Splitter used by SplitClassifier") class MappedClassifier(ProxyClassifier): """`ProxyClassifier` which uses some mapper prior training/testing. `MaskMapper` can be used just a subset of features to train/classify. Having such classifier we can easily create a set of classifiers for BoostedClassifier, where each classifier operates on some set of features, e.g. set of best spheres from SearchLight, set of ROIs selected elsewhere. It would be different from simply applying whole mask over the dataset, since here initial decision is made by each classifier and then later on they vote for the final decision across the set of classifiers. """ __sa_class__ = MappedClassifierSensitivityAnalyzer def __init__(self, clf, mapper, **kwargs): """Initialize the instance Parameters ---------- clf : Classifier classifier based on which mask classifiers is created mapper whatever `Mapper` comes handy """ ProxyClassifier.__init__(self, clf, **kwargs) self.__mapper = mapper """mapper to help us our with prepping data to training/classification""" def _train(self, dataset): """Train `MappedClassifier` """ # first train the mapper # XXX: should training be done using whole dataset or just samples # YYY: in some cases labels might be needed, thus better full dataset self.__mapper.train(dataset) # for train() we have to provide dataset -- not just samples to train! wdataset = dataset.get_mapped(self.__mapper) if __debug__: debug('CLF', "Training %s having mapped dataset into %s", (self, wdataset)) ProxyClassifier._train(self, wdataset) def _untrain(self): """Untrain `FeatureSelectionClassifier` Has to untrain any known classifier """ # untrain the mapper if self.__mapper is not None: self.__mapper.untrain() # let base class untrain as well super(MappedClassifier, self)._untrain() def _predict(self, dataset): """Predict using `MappedClassifier` """ return ProxyClassifier._predict(self, self.__mapper.forward(dataset)) def __str__(self): return _str(self, '%s-%s' % (self.mapper, self.clf)) mapper = property(lambda x:x.__mapper, doc="Used mapper") class FeatureSelectionClassifier(MappedClassifier): """This is nothing but a `MappedClassifier`. This class is only kept for (temporary) compatibility with old code. """ __tags__ = [ 'does_feature_selection', 'meta' ] class RegressionAsClassifier(ProxyClassifier): """Allows to use arbitrary regression for classification. Possible usecases: Binary Classification Any regression could easily be extended for binary classification. For instance using labels -1 and +1, regression results are quantized into labels depending on their signs Multiclass Classification Although most of the time classes are not ordered and do not have a corresponding distance matrix among them it might often be the case that there is a hypothesis that classes could be well separated in a projection to single dimension (non-linear manifold, or just linear projection). For such use regression might provide necessary means of classification """ distances = ConditionalAttribute(enabled=False, doc="Distances obtained during prediction") __sa_class__ = RegressionAsClassifierSensitivityAnalyzer def __init__(self, clf, centroids=None, distance_measure=None, **kwargs): """ Parameters ---------- clf : Classifier XXX Should become learner Regression to be used as a classifier. Although it would accept any Learner, only providing regressions would make sense. centroids : None or dict of (float or iterable) Hypothesis or prior information on location/distance of centroids for each category, provide them. If None -- during training it will choose equidistant points starting from 0.0. If dict -- keys should be a superset of labels of dataset obtained during training and each value should be numeric value or iterable if centroids are multidimensional and regression can do multidimensional regression. distance_measure : function or None What distance measure to use to find closest class label from continuous estimates provided by regression. If None, will use Cartesian distance. """ ProxyClassifier.__init__(self, clf, **kwargs) self.centroids = centroids self.distance_measure = distance_measure # Adjust tags which were copied from slave learner if self.__is_regression__: self.__tags__.pop(self.__tags__.index('regression')) # We can do any number of classes, although in most of the scenarios # multiclass performance would suck, unless there is a strong # hypothesis self.__tags__ += ['binary', 'multiclass', 'regression_based'] # XXX No support for retrainable in RegressionAsClassifier yet if 'retrainable' in self.__tags__: self.__tags__.remove('retrainable') # Pylint/user friendliness #self._trained_ul = None self._trained_attrmap = None self._trained_centers = None def __repr__(self, prefixes=[]): if self.centroids is not None: prefixes = prefixes + ['centroids=%r' % self.centroids] if self.distance_measure is not None: prefixes = prefixes + ['distance_measure=%r' % self.distance_measure] return super(RegressionAsClassifier, self).__repr__(prefixes) def _train(self, dataset): targets_sa_name = self.get_space() targets_sa = dataset.sa[targets_sa_name] # May be it is an advanced one needing training. if hasattr(self.distance_measure, 'train'): self.distance_measure.train(dataset) # Centroids ul = dataset.sa[targets_sa_name].unique if self.centroids is None: # setup centroids -- equidistant points # XXX we might preferred -1/+1 for binary... centers = np.arange(len(ul), dtype=float) else: # verify centroids and assign if not set(self.centroids.keys()).issuperset(ul): raise ValueError, \ "Provided centroids with keys %s do not cover all " \ "labels provided during training: %s" \ % (self.centroids.keys(), ul) # override with superset ul = self.centroids.keys() centers = np.array([self.centroids[k] for k in ul]) #self._trained_ul = ul # Map labels into indexes (not centers) # since later on we would need to get back (see ??? below) self._trained_attrmap = AttributeMap( map=dict([(l, i) for i,l in enumerate(ul)]), mapnumeric=True) self._trained_centers = centers # Create a shallow copy of dataset, and override labels # TODO: we could just bind .a, .fa, and copy only .sa dataset_relabeled = dataset.copy(deep=False) # ???: may be we could just craft a monster attrmap # which does min distance search upon to_literal ? dataset_relabeled.sa[targets_sa_name].value = \ self._trained_attrmap.to_numeric(targets_sa.value) ProxyClassifier._train(self, dataset_relabeled) def _predict(self, dataset): # TODO: Probably we should forwardmap labels for target # dataset so slave has proper statistics attached self.ca.estimates = regr_predictions \ = ProxyClassifier._predict(self, dataset) # Local bindings #ul = self._trained_ul attrmap = self._trained_attrmap centers = self._trained_centers distance_measure = self.distance_measure if distance_measure is None: distance_measure = cartesian_distance # Compute distances self.ca.distances = distances \ = np.array([[distance_measure(s, c) for c in centers] for s in regr_predictions]) predictions = attrmap.to_literal(np.argmin(distances, axis=1)) if __debug__: debug("CLF_", "Converted regression distances %s " "into labels %s for %s", (distances, predictions, self)) return predictions def _set_retrainable(self, value, **kwargs): if value: raise NotImplementedError, \ "RegressionAsClassifier wrappers are not yet retrainable" ProxyClassifier._set_retrainable(self, value, **kwargs) pymvpa2-2.2.0/mvpa2/clfs/model_selector.py000066400000000000000000000273711202542755000204530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Model selction.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals from mvpa2.misc.exceptions import InvalidHyperparameterError if externals.exists("scipy", raise_=True): import scipy.linalg as SL # no sense to import this module if openopt is not available if externals.exists("openopt", raise_=True): try: from openopt import NLP except ImportError: from scikits.openopt import NLP if __debug__: from mvpa2.base import debug def _openopt_debug(): # shut up or make verbose OpenOpt # (-1 = no logs, 0 = small log, 1 = verbose) if __debug__: da = debug.active if 'OPENOPT' in da: return 1 elif 'MOD_SEL' in da: return 0 return -1 class ModelSelector(object): """Model selection facility. Select a model among multiple models (i.e., a parametric model, parametrized by a set of hyperparamenters). """ def __init__(self, parametric_model, dataset): """TODO: """ self.parametric_model = parametric_model self.dataset = dataset self.hyperparameters_best = None self.log_marginal_likelihood_best = None self.problem = None pass def max_log_marginal_likelihood(self, hyp_initial_guess, maxiter=1, optimization_algorithm="scipy_cg", ftol=1.0e-3, fixedHypers=None, use_gradient=False, logscale=False): """ Set up the optimization problem in order to maximize the log_marginal_likelihood. Parameters ---------- parametric_model : Classifier the actual parameteric model to be optimized. hyp_initial_guess : numpy.ndarray set of hyperparameters' initial values where to start optimization. optimization_algorithm : string actual name of the optimization algorithm. See http://scipy.org/scipy/scikits/wiki/NLP for a comprehensive/updated list of available NLP solvers. (Defaults to 'ralg') ftol : float threshold for the stopping criterion of the solver, which is mapped in OpenOpt NLP.ftol (Defaults to 1.0e-3) fixedHypers : numpy.ndarray (boolean array) boolean vector of the same size of hyp_initial_guess; 'False' means that the corresponding hyperparameter must be kept fixed (so not optimized). (Defaults to None, which during means all True) Notes ----- The maximization of log_marginal_likelihood is a non-linear optimization problem (NLP). This fact is confirmed by Dmitrey, author of OpenOpt. """ self.problem = None self.use_gradient = use_gradient self.logscale = logscale # use log-scale on hyperparameters to enhance numerical stability self.optimization_algorithm = optimization_algorithm self.hyp_initial_guess = np.array(hyp_initial_guess) self.hyp_initial_guess_log = np.log(self.hyp_initial_guess) if fixedHypers is None: fixedHypers = np.zeros(self.hyp_initial_guess.shape[0],dtype=bool) pass self.freeHypers = -fixedHypers if self.logscale: self.hyp_running_guess = self.hyp_initial_guess_log.copy() else: self.hyp_running_guess = self.hyp_initial_guess.copy() pass self.f_last_x = None def f(x): """ Wrapper to the log_marginal_likelihood to be maximized. """ # XXX EO: since some OpenOpt NLP solvers does not # implement lower bounds the hyperparameters bounds are # implemented inside PyMVPA: (see dmitrey's post on # [SciPy-user] 20080628). # # XXX EO: OpenOpt does not implement optimization of a # subset of the hyperparameters so it is implemented here. # # XXX EO: OpenOpt does not implement logrithmic scale of # the hyperparameters (to enhance numerical stability), so # it is implemented here. self.f_last_x = x.copy() self.hyp_running_guess[self.freeHypers] = x # REMOVE print "guess:",self.hyp_running_guess,x try: if self.logscale: self.parametric_model.set_hyperparameters(np.exp(self.hyp_running_guess)) else: self.parametric_model.set_hyperparameters(self.hyp_running_guess) pass except InvalidHyperparameterError: if __debug__: debug("MOD_SEL","WARNING: invalid hyperparameters!") return -np.inf try: self.parametric_model.train(self.dataset) except (np.linalg.linalg.LinAlgError, SL.basic.LinAlgError, ValueError): # Note that ValueError could be raised when Cholesky gets Inf or Nan. if __debug__: debug("MOD_SEL", "WARNING: Cholesky failed! Invalid hyperparameters!") return -np.inf log_marginal_likelihood = self.parametric_model.compute_log_marginal_likelihood() # REMOVE print log_marginal_likelihood return log_marginal_likelihood def df(x): """ Proxy to the log_marginal_likelihood first derivative. Necessary for OpenOpt when using derivatives. """ self.hyp_running_guess[self.freeHypers] = x # REMOVE print "df guess:",self.hyp_running_guess,x # XXX EO: Most of the following lines can be skipped if # df() is computed just after f() with the same # hyperparameters. The partial results obtained during f() # are what is needed for df(). For now, in order to avoid # bugs difficult to trace, we keep this redunundancy. A # deep check with how OpenOpt works or using memoization # should solve this issue. try: if self.logscale: self.parametric_model.set_hyperparameters(np.exp(self.hyp_running_guess)) else: self.parametric_model.set_hyperparameters(self.hyp_running_guess) pass except InvalidHyperparameterError: if __debug__: debug("MOD_SEL", "WARNING: invalid hyperparameters!") return -np.inf # Check if it is possible to avoid useless computations # already done in f(). According to tests and information # collected from OpenOpt people, it is sufficiently # unexpected that the following test succeed: if np.any(x!=self.f_last_x): if __debug__: debug("MOD_SEL","UNEXPECTED: recomputing train+log_marginal_likelihood.") try: self.parametric_model.train(self.dataset) except (np.linalg.linalg.LinAlgError, SL.basic.LinAlgError, ValueError): if __debug__: debug("MOD_SEL", "WARNING: Cholesky failed! Invalid hyperparameters!") # XXX EO: which value for the gradient to return to # OpenOpt when hyperparameters are wrong? return np.zeros(x.size) log_marginal_likelihood = self.parametric_model.compute_log_marginal_likelihood() # recompute what's needed (to be safe) REMOVE IN FUTURE! pass if self.logscale: gradient_log_marginal_likelihood = self.parametric_model.compute_gradient_log_marginal_likelihood_logscale() else: gradient_log_marginal_likelihood = self.parametric_model.compute_gradient_log_marginal_likelihood() pass # REMOVE print "grad:",gradient_log_marginal_likelihood return gradient_log_marginal_likelihood[self.freeHypers] if self.logscale: # vector of hyperparameters' values where to start the search x0 = self.hyp_initial_guess_log[self.freeHypers] else: x0 = self.hyp_initial_guess[self.freeHypers] pass self.contol = 1.0e-20 # Constraint tolerance level # XXX EO: is it necessary to use contol when self.logscale is # True and there is no lb? Ask dmitrey. if self.use_gradient: # actual instance of the OpenOpt non-linear problem self.problem = NLP(f, x0, df=df, contol=self.contol, goal='maximum') else: self.problem = NLP(f, x0, contol=self.contol, goal='maximum') pass self.problem.name = "Max LogMargLikelihood" if not self.logscale: # set lower bound for hyperparameters: avoid negative # hyperparameters. Note: problem.n is the size of # hyperparameters' vector self.problem.lb = np.zeros(self.problem.n)+self.contol pass # max number of iterations for the optimizer. self.problem.maxiter = maxiter # check whether the derivative of log_marginal_likelihood converged to # zero before ending optimization self.problem.checkdf = True # set increment of log_marginal_likelihood under which the optimizer stops self.problem.ftol = ftol self.problem.iprint = _openopt_debug() return self.problem def solve(self, problem=None): """Solve the maximization problem, check outcome and collect results. """ # XXX: this method can be made more abstract in future in the # sense that it could work not only for # log_marginal_likelihood but other measures as well # (e.g. cross-valideted error). if np.all(self.freeHypers==False): # no optimization needed self.hyperparameters_best = self.hyp_initial_guess.copy() try: self.parametric_model.set_hyperparameters(self.hyperparameters_best) except InvalidHyperparameterError: if __debug__: debug("MOD_SEL", "WARNING: invalid hyperparameters!") self.log_marginal_likelihood_best = -np.inf return self.log_marginal_likelihood_best self.parametric_model.train(self.dataset) self.log_marginal_likelihood_best = self.parametric_model.compute_log_marginal_likelihood() return self.log_marginal_likelihood_best result = self.problem.solve(self.optimization_algorithm) # perform optimization! if result.stopcase == -1: # XXX: should we use debug() for the following messages? # If so, how can we track the missing convergence to a # solution? print "Unable to find a maximum to log_marginal_likelihood" elif result.stopcase == 0: print "Limits exceeded" elif result.stopcase == 1: self.hyperparameters_best = self.hyp_initial_guess.copy() if self.logscale: self.hyperparameters_best[self.freeHypers] = np.exp(result.xf) # best hyperparameters found # NOTE is it better to return a copy? else: self.hyperparameters_best[self.freeHypers] = result.xf pass self.log_marginal_likelihood_best = result.ff # actual best vuale of log_marginal_likelihood pass self.stopcase = result.stopcase return self.log_marginal_likelihood_best pass pymvpa2-2.2.0/mvpa2/clfs/plr.py000066400000000000000000000155251202542755000162460ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Penalized logistic regression classifier.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.misc.exceptions import ConvergenceError from mvpa2.base.learner import FailedToTrainError from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples if __debug__: from mvpa2.base import debug class PLR(Classifier): """Penalized logistic regression `Classifier`. """ __tags__ = [ 'plr', 'binary', 'linear', 'has_sensitivity' ] def __init__(self, lm=1, criterion=1, reduced=0.0, maxiter=20, **kwargs): """ Initialize a penalized logistic regression analysis Parameters ---------- lm : int the penalty term lambda. criterion : int the criterion applied to judge convergence. reduced : float if not 0, the rank of the data is reduced before performing the calculations. In that case, reduce is taken as the fraction of the first singular value, at which a dimension is not considered significant anymore. A reasonable criterion is reduced=0.01 maxiter : int maximum number of iterations. If no convergence occurs after this number of iterations, an exception is raised. """ # init base class first Classifier.__init__(self, **kwargs) self.__lm = lm self.__criterion = criterion self.__reduced = reduced self.__maxiter = maxiter def __repr__(self): """String summary over the object """ return """PLR(lm=%f, criterion=%d, reduced=%s, maxiter=%d, enable_ca=%s)""" % \ (self.__lm, self.__criterion, self.__reduced, self.__maxiter, str(self.ca.enabled)) def _train(self, data): """Train the classifier using `data` (`Dataset`). """ # Set up the environment for fitting the data X = data.samples.T d = self._attrmap.to_numeric(data.sa[self.get_space()].value) if set(d) != set([0, 1]): raise ValueError, \ "Regressors for logistic regression should be [0,1]. Got %s" \ %(set(d),) if self.__reduced != 0 : # Data have reduced rank from scipy.linalg import svd # Compensate for reduced rank: # Select only the n largest eigenvectors U, S, V = svd(X.T) if S[0] == 0: raise FailedToTrainError( "Data provided to PLR seems to be degenerate -- " "0-th singular value is 0") S /= S[0] V = np.matrix(V[:, :np.max(np.where(S > self.__reduced)) + 1]) # Map Data to the subspace spanned by the eigenvectors X = (X.T * V).T nfeatures, npatterns = X.shape # Weighting vector w = np.matrix(np.zeros( (nfeatures + 1, 1), 'd')) # Error for convergence criterion dw = np.matrix(np.ones( (nfeatures + 1, 1), 'd')) # Patterns of interest in the columns X = np.matrix( \ np.concatenate((X, np.ones((1, npatterns), 'd')), 0) \ ) p = np.matrix(np.zeros((1, npatterns), 'd')) # Matrix implementation of penalty term Lambda = self.__lm * np.identity(nfeatures + 1, 'd') Lambda[nfeatures, nfeatures] = 0 # Gradient g = np.matrix(np.zeros((nfeatures + 1, 1), 'd')) # Fisher information matrix H = np.matrix(np.identity(nfeatures + 1, 'd')) # Optimize k = 0 while np.sum(np.ravel(dw.A ** 2)) > self.__criterion: p[:, :] = self.__f(w.T * X) g[:, :] = X * (d - p).T - Lambda * w H[:, :] = X * np.diag(p.A1 * (1 - p.A1)) * X.T + Lambda dw[:, :] = H.I * g w += dw k += 1 if k > self.__maxiter: raise ConvergenceError, \ "More than %d Iterations without convergence" % \ (self.__maxiter) if __debug__: debug("PLR", \ "PLR converged after %d steps. Error: %g" % \ (k, np.sum(np.ravel(dw.A ** 2)))) if self.__reduced: # We have computed in rank reduced space -> # Project to original space self.w = V * w[:-1] self.bias = w[-1] else: self.w = w[:-1] self.bias = w[-1] def __f(self, y): """This is the logistic function f, that is used for determination of the vector w""" return 1. / (1 + np.exp(-y)) @accepts_dataset_as_samples def _predict(self, data): """ Predict the class labels for the provided data Returns a list of class labels """ # make sure the data are in matrix form data = np.matrix(np.asarray(data)) # get the values and then predictions values = np.ravel(self.__f(self.bias + data * self.w)) predictions = (values > 0.5).astype(int) # save the state if desired, relying on State._setitem_ to # decide if we will actually save the values self.ca.predictions = predictions self.ca.estimates = values return predictions def get_sensitivity_analyzer(self, **kwargs): """Returns a sensitivity analyzer for PLR.""" return PLRWeights(self, **kwargs) from mvpa2.base.state import ConditionalAttribute from mvpa2.base.types import asobjarray from mvpa2.measures.base import Sensitivity from mvpa2.datasets.base import Dataset class PLRWeights(Sensitivity): """`Sensitivity` reporting linear weights of PLR""" _LEGAL_CLFS = [ PLR ] def _call(self, dataset=None): """Extract weights from PLR classifier. PLR always has weights available, so nothing has to be computed here. """ clf = self.clf attrmap = clf._attrmap if attrmap: # labels (values of the corresponding space) which were used # for mapping Here we rely on the fact that they are sorted # originally (just an arange()) labels_num = attrmap.values() labels = attrmap.to_literal(asobjarray([tuple(sorted(labels_num))]), recurse=True) else: labels = [(0, 1)] # we just had our good old numeric ones ds = Dataset(clf.w.T, sa={clf.get_space(): labels, 'biases' : [clf.bias]}) return ds pymvpa2-2.2.0/mvpa2/clfs/ridge.py000066400000000000000000000065141202542755000165410ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Ridge regression classifier.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals if externals.exists("scipy", raise_=True): from scipy.linalg import lstsq from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples class RidgeReg(Classifier): """Ridge regression `Classifier`. This ridge regression adds an intercept term so your labels do not have to be zero-centered. """ __tags__ = ['ridge', 'regression', 'linear'] def __init__(self, lm=None, **kwargs): """ Initialize a ridge regression analysis. Parameters ---------- lm : float the penalty term lambda. (Defaults to .05*nFeatures) """ # init base class first Classifier.__init__(self, **kwargs) # pylint happiness self.w = None # It does not make sense to calculate a confusion matrix for a # ridge regression self.ca.enable('training_stats', False) # verify that they specified lambda self.__lm = lm # store train method config self.__implementation = 'direct' def __repr__(self): """String summary of the object """ if self.__lm is None: return """Ridge(lm=.05*nfeatures, enable_ca=%s)""" % \ (str(self.ca.enabled)) else: return """Ridge(lm=%f, enable_ca=%s)""" % \ (self.__lm, str(self.ca.enabled)) def _train(self, data): """Train the classifier using `data` (`Dataset`). """ if self.__implementation == "direct": # create matrices to solve with additional penalty term # determine the lambda matrix if self.__lm is None: # Not specified, so calculate based on .05*nfeatures Lambda = .05*data.nfeatures*np.eye(data.nfeatures) else: # use the provided penalty Lambda = self.__lm*np.eye(data.nfeatures) # add the penalty term a = np.concatenate( \ (np.concatenate((data.samples, np.ones((data.nsamples, 1))), 1), np.concatenate((Lambda, np.zeros((data.nfeatures, 1))), 1))) b = np.concatenate((data.sa[self.get_space()].value, np.zeros(data.nfeatures))) # perform the least sq regression and save the weights self.w = lstsq(a, b)[0] else: raise ValueError, "Unknown implementation '%s'" \ % self.__implementation @accepts_dataset_as_samples def _predict(self, data): """ Predict the output for the provided data. """ # predict using the trained weights pred = np.dot(np.concatenate((data, np.ones((len(data), 1))), 1), self.w) # estimates equal predictions in this case self.ca.estimates = pred return pred pymvpa2-2.2.0/mvpa2/clfs/sg/000077500000000000000000000000001202542755000155005ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/clfs/sg/__init__.py000066400000000000000000000015131202542755000176110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Classifiers provided by shogun (sg) library""" __docformat__ = 'restructuredtext' from mvpa2.base import externals if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.clfs.sg') def setup_module(module): if not externals.exists('shogun'): from nose.plugins.skip import SkipTest raise SkipTest if externals.exists('shogun'): from mvpa2.clfs.sg.svm import SVM if __debug__: debug('INIT', 'mvpa2.clfs.sg end') pymvpa2-2.2.0/mvpa2/clfs/sg/sens.py000066400000000000000000000107021202542755000170220ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Provide sensitivity measures for sg's SVM.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals if externals.exists('shogun', raise_=True): import shogun.Classifier _shogun_exposes_slavesvm_labels = externals.versions['shogun:rev'] < 4633 from mvpa2.base.state import ConditionalAttribute from mvpa2.base.types import asobjarray from mvpa2.measures.base import Sensitivity from mvpa2.datasets.base import Dataset if __debug__: from mvpa2.base import debug class LinearSVMWeights(Sensitivity): """`Sensitivity` that reports the weights of a linear SVM trained on a given `Dataset`. """ def __init__(self, clf, **kwargs): """Initialize the analyzer with the classifier it shall use. Parameters ---------- clf : LinearSVM classifier to use. Only classifiers sub-classed from `LinearSVM` may be used. """ # init base classes first Sensitivity.__init__(self, clf, **kwargs) def __sg_helper(self, svm): """Helper function to compute sensitivity for a single given SVM""" bias = svm.get_bias() # if it has get_w (linear ones like SVMOcas) -- use it, # otherwise resort to recomputing if hasattr(svm, 'get_w'): res = svm.get_w() else: svcoef = np.matrix(svm.get_alphas()) svnums = svm.get_support_vectors() svs = self.clf.traindataset.samples[svnums,:] res = (svcoef * svs).mean(axis=0).A1 return res, bias def _call(self, dataset): # XXX Hm... it might make sense to unify access functions # naming across our swig libsvm wrapper and sg access # functions for svm clf = self.clf sgsvm = clf.svm sens_labels = None if isinstance(sgsvm, shogun.Classifier.MultiClassSVM): sens, biases = [], [] nsvms = sgsvm.get_num_svms() clabels = sorted(clf._attrmap.values()) nclabels = len(clabels) sens_labels = [] isvm = 0 # index for svm among known for i in xrange(nclabels): for j in xrange(i+1, nclabels): sgsvmi = sgsvm.get_svm(isvm) labels_tuple = (clabels[i], clabels[j]) # Since we gave the labels in incremental order, # we always should be right - but it does not # hurt to check if set of labels is the same if __debug__ and _shogun_exposes_slavesvm_labels: if not sgsvmi.get_labels(): # We need to call classify() so labels get assigned # to the multiclass SVM sgsvm.classify() assert(set([sgsvmi.get_label(int(x)) for x in sgsvmi.get_support_vectors()]) == set(labels_tuple)) sens1, bias = self.__sg_helper(sgsvmi) sens.append(sens1) biases.append(bias) sens_labels += [labels_tuple[::-1]] # ??? positive first isvm += 1 assert(len(sens) == nsvms) # we should have covered all else: sens1, bias = self.__sg_helper(sgsvm) biases = np.atleast_1d(bias) sens = np.atleast_2d(sens1) if not clf.__is_regression__: assert(set(clf._attrmap.values()) == set([-1.0, 1.0])) assert(sens.shape[0] == 1) sens_labels = [(-1.0, 1.0)] ds = Dataset(np.atleast_2d(sens)) if sens_labels is not None: if isinstance(sens_labels[0], tuple): # Need to have them in array of dtype object sens_labels = asobjarray(sens_labels) if len(clf._attrmap): sens_labels = clf._attrmap.to_literal(sens_labels, recurse=True) ds.sa[clf.get_space()] = sens_labels ds.sa['biases'] = biases return ds pymvpa2-2.2.0/mvpa2/clfs/sg/svm.py000066400000000000000000000666011202542755000166700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wrap the libsvm package into a very simple class interface.""" __docformat__ = 'restructuredtext' _DEV__doc__ = """ TODOs: * dual-license under GPL for use of SG? * for recent versions add ability to specify/parametrize normalization scheme for the kernel, and reuse 'scale' now for the normalizer * Add support for simplified linear classifiers (which do not require storing all training SVs/samples to make classification in predict()) """ import numpy as np from mvpa2 import _random_seed # Rely on SG from mvpa2.base import externals, warning if externals.exists('shogun', raise_=True): import shogun.Features import shogun.Classifier import shogun.Regression #import shogun.Kernel import shogun.Library from mvpa2.kernels.sg import SGKernel, LinearSGKernel # set the default kernel here, to be able to import this module # when building the docs without SG _default_kernel_class_ = LinearSGKernel # Figure out debug IDs once and for all if hasattr(shogun.Classifier, 'M_DEBUG'): _M_DEBUG = shogun.Classifier.M_DEBUG _M_ERROR = shogun.Classifier.M_ERROR _M_GCDEBUG = None elif hasattr(shogun.Classifier, 'MSG_DEBUG'): _M_DEBUG = shogun.Classifier.MSG_DEBUG _M_ERROR = shogun.Classifier.MSG_ERROR else: _M_DEBUG, _M_ERROR = None, None warning("Could not figure out debug IDs within shogun. " "No control over shogun verbosity would be provided") # Highest level if hasattr(shogun.Classifier, 'MSG_GCDEBUG'): _M_GCDEBUG = shogun.Classifier.MSG_GCDEBUG else: _M_GCDEBUG = None else: # set a fake default kernel here, to be able to import this module # when building the docs without SG _default_kernel_class_ = None import operator from mvpa2.base.param import Parameter from mvpa2.misc.attrmap import AttributeMap from mvpa2.base import warning from mvpa2.clfs.base import accepts_dataset_as_samples, \ accepts_samples_as_dataset from mvpa2.base.learner import FailedToTrainError from mvpa2.clfs.meta import MulticlassClassifier from mvpa2.clfs._svmbase import _SVM from mvpa2.base.state import ConditionalAttribute from mvpa2.measures.base import Sensitivity from sens import * if __debug__: from mvpa2.base import debug def seed(random_seed): if __debug__: debug('SG', "Seeding shogun's RNG with %s" % random_seed) try: # reuse the same seed for shogun shogun.Library.Math_init_random(random_seed) except Exception, e: warning('Shogun cannot be seeded due to %s' % (e,)) seed(_random_seed) def _setdebug(obj, partname): """Helper to set level of debugging output for SG Parameters ---------- obj In SG debug output seems to be set per every object partname : str For what kind of object we are talking about... could be automated later on (TODO) """ if _M_DEBUG is None: return debugname = "SG_%s" % partname.upper() switch = {True: (_M_DEBUG, 'M_DEBUG', "enable"), False: (_M_ERROR, 'M_ERROR', "disable"), 'GCDEBUG': (_M_GCDEBUG, 'M_GCDEBUG', "enable")} if __debug__: if 'SG_GC' in debug.active: key = 'GCDEBUG' else: key = debugname in debug.active else: key = False sglevel, slevel, progressfunc = switch[key] if __debug__ and 'SG_' in debug.active: debug("SG_", "Setting verbosity for shogun.%s instance: %s to %s" % (partname, `obj`, slevel)) if sglevel is not None: obj.io.set_loglevel(sglevel) if __debug__ and 'SG_LINENO' in debug.active: try: obj.io.enable_file_and_line() except AttributeError, e: warning("Cannot enable SG_LINENO debug target for shogun %s" % externals.versions['shogun']) try: exec "obj.io.%s_progress()" % progressfunc except: warning("Shogun version %s has no way to enable progress" + " reports" % externals.versions['shogun']) # Still in use by non-kernel classifiers, e.g. SVMOcas def _tosg(data): """Draft helper function to convert data we have into SG suitable format TODO: Remove once kernels are implemented here (or, possibly for non-kernel solvers, modify?) """ if __debug__: debug("SG_", "Converting data for shogun into RealFeatures") features = shogun.Features.RealFeatures(data.astype('double').T) if __debug__: debug("SG__", "Done converting data for shogun into RealFeatures") _setdebug(features, 'Features') return features class SVM(_SVM): """Support Vector Machine Classifier(s) based on Shogun This is a simple base interface """ __default_kernel_class__ = _default_kernel_class_ num_threads = Parameter(1, min=1, doc='Number of threads to utilize') _KNOWN_PARAMS = [ 'epsilon' ] __tags__ = _SVM.__tags__ + [ 'sg', 'retrainable' ] # Some words of wisdom from shogun author: # XXX remove after proper comments added to implementations """ If you'd like to train linear SVMs use SGD or OCAS. These are (I am serious) the fastest linear SVM-solvers to date. (OCAS cannot do SVMs with standard additive bias, but will L2 reqularize it - though it should not matter much in practice (although it will give slightly different solutions)). Note that SGD has no stopping criterion (you simply have to specify the number of iterations) and that OCAS has a different stopping condition than svmlight for example which may be more tight and more loose depending on the problem - I sugeest 1e-2 or 1e-3 for epsilon. If you would like to train kernel SVMs use libsvm/gpdt/svmlight - depending on the problem one is faster than the other (hard to say when, I *think* when your dataset is very unbalanced chunking methods like svmlight/gpdt are better), for smaller problems definitely libsvm. If you use string kernels then gpdt/svmlight have a special 'linadd' speedup for this (requires sg 0.6.2 - there was some inefficiency in the code for python-modular before that). This is effective for big datasets and (I trained on 10 million strings based on this). And yes currently we only implemented parallel training for svmlight, however all SVMs can be evaluated in parallel. """ _KNOWN_SENSITIVITIES={'linear':LinearSVMWeights, } _KNOWN_IMPLEMENTATIONS = {} if externals.exists('shogun', raise_=True): _KNOWN_IMPLEMENTATIONS = { "libsvm" : (shogun.Classifier.LibSVM, ('C',), ('multiclass', 'binary'), "LIBSVM's C-SVM (L2 soft-margin SVM)"), "gmnp" : (shogun.Classifier.GMNPSVM, ('C',), ('multiclass', 'binary'), "Generalized Nearest Point Problem SVM"), # XXX should have been GPDT, shogun has it fixed since some version "gpbt" : (shogun.Classifier.GPBTSVM, ('C',), ('binary',), "Gradient Projection Decomposition Technique for " \ "large-scale SVM problems"), "gnpp" : (shogun.Classifier.GNPPSVM, ('C',), ('binary',), "Generalized Nearest Point Problem SVM"), ## TODO: Needs sparse features... # "svmlin" : (shogun.Classifier.SVMLin, ''), # "liblinear" : (shogun.Classifier.LibLinear, ''), # "subgradient" : (shogun.Classifier.SubGradientSVM, ''), ## good 2-class linear SVMs # "ocas" : (shogun.Classifier.SVMOcas, ''), # "sgd" : ( shogun.Classifier.SVMSGD, ''), # regressions "libsvr": (shogun.Regression.LibSVR, ('C', 'tube_epsilon',), ('regression',), "LIBSVM's epsilon-SVR"), } def __init__(self, **kwargs): """Interface class to Shogun's classifiers and regressions. Default implementation is 'libsvm'. """ svm_impl = kwargs.get('svm_impl', 'libsvm').lower() kwargs['svm_impl'] = svm_impl # init base class _SVM.__init__(self, **kwargs) self.__svm = None """Holds the trained svm.""" self.__svm_apply = None """Compatibility convenience to bind to the classify/apply method of __svm""" # Need to store original data... # TODO: keep 1 of them -- just __traindata or __traindataset # For now it is needed for computing sensitivities self.__traindataset = None # internal SG swig proxies self.__traindata = None self.__kernel = None self.__kernel_test = None self.__testdata = None # remove kernel-based for some # TODO RF: provide separate handling for non-kernel machines if svm_impl in ['svmocas']: if not (self.__kernel is None or self.__kernel.__kernel_name__ == 'linear'): raise ValueError( "%s is inherently linear, thus provided kernel %s " "is of no effect" % (svm_impl, self.__kernel)) self.__tags__.pop(self.__tags__.index('kernel-based')) self.__tags__.pop(self.__tags__.index('retrainable')) # TODO: integrate with kernel framework #def __condition_kernel(self, kernel): ## XXX I thought that it is needed only for retrainable classifier, ## but then krr gets confused, and svrlight needs it to provide ## meaningful results even without 'retraining' #if self._svm_impl in ['svrlight', 'lightsvm']: #try: #kernel.set_precompute_matrix(True, True) #except Exception, e: ## N/A in shogun 0.9.1... TODO: RF #if __debug__: #debug('SG_', "Failed call to set_precompute_matrix for %s: %s" #% (self, e)) def _train(self, dataset): """Train SVM """ # XXX watchout # self.untrain() newkernel, newsvm = False, False # local bindings for faster lookup params = self.params retrainable = self.params.retrainable targets_sa_name = self.get_space() # name of targets sa targets_sa = dataset.sa[targets_sa_name] # actual targets sa if retrainable: _changedData = self._changedData # LABELS ul = None self.__traindataset = dataset # OK -- we have to map labels since # binary ones expect -1/+1 # Multiclass expect labels starting with 0, otherwise they puke # when ran from ipython... yikes if __debug__: debug("SG_", "Creating labels instance") if self.__is_regression__: labels_ = np.asarray(targets_sa.value, dtype='double') else: ul = targets_sa.unique # ul.sort() if len(ul) == 2: # assure that we have -1/+1 _labels_dict = {ul[0]:-1.0, ul[1]:+1.0} elif len(ul) < 2: raise FailedToTrainError, \ "We do not have 1-class SVM brought into SG yet" else: # can't use plain enumerate since we need them swapped _labels_dict = dict([ (ul[i], i) for i in range(len(ul))]) # Create SG-customized attrmap to assure -1 / +1 if necessary self._attrmap = AttributeMap(_labels_dict, mapnumeric=True) if __debug__: debug("SG__", "Mapping labels using dict %s" % _labels_dict) labels_ = self._attrmap.to_numeric(targets_sa.value).astype(float) labels = shogun.Features.Labels(labels_) _setdebug(labels, 'Labels') # KERNEL # XXX cruel fix for now... whole retraining business needs to # be rethought if retrainable: _changedData['kernel_params'] = _changedData.get('kernel_params', False) # TODO: big RF to move non-kernel classifiers away if 'kernel-based' in self.__tags__ and (not retrainable or _changedData['traindata'] or _changedData['kernel_params']): # If needed compute or just collect arguments for SVM and for # the kernel if retrainable and __debug__: if _changedData['traindata']: debug("SG", "Re-Creating kernel since training data has changed") if _changedData['kernel_params']: debug("SG", "Re-Creating kernel since params %s has changed" % _changedData['kernel_params']) k = self.params.kernel k.compute(dataset) self.__kernel = kernel = k.as_raw_sg() newkernel = True self.kernel_params.reset() # mark them as not-changed #_setdebug(kernel, 'Kernels') #self.__condition_kernel(kernel) if retrainable: if __debug__: debug("SG_", "Resetting test kernel for retrainable SVM") self.__kernel_test = None # TODO -- handle _changedData['params'] correctly, ie without recreating # whole SVM Cs = None if not retrainable or self.__svm is None or _changedData['params']: # SVM if self.params.has_key('C'): Cs = self._get_cvec(dataset) # XXX do not jump over the head and leave it up to the user # ie do not rescale automagically by the number of samples #if len(Cs) == 2 and not ('regression' in self.__tags__) and len(ul) == 2: # # we were given two Cs # if np.max(C) < 0 and np.min(C) < 0: # # and both are requested to be 'scaled' TODO : # # provide proper 'features' to the parameters, # # so we could specify explicitely if to scale # # them by the number of samples here # nl = [np.sum(labels_ == _labels_dict[l]) for l in ul] # ratio = np.sqrt(float(nl[1]) / nl[0]) # #ratio = (float(nl[1]) / nl[0]) # Cs[0] *= ratio # Cs[1] /= ratio # if __debug__: # debug("SG_", "Rescaled Cs to %s to accomodate the " # "difference in number of training samples" % # Cs) # Choose appropriate implementation svm_impl_class = self.__get_implementation(ul) if __debug__: debug("SG", "Creating SVM instance of %s" % `svm_impl_class`) if self._svm_impl in ['libsvr', 'svrlight']: # for regressions constructor a bit different self.__svm = svm_impl_class(Cs[0], self.params.tube_epsilon, self.__kernel, labels) # we need to set epsilon explicitly self.__svm.set_epsilon(self.params.epsilon) elif self._svm_impl in ['krr']: self.__svm = svm_impl_class(self.params.tau, self.__kernel, labels) elif 'kernel-based' in self.__tags__: self.__svm = svm_impl_class(Cs[0], self.__kernel, labels) self.__svm.set_epsilon(self.params.epsilon) else: traindata_sg = _tosg(dataset.samples) self.__svm = svm_impl_class(Cs[0], traindata_sg, labels) self.__svm.set_epsilon(self.params.epsilon) # To stay compatible with versions across API changes in sg 1.0.0 self.__svm_apply = externals.versions['shogun'] >= '1' \ and self.__svm.apply \ or self.__svm.classify # the last one for old API # Set shrinking if 'shrinking' in params: shrinking = params.shrinking if __debug__: debug("SG_", "Setting shrinking to %s" % shrinking) self.__svm.set_shrinking_enabled(shrinking) if Cs is not None and len(Cs) == 2: if __debug__: debug("SG_", "Since multiple Cs are provided: %s, assign them" % Cs) self.__svm.set_C(Cs[0], Cs[1]) self.params.reset() # mark them as not-changed newsvm = True _setdebug(self.__svm, 'SVM') # Set optimization parameters if self.params.has_key('tube_epsilon') and \ hasattr(self.__svm, 'set_tube_epsilon'): self.__svm.set_tube_epsilon(self.params.tube_epsilon) self.__svm.parallel.set_num_threads(self.params.num_threads) else: if __debug__: debug("SG_", "SVM instance is not re-created") if _changedData['targets']: # labels were changed if __debug__: debug("SG__", "Assigning new labels") self.__svm.set_labels(labels) if newkernel: # kernel was replaced if __debug__: debug("SG__", "Assigning new kernel") self.__svm.set_kernel(self.__kernel) assert(_changedData['params'] is False) # we should never get here if retrainable: # we must assign it only if it is retrainable self.ca.retrained = not newsvm or not newkernel # Train if __debug__ and 'SG' in debug.active: if not self.__is_regression__: lstr = " with labels %s" % targets_sa.unique else: lstr = "" debug("SG", "%sTraining %s on data%s" % (("","Re-")[retrainable and self.ca.retrained], self, lstr)) self.__svm.train() if __debug__: debug("SG_", "Done training SG_SVM %s" % self) # Report on training if (__debug__ and 'SG__' in debug.active) or \ self.ca.is_enabled('training_stats'): if __debug__: debug("SG_", "Assessing predictions on training data") trained_targets = self.__svm_apply().get_labels() else: trained_targets = None if __debug__ and "SG__" in debug.active: debug("SG__", "Original labels: %s, Trained labels: %s" % (targets_sa.value, trained_targets)) # Assign training confusion right away here since we are ready # to do so. # XXX TODO use some other conditional attribute like 'trained_targets' and # use it within base Classifier._posttrain to assign predictions # instead of duplicating code here # XXX For now it can be done only for regressions since labels need to # be remapped and that becomes even worse if we use regression # as a classifier so mapping happens upstairs if self.__is_regression__ and self.ca.is_enabled('training_stats'): self.ca.training_stats = self.__summary_class__( targets=targets_sa.value, predictions=trained_targets) # XXX actually this is the beast which started this evil conversion # so -- make use of dataset here! ;) @accepts_samples_as_dataset def _predict(self, dataset): """Predict values for the data """ retrainable = self.params.retrainable if retrainable: changed_testdata = self._changedData['testdata'] or \ self.__kernel_test is None if not retrainable: if __debug__: debug("SG__", "Initializing SVMs kernel of %s with training/testing samples" % self) self.params.kernel.compute(self.__traindataset, dataset) self.__kernel_test = self.params.kernel.as_sg()._k # We can just reuse kernel used for training #self.__condition_kernel(self.__kernel) else: if changed_testdata: #if __debug__: #debug("SG__", #"Re-creating testing kernel of %s giving " #"arguments %s" % #(`self._kernel_type`, self.__kernel_args)) self.params.kernel.compute(self.__traindataset, dataset) #_setdebug(kernel_test, 'Kernels') #_setdebug(kernel_test_custom, 'Kernels') self.__kernel_test = self.params.kernel.as_raw_sg() elif __debug__: debug("SG__", "Re-using testing kernel") assert(self.__kernel_test is not None) if 'kernel-based' in self.__tags__: self.__svm.set_kernel(self.__kernel_test) # doesn't do any good imho although on unittests helps tiny bit... hm #self.__svm.init_kernel_optimization() values_ = self.__svm_apply() else: testdata_sg = _tosg(dataset.samples) self.__svm.set_features(testdata_sg) values_ = self.__svm_apply() if __debug__: debug("SG_", "Classifying testing data") if values_ is None: raise RuntimeError, "We got empty list of values from %s" % self values = values_.get_labels() if retrainable: # we must assign it only if it is retrainable self.ca.repredicted = repredicted = not changed_testdata if __debug__: debug("SG__", "Re-assigning learing kernel. Repredicted is %s" % repredicted) # return back original kernel if 'kernel-based' in self.__tags__: self.__svm.set_kernel(self.__kernel) if __debug__: debug("SG__", "Got values %s" % values) if (self.__is_regression__): predictions = values else: if len(self._attrmap.keys()) == 2: predictions = np.sign(values) # since np.sign(0) == 0 predictions[predictions==0] = 1 else: predictions = values # remap labels back adjusting their type # XXX YOH: This is done by topclass now (needs RF) #predictions = self._attrmap.to_literal(predictions) if __debug__: debug("SG__", "Tuned predictions %s" % predictions) # store conditional attribute # TODO: extract values properly for multiclass SVMs -- # ie 1 value per label or pairs for all 1-vs-1 classifications self.ca.estimates = values ## to avoid leaks with not yet properly fixed shogun if not retrainable: try: testdata.free_features() except: pass return predictions def _untrain(self): super(SVM, self)._untrain() # untrain/clean the kernel -- we might not allow to drag SWIG # instance around BUT XXX -- make it work fine with # CachedKernel -- we might not want to fully "untrain" in such # case self.params.kernel.cleanup() # XXX unify naming if not self.params.retrainable: if __debug__: debug("SG__", "Untraining %(clf)s and destroying sg's SVM", msgargs={'clf':self}) # to avoid leaks with not yet properly fixed shogun # XXX make it nice... now it is just stable ;-) if True: # not self.__traindata is None: if True: # try: if self.__kernel is not None: del self.__kernel self.__kernel = None if self.__kernel_test is not None: del self.__kernel_test self.__kernel_test = None if self.__svm is not None: del self.__svm self.__svm = None self.__svm_apply = None if self.__traindata is not None: # Let in for easy demonstration of the memory leak in shogun #for i in xrange(10): # debug("SG__", "cachesize pre free features %s" % # (self.__svm.get_kernel().get_cache_size())) self.__traindata.free_features() del self.__traindata self.__traindata = None self.__traindataset = None #except: # pass if __debug__: debug("SG__", "Done untraining %(self)s and destroying sg's SVM", msgargs=locals()) elif __debug__: debug("SG__", "Not untraining %(self)s since it is retrainable", msgargs=locals()) def __get_implementation(self, ul): if self.__is_regression__ or len(ul) == 2: svm_impl_class = SVM._KNOWN_IMPLEMENTATIONS[self._svm_impl][0] else: if self._svm_impl == 'libsvm': svm_impl_class = shogun.Classifier.LibSVMMultiClass elif self._svm_impl == 'gmnp': svm_impl_class = shogun.Classifier.GMNPSVM else: raise RuntimeError, \ "Shogun: Implementation %s doesn't handle multiclass " \ "data. Got labels %s. Use some other classifier" % \ (self._svm_impl, self.__traindataset.sa[self.get_space()].unique) if __debug__: debug("SG_", "Using %s for multiclass data of %s" % (svm_impl_class, self._svm_impl)) return svm_impl_class svm = property(fget=lambda self: self.__svm) """Access to the SVM model.""" traindataset = property(fget=lambda self: self.__traindataset) """Dataset which was used for training TODO -- might better become conditional attribute I guess""" # Conditionally make some of the implementations available if they are # present in the present shogun for name, item, params, descr in \ [('mpd', "shogun.Classifier.MPDSVM", "('C',), ('binary',)", "MPD classifier from shogun"), ('lightsvm', "shogun.Classifier.SVMLight", "('C',), ('binary',)", "SVMLight classification http://svmlight.joachims.org/"), ('svrlight', "shogun.Regression.SVRLight", "('C','tube_epsilon',), ('regression',)", "SVMLight regression http://svmlight.joachims.org/"), ('krr', "shogun.Regression.KRR", "('tau',), ('regression',)", "Kernel Ridge Regression"), ('svmocas', "shogun.Classifier.SVMOcas", "('C',), ('binary', 'linear')", "SVM with OCAS (Optimized Cutting Plane Algorithm) solver"), ]: if externals.exists('shogun.%s' % name): exec "SVM._KNOWN_IMPLEMENTATIONS[\"%s\"] = (%s, %s, \"%s\")" % (name, item, params, descr) # Assign SVM class to limited set of LinearSVMWeights LinearSVMWeights._LEGAL_CLFS = [SVM] pymvpa2-2.2.0/mvpa2/clfs/similarity.py000066400000000000000000000057721202542755000176420ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Similarity functions for prototype-based projection.""" import numpy as np from mvpa2.clfs.distance import squared_euclidean_distance if __debug__: from mvpa2.base import debug class Similarity(object): """Similarity function base class. """ def __repr__(self): return "Similarity()" def computed(self, data1, data2=None): raise NotImplementedError class SingleDimensionSimilarity(Similarity): """TODO .. math:: e^{(-|data1_j - data2_j|_2)} """ def __init__(self, d=0, **kwargs): """ Parameters ---------- d : int Dimension (feature) across which to compute similarity **kwargs Passed to Similarity """ Similarity.__init__(self, **kwargs) self.d = d def computed(self, data1, data2=None): if data2 == None: data2 = data1 self.similarity_matrix = np.exp(-np.abs(data1[:, self.d], data2[:, self.d])) return self.similarity_matrix class StreamlineSimilarity(Similarity): """Compute similarity between two streamlines. """ def __init__(self, distance, gamma=1.0): """ Parameters ---------- distance : func Distance measure gamma : float Exponent coefficient """ Similarity.__init__(self) self.distance = distance self.gamma = gamma def computed(self, data1, data2=None): if data2 == None: data2 = data1 self.distance_matrix = np.zeros((len(data1), len(data2))) # setup helpers to pull out content of object-type arrays if isinstance(data1, np.ndarray) and np.issubdtype(data1.dtype, np.object): d1extract = _pass_obj_content else: d1extract = lambda x: x if isinstance(data2, np.ndarray) and np.issubdtype(data2.dtype, np.object): d2extract = _pass_obj_content else: d2extract = lambda x: x # TODO: use np.fromfunction for i, d1 in enumerate(data1): for j, d2 in enumerate(data2): self.distance_matrix[i,j] = self.distance(d1extract(data1[i]), d2extract(data2[j])) self.similarity_matrix = np.exp(-self.gamma*self.distance_matrix) return self.similarity_matrix def _pass_obj_content(data): """Helper that can be used to return the content of a single-element array of type 'object' to access its real content. """ return data[0] pymvpa2-2.2.0/mvpa2/clfs/skl/000077500000000000000000000000001202542755000156605ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/clfs/skl/__init__.py000066400000000000000000000012271202542755000177730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Classifiers provided by scikit-learn (skl) library""" __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.clfs.skl') from mvpa2.clfs.skl.base import SKLLearnerAdapter if __debug__: debug('INIT', 'mvpa2.clfs.skl end') pymvpa2-2.2.0/mvpa2/clfs/skl/base.py000066400000000000000000000120761202542755000171520ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generic wrappers for learners (classifiers) provided by scikit-learn (AKA sklearn)""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import warning, externals from mvpa2.base.dochelpers import _repr_attrs from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.base.learner import FailedToTrainError, FailedToPredictError, \ DegenerateInputError # do conditional to be able to build module reference externals.exists('skl', raise_=True) class SKLLearnerAdapter(Classifier): """Generic adapter for instances of learners provided by scikits.learn Provides basic adaptation of interface (e.g. train -> fit) and wraps the constructed instance of a learner from skl, so it looks like any other learner present within PyMVPA (so obtains all the conditional attributes defined at the base level of a `Classifier`) Examples -------- TODO """ __tags__ = ['skl'] def __init__(self, skl_learner, tags=None, enforce_dim=None, **kwargs): """ Parameters ---------- skl_learner Existing instance of a learner from skl. It should implement `fit` and `predict`. If `predict_proba` is available in the interface, then conditional attribute `probabilities` becomes available as well tags : list of string What additional tags to attach to this learner. Tags are used in the queries to classifier or regression warehouses. enforce_dim : None or int, optional If not None, it would enforce given dimensionality for ``predict`` call, if all other trailing dimensions are degenerate. """ self._skl_learner = skl_learner self.enforce_dim = enforce_dim if tags: # So we make a per-instance copy self.__tags__ = self.__tags__ + tags Classifier.__init__(self, **kwargs) def __repr__(self): """String representation of `SKLLearnerWrapper` """ prefixes = [repr(self._skl_learner)] if self.__tags__ != ['skl']: prefixes += ['tags=%r' % [t for t in self.__tags__ if t != 'skl']] prefixes += _repr_attrs(self, ['enforce_dim']) return Classifier.__repr__(self, prefixes=prefixes) def _train(self, dataset): """Train the skl learner using `dataset` (`Dataset`). """ targets_sa = dataset.sa[self.get_space()] targets = targets_sa.value # Some sanity checking so some classifiers such as LDA do not # puke meaningless exceptions if 'lda' in self.__tags__: if not dataset.nsamples > len(targets_sa.unique): raise DegenerateInputError, \ "LDA requires # of samples exceeding # of classes" # we better map into numeric labels if it is not a regression if not 'regression' in self.__tags__: targets = self._attrmap.to_numeric(targets) try: # train underlying learner self._skl_learner.fit(dataset.samples, targets) except (ValueError, np.linalg.LinAlgError), e: raise FailedToTrainError, \ "Failed to train %s on %s. Got '%s' during call to fit()." \ % (self, dataset, e) @accepts_dataset_as_samples def _predict(self, data): """Predict using the skl learner """ try: res = self._skl_learner.predict(data) except Exception, e: raise FailedToPredictError, \ "Failed to predict %s on data of shape %s. Got '%s' during" \ " call to predict()." % (self, data.shape, e) if self.enforce_dim: res_dim = len(res.shape) if res_dim > self.enforce_dim: # would throw meaningful exception if not possible res = res.reshape(res.shape[:self.enforce_dim]) elif res_dim < self.enforce_dim: # broadcast res = res.reshape(res.shape + (1,)* (self.enforce_dim - res_dim)) # Estimate estimates after predict, so if something goes # wrong, above exception handling occurs if self.ca.is_enabled('probabilities'): if hasattr(self._skl_learner, 'predict_proba'): # Duplication of computation, since in many scenarios # predict() calls predict_proba() self.ca.probabilities = self._skl_learner.predict_proba(data) else: warning("%s has no predict_proba() defined, so no probability" " estimates could be extracted" % self._skl_learner) self.ca.estimates = res return res pymvpa2-2.2.0/mvpa2/clfs/smlr.py000066400000000000000000000552051202542755000164250ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Sparse Multinomial Logistic Regression classifier.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2 import _random_seed from mvpa2.base import warning, externals from mvpa2.clfs.base import Classifier, accepts_dataset_as_samples from mvpa2.measures.base import Sensitivity from mvpa2.misc.exceptions import ConvergenceError from mvpa2.base.param import Parameter from mvpa2.base.state import ConditionalAttribute from mvpa2.datasets.base import Dataset __all__ = [ "SMLR", "SMLRWeights" ] _DEFAULT_IMPLEMENTATION = "Python" if externals.exists('ctypes'): # Uber-fast C-version of the stepwise regression try: from mvpa2.clfs.libsmlrc import stepwise_regression as _cStepwiseRegression _DEFAULT_IMPLEMENTATION = "C" except OSError, e: warning("Failed to load fast implementation of SMLR. May be you " "forgotten to build it. We will use much slower pure-Python " "version. Original exception was %s" % (e,)) _cStepwiseRegression = None else: _cStepwiseRegression = None warning("SMLR implementation without ctypes is overwhelmingly slow." " You are strongly advised to install python-ctypes") if __debug__: from mvpa2.base import debug def _label2oneofm(labels, ulabels): """Convert labels to one-of-M form. TODO: Might be useful elsewhere so could migrate into misc/ """ # allocate for the new one-of-M labels new_labels = np.zeros((len(labels), len(ulabels))) # loop and convert to one-of-M for i, c in enumerate(ulabels): new_labels[labels == c, i] = 1 return new_labels class SMLR(Classifier): """Sparse Multinomial Logistic Regression `Classifier`. This is an implementation of the SMLR algorithm published in :ref:`Krishnapuram et al., 2005 ` (2005, IEEE Transactions on Pattern Analysis and Machine Intelligence). Be sure to cite that article if you use this classifier for your work. """ __tags__ = [ 'smlr', 'linear', 'has_sensitivity', 'binary', 'multiclass', 'does_feature_selection', 'random_tie_breaking'] # XXX: later 'kernel-based'? lm = Parameter(.1, min=1e-10, allowedtype='float', doc="""The penalty term lambda. Larger values will give rise to more sparsification.""") convergence_tol = Parameter(1e-3, min=1e-10, max=1.0, allowedtype='float', doc="""When the weight change for each cycle drops below this value the regression is considered converged. Smaller values lead to tighter convergence.""") resamp_decay = Parameter(0.5, allowedtype='float', min=0.0, max=1.0, doc="""Decay rate in the probability of resampling a zero weight. 1.0 will immediately decrease to the min_resamp from 1.0, 0.0 will never decrease from 1.0.""") min_resamp = Parameter(0.001, allowedtype='float', min=1e-10, max=1.0, doc="Minimum resampling probability for zeroed weights") maxiter = Parameter(10000, allowedtype='int', min=1, doc="""Maximum number of iterations before stopping if not converged.""") has_bias = Parameter(True, allowedtype='bool', doc="""Whether to add a bias term to allow fits to data not through zero""") fit_all_weights = Parameter(True, allowedtype='bool', doc="""Whether to fit weights for all classes or to the number of classes minus one. Both should give nearly identical results, but if you set fit_all_weights to True it will take a little longer and yield weights that are fully analyzable for each class. Also, note that the convergence rate may be different, but convergence point is the same.""") implementation = Parameter(_DEFAULT_IMPLEMENTATION, allowedtype='basestring', choices=["C", "Python"], doc="""Use C or Python as the implementation of stepwise_regression. C version brings significant speedup thus is the default one.""") ties = Parameter('random', allowedtype='string', doc="""Resolve ties which could occur. At the moment only obvious ties resulting in identical weights per two classes are detected and resolved randomly by injecting small amount of noise into the estimates of tied categories. Set to False to avoid this behavior""") seed = Parameter(_random_seed, allowedtype='None or int', doc="""Seed to be used to initialize random generator, might be used to replicate the run""") unsparsify = Parameter(False, allowedtype='bool', doc="""***EXPERIMENTAL*** Whether to unsparsify the weights via regression. Note that it likely leads to worse classifier performance, but more interpretable weights.""") std_to_keep = Parameter(2.0, allowedtype='float', doc="""Standard deviation threshold of weights to keep when unsparsifying.""") def __init__(self, **kwargs): """Initialize an SMLR classifier. """ """ TODO: # Add in likelihood calculation # Add kernels, not just direct methods. """ # init base class first Classifier.__init__(self, **kwargs) if _cStepwiseRegression is None and self.params.implementation == 'C': warning('SMLR: C implementation is not available.' ' Using pure Python one') self.params.implementation = 'Python' # pylint friendly initializations self._ulabels = None """Unigue labels from the training set.""" self.__weights_all = None """Contains all weights including bias values""" self.__weights = None """Just the weights, without the biases""" self.__biases = None """The biases, will remain none if has_bias is False""" ##REF: Name was automagically refactored def _python_stepwise_regression(self, w, X, XY, Xw, E, auto_corr, lambda_over_2_auto_corr, S, M, maxiter, convergence_tol, resamp_decay, min_resamp, verbose, seed = None): """The (much slower) python version of the stepwise regression. I'm keeping this around for now so that we can compare results.""" # get the data information into easy vars ns, nd = X.shape # initialize the iterative optimization converged = False incr = np.finfo(np.float).max non_zero, basis, m, wasted_basis, cycles = 0, 0, 0, 0, 0 sum2_w_diff, sum2_w_old, w_diff = 0.0, 0.0, 0.0 p_resamp = np.ones(w.shape, dtype=np.float) if seed is not None: # set the random seed np.random.seed(seed) if __debug__: debug("SMLR_", "random seed=%s" % seed) # perform the optimization while not converged and cycles < maxiter: # get the starting weight w_old = w[basis, m] # see if we're gonna update if (w_old != 0) or np.random.rand() < p_resamp[basis, m]: # let's do it # get the probability P = E[:, m]/S # set the gradient grad = XY[basis, m] - np.dot(X[:, basis], P) # calculate the new weight with the Laplacian prior w_new = w_old + grad/auto_corr[basis] # keep weights within bounds if w_new > lambda_over_2_auto_corr[basis]: w_new -= lambda_over_2_auto_corr[basis] changed = True # unmark from being zero if necessary if w_old == 0: non_zero += 1 # reset the prob of resampling p_resamp[basis, m] = 1.0 elif w_new < -lambda_over_2_auto_corr[basis]: w_new += lambda_over_2_auto_corr[basis] changed = True # unmark from being zero if necessary if w_old == 0: non_zero += 1 # reset the prob of resampling p_resamp[basis, m] = 1.0 else: # gonna zero it out w_new = 0.0 # decrease the p_resamp p_resamp[basis, m] -= (p_resamp[basis, m] - \ min_resamp) * resamp_decay # set number of non-zero if w_old == 0: changed = False wasted_basis += 1 else: changed = True non_zero -= 1 # process any changes if changed: #print "w[%d, %d] = %g" % (basis, m, w_new) # update the expected values w_diff = w_new - w_old Xw[:, m] = Xw[:, m] + X[:, basis]*w_diff E_new_m = np.exp(Xw[:, m]) S += E_new_m - E[:, m] E[:, m] = E_new_m # update the weight w[basis, m] = w_new # keep track of the sqrt sum squared diffs sum2_w_diff += w_diff*w_diff # add to the old no matter what sum2_w_old += w_old*w_old # update the class and basis m = np.mod(m+1, w.shape[1]) if m == 0: # we completed a cycle of labels basis = np.mod(basis+1, nd) if basis == 0: # we completed a cycle of features cycles += 1 # assess convergence incr = np.sqrt(sum2_w_diff) / \ (np.sqrt(sum2_w_old)+np.finfo(np.float).eps) # save the new weights converged = incr < convergence_tol if __debug__: debug("SMLR_", \ "cycle=%d ; incr=%g ; non_zero=%d ; " % (cycles, incr, non_zero) + "wasted_basis=%d ; " % (wasted_basis) + "sum2_w_old=%g ; sum2_w_diff=%g" % (sum2_w_old, sum2_w_diff)) # reset the sum diffs and wasted_basis sum2_w_diff = 0.0 sum2_w_old = 0.0 wasted_basis = 0 if not converged: raise ConvergenceError, \ "More than %d Iterations without convergence" % \ (maxiter) # calcualte the log likelihoods and posteriors for the training data #log_likelihood = x return cycles def _train(self, dataset): """Train the classifier using `dataset` (`Dataset`). """ targets_sa_name = self.get_space() # name of targets sa targets_sa = dataset.sa[targets_sa_name] # actual targets sa # Process the labels to turn into 1 of N encoding uniquelabels = targets_sa.unique labels = _label2oneofm(targets_sa.value, uniquelabels) self._ulabels = uniquelabels.copy() Y = labels M = len(self._ulabels) # get the dataset information into easy vars X = dataset.samples # see if we are adding a bias term if self.params.has_bias: if __debug__: debug("SMLR_", "hstacking 1s for bias") # append the bias term to the features X = np.hstack((X, np.ones((X.shape[0], 1), dtype=X.dtype))) if self.params.implementation.upper() == 'C': _stepwise_regression = _cStepwiseRegression # # TODO: avoid copying to non-contig arrays, use strides in ctypes? if not (X.flags['C_CONTIGUOUS'] and X.flags['ALIGNED']): if __debug__: debug("SMLR_", "Copying data to get it C_CONTIGUOUS/ALIGNED") X = np.array(X, copy=True, dtype=np.double, order='C') # currently must be double for the C code if X.dtype != np.double: if __debug__: debug("SMLR_", "Converting data to double") # must cast to double X = X.astype(np.double) # set the feature dimensions elif self.params.implementation.upper() == 'PYTHON': _stepwise_regression = self._python_stepwise_regression else: raise ValueError, \ "Unknown implementation %s of stepwise_regression" % \ self.params.implementation # set the feature dimensions ns, nd = X.shape # decide the size of weights based on num classes estimated if self.params.fit_all_weights: c_to_fit = M else: c_to_fit = M-1 # Precompute what we can auto_corr = ((M-1.)/(2.*M))*(np.sum(X*X, 0)) XY = np.dot(X.T, Y[:, :c_to_fit]) lambda_over_2_auto_corr = (self.params.lm/2.)/auto_corr # set starting values w = np.zeros((nd, c_to_fit), dtype=np.double) Xw = np.zeros((ns, c_to_fit), dtype=np.double) E = np.ones((ns, c_to_fit), dtype=np.double) S = M*np.ones(ns, dtype=np.double) # set verbosity if __debug__: verbosity = int( "SMLR_" in debug.active ) debug('SMLR_', 'Calling stepwise_regression. Seed %s' % self.params.seed) else: verbosity = 0 # call the chosen version of stepwise_regression cycles = _stepwise_regression(w, X, XY, Xw, E, auto_corr, lambda_over_2_auto_corr, S, M, self.params.maxiter, self.params.convergence_tol, self.params.resamp_decay, self.params.min_resamp, verbosity, self.params.seed) if cycles >= self.params.maxiter: # did not converge raise ConvergenceError, \ "More than %d Iterations without convergence" % \ (self.params.maxiter) # see if unsparsify the weights if self.params.unsparsify: # unsparsify w = self._unsparsify_weights(X, w) # resolve ties if present self.__ties = None if self.params.ties: if self.params.ties == 'random': # check if there is a tie showing itself as absent # difference between two w's wdot = np.dot(w.T, -w) ties = np.where(np.max(np.abs(wdot), axis=0) == 0)[0] if len(ties): warning("SMLR: detected ties in categories %s. Small " "amount of noise will be injected into result " "estimates upon prediction to break the ties" % self._ulabels[ties]) self.__ties = ties ## w_non0 = np.nonzero(w) ## w_non0_max = np.max(np.abs(w[w_non0])) ## w_non0_idx = np.unique(w_non0[0]) ## w_non0_len = len(w_non0_idx) ## for f_idx in np.where(ties)[0]: ## w[w_non0_idx, f_idx] += \ ## 0.001 * np.random.normal(size=(w_non0_len,)) else: raise ValueError("Do not know how to treat ties=%r" % (self.params.ties,)) # save the weights self.__weights_all = w self.__weights = w[:dataset.nfeatures, :] if self.ca.is_enabled('feature_ids'): self.ca.feature_ids = np.where(np.max(np.abs(w[:dataset.nfeatures, :]), axis=1)>0)[0] # and a bias if self.params.has_bias: self.__biases = w[-1, :] if __debug__: debug('SMLR', "train finished in %d cycles on data.shape=%s " % (cycles, X.shape) + "min:max(data)=%f:%f, got min:max(w)=%f:%f" % (np.min(X), np.max(X), np.min(w), np.max(w))) def _unsparsify_weights(self, samples, weights): """Unsparsify weights via least squares regression.""" # allocate for the new weights new_weights = np.zeros(weights.shape, dtype=np.double) # get the sample data we're predicting and the sum squared # total variance b = samples sst = np.power(b - b.mean(0),2).sum(0) # loop over each column for i in range(weights.shape[1]): w = weights[:,i] # get the nonzero ind ind = w!=0 # get the features with non-zero weights a = b[:,ind] # predict all the data with the non-zero features betas = np.linalg.lstsq(a,b)[0] # determine the R^2 for each feature based on the sum # squared prediction error f = np.dot(a,betas) sse = np.power((b-f),2).sum(0) rsquare = np.zeros(sse.shape,dtype=sse.dtype) gind = sst>0 rsquare[gind] = 1-(sse[gind]/sst[gind]) # derrive new weights by combining the betas and weights # scaled by the rsquare new_weights[:,i] = np.dot(w[ind],betas)*rsquare # take the tails tozero = np.abs(new_weights) < self.params.std_to_keep*np.std(new_weights) orig_zero = weights==0.0 if orig_zero.sum() < tozero.sum(): # should not end up with fewer than start tozero = orig_zero new_weights[tozero] = 0.0 debug('SMLR_', "Start nonzero: %d; Finish nonzero: %d" % \ ((weights!=0).sum(), (new_weights!=0).sum())) return new_weights ##REF: Name was automagically refactored def _get_feature_ids(self): """Return ids of the used features """ return np.where(np.max(np.abs(self.__weights), axis=1)>0)[0] @accepts_dataset_as_samples def _predict(self, data): """Predict the output for the provided data. """ # see if we are adding a bias term if self.params.has_bias: # append the bias term to the features data = np.hstack((data, np.ones((data.shape[0], 1), dtype=data.dtype))) # append the zeros column to the weights if necessary if self.params.fit_all_weights: w = self.__weights_all else: w = np.hstack((self.__weights_all, np.zeros((self.__weights_all.shape[0], 1)))) # determine the probability values for making the prediction dot_prod = np.dot(data, w) E = np.exp(dot_prod) if self.__ties is not None: # 1e-5 should be adequate since anyways this is done # already after exponentiation E[:, self.__ties] += \ 1e-5 * np.random.normal(size=(len(E), len(self.__ties))) S = np.sum(E, 1) if __debug__: debug('SMLR', "predict on data.shape=%s min:max(data)=%f:%f " % (`data.shape`, np.min(data), np.max(data)) + "min:max(w)=%f:%f min:max(dot_prod)=%f:%f min:max(E)=%f:%f" % (np.min(w), np.max(w), np.min(dot_prod), np.max(dot_prod), np.min(E), np.max(E))) values = E / S[:, np.newaxis] #.repeat(E.shape[1], axis=1) self.ca.estimates = values # generate predictions predictions = np.asarray([self._ulabels[np.argmax(vals)] for vals in values]) # no need to assign conditional attribute here -- would be done # in Classifier._postpredict anyway #self.predictions = predictions return predictions ##REF: Name was automagically refactored def get_sensitivity_analyzer(self, **kwargs): """Returns a sensitivity analyzer for SMLR.""" return SMLRWeights(self, **kwargs) biases = property(lambda self: self.__biases) weights = property(lambda self: self.__weights) class SMLRWeights(Sensitivity): """`SensitivityAnalyzer` that reports the weights SMLR trained on a given `Dataset`. By default SMLR provides multiple weights per feature (one per label in training dataset). By default, all weights are combined into a single sensitivity value. Please, see the `FeaturewiseMeasure` constructor arguments how to custmize this behavior. """ _LEGAL_CLFS = [ SMLR ] def _call(self, dataset=None): """Extract weights from SMLR classifier. SMLR always has weights available, so nothing has to be computed here. """ clf = self.clf # transpose to have the number of features on the second axis # (as usual) weights = clf.weights.T if __debug__: debug('SMLR', "Extracting weights for %d-class SMLR" % (len(weights) + 1) + "Result: min=%f max=%f" %\ (np.min(weights), np.max(weights))) # limit the labels to the number of sensitivity sets, to deal # with the case of `fit_all_weights=False` ds = Dataset(weights, sa={clf.get_space(): clf._ulabels[:len(weights)]}) if clf.params.has_bias: ds.sa['biases'] = clf.biases return ds pymvpa2-2.2.0/mvpa2/clfs/stats.py000066400000000000000000001274371202542755000166150ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Estimator for classifier error distributions.""" from __future__ import with_statement # Let's start using with __docformat__ = 'restructuredtext' import warnings import numpy as np from mvpa2.base import externals, warning from mvpa2.base.state import ClassWithCollections, ConditionalAttribute from mvpa2.generators.permutation import AttributePermutator from mvpa2.base.types import is_datasetlike from mvpa2.datasets import Dataset if __debug__: from mvpa2.base import debug if externals.exists('scipy'): import scipy.stats.distributions as ssd def _auto_rcdf(dist): dist_check = dist # which to check for continuous/discrete if isinstance(dist, ssd.rv_frozen): dist_check = dist.dist if isinstance(dist_check, ssd.rv_discrete): # we need to count the exact matches rcdf = lambda x, *args: 1 - dist.cdf(x, *args) + dist.pmf(x, *args) elif isinstance(dist_check, ssd.rv_continuous): # for continuous it is just as good rcdf = lambda x, *args: 1 - dist.cdf(x, *args) elif isinstance(dist_check, Nonparametric): rcdf = dist.rcdf else: raise ValueError("Do not know how to get 'right cdf' for %s" % (dist,)) return rcdf else: def _auto_rcdf(dist): if isinstance(dist, Nonparametric): rcdf = dist.rcdf else: raise ValueError("Do not know how to get 'right cdf' for %s" % (dist,)) return rcdf class Nonparametric(object): """Non-parametric 1d distribution -- derives cdf based on stored values. Introduced to complement parametric distributions present in scipy.stats. """ def __init__(self, dist_samples, correction='clip'): """ Parameters ---------- dist_samples : ndarray Samples to be used to assess the distribution. correction : {'clip'} or None, optional Determines the behavior when .cdf is queried. If None -- no correction is made. If 'clip' -- values are clipped to lie in the range [1/(N+2), (N+1)/(N+2)] (simply because non-parametric assessment lacks the power to resolve with higher precision in the tails, so 'imagery' samples are placed in each of the two tails). """ self._dist_samples = np.ravel(dist_samples) self._correction = correction def __repr__(self): return '%s(%r%s)' % ( self.__class__.__name__, self._dist_samples, ('', ', correction=%r' % self._correction) [int(self._correction != 'clip')]) @staticmethod def fit(dist_samples): return [dist_samples] def _cdf(self, x, operator): """Helper function to compute cdf proper or reverse (i.e. going from the right tail) """ res = operator(x) if self._correction == 'clip': nsamples = len(self._dist_samples) np.clip(res, 1.0/(nsamples+2), (nsamples+1.0)/(nsamples+2), res) elif self._correction is None: pass else: raise ValueError, \ '%r is incorrect value for correction parameter of %s' \ % (self._correction, self.__class__.__name__) return res def cdf(self, x): """Returns the cdf value at `x`. """ return self._cdf(x, np.vectorize(lambda v: (self._dist_samples <= v).mean())) def rcdf(self, x): """Returns cdf of reversed distribution (i.e. if integrating from right tail) Necessary for hypothesis testing in the right tail. It is really just a 1 - cdf(x) + pmf(x) == sf(x)+pmf(x) for a discrete distribution """ return self._cdf(x, np.vectorize(lambda v: (self._dist_samples >= v).mean())) def _pvalue(x, cdf_func, rcdf_func, tail, return_tails=False, name=None): """Helper function to return p-value(x) given cdf and tail Parameters ---------- cdf_func : callable Function to be used to derive cdf values for x tail : str ('left', 'right', 'any', 'both') Which tail of the distribution to report. For 'any' and 'both' it chooses the tail it belongs to based on the comparison to p=0.5. In the case of 'any' significance is taken like in a one-tailed test. return_tails : bool If True, a tuple return (pvalues, tails), where tails contain 1s if value was from the right tail, and 0 if the value was from the left tail. """ is_scalar = np.isscalar(x) if is_scalar: x = [x] def stability_assurance(cdf): if __debug__ and 'CHECK_STABILITY' in debug.active: cdf_min, cdf_max = np.min(cdf), np.max(cdf) if cdf_min < 0 or cdf_max > 1.0: s = ('', ' for %s' % name)[int(name is not None)] warning('Stability check of cdf %s failed%s. Min=%s, max=%s' % \ (cdf_func, s, cdf_min, cdf_max)) if tail == 'left': pvalues = cdf_func(x) if return_tails: right_tail = np.zeros(pvalues.shape, dtype=bool) stability_assurance(pvalues) elif tail == 'right': pvalues = rcdf_func(x) if return_tails: right_tail = np.ones(pvalues.shape, dtype=bool) stability_assurance(pvalues) elif tail in ('any', 'both'): pvalues = cdf_func(x) right_tail = (pvalues >= 0.5) if np.any(right_tail): # we must compute them all first ATM since otherwise # it would not work for "multiple" features with independent # distributions rcdf = rcdf_func(x) # and then assign the "interesting" ones pvalues[right_tail] = rcdf[right_tail] if tail == 'both': # we need report the area under both tails # XXX this is only meaningful for symmetric distributions pvalues *= 2 # no escape but to assure that CDF is in the right range. Some # distributions from scipy tend to jump away from [0,1] # yoh: made inplace operation whenever RF into this function np.clip(pvalues, 0, 1.0, pvalues) # Assure that NaNs didn't get significant value pvalues[np.isnan(x)] = 1.0 if is_scalar: pvalues = pvalues[0] if return_tails: return (pvalues, right_tail) else: return pvalues class NullDist(ClassWithCollections): """Base class for null-hypothesis testing. """ # Although base class is not benefiting from ca, derived # classes do (MCNullDist). For the sake of avoiding multiple # inheritance and associated headache -- let them all be ClassWithCollections, # performance hit should be negligible in most of the scenarios _ATTRIBUTE_COLLECTIONS = ['ca'] def __init__(self, tail='both', **kwargs): """ Parameters ---------- tail : {'left', 'right', 'any', 'both'} Which tail of the distribution to report. For 'any' and 'both' it chooses the tail it belongs to based on the comparison to p=0.5. In the case of 'any' significance is taken like in a one-tailed test. """ ClassWithCollections.__init__(self, **kwargs) self._set_tail(tail) def __repr__(self, prefixes=[]): return super(NullDist, self).__repr__( prefixes=["tail=%s" % `self.__tail`] + prefixes) ##REF: Name was automagically refactored def _set_tail(self, tail): # sanity check if tail not in ('left', 'right', 'any', 'both'): raise ValueError, 'Unknown value "%s" to `tail` argument.' \ % tail self.__tail = tail def fit(self, measure, ds): """Implement to fit the distribution to the data.""" raise NotImplementedError def cdf(self, x): """Implementations return the value of the cumulative distribution function. """ raise NotImplementedError def rcdf(self, x): """Implementations return the value of the reverse cumulative distribution function. """ raise NotImplementedError def dists(self): """Implementations returns a sequence of the ``dist_class`` instances that were used to fit the distribution. """ raise NotImplementedError def p(self, x, return_tails=False, **kwargs): """Returns the p-value for values of `x`. Returned values are determined left, right, or from any tail depending on the constructor setting. In case a `FeaturewiseMeasure` was used to estimate the distribution the method returns an array. In that case `x` can be a scalar value or an array of a matching shape. """ peas = _pvalue(x, self.cdf, self.rcdf, self.__tail, return_tails=return_tails, **kwargs) if is_datasetlike(x): # return the p-values in a dataset as well and assign the input # dataset attributes to the return dataset too pds = x.copy(deep=False) if return_tails: pds.samples = peas[0] return pds, peas[1] else: pds.samples = peas return pds return peas tail = property(fget=lambda x:x.__tail, fset=_set_tail) class MCNullDist(NullDist): """Null-hypothesis distribution is estimated from randomly permuted data labels. The distribution is estimated by calling fit() with an appropriate `Measure` or `TransferError` instance and a training and a validation dataset (in case of a `TransferError`). For a customizable amount of cycles the training data labels are permuted and the corresponding measure computed. In case of a `TransferError` this is the error when predicting the *correct* labels of the validation dataset. The distribution can be queried using the `cdf()` method, which can be configured to report probabilities/frequencies from `left` or `right` tail, i.e. fraction of the distribution that is lower or larger than some critical value. This class also supports `FeaturewiseMeasure`. In that case `cdf()` returns an array of featurewise probabilities/frequencies. """ _DEV_DOC = """ TODO automagically decide on the number of samples/permutations needed Caution should be paid though since resultant distributions might be quite far from some conventional ones (e.g. Normal) -- it is expected to them to be bimodal (or actually multimodal) in many scenarios. """ dist_samples = ConditionalAttribute(enabled=False, doc='Samples obtained for each permutation') skipped = ConditionalAttribute(enabled=True, doc='# of the samples which were skipped because ' 'measure has failed to evaluated at them') def __init__(self, permutator, dist_class=Nonparametric, measure=None, **kwargs): """Initialize Monte-Carlo Permutation Null-hypothesis testing Parameters ---------- permutator : Node Node instance that generates permuted datasets. dist_class : class This can be any class which provides parameters estimate using `fit()` method to initialize the instance, and provides `cdf(x)` method for estimating value of x in CDF. All distributions from SciPy's 'stats' module can be used. measure : Measure or None Optional measure that is used to compute results on permuted data. If None, a measure needs to be passed to ``fit()``. """ NullDist.__init__(self, **kwargs) self._dist_class = dist_class self._dist = [] # actual distributions self._measure = measure self.__permutator = permutator def __repr__(self, prefixes=[]): prefixes_ = ["%s" % self.__permutator] if self._dist_class != Nonparametric: prefixes_.insert(0, 'dist_class=%r' % (self._dist_class,)) return super(MCNullDist, self).__repr__( prefixes=prefixes_ + prefixes) def fit(self, measure, ds): """Fit the distribution by performing multiple cycles which repeatedly permuted labels in the training dataset. Parameters ---------- measure: Measure or None A measure used to compute the results from shuffled data. Can be None if a measure instance has been provided to the constructor. ds: `Dataset` which gets permuted and used to compute the measure/transfer error multiple times. """ # TODO: place exceptions separately so we could avoid circular imports from mvpa2.base.learner import LearnerError # prefer the already assigned measure over anything the was passed to # the function. # XXX that is a bit awkward but is necessary to keep the code changes # in the rest of PyMVPA minimal till this behavior become mandatory if not self._measure is None: measure = self._measure measure.untrain() dist_samples = [] """Holds the values for randomized labels.""" # estimate null-distribution # TODO this really needs to be more clever! If data samples are # shuffled within a class it really makes no difference for the # classifier, hence the number of permutations to estimate the # null-distribution of transfer errors can be reduced dramatically # when the *right* permutations (the ones that matter) are done. skipped = 0 # # of skipped permutations for p, permuted_ds in enumerate(self.__permutator.generate(ds)): # new permutation all the time # but only permute the training data and keep the testdata constant # if __debug__: debug('STATMC', "Doing %i permutations: %i" \ % (self.__permutator.count, p+1), cr=True) # compute and store the measure of this permutation # assume it has `TransferError` interface try: res = measure(permuted_ds) dist_samples.append(res.samples) except LearnerError, e: if __debug__: debug('STATMC', " skipped", cr=True) warning('Failed to obtain value from %s due to %s. Measurement' ' was skipped, which could lead to unstable and/or' ' incorrect assessment of the null_dist' % (measure, e)) skipped += 1 continue self.ca.skipped = skipped if __debug__: debug('STATMC', ' Skipped: %d permutations' % skipped) if not len(dist_samples) and skipped > 0: raise RuntimeError( 'Failed to obtain any value from %s. %d measurements were ' 'skipped. Check above warnings, and your code/data' % (measure, skipped)) # store samples as (npermutations x nsamples x nfeatures) dist_samples = np.asanyarray(dist_samples) # for the ca storage use a dataset with # (nsamples x nfeatures x npermutations) to make it compatible with the # result dataset of the measure self.ca.dist_samples = Dataset(np.rollaxis(dist_samples, 0, len(dist_samples.shape))) # fit distribution per each element # to decide either it was done on scalars or vectors shape = dist_samples.shape nshape = len(shape) # if just 1 dim, original data was scalar, just create an # artif dimension for it if nshape == 1: dist_samples = dist_samples[:, np.newaxis] # fit per each element. # XXX could be more elegant? may be use np.vectorize? dist_samples_rs = dist_samples.reshape((shape[0], -1)) dist = [] for samples in dist_samples_rs.T: params = self._dist_class.fit(samples) if __debug__ and 'STAT__' in debug.active: debug('STAT', 'Estimated parameters for the %s are %s' % (self._dist_class, str(params))) dist.append(self._dist_class(*params)) self._dist = dist def _cdf(self, x, cdf_func): """Return value of the cumulative distribution function at `x`. """ if self._dist is None: # XXX We might not want to descriminate that way since # usually generators also have .cdf where they rely on the # default parameters. But then what about Nonparametric raise RuntimeError, "Distribution has to be fit first" is_scalar = np.isscalar(x) if is_scalar: x = [x] x = np.asanyarray(x) xshape = x.shape # assure x is a 1D array now x = x.reshape((-1,)) if len(self._dist) != len(x): raise ValueError, 'Distribution was fit for structure with %d' \ ' elements, whenever now queried with %d elements' \ % (len(self._dist), len(x)) # extract cdf values per each element if cdf_func == 'cdf': cdfs = [ dist.cdf(v) for v, dist in zip(x, self._dist) ] elif cdf_func == 'rcdf': cdfs = [ _auto_rcdf(dist)(v) for v, dist in zip(x, self._dist) ] else: raise ValueError return np.array(cdfs).reshape(xshape) def cdf(self, x): return self._cdf(x, 'cdf') def rcdf(self, x): return self._cdf(x, 'rcdf') def dists(self): return self._dist def clean(self): """Clean stored distributions Storing all of the distributions might be too expensive (e.g. in case of Nonparametric), and the scope of the object might be too broad to wait for it to be destroyed. Clean would bind dist_samples to empty list to let gc revoke the memory. """ self._dist = [] class FixedNullDist(NullDist): """Proxy/Adaptor class for SciPy distributions. All distributions from SciPy's 'stats' module can be used with this class. Examples -------- >>> import numpy as np >>> from scipy import stats >>> from mvpa2.clfs.stats import FixedNullDist >>> >>> dist = FixedNullDist(stats.norm(loc=2, scale=4), tail='left') >>> dist.p(2) 0.5 >>> >>> dist.cdf(np.arange(5)) array([ 0.30853754, 0.40129367, 0.5 , 0.59870633, 0.69146246]) >>> >>> dist = FixedNullDist(stats.norm(loc=2, scale=4), tail='right') >>> dist.p(np.arange(5)) array([ 0.69146246, 0.59870633, 0.5 , 0.40129367, 0.30853754]) """ def __init__(self, dist, **kwargs): """ Parameters ---------- dist : distribution object This can be any object the has a `cdf()` method to report the cumulative distribition function values. """ NullDist.__init__(self, **kwargs) self._dist = dist # assign corresponding rcdf overloading NotImplemented one of # base class self.rcdf = _auto_rcdf(dist) def fit(self, measure, ds): """Does nothing since the distribution is already fixed.""" pass def cdf(self, x): """Return value of the cumulative distribution function at `x`. """ return self._dist.cdf(x) def __repr__(self, prefixes=[]): prefixes_ = ["dist=%s" % `self._dist`] return super(FixedNullDist, self).__repr__( prefixes=prefixes_ + prefixes) class AdaptiveNullDist(FixedNullDist): """Adaptive distribution which adjusts parameters according to the data WiP: internal implementation might change """ def fit(self, measure, wdata, vdata=None): """Cares about dimensionality of the feature space in measure """ try: nfeatures = len(measure.feature_ids) except ValueError: # XXX nfeatures = np.prod(wdata.shape[1:]) dist_gen = self._dist if not hasattr(dist_gen, 'fit'): # frozen already dist_gen = dist_gen.dist # rv_frozen at least has it ;) args, kwargs = self._adapt(nfeatures, measure, wdata, vdata) if __debug__: debug('STAT', 'Adapted parameters for %s to be %s, %s' % (dist_gen, args, kwargs)) self._dist = dist_gen(*args, **kwargs) def _adapt(self, nfeatures, measure, wdata, vdata=None): raise NotImplementedError class AdaptiveRDist(AdaptiveNullDist): """Adaptive rdist: params are (nfeatures-1, 0, 1) """ def _adapt(self, nfeatures, measure, wdata, vdata=None): return (nfeatures-1, 0, 1), {} # XXX: RDist has stability issue, just run # python -c "import scipy.stats; print scipy.stats.rdist(541,0,1).cdf(0.72)" # to get some improbable value, so we need to take care about that manually # here def cdf(self, x): cdf_ = self._dist.cdf(x) bad_values = np.where(np.abs(cdf_)>1) # XXX there might be better implementation (faster/elegant) using np.clip, # the only problem is that instability results might flip the sign # arbitrarily if len(bad_values[0]): # in this distribution we have mean at 0, so we can take that easily # into account cdf_bad = cdf_[bad_values] x_bad = x[bad_values] cdf_bad[x_bad < 0] = 0.0 cdf_bad[x_bad >= 0] = 1.0 cdf_[bad_values] = cdf_bad return cdf_ class AdaptiveNormal(AdaptiveNullDist): """Adaptive Normal Distribution: params are (0, sqrt(1/nfeatures)) """ def _adapt(self, nfeatures, measure, wdata, vdata=None): return (0, 1.0/np.sqrt(nfeatures)), {} if externals.exists('scipy'): from mvpa2.support.stats import scipy from scipy.stats import kstest """ Thoughts: So we can use `scipy.stats.kstest` (Kolmogorov-Smirnov test) to check/reject H0 that samples come from a given distribution. But since it is based on a full range of data, we might better of with some ad-hoc checking by the detection power of the values in the tail of a tentative distribution. """ # We need a way to fixate estimation of some parameters # (e.g. mean) so lets create a simple proxy, or may be class # generator later on, which would take care about punishing change # from the 'right' arguments import scipy class rv_semifrozen(object): """Helper proxy-class to fit distribution when some parameters are known It is an ugly hack with snippets of code taken from scipy, which is Copyright (c) 2001, 2002 Enthought, Inc. and is distributed under BSD license http://www.scipy.org/License_Compatibility """ def __init__(self, dist, loc=None, scale=None, args=None): """ Parameters ---------- dist : rv_generic Distribution for which to freeze some of the parameters loc : array-like, optional Location parameter (default=0) scale : array-like, optional Scale parameter (default=1) args : iterable, optional Additional arguments to be passed to dist. Raises ------ ValueError Arguments number mismatch """ self._dist = dist # loc and scale theta = (loc, scale) # args Narg_ = dist.numargs if args is not None: Narg = len(args) if Narg > Narg_: raise ValueError, \ 'Distribution %s has only %d arguments. Got %d' \ % (dist, Narg_, Narg) args += (None,) * (Narg_ - Narg) else: args = (None,) * Narg_ args_i = [i for i,v in enumerate(args) if v is None] self._fargs = (list(args+theta), args_i) """Arguments which should get some fixed value""" def __call__(self, *args, **kwargs): """Upon call mimic call to get actual rv_frozen distribution """ return self._dist(*args, **kwargs) def nnlf(self, theta, x): # - sum (log pdf(x, theta),axis=0) # where theta are the parameters (including loc and scale) # fargs, fargs_i = self._fargs try: i=-1 if fargs[-1] is not None: scale = fargs[-1] else: scale = theta[i] i -= 1 if fargs[-2] is not None: loc = fargs[-2] else: loc = theta[i] i -= 1 args = theta[:i+1] # adjust args if there were fixed for i, a in zip(fargs_i, args): fargs[i] = a args = fargs[:-2] except IndexError: raise ValueError, "Not enough input arguments." if not self._argcheck(*args) or scale <= 0: return np.inf x = np.asarray((x-loc) / scale) cond0 = (x <= self.a) | (x >= self.b) if (np.any(cond0)): return np.inf else: return self._nnlf(x, *args) + len(x)*np.log(scale) def fit(self, data, *args, **kwds): loc0, scale0 = map(kwds.get, ['loc', 'scale'], [0.0, 1.0]) fargs, fargs_i = self._fargs Narg = len(args) Narg_ = self.numargs if Narg != Narg_: if Narg > Narg_: raise ValueError, "Too many input arguments." else: args += (1.0,)*(self.numargs-Narg) # Provide only those args which are not fixed, and # append location and scale (if not fixed) at the end if len(fargs_i) != Narg_: x0 = tuple([args[i] for i in fargs_i]) else: x0 = args if fargs[-2] is None: x0 = x0 + (loc0,) if fargs[-1] is None: x0 = x0 + (scale0,) opt_x = scipy.optimize.fmin( self.nnlf, x0, args=(np.ravel(data),), disp=0) # reconstruct back i = 0 loc, scale = fargs[-2:] if fargs[-1] is None: i -= 1 scale = opt_x[i] if fargs[-2] is None: i -= 1 loc = opt_x[i] # assign those which weren't fixed for i in fargs_i: fargs[i] = opt_x[i] #raise ValueError opt_x = np.hstack((fargs[:-2], (loc, scale))) return opt_x def __setattr__(self, a, v): if not a in ['_dist', '_fargs', 'fit', 'nnlf']: self._dist.__setattr__(a, v) else: object.__setattr__(self, a, v) def __getattribute__(self, a): """We need to redirect all queries correspondingly """ if not a in ['_dist', '_fargs', 'fit', 'nnlf']: return getattr(self._dist, a) else: return object.__getattribute__(self, a) ##REF: Name was automagically refactored def match_distribution(data, nsamples=None, loc=None, scale=None, args=None, test='kstest', distributions=None, **kwargs): """Determine best matching distribution. Can be used for 'smelling' the data, as well to choose a parametric distribution for data obtained from non-parametric testing (e.g. `MCNullDist`). WiP: use with caution, API might change Parameters ---------- data : np.ndarray Array of the data for which to deduce the distribution. It has to be sufficiently large to make a reliable conclusion nsamples : int or None If None -- use all samples in data to estimate parametric distribution. Otherwise use only specified number randomly selected from data. loc : float or None Loc for the distribution (if known) scale : float or None Scale for the distribution (if known) test : str What kind of testing to do. Choices: 'p-roc' detection power for a given ROC. Needs two parameters: `p=0.05` and `tail='both'` 'kstest' 'full-body' distribution comparison. The best choice is made by minimal reported distance after estimating parameters of the distribution. Parameter `p=0.05` sets threshold to reject null-hypothesis that distribution is the same. **WARNING:** older versions (e.g. 0.5.2 in etch) of scipy have incorrect kstest implementation and do not function properly. distributions : None or list of str or tuple(str, dict) Distributions to check. If None, all known in scipy.stats are tested. If distribution is specified as a tuple, then it must contain name and additional parameters (name, loc, scale, args) in the dictionary. Entry 'scipy' adds all known in scipy.stats. **kwargs Additional arguments which are needed for each particular test (see above) Examples -------- >>> from mvpa2.clfs.stats import match_distribution >>> data = np.random.normal(size=(1000,1)); >>> matches = match_distribution( ... data, ... distributions=['rdist', ... ('rdist', {'name':'rdist_fixed', ... 'loc': 0.0, ... 'args': (10,)})], ... nsamples=30, test='p-roc', p=0.05) """ # Handle parameters _KNOWN_TESTS = ['p-roc', 'kstest'] if not test in _KNOWN_TESTS: raise ValueError, 'Unknown kind of test %s. Known are %s' \ % (test, _KNOWN_TESTS) data = np.ravel(data) # data sampled if nsamples is not None: if __debug__: debug('STAT', 'Sampling %d samples from data for the ' \ 'estimation of the distributions parameters' % nsamples) indexes_selected = (np.random.sample(nsamples)*len(data)).astype(int) data_selected = data[indexes_selected] else: indexes_selected = np.arange(len(data)) data_selected = data p_thr = kwargs.get('p', 0.05) if test == 'p-roc': tail = kwargs.get('tail', 'both') npd = Nonparametric(data) data_p = _pvalue(data, npd.cdf, npd.rcdf, tail) data_p_thr = np.abs(data_p) <= p_thr true_positives = np.sum(data_p_thr) if true_positives == 0: raise ValueError, "Provided data has no elements in non-" \ "parametric distribution under p<=%.3f. Please " \ "increase the size of data or value of p" % p_thr if __debug__: debug('STAT_', 'Number of positives in non-parametric ' 'distribution is %d' % true_positives) if distributions is None: distributions = ['scipy'] # lets see if 'scipy' entry was in there try: scipy_ind = distributions.index('scipy') distributions.pop(scipy_ind) sp_dists = ssd.__all__ sp_version = externals.versions['scipy'] if sp_version >= '0.9.0': for d_ in ['ncf']: if d_ in sp_dists: warning("Not considering %s distribution because of " "known issues in scipy %s" % (d_, sp_version)) _ = sp_dists.pop(sp_dists.index(d_)) distributions += sp_dists except ValueError: pass results = [] for d in distributions: dist_gen, loc_, scale_, args_ = None, loc, scale, args if isinstance(d, basestring): dist_gen = d dist_name = d elif isinstance(d, tuple): if not (len(d)==2 and isinstance(d[1], dict)): raise ValueError,\ "Tuple specification of distribution must be " \ "(d, {params}). Got %s" % (d,) dist_gen = d[0] loc_ = d[1].get('loc', loc) scale_ = d[1].get('scale', scale) args_ = d[1].get('args', args) dist_name = d[1].get('name', str(dist_gen)) else: dist_gen = d dist_name = str(d) # perform actions which might puke for some distributions try: dist_gen_ = getattr(scipy.stats, dist_gen) # specify distribution 'optimizer'. If loc or scale was provided, # use home-brewed rv_semifrozen if args_ is not None or loc_ is not None or scale_ is not None: dist_opt = rv_semifrozen(dist_gen_, loc=loc_, scale=scale_, args=args_) else: dist_opt = dist_gen_ if __debug__: debug('STAT__', 'Fitting %s distribution %r on data of size %s', (dist_name, dist_opt, data_selected.shape)) # suppress the warnings which might pop up while # matching "inappropriate" distributions with warnings.catch_warnings(record=True) as w: dist_params = dist_opt.fit(data_selected) if __debug__: debug('STAT__', 'Got distribution parameters %s for %s' % (dist_params, dist_name)) if test == 'p-roc': cdf_func = lambda x: dist_gen_.cdf(x, *dist_params) rcdf_func = _auto_rcdf(dist_gen_) # We need to compare detection under given p cdf_p = np.abs(_pvalue(data, cdf_func, rcdf_func, tail, name=dist_gen)) cdf_p_thr = cdf_p <= p_thr D, p = (np.sum(np.abs(data_p_thr - cdf_p_thr))*1.0/true_positives, 1) if __debug__: res_sum = 'D=%.2f' % D elif test == 'kstest': D, p = kstest(data, dist_gen, args=dist_params) if __debug__: res_sum = 'D=%.3f p=%.3f' % (D, p) except (TypeError, ValueError, AttributeError, NotImplementedError), e:#Exception, e: if __debug__: debug('STAT__', 'Testing for %s distribution failed due to %s', (d, e)) continue if p > p_thr and not np.isnan(D): results += [ (D, dist_gen, dist_name, dist_params) ] if __debug__: debug('STAT_', 'Tested %s distribution: %s', (dist_name, res_sum)) else: if __debug__: debug('STAT__', 'Cannot consider %s dist. with %s', (d, res_sum)) continue # sort in ascending order, so smaller is better results.sort(key=lambda x:x[0]) if __debug__ and 'STAT' in debug.active: # find the best and report it nresults = len(results) sresult = lambda r:'%s(%s)=%.2f' % (r[1], ', '.join(map(str, r[3])), r[0]) if nresults > 0: nnextbest = min(2, nresults-1) snextbest = ', '.join(map(sresult, results[1:1+nnextbest])) debug('STAT', 'Best distribution %s. Next best: %s' % (sresult(results[0]), snextbest)) else: debug('STAT', 'Could not find suitable distribution') # return all the results return results if externals.exists('pylab'): import pylab as pl ##REF: Name was automagically refactored def plot_distribution_matches(data, matches, nbins=31, nbest=5, expand_tails=8, legend=2, plot_cdf=True, p=None, tail='both'): """Plot best matching distributions Parameters ---------- data : np.ndarray Data which was used to obtain the matches matches : list of tuples Sorted matches as provided by match_distribution nbins : int Number of bins in the histogram nbest : int Number of top matches to plot expand_tails : int How many bins away to add to parametrized distributions plots legend : int Either to provide legend and statistics in the legend. 1 -- just lists distributions. 2 -- adds distance measure 3 -- tp/fp/fn in the case if p is provided plot_cdf : bool Either to plot cdf for data using non-parametric distribution p : float or None If not None, visualize null-hypothesis testing (given p). Bars in the histogram which fall under given p are colored in red. False positives and false negatives are marked as triangle up and down symbols correspondingly tail : ('left', 'right', 'any', 'both') If p is not None, the choise of tail for null-hypothesis testing Returns ------- histogram list of lines """ # API changed since v0.99.0-641-ga7c2231 halign = externals.versions['matplotlib'] >= '1.0.0' \ and 'mid' or 'center' hist = pl.hist(data, nbins, normed=1, align=halign) data_range = [np.min(data), np.max(data)] # x's x = hist[1] dx = x[expand_tails] - x[0] # how much to expand tails by x = np.hstack((x[:expand_tails] - dx, x, x[-expand_tails:] + dx)) nonparam = Nonparametric(data) # plot cdf if plot_cdf: pl.plot(x, nonparam.cdf(x), 'k--', linewidth=1) p_thr = p data_p = _pvalue(data, nonparam.cdf, nonparam.rcdf, tail) data_p_thr = (data_p <= p_thr).ravel() npd = Nonparametric(data) x_p = _pvalue(x, npd.cdf, npd.rcdf, tail) x_p_thr = np.abs(x_p) <= p_thr # color bars which pass thresholding in red for thr, bar_ in zip(x_p_thr[expand_tails:], hist[2]): bar_.set_facecolor(('w','r')[int(thr)]) if not len(matches): # no matches were provided warning("No matching distributions were provided -- nothing to plot") return (hist, ) lines = [] labels = [] for i in xrange(min(nbest, len(matches))): D, dist_gen, dist_name, params = matches[i] dist = getattr(scipy.stats, dist_gen)(*params) rcdf = _auto_rcdf(dist) label = '%s' % (dist_name) if legend > 1: label += '(D=%.2f)' % (D) xcdf_p = np.abs(_pvalue(x, dist.cdf, rcdf, tail)) xcdf_p_thr = (xcdf_p <= p_thr).ravel() if p is not None and legend > 2: # We need to compare detection under given p data_cdf_p = np.abs(_pvalue(data, dist.cdf, rcdf, tail)) data_cdf_p_thr = (data_cdf_p <= p_thr).ravel() # true positives tp = np.logical_and(data_cdf_p_thr, data_p_thr) # false positives fp = np.logical_and(data_cdf_p_thr, ~data_p_thr) # false negatives fn = np.logical_and(~data_cdf_p_thr, data_p_thr) label += ' tp/fp/fn=%d/%d/%d)' % \ tuple(map(np.sum, [tp, fp, fn])) pdf = dist.pdf(x) line = pl.plot(x, pdf, '-', linewidth=2, label=label)[0] color = line.get_color() if plot_cdf: cdf = dist.cdf(x) pl.plot(x, cdf, ':', linewidth=1, color=color, label=label) # TODO: decide on tp/fp/fn by not centers of the bins but # by the values in data in the ranges covered by # those bins. Then it would correspond to the values # mentioned in the legend if p is not None: # true positives xtp = np.logical_and(xcdf_p_thr, x_p_thr) # false positives xfp = np.logical_and(xcdf_p_thr, ~x_p_thr) # false negatives xfn = np.logical_and(~xcdf_p_thr, x_p_thr) # no need to plot tp explicitely -- marked by color of the bar # pl.plot(x[xtp], pdf[xtp], 'o', color=color) pl.plot(x[xfp], pdf[xfp], '^', color=color) pl.plot(x[xfn], pdf[xfn], 'v', color=color) lines.append(line) labels.append(label) if legend: pl.legend(lines, labels) return (hist, lines) #if True: # data = np.random.normal(size=(1000,1)); # matches = match_distribution( # data, # distributions=['scipy', # ('norm', {'name':'norm_known', # 'scale': 1.0, # 'loc': 0.0})], # nsamples=30, test='p-roc', p=0.05) # pl.figure(); plot_distribution_matches(data, matches, nbins=101, # p=0.05, legend=4, nbest=5) ##REF: Name was automagically refactored def auto_null_dist(dist): """Cheater for human beings -- wraps `dist` if needed with some NullDist tail and other arguments are assumed to be default as in NullDist/MCNullDist """ if dist is None or isinstance(dist, NullDist): return dist elif hasattr(dist, 'fit'): if __debug__: debug('STAT', 'Wrapping %s into MCNullDist' % dist) return MCNullDist(dist) else: if __debug__: debug('STAT', 'Wrapping %s into FixedNullDist' % dist) return FixedNullDist(dist) # if no scipy, we need nanmean def _chk_asarray(a, axis): if axis is None: a = np.ravel(a) outaxis = 0 else: a = np.asarray(a) outaxis = axis return a, outaxis def nanmean(x, axis=0): """Compute the mean over the given axis ignoring NaNs. Parameters ---------- x : ndarray input array axis : int axis along which the mean is computed. Returns ------- m : float the mean. """ x, axis = _chk_asarray(x, axis) x = x.copy() Norig = x.shape[axis] factor = 1.0 - np.sum(np.isnan(x), axis)*1.0/Norig x[np.isnan(x)] = 0 return np.mean(x, axis)/factor pymvpa2-2.2.0/mvpa2/clfs/svm.py000066400000000000000000000103421202542755000162460ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Importer for the available SVM and SVR machines. Multiple external libraries implementing Support Vector Machines (Classification) and Regressions are available: LIBSVM, and shogun. This module is just a helper to provide default implementation for SVM depending on the availability of external libraries. By default LIBSVM implementation is chosen by default, but in any case both libraries are available through importing from this module:: > from mvpa2.clfs.svm import sg, libsvm > help(sg.SVM) > help(libsvm.SVM) Please refer to particular interface for more documentation about parameterization and available kernels and implementations. """ __docformat__ = 'restructuredtext' # take care of conditional import of external classifiers from mvpa2.base import warning, cfg, externals from mvpa2.clfs._svmbase import _SVM if __debug__: from mvpa2.base import debug # SVM implementation to be used "by default" SVM = None _NuSVM = None # TODO: handle choices within cfg _VALID_BACKENDS = ('libsvm', 'shogun', 'sg') _svm_backend = cfg.get('svm', 'backend', default='libsvm').lower() if _svm_backend == 'shogun': _svm_backend = 'sg' if not _svm_backend in _VALID_BACKENDS: raise ValueError, 'Configuration option svm.backend got invalid value %s.' \ ' Valid choices are %s' % (_svm_backend, _VALID_BACKENDS) if __debug__: debug('SVM', 'SVM backend is %s' % _svm_backend) if externals.exists('shogun'): from mvpa2.clfs import sg SVM = sg.SVM # Somewhat cruel hack -- define "SVM" family of kernels as binds # to specific default SVM implementation # XXX might need RF from mvpa2.kernels import sg as ksg LinearSVMKernel = ksg.LinearSGKernel RbfSVMKernel = ksg.RbfSGKernel #if not 'LinearCSVMC' in locals(): # from mvpa2.clfs.sg.svm import * if externals.exists('libsvm'): # By default for now we want simply to import all SVMs from libsvm from mvpa2.clfs.libsvmc import svm as libsvm _NuSVM = libsvm.SVM if _svm_backend == 'libsvm' or SVM is None: if __debug__ and _svm_backend != 'libsvm' and SVM is None: debug('SVM', 'SVM backend %s was not found, so using libsvm' % _svm_backend) SVM = libsvm.SVM from mvpa2.kernels import libsvm as kls LinearSVMKernel = kls.LinearLSKernel RbfSVMKernel = kls.RbfLSKernel #from mvpa2.clfs.libsvm.svm import * if SVM is None: warning("None of SVM implementation libraries was found") else: _defaultC = _SVM._SVM_PARAMS['C'].default _defaultNu = _SVM._SVM_PARAMS['nu'].default _edocs = [] """List containing tuples of classes and docs to be extended""" # Define some convenience classes class LinearCSVMC(SVM): def __init__(self, C=_defaultC, **kwargs): SVM.__init__(self, C=C, kernel=LinearSVMKernel(), **kwargs) class RbfCSVMC(SVM): def __init__(self, C=_defaultC, **kwargs): SVM.__init__(self, C=C, kernel=RbfSVMKernel(), **kwargs) _edocs += [ (LinearCSVMC, SVM, "C-SVM classifier using linear kernel."), (RbfCSVMC, SVM, "C-SVM classifier using a radial basis function kernel")] if _NuSVM is not None: class LinearNuSVMC(_NuSVM): def __init__(self, nu=_defaultNu, **kwargs): _NuSVM.__init__(self, nu=nu, kernel=LinearSVMKernel(), **kwargs) class RbfNuSVMC(_NuSVM): def __init__(self, nu=_defaultNu, **kwargs): _NuSVM.__init__(self, nu=nu, kernel=RbfSVMKernel(), **kwargs) _edocs += [ (LinearNuSVMC, _NuSVM, "Nu-SVM classifier using linear kernel."), (RbfNuSVMC, _NuSVM, "Nu-SVM classifier using a radial basis function kernel")] for _c, _pc, _d in _edocs: _c.__doc__ = \ "%s\n\nSee documentation of `%s` for more information" % \ (_d, _pc.__class__.__name__) pymvpa2-2.2.0/mvpa2/clfs/transerror.py000066400000000000000000002002111202542755000176360ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Utility class to compute the transfer error of classifiers.""" __docformat__ = 'restructuredtext' import mvpa2.support.copy as copy import numpy as np from StringIO import StringIO from math import log10, ceil from mvpa2.base import externals from mvpa2.base.node import Node from mvpa2.misc.errorfx import mean_power_fx, root_mean_power_fx, rms_error, \ relative_rms_error, mean_mismatch_error, auc_error from mvpa2.base import warning from mvpa2.datasets import Dataset from mvpa2.base.collections import Collectable from mvpa2.base.state import ConditionalAttribute, ClassWithCollections, \ UnknownStateError from mvpa2.base.dochelpers import enhanced_doc_string, table2string from mvpa2.clfs.stats import auto_null_dist if __debug__: from mvpa2.base import debug if externals.exists('scipy'): from scipy.stats.stats import nanmean from mvpa2.misc.stats import chisquare from scipy.stats import linregress, friedmanchisquare from mvpa2.misc.errorfx import corr_error, corr_error_prob else: from mvpa2.clfs.stats import nanmean chisquare = None linregress = None def _p2(x, prec=2, formatting=''): """Helper to print depending on the type nicely. For some reason %.2g for 100 prints exponential form which is ugly """ if isinstance(x, int): s = "%d" % x elif isinstance(x, float): s = ("%%.%df" % prec % x).rstrip('0').rstrip('.').lstrip() if s == '': s = '0' else: s = "%s" % x return formatting + s class SummaryStatistics(object): """Basic class to collect targets/predictions and report summary statistics It takes care about collecting the sets, which are just tuples (targets, predictions, estimates). While 'computing' the matrix, all sets are considered together. Children of the class are responsible for computation and display. """ _STATS_DESCRIPTION = ( ('# of sets', 'number of target/prediction sets which were provided', None), ) def __init__(self, targets=None, predictions=None, estimates=None, sets=None): """Initialize SummaryStatistics targets or predictions cannot be provided alone (ie targets without predictions) Parameters ---------- targets Optional set of targets predictions Optional set of predictions estimates Optional set of estimates (which served for prediction) sets Optional list of sets """ self._computed = False """Flag either it was computed for a given set of data""" self.__sets = (sets, [])[int(sets is None)] """Datasets (target, prediction) to compute confusion matrix on""" self._stats = {} """Dictionary to keep statistics. Initialized here to please pylint""" if not targets is None or not predictions is None: if not targets is None and not predictions is None: self.add(targets=targets, predictions=predictions, estimates=estimates) else: raise ValueError, \ "Please provide none or both targets and predictions" def add(self, targets, predictions, estimates=None): """Add new results to the set of known results""" if len(targets) != len(predictions): raise ValueError, \ "Targets[%d] and predictions[%d]" % (len(targets), len(predictions)) + \ " have different number of samples" # extract value if necessary if isinstance(estimates, Collectable): try: estimates = estimates.value except UnknownStateError, e: estimates = None # reset to None to be safe below if __debug__: debug('CM', "Cannot get yet uncollected estimates from %s", estimates) if estimates is not None and len(targets) != len(estimates): raise ValueError, \ "Targets[%d] and estimates[%d]" % (len(targets), len(estimates)) + \ " have different number of samples" # enforce labels in predictions to be of the same datatype as in # targets, since otherwise we are getting doubles for unknown at a # given moment labels nonetype = type(None) for i in xrange(len(targets)): t1, t2 = type(targets[i]), type(predictions[i]) # if there were no prediction made - leave None, otherwise # convert to appropriate type if t1 != t2 and t2 != nonetype: #warning("Obtained target %s and prediction %s are of " % # (t1, t2) + "different datatypes.") if isinstance(predictions, tuple): predictions = list(predictions) predictions[i] = t1(predictions[i]) if estimates is not None: # assure that we have a copy, or otherwise further in-place # modifications might screw things up (some classifiers share # estimates and spit out results) estimates = copy.deepcopy(estimates) self.__sets.append( (targets, predictions, estimates) ) self._computed = False ##REF: Name was automagically refactored def as_string(self, short=False, header=True, summary=True, description=False): """'Pretty print' the matrix Parameters ---------- short : bool if True, ignores the rest of the parameters and provides consise 1 line summary header : bool print header of the table summary : bool print summary (accuracy) description : bool print verbose description of presented statistics """ raise NotImplementedError def __str__(self): """String summary over the `SummaryStatistics` It would print description of the summary statistics if 'CM' debug target is active """ if __debug__: description = ('CM' in debug.active) else: description = False return self.as_string(short=False, header=True, summary=True, description=description) def __iadd__(self, other): """Add the sets from `other` s `SummaryStatistics` to current one """ #print "adding ", other, " to ", self # need to do shallow copy, or otherwise smth like "cm += cm" # would loop forever and exhaust memory eventually othersets = copy.copy(other.__sets) for set in othersets: self.add(*set)#[0], set[1]) return self def __add__(self, other): """Add two `SummaryStatistics`s """ result = copy.deepcopy(self) result += other return result def compute(self): """Actually compute the confusion matrix based on all the sets""" if self._computed: return self._compute() self._computed = True def _compute(self): """Compute basic statistics """ self._stats = {'# of sets' : len(self.sets)} @property def summaries(self): """Return a list of separate summaries per each stored set""" return [ self.__class__(sets=[x]) for x in self.sets ] @property def error(self): raise NotImplementedError @property def stats(self): self.compute() return self._stats def reset(self): """Cleans summary -- all data/sets are wiped out """ self.__sets = [] self._computed = False sets = property(lambda self:self.__sets) class ROCCurve(object): """Generic class for ROC curve computation and plotting """ def __init__(self, labels, sets=None): """ Parameters ---------- labels : list labels which were used (in order of estimates if multiclass, or 1 per class for binary problems (e.g. in SMLR)) sets : list of tuples list of sets for the analysis """ self._labels = labels self._sets = sets self.__computed = False def _compute(self): """Lazy computation if needed """ if self.__computed: return # local bindings labels = self._labels Nlabels = len(labels) sets = self._sets # Handle degenerate cases politely if Nlabels < 2: warning("ROC was asked to be evaluated on data with %i" " labels which is a degenerate case." % Nlabels) self._ROCs = [] self._aucs = [] return # take sets which have values in the shape we can handle def _check_values(set_): """Check if values are 'acceptable'""" if len(set_)<3: return False x = set_[2] # estimates # TODO: OPT: need optimization if (x is None) or len(x) == 0: return False # undefined for v in x: try: if Nlabels <= 2 and np.isscalar(v): continue if (isinstance(v, dict) or # not dict for pairs ((Nlabels >= 2) and len(v) != Nlabels)): # 1 per each label for multiclass return False except Exception, e: # Something else which is not supported, like # in shogun interface we don't yet extract values per each label or # in pairs in the case of built-in multiclass if __debug__: debug('ROC', "Exception %s while checking " "either %s are valid labels" % (str(e), x)) return False return True sets_wv = [x for x in sets if _check_values(x)] # check if all had estimates, if not -- complain Nsets_wv = len(sets_wv) if Nsets_wv > 0 and len(sets) != Nsets_wv: warning("Only %d sets have estimates assigned from %d sets. " "ROC estimates might be incorrect." % (Nsets_wv, len(sets))) # bring all values to the same 'shape': # 1 value per each label. In binary classifier, if only a single # value is provided, add '0' for 0th label 'value'... it should # work taking drunk Yarik logic ;-) # yoh: apparently it caused problems whenever we had just a single # unique label in the sets. Introduced handling for # NLabels == 1 for iset, s in enumerate(sets_wv): # we will do inplace modification, thus go by index estimates = s[2] # we would need it to be a list to reassign element with a list if isinstance(estimates, np.ndarray) and len(estimates.shape)==1: # XXX ??? so we are going away from inplace modifications? estimates = list(estimates) rangev = None for i in xrange(len(estimates)): v = estimates[i] if np.isscalar(v): if Nlabels == 1: # ensure the right dimensionality estimates[i] = np.array(v, ndmin=2) elif Nlabels == 2: def last_el(x): """Helper function. Returns x if x is scalar, and last element if x is not (ie list/tuple)""" if np.isscalar(x): return x else: return x[-1] if rangev is None: # we need to figure out min/max estimates # to invert for the 0th label estimates_ = [last_el(x) for x in estimates] rangev = np.min(estimates_) + np.max(estimates_) estimates[i] = [rangev - v, v] else: raise ValueError, \ "Cannot have a single 'value' for multiclass" \ " classification. Got %s" % (v) elif len(v) != Nlabels: raise ValueError, \ "Got %d estimates whenever there is %d labels" % \ (len(v), Nlabels) # reassign possibly adjusted estimates sets_wv[iset] = (s[0], s[1], np.asarray(estimates)) # we need to estimate ROC per each label # XXX order of labels might not correspond to the one among 'estimates' # which were used to make a decision... check rocs, aucs = [], [] # 1 per label for i,label in enumerate(labels): aucs_pl = [] ROCs_pl = [] for s in sets_wv: targets_pl = (np.asanyarray(s[0]) == label).astype(int) # XXX we might unify naming between AUC/ROC ROC = auc_error aucs_pl += [ROC([np.asanyarray(x)[i] for x in s[2]], targets_pl)] ROCs_pl.append(ROC) if len(aucs_pl)>0: rocs += [ROCs_pl] aucs += [nanmean(aucs_pl)] #aucs += [np.mean(aucs_pl)] # store results within the object self._ROCs = rocs self._aucs = aucs self.__computed = True @property def aucs(self): """Compute and return set of AUC values 1 per label """ self._compute() return self._aucs @property ##REF: Name was automagically refactored def rocs(self): self._compute() return self._ROCs def plot(self, label_index=0): """ TODO: make it friendly to labels given by values? should we also treat labels_map? """ externals.exists("pylab", raise_=True) import pylab as pl self._compute() labels = self._labels # select only rocs for the given label rocs = self.rocs[label_index] fig = pl.gcf() ax = pl.gca() pl.plot([0, 1], [0, 1], 'k:') for ROC in rocs: pl.plot(ROC.fp, ROC.tp, linewidth=1) pl.axis((0.0, 1.0, 0.0, 1.0)) pl.axis('scaled') pl.title('Label %s. Mean AUC=%.2f' % (label_index, self.aucs[label_index])) pl.xlabel('False positive rate') pl.ylabel('True positive rate') class ConfusionMatrix(SummaryStatistics): """Class to contain information and display confusion matrix. Implementation of the `SummaryStatistics` in the case of classification problem. Actual computation of confusion matrix is delayed until all data is acquired (to figure out complete set of labels). If testing data doesn't have a complete set of labels, but you like to include all labels, provide them as a parameter to the constructor. Confusion matrix provides a set of performance statistics (use as_string(description=True) for the description of abbreviations), as well ROC curve (http://en.wikipedia.org/wiki/ROC_curve) plotting and analysis (AUC) in the limited set of problems: binary, multiclass 1-vs-all. """ _STATS_DESCRIPTION = ( ('TP', 'true positive (AKA hit)', None), ('TN', 'true negative (AKA correct rejection)', None), ('FP', 'false positive (AKA false alarm, Type I error)', None), ('FN', 'false negative (AKA miss, Type II error)', None), ('TPR', 'true positive rate (AKA hit rate, recall, sensitivity)', 'TPR = TP / P = TP / (TP + FN)'), ('FPR', 'false positive rate (AKA false alarm rate, fall-out)', 'FPR = FP / N = FP / (FP + TN)'), ('ACC', 'accuracy', 'ACC = (TP + TN) / (P + N)'), ('SPC', 'specificity', 'SPC = TN / (FP + TN) = 1 - FPR'), ('PPV', 'positive predictive value (AKA precision)', 'PPV = TP / (TP + FP)'), ('NPV', 'negative predictive value', 'NPV = TN / (TN + FN)'), ('FDR', 'false discovery rate', 'FDR = FP / (FP + TP)'), ('MCC', "Matthews Correlation Coefficient", "MCC = (TP*TN - FP*FN)/sqrt(P N P' N')"), ('F1', 'F1 score', "F1 = 2TP / (P + P') = 2TP / (2TP + FP + FN)"), ('AUC', "Area under (AUC) curve", None), ('CHI^2', "Chi-square of confusion matrix", None), ('LOE(ACC)', "Linear Order Effect in ACC across sets", None), ## ('Friedman(TPR)', ## "Friedman CHI^2 test of TPRs consistencies across sets", None), ## ('Friedman(CM)', ## "Friedman CHI^2 test of full CM (normalized) consistencies across sets", None), ) + SummaryStatistics._STATS_DESCRIPTION def __init__(self, labels=None, labels_map=None, **kwargs): """Initialize ConfusionMatrix with optional list of `labels` Parameters ---------- labels : list Optional set of labels to include in the matrix labels_map : None or dict Dictionary from original dataset to show mapping into numerical labels targets Optional set of targets predictions Optional set of predictions """ SummaryStatistics.__init__(self, **kwargs) if labels == None: labels = [] self.__labels = labels """List of known labels""" self.__labels_in_custom_order = bool(len(labels)) """So we know later on either we could resort them""" self.__labels_map = labels_map """Mapping from original into given labels""" self.__matrix = None """Resultant confusion matrix""" def __call__(self, predictions, targets, estimates=None, store=False): """Computes confusion matrix (counts) It would rely on previously provided 'labels' to define columns/rows of the matrix to assure consistency across multiple invocations. Parameters ---------- store : bool, optional By default, this function does not modify an existing instance of the ConfusionMatrix, and is just used merely to provide a resultant confusion matrix. If 'store' set to True, provided set of predictions and targets would be added to the sets. Returns ------- numpy.ndarray counts of hits with rows -- predictions, columns -- targets """ labels = self.__labels if labels is None or not len(labels): raise RuntimeError("ConfusionMatrix must have labels assigned prior" "__call__()") # verify that we know all the labels labels_set = set(labels) if not (labels_set.issuperset(targets) and labels_set.issuperset(predictions)): raise ValueError("Known labels %r does not include some labels " "found in predictions %r or targets %r provided" % (labels_set, set(predictions), set(targets))) Nlabels = len(labels_set) cm = np.zeros( (Nlabels, Nlabels), dtype=int ) rev_map = dict([ (x[1], x[0]) for x in enumerate(labels)]) for t,p in zip(targets, predictions): cm[rev_map[p], rev_map[t]] += 1 if store: self.add(targets=targets, predictions=predictions, estimates=estimates) return cm # XXX might want to remove since summaries does the same, just without # supplying labels @property def matrices(self): """Return a list of separate confusion matrix per each stored set""" return [ self.__class__(labels=self.labels, labels_map=self.labels_map, sets=[x]) for x in self.sets] def _compute(self): """Actually compute the confusion matrix based on all the sets""" super(ConfusionMatrix, self)._compute() if __debug__: if not self.__matrix is None: debug("LAZY", "Have to recompute %s#%s" \ % (self.__class__.__name__, id(self))) # TODO: BinaryClassifier might spit out a list of predictions for each # value need to handle it... for now just keep original labels try: # figure out what labels we have labels = \ list(reduce(lambda x, y: x.union(set(y[0]).union(set(y[1]))), self.sets, set(self.__labels))) except: labels = self.__labels # Check labels_map if it was provided if it covers all the labels labels_map = self.__labels_map if labels_map is not None: labels_set = set(labels) map_labels_set = set(labels_map.values()) if not map_labels_set.issuperset(labels_set): warning("Provided labels_map %s is not coherent with labels " "provided to ConfusionMatrix. No reverse mapping " "will be provided" % labels_map) labels_map = None # Create reverse map labels_map_rev = None if labels_map is not None: labels_map_rev = {} for k,v in labels_map.iteritems(): v_mapping = labels_map_rev.get(v, []) v_mapping.append(k) labels_map_rev[v] = v_mapping self.__labels_map_rev = labels_map_rev labels.sort() if self.__labels is None or not len(self.__labels): self.__labels = labels # just store the recomputed labels else: # we should append them to already known ones # Otherwise order of labels known before might be altered add_labels = [x for x in labels if not (x in self.__labels)] if len(add_labels): self.__labels += add_labels labels = self.__labels # and use them later on if not self.__labels_in_custom_order: labels.sort() Nlabels, Nsets = len(labels), len(self.sets) if __debug__: debug("CM", "Got labels %s" % labels) # Create a matrix for all votes mat_all = np.zeros( (Nsets, Nlabels, Nlabels), dtype=int ) # create total number of samples of each label counts # just for convinience I guess since it can always be # computed from mat_all counts_all = np.zeros( (Nsets, Nlabels) ) # reverse mapping from label into index in the list of labels rev_map = dict([ (x[1], x[0]) for x in enumerate(labels)]) for iset, set_ in enumerate(self.sets): for t,p in zip(*set_[:2]): mat_all[iset, rev_map[p], rev_map[t]] += 1 # for now simply compute a sum of votes across different sets # we might do something more sophisticated later on, and this setup # should easily allow it self.__matrix = np.sum(mat_all, axis=0) self.__Nsamples = np.sum(self.__matrix, axis=0) self.__Ncorrect = sum(np.diag(self.__matrix)) TP = np.diag(self.__matrix) offdiag = self.__matrix - np.diag(TP) stats = { '# of labels' : Nlabels, 'TP' : TP, 'FP' : np.sum(offdiag, axis=1), 'FN' : np.sum(offdiag, axis=0)} stats['CORR'] = np.sum(TP) stats['TN'] = stats['CORR'] - stats['TP'] stats['P'] = stats['TP'] + stats['FN'] stats['N'] = np.sum(stats['P']) - stats['P'] stats["P'"] = stats['TP'] + stats['FP'] stats["N'"] = stats['TN'] + stats['FN'] stats['TPR'] = stats['TP'] / (1.0*stats['P']) # reset nans in TPRs to 0s whenever there is no entries # for those labels among the targets stats['TPR'][stats['P'] == 0] = 0 stats['PPV'] = stats['TP'] / (1.0*stats["P'"]) stats['NPV'] = stats['TN'] / (1.0*stats["N'"]) stats['FDR'] = stats['FP'] / (1.0*stats["P'"]) stats['SPC'] = (stats['TN']) / (1.0*stats['FP'] + stats['TN']) stats['F1'] = 2.*stats['TP'] / (stats["P"] + stats["P'"]) MCC_denom = np.sqrt(1.0*stats['P']*stats['N']*stats["P'"]*stats["N'"]) nz = MCC_denom!=0.0 stats['MCC'] = np.zeros(stats['TP'].shape) stats['MCC'][nz] = \ (stats['TP'] * stats['TN'] - stats['FP'] * stats['FN'])[nz] \ / MCC_denom[nz] stats['ACC'] = np.sum(TP)/(1.0*np.sum(stats['P'])) # TODO: STD of accuracy and corrected one according to # Nadeau and Bengio [50] stats['ACC%'] = stats['ACC'] * 100.0 if chisquare: # indep_rows to assure reasonable handling of disbalanced # cases stats['CHI^2'] = chisquare(self.__matrix, exp='indep_rows') if linregress and Nsets > 3: # Lets see if there is possible order effect in accuracy # (e.g. it goes down through splits) # simple linear regression ACC_per_set = [np.sum(np.diag(m))/np.sum(m).astype(float) for m in mat_all] stats['LOE(ACC):slope'], stats['LOE(ACC):inter'], \ stats['LOE(ACC):r'], stats['LOE(ACC):p'], _ = \ linregress(np.arange(Nsets), ACC_per_set) TPRs_per_set = [np.diag(m)/np.sum(m, axis=0).astype(float) for m in mat_all] # Confusion ratios (both TPs or FPs) # we want to divide each column but sum in the column CM_per_set = [np.ravel(m/np.sum(m, axis=0).astype(float)[None, :]) for m in mat_all] ## stats['Friedman(TPR):chi^2'], stats['Friedman(TPR):p'] = \ ## friedmanchisquare(*TPRs_per_set) ## stats['Friedman(CM):chi^2'], stats['Friedman(CM):p'] = \ ## friedmanchisquare(*CM_per_set) # # ROC computation if available ROC = ROCCurve(labels=labels, sets=self.sets) aucs = ROC.aucs if len(aucs)>0: stats['AUC'] = aucs if len(aucs) != Nlabels: raise RuntimeError, \ "We must got a AUC per label. Got %d instead of %d" % \ (len(aucs), Nlabels) self.ROC = ROC else: # we don't want to provide ROC if it is bogus stats['AUC'] = [np.nan] * Nlabels self.ROC = None # compute mean stats for k,v in stats.items(): stats['mean(%s)' % k] = np.mean(v) self._stats.update(stats) ##REF: Name was automagically refactored def as_string(self, short=False, header=True, summary=True, description=False): """'Pretty print' the matrix Parameters ---------- short : bool if True, ignores the rest of the parameters and provides consise 1 line summary header : bool print header of the table summary : bool print summary (accuracy) description : bool print verbose description of presented statistics """ if len(self.sets) == 0: return "Empty" self.compute() # some shortcuts labels = self.__labels labels_map_rev = self.__labels_map_rev matrix = self.__matrix labels_rev = [] if labels_map_rev is not None: labels_rev = [','.join([str(x) for x in labels_map_rev[l]]) for l in labels] out = StringIO() # numbers of different entries Nlabels = len(labels) Nsamples = self.__Nsamples.astype(int) stats = self._stats if short: return "%(# of sets)d sets %(# of labels)d labels " \ " ACC:%(ACC).2f" \ % stats Ndigitsmax = int(ceil(log10(max(Nsamples)))) Nlabelsmax = max( [len(str(x)) for x in labels] ) # length of a single label/value L = max(Ndigitsmax+2, Nlabelsmax) #, len("100.00%")) res = "" stats_perpredict = ["P'", "N'", 'FP', 'FN', 'PPV', 'NPV', 'TPR', 'SPC', 'FDR', 'MCC', 'F1'] # print AUC only if ROC was computed if self.ROC is not None: stats_perpredict += [ 'AUC' ] stats_pertarget = ['P', 'N', 'TP', 'TN'] stats_summary = ['ACC', 'ACC%', '# of sets'] # 'Friedman(TPR):p', 'Friedman(CM):p' #prefixlen = Nlabelsmax + 2 + Ndigitsmax + 1 prefixlen = Nlabelsmax + 1 pref = ' '*(prefixlen) # empty prefix if matrix.shape != (Nlabels, Nlabels): raise ValueError, \ "Number of labels %d doesn't correspond the size" + \ " of a confusion matrix %s" % (Nlabels, matrix.shape) # list of lists of what is printed printed = [] underscores = [" %s" % ("-" * L)] * Nlabels if header: # labels printed.append(['@l----------. '] + labels_rev) printed.append(['@lpredictions\\targets'] + labels) # underscores printed.append(['@l `------'] \ + underscores + stats_perpredict) # matrix itself for i, line in enumerate(matrix): l = labels[i] if labels_rev != []: l = '@r%10s / %s' % (labels_rev[i], l) printed.append( [l] + [ str(x) for x in line ] + [ _p2(stats[x][i]) for x in stats_perpredict]) if summary: ## Various alternative schemes ;-) # printed.append([''] + underscores) # printed.append(['@lPer target \ Means:'] + underscores + \ # [_p2(x) for x in mean_stats]) # printed.append(['Means:'] + [''] * len(labels) # + [_p2(x) for x in mean_stats]) printed.append(['@lPer target:'] + underscores) for stat in stats_pertarget: printed.append([stat] + [ _p2(stats[stat][i]) for i in xrange(Nlabels)]) # compute mean stats # XXX refactor to expose them in stats as well, as # mean(FCC) mean_stats = np.mean(np.array([stats[k] for k in stats_perpredict]), axis=1) printed.append(['@lSummary \ Means:'] + underscores + [_p2(stats['mean(%s)' % x]) for x in stats_perpredict]) if 'CHI^2' in self.stats: chi2t = stats['CHI^2'] printed.append(['CHI^2'] + [_p2(chi2t[0])] + ['@wp=%.2g' % chi2t[1]]) for stat in stats_summary: if stat in stats: printed.append([stat] + [_p2(stats[stat])]) if 'LOE(ACC):inter' in stats: # Inject into sets line printed[-1] += [ '@w ACC(i) = %(LOE(ACC):inter).2g%(LOE(ACC):slope)+.2g*i' % stats + ' p=' + _p2(stats['LOE(ACC):p']) + ' r=' + _p2(stats['LOE(ACC):r']) + ' r^2=' + _p2(stats['LOE(ACC):r']**2)] table2string(printed, out) if description: out.write("\nStatistics computed in 1-vs-rest fashion per each " \ "target.\n") out.write("Abbreviations (for details see " \ "http://en.wikipedia.org/wiki/ROC_curve):\n") for d, val, eq in self._STATS_DESCRIPTION: out.write(" %-3s: %s\n" % (d, val)) if eq is not None: out.write(" " + eq + "\n") #out.write("%s" % printed) result = out.getvalue() out.close() return result def plot(self, labels=None, numbers=False, origin='upper', numbers_alpha=None, xlabels_vertical=True, numbers_kwargs={}, **kwargs): """Provide presentation of confusion matrix in image Parameters ---------- labels : list of int or str Optionally provided labels guarantee the order of presentation. Also value of None places empty column/row, thus provides visual groupping of labels (Thanks Ingo) numbers : bool Place values inside of confusion matrix elements numbers_alpha : None or float Controls textual output of numbers. If None -- all numbers are plotted in the same intensity. If some float -- it controls alpha level -- higher value would give higher contrast. (good value is 2) origin : str Which left corner diagonal should start xlabels_vertical : bool Either to plot xlabels vertical (benefitial if number of labels is large) numbers_kwargs : dict Additional keyword parameters to be added to numbers (if numbers is True) **kwargs Additional arguments given to imshow (\eg me cmap) Returns ------- (fig, im, cb) -- figure, imshow, colorbar """ externals.exists("pylab", raise_=True) import pylab as pl self.compute() labels_order = labels # some shortcuts labels = self.__labels labels_map = self.__labels_map labels_map_rev = self.__labels_map_rev matrix = self.__matrix # craft original mapping from a label into index in the matrix labels_indexes = dict([(x,i) for i,x in enumerate(labels)]) labels_rev = [] if labels_map_rev is not None: labels_rev = [','.join([str(x) for x in labels_map_rev[l]]) for l in labels] labels_map_full = dict(zip(labels_rev, labels)) if labels_order is not None: labels_order_filtered = filter(lambda x:x is not None, labels_order) labels_order_filtered_set = set(labels_order_filtered) # Verify if all labels provided in labels if set(labels) == labels_order_filtered_set: # We were provided numerical (most probably) set labels_plot = labels_order elif len(labels_rev) \ and set(labels_rev) == labels_order_filtered_set: # not clear if right whenever there were multiple labels # mapped into the same labels_plot = [] for l in labels_order: v = None if l is not None: v = labels_map_full[l] labels_plot += [v] else: raise ValueError, \ "Provided labels %s do not match set of known " \ "original labels (%s) or mapped labels (%s)" % \ (labels_order, labels, labels_rev) else: labels_plot = labels # where we have Nones? isempty = np.array([l is None for l in labels_plot]) non_empty = np.where(np.logical_not(isempty))[0] # numbers of different entries NlabelsNN = len(non_empty) Nlabels = len(labels_plot) if matrix.shape != (NlabelsNN, NlabelsNN): raise ValueError, \ "Number of labels %d doesn't correspond the size" + \ " of a confusion matrix %s" % (NlabelsNN, matrix.shape) confusionmatrix = np.zeros((Nlabels, Nlabels)) mask = confusionmatrix.copy() ticks = [] tick_labels = [] # populate in a silly way reordered_indexes = [labels_indexes[i] for i in labels_plot if i is not None] for i, l in enumerate(labels_plot): if l is not None: j = labels_indexes[l] confusionmatrix[i, non_empty] = matrix[j, reordered_indexes] confusionmatrix[non_empty, i] = matrix[reordered_indexes, j] ticks += [i + 0.5] if labels_map_rev is not None: tick_labels += ['/'.join(labels_map_rev[l])] else: tick_labels += [str(l)] else: mask[i, :] = mask[:, i] = 1 confusionmatrix = np.ma.MaskedArray(confusionmatrix, mask=mask) # turn off automatic update if interactive if pl.matplotlib.get_backend() == 'TkAgg': pl.ioff() fig = pl.gcf() ax = pl.gca() ax.axis('off') # some customization depending on the origin xticks_position, yticks, ybottom = { 'upper': ('top', [Nlabels-x for x in ticks], 0.1), 'lower': ('bottom', ticks, 0.2) }[origin] # Plot axi = fig.add_axes([0.15, ybottom, 0.7, 0.7]) im = axi.imshow(confusionmatrix, interpolation="nearest", origin=origin, aspect='equal', extent=(0, Nlabels, 0, Nlabels), **kwargs) # plot numbers if numbers: numbers_kwargs_ = {'fontsize': 10, 'horizontalalignment': 'center', 'verticalalignment': 'center'} maxv = float(np.max(confusionmatrix)) colors = [im.to_rgba(0), im.to_rgba(maxv)] for i,j in zip(*np.logical_not(mask).nonzero()): v = confusionmatrix[j, i] # scale alpha non-linearly if numbers_alpha is None: alpha = 1.0 else: # scale according to value alpha = 1 - np.array(1 - v / maxv) ** numbers_alpha y = {'lower':j, 'upper':Nlabels-j-1}[origin] numbers_kwargs_['color'] = colors[int(v recode into digits to match # underlying API recode = dict([(e, i) for i, e in enumerate(ds.sa[self._labels_attr].value)]) partitions = [[[recode[label] for label in class_] for class_ in hyp] for hyp in hypotheses] else: # use hypotheses as is -- all bets are off partitions = hypotheses if self._prior_Hs is None: # default: uniform prior on hypotheses: p(H_i) prior_Hs = np.ones(len(partitions)) / len(partitions) else: prior_Hs = self._prior_Hs # p(X|H_i) for all H logp_X_given_Hs = np.zeros(len(partitions)) for i, psi in enumerate(partitions): # use Emanuele's toolbox logp_X_given_Hs[i] = compute_logp_H(ds.samples, psi, self._alpha) out = logp_X_given_Hs statfa = ['log(p(C|H))'] if self._postprob: # convert into posterior probabilities: p(H|X) # normalization constant: p(X) logp_X = reduce(np.logaddexp, logp_X_given_Hs + np.log(prior_Hs)) # p(H|X) from Bayes rule: log_posterior_Hs_given_X = logp_X_given_Hs + np.log(prior_Hs) - logp_X out = np.vstack((out, log_posterior_Hs_given_X)).T statfa.append('log(p(H|C))') if not self._log: # convert from log scale out = np.exp(out) # remove the log() from the stat label statfa = [s[4:-1] for s in statfa] if hypotheses is None: if self._labels_attr in ds.sa: # recode partition IDs into actual labels, if the necessary attr # is available hypotheses = Partition(ds.sa[self._labels_attr].value) else: hypotheses = partitions hypotheses = list(hypotheses) out = Dataset(out, sa={self.get_space(): hypotheses, 'prior': prior_Hs}, fa={'stat': statfa}) return out class RegressionStatistics(SummaryStatistics): """Class to contain information and display on regression results. """ _STATS_DESCRIPTION = ( ('CCe', 'Error based on correlation coefficient', '1 - corr_coef'), ('CCp', 'Correlation coefficient (p-value)', None), ('RMSE', 'Root mean squared error', None), ('STD', 'Standard deviation', None), ('RMP', 'Root mean power (compare to RMSE of results)', 'sqrt(mean( data**2 ))'), ) + SummaryStatistics._STATS_DESCRIPTION def __init__(self, **kwargs): """Initialize RegressionStatistics Parameters ---------- targets Optional set of targets predictions Optional set of predictions """ SummaryStatistics.__init__(self, **kwargs) def _compute(self): """Actually compute the confusion matrix based on all the sets""" super(RegressionStatistics, self)._compute() sets = self.sets Nsets = len(sets) stats = {} funcs = { 'RMP_t': lambda p,t:root_mean_power_fx(t), 'STD_t': lambda p,t:np.std(t), 'RMP_p': lambda p,t:root_mean_power_fx(p), 'STD_p': lambda p,t:np.std(p), 'RMSE': rms_error, 'RMSE/RMP_t': relative_rms_error } if externals.exists('scipy'): funcs['CCe'] = corr_error funcs['CCp'] = corr_error_prob for funcname, func in funcs.iteritems(): funcname_all = funcname + '_all' stats[funcname_all] = [] for i, (targets, predictions, estimates) in enumerate(sets): stats[funcname_all] += [func(predictions, targets)] stats[funcname_all] = np.array(stats[funcname_all]) stats[funcname] = np.mean(stats[funcname_all]) stats[funcname+'_std'] = np.std(stats[funcname_all]) stats[funcname+'_max'] = np.max(stats[funcname_all]) stats[funcname+'_min'] = np.min(stats[funcname_all]) # create ``summary`` statistics, since some per-set statistics # might be uncomputable if a set contains just a single number # (like in the case of correlation coefficient) targets, predictions = [], [] for i, (targets_, predictions_, estimates_) in enumerate(sets): targets += list(targets_) predictions += list(predictions_) for funcname, func in funcs.iteritems(): funcname_all = 'Summary ' + funcname stats[funcname_all] = func(predictions, targets) self._stats.update(stats) def plot(self, plot=True, plot_stats=True, splot=True #labels=None, numbers=False, origin='upper', #numbers_alpha=None, xlabels_vertical=True, #numbers_kwargs={}, #**kwargs ): """Provide presentation of regression performance in image Parameters ---------- plot : bool Plot regular plot of values (targets/predictions) plot_stats : bool Print basic statistics in the title splot : bool Plot scatter plot Returns ------- (fig, im, cb) -- figure, imshow, colorbar """ externals.exists("pylab", raise_=True) import pylab as pl self.compute() # total number of plots nplots = plot + splot # turn off automatic update if interactive if pl.matplotlib.get_backend() == 'TkAgg': pl.ioff() fig = pl.gcf() pl.clf() sps = [] # subplots nplot = 0 if plot: nplot += 1 sps.append(pl.subplot(nplots, 1, nplot)) xstart = 0 lines = [] for s in self.sets: nsamples = len(s[0]) xend = xstart+nsamples xs = xrange(xstart, xend) lines += [pl.plot(xs, s[0], 'b')] lines += [pl.plot(xs, s[1], 'r')] # vertical line pl.plot([xend, xend], [np.min(s[0]), np.max(s[0])], 'k--') xstart = xend if len(lines)>1: pl.legend(lines[:2], ('Target', 'Prediction')) if plot_stats: pl.title(self.as_string(short='very')) if splot: nplot += 1 sps.append(pl.subplot(nplots, 1, nplot)) for s in self.sets: pl.plot(s[0], s[1], 'o', markeredgewidth=0.2, markersize=2) pl.gca().set_aspect('equal') if pl.matplotlib.get_backend() == 'TkAgg': pl.ion() pl.draw() return fig, sps ##REF: Name was automagically refactored def as_string(self, short=False, header=True, summary=True, description=False): """'Pretty print' the statistics""" if len(self.sets) == 0: return "Empty" self.compute() stats = self.stats if short: if short == 'very': # " RMSE/RMP_t:%(RMSE/RMP_t).2f" \ return "%(# of sets)d sets CCe=%(CCe).2f p=%(CCp).2g" \ " RMSE:%(RMSE).2f" \ " Summary (stacked data): " \ "CCe=%(Summary CCe).2f p=%(Summary CCp).2g" \ % stats else: return "%(# of sets)d sets CCe=%(CCe).2f+-%(CCe_std).3f" \ " RMSE=%(RMSE).2f+-%(RMSE_std).3f" \ " RMSE/RMP_t=%(RMSE/RMP_t).2f+-%(RMSE/RMP_t_std).3f" \ % stats stats_data = ['RMP_t', 'STD_t', 'RMP_p', 'STD_p'] # CCp needs tune up of format so excluded stats_ = ['CCe', 'RMSE', 'RMSE/RMP_t'] stats_summary = ['# of sets'] out = StringIO() printed = [] if header: # labels printed.append(['Statistics', 'Mean', 'Std', 'Min', 'Max']) # underscores printed.append(['----------', '-----', '-----', '-----', '-----']) def print_stats(printed, stats_): # Statistics itself for stat in stats_: s = [stat] for suffix in ['', '_std', '_min', '_max']: s += [ _p2(stats[stat+suffix], 3) ] printed.append(s) printed.append(["Data: "]) print_stats(printed, stats_data) printed.append(["Results: "]) print_stats(printed, stats_) printed.append(["Summary: "]) printed.append(["CCe", _p2(stats['Summary CCe']), "", "p=", '%g' % stats['Summary CCp']]) printed.append(["RMSE", _p2(stats['Summary RMSE'])]) printed.append(["RMSE/RMP_t", _p2(stats['Summary RMSE/RMP_t'])]) if summary: for stat in stats_summary: printed.append([stat] + [_p2(stats[stat])]) table2string(printed, out) if description: out.write("\nDescription of printed statistics.\n" " Suffixes: _t - targets, _p - predictions\n") for d, val, eq in self._STATS_DESCRIPTION: out.write(" %-3s: %s\n" % (d, val)) if eq is not None: out.write(" " + eq + "\n") result = out.getvalue() out.close() return result @property def error(self): self.compute() return self.stats['RMSE'] class ClassifierError(ClassWithCollections): """Compute (or return) some error of a (trained) classifier on a dataset. """ confusion = ConditionalAttribute(enabled=False) """TODO Think that labels might be also symbolic thus can't directly be indicies of the array """ training_stats = ConditionalAttribute(enabled=False, doc="Proxy training_stats from underlying classifier.") def __init__(self, clf, labels=None, train=True, **kwargs): """Initialization. Parameters ---------- clf : Classifier Either trained or untrained classifier labels : list if provided, should be a set of labels to add on top of the ones present in testdata train : bool unless train=False, classifier gets trained if trainingdata provided to __call__ """ ClassWithCollections.__init__(self, **kwargs) self.__clf = clf self._labels = labels """Labels to add on top to existing in testing data""" self.__train = train """Either to train classifier if trainingdata is provided""" __doc__ = enhanced_doc_string('ClassifierError', locals(), ClassWithCollections) def __copy__(self): """TODO: think... may be we need to copy self.clf""" out = ClassifierError.__new__(TransferError) ClassifierError.__init__(out, self.clf) return out def _precall(self, testdataset, trainingdataset=None): """Generic part which trains the classifier if necessary """ if not trainingdataset is None: if self.__train: # XXX can be pretty annoying if triggered inside an algorithm # where it cannot be switched of, but retraining might be # intended or at least not avoidable. # Additonally is_trained docs say: # MUST BE USED WITH CARE IF EVER # # switching it off for now #if self.__clf.is_trained(trainingdataset): # warning('It seems that classifier %s was already trained' % # self.__clf + ' on dataset %s. Please inspect' \ # % trainingdataset) if self.ca.is_enabled('training_stats'): self.__clf.ca.change_temporarily( enable_ca=['training_stats']) self.__clf.train(trainingdataset) if self.ca.is_enabled('training_stats'): self.ca.training_stats = \ self.__clf.ca.training_stats self.__clf.ca.reset_changed_temporarily() if self.__clf.ca.is_enabled('trained_targets') \ and not self.__clf.__is_regression__ \ and not testdataset is None: newlabels = set(testdataset.sa[self.clf.get_space()].unique) \ - set(self.__clf.ca.trained_targets) if len(newlabels)>0: warning("Classifier %s wasn't trained to classify labels %s" % (self.__clf, newlabels) + " present in testing dataset. Make sure that you have" + " not mixed order/names of the arguments anywhere") ### Here checking for if it was trained... might be a cause of trouble # XXX disabled since it is unreliable.. just rely on explicit # self.__train # if not self.__clf.is_trained(trainingdataset): # self.__clf.train(trainingdataset) # elif __debug__: # debug('CERR', # 'Not training classifier %s since it was ' % `self.__clf` # + ' already trained on dataset %s' % `trainingdataset`) def _call(self, testdataset, trainingdataset=None): raise NotImplementedError def _postcall(self, testdataset, trainingdataset=None, error=None): pass def __call__(self, testdataset, trainingdataset=None): """Compute the transfer error for a certain test dataset. If `trainingdataset` is not `None` the classifier is trained using the provided dataset before computing the transfer error. Otherwise the classifier is used in it's current state to make the predictions on the test dataset. Returns a scalar value of the transfer error. """ self._precall(testdataset, trainingdataset) error = self._call(testdataset, trainingdataset) self._postcall(testdataset, trainingdataset, error) if __debug__: debug('CERR', 'Classifier error on %s: %.2f' % (testdataset, error)) return error def untrain(self): """Untrain the `*Error` which relies on the classifier """ self.clf.untrain() @property def clf(self): return self.__clf @property def labels(self): return self._labels class ConfusionBasedError(ClassifierError): """For a given classifier report an error based on internally computed error measure (given by some `ConfusionMatrix` stored in some conditional attribute of `Classifier`). This way we can perform feature selection taking as the error criterion either learning error, or transfer to splits error in the case of SplitClassifier """ def __init__(self, clf, labels=None, confusion_state="training_stats", **kwargs): """Initialization. Parameters ---------- clf : Classifier Either trained or untrained classifier confusion_state Id of the conditional attribute which stores `ConfusionMatrix` labels : list if provided, should be a set of labels to add on top of the ones present in testdata """ ClassifierError.__init__(self, clf, labels, **kwargs) self.__confusion_state = confusion_state """What state to extract from""" if not clf.ca.has_key(confusion_state): raise ValueError, \ "Conditional attribute %s is not defined for classifier %r" % \ (confusion_state, clf) if not clf.ca.is_enabled(confusion_state): if __debug__: debug('CERR', "Forcing state %s to be enabled for %r" % (confusion_state, clf)) clf.ca.enable(confusion_state) __doc__ = enhanced_doc_string('ConfusionBasedError', locals(), ClassifierError) def _call(self, testdata, trainingdata=None): """Extract transfer error. Nor testdata, neither trainingdata is used """ confusion = self.clf.ca[self.__confusion_state].value self.ca.confusion = confusion return confusion.error pymvpa2-2.2.0/mvpa2/clfs/warehouse.py000066400000000000000000000625531202542755000174560ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Collection of classifiers to ease the exploration. """ __docformat__ = 'restructuredtext' from mvpa2.base.types import is_sequence_type # Define sets of classifiers from mvpa2.clfs.meta import FeatureSelectionClassifier, SplitClassifier, \ MulticlassClassifier, RegressionAsClassifier from mvpa2.clfs.smlr import SMLR from mvpa2.clfs.knn import kNN from mvpa2.clfs.gda import LDA, QDA from mvpa2.clfs.gnb import GNB from mvpa2.kernels.np import LinearKernel, SquaredExponentialKernel, \ GeneralizedLinearKernel # Helpers from mvpa2.base import externals, cfg from mvpa2.measures.anova import OneWayAnova from mvpa2.mappers.fx import absolute_features, maxofabs_sample from mvpa2.clfs.smlr import SMLRWeights from mvpa2.featsel.helpers import FractionTailSelector, \ FixedNElementTailSelector, RangeElementSelector from mvpa2.featsel.base import SensitivityBasedFeatureSelection # Kernels from mvpa2.kernels.libsvm import LinearLSKernel, RbfLSKernel, \ PolyLSKernel, SigmoidLSKernel _KNOWN_INTERNALS = [ 'knn', 'binary', 'svm', 'linear', 'smlr', 'does_feature_selection', 'has_sensitivity', 'multiclass', 'non-linear', 'kernel-based', 'lars', 'regression', 'regression_based', 'random_tie_breaking', 'non-deterministic', 'needs_population', 'libsvm', 'sg', 'meta', 'retrainable', 'gpr', 'notrain2predict', 'ridge', 'blr', 'gnpp', 'enet', 'glmnet', 'gnb', 'plr', 'rpy2', 'swig', 'skl', 'lda', 'qda', 'random-forest', 'extra-trees'] class Warehouse(object): """Class to keep known instantiated classifiers Should provide easy ways to select classifiers of needed kind: clfswh['linear', 'svm'] should return all linear SVMs clfswh['linear', 'multiclass'] should return all linear classifiers capable of doing multiclass classification """ def __init__(self, known_tags=None, matches=None): """Initialize warehouse Parameters ---------- known_tags : list of str List of known tags matches : dict Optional dictionary of additional matches. E.g. since any regression can be used as a binary classifier, matches={'binary':['regression']}, would allow to provide regressions also if 'binary' was requested """ self._known_tags = set(known_tags) self.__items = [] self.__keys = set() if matches is None: matches = {} self.__matches = matches def __getitem__(self, *args): if isinstance(args[0], tuple): args = args[0] # so we explicitely handle [:] if args == (slice(None),): args = [] # lets remove optional modifier '!' dargs = set([str(x).lstrip('!') for x in args]).difference( self._known_tags) if len(dargs)>0: raise ValueError, "Unknown internals %s requested. Known are %s" % \ (list(dargs), list(self._known_tags)) # dummy implementation for now result = [] # check every known item for item in self.__items: good = True # by default each one counts for arg in args: # check for rejection first if arg.startswith('!'): if (arg[1:] in item.__tags__): good = False break else: continue # check for inclusion found = False for arg in [arg] + self.__matches.get(arg, []): if (arg in item.__tags__): found = True break good = found if not good: break if good: result.append(item) return result def __iadd__(self, item): if is_sequence_type(item): for item_ in item: self.__iadd__(item_) else: if not hasattr(item, '__tags__'): raise ValueError, "Cannot register %s " % item + \ "which has no __tags__ defined" if len(item.__tags__) == 0: raise ValueError, "Cannot register %s " % item + \ "which has empty __tags__" clf_internals = set(item.__tags__) if clf_internals.issubset(self._known_tags): self.__items.append(item) self.__keys |= clf_internals else: raise ValueError, 'Unknown clf internal(s) %s' % \ clf_internals.difference(self._known_tags) return self @property def internals(self): """Known internal tags of the classifiers """ return self.__keys def listing(self): """Listing (description + internals) of registered items """ return [(x.descr, x.__tags__) for x in self.__items] @property def items(self): """Registered items """ return self.__items clfswh = Warehouse(known_tags=_KNOWN_INTERNALS) # classifiers regrswh = Warehouse(known_tags=_KNOWN_INTERNALS) # regressions # NB: # - Nu-classifiers are turned off since for haxby DS default nu # is an 'infisible' one # - Python's SMLR is turned off for the duration of development # since it is slow and results should be the same as of C version # clfswh += [ SMLR(lm=0.1, implementation="C", descr="SMLR(lm=0.1)"), SMLR(lm=1.0, implementation="C", descr="SMLR(lm=1.0)"), #SMLR(lm=10.0, implementation="C", descr="SMLR(lm=10.0)"), #SMLR(lm=100.0, implementation="C", descr="SMLR(lm=100.0)"), #SMLR(implementation="Python", descr="SMLR(Python)") ] clfswh += \ [ MulticlassClassifier(SMLR(lm=0.1), descr='Pairs+maxvote multiclass on SMLR(lm=0.1)') ] if externals.exists('libsvm'): from mvpa2.clfs.libsvmc import svm as libsvm clfswh._known_tags.update(libsvm.SVM._KNOWN_IMPLEMENTATIONS.keys()) clfswh += [libsvm.SVM(descr="libsvm.LinSVM(C=def)", probability=1), libsvm.SVM( C=-10.0, descr="libsvm.LinSVM(C=10*def)", probability=1), libsvm.SVM( C=1.0, descr="libsvm.LinSVM(C=1)", probability=1), libsvm.SVM(svm_impl='NU_SVC', descr="libsvm.LinNuSVM(nu=def)", probability=1) ] clfswh += [libsvm.SVM(kernel=RbfLSKernel(), descr="libsvm.RbfSVM()"), libsvm.SVM(kernel=RbfLSKernel(), svm_impl='NU_SVC', descr="libsvm.RbfNuSVM(nu=def)"), libsvm.SVM(kernel=PolyLSKernel(), descr='libsvm.PolySVM()', probability=1), #libsvm.svm.SVM(kernel=SigmoidLSKernel(), # svm_impl='C_SVC', # descr='libsvm.SigmoidSVM()'), ] # regressions regrswh._known_tags.update(['EPSILON_SVR', 'NU_SVR']) regrswh += [libsvm.SVM(svm_impl='EPSILON_SVR', descr='libsvm epsilon-SVR'), libsvm.SVM(svm_impl='NU_SVR', descr='libsvm nu-SVR')] if externals.exists('shogun'): from mvpa2.clfs import sg from mvpa2.kernels.sg import LinearSGKernel, PolySGKernel, RbfSGKernel clfswh._known_tags.update(sg.SVM._KNOWN_IMPLEMENTATIONS) # TODO: some classifiers are not yet ready to be used out-of-the-box in # PyMVPA, thus we don't populate warehouse with their instances bad_classifiers = [ 'mpd', # was segfault, now non-training on testcases, and XOR. # and was described as "for educational purposes", thus # shouldn't be used for real data ;-) # Should be a drop-in replacement for lightsvm 'gpbt', # fails to train for testAnalyzerWithSplitClassifier # also 'retraining' doesn't work -- fails to generalize 'gmnp', # would fail with 'assertion Cache_Size > 2' # if shogun < 0.6.3, also refuses to train 'svrlight', # fails to 'generalize' as a binary classifier # after 'binning' 'krr', # fails to generalize 'svmocas', # fails to generalize 'libsvr' # XXXregr removing regressions as classifiers ] if not externals.exists('sg_fixedcachesize'): # would fail with 'assertion Cache_Size > 2' if shogun < 0.6.3 bad_classifiers.append('gnpp') for impl in sg.SVM._KNOWN_IMPLEMENTATIONS: # Uncomment the ones to disable if impl in bad_classifiers: continue clfswh += [ sg.SVM( descr="sg.LinSVM(C=def)/%s" % impl, svm_impl=impl), sg.SVM( C=-10.0, descr="sg.LinSVM(C=10*def)/%s" % impl, svm_impl=impl), sg.SVM( C=1.0, descr="sg.LinSVM(C=1)/%s" % impl, svm_impl=impl), ] if not impl in ['svmocas']: # inherently linear only clfswh += [ sg.SVM(kernel=RbfSGKernel(), descr="sg.RbfSVM()/%s" % impl, svm_impl=impl), # sg.SVM(kernel=RbfSGKernel(), # descr="sg.RbfSVM(gamma=0.1)/%s" # % impl, svm_impl=impl, gamma=0.1), # sg.SVM(descr="sg.SigmoidSVM()/%s" # % impl, svm_impl=impl, kernel=SigmoidSGKernel(),), ] _optional_regressions = [] if externals.exists('shogun.krr') and externals.versions['shogun'] >= '0.9': _optional_regressions += ['krr'] for impl in ['libsvr'] + _optional_regressions:# \ # XXX svrlight sucks in SG -- dont' have time to figure it out #+ ([], ['svrlight'])['svrlight' in sg.SVM._KNOWN_IMPLEMENTATIONS]: regrswh._known_tags.update([impl]) regrswh += [ sg.SVM(svm_impl=impl, descr='sg.LinSVMR()/%s' % impl), #sg.SVM(svm_impl=impl, kernel_type='RBF', # descr='sg.RBFSVMR()/%s' % impl), ] if len(clfswh['svm', 'linear']) > 0: # if any SVM implementation is known, import default ones from mvpa2.clfs.svm import * # lars from R via RPy if externals.exists('lars'): import mvpa2.clfs.lars as lars from mvpa2.clfs.lars import LARS for model in lars.known_models: # XXX create proper repository of classifiers! lars_clf = RegressionAsClassifier( LARS(descr="LARS(%s)" % model, model_type=model), descr='LARS(model_type=%r) classifier' % model) clfswh += lars_clf # is a regression, too lars_regr = LARS(descr="_LARS(%s)" % model, model_type=model) regrswh += lars_regr # clfswh += MulticlassClassifier(lars, # descr='Multiclass %s' % lars.descr) ## Still fails unittests battery although overhauled otherwise. ## # enet from R via RPy2 ## if externals.exists('elasticnet'): ## from mvpa2.clfs.enet import ENET ## clfswh += RegressionAsClassifier(ENET(), ## descr="RegressionAsClassifier(ENET())") ## regrswh += ENET(descr="ENET()") # glmnet from R via RPy if externals.exists('glmnet'): from mvpa2.clfs.glmnet import GLMNET_C, GLMNET_R clfswh += GLMNET_C(descr="GLMNET_C()") regrswh += GLMNET_R(descr="GLMNET_R()") # LDA/QDA clfswh += LDA(descr='LDA()') clfswh += QDA(descr='QDA()') if externals.exists('skl'): _skl_version = externals.versions['skl'] _skl_api09 = _skl_version >= '0.9' def _skl_import(submod, class_): if _skl_api09: submod_ = __import__('sklearn.%s' % submod, fromlist=[submod]) else: submod_ = __import__('scikits.learn.%s' % submod, fromlist=[submod]) return getattr(submod_, class_) sklLDA = _skl_import('lda', 'LDA') from mvpa2.clfs.skl.base import SKLLearnerAdapter clfswh += SKLLearnerAdapter(sklLDA(), tags=['lda', 'linear', 'multiclass', 'binary'], descr='skl.LDA()') if _skl_version >= '0.10': # Out of Bag Estimates sklRandomForestClassifier = _skl_import('ensemble', 'RandomForestClassifier') clfswh += SKLLearnerAdapter(sklRandomForestClassifier(), tags=['random-forest', 'linear', 'non-linear', 'binary', 'multiclass', 'non-deterministic', 'needs_population',], descr='skl.RandomForestClassifier()') sklRandomForestRegression = _skl_import('ensemble', 'RandomForestRegressor') regrswh += SKLLearnerAdapter(sklRandomForestRegression(), tags=['random-forest', 'linear', 'non-linear', 'regression', 'non-deterministic', 'needs_population',], descr='skl.RandomForestRegression()') sklExtraTreesClassifier = _skl_import('ensemble', 'ExtraTreesClassifier') clfswh += SKLLearnerAdapter(sklExtraTreesClassifier(), tags=['extra-trees', 'linear', 'non-linear', 'binary', 'multiclass', 'non-deterministic', 'needs_population',], descr='skl.ExtraTreesClassifier()') sklExtraTreesRegression = _skl_import('ensemble', 'ExtraTreesRegressor') regrswh += SKLLearnerAdapter(sklExtraTreesRegression(), tags=['extra-trees', 'linear', 'non-linear', 'regression', 'non-deterministic', 'needs_population',], descr='skl.ExtraTreesRegression()') if _skl_version >= '0.8': sklPLSRegression = _skl_import('pls', 'PLSRegression') # somewhat silly use of PLS, but oh well regrswh += SKLLearnerAdapter(sklPLSRegression(n_components=1), tags=['linear', 'regression'], enforce_dim=1, descr='skl.PLSRegression_1d()') if externals.versions['skl'] >= '0.6.0': sklLars = _skl_import('linear_model', _skl_api09 and 'Lars' or 'LARS') sklLassoLars = _skl_import('linear_model', _skl_api09 and 'LassoLars' or 'LassoLARS') sklElasticNet = _skl_import('linear_model', 'ElasticNet') _lars_tags = ['lars', 'linear', 'regression', 'does_feature_selection'] _lars = SKLLearnerAdapter(sklLars(), tags=_lars_tags, descr='skl.Lars()') _lasso_lars = SKLLearnerAdapter(sklLassoLars(alpha=0.01), tags=_lars_tags, descr='skl.LassoLars()') _elastic_net = SKLLearnerAdapter( sklElasticNet(alpha=.01, rho=.3), tags=['enet', 'regression', 'linear', # 'has_sensitivity', 'does_feature_selection'], descr='skl.ElasticNet()') regrswh += [_lars, _lasso_lars, _elastic_net] clfswh += [RegressionAsClassifier(_lars, descr="skl.Lars_C()"), RegressionAsClassifier(_lasso_lars, descr="skl.LassoLars_C()"), RegressionAsClassifier(_elastic_net, descr="skl.ElasticNet_C()"), ] if _skl_version >= '0.10': sklLassoLarsIC = _skl_import('linear_model', 'LassoLarsIC') _lasso_lars_ic = SKLLearnerAdapter(sklLassoLarsIC(), tags=_lars_tags, descr='skl.LassoLarsIC()') regrswh += [_lasso_lars_ic] clfswh += [RegressionAsClassifier(_lasso_lars_ic, descr='skl.LassoLarsIC_C()')] # kNN clfswh += kNN(k=5, descr="kNN(k=5)") clfswh += kNN(k=5, voting='majority', descr="kNN(k=5, voting='majority')") clfswh += \ FeatureSelectionClassifier( kNN(), SensitivityBasedFeatureSelection( SMLRWeights(SMLR(lm=1.0, implementation="C"), postproc=maxofabs_sample()), RangeElementSelector(mode='select')), descr="kNN on SMLR(lm=1) non-0") clfswh += \ FeatureSelectionClassifier( kNN(), SensitivityBasedFeatureSelection( OneWayAnova(), FractionTailSelector(0.05, mode='select', tail='upper')), descr="kNN on 5%(ANOVA)") clfswh += \ FeatureSelectionClassifier( kNN(), SensitivityBasedFeatureSelection( OneWayAnova(), FixedNElementTailSelector(50, mode='select', tail='upper')), descr="kNN on 50(ANOVA)") # GNB clfswh += GNB(descr="GNB()") clfswh += GNB(common_variance=True, descr="GNB(common_variance=True)") clfswh += GNB(prior='uniform', descr="GNB(prior='uniform')") clfswh += \ FeatureSelectionClassifier( GNB(), SensitivityBasedFeatureSelection( OneWayAnova(), FractionTailSelector(0.05, mode='select', tail='upper')), descr="GNB on 5%(ANOVA)") # GPR if externals.exists('scipy'): from mvpa2.clfs.gpr import GPR regrswh += GPR(kernel=LinearKernel(), descr="GPR(kernel='linear')") regrswh += GPR(kernel=SquaredExponentialKernel(), descr="GPR(kernel='sqexp')") # Add wrapped GPR as a classifier gprcb = RegressionAsClassifier( GPR(kernel=GeneralizedLinearKernel()), descr="GPRC(kernel='linear')") # lets remove multiclass label from it gprcb.__tags__.pop(gprcb.__tags__.index('multiclass')) clfswh += gprcb # and create a proper multiclass one clfswh += MulticlassClassifier( RegressionAsClassifier( GPR(kernel=GeneralizedLinearKernel())), descr="GPRCM(kernel='linear')") # BLR from mvpa2.clfs.blr import BLR clfswh += RegressionAsClassifier(BLR(descr="BLR()"), descr="BLR Classifier") #PLR from mvpa2.clfs.plr import PLR clfswh += PLR(descr="PLR()") if externals.exists('scipy'): clfswh += PLR(reduced=0.05, descr="PLR(reduced=0.01)") # SVM stuff if len(clfswh['linear', 'svm']) > 0: linearSVMC = clfswh['linear', 'svm', cfg.get('svm', 'backend', default='libsvm').lower() ][0] # "Interesting" classifiers clfswh += \ FeatureSelectionClassifier( linearSVMC.clone(), SensitivityBasedFeatureSelection( SMLRWeights(SMLR(lm=0.1, implementation="C"), postproc=maxofabs_sample()), RangeElementSelector(mode='select')), descr="LinSVM on SMLR(lm=0.1) non-0") clfswh += \ FeatureSelectionClassifier( linearSVMC.clone(), SensitivityBasedFeatureSelection( SMLRWeights(SMLR(lm=1.0, implementation="C"), postproc=maxofabs_sample()), RangeElementSelector(mode='select')), descr="LinSVM on SMLR(lm=1) non-0") # "Interesting" classifiers clfswh += \ FeatureSelectionClassifier( RbfCSVMC(), SensitivityBasedFeatureSelection( SMLRWeights(SMLR(lm=1.0, implementation="C"), postproc=maxofabs_sample()), RangeElementSelector(mode='select')), descr="RbfSVM on SMLR(lm=1) non-0") clfswh += \ FeatureSelectionClassifier( linearSVMC.clone(), SensitivityBasedFeatureSelection( OneWayAnova(), FractionTailSelector(0.05, mode='select', tail='upper')), descr="LinSVM on 5%(ANOVA)") clfswh += \ FeatureSelectionClassifier( linearSVMC.clone(), SensitivityBasedFeatureSelection( OneWayAnova(), FixedNElementTailSelector(50, mode='select', tail='upper')), descr="LinSVM on 50(ANOVA)") clfswh += \ FeatureSelectionClassifier( linearSVMC.clone(), SensitivityBasedFeatureSelection( linearSVMC.get_sensitivity_analyzer(postproc=maxofabs_sample()), FractionTailSelector(0.05, mode='select', tail='upper')), descr="LinSVM on 5%(SVM)") clfswh += \ FeatureSelectionClassifier( linearSVMC.clone(), SensitivityBasedFeatureSelection( linearSVMC.get_sensitivity_analyzer(postproc=maxofabs_sample()), FixedNElementTailSelector(50, mode='select', tail='upper')), descr="LinSVM on 50(SVM)") ### Imports which are specific to RFEs # from mvpa2.datasets.splitters import OddEvenSplitter # from mvpa2.clfs.transerror import TransferError # from mvpa2.featsel.rfe import RFE # from mvpa2.featsel.helpers import FixedErrorThresholdStopCrit # from mvpa2.clfs.transerror import ConfusionBasedError # SVM with unbiased RFE -- transfer-error to another splits, or in # other terms leave-1-out error on the same dataset # Has to be bound outside of the RFE definition since both analyzer and # error should use the same instance. rfesvm_split = SplitClassifier(linearSVMC)#clfswh['LinearSVMC'][0]) # "Almost" classical RFE. If this works it would differ only that # our transfer_error is based on internal splitting and classifier used # within RFE is a split classifier and its sensitivities per split will get # averaged # #clfswh += \ # FeatureSelectionClassifier( # clf = LinearCSVMC(), #clfswh['LinearSVMC'][0], # we train LinearSVM # feature_selection = RFE( # on features selected via RFE # # based on sensitivity of a clf which does splitting internally # sensitivity_analyzer=rfesvm_split.get_sensitivity_analyzer(), # transfer_error=ConfusionBasedError( # rfesvm_split, # confusion_state="confusion"), # # and whose internal error we use # feature_selector=FractionTailSelector( # 0.2, mode='discard', tail='lower'), # # remove 20% of features at each step # update_sensitivity=True), # # update sensitivity at each step # descr='LinSVM+RFE(splits_avg)' ) # #clfswh += \ # FeatureSelectionClassifier( # clf = LinearCSVMC(), # we train LinearSVM # feature_selection = RFE( # on features selected via RFE # # based on sensitivity of a clf which does splitting internally # sensitivity_analyzer=rfesvm_split.get_sensitivity_analyzer(), # transfer_error=ConfusionBasedError( # rfesvm_split, # confusion_state="confusion"), # # and whose internal error we use # feature_selector=FractionTailSelector( # 0.2, mode='discard', tail='lower'), # # remove 20% of features at each step # update_sensitivity=False), # # update sensitivity at each step # descr='LinSVM+RFE(splits_avg,static)' ) rfesvm = LinearCSVMC() # This classifier will do RFE while taking transfer error to testing # set of that split. Resultant classifier is voted classifier on top # of all splits, let see what that would do ;-) #clfswh += \ # SplitClassifier( # which does splitting internally # FeatureSelectionClassifier( # clf = LinearCSVMC(), # feature_selection = RFE( # on features selected via RFE # sensitivity_analyzer=\ # rfesvm.get_sensitivity_analyzer(postproc=absolute_features()), # transfer_error=TransferError(rfesvm), # stopping_criterion=FixedErrorThresholdStopCrit(0.05), # feature_selector=FractionTailSelector( # 0.2, mode='discard', tail='lower'), # # remove 20% of features at each step # update_sensitivity=True)), # # update sensitivity at each step # descr='LinSVM+RFE(N-Fold)') # # #clfswh += \ # SplitClassifier( # which does splitting internally # FeatureSelectionClassifier( # clf = LinearCSVMC(), # feature_selection = RFE( # on features selected via RFE # sensitivity_analyzer=\ # rfesvm.get_sensitivity_analyzer(postproc=absolute_features()), # transfer_error=TransferError(rfesvm), # stopping_criterion=FixedErrorThresholdStopCrit(0.05), # feature_selector=FractionTailSelector( # 0.2, mode='discard', tail='lower'), # # remove 20% of features at each step # update_sensitivity=True)), # # update sensitivity at each step # splitter = OddEvenSplitter(), # descr='LinSVM+RFE(OddEven)') pymvpa2-2.2.0/mvpa2/data/000077500000000000000000000000001202542755000150515ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/data/README000066400000000000000000000004371202542755000157350ustar00rootroot00000000000000PyMVPA Example Dataset ---------------------- Posterior half of a single axial slice. Numerical sample labels: * 0 - rest * 1 - face * 2 - house * 3 - shoe * 4 - cat * 5 - scissors * 6 - scrambledpix * 7 - bottle * 8 - chair 12 independent chunks of data samples. pymvpa2-2.2.0/mvpa2/data/attributes.txt000066400000000000000000000136421202542755000200060ustar00rootroot000000000000000 0 0 0 0 0 0 0 0 0 0 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 4 0 0 0 0 0 0 0 0 0 0 0 3 0 3 0 3 0 3 0 3 0 3 0 3 0 3 0 3 0 0 0 0 0 0 0 0 0 0 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 6 0 0 0 0 0 0 0 0 0 0 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 7 0 0 0 0 0 0 0 0 0 0 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 0 1 0 1 0 1 0 1 0 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 0 1 0 1 0 1 0 1 0 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 0 1 0 1 0 1 0 1 0 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 0 1 0 1 0 1 0 1 0 1 0 1 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 1 0 1 0 1 0 1 0 1 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 0 1 0 1 0 1 0 1 0 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 0 1 0 1 0 1 0 1 0 1 0 1 0 2 0 2 0 2 0 2 0 2 0 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 0 2 0 2 0 2 0 2 0 2 0 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 0 2 0 2 0 2 0 2 0 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 0 2 0 2 0 2 0 2 0 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 0 2 0 2 0 2 0 2 0 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 0 2 0 2 0 2 0 2 0 2 0 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 0 2 0 2 0 2 0 2 0 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 0 2 0 2 0 2 0 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 0 2 0 2 0 2 0 2 0 2 0 3 0 3 0 3 0 3 0 3 0 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0 3 0 3 0 3 0 3 0 3 0 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 2 3 0 3 0 3 0 3 0 3 0 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 0 3 0 3 0 3 0 3 0 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 0 3 0 3 0 3 0 3 0 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 0 3 0 3 0 3 0 3 0 3 0 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 0 3 0 3 0 3 0 3 0 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 0 3 0 3 0 3 0 3 0 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 0 3 0 3 0 3 0 3 0 3 0 3 0 4 0 4 0 4 0 4 0 4 0 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 2 4 0 4 0 4 0 4 0 4 0 4 0 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 0 4 0 4 0 4 0 4 0 4 7 4 7 4 7 4 7 4 7 4 7 4 7 4 7 4 7 4 0 4 0 4 0 4 0 4 0 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 1 4 0 4 0 4 0 4 0 4 0 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 0 4 0 4 0 4 0 4 0 4 0 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 3 4 0 4 0 4 0 4 0 4 0 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 4 0 4 0 4 0 4 0 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 0 4 0 4 0 4 0 4 0 4 0 4 0 5 0 5 0 5 0 5 0 5 0 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 2 5 0 5 0 5 0 5 0 5 0 5 0 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 0 5 0 5 0 5 0 5 0 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5 0 5 0 5 0 5 0 5 0 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 3 5 0 5 0 5 0 5 0 5 0 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 0 5 0 5 0 5 0 5 0 5 0 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 4 5 0 5 0 5 0 5 0 5 0 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 0 5 0 5 0 5 0 5 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0 5 0 5 0 5 0 5 0 5 0 5 0 6 0 6 0 6 0 6 0 6 0 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 1 6 0 6 0 6 0 6 0 6 0 6 0 6 8 6 8 6 8 6 8 6 8 6 8 6 8 6 8 6 8 6 0 6 0 6 0 6 0 6 0 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 5 6 0 6 0 6 0 6 0 6 0 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 3 6 0 6 0 6 0 6 0 6 0 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 0 6 0 6 0 6 0 6 0 6 0 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 2 6 0 6 0 6 0 6 0 6 0 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 4 6 0 6 0 6 0 6 0 6 0 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 0 6 0 6 0 6 0 6 0 6 0 6 0 7 0 7 0 7 0 7 0 7 0 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 1 7 0 7 0 7 0 7 0 7 0 7 0 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 6 7 0 7 0 7 0 7 0 7 0 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 5 7 0 7 0 7 0 7 0 7 0 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 3 7 0 7 0 7 0 7 0 7 0 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 0 7 0 7 0 7 0 7 0 7 0 7 4 7 4 7 4 7 4 7 4 7 4 7 4 7 4 7 4 7 0 7 0 7 0 7 0 7 0 7 8 7 8 7 8 7 8 7 8 7 8 7 8 7 8 7 8 7 0 7 0 7 0 7 0 7 0 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 2 7 0 7 0 7 0 7 0 7 0 7 0 7 0 8 0 8 0 8 0 8 0 8 0 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 0 8 0 8 0 8 0 8 0 8 0 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 0 8 0 8 0 8 0 8 0 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 4 8 0 8 0 8 0 8 0 8 0 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 2 8 0 8 0 8 0 8 0 8 0 8 6 8 6 8 6 8 6 8 6 8 6 8 6 8 6 8 6 8 0 8 0 8 0 8 0 8 0 8 0 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 3 8 0 8 0 8 0 8 0 8 0 8 7 8 7 8 7 8 7 8 7 8 7 8 7 8 7 8 7 8 0 8 0 8 0 8 0 8 0 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 5 8 0 8 0 8 0 8 0 8 0 8 0 8 0 9 0 9 0 9 0 9 0 9 0 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 1 9 0 9 0 9 0 9 0 9 0 9 0 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 4 9 0 9 0 9 0 9 0 9 0 9 6 9 6 9 6 9 6 9 6 9 6 9 6 9 6 9 6 9 0 9 0 9 0 9 0 9 0 9 2 9 2 9 2 9 2 9 2 9 2 9 2 9 2 9 2 9 0 9 0 9 0 9 0 9 0 9 5 9 5 9 5 9 5 9 5 9 5 9 5 9 5 9 5 9 0 9 0 9 0 9 0 9 0 9 0 9 8 9 8 9 8 9 8 9 8 9 8 9 8 9 8 9 8 9 0 9 0 9 0 9 0 9 0 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 3 9 0 9 0 9 0 9 0 9 0 9 7 9 7 9 7 9 7 9 7 9 7 9 7 9 7 9 7 9 0 9 0 9 0 9 0 9 0 9 0 9 0 10 0 10 0 10 0 10 0 10 0 10 4 10 4 10 4 10 4 10 4 10 4 10 4 10 4 10 4 10 0 10 0 10 0 10 0 10 0 10 0 10 6 10 6 10 6 10 6 10 6 10 6 10 6 10 6 10 6 10 0 10 0 10 0 10 0 10 0 10 8 10 8 10 8 10 8 10 8 10 8 10 8 10 8 10 8 10 0 10 0 10 0 10 0 10 0 10 7 10 7 10 7 10 7 10 7 10 7 10 7 10 7 10 7 10 0 10 0 10 0 10 0 10 0 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 3 10 0 10 0 10 0 10 0 10 0 10 0 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 2 10 0 10 0 10 0 10 0 10 0 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 1 10 0 10 0 10 0 10 0 10 0 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 5 10 0 10 0 10 0 10 0 10 0 10 0 10 0 11 0 11 0 11 0 11 0 11 0 11 7 11 7 11 7 11 7 11 7 11 7 11 7 11 7 11 7 11 0 11 0 11 0 11 0 11 0 11 0 11 2 11 2 11 2 11 2 11 2 11 2 11 2 11 2 11 2 11 0 11 0 11 0 11 0 11 0 11 8 11 8 11 8 11 8 11 8 11 8 11 8 11 8 11 8 11 0 11 0 11 0 11 0 11 0 11 6 11 6 11 6 11 6 11 6 11 6 11 6 11 6 11 6 11 0 11 0 11 0 11 0 11 0 11 1 11 1 11 1 11 1 11 1 11 1 11 1 11 1 11 1 11 0 11 0 11 0 11 0 11 0 11 0 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 3 11 0 11 0 11 0 11 0 11 0 11 4 11 4 11 4 11 4 11 4 11 4 11 4 11 4 11 4 11 0 11 0 11 0 11 0 11 0 11 5 11 5 11 5 11 5 11 5 11 5 11 5 11 5 11 5 11 0 11 0 11 0 11 0 11 0 11 0 11 pymvpa2-2.2.0/mvpa2/data/attributes_literal.txt000066400000000000000000000273721202542755000215270ustar00rootroot00000000000000rest 0 rest 0 rest 0 rest 0 rest 0 rest 0 scissors 0 scissors 0 scissors 0 scissors 0 scissors 0 scissors 0 scissors 0 scissors 0 scissors 0 rest 0 rest 0 rest 0 rest 0 rest 0 rest 0 face 0 face 0 face 0 face 0 face 0 face 0 face 0 face 0 face 0 rest 0 rest 0 rest 0 rest 0 rest 0 cat 0 cat 0 cat 0 cat 0 cat 0 cat 0 cat 0 cat 0 cat 0 rest 0 rest 0 rest 0 rest 0 rest 0 shoe 0 shoe 0 shoe 0 shoe 0 shoe 0 shoe 0 shoe 0 shoe 0 shoe 0 rest 0 rest 0 rest 0 rest 0 rest 0 house 0 house 0 house 0 house 0 house 0 house 0 house 0 house 0 house 0 rest 0 rest 0 rest 0 rest 0 rest 0 rest 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 scrambledpix 0 rest 0 rest 0 rest 0 rest 0 rest 0 bottle 0 bottle 0 bottle 0 bottle 0 bottle 0 bottle 0 bottle 0 bottle 0 bottle 0 rest 0 rest 0 rest 0 rest 0 rest 0 chair 0 chair 0 chair 0 chair 0 chair 0 chair 0 chair 0 chair 0 chair 0 rest 0 rest 0 rest 0 rest 0 rest 0 rest 0 rest 1 rest 1 rest 1 rest 1 rest 1 rest 1 face 1 face 1 face 1 face 1 face 1 face 1 face 1 face 1 face 1 rest 1 rest 1 rest 1 rest 1 rest 1 rest 1 cat 1 cat 1 cat 1 cat 1 cat 1 cat 1 cat 1 cat 1 cat 1 rest 1 rest 1 rest 1 rest 1 rest 1 shoe 1 shoe 1 shoe 1 shoe 1 shoe 1 shoe 1 shoe 1 shoe 1 shoe 1 rest 1 rest 1 rest 1 rest 1 rest 1 chair 1 chair 1 chair 1 chair 1 chair 1 chair 1 chair 1 chair 1 chair 1 rest 1 rest 1 rest 1 rest 1 rest 1 scissors 1 scissors 1 scissors 1 scissors 1 scissors 1 scissors 1 scissors 1 scissors 1 scissors 1 rest 1 rest 1 rest 1 rest 1 rest 1 rest 1 bottle 1 bottle 1 bottle 1 bottle 1 bottle 1 bottle 1 bottle 1 bottle 1 bottle 1 rest 1 rest 1 rest 1 rest 1 rest 1 house 1 house 1 house 1 house 1 house 1 house 1 house 1 house 1 house 1 rest 1 rest 1 rest 1 rest 1 rest 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 scrambledpix 1 rest 1 rest 1 rest 1 rest 1 rest 1 rest 1 rest 2 rest 2 rest 2 rest 2 rest 2 rest 2 cat 2 cat 2 cat 2 cat 2 cat 2 cat 2 cat 2 cat 2 cat 2 rest 2 rest 2 rest 2 rest 2 rest 2 rest 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 scrambledpix 2 rest 2 rest 2 rest 2 rest 2 rest 2 scissors 2 scissors 2 scissors 2 scissors 2 scissors 2 scissors 2 scissors 2 scissors 2 scissors 2 rest 2 rest 2 rest 2 rest 2 rest 2 chair 2 chair 2 chair 2 chair 2 chair 2 chair 2 chair 2 chair 2 chair 2 rest 2 rest 2 rest 2 rest 2 rest 2 bottle 2 bottle 2 bottle 2 bottle 2 bottle 2 bottle 2 bottle 2 bottle 2 bottle 2 rest 2 rest 2 rest 2 rest 2 rest 2 rest 2 shoe 2 shoe 2 shoe 2 shoe 2 shoe 2 shoe 2 shoe 2 shoe 2 shoe 2 rest 2 rest 2 rest 2 rest 2 rest 2 face 2 face 2 face 2 face 2 face 2 face 2 face 2 face 2 face 2 rest 2 rest 2 rest 2 rest 2 rest 2 house 2 house 2 house 2 house 2 house 2 house 2 house 2 house 2 house 2 rest 2 rest 2 rest 2 rest 2 rest 2 rest 2 rest 3 rest 3 rest 3 rest 3 rest 3 rest 3 shoe 3 shoe 3 shoe 3 shoe 3 shoe 3 shoe 3 shoe 3 shoe 3 shoe 3 rest 3 rest 3 rest 3 rest 3 rest 3 rest 3 house 3 house 3 house 3 house 3 house 3 house 3 house 3 house 3 house 3 rest 3 rest 3 rest 3 rest 3 rest 3 chair 3 chair 3 chair 3 chair 3 chair 3 chair 3 chair 3 chair 3 chair 3 rest 3 rest 3 rest 3 rest 3 rest 3 cat 3 cat 3 cat 3 cat 3 cat 3 cat 3 cat 3 cat 3 cat 3 rest 3 rest 3 rest 3 rest 3 rest 3 face 3 face 3 face 3 face 3 face 3 face 3 face 3 face 3 face 3 rest 3 rest 3 rest 3 rest 3 rest 3 rest 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 scrambledpix 3 rest 3 rest 3 rest 3 rest 3 rest 3 bottle 3 bottle 3 bottle 3 bottle 3 bottle 3 bottle 3 bottle 3 bottle 3 bottle 3 rest 3 rest 3 rest 3 rest 3 rest 3 scissors 3 scissors 3 scissors 3 scissors 3 scissors 3 scissors 3 scissors 3 scissors 3 scissors 3 rest 3 rest 3 rest 3 rest 3 rest 3 rest 3 rest 4 rest 4 rest 4 rest 4 rest 4 rest 4 house 4 house 4 house 4 house 4 house 4 house 4 house 4 house 4 house 4 rest 4 rest 4 rest 4 rest 4 rest 4 rest 4 scissors 4 scissors 4 scissors 4 scissors 4 scissors 4 scissors 4 scissors 4 scissors 4 scissors 4 rest 4 rest 4 rest 4 rest 4 rest 4 bottle 4 bottle 4 bottle 4 bottle 4 bottle 4 bottle 4 bottle 4 bottle 4 bottle 4 rest 4 rest 4 rest 4 rest 4 rest 4 face 4 face 4 face 4 face 4 face 4 face 4 face 4 face 4 face 4 rest 4 rest 4 rest 4 rest 4 rest 4 chair 4 chair 4 chair 4 chair 4 chair 4 chair 4 chair 4 chair 4 chair 4 rest 4 rest 4 rest 4 rest 4 rest 4 rest 4 shoe 4 shoe 4 shoe 4 shoe 4 shoe 4 shoe 4 shoe 4 shoe 4 shoe 4 rest 4 rest 4 rest 4 rest 4 rest 4 cat 4 cat 4 cat 4 cat 4 cat 4 cat 4 cat 4 cat 4 cat 4 rest 4 rest 4 rest 4 rest 4 rest 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 scrambledpix 4 rest 4 rest 4 rest 4 rest 4 rest 4 rest 4 rest 5 rest 5 rest 5 rest 5 rest 5 rest 5 house 5 house 5 house 5 house 5 house 5 house 5 house 5 house 5 house 5 rest 5 rest 5 rest 5 rest 5 rest 5 rest 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 scrambledpix 5 rest 5 rest 5 rest 5 rest 5 rest 5 face 5 face 5 face 5 face 5 face 5 face 5 face 5 face 5 face 5 rest 5 rest 5 rest 5 rest 5 rest 5 shoe 5 shoe 5 shoe 5 shoe 5 shoe 5 shoe 5 shoe 5 shoe 5 shoe 5 rest 5 rest 5 rest 5 rest 5 rest 5 chair 5 chair 5 chair 5 chair 5 chair 5 chair 5 chair 5 chair 5 chair 5 rest 5 rest 5 rest 5 rest 5 rest 5 rest 5 cat 5 cat 5 cat 5 cat 5 cat 5 cat 5 cat 5 cat 5 cat 5 rest 5 rest 5 rest 5 rest 5 rest 5 bottle 5 bottle 5 bottle 5 bottle 5 bottle 5 bottle 5 bottle 5 bottle 5 bottle 5 rest 5 rest 5 rest 5 rest 5 rest 5 scissors 5 scissors 5 scissors 5 scissors 5 scissors 5 scissors 5 scissors 5 scissors 5 scissors 5 rest 5 rest 5 rest 5 rest 5 rest 5 rest 5 rest 6 rest 6 rest 6 rest 6 rest 6 rest 6 face 6 face 6 face 6 face 6 face 6 face 6 face 6 face 6 face 6 rest 6 rest 6 rest 6 rest 6 rest 6 rest 6 chair 6 chair 6 chair 6 chair 6 chair 6 chair 6 chair 6 chair 6 chair 6 rest 6 rest 6 rest 6 rest 6 rest 6 scissors 6 scissors 6 scissors 6 scissors 6 scissors 6 scissors 6 scissors 6 scissors 6 scissors 6 rest 6 rest 6 rest 6 rest 6 rest 6 shoe 6 shoe 6 shoe 6 shoe 6 shoe 6 shoe 6 shoe 6 shoe 6 shoe 6 rest 6 rest 6 rest 6 rest 6 rest 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 scrambledpix 6 rest 6 rest 6 rest 6 rest 6 rest 6 rest 6 house 6 house 6 house 6 house 6 house 6 house 6 house 6 house 6 house 6 rest 6 rest 6 rest 6 rest 6 rest 6 cat 6 cat 6 cat 6 cat 6 cat 6 cat 6 cat 6 cat 6 cat 6 rest 6 rest 6 rest 6 rest 6 rest 6 bottle 6 bottle 6 bottle 6 bottle 6 bottle 6 bottle 6 bottle 6 bottle 6 bottle 6 rest 6 rest 6 rest 6 rest 6 rest 6 rest 6 rest 7 rest 7 rest 7 rest 7 rest 7 rest 7 face 7 face 7 face 7 face 7 face 7 face 7 face 7 face 7 face 7 rest 7 rest 7 rest 7 rest 7 rest 7 rest 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 scrambledpix 7 rest 7 rest 7 rest 7 rest 7 rest 7 scissors 7 scissors 7 scissors 7 scissors 7 scissors 7 scissors 7 scissors 7 scissors 7 scissors 7 rest 7 rest 7 rest 7 rest 7 rest 7 shoe 7 shoe 7 shoe 7 shoe 7 shoe 7 shoe 7 shoe 7 shoe 7 shoe 7 rest 7 rest 7 rest 7 rest 7 rest 7 bottle 7 bottle 7 bottle 7 bottle 7 bottle 7 bottle 7 bottle 7 bottle 7 bottle 7 rest 7 rest 7 rest 7 rest 7 rest 7 rest 7 cat 7 cat 7 cat 7 cat 7 cat 7 cat 7 cat 7 cat 7 cat 7 rest 7 rest 7 rest 7 rest 7 rest 7 chair 7 chair 7 chair 7 chair 7 chair 7 chair 7 chair 7 chair 7 chair 7 rest 7 rest 7 rest 7 rest 7 rest 7 house 7 house 7 house 7 house 7 house 7 house 7 house 7 house 7 house 7 rest 7 rest 7 rest 7 rest 7 rest 7 rest 7 rest 8 rest 8 rest 8 rest 8 rest 8 rest 8 face 8 face 8 face 8 face 8 face 8 face 8 face 8 face 8 face 8 rest 8 rest 8 rest 8 rest 8 rest 8 rest 8 chair 8 chair 8 chair 8 chair 8 chair 8 chair 8 chair 8 chair 8 chair 8 rest 8 rest 8 rest 8 rest 8 rest 8 cat 8 cat 8 cat 8 cat 8 cat 8 cat 8 cat 8 cat 8 cat 8 rest 8 rest 8 rest 8 rest 8 rest 8 house 8 house 8 house 8 house 8 house 8 house 8 house 8 house 8 house 8 rest 8 rest 8 rest 8 rest 8 rest 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 scrambledpix 8 rest 8 rest 8 rest 8 rest 8 rest 8 rest 8 shoe 8 shoe 8 shoe 8 shoe 8 shoe 8 shoe 8 shoe 8 shoe 8 shoe 8 rest 8 rest 8 rest 8 rest 8 rest 8 bottle 8 bottle 8 bottle 8 bottle 8 bottle 8 bottle 8 bottle 8 bottle 8 bottle 8 rest 8 rest 8 rest 8 rest 8 rest 8 scissors 8 scissors 8 scissors 8 scissors 8 scissors 8 scissors 8 scissors 8 scissors 8 scissors 8 rest 8 rest 8 rest 8 rest 8 rest 8 rest 8 rest 9 rest 9 rest 9 rest 9 rest 9 rest 9 face 9 face 9 face 9 face 9 face 9 face 9 face 9 face 9 face 9 rest 9 rest 9 rest 9 rest 9 rest 9 rest 9 cat 9 cat 9 cat 9 cat 9 cat 9 cat 9 cat 9 cat 9 cat 9 rest 9 rest 9 rest 9 rest 9 rest 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 scrambledpix 9 rest 9 rest 9 rest 9 rest 9 rest 9 house 9 house 9 house 9 house 9 house 9 house 9 house 9 house 9 house 9 rest 9 rest 9 rest 9 rest 9 rest 9 scissors 9 scissors 9 scissors 9 scissors 9 scissors 9 scissors 9 scissors 9 scissors 9 scissors 9 rest 9 rest 9 rest 9 rest 9 rest 9 rest 9 chair 9 chair 9 chair 9 chair 9 chair 9 chair 9 chair 9 chair 9 chair 9 rest 9 rest 9 rest 9 rest 9 rest 9 shoe 9 shoe 9 shoe 9 shoe 9 shoe 9 shoe 9 shoe 9 shoe 9 shoe 9 rest 9 rest 9 rest 9 rest 9 rest 9 bottle 9 bottle 9 bottle 9 bottle 9 bottle 9 bottle 9 bottle 9 bottle 9 bottle 9 rest 9 rest 9 rest 9 rest 9 rest 9 rest 9 rest 10 rest 10 rest 10 rest 10 rest 10 rest 10 cat 10 cat 10 cat 10 cat 10 cat 10 cat 10 cat 10 cat 10 cat 10 rest 10 rest 10 rest 10 rest 10 rest 10 rest 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 scrambledpix 10 rest 10 rest 10 rest 10 rest 10 rest 10 chair 10 chair 10 chair 10 chair 10 chair 10 chair 10 chair 10 chair 10 chair 10 rest 10 rest 10 rest 10 rest 10 rest 10 bottle 10 bottle 10 bottle 10 bottle 10 bottle 10 bottle 10 bottle 10 bottle 10 bottle 10 rest 10 rest 10 rest 10 rest 10 rest 10 shoe 10 shoe 10 shoe 10 shoe 10 shoe 10 shoe 10 shoe 10 shoe 10 shoe 10 rest 10 rest 10 rest 10 rest 10 rest 10 rest 10 house 10 house 10 house 10 house 10 house 10 house 10 house 10 house 10 house 10 rest 10 rest 10 rest 10 rest 10 rest 10 face 10 face 10 face 10 face 10 face 10 face 10 face 10 face 10 face 10 rest 10 rest 10 rest 10 rest 10 rest 10 scissors 10 scissors 10 scissors 10 scissors 10 scissors 10 scissors 10 scissors 10 scissors 10 scissors 10 rest 10 rest 10 rest 10 rest 10 rest 10 rest 10 rest 11 rest 11 rest 11 rest 11 rest 11 rest 11 bottle 11 bottle 11 bottle 11 bottle 11 bottle 11 bottle 11 bottle 11 bottle 11 bottle 11 rest 11 rest 11 rest 11 rest 11 rest 11 rest 11 house 11 house 11 house 11 house 11 house 11 house 11 house 11 house 11 house 11 rest 11 rest 11 rest 11 rest 11 rest 11 chair 11 chair 11 chair 11 chair 11 chair 11 chair 11 chair 11 chair 11 chair 11 rest 11 rest 11 rest 11 rest 11 rest 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 scrambledpix 11 rest 11 rest 11 rest 11 rest 11 rest 11 face 11 face 11 face 11 face 11 face 11 face 11 face 11 face 11 face 11 rest 11 rest 11 rest 11 rest 11 rest 11 rest 11 shoe 11 shoe 11 shoe 11 shoe 11 shoe 11 shoe 11 shoe 11 shoe 11 shoe 11 rest 11 rest 11 rest 11 rest 11 rest 11 cat 11 cat 11 cat 11 cat 11 cat 11 cat 11 cat 11 cat 11 cat 11 rest 11 rest 11 rest 11 rest 11 rest 11 scissors 11 scissors 11 scissors 11 scissors 11 scissors 11 scissors 11 scissors 11 scissors 11 scissors 11 rest 11 rest 11 rest 11 rest 11 rest 11 rest 11 pymvpa2-2.2.0/mvpa2/data/bold.nii.gz000066400000000000000000050011411202542755000171130ustar00rootroot00000000000000‹ æ!Mÿbold_fixed.niiĽ|ÙÖ½ÝUu¬ÁÝÝ î. îîîî6Øà >8 0¸»»»»»»»|Oç¾ÓL¸ ÷û¿÷ ¿:¡súTÕ©½öZkïS5,W¾Ú¹„+¹+²Ër-’ÿüKÂÞ”Þ[5òËçrµùŸÿâówï¼ÿ-+ø¯×þoåz–È×ÿU ÿù•/‘É'] þ/|pž9º\‡µ-àêv/{sÛøÛÿËÿçþ¯<ÇÅ׿Þãÿò_Çêêý?ßxÿj•*½÷õóÅrWk…÷Ã[å¬j/–÷_ÿý k©Õ×~br–ÙM¬°ŒÃjdGµ3ñßh˶Nýû_ô¯¬©Î_¢¡,&óÈjâ«=Ð>h·‹pÂÏ)êÌgTÖO|õÓeME•Ëe\yR´§¬NdYTvÙE'ÑD4·‡h¼7ÖI«©­È鲚<(ˤªˆÌ%§‰-|÷\Ö‘íd YDTnq##¦wú;3ÄFyEΖãå!ù–'Ȉ*–ÊÃg¤U7emùZ4—cå3±0Øc¾kå—Å.QJFR…TYXf‘Id/ùH&RÙÔægóÿîrŠüKF’%,ÁŒXÏ™/Éê¼û¸'“ÊY²¼)¨j†êªŠ¨ýòºÜ)¯ÉWò®<*÷ËÔb²åóƒ1¯ºšÚU9¾12•,"ÿ”Ff£änJ]R±ä9\UU¿¨}2œ²Ôr9„kµ@î•WE çuçñŒ5ßI*7JKu“­8®û²ž¬,‡s|Ÿ7ª˜'«}ª¥j¤ÎÉ}r«!‹ËX\ï‚r®óÏá2Xœ•b°”üF{å£b¨² sl¬f«.j¨J® òê¾z­6ªê*³z&ÏÈKòœÌ¡„Jå|¶¾²•=]t•]e1uTR59®eò™lª i_ÝDßÑYMS_S½t½ƒOÂgœU UbW¹Dà#Îbß•eKYEmRn½J]~j‡*¯ók£?éÖ¦©ù`.š½*‚n®Óè‘*¯*ÏY=¦Rꪜ,!³YÓ¾»*³m‡ã[#C«̰´J¡Âéúz½. Fê}f‰ã¾h"»³êϪ.ª÷3Z\µW%Õ¶Þ«®È2”óà»ñ&ˆx*¡zÂuø••á«©úO=[·QO´p¯2M!“ƽJ+}Bg4ÏÕz5Uý©¶«s*”NÎñÄѼãų Ù}X¯¹TU…õÿLŽU¿ë‹úWÞ$ÓÑÍ SÐä7ÌSÂÖ¹MvSÅ\W#ÕõBÅÖcUI•IEÛ¼W¤°5ѹ,“«7¬‹ª„l­nªFz¼yf*› :…Ygvš#æÉèŽcÞëHî>¦‚Îi^JGUVëTl5[&ËÅ ïü–[ÏT¬µ6ܳ%U|›söÚŒ1óLwó†qã~cú˜=æ±N`|LW3QÝ3ãt#)­†Ì,Sr/^ó®Â¯Öe"î“Iò³ð)Êðê¸òÜcTY'¦…RëÀ¼ar™•UíR)@«ûUi9ï¿o¨H â©ç\ÝîàlV>{žž¢Çëzê¦çÞhÒ˜DÕßµ?´qéõj¹š©6€Æ¶Žª×¨8"…w¼ˆV {œLŠKUüx"ç¨ßô1ÝÅD3iur³Ê”6åÌo&´»–9¦‹™œ¦†ÙÃu™ ž©ðzwÎ{AxÒú}å³F;7¤z'•Z£21Ãj˜bni+tZsÈ\2û9Ú¼î¤æƒþgÕáÌY©U5µ’Lb¹L%úˆcÞù­µn8Id!ÙP^–aÔs‘QMÑ/Loó—idnéIf€¹nžš¶f¹Æ89A·ñj™¦‡É°*¦ª,Ó‚Ž:å]…/­ÉÎ|‘IöàúÆ•vèâîÑf•> ~d7íÜëM9ð〩éîÄüî›·z“ޝ#˜ª¹°¯ÔdžuÕÍÿüØê²­íŸh°¤”\Dñ¾9Ð e­²úØÚÉç¶[Yñ9Û±¬D¶Û6vx»Ÿe¬£Þÿï¿­c5sƈƲªL-}Å.»£ý»=žˆÿÆ)î$sÆØñìgÿ~€@ÿÚ]Ì"ÚG—퉛¿È©¢¶ˆa¯wn‹¼²†È"ŠF¢™}7ÐïýíQë™UIÜ+åîËmd¶dJð)båYį²£ÖJ¼zˆï~Åç,K¸''¥÷ɰ˜…Ò¨8* Q"–:Côþ…yO•_Å^ïþnˆo¾¹c%æ}»D ²úLj0Ñ22 öɧò+q¾ 1|º %ý¿`FlåL”§áã¹W:ËŒœ½þDc_ò²iªJ§ÖÈ×p„Ͱkr8Y̶"ý`Ì®v¶/q÷Wf”\+,(2B!ç_§¢1þ bw õ™Ûj±^ͯN‰ÒÎçoŽðï——à™8ûwe[òü7ò%ãV¥=&J$¯ßÅ"w ²ÑÃÁrÎ_I>±|l·÷Îý{,—+¯Õ þ1A~&“«C4M2ö–ód%âÒïª·Š©Ó¨ñê–úLt¬A.~ä:ÌYMMŒKâ¼²> åÿª·=F´„‰Sˆ‘•Q¿ƒeU"øGO}S'2±L&}\ý¡ÓꌘŒÙ¥æª(::& Ïýóí—Ÿ}M”c¼lD´Wꤺ.sqtùu&­«ŸéhÞ›óf½réÆ:‘ž÷,ï9îµ$bæ’~Ö¢ïFgßa,"6÷â}¥UõEÕÖ‹t<ÕOï!B'rŸ'¿~”×Åõ1FK¥Naô²šÒvÞ~7Þl‘’|ç=ùS5@eWwÕ½LÏÑÍÔ#ýÙ,5ɉ„–{<ØvD§2_ÔÎã5Ÿ³ãèðz¶Š%2yÇ‹o¶Ç³Æ2À? «³ä&T}Z·5n“B'4kMS˜XýŒÈL¬5ùÈÒO’Ï åú„Ò“¹z‰T8oR[£œ#Äì·¬íª¢lÏy¨GšàÇ>Μ2WÍ ó~Ã<×wMÓ–ó^Fæº-QIÕt²ÁßÅqïüvX—øä(-È}B©2³š¬¿‚£MsOO7³þÑÝ,7/ˆò…L}ÓOí6toð# ü#©LÃÞå]…àGóD îˆ>ò“h%ê*îvfž^«3˜ ¦„{ºÉê®æ>g*¸û™§úd¡ÎÌ =ø‘’ý\ìÕK'$jÇ·kêÿÅë]®/®mÞ>¹ Z¼çÉûã½øäZcu°ßØ‹àElF1Vhû³õÚ|ƺ¢Qþ~Sa+¿3\Ô–ueYL<¶»Ø}íùÖ2犓ÃIèüjǵÅOͳ0¹ecòÞNršŒ-wˆV"‡=Î9/ÒËž"·(+*‹zöÇ¿?üßþ½Ýze§ÉÝ&Õ7ó'k2‹\†Bv,xYDÙJ”?²‡`ŽÚ™ã,ãàÂ+ˆq;áØûˆíë6™:âÉ͉aY«Ñ{¾;Þ-+4ëóúÕGbÍØmvXׯDéD*§Úͧ<"òµf´2ž¬êÔfÄ2Δêž—=ù…òîÂÜD±éª±ù¨|ÏØ°âø)ô«b·ác «§œ‚~•L‹HnÐWþ8YísYÔ¹ƒ>0–çU+{€è.ûÁ΋·âˆFÀ0«©ººnFžÚ¤3EôiÕ]gÕ÷Qs€ZkÁªºˆÚ#>;±WÈÞ# Àk}QŸs\dFµ5,Šþ¨bš¡¦y~\PŸTki%[nð芊£›«Ô¬øŽÖìïFdouÈ$sÛ~ù(£+ém:‡ª¤ç›-hW7Í“ü¨ óé˰¸Ô(ga@«õ¨ªÓ¤ ÍîÛ#ž+’³>Â?š©^¼z¬6êÍèWýÕ)ýÅì=Šá^îqĘ¢FqÄ{”ÖBÏTR4òŽÇ*`÷“…á€.U\Ý`ýÍW½õ9ÝÕÄ6qµå2©L-óÀT7§uzF.i.‚EQÃ>ƒÁ¾¬ôØ" ¿ô±Æ:ák¬?¯jÊRðÈnº—¹k|ÁsÜ5{M8w wvóR_@oj®£šH*4×dÈ:_V?nyçw̺â¤@­K‘Z%F1èç¯_ 3ÕÌý›™o™k°˜晎lŠÃ ©u¦¯þ v›@5$£ ¥.Ê%ÞUxŚ挹Éé:rOôktQbš^‡¶–ÐÜ3‹¹eÜkMJwøÍ”ÏCpŨ&¯ê~ä‡Çï—y྽ ÿ¥×»\o\[½Ÿåà”ñž'ïCôB[‡­Av '³ÏþÕŠÌ(¶¥ma‡µ»«å¶Ž„h”¿ßTܪíŒ d3r^_qÑîc°çX‡œ«N!d¬íc¿üû­!ú»‚˜Fv™H:–»iîDbûsCä'ÒçÀ ©%ªÙB4Ònë‘UX\%r%/?I ~ÀÿXHž{™(;H6• @¤H"MÎå/Î*gªËïΆì${>ÃýŠ•–]“1¹[ëJ‹•5½éI°ã]¶â÷‰<ÒM ÁêJÉñÙ¨”j#±ÿÊ[[Fû 5§ªS2˜Ë:ý@…`â!\“D`\?"u~bÉUnœ5ÝcÜ3œübŽçc~p ¶Ë£qõᚦdœÐ2øqc±2œ¹ ª":Ηìl5ŸØ}þŠ\ ~xVSà¯Ör§Øõ?¥>èuT,å¯_9*Šõ2qZ-Cc+¬®Á˜¶,¹8₨+¼wnÀ˜)¬JÎR4ÎØ0–dïIÔzøÇBYB çû^dúyÕXu‡ø4JÕ…ÞAeÜ‚$àewn’ŒåyÕÖîŽÿÑýë8øQ…È5\+©Òsç7ÐOtxøG1}‹¸è£Ïªr*¢ª>ö—Ц³©Í¸}W”'K€ÔføOjuA•$žU @næªÉœê:¡^Æ™,¬¶¨Ã*5ú•*m9kÙw3ìgååRb_\’Ê ¢ÁçXªÁïØnv˜îë0šú™Ê¥ ëxq©àQ¿èPz9ùÍjðãÅwã-?ò€ÁI°•j £MÓÕíàd2éÍ3Ýe·Ni^â}ŒGošB~ïâV¨T"€ g°ÊÛÃàj ‰øyÕeyKNU­ôAÝÙD2ñP„¦?¢²/xYÂÕyMV¾»ÏHƒ`3ù;sM$®z/H^ô¡ÓäÀ²vZÃí°ŽsÒîkEemEµ_Z¡ð*~µ´u槆+Äý+üXW~¼çä¦ôø¥ñ>ª_ȘùëW'á&-unb¼/Ž÷nð.«î©J‘ñ–·¾÷ΆØD59öÖ³ä ~„ÓåðÏÉVz£Ùeâ»oáÈg…ÔÀ£ße®#è#ä7kdçËw3\.0Ф®  ™E&”¤õødÒê6î&œáš¾ÄÇÈÿ1ž0•cÙŽ2NÏU™E>ïxQ¬Úö²8î¨bêgz<ø±O÷sCqcÌ? ˜ÄÿjæˆÎeâã‡ì‡Oæxµ^ŽeS)D€ßš }èüã9Õ~üóâ0·NºŠUq³IG2‡ÍV°H¸ÓºÓÛÜ6•L\–ðê³lÇ, Roâ+Ɖ3Þùm³â”ç¾<‡K“˜¯±¶ÝCM_SÕìÑÓðSNr¬ÍбÃêÁ”F«ÍfŒîË;ã©æ¬úäI[½«ð)ø1Ž«ûÙT,î²ø¿›-z#ì%2¨±Ö”r—ÆÝ*ÆO¯è½&…Y£‹¡ZP­¸·Kɨ0Û2êñÿ ~ìpE²ö{—~(«È쟇¶X­íNçŒý‡¿ÿñÞöÙNh¶¤õsÕ­rÎ0ô«ædÐEÅ-» d’uÑyíTqÊ:CÁÀŠ÷ ‚|‘GŒÄ™ŠŒ4‹k4Åê­5Ãy+ŠÉ®àG3ÑTt´ßù›xÈzjÕa ó‰X{ˆ«ÑUÖÄ ±˜,ü¬¤-ñ¬%ŸKxP4¸¯ÐÎDg²ÇoΗSP–%Üvø“{úc{ÜkA¶¾TÆ‘ï‚ï’•樋²â§†Â‹Ò²¾~㌇ž|œÙ>$kî„Wq”Þ>Xü¨èü*Ôu²¾}àH¹kòqß/!+¯¨Ö&'@¼·Ô–Ü û¬#–øçAõmTüdáÁñü¨Ñdzðc³t©m*¸6å(&‘9 (² ~4ô|EýUÙ ùÇZk…SÖñ (ÙŽ÷Ý%Z7‚‹|&&V”éÄqí¨*EUЮÖxüóä(‹íä>ï0ËdVITÄ™œï‘üNnôí`æbÍp²­Ê/øúžú(Ç]P}áó΃YiAéŠÎk+ðÚ©k½ÉVJªËÄû¶ä²2Gâ´®©«ê£:>±°Œ~§Æ‘õŸ‡{¤Q]` [ñ×›«"æ?2ÜöIQ–»¡ŠOXô¤G²õW%u$ýZE7MOøÇ>ó †ÐCgÐóTYU†*£¯*Ÿ¥ò’CT´Æ}·v&Ú7EMؤV}x_òü„º©>«}U}z¤nÛm¹[êк¯.¯¯0»ìÔ_¥Æë¾Ÿ[/c;ßûñDV¢öWÿH6–OnuJ¯Ò¿ª³:¦{7.rþ]:ø‘Ë}†œawƒ3›FoQE¿Á„V»£,„gFå­NÊ¥Ô_=„1Ä4it(³¼(mâ·C/*jÊâU_Çñà{|}5®¸J.ê=ÓS[·…G©ò0Õh•pgúëÍÆqw,sÌlâÜÝÃÿÈmb˜×xIsQÅ’«×²/פ\¸°#vxÏß*뺼¿6Ù^F꯾È9Úr3“Á´«º¡™d†›·0Â9Fš”xû ÍuÎ0LÆÀÛoêÔ|ï*|¿?Zda…váÞm'·êÒî)æºÞ¡m“Ȥp/3ÜÜM,÷`é|먮¥?ê ª/Nbt‰S(£ëËù¿öj%,!©¿¸òX™¼çéç&ñÕµÊjo±“8×ì þÆ—îáØqì¡èY×~j¸ÎH;¹TNúã(&_ð[¨èZ$:‹Pöç5šÀ8QI´Ç?oe®y z´½ÖUô«Wè-Ëa‡ˆ!ññÄòƒCóñ>¡™wáO7QEDICp.c:“È|ÿ$oA/Ùt™>I\J«NËx’]p>†ñIåÇ`Ç» ~„'g¯Mfœ_ý% «ã =J}a"ü3¢µ§~w+È—Qþê4 fÄÊÎd­!3ºÃ(iÁ¸ŽÔp%ŠÍD/(¡6ãlƒ…¹Ñœî§«ˆ ?ħ®FvaøÕPÜ¢BòwøG 0i=µ{UZðc ™~Æüwdã¹ÔiQÜ ŠÑ¬°þrÒrÆ“«aÜso`VMÁ‰\¥êË bƒ¸ŒÚ=Œ;V?ªã‘|òÞ¹W8ª•›ú«y2 ¼ª3±2GÖ…ü<¨áá…uYôõ·Ô>m¤R*>ùÿpõµÌ é„—8›©h©¨„Öþ,’šâ”F¿ª®+ë]TýÄ6•õ5šJÌ+èì‰`=G@„"º«º.ˆô®Kv{¯(ÂŒ©ÓÔøž'¶eæ¬Å+ÿ¨”éÿø`ΙøÇ½t*½˜ž‡()urûª\¿ÖÖÚïFb•`Œžªék¨|åT2Ý^ï×U½7 !üÃv×Òa©çʢϪ†°#Tsi°ëç3¬ó½–:LÄ?³v[qžŠÃƒ®éCz1HvL§tŸÀE. CÚþìÕILTFYJÄ?†Þ–‡€-*§ðõÎ/¢•ÞîIF‹³–“lj™E+}C£þª Žf6šÚDêrøß]¨p*ÉwUÍ*«‚õªÙÒ©âž÷ⱆ9{¨”ûÌÚØ†Öì£nSÏ5Ó„w×@¿ŠF=ð1T¢Ðî øa©íÿøÅÄæ*÷ç˜Ëª£²¢@½ÿßî¶Ž8>0Ù¦¬ý Jü¡Ñõ7KÀŒ3:<¤,æWxÒ'xfiXÒƒ`æ¸Rº­{*ȶI-·› øµÜGLj÷Xë[”À½º6ó®¥Fà$–¥~w7ëâ‹sóï þÿ^íºï:ìýh}qÜ¢–“ ý*ÉO⇯˜$1§³ösÉuä·¬þŽC÷8QšZÛ†¢C+ºN[ç¬"â=x ³»JtÍ¡ËJ²˜KŒ}Ã*èkÓ ‡%Î?ªh‚:‘᜙Î,~÷ câ†gO#«N§zF&TÏa9’¹ïCÅvì Føög·¬¸èWgDu*· ªÑpŒ,ø!áIð@¯‘›¿£^ª?÷ä6™Y6qªsµë8Â<:ƒaGiÁÌÉèÑÙ` ˆŠåÕNîž#èCaˆ*'ˆeÄb+ ’ÿÛ™¹\–ÕŒúÝWèR ÉÁÆûWñÁà ‡‚’ãŸI¤ŽN¼hwG¸RÓ[© ¢ˆã1ËÅÖêwÝàÇ#®DK®ÇÆž—ëÄu¼‚¶hCWA¼½ KQ>µ1ÂWï0¿XV.gƒ˜—5R ?’¨½ä3ˆøp˜;©‚èJ3‰ÎoQ]j€.ÏA«Ä|*¹êGý• 4ÃFöHÑ™óV•N—n‹¿1ŸkàGl]îýºÉbÊ3ÚdèÜœÏkF4]‰¿ÞLÝ‚Ä 4^Iô¦"0èzèaùpÜoÉ4ĶÌ:‰v¨ßíBîkèØxOýVsøÇ=/±Ù¢vjªªÎНj­ûnÄáö²³ÅølC˜a=»¸ºS9ñß·³RQ¿ûÙTÑnÝÿã:~|6Ü…Ìøß§Õ]t·ó½–:FÄc ¸ÚÄÍ„ç³7~žþMÝÓ1ÜÛqò2ÞW85*Ô6øëxj\ºÎÃ|³ŠÞùE³²ØMá E¨VªÈz8(GQgpÅ)¹É«c§k™:üwÕ´4w©Q*`Z™+p·9 al´¶Ú8}™¾á9¬ÎÎj™]½$9¥Šs¿žPa3’˜¿‡z®[8è—©Èèö1ŸõF‡ª‘ZÀî°¤¼0Ñ|¢ƒ8èßY뜓FzÔÄ«²° ‹v:Zÿâþ ½j¶¹ÌÑ­‚Á(÷(XÍW¨ çµÜ Ñ+a·IT{Xw"vµw¾·þôׯ†“od c^§K¹'€lÇtלÆÏànà~dЏ»£¯}4‰ñÏóé(¦„GJ éfu7P÷œÆ°®ÿ·_]t%°z?DZ¬œÞóäýqˆ^D²¶Z³í¯vç=ÐòdÞ6uxÑí0v»¥Þº¢Qþ~SZ«¯3¦Zvê¯ÖÛ[ì™V‘IÔGÁj§µ#ÿÔ<[‰idݹ‰Igˆ";Ä ±ÆZ€ ÖLÎíD[QC !~ܵöZÔæªýÜ}m‰LÏeNU–ØÔI"·~…Â3 ³žè(|Dà¬ôï£ûöo_§ÊÉ "àF²ñ“dÀÏQ‹4ym9\Ò4¬´:8³À½<òt°Ç|Ú*N àqÑDÆæ÷±ÊóÂoçáR¤ã^<z¸ÔJVþ"$©ìè” fÄÜy—9ÎI Äd™Nð56ùÑÞ§ûçö‹ÁÏéW/9Žò£Ç1ëÆ|ÿ( N ¹JÏ£s=ÆÀ]‘Óío®j©48äâÿ{¸RÁc©žŠJAÖïnµ:Ù9ßqÕòò›Ìª&F3OÿGl1G¼£Îµ:O†6 ÿ#Œ±²<ë½s®Cl«¨³SÌïýæ¤Å»ÝAô_*‹p”-`$ tZÜí¨è÷«Q›2Q zæù|É¡²‚[¤kÙÃЯ†Ê*êü£-ãÍá<–CŸª…v}ŒÊþŒ&;ZТýyŽ;‰êÈYØ‹[]CíñþÑÿ‘Ù¾‡ÞÔŽÄã*/¾û}"×fꯒèÇê«h£»Ü07T$=ÿ|=Žxõµ­°Çê,& Yú½ç¨'Ø/Deð1 õïѯ2yzb;;‰YY݇¨-D¿_S]̨áQ?Uô§CøÐäûìwWyªH ~ò Ý~ •CÐÄ‹À]A}@~g˜³C¬ÂUØ€|€Œû!³tèÖÈN—q8C]ùVü…ž"DõW>ðË¢)ªZ>5v›ƒ< œÁ¶°—ûûŽC”ïŬãîNé`Îb7g‘¹ØqÅ)!s€jSwMl^Âñ#¦œ"BfÛ~˜|v5°ËÀ)zÀ¤ò¡ÕÅâˆ&àL|–›U*îí5p…°ê+ßDo›AÍ~¢ôáë¼ âÄm³V:Y-¬ óxζÀÑC÷áGzª"Ñ1üþÑ”hr —äŸWÄ?[+.ïQ¬òÎF±Õo(¼%©g=Ošƒ>5g»'Ñ5ñÉÑ/©hL-ë[¸Ö晼¼¬óØ ìw7²Ç‰æàGmÐ#œÀq-Ī ~”£ë ®²]íi™äIâw|âø "tNOm‚öãóÚo¨·m+«ã§”Òoð?|©&.¤SƒAŸt74Ž{ô;ŸÀn¯ã á”¡†ì©ú¨ÊèÁt'—õ­Kß]éÑöcQ‘UàÆ…°ttÃÄàÇn]ÿã4õW>hN¶»þJüóì / %cße}ž¥ÿüûñæ‰8DíWD²Îj}w·Ôô«uz„z«3Ã?|ÁˈËx šžÉ0» ø59#{ð?âzçÑò±‡òPA[X½ ³˜DWã Ý7¡¡®C¯_<…|æu×u%Üô^f>ëq(NN&}‘U”P˽kÆ\ô,šëVî1•‘úÝwjªnÂk“ºJmØE“É΄Ã©iZëæܬÐɨ7Ë)º‰}Þù†d"›kÇ‘KÍOe, íkŒã‹Îú·o~$ãFÄë®JåÀ@uÈü¥Ç˨\ç&¨¨Õ¨¿ºå]…¯ÀÑ"%Üy£6Ãÿxâž§Ê¢).Ù úsº›º£ƒƒ¨ßêŽK×}Ip*ƒê„_Rýj©¿~õsÖ{zþ½xìJû²תòûç¶uК‡^Ø9ž’³ýÙUÌNe§¡ƒ°³î—%$ÎF=ÌVxy¢ýPô«ýödvA‰&ÒˆÁN5gƒÛŽá½ž!¯¼hÇn#™Aø³dkÄ qÿ<1g5Ü´'üãwûIHr²NXõÀÅtPtb´g°ÑÊ\ÅÎbé'2õ¡ðj¢¦ˆ(¾†`Ä Îg/‘ë*œ`ñù ‘ð/2•Dä_ç©Ø¸ˆfnì-¨G·ƒ=æýVÖÔMŽ66èP޵481›L9+Jî%âñK"vwf?¨ŸÜn5œ¹DʦðŸ³ÄzÜŠAÄAÏÞ‹Ñyª©U Ýä1nò)ú'3Š­VÚÌòŽ«¹]œ™ŒäHJ‘1©ü ŒMœÏH4^Ju™mõDêÏûVùOˆ|AÖ_-§+¬,®QL5™z…·0¬^èü#‰ˆaЯBS1ó•­ ªÝqŽz?Ø\ÆU—j„Þ;7àò„³2:ËÅRøÇ(¢Fré]Œ·@;Zã‚!̧rÖP9T™lý ×ë<þ¾ú†/õWëwëÒ?Ø ¦Uuè%^mäÈ=ýçEt)}R—E™H>‚þ:dð?ö‘“ç×EÕ\êww7‡/Tƒ5 ŠgÒ—¸’9xw!í©°}G/\tñ•ðˆº˜²Šá‚ôF@¿š 2pä­cß]•‘ösðh1rû¡T _mÒ~ª§Þ€™zÑ+ð‡ÔUaÿ’(÷{Pßá\Üa-|°Ÿ~7Þï"˜û”µ[›:-?øÇVÜ”zŒzCÿù:4œÌÔŸÓŸ¨ÇÊiÂSs¶‚êÝM ruö/Y¦ò‰ Þñ"Yiì!0¿bt¥Ä½z,çP§öU¦~·¼á }m“›Š©nìòQ‡WCÌÿêçûÔÉÝÃ}1ªˆ˜ï½¸å­_cÔ ~%GÙ¯òpÍÎQ·Ð‚þÈšæûŸ|¤‚÷Ñ>§; ýƒÚÝÊüª#š»ÜƒÁà2jUéݾÙ;h¯uËÉL7@GŽ6ú@-Mý…n<(þ^×4.÷}sGê<ÕSo?®Y¬ÖÒ>—H—úÝ´²gó€w¾¢þj2“ýÉXr±–·êœTZíýL2TµÓ¦¼»±;Œ;—{¸¹¡c»5µY‰©ÀÈFÿ`|šð¨-”%®yø¿÷â”+…°oG4ô«üÞëøs³øÅZo-µã8õœ+ô{$`”'.?úÏ#Ø7­ÖG×ÙŸ.³ÕÖé)àˆ¤–é îÇX{¬[¤œì°•ø'ý²¸™5È?¡ÓË]Tçì·&8ÑÈ!Á=zÃAz„?®€“ Ä[âß2ØË8¬5~r¸ØN>ò‚ŸN†éÔEÊñ|ìµ îr…ªÈ™hXѰ ”&‡Ü'žíåHÜ‚Íxk—ƒ½6Û­<ò£¸,º ƒùªá¬òÂtýMåÒ¥ö¡÷<ã3º’ëÌ…™4s3bkg=zP]°ëDàtþúÕ}Tý}¸£TTžO8ûàaô¸!=úU±ŒyßÕÛ®IJÕHNø@¼ýDaƒr“XBäŽNdvSºŠ+5\z*Ï‚Aõñï°Ö:©ùÄhðî°Ÿ·dç-ÈÞr ]Lysk0é"˜y§2øQžU”~e[©á3dJº<Ú Oyjßþàwb¨qª)?KCd]†ÿñ’޲f\™|â3ð£¨J¥r9—­À½C•í\ƒ~²šüfüxÎ]žŒ|»ÊDa´˜ÔúþyR}U5‚ŸôWW‰nùt µ@¼w.º[ŠÛoɦºÏ£_]£¢ þGU_»pYÓý¬Ü 颋­[ áì„/äÃ?|ÖXð£¬ÄªývÈI¶Eγ¶; ü(ÃQ$Åé8ÿøUŸ„Äu? Nûpí¨óÔ_ùPs—Q§ç \æºhçû\f´ÈL¬÷èWMP6s«'ôîF¿§èwF¿Êg’¸àÇŸ¡ã;#n€§,Q¯aHùÙ¥ ¨‘HÀþWcP ¨/2“:I†2Z Ñ÷õPê™ÚéNô¹ô„T5¿¸P[ߔ«^…S1•ª¯œzW‡ÚE1Ç{¸uÉ4®Â$Ÿ „íQ¹&ûÕn=™qjšuºÚ•ÛýɇøªãºÛãUD5—87ÝáQ¾jŽÌ&z‰Þó·ßºãxxB r–Bê³£:À ZÓïAO¢NC¿ùÎ]_xH*üî.pˆyô ÐXMÉ©ß̓Žùmýî«;àåà^è‰[ÙJnÒ…Üóð8öÓ©ßÚ¤s4UÝÍÝ1ÜéÝÓè=7î¨xë¹™a2Õì( ?®ùØ ¨£õúÿú‹»®tßTF9èW9¼çéç>< þùL;¾S×¹N½UFyæ*AõnT[Ù-ç'ëw“XÎþõWéesñˆê«‘ö\Ë%2ŠN~g/û—üÈ¥ zÖ>8Õѯ~#ã#W‰EÔïNp’Ñs6WÔýðÐÇÙA©$ÿ킵Ï*-î“¿dmEIDMGmÙ_¬$¿±ÕHXhkÙO>†Ð!8—Éœ±Î:±Œ·~!qð8sü@xzõ@F"{®ÇN#ƒÀ¥8òS°ã²RS­uý*<šÄÍ?*ªÎŒ‡ÄHõ‰l“@ƒîNû`F¬ãüÿhÈç_Ã|˜ãÆ(EíÌD"^µ”¿Vr†,q?÷SnüsŸŒùÌÕÆÎAÞ>F”µ7þÇ~+<}ÈÁ§%dø1QŸ~¡k ¹û0j®ÉÃ"“ó⟗ÁµËZâøâ„U€yg;d<ꗆƅ܆tÂM}jžgæ5É*ñçº7ó 6¼•þÁ àGoÕÌ7È8 üH®ªš8½IЯ–©ÈDÏY ANfy ­æ1™drU/ùSÀPþ¯ÊÛ¿Ñÿ1ˆ}%®²'Sœà…àGyô¥|øçGuy*EÓRÔ‡Hp„ŠÎLOÁ(éòj°øúÄÌd_ÕqôËÅsáA¼%óÝÿK÷ö;=Ñü޳‚êÖ躞È^4¶R8/ïá3ÃPü Èö¸“ßNq8û—T§Š[¡ú|†«¥s±ÕU}Å$ºû)Ìp”²ºº4Km0aì&lé,9SJçÞwã ©XoïÈ#*ûógj…Þ@ÿùEzàÞ‚~•¾ðN?Q—ر*Ⱦ3¹ÿ£ˆŽEýUI‘Ê;^R+§=ä(BÅmfµ–;bˆj¡¯ëA&4Ž~Ô¦Öøuðãg™­øõéõ>F>3 ÄÌ«/€œqUéoð£„ÕÛ9/ÓsÎBÁ› ɺüÝì社ڤ+➟‚/Ü‚”ÅÿP A7Ì8T‘÷ý‹¨IdEÅRïüö°ÿUêf[°úr©8ÜõÍé±oÿèAÿ E¥òcjáF1jR?нKêŠBb–6D#nµ.ZÉÅ¢ý\âÖ&|íèª!Ží(8Ä%bD8NKÙƒ£‰ä!11û_­³ˆ½ Яv‘‡_&r½„ø©«äÒ‡ÁЈD¢%œ‰ˆÁÖïî¶ÞCÌ­Ì>‰©‰¬~ðÛÌh¯ŒCŽy™qcÉZ£hMó¨yNï`fèçü†Ù˜ÁÿÈ‚£Ü Õ·9æ$T…ªj=µ»q)îë=þMN±Ù P²¿¿>G\-ì<àä Æ)¦%àïßù½pŒV–¿„Šà_P(²—„– Á¹Ydpd³\BUqÎw,_/0î$Ì¿¿ñ?e0ücš¸EõLbó 4³ÓpºR8>Møä úϵ•ÌYŠÇ§ŸÎS¿›PíGA›‰k4”~Âê(æ¹É˜ŸÂ&€HÉA«K\ùKäŸe>¼äÀ ©¼ÝCô`Ï.êwñ6¢«ùpÀú8%ÈϰëFB“„ÊÝfDûãd÷QqUöâ)…×ÕqÍ ¼»t^úÏÃÉÊQePÝ?†§¦b5ú•¦³® £WØ?ãþL[´ñõä™Á—Óø-¿ª\T+tT¿»„úݲÔp[äØw©0ËÊÕÖ;u5ˆý÷˜°Äü»¸Õ|¦nw#ðc nwt˜ÃMp'5ß^Ý‘"5µE/¸u©0¨€¶¶œÝ—kö*¤ãí(øQÉ„r?Ô¿Ðÿ×|fo• ìŸ8•}N2ÃÂVЯÐ^ÄÊa¦> (>FvuˆaþÇ-ÝüHîìðtU<'^¦±G ]q*Ñ>)Ú]Ü« ßìŸØÞèÜ’EÔkà>U†}rS]< Ç£6ܹÍYó’ýÛŸ °ÿz::WS%üŒu؉}¦3ª©ÔVv ¼Ç»Ý:ê$ ©‹nT@E ¶Q£<‚ºâ¶æŽ.…«?• ¶ÑtaÆ¢Ÿ$ ìhƒÚd:èQ0íDªš@U0. þê™õû—¤æ^èÁ=ÙLÆ4c@£iœ©‚ n÷sßÝÒþ1D*ìö5£ééü¢#1VÔø¨ÔÞTTáÄÃo/ÈéµÅnÛyw4«ÞÝÏà&t×uþáç”vÞÙÓü»H>¸²Øùѯ"Ùm,õ“û—d¶;½D4ë²)õWÛà»­NZÑ‹þó•va;±÷z73Ï¿‡­Ð/Òàx/ÑÌ‹E|{™“„5gtõÄd;\ˆF\LŸ}(±†X¹„ú«-äÏ)T[²€üì d4Q£9+®‚¢ý¯B³ÉZ1… y5YþfâþE¢õ/ppzÏØôë46ŽÅ4xEè`ñc§õX„“·9sѾF£÷—$§™ˆ7‘š~«`Ós¼ðN¨oÓ‰ß]‚Å"ާG²1ZÎ"~XK70(/Ùã,ð£²:ÈçD¿Ïÿ=ûw%«ˆï]eìÄ(䣨˜¾êPòòú9ð6•¦µ<=–ºK-×K<šn œ§ž`¦ÈéD âÊ,°9é8žÐj6øñ–ãê ~LqCÃëKŠ½â“ºW(¡no[Á{ÿQ’ì/àÉ +Çm%¥ŠzèêéÌEÕÍ~t¶¥²8G9Ž›žº¨é¸½OØw¼YäðêŠúê|ιojÿ5f}»7þ¹Ç>LoÆqMƒ£Õ'â×B':N}¨¡5œî¤S꣨M¡‰ø‹Q. ~*dŸàX¼7…ÜÅxÂÈsvÎm«ÃšÐ¸/-PÙí„n¢¶bš÷xOX‡8]2‚Tž_•Ítðc†©k^Q1Š'ŠÜbתãx\/©3ìß>À ÕQ-SU@£JC~°‹ç=úSzˆü¬âþT˜·”u~0l þQ¢"½ÙÙã õW;í=Ö['©(ïds†Ùyí öôþñGÑœü4dêûJº“cÛÓElž"ÊÐ=XF´ ¡~µ'2‰ð¨[ù“DµÆ[é%<ÚÓ=Ö@Ùü¨.’‹uB|;O·3ž_‡’!Ï{vÃqo7õ»Õ¸Qlq ŠzöO”ÁâÇ*듈~”GÇI FkÙà[ÃИ’pW_"Þ~%ÿoNtž®´ V¿Êìt'Jzðc/,&-G;ˆH‹üq†ê ~쎃¢ÇˆE‹xW.1ÃúQeÜ5We;±|upiA£¸\?ùÍHèÑáQƒ–3bbz&¿€ ›àvÁÓr©¨àÅ çóÔ|òб+¿q›µÒ—ã3u3ÝÙ1u¯¸Ôõ鈼,(+I¾v&ÿòb8‹Å(Îw'\ÜDË£`ÛdâWo~Ò‡¦*ß?Q»Ÿ13¢²á³7°+ÌsYÐ9aìöú¯k[ËîŠÿÑ—â Q­)üb2ç­8äÿ¸MÖЧ½gÿÄú,ÉÓ)·æ=L`¶8ïî'IÃ~#•9ÎR ÷¢ïs™™NÂÂ:R.üä‰Tûl7ç=µ^øç³©Þõ!#?~tQ~ÜCã]•^ö)Ñé¶lÎT  9ûríÕ‰ñä7Qô =g˜á U‡ÏsT’á0„ƒ+Ä%?,ó8ßw8Žé`<ïad Ñ53‚I«Ñ¯¦éVj•ÿþ%yÙ×í>NÅÀ 2þð à4ØæŸÌ0Ü.UCT,g·rÛcaZ™é*Šš{[NdW¯-T}ÿžÀ?мh ýðÂ=ýç¾0ÅTÃùÀ_îák%qWroÇ jžèW¸ò©ZKfR)ž3‡ãâz´WÓœCø_ü[Ã7"zÏLTøGHb^P|AgÄR;¡SÛ¹I¥­Ç {ì*mça§ÜvöO¼Ô/ýðgÙ¬ªô#CMÅó£®ðôÁIöT+5M¶Î»Î;ëòÍ?d‰G±PÈÇQߺL,÷xþ`j›¦±{bO¬Q!Ô¯ŽáŸ—‡p?&ã íåLªj‘ÛöÀÿð(%È#j°«oö¿ œE~3!ïË ìµKŒCÃÜŠ¶æyžÞNpD³Òò“Û~"¯¯/¿Ëzž×ñ}Îçâ››­”Tk=µÉËө߉—™ðMÆ¡T„…Õ†é†SKq8þÑ<˜³ØÖÈÌ:ðîpj¤'Ôð_bñ8DäÔ÷ÖÄ_˜Aƒê-NÿãYEì/ÄûðUxÔEfv“NOÔX…A1é®P+ÍFz9š¢_ ¢ª¸¿z¬*Êsž{ÓõÍ2a'äÇ¢*nµ< ˜ÊNLš§ŸË*z!þÇ}ž†´…ÝnCë:ü  eèö’çv\GeMåìçá5D<£¨“-é ,À1Ô³ô\Uí@±ßAõnâêhÜš5DÅhacèΛˆkš=ÿRi¾ñ ÓàŸÏk}ÈŸr«Õd3UjžÛQ}™j³mäùmѬž‚Gáiá·QÍFQ›Þ— Ô7äø¦~·¢5Ź gþBÅq•N¶‚N ›ä±} ýëžjÛë&Š»;9ý’Nò4Œz‰ciG¶P\M”™ÄZ1Ò{þÖ°btá:¬Ól* Ü·»vÛ°gân½_M¯K³Œýw#ð¬Ä>tŠ¿1¿ižIß`eúRá8m÷â‡b'¥‰"wir žÿQƒJÝ•ìr“Ä ïžó¨Æ.XØ•÷õ»‰ù”Ú×hÕîÑ ë« ¢‰ÿ ü¸åŠøÿ!­ÊÿñþWaèËžeÇewܽvÿœwèW_aŸõ‹k÷·Ë7Ø×©àt£`ì8£IÑ–æØx*nd*S*áÐ/³‹ØûÛ;oð}¨‘ŠMÅmùR´³Åiú—%ãàIOý©¶m`ø@ÿnÄ[ÖlöO¼IäJ„;Â=˜\å ’h¨8K,»Î*øÒϨôÍ3~V¨¿êʳ?ª²ÃsöñüììCå=ôÿõ/\ñ­¯î³ë?Ç×®-Öd; ϯÝI¥”§‡ì®‹]rm‹=Üë±Ö‰Ÿ:–ØV5gøQ…XPœ·wÛ=ì"Vt4¡þÏ?/ü“ýéÅ =ºÍjÎùôœEK$].ZŠ¢ú•ñ®7ÕËøçÍÄEÜóŒv†èš\µ$§˜,Πp{ú?ÆÂ@šðLßõfâùµÉ|ï0³éàÇbüŸ2!úµ;ij °™¸üËI¢À‹`g8ËJ ÚÜ%6D掟»ÍÇþW£È¿Ó¡_]&ξ'Þw`îˈ¦½œ6ÁŒ˜Å«j~œÝR¢QýN]ˆÊËÙDÖš¸Âq€öÁkîÀ$®Èüb¢ïhPgp•«Ÿ–x?Õ63nI"®ÂoÇe·$ÿX¡šSïÙ¿ý ç¡?²ŸŸn`ÿÄÀO‡õŒ~„ç×c>.õ˜W·x¾~èìŸøÈ™NÿàrÜÒüËyrØ…8I餫-:·fÛ*â¬Ó@¯VT\•Ãß<ŠÿE~9P àH#èx8è0˜§É3¼òv–¬6†Šâl±×N¶ˆnÌ+'¹îYð'©ZI<ªŽ>_t)“j¤á:šNWêÚáŸoUqð?ÚˆçÿàéíðÖð=äØgáp?ö ­ß²{[4’óô\UŠ.rð*Ã.ü~?ÝNyž?Ø*~Läùµ•XqÏd?Ð;ŠS"ÝÅÝàŸìC¿Æ3g/à|Eé)C*ã¯_ÅÄ??Êgo‘ÅíŸ8NT¤Í¥àŸÓI$÷<¿bªß6Ë}ˆnû8Ô9=aÿ—“ÔïÞ%ÚÏcã¥p©ì¶JUÿ¦þ*•UÚžBI~åF‡;ËYžH‡Å"~ö|É:T“žîtàG;vùð< ¤9õVñ Žâè•K#½·.;Ý]… †E_Û¥ÊËahŠ[ñ)>ÀÚ¶³“åMêN¢Ùsç2õc\‘A<·ü,wÊ”®º(ɨ÷ë½S–Xœdììл*-þG ºxò¹ËRwµý+>h¾Žj®É\¨àQ¤«:gFè6(ÊÉTbE)ÔÊ€ý¯>£_?áàų ^·3;¢Û˜\‰ÙôvvKwf<–:´;:¬+7|Ô|£IT 'z)+©7ÿX3Þð¿øâž+‘uÖ;~D«ÒÝOï›~ðâ©k»õ§Õ)å\f¿OýîsW;&;¸¿³ðüó€.Å ðÝÓXmœ9¢ŽheÙB±OÛíNôæ}ØÿjþùÏõÔq÷% ë]ƒ‹þ§8C?P7' nÕ&ž-6”j©!Ü¿ý‘µÆj/^P‰´=ú‘35yeÙ¥k'1å%Õ±s¨“©OÅx©ìbôÝ!þÏ7Eœ~ìŸ8•¸ºõ~ üã™o("JE´œh°‘6(nÓÉv©Võ®á FòülU·äõ»‘É*§áä§{ݳ{o|rÒ Ä‹ÏDì¦d㫈⽜ºÁŒX ü¸ŽïyvÚ0–äú¯©¥_ÌÝ:‚œyUŽÇá™ÿ)8J1Ë*øƒ1ÏÓÿQˆ÷w&ާæ7 Üh,‡ÀmGX~„Còì廋ØÛ$ýHÿ¹_û—ìçùQ5A˜Ô_õ¡[òï¯Åq}侯OýÕLá&m ‹ó¨vžžþ* pEòÆãAðPì×¹(¨¾j ûÈ ³êÿÉšüÆ‘ÆÔÉùû j«¿?òwÏÊÉMéýßôPýëÊÔ·ûŠ. Z¢óuÕãO~£~DYúÏ=»ŽG0Éàƒ‰öç9îðàÇi¼xºê'Þ8³­DöC:”[ÓÁ~,;NœÎÍY+†úuŽï–ì xšçÞ§ · =â³AM_ðåϯ­¥|‰1¬ï×ÎöÓ*J‡ó¯ß­DÌM­[¡¸Gfÿ’óDú(î½ R9}KÕ‡xöÓòìÿ¥tD½üØ!SÚ¿ÄÃ?|¨ßõì5%ë†ÚÉîí“uWu_'sïáùçIÙ¯p+3ßGÇ#Üî?ùäÉÌ0 ûu-fÿÄ€ê•ìŸ8—ëQõЍä%“éj|®û3(Ís›ÁÊÑOÒšzÙ²xó=ÍÔ¿Ù°…ˆìO–‚«—Y ñÞ"ͬ^ÎkðVà§\Q9©Ê¥F±‹ÊÎÚ˜ÆÎÝ Üîìò,n˯  u£Þ.ºm:ž&ÓÉ»ª×°xv*;p'äU)Èñ:éî tŸ¯?òáW\“Ãh¨â¢Ï=­ñU7©§j 7Ž~ed.¿Ù7‚ÝßÙÊ󣆒±$C¶éZî9æW£9}—é`oÜíè?ïBUïÎæ;˜‰›óFõæ^/Et€{+GÄqï¡ÿ¯¿xèÊöͳ ¢Yµ~ØýÜTŒµßZMÿGqçÄÿø×]Áð8è Ù¿äçv‡LÈþ%¨J(dkøÇq»-®ü}'Ž~¬µýlÏ!ÿJÞ†ˆ9ì;±ƒ:~†§|-åv1i~„Œœ±VYEQ[Ös÷u!+ß +­F†× q…85ON…‡v¦¦+ã7{úüx¦ÙÀ…àÇ+ÔôY°‚(Yãé҈½ó–w€yGÛî'ûì1ϵ¢s= ¶&y$«Ë×g ¸”’¬l3þù´œÞ¨o3™óh§]0#–rÆÙ»—Ï£y¥3ûÁGÒ“=ŽGÏ)¥–À;ƒçÁŽs SY±ƒ=œƒ>Úk®ßì”Ì œ¨3Hƒ—ý8òœÊ«Hý jmÃàZzö/ÙÁF{'·ˆüNà§kxÆ?dMu|q‡´š…_ä"ªyöÍÿ ÿèµ1éÅ(q•X_—<üGpžë^ÿ¦Ž×å ðã“+þùX¼÷¾8æ9án{¹ŸWÈÒàI}*²Bé¤ðê9Ì«>ÿþ¼|"ä¦s#»sÚºèKÐ?Ø“ó\˜ £ª œhѦjM1ü„ý:±%9½xé¾¾¢SŸÕ-gnFc5„úÝÀ;§%²=5mp^×ñÙ³êýçÙ8JÆ;Ýÿü1ÝtϘaGüóyÄ{?|ô“tT~àtOëÈwW¥ý@T„½}‘½ÐÃ*’‡¢þj±ÿ8„óÚ}þ…Ò<§£%ZûaøGzê—#ÂGÂçvÉ,Î÷k±›Èÿ¸ÁY)O_‡ç)‰K¨^¡›« øç ©¾ÊnÒ»73ÒFÅ8t@Σ2z9Øš \ÎþWûÒÚÑ› ↥U+sªœgÿĈ¦¶æ±ŠÿÑØŠÈ“ú€PÛqåƒê ðÈ?^”¿’•&‘¿‘A[ìȸUµš;‰Pf¶ˆîìæ^QtáóÏo³OKñýê/xÂIbgJrŠœøç‰R—ÑeæÁD+²#Jdñ‰ü㥡ì¼4,ßóDuf‡¶=M5÷Ï\ðmp¤ˆðT¯_í²Š°¦àŸ‡a¿ÄÉ8§Ù¨ûíM–“ñÂCú§ú«ÚÚ2|b'ì|ßkAŽ•¬`&¨N9Pž+äWˆ­¯’£þ|ªâÁ¹jë¦Vâ§ûI•ù.L¶>ô‹‰½ò½8»Ý4è2¾ó%ê¬10‰›ø×'襆³âYe±V†¬"˜õs^gA¦qú6ìDiýÙkú£æX«"ó±v%”hõA±Ž;ß\× ªŠïð°³n0 Þİþ¼Í+±ÿ#ÈaºÓã#1“2‚ÁÃ7À¯çGu—<ñ ù@Jÿ;ðQû“ÛÀÊУùÇ®³(Q}ú—Ü1ê2Å:³ñèÞêÕ/Ô-Òa°©²•¸©…µÙèÕ‚8 >Ìt\êùèYA²jÓý|ÁdŒáTÃ-§þ<„úóÆŸpþ¥¨<ù:Ô–Þ0õaJèz¿)ød¥ÜË#ì}^…¹®ˆÕ/OÎåÇüÚ(ØgkWY-t/„墶ÑBõZ³Ã0÷›Cäõ˜#“:ŒH¾q>Ä‹ü#€ÕFƒXÝ ãŸÏ\Mî6ÐÍð'gI!‹ŠEΛÛP¯½#ÿâlÄtD«u¼à «º~Ì©tvwóøPÓïò€H¤?øU-¢0úU rîoúÝüË)£½ çrý•ÃZu²»Ë¿´ê?ú¡à]žuËi²×øØÑøƒçx¡Sø¢Ê|^5¸Ÿðú'†ØÊsféq@©Z’³dæ¬&à-ó`_ËÞØý$ v–Zö$HSªä`+ïéűI´‹Êþ0;,¯Žãéý(ú š­àrKÉ”¬þ»5PľG}™Šéâ·a§Ó“´ÁR¶Àާ UAÙK<ü!ÿH ^ŸÜ©:ŠÒøÆ ”©ÁˆÊŠqWƤÂl<ùÇ*úï*¬îN<_ë»—Íè bãÿÁŒ’ïþB?ߪ ¥Ÿõ!`r­¸";úÝ͆Aÿ«›ÄÏÌš¥®® £(ýw+ãV3]Ïh._¡ß]ZW%ê1ª3öÕ̤t,±ò… lîøÀ­tß°;×ˬ¤T—èEÈò¢²Ò ž˜œÓU&>…ÀîÔ‚¯èŒb·6øÕX”¬ ckÌ­pG³Èà’Ñq+&§™Rüî¼ÚfÊ(ÍêTfõ»¼&Ëâá®Ó]å*öKSXšë|‚Å?>6ú¦ÂöÖf3Xù‹d=ˆ|`®òŠñbŒs»á? 8ꯀ"¾&–Üd¤K[ sr ïXí×?Á¸™måks’Q¥zVÙ L wç²ÓÄPçPVœXjN3ý áÏ¤ÚÆ^´™áÎ;›}ìuíeí©¸Þ+|R2X•LF&S§–Dpoí¼è¿V³ç<€ÿàA¶äŠëíŒÓmUnü“ÿ4æò-PKh•µWê\Ç ˆÛ¶rj5=ùGcú'Þÿ¥E=”²è¯ =ÊÏLÔ3êEµ®:FQE1Tk®SË©¹iŸµÉeÚÀ\ ÓN­_#•éZ†åÔ–N„?ŸɌ戲^© îc[¶ë'sG“W þÜŸ'ý l2¶¯=ó?²GŠ?ÏCýÇ)aõ!<‚Mß ú€µ"V_ìhØßÚd‹±Íyô Ÿ^óZ%#úÝ@QK˜_ކ/.AÖ0+Ÿ›rÌå 'Ð c9ìÃhmðOVl£-Ä_ÔåÙ~@âAÖÕá IOT¢ÒÍ\ó^4 w°Ðû±ú©Ñ9F”Á¾´ÕQ ²Z7r¢‚d@ñ ãȈa“‘#ÌG§“ÈÚš3zÄÁf,wò9µOá<;•Z!N_ƒ×ïâu›{Ùžk3±bµuCŒ/ˆè[ƒíŸÅ\!ƒ+º\–è/üúóüô/™ë4 ã žsžf#HõDØï© 7©¸â`~­fżä8dd/uílÚñïf ük«5ÔD,}Àǯñ3QlÇzÕE\’ùµ° ÌìÆ+xá\Ʋ¤ÄàW±©ºQDvçµëa®Ø ¾¢>g_ ¯aå–?(K¢¿z,MúÏF:Š.ªÑ
    ¯½7€—õ€á­ ÷SÓÃY¯Ï™ ~u‡û˜n£“Ro~˜95‡@‹‚áSêà3+Êt M‚n)9™=zjíL¨õ7Îì.HaW#ot‡ðF‹~Ì?7È? ÁRØíà}Òêõkà+–ágÒÀÉo¿réa )iÕåððÅA3 É#¼S“éŸhͯfY¥SàWÕa@Þ£Ÿ²øêTÞoWœÁYg&³ÉCµf51Þy‚-©¸¦ûÊO¼Íò&ók‡¡†I&€›e›ÓäñE'øíÌ ¯§EÄ{l!ÂNyûÎ3/1pŠ–6u·hA¯½VÔ˜¼ŽøÇ¿û›ð罄]ÎîŽÕ;mYfìÒPqÛøZÂ3ùƒÑй:S~·@˜/Ë1püÇ18ãeäï°Ä£AJÓc§®“¤F>:YÓy¢ç»Îg8Ì"Îow(•Ñï>€?^·+Oy ðÑ)°ü©Áí÷£Š&wφñÐÿT¿ÛM[Š•¬ ëqü* ×<Œ»hÕ«k]¤2e3ÖûŸqƒúó V=µõ¿ â=)@¾6•w¥Lϧ³ò8©/&O ©“ÐäŸävCðHwÉ? „«¿:¦ü©•‚ϱÉáxŽO–åÂ^ÿ•~MÖõIë)¢¡ê†}‘ϼÅßxÕçŽ_s¾¹Îc³ÅV*SŹþcŒlJæ– {ÿ;š_oò‘¦ü/£‘Ÿù–Xý°l„U{ ïs”“(K”œD;ùCw…6ê*Vûóóù©v¨±—ãP‡Xž áÖ¬fZ2ßÉ9G…ÿÇ&22ËžâÞú«üêGQ6° Ÿÿ…¨ø2ñô¦¥‡ Ž zÕ›ücŠy/Ðÿ±ÿQœNï÷ø¼Þ2 ʆJègg”úF”Àïë°emêí“à?âàÑ®Qa‘þüžYÝx ~UЬ¡×¹ýURã,øê^=™êYÜ$<ÈÙ¾¶"«(§²‡ÕÖ­˜n_”Ÿ^iàÏŸÑ?±®ùeÃBôWÓáî³Ùð„‹ÏÌ¢$RsržDùÀ\õßÉŠ.Ò¹ý 5òué Ò’ŠóFôÓKPØ,C­#þW·`„ü©‰MÿݱΛÛùQ·á삈Ê’Uçä6€+]¿ºj´¤Žð„Lo{ô»™ìµÌz°êVßøöœ`¹ýn1Ãy½—”›ZaÞø®ìÌS ž‚Á诚Ñ1qˆyeD&€ãžœ§Gæ+ú«d0»ËGàWA£³3ëº>ˆót¡¨¯”±Úï°Q#±é¸WþFcû|*wQ›’“Þ\ÍZöŠö$ö|d%÷Tô/ †ÿp§~°5XJe¦ºm׉Pþ'üÇU[ÒïfÄVª8*7œGÿ _<·¦þ#;ý¯î«‹5d`cô¾RÔçJC%ú ù¿_:óFˆF •õÎâµz^­.wÌ Úk¥´ªÇ/ÎLKþÑ‹Õ ˜NŸ%DTµ–˸¥TQIÌR¿þý–þÿo*'•"â ¶e+ÙÌp|àD5õqä±T ùÓ®Žþ‰¹DD•ØßPím ÈÉC<ÑFÖ|K¬ü;¶ÆêŸû„Øü{L⨓(¦§þiÿ’íJ ¢ú«œ\Z"§¹XÒbprÖôôD²!±œÕAq+ùÑðœbúDm¼ó­ø~O®¯«kãñmÁ»N`ë3ð¿éd"9A® ¾¬—òll èÕ%‡')+E¨à{ek©f'SLN™ü*#ò4bÙ8x£ôøO?ª5Ê·p_ønçx{´GTÐ’„³ËÌ?/ÀYŗ˸ž/œ_W~-Å“¼FÝ•Tò*Qn/TÌñçõõÄ}ÅaHêéAáø¯6wúËäpy«ûaxykþàXüEêÒªP­ð_àG¶ýÕr¹[TñÅ—¥´?ÔŸ×R;£¿ê>+@¾—=ÑW­ÁãTíol´0î‚Ú'…?/GÞT¡÷Ä¿ÔÆ‹nE[å+Gµ§®[àø*·@NÙ=×Y™Ø¸/­~ä‡eaã–:„ʺÑð¿«MiDƒÅHêð›%AΞ˼F_™È£¿:_è§•@`ƒt&b'sÓù£©±ÛHK¿’“Xèöìk7vX…XЋ»uJÞá4“‚Ù}¿Å"×7ü}Î/Ÿ!:Šÿ˜N¿v«–$/–0†ý3|ÊV2aÆËL§ÿ•ÝÈCNâþ*¯s½âJu†Þ ëæÈ?>ékÐ<1æÃ'Ô€™xDÿ’rfUr¤ièwËà›¦˜‡ð Ñ ä4.à9+Ê6b•s{UÐâ\'“¼G4v^6лÓœçÌâÚk›‹˜ñwÃÑ÷¡™Ñ^{Ý^ Ý@R3wÖš?XHÑKLrî À“WŒLá ï~T|ðBú_µ ÿñ`ú·g‚ÿ0ígÌßáå3ƒ_µ¢j~´\mÎ5 ‰qcfG9°¹hr£ó)|C'ÐqàW±v1èXwÎèdoÉ•í¡ ðt3µ„Á¯â€L¿JhOL’ž.”i¨6Ø…ÅÔ†«¹pÀð‹×¶XßõžNª´vt>ü'b `þy¦;ÝW'9jÈîÚ²0çé«ò^iÁ|¶ ¿´hj¥ýk’#–Ô;‰sê3uºº¹_LrѪh³Ô‚¿8°Œ@?Þ£ÁØ÷ôÔú•ùZjîØn¦G õÄØHêww£S.#ÁV#%wL&kp×»ˆ­Ø“×DéS±gÈj<¿›éñÅ»kóéŸ8?t‚y–ðÈÉG=vë)¶â? ¬¶?¨úSÿÁô òÙ›‚©–hfÆâ}½©z™²”Ž|æ"öö-» þàâ ÚHç[þksàª]#qÇ÷ŒÄŸX½hçï5—ëñ&þüéyv}ÿWXü¡d‹`Í@úïæãóg‘Tft0è–~7&jœ˜0üVý`<0tè9EoÎÒòùµ(ᬸ[Ù¬ù𹚜Ç]üÊ»Üßÿà+›¬¯g¤¦‡ܬXÿñün5Z‰ŒøùáâWŸÐïîãá^zâ1*’ýíç>Î!¾‡ÒŸ¹N¥±v¯±Ö«É’ò…\dMk¾pR™‹þWÂ_Ku¨„?ó¦Öù üF\òWD¾¹QÉ֋ɶ³ÕÜ©ž» GëÆYÀ¢*ä9}Ä-læê®ÞÍíÂ~¶`s°…EÈVJÒäü3…øy¹ùœŸïÏüÁx„\DÙ'¥‡15š‡Þ] Ýo¤/ó?šrç> ?âó Á<×1I%kÑ?ñõÓÇðµÈ¢»Hì‘•þ‰š ÿq^*Iüj½HI¢'¬ºŠÂ¬¹ŸøÙÏN½yRjI SÉùƒAüyYªÈ9ò¥dR9é!¼K–Ù÷ØSI¢ÎÓ+ä…»›/›3sk<ü¹7'RW…΂wèyˆù¹ò«h%fr"ñEEÀãú~ç?š)]´;D‰6Êꨮ0•}1¯ê£ßjHíGt{çW•þ‰É$š‚’å2£ã Û‘=6B#’ýÕDçþ6Ñ73^ '±“MF‡Ÿg¸£ÚG*3èìøLì7ó 5“ߌþä£äQs•1˜H)9Cijy¥œîôßPòLDG5›^$ y×.™Ì~ˆî÷ P |1—˜>öÚÔ¦‡G:Cþ/WØÈoƖè…®A|ø‘†h»Â<ƒÿoc+yÈ þú¤4JS¾ÿë»_ûýžíŽ2K-†þ*D]äè¢õýnAú·«è¯„òkêä$Jm”ðámÏ®7eþÇ3êW(Ï´,èw›PÿQMÍüKûLÄ9cUˆ¤G°âh±S<¤+N<ž?²!¢¾XIF~·r@ñ§±‚á?¶€Ú$"'õbâÇf2ˆ`<ÔoüùªÚs‹ä‘Øcvm õç³±Gû°—±‡'±ªÁäaüWEq<ø9µnû©ÿؤÄ@­õZÔÅN»Ã ÔCé”|f/þ¨˜¼D|h¢j€/µô³£´Y?Ùakm,qs‡ƒÇYÉuß×Ó£e^®&Pß ‚µ k*Vº7Ò»” |ý%ùÇ>øõ¤Ü™k\÷!ð®ÔBÜø¡»tkú'ö"ƒÉ‡»KÅa|¹u^%øˆÒF5ú—d153 È•U-~ÏžD|6õ•}ĩ˕©¬Ã“Uí(ŒUƒsJz¨À‹FÃ(ºU EפQßž’úËún¡¢$‘Ñþ#“>B¹ê ­þWQkD‘]°áuÁU¢ƒ_m0âÊrÆ6†Oôp:fö§6¾<û=‹œ‘œó ]Þ­úÁàWB­·Eä$ÿx‚[ \³$¸Ïc•±öe±ùNô¶™¨)9…þj5QuRc;ÿjÿ;…ÿHÞæ- ;×ó`~í6üP P½LäÌAèwÛ0M©3‘|Yº}†[hƒþž±;è„_Ȥ.ï6›Ì¦yqáÂË›)ݵ›ð)ßx«f€_u';z„fí4³öÁŸ Rã+þ#³Ý“ù)ì­Ì‚ÜŸ$ò‘Þ t°²\©W@aãšt°E9¢•@qÙ‘ç”j%|úÃŽëVÿ’½t¼ÊÇùÝË:C×–wàmEÁ¯¶‘ âNïàÏãóœ»ü‡Jÿ«Y"/ïxgVóÕMéÁµï›–Ÿ½Zçk/aiÏN”'†§=9ªÄ†§™€þí™Ó¾°ÓØ"Àõ8ÿ׾Э¢·È_—ZéðùU¹¥¬Tój5™ÿ±PñaÍ@[QÕWͪ&RÂÑßúëC"õ{Z¥¸6ÿáI¶P]ìQŸ¨=õƒD_ô»gÕª‡sבY0kÕÙiIT›Lï#v£ßýC‹OÙ Ò1‚üc½êò£·¢úÝÌb1½xô¢îØÒ²ÒÄ:¢û«Ø°àðí‰Xr‰8‘Øcnm†vDL‡ߊÊj31ÒAìŽ^”=qp=T±¤1#Ñ¿}’òEĦ#guX„Ìÿ¨ÀÎR‘9ì£wBqy•ý}ÅGõ Ÿ°æOÔ&ÿd‡µ´A¨æÛÀsß$ÏD~4ˆ÷Ùwu"ȹÕ÷1ÄNò°=xÁz2ê?*D°æð«ôøºÚòöÍÀÅçœÔzÊ"@_";ó^ÝÂ_Ýæ :¡´@ž4ýUxüùR¢¶b ¿É(»ó&_µ²>VÕÑõ¤þ|ˆ¸N•Jmê/cçOâYj¢$ðâ3·8#?×}þlsÓÖŠ9Ä㽉݋cÅ7 z^E¦5ž]µƒ×6èuFz7±xfG†´¿_>ÖÓhû˜®Y]í)Ús½°×È_bËäqeá¾ËƒX]3ÒQišêŠVFfX*µÝ&¼r Lzk±_{áښ㫼ôi?õäšî±æ+ºñw¥AÿŽÁD¿c©ë~+›Q?8Û[¥ñIø¦Òû6>Lÿ’±ø¦œÞôW׈<è_ ÅÔ'½¾±Þ\O5öL¦Ø6 š¯ÇÛGÍJ^ö²ÆVæG…®ÿX&<ùï‰O“—æÇ'­1Ö¡¿ªN÷¨öexÌðÓþtØÃXA7ßÑ  Ñ_Åc^»pÍcȉÿX#\I~!kÞCl0ÿqI³uÝè Òœž%5ðG}ˆê½èGÛÇ<€ÿøn¹É¨L,_I¸úíµQÚk¯Èg^Â-ã4ƒì§.|•‚{A_à)¯À€ä·ç¡ê[#+)ŒªK•o`Ž;,CÁ3Rôp>Õ~ÊqÍâ?šòœêÒF ±Š©!éÛ»ˆü%!ÙÐEö8ýsNð+Xôörþ£+ÿ2¡lƒ0-™ÕJçSø‘ùìãE.Þ±NÔ4Ðÿ4z؇™ ®¸*±if柛ðCñÅà?¶_eøæúaME³üGÆÿIýy"Å[Iæ<™äø:?ê…íºrZ-GvðÿQœ5¯ØZ¨eÕbL©Iý‡+ój„ûmbæ×޾D¨nzUôWŸÔ¡¨‚S¢¿úyáïÔ^j)ç®Ã] Ìfâm®‡/j‹åŒ¥O§Å&ú'ºayÖƒ^CƒµM©/)»”ªâ(6y-ý–VÙ'”Å@‰Æ`o•NÙïG5z‘G„‡»„Ù˜­®6I;Œÿ¸‚žëÞÌ7p‰”Rc§Ãl¿ŠŠGÚWš »’õý % =9_‹VT†e–#PÞzÓßÀòñ±×ù”[ä­ÈHÐé 5—*1¼Õl¶¦Ú®©"ÞR“àÏÂ"½¡êa QúXâ<‹óÙσ̇[ÏHÿ݈òë¶^jQV³êØKó3ÅÀƃTÙ°ÉD ¾‡88>ùÇk2Cø¢ªøâÅútæ„íŽníu²@kÈOůõÁ^ÂZÿ†/1Á‚úëR,A`Mˆ…-lí¾¹êÈb`fáÍ2•Ìðç+ð×}ùU’þWËYu“^†ïº‘/ù‡`»ýছ^æJ.éd°[Û¡ì s|Ý©ìK®ë _qS6… ^Ì=­ŒÚ(/öø"5Ø·" Cí˜u¥ÎYþI­â5,KGqL;f½rê;îépò ¨ˆ÷ÉûzøöÊè¡îÉ÷ô’mI÷’Eæu*>úâ—¦â7‹¡¿ú“x¼ŽôBãÙ]Ùêé^Ÿgë³>[_ÿ‘…Y…[ ú«æN8†¾tãÈ:ÖˆŠy<\F,~úuòOAÍ/Ôz›D^ªöÞÔÇd皯ÐecºÑBž„Q w,µãÏÌ?Àê¶á?bã?fâg‚¹‘C­‘‰D"çz™ÐýïÓ[R•"¸ŠÃÜáyt¥¿iô£çduNnv¿*•u7ÈA¶¥˜ÛÜ\Ÿ2Úüôøºt°9•ÅZç 6a~m¼Ê+²£2¥Þ‚O=@5É=ú/úÓI_¥7á;2®löl̺_ŽÆêâÙ‚ü£ºœ¡—&›íäÜßåÈi~ìÉ9,÷7‡ü#%µŒ[é€ü”îÛÉŸÒå=û}¶˜Á!×™.<]ŠlHŸž v¾Ó$R'10ñSCy7o鿟úvxÝëôE)kof¿o6°W¥ò¼´=;»¼-ó0¡¤+øU-žê÷ðo4çÿ÷¾ˆ«äwÌ*ÿ×'&UÚEˆ^ÿlOߨ<£ÑÚj_Ô#JiNûŽÍKõ†éŽCÿö¨¿Ø?1†RP$ŠÂxfÖë‹—ê æŸÏe~TA1E¢Ý£›b!çýüÙά¿©•Áw¤"眇YNý ¢ÖTÔ›É>&ÂVlŠ$£²NYÉ5fè˰që±tiÉ?*ëKÄŸDÎwô‰¼åÝPcµÅ¿ã#ÞcvæGý)ðæm‡ÛßE|DF‘¶â ò(Ñ¿Aä¹VìŸâW(Á"1Ït=žì\<ùuÐ_¥Ã®ŸÃÕÆêœæsvçX5Û©õÚ´Ÿœb%m"ö¼ yÂE Íág'a«}P´ZÝ‹šƒ.XÑý,Êy‡ÿÈ€_ÎÁš·m­Ô,ä1 É,|ð³xg°®J¥‚‘ëj"}E>U~HÖ•|q ¾n¦ðÑÒ„³âJTýuÈbÊ™ä)›Ý“ûá‡ÿHÃ{• Äá&v¶]`nqÕñöePn—$÷Ùä|s]wåƒ-õƒÓøé¡(xkKïç„vé¹Î>ü’F,<æm2\uFùî`^9¥üª{h»~èîVUíþjŒîV X²ŠeD¿µ@‰ŠŘLZd£$ì4JQÔ¸uàSëÃ/Àä— Ä^-låiô¶‰Krá5>cŸŒc*I|4ÀAÌ(êŒzt±ù€ü +=WcïËã=nPÝÝJ¦%›£l u†™GÕ•Óz‰ÿØO™þ¼ ŒEú¸/ ÿx 6´¶A£ÿn¬~Y¢‘ÔßÇ26ÅîÓ3…áÏWˆ<àWωNºEUÆwí ›k´“Ë ýUn¬ü9zr˜tå(‚òl+hØ𺓠zÁ¬\â;­IÅW]¨7äÎ%‚ÿ¸N¾»œ*”ëÆot—òdîÞN²Q ÜÀFŸá$‹Ó÷ÜÇ\²™8ÆeôWUd±ÃysÛ)=µÓ(>“Õÿ.Ëë£AõvëPIùR?X’>Z×àTSß]“y³Ѳ•cK ÇÕûÝ‘¸©¤è-\Jw&œú’)Ü].ÒËèÕF›³Ðß4–’ÍLÃê7Gÿü™Ùôè4ßBn4g‘Ä£¢¥o“„çå| U”<ÓEJpÝ~z¢I¢¬¦þc³N˜Ä’ÞîËBwª ¿Â&Au–ÕÈ ~Õ“ïÍNÒ ³ÿOê5øWç€Dtªú§ù‡d®Ò!5—Öë¾ÏÑå±­š‡JØj;%Ê/Îÿˆ¢Ô„?·ê*ŠémDtí…:H¨DÇ&/ÓºiÔújÁPïƒóa‰à …ì¿!õƒý±Lùõíâˆx®LÐÒâOö¡ÍG¯õÅjÔH­xýn!qœu¡`™ÓÐÓ¿–>^Á6¿Ç?YõÐ}舒MD4IéûMziýÁ¯,ÿ±q˜8ÿö8a}bÛ”°•­é`5ü*M$æ×NT‚K½Í`õÁ^༩󘺓è>÷û%UcCØå"þ|Ž6î'×\F[ ßÑÿñJŸNʾ²/ã×2¤õÄt»9 ‹KÞ 2VBlð zmk«fOóáóó‘ Lpx€CÒƒõ÷P™—H>Å?}ÅBi\ îä'Êj®ØÔur‹P­”Áw%—“9ñ`2«ÆøœE؈ ’^íôøŒM±Pt »M.Q‘X¤*ÿïB\«EQRi Ål~z *°<ÒKžÀg¯ÒóÐu·+yAJ#%=ëŸâ –á“2ƒm<㚑ĵ}ŠkÚݿ֬Lý`wžƒBØû‹¬ÓÃ4"Ê/n5Nƒ‡ ‹}B¶ÃxÇžö k¿ N®#Nj·][s|•þÚú•ƒüç1k^¿Ú Wáf|–¯X®C¨XƒáÏCÑ´’Œ§Þóú«á2ïÐ$% Ôî¡ÂlÇ6„Ÿ©ƒ¿LHÿ’mFFÖ\k.#ßO>Ó~¾¸ÖužÅ’øÏ`¦uœ”wÈ5%šï·8EdåÔ$yYìx.üÂ6ªI¶õ™žl!5võ.݆π8YS WÁŒáJ²Ò#~©´}ç?2€_ÍÓ«€B©ø¤ýhGÈ>ÆG‹(&óz©ënM¬Ú`N­ÍcðµÉCîI!׋ö,+™‹—ðwn¯¡Ò\³*=ód­æI+Å¿Ê4ÃDhnwƒ/¡äúB6R„úó #æbó£îqoòF¨PjR_<Ôy½Ë¨\ÍË_‹gNy}å¨ìÁCÃòÌOÿ„‹Vè?Ñ¥>ùÇ&úGlÓ‘»xKwõß rôßÍÒ˜—œÛè`_ ~ƈ ÿž^&•ì-ìA¦§½¨gl{9®º0מé<ѾÔÐf–qį)”œÇóo}ñЖIqa­šRûçBÙ¬¬Shµµ êTGýÇ]›7ú«8êªÚïªL"³áhНÖU´ÁøÒ‹0Šfj«Ô9J,ìü4ôW;ÉkÂÓtF¼rÑŽû“˹‰h,@¼g韘™\áÞc&üùUs>!¯c³]¤ÿU Œ­\ˆ}8ˆ=®Œ¦¢5‰»°¡_°9¿ë#õfÔ±#±bð¸}b)±ÌV|Äq4†/à¶cã¶&¶u—xªâ­_… ŠöÓücžR¼âþ£¸5q¶ªñx9* î¡Dúr4²‚Zˆ©?Õï–Ò¬e ïzÃ2ó³³`櫃b,¥‡Ik¹ g/;¿†=½ÉËQWQrþ#?uãPïú€Õe@4ƒ+Žƒ%ôÄn‚gvc_‰Ïö»OfíÇèãJiá!‹Ëà¯|xƒʹp2:~§>oæt¾J"»ƒyÎ߈¿»bùÞÃ\¿ÇóÕÂcUµ¾îŒü\÷ù‹-ók×ènøxtà&#`·2À´ 3Èh¢sbtã8{W¢u*™±kÏQõ¤–Ú)å¶k)ÇWuÕ‘b0>°!úÝÇü„øÕG¾Ë@ÿ’jôâÈ÷\NƋܧâ.gyui£.±óÅzq¥^ܪo)ƒ—‰kÜà”òc«ÐGïzcéd~›Ž}Ÿˆ¿Ç íÜÌjű¦èð>F¦ƒó¦ÿÕpúiµ‚·ŠBD~¦!;ÈOK8êR̯]C&#Ðïú›}Œç(g+²Ã^\ó ª(Óœ\À¤ÑB×#N¥Pø¾! l,‹ŸÝˆšk§1LÞe6ßaæŸg'zÆO¤öÞêF\ž¡gäPÁð%„«8;ý¯üèèKyž°ûzOúøÇ”ÌŒOeÞ§"¢ÖKr¤“ôªa¶£òþ~ëWq‚Ÿ),›ŠuÎ;Ò€7ý&J¸`ÞÕù;ô§Ëp_365Èj±âcú—@¹+éÓ<)#þ#÷í<¸âªš†Ð—ç¯ý”½š‘YCÞÙL®‰K®Õ-ð2sÆ}:^¤j6ʪ™4 ´ë$ýÌÅÆÔ0I˜-К§&®ôs>…AôWY)òpw;#6Õ#˜?¸)Q© ùBØœþ% ì•샨ÿˆO—®ÃÄ L¦øh¾mÂÒ˜âê_ü/þþÉVBq±“qÐïFÔ=õg›2™µþ‰íµ`”R'ÿØÖAõbz&?ÅþA!ÿ÷ëEQªi½à†¼A`–‰Z"¦R­T2ˆßÄ6æ>ƒ—/㼟¿Ò¿þ65Ñ[üÇl\%ý´xNhŒ–4&¤|j© j‚H­PA¼äÝ[©Å~ó4t!B¯‚ÿ¸†õÚ„õŸèè¿[໚¨ˆ÷X›üã”ØK¸·<& Œ½ºü†ÿ¸ î_u‹šíÏ?Ýáb¥<üÎg®ÖýüN¯*xëÞÁÌÌ׆üdÅVÚE®©) Ê~¦ ¨ÍX,}>0ŠYTJÔ"ÿxAŽp‚+ÿFÄŒááËë¶>jYlîBb‚ÒøOÖ›Iµ¤‰ýpÇWìä}NŽô’=ž€eŸêPW¢~0<iƒ2Y+Äõ$G3 ;ø‚7¯Ë7=®ì¦W+˜?xýnuiõ©º†Þº!þª)ósç›ëº+¦’H;!üàkG’ ”79Ãço#¿Ä“˜Üš¾ZÁ’nD±” ÏNgGî}ð¦:pÉa»K×P»ˆád»ÌïSêG—¬d+ ˆò½ÁƒÎÃÚÆ¦þü½C$iù—X²¹¥YEò–Äeí®kkޝ|°÷ °/2ä âõ€ÊçÃô/Im¼¦ÿÕ4ìé54X!ø§NFZzx4$z@ýG.c¼ôæè®Üu§gÒÿª!\<²HÕðÅö§#ÿ8lT”¨xéäôﱜú`Ùw– Êÿþ%ò.x ›¶;ôz"?üÇ3PÈ&ðEè$²›iT+ŒÌ?WÁ¯|ÑÛ¾džÒ*÷<Ì/ä<»Xo9gS‚gtÿ®WuZ%§º‰ŽNU@œ²ÜGÚÜjú+wúK="Îï ‚̤ñN²"ÈuÎn.%s¢΀r±·Xà<ÁætJ Ö‹Á<Ó—Èlzm2³ÆF,s3ô»íQK=Ëzj·×q2í=˜UžÓL‹Vj(~°¹\ÿ.¦;¯w—rV+bÝ‚7)ª¼(2Q+ß^×ÜK®µô nÄÎrzïÁìB`mÒ›‹d³Ç£ÔŒ%;ѹ£\å| ?+#èÕ”ƒØ¶ XsýŒñJ«utlÉ@m}%û.³ƒ½•=‘Ý‹ù7ò°4—˜öÅB/òU^N®«:ó£ÂrfÎø~aR1èR ŧÒϪÿ'ÿ½£~p¿ê~CÛè¨"¹mk¨VÄÄÂ|³…}Ãþþ3¤R•þ%ˆK3­#ª–BÛ¤ž¦ÿnG°áAÚkµö/ú(D[è_2vº<˜U ØGÖ˜†Lá#Þc ÝrFRuIñ£~ð9Q÷ âú ØüÔ6¢ó¬Õ)J•›±‰ô®ì´H¤æ×V¥ÿîY±•èô:lð.,á#rƒWàO¥ˆ˜RSCØŽŽ$3ˆu¼õ ?Í?6+iÑp zÍ9Mb_UAæ²³ô 0 oaâ»ÂÝ,† Ø¡ÍþÉÝî­m„ÿhN.ðSn,êhbÌÂX™ ØMäIÖ;êÈž;üGn±+BýÕMð« \Ç"˜l_|e^؈ix$MQ<çZr…”ݯx+âÙçâQo3Ÿ¥\¸þc]2³·4roÞW¬s/îî\ªGR€ {3#ì*\s¬Ð|ï>¯xY <ˆ"~|öT%†¶WÌ!Bœ€ÕðÁ+sùzô @æ‘—úA $g1kæÇ~ÃÞî’åå‘-É?®…Y²©ÚQ !Ó*‡¢ê >(=z./àF½GEjŠQËÃx+;“A±bj¸Ÿ ä6’ `œ8®…­e­¢^­¹Â"d9ñbV çYj5Ò~ÝFÙÚµèúÚ&¥ÿnfc=>¯,ÒUj G¡îðÔÇ(×CÝéê="×ídz3Ñä¶ V5ºÑ“þ‰U¨´Xí{B¬mÌÁO)oœÁæ%bx…;¢zJ§ µÞ|‘Üè)Q@òR«ÊqLÇ*£¶õ5•`)£> D«”ùçïÁ¯&ÁÈ¿¥"&.6¿Èç\/›’U]@¾P k›KžæÙí‰Îù ý¯RÁÈä‚[˜DaC8šñDéÍ’ðÕϸ×3Ñ¥¹³V^0À.ßuƒjËlÉDA<«kdi½<÷d5}|cÛ{Âè[ýwŸSËþÄ,Èü¨WÆ{|ñHòäÝÉ`ëÈ­øïûïn£rÕzvkƒÝÆëÄGý4ý}ñCËAàµðF·Éhø¹æD¹Çm¬ä_'’±÷nhÁ8ýÇKØÕ"#ÑÏb¿Æú cøÕ>8oîiYú'N°÷²§¶gųÝ3 ‚²Ý!nˆk¦C¿« gåÍk$¿ýOæ~¢»pÞ¹øJçÙÏ0/ÈßFa=HÿÝÚZ:SÉÀšOmåÕœ¨¯>)Õé_rû‡Ÿø»?ˆ­´ÔfˆšD‹¥õIâ¼j×f«Ì¶ OÕb­•vE- fsîúïÖùëïòˆ>Ø@OlÂXàYä˔ߵl`Ü7aÏÁŸ/‹dÿ’[ô¿j"¾}ìå§Oc‘KÈZp³ÝÄN¼ µ²øx“Ö¢°ùëãÿæ÷êÚdí2ÈÉ ¼‹øi«³ÒBÖILþþÿqª1;œÁ)NâÛO¯y·R´ë›h‚ÿi!á+Ë3ßr>1é)0&º½ñý>«ˆ>Msuõ ‹Ý´=Xä\S WœB_‚Ç}Žíš0A6–»@˜Žs¦œÄiü_ ᧸”ü¡×ül믖秭N"eð`9øýw~* nJ²˜²ùÇ5þÅ7¼Éxî×N²2æ×†7ÿcý/½ÉUbËéd•/ØG{,K±ˆn²‡ž©.!ĸ­ñšW`×oà“ÝUã<\ë\ûûjËà¨ÂIz5‚š‘ X Š)?8•¼ ó°kae3Éô/ «½o§öÖü¨*تoô?1¥w–YäDó>ô€*Cþá†Gÿ«›|B4ÐÅóè˜?“7´´°ÕRµé¿Ûþ£6Òƒëø³Ô¦åë{TÖ "ÿ˜e¾!Oê@o=XŸ 4ñ5cdb,];åQ¨gg óÔ[òT˜è°?òd¸á:ÁWx’FÙú[Hÿ«[(Ä*¢0îL7‘¹ÒfÄ€Ÿ¾ÉÏEÑV†Zo)ú«ìÄ;·éí4‘Ó;N‡ÂƒÆD£ù‡`«;ãiìoéþ¾Ø>¶ñ î|.ÿ{Á ÷ÆFé!â:×Ë®¤V·bkqÊ^r ÏVøó cšƒvô«zZ×Ì*•ÙÛø¾,󣮀.ÎbÞ¤;øU~öÚPÌtÞÜæJ í ™ÛGüÇrø*œ43š¨lH¾P¿L¾õþÃÇT±ý¿Ñ¿$¹ùljûk Wá?Ú|7?*@9JþQ–¸î*Oßi!äŸF"{Q*f–°ÃTÌ!|…Fl¨X~¾¯HÕ<š æŸïÖ3ò|ÿFnž‡YßùQ̯M­‡‘OO=ÇycS’¿•$.Èhßcö²7·g´G¥Æý¤QÞÔ<Å9&7cò^~%ù™›TËØþ'õçŸm…•ÏΓNǤkòì?ù/ŠrVñW31ÿãzØ¡¿zÿ‘NÍ¡~Q,üêÆ/-ëÿó†ÄªÅ{U×fªS˜[Ÿ[,ÐêjçÔ’ªç/í3&üùPNz6)'5ͨÿðÑ$¶ù&‘ê4ј#f¤V<¨ìV¼ÅMìßÞçSD¶îhº«2%q vê ˜ùb>¥ƒhIý [$V,¦ÍÒüÉ]îa‡×b‰m 3‰ÉSaIž/Ü¡ö#HúN"ýOó•Jj®ò•¨Î ¾0ñ:‰ñsõìXÅó#N¼ƒ6¡Ÿ×´øƒóÍu­öÑf×üÄDˆã¨K(ž³‹çeJåa K©Ù+N\­ÂxÿI–”W¾Å{\æš‹rŸ|éß~ǵ”ã+_µ‡èÍ9—¿zƒ†':ù‡Â^â1ÿ£²qÖ¨o&4³±ZWÔX‰îMâÜ,~l£±óÞú—äTO€7u£q·LEÇÅÇ|ò1Y®ã5µp#‰ÇO™³M•~¼™Ñ±•;cuŽE…Hoé†Åê¦ÿÕXõ¦¨ÇÂTÅûähIÉ­¬þíôþ06¡DUìËaj“/´„ñ?A±üèí^“ßü‰þÊþãF¨»1ÆŸëF™:‰à‰™v^*³1ßÜ@¦ÿn?G=âNo^ÁýNl&§2òÓQeÈÕ}8ô­fEY”ÜËvìßR*Qn¡ÚEÿ+O"{âæýh’³®ÝZæ’!Õ¦þcÌ$\Uh锌êJê?*Sÿ‘Ü¢ëÖF *$̯õqÔv72›0d*×*ÌéMçÈð.è¿ íCRêÏw:Ÿ™Ì2} CÄS0C&C•;SÎÄïØìý™'^®û)x¥½þÃÄ46Gð·ñX¥Þß[®Óó‘Ìp^ïøüÄ@mxRƒÐâ$•KèºX–®Åà; R;ø\dzÔàai‰F;ô» xº b›Âdµ¯ômNÿñ&v‹HF”×ídøó©øŒSd©c©›q·Ÿ'ÿèOõyôÅçŒ~ö¼TÄb]ÉZ/EUªC/òdÅ¿Æ8çßúBRã1?*óœ~má÷¶³Êaµ¤Ö”ê¾ùJ^V¹hk¤ÖSSÑ¿¤.3rM]…{>Žˆ«2•Ôs…Ô¢jk©?O¹IëC‡­Ò¿Èd°šô‰X&/ò ú4µÐ b# ¦Ó7²õƒ•mJ]øMüê æô Œ»; AqÿaYç‰ø^¢/þÃå™#>ËJÚHí:¾ç>hÿ*üÑ7b¸ÉXÁ¬à$Oôt ÍMô¸ ñ׉x´Ÿæ3•¢x›W(×’ËJr6–ßÖǪNL Jr Äþ%ùÂ(2†Å 9ó5WW†ðwØPÛÝkÈŽa³cíg+XÍûÚNZ=hwãõnñë(ö>•Xë¨ oµ[¶®j9ð³9|r¼Q^¼îl~ú«~ÿ o‘‰8opAäaÝðí;ñKD‰pç¬Qfky@â lšHþñ v¹'x˜Ý_d*Ø;ìR[ð«;d]·9Û&Tµäyºå|s]»ÔKúÝÁø¼TÉçç£z°6Ön¤Â|Ĭ†WÊ,?s?Îs§ c+Ói§•C®¥_ùÀô%b©ˆ%ý"–˜(öÙC<øó Ô2ø˜ŠYuSð«kd8ñÈ.ábèŸxN{f½¢Øûæp7äfzÜÕ,€ÿÈ ×q[> ~°êØõ°±¾ôOÜ*›SCw›ÌÂÍ,sÀ6õQž„z¯¡çjÀ“ ÁçÀWd@¹Õ—Ž}EÈ7ü-å)j®mÌáû&›°ã‹œ€7ñý<Èž¢ÓºÐæ„ZožHCÍå}òï¦x†ü ’ëcôo_żÁwXSoº˜_ƒ¸Cþ‘–Î-ÁàM«ÉA^ÈôOÜ.Ó}W?è¡DU—èíapL|Òqbˆ> hoÑf:³'wŸ¾W=Ñì>ÀGddºÕ»x¹a&ò|t’ï$v;O° ùÇAòµwdº@ó*‚Ž£n0½Vº£{{4û³°½0ùÇô¶ÝA¡ÞìuàËÔ¶ú9¯÷€²_+L.[¤5«< ‚ô9ÔHæAñ|Ån:æ@Þ@ 7Éþ¾…á?æÐÿjšñ‡•ç»ù‡''5Ïù+©tGßÓ‹wÕÿÑŸÎþ¨:ÒeÓ¤û}'ûHæ¶³wa¿õ¨ÿ¸MO<Ü@°ê ¨"ãµµ_³°Îãù·¾ødËKmÆ_Kèd ¹œßýõ§‘û]§þã€ê£ÕÓ©k•b¬rþ£ ê®ÆT«P?vBÛ߯‹ùD ì_%&û½‡ÿX¨ŽT¢bç×ܦªý×úty€_ ÃLÁ ¢¦à™ØÀTä„(‘^Š%bº®ª ý»½íWÖ*¾â%(ÐzâËýX‘’²=s#aÕÒEãi›Š2ý®w¤ú—TÒj7Äj¢¬‹ØÔcx çäQ`T«'gmf– )Æ.ÑOýÇ"¥ùÇG´ý™yÿ–г£Ï×4²—ÄØÁ+øKÝÕ ¾î§õÿÉÝn©m`?‰ëŸèVýàZ|Ѫ"¬üc¸ùò‰ð–…>ƒ/H%ÖGȼBW6·¤LJ~|ÛD|N¨B.¼ÏFâôDD‰Ÿð{ð£À´nëûE1M g— •yZq¼Z9ìÿ²+ËXtIÀ…ÝÅ qGtø{\ó5vÞÜñvÖÓß:ß\×}~oK£„?OD¾ÑåšqïLÊBpù_ôå¶v5¸|&ü‡5ðùI*™ýUXídUøÁ…! ±“Dv°‘ßÀFjêè¿ëGÿö=F¦ÄØáÒ½éßnc‚TM&–D%@ý` êÏ»QYìKtyJù'Úçÿ÷¾H@þ‘ÚyçÒS©ñOù`Û-å‚Zžüã›zÐ1ÿüº­* ïHòŸ‚¼ƒã°8¸M!<ç2ÙÍ‹Å~| Œw^£²^xj2œÇ“xò¹ É?†’³²ËÁø¸¸pÑíôÌÌ_¹ŸÐšªÉGœí=>µ ú±:d´ááWïlš¶»Uò<¸OiujÙê7 ¿Ûäª< ÑT~¯ÄdóßÁ'Ý×s`ù 0?*,Þ˜üêÿ(…%ý†H‚²úa$´:§—¬ªñBöFuëŽFœ{’èøyC±ñ‡úA_úï¶ÁÅo{Øœ#>ðwÌ?ƒþª'ñøAªþÒ¡ª5þc ¨]aþ–”;Oü0åZ¨3œ Þ #ß‹ï ÎÕ ÅRLýT&бµt"I õ4ÔN‚y‰ùsøÐ\ø7äa¬ÊSÿ‰©ß¿%„óîGs:,B¿»ƒ*ûÕFOòØø_òsà.ñèéž™þ‰WñË8ËhtjÚS Kqó¯ÿ’)Qà?ê“ÅD%¼‰§î#›Ñ[¥¿Ã,Í܋ӿ@ºÛ¥Ê¢ –ÔÿáÃD‘Í0WÇÉÍα&ß|7 £ú«#܉@ž’E2£¾”ŠNi.$²/åÀ¯’3Ùï ä9˜õ͸³âeÄ`º_Rž…@üÇ ½€(ÿ]ÿÄ«t~ÎEìSŸÌèª~V´—[Œ²öÞLAìIÿ¬1=°nf¯—Šy7üÑ89Ïe,"²‰)ûP“•‚7q²Ó¼QhÃE}qZˆ(¦W2gÛ;˜ãQ3x˜oŒ*Tž¦ÿUúâÌÃÍj/ÿ“>[‰å”2@îѵò‘vâ¯ü/þž†iÕ.»™Eiûõ» >«¥é%铟§á"ý¯¼Ô"tà­„ÆëÜ/]U¥±6P”çÉgJž¸¢FךRžB4p¾T˜´ùÅúóì—¨;;¦Ã7MgÄaægçÅFœ¿S+ÐWQóR?nú$ýwKkŒÀÊ÷ BÝ_[d¤­8L4ü‘Œ¦Ø}7*Vs‹È0*õµUÚ1“7oYÁnð @l»‰]bê%ËÐ#ò=ŸXã©óûq_ÿú“åŠÕêO©Ü—X¢IäEåˆiF³fj¬Ä%"•'p`náÆj®¨*ü{jsù‰:x†;TPÁWŒç*˃…ÏEn!OƒfmÇΟCùdG1K©Á._á?Š»ÎÀ§Õá_"÷žÅŠô‘ñ±I›á`™òk;k5GQµ­\†põWs”ÕZ9®Ë” ÉûCðCíІ­àº“È–zr*¾ža¡ZS `1ÝԱú$†ó)¨Ÿp¾¹®kþjKIçêý;‘-XS¡pæËá/&`ݧa—‘s½—OàÒ½Á¯y˜Œé4^ú+µ{~P‡XúÝø³Š è÷¸“º\Ëu¶†ûÎOÅù¦ ½¤NœÌ%æl”å¨ìX†•íЖôWÍTl0±óq”¶GÉ$³âoJƒƒß–/™…Ô‘¨w0ú«(äÖüÁª\Ã.bòd¹ŠŽÊ³Pwe z®–x|°RldMò£˜ÌÜb¼Ð‹»Ð=EÍ5ŒúxLKôªË5¦ï¹0–(Ñ¿¨ B­wP¤„ &·¦5f”‡©~¨+ˆU}p¬>øŠx&oøåÜ©}ð?kÑJ§fð|çÍm¤tÕnp'?’9ƒþñôúËYÔÌH Ô$`6“aO¥E5úW½£»–/–û#‘I-îIM9KÏMUW¥Ô6e7þ×((¨,P¼Õ·25½1øa/P§zdnŠ=³Ù¸êÏ0]ÍÔ7†ÀjšVoh´÷è}ýן+£™uT»ÑŒ^ì¾ú!c0ÞhUBqÉ?J¢ßÍmojWìE˜Dø‚þW™¹êèFóïG°ð&«>£7¿ú5„ç¯Oÿ÷~©x(iw.ÒFIåüî×V~o D¿ë¡UÔÞªýwOÚÊde†T%EÿEüJQòá?*pÖ™ôÚb¿¢6£ÿÕ ­¨˜£uDáUWýµ:Çšùf*tRÃñ"x$qGé§%ÀÚïè€U›úÈt±ÙÖ++”(b%±åD2šXýdèw«éÃÄ64Rïõ©d¡ý˜fÛRäü.'ø,³ ¿:"F!l!wù×$X«×^LØ…çt<8ÀžÁ´¬d6€ñSüj¤büՈáÝÐ_5ijåÄæ!æi&ï`½Ÿð)]Øý8Nv²6å'wÛK ³ÑžâZn²  ØÁ<ôNœDÙTÛÁ:„¥Ÿ7Ž/¶)•"Xó•­¦š?1K^ž,­ d2\tpÿÔd_[AŽbo½eÍuÄb5‰·×éÈ?\«ë')3µ’øK1ýçþÈ:uö`Rµ ÓEGÌ+¬[ÚM®à"¹]m®¸0ùìQç›ëZí­MÕ6ˆYzT|Xk"Ø‚r'~vîE Ú üJ7¢“—¼ r#«Ã†¿à~m'[”òƒžþé†÷·zôTämnçÜ_€rþ¼1Ðk²Ý—"*\Ob2†ÅèÂÖ2Ÿdžé#ýw¯šyèWÕ€N“ä$|ñ8þut«šßÏéCOá=e¨6T¤ä­ì¬ÇÀÉ4–r~IÑ=§&“)ÏüZ›==QiíùPt #Žù‰¸éð¢ßD qJ –ƒsÀð‹¬°.&Áþ»u¿ûÙ&‚mÁèw+2]6ÚŒœöEêŬúsSõfþù¯UGÆS*h£ñž ù¾b§šH+®ŽSQSñ‡6†¾‡™Ù~®=§Ä¢ÖÃ7Ä–&ÒG‚_í£~ 1Ý*ú·O¿Ú¯†§u­ð×WÛ”uÔÁïÆò­#FöH%«cûˆCØÀs ûˆ\»P©¹þ»¾Ì:ò~†Øm ëYýwgÀÄÁ¼Ö¿ÀXWa*@wlY<ý±óþk7aï§$£éØöWP¦yDø©/K^Kz«÷ËÝ ÄgqËäŸö¿j¤ýNæÑ˜¬Œ›LæHÖ °÷ôõøÝÐz>ç8¾ã:ç0• <9º¶ìò¹­–š‘ëœD<\š|¥øÕ òÜçûC¤W>$»ƒmn„½Â¯ƒÿøö2ù~>þËìÏFd?”«ºuHUKt0‚Îzë§àb à¬êóÓä•èäbéfv:ß\ײó?Ö‹MœRüG ô<)‹ô¢²Qh'üÇ}¤|ˆ½›„-M –ˆ×<…þ?ª4Ðï†ýÖ@m%º«xÃwßdÅxr9Ö«|DQÛ ×OÁ î‚Ë$2Žð *qîŸØ¿KdO>bw8øU ùÂN~z©CXÕTÄøç0¼v´%9C?ó);lAmòR®»$Ñøqð¦62YüÄ0úݾê#Ñ…ûfÃ7Þ#[Éÿ¬Êĉûz~ì^N#`€’'´Àã$çÊŠ˚Ż‚˜á´ž LýÇNቇùˆÿh@þá&6‡nZS ¹ÎÐìk蟘˜>éÛ©DÜH]7TR‹ašúsç“¢¿Ú*ݾ«?/ ÄP·¢¹*Šÿ((roÇàgP |Fm ¦§£YÅÙeòÍTbfå÷#dÃ#ðÕ‰Œ=d…dw±ÆysÛ(µèw-ó„̫׃z…æù$žgõ‚ìCµ?FédÍ?×ìÔ:â•2[8(žºw.;læoΧúóÏ ‘É6¤“/D¹Ü(joKŸÜf裊0ÛÊbÒ'Óy=7“µ™8Uv1'Ñ´¨<›Eõ|(‰8ŸÂð#D ²‰nX;oý6ùGws>ó£Ò¡[û„6¢½KbókŒù§áA•ãW<úmÃ&›è7D𔓨ËNi:¯ø¿÷EzêÏK:OÆMéæ˜øO>ÿ#ýÛϨ•˜Îñ^ÝAÅ ÍvÏVOm­VSª^ŠúC…îO>ƒù}é¿[‚˜·ºx~ÕH¢|ÐÊ€_Ð>п½–s×?YÉñ×5OÔ+‰¤gÁ7ÍwÄ5Ts)‰YýaÏ1Cê–š1R+ú+{Ðo†‰ßM¼»_Ö í,6€“Ü%>ï‹=ŠýJ&2EbÅbÚB횘Ǜw±+³n@‚—4”¯ôhr/êËxª•t1‰þÓüc„$¢Š¶ÒíØ¹ÉÄHµàχ)§¾‚õ¾OÆTK;?_£…F!~П«§ˆÅ[Úì ýÛ»Ðéjl”Ú߃äí=쉙!5ÿ‘Øž•UcïÏð¯„øÂ]½‚¼ …aÂê¥í2ùGY­*Öý°ƒÿ¸Lÿö tà åù¶äZÿá ³ðHýFÆ1Z И¯~÷¡ÚYõ õüþlÇ×µŠpÜéñkA0üÄ[¡«Í´hܱ×tjý]4gÕð¦Üý¸îFôWñÀ¯¦ÑÃv8Ü„Øøéø” X•¹XÑ1LCo ² —gþq¿þᶉáDðGˆÉwm] *DQmåKêÙ®±vB¬)½üô?õã•÷tBø(j2¥—+ñ™Å@ý'bgÝ 1úÝ›ø¼UÄâÛ8©zñ§R>‚;ó=w2r«»5­³Á\~š D0zkþ¹Ugwƒ·á%^e8ñØüÈ*ú—„§Œ›¢ ×Ê’õD¥~p§È5õ‡§ÑÑïŽÑË0ñç4ñhâú@8šëhq›‚ãx“ù„ÇŸ±}V·Š©ºF¾Ñû—”ÆêµY NGâä(FR2WäkAí²á5.€Û]†o—ð燨ÿ¨¨6]ñðaWe,áZ8ùœÁ,?)“îÊP»ÑþãÙ\,ü‡¾á¾©5²®šÞÝ‹<êeQ¯Ÿ‹õ˜ÊÁW0ûûYËDûÀhK4> Ö;ÿÑF~;©HÓuêM:ÉèFæR庫6Û8øóvdyÖ¼¬ó(+<àvñ~Ó³ÓAbNÓÏ5+ï¨Ï¨@–S6{$þã+œJ÷*“¶!ÔzKðyÉ—_â#G“û‘›ñ’SaïçoÐså@ÅJ_-ð°UÔvg‡Á±æuLph_ác‹ —ê"¥’\_A†ÀzåÓ¢4»˓ެÆL×Í0í°ýç¹ê«ðç1À²¬^ýS@ôB8Á|Ô³L® ÀÐïÅó¡¿:"óÜbW³Á¯z˜‡QZÅ´¿ úü¶™Ž'ÆKTµðÜÙNxçVr½íš áÿÿïõç ¯õˆË»â‚îoij`úÇv3Ð(Á¾&S{Ù†$žL¤Ýœ.{ÀŸÏæmŽ"ÇÝF‡CêíŠbÔVZw‘ç·Ï´±¦c½±Éhc¾ÆŸ­¡³cø™2öFLþȾvÜH®awÞ‰²à Ïx²îj¿Æ0ÿu5ÿÞïi”²ßU & ÿpÅ¿¶r°í)ýÛ+Ð?ñ«ºËQp–~«Í¨ÔH¢–§Fñ×𫯶Šð¸K¨ü ÆÐÚ«ƒ•Øèw3¯OÑú¨E¹áï:ˆN;r™A<9™‰úŒ>“´xĬ/èµ\4Ç#ÉlP)¹ÅAðô¥¬v‘$¬Æ4Hì‡#°É Dcôþð·¹DX+ÞÞÊ0?ê:ȉ&±šìò¹$RiD”™\^'ªN‚%:…Î"Äù ‡·’õg£•ÄàsÁ&ò¢"š‹¥öÅ_ŽÁ'%§î-'í#YP¨yàWó~Ú?±¦6ËÜdíYQ~ò­Qä‰EÇã?|ä!¬ÿNâØ  o»8‘èw½"Øås[]5'–|oPm|C)b­qÄðñé°Å+ðG±¸æ vëÀÜúâiÎ2_Áó‡nPÖ•þ¡ ÑŠñ©q@é†`›/ãûã•lèfºêé¨ÿx=iNlýÖç;¯/m@žÿxfSèº {0Ô»Ö ¼î*°òþ í±® a>žÁÌmJ%ƒÑ¼Ü%£(Чq×ý ¿ò&ÿèÇ}ô"[xŒ.9VHŃd¨ÓË‚¥ÉBöеÔe¼œ€º~7„ܧóoZ—øÝåÁ›:rÔÅ3)ðYZì~0°'ÔŸw4«aíûS?ø½mrc«•Âs½&ÿ‰þÊG „®Þ„;÷ lè1üKþemc»‘Me²ÒXó0¶us”lLµ-GþÑEÁ*²hdWÀi_‡Ñ_myðÛ!T@Õ'ÈIíÉ ªÙ×â?¶ß蟼[A›ÞɵXìd(Ïaïç¢W®d¼F;e~70©’Bݤ7#s4¹{þDCñ³ÑïšìH£»cu0¢ºhd›aI½`1ZPù²>þ”LkìGK-×Í£¥ÒT;Ç3ûo¹Y&á͸''³èyåßí[„jWØóØk ]GÝÕÝÈfFù?âÎ,‹m}ûï̬Y3¯ºíØvw'&vw'¶bwww÷V,¶ÝØØÝX؉Šúý†ý÷Dó¿Î9{_{ ‹53kž¸ïûy€¾<½Fd¢MEÏýÛ/(—QÞ”$ªzÀé»&Þꛌ´ô¦:Â~|ŒV(&Ò?±'ü¹Ë•–,iŠ‹à‡Á¯Îk§Bœ—ÿÖ‡‰ÉœÊ¹¸J«»{t&dÞVsÓê½ê\pÕfe¹V7¿ ›áÿþ ££ÙJ†]‹³?G©š6’úóX¢¾Ø¤ dBU;µä/¬Tøë&­°öh¹ˆòÝô5ôo?‚jΪÿx!–ˆ5t;ôQí‘Zñ$ýwˈûX¸µdœ—ycŠÉJØ¥îⱸ"W…Ï¢~pp$ëkÁçœ;‰ò}±q×x£Ïí 0$æ{GÖpÝXl°£[èpƒ"ÜáT%Ó -þ#/Qô b¤â°³X3 1éeüȬF7|Áb”Y›"įškk@¼Ú’udíqÜC‰Þ6üÌH¹Ñœc,ânáæ!w<"ÿxFÿ’";ÑAGôW•ô†;ŒÑê/0õ$ÝòÐÿêˆYÓÞ/ú]fܧ4ÿ@§jèl ¾ åõÿ‰~71“žœGL¥ õ η**©(<ŽS?ØR³YÆe[^ætäVÿPk+6åZT³)Š+üGcâçbúhñY•Z3ÕK¹­Uký˜Û:ŠõçqD5ØŠÌØ+KÏ4‡þ»/:Í ºR>¶â¤êô£¿Ûê^å2õLj⽨W;…ÿÈ"kç{ˆµðŠ’8s:¿e)]ˆšÚ_¯è¢-`rê\læ9°µ°O°u_ø³.QfbÔC]À¯&aŸóE¢É4%,ÏG¢’Tðåsé7[…«ž€•N Jq““ö–ŃÈ~XÎ2mYO›îŽxŽ&x;`C…°òVý`YbÌé UÈ?Øó>P¼‡dvÌ[gÉhÿZ»Ò^¥{!þµÏu9œv7>wƒÌÀÕï"Ò+é<æ¾áû¶{zQ®‡³âle!˜äKPº­Äm ?×CƪŸˆòºê.t¤¹ŠÒU–‘ñn@ºš¢Æ¨OþáŽÿˆ¾G,ÅË΃…pC?Í5oÔ]°ý]ɵ>á1æ`?ï`›c)ƒðrД¡¯~u+Ì%7SÝÉ?æó^P;2™ìeþ¦2ø|&£œñ€øö>“Óÿ*,z"æVTîDUJzïŸ:¶”WÏ‘€÷¡¸¥.Œ?ËňçpÁ©„Xã} ½U;øó-hkcQýñ5ceV"ˆIa𫶪¿èƒ÷‘Ú¼d¦t_7š2±<ó›K°}›PYµáUÐ_=$ +œ-Ä#ÿ¸ÄYü®†®Ü"Òcµßñ64‚‡paͽôßXŽÿØoèöÍhlsÃwŸ§Zr5þ#¾ñ ?¼¼î3ýÛýù3ŽÈãxÆÙáÏçá?òÒíÃ…øE½]ïañß‘o}6Σè†*ö J§ èc+ñ¯œl"w$þ#'j€â˜ã‰´¢þãú«KØï29ãv‹dµàOJ˜±íYíßA›rÛëןנWUÓ…Z¿¾dœ=AÛŠzÂÓ±¿+ʱ`üʃÓùB¿'>ëcÔô¦ÚaåT†þ…~7>hÏĄ̀T¦4'É…Ôs¬¿J@þQÖd©ÞÒq +½µN"QÞ ]ÃÞ}6&ÐÃq /ѨoŒÏü¨,öÚv?3+¯×F?TÆO|ø–œø—¢ïû#z`øj'Wüßû ì¹U«ñÏ?‰©ÿpêèþõÕÈýh{¦œ`þ¹‡=Š¥®½k+§ÖGÁ›D­£ÄŠâüÚ¯¶œð¥±4®ôß55U« ÎÄÔ%··ð«np*‘Û×?ßH¬ÚšL¯V® üÇþã»Bè-VR­qC Ûméw/ÑGeþc9~bv5lÁšÝÄ|ÖþÆWÇ€¼L-DÆHéwsœ‹y“O_¾߉֨„°æ&$îDþ1æ!G$êÏg)oE*& wƸÉÉø’ÜÁ±ØÏL0––þ)žÃòSñ,kèh~¾£%µyüL+¾û!þ2b"ö=/ù\âÇêò0Ÿífo×É뎓¡d{‰_½²ÕU³ãæ“}4f¥²Db–gðéÈbÁđϸAÜ×Þ¼M³æ|æ$çYÏ`ªuAîSyˆU~°¿^ XsøJ êró‹Žâê[”Xè¯Òb?Ûâ7Û³„©";‰UÚçÖ‚?rSO“ÄŸÂk<“/É?ÎR{÷¯ó[Ø–šç¾è¯T£5éëÈäʱÞsò®Ò•Èc™r<Ô=ìÏ<ÃVœW¯ð‚ß_ý•;õ牘Ð> †‹ ùó¨öþLåEM<Ü üÇjÖ‹fì’gÈ?tm}¨õ&‰x@žnOüGUXˆCôct€ïPè [­Ó¦W| ¯{N33W“ÁÎÁ»ÁY.Ó…ðY”XêlïiyÞùxB»È— ß5©•Mþñî‰ËÉ?üÔ¬‘ZÑ›ü#µØ‹Õ\KÆyË™A6ÅôSÐ¥Hù7¸Ç}×R‰¼‘X15þð(þã-X˜—~|é¾Ä"Ö”±gÖü¨4DÖÇ8'Å"äÏÿRD!="ñÛrì²V?–wñ'í5È›µ S‰þ7k;"Øa}mV²±Ñ+²£Rdóð@ExW'Á4aŬ½‹¼æ :¬ùàFûÙ?1†â®–Â-Ô«£…Z ShÕŸï¿Z.Ëâ)–ëwðH﹯£È×é.EµDáìrœ²€˜àì“Õ)W—L‰ÀËZh‚ ÍÅaüGgâp+ÿ°Ôc–×U×;Ç›ë<9Ñ•ê.ôW ±~Vÿ«üdVÓ¸Ú¬°¼ýÉ´ü‰FÿBuŸX¹ÞE“O¹—@ErÉöÚå´s©àªõD”üdLc{Ú@¬J ‘£UÿQ„Êäâ ÿàC.ãÆå^^!·øGÒUÌÕ>…Y¯þ£×™œ?“q/›†J>è.ÌrGl~7¬hl¦f3öà‰+°ž?ór§ Xͯ¯ 3¿v$ó¨zðÌTXñW\½PZm3ÜàT–AŸÁ N7{况êG‚΄)‰gæN¢þ#´þj%üG.øçz9€»wŽšˆ«Æ\c€\f|a­RLéxFÜìOå^v¦>As5ƒ‰¸²$Þi¡Œ&,‹ñÏ?yÐ_ÍÒ-åœ~?ÝnßÏI'ôÌ×8Èlñ†Ì@¿ƒnù•4åL7:·ìy<‚>ú,ìUnæÞû×r¶6ÌÂÞE%Î+Nò.éF'ê› |é[Ҽɕþ‰±¨®xaæb†‡sQÙlk$6ÓãóG³¿N¼ÑM…›èçØß]e­–ÆÓµLryW¼Ôg±Yk |Èä2:3Æ„O¿€fùLW2sš\†ÿØÆwÇ•c9÷v|RmÇ)üÿáIþ1Œø'QâYz$Ž5Wð4¾Ñ8½Ü Ø+Ù›ùÉJn“4@…åfü>LÿŠ,E†–L^Ð:®ø¿÷A\¥zˆŒ#¡Ò2„+Š» þü€ZRk£Äce¸Û~ð.jV5ý¯bü¤PùýêA¶"̯-EÌX-ìcôWµ™Š{M«$Öhƒ©Pl«Vr<Ï߯ôÏß~Ðjƒ<¦£âf+vx¹¸"^*u´8دOTŸ¯&[8ª¦ŠÔŠ»•óJvqlc=6n?ñ3“™8MÅrâÜVœŠÿIF“%'øë=ѦS?¸š¨ÛÊ?¶Óܺ¿ÑM˜»@°˜3`öqÀ¯.PK™8Bÿ±P‰Á L•ŸIŠ?z XŸI v)d5y‘wÑäìzâ–GoÐVDpÍ5µñØOV¿Ê #0 ÿQTg˜x-¬¬Å|l˹€ïó¦ÉŽàÞËá]¯Têª9øÎeø´šhc󰫃Ø'*?ò‚Í N!Oá©^€“õ#kZËÚÞøg‡çºã”ÕZ^ö– Ë<¼/€œ«7k[ó£º_u—P°6|Î{~›×üª.Hcxóc)Ñ´CbQ°ÿ‹íÍ+C®€ÿ°øóÙD¬)È?>ã?ó¹U)w \ÞF”ŸU–×öüÔÿª™ÚAôæ^•'WŒáà[¹ÎêôỎn÷ŽFw©oÔŸ'5î ´³ƒ.^ÿ}GѧXòSÿöúô[wçŽä#G±f~¼áƒ«ˆF.âÇü¨ö°ÊCAq¾ËàW{è<^õîSòñ2#ÏmŠr2Ô“îª>9qïõä•°ý)Œ–àWùAÇ&‘yÜCå´ù™QU üj§ÇO}¬5ÿ#¾¶%ÔzÁää®ÜÓ»[ä?ßNÅß £:¬¦7þ£ÝiMaTBð«•ÜɰC5Œ7èr‡˜_KE³:]¯¦¦“ƒ\ãɶ’mñ¹cQ¦ŦîGwåçqÅÀ5ôM•À²ð«ôI÷““k+üG¥RWÛN„þ–'pBæàž`žHGºäÖ3×µÍ &‰|¢š½xÖgãZ„‰àWÉÑtå:ZȽT´¡ße‚µ–O/MVv}GÜÓgÃR4¢ê²3]« ãwðaÀ­úÁ ¼es¦\kŽ4¬nÇqéÕíªç“ópø?êãGˆÌè¯,n¤,üÇûts*‹˜ô.ÆôøÒÔŸ«ö¢Ô´_1rÁÒ\Åd¦Ããýº-T$5¥ÏÿD¿›M©Â¤Q:…èfâx‘úà‹í-ú«&ZO-!ü‡¥Á9…ÿ¨BÅdØú¶°q~¿¨¢&ÿ¨@¤êFµ_ MkEÿÝZ5f#LÑ^©]¢ÈĵÀ ‚‰ì! Y üá?ºh&œús±Vúï& õFüjk©ÿH ÿá=äßê¤ÝŒ<©…ðâ}|EÌ<2Qt¹DÚH¬X@[CýÇÎöi|Û.ò3ØMA¶]ÿ†ººã9|5‡;Bÿ±XÑ©²×ÀêR»-!æ®ÍUãOK$~žâ5QµU÷hYñ%Ú¼vXK›Å·ò•WüWÄ| *–âp•s‰÷jH«ÆiîÂV>JN‘“¹ÀE~±æ;[5ß·ŸÖœ¯ä$ü° n®__LÔWú“‰'âé‡ð=gõÅ¢ öG8+Žej´¥æJ ³0Œ¼ï)ØäH®ë-š˜þäÄ´¦-ñ¢~|×|[sž|S½ŽàxsÏø僺þ#þb"H~NüØx2µ|0 ÍÁ¯ÞR=°ë~Ô¥)Ѻ *v´¦Ý2ܰ¥aO·§Úþc"øÕy0Ÿ~ðë¸S 雉z¼ëôfDÍÚ™‰°·¸îxä7á_‚ø7B¿ûÀ¹µà:RÿÑÿáBœÅ8!ïÂg’è/òL¾3<˜™·–úA >݃úó­x¤2ø£§Äãd6ô SÂÌœ£~íˆ*¾éã©9¬Êo S¾ÜÈ…ÿ˜‹Ø×\`Î6‡eeúïúƒä”' {³G^÷’Ĉ!·¸F$ÃÞ~ÄŸw#/Ís¿Î8m,4£”µúïCÁKUº«%XÔøø¥ÕÜç¿PD—ƒ; ³ g<˜BI¥þ"5§üÎý÷'Ïë.›ÔŸÿa¦cŽ”N ~åÄm’Ó¿$rU?oï›írZm µÒbkÛ‚ñ+_ôþ•T7&6Qèîþóüæ+&õçãE5¢Å ðçWÐ_UU'+?´fÌFX iÚ84Á¿ùñŸþ*—h¾á‚¥ÙB?Ÿù§•±ZÞp›¾[ìC„o$çGíT+Ä9üÄ*¼‘øUNÙ?ç'r+»Ô{´>‰þ}…"¥ß­¨MÒîŠØ½³XöƒD„w@x‚¨khÃû¨JK-—láyÓÛ¯yŠ’ƒn‹A¢)•meåbp¢jøyØöDVDŠ·»C¶Ð4g'ÕK[ÁŠá?ùLw²úæîÄâ ö‰.i,Ò1Þ¡“|õ2¿a«æ Y?¨*­ÕÜì`,vS¼/}¬‰ñ÷á-¬©>ô5X½?å 2°‡0*}P£xcù½D1ÍÎ.çQ^„½Å•ÞøÃèòÙ?<Žî€RÅe|jYÿaaè[Ð_¹à±jëwo®ó˜hŠAýùîÚxФØ m\ï¬Îð˜ÑØØïú*¢å§øM«7ú'öøˆ§•NPÀ°§»‰Úþcº^ Îä+þ'º\Î}kŽþª¸Õ¢æ§Ôi<¡º; ÿ·ú·7!º÷†ÿ(! ¿rZ¿öؼÉêU‘|& Uá~<ƒó`K*¶ý½Ñ Dço¬é|U7üÇ!îd1¾ó|ò`™—~”ò0Ô=NÿöF<·/ú|0šfdT‰Œ&tÌH!‹K©}»J7Ʊf+бÔ©ÜÅ’ÀÀßì–—xÚª¶2Ôz‹,xÕWÜéñœ²0%»ãôOl)wÑíÛ˜^[”ºˆ›äZV‡TìÚ‹œfßW_²HÆÑ¿$•bW9# ˆñaƒž‘áv‡'ºeŒ†ŽÜ¿¤š+wð¡þð%ÈlJšÏðãÉiÒGØizÙN8;"wa„LÕ;¬ý%Òdx·Á̯}MÞ²˜þ½º=ófï€ÕozaG¿›ÓŒG,ÓÄÒ]®Ñ‹37¢­ãzo*¾Z%"³ö`ÌiäqÆ"'ý¯¼©‹_ÆtŹ¦Õ ~8þ#™ù<Ø¿M—kÌÁ†…­F'¶)ƒ~÷²ÞÙq _SÉ3_w èUM8þÌÃ(³RÏyµÔ&ØÿýTçä`þàqÇÃmL/Ö³z~v¤ŸDM“{8ÍÚzʯ4ÊšÑé¼û™…a¾_Õ`î{&ô»ñ@oƒVnÔ+ƒFvÜ?«~°((T[ò™ôò)ú«9FR{øóæjæ‘,Á|C çOÿÄ@ÖÏhŽÁL6æ’ikrÈWbPé&ŽSøTM­[&¢Ÿ~TzºéŒÖö‘àWGàÏ“¡^CfT×`f´ÏÁe±We aøó·ä+þäùЧ—–ëþ'øUôºNÝQ<¥)ó7>J|µ}A¿[ü#¾v"X¿{Åæk‘ƒþW•”϶°oÄï·Ó?qŒ(Cþ‘™Z¼ËªÐŸ_¢þ|™6Šþ‰¨)ùý ¡ÿV‡gêÿÑt‰· ýÕGô»6,ÎMº_- ¿ÍùHú­ÊAúïƒ XŒ…ÛÒ’HVÅ*yŠUà÷õñD÷ƒôq ¦©"¥¿Ê£-Ô‹Ù !çè,rëéKm¸¥¼jHUÙXhOøóXÆäzÌñ«Ê‘Bÿ ò˜xyÖ>3ȼUEçK,ûY/Í,Œ°³Ú«]Ä îZX ›Ñ“=í$ìMïܼF ã2QêS£™‡Õ÷AÈ¢iFtëç!fü4°šz‹zö‘XÁÝð)'ä}ÎÇ!´¶AXê'ðç-èžÑÉ ‚Ÿ¯‡‡ZÏÙ)†"é8|Kð«lúØIçÕÚ˜Dÿ†|æ žuœN}°N›Qy³‰aÜg{œ$Šov†›(Þø Jaž¸/,û6žÐiôW«B­·Säã;^“E¶§ã¤+¼ÁJc—1Âh‹¿`š«+\À^4g÷韘ž.ˆVÍhâûû(¦nqgc‹bŽõ²2pµÞ/ð ¬é<Ï®?™ÖFú·2¢ K'Û“þ»Ç©sã¬<üªHÚ”õ¨??Jæöþa7þ#+:­ñpF/Ø•xS3b?Àø¡ûSð¡Æôm1Ð_Åå<Þ‚Y£×§þ£«c¾ä…@ÁRòüÅ5}=†{QßÒ*ìæ3žý¸ŠÃÔ¼¨d3næt¹ÜìcÌ!KN€fª&¬Éi½¡ã>Âõˆ:=À¯é~F{Gs3ýÃRsm ÐïVcöàøý%dpñ™ÿq“šN+ÿèO÷ 7üѲÑ-ZÔ*ìBž†ÿãÔJ`¬éŸ’+]þíúÁø«j3ºã*`£V €¯­:©Šjbµ ý¯Di“Š’ú¼íY`¦ªñµÊôO DÓ»{+µ‰jCÇóŒÌÂÏ´Ì`9)è›1…‰ âŠÒ üj´~YÌs`[/GRµZÙ¦DÃÒŒê ´UO ëƒ0w…?¿€õ‡‡j+RŠðtCaw›þã¢XÄϤ›ïßx ½àW±mÈ? ‹½#ÿ€õŽ®ŒðšûÑÿêêÏÝA¶SË9àDAæ`ß³^Hé[VoÈz#ñË a÷fCÅ0Ä©5ÙÖMì©•)Ïä­)>Ÿª¯öXQzB`åwƒæM†¡¶1¿öWÈb€­¶ Œo>'¾w®ò¬°î ßkáWÉ‚ñŠç¼mÙ{°®qÔÄçºÇ3¿¶–ì3žµO0ê×›7pú€„’>ƒ ’7À¯ºÃÀÞåÞÞâ9¹ƒ¸’}Þs¼¹Îëýfû¡zñb€ô·¦z0½ÜC´žZ宲q¨j¨DËoÉ@ÀäIJ]a§É?ë9µ JØÚߺj;ìý|¬Ö~¦?=×q6jRå¿q|ä¶‘•ʹ¦TÔÝ!þ×è°†þ<}S1õ§ùƒîô«êK¶ìÂ]÷ÇÓÜ'Ë:ÖôŸöš}UˆÉ;šº¡‘¤46ã\‰ð÷JÍh!³7- ã?FÀŸ{à³U)_Y›žaA(¡6ŠÌiLÅ.ïbn/æ(½—ÍЊރMÉŠ=ž³Û·OùÜ(RÚ‘«6ÿºÀ½ìÀL3jÊ9Æks1L@êëîÂÖ, 0‰±“œc¾úÎÊ?‡Ð*fWâ¨ëY§lÕ}ßòÕQsõ¢:#ñÐ8‚÷hç± ë$=¢rÒ¿Ý¢iôv‰M7Êìx²Q!ô»žÔåÌ~æ¬î‘%±µ‡å@£9ùAs.ž\£û+üG6{MæG½…o‚º)±LwðÊÁþ£«è8ƒG©Ì£W&¾y “ *[«ûpð«DøÝ8ø%øàb¨ìÜ`~&Ë¿à?¡ßµø†àW~!ò'0±ýD.?O˜N7аÑTn§Ò2wí‡9Õ¬OýÇg&”,F¹›šªùËàWqÌØ™g¢oÓEÓó?É?r0qÐÒJýóO:¥ï¿ÍØüG-­&ó£ö× û2ïº'èªnQž_«(EñÉn(<3ë-é•H«¯ÎVTt¶;´™x¨jÇ®ÿµûßý鯹Ÿ¦Ä&åÿ³Ä{qþ#'Vô(ý¯VÃv_P°¿[i›²NI.¶Ç¬&Ùf_zÛö{°Îï°¢žä%“èȘQD‹Ä‹j³µ§b512Øøwœ†u 0bÉ>‘ñn£b!6¹ÓNz㼉p½áŠÁw›zÞ ýnb­‡ºFù¬u öR'¹}ýó]×µôļixv“é5 üê¶ÒKK‰Åñ£ÉZÐò‡‘ì¿»AÙ¯$ÆÞO$ÿÄ›tެØ[×V¬Å:鳩 ÁÌ]‘"DO†_ï5¯6_»'VÀƲïÄ^…±¾vGÕ™üª/Yí"üØ‘è_2AùÈIŒ Ç÷y×\½Çp~Úêçû«÷ŽßâNÞ5 ÿ±TÛÁ]¬«õãhMvqÿQ€Ès êZ:þÇ’Ö•g±ÍG°ò{‰ü—âµ¢‹-Á½—ûÞ{ÌJŠÍ]DÖŒkt#™…çù¡/•q±Æû±()å=<ÌCîë@¼L²¹~"¿=œ].Væhn¬fÊ¿õ¡ÔÜäý›Ž6à˜ôD½®˜.RÏmÕ<Âg>Ä37`ÿeàpv9Þ\ç.EÑö“Aêx‹Öèw3ÈÜ#/ð§dÀ…âë¯ׯB}â÷Yµ£©±¹´ÅÊvçRÁÕT;‹ìÞ tUöýÚÈ“µæŸç¦žû]—Â+ Ç4®À# VÝN}üª±˜þÓü¨šä ½@ Q#òïMâíÔDCÑôËZœÁƒü#½Tc#ùGØøø&TÌ¥¡þÃ'Ô=œ€?jÍ=·D^æ»óð5á»ÈüLÆ‹ÿ˜Œ:¶Ú¨Ì%<ÏîòqNð»7ÊýDM‰´¡ÖÛ,Šâù4öÕþ¼.ùÇ*ê§§îôß½ÌdÇÜ “™ ÿ‘g¶À)Ú¢wÜ.­(äX/“RZÝW”›†•YÑâä+Ós²;j&üã4½¹:ÁŸïB/{’Jšð wáãGÉ<§<»JÌw*z*í´cT‚¾¤_À^™_ÏgU2³ñøÒrø‰ï0 6»ú«„(q«Ó¥1µ¬Vÿö:d³Íñû;…þ*/ˆCo²ÞZr®ðÑ@½jq}ýá?ò££þÆŠ£ÀÇJ1Õ4ëšÃäîå ¼õ "Á.ìã£^×q oƒ_õÑÁ-ú€ ´Ðwì#¨$9ÿ¡˜ÉíËͲööGfò¨ªÐ%¾ ß äÜ?eAƒO“nÖœWæ0þ?Í‚¥Ïï¸3©•®ÿvÿö7¶ûÊ%üG[¦sœ ®??f+ªÖPó÷¿ŠEþü­Í_Q ßšGwgþ` ­ƒºQ¹ÿaõ¿zÁüÁÈô¶uÞ¸óZE½ v¸!+!œì ú·»k’hà9ÝKþ‚í¾iþc?üÇz¢èy<ñ-à.¹ekTNíÅ,žã#¢ðÁرÑtìLb&§s'a?ÊÍüÚËb!vý6x?ÖÙÒv½ÒãÉzàÉBžÀÚ'á¬nBWñü¨aJ4ÝÒÕ¾#-qxî`ìØÖ«ŒFé¸Ö¢ÿž`ZÙôyš—ãÙ‡Ý×?ŸWÔÆc};sUþü—“Ìh<1f1êɦaY¢C¼ÎžÿÆÅsÖ“2W¾ü/Ö|H>•Ù<˜ì ¬T† d6è×WÝ ÿFÆ• d&€œf;t';ñF½=ÜúÁ•Êd­÷ì VÞªqôC§6ËfîQWƒ'z >µ^ó=q¢eí݉F,o^ÿ«×6C[/þâ~·‡ï( {p?çM\ׯŒ"ŽO‚Å Dc»D£,úÝû<««Ø=-(àÉ0·¯ªÚKŒÁÞÁ†_f$r;wÞýn>z8]%²|DŸõGðɰ©žôìªNf1un~YU øIK“ùQ½yfY¸¦@p©Çz p'7<Ð3:ö€MžBÁïò;>ÒP QŸ+X#Ê$F™šlžr"ÔS­^;‡Oë‡J«±†^ÆËˆŽbk&ÊÝ= &ÌÆ+æQ•7îó¤]¹—W¨oÜ&ñÄÿ £ß]&¬ùQßðý Aز‘Ó, [a”%ÿxJE]Q¢ðeøSø•lf&ò1ä)CåI™–ŠÄ92‡°ÿÿü“J)¥ÎÓ‹ÃØÇä¸MtÝ–ý,O|3¶ñüª=ÖÝÍÝØëãdrIàÏ/ãWËd\êÏc‘{ ÎiJm”&ÚA=÷ì•~ÿQ’{xž¹ƒWÐﮂï~ÞöÕ)é°ÌO©–¯ªßÌ@þÑ‹~5Ýa,ÊŠnÂݱ¿ÊE- '¸QK3ø˜²/U­è_2=×K*Ú_Ñe¡écf¥KEzG®‘Ãé©å¥'å,öÆyQoàðw˜¤=PÄóxðF´ÖéGooIe£5?ÊOëkv¶·aúG^û0:_e¢þã%§(õƒãõ§øF †IåaÍÙ±å_wò?ÿgŠPúÝèws;îSÔ~{ í¶r‹þ»Ý5“zÜš¬²ysÕ<̯­EÿĨé¯ÞÛÊá?šƒV%ÿø¬Æ‚?ª¼Ó:Òwâ»GQ¿ûQ«Š}IÆáà-ŠëJ-™‚ÔWŠ °­GÔ4‘ºòmÊF¥œØ‡­_r€3Y@¶Â.yŠƒD÷o‰Ôgð7cE_QN$ÄŠ¥Ðï^K±ÊDZq{ˆQ.ƒ›Ød¢ŸwXýÓœÓ8ÎîfFÈŸUâã=¾Ó+ %?þ£syȹ.¯6¦’î<(üv¼ÊL¼A øÐ]Œ~~âŵé Cm±\Š\ÊJ›ùÈêݬ`ÑýЦxQ_lÑVÍ$¼•_Mf±òDàUsÈ;*ã!*`Ëç’u}×È Øÿ- GÉå+<ÕK²’ÁäPXuùGxü‡ªÇª°Ìä)Æ“Do#x*Ñá]çêyá?žÃ 7Á–øá“ŸÁeÔãÉ7ÇÓŸr¼¹Îë Ĭ% ŒK4Pºa Ïót×ñlr•ðqˆpÀe¬ ˆíß‘•]bÏE°2™ésйTðGjOÑ“û^+ï’üê5÷-ŽQÚ(I-u1:{3>È®°w±Qú)bû‡²š¬-&ÿK–¥_•'qIal_œü[¬àY‹ê‘ò+±t}¬swêÏc}ðOV߯rd_2¥ÑKfÄïÿ¦â`õ›è€ ÔQÓR­l>ÓŽUY©)YÅZgà,†Qþ†NMÁÙÚpO†â¹bÐÛ÷"g1u˜ùƒ“ä`WôJ™ÊEε߸@ò®Ò›ú] 9n¬ù OtžkOê¶ ´n<{)V_!c gß½ôJu«^•» öê0÷¹'øÕc"õÜïËäÍ`@N“!ùÀÔ¿ºÏ}™BFö'*=÷°«p²É-é¿{’'ù‰“»‡lÌ^ìÕì1à¼õ¨8$yÆ|ñú(ÄY{3ùaNrÿÁhØ<åtæ¶Žwù rJË ^7ÃEú‹óúD£™Ý1z’Gðü÷À¯&±bUüQk:­£ÿîXc6H…"ÛéuÈZ_èí§0€ùCDJôƒ-‰p*êæT“l‡%Ë ³óž§õƒßÌìöÕ(¯RÁï ³u+±äý1ýÛ]9YåþŸÎL˜#ùù4þé|H x*Ù÷)j¿ð­í¬rþ£³W»Ì©øÚÜÔæÔ&¢ÿU´Ÿ:Ìý~u[­›pãUÑ—ˆ”Zv*>V)~øKè]ÕA`b¿_!ôßÞÕÊ`²‚ÝÆ‚l?Ä+üGJl}rÝGìWñUër½ŠõÙf: ¥û±¤ËyŸOÁ凫CƒD_AXç©ü»ˆü#‹ˆŒ/.ÈüÁ[bQøm¢øS`´WYûÈzsNÛŸ¼­žz*V<’Ù¡ÿ˜¤ŠºB“…(z–¿~bdléc«Â±7ÙÓlÞ€ya¢ÈŸ¯¶6äª9þ[²ŒbøˆÉäXV-ÙL”®MÉh^ÁUìeï¾ps©?ßýKþü)ñDйExZ¬V ²˜Ÿû¦o’Ùð+»‰Ó3È»Øúwd)cÀ£öâGF×pñ«ÙLm«D¦’dh:HB÷i1O¹ ýôXôW;±{%xW?bíwðv&V«®þê»í™º^ldµ è@]@ðOs¥«ÑzÁºOÁ§Ãº ¬õBéÁ•òvíZžx²XΑ0·®”ÚLŒâ~¸á>â“’ÊÍÜÁfÄÇ9Ðï^†¾Äˆàj¿Çä]‰ñîÉm> Ãª'ÆþÔ·.ùÂPÌ0ì)© sUk4ÀþÌÿhAÍF{3+v!;Å®é­7Joô“™@lg†©?Ÿ€~×êþ©’IÞ“Áв°X-é_²€Î»ÑïÎ5‡’ßL0ºâE c=AýÇvPÌäaú—¬%ðϸ#͸ƒ¹ÑUÝFiëmÌ%y³\‘.#o¸æOò8ñy:ãj„IÔøÃá\Ád1ÿ#=ùÇrê?\9ÿ¥ÐïZ3Õ[ÑÉÃÛLeâsÁÃf“wÅî¢Tq®½ùN|&O(j®,`Ný…³š®)õ'@"ƒ8%e4u>r(Õˆ±È¶0?ý|w»n/N}Elt¼Ý˜J˜×Ì…fn÷fŒœÏ¢ž!ê?Ná?Jd´äì’oÅaøôðç»Ø×>êúãƒ4P§ÏäH6ö–Á<$÷/I,mry†Åž•á?†Pž„è§Zܺú £)ÙË1ºd†{w¡sb#ü‡´ç£Ýßp±wá>¶·ºÀ<§ÆºïK6¹ï¢¿Ê¯´PJ8,qr¥™’ÉñY˜W"‚O5ůjkžZ,í*ëØl§meÕŽj üG;%º5ýîS›‹ÖüªVn5Fm?/Чò|A|mŒÚ2Jû<©¹b5‹ƒŠ\†ë>%Åú—D'SH¯ûÐï>Š$ÿ±K9Àü¨Ø¿5XB«‚7¯œ€]j%fcE…<…­LÏ®Ž"‘ˆ —T\ó&ÿXÍ¸Š½<Žý»KÜû¾Âƒø+|…ÏKµ÷%ŠÌ¡ÿ§<‰ÈWÚ㔆ùk‰.Š÷ñƒ³k)?ã?l(ºù,‡Ø&ŠüùçÒFaÏ»Ãm|'‚/K>L©èÕ,óuˆ}Žáïn°óCxƒ4èÜ~ñdÞÙ:©1a",ýUKðª*¨x'½( õ•±›Á âIkzT™ÇÔWëÈȆÓ?1U8+Îd~}Žl€ !líVYµ¾ð€#+ æˆNÀz_жJú]壖! ó?JbMÛ¢¶½JdÿÞÙ—ÙT~ÄÎ-á?^;·üQÕ—~#‹ˆ×RCr‚SQ+ØÕÞÊsĸõÀœ:â? º°§êÈÓ?ÎnSý©ÿH¦oRN…º‡ÃÐsyrÏ£¡zµú_QsgŒ§b¼ÌÀœØéàW ™b1Âø(‡ÍÈ“zàÆá¢ñ»ïâ?h¡çQM¹A­>Â6Áãª/1!o¿±½Õ=üGC"é3èo?ȳ(f³¢[ {>-@qP¼92‰¨æØ_z¥: å.ÝŠÙ×YÎCú¼ t)Í¼Æ ã0 õH¸óÔXœ¿hHÈ[˜”Y ©©UÉC_~â£ãv¢ÿÕ^üÇ¢²¿df"«£tyé‡}ïB•w9" ëü‚N!mè*ó ÝÙ6Ô±%ñC£ÈàÈåú`f\;ûµQNk©8½­9}L:·õ©¨¢:¢ßE÷l|'£¹‹"x¾iM2üˆo/€ÿèbö3NqZìØŠ–` WôŠŽSøXñ Ö-oee:”6Ò}¶L:·ú·ç'³ŠK-¡»ÝÓdDÓuƒù É]‹¢óJ!™ª@þQ„È$õƒ÷Wüßû Óª‰˜îœFµ]Håþ£žÖ›üãf°O:D½X[ô»q©Ôß(-÷ÒVN©:Uè–›FKc¾F±‰âµ¶ýnï(Ö¼kíþ2t¤…~A˜úeø$X¼|¶[ôCã•Òq‚·ÕSÊ1ú_"÷"î¥åLoÎD'±ŽµuéCl?þÜ^DfÅŠÚbí<‘¯e6aMÀzxá•’•ª¨&ïû¹ÄíYõ¸úIŠ ÿ¡‘k¥!~óBoæŽ×ƒH/݉™/pÖ¶©/k*¯{Ó¹éw×j³UÐà{,¶ä=ÖÜ•NÅÓ1™ŠÀªžÁnâßëèÐNâeò”ûÅšþ¶jZV[‰Ú ÿ¯2¿óCgnÞs'XA|öx“÷|\Æ`<Ö>}ºh®ÅgÅy̪Î÷ÆF¥<ÿßçùÁ«ÛÁò—ÀF Ï`£[aG_à‘²V3Þ4+Ÿ}íxs×dû€þÊ-ÝP¬}A¼În}üGj¼I/´ÂHBò‰šï…ðëŰ”øÝϱEieMÍû§Ó]Wm/³/zæ£yíB^µf¿%8XQþ=ƒéüù;ØŠ”DÌÐuzs+—È—êŠyÚ]çÖ‚?ª¬>ƒ8oyÀä*±?!ó9ÿÈ‚…¿Á,V«»5¿V=èð{!ØÞä7ËBDµs• ¡îáæQ ‚Çø¨Å¿µ¶2.c"CfŠLÃRŸ àT&”<¿jÚ4R'缃Ý£½_ÿCÛj½u¢ wå3LS+òÈÅx£\蓺y'7Š‚®?Å‚ZU*ùÐKÝ«yH>L6%ÿ[^Oí$†_U•úÀu¥”{ÙYsþ%9˜å] fÔ(܃zç°IqÙé Ö¾î)jŸÃ<–Úêyð¦9 ø«È.Á4äD[Ÿî‹ EõÍ ;ݰ¢ŠÑ…ði4cõ°’çÁºFÉ¢œñ#aôW#ÔW¢§M# xÆ÷–†i‚â§ö|ýw}a?æÓ¿ÄfôGÁû†ï*É×àWŽpå™_Zù½V”¿úHæXŸ¬"3œÊm# Õø f‰”@eûÀ|E}üV,j6æŠ,'O™*¿Èz\ÿ<柗uœÄ4J%u®^™»§wŠ³Û„9’ý$2+²êu2£éXù³(Œé$H'ÞâæWrþxøô&.@ä4U†)RŨ,‰rÀGn‡?÷¦ÒXÈ¡Ø üÃé?üP‚ΙáÛz·Ô·ÀŒ…ÿðeÖûG£Œý„YÂÞÌ~Š) ä4ü¦®føUæGbúHe²ê;  ~ê™æ¸ÿÁŠ£ØuÖ{%‚ÿøwñ+Sy£ŸH¼%ù‡?yÓŽ`ïqLCþ±Œöçu¬¯¼³uW]ð±ÖTÝ–ì¢.oËýïÔŸç°t\Ä{ñÁ»­þW‡É?ú‚±í¤WYÙpû'ÎT¦hUX-1ÞÂêéèOü6 Ïýf`)ÝÈV‹§ä–~7€ç€ÿ¨„nÁ¿áõ/ùÿ±A,#éO¾‘‡zˆcxÊ­àÊ`¿§Â{g'òNްÔ.™ám2Âp_Idm¦p…Õ¾T`~Ô î{9P¤7¬„õ‚ôäðgа¾DïD\þØž«Ö~9ë»Ñ»iÊO½¸+Ó?±q€ ú§4Øð0+¾² ýß ßíH5öTô»oá·û‘“ì÷)M­õ}ºZ %·KªïS…z*ÓÕð秸[ÀhPђՠøQ•šö‘XêýÔ2Œ7›Ñ_k°Ñ„i~m<þø+ç$ÒV‡Zo•°ô»Oð©ÍÉ*¬©ï÷á?¼è<<ÇxÏ$ŒšT¨œ½×©Š£–žf*¬Òpðºâ¨ƒ'Sÿá좔VqSwëÕñˆï/szÊ.àBK™ç—“¨üùÇ(¼å~gwéÕ„*íÏp]Óð­¹ÈͲ ‘´WjÓ¿$Ÿ|‡Z`‹ÌÏ?ÆüÁù̯­_á B”Ùž¤ ¬µ¿ên õçÉØß8¹µzÞfgý¹rEsA+Õš4±ü&Þ2?JÚû3±]Gjáy¯û¼fýx«šå6jiÖ D—ƒ°?Ð}Trä÷OmùG/¬Â¼;Œê(uÑ%-¥w!û2³”½‰}—YÅ>‘~‘1ñLxu3)üÇ áFTü µÚ™ÿ ÿ‘á¬äN¡´ÑM1|+ð«¯*J€òR­É4ÖÚ³à5ÛJªèÀ›LmCý¹³ŸÙ¯VùõGð}ÉÍÊ%oñµ´ÚXø§Ú(ñP[«ýÉ4['òç~õñU-mQb†Û<ù="HœQÊjÑ@”‹ ¾xÉücýK²‹Í`É Žç&'­CýÇüy<æ´Ã_T$ÿèŽj¹0™—UoÖ äá&(Ê6¼ËBlnY}¯ÿùî•¿z„%_Æuî@/µŽk¶¦^ ¥ûö\˜€kØæ“ø½cì}ö;‹8õKþãƒm šŠï÷&ÿ¨« ±˜Ÿý*]’Uöá?rüø ;y›ú‚×x¡µ.¥% e«þÙåe((Â%=¡ÜJFó?Þ trO õÅLq—¼][ž±Þ#þ¦5µ-©Y ϼĬËáz`Í aƒ|`±vs׆`ýGP·‘ õBÞ‚iÌßdž8KÎTËßHûë§úó²ÔŸÅ”ÆÊ?'ÿˆÏzO ¶‘ ~û VëƒQѰº­ÿ‰Åë?Rë¼ Ü§ý'ja…üG²ÆÂØÈdðã°'eUz]=–w¨Œp‡íH˜FøÝtl¬¢sU2•V¦!Ý&ÿè¯Þí¸¾ú(0¤êÔê%2†“ÔÀ %®÷!Æ‹ÿøÃhÿx*“ô¡ÚÏêr…Ø)®v8Ô3™ž•Z˜Ûø…àG—à?^K r øÕf:MUa¦úæn$âOMúRÎÐ@ò­b¨Fâ?\ë¿ZLýGQP½òkö£Oñ c¼i7K2Ñõ"º«!ìñ9Èeìhc¸yile½Íôo§¿$ÊßýÛ‡)µè¿›OÂÕm‘ùá¤ö’Ì k{üG9Ø/0èñìeá?LЬ.ÌÞˆKþßñ¯¹˜ÞvîÂ9oè(󳡓òàù•/ÅF½õ¹g½Ñ`oKá?f≠PORœk_+7ÐÙdØ´]Ž$zTÑôÿÿóRé® \¤«v š½!3£Á2í$/]¯²ØÛÙ÷›®öÉLðMeoOÔMrŠþü£ouN¹C‹š…ý×oÿ¿ý™þ%%O. Þ$£ã³¨­üÕvI¹~·/üÇ…àœæú«6ðç1Éâ*W£´Ü3ê?zÐÛ¾ ˜ÃRñQµøMÊtÒ7´eZmxù­&Qt<üqìV?úïž¿J@ü›E?$vŠþ⹚.RW~LY«äV·ÙMúH¬Þ9Ë2£$ªƒ¸†õòÂÂÎ×ç‰f"w¤üGymú«¥°Èþà5ÑšÞ&V$ǵð«4ø®xŽax–Lz¼ýÇ`EP}þ[“ç0›†è¶å'Ázù÷ñöwÂÇM%úÿ[ÛÁ5WÑfÿyâgß’Â÷X™HÞøe  Q‡ùá9v±þ°­ä»8Qá?ê¶¾j.îØlPÉføÈ*ì`º2|(#;ÛC>¼î:În² O¼ÜV¸ËZœpVœGÿ’R|oz®’>¤D¾}xÂ›É ²ËÚz#1Q<"ÿè†{Êsñç÷5/«Å“ ?k{Áü¨éðç°•y‰¥¦l€eI>â.“yAH^òïNtl¤-xŸwõ,ì¸õ{Ã\rIµI0ÿaõË}ÌŠñäJî[sì{Q#ñJ‘ü3ÿ<6Œo[üfm¢âØÝlôoŸªù…Y/·z {? +¸ŸpŒ3Õ|åéžDÿ«^Ìœ€E ¿q§¢d;Ϻ"ßùŒß×Q¦Âx‡áÏ»3Oݪ)"vFUU“®)iì2*€ÍÂþ­Ç Žc~­nôÄV½!ÿȇ½EýÇj2‚}zÂ0ùÇ2QÜð~º9VÜ<ê¼ñŠ~Œ#äjô»£¿ªiøƒžî™ÌÌT´OÄ«Žâûò;É?↘?˜üc:™[~ù•*tËôç  .>¶™ýÕa"üq0èGà?.1¼ k tÅ“è_œÌ¸!€òuwГùV$ðo¹ýn:»¬&ËJDÍß:žÄsêý {"{!ôWÖ»9êî‚TŸôB[ÐSÇ }gð¤ržh´2þãlÛsáþ*-Uá>æ`ò:T¥x›1ÉGîÀ×<¤SM9s³ÜK/üU  o‰±ºÓ%ç‚^Åá?ü¨ì)¢aMi×VÁŸCüóOýú+ï‚ùóÜĨۉ»—‘@•œø6…¾þc¸§†§òùyÅKÊv¥0šï5pÃaŽo€=6"Kj fbE5é 24ý»±"±ÇÚÚíœX Šs ôêѸñô´âmå=<ÇyK os…ú%BÿÑ_Ñ©û.Ú‘’ ˆ¹+ƒÚâ§c%üÉC^bcÛãáæ‚ .ÖöE°C‹?¿NÅÓTüÚôù¹ÇÔŽEí2”*5rç“üÍ),þ~ôFYÄ1NÔÏwÍúÊ7[5'˜ÏR6­ þ!»<ƒ7´æG“-d_iÉA®îcïÖ mÊ‚²ôOÞ»œHVÒÖ*{œKT üj(Þ±UþDîVýà{ð+ô*7<ƒ…_U1>Ñ¿=qŸßH×+ìø*tKn²Ñ ³^9õ6Ït0ž{\ÌQyG/‹¯)Ü÷•1€Jì•æ$ó ñr{&ŒlÃ6—éò#oê!sÁÊnU΄z*CÔן/ÈüÈ?23?ªŸ±ÏpÁLµx`lá`³ ýP:â?^‚äÙ»m+ÈÝa= š[\-¬üÃF´S ë\œ¬ë’qŸúAzâÒwKpýÇØê¸T&ÿÐŒyð)cðHù³œ¦Ü!jmS+ÉÔ-zžÁþ¿•BGtjAÆ"Ô°ÙoÆ92„î(xOà5/SÿQƒê{9×,|[zøýä`wã…Óšö!ÿ8KœñåàZîFê*'óÌ öâæØü YÒžÌîJÿÝøL¥êLßÈf:Ø—<»Î¼E͉/ý.ÎÑǵg¸-'à«þZøé½©ZoÜ?ñ xZ_:(&¥âY&ëªTNÖ7ÿ–ÞôßCLx‡¬º5JõòŽSøšþW£ELÞ2«SjMêÏ+¢´ZŒ..óoÓZ¹à?vã?zÓµ¹(Û}z’2mrÚŸÒ°[ÏÀYÿ7ýwS-:+)â3?*2šÓ'ç_³=Q.’ôF¿{-¿ò¿êÈüsU-«|µEMðÒVL°8±sfºªµ¡ê\ú·Ïf~í<øóÖLÜ(üóÄr ZÝžÄÊ ±îš~I)­™ØúTú^ú·@¹Ìk›²E))˜«Šué…=¾Ç;Ýš¸¶­Xý £2´iŒ|N‘5{´æÞû `­]dGAœÊ%XA•·úñð12ÚXxªœ­ˆëÏû)ßDlfštÒÿ ÷ßÌ™¬j33ç©CÌ|nUŸ†-*¤¯ÐÎE°ÃÂÚ$loWüÍØäÂäóaÌ­ùçˆÌ‚…_ÁÖ¯ÒâYþâÊÄü¨_yö·¶.jòŒàWîðD•ÐOÁ|֗Ȭ¬²‰È>¾¼I¼yoÒß7ˆïí~^þ1Ké¯UÀ·%ÆXù‡Õ¿}8*+… cõòÔÞké„]~Aþñ”ì©9} ,¶ñ¦ãÍu @Ûcu@Z®Ìš^Lîå9®‡e˜ ß1ˆêì¼(NŸÂqoÄŸ¤Â\¿ºÄ÷Çaþàzes©à*Ñw2~­š gø¤$r'w¾9õmE`ÐÏ‚áá?¾`ÿd&_]®»ùÇbØö4²Š¥…­¶-EÿÝŽDÖò„ðç7É|¢•ŠK…Æ=òFDä#Ì—tAlBMá˜úÊàW¾äMÍdJòîõT-…ÜâHõ¹À½ÿNo©û°ÔiaÞ[›Œ0󙥾,f°Y…~·-è‹ußá‚9EåZžù^=k˜þ%^ð¹äwò¼úÔYã;·ƒ8Í7z×nÃ)C½øð¶ñLtMa¼ÆÚaŇÌÿ¸@æà"²8ö—C) þ…¯­ˆ?* þVŸ…~÷uñññoäCÉNÂT\`µrLWmÃýMõ<=ëñ_“CÌÿè‹Òò$žè=ØðYLñ»ò¢~°,uQz$µÿiOc¯ 3ýݸ ^Êïô`MVÿ«°i-ÄpÑα¿#Ê9-V¤v;³|-îèC¸öæ\ß@ð°ÎdF;Ì$ö¡Ì') Ÿ’/7R®0‡ õò3QQS‡×ôjŽSø†N®ÝE N{"œªú£ =Û÷QÍ•wtû<&×6µ¯ ÿî|ò‘¼d!ÏVTñ?Å#ÿ(ÀÙO'ha5!Ÿ÷êãö°ÁΦù”>JaÇ}ŠÚïÔ”OŠFõÇf­£–XíÎ*{lCÔ“êZµµÚþ#섶߯~ÛVJk‰OND×@_‘^Ë©µWW(/µù"¶ø¤ ÕΨ¡ß‡ß¯f³õÕ^2M$3jàip^â’"«UAØ5ýˆ8.¼DeÍ©ÐûÝjS˜õLë…ÍÚŠû‹ŒA—–J¬®˜H^ÿ¶¢%vì°è!žk‘Ñ_•Ô|´Wb=Vú6x8ÌA,õP£úDã±åAâ•„¬Iß[1>U¹ˆ691XŽ <ÁêÔÞÖg“„U´ôùŸðî¬6®¬´[<íÚPxâ>XÒ‡X›fp“Ð,Ä.ãͪE,úîc#é20¶búíA>-ô}¼oóPcâ?âÕ:³b}žÄx<3Sd ò/,sByõà?Fñ¬ªZYókÃëCÙŠç—‹½Å“»È:,ÆÝª÷ÞFZ½¡>Ô´‹÷ƒá¿Íï©‹ÿ¨ÊzØñæ:÷÷ѶUµúïÆó~ž ¯4=ååón\ë:VY‚59It]Ž]ªärçȼ¾â÷‚åø8— þ¨¾ZGŒäžd% ¸§5ä>0É:X®„tÜÝB¥³ä!OQPÅ"›¨Æ“.Çn'“ݤ•­Ä4íG˜õÚ£·B•ÕÛ;r€»(+öÁuG¿ÚMÿÄlDø¥ÍG茫IŒµ¬æŠ5Ý vÖÄ?³~\ ­—Z©Þã¸Ó:¾ñ"9O:©’(°²£kd6ÅÕ§»`>Ö¯oT3ŹáCöÉø¸³œÏ˜Ú”P'gºÈ ê÷»Ñšæ;—Ð?q‘QY01›Ä•.ó̆4ÆP X4û:%T4c)1~‘ݱ^6¥„ºA¯É5˜x‚{d £ñ”©ôKlþŒT»´¦»Ê¼Ò^##U!E™¾ž'5…µ¾ØCÄ3Ç€>ö¢žõˆÂóËò·þ»õ™Šèb.ÿº‡˪@Ïk¯3}-[#㇑…wÏïw‡ÿšàÔ_ÝV®k“Ú›(¯:óÏ÷ë}ð:uðºCÌF'” ÓÌ„Xý§fjg}Ø:IuޱŒÓ¥0Û¬3.ÑÓ9Ná[æN:þãïàÎÚöô¿zKÎåoT±GÕ¯”´O£âº®øàëã›dÈïEÞ£µÄOs´¨1ŽÛóú œÒ*ļ¸dŠG5oÔ~oûª\`~Ô`­Qm%NÃnú­vVKÑ¿¤:ókùddÖ}~w½%3ƒÆŒ`þ`2­­ºT ÂO_ÖfÁ°ŒV»8Î[dÖ»¢åÄïÿ‰Å¥g$Wð£I+--÷mº·¯¤~ð‡š'R+.§ûb!ÑéìÕ*p› ðÕ±s^X0 O}´>Åx\™Ž(¨g9Oþaͨ8¶d͑ڈõ‰þĹ8@Fû'ØÌ<!~5Vù$rS^Ÿüƒ™èÂb5çb),„ä9–ô.œukr±ä%뵃\s#m0–'WuìÈÊ?Và1²ðî/}h'oà1Ï‘Kìæ ÁÓ}§wͯôW6¥¥š›»Œ=uåJ«±Þ,¼’56ÌnxêTØéÛàW»ùµQL£“qq-a8»ìÉü¨jx#Sn7³Á’æizƒgå—ÝÀѺ’lÃBU3xÄîwóì­^×ùÂå?L屺‰ü#9ÙGoleaêé\W1|Gþû„žz1ÓÎÿ7@õO¼ž $.=‹_m sëSÞS‹Òy?þc YÊ6že ºÜ¢æï0õƒ̰þ.[ –ºÃoˆa=-î©/ÙS%êÖë«É?&c7aÃwã½Rðÿ¼èk_ËF3ºƒ ÕùÿщŠÄݰ>…ñ{ÐK1ÓÜqr$Ô=œAÿÄ^d»ŸônXÜjx­7ô˜šfÄ Cš@íà>0Ozþ½ÂÃD!Õ¯Ü^–a7¬~Ëvmn¨õŽâ?²ŸÐ—œ< (k3Ö“ÚÔ<¦ÂÕLÁ|¥7Vg¦Z¸ÀRLâ õFs–ÿ9F&κ‚̤æ›|Æêør‘·Â¤î¨ÑŠn¶ñÐaE6ÕÕôN>ô»ÍÄN}¸{ãѯý`)¨öŸÂ´©^‰ÞÀêB@¯/Уmò }©öRçM&(íÉQï>¢¾¢©ùÚ¸ WSjÅÔ¬Ó2™ÍÐY´t\orDËÄIêÌh$Þˆ–Faz¿†×¿òµØ¼‰ÿØŒž·г"Ôpl’óÍîÆô»A¼w a±ŽéUþã–Ò[k-’¢’ï†B¾®îm¥fðH_\Ö{I>“Ç^ÏnÚó0ý4•ŠEèŠRž í÷Á?ü˜qQ†ä‡??æ þ7>­¤4R;îLV¥ÿ¿­¿ ´}cþymˆ– ü ÆÃ¶ÃV—9O%á?\•÷¶‹Qºœ@[:ú—¸`aÒêݘ?˜ÄjøÕPq†y1´~ª³fd¾ÀoVUþ×tÉDßNËL4ˆ÷XD‚@Õ™AÿnÅYÊfê×`QW㋼ˆ•“€C¶1™=yÒv$vc µDJ¿›=ÙU~ö!±ôßxŽo°(^0}±8½ßÑì#&±[{ãI_8žÔ¯vØNy)Rë GZÏuXtK5;ÿñ„¼&ûÝŠŽÕXaÿôØ`Džä,ñ—®DäV­w´—3™VÑVžÇ3Ä‹îånÌG¬‰½!ôà¡wùÝÖPM·™rÕ˜k­†þj>¸œ¯ψ:bÕ"æ]ªÅ•Ï¥’<…&ùîÊ2­¾Æâ?&€ã?Á‹Ì"'4‰¥×â͇ ¢ÛÎÔ6<á»üˆÝ«À •'Gòq¼¹ÎýÚn¨Û‰ âÃúã? É\ÑôN½±›#ÐM%@±ü€ž!ÞøôDÚðxWÈêÞ襴…?áWµÉ?Æp¥Ö¼À¯Äøñy/é¿+©îËF/òL`ØÕ`šƒèœ…G2¨X<ò³ßTC þi–uKõ¸è‹Ú£0ßÒå‡ÿ؇vÉ4Ó¿ÄšÞý®D[ËF¬³m £'ˆzýP˜þ‰“è§ÕíÂW}UÕÁ|ÞRù±ÀHƒ0 _´ ,¦™Ùžü£Œÿ#ÅŒx9_²”µp^>ÔŸ/õL–‹|Ç pB¼evìîLð—èwg£·]JD~ªÐ/Ðm¸µyññ##ñ3á?R‡ðωE)Çzy”$ôO¬D§AÎ|æm8SHQÿ…Ú}µ)Óè^Òþ£§¹~: ÈurŠñt¸Œo쇑J.ç gG¥2ú«’Dc&w®:˜ÓQyÂhO=J~s©5©ÖžÉn·?ÆJ3“Ðø–­šËÌ(3Át]ÃsÎç4 NTö¹rV+MvÜ™¸ÄEf &Æü¨ö\_gð°<øÉ”ö¯ô/¾ ®@ `&s\ÂLÃ%<³¯äÞƒÈ߯ê%§ð.–¨¯HÌ[Ö‹ÇC_MÎ1†Îôç©ÿˆEn´ˆùnLØÍŒª÷„QÖÿ ]ÔÒš÷À9n‰¬p‰Þ°;Ëÿ'ú]ü‡3^L£ VÒ;ž£óíŠÌGŸm¯à?ª‚`ÅÖŽ× ¯£þ¼ óÏS÷oÿñÊVPs9éKï(üÔŸÓ ;~/áÆÏ/`§)a„à T“W°ÌW8¿‡‰ï';ÅÛCÄ#¡¯õ©­¹š›5ÏQÕJ&Í᪃ô¥2ÙÍnüQ’ÿGÜY€Wmoÿ$ÙÙÉÁÝ]Š)ÅÝÝapw(î.ÅÝÝuðâîîîZЇï—3wÎiK™¶÷{îf -ewg'YïZﻄˆæ9?qÜn9¢”ñôò 5þèÇüá2`®Šg?FùkÝo¼¥³ð9ú›°ýåázn³¢Õ?1ú‡§~Üùæºö§)ÕCbÿ¶=×–‹ü«Ëìs9‘Ö j)FcU%xyøc8ìŽ-ºÄÝ>C¶×G=ù»[\K9>ª®ÖC?ŸFþÐNr¶z½lwK‘•ƒ¹Q§èÏwÉ(I^S=ŒÛø¸vk'œÎ¸±"¢Ó/½(ªÂ7õg½Üd½='ÿÔªç9$³`ßoÉ{ôȨ ~t0£Ò¿¤4ü••‰P¥æ$ö¾>¹m É¿:ì} ~t„{ýIocdV¸Q…^”zèd0MD‰ßböƒÇér^[õŒ3È%»‚…Ÿ¨î8ÄýN£áEùo‰HKýàW¢Ñ&àB&úžOÇâÏ3ÚÈɆLQ1¦¸nÄ¿Ääñdf|ø«(M¹’èÆj9@fEœëåUÒ¨3Ñ+²3å± y <ìâu:¿_7vàçÄ·ß…²°~SIñðˆµfÓÓSû9ÁØÔŸ»*ø(ÕÈ¿ÊïÿH¿! ÂÍ£ŸV𣙺¹˜ÿ{ü°âìµÞ}¼„f pw9B¯J~K?¿ËüÁŒx7^Ële¯b÷¥É\À¤öšdua‡DÜ—Dižé=ø13ÿ•úóüt,qÕ¤R¼7ç} òx„ãÃ7¶WÊCêÏ{RÿqQ±ºÙì·5T{ª¥ýu%bÝéŸÚ 2°of,ˆó?Ѝ3•ïàô1m‘›þW®zžplÎvDË‹Ož‰»>‡ˆfg”FZRP@¥¾}?ÖæK8ñc‹²^IW5•{¶ø¨žD¶Â£n,fêÛ°b3@ÉT½õiD‚pœe%®Ç_L!â8…/¾¶÷(Úü[´¾ædE‘Gaq’à™Ô£êÂ\¯‰¶+^LRøèÕè&UÉ`›ÊÚ&øq“XAÈ¥Øå©DIùô%Úž0VÌ§Íæýµúïúâ]YÂ[˜¿~V±8øqlZƒGjeAyéIé¿Ûâ7k>·µP’0‹=5#Ë;êÏOÁ=í$þX~ÞÎù+^ã$Z}ô#ƒ·§È£¡¬¸ü(ũĒ«øñ˜«ÄÚ.fž^™þ•—àÄëÂÜ[´¯±ÇÚd¢•‡w¸â|s]OÎÛôóùœNâ¾¼xÐçAì%z\X–6p-¯å;TÜûàÇjÙÛ¬Ëëä†ÝÔãÀÑçÆ™¿[Gm%¼9‘BXùG¬›¼¼wz]ìy# žy˜ˆLÆsØ¡øÆ~F\ÇüÚUääæ–ÅÅ0í©kkŽ*8ðcVp 1ÐAéÏSwœ^‡ßØÓc£6jÞn üR3‰ùHpH;¤u¥;,ðtΠKŽPß!þèE¬P–Z¹Ÿ¬¶Øˆ~Œ…Á_é°ÐmˆnZÑøÂæ b¸ÿ¶™øãˆž.DçæéÂêŸhõ%¯E6UQ®cÙ\óà¯&©G,Eµh¾Ä%iÉ¿z OiöÒqä üUö üU¥°:LbDy¹P·îáIÕ7îÓeØdòíCc×Ú´ÜʯÓDr™ÈsòG=šH b‡kKgeÞ ×¼Ó¾xŠôÔò3 âž´”àG]ê>žÑ÷}&Ý¿Psþ’¼«,öVØë·ô,ô&?.%¾Ì ÎÚKNï.¬Ž~ý÷LñÅšTAíþD”d'r®c|…¡Û`NwL}Cý Šjñˆ¼âÏôçòCšÇ,ù™pÊþ Dw=ŸôÕK;ŸÂÏÌ ÕL™Ê<÷«ŒâÔŸ¢Ê4óÏ·Á‡5·W´?ƒ›ÂWÓØ ‘…åúᚨL"kºèšE?/b¸"³TÊà Õ ŸWøþ|õ’ùµC´¼h¨e9íCÌ+G¬ìäï„o™ÿ|×#[V­¯(JÅš'½¤>«˜ÿ±L Ô&Š'Úº)ŽT{:ïgx>MÆvO¸ï6XœRÌ çÀwò<˜@xB d´}ø2Ï6Á$Ç?þÄŽ@çõ‡“ö“®(¦bI¿óõ±TK,=Eb‘,{ÌC?úÛb–ë^üvÖ;~<Ä[mŠJ›OÓ D ²¤Ôc†©t§þ\‡ïêEFŸUÿÑD/•^FŒ /ó:Ê‚ÄÞvƒÃšŒ%ݦþQXK„ÑÔµ*¸K‚£ˆ7R Í Äk´¦Ãùs¢ˆ™Žƒ¥}õ„bÇoãWðW‰ØÉ*"ª6`m%îÄdôŸÔ@gŧ]N´‚ë½Íj‰ò;ÂHÍà^ÔÌPÎqÒQË.FAÿ˜ÌU]ç_Œ!nQYËl†Fâ*Þ­U~ƒ}±öy–êâ­Ýt¾¹®'ç­íº…» ­¶×C䌶buZƒ'íaw~è+Ñ®Á±·'³í'¹WGX7%ÊEqô½®¥UV›/,‚o:€†=üØ‹gP>ÉÝšˆ ½MÿÄ7øÁ ‰ añªËóè×Á®êbÈ/ñG=ò¥¼ÙQzìd<ã0×”Û[õý†¼fÔC X£ó~¬¾£þ£x´‹làTFW™ Åχ®;A·8Eý)ºÁëê#ÐãË}•åŒUFnº£Œ€1Y‹‚ÞÎþ³üü¸ˆ¯P”(ì>ùÇ{ðw陵¥ÁÖ›+ÒÛoy¾Z¢Ÿç’åTžU°g³è7²u¿õ÷èÖ5? ™Ó`­ÆS»˜“ú~Ôºº?”T’« ñìÝÉ_/Íóð M¾ÕØýÁ„Ì׸D•ádð^ç®R?˜ÆéØaÕÄc¯‰ˆ¦ÆÉ¿Ë›~%ê W{”\û”D’Cè{uÛªº¤ÿ‰? ˆ´?7³Ú»Óÿê¨2V+™pÃå=®|4øá-\^ömåøÑ†¼úïè3ñõ½zm¢„ô½C‡¯WLc‰ln_jÞGçNݤæJú—ô7Vùx!«‡EfÙ™¨³˜†`õ>œ‚=[BÄ›BDÇ«ÂÇù‹ÕxáXq•ǰ÷7Q6›JEF—'àEâÉžÓcëaóWƒèC`ñ3“y´æ©6ì÷ì±ÄJ\ÃÞúcíÛcÙf³ç°ëÏ‹k‹°’ÍÁgıÂVÇÜÔàÇP~•‘gð-D°TÎEt\O+|~$C7X† oÍ.ª€Gç€g‹½Õ7:{¼ÄÕŸ5‚îkèdUP¡œãDe¸V3¦ÜÅù“ûЇSÚŠš—|†º¢†8E¬P[vÑ\·¦+”‚» ~|`~íf±Õ©7ŒE>|i:ÇsÅéÑŸ;Ãþ‚ýX„¥=Ýk ³ò…¨ì ÖÒÊß­ ­û…¿ª ¶GX ®ý#úIL¹f­<óUÓwl!ëô>u„o‰RÀy‘Õ€ÞZËP7<èŸ8á—ùµ%èŸØ{‘ÔHbr ?%ÝÉÞ½KüÑy4Ö7ùE%=6¾+5Û±÷‘^0ôÙôm!ôó¡¬× œŽEð’+ÊÏ„ÞêÆj²Ž23gc&}Ðã›Ð[å2ºnaá­™“ÀºÂc1Sh ƒÝ“YðW™°ŽþØz²qÉZžfì`~m¹˜ùµK©Ä.€^q€ksŸÊPŒùŽ ð§Ô@n_=D^çz¹”ÄäïÖ'â°G¸³5á¯îQ—¢›†NÞî"˜«îLvmËŠ9‰Ú˜/‰É&rÅVÿݨœáTqÖiºz+U©ÿ((ŸÕï²Ð g­Qƒþ†-©ÊÈNô‘ü¸OÿÄút%»„–Ô™þ%y޼A`fÒ[›.lÎý]¦ÿnvë.T{¹ÉÛØ‚Äžô/ù“É!·†fjûGX¬ûÜ‘×Ä9)Ír³Ù×°²û^ÂnO†{|¢çw>…þôç5Ë‘·b1úùX˜¹ ì±#Pf˜™ãa JB{ø«‚ Ü78„‹¢>â=\þ¯Äe•öŠKIˆO4>+ê¼9Îl/à›k}èUuÓÁ_ùô¡ÿ®›ZN¿txpþÃP?¸gËÎLà¼D žÌÒø¡f£bp)ý'ˆ@ôó´ÚDµ»ó~†º@ˆ/Zú`I›aç*0“è¥8LýGd,T~ý¤¸&&‹HZ¾p­ø§²VI)vÀml‚܈†–˜þW•ô¢Â +mMɘˆmÞŒâY¤ÇŠ¥éŸøT,yžcK·—°š±ªÕñy“cýú0°;–?¾þ:Ìõ¼éŸhïÛæ¥¼ÜÆŸÍÐä¦ð„EÁÚßfmø£|Ô|¸¼ÍaÖ”Ö&ùþ÷Dž æ0¸ ¸0Ãã±³•PTîðõhþGÁ…NàÇž zZð›@ýy"¬î𨖾zÊ Îì>Z¦ãÃ_Å•'ÁŽ[dõåš'ós;Â_Ååº'Óõ¡×«œm¾Ç9 Ç;PðõÛêD=q;Q›XÁªzñ™[ÍÖà×ç›ëÚß'›õçKaZä?Nr—Sÿ߃¨¨.ʹŠu÷Ã..ÃÒç‡ ¹Æ>o£Ä“õ´é¿ÔÖQk‹>`mAìÚOxšÄ¨4=®>ËlTú€ÈÃz!kÑÁê&l“-é5ýgàÆо¿ðW ˜ÿÑo'ªxã<ˆ‘M ú> þ°2nGÂ}“šQƒÀ˜•á'?Boé‡ÅLJÿ«àúÇdðc(÷ì§#þ¨ ×ÿ…IµKŒ,ät ¦¼zJ³µñü¨n<U‹âß‚;ŠŸsHO‚¿Z&²‚ª¯QïêÂL•&–š~Œ4úS©w’|®ªt'¿x¸PaÚÃ_5#þ(jŸDþîq"µèDY#ÌööªtèŠEýàò¯ÜÌóÄÙÍX²~ƒü«F¼}Iå-bJ®gÿÿç£bJÏ |CJ¥>+úëÏühóWî“¿;ýãéæÖPû«eÔ8ÄŸm.>ò×ûëWîÚrj­ÉDÍ{¿RÄÐr2ÿ|%ý¯†‹—š–þj”óyûõ_ÿú•ÃZj|qtC üLñEÜ'+#Œ‡»~NƒßŒ«y†kÅ•ÌÿH)v·X½h÷£¤—C¸ï5Ä@,©¥ Õ—ê{™G„§–¿4ùW÷Å s?žÄp´·°Ò~¼Ù ˜R›ß þÊÒ?’èÑÃä¯Ú*"xÓ_–üݶÖœXB²l¬ÉqÖüÚæ ³)¨ÿ¸Æ5ç?赋xa;ýÏ7jz°âMÔô}hgù›åœpZqú·ó_ÒÿÊš?¸'¾&ˆVü˜BF×}2ø±Y_†×œfæqÜQð£þû\ô\Zh}ð'*ôòxÐä,ýSð£/|â"²3SfMˆ?¶È–°v¾Ä3~hŒ­@Ò*üòu¾¹®çäùWëÅBT¢~øÅEáN.âí¯¡.kúG}ò„bâݾ¦Vb5L ;Îó+ w¨>\NHþªø1˜}•â_|eE«ÿ®ý ÂÍÝØúù?ßÓ¿Ýš ØÎ¥ ±Ízò^sQ?Øïü(Nþ®•Eí~ä€ã rÁ_æ´ÄRM¢.@1bP•˜œ¤>ðvÛÀ¨Fo™ål—²/Øí¨<£3}¿2ý¯"QÓ¼ŒúŒÆHæ ÍFÿh63ޡДCí÷C øˆžs)>5“®Ó³Ùf¼þç j ¬s ”û…TÙÏ2Ó?ñ6ù»¥Íü䳞…y›cqCðX8ÙÑh/é¶bñW®·/“’BO¬æ‰ÊT‚üÃäò6 ~p •ŠÆwðWÖü¨ÞXúÔ[$7ÓGø¹ ãüâÅá GŠGÎíWjgxK_ðŽùHOtÅMò=uâÐ'öYÐ*bÛ ò¯Ü©|bœâ«c‰r<ÑQúƒoVýy/º´w^ïUåšfM¶ë„ÇW@ 𨷑Å^õc&ù¶ßé Ós} }µ*Ò©ª=Q¶IoôóÙ¼“X‡Aøp;õ,Χð;LìTá”C ³&“÷p~yà¾ì¨í­A¸„䇭0Û‘{Qô.ÖË».~§D¬Ã‡óxþ¿>¨@ÅG%çɤ¥~ð¿ÕÏ_ÚÞ)Oà¯ÆjñÐ?¬5·‘¿;T­©¦aVù›+ž φØJRSã Û‹ùQ¦æ©õU;ú—ÜÒ6i)´qê@ç®Ã³Þ -œNvîÑ>üîUT&îV<µXC7ýŠ8#F‰hZîp­¸‹þ‰YÄ&8›MüëÝØÏlÒªò΋½°¸˜EXÛñhòmEòpáG9ôóÛ0'ÖL²}Øv?ìólòX~0-â;|üe|õDØÆÝd¢É0ñ£—¢è1õ°?©©@ÞBþU PÓ›è%à*r1;ü(Ìü¨+a\sim ;ê…Žýˆë-À¯±¼5nø¢“Á?°%ÖÔÄu`ËAðÃKO.(®JÝàwæ#ýwSƒdVþpC¾»†£²q‘…ê±ÔIäuV|Èj^dH?PÁ´h¡ìrý‹Ã_Å%3v!1Œ/ÊŒ7ûüˆæ:™ø£¡8‚­íŒõÃÒß"Þé³T•¬¯Ðù«‡ên1•Sê ›”ü8…w°Åâ&ÑˇÃ\E9¬ù‹ð–­YDVÞÙ5âÃxô/YöKý‡5p0;*% ×(¶ÜNŒTK¾sÊDþU~jòÒ¿¤&ÙRüVyªÖ‚ ¹eôs×ô¼¿Î°ñ‚•—‘“ø'!ÿ%pó¶÷;î ùWµÑ+ªš|V}#%ñGo,ïzÔ…¸ŽüÝLú‰ù»ÞêWGþÕ}1QUx;sjY‰¦Ó}=ÜÐ8ûÛ(Eø}5åÃè˜ò…ŸJ§}ø«àõëDê%‚ÔEåæ»¦Ó%rœ1Eާ¢Ââ¯R1UéjÍt2” ?ø®ñh §è!ü'9Ò™…k QZ%ºe!7¿j} œXuªÙárȬý~Œ%7¬“‡ã»Ñ«­yÔšHGO½%5¤›¸î|ø‘eeI~åI[N¥‘;?y¾ýE:/.'“AP[aÚ_ 4f•/šC”‡ìhB@/iõOìdþùIú—äÄŠôÄ[LOÿÝãèçžý|Y ÑÛ;z—l#þ¨OÆr|º®Ìpä_-dz¦œqN’µ÷÷¥Úý<.Ïg <ªîú £ˆ}“rmÉÍôôÂêfïi÷ J¥›¹”ÚôÁ^ÅVg•?°onè»èšáG%ˆ?Ó/¢âÝ·ê‚M[ÈïÊ* Ó¿Ä•}ú×ÂõÈ¿j‡¿RkJlœ”OXù,õç_±pg601“Ìêt²ÁŒ'Bÿ{¹ý#–Ál\žûUÊ™`ÏÎU%»íªÛxú«TG»ø†Æ0•úŒÌš‚ì…¢Ò½¢8ÁWˆŠbåO0ËdÜÅS;DýÇ‘—sªv¤Î²qÅ\ðc2ñÇæND(I÷m˜·ðWYÁ¹yr «>¡û&<‘d"…snJBu#ü•;(¿‹'UÓxJ—ú`Ydóе3lõ#˜ÍT#ÆBñ~@ä6‘:ÔdœÍg°b‚pM„쥔ÕNaé?àe,–(é›Pe<é*_ÊœŽ|6mäï>3S2Y<€îZÍ"F\úïº÷ÙÛ\ºqöUœû;Ãü(«g[¢Þ|ò–8Aý‡Ýž”,³ÁôãŠv˜öcÄÒ^ KŸjŽœd76±¯àÇ0¢ÖÝz'~|#w2‰zñÞôùF]ò¯WŒ(f3®}£9Ê>ÊînÏAOÆùô/)DíPêîßoŸ¤ÇSÞ¾är¿¢ŸWV&+'“W骸ú„x%ÂøÔ®¨êwµ)Ó,²h÷=¼w£ŸS›«IÕêÊ÷ÖÞ³Õ'ÿª06®°¾Ú>­’ê­¼§?j{µRäïŽsî:Œ9þú¬–ŽûíÆ¯ƒèçÑNðT%?<è!s}ÌM _ýùFeµ’{?ë2™7ð:ùõ©Më ~ì‚«]Œµ­¯éâ‰ôáØc]æa=‹ø—Wx¶b“N`£ŸcçkÖšòÞz"Þõ}Äaן÷&þÐPJ:%är¢áFämM@ãŽFüq«ÿ€j§>_çšv5ŒVÔÆáSö?¬©VÁLolDrFbõ,FÌŸý®á—Õk¨žH%¢ ýŽ|·uG?¿Ì 5°Ä³AŠ—ú*™ôù;[^áNÃfyqÝ£ù¹Sè_~x£”áô£Ëu ¡¿Cÿðæû­y£õ”¢"ø±‘è£þ²•µÌ*DÎ@ñPçG=¶=¢~pQ_7,Fr¸vrj;‰?¼©÷˜…åLB–ñKb„­|ž¬Ý[\ókÐKcþù"eUˆK. ~ôg…ÂxدШcÊ5|w3¬tVø¥=F64ÐDt¡­cÄÄcî¾Ô‚¿Z‹LEýàÄ_ð£ý¯zÁ_Ò§QÅÒÀø—2"÷äêÏKR‘]þÊŽÚ­g`ÄŠ’õ”ø£‹LDÆzÈùµãÔWìïx9U§0úŒfÔÅÞ§'þ˜ˆ]^Bm·=7îâùCcéNü1kùˆ~™ç4±67Ø]+2£¡øaë“U ¥d†±Ý˜HýàãñG.ft\ÚúHo#™ŸÌ³™(ÓƒÀ™2Ä=d¢ ýó(¦: Å“ø» ÏÃ#½uú@ÉŸôⲡS¢s{{µÁá£ÓÇTo+>±—àîM.5` RR;Œþñwl™~žÔ‰l€·:FÖóZt„—Ì{úÆtöT°F/ÙmA³¦ñÞÈUý¼‘œ¡w‚éç§µÜx¡‰“Êgâª^ÏxC„µ>í,SOŽ‚H{É6‹noI>pBfJÍ—í™_{€è6Œ K5ìáÄCm£€uîÃ{Q€§t°‘•ž‰ÇŒ[Ä.)‰?˜+boËŒ’xÄ;`Ê*£)tèzÅn£Ÿ×Ï¿éc´“!žÁÿ‹O )#We~Feø(Ê'ú_ýÁü7Íß¡Ÿ¯·5W‡«ÍTwú—hÔÏïÚªiãÈi+†f»D¼VKôUÞ‘¿û†~QÙ#ÜÓÜ9íôdÇ­fÍi"²¾CñТu'Ó‹Cb43ª²{#~wú‡É¤÷‡°|Ö,¥Ýغ”²½dÛ‹aD~¼ãCøµCt£I’p¬XE[þ1ßè.žü.G?9üþž7è'ŠÛeâÚ˜09> HØøÑGùIþn4b–XàÇŸàG*hF³³HX”ÓÄKo‰œ:pÝCP3iwÃØaIÍÛÛŸ8àºENo<ï3[ÈÙo‡Nz‚]å«V÷ù( qÅÉ ù|ÁÏð­§švn5ÕçMÙIENmœŸ?^aV+žÃ2Gãž ‘lÅOkˆn¿„ùçåBí5þªç@ndwoøÈ›ÜÈxùYåêËŠcXû&T½Ü‚iºƵ&£*òÐùæºö`{ªîKô$(C`N²peãѸòó™ø±Uv9Vñù»ñLr¢—ø™nLÌÍü¨õ®¥•P›‰ÑXŠºò 6w½\×Á¬ÕG ÉD²ÏÈlú39Êë‡ßéÿŸeí}h÷ÅÄhíÖ/ëݧßáxôóåTœÓƒ5…ÐQ¯ÉÃF+Ô…éÔ‹¿cý’à“±BØ»3ô ö¢bZê?Ž»ÓSÔO¢3O¯Jßò ’“ù[‹~#)éŸ8 ÿ~5 Q]³*™Wøús,¼'ÌÞiâ§-òzWâñ‡Õ¿=³|…oÑëœÚ”©àÇc¸œo\5ãé§Á^Ÿdg½Q¼s~¨ì£aÄ® Ÿ[¼¥»HéÜ_v%’Ê´zž×ïÔ»œáîu‘•ËàGô(äq„¹jŒî‹=M3VÛe,úG7,T9”ÁF6ûJ*Ù÷e£ê|·9žø£=LF’œÚž–,yg~øk§D ¸Md.Ö^†xfþ/>-« ¢ýŽl¬üÎÏþþjøþüa P"kÍ©fHªQ¬nëm èXZM¥–†¿ŠXwÈ»¶zäïæ¢·d:zImWSj%Ô.Êcm´8¥mÓ2ôÐ>ÏrÇÛ≷ÁWÍ ×Àœî¤Z4˜&¡ûæŸÇÒ\xþéŠ+‰?þ?Öï³»©‘ÓQ–*Go>~Ë;Þ ¿s1ýK‰ðäB—ÑæÌÀ>ß=vã¥îeíòmë“q™'­-ŒTS,©ÎÌÝÚ™õwm•Ž,‘¹ÎdèóÑÖªQo?‘èÅŽE9[ä‡òÐô致]»ÆŠ…4+s¸ ±Å-¼Õ¼D SˆܱxÃÈTª"OÀ~oA¿IÌ`Íte:ßmýÛau×¥×…ó* ’Ï'çàµ>I¦DWY„¯Œ³t…í`\]ðc:üUÞPû·¢kiM7ºÜö¼‡ëÁUÍ$¾J)‹ê1ñÇY^ÈêÈx—0ë¥HèýÛßÐ?ѪÂé«RÛq„SÛŒ¶ÕTk~DÃrûÃ1­!¢ÉHfÃ]0é&*vté µ6ø¥Ú*S?8œ³ÊË¿|@¬U.&¶i‚ŽâFÆî²÷_Ò‰÷ ñGJã<öS'æ9ŠM=DÖO~Ñ?ü¸Kü1Öj6œÔa01#XS”y°¾ò$ÌNÔ /úï¾ÀÆnð#?ûµêÏÛÉÈäãm"ë#èǨ_DoÔ°¨hÄïáºR£lg‚ÔO=õSÌØäöf šÊÔÉ߇‹±æ~¾w•ÜÇ“Ÿˆœ³ ë-9À_| ¨=(mr™±–õº#w© .`¦&'x3¹ÃPò±ëY2£põ½(ªÄW×ëõ¸‚WœßnÞ…ä_í!ÊŠl–2LìþDª?Z¡Ñ´¢ž.‘MSó˜0‹½%æ4£s†Ó‚äïN†©¾ ãmz¥ÏG?oB]Ð4Îì,Uˆ[á—"ÛcبIn¯GVÃ)2ÅòÒõМ†Þð–ä,½žh%þp^ïKú—ä OÊÒω?y^;6ªÂ'’µvƨm^6š¯À¶×T6¾D§HbŽ•ùÍnÆ>Ðæ6nUy:ñã«ÒB›þÑÿ«ø1ü«L&¹Bíú3£¾ý ÙÑÞ †­Š½ëå°AU¹&Ó›?Yé¦(ŽÕÉyZÈÖ ÷çõqYe=Ûÿ^=\–+î﯆ïÏO¶OÊW•IðZnÍבùý¼—Z‰þWU•·¶ˆEW·l韘ÆÝî—7©?/NÅy˜rR[@„3NuÍs ÏþŽi)±)°}±"óÄWæ¦Ñbbq>ˆÕbƒ#¢káë_²L–|Øû…xa£°§[õx²&YÀñW@aàÇ8òw›‹ØAzŠþ~•Ðsè•ô†§`+QÆ,ª•-kÇö}× ÞŸ–L„j…½ý)>9ïÔïÖkeê‘ñðcã‡[ý«ŒÅÖ©Ä#gaqÞèÓPÜ:òìe?·±bm<Ñ›+½‰ÂQ|›yà“ÃêÕG%¸ v,æ–ƒµõb‹#ö mm}ÕØàÇ:öT¬-O5Æ퉾Žé™úbl]\üÍp\›x+*ëOD«Ê¦% e—£•~Z-¢€r+vúç6»¹w9Š}Ô—©Àn" ÈßÄr¬f=bžÒ°v¿îî퉺¯@'gs™kiåâ™ÕðEãàê¦D¡ámx, “Üä;Ö<„·$ÉGÿÝñGµ¾èÃÕY]r/‚ñÑ?^êUЪ;â´0å…ÀÔž'¢ù¡—$w%ñM™Oôù¥~°(󣺲^bt GsÓÊ;“yÀŠGôrê@~S/þDŸ(EÛíä§Jî u+ebìµÊ¹`g8 ý|øñü]?zoÅcgÅŒé† v y±«QZ˜åÉçªåǽÎ:u†y³å&°85/AOq½(ÆÎŸƒ5Qø‹­¤ÊX£õç~T#–?–‘“j3Ó{¸QÂ"ŸaØgЮù»®ìwôuÄjÖ”®¼ä_Ý%þ¨GÍ~sâÄô¤ÝJßö¾TL®ÂþfÒSJ”ŸÓœËPô(èÑaãf‰ÏÎíÍVjkGÈV¨Õgo*üÕLpû!ˆèMäöÎ|°ž ü~Mg§Fp3×Qºï³~y"žÔÒq¾¹®{ñÖöSÝ%æõYÓ>²‚ÇÁÌ?ñZÇ¢%L•¾`ùzø«}X :dänmãgêØÌøÚ|eŽk)ÇGµÕ®b¨>F/„ q å Š\ ²ýí÷ Ö¼Ò“ÔŸ?…×OÄ4ÔçûÆX ä_õû%³ù¶9ç ‚/»¸ ³úsOôϹ±R­©¢#—žX‹ABd8m!÷«!úGvôóàóÏ'«Ä3Ç9ûA(ðP ¾ÊüàÇw=9uÞÝÉß­o6¡­•\¥.ÞG;yh1QìZý+Ù,A/y·(ÌAÕ¦tX)BµŒIçSŒ¦r¸q~ZyP‚g2Ïš§žÑÌAÎÀ<žŸ!àq2Ю»"¶s½ž21¼A=ê+qfý¨ú«FŸ/jû ÷ä¤I:v:üÝ®ÆL²->µô%ªº¤—s>…¯˜O2[$æùíÁ;ÑRŸHŽÕtâ«°h7饸ެFÿöktqïDÕi:ôó«ôHþ1ý¼$ËÞîéÿŠþQý£óÎ¥ ÷2|^xÐgç¯Ø•ØLœLtpY±²vÛšRÿQKM®ÖF?¿ðë?ù‡¯Ü¶U¦ÿU^<§$ðW¾jVú'ZóŠËäïÐæF?Öi‰AöÄäàÌ"i¶ø!žÀŠFÆ2¾$ú؃þ‘R+î<‡ؘmŸ²›€^å`8öëV¾OúŒOÃÆßÃWïŠý_/Ú‹TAbò߯XV›¡ÝãðêÏÃÆlÂÛº„?} V¬®üD5È>‹‹"‡w3SÍ¿…¹ÃÞÊa‡ïj£G†±ž ~Ô¤ëW<ƘhÉ7©L$Ó ë<üئ~žSþ†uXœRI"¤)0Eée Øf/vhu·;ÀW·ƒ.ÃÁªâXy–Á¯úú¹^Ìã.4"^©~Xgö†úóL0Y«-['ïÁœº)4AåïJü%”ëE×ëF`×Îl™0Wø±3=õ…ÉßÝ…­-+Ê'Xµ+úzbžLܧ,úiç›ëÚŸ/ñÇZ1 Üî›|¤ãüìDZ°s£É’‰â{ }:k¦‘o‰ÊþM,‚ù»›]K9>*ÁüóäWäD ¸‰EúàëׯËOFÿ’íØ§+äï>#¯(6¯:œ}~ÔšùXÀøè“4×ôÕ¿.¦^}¹ 9ài¾yœ…Ï?.³“¿{ø£Ó5š/|…_*NL²œ=P“÷ƒÍe<ˆʦ`ghéç=ðTlh3çÈÔËÈwæ0¼ŒztÇ4Ã9Øæ:fziçnpйð¶,“{9—!êÏÿDÿÈÀózÅg!çwˆ<ÝeÄ•ä ã:õy©ò›DMÃ>aææšgÂvãJÒÒ-¸ ñ‡‹¿ÊÁüÁ…Äe9•Bò™níAÅmtiyO¶ÚmâŽXçÄuÈrÆÌ§æ²«û’Kö…x/:ÑÔDášàØS)Ïü(78¯úRð£(g8 žé ñÁDô”èç¯ÈæJŽ2ˆZSÒ´ªƒ]8ã&r¬Þ…þª.þêù»¹ÈÅèJÌ›Šêšcz+ºf•¤â¼•¹’ì€QÔKFB«¸³ßVÚ\ {Óÿj™_>…—íKü¶ õçà[¯®úG}²‘ǾÄ\ƒâ“¼Èc_mæ³W#þÈkož¤¦Òä:¨›ÀzRd#Š_ÍÛ>YÛâü¿ø´ ŒU#ç“•úóð©È¿îMU计µ þ°æ–gÍ ä_ÕU««&úG@çúÚþ@S*‚·˜” äݪ§VH¢Ä ‡©—( `ÿ’ÛZ6¬f,–9¬8ŽiÃ;æJ ø‹¥â¤˜ iácî|”íJ!± ŽjëOüÚ ÒšÒ>Lù´;zÅL*Lú2ÿ<<ù»uÈ¿ äßZó£ÁíÜÇ^Oc~î¼ë=`€AT³C+^:ïÔ¯çÿ×WÚ(±éÿ> ñÇ|,uIÔÓñ<ã*¬þQ,Þ ””®¬ge£¢ÓÌïVúëë lR#*ù³·"ìb‘RV<³¡¼YUب·^k%'Ò™úŽ{êªJ/ôsέ1ÚÆVÔ"œÔ òû¢ñâ]-Äfç9‰Õ¼Mµá°–2¿6ƒö=”å¦+“´V`×'a¾½?¼¡Uÿñ tk­g%Å}l]KNñ1qáþÚº;?3U“¿.÷Å@ýàL]!úèFþ© õ@všühJf¨/<Õ4X™Ý¨ uàGüXs?Ö2!1bmµ²&Ä’ Ô†b8>FløYò«"Ë™øuÈ¿J‡}ïñ.uèÏ™_Ÿì¦F¨ó•ÉìšG-y¾æÊ>ýká²êUø°!ðœâ”R…š—:Šò:YQ?z“Åz“.VÖŒYËÞOÇŠ°ûO¢(úyðJŸ êkщ+øLÿÄ“ä~%’oa¾¼z\cªéo_æ¥ ±L‡þQ›ŽÄu‰¥üˆ¿vãïÆÔ¼ƒ=9'Diü•Wx-ˆP*qNsÐ?†Åà¯nÓOËý|Þù[ÙnÈ“˜k ÊK;¾/…±–óI)ìÎõ<”¨ê~½ÏGü~ÔA3ªŽ5NH~Óv¸µnôP\KŒ´‘“4¬>é\ó0ÎÏN6W ¼ÒT±ÏyGú0ÿã zÑgââ…ÂÖd-ÃË<¦-4rÓñê ZÅg3½>ýF®Íd#×…¼È¿ª*—êÕéfPݹ¿kÊQ- y¡ÕÉ$ñ½Å}ñG1sû:H-çp:ñö®è Ä3Vw€‰rõƒsô$òOU?²2¶ë…œOá;ú—ô©ñùº#WEÿØa_…Vt…Q/¶tb̃v~’þŽ­yjÊØ‹òS²QéÕ‹:åÌ<×ÈŽé®…œ¡ì<€ÿáeȾêä<™Lh!™ŸEìÇ2´HN÷voðã€R˜U–ØZ«MAxäïÚ\ñdxÖõµµÔ&‰bà‡;Õ;ÕLZ|ôs8ᎶS˧yGP?®å… I‰%œNÓ!ôýx%VÏ™—bø1K$gÿ«µÔ–¡^|&H4 æÿ$üU!|eo¼×+øÒƒÐÁ–ê‹èxà)b„ã,«‚‡Oˆ]>ÃìåÍ´a“§Âƒ)¼ùD!»y®âÃ¥œFÕxæz]”ôdk™ì!',Â*öUü S•ô¼Ðy¨îDNÌBÕÏ…9°¾¶ ¡1ÑÁ+P¢,ù#AºbDõƒ©f(ZñLYN¼°‰¿›¨§¡‰å;„ö_,¥«š 3ôèÄjØÁþÝ}%ø1~¨#Y²÷ÙëeÖê̽G´@Ò¾„²\_e¢VÄ 5‹÷ç>Ñü8ö© …GË-nâgVÃ._ãd¯5"ò¬Š‡wÂù準ý@ü±¯à§Þ»Vë{Öa¦ã:; Ì>À{]D-ǼúØR›ô‡¹|ŠUJ)#Ã_mr-åø¨ý­ª}ügz"v§®~3÷²:úD ÞýóX½›ðX·è•-Ù—Z¬nÕŸ'”¹ÄtíNˆõʨ·DÖK‹ý”8à Y{`œ¾ƒW‰?ŠÀ_µ4o[µØØ}xÎù°ãèj5HŠŒèG‚Ý•ñàGwž…·Ìö»†þ—L­ªÌ›ý†~>Û¼’š¼êøáúGeú¬X=%»ÀjÆ ¹‚»“Xl½­"ñÇ[µ‘EnbšÝT¹L6ŠÓ¯ý>ñG6²¤-˜Ìt‡¿zBýéÙ E%‡±”O.¢:×˯üTÖacs£XäçJßrOwP,¾3?ÄR¸G}4¦^ïóþ¾'¶;Ób 2¼>ó¬Ž.5`„Rý#©´:í’É‰Ø n75ò¡”?RÙ_£d´·C¡¿ÅIÖAã ¦vàlÉézCòw›;÷÷œùQnp¡ía®2˨fmŒgìb©CÏû‹^UcÌ›àÓ30 ˆ9þ»½Œéd+X]¢{R£¿S¯é| ß2ÿ£»ˆG׎¨¦²>•ùçóØÙ r•OÙ™dØÄÞ€,ÞöFàG:ðcŸ‘† ð÷¼Ã'D~0gñÇ8m[ˆgæÿâÓ"LŒråïºÑÍÝÃyNûùªòRùLýÇú—ø*åXeùWÝÔªÔŸ×!þˆXwÈë¶Z/j+s’=4…þW´ŒªóG‹ÛÚZêgE¿:¢•&‹Èšµ²”5×1?Ê_ɬÅÄB%À‰4W·ºre¥â.öcé×:4sD£µ°…ýÅDx?}8Öy<&Dö 1ùïW,Gýà32G yüÀ^Oç±Ë¶ÔD“'x®¢³¦Õ¿$V˜õçÝ”H°Wqˆ0<ðAwÁ•„±'Ý÷; `ß­±Dcx.„‰E´ØÞxâoÁ‰pvV¯œd¥xó«^úPo¿[Ø4ü«óí+´ëýfªfæê–ÁsYý¯ª’u0¸à¹¾BÁòóV“§t kTÈ›6…Øb¤¨jÿ«äïÖ€AHB4»ÿ _`w÷6}žü8µoƒÍ¾ Çvè©.úT•ç›ëÚåkú—lk@£áü_Ýöww;|Q_‘µXNåøh°–Í]þdÅËü¬t°%è2þ¨¡6Cx¯‹ ™¼B‘O –…“yB‡Øt6Êb¾‚¿ò?’°Î1Aº[¨Ô”Ëjb°æªžþk%ÔSäÛN$ÿjf/ÉÛüä}hÏÑGò¶Ð¯·™©¢WÔ„sÚAeEq¼ìÌS"ðmTv{¯«oà×,ý¼7øV½'*yºSŒ¤Ìãð‚ÇŸNoOú_é G%ã3˜à º_"~Ú.·p§323Ëuz6Ûrákeq°U`û²Ó¬£Ê~‚ÑVŽ¡b36´ ýÖ¯PíÒƒÙ'žÔ­,„mêOþ®Çø+W¯ŸÜÊwe>'W>Ì¥àøÑ›ºóÞD©`uö[UÈÀÚC úY,}Np@R3 lMns2îÉáê×:V)MýGNêBîóŒåÓ3¡º´@›~B¤±“ú3©ý%ùW©°Ï6ð£5\“»éŽÕ¸³xÙQ4uœ×{AÙ©eÂ/ë‡ïTFÚxF{/àÂfÒ÷6¼ÒT¢“â…?o¥˜?8×oì ×ã¾X7PÇGÏã| •Vصx¼ãy>ëê}ˆ1f£ùÂ}ùÒ‹w¹YƒùôW鞤°7E;+ÉüÄÏø¯EUv²Žª§ÿÊü¨çœ'“Jé¢dq~ôùûc©|V¾¨ ´qZm¿£~p;óÏ[‘•˜þWŸl›ÿqÉÖ€ž”eÈGȤÔZVu˜’ýüý¯Šjc#Ø¿ý…VüHûè~ ñõeJ6¼ˆôúØÃüóQÔŸ»2Ðÿéj)ë”Êâ OÍR '°v™äXĦbLÎlØP¼êe¢¥H#BãíC®Ýýü³X ^\Ç‹_sÛjÍ*h‰?¸=ˆ0œµÍp̨xP§žö'›,'­J‹Šä LEˆïr’héO+²&À¹ÔN…q·ÿÐcÍ{`É?€¹ˆfcï3añ¼Ñ•kÑ<åk[`svp²Sà6é‡üZlÕJØòùðRõ@ˆ‚ Ørëºð3“9uˆÆ‘°A×8‰ÎàæÎw2ýK”Pv9RªU'vIˆ=›§ö^y9q_À¦zIø«gð-íˆ?n°âSr£k¡T"þ­û'Ûu“XO>•Å«„û; ¶ nr ZOgbƒ(ðE·ñ—Ùл_Á‰}ÔóâuÖv(³ƒ_ª­šÚZŒEÿ¨I´ðf%¶\Ïꡟ»ƒÖÔ¼'ød[ª5¬ên…³¼Ž^󀪇Æbá/üUqõ|Ø\æQYŠÁ yÁáEç“SltÅRM¦‡â=ì{=*Jö°ëb\½Õ¿d„LO¸:„~>^<§{yê&Áq•ßL£1ó:Ò’Ó5ÿ~#šw/澦GJatþQD³}@Q…Øf?˜ï®Ï_Y$òr*ŸÀÔú0lùøÎ5DYc j/a„¦Ð$§¹Û¦VþýÈ|%}œˆƒÇÔ‘l¡²úr£Š} õ/Y뫑ľÔlc/bWìyì Éj¯Å®¢tPûõ}èçµÑÅ$õçÿFÿ’üJ úGzº¹‡¯ ûïkwýùþW?è¿;Ÿúó'JYN{ýK¼a°’Ò¿$¢ùW—lžZ‘5µÜR+®•¢â°áåñëž±êqSßi¨L%_µ¾j!ñÇ'®V³7 ÿn:¢£¥ô¿`,‡eeÞ<ÏuX¹‚ΧÐÊ¿$ÒbŸ¼ðéèéc\C??Ê•ªäo•¦þ£“½ˆ” L:iä¶ä÷"d±}Ç«¼#2QÏÁ×…xfþ/>-Lÿ]²æ¢ÿ•+;b?_R5ªk­´š];¦â´·PoÜ™þ»ñ©?k;¡åN£ CÿÈIÎþqŠþ%™@Œ¸ôY?‹½ÍÉ4ôÎûž…é8Ðþjv./ñ¨©OVêkTkÄ`‚í)ð#Žæz‚ÿiÅcLâ)'.áů„!ß {“\–Á¯­$ð ±g㹫KñÚ“¿ûõŸúÏßµ£û˜“Ÿ¼Í>xòVŸÛ9¬£Swˆxo=ÏÖ!t‹a^ó %78c'ÎÊÈ¿”g¼1ñÇtŒL Yþ*§x‡'\µÂêÐõô«’6F÷|á|s]ûÓ”ê ±<Èi(è©?ÄÝÝH¦òXâ/ ô-ò9ù8+d,ÔÐã:w©8ç¤;¤þÑVí(áGT”wðÙÛa —á!Ô¦#¼Ûéê}…>Š/dSÔŠ'XæŸhëWA„;(/…Äx-d·êºêG1ŠóðÄNºa#¯Â“à—^Ë;ÔŸEó®Oýy –6.1B74½ðM‰Ð?âÂ`N ŒS%Öê$¹ É +…íÿ.+3ŒèÔÇ"Sj5j|;âGTîÕ?&Ïôf6c+ñÞ.ý{ýq¿ÈÉ7‰Éº™›xm)üÕ0£5yXwÌqĹˆžÂÕõ†¿Ê .­$úèEDWý¼­Œ#7#üÕ!|ô¢<ÿ¥xÞ‘ׄ¾»ƒ‰Ù¢3ŸéñGòÖ£Ó¬¦~Г8ä:5£á¯Ò{Eå^Mœëõ¢SêPã ¹#Û¨ÿÈK ×üðqW•À‘dö@ºs¥·W¢â+t¤â¨Ó±á¯:Rÿá%ã –Gü×ß”}°áUñEˆo‹ ôoÿAÃ"zʯ2©¿,n õÜ,‡~ž…ým‘ÍîÆ<¬üX.z!0É¥Ÿ?W:$Ä«ÌZLŸg³Ï¤SâY*eìt•ßhcþ`\{ûD2زéø£å5oñýWѶjÂ/ÄÞZHõïýþ/ÿ,¡ôä¡þü¿Õ?¾ÚÞ+jcôótÿÑ?Ö“¿ÛYmBÿÄzôo(EÇ]rÓ²e:W< ÿ*3øñ”<…;ôû(  ‹ þqœú/b°ÿ¥Ð* ý’RT‹ã‘\ßIþ®·ˆÎü«½t2Í$V#ÅßÝ‹­‹DüQœs¿¿‡ÕÉG~JæU{uLò%£u‰î‡Ž^ ýÜ&O€v¼ñ½¨a÷ߨ˜äùÚÑÒÀü¯&r¨¬§‡÷°*K‚§ˆo–ƒèÿ(L&Ò­0vXN[èÈlš‚}&æ߆€s™ñÌFb›+ÈÓüí1üôÍ ËR0)ýküfÍhJ35'´Œ˜¨>ˆTü˜ÊŠú82&ë›ðõy‡¬Ò3¬Ø‰]zqƒDn-n(+SÆhµÈ¾JÍ ÍI¸Æ¿õΜ™ï"/ñÇ©ž¼ƒþ„Ÿú±l9f¿Pðã­í¾zþ*¹Vãæûð56‘õÙühãaU©¼C‘Þ@RVùût{”†Êí2ä_qƒ[¨MÑ?&a¯a™Ç oÙòq.#£±™üžFR‡~î†OÞ =¾33¶ãáç—EÄ0ínˆõê©É—šˆçº åÑQjyü°úïî¥2Û_¼<ó?¦uX9H­©žØŒ÷œØ,££ñý©÷ÆÓ¿¤#<ÔOfk<"ö‰‡Ò^‡ø#ÑÍ(ìý¼ð6ؼçàGqã1¶9øq‚(eȺYO¨ vOVˆÌÔŸû‘åQ—ȃk™o¥{]ú`]ÀÞçGØw‹yè éßþ‘'—ùÊÜÆz2ER Wå\ðW ±òEä3®÷(Q^Kðãµ#þHi|0ö€oMA·ÍôPôÁƦ‡i;Íã.%">2ål†‹Í¢”ÒŽIÚØß2˜ÒB<;Éß}L†ÙH£(ÈË~Ý<Íü¨&àÇY2—[#`¸Y¶æl:Êyô–h#\]fÑ?±(c{žŒò½ðÕûäFÿ˜J?à«Ts¦µ?âš_£¯øÁ^Ŧû0Ö\‹ßõ„÷§'QË õ”.Ú(‘„ç½ïd=â²ôßÝÏüø|ÔàøÃ&Ž¢þ#¦]³·¥{R{2–³2a÷ ßYÉÖÃ.,ÿWú'S†©ô ÷¿Õ?>Rþü˜ª%Ç*YšÊ[[êÏ›ªIÔjðW‹?nØšPë‘—ìSq–ùQ1ÔNðW£Åsm‹ÆTUul°ç7Äëö˧÷௼ÈXm­/¦'JY?Bý‡Õ™öØ-v0×0c¸ûïú(yÅVÖÙ†¬EÒ•ô–ðWû±¦Cù9£éùØK¤ÑñǖÚbí…˜‚/ãGô¿Eø4Vð#v°9£‘ä)0@…:KþÕÏ0×k¢Ä N=6:¥¬-7Âù×#†›oeo'ÖÌÕÇØä¦ØíñœÃÉ0õóJÚb|ÊvX®gD@%xRÇq$Å¢ZuuµPTƒlkñî­é§§f.pÛßì2ÀÖQ͆ÍZÂi5!ªó¶ŒcÕwú(Þêñp ­±³áﱞ¥ “æ®ÜNפôתàÓ'“ÛÀëàGWðc×YPÖ¡þ<7ù»»8K?¿Å›¾̲z]—ÑŸ†‚¯™¾C¬Õ£ÃªLĦnœèaX4š,¡æx¬‘`Øðþ-ý<üÚßù’ <G?É_U¦ÿÕ®®QÅ{ð#®ÜäÐϱÏnÔ2¸aY¬þ‰Õaôïsš*ÑáeGǪ,Ì\¤…ÌV,£^¦S¹†é¬<ÏýÝ&=Ñ:nËËàG*"J€pQ¬¸–ø£ ñÇ-ôjOˆ¸w+—ƒÝ•ê[ò¹6qn£Ð÷«ÀŸðWt£%ºí[ŽMd¶ B¥\‰z|vðã”cþàAü¤\!ò¯Æ’• ®é<õƒKÉÕÚOýù1ꃇàÃòáŸûRͰ>+ƒ™üØH;ˆz’štÔê*³é••Jä¥è¥äKðãïT+Ù˜þ‰ÝQ£K1_ã$¹Ua×N¡ðχÊÒÝ&[`¿âû¹StoœÊ¥¸v>ì)Õ=é 3mµQ‚úÁ Tyç¦[®f‡þ‘Ëüžh©‰Y |Ï+SÁÞ¢¶s*¾aoÑÙy~÷”]ZYØßVÔ#f”~DCÒ¿}'v×ødø0sö29ËŸÐWnD7·Êé Õ:žM«þ¼ þ×½„ó) PþЦ`‘¼¨P+Fl>×hÉÌÚL|ÏB£Ú·šÞÌLËü¨†ì·:ý¯ÞSCÅôÇc:ЬÌ{’X.úWæGU¤IkçÉxÀfes~æ¼áú@Q¾Ñ¿¤“6FK¥íUJ°ÊZæÍõP+¨Éø±#\«üýM¾¶šÚ4QÆÉ ý|·ZVK¢vTbŠ‘â"ó–ÜÐ?"6¿6PËÁýI‹]]G5nS‘X_AþnV,ŽÊ|ª½ÔÄÕÂÓ­Êf;¦ø(Ä ”“í`Å,rêϱˆbøñ ¯µ'¶p¦h&’‰Éÿ¾®_ÿì¢mÐÞ‹?ñ ý°Äsð¨¯ã‹§.®©|?} k/ÉÍØÇïaE 6['%‰Ô‰¸ÖÔ(ÇùFÖ”Þ³0aµ±ö‡a‹&ÀM ò*Gÿ’;aÜífÚf|÷vìë×ê s1‹÷9öi(¾}5´Ô0Q³Ð?Öë³Ùe\±þ·ùWÑÈß-’-‡šòÝÖlû¹pvúdŸ3Û~Hyõã õm‰:ñç0æ†Æ_ QæjµÙ[ ø«Á`Ðuâ¾IDßôÜÔs&åôŸbñ›  [hOù9µÉެ¿š~®;_à.ÄwxÅùa°Žaý÷Â"*ê Ïbƒ! ÀƯ$þÈÏv œ Ä“L/33 cqˆÛ€üÝqœry©@1ÕÀ€K ‡;úy:SÄ3ÞÉN¨égˆqTî–/þóY|w+þ8b½ºÔŸ÷åyË‹ÝMfÜ$æJKŽSNã 1Á *ëJÑ}©Y¬6ê5¢aC;c}}Ømrc 0˜óBÌÿ¯ZýÛò´MàçVß,å}¦ a< ðj¼ÞqfªÛ+µÑë‡ÉÒäì!¾ÙFD°^¦ç‹<ä¬ùÃuö¥ ²${›J½¯Ù[Vâ;æ9c/õƒÙ¨¯xC¯k¡?ý·'›Hüp^qårVoLµ&]ç{1ÕäY¾Ì½ÐéøÄèÁz}©ÏBÿ’ÔŸoÅ£™'“GȾú¦OëÍTrk/ð>ò ¯@ÿHÇ=Ùk”dzÏB–l.2wM¦GÝ#j¨NgÛÓÄrùÉ|ŠÉ3Ð|k(gë5EÏ õ•³Z¼þ o.¹Bøè3˜ötÔ3Ž¢ItòvcÚ×PÇ^›~𠘵Hn2ûó‰?>𯺂Škõ¢Nü°©™•ßv&ÜH>}‘шþí>Lìµf+Fµï¡ÿnk»'³ß¢öÔd‰e5 R>þ‰…@é Ó0Í•1à¼ôÿùe”QJw§ q'7§ó³ˆýð綘ê;Õ‹üÝTÚY¥ «l¶y©ã¨ÿˆ‰þñ!‚õ÷lÕÁäÂà±'d×ÔìZ úïZùW÷ÑÏ‹xGhŸ¯4wìKjlû<‡n ý¥,æjÒORÿ±D¤'~ìBÿÈ$Na©6‹î£ZÁM6$K¶½XÆÇ¯Xq0²üH®ü«ŽÔ³<Årýàßž†qÎïó±‡:Þϸ±£XÒèü$&•èaæï¶WÒ‚‘¸Î”Žê¾†dð+ÎèÑøü$vþ žx Ø£œì!:íÿó]n¦-Áú6D¹}LžU ˜‹IDH1ñ˜½±£äþÖ‡øã J•Ó•JúmýyôÄˉ<¬žÓe@¹ìè›>D¦ã|ðó#aÏñÿâ+ž§N“þ%®^F®ÝŽUfjå8-w|9«îÏ—l”‘œœ&sR?˜…ê«N¢#vï"q/6¯.'Q“kxîzsË©Ês2d—¢ŸæÊJ€ ‡Áå°ÃÈ*nAÍžÄr¿€3ZÄg™`³îü ¿7£lˆþ±Ú¹Ò_4V» WxëåÈPµýé»ï®Ž~žüØ~!ô»°ÖÔJáóZó£6Á‰yëÈÊÈGü_ßEýÇò¯\þiµ“ä_—aV6›ìàI!q[Š©àGïø`ìè<–lA8Ý߯ØA[¥=ÇrÙäÞçE ÈIVý‚lCþWþn<ž­zŠpðWÝ•tä_Eçûsbþ䯂þ1üˆÌ[z  ‡5¬–7qt ý@˜øÑýã!qÀX<ø­Ø!pçW[üò¶Ä{ùì8¬ÛV^¾ëAý¹+#øUGW«õÀ… G¢™ŠðI³QO¾è#è1ýܪÿ¸"ã.urðWô¡ô/ù|!ÇgS”YZk°' ;–¬«§¼McX;*Ö«™^ ýüö¸9>ÿcÐÃB¿ÜùÊÜ©Î7×µ¬Jì|\Ì×ãÀ‚Ì­©“¸bO8–ŽxÞw¨ÄÙ@uÞM¼ë?¨ÿä:ã½ç&3·œ6C ]·$w+TvÔð {k'gÍ?OcäD?ÏH£ Æ{ò€â^T'–¥÷ÆZø’L²¬ðþ%þ¨L½†7ˆ–Ÿœ€xtÿ¸sr„øC7®Ë[Fº/ gŠÒKX¨*†06`ë­~Œ—øÞAÄnúœùW“ÁA`¾‚×îO¬’€ÊíúÆ4ôôŽùk©ÿ ƒ»áOÿöò(üSÐÏ»c£MÖ>¬¯Ñ#kÁû—îYÉÚõ'·¢3X“m­qšùƒ#™#u]  Ûnª-®Ð+™Ò°sÁ™þd´åÃâ7– ƒàGv奲 ½» þS!ü‰zsò ^CénX~è8¶¹úù>~ß ˜ã2¼âxò¯,n/÷d±pu”ñVrhW©‡zE„¿™J£rœó~¢™ëhú‹Ð¡¿š ™>xÅ1ÿ#€IæÍ‰?â˜ññ!z€©ÿ¨Nÿ’"N¼|«×êÍvcg™á¯üÑ?â‚=s髲Íx„þ‘Ñ~‹|êÜ‘â:Ëñæ`ð#:ú¹•¥›Œ˜&¿ó)ü¬t#þH‹ØÎñfl$þ˜@ÿ«S mT”~ðWuìÉ™_Û“©R왈Ãâ1Ûö OüqQš·yvb”æºb×sý¿þ¨ù»®úóÔŸgpžSÄ~ö[[4Õм´I¨Û·”¬²Þ6„ùµuÐÏÿP^ÚBNˆþçÕoÛZÑ¿¤xœô°Z”þ%óè;5SœÇ_/«MPGhŸ_´BT1$&¯u+F ðÃ[i¥A©@ g‰?ÜÙµO9¤ä‡ÉÚ Ï´Æ×·1î lüC|àøÃÛÈßÍ-~þóE:þ¶9ñÔ{±%ÓŸ,[+þ8 6ÝÓM¼Òº±§MÀƒaD:tj óš[‚„)\g<òWÖóg-øº9àG,âK?L´Û”ø£±òš0çvÖs…­¹R?¬†ÕÿjLQ,°h8‘}9l‰Õ“q¼9g(Š é¿ëêôüò#)ÔÂh+`ΚTA–– µÈV>ˆ¶ÉB$+ÿŠûÄλŠìZhç8€þ%Å9o;zîBP÷ñÊ "¡h°K=ôj¢ x¯Þmø:ÿ¶±6Ù%Ñüo®kµ¯çÅBôón°*P5ö€h+aFL?Þé[°vGè_RìÞï05Vì•9ñGÈùQ½É¿ÏY"ã78’ôá:+aÜŒt(±nä55¢£ÓMNó'JÉi°k+õçMˆ?nº¶æø¨…ˆ~>¼ZÇ\^#¾<Êüïd_2›•Éß­MþÕwê)¢ãÛw·³Ú;4:×=Q9ìÙ™®Z=qö‚¿Þè3Ñ?>£QO2"Ã_Í —ëO¸¡6f;²»*ÕÐXz€Ê}ГÞË…d¬Ó¿…¨¿:.2ðý¹›VýyQ¢®eÆIc€Cÿ¸–—^PûàìÊöxè™]ÃÀÛÄcËX9¾0ûËFþÕ>NΓˆ!|¦¯Þ‘sºE_àðþÏÉ߃MíGw+ßIÒ?±y Mc{“¨ñ:59s…ëŽ $Sÿxûšl½}2¿Îô&yŽ,eI%÷<êŸ/|$:Jg/õ,.~¤;k„¿Ð/¬5Ó¬Šè¿þ{«ÔªCæÈ)ßæ ì5ÈØíNÔ 9½Bö‡¨éšývìÉ•¯• Íq†ÏæGÞ»¶4Þ,0àÕŠôo_¨¤kÄCí –M[¨öŽÐ>Ÿké¹;Éá0VR+>^à}5æó?¡žŸ«Èß Oµ†Í¶\Ù¡¤ÛÁ‰m؇­øÏédìR51+ý;Ø lY‰âVP„æ7‡<†ºÚVíµ˜/óŒØJ¦éQþýþlO$¿µõƒ°Ð‘tß0¯¹®’´‰æè0ÿ‹ñuƒ3á¾áwáüˆÁhõ£7ÌfíL+¶ÑÀþ4€]ºã”uûÌDlÔ|«Žöðž=¯"þXˆ½­¬G+•j¿YS*MÔ°sSAŠØ bxs±Âoõ¥2%Hq…ÆN¶íiþ_ ò•ámš¨¦IhúÇpe,Ây®Ó‡7ù=ûëÉæÇ%’Ôí‘õ…¹,Ä%ðãH_þ%y¹†Î7×u/"+Ÿˆ?–¥õA*3Aâ0ÑÌø©þ ÚD”}¼_=“]fA‹=‹­< ÀÐ3Ó?q¹k)ÇGÐ?¬›9°âþœ–&¢ŸW–‘ÈÚÍ@ŽNj˜Žtx÷5©?CÜõeüùfîxUâݪ뫾b((žŽ?¤¹¢§‚KËDdpø£ö¹#¾ê[x¶<ÔHl‘M@Ñ-( ¯Ù}2Ô¹!êÏ;©D?ž†zV¨ie ”O7~èîÆrwg‘![ßìˆ/FüqGÖá[âß¿?w’ÝVëì.ï™@˜—ØúVxUˆ£‡á¯¼˜´q™Î´eá¯6S-~údf&ãyÒãá¯Ð¿d Ù|Y‚Ô–S^+»É|ÎÁzåÀ‡zYƒlÖîÔä3uçCa®ÚQãØ“þUqÌd0m¹×Ã8îî'OÔâ ó?£„ {ƒ’²•lfwNú¶ÑǼAMü ¢!_&úÑm=9õQû«š@xôÒé,™ð%é5¨là¼ÞWÔ¸ó^uÆãKŤª“úºÖ%·3õƒ‘AµTtË]Mý`]fG¹“»¼ühcXù»ÏлRGê£Wt>…~JK­ úGW< r°sŒëèç›ð2ÒãÄ$kw–½>чJUáY#½='úyôÏT$œ€÷ªkSÖ\ˆâaü~Z–‰µ®H4+jHøXœ_·ô–\ T{Sÿ‘üÝ’œöJ[3u¼ZEuS‹¿2£äÿ÷àU$Û×÷é®êê>Èà ¸»»wׂÜÝÝÝ]‚kpw Üww×÷×™Ë „0 ó}ÿ{™g& “Tª«»÷Ú{­-?¯ðýßÜpxÐÿ*+¹CnôB;Jü_KÿæRе"…˜§OsÝÏïîWŸ_æŽ×ǃ¯ÈY6º1ík;SÒÀãHzånÔ?ÂÆÜù¡Ä‘óa^ÂO¬ÆŠÀXƒ åT°ÄîÉß ¹^Ö•éeHy§ÁwXN¬Wá&״Ѱ;0Ú–ëÜH ¬J\µ ,ø*Û`ËÂ/B½æFš“:‘/’šC*È|ɨJבAðN¨UØ…µþ@þ“7–­9ÇÛCÿQTôÆÊØýÞ/cñK°?{þ`¬Òüò²°<ö¾©È7›ï&ü’¿RZ =H6ªz`ü‘fm-oáT¥8ÍíD41à+Îláí¬O ÌßÂu÷ÒÆ‰Š0]_9™‘Æ>ë¦Ï‡ÉJ;T¦–ð-öOr.oµÀRœFHúùKÇ=@Î%jë‚ï^ Ý5Ü…UxŠ]±ÅÝé.xÛ˜Iü±‡ƒ x¦¯ˆ·¡ [x”˜¥´(Øm­¨—ðN Ã"]§>Páµë ú'ø«”X†èàGbòšÊPñwû­Áþl†[@VHvþ)—¦´~Uv$rLBwô‹ ÌŸD>§Uò£NãK{’{Õýã-K2¢«Ì§v¨; P_°úÑámw‹?ºë/eož´ÇèÝGÈõM²_É\f¾0’ Ÿ¥ƒlC¼úº¨ÑÑϲJNÎa >ƒ/õç?êÁBê:'R“KË®¦˜ëé‡ÒžÙ×ÑfÒ1³âìËÕ?-1—=¿¶»:DÅø2îRÎïú·Ñ^i»è•›ØŽZ?<žÖd•Ý1éOºs›ü¦Žô/ñfBlòYí¯ÞÖ â!ä6D!¿ø+Ͼ¯<æº#cµ"âQÇK|¨]*7Oï.õ'}Ö÷Â|­¥›c$,ógë8õç¥èŸx³¬ÂªEÈGn‡>ãVý#ˆå©ÙÀäÎ<¹)•Å{ÑÛŒE,3ýüýàW1MäœÝuxµ‹Ì Ô©ÿXbõ7çÂ2]!FïɽÛj$wáÇ+ú_õ•Éa¶ZÂ×—2VÒÿj";;Fd¢ŸÊBê›;Ý©@^&pædâ{f:?Çz‡£ab!úÇd±ÞuÅÿ½O*ƒAžD,êÿmþî3GDý©ÞV Ù˜*Q›7ÞÏQFï¡aþG1âÿuQÇé5 üÈNÍÆ8yA/%’ëýµÌ??+üD1–n&¿³`€ÈÈÝqÇrN?jÐwYá±`ìßËUÌÿ˜(ÿ¹Ã´âò¯ÊYd«®‡Uš KÙ~C}9oø¶º=þþNÙ –< +–¤þãŠouüYÁwbUÑv ÞKí ¸·5T¾ u=oú·G¤ÓI=”Ѽ¼éž(ÕiðâàýfT°G/ŒÙœÂžÖœÆq3” ƒì`Ìö*ôƒÝàïž;ÿÊ ‹qË|{²ƒÓ˜M\“Pnú%¥k^zxv2 ¢6–¾ þí9¤±Xw lÓ0i WPü ×#ù»F»ìBýGQ¢€ðj9»{úvÇ^O É®ºÓG¾°Ž`­×Àz RMØ×Yu.óg° ó°öÉ@ëìü ÷é (&j+‚=Œžô¿šŒ‘ë@ äÊ­ÀsŒOfR&eÇ»¯Bÿ»ÿ­Ýy3þóZêIòÊ.?åï–ÔOɾœØŠmVÁ…øƒï`€Žše¨înÄD¥gháùù»ùØ{Xþóà^}žþW»˜zöý‡¢Çw§_ƒ¨íˆA¤RÇœm†£bdLþ"ºx4³j‘y•— 爠rbåwßÀŠõ)DïÖÛCþnõˆ§¡.Œ_2ª^&˜{ÍÁ¨÷=Í“h¥¬¸Øëµ&©ˆpCµ™DÛö-Ñ’J+ºÖK§}Ñ–S«_‹_¤¼cÔƒ[»jv²–ý®¹Ž|."š Èjò±¢£S@ÿh…‚.P“È!cþÇ9×åŽÑJ <×°œ'U5¢0¾‰¨\E~ÔdÆ>ã«Dä_}$Z*I¬Ã*‹&Ô“³i¨–­Á þí7µ‹¢êa;ÞöŒ*1OÖHºŒ%§ÂÐ *Inƒ5‹™¸¥Éç-J}Êfú—ô6ã<â팰ÕÈä—šú¹;ßE°´1Ç,ÀüÝÄoEÈýÝÃJåœÑà‡¯•JwêÎüó«Fã˜,I”¾EeÊÿ¤þ£š6Z RÒÍ›Áu]7 LŸ¼wÄ?ZÐÿ*­¸X“¸ÂшùQžzVæþnýàeG1ŽÜ´tô¿ê/¢Ÿg1>£‰\eþyV1Sö[û¼ÇàƒŽè‰ÝÏkT—äœÿıõǨÿˆ-lÍ&ô?~¼‰tØÆŸ]Ìý[‰µ‹­Z‚IUÁƒÄ ÓyæS“؃ø#$¿9øo¨ ¾“ð ï`[ýà_Nca¿ÀÈ4£KÆ'x™–ôï 6E2n‡ºÃzZ<¹˜D î¼ËÑÏ`5í´ïxƒŽáj)·Œ8© á'…²by1–+l"¾ÅšÚø1’)žÙ0üôä_]“fƒ!K±*- §ÜöËúAK«®Gcµ™°ˆõy늀`ÓAËÆ…Ó<ˆ¥Ö`fl¾i(\œiºÑWOƒ_w×úþh1Ëø®g \w2°¦€¸IÔPx´üòö®{¼Àޝq§jÍÚù|!ÍÚsÝ_.2œÔj´À©üñVÐ/¤v©ZÃqc¾º eϯMË>ïrÝ7@i©Á_Í ¶ÃFÌÿèÃYe£‡ú5üì·ÄY:Zþ'4ï¸ôOLdm%±§=%ûog_‘:ÈÑ?ñWMôkÄ Ñó—À!g7)a± ‘Çt_º4JpmâûàG ôXär(%§ÕWrc£ÓÃaæÿÞ¢–x^5öv†¸(†ÒQÞ $¦Oá`§ð8Ø[ðã&V´ lÎaºy-W{ñã¯v’¿›RÝä¤ë“¿–½­07›Ã௺ÓQj5îôË݈ú>Å;¥iÏÿè Óu†y%öüó2¨Gí#ü•Ïï ò•¯°¦QÐc&>éLvºanDOéZ.‡ZÂI:˜X¾’Êœþè=ñaÆfÕÈïâ®Z q¥â9ÑÖ•ƒ§wZ„ý=É™­g~Hdj»ßÀ_}EEz Úe7ã[‰¨´ñ£…šˆ¿9D–qß-æG•$/¥^KN¥Ãb675gjæ+n?"ƒká˜G5‘úó¼ý#Ó¿d¥5М Ûõë`ç¶ì¿=2©?/c±Þø‘І/3?ºieÇHgé~¿Úòv¶"B*EþÕ3©ÓîÝœ‹{~‰wx—,ŽO4“¼þÿýÜõc°ëdÒi#þuÿ’;Ž·Ú ½‡†u¿ȯ¦þ|Š^]OAþ®Ð~o~ÔEG6¸*»7qnc‘|­W%à¯>ˆ)ÒÁ¬ôßíäÚõ·ûðO/à1´C‹oIŽSø«†¯VP$À²æaÈe¹ú°e¬ÖiÉåzlËzðcµ ITlS9Ùv;8=`“lIÿĸaØciâw(·°F;ùç5«¬„…ù~Øpû)‰†Z±&ÏjþnKí#f`ÿD7²jÖ€#À¹pBáí g,ó;ôë–Xüð¦‡Å•PvHwy8¹® î#tr;ÿjž~\<DZhªUÕ!,ó~V<Œ´ˆïKÇüó_ÕŸ[š§ž´+Á›pruð¶Æ‚HOAt•XaØ]›L4þkÄ:{X«¾ÚZzíAÚjÐ=nLÿÄì%‘ÚL|õÏ·3ïóìÉÛa’%À3ؼ2ê>lç_Õæ^×A¾¸ÞÜ ÕÞÂ_m“¾p#è=˜™,Ú]Ħ~¨‰µ|°Ä/ŒEøèWèQUþê¿ù"w;ö¾²ðÕV-øYc½†ÌÕyà‰¿†Ñ‰JüŒç¯ÌìÈŠgžœþ%©‰¼@‘K ±=ò8qƒ?ÚJY9P¼ ¶^%ý6zÅ,Ï2mÏÁ¥AÓÏAþîm¸üòø÷m­jÖSâ†T”lÄ6çe¢Ò P¡«rÂÛî V>ùçݱ|áP £ß'$ÿª3ªtfwì½/Þpbì­–Y×|EA>h,×F|†…†»øÑ[&íž/—y†+ãYäi×0åd¸9–úÁ‡àQ)¦€/¥â>Ւއ%Í7°kýȸK×”Õ(J©¾‹?Òkµ†'™×_PŒÎáWu§Næ#ŠwD«,ý7¡Mw§wû®y-ñCzb¥` ´™ì8¼úlL–\'8@+,¶“yà@Ù£²Ðo(€®ÀY©ø¨iÙHÅ™{o×4²"=x+$²ÜÁÃnì¯,p ÔÌz®7厶Mƒ íVXÝ•›Œzæ[+>ˆ±üHãt옊>_…IO‰­ÔÖ&µÍêjn…©¸Í3݇¬ð%T`~ÛàÃÀü«ÌdSõ•rÄC?÷‡©+ÇSrþª ùWo­ZÎñT¥'"þ¸dæ§nþÓy™¹4L¬û¶àñcUm(5ƒß~atº™üÛúÁWޝàGò¯²‘Õc£õrGÅ@üÈBý ö›øqÇáE¬Q€l„ÆryU/!Jéãµ—b¶¼-Έ bñoæïÞ°Hö=B™c"nc¼VI¤ÂsÍdÜ¡ÿÕ,éÆúóíèÙäf0bÖj6ÄÖ?ÊYäx’»ØE›EÙEG”Lßi‚ßNøç5ÅR¡Ãª½å=9Œßý k7+ø•LÈWXýk°8Q°eÇÈË}äºS?¯ó÷ß´ÒÒнD+³ÂŠlÇWâ §Sëulz…ýn cÏ;ĹPV¬'|É4j—ó®(ûëƒ-N‚ERP‹q†`ÿµ³Æú9äš_ÖhZ3½(Vw>O|SΩ*; ¿AÿH„}?µÆ…¿Ú÷ß$^gt¥þ#\»ìGýy]N+1ŠÉ(|û[¼ÏƒÁ0< !Dƒ•ä+¬qKòXOò;oƒ|uÑνÐpžºÞÜ S|Ëü¨-Òry.´Ûè+áŸ:¡^T9>PŸòŽlªØ5»þã<¶òQ^|UQÌø©þÜ[¯#G¡æcÿÈúíMO D~5ɇJk&¡I <Ë‚æk¬} j":¹¥WÆ:0!¿ª…~\-ô Œ?¦©*w#ÿêÌÚ)j3¤yM1+2㮪÷;ú6`þàF”†1{ŽÕ?Ì9wF5¹âÕªL©Têõ3v¢ùœfµØT—\#þ·‹ø#2åV×ÍíDÿöNÎfˆwÃ7E'šœõ¤8€FÁ™‘îèwè^› ÷CT·•ì~}¨l¡¦ï?ê»þ»Ï´SÄUxÅ•§…ùù&«­SdÕŦq-ÿ޲4rz¢Ï_5çªáÌZr=Ásò1"à$z õîôOdNïo¿”Á̼f·šä={8«P#_ùµ~Ìÿ(…Ê’Ò,kb—¤=»nQwG¼›ëþ?)® ¤fðÛ/ˆ–„Í ÿöAß:¾Ù‰i¬ù`Õíü«ŽÚú½°žQ÷ÒLí÷ú_s”C™_›–c+ýÛ+Šrók—Ê׆lòoâÇ%Q˜|ÅôØâõØ­62ª1MË,ó&x€—å)ŒóÏ·¡D”ËXg6xoL4ðÃŽ?úaiŸØy;;™”˜RFulÐ9ÿÌ›ŽÅ/ädâ‚[`’ÏäQðã#_{ãGÙóµ;Q fí$a˜_ë£%Emÿ*›ÑÙ­ =¼y3‚ggykl&gÈ4Ÿ<p!å©<Ê Š…Ä]±ó/É+ˆ• FÆÁ.‡Ãª ËsŽÈc5ëî…ßêad“»©Ÿ¿wtÒ ·ËPƽȴ-~LcÅ—ÆHåÆ5ûðGgv¿Üý¼mA­•ô*+ ôvÙ‹þ»^0ÚùàãfpN×Áؾà‡":èf”‘žòJ­ñ­ÿâ݉êòûªÒõ÷fЛëºwõr9âüâüÔ úƒé«±ÒÝ@µêø1— ¿sðG°,uœ¾$PuÄXm•k¥¿?)GýÇ`îZYþ¿ñcÌdò_Ó›IÍ-äï^cŽÔ ²YÓ˜§Á¨¯d]…9rU•~ê¿[T¿C|;¯ÀîQ~V'5ZL¸ªS̯­RÛ›&/ÈïªKmÀVl}”Š+Ä*tƒÄóX©mùá Çê:ÞëQ¼‰è)…ÁØf[s¥™†ú>è éIècUŸ›u¨Ÿ¦Jq.gá¯Öƒðó 7Ñý‡õæ ¸ã]#·hù³wÕv,þXs"ó¡Æ{À -&;I3ûãù§%kÙžÿÑ õƃn]5Tj˵^Lú—,@?Ϧìü&î]SÕÜüÄ”,w«8q—Òkر‰=¤ž0™gaÿ†q%?>£ÏMþn~í”ΓF®À;6C¥GCÚ­öR¥ñì¦ è©œnίÔY¤t6 3öÌØpªÚs‚BC¸ßÝx¾š’UÓµ¿«šíz“IeïÏÀ×éGþUrž÷od`U ÖPæä¶'žP{¿B-²:˜ÓyºNóŽ 'jÝDÛ·Gæ¾ÖE ’‰‰>ÚÐ)¹Š@Çx˜µt­¦áÜay:›pÙÀ¦ ÷Š™úÁKX†²*ïñ ¼Ã~ÿ“ùƒ ´ñüóíJRhþuþ•C‹®Õ‡` ËŠ5‰«žº/õç…õÚZ¸ßÄcŽ ä_Ã[,`¬“ô2›øãØ$#3A*¿ØF5á·]‡åã)‘ ¡–s7Ü{KÏX¬•Éñ™K¯Á2ƒ(¦·it–;°{Ûa¿–áÛº«VXé"r™®Œ¥X½ôè‡þñGVl(6 ŸÅ|?ÑÑW¬ÝBÐãžÜ°é!ûNŠ%:ûæ•¿ê­%¤b”¸ X«]Ä!ÍAÈ©Xd'Y©‰pzA ìòhxÓm¡òWžb1Y5A ¨3ÅÙßD®15–~"^sUÞ‡+üý2v·/¨§‘þªÚ/®ÚIÿÄbàÇz|°Ú GI¸^ªÎ‰ ¦ªt|Ü…?Ïú ÉØ(â™Fgð#¤úóZoø«'è;ð ¾b m{=‹ëË‚þQCV”ÍÑ2®³»ûø‘•ûTÒxåzsƒžœO޳úV¹5e6 Vi4”Ã`æB#m Ê[L½‡û؆7z¯¾*1Ç[Ö¼²&FioÂüÁàù»Þº‡GX‹kןGTkÙY~°$ùQ‹éáq½Ái¶'Ûö4Š} b€{(§ÈIh(»ŠëA[ ü¬Ž~_ö…;ÌFJBòiOS7yXe7ßãÁàK—¥ê¹žõ™þ"Á?,Ÿ7øq“¯û“¿›ÅØ©ý˜©=KœÚ9Îm (SŽßï0ÛPžMÅAÿE.Q"/3]k€Q ñFz‘#{‹šÌC< Äèîò™½à˜ÚˆóË‚Ý=i¾b~ÔXâûä%U$Wv±µõ“;Žm|Óâ” t<ìϵ^ô?N®ùWÕUžª}¯z‚¹¨ÿX‹~Þ‹üÝõä œAÏ Üâj{;ƦQc' dPãqúGîÙcc•J›v›]$FðÄŸwZ1œéðîoaŸ1ðçØ„¨$-UˆmøN/µý|„ôvíïµvVÔ RÌ;ê¡ËÆŸXõ䯃Y*zL#§«'ýQ*£ÍÄC_¤|É…žfÄ#Jî n'àÍLäz ?“5šü«–¼­v·ºæQf~¬#S Œß=Ð7•³®ó¸U„JôÓfg5|ÚhëXë ,E¦‰MßÿIýyyº—tsL<ð#ë«`p(_¾uXús},²ÓU©«,gŠÎDò¯2êÕ5C ‘ÿórùÑ:ì(‘î±ä_Uu?ôs?ùþ*—ðýMýüÈ‹5ÊBníF2ï|dcªVE$ÄÚç5nË?û_eÓ•o„IÎ c-7À·/ÇÚÇQ>Øâ|Ò®ñ{ "M7æ¢t’dü0¬X‡ú'Òž`q¸‘ÎW‡`—>ól¶„e'Їó#à‡!þh£¹ãm<‰™È\ÝÀǺ°N³ˆ?t<Èã0ÞJ­ Ÿj~P~c¨õç ÄJltG®é81Èh¾N€ÇÜMµP Z±¯ÿ×¾ ‹ä!Wþ’¿Š¨µÑ‹ƒ·sð˜¼99[ÛšŠÿ’̦x ÅR¸‚˜XÆóœé6~gcx©%ô>-âüÚÚQ •(‘ÚO¤`©³är"úûJNL'âüò>i²@£ÜãkDüY üxízsƒžÁއôß]jD„½DæfVÀ•.7²àÉ·Pôù„þqÜk›…¯€I`òâ¨Fbº¶ h©ÀÏ,F¤rOEEÿHÈ;´CóûáYì ;x£سÝk¢÷„7[À«¥å':¢Wس¼[YeX¿Y þjûkF.Ù;r—öá!E –µ@&Ájß‘j¢Œåw£tO½š­ÉpBù¬]Xk üÈnãlý|èêAN/õ'Òݵ¿ÔðWëÁ¼ä&xÀ>^¢ÿ•lN/ª)ÒRU·|ë~¬ãN¢ƒ Îû6¸:”‹ËÂȨhß÷ßDüqˆ§âV`þnfNî2Ya­—°j+Í0BéÉ}le$þÇ.ÛXň‘2Oõ[P¹Ó€jà úWZ€(DÖS+<©LLÞlt„£«kÕŒ«,õˆÝÐ>ºÓß· |XxÐÍW­c~íZâ¢'øXv·Ã%T }{d®h™Ua÷ÆhK€õƒIé_r€I‹¯èar,ÿbvîAéÍüÁhÎbT”'¯ë1í5reñ£ü/êÏkÃ_u–L¢õþ×üÕ;G\ýýw‡0]öV ~¾ÌQMKÿ’¼z5Mý&~\#·;úya¬Ü:ùBÏ%òé³µ‡ô4¹-N‰Ìbîoæï>ù¸ßIÉZ=w[ED_NDâMHi\‘gä<ú·Û=WBÿ³ & “ÜOÌè‡}8@]DrÕ–§©|ÅAðc¹Ñ ÙFÇçøR†aÅjb6ób]Îm$Z?ón¤üod,tSôóæü¦èFhÙ¶G/-’¡ˆ?šá—ÓëÞ‹èq “Ã~lzv4ÁïΓºžJϾbºãÿu3¦À®­d¥|v ×›w¿o÷)b.¬ö>¢±ÙœpV¹ç—ù»_èg“ cwÂõägJN…ï““‚3Û‚N‹O°[»O¼]u²î Oˆõç͉?¼É6 ŽÜxBv%ËÙ~΄¬ KÉ3d5„9"ý»æ~Tƒ»çzsƒ®ý㑾üˆ{?ŸI¬¶ò¬¬¥_HoÖh õÙØDæÓµÖÎÖÏϰêEâdÄóÂÒðW½AÇ Â;˜I.ÜKÔ¨ÉÌÌDMQ”Š6D#‡Ac'hßvÕ’½ªÿ(«Ÿ•AތĉÐ?ÎsÝ»Uø¥‹êý¯jÐC°±õ‘(¢"½‘6²ãš¨ñ'Ð+€îDÛ{¸ÓCè‡b÷O”D ׉Lã*ýcø‘þj(ÝÿêÂã4¤—o3V¼M´YŽxÓÎß]N„8›ê…‘?¬·L&DzęԆÙL…Näo^ažH_úíÞg®µ³`›bÃie²òS59¤‚}.Dþnm•ä;ý#)üÕ6¦z¨Çœÿž¿&ª³ù]?žåÎG?úù¶ß–3CêýÛS³W;§y<Ø þÊT_© âËÇÐiûwê=ìò••{|TÍ4ûaç+¹Yq™Íô4I~˜Öiú_u%ÿª‘e20+òa‚¢êGô¿*…ÚOªˆÒxVûп½:úÇ2:´$³ÀÿEgþy‘Ç"™ù0òZ Ãeؘ4 ÜÛ̉td~íN-(Òÿq½ˆZ݃«\ILÔ$*ÍÙO?Þ“¿—øã0~º‰uº&mâNÕ"¢Xht—¹DPngЊíéŸX”78 ü•]5x”܈AìAÇ C»œ|È„px¡»Ôú=ádíùÕ`DCêßþÎqŸþ» Œøp*#@Ú\ ÒpN*6Ä®‰d ˜ÿ;Ä QTRª×¬iOUO©â©êÌÿ˜´±ÀÏêê­åPîóÈ©í µ _¿:zvóý°ä7©ëÖ°ÙI̳(IvÿÄ3äïî#þ(/‰€ŸÖ»½˜¿Åýª‘‚• À€]W7ÍÊxàm¨¦ûL½`4‘µì¹™ÆÇU³¥Šr¶V[óó3Tÿ*;À9¾¦7È2-Æ“Ì Ä]ðï—ÑŸ°søèQÙ¼J¶D1âÄO‹ÔA¼…ø¢Ýë-”qA;Ü݆TAæ!þØKþÕT³7Ê÷=êI Z áaö¶»Ê’w<¿/ñ\v§Î*ûw¾Vú—,‚Êw› Ÿç%5òÄ@Ô&µÒÓ_j Ùa}™Ò±ˆÿ^&“Íì®süÖÑðW¦¹\…¸j‚Üï:Á¾tÚ>ŽRu—gx™ÊEÎíbòw{RßW“y°轞†þ‰·È¿jGeÅ~jùë£O•DÙj ¦×P£é­ÝIÚŒÊß®k×D<‘x>ÉÕ'ù§QÉLͬA_P÷‘åøºήdt5$ã8‰•ÖÚ¢Æ[ýÀˆàGÞ&{ÊfPþî[­=Z¯ÓÔÞrÆA3·s¦eŸ_ðñ ZTvgUçm«¸³(ÓÅý5}ˆcYa&öÉ|°ÊËÑ?þ7øQü‡úóZw-›ëœ¾WØ>Þs¼Ö®ë}ĺãÞ ÔÏç:ªë£ÉßÍ¥kçö̾ë #©èIm~~¥­èÅé_2šøcók÷ˆ¤bÚoÎÿ°H)ñ¤/‚-©±;AWN3n`ÿÝiô¿*¦+ŸI&}2¹Kµ”û}h!¶j„-,Ëû½ [;”'d¡±üȦúÁrb³x.gq\Û¶ðñøó+mÇNåÏzñ4¶ÀK…ŽM4Azlx«Ø¼˰ÓõëO”e­#0ckðÿm”+dlB¹æ’b"ÜOc2ÍîãÛä ‡`ßSÃô²–P{øê(QÂ.,þ,t&yä—ú¹IÿÝ¤Ä ¾xnuX©2ÜáÈÀøcŒÊ’øa¡LöxÆb3ï†L±Ýÿ*·Â.[¡:–§ê2‰ÚÉ*OQ#ú¢@ÎÏ“©Ödm• ~0?¼˜ºIÌó [éXžÝxâòü‚É{ŽËú9¼¶UÝÊäþl?6¢µöÆïf."ø1þê ù³ÞØø·XÊ‹ H*ÿbÕOýwKêµÑ»Gùa‡³FLå²Už'0Ñ¿±2ˆ?^ª¦ÄÇÙåòN«é ^rå){üTñRF?-ín`ÈzÏuÃrù“ ¬Ñå<ý¯Š´&ÿJ¢ªÄGQðošß$Ìz*&ç¼SÛñÃŽÐ_ÉÄ‚ª‰“äѹÕ1}Éßhv€¿šMnl=²e#Á´{¢·ôÃûhMõËlïnžÓ¬ÁæŸ/‘I©º¼BlêCd®zy˜ú^jŒy…‰®E¨P™EM\B³oS›oÁ¡!¬º[e6Á2fúî]I¨=ÐFsiÀÜð’OÉD¬m^2Ûп$:Q=7ª Úù&rŒ÷’›9À¶Aô‰D†°ƒúÉò/×ÍL¥×2î€KQÚRö?bÙgi¸SÛýŽ(-úÇWs+LTcú#ç¶•-2µªÁôËë%k¹Îï!ñG.ì|---™^såæWby`ø¦$^I¤³ø”‡ù³ÑXoV`ýà|pã1Qrkbǜ෠^£ßæÐ¶äÿ•#_rœ¹‡ü]?˜:âÆr®c‡uû¬¼Îaär%t–ƒ¿Êõžçþ4üU&žúHª÷ÿDÿð ûª£ëdâQþoñCcjñsꇿ{5?¢Ÿ¡b½,ó£ü¿W˜>u?ìì«ÔÆlù”þ%éØþü¸*ŽŠtàG׮òàQð£&ñGgì•'5Í&³`+ˆ80EnF€<@}P,Q(L+.Óök)`:ð6ƒq:hÄPíá kÉÑèßoù»XÛ-²õçAšà¯÷X^,oùÙ·DûñÍß`éì)z_¨?ÿ‚.vë< ªãU¨;¬«E¦£pLx«ø¼+ˆ¹j’µ<[gãÇðã%v¾6×=j«¸ÊŠùÄ ð¬%ªù;¬iNìúH¬{2eÏ?o‰ook »A„müß hŠ™¨¬ú‹5#iõõ?ð]ƒ Íøîâx“ù¹—ÆP•&k;\ËðWGˆ?VqÅÍaÆÐ;;gˆõçÝ©?/2Ä?f]]¥.k÷ä#èÖƒ®'9äMôè&`ÁM[ü¾†à_%âÙƒ®77è®\w<Ð÷ˉÜËɸʰ…Xÿ%ð'#ØU[8£Æ|,ü9â/þ¯¦.€„áÕ2¹\LÓ‚¦¥þ½fUÝüN}ÀI4çðW»¸5à²b›ÑÌÝX­óÄ:úGlú—´£Ò§4u†“±WéTEú—Y¿¿×«©ß’Ý9çlÌÍÐȯºHäs€Úpþq…ʺrô‚ò±€åm}žk(‚š²¬i¥¢ãO¬£k[ÐÕ:£¨ÿè Xøþgø^7*Gj›sÌÈt ì̤‘àQê#2½Ö›ß1nv=¥ ñ¡ø«Õ2šÑ¼‰ºÄ9ñÛ7Ò±jœÙJ 1ß 'Æ–ÎÄ;ʧ³ ˜ȿꬺ°e7gs.Id"×þŠhϨ?ÏE%Ì#ºVÂ'k~~ˆþýüñѰc.Œzý¥òX‚œAÔŸGbÂax"é2È_®¢IFõ$Ú¡2‚¼[ÕPðã-ÊûF"Á8Î|t0¹mer6?¡z¦+¯QLT•¶dƒ{Á_Upíï½vPTàíiÊS•^…ƒƒ`†#ÿj{ZO/™µ GF´Š«è+èRÌZ¥æ[ãL[]»OÔ®z-Ü·ûCoBþ•;ïl[V­h,2‹9—¬ù£ ¥3üdâZÎ…÷TàªË‚wñåÀÑTà©Ä{¿-ø_üXŠŠó N ø*‹ëœ~oŸo¨ÿhÌü¨Ìô¿²ë?8êè õzz½ ñGðŽpÿ¼úMGi4¥ô G,c| çaþù0í:šú)±A¤ ~sþÇN‘ˆû˵®©%ú‡?øÁ\¼õýÌš ㊠õŸö¶†ú¾i.oQOX˜XêàGEÙOü6£Ï^Ù@¦ýNüõŠÕ¨?Äzoðf÷Ó<ÄzÚõƒŸÆàGDõ'ëEÂgY/šµw8j¥=ÁÖ¶$ƒÚÊõÖÆ?™ŠMŽ ÛtóV±2v{ö{}¨ñG~1’«:Ñm”îÄ.ÃØ_8œ!0ÃÕ@¤¬9\™É‰TcþàŽÀÞ5!]ï;ò¹Ý°ºÔ†á»­ Ì­ ç÷Ô­âØ9¼«áÀË¿8Ç Ü­òä3eVd¹ñ£)UW…Àxس1œÞ©@er>y©è_R…þígÈjDóÐó4»¯E$V’gà¸ëÍ Úå Çmôóàõ@±úÇ^ÒÿrñG;ê6î ÈJ=Žk÷oÿÀŠX7*u…åè_?*éeåN9'YRðñ•Z…²_,qÇÞD}Ú³v¹JÀ ¢…h¨Å°k‰?ª¿?ÊQÿÑDKLTñ”(å8üÕ.ê-:(þiÖ&S´6ÕÓïñû30ÿ|5‘\>â€ÃàG  ålm°ùç}É¿êÁSñÚèH–V ~ëUÝœkÆ:€E3èQèmµ3¢Oƒ¿jG®DªãÒãö¾S¢`úù&™š¾1v§˜r°Hyéѵ˜þã“Í&Ô žAÏ‹­^Iu÷=<ÿdtoºÉ)÷E÷9H½ûî{.™Ôew’hïµmFVyŠ~t‚'¯>ýÛ¯Ñqýøs$P?ïI´µ~èö9²O¹×ÙÛæ´¤¬j¡¼ëº¹Ã¨ÿØG$óšwk•ªÌ=Ù­FÙÓ¨`ªVÒGêø«çT£'uVE¯Ø V U$ýKZs]aC»ÈÞ2(;ó úyV"èvì,–ú*¯2Ð +j)9p~Øõ–ÙÈ9ÈzDÖÀSV*„~ÞÝj üèçñš§?ªë)|§5d.w"îGžùrÆb3½sÌÚirÃö¡—/$óª¤]†©è›éô[Ü  }.ë>ñö^zt”å­ü`t;]Wüßû¤kƒâ7­ù¿Ö?¾:îhÑÏû¢N< ÔÏ7:jT£ImâßëuŠüÝ–2 ¶/6ó?ë©ÀÚmxÂ?Å ‘@LÔ‡¸ž·°œÖaÏN† ™Š ÜN:è’WDäž}¢ÿ®Ÿ~„¿ZÆü§ zÌÄ–Î'þøCyÃ_5•}ˆnqO©¬/ÿɰǢàáM9 mo'¾øòœü‰?^â¶ÂJEÁB7<ùMÂ0?ª®vKF œnaå–Â^Õå G¢©D ÿÊŽ?î“ÝUϾ yY«Cí•JУﶻî.%_ÊžybóW­É¿j Oqœ•Â×ùak‡óìÇ‘þ÷>¤{òÑᥛì`18ãÃõT@˜ ò<#þÈÊ×k±z±Q†OóýØ_)pk(ñG>=„sì ~äi¢¨íDGŸ@’nÌág|ÂþFyØÃ½X§úؽ+¨ºÇÉ®B[Ibžú—¼wœ×—ɱĽñc‹“aµ›+‹­‰Ý€?ý•æUj³Q1Ã_]ã>ýi˜ê™QA,ù ?ÊëÕd{,EòJï±f ´¨WhÂoÀLæ.Tßýf¦a”¤ÉIî´±Üv°ipKPT=ý÷If¥bb´D`ÌM4ô ÉzŸ;À “fU,¨=ƒð: Yæ.eÏù@šMê3'ÿ㨶î‡3ì­?àyÝÉÓÖ¬ ÉÏ™Ì>ÄŒAÓˆZ’)VO4ùª GAæGWM9ÇFìî5ªÊ>ž ŒbÂëM•éȺºÁÝ­Fì“…zž¹ÁcÖ$sj/õˆ%è8ƒœÔSàIJòwOƒ½ÁÕ*üU}U@¦w­—R‹¤£Ž±Þg#ÚËÝ«©ªaM«Ã}T¨?Iý¹,QyºÔ& þÈHæÀøÔiÊ þHL6ÙpyÝõŽÖÊÃ_åV÷ˆd–©¼ ï*Õž™§éê8$dÅB?¿l% _Õ󵘕ÉêÊdzèÃÙ´@?o?¤Ÿh'E><³®¼ î* Ï#f,–ókŠ}Ž<§ï$VLÏüdônYˆ~ÞÛÜ„~~ŸŸMŒ¼Áˆå·ZÑKF!ÞîŽihŒ7Ó:'Óßæ/j]îs­’N/:¬$…›k†w–¤÷fæ¼ ÄD,»a»ÇŠ­®+þï}Rƪ¿ëÎ¥F?[¨Ÿwø•úÁ—̯DÿÝ'6d½£®>To¤§ÓëhŸ§þ‘ø›ÓŽœðW9Œø°6Ãä]=›H¯¢ng <ß“üÝûþÃRÿkñG |OOcVpˆt2K£´ˆÏúE®“[¨/Fý|•¶[‹$G`³æ?ÎÄ‚%PÕÈGm.ûb oð tâßÕÄÑed×ÉþzÅÉ¿º&‡ìçç—âÇ\ج—èïȶݭµ¨YÙ@^ÕËP׫«Ý—ý¼¡á$þ_‡—ä…×=_Ù‚!ÙÏ*¯@§ê?ùW›á¯Ž¡§§`~Ô¾«/O‘?=„ýØmr™Äµ^2-¢¾Æ¨ÄÓe{*gˆG[ÓçÞÖ?€;X¯üU+ê²›3Ã…:•õ•ü«.œen¦—p8ð#(ÿªó?£§|äÞ¨ò±ævP­‘uäÙ}lÅv~¢¢;ýÛŸ˜gÉ ÎcF%7¸¾«žˆ¿9@ÚÑÿ9©ñFzò®f?öÕÉ(K×ÈZNåá@*£:gÀÕ$71x4C °š™ã 7u ½ŒÅf#œë)|§õÀ/N{Õ¾¾±1Žjˆ5•ì£ù”^гé\RÛùÄ*ä\…ÞÉY„,¬Z°€7ð®ÊT¼Ík‰„»ü”³÷m¿ÿ—ËÁXeR¤&þø·üÕsÇCí+}FÆSÿñZóä´·;šê=õ†ä_5ÒÞ9~¿:ä((šÉ4Xü¸Lëx '¤ÿîpí²è,/à¯`~TP×®°œÏ\ð£9y(Eð’sÑÑ÷®|¦åDÿèN®ëðc¸L* ¸žZq½¶JSxªSðÂPl"°"ZôÙŸ'鶬1JîVúï:eÚ0¬XB,·äòv ±Ç{@¥GXÕªê=ÖðQmâ¦EÌÿ½ÿU9íš| ;Wµ6>ožóØÿ}tBÉ%Ý ¿cçÏÚ]@skB­ÿ'ºr…¶|ƒ½åÁ‹†?˜_tüUUÔîkø_óø3‰rªQÑÏküâª/`Uo˃œ[°c1±z0güÕ*•EÆñG{Þ¬w«"W= \Î.b„°boTÇìÍÀÒÏ€8Kö×NIÀ_M72Ë‚ÒîÉZGU þ8Àéî%ÎOJÎY~ã’ëÍ ºÏO×õÕr:¼a;𢹨Û@ÅäÖµÁ÷ž Ü!þ¸~øÂÖ'Bÿ¸Â[{üøbsµ i©¯Y’þ»ÝˆQ³À«œÄÏjw´•näÄn¤ËÞ2¯n£9Ä1m•? ìâ:b›¥äv‘­Ä³ ­~桟@¯ [T¸Cüq ß®Š˜Pd¶Á¹§%þ¨bYÄ#eÍ(æzp3•òþ` ÓvyrNh8ÃNÌSïÊÔˆ#ûDƒ¿ÊʼŽOFTìt;2PÛQ“8Ä|¥\"BÈÀ¿kÉc^+º„îS~XoˆL n?E¡n€Š“…a†éG®.SCðè§cC…\CÝNÆTn®yË(È*ÏÉÂ:†gД½Àâ4_ «l7jƒ–cð÷ Æ§Bw¸FÕûh²Œ#€Fh8^¾r`G­¢ ß-»»n¬DÿH‰ªÑÚ¬C}_~kúÇ&uܱޢZÔ$^xÆ^‹Òe+ 9µP{Ú£Ô'¦¾k§µ"5ÞHg¼þLÊâùï~”$Ÿ¸øq•8é©“ ª[dÝãjÓÑÝq’ÕÓô ÌÆï@fHdåk¤t=…÷µÖôŠÊߟ©•1ØLGöï®Ø¢ãðSªI:;}œ¨oìEÿÝðÎZ¨4À©'¼‹èQ^ßè–1N\p]ñï“Òt¼jà:™LpY)\_ýÞ.>:žjtOð#9ª¬]í¿ÕÑLï€~žþJׂêAòî1GÑžü«ø°þ]ä1=ƒˆÍüókÄ$ç™_›[L!+,ë|ûž™"6ÖÍøp0,Æ(|ôûô/‰Œet+,“#eb‘+L+®¢+¾œGü±šûç‡?SU@™í$áS_Ã'°ë¦íü]·0éçùÅ4qW·›=ß=~i/kßçÍöT¯ŒH¼?õˆÁêa¹ÃáB­?¯¯=Ô? ­»uo]Ì/ªùW÷é⑵b/hË”=¥&‰RMí ŽîœÙ38=ò•ˆDŽ2ÿc)ú_™’™”‘þ‰óÉ8§x5öwÿö}*™9 üH&Sºö—A ¯eòGAõ9Ľ«Àœ”óàÚzß:mµ Þ»ýÛc¡¬t°îRרþÏŽCÔÕú'æFÿÈ®^s϶¨,|6A4«Ðq·ª5Ìôàãë&}“:+YwÍsDÝÉ|Ê Õœø£• 7ÝRÚ)þþsý<+Oo3¼Åüê¼c4G?/ˆnÎÜ-x¶– Çج¨RWíjk«šlõ0—ð6?u:â•ìþ.ÿêºVC '£§#^_^Þfeçzz…5ãpmqœÓ­~ÎJÎ?è²ÒÈZJþUmV­À•'¼ÃÀʨ)áÕpñç· þ?¢ú<Y3ÑËýßöOüฬ½¦OUoæŸÌá܈¿éCýGB½&óÏýÖU]tT­ÈiKJïжr£î&Rë½è[ÖAî¾0d}~3þ8,2Á®Ää¬Ç3…°µü,ÿDÿЉÞÃ_í ¿"™b`ÿi«;™ÿ‘Kîá]^ËOûòjÄÄ)Xs¦±•^Óxæ¾²/Ð!ñöÁ×®-¦£Ÿ/B¸ÄZkð$6b5ïñlÖ†y CãòÑ UÀÍ¡âGu-†ñ\FÀ—‰ #B¼üäÔ!ç#–ö$YÂÓÑ F’«T’L¤×[|_ALÆF·ÃÎß#òƒƒYïu$ÞYVV¼5ÌÛ‚·=˜ùQ¿Œ?8¼õdLR]rV£o6råTr›-BOqªðÉŸßÕ å¦#LÉXæ:CØå`­¾(Îo7`†¦ƒA÷ˆþGÃ8½€ßîi<éå±À\)/"‡³DO«ÁàÔàGãdøñšü«ðW6~4#RK£¶ ùÂ_uSuQ„רO Ü}üå5ä_e&Gô*wæ±gTÅ4³ŸæTa~mîc¾ÿ6úI\vùüxߟœÉ@ñ©/ÎØ=\Nk û|Û¼K^PÎAÙC߇âúyðc4h¹¥bž@*°&ùWê8¡²R­áa=¡^°5ãX±0¬Ûê!Ú¨Èx7‹‚ñWÐ?ºü_¶Ô`%ëë½*E½FJån¦ßáBÖó¡ÇE:Ì—„#ëF\ÔŠH*‚¹ýc‹C´øáž,ˆPn’R.QÑHú·1[ª¾äKMB HI¾ísñGb+ ‘×Dì}w©"õíT ”£Eûª­ƒ¿*Bü‘èò4oBó ¼Úk3ùÅ< nØÓIÖƒq3`³Ó«œs_ôóøÔÆDPïŒñ2hðP朄ù³5«-djd`‡“©‚?bçÜb‡Zú‡?óKR•ã~^ÕŒk%àÎv ‚«¬æ3ÿ¼þwýw¯k;DrI¼X¯ ºODÝÈ|Î|Å9Ô£f>¢=¹ö,Ùaw¹#gÑÏXÛ˜ÕÊœ~~–ª ¹Ä+ŒÌ®§ð³Öœü]'¼EE"üªäïV€©ÚGþsZÈY„cœœÙ˜@X}%‹37õƒ9àÝžâ/‘©ádÇðv÷C~…ÿOÿv#‰4¹åª£Ô¿îåN]DI}§EŸ5[‹žåH¦»éÙÀÛZ|í÷ôŽ~b–ÌŽ"› »™J|ÔËè×µ%ä)äÅ|ý9‰¿s0“ÄF8ÿ+² G{*Ú#%µŽúÙØHΜòòr©¼¨=Áÿ´òRô{â¯Ýw*ÿ­CýG# ìÇLìX/ž¬ºÆ¢2\öEL«dž{:ù~x§Wø­QÕy#¡NoxU‡úÁ2ì:‡11TüxåHÀ3x 65>žç¢lºñÖ€‰9ÆSû”8$9QI%ÐÏ^l¶ðe‡çõ(&}àéaã³N¬bf,Ý`2S2¨Y\ÿY¢šwÄ5kù¾Ü²©võÇçÔt¦N8ñ_ÓÑ“ižðòYí¦1H-á û‚J&Ù¸a´öáû/BŠ©¶1Y8¤úÁ¾äÏ¥'²HD–@u®î*;kξ%sm:Õ8ù•ø£)QÜ-tn?Ð-8œ*ߦòç ~t˜ô;̃ñŠªÜÕ”N_¬t_Ö¨[÷œûüg(¼Š·|l› Ö½6šˆ½Úú`KîÖÊÑ0ftꆩŒG¼»[ü¨Í»ïb‹r›øÃNÇ _·ß7fÅG’ODì`÷%õâU@Àؾ™äìÁ—]¡2ÑGj#óÏë’;‘ùLÐù‹Rc±ß=3qÅôóæÊ ¢Yçßo±—~zöSd¯UÊ÷Å6{c±Š©¤ÌšNÿ¿)LÑ+ Õþ‰÷àSÀÂÝfÿóÈ#.6ÿcµ,Š¡áã7â´$]´öÓq¶9LMG[^ge¡3úkW¼êðT8än/B*@ŽðaULtíσþW=a™*ÙãQzŽÉíF>âôo¯^¬%>j 7äÏǵhIˆ½2Ùtý‹e>«?Âë±9e™_{Ì(F^ï%£±éÆÿ{aD¤ÿÕKr›ïÙ_ gd§åLêÌe=£’<¼ýÌ|d!ázÇ©åtí,;¸ö÷\;#òóŽ—&þÔÌKtÉ(ÅTYø« œ'U„Í©EoŒ¢•x¡,zz:s6µ;xšŸ‚UŒ^Šj[~,b’M:‚÷Áž 24ã¼9ÖyZýA¬uƒ~íȼêK¼ÌÕtó=¼ÝWNöŒù„'ð ¬æDž÷Nê°ø½ ß? ÿþó]ŽXZPæõsGå=ÿ<ŽvN+®Ð‰Ô"¼^‚Óžï0ôˆLÿhªßÔÿ&~ÜtøˆÅÒ9;ýd³‰³tÑò£ãQØ /Ø«W0b¿sÕ“Ä&îÍCYÍæ$°î†ÑSkÏL·êô]O&kâGœ0­8ŽNt§Ä:üÜÓð+ó`µ[«Î`Fy8(›‡–´3¦‚e¾Ëiÿõ^?ês…¯,ooçïîÃþEWSø÷.jÛdؘ?@§ø-ÀÒ™¡âÇGLðã¼ÌŒ¯ãRØ=n+awaïòƒLðÎײÒlb†ÎÌ´ó¬ÿéÏE½Ø0 öç Qr\žÕÒ\er{’ךßì)²“ì±ÓXú·úe§šðš¡_:ªL ö55;Ò¿·ˆÏR7ðÃÃèDÖù÷[‚ßô•xù»ˆ$cÀ#õ§.¥kŽÃâ™Îep:5Pø½èÀ{OÕãL¦pýÑÌM0ª÷ê¿;K–&æqt$¿à«ÁÜK–Ù`s¤êašÎµäïF£¯Ç$*ÛP;i!  Ú~#ˆ\ü8BÏ–Š®ýåÒžhÝñ F}xþ’kŒüæqæ¸Y¥ÑÑgÐ}·%¹±ø¸Æ¼N¿ù:V4þœt8½Ìê‘qè;ü¨FýÇVr§#ñŒ60KR³ ûg.[£2<Ã"'qFpF¡‹b~K³,çkfkL5kÀRŽ…Õ›I¬Ÿø#(Kõ9ÇDq’ø£*yRžÖKzT}©¶\4$›³žè¨_ÔýÖz;Åi,ûKYî6½±‘W”ý…l¤ºHôºX-wé´âtí0yÄþdê\Åæ­†ÕÃxÀi­ã«¥ä¥Ö£ëFBYO¾ËŠTìO£ŠÔ/pÐ8N¼‘“Œ4dŠãÿ ÏÞB­ˆÌš­Yur¨øñØ‘ÌÝ'ã`iš©y`I)¼Ïšhg âú#Ä7«à¡fÀ¾´66‹ ª¨·úXï…§;š«zÌϘ`GU⌜غ%xâňî Œì úx«1’ΔÞÚ¯*EÃÃKDä:W‘Ÿ)1žA[òÆr >jTmªvÃ#ó¹íމ~øÌ‘­èÒM¨B? ê‰m ò Nµ‹¼%bº¬éß ÇÑ/âM5Æ+_"m$þ(óä ™ëèßÞšúîUhÀ'ˆ8Oþp•éÐI43–Ù^ýwÓŸ¨ùû-¶'þ¨‹ÿŸ¾º«ÉQ‹Ißö‘ôO̤r›cY+¾s»åt6Gÿ¨~<ãÝP^ªÈæJþ¼‘V úa½)2 (daí[¯_ f° 53?*–s7ÙWo˜hÏÿèof³Â‡ $žÙ‡}®ÞV=¤íqþýÇ]»¯õÅÖ¢jfèXž?Θƒ˜¡ž“~„ãÈ«LÆònf4¡K¼8f4Ùk‰¨ÉŒÅStP>ü¶œ£ ó£ÕÙÕMð#/ù2—ìhF×ÈPÞaêäÚ¦pÆdag1ðã 1‰~¾]ÐF«ø «¤²‹¬ëÚßUíœÈÊ{PŸåõƒ… EǪôS9‚½aÞb?G©E?g`$“ÍÝ\dE4çù7ñ)ÐÉѯ¹ðcÜZ c Ác™Ì;öѬé<ÆÎº›ÕPŒ6sÉ­‰HŠ;[¢Ïï¦z2yÇLúÆ›µ€‰ö£êçÿ$ÿj«#=ÜÒ·£¾çÈø¯çŸ{h'´²úJ=¾ˆ-^jv4:Ë_¤gÖ½õ«ZRm×·_¦§ÝÄDfªä¤kù28oéN½­6Z‘éE51AJGß0-ôŸo2Òx&KðG¦;î=9C«CűH¡¨œ ýõ²Dþµ#Úcذ'puQ^uU-˜üºr ~ÀüÛ<#sYµ@˜êcˆIb‰´-à)ü‰,R<ðCWÑ7ÄUMŒÏ² k–1†Šøø||nÔ#Ž©…Ç]k)+ ôEɳ՛…¡öŒ<¢÷íNä׈X’Â_Cc(…< «8;|ˆïˆL”›øøƒ"r¸vïçC ü›7dxßÁœàÇ<ð#q è3Å¢+¹ùéz„®…Gİ+¹Z&QB¸×Ë4O4­;ø©s¨·u– ls*A> Ðç–/ÄCâŽxÎd>@Ä•aµ0¬gøqÍ s §mw¿r§ã r+æƒýðл€!`áߣLF©(‚ÿ¸ vm,¿_WCÅ-xïÓaúÙœ˜1 ¶~L“¨ï(Ýöž“”Ç\ü‡Õ ]¡ ø±¤‹µZKvôò–R|Üè¿[%3üÕb°{ÌÚ<´ƒ/D;QlËÚÝÑ­WpVyÌÄæÔø4̹K?Z;·¨Ñ›¬ÁïoKý°¬730þ¨†oÃìʾ2QÞÕš@oóMôpªO„T‘ ôGtc´‘õ ݱ¶¡ýÞ0ò㯺Êä¥éê:½FÊ©ÇÆ3µý|:¿}°—Þ^t&ÜÌL¤7è!i,•b0XKÈ'ÈC¯ýª bRc§¶7’Q?øÙCÞÂ=é Sù*?®U„9 ¾è¥PäÏÐce+ýL £ƒÇ@‘ï̉$àc b‹ ò9jÉÄAžþˆj/™¶íñ®žUíúh<Ûøùì(Ó ¯¨òÎn½e¾øŸÔæM6 ‚_#‰¸¦âÛc¾uC×ùÝ&ÿ*-ZTužº7*~Iú_%%wó¢âÁô³“}p…ÉVÇÀ€ tí‹6µ’Ó~Î31Ž|2jž\ø±Tk,ÚÊ;²OïDbüSf&ªáàSR1ŽÏ;Wu &±“y‚zô÷ü¿Kæâã“x`Sx3˨Kâú÷7ø¿ôù&G*-H彃þÒ»–Íd¥CBUý„nÛw‰ƒÇ{Jü XóYð1#°—è(þEe•Åá¯@ÀE¨.B5ǵMÁ™­úÙôŽÞl`ŸÉ8JNÑ3𣜽úG9*?™5ÐÏâÝ{À#õRÇÀžò¡þ,FÒoÊRì(Ƚš>*PÈæ¢$2PÞ‹P+ñýÉ{*Él:¢Š¤ÄoèGÛUE„¯ìŒ¿êO={bÒˆXÉük¡Å70כɨ_Ÿ‡^‘Ñéo‘‰d¾„¿ªŽoO-ì½ÉïÛ€~uý¼ç÷dú‡'½ìŸ½É~~cæsýÛ‡Óÿ*‚sÝ¿0}õˆméMø‰ÊøÞXçu r6ò/«2k½ršÔ‡ D•F5šçú˜x!y–î-s¿cÃ[u£sn-ë :ÿ4êÑ{“qkÙÛE(!Nzõ‚˜%¨þ£™VT\6j «Ÿ7<ÍÂÆYyÇ(K7”m¨F³ÌÔŸwFtšÎN7ëJÆ}æÏ0 ä“õFFYGÚ ÿ¹X^Œ¨þºqWhy1ø)OP·9zy ¦ }KÂa%#Ë.%yÕ‘¨™×Ìý° Ï`<)jÚã·õü´V¢+¹¦}ñXï䳡óªµN“‰­ãfç0«¼³JRÑMgÒú@òfÒ‡ø"\ÊeÙš7eYo§þ'ñÇvGÔïôó‹Ž š»ëœ¾]_Ø>FC(¦Ÿ×‹â…fG£ÓñôxLòÔïh‘µßË.;áh'ÖÈ|Ĉ¹ˆþWô·ZmE ÕüøÂDܰíëïïÚ-öçÝÞT 4!7±ÑM› _ÇÏœò"r­<§‹0­¸B;£½[ãÖ|KüQ{XVÚÙ·7áel­bݯZɰÄH‰È¿Z!Ëã7°·]øÞa4“éf&~pªkðL&–¨/¶qV¨øñÉ‘kqý<úö"ží<ütY¸¥}èO°õzA)ò¨6àño^¡\ó{} Oý@®Ìž “kÇy`»&©ž°<ËÙí=<ñðXŽÃØÛv²­¼vúÛ}Š¢=×ùR³É‰È‡§•ºè–¼1·aè(>ÆTlJuôÐÔvrØl4N¢6Éú!ö/é¢5©8ïð\eã/"?»*±Ù\áù ¥%x¹ÝÑ?.ÙmÃWË ™Õ§cøqÙaÑ[Í—|Ü¡ªõ‰¸²ö° éð“ÛÀ‚mSæTãý‰› ü¸÷½ž3<Çk‰}ÚîoùŸ[ëëCN&£´1Êòb¾—>Sô#Ìcb2Ð;úÚú«fäÛãºS¡±@ÿ8ê‘×D‚`÷%úGiv”‘…¨ì{¹++©½‹C×…@þjvë(9Y6t dOG®Ø]ø—Æ* Oçmõ+ÖÑÿÂg9ÅÝ(†ŽR þ,…ÙÆ))õ¾¨¿:Y?gy˜«:àÇ+â[y¹O©M`ç1¦Wü˜¿;\¦åÜ$üUVÓÉÓÚ@ü1Âìä cŸ.¹¬9æv*/Rí·›XsÈz¼ú@æY™Ïµ¿¬ÚYšY2¾^#á¯ÈFFúïv´™Ùñ»·€ʼnÎÃdÍAÿh†­ÎDŒ4œ{“ˆ˜.!ñÇzyÃuGjj‰Ä~ª©ñ¤u2«0[áá öªË}Ä ¯©ÌSÎÌüSüx†:]¼ÞÚDpc¸âÁd1&’Õ¾Ûßeí´È…GWŸì¾rçmЉÅ'¢ÉmôŽQôŸÜЦ½æ ½fZ)éÊè4gqÚ¯ÉÚªa4áþé¾trk&c‚}‰ÇMC·:‘™Ü–Þ^wèÇ5’̰öÎVQgspí:•“ϩͼk^…ùõ—aVåÔ ñ{J®ãùÿôÉ>« ü«×ïß[8™v’þx—¨/#žjv-ÞGJ=©ž[o®ŸÑRjÁ;úüóêû}Äfâo,Í;Qü¥ŸÓÆj«EcY– ÷Iè*a±ÍA¿c#ŠÅ4ã#9‹›9ïµt+k¥-§kl¤–%em¹MžÑÃ’-Eç9í¸ö@\À²_G·„¿[CÕ%¯§y|Û`áW¢7´&Ð]¶–aQT"‹žä_5ÀßÚŒ—¼uo‰‘˜¬ÓÔd7i|lŽî[“l񻮿Pñã­£ ŒßQ”£œp7À2ÃÁïA9/G^Ê Ø¡õ¬6Dh, uæâ}}(1Ð ðã? ‹Y”™ðôÆêç«À»ûÔ­ðc7¸WEöÒ.KtþögÑ´/Ú+NÍ¥£c¢wòº“köȘC¦€§1½RQ­ñNh3Q¾/ ¡»Ú*½~êæa¯ÖIóéˆ?ØS™8àÙWÞøï9³‘dÌ\ŸèiÑËwža X‚ß—™ßØ-üxíx§Ï@?¨°5ÑŠÝYµ!¬_A¼ÚªèçK‰‹<• ÿÆ*4*cCýa·5:”úÇ{KßýñÓ˱XŠLüä1ÕË:k]ý ®™ŒþW5,'ÞýU×,Ç[ðK;LV×A¼™ò¤ˆì cS¯Q´MKȬïA2,ÖÐ;Ê :ÏdðâÔxo?.¢Ï'áï ÐCä0UóÊìDÿ’ªÆdmÛ+ÖÕ{Ÿ@-*CmpÛÝìÅ\«T¬98øqŸùo¨ü.Iž˜Vy$ñ×C¢ŸøÝED·Ö%ó¢ä˜ø’p'ð㣵ýÀa[L®Y3¯Ü™þd¶-¢·Kjjʪ¶2¨n9~W¼€Dm£@Þ—ò¼‘‰ø£»õnî’¹ Z“šƒTz¯àïÛ‚‰ÍëàÑ<•„ü«Ä°»dßQJË„÷XH}ÀçóD?ßK<ê©6 §ÜcÈòdÓÓYŠŽ!ô„Ï…®KFÃ@¦"^OK7Ôª®ëÝEü‘’'Ø›ì‰ËJÂ=Ä`*`kuŒ§ÁòeT°ßf¢×nr$ŽÑ‰q$ùfkÈ¿ZEtëϳÚЮNÃ]ñÇ|­uÑndGtA>ËÛf]²6£ŸÇa¾b¥¸öŠîð×é s×|DL» æÅ›R^íÁ5¸ïÇÿ³O8²jI\'sÃáñ¯ñÃ?ÈÔeÒSmáÈ_­p$¥÷UQôóèAñdX.ÆßÑH¬“%±5é ˜Ghtú룭§ë‰vLÿˆ¢+׮òÞ*ˆ–Ãë´Änv¡;U~£»6ŸÎƾ³²·É+zŽþÓŠ¾<ÝoxÂ·Æ òLª†ø¶-åJ¬ô'Ö÷$Go*Ó£ªÊ°ì1–Ø(–“ö‚·Ùžœô ‹< ?ø)¶kìÌcð#!D/|“¡âG-!Û)«4¼Ï›È(ÏÿWžÊ”Ëp¤/A½°”ò U?ª÷ÂBà»_À]Ùù» P¼Ó“Õ8 PR­=Î5½ÆÿßgLÀ﬽øÅñ…ÓÂé„dðWyð fqU:ٴݰ«#ácÚý°Ý_Yç5¾µÝ=}&:mBõ—L-B:ÇZKQ€Ó¯–¢C]b}XÍÎßÕÕ$ú?·°R@ƒk¬¹ ®)3ù^ÅÀá!àš˜+§áõŽWÞôI öàN7’cå¼ad«3tæ°ÌÃxÿe¨í¾Ê®7¯}àtzŠK?Í?Ÿ®’ƒ¹cÀ„=èQÕ °.;ùªíÌæ:®Ç³ªS]ÑØÌ &5bŠHqìýlõ›5FÞ©‚=Ýñõ§Ä ˆ‡fwœCÑ1PRRƒxŒúóÚä7'Ïç.ÿ§õ%;aÃ’Ð¥ü#zý   ?ÚèñYþäzk°NNò¦£2p±Yž<¬±dEuÒíÐò!ò¨Lœô uÝ_‚GÐ~ÙDËv8WVçœ>‚,u‰?Þ:ч/VnùW’j¸,0X›±öé’À2Íõ<=P†n£×Kþ¶²ÌàZÏM»¥5Fk.¬>Qó¶9Ícà‡ÓŠNÿ’•Ôé5±µoüümè"]˜@˜Þj5„‰Ñ?R)jp¿‹?¼´ b9ƒ_‰+˜äìÁ_% š¹‚~²Ã¼i^&ÿJ‡Êã,Jó˜Äý£<’ªü Ô8e!—²™k×µ?EÞ¬h‚§ÕÞµHfL¦r,£jæþ[ËqôŒ?:aûÅg]gþùnpº¾h ~|Ò‚{hÿ¼üRqüx)Ûà}W'‚-dÔ`÷Sð£îX1<‹&¤=Ƨþ|Üö{ø›§ÿ€=ØHÊ»“GǧCõç>x&͵¡âÇ{Gj£ oHz¨ƒZÂéቬCÔu‚}:ñ 5‡'Ö¯™±NTån_BÉÔT_žÔ§œ\|¢*ÌST¬âDø‚âj׿?ühºþª¾ªu>ýñzÉ죊á±LI2¥¦ÍDæÚFb&ñŽ6úÄ|Éíg¦{zæÃ]_‹»wX܃Cpww‡àÁÝÝÝ×àN‚KpÞrIa ûÞÝ»ûÛ%@2_OOOªS§ª`±z)gŽàðc 9Á5ìñê<úÝÐ"š!z[XvÊþê,Z|® ‡¥Æ™ éS` –jˆrè ÷¾ >,ûèNÍîàPðã¶ ü˜B>`&?‘îd{>¿v±6ùsìŸn­ÂÿÎFä<øqá-øÕCìú®þc9ñG*R²£ : ÓA-Ás¢/mNýÇ^º‡Ç±+€­éâ~”KÄg\â{Ÿ€Ëãä=äÓýg£b)2<9Ðí§~?¶h9\S\òGðÀ‹ ™Ú…{]•"¾ÙN»¶ÙBoÛ]% þ"ÿÑía;ö:*Ȱ“ïN@æ »µÅʧòR1_wUu½ñæsYÕ­{DP yâ½×.òI'©žþV5Kæ£Dëæè#SǸÀš¢«/ý¿¥g’Òº7-Wtn²-§'ØXâ¨ÇT-F¥vƒ)“'1;qjoÔëîÄ#yzåe³œõœ<Ç+«å‡–©³IJãÁ›Ô…T²ã#yQ•”ÒzAóû<ððåbþùnô»Ÿ9iµ-üÇ ó“ŠFªÖTqú[þvDâzùé°u›Î–¥àÅ*ÂSN¡Že2>ÒïTˆé¯îë‡ð\jqÚ.š7Ô :¦'žœº”3¬ð :ã¶×>‚Îö³éSÙ È)éÖMUÂþ $‡4'?fq’›¢ßÁéíH¯¢7Ôœfec­ê`Ù ºégwõ£>¥’« ìtÚºÖá‘uŸ@wÀa¼ÍÔ5q;ðŽÿ½/öq|r¾ðW)÷k«ú½ŸñÙøSt\eŒÇp7*]Œzýת[ökåÄÔRyN™ÌvôôMj,нÉŒ£Å#¡‘é—ÖÙC,€-ü(ñÎw§j3¯¹„øã6”T4£¯AxþîÎ{éWõëb!ÊÑ{øÎ£á¯ê¨a`F镾t4û›+ȸËÉz×cO¦Q 4‹?Yáy£&ýTâ‡ŸÊ ŽÔãwÑa¯¼ñÉ aeê 'Nr&º6ëIo=H9ùí>¾Ò¾è·¥‰2֩뙂=M6b4–œV3s0:§ˆêŸô‹? V÷ þÿ.æ×&e•Íé_’‰ïÍÌ]¶ä³ïóöÕć» ¸ÈŒ(ω}0û]•‡zÀ½ï`O‹óy¥‰ã&†‚~Ú]"†qf8ðc–+6QM[s&ñOcxwåɪkÁßì?r€/wÐ.íAüa¼¶Ò…r×··ªM à¯:›äoÀ…fx+±Ö¹¹BâƒÌÒ o×´^Ã_"§Òü(ϵ ~h„ÚLíJÈ““Ù¸ÀYíÏõfƒ —à?,ô´Ùè~rH­ÇÞåBÓ:ËVdä«[éÁ”’¨—î’Ž ~ä„s\"ÿуëµ%¡¡M>Ë„YëNü‘—úAº8a[ס&Á•òá÷e³€\OˆÀöÏ]7Kˆþß</™þSؘsžïô&?žÞVM±ÈKQÛ†Gïô”ìI=òçΔŽìó~¥Y‰?ŽªÞÁúKýFþ¼U€þê5Aa}ÌDèb{ØŸÐܰ&PA×Úî=0C °×¥™E…ü2MÈ£§ÄJŸ“ñ××]w+ˆæÃsþsZe©ÿ2Uw+ý©:POág½´ÝèòÁŽI}^4ªÑ?“Øj5Ag7 ýÁ\âå ²†¬x½—ðW°Kxcר(œd7+ƒ+;û¿‚+©Àµ]pk}чeG l;¹jVÂ[ûͤ( ÁWã4ñW³©ÿÀ×ÄíÁùL`–¶G¸¼Q&÷$zN½Ç;µ«-—žZ=¬®ŽLì]DŸ”çxX·ñˆ½ðàšªßÍ q$ÿ+¿=©eÒ³îÌS­é?®?·È 4`z9Ñ‚^ëNÖ¹Zl£ ÿ66Î0Uýת[ViÅzYˆ½*ýc‹‹X"²±QŸ@MC:¤,5bAªã°lÌl±×ÄÒç-\%ÝÍAúzÈ5#ï]^V•{¥¿Ôçï®8R?¡ßCOþ‹Õ ¦É† §”\‹e~Œî¯5šªÄ&aê‡~«äŸxݧ9Í8d¹GÀK_7óªy¨±ñ)ѱŒ¹îªŸâ‡¦Ç¥ºû*õƒ ›·¸¨2?]‰Ìü-<0*†ðø>Ø‹…ìÅZÑ(ðÙ‡~ÏŒvØ÷>pV×à¼ÒaÕ«ƒ‰yWù ùòçÑr=á]:DtÒHŽÐƒ”“ß^ÓÀ.|ï°»…a°Æ¡¶Ù©1äôÇÃît?’ÿ¸J¤ó™ïñÂûwfËŸ’î¡âG{½6ñÇ üÔ-`Ú%ó2 X°û#ø1ßL†é Š&ø«‹Ä [XuV¸åR ÌðPðã¥öјBÆBrgƒ`¾`5œ©‹‰‰²jðï,XÿЍoϹEởk®%?òŠ'´Tœÿ®~p hÔÄÿ{\4”Ó9õ¥¨_ç›êîk诊Á5£b¼ññøãCÔRù@„<‹ÐKUà9d¦Ç¬/«8ÆÍ!w‡x`ŸUŸ~3É*ß!ÿ^œœÈAÐ(-ü•S¯1@åÁ£X‚¿êv¤§í ̹qdBô»¬5V62Óá¯\Ä÷™¾Ÿþ%%á„<ÑVÍ€]S Ê9"äbÈ7'Ç‹ü¹ÖÑ—úÁ–Ĺ/è_2 ýîøª÷ö;-5 ÷Ñï.†±KlÓEþj&LÜðIRÓ_¼ÞoÌêF$Xœë9ñGRö:qF2%˜7»€Ù$È€<¢fru饩T¬1 û‹u öÑTGdPÊÖzf±Ý,¤Þ±î|ûþÿýÝWA~÷K­¾RùÖÏû¢×{1É~t™é¸«icµ4°W¥~ÆQjÜÏ…õBß·R«!VËêp,5ÈWdbÔ})ñG Ùšøf½Åøµ>cð@fSIÒÅN+&2ùN÷‚MidV§ÏH=¹Aúa‹¼&Ãξ;¹Î žÜDüÏRª=žy3ét|hnådu2ÈÌdUÒ¾?¾ù¨b%L]UtCÎt§c ÇMl{,ÞXú/ÄÈmÌXüžü·ù§øüÈmÞ”é°kñÌk¿6Y¤íøÊyQ7ub† øLk±·Û„ÇOVøÌh&ö R~Dü–u@3<ùD°,=ToGûÉ»xfP'^ÚJDSXzé?ªš¤cUk&ïcq4+SèËe`£G²g#`wZ›C°)±ÀM_>ñù5äUâªðWÑCYe ½U\÷ÌøäÚkÜa‡3HPrŽ©‘ƒ¾Cíž'•wÍàçt¬èü†Žhã¾´kÆ(ø«ðpM`.âô1Çò ¢+jAcøñšúðùTjäÂÿ?‰§°–»×Õ$±ÿ;ýîL£Žì=HIN÷øÁôBbªÂXô²ÌÝD-CLô»·È.äƒmªJ~$?‘Ê8ò白z^„<Ý©Œk²(1hÖÇô(ðˤ—J&º¿ïW'Л– ;áHò—Ð_¥''R†éaWÞnsòçôÌá\ø›ÅÉ<—÷L ç©B\Gÿ’·vW<×Sê» Óá÷ 5nÄ…‰ÊÆVëéfP-XÿD?ú'¦Ä/óÀ‡<¥|ea3™•ÀU”t.1ÝÏ’û蕆y„EAÎpT‘¿‡“eº#Z‹¦W ~,¢þ£¶Œ³Ú•êÖæ]«5‘Ænð#)•>ôŠ,èj~$tµ·GY×YuîÛßzOñ–¬mÀ©¯®‹»wüï}qU+0kö?ŸøŒùuÿ´þ<õƒ}IC•#Dv£=§a¶–™î»%Žù_»»mije<ç*ÄÙE\&Ñ'Ñ“·£è#VÙŒ ®+aÙ-zLa±LlûNüù­ÔëMD¿ë+;RT”úóÍòy#šè^pïò®ôÄC}cVP=°‡5å"lĸœ?ñ1–Ë„²¡ÌøNüxQé'¼¤tæžï‚]“pë#á)Àv¬®€FIA–xþKе¨ì×;ôW U;,«^R$¬êfì] õ~Ì *ù„ZŒuÛ-Zÿd…ŒÚÜÓ(¢…ÜYRþ+ƒŸ›üÇ@,]>µ›wè/âç È^p¦¦¯Sçê?Ï´pt|•A½2‚8) 6z&–¢rúµOÄ׈? ë‰Kfïdn†,*~tF•lS ,{Cò¶·ð ‚‰Ök.üÕ á‹•jJ~ø*ع;pGœÜ7ü8GÿDo9™hr"ø‘|);>BòÕÀâ fQ<ÿ‹t½MG†öbÀ5w‚úoÌÉèwCÖN0ÚÈat¸Hޜ抱ä]ÔþàGnú„Ô@¿[_¹ø±‹):V÷4ñÇS²ÞrïwýKâÓù¾6øœ›{••Ó1¶7 |ÒVذÒänØÁ·²–Þ}r4Ð_V•‚¾‘[¿ËçìŸÁ¢E›\‚¹ÁѬVX|'þ˜D,óÙÞ‰þ´‘Li«6¹.õ$sˆ?>’uÙ‹§ÓZôúæä ?*q—·¨†*O¶GC{µˆøc1ýJ^£NA½Ëº­ÏQ é\øæª qÞ&õ ¥ï+v‚,x½ º¿Þ“ûsê8†¨Kœßã诮ñ¾ÃÌ­»ô™ bÔ!ÿ=‰<ÅUºDUÂÃ"ͦŠå*Xì¢jèiàlBÿ«ƒ¼M~(ýJZn诘è¦íýDmÓ™Ñôµ™Ë¥¹ÒÑ?QG•uÚÂVyvpõ‹È¦å”=ƒ­ï!üUFìR-öï¬z.ó˜¿Qÿ‘›jø®è­ÞÑ¿ý:V;ð)‘}ŒÏqc®ð2û…ZÂ[ý _®7žÈesB ~ÌÓ›Š6Rq2=9Á‰ÀÚL9žÇãÎq¥Êè¯â‘ãok¥›qc²"]àÝ®¡p?';aÏö™E”+˜b ðÖÿë_øjƒÕŸ¿&þ[¨ïC÷!ÿ_4ED\Ùö8‡y¥%éàÞÉØ®ÇÒ¯~ÿ#ó'g´b·,¥+—šTDåCÞª³¡Š“ôô Ëlñ 8À ò"× ZëžÉ¬¬o6âa¿ŠÈ’œ?Bórƒ®ðõ«Uú ú·û`Uï`±æ`?Ê©–02Uåq¬Ôssg úÝìÌ,{øõ‡þæ×RôO<€–2" ÉQ℘œ­a°2÷©÷sº£ÜÁúG†¡FÖ{ðOñã¥Ö€)‹—ÀŒpÖÎŒ¿rtí¨‹§y œû@|ó…8¬ñÄR¬ÛfQ?ð­ }‰~Ær8òþÄo8­©ñtªÁ}¥€ÕU‚¼ÅK"¤uüÿQÔõuñƒkúi‘ Â*v« û”ÄÔ±ˆóÉ÷LSÙ³µ0:ÖÞ—O\Jl7œUÛÔ U¿;L¯+ `²ÀVÕ&¸͛Ù–Oƒ…Ÿl¾ÇElk=,ßPy;O?½…~çím ~ÜÔ‹r9qßt~"ý ׳ïÓ¹Ó~ÜeI¬Ý`žó[|õuXú¬à‡£àÝI¾$õƒ‹ô!¶ÏË"‡òÔ Á\ÅèþÎÉËGF¢ú«5à‡Ú©kª–•…œ| â®’`Ó8<ü>Ì>ºý]ýyf*/+qZSÂÒœáßMàärÛ±—'©F,@λ­}’’ê\'‘a:bøûÞ*ñæèýÛûï`>vÅ4áûJR¥JÞƒ¾*QÁ¤9àǼç㶇u=pu¸¡¦¨bg’Õx~î%/ÕEtúæ)Ï”åùÌd*Z‡è|ò òçS¬Áô+±èžî„=ÚÏä¿?l_b£ü»‚ûMµCÕ—AêÇÔú}ø‘&·?ÑNJ|ƒ‚V8º%úro>ÖvòÓµø÷<ŒÑ8ú@Õ'ûó ä­OÌž>»]%·>‘VzátÊýÌ)u·bÒÑû9;ª1õ£:Nâ¡ØMÈt¦Çv—;ñCD×_øýs¬2|þ õ ük¦b>PP–øˆî#²ñöTc]7Õ%Y†êÆ,®´èw;¢º=ˆjʇúÖ¬O‡ÜÝUuÑŽnM `êàNd- ñc½ÞKtdfOoðÃÓŒf>±†óØKôö}úÒ©¾†«3V¹†ÐQ?Sv5ÖýÔºŒW¸W¶Ä‹=f'ÿñk ¥Àíùú⺖7Xþ\Ó[þcý®¿v[hÄÕD{‘Œ‰ƒNýGF£¨QÑèjì +ÿkø±@«Žªµ(_ ÿÞ(÷ôÅú4á![ßœ2R‡‘múº9 Èx¯Æ/ogX—ꢜf[}ïP+ì~e*Å÷ÊwFXØ&ª"ÁÉ—Ây‡NÑ‘q6hEÕ F¦ª\-|SR÷|†LKV>ù7ïØ×µ|ûkb±ˆüGeüû¿ðë¶Â‡\†‹G݇;ü•­ns¦°æn°û?×_}ÔÒám^”aî«¿”aeñáœà©— ÜüDäQ2€»ojî]~²ÂÇFO"¢aXä{ cj~¶6ÑQB²^ÄÌ<á|`šž³ö=Øü†r¢þåÛ ü`®õø«•¬© ÜPZôPmˆ üÌQʦrú+fè±Ø6>qWŒ«VÊœ¡ÖŸ·×›‰ì kx0ÇŸjpŸŸžkÆbNå}òçô?¶‘½ž†N?J‚v¡ê¯®joŒYr!Vy&QPNò»xºóÐ߃š¨NDZ5È?²€ ÈÍl$^ôåyy‰¥ßÅKnÒÉçgÄF^B ÷Žï ̦ŒgÃÏwâ²Öy¢…üÄ•A,&}ÃMÑJÍ’GEHï(‰ñš3ÒåôtªíŽ«Cä?V*7ø«Ýj•ÕýîL¬ê'ú_U%?¿N5(óœüù•¥Âöùó6Æ}2¯NbE¾/C«#õÙÉƒÌÆ¯Nüq†™Ý·á›*S^ŸˆÌ ¤q´¶'xÖÕCÔŸ“©‰džƒâŽÚù“©è…²ÝšfMQ­TÐŶÀ霠W{]&6=&þèþb.9þD Ónú—ea“ëoõq [.Îë@ØÜ¸D—¿Yw¬LcŠÀTŒÍ(•£B:Í:á‡W³“Àùp&½é×r..¼úKÕ›µÒ³ˆ³°·þØû Vó•|lF²JÂå#ÿa+ddþùGþON…|ÃYz®O·ŠR“Ӽߨè·#»ã¯Þ“ÿÌ#Ðo¿:+Ë›±­ßÁž¨Š·OinGv]€ÅºLþc§•›N+Ôaj^5ÆSÞæºd»ÿ2½ñc¡ÞY‰Qï:3 "”c~í«/kK@&j¡ÝÑÕÂ%]©˜EÝʳ§`‹Ÿõ€s} F¾/'±ºº-n¾iÿÞ×´ôÁòNý`ð‹« ë5ÒøêÁ6BäÏ'kÙ際٨nlÖûEüX£y’¨Êgâ­oD§õeàGoYL4ó馶háë=‚¿šg>•5ñ¼éÁ+ ›e௢áõf ûU%¹ýnر¹úmÝ”‡yS6qŽ…½wWµàc*ÈCænP`5<“§9”þ‰íÃTžT¬'þ¨ƒ¿µ+¿“÷æ/VšŽw± 6ÌMš¡ ªÄ5+„¡ûg-¶ù”LNS‡JÚ`…m>ÄY+Ä5¯bwVÊÃù·‘9_88ÿ·ÿˆNdxºg9V9 w×O>Zœ~xÊ¥•3ê<;ñ˜3¼›üC1ú·ÿˆ¿Ê£G5 ®¶þW9Loþ“ˆa kZHþ¼žé~D#;ë–kLÔ,®^”)Dh•Vú|QŒÝJÖ$:zÄûÜ”wЛ8ÕŒ"wŠ/øÊ­AÑs ý>¯$J‚¬¼¡¡õßõÕ¾Ûä *¼&¥„;YN&bè »Ô¶n • Ÿ±Ü‹aíòä?Vâ¿¿ízŠ…ú¼›8Ûè û“—IŽJ ž)Só‰ÐðóÑå´–1ýî-\þºƒä ÿQžüyº ŽÁ öP}Á³²1o67Q&ÖwˆJ‘­ä¶Ñ+W·ŽSÞJ¸Ñdî“) µõn!®uU™Ä©9“ô½ß<éàQ98Gµ? Ú|!ÃPŸüG2pd!L̦k Û’ùóª¨x«ÏŒƒaÓèu $,+‚úÑ:·¾Jæå{œ ½®œŠ·¦´–ÍŒ=+Oþ|*$&¾£)šO={|û39œnàÇtú¹$·^€ó½eÒÀõ%¥ëtVV€| à°¦wQÈ>¥Ïî-Káßo¡W}S˜LÚ˜Õ€iè‘Ñ«£³Á¯ó2HïéIþã µ7‘‰LªZé™BÉ[Íì'LeßL6æ&µƒo©BÿƒúŠk–Ëõ„?[b9]&À¯ÍWËÍDø‚…×çKýyqÞ¡ÚÜí_ê"º¸àG æYu°W[¯© Œàò¡>e§ý;(PÚÎûÄï௜¬feNzCu>Xþ|‰Þø#9¾O7þ.’iÙõ\;Q†5gŠnbºŒ²=]MˆRºZÛݬÇ\9ª=’Ïy€¯zJö&nÙ{MqÿßžÑ2ëEwæ¥Öì÷¿²èKÛ;_Z4©éuèôßMo”BÁ[™Î¹1ô ¿t;Û´lb¢Ì•ž¬7 Œgú,êlêÉ¢­ØÀ\‘°E _?´ƒèOþã,Ž÷\šê¾dæR}<ó? ­ø]æ–“ä+#¨‚éëO…öëý‘~E,ÅZç}ÝúCµÁf×’ àqn A*ˆ<þ‰Õ‚q¦¡]é?æôo_É»|Spžå=Ѩ¼=ê`¹?aùê£`ÌÉÿ †AõR{,³?O©žy%¬èü쮞N]çž’(Ic2'ySâûU6ªâcOƒ·z„œxË‹_t´jƒ‡¸™èã"Ù”shyæóY™eŸòW/µt{.ä¥Þr ¢€ÀÓ±C±®MÍ^øéŽ^à=QÜZÞ¥žäHÎ’­È!BCö¶è¯ò]PJÕƒ®cïÛÁ ½åßifLô»Wˆ<‰®ƒN={f”©xúíBá¯Ni¯éß>üï¥Z¡àI~ô 7“€»,N}„§šÁ~Þ…ZNt’L:I|4æù„Ù[ìün~Ôt£·ž&Ç'>û£‡àÚîq¤"þ(O§‹"XçªLß~Ä Þo!˜|ˆ=è/Ï|ħþ£ &2™§U|×9î{ ÕÑ©5ßJýGfxŽþ¶Ÿ:ÂDõ4ØøDPÛaÄ4«³ÊÁÔ×¾åÎSnE?ßFppï8e[`èt2ãõ¨øKH‡’Ô’|À:Ÿ±ûÀ_$ÿáLh‰}~H¶b§ò(ù)ß\o¶,¬jâá?'ÿQ õŸK}ŠÕžzÆçè‘Ú‘Ñ;í±V0ñ$9Z¤5xýÀ÷ðf†u˜˜«Xàõ’ë/õxNnàÑhxÜôx ‰È“7@•Ô:¾ ‡œzÄ)ô£½O¾¡µߺÒÏ!š¹AÞ"²º#ƒ¼˜z.ê?œé÷Ì¢VV3!^Io«J« à¤×a2¬ó}X¬ZöcªoÐk…å¢Ao¶œX¯$ýwƒô»ïõ‹èwâ‡^"þˆÅ‰J`%Dû;‹LÅ&ë1ÓXÝÃZ€qÐïV·s‚—+èù5‡\]f=Ô¦½~ãEz7ê?bpv=À8æmæG­&óÞÙŠùP÷µ«1ÿ<.ö ë Ì]|{°õÆzLT}þª9ï6µ]ò×2Ìß¿ëÿäO.hÙô¬Oî³ÖYø»_»Þ í$5tQATÑôW´ ¨¯2Æ4r,¿Æ_íÔrÓÊ\EJrDþ†!|õéúHQ™ø£7ø‘<ŒÕâ_ïaˆƒGëÌP…76Š>H]ôUhPšSi–‘êÒòª‘,Lw>A kr.–øµÎ4ðܪ6þt%¹«ç‡uæG •qdï0青ЭtúrôW{9N”£\÷7N{&"’wX¨vøýE8[EÌÉ?Í|Ö$›ÝØtT=ˉ…Ê¢è¨Oìpõùu¬ÞK"°XæñDà{DןÜóe£.+j…%½DLŽ»«Ç×ñÐÎôBçŸ?ø*vqþq,t ³¸l©úºé!~}EÿÄ‹ò9øU“Øc<±€ÍÙŸ~,V#‰†Ã½c…æÁõ`Õ|*úÝÐxÀ¨V à Ç%SQ4¿ÆOta¥þܹ·yWì—ÑÚ6Ã÷w&$î0§ÒÊ?<ÍÆ¡àÇií%ùóád‡ÆÐ*u([A0oø+§Ÿ{UrI£ð^`ŸÀÓT×È~,d7|Èñ7{ô9!îuýÛûsâb0/}ècª|g&òÏ•¬?ˆ?*a À_•&#¼S5„?ÊÚu„שOÿÄGßõoOÁÎÕ"ºŠCä7WÝ"øhΣÚZ'w°•jö"X™.ð$‡T>ò*'Xc*Ôg±-Tzvûàwñ‡ú+§¨,˜XKýeí*+£ŠAÞt4¨k‰?zÃŽ§þü•r'2ìL>>"H.ÀÝŽ½¿99Sè_Òˆ»¼†¢µ(Ý ?¨é ‘Ó¿½&o“™Ï®Ù'±Ê“ˆGܘS2—gÝ{Ÿ©¹_Ð_Í V?˜ŽùQCà_³p†3¤âÝHJÿööe¸¹}Öú'FuÖDx­ ÌÛx·6žŒÐïÄqá¯ÎÈÛOÄÁ¿`o%±L^Ëæm*¦úu_IdàÄ —íð¨¯^ØI\yí+ô'ôÁn/'þÈбe‰ZJÿ’ñ²JàýÞ¦þ+9g¸~Î1µQ–0‡Yn®DA-`èn¡¸:V6b"nRæ“B;pCm¤þÉ?^sâ«›}ø5¨~p®Þ‘¾L ÑQ5FѼdí¥~p!óXâQu¹…I‹e]]I˜q՘ɺ»ÁøñÁr&¶”]8õè ýù»™Çð_ü⬖JO¸3ï´~¿X×´4“ººžÐùÄŸâîð"ÓµF9£¸ÑÐNÿÝ‹A߆¯®iÄZYåaª.…ŸÎä pº ý¢ö9ÐjÊ~|á#ðW]@ëÚØ‘læ$™ÂL«3L³5½5óÉ:r‘fÖ“6k% ã,Dƒ‰°çmɨ<‡ÉïO̶Xuç½:Ëp´À}°û_ÌE²-#?TŸ#*òÙ1ðìÝÄ;w*ÿM2Ú ÌËâ°ˆ‡g_Û|\>ÊþQS ¶zšMBÁ×ZjqT.Ä¿Ÿ_• î{-gc9{6˜úž–غñÌòƒ©_€®36ô4»•O½‰º|½>7Äö-4ÆÈ‘Äc¿ÇU åèwÏ¡’ô¿JCf ®}É*mQ¹G·ª ä?,SûaÉœ\I[yEØ!Îbv#ϲ ùó èv÷¹Èåg±,²'Û­ÆÄƒíÞäÏþ%Éù³‚pl'±÷Òj •ÏôÖ÷}sÅž†À؆Rˆ( Š¥8èE—[‘¨)™ ~<Ç›ÞÇüZæ!ZMÈÑG;u˜a­S·ñ㫈 zçÖWÉðVOØçn0b6¼ÏZÐh¦Õ ýî;ì|4[1oc”5Hu£»Ô3>³È<‹JúœhÈ6«®2¨ûCTâ¥fVvå¥ÙO= >OlêÏ;Ù>ÔŸß¶–¢(NìàCÆa<ýÜ«`a/ùé Óº F¡*|Oàiäê¨GMJI+ù”xª,ÓnPÈ›~#`ë>Áb%£þü±ÙuLYf忼ÐLWsÍ8ô§ø3pÿ0´(ñ²3¿ö¸º%K™E¨ÿÈÅ®5a…÷é¬u( ¾›¨k=O:øq˜k6Ѭ/g³½¯¿.p¡>”þ%qˆšs:ýÛ«1qk¥5 üHBÖ¨š]ØÕ†ø#ó?ZÁUf£V\û>žØi9?ë U›¾ÿþ꜖;~<×Zê±÷éëý…íW]ëpã‹Q„ù€ çt ÑÒŒdÐW ¿:¶ËüßïÚ¦5¦þ£,LKjT:á©Lhìc~mkYøc?ñGÈ ãß_~¶˜ƒEòãŠãàļ©ÿ¨ª/¥‡Coæ>åƒÝœæúEú=Ý–›ðÝ®'ŒÃr•R•À¤ÊÄkÈÐ-?zÁ_åfzh¼KÈu&³Äb´5þ ÒNb§{:Vñ¾™Sí…¿ºŠeÁÉê‡ÇóóþWµd¼oäðAŠŠhbØ@v>³zÁû-àaËbû–’W9¢ EȵiÚ£=ì“ x‡õ?Õ˜\HZ<ÇÉXûRdœœüþö*§¹1j¶Ñ?ì¬ïÒc¡B}ÁåAF±Î8`úTvpïVKºZÀÎ^Ç:IµÌ ¿û†Jš’¡êwGÐÿªO!ÚÄ›| |ìěً…ˆÄMú‹[ê œ|e´RÉtÏ`'"ó´3[…‚L#KäX”Ƀ‰YòÃþ¬'"šMƳ‹j@ü0 Tw‡¿ÙK%f,©³0këÀ¾{øâõÅ&}kˆ­›Ö“ýHŽ†Ç‰/>«\3sA©À_Õ¢Ò  ñG#²![àØœùPµÑJ  þ#d2‰ñD6$"JIŽdQÆQ”Ëè_’Ürú_5²s€ÍáÙ’Q‰GÔP”.+‡ÉØVk•¶p·¾ó›÷º óDÚ¡ûb–'o_”ü¾ ~,³Ò£‡êN&å9Öð–Ý$ªÎ]UµÈŸOÞÒS짨­èüÍõ–ÈZ0}/ɬ×P#?V˜îeR èØ4ÃŽ‹éúÝ©¬/#³06Ã6 ‹¡¸}L4\º^ÏM· oNk ®×•LAz<ŒBä?zP QÞ:ÎäÀdÏ«è¯æÀãd¦¢î2wÑ•§þ*2üãñ`ó?z饄ú«çø@9¬¤ìFnÕ‰ósT‘ldžú=;–ë6s£"PC~jø«µV^:OVo8éKðŠÆKÀõÝÔo 7°¼&¾Ã:õFÖ¥+Jô»“Ð)Ûðt;Èì{Óãñ<Ófò,¯Q!,§ÉBÞê{ü”§Y›;›ˆ«¨?ï"cò–µoNnž·Zº–Ù‡Ð?EYæ‡2»žk„ëWWEtWûáîâÙu¬$¶/þË)9?ë¼Ù@ùÿOê/R?T7÷^«N¤âUão¥¾A@ÿ’j0Xy O®2GKNö£LV‘?ÿµúóeZ1æ1E©“ªá2è¯Ü³úQGvÅQúÂõË Ë›ˆ™d>>„÷߀}íN·Ç÷ä¾Úcé«H/©‰  ¦¿»â<ý¦I®Æ~'&Â#”£þÜüǼû;æzXœ®æX²*•ÂÔ¿$˜!6ÊêÄ1gÁmD/`obr PedÁcµ#ƒQÑŒ=[ÿÓøãŽÄ}!SáùvÊÂRÅÆWÚÀÊ*`%öÓ{d5:‰Ïèb^ Ñïûû>hôÁû›ÊÞ}ÀšÇ"jèºå€…Ÿƒý§ÚÅß®cG7›C@ã)úÇï/ð'oµ(°øá`†*ã;óÈ“òÎÌbeóÑdõ6§ÂˆGA/pÔÜ¿>÷€Ï!BãTûêåDv¸³j;t‹¨e÷ÙÃÔ`êwš)å'áƒMéˆ6ö,ìÕIV] ÏÓ™-Ü=üð¿ræGIlÆ`rʼnѾu"âŠC?Ç2¶#¬N5òq²YQv^åùoäY;k/Ö~W?8Øè%ÀU$%«ñ«p‘Oqú_ùÓÿ)ÊÖºTW Þœúóãd\¢©Läý¨¡Fÿê¾ñŸÍLdÜ‘ÕÀÔ$ð†>DÇAº¥LUÊLïy°ay°XýÑ5ÝÁßÿTagè¯,«¿Jµ7Dýù8ãžlOîæº¤Óà‡ óy;&κ“AèC¼ðœzÄ=v]k++ldùAe`_|ñï×{ùN5”üGeNî ,Y7ªYü課ښmã~o17 wÐmÄÄLbk ÞH*]–Ñd¶„µ’üyPÇ–ßõ÷úhúï ?RíÃÛð#©QNÏâ³ÄÝÉŸç¡Jo uâç™0^ž;Îg‰£ª£2èöÕó‹Sf.ΖŸéf%礥§f?+=»Ø‹‰kӭ峄+½KøúÝ…V!ve õˆKðOJË6ÁôW§ô"=ïPCÎÜ.õE.cU/êÏ—‚hQ™ v‚î»s™rŸ¯·P›“ ]ÜIôW«àZ f•–ƒ3nD'a¹³Ò%äâsÏÞhýI§¥‰D W¨Âîoe€«Ä*¯¡nŠjÍPtT¢ÛÛþožtã“l ò¿§&~y,‰ª+=×ÑAj} ? ‘Ý`×&sÞ†úóªñÌTÔ¬:É"©b!”ßÍeyT~ÜcâæCµ ü˜hÍS½À9àGDìý4â‘îV&æÞàô ‚‰{O~å‘WÓ`ýÛS2'¦™§‚ðaÕbFG7ŽìBDfþ>¥ÿ®7=m+“ßïŠÎöz ÑïÞ–2_å<{}Ÿ 8'ŸÈÝM8Ó ?éf'þ¨KYœ9åO¹Ê&ú¡œE»û’jxpP™üîOÏõä?ÊrÆÃQA¿šh¶• Š·N¢¿JÊIªƒجžÊÒf5+«+}Fnƒp/©o|DnÅ“yÂIà¯òÀ7½VW˜_; [Ž\i sìèª`øÑSô‘±Èn5ƒÝŠaî§þã€}Šþ/­íp¶r­²{¹zº’Ѹ}#£2~AoÞHöÞKX´àH%õá2ÿ|'ùó &H×ë)nü/}•þ»^ô¿*+Jˆx†Ó-ýK’Åè€u˜®Z—éjÛ´ÖÔ”‡Ù®JÍ—»ÈÌ5wêûÐI÷@ßµƒþ»!;\ÿýåбj% ›`KºÒ©˜Y\¯NMVk³7½ÑêË%ò‰ñ{˜î|-Ó™È[Dê7ð·ãÏWA!^þ‰“ðšßcM=ÑéO©Ñ_…ìBÚ3Ñw ÚgþÒ!lpxu&ÈéÁPLm'[ñ…ìp¸ïáX¾ ?ÅSw§æã1ùhX¥]œÇL¤é‹‡r™7;ˆ޳Ûë¼k´å§ù“¸-®ÂÙ~6,&µ.èæÆ»:þ¡)<üSt+Á€Ûô’²ÿ'ÓzR# ñÁ"ÞàÂ\) øÑ\tfžîæîˆGÄ2Þ&¦Û¾lÀN%§’8£ óÉwÿtÖÛÀ_=3ó`™;£Jö㮪‚ Nÿ«ôo*–¹>ÜÓ-Þó[Ä¥áËŠ0¡õO¼§}2É‘ð93@‹"*%+jÇ‘€(«:ñC_®Ò›l´Ó“±0žñ+îö(çÇóZÈüÁY!Ö7ùQãÐ…¥¤~À©éˆ¬æ“1ÉFþ 1ÃxSº]Ñz€©¹1ñI!X)§CH{ú—ÜûN¿ßx&+Ï8zàOê V56È”ôÙB¥^Kòç“íùös2æè‰u”3™‰h᪪Ñ**”yú±oö° ½ß<Ùeïçÿ¹T|«33Ÿ<ˆFÙCÁ™ÔG´/«S§r›³”+ ~0µ%g‰ºJ‡˜ÿá%ó€ÔÎcåAþú‘Z~L¢6²¯å‹²5 ÌÎV8ý9ÔDËúnZh… -*;ÐV¦ \_j&$t— ‘Éè[–‹è¶ uí±î¨ï> ¶u ÷}”u.±Þâá7AáäËéY¤b[—‰?›geP5Ý4ðã8Øý¶ÑÍò•YÀLä^G¬WÖ;“+œK0ÿ£(Qá[º4F¥~0'§`ñ›7‘c.:µ \ß]ê?rŒԶ«]2Y•Œ®HDYÁ°ÙöF8§ ÔøÙ1À¡bp‹Ÿ•ùó­øNqðË Q[Ïìè¯Gf¾ÞW´“‚w¬+gø7ó˜ÕŵÈe*½Xt’YkwsM`F{W]ôW¾ å k ¥ìgd#ßÈ>¼ÝËÑï>ûŸÔž×Êé™wæ ý£þîëý…íWE‡„ÅÄÄéº\eµVì¨e”7èáQ¿»^k&æÊм1•àÊ«ˆôÂ6öÒwf”F}â}ø«¼¿´Îb5ö(–f3ñë>Y„þíEÑÔ·3{ÒgÄS.§þ12ŒÔzÖT€d$Vï ~<¥ÿî1d4vÖTÌ”†§^ S6 üˆ¬Ë ßMSrNd{½š(Äœ‚¸­tÝa¦¸ÓwüÌd3wÄ{2Ò QOÝdgOGŽoçô¿êJüñýîÈXµd8üè.ÆTͱ®uáO›mQÃÒ-„Ìtug;ÿ½3ã«è¯Ö‡xIf ¿Ê^%aŸnƒ>±ñb¯™ùé UÓJBÿÝatê+†~·>Œþa⸰%G°€×A¯)òæwüUbòeÉ$&GtÆé„uÙïô‚ß§ßN|>‹;Øå*h\7¡¨*H.ý +ö"þ§¹v9ø»Ã_ypÞÞ˜U©O©ˆ_ÃjÉÌŽÂÄ!ãˆe„k<ü}]&V§gá3<7*!|Ñ_m&÷rɬ?ÉœìÔSžB Ôj6ëXL6eñF+êW3é/:ÙEäãë núÀžŒ™ƒ…éµòüÈÇÖ;-­2Íð¢Yˆ7­yŽvtGoF¬½äg<™Õ´þÊ៲R¥ý túi¥$† Ê·ŽÑsâ=ãOßP‡h`ùÓ8uÉOÜ#ž†éµo¨?/i¿áww­X0m%È‚õ%âœG_œ ãû÷L¿)þ€iZ. ~,-3Þc£R>bD"{¾…ê™NtòL|SØþh…·ØÂỨ䢖ªwµ*Xü±FïD_ñxd8[ñž‡7oZµ\K˜ì¾ˆI[:H¾ÂnéêëJírg>Ioú_£J¥%º?bêÛT©öÅó¬¬>Š ŠÉàOú¿ûõ­°T¹óY«ðCõÌÏÖŽùçSÉ4…èµ^•Ýž¦å;ʵ±üÑôë?»À7¿^k VÈJ°%EðzÝE|ñX_«Ï%'ÒZô‡¿˜ÿ˜(æc žííÂÚÐÓÕl¡{RƒÛ–ޱ•dS¹XJ”Áûf)!~³Z?«'”L#Vï‡/îËÉlŒn!'S™÷|ªgŽ0'“Ui-Óž¹ ö[71åOÎÖ~lðúĘïqÚ,Íɰ/ÑôUç”4 Cýy=/~ý|¢Äðö›òçïQ~âŒUR7xóßbï+ƒ{K±F‡E³Ÿ¬ð¨1’• ½îrgIðtš`‰ÓÀ¢LU]QÚÆÖŸ`Õï@mÄc5äŒz ¦ÅÐÀu<Óœœ}g²U/öê†9‘¸èOð£%–ç&Wô‹æ±·±Û™?ÕN÷¹¹ŸÔä7;)9NöÃéõœXd )äñ^¤1¶•>÷<»¡È¦µ6LJ‚—µ÷èwg@ž[¹Þdòçƒðå ?:‹eüs´$?΀»¸ã×ÄŸsÅñïê?†=e_â˜|ÿ1®(P†A¼O=Eb m&^nE|åÚô¿Ú cæB‹pTv:¥O¦‰ ñ\R0°>žIr¢¾ûtÿ8`&ÄÛNG­àjµŽü¹;=Í—£ó¹#–ÐZ#•“xæ)üÕ(•ä\">œÙM‰IM>÷(~@t*ïš`ñ©a²ëT[º¦’ÎÃüÁô/¹Ä ÝðÆï;º*ø«f9áTxýÓQæ&ÿá~Ô‡­³©iß ³¦ƒ&3ú«]dï£çJ~ìæj=Õ p&³e³eŸýU/ί;Õv­y ›gÉ\d毯U}Óv»'«*b§»RŸwýne:]ÃÚ/OÓyøüÕöÀÅ ÕS‰£ðWwð¡Â[ 8s1Èê ¡cIiø¥3ôwLïúo•Ô•™øã%‘R˜¶ŠD\£ÀßIø6e‹`ýåŸÂ£ç$¦+‡ è~L?J»jêշÒK'J†­Ô7î'{±ƒ$àëŽÛq­•t³ §šr{ðñWSõvð*ÑÌXŽ?àX3‚3‰¬¼ÀÌÛV>réy\=\÷ìò0W›˜¯[Ê>n îzHLíÃ)sê?ê¨;âVàÿ{_œ¥~0ˆeñ×jéæ7ç"ì+Qú_äÏ¿EI! §hºVm4X3áÈ®†ýR|ç6­•Ø„W^ˬ˜Gl×gP·×AÖ à¯DÙ¦¯ºE@¯_v†¿ªcî?Š£6N‚¿ÚDæ"YLý‡¦;ßÈüóèò:ù„#àÇ"ÎD%U“Џ&òzˆx¥ŽN¿7üUùùëÇÿͯŠ¡àG=¬ôVüA‡¿ò£B/1§½ÌL,õ€|¼AÆ`:ÌшŸÆ†Þ ¿þ¢ÌCæ¶©ZÈîgj¯öõ,¼Óã7þ5òçKà¯Ö‹ U{èKt‰E0N=±¾÷`çâòk;þË5‡h¡œš Šž@¿û [¿{[DÒåû˜@gd@_¶F;/M*»‚dñâ6à{yã‘FÁÚK¸»Å¼M ‰–â«2›m¢H?¦î”å N¬fbWU'þh_M 6ýÅ~‘ˆÌ´ƒXù>28Ù‰?s³þÐú'>Ó\b©ôâù#›‘ulg¿ç°‹ýñCa÷ÀÌ0<Ⱦ\ä“·Õ ˜©†Ä Clßj£ovX˜¥dñ©w(õŽÁ2XðW`v<ñSËS×ÐÊ‹OÞ”úÁBxг°ÐÉ%Ÿ!c¸TôÚ© 3šÜ>‹ÅßÀÎlgÖSbÓt,…Æi¶}üð„¿:†ísãûî€x½Ôo`þ@}ë7O¥£³¿—S×€nŒ¥Ñ§¢û&++3EœL|$×Jâ…òÔ—4±ªPSц=é +¥ÁHAë–S4ýæzód~pÖ—¿iÂŽkàÌ^ë<]_ò'q°€Iè»ÝžëdR¬ìuŽƒÙÓÙä{Rá/Wµe„Àëå#Ã8‰ø9+×ëŽn!7¨T“9}Éý¶v}nÿä߃¬s ú©NäÏm8¶îè¯2ÿðgeP5öX=1ùóœ\í©™ÓzI?3,/4EÐY½±Þ0ùã-3¤’¸rR¥âr…£kÈV+;8œøc"üUTzi;)þóÏkú'ƪŒ÷²E­‡{.o%rå!ËSϾM\3|»@o­µL/ßl¥cµ§•î2¬¹œ–—œªÂæ<»MüÕN½3sU£ãõ8ú]‹úÁñ®ÅhÕF‘ãxF?®Þôoëú‹ÿWæOý©v9É>i®3¯ã á×&êîÿD¿»‹ùA•ܯÑ_…ìœðu×~öë;mƒ>ÈPTTnF9v{"úÝtF8¬­zâ_ÌŸïÕª’Ï,ˆG鎢­‚H"îèôèÜj1pýÛm~ÔDòç“ñË[pÛ0¼„ÙS¯…Ö¬MÿĪÔ¾cÿ’ùúy=–<~¥zp6žwi|Šè¸VÁº|Ä–¶€%›)³Ê2Aà™ûñî¥óÑ_ÕGdz‹+îÀ7z~¤A‡T‰S¦÷7ªczaÖý?Þi¥ÁŒ;2'ùGO¼œ2dÓ#ƒhNoÆ?Á¢“|Ž£[ ÕÔ<*žñïþyn ƒÀ_í¢á\|¤Õtu¢c–ÉþÊ+´ü¸‚•Ô!úË\0–žÂˆÊm0 R‡1q”ÅÎdªñøÓ5‰Bzc¯±Bg^Ä:—Ð⮕„Ê_µ ÿ•;y j?Qÿu|Ëú¼}]@€øŠ9´rx#Ôý•3?êø[‚|KEâÐû'bºjZðòά¤Ä~ÉC9ª£ª5QÈ):>Gû´‰X$×<ÀUOb©Áâ¾,Ä=ÏDÍÕ[‘Žè –ò|Ý1uOTú«¯&ÿüÇC²éÈò7%çŸm°ÓÿÊ -ë…P⻲Ø—Žæ"¸pûºŒÙ)¨<Ê>÷€ùQNÇ’†àÓar¿¹ÉÇßD?Ô[E…1ÙÄÔšàKìÊìæf슆Õ?‹d¢»êÉħÂ0@}íqTDÌ¢Þ¯ŒõK[ þª3šØ±Ä3¶5Wv2Vbè7×›!‹€’O¯*q¯Á'o²vÂà$_þ†y"©éW¿¶é*ø–’l÷uç>á­îCIth]dÐûœ—NHñœ µõE©”ß§œåË]>r´ÖZòuùo;÷2‡ÏÓ®a'™Æ²7©ø„ØäMËC·ÛUO/öþ#ŸÁŠ„‘µY7TW5á©lx:gzÔï®ô®rðOï@©Dö*+ Odˆ oMÃßÊ*»ËA÷kœÙˆ>*pæg«G²°™ßJBÿ«%°j·™ŽÕ†øåˆ¾‰Hæ0Õöµ©n|ÄÌ“‘œæª:ÚÃD³Kñc5úÝúô¿r&T7ÃGó±ò¸¶ÙÛá¯¢ÃØ]C7ÛÕɵюâLW÷ TŠÞBÙö›í(oâåzª‡â@àÿ{_ÑëwÆW«úçhä?Æ‚uEm‘Ò¨É5ÇjÑ F!4X«¨*¹ôK7µB«"‚ì På`~mbðc)ýÛ›Ó?±•XlÄ6‚ô~a¹ðT±þê=ïÌa”°{d)³Ÿ^5i Øð²²<õA°ñW“9ÝQå6¼æK¨Z§ðkQð#?UÍ É|$‚hEþ£¦Ì¸³?^c|±˜IYœìLJßËîa[ãpÚó«-XR§¯ÓoÄaã©nØöSüˆ §!V¹-ݰ4 •3£'òO®|…u>Âæ9ý§*àÛ/¡VâÔOóJ8´£(»K|Ã\ƒ^df¥~pRüðÅ·_~\åס(Gê¡e»ûg6"^¯ÿàžBö#z[‡œÕÞ޵ˆªÎÃvdýÁ¸‹°4Û©?©fu®Ö•n6ù@¯Ìس¦æ9p¼ÞF;8î¨j¢™I^þ0BmÙ…«¬ü ÙwòH•ùœ¡ðWwµ·ôOœÂîxŒnÄ0›øÎYæïª8Ü„*Ž{¼£þØ»UàGnX¶ë<é“°q±ÕbbãmÎ’‚ý³Øh){³ž”p4×A$L;Býà U„šåôØ‹`×"»Ð‘.îGT4CE©S_Êõû¨‰äÏCzñ˜Xë’æðºªu¨–Ò?19ÜÒyذ¼ôò˜Eþã¼ê€¾kj® à‚nŰګøXà5úžoÎbf7·à¼JÔGQNÅeRkKk›Uþª?\˜ËåMý` ëi@ÿD?î %ùó—äÿ×{9eVQÿAÿuè5–¾Œ˜†Ê›»oõR¬èÄ)¹ßEô/ñƒ¿JF-ÝiÐc8•1U1fân£~0h Qý‰>œÈ/üU',mVðª<󣺠[M£³2`zm3{yšMô¿ò€ËŠ~xq&ã0¿6½úB¥Wм¡®ä?ö}¿ä]Jo™øW)èÃÒÚ~OÞd9uxϨÿxFw©Ìä>ÒmÅŸ˜a••K€Ë´­Ej/ªtOY=pÿîë—DV8Á²œÏ•ô¿ªDuJrj×ç¢>G6f y•gT¨làj©NINÿÝSLn_H¬ü¯$3Ôöë5%ÈŸðWð€jÂÖ_°<]K™tîeÌ|ÿß5еÛvsµU|A¦ÓôV4í¼w>¨ Zã¶WOþ'õ'´ zöÀy¥µøÇó?tø«ÉF\ª›Ñ×ÉŒÔ{¢‡ûzºÂŸ övýüËeZ ±Þ¾O)™™\$ÃÇÛ¯/dú3.§bXjó‚>g·XŠ?ûÍâN|Ô%p­A»Gì~cæGÕ‘óäµ0^q²~KÿMžÁßÝe…e* ~”'¾à%>«3lŠL%{…I•ýÕYüpælƒ½¿G¤”þª2‘ó |&O ùV梟âG8½5—W‰ÑsâÕnÄ×)LýyÞë T-½=ß%U¼a{΋öÏ>h¯‚N0§\yÁþ8,â)·#þH‰§<†~EÑr=Á¯Þ‰5uªÊF˜ž²»þ!ø‚}\d$Cg; ´-H|‘ëuäw÷àƒçóî,ÀVëêñˆ¡ÖÛÍÄNESËea¡‡²ÊVxmÉ`&å]lŠß3[‚ܽx ±Õ‘ä1¡Y[á¢*«[¬ì2¶² ¹ÉäJš…Š_ŒùrVy,ŒUfê?vñš©À´FÜëtE×à<{!¬Û<ÿœ€/(æR?¸*Ø}:_ΦÿîP®T¸³‘gyÀ€ J+^“I§Îü(ª©ñ¯ ‘S^âõWSåÅï*^¢¿*Å}2íü¸ »ŸRIÉSǬ:TÐ9SË“[¯ieäÏŠ2¯ãñ‚Fð;ØÂýÛ›S;Û˜'÷’ª ýxúщ?ºÒq$Š­î0ùoÐsA¿û¼«ŽÕïÄÌ“ÿèwOª¿x.Cä?æÈœ·—ă•ɼ¸À…Utcœ@÷ߺ–r­a†NNù V¾¼•–l÷=Ðc¹”G*·õžlHG™*ð¦CÏ5«z‹§~‚:Ó÷fië%šç§VZfǯ%îh µ×nï"ÒÌþƒþ‰þÄÃó¨Fôç ÅU¯äÍÀ'Òžúó`7“¨ÌÔðW)‰* 2Íð!øqÂrÑ«¥,Ým#¸òÑ1• _ðí·¡¿ÊÏsÿÀ5'šidó`ý¹œüG.xáZx>‹¨4©`f±Êº à-¨=ÌÀ¼ò³(xÁ&b̽àG3{¯ºIÍË,Þ¤œÒŠ(YÐæë½õVøÅ™ðk»mQÌÇÖŸ®á(“1+ëÓ»2Ÿ¤|bTWOxµDMÇè•ÃvçdküÀ &Äî¯ü½¤¥ Ö¿ýø¤æýµeÜfþà#ÑA{á2œncC´,F>#QÖXJUÉí_ºÜ<ú'ÎáiÿÁ|g$ƒcž ÕQ6¦þ|qMØÔR_?t²˜×ôY¶„Ç(Iu_³øñIv0ËËr²üÕ%#Nà þúS¡ý:é6Qåì‡3 × Ö†N 05å2¬ëx¡z°úÞôO!âN)f3é½2–èÖÝ™Çt TJŒö½ žÏ²ËM©,O®¥¾9ã§øKOE—ª³2 y™†p0E±ÕáÀà=ø^eà‹±Vk!øÑÌÜþÓþ‰Œø¨}‰?`Só³ˆãÜðõ† *Ší~B&y»q€< tò?ÂzD#lØvÞ½ìdäÓákuÉž›ƒÔtd,»ò+¾—·iŸö %B^7”'Óþ*¸‘ K_Ÿ]º‰Ö…Õ½†Ýžã°A|†;ª Çv;ïLß-nšœ¦f·PðãµfïÎÄRMAÜÑ€®i¦SiÖBÕC–ƒÅÌ%—1‡lsFE…1Ò!ž®&ˆ£ú†Geùó.`mf|ìûìTT5›h%|1f–¯Csú »|‹nXnÖ>”¯‘ÑKÝ +ÔSâ/y_D qÇ)ÑÛVF9˜‘ɲìçàB–ÀÖĵ¶«#VgºAM ~í 9”šðcûÈhdkûH?óQ*5ø±:Dÿ«öÆk´‡‡ðOÊïդæ.ùEV"<îv?jßvt¦N£œU†­+Y鉨‹cÓæ±(*–oV8Rf§šô ÷Xx-2<ÜJªIúYÀ "Tt’ÝIM5³Þ±°ÏÀáA0ƒ+ø´Ö[Ps¼ bAÒé¾úPâçì°~íA«2Ä£éà­Ú¡Œ’dѧ°UÛàìœþUUˆ¾âÀ±MäÉ%³^ñéqÕuy?ð‰L#þØ~¼ÅÞÇ·>Ê(^vÁ†½²Ë‚?TlعPï¾·Ó2ð)ݺü¬ð ^Äð~ùµì²c°þWϨLCÖº9Q÷dôͶÖPWôW½™•Î^Èü¨' ÜÐhݾŠÛçÔ5Û´¦Â*¼Æç¬z(XÿÄ9xBíåïä?ZRk/ÌÖÔ{T¤‚q*9ŸûôsfÇqõf}¹\mè÷uÉY>ÌjIjŸÁ#>);ñž\$ê{ù?©ÿ¸ªýL¿ûDódÒlàÆÿÒ/µ+ú$#Ýëˆ$õc´¬D…ÀI¨ºBËþø¶h Ä"Yû÷\æ#Š8 Ï¤{CYD4gþyú_ÄE©?$ëðÿL(pŠ˜uõq†?–\f“…äzleð~¼.M›ÄüZMîÆßÞˆ}o“üpú_­ÇÂÞÂN95ýdf΄d!B»nbæ.&Óó‘j‚\Á¥|ðöÂ5•Çfé¨?œœš;ŸUÙœ÷Süø %#³÷ˆü‡EšƒÏ]šYÈÈÁ¹»ðcÍ9|ÇHl#U„!Xìï×÷Öè‚×Ö‹ïw*(~ƒõêc.À ˆ·7D•C;ûot=QØvþ®²YþW?â¯"R?øYúóó9ȉÎå9$?–`ûÇ¡¸õ ÿÑåÎ0C‡ŸiŽ767¾¿Ìÿ]7Agƒ˜šPƒ¸Ç ­1ñÅCP›ê¬ÖE¼”VîO±ú5á†|P,ïâ®K‰åäí -þxªE?†³kCɹgVIá¯/ñ¦ÊÝâ9}•š«z0{Àåq<——2.*­r¡Ä7´˜b‚€…é…ýËJVcx4œ;¥ƒ,1SÇQO=„ëYÀߺ©“xÚóØÃKæy³®X£/ ñ€gÃðs+óf/ÇÕE_µÄÉ=ªHܵÔL¿#óqZ•±ò“í.G^5YO4U=¨…8"BÖðÛôŠ.ÂÙÂwÍ$b8D~y-š[Çw? “É5} TLÙ ¦ ;}þÊC%?è¿ÙCOãš¿³ÄjÅÐùºcñ]Ìù˜i¥p"Dï‰>ŽÐ-ãW”<ÍŸT¾uG½ì"ÞوðúæzÝè_RºÀ.UÀî?V3¨iU§~ä ø‘Œxk1ÓÆG‘ÿÈH-ÝBö´zåkLHt¦: ö®äÔ_èý¹¿ÂÄ3=Ô*²u¾Ì£:Íœ¨ûÖKµþíÍè~U˜ú Ž¢ .Ðý®þÌþ"ñÇoêœ ªW¦g§©3uæÄ%^ tâ‡è¯“ÿ8AÞ}jÇ3ºr0¡Êr]åšk­´D™ÝàÙf¨Ìì¬¿Ê ò‰y‡<ˆÃf©Ç²¶YÜÊ÷åMTäÄ 9©<ŽJj«}Wi°}«:k+k˜/ ŽÙ ý^Pÿöyº§èNýy7žoU´2ÈŸÏå' åÊ®5´[¸š¹¢“Ÿ)ÎÜóÄ3±ÈL}²î Á?$[ð¦Ü†[ý$n†8ƒÿÆo}µ,zPåç[­Ã?®ÿø¢íÕÇá˜ÿQFhF}N×X­!ó£ R>•þ%¿Öw¿ÖQ, þÈO–õ°¼lXbÞWßN¡ úÝãÌÌñÍùýÙ^-aÔŸ’ŽŠs"¨ó?RcMâÈ?d¹Lú„q"Õ\ô»¶Ü‚%^çÒ[—M5 JêKL²Ýô)¯ÕY¦—3eä0¬±"ùíÔ¡¼Æ o%glÃøŽÇn½‚;wº­ŸÁŽIþ£ üËèŸÆ4wòs>2;ù”Šj<|6ÓÆ?_Ã;_’ìÝ_xœøS漕‰?ºýd…‡Œ±¼%N'ógæ|:YŽÃV{Ãêô¢Öh¬Š3Ðé»rk:ŒË'{ÿ°É{ú¼•a—òMÊF”1lÐÁœ÷o#½rþ„Ïô„q±u(øqG '¦ÊiØûQ ÎdƒmÓñ‚{r—]àd–›¹±þ‡à˜rasþ»k‰®²;Å*}Zˆ8ÄèKþ¼‘Ú8µü0±BûÉáúã§¥3mû¼• }q#g:ü•ENe=»z„ÿÐÿ*¤Šþ7|²œ¶Tà×"MèæÃâæê;©ÌÎ@Ö¶¯}üùijÒ3€ûQó¾ ·E÷:ýÐ7Oz|õ¨ðoˆrÁíD'ÚdÅ€€KÉ/´!ž©Ð?±({2’øCqíCä“ê‹6ß\o°Ì¥JÀîï¤KXmî†iät/™OüÑ”Š¼©ôO´¹Þlú'v¶òSÿ±ÛÜƉn#äDv©>2vàõÒÓ¿½ïA|‰N¨-Ü9c9±é=ÑÃ~@¼üÈHÎ|·íEó§Ìrì Ctƒ'çôË=§>¡a<¬þcùKxS~àPJ+ç !ýÛë01ª*ý³R¡ ûV>DåoÑušùV,¢ÌÉÔ{ŽWtÍ—ÃdPw<ú'¦Æ«+ŒOµšþ‰žfE+-ú«mô•ß@n«:+ÛLŒt»ÞÈç”°7ªƒôOœ &¾"ûÑ”=ºiN Ì,Õ{ŠþR'þpþ5Í#Ve×&2ø^àG {z®š.WD¬:v_º­T‡ ì@œã_qL:^Ž3uå­êØâ0þ{Y+L¿kémþ1~¼×é›°óu©?·âÉZmº·7&ÿ1¬ü¯Õ¬dþàß"XæË2²H#žêcõó¢Ÿl*<Åð#ˆ/ ËöL“°™×e#ö<ƒ¹š8$¯>ßp&»£þ£.õçwÃØ¿}?úÝÒ™¡ó|É8|š2ª#±tªœïÁIÖÀ_ SÊ‘2´¾ã!W[Žþ‰›d]<ßýüü~½ Š$ÁÖWVÿQc5!Ï\‚Õ×4Çÿ?ÞjåÙ±;LÞŠŒWë î”0]xJû¸jaØ×}0üÈÐŒ<Ì!¦È…\›¦Ý2zòƒ`’ÞaÍ“‚Žmùµ(žã8ü½*ê ~tzÀµ6ó3ÿ#´j?çÊ~Zj#"ŠÑUQÑdæ×Ɔ[µHÄ®Oçš1a›Þ€q[Ya"š'¨¥Š…Ê_yÑ?±8O!øá~Ü?šJrÑ«P\‘ñžÛ€—Àå}`Avó-ñG³^(øqK‹-fÉA°ˆ=A7lÇB®çmþ~4ÄÖ Tkxëßc–bms¨+ Û:žµ3­=¿ØðÝüsoc¨Œw’ˆë}è·˜v‚}“LÓHkm…‹yNïªCªñÇ:>1"Ò&,ôسVòÖô?Ï$!½*‘áIÉ®o" ³™Hdµw‰È(,³Z¡ñéÏôm"„ZVbk55Ž…àÂná×S‰Èž-Ð~sÅ1ðWõ9ÁÁ4f†°¾4Vú—䢧ï@lÖؘô/9O„T’ÿW"CÒüð£ÆâleWÑç›ë ‘y‰Û|‰Ç¯Å'ãM•ä«§ê‚ât2™€·ÌÙXdy©vV‘ü Î… È›(i_¡õ6ÿ<…þYAŒPo¢›Z ãóß*—kÄB'­ ä©«2㙆þp<Øêc(׺ƒGУEe7}dšu"üÕj–>ÃŒ&¶þ’Õ@áVD Lj ¦Ò«ä$lÝ æ$uýN„£¹|©Í[i%%þ‡Ç@¥÷ø`ý¯S‡–”ŒgmÓdå…‰ÊX9˜>‡ºGèŒÐÇdYîƒpv«˜ÿ‘]Ã+òçŽ~÷ ï^M³+ù³5ø±X¯Iü¯³Ý6òš'¬&®}ô¿ǤÆÂdÍÛÛí]ý]1]É×LµvÙà¯ÕžÍ}ÞÄs²oçU³>ñǵï_ßÿúŸ\ÐJ«ü¨5ÒÃ}s.¾€OÚ}úÝú¢’ˆùëÏ+2°¨‘×XÄüÁ{a¿ß¹UFÿöŠÄ®y©_ˆ~D£ ü~ú—´FuÎHñ‹üÕD±ÖMýG38mwsWN£77l¼úò2'ÐWÈGFØ:·@gæFÎì$¤¼Îí€úó²fS¹;å‹U©ÉŸ þ|¬ K-My1Zl•¥øÉpL3±žÇ±Ö‰©‚*¨ '}ŒÅûw¨/¸4é§øá¯•‚ºGú(0ÛËÈ• ^ÛuEÖk0J©-øÅ^|R+s¯ªŠ ýñ\6FÁÉû Z$Ô]à±òãé9Õµù„§da÷°N=ÝX3¯ì©‡¬þzåOÚoTQ¿ƒrÍ„½rê'ã=­ÆÛ÷D5€ú\Þr"¹á æ¼ì5Ô>ùz‰`¿N`þ`X³„j>±ÊuòMɦô†“N¢V2?ꪈd-Å×U׉MN³ê|øviQå?®kÑ᯼¹×)dL²â½oâj«±ÿ½¨g­êc5›ãÍŸÄsvA.ð”v°«·À:w±KŸleΗ3௺óÄbãÝïCC-Å;¨Jþ¼*šÛ­V/4üEà‚ÊÁ6íàïÃQË¿_×]RyW¸B¼…n†õãngÂ[&HÀ¯tƒf’YN‰–µŸ},¨EÝ~Ö˜—(å Þn*&ŠîL ¾ÄáÆÙ”3ñ¯bxÝ®§µÆJGf 7Xô†Šl&ÚT!Ï_‘lÀPÐã#ÝãOÀ*¶}¿¹Þ0Y–óöŽø»^…/5# IWâûTB$¦3È ²¿ÃQ,ç%°‘ìÇPüûKÔò5ýƒÍ:H© cŒ™D GÞå >=‚˜ÞŠî„…©÷Ø¢µ‚]”¾ý™ßáK—¨&öM>q׋dùüâμŠléÚ§»wïîƒ;ƒ»Ã 0 î.Á ¸»îî®Aƒ»‚»‚»»ÿoŸûq¢Ü$ó?÷Þ™g†L&Ùg÷îîZU«VUÑ _R¾×y¹£•RÚm°[ÊŸäá?9ð£¸q ZhÜ0‘I¿C7Æ$ö, Üf€¤éÒ¡ÒÅùâO‡–2¨Òö ñGzîm'¼¦UÄ¥Ð聆§q3ïéýåøºëGG…ë~œ–§ÉŸS‡È[]N¾ÌÂV'~ø’É%àuÖƒΦ¯5JRíqÄXÌŒöŒ`ÛRs ½¯=½4ý{ç¹ö@0=ù¿í¸èƒ]c†ý¯¢V!á<žÿ¯/NÛŠSì~°uÀÒÿ³ã0¡f–£þ¼G­Æ*Óé_’‘üy9u9õAù¬È¬¿Þ6›ùçµÀãd=“iéµ$T!®%Ϋ­µÐ–«I"™íþõYëµ½X·ðD¾`Ò QGϯTPŠÄ5P`YùóÐïì¯ß ùçz嬒VÜÂ'²ôWcy+ËzXéÖb3<Î+rmyÏ WæF&þÈOÿÝ]pÑv¹›×c1°©Yè%TN.c½{¿ßcm‚¶ n"ž<ÇÞ6óç}réðÃK˵¼9O‰ró¬zsË#Äï¶ìô¿º&J£ôlDì_ äѰ¬Wð5Ëóôúc‘w‘Á›mì _ˆ0ÿqAíÉ•ÄÇy >¤'GÓŒs?&’­SôÐÁ_=Å:nã§ÚŠJhíЯk7•|xÑÑåL2çn`dÇüs‹£"†h¨¯Ä#UÈV¼ûÞBÌ3†]rµ¨¦Írøµ–ÍÖ‡¬csÐ( ¸Û˜7ùçÞ”³zEæg¬î"ÞRÿ±žüy}¸‚Kìqç] ÃÁ†QeG‡‘ðBû,q'bÕDhoaß}‰bš=Àë/Ìl‹Ä§¹fŠä,ðcGÐÆ_S½Åø´ä·ßS|u­ TV?©´([˜‰ÍöÆ#ú0¹cí;cñŠ£ó]ÀÏN“S©?OêéΌ޶Ö_ØÜ› È!lÑJ™Y{ÁÎ̘˜J½Ú+*CZ’Ÿ?BCWÖû‚þj´L_¸7Tþ£?ùàŸÂ=Ü^~¡³`?tÅåోÿãoÖf‡ÍŒæpBˆ¹f0=ñ ÞâäþÚÄ;œ)ÊÈ¿åW¢q«ûýŽ<ŒŠi¬1_¶3ÞaHk º(.e·½ WúÑ~‘û€€Ñ韜Ê,¤Ç/¡ê"·b°jÞÄyx šP/7ß¾ýw¢sêHÝA®y7sA: HŠ 6‚ÌPã¾LCüx.XÿDå/í"oÓžá|†Îiä—y™r¢Û«¡—zAGÂöïfr» ý©Ê3Sáõß þ£Où3˜Ú¹º;ZÊ üx¤Ü×RQà×´G~C‹ÓÌÈm¯D™vÌIƒz­$XéAN%¾y؈Mfê„üdÆ\bÿgø8z Ô•Aø±W¦u©xvÑv I<µ­Á*j^Éì“Í¢èwñï¾\ï[~L°úƒÿ‡Do¬ÍOXC¬ãp¨‡ñ?øŸ‡mnôVÿõmÔm8ÿë×w#÷§dBÍú·[üU6Õšö¸–þ%¥É€T§ÿUÊ(ÖŸ¯·µ ŸY ”ONÕW%¦âfW÷)>ZgætÑN©¹Õ ®Á‘ÙŸ·¶þx± ¦}¾vÊ|°XútZ_.Þª™"uåS•›Š!6À\œ„aYÆXJ6ç¾×£`Ùßc©Úòýyä?šE ?2iÌ&AÃñkô€ßŽ‹§»;v•áqÐD“]y¦Ó´ŒÄü¨W¶$ð4WÉŸgÅÜÂùUë‘8‰§ù«ƒï6é|°—µÞ\óQµ;o¥ßýNt•ƒÞ‰ía]sàëME™TÛ}Oü×},õô»S~Á~µ¥Uß ›\ ¦å&°òݸ+P^ù`g€H±ð‚É«‰e9¾Z%ª„[>‚©r•ÁRrœÚyðÑš~Þô‰N„S^<ÓÞè€õ·òRçaÍ*ƒ eÀ¿ðòçw©?Ÿ-ð†¯Äf•`ÚÞ2=«‰?F`Û‘k¸£S£ì"O\T^ƒ ä3ãQk0—úóÐõƒÕb0'œÄùF cuô:ÇxÂÄóhtŸè„gYÕÄÚ¦Z£;ú+fŠPÛþžS,ü´ÐSÒÀ7Õå´þ$G"øq­L>øñüè…šu*§›d(Úì£ãйÍHŽÿœJ›Ã¡úï$ÿÑ™§BÀÎÝåz¢ã¹÷&¯_E¦¤¢Õ¿}6°ÊÝÔ<ÙsœťV|ڡ˺—6)Ä“ÓU'Ò³¦× æ³£ ÞK7ö§ ú«Ý( öGeÛÝ1ÿÃfLåJöÈØTQZÙôQ¢¸s½ ŠT;ƒePRõ)«rOK£Wí ;”ŽùçéOد~;yþÃôßme73¡Ìš þæ2^¢K ÷ÃäÏOêyˆf¾܆»v¡óKOSA3µúkL¯}Fwðã»qüHO¥|F¢²1ò3k.BU8UTwîï*õƒyé‹Ñ„7c©´´÷µÌÔŸ/`W·èîÕŒüþcþ½ý Ûãe¾a~­¥¿ú…AP¢Þágü±—ùQCD p 9>P݇ùƒGèT²„kûƒÒŽúøÖöåÌ'Èw¯mùs²ñLKWøühÃ{RWÆQ«ÐŽŒÕŒøg.ØŠ›_ûÓÖüÏÿøaÛ­,Pc“Ý®¡åS­îjÓljÐAq#U‰÷#ÞL°ŸXckŒªµüUnò¥µ h‚O);µŽøã®š\-弟Á~í·_.Òvàq¿ñðéa25F¿ûq„h(ZŠÅÌŒœ~wüU|q»yþj ùв²-ÑS,Ö·âýa}oÂnhþ"³b~m™ž¦0 'a÷àñZ}™“…ÔÄ'à‰ß\Þ…)‚ÆOmùÉŸ¿À'Jƒòfï^yåÍÁ›p¤Ö¬ÙĵðÆ× ;¥ ŽàÏ©^°¼ãA†wè¯â…nÅŸEÑþ ¹Åbì cp•Èã9çpC§·g~Ôïú_éÌ? »4›œ–+üUVx¹¬xWÇ:ôå(r¬þí÷ˆ*öpë°F)QòçSmÝæ¾Ì¯­ {X¨èudó¤¦þ6q–ž Ó[ð£-Öÿ,þò!"®2Žø£“Þ9œøãý kê/ˆQ ËeU÷Ìà>ô"ƒ2+ò^o~šª½BØf:ôœÕ“ÉDr¾¶#ÌüÚ…äÏGúYÉH¼£®E—kÀ×bØj7+¿m´ÄR•cºFsêçNÈp.5°÷K˜;KÎ×ÃàG|Š\_zô¤:ý r2+Ñ_ÅÇ£·º1–5}Q9]!6ñ$¾ÙIüQMÞ'_C¯_™¨kÓÝ‚¿}˜_ëÉ©ý€o: v ,¯GªR!è Ű/AOT–x£ÿGDP.x÷ïÈ/œ€{9ËÌ÷ñGáFÏ-ƒXÏDú¢Ÿ•¾T¹L6&Ò?Ѱ¥þ<1zVã|V>úÑ>ÄÚá 4®? æaÁz5dR>¡ßM(ÝѰw¢~°vº!È’ß/O›Ì~t*ì*Dåú†ZšŠfNê>&qv¨IF÷²ëÁòçc7â7ØÛÇÔüÁÛð—ŒCÌö„LÂ#™8Žø#‡½õƒ/37Iøü x >(Š‹^¢¹óü•ÓÚŸp“­Ð^Ζ¯Ey¢£´ô^\@ÿ«‹tg)Jæè…µ6üÕ)ú·g ¯¥¿™Ò˜ƒ.ì3Ö¡ LèI}‹?Ö0ÿc$ŠÐþx@øT>Fº•ì6&ÐÛQ%êhl–¢â&ªTºòݓԻÜ&jýƒù˱dôýA;ÒGFç‚ßàÿÒ×W™•Íy2ßÿ?ê?¢‘WÞªF׺Ñ?1±Z5§Úª}Ô$þXMÿÄGQº¢ÅÌ\…WÞ@/K÷ŽÔàÇ+å<¸?ƒþ%ݵ3j*µ¬sבYx¶ö™h€%ñDU_/« Rcâ±¢O•Õ¿ý[$ù«Ý̯Í(Î`-O‹†oTDZqgw±ΚÆ×VšøKxË þ~´ÙÚ^Q&䈴ßû>¼I¸¦jx÷Ñäkì¢5pYâˆç¾±åC%u‹úÁŒØu E)º>Yù[0 yó 2’õXÍÊ„û‡b±Ãî2@µôWÝøÙG(â‚:ñäóÂÂOÃÎ6Åî¿Bu;nu)´¸¡IÊ›°Ë8¾“BÉ©¦ä„6‘?ÏKü‘f­/ÑÌ}âx KÁ“ú󯬶“^ŒóØsByHTS a-7†úsN??±J0ç1çÔ³ØÂEz*ñBK¯ÞB¶ÄíÁ÷_Œb&ŸÜï7ýwj³Å,ðc9¶²>¬…K9EoÔµ#±LßQí¿¤Òm;JÛ"°Yç¸êKD™ä8j[ƒº…ÿëâ§P?èn!Yñ‡ð_±åξ |ˆ1Á~²ªªYŠê¼¿2ä?ïT"w¾{….ZÜÔBg!Ó©oáí[,AñzIÓS“‰ÉN.þ¢9¹+þ¸Jþ«õÆ»;]"[Ñ?1%šÛ“Ô6 ÞŠF|T‚ïÞOÍÄÄ™y¾­Ùi-yÞw8ñ×úóA")ê«ö RB=·Ù’ž»+™?¨³BV{[³.ñÇ!¶L•ºÃzG9¨ Á(?D¥Ñß©…ü©M<ùµÓÿüŸwɤwžÌ[ð#è¿¢öéïm‡”ÅjR¬{e-½Z“5'ÚÊ«%‰?ª©{”¤QÄÝÄkDmð¸^cæG½¥>ñ€6ýU/í&øQƹëÈìs“¶{ô‘n•›`ÿ×Á%„¿ú&FÒé°•èŠ~÷“ôÿ»×Ñÿ*•؃W~ˆ˜`>H1Ùˆ]6ëx2ŸãëöÀ«ž*òD¦¢½¨¶„ÊçÊàÆ°gù‰Ë¬š§ªÜ~ªKìVîƒ÷hC„ñ‡¦”%KqOäÅóõËà¯ÊÓ¥°6þ,J›Ä!_ÈŸ×ÓgÁ`µÕÏD¨ß½¡ã {Y|åiƒ¶ê­Î@saZJƒE/ÐJmÄÒÛ Ó[ˆÉÊïtÉ•äªæáçÅ6g¦.r<8ñXŸ†w^ Ö07Çù¼OìqÊ¢1á)‚½•îZ5<Ó¬r;ž`ïøÑð'»Ì"ü™_{¯–´æú)º¡Ds…G†|¶©Ü…iØÓµðòÙ`¥¬>f³Ñ_M‚ ‹eŸ`—Žá…— ³z™OôãTc¢Ôª ,R{‹ÁœsA¼ûû°0ÑÈÇ_&o{{œšîäÏ«ÍÐïž_¢—ù”¯œêr7‰B=ÝñT¢#W;GªXak޽ÌWuNúS WŸìùó¹ú&`ʘÅàÑsø¡ 2 Qèe}ˆ;À_5ãT>êùBð†É™?¸‚üG*c*¼°¯ÃÞ×$Ò)ÍÌç0‹©Èx½%Û)/ÁÝöÕ?q²¨R[½šó%àª0M}¤1€|‡j† Ä'¨ö;‡þÌê_r‡{=ÀŠêèŸÌØHÍ}PýG.&|Î"Òʃ¸3w·=Ï^Eêå: ®Eofl'£ÐÒªÊ3‡’eþz–1“wˆWoÝ’©áiïˆ Ž–Ë•¼ÚCtÊÏx;cÑÿª'þO~ºDþ$jÛBôøø†]µçµ§?ÞÑ©ë,YJTÚ‰f (ˆ/ØÚy~—”ËZ:¢YT“äixÅ–F»+Yž~(£r™ž¦Í~´Ûfà$uÕÍ]ÒfOjŒ"¯gÂFÔÛŠ»œø±^ñ¦¯_tøÒ.p[iô#Fwû>ú_ͤ6>®ÙÈ>Úll¯k¿Îæq¢¹úLMEàkØ„kb¼ìɧÿÙúý¿àGZçÉ(Šç?î_òݶ“úÁ˜Då˜^Œ5ÚÊѧª 1ÈVðãq”®ÀÇVO[**ä¥knB-•öž¹M»ÑI7 þü¸šF­èÜud^‰~w‰þŸëoõ îy)¥9Ä–°UE]úï~Ždÿ«EÊU%½8ϳ³ŸœÄ",XY ÛÔY¬Änâ×wEù9QäƒDöHì1üÕjQnö$þàê#žeH×TKî„íy‹ML2—u÷Eˆ¦R„,E ¨¤'•ÍäòúEàÿªpÕ—àÃñÀàÕÆn¯Çêî°þü²:æªùW c¬~WЭ0ù¬j5Þî·ØÑ5 È-þœŠÎTÌß\u\ÅUF¦d68 fÅž3©/nøQ…w±=Ø—x›oȵ göÃß%ÿa„³âXã 00.xöM`“Ãǵ?s’ô¨+µ¯Ì ¬KݪÕ8Žž+'ú«ìl¸ø_[&ú€â“d¸šŒÔ­yrÒbç*Q™6¬üÍ ðÃ_ükú%iÔ:OÐÃÄ3èŸØ ã"w ¢íI~a 8ëNÞØ~+ü•f5Ž£ßÍ‹µoB¾Þœ™Oü1”üùÛ0ùóTä?ÊcISsîϨ?ß®Ç"{ð§‘ýîz‘W¡{ø2ø«G¬Epeâ[Ä É@¤ç)8ªI[Ç<ª‹àGSp« ‹ ôt]e‚¿c/ìg¨_hÄꙉîq ¹‰Œž0Ÿi;öô¥Þ]ó qO¦w®â)1Y ê6yüe\å4£|•J7Ùè’®a­}ÁÏæOb²‰è–’*Aþc¿¤þÁ¹^Qú'΀ŸËMµ]k˜L«Oa-ê?¬þ»‰ŒcäÏÇc+Se1þ)&¼V5º£_ Rg!(xŒ^?xÎ;ÍÂdâ4VMÃx(`‰¨²kUEXÖÉoÿÁÿeÏNýù 2Sïà¬ù¹ÞôçšË[”‰ùQíœû»’ÓQxG,á‹ö5 ƒ«‰ ÎÀ³µ…ÛOüqk>A0˜¦$üµ¬ïVÕ€U¨E:¢_ã·% Î=±BMð#&püô¿É@D¦û'›zÇ»ä?2R± ¾¦"ñ[=lû5X_+»ÿŒòÀs™‹­Ý¡þ*üx3;–i=üÏ,¸¢åhó­îÛ}È$3€<…/vÈêR8ToÃüAõ7wæ›-S>óû…É#³•lœ æNCeSVGŒø›«Á€I¬h£{-~8+¦þ¼:oN>u iO„֌ݾçüR‹ÙÚsºx°Ç3\ýYêMr¡ß.Âi¶?Ù¾©óÅÐuv¨(ý¯Và ΢ s<àø+?,í=²çëÉŽd¿º'S“Dziç”=¡nðu¸ðâIË,7`ÓûãßO#ÿQ¯ËawÀ¾[ù ²2ùóí²¹#þ¸NoÆçXÕAÔ†Ö¦$_QYïMv:ÜÐUéOd¶¶&¾qO¿3ŠŸÕXÓh€ ßœdÅœÄèG»PZý÷)¾!ΰ‹z_ʶ¯ŠªŠà—d²Õ#‡ƒèkû™éâGÍʬîBÍÞîŒ Ñ©£`¶jg;iãB¬çMþ£:ú6Omغr©£þ£+õ‚ŸQ^Ååï²Õ3‰²ç¿Ç‰ŽE•ðy#OÉ9 Ö¿¤þxê[ Ê7z,m4*ehž±QÄߟ>…Îx9¶þo&Œ'$FGü‘ŠGÃJ_~Î;ÒGI®íæ-ý@d‹‚ ÍLTfžè¯*è%¡SKûÔ¼Ùí¨pÉ?WŒ ä?þâ¾}E'²˜ùƒDgçõ8ê=°ÛwÈÜ¡Ž¿+ó£\©ùèGUŠ ë©y“®#[Ì·ÆiÔfñè_r˜i6ìèWp'u@L“pâÇ&¡µ ‰.`ïÒп½«}H1“î»qÌ|ö1f { ð# ™õ¨ÙJš¨‚é|7òªÄsz™Þlºø_Ô\° 6ã×QfþyP4ò뻑ûÓªÿX¤&¢º¯ µî¬9ÅVŸ>U¥Õ¢ê.%Nç×n²õg*F<å2XÏøZJzœ.VjýEú'VSDqþùim ˜Ûh­™àëD5½ªÒü¨¶¢$ú+ñ\ýßòúw)Š‹°êñö¢k]€ß]JÖ?¼„úPÊ;:ýÕ8ÞÜŠ«ÙlUè¿»½­àMñã‰ø‚¥žBüaƒƒXƒÇr »˜€Xa"(àaüñÊæNÆèú²äèñWÁµ–¤j£¨yŽ·æ ™Mî?æ£nAÿ]Kçðïþ PGl^ú(8¥•ôq\ÌS¾ˆø jΞ|ÂvÞI4moù÷ b†ä?~—?—J^5qÌLª‹²Jvr…ýˆFnè‹xG«ë£‰?„<Ï <‰ûÀ†ÍMÑ¿$Õé)I^ª7Sfó€’]éמˆxè;ó›‚¿oР¥!:Z$˜É(¿ó[õA¼7—ø1þíÝE2²ŒÝ‰@’êgÆv/*͇?©@o`Ÿ@üÑß®Ûÿ€¹ZE7ã T?òôwxKN‰±¨#Ÿ¢3Hð?‰?NÛ )éœ'óÓÖõë¯~ÚÎ++ÉŸ{j…µØŽþíóÈŸQë«¥T_ú_õ3sÞØó…m(z˜jØÌœ¨‰žª©éµüè§±v›¾Zœ»þ7Ë8ÿ×>m%žî4'3È£nåô|Êp5>}22-Ä*ñ*’ók·0]3¥ØK¶øw|6–¹€¬‚Eì~XÕÃy/ûƒ&.hþ"S?X’ùç{ÀKs´Oþ;>õ\òç߈²À˜žÅ3—<­½yò"î_rÛÖÆÂÔôœ˜z¸ÃÚ4"“pI/ uÛìƒ]ÄÎ=õÕÎ<©NÀFà§ŸÀ4Åf]á°rÁ´Ì‚Ó¨ëÀ=\÷u¬£/· õç§ò‹Øè¯øµKžåAZ25ý@¥'úTbw} •{ lÓ¢™ Dó@-»ÜFýyx•ÅàGY¸µL lK²÷÷¸—-‰.^ƒ½õOÚ|òç›ñÛJ«Vc3øñú‰ìD]^áàÇ;[m1úÝèðCQn&cÕæx)àD9ÆëG©ôYI áÛ[½ö·¡·{ŠÇP[;fþÇ2u´hC4” +ÿ}®Uÿqnç5ŒUzò žô’ÍIþ¼²áf\äãŠ'Î9/»É^ÔŸGõt§ÁÞWûÒ±“;V„}] ÷“„U;™hM/ZN^ÚþŒ>Ôn'…C:D?á21õçBÍ?oOíl vô’,ÛQ°Ë€ÑñD– ýî8ðÃÊY¥‰?ó9,þÊL˜~ c-ªŽSzŸPý¯¼Dqü§`j9®&ÜÙFúO6Úпä;ÌZ"¼ð›t£](0¡ï*]í;Ê®D4ß`Øã5“ñœWœ[ù¬,y‹±^;4„ñ(ªRgÞf)½©ŽàÛ—…Å9B¥ÅjC¡Ò¢*ñÇ5¬ý4ú;ž ãÉSb³óáóV*Qý•_~ä^%3ž“q®@”6œk,ÁüÁ¤Ì™Õí·AËlvúï>c~ÔUð#†ÌH^ÊfŒáÙÌ":‰–ÎýÝVÞj ÖåÉA~®­ÞÓȶŠÈãxÖœjöë°V;èµ×ø‹©R+ä¶ñ<Í?©È*£wã 8ñãˆ2N.á/µæÍLAþ£ž} •õãÙ[j³˜}ºÙÂÞËÍžÜÞ„ý~9Oí@–+¼•gÅ4<­'ô¹'n8¯ø¿÷Å]æŸMüH¨týÇñ‡Dá±QOv»°¦8Ø¥Y¶Öj µ9µKéªu/JuÌ6N[DÄ^ kxAP5m²D9Bý`~ê?Ω™ÔüÎû™…×kK°|7EY÷lúr‘‡úÁYjRjÑó‹üT.bþGx,Iص×*×”¬àÇ~l\'°ÿÖ´ ˜Ô[l‡Ñx ÏT»1H¤¢æHFb5蟸‹|Ìs,©ŒúlñH=©¤gŒÖx¡²ú+ø¶ŽàÈðã@[ìä9~^#»=«\„®‘­ô“Ø ªàÿ¯æÙoG“*ºäU…½Rë;GÔ¡ÄžàÍ=tW‰àªzÂÙ•ÄÆNF5T„{Ìš«ÁÍ] B/½¤èD¯åð×úaË õ 1Lr2 ôX×ÿ g¸Š3›'—q'Vc¡âƒq?x–ó™ÍY‘ ¡Ìá¬8†®×ʼnÜã‚’ ˆa^£µâ†%˜¬Ô6k1á2<ðŠ¯‚lY± ù¯¤°‹•ÃÁWÌÿ˜(Æ€\ýù¢àÇFTÖüéDYó±M~z3GþÇ괔¬yD€?€}sÕ†™_룎¸&û,ô.ì"Ê'øÿÌÔé5B‹êrÔ£Úo?[4²òñÈ-Äë$>‡ÉŸ§@/UY=™Öm€ÙÜ« °?ÀÝÈ)O£ÇÒ1ð#%ø‘—þíÇ@†odsR/ t"žiJ4úZoijÀù$¢Oâb#9Ëh,ÞGºfl7~ôˆ¯An¡(ýw»‚\ÑÐ#äi¢‹Pˆ{2T… û†ª 6ù¢X’Y&ð/SŒ†Ô£¼G–¯Þï|²ìcd¤þ|>:ÁàÇE”´ÉSy‰¸Îõ\éŸ8‡úúXÛÖ¨³ñ„T¤n°=¡ª®ÔŸ—'ã³Øê‹£> ·9™áÔK^ s˜üÊ&/Tjh·8ûW0›1Ä E¨[lJ–ñõ*òýÉ ŒÇÒn$'éÇ®ïáX“³Ü™þ»ùQ_¨¼ Þbu+r^ŸJ™5p(³X§¾ TXæ/`ÜzÞ¥¼÷ÉU 3MÉ:;JEͺ®´ünwNé!ÿnD¢â}N†¿Ú©}&/Û öé÷êqgyê qwZ„ƒßÑ_M#ùì‰èˆò ÊÝŒw0‹+~L%Ö:¦W§»ëi¸–’䮂HK@ÓÇ|nMfc® uƒç©]Ęûtè/£"þÆ»~VwƒË* nl7j %ú‹ºîºFc ž{"?ü}جæâqÅ€ ýkñ§‚7ÜÓueónªà’»äf*èR€c©Â> >¥‘ÜØã!ò$126þ²‡Á·8@ÕˆfŽ T@å‡V+>Nª“?O‹â·?k}C}ºÃ ÃV€ ¿Ûä’ÓsÇ_’Ÿ^£tBb"}^>åV&î• Írcú]Oò1ªR¢jÚ‹õ[ ž¸RO·MÚb¹‡ÔÐkà]ðúbŠ¢ŽÕ³ (ø„škïè:Ü>7êÀÛÀI¢ßí ‡SUðXž¯FYä>Ÿè •̸B-ÿä?‚ú—ÌQ<´³t’¡*^OlÄÆÏ¯º!øQ>(}GbØO2 $‰=#õ–ä0,Y®¸+|ãLÌU´Ö?ñ©rWˆgÛ ŸÅ[¾½ô6ê_ô»m˜gx–»q›\O3òçI˜OåA5á.ð#»AWÞçêp· ñFv:ñc£2üyB|ŸÎôoO¬ótØç›ãÁß„fvjg™uÈŸ7¢ßÝIÿ’<;ãù¥Lí ŽÝ%ëCDM¡üiøç_ß¶6ñ<šÒN‰œößÙ¶Ñ?1©Ö[+ŠþÊBëE¶²jÔ»Õ™?=ŠýwwÚÚ3ÿ£6§³ª%dþùe)üUIæ^“¢V?8Z›³ô†|Ç2ò«E½½2UÍŠ—[^uÄ,ø«È]ùzú—Ä„«ÚUŒÊ4ý•9ëÞb3\Ö#ò¾µñ©ý þø3Ä;ö̬ï”$ÿ±SÆfú‰m$WhMjJˆ·Tƒ§ìv¿®þNTÅﯨ/~ü ã÷PüóU‚ø£ ^Õ”oüS,ÅW>á qD=ÐÃz/7‡ê¢v‡§Õ<ÙÑc,~|°§ VÓ íåTGýÇNö½+þ{ºš7Êýîç°Ë8¾£*.Lœ¿MœU€¸h6sJ{Ï?Éuxë±Ò_økNµ`;â°GúFúïù¦AK{Ñ?±.>½¥´­ï~ŸSï r«07Ëõ?ÄðcÙšðÞ;ˆŽ–ðÆfÊ[õpç<±ÙàKÇ‘o™D^Çšµü˜¡'Ƨ­ÃÌXx ø«/àÇbð£þãuNЇ~Ñi~J[ò¯.U{‚á¿–aÅ»pò«ñÚéHþüU-¦Üe&þ¨NEÃaj :nm«xЧZh-yõ:Ÿ.äã—׉û’’u.i$%ÆÚGü‘™šˆ1àÇ-æfDëFN|/Õ„ñŒ2>Ä®Pø1íaîÙ7,Ïa2Õ&º«zôOt!Ý“¾„?ÉÇûšÉvä5jRRž˜¢;ÕÑŒmð¬GtÏPÊ‹A¢48kÍЬNÿLšN5âp£3.7Átä¾™hh,#þÈi~"2!ûѹñ¥ü þjú« .nŠM퉾¬zÁXïÖì2¿ˆ]¾c|bZÖZú¤W§‚pqÍúWU £ü†H¦/¹«ld“Xñ8ë|T¦(¥µ}œ},´ŒÉ ;ÌhE²=­Ì— Ðb8¢­L{g>ÀR—Bû–Êœgô^)Jæ‘x 3A°ŒÌüÛù.? î‚j¶5h9Q>&ßÞp¥~p:ø±ƒ~ŒèÄÌ+¨x÷ѵå0ó£‚ïÌ Æ¢Ñ<ÕEÀ_ÝωK”®Ú‘ÆñÄWàXet‚¿Z‰zÍnfcêùjê?ZÁ_%bþà #.QÈg£3±Éü«ã|ú@¼'ê?¢–!pÏÿ×çm¹CàÇ?¯?W˜9—ø£-@R«M8íyè¯rƒeè¿ûÝv=JûÜh+§Íá©S~‡ùƒIµ¼‹µ¢5ó ªÉÔÒÎû™…çhsð¡ß ìUQú_U×›*Þª ~Ôùð.‰7jèš­ð×ËüÁb-^÷r£Ðý¤BÃŒù ôBÖL—†°=SDb1\ä‰ÄóhKèYª…øâ‰²GC~à™8Ÿr…'Õ⾇ElŠ?^ÛR¡nz)\QêãÉ/ ²EÃf®Û*ÊwøáÏøºø1’'Ù?Bü8©¶ÆGm­à÷ç‚D3ð’6’ö¦ÖoãÖþ˜¾…ëÞ® ÔKˆ…Šþ›«N¤¤UoŠW xâÊqhx“3¬À‹óÁJTÒW‘ÿˆ%Ï‘©GD3û½F¿©nZx“…{(µF°Hé°g௮Ãð5#®ú ,¤~p»ö Úîè”~|YÈ}·Ã™Õ¡S@Ø;ûÄfÒ/gZYd *A>`ÛLêˇËV`åyÕÌ7²ákñ‹ S9Ã9îD…õC¯¥ Ã_MS»‰þÄTÉ·?‘>qz~0’@Œ °#ÍÐæäA'UÓ(n Gc²æ~t”Å…0ˆ™D}OÒ†¬¹Õ?ñõWW˜Ú‰ãèw{3ÛøÃF¾¢ ø±™]Yé!r‘hb¸¤"ùÛBÜ•®Ô#öà”éK|T‹Ÿ†9ƒ–þ*™þtôÁ®ƒ¿ªËœÝ»`¨uÏïÂ6íàžŸ'þª‡°Ns±(';ƒxjË8ú·ï† ›iôDõ.,z³]¨[òßEÌ/ðtcñîg¹1Áï`Zw7å™2‘üN)ùPo%ÏÕ¾Ö c/[`7££¿ÚMö¼ ÜÓ^pn²ñØh@ÿ«ûD caŲøô$DAjÖJaí :‹ø&Ô^ŠnzoTÉÍ×dvÒÍÑÏþÑH2jïƒvo™Uåg¸ÂN¦Öf¾MNÑC´wžßå––¯®+¾ÝY^tÔ¯•Ðn-Auœ«G÷Éìñ¬ÝðÃ…ù7ÌÜÆ|=>:éæ¼ŸMä¾`ñÇ¥›Ö^¤ÄCôäM¢Ÿ7D´Ùh &У¤*ÜÚ³ƒ½¦=®=­Ý›õ¾Ò»>ÀèDý¹ÅÞ¼)wÐv|Ö¢Ö¡6ì;ðO¾sßVZÉè<™øJsEqþWÔÖûd; •H먹kvÕê3ÏæIõG#z˜,S¾ÙnGi¹Ý¶^ô/i‚¥ËOŽ(¶–C{ >]£OeOâÇjž(êwh‹ñŸˆ–øåÈŸ—Ð]”ãj!,NO¢^Ì ˆdGßäÏ]Å)Þ¡ÃÌ`Ýꯞ¨Ë±ÈˆÝÞq~Éxbâɇ¿Šé!w’Ý o÷è nuz‰V"ü«U”TªÄÞ.mK±RÖóâºÞêËØi}ê‡ÀÃ_$–±”%A˜Í`×.Q#ÜúÁAÔŸ×âôs‘ èÇ)ÝÀÛoÁ;hƒÆéiÄa-5ÖÏÏÙٚ阋þ™‰{†ƒo韸 à;eWê±³€}¹Òd°ôM@qòúÝd¬ùyàýÈŸ…H!«Á­. uÉ‹¨ÿËó‘†ú›TÔ}vü´þv##ú«Êô3w?î0BMà<ø¹)ÄÝå$qF ÁÙÉwW'÷_”lÅc*E¬ÊÒ½ôBÉDîyÑ×Ìo.¤¿` ÚÞÆä碥Í+/È×2¶1L&!âž§ì qW© ‰Öv=ÕGUIÚ¨eoLņ5%“Ñ7} «¼Úl :µ1š€Jݨ鞚5:z/«Ïg}­KˆõæÔ÷ñÈ’?—TžìC;ߘ ½™µÑÌB/ó=LSÚ,[€ÙŠ¡Øûw²5,ûe+”ã*MÿÝ ðWLÛ"¾¿ !WiçïáæöR?؆ruVdÎD—Õ­Ó2ö½ÀöôÄc©È߈UÎ;2ýÕc:|ÁwŠgŠá¨ºr‘¥ˆk¯G—Âàd4êý®0?*?wå•icŠÇc”hyÂ¥1–X! õçAñÇmæŸÀßù›g„\¥bn¿‘ÔøQjØý‰?v1ÿc;l]as³ŒiOo,$W§É:¼Ÿ`Gƒê7Q>˜ÌÜÞðj¨í­í™¬;Ÿø£sg™ÝìmÐ_Ŷ·6 †®G|4˜}ò¾]ÂK)ÏûÒ^F q9/ý?þÅQ[©`óØÚSóFíÃc’?߬¦§;n-™C¿;ÙV“Þíõ¨Ù†Oµé&»l¨nÀ=ª‚j&–Z‹Iûmó£:iw£Ì_]×¶ëÓÉôã¯Iþ£ŽžCY¯¦åŽbzT{ô»÷ÔÐ5¿á_ÿaÔéÕ…5÷Ú䟂åú‹úÁª°êk°wñJ=±¶CD61LÄ ñŽ…¿^em†¶.!66á >üwPÄêûú¾i7^æ ¬ði!Xñüs©4$né¯òÃGO} ëfçû¬€ÕÛ‹‡½æjŸÑ‰gxX;ü®ÎcA›ï ¯ýµÒ§ê…à¯fƒ!UåJ<Ø]Ø¡Wðx‡8áNÂû·8S(YÔ”ü¼•ƒX%z`«ã]ø«-\å¶fÚ<Ñ·½.]GÒk™µê9òçÅ ôWwÕtQÌŸïҬꌨöáýî5ôÚÊ2UÇÞ¬mèî?S¼V“8Ÿ_»ïÏ=tçq<;¹ãËa›\éß^šÎ³3ôýd§w³çô/IŪ9#±b6m²¶Düͳµ…½mÁ?¿‡íLB®»¸ß{‡•ßÉi\ƒA‚™‚Í“ y~ ”lœø~ª0*Ƶ¼GÖüÁÉÄl³‰c*éSàob`íßò ä–¦`÷©ZÂpv9ü¨‹ÿì ~XÄ/œSGlþ{ô»ÓõjâŠv“.É \ÛJqŽÅÁÒáàÇ æ×Nãà›æâÇZ «D5³Á«ûøüçärâßï€rCãs¾ÑÊõÇ–+Ñï†ÎŒR;ˆ!<»E`úßJ/tÉ‹áÐJñu æ;í?T3?uõR(N;bó<À¦¹ÄÝäbñ Lÿ«$0íÀBðk`Á.á“ïÆÖÿ ûµ‘‚éÖ7 »|Ö߬ ¢p¡Vþ5üÕl™‘'â ²)ĶkÃŽ"•@þ‰FÞ£õ-dZø«9ô¦=Œ~·lPU£Y•!䤭i|ÖLG¸»v¡˜Ï>ªûøŸX‹ Ntö±Í¸ÄÂ}̱}EfÙ•\rÕØé¿û'ùgØåѰX_ÈDÄïFËäVž(£Q>—æÙo [Ö¯¬0¾øó×{ ýîD¸¬ªôW™anF‡Ô‰øã‘›…GYè•…ìÕ«`j¤žÔŸ?ään³ŽÝø.Fó&¸íèÚÞ‰ø##õÉìL Lg/wõ•^+}3ÿ !âœ?šMtç@ü‘+ÒŽìÛ¹W4×Û1¿6Ù˜!dhöÓëÕ—dBi[‘øIùÀLa,†¿ÒÈ•æÂ3œ®/sæ?ÖQ?è%’ÿ舲%±¾Ïè@÷ʵdbƒŒÑ@rOôWš=½¹ˆþŽU˜ÿÑ–úóW0׉~ÊÃ-×?¢æ¡‡|7ÿé]¢~ÐÕy2™ÿzò@dW~f»¤l'þ諵¦×zÖ\n+Bÿ«rÔ®g¦iÔ²;Ûm•Àš¼Õ©zvqÌÿ¸®ì ÏñXÂÌÿ(ãÜudvxþj>õçõ°ïõôÃô¬ ÌTá±NÍ©?ŸFIÊH­8Où¢ü)®c;NÀpL?òË&¼¡åļæ§`H'ž„™ä?Zˆ\‘X±€¶U;J<ô}Îq²–b×âá­¾ZþxïðX’³çÁìõ`„øñ‡RÛü„ëKH5Þ|r1åQM5ÆÆŸgŸOùìùŒaäù;ê§CU‡=ÉØZ/¼¿¡°?œ_°£qH¬ê ªZ‡?õ¬.&DZ¨ó˜µP b"B®Ÿþ%©°î«ˆÒ‹a›sÑ—¾#výµ>žvÔç’¯´ø«àÇ2.Ó¹Wukþ`PmYЊí˜ÚVþ¨ <²^„‹îæà¯ÞÃ(-bŽîí>Ц®Da§`ƒ¿Õ¨Ír;;…ƒBùª®¹²ØÉ°5V§ÈYä«s•£©"§÷„m¹D–¢µ±½‡¸âod$–k7ÂÔŸOWÛˆÁzS=Yˆ×ToÖdz‡’Ä•àœÖå°Q%a‡R?èÇJ޵ €%»Ex¢¸ª…~s«Ç™IÜMO GóŒ}#2Û ×”ýÕ&úï‡=E9€ŠÄ<ØøÚàG ?—ИçÀ-ÊöÏ¢Õ·5Ïêgô¶§‰VL,e_ì}cò “‰?4û.tIÉ<ÚD!ƒ°ÉÓ¸üÇA®½6&Äz“D6øÒkœISÃDÔ²,$=àÓ¸oÎÅOBýÇ%ð¤OT’L%¦™f"'¾›úÁ )D…è_2½”gÞEîñê¥é5»Y€Šî5(ªÓs÷0ó£VÓc°5õò¡-Hj\“éè€uOÜv>*ÞJmwâ!L¬þj4Õv‹Q hv8&f ú’c¸i>$þpg~”°gBÅ{ÅÈ*Λxk þI8Š ùƒÏè¿›ÆÁÊë’ tzFq{vÓ–þTèMË~š]í3“±¾;9ðKòš™Ù°¦Ëôê΄W±Z_àÄ­(Ñ;‹|<™]ð÷ªé§Ót[ÂéE'÷ž×>×ì •Ðn§“ûlêSªSË? Ü{K~0€§ÌêãØ[Jñ¿È\·e Ö¿D'þˆ‹ã¼9Î/¾ÚN(ãÔLèwë?¯ÃÓµ”ü¹ÙóRL~Š*µÌVŸþW•° UõŸ"±–[SU²”ÚhÑWë d.Uñϯs¿ùb“¶JŸ ÖŽ©:9YØKe¶úñÇ,ÑH4cþÇ5<+v¹UÊ{æGÝÆÚß%Ãꃭ+"Û`¥ÿËÈޡߢþc9‘ÆH~·wÂÛ„þ*¾ý 1Í,òe`ĺ í½«(¬¹Ö¯é3©ŠÐªóþƒ_ܵåW‚X–o¶.ÁªA¢ö±ªrùQ™QGÕÑb¨V·ã¶2L¯-ªSçÑ¿$jüÕfø«xåp·OÄ#5;kTŽÒ?±‰ÖO;¤&Vƒ¢¦Èìó’¶‹õ ý•yã%¢‰žGÙßAï#šˆ.b¸¨ÊoØïVÝ®|T2‹ `þ%|ññ HNrbõ b3vô vÊëˆÓë÷+‹¯/f­5¼‹ãñ€˰@È.¼a×§àÄj‰é¿U`ÄQ²«‰ñ—±§¢ì ¹B/Pâ¾¾œLMC} ägNõ kîA!¶ŒÒII” SmÝ›ŽJO­ lØŸðqõA'øo-À£ÏüÎ8ý/qP³×áð`kÀ¸ÌvıÁáÍÿxŽþjïhðCãPèZõíÙ[r8µÆp-‡a?ºP}}Šê½Btö»A¾ÞêØ¦«;ø±%Ôã2Sí.úÿÈH½ÈgîD,9ƒÜ@r!5É'¬#žþê ÙŠŠÆYv¶æ†£I?9Žþ%±C=9ÙÕ{¢28žšLŒ…×u{Êod7öÒ¿¤39Õ ô÷xÆMÉì"‡]Û|‡úéô/q×W0µ&øÛ©Egⲯè¥Îp½©¨œll1êÐÙcñÇwðè ÙÌpåazs"+@«Þý>ÏiëP™³U"/¼Õ[ι$&æ³÷ÿXkl’ƒ™(¾–ùѨÐ;løÊnTd¿%/=ž|Åzê»KS/¿VŽA~k.:”ÎAWW˜h´'w·ÏlEòäÓÌ×°}OŒðVe©Ý8Žâi)º,O: ãþÌbø«K0mÉäÓ`ýwG)µëxy6øµä†ÂsÜNZ]ªbÚ{˜cáǚ̯½NýGa*+lv ·x‹üyQü™àïú'¶¦¿º­øi®ÜÛeÂ^wµ(¾]Qîxxý¯>Ø>«±±Á‘ò/â-DmK@á Xw˳=Mü‹¿¦ÉMZýR¬>‚*³Šfk•½¡ŽnõcQâ¹Â|}”MåGîìizM™ðWy¨Œ¨L/Ùüp-® @;âjD äC¬à\ñZ bsþµpõµ°,V6*^:E-óTDYŒ£òµ 5É.5ŸòYÝÈ1ï#þ(€Jëvzžt?ö*'Bœa_ÕÒ’ìç|•!þÐÉPíæèß>Å|D>e¯Ùþª›ñ7ýKzÓÍc ÙŠ8¬}<î® ±Þ\‘¤~ÁÜ–LN<ø©MTá­##4‹— †hƒ±ž~îe˜_û@/"¨(¦¢ñSƒ‚ÍÊŽ'º&±Š´8ó\õ=‡ñ™¾ò68¿@ê?†š•¨ÿ`~íú··EyöŒÈpø‘†\MR*7>Ë&?Îóô?á¹Jap·-¨NéBÿ’Fæt#>½ª2Ó¿$€.Š•Px=c§‰?JÁM†¿Z‚¹‰Áú'>ÂÃÒ×ãÝJ|ì¥÷7Ê‚;ÁÝ—ði]˜è‡*ì0ñÇNîtaóž¼c–0&ë È3µÄ¿+$è‡øá«ôÐzˆì¨þ;ñîÆÖmísè 9ÆÈd@5y ƒìÖŒ«NðWÑ"ħ³L2ó ÞÜcîb?žyôqÿüxh+£”s> º2à·ìC¨$Ì~²€9´füí¢6bÍy¶Šê(µ1ø±˜ø#jóýmxåµxòÝá¯ÒknÚ7ÅO¹ÀL~ÚxíSEê9wf+á|ã€6ëöS´ç-n«oUõRÊ#55÷l˜ðÄ|bœ H8 8¿5è:•8„^õ>Ãòµî²*Y7â#X_Ø”þü©úóâÚí0j,Ô!2(†¼BV>O»JI;~okì^5~̉?’+U±ÍOE1Þ¿öäl«àí$'q+] Ê ¸€í Ý<ìs{êÏCZçE:¿ˆ£ÆïA´`å$Òaí[èëñª§aSGSÛ}œ+¾LÜõ_ìYv±^ ¯ÚÏZ0ú«„àãjò1øüœä?²ò+}¾œ’¬…ÑPÀË'd‘ü9Ù© Ój=ÝÃxãÖj-”ÞZ!˲_Ô'ºzˆÖ™õ>RY·V¯'~j±É/t¡6︾…Õr‘ÿ¨ŒMïõ‚þ%ëÅ,â‰Yp5±€ûøÉ©¨F‘C™€¯Ž :Öz3Ñ]ðÁÏrާÁ”ržv:Lü1E$F=g ð>±×ÑÝDƒ ÊJ^|i7¸––FAÃko÷&œŽ5Åb!ýwCóWÕWpœVþc9š¥»x1Ñ_åwh€÷€µÍe¨’,ýUKâ ø…À£gØûù27^ÄzÅ?ÄûÒŽù]ÁÕçè¥Î“mÿHeöHêRÚaôÅã}Lüq˜ùµGe£šžhÎfÃæ$B-vßk¬±Þ QUñŸš ¸ŽõTQL1¶:â_rÒÙÌ«T×m#^’ùÈ~x¡‹þ,‹vPeP°wÅ…ü\² OC/înrv™S>ÎüJÍ~€£~°)Èaðcú«žàÉ{X¸ÄoY¨uL„V쾸b=$Ž¿F()´SL }…Z žqEôF¿»˜™)±ì­˜² ÊþɲéjãÄT\#îÂþŽ5WPÛG4t^ï-ðçcy™2'õã wzgmF÷|šgv3/u]D•ÏÜÁüólèw“Á϶ ohn¼“ øc=õçVüá…?Úê‚@c‰}JÝÉF6¢¤ë cS{Oæ“ü¤_ä<ú3¿Ñôb 0~,•ÆbãÔâØ¯ þ/þyƒø£¨ód~ÚÚþcþê£í8ó?2Ðݰ%Z)æ¨ÛæÛr;º'ºS?-Šýw}mùµ¹¢8–¦].RkRSrT™BŸÊvL¨:+”ÏŠÌqmÑ&b‘¾ˆfؤÔTÕ;+{UX Ê‹ZbøËví%L·I&NÀúßùWàÓ¸£§CîãŒV=uÓEB¢š “ »Î¯ï$wðW͈A¯Áï噼†Ý²¦ —~xýïðƒcƒIC©’‹x~TJ%ˆûPÂ?mC¸ –•¥ÞÉ›må#­·ƒ*“@Ón̯á¼÷¿öòÏÏê@²~½ÉF<ƒ·ÊJìÑ^)u,ÖÎ+{΋‹:ˆÚ¼E¿`*¹ÕxØ÷M \A8¾ \×`ðã^ÜTâ‚­X”Xr/‘Òðn:§°t^)†éfní± ùóÊüÿ¤ì¡øñ„Î*­Xå˜;û¤Ý£ƒÇ@NÁªz9Æç”E‰Qœý ?îƒ+ÑB ®j8žgJTÝAÙ´’ÄþòªÞ$8ƶ¶þç¹$UàúwjW”#!Í6Gm+óf»Âñ[Þ{ "¬ Üõ‚)èŸX‚ø£$ú«  È~Ùüp‡GšMüÑE.7´ì¡îKBõ¶°ø«øÄoȲ_ã®ìÀwÏNŒµÆäorÔƒ¨Ë»MD“…¬ucPî *¨XðW¹ˆwâ}ßbOâ™ ô;ªŒ‘ùþªGgþÝ•èP2 ~è>ý/˜]‰ z?¿›ŸáøáÇ“¹ýÕðëEQqÝäYhÈŸ±Á‡­øð«-æ Fh9J¤˜ä?s©')‰Zê89.ÎFwFk~”w°X½ >»?W„kEtÙ„wÂ8£ºUwró±£µÈàï'ÒÉìi~G½6ŒZñ\ôqg:”|¬›ùL%³vÅ +7fÄÀN{Ê®ô¹E§C?úS]&þœÝeµW¡Ãïsvúúìh¸9æGÔ ‰ž¢óz)—௪⥓Q@õ2rÚ Ò?q•#¨ø¸OO­Öðé觘mà ð#½1›Ì\4êÿà™]¤OôÔzÒ¡ èQç–QüXh `ÒV=TÀ-˜_ÛˆèÃfïmÎ7îšE`ÄÚ1gýñÇKª!sǯ&›¸üNÿg¿¾lË,þønë÷ûï>±]Qƨy4æ;¥ü¿ø£€ê©Ö¡ƒûJ|Ò¨ÕŸo±å ž«ž¥ U_1µlÚ&¨m'ÎkŽþêñGUçýŒÌ ­ÓÚ[}-ê°ïsY¹‹ ÆÄÞ4Õ‰@¦ˆÇjÌH­¸Žús)¶béÏbgÁ¶ä!&Í‹òh>|Ëe,m#ž„é"¥è/ DbÅÜôO\ž=€ÛCõ¡M^&Ó «WƒˆD—·x$~s7Ö8K‰G]÷Sú—ذî+¨,Bý‡'»½©gå òÃâúðÝ!Øï:ÔÀN`‡?Õž Û@ø®‡Ô6f€…i†¤A=3QöÃoö?ê«à-6sõuõJbêoãtôßý*îƒCˆá§°ZBlþ,ìêLÙ,žŸïÌàAX†žÜ±ûúêÃË#yѵ´ø<…௬ùç軚þÀ©¬;Ç÷§ÿniúa½ zë¶çFqœ…XéœpînñÇ^ÞÒû<±Á•ÄH+‰ZŽó› á›^š±íoA“¤v7êÿ^ì2ƒMäüˆ=Áb˜óz+{5¼‘Žø,­¤¯ U›þ»“Éy¼aNÉ0:‡­†¿:vÄ(mf5OSžÂLt\i~ªx|ôµNüXMÿöV ïÈÛšPiôD¿ëcxtßEÅÕÆ¬hïìÀt8o榗q}²HwàWoMåGå_“þí—œWüßûâ©-u°øã5ø¤ƒˆÚ.>Ú.*ÕbZs­ž&Õfœö[ið£ 9)Ô$?ŒÒr[m­ÈÔä.åD5õEͪÅW¡›ë§‹¶K­­F¦·TÐGúÂà _û^K_„½n¦œ?ºbi\Eê/ª¡{fývð¯VÑ]!©ØFäá…‹Z^6„Wï(öa ƒ…ã.ˆI"2ˆTýÕZòù·Xo5­)-ýnVùeå¼ÌÃø$1a¡ºau‡DÈ_EWŠR?øœþÂßP¹ÏÂZV ûIG<Æ«0ÀŸø“nSxá½ÀbúŒP]ð‚_翾þêÀÎxï×±À‰Ù_Þ¿X±éè”É[¿&g7ŒT#T#•×a—q|Çdþ¹}-…?ËÁŠ™ÉÇ+¯ëôLׇ“éåñ‡ÏzÆéÅÞOæL¼3pS?õ¤€CëŽÜq ¬ˆ›’øã¡v[û‚ýlí¾ÈÞüøœ<Ôf%$öj~<·%жAþнeGìOLìVc}Ù•¡¬ÑK·ËøƒZ»Ùd?\±EÇðþ–€"wõôOÜêšÇ«C…•±JDÖùÑÀ+°&»Ïh@}¸¯Ñļ ~œuTƒlÁò겕yÐ7ýá¯B«è3Яªúœ,Ø´còˆ÷"Õ\ùå¦ÓþY[¨Ú@£ÝàG-z6–äz`Ù˜C8%êGªIΘuäûë—ˆ)1­ öÙf±ÞVQƒ¸,7 !hM'?‰~»mÑïNÆ’~0àôGñßåЉí¬S½ãßðaæ‰é\/% ñnô¶¨¶k/w¢’)Ów¹ÊF ¢š¥`e%&ª[ë&QôÜ~Œ‚Ëj\¥§‹¼%‚ cWÍŠýñŽÙ ÉÛI^sZSá¿®1 äõƒ_Í<(„?ÐéqYú˜D\`ìFÉ•zf1.ÄüûZÞÊf¬4Dî>ÔŸ³‚õ›ÄïïùÓ»¸5óã“ÿ°&¿¯¯Èð÷óUúï–£þ㒾ʼnGோ?xZòÿâè_¨‹ÒjÚß"ÌRlV¶¶K{:{/"—àGF³ókOñ&?ºâCõ–Iþ'üU ­ªĵÆTzQéêUˆäjx8K¨l©×4Gý ­%ÙZô/™­$ˆ"~ܵµÔV‰ <ù.°M襫›•ïZ/ª‘½˜^EÍ¥}î×Öàá~5toX˜•üÇUµ(±ˆ‹pg:åxq4’ú«ÃôQùCìEst+ì…ç›AÖ…3j%ŽSƒà‡“ï¾¥øýÕ÷Hœ][mýKº“—ØF>vøqüÈŒ"ŸÉ ð#à“®¡öGÖ=BüJ3Nì¼(¯SŸ7O¤¦m'~( s½®t±÷Tlc-}c¨*â°Û P—¡Ñi@4po< Ýn0Ve±btâÆ6Q“ f®"º¹. ¤Rw,Zí°ëXßùjË¢š\ó§ð™æòO*lÃt¸¯r('é‹…RÈ—>À&/?,þèýÛëj?ÂYpŽ2H«Ç]H‡/×.1Ÿo WþíÁ=üÈ@®·=ìÓYâºÍD]y7]Ḫ†ƒ7m©´ÝbìÚT~'Ùb_¼€™XQ²ÌH>¥ÓŽÎÀ‘¸/¨8ñå^óyÅ´}aúï?F¥#ó~ïðhsmÒgúѦ ²¸–y .æ ݳëüQìødø±²½x£…ÖfDo[‡ç-+v7•ÕV˜¶ÍÔöņOòÊX¶Ô¼MÌÑÔÈÆŠ®dù÷bÅŸƒ~1Ðï®Sއ¸+ÝÕhœÄžŠêüT-X¸Xä9|Œïz>c,ñÇKþñ5+‘™èBÿ]«»ÕÉå%õ«ÉÊí"ÿÑ'Äz‹„hUUÖÆ 0g“èæ;ÅèÎü×(oÓÒ»*Àiô–Ƚî9ªüûÓ æ"¨~ Iî+¾9ïqú—Òs¢*~O6þoÓk=7ókÂù•¦?áú¤W¥cË%ø¢áÔ£}1jåÁ䮢ÁµÅ#ÿqSÌq®7BI¯=âä4âoÍx$è]©Š/M=J;úšè€ß’ÛR¶øñ‰ÊœƒÆm#::®¾p…L¨e~Ô4aU´ýë/?æ×ZõƒÀ£nr¶`;òÚÉïÇ…÷ 7Ó‘' _aÅ+äC3¹ÑÍ5Sˆ1<ÐÈìsâÇA&1{‹èŽø¹ïúc4šÝ…D©­©gLB/ÅÚè¯L{y{s:Z¾C×Ì.ÝâÝ9'†âU|ÒK»XÿkƒÿÅ?ïÚÜ•,Γ‰¡ ùÇõçŸlW•¥jAê?ªÑk¤ k®²5PÛSAXL®Ø£¨ßÝmk£-ä)‰7W(ZA-…ºVyªõmµÁÌÿ¨ÅùQûµô:ü€þj)öØÊÌçSΑ?ïª7 ûÑG,7#Ù?q·rZI!Îb?ü±yã°«Ùà4+Ry} ËúÛ_ŠOÁüÁ±âK$îd{m˜vœ¼¾ÅÃìãÍŒŽ¿€Ï£Y»Ní3†)õ3ŒU²}ðüÄüf,”àéÆb”‡<æ[´›‰ÜW/ê­TÆgž¥±"Žãüb3¿dªbª¶Ž|zø˙Á kædG”‰ðVÙu=þª>:Æ•`ý|1Ýìçð’eE•éÈ£¤ÒÎÂ>€mLŠÿj½^WX9â{¦ÆÂ+Ý~‹ýƒ ™Áþ6¸ÿÜ–,sà‡±r9R17”ÿjóKŠQC7â©IýчýQNö’8àæãߊÉîó³` Ý*è[qJ40wÊS¦ÿ•5¸"ñÁYžÒW:ðc…2Zë/bòfuæLÍþ¨ò(F ŒeFa|kª}#óKÆÚ“ÛËPŒ0Ùõ’ˆnÄbè[؈7‰ïúD©…rœEüþý7~÷\üÐ茚 éçs‰B·BMªµa~bœ`ÿî:[EµLSôT¿é¿:jëÎT«O¹¨~EhZfðãû;‰¶ÌO¼ÄüÄ"Žçíçsùùwj3ÉcÞ‰ÆDÀ²ú ö`—S«jjsØ«fÌß ˆ"å«\U¢ òª×¾D¸›z!<Ý¥™<»Œ¨÷^¦Á4¦úQaÄŠi3`Þ»Àëœã}¶öŸ?Ò'“CßÅ×µ™Š÷4ÏT½+¿~öG %qùúN*ÜQÞ–"AÔìJ]s•ó|ë"yz‚rËÐU6…c±¾o·ÕItI %Óyò&¥jèÍUf%SEµP‘ ç3u˜/øñ~wsÞ/|ßmyaÝßpœrÔR«`å¡WrÝSå4*‡è:xù”·qg‚vO©?êhO~>1Û$¥+úÇ>ð—ï "Æt¥þ°ºåH&Ì CÄ0NÊnÄæ‹œßîiq=žáîô8þ|¸û¶ÚA1™LnnÛ\øw×àæšk>Ú£+]dgáº?‘W/!³¯@þx€úÃÿ’.›3ÿê`¸CVR´×ÓÑ/~Z¶Ó–“q” ?°8úÇðã1õÇEð£3;ãX*Býá > ýÙ?/ÜÓJ}!puù; Ãiòƒôj$Aÿ8 ~¥^fZÈÒ=ú¨,Åü]?yÿiOF3¼ÿª'»›[“U\¦Âº.+á ŠEl^lä€OêCÿàkôó°ì{éla<¦B±ô§T`»á¯¶é=Ã9÷f‹2(ö÷¸Æ¦DݘàÂT¦_4¦p…Ï™¿ëÄü«@ª…ñÔ3Q+¼xzºâ-bâº@eª0ŽòUñÄsU”ÞÙVÔ}¨?£“×a³S+:ÃwR7ÔÙ¹JwÄHð¤0 óîr_zs’ƒÉqx.7‡R“§(iµýèç·xúÿ’ïÄnâ·'sÛOâ‘:d|džÖCbý=T||*/@º—Æ%#%ÇLU3™·ÈšegeÄÿsJñÕR‘1V#»i$OòÞ÷1*²;d2¬¯ÆWã´yÏm[êš”8ÎÚRì•ÇÍ,Ʋ“W8ZÊ“ó°«ÚÖüÄB·Þ¼YÙtͬÁΨ5Æ\¶Œee7É&öG fþnVæ=öb›JX²BLÁâMº" nÔ~ÿ'úÇIæ_etÜ™·ø¯¢Ö…ýã^†üúÖvþ*¡V›ý_k~»·­Pðü’ÂÁþ+6,üÆ?§m}˜ŸX»]†ýjú×+ûð)´ÅµM>·ã¬£rØ{lC_v4†*úôege‹›ÈØôh-VˆÃjøw6âãú²?*µ°ºåNñdÏ ú’5á‰*‹Á.§…Äù±úö Rÿ`ÍSÛ(\q‚!K^K}pU%%\@eiù{ØO„­ ±¬†>>ÒúCQª‚e·EfêõĬj°6’H¸—\‰íÛÄ[kl'޶‚ìØGÉ]|®z¡û‚7OøŽŒDýžh I˜44ý£8o÷mîÃFðã®ÎÙº›˜É¬šˆÿèçsZ¦“d∙©gñ©Ü`r{ÞX ÞY˜ýq.˜µ—Úg³h¢Ù"8ËIèçõˆIÉì;‚3ÈÎ[0£BNÖ¿ko´hD?ËMzŽ«Þ®§ÿ<÷¢IøñÉ–YÛ!&€3ˆkùÙÆ±·Ù‹¨3–΃xwXoFô?JQ…?¿¶­¤ÞüF½èªWv†»äqêHáÎôÏôÔW‚åÅ`Xyô†Fvô–(­µ™ÕÔFfUR ܯ¹«o`gŠ?mÌŠ¡>u@Ȥ0?7á‘._WÈìè¤_ðüÝݺÎÌ«è+èèÈ –¼Fï…~žO_£\s[«:w‡»VÚª liB£/»™ÒÒA±€<ÚFÏÆ³ýãÝáµRÅdA­ÐÑë‚ð¾úØpÊÙRQĪɛRAi\ó®rÝw=Ù?8–HúÑ8ö1Ô#¥Ñöã¶í ÷”XñÀe"dkLJ´šT~)ä{úy]€ ÀôÁ|â#Ñ?≡¢—ãþÕ:¢.Ïüt¹N Ö1?1.S¾|ÐNþb>×j6œ_ªˆÜÌ¿Ú*ïšI r:ººxúËðùÝ …ƒƒç'öç©„ÿê†Ñ ý| ýƒáýÞði´·{0½¤„½…Ù7BüÅÅÀç¼Åç¸æã‘%%ás˜päå?oá¿ ñ ~´õÿÇø[9 •Rk¢•ÔþP]¸Û«l5P?œ©?¼˜‰të·ÎßÏÖE[ ËTü°æï¦Ö¾)sèû ú£\Qó©Q™ ò#okë‰Tïð¼ï$.lEôÖðWÙ¨ýç„·8Åúãûk ‹ËðýG`ïe~¢“^_ì ž¼@^ߘ¬z¬ÈÄ3—ØñÌ…œIø¯jk©?Úâü9C~dí% œ˜ùWÖtôïäýMélÉŸ´Ö§EЦbõæ¢ïd—mÁ‹mýFÑ^â|Qjš=Ô;ˆ²+9×®úÁHý»ÔYÄðáðLoÁx¸¥‘wgƒi^HYN‹D“hÞOˆKè­˜¢¿¸jM)¥&'WÀ_•ÒR©Ç¿ç¢xÉѰ)³¨^p_Ÿ¢ê®§^OÍÄTIêˆt¤™°ÆÐJ q•8‹ûè]øW'zÍÓ?jµ¯¨Éˆþ×élô óóòÁŠÕŽ?®Ø1ï`9 Ãt xx¬ýƒ^zfÀ¨H†£ë×Ç›DÿE-*Û ×q®86³2úP„°%¾ýÑ?&Iäož?ªœÏuVÀ¯ÚŒú`=»¼?²‘`'øµê*ùøWðj¦¸öÓü«ìðWua*¬.ŒT 'ÐÉV *§Â¼Ÿ·ï ú/ O§¦Ÿ» t/$6&ʤ(r[èéýäõQ¿ñÌ ³¯Éß+‹×( ówWâ:JcŒE?ÍÔp?³)Ψvè@ÀŒtç)Ì:<&Oñ çß]&ªsW,.³×Žy1 e´1SŽÃ¿» µ;}ŒyàI æt]ឌaîÕ{ø±4†7üUHh2&-Ó3¡3½d~¢5ôƒ^†ù»}Lìľ(³œç8˜þÁOF=|O7aÖf€Õ%wlÿ()÷‹CŽËCýqš§ÿ9TÃÆ³ß¯@¾æZúÚo£œ?2?šIè?a—™¿ŸŠk÷z˜\ªá]®æ¸G”{ZrÞòšT½³ä>´ËQFN{,æÉ%ác8ë¶5ÿ%™‚Xÿ®óKâÃ_e'O¨ì¿zJÿØM'¬«HF½ÝTJ§ßA?ŸÈ¬{¶§à'NenÖ²÷°ß5 Я2ˆýº©ðî•Æ%|ýü²EÖ”ž,)¥8æ¸âï‹'¶ÊJH$þbëúKõ3²szo;¬¬TSh®ÌoϨvän¯³Õ¢û¼ ÞÕŠ¦„ôóDv$ëÏ·±ÐKT?,G[1ÍIˤNV®ÂNÐ&²?ªúoîÜ­-%öÙp8œç-Ü'œõL N@1Ÿm±R¼ˆbÿ‡ÙQ>ô‹D±Ô_`%\È)š}N&›È¤­®ö"Â]¤uK¡M b°º4žÏÓÀ¸ºÒ£’–eï«3> ûD¡ýÄÆ'è ¸›Þ¿œ¥)¥ÕlDüÜ-gŽ”¥fHöäðàœ6¥ì5 ~¸2…#*àGÍç_y0õº&Žþâr¸qK¿£€ésåø±¤'ûkƒ´wDØÎÄÇËç?Ço‹µõ'¢ýç×ÀT )P:Ã^ý‰wÁê?ÏËÒ ò¤âè@¶ìGR*Øu™úó(õQ<9Sóÿi~I_µüUM\D>dÆnè:^Ü©2ÔÙÙ±”Šá/£–q^Ö3rÁ²µ / <îX/ôŠar‰x¡å ÷tÇ¢°6ÜaAðànÙA…º’ú#LÐ:èÊš ñŒ>†ÛªMM²Œ+Kë!?o¬L«g ð|˜#ödþn[ô¯°¤·pW%¤¶hƒþ‘•-}aL¾âFýˆ~~3¬fœ’-ezr†Ï8SÏmÖGjÃÃo†¨lMLá“«Oͧ€š‹Ø&2ܘž½‡×)Œ2pOê~ø°Lœç!žŸaÌvy†ƒ*Ç;”V˜Jy¥XNgÔ‚ö\igêÑ”Ì-qeŸ_E¦ún¥þh‰â³ï|ø¬RlÉ8‡  ?L\Fôx®ˆuއy øqÇš×x OP³êo>eÆáfê™sLâ `ÿyF{!ã:Ôiôó¤ô‡œÄ[˜ .:ÄirœþóÔdiÕxêFÉk(-’vg£ý°’ñ Le'Uê­l\¬Lï$;SLg£ourrÍz¸†kü؇’×Y|¼éÅÐ?..ö¹LVÏ÷þeäµï0ËØgØmöúÌ[™Ê|•ðWɨ›îÝ“ɱÓSeç—Wüï}ágû#ôû®¸üãþ ‡‡§šŠî'í±b¹ÝÖÚœÕ,jFü» Áß›_rÖ6–¬¼ØZþê!sáŸ*c•-ZkáÄ|ø ìUh'įï[L"þ*º5ÝyçГVù»>hˆ.º ýç ÄV±[}÷ëoõ'»•ýJ.aÍï¾H.¾ý#/ž¼LDNâè5¸”¦ü¯?þŸ1¡vª…:@¸/kPOy‹Ž ÅA¢üvø—§dÑéÉ–ŠñîÄ h­[{v§‚‘ûw)Í@Œc" Jk¹€\§8®å–pOAD/2Ç„r :óR&‘Tf†´U'þ§ÞÂ_™Ò ÷ð+°2!Ocîc¸p˜ 2Do*šÝpaoᚬùWƒDvÝG|ĸJA5-W4ä(D%“e ºÄu}‘ˆ»l&½×–ÿžH»“Ÿ8 Ö-¥Ü*Ü"Ü?詌Õ\ÁëBð ®àLÌT#ž—àŒ‡¶U“Æ6:/ZÀ5[=ù™1¹®zçê@[&\Ô“a÷æ¡åƒCßÒÌ…=9Æ ®÷–îBÿàið%£ÌÎ1¯ƒI§ÁªØ²µ¨wÉ#Õ¾b xæÄ ùT‚ŠƳQŒ.‹Zôg, û@!—ö‘­¨?¬nñ˜Äðç0:o@åI⫾ +¶úY´ "r¢>ú Êås܃þñ3ºJÅP‹ÿªyý½©¡À9Ñá:Ñ!3ÂÚy£Ú…>Å.êkŽ· ×C]t—:ò£þ-fƒ‹îéÔ1`P>šémt1*WeMfJyÓ¯þê:è0md˜ãyŠL€¼É[Q̶ã%[x¦ÑGŽ2RÐMÚá3eý©?òÁ6m%6÷‹eN£(ØñÒqz Øÿ±•*27•Nw¹V'6ªþeðã.ýöOèl@ÿ`ú»‡2?ñ¾Þ®æ%®uÚP6ãî¹êòˆðto.þ«<'–çúü»žµ©1}Û‰ïO†Z¡ÙÏ›&ý¥˜?¢°‰vj‹µGf4ŸÇ4êÛŒôŸ‡¼)ç•›Zb”жèç½Ø?ØJïÏþÚèOpˆµ¢,ÁìļL;SiÇ-Ö—ý Žz"²² yIÎå²?¶á¿ê"’ÀåvF»L­oƒ¿hNæîI”üŒöYÌwh÷2sÚ»À·}áÊ/‘77ŸÁÄ%çIO=ÓSf¥ø8.ý¿þÅ9[îÐï»Ò‘HÿÏ~hlºÍì¯íάÃoŠÕ¾¾"³š†X¿ W×Ýß:ì^Û(ºêóÔ¯‰?µXڼŻµÆ¢2/_5šå·Î󒶃hðVôç­¯¢¥þXLµôw¨•¨Ný1W †DéˆÇ˜îféçA‹^dgq#'Ðä×’ã[þ«ðWCé?wQñ"TÔ†ÓéR‡~ñdò;Éh_ëÒQ»‘>ü×=¸«¢žîA¼ŸiýM©@ÿÇ]ê4°3,®üh~\…}ÿÀ9E ¨Mý1™Zy³Ö9’kR‡›'P§]ÃwŸïk‡]/ÎPò½ºè·¹£ÛÑ?ÎãHš¡·s”·¿ø¤íJ5'/#'÷)9ñ¼#L•Õs1•÷q Gü ?Ôßð»ÓAÌÝÄçƒøwEg¹H鯹‘æ£K²;÷ýªNSÐí>ÌNO=HÛ¤½D'èOMs‡Ja7çVý£(H\=ü8þ±LŒ¥zY@\Ë‹vjmD\Œí@ù¥ù~œ½ÄÉ\ðG'¹;ѧ„ì©ÝRüÃ]óXÕCLBaÍINì¦ÉYT¬•á§jÒñáÍT=ÃlAvߌ‰äQù¢X\»Þrg=àÞÒ‡»bù»¥ÈKœøóÏò<@¹üˆm\‘§ŒqàÇlúýÁ”F,cAðŒà#°/錑2 Qir"Ì»©oÉp·êã)+–œ˜fÌ/™C$LHd¶6^0¥>ûÏ[QÌEM±vÍZÞ³išw˜ã-UQÞ“MÔ-£á%[Â<ø‘Fc9ÞˆÉ6½DÌ®:D7Ýc9‚zá2ýücˆy›ä+˜©„Æn¹G„Ä?˜p=|, êö“§`ßêYŒxòw/‹A'&˜ìbîÕà—°6%Öü«õ ß ôÔòª˜ëøD&2¿Ä'Ø¿{ ýã¡`‚¬Oo…ÆÌC/öø3ïÓ³‘ÔžŽ{Æ35®Û—wÖR3¼¨? S u\¯Õÿ‘„|ÇüèÂüvvWEéYÀÎó Fj³ ¿>Æ%5Ýô7|q+w7ƒ)ÁøCêñÖ†¿òwàÇ*é®ðWVý\tÙgÔ æp§{ÿÝììuͬö®¸°3¿d1þ° x¿Ì÷Téþb"¼DB2¯ìÿþêúyˆ__SÚýcý<.yùjÕԺѫ‘(xÔJ[)tîrÁø‘ð7çïeílQ“{S’nꚉÿj¢² ÿnGÍM;¢¦V 8>Oǃò¾Ø­-‡Í~C&¾Ó>QC_¦Ì`†\{t‹òL÷Ÿ…7v”ŽxT¹~XZ7,0œÎê&Lz[¾Xø˜h'›Ì¯k"ŸJ^Îå¡HÆÝ[.£Æ®‚êÓ,˜aÊN.À—úcÑÏ þjT$×|QíGý1-ûµGrx¬.<µ9‰§ÓÈ÷È-(@Ë¿{•š¢úÇÓ_}J 5 ~ßYè¹%@ó4œY?Ðä>›£p…ã¥+qì.ýûüî"þqj‰]ôŸ‡Ä–C¥þè«– ëGoÅÜ­n`í:Ò'럴ýÚS8ñV² |æ{õ‡j¬3LcÈQ~|uÑ¿¸'ŸÂ"ó‚tn'w™~>…è?–Øù]oŒ÷:|T9¢óðò Ž3;±r v]¹òã@ÿÿë@Õ]L Ö)ÞÜ%²Åä³xÜÿQÆÊ›\Zân:†©úù@T®2ømPŸ —ã©?Âë•°¹‰‚+àT˜ÿ>°í úù1Ãhº™|ü.¾ÙVx²ÖÂýä®ÀFM”ñ˜áp<ÕŒúþô+±ì8WßUS:Ò‚^lÒKa_MD{ã9º*2µ¾õÇBþ,&hgm‡\«- óäôdežÙs¸ÎÂB•ëØ4ÇpcþIlb_2ÓŽ*°Ëx/Ýñï‚•cèYE%•ÿÕy"ÔüöŒÔ¼åxö;ÁNv‡Ó-i¼e¯ß+£ÊÄ6ÜWy™e¾ÕdRs±ZÑGþn<œX68Á¿û?–8>‘ÁýçQÿüua<~0‘Y™¿û­)Kˆ÷¾(éf*{0 È¸Š¿)ü8ΆóW[õ¼¢_¨ù%û•ýZRÞ²Ô3ýÐ?ZêõQ,Š‚àM©b€gž Rq¦¶Ü4öç[šWå æ'Žf&]"Ùˆç°:NµüðQZÁË[^ön0»‰t?ª™íLjËÌȘl%iÁü«é8²œìCÁˇp_˜ºYÿÕ|êÉpü©Ù¹âü?Ù¦ÿãµmÈ?Æhôe¯g~û­ûÏÛðt-´US›òo]u93õ^8>Ϩ|±ßÖ ü¨ŒWº0UCJ-󝯱ÿ£¿èªbm3µj˜ç7²c?f2?±5jmgÝ[”ÑÇÑÿñ—p£R¨'Ú‹…QÞ?¸“én™ÅaÞ?*ÎäßÅñTÒ»ŠådöO@”ÆD² ø¯Š Q8ÇZÚLœ?m­HI”ßB{_EÅþ”7q7Ëòàhsõ²w¤ø‘LÉIýáDæ\[.ây¬ÂÔáŽÁ\}yÔ{AÔp!:o£zڣ͊ä ß«ÈɇÂLÝ!j$àêÚ•;à !êU—ˉÌ{9úsþü,oÀáÊöS‰«TS³Pl  (@<ÏDgü@îà]ø«YÔDkPÞp€ ›À—iÜÏWú>ñˆ1w¥‹æFdÉɤ‘Î Îþ¿ò‚˜>BÿªÐ¡Ÿ·â.\£úØjGG*ML?.³ÿc–˜~ÌåÊŠ[¹ïTJD¹ŽT1“`:õN¥©?nò¹ïãß˜à‡»ð~Œfÿù$>µ,xŒ“F“ ¹S•©`¬å«á\3?ñ(jzI2úFäºÖþÁ)Ä«a8B â‰üûÆ„¿*O&î¦oä9˜½-L¥MNoß c0‘p!|‰õQgbü4šÚïªÆY;}u2ô§Ñ îÖ꼃pž~‰øpSmè8ÈÏч“׿aài¦¥?“ÁÃ(@Y@·¯à›/.ð¥úmZ˜ãÕฬù uÁ_;3Vf£ÆO2zÁétÀe2cãIÚj|C˜Üt ÌZIý±ÿn"Îw…<Ê•›ù»ëuk âsœR»xòßêûp~¸Þ#ôŸ·Fñ¨ƒÞ3 “N/z]&Ÿ†eÜ€úM‰¹Ø³Úq¹ ”èEyú/éŸåqÏEQæï>g²ú#1>÷ÌPLŒ·Œ×ô³o +19³6ëО þª.øüœË~ìUk£E¼$mÑç’ë gûR”òyÆkÜ¿¥ìUÌbÌoßjæ`_Éf*<ÔaEèzùFœ¸/FðqPØ*‰ð;~œïóWk~bHÇ ]éôõï¶mtT¤ÖºjeÐÏ›s·—°ÿ¼2LSu)®® ¿um®ìl~T„½ùSK¨Åb еÿ¼…Ö^;£–QÃWøÿùðÛµ 0êïE\N5ôõÂY£lc&Dk}˜¨ÁþÚy"0Šó0 ;›Ø zl矉 R@¶""ŽkÈă¨IšÃ¤ Éİ(áGm “¾jñŽl o%ú=¦"–| .!v¿1Š2v?òþ»R„9å÷DVø«zdæ¥ù7:¼ÎFòåâÔG‰¸Û™Ü³€øíFldú¹¿Únʃá”2×kÑ?FQû‘õlæ:ÀQŸƒ§§qiõKÕñ¦…ýL¾ÛʪIõhrh[€xnñWùõþÝEðSѾp¬WÄfoþOÔÿ¬ûˆú?m·ŽëÉÖ¶öh%Åpë¶%6Rõ€áy §ÔS×…v;?ºïö€DÓ¹)ù)"콪‘ý£&úG!z¥[Ãþï—MÑjK3 jùø4¹œÙá{_”W¢ÏU.ª€¯°>»ù|×àV#Ìþªz÷vú?NÁˆ%"ãßÐ*ŽÙDÔ§~Ò?$™À)îu¼RìÕ•ñîœW:6ÀΆyù]1«£W´aþî!âS:4 $ü¼}ò x¼@›æSöe©?Þ¡ËÂÆŸZD—ý,œg®†7QêýÔ÷q,fžàqpz÷ò㱌e°”Ñdzs®S¨z‹ò´¢ÂG˜ßU07 ûk“ççƒ%ÚI·óKjòõ]j²)ðaéŒ{`a:ùTx9¾ñÊÚžÙ›dOqŒÂÚ±[üöòè©™uøÓÓÛ˜Ÿxƒþ¼bì)‰cZ>ðQ0€£©€2ˆù"dRõöH$ÁÞ„çsHÕ^ïÊüÝô4aCbR³=ŠÇgêe¨ñûÑW†›Sås3§Ñ ü°Ã_åÔKÓ¼ràÇüW=Á‘äÕÁúFê¸4¸´œv7³°}´}-üUúå_Ð{Õ`*þ«õtzA!NIŽS\„7à¿øÅyð#¤KÁNÿyTLC)®¦¦ÎÚNV›£XóóëmðÓ+œ.ÙÂ)ý© ^ ×Œæ çó³wˆfîÿè‰k¥ØVBîîNyȲæ—ÔLáe+WQª3úù>«£\q)œhYqO´‰€¿ ´Åb·ÌdT…©tŒÁ•»Ü^HÏåŽÐ gÔmrͧ¸6×2COÀ5nÃí`JOí£r.ä–5Bí*,?M˜œO0‰‰9§ã8ê^1s$1‘¡6S–êâkjµŽãô€ M/ÁªÕÂöÓäæø¥ªéC¨¶J'&~\£¾\'KãÃ!ýÌÊÄüÃæ8«’ÄãE8˜v†&˜¾œÜéƒÊ©0Ÿt'¸Û– ÚM+–Ñ+’DªFkÛÌ1™E_…Í>ƒ)Õ©?J‚G@¸ t§|aŠ.¾õúúpõÇEÞ¦°#×ÁT¦ T”uÃñZþ«>ðWî¼[¥é©­kV´76;Áÿ)pií•Ì\öQ Jêì')~^š)øWȽ®ˆ)tŦ¢Â­ Âï÷HþWþóª-S(¿þ›«Î>¢SQ”cèé´AZEí»Ò…§u!óKJòoYöG¿Ùÿqýc±¨Dì,~|RcñŽŽQ6kíE!öR‹©ÙüQèßóÕ<àk‘ç/Á ¿JÓ'2må Y‘^”sÐÏC&€†þÎð_V.Á_m'‡1™DÉ$kS à3ÎÂÖ–äÉê*â°0~α˜6žNûºäÍ[9æ tôëhi‰PEä^´ëë<©/Á»& )SS#ù'¶’wS qÒF ™VæAep3NQ5ß眉zàq»¬>9œ‹æçƒû«ˆá£ð™5LX¥®DõzAîëÝñ_…ÏŽ&ªcÉ ]¨?Ö£k´’_9Ö>bØkð#)™yó ȱj¤,V=ôóœ0c½9ãÎèÑBM3ÿû5õ+øÑ…gm<~®ÓÄ´Äó´†þSìò®Ìð]æmЪ>½Ûð_YïGà›†É4tÚ7ÿÊý£Èÿü8HäÿBÿG=&¾F“±ÙÓäa&bjßevæÝ• ÉuÏPsÅ ŠºÊl%–êË´ a>åÉøw«‚jþè)í¹{¾rêÇT£6zL4û"ðãÎØÆGéÁä¦3paS©Sæ 'IüÆÛ™òöeÂ!¿œþóR¸ÂêS Õ“GJ#Sá7PäŃuýc?3Î ‘‘ÆýÜÙ2™Œ[ aaéªþ˜§¤ÖÐïR%'5î‰óú0\pîtùÕ¢~IÉ}ÓíÑ?Ò¢ø³m·9øHâJÅ9RR¹‹Á¢§ãz(—´Œä@–þ1·C3½6úG5Ü` ÑO²€ggñ?ƒ¿ºËFG0Äœ.OƒíùÌËLí)ÅósÑQ¦“ÉM¤æiï‹$‡>i(ëÍ®Tovúöó°ËÖÙ> N~ì1òÙÓÑ¥RŒŸsÏáš]bØÎ²¨Øò8ÿk_]°•f¶á]é¥üÞ\ßi³ÅD??­&ÑúÑ«ñM±ø+o[+59ÕG üWßl÷Cþj¾ò³DϬEΘžÅ7Õ÷ê+e‚r]«+²Ò¡x_—³ã¬£p8Ûm1‘ï¾]oî÷vQBŸ¯¬Rcñ†'qá¯Æ‰ õW¾¡°Ç?ÁÓ]HX1vÀ…L Ф‘%ɧ=ÅIôï{h¹%¨C{±ÿ¼k¨™>aú¿ê¡,Çž¡O„gŠ&/ÝÓ ”Ç¥ùŸhYŒJ<[Y¢Ðÿa*UÉ6ï‰((¥å Î¥ ®€g»@¶bà‡/õÇ*˜<^ø¹´‘ÜE?u ñx"}7ˆû1©·º¡–W†Ë˜NЄ „É[ºài¢·cÿyÈ$ÕÐ×i³YõG\ôyœSn®1%ºNgr¨ }¹\ CçEä¶æ_½ã=ŸÏÛÔ’ÿ?§Ÿ"ôïŽTáßÝ÷ëoõüpáv¥Š.‡êG´íÚ{ܬn²øáÓ´„{ñ‰º¬Šž;ü8cKʾ²‰\ë`é~¤?:àË OWfd4\|#Ø¥£pì%À›ÜÏmóøQZ ú©ÿcû?ÆQ E§ßp'GŒ%g‚aMÑBjÑß·Àp¡S¹:•Gá£d÷‰Ñ»wRÑkºŠ?eöà\gõÌd* ƒd)¨?ÊEÇ™åN´òd߬ßß”ýµ›øì“áÅ:ÌÄ‘‘ìr-„ÿêf˜OÚ]ýNýqž§¡8“§S£¸={ŒKüWçÍú¨óÍèS¹@LŽN¼ÿÄ<fqé„築úä+/È"Z’|ÒÉåð÷3Œ²üÕ&Ü»/éÓ›i܃Q”¯QiM§>ø‰Šgû:ž;–¤œ«7¾ˆò`vCéËÓ÷…þó³ÁõGrã8ó«™¹Èò×Óÿ7ƒù¹%Ló!lÝ0êŠXÆyîu>y[,ro©’ü(/|EWð_Y›=‹¡ŸÂ1Í7’À_˜çˆøíi¨Þ˜¥ØJõÝxɓՑŠs4^·\¢¯ðtÜ¿uJ€–L®ƒ¢ÊÿD½Ÿ‘ï¯Å"0¥)uÈ]¦¬{Ñ'~ØÈl®0çÒžÁh…šWZû?€´øq%o¬ˆO/sMº?âá¿jj§ÇÞ˜@oJJ³8]•íSì»QAܸÞ$öüæ}>ã²f9Ø)~zKð£›,ô?™_rÞVˆÝ?nµTÚþcý\Uö*ÑÏûÂ_ES[rÌu¶ÆôÖ¡ÙÇþóë?~H”~=~ÎLO²ÒRD˜š`ÿÇ`%HëÀ6ìæìÊ÷›þ«]Ú|bàmx¢d¿»ÈçÇ(L,áøeD66 /×£8¿}¯rŽýµ—`D,ÿ®¬ê’LÜ= £ñ˜˜W ¤7þÝ®QÚÿÑ€ýQKEwtCd¨;¨šï‘+§ ÷ª!·®Õkä%ôrúˆHëCqgn‹ì0+•‰¬ùƒ]G¨’,¦â.qôuDpÀÊø×GŠg©?îâ'…Sv•²7¬Îz®xyy_"ë2peÕÂk*EäØåà¯Þÿâþf˯ªðKKAÄÜTZô¢ƒ¶sÐË·ƒC èBw“îQÓlägºògúF6¾Dä¬î®4Öjð³é£ãÍ;ÃQò=í`üÊiúsí&ûÏ­É…Mpt¦úZÌ{+õT8Ò"òï´ÅD? zOÄoU5èˆb㨠†‘-Ñ›ýÁüô\ã³Þ~Üãz*j/~š_2‚ù‰y’¡wŸ§‚ùBOÏaâ†UXóÛëÓ)P•ùíµJd÷-à¯ÒR¸³ËÉù‰Ñš|“T}BêJý±ˆN9?êDèçyÁƒò \~sйùŠ| cñ> ÕÇ ¯·LÀ¿N(ôÇ2 í¯¹¾Žçµ ^Û2°pq Wº²³ÿ|*s?€G—˜ßþš ©št-4ɨ7š±Džå®ÏÒæ…9ÞüW%À‹Dü°gØ»‰ØSºß`ˆþ4¿1Wp‡qIvE•§ãJØAÔ—àé~ôé8^ÎuŸk6ù ¥Âg/¦Ìîщš-'úù&ø« xv·áŒ]HŒ-Íì%OòGù@¼×G0¿dSwk G¿3–ÑI臒ü¸EÿG9s4¨ô˜g¡33FÉÕz2êýc/}ÌòVÖæ9­À¤”#úp£ŒÓbzÎá¹mmöG‘·æ¹ß7ÎUÙµU¾7S©•Ã_e… ½©vàÇq¥9ºnžßÎT©™_âj?ldËØ9'P£úÇy\¼=¸ƒ:ý)O˜ àb>¥ÿãn䆸üÛ£ø:®øßûâ ýç!zç[7%*ž¡ˆÎOeÿÇ&ö×öÐ22?±2OÃ|[[µø‘—ù%_m}Ó/ï¶m*ýµa$œÁØÏj íu’òI"œ©?®¨¹Õ‚Žçí— õgµ¥0ê·Ñ;|‰^[D½­²VMDŒ(ŠÓ¶þ««jT¦­Û˜ÒrþêïåûY§ZZ–Aÿè#¬yHÉÁKÇZ‹$àGHMêTÂ}Ù„Šmƒ¨G^LLÚJÜ¿EU“ ½6ŸÜ‡¿ò:ó[‘ô+¦÷Ž?b+é??—¨0ˆ˜™ÖÉ•ìÜš´êÏ9ßçœë—P¯ÕÜ"¹‹þêHÎl0gtŸº!&µK3òî¢TLƃi^JÝ¢<"—] &5#~¹AFSŠÂÂ<œPtçátÇwÌ#†­”lN×'¢§h°¯Á¸5ÄÛÆ é}°¾y„ýã•)Z'¸ñXp_-@ñ;T!¹®Ïä½Ð?|µïô^´• å ôÞuðuå¨?ÒðsDP\²e¡ \ÆÑó.¡‡Àõb&÷l Qd.Ü{p)ï‰É eâÓE"åF®ÜšÛR^{ ì÷©NQGо¼Ù9á¯N‚³ßñ€}gS6c;ÝOð5±¹Ö(ÛÔ‚œ¹4»=ˆ§®²üUxÇY"· Vzø³#ò™E2ܘ_r€þÁ>x†¦âg=~TFÿX‰£ªÕ×Yê…)2W¾OSèSìÆ'Ñžz÷9ç´™Êá/]§3e•›ŽÃIæDbé ¦È:dy6Ì^‚K2¸ oðsíÄ»¼C_¢ s¼uÔÎà‡?oC?°æ óK<F}ðÂn߉~þgJ¼+ÚÁ¢Ô)sø{ßPÐÈË"ÈqzÈÐ6ã|«,߃¾|®1@Ý»èçA̦¿nl1[€%éjoþñž~Änæ+Hõæ~ÜßÓˇb¸ãx^Jbíœë#ÞÆ5q üèÀ–“Wtíï Þï6ûMÔôtì0¿É¶«º¦§ñÅx5TêÙ„ýƒ!~³£Ê-+Õ{%ø«æl«¥aâzMô޶dßñ· w&3ŸÇCô¼ü×j¹ÑLkôÐàë«FÓŽçGs<…Ǩ¤‡‰Œ¼eƒaëè‡Ø&r f]ŒªÕûa–´O²oàÿ;1Õ$º=*ÿCYÉüjÕîbˆ££T å8s\úý‹Ë¶¢¡ôη6%¢]¡Q9 …Ηù%ݵ*x¥¬úc ýARêIôó;Q9ˆã ¢«®1ùdzd¢Sd¤‹ý”Ö„izíµcj¥ßÜ?xLÛÁüR´#‚6!§uÖG¡| ôf¢„pK„ŸQ—šã„_œ¢ÐYœåMñÁç3 Ϊ<óKòà¸ZÊר)›ÂS÷b~‰»™ ãøöŸ¾h¢MÑÖÐágƒ“8OLÒaJ&éiåüRûø¯«Ô§V¯—µ?Ê=Rüøl+Gl¾c‘[Ö…¿*Oe¤ÇÃå$…ßÙª·=–rž›´¾a¢ÀO'g»©öÁã4€3 "Ç…ckOÄÏA®7‰÷µ Î-ôYøîì îÂ|åËχ þ8Š“j þù–£Ô‹7E Yý³è?o¬{À|£RxÆ]ôeF‚Ç1ä9:~ôÎr*ó;‚ÙèéIuu… ­!òçÎý­¶C{‚šÐL²°óŸKzð¯0XÑþ¨;¶ôôa:1ZL0µ…h=QOŠÞàF¿M¾Ñ»Ñ¹wЍŸ~»ó|þ›¸rçm;í¡r>Ü5W‡ˆa0äéØÒq•#X3UöÀ}gžTþ`ÿÕKðÚ¶^é ÛTžªb&úúxÉ,¤Ÿü»:ûÊËsFP÷½ƒU9M,²üW)è!¹fŒ¦£n.zÅòþŽô„l±Ò€ŸäÆdiÕekfèS즾­¹+¯è…ÞM§w ´”îðWiùu2p(®šÝÁîüþ5059Ñ>®aô³ð”®ÑV„9Þ\ô¦ÁN…FðfñùÙÇðï.F?ïCÿÇvð½3üÌ‹†fxP{=ÇÙ0˜·YZóKàéº&B>ãÜL˜³&ɚ˃dcª,CÿGwfN¦5®°ßÏ ÿUfLcÿ“ÕîÊDF ?–à-¸÷Xý|Šãrgƒ7õJ ÑM]5¢ó™ºË­LiùJgÆb* ?ª­3ôŸç¦ð>Óæk£‚Ä05îI?2†Ér­^@ŒS×{œ>‚äViHqÛ`NW;ó *·'ÛDÎÐ):ÇÜÂþó\† •qBÙXQ‘úã¹£þØ¥t /!9hàJ¾—K¯b¶±÷¤šaÜÂü'SÛèÜi¦d~âæ'£ÊÉDzװWÀÞxÞœÊÂÏqÅÿÞçmÅBémnJÇ}ú½³ˆ­lUf1¿dýƒ1‚ý»+èÿȨVsªkù›üÕE[m®è ~TCµˆ®ÅÕ2°÷:ýƒÕد~€cþžÿê±vˆøIt!âTÕ 7ô?5hKæ—´b~ÉqõM”.øÙQ]ñš¸¹ öe…~•§¡9ÎÖ¡â(ñßÚÒׄdþÝQâ¯\´iTZ. Å^¢üvòçÇä½qpúåéôѵ! FSPÕô‘‘âGL¥<¿¥Ÿg„ùŸCÍâÄÖ÷NDŠ»àÜS~Âwbs[ÐËóœn ÷Ï7à‰: Fm8ÕÏ5âe\°©A*‘•OÁçZ[.'ïß ³¯kóôIÂK qb†=ž¦TVó¡Ë̃½JE}‘ŠÊ¨Š|¾VÎç —ÁâZîT «y›¦PÅ‘Çpl‡ÏÆ­ãĿۓ»“þª+îçP¤oà[~›Â´ ÚW˜#äWžOªøWÄŠˆ¿º`û“|e5׺ÈV–úcü¶µ…{´ìµ<ïûäG´- ¾ X;ÄâW‡k¯r§QGˆIÜa6¡ÁZó¯&½€@ð n€‹fÃ<Øõ¸øQCÞG+IÄĨE"–Èî-Tƒgí¸Rù­ c%÷À®¬#sO†rÅÈüÄMì³ð§°½»6*ÿq~rf™XS[–)ß±úG>·@朣¡P·7¶EÁÙ01)ìÛÈ¡ëÒ/Þ‚»·9Ür6êBFضkÔ+µ)aŽ7Q4•åä%ëí‚ñû¬_’ÛaÃæSýô2¤}—™žÞ¿Ë¨Ýwå£ùˆNO˜¡C ¡3úùZéjWg* ÀÇ’¨Ì-ð_YüU5*‚>ìÀ­DýqŒùWeÍœðW“Ím(Ý®àIN©T‰yø i©„üÅ8ÇÃ7K‰~&fûé_å[ñ@oÍüÄ!f\òùMFt|kŠý>lVAæï¾bÛUKX-›ùŠÏv4õÖ8<"©©?†9®×W9®eg&Lmý¸ÞLžxáÜÔ.Ë©‡>-é?>3¼ôÇìn®•¦=ŸÑ“'3)þÝäè‡ÇBñWG˜¿Û[Ä…õ® ‘W¿jLµŸ4û£]Æ–Ø^ϬnÁïäµd~I"{júJJ°ÄÚò|I,æ}OE–T%ÔÄ/Ç¥ÿ׿8OýânygkjáïýpU9¤¬cþî0-§ö)xþÕzæïæÇi[Z=†Fÿ{óO0ÿj¥pEù-‡œJËBOâtå©Ö6£‡vVÍ †ï°úÏgë¯í%bÚQ¡àƒ=‡2ßüˆ>¹ gôâ†úý?âÿÿôýN"þâ øácUœ™þȼ·ò;¨HZɬþóá¡8Ý_ºûxw‚ßx›O£MÞÏIäH6ø§DRkÿ‡¤Ž˜BÅùþÁ¸Jcø«³øŒR£Äþ½éφ/ð4Ñ«ʼ/êôn*šI¨õôÕZÇ[ñ>UGƒ8=ˆ¤Oø¾$ [?} ÿ9DÔ©ð+ðÚî•>‘㟠FˆÅ¿ÔÏßÛò©©Ñy˜ÍÍ[²ýÀ[JE²¤k«¯†mzÁqÞRC¬ãOæqd!wƒmTŸ¨ôÓ,ݼ Ü§ö„úƒYfÜû¯úŸ²ó¯Ni®Å…»pcnG½)Á&F'þNDóÛOÚ²âßM¤ò¡ È Ï`ñW3ô$ÔY®øw—ȯzw¦^F».Š—õ4ˆt V0³^]µç?ùwÝÕƒ³)ÜÃç†ú<‰'¦1zDÚ¿Ûü¨Êü’V°F‡Á—²:ø±™~ñ Ò E.S¸Ïåz]«pï+#ÿ¤ð,JúX,T/WÐÏ«š[À‹ fSã4îêàÇy‡}#ëe|²ˆyôt‡þ„]Ô÷dg'¹ÓáøkRe0:Ë²á –¾$Àlƒ_ª-}é·ášÒ³mV2?äqx+þ«…aŽ7FTâgžã®4±”ñQöŸO1ÈF¼§iéÿ¸Ì^Ø{r ½/þxȼa 7ãö*e66ÈÃâƒãô2°!a*xY\®u‰ÞS©E*3'q 5Lú•@åÞ‡ÿj)3¢ÚÓOønm `Iã)ŸH2ø+Çñ)ßÕ›z9HÎgþâüU!\f‰ìµ˜tõ ^íZÏwüM…ÀÇ ‘7[Õ_ë‰9â žòcz~1MŒq\ï)öØ¥‡¥nHîØF¶d&Ò@\QÙø\Ø_û–϶Ó| 1¬Ãm¶ÆÜ&Ø Òÿ‘š;S[OKÿûC=¾ƒ¿º ¸jÓD r³D»ÔºÑžÏì‡þqtËloe–?vÀ_ ä|¥½þÝŠìO|FL ©„âòæTùŸô·9‡ÒÏ_ØZ…šÆëø¢ô…©ìFÿˆ£M¦þ°«¸Û‹ÙUõÜYÝËŒÆQ:Ê¿tý|;úyª…§"ý9ÔìmqmÀ5ûoîz í†ŸWÉwÏ€òÇDC}ˆâ¥>MÁÚLG[+n«!l~œED¿^„§« ^¢ÕG‹¤O£*ÍP±“ßyGì·LÊS°#œÿÊMÛçµn-þ^ ôóLÆ@ôY'<»;ð ,c~» ÿW>Ú,¯ñwC:yKŒt|¸0OÚ î½ÅÞÆ5Þ‹ƒú@™‹[iìMè4OKßå=v€D³§¡†°ö¶aŠU¶ûÙá¿‘)íÆãßMLw\ïÅGûÂÖ”ã¹ð“Üé?ÏHWø"P<ˆ‰#-ب{‡ŽûñôËŸa7äPó°üff6\ÁTrOcy^·;žÂóJ­©ÈÀ[Öžw7¾‹ùWGÍÁøw_³M=»½­™›ýÛè?d.7ž±ÿã)3É›BŽCÑ]À÷Ä‘duqÔqÅÿÞÇmyCùw?Ûj(á3Ÿ¨žKLöGù¨9Qƒ‹iR­ÄÝÞŒþ‘_m„þqœtAQ=Pðß;n§ÍõaJ2 0‹–XK¢ÎanrW¢‰›vü(ïø<£rà'š Â_¢9H;òó:ø¯ö¨oÐC:Ò=è"6ŠËª-JG¼¥gÙ”)éiÍËän=¨ÇS‰f Ã\ä¸'ñï¦ ž_r†£^ñÐxšãß]‰æñwYsX^<9nœ¤ÚrG?ÿÓ^ ÿU*æ_Õ¡k¶OyÇS¸ÉbbÝ]U‘:®*µXDýƒWñïz‹~ü¼ÅðB¥™'¸¼ŽÎò_-¦ÞÒápÄ] G&â·ÅÕœãÓÈéÚgår¸Û·þj¸]ŒŽ ÅNÌÄwT#¢×&æïdæŸÝ,iœÄTŸì»-wµ™½»• ‡cå ‘Vä ÷,Æd^niª«ÊÄÜLðW>zNœÄy™=x ÿÕP³9,É%3­¾#=é«à~òPÏKñbýI±C¹æˆ#Ð?ZÀ˜~…!º‡[Kaïàê…ì(îžè YÙZô†ÐûËYs‰|‹drC¢ÙXJ˵¹aŽ7[Áãûˆ·Á·A<<Á;Ù?8Ó(Á¸ìgFb<­ ö‘0÷Š<~t¥¢ù„2žÚ˜O•²ß¡4LÆJ=9ŠÐsÜÅë`„SÒ5ó•Šá=XãOýÑãUafî 6RýþÑü¸*œfÎ{n€ôL¹ãøDæ+q´W<'Ðð>3ÙÄÊÃ_ű7 ÿ#%Ê‘Ý~ÈŒeÏoÏ‚+î3Ǜǎ’;8ZFPLE?/Í,‰íŽëµôóÔ¸¯šóT•g¾çy½·QÍ^7Q£!XJ`ôbzþp\ÙfØgpöŸ/¥þ˜ÈõÚì:?%=ºü rÊ—b:ïRjêæÿÿîY[•PÛ?Úºücüˆ«œ?’QTÑTµwÛÛÖÚ£;¤ö ©þõÜ6CóeªG÷õ]‘ŒùWÑÔñÊ+ø«ªZoí&øQÔñy:”ÿðE|q”»ýÏâ9ü°‡Ey½'n±D0ÕDIÑAìw£¸ÿãê^Eñ†gç$Š×,2zö ôÛaÄßëCy ú¢¤g¯aTÉU›À¦¬¶ÄUðÇÚu ^,%u‡‘11¿ÖA÷o€‰xiý‘@iI/üUžFœ‚°KV¤¶º$¯¢”Æ¿{&ky¬nªfú¼Hç_½P§S ‡¿º ŸôFX[ØWÁ„yã•ìÆOØoäK^wý6h:F,üeÿG<¥0õ‡!gPä?’p墜O:ø+*ÔmT"EñïS˜Ùg±0‡Á‚®ô—¬ƒ‘r‚»¿G<.cÃp¬Ç_uR­©Ì–ÿª5Uuð-ÑŠ!35Ív"_6»/QµÌUg£åCZƒš’Ùð»_­oц†yÿFŠjÔ»×¹'Uaã¾égå6TžÑFwø´TöcföG}‡}yþÑ=` j·zÅ_œanôv¨éãe”Ê6𱞷rLfLYÿn'ôtÆn𣕙—Ô*OúÿºÁYûkGâX.€~n±D×DoÇ'²NI®½æx7xJLæï~ÕÇËRÌœŒk/R¤¦nÁÓ¥ Ú3¡x¤+q<ÛÅx¦›r~äôó¡b«ãzãe†.üïs½:›¯–émrö|ÌO¬ÄþÛ?™‚µƒù»ù˜h¹þ2¨Ió¤n¯jÔFÕL-]pÃÕƒIéb=  ÐFˆ‚¼á#èÖŠ®a~âVzཙْìŠ3¸û?Öé®\¯iOŒþQ„ È`T‹%Tói¹ç-ÄfÇÿ{_³åa¶ÈŸ÷ÁÖéóW±à¯¶©v­æ ~Xû?¶Øš¨Eé©Mÿ`ÊßöïîÖP4D9~!„ýµã”[ðWMÑ?®pÔßãÙžh0/byx#æ_á»R¨1‰¬ „•]¬Ô_õ½ý¸;ÿúŒM èa½k3Xßó^A–¢Ë¢¿XK¾ˆ'¢¹îñ§˜¥ýQ­QŒ–ƒßaX¶ñfjä&½y"¥çãÊzG´7¨l‡s'EŠŸmè«8 2‘ët”óPN³Á:u¦Z²Ø“³úaêíDZOj…šúÌHûŸ©SyK:R‚•ß»w¨‘²¯§ÿËòïp烞‹õ¹ðÄao˜ã¿07ŒÐB2°\D…?˜¬2$cÛ9 YU}&‘ÚÒáïPCX“À¦rä/LuÑ4Çê8˜mo]#þ®3 G/P1|mÆ}’pù=tUœf”5÷¯¾ô1­(Tæ JDó¯ÞÚ ²/yx0– %ö¦ë d!Òu=ÑÿÐŒiMÖüÝÜÄ'«§ý’\·þ«‹!'üÕFu5ÕLr‹sT½ùǃb5¨/:áÙLÙ_äõ§ÐÏëã¶u!/­‚º²˜~iè%DêpW›~Š< ñ‡ Tíýzf¬$úÇay‰ú£2 Ì\HgÑ«“›a¤r¢køËTÄæ„ÜÛ5Ê“0G¡~A]ÜÉÓИ©$å9¿†;ºLj˜¢eèÒé`{Îþ[ìSoA×x[ꕨ3ɨE®€î‡´qaŽ7M´ãïXþŒðH’û´ü˜gt£ßܪ?’Ð?ø…n‹;è!uÁ¹àG:é?QMå€o 5½É …q'΃æàG=X]wr¡ºøt»sŒ¬L$ÜA½ŸïWñaM£ß»+}„¹Vkcn›h|&§…«ãÙª¤Ñ8IkÆg\ã-ïîDPk;NšÃ_= ñ½$oð7å`2È7Ø0o¶£%“£6FÈzZ1_ÈQi¹A(~Mé\@ÿy2æï®B?7áØºÓyŽþqÌ9¼ddU&Ê8ðW.à` fug‡ }¤§qd1×”áÚT‘ ­·#ù^V}‹Q‹nAXÎ+ðhÖÔÝföžöøwû ×ýÞi$¢ÿ|-û?ši´·J޲ÃVŽ>ñ¢hèûà¯ëp~¶ÍðÑPzKR5Ä×RjÎLñ½¨u§ÿ¼ƒ¶WWæß:Ï÷ÚQõ¯b o}[âkU=g›”hhÕMà¯Ô¨9Äüaª œ!—ïçt};>÷.bïã3"³+õGü»Dˆ³í×ß^›®-ˆ¿+9Ú…ÛDë´D҂İDðXõà]jSÝ6ˆBÿù[[<€~¸9’ÁÝx©óéïðïú›ÅPæ·àŽÝÍÎÔ×Íã´¦‘ÜÅ3Ô±å`ø+k§¬ä»zÛKã]AÎSQ²Aä<œÓ3îÈZ}¬˜* {Õq”Òj.*ªÙ¸sãßMJÿÇ0ªš'8¯£tÍ†Ñø.¿ vƒV¸Ãoù¬Úifg9U¢ Û À4uGüyÿj&ìû0=¶¸§ýA|îÄ¿Wȳ7ñ{E9ÿ2¨±½onÈùز‘¯Xx½µ£ ï¹/÷güÔbØŽ9ÄØ¿ðÚ|@_8̤‘¬°lÖ¼áƒz\ÔZí¥ò äPÁ_M£ÿc šŽ3Žßg(ïÑè¼cgJH& VÅU—ì¾ õÇb²dÔ7ˆÐ™é¥Û# þÔ9ôV±S77‡+]€Fòþ¬@p´ÌŽŸö»Xk’óJû;ÐÊ~î} fIôçT e*®üh8ÿÕPÕvQÔÁ§UÞ0)øAæË>§ÍdÒéíkp´6§O­9s­=*Ùa×’±¯êúù¶¯Îó™ÌÎ(.·¹+E¤»|¯–+è&kLä|RÙ/M¿±ý‘¥ÊŸÚ \öçùþ’‰Ø8ìZÀ†Å¡3o%šÖ1=q¿5qĞݼÂ~ 's"õÇ5žT÷àÏnýçÞ¡üWG•@-/µek”»ÌòžØ£»Nø¯¼™TòÆ8NãURSÉŒ£²âÜ$¬SÞç,¨ç è–®$—¹·sÄ7Ô!'Ð󆋉ôúD|ÿ’)eÔÌ0Dk©>J‚i¨Õ{‚·õÝœ)u øñî޵œºd,?ñ‰¾üˆ‡g¡Ÿ·‡•s†áèÇÙ]ÃýX{eí«Çï4“ܼ+Êâ^Ô”õTwåéwÏɽ­çxsCÎó´-,¢'>äeàGŽUDk/2»‘¨¨£aÖ¿éméÜ»@ÔÎÇ´Zk{ñ1ÐØÚèàÁ¼ÐðüÕhµ_0~äé )¶ ‡XˆÞœÙE+è1{Måq›îˆ¦Dû&ø½j[=ÛðWcåð#|uýUyFŽÁ„$î{bã=‘é­31rqÖüݦL|F»réј åf6áy:þæHö¥ê¾°®!Wk³uƒ¿jCVñúù5Ô’8`Ã@¶åUEžGäKcßcþaï`¼ÂlÍ nHÍåÉüv OôîæÙpõG‘ÖÏò÷å¡°ƒ3Ùrâ7ØHŠw(3ïГ߱¤‚¹i.Üâ*yßp>c·|-®9N/…rPñ„ë©Å;`q°sè­Ê,¦T1ôÂ×yÍ?Ø8 G×°W™p{‘nñíøªÎ‚ýåÑã{9ŽgñWÑP­žQ'—/E\¦UÐc† ¼3€Çévq²g¦sðµÜ0¦Þ±x[8Å. X6á%Ö;îßqå¡V0X??«·”AÄ7£›=+g³–9_ßðLÂK]‹ù\qà¶¥žY"ãÚóuùÌr‚Yù¿èéOáV*é "=lÔPòªÌz€Q ¦j´1., ,âh³®ÝËþÞ¬gÊüÄWfîe£‘ù’gú†XJý‘•'¨ÑÿÄ¿{Ê–R‰é¸3é?Ïêø/Ç¥/4tåEìÿ¨¯åÑî(å8Ê:üþñÕ$Ì:<ªˆßœ¿{’ù‰>¢ \S ²éGjl-SPü4g‘D«¬y©)Ô8¿užß58üg(*KÉA}DI½3jMbX̬"ž(Ëóq0ŠúùüWy„?Qó$1}¡â²qŒØBž{•ŸÒ~¨ Ì"*çX_›«M?‚Ì…?^Ãuü)¿“­"¿}H{'ÊÀ};éí"å¯â(‰“W™Óaƒ½õ¤VÎËþÚî ÛcêKDÒ·úq¢ì0jßÒú(­U$wñ‘:ü„Òs•ký.fqÍ+ˆª+ˆcCPè½É`­ýƒ¯‰Ek8f/áª5ìƒÿU ΋©„`Ç,ºù^ãŸFÌÞ$p×&bËCü ›<ÊÛ4< Ð÷ŠN?m㳎;A¥uçî§âšÃzùƒ’%¨ÑlhÑô£ôeá@\äiÎýˆT¿W.²Æ¾Ž77äüNÙòi[…µÿ|,ªi9™™¨ÑÎ+qŽŽ>¹üh@49‹æ[Šx{œŸ¸›c¾á;Ú2¯'¼º7M#¬L‰˜€¾a£ÿc;Ÿ@\¦ÜÒ1~¨fCbq\X[e/ú?ŠÂÞ€o%—ˆ¼?9/^*ŸD ®ÐÒó‘ï‡ÓÙÆwgĽu!xþîe\D_`„ÜŒpVåðKÝMTcþÝ|úåA˜Oz ýìm¨?ÞñôàŠTf{uÇq› NlŒ}&»û];R½  /ÄŒ>,^"#ý&¼C—Ãít Ð+.ƒªU©+b…“aé¼ 9oë<§Ÿ™crŠÎƹF|ÆK¨€€ïéx©&Š@LJ‘‡þiTÞåxö[’ Œ#_)Ä$®`n-£=½ :ŠÅü]˜b¦¨§Gc0õG"挱K䘙=XÿhÀÜÈdDçØ°Ÿ|6»õŽû·_¹¯åäjŒß¾û‡ècŒ’x§àÔMøÄx×ööÏÌìÙ3ƒ‡bÅÝ%¸»» 8w)Npw× Á%$<(ÁÝ‹ë÷›ôß“ú<_ïísË¡}föìYò¾ïZ‹¼r;“·Î¡ÅZ F¹ši‹%Í52šUÊp ‰6š ;ÌFþšÈy oÒ¿}þÃw«]€QŸŠËùÆDz/æa®Uo2™øÂVk³'úâhf|3+U&±È¼ˆet!ÍCô‘Cìtîà÷!ØQ\Ië܇Òç_óo6ÿ‘FkÿñZiÅš­TWæ×VS7ŸÿÔM]¥þ|+,EurïËBA¿k¨3ynCEym0üÈXèUGaå§š'õ9Ebºý=Ü”÷j 2…äíÄú·Owúíò§À¯ÒˆS`êûC¢ç`2öú 2­Ñaø€f…aˆÍ*<Âôdøv°¿k£Í×6ó.?Á ïñOHn;›ý•,÷0¿»AŽô¾¼FûHýG,¥ñÍqê%oÑ$²tíŽíºÿq‹ìëuslóL¬í­{$»ø@]€¦ÕîSÌOÄÄwØós€´Ì#ÿp…e¾Ë>졺ýÖtœÞ\ôQ¾„½½0Ÿß:rc¦4¼b1îå/þ£7¶è¶¾]''Z‡E1åir {þùH|ÖRbüÍ(î"Ê ç+ݵ&x­Ø¨Ìà!ÎòöµÁ Åý^Jÿ’gš ?ÝE6çý÷ç¾gp’ z˜tÖë8ßÜЋ»íÈ m£àL“³ØÕ.ÎÆ¬ÎR®jz¢Tƽë9ˆ}Ê#í^ËkxZ·¹Öºœ÷€Ð¥B>-Ulj‘ ŽI°è{°¬¯ùþËÔí;Œ¶ä «àŸÁƒ`Bwà飡VÝMåv0¨àR‘þ›cªÑ`S:Rÿ1‰¬âþ5 þ£(¹Ì!y†j’ò ø[Í'Ôu×A¿;{ŸäìUu¿Ë”`"{ÃõOì­ÆDenëÍ«RGR•}NÿDêsÂÆk?€Š¨¹QWô»Çei)P|D#æÃ‰\¯Ó–sr¦Šèw¯’—¥.(lÄFªIf3ä$*¦·-¨àEÓP†-¤rú ^pÖyz6Éü/yW„ÖˆæPî*[ˆ šÈ{(]—r®Ò“Ùó£^2£ý&ü~bðè‹G¥ä‚vy´¹\q;|-)Øì“ó‰x+±´{¨ìßpF4ã™x«/—+èyÞ“ ‹Mh¯|°ø à?Îqµ®Ì=‰FýGê†È´D7‡•߬ØFUQŸŸ}¬ÍߪľÇ4ÜÁ¯Ò³æjs¾‰ç©??óàŠŸ+ŽOC÷Ýgä_ç¹ï mÓ7ëMÕá\np…É¢b¡ýÚMþ1Ûè ~•ÂZLþzDc•ô"÷Úˆ `<~z5¨Ó8ïí2X„ÎwÈM‡‡…Üi3Þ„ ¤aJOð’O„¬º Ü)õݧAŒÆa­+Ð!$ˆLaÚ´«ô˜ªx¨ó@/Q¢£¿ªÄjgõ”ðçÏõUr"]¾6%Ý×ÂíFýœ‰ÊnTb%`¦R…ôßugð(é«—k¾éuFKÏïÊÝÖcrÉ:}²‘ǪM¿öö(k/‚Œ«KýG,ú«Ä«ô“¿Z•ŒúœÌ ²–ž\/§:£˜Ó( û1ÿ£7oCQÞŠôo_†¶”úÁbtÑobÖ±úY_Ñ‹Í4»Ù¬˜dIyø–÷DY`ïS¢Mn'›þOð«#ŽBÔ†ÿ½Õo”ŸÓÅþý“‡®ø);ÕDZ/-+xp3Ö\ãhHŸÜªð'ñQ7Cÿj>rLnD,_ü­ú…9¸ó•gô¿Ê¢ÕÕÎÃËÛYÔÿ÷Hó%„ædOÞüª·rE‡ÕÊ/rˆ̧¼§>ŠÒrGBêÏOÇìÀÂL'ç(ŒþÊTd¸ð5½?¼B?½'3䆉ˆì^ø/iÿ±šLë 6þ(ˆ,ðåÑàVOP‰o$z‹ÿ°û<d'úEšèJuüÇy‘|£¼E›¯èŽ‘'”ÆÆÞíÃsÌàìUÕGjý"ÙÅ@uyNöE¬Æ[0™VXõbDÓÁ ÚÊõè²ö`ßÀ?ìdÕQÔYÝ‹ÿ÷û·è)¢sgãásâ#ã ¿ê›BE WZƒ*è\ïÀ=ÇO aןcþù/\å4øónð9ÉÐnµÆÏ܇ÿhëß0Y¿¯]Ô¾Rך7ëÏê4ßW”ùÅyyKË9ßÜÐ tdÔ–‹axW{®‘«ÌŒÝêŽÿ(ˆëÂŒh‡UðO½Üÿ‘ ]nüÇ]jE¶g¨³HK|—S+Ñ7µ£ú…®\¬éËÕÁ÷…ÿèæ¼Ýè¯î}¿&;Šfl’œ°Ž±„ŠÁFæt#=“·4ÔfŸÑœ%‚á _1)´¯y÷úSñÓH"˜,æ:ïwø;ò)¡êÈwŽÎJ>ç>ýÜU(ôo_«Æ#;(Ný¹mÝW8ЧªÈf¬ßþ©åî8æà?˜ì…e>.™_;[¹®ueÐïP×^ì§®ó±F—~ì_;xäÒôÏÆüÚ£hPªëíDуþ‰—ÔÇQºÂ ÊY¥€¸Cîº`ùAi4yôqbô8jÃJ`XcDzv†NVùþÒuµX®ÚØ¡µDòvÿ«ü|l²mª"¢‘éÖ†÷¯…Òµ¦î©ÿP•z CWDV&ET–#`”sÁŸwÄv]#¢»Ä‰ÿ‚Ž´¾ЕúÁΑìâu¹&’ ð3yH3ò¤Rt%]N¶JŽáIxƒ"ûx /0¼ x¦ò‘¨÷úó‰ZsìUTÎàA΃HWäêžù Ñoi[´wXÓβ þã2yÊò·Xä í"äÏ/8~ Á¯>ëÃð9¹À@Öá)Ga]—ÀϦVï½Þ’þ‰g`@ŠP›çÏ÷Ù]©»“M5S ÎN§~p O,#˜Ê)r I–t‘¸3ºQ•úÁå¼ý¯2væÿð“퉙K=-¡Šz„\$*ˆBážËgå5¹s=9ùLQñžæžþ%{Ðï†Ø„ õ*>Ã}=ʸ,TD<—&ê®DDI^áø®ÌnnÉ<$JY+Ë¡N.‚þÊ×HGÿö5àWQ «èØ`x‘³`¡q¨¤‹c¨øôrú9-tž’ý|=DmjÞ9%döê<ýwW+ŒöðÉÁÂ’bûãZÇŒkèz7ÏÂTÌ‘½Qù“1äSy!Îý}L™Qâ,$wÁÕ“>œ‘ØL±JF÷G|£?øUÔWåà{Fà?Š£6f^ “ ¶˜ü*-Õ;¾¢‡s½•ŠÔ¡3³û#ã³PñÓùèRÏjE=^^Øž ªg^’ÄF1••ìò±LüyoÌ b¼Øë|"›•Sš]SSì¡>çéMŒŒÌô$ÿÐà?\ч œZÌ4©Cx"süGm£5Þ§]VšÐ¿$¤­9mofúú–§.ÑâMº€÷ÊHÄTMÖwüß}ØíH£„öíЕ¾aЬŸ» “ºˆeàWµµ<šC-Án¯rÔP Ò¿=zNõ纳œuÌ éJ[ ›ðD$Ô,zÂG7×itm´Cj柜_kÁXL"ï@ÿÝ ú@%þ¼9ªJÐÝf“8¬†fÐ?ºó³(Yʈ[ØMÛÏã×òô/ÉOÿ’ܧd$-‰˜†Š˜ÌÿPgîû+ÖÑ&‚_5‡Eöâ}ÞŒÅĆ]ÚýÛ½‰þ’`3°}#õšRÛ|\d ç¯EWÂJÔ'"2?‡’©–¼K$Kžäœ®!Ó©£ÏÒEr…ÕqDô]À’®ã?ìþ%íøÉªDåËAâ[ã?ž‚‰Ò?’לÄJÿNýÇ÷î:®’MMM¶1úÁ ä**ÿŒÆ¼Ñ·Á7Ó}ˆ÷¢Ý>§Îk#ö~;œ}díçGMTFj-ˆ(Ó€O·'*8Oe|sЩ/ìY/ýqOK…]j…5ó{óáêóáIsá5û9ßÜЧ²ß‘ó6_9ž'9@`|¹¢åpPvÛT˜„à-jÙ£0%á?N’m$°I';’\]*äÓTu°XÀ^¥ ‚ƒù^x“ü#&üyQ"K7ú_ÄstBÝ´ƒŒ.ËbçPa1\®åExuúgÅÁóê@VéINñˆ«‹ow÷b­]ÌòJ̼Û|E] QRÃRWÀRy’mZ8ýn3𰜶`NE|Á[½õjGšp*;ð¹ÑL=2[b ªÚñ¨‹¨f7ᧃy:‹Âõß,ªMœ ‚*ÿñB”OA_<á;Æ)é…’.à…¹OäEåÛvqyÞZ2©¼tÛ*o‹Ð þâÊ&e.ç·J’ê(F ¿jK‡'S²ªR¯áâ*þc?þc&LÅ(üÇ¨ÍÆ“'4ÐM8'õçœOd‡’P»Î“¼ÁózSÿZ_ƒß^ƒœ ¢ÞûO¼¯Bÿö´t¬zI>rou¶¢#ŒÏ"šÜô²Ûì|SN)~Z:Þ«NÄM@ÊêÃŒ|VÖð6SÐA«/LȺ¬/cšÈ²­øõDV9£/ª˜ô²#QlC¹%LýÇaú_õéñ‰¢’„Ô^ÆSlE»•%õÓÕêo]Äßµ£_ä;3†i°îx¸ñ0º é¯m ¯.ò?©¼ì¨¦â<¶â®üÜ\qçCrùìľÀZæ‡Û>ot…CÞ f›JþFVÓgŸ,åŠÛí29QíFåô7+ö`ö«¾Ž§æJNeÏJ‹ÞçÑ þ|™¹ÕütüG'üÇe8 dä`±¨ÿ8‚ c ý—}³^‘GÖö|² 䦾ð°ñ˜zü{4kÖ4üÇCã6sÑÛÑ¿ý"ñGg* _÷æïŠwÎ, lQ&°s5íØ‰w`•|ÍÀ™–°JsêÐ×QQšŒëˆ9†yJÉCænlEk7•Ékœ{L) ýwçzè¿{lþ¸}úÉt^’c6¤ÿU&k<õ#ŸŒmøŽS!õƒE±øª5=© 8ë>¬?g3"ü÷{JñÕR’Ôä Ðýž÷¾7ù‡=ïãèÕKcˆÕ ®p×9ðµéðRñ¬¦F"›l²=Yp5y†™¸_à^ð«~Tüöç—C™xŒi†¾ææåŒf¹…ôO¼ Ò”ù5­’`ÕP`Ä‘(3¡—IJ[û‚_€?EY>9Ú()œûô÷ýEíWÉ ÝLÿ’.ZúÙþc³£ó£ RAx\ùà?açÇ«žAµ]´ÂØÕY´Ôôoƒî¡7Ó„Zh˜+Rá§®Ó‡èÃ&ˆe>€«ûІð‡áÏ»P ÒT´ëÄÝ(Îÿðg~Tq“ٟ罌£l@\ÛWxå¾ÂtÇ6£~°—­ìÿþÝVÔÆý_ÿv쯈Ȕ|±8•ÈÝcrŠ›÷7"¯…þ‰ ”*ØæKðI±œË°—öÔÖÞÄ™§à‚ÏÂø}ÂêõÀ6¯#:ž§u‹dß«`ö‡’]ÅWjXÔæDŸù±t»‰ÌÉðöÜÅOxΛào£Ävå{¥¸aüÇ)£8Öb—\ä /™Añ@ާ¯Éî=9?‘|ègg6þ›õ–ˆB`(çñãåÀûb€K]G1µØXÇõ$µ67Iò£ÇôÏZMþq ß¶ ÿáK=eôÌëäCqÈyy¹• wÀ mÕí2v.+]¸Ò¡gÊf6c^àIp¢ÂfVT² Íõô¯j‡þj+ªæ±(òÒ!¥$þ#X4u®·R‰¡½æ-=Ï&¦uüGE33|ôF枢Ò>€Š¿tðP-?‚:ù¬è¯!½åΡ¿E\ô÷‚¨#p¡cjC"¦f²;9y7#§•~+¼þ+æ#Úë1EåOê?êS?ø˜ü£¢Ñ†h03o³«¶+Lþ±&o”ÈFÜ9€'‹~ýîYz¨l›#KE¿[Êêe]A¿Û >>®åBR]×WìÄgð«T ÀÕda±÷ï ü}BÿöDÎyIÿ«dÎßýÜeÄÇ®îUói´ ôs¨Ë*Û˜X ÿq’ùçá+¬~¼zc›fwYo†Õ|Oýyz¢ŒU>j]Egm”öXÍ‚ýx°šQœQà@óœ¸)UžØ úv[Ä©Äa>ôóEå ýKžc=ñnAY ýnQ»Û°)÷ñR‰u»1ÿ|œˆÊDÜnÚ ô»íˆ|·ã–É¿„ÿÈ"ž”"1Èt#v &R? ó?R+íÁÒnŠ‚üd{0÷ þïɲ®bßóðíÀ?À­a7jëãµ.‘6k}ˆéÒȦœûöœŸôÎSx@™¥ÅxÑ•¢»ûêÏýÌ…Ô_–1cÂêw6‹XC­[f4^sñÆÑèÀ«ƒ’ÅEõþ'Þ+ž® ó'8ïø¿ûpÉQÛþ÷÷}q´þ×õƒùÇ>5þ#§¦©µYs;õåÕZ!ýÛc*¡ý™ÿþ¶ýzűAÛU­Å?¯Dj-93Ef+4wªÉ:jÏñK¥Wý£uþþ³ìâÖàõj/yî'D)½¾rI-¢<ìc€Ø%‚ÕSÿåþzO¹¥Ôªü;êÎh÷o§ ·º<Â.ÖÆþ÷ÄDñò‡+ýõ‡ÝÈ?VÀË¼Ä ¯‡‰V‰ïfÓ øïm ÜŸàÀ¿€5,'·|~”¢tDsuA¤„ì€f4/ÞÄAöp¿YnáþÉÇ¶ÕØm*9´‘ìâgu6µ­Þ »¾’“ï‰ËVÓ“þWÀ¯¦‡íb^Á`_ãF0§-´Ÿó··W©¨¦ÇÍDŸ›{LL$æ—ï“#í«OùÈ÷<À£ØÝ.§ñïÄ(iZFXÿ1C£õá¾’‘µ"¹Î³lˆ2ù#¤+ú«ÝZ°WÖ<‚7:NmJI¾‘ºQ½½óÍ ½¾@G!mCL¬äp|B ¹4Dål#uÕà@VË×úPØï› =¹ÈOγâI¾3ZÞ.ôo÷]*äÓ\ê?ÆÀÝå‚)›ñÓóáhêÒϵö}+3+Þ¡Üõçw5±Î=P7Õk_†iýÛˈPNò¯…“ªÑA¡jÁšÓ ظMËMþQîy«¼B/ŽVTÀ  Þ/ö¸& ¬§Xét`Y™ÉB×+7¿yÒƒT“ª™D?vÿÝ’dWµè÷ºÏ(/ ƒÍ ê`ú¦Úd2ËŒáx‘TTÀÚÛþˆy‘ Ÿ£¾Yo:úÝÊTÅù‚ÍŒÁƒ?’§™}±ŽÊòTSïÇfrk OÄ ¶&Ÿµ ÔnøPZ íL)^æÜÁJÊeš+›•©%׳äEKMWà/Æ&îcÞGaôMðs¿3¡¯ ¦ì*Íi`…¥AÈ HT ¢¥s=oð«/àW·È”uã‹ø@¤²ƒ¾êÉé_²˜þ'‡Ì¦]ƒžðš.]}ÍYFYÓ—Hg0Ïk4w•ý®Ÿó~ñEx®¬×›ù˜“õF+5¨}Ã`à/ ¹Ý‡êv=–½é­ïʼ¬´VM£XkjY ®YvhÿÄ êϧˆ„ÄR#ÈÌ]to£µþc õ穹ªéÔŒµ®RŸÒÐÊüóTpóÞæSÐäÝàWE^žw{áå¼ãÿîÃð«PÆCUÚ‡aC~î*ºö¨yè¿[^{§”g·w;ÚªM™ÕHÝŒÆ+´?ATÖ½äXJ?ÔfÄÜÅ@âhYXs¼òA›Ãü¨ÑÚ¦R…W¨üxÕ¬!ùÇÑ›w¾¾¾¡"õƒyybÓE'á.ŠÀ(öß½‚Ÿl*ÞcãöÃ*o ¶u‘5è_ÒL쇟{~Õ ¼h(þÉafª}ÿêúicAê:a¥7á‘6€ˆÜDÃU& 6™s ”âØD<éd2±vßÄ­GB|þ< ‘÷ ½ø•…õ?€ÏÞ~à$Ôv0ˆ&ôOì|+"ZÍáе=äð@Áð®Þ¢(*Îm°¾5å2›DÖB^Åwz1ÿcÄüG]ÕÖŠ,'bÊŸœÞ‰ûzªûÉaøb»ŽN¡3ÇþËap­%x&Sž¥þãk·R¯õ%ÞÍ$ÁB¯Úœ•&<]ŽÆ\Ð~ƒ?ï"ëÉcø¤-D±Åàí‹UDÔ¿ä,ý½Ä¼÷dP‹lèdVÀLõOf0‘»U`AbÁŸûÉ h›‚È|®óÿ´`%=µ»ÿÈ? ÁÞÓ]ΣjºÑàWµè}èʼ½yô€úÌôò%Õ׋xR±©–û†ÚžåCÿÄð“Ç4üG52¬jdB ŒD©ñµÀ~¶PÿÑÑlD7Áuæ3x‡)Ôú ¨ÊKöñþcüG1ýè@ØM¦FÃÛú¡Wn„Ÿ©fš¶Û×pežì~üGbz^D¿ëÇz½Éqš¢YÞŠú8Àž$¶7s6…úóºòg¡û œï2“À—­lFÑ´‹— K8¶—ÑÃô'SX!ûƒ× #šªÕÒ_lv^^aê?|ˆ©íyTô·%ÂÈ*9<‡4™† OíFöQŒh$ö4=º,æ€À¨ŒËÎõ¥¢ÿåÑ̹Þåj€9^¹}Mÿ’¤<ϵÆLê‡06Ù‚ÎÝúS3™†&¦5ÙœLÕÆeÎ^ÀaäÆùıֹ•³Zq2ÝÎÄ%•¸r?½)õƒ¹à?FÑ›ê>Œù#:™TäªSQS†Þ2{eËݨÂYµùèdU—ô¢Î(æ:ó?¦¢ßíˉ+Èûz6~+þc,Lnª>*™µ¬vÔ>¦/ã2£®¥j•³üˆVç%üy2ò³:ôOü_øŽôaWŸÀ¯ÂT£;Ÿ@T>|t\d"lÔQE´ÇJqv{¿£8}ró’a&Dx…ã×<îHý`‰2zphÉ´<ðç§À¯ÂÐP‹ªéÏóÇ+ýõ§É±îS±ma1›é›È?ܨLÉ3›(ª‹Vbú«¨ MǺ+T¯À¾â‰–Uæ¢&(õçÛ8Oo±eͰ¶ƒ…"ŠÐÎ0߿ƺè¯V¡¥üH´í ƒþ ±íP"•÷ð{©CBœ£ÂúNF›10RÿC逵¸€ÿH([¢Ï°ç)+Üõe®¬4–ô(]µö©¯'n€þªO$»øFÏOö£݆ˆË»Ü ¬øÕ:ðœRÄÁöLªSàGTjèkÉ?(ñ¾³fBú_¥ã­œ†b= Ú¯¼ICx,ºƒÌÅÏ ÿ‚Ïp »ÙE¦3O§™¶‰P¿»P™®õ3K…ÿhƒúê Ù]4öüáLW¸ =§¾ »ì$Á¶ÃÜ$òˇwxþ`.òÝáøAÙ—·ÜƯš’#e ÿ¨fôU\72‰[(‡J‘\зruçùûd7òKáð8u™˜€÷N‡M{ Òÿ…Håpïhô»*m í;ìæ9Ùc/øU§[p/q©ß,²ý£~ð©òI”àË¡[zrIϧ_{î+¯½¨¡ @¿«‚Þô¢7ëQ2à |ï=ê!vÈ|d^'ÂÍÿhGþÑ^è ðaY•Fc*½mÒÁq3õé­ XÁväFè_r,4üy<|Ó¾{¥~=¾DTņ] ¦*NŸà^N7ЙùÉEFº£gC™”Ìډǜ‡·ÛO äü‡/ö9 >p(eh—]¹¨øq~K€ƒU•É?Jq§ñ©«°g¦\GÖ‘zöJÔ»üþ”…jô¬x KFè*?ÇäÎ0õ”xÚ}áËœPþí*/—èQ߉zîÂtûR,Oó$˜]F&\å`JìL#ŸéC$2Ÿ>_]šþx¾ÎS}X¹¬àYÔÇå’ ÄüG)«>£U’žF%z1nÀk¬`F˜?¿«en‘éÑ_Õáog‘]8ûȬ2:ýÇyêÏGŠÌØ¢.x,úyÃ…ŠýñT_¾¢Àq´õ­6Ö[æ]õ@Y¬R?˜Élbx˜iykž‚_½¹ˆ5› Ÿpgð¿øíEG®0ﻪ´V~Î.‡^c,¦¾ìPÓ3Í»¨vC)Ãnow” aÏ+«Þh„Î\sxÒ?±o`=P$×Òi˜u ýnmm æ¯VQ 8Ÿgè5|ÿS üÇhº÷#jt×7ˆÂzw¦Z&Æj u˜è-vG±ÿÕuæœÔ÷9‹Û‰@æç‘•Á-;‰=Ø“WØC7ìOô»C„…ktÓ†SébW0,ÿÙƒ}½Îq°¡%äj¼É]t$d$¿vÔÄT\±“'Qs$B¿; >.V³7™öm°;ø'ƒ¬ÆV¦®æßc"­?¦Î€‘îÏ}‹ŒÁùnA–‘e6Ú¦†r*º]_V—ò;á­/³¿;0±RVMÍÍ& Hÿb  ›@¾vþc<׸¬É$ÿø„9Äý.Ä'h2Æ+"MÇdú_õ¤!okÍÕÝÀÞWà‰¼%ƒ¡ÂO‹†mmŽ:‹÷ܦXUO@ ß!Bÿq™ücXÀ}>u¥P«îàoÒÿ…zïöhxÐGN¢û[<ëÃü“_ÓlõF¸£7W*ì‰-YÁÚï‚Ô¼‡¿¤ÿ®å¾=â8yNc3qu)0ž.ä;ÕÁ|æb½'É#¢‘ÿ~TwçN>³ˆ5^É=œ:_Y‰ÞƒAðçí©v>³ -î@Þû^öì H òLàW•gߜŎª†ÖÀ—§ÑÝWeü[c.}ÁëQ ¾åi ëýàËà¿'È Ò-ÄGH~¼Hÿ mûf½q¢)«üÁŽT†×ˆÇuÜ¢vn%÷6ýî^¼‡ÿÃB>ÒË b³æAìs£ 9ÔÇ0ÓW3Ò?q-™]ùX·ýÇ:|e=*!<©ç. £°;šó 2’9Xú¾fcsµ³éçë‚Ö8ØÝFÑÂùDN1ОÔq“XçzŒØøhè¯r¡lÚ.6„Γ;¨?ÿÍŠo^54XõÔ}p¦;íÀJge¾ÃçýîÆååÙÖ#nÊCýÇÝÖ¤~¨õ±ùŸèß^<ë½q¤2>óNY 7|ba銞>‹üª—wú3Ê m´HO…W;êj31ÿ<|Ìüy0½ÂR’Õ´†¡ÈÊjõ¥Þñ3S© º¡ 5MÉ´9±=W2ö¾Êÿ¤ÿnõç¡üù[Ç ݿݤ®î˜Z€ùƒùµkJev{ƒ£ŠZ¤©°º…÷ŸÓ_¿òMɱ+¢&2¨iÏ©Ž¢ÿUkò^šŸÚDÍï|žÎƒòƒiÅNžÏkø[d D5½]qL|þá&šs>6F±þüOx„ÍÜB\¾‘¬¡$ùGYü=½üÞ£)ÿ½‹ˆ/¦‰?¸¢¿ÿh$ú]oaOBÚ þå úò%_2N{é ?HþñU´!6)£7ˆÔÄWcïÑ_U”³‰<‹£ÑèÒrƒ³~Ÿg׺“Í&ÿ˜¡Œdª,é0Ø |*0W~ÍR?¾PñpÉÄöñwþ Êߤ/&ÿøÞ]ÿª4R]È(¸èSõ¤¬7oôP?SÓAßBô‘}}Â?±QSÙÏÏÔê4Õ"ê,3Ö±?÷•ü£vð&ïs]¸­gpƒõ¯ÚKÍF›Ú`›O’uã~«Áÿ7Är¾¹?‡ã”# ý:gÁÎL±r¡Ãî&2•ù!|ƒ}býå'°îûTtû„d 9‚WÚ‹ú+‘ļ‚ðµC“á?Fã×\àˆs¯¹› à~¨n¤16Àò³'Á¯ª“»á?ê`g’ ¡¢‹Ï!}UbqÆF¹.@Eü )9yCr˜ò“ÁƒêšçàÏ;Ó¿d-Üs lU+h›’ð“û•ûß<é.êrÞC°b®Ü›ÝO# ݪv•ìŸ@é”%–U…Õ¿óoW™ž˜!–Œä)Ásmâ7ëÍõøÆcx¤üäñà7NP1>ƒJøáFZ¢û¤`Oq¬ãø£ ÷ÉæËVÜÁSæä0¦ÈWaªªÂØøUMyš[ÅS(OUËúÛÙc%ãÈ`6‡ñžfN2,p¢¦Üù-ØŠ#tƒ@.]nw¹bi*ª‡ëœ‚ò+øÕ1tZÓáÏ«šKÑo-4cÃмã÷I©üxÆï»ÝÌý(Nú’Áy€Ñæ‹Ä çýz+W4»/P=NiiðÕUú,~ys%^\©†î‘Y€üã²ñÎ(J67OºXÍŒ¢d³1ek*×[ÊWzeç)<®üNþ‘‘wÌ ïQHßn¸QqÙÚðt1XôoïoÍ`~íPê?b‚_Q ;@}o¹FçÔÖ“nbóŽÿ»ÁŽjô¦r~ŸÒå_÷oF\¾WMÿ( = é‚âíè‰úªèké¿{Úù%QùpαL›,à=~£ù=Õ®ÿ˜¢hôD/Nýù}µyÈ„ª¨¬ô×߉Å>×#ÿ茫«¯)ô.J-ö¦œ¨!jŠåàW£´ÜKeRS\…IØ@¼0“§—åÉ?à¡v’E4!OhMýyBt]QãÏçh¾ä/ôÄïAD®›GË”iúÊ;^‹)cvz›HýGJ¥' ò3"ÑSvæ€WåÊTìÎ9ø‹,ò Órœ¦ä“ÀÃzE:ÿ<š¶ó;+œâ=~.¼ð[ð˜žpÊ]ÁÍ×°Þ~,{6Ïü^1ó»ý5¥¨Z‚ëš§_ü*'σ9œ¼ ­é¢ØÅÍ5lÚ}ÞÌ¡0ÞðN{Ä@-üt ûA-W&híñŠ6ÿÑ«À7Tg•?±éThðþ`xM°jödÇYhwz‚êt3úçƒv¸P¾ýžŠý+r²š'94f-èÒfbýköÔp}/ÐõŒrQ±Ïþ ÙNínÉ©ê$Øx¬óu|Xîð$ùÇkê? ÀS—1¯`û½©‹+ ~å ÿQ¦}(Üx¹.ý•Tc…è¯JÜÁ3øb‹6ËâÔ’œ&ÿð0«P»æož„¨¦5 F<+Z^o´ZóeNüþpóÏû¨ñðºû9¯m±º•å=6<ÇB##x±9ÈLk££GN92†™ÿa*þ5އ@•L믥јÁnïw´W³©Å¨ÙEMò÷ºZD|¯wëÀ¯a‹³ëkÄVú_Ùó-á*4­>õçIr~mb¢„¦ìv[P‘ÔT÷¥ÒÛ¢ OŠMIÓ]‡øÂGZ‡ÇóÔÖ7@D<É^&cÓ¡pɨO[Á„®€ T$W¨‰ÿf&NÄwiÿ×áÚx”?ö¤%xyTC\iKN„›ë¬cý*Â37EœI¯©ÿH¦ &¾9ÿˆÁ?Y/L§Û/¬î‡¥M)—sÕv»FDã3©‡è¡5p¾_¡­¿zLŸáþDÏãaRf•¯ÁcŽ"NoCötc[ñOô»Ü½Ú¦¾ßUÚ ¥šDj>prlsìe˜]A²ŠŠ¿røWÞ«@ð«ÇXg°¨éìÅÑN‹È³T–jíñâÉÀÐÚâuØÊ\b„×äM±oG´¤ðçYÓË퉚«ýÏÒp¢B‘ƒÐ{¾â¨«!ÿx‡ÿèð‹\‡§\ÈnaX§„üú˜¸z •èYAÙÁöÌ×?ð¼ Ó?1<ÿ±H]‡7jÄsÜÁÏ6&¯²'¨T£þ¼1õ[éŸ(Ì4Øùút”Ý ÒøŒ+{úA6’“ñ2ÜsIªÚØ[W:ÏÆGÜßK(vŽYãÁÈׂç¬i«A…±CJ<×)¸ö¹2ª³ùtm ½[‡c üGîA!Ê_CÅö&óÕ€A†²Õ“üÃÐ]35JàÊdL»ÁóL®.6½Qð¤t= ×ùf—hîÉž\†< lÄN²ÑF]éÿq„éçñ¬ (æ¢mÚƒÆmì´=ÿÃÑ›(ú(çåe#ÿ¸þZ,dWÖ¯Ð_Öx@–õÀˆE>Hÿ«X!øÕ¦¼šfvêÑ×à¥{£rp_KŠÿðùë ¢ÿŸøÌ2nŠÜto«@Ï—øôKœ /?O¹ µ@ZË4O@ÇÐd1Ú¿føq"'S_²¬záAþáN§È·T€E¿ÛÐj ‡”…þ%“ðÆG»d•ƒMUö§7ùzTŒ§¦´˜ã¼ãÿîÃSG9%´;¢ RÂW.EõZ>ߪyaƒ³i7•šœÖMŽijEµõ;”?'¢ºPÈß»éX­Í-@së+ÅæâæP=”ßèTUýîWTÁµ¾y"[<…X‡•y%ºͤ¥ÿn4½¬Z Ï…Ek±Z\T£’-8g”óðØú­D»“à, Ñ¿$¹>Kl'j¾Ì« –ßSd#¢Ô¿¤+ók}@˜ÞP5²G·Ñ¢‹ØºhDKÕÉ?âcÕe‚o#¾©@øó$ÊXNàIøøX¹9üL1T#Ñ_Ý!V:‰…±+gr3µ±‘ìbLm%?áŠï¸K´‹ÚëQŒ{ èpY¹‚ÌÖï¾ÃîodMw±…^ýßy̯ÍúúÝd[±É@Æðë3ÝSu;ˆÊç yÌŸdK;ø“.¬‡ÊIôÑ"š 9U™­uå¾bâÃ\¹º?`fÚÃÔHÐôW—µxÆ!,Ày„ml|I2±¼°>ÉonèuÞqdÖà?4ôWƒÑ.%’;±þÓx¶Ëñ@›mî<þ%vq?–(?þã÷{¼‹Î#Ô„?Ý+Cê?ƒ7m¤Äö‹ñ²˜ÇQþ‰G’ô’M†É –/øUø¾Ûa¸É©äÃá5ÉÔ8øû®x/lî*-ÒÒǽ€‘‚zë?Œ¹°É;¨ Ü…Çh„¢i5¬OFjô.‡-À´üGÿĪʺ•¬´:~¦8ûß §‡ñYÏ`lÁIi-#"ÝþíLjÞÁX˜Æg|éEžÙamÈ7Où€¨fv©‚B‘{™^;¦þ£9Ö]‰Hmko„®äWˬàÝËGô“õÆÀÈß ñ¥©BoŒµ1•?XÓî¿»¿pŒþ‰yöÊ$­>Y‘])Þ•,(€]o…w{BVy þ|/9Òlí®yö÷yYC½¸óÍ }äI`n„ô/ñ¢zÍaœÅÄ&:­ÎÓ¿ÆUëÆ2™€d‹âøæìŒÀõã]Õ«àßà^°¬]eFJ™~z,\òNe7v°+õ‡`„ ¸}CãVy™¼ë¤6ô›“ \øÎ3ÄO%ðØ á7V€¿Œ5*ÈžFbk%ù‡fƴγÒî} Ú¨%VÄiàm‹åŸb–óaVÖ+·©ù¨CÆPM+…½?ct ;Uò¢BôP¼ó=ɈcvF+ë…`ûvc\’FW‘ÒÎõV+OÔdÜÁSøiÜåJ÷¡è̼¨:(­Ò‘Ä »?ýL’Á~'‚e(ÁÔÙM`“­É?ZâÁ3ß:Tÿ|MñÆ”i8F°VÔgQ^Ìô% |Ã<‘Ît.¾c–…ËBÿ’Y²ŒÕÅȃÖ#=ZfxZoä<…”É̯-êЛ8TÓo,oø?|fQ³ºÕÎ%½é°R½ñ:¥<‡ *h´Æ ÿ˜DöŠ}j'9ïø¿ûðœü#4㈧ T²~s.¢~%’¹|>j²ƒÚy%/«0%³–¾°ê~u.êKñ7)+á3Û‚9$ׇˆ=ª¦eSÏ+/µrÂEëIýyùŸì¿[t©;üyM˜œú,Z)eµô0‹ED^òi|GÔ*äO(ï”J"ïa+t¦bïRÊôä4½ÅZâ²Ó`=õ©pï!²Ó…âuî¹…æ©íƒ‰d׃-¤Šb??/À’³à?bñk!æ¶×žƎ‚ÿ¨~×®ÿȉçÉ-†­ŽMæµ d:ÜÍ5+rvm ùL.Ý=Òþ‰´¹Øææ0AXÀ¸ðç]xŸ33éh±}üÇ{|’/9Ãqìé"½ ýw#b»íøMiªæ&Û°õ»yøwôWýAìè3d¬ÿ^V|õ²6ñw|ËEz —×"êŒlÆOÜ&žnÎÿßñ65Ñq þÃFĪ`vÀ²LÆÇ¿§Ê·¢žÉùæ†>ž;Ž‚ÚA1ûðÀšçå=ßÊ®ÍEÃ0nr&¶ý­Þÿq”|¢¶È®yYG6÷ Ï™S‹þÚÓÅäcAGÓëžÀ~Û¾ £õ Ī€qÂ(D-v ¸è¦x‘õ0Évÿ’3pÊñ¡óáχ{ ¨1ñíôßø;GàaŽƒ_ùÉÜh­ÎÊWDæåé&èoÞá»1ÿ|~: Þ"º_$“sçKÂÕW“ãuwóT[‚y•¯KÆdöµF øŽýæb3§åO]vcԺ͆Äô%Aî—5½C`w"ÝùÜ!ʲŠCTÇŽ[ì—'lÊ$£3xU k.ùGtTNËPƒ­1šcíÝñÀ¯‚ÈÈ’£9ó Óï05ýw/TG{XEî{-(‹Ò‹¶ö8¬¼ÝêãPÿqÞÅü¨¬Øë²æD|åP ¶°ø ±ù«©kŸ†µ÷¢ÚÏaÅ3÷ÀO÷5³¡oXƳmVº5‘Dz=t>‘ e·VˆÈ¶QN\ôWÁúD柗‚j`“[3¿P‹^‰ìè ¿«C'¬5ò=œ|9=ÜL)úN·ÇÓÖvžÂÃ!øUZ,GìHzýºÑ‹Œ­Õ—oè’hZuÍV{ëYRM:’%µR3¯ã?O<³y+_S‡R^LuÞñ÷á•£^ÅUrð«[ÿ†î¢šC¤Ô.*6º´×1mXh§ÿÁ0þøÿ¤þ|hÍ;“OßLýG,-ž:™þ%M¨¢9´š?Ù¿$ØÈóù$:‘±—Ó׉¢»’Ksá Œ§ÿî@â‹óQä?.ÐI¨„8ʛⅵZ@T™UºðÔÝÅìv¯&±nêÏëˆW?¾É?¡í€? _±’8~úÚ³Ä!ð#ÅÀP2ÁlV¿j‚ßË­ý&†ŒhñJG2àû¿K=—£4þ£;ø]=5VïxÏN쬧mëõq‘òçqµ(bÝÁ¯žpw À×ÜÈrâ=F`gk Rú€òEu|[?Oï.VUFü¿èðçYx+gÀžçâ £ÀÍ}½¡x*6ßDã ¹Ç+½‡ñ/Ãù¦ÛúiQJ‹È jkÈw&ŶÀûž&3rÁúL%ÍÝ!.Òÿj?þ£÷û¬iªáXìF=½‚óÍ ½Î·ô¿:IþñVïMl\Žcþcžž—<«1ÿ_-kƒõ‚ÎCâdz¢‹9GZY‡úð½ ¼ÔAÂÞ«$(U`-ïëc¹ÂzDðÍé¸]Í}¸ oê?js•vÅD9"è9èJ[ÉY¢ì?:ÿ—VS’9MO[M_«ðçAkÊ£åº$ƒAÜ]Í=Ä¿ÏCô»©Œ%xÍÌ`/É&üd*|æJº&„Þ­Ýÿ …]¾ÿ8Šïr nNý`"ó5TZÄ£ƒø ³õ$s6ä85a|ð1éðy'ÈD}ÂåûEAêÏplýntv꘱Eð¹nùuÔñÍèÖ9:1z£ßõ#óX.z'ùÖohªFÑ?q¢óòR+”‹øÇâ2åÕN"µª¨L¼…‚~÷õ½à©+2v&ý<²ÀöÓ;$l0ÌP1ô©¥*ˆúÎõ¶á?>ê¹äUžX°¼"bR÷Þž™ñ)¬Ôæ7W3c| Õû©¬¬æã6v¿.óYüx#»†äއé¿;K\rîße—V’=mIþ‘‚J:ë1µ° ^·9yÖvcþè(U[é¦xœ9O5ÍC² Õʨˆ¦ÌEÖ¡{{bšPÿhO²EÈgº‚¯&ÕoÕèÖÞ†é¿*OŸë©n @Oý>-m©Æ¤FŸÛÅ|‹¿y'f¢¯ü¢ÜXLwÞñ÷á!ýwCµ‚¿(ƒ•¢Î}ú¹«0”;ÊYµ´6•þ‰o»»ÈÇ0Õþ»%Õ3h:Ã3Œ?^ýüù:ÔRÈ@.‹_ÀÄò¨ ”hÔTt£Cc ­êOöß-(vÂ<°HméUTo dÒìCÐ_¹ƒ_]Qoÿø’þïO¯)ÁJcq›x{+xÉZx…ü²8vÉMøbS®S6ÅŒ¿f&ç÷—î©yQyЃ¼`'oßlâé+à@шX‹c¥ì>ŠUˆ›m[VUï©ÿH«tâ ‰Üz:Þù‰Xêr¨d{“ÓÜ&–>D¼®ao›;ÆbÏÒ†Gò´kK¸²¶àL×É|ˆ8[~46ãá™ €E='ª;N¾„5õÒG“8¾³f4¥ŒšOÿŠçÊ †¸˜ºY ff*+làJ›ÀŸw“‰éàëv['ÓyÄôÉšÚû¶o$õƒí¸ª øÝ>0îA¼My?ñO7=®Ø§¥AëN•/ÞÓ.¾×_ ßÑü¨ŽØÚ^1?8‘¾,%@`¶ã‹¦`¯§Ë`F;‰jG£_½‚ÍBoÛ h‚ ¦¥þÃþ»¡ÝÿþºÔmêp1ŽL4èÐ;®â6§I’àIUÑ-6jå'&whoÇ‹¸Ã®T†ž'5ɹ¢¾ˆns«±¸~w˜O²€÷øí|dÅá˜ÁD/¤–Ô¬5ÿÄ‚º±ÀpZPã˸ ÀL>°–MLç »‰¿«ñÙ%N…º¯bdW)èsµÓ(DÞj˜à”V õy É?M@ìúA_´Rièv‹³x5\ç´5ôo¯$xbd[ð£{r+øËbгF*k¹™œ©G_©Î;Bå^ó8•«¨íô½ÊK>6QÆÖ{9/ï7e›rŽL«‘¼N½ä.»süG ü‡YºiÐ11×e”SƒèoÛ›ê{*ØÉ?ÎsC7/š¦þ<ííAÏ™'“\‘”~¶KCújŤC×üIrs3SÚ‡˜ù‰û}8{=Ñ÷–KuìÃkçþ+~Z.ìR3NUª=wÒ7¾•¼ª#ާ¨ÌxH5bsêA ó0OúÏè¦ÙÑhÈYÍ&›à!Ês&CU'é¿»ŒúØ“ôd~FaëœÙoþŒY)ñ¨¬bu³‚MÃjO½}|ë,{qIvdB{{æŸOCcw÷BäÜÁÿîÃmGí0wùǿůPX)~jqØà‚Ú=%»½ÍÑ‚úó2Ô^d¦éÉŸº©êý°ªvG±sâ%üGju†ò?]‡þ»OàTJ:ŸgT.!’u9mé_’W¯…*Ãƪ/ìG7ò€(âW×Ñ™Uwˆ|÷¢€ôoIENš þc‘Ò ÞʦX²âWÑ]D¤; µ}µåÚÑ Üe7Öyì’U[y¥ÿ,ùÇ#ᆥ-§»Eê?~SÚ2ó÷Üe>§¸ Ÿæ‹Ê)-þc?Þà0>`Y@y} Ö!’]Œ¯Ùš¤þ`嶪8±æ Jvþ1IöçYJ¼o×Ý«ð4ˆKû %´÷·÷*©,ª<–0/ö< |üD2¸`}‹‰í_cúR¿À߸‡z ÞÖQ]‹(£™„j¾»ŸB®'ÿøÞ½­†àg£Ë6º)ök‰°ÌÍXÓ—ë;ÏU—‚oqáßM"È?Ð!rÞ¦á§a‡r¡“YÍÛ<Ÿüo::¡Åøx‹‰ÿØKÆ‘¿‹½åÌSù6e±DaºßDõÍóAã<}ÛãÂ'sE]z#¸ô5|ã0¸©bàWñ™Þâ¦ÿ®ò þ#ÞmŸ~]~Yä P57P&WêÏ Å¨¨›PsŸ‚ %_¨G¬FËã näŽåZ=•˜'^:ï÷üy}P†zœ+KÇõÚôO,@`W¢‚ýtyKoùÊÔ~BCU›J“2–ÕØ(ÆYeŠLÈü¨]a¢˜'Jú'fam~•†þ%¥­tÞa¼&WKau4Ý­ÖkðµÎäºD.–”þíRN`6’'ü沫rÿ#ÿQ5 b[Â\„=iQý¬pBªÕñùè¿[‘ÝÞèèK÷«j(xO¡>Õ…BþÞSæ×Úõƒîøy?ñD2ðÖ‚nz]´hZqµšóyFeáÌb> njK…Ú¡¡’Œ(Âþ»ÕPuy_]ÊBŽÛÊUÅMa-÷ãÿWáGRËÂ`FmÄbêkü·F|Koô»½£ÄtÖVPÞŒeVs5Öó"‘ÈWÔžYà+ì9¶ éU «[E©ÿH žÍRvìK:–eÿÞP¸ÿ‘ÏáÅ8‚Fl%ßQ”úÁÈúïÚJð ðç—a4,GG~¶06v,hSQ¹¬c+ ˆ&í½eÔvoú®þ*ŽRN͈¿™ƒÚÙ®ŒÅ?}tjÑÀ¯fÚ <óŸà‚7ùçñú(öóÝ\µˆ2šÑLîLüœLz“ù?àgš²ó­@ âðŽ>ÒÖjÑÁnš ûóžïÂS•¡³,t¨ò>ô_q¤G¿;•¼oÚ€|ä;ˆ3fp§ËXaU öN!c؃µÍ…?ÕžãÈ%›SºTȧj1ÏŸU–ωaßáÿQÇà€ÎHýG~ú_%„9o2…°ÙMò€…2 ùÇ"QO„ï‚O•¬æ†XÅÙ—ò8¸Ýiº=%@OD-YW,Ö ó%Ú¬žÌD_%Ëàå^‚_ýJÄÏžÿñmýùp5)÷çî5„g¯(ßèÉèÌµÄø•Œe=Фðµo°a~²º¬ƒä²)a~âÀÖ€T.Öµžß¼;DIò…Ä)Õ9ôkt˜ò¢ÿnOææ´Öã?‘\„Šm¶»_yâ—7ß§ÃŽ’Âô)¥LUžày+ÈkzmÎÕ.²ÀpÉ=èn˜…Ž WA¬Á/Ò§«‡‘ÕS5•äħe!|r*ùI¿&º:ŸÈa圚€ËžTó€J÷DìóTì¯ Ÿ0Í(Bý¡A½…·ù+ý¯¶1,æ¨t4÷ñ&Ö_ëÄùJ&† &xýßÿ®+۵œµàqån 7Çd%k«‡»~Û: 2›úóÔÇW67Ë05¹ÈV²¢T©÷[èÐý÷z'”®ÚpQœŒ{oF ý=T¶“ûí ÿC×Ä>æ@æ›ïñOn eññÈ9ï@ÞK™!õf­®Xò÷‚ÿá¯W˜ø‘ʹ31¨LíüÝÏ]ÆWÇ}å:õçséu_±»nv €ç.Š9¬|úIýî-òÂŽ(Kê§„Bÿödê$å©Ö4¼¦ ÆªòS×ù›XATÿ,=—u/‘H®dвëCÁ¯*3)pý£Vÿ¤ÜVê »{…=ÿ| ׯ² œ¼Ýw8Ê8¿Š+:Šˆâæð»:œùµÛ„­ Zƒ¾p%ð°%•Ø+?Qf¼uP„êx½Å{1R) Ö„ü£ –~¬Øü " s¼Pž+ÅbÚmĽkø5­,n9Qlÿcp%Fw‡ÿh'nE¼Ä7ÿu,üÇ^1;¼šó½=Ó9|…C¾"öÝ©'‘¯9©_D]М¼º{¤þ£’Ò»(òáÕêÈq(oò‚Ú fÍ6O¦ð [êF¦³˜Ìd¸6Àù쿹(çoÒi¹wr›\†ïhËÏ!Ö›&nÏÿ°ã𨪮Ào‹ΠÛÏÀ¹Žý!“âª`5{bAìyjÖNöbb™&)x‚5}eõgpJv¾0|Sß+šGˆ_ÍRViÝù›iá`Ú“]]À34ÁÓ½â»ë÷´@í ]‰r`¹w³Z "¿òìffç›zy´chY>ꈟ mïßžÊnÄ­c¥øLIµ3&àׯÀ~샧Ic#ÚGå|èR!Ÿ–¢ßÈ YAúc½ð‹Sð6õáÇ«Ro½üQHí_gºñÚUŽùG 8Y2£7ˆz•èw³«qÙ¡þ(‘´¿Á€aùg9ˆôëšÛÀ '¡ËÍdl$wŒª¶¥s=ªà?ŠÊ{¼—åKawv¡gX,«9úAæRñâKAý‡fM4‹€nFâØšóZ”yœoJ°rP+Ïij?øÀ^1~±ÒÒ§¤.ªˆãTã<§7pæ¼…*nF3OÈXþ†œôŒ²XE#yD¯ã<…·•áÚLò‰Ø[Yr‘ƒÛÐïn4^Ðe>©5ŒúÁÁøèVcs4žê:~å½´õ»]õ»à***Ž<²žXï¼ãÿîC€£ŽÚ%öƒ£í¿öéà?.¨.tsJ£+6;q”þíeÕºÔŸ¯D¿[æ¾ÑÈùŠæTy$[x£ÆÔn“Õ¾gþG­vŒº’rÎçæ§¾û±0ú«1º=‰/UåV]Ÿ¬$×cqŠê¢3õç;¢Xÿq ýU#ñK¼®c ëe‘Q‰M$ÃY¢_å 4Æ’õIEû(åØ1?1gÍ"¢ç‹ø¸XœìD÷ åc½øU 2¥dzýHýG ¥½ Oͤ‚Ïœ„N¶0üy,ÅK=#ü‡7™Â>²’µ|W½w8âŸÛGÛNÆÐí®­^‰ÁõµÂ÷dÅ{Ì!2+#—…ï%ÿxOÜ™,¥·˜¦ÄúΓєújvPåedHyñ_ÉðlýBË3¥ùÇÙ˜»þËìÄÞNÐíùÜ{˜?øùŸæXIÿľì~J¹Ÿv?Þ{íÎ[O§CýùÇ/X?7<Èn2£cèŸj?åJé|sC— ¢âA2†è°çƒQþ$“ È´¼°Ò^¬±[ý Ôá*Ÿ“°ëyñgñXvª¸àWŽÄÓÔ!b÷” Œÿ×ð›{Fo†.‹†i+Ï@#ºØºLOÚ„û…UïQ?Óè†~·¸_ƒ™LÍSë°Œ¬â%ñkjøÔCœ•÷Ðï¶A1z;u›úŠäô,) sÿ+µ„1‰(Óµ-ônŽßÁ¯Ú±ÜÔ;à·j¡{Ë`¸£Í¾Íœ…ÿ8ËüÁâø¶¶øùàWÙÈ8“Sÿ½¦k¸þ4s¶þ£ù‡/UK3a ž ¿ZÈäñô+IcyÒ½òÈÚJ¶4‹úíduû@†v€°ÅÇL‘¯ÃäÙ¨ÿ¸€§,KìTR®A©PÖèœö-´ZGŒãxŒxL4<ƒiº‘ ßYŽ M°Gô&C³màAæˆFÎÛÝ®«–ÛŸHç‚|/²‚6B¥YµÍUøŸîØû…L)b% É'ôN¹Œîæ}â˜Îä8›YQh>qî_ ýK ’Ó5#Ëü?ôahòÀwT‚ñ ÿË5Ô\5˜?ø6$ J¬iò¾9Ö(Ú™@Ö«¨ÇNUužÂ e¢6^$åëŸe ÿn5kþc7½†›R?•ùç}˜Ãr5»ÐÛý ^LN'Ý P¡¤d:K]±ÀyÇÿ݇‡ÔÚ½ÖÿúŸ ÿQÌù»¿ÿkÔ~†Âo¶‘üÃîîøk=¿>Š¡£«è­…N8 ݽ©Ê(­{•AzaWßc{ÂÛŠ¬ÏøËgÚô»Çdwbû pÁÃú\Þøh|KÍ0“{BW pä¡^u^pµ-É*¼ðJK°ÿ+QGy‚ÔÍxJrƃÚoVÜÃKxåAZŒàW#ÔY¢'-èÐM®â3˜æ>bóç²$1ôj£ý¯ÒÁõÖÏZÍ5&ÆaU-£»\ÉLî¹ÄSMâw½(8jVgÀíÖQ-—nâ<¶N²Ä¼7à{ìÆäá{ïQ¾D¦Ex ÕGèÝ:ýÔdmþ …u¨SïJÞÏèh,£þ⢵ë‰Ê+‡ðÉì~ð›ñn˜Û"1Etþf½™¢\ Ï­ØT.´ëñFÓNôsŒK/FZƒ0SäOd ÚSìèLôlKø{‰Ð_õÁÇ q^^AÅ ÿQäñ9^dû6P–3î¡kú€Þìý{POâÊýÁħþ¼®iÏõOý`E°»ÄÔŸŸUœëíW.«±ÉŸ‚ÑK½ ÿUqTjåŒy(›ê3e< SDÞS#~—þ\¿˜gé_2Ÿúò—zGjh˜ÒÖ´W\wÞïQå°–†ì½)QY2YIøêï¨:,@ýyUTñÈgîÓ›« ì~0]»R›‹Ì©2Ž5þœNGhKèÍÑs× ã?Ü™ž†¬¸n*ÝǸŸßßs‘î\Õ¬±øŽ<ÌkïÏü(É”ÄİA‰±žˆ­dñ¿P“40ŒÚyëÿß?Üý¦ÿ®Céö¯óäD8WÔìÚL-3õƒ¶ xŸ£ÜyJ5»ê‰M‰¨Å÷oïOÇm«hJÌ•M_,Ω‰Bê?Þi®"·ÖŒþ»õ~²ÿUnò¼¡L{ˆ¬«¯ɘè™PKFþщü£½'<Õ¨)Ä‘¸‹{Ø+t{ä »É?ŠÒ¥kœX¬oÁžÕ$.é¡we~m(õOKÿ+”ÊvWSo¬é ²ìÉœËØûð·ˆb üÇ(NVÓHó ÊêCøâtÉÎþ}úÄtÇÒ…wfzºgÍÌÌÌ 33£Ì °-33³3;f–™YÆÈÌÌÌÌLÿ7z/+°)9çÏSN¬õôÔ­º·@ ÇÒ'žÙÉŽ·ë?Üaö‡ a÷ sþyTcGÔÛlÏÿÄÿÞ¨®yáFI/t‚5¬¼Kú9‚]é/Fü27­ÖE/€¾ý;ÌU®€%œïfs¾lK>ý&Xö·àòS¬Ú.~2Èô%þØ"ê¡õN[ª-3:ÀšÅ’Ó¹³×yåElŠzòŠ{ðÂ8k¤ÂÖ5åù?Á=÷ƒ}+Æ$ï.Tþ —þ%£á¼§P±^ ¶/g= ›¬Ó J"‰ Øo7|q®Â)¼…8°íÁókçëÃÄ$ô±ÂØ´ûä%¿&šº‚¶ì û* y!|Ó|h½õ˜ÿ±‘wpR¡wËûVpósêÿóŒD×c’ïÓåi%ùWŸ‰L³¢îdGÿ ›¢š†~îO?f/D kö?ýw_ÀÍ—ñ8kí¸ËþÙ+¶s‡}fvÄFÖ¡b"­ê©F«Ø0^ðÆc;çÂâ§?¼TµšìâTä_ES?PXnpŸÏ‡È¿š+ÊïÚW$/¸†ãX¯Ö´“cTÔà$ÄP§/£\»“¿;“øµñÇ{ôú쪯¼„¿*¢mCÿHâý ]xOEúUÝF1~O®–=ÿËü«r(ƒÑ¿£“}՞ɋg¹?§é«{ôøb. Rÿ±B»¥k°Ž—Ù©O@*»'rnæÆt–´æÿ; k¿ŠìµXèÇÔ5æpEÁ:ï`u"7­: LA10Hþî)æ‚grgW¥—„¿9WiÎÌ`P=p2ÈÖ—lêÔ°kWñRÏ,’7àK­:e5ž;ObâÀ.žg´.ÆD•'¼ «U*ù™¾Ê*Iÿ’‰Ìÿ¸§Þà#t·>cîˆd¡HÔ®rbà¯ÍéÿÛONQèëÄcþ`ò`û,üo üاç0ú1ëépÀüAò¯ÊQžW÷ÓÞ;.‡)~ó•c:œ`9üç˜àÇA=ºaê]µoF]‘ÏhAþn}½Ùß:θÄy^d"uƒ“(J¯ªØæø€þ»ÌŒ ~°®˜,.ê!{p‡~À×éå.^ðì­gÅEü[D¥ ¦£_œÆÒ—æûmDLôðô/éÀóý±«sÌpDödu*½á­ò`%"²ë‹”Ú& Gÿݬè)¨?¯L&‘øáÆŽtbwl­7ÜC¬ðÅ¡±ÄD´ä^F÷0®¢eÌ >è7{–¿ÑøÜm –g@@ÿ’uXÅ£øuv×ÇØÈ–bk=-øL©5Ô3¢ÌD?OO®VtâîðX¯È¿êI¦U]à‡?ï÷ã\@4?†Xg?üUhýÒÿªçüè “t†xÁF8*¹DÌÇÆÃÀ7÷A½Ø­†[ËCü™Œæ„.Ï/ðøN1ÿ|§J¬5^Þ ´ØÀûsGÝž@Åò{s$¬Ì1ð$-OëQÐc=ˆ‰\Qã•v>p©€Wõ~¨ñ>Ø?;þèL\5®¨ñGx«Ådý\dþÇN&& «:úCy¸’9àG3¸—‚"$Qw²³º‘;Lx*·ÀOnÆöš0LO`[¼¨…8Ë\Øë²›RjñGjÔäÛÔ€,%þp3Ó;è!vÐSp•ör¾M°‘žÄGJùP‡}W2 þ*ý¯úä_UFÓ˜G­ø8¶‡ìÓ³F«`ëÍU±÷öL5¢^Ð÷€œM÷+°=&¯ssùÓÙv¹ú"G‘Ñ ‹Eíykþ'–Xõ@•¬ÿÈ -жrK“U†û°ÂlHœvþÊ®¹<¡Ž2g#.]·uýFý`uº×_GgL–C!îyBpgŸ¨î:Ý­Ú1ý¾ÿ|“7ôo/ ¦wB3Šì¬Š=þ¬|ÁŽ-T#¦r êÏ•s™e+P·ZÈ[²ñr61\.ßí¨¶“ÌÿÂÄö]8)þ I§YÏ…™êòœÞ½=Y;¸±‹Ê ôßÝ$_3S$Z]&rËs‡w™WúçžÑz½ñhGðW Íõª”ó =€ýÔU†,±ªÔŽF*î¤Î%?^sûZOà¹/ˆ9X5“n5-Åâ?ü?ßuäÒ¯Èî•/ؾÿ¡DÓ.i»Á.äJùÔîeÍAÿ’ìú.í­ãJø—â7o;æ¿ë‰Sf±Jÿ¢ÇÓÛk‘‰ì âÛz5½Æß:ÎäÄ>ô±­NŒV‘ þJ32cëcмä»Lû~â B?à÷Ú5ÍKÜÁ"m€-™Êîf^&ø1BØýGÎâCÔ„Yî)’‰vâYèKûî`c—ºÀÛ¯§Jz&Qó5bƒàGA|¯HXªÒäãÖg¯d2Ûºöp°%‚|‘\ Çžn:±`ñ€=y²á¡§GIÞŽâìç´{Z üèÆUŒõ~höy H4Ÿz=H4;Ö/w)±Ânüº· Þ^â¦Nbü/ówjz<|_8Þ´àndÁ`îSð£91ÞÕw ÁK,ín¼±^p>Oé¿[9Ôü«™Út£XIÎÓnbËë ­a ¢Í<0îQᇼe=TÝüÞ®£Î}*jfv=¹î–£Œq üødö¤~¡Ôë‰eFÀ¢¬ÆúO…+ŠÈ÷¿À’,àYM,¯ñ~{X—º ³Š‘JÙ?qŒ>†¨¯>úú&ºjøð[C¸R ©È¨‚¾½ü¸‰ß½“j¿"( uQ|k‘é;–ºíjôße—‡¸/ ©ÿ°{ø»Éi°R·ˆŽìyN%à1ü™>Kº€øã9ÀÈÍY ~ØýÛ/áßO•¸ßkQ'ÏÖÖ?’¯¶ ¬®È4 wðã ½W¨däCm²Æƒc°ª¹Õu:§÷¡ oQðcÖ>×ôؾ#Dÿ’­Â¬‚‹0™UéìÏõ¡ÿî:ð£ùÄ œk­¤p.ŸèG«ã‘—B§MMKtˆ§däTýä{ÑÛuxµ¥Ú>ÎÏÖÏ«þëÍÖ²2ºt/P#ø±³MAýÇz²Î|U%òc0áoúÇ*âŠíD„Q[¸Ö[™£»@¬{Ÿ«Q‚Z‘ßÔzú—ô„ÿzG'Å»pMwQª3ZçÔ}ú~ùÉÖÖz<ºÆàquɱˆ"­ëÙ»¬m4J±›ª³^*yFÜ5‘q[üH…£ƒêÆ^ÄZ¹‰â3‘+'}ºæË—Ì,†Å’MÐϽ©Š¬êÚ…´FW‘ÒŽ5³é¯|¨ÿpçL%×-UƒE©?ßÈü¨èýɜ諘Ž*šìû»hv±Q(‹ËRbžëŒÿ½ç˜_Ø+Zi]µÁöYøä›ã޶CÏnx¦±A³ÕíÓo=-Ü“ÐùPÓn‡)~ÓäšÎŰ™ßèÙ>E¨Gg~í#ƒˆH}ûU=·nO8 ÿG1eBƒ¯š€?L<£´LFFìI|‰~CÅ<ý\¸–»~T'A¥dZ †uŠ.ó²&\`Êaì`I¤«ˆ*ʆ«‰7Ï;D?¼¬9FávÓ”ÏÐn·£vïF§xOþUÔßf®=ü«C-«µ¤¾õœ(‹NYd?¦²˜HûŸû±¢W9ÊjdO 3¡“áÆUŒe,¥~°ر ZrŒv-{6ú·÷Ŭ —À»íeõ³ Þj޾ŽXöËùƒ™È¿JÇS9—ø£0ñOLîíh색Ɵ¼ ;jw¾¶ ƬXþ%÷¡œîm±ÁÌ"´9ªÂ.•r³ˆ†ÖcO)Ÿ§›Ù䣈‡Þ3?j8Ó¨NPî^ž²z«ÚdS¦îðË-ä YäG‰?ú‹ôìÝVØ£¤æiò¯XÕ>ꄃäÈ H ðnñÇIê?¨ö´žAÞc`•á}]güï½xêp 2ÿ<ŽÖþÏÿˆ‰.p„üÝÞäïÔìèà£=ÕƒÙôÄÌÔµSë¤^èçUˆ¼#àË/ÐuC×iÏ,•QݸBÿöRÁöoX‹§“±.D%l\bXzü«œFz8L ¬$†‰ú¥° øùeð£6úù|ü¢úÔ(Ø3: “Ž«øÎQ|½¢Ø³îLq—þÑ×X…þÑ…=à‹žÉ}>?’¼‡~¾œµ/Cv®-õÚ®=ü«C-¢µƒ£¹ÂyF'ãd$z\>®`_Öiö"öQB6ôá£Ä~Dsoy·²ÆWm·}HA>ë6ŸÙ6@åÞ?ôü:EÞ"ß*5•a¹¬=tn¿HwªÑù¹…µÜ†å} Ôþ*dÆ@ôîFðtyˆ6À¢ùcY7ÊÔždRlw8÷q00wˆ8šßÌÀwHD†ÓjO&IIÊbª^ƒžcŒ‡£óõ±(ߟL>%Ë”¢Õ4Ö²³X/YùÕcìS*ä3 JO$šùžá8¶ÁÖó¥AÉÓp˜EA¬àì2ê˜}Kþofª+R2‹ï2ú‡FOÞ àGðÃä,˜”Cµ’·Eg×áåÔæ¡Ä§/o­gÏ6Aÿð? ú_d¾nt†”Ö~â)*6Ý=­í àXr­R«’„øc‡ðv­·U»£¿¢“™]GzL/7ÎØ[¡ë•ýÐ5kúù¢ŽDô 9’±ÃrÒ×Ö?Z‚Ô割ˆþB¸ž½WÚJ£$¼p5öüGr9/›~t=)M Ó•'šÕ›ÏÏÉGŒyˆùê«­r¯ÕEuáî%`§Çã|Vš…]»ð ýK:‚ñ‰/R~Z  b¦™OU²ÖPÍÙ™¶ÔT¢/¢þüqÉcð#’ì@ÿD;«Å!³H·ÿ‘~ž3HÿÝXàGú`ûÂuÂ~¡}&·œÑ€ùÛæGít Cÿ¨Dÿ’õÚgGÈ «¿^ð‰cS]ÝyÚS›CÅÝ2b‘Y”©zä_ÕÑí ¯ðä É"²ëƒÿS„e¤b¬}Q†þ%“…ÿO>dè«_Ñ3Оպy.6$©ÌEÝè,ò0V`eÛaë›SGçÆž{úÁ¾ÛËK§È¶Ø¡Ù`ÑtvíaüÌØò¾ïF2Æ™`¾"žˆ®vÿ«ÜZw~ÿ)ý½b’3ìÉ—ßd;Çz˜wxŽTï>ØÙÇKEŠ~|ƒéOÔ1þg1QÜN»‰ H[üÖàÞ®=uw¹9Ëô™¿›–þ%ù±ï¾ànNVŒ õå8n˜ ¤•‹áþÄ]Oy.ÿà|û‚õwéE_Û¸ìŠýç‹ñÚx£ UdH)¼&¾jƒ…õ†mc&’yÙ¸lDÀ¿ïÌó¿ mW· HšÝfô\Onà²èß¾GŒ£þc ü½7ÖÜ—ý2ß,Ë™6'þ8J…Ý *òŽ•ü8ÏõüÜ|O_Ȉ¢ï \*àÕtÝ“h¦¹GñÅ;¢O†á«…—ßýc¹*G§‹üêÖµÕuÀÍŠØÜ‰xãÕäð#$ ü¨.ÚY´¯¥P7°E~èñ¨ÿ¸Ü„jƒ¨Èû‰b«¹T°¤'N¹É|ñ±ÄUé¿û6ØóÒ@ŒW`wEkæ G3H£ÜÑe¬¹.,ªs"ùMuÔ=»IjðcêÌclô]vÁ£I°õˆº î®J]&ç±n(ô΢~0»s<Ìgu=ùÕŽ5­¯d¸-´•øÀïÔbŒ•w‚àG|m¾v„ó+ÆU) ú_¥j£;Zr/|ûlÄ ËÈVÎÀŠ+éˆ5[M ›·•5̳á f2u‚è‡nlAðc£v\È•³û—ØñÇkjã—rv‘œÍɪý¨ÎYo˜žò€úФ0l“¬1V9Ðúƒ{ë…‚T‡X/1¹”q\øq›þí…ð<ðO2‹î²\hs&$km?r7ÚZ,7kó®N1OꦒʞŒÛµ=šlI‡¤†Æµ Ù;Y¤E=ì…Ú7É\m-qV¶:ª…üU æêÖ…ÃKÊ|Nok³ÚB×®i(*Òúýy ~Hž© äïÎ ±ÿ/_8Jj \;!ýÛÿiýyTüò=z!£9úù!Íf—¶9¢~ÔÔóè 5óoößUÚoÆZQÎ! µÜWôØF<½»vý¼ õ@¯¡Wpux®SV1“ûýL4ã©ÏgΆ9\ËMýGM³9ý[‰y̼ž…§a’›ˆãXË-h‹±!Ieq8£!b¯iOSê7Ó†ü«ÌÚ}Ž§Ð¿dŸè o?‡˜`\æE,§$/—â€m.‰nÓœø#®Y͵‡µpZ­ ç÷üp‚áÿ à‡Ý „‰t¼‡¢æ¯,85{ÚÍhÆULjÌ#¶°ç…ÇšÿÓðò  LÂÊzÀóøš·°Í€1ˆC¦˜­Äê þHð£L­•Ó3ðþ»áà ƒ:ÉÙùý‰Z^˜›¥ß[.›9ƒµàñ4i®s.ÕCÕÏÇj Á“dªù‚Ù:¬J3¼VðYQe_ó›qžþWgQÏk£5Ÿíçp¾?Ð…*†¼vä1Ž£Þ7G`'ë£ìÃ+ƒF£Î>1»Ã.ÝÆÚæ?žr—à¿k2¦,`DÿIÿ˜¨wSQP˜//5^n£çß â™Új¬$“ƒ¢1T4ض[äÎm1܃íœs¢JÓA"w*øK’s¶íxšêEþnzº¦·Þª;Ö-õµ¦:ÍbâºnpN‰wJsŒ_EO×fICýÇkª]+áKTÇÙ[7™†ë jPÒ™ê:¾õ$±à¯:Z‹ÕdØ¢nÔŸ_€Q=NõÊ.™’—7DU×zKµkú#ø°}ìЙ2'“Nî0“}2ùVÑÏ_©côËÝ„J‘ÈÅò£ú¯¾ÕS¦ÿ•ÁŠ×Ém>c¦“D ÿ÷Œþ%¹¦á›+P/>] t&¤«È$k]êoªÙVsrŸ+£ØJE<«:“ÂZ‘Ë;˜šÞ”²~SùGúÁÚâ DÛu`žŸš_,=B!k2U¦ÌüE¥©cåtöw ?×pðr+ýL¼¨SÉBÿöztæžGwÕX°´õ‚d°¹NýÿýÅRÇ´ê??˜Ø¡%¶/þüIØŸi_´&úm*5R µH¬²Ê‘A¯§;õfú]ðcSØKù÷Ž=Æaôfde2ëiŒŠú4-¢˜"²MŒ9ätÙïþñö)ö/QñiìkSêÏ3¡YÕ¦ÛP[ñP¬Õ7„k¹?x¥x Çr Û¼v§øQ?»zü ¹Nàî‡ÁŠ þáX±"ýE)"á©àÇfâöç`E,Tb9ý0’¬IÞqIrºb™ñÂÄïŽAä6Í:|o)9ÌÉCœ¦ð wñ¥áÙ§’W°ŒGÉ«jÒÁ>Œ«øEŸŠMm*žç¬‘£\Œ˜+?Oê ¼j7i«‡ùYB©q]×pÞšÅ÷çEH©EÓcßíJÈääðh¨žèäD0² wz':@yžèï±úW°¤qÙ»­ð³/|Ñ¢û™}ÀùÍ´½ÿFÈn´öŠËµFStûrq Ý·.ØP|úLü–_Ü2aýºÀʯ5çó>eé•%´ùƒç5qbqÌX0'.zö¢®áô_Z%{£™å;-±þôuÂÒçÃ+¶§fmàøtÙЈû~ìÔg‹ÎDÏù¨‰Þ†%¼Û½¿ÈFèKÉ¿ú¬Š“{Û€©ã›Ð=2ƒJûÀ×DËɼ™EŸ|©üÄ39±â9Š™ÙªßA‘ˆä³6·N€÷È0n®ì¹†ÅeZÞù´¼KìlÃOñGvÁf®[Erm‹ ¤Tm©8HFO”%TR't^$Ÿµ.ó:Ú)º¢T$£`9üÝ}Ðë*{q›1)ØÎ™*<ø[쫚D‘·Íwr#úùÕ¥:5Ó¼óYéXo7á8ú—œ•gâ-¬]éhHåÆ ±ìÏmœ±åÚ.3QÄ2ÖŽñ&'*z¯&2¶8±Ûð‚«G?ÆaÖLõ<ªkíGq&1àî2Ȳ}üÝéÚý•9Üô$\ÿ ¨„næ$êžžâ£OE/ŸÃ“àAþ®<ÎužÛwð€Ë‰sVûìž¡æ_ÍÕåyÇ$à‡7¿w‚è¿WÿÉ ³„¸j$ ~°úÇiâ£p.•ˆ?ò†<‚¿šË³øÅœ€âžžç|5ßX¬Îbðc v3:ù=¨µÛŽEqãJî#{i9ØM63RþÔ{s´>Q !âIÊï_„yÍý;On+Ì?ö}%]ûî¨põMùw ïVì¶>²j#ç§ q_豉>šÁâÏ„£º 'Ÿ-¦JCEÞ”ºÑÞc*Ý9:ÂçW~ VÔ›({e"ÍÃÚ¡`+¶×£c­6Á©U‚‘+)ošñU“Ü(Õˆ?’ÒÁÏ"þ8D¼ÐR%¦H ’ÆP¯Q,.áI¼0F[o*õçEØY»°øƒ¨•yFþÕRæö‘cኂ‰è ’øcøq³˜R®Çâ”)A™›b”kfжhvœb쨪ò§›¬ ¾ƒÊÊ Æ­°jc§óã㵦«|ÕÌZC”7–è0™šF~CdÙM´u­·K{®;ˆ#PÕÍØ*žÆ jø¢L×µVq'V$“ɺŠ~\V¯Ð?ãÓŽ‚ô{…?„˜Åžn× ÍÄŠMã]‘|¬ê‘®‚þçÌ ¢µë&ÿÎü({ÛmÐ-®Jˆïä'Mæ÷EA¥ÞJÿÄqd Ì š=õ§Õâ‡vô-ÜOoÚä¸U—k˜µ*HýànæG'KÅ ¸±”([9ÇBÔ£Ô'Ãø »·È]kFwà¸Ô“4tåp6QMxª£ËÖÄÀ}¸†¥\»pÖÝè‡þÑ UÆy9w­ªôŸ|¨z z0ÿcˆó‰UÊ9”©¶ïèbÿú"V,꜋¾øaÇéâ“2Ètúÿû‹5Ž˜Z`Ýõ ‡G@çÜò¶¨?ΜòbÆWú•ØU$kå¨ÿˆI­ÆMi¯þü‰c“±þŠ nàG&ÖÑGj±„‡ˆm”0üô”z`×ùðm"†ÁXÒÁðDm™_›Î¬§%0r’ƒR‘úÁJb–X®ïÏB޳àd~ñ /f+-Â.W BÈÄ~X‹½»cvÃCoKT#a±/†cÅêàÇ$lÍ#rYw£ój<˰JŸàÎg¡b<Ço~- `‹‡#þH­ …³:"²ÁT ò.Düö•¬Ë Røé½°C籌«yw³¸Q&˜øùpãÓ±È%aÔ®Á }‹@ô%fy¸“)Tûåâ_€I±óoˆ–Ѳ½úCÿH®¥×3sf³`Øìü«8hãýM»>q 1aY<ÿ.t#:Îo¥ì„çýe¦ ù»`îráÝï…»Ø Â=‡y®ÍlÌÞÑêÏãˆÒ B\áî£ií3K`Ïq¬¢®ø=³,üèß^‚Š<[÷ÉMü1› #íå$ú±…DÌz¸\òÖ°hÛYe;ãˆÌ¤ê–ü F¢¨ÞEï~Beab’­ØûxèçÇá†fÊøÜéEÚå`wº¥®}úñL5¸4èç¾*-¤¶ ü¦r>?ÚÄuïv`Ic£iÌ?_"¯²S÷…ˆ?v¡Ÿ7%O±^3ø£r­š©z¨àH²Qs¢ĦóÆ>9ÍÎ%~Ëï-»žÒ1¥‡Ü!¦ºnF^ú—\áLK‘ÓçÁ•ÊPJ¼¹ÌÓȨnQ?X…ɰ¹­'t®ê ÿT¹›¨³HnA2ò•Ã{M¥\ë-×Þé‘@ý—x™”Ýoä9ÙKÐcJÓ_ÝþT‰ÉÙÝl%§‡înTþQV0i™uÙçù$™îb“øèº~µ}D¾nøž‡@‚rb¶y®¸Õᯪ’%ðŒi^èvèA~X ô”–Ä!·¥rÖP>ì•Ô²þÝ4žÄ@üðgs+ð£;Zr·© ¨å•`êîSs_ÂÙÃêAýù}êû[m•p>33©ªÌ¯íFÿ’èˆ=ÀÅL×ÿ{/V8"j÷\o÷ÍÑCËàºN®o‡ëE|í6@Od”2"óPh¾£ˆ^D£—˜u6\«üùK_èµ@4ƾç7×Ó?1’‘[Aý ·HnÔ76é±õ<ë8íŒ)®t¸‘Ææ*‘ÐôÔJ’Åí…n‘kž˜NþêuöÅÅCž”-ð «±Åá¯èI lEõ{ ÊZ_ñÔh.þÊ›þ» E'ìóDléâ£påI±‚%°|I©\nï–u-Y8Ìø#¡6xÈg\E%¯¸QCCé>¶p/>pT¼³N¼Ï"Ø•ºFÕ0®b,cÈÓ†(á2üì 1£Ùc·‡,›úðWL?“þ¨×‚xéúG+úê…Vígß׌äïf ºè‹’“Ž 0ƒx°ˆùÉÜ+›Âl$Ó)‘ÇGŽñWc.+5ŠªFHël¯f×t³bȉpR÷8wp®7‘üW"«,âˆë×”ÛŠJ±û]&/=~cÖPð㘣4ýÛG4=ecØXp‡­P¤Êaçš’k*•&½±Æ/P3Š¢%Ÿ!ÖÚ¿&Ð*™õ[ö!ùX¡½¨ð·k ŽèÓÃ8Ö*ôi«*3§)5¶°,¹BíT9ªóà±ç#Ïw6õ!åæ)‡Ì¿’ºÎÙ5Ƨ˜Gìw ™\ÊI?ë2ýÖ}èFû¼ØkÌ÷Ë "åAO¹†úñšãMEÇ·ÉÚ…`wºŽþCTc¿!«bLÑw39<ÕVE&:i-²â2¯È?N²^+x¶T¬]s ÖØŽ…èܼUTà,ߢ„Õ¤þò½©ÁÞ¯T3TW9S%'þHg%@¥¾Äz‹±‰‡Èßóƒ¿Ú?B‹Dÿöþ®«—B[«Ý!¯.ùWMÉé _š•ü«iÔVä¤~p!õߨ«x34I9AæÐrsˆA„ZÓfÊ1¢™k½qÚý‹™ ÜÛÍYFÂÚÎ#[¹+üUQô÷ÌÄ Nçlð#:9¸ûÕ{ôï¡Êƒî †vÌÝ"Ö="‰ëÙ{Lü‘ 4¯@LÞHê\Å*¿³"ëÔ²îƒoݬ/tà­GM¢Úpw¾ÈøNoUüH!½‰?|¸ó?üµ!dÐäÂëìJõ`tSXnÎ]Ö@fOcÊÕºiu¤û ޝŸUCE?ÎpS[x4t§z˜õçE} [C¸«KpXŸÄ¬Î:Vº÷Ð/wöú´‡(xìvçù±bö«®_i´‚z-Ða*úG1ÎVcç·%ÎxIåÇ`¸ße0G°ŒXí2Ú‚­0|b–{ƒPçG-Ðf¥x÷DC ~ïw£ • ñº’U÷Šü+»~°¶\ºø‚WUÈ¿*ÃSÚüÁwŽòôßÅ;O@ÅNûsÔ…åš~Œ…¹‰J¡«wXíBèÍç‰;/Ã_Ämÿ ý#d†ñt} A¬“ ù}üœÏ!lur²™JR§WÜzEß§+t[oˆZÑ^¼:8ã‹–Ü_Þg—§ ±»“éq9K÷üxu>nžÇ‹N¡žHA¡Ö5ë(}ÿ¾Óÿ*>xyìý[”I¼Ãö(BÔŸ·Ðc²÷÷—ž Lub¶dªù»ÐÏ—[ó¬ŒÎ«ÄݨPéM^ï9Ð-5ÖYѯñ8ßœø£o°#œ) ÉràÇ ³6¸ yñÃÔd9‰þ%¬BäÛ&¿ºO<Ò€þ»«ôUò6]*UO΂ùÉ¿ZGF_v¬¬;h5ë˜Y1 »Y kùV‘°Õ†³ õ~1Èzr·fL#‚˨¦‚Ŷuì‡2W{©¿„½½ÅN ¢±«ÖÂsµ„eªjmDÿð¥?ˆ/UèñÁ*þèÙýß(Ø̬€– ÿ2°âUíˆQ…ÝV“,fô¿Zkz1c±üU T­7ÔzÜÍ«Á‹Å@ïD·yËæ·T öjb"íø¦7>\i~ Ö­›HO”ß/«y’Š™?¬Öj/ú¹7],[Óý‡óQ‰‰)\ÉÝ«e9e':«NdÈuÐ6ûÿ¤þ|Ùršk'¼t´øÇýK¢1ÿc}FÊìÖr±ævGúŒ¤Ö«èµˆÚñ F3Ì׺¶Âø]”&b¯DÓÏ$zí¥á)òà¯/g®aÈ'쯗¬~ Äw†mïHwçØ¦·×HÅ×-PÏ«‹­b‚þÇ_/ñߟ¾¤ÿn)ñ{¼µv¼S~™ü¨€'à‹ÞϤ#Õ¥*høò¯ú3D ,àLÐc)þù3¬ufù†dYë_ñø¶c(=S‡‰…µñìÀ­"'uMñôsƒ&‘°ù'ðò݈?À›ïÃ2žÃ#/åãº÷¡Ÿ|^âD“°–#±ûÓÉÚÚŒW½ƒ^C­áì盟ñ«O£¶Ä$÷Ù¶#ñB_+¾VH/ËõŸ„Z”×´ó߉žœµ…ç8tš—kÊhغ´;VmÒ‹¥‰š"?ý¼:È,ƒj`ÎAެ$‘Õ72•[™éÅCê7’[š.b/Ъ–ÁYðá}‚tÎ<ÎSÔŸD݉/× L`Æ)VrŒÓt±`@T¬¼þþm!X6fÙÄ]nrù'þj*üÕ0önN˜¾‡²7^ÀìV¨ 1ÃÔOƒî §á¯ÜQÀ»Òm¤"ñÂlðc³+j‰ô!®aTð£2ÿåA¿~ƒfp_öø‘üxKþU²¯nÐéýÓSÑ^{ÿdøAüSÆd=5gë ²7 Wâ(ØÝŠÜ€ºÄ)í>‰*ŸÌK©UôÊx`}·|Ôæ=5%Žkƒ&´‡øãŠ…­Ÿí 1¹r‘È.ë°¿Ãøym½¥ûê?:Щ0›s+ø‘üØCü1•þ»~hÿËdGþœMUKîÃ]‡—I[¦ÙóÝs1T Ð?ªJ;wùW9˜¨±m!ZÃÎzüUeúÞÚZfk–JMáþÄ^¢k½ô/ùl–‰6š‘•w»Zƃúß4‹þê˜vâ~$rc*äs«»Õ‚]Ἠ*)JJy±CDt={È¿*ú¶ãŽ6aòîr³ø‘–©[‰?N«Þ܉S`ÉTš=T­t²ÞÀ_•WuÀäïÆA1½oæ ‚#é¿›Ö¢þ^Fó©*ìÜgÕS[èYoÏ•lg•c~íaôý‘VMõ–.Äèú_ýcÌöX¦ýèÄíÅï®3þ÷^u¤ÒkŸž;Zýãþ»vÿöñz£Œü(Ên]ëpgvmz`ùi†víoÔ]Ç.¬j}vj>s³ˆ‰&_oÎüsw‘Ò¨e¬ 7g°ç!¬Å=ÀèÞøÏvþU{s»ˆKý` #)»ÀKõÄjzl…§ZÃáøª½Ð¼Å]*ŸwÁ®íGRÉhÖõÀæS¸÷J¬:\DfªzxVlL&S žàlæ2,ØMð#k6¬sž¡Zì’šð/t“tíá_oQðà ~. ñG9{™öË“çú Üùa4ßÄø®>Ä!«°§ a\Å\Æ¢êÁktL“¬¨ZÄÿŰø}ÉÚ)ξÃrŸç¨#À¡ÛøñÛ/õxZ½ŠT³;Š/¦þÓ¦‚kaý¼aŽì>PPHLb°•Øüwø€WE #0Ã#ð¼ç´%³*3Lm¬ùq¸©ªdh<›MM)ޱÔ<[ÿ¸ÆuÊDá7ºÑ±?p•?_¤»¿˜ rM¦SZø«mð{3±†‹±" Ñ’`å_cãÿÀ/Î/{šJù£èSä#~óÏ…þûy´>R ‡!/Àï¿"®z‰¦ušÕ„j¦Ò’ÙZ¢”b¾õv…I\²åž¡¸©éòºyÆ q_,ø¦RœWi,Z\T‡x‡ñ¶ÓüG±íN·ÃÖ0cßÛ kpŒOA;–…Ãl…`+VÓâ“øQmÙšªÀ&D éT/òÂò£Ÿûcùr:ug$g3òm;©Ö \S®ˆ?Ýw-â‡àê£g°õ¦Š†ì·›øåÐ6>š&ÖÏW QÃÐËsR?˜ÞÊEN× ôä¤áLá,á¯Ã°EU>ò´íº‚Ñ´uÚ~Ô‡¢¼Si¢EfIô'ý c[YÈÃÚFݹ¤ëÕk¢5V¥³ŠYe-ªAþã(B¾2=µSÍD×z¾ÌÿxI†Ò%ŽÎR‘ÁàÅT¡4XK课‘̰Õt‰KÕõª’vªµum«#h]Q.$Gs·0]ÏÞ!í¼‘™«ç~ÔEÿHÂ4õ*Î<àGkº—lGñ؉6SãK6Vcr.ÈwVåAíU Yº8g˜¿{Dëct xÆ:àûå0›rõ“¿»üŽ.Ó̪áìí<Õý£¤ó š˜ªIS¶¢ÉH3&^«”Yÿ'ýw78Òéßþ þ*dæ ë6„ñÂÔîiƒõ4°K ¨ÌËîZ㨠v$dV¹?1Nx¸œÀ·øè˜]D.M>¡ÞM{lÔ9™ÿ±‡¾(!3äÿ6´WÞâùq‘Øùoù<_D4}¨?Ï 3\þª¾X'fÿÔƒ"´uŽ[ÔIÖ bç±B;ðãüUa3ó(Wšó±…‰l»Ð¡Ñ žžõmá¯æŠNxÚs᯳kckbÈÇØ&_lþxý×d2ã=ò»öpèÇæp”Ñ&²·¡Æ¥ÀKƒ®ŸÕ»3LíC³(+7 j¼±øk±§-ÂìUˆøÃ’Õ‰®)GG­«Á_–Ä«µû·–výäa°ô;;øróÕµ%¶Všø#*zdž¡Ù0½?È>œcçKW¹žèç½É¼ºÁךüFâs Þ'QßøÊéNgþGe®~R9 ûø>©6èÐ2?Z1qô½¡¨Ãî@þîÎ}#Ø^ܪBìZýàG~ºÈ GϘEÄQ´ðEÿÅõ_@œ5›"*öî³|‰â›ƒŸûùôUüƒÜ¦œXçèØú  Dwó¶Ñ/Øz¿£ŸW†Ó=jVGÅJÍ{ÏQÕ85NNVœ+¨Oees>f“9D ñGc0ä61]RE`ÑÝuxvü±|,ŠåÅže¶“álÒÿª:s@Ö1/ʲŠP£7• 5HRÑÚL%ûL5ñG &ØúÉß]£ÝÕ¿}?A? ‰gæeô”žäï6¡_I\k-¯6Y»á³2Ò¡ë ó:¢¬ÃRxQ¡’‡üðÒb‹ˆîzökW ê½`…ð$´«Q¼,á¸40nwâ ¹¼ÓÉ9; '/.…³úG:®L=¢à†øù]^Ì1&1·ç‰ý …¶ 9×Õ ç9«"ïò×yÈ-nèJEarç$|ŽèÎê"9|u­x]ïÉòûŽmÓ¥S,r]ÁïÅ)×À|KƒùQÿ4ÿ*šöJÇü†ôY¯ågwmtT¤b &Ø׬¿©¼r,eþ`-ž˜BT|ÑcééõƨÕŒü]OÝfÈÂÿQM2ûc¯&cq˜3EJðÃÍH‰¥÷%`°VŠ¥áœÿáÐoj•Åg¸ãíÔìÆ*ä–éЃˉ5 Àmb»Oêït…ï&“s6ÐiÌM°€sð¸Ǿ^'þHLÜ‘F.!Ëæ¿BõíKÝj1×þÕ™çÒFbýÙ`nf‚yÙ_uðÏãËG¯‰³ß„HaÊîèV®«ÝIøõ̇C]W0£¶U»Äî/€Už¨a˜Tššê4¬rÌtÝLß’ïDpï¬ÑVzDUDk8Àq€[Œþ‘–¨UúóÍÚYý5H~*‚Š‚·¾Šx¦9eÈßÍJ½‡?Ðó+úÇmê5¼Ñ0ý¶`Õ ø'µÄ¡ ù»§è_RO¥™Í™Â_-6{ÂÑ ÿnEjÃíü«íL4¬a„£<§~£Jå–Lêl©‘»žNv&ׯÎ%ÌßÝ@ýÇ@2,{`;2•ŸR%¨¸l…þqíü•;ýKöƒQ“¬Ztú½ÇŒª‚Ì ‹!;‚SPuuòÍkб®+øï½ØëÈ®}t½ÝS‡§–4ؾpý(ÌI´Sš¯žØè`¤üoü±ÓQA/~”ÐÓëh˜+ý…çÔ,‡µi ËrD$5bÐc¨³öÔh*J‚ûéêû÷ø« â4\‰Ý¿ä1Í*‘ÝôÐRñ±ôÍè _[,‹ôðX{‡ã‡v^k î (lGÿØËz¥Èß-jÖKÌIؾAØúŽÔAf^^ zJ¿x=Õa,ÍáÕLÆŸþS”Z~à&ŸÁåTůJ.PV³h˜ø‘A³­Öa‘ ϸ"Ê@z0½'º9 u£sÑa"›}àÇ6s'V×ÃhÆÝÎ~®Ðü;$Z:nƒ£XÉ\¢^X)_t›cðC(¦øãÛP–“kúGâz°acÀL eD2‹ûPÍn€F£°ë‰bÂW|A#¹®,ÁºÝ5/‹žÆ§Pœ©M1ZqVÙ¸Jù½« [m,ÛŽw°IG#y§}`å7€.[°•M©{/‹×øä.{€úÁ=b<½_;;DZ¼™ŠêêKÜá‹å´¤'ÂgTë<Äûð=o¨IEät#±2çl´ÞV ϲbåŸW9À´ƒ¨)Ññæ³ãçW`F:l{kºKíâ(#€ÈIÈOÿýb¤ˆâ¾|×’øO1ôx./ÃÇlFÿˆG×S¦uw£Ÿì[úïÞ—ííþŒhÙy©> ×u@æ êÚ¢I[]çüvbKs„îÄŽéÁ‰-ùW[È¿ÊHþU*ø+;·*Hkêã·À—™|ç žØµùWS„w€½_­B.Þ éG–À¢©áTí&Zˆgepî`ÚîúïF=‡³äÿ³(%hBô;ìèº ´éè™°Ü7ÈæÚÊSá.+“g5ÕŠLýà~òÚXQXñõãÐEª£€0aæñ X4ŽJϲèãZov^ÿò¾Â#ù.?‰ÈD5Uò‰ËRžÏšAýùë$šOJú—¢“qeÕÁÚËÙ´./Ç‘¿»Qöž;Co¥ÄuˆæÝäKqü(µý#.U†ÑÙñSIæ€rU[ø0«ï¥*ùѤQ,‘’./fùWÃè1n5õƒOT9çm«.ý'Ï ãg¤ËcUçç6«üU%Vz©¾ÕÑz‡õz&¦’Åø‚¨»°˜ì:ãïÅG´ üÕ G{-mˆÞc‰5EOeÔ¿òÓ2±Ê2ôóâzF=«¾›™tá³Î¾Û5ðcŽðÀBç?,#®‘Ko©9…‡ÈFÿ?8±OØŸúç&àG'ìU?Ø‘ÞæJêϽ™ÿ!ð"ÜÑ?ÊŸ. '~|!·¡x ~Ì£zd'øA?Vøüjb6ñ!êJ žó¡Ä#…èì»=®Æ*,¼ /”/\od²;©^bÇOÀþÏô¼±Af ô”ØÎàÇjÐh×¶¼™Å 6;Ø øâ²£‚q”jÆÏ*~iòdÖâŸ/Bÿ^Hô°–¸!®lBñŠª¼|XÊýx7¸ª™Èö™o¤ÑCöl™¦O½¸ö…ð°?½‚Ø~Hôój6OZEðî;(O¬sâ*¬>™<£Qò;'äSø@³»èVg¯$—øñY^´ç¼èç·ÈßFÖ5*•÷Ë{rJŽþ‘xá),‘`õlüÝQÍ/Ø®¥ <?Ú‡8¥.ñG^ò¯ö¨<2‹:CÆiQ,X§‡:C<ÓþÊ“ȘðW{Èèèh¾2Z[oº¨ærE 9 ñ©MÙM5É@5üÉí\@ÿÄ(Lñ^5C5·örU— 'mCÿ¸Íäõ6òµhïº)µiðWvdw™Hww.˜Ä ðç³2Si;ݾ ôóçVúï¦BÅÈÎä÷ƒä_¥Ïâ8Ô«„°JÍ]ëMÖnë÷é$šÚùüØC=ûêKÁ_ŦN# ’Íe¢ßÈmòo ¡zï…™mË–#ÿÊ ûÈõìmж…Ø yšJʧX–i*³$=|+XÏT ¦²ŸEjL›Åz©ˆo¶È¸ÄEÁ¤pÁiQÅ^š]»ð ñÇ‘†ç«#Ïkó¡jç<Îüóchñ9¹jÍé_òYùéƒï¥Ê2ÿcúG_+6]î‰ixÅ_Ìx²²˜á:ãïÅNG¼ ùú/^ÿ¸I.*\WëñŒºÆSòw³±»Ž:I‹"ʈìÄû¨+Élÿ†uÅ‹“°0v¶›ÕixCži5ø«:LìÎ"‰…br8çŸ;ô;Zcôìk/þ}ÇdgMt ñ˜o²«J‚#™žCë°øy?ú_­Ýñ¹§Ã²,‚ß9VÄ7RãÓň?Ц|ï•P®=ü«…½´±àÇ6‘æ¾4™#Ùàÿ¾Ý\ÀR$•vÏ?'øaëé ˆêmøŠeŒØð¶ælðHbëIXàuf <¸ßȳɎ~KzÍŒ„‡}•çi ˜K®DèG‡þ̵9ÏßÈ€Ïoý|(Çñùí¹–³¨@ûL4ó æà\Þrò-O0‹·–ñ!”×4†AJA•dsb–íDU𢑹ÖÈL b‹ˆj/+¶CK¹Ï1/ÃþÆd7Õ6®'7pÙ‡ŽÊÔŸOâêÇ/Nå n‡›ôEE݃=´û—|‚º_œ—(i;ÇvŽnÉñeÃÔŸ.ðj²>\ú ø4÷Dgý`OjSÿQ…‰Q;éïúžª§éæQ‹Ü]¦âHð^ÑU/i’}²»["ø¦ª0&Åáù#ƒDZA»ÈJʦ^Á_õƒ¿ºu ~l£Ú/žýU*E˜ Ì.ØB?o~4„‰üHþî}Y üJ¦¼éxXŽþ%Ç`bÒ‚E‰à|T}åºOÏa™P=#Oö-OÒµùW£EqöÛyp¿*W0¸°œøc–êNþnç*+ zç6¢— dýRnM‰ ‚®‰‰?öñžó0«ý(~FEy4:†Õ÷”•ெX_ÐŽ£ŸW£’°1ýZº0Ïõ%³TªS]ã±Ñšt2¿v!Š$]î£>‘‘Øoˉóz“ŸLuæΧÛðVë8úGDëšúLÑ‚þ‰›y²;Ò¹¦J@ÿ’Aú_]×nµ`•›Q–aÕ1³—’Ô®D‰1é¬Ò,zBoßytúÏ6׺*sËå…ÈGü‘•ú;AòwÏ 2YÄc‡´ç¹È •Çy™ùÛ‰?ŠÒµ¤³UÍ9þªœs¼ÕþŽOÕ%jOáßdK,Ã|ðã=6(“èbþ_^wÔŸNSkúñ#-ùW³ôŒÌ¯ý@¾U:lÈqú'æƒi*ªïdÆáß‹?bj»éŸX.‰¹üpeõ©Z*QQ&÷:ëÚNø?ð `H>‹AöS ~|cæÔ§R9=úù±DÛD@: ¹‹GhÆó°0ëáëSÉ|°D=ÄZ|æ[¨’ñ¥{Štõ ~ô2º3.hð:6g#å,u¶Lx÷Iå3ò¹¾‰Ö•½’àÇì¾ Æö$Þ¨C ätæBÿp€GWYõ뎅·›üËø#ºÖ\/ÉÓ;ÔL ÞŽ%P0!ó8s_”ÀžæÉרáÿÈ»ÍåýF£2Ý¡æ_­ÕF É*NLÜV‡ó:jÔã™þÖÎŒ ~(ªÚÓlBÙhÎcü&Já‘h¡àÇ G1Ãv."¼\°"&ת ÇfOì [·«Ùƒ\ÓXí,2%öûZñNü¾/ôo÷5ýÞ^ì9Góìñ=ØÖèTS俪 Sž‹ÚŒF̯ÝB%!NºN­{´áý“þ‘@˳Юt†üÓµ‹±/:³zDÿ«öTСêà䃽k_ô8MÜjøÏÒæ~fj½»Ýôh Ñn|ìFôw¬…âœýc‘ªAýù˜—\tôHJÏñKô/ñR—9ºT(÷ÑÉ_öã\úš·ŒþÁÖûMÔ ÞïQj ðCðÞÛ™†;Vu‘³˜ ¾ÄJKïª8N?súùb…µÒî+v..·êJÍK/×áÓöh‡‰–K ©U þ˜kÖ£ÏË{ÝUxmÞø»ùÛZX{rpò+VS‡°õóþ²Œ<ÈO7`…ŠpüYù÷³áº\®¯EpÉQä`¸š,x°óñf™…AÊŽXÄàGðã(Êo.~~šL„ݼç#زºFªŸb×ÔöÑ œ&Óè9×f'½njB>*#Ê¢Ô&CMnDº?(— žä4PSõÉEê+ …ØÝÉu'Ì¡ø±ýã˜Íò¯V’Û$Q•_2õ}œJN%a+k+úÇŽ0.õ31ˆƒºÉßݨÝÐc°ž+ Ìß„ž²ËÒà¯æ«ˆàÇ7"®‡ÄGQè_ò˜¹¸¨ øõ¦7q¶›œFÆÅ*QÈõìÝÕüЍi^x7…¨œßaŽP7­ò¬Sý#êþJ²¹JQ—x”$ @v“(>ª2÷,ìGv³ù»]øqýc Šloüº°[[U²uûس¶<œ­:ôOÜi•u"+ë“cìÙ• ÉßmFfæìÂužõ"ÿþ꘣pü«·Ž†ZÆ`ûÂuSÃ|[ó×fèQ˜†ý£«lttfÎSr°Ž“¿2Cå¯|ê˜o,ÅënÀ¿B¼Ôß¡Â{Â_ù ô4n±n±¿uœÉÅ:t [GغHÄ4{iÉ8p9DjQS,‡ôc}Hÿýéi:aWçAŽhh+àÀsÈRøùÅòwb3Já ¦þ¼ŠmnwÈ7éiô¥ók{üy¨¼‹ðzna©“Á[eEÿN‹[‘.iÕñ5â›n®=r•?¿Îªµ'Ï÷$õƒ‘xæÇ€kÌ[ÏÎc—KK»_ž€ö‚}YÁq¶S?hL">ð!¶>¿–”ø¨V§Óf`i‹ÊͦÉz7àqžs%ÖÂ_ÍÖBS»íãK¨•ÐÝðx§s„i@$'ñÇ8ìªæÙìÁŽ y#¼nLâg3±üD=#$;d¯6Ra´#ú‹'g‚g±\õð ;ñÔÛsuâ¢?%êm´c“5hSEˆx2á‹çv=¹ö:ÿù8ëÈɼ™©ðWe?lo$°Û «„ëNLâO†‹O#äEI-÷Â]À~|çýÝ,?ÕÌ'w{!#õêWA ²\›;›c×Ó?ñ:y¶þèµèVÕ˜Šwf4ùRm¥ŸXðSÿÝDº†_âiº‘÷z‹¿‹¨w?V0 ýD®Ó‹¼ší3x’r¨=Ÿ ŒË'ï¶E?èÍf®Ôö{^:éQˆ?ìß5‰+ÊÄaZùAUD– ?v¢•E9º3+ýZ&Ó¿d=ü•­×GSo¸7¹W׌¦ÁÖ["JcïmE¨gc\ 6Muc~mfç.¬ªi}¶©/r™§'¸¢¿ËšÄv›‰ºÒRex)ˆ½/ª-ÕN³û+à;†Íõ%Fò†³éo%´ÜÔêÏëÍdÅËï‰þžj^ÄÈßÝ ?8 ü¸‹þ¨,#W‚÷ÍÍflõC$æw‹ ½EGYN½ø"ë&¶ÿ¢•Þ»âp^·òëlc'U?òK˜^òû‹¸ž½KÚ*Wëâ¯ì%{í¥˜m6Wö”òùè1=¯‘¹ûÆ*IÞÕ) ¹X;efg•ŸX9ºô!z²Ã»váYm¨1HdÅkìÍgÒ]Óy ÿ8=¿²[™^VKçHçn+¯³­Õ[Uw¾'2IO›ï±øý|?»!ûÿdþÇ>GÖ ó?Z£œ¿kÑ×|‚Ù(b¤¢ÿUv×nô"D •ô#Ì:÷磮ϯÉßKÞiy²<Šãô…÷Лj‘„'óÏ=Œ{LÅ-lÿ†µh Á½ÆW£¯°9HH³ƒ–ËpÂäF‰©÷](6ëáéVåp\×vR~›´‹5¯2­t3Ëп};öæ6£6¶“ˆ‡ÖF¬•1ý¼¶ùy9ÏÊ lý`ôóËØž™tq¸Ý¸"ªÀúÄ Gý`J­9uˆŒü¥Ý¿ÄŽŒ¾‰Ž<׬ƒ'~‹·Ïs'‘D)³Z˜ý¯œÆï`NEsQÈòŸñ·ÛàÞ·cg[a¥VwþXù8<뛈):‹%ôýnDÒ2è™È…€ò‘ =ÇÉzøfïˆ?-ÅB+ìÅ}®ÅAìý8ž¨{œ{óPû—Ìà©kÆ]HÄYºƒ#;@Åj\ùÈ(ÝÌŠïŒøÍ èìüZPË›ü±(”å\Onàqžp” `#¡êv€IÍ™µ"F«F¾ÓXz ßÂ*u¢Vá"/#±ÈIxÇøœö2 ÿT>_,†s<9ˆ\n mØYË'°GÑ©÷ȳS‚ø#7™W-Éä÷ãçqè!r¤úÎ58/~YB\C¡§ “YkòE}\•û°¯»añ³À½ J¹®åGÑ!¬qK-=raÃOrÄkP纛ë´3ÁVl­GFÕZ¿ã‰¢S/%j÷:•—œàÕd$å?2o˜WÒœ«ÈúIC}…¿»ÇN¸BÿX/Qÿq…st'/ÏÁ{/cRÇPÕ½#žs-óÊ?94< vžbïØÓŠW/Ý'c¸»¼&¹nFm’vö¶xTO}2q@5åG—aeU¤'íx¸+óÏOÁ_-ÀÆ'ñç\G‚À1É_K%?`3ZºÖ¨ÝÓ?š•9îíÄ\ð“Õ ºÖ£ÿÕ øºOÔh\!?Ö‰Åc³RУ˞íR¤ÉeÇzèçÙ]øqS;ÕÝW…̱u曩äSÉ ‹f9ù\˜h&—µ 4:¯ZЧñŠLäl§*ÀFÂ}wÁKòpíÂÚ ú'æ!ë²£Yœ§b“ª„þÑ”x¬2‘%Ќ̰ ΕtÁjG¼tÆa%á£Ê.ÔeþÇ1³¤Ì#æ»Îøß{ñùWo]o÷€þ‰!;'¸~Æ úïF6JQšmÝ:êP^L¯£¯%þ¸ÆßÿqT¦[ÏÅán¾ˆQb“þ‰.ð=´·FU¡^ÆN=›îìyþ×?•W¬¤ûÃ'Ñ’ ½,æqO ÑŠÏEYó®áÅÅ4ú'†O¡¹Kü‘N\ VØaV|‰2“WGlÄÞ]¥Îg×UÄk;ùóüôÆÆ\ø«!0ù¿FóˆCÎ…š †=>p|©òà^Yôˆf×þi™ÿ~£ Ö€(a‹È‡ÎŒeÍDág⸵Xâ,r#¬½" i R-$²s3Šâb‚W9Ï© e?ØÖ¹0´‹a–’m_ƒlö°E;Ñæ¿œ«xš‹~ÿGÜY€WqmoÿÌÌž=sðàÁÝ5@àVîP‚‚»{¡w÷`A‚»Bp)îÜÝåûMîå$9„K¸ßóïmŸ– ;{fö,yßw­…V"êÝeVr«ñ7#©ÖÏ…Uˆ…gÌj¯õMðçµôÉX”Ïx‚'d<»øýQø£ ú_µŒR5Ò„ëQ¤?™åQÞåì³/ˆŒ øU qQ³ƒýûbÕVqG—se¨?Ï@?µ¨øóÓð`±¨Åð‚=HÁªÉêR«Ü†Œ$,¥!qÿ{úá‰Áñæ¡—xª—Òj¨Î=‡×©½ÅüGð¯ p°¸ší°­_`‚³¢Ì¬Àü¨‚Æ ô»E¨˜n]šêQh¦jÊb’pwº‡àM¸ÂÒÔ3žóÙ „Z+!í ÏMQÆ·f‡¿3m{6rüÑQ™œœk’r$ÒŠ~ª-,“|KþqÜÇ&S…ñç1©€_‚ÿÈk_D}Dbð¦: nû¨EMÅOV¨/Ù Æ8DßèÔùæ¨(Gršø¤49_<ù‚:ÁLñE!üÊüIeÞ ã³œÎä§œžåÜéYìî\¿J¯LT΢)‹ÅÿttÞ üj',ÏCüåej²+Ðÿª(­ð¦™þ|7½¯&ÀN)Æ$žÎgøÇðùË•诘¯BÔ”Âø"é‹ÉŠÿç‚?O†ç=~u$ý/S‰^ˆ®î»‰ j²Ã¼()ÜéOÞ;èܬ¥‰®E&^H>KõŽðÍé\UvAüG ¬~2²¸TúUdŸwd|x#"ÍD²gПTÇá?.)ƒ4_‘/߇w2‰~èc¿m6E¿ö·‘ZÄŽTsŽ·O'ÿèÎõÞ£g×#tqM̼ð|*¹àq†h"kBÔïßÿÅïž´åT«{ßÚšü×ø•¡ìV¨ók£¥Ö(žœÖÕ¶ÒTŸç‡9Îüóà_Ú¾Fw£Y¢ O)Z¦[ê5óúÊQ-¿(Åüópò"½?[<QBx„¦X¤ÜT÷Ý3”Ú[ò‘¢0mÈO÷×/ê5/(!Š›8= ý Í Âœ•É­ĸ'`ÕJq Wª£ÂíWm­ ¥~°…þ‹¾Äý öú_ýwcËÅd¼OÀð‹ß°ÍI¢_%SjoÖœ¿"(eóqµÏðšðç9à?öU¿¶æw{R?…pÞ›ÍvNŒEo„]>HÞð›X—«,@ä8«— íì,÷Ô2Ïy;ׂÛò¬¿_ÇúJ~5-ˆÉ8êørèô*¤~°ùÇc=¼¸Þ G%ïú‚uo4‘õ.ÑÎOûłӘÚÖŽ]Åå*+±ƒƒ XÉþ>â}ZÑ¿ä´ö€ˆ¹)ÈK0¾y+¬K!ôw™ñ"Eonø²ÛmÐû†{‡.9+ªªÕ°>SàŸsÃAF4ð–Wè›¶á]ŠÊ­ìlYÝu¼|´÷× û4SíJnåÅÙ8 ƒîEMÏà0µÎ[z]PßÖ?±$ú0£Ö¹7z¯âäø—þr‹˜%¬þ?ÿ1Ô·pÿÞì'€ÏdÇT1bÓ¿ä)–µ¾yÿq\§‹‘ýU1²¤[üëbÉ äŒ[Ð4E\¯©úB´û7~µ ûBσN÷‘™ùçËè+•;Uk#ã ý«:“ãTESµ†î*9Ý9ô'´Á‘Öóñ|WÉ?<Á5?è—䉰úóæø"t'ô@;u‡œË÷S—j©\G<æaôWIŽDñ“ÛË¥¬Vv†é¯îã¶pR<á‰>2?Êþ%G©#¬…N6?*Ù?Ì¥pÌÕP/ï$÷GmNj#gGolñ‡c½ÊQõ%êòÜ0üꕾ–|fú«Äó¡ð)™!uŠþ%i°øWè2üʚܖkF·Lþ±E”vÄn¨ÿ(NN^‡Œ»ºü f¡¿2íué·»˜ •¯ÌÙËü¨bæ Ô»×è“{ÛÌdd£~Uò¤²üGsø³ÆŽS¸›I̽Á¯äeXEþqfµõyéeÒþ| úݬô‹œ>ì13Û«óÌí¨N^‰‘DØô²€Xá¸âîÃA[yå¡ãǽ ¢³òÜñ‡?ù ȧã?ZhÙ´MŠ×Ùš1?ÊM-¢žPâ+—~òý‘ÿø•m!ªÖNøø|úqùeÔæŠ Ö¯ ÖA»€7ù5ÿQI\Ʋ¿Æ^]ÂŽ.zK%¥¦€q7d~T[ vF³ÿîuæŸ×w±˱ ±®dqp¢†b ¶ðQ]còá"«F‡?ïÌü•ð2ŠœIÌŸp‘ø.,Hv~'#‰š3gɇL'—îæ8ÑïVøW¥•6ð$Vþ‘ƒÎÓ³°Ê™8_¾Ø®«`)áTyÿtû\Mo¡ÕŒdÂ×ùöÉ®-ä=jˆï8¯O@ɵ†'²Óº µ¤7–t&þã(ùGlùb'}[&ÿ°ÿn,¥¸šþú’tàq_„èi J ù‡·>®BȳxW¿‚û»¯÷7Cø ý¶/›mýKêàbÊ¿x7‰|›ñký÷Žnøâ£fÒ7¶—lHÖuþ|ÙI¼GyÝÃñ憯vÈæþj\LgìZ~ì9Ú®º,ØU;¢å3<‡~økÄßPª^ÂãzcŸÖ‚ÿpîî¶Rí"¦ã×rñ÷@k¾œ Kf4@wµô:½ÈOѤ©±úÂôxº›pJ¹Œ?$j¼ïæŸ'P?‰:äó$r\ìª"òÝ¢Î4GØÁð 6`h~¸§Øæ½2üÇ2§þ»íU üê(Oן[]>Ós#‰í=e^c¡2Ø·£ju§Þ|}ORû’‰+OmhÔ¬\C5·Î‰?ß!*ñ3Ï£Á+ÏýKÁ5ï§~š„ð'EÐre cPì;ñˬÙâä¯ëd °°—Ô8æ4ºÊÝø"Êl%õHINA%±ܷ&Æuc ØPøŠ…0 á§ïšýˆÅ%ª§6æZîódýwÏ—`’ªaõƒÉÔ[´——»õ”bÈæx÷ž*«µ à yÊÈ[ õ WæG-IK‡ÿËl«PøôEæiv]”»ù”úó¦Fm®)üyv½ÜáU:j=a,‡b;ròöž6jÛ_³‡zÕ»1¥·#ž|,`5ûpô»’)À×À@›±ekÞ¡áÔ€£N)y„ þðsýýé´­´âê°!Šâ£üÚ\ðý©ô…òg~T;-§¶5¬ÿî›/Ú«2ôpßôËõêÌ¢2ïp6ý¸x/_™ùƒµšÔŸÖžR—Xűëð=üøS%Ð¥–ÄŸ}õø‘ðã•Rš3÷E'ÕJÌa~môôW¡ÊøëXµà;ÀmâÉ‚(\ˆÙØ›³ÄÍÁŸúŠ˜¢ºˆNÍK7mÈIð¥ÔW›Ùßm¸DÍå|ê@^rª¾O²ÛŒÑ˜?XViA\ÿ‘ŒüÃê Uˆ*‹¨ý,G1$à¼ÂøOÝGëø“»˜X[Šþë{ øQX½B¬®À‹Áê[£r]Á[vm–55ñ,Io±â‡ø• õçåA«Æë ñ Ó¨Ôð´þøÜѲ?–¬UEò‚å¨>‡éóÑ!ë9ÀTà~§‚{¯Ê¯e×äJïs…ÃáÈïh*ú¦ÎXµø¾m¬õwÆ}}’(üÇe[bú_ #÷Ï›+[ÄUÏ¥ÓÄlç"&Ž+`a7Aë—Ûç„C>J¬}½f”ݨtVJŒVÛˆĨePIÝÙQä0ò´ÚÌMõ wê^êŠ?‚_í%[p‡ÿh ÚÔ>|ÚÜr¥h":=—,ª‰ïkO=›þ%·¥5qî\…Åñ<¦Ú­Ì}s?ÌHKüÇlor¥»è‘vÉœ\‰?QOÄ·ÃWuõÛËþ;£ß­MÆ ž|šQ€šÄÕæ$&b¬‡O)C¿]oô»[Øa2¬³«!ƒ<é©ú§ùµk„õâU›…ñeLé×^_”Š¿Ï ÷q‰ôß ‚=[€uÞ.ŸpʼnPi…ˆiŽíå£ûAÝš¨õ¹Ÿx¥J F?8ø’ÌÞ[„â*Õ˜]éø|¦,éwo+ÁV‚Ý$nàXo>ý5ºòžG3çj|ïô¿du:\}fFRó0žcüy|üÇY¦gí¢¢Ÿ¹…L¶6ºíbr%úÝE"¾Ãþ€X¡·aêTòߘkU”þYëé­’ëš{Lžý¯<ôLì­-'Ð,-¯ã^Rº0/В޼­qõF]ûuúï®G½•OÔ4q¸},š†L&ym^ +Ëdú;RÑ;”ÿ΀ffúŸÌ¯=nËa~í'økòìóOzòj|º>S—…åÛjÓ½ÝþüÇxT«þúm¬!²/ET¼Žë=Àß7eifc:k/æ1¿¶;>±"^á Ø+b‚³z-øl/0ü8dÕÌ ÎÔÒ(Çÿ'¡XªO¶°Œ·ÝäV:§9÷ßM­&'÷"Š^ ‹mé¯òb1sÐÿê²´ÓÇ£7øÕkú‚œÂÞǤʻ¢,M•ˆ²]f"V^¡lŽôTÚ©ñÈÃ× fèç^GÆ!ói ®–’ÈühNûaºšç¥ºd0Ò5Y æwÕݱŒ£<énÌ?Ÿi½)èw‹È}œ­šhs]á‹6ÓÍwža¦Qˆü#9þ#ùG PýêÌ?_…­oE Èe»tF+¬ðHÇÃp¿Ú…"• øé£:=s@êî£ñ¹ÅèI;—޶ >#”üc¹‘€®S5éoͯÝ% £ˆæÄ'ÂüÙðç6rå‡Ä@od ðÍ5ä<}èW\ÖœÊü¨Í(w_¥°Ç2ï2¿vªYë¼’J¢z0HEasÃH…óçá?¬ŽEí±e`þ·é>Æsf£˜„ø”~Àó˜Eu‰ühÝ|oñ¤mfB¦Št7ªÁ¥`–N|vHü*ýîêÏrâßýÁM¼Q{3*Û’T„ÿi<3·’ƒ½’5Íxt{)ÆÃo#fÊü?ñûmù"Ô~°µT~­¯­ã¡ÛìtHX¦º’ÄÑV‡åAäeÕßùï ýK~M%˜ÿ1 T§ úø×ÌÁm¢ÄfR`mêÏßÓ×·l¤ó¾¨?U!œz;–æ6vdšx‹Î4£fõóÅEƒíßih¢^éüG1qÄÝbT6ƒJäùÀó»‹@lá9°¡úð=DB²š¨ún8¯Ú Åó*Ñ»7V·:ø*xŽ)pÀÉIWej².•çM°ÞIõì?õ•Žè¯v &OŠÎt8xªçˤ%”eö66¹sNþ|<³Öô'w1ùÇßDZ=ñÓÀÿ¦c¥·aUÇc%š¡éô'bß>ô”ë$û*–þ°b\Å]ÍÇß[” =!§¿ßóT_"²îììë'GÙϽÛ¯_¡{Tþcj=,¸)ûÁ|Ü!º÷ÆÓ¶Àû¼æ×wÚ)í+̃Õ—5ˆ<­¾`1¸æò ÎÏÀf»Dÿöõb4« #ÖÎÏ9Ÿ¼o2WjÍÉ޽K,}ˆ•¯à“rP]q–'}œÔÑïüÎü©rÒŠaåÏÐ)ð ÙÛI¬aúïVÙ.MŸ¤Üô©ò¥’8„õSâ;Oá«\vpɃ…‹ÓsQÔ$ÔBYõ$ôÂÀªï×óÀÄxk0¥ËÚŽþMÏÌëd­ñ)x¸"pØOQå”y8§ œøó¶ä3õ‰*>ÃM?ç¾Çà'÷&c(MÿݽDÒ9°`É©y ¿êNžTšûcD÷‰øü„Szßi~í QŒ®.×9W…8±àñ·£˜fô“ èß~ýUBršøóÌD:ƒ x3çg'=ºÒÒÏ¥ƒ|A/•ƒþ%‡¨€ª"C‰T—ו^Ô  ê£2³/–ƒ ÙñO°ÐðçM¨C߇Ÿ‰ë7ö—ëÜOtq<ä ÊÕg¼ :üIJâ½xËñài%à2ÀŸ[3o‚g¥%C åëš [‹±Ð”#FÊ'ü#ð‡˜mW‚ÜÒ[ßNþñœÈ´ ¬¶'ªƒì+>»ñ1òy«#ÏÙ`&‚ÿ@·­gÆ 7"†é ‡äç8…AÊmÈÅiïŽWJ£ïdâÖyú—ì c>¦FÕ6³¢þ£°½úÝ·¨4ê(}̯dÛO9³÷ÄâŠ2b‚ãŠÿ¹'l®ôúol”_ë ¾ÓLÌŸ£æ€ÿˆ¥ÍVJpþÙêÂS ¹¿Š¡„†ÿÕh|J ƸÔ¦жÉ"ýnµ#þã7áÆüƒø_Óïz‰ýDá_A /€ˆ›"ýU "Õòøf(&—~g¢ÞæE*±:ŠçX¤aqüßä ù‰ž‡Š5X¼ë¨vêòž÷¸õ‘~·%úÝ5ä—àæ£èyJ 7ŠèëZ˜ÿÈ©AXç˜ÑÀ¯j)=ñ!àWI±r#É>ÜÑ÷õmy¢”˱xOøIV>2¬µ‰VÏÉNEÚ_dÖÖãš‘[ïǃ%Á³Yª“j £áòâáyˆøþ‘ìVõ+˜dT¼Õ’Ô1§ÿ•¥vŸÒÍÀ}ùG#}6T—ÖŸ`›§ò³fÀ×ÜùAÿö©(,ªò÷âȉøgØó*à4íØÏsò%ýwc`™»“¬#ç:ÈÓúúÜ ÏqonøÕÞÅì“ñ£@2Ãñtg‘³²ÆF,NüÈ3ø`CAæ¯áWbSÊêÌÆt®nš«vCxrÔµ]aOð_ÇQp¹R/èiYÓ°7dWº˜ì#KJ†ö8Yl£¬<(Zg9š€H  ÌÓ0°[(rƒ_02Pþ–j·Ú 9O±¢¯Qt%Ãq'z¸NàB-anPÌ=ÊÞHOº½ ï¶L¿–r™ìÂEf4z0?ªùÇ"èôËøl–7¾Òa¾>XM²Ù}ð1©9 N{Ñ©òtþ£¤ü›³[Š«ù¨ß’{áÏÿ4Ãd§yF´·¦ý"xÛj¸…“T¬ƒZû ãÒüÊËñ0òÒ÷Èm!2ŠòO¡ *°tyE·âËøèd‹’qõ6—yÐ4åÊ·‚4n§Ã£?;=¨·ýë­P.©:ùÇ3ÎðGÅàYÎê†~µÉÈŒrÍèþùQ<ò‡ãæ³ ámnEm€÷w—›ôÒàÛžŽØí‚¨•Š´äm*$oˆ“zwX‰ä-¥È²Šà=^˜7Ìòð稹ˆ–ÁÄ¢þ£$g5­l =F§ï÷· gþà ‘•Ú¥h7ÓêGaŒ‚¨?bÖIN3·Ýÿщ”ùè_2Ɉo‡ñ'+`¢Ü ~p$ó-ö’Ùä‹€~[ùÿþ×£6xµIÿöÿ–?·cWשY‰¦skË ]:`ëûQ®býw£S ~½wmó©é¯ƒ%NеU_©vµ‘òY+‡ÿèŽþªžZ4ÒûþQ*‰uꈕ+§qõ)ä1¨(*JˆªøÍßͰŽz¥Û(Yª‰›è¸üÙÝ|¢ïDDxùˆ'–cñn®X»%bD§æ¾ƒöWÿñ &y¨ÿsìL7NÚÎÄ ˜«ÿÕK𫮜­üŽ3õÞl¶rJk¸é`¢™DDÆÃñkùñMA*,4“]¿ƒ­ð‚Iœ‚륵ûÉ]LªÍwi zv ¨‘S}I5µdKx€¥d뉬m ûØ71û‡õç1”¼jQ|Ãhê?r‚ÖÅOb÷ZGÑUe]кâ>U^‚e™Ïoë'E™(õ»c¨ÿhÁÓL!'cé¯&5ãi6À—}!_J*h’ʼ*²ïÿ5}(zi:À'ÂKíxsÃïâ[ ê?†ò“‡Èn T¬JG®8;LÙG þ¼1z&”OÄ·îÄ;Ùé.¼a&üG¶ï´{ Õ¿ˆUZÀÎÀ7£¿º‹&âÖP£_I6c+ê¡/Øþm̬»à »P–Õ§“Ÿ4•3ɇ“9=—ŒêQû’þã-V÷8ÌÌð«TdO‰–»a±n˜§øY ŒxpÈ%ÁíoÃbÇKŠ[k~µ6›z®zè‡ê^T©×ŸÉm´¡þÃIèÜ”Û~ Ö¶<žªº,«‹yNNÉàC–â»Fƒ_-Ž´ÞÑþ$Y`M9Lï ý×P>@Ž6JÚ·Á¸Ðþ®¡£êmg^ãô¬AÛ°–œ&ŸYW^Œ=g'ÿ8Œ~×/ýJ³%øÝ2ø!ä…Œ«ÔkÔåSatMCð±±×-ðûATOpG–‚=^?në¸ÜqÊeUâ?“ëÚ7â3ùnú'~¶æb¡7 ¼š g‘”úó3tÿZº©+ý¯>èM‰¬þÎEÑg†çþ'”¥Zm¢•vœyˆü£5UáE©,OT›êýÛ¨€^7NÒ ~ õç±ìõŒ:œ•´²+Ü_C8ÃÊŽS¸Ci¯u¿êÇ{ŸVð þã˜YÃ8hœ0Šá5Úš%¨??CO²¨²Û¯1×6·Qœúæ0£ÖüSäÁÙÄÇÿsBm%"ô»3”NŠóäšèî%ý¯V¨¹éæ” ÿae1lmÔ¼ª'½÷)¶_œ%é_2CT¡3-ÊØ³ê#õ£RG‰IOÂâtHyƒÿ¨éüþl—ÙÅ|ž·'´þjš¸$–“$ W¨#rˆ–àWÑ­ÿxLÿöº(æ6Ñ6æD†)åÃN«É?.Q[“É:‹¸Ìqž*Õ.‡à?¶!ÜÃwÌ'+xJ$=;v‘7h-öâ)¨þkQû#£1?ªœRŠËãÂËU€:º<`ß*û À®f•VýÇ'|HKüÇLîƒßOóÔÚlâìfúD¼Úpê?¦b›—Áj.@¿Û$gëmƒå~»4ÏKl`ÖKT×i³ÅVjÀjá܈t3µ42ÊÃv·%þÿLe\r¹Šù)œîar51ˆI+b€udA·©¹É6_ÀHb\§þc(•Ï×`€×Ò+¾“?þÃ<ìùÎ*™™Ha—²>ÒŠUW¼›5#ÉŸS—«Kÿ±ÔÈ$=©?ǬÙ+̇ÍC÷ÞŽTqXùGF‰C±Îù‰Ég™%ÍOÔUÜ3{™s W,õטּ p;hØ!´@“Ãñ«•ÊôWYÁ¯à{äW?“žùQ±íõ©ˆ/î$ì“©v‹+LÏjHF·”˜ˆÞxÎiðçSEGìvUÙDþQ Û±ÍÒס»j¨ö’Ô 6…—±¦ £gI êÏR^ÿÔi„Qœˆ0•lJþ1@£×üvúN)=à?Òß·ç|¦Õàq¯ƒ_í6žthòª}™Þ>ØìdPÀ{<ã&æòî¯bšþÿW–S¿-øþJÄ*'ÁPüçÊ¥ènƪ\¥ÐúÀ¬›_{ÓÖ‰Úêjquõç¿6Ðòˆßà¢éÅ'õ™Wm¯H*ýÒ?ñZëùóÒb)ü¹Fwšüc¾8€ÿ(§}"«ƒ÷éŸèÌF}å¡Ê;ò«Þy xÉjlHZêÏÓÁx¬!Ó¾Šíòâ¿a"½¨-ÿÑþ|‘ïC¢Ý¥ÄZÏÉa˜ NÔŸt(©¼Nýþ%p' 8ÎpÔ{³Ùš+–—¼ ÊSné˃]¤àªO`ß³“ÏlßÙFd½_•Oo¥µp<û¨W̬mâ [“wœe&~¤È]59ž õkñtVo”ìÿ0þ£XV;êµâ(ÍÔâ\ßLüGaV”Øó)ðt&*ëªÏ‚yxÁÏy…Šö ¾c Þô¤~J Ñ¢ÒAÏ'ë¯WKM¦Ðvçþ£6wþ9;¢‹¢¦‰Ï`â]蟸Än÷¶,ý+€Åw¼¹áû|aË~5›Ñ®p[ðh³ðVþ1¯!ˆ—ßb¹·q_ a¡ö„>"ûIFýGêïú—ŒW‡ˆþXè X ‡ bOÑ \‚?ͼóRaüù #ù‡õÕz"öøxãG`0iÉ?V¡çpî"䦨˺aO×ÀbßážçUó0²Ã…i%È}Næm1s 0öaâî.²¸ôxã4FZøóòæ6Ž´ÞQ{o©kàmmð0KŒyÆL£œÿØNþþcÞn)Œ@Z)üôVy“;RÈhLÿÇö àëN«×q*~µ‡5kS‹=Ô|Wr™ùQžx’ÊôOô3çñùS•}œÈ3`aKy"{õvºÑnR®ªqdnyž3rBÆ×ërçú‘ÍÐ_˜ú‘tÔý¹Ø'€†Å±Ç5O…ÕÖàg-Só&ÇË+©?3#ô¿º¡¬Õ^¢ M=É1r"ð«SF3Ð@›¡Ù»¢¿J ÏÕŠÓ?˜\¨ãžc~íp‘\DH,ô¦è^ȤÚÃäõøÜÇlÂüó}Ì·a†©M.æbÔ7?rú´òÆ—åÅ|Çüç>·‰Ðÿ*=þã׿ú…ï4…rNÙ¢ºhí5©­ Ó_Û:S{nyíÊgÛåð¿Ove9õƒåyç“èóÄò,j_ð«RôOôÕÓ¿ÄšpýrrŸ;p§Û¢Ä©¬ÿ%þ›”ÒZZ<@~òäK£Y~™ü£’¸Ž}[‡…±PŒèwA/ñPãÈ?ÚâŸjêDQVD‡óéŒÿX/zÁ2L%ÒZŽ%¼·¬Ò$“\7 ö &¨7ÖöçóϽoòc¢(•pyå8ì´5³û|F/!«ûŸ›ë‹àX2è•XÐïï§›¶‚÷¨)9ÃQ¾CúÊ‘Rè/ûÊÖè”V`ý/¼Ã:žÂïõóéµüý:Öï$¤{,Ö ž©¹Zl¬?¹âwè¯úàÓæÈ&òþÃÒïž öɾ÷éWE3íU .PÆk­ñm‰åtÞä YÍàà;²Ú'݇®˜ï4Å‚£©ˆÿ`.;ùL1úäÄŽ77|Ùô¿: æp×FÐs1# ¢íø¢9Üÿeò_ý¯˜jCq*ì¬D¸sÕǰlñ±ü­èŸèœLTûS6ÅÊ'ÿð†QC^ÙYI%éA¾Þ`ú*±üêâ*ƒ6yaó*cŸ'€_Õ€ÿðÎ>8=õU‰OËRÍî ªt[tLº±È@[Z£B=d~f‡u©I_„–¶(±ý5ú™Oeþyaú·/ôTºã,ì)£PòlÊÇmT‡ÿXEDž‘ ¶'L»;%ÛâW‚ð Éá¤ñ…ë?†¯¿ªµŠ´ÞdøŠò*êê0±æc{ƒ_eašw31|ü)ªåÇñßáJ-ýÕz,þcöè#‹–އáÉ^OÔ—·È·.°Ë诮ҥå)s÷v©übä¢~¼·9…kú_¥fÖ>1wÓâм"ÔlRžƒ_eÃìÕïˬìð¼ô3¦‘odƒ?OÇôßOÔj¬$çŠIþ¡3‹ð³ìjN!Ž©ËÝö..6 GìvWÙ£UD3Þ‚H*•TÉ€g€OÕÀUâ©êT£¼ª?¹‹ê¸=x˜AW­F Þèèws‘óÝ'ÒúvÁ'Ñ_)xÚ‘›äÔš•a;¬úÁÇFYº–ô5›Ù;ÛÏ’¿õD¿û…®(Ö”²¦BÓSñ'èöߨ Rÿ“þW¨?ï¿›ÿaM.ÿoþIB…Ò8ôW–:jrjënqèKàè£Ã„ÿÜÌŠ¿6A”c‘Üé õŠjS(´t"…VS %§©üKûÌCžçEüéMHj¸îÝäÞZp'U¤¦ÿUúïF¡¹‚~×C\…ØŒŸ˜ŽõŽ?#góÕvÞÊâ ðý©ÿÈ&œYÕðë ÿä ¾ää vy+ÜÃ. aÍœ¶õø‘}èý KíqSü\¿ÛüêÙU,CV¬r1î`ìÎZ˜ýÔàW[Q/nÄή!–ýHeE…ŸÜÅÄèw`™û‘±ôÇ3MáóTI3xûk Ï'S:ðËáϾ 8Á2¡ÒPMÏu £Z¦8¾6ù`O¼°ÎÄq?ÞÅ0*o°õ_¹ú£¨ º€³ÍEååü Ð°âña{|âQØßQ¾a*ÐH^'ÿø?Û+´–;ºô­Ù~6=%ØKøÝÿöé.óÏŠ© QÖÄB7¼Âb"&ÁIø‚Ö­'ÿèCµÛßhmÝÐò^$æÛÁÞà—+F_Í„?Æ9(L¥~0Ø”5ÿã,ÕpŸ°ï5éŸèIlšÈXƒ~·˜1ý“ Ú¿Ÿs8y üGZ§çRP…WlOæˆÅÝAv䆵ÌM=øEy—Y-@¯6šÐâ–1À™çAýºô¥œ5Ãø0]w¾]«õëÕ…'¹‹{ß?T—xØŽNwŽQˆþ'é›Þ~Ž€^ÆU”OuŒ² ÿJ¼Û;4b‡Ñ>Ó:EZo¢(¥½Ê)«KdýÕ,cóÏ­ü#+Õnt¦MƒÿØ…þª¼y Ÿ¼‘º®á\XÏúKú¤Q¶*(-=SNð¾ÜµûTRä6û5zÂG鵕úóϲ±ù<ó5Yî±–(ÊCÌ‹ø€ÿ¡Ï7"éw“)¾ÿuýGbð«Õjš°ùQÓÃøó›¶¾j6«SüùÛ¯áWnÊ îiEt±/Ü·zQ•j'øT"™VW»¦ûÅùçùÅ\r™g¢$±S¼ÅQp–æš;ü€MXª`?1ó»â¨ÁüdSs³‰Å%ïë.LÞ¹@ì#^ÝÍ3µTcu¨ÿ(-üj¸6䤑ô\VœDþqÛW~E¡¹µ¹<Átׯ‰¢Ž3õÞl¶v䂉Q™dAÕäÆi•|ï:Š ¨>C°ôÛ±kØÓ˜z}'âûU“k|OS|Ç)Ë«‰ñ|ÞUœ ÏÜ+µŽ·l-ã)ùÓn®¿¡ØúÃþ‰©•zj.êPºcÃݰÍv˜™A°)õÙ(Iºá?ÚÀã†}¼»Ýx£VÁþ{i¾ß˜m»²Y«‹gˆ-'’YžáS EàóUY~÷õçûe Xݵd';@—Ë’?åF_ÿ6 ÿñ˜þ‰!b&Õìƒðň·á‹&1ø“à BÛÃz:§_·/,Cݰ ÚvúIÏAý¹sïæêp1„<3ÿI¼˜*­ÚR/ ýnp¢ôƒJŠ­«JýÇfê÷ìx­ÓøwüìÅ¢£pVѯhÂÕåߣ*Ý ?°…*8;õƒQ¶v âÝ‚ÿ¸FýGc« _8 ß2BfÇ_;ϯí¥*œ‚ÍD+õX­–üÌdŒ†ø/zCæû-`öÇvâÝBÆFÙ™Š•\s.Ô¶®ÆW¼Ó ™/µZ‘üÇlQÅðqž[ap© (‡GSÈg|èŸhåIá?ªÙɸÖåÌP¸Š²!XܼaNð«3¢‰ã§Æìb’`·å8a›õ®²˜;ð«zø‘ÙðÞ7èZò…úaFưZ c èÙz§?ëM¤~ð1ë=æ-8#€ãÞEVŒ©8þÇ…lk?37šú«+Lò_ÑÔœOlЂš—T’*\üGuÇ»wZY£ÕâÝo˹/&ωKúÃ`~ílv’”žíGèx5Dqœy| ÙÞLc|2} wÞÀ„²Ìû$ù"BýÇQŬ>1ZЂ úz£0h•/ýßQsµêØÛ_¡0®Èd«ûæn#1;¬eªÒšh4tb3þ#»ã¸âîÃq[A%Žã$¤Rú)©_ýÚ.R‚ëRsÑ]$­¶T)Ë*Çl=é]R‘ ÂÕpô¿†_ÅG#7 þ¼ Ó,ÚˆCª@cß@‰‡MÎEÿÝ j#õg‘säÝ—]ª·®®ûŽÉüÁÌØfW,}E&†ªÑËÎ)7”Zâ$¼ï~ž÷BìH|™ÕÄHÁôolDt>^D Eùhõ/¨ÍF¿;ï\&¶öÃâÏ¿À{`%RÊS܃»(¨zèñô2Ž3ù꿪®,"KØ/JÀs” ò ¶Ô΋¼#”Š3r…‡Äêu@á;½~:?*øÕ±0ÿ±{‹ü¨-ß_¦w´´&^/ÅÚï`í7øã0MÅjŹvúÛî²€_y”Œ¢§JVøFghÖ}}ü=bñHvý\}06ª-9Éaæ×6Òl$Cí"‘”¯!˜ßAòªd,†üd!ÓÚíúžž`C»ÈR¶¢ +æ?²ë1ÈÁ·Ùl÷me´ÓxG‰j°ê;ã=Ák:Èô¥‡)å G [Yy*ðÛÉ•âË’Z‘ïÎÎu4ÈB3ìýQ0šª ù¹ueBÔ»ÅÑ9ÕÂä€?¯"³4¬a}˜•)x(ú(ŠÞ"›Ó[XPM îÚ œ±ÁÔ9N‚«Òå¿î_’\g‹š ÿ!µEŠÅN\ÿ(N¥FQu5Š'é¢R*óÐ_ÕÃ`™kTSóP1ÿ#H¥ùhÕšjEÇ®£³pNÔ”•™ETíHL}¸.(õ´„ à ˜ÿQCô ¿Ã°£^÷ŒrF©,£-]‰¯˜‹ýÓé0” Äj5ÙÃI|J°¦. bUÄͨ—ˆô»­É?¶°»«0ËáãC‰ôûƒÃßÅöl×¼H>s$¯3™Xø ›HKDøÂKiBÄ~H”&Ï&Ço§ãëöäWˆ~1ßG5Rö|,8ž÷Oõ»éµ¿ð5ˆÞy‹Éæ`¡·³³YXæjØÑÅðÛÙñ[¼Þr®¿!¼R‚<™¤Ššÿõ'w+kØÏWxgæç-”>¬ëÏŠŠ¼D†tŸÈn$Jè®`m—PLD…ÎVækmñYñäP¾7˜ïh…EìG‡ ÿx® ñA. Ö³/¿^JP 㮿ˆ"ÿxaËÿ1•»Ö›ü£€Õ-Ÿ?Šøw–Ê¿Sð]a¸ƒ`A2rg-¾e/™—$rÏMÿçÓ½\í%Æ‚8cðÏéŸx$ ¿ª€ÿXhdÂR¹ °‹¹¨öó¤:±ÌHù¨ÛþùþÜMµƒÎùQ 1^ã¬Ü ›žÒ8ÿÑί«ÐŒ‚kiLN²–̰0ùÂIêAfÝT…ÿˆ\>þ£9wå•^«[‰{ܲ•AõíçÅÁü·õñ•»J0ók¬T ±æQòò0ÝêÒ_Î?Le¶6[TÂ$cÒÊ!õ©ê¢¶¡ÿUQN뤽V[©å»þ¶ûÿô«‡˜CK³>`¬8NBS-+oVM‘z­žbƒj?›íŒrþ‰–"t-oôzÎÕÿ*5UŽAäÇAgê7wý¨'®ÿ§-ýûϺi´u`åXQlé *Ž`UuÞR‹ÿpC¬G‡›æ0_EYÇþÑ¿+ÝPIÕ‰Hr’yç'¶á{6b•SÊMìú¾Ä¯—€"uÖºÿä.æÐÉŒ¼A¼·c5 òæDÞåá?þDÝèŽBì¶û«>æí\£×ÁJò¬™„ü£ ùÇòw”\ïE ò0 ÅôOlÅÿ›Ã\bÅ;dS‰ÆV’ã½bþ`TøÕbe,ú«#Ü¡©aüù žo]žïWr!K¿ýÕ~²òò8k†ÀWÕ$rp'÷²9"¿ð»xýÕJüÇ}(ZfP‹u¬À•.À£Œ€íýˆûŠ]\ŠmÎ-¯à=‚øÏ•ø†êÜél¢ÚM !/ŠÚ‚»×"ú)pÓ/˜;»Œh©‘„Þ_¾ædP¸¿Ðå&e¯iäú°õq<ÜUäïÁ¯®…^•)õ„øÕ*Æ1|d[øóÛè¹^ç_4íö„0,gÉ2ÝÁ¯žÐËk96ýzÄ QÎñîÝQ¶i¥±]xß=¤‰f¼ÂƒÏFqe'ÿè®vŽf(ÛßLMƾe•u4×ïð«Ij?1ˆü£ (Ò 2š¯ä2—àc¿ÈútP\KUr(ó£®ÉžøÜI8ìëXòä`9ÛD]‘ÎéR9ÊÞ»‘uÐEå‚<„-:N¯ÃÔXøWÔ2´¥Kß ó! ã^Ô%²Gú•ÃBÄ€±.ÆwžvêŸ8@M_´“ÚÍF0ØžäI©\hÔ£þc–/. Ò—f%CAC5œíw¬ù.ü‡Æ=µzч:!Ÿ‹Ê­0üª,YÔ[ýš<~5ÁX žÙ¾ýî'jìÖÒ¿d=9®ã•÷¡­^‡“ zÿáí8,yå4w¾w9/üß.½5ýwïS%éFg‘/aý¯’À*Ÿ4½é_òžI®Ìuàz3ñò©ñIäê?ÂëϨÿÐñ¯ñËTðŠ»aŽÒ¿Ä—=ûD®púó8øËð 5ÐÏ™m «’[úëeÅ2QËñî½QökAÚ/åGuJk|ÄÌcâG2tf+™Kbå6sÍ[tÊí¿’ÿ2Ú(M–ž¹U©—}L¦þí‚O)ƒµ1øþäÛ¨|ŸÜý§ýw«kÁ½ð7Á®2±¿6¨Ë küK6@#º¿´lÁo³ª¼û‰ã?D@Óâ?ªÕÍS+ïJÖö|”5?ª/ü€?þCÊ¿ñW/ñò³È@¶ãMï‹&šswtë¹Ïá¤ÏoŽ¥ {Ý7³'Tbé«i„Bl>þüùLèZQð7Or‚Ž77üüܳeÒ‚xÂO÷DkÿщŒÐƒLkhýpPk°£­x"ò$8ãEr©|¨¤;j1£È?Z“S¶¹HNЊú?PHx¢`ªƒ‚7Ш‰Ò3+}Ñ[¬–ý‰ÿ{  D‹Ô€X¼²HítºKªqˆVºP½Œ™´gà?²â™rÑÇûýK:ÁߥŸm+êJ¬ú2¬w{ºÅQný”²-ÒŠÝÕXxÝ}¨ÕÚâkÂ;¥ Np¡QS–¦~pVk]¡<éÓ7¿²…+ÈJ&•œþ#‡ðCÀ¯šGZ/@äë겓Š!ÔŸ?“[éTòÙÏt£üy êÏïƒçH8–ZTkøÃþ·ƒyy†ÿ(n4’WEÇÃH¦,Q® T®Aþ‘\bÞVç.?]ÍóÉ;bÐÑ7f`3ùGüÈfrÍAddyáú3Èsz‡õƒKéß®]Òê—`ƒLüV>ºùƵûÐ?ñ1ýZâ?nòµª¸Kô®*ÀŸîã · N*MüQPLŒ ¿zrš³Ö’·?—|'BôNè«*™³È;t2q¦ØoæBð¶³t‹\I½½Íþ'úÝôÔt‚ÏìÊ•UwœÂ³àW­E!Þoؼä…¨6oh7’Ó÷>>ªÝtöä…í-Ñ ¸ÚÏÁ倿ùʉø(Æ“¡K'F;îà?÷á‘­d½þg›·’#Ò¹ˆþN>ÚN’”bºS^-$¬þcókÀ WP7+qç ÿ?¯üÖÖþ¼&¶87Õ~gTCsW}”ZYÔœ­´›teŒ¬ÿøÏ«Ùl¥EþÝ$²?Œ&„>™þ퉱<¾è»šˆ bO4û'žP‚”6â&}vø8¼Brú—e[ Þq‹Ø¬ÿý +_O„+£¼?/m vJôÁ/ÂbZ|ÂU´žqˆP*`ÃÒ5Õã”ø§—×k;b ­WM¦ÇÖwŠìt»ªÂÉÏG¿cúžQµq–«=mI¦°’ ÚQNS¾_5³¶ÆzðŠ§°èqðq¿ã%r`éfÉ–x¨ÅØú]x§çØíËxÏq"DIÿƒ_ɧzre#ðà9Á¯Ì×Xó?:S¹± ÿ¡€]?:‰ížNŒÿîp~Úëï7f¦ ÔjòçYåXžèžFS2¿¶xóxr0ù}ú—lÃxÉm<•}ä ¨íõä«àxs×=dsÑÈ? •Áðç)±[a·èaŒ=@-w|,íð«XRwy/,7 ÕÓp—'Qÿq.|©°OÝÕ6øZøŸsÔȵ@4ˆ{ߘúoêÏW2¿ÖÀJ”ÝŒZøÎݾi ÿ’›DgáœÃéj rñzä;ËP,Ý!+Í‹'+j¤» FÒËÜü_Õþ|¬OvyŸL%…q–þWõíÊHO¥µúY4â®PÇêSG¾Ô]¨‹/Ӱܶ³zº¦ðýQMÕ%' fRybêÏŸà ¯k~‘Ö[~·2 õaNí_<+rYVc8óH*Ø—aí㘠í·È_æ2­ä XXº„õÜχ¨êÊ¢«ãfVQÿQÿqyœL¹=­‡àB¹¨ª{døÃ—›tÔºH‡©Íôj„?Y‚NayE^òÂäA“#Lاìƒÿ((-åHlã¾ÐPºÕ çdL*»çR×~¥À4¼©íÙéß~˜þWYÈuÖðf7&ç*þÂS, ïuÒðçÈâ©%“]±àxôbœ•˜¼r,þã^m•~×±ó{ÌTmŒ0Êâ ]e7lECy"ÂüZKÕÅäÄD{ûŒføútiOkfg6‰ÝÚ÷SÙ½ØgT]ùÍÂF'3Yûg"Ï× ç©eáÿIýùßè¯Âó¡x+¿6—ÉñÐmzXÿvWê3j;ÃòÕôo/¨–Rsªû%zÕÝßÖ{eCýG¸„ìúLq[§UR½”3ZQø–Ú-üǯñç•D ñ© †u6x´H §ÿUò–¢¼ðˆ½ßÅßöù××\gSò#DÇ͈Åÿ‰v§F£ØLŒk¡<~x)?á"‹‘¿5ʯZkcµ…¢'*Ö%ظ…Dã/aÉ;znjØò¶z¡›õõ)¤‡k£\Šß¬¨4ñÛÉ4³ÌdÖü7ôÉ;^‚‡`‘Ÿó_WÞ¤X£?åÏsjDïÍ`»ÏÀŽ¿ù¼‘wq5ŒrG0¥ìû vè5ë¾â§Œ;ØÁ9±RAmÂ>¦S›‡ŸŸ’ì{^é¹¾[#Ú_óð•·ÖZéJ´yÜáhÏ|µ÷Q\nò¶äF9ñ’õð#[9+uð!ïá£zê.âžm+ÊO¹O?­ïЧá;ìøšzÉ(üÇi[.²ÀxïedyPë¬#ÓZ §k²ƒ½?hÐt§©ð —‰NeÅZÓÜTç'=ÿÑ “–,á!–’¾Zܧôo¯‡ÿ˜N iÇö÷¦ïZ~BLô»çQ85F2K©ËwúÝ„êWØÀÖè‘f£É}%·‚O&ŠNI.rÕèIÿ«ýf2ûìvGj wá݈í-mì1Y‚|x7êȈ7±•jýìÇï¶‚Á®?›në[|²¼±žþW®öUD½M™?ø—ÑÑ8Œ ¬s*t?!h†à?zDZo 󣚙!oözW¤|oòQ†'¾('óϙώ¶x‡QÛ¼‡ZjÏf3¬Åk2žJò¾èîØ^Ae”r›ó[Ðÿ±ŠxÝ üª3ýÁWÌŸŽ…/¹†×\Šþª*W? 5ÁD0±Œ(Ž‹c爿ëÍRBÔ·œÙ»¬ôZ&"Vù#W°w&ÿxNoõXþ½ø¨BÃú_õ0÷poÚóÜ Ëcz9±YÔpøS诊òÆ·™q“ŽýIªP7²Š©ì_˜GUEW-Ø;0àÝɓҀŠýitÆRä†é³æÒ9Ná¥¥Ö üj–ƒu}¯QœZF0O|ºtõ7 0ðo³3rÇÁŸŸ3âÐQ«¥™šþíïÅXþ ÔéŸö?éß~þ#¼_Ql¥åÝÿÊ\g—šìÀ®í Ó_gþ §ZŽWÓ?ñ´ãyF烋2G[~U… yâúÝ<êHåVžþí]´Ûð*¿V?ØH,ÁØÃ4'ÕéˆrQLRªj©a–}È?æ®~CF½Ï«èÌšŠø¡Ø¢M õ©e?8G‹°|ùôV诊‹è bµÅÚa1½íjâÝÅDûáÏ“- Sù_Å|ÅŒ†-Ÿ¡õÞl¶ÞJª‰’ ¼å<òb°]Ƀ_m ÏkÅÞgSå­u‰d¾_5—¶ Û\žÂêŸ(±éÞØÁb¼ÿs°öt§w;νPå2”µô= Ž Çˆ¼^攃í˜Ë3ÍÿˆAþ1mC ÜŒm-(û'p²'T%ìåš?¾Nÿ’ªÚÈ …}5A™ªùàk¬NU PìźVåy ¬Wݺؒø#\õ!˜›*ì¿$ŠŒ<Ž77|Ù›¶ìÚqð+ƒúÀ¨,Sqe¾xó‚èy;`ý©j@?©ÛôŸÊæ?ΰ·Køøl²§–æ»ÞsÔ΢;y^5¾ã5è‰ÿ¸ˆzJ3ªPw¾Ú(IŸ¤Âä}aC6ÊføÍÆøutñ‘GD7á¬AÈ£ÚèBÒž(kÁÀnƒÅ”ýÉ~uV^4|‰Qwc³à3Úã?Öƒ°•¥ý ÜôiêKŸEzÒ½T++¡úÓZ¿ºð/)°öÓ’ä‹À¯2Sóg§¢B÷Ä–ðຶȔÔ<î‘7‰“/jÞ‘Öóe°÷V²rèœãñ“7¢êmÌ¿*nŸÿˆ˰žüe ¡nÈ©äQÈåNSQYÎçt„z¿‚Ê|å§¿Yž;–Ö_oBår‚ŒfG¸ãø…8fˆ ¼5{ˆù—ã?ZÉ `n¯ñ‡°ã׈ǗƒÛƒUF½»¸JYµLût2¤Ìd3 ¹®ža×j9ŸÚdÃ:}âß`üÊl0¶ë̯m©E5‘ª' Y/tÃÙä"é+ø·:aö?¡¹þF Õ>>´åß­(1­Þ–åðXUù‘(üÇ[ô»Ps§²%øÕâ%X±y°ßͰﱴ_À¢Ž¢D²òã\ñ9ô •ädíûþ»“T?N\3”gÁ¥:â‡sMÁ¯jP?¸ªQ]qTúÑ¿d—lÈüòØûõô¶#wQ?èÜ"¾ª³ó6¬·Q¢æ!ÒÏ ^:L¿{,£ j¤Oæ 2ŽÎpê˰½…XÏ„g½ K’q;ן·Rq®6‘[6 «R6‘ÑŠÜ ±t¿ `"ßVô>­Œ'x¸öØäꨚ‚™w˜’z÷Ä7wNÎzñžú >²"üyp©t¿jLÏ/f?ÛýÅp!ÿˆ÷S×¼LUÍRîŠ5?*µQÆh)ßF໓)½•½œÖªìª,|Ø"¬tE&1¡Ç-ñðç½AÿòŸw57E@Š|Í2â™pèyŒ­èÀ€Y tÂeÊqüG%0º…ºi¨°V'e%có±:¿\0‚A›Ö%ä°§A1u¯º›<'Ò©JÎõùk%ú—¸;Þ½#è¯J‘ÍZýÃêÐqšNG{uxò%°ï¹î`‰…øê=Ý]™Ó¾FÚí[ÊDš™P›»Q³yÜüÛ·(é¿ëŽåhͪéõ FSæ×V2v¢²p¥ª± lTüyqúïN0Ùh³“˼óõG"”l­òÿ¤þã’-·’Äñ¾ÇRZüP}ùíjôëÛUe±ZNóÓÒ1ÿÜòÁ¶jSª?ʨ+”7¶è©c¿­þÑö‡æ/JLXj©j\-Ú]y«ýÿÑQ»¬6ùEþ¼ŠX@^ð–8>ÿ—xGþá­åÙo#ÊÁT  Ô訥l¶‹è¯êŠGXd«ÿ•Õ=üG½‡ØK”•H½«þA¥|Iá\ðíê"þÚýî!1Ó|ìÕt¬ßaª-b{¹ÉMz:~mÎüA«UÒhäuáÏSéÁ¢±UâàDåaß;°Û×hEŽ‚4i¬ï¢³’<ºãOõ»´õpí±{ØUvá…'ÉCåðô—yðOñ¡'á±ïòïZ}„Ø®Äsœ§ˆ×i³¹*µÕzz\²"+ÿ˜O£q-ÑZ’ÛG_£ú™>"G:C&¶]ßÖ¯‹ºQÎ?Ÿ­,Ñš‘©äÅÔF eUsz’3¼„ý] )Bb™» -ÚŒ•ÜÈ­Mf-öŸËñæ†ïï¼­4*¸Å<Ë% Unİ›¹KK@á''w!3x£w£Fâö;~Œ;øõk!YJ"ÿpÎ4窃ÉfZè¿“U¼ÀÓ~$/=ƒî UÞ9ŒV÷X£,¶¸=ÿ_‹ÿ0á~à•Ó¾òøU§{˜KÍÆÞ›ÒIp-à(érbÏÝà³ïÊ×ä]Í`P˜Oä~ðç+±½Å©E´áKBdEÎÀ!åX¤»ª ±[Éý¼Ñ´$ÿH ~µÒÈNÿüGZøZÅÞȸB¬½aMØ-VÝíJ½âgüØ-Í+ÒzkDòSœ’RÜ¿äüìƒôÿëeL—“ ;ëaYMú·Ç¥+o+øä]øÊø&ƒ£@«Jý`xÿÄ<Ì?ÖK²ÞsþÂS ›3so„™Þ¬m¼6¦Óä%sþ›=ÂúXùǪlfRqŸ‰ü(ùG·ùÇ:嚪²ÚY4W¥wë(ßøææ|ã ÛßbëOƒå0OÐ-Fi-Ï·û,KüQ]Ì ¿Iÿ«D‰u9÷ävDþaпd“>…é¯Z ¿*OÝàmøóvf õˆ/ÌvFSð«Dh¦Jë@¥K9Nᥠýws ®ëƒÆ#©¾ÅÁyøóý̶ÊKþÑÁÌŽþj ýzÐ/ø%>.ž™¦§}+fƒÊ‡b+R‹áÇùûDÝ­^«“ùΣ£»•WXÖíjiú·ç×Ö…ñç;l-Õ°ÕÕôøJCóãµÙ†jóA|›“ííïÐQ½ñ^¢–ÖF»¤úªõ"߯ô¯?)CvЙü£#qª/õ±õ̯MÉéCþQYÌÕ§?[$ìÏOÓ'²–x›²‹•V`˜ùIœßrñp7ДîÔ/%¥ ìe4Vì‰þj¥èEÌí²³ÛIoêÒNc»6][ý5ÞõÑpÎ 1Ю¡tÇ:Ù@ÀJÃTçGéôA€ƒ ¹IY~d¸JÖÙS£uþÉ], ~õ?9”we2J?ÉZÖG¯¥Z«3&k@@¶rL¢ÒsXéñbs>-ò.3п½9üýT”W¹ñ1ðÁ±îè;éÔõ»nM¹ûŠšë÷`7ÙÇîîmj';iáJá+vU&k-Á¨3ˉœ’Çx5¿°üã?a°žP\ÑbR Ðnx Œå?r-Ô!üÍ _í˜-•¶]Lå:F?gÇ¡‚›Ë3˜ »s­»±ð=ÀZ^‚}ä@suÞë*g)*é1Z*Õ9»ž¥Sðž0ïèÜûšØò±ùG”Dy©³¨Œÿ(ˆ-Dô½~ä£^Û¿ü¥ D è¬ßM­ ®Î Ë?Œ…±*ÆŽÒ?1-/¡¿ò¢ûn"û#¶Þø” ¨ S­ò{zÅjC=ˆ® áWk³ Tv·¿ß€ ©ùO*¦u¬0ŠÈlÔ.´fÍ‚a7^?xã‡+£8nÍ;üˆåžÿ±I”BIp ïï ÚŸ¹5×@òáXÃ5ffòýwããɽ˜¿ ÿÑ'¬{"îCeyOtvl/üùÎX#yL¦ßŠ.Àç˜øäÆdŽ}TþÕ£~0;߇›ÔÒµ¢Cº?ë-À£–E•tïÏýK6+kÕ¯àW7ˆI#.¹r0ʵùðEÍiä3Aô;œOÇõ¤öÄt9JíFa£µÀYh?SŒ“PU,Œ ¿ºIoŒ\¼YõA H…z¦®t=©ÿ˜B—–DÔ䀛)dþEÍäeV*ÀüÁ=æ Û¸+˜S)ð¸Cä4ß.x«ÒDk/r¢WoϪiõÃdlOàÏCP:'¢Š³ýûÚW’´g¿ÏÑ XüGw3]tpÙâ§!±˜òmÁð×{¶Tú—H¥ƒ’5Ò9‹þVb(”jQÍ[KÁl™\¬‚ÿðdþ`1ÕŸþ»¿ÆÄB½HÔâmw‡ » ~•Pí¯ÄeÖS~­«v…þ%Å~iŸU±îíè¿Ñ ´º>[„Š¡J -Cyº—x‰éÑÖïžUã?Ž£\Uß‚¥s‘…a„»‰MX©›Äú ‰\ûSÕ^WÜ‹Æíë†_ ƒ÷]AN`áA×Éd]ä Þ 5üÊ9}'ZÀ`'×Ã{€þhážJ_²„äÙˆÇrVé×%܃gsõØ„u¶¼M¬—MoñSýn9žø¿ð"ýP#öÜÇ[½R+øóÍìw=±ø;b ³Ø£¾bÝû·§SÚQÿñÏU½ÒÉú’Á}$óh' "µóî?#§ Ög¢žá6üùó(.w¼²X£ÿ(oÎlögõ/iMDØ™ˆÚ$Æ‹!¾0pÌt-¹ž{=<}9b»ßÀî\onø²Wmy´`òÄ\— ÝŒðç~( ÊiønààŸéô¡ï„ ÈÂS ¶r#ôÕäPrcçüc¦:]ޝ^„æ!yÕ[4‡tú\_å¢ÿUIfy—»èCÿ«˜çèÄÞ€êäA‹tü*Sþ×ÓªÈÆ[¡÷Ù@áî’;øUNæG]“Ïa:3¿û“ùÿÔŒh%Ú‰"ä36æƒì•‰!(û#½/T »]ÍýkN5]òôàWKÈj0Ÿ)‹µ䤜qNçͨp¬‹Ï<Äî=u|¨µ´ÞRQ½Ô>+»§þ<6žv‹±ØšhH¬ÂöõX~•z’@fžP‘}œLk'zÛm(Ä’RGÙX~އ‘O™¢ìCý?©‚³ž&‹ÊŽØí®²A+Ê[ÙƯ¤ŒÇ5÷ÇG60ÿ$J†âv7½åŸR>€nЧ±óÛéVe·7JmXú]½-¾¬ŠãþMÿÝž¼±C¹¯ÅÈNöÒ >ˆú“ô†Ì`¾£KdFûPüyF{ s^ø¦¡˜y¹ïy_ ”ÿªAË";®øŸûjˡ߄€ÿp‹t.¢¿U E¿›‹î"YðVÿ’L9ó¦ïº§º^±+ήÿóÊqè°Txa‹‚_RcÑã´’N!#?áªÚüñ«b!öà“h‰…®ƒJèµø“úÁl 39EòIb±zè?oéßzþ£œ¸Î»Äî–ž1© œ¨§Xç çFµïïÔć•ÿÑY›DåZ¢ðÄ»V?©ûD"Vß’BrïItW/ñ¤]‰ÚÞ¿¤…Ò‹êŠ“ØšÏ ãð%èÞÛ¦ô ̦ե֚ÂVLi ¯îOëËjK,ƒµ_†•˜wÙ‡OùA¯G ŸÉçÿ¸zÿ?ͧwó"èÁ#ßÐäJµ~r6ÏÔ¯âàÏñÕ}…ì‚w¤£…CuHleq¼›Ç¨ ûœJÿö&x¯Dr ß{ïhžÁvÔ„-^i ˆ›;³æqµ ´Ñ•áÏ‹£(ˆjþà-[nê?†¡èÃlŠ({èªE†ðü*%õéçˆN’Éŧ3{g-½z$ò¥ÚÕþb諵~@Þ…áWñ@ ™a±Î¨Š6§"ܶÕMqìB<¢÷{DÐÙ±à[©?wÖ@§Rc´àÎoÀúÝ?Ë ž”|ê’|cü‰ÿð§Ÿà)*»’“XóÏs¡üº ã( r_5GÜb75&§w/wÆ<¦ 9El¬ý#+x!Lp,ûRð«|ôKìIýùZüGF®<&úÛ}xÒúe'ÿ±^ã ^ñª‚kÆfAé†Mõ4ÊØÂvß4™‹È?VríÈñ¸+Û©­Œod6¼ñíÛË£ WBQ&ÔÀÊçüÏç™T§’»]¯J‚ýÿÁ4s]ëŒdLñ¡ò~ž,FÏLÞb°c½ÌÿxÃJw¹Þ·2Hñ XýàUnèw“<±;†>6ú݇ô1‰iÌ3¹7ÀöJËåĘÓE6‡ÿ¸Íü¨ê  =ˆÄ*˧b õƒ`)†Pó‘ d‰™ÂòAä·àÀýè {C~¦I>=‘G'"âVàeþ#DiÈüêøNø²àWÅì×É´±77Vòåiô¡@{?øó[ bs}L;µˆO@â=¥”)"(–—þþá6ŠÏðXÇdþ`žHç,úxm»®Lfþ`-ý¯,þc›­2³ ÐÃd1õçW£¿ó‘­;üyyÛOb”8¢&Ñ ¨¾Ê}­”Ȥµ&ÿ¨¦þöKûL.æÞBÑ5›:BÄÒÇ*•Ñ_ÕÑÓaéKŠ1b­´‰©¼Êy%«ØF.¼ û°kšCVÆJ·Ç¬Õh¯Ð’ó+E[ñ,×ÜL›¯-ǯÝ#â^ ¿p T½/*¢»¨=×W„°Ç¢0ÿwÕÃ5„?Z¸¤Ònz/jŽ˜Ôá.Ưå¤ûIo"éóø£C¼Aïø)u°Œ±áíTü߯G› .ÕF·¦¯§’d×¶´u(wg"ļ–jó6ü|þ£ƒðÿ!ÿ‘Z©¨ÃâOeWnì 5ë Ý~VÿQ/Ò’ú«x¾Ïx¤¿ø©ÃÈNö‰æQêwÛâ?âu¥œD–zÿåìÿˆ#»Ó¿äøÕ~j7ª£B¸ Ò°„?dz) §p¼¹á×b‹…~w6˜Åp¼…1ìFÐèQ N3¸Î¡ØêStH5à&¦Û¦ƒ?·¦eùãëÒI-÷wý¯Ôöb­<øÕ],ê[bË#`; êÌ|ÚA÷¢³tn?.Û ÂÚ ÿ‘öùZ¯x«E¢pîbšPuoìmiè¨b|LfJGôW‰ò…шˆÅtº¸·ò3¬´y©4¸Š²*ÜE2ÎiˆÓüÚ^ðM¹Ë¡è¾vc©ßè©®èwcÓÍpú«dh¦âÚ=Ð+à÷7rGrʹ2–aðÙ¯ÎkÃ#½;E9˜¦÷dÕÑ©Åa{P™Í4ºÈîXíôá¸ò²”Úø%FüGü`°8¦·K7£¶¼Ao[Rª\Àü?âμŠkkÃgÏìÙ3wmà.A‹www‚;Å¥¸kÑàîî!Å÷ànÅõ'÷r"„›pŸçïmŸ6A²Ïž™=K¾ï[k•‚?/¤ö˱dE»QLi(aÿ¢¾¢è_6ï6ä‰`Z0QÄ¿Ïl/ó¾ÿ1FG¸î:qJ{Šâ.LiFç xÌ”ÞÙÖklü4R‡™÷´ü* óš7É“¢â]6p¦ëãáŠ(_üGHþüX — mr›þ|‘1þ£üyóX  ˜€žŠj«x=»¯ûSuÎjoÖÀ$ þ# ÷è€QÌu ˆô/) JІ7#5õYœ­t¦¹QZüG:'t΢ äø‹ôèr³’˜M¬(Êîß>” çˆc2üOð«3Žl!øóØ¢ÇÕû®ÇñƒoÞ;žŠ%š§ÞVÏ¥Ï êß¾ÁÑÚÁ ØúeÂøIÿñÚ1…®´•á<SÓ¼NK çÔZ1ÿÃKFÿ8 /_"ÔùýÁ¦\¿]\®Ä¾<‘Éòe £ ùGJÖOK¥Ÿ—\Fÿ«Èõß½$î‹Bò4Þcº–±|M¡2à?¼áÏç‘”‡kƒÂ+>þ#¼¸Ùµ¥ÓC_¨¯–MÉ–}ø—i”ĵí¸hHÒcÃ’c·j/d9¢“dFyW v•o¿Î$ºPÁzœëÓxãû`§Ó¡þí gqÆu?ï÷ 0·FØúy¼÷/‰¦OeGu°ó»É?~¨>(?øÕ`P{{Bâìâ2Peànr!½Î¾í&ôׄ"– ´j" ;lJbƒøÜGÆaPáŠÆI±wèšÞáQŽr/[ð‰—Œó²¶þ)ôBA¿ÆüÁAø¶8àWU@’ƒ&VÄbǧ†½ñA?¯'jK–´¯¾¯U ¦Ñÿ‘Óõæ/{üjŒ…À†—KȽ÷f§yñÍ@dü:¦ÛDëž0 WðÇ›ˆ!t´FÕô ßõo_£u„?¯‰<@ŒÝ\='û=†š×Aýyz@‡-@íF "ê|BTx?>9¦Ù’þW]ä¯aîaLͯ߼ýOêï¨MômÙCC28øAó?–ѳʮÆF´euNå«è…ת„p½ÛÂðç½5{*ÌrÝZðŰüQé,¿ÝLD¿4çê?b8ËQ?ØïV®97Š»ää[°Ã]‹aømÔÖQgðã9ð¿ f.•‚3ÍÁð1Å蟘‘ZìGÖ.zÖO5X§Ð^]X‚_~GW”ÂôO îW•+tåU3îZa0±™Æ@U…I°­é¢U†~‡³ÑÇÞ¡6b7øÕrbñ ÌC¿ÊzcñÉÍ9øþ»Æ,ÙÍõpw‹ÓÚò¢7œÐW*:ð úÁ¤þ£ùÇKó Üù|ø£XθÖó.~E™“­y„ÈØînk„Ò p)¶†xä±pq<ÕPùUï)þÜ[_rÒ ÿ±™œ`<+œ„ƒO ãšýUZb)w©ÌéÊdDÜ?1³èÉßóƒ‹Áo÷O,ÈUwÃÖ‚åŸ5Nñû°´{°¨åžaT˜ß߀OÚ4lLgöÀ®t²†æì3?oê0TIùÕ:<Ça<Þ}ü‡]³ÑIΉðdb‹ÔZ:x˜E0/øühøáðOŒ#DR¨lózÜàûôÁgÍÄ?üýƽð5@ £ÁÇ7åêNqç+²G ¢4Óð d°–nä+Éï—“wÖ Mvðåß\onð²é¿»Wú°»AüL&âÄÃø±XØÃ^pàè¯^a»¡.ÊJ–d«yÖá Ó¨ô/ ›]ïÖÈ™d ©U Ò¶5¯W@;AóÏç3ã<ß]£I ¬s¼¶tQ[å#[Ȱ,dj-Ï«51Àbô¶wÕ˜—#h¥ÒÁ¿DãÓˆ*ç(N»Ý›¾Z+¸ê,ôÓº„Vkúÿzv2øjŽQZð«Md»5Áæš mMNµø33Œ‹¨ 3@à£:ÛÃL×ÚB-ѯ D ƒzû~D…ò, s¶Q–æ*Ï`KËS¿Ïö17ÁÈ÷WC˜æ½Ûò`–R2çüÑ*,ß1r”¹ ‹;¹ŸÐÒ6SCðç©Å`q¥*8Tu‘“0{NBÐÿêš9¿AA4N#¬ùftæ×¶´&¢ç„N…¿, ®£ìäºÜCÌ2A×®EÝVi8©ÊlH]xb4SKÍÏàW_è}øú¦œÖaú'ž±¼ÌiÖ5NvKîM1üGyXæpÅnç™ÿQšššÆè2²Â,6&T%kr%Qaµ$›© ˜œYƒ©ÿ3©?fà­Î z¡õoÀ)¯í:…§D[úïfå„t&Íhøšä-é…«|E}KRçhçüÇ,~÷ÿWjP«XR5%6œŒu8Ç[ãÒ÷ù‡æ:YRtþa÷"×ãøÁ71¨p]¯¥a:Gj}{þj3ýheéÀë‡WºñƒŸ ÿ·ß;æêãe4‹9ÉEýáÏkh}Ľ¢ÌŠÂë,~©´k×á¯úwóË Ø—/èwO ’Qê"‹žˆ3PŠùµ åxrœ°6 ô ß~u]ì%á?öã-J=ï€sõ„—­,—a¥nSä¥^¢‹´Ð_E&ÿè®@)ÐË0Áñ×cMoÉô"º¼‰½ßB\ñŒ=>Ç“þí‹Øx jGÐï&WÎ¥|ÀkŠuÀ_\'2<Ç®?b÷b96°Iø·xÞqð'ãÁ›ÆÁáne¥ªñcQ5‹·ìk¿…98O<6N®ù¡þJ%µ¼`Sc¸’¬ðñˆžb£;U ò«S`b:vû>à oåXºTJoýÁ·›âë01L·uÉÉÕtî÷y÷†XXoÖwWsñnø½Ø©JÊ/ãG[þ?'Þ8‰ëÍ ^nŸ#µ¾KޱwG^•Ž|`'ëѹýî(*ÓžP™2€þ%7ñYÈ?.ò‰§ùô¯dŸÝ˜¼TÐwS˜?8Ž55x×A0©ÄìÇÁ¯$Ó³2Ùµ°u‘xßWÕ£}÷2ŠÛCÔ–$Wñ‘­¿Ó_ÅÒb’4Þ®âïÝÙô€?ÏL®qŠþ% ‰~·Pï÷Y=eÞFNòjª }Iî©÷(åRs] 3°žf«ùrÚêby²¿äæïð™°Ô P#Ť_x,gó¥ZŽ w-Ö7+W’Ô4Ìíê J K†®¿š#‹£×°«j½`Æ,³;ô/¡ƒ»š`z9wX9Av¾X‹éµ•ŽPçÔ4ÑuYq?þ##õÏCÔºÑü8|EUòˆhqçU æGM€[è€*xˆ=.‚_¢—G}ºOG7ž,19›¨æÖ9¸Êq\{‡Þà61ß[•Äó˜ª BeÐd¾yüê5šÝ+ùÇ)ó¼|s¼åGÔá‡Ë f¥åN™Íå?ˆ=z1PŒ&¼û^Êx¨‡iQ‹8ÿ“9‹w¨¿je~íg”ÕèsC½¶ú›¹y«ÝUk"º¼Ü© ®Sx„þ%eÞðh< {ÌâÎ÷túºz•†¸`:ÙàLê?j/•7³:ï£%ÈÈüDz6ÃŒ‚È3 ÕyåÂ0gðŸøå9G‘Äe‰ß9ºü×ø•~b6üy;=ƒ¾QTcÍ诪¦þüÓOÎÿxNÿ’?¤KVc•|¨E§GD ¨—–%Ñ_ÑÚi…]»ŽÌ}J%W5½Áœ% Êß©TØ”êô/©ˆ¾b—v#2 9î0g± ¼€½ÚJ5Ú&ÞÁ„* vºœ\N¼| ÛïE:VÚ½ó{a?¤‡>ŒJûô]EL>~ €ŸBâÊ«$FEc4HTY׻ʷ_g]™µW2ww~&Zâ°'ðsw©”8ƒÿø‚—ª‹ÅžºÔIïÁ]´ôùdF-¹wø µm-¸÷œäõ#á?™ïÉ~}¹§ïPÒžÅ'M¿úQþMxj™A¦‚°¥âz¢Rý4œk~Žÿhƒå߈ÿ0`»/¡ß=GÔ9Ž÷ó2ZäúáÖ Cõß¹Ž,x‹^dm¾`‘•ñµŸè_ÒßÈ ßŸï¿ª@¬~”q6O+ Ï©¡‘Ýõæ~»kT…:Òêûäb<×D¬yúìå›Â›î£úðïqõÄè:Ää&•žüäJ;üG\˜.zìïzÿOÒÆË)Xü‚d w©±xGtéÿøL%\:æüÙýÌó`‹›™¥`º¢;+‰ošMF35ÿ‘>ÌsI¢%æÜ6ÕYÿŸ˜ÝTÖ8©®bKÚ0uâ(Îcô²¿/”åG¥ÿ±ÅQòßP+öDÕš»òüÊvü½‘¶{…YDy™«ˆÆc:׃_U4ÿVcÍîÜÇêðñ{诙»É :wÃ̯#ËrÎßæ§ 4*{¼Mÿñ‰æ0úïsCMÝuæ]-cZû%ªü·áU7Óì9C1õ „^ÊCôÛ8ýÅÕ ð:»+PÕîHXó"LuNoô÷ €Û@ŒæðûMìé½Xú©ttÉLî•E=¥«‡ëá®»5YÉ0Øg*6HGy £Ñ(¤ÈKÓÆ|Žuü/#³™ö¡Ä*Çrи€ßòÃ/äÝÞ$ºÞ½³â ú« <ÝàkñˆM†Ó·]‹+’}üBýy)•\Ö ø¨Íü-?ïc£~01Üœ'§ê<=Q¾mðŒh£–ɈòšâésÔ 2ÿ£:³ /™ÉÈŠ&2ù·¿sßõ±™Oé¼ù Æ+¹jA?ž(ìÏ1Ïÿ¤~ð®£|ÄÊÍÿëúÁ_èëqPK§÷Òãƒ_ýÆi pô…§¨L²œ)?Wÿ‘ùµKPUœ*?i=6P˜Xúºú ý¹VS«ê}øö,~ô5þ£;«9V?›1Cž¦~0—žÚEVezíD¹!’þãsNªË‡ Ù[ˆVbMð©éØnÏï8ƒÛ¬{úÝÊòƶâ÷½õ‘ 'ÃÉ?–‘}ÌÅžF¿«-yÀƆy­Ä iH4þK$øó¦¢sÅ/É¢üta"ó¼œVëïC›è ·°•=ç“J]ô~ÜE¥“ó£IŠw˜DÆ0.ÄO´ÿÑ‚ çOò]üXX @2²aòà'ÈÄd~T.üÇ "°4Æ#xØ bü—Æ\*¡êK°õöäÚ—ükw­˜Š?:fÿ¯3ÀTÍñŠIÕ$üÇ)žF%öf׾Ɠ¼ÕŸá?þ‹‚WÀ#mDÝV–;SD4¼ùµ™ÿqX.%6í§z`+øÞöì¡0‘²·ê‹y Èž»\0ñãM®÷<Ù‡»ê¡»i§BìkúÝ&øÚ¨díþ»ÑtÍá~ìå^œ“ýõ§á<Þ¨`~˪–³?»ò¹±=þC—½ÐôXXæ–Äõû±;ÉìJ1ùŒ8®77xÙ뎊ävÿ]{^TzâÄÕ¬‡ÿ%Þo†µN¸5Ц X/0;Ü•ë°>)Qd‚?¿¼TÐw µqr«$¶ê žö‹ÏÉ|dbmZôW%è'˜[\ß,K·ª*ðªõð K¨ÂèGÿv¦Ç„¹‡±´„d’m²øØôOQ]±SC1ú Þ_‹B´ë ÓT›«*ÇÕ%3'‘Ãø£@Íâ¼C½xk>©ýÛ7píÉ?’_…™ë`| S>RâN_"ö±+.uTUÛéT2Àç4³ƒÛg¢wÕ'ô¬ÔŸ7Bµ•Ýw¿º ¢Û¬¢.ÊV®;è)æà?2_=D3¸“·ªU-ˆ¸5¢ò£æ&ðª÷f~ïÁÌãK}öB¿kW$í§£Ëjj¼:²—k½¥â±¾C6³ß¸‰-9™Û8òDÎÒðɘ|þ ÓNö’s¥UÜâ ,Ï: ÷V ´°‚ndÄ>¤råÑ?±2ˆ@)Þª‚**±ÉÔ¸TgÊG}"º9ÞÅ7¶&Ðe帙¿rVÝfRnuP…0}™ñ!ô»WDf"BìN¼—ßX…ÿ¸n5‚ò#Îø›j’ÊÎiÎ]L‘šÌT© Ôl4ÓÓÛ$¦j`<“cÁüygÒÈ®+þç¾¹ê(2ã€?ÿoûïšâ¹ØÁüÁð«‚øŽhws`ë—Q?™YÁ×m‰Éú|iÏOB/f-ž.´Qâ.þ#'ŸpUkö“õ%ä’/Ò®~Ë‚þꋜ)ÊèîFgt%eu9SÎÔ.üøî}¾jI»ÛzìÖB0ŒØ*'±»Ü›þ,´5^o(ø{›HÍÿ±„éøÐ"°»ØÌÁè:’»ïÅ8 âòVÖA?”8øUu1 ÿ€ÿHAv0H?›a‚½ûbëÒbIíŽy¾Øê5dúÐ0v*ì…§Ð÷¯ð4c¹Îô‘ŸEŒ¿ ±¶²9õ²î"µ¯üˆ//×ÿ°ƒA QNËMv0 CN°¡˜ø£A`ÒoŒéô/ih,çy Ëü pš\lœ…¿qAvÖáìr&SšámSq•U±Íûñ³ÍyÆ_A›á?Nè_°O­Àfüðêö´òräOå‰ð’‡ã?Î8òè[åB¼«œI!ºµ¯µ›„}~w:+ÝAuŸ~ÇÀù3Û È 2±ôj¹qØJÑYÚï\[mò—kAú«Ç<Ý#üê*lf2™Ä=[kZ>dLÒg£ì¼Ý¿¤7µÕe¦0WWK„çëH °‘DÍÜËÓ<sà†zë>ók»Ð ê.}›žRÑþ V;Ùç;6øÕi3]—àO7’µÖ¡J¥¨ê`T”ÓdF—ÿÀTç ×#ÖÉ¢šÈ½Æó³Ô'â×q¥ÍÈo åC.r€Lf2¸â3«¯YÏå„ÿ(ŽyœæÛ»@ýù0Y”q§óWøó?™åv+€Y)I--/çNzÊô§ÿðf\Ò5­5ó;Á}Œå-ºBìVP.ù¶à?øõŠ#gˆúÁ¯ŽN?D"ÚT qW¬¿ê¨ÇÔ—ˆ,œÿsަL?Ϭ×v’ã„Íðÿóz‡?Amjrô‘W5CÿDmÊ}½‚ÌÂë¼JØAÿy=/yxKbŽÀÞN“'Ð yé‰`$«Ò'·õƒ>ÚÑÿ¼Ä¿ÿô¦x%ÚÉÛ¼{‹À©Ö÷š¼¡qP®nÇÜCuZ»1JÆcþà‰H¬8Pï®o‘½±«ãXq*þã0ÖÚ©î’»¯"ÿ8Cûœ;1ô>Xò£…kˆî`i×d"ãôðžœó¯°+Û`JSåïñ!õÈ?&é´Ò…±Sa×M§o=hA.p¯æÀ¢6±Ë‹–s$1if5[¿ +ÿ’Là ¾`„ÜBÏzµ¸¢¥V‚+DŽî"fòŠ«w`1MÑZÀ×àSìùƒ™À†^S?¸‡è&³qMlu{hŠ(gÞ¿ þ£ Yn&s8CU&»ú£ Šâ¼K}]º/ö3Û²^3rM*ï͸ø¼çxéX²E¨õºË|tú¸J”Q˜û—<ÈKßÇœFýy.ð«äTz8R-¿Þ¬mÄïÅ//#Ÿ‹‚¿+£N‡¨tËÅ:¸f/|G6"õ©èwR'8ÜzNÍÌs&õÌŠLí*”†êÁRÖyÖÿð$WŠ:TKw=»ÿ•"š²‚'U:â“gx™Ôh ª?\Žç˜ËÔ$άðGð%¿Qã~uUm²½bª#ý¯þ”n.ÿ±]Ó ‚B5C-G9A"úÒ_·<óÏË“!Lµ:ˆÿ¨L^ôŽ$-ÁÝÜQÝŽ1 RåOUƒÇª Ü¿äŒèÅüÁLh;ß7Ö˜Iœ7¬VTº§ÏF׫¢ô/9Jýyoú]àäXVvêÚc(o:ãõ•?õ(ð?™_è(B/c1Ð#Ô¹p=„¿dÈ´àW1èŸXŒUŽ9êj5ð%´Uô¿ŠŒ- þÏŽÅú\ôW5É?FÉGš®?mÄ=½’ÌÅ'Øó£~®~03ÙAOøß¾äùÐ_Ý’sà?a +Ò¥1õƒ[¿ÓÐï&äwwE h"a‘×ñÓ«9e‰Tìt¹Àä3¢ûîÌÜ5Qa†JC®óí{o;©Ðx@´½ «nãWCèáôÐÈŒÊ&L[mxÿ:ìÞ=ùG9Ñ™\è<ÙpjÞgrìü¨Vû#Üá¬ÃÛ½cß ð‹ù³Áúèžvl}K+xóäFA[šç¥ a"Üt– ÿá‡-Xþ›Äøs¥oˆz¢o×ø¯¯_µD¼³ÈRÁ‚Ä'…eÿ`̃©iFþQ–ú ;|ÏSò1ÆÏ¿ª§¿ ½PЯ¦‹~z â®_Õh¢»ÿU9ž‡ØõçBžÓcÙ7IÞ+å‹?*ÆÄªRø„®È/xÙ“ÌÜ&熚€]KK½˜xcúŸ讦bÙ_=@enâ2‘we‡våË/tä®gÒÂvX™¢õ#ðhQI]ûÊ™8I5â{*r™k±~郵t¨hS tË5Á›VªfgµŸ“VòYÄ&–jnáÎ'D÷ËfVÎŽq¦¡1ø9ú™Ç¡^| 6~.Ͼ^æ õ$»é¿ëeÄÖ‡zÒ=˜Õ„Hà£Ñ4§ùGv¦î5[Qÿ±K˜ÐùÿÑv~¼Y pe²®CàeQá”^pÆSÉÐýçúÈŒtl´Upù©À4ÉÓR?=6b˜é椟/½GR:_¡;`6ÅÚo$ÿhйÆÉb–WÒèâzõçÛ‚ð«+\¥üÂúêL‡Õ­p›P´Þ¼A…Å4ê»À[ßb½AxÔߨùI‚un¢q/}ùâ‚_½€<¯Üx·Þ’çu¿*O=wZ²Í9œ.#Q)¬môOÜEíÅï–/qLmXšìjŒQ}ðì?±Q/GNÞœ3à‰:á˜1Šúºp(d tWï ŸrNf lÈ1ú_=ÃC.`§5À⩆0p-8MÍ\§ð¸h¤”…á?ºó¤rËÍ´àWÝéŸx õ–¢ê£2õ—­œÎFèw2E^Òrú«ÞøÙø“¼UEäR×üç¾9ç(ƒmÿöyoÑ_…U~|û³ˆ¾~uø‹5Zv½¿îÿ°§ËÚõe´Œtà]'>ü¤þê”cš„šøÆ:ù@‹~UŸúò2#Ïп$¿k×íÌþs7¹ßñ†:ï'ÄóÈ„F‘XOŠå©"3ÃW—K#‰_݇DCù`ÖhqylUÕvK9ob÷^¯ÎûÕKjtÁ»‰­ Õ‡ë+e+Þ䙸¤ÉœÚ@c$yG ùÂ*°˜³ä3¯ð¤uÀF#]Œ ôa™–ìÅSÍÀW– ÿè‚ÿ8C,w¬ö9SMð«ÄAƒô1ÜŨú"öÐîè Þ1ÿ5ÃäA)4‰8“<¯± mï¬þ-lþ®ÿ€_)ú·—Æ#ÎBe⎧t Ò_Í%cX­cû×bíßqõP¯†ÿx@/–Žzx‰>b¬Þ…?ÏF¦P ôløN VùdÄ%#I*ê‰ÀZºÂ€ØSp·ƒ‚T cJþnA×›üxöÁŸûÊÅüôpú%zÐj>Wú'ªÏÅüz8Ë[T@OˆèO¨IJw¹Ú øM'Z­™zÂï´¶~ׯúç65ÇÁõˆ»Ñõ$]»Êé?EýGý­£ê²µÂ¬H¤OÙUs‘¿W!Ýt“Éxóƒìî0s:YÍñ¨ ½FÞUß9ÁyŸžú}¬Ææ;X¤CœVTjIîÈq¨PŽ€{d“3]wðŸû抣`ˆþ‰ïEŽPç"ò;‰&6ˆ-ôY¬'B¿[œUV;Z2§£ =LöˆGŽ›‘_Š¿y˱€ú»Fd‰Íò©æÔ3jí…SÖ”é™?øXk©Õø©}•ÇÈ ^Á\'.S10¥nëwѺ êZ‹~÷L¤v .Šjò.ÏlLÇ"äd*3QC#üÇrl„7þ©ýíúóÈä#ȧVÉ6(†q¾Wsb'b“·§†ÃMNH-NH9Ð÷HÌô>0æÇá?’`Ùfás €ÚÔÇÆrj×}c¨‰ï›ƒÿø#ÂùQQôµxoЗKÆ(¹&°–­¿Z F§—€ÿ°ç\$kú/$çÿ°âGq­×9›ì#xR|Ô#C±wŒ?Õ@lílýk0†ø¤k|ÊîǸœVz°Â#øý!úêa Ò²»ÉÍ’`2o°é ú Ý ×ÛlÆ[¿Ü® Ý÷.j8þc‹#“¾^.${ù“Êú|舑ÌÅJÏ%ÿXC½d ò­û(x7R_zÔî8ùGvÕþ#¬ºp¬66žè‡þ‰·ØÅc0¶=ÄúïAòsSP…85%þ£øÕò“}ž‡ö0‡Ð·ówõƒŸDR®¯ž{=€ß‘I¦Âîç§ãu“ÎP͉yïZÙa?æ×.µOnvWÅ'ƒÈljZhýîPÍdGþøZ(_ërßÓ™£Íåto,Î<ðµVzê?¢:›°uÃøò72ñÉILžÁo¸ß1Âø¾ô/)Ê™ÝGÆÕŸþW×蟸ÏüÜ@ÿÞèέàWQ™gxÑäAtà}8?›°äNò%êbŒ¡®G›SüIþ‘‹;rtÒŸ µ)yš­¿rRÙ·žúÆ:doÕÑIõ¦*/1z§ªÖižÑîˆ'Úåøì£•âZï8ýKâàQÜWŸå/Ü™Ìæêeª‘o(tR¯¬iÖI¦lÄ ~ð/<±;êÞÄ$MÀ-©Â¬”™]þc·8„ÿ¨ W±/7].0zšO¬¼ðE¬¯Ô†Oeg—­jöW8Œšìûƒºc-0½xfqAj rϯÕ\§ðŠè×[œc$^)…1Ñ,~ÕÞ‹~t))éiÕv§ÿUNçT«'ó¯¡%(nv¡þ¼=ÜùdØÑ#œú\rµëŠÿ¹on8Ê…ìwGÿöÿ–?O ~µ†>ëÐ_m êuØÑI+G“ÜÚ&jN•H,ÕgÈÒÄò©¨¥¸¡}ÒâhS„!óÈ¢L¨zŒ~·îOùÔÚók;‰æE¿ë+'мzBìMmYT6bþÇÚHκ">ˆ2¼}hå\¡hʃXº?þÃKÕ;U Î&¾,/ââá=×.è¯6ÈþXÍ…¬¶;|‚FW×P¦îŇܯ‡¾— 0-#¸†)¼•ìßk+Úß\”ùÈ?rÃ,§çߨð®ûQ¦'ž;€…ü‹Èi7ùS!øžÜÅ àWoðgCðÓ±¿ÓˆàWònÏT£yÿ³ceß§\!k²»æÚó£vü°þ#™h¥•245ü*;èTR®k« úKMæI,á7Àî£l:¾5 /w.ˆÿxÎån`þ`=våJ×™û¾ X…’¥mu#P¿ ¾“È¿Z¥c [ÃñÁ&ï|´Cß/wþü¨\¶1QõŸŠ«–ƒ'ÌÅ>,CùU–¹Ì#:‡ìãªSòtîàé¯bâ¨þôoÛ{Óüª3Xó+à5:õÄãØó«£aÝdæÁ¤2ýÐyÁ.”Å;5Ä+¬D/ÕZ­§þ#U˜ç’{_Ž«+FåÍG2šœ ?¦µ¦01¿Ö›ü’uÛzMeH}Óa.&ÚΆö!øÕUoýAl µâp-&{±A3˜çzì/1üÇT³.•;¨„KIÇYÇ|ц|Ææ?6â`îQWu‚Cêj½^27c?oE^xì(ÔËøÒÿª»9üÃ^Œi¨ø3GÌÏjØÝE¥•<™mT:ÉÇ*©«!æ”ÃÄ₆êºÒqfWጻÁ'”[Oœÿά~Õþ"Ó?ªX·yB€æ1sã纅èuHœÐ’ÜăŸ&KÿHfBùwàã/Ñ»ê*õ ­kæ)kzÛøûh vÂvÍ VcŠüÍå?.ˆ½¨@[°Öìô¿:m´õjD I~øk VÝé-_ð ]WÊp7¨tZ©k$ ·£=㣨‚·Ëœè[Œ|»+«'Ó¨’À>µÀ\%Έ~·2üùN«8LÈ|óØÝrúPz1ÿ£ðŸÄ‡¼Cåœïõÿûï\sd_\ŸMxÿ×þ#ŠØ#†Ðç°"ý¯Vua¼‰ÿÈLÿ«zÚñÜqÃõ)‘ù&…Ø©Ócä¾&Ó¼÷jï´ôÚT‘Lv)ôúb-švBÂ^µ®¼Ç|88:Ø‘òš¬ˆ~77èN ™^ö—/å¡ï44á¯è/bicdeóÕñF§Œ*ª<Ú¨iò¶ð,¶¬1ù}+™"2õƒMõ±œžÆÄÜ@°VÀÂWÇâv'ÿð7) î6ÛˆDÿ«®bvfƒt‡(«þ€9M ~5…]^¤kÛCâô¤ÄÂýð!+è¢^QbÅÉôÙøÇž¨¥NañŸÊDÁ+˜ ¾´  ˜ýbüÑ&ì}VjÆîñ¦Æ/ÿˆérYµ&äðSñiɨq¹$ßÊnxÍ÷ÆAPî&Æx"Îwd“Í#?š뢫”F=i([õ¯]ëõ.ðqT?ð™Uàs¥é®›Ý¾ÇnOÖOéôz{*ƒ'°gÕ/æz?ÈÄÁOƒ¯÷–£«¾[Îá¾O¥$-W3““7ç`²"orƒøª‘ÿyüz;e÷Œ<ÎÓþÄnëê%¿›=¶O«#G§gC‰t†=|Â6lĶJlj*‹£ßu#óèÁ$ÒàW&¨“|¶‡ÙQ½&š±û†üçoñ+gµ6üǬøGµ…Þ>ª S“Ã0óÂ/¬¤ì]|†7ùǬ¥'øÕ~½X)î¶8jÅeZ|òð}(ZƒúTG÷–”laÞ«þãµÎ—©G,kZ¨¯šò°£vÿÄcðAÔ±sõ–¡Ö%ß“yœ!’(Âûb\RÃÉZ‘MÕeîàXªê^›¯˜ž§›>TŒïåJ·“u­Å?€ÅiBÏÈF®ËM!*‰µð(-x’™Ø3Ps=…WЙ?¸úóa C%á{¼©ŒMÒÑjÂ}^H–˜Ä,)1È9ݵÞú·''&x̾¤òâƒÔ]æ&ëh@ýàm´Vþ`LgÑ,'µnPÿÑ5pmú'ºÑOg%oÑEßådu—ÿX"Vëž(C»’y»©üß›ÞÂåÈa~§ÎÅŸÜe>5ˆéé£øÚ¼Þ \ñcPþáÆ9(JÔ4AÑk×å?ÎQë¶[÷ñ—Ñí2¶ËV/:Õgçg}¸¾>ÎýÎV%g'ôÆð\ä^Q˜ÂXXµ5ëKyUÎp]ñ?÷ÍkGËwcˆ>!ªÑnRlsÀ¯šêôµ¢!§k·cš6\ë­µÐv‹¨âöO-wØÑ—™Žñ‰T£‹e=.ó?š‹x Muô zJ½7ݰ~fÁÃú0ÔRv÷bÐ Ìüþ<Lr5é î#/kZ¤V<,ŽˆhrñûòŒqDöÑ•¸eY9fáXOFìÆºú–ŠTÿÝQú8æÄ.!Þ]K7«XΘêÖÆî‹ö7‘ÎKYn-“QÃu†tíyDªäe°DæUɆ¢¡mÚH„žŸt¿²ÿ¶›ÓšÛ讎àšßk @®cIoc!+h ÿQþ£úÝØæ·DaG°£þ0 MŒ¼rÙ|9´xä)ëÈàópç’¢Z›fÌ'ޤ&’ã,fÅWèÏ‚ZÝá^ $Â[Ŭnÿ’¦¢„^{•T-¡~ðÈ\ÐH{mÐXè§ccŸ»á“6sµ~ì¾>‘Z>¸—ðætèú 2H¼jú*‹{×јMþ1“ìa¾ò¾Ñ‹| •Žìäùܮ仢aÈ­§œÀ3KKÕÄE<Ï®&€^SŸTmâm{þG8ÖetE^ô¿ªƒw*J4ÞÝRU5S—yÃ<—<š;þ¬3ñîR¼ÂI8Ôd6%ÌßÌ'ê”Ù–H|‘µœ9wŸÀ‹ÒÀ!çÇŠúSñŽ¿Ÿ›u[, µâ<í¬Â]{NEûîÑc#™ÙÉœmv¥³Ç˜7hxOX]É7†£¢ú ǃZˆ·ì>\N'ãD˜þW­¤'jŠ øÔœ wɗ޹ÓÍõj&Ñt 3:’ߟ2 1UªzÖÞèˆ>à•ìž#µÔ#ÙÓu“Sÿ±ŽlÙî:ù+Ïr­Ñ U˜v´$úÕæ,ê=Ž‚[½¤ÏÔ øóþÌ‘ ÒÔ‡lÁ ß™›îSCÔ“O4w2²Ë¼³dco ð°¹ä]¨?ŒN¿‘: C+™_ëa5_Ã]äcÛÄ{X›<ª,g¼óÏ£ºÞ=?qB¯Ä™kŠçhL ßBc¨y¼Êk_ަ½õ¾?|M2Ëlq‰¬¡†™ÍHGäQ(§ jðàþ%©„] ÿ1‰ç[ýî03£3ž³±y–þí¬NÎâÖ:ç ô ™£¬ t{Fÿ«üô¬yN!‰‡ rúxê÷ÿ‰~÷†Ã+D¿mAç÷PçÌõP#üæ¥ã¤Eÿ«z6æz±ÊGê4²ƒaÍ_²þãókÿ”õˆŸ“ã?îjÉõ¦ÚJ‘Ì>£ÞF¿AOÆÊ?µÏ4ðçuϲ9jS[]Ýh$ÊëY°x¿Élt0Y,·G²â~æ×f’ö$¦µ¬dóÇé@˜³£ØHþq/U2Œþ}­"•Ô×gàä†[˜Êzç|0(Ìâ¹ãF r†Úø"Ô¦&4ª¸ÎðG6a×Ìœ“ñj¿Â $¢‰Âžv£Ÿ*M$åN¶˸oUÚháüÚXú|²‹6ðú»à#brZ›“‚ÿ‚]-¬ªTlýÇ}|Ôtª1W„¬' µÍ˜"»–›¿ïÃ;’|* xÒx‰OÆ5 4e(Iðî§Ød»—ïh|ÌfêÏë…ËtãõÊ(hãÀá{ãuü°¯Õ°Ø1É1 2št#²ï¥°ø·­0K¥9K áͺèÈF 8»? œÊ“~êóÀ;'â)—‘}Œ#æç ¿ DÅšeôU¼¦=ïëŸß„Ù4a3Í5Zo9–"¨b,êpöZü£YP ]9¨yÀ‚j‚Èl§þ# ê¥e|ÂmjùËößÍÿPšÌMwb€­ØÜGê(Ì‹/lño(šŽÁ¥6¤~áŠõ…|£³D,Ú†3ð¯©i/@Ä´W¬ õ¾ôÕ^Ê&`¯ŸñisUiüv,ôW{à?Jšëè¿ù˜HíÍÇXÚöø£Â¶"üã^Î$=¯‡ÖïΖéÈ ®ƒz‘MEc‡³Q§£›™ŠþW)Éb8éü§&_A)±ÿ–á Ÿ0q¤’ºB¿›‡.|ÈcÊ£ßÍËÛ0’ÎùvÎö;½maô©#ìMgÛ"àOãÀsb’…Ô±–‘)üÉÞ”é£Ü©4ߢždý¯tÍo¹Þ·TS7lüj’Ý™þãz³¿QrµÒ9áÕ£„N"¸›ÌÚî0ŸŒ¶„¢ÿÕa±]ÿ7«þƒ9]d ƒð¬UtŽFû *@¶Óqxžå°.˜-èLöUYÎè¯â€Sö%vjH¾]Ë•õA²"ïV;ÞÖœÆ>jÿ¶šR)yÇ,Æ4ÄiV)çxžGfçkJ¯[\sYæ×º£3| ‡Q]|˜¨©lÄ.Ôk÷ÿú‹“Ž„ô¦úöχ·;yàÛŸEô5¸-Æ‘äÒ•>$¨þ|££4è•BµIˆŸä?¢‚nÏ ê®€Í*7Ò¿½„¶Vî!h®Ý-~ó(W=Z8»\Lý (Ò+r˜¦Ü÷=äÙ‰à¢à?:¢±ŠEþ±œ.ÁUÔö¶…gS”|'5mxó£:ÊÁPaJ·QbR5mÞ\£:üGGj]Þ«ää2÷`–Á$'ÃËm#7ªó£Âòç¾Z´a¡¶âqê³·Ã'Ö¡njVaýîÐý¸~!¢ûVä;EPõƒ (©æÐ¹ ¬ ò‹x¾æðñ«á=.À4$F­šüê¼ú —Úÿ×ù?iÀL¬– |ëùÂ2•ŠÌ5@l u›kKíæ¹Õ„Ë®C~×ÏħŒø[õÕZO“JÔ#v2;â‡í‰ðcÉ?>À¿Ð—Ö¸¤7 µÞ$ÝâèûNÀ5ÀÃÓÊëË©*ùõ§öYJî'|-‹Õæ&:nô tÿñ\W2 úÝYZäúÇÜ ÏW yÖXDl\;¼ aŸw•{°É'Á‹2ðIåC½¤úï¶Cq0þã öh9ˆ rÕ€ìáÀ‡(óEOP‡×"^Ø$ Q•ÉyKrÁü¥"â~*[b­ýYk'Vï#ÿ5Ç‹þIez™0Sä¾Dº> ÏÖîÈÎZËQØùd\vUD-bÜqøŽƒ H—Èö÷Q 8‘ºþ(?x2DÍ€Û˜f$B <Âø##WPU°q£P€¾´çŸïÄ—Ö#Ÿ9`Ü“ÍõðV,&é5¸ÿ/y몀 Ce”äð ¥cPýù;49-ÁØþ‚_ÜÍÝ­N¾“Ëõæ_ï=G}ì~5ݨõ|kÈMg%Á¯ºÒíï& 6þëì»p›íbÍ»D~Õ™Ms3x© ï6iƒäüGbüÏ6ЯT‡&Z•°Ñ…™ìà ÏÚuS!Ø“äq°¾@o²ß dÙa«co‰(¨ÅËÔ*PÎÁAdÁ;¤@O{J9­Nè¯6Ðe/Mc3&ùG^,þFÔMÀã’¢¼8'V‡z*õ5 –Èž/_\ª2úáÄð³Í·Fys l²pî#_è ßÝÖ¬ÿ‘=×0:j‚³ØÊ¿¦7µÞi÷[»È³,ÍÝJ˜3¨fïm¶V-Í|ÌLp‰©Oé˜^ĺǾŒO]Š k›ÍF¨“!ô¶ÙE{ôW îèÚ}ήä/©¸Žm5¡wG?柟ϲ1¢¦†¥®k Áã s(ÇɃºžÈ @þA=%yèß`ÍðÀ«Í8ô_ô²fãÀ„Ìez¹r¦`Âî1ò7ªówW'rH£&2ë©ÌãòGÄa½(T#NiUŽª×=­ÖäE1Q`]›ߤ&~<3ß³ë–VtÓå”JM‡jLEB=µ’¾ßß6x\tÕK*Èxû+á?JÁ<íÇßìGgU†NŒÓÀ°vÒQ±)õƒ]a‘î˜&þ£ú«.èwQÖË“ì5—ôù¶à?øõ˜#&½ ¿}àGO‘Íõ«o¿¹¯º8(ú’”¦âRaW÷mtdÓRÐz²¸¶‹™B?׿äžcšèR0u ñr³ö–5¢Ñ79£ü¨Õ×7 ¿ú¹þW1äbÓ·tDY‰¥úÿ±YH=jœ´TŠbÆá-rî”8%<å9¬ð“ÙĽ‰UJ&ÛM’«‰òíY}¿aùzÈ7zgù!·®‰>šÓSƒ\x:ÿ†=‰åJN´ô¯þí7ˆtÞÉ,Ôg6Z»Îð±¦q}R•"ÿˆÏÕž©X€ÿ( &¶ŽÌæ9Ò*v_Ú¨ˆàiïÐf“÷'ØÊÿƒ³§þ/撚”PKñS~DOÙ÷m8† rÁû_™"³–˜ÕF£Ä6†¢†{(;ÀÊß2ö¢d¯cL¿²Ôyì¿I6žœg;¬ÿ]9LOÎ.gŠ.zg0³Thëã»Nò4ò¢){B†Õ×X£oÓã™óÁHjªXù øû"ÔäaÎçzsƒïb€£4*´ôX¡þø”°DMÙiqì[K|Ê"ôF`-wð ¹³W©þ8„Ïr’ƒuÖ jï‚— ún‘6LŽð€ï¾D#˜iå‹7zMÅG6üGa˜ÚêTC”¤:ÏÏŒMÅßY27³‹Eþ‘1ÌŸ1‰[ëÀ'/Ão<%~M >åA” ê¶Ù™N‚ÛÑ£Æ4/bï“Ó÷«2([U|±è_èæ.ݱCnq€…|ly[eT´¶¶U‚S-2ÝPÀ®Ã‚*:h¼¡[ú=5Òl‰†«äOüi,GmÔÝB­7LÄ^ÇSWÕW:„ cµ1æ0ÕŠiÞ[‰È?˜Ñ@îoƒk•gßò¨ŽØüCìñ+˜aϯM!J IK|r‘úýk ·uñŠ1èg+¼N  :Û$hd»À;éäÞÓÚD3Ÿ¨&9Ú³dê¦1DŽu]îrúïJ|þ+ÞÙ* çô •3à=ª1éŠ+Ë9Ì.ºÓ=¿ÚmépêgˆLj!åB¿[™úó\®wÏþ#øUbˆâè¹| /3~»³É?2Òéëx¯  DÍäк¦äaú+öLÐøß”/šàoÜ%°Ò UËHNgfc–¶£ ½§ԢëU3ç*2’¤Î^ôoÿjmf.zAj~¢©ÌŽGW?»Âÿ¦û)GìúÝŽQÿõüóhôO %Ò+èžúLáÉé:ê¨E÷«$Z1ú—¼¦CöÏüóÞ1ÿaw+ò0&3ÿ<¶~MäôÒMo~UVËêüF´v%ê?¼A [óÖ¡~0™1DdÒÓIå•9¨*ñ‘s´=-ôçgèß^W*Þà• k ° ”ÈH_òDÏ ùÝ~0nõƒáõ û!ô¾úÙ <N{&ñìð_Ô#ÒÅFB,iyõ°Þ1š®3v•o¿Î.þÄÂï!ÿˆ*sû*gÜ¿ZA†\f'ëÂÞ®Çv§ÿnïîâgm½ñ6Š+Á>úrÇuùôT•Èí_WŸ5ÒØ÷!pç!â‘o»ú××ô"§rE½¸;LÄ´‡wñGÓg W`“–b14”©/ðçA-fð¾_Çw¶Õ„³ËbüÇKt:“ˆóíùµ‚ØA¬ßÃx¢Ûõç3Àâ+^g\ÇÎc“¡”wþàGaº Z¢úùºz7G)P×ïq›È±)ÿ¿ ûtè&÷ãÿýŠí«gþ¿Z£ý!ÛáÉs’¯<'ƒyDþáGlþ}Tøó²D‘…̓¨m«“3 ³¯M_’u*Ÿ9Hdþ`Øüãú«ÂœàüÄØoé xˆ§ ²Q~„úAo,×¶ ¹y·¨(IN¾Ðœlàݶ¢=eàz¦{wí-gn=j† l­ÔøAäžÔŸ/…‹O…~÷ 5›™_Þ[KXéͰÑø¼œñ¯að«ð¿qWΠnꕼ«f ß…çh¦ þÜZì"Î-ô/™GMõm®b{\Å5hfb³ˆº.›¹˯ä³ð”ÍÈ2ƒÔ¢bSxò~ôÐúƒùçݘïçg¢IOk þ#;ŒõNüü,2®´æB˜šã¨éçºÖÛ".Ð7;×xظ£ró¦½Ãow¦2¯6ùËs£uŸ\a1þ#.xÓ~ä0ùañÛS'\m ¹QSô»ÉÑKUÁ·ÇCŸ5Ü, ¢Ì)ŸQUÁ'}Ûà9ú'.“AFz“Cg1všåçóø•7žük sú«/¬T˜N(¾fR+§ÙÑJ‚~÷¾ ¼“÷ uˆ+þ¶òÿÿ׎_Bô+úêè/R„ó®Ff ÿÑÿQYO§Ï6»½ÃQˆêÛl¯~’?ãøT§2o`:zò݃?¿#jˆkzq™X¯¥¯Ó*ý$ÿQF^&ÿø(mͳüd"êÏsé9ˆ1«ÈLè]&ËEÚÁÈ\¦ã"óËÉgœ`Jë`PSÓ¤5ZÈÍĸì8 ¶°‹üÈLÊë‘X±¹> ¦§ñû<¼ÇÜ“0sÔ;"°ð¯û8S6vÑŸL"âùµ9DwìÌ1ô»©À—c©‹’uÙõƒy#ÏÀ FÃ4#Y ÔTÁÓVúôµ}É‹nØ|w5Þ—ìD> õEø„ìâY‘(vû0þcybø—‚ùQ5ñ_ã@ÕâÓã+6¼N”ÁŸåj(±Uä oÈ$ž‚A]‡{˜2v‰þ‰­tΊã˜Þü>£Z‚;O¥HQðÄZp”šêjÜÐïé±éÅZ+5— g w¶6:ÖÒ<}O×›¼Ï@G^}žCíú®+W³UçÃ7ŒC=5¨[aÏîÒ/öi^˜¤ð4¸Ë%ÔæG= ^*è;_mª„¯ú¬âõ+JôSÄúÑ™&ž j6êÏ%ó¨IÿÝM(^c1¼‚ÏiN¦ÿnÝïæG½n콩QJÄiæرkTÁ¥1ïª÷`$AðÏR§vþ¢ULSJŒ‚ôoТã(Ę‹ðvÏÌ„èobÕ›q¥w¨õzÈ x¬¼YAëb‘Uì`~m/®­¿ù ùG*þMç\Oµü8zÙÓ:Ö‚P×Ù#3ááÏû»î`üÇbPá äàô#Ç諸šQévÍjKOÁô¿:…¶õ W=–y„¥`vÑLfµ4ä[ÉàÜ{È?]ëà?’¡@~Ä)y¦ŠëÜG¹VÖ£©µžúA?z¤„­ˆîLf퀩ð± `·ÿBØ´†š…­-Ó»b·ƒø¢ø–ÄŽEàÏ·u˜z[ Ô†FÁ„êÊרä ÙàT²Ða”Y­ ¤æÏ%ý98ùo<+†èSÀZº .À)Þ`~bo-é&óɬƒ—¬`uqNr¾±Þ¢¨E§øµä%·T?+¶j²=†8ì0ùGz¹àÛ‚ÿà×óŽô"žë$|uté\¿úÉmˆKb¤_¯„þjsÐüómŽ2è¤RR¾@4rÝ ¿}æMÇP}ùG#PúÔŸÇ×?‹â¸^C¦ÑëêG¨)±–Èÿ“EîÅ¿¿¢úâÊÁ’i_â³æŽ5¬" ã?|äíl¤–;ÿ(*ÿÆÁn æN¤<™rÕ@ÎÂâ…+(€-%_ëÝepeÍ—nCÇIÙäd-Vn>ýE®¡[M»“zñ¸ðèÕQèUÄÞ–2úºÎðÖK.†r÷Ë8°ú5°¬îdÏɺ6ƒLÛ]c`¿²¿ã|Rc¨>!‚»ø@›‹5ïIDvæ•ìÉOm2r£–ëZ÷’Z’= bèÅI>y×ùsM¤Ò<É-¦ pNÎjÑaö{â'>“LbŸ3±¡QÈbⱎ¡—âóÿÑEO8Ö±)^7 ~î{YU9žçW>a¨á‡ô÷ÄþÐÝl±Ø@¬]¿å… ®ázsƒïâG²À™°C‹Q`e¦d,Ê4˜žQè¯&c—_cMža»÷á]ò“'‚h×T»õXڥू¾[¨yÃÆG©vMÐ0ånÜ¥üÊ4[0÷cÝ·/ Á<ÚTk?ïTÿ±»6NùÊÎ2Q˜çr‰ü£ WW6>!û1±½tqò0ÔfLt§›¹îLÂ4^ÌÙIÅIQ´X_©0<­2s"ŸrjCn±±ö Ìt ÷¾yJ ì™Óì·P…9 ›­pç—©÷koÂÍì¡" X“»™Êôç97§ÿnóPëu™@õnò*s5_ÑÉ®gþêxÙüGc¦Ë)­Ð_ÒMe!Ó{8»1Ñ6–s(óO2³$‚{[ñUKÞíi Êç9‹Õþ'ü¹?ýwƒÑ(L®ÿ9^ÚõQÄ#1_ËI7ÀÂ̯µû'®r4£bNô»û¨?»ðm½;ð eUž’§±Mêô„Eoù;z ù+ý>î2¿¶b¨óûíç~ôµœÜ…uÿ([36aÊjƒN_z*lDYüjþãÆ~8ÔÏp#y•b‘;·d×¶Õáü7}%Œ…7Õ gÀ“œ lUÈ\Š‚ê ¿Ê¥¦ó6n#Kø€ÿ{—ZÁüày–¡nœ#ºÈ¥ÕG0 T¢Êdì¬+~䑱Q]š‹­ÿŒ]~Âjd9s¨­ê6ÃÂËhà?:ð©t8ÄÃÚýDj’Qµ…ùÈn£ÈÛzLp—ø$»ƒð2ÅÊTyVâDåw½¹Áû;çÈŠz2~p1žÑ=ýNÎÆ$îÙ4ØØÎ¸`a÷ÕC¬¶'šÎËä;WðKi¹kô_µsÁK}·^ë'{ñi9`°?“ܯóÛ‰5ÎHe]:ºåÂÔ5kÂLÇ®T&»YA‡Û–j—l.3‡9ÝÑ´$d3ÍXa;ûGP¾ôì&‹éiÞWoéåÔ©Ýè»q“Nƒ©@ª ¿z3Ü<«~#{*N‡Zq„&ÉÇÖs§káኒo¥5šSÌ^*/vzùÇ%øó¾øžf0°ªxÍmìΉ¿¢±aȡ֣®þã.~A8'‰ŸÝÆüŠáüä3‘s3wzìó óZGýÇiÔ»‘Óìä~Æ ³õW \w0>U«PTW¹ÞýDU5íªzæhD§«ùzs9qøUX”Ë D“©iM]È žËhò·ld¼ÑTjYŒAh°>£xZN1ŸRÒMÔlW¿¼9Ä{ØÕøaoZèÑÃYqýwmoGMµºCX ­:o’ï.àÏ÷è”Çíg÷+±—IÁKÑiîÛÝ þzýîRÉ„E4A}Tj®fW=z‹ùxÊ¥X¦hª)ê({ò‘Ü ¹Ê3K /0†þ»—ƒ— úÎOë&Ûc Šbo¨ܢÊ!¢Õ@ú'Rqn¦²îÑÿj?ýKÊbcû¡÷*-"ÕA­¦ž5¬Š>† ÿXƒg¸¿ðŽHÚ*Âtfú_=¿êk{“ºégª9É*ªÞ²Á§|€O>¯òÑ< 3ÿ¼?ùGý {ßܪ~;†Ù¼¨3?±šH:½ó:ÖJd/­áÕw©vÜ“ÍtWùŒâö9JS]Ú ™à¦É´ø˜ýX²ìT³èäKèßÞÏÜÆäÀdp)™­ÄàC+La®DSt­í üò"îÇ+²¨²àW\‹åƒÅQNòˆ´¨=}TxŠ©Ìc*eΣþ¼êƒÔx÷´&?5´ŠX‡x.3ÈͲš¨{ò§º;XͺEœÔ’’+ß"æ»ÞôÖØFkëÌC/ÛÄä ñéù¥œ_èLèËÕ'7‡à?Õè¿[Ž#MÑ÷·p½{¶ÿ¨AöÑ–h,ùÇZ#úªFÌ‹*ŸŒOövýT9úÆ·Ž€“´’R•h÷ßÏ)jDÜT®‘ëî§~pÙà@0Î’dÈó©F¼Î앿ȵºØú«ÑνÌOlµ6Ÿ[/àE˜í­t`aoäTò¹D2iä4×üç¾9Äü¨·®¢CPå†ë7~â›8â¸ðÑRSÝ—„úA[¿¾áßósPî‘ëNøí¥ØEÿöä ö´ÙÚ{ºhM¯uOøórúYüGØ Ýo?þ×’ò<ÏûœæY4:ó¤a´¿è)y#›É´²6LvG²þ#P<Mä}Þ”…X¤Å -&ŒÔ0+±Q×ðH%áJ‡Èذ aQñðöÖ\ïMýGo¬æP"ü­œî‹D"ɈæSheÀÚ—¿ªÇéʉþ»ùÄ`þþð97ß9øœ4`¤Þø‹g`çÈC$ú™ÆØ²Üt¡¬À÷û‹¡ÛýEúâ½NÀŸ¿&Ú©‰—(óiו‚%8ÁZþð¯ù„ ÆZ¹4Ä<ËÐë%Eµ }ãè©â‰Tÿ1ßøblP+Éšæ`¡¸ÑK|Üel÷T²{¨KZé"œ]Î`ÂX8άj49Ñ#|DC®¨øUÕ„þLwukjª*{¯Ý?n†¤‘Àõæï¾÷P‡?ŸHN“\mæžOÀŠm€? RŸ ç9ÂE”M¹Aðq·À·2ª‘Ô†ŽþÒ†J[P\þ={°û— 0¦×l;ú_­‡ýý²ëÜ‚05 õ±÷›àÏ{©5Dß÷ßý*Kp…©ö‹‚¾ ³¼ ®Û“|à ¶°+Gs¾£3Ö rŽƒøÍàR×Èwv)»:é±XêÕ^˜¬4ðöa¾¿Àô ·m3UÑÜNíyì•pv7é°R×Îg«Å†íÿLT'd­Pë Ù‰&Nsv ªÎôO|GýùN”[‹àcÜ~0É)è ÿ¼G?ø2Ö}°¦]ÜÏmø×teÌ^ßõ0’ˆ^b.Ì_kTn¹ñIô'dª»°úRCR Œm³5îã3Ïb¡§™ŸÁÚPѾFîˆÝ} ߺKç—è_’ÿñ…·€žÅDô!ëN>Tnâ u%çÈNÒÏÝ Vêó£ â?ü8ÏÕ©()«Fõä0YÊå?ŽÀ”åÙz“ó¦£;¾¯ÑÔ¼Hþ±>ÀèK3€Z³püsyÆGè“Òi§Qе;Vh¦Jƒ„úRCðí‚Ä0}¦Ì‹÷褤±€Ž/ržŸnÃlľT~ô#‡KÉ®‘ìï¨ù‘¶7ýÛÛ‚_Ùýwí>ÕYåšo þƒ_%CÔ Ç ÿUØÉË‘ÝL\üÇn-¥ÞAÏBÿÄ¢œ®ƒŽòÌéȦÕÖv€‰Fv¡ ¿§ÄJêϽ°V)õò-sEÒh³éß^_æÕ½™?èý“óÏSËSÔÆÇŽŒƒh Ré©yjÓçp ó÷G2ÿ¸"î‹Æò˜Í.v·è;‰òi!×ð’)xÁ—Ñe·Hé¯úèCÈ´:‚D¯/±«±¥'ÛΪVƒ_Ý$b¶°ãðÍ\gøG73§ø?sVzðþ•UvGnòÛNä4—Ð]am[¿[Ÿ»°«Ò1BþÜ©¯‡Ñ§=ŒöhlùjSVÃ9ìÄôXGöp¬æ-–÷Hùí‡hJÑT+@Ä6…ü# õ;ë"fó ñ“ˆ`ÈÌ߬fWÃŒÆ\æZ:êÁNðuû0uÇ›÷&/ú»8ýUx¢¯¬×Üø¢k2*ÕÏ-±»@švoUAÁVïÌ\¯àðbþÇTÔ3‰‹ÓÁW¬ Ê?Ò’t¾¯grÜ P™[`ìYÐò\ã~ÜánzàM|èß~/x© ïv1p –ÂSQߊö üj3~÷+H~zs1ÓóNS;¾M52ëà Ç_U æÎFˆº3°¶ôeŽ(ZR2ÉðµK™þQíæ r;“ùP]ÄÊt¥ÿnêÞЯ0%u“¨RyŽ•t§Æ¤÷Ej¡ë?Fh_eQ0½gF3Ö)Áþã *È ¼ ²S…ÕÙÖÚB‡ÃE(±æÅq¦Å6ûñ+/üÇ%ä®d5¥Ô$øóÕ²šëÝóWôêD*m9Wî*;š”zæQziÍ¥>>åÛÂËœcO£©?¿NÑÊ ¾5×lB¤ýUI£‚:¿º*zbëŠó&ŒÁ+y>øGôOTT” å&íÊÞÒ¿ÿô&uöíäìñ<Ñ"¢ï_Ux†êr-˜ý~¯̆i”({Z¥_;_Dþaw[WX¢aX݈ñ«Lb¬­¿Œ†WË©F’+ç0.ËžÔI\†‹<‹j/ùÇ*¼Uy£W„ókãë«`fºã?n‚ξý¹¾MF6ôWãA°Ša»÷ÁלbÕ˜Ô8œ3Vʵ!ðÐÐW@TÔÊÀLESçF}ÇGº´¥zg¬#(aÌ#ÄýQÉe­Ì¸~ÕF¯Žf]:ñÞd#˪Í=»~• Lú%¹Pãþ·þ=g;¼Ánö~,¬,Œ}þVøú«ú.9š,p*(RÞó•<Å)Xü¹°ËCéØš½Ð}õ7ÑzI˜¥; ýÜSwØ™z¢ïbMÚ9ü*Õ¯¨B{ §å‡õÿÈ$‹ìæ|æ’^3+bÛkÑÿê0úÞô|Š=¿ÖÿqL6ùŽÿH Å¦2  |ÀJjÔ…¹dç,,p>ê?Þ‹ÿNÿTÎW`eá?6¨øögð±Ér’í9éaòiŒÒ üÑF|u}zâ±Õ/ñŠ\íñÿw`YlÝÛffÏžyLìVìîîÂînTT°°»»»»[Q±EÅÀFÅîîîþ~Ãû÷!Ä<×õ÷œëa3±÷Šû¾×Zh#†ÙÇÚÌ"ö®Ôßëöóp6¹PÄ¢–ý»ì›8Â/⎭üÿÿc€-Gˆ~ÛßmBtSü»ßþÃvKYÃü¨®øUAõkmåÕÚjµ˜ºþ%W?xÓ¶’®æ QËÄÅ&ª%´ê$øóÆèw[hûÔ:9?*§ðC÷;½œS=ù|.Š©9ÑueD ôWÞ‘ö”šâ Hšå?˜4Î -Iô:ŸˆÄƒÐþ.ºè)ÿÑE›ŠR¹1™Ë "­ÉDÏϹ҄Ä^ÉäJb¥+`ú6˜Ø¬ñü¨xÊîïœHêD'>lN*ðZc?oaË.óQ€»c9fð}µI¡¬Àïoü‡:Ÿl 3ÞËŸèè%»µ ß²%àÏËá‚`!êvçÍü¨•äÏ“(Ôêä)óñ9ð”ñ@ÖúÂú¼arTînhÓ7²ºç *¨¥šÆßÑ'_ w~ÔDæGµàygæ|»óñ¹GN¼ƒŠ-ìMýùCÍ4–€ãôÅ’¬#+‰P9Dçºàûõ·U¿êA­Ër2ÜÔ0û›R#CþaÍ??D…_ ð«7x’bpª7ÈèîñL,]Ïrú·ß^*è³ÔŸÅë[ý…1uÚ¾›þôLÓH ÿQƒúòÄò5`C¬)»‰à~žÃÜÇ3zÊÕàWa»ó¼UÒ¢„hE9üC°EÖ´½´è¡îãÃhö7|­—aÍ¥*ÊU>m“Æ)"ä¬úgº~†¼Ä‘ð5ØÁÖüÁ“²²|«'‚?_ldÃoC}šÍ~Ê|[{ç‰?*†ÿX‡úX°ãnº³hj½Þ¢œ,!±¿’‘WÄàIÍ s¿jaa–H ú_e²Ÿ2ž“ÏT¿šÅjõ@‡îÉØÌÀ*Oþ\?}þ£ {¿LÁz½+]YlTwS2žºÁ»Fnøž®ôƒº‹«¹¹ œq.ŒP>j'3s7BLS:¯‚?ÏωòAy•X'~Œé2\›þ‹7 ˜µt¯JLÿ’c QÛÌOr\~·¹Yeök±Erä'”KZM"Ûnd[‰àÏ÷êmaÝsòúS?ø‘ç7”ŽðñÉÐÚ–!‡Èh¼ä7í²üG*y/†¨b=¦´Òæ‰úD+ý‰qŠê«ŒøäÐ_½E¿{ƒ:ÄföeÌ?OŽþª*Üú)º”å'€Ky'¦S•u‚¸5óÿ¤âú·ëw5:ïÿÓú¯¶3诊iu´ÌÚrŪî[Cÿ’Êj2µó£b)7ÿü ùÇÑ«’úÁàbyÔèæ*‰$‘¢ê©þ]|q±“¨þ‘¨Àn¬L­ß{QJɬÅ#ÿ¨J÷«ø…¿q !Ï[ðçו»J qϱkµŒø;š3xæ,ëâóü×ýUŸHõOì~5W´!~^æ?ýÿòØ ì)åv¬Ä%ê9Þ‹’DÿñôªŽ=|=¡?K¯Xþë„HH>“Gý˨ß½ÁÅ.P§r ¬ö9ˆ'Oaž¥ž6%”½–õ§ïêl4:]ˆž±»ï¶Öç¾KÂ¥N Ê?’{ìà ;žò‡øIÄ¢ø­rÑð•(hg^ó=—Á·zÁíÀöÖÂcä‚»q‚ 9 <î(–«“@šêë´£Ú;ð &DÃûÉRÖð¦šQGSþ#±#ò ¾¾K¶bÌœ€×‚Ž'3ýp­.Å‹Qþ¬“­±vëaöݱðÁ¯ÒÂ-\ÅjìâÚ%Œh_-åo±ÇRuO½ïoÝFš¢hí…vºÖ²µQÿQ‹)¥á.jPKu!»)Ev³@šF9]Ta§ð­¨‰y W£'I j#ÒÒ­j•‘KV¢Ÿàz¡øSoàjì…O©‡?JÍ]Oûri#îÍAÿ¸à§g³õVUåaö>Ð8‹ÿXL§ö¡xpOê÷˜Ѳ°ï=Y€rê:±Çj*sæañïPE_]J½ƒc¹$Jgú·»¼ 6ÛOÞÖ—ª”w0Æ1™¿·™ÍÁ™Š¢ºme4^EÐïŽä=ÍDƒU–Œ'“üL7¡ŽõÎ*gÔ”ä”ÏY鲬¡»S¿¯sêîÅð'{˜d8þÜÉÛ< ¿0—ùƒ}L«vµùGEü‡‹X¢¢¿r\«*àəȂÿ(.ûPc_TtÊq`¢V³Z{:W9QŸXì.›á‡R¬ц”=ˆ*\@ê8vá+¥ µGVý ¥Øk¤W!ó»`v†?º².-½ÛÚ×SQhg~mKã5]Ä ˜:õƒ èóv]ÌÖ£‚B^ÑKˆÍŽ;þ÷>9OþÛ±¢(þqÿ]}¡–¨ÉPGѳU©Àš[™?Ø ÿQ”þWš™Zºàû~Nýà$Ñ€3“µÔ55šV\©¨¢±AøU#5´~0ø'Ãÿ,žXÏÿ šƒÑ—ƒ‘¥×R*jÖ4º&"‹(+&‹]‘ì¿{V9§”—±H;É?fÛ&†“KFÿÄõ`BGÁÊrÎLjt%yþÅ„újGú_-#Cx@´;‹ô>ˆ?w‘ÎrŸ–œ¡*ù‡ 9€³¬ µDˆ?$S:‚ÑÜCõœØm.uEaßcó¯Q5~èþ–¶96|$±ø m¢ã݇X$ħÕ%Ä6íñ {Øß6<œ+OК¢º^ µG9•§è¾{ ?2I"–(a±û_Ë}·•Q™yNWÄÔ(¡q?o°±ÖÄ÷írÕ ó@ˆ¾à‚"!›oŸ¸-r7ÍÎU.5nÇ;ˆ‡ö· 'ùÿ¯ÅSŠF¦0Râõçûñmá*oƒ«,æ]G R~EwœÜ_WfcºrIúïŽâé¡Þ#L#Wáoð ­Œ É"bru¯àÂÏ‹ÇX@¶’-Æ—C´¤jØÝ½\+ö¤Gù{J6'ÿè¿©AýGðšô¼ŽåOt^ÜØc‡<æ9ÍhBþQK¤sÇ1ÔøìÛ\Ï&¼â PÍlø¥²T¦]‘¯‰E»R³vÜåõy±ÚEà»oà?lÆ™þ#®º9ÔŠÝà?š£zƒOÛF&ðBשlÜi´†9‚Å~Tþ|ùÇjò™Ôdb±Á¯Îã?:П2´ÿh.Š‘œà½•á™Ç$Â_Lýù~ûôW[ÌÜflâû\íZz^’ýy¦ ÈbÏèå2êÈTz;Ç˰3EbþÑýnAyÏßÿñƒº V`«1lèüÇ]”±+Œ¸°çÍÌ•ÜÅD¬}f—´ UCEð<ÃíÊ ÕÔñ%>ÿÙ˜÷èaµªG~‡|ãÄ– ˆmú¡”:n>”#ÍcÄ&npò5á?ê‹ý!ú'®¢_yØT7"¦Äø ú ž™ >¨=¾â4õñÔ$6€ÿÐÑ—!+I "µÐÈ£©Ð»¸4¨è&´ÿºá¥#{¯S{b ÊúxæŸ&Ó:a|"—ñ¿d_dΔ]w³»ñæ,©é„~÷.¨‡†Åx¯SƒðkÁñc -e½¥PèêjŸEþR3?jý¯€_yÍ?÷±5‡§È©R©}UND~)¾óm³FF„ŸX/îP^’.(:•I47í.õƒ§¿r›P5½¥°ûEa·ã륨?/…ÆÆì£œ˜ÿ¹+7¨ÿ¨(®€6­g-€‰NJMk.ÖYI~ìÕ) Ã2PØéb¶+Rx ãçak.Q­¶‰¬æÈzW쎊 ØGr«ø]”M¡wˆ0ÿH©´ï àþLßq ùé6(£5Ÿ#žÿ‰-m¯/ÅäÓ{jÓ"xÛŠ¶‚l 3Š2ü‡ä§šb5ËÃ+NÀ¸`eWïÃ\ÁvÌÒGŠÅįt¥žêB~eu ˈ‰r;’:ÆhD÷ãÉ­>–væÏE*ÞÛá÷¶Ò ²3œ«œ jÜL9ï<‰=·zÚu$ÿˆ¦‹wZJÚQÔ–»¾Ï:Ëð/*ÓA33ý÷÷pÌ–KÛ*¦s¯ã¨kËNþ±3A/€«Z³£|¥+ùwžXökwÐÛŠ&ÛhéÔ°Ó57’ôg/0sŒ¿üÚ±ºã(Q ÓY0³éòà?*6m&ÒN H­â{lùDQó7þ\ÇÔC3Z(¨æî1LCb÷FN¶Ïè¿Û›Ö´‘xŸo%›É p‰%>äκ©.õ ÇÑ¿¤QÅ;ì½Ù 44l÷2¼W ›Ï~¼ÿ8${à?Va“x1è׸›ü® èæ¡Öë‚ÿpo:F³ñ\Bÿ«þøÎ†Ý¾žIßáA¶שÿ( Òžœ®!¾ù9]6£–ü,º8^J^e¬²ÿØíH&öÃ!ú—41>[Ÿ¨ÿ8Ì|’ªÔU”¤ëHs.µØ™µ]Á,0¬BÆ|˜òÇz/1Õ±ÞqædDMr—óå/+Ó ^ç§zP?ÒÐô§áô¶Ýþ¯É!êóv‘ §É[Ý•Œ¦ùmS±Awœ=_øóŠÄ`-ÙUNÖÙ—£\öàk­Íx67ª7ÀñÃßùâç<áÏwÒɤ{•nÿdƒåáÏ‚õ»ì乨º^쑜d')`bÌ:¨¯¾¡8nÖ â?^q•UèŠuŸúâfV²°×ìЗb"4kwüï}B߆ýŠìJŸ?F]“P“¤D•I[4ÿ×þWõ˜@X8(ÿˆœuþõ[žÚ¼µ¢2\*ÔRèë›A]§Ø¨ÔHÂüó‹jSÕÊp"ÿORA—eò’à6EQ ÅÑË(EPáyI¥uÄx±ò·á¯N7æ×^€=ßJ¬°ëi'ÿ`ºXÌþ¼E¥¶ ~¥¿ˆ ~™úÎÌ\"z¦/äÚfF_Ÿ•d ô»©á«Ð7¤8•q#á?’¢ß­¤ßiX'ìDNv«‰¿8~U„ä†p?™÷2l½ ók#¯ިKñ8°æ~x0âŽ.û9Ö·ùÇòö¯¥ÞµòUäÏ£(…Ôt䓈‡3ÁnØÉŒ¦ +Ó¨Ï[ ¾Dã~ô•¿§øzo4K›ô£ðçQÃy׃•±ZO|V üG=ìÖ9b·FÜ™F0‚‰q¯5ÃØBŽTGzãÛ6á§š’é§#ŠÏŽÿ8kËFýàpÞßp¹ÜÔ,'¶˜GÅÆòx¸Ø3‹ŸöÖfçùûøp÷N²ùǃ0›e:BôOËI¶pMö†×ÎsªŒö¶3˜ÓV£0œràúµðr}a r£F~ÒúÊ"{˜;jv[®Çêõ«Z _V˜Ú»‹àW]°¾ôì³É?R€ˆåACvƒëýJæT3dWC÷oŸ®øÓÍÿ—”sf2É£% ¾½Û3 ¿ 0«Á΢/¯7ë¥ÂÚGC?å:ÕZφÿè/J“ñXúŒ¼øÙ¯úk¹ù£a³QM½ÿ!Ð;Í5ÞÊup?Ä^¼í°I&õ*nLíéx‚I¨´úbv ŸÉ%·§u¡ªÅ µU4:r­…Ÿ®†ÝoDŤ]AœÌJfvs6yÞtôÚ9©}I!o£ß ö;• j<êî÷ , øZÖaþ­´7UÊ /ÿN(+Ìh̯}À|¿ Ôkt4÷°£›á}+¡Ïè!V‹|ÿ±Q¹¥•æÝvãTý$Û÷Ó‡¡¯*üÁ¦TÈo WÉ94ÀåQa¥¢¾¤+¬r’iFX͘L*(*z Üã× ŸWºSÿQ„óÕ ¾²–¾‚Ž÷o¨<Μ¨Ãd5ãÍÑÔ¾2ƒÛÕ7ž‚±Å&ƒëaf–-ˆˆçñß}øó’bͯÿÅ'lð޽ª¡¼NíøÓß]FLüÇRì|Mú·oª"9Àü¨êô/ÉÉäó/ñ+ÁLÇá¢6/ýwª‰µJ(H4*s³0¡ê4ý-…päÿÉÇäÿèFÄZýÕgQYÉ­åákD^ô’£Å:õL¤–»ª–g|õ˜›#œ«ôRFhÃñ 9¸†Öh-ýÀ k°_~ÀiNÐÓK¿{,ÅUžâʬޖ蟧Þü¨ëÔn“øéY¨­ÒÒƒo æ8ì×\âî£DÉÙÑ÷<ƒ£ð•.`!–þêy2™RŽÕ2ý6ûx¹:JŒÃCgÇ®½‰ù„7<¢m©ÙØE ˆ þ£õDð²†üŽMtdMÿ’š"c˜;ŽªÆÄóµ Ê?žã?NÒÍl?ÕYøæ0~X­ø·9Ôì‘ÕÁØ.Ëo2^êîS†á?&ª_À¯vâ©ëP‰Q Ûškïe´•%Ýà÷NöÇÄ»-ahÆàñ6ã;sÒ7=z®S|oS=c˜þ%­E”JgÙ %åPš‡rµxÃÑ&£ïîlhFìóð°ítôxD­Ÿ/Ü”Ï3:Ï¡šÔôàù1• Ê&|­Øm"|È6æ×v%O˜I {STÁ^à8Œzhd›Ã™îiæ1â}gÉãøÙ䟯uý¯v)ÕthÃ’Éœ”ôhd„]Ñ<ëöú诊S{ù’f÷ü‚’j'ý¯š'Á&’mV“ƒÈVˆ\޳·Ÿü£Ï !ë¥ܯ4òً××á.[¹²S¼‘ùÌÿ8OÑš®#WÍéF#ü‡)Û³+ZQœ\‰Ý~Õ‰=R´z¥Ç~¦ç,½'˜k¸žáöÙö»Ô§ô¥ûgTÐ1¨e:ÃÅ¿uUˆ¹^ÒcþQÿqÈ–$„~÷ó£þ)~¥1WióëhñµmJaöÿ[eú—¤Pó«^ðç÷þdòÂýú]Û"PV¼¥Lô§Âš«ç”ôDÏDþqþ¼P˜î2Ž/gÁ`ÞˆA`á`TRëÙðYˆè&ˆJ¢"üØÚßl€ã‡C}rÿÑQHì܆ Üä9Ùh.ô»UÅ øÈ·p•ÉlG‹¤`bBýdøè«õE¿Û›Ý:›¹ÿñ;‘ü*—\ƒý‰"kÁ;´Äz‰DÿÝÌJò+«þ#-8ý"КÂDÝ-°þWA]o€óä•gðǸúrðõ¿2´50Ô]ñŠ»A“ÞˆÑÄú«àH·ÈÉØÓr3ˆÏ¬†«ò–<ä ý¯Âönúuß©”2jMüÇlª- ¨Da½~Øõúb9™,k Ø*å·á+æp2ï2‹wš¬ðøµ–Í6G页áw&råîŽrò\¸º×ºNþQG<Öûˆa]åAΗù‡™~q²”ðæ×>³U§Šs ײ;”ŒÆ›§6 üd%~r•siåTº'>Å—T„)¾Š7¸ n‹§¼KKû›~×['ºsE9™ÁñÁÂ¥àrE5ÜÀ­VÑÃã!ÈÕNÙŠùçðřȓ,¾¿8öoýÓ„ÙÝ/'´5©g? *Ó¸E|pF¦€C¹'¯Ã(LyÆœ»'ð1É?êããžÁbg2îËœ¡/ÊŠP+ŽUþñ±AcøópË Œ)àjýñ¾ðçqí¨×pG[Ü‚Ž+ÞAµ>k¨7IJÄŸD]QD³Pë5é°´gˆÈ‹3Å$*ºª5Ô/ôÀ{õ6’Û‘dcÍ}ÆSp­ô/Ù„®Àƒ ê-÷Ψ ¿„Ð_YõƒóˆÊ<‰"Ò©{éeê?¼°Çn<»õàN?À¯.0óo±‘î'y-ð8Ö+jÌ"Sü wS[ÅW9¯:ñ<@o/É’DPL!Äç:ÙK˧çÙÙì3ÑïFµg¤^ã yW\üÇEbzÞH5˜«Šbzÿá£økùQW4eh2#{°ñÑ,BƲè̾ÛQ\¢Æq¡™>¥™È7yþ£ï,!þ£ùûqúUýºÀ›J°ÓZèS†€ë–ÓïQÉ6Z—˜`[Ÿ*Ç-æ4ûd­‚öEfO#Šýºñ„9*ãÌTÔ’¼cQ=$–Éü?áÏOÚ‡˜_ûÎæùõW6& Ì Ïa#-7õçVü´ÈVB­¨&e‚írœ¿Ó_±MÓfˆú¼£,L³ø¨ºh•AÁ^iÍE!~C€Úü/ûï‡õ¡dzÝyÛ©ÎÈ­g þ# ‘ëbQAÔ%¾ðV#W!ÿ@%ñ«¹ ³RTZúÝàWÞÄÎ-‰{’ábe¤æ¶Õúi …vØÒÿ®#FyB%j|¢¥\rÑõ,«‰í[ˆ_òtÄ@¿ö^ØQK5zˆü#œçüGEP¢Þ°É.±ã¿ãCÚq6Ö=M…© »Bè?kÚ r‹æ¬pŸ¬è51uP€ L¡X(ûà?–¡¶z£Ä#æü‚…|,N…Ðc„^+©’]mÆšÄbOÁ+ÞÆb[õ>¬S/R“ü~#±”§³§#¼­bp¸ýwGÒ¿¤#*"ø£ºdWG°ÖåØ/_X¯/j”Gš«o÷pïyöÚ5Ar±ðüGõƒËxƒ?èm1•ÌÏäÙ¹ àN­YÝoÐdu€¡¸‡µµ&}_à >åÜ–…_9Aÿ«°úÝ­ÔŽÃW§~𠕇*>ø8úÈ|ñ¼AøÕsÃíT'ô»Þ lqdK°«u²üo€è,’†y/•Œ<¡ÆDå¾ >¦áÇ9W‘Õ¸+a‘{ÕÞÅŒ22ëÉäJb›_¼”U©r"† ù6:¨Näc›x«MÉ\Ñ_Qóâä!ÓÐÁã 1®Â[ ±ôÊX#{Ϭ”I讦-ù]“Pë5¿¢ž5^~ª]¢âeâ?Æ¡«oÄC œÒL€½>ËÕŒ3ê˜çy’GÉiÖâ‘ákZÉxzKÇ奥Sêrx”œ„ÜdZ³õ¡LÁB‡ÃhÔúK¹ÛGd1g©z™ /Òßô5Ú,rrÔd¦“?À¼ƒû'ú*ÕDdG8­—d=::²¨T‰;ÙkÍQŸGd? Ä)±= |Å]ó°ù]®2ýõÔVn&“›L4²LTpœ=e‡V‡wц}å,ýÄV½3£ÊÂyT¦Ijêý.£í*B>6½0WûM^3×Ì/£³}GòþìÜUK‡ÿ8«¸b*‚pN$‡N~•¶¼ þcS¢²Ð›«ókך.à€mŒGÌ´SQ2ÑÌË{x$,þü"û¿ŠØéx‚ÿÞ'¶Ô!úM¼±õ ªÜø'¿ßÎüÁéj­‰K[¬Xøíf[c´W ùo…¢ÿ%~õÐ6þ¼1¨F|}…x­:kiÔMÊ ­¢(J‡xøóâ¡öoDW\Uܵy‹ÿx…Õ)4½ ó?âÀp¶#ûh,fˆm‘ì¿{VyGÿ+kj«7¾â d™\¤¡ð"{¸MQþ»»HNσ°S±Ã»ÊæàW+Áq^sN–a›cÉ›ðÕ)à= r§†¨KáNnÃÜKÇo%ëk9”®XÑ›‚·²ŒœKöQŠ»n ö~ õÏl˜ÊÞí î㟪͌à)Jm)V²ÚãøÏš°¹+¶ZÎÀ¦T“k8eV•_4:pDx§Ä¾ý B_eA¥˜Ú”ß?ü*3±}L|ƒ5¿ö#Ê«!D×óÀããÞsήƒz/á*?Q 98\üjª2Kë–]”®Þñ ÈT%lþ Þˆ'õѺ0 ‹‘¯%·rÞúZðêx|Oy=¼ùµmåµ½è¯b)“ólÄߌƒe˜OõøTpú4ÄàPÎúPýñŸúŸ\_úVí£þê?ú‘ À¼‡AùL¦{š ІþªýK ›Ï²p ®FmXšÁp µáF|a4FÉó¨DÂjØT5ù§Õ?q¹fX}¦ÎÒ]7©ñPþ Ûxª±˜7Á:ƒ_­Å—½2À†.ƒ®fGåêMTU"è½T¹’ÑÔÆ$2FÔ–EŒý`aIP~ ÛÔ=òúøµf¬·¥Tã$¾® Ñ®G¨õº‹œDø‡ÉDsÃE¡þc³÷Ò —‘Ѿ×ÌAíÆ7¢ý/r!ÊÙû W{ðËþòs“¥å+Ñ˱Y(m•ùì|WÎ@>éO¦<œü#¾9Þÿ1Ý\fÞÆøFT'>¤÷ÕBËYaìs°{Ú…à?Ž(×Ô8œKEqL–à¢çÖzDVF ´.…}ÙLtú'^7vÑ»ÊêttÒdµÚަb(ê8{”ËZ9vZ« ¸)3g¶ýw]á)Êà?“y£ +À¼’ŸÆª%l÷òNXŠ8ðç•8?L á?º»XÜݽ çu•5?ê(Zw²Ê¡fMûhûb³’}#ªÞ»p?ñ¨Ph"ÿxC”â„ÿ8ÍüÁÿEÿö3¶ !øÎ×¶žD¯÷Ÿ|´ù+“˜SÞRK§mš_ëc+ ÿùµÀ¯nüáçÂÿòUÛm >¹6èý2ñ]p^uŽòL«,2‚_íU;þeÿÝbâQýwt²ØâAÂIo¢8k)ð%í@›ëŠ©è¯Âj0ÿ²å‡ÒP<½XGö² kþÜI¯F²‚=7ÿÑGAÿÄâUøK„újK­‡æ-:€ÚÌ'Y¤Ç$Nò°¢K¦µÔŸ}%÷ˆI´3“½Õͱ‡C-âù”¾ CWDbã2r>Ç…:ïþ OôJàÉéþsÿq®¦†>—I_!~8œOª‹¹²^xÄ4R—»,I¬7 \§´\NÞ´›gú‚§ðüê°8¬døÃš”|jeNïÔ»iYMc2Ib®Çú ¹lf¬!ÏòDßr[xGðÇø,í{8W6‚ü£ž¡øUKÎÏI|C-ôó}iú_=Ö¢Ð_ªñãqVÙÊý‚UÔs9Nnð²—©ÿX*ÆãÝÖ’qdÁzc!&_Î%ÃhuJй…^è(ê+kRÒ!"‘ëüöÒøLê½à¥‚>ó?ïÍ›+#oã3FÊ×ä¤>èþ£Í\œ>õc¨±êÂVL/kE¨-Ô¿õÙaûïþT ëkÃzëÁ¸~ÊCä©û@§¢À(¼¦Za ì‡iÿ@~4ÔˆG ^šÜð jã¸ÌX/ f £ß€ÿhŽWý®¸‚wx§§ ÿÕ2”´Åè_r€þW‰Ï›P>ÐhÃzPclGÛkc½ÄЉ…[¨·Ü…úó‚àW'ɯנU{"Ó?±¿1 åTvû*³8õç¨Î{ƒ~·4~n7÷ÑÍíG*&ÆÒÐk:ž`ÅÿQTí‘úâ“L1üÉÜXtVßHÿDwz¢7±ó +º‰ÿ(GÚ­÷}ÛŠ§¿Oÿ’YŽõö)‡Õ´øìÏ@Y\¯ çÒͰ×aÞ‡?óN^ÁU\4Ó1ÿã 쯙u U¬;8õ8ô8Z+ê:ÎÞå´V”L·EÿȆ5ÑÈcwÅ¿•±²ºÉ4ƒQÉžõ͸RÙ>þ$~Ýô¸`k=‰`J 4¨âØ…Š»¶MÔ!3@tV]OŒg{Rw}Ò /ÙÉ[#í;é¢8›©¶÷È?>Ñ~þÃM·*¨>ˆ@ðÛ!;Ç­ÿÿäó£‚Õ-ßÉ?Â*?"{ ?mÊ|xîúZBôWÖ*Vÿ’zj\ð«ýŠ¡œŒìBAß÷È6üª¾:ƒîCýGøóEÊsn‡x(?µ¦Ú(ÔþhñÊâV.;œzúˆøäy´ Øœº¢°(O¯‘¿ÍpÍ+ð-Äk,ðÖÁn[Õ©.zGÇÿÚlLsé ~uFä£F£‚ôý+® "›½Ä(yÑ¥XÕŽ¬oõóh ŠP¿ûM]¥G¡æ©Õá»ûq%¾Ä¾Ë‚ôWåà½ßðç£èPtT“~úᣤýÛI¦UÀ”L/ Ö‹Ìh4™Í«ÜÝBlÞWò¤pñ7±÷S`NŸê˜ÿ!ÂYqŒ2E«ÏÙÍÈskJöæ‡Æš¼òåY/ý«¦«öÁüÃâÏ÷³´ ï)eqŽ“ü­ùƒþb*jª°¹¨ßιˆw0=ÑXìrFÙ†û1õƒ¹ð ׸ç`—ù`üµÌ¿i¿W©Ä¬A6~B3†ÂôÀÚ”¢ÿU}4·[Aïo ©†h NZü5àh«rÃå)ÑZ„U§ëjžPklŸ*¨Oò4WºŸ~TƒòQjºyÄe~íc9ÌHo¬”M±æoÑÅ#_¨Š¢âº~p¼úA4Á«¾ÅFÇË~×cÃ,ø PÓËId÷¥¤¾ñN¦û2r…œxÒ„p+ûÑ·ÑÉIÔõNðG®ì¥²D$i'7xÙ‹¶üÚ1vhÈ\Nxέ\Ûrê‹ç‚ÓuC3ÿñüƒ~Rôò8Nnt‘‹–¬#7~¼TÐgkÔ®bŒ“YáÏû£¿ê‰‡+ G^ üj"¬êG2‹²!ý¯ðqÁïÑ¡°0þãd8ù‡¡&ÂxÀaQa<’ÇÀ'á’ °}I/½þp±íÑ`·=陸ŠÕ  ûŠB~r‚ˆ;-üùîPoz¸úUÔ%ÜÉ3Ұヂð+ê±­Yê‡áš’oxп}ž=•')é_rëì¦Òê…Z¯§ÈÂn°X¨ìðÞñ`^¶Ò 9häFU„Üá#dzSSXñfîÕ {ÿŒ-‹QüÊÝñcÀ,eÿº³_sp§[õÙtQùIÝ`Zô« O­Í§Ìõ;I½ÞjüG-ò,ýXî$ŒKJ2á¡b¼c½@e§«{ËNõ–™õT<—âè—{#s%=Bvqe˘¹˜ÂΚ¨¶Â¦Œ6Ïc“›rÏ%ä´R£B̯=£¬ÖªrZqÚãÊïâ˜>mUò‰ÔIÞ6,ä3>m4üÇIjŇš©ðJ>†+ßmCÍUlKˆ.ž÷É?fŠ úpêÊr2Öѱø&wzƒÞ^x¯½™¾ˆzœ:ö~æxã-¿!ºšyd“ üê›°ú—d›wüï}rý•æØ Ñ”þÿ¸»I_ÚÅjF¦“§Óæy!› ³kMê?Ö)?m×?ñ ý¯V‰œùdú<±‰¹"IÔQÊ­¨È®µÒ©­ÕbŽ«ŽÌÓj~Õ;ܼ¡¹ÞSHüGz-!ÎQ‚ú9bµ9„íøU]ñ“²ˆ–ú4œ¹™…ä.6Å0WŒ ä\Äí#¥¿jEÿ«Å¢HôR¬e E°ïÉa£­ùQé@J[pÝnÄÂyõ.úÒÊøkÔXí "îÒ° ÝÁ˜nbë¬úó/ØZw”›[ÉLzG¨¿rÒæâqz€_mçÙ]Ȇ¼°»èfQ&y1Íiþý¤K⻣úIæG…]ñëýÄUjªeȦ£6HÍi‰…?ï™y>žÌ`ˆÛG~ÏSüÇ ÔWs¹Æ{ÖôöpóÙèwGñ¸WØìóx†âxô»\K]ϵ¨ÆRøÞ0¬´óžœ§á®~÷ú« b÷ºþ7+p.Ï|ßšó>S„•í~õþ< þå¾ã¼O>²¼•ZÜßú—xáW̪B%õ˜ŠÄ—øË d3ßA¬2Rç[Ú ¾£®QÄ¥èX,évò~ôOl,Âv牢&ÆKv‡¯ßÿa3.cY¯ÒÏI„ò!].Ñ1<³=¾q•^)±¡•x7 Ó:4òGzõh¨óÒWýLþá÷äÿQ—çÇb+Œ*²<ýýðGèwØOå~µU6óÙ̼ªŸd=ÑeM|pãPë e`ØÏÂBåÆ[&—ZG¦ÑOÖÞûè.¨Òo䓃ßRƒüc ÿv ¹;”Ö(*Ÿ„¨ŒŠþj÷çNF›ï¿FAFÁ´ ¨’RKÑÖ|xdg}Mjc¯ñÓ¨¨,D̤ª™XýkÛÙ¶0¿ÖÕõ+ü¥/lPr˜¡¢L`‰bïļÁWèmŸÂXl£ÿ}vø³TbJ£·y—gÓ •brøÕ*QÝqö”@­.5U]ˆ—¤Ì€%hcœ¯šsž•+ÛL§àç`Xóé_âM·¯rt;œk1ˆHó ,\-4ÓÌ.uD1'©ÿX$ª€¯÷ÀÕgþùw*R<ñ”ïèÍòˆ:Ħðç÷̪öž°êïÉârp…}ð®ðç#A'N³·JŠõŽ;þ÷>±êσѶîD"º¦ô¿úžJ[ªTdw-°T+¨ÑÁ¯|à?þ¿zi›Ì3­-Œ¯/[Ê ¥RG(g5‘JkÍüÚ&jÙPû7¢«+F8ýU;ìL=j5Ré•”BZlJï þc&üÇ­ˆ úûóÊ5¥ l¼/˜ˆÕ å<\w>TeÄ|ò[ØæºØÿ™ÔŒááöaIGê§â)opNÆê³±~׉|S AÌÄÎMILW…J‰Vp#ÙõNŽ=v•_Ž£t#‚¹ ¿“ÅÉLüZvº™tÔWb‰ó 9Þ ‡w˸‡Øº¼>VÁS|¤za'»= Sø€½¯§ïUÛÀiíNi%–~;yü ÓÛ/|ÿ¸ƒÒ(UT”@rhŸ3½êuúz ãÊÞÜ[Ý!§ƒ5}Â;=ÇŠßÕgé3Ém^éOÅ-Ìêa|ÃkWEÀð‹˜oA®ÈÚðé–ò4Œ·Š«´Ñ_î‚9 ë?^+qÐ_5Åm# ˆƒþ*l~~joɧT<¥›àWªÓ·0 ]«P/÷ ¼-#ùI10àäÌp ¾[›Íâ?ʱžêÈZâߢ¢¿Za”§"~ùGRô»¦Ý“jQt˜_-/L¶üéê&T‘aøw‘xÅòâ%Q›%"¯X³0\{¢éõTh$7‹Ò9ö‰œj46¿²¶Ëîh¦Þ¢FÎeä“Qõàþ혢½OÙýUN¹•“6SºÃ[ùG7ª²GR­qÂÏ ú—ø£Z沱ż¥Jøä<à´½Å*Çíî¤b|ø{ì‚mÀ~3ÉmD×g©S²fU÷‹ŠxþG~¥)=èÿˆî…/)F|ÒKqU/‚/Ú€Å=ÂÞ?Âï*¥ÓfGð¶mšVwV8…UVô¡Üó*øo¬„',ítR¾D/u«r|™¾þ#lïØ_Ï1Òþ< ^1 :÷QTóYxâ üÓZ²úÒúHP—/ m÷ñ¡—ð#ñ ·Ñ_ w~íeæë’–»´¦‚å¹ÃÏJúÃvÐí⡦7·<ų¼õÍ<Çød ÂÕï³Ðvˆ© kËÑä [Ç\¢€ÉØš)`ÿãÈ!œÀ¯îœ„I¶2¹@ÞÔ 9j¬ðÑ+Éò•Ýã{wÉ àW±ÃøžêKÑŠ7ùŒæ0(ßSÝ4V‚_yʪ0Èûèõz|§Ö¸¿áN1T¦‡n¾bRž,LþÑVX¦ÎÁ0XyšzçÆpºÓr¬Q˜ZöÂÔþ þã°œbT@»<¯3¹ÔC*j².ò½hñk›Ø¥µ²J¯‰y¢§—»‰(Æ£{gô‚OÆx"uØw`ÞÑ·d(øS{üÈu]“ɤ²¢_Ë ;ÔN,s¬wHÙ‡~·8ÙŒ¿î'Ë 5·º »QYÓ܉þê¬ùÚ\DuI<{rØ‹ðäb“É3°M[ÑmOÑ+Ó_µš#v;¥Ö*ƒ 4gØeJ}¿ÞÃ8Oo‘Áf}*á xævú£ÌAo¼Ng•ÌøtÛZjT%¦K G“'[\~=‡ÿ¸HÿÝåØºø«û ¦ÝÞ#Ó82%W;³Ý Eoz³¦èwïÑÿª0ò©d+Ý)œÊ¼Çüÿ“úóëÌÿžW-è|™2ÌÎu¼†>¹o»®LUóÑÿª(ªžJ¬²–ùµ5ÔøøMÌ «püïËݳõ¥~°6L´3µÜó¨KÌ WnjM…M«„~·ŸZ⯮³¬XÀi~ΊóÀëQÑD)¨¥¦–0üyi1Sldþq”9½EÄ5ðô#섉ÄÏN2'–ÉU,ÆÞÀ}XóϧÑ©O¤æöÕ¦39µ=ZÐ9° Ó@¤ïãÕ2â?²ÉU:úrìâ7‘‡5FbþGr¥#üyýÛÀwÌ)*LçÖø¹³ø£‹XQ]úƒËÏâZóè"ì_òSˆgè¨cå:fð½Á(öÂXýKfáŽqÒ^][6“ÅÔ?N K¬¡þ<xSø¢a°?±œ`›ìMæ>›(÷5yØ5|@ >Õ× ,ôyÑGÓÃy×}”ÉZw¾Û qC2žSyÞˆFŒ7 ÿqBûÆéoná…ïÜÇ»“ñзÛ÷ûÞ;d«€Ša ×2…þ±Îœóí|ÿ*]æ[–éµÞkgqiÀÙn‚œûšÞþ<ìì˜Õj´5QÚœÀŽ÷ ÿð ƒ+FÕ„Ù?þ˜ÚƒLû«BµFG²›Rd*ã°Ðmè_â&‚{šþçZ¿(ÑÀ¯éèõòœ«ðÁsÝ#Èñú1ä 7M ]a$ƒïÎKÊu*ПáóÝ|¢;]È»î¤>µôpOµ¹£zäÑaÆ\£ÚN0w'ðöxö(w{ÀÓÌ…MIÃJïáÿ}Ð8TÑã…™?8DX §ë<•<ä ©ø½ýPÚö1¦£7Ë—’ÊŒÂüŠÓxŸ…Ìë`Ê.Þ¨5J·‹`N rRÕ[9./®R‹ü#?ª°øãä»C`nr—1ЯnÃ4¦®¢õÍaFLØjôo÷ÁÓo¿ZÊo?§w“ëù(»Õhêî±s/Hø/ð«>t8î5ƒº’M MSéZÏž²Ÿ?ß•ýÍKä—-Q+d—Ã韸1„ÿØCþQˆ3Ô’=÷åþY}õõà)Úõ¾Š/_ë1þÇ>+¾Fl¸›† È™J¤Tý®ÿqNñÔ¦‰  “žÄ~õõMFû%jÖOátMœd±/¶KûwtgÍéÏåed2/ËN¦^(á6_ˆƒXÂb‰ãŽÿ½O|mÎ!ú'Jøó°ÊÁÈ^ËOÛ)eú«ÊZXY ]ÚnëÈüóÔL@ßDýÇñÈ.ô}×mõñDH5èÝ1HøÒ7…Ú_Q˜õd)„¯¨Ô2¡ÎCD‹§Û9Í/DIêB¨3¢éMÁ¯JE”1È?¦Q?9†ÿ uöùÄYìÞVÞõ<0äÔÄ4ñõVb#ñÜ9,XvV)Þhý"Õ·‘Ö[[‹ÿ¸¢3“«{Cìí‚ólä(~d9Ø[Q½…rÄ@º_'¥/ùñ!?‘umRbò×DùKá? Ë7x·ø8W¼ÞB,i×ñ«›êJ|CCrCDÐ*þ²§°4êËÙrÈrîø"ø• Tc pŠØõGÿýU‹dE‰¹ÛÔEŽ$ÿ`";Š©Fú.¬ŠÂÉzC4u“ïj?… }µð*ÚÇ(£´Ø)G¢‚8ÌSkÊÉlÈ“‹Ž"ëŠvIKcøa£:Ê# Ëx7•xyð1 Âñ¾¶âô@F¾3–XÛšÿ±”Lrˈƒ§¢ÚUñ—°‹·°ÍÅ©¡9†VΓMÖ²«a»ƒ.RG º/‚Cn¥N£›ü†& Çèb¸à?rÒ¯ ZØ:¨°N“ËE%—»(Gà_<è¿Ûé·þ%w•ÔÄM`æñ}Ÿà_¢ã™\ŒLh¸¾­AÞ}™”Œ§ñµí°¾9©È¾€‚÷˜ÌR¥ªÛB—6ðç•@`ó.·‚½Ò©( ^-3“1Ñ}<µý²ù e7ùBwpµªð?Ó¤4>`Q­þ% Âøf"zøÔœr<ÙÔMêÌw“é_ÒÛHÀüÚÌäì¾x»…\íE^ «¹ºƒäed4½¡cKÇV*+ñ®\UVyˆ wlŒþª µ-™J5ÅîâúÛ(“fÀ«7‚»žŸ2–;Îj,æÎOÑ¿}žc½ÃJ€jõ§¼Æ>Ý/K£A`Ò «]Äoa®ÈZó;þc1>3ùÇ]s7uü³Í£ õxÚÔC‚_­mgo%ú«| ›-ˆ~Â- 8ž‡ÔôC –Ê|Ãd§§ô`lDýGLôa®dKYáG刵ì²;1L%ùL÷tìÂËJ'æ–ãŒuc¨¨7bÛO£ß=‡N·&ý›šýÐ_)öüŽêÆ;0¶Œ¦3YWJéÔ?ñ§8E.ÜPx;îøßûäýƒc(ød¡öYä¯$*¼Àb5!ÝÕÓÁ”f[ÕUͪVQw)Ñ”[‘_ÊúNªÃfŠLÄ\ Á2ÁäTÇ*1E3‘‚ UW©+ ­Œhñ¨kcIË`I\ô%Bè•òø¦Ä Ð_õ!ÿ¸Ñ"A@ÿÝâàW»ˆh±š?Lu1ýFb =7NcÁŠ£_˜uõ.+vÓ&S?8ÿ±[:Ÿy‰jïØD¬yÉ=R’‹WAe‘ ¶Îˆ„ÿÈÿaéwÓRGR˜ü#=Þä‡è„¥xEô{”çWnÍÝ]Âß ÒæEð¶_ª[á#ÜÈ~öü£ˆ£7¡CÝ….i*¸Ç:VÜCþ¡‚Ðø‘MÌ›BÄ#¡o_‡ÿHOÄ6‹ß:üG'|¦8t$¹†ëiò çöñÔb,nO°1?ô»áõ/™ÏÔ„:XñäÜe}>îå\–ÂË~ÃÌГ¢_Hw<ìh3ùÇ^øžÚäÅÈÇÂógmé™w9þc&¼®3 °w:“ÎÅXw/Ð;ºÔWxƒ°ëÉŽa–à¥ãËñÄ6×Cߪm±:T #bI.ïÇŠ–¦ø4¸·B\>c]ûü¨?HuD)º˜ô%ß©‰ŸéÞäIEs+¶:6©›ˆ·!ÊM0òOÉùÒQ£Wt[>!ïa®"ÿHh¼/J†µ4,ÀT´ï±«%Ñ $ {CÈK¦>5u/vE^2ºDqŒyÆc2Ñf)¥&ÿø†ZöŽœÀ\ä™á…âÀܯCU‡ÌŽ¡Ök#ròTN““— ÿHŽŸÝBÿñyÆ ò¡ÄöuTø%bª…|ü*zrÜáY.‘n¼w_ê!¥äsÑÝqyßmC™^€lô wy/>Œ)ˆ_ð‰Ì¨ºÆë_6JQÿÑÊEÚ^ôò#÷Ãïl,$ÿ¸¨»…@s¶+—Õx²,'êŒ~Jæãd\…j2äJ¾ÿñî‹ù[‰˜Ku™Lîìb^ ·­Á.Ï/‡’+ìõþc§rD«À™p#vÊ&³ê øä€èÓrÀJÿ]?r£1ôo¿ÿáffàÚW]ÐΫÔdá=Ñ?ñ¢Òf~v{'¼G!}úÝæ žß=c#qAwú·O±5uÇ¿]s».]áÏ[cÆÀJ^ †+B1àx”ÿß?¹is Ñï.†2XÉj_Dþ åókµžôoŸMjñ=Ô6tooDý‡ý/õ»lsµ9¢*3ºS‰œd]uóÏkŸ·Ð¾ª-Õ†uIÄzâ…¢ZPô;HD¿ÊªeÄ6çÎAú«ã‘ìŸxÿQTXõk°s±Ÿ‰etNUPïLfGµ&êô¤ç|,º½ÄãkIÿ«u Ôj.ñûDüÈm,gl²íXrüÇsô_ñ{ô8zÇþÓÂ972ê ø×äಠ“íL­ã=©<Ïÿ5²šVøªù<ÙNZÿžâ'u6µ&Ö}ˆÕÿ¥ö¿º”ñà×µa™U,þUìТñàÎKþÌ )ÕX÷¥Ô#Ä#óø,^ˆ vOôåX|w}ƒlEmÚ~Ÿ5e$W݉üîšðÔ¢„s• éúP)¹œLÞ± {^™kk[“XÔ“ã¿£‘tUä^2.ò:Ô¢¦£ ¾Ýù?Åð«É‚ ½`%É0$9ŒwZ¨»;¶î$j­þíωú­IßdF~¨ž‘t¡~ðvðRAŸÍV'‰Þ쮄pøûxNŸ¸Ÿã¼‘G²‘Q€ü#LfºƒÔÏò“íd2Øçx»ODå …§{ ¿)‰Éœš€–͇Ó}Ì3Ï€–8 Z® AóÏ›™ëÁñ5úƒt¡?ãB¬^.ª±O¢£µG–~7týÇ8õ.øÕ:ž}9¹b+Nm߯ß'Ðï¦püé×W#÷ñ‡m/ýu­™[[¯XÙÁQòrj<È å; —¿ùç»m:ýKa’¡°½¦*Z.º ˜hmsà?4­žjy¨Èÿ“N¯|…fqoh‚ø$Z*ɵ¬_V¤îb Ø§FNa|F¹©T§9{ÖDªåXº4äÄ1˜ƒ»[xƒ]U浨X[E°§Ö‹Êgw¼ÆxâÝõ GÉ54,Nn"ç8øòì’ê¨3¢ë #ô‰• `¨'DJ²jË ¼!oiµ»¥×‚õ=HÄ|¤u7¿©€^CëÁS¼¢NĦ6##ÚEý‡Î‰Z« ¢3vg.Êd ?ñ üÍú':ÿaÍ˜Š‹†z!Ý V²Sý„RMÿ@åÇ ±¸I$õŒü#«1”õv¡PlnÿöYJK­!~r—2\ƒ?ø”Õ!JóÐßi·ðûÀЛÊ-œ®ÕàuÈes¥DÇÚ\ð⓹1ص‚ô/YÀ›œ ?‹5,t] ?¤ßÆ œDÅûáTvâétæ¤øÍ¬TVÆÊo¢b£o³WX›špÏ ü*·`¤5ÈæT¡oßJ@ÆpLÐftbþ`ËßêÏ(v¼QW²/ð&iìÅožA­•=Ô#­Íèf~þü,ö>™áÏj¹ˆ²€ôûÂÎeÄî_2ýns²²;äD«du0)g”µ{ŒŠ(Š÷›Ëͬ (Ï™’ —¢3ÞÍIŽ'ÕÁ¯öQkØ þ£f¨·Ü]”¿:ŸR„:ý”ø.oª‡ÃŒ6¢Û—a]R“¸Ø¸+½¨} Àc®#ÿØJ¯ËxAæ)…àÏS2Ån8˜'^-5\Æ2ú·{s÷BÃÕ‚®Z±£çð¯°ÑÃd°ÍÀ¯vÀȧñ\´sGñÁÓ0Î+ÇÔÌœ†'xð}2&9ýt 5¹¿6æÄy<¹~p†ý3š± ð" ¨1ÙÉ®®Bn–MN#W%‚±ãÍŠüGu¢•cì¾TÜ¢¾¼"|yê$}PSÂTezæ[Á~Sí·×œiÔ$²IDϪBô…¨wuì‡J?jŠqê=Ùñô5Æû[³ýKÞ¡¿ÚJþ2ýî-ò¥ÊÌÏ„‘D¦õ÷©ØçŸ‰Z°å÷zÁÿIÿÝ3¶¢Ôfüú'ºÒéÏÑã¯oúÃÇxŠŸâ¥:iÀ¯¶*–~d3ó«ªyÔ‚ên|ÔßùK¶Mø؃’úB…žZU¨ÿPD7QLk§ÝR[¨•Cíß?\”ãˉÄu"øO¢3 ):8‰Äz %øUj K3oz…ðSï:¾û¿}r‰þ‰Á¯Ðª/Б ¤Öê0ÔR,b§?Ôǰ³,UWrÑ=RóÏGjCØ=]‰ãg‘-ß¹MämùÌr#õkš¬ nTl+e$øó|ÊüÂEøó àÀSÈ> Sgá‰>üøÕUò£dDtÙqñ3}#¬|¡nÀâ·§þü6Œ÷²åfô/)ƒMœAœ^A.ƒ8ˆ†}}=]‡þ*¼lÁz¢ŠRB-L¼¾€;ÉVÙN^5»þ^ß,wâ?Öȶò §ö)å:þy^î1êcOM ç]ORFkÀÛír&LÉU:¬Ñ4Ñ£èæK(ØQOÙ4ü–r)ï=.ž¦6³+~¿Gà?VˆQø®1 ^±Aˆ7ÆÂÏÂê/¢Éêƒúê\M~þþ:Þ €§™øt.õwÂ,9SÆj¥øûäý°ÃÑ”¢r­º«µF>¢È$0ŒZx‘AÔ4"«Xþ2šþíÍ~›ÿSÍ@md ¬êxóÒ—è"^#¨A<§=ÃQ7M¯_z[¬…Ï q—z“c2+õþ÷•U¡žáLUc½3°a ñUä=¾1lhŠâ]诒2ð-5oäx£YH-t¬ËÀ¯bt…'nŠ&:…Z¯«¨GrSQGE3°Æ4Æ¢ÿ]šœ®‚É©÷öçÚÕÌ`Ÿëশããîcó©<Áókã+“”ÝÜé yMÏ*O’çwƘh¤’›í°ð«Ìºæ3âú³0 3ῚÐï®ÅûúP=?üã,øqpÿ’@%P #ô^¦f?_ ¯K®§ZØüta|÷½Ž|+#õç‡y’•PDz÷š°b.òÛŽb¨éˆÝ¶*µb0³ìì2;¹­;ói³Á¡td~íF4S<Á>è€SRõÑIR™ƒT*ÖæìŇó. 7 ËÎ?.¢ßÝnÍ»)B•×tôG±»¡T¾A-âúFްÆ£d·w¿ûÌ5Æ0sÐs lÇ š ªrŠÓYR,³ÿ?ÞǘŽEéóõW1•£Ê"xŠNôß]­`Íõ¶ºj+ú·—WÀ±D®»í¯{¾~5M´!R.IMÁO5«V/¤ÓçÁªîjèøç×Ïýécq‰øþ«è†¥i"–D/Âü¨\TûMÕÑ»l!ÿˆ\‡àGÊ5¥„¸M²&Ô­Å‚¥"ÿÈDÿ/} ñœÕ¿„j ꟻˆðê¦Ã^agm,“²Ü‰¹‡‡¬„‰¾ÿˆ%‘»¯A3u‹÷F´ÿȉùQ”îøŒÓø ¾ËÀÿr£tIJ[ÕV}°…_ÕÃr0 Oï!S[®ÿÀ’ZÕÓc©?Ÿ ·3;ˆŽfºQúQrš[\oLð°›B䳡ï5’Q-@¼>…«rfµÔäU]x+?uØx"oæ¼êè>òï]¼ÌlNæ[´}Ã_;JªÕâ;ãÊEüìu2kög-V‹NÞUŽùÁ1A†º’5ì€yØ€ÿmXë/Žÿ¸m+§ùâßÃôŸŠOîçε¥£w{ |Ht#+^à È]"Òì¼£sì$ºŒA¿›é·ùQkÑïv¶|ЍW0(ïA·“ÍØàÏ‹¤‚¡ øU£2lE/žž èØR™ÿqþ<‡ãLþç¾U¾‰âxÈB|Ïmâç}ä·á?²QqþÎ`ŽÕtLa<ÙIÕwEüÇ-®Õš·ËÜTý•âjÅ)èw=ÈÊžÀå^†ÿÐa+nGMÉ6gûSúU5Eìa´3|ˆRÃvÛáWö£¦oL˜þ»î"?>f>2þƒ r1–~•(ð[™ëšÞŒi?ÿ1þWgÉ,ýÕ|àsº°–·Côo¡ Rö ?oâ63úÝ)àW•¨3I'ÂÆj3ºÑý¾üÇps5ÚmPÈnįÎ#×ËnÌâÝ=Ò{ˆÞŽÍwN9§¦…zÈN=*ós¬>'µ¨¯æD^ó‘\a×—‡Ù°·è¿Íèg>e/4´Ôkr éòó£¶‚_1ÅÿqŒ÷›‰Ø¤ºq‚*ñð2þc%•)çÀÖ¦R︵Y úÁï¥SW{jvÉntCÎOLSß± ï0p™h¨OÁ*A„³žþí÷Ì^ v÷é²òŒ¼f¶}ý zê°êßàTn’cf3“чìšÙ÷9½Ôÿ$ÿ¸dË¢â[%M¨}æx ~òÙöF¥æª?÷Rò²Š¯­üy6ô»;”w¶‹®ò¾ÛRSSŸœ.3‰~ªÙ‰ñ¶(_5wQNódþ`CÕªPŒü?ùÅ.Ö2ññG‰战z+¥ŠfÍê-\Á›§Šõjä®ð¨òBÉ+Îo‚AÛ̉qâ„:Ó¿d xÇ5rû:ä%ýDlê?Âvµïz[¡ßÝ&Úâ?ÆpR¬hü WiGQ™¤'£|Ž]Ô±{ƒõØzsG ÞJÖת)`z ú+œ~–º,{¬Z±èyÏsµ–"x ÑúÛÀü¨!øµlÒŸ» ÷Óä´.ú×VôÎØj䦹 ùG]£YRo~_E¼“ùÇHy˜“3Ì{‰«JÞdø˜Ý\…fœ†‹=G?Ãt¬ñ ,ѸUÿq‹zTÆB¼Z^Ы—Aú«‚èwï+»B­8\ý&ºÿÛ-v”N±èVµõWiæW¤—Ç7ÖëʼÙ)F úP–å>—2«C×¼Æ/~ÐBŸ¿®">ª´³dE°ûÉáí×Rÿ6 5Tê7P]—Šy§ðvk©¿!GÃuw&9Cv–ÞÈ)ï‰ÎŽ'(”öÊF²ú–ü¦“Žõ|õ®T–ë5fþÇYc ë]檆€Ùy‘çT…ÿ8lΆÿˆŽÎÎ ô¶{²šcžW–£˜~_X|G þãO°b ®z.±N×Hô/Y¬¿á¤ôà'‡Pï7EÜ2¬âJÐk&Ý|‡«EA¿F´†þ% BYªàG[Iª¦ÆÓ̇ÏÍ»ÍÊ-ðHVýàB4¦KA@¾ò~€_=ÄKMƒ9Í é¦½^ÄñÙ@¥¿V‘ø9¾\BŒq…Ÿ«§mOt©Ë.z,q]ûúÐlÆß¹ý®'õ£¥`Ø+8N®c1Ûe柯Óáz¦cÍ“¬ãûgà?¦p§³QQÅ‚‹ŒÿØIe^aü“¹óxXê ší·úómj70ÉâdþØðîpÎCøî’ðá·}¨ž¾ÿq»X–¦%˜‹+‘ø4ø_«ÿn Q8Ì3TÕ¨ø¿Fä£+˜‡û’29C.øóóò>•#Q£~4cßd[ÉúÁ¬ÄÛŸøÎŸØÔRؤ÷L ¾[›­ª ìFµÑˆ Œš`;Ñè–kõo/ŽæçS'ž3ÿ£•Šƒ˜k»œ,?s3N€¬6g>pèþ¥D\¢‰@ÞW%ü/34éß~F~)•ñì~ô¿ÊFOø§ôcô‚¹ðã¯âݬÆ>Àg–’?D½àË£ûzžœ+1‰3Je½;ü¹N.ÍÒtyœïq ýÕu:NÍe†å?Vá{ÇÃdà7&”—Ñ‘t¬·^Ù¯F#š²fÖ{cï³òLâ`ïÁ',aý|”W#á|¢ÙóÓ¯j|zôR~Ä5­`øËÉ™ðcBàW«•½Z=b–fœ‰çT1¥!&x†6O“VÙ\Cu;½ØúŒT£[Õ.êûiÆ#ÿ(Ê3º rìÂsðçóDivóÊ8±— ÄÏ5õú8ž¦Ž}°½3õœÉí£˜ÿÍ~Ÿ‹offŸœ’÷âW£ÿIÿöG¶ÜJðtÐo(çþéüZ ¯<‘úsw-õƒUØ­ÛlU©?ÏŒ~w·òÙvÞñ>#óÉWÛ¤ úó–0 ›ÅUæR%P§(·µò"+ ¯ª‡êê¥?Vë õçѱlVý`^¼U»v <ì¼dïz`9&ÀãyhS#xŠv̨͋Ñó!2 o=“4â{'PQq]ìU,ëæGÕ`þà:"Lä^Óã©Å¼B‡¢‰Žõü”#jLüÀ%²ï™Wÿ¬ß°ÞUç ¨íKÆœÀx¢µøËÔ¬G m¢H nÚ¬{¼øD1ÇÙ;¤œ¿ªÂŽ= zš…,Ä“ªõ ä ¨¢O¬¾›ìÀªZØ ¿ wžµÏÜMÁS”ÚFî¯-¾ãÐwу'¶;¸œ˜¼)Ve%ìȲçœÊ›0ë³ÅŽ?æñ•¼jNb°ù09ÿé_buvô"¿Y'ÒT×ýœ|æ9¾ô1õCø»ýú«àŸÁ÷=UéªÕçi%–³¸Ÿ»X.«û®Þè '1š¸­½Ç/¹¡}Ú‹ÿØVç˜Þü¨«ôß]'æá}FÊ(¬¬9ˆ-¸k¦¡G]Þì«îbö5jùÁ·žð<¬i­Ñ¬ºìpæx©ÃÅî)èЮâ&9åx#'ºäòæƒÎi¦þ£¶q „,¨kTÀ%7º€_5ÿ?«ÆgߺOø`qé¢Â}ûËÌø¢{äÑ]£Rù 9Ì0ú'N#C*B¶tVã ,ÁÓN@Óàgg³ SW,ß ½1 {î.±1nÁa'µØìª~™êÄnøµ¬–þ<†ñ‘ˆü9–3j˜ü£ þƒY½0¹`sœð™ÞÄÏÉðéísé •–~…'ñG‹Q>Â'¯Ásí„ùÂ3)$EÇå%RzÑ¿$Wu4ìqDw*%?â7bÒIj–1Æü*àkT½L%h ϰš7´˜g]ȘzŸ^EÌw¬·_9Cýyq¢§ú%b½OxÁD3Ë×R¿>•ÊËYtPLÿ€úl…ƒ¬á6qL 8•Rd ÕÑ×Tqœ½ƒÔTeÏ5åùå9ˆÍªÒŸ½>>¼” ðPô\×ÍÚô3‘ð+Y¨Nù"÷š› j¡É;£ª¨L|D'ÿûç*HìRÑŒ¸'ìGqÝ›lŽjœ“0['ñ’½ìñ)ìÓÍŽFBªø·wv4­9,ŸÁ¯>‰]ìþ|!*^~­üÿÿãm[Þü‡ ÿUXåyd¯ÁP.(SÀ™šk àÏK²[ýl­è“[T-Fÿö/ óÏÛB¢òÚàK‰ô1âŽúEµ©Ëéß^T¤ÓÚj—èõwú«râ§ï-þ×8®¸ F( 5;ñhQ’N¹³ÄžHöß=®|Vª‹“ì/,̬çOªFã2±f±4wðyõAÈÒRUr'·ÜT›¡í"/ºƒÿXH­Ôbn´ºTi%ÅÒ&äc]"Œì.M¯èØÃZ¸üGVý`âvn*9KaöWìç-;g¸û¯ø¸ú\ýj¾¯62”Uù}Õ„ÚZì{O~ûþÿSL„u_¶žh¯9=!¼`¸ýð'ã.Odš8Vùû:ÖW¢+…ÔüàW#°gÎä?|Jkî™É'r9ÛbÄ<Á\ã=°ÀT”œâ Ó‚‚Á+&ÿ¨ÄŒæ‰_¶¢{Þfw¨§(íœèõÿñÿˆ{ ð(²í{»«êÔ©jÜÝÝÝÝÝ‚Ü5¸îî®!d ¸÷à'¸C ¸|oåÿ£“Éî÷ܹÃ3¤Ò§KNmYkí½Û±æìư¨rð_EA˜S8žÜÕîã?¶‰éœMp•ÌÔ°¯'\B½ÞbêÑ=åAT«Ý±È×é•‘üä^þ*Þ-u…Ëèíù d©àWÔ䔕ðÖ»à)ú âÚ× îíDÿömhX/Ã}$ÿp¥F»«.ÿ6ZˆÎpÉ-~Ñï¦P“ ÔÓÜÆï½$HJÞ†Þƒ_áÏ;Q¿pŒ äÿ2‚üc¡¬„¶!½ñ7xJÔÝ+hXBâdÕ†ØÆ½íÈ$@WüGTcõ~õ鵃 ºløèvwã¶ì ÿaõo/A¶ÜÄÿÜQO j9­ç.2‘—ãîU@›+ðcëQ÷A¿;ÜÈe÷Á{äd’÷ã5üGuó>y#Ñ‚Ü-4ÅåmÑÎqxÑ• ÊL==œ}ùÇSöî`ª¿Ñä#³ã—K¨¼Nÿ]jôV)©ªKež¿šL—€$ðç)àЪ…Bs(×Ô¨°V7ñø‡eA"˜3LÞjOþQ~;%ýA^ãCÖÐO+wåÕé_r,¡#w¿½uš¡¿jãxövÑ¿¤ Q;9y,™˜è¤‹ñŸ6†LC¢¹O/äÇF˜¸XÀlmÊãxªfp1å@eWòŽ]xEŽþª1¹øHb„ T“Øí—©ý?OâFWàÉÔXþ#“}õ/Y˜¾œ¾5¥Í)µxÏÔ/j uƒ¢Ñ¿¤°6D» ÿay¨Èÿ—ëÞ ¾¶;O}!V¼ &(.Z2žÈú¢<ýꦋm‘ì_?¬çÀ>7aaVq ™'´¹X‰½¹ˆ6¶ ?ŸAUb™Ž(]Ñ_­ìKq´ŠÈûV0*¹ôÆJXó£>Š2ÄÔ1õ2Ž=Ñ™×VzÀ.œiˆß2ƒ_áh‚ðN¾¬Ÿ-—µãÁÃÄ>×]µq¿¹Šñ´u`:íÀrŽè£È?Fá{æ¢*^.GbõJʵDì¾ø¦(ø¹ãø‚âx„ó£)Õlø«~0ç›~½à9¾è3är¼äbpÚá rˆ³ø"+ÿ8CÿÄ^Ú×pNw¨q!¼ZÞ[ÿ±‹'¯ ^è5¾·#õçÉ„fìƒY(…’*$l%Ÿ…讵!¿.÷ÕVV['f‘EM€ïÈΰ–è`!Jk~í0Î×v ŽûÌBZ”WÀëΡÿ!€­Þ³äu˜hC„š›öPZd{±7êÉ/trÊhl0rREœÆ8CþQ–߯ !:­¹è{áÚE‰_øtjl¼Q{Põx±‡ä)ð yðE_è¿Û %Ò~üÇ[êKFÀ©O…‹( ÷ÁlB˜›*d®1ÕÕNwzŽjrtð—Ñ_µ}LˆÿXˆÿ(i¬€ANƒ«ÙëÁw÷¡ñF…oœÂÐñ1¤;ø`§õº‹ôäþì„rä ð K9˰”öÔæ2Úoá?6Àýœ þ| >d'¾5¯TX^ ¥ß¦L†ÿ(M~@Ìs/çÎà+¼´Ž²v¡1¿qž™'÷Àí–÷1“™w¨%™ –Á˜Su“n!ùÇF劚€§á ˆã™‡5ïÁÙäüj›>FRsõç‹èšø9xz‡L^Jó1þ£%÷=¯Œ_…äþ{•ÃZK¼GOî QP,éi×{‡1O†–a¹`I¼A ZàU¾Éöæc{5¹|EŽ`ÒÏ-ã§L`©+;ÝÈY®Øå`¥òaPºä1샘á˜Ý>ÏìOýàyúb=“Í̼’iÐøœ¯â&8náÿIÿ«~0„ïŒEþ‘Þi_ü<ÇßÕ¨?ŸAÿ«Öô7Ü\ÿ±ËÖXm©æ¦‡ûNåƒíúï—õÏl³µ9Ââ¨RéÅ«àùQ£™Þ’úó6ÚYtÁÖ¿½¨ØIÔôÌ÷.ìßh]wSŠk‰ÈBKвxøÈé¯n)ç”òâ‘–qï6ödRbšlà`[Aj¯ñTV)™‹þªe¤æGuÔi;@˜>!ϵùH4ßüê%üÇJ¼À#—@QEïFXH S¨Kåô2“2q}rrbЙt É j×q üê&ˆ­ •L¼Þ\2‰Ö¿­?ÿ¦zòŒ´äYÙÿøŠ¦¨>–8'¶dV±(,Á°±«hžc§êKÄœ´J57|ż`ÿ16â>óBú3.’^¨æÈªÄýÖL#Áßëx2–ó\œƒÃ_;ÔØ…³ÊÄzuðnW9²ò\«OøÞ1tÅüÿñ7œEC¹›\Ánª&'¥ñ1éOnÈ¥»lË„f¹äd¼EzÌ.%š†þg zÔµX¦èôǰºÅnÁåæl“û¬à>Å–›µ´j`ÈRÁ¯¶ª£©¬ÇÑ]ÇFºÉÜS_²™L<Ïm¬'z¼ ŽåG_òeg8ß ÔuLÀB‘GÑ_…íª©Éˆså=A¯lÆâóã27õƒOäK:‚t¥kS û+8óÁÔX,Aaœ>Å#>)­úó¯Šsÿ«áêkQLïÚØ](¡¸æÆX¸iw4];˜…‘„þ%¦½|Eoô»^äYˆð¿rþûåwÐT-Lÿ’Þ"+HÏeöY.ØžŒ`qÞTŠ÷1P!™Ãî…ÿHkêv?ã;~¥ÓfP¯Ñ÷ÿòhFAªÂ»8®à{[Ge }¹ê£÷H~µAŸ([hYífM4]«‰èïpÎ~ð áÏÝaç_€«MàLÒÓa¤>P2o²KÍ=}À=Û!3‚ ¿¥Çõ*MþñÃXIçÄeLGLJýÇ ¦Ÿœ¢>¾½y‹}éN–TLN¤þ|¾(íˆÝv)Ç´ªX‘öø·<oô©ÆðªUTš'&§éö_4a7©védõ‹¤Ò} ˆ‚&­Š„Ø’@Ž]xC™IíQ}"*ìHn}«üª=ý¯ŽóîGh#êØÇÛç2p9žþ‰ÇèË{[º›™¨ËRÉã?ŠÇÄœ%B)Ηò¿þâüGHþEéaõðï%жþ<…VO+@ý¹µÿרZªMÕBä >àWç~·€Ó¿¿µM£~°˜ƒ®¯ þ<Áxøóš"•Ö]»­öýÃü#±Ø€Þä ú«-<…Þ[)£QÑ­g&R-FÿÝ-ê#§#ˆè›Ó̯͂šk \B52_bÐôèQkˆ…àNG±«2…ùLIh‘P?o¯-×¶ˆ¶ä«°¥ Ø‘ç±×’Ø+þ#ÏOyPΊéÇP3B-àô²â†Ç½%RPgaõß-NÄý”:š ì°<¬u|çûÔ®%¿ÞXö›hAÕÑwÁ{DG‡3¬DždÕ’ÍÁNá“#œÄÇ\ßo‡ªdj„ý¯Ò*%ÔœÙjÞm(–¬neçQµ¾‘Mä^ø°*–¸j ´ÇA‡¼Yã5>1•<*óÓ«ýþà ÿ±ž.€ôUDï~ëyÉ â;ÞÂ3Ä&} :+älm¶Éê7öÜf°¾dÍ8»d3tßCüœÃ¾½m1ú_µ§ãü"ît&liPðzß8—¨¢“ÓzD2½ËÄ%Ùñ¿©ð·ëP÷5Æs†™ì ÍܦKíÃü¨åFó$¹ë$²žøÖÇôßm,ˆ¾ŽÃ‹FšH]mê?Òí,¥ÿUsã(Ý£±yxŒ°(þ`FËвV¡ëT ÷z,ëå¥÷pžV¡øósÊ-UÂßÜçè¶ÈLä”>Ž¢õç6¬}TûJó2ó?RÓUæ2?ÌcÄèU@ŽÔ+1˧¤ÃìQö€œ6ÁÞ&}-Ø¿ðç½Ð—cbTZ²£}x£¬t—¿†¹,½Ü?Hos†QMÙötyX,ßPþãøÕ&ÑH·:öä$úÛÿq’N‘çPðÖ[ëhÖµµ/7ëÙWÓïëþã‘ÿigóhè Ag9®à¿÷âõ!Ýé¾ÛúF8=îwÇô–þ»È?ÒÿjU°ÿXokÎTˆYå¨Qü³þíïlô†Ù°ÅßÅdúï~WS¨½˜?XM$Òºj¯¨?ÿ3þ<ÕhsDbÚ¬úpñB´Sêh1Ø DT&H­á3žüîƒÿý”r^É v`E—±fÁDÇÙઉeØäKD¹iø¤É̯m/žGbÅnðÛEKò¢‰Ø¸å¨Y/ù& ZJ"W£Ø¸AÄüTçH•HðçYwü‚UþŽ÷ƒ4a5_“,F™,ÌÂ{|`š7R¿—[ï¤ q²¿n :kÞâ‹bÊÎÿ X« JÓ<ÿUä:ü”/YÍ3öðj0¶nb®’,‚5ã“dá÷g 1I… Vpf´Œ½ï*܊ʽØíëðç@‡fr†À(mÂ_;JéGýÇ Îg9çs¯[ ¿Ø–wÇ–ÃôïÚüÇ~”M¥9ß³d3«`>$5‹eÂõ÷lYµb,ÞmˆÐ#°ü.L`}o¾aŠ¢ËŒ-=þÅžx½¬N›ïʧ»ÒO¥ã-ì]0µMäGt4:ƒ8eÛLý Ý¾{Zìf¨Ñ‹úÌtXY¥ÿ ~¦ÂÛÚD{§õ†Š<ä»o`„²pýÒÂÉ/išlô¡Ëmß‚BÊ„_ØeØð*ÍÍÃ\Ñ5(«×ñ{×er£ó?\C6ŸÒYñ¦ú©1ùGnyœ=0„~#Q)1ÿv ™C}ª÷ûOúšTf~Ô|GoæmécÎ4б3­ü£ {ö€^ÅÅXþc1Z¡~hoÒÁ 6¦ØŸšŒÃÆöÉGp°òäžfEøs:ýúñÃíÍ(ôO +ÈAžs•³güï½xfKªßD<¥÷Üÿê‡í*ó£Òi5ñÞŠÅ®²5eþyVþ÷¡&ùÏð«·Ì?Ÿ#ê’ëÅ'¦=ªªZqu´M4Éá?.©½T«CJäÿˆÿh¥?ÇË/âþ è;h)@›ò2ÿ¼¼X&¼~Á°Ã_ý¤rùQ‡ˆÝ6aafÙÆ“™éÊ×…—Õ «±usz;µòa­Jx+¶¿Ú,Üá=–ã?æÂ'\d¥@-’Eî¡WÞè5ýÛ]`¯‹9b ðV²~VFiOtÿ‘þ|üyi².w¢i´@ÇñvBEú ¬,þcèo®âwuüGKž•ƒT0ZùBp»ÂX‘éèóKc»òç&qxùØ æf-SâG°fBôW%ÐæŽ%ÆJŒ†½nÔ<Õwq¤ÝôU¬ø–ëú˜O<‚—êâk›~TtÕ>†sºS”vZ ~/>ùG2ƒXëú D?àb†ÂŸÇ1¨¬pEß ¿“õÊqü99ë(Ž'7dÙ ð+àÏ¿t¡?Ilé ½”Œaµì‚åCÐ Vø.V>?ç}Ÿtž«]¾ÓûkÕ°êÔ åˆâaÓáÅÞbŽÁŸ1¶ 1t¬@)øzä{dK>¯2‘øú»7’ô ÿ¿J¯jLjÃ=\BÌþD&¸ “–æ3µÔá,>¢¿zJþ‘þ¼$wÿ¿áOÖ—ˆée˜úÁÑôooÉñ?Ô+âë`×RÃVøµá?¼èÓ¾Ñ Díô‚õ:Ñ!¸˜Ýbf¤¿¿ûL¾§‹–Nwy’¨~u›[”«¥r.Û°~Ci²/þc JÖØØë³†axÃÖœƒcZ×Ú‚‡¿Œþª.üy{ÇÍP•EÊ.”ÓÁn³‘lÔ;aïŸÑw×fcÕ¿ÐÝ>DuØŽôðçßÍTJBg•›N¾ÌÜö!öÍf ûs¸qŽÞõq˜HåjÆD è-ns¹ÅRÇÿ{/nÙ²…B¬¢+)iœöEä$!s1æ3§£±– ý••l±µ²æ”ã?ö+š9váçç=¶ÍÒfˆÌDªÑõÕâ&¸XEu¨ò]k(ÒÒ¯ö²:X-öGÇ?Ý-h âÚ*úxê³*¥µ ˜)E\Q€þþë~éÁýóXœ¿^Q®*„vn¶y†¾Q‚xºŽØ ¦åOœžxx¤0EãHõ¿ê¬-Ñöƒ0= æ?f¡>òÃrÒÁ”hüë=üÇCøó>Ô •sìaçc ù.½Ò›¼â øUB¢À¥äåÉàzƒ_èÈëOÂ?X3®<9ò¢zmüo®âwu¹„½è^3˜:𫏱–n¬í©·¦Ïž`Õ×XÓíø¿!bq(<4丬W?lÔ¼ÞCÃÔp%?Ä1€èò½¾SŽÇŸì€ÐäNê¶¾“L˜ŒŸ;~7Èy¡àïÆ3µ­6õo™älî¨U Þ{Ý]·ÃQ®a>w4‘˜¸¹3œü¥p…бe€EÈŽÿð³¥ßóx²¶AàWÙ±÷;Aãè¥ÀéFaE®ÓöÆú?ÆFÓ¸Ä9û/|ãî·×2¨·Ãájµ·ú# z­ë }·À-a¹‚P\ÅÇ–Ö„ÿp§,ŸWõé$ߨ!g2M s˜ûbŸG˜—˜ý*8ÚzlÑyj5²Sññ ‹ÕˆþÂþdk 1úð¦¬émjסî(£?QüœVì¯ìýù\¿F0u±­ñ±ö»øôÚäsÌÔösàaÑëΥ㠬3üÇ ê£°ê}˜ÁÕËi½‰¢*€ÄÙñ Qɺ–£?õ€‰éŒÿØ+ðûÀh„ë›7ÐJm5ó¢åCzV5†ÿpu\Á7¶¿O½>ûëÏÀyâªÑ\µOÆæT¢+ÊBò7Ôm¤_álæÒÕÜô"‹#ßXFæõ•8&¤‰—òII¶ˆÏ¿$cè‰P5×£/Õ+:S­"ÿX‡'šædÚS1evú«êèw-UH3:tå£-Žþª’ãÙÛ¯ÜÓª“´ç™ˆGåã!Ý V¢=kL6㘷¨]/CþÑüÃOãŽ+&œÒH£hB28‹\h .ênŽ]xLzº¨ÉSß““JŸ~u‡IQÇè œ—n*®fUû$ûY³‘}ó?Ñ»%;“^št~Æ2L¢¾ë2qÏÿ¦ÉmüG¨xQ¡„­\rÜÖß¼øa» ,ÀÎ7ÖÒÒ?Ѳî»l­ÕÞTÔ ÿʱ߼ßùŸßÛVióEyôú è%õJM«URÇ*Èp1øG¬ûgý¯JÁn7/©GÍTMX^UoNý¹Õÿª°HCýÇ\òÈ!lW•kJ=q+º—¸wèf1Vz¯^‡èqqzy|Á;,÷|ÀgìéßÔ½xG8A懭´Z’ÕæpWóâ?¾‰Oâ/üD ¾[F{rå§Á1>€ºeY ®ç.&¬u·þ|†2Z«E˜P.!¼…un†Ëö<=O|FúW&BåN_ôýûÖjþ–•ü0<ÿñÐVüj wa2¼n>ò•¬µe1¼ì ògzp;¨] áÃkî'ë±TÖ½é¿ÖxϪ›|Œ9€máÛ=8Š&X®úxŒ¥Fó8sl/ß74Ž‘áÄA1åÇœÃ/x¯Íb¨%Uãâ]áÏgò{oøü´XËâF^:î>1Zƒµos2·ô—ʊ߬FEÉ5жϠ\¥ñœºzËéN[úÝ&ÄÏ/ô6ô2«!_éÀ©veeec)õvû~TIÍY}…ÑŽÁuÉ?,üê9ÃsvƒM4wZo†¨ƒs‰+’î“þýî&cLÌ #ý¯ŠÂ,¿4_Ÿ¤/oPU³‹¾‰YXoQà?EÈüó Ûxe5v­¸æÅå }:û­ 1÷H´±õÉ_¦€Ý0Ò£˜êLý`º_µ öý¹"ÀëJɇ0œsnaÛå•jrEž ß“vvˆ¿tÃëhönèkï2»ã9Ü÷rúï&‚[¸IÇÂDÆPs7Yu²šÒr­^D¬EÏÞaÅO«HT×’ÏwDïM}>t\³`=>â+æá?ÊÒå+3´ºÁ‡d1Îà?ê ÄE•…ÜêÒÏ<¯Œ„{+£`”"ú;eØP/ô¡Ó°oô”ºö†ô/¹i6¶51éœÎŒç•þ»A°®_„Å– 5±÷çÊÿý¯ôm…W«ÊÄÕ3¿;–@Ûð«DZ ­ ¶=xþÇ[#ÕƒúÁæôoʉß-àôï¯mµå¢¬^ìv»ø¬æ£cûú_uE¨|¥¶RõƒNoç›ÂbñÂsÑëD§%‘T/ ž޶‹ÈÞ¼˜#‘ë|E¹¨äB1·;jñçþX’pE©ÍóèA„Ûþ#¾è"ÂZ•pÌÖF›ò§;ö}=ùË"ø+ØÒlò,ƒ5ÅS•nØÐÒðÌY"1ÿ<2Û¼“8;>•óÀkª1Á¯?¾Éšr [ŸˆnÖv YÈXm°“øõøbi«ñDîúØÄiôYA¬¿ Vø$•Uƒd¸…OxÐGÔ|ëÒš:Ul‰0ÿˆ¦¤T«“̃ÅN‡¯Tˆž:“w¼Óÿ–£øz€ˆS’éX³{ñ\®ÈEŽ~ ¦„s”½À«à¯Óàe]@¢A‡`˜kãÇbÍÔ¿J2ÔÜâG¸_Pš\6+¹a!Ç“r¾¾ô¿Z+fã½gbÁÓjY½ðáCú“k}'3òÀúßÃÚfæøÂžâÿhx“©Ì6 «¿Z­vÃø¬XTŽÜż…Ë9ƒÝhad„ÿ(EdZǸ@ÿ’& C£È™ªÀ],d"mWyVŒ%œq,5w²1ÑýdüÑ ¬jZ²‹rFyãó£Ú›=éóýДÆcùWðL[«}z©hÆI™fè2YsÈÙÚlUôu+»¢yOsùMO_q¾¢”±F9Žý8V•°r#yÉFéB¾‹î*6®éž¤/š«Óz£¨ÿ($²7²p>èoäTB3ŒôoOl?†š5õÓg ÕØA¶t¯¼üê h` U]åÑ+äð”ÆÊn0Ò†äË%$Ó™ˆ×ëÓ³ü/39ó“NÑ¿Ýò%Á™ê$ß@ÿÄÕÜ©Ãèr·Ó=þ½>*š³MÙLý`M4 ‡õ×R#C½E—Éô+q£ºaîÉZNÿ+Õ—ºö YUùŒ pzíðpô·GãïªÿÕ.ú—4"iÆSTŽÎÁõ1F {Yò˜Aä •8žæ6îÈRz~meá³ ¬÷"£šÈÔ²ˆ@5yMï䨅‡•þtP­ÁÞuJ<æ×¾‡é‰ÿf¦x 1]ì‹™h›Ú>œŽÈÑì(r˜Õ„Œz1ù‡¨píÿ îgKŠ?Âü°™sÈmýçWïl—•áj­º–þÜÚÿÇÑ_õ¥bõ þ#rÝA~~†‰¦m5ÙBc¬á)“žð UOæGµ¥âPí¼Ú]-è´¾/¢¯•Ä92ƒ@˜ä{`øK…]¯©´ÑÊsϺзü¹g$ëÏÓÿªŒ°´ÿÇPüìÀe!HµHQÕâ‚E,ÑND¦æ¾‹¶Zóä¸4ò/V°&×v"RyCìë «b½_‹ZXpzÎ;b ˆÎ³¼2Ûìƒò lôL¸ü"ðkÁ–¾ÂÞÞÁÇ…ûmËWO”Y´¿¹ŠRÛŽéW¼ š¤aQ«óΚ<©«Ñ`ÖÂvÁxŸà™ŒBÃ~zí¯Œ°Il%ƒZ‹: o›‰ëôN<‚ÿ@HW¢¡°+ྣãRÀî`‰¼@¯ÁŸwWeÕ6Áë&ƒ¯†e8È‘Õ]ûŠ/›Œ.Hgì’ñ¢›Ñö St±¯ÊŸbŽ'7ä*^fþà61 „aú¡ÌTÀ-#¾œIü;Jöyˆ~·+ÙÁçàþ‰9ññ§áž/é©QÊziéÕ—!K¿Z¡öýÈOs2½E»KwQožÔ”ºÁ5FÆàþ»géVÕŠŠ±d4•X}¶t²¼%ºÿâ?2ªI9rrÈÝDìXêÄäB¹XËÊ?jSû|Š|A7‚äøMØû‚xGRòï•éœö2ÌüóIêÑ«rüê,JÙïz!Ð+_c4õƒÞØÒ(ôoÿbö2î2/p6¹ ˜Þ)Ô±&ÙR 0˜ ­µÓÎùKF}}‚g¢´EQñ7cþÇ>ëýÛ§‘Ó5+(£é*¢ÎT´¾¢=üy€ÚAmëô<„¼3üWe©ØècÛ+7†ü#†Þžþ‰É±‡KèßÞVl·‰!Ã_é°r ÿñôâ vØB¨œ"²- –³š5ÅÃ+¶Œ©êýDxu aWu׿€~våKA¯Ÿ?Âr½‡É Kšd¼¸Qøß¢z³ß湕Ahp~ ±HžpuÕˆO†ë>DSÅXù0{÷ûô O¥+ýw—ÄÕ6’Ç7×§°GgP+µŒw-€Åµº õÂb¬¿ÚñÛAhlDjKŪPýœÏÕP’«áïç` ³bã ´ÖüúZ¹Ÿë-›‚Ú%§xOŒè Âu‰¯7D-<°âJþñ…ìzøa?ΨøU}üðGÖÌ,‚4;XK?ŽqüÌ^ø–zL‰¬Å¹„L^9¾ý¶Th(GÇ¥Ž9+<çV½ ï)D>Ò™*?ð¹ATÿ=Ç¢äºFä~‘ÿtŒüã~ÈRÁ¯&ªnb,hDüÇW4`Ø{ð»Ÿa<²€Š£Š¸€qŠn&ÍÈ’FÓ—!Ç™GGÄ)ò’/¬ù¡ÿ3Ôøœ¥ ùèFf¨ÆE”þèw-üê±´}’ÃÓ¾”ËÀ¯ŽÈÖãü],8–JÇåӊè?oIþñUoo±DìùŒ•Æeºä0vÏÿx…=íc\¤ßÈ,2¤vØß­ðç_Á~tÙFÿ¦9÷êCýG}i¡º¹¸N±ÁÎN¨õxIÿ’èws¢ÀJcj¼‘[°¨—PÛzñ©{Ñ+¿¥gn-ùPttœn*ÅMÙ¦ç7|‡7zÊNq•I&”–©|À×Z ¿*fÞÙ™`D‡_¨ÈDÃùÄ3'é>ϼw´ï“Cõ/Ù lT“s}ï’/Ü’Qàšß’§,§ŸJwôº9˜?(èÐåì?.ëÉ䪡ɲ:º¹qß«£Ï¨K|2¿v…²‹ü£ Ö!žÑó ã»QL•£b7”W'Pv=K¬HßìïKŸÓDéꇿéƒEË&·S¡òó„/(´Ù¢V kïBþñ½Ô&òc›lo][ŸCdRí·þ£±2‘+vXßÈŠ*¶8þã ìü"”r`ÉÖ¼¾£Äˆï«éZÿß\ÅÜš7}œý0:– Ìv¢½…<ß%@Èlò‘xl"öØþiÌŒ(ÿHFþQ™ãšÊuËõaVû®ƒ= ®G‘csÞ¦GÖC®Æ"ž÷×ø˜ÖZXvÁº3Êt­ñsø”âx·íäù@þÞñÜDÍMHpW4b;a×7á™+Ÿ—"'ÈíxrCîð-[jðÒIdG È? S±ž|u ã“ÀÀ¦ 2MÈß~z7L²Õ‰ò(ñém¼a¹žú°n¥ê"ºa·Ëb¿’Á<"/=ЦHcÞGE8€ÜD¦™É ºá?NÁ$!¢7-ÑHy]ôþ%ÿˆÃ¼ŽzdՉܿ‚ùl·;ì§Bp(Àò‡¢FzaF5žÊqàAkðÄÕYï zà#²,Ø{º›†œ­Í6ÿÑž¨"HÃß–ˆ=HÓVªßË[áÏ“ØÐÏ£9ùÇbúšlÄæBk›ŸÔãlcÁÍ\3ž8·QÌò¡B<#=Qnr?lÍ=ªè­ù;Áì~гªŒô5ÿCRÿ±ÿÑT~cϱó=ð ˆï ªêNbŸkÁ§âÏÍ\l¤`v` ó}Áfƒ‡• V> ÿ±ÈqºÛ•m*=²Ám¯êw¤A<”ª›ãfZ0§}FZsÈÕBð«ö”TlX}(k}©?þj w{øÕ(QËñìV6ã?êa›üÉò»ˆýz4*Ø;£Zk‹‡»M®@ºé—EwõFi„9Ž©è4ßT:œw¼âõPQÌye¶FTõKŒC÷5¦Ûïâ)ýð ³ag¦™ýí3á£2Øûã?>¡bKm6@œËð þü»8æ›A,sœñ¿÷âœ-A(ÿdkÿóçuýèŸXY+«yóžÌrS3Âu_ùãúó{ðç‹E^žöhD vð«<ê_ô/iFÿÝáÚ^Ö ¡ýó5«~ÕE…%}„åš!4½RKûJß©ŽTVé¿™jq›Í_ù¦Ô÷AX¬ŠçMh…2Ë 2µ„7qï{¼T 2ÙØ¯žâî?Tð¿vÕ–b¹ºâ‡é«Áˆ¢‚ut¢*-€(eöë-vþ«¨¬Ãü¾bq¥Öt7ýãcÝ=‰u*êQ±;GxjÊÊ{ø<Ët"æ_κ=ËŸÇÖvb‘[ã;N[Ó–+‘”€KýØÐ øš£ä Q°üOáÏ׊ÕæÑ•¢àW?ôyxÛ œm\¸ñA¬vŸúÁ d‡;@Ä£ÁŸ¿¡ê%þmû3ý:ýKÞ‡s»€£¨ã ž‹?²òÁV0:=9ZREÄÑÀqúÃÑìá^­ߪÿ(æ‚„,ëoËK ðTüÇr«Îk ¹ïx®ÿª2–'ÇÄÊßƒËØJ]?µ~Ô¢]×O“ýä¾Ô„íеA*F pªDÆ[¢÷WX‡K舾Zõttö(~UvºžQ,i0s!êaI’Q ¡ÛC”v²ö6[2øòD¼ùÉQTXŽ“D-W‰¢ÓÂPܧ—w/ìÌSº0ï)5MuYo÷þ|¿¬A¬ü&Œ~wõçñŸ°‘Gð²¯õT2ºÉbôß·|‚þíÍéî;þü0Z¨"ü^ãú§Äo5çüœ(…ÿðçŽåålcƒ_]Aq;ƒsëg䤖=üG ûuã!}yÝÉ?¶b™{ð÷e~3Š‘ùQ!õçBi©áLë ¸- Ò3Kï꟞èQ`ôÃm·ÃÎ×CãÔ‰©L‰QÍV òe?=µ|Ñl@i|“þ!Ó”v+>ª4÷ü•ŒÏL†8‡~»è—˜ÜœKd?Ö;¶=9ªjkWm¬þ,EcÔÏåtžíµ"¤÷Ü^e;øUmþìEgÿLìÖWÃj7Å´¥ûÈ|ݺŽ#ÿ0¨òéHfRÅxΤöæ<ÕÑå Ø¿’`¸!ó£Ž2p:ÑÁ$vo~]Kˆ§;ž©ýh¯‚_µ7ûR'ðÌü?ãa0­½-x ú]«¿*^ós˜ü££ª‚Dn#ëmŒêµìN¦êúdæú+œÄ¾6[A]áA²¸ü`–±˜ÿt’Y!nÔ`¶s:Â"- €›ì³" q Ÿ»ƒé݃aÛ»Qÿ±»š€þW—ŒÒowôjùÅ~<ò ™À`¶l¨úÁïL‘ð"ón„†$šÑðuá’×Ò϶øÕJ*"®0ÿé§ÕÌŸAá7±¡ddyŒåÜ=?§ù盕­*{yÜm™ƒ{vG®d²x&{uæP]f݇Øþ“èÃ2à—3}Ö…ÇŸŒ½W»{³úþ–Žüc…²A«I&ÛŒ|;™´ãgºÐ£Þ2•è3|ËžŠÞŽÙÐ4بéDmb^ÃÏœct"§²ædçù9¢·qìÂã(A¦â?†ñ'X/ è^ÙÉØKÿ’‚Ä=Í\Ôî2+P?ØÃxv—„­¿‡úó—bêþ'Ä[¥ÿ'øÕe[%ºc'|&ÿaÓ­§4òÿŦâT5üGbmeðüÚM¶ºÌÊ£Öeö€øCþ#ª²MB9Øó´Ø¤GjR­„Ú_y¡Õ…ðwÔöªå¡"ÿ_eüGs,V7"ÚVLY ƒ˜_›KÚL”¢_öJ±RLµ†Ívÿ‘[ÜAµŽ'Ú –D£JžÏ`‘7°`ÅÉl‡Ñ¥b¤ô»ÍáÏ7À#¿A¯:›5Mò~à"OÉv7¡B¹…uü„'õ )ïØÃy%¥3Z0_øó$X¶Yø’hüá7î'Ýækyšüã0ñ}>æ×ŽüÍUL ­ESÖ,ÇWŽþŠXŒ¼«8Oþ|ôHÉpèÞÀÚQy2îpô#˜•,‚5Ó)•ÕÂàss°ãÙÉhbÀÌ !¯úFW¢qD_^T¿'®JN÷OºOuI¿-ú…›Œ¥ÿU%ý|Ñ,ŽÉBÞã+Ý8’„r=ÀŸ¯”ðÛ¸WÛ9¶Šº O,¯§v<¹!Wñž-]ôÇâ¹f3­<6k,ÂúÏÒ‹¡—íNæqqþ.]A²_å‰=ƒÏŠN·ðùZ5l…ãzê{Iäz‹ÿ°0µãh“¾ÉFø%T€"ÿ@U”m"k›bíPaÑýU;¶;OlUrü]Às6‚KYõç©é1•ÿqGâ?†›‡Ñ#ÙŒïr¸ØZ<;Ê%Ž÷ ùByž¡¯aæk†Zê ÜÂÙ‚.ô…ðjÛŒ6t ٣ͭ°wÂSÍƯڑì¿zËßo¹2R8ë¯F‹<|âupѪðç:ùÚ)ã!øÕI9ÉÈk?Lþ‘‚úó[ø6oêŸÑ½ÄKvA¿ëOÖÛ¨ÿÑÚq3~ØFQ?X„*K{–ç¢1W-.õyy@Ô.`Û›˜O™ » æcú«Fèyp_Æq—ò¡¿J‰§h#¦;ÖÛ‚þJpÏ’/œ‘ମSÏÞ¬£3UtºÕßFÛå ¿ŸlhµßeŒé̺ˆßZÍûf mš,:ž½#ÌÿhÂ5¨ÉzYåWqBÁTÙ:ÔL žxîŽõŒmŒùª'Õ ¥Ût>tÐéYUÆz~°?ð¦2 P'šš‰ùô°úç„ÔÍì ·le_ÂüÚÊö±æ#)ú«Tf=æ$‡?ÿ &ƒn_ :Ì(6ü\ð_üzÞV*^ýÍÖû?î¿ûþ%#èsØHË©m ž_»ÜæJÿÝÒôÀ:Ãüó?ëŸøÎ¶Ÿ\D"Ñô5®–Wí§¼×ª‹ èw¯Ó“1l„öÏ­´ð%†þ!ÚðÄx€ÒÇÕ›*ùµ¤(æj‘}4„?÷‰¤ÿ¸¬ÜUJ‰»Äãû‰wwaï’Ód¥FÕLÈŸÕkà•f‰Ø¢u¤æ´a~Ô Ñ ‹9þÃ$ó1ùGR¸ÃLr±žA~&OV±=‰L ;öpDg[J±êQßbƒGœ ò]Z·ÁË༠—ÀÞžbŸž*¯wý­þ*ùÇk¬rlÍ8Öżëo¬êYúø Æ] pŒ! –ÿ™Å"±5Â8Q•Ìj6~“®èàWsÈf> 0¿ú69Ьp/vV€R?†‚/ˆRØô²¯ö*œÓ¤ Ð\øÝ àÓÕˆõã8ðg,ýÛcá?ÖâãjÈüë&´m•Q|åJft<¹!Ëž´@ï·ücö/;øÕ"Ö[ˆýš ž5ƒ>M1ÁÂ`¤}ÀG²ñüŸçŠœàl²È%Z¶_jO«ÝÄx†¢XùSð \ïc Y&3• SÁ¯n @sÄ{q%ãÊú(ƒ§b¡‡£eí&ÂNQÐÕ¸(~\áÏ×³Û ?2ÓÓøê07è(Õ Ö7†=¦ñENa&Èκ$þã;|e¢Z…¬³µÙFá?ÚrÍžëua!šÀ4„•Yox¬¿JŒ½Jcï`¼–󬹄 ?±ùñȶٸèªhã´Þp‘†ÝpŽ(#×/yÐvøó9Ýh£õçùðø•[õé–»„ÈÞ ßv ïšÍ(!_‡Ò_)ÊHeþÃOU˜5'Ñ ,}®¡‡õ «™Jÿݧèy¯Ðõk~ÅÕlenE×0•ÕÒs5‹Ékú@1Áqº”-ªF5‰?|÷]*M>éx˪\¯öøä_Q x1O*¾yÐð§ÿUxë˰f ñÖ¥ä zt/MÏÞ!e‡–]¼¥¿ÊE·Ë ú>ºª—b…EØûGtÐêHnTob3=Q›%[¸Ò«¬ž†+Ó‚WYñp!*Ž;Jgê?j’5wÁÞ%Ö÷¼5Éý Ó,mž€GéHý‡¿ÙÒÞ%pû[# þ£›]vƒÛœ>sDA±ÉqÆÿÞ‹ ̯ éX¢)}ÿãùçR9«Œ¤þÃMË­íTZ°»öà?ÜÔ¼øEùÃùç/èß>^¤âzÆÖ÷Š“jzôW}È?ªŠ$ZüGGÕRGþ¿”bÈËáÞví ý§3hq±…E¦ŠlÛÕÇ‘ZîúÝò"€ˆv=¶h>˜ Ü#w½"™ä,lD#x øfô»-#ÅtÓfRù<™ŽÎ^YÑÓz“I.åI_‚Îl0|o>…ÔYìw8Ó|âQ¢‡ ð³9ZŠ_fÍd~Ô2Ý\\©Ä÷Ï`݃>=Çcd5S~üê2s½K Žíˆ~¶:¹Íò“ö(z:‰Nëu…Aõ.‘/f‚ű㻦W©ÙA?«—oqfw¼G›” ål=æ3Í`‹]¸J.•Ü(OýyÿaWSÿ‘å%×ÿ2LY/¦þ¾6ãƒÚ€_M ߸kd¢N¼1ýw¥éÿ±1¸ÿÕAò5ôG ÿÜ ÇžñUª ¹kwȯɴx…¯ÔÌt'_kc®Gãt‚Ê™…Äù‰ì à+öƒÞ™ÆHú_ÝÖ[1·²œJÿÝÂÝñìYýÛ‹òTÖíÉ'¿‰œôjÉao€x*õçÆ³:hX5꟣´ëLH.zÂŒ2*­J´k9+rQÇ.¼ L¡ÿUi¢¼.Ä{YõÊT¦œÆSF[Vœ¾SÌ&èwO™eìMLwô?€³IÎ=×X류MþqŒ<<÷ÿ„ÿ¸ÿòtF¥ba§}Ḡ¿}-¸ÿUú—$×&÷/Ùok¯VÅ4 þã½-rÝm~Le úÝrÄ\½l–«ÉAÊ­¼x«ÖÖŽÒ7,ÃøóáÍ',üâ(‹ö(ÑÉ-ð«ìøú#-¶(+<#Ýÿê¢â¯”÷ˆ—‰Ñça‘3‚_u»°…kùY,Õp‘„®ŒáŒÓO[kÃP ô™F¤5øq0þß1Ÿµ}AÉž³»ºÀ“ý¿ªì?vÀ|;™rQ€ ~}ñu§ˆX/‘;â;Ü8Òé0K­4g+àt`Áߨµu k½Aï·“Y}á©Ï¥‰§ *A.qÿñ4çÖh2ý¯–GØ¿=ŠÒX-/3“n“г p¹~\¿×º7àZêÓa`cQYqŸc¿ŠÿhEÇ­MTÿô 7ÿXÌS×…ìOÊIÄùûñŒu`ÛrÅ>ãï^iqDllIoYKzD¬A›P •„*š„Ž'7ä|oÙj»a¼Þ£;ê+î© ùGú4õ’Pš*ð½V÷+/²ÌDÅWÉ@¬þWú ò!K¿òT§‚_µ ;Ú ªÒ¿8ÛZî» ýK–ã?®£ÃÚÇ\=w5rœøÚè¯zŠ’ažÂ¯Ê‘Ÿ¨¼ÓQXgk~íú—d&ÂΔÓæø¾»›‘žó®ˆÊø&(Ò=ø›Êp²5¼¡q¤úJ4Õ7rß\È(à 2£•FQY•úŠ ðçû‰ÇÛ’oL¢B~«%¤f<ž¥†ÕvÓÓˆêNëý%ò¢+xˆß¯â÷M?Gݹ̉§ìn¤·ï¡ÿÕóàÎã±ÐÔ¢?zú°4d-_üGJ£¶üjþù[?ð«Œø—7° ç©üì ËÓ³¼§Vy'jåúDùÌ£àX³áEªãOær3Ø•¹ùTïÜZá8Ý=ÊyU%šz†Ç÷—%Ø!×ð²©Ì«k.ÁìGo»ˆšI»=žékìbz:¬þaò醨)òÒºý)Z;üÇ>åœVŽgÜü*ƒÌÂÞg¼¦RÜ&&xOãINЋwUŽó¹77è8Pþ¼ ¡]¶ÅBÔÄ3º8vá ¥  g_b„Jú.æ^ãLwAF5˜øÌ\b§£¯½Ê0ƒ)*‰PJt7cKAsAåÏ¿•[güクbK¢Ž•þW…ßýÙQDGá1*˜ÿˆ«MTê³ÊIúï–TÓßïUžýáüZ¡,Õ)ó—Pï-VÑ—1®Ú“ü£ µ„.Úê³ýÑq‡±÷è’üö½“x"š*…µx`IEbQW¾¿ÌpÿüÈ?‹+p±Xó±šøUFÝ]xïƒqÈ Ó2FèTµ‡Uu†·bsm*ü¹ ŠYØL A¹ ªO>!Ûõ$ºÝËŽz#êbKmzeÇo%ëgÅ•~Tì_ixJòË%`Yù©ÒëEõÈQüÉ)ê»cïÝù+Y@£ßê¯Þ«žøw½+±V¢1è½õBXŠćX3üÒIð!ô6öt¨Ø!ƒ–Li¢¦!·X€OÃ}°Ã§ ¥zÞÿ±þüìÊ¢úKxçþDž¾‡Ž5&6ã‘â ±T‰ÁšR©ªZüÇxо¤øÚÏôOìÆq¼€?s±&G¹ÌŠïñ¦á±ö=Ñ] ™r„+•1Z{WªƒÅpvo2"ì#àSϸ;É?‚dO#?š¤XF[yŠÊÓ°êBþ£2×>¸¡?ˆØTÇef#Çcê?šcMMû'2“žàc‹°÷¹ñv÷ÐAm—EÁ¯¾‡é_Ò•þíM9¢—zº¦Ôc·%`ÚÓ &É–7à Kû^ìk3ã8ö¾±…;‘ß3àç½ÑÙ5×㈶Nwyœ(ãò dõ/IJî3¤i0•#}Œdô‚O c¡ÙOWèëÞ?×f¡=ÙÜÎ:!üù³PøÕXØmxŽú0-ÙáÃæÑù¸ýÛû2Ƀ+½¨û¸`ģƻ¹9,§Ó³v ž$ÑÑe2ІÛt'\ìØ*»É?¢rt×ybσÄ% Hÿ“ä1^†Zgõo·ú'&Á/¿ÒÑBaç ʦ—³DnGìv„þ핉lk€H¦’±ÙýKèXU ÿ1þ<&s· †k`.áxwpoºÒ`9™Ž…_}#«.¤—EÿPÕá?ü•Ìê.ÉΪeõðçg™?xtº Ï6Ýì ì·Ñ‹õ€™ùs–ÒÌ@±(ô‘y,F¡¿ºNÞWä2ð #²;v‚†çùÎq"õâ=•³ÔÔZ[êÏ}‚û'zÛ\ÔžTú5RÁÑ?ˆÔ*?é…múݺ؃ÄÔrßP¥VTí¨ÜÔjëÕñjCÇQÿ|Ï?}5ð®ØúX’B¨£t}”’ þ¼lj6øó•â’j‹ÔŠVÿ’ â$þãÇL,r,ê?òëw—å·3jFÁdtE‰‰{0ÿ|4±ª.—³æT°›äY¨8K‰ KÅ3ÔܨèQJ}ˆcGt®)WT?ÏaŽâðü-½*Ê»{b=o`io‚cEEÏÚ k;Þoˆ6å7GøH]‹MíA.àDZEáYnFŽT \xþ£ ÿG8Ÿ )Éä)>e&ü¹Ášv¥Š›ÏoÌŸ’+8 ~=T})+þ ûzI`éHþ? —ã¡…dÈ!ç=Žùç=±â9ÀЪp/N7 }ÁçN€?ŒÿØCŒÛ$ÊüjÙ¢ Ý— BVùùj3ó£öbñïê³È8ZƒÖ¬ÃkÎÓ«±ôä\Ï€8x06Ô(?¶Ùš.äǽ‚‡™¶#l§šyêHøóªìèw‡Â¾Ï`oÔ Æ¯RSQ Xý•‹Ñ–¿£üN¦ól*¦1Pî„ÎüM‰Ïl»°…ºݸ ¾sŒ\¡>è*5z¢ zl¦7üåø•hi«àeî’û\“¹ðœaëÏGª6,™5y¸V|(±Raíw9ðÓù/©ýú«Žè§¦áçæÐ[·±¸$تTŸ©kíîò8aM¹ÁýjB†”ŽºmO¦‰L6–Ê®Fr»7Õƒ†YÀ¾Í¸'¯MLÍè¯äAÎp„,)‹áŽ™ÿa*îÊ:v~ð°Rø‚íºªdÉðÄt< ^ÃÜ‚²õ>üùPê8:Sw±”pµiÈxÒ=“~ÞZú‚ïT3‘S>‡ï¾Æ'­£§ÊdP¦@Þï ¿þcüGøóCL7œkv`þ ŠŸlÛÕŠ§¨–ø;Ôü(êÏË‚|7ÀüãIŸ-û’dFoåÊœ^Nð^ð)mèÆ›Ä\¿ßÕh {óÔXBíÕ7ÔÈå8·Nú«ÎôÏ v=š:RŸ@¿«ÙLvßH˜ªfûæŸ/²âxûu´—bVØ'×L…~÷›˜>­s劥Ž3þ÷^ܵ• Õñê-ž?“Ó¾ˆü‘D¡CÂêÏ]™_»9Øxë¯Q?x@yk;ù¥øÍ÷¶9ÚzŠ•Ãj.oTS«ÿqZ«-²kÚ{4ÁÎùóï!¶ñ¼<uˆ¹j€.z;%£¦²Ê‹ì¢Ø.üéAþšg”GÔb?<ÒBþN šw&ÉEì`~ìã ô?­#Õ¿d¶êSW0›­X¹|=Ö* ¶>­\ òŽŒæ¥('’Woð[ÿE™B´ù@$×P6þ¼ Ù‹HËm,ÝulX\¹KëMÞä®wÓFüænßS‚Mugº¢ôM,Çv̧²ñV¶HŽ7Z[«“`|ô»÷É &Š…ôª ÿÊ™JN5?yÑ.ì|¸éïâ›°<ð{}‰ôâg‹8b“U~ A{ K?åæê?Zk!rÈÊ@Ûâg2ƒ/tÎjaaÁžG%oË)nkñŒCdMåvÎ}kÕ§µ ¹WåpüÇ>[.í\ä;}&ŒGSPï½ÜÉ (ÍVÈîxËÓ佈æ?ƒÄ>>G/p´ò\Ð2-ó/ó—¨sA K‚Â<‡5 >da›ÍÐÓ¶†³˜o&ÿ(gЙ—zÍ0+)àwo’[Ä2úƒ_µý…?WÕ”äWÝñ–+é_ÍøD-Áy´Rùò!y­àÏŸ›iÐ×.m·*ù Â,<Û%+‘i>Tœùóê'ÑŒ#úW¼Ìñ¥ÁòŽ7öPÿQ¬e Ú«£D¾=aW¦íÁêà3WË8ð!»ñ¤mõça:ÿ÷…@3¯r?Zƒ˜e–ïånêç¾Ì/LGÿ’ôLi_gÊhw±'«NŸ¯wäG¯È[À£˜ ”‰ðq9QKÝ1ð$Ù©ÌMd¸#Ô.¼„’p(J|Ö EÉý‘©D™Î‘¤þcµù/7ÖîmbÕt¯j/oúÃ$d~Tk4ý“y*ï5ýoò¿m¹Bñ?l”2<ýŽÛÁ‹$Ê1ežúC­KÿÝÍJ:VÙÞJ-N““ÊÛ¥Þþ¿Û¶à“­Š©üT Öh}Ñïc…‹ÖýU]µÞgMñüþ½¹Æ©6ó£²iÕõ)úJáB¦°NV#×!ø#ý¯ªŠoX6zűƒ>‚øvá8ë‹yø$¦%Ÿ4žùÛåEx}7žo+møUwP›üY‰Eú“^R~%Ý ™PÖc‚`3~–N/àØÃaWùù}R¥ˆìV‘š<£ºœ‡ú¹$ñA°ÛoaJoagíò,þí‘g ½ÇoõWÔIؘÖXŒ}°{ÅDâ÷UT!ÜÆ®vUy¶>â?.ó;ñðx¾è–=ÑÚý<ç¯I•¼jN³ÐÔ%À?<EŒÏ}¯ï"‡è¤o¥ŽÎ&O³âðÜõàdkÈM®ˆáί]jܬ#=øUKr Ó uÙ,oÉ'ô¢G» É²:ä;wñ›ë8kB«½ËúÎÏV—.d}¸ Cñ9ðAVýù(òÀ jÉ `Ï®WÂNæ‘×ðIGQµ½"zX@þV²] ÖW•™ vè=×ð¼ÑYr†¤Ô”¡ÿU1ðµúdÞp4Éd"è‘ôçmÌüQ9Ì5üªèÄÕÑs­@ÈÎHK~‘ƒzŠ£òóËÒ]Ъÿ¸EEbÇ;“c>Föá-ÓƒbžP;­8þÜ|7@¯V ö*!¬þ£Œþ ÐIÏ‘ØöZÔÿõ¦Ï¼/¬~)˜øàMžÒŸ+³Tëà´Þê?а³nâáFË úL-3ŽS9rþä3¹QAj!¬ùµ·å|:7½ƒOZ)°â>ð½èÔî7EEßH¦Õ”x§WÚ‹ú&Dð¨aJÿ’ð¯é@yŒh½<:Pk1ß;¬.Š1þü5›ëmTvƒ_åf÷ŸÑÏËBT_|“#xÿSð+5c“I¦àEâ3@å óý|˜#ïn* q Ф”™M½P p<{ÐöÔ$²mÀý·K æi|ƒùXˆR·(ú«¬°Ž–Ð ­kL_ý‰x’FìkI‘‰®š®Ÿè¯ Fû—ƒè 9÷8¿¾ž»ÇÍÌzc´¡–}®9ľÌþÙ,̼’–¨¸²Éé[Ÿ‘þí6T‘ÄyXÍLÿþÛþWŸ~žˆíƒ­KpçÇþàENå}ÊlZ5-žöwpãkëIý`µ:Ú¶ÈYçŸ ŽÊ[ÔÀúÕ5 Óê¨ÝáW^·ñ5öïÏ÷Eôµƒ¸ žý´0ÈÄkQVo dÕjƒMç)6P~<¢7;ýü }†[‹—XâD³‡©‡+/[²›ZOvú”®®ÔŒQD}™ÐOx–èŒ=_Š÷øÜéÜ@:"•|Dåy`âïšÁ¿¦ÑÓ:ö°Ó!…ú¦€Òë¼þ#. ιìÆLd/ˆ–£‰ßÁÂÇ—¾x;+"¯¦×ÓœUü¡ú¿—RÛD@+Îj?Èc1LÆŒûv¬1¶y|Í.ô¤°wÀ—§0?êë¯Ëÿ$RNMƒ_›ŠW‹‹ÿx'‚`f¦â/×ãé<ôÅ0òŸQÝò”ÝàZNàŸ ¿jnýàb¥·æÂgÇûj…ÿØ…7ÏM®&¹~íô$ôÓƒýGK¹5½ÑË5†±Ïƒÿ¯þÜÏVA[ˆþê¹>ž#8ÚBÖ"ƒçíHgŒcÔ„tºG[[zš|ì0ÄS2D­ô/ýK6©ý…èkZÞsHº€wuB!V ޼.c ѳ=4vó]yð«ò+ÜÈQ˜\U_1ì—ùQ¦š¬µ™ßF4¦ õ¥Ú:&þ#ESSªàa÷nÉ–ül#{§Öþ ~Þ Ä?©~EÙáô¼LRM®Çf°ÒpYõ¨oL`Œ1…À¯6Pqžüª! ã.04¾äc‰ÅMã:¸ÓUÀš3~ÕCdÆ«ZS}ËpŸôÔŸïC¿Ëôxº‘/×ј¯q˜úõ¥(Ÿ~ 8[ª`µ''è±RN®»æmùGVTÏWˆÍPªô€?2†QÝÝ‹+á? ¿:3½Ðˆ {îbd½±a £‡Ìæ;L,q¬·V9«Æ#&x…Ç¿ ©=¢®²þã •‡Ûèr»Ó¼Eªõä#ýPïרdžQ®Ï¹$”×ôr<{˜ÿQŠÝÖ‘§5µü.ëë`ݳ¢º‹N иŠr÷4ǸK×`&nj*<½Œd4ïa9róL •œSÆc €^u¢TÐ'_x¯ÅŸ¥KäG:ðvÆÐ/¸]±‚Ј)ôk©`&‘ô‘Sôûâ ÏL†PŒãÔÿë/vÚ’+!Ó¥ßÛ+öYä òæ”×Ð’jK‚óöáp)ÕÂàWmaŽÿ¼rLzÌlåÀÊ’4Ó2jUUwüG/QKk¡¡ª=¤jåŸWúÿê.^`׃Ä8ö¥§~S$ÓÝÀ¯SÕD±ŽÞ72 Áòøã?Ù‹[©Í;Ï.+¦¢$üùߨ¨·p`-ñTè¿ÔPDffV+m0H]vÀZ}<¼D|ùÿ‘½hIbࢠãÕQîÖGWOäØÃjne”“ùQù°èՈ̳Ó~ý@ë?£f?‡®)ž<„½=£^\¯­µøÍÝŽ¡-ÆF6à:U{.&ÿì㾈]íÆ3É(iu Â<¦Êbý¯"¯R+%Ôœøµ1°iÑ T7pÔßõí0“ð"íÀ‡­ž»_´üjyÓ-2ÎçáœîZæº{®¹ ;'à²+ÀBQÍ}ôhLKDô럽ܕ}d=®D"%ù씎È/dÙ‡¶ÆÚ°d|Ã%ÑîncôIeaû+ûb‘;S]q t&7hÎm>ù*ç«`_úS›t-d©àW{Ð_u1Ë:ôHºƒùôåÕÐ%U1ra§K¢@-[ÑÎ(‚ù‹Š÷êä&s±MäAöcÑ0÷%u@kŽgGñIÇ“\aZRR:^… ® ç­ÚxSgzbùÀLUÄ×]£~p…ÌŒÅ:£ìvZq ú«&äËwõžtóh.?èqŒ™ NUɈVƒéöÝô¿ªi¼ RoJždÍ£Úˆÿx͵¸À;·j]œÖ["’—ùqMºÂb%³[iì'ÿ𥟣;”nñˆò}èpôEÌÏÔˆlãSwƒ ž³+-WŠ!Ž+¨(£)è¿;˨!«óaªuj6RÐÿê M[b-ð›`^®â?·’l “Ì)8ƒ#deµñ†v<×2æç¦Ö:Žoa®’‰%ÜÞø/#3ýKþ?âÞ>k¬[ß~’ìì$¸ûPܽ¸»‡âîî.ƒ»»3XñâE EŠ»‡âR¤èw¥çðT(Óò~ÿ3ïÌo¦…¶»;ÉÎZë¾ï%K¸6þØÎo7Tr©èí|ßé­¼ Ì?E¾†Éì+›P‹=/4æ¿'úÇs*ø}̦æãõµà¯vS‘tÊüŽä\ÓûŠÅÎõ<à¯^ëå#ôó#² 9]™Œ9Ì`2Ð?¶w©ø°¬éô߆ÿð3. „$0š˜WPÒã“ÅÕD'ç»wVY¥UCÿè~‹EåÊ ,~L«\³á?2Áp0OãO:ʘ¨ðM%ùÔŸ7#:‘èágSSòcƒÞt’ž­ëOˆ›žIßnHk=•’™íž‰*û9æTêXy­ä+PO’œ »UñÑ{Ra{™LÌþ±à¿øq7üU,çÉúèh¢¤sþé÷¶‘×®‹PÏSòÿa÷ð>çh¥ÖÁÒ—VÏ)þŽÈÄâÁ¿1©²Z,bs7Sèǘ S‹­þ¥d§SUS­¾vž©TykŸùñѽ¨7è„NÃWÍQÊh¶*Ý›:ñöÔ—.QÏÿúøÌG¹¤èâoÊôÚK0Ü…¤“WRŒAÜ'ä Of ó‹âÀ?¬óãK ´.Ô´á'·ð¦ì%FùÿõË”^î¥ãETY¼kú Åy†ütØ”’º©û ,z2”åòhå ¸êøM"R®>ø£ûÞH%]n-tXØÕŽ—êj,e}¼â%´¢Äø¸:xÉ:ä¥,À®f–Ëy'ìþèQƒ,ÿDºŠNS^ÿ¼LÐß$P’’5ú‘52‚æ±ÏðrãðÀcåú—,@y0äE|[4é_¶Nj ZN‰pë?VÓ7=÷+®Å5î%K§®x£]å"=È)¢›·’¥äJ¢³uø« ¸âÜ‘(Î77x£yx KÈ~Mvî7üÈ&rÃ6).­Ñ'z’áÚˆü«Wĸ ñ›ç¸£¾°b—¹þEèçasΦª#x¦­ô|Ø´«ðSþø3ØÖçèÓ ±^U`Ús¢V¸ùÈŽíÉS.NÆúÚrÌgñ0§»¬šoÔO/À„ÿ8‡}½ÂäŒïx“k¨)ùÑÖ›±Ð§;!šÒ\÷¼Þ#ì=YÄú5ei¨û¨_D%îô'rT}ÙŸBæWwêâ»ÈÚôOþÕYºB DŸN^ï~Ô™ìA–>€õ^ð֜ՅZ¯‰p弞&ªr ZÍA÷¿sÔ ú0ÝÅÚbV@»ˆo½7èIFåø%PÞRÙ,å˖بæêê|Q•™Ê"GurGJ£ZÐëÊè‹Èâ‹WŒÞáÏ*Ѭætã¥Q‚ÞSÓðE“Ð?21«,oP+1ʹÞBåŒúйì¯9Sg¥+oîPÚð]‹áÅ®Qy¾Ö*ƒ•–ê+è*á?NÑÕ"šÈ('0£t¾Î«xkí©È›‘K&†c]mÜ£Þü/ê³R#¿Ñ¼B”žèéÉèïû7jRG¬~£0½,9˜ˆ.³ô Q?x/¤}ؽrékÉß=gŽâ>ÅË5°™Ç­Q¾™é­Þà¯DÖ#òzãÙƒæŸÃõÛÂâk&V:¯øßûăú篻çh¬ü^]…óGéß>Pý¨æÑžÑi$*§k¿£%³Ï³QƒîKû…àoÄgIàg‰LD\9á_ºÑS«•: ü1ZÔ!÷$u%.¡ÎoDKvO‰{?‰©èç+t/2j)îZylÄ_ðWýà¯VªÁŠÛ?­vŽ9'i`ÃΗ¢þÀ$2+Ï. ‹MØ›·TÚ•åýšIÿöâÐ?-ô¿_+¯õÐÆ‹öøeèqžàƒïø 4Èìr‰^ÌOw˜ž CW#ôÅÑ?bÒ¿==~(;QNF86xãüX¬Ø3,Ðeø««°ùt7-¢l‰øÚz~¦CPô< þg6z/6â y­mPL—â9NcuS <„ë.fÓ«?üŠ(YÔlà…éØ³Ôøoⓨ‡ª¢Q‹<„ë[ÿE\#—ëüàjv}·Ã] oðe¢–M:*¨28p'aftþØô’š§·EEB¢ßÞ ¤Mø·]ä†G* žMŽÿxë(§“ð£À,qA}Ûx Ì좛ì ê_ ‰ ÂÜ#nÎÓæòñ¬*ãÉÑèaû'îR;‰®Ü+W8ùKäWÙ5ü7¨;þ?T…9%`Jjbí[’…u¿™-i/l{L,øqø«°Ó™SªÕ$õ9+ˆíoÈös„‡ÉËï˜_Û—ˆ÷þã+x!«±üQ“gtŠïñyQçv)^¡Þ—j<îÕ^r¥kÓ ³§-œÎ$£?ýåדé‡~¯ؽxÆHðÇnbÂxŽ( ¦%èÊuôUa"Åè¥äuÎUut¢/ú rd½Éèº,§1?j+ EnúÚždo3¸ö+äÅ-!º÷æßó2™‘O.½œ‡&Š2F9­Àip5,æä6 ~p6ÕCÑŽg¢H!÷.}wWשÐëh.—Mà¾$Fÿ {˜>Ûë-V.«Qˆ nq>È"hü'é§EF1|Ðx1/3*þc/ýw]èë{Œº—UTçmY·â4ÄB?¯Œÿèí|÷Ž)µN¼ã}¸9e*ê_п½Xp•·5AÝÈlý\P«1Žî¾-@5½Œ&ØžÔdåä§æêmœ§ð(úÇáÆzÈ–³ë7Qãïp¥öœ¨2T“,1[~ÖW³¶5ßœa<1_3– †--y‘vGºûâ*À¦¤Xí¼âï“yŽŽàîtO­•œ¡ÎYäw’N Pj¨ÇÈ´½Šÿ°kÈv:ÊÑ=QªeÉ¿zó›ý“+艟Š7& ôòk™ÈßõQb‚ìskå´¨*¿§ ÆG·¦Ô(= öf¾ð%•rZ.âꮢ‚hþ˜¬®‹ÔÅžQü”ä_Ùù¬Åx_^ƒd#5³˜¬ÏÑ_£TÁV ßµ¨‘Â%´A ­†T2¯„¯ñ"~„¿OG¼›XÒi~¤yc°¯ÏEçþÕV +m8›Drj•*È9ðj…©š¬‹u}-¤!ºÈ%b§KØÆÜzy­aO[hK¸¦Fìè$ÿ½sQwž¦¦®uØËñ·‚ð‡ º×=-D<z—…•|ø!Ç’G›tò(ú1ŠãdOjµ§¡UHðG WþK[¿&jjÁ ]ðŠK•¹Z búØðW5ÐmÏãRóJ,z?¦ºä èãa×n§ñüUYü_~þŸÄùæ¯öÌQ\Û"V!³û¯mûùܳ‰ÄÓ£`¡r «Ÿ"#v–4ªîž½ñ{B9%œü+µ#ÌBkSèabãq\Éœªoµ]Ô‡7A#%év8›×Ï4û×Vž-š•JýDÎ`sö³^ê4ø# ~äã«¿¢¢ÛéJ;Ì„äï¶&7Njؽ*yZ×ÑkjÊJØÄà˜zô‹Œgô0þ2j ŸÏ‡qÑÈ¿:B¶ìôw㩊Eã˜áxoOål”H‡‚sÛ\Mö¿}—¨ì ó5‡úAoô™ŒôC¹6ÕÈcÞáZ×ó´í\€ÇTµg’ÛBÔ~w,Ur_‹£6—â·MF‡¨IÌ=šÞ ½Ñ»™n¾¦‚æYË èp›—\Ù ðWÉhNi ßÕ{Šy·;ƒþ»ñÌx6ï!ÿofS­Öè °ó©Ùáú)¦A±8nè„ÞíùïFžX<Ðl-1YÔu¾{~ÊY”·®Xû3<8è~ËÈ1+Ï4…ß΄›·Ö =$u*`$ª6>’9VCO„7Ä;™Žö`þꀲ€þ‰Ea†‘Ò/£yS)yÊ¸ŽŸÒZn޳Nã? 2¯½²ñŸÄ,y¼fÙ^—œë'âQlj9ûå¼-ÿO>YàøêÆÞÀ1B³Èÿ’\ŠE·D…IOß@ vþ®‡£Úy**{"¿ßùÙáINtf"çÌL©K­¥Ôrª ”ûÌLµJÍ®Fù­}vA±èƒ‚0¶d(UÒQõÆJ.-þ£$ø£ƒØ'æªG#µÃ;èEÄ}âãÄö'±ÄÉÈé(¬§ãÉÙ¹Ž, s>F|ÐJˆÈ¬X~Â#DIÌíúlfLØÛþD*Oùo&Zßw8Q v ¬_ÄúG&¥=øx™ˆOW9•º””(Õ±Ö·`€oâGâ÷¥7ÃZô‚›<%ã5«½Ô7€Æ6ònˆŠZx]ó`«`ÅÓÉq £h£¥ˆ5ê`ÑôÊ/>j‰ø‚’àÍ;¨ÿs`®4ò 2©>ô¾ì?ù;Ü´­Dtç’]aГÈD˜+°Ód%Ù ‘NŒ^TKï&¯¡wò"¸ì X)‰œªeþ©þ|®ÚœìÚÜ©³ØñNøÖÁì°ø¥½‘Žü«òôO,Êü"ä_m'oÙÄúús’ã?îÏ sºã¨ÑÀOT+a¥ŽÀ_]ÀŽ=‡åèÊüÕKftã¾lh¤ _n=4ݰç‹/õÀ×”ƒ¡Vì¯Ú3e¶“ÝßÛþê“Çéè@8?øÙ>{Q®«’Ç6ÿ±vÍüãO~È¡0™{cD*² ìúÁÒ\m€nÐ'ñ0ZÇVêÏs¢¥#3)}Pÿ’éDþwððjøâ£x¯SºBÔÄS&(6sX”Z ‚ü¶Ù(wfñ¥2Ðÿ½ýKîQAóýc4õ®äónE‹·³äã‰jÀ8­r>ä¹Ê%U€•_c<”™à›ÎpUÐó; ¼£ãnÐÖ6ôž”t%;AÝxw4–Sú½1<[:¢°zb†¨áô·•ÇZ}ØÄnœºTÒ;ú'µõùð#AHI˜?5,Bo`Ó2·¢ŸcZàg*7JS;‹ÌÝÜè` ¨;û±Á3ÊbåŠða#xÆÙõ» ™‹`¿äï6åIümN³ŽX_¨ŸÃd«ÇæEzÎç!¥!"V`^ˆsX5:ÄþXð_ü¸Kì?î€?~5½!¢M%P*-Ôj|-®¶D±ñ÷lGaµŒ—¬³Ô˜œhP_Mÿv»¦ßîòD¤ÐÒ0c¡‰â§µ®Z{m­ZTMê}õÃáü¡Œ¸­OÀþÙõÉ©Mª×SâiYˆ"ªÀtÔ'ÅF52j·ÃqÿQR܃ý¶;¾nâ”.tt*’ÜDüÕ »Ü…üóWZíHõOlÂ<÷?E}pÌR,æTìŸëéã‘Yz ¿~G½þD&sGüBp S8—ôWQÀô":~¢¦\†–ž Õ»6ºü-ªÞà ’ÉÃd"]àoêèõÃTý¼ê[u;kÏw‰x냭^¥…kñÄN”ÁC©p)6~Në¼Uß)¨hÿÅ“I¤$TSƒ×á?¦á?Š&Dù×ÈÜí5X¶¤ûQÞ…$X x‹ìú.ýwÃËèšÇÔ„jX„ òoîÝ¿¤ÙÊ-‰¨59Œ®Ê©´µŠ&ðWª<€’Ò„)õ•yïƒ#¿àë=ê(Å †Áøžip+édZTÓVxʤäD¹ËÑÔ)ÄÃÜ$Ú?ú¨J:WéÍ÷—’ZŸôó…jwљߕˆ{J]ñ bóËè®ÆTüÇmê?n¢ »›ø.Xü7`º,ÆðG?Q)Ì=|¯$ÃóÕÃmÆŠkÆ®Ûý#õçy¬Ý±Q¬Ìt„ïLMá>ÐGM¾ï2f71ÿ£ ýÛCç_uWþvY͸ªÖì/¡Ñm"ŠÌ*fnÇaþ iõ$ƒm}Ïð¬‹Q'üp®«3ó»…ÚáxQ ï†(£ hKåš—£tOàçy`ðsã?\­ †Ÿ\Oýù5®Âž¶üB¦£ÿ•â|]0vë©ÁÑÿ®`!›Qÿ!ȱM ´üQÛÜ€~.˜_>–'3Ó{·“<‹§”טˆþõAïBMž©œPqVðÆ>’ñÀà@YÕàÓúQ‘`\gZïLº˜$²rÁg]ÇM3F |Ô;“\üQŸþFÁóÏ÷)—´bd¿7ƒË(߈Ãú#UáÓa“SçâCÿ’Yìv‘‡þWéŠÕ‚þ&ýÐÏm\;‘÷˜.¬ùã‚O(µ±ÔJ÷æ¾f…Éxhd´^€´v¡ŸW¥êc–¹üÃrµúÉõ‰1©íƒÿè†mœË[ù«V^,ÿ±à¿øqC#7êÇ?ÿøtÊe€úZͨ½PÇõð^訠W¿(îðWŽë?~I¤>~qla*x¢Ò<úYüGn­«:—þ‰uEf&T- &ñ÷ôóöÜã1d»õÄ>÷£¢ÝÒóU‚HªLGS±G¬R#‡¨s)*^c‰·²»½X»,2»Ì!<ˆò+Œ÷´Z"25“-µ®ÚP,¼Ê9]OìÝ ìñ•³¹ þJ•Uñ{•±?ñõà<¿º‰Q•>ÔÐíä]ɦà—ôplÏ„;ÖøuSO±²éå>ê”.¡(WÒ+hUñ¿VÿÖ¿àeá#úe ÖA—(M<¾Qö‚Ÿ¦‡º ‹Öâ(ÌÙTåë/6—O)¨æ@ÿ>XK'rjÆýzIýy;2o碨XXæwhâ×°mv6Âc0JßpñÇze¾V~+;ú¦~æ(Ï ,œ~4r™úÑÍ!‰HGôÜÔ°OÃõÏ&zÁÝp ·~ð(ù»ûÉ€x§{ÂÕ¸p5[y›™ÿË4ôVøwØÏæ0Gã¨,-º2zÆÝŒ‡ZëCoè°ÆëÕéä–ýÀ!E1ÂÄ ¥æ¦Lýé˜8“éGO:téa”‚mš âaÚ1y~£§¼þ«ŸUr€vÛ`½ˆ×ßË“(No©ü*ïÊ'Xä>Ìÿxb¦ç+Ý©6ðÂ4Á†¿bß^ÔeÒ¿*«CÙû>ªäŽÛõ5-P°›b×rc…F5rY?‚fVg㱜itbŸ]ñž[˜ôô µý3æ{­A¨õ 0‚ôÕOòo¥/úùø¯9ô/9þ(hæ¶c)6Ñk¿TÖ§‹Á}®&Q]ž10ž2VYM QÿQL3ÿш™ËÐàÇïQ¾íº¿FØÿöèþä"Œ1/P'9DVØ…Žÿþí³œ§p-ø#õ0W8#dü¼Z'òÕzÂ¥‡¤´v’mßÊÿ¸ 8ŠU/ÀÁ½ì'"'“µI4wâoå”V›,ËNÄ7É¥ÊÿçQ­òä/L¥Îþ<µæÇ`Ã’/|Óe¾²áo.48ÔÇŽ%G7'WÖÌé?Î)CÑ?2Ãôâk…õÇ ¶[`¿]pv5ÍÛ¨;»¬Vr+;ó®ê©'¹bÐ3ŒùµMÈ̤‚W<ÁjTù¯ÌÜæ°Íy^S?˜Åù'çˆÔ'±È¿ê¥ÆÖ\5E[”¿kã:jBjýN ©^ŠÔ*?¾éƒc>9ѕȠςšC+®µQ·Ñÿê/òw«kÓÁ5™kŸÄ5ò~>‹AD“ô¥ÔgçÀ$ã­î€Î]CxÓã7rþã&ó£*ŠïØÓÃ(šÇˆ@]ež{|1¾ü^ª Öv²øý¸œøØþj¹:É š‡I†bØ úl¼Ìàà”ðx#ˆÚ#î¿›L™‰>wÿ‘ 2{™—,§&ö›ƒÿ¸ß“„(±¶Ì›ø³M„ókck«ˆèËÁóâþ=umÐË¢Í.Æ6ÓÝCÿ/s"%èæ,™Ñ‹CÄ#¡/ÛÿQ†h;LÄÛ’ºú Â7(#ø Éß `µ·¬vnÈïð ïWG‹γ^‚ÿ¨ƒï)?Ux ÿa{nõ} þ[Š80C­±û»Yq¾ 1º}bøàÉÓÁû»NÿÄýbwǃœ›|(è‡@‘`‰àÕ¦Ò·*7þòµ`rªÊ«°èö¬ÄäðNw´ jp îÿ¬é¡Ž#ÙOi¼B2£7÷f8;,~iŽ~î‰/t¶©êô|xFôüð ÿF_fatÿi~íðGYžX%xšÄF ãÑYÔöDpKßé_2…nw˜ ñf&=ŠJ-ò4ºU}A©c¨¬ u뢧ÔåT¼×ûÁ†µâ”Å­2úÈbô£õ`ß-rxûÕý|;©Zw2ã ƒ­$~ 3ÿ|š(„¼Æ)©%ûPÍòUeRàbÖL£€u†J‚ô¿Úmhô4©nÞí’Ée{À51È =œÃTPÿ‘…;ûžû÷ˆ·¢!÷)}q3›c¨ŠX„îñ†ÎPŸè|5͈B×Þø3Ôjø¢‹ƒ©úÀ„Ÿ¥Îõ);Õ7TâÜ\–‚Óðÿ1Õ¼]qÓš×ÍÌt«÷"ç¬8úÇYª7 Pƒƒˆ«h47ø¶§X'‚{RviÁä툒ÊÞâŠ~ÜP­ø·žLHÎÐ.˜ÿd²ZEÅDøò[èeQÖf‰çZ¶+kx»ëCþÕш:‚Í(ò+a‹n¢µÆ‘þzZô42º,§ ÖÀ¨ì<Ãá­dÿ]e49ª;Àɉ*—as Á7ä½¶ù«çð8‰Qjsò=X³¾Ö=‚» zÀ‘7çlŸ|ç´–†ck ¾ N£(¹lùÊYì®Àïí ZcÒ/û—¤¥ÿnø¥Éà©$¬Î==Èjx ¯ÓÀ™£±ß±²ïàò^ð[6½‹b#ÚjñÂÙå*e*Y”õÂ’zF<ÄnLA|·?ß—ŽÛ·4e¡Vj=ßuuɧäÆ;ÚÊùæßÅ£ŽÚ:ƒ…^0@fá®ïÀg.G?Ÿ÷?‡<¦äx·pFGÉ‹.Dþîi2ùrÝM¥?õça;<ÎQ‡ˆÜ«ì0}ÑŒAØÜÁ°E¥Ñ,Æs»Ø(MC ã,h¤$Ù¶#éRÓˆ˜}™Ìg,'Ä Ÿô»J"ždC=7“WLC5ŽƒeŽ0¿6öü!Šò`bÞ§f*JúR?h_w1Ö{D¾ð ²Ë‹ê”…¡îa+õ-þã(§¢P͹ïÉ©ö; ú) þ˜c&$Ö0æŒ3êÁ_µkz’£€×zŽåtˆ–¡Ök'ìŠwæ–b÷ïË}è¿KØÉ #—µƒúAWz2ú/©+¬l&‹Ëƒ;· bROYA¾ƒ‚õçë‰ÑëïÁ'­´ò™™H²}¿ •ˆ•ÑÏÿdø”ä>Ì??µn ÙÕQd—øc¥r“úsúMò¶Þ”.¨÷ä ìzúÌ#x HkÕéÀ¾XìÔjô6OÓ ˸´œ‹ÿ˜bþÇrå†æÆ™³û'&Ï\Ñ—-¬࣮f6¶öøßõ`‘Ù¨!›˜ÕÉtcþùP£l§{[Ä~Š!Ná9e„6‡ŒÉ¿°¥ùê^#¿õþj=3³£¤ô7—Zë- ÿÑ™ùïë2=}31E+)õƒOà¯üE ÎWíÿJýÇG\åóɽq´R~Ï.;ÔáB]Ä õj÷¿Z4w+õçá¯*«§ÑT#“‹¼Ú5ÇaX ¼í•‰@]ÑÏ«3?Ê_kå¦m¤*ñ÷ü\ ñÆ=©@|È>‘Uϧ¤ÐÒc›‰<¢¾Ø@ýà‰à_ÿŸ½R¼•š Æ‹Øú œ ëde…;É/æé±ýv›¶úò:‰Ëÿ°Î/ Dÿ˜¾x zYf<èÕN g3ûYä+lb\lã 4ƒtúÊ<,ñ>Nc"éךî;&þü•Qóþþ4ˆæîɺUµ¾¡¬À=üªndGí°ò×9ßïÅXs:ª/–ý±£“ñ{×ñ߉­À WÅð|hð:ög©™_[†+›EþUB²2“‘Ö^ç£î!G±›5ر/äľ#ñ6¾hÙAš¼%Z…‹?V*c´~ Ÿ‚à wvp_Y|ïoüôp½¬x¢%2¶AÖÆ/ßÒ÷ ÷¸“ÁV Þ¡D8þÃî¿»‘wQLÆD¥ áÄ"ªíM­ËüGgþSfÞ Åþ w3vú°] [¡²ŒþWƒQô  D‡¿²g²¥7ÔWÙÊ(FþU ¢ÈŒØþÆF%c'þ#¹Qè•؆Ð^äó\ž*‰ÉÍiƒž²•þíoå ø?ú—Dƒ{4ð4ýÌs°×é©(±ûš†7+¾øì̯]jÅFðWÕØÑCló´û×àh ñ+±¥ßñFº5Þx"G]Ñ|†pžt‰IEàc˜›èbt¨õºã?Ê‚ÇN’[Ñ“§øL†¥_hÂ_¦d~m!,k.˜ßQ…úÓ`…–`†Ü‘d†øc¬ó°$aŠÝ&ý¾~û†÷¬ùWñ±Ç.f7z¬Ì¡ñ2=[î˜Ã±Ê7È^.Æüsèç'™õýõ™°¢ÿî!Å[MËìÏÛz^&+Ÿ Kä00VÖÉK¶Tê½×ß” mÁ×O9ªà?Fq­;ÉùOÏÕìÃcçžMg-Çf§Ä=BͰû—ØYA¾h]GásÉíZ*5xôÿ¬¹6”ÇÜ¡'“ÍèôC%*þÞ¾f59§ÄÝw¨k(‰ÿ°û§»£,‚¿(/Š.¢hØÓ­Æ'6­D<±Å9J‹ôTËåF ¹Fþ®»Ù‚Ž{ψJß1o#­±ÿQìq¼ä-ËݼQv…Z±™6Ìî¾Ó½qqLðÇB£>üÕ,jëüÎ ôÞF]æÈw‡Ó[Ε<Áæ?C?ÓÂÌÿ)J¯Üâ9ä•}‰ÿßÈ5ôßk,—ýŒ¬ÌªDfk2ë±qÉ5Ì3ä¯#mÁ|£f¼˜<-†;ÆwÇe¼,g¿–v•ÿ• †)1üÍT´‰òà7êã'š‹Œç(ô2O ªÉ ÿ—‘ ”6!¦/Qî¨ `$ÏCí‘q¹sçeTx“y°§™?5 OÉ|'ø«ÜtE>‰ÿp£WãIåöTäPÄ4ª]¢¸óÝ;MýG"•¶¼û°N.ôhÉLþîR꣚GÑÞïÍP‹*~s/jÏ<3*õç]†øhô¬JÏ©ØÉL‘|ü1SdDÿèC¤˜UkdÀã¶1Ö—`ÙìÞ*s­íô¿ªi­‚ÕŠþxÉŒÉîôoÀ9ÿ–ê±bÿýÜÓa†èõÂQSù=]úÇ=pÀƒ=Tú«qé´þYÄ‚í¥þ#…]-ÅüsCÙü­‘øìc3ù»nXÍâúñ޹†¹É¿:§ÕïÕjÚßä_%õ>D´d=qè†è‡Å¯¬/IôJJ\-%ÌŒ‹È&ŠP?8UÝÑ"A_OÿÄz" Ì>¢ähÝy‰ð ˆ¥DÌv­DQx†¡â¥V#RúÇ`­7Yîàù( cPìNÁv]˜—„ îŠÔØ}H¢éégøW[M©Œ" ß#€ Ó+!%–ú‰¨Iµ‡\Š/ªG,;öáÏ“±¶™µ¶ÜŸÚNÞ£.øñýØÓ—èµÈ2n Ë…ð:.¼[ŸXù::¬? ÄdtŸþôÿŸô·) Úòˆ›‹>–}ù /Q™1[ËøŒt_§ä_ÓOŠZp†GðÊ>Êtm¿7™\ ²¸ÉwÚUŨ·mN!«"] }Yi¶—j~õ*üÕïõ/yëXEþU5]^zIQ?©1ÕÉÊQ­³óh3ÕÔj°êï<(ÿðIMžr[z¹¶#d§º/¹^KI¨Eç \ѤpkÅ ÿ]Âã^Úõ¸GuoÑF ¯£Öe™6ïýVŸ’º CWf EþÑJ*Îh1Ч[€xá9LaY|ÎýZÊUŽ2†‚‡r0ÿ<µØ–ußxA]H1s>Ú´¹r˜ß\YÞcœwÐP&*{ј+Ãê—ä´ÎÒÛ¢wß0¦šQÌBô›ÀüÁ{TМCÿ˜NŽ«+µíÞ\í$ü|"£3•¬Ÿé.ø-"õ«œªŽà…ÛL–n&ÓÌB?ßÇüŽët,œÊ,ŒZ|\†:3Š;σ§ÿŽšÜɹÞå*ø£ ÞhþD&BÏóG'™M޲;õƒé©ÏP­ü?üÕNô<Ì"Ìm²Qk=aub›Zb·ÐþãrU+A4Ò‚_P^gô¡è5É¿ªd~5v ¬\gþGu²ÃLø+7´ô(ÆE&—%Œƒ~žTûR/ç<…Wé:•ŒÉÖDiE‰o¶Ð÷$Hc³­þ4¿PUò·µ˜Œ¬<Ö¼Êy"ôf^NÐ3,Ú±}ó oL!¹ø×y[þŸ|²ˆþ‰o+Ý@ÿ(ê\8¿á'©•#èççÕZ"¦jÛüíFø+¡Æ¢ÿîr„D¸BÈo¸åبÍ…°š™¨¦¾$«…²W+*©E´Mô¿ú=ýãvl©Ûd²Î¦k¶ˆ¯wQî« a>®kŸµbèç'ÔÈTû1YW¹«d{ÑŠ™£¤ÏÄŠ¤”™¨ó®€’µ;VNOÊo$´ ",«ò |Þ\ë¯uc_·ÙÙRþûŒ½îËô’8| /’3ô]äƒo}+ò9ÏðŸûñº£ HÇ…Æ:•årNc6PW1±Þ&ž—p õÕ°PôºZDSä÷ªÃðhmˆ|·qºýÄ~v9þãlFO– ðd—Ð?^q‚íóÅ,ånØMýïŸc¢|/ȤIï«© (ûÃàžþFpÓ§ÈnðLjûâ`5–Çf¢2¼€¿ kNVzh}`¸bã{ìžò×ñ›%‰©£ÃŌןj»4{þy'ðÇnT’UA׫Òw«³mÞ /õçkÀ/õñ²º±åf®t>wºlÂke J³=ö"ø£ õ)>Dø¿%k©Õça–œ§ŽÀ׿!ØÇ_›= æÄô3ÊRQˆJµ2è •™.~ˆÎÑøQZɦr£'2…y /)öüóúøé°÷×ñ²°‘ðWÑÈ­ ÀÚU§ãÒ=ê?îёѕ¬ÙB`(T*›Ë¾TWß‘µliO±çF'Ow¥Q¶™Ši‹úóxÖ$üÇ,£ybY𩣩Py†Å¿«÷Ö?h¡õó)¢ (æO¡,öu“?´Ð‹~’šü+Wzyd´ŽÀ¯­1š¹Ç3ˆƒìöÊœF3ùAôsÞÁdôOÜÄh†ÿ¨þ˜H¾R*ã±1’ YuY²{è¿{Ÿ¼«¡ô©ˆò0_4;¨À_¹Ê¯ôÑí\oý¯Â_}‡mþ^(…ï:3t”:’uÌŸZ Úše«óVÖa-6«À_a—Áf£ûx€΄Ð?ö+´ðWÉáEÀÔV¿¶pžB¯ þ*6¬k¢½Lº›‹;VŸ.igŒGt±¬c®²<­ïøó6ìì-5*y͘d 0í#AÍ2Ù<Ñd%±ÁyÅÿÞ'Ë)•`þê­£}PæÔòûÁëô§bôáJ1Îÿ6G ¼GVf€ÜTtåôo-à8«--”E™^ÿðWÓ2ÿü®VR¨ÌÿX«j¿é?2ŠsÄ“·EÔ_W}Ž £”rJMx©i¢¤˜"öªg"µÃ'ôO¬$žqwa‹æã1ÒIWjºˆMÄ«A48éßî."S‘ØžúÁ ¢Ê»}5ŸS{›(:ÄŸ‹œC‡·ÄÕWñ¤uÀi"ô1•1¨2^".ÙA°îI¨µøû5 í°$\Øqø«ä mÃW•$ÿ*¢ùQ—Õ%¬Ô ßqþê>²*¶¸‘í&ªJ‘KõI·U‰ºª™)(WquüG|ø¥(ñѦUø«†p@äï.,ÂèØ‹g0Ô'ñ“ð-—áÌê„;?j ó;À÷²BMî»/Ñy.bêXÔâÖÏh7µ”†7Ö¸®ÜÂÙÁõºs'Rò=9œonðF/2pS¯õÑXû¬±Önúù6Ø¥¹ÄÔv>´=¿Õ—çRÿ¶ì³ßG~õƒaýÇAu†ÈŽbÐ'p/úÂsNß1âÙxd9e3Öaó.ÙÉ‹u7jS­Ñ§]èy$ºs5zÑŽyÂø ¬\’59,ÿi”“T—žÃd7ÎÉ«0îM°YGèõ˜Ž()A4™Á†>ÄöþXÀŒÄ4W”K¡VªøZ{þ`~®°$•zñŒAÆd£8Jµ–ÏÆ i¬6x§éìð V4öùÝâ—€?è_~ê_Òÿq‹r|Ÿ¿îKŸÄ•pM³d7ßydH øûTÆo¢wäEr|׃z–ÁÆíC³hAßÊù0¾;<”zZxÃÇdgŸ‡ÆåJéë˜ýx;ñ})êºs˜ß°¬ƒ˜ÿTÀœoþÉ]ž ’²'«§&æê¢â!"Eòp_A}S æ!L.J½LðA,Tø»¬`ã õšÎ#S©.ñQWæ‰ä”ct7±M4t¾{»•óZ%BGÖËK壗>‚úÀ|àùfR&[=£ûÕ`ЇÝàÿ¦NãwÛè©Õ™XǒÈaúsÒÓy /)ƒµé"ç­5ÜEjðGëNþˆЉj¾×ºÀü0aå褵ÍÈF¾@m3ìŠv> ýã9enb…óþ{Ÿ¬uä ÁW`~TXäÙ½¤ŒQ¯á?âhË7Në.ú—$§oõƒ¢*¿WÿñÎñ˜y %‰œ²““E{NÇÄùÊ[ú—¸jÍéð›Xý½þW.â9öï¾hA¬ÜXß"DeÅOÍÓTBT¡ßéN8²È¨Çå óÏoÏo'—g==6rÉòXÄ*b=ÜØC0e&lE/›ùQ‘Á\=Éß)ÚÁ¤/ žk;Ñ÷5˜¢ôà4džgñC·Î_z%²9Ïð¯žJreøÊW$'"©)ë.Ôz_&Ò\sU«wö.^ó0Úo ½¬V%”UùyÕ‡êZô‰îØòíÜ?»ÿnm|\#lÝ.¢æJr-ñ÷^;{ñhÊè~'Ã5üG…pý‡']šâ¹RP{Ø€ï;‡ÿ( “U’žùƒ c š0QWˆý—Á×éABpçÓàž$ÿêo1 ½b,vë¼ÅT¨-xÛy¨žDË™e/²wý°Qñ v¾°=ä ß1MË¢†í0?…þíÙMêÚnã}ñ—gôJ(}È¿Ú þ¸OTúº¸jÆ r2ò´ncSSíÐFÝïÍþ,ªúš·¡-Vu9¹×QÅróÿJhôh'—“yGTã3x!7¸¦ *Í7t;V“;sG9jÅîLòj€´{t\ÇZtþ8ÄÄÙ±LÚØÇÄ£xÖþ`Üë˜b~OÖÆŽn¦R#œà@â£wZPëõ%áÌΠŸW#ãù‰þ‘®\ïQ€_á?’å_¥Ge8ƒÿñÂÛ€ã²ûßìâ~êèöîôüêè¼à„ÌÚݬg•ìŒ˜Ç ¥,‹lf¤ÂCºfLƒ­»ËÜãÌ­]h¸àíš ©eŸÄÞòpéP§z‹IÎõ6+×To°÷©îÎót§³TlkùÊxD½F4þÃüÙ…¼®Øtn¹i43ófÛý‹r6Ë2ÿ£óÝ;¦xjÕ@ºÍx¢¹åU²ŸÖñ©=ÜÂ伬¸O²Öl ?vÿ1oÒŸ‚†ø#•ì£LÏcøŠ¼N%ìüGoþ-_pÍ(CöôŸè1¨tIDþÕ|k§%­ºVWüG*ë‹‘Ó¬/–„ú·bþãªS!áùcÁñãêï;ßuGóÿ¸~0 óχ¨×ÉŽúRHÈéÚíH¢*j"êß0ÄÛù["õ‰²>šMàÄ7"™&©< œÔÑÍ»†¶N Pâ‡:¿­ÙF|B·}!ºJ{Ðÿ*ŠžJY«JðG)áB½Ö.±KÝÑ"A_£<¡þã#¸cÈrlg)r:\Èß]Sû´Ö¶§øªû#±bm­;õ•àÃâ{òQ£[ÞÁ&À7%…ñ{Õ°ŸE çþÕÂ.ÊHâì=\_:bÐahÔÉ9_ʼn4/c½^bg]å9ðÇðGq=ŸV*‚»øD]"ê…õ»²ú(¦Ã3-Àì'®À;9åkGƒ]~ÅŸõ«L»ìÔ¦°Ù=zÑ_ðW¢9uÙ_õYr¾Øž¼üñ¯éËZT³ã[ü˜þ¶»”}õk•ñZKpó›À.ÇÉ|«Î¯Éø?—U¼aÅšäÚ¿Ào.§~â9w¢¬ÞÈùæßÅä_y‰ xƒYXûìã$øc'Û 9ì“Eàìoa‘½àr*ƒp‘Œ‡Ô*&b~Ôjp Õÿ¬¹BÕË·´ÐrwÉîÕþ%Áw©C?‹7ibØÿbá_à£NþÐ ñóü(CB\Rr,šøSr° ¦¹‚a|௚ÑQpõ QèŸØžúÁ£Øû<ÔuØ]¡ðWcÄDR݉q¾‹+F^îXec³aÀŠ• þ£?ý™…é×5mý3×Þ”,„ä_} ÑÐÁöeû¯à9ލJp•ô}G å÷téà70³rM­ÞUs1ÿc}þ±Ú‘_u t×Pï(ŽÃÁ߉Ï^8¼éGT†7Ðî>›€ž¾±ÔñÊ­¬HE…ÉFõµ’(ÔùhIwƒ¾}wÄŸ0¾©R0u7¦µ'¡²¡ ø£¡¸,ö«^-ôõ×ÊQø+(~iÜvü‡¥ç³Ào9nØŠ1âúydrκk}ÑÏ`)çÃÑ{rj¿‹§$Æ2æ–_°ßD)P“®§tžá_mUS†cï:+4¤¿s|2°n£Ÿ¯'2lç8ŠÅ;‚åðFyΣÒGpýÕM쨌Ú!,ý 1ÿ±P¯‹ãElŸ¦è>é Q¿†wÚCÝý”ç)ô.3Ó¿$1m(ˆ(¥>Íè¾hWz†~îv˜S]ž îûŽž±Ÿw-葨­ÙÓÈÂþ³•¬Çî\Gb9~ÆžÃbç>–Çë~ãþ™ÔoÆ¥n¡Vh+¾Þ›»ëÆdæ"µea×r8|´í¢?xb>?“ˆ}‚¥ñ€›\‚†2Ö΂Éøóï6êË?ÞÖ÷óôøýs´ä?å_-ôF#>Es§¶œ¼›cðéÏe2v×¢±¾1ÊQû×݃õ“‚.ƒC¢À¿œ“~š?øQù†Vä®$g¡ ýËÓ‡Õ[Þ¤ISì_+šñ ýܤj£&xá †v§ôl0•7”ã¡îa%2ê°ÿìévRÚ}K°í­d]c!ú¹NG(ËdDEé ÆiMF×z1T•3DuŸÃàqÂŒá›`²Zà4?ìô3ã ³O’¿›Õ:Eµà‹n1Ûj þã«,à®ìǼ¦çzQf.öp>”hÊhe5 n]b¨* ñA¨ ˜ó´‹úŠîTµO£Ëí}*øÓoj9ó£èeΧ¯ÊXüBfc&}öQ¿;Û¹Þ<êÏŸ“I÷‚óùJ~OÐÛjSÐwºÂ6У0&ýwóçôL¥¿Kÿ’Wô—9DfH[Ø¿"`½êä÷Ws¾{'/-ïAebœ2ò(ºçT#µëûQâóÓ¿}#¸h'ù»©Ô8Š·ÛLí¹a50àÃð.%!ùXˆþ%^Êp*ÀâWõ›¤Ðßnh̓æ×f6³YãÌ¡ÖVXµÒV &ëZÖ[ðGôÿŒdŽØŒò#qjý4!&ž8/ýÿü“mW%˜»}Ž~þ{uyÁüƒç/òwKhñ©ÿ°ç­wTS]©Ô¨­^£ŸûÓàoÄgO¨ÿÈÅûž„îO.Úõ»ÒP¹Eý`2­ú¹® õ>D´¤ ˆáO2Y»Â‰tÑûñ´*(kTf¦¬È"‹à³-ôõ§ðtaT‡±Àíe°Ò•ÅRÄC´Å*`…%â*Y]‘Á=ÑÏg¡ÀâÀÿ¬ èJ¯ þ)–1)˰ïX³XzFçþÕV¿;ìG„ V¿Ö=#çÜfºYÜ@Þ‡uÉwßû¼‹]I«Á]¼©z²³¦ …Ó°kßÅpbÙÅzuÞüM²/–t xéRÃÑÅ"2èˆ.ñRŸM*þè„î° «±LaÏðy *…ë?F+mµº|=1Yõñ޾èËeÀ“Ÿ‰/—éß´hÂ…¼ÓÊhÃÑFN€ +‘Ÿß ÿ±Í‘‚úóá`¡1ø‹4è0ž¬µü7 Ó€ùI±À!°ñÛé¨×T^æ7ÞÁÇ]†QZ@ýyØú1j+ч瘥è)*ùWGõXËŽàKT½¦ä6ֵޱÍ7«#Â…? þÂ<Uµ`»Óµd!½€ˆ°3áÃ+Á@ÿ¨Œ2p€üÝ8Ôçõcýëx£*ô.¹IuÞY„Hù ÕY!Ëpú—ÔƒÞÂÜÆ’ê…©×Øgt¡ßîzËÚG ú|Ãýc¸q—ÜØô°>IŒ0—§àY^†ÑÏljj( 'Pªpµ¯ô{Òþj õ#ãèF~ü…œà”æ'òz›¡Ó'«üÕ}iiŒ<`®aÎíeP¦*ÛÁϵñöLªÉzJTøLä1å6ÛÑ{vºù=ú™<`^Ó ê ûaû·s÷&‚ó‹yÇ’ó¿Ø¹ÞFe—… o"¾÷ðWúJxÃÖÔ{Œ%ø |]-k3V>'5€—@ªÇÓÃÙvåé+´[CÌÿx¥,ÕrƒÞp> ÉMb7Šwô•Ô°çã:ׂ>Ø3­è|ˆÊT©¸Zá¯âÀ_ çýœ%7…¨¼L'žátŒKÝWÞõ·FK+€þ%[¨üîVwó-þ#¾åN%H]£Uü÷©ÉÉj:äPÞÈÁøàä|b‰óŠÿ½O¼‰BÌ‹{ã¨õËî©í)ŽòN飪ZzU­VJpZ×9*©Õ jõù»‘Ñ‚Ç{Ç"mÙR%aéï‰äZ4Mªƒ•§ZSÑ€ùëXõ÷ø«fÂîŒû(ÈB Ò—“ŸÔVÉ¢%„ù() ‰®èçË"Yÿq…þ»…ñ~ļU‰‘ýõlèç1õŠb 1î#"uwðÇú‡—'ƒ/è—ŸuÑkËD”ÖÕx£ Xb»ÓT2"ÌŒr6oÎc˜ÖhXÆú`œ„ú\Jó½dsÄÆ‚Lã”àŒµ"Ò¼÷a÷ÊMÈ[^ë¼:¦"Z‹PVåçMþ¡m@™i÷·Ïø†§~¤µKà ŠÈìû ‘µ sü5þêþÏËýMêóá?‚ŠÒò¶Äá]¡Ó$˜m&oBg}:qÿ{Þ³Ç †øè§ú Q%\þj¡2Ok r:q¾Ý!±WÛ˜Šêwh+îèO)ŒMزJr˜Ç,Q‹ŠÅœ0\áõß½èÈB¿g»ÞfÞÁÎVÝG”ý7öÁ¶s#ጢÈDêïÐ?ÊÀå\½@QÈX§Åø©ûLµø£ùCûÁñý@Sõ@MÁ«©¡»d4t1*£P †×¨Áï˜ÂD¨òó£Âúõ¨j|˜·zà¡|ßîyjx±ìäZg~mm*±wб궃ÉÉÚͳ/…¯:'?cSkãó£)„|,ÕÕÜ«}\Q…lÿ°õ2¡²GéËò§#cUã úÅŸdݶ’YQ,ânì2ñQ ºsó\QUÖçäú€M[ÊwºE _c™q‰zó\Öê3ãæ’o¼Ò¨GýàyÚØüÛTÄd7ÊKo1Ò¹½ÔÌÜO\Û§·äTfŠTúŒì¢Ÿmlç|æ×>@AòÅ̆!ê {çËŠÉ7Ëd C±x;4ß¹Þ ÅG}Ë“°û_E3Å6ýSÙÐõª,õ¹¨ÜÏNýÇF›ÿ31ÿ#€®UÍMo☡<‘Šèç…—žpJY¥ .sÏTbòîrÝ‹õ®`ŽÊt©w¡–E bCsXÄïv.ÊÅÊIþn â„ÖœAºÚÐoäÇ·*=éË”ƒù^|-±®™év5A®Áº¯&£Ó"º= _qÄ´-Èë]´ð:¢ì ÿUcpE î’݉hÜUv®Ìž…Ðl!Ñ=£•¬Åþnë»Ñ?J¢¸0ó]Ïå|s[s\pTEos6Z6šÇ'Ë þ<5×iרý;ÀÝÆ7¤SÇyüé}{ÿ¤OÓbýÔ aýKqMèÓq¤³Ë£º;ÚwSò¯6‚®¥É‹­ËüA_2ÙÒ½_ë˜FyÿQ4ÌsQT¶¥1Ïp™|„9Nv…=-)ÚöbéAäþ(–¿¼¾©DE»;ë ~œ#w¬<'蓺^¼¾ª‚¯Vc#›ó=Õá¯RƒÖ­a€¶A$5¾Õ >lSý¸ÉAœ 赓gÓ„þW]Bíp õçvVÁC°iNÂ;yK?›ìâvô†Úgf®+3EÐSþÆwÚÓcæó´w’õŒ™½…ä¾õçß•‹øÚdL¹ã©'ÂÚ•6>ûÍ„dµzÑ×€wª‡ëc®6îaë»™·ñíC¹Óã¨u< ã4Ãùp—Qÿñ’Hàï×k©Y×À_y05ªÝF¢W¤²öã}ãÑ¿ý.™R–u‰ùç[ˆ ûóô‹#â.öŠ¢Îwo£âåÆÓ8NNÊqDŸFÈâxÝêf 2ͺ¡ƒì!×x>™»Wè-ËjdT¶*5`¢‘˘–8âUˆùƒ;ÑχÁ¨Åv䛿­œ6ÝÝÆ3zM «‡ÙÀZC±ÒÖT³5µéñ]à,“Ê‘Dtë`ž_.±ÓyÅÿÞ'‹1”kÎ_w‘ùç¿—×äüQGôó®ê95ùW“;}‡#úUI 6P_‘#™\ÖàÕ>:|è'aw"t![ÊO=£ªj7xÇrBh˜?¨©ŽPç7ø'Ãÿ¬…Ðyr—‰óâ“fð´*)¾ä´ÐwJKLÿݳâ¨êþ†ý[¦ñÖŸˆe¶‹{’ÁY@¦‚c++ã|y+ ë]A¼ŠÈ%†ýÙpþÜ•þ%ýÉÏ}E$>›5£‘'Ò+[Ö6ÿ~PÄÌœW?ñ2Âk¶”qØÉ ":G=9õ<^³$JðjÝLsŒÛîµ™Ø:«žR³qâ?ýóTõ ÆnGÆÍ&pÃy1‚˜z>up7PÚÀ Ì/ùÂm%äß"Sf:þãW•>¿› ‹;’»•‚ ýúÇ8ôŽ1òo<ä0Ø&]^sÄÁ{®ÂO-àiy‹æZ@8[<«ÌÖFs¿>€Ö*¡ÁxÃG— 2RE¥`þÇ|ì^#¹«¶ŸýWEwIËŽÿØçhDýùH|Ï@üC2®füÄJï©ø x¤Ò ¶þ4ü•+ úe®ùwâ)¾i„–T »Ãejwñx!'z‰/{ø &Eá§~»%ý PqÛ¨Nvl ªÐò;Ò Ÿï'«U…¿ºU8Ìsy¢˜AÞ15õç/øw7;³õ@”„@æV`zªÃRéRú’ÍhEðy§Xs þ#¿þT =ÿ£.úy ÐîC½ YMÈžËB¼»Áh€e]Áì£`†øìU;ãØ‚gÍDª[䈇ÓÂàQ¢OïœõÚàûòºq í}9i¨%ÉŒe}jú ×¬0ÊQ¾ý£ ýF<ñ…‰ÜrUý# ½æ÷q¢òá©¡Àö»Á3­”2öÒÛ0;+ÕbÊ_ú'ÞäêGà?ž`ë/¡Å!ûúÝhƒ§¯Pv«\ëuΔb|…;8B¶ÙS£þ|Ÿ¡29þ Øæ,õñé§ø”¾Z‡ézèŽíÁ.Ë#•Þ!ø«MÌÊzw#©!‰=ÔŸ'µ*á5ÊP!ÿi^eÌÛøIè(‡ñíc@ Â*d4†“ÓeK"º ¤îÎSxX­ 1±ý‚ô‡Ô\dRÔV&8Öµ6{X¬ëæk4L˜?š?ÝðÉZNN%Õ]1›ìþçà bq8oÉÿõ_mv$ Ñ¿ý™£vÐäÀÿä·&¥B©ŸzSÍ¡%Ó¼•’œOGIºVeW©wÂKEfõ§Ž“ð åÀˆÅ±Z¯U?0Lqe­V.«õçiÔðzZüzåê(ÞÑëÀü—ч‰¨zsºªÅÀæ$&Ó³±x@ýùñ_ÿxˆ¯æ5™?Éá}%¹~qÈA)ÊÜìô±xƪü¼f¥+VtÙ ‰¼×à?ÒÓµ¥0kïÀØýKâÉ0é;@:¹õdZÙV|§NEOèã}ÜpKLA?˜Œ*|’8¸ oøj˜«`ŠØDì°§cDåW“&“+9Õ4Ø÷QtòJVIþhL^€­g.&R˜FÄ‹xó˜Â›w}=ÞÙ›^^͵o?_¨cœ2Në©{麳óîŽZV•|\ÑŽiñuDþ5å ï2—ŒýO"Ù•on𲘵M ÓpIMa©ãÉuxñuÄsðãaµ^)Í~ ¯üxø«ä;Ü/öÄíÐ5J­Ö€L²=èçîÔçäÄä•6¨¼NiºÕ5‘-UÚ`Æ¿±"ha†´ŒÎT¤ ùÉ\Ç&O<†¥Ú‡gº «“>ÉŸþíÍèâ”ÆJ†ÿN”íØòDö×ÈÀZ"mÌõRÙêIצþ¼ §÷ Ìq<£ #iyÅÕ©´ØD¥E4"àÔôßu³Œ¦à¶`MºKÝÇ“F‹ Ô†‡Zo#õuÀ·‰-Æ3õ ÿñÐO'Ç–Fak+ÝÛMª¼ŸÐÿ}¹M^°€“9ŸÛ©)ñ§g}y¹Rüå|q”Êe®´ëu’vµ{Y’ùƒ^¦›ÙÄð¦{%ªgJcñ˜« *ò~¦ùWÀÔE ôûÓq=¸šnrA}v þJ~t/ôøqøÇ6æò¯6Ò¹xüŸ‹•‘é³tÂZ#x¸©ì%yÌö¹"*:ñ‡r\ËÌ™«„?|á­‡å¬üè ™Ð¾‡ùõ©H,Ï®¾Àï§¡‡d5£×”@v%ËÃî©SÏy }©?$’Iµ$ZΠ :•ÜÅçlc¶bUðG;ø¬U–ŸYÄšBý ³AŒ[p ‘5‹¶Š¼þg¼U)Å"çü÷>YÏT†`K|ýü÷êò‚w*•ÛJMõžêªeÓVMÁõ¤{^ò¦¨/ÁÁUîÁ?óëÏ3p;Y«õ`c¢èßñKIÔ<ÊfjäÔÆà?2ÿfýyCgðG]b†ÆúúCÕS¶ª¶~]¤dþ ŸØ¦ÞûõvB|å8«"gìY~5ÈbºD$Xý£ºØOasCYð!íéß—_l ñs¿ú´±6ÿQ+½šÌ¦¿‰ÏýaòݰP.äçŲ™RPjV¼Âñ1Ô;ÞŠßð“[¨LBÎÌ"²²ÒåÖ]ß®ïÕóž¥Òè8ßáC<žUOaÿ’7êrÎf ®ì ™ROÄ2¢®©()‰;Á±Oçøðµ8d_]æ;Fˆ2¿d*+.jô’‘xŽØdeF£¶£1Þ䩾޹‡>‡Hßäz¿â9oûÛä³¾š‡[>W™ˆÿ8^[€oµó¯ê²·:ìçOZ×µìd6 ‡ušF8‹^ %( ß^þ®§£!ýwínô“dOÞò”ä7$S 6½5Hkˆ¤ zô”ŸÔ²8HîêéT¼þ'}¢öý§ž-óÔ¿ˆ é| ;ôüÝ(D/û¨føÂüä4U'Ьc\¥Z/;háOjVŠ€mþ„é+ï‹þT'…~ºO”¤øûúœµ5XÜWÒ „znåÅcò,G rX“[±§ÔŸ§3ÊòD÷Ÿ±õ7ð•8§¯”S¡VlBýGu" Gtd¼>z­§ƒ¿ò‚¿*Ä̉QäÚî6sX}ñŒžÆM¼Q*2¹ÞÁßm% i£hÃB­·ˆü«ÚøýøµNðXÏåG㙿'PxòYÿqg^E–uí[U§NÕÅݵqî.ÁànM°ÆÝÝÝw  à ÁÝÝ=‚;ÿ[™áFH&a¾çïaž.œœª:µe­µ÷öCÕšþã$ýægпÄê츀¯·r³7ä \{¨þ»olã”ÜùZôA©F&Ú]Ï…Rà£AE<¸Í.cÜ5æetNkˆð;Ó}d\üy.Â`jîÁÃÍuÜÀyðç_¨Ý|A¾eŸ¿W64|˜‘ÕÐôG!å…çXmžiH /ÿƨŒ«¡ÿ.†>³–ÃlfþyIÎZ-lIuiõdXj”±7E}UÂÌk¦â÷„øº"xá/dGý¨sofÔ¢þ£!Ï,=±X8¢‹¡üÇ ¥;ð2’}4%Ú3õ@ÃÅ~Ÿüc-ŒTTð{ìWaÒ»ÀŠÜb |³U4YáÔ¾ˆet§¸ XÌt\ñ?÷a£í«-DuÕVÿ¿î¿›D R\Ôä1µ9Áýw·Ø²Ò¿=¹Ú—þ»1¿ßº¨ïÌÿ8+Ð ôæ¾K¨öV¶á?bjµyj"5¤kWtn'˜  ŸÛÀSZ,ž‰ft5°aé½´¢ñ…O4ó§ÊKú—<#6ÝH¼» Kné¤kÔ!Ážœ ¾Í@†ÓCèè‚—Dckµ™ÿ1„é)ú° ð)Öì½v Lw`8Ĺña0²ÐCÕ]< óÎF´x<ð«šúF¡ð–Ô‘«ð™ˆò]‰”â?á?,…SUpŸe [šV%Š¿«Óá6š“{xâË_ˆX1wV~š1Hæ•ãNÂØ˜ø¦µÄ¥}¨œŽÌçP ª¥@å†ë±õ8 u&}…Ûð§7è¯ÆðT–cëSÊ£ä1ðqnúÞ¨ÉäjõsSVk]ñƒQ=V:ŠUŽgü‰;ØT+îhvc–»‚ô$‹ñãz«“Ç¥wHãˆüBîàE[m¯‡÷în-7Örmöz~à ”(¬û õn{©õKE nÍ×ÀOÝ£7×ì¿Ì¯Ý¢ö‹Èóò€ÔÜ"·¯;Ž6é¥ìIƱõé*¯ÉFbú—tEÝTLúòûk°¤@êYÃ?—×JLìNGò¡mðx†Éðf)Ðê^”°2yÍŽ 0&þ£°üþô©zc&5œÁ¯Jâ5Ù Þ±;ú(f¿2‡ùç8MÝÀ è¥gC¿[¦çYV9Ø,mßfßJl J`8štÇêk&ç­ J9 ~•\ÆówðŸû°Ïö‡òÁñãmmÿëú„Ê¥¹zþ#™¶V±Ôµ^¶òªýn-õ2ýK~ÿˆÃŒaOQx2¹¾CÜU7¨_”.Ê]­H_°KM jaίã"ù¬µ¼@9ظ<ôO¼Nÿ4¥œîÿÑPø ?52Ü>ì’Ï©ÿ¨#Na V`‹f‚eÇ(z/A(O=v£“x§¥Ñ©™ìÜÿÊþ|Ör=öøü{zÞÅúHl÷Øó;"/èiñ9ÊkN ô&cÛ!’‘¹Ô@ÿ›šûw›êÄÅäV‡£dåg‚ýkáÏ£RA?V7ð¾YøÕQÞãWœÖê(™`O½©³+·``Ÿ/·¿ÃGÍ庛+‘MíýC)¡f"»žµXdÞÁ^|ÖwÉ­üídòTÄ›{È)Îà—Ç/º‘=5×"âºÖ(óµøð0Ó.p§ñoeÁ°â uj¯?Óîi)}ì±1žàlü¼ýP‚RzÆüÇe[úÌ´² Y|* WögÅT¤5Êžµ þ¥±Øç¨'oŒÙ‡ÿØÚ¸‹Yü*|4³„þ%sÙWA¾~?‘ôk®ÓÛú†~‚yá?òšé3rÿQË8DÅ¥VÝŽÎë >ô¶è,\Â=é×J&Îjk-(h¯b R7^˜ú¼KòÕˆ9AÙU{\#@EÓ»ö¼$~æ0_;GÖÆç¿×·ª‘_mÕïS ê RôUÏIŸDw#‰,KŸÛip~ؽ¾FlzŒ¡Î±š´ÍdGðIç9ß_µ!av¸Šùƒµåeð«:dQßá?öâ­™w’ŒNYÍxæçàž_ëô¦\÷"¼åN²£3ÔüU’î¡ú—|·mU••«Õ`Í>z%º«<`.S.³½'{æì ÿì=˜ê-p̘» îcw0–Ñ vê!ìtH?ø5Ê3õžüoç)àÇŽÐñp–¹3üûS˜ô 2?üGFêÀÅ60ÃÜ.¬1ÃRrýKN„Ê?¼ñåÐü5 ÏEåÊ)}ƒQÌ^‡9Ýã¯ÕGs•v?þÜš³^ÊÈn¯dæ­Ž+Ûݺpº8Ná9*a'‰¤D_ Á.ÒëP0ÿ¢Ê4•.±©’h_€G)f„ª÷45ò¹¨ì‚~w0±á|ús|«È­h5¬-û¿ÿiýw9–ybë d s.ÿå‡<ÊMêÏ/«.ZjôWXe‡­"]só¨=è_òù7çŸÙüñUak3ÓÍé‡zEͬ¶¤oòP‘–xÝ‹lä÷ôW™ÄkÔÕ¾ b»Q2­v½¶rþ£¢~[{O§õâT4û—¼fÎbMñ€³è¸;WXæ&jh!ü±ÿOÈ=òÙ _µü":©ÚiS˜_ÛˆS½{éŽzõ6õ½™9íqå8ØŠK°,/E%²å+"(Êg“T™Úí~•œ¨r >"¨SSvy Ôé ˜†íi£ïÀò–Ò“hµ£Xñ‘º“ïè³sk(V£¥7ÇXDdK7 ö{_š€ÎëgÈ&‰‘âWƒý‡]N ÿHÚkƒÙoƒŽ÷>Gzq•KÉâá?^²š5Ï|#ÿ»ªûˆZÂr ×* ´A ˆ?¸ëMð`tü†›iÀnã¢k´3¿+ÕkÃ@Ù׳çˉ¾2?ªF„üÇ~ú_y‘H˜Ž¡x±xjÔ¦ÔÀjgÙŒ²¸¼µ…ßdF‹tÛ{&èèÛP-Ö/jŽ%ôoiù*"ìãìAð,ƒÆ˜Äó…@¶ë˜û©Õ©Rék:Ó¿d—ÙÆ>þ¯ôÔ³™HŽÄ¬a¢äMtúŸÌ¯]Çü—Ž;ýÄÖD)æ\8þ)Ê9™‹áªîTP?8G)À*ÛmÔ8tÀê¢~ÂDSÝôïŸc(ÇÁ£‰”sé[Äsú2¦P¢¿j,’ƒ_P¿£ŽrK¡¾ x 3qKº Û5X|¥ÃÐA51˜¸öNsÄÙhæçÐï–ˆ=g5q”õƒ¯ÕDô}°òþàD×Å4lØtâ2æ8‡Ç†eÖˆïñÓ^ñvöE·\7Òþ»É” ðñå2ä¬hЗ¥1üÇw} z¢\úp¸îD¼Y4»ÃÓ­á_FÁ Ÿ¡þ¡›È£çw¼¹!Ïä´Íýî ¸üÉDãY˜cµ Ög!ök3:åå0½‰ðWÀocQrƒ_{ñ³§áCNèí连á_¦v}±Û9ñ7ÞXÊÏàt‡Éf¾Ë6àWnj̦7Ûï3­£²±ÅkVê·Â´‚_=DpWüXù ÂÑ=ñfÖ»¦B„Aÿ’\†Ÿ¼B-D¦lÛìŒ7tvJnìc+ n¶3[æ#¢¸ÏÛrµ6Û@øóæÜ•' ø[ˆ±?éÉŒš :%ÑñÎ1û⋎ÓÇcñ…X8–êäÓðH§XÓ‹óýPëf½Y¢Wy‹HÂ…˜ý©~Q.C÷;ÆèG¥žŠís¢ëøª+ÒáSò˜[ùšåxÍ•¬¶‘¬¦ú«îŽíÅUV)±µrך⓺qf‹Sõ‡.EOß®ftS™ÍóðçóAˆJ™®Ô‘÷ÿkE%’?ypˆÿp¿J@ÿ€(¸»¯Qj¤AÿzŸ#¾F&s1Lˆõƒ~uÁ¸Fߪ©ðçn0’õX35|]%æ;¸8ø=ÌÌûïB^ë,§£›g¼€ÓŸEõÇ7øü>L¯½–w$×ìoiÏn$²;eðƒ±eª†r‡;Ná)eš6ÅK0ΜüëU£<ùGkð«ãäZåì­ÌñöÝÖDtû³Ó¿ç'ÿJÉ›t],ã¿Ä=ñÅjÇüç>xÙR+w?.ÀÖ(xr¹ã/~ãCjåýÛo’Xõ–þê ­:ÛÒÔ>…£÷ýµl¶o¶Sè)]ÀóÑmDh›ÕKÊHæäé´nÚ¦âþ^Ÿ•Tâ­…@S ±û¾Pœ‡ÿ¸Bþ‘_¿©}×ú¡ß}Mýîeå©RZ\Ǹƒ'lÁÈ&óÒªüÇìX#jºëwã‰èøÌ–Úxº7wæMI²…xÖ꿃hþ¬C,ò¼ðyà¼Ï‰¯aÞÙˆnhle ‘¼?ú] ‚±ì-=ÙKa–ƒ¨ O³ÛØü,ê\lxb­p+^Q€é ¢·´?»z%æ‚¢Œ¿ò!rlHÔ¼†=ŽíN~uˆ ¥¹èiÿĤJÕäë©'†'œ .÷œQ#ñ@SåažŠ+z y>ÄÇñëáHV£ùª …ï.e]ùne®6hÀÄK¶E:M<]Lá-ùL#ì›»õOWbëU°>Ì£*†Ú1-þ£”ãÍ ¹ƒ7é_²U ÇwäºrP?¸Üsy¦|ÂÂ4g½Ex°'XÈÒø2ÁókŸRÑê[3øUGò²|Õr•2Ê­{ʦ0+vPuÈ­°nÕÈ{jÉ'ºåç¹Ð_mF‡ø•9Ëx%g ¿º P€;ñÌl©\Çw>Ôz†Yo¶¨Œ7=…g,ô§ôÙ]¯påzSPÝ]ÁŒÏ<ÃGÆS9—Úo¼š:o0§#R7òÊí¢§ãÆP&)§¨ù¨ Õ=Å$ì®3:©~¬Q =Øx8ê½tȽŒŸ›A-S³¿¹‚Lk6x˜nt'Æ÷§ÿnHýà:åøU9y[÷&ÿxºœ<¯ù‡ ó? Ó¿ý+èßá E%.èĹ˜ƒþê#ö<ŸžU©©^¿M/ÙªôÍœ¢g(‹Ò£èªŠÿøÁŠÉˆÁ.)aVì¡ÆõÛ2­ vò­œØûõðåaF‚š7%ýw_ɱ†+yRê æ2]÷!Ñð«—šk˜õ¦‹:p$—‰ð«ã¿ëŸ¥q|f5þGÚR™Œ(ÿúâ©ìö"J©µÔ”ìA p\¦4ªÊ}bã‚c1«ý‘S5ù‚˜çvµ¨¬GÆt¦‹×`CàŽâ?n2©c!ZÖ0é'ñí3©gWá?,$ux¨nËÀ¯¬hê1ß{iC›rNªXåÔh¦ÂæwC­<Î;–=!Sé:ùZìQ×ñîùá?òÀT4â‰Rµûài ´—¢þ£*óéçx5pes|ÿòœÌ®MØ®.©l Þ’3ÙÙá?öÓÉm4Œå@òºÄV%Íôîhu¿§7ðmjC'Û—Ú¿À„¸‚jÝ£wd~Ô½ÝM+“‚ÿ¸ÎâÈL¡<¦ãVþÿpÖ–%Tý¹ª´ VNý7?6 v†«ºV›þ‰žÁüÇ9[k¦GµTûPÿaD•Fü³R+7µc þÍÀ7Ñ3ñºzE™®\ÒJ‹RÚížšDÍæüF¼JÈß!dzÐÂnØ:'øË¢·òVÍ~•Zdcè¿{U½òåÿáÓmå“Òÿˆ<¡6î6§ÂÒn ñ'ñ)UÑÉŒ ˜þ‰®ÚXm ùÇ#¢ÁM XO‰æGc埡°Y€¹D¤€îÔõ˜Íq†#Û`Ee\Ì!NcÐñä@mªI{Ñ]åýNÉÙmEÝÄ2¸õŒQίÕ47˜™þ igy¿ŠAx³ÉèRvò¶º¢RÚZtž¬+>öy¼R{1*Rþ#½RAMI„?™Ÿœ/dÒ¿¤ ¾)HŸKÄX-9J† Âã‹|ÀÃvé—xf•#œ?¸N™¡µänYÓ>,þüѾ¥÷þFþÑ‘øøž¦¢þ±Pùõø¾µä2áorâ;+:ÞÜ»xÅVþcÙÌT¬}ìù6žî|ðíedT€©_G¿{X<ùÑ><–W‡þ‰É~é¿»Tí#ú°›œdVÿöWħ‰É/ŒrÁùÇQò„‡²1øÕnØ€Dø¹|r\£¯üA·ðúáNwR56‘TGbw0š@¹ûz^æºA¥Es³.U ÷ÍÌÆKÖOclÆZÖ‚W8ŽNn-ú«Zúk0¡«µÙz’ 6ƒ Ò[à«ãýÓ’-ŒÇ{U6ÖÓ0=ýKÞ›cŒ×r¤ÑÞ8g¯†—¶ÅRôdþGØö%ù™ˆª*’E½Ó¯HbïQxðiô6ß+>ÅòóО 3šŠ?Þ†fù6ïµèÒ¿Ý®lP6ÀÕ#ÿ¨ ~;“³\‰^´nàW-áøÀö`þùcx%ðßP>yƒ¬ÀIc§r/ªCº™¯Pî¨ßáSž’3>”‰`Ì–ãÅzÑ¿¤•™ÌQTÚaRS"{2ª:íTz[ý-·  iŽÿ(CþQVlíïžüG6¬H ÞÔ:¨­/ê Œ¤öÜdÌÄô>YÃìøuàWƒéqæcÔ«g¤£½ Ï,¡lK¦ý;œì8…é5S¤'¿ïCŒG?E7”=L:wG3pÄÜ Ÿ²Ö¾Ñþ|²9º+›ýš‘À,C“Nö¦¢iºšû  Ù„{èü}Þe˪~ð¶­™’9Ì9‹þ62‚_ U/©õ´lšŸR™UöÚꪉÕâj/õÙoë¯>Únj{à?þB{øÎü,þ£3AšÑ¿¤›vžŠöb¿µÏ†B‘“¨¶iϪI•´ª·U6«ÉA…Þ3ÿ¼?ñÅ5z ±[ô¿*/Ty“h¦&¨ÈnÝÒï¾ué$Ðx¸ Ê>W},ýK’FËü‰ÿ˜)Z_­o·&PÝeÄ ñáÇâÊû`úE)Öü ÿ‘UN†°O$¢WÂ_XÖLXÍ Qµ7èEÈà}ÀÍ£•Ý«»a2iy¢¸‹±´%àKý°~W©€»+¦sdžQ‹µüj Ë|òÓDÿ±©Ú»€vý”‘šœèwë‚MMC¡–>⓸):u1‡Sú²ÏἯ™ä <À"»íìÕRû2ÿCD°ËÊl­?ì}r9—Ìã(»¨I†Q|ì=–ßW[‰ÿpÃÇ5äý÷ÇÍ$î{- bK[;ÞÜn·•Õv‰þ¬6\¥xÒ&ÎÞ`|î|Ðxìç7²‡0è>T”B³|48ÿ°ú7®¤ÿnøùƒÀ¯&ƒódFõ$_‘CØCeì[Gòm–UaÎìQªëÊû謕YØæôo ƒ…Õ4ô¯OÊw²ñÖðç+Yï3V51ÈOvÃn¡þ£ üÂ^t§‰ÉªàS¶ÊŠü¯Â'm‘VWûŠw˜{¨ ùÇ.bƒjp$uñù`+fR“¸žN)@PL{¼Ó`xšýØú*܉ÁþÛ³ø"ÿ1AT$ÿ°:ù×EðEÜ/ÖÛB¿á„DÓÕ¨Ïb?A?“±Öì®b.Y'Ö ª-ÿ1Øq¹A¶!Ê6êBËPuYOÞ7È ÿÇœÌtؾôX™Àü(/,üüÇh8f<Ëfº­ÂW'3ÆW²ÕÍ܇ús MÝ#TxÏäs¢õ3tulGdÿ'ùG"xîö)diì@Œ¾ ^KuÉ1Ì#îÍ"‹PQÝAlæù3»Ü•üù“V0Zý¯Ú1?jŠpEu´’xw)øýY0Tò-½KþBõ” ì%ù=9„éˆÂî)äO‰Ñ_UDõU¤”ݨœKOòYTÀ{ø»^'jN‚ÿ¨Iä<T%QJ©åð73ÉÈ1ÔŸ¯U=Gþq‰êˆòT©ŒÆº•ãߦ¢?(?‹¿Ñï¾U¾‰bT»æf?ß茸-èY’~„Gå=Ø”êtó¸e¦1>ÈöF*úÖ[ó£Þƒœ}ÄÏ—€E|n~T{æ6äߣ&å ¹O ž—j¿åFv´ 6 lñí“àS¦Í©1qE î~õ›¿Œö#=¶C_òDQ/tŠçP ¬ëµ~Gn‚ñžÇîF›ïEq›ú¼søŸ‘p xÕùÄG8G¨ù«,7‡ê_’T™¯ì‡¬! Ô¸ÀÛs\ôMIa•÷ã?ŠÑaÄ™þW3˜'uŠúA?s;ÝÃV‘Íd0Àx#Bôrlo7õƒqð§_ˆõb#ÎRîj¾Dǵ5ñ òÉôÌM~µ‡ù~nèw+›Éý[p*á? ÏPú+oj Ê“/[õ5É?Üà?²Ú3ƒ€u`þàvc&ÝK¦â?æÑ©Ê'íO/öôøf¨bâSžœ«ZA…ØÏ nW¦S?øÙekÔ›1õ‡x£çfSê¿§P÷7=ìîø×f=ªBΘj‰æè¯’È ð+`õÎã¥Ë~.øþ~’úó§ŽŸ÷œùQ¿ÇK;¾Õ–†¹à]ÔSª³–VóT,ýú![=øJj?²…7¶èUWü\ïþ×^o}\|Q/ªJOt×.¢ ÖR»«¾ùÍ>+•Evï2úÝ5Ø™Ùâ½h§œPãaCiª-.‰Ëjd}ÿ~îé_¿Ó‰H-ÿ8C¬U ã£ç•`£›‹µàNgÁ¨KSObþGšhñíáÏ¡¿zzå†õ4¨;Ö!€31”¸â!èõúnÔ&{zæ »¯ý)—2‘‡ø!RÕþM?„Üd uñL±=·É™’ã?êyºƒleТRÛ=TݱøˆÅ/pÿ`v±Ñý°ª~Df­Ñ -ÀÚ_'öOFf~Nc¨è¬\hcü]&æTÃân€ÏI½RɌړռb~í~²ƒ dLñäQ<@*XÓ nÞdç™ö#‚ס¿êo®q•ÕØÁ©Zü§ÉçÜ¿Uš·fîp@tY‚¥8g.I–˜‡è¡ãÍ Yö­2üÇl°/«WI.bX/®Úê¼e÷2¿_#9…~7/|¾m3{ÿ@ÿ«Øjø Çyø‰d‚™ÉÔà´ñiCØc-øˆÞäë`¼ÏNä­©"ܘ é¶Þ4†ÀŸ/Â=é/Š$»ªK Ïðžô_`hôO4éžõ’YBe±R×ÌÆì"òrø„0í·à?ŠsWî†ã?þRUVÛÆi«åeV¡žÞ˜_Ñþd³ÀSÙïÒqÑZåç]¶ù ‡q¦žØI?†ÿ¸GÆÑD9DÿöÂàW×T©fý­}ÀšŽç{aQÇŠÌÌÿد&Àâ¼ÔÞÐ=ù‚ø ¾þùÃÿãïW¨sÉ-Þç\ Î?öÃñ‡¨MþÑ  Ú¢‘ú4‘JŠVGÌ?µ™Úbta/ðËÑ_™äٮĭÁ®º®?âœ~wiÍŽ3Ù?Û†ãiÖˆ/"žì"çá+s‚ÿÕÆZW 1'ÂBWÇ2{’ÙÕ DqÕùÄä]°È'±ôÅ,¾\þ|©ì.‹Ó·*±ëu"«ØDŸé_Ò.Rÿ‘^š@åÆð–Äf5;u‘Qs½×7ÈͰ6ƒ@¼3a™ð–Ýd«¹¬Ýk!'4äºg+c´®Ä’èJ¹çǸ¾xˆüd€ùñ»Ç´EÔ® «Mv€Èsÿú0Ø/‰Àl¿òÂâ› ÞÃQÓ&ˆGƒîl•=å8Ù|®|ôm0ö?`@¬IßgÉ®ê1åL-‹Rƒû¯zà?†ƒõ¥‚/yI^§ïÉÎ4øó²Æ2†SðÜþè¯ZÛP³f¢Ì=ÔHïA‚ÄÚ_ø›àWùàÖ ð5é¬{ëvYfb-ò$XNcÐ÷ÇøÔë%7Þ"Ka6:6º yËMª^CîÍæ¢r*ö W.‚ßjˆ¿NgLg:**òÅäø‘ìp¼Ñ¥5ë­…ÝJ²žŒÀ&Âê¯ÆŠRÔY]Á*€K=ÓßR¾—úÁmèwÓÐݶý¯\ìûÁæQq-×jžWpeJ£’<+Z9¶G7å ‘S9Î~Ö²º‰¤N|¦™Î€OšZÀå;»?BZŸ¯#ךÌzª1ÿáÃüµŽõ¼•mêwbž{œ~»‡œk«p—©[[˜îFþ±š\&«]Òå݇§P¾Žw° Õ6%¥Ÿ^ù½ïž¿²U+È[ÞŠœ¼*“wwê¨øË OáBýùWÓ( X{Xü{°òä&Ñű½÷¶ñÊýÙßQO= •Sy#j«ÌàWVG|ðuÌ'Øè©F ½ÖW›ëÉì¦ã«“ã8‰ÞÌ?áÏ—);˜U@¾ä(Fjt//¸ª^tMìL…_´R ìÓ™öüê¹ñƒ.ˆ³áh¶é4ÄÏ•!­"V†âÏ÷ÁŸ—­MtSL^ûõéø‡"ÌûèEþh ¥úc³IFÐw“ÑŠì¨9üyu£J›²#ùÇ`<\È)<¬ צSÙÚ™¸±ºå.5ZÐÇ}#H~FòLöÉø£žFg¬~²MRÏ: Wƒì™"lýùQ¬ðO¡$8ß,ôfã(¹ÂNúµ$±{ÁŸ§!Ÿ¹h¼‡¹®Jµ¸7ëtÂ_Z9…QVž}gÅPþT<É9:Èûx·‡œ½Œäi‰a¸sÂÏC[üª‚ùŒú9Ì©j_³dm:ªÀ¬F78êúÒPØñ*…mø»<³Ø†Ãx•À(ú©´¿²æ=e¡³Ô ºÞ~¢š$6eœÊ^îp¼u¼Qð«¡ŽwÏâÏ­YÉU¹•™ÿ±ýU2ziMA—„ f2•ñ;¨i\/ñ V‡Õ6jÚ‹ÍÁ¯RQ‹kèí9?‹§p?ýÇ_"ËÏÍ¿î5 Ú?¬âÇKö7Gà?bØ {m³ªqŸ”¯¯—Ì;ïñCq•n¹ÿ'ü¹-¹ÁÏ_ol)¿‡ ýüN›-†òZqVŸ«µ*ðçVýÓN[ 5½ê¬Ž$[¡ªLB¾'òOÀ¯Þ‹ úl¢®aj§ð‹é_2S”×Fпä‡QO¤È×ûSÄ«÷§"Ñ‹(u¥°¡¿:ÿQ‰Np)Å8ø‚'jtÔ¶TE*ñÔV"6¨ÿ XÏ"²-Š¢¿ÄEpág¼[e‰$zÓ?±„8ù†ÿR”üc£¨Ë0^_ ;óžžD­À)žêɰ9Y±¬.°óï{1ýwó*+‰t— “ïnA䔜ï¼.z€þïYxˆKFE‰¥w]Ef’K«ÎN9¶õïqµq`¼Cá¼à7žÀ8“UÀ*z€åÄØx[Ÿ‚ŠIj6æ1w±¯²?ü"ÿþsN%£Úÿ1 ÿ‘ ùU¼äyLÆc.g‰æ¦a²²Š@ÁžØ~#Oßò5"ä?(>Zoªe4ÖËï RˆLä£n—3ôÓÚ~ê?Ö¡¥ª-—à=}¹Þ¼ð7‰¹ö6Ž77d£gl-5?Ñ›|o!V<}€£Ï܈5ÜDv0…«ý„-;Æ|¦‹°¹Ùß:|×Zþ»ª÷Ò¾)C– þtHm(ÆMæ¥?Ç]ÙT~À]$ƒyÃ$ÖÚ¨|jP©VÿáÊÂ}Ô¤Äߦ¶ã;¾$ž>þþã£b°ÿvzž`â|Q ò¬p(7©ÔKkf§êùù}p}z¤¯bµÆð.{À¦¦ã?òé•=ažôhÎ~g΄Õ×ÿöIÞ¾Òh/k»ÁÂþ@íóÙg¼c~Ggú·Ç#mÁsÝB…åI„òIû3Ìz áÛÊÉkdãVþñþÃþ‰]Pnµ4¾’9¡lMk?†ÿIþq,lµHâOG”|F%é)Z:î`,er7 Y[#²†ì±"üÇ<0°¦t ^·p”øû&~c¡q™yêMÌCÁÍ>f‰´§ÍuÎa~åI¥pLØø'ä v#™Í#˜£Éø[«_ûcêÙuûºiýAýàK¦/nfJUsÓš€è šI}>ýwgˆ6ÿ±UÙ¢å$‡® þ—V>÷É?ŠØÛQŸRŠü£‚yJ—ÝäJ3é†r¥Ý,ÓN ~E£1Q¡JýàñïMHÿ«ƒÊRmä\2û|¼•¸c'È´kõ§d—9ľÓþþWSÈd™‡Œäfc´ù=q¬úÁâ;Õ¤qÄ*Çüç>l·%ƶÿüy¶îÿuýGå4õaÌ?/Fý ÕÁþ¼ZB ¾ãý:øó‡DëwE¹AýG="ú\X­êU:–L¤b7ú—tж¨™~‰øþó²E¹Ç½@ÂjÃ;3¿ö ²o¦¸èµ·ð¯Å5zŽ×•@¥²øLôy”´‹\FV§J¯®¸DÞq•øVí+âÒ7ä G¾;m4õç±¢k8A»tK±Û–3þ 1‚ßo鼤n!‘¾WÜt<©ÈÖK© !ß#b€oÔ%ãŠRt ¸^:­‡§ÃB'²_2!a”øÕKu6µ+ïðaS÷aëšS\Kº þ£ ¶9)QçEò¤÷T”´¥þ£N¤õéðÙ°ô‹¨LÀ*(MD´›xMñ±D\ïs<ˆ5[c^k:ý¯šh!vB®{²LëÆ,±ôUñå¾<×âXì˜à訵½ä{å,ßF®z÷6™~,¾"¢ú?ú·û‹xñ…Ø?kNœ¬Ê\âËuð!ÃP ý@uyÿq’ìÄ ·‡Ÿ8…èaŸ>PÓéýï¦NDkP ^s/6²µ#‘K%ø^Fíæð­©Ëkß|Ð $ƒÿ8Håb ££ŒC-jpOúb)!š‘ç-ÁG¼CJÊNòia$ÎÓË¢€9”ž#‰'Ì7LdŒa+A®³ö~§3¿þ]ÙfÅê{ÑL÷ÄóW$¨K¾—Ìȼ§:²´ñ7HLxÓÞ×øA§Á.T8VÆg.ÆîîGå´ýÅW­K˜õú‘”ä$Ü…ãù‹lë¬ôB%0ÖXÈf²ŸD½ƒ.…ц-`bì&ª4ÇßxÁd€óv¿êèx´éßîAÔâ‚Â_Ð –¡6s'ÝW‚ãïClï‡]>Fþ±Ù &~…ûAêf±»Fz—]§º{¹c½uDŠïÉÜ€ÞÆ0b€p^Fϵ†z™št!»ˆ^9}«¥´§Å|3Ï™éÐ7X“-;¡()wéYÅ~ÑÍá?ÖPÇœ‘(´¬[IyG¸é«Ñ˜5‚ï(ŽÊì“92P󑙎Ȓ>]Ùð›weL{y£'™üâË$¨NëýQÌ&LaÁ»PÿqË(€ú­>*ïÍh ž€Š93ð3 …÷hJVª§QG=e8Ui8kµüÇ=qE½z‘~>Nýyñ ,õ¶h‘|.YŒúÁúðh£áæÊЛ¼,ç÷¼ÊžHW ù‡ÚtüSÊAVuÛÉ8jƒŠ\Ån]¿@ñŽºéŒú2q-Êk¶+ƒ¸&_ð«¯`³KȆcRõð'–x)¾Ïžú«ºüœY¨h…æÅНÕY03­8ÙûáÎc«p΋£J…µÏ$·ÿ? êT‰`Àñ×M”ÈtÙ'Õ‰¯œ‚=KˆwÄk·óÕÑôÃσ¥ýƒë}ÁÕǶEù?›Z–æÚûÛåø4^Ù¬uÆz'¡Ê%¾ü0wÝb‰,õÖ@ÝýUjâðqÄ ð.<÷ðõ1ÈQª8Þ\Çb6?[7øóQüìq`^NôßÝ[=G¯‚½ì'€a½Ö[aOñ_2P¶ãxààBÁ[1¿6¼þjý§à×R`Á=±¾Ÿ°;ôæòõuÀ¯š19µjÖŽFq²¤þ\wø…¾hi]dB}*è½YŸ^+6N[g4Ø+°¹OÉ?2Àç»./á?ò¢ÒQí)ŒÇXÚtÆr¤Ê Cë‰òÇËòh>„›ÕMM„Úcù‡5Å©)ŸÊEê5ŠÉªÆ2Øß”è¯â30>Ó?êÔ@+1—Ÿ¸t˜ëz®õ ³Ã!¢0ð9õ$ ð ðqë©(‚§¢0ËmßDÿÝ7Löó†Û_ ¾ŸÞÿ É6—ãG¼É?œåáê¸ào¶Åøœ† ½ºéÎz_f„즓m"ú·»ÑG±,ýw‹Ð±Êþûý»›³ÉŒÆà?T*X2’»÷ ÕÖ]¹¡Æ¢X˜ó[iõoOm 0,½skÖùÀüa_„~-õƒ÷Œ‡t?ÌGuûi"“ì²,'¡”ðÅx)ç´Âô:¨K>Sú½Ì?Ï¶ÔÆ#!š«ñtQ¼`:S—ø‘ÝV¡—I¦Re2rMqd#¢§JøÿîŽSxŠJØ…¨³ÁŸ†I}`4BÕìë,¿?W7Àîž8Ù>Ôœ £~Œþ»uàÒ£\'vÓ¿ä;§!¾psÜÁîƒ5ÿc͸ô/Y@å_MüÆðÞmM7fd”¦° ¸âhøø÷ÜË?àùº†Ò>nQî«?¸swx³lFoÆ ªprš骲–)W;¸ss©úHoO€¶é&vß•»»É?šÉ‰äŽô?„¨þW[•—Zf²Ù²Ôü:Ëþm8óks3o°#YÖsð¿^L£Ï7yF§~ü)±ÒÌmtÄÊKÙ’Ó_Eú¢°ùyúŽ2ÿ|¦(¢;’êóÔú=¼ÑNòÝ\[eö6Æc?hÿa¶°w¢îü´¹•Ý]“mÍ„DN…;U ïxG“ˆ­?ü÷´½±½sü¼·6×àÎ‡Ž¿øYéå¬cþ`Í]ÉËé:k«F×Ü2êXúï¾üÍúlÊ=í>ÑisP–“èw«àW×µÂ)x~­¡Æ s~£ÚhðÙºþcVf‡¸bÍ9M)~uýìú'FV·v튢¶à Þ%¦­B‹hÜ…8À:GÃ@áÑ¥6¦T2XÑQD4ѦÒ}³¦¡{*¼Å ²îDä ¸\S|„ÇŸ1•O6üǬÚ}lUswÅDÌžõe¥Ö È{Wÿq—¼² ÈaR™™¼m«vBKežHýÇ"4n aå¹±øšÊŽ77äÉÞµuÔV1Ä$×èÈ.t2«vdTMQ˜vE3;N¿!Üù-lTnxŸ=dpGù÷[ÜÑ6ôß ?ÿ|™:@Läô¦ÅâZùÇ«à'PNâ/êÏ=Ñ'®`Úxyc [JjÞ÷Ë¡TX´$ÿè*:„»âOÔæ¥>5þÃm›ÏÉ? SÛw™Zº"(~®›yé7R]×J*:ê¡lÚÌš=dÞ!] Ûÿj–š”øy%Þ·*ŠÜ†øxŠqFUð«1èw ø›Twÿ£`hΣB¨@&v…ükÊåZ×0;/JãaŽò4jã±ô r-Ö‡ÓAf$ЦXÓÄàk[ ÍØ`4ws?'pÕ›ƒ3¤ àWsD[ÇÃxËü¨ÄÈl‘÷&Ã/`|‡KÖÍÌ?ïƒe½MÞH#ˆé‹ÝÍäyãñ„_±ùIåMâ·]ŽõÜ•‡ªüîxÓ™’g|’úÁZ̪†-þȼ޷æ"ê÷S2ÿ\°Ë•fÖ´Þ”6òê "â5(ï”"â±ÌÞ£µä°ùeI²Îvâ@0NÏU~ ¼GÜhe”5µ¹ÚQ¤j ‚ïÍm˜†¼ð‰Í“‚9•f‚Gv¬ãv†\DûK¥Œ§ñ:Œv3ÔQ©Àtn£Zž Wú¯þ»™°}Õ°¨³ÉEÉ\R—Û4ádï„‹ ‚ÿ¨D6R¶r<8E6¹ÜíÿKIÚ^,yôW"Ú—Aɬ¦ŸKMJ¼P,ôPõõ^à n mͨ"¬Ë»‚? X/cóðsPL¼ˆ`ÅeÊ*Íþ‘}eÇŠŸÆÃæ¿O؇<Õ=ÔŸ/Çö×” ùW7Ö* s™ïZÉñæ†,{ÕÖ\Û"F“L%c)‡²þc‘ïrÐ¥‰Ø‘·t&÷¥Çˆ?–¨<ös¿‡kï£}g>sØ_«Õ®b :·„ØH,ë{²©ÃX–¡±‚ú´=`Ø'a«K£¶F%fmxˆ‰ Sm¤Ûhît¿Rlà˜®T»,$ÿäç§F•ÎÈg\–;É?ÊÐóðŠù‰õË13p Õ~Uñ»°¨SñÅôŠW˜‡¨qÀ#ýˆZ’ýÕ'VIBÿÝ©F üÇR&°Æ²?¢ GcØ•žF5öY™kXLÞã Šåg Ô:†Yo´(Ä5\#ʨÇ=äFSà?£€k¼^9SþÆ’-MâzrO'-¬A9áNç­<ÔŸ÷tÜÀ×¶‰Š;ê§ê¼ Éû:¡bËÃ4õþàWÃÉjÚÓ?q+*® ø†)0ÔùáAó\f“ËHÃÒ€û‚_…äþ³”Kê'Nÿ+žÖKÔÑoõórÜ ÿ³ŒïM(Ö€†Å²ß2ž£f.Å#ï™­ÇÕæÁä¡þÃÕÁ,€‡ÍÌ{ІŒ²²¬#Žê—Éœð½éi§ãÈR´W-ÑMÝ4ö¡­^ Ú”ŠúÁ:DƒqÁ¯âÂÕEÇ—úó‰`-A°ªÁ Þ6 ßÅ÷’ýÍ$Ùä»ÑïÚè‘RиC†S–>¼5Ì8r‘ØLTA×9göPß·òÿû/›Inðó×][»ÿºþ<‹ò@i„~7«–NÛì?Ö1ÐTË©ÃᾕH«~þì°¿+pþÄÍuˆ>‰$tܽ¤´Ç§4Eµžü)P‰æü†ýî_ÿTÅíüG¬)È{}ªR“¯jXúáâ#úÝðö¯«XsJù¦4¤ñ Ä„ü4J‘¼èw; ˜cp™9 KE¡Ekþy-:5-aº Æ2xZpη>¿H\ÿÝæ'ð­FúVq'ÊkN®Láš<…Éw¶Æ#ń͠ÌrðgâCo= Ù}YîÂ2å4Zxž6ü5©îx¢öx´Ã ýWƒ5©c­L†h´,íb²?ýŠžÿqŒl¬ºÎÈê? (¹Ô<ÔPM€AŒ‹7Kÿ’FhŸëždåôÙØ±dò8º~úþþÿ£±#¸î¿w­ž!9U.¥á±}y÷J’c‚ìtÐGrW¿ÉI²9:Ö¨J·qo Á×g#jÿð±5ÖV“]) *½È0’€ýuD¿[›îJ¦U…[­Šî´ômñ\ƒW:Žwm¥ÅQÃ+íöSÿ1™g–Ž à$×õžìòÞÈê/R §\@1æ×Ö0J›ÁÇr±O7ôW×P%è`ú×+Eà tÁ’.„¹‹—Í>•_qPRI¿0Þ7&z©:è¯æÉJì‘)·ô FuRø-aVì¥jdÉ›à?ª¡«ªÇÓK`ô‡?¯š4–hR‹?Œ;7O- WØ)/8®úùÊô»ÅÈä÷éqŒ\óéþu…ï_GÿÅ%æ7´Ák©"4Í̯Æ”ñâ̯ÍÀ³˜H,q˜‰1#Cñ[•š“îâzLø”ðBÞÆ\†8Œ/µìf%žH •>­Y»<õ!…f°Ü ™?hC ^#ÿáF%lê‡ð–•ÐÓèAF>ònTãĤÂ%–}”9È~þ£¨½-øÕe:¤EGÐÜÌNOç/b.õÕ§ðdñÿ'ý½lI•'Ž'gÃFg sÎBþ)ªOi•¥8S-ú]KzÚ–Ö»ªÚ™Ù³O`(çWLåvN´%î-€ê'£v޾˜ÛÒ6µÕ o³~°ŠPé6vBôÃZÁ‹@p–Ãj|(S³ð¯£Y?øN‰£6‚üà ÙËjâß\²\𘬑0É`@ºésDnòÝѸä¦TºMÕõè’o'ejOúˆ-ë„u|K àcp·Šúnq;ÊgST™ÏWn…'N‚íœC.”œþœ%ôùXã0ɾÀžÆ$¦ÿUÙ(V|«zÀÌô@[lyÇ¢ùàv x~RCÀ®8Kd9|‚ŠòÅ'U$sù¨l ³âH´#¢Ê Ò[£•ªGuKF²…FEú—Ì¡óÆg¤Í.¬ÐÃh€ÿhMEâ.¢ûsØýƒÜßûšÕá.ä×$ð«’ DÉÒFq¯É3v½¯‘ð­{˜?›ú¼½|ÿH”¸Aáƒ_íÇ„yI'ç…âÏŸÚæâ?ÒrŸ?Q?x à$›Ÿ©ÉPéâ ÿQ‚#éìÑÊÆ,®š0 £Xg4Z·„Æ`ê6Íítln¶òÿQ$ì¸ ã“¡úáÕòÐ_¸™éÉ,¿ML;™KÍxZ{&vܧ~Зó»8©‘!{™ÿ±]ôuä[• Z j{Z‘#—§£¯>õ™¨ºìFeã'”Ýxfælf¾»£.>I/Č̬J1&ùGl”ê;ôQŽS¸_™DìRïчXщü#ýÿ‚;y@—®Ì™fßAö!íÕÁ¯®Àñ«ôoïaf¥–]C#xJãm+–9®øŸûàfSCåÞïÉ?~ ÙiFê²Ëª7ÔôZAm{pwܽ¶üôo¯¬ÎÀ| ïïüúd;®=áF Ñ·#‰ö ¥·âÏÔ„z» t3‰æüFµvCTü+^á-\ >gøóXx€¤ÔÌ ôêí¨ þ÷‡Š þC‚+=!“Y…v5»,lÅä}˜§Ð ; ‡¼f_4VlÜ?±qì|ìÕNÂUðTø§·ø¢ ñ…˜[Q•JGOq9ÊkÎ¥lIðŸDbÙS®Âd@ßW–aœŠ5õèð²‰õ¨–Rj¥¢X1¹¶6»±Ñ¢ß'D蕸ʼ¼­+y»þ `/ç–Rl • =BÍC{ùù”œjmò•)äèq‰Ç_‰û¢5Q~€¾?”ýnM´S'`Tb“#;ÀݽLÇåˆfMþMWoôn±áã«Â~œ'«*Îîâ <@—EUMûþBNG}ÚC7Cg~Tl.üÇC9ÓÈnú},%Ï;Æÿ1y¤€-ú9î Pú+»ÉS­©ìä-*LóR?˜ &;ÚCGÂâtIÏÇþº1mcê³æ$r²éÜëìÔf ™Š{tSN©¦¬ +sD7 >/]ZJƒÏ5ÁSHz­'´¯§þÜò·Á‡–‘7XõçIÉ;7 9¬—{Dk‡ÿ8J¾ÂÁjêýz:oÖáJ£Ûj ²¦›ÏÉCÆš-àCLêäûfÕ5 Ù3ÎDƒqe+ê€û’³røOæŸ÷ùƒõW™ÐÉ.ö;pOîÆY´ÊßXmªý¸=¯ý:egãÊï$f!ô»YÈ?6ãhz}G¬pÜÁîÃ.ܤã¬^²uþ¯ýG&k®þ£¢æ¤íU²æ~[)Õ‰úÁ¹øÛtSü_B¹¯]m¸§V×»"Z€šJˆîzùÇÅüª«°éC$ÒNÅ_]…Žd!ý¯Ž(W´à­-‰òÉÖ‚<rarŽ®ä_‘ôãZ§ßÂŒE|ú·÷¢?V%ô»)‰ë;õ&²ëå8…þô/Iþ1• 3yôø¦+ê·¿èÒDö¢RY2‹þí)ìï©o¯MvsßÙü*«AÜ:—øð!lüÿ ÿ±Õ––Ù?]ýw#zWþûú=ŽòX©¬ÞUsj5µ'Š…«Ï‚?Ï©ÖTW‚|±íøOßüË¿í·yjWEKâæŠØÀ"ÚMµ€:þc†h¨-Õž‚‹etìú—oŽà/ª’1¸QIÒ„7~>KäÑÓ)ëÔôä ùD1ÿ‘S Ñ1G°€ã¯á'Ë¡˜{N¬Õühx'áƒe}Lþ‘}9úÝââ ã»"ÿPU›þ«.<ôßx£µè“îƒ,d ŠŽ!{yid¼×Ð_UÁzGÝÿŠÜŸìb;õ‘’÷x'èU<ýu˜SØi¬ô)½ëWÁlÂäÔÂǹá÷ùMe®ì“…¾»§É?ŠÂX”%ö]Ê(­yíþpÈEƒû—ÌA70T¹~‘ÿ9’P-Gþ3UXl´ZŠјûõP÷ 'ʬw#Ž:"ˆõïâÎàMÏ’ÔP¿;QY¬µ/LEþ‘6âøN^,ì[8ð‰tÅœªIc)ö§ùÇ!p°å°$·E|Ì:Ç›²ÑCôo·ð«Çúzpþ¼èˆ­*ë™°®ã?¦¢4•Ò…J‰ë ûÙàT¨Æ ?c·‡´˜jø³sPí!F¡¯H*õDþ §åŠÇ)E]K¿»þüþÃn#­É’†Ét 57à^tcœÌ‚R"|ÿÝÓJb°9W¼Æjºˆ|’çÈ»®ÑkÄÉð‘×`òQówùQTj§2<@ÃꢨÚGDîâ§õƒk¼/íÑ_µ'‡z¥—Ê[V:=Þc™ÑA‚˜Cõ=øŠAÆú´!ë%ËSwò|fϪþ@ëf=k~­Uwƨ/»{(¿Ì¤þ¼#³÷ŽQã—À,o÷€í‡ïÜÍ®V£ ó½)³ÖüóþܦtUÎòtä®5ã=èJ®Uüj2ýÛ{¹¢ØÎ*oAvÆ_5c¿Ëð#ÁÜŒ¶èˆ2óÚßñpÝæVÀGî×ãÔWè»è29ÿ3ȼ¾ÍÌm_Ž+µ=&üÇp§Ì??@ÜÔ]Z€‹£ßëÈ?Ö‚ƒTlÆu’^ÄCŒRö2ø‰‘èàžQ縇œ£!:à°\ÝéU—ŠÀÒðç™ÿ4‚å›ã8…ðƒà?ƒÃ&ÁÚ}2Êkt"ÿxÌ”g¨Œ'ÚÙSÚ¿â‘jÒ¿äU……ð,%ˆÄ¾‰õ¨ežãËŠÙŽ+þç>œ£ïz"ÇIøaëò›¼BÈNuÙåè¿[F«®bÖ“å?œA¯*ªªBo[ï/ƧÛ6_í2uÓݰuÉõ*šªÕ¦‰¯6W4¥2̇l$¥c×ÑXΖ_$¡ïëqüG Xþ:úèeS®ªiy‡2Šìb®H‚–5"•ϯkßP¾( Åb™Ä—nXœÒø»î,N“7óÁІ“qíu„á\‹JÅŠ: cùOqggп$²ü#7ó?š*¯ÄÞg…y Õ'üU_FMs)½¬7} ›lÃ%ûXÎzˆ'QL3—þícy9ä2"ó³ìÏícyüY<9@Ï&<é_²–²–©ïÖבçDÇ–»‚<‡\ï>ò¼ãGú'ŽÅ¤”y £`:çà?Æc;V:•º~U„]®ao‹¨÷¹¥{hª’ÃÿkÍcê1–ÝOÑ™©*¢QäT¥ÀžzÃx¬¤ªì º¦Kð¸Õá&’ïÔˆ²ª»Ì ÏÂ=é7Jrð¹êø#wøͰ¦S\B•”Ûþ'üïG3üy#7þÃ{ÿ õ•:‡¦äg?”iaVìŽþÊ•Óð\¯o ¿‡la£áJ§Â™ðçfðüÁ±øþø·ø„â¬fM¤ZÅó®Ïü¨°þãõçÁ¯î[´aµr)HÓTøŽžðÛÀ¯šeÑïÞ)jú¡J›Å•§úüú«üry¨úó$ÊPåú²Nð(­9 V×–BhV'¡nê‹þ· Þh ~啕_DǪæü¾lþ(­Ñßÿ†ü#„?ߢœUc²»—øoò»ø¢o¡þcÌtð/+1üÇz"}ƒìá Ù×>ô {9÷#9åõñ—uÄ9ÑÁá?<•cZIìRsüoz¹[<Öÿ6ÛKâ3ºQ5x–Œã$ è¶x·øàcP6²Ã4äÝ‹!;Ò3·[Šê~5B…_ü‹84ÛlF·’fܽ—°Ìžæxú·§eaªB®ã“²›AfJ”(/Åôù_ˆ 3ÿOú·³%WtÇÉ ¢ÿUTéBÞ¹°Ÿb(·”†êµýKnן¯²5P›ª-ÔETûÙB©„Ã~_$"G¼.\ðÈÎàMµØZvõý¯f‰?µõÚCêo~mEñüð*qþStXÞX®,Jþ£³)ó‹¿±·víy$[ û×Wà?°Ú}ôW°p9 õéPUü£?Ö‘õIú‘^%:þÃê¿ë.Z£o£_ ÛA™ºè¹‰cƒoAS†¾MÙ‰v¶‰ûŽ'vO!ʧ,À{‰o Ô}>‰ڔöú ²„ ¼‹gˆë.À¥\!&Ï­kZ­(VLªy‚[ýÛpÿ^‹E¨œF³^%2ë¾Þæ64GÎÂQ÷Ý"TœI)©¿Z Wž ¤£ h£÷À£ÏG1SKŸˆ¥NIdö‰{p=8gð„G?&êh_B.Ðñi²‘üã>:Ï5z!®î$÷©žäÞ§ŸžPì%ÿð N­°\¿úá?òød·wD~ŽÅèÝP;HÅÆs¸üñ T1å6ìë|îXpúi°=Ïñ%§å=¬,øMXþ;øû›\û M¨áõ»îê ð«* ^Øñƨé†àŬšŒF#øâôò(~UϨþj"˜KbûԿ͹AØÂ¢CVýy žk#"Ø5ð)¯ÉàG 2«ö¶|`Ñ™EýGZãý¯2ë@íêƒ_ùç»S±VEO¦. 󤫉x¦;Á+!µ—ÐïÎÄô‘Õ蟸DçùÎoÜÇÒ6 þ¼…d0ó£ÑÉÅ“9/µ°n€(…ù>÷£žL®öT.#ÿ˜^wøÕn*ÆÓ݃þ‰3ð‡9=KñZGÈÎ|e*£¼\ªþÃêÂç~°:þ¨ ™èXün8ã!试÷gšˆ?ø#ñþã*¹Âs>ÈàÖ‹e´Çœ¡ÿ\ˆÿðP¨_Éä/‘¼’ŠnòSG_½FcëÆº›ñ$+Ì ¦Áü/ÆgаÕÿ¸³ÏâÚ¾þÈ™33¸ww—B€`ÁÝÝ¥8ŵP¬8ÅÝ=¸»… îœàNpû~“ûï!Ü„>ß½·}Z^ 993sfËZkïM…ÞÎt÷ ú ؈m!ê—¡ãq´â•Xï¹Y6&™©í2`VÝafn˜mQ†-'ÿèMýÇ~*EWbõ³¡¿ª@®¬âͣÃùÐáèïÓ·Qu"È\ mA›³ªUúóÖ¨¼_ÐË©?_hÆhv?úy¤AÕ„úó(ÒWÀêÞçNù?Á¯®(™Ô`&!Pióûï¦R_ªµµ—Ì,§Ÿ êå¥ÓZ’̤÷á%2\òßwTQžÁŸŸ-ˆ= Óù©±þŽITÞêC}³è«¯… É®åõ>gøŸ*Ǫœ€¯½†<ÿáNýG!bˆœ"¯˜ÄŸ‡µ᯴K•Zñ„ìà&ˆ»Ö®°lA-ƒ‡Xe}FÔš„lÓÏ“F ¿j O×—ÁPЊš>gÚÆMòŽÌd Ñ8ˆåJ îJG y\œðšs¨ ùzúC¦ f\ S„ü£.hÕ¬¾?,F*¼HbçudÊQ#¬ÿH O‡Ïnƒõ;ŠW»-~ƒgTµž Þ•üã%k]b¿Q`¾‡ÄïêÙðoœ’ýnqìÞX0Þ d3Ä]Ñ‘·æƒ1[^SB”üêXÞ-bãÝd ¾ o¹ô°Óýœ0üªøUêÓƒ›ó âÿ &Óш#fénô/é"Ëðó6ÍÂ_ÂRV wþà-¥ýr¦‚þ^6g=oó|Þô¹øÉx‘·p¥»‚üGØŠ#°ûÞhüyâ‹Á¯¾…¹æ=Z71üª0^áÌû=ž©7«}¦ÿU&j¨=±,…‰Î[Á¢ÏÇoä…§=BŸøOŽ‹ ©c˜'íôO,ÅsËB@ÿÝ£ðËWdj3üù5´HEao/ZÙ̯ØÿxøbÜKÝÜg±6¨¢S›jÅhGÚ p{ æû3ý¯¼ÌÅæjÚç²VLê?ÞXSÍ{ô nGŽÓ‘û¸…|ÐpÛ{zýPë…Q?'ÇjI^ÿ1—þã“á?†˜ª½Ä)!ýÌÌZÊcí›Å×íB‹ìKmyQ¹,„ÿx¤ U™ÔòˆÏvº0xÒãÄ韘ÄêBUÄ`¼ÑüÇ :…L¦K|9*$f‚,N"›‰aþ†/Þgü¢öj!ó?`é/->——ÄWãStGÁ4`ŽH|kÈÕ,j£Û™­»æx–yd7ÞÜá6°4¹È5+ /ÑÞ•lbŽD|rì|2XÄ9ô¹…ÈcºÑ¥þüÇ:P6$ÿHÞŽÚ’:ð#e̺d†¬b˜Ô:®þ>2;É?þÎÔ –è¯ ¦5Í>ÿ1›š—“tYék­¤þ#ªßîfƒŸqz7Æd–°Ö$¬ÚiðŠbÒß þÝ­¨jpÝÃ}¥Å?ž•^ ¼v]KªçÑ÷ñ;”ü°yµšF‡ŸóÑ©¼/ZòÆä Gf]Ñߨ^ê&½ÑGè¾Z-f¨óÑ-«'Pãa‹ªs†è¤-¢•ÔóZr*ã ‘NLQŒçßõÀ ÍÛðçåÅG,q¶hè‹»,3Û†üc±tS,l{§C<x…¿D¨?­¯ÏÔÔ]Cµ; ;Ü¿ñŒä7¬ý=pû»"-«®‹Dÿ«ôꬖ30hÈ#7êßd]Ë ð—صNìÚLÞ ¿S¯Á]üªÍÆâ·&£Ú:õPôä½é«|•²6j©™ MçÁŽ2ÂÓœåÎö@u3Ôõÿ&õƒè‹×‡|!xŽ"׌(ø½±Ä¡œñ'qzFv'Ðm^B¹ =×Ac??‚q}Úª.Ó›ðu¦Í:ƒqúï–Ãî7“ÔÇû'ÀÚ/ÆúV0b ãÃàZÓÍ—²ÙÖ¼ÅW”cµO ?Ó±§µ‹zh†­(C–u L·ùÚg㫜Cÿñáà]=Í8AúÝ@æØú‘M¦â&2ºÑ²¾u;LCׯñâW×Cy©LT?—»j'? gE—ö„º”hô/_Ä|¦‚xßÂLiA†tIèèû”ñ(S°Z’FŒ_mQ}µø ¢O2ù©SH¦ÂŸ»ƒ"ªxK‰ÏØJÞxTo<€IêŽ"au¨mÈ’<9›åÅBÑß•ìæäåá}¬MvœIú _ê»!u‡¥ð’·™gø ÿQü*Yæ¯0ó©Ívn³1œNÔpÒhé:…ûÔúpQëì _™ÖV,ÛÌkªéǬ“ƒ¬»È^a¢Je•ˆÖ9Ó°ÚÁ$…Ñ})PaëtŽó?á?®)©Ô8®“õ”úԮ߹h¤>DW?¨Õ©?/ªWÓ/«MXe¡RQ+ªÕЦ0ÿü½Ü%%2Ë([õ뢨FV°¡´ú'-Ž6O}̤¥jè•Njñ´”?µÏdâÑÛQ‹Ó“:BË(©^Óƒ]`~m?Ûˆn—¥ï÷º œ.ãac ZžÙXäâhòbõÄ>lâ XZ‹øwŠø §‰”~·Œ¾^ŸÿÄF/ÁÆ$ä-lÎÛs;Úorž¨ú¶ˆÊOX-®FxÍÑÔ.dE+ðoÙ×*ظ\°ÞžØâõFYy™\!oWìélV|«¥‹`ÅsÚÞ·FXòTjÀ”äsY°/Þ®lrù×!|_"r†…Äö5Eúôj42¾(`^ññ ൅öï `óA*Šcð©À@lÆ5îÄd°­%T½ÔÔÕpvÙO¢÷à r>ÌÀöW½4þé#;ü¢{éQÀo~'§™J–0u[Ĭnm$2iËÝ. Qÿ±OŒpùÙêB=qH5bªG¼›øÊvk|J4¬sÖ)ÔÀÉPó>§»J?xŸ¬è¯~1ó’¥Çÿ°™ÊKìá:…kÕ^ðçåñ=`èÒƒ-w{”U¥ÀæŒÝE™ÝÍÞ€†­ *±j¦¯u“ùMéFœZN`­e¨‚nƒÎå \wð¿÷á$ùGðÙ¿ÃüsòˆôO"õ’Ú„ùµetð«2¬²Bi Öêió™?¨©ûjU[=¢_£*»"ùÜ=‡‰µY5:OaiKà?Îjq²þ£€xC»:î½äë@ÞK‘ ì2éš,^2c$<–öûMûÑ¿ÄCø€—ìÅb'),Ýyî è£66õôÝÍYT‘êß^‘HyÑÇ3"ÔÅ Ò1à¡;‘w<„‹ó€¨ú‰Hʼnþ%ÉÔŽXÑ]">èm>¹„hÆé:ëL²ØN÷¥{ü?ñTi¢ñ™Ta¼×"Š|µaS¨±¤Ît“÷b ùÇHlÎ"È6 .óðrþ¨ ²bóWrÝåEMõÌ÷7-èO²«¹´LðÛ³à+’°ŠÍÎZð«ƒ_!o›/Ëó~@áðÈxyÎ4|ôNú_}gŹê&½xœ*G¡ ;Œÿ¨UýD•Ý U×a½z€?ŒG{æÔäÉÓxâ•]onð²g•úúQ1ïó¸JZúLl#ß5\‡ÎtÿBþq º•¿K/±³¥ø©%äI-˜ÿV»ç­u@¿Û‹±‹(»1øÃV—Ät'ï˜õÛHæq•>~æJç„àlëe'XàŽ2èKX]µ­}CáÙÞH‹7: 3îG髜“ á–£ç$Új#'ñ@“µeC>tU+°¨tÅ'’ÚâPïõp-*þq~Ú“+jÍ\£„t«Zh6¢²n&J¢hø¨Ìÿ°Ìf rœJø|(×2{ZÏx¦ÿÕBá‰ÿ¸KüT†sñÑx+S¿ÐÓœ+3›ï úâ@3ª½Ê4̉LïÞ†­‰ÿX¾i3Ÿ<ä|ÑÕõ0n(“ÕpÍ…Ð4#éÄSÈd^¢”nU FžÎðe±¬èÃë—ÔÙºÈÕŽf-Ýl ;uv!8ÿ˜¥žÔ¾ð–Þæ¤F1£Â[#Ëšl=Gǵé+ÉDVƒþ¥@u‰úómÖ<òVÞÄ_á½J’+£þ£ƒË¬À6¡ß<+þÜ©ÿh^Uü##Õð1QðÆÆ£ß]ëFþPÈüsQ—œQÊÚä59ï£\§p—: \¾ ˆnW¬] ã³Y oQ•§qfë:ݽ*S~Ôja@?pÀÃÌ“„àbÙåPj½˜ªÈÕ%³]wð¿÷á‚òM VÂú+þñüóxð•à?êuõj Në%—V[s×6Ò?ñæOöß}¤£þ¼ùGjp‡Tº­'×v¨÷ô¢4‘åæX¡Þ‡ˆîX^aÈFðÄáíeB7²dà ß­KÑû,õW-ô÷û©³wljÝÎòݱsðщ¼ýyþˆr{=O˜TzEbÅÂÔ³Ìy‰¢æræŸû£üIÇ»“T¶$ ; þP$ [íìHø‰ÿ¨H§Þwâ•Å«¨GJŽ÷©æe´GsЬÜÜm3Þ*†ñEsüü¿ûç¸Æœ@,éXèvÔÌMkJ¶¼7¿%ÙÂ:®ØaU’âõæbÇ‘ÜøÁ‚éè\œ™̽ÀoÜ×à}‘)ÍÅJTAùT×!0&ü/Ì&ÿŠ'öÐï…³b?ÞºNÜý§0 ey×ñ ™a‰^¡Qú݈)¼À¯¶Â,ÔÄ¿½[ÀUß>(¼ùk˜?¸œüã3U(È>4é…ÕFýÁ¬HO<Èø½Øî]hŒÓÂLC‘П9Ýh~õ:Ì}´žb<÷#=ѽ6(m¦ã?aÌK`J1Å¡¦yýUesì%Sbï׃ü\&æÍôãÐÓýåž*@Ü[çe÷ð²¾,/Z«kò4hX4°|aeý"Aþ#,×¿šº•¡²ÏLj¡ë?zi6Y²Þ¼*¼x3®8. ™õ°ÔÓQ° {ú¦¦f\Ð«Žø¢ø·) q;`”wQes!Œ~wøUcô§¨?ï€VÍáÏçÑ+r z°”öøó[æ[k¦éfަâvžË(¾~j²Y gÅÑ_µwÝÁçL±;A^‰õ~%gn w‘Îôeâ^«4ªÖFTÛ{¡°= Ç0ÿQ†ÙQÆ áÎ|$kIˆ›¢Ô*:½½½AwRi2õüjþãj©=èwâIvÂÆ§£ÿU ùŒ¹RsÍ2ôo‡—›ÅuŸ2Ò‹­¢‹ËÌ¿ÊD”3+ŸÜ/v»Ì:øÉô¼J‰Îl)5è'©=ÿ•êDo³3yCóf³4ãš¾`3Þ‹&(#[ºüÇfu„ÞŒ`ïY2ÞJa•¥â²:WzmÙ%®®‘}Š{ØÄîIýýq0·äT$þj%âd¿ËÐÕ|2 ýú'cþG°vä±ÒìÏJ­¾¥ÿîú'æÕ7ªe±KÿQL«¢MÓ¨¹ûÉùQQá:Îb÷<¨¸-Üôçš®mRßës…'õ—´ôZŠ,Ÿë8}È FØÝU âÔbä°s—µ؈‹àLE ¸äÈuD9¯¾V³’øË—ÃÆQ]$KS#ßNœÀJû¡—ø‘éT%¾Öƒ{€†ÞMÈß¹ëKô¢õ$¦ø€ý_çN…‚U%ŽN +-Én¢  .ExÍ1ÕfXÑ•".¸Žú«¨øQ þ{þä:X“‘t%¼Ébª!^h"Xñþã=(ßo\ooôKƒðN#` bGÚÀ,„ßD.–P¾#ol¸Óר7äå…øœ›Îañ‰ðó–D·²ØY 0ªoøÓ ãAÄ“À,xƒ@A}õww4ùGùp+s&2ÿ£~ðK žà}ÎÆ•}#nlbøë¨ÿØ$ûÈ"rOj2TôÇL©°ëÍ ÞÜ)¥ýwÿDÏú;þ";ú«ÍDÙóðÓȺ‚0ÝÂ2îÀfŸB7@ÕW»ºŽ»Q“ü#¬‡[Ïü¾ØÙTÔ¯– ±¨ýÙ…;ýÙ;Ñ·}9VêÞྫã?Öe ÷ZF´{$ØFèîèŠS3Qæ´&{œO¾ð/ëÔ¦7mÓO> kZj t;&õç¥è˸‚l¡¹ŒÙJ?¥ 7ª§‚¯VQºÀý5A­ñÿ± %­-ã›aЋÒÿ}HŒbŸêgF‡Ãè‹î¿¿ˆþW{yî[yÎoÃÔŸÏîT¾"ö)òìJò¾æºôè¯*Ñÿê]G’0£*ó£:¡HhÉO^F%zj³¬œ%š»¶÷V¦žÄ?V᮵â¾w«KNŸÃQørT9¶…íYIÎu’zì…àW Ñ=m¤Jsë} «IÚ+D7óêô»ù¥§ê‘ü(¢Ò©r¤9ÂzgUE~øT=t[…É?žÁóǵŽàIªÁt{³k§÷U&;šYÔHNØܸ.Qap„ƒôo/ óþ÷AW’ÍȉÇÙÂÊQ°yÀê÷¤d“}ÍÊ~÷æ×6m]­dà_Å~ãšpãô¤ ¡8sÝÊÿø‡ VÓu²î+-Õ¸®ßýÜODtYZ;ÅüÚüðçN_Œ…ЇVN}Ý_+çj¹èô(» *¡x/ŒmN®_ÔRjSé©8…iØ‹ô}Z2-áOí3µˆ!à7ªb¡»2¿ö©(Bþ‘ê-sÁŸþNCþ†R'™^\C˱ƒ÷h:±w>üÇWÑIÓ?‹ÍˆGÔ\ér3ü†ÃôÁÞ"¦~„~×þ#âùµÕøÜUäSÉAÓé.BeýpÀ Øã:ä~¬z}û g0¢G¨¿º«ÍÄâ·ÅJ@wõJà;ÈŠÁàNǪæfÏÏÀ€ïÂ#F‘[øªÊ¢Ãë?²ª©´´ø/§KC:ìùñH4$›yml"'ªfL†«Hÿ”{q”|gŒÁaØÁüzð ¾uŽ~×é¿‹=b~œ”<ÏÏü„VÆ%ÝýÕÙ–.·uBjøó¤x˜Öáø½J9üÇhV›Âue#ÇØÊΦÁôŒ—Íá·§ÃдÂwÜ"CÈAýÇZ¼Án²²3`êCô(ZX…ñ:­…èÚ‘+Ü3“+5¿r&®¦®ø"s™® ¿ª€Mî%SËÊðÓ#ÑTõ–náô/1´÷"7oCúÉûâ“ñ]&ÿHb“·Q›þþÀJBªÔŸ/ÆÞ»£¡=ŠE…KÇØÚÊPïKMr}Û¹oÔ"`ÍM™ŒþWkÍ&ÔÎ…øžó„h7> ©ù,.?L·bn¦~p/×uGïj½¢:öþ$yciüÂ+ãÜõ› “߈ڈ]X|§/ÔezÏ0sYǸ˓y2»Áýn97Dý ¦W}©Sª‡ÿh)_bqS“=§¯|P‰DÞ¨ð+ÎŒØÖjê?êÀ4,Qýƒ*Ï(f› vjhk:Gݧ½'ÿ$ýHý 'TÞœ¿íK‘{ôOüfm±Žâ?b[/ÍWÌ Ü‹FlºÃ~tÏ,ʽ. Ö‹V®üã ºSÏBÛ”h,tº§Ï1óØ%é:Ù–ó/©,LÖ ¯öïÔ›:þâT”4ëñ̤¤šž«Ú¢ÿÕZu,srÓ#O úÛ*Êëÿu"ƒL¥jiï±àUºãUœ)ÀÌ*ôõuÞ¾(D0gÄ ø8ÿ“þWÛ”Äjpß§ÇÌÿø¹¸>ø}N]-¯eþ`!}MÐüÁôO̧ÕÔFÓíð½ò£©Á+„üµ¿h ‚áihFý=ˆÕð«ñðç³t?ÍÖ~ÎÏ5ÓE×I¢¸uX®’tuNj’Ž9åÃáÓŸDÒœEgæ)žïî â]nR…‹aÔ?wôW=‰ÿû€ EÏôÃ!/éŸ=©ÿpÔ_ˆhW_}%šïÌs• ¢¶Þ b©°‘ Å£Pïlx ¦Wû¬†ÿˆAºšSžˆù25°„³@]o§»‘× šc‡‘Šœ+¢ùµQõ¹ÄaMA»‚à?F“Zƒ<»8oë4bžäÒ‹}ûáA à?ü¸þÔŸÿèª3007hÕhr¢ô¬âøfܯ<‡×7‘Ø1¦<ˆÿˆë‡ÛEvwYd×_„s©#©lÅ×¼Å‡çæ¾{âç';úÌ¿m™¯zPo.@ [FÎÄ÷­7œª÷èwK3öûåSÿ±Ÿ«“Ôïõ—‹ ÞD®8¿oƒB‰® ì‡ÁåssmâÎAàkôÒ¿©a§a.ÓšŠqø³ŒXH|ƒÎL’mT#~•­™ù´’éEgQîžAUþ¼ŒJ)r›¡Xèñ2›1ð»ú7ªJ\ÐŒÌo!þ[ø—t`inôºº@þQ‰iÛÓ¨KgÞ¤ÿºS?XH–†??ƒ÷š'«{èÚ_¡ÎN2Áö\Á2¬µ`>þ(ôWµùþ%TÂE¥ƒø;ºƒDÃø ¯TƒõÖÀ.ìãÿ»8§Ãð+Di¾ÆÑï–BïüÀx-§;ˆ“¹R¶@{´ …Ü–/!5!Y­dãÀ¯|È|Q‘åg~Tpþa¨#ÔóäNílK:‡Õ#»M–3ÙÊŽþj®Ùj—Cð[AˆVQÞd*ùÇX<°n6à^ž0ÆŠÅ®‡<•þ%ðçWˆ6¨½÷µøí~\µáä5[ɶvÀyÇ Ò_½ƒ»Ød¦§ÿ•Åéù •©b©èíò~0oÙ@Õ[ñìS2¹ä¸1Œ® u‡ƒÈ<î0ë›yŒ­›õ…î*ýQS0KÛiÌŠ¼Õ x— ¦’­ Q¾C©·ùaÓšð¾~q¬b¶ŸUŸÙ·ŸÍdøµnV;û }ÁªŽ¿û}Ø8›†Tág’‚/¤*áˆrT1ÅuÅÿ½ÞàWÁêú'ô/IêœE~'ÉèUŸùQùõúµ «¬TòjY4OmºöðéÈ/ÅWêèw¯S­Ñ‹ÅH¬?ÒRÁŸß¢þ¼|ÁQíõOâlÕ…AÜ{FôÁ:÷ þü¶È£îÕ2bsпd–POßaØáox·jjµxb±X•ÁÀï{CKÔHl‰Jv“Ûø‡È*ÞéGÂ_"ÔŸ ¯ʣ+žÎYØúèñÔÄáBöç-zJFûBB£º*õƒ¹Õß`öæ¡×JŒUXë.Aýë°ö*"°sø |¬1œøBbE/ÁÓ~ª1g–¸èw¢ç¬4„ü£x´£Ã)•‚µ¾Î=-âs”¯jŒÿø‘Ò.‰šNKAþ3ýU&<Ú'ñX´óûLýà%¼ähü‡…XÛ{DöÛÉæ.Ò¡°<¡&øÖMV7è­ñ‡Ž¸0OÃ$;ŒƒÅ3úvò•ز²r,(×lþÍÀþÀÓ÷ Ç\¤ÉvÑôp Qg ÖØHœáô,þM¶%>(?sÿ|éß±C&"?Ùöíƒÿ¸Œ÷¢Çÿnþàvò!°wÙQ@]æº^ã[·Â¶>“=à?œþJ7è£xüª^n0w²•í“é_2H©læ¹|TZSÈ?^Z @²F [JÏàϲ­•S^ÍòŒl-AÅ@ð[òŸþ´GI©~uý×äÁÕè®?ŽÔ‡Ôðçµ´'Z>òsª£_¦Ðri©?Wx¿NFj•¿¿è¥r ÿÁq,¼4ÜtºãªSÔÃzoQO_NÿݘZü0oØßßþ¯•D4¬ñY˜í3xùiøLª¿–Žh4ºÈÀt˜÷â^”ûýj×áÏË‹WDnAKf=çÇ^=5…/XþEr’ÔÔü.ˆ¨"2×\›{[%ARüGçpüÇa¥"ùG_¼Û¸ŽôxÍXÿe uCAŸZ˾hR+€DÝÄæ¦ Ÿñbw˨“÷§{ íf˜.Á €±Ï‰Þ×ßàÜý´©2þã$u…lÀ½M¤-uvjDeîÙcªêOÃø¨2–9ÀœN&PÊ\Aÿ’Ä»1ì ¦¤+Vó¹ì/¨m…yÆâùÇÇ0õƒëQ±6â$\$¶îÉYxNýà:üÇL: gG;TÈ<†}¼­/𢕨å!°]ÛÉN2ñ°˜\¢þã 227§j¦-ÿõ4rS#ò^¡¬ò ót²'¸æƒhÎÖÒ%¥ÕÕΉÍj Ív2 ;ü+„ve¶º‹úzr'þC3£pbvÂî¦Ê¯ŒÌeÓýîaØ7;.Õ—©ÿØŒÆøqL7|RUðº\àWM\ùÇ&ÏdÄÒ;¬[2ôWŒYäXe¬?yÉ­WôcÌŸD1>u*cÈnJrò˜u@»Þ‘µ˜è¸÷†ˆb¶3?ª»ÈN^Þш*ÑÃ*M=£'Ù É\—ç¬ÛšùçϬŠv;©«ø¤dð-¬˜²ˆÀJð…çFzéö?©ÿؤ$S£ºNÖ¥qPææeˆÔo¨7Ԗ诊3ÿã¬Z‘57*eµBZ}m’öR5Ȫþ`qu7ýkb‹E"ý–U› §>H”e~­/ÝL~®ÿn>,~_ 1‰õÄ܉v÷(3®ú£æÚƒwSíô7IezðÌ¢Éúh5;áá‚Y¸ÍàW=Ñî8oe|«#ûAêbà‰žÓ¥—}Ì~ÄüÁðç7È™¢‘ÑÔ‚?Á4üêyò?Ñﮡ´5¸îá•ÒHÍê\¸B„2©ïÕ^Ú]æ¦Ôw«®¾GÉBžWëÏì'S=á !¿ †ú þ£oQïêÚéÀpFï ŠëcôUÚÛŸì3_ýUï Ià»Aƒ§‹ ðkÁ€‹/ÑïD bcÈ­„ù|þ£!Þè ünc>g(“Ìk+¶¡T¿ŠÇËMò»ˆKadú—TÕG¢þ&ƒ!¢ *ò…˜¶#J¿—Äå¿eg¿¯P÷¹ÃúG<0‡ú+Ñæ6Xó„¨j¦“+'%ê.¥[A,}‹ñ ËìN¶”ü#¦ž=‚§ýVÿèH¶° tê‘X@þ18Ú‰CkÀv/ÄßíÃvÇÇøl•g~íP»|jêîêÑÉ‹àPÖµÄçR!GYÿÑ»}–Ÿ÷ \h)¬Å&þ»!ò„›,S}õ–°2šìƒ}< ¯U†ÌË´í3>b·¾ZWÀ¯ZÁêN⊽àë³·DNâ‘váäÇ•ÊàWÝñ\CÉYâ±d3©ŸÆ}'à?j‚]³OÙ 7s Tð&ñC]ÿ.ÿØ¡µÆTFWyœ©9˜$];AÀ$3•þ¼3Šê‘4£ÿÕ ³TÜÍ#XÀ§°/™¨^)Ê[UÃbÕ$*ËžÉ=Ä'é¿›œÚ¾Ì*N͸nÇAU’žîk±zmñE{ÙíbعRFTm]¨']C{AVºš³V D®Clêÿ4 â?&a±¾2M$¦ý³p¢à½÷SŒž#±¨'ŸOg°<ðç¡;߬U¸‚<‡Š uï™?8…«„'ëCmÄòÏæËmØ`Ô§¾äÓðZûñGçèm•MN ]ïÙ[êÏ}ˆsJÈûh>@„ËÁ‘<¥î< }gŠîŠAó€?-…e)F2o9ˆnZ¶Ù†§³™a…k½™êVí&ö"§å™| Þç¨JɆÿh‰Ø ><þã þ2ú«®~vPÿƒ¨Á þœ¹ÃbUþã0‘K"FNg&Ù„ZâóhÌ2ð}c¬¤t@ÙÏþ“Œ´>šWè³¾™ªÇÔº½%ÍøÎvìp ëR»ã?xêhôÒÀW¦¶ZÙ«ð”ËèùUV¶ÕßÞI?€v{k0ûó6[ø¥Ôr(Üðºj\7²üåºâÿÞ_%aˆIâÏ•nÿ¸~0&ùGí™V‰üã˜ZÓêÌ?/KýÇ8æGYjdbñàë~©ìР–jƒ½B1Aÿ«ê 4Y™F·L÷Ñ2i™C½Áßþ§BœšžÜéÆX»ÊÆaåÕ›ZFìMT:åöfÞÓïz¨†¿Ò!ú'VySŽ ßOL“üJPÕ¼üæ$§=#vÕƒIÅþð—õ§Nÿ«Ù¢86x݀ΞYM~üôo¸HOv}H€‚GðOuÖs³ˆGæR ü*'Òiбÿq”˜^b{Š“=9|@Šñ+ð«ûäA¿aË[¿O&Êg䡯Ò2,TxÀ¯XPoïÄâÄo?Ì?2¨´¸Ø÷QhL’qµݧ›’Û¼0VH/x• ¼¯nx¡7dìt#Í ãø•ÎuG¿Ë¤E®gÏá:Ñ}Y|ƒS‡™@’—èKÉ?NÉ^àaé×soÝé„“„k˜ëÍ ¾™{”úV,þkcv( ÞЙÿ1ør&½;F‘!<5jã5Ð`¥ ¸€Gòæúñ|fëÑ¿›ÿ1G«ÿQüj7“Ú‘Eö¢ã¢;ú  tlßÀü³lw#ªóVŽ¥ÄZž†0¨˜ˆú¢m˜+Ö5”® Qù ¦'5½QC•”å& êQuÔŽk>Æþg@•† ä=̆3'²9§<ÕSÁW«(­5o´ï_, =úÝôô/™Æ$'wô¬K­Dö]+¹=ÑŒ½¯Í>=a³çáýaQ7£z×Dèüc¥¨É}:~UµÁÏÞH•ä@s)ý¾ Ú{ñ öúxX/øs?²¨Idu> kg`qÈmDG×öÞ)]Õ}dn5ÈÚZ?µ„ûNo¾gbG«’¹„мšÄàn0ƒ©Ô¸‚Vª_ÐüÁd3ÉÌ<½“਻\ë-Q'jŽÂã æùE¼§:¥&â1óÏ7Âp{Ó9ÑÄɰ32äµã#éÉxš“ÝoWî£Çê¦þãˆ:ÿ‘‰üc‘Nn>†ýÙã‘}ô!ÿxK>Ó˜5Jò{a5£þ¯„éfç3KQ½myL8§½LØý{ƒ{Õvzk‘ž£œdt#ƒUþ¼:êµGÌAÔQívµ·Úo`E€j} æ%™•Èé‹ýAÌ!ÿ`IÄü¿ü/þêMý¹á:YŸ•_Õ¢®ßýÜ6«ŸÕ®Úg­žP?ÔEë–RO«¤5×zÑ»êåOÖ¤¢âiQ›°õ1µk0æ‡èéÞRT¤¢–Y‹(r½û†ÜãnÄ» á ËÉïMU©§æsVQAÌ·„ÿw5Ä¡Wøûw'U[k îƒT¡Öc>S)`ë?ªÄþ{-çת õóÙ×E"‰Y L_YwÙÃ#bá^°ÁÄýÙ±SÅëŸMÕ™¿¾G¤6LºL#šIÔluE~3ÜÂM,‡/¶Y§ÿníVü¨Í 3j2y ^䉘È÷ÎAcãKåWkú@-¤:d3YWB>Iê*ZÿPå®Ö1üL…} "«zÅÎz“‘,KðiÈÒƒ=À÷í#»[Ž'¥g*ó?‡¼aÿ÷yS|: ‚KÖE:…ï(Lö÷ŽŸPÓX§ûÁŸo&o¨!gà‰ö‘Û9“Ó‹×r½¹ÁËÞ¥¢ŸÌ÷Ž$[ÈB Úfb—ùFøôÖ¨pjÒ¤>¶îŒoqþö ÷ã4öèqÄP=Úwý¯Æ2ã¸7̯ªª–„uð¿2ÌfIªªE–4ïËô/Ù GŸ´ÿùÇ7|UAºÿ‡í¿“|!/è\V,îy—X:)bvú_]GU”Jˆ•Ö=+Õèe˜O5ƒü£1½à½F˺œÔað«ÚkQ—3qüã y_b†Þä9¨÷›ÿáfߡޮ/•jæQ°)0§Xæ~jþvÃÄ5Bœ¢wú þÞÖÀ$÷YJ×±ØÿZÔHßèLx’üh†Iu6YÞ`îëI2 ¨Y[´t=Œ7Ì<óW‰*Îò3QYNüÇ;Gñ™Š±Fº,•¹èÒûüž\®5•ÂXv˜Àl†Ï‡8&xÞÐhõöäCþqM&o~(ù!øþu¦Â´òøö¦<ŵ“‘¼@×5ݬ7§ðWÖ̉ %ø÷ÿþÙŠþªv©DRy@|4ö’_8ùÇ`¶÷æQ2§ãð j7Òmxº•ÖŒnW¦~Ð;S¼»Ïo°ë®Q{ë}‰ûPcšÂÈÊüJöò•æª$…½ÞúÃÞnZiìŽtUô´7›'Ìôf5K'¾|)–£*Õñîÿþüˆ’A•®“pSé«þ\_ô¿ï©Bûµ“[¯®×/ªµXs;ó£ jÕ˜ÿñP} œ þÒH|ræŸß$:í€M¸ ,ý¥öTä ¢ ú«-俸v‰å” Xü!tªl€µ«bÌÏDuõ¾–4?¶H ~õB|ˆdþáǽFâúÝÄ—ó°L©¤ ©Žâ0¶ð¾£'~‚°E|q0[+£/f~mYôW³Àè—P;çO¦” 6“ø¯S7O·_|ˆðšÓ©Ý‰‹6¡SÎû¹V!#P¢ïí¨X®põÑÀ^Ê“5­¦N%žîÌùúwÿ¼ÒÆõeò&‚~!þ"êO¶|›êð‹ñS'©}Œ »‹¯êó{ý æSËh)ðŠ£AÎR€öF™lŒõ`ŒÅò¸CÀQbq½¯Xí z[/âû<ýzáöOœ¤®Ç¿šENq–»V…;_Ïì¤==Õ·éñÌ (0›Ê¹ì}^/%ûËþÛºÞÜàúPÿqX0O\¾þ#lŽ3ÿ£4ñ~klfkV­ƒ=¾‰çÌÚtÌÇéªåÃGëñ¾;;s8#ƒÙW:ø«Ø¡×pC'ˆ;ßÊAt,YMÍ‚/“ÏoÑí°º¹‘*w¬ï^¬ê7Øîèæ¹Hí-½wš`û¦Pcx›,-1Õ9Ì,Ô‡£è‚Ò®æ a{ÎÓƒö.“1F™‡ù}kk çùØfjPoÄ>×zËàÏ¿yäiNÁùNãÊ1ìâþcC~—Î*x‘DvŠ ýÕtkþ}#ç~0([i¹É(ÈüàùQûQþå ¬†™™Î]O¨?Ïlçf {O:¶ß2ñ,6R‹þ'5“ë˜5—®+1À¯*a)4Y¬¢:˜Xo×)\­ö‡?OŒúªqUZ#Lùô»ó˜ÿÑÖh<þã˜-ìlv«üþn®=7ªåŒ(‚Þ‰MDEÑñÿÉþ'ó?N0?*¶ëdÝUz¨™\¿s=€H}pSª}´(z)ü‡Ðü=J­ÖTlÿKåG¨xø‹¿RÎéw¨[hK•Âc.öF]@Ä9šj²éú~t]?×?±¦xˆU? ’³f6zÝ¢êc- oÂW=žè)ÞFZuþ¼«yƒ5 B=†Ò°}Ú?™cœª|ÔŽ¿J)ÿQ•zúùøs¬5›ŒøqmKìÄض‘XÇ{ ×á}ÝPGqÅ@áß5…i’½Asö1?ê1½7Ìå¥ûIEc"¶"/Vgž†¡2»_B_ÏÁÓ~§ÓéLl´¤é²Éê³xwÉ ä71Ép>à™Ž8=CÒ˜·¢®zõ›+†ÿÈ`ܧÎ6#ÜùT#ž­¾ò™ñž®0‘ ˜ëýôSŒ+O38=·pÕ•uÎ.—0ÒQK¦ x‚ž"ë(Éó|NFÔ€™N t&ZÐK£>õ» ÜÝLè'â€öp½¹ÁÝHxDP“bô&~ÎJ>°UfbñgÉ–X»Îx€ =°=Ø¥ã?v‘†ÿê¯ÇÔüƒ— ú4‡þ%£¨|K &ž=<"ÿ8J'ýjíVÔÒU„ÿ(A“5p‰Ðh9ûÀOJKlÚ+Ì¿Uºð6äºCÑ_ÝÿÈȯ™ÌüÔŸG¿[ÕZD=ƒjÞ¥~J@™Ž§óï±Mp=båøÚÜP+ÖѾù£~«6úá4TŸO6s¿¯¢£Gû†õµ7z±æüŒ è¯6‚œ]À—ž#þÐésò’׊z tÈ=Q <5Þ¡ßÝ VµK¶§wù>˜‹§ø‘à_Á›€ ŽÄ«n¤âo'ZÚbrOˆúA¥¥/meX£ÆÜé–œ‡ìðƒ­Xô]Jçò ØÐ¤èwû g}Eÿ’FÖ$ò t€‰ÿÈ€fk¸ØìÚÞJú·+ì,äJGOèÅ.ÊYg¬VÖ2fŒoF¶üÊ ÿñ€.+ñÝÌ$“튷®"÷ù¨?îµSݦ§À.yàŠËíb1ÙÌg§G¿Û†~3Ïâ9– `©ôªŠ ŽuK&¶›˜žœÕ<(pD™Ôù÷wª}á?â=Ò7•(G±ªØ>VKîß+Ø“O|ÿú—Øvð«Rfûžéo~‘Õ¬_ðä—ET*Zs„¸â¿WþÏÿê«ÄTƒÑåJë\ÿK} vÖ>h¥ôÌúµ §ËGiH÷öòZ[Í_}ü“õšzJ?OÜ\KsV|¥/ÊKõ˜zÿá©Å¤Ö„:¿Ý©¬â2ø‹Ÿ(MT[üÊ_4B¿›•ªg=¯hO¿(úˆ úû㪡yˆX¶uØ«¹ AáÏRíÅ»E,@<EœÄŠ‚ò ӱ̃òÄ5g­l÷Ö»ÍÜn“®ÌIàŸ‚jSj»×qüj.ê¤i KýP×>é9„ýÜΊÙȹVRÏ1VhŽÑIOðÝÙYLÿ’~dCɱ;Abžã'é ¦Ôy)6o}x¯6Q ‚n7<ír»øl¨÷º†y.6úÝ̬gaûüaÙO³òuŸdDø©€(A”zÜŠAFSÐ,ˆ~·4¼ÏüÇ6ð°&<³Ú’P+v`~T{žœ?¬Î*r4 …ÓTö•˜þY“àâÙþØ×æY9þü*ø]˜”(d;«¸ötôèj½ù¢9ÏYT%•@¦>wé¿»­íÑ^ª±¿Ð¿}ß?ÒŒEÿÄd 5ñn«Éò›äjÑÚõ0¾¢Íö&¯#pÏoqö²Ëlæ[˜„øV{jäÛPß}ÊÌÈdŒVÖpó¹Ü kÏt<áW|uBrØN!ú—0/P{Dôt‹ 𜌂†í¢Ügtþc5z›QØ.¦J#¶-˜?¿ÀTªªôo§3>)1Rn±G´t½{«©#ˆOf_ˆ§UžߌChÌÒ¡¿êŽÞö 3{п=+úÝw†V{ ýnjôW•xïZ²Ã®SxšùƒAœ‡ðD2²&°Ê ßmÊ÷¾³{Md0Å>aG·s¡ßõ4oÑ38¶•޼&‘Ó[1® Qá»R„`|\·ò?þá ¸S0~õ•ùƒÉC‹ÈoÀV/ª¨?/¦ç¦~ЩÿØ­Ô@¿ë¡uÖî¨O”C‘_НŒ©n‡ÿ¨5 öU= N˜F¬Ÿ¢ÿîÏåùÅ#,Ô^Q& 1¿žÅ@Es`M¶ë‰Eð«§ÚóHíÐKGoÕÐ ô4°À /äoXã8þc7±ð+Q™üYgáµH¬XW_¨ÏBWü˜‹ùXùhpÇÃÉÞ_ÁþI,} ½F|x&º>¾ðÙ¤RQ×R3‘’ï®,'’µ$Âû8“¼`!Ïñ›Š,wö=ÍØg­t+žÑÁ0Ôäl¯Å+žGáZKì`“eWT§KÈ—¶q/¢cÑ–ð¦W¦¯Ø…\u.ÕÅ[lT#¿ð–Pyˆ×n :qÏXòÑÂ.›a¹  {O\?‹N1QõÒJ7ÃÙå*NHü`î’¹ 7wÞx &™[}cýKLsÖ¸ïÿ^˜âd8ÏDtÞûö®77x£û™_ë':q5“È?ÊRçµkí…ÏŽ?‚-{Ægoz¦ãs64s‰ ÆpW¶õXÚÝू>-Õz‹1ìK¥[Õ>üÇ |á~ò6N 7vº]Œê1ׯ,ýK¹'”¨Tï+_°ã¨÷º…¹â/êG‘¾-#Ê¥ídÛøt[Ÿ ÿqElqz™'µß`EËÍ‘¹Èî/ùá?Êr_2jkB­ØN{Žßû_žõúQ?˜ìc²Y΋™ž—†~Ÿ©ö~*ÿBÁ{ŠÕ²ƒä}@K6ƒ FjÑ$ÔzËESâ•°‚õàÅã‚Ó-€©aúÊæÔfûÀ&_£2o™y‡þínÌÿŠþ» èÕbö˜üc§¨çºƒß”™ø,hç¡ùxˆ*£_óÁDýào°ò}¨FÜCýà.«®^£·³þä*†á?t³ê9¢¹àÞ¥ë™_ûŽÚÍ[\ïyNHXö‰æ.ëýwÁ1ì¦ÃÈB®9ó£üQ‰m¶šÓ?ñ Ï® ,qTe9áK;ºü‡/õƒ¹ˆÌòsòÝdvqÕh`忚þêú—8ÝZ–Óy\È*"…“Ö™þ£QV¼ ü£Œ¼Òû÷ïR;è9™ÃÀ-ÒÂ^ƲÁyÔái<ãœøXS¬ø(viæµ7@¿{.¨ M|ù;æ6TA¦LKÿ’™/ø_üuý¯4×I¸¯tV“º~÷sÛˆ«žW;j7´rzýêàêK”ZZ)˜îÑÚ35@¹ùS˽Tð>7äŽ&5ÃMœJÄõŠ:„ìb þ&* œé|_"ú_Õµ[ ò"ú|‡ÿ¨ÈïÀãÅÖ="xÚw´É N=a»·¡â  &Ž9³x¢£`öm@ f±ß`8*uŽË@ê‰fêùó:Ë™rœeSg,ßBÃé^2šü#@|¿„«ßÝIÿÝ#¢3ùÇ(9\ %C4àyZ‚/5Å6–ÅF]S(HuáQªuÖ¡W>€©§ßÿj–Ö_›‹±Ƥìû`Eœsüªw©7ùZ¬ŒÞT^ΣßWLô»·Í(Tê €·Þ ÿÑ…ü£ zå|â ¨éò{U= §©qIByU””Þôß­m £KdVg&}½Ð^"KrØþtvTÓ²s‚_%B à ~UHžѿěþ»cE"xÅΨ]²¿RéAŽEÝÍTºYlê%™?xÛ*ÏüÚ)°ó‡éœ•Ì„Y5†Bû@ÄQM¢âÞu+ÿãv*ªzÇõSž)íT÷PçÌõW~ȬÞVÛhç˜ÿáFý‡S?¸ýnð«?´Kêm%2µÁ?$­ ?¿ªG¶·X:^E¥ÿÕC½•H­w¥þãMˆªÇàïúñ§_ÄØ© 0+x›ö‹s¢¸zJKHÅÀZý6ÙãKñø»2üÕ®«ŸÔâ–cfï`Zøó—âqe‘(uVT@…›PBÄ@á¯åüi }*S cEg‚)­ÀâÜÄ^g#Kˆ"{aI/²âsŸNŒÄü¨Bê ØÒm"6H‡ÈM²—Û¢تssÎaocðþWâgͤ¶ð}„ýwïkóa:ÁÜ.§rö‚È÷ŽÂ’®ÇŽu!fvú'å$$N\„~ q©ß.¶˜ú«–‰«ÍôN8ýK®‘©õÁâ/„%e–<(6Ñí;0¨­x£)xÔiÆV*Fƒ;$/½ s8øÕ7¼¶Sy¿Y‚U¢¡qie¬×÷èqÌmDöuä"¥\oZPgŠF^Wä¼Ú ¥úÝ\Í(òäò>§5ù`10úúXÎÖè*¡¤º‰UNDßÈ-àW›AζâGªS?üýkÍ•Úð«ŠXÁíDØAäÛÀµWÁ´ƒ1_iÖÄT§ÿU3ø-ð©@È¢þ /PéÝͼ…ŸÕ(Ä»Íð ÐùÞ‡ÓeÊ컌GÖ. ÖÖ:óÖ¢â Å:Xû­è›fÑ¿$‡‘’êÛà«UÐï vä(窂!uÀRÇ7ûÁ W”õ˜ÿ±žúÁkÌ?ïF~3;v¬© •Ÿ@ð&ó„Š–hj½Yäò6u;õ¹‚@&l,ÄÒO4R!™uS^ë>“+ö’{M@9»Š¬È‰?öÒøÌ}91Dÿvf©` ’‰{¢šêÁç<ôOìäI•cw¦Q-e²Òø†ôÅj`Õ‘¿OuHF5{“ÃÒó=ÔüÚ³Ú+ÃCÞà”œ–O±÷ñ±Ì^ô§wúh%ÂÖ¿#zJÍË{‡;Ö!«'Æ·KtÇTä,þ‚ÿ„ÚæØX‘ DÉå<ñÒ¸A–¨®ò HίåÈ92ÑMñì~7¦ãF£kUY³ _ýßkPU2D³WJ<7N¸5™y YÍþ¥Õ$ó •¡*YG'{ ýóÚ#©D/øÆ%‡¸ËŽ”µ yþ|>¤¤ Á¼aþ`ºPç"ò?#•zY =ÔRÿqNuصJmæÖļ¡ÿUd´¬Á?MÇœÄÚ×â9]ÙÐ_å$§ ô úiºñ¦ÿ©}&AJŽÂÂÚœÂ_8ýw3ó†» U o¨1yüãÿͧ[êµ/ú+oÐφ è£duf$öN?Ö§¼•q±<è?)~ÔÉ#äòõatõªŠ×XÀû¼ÜÄI¿]ÿŒùýÂÛúŠº˜äW^sbµ79Õ>üM|ÇîQ㑊ø¤2Öx‹Q’œæ8ÞnÍ:ŸdF=4 r_ÿú|][B@S©£d —‚j†Á øcMœ¨uzc¬FJ*&¶’™ô¦òíÊ÷ËýIfð«Ì a£©LwPÀ“:ñ= ,åIô,3°y‰ðn¯ñ —yNÛ‰­ŽRõRCÛÐYn5þ£?èÞøø°çŽ®>.=êÆOôú›¹š â†r%qâvc)u·EFòÃðô»;©Ü%Fq5ÃÉYr‚_m$‹¤f„®݉’Çcá›à=.Q³ë¼|ÄîœqÑèMþñ:Ì5ÒúŠáœ´¬à]þd/p%'è(HþQÌÜ„®ÿ¶ð,ÝÜ«š;ˆÆÁýùĽHgLFzÁתMdÚ ÔjXTs7'䳞 0Cý Ý´DtDz‰G¼ÁwÅoXšòÆvâ 5PK‡šÈLa¤¸ÿñ!¢E‚þþ2õƒÈ?.Áׇ xJVZ„©¶ØÉïî-å…-…úê½þ£I!PS}š>‡>oˆv×ò¯"¯“'oK¥v 0â°d¹ñ¤^âq„לýnNø´Ä§¥AŠRsο :›‰É]žÅÞÆ†¡n‚µ2˜>Ìëûú×çÚìywp:_®î•øû;Ù¨…Í™‡eÎ$W€6ùQ½—ö<{Ñå‡ú«œj5îø}pÞŒDÄèôóDtå©èXgêŒyXh¦êáaÕòbûãüÿ¸¨nþ±D]¥3ÑŠ·Ü©Ó»óàÉÖ'ÿ`n5ókßéÑé,Õ;ºæa%™]>üURðƒæ®77øz/(E™73–ÕFñ:n hÕñˆ÷»ƒù£Œ2šã ÎSC˜Žþ»^<©ýÜ‘óøäƒ— ú4ýÕìAI,øiöðÄÉy)'ÑO°$sb+ÓãÕ¸¾þc#Œs*p¶#Äö¶9FVeÎY§0O:ýFÜñ“¿-Ä6ßȽ°À¾Øú|ô¦:A/‹"L9}b='ÿè ~5kÙˆXüýV6ÈÖ -9´i¡Vì¨=¥þc Xi0³ºälÙ±ÌóÍat£Ú„þ*¹} ËÕÎṳ̈¥¾ðçÍ@Ķ3iÖ–æ!yPî0ùÇTÑ@½Nð?&ýQ?xÐadGæ×îÄ¿%¥^o1óJ¼@Ûæâ?fPÛyߪՕÇE[×|£¬‚ÿȈ?zŠÿ¸ÅI‰)+𝙨›¨|-–¿´åGwžz!úÛ‘Ôëy£ß²ü#ƒ¼@wô-®õ–Ò)õ8ÝžÀE© |ö‘ý`S$=«Î™¹­Ù LK¬VJ;×Óe ÙÍn2å¡ôl©³WJ Ñ?qƒº\ÏK¼ãn쬺}Q~®þ£¬ÙïL î„…oÄ|ð‘[Ý­Åâ¬Ê¤Žùð/¾Óð‡í7Õoj#HÕÂ^¾{ý €0XΙDÂøwòÐå"ý¯"£¨¢÷ÓÿâJÙxÇ\%ÿÈ$.Îü¨ÏT~Xp6È?"îßWí€Ü‡^+¥,+gƒ§&¦~¿8ÈØvXï‹xhXèÚdÞKðÌ Ãt¡øþŠïi›y{Û±“3LÐN‡Øý`ïó‰Éùø²…,DìyÓ»Pþ#ýURæ‹%ãëû²«dð±Qwâ{ÞA*£±QÑQî*°×ð>Üás¨›„ËŸ/cêN3‰·xë:Xñó keag^ó'ÎüÚºe.#—¨)çÁÆïÅ8óÏ3ãeþt½¹Á×{@)L¾ÛÍÍ(Ù 62 Qg=r¤ÌØôfp ÙYMð Ë`$ÉÑ÷îâž»:EÅ2úïÞ ^*èS­jà| ݧ©9¬ÇSìKþáô/ia–¦gSUüâØ÷–f5s'v*¼ÇE,àW,kNOï°o!z[O£®‘|"‘†”Ž•‹š™ðA§aYóá?nZ÷á­ë›‰aJâ³â]$ÂojT¦þ#tþQK „[Éî[‚ʵ—Z®•t\jGýù*b£ßb×3ï tmg>,Lþ‘O²›ü¸aŠJ¡v8V4ãþœ)¬ Žôĸ@þ±~¾k©ŒO.SƒÎ´š=×|,g›…-¼à\<Üiþý‚þ mpˆþí•5ô¿J¿þ‚“vT…#üùT8Ojg¦Ñ-ò:‘¹?þc¬y×lMÇaj;‡âÝÍ~¨.“ÿot=‘iê íþãQÓ-  ‚èÃ4õäv+úf‡õNC‡®Í̯}ƒ2ö½sOé¯9ì‚…ÙÈıýb ‹ÿ˜§ÎÐS£¾ªD4V@Žšô¡bjª>JÓ¥å’Ùöü0І1àaÞf;®»¡´Y ì8®ü %e3¹™Ùoð õƒm@œ‡ ìÉÄ[ñ oôâÝø&ì ÖÃÞo?¦‹"•“æCjT¢QGÙÍÊLþ¡r²ŸŠgF2Y:DÇ–¿WþÏÿz‘ü#X]¨4øÇýK²1ÿüí“ÖHÏFÿDÇTšhQï¶Ö3c$2±xðõ¦A«{«Úš§ô†™QZZºÀû3çq ú«{Z -[¨óüá*Iÿ« ðµ=°Nͱ¯„'üGrV¯.Z‰Õäoµà>’á¯ñ¯?=¯ÆÖšˆ/¼y[AÖÃrçîh™:ˆ…œôËAþ£?µâ‰`Ð#ã?*é“™Þ`ïóôµŽÎHÞ•ü#)ïb6ªKràED‚?¯£öàdo™ˆOKÉñXêÔœ¯Ê cGA‘Ïa•Á7"g˜ÄIMª‡³öʵǫ̃ëArˆú‰p0ýɼÕѵ6 [؈½^…- uòš?èßÞBýÑU»©eµTè|‘¥çí5é¾Ðšß½4~çš‹‰`cÊ}hØt|èþ]Ïç+¢t¸õ+Õz¼†N’舎à·Ë“Å<ýêf\×wêØâàö3ÉRœúÁôLÌMFVÑÂõæ_í)¥,ñÊ ÔiÈŸ QǸ t®Œúíf õȯjãÞÁ¢ ÂÝÏUŸ!þ¼Fî5ýnØÜuŽÖYôGOPˆïù$%{Å.ꀲtÆo$¾ÝGŸC*÷èÆ»Æ%%hãqª"Ls8lÚR18Ì鎮}EˆK2Q÷Ë À%Çö¿Dÿ«&Ä÷[ÀL¢šïY±ˆ¹„nUmˆÅO€Ô¬–õñ9µ ¡Vl®)äjëyzõaÚÃ9çA6Ål†"l Àѯ/Š=ŽÎWƒÍ¬ÓûxZf6_áEs~҉ơ֛(£÷»Ãùòä^)ôÞB–5Ö\ÁõÆ*Æì§öYØšetoZ‰Gþ“Ÿz‹|î ÚÜÂrEˆþWÑÔ}êIòçºøªpá]`‘ª3ób úÝ‚ðï“AÃNÐõʆa2ýKzѽe)'‘‘e2[p-t¡߮zã?а;ôW*Ò™Õü“ª¦xŠÖ`&LÂkX¶n=d>ÓfXùL–ovîvyNB±×ÿéO»”,!æ~P*«?Ç+ï/%üG/-P+¯g×/õOÜ®TÑÊÁ ЩÏ~²þãr<ºÈ{1ØÖüú3-¾vF=¦÷]à›}µoêÏáWÅ;âæ{øgõú]yªµ$dyE>1z;[‹A_[ÈO·Õj8³kľõá+ü9eÀ!›‹eè'n£á.н,’Mìù?ø\›þ‰ À>’¬ÁÎÇ _NÞñ¼/hþî@ H‰Ý[/î†zgÃ[0—Úüjj@7¬ñô»9±ÒµÀZŽÒÔ—8ª<.¿f:£‘$BýÕsm2hRc,òIx‹ <Î,à8ó°xnr!Ý‚ý'–_Yû£'uÉ?RJ$¢þ# tTmõç¢:«ÆüE £'Qs,v'ñE`+Þxãdçeõ€p.u]ˆšƒHhèwƒ›œæ}®@„~Ÿ|¦qMߢÁ·$nvê?öá?rÀÿgä‰wp½¹ÁËnQJô!盀¿Hv¬f öa$~c<Ó}"ko?¼ ý¿À¯Î³øï„ñ—žN îAú¯5‡iíÅT¼Y~ì ýð*ÖÅÄé!ý‹Ë5!êÑîáW­àþjƒŠN&º.„æh3 ÝÁØfÐMë ýGn[“¬YÌ?ÿݪlA7†$­ÙN:wQ7­r=Ü-ª¯ö–{—SKÆ"§¼ƒwëŽÞ Y`xНÖ*þ’ÛI¨Q†éíÎ=ê œÿÔ•T5îE¿ëAä´–h&#¹Q%r›y(ý¯`1~X¢ä:à?ÂëuU]€gkJï’  9o¨i(MRTøC\ÂO±ò~ð4Ñ@/ÆÑ·®±rÞy4î/RÁ¤]‡&,)w#ëu".ÔÇsL¥@Žjñì{cÿ#‘lgÝXç½¢V˜ý¯€B÷âç¸(Þã<èUyø¬/|gªì¹ÚW°ÿv¨‚fŸí<”/ÀõšêCÃðKùá?Æ“ ¦^ÐîŸèƒZvLç2¢Ðùä$ïõæð½wÀHRímÇÃ^$ó™Jý¹êfŽÞjg1‘#JŽÆèçu‡{º 5×cùÇfÐû Ì鸃µ¯$·±'Âw"÷ùˆâ'=Ùk‹Pë½W>¢=oœXDñ»‰,|Á¯âÊ‹ÆuH¥©>x€ÿøýT~¬v)ÔKŸyïSÌ+lĵ­Îr[ÑS}!“?]ÓW'È$“xן/3S[_PþL’—étA|DþQÏ¡¬&ÿ¨ËÔœvnë--yÏ DøU¹^WõKXè½ðçKÑÔì¥óHô±‡À¯æÀM¯œþévöÊÈ +ÓEª­k³Ðiâ*ùôðG—‰7¢®Å¤">øÍ4¹Â¬oQ•úƾæ0y¼ÈÓ\ ÓCgæ´¤îöóÛ¼ëmP¼Ô/DD{ÏŒ—">ÿÈ¤Ý î¿»ÅQG­Iö1‰úÁWŽŸuµûÍ"ÁŸµ‰¸raeŠiªTÿfþ`WÑþãžšJÍý[Ç™J\‡°'RÝ‚=ÞB=iyå…š¬'±H*Ɖ«ôˆK%úãÑÝT¢¨mÅ3ªÞ¶±Ò:Ô¦©rä¤mQBtÁæµDçÓ­m4æþJÏúÆÚxm9gú-×f¬fDã†>ˆxþ!™ÈD¬á#¬ŸVõF¸çœCéƒÇØG¯½HD´“‰¹Sqýªq¬»ôœ¨dÝäªÃ6zÐÿªv8+>Á¼ ³îƒ}€ýIî2’ªà=ØÔx¸µ E§PÆÇßÃoÖÃòýŒÿˆ©4$ã ‚?OÏ1N¦Iè@fóTïå)®§Ï Ê“õ‰w¼œÅGŸ%4%Œ£ô¢þ£1|Ž­nÌïûqòá?^°^gý¾v@û€­ë ‚5—ìkƒ¾ùš>0Bt>uÝÝcŽ2ÚV1Œ»9 Ÿ“–3[Gî;WÏAÓ 2† 1Ý¥N’ƒ¤!Ùt Åà Žpú«Ð{gþÃ yÛè›Õ“,¨ŠñÚh- Sá ò^’úójðç«@)]"‚þJÌ›GŸ%F…:ã¸Ì{*¢–Ñ®®Àæî€ßºH®‹~“j’’ &7èŸøþ#¡œë[nUç¨tXd4ÆççV¸­ØC5Ø¥;¹VvU}]úïÆ@/:^öÄl„?kÝ£sÖýT+é—]ëœþ|9QH-ôWî*C…§QeÖ%º¼ôÇ~3™/Ù%X/ÉÚ†‹Jt™¿_%K™ëÈ´fâ§ÏqE ¿* ]Ëy3Le¯²F­ ö2()úòLäóŸNßRÌO_ ÿ±ÞÂßìm΀io60ÉŒ2î¡®O$s›üÃÅŸ/¥~ð+JÆÛì»ÿU ®t-¦ÌzX QÁ¥Ã ŲV‚ZŰ2½ãèÓ(:RnC‹×”¶²±A/,|E;gì¶\Y¢-­ ÷ýîmúïfƒ‹_F=b<<Ò"ôWÞ v­…é+󃳽2*Xed °ãÈ ç_˜•r–áû UiCDžôu¨Ì³ýäkÑ¥ùœ=%ŠÚÆ™–õÂÌc5eþblë:¹ÌÅÍ…Îðƒ8Hmˆ¦ð¿¢ß=èH®¼ÿ~"Ž÷Ž&ÿX¿O9þê…Z›ù'‚§P]qUÓ¨ÕÕÁê%ð7ù‡r[ó5À#ìù¹˜_×)­øU?-þã÷òÒd CÈd©6Ó7‹Ã¢ó£b€ ÅišÂ$Õ?hø—ÅíÅS%9Øvñø.4Q[È8²±„MñCÀ:â?Ú³;â‹7ÚA·¿ ûµ´áàW5‰|Gcåü@ào‘u¥¿zI8ø‘Ò\ÔÄ«Åßn6 ¬õr*ýÐî!_IÌ3?†®èÉÙ¯õðL»õ¼DùˆŽYÛ½ÇMÝÐò†³b º‹Üÿ±MH´Óo6AoB·Ëìa¬à(…'Á»kò²=¬ã{Y”¦j6xžQpúɱ GÖ¬ï>„ذ$ý¯ìºïÓÁÄÞÏ‹léú«Rš#Œ£Ü¡lÑoét k;G•|þ{JEãú í$ýKVRyQŘOœ½‰|'ž4-^¦¸óÉuè)G-Í_ŒÂëö2ì¾,ŒmXÿ™z&ŒÖpÖãÈ?ßß¿J ÿ±‹üí¬¾ˆ÷÷ÕÇiÕÇ®¥‚_M£I_ð«BXÝ»x¤¯DÑ;õ:ðç­¨ß>r ï-£9üùrÔ]©Éæ®ã“59ÙȧOAÅæ¾ P¿Ñƒ¹>wuÉ0¤4¬[B&ÁGœE \œjç f|˜õâ|o‰Qv* ºÛ—hë° rªSÜV¬­FŸó%׫†êDþ‘î‰Ãdgþ~%‘~ëùÇ0ò?e'¬~î>æ }ûmýEòÌG¸X4 äy¢³JFOp§sÆFòÉ0ù]éèì?<¬3òsÑS“xëNƒ:Âe§þ£©s9üÊ{_Õsã&Ï…=¿ö•ü‹~RE©ÊžO•Þ™`þ|°¹Ž % ׳p)“ñF±e0"Ô®ù«?ð«´xµ£àWDr© rží(ˆ]wz)úaçÁvÇ·âÈj0/*X…E'ƒódêßOx—2\2ðØØÌà͆™ŸŠ™ªr þ£½UšK,_汪¡ˆÛ‡F,*èVú'öÛ߀~÷Ouâ_BË¿¿çÿ__:R¡­ýþñÖQý÷/I¦¼¦þü¥ZQK¤Wв»9Š«yè¿;U½…Æë÷úïªÊIí$üG{˜Ö—̼@öqþcùÇ æ×ÆV#»íßïgð³¯yÅ-"ݳàí AËÄEô#wx&K¡$I/†2Ïö¾zûgìöýcàWõÅM,Ö6òÍuX‘F~pȆøÞĤe¨oËüÌÈâ­ö+ýwPO?†û¹¾˜|Øž§áO„4=*»¾*½dxº9¿ÀŸVÚ±÷bkL£¨1‡H?-¬wEr›U ®û± ˆð=ù×Tt„†V-œ«øA]²Ö#ÙCýMŒÆþöe%oúèÕƒ­XŒÿ¸D.‡ÈÊýnkQ÷§üGvð« ø0ÙéðH*^·>÷ƒ>‡'¾ ÈQMôñ>øøÌ 4o3ã Q5Ìþ»»™"Úë„?*Ï]Ø=,Kþñ”+Øžùx¾Ú'ò†ÞÄÍ3¹¢;¹¶ônä)­¨7t>¹®{ÄQ üªµ.ù›<çv½ä4kÓ`¢¶¼×K3ié45ÝYù<Èñæç7QLLÐ’ª¡;t!GµûÊço¾Kæò uÍ Ö¸bpÏØýô 8Hÿö’h”F¡ .K4>‹Ê¶É즱bD¨û¢Ðo¤|[fü¶†¼„Âû$ùGb,ún…Òæxó2õw`š©ñ6r’S˜ä&—ˆ kPy˜Pé¶b=ôÀÕôõàW ДuâŒãË‘Ôæý²³„^ðqÀ¯Öyƒ~¹Ýå ÔaQ½&‘·¹¦^ À±Bñ“D%â•«°OuAáÞë×µÄσ™?ØýÕVê£`Ÿ7à1‡“9x“i †g:ˆ7~+ŸÏX¢ÿ•TV ¿Š‡¼Šâàxg)#³ÀAlÌ|p*ãˆíпäÑyC¶3k‘<æ}ð{mð÷ôbóæ® ÓÄk,ì öÁCg÷F‘혆û‘>Œ‡ÁÅFÃÌÌ¡ãºiy˜OäÔSÛñÈ^ä¢ñÖå9ß2b½¨çô«È?’ó\$&‹GýG#P–´òѧ½þ㙜ËXƱû·bÚÕ93?ý±’JºqŸ«Å”4¶¢Tü~€©ì*"êCá?"‚_%‡)Ÿ Ó± ýUUîÄds!ùÇgXõQfMy‘ªD»IW3¾aÏôâ ‰ÁŽL)~_ðøÕÛa).tൣê?îßžCy >ñP-¦Åж)%Ù­G…Õ jQµ#ó?;~¥— ëÄ£µzBÛ‘jŠÂÐN1ðrýn ­—¶4ë÷柷¯±gDs"ÚRÌw=BþqXLvóH+Híø+ê?B×»Ž&ä«ÝôoIþqNulþ1bï (»º‰°6:–»1X¤ ïÁø“×Õ´ ô¿*†åGN५`#]õìÆ#˜•ø‘+Dë·DŽz¼8áfÂZ°²²6À[$€Ù+ ¿fwJ¿#š¶ìaÍãìøT°›µÈ¼£Æýª gEU[…}oLn½tîùG ,aubÖí<ÿÆBð«­iZØI»þ¾“+~¦´Ë£ÔVË‚E Á’ÇçZ=/l™×džíjø"ÁA6ács%6óé~•_ «3ÙºÙÔ ¾^#9ãsüE)¾V'{ùÂ+/íüù¢úJð»8Ûqä<×A jéµO®ë 8ZhÇñfŸQ÷&’NÃÎÌoìro"QÉZDZ¡»@ÙRòS2#|Ò%}‡ÞU“?Ì®ÜHþ1¬0ùÇ-øÁúÝ:ÔÖ#ïØ„â6€9׌ÚtqßÍú™9ÎÓ(ˆ"ËAè¯þ0ÿÃRž„Ö7–ÞÐ$݃³ˆöj’D¿·M¦¢)5…S8ƒºTVøá½†à?2ëqÔinwº“êA”²5I7ŸîØÜDT†OÃT”Ëá¢Roð’±÷Såi£ªX_øó³Ä gÁ0?jMÝÖ[BÿvO²H:O¡6H®ÊK.eö³áÏbñUð° ðñcèH»Tp$yÞ1jJîSyRÒ¢þü½c‰r„ŸES#”°üù9v¡.5uC‰í`Y÷™]Íe貺2Gð*ÙÛd<‰U©Õ1RÙXþÃ>\Ié­2ÌZc]0‹Z#쮼\Åw²š c ¶q¿~JD&#~¯-tmçÿÙ«`VœïvþW9Ýö…óGᾈEÿ’ê̯ÍAÿö#JiVÙAþ‘†ùƒcè}ø™i¶¿óä8Iÿݦ õÉPéÄ£â#Ž:R¹£MùàÏçÐ?Ñü­ã¬%¢½ô]ÂS_N”ºHH½ þ#*ˆòíì•Ðc‡9%õÇc¾­*­Ä'0?Ð’Y X…ŒJä5Äp÷ Gñø~GáA^—ýÇu¾§2õôCE„)p6ÿq —{ü ‹‘L×Î bÃ6/§Â=gUÙª¶‰>ɰZsá8~Uå8·¢ €ÿHÌ5lÁ£D×chöœáÿëCÑ–Â^öÁ3àìnˆñ\±¡Ä¬Ox²ÚbuVp¼§àF_í‹êFýùÏú_åUÒª%±î#ñôa\3{†Ñ_诖a“èÑH”ϸþdyúa7æ’ßy‹FaÖŸ¯QŽjÈ#ÓÈÍþÆŸWáÚ—&w‰b ÕÏk>ÌÜŒªMþ±æt%žô9u••è-óão¤¢°þj¾ÂfÈ—s&ë¹a»Ãûòä×Ã{<%bÎÏQnb퇧òÇ× Õƒýgí±øñø1ÛêÞKÒ »¢'hMøóuÌìö¥óÕ£ý}x‡ÄðÓp è^G9àVû…º/ÊWrÐøéE°AÆQ¶kpéÐòБ0«Ù ¾æN\øå½ \méßîÿ“³N¯”TKÃWŒ£ƒCd}šµÏd˜=ñ“3ñAUõÄÌ û|Â:¯Ç;,Ä×WÕž†±â e¹Ö›üCC¿[…,ð(qAA®Õ2¬^̧أ%µÑw£¢1–{=\Ezò¸XøÕVæú‰>`gPC€ƒ= Ê7ÎÈ+2Ž8ù3ÈÌl6ýbƒùp*c¹ž{ôNÚÇÆÿêzuX_XŠ£d-vý _•Aè$ËË•è{vɲ诚ÚÝLˆÿ3  ÞŽtK„ü£S¨;}G‘xݪd•3ÉSžbÃã³n1¸òËÆyúï&‡V,A|_þc!gPî| Ö~ÑMe=ººÙmÅæ`·-©*õGá´‡ KyHÆP™i²K™_û‘è^·ºPg0ŠÇ pãE©„y‹7]Î{7¡>³»ÛzsèŸXݸOXÖ胥>E‡ô…ôÎZlÔg6¸ú«§2ÐÜ€^l:“7¢˜L>·6eøU^c~ˆüã‰c±²Gu8ÀzÆI˜£, uPÂÚók'ÉÖô·õ§2Û¾z6UÚ©¸AeMOª’¤l—»°Ô¹g¦)¾"ð'_ˆ*‚´Ý7öRøÿ±K¦¤sû'8tQŒd¾d>ÓQ¼Smó({aˆböu>A/Wgþ1CÙ~•‰è`|Ô*¼ÁMYߪ‰‚ºøUlê>š`¥À‹Ü•§äXt^Ùe~z`1’ckȾ/I¾ÝÊé?v)ÓáÏ£ƒÃ6'öŒNýG-0«ò¨©}àÉ^Ò]¸7ú«Kæ$Tbõåa:g¦¢¤=óϧÂ讕WÑtÄÿWæGítx(ÏœWú•£Ù?®L¦ÜR<ñyµäÚZ¥»k³£UÕÌîxšõ;q•Ú%êK©îaþàߪ‡º‡šÂv"§6@Ûˆÿˆë¶Ã[;xÄÝÙG Ö|0E⬨Jÿvdx¯–TŒAâÛ=ŒÂ^óõçÕÅò­Ä²sˆA’…Á4ÿ»Ádüà8£G ‚•Ð~%窤 ¡~°»u¢î &öKmwü —iµ ¦èº¡ø¤Ãážs¥J¦ü~ £*ùGªˆ2ä Ëm¦”ã‹„gÊ ë6ŸúV /Û|®.À£ý…ÿ°ûؽCÀ™–[R/žÿäx¨'ØÑ“à*ŒuœwcQQq)_ܯ`n¥ªšv¢–<±û+q]t ªä“¾ 䉊·ºÙ£Äéo9έdK@Ö¢ß ]Ým¯»[Ù£µ@ð‰ÊŠê I'ˆ5*~Æ—ÁÉÓÓzÒ›(v18Ø:zı;]suª9Ÿ\×ñ$ÿ؉w|¯Àçä`NÃ4Öš‹Å_ƒuŸ‚ÕŒ’a÷/9ŠeNix£föÛGf×T R\9üÖ\¦v“x¯´D퇰„o‰-ö¼Ç’Á®Wƒ¯{“‡<0þÀ›øñdg÷A§uw˨÷5]Ãáx¯XxÇκ­;£²WNµC~ê?î“”7Sa­›RÁ¥b†zntCW8êÍäÕP»%TǹízÌl:ø[¶Š;ËHʼ»Á²!šàø¼äƒ9@ ù^à&¿QŒŠ'Ä ÝŒ%\ïÐýwÇŠªdP×ô³è¯º3Üÿ˜#»RÙLF'v¶+#.Ò¹)9½anA;o¹‡,v5/ù úŸ8oF÷v=¼VøsOòïÖØÝô¹šJt_üj´ƒLÆÆ¯š™óà’º3GêUþýÁ+ïpc²Ï›†À¯æS)|›|ÆÞýÈ?’r•£2Sá£Ó?q9“·6›—Ð_iT¸ßÉÚJW“=<{µAÿÊ‘¤G¯ÙÔé?6*»´Ä(‹òìg¤~ð~U±¡ ®ËãAÞQ˜ÞaIÌ.07¨zLLïÝŒVJôW ‚ñ«ˆz!0ê.Î]¸U™¨uñÐ ´ {b&ý›, ^…~27‰ ¾‚Ò ¶ŽZ—Í&ÖP³'üùi2¤£™„8齘JW¿HøXb“ó þï^lgþùkçÛ=p´T2ºí3çÂ}I9©4¢‰=ÿÃW±çJ,wTuª¢NPªñÓ©Øa/|›ùƒ×Ñ µ),²i7ð]áÔNC¥þbµø÷Õ“ˆÄFOt»Å°3yõ%B×ó+TI„¸KÓà?2ëñÂDI¾ÿ½ëëytf•á?ÎòY[z : Û–Âq~ ¾þ ¨E_­_éhÖPëªM€á¶°Å‹AêMžÂ¶D\ç±ÌðW9ÞËàö©Èx/„{o8†ÀéÑðЇǤZé6YÖìgY´\GuIüH‡^üGN]·~ð„ŠÎÖh‡µ·£íbJ°«&u-xwlÉ”hð¡wÉ:Ò¿½úOñ«øJ5¼/ó§ð‰“±ç—E7¢ËWôo¿AåÔT›qŒ0@¯‰‹}@ئàOwÐ?ѵC]÷aõƒÃàÅ¿á?*½Ðɉ+UÜ%†ñ§þ@[¯Å–ËÐNÕGŸµ™Ìn2ñûSòb!˜K×j žÔ«öA-=È耧ˆWTß–ûÖÞøÛÉä8¸³ÄˉȻ¶³¢7øâb}&ýÛ…:w§ÃÉEããö“ *°>>Äú6bUœ¨"t-âú²t¤ÝÀJ…™Jpolzëµ u§(ñÈkè±èqr ‹»Ÿ,Ë[C1NcKãÃÖF±>`?ËP?8“ );u5d ùGò­n+VPMìßb2ÇÂd Q_ÇÀ{Ì%ˆ'£”Õ­Ôö¢_UÙ’>+5Xo:~k ï¿™ú m¤Ûz[ƒçG]À×#³ 'š± üezàBԟ¾%¯bõ#¢égn¢FdÚ¸½ u+Ф5–ˆŽÎ›ñÕ±HÙ'/ËÞoŒ/êʹfÁ ¿ÊI5Ê@33sÅ+R§ÑŽùµ‡Q/4ý9ÛÁøê÷ìÊh<;#Å<çz“•mêkØ¿òÙ‡ÊKÐq`%â¡¿ògÓ\Îv=¨U|ë3|ÅCüð,б¥<‘ɹòûõ4â¼hèô ”­Áüy^²ÚD†NþQÈiU‡¯iFÇÇ F w—zû.L9;“ƒÙQáÏ+“­(äEâNÿ±šúÁ6ìÌaðçéøÌb¾µ&¢Ôõ’÷éõ¢À…ôa~ívP¬ fy¼DÍJºÖ›Ä88ªPˆxRÿ+ýÛO;²Qþýã¡£ô?Î?R+»èÏ}œúóÄÌÿ¨ÉîÚ⨪ÆT÷¿ºëðûþ&¿ôÕ¤Vðqsø³"ŽvQ xKÛÿqŸù¿W§’X<$Š>Hœ?K¼X\"N^¤Æä:¦éèw߈aN™øñ`ýÑ ÔWxòöb¯¦c‰ÓåQ L2a-Š]üƒþ‰iÄ m×þÃw*O­@i„…[@Ôˆ‡ëΚ—áÆ­ŸD~CxpÔã„Û3ûÃR|#šÒ“œÍãAÔ;”x&&ùGy¼Åz´,÷‰˜4c#Ìß:üAÝ¡…WE³EMFÔþ×ÌêoüG˜àŠDâ[@†RkñÇPÝd ëí\”Ñöü(Ÿ°Œï%V2 XˆoÌçã‘Ѽ·D |äüÇ5¼ÙÌàüc‡î0^âÎa¡½ðIÌÖB«cí7X¢,ÕÚrVšñ¹Ëiò£:à‰õñv¦ùùç::¤\…Éx™ Ü©dôÛŠŠ k~Ô6GEm—IŽÝó$+8Újò™éøô¯Øà>0eÁêOÑ'E­ä­¯$vX…9¤·£~0tÿÝ©j=üG1=’/ú+O;Hhô…ñØ úâEÿÄ ;å@ÙF‘ÑTê ¿ÞßHCÿ’ÐøÕså™È€Ýމ?óÃV®Ç¦d*F:yÜ8-Ò+Ó~· øÕ îLYØŠ­Øû X¬zªPóÏëªA¢»â!g¸ï ©?ïƒ^€ùçóa“ã‘3|0›K‡*[S¯Xœìb µ¼¨?ñæz'ÅŒ5xÇËè JâŸS?¸…úéé°eLkõ)Aø/*÷<æ.®¨-øØj`j;r£bªéÜ5Ïó»?Kã“ÞÈ8R/ Éc:Ve13ÕôÆ>ïE¼ËlkN—eSüÇ:T ÃÀUð«äd ÃCpÓé_r_ÏÇÛ§?7‹$Tiö— ñ=àßÐQ±|èækZQÌÇòµyŒéTiÍ5<-`iJã?r‰#¢‹ÓL¢ò(Oe.öG.cªÐe%Ë“ºõa WGÁך¢eH͹Œwëkf²jП7­ÌFþÛ¨n½qާùû oS†À€*`5xZ£ëŸecë”Y‡N“èP2477Y‡¬@³µU…ùY/àÏ#€n ¡ÿÕ|Ñ*TAº‘ÍÈ(~_ðøuý]{ÿ‰£Á?Öï&U(õ™ÿQTË­mV*aé|¥Ô„j-u¤úŒìgS!Â>Ù—Ž§ÔŸWB#’Ôºv™I"•'tªm¢ÍÒö¨CLM {÷ïf_Ù‡‡a’7ýzÑ- €2LMLŒ  1‰GׂÜÿä'ÿ²ùóÆâ-kÁ'Ñç0ÊQKQQ\†»ˆ ‡…Nÿ«×ÚŠŸ¬òÛuéß¾J”ÓŸ¶/åè>I·Ç?)hK¼ù˜Lù¹HÃQÏÃõÑ•éÕ^Á¼t´+‹àÏÓè繎Kˆ½Š²kÁ‹ø`«wðNét¡…×…Ò_ƒë‚';Ãþ¾¦_/Y8w-þ#!¾à=Î'Cå9ûnºþOó¸Jeð«¨Æ X™øx˯t‘©‹Wf–î úXât“üã=¹ÓUršÝx¦s`Ž…Ãôì«PÁŒÂkD‡O©‰7¿†ÿ(¢(Ábº‘Uîa~Ô2‡ÊDiñ3“©|+’€½Œp>¹®û°Ÿùçg°øQQlö š3åüæ|½39š½°êŸÁR.à?΢.J Þ¶…üs.ÿÝÖiß~À¯ÆÑ¿}*v65v ”ÊxÍU;"c÷³Íÿhƒ6§„¼e4‚^Á{dÀÇ\†+ǹˆžíùk!?^+D;øøÙÔt¼Ç$¢n¼ŒŒÿðg¢xBsªŽö!óŸ’Éu .uù­c|.D1ÚP×BñçÝUAl¶ ER}tÀ-Œwz¬ýY {¿KϺž³\¾§^¾>¯æøá£†‡ÜKŠ­l~¥ s; ¢5wï ëUÄ ¾Õ¯Áì&£Y̼Þ4XçRæ;&û)f4YñÍx™üÞ|áTdÅÉ!ô»Š²_ñgÿ6"¨jÆ å•:SÅ ƒÿo’é(åOs† ‹ùpuùÉ&º°Låîh²÷ÿ¬Þ5Ä4×%0ÌÜÄ-×_EFîHóKRïX„úø“ôo÷„W‰nÌÁ2¬%ºpr1þþ|»#¶âRGÞw4úÇõçðçÕÃjn­æÜ¿d5ó£ò0Ávßþ&þÌqO;MuÙ_`ßDF훚‰Ô÷¨³)­-мUó‡Ž!Ÿ¶_ñŒñú9ÑkWüÊÔs+ÓÕL0Z1ZÄ×#i®:ÊÿÞõkÊMòÈÄÈ÷Qè¬Á®Ö0è±éÑyþã¹Cê &ƒ^}Ð|]öÓW­ÑÌöüÁéX¹Ýà÷ì£ônˆE¬ϸÿÝP²ŠcnÏlXKÆTæ`µ¶±cƒ¤oÊHÂBXÂåXŠËXŒ˜†}ö9@sÞ´°«êbljrësú(üGOøç?‰ºü‰ƒ[€4/Õ£Àx_ÃNš†/gð“+~6õ$‰’W­€Úy6Z*ø{ý‰hÆõz¦/…õ(CýyM,ó ü‡Í‚œæN`ùw‰*Z„0Î{±²ÿñäl2QÀy*Ñ+ácóò˜Æý ókcG[[O„¹^‰oÏ s™„s†ÿX ¾“ì*1c"ùG<2«:ä¹°íý@FZ_Az‚ÛùÉÀr¶pop·^¡»žºþ|õçÉ?ò`åƒÀÐ>°7üYá…Ñ ¿aûæŸ?Àx2åjùB%Ô§sŒÄh§ Ó}#tÿö›ŠJ$Є^9ëáP„N‰‹™_[Œ©QƒÍÖ +¶õ>õyå5z×ç5Kr"SÉá}ð:üGÜ¥þ|5ýKÞ8¯t€ÃóçIèU[=‚ÿȦy+ÕÙ­›%ÔljUužúuÒù.¿ò"Ðq_»&šRwŽØ>/ó?¢ª“QüuµuôOŒ©J·ç!¼5RСõµX_žMñUíˆ.HK&&ãO,Mû¥¯+”Òâ=8ÓmlÞ\òœFq:{TG‰ nàS2ãõˆÔÔºöðϯƒÖ©XÕAN6¢Ç_Eº ^” à3û)1]&2°,øÑ¹¿Pÿ[™†Õ²õ»±‰™mÎ8#¿Ò0½6ëmOmEž`OÞ\… ¡U 眯«S@ÖzS~~ï!1µísó³.€°yä 2±«ÔáÆ„Ã˜Íl¦n?•Z)¤æƒÝ ’_£ƒ‡Õgåç(¯vsÔc¨rŽÁ+û4ŠÜóh°öâ ë‡Ùÿj­²PkýKkÌàŽÚøU>îG9r—Èðç÷µ-Z,ºg "Š n±%Wn”à ÈsÆ8Ÿ\×]Yâ¨@ÿ’©XåÅØ¡Ì¨¶¢‚³çwMe…‘0è_™zr–¼ë,ÏjVËc»ÂݺOuÌVð«Ð ±è¯F‘Á‡«}Á ¯áyNÜa>G.ìt#°ÜXçú°!«àb“-Þm*'Q¡<´ëØìWו ‘›H¼-®4¥?ç}†Î‰a¨OÉ\ècç3Ï;ªühÔ@¿;Ÿ¬«=ŒÆ1"òydcµu5”ÿh¬êxìº:èw;p¾P6Í¿*JôÉf2ë*ú¤Á¨»ÆQkpŸÜ¢4h“E¯®x‡<5¹áQž|ô">¿&ùÛ]ýýKÖƒU- _Kø,0Ë9¬(Î&ÀM¦ r ×iÆ7`î‹S?ØÃyÂÏ3ð‚Ÿß×;?õâžf¢Î¯/óÏû¡]ëlæ£Â/+ý"Û™ƒ¨‘h s½˜«7ü*šl‡ö7ú•éÎõ¦+GUE=?*¶UæšÕÉÜh]²â[4 È?ž“•4§®$š1_´˜úwÄoÅþ•üc›#ŸâÂm^:+YÝö…ó&„û"‘r\i£^S›ié´}J1V9í¨†jªº:ý•©üÿäx¦]&ÿèóEdÖ^ª_•Y识‰Ú‹¼gsª/ä/«¤Êºo@¯¶2…0¾ÈÑ3gʦý\“ÁÆÿØ,ª8ýÇ$&_&EÅYÿ›‰þ%Ÿ±øÙ¬¤è¸êÐq÷¢| –Ø‘ž*s˜µÕñTºv½3ÓËž bºQÕz ðÇ‘Nÿ±—þWƒQ¼Øû8=þC3ëX›ÌfTºœ¢æ^Ð5quÑÊ`Ý¿+&ÏÒ»%!•¢ýÍì(CLžk?°ùìF1ÛyÆÿ»>ôßuu ¿Jê¶/~ýHÒP?ØQ½§Çì î_rþ#ƒZVMÿÝ{ŽS¿¾¿ŸZÁ‡X—¶d‰7¨@>bµL¹…¥mJ¿Ú*ó ë8+ ýÕQV¼À}Ÿ)Î O塚åŽ!JR]Aóƒ†&ìTtµ¹ø†åø›8lK*£:ºÆb9Ï1Ž8œðH[ÜÒÖ†½„ÛwkR>¥€[±|Iåéûëð… §^à<;õ¸}N}¢ð÷œ3+ð“E X™tîIÍç Q¤Â‡ ª‹m <_1¡M ­ŸÂÕï~UW£ÚøÕQü[b$Þ±qô9ìX]˜€yïF¬FBç]äKž¢‰–ÚÖ>åìÔ—æ‘ Ê›_ûPü ïÓÕÔNÕôÖ(Žc‘yø“øÛçhéà.Jh¡»ÛÚ«mQöjÐK%2¦ç_!ò-ÊÓW†¸õuv“à?¢›÷UGö±þ#9W"9\@3ç“k¯óŸG}혘Æy,†qÎÎqÌ'«ŠýŸ%Œgûˆ–w7lÆæ½$ÝÚÀñy:ÞÑÒÿ*tÿö…ê"Ñ;[”Jý/F+Ø¡áœW!PúþÔ  ÿ8‡öö¦Ñ’úóe°É1°–/È-¢Ã}—C½:ÿÐÑzdd_ÇŸÅC¥{’ü#ä'&>â5j)@ßýÐïbÿsÑQË®?òÇ'µÆ«:BõOìBþQMßEæXŽœÈööüAÛT˜ YQ‹Þ…ïoNýyºì§:þÍ)ÒçZW·½¸MQI¼þ j«GÁ¢¿Z%ǂ͒q­Uø·Hfrk޼gŒ—Ýr—ÑÁ¤5»Èw ~5Pôú~+_Û”ãÄ¥Œwøo"ŠàWuq©ŸÛ†MÍ †SŽº£ÙÅTg~²Ï< ¼.5üG<ò–þb¢s½åJ€jâó¯°‡ß$+‚Ì æõÆüƒNW‚É¿‘Q›-¿ŠHo©@2¹ø¸­ì…žDIeá*Š o‘ßé?–+‡ð¹Øu^dâ E^: ³²Q‡Ø†³|Åd‘­ÔüyšýÉf6Àö/Gu¬[)d?´#©æ4ôlä¯Ý»ÐO™ ®›è«xs:=™Z/³!Ý,ŸÐY ªÕÙ\JýGëyWuyþ<«4&‘“Î1ܤ6:‹‘6DÅ‹óÔÿë/®8b*.$è•ã%¼ˆôg‡›úîjýKriûƒõ»«åÁ¯êâ?¾P?ø+³0\kGV®j7Ds:gdá©O¢]B<•ž¼]éß>“ùµ©T·ýëú˰_êÌžˆ¦àþ•Á¯®‹²Ê 5-O‚C±}Ó›bȰW T‚”Fâ9Öã,ñå ¢ÐŒ<ñE ò6|¯!•©=¨ NÄü¨_áÏkh‹´¹dOÉ>vè«AoˆU#ó <Å$ÆæGw Üh¦Xî9§QÆ“_mt*çù\‡ïIN×Ãt»Z–DßBfsV/Nt¿žÊ+\þãùÇgøœqxK{þÇ@†!x"»¯kmìè*üG‘u2óSø™Ì5½ö…c§•WK“ŒÅÃFÇ£½ã([s­žësñ¥ô.D°É8ºwx»’ù,Ï»³¾Jh.…‡kéMÊ:m,G• qIüÇ…Bø·(Â<õÕÚrMÊ•XQ»ûZüÇ ðº[" ­nÎ'×µš¿£ ýÆÁm¡¶-*Ïùð)ô¼Ÿ€e„ ë,Î]8dt—:β«È{úi_é¯àþ±H&ú”Åã¼Ä‡=EÁv”þ»ᣠ‘ÔGÛY4§ ú][w•†á1>9Šœn”†ÿpgŽ7ŠÁ>hÀ=\‘ÒÆwÎ0IÊ“ðù¨\DåB|øîš26]§Ê5ÅÃú%‚nGœ“Pä¶wÚRÿQ‘ýv^·Œœo”V³%**¹‹“ù CI04·Éã<Ñ Çáݶ‚ÖÕŸiõÜÖ[Íü¨ìî‚ÑÌé<þc%õç;éÍZ‚ÅK?­ò1Ž!^芧³æ¼k =«RDsç|ïØ©œÀzW5ž X»Ãî‹J¡U³°Ä ™|‘… ò0ÝÝÌIò8½FƲâ=ü‡/ù[G#)W»§Øî\oý¿é…ñDÛá?tö*}e˜éZ¬“þ#2 ±Dúñ©4­ä†ùÌÍìÔ‘ÔtV5öèE™ÎÄ­ÿ÷±Žþ‰Y±KEàŸ'3Ë:VV¨ŽB`ýÍÔ‚Œ4¿ ÔnÿQ“Ê”²"üGt²Aùû}€sÿDfÜk—’ç5›YyVu¨:'÷°Ò_ÌòµâZÙ˜wUXá¤%i>ý®7*xH@Ú¥»=ÿÜ…ûßt4ýÇý¯âR—ÝN}¬–Ó k;Ov—·£:ýKj©sÐN=þMýîmÇm?v3îÒ=‘ý•PG€_@¿»ÿOâ¶¿ßÛŸ}ÍÁ5©ïFµ¶u©x‹ÿØ­&à‰|§} ªýƒP´H¿´âæG5LÈ*‡¼BvýnCq ´íxp ÑŽü9 øÕ¯Tô´Ô†ÂŸ×@-8¿%€ßž[û‘\& 5%Pàæ ˜!Ü9аÎ5ª2K¼FX<%uedÃÉ©¯ O³[v‘cÎ~m+oVaÅÕ_ð¶B¶¹õ¬éua×Z4!´‘ëê .‹à?ìJùBÄçÇÉPjÒWïgú“*ÅÕ*ä?ó¨¥ ¢öýn#Îõ ý/’_õÆ C_ñI—±mûÉA6Á”Õ\ 뜧PÜ›Ü(9ùGе“Ä¥ð±éÒX_ÎT®¯6vÃç|֚ƈ ~•¨±«óÉu­¶ÇQŒý6•¨w ö/§„º¹>|{ê©qXã ´¤¾œõI#‘ ÿ±\Ó‹{{£yülVÀ%Ò¼@ÖDÒ9›² ,#ñkÑœbþÇú'2‰º¤xûË`:RÎ5ŠÃtuµ_‚_¥b?PyB¥¸g`ÆŽcóãÃhŸ‹IcëoÆ“©/‰!— ¶­N•ƒ/ùÇ6T|Môêj·[¨ÑXÍïWÿÑõCQÙ—ùµméé»!Ø¢þM útùŒþUÕ9ÎÆð‡™¨~Eð>ž%”ÂxhÏ*WX¯Wü­þüj'zàÃF;úï®y¡2ÂÚ‹b`±ÿ6®ò2PÁ+0Þ™Bæ2æˆNΛƒþ‰ô”¬÷šúÛ\¹ÔF^jæ¡2«§2–Á ÿq ýU?zwâë.êÏDZZiOo¹Šºi‘s½ÙÊõk<à|ƒŒ«â#GWùá–Õ–»P„Ê˧pß+™¯H÷–3²ŒyB7©„\Næ¹Y/ÄN­êô«”ÕZüGn2Ê dN7uiæµ²€úÕ$ÿØ#çQ¸3SáC¶t‚ZŽªÌ°­€& 6þã«(B”4ѹ (ýÑ_¥‚elŒ²=>ú«é°OUÀOÓ À›uf30Ž•ŽÅRòU4Iñ.CÌìüobU ‚Œ9Gˆ‰‹ÎSÿ¯¿8ÄüÁ¹·Òì7çú¹0•r^馞RK€_í îß~ÄÑZÍ¢¶Q碶}ö›þC(oè‡Ú efnø¡ÚÚ{<Æ𫞢5õWTã7û_¥–Ñ]k=¸TúfŠQX¹¬f$ÿ¤%†ÿPôwjèÒun!_=V,µ½°;4yãÝ–Q1•‹œT×{‹“ÄÒ÷ˆ}Ó£¿$2ŠÛš ƒ ¹‚ûë¦Z_m þã‹]OðŽØ{,yñ¬èòk0à}Ó£ß]åfÜ×ùÏ¿²)ƒÈ?6‚¦&ÇîÍ„ÿˆ‡ÕüOÿ«R cûˆå¶Ãì&vJª¿Ws…³â[ê£ þÃKÿ˜ü£ qR%âÚ%<ßÑ©’øŠ 剞ÿqßjO_ÊŸuH­ÔTëaß'áÕ²“Ñ(ð)ÍÉYÞ“yœM™B›Èð…÷‘ XûxÚ7q=.ˆâaÖÎU|´îTž$ªGxÏVž£‹„­n¡o£ÿ•Nv°™Eø»Iœàü£\˜õƒ§]ÑkŒÇf¬YÉž³™8c–žþ¼ˆÌ žüjXã7°ñ`@ö“ÓØlÒ]ÞyýCï…êPøêz"ì0QOaM¿‡È+·û$ðÒv7E»ÃozŽôþC€_ÕÇŒu_>Ñÿ*Ýa˜þ‰É¤&WË^&ÿH$O1ÿ¼´™-˜?OAþQŠS˱'MA›ÎÑw>Þ¿ŒžN]ï¶b'5)h˜?ûµÌsØìdKdø“#LbMn½¡þc LKOôW×ñì5@ï"Á§¯0΃ì¡*äwS?XƒÈä!üù@üÇßtÞ#‡Ñ/k”Lh­fb`Tð¡=ôcœN÷åTÎažå½?ÀŸç3F‹FÎíS9¤AµÁwT%—éM„VýÕ"jójÁ*Ï¥O¡­ºav&C: 2úÁçøcL(é†/¾J5¯ ;Þ \P=˜§u ÷ñI¤%Ë+ÂÃäVOð«b N1¬…`NàW—©ÿX@¬ìæ|=¸åzüð&æGí Ñw‘K^Ôy@ âáùõçÒ“þ»+è§’„‰¸;È8ö‚_3#°þ ªUš£A‹/mýn£þƒL–«ßOøùÇdª{FøŤJ)¶ÙŒŽ“•ä y[N¡ûûúïž°>šù,:Õ£¿ZDʸt‘LÁó(¶ƒ_}æ©JÂc~_ù¿ÿõ°#£âê;ûÒQS‰å¶Ï~ýr*W”æêuµ”–LóWгÊ^GmÕSí¢ö†ív(7~})~3ŽòR»OtÊT:5µk Vç”wèÜhs˜†žLý=ž¦’ø:䣲_\%5:ÞÉžb•0ô¸šõKg~Q‰ 6‰“w ,c½ FIòVb3Lß]¾}üT‘XÜÔ~¥þ¼–Ö‡þíˆá—açÖ]Á%¦wƒi #bù@´þŠú¬L¼t·a]ÐàWy©ÙŽD]Du˜ã” ªoÈã–’?”âù>†ä.Ï¿ñxýµš=œsŽ¤ÍÆ¾÷³:EvñZt§Cá lÎNâÇÖXÒYüt5V¨ 6?ýKjà?~¦ßM¥´VëðÄÃs¥c•ÏâèŒWb-W³¾>­K 0¶í|'uÂŽz÷ª€ö0ŒSµŸâ.`|1Y¯¸É>b û™~ekŠôSÚqí-õ×Á]–±¢—>ð.×¥¢îê<äZö¤ãø<c5ÇŒ ‘³Á¯f`çæñÿ@l÷n,žÝ *!Õ!öäÉ¥Ÿ>^‹õƒp†:SôEQ þfà1„KÄúO@¬Š¡ªJ¥Dó•dq¹ ß‘o€MUP,µbþÇÔP÷%†úEäC——åRX޳\Çcðç‰È l. ?Ö5À´À‡ É,ä…`,’É}ä(óŒÎøÕì¡ò~ªJº‘ܱ=½š’o%ÁŒ“àOvÀ Ûók_›ʇøŽô/KFs&g?ÕåÈôD¨ ‰¾¼çEîƒÍŸ¿ÅNo†©#Ñ?ÑDÝ”ßL„’h|Žÿø"×Q=4Ÿtô²‘ÕתýK„²MyzTƒÜ»»µ/\OnˆÅ4©¤˜F•œô€*IEêÏoR—ÞÏ´u\ƒ¸")d3våIøÇ¥Î›»J¹¢~f‡>$£½b$×s€vÁ2kÔü†éèMçÝÅæ!ª_É¿ñÌ—1Ìíx°?áùËp¯‹`!ê:ó•켔촊ìÔÆ´4{eM«úâÊðç'åŽl³ÇÀT¦ÛÊ=²†(Ôö…«‹D¯Š·¢{ÒU…´K™¦ åy"Úó¼æÐ#™U¸b•©ÿ8Nm‹°¶Àx[oéªØÜì O¡1Ž€"¸‰™Ê˜ ì£__¸BCxLç©ÿ×_g~Ô]ç»ÿQS‹Eýy>ö¿¯£];Ñ¿ä%3ª8ßåW^$Q>£¿*GÎÃÔòÌÿHªW^i½EGø‚çèwS…zÂþïU+‚8õ¢­–±ë;…/õçì*QL­y|R{õ/ñÿ~zS‰®V »…ÿ(Œ¾ÿuǬÅîŸ%ŽNˆŽb¸H&®ýRþQ_›ªÍBWÌ â™ÃºDÛ«ø7q[=ú« (ÐR’ü)„{ÎEzg¡þRÉg S_”ÕΪ^æ‚Û$–;‚WÚgmÏtèÔð¦Ý‘¼Æ/ö"cC´3€ûÑW/%…Šo¬AtTVò%œ{MæüLi—ŒþþUô¸dÝ_E"¢­ ºæ7ÓÿÉ@–UYÿ‹ˆ¨ÄŽ*]ŽÀyoçg ð„Y?¸†) ©‰ˆ—¬Ä1\ÀsçÄR¾àh<õ ÚNò¹`$eÁ-×peÇRýq”.ÙåôÎÈÏuÃO8škûÄ0®Îhú_h@×íO òm Æ=µ;ß»‰^¹ñŒ-ä3LŽ"™«÷¤Iè+kÔ¾øÜüý!äÿ#xð]x•õì¬DIEy^JÀŸ·wúõÁþ#%èä6â¼ùBÁd¦—ÖBf~˜æ}¹_äã3ļŠR¢ýàKˬV\Yžh0¦Q ΢1±–«~Ð_™BýyBòú¦<¯iõèf+êÏ« ‘˜Y˜8ßZGýy«}šãHàx]̤è3?ˆÝ Ê&=§£ü+üÇQò[Î+ýÊÑþ÷ßÍBÖÙýnU-+ý¯ê°»¶9ª¨9™þÑI}AŽsØù.¿ôB „Ïl„åʈÕJžˆ ÚÛô/iÿ¸ª&Q£¹íßðÖLŽê»ùGâÔòôä»)ŠƒŠ¾Ã~]Öò‹qÔ|Q¿…·Hðϯ)Ï”Râ<öx ‘þl,q£ÇØ\!‚¸faןϤ‰;~aÅNô£Ÿ~÷"=ª–óéËéL¦{ÿÑŠ(ó•‰]’ Íë q ÜsN¤Øó×<¦,ÈJ°¢{ÔŸO!–¯Àó¸ýî~c-ñxTý®š6œ©Cñ¨¾óâ¿› <…°„UAÖí®{iˆÍ>ƒ ]fºÂQЦºô¿*¤üLiQ) ˜@F•ÛÕsC0/•èþÉ®ê_†ÿ°ùƒ§¾Iþc/ý¯öRùIŸ†JM6µŠ,rJýÙFK* ;½–ÂÚ]AÅZ¿y>~#Ø›­ëj¦Eúaï,Vlj¹Mú½ßƒ= äú€f=0ºË¢Ò—îM+¨ý;Lþ‘ý®¹”£3JW0¬®FüGŸP÷å‘âÁn«Mì¼I‘Gñ{QµÆ“gà‚ó÷0Ÿ›_Éu Kz|ÀД§Ö}lÅD£A0ÿ±ÍmŪÄßzÃÞE“lϯMJÿ’90¹˜01þíÏ™\Ô¾¢‡l/¯²ZËopè³á¡™â"†¸­·Q´ÂÏž§Ê´ˆß3ý.<Ç•>ô“‚uÎ…2Ö´I›ÿy#7pGà?ü¨&9Kæ“ýnkç³IñQ®éI8ªç aW° ¨Š¿K%^rxã?É7RS——“¸¾ þc½`º™çÈ¢Æp&¦lê¯÷ 1ÿ|µr]@Ny“ˆïµÓÿÂx†J963ý¯FQÿ±‚™³ÖyV>ÃúûÁ¬G;ß—]^üª¸8¢ÿî\ô»ñÉu •ä ~°V[Ð\U¢Kýôk>æq»áÔ‚œ½Ð-§À¿¤ÀDñ­OÜD'gŠï'¼ƒþ%]ELtfÕÀ.2èåÌêV?³"ùÇ^z¡¤€Ûeí±ž2Õ¶ç{þWï¸ ̈ä6~QD62…þýîGeÅe7ßÒ?1‘Û¾ø~ŽáMAÿÄ®èw[ky´«JcVÙäHõàŸÔ>WžþæüÚôOD¹ Z’ü¥ÏÓ¨~ÊGm¢­íÕ>Ò%Áo§"ncUŽ Oì`ýˆx(ò+çÕø ŸˆÈšáëwã*±¢ûГ}!'°{ '!Ú/ͱ®‹¹ƒf(!–¾ voöôA¸øÕ)u8ìF?ÝÆ¯z’ Žãh†è͈‚½pª+ÐJùÂ|$'·Y‰.¸²¨üÓùçºRLÍMT·&81ÙŠž« õG½Ù\u}%1öâ¹n÷¿ò%CAγÆËµC]—o¥2Zëƒgˆ \«wÿQ’W*õ#˜å‹~w!v¿ºÑ¯ìÅjqàRW§¬óÉu­¶Ïêüê> $«×Xˆ}O7§eغ‘hÍ^aËü˜µtgÛÈi6û·õzuøó·®¥‚_-à %î/St FY'Vôf5IOÚÊ̯®G/óœèwÈ*ÒžQ”Œÿ|©7¸úS„™'CíîwŠIvÕFÏ‚& ¶üŸORüê€qþ#jŸ¦ ²UŒ¦|JU˜i/æ,B¿ÛHO­nw[±· }À^®s)|BŽ/ ‘ý*Y”N·ëA_âZGÑ`Õ‚¯˜ÀÄÝ‹ pyÁœ¾¡^^DíIS=’p×ï.m¹F×ðç%ðYAúuc ý|GËQœa4ziÅD³–É—Æ*¿×S™7\ð Çww.d¬eWð«c“òˆÌ­:9èû-+øÕ#:fnŽrÞȇž_w˜{>ýnW³yŒ,ï/¼{ ñƒBÄnÛé¿ëaØÓÙ·’¼½©Ò\-à#ë0?Ä"ÛŠ†ö'çz%Ê7æ~:Üæ5wèŒþt/«€­Ï%ÎüÃKñÖ²ƒ=à™ÒŒ‰b¤ÍìbA¬þˆ9W«aÐ3PExoR),c¥¢ÿndj[=é»P–osîF¿ÛS$áùj€R?–>Ïü üŠ:NЯšt’éobþà!³°5•úû-(¿o1r™ˆÎ<¹˜ä0ô»‰ÅSíWò&äËéëx›þí«ØáÆåàŒýXJ²‹xô9ê¾°ªáëw#(ÝÈØ6S)‰æçÐW% V¿$~iõçÏÈrP/’ù`¿#èAjxý¨=QÄv³ÚÁYÝDää2-` ÖÍŒ´ðç¯ÉÀÎ’<"£¨ çg.ðÙŸ\:E)«¦†¿G‹ßþ&à?úÃX¬4>íÏ‚1Šw{‡÷Ç;ﱊž œÿ±–.DÁD4‚}å>ÔÄ/ÖáhãÀ˜Ð.ÒÿjÑ|3c:ϹmëcÒ?Xkë|r]º‹þí{ o}"jÚ\àW›ØC±b3Yc",Ê ò·-`Fp#IŒ­`?ë9¾µ¬]O‹­:BíÆEôßDœžþü&¹Å;0ÃÓx“·è‘ ѿČ=-¶¿™Ì&·]%ÇNm%» û\šãìj½Ê7‘ \.5ŒF$¬úvüÇvr˜ÔöùÂ%§¢â–ùü¥.øÕDò™Šô/ñ…§š6ýî·Û“´ƒ¹:‰*ÙVWEùGÇŒÊø¥æ3; ®fu–oàWÇQ!$E¹kÁŸ/Æ¢·d"Ÿ{ýàjÑ/y 4·Qû#ýŒ±û7D2jIÉü¨DæÑ­Y¬7 üÊ—Œs"ñÇiüÑ}ú'Ò;R4sÞŒOŽ•Ê%ί9_ #€è% øÕ3,fL3+9ÍTøóÔ œš ½™ÿÑÅôcBKÖ‹)Û“œ$ÖrõÛ[Fý`lø›[ðñMȵæq––Õ€úÁH°=Ö,ó‘þcyIÞoŠb¦7/“ûw {XY㌞Bœsœþc®2_Ë ‡—‰§?‘Ñ_ÇüaUB)Õ†ÿ5ÇJªÙ‹˜cÍóXúd7ydq«®,Ú•-Š‚ªl_ˆùQÞÊ(m$ú«þøehs"³9ý€=Qéù ³ÈC—Ç9ÖvY¬®Ì?? ÃòH–¡‚(.OÒ'Pó#T$6Rþ+üÇAú'¾tÞ¹»ŽRJ·}æüQ¸/+×™~U­Eÿ’£JV9ÿ‘ÿ1•*ô玟Y•°þ丨]­Q8e'J-£YZ õšbÑ)×î¿{Oð›ókS â°£(Y¯Wî‚GM ÿ‘…("Hû…Yà¡m@ØGÆ,,¥6š½SØäÒ ßרKnDœ_WœÃFÝ@ƒ'ᑇˆ¸â“æönßmM?ÈðAXÔu`bŸ‰¤û£û¼cçÏè*‚P<‰A/†‰µáÞ›4ÊHÎÉG$Äû1f`3£ƒ5'N_L×Ã@p¡ÈDø•ñ{ðyoÔŒá¬øDKŒÕIŸÄ³×›:”ñ䃣Àñ·á?ú“®Á@Åjwüðw« Úü”ÿÈ£”Vó’UMà¨âƒ'}€uj¶1£ûÄêcA›<Œ³\|øþy"YÒQ‘;LϾœúþx þ¼š?èNN©{®_Õi ©^ëú4ƒüÈ‹ ,9øelîYû0üÇiG%í”èfØ¢ ÆJžæÉz~ú´ôÇ"öG\‹Hý ­DŸµO¿;¶Ÿ+ÚN‹†~·™‡½/JÎrƒÜâ ÜØ)2˜àA•èìÑä=5ú¨–°é+Ðù¤Ãú‚«°Q˜üX¿ÐþCƒÿ(FËŒøM~Á$¦{”Ý¿Äßð£þ<üÇ]ü‡ƒ®ð á§3½G¤Úï ù‚'ž0Hñu»ÓÝUlfûµ,8X+¢”Ât«š#ÂÈÌ`’w"ë,ý|[’錿zŠwËMÎ)åP¬½ÄÉ·´&nëížœÁUTížäÃìaþ`/òRcº_~æ¼¥ŸV 9‹n]Þxå)ÔŸŸ$;{LmGYú'6u>ôVÀ2WF;ÒžÝÚÕ@>¾Tô\+'€cD3pî´³å:ÜN¢þã%ÍI*Tš3i÷Š>_¸T€Ó˜ôã0Êàv躼+âã+[¢cŠJýú.ø»þÜ4ÌBõ!X¿{^f¢þ#¾| yÜa=ƒ8"†;ýÇFe¥–†:7þ·ÑC\ÖßËzV&º_U1ãÐój,u ûà?†¢>OŸ´ê1Ñ#µ,&'ˆ5Sk¹‰ipßOøõçmEVüd4õºivµvÔ/F›\þc€9ÍZo]¿À¹ÁTÃ$èwÿ4sá?>ŠúUaOÇŠõ¯èwPìªÿ¸åhþõ»‰À¯Úп½¢VF;Üÿj%úÝœj[u:ók¡Æú'ŽÛôCmjœ Øü£¿º[ùJ§Ú‘t6ú jáFÎîï–PÄÕ8ßñë~‘Z9¦&æÉ*@¦°\HýWû·ß¡ÿnu<~ H=0Ë'àBUÁF 8á»`Wim&C$_´î濚 '›‹.L#N^‚O²;—´'c¿¯G7Ú‚_9°'÷àÏsâõv¸=³a-U™O¾L8ˆßšÂÇ)ú:fOos ‚³dÞþ M¹ô´ZÎpV|¬n'céÎ]‚1y/fò·hx‰ö|`³ƒ}%£;O]ô7lx²°š?í¿›^É©âŒÖ%·z#žpÞ½ÉÀ¼ÖÖ·‘d2l5pdã^ô¬Î³~U@sMpóxú_õ ò==||]¼x^17žäùÇú‹ûkiäjlJ²ü-¬4‡ûô<’k•ﯶ“ì¢b\Dz §v,"ÄšœqqþÝ‘O¦Žc‘oðy¬)±|~7OûâúÏŠóÔfbùGNú_Ýäï#_-!S ×è,Hõ‚Ì®©½¬ˆþªŒ<ø ÊaUN3ªÐ¦]¨û¨D!ލ‹V|wBîÒ3áÉ Ê|’„6Ê~õÚŒ(UÙX&ËAþmï9VmÆ56TwÿÑZM‰ÿ8Æñ—a»¿|60í²§Qœùç^`;Û˜ªÔ”úÄLܸHWæÇ"cÚN~ì©ûkî΋¨¾¡qg¢Þö¶~ÇØˆzhZf'ùà XÔ#”‘©1)j„E™ _bÏf|Co«ìÆ¢ó?>:&)×á J´Å4%:ÉŒþj‘ùï¸þ¼(ýKÀSÔ7—ƒuoÛó3 ®) Ø]:ü×Bášb6AÙ®Þ§;†Ç!¯‹h \}`ãÓ[õÌ0åÓ韸ô/…Óü$¿ÒËd7ÞÞTØtæl+‘oå[DW§ÿðRæh9ÈckáÒ-Ä ý±¬he§ÿUUúØô3Ñ{2¸Øsy;¯0°„•YÇçÇ3Ú³ï˲\ú«øVìL&Éà?…0+X^thßHßIôÅ­à?vÀ£,0ÿ`>ÉùJ¶£ê>6ûü“ØGWØìÓ!:~}ßÕÿý¯G±BÌÿxGÿößã\G˜‰úóÎÔ¡þcCpÿÝ½Ž²è¯þP»Òmä£ãŠëWáUfEݨMÜ-ôΚ¢µSß(¯±´ã©?¿N7¬d¡ž°ÿ{Ñrh¤»ã©{ öéˆÿ¸.2*÷Õhd D3üÇ#ñA «ËÒ«þ­ÄR;á±õ °ËïØ™µtS/'|°7@13÷ŒÙÅeíWjî‹hýñŠ­Àü§G#㸅µNeÜ×鉽ˆ`$‡÷M _7N¬÷œË(£øÍù"";»‰1›™ƒ8¿øÍ&²†gØÙ”x‘:è•Öêó?Âëß[Û ãÝ–,á0ÿ‰˜‚ÿèFÓžƒÑÏHAþ…(졞‚ ‚ãøÍꢳâBܯ^N¥–Ú¯8‰Ê÷,œígñÏ6Ô—sn®¯q‹~µƒŒä!Þãžé2Ó_J…Yÿaóç¸úŒ!pNO‰î sæ•ñïÉZ3?ØBÕäig¿ ßžŠL63¿[/ ÿqŸþíþd ïP÷‡=Èj,;Eþ0>d.8Kzp­ƒ WgÀrââ÷á?’5þM¯”xj 8ø¤½Ô&b$GSŠ¿øO„v*@/~·ŠÝm¨OP?h÷/)Bþñ§aë¥n2-Õ’S‰F¦‡bŽØô«Ê¢¸Èa$ùÁØÃ÷£sT\r˜ó õÙ¨Z¸nš2ÝóÈY 5­È?.ÂÖìD…QOÿ¢¸×vR#³ ¶à¥mÝW'pôðµ“à»3Ñ} ½iÏPUW~~¶ö6ZÛ¼ŸäˆWx*Ïk¶BÆõ±¹6‘É!êÙmýî#c þ¨ýÞ{SûàE5öWùÀÜ„Z`¼üD_•©xé– þp*°ËÆ ÑÖ¹Ø3Ç\å<û´ÏX-8ô®øÊüüÕ*jHê’»M2Ë•ÄT2 ¢d/U£¹KYäŸøêƒô/Ùï\o,ýwrJ?¨Æ[‘”°lJ«$Õ‘À«Ò“!=¦çW*¯¿Í=ôoGÿ’è —»Ñ_m×sˆE¢Ó¬E•“ÝTŽ.1U&@æ‚ÿ˜~•ˆùç“éÿòq˜ ?xîû䙬,²&‘ SȰùUŒõ ÜßЛùƒ½ˆ‡±Gâ[%2‹ÁÔàLW£-S`͇P?¸Óìlµ§_‹>îlÁüÚôäÙ_Ä:æ<Ä^$ýWê?9r).%ÓCG¬ßFýGwôWmµjÚ9¥"»kŽ£8þ£-ü¹C}É4ßù¸è8©]A-E'sìq-N(áDf¢ßõF¿'ÜÎMîï–D¨Έvdìcôõè­R++Õ¢½™Ó îAnO„ûß»þõD¹§tÑ{àÙU°‚gþ?âÎ¬Šµ{û{fžyf¶»»»;°PìÆîîcwww'¶bvba·b7Љúý†÷râ ¾×÷?G/eSÏžxfÅ}ßk-|58šâb%qÞ;vA1úŽÌñÄ-$ ùýð¯ZhCàÏ[á×Fà6ÃÜ&cOîûƒÈ+/‘p%";Jª­bY¤GOYŒµØFáôXãå(¬©{-`·Ã<Ã*çáù¯H$¶ÂÔJE²âWuOo°r}:±ÑTή …ÅŸw€'XN¶‹¬+³~6âYšSWö»þ%±•Œj 4ŒÖúÒdë*÷Ãêpö üê6i8OByþ?wë|’êŠcôß ¯Žµ®áe¥Ö‹ëüÊÎý,ֵ̎B/ŽÁúgmÝðÀÔƒ ÙL¦0Äú¶HŠÿ˜ïxrCîÅ.úï½È×ÇfÀž¯à'ǃ ¬#NOù†×<†½óƒŸ¾‹cÛE6û]÷Ô~&°FíÌÞª@¥å=ùKù˜hÿhØÙ êú1£|©SÐñ} oº\ÿ1 ³5\u·Í¨|…A^sà?ÒÓw'º²€‘ ×iô» Ð_½1?Ê·èo“Ñ7?¹\bò DÐ-ѸÅàé 9[•YÖj+º«&¾)w/-ÑîZ£-kÎ'"‹ÿxK¦8ÌkïÉ:-¨É?HÜî¢sÞ+-l‡®¢~Õ‹Z Ôçý-õÐ,î@[#-Ö¹8=4ûVr¯it Ù*a6Öù<øšJLøŽÃûj \¢ú¢8Jººø‚ö¼.FÕÈ@¦Ë6ÂËÍ23á}+ReÑÛiúïö¿²f‡½ƽ»D­íÇz‹•åê{Îó0QD|~åOÝÿH|d[ÓÛHÈüó|ÔxÓWÇsÁ}ß2Ò˜~¼k üGUb›üâ°èäðÊ­zz2Ê”x¾Ïº/Ÿr¡ZsCY,P¯¢6¾øÕÔÅ…ðëÑðŒ†Ä:iä@¢ÁêÄ!øÕ&¥—Ö þ|1Ô¡ê©Ìöx‹: ‰kÌLŸªoŽb~-ì ,;ò£ÇtV¬IQ˜¿ïèwoˆç0DIþþÜ‹©p/Wúƒ­®’!Ì>s|+Ò)©ÿèÂü Z*íDpý ósQ?8—ùQ¨ß¡¼f~mó`þÃЛÁ˜gV/(¦è'þÖFÓ¿ýÅæåD,9…L¯¹nM§ó¾¢šrVM F‘M¤+ñ'jÔüÇ Eªýˆ9NcQë€bÜÀ¾º¡±í‡b4ØK?XÜÞDÅKmk¤WÍFߥ‘ô/iŠ3•é.xï+dEV···(Žó‚¶„w&ÞY öFzoò+Ã}Dhäü åbjQr’4Ä[$ÿxþ*®¼Hå“56‘[‹¬þ‚üc ¨üž?§Å²%V¢;vÖUêÏÓ:>sÜ€(½HL\ÞÿQK+ª]R¬îjž¶úLú[Ûð‡úÝ/¶ËÔV'¢,ÚÑþWyÕuŠCÄ”ýOÕ/Jd•oaº’ˆO‡Í bçA6‰ê÷ªÿG8‰…"ŽG{öW~óÙGEà?¾ƒ[lÇ>¬ÃÒ¹ÈÆð „/õŸ‰‹Á0OY„"ÖýfÐ_î„?\#ê⇖Á<&ÂgRD°ÝίP„H=½¶Š¥‘Þ› ʬó.ôéˆæWÃ~¤„ÿ¨‡uÝÄdêk¬—§¼2±ð:¾ó2r›¶” £3ØÕyÐ1+†Î$gVî `MV­x>øe«B½µè§\ }z¡^PJª‰›g»¥Å×Xå[ñ;ïô•ò…^ZÍ‹-ᑾ°¢¾î8þc»¨áYÇüÁ¾x ;(]cüöAî¥ßêN(vÏÒ%M%úmG\¿„;µ ü*1O®Õ1s^þã*ùÇ^ü‡ÜÙ¯0üù.2†áàE“a'ÆáS>‚E&^>DuH<´žäH»8öújMÿ¥÷¦—Ú 4¬:š…«ä@t†â ]ñ-Œ2èwÓ/-j¦†ôßÝ€uÎȑއø‹Ú :¹ü’(ê;ú—4äxVð3ºq™þ%>ô/É{➉þí/Ío̪²f¢/•E¸;õí§ùùÆ\•/JXíwKõ˜éTEø™¶è¯òc±Xmˆô7P —Õ@åscް7ŒÊe’b C¦q˜ësáK­}˜½¸QÔ„?¿ËÓP^ì…~Sn¤2c•M©ÿØ âäDÿÄE̯NL½—LkU/çðo™‡UX.=;åm›r[K5›~p”9ñn/ñ¨c]áOfã. >cö1'QcׂÜÍXr8ߎ¢%µ)åaN ÙL?¬íÕbÓ‰ak㯶ƒ\Ì#ÿ°úˆ5BÇöërÞ¶ZôOŠ8—ùÎø1 ¿ ‹´ti,¹Ö3bá=ØÚƒ°)É?¼ðkɼnè 4UýnÉ%êdÑ‹H"3š-"í·øÝš?Øüj+ÑóVôW§e]ÔXV'±”Xß{ðçßð!µP_ô w_¢©N¨š•o!ÿPŒ½¼:sà ÿq”<;œÅCÓ0Þ²~\ò®"¬g7N€_QƒÏ}ɬ®³bCê?ÚsUβ+N£,KDÞ1–ؾ>ø•'½à3à?t{ã…ìa¸ÃzTó¿ºHEÝ}ðÙØ£ÕAztíIîÃ>¯Þ¬øU=Gþ±úÁlzIþ®å(§â?.‰íùPä_1§}ÙL1TÐwÁ¯zàMòÐ7á†ÿˆ&ë…U–Þ¡ø#äýÙ™ýÁpãQUûÍh[Þï± –'ª«!öÕLÿpï¯j€Uy ~ÕÅÌ rÜú¼øF´˜û_™õÿÒñê õƒÌùŸþ¤a.ß õ¥Ú˜þ»g•Ь²ßö·ZšîW³T%ÀÒe+*ËÇ£ÿÕeøúDß±ôš¿ê¤îUîhSEsê?î«iÔdtœU„ç8GÚÃ}ß+n¢z \UOÿ±]èôtŠÒŠ/”èê(ñ}阆ñÄ4éd^lakqTFQlÆì4›°EÉôÕ¦h›©KùˆÂt£¾ v†?þÃÂñãó1;øU&,î|áé–Q¦Â"ûR'—ÿ1_OÕ U@*öÃÞÞ…r×A¢a¡©VŸ²ÿöÇÔÐp¡¿Ι !~‹…n§…_eÎÿ’ó…e|òü z[æü®þ<›ÒL­ËS9V&3ÚÜØó†¬üNïÉ_["ËÑ·ð2HÞWXª›xè»ü» *E8Yx·²N›Û‘Ч¨µî=¯EÃtPÊfú)m¿&@OZªÌ#NÜ€÷‹OÿÄDÜ›øsè¯|ð Èü8¸òhr%YÍh=7ú«–ÔJ÷F Tù V;%UŽë¸‚—é®âÇÿÓ©ÿ{ÌPG‹ùäÖ”À»ðão@‹vÀÆ[ùGA”5¥¨\ËŽÿ¨ÎÿÖ”Ýäü»ÏBAY )lw›í£¢s×:rW=˜õ\/)ÙPFj=Î3}¢4líxÚ¯ä:u kîbfpƒõo ·mID#ÃáWÕDÜGO¼_>r€2HÏnŒ¡VG,ëVüÔöOh°†eg´>çQ”"ÿH„ZxµÜÕ ÔÚ…Ù9[EkYAÞ&¯-.»<Äì¡þc!ø•v_šqÓ¾Ýð—óð›@§Q—éÍ9¼"g(.çˆÆŽmxÏv[¹.Y™k^Ö»¾2/©¦0?ª‚ÑF:3ýKœÍ Ô}L£.½©Y—Œæ0^þ,3O:K]fFØ2Çzƒ”ûj4×Gˆ™®á?Š¢b ÿaçqÁ™^á1—Ó¿ÄšÞñ%Â.ô»á6_U$FÊ'vŠòÿ±^9¢eç)+H\‡#O‰‚Úþc%ó£$ŠàItß݇ÇIÿ’CL2¼Æ}Ék¯dT!Ö‰ Öý–#ð å?(“˜ÿ[ÒL×YÏÿ1ÏìF÷0_ú_½ ;dû û×àþW­és f©ókÊ¡àWQ¥ÿ ZL.æ:ÎøŸ{qÈ–-Ôìæ¶æJ¶0û"êG’‰ºˆ>ê'µ®V‚þ‰•Xe—­¢Z”Š›ÕåírÔ—â'S+™ÿÑœh¾ Qjbí ®•Ê9ütg"˓̥JðGÇÙMĆm:O¼{ Ÿ±^\é¼6Aš6Á¼ùƒˆø€ï*±ÕþB!=O±”%·,ïÕ &«7ñr+lvvGjøÕ/櫵©ð°¢‹ÐÔîÄkø¢s¢oÜGžœX<‹etõne}rüGYe ?¹GÄÅr¹ã?bÀ€¼µÁÆV€[tâóü—§ÏÊFr¦7‘úØÚ<ÝR¬ &èˤéÔã̇9Do–°Ý˰ö‡±ö…PNy)ÖuÛ¿=›ÒTmŠÝLîŸE×ô»ÍðJÉ?|É º5+`×oˆÓ®³ ~ún8«¶ÚË0Wì?ŸlQöhCP¥f:{uXˆ]<}® Süm¢oÔvjÒ !ÜðLÝË1,ïºí†ö/ñµ5…?w[)ûsiäZ®ãÔ¨ó°#ˆmŸ¢:C´ì‹ÇJG·“{½’Α7ôè¯Ìp»q6ýw-¬¯¨Ô2µgÜKoº)¾…1/Çüú ïé©Ë«j7Ö‚Ž%ÁÓÝ¢&â;qyS2Ϳí'É?,ýnY˜§ÏØñK\Ç ÔÁef~Ô)æ×æÆÞ3ŸÉ@YÃHaÌ£2§ž”ô×:A\/rFU [;Ô’ü£upæØF¥%v-ó?Ö­%ø¢¸vÝngþàò‡:ô¿ê(˳VJ2‘õò×ðU8ÿqLßÿ²Þo¯p€è¹ÜN'CR —•+Ñ¿äüGv¦=í”AížcõßÊdFZ9"”~÷½íøU*éfX V_r¤œàB ¨rÉFlª™õA.xéöLyõE¿ÛÙ܃gV˜Æèx“{¼Á±g¶Ð¿D‘…É›|túæ—¹AÖÖ lªO{lì³Í¾ÀÜO?¬ÔûÝäì×S£²-÷òZD…w¨þ‰û”SZr˪ıÀ>èåÍŠöÌ¡ªËó™ÎŒ;éÙžTíì~ó¤™Ë¨Dÿ«bDšvY™çÑšÄ3ÂÅÇŒ B@ܘŒøF˜žöIäËÑ–5᪭§þc¦ý¶™ÓÞ þã"¨˜ ~5ÒL>ýR¬¡~Ð&³Â„ vŽSÿ?qÿ‘ʱW­ùƒIŸýÙ›'P>*=Õð.ø7VÙok¢–Q›©ÓÕʳ?ìŸY°ªUèÔÈüÚ{ªÉüóû\çŽD–t^ÿÃþWõ`,úZµÌ ë­Á¼E[åµ'2¥èÿH2Gë¿ùUÅP‰¯ÄãgáÏ—°^v*†DKzšü ŽÒmjªKÓQÿ•;ÚO›¨­â¸^ÂÆm!›‰ÆSØ—}y.¥'*ÆÇ Pho\aU#×_U&ÿ(ˆf):ÑS0˜„XÍoDùãÈ< ÀR3ÍP>‚K¹AìÍ@ÕHîv2m»nƒíªEÁôAÌ‚5…U<‰]jL>•ؼQ9¬ª?Ñ¿ü;þ#ókë‘ÍLÆ#¦´êÅ}ðÄ¡¬0Ÿxº¦Þ…\Á”çÐEKù€Üã*>Á,®}„“…7‘t9K~U;~À²®ì—xbj½©´£cm/ËÊIĉÀ¯2S¹•”{S×ñä†ÜçÓ¶&èÅGÀ¼LGYZ†wÇ.ô¥âHênz¸ÞÚz:s Û fØÎédm°/µ_4óÛ‡™Õñ{—Ðïvf.nJÙ/ðççER¢·8beÈvþÇ^]bþù7Ç»}³5Pþ¬¯­ãWéÃx^é­ÞUëÑÿêPpÿĶŽjyµ:‡þ»_þÐ$T£Ç¯ –Ÿœ%§vžLfžòMë-º3Ùú ÝCP·cøý«r N=±«Ȱ+ékèGP ü*ˆãcÍ u÷7!´¨ùoÌl&>òäb¥X¸t²BqŽzåD­Îèlj˜ÔŸG%ÿè¤ÍB¿Û$Vn7Öô:Gšÿ¡ ïNµ/@ÝEЗÑbk˜g6¢³-¡ 'Nµæ™hÒdÇ™X_ÅÏM«-†/ò¥šã;ÿ(HY4ý¡Y¶ùE] BÕ+ïø [•5aQçòde'·‡ò¥Z1–ÜOîå.**¿Ó!¤£þ£¢žBŽãž¦Ö‡±ZnG,þ²ŽºT¸R~Œ†þI¨£÷‘5xЋ¥~„ýÛW0ŧ~06ly,ÃyÑ>]Pd+ú^Í7*˜ká¾ß“mê‚Þ«&üB7ôY#ñÖƒ~Ñ_©êWjWªëNïù*7à l!WHMþq“¯Î`N÷¨ÿø&ÝÉ?f’!Õ¢}jÛ±°AUu;ÝGCÎÖfë«ÆÄZy‘/”†Å®M}J4"û…F殡slZûqâóið)SÑ_ù‘ Â:?ç=ÁŸ3-Sf½Uèw‹ÐÍâ?¦£ó»,W¢2lÌ’]˜ÿ±ÿ–.!çWr‘µíH,s ú;ž…óNid‘ãE3ÇáÙö*ïÉ–ëʼ‘•”§þãˆj¦&q,½¥vsÎ~fæ~@£4ܼ„wœ!uÇ–è}BYÓµÊ Õêw‹8â üy=ò·qÆ.ôÉnæ|#]°/³ŸÎÂ|Fõ‰:÷AÔž"Òê ZXÿQI\ Õ?qókcÀFaÏ¥•kDZùžúJ¨Ö*ƒ°= ²/5³„³à?|+°ûž ýUrƒ».jõOL*×è}»ðüùh‘–¸¬ú«4ºbf·Ï!ÓØJnU/×Ëìa÷´Ÿ6kØ»Rwî‰ÿHDa3&Ñ›<ø±HFþ‘Bìu\ÁîÅA[zå¾ãí>ÛšþÏþ#;õç=ÕÛjk-¥æ<ÿü‚­¡šýî2õÙMÇ»DåEåýwk±S“ÐõÎYÃ/©‡U  ëJØdè?˜æº“þ%s°1'Å æ<ãʦŸÐTº¢¼Ôˆ¦¤þz¬/˜?ØL¼Âžna bå‘eÐÈ6›©i8Bö ¯×ÿq8JóÏjƒµå0Üþø•Dµ&ˆoW´çça‚‚6#ƒ¸'bëNÔv/ óÌþzl6[a…úqê?ìăã°ÓÉÑ9UÇ[ìÆR<„µ‰XŽ÷™Ï1ß´ŠFh›9¢¿A¦_¿ÖLÖÙDâ;д6)XräKÖ•œÍ¢š¨õÛúôJ-µ0ö} šˆ”pÓÏéÕÎä ÌùuzfÅøò ú+|h;CO°²#¢X„ùÇå¤fÍýä4@vÌšðúW_¿ Ý‡?ßUA.älW£tÈ ›{VÉñä†\A?[ú­ âlú“·„ƒÝˆG› š¿ ]èDTXñ±ðwÁŒ¼È´¬îî–O²îþ úïÊ_öÎu|0^„ú‹‹²!­3j²ÔôÕ6ê3Õ´$—ŠÀF»SA¾šwL‰ÒxÈÏcr‘ 0]áó›jã¾6áΑ/˜™q}XV12€(]g†^B´H¯™ÿqŸ~…–˜™Êd>›ÈÇâM«è1ÕaöN[5º¦Ýdy °á8;'¦•Ï1ÚÓij:• Éè×÷ i øêš°Ÿ&ëå{ø€¡ì̲ú;­u˜õFS?˜‡Èä*ƒYèwýåNð—(zñaƒóQñwËaDë$ b Ž« Þm+¦0Ê3¿¶³ãf|²TÎý—‡‡¯n8EoJUË)&‰5*ƒ±63Ò¤2Š)7X¤‡Ì~´i?×·1þ>½w¨þ»C•+jþÖR„ߤû`X§êt¨Šf¯€þÊ™~#à.^¢”µò@°'º’™KˆLÚ£ÉF\”NœýùÇBô»™ØMˆœTÙZt—ÉÍÆä2Kè_$qÈÕm:~õA)u¥],{4zg3*°âsâ—¯"èúAo” cÅ_`Ä]Á¯Ò‘¸1±YêIú¤%‡¥iÉüó#f3{æ-ž¤öÞNuzóžõ‹XA·´/ÄB,p\ÁîÅ1ð«ÏŽ·{eëð?óç©”+J_ð«ÆZFò«~p·­±š”üc²ú’úßU•9Þ<Ì‹dÊ+킨@„o¢ºµÃdQO‰ôµàÏ_«FäÊÓ0ëew°¢GEQjÄSÓîuˆJ,ÿ±X»KUâMaFh¥Â,ü‰ŸòJiD6sûQ»ºýUQ0¢>âº]oüG4âð®tE¹¡-ûõ×ùJ+ô»3È´¾`­À÷ ®9 /0~î$à»+'œüê0Ïì/Kñ… ÊP¸/‘¾&ÊVg"Vy¹MaX†ËdÜQønâ¯þí9#YѪTáéÆqfõ×bÌÅ(P…-ÄÁmˆr—ó]<@nØC0eEczÕDü' ó?JáOå¨R࿉·¢ÖAeö!o›*«‚=øà?¾‚]‡šC}šú ¥•2…º;Ê+îhuÎëV²(c‘ôÔ}´³Ôî F­"YþR}w+¡~U|F[0ÿqÆÖþ¼=ì{,xºVþ1¾aêÛQèMƒP-_‚ñ=7Rî\ã¹ÏTþ»ïC,øÕ^µ‚JBLì%| sÿ+üvy”™åé¿›ÂxDw¨<åHzn4ÄÖ"¿…cn8u“̓Z×|ôGJǵº :´Ï²‡äIŒÛò>µt©‰ÁïQ?øý•“ÁÜý›ø®ÝXÕJÜïʺ0wº3Ú‘æ\•«T”ì$GàW3ÐÖV¡SÈJ*-130ÐlJ½ß$£üyiâðÌ ô »°æÞøjaþù¢0>æ<þ¼6gƒšZn!ŸjŒ”]hàW…¨z»D¶P¯â ÿчuê‚®äu£¨+:9® “²I9O¬^ôFÅPÆâ2ŠÕOT[Î5&ÛßÙ9h–¿z@ýà`s;kWä™R\øvbŽc½EÊU|ïvBg‚¤˜@ÿ2TÀ7ñ?Ç ßñÔ]ôXÆkã“'éMôíäe‹Áívë9ÄüPók7Ðÿ*-J=|Ò§ :œyè?ÿ!èÍÕÌlËÚyP‡Àë5Çççä4ªñ왲*UTɈ?z9v¡Ÿ2‘þ»)ÈÈ›S˜DWÍJ U•9Óí°ï ˜ÒÞ‰þ%¨1«~Ƽg|‡5s5ãËüü2ø/à±ETÐÇEùÿôb;ùGÞð†ùiÂ쳨¿Mzæ×¿j©%Ö<”b¬rÃÖ«ßU ~õÙv.êKñ“éÁ¯.•»©®1´£Ì?_…&«ƒh‡Þ5Hµ«vœ%Å¢7ÑšX4ü$ó`”çèw3‚t|ÖvÑ/ê=3Ú£òç¡òMi*‰º·ñMgOæ”Y`(z‰]x““ÄÀñá@zß?ŒÒüÁúô¿šE¦õ…ÌÈ“¨[â1Zâ?ÎãGê×ûw>Ùø”[ÑÑ–VFâ?6áoc¦R—’‘ü¶ž£Éˆ¿¹ câ qŠhú;õx £š¹ÊÁ[°Ý%Œx¹L²$™ãÈ,ÉRìÏ^áîËWåNk¡Þ„úô>W)ž©¨‘ÿq“ü##,ðCS7Tú—Ä3†ƒ,§"b'¤þ£µþVñ³bgf§UÃûÞ!²ø—ths{‘T“.Ô̧·àIó±Ù ~~]}Qs•`µ—¼û¹…{uO«f½E¢,@æ| Àòo¹êéÆPò!ü*?¼²¼´3þ#¡¹\q¹áþ®@OVDN ¥ß5ñuGáw  ß­ ~;ýV K܇úÁ2tõÿqˆ ΋®Œë 'TX}éõ˜<ñ’ •HÛô¡ØäYÊ)êóÊ= ¯¥ZZ„Ž/ͯÌ{ÚJÿ’æwrêSå®2ï¯ùÇê¯ÜAiK¡•JBýÇGþ±‘yÉy²J‘“Ç•-Doð+7´À³LôW¹©ûhKÍG>ú€@GAÝÐá?ªÛظÏèU¼¿ós÷íPfÃëÆ"ÿ¨ÛKÏzX×lˆ~÷ZƒäÔ¶´Ï²Ÿ1KÛ»™ oð« ž%ÍTD‰ ÌÿxÎ>3BM\ü¹òÿýÇ=¶Špì„«¶^X—r„é”@æG½Q«j µ}Áõç;lÕÕj]u‹úüêDÈFá•©ÜÔ>‹vô¾I‚Õz¬^Tß)=•kÚ(QR[¡y«ùÕŽ£ŽÂr¶ê0îp±uÀ1òR]ô8ù1Xuª¿LÑ—x=(Šý¯®(Njoñ„Hë0Ïób–œDŒOáÏoƒ(û`_ípÁ}ñRD¥gKSm³6N”%’™L.³ ÿ‰ºæ":¤N°éÐsÝÏ`hFD¡þ£2€(&=²›°KŽ*=jð 9Á’w -â«ãˆ­Ó誖?’«øE]7Ý…/×ïŽXö4N/Š%݈2>; /ç Âð4¤+ú«jJDÓf­{T”ùQ®(ÖrÕ“pVí8Ç@}ö^E6G|™šŠ@øýØ úæ6×¾Dp‹§+ûµÞ<Á±a‰\¹zw±÷…Èü>[¸ƒ¾„þ%1 üG9œÚ—¥x­ÄA¢P„ü‡—­Ž¶ƒŒ!þ|‘oR"DkÒI+ôN}@dF¢‡+‰U¼hiD±öô߯×Ob]¦ÓiÑÕì?‡zTí!&p<ÈY¼¤¸w_®Rleo0˜£DG@²ÞÀ65VÉVä;%°¥Ýá":ÈÜL «ŽµÙ+ áµ,ÿ±™¼"Žq–ûèƒfÊš~‘nMIée.ìŸÈ?ZRÿÑ—Î2eÑo}# â_e¸ùmÑŽt"º 7AQ6]PJc¶9JÙ%pñ í~æ}³7ýKúááü@qò£¸»F÷ÆQp/.úípõçwˆÂ›ÁPŸE1,Ó_.&ÿÓØHh?ãoœ-ÊŒÊIµ_ÖiMî±ÿüß9A4tÜãï¶ùŠe+’µuáH&:ƒ‡Æzh¥J¾+õçžô¹`6 ÿU ³%}§v’¹¿zF-KtyýnH5ÝBæÜg½ýÄzoä !ÑüÞ†ý¸k–3W¢eZŽZy“yÍ@ Ý|ßà=‹õÌKø\=+kÏ'öŠV¡üÇ:-!ê“|ÜQoê¾4f‰¤´§¡ßU::–8™ÃÀÆž2o±YÒã,Îf9åñЄçìÕ¯¢!ñLJÿð‚?o%â³C‡2Kp•~¾<šÙÙeìeÒùg³Ÿ¯¢Ÿe)X‘®FYû;îÉéff—Óy†f6<ԳɸÿÊü¨«Ì¯ ÁýŸÚº+±#±(ŽÛîE4ð+wê?jk=´Áõçóé_’Ym­®†ÿúÃþ%6êï’-T᩹-òhÕ·JCô»ÃQsž@•Oý³ãÌ/tÙ–ºì*0Ç9AÄ^‹Ê 0åÚ< Ÿ´Õ"U”çG]§Od%q‹½s„d!QwqrÒ÷¢±¸Êý'gg eÖl4CD¥bGmú+âø) ";ˆhžaÓÃUXuZÉx²s±$¡®h…˜齉‹þª2ú2;Q|¹„žOYée鯖R'ÿ’ˆ3ö¾7A)ZdõOÔº!;ÂPï†7#–µdþ 8JoPó1°Õ'©ÿHJŸ‰Íä]™ÿñ»JŸtô¿J2y&G•%»à†ô£¾oYTï‹GÊ‹¿ü€8Žm›G¨o¡þ< Ü^³>®lÖº‚J½åÜ\‰£w¢Ý-ŒÍ"óšKOÜqäûá-‚¾í%OYÌ{ޥπ ØÆ¯Ë³UÿÀ§é–Öʪ?_M48šnN[É ÆPr¯y‘~ ¾h³’Rë2 ÿ±XñÐRÀ%Þ‹.;ˆÒnÖ±Ekh¦€ãŸ³ŸúÁnT£ß¥ÿîc3›Q‚úÁRø’4pÆ=Y¥*ãîàVg°ðßøÊ|^s¨9ÿ1´î;×/Ôe±Ë±Þ8&ý¼Ô3ɳ Ž/ä7‘‘,mýkÑxjâ-èww ºr²L ¼ÍÁíÔ® Î?Æ“ÇÐKˆ‡¢šÃ¬£~Й§¬$D"¹B$“׌Ìÿ˜•„êŒd4SÉú£ß=h 2÷`õ˜ ŒÎ¨aÞaÑp¬ôôýy€GÐ_©áP?˜ZiÖF¿[Oûј _ƒùçì1í àèËûAÅò˜™© ÊBfýFÌ£ÂVà3_EI­óó=ÿ}ÜeKªûS[g%O˜}õ÷)Ê\×ê1µ”‡üÃRo·UV3Áv.¹Ã‡?įŠ)?´Q“'¦2OüDÍÐr1ÿÃKß“ÎF‡ÕQìvøóø›‰ïzcÝO '>DMÚ}QPù¬æãk…DIqLHý†Kûó÷C>¾Rü•‚ž7Ø2Øå°{u‰bÐ÷/?qëp‘@œ×ö„üÚo_5ÕúÞÕ@5‚üãQÏ"®‚°Àvì`1x…t c‰±ãÅ‚HïMåop©¥ÂÀÕG ÝVH÷zý ̦՗0Ï$9r«~02ýî u8ZKý ¨ oˆÁXá‘ Òxö»ÓGp%µ>ø&g°‹)èÎâã?.ÿæ\ÓR?˜Žãꃢ8=¶×âÏݱ«õ‘ø¡F° -ñšÇQ[¸w¡'˜ˆí˜.rii÷Žã?:‘W‚ø£^;ª¬ »Å†—¬¯ÔÃXUˆi'gkå·À-³F8¿öŽ­-ók‡‘ÍtëO_±uÄrP‘عΜ«K²²® )ñã:P±D “ôZ´_j‡æ«‹žä:èy² ßðˆŸ%Ž%o«ÿaõo_EïÜëôuJK•c*iЉQQsƒkP„ìµK¸;­ªÝ!;‘ϬÂo\%çË2–ƈi‘7Œ¤0ƒ­®ëÆ3˜æhô/É;õ„Ø~)^ÞLõ™2:ÌŠ]T;YÄJò¶Šð5ˆR’Ãv2 M¦ó† àªÙ‚z¿诮½—¡òü6hÓ`é;?¢µ ³Þ4ô»9ä¼y-ø£Çú5¹‰ü£—±B¶û_ + °ÏK¨V™FÇÂíèšF¢‹ÞÁÇ# gy¥»håØ5¯m§”óäWUðõÈ?ºá5‹’' £K}ª"šÓMË—þ%OÌ^TjxÓ‰v 9µÙ42¤¯Ä ‰ÙEȳ7Qy¥~ ¿Š^ ýUr³Q ˆ7¨Ÿ¾4îc>]¿‚>Ñÿj}ã3ÿ#)™Ô X˜-ôOô 5ÿc•rQKSQR_zm¡¸¦?FŸ›™¬m¶™ˆ9Yo舲œcœ‚æì¨Û f™ß2cÀ”_°«ì°›ž¡¦xã?& $¼)±rjºùºÙ˜]èR†ÿ2¼ü|û{{J{YV:B…{v3W؆gh#¨l ê‡Ô…ÿ8jKª^øýÿ×þW%”—Jõ1ù‡ÔÖ«¸ŽÛj’4S»à?þaÿ«²J l|3®hìçx-¶–…þ‰éé#Пz»Ã°!ÍÄvlÁ_^ôÑAa®cÿ¾`¹Þê?ž«%y†ªˆÎ¨y¥~3ŠùÇKå½Ò otÛUT(UM0Íâ<8ÓÈJ:ë=Dbá¯Íûå8~ýBC­/ê½Øá¹ìÇÔg¼*‚%5É?²¹F‡iŽÿè$&„yf]Ëf+¡ ÆŠzA ou~Š Ópëè ÞæÎš—ð7±k§AÞ>‹÷jêHV|¤NYÈßM° ÏÅ8áI 9¾<«-Ñ!Í€ë^@›­å*x›t¢R(=_Ø#L‰ÿHÿèò+lágñ]TÄßêKàúÃkºËï°Ì[tõÀ>†Exâ…ðç!bÇ©âÆyI9Œ¸Í‡+gÍ,J&ô™¸¬V øóÎXµ)d‰žDw¸6~¦¦#ò 9¾[¶Áš¯èOîÓ•£HJàåd5óõBDÓ ˆÏÛÊoz9°¬ãØäJœ÷V®Çn²²åük¨}VÂ믦ªóÅ üXqЦ3 5vŽÒ›ÜGýù6úïî3—Ç‹X~#6|?™ÿªÒE¬g¸ûbªÑ‰xê¹at¯ÃÈ¡'í9l~ øFZ3%Öë±éd7¬Ì[«iÀÿ÷Ó¿¤‚yŠ|/sþ<Ð_å¤}™Ý<®õ ;'y‡ço–c½…ôOüB$àÇ>¸$?ˆ’äo«è ÿƬnn CÕ2”k‹áÓ » –æ-ìÏbª 7‘u‡S)@¼•W\­ùÇ2v^2¢ZöЄ”W°ø™Z;ùÆeôÄ+¨iœm^£‡Ë:Ãg5®šIöäš,F¬YPî#Çüy€‡™D0„zØwXìJÿ’¶ì’‡Ô 9Ù§›‹í;í©íÕíåèªèEåéW&À 6Ó“Éеô/‘ìò¡*^~®üÿqBBjŸžØêýÏùGex>ª·Z^Ë© ž¾‹úÁºjKuþ#ÀvþN&†bgºP[Ð’ìÖ¹Z ZE¡ä^¢¶AÛ§&RÕ0ÏCd‹WÄG·#ï}GÅfr=Ym"ñÌô¿ò¤zçÍ/hÄk~â<ЏÒÇÂŽ±uQ°ÔBeÜT\ÓBƒUk;üêµ¶&â%Â|µ‘ÖG€Bê ~mùA,´”ø ©‚‰€­ˆ/³âï’ïL‹Bþ¡)³ÀÏfëàÇÓñña½-ŸÐÛ“Ùø€Œíæšî„­ÐõOj™H®â)ugØ1¸V ~YŒÃ;ûǚ´ÇYŸ:€oЇÿXK}t)QN ßËãçéÆTêª@ˆFSeÜâ ¨@k”]_õ9hcÊ賉’<#ã9ŽÅŸ~5þ£Q„þc3õƒ±_A é×ùа®ø“W–eÔhVÿövÄõ3ðôë‰î¡å²qwj;žÜŸGf³²uÑöˆÎú{X˜ö21¬(ßJ¬ôªRÜá@¬zL/ÔTž|/=ùÑVL‹YzUíÝ/šyô¿š‚ú<7Ë6П¯øGÄLŒÊBgswf)e0nÂÅtÅ îÔxžwËAöÚ2Ü}y¯|Dáé®g‡Ñ±:2îåÕ6|…³Óm#6ÿ¾˸A¥D"jس¡¾»‹¢Ëš~U mB@8ýU?5.ª¬M襊ƒ‡¹Y¤bNÔ4,yaêóFS;¸žø~´Dÿ«Òôß-ÁñMáèW¢1ÞM–wFæ'ˆ&Xî d¢èŸø\¿ ÿ±Ø‰~·øÕXò@&ç­1Þù'¿ .Xÿ±Ÿ¬eå`1Ðq3¾Û6*xNë³è_Œ†&]ï1WÜšÛº™ÉOù˜Ð‘ü©IðüÌj75þã~3ïßZ„àå3”Ëê;2Á‹ì?ô»Ùù©ž0äÏøý•tY—¾ÒÜŽæ,€þ»v¸yÔ8®G‡Ñµ™ j®âJ¨ùË”Zf|r¢Çœrµˆ†þª¬½0˜ÕT:¬<÷4wã?¶š×™4Yž&ƒ‘›šðç6YžXÓEîÕ÷2U["œQ‹´€UÉ¢5šÁÔF¿ö†É.éícÉ?6ÐM¦¬½“YÚøBíäà 5sb’×Âþüžž^¦›WðŸ{á oäx»‡¶JÆ0ûÂñ­H_dQ®*ÝÕ“àW´ JYVñ´µ½ê¨n€?ÿl;é ¡ #ó?Ήz<1ùÀ:º¢ØmBþ‘E¬}µÝÚ75áòç-À›s¥;‚P ×O‰G"9ªð"ìŒô¿:!bê÷£Øÿê*øU„½?B²V¿/]•™çÄEøÞ;Ø®BØDkþù}m[èSúÍëJÚ²×üæ40z/t5?ÀHSÃÅéI2]¿—tfœ˜é½É§´çý—ÁÄ‘mädöc<úLÕ'78J®ý¼ÂYz“ClÆ:«ø\‘¬x^]BNÕ…,aÖÒL¦ ÌEYÔ. ‰SÈMpÝ{ÀÞR “YF¶˜ýnDÙ‚uòI•rjâÊ¡xx uÏÅGQ _ûC!OpL3àââI^â?öbñ§ÀlŒA3—3Bþc¿²Zk‹Ç~¶Ö€{q‚è-$€¢¦~H{¬Æl,@ 9ìj¾+¢ÄP‰â#ª‡üc tÅ.}Q¦†¹Ó}Á¯“9^"ÃZ‡%7ÑtM£VVüÏfáF§æïÙ’~¹­ZøÒ²<þí6Íx¸©²¨NZ…Yo•¨‚BËê„æÊµzBÅz<&4ÝP ¤”ðEk‰Š^ÃHšÿÊü}6&Å:öþ%A˜}áøV¤/ò0?ªüGA-º¶8˜??€þÊüjýÛ?ÙŽEºBèÈ ÿHÜÜŠÿ½È¦=ÄQþ“Dk”5žê³?ìÓÕN|ÅÊœ ¼ƒuYOÆQýU:ðŽx"ó£é~±¡'äu€rGi.èÔpÿ±»•W–…Yî%.€ ="/ÎsÞAiAQœ>˜Ýã‚?˜û(Õ O8k;»=€úætàW ×èÃJã“"¯?Ï© åçW`'M¢Ê `­éðˆ¾XÑ/Ï·³<ëIò™šû´‘ÜíWêLüGkŽäöæÀÙ €IöG)M$¾€ú½X¡Ô »ë°÷EEëPñHÈU³^å¦þ¼Þb0Þ6j®W ”-È¢ƒÙ,õkC̬áÝüyÇ£àWS°ùKy:ÊjwÃ.ü™õç½ùþVªmöoÊó ¾¿°¾B;­€ÔÃ./Ä{nH@ãW">î×ånÙš¯tÝìŒËņ‘±æŸ—¤Î¥vd& Ü¢ÄËÞ°&d7n ÷{5QcI-¹ú1Ü’«Õ¢ת0à?^ÀäÇ=¢þ£ ]Y bç‚ hh¤'KêB&W‚ÌfXW-òÕ¿ðçAÊWj€Úaí—À_áý9šÆgT[þÌ×ÁNÞ¢¿º‹O‰flÆê•@ãà>Ô ÄÄMd&SèCì¢ÆâyØEþÁ\p2UƒùçÝ™7›Œh% €šWt W™´Tþ£4ÞaìÌVò™-<“'´ÞaÖ;!êÂÙ_¤Ž³.?÷ˆ:ïC(uûÐ¥+øÕz˜‹7ÆsúÝit 9Á™.À+ïBæÅY°¶èà8<'Å[¹çuU³ú_{Ê…ÿèÎ ‘j BSírÁ(jÅ,…Kªd67×Á£Œ†‹‹/4@‡ÚŠCŽõÒ©(u'{êþ£$*…©°骲ˆŒc¯VÓå0šý)ÓÔ˜GèÇkßüŠ9ózbìÅx‡ÿ8ªÔ2€ƒZþ#šÜ,ÈùF{ê˃Òå ûUú—dÅŸ\k¶·Ž‘Ê^ͨŒæáÏq ë;A£à1e¤6O?pë¤x“JMfúOž%ÿ(ÈÔ¨nè¯Nšµì-˜_{ýÕuzZV0ÓÉÖÔÌŪù“'Òý\ðüè…þêãýÞ2¿¶t˜}áøV¤/Ò*Ô|Së0ÿ|µ’›UÖÙJ©9Á¯«¯`+GºBèHª|ÐÞñ¶#ùB$«ÿ•§òY›Mÿ«T£ÇR£ýÑqÎ)e7®t?âåúôo¿ *+?Ô8؈2"ùGBbñG¡à·¯ï2°5ü‡«"qüK°ÿrXøöâ Ä78ÎB n=D.ñY‹JG³’œÏ Ñ«9 |ní ~6ùKlæG¥Å²ž¹ÏÇ{d1}ð‚3y×£äG§¨‰)%†Ê?¾ÙV+wˆHrƒD¶BùÜŒ«X„®'«éÁXÿ1üj7]۽黻ϸ’ÊúÁ£dF{Ñ·¥þã4ýBðò™Êð«ò:ù‡“ñ€Ì<ÑF;!=sO2ÿc>ÌÇ\¼¥“=SJtûQz#ç4/ë ÁW;îÕaNpøMÊ^-5L…÷>¡t‹(@oÃì_]”aYÈÞ2Û*õƒŒKtçŠg/h²7ÜôøàWг4À rìÂÊB­uI}Èc£ÀJoÞ´û ˜ R€»ÐÎì~$«¬zF¦”¼„©êa&eç+X “T£å?©¸Ù×ÿׯ¶Û¢+!³ îÛª+ñÂ쳨¿&pê+µúÝ#Š+«,µ•S3Ñ·j5j©?Í?êÏbU{óÌdÒ»hju¦òœp’¶]»L5úŸñçmEV9’¾æ]Ð@L¡¢¦W.ÓD”†UùKÿEþü…òNi)~`ãüÀ•wâ? K7ý£¨-N€ )²æd}ƒH…ÿØ…Ë×€|jœ¨NÔøJkÞ`2p´åD£az¦ã=F`c?cËNù¯‡£‰~f=þ` WåºÞ]ûB~öÏ µƒHþQ+ Dì9WЇëöQŒ˜ÙÕêàdÜGÍ›kO%,ô5tXߨ9(ˆf¹k¸ûò]‰IdjùõàRvcú¤«ôßMox1?* ÖÊêÂa3ÞãŸÒ°b%¼»aì&"_ Ë DT–†Y±žê§µÏ_-]+øýÂhMwÐﮥ’:Žý2ü@&N¢ªð9Gè“£Q ²XZ“µ¶k}ì·M9ڂׯÿñHÎQ½¦¢ç›…izùðo±ÖUÈJ*˜P±eÍã°÷9Î<ôo帀?lƒºüøwy›R˜N- Ìã¦ÿ±žù°®XøÊÌÕhNÿ«àYMÌäFS9Û˜F+ÐǃÌoÛíXo²rRµÑ“æ4ûé›ôÉ™˜Û™9L¹ì ͳhŸ·›À‹®Ñ©0yÜS2‘·\ѽpãƒñreaur‹ã¡øóMÊ2-!ª–ê쾿düÇ>£.ÜöJ4WEÍlL‚ÜLmb!üH4fÍ›dÔ±§6˜NK[™Yä*àqe”ÖVä'ÛmEfþC$gþàN³.•ú{˜óŒé¼mìkì^å4ú¶ß7màw‹ÀÅ2cÑ>‰ùt»»æ$&þ\ðüèÅüÚ&ú…ÍíƯ úB•Qo©.ZYí²R”ݵ–]-©VRGªïá?þ¬þ\…ÿx.Ú5ÖÄrv¦ã®³:’ùQ³Ä\ÿ«m¢,ÌõIøµ*Tm¿×ƒä=ã¶ÑÿÑßHAý`&c$aòQcÈÓVp°ðsÈnÑó0§'º8nÆGÛ8Åö:õ$­áìÚ¡ß-ËÔÛÓ̯­ÍTÜIô™:‚†õšå%ô……Ý„'ÁÙ&5꡾>®w 5pŒ²C}MU©µžßñ6ò· ¨®ÒÛ›2GD ¶ƒBl9Dæ~Bwö+º ¹;šà’òë9áîÈ?Ó9'#ÑHòBr”`*´QÝ^Œ>Œu©@fzP_26ý<óÊmöþFm{B£,‘˜ùÇW|­O¨úó-Š¥à/Ž.¾-OFB= Õˆ'éåÿÈKTЗúó™öçfû³"þCA6ÿQýUXLTü’ü#¹X긂ÿÜ‹stš é[þ™üã­L§<¡þüZQ+­y«¸¶ØJ«Ô¶ø7Ôœþ£“Š¡økþøk&PN½ö‘ŠÁõÌÿ#fã?ÎòÙŸñ4ÍD9‰N1c@Ûï<£ÿnê «9RÌ";¥·wõWçÈ?Š˜ L'ƒy„×<ÓÕ™ŒQU¦bá3>ÄÒ¤ŽÂ|ÔGᜫÑ?q¬¨ î25è^ž8øLT}à+UÑú¤1͆\)f…±-žUù¼k³ø ^בH1=þã³hR{˜XÚŸ.ùár]`-ŽSçk5"YQh ±TÈ9.Ná‹eUC‡êA~“^ŽÇ.@µé‚Nìþ£+ó?Ft`|­€R\­JUÖßz\ž¾Þôo¿@þÑÛ¿´nˆn!bNÁQb||Ü5Žð•ÛèXÒá3diò¿9ŸwO9lù M14ƒ;ÖFÔ¿J _VýÃQÄŸ>V~(…†Æœzb48Ÿ‰Žj` ë‹x»»ØÅÒØÛéÂYØBi#^Ëújú'Õ@mæÁì#½C-v&üÓ[r™BR—ʼn›óCN‡#=çÊ4ªƒ€óÿEÜ< ÍjZŽ­%+ïÓ‹ËËÔ}d„¬µ]Onbh%#YQÕÆpdU8"/,àkø£üxÈÔ,#[HжñÖù,¬Š ú$}CñiaÏ:‡âž™ª§Bà¼ýÁnP÷Ò¼iÇ䮇ÿp‚ÝÆ5½Æ³~«±ÿQ>Âþ‰Ë•ÝZ#¬·|JY"i_âA«ÃÇGŽ·.ýýÎi&þ£•USXi“> OzO`\#ðçñÞd Ì÷…{Ž *Öþ>3ÝLšÁö.Ä–Õ…w=ŠÅKEMûq<Û¾oåHS5§_r×Ùjwr5Wê§/µ»’½ "S© ¿[Åîæ{ºˆÿÈ‹·Yf~r0Ö´|ÅXÑ#Ü}y«høæTÞl£®C5¼°¯×©^w6˜©‹–5ðˆ™ˆLÁ…œd MSªäö¡ÑšŒî°ùGØÞÍÍÐ_uãÁµ¹7î/YnŒ¥'ü ÓÓLl÷'ŸÂ6ÔhKUb3<Òvú—áúäJ_ Ç,¥ª¢þã(_w²··ò„ácŒG¹5þÃýUlºžƒI™Gíä)”ųð˜ÁÄnÉhFÙStwl–¯¶ÅÊ>,³+ù‡ž|Ì3ŒöVzƒÔE;Šùç^Ì|¿CÝùxãó£˜ëÑ_Mçîü ëNÀ¶U?8’ùç﹓ˆ¡nÉÇ"×è’±ÍLJ?ô­ô«F´˜¿1¨ÿxƒ>v=þ#§éIfÝo]n®ES‡ÿð`rYêü\ÙWѨ»ˆ+ëÀrçŃw§‰:ãë`båé_¢1I}$¯‡Uèß^‘Ýõlá‡p—gBí­J'øôà×­ÀusêyM?øó®œé+c/êß®æ&ûz»Í¼­,óOÓ}~¨ÑÙLÿø*æ¢*}ŒÎ_ŠŽ+øÏ½ð¶Åe¶ÓÏ?wáÏC²‘Ÿ_ÚÇhÊ'¥¶ú,¸¢wðü¨EÔŸçR‹«3ÔøLë©ÊzÏlgµDp£±õJðIÔ®ÊUòæØÛC0*æ?&‰Œr:•6=Ù—3É?Ré%”#j|,tQê?–‰4z4M ÷ÌF|œ7À隈¿ˆG_‚˜x’7dG¿ûV¸ òÏûdÛE@{¦ˆ¿˜r<â%Â|µý„g‰bDáKˆ¤7ÂÜǾöýu‹Ct¥R"8ÞNáéÆQVÂn.Ÿ‹v»PO¥g'rGeºŒÉš_›–³vy.OíjóÚþ¶I*%ƒZ^¦5J¨„䯂ó–Äðså~Îy8+Fçýɼ®â?Žð|n¡gY-„¡ 9ÖôoŸËÏF“d àrLjösòï;W²#úÝ•Úwlg}Yþüþc¦žƒÈ/,ûÄüÇFú_@¿ÆÀb§ÁZÎΟH$ß µÙ+½2ÖÎä%%˜Æ>xË:½îˆ&1ÿ#<¾‰þ»‹Ù ™°áÞÃ[8™ zyøñöF*ëjc’cûk2pïQœíÜÇkÙM¦"{mî¾ÊL•vgt³ËðCÈ>âéÒ’³Ì տăþ»_ñ×Pá}À¤D¥6•@{;:µÇ@- p„KÌTvÓ|d<Åø£;À»v€íAdžÆf“¨íðëá»Ãs[Ý'RÉéb¯¾”ùQyÉcz€Ó] ³9ˬ„7Iƒ7„θþ£€Ñ…ŒF— xšK€û†ÔîVzÒW< Yð«8àWMÁ¯š÷©ôßG'”ÑöµÔŸ¦#c)æëúu™PÒÝÌ+—,…!ô§V^ýWò£¶D¡«@æGý™]yžuå…ÒýUøãÁõGlUÕÊju³ËÿP•N¹¢½A‚’)ÖÒž¡¸Z­<Ó†‰^X†ýä52Ìþ 9Žˆ_õ"ËœDÿ¼! 7c`œ.‹BJ²Ð†º‹è)Ö E?÷Ë  ˆWº«ÄQÛs¼Áfժ݄=á*¶ÀÖøcisaÇ'ê£RÑSW›«M5‰NaÓ­‰4g°5Yxâ‹| 1IY=?lÝáé9»(ÝÉ×ÖŠ$z°ÿ¹`T©ðMÈ“¶¡½BÄ™ƒJ?Ø‚QÊ?âh“ôêóbkúPÿ1 û;Œ3¾E%Ù8IË»,ÄjdƒU>†ÿh*j(#¾p¶¼J%µ"þ{*èU:âñoèwQ:cñçIOž! _ñ9ó[p§É’N ß-¡ÿX«xi±ñ@]²_Xò <©©‰}{¢}!Æm«»€•€&$߉ƒš§Iþãž­1õƒ£À¼'`ÍÓƒvìÀ>ŒqšÆuìûF,¼›½ D¬¨<ÅõôæîŸÁ7MÐâþͬPÝEGŽ«6œîC˜wúŽ¢ý™:ã?6ßž¦÷áEªÑ ¡ ŠÍ+GíÇPêa²<üUŸpwZ%_ˆÃ¥ã‡ tćúólôo?ÿ(ÊÌŽ£fl2…jFc «Ž4Ãä 3d3®v uI˜»© »ì~º<|xÝTvo1:Ò¯jstû;ú_µ¢Ãã8:ÞFÓ\O(Œ³(‚¡“¾®ÿîaúï!wDÖ§Á0lgbÇPòÑä™Oâl¶/0üù<>õƒKȺíE%–ÞÈ,§ˆ¾Ž]óѶR¹‰~·‘TØÀ±d~ éHeõOìbAyT™¹9¾öL¤: ~Õ×ÜÁŽ‚–+ÑõÜy½½8éXo¾rPý“åƒÇ‰‰2ñÛƒÉ?: ¢6Y×´/¥þÜnÿb¼3söÔ“›ÞØä¾ ´ÜAºJïíþc;ý³ñd•%ÆÉ,W‰Êò¨ÑËžŸuÚàáÞ‚ÿyð·#G‹J’Ùd6ýŒtö"Fmv×7jJ?‰JòD(ýÕ~e„Ö_äæéé‡ÿˆ«·2 Ø;›ÍP \¡KÉqªì‡R?— Æä_—ðq.ÔQö3á?bPÛä-ž‚ÉÅKgüϽXŽþ*„IxbkܹêyÿDô/©Fþ‘ÿ±_)Ânõ´c~mIæÆAµã}d{ =-@5*]Ô4ú—̤ïÌD¢Ñ ÚúúÆ óÎÀ ææWìÞürB­Z$+¨³t“üão²T¹Ìà~Lä©>‹EýÄ|Yö¶»ªnݪÆ5¸»ww×àîî08 îîîî ÁƒHww·`A¾§²K'I&a¿ýïÌüv§ pûVÕ­#ï{Î{:Pa¹ [+žTÇ„k •Cáñ繩¯(>7šÊáäðŸ…5á¾übò˜vè—ÔÂŽíúÈ]…ù K:©{‰FZð„àû¸œ)¢ýyš:ϵ¹ ,Ha*ùûÍõ@m“ÊØzD⓹Öõ¼éÈxbÅ Ãì±uּŮfÖ4 WãN5åX2­ñ AÁx¾ÀÇæ÷òcSöðü—ò¼ê+´ljèžûñj31†ø¢û5< .Ï kóN¶‡?_EWò1xŠÛXûÒÆ*ØéÌø¹;`eÑŒ¡D¨«…sto³Q>ˆ„0ú9A~¾áeŽ‘wÂ$azú)ØÞ¢ôxû›‰ˆïËÀQ¯ÂÕ†ÿ8Ž÷Z,›Û¥Q=žt=5:§Ìê¬Aä^†ZŒøõF#:õV}GJ³¡Ce¢ÑŒ,¢'<À&¾ùùIb#Ã?STÃÒ'.±ú/è·äNTÒ§¡3ÞÕ0ìûñ’áûð'SÉ?N‘½N‚S9O>wÈ´r‡èáx´¯¨¿:Æ•–Ê?nå©KGO·Ž¢¼å°ûEéÿëgŽ¥C¯¾`'W:ÿ‘Êè {uŽ3ïä?rʃäŒwÑ/)ÀSp7ú ÚÞŸþÃ/Æ®t3×Õ.˜Ròé ùáyÂxkK7+üG°~Ée³V …"ú:NßdñCߌþUAtG1™ä¢qœ ¬¥ÌB¿ÊflýrÓÕ(koj”ÆD“½‰béD…wýuÁká?FÀÀö§.2Ú>©à?˜˜q•T‡ñJãì'í‰É?ÚÁÿdµŸ4b™Ék2ÈvàW[Aão¿¥ŽTµÎ¯ïüoý÷®-SÆã­£’ÒéœEþ{¢*6µ—ªi•µ¦ÚÅUö0¿¶ Š+¨¿zc;ù¥ø“q”ëÔïÖÀ[W%‚ΞD]'2BtÒÖ¡æž-ÂÎç¯ë+>aÕOaI¯Pñ³EÜ@ÿJÑâ?Š‹ôb1ó^ïGÒ\W>*­ÄWlæìÖXìG~Yδæä±í±…=É?˜Š$’‰ïš—ó&ÂüUò©9¢.qìP¦zBòå¶ä/ˆì‡Â+€>¼¹©yY-ÎEølò)½Ài6‰äħårbîDøF¬½þãSbŸšØ½•puI#ôù‡Á9µú?z³Éä.Ó°Š—Ññë…þîxPâý vÉèÜ8¬O%î몄7)¬ ó? ó Ä{dÖ'U½-ñ·oñ>Xë>ÔÚ'g•wx¬X[wÐ+zïA/øsËèn‡×ýZØ Ìʾ;;ù‡å}ºêÇ´›šB]7*‘&èðE‹a‚¢ VŽ=þu¹3Ìÿ8 ~eq¦ÝÙ…„5mLýU]ªzú£µ14È\ÃÖz‚ÔeÂ˹ã‘-õ~,ùGèúÝmôe7°kÀ‡^SplGES0+5MU`€S¡¿[Þ¨fÄ:'—-ð3“äGгRè„V:³“dƒÿ(…ÿ°Ÿð_TP•ÿqœl&'5·>ÔïÞ£¾+±Ð.à(ÕZVþQVÏ€zCÈ«îŠÿèÄ}¹IþáÏw›pñëù·ýç P0·Ûï3ѵ{›`Ô£°98Ž;þãÏý é{ÍyBÉqQÄÌ—·¢þ7&œ;™Áx<ä8iæGEc>ìF<ÑlÔVv€ª Á+Ÿ`½{d™åâýƒ¶1Êpܲ`†õˆŸ†óÿ%èÅ^O•ÀHr·öhƒ\0 ¡/ßÐnÜÍé`ÎdzýÉzºÑšä1ÂIÇåŽTk¨,^jåbO„zÕxúùÔÍn%íË>«‚Uf@w¯‹#ÿØÎ¼ÙLè’VäTê³E,yÓ¨mOÇó¨Sö5žó,¶2Kj2š‘^FúKÚ2Ÿ°0þÃ…sU•¼;;á8…û•Nðºiy#Zc&ÔSP¿»Ï,f¬$7j*9Àlk÷´Ç°'µ·a2Ésºë£w6ÓÐÑ(–[oŒË?‚_yƒ_]tÜ韶¶J§sæø­?¤aþG/õžÚPKªVJ²ŠŸ­5V¿«ÚS½Jýîïñç˜5h¡exk^SÁyÄÊ[ù®õ}´ÑÚMQ,…øÈÿcul )ì¨{â“vÁ˜—MM¬®‹b¨¢<§ÿ‚a‡½º¯’ZýS|Ï¡£+ìG¤T Ëôþc2˜Fmb~7N‡‹¸¥m { §Ÿ6ÖFj‹à‘ÁA°¿»°û‰ô3a¯¾‚¿§Éù&®‰$tÁLŠDÿG e2 ÷a'{©‹åÌ‚Õü&ºèk°òÅ`qOÿŸá¸Ãµ¼ïÔ¤ÜEU› CÞüj'þã¥è‹ï±ú?¼Ññ¨Kþ±ôi9 3™ù1ê Ð?x×éú‚aÍ?χ7š ÿ‘lè ^»3Oå5üùmÞÆð x[wó“s0›¹ûÁ¯Šh‚q|Ú¥l¢þÊ1œ¸í"ŸjÁõd?øõ]Úkê¯VP#V¼l<Õ<|ÖUãÍu,f{c«ÿ°Ø±!øŠ‚¨/#S™MÿƲ‡aXøxàõp  8Ù¨[¶&Ez’/ú`CšjIÕÐ3שí@ÃjqÏásš‚_Q=üˆ~º‚Ìr£—.·q—ü#—áÎï'du¼ÝG8jô'u õ\b¨WW‰z°ø…— Eññ9Ð@9I¤ž7Õ?·Ì¸àWeÈI&Q5Pû4=‰Ô•ýPÜV F%KÛß]“\²%ˆSJìÕ<£šZ“ˆž“Ùσu3QÛ /Ò~æ ß|‚ûãÉ=ü¨5wZo™(nt•¼±YT ~Gn&3Eýn/æ,%.@d)z¾K üjua­¹—Ûá?rÖü¨–އqÍ6OñÑ™ùÁ]«K5_oÎ÷ ^!ùÆ<ÿÊÔÅf‚©EýÕOò‘Îæ,ªŸâ/ã-©Eð¢F;xöÎæ| ‡9B6{ýÝ6LÙK× tª7Ћ|úçeÍ߯|C{¤]!–’i;üoZ¹ £yb˜Ãì„ÿHÛ€|F£ÿ#™t?ÏNö1ËÌOÇÇEjæ™ÕøÿÛ°5M¨Åªg¤b~mA2šœÍìà°ÞÒq ƒ_CaqgZòóÝ™p¾9ƒ5ñfÓÑ/Ùoe/k¯“ò t-©½™LÀ‹mAö%ùÇ·Hu+;nò郗M(ÁêØ¯m ”Nç"ò_“GyŽ~É;ø„Ú‰ þã¼­ýçíÔIôŸÿ.ÿ‘ÿñX´á ´ÐWí‘ZVõU¢Š ¢!õ®Ôw!X›È챩¸Ëûâ-*ãVÐ÷ÓTUƒ\¼Yg´¯ô¿`Æaxu§ÎëŸWµ™—‰ç·Â׎)ÂúZ שŸðA¯+u@]ETq-RŠüÕ´©ÚÑ‚³=.l øýYâçr¨0¨rœeRƒû\Ä ˜,¶Eølª+3`(Ö}}uÀGãë?ÝÉ;Ð÷€“·¸…Óìo1Qû3ñ3Â,.±6<¨øÕv¢£§b¶zñà%jgº‚ã¬ÑmÄâO‚ð6w“™zûO`-w²¦äð71ÉË;Þ\ÇÖlÏÑß=%úa¦”C™ÅÒß]ˆà\Øóeø”$¬t‹¼ û”vd «Î‚ŸÙ‚~b4õmðRAŸ¶ªÃÅH,LI|ŽÖ÷5yéΗèÙVb2i}*G]wTË–2¶Ó‘”ÜËÄñ)þ.>Oô õ¤5òÜ#*èþ ¿:-+P½u„JÙôfú/£Ó÷¦@5‚_UÅ-ƒ¥²ô¯ éºêá´bwUç=ØAæX“HÀªyÍH§à£6ùË:©"àæ@ãƒe45ösÅXí9ÈhIÇ=ú»-œÖó€ÿÈ%ýx ¹WÑ`Ú'ÃÆ1N¡_j¢ltV¼efÖê¯âÓÿ1 ]˜ÖpIÛ@á2dÑÊqØ6á?bS¥ðNo@åó 4e PË:`µ¬˜2?=þ<–Q—Lãuäûë-V®«ßõüô0ù‡Ð—Ënt“ÌÒßÝo¼@ïPCïÖü*>ã1Q[©†ÿØvÜš§_€¼%)þ#8ÿ8Fýn:ÞòrÜ¿ëúD1@Æ4 Ú3€ ö#´™÷±øË˜%µ4숑d¬¸¥obT§w6Ù¥BÎw8D’—2€þ¦N‚OÚñýͲtz´¤ÿµjÏÌ¡f7»—]·g°`Š¡‹Ý½þÎè_%„ý)V’¡?ÅÛ"2ÝÊŽ›ò_úpÑ–2DÅÕ7[c%‘Ó¹ˆüפ ÿ¼úý’RÚ^¥«lfþyµ¤:F}Ц^°—ŠÌš.AókkÓéšD?&Lð« ä¯ÉóJj3µãªù›üGUq öñ ¨ FŸž´³¢¢"´ äó´kè>/#ÙÿqE±«- qD Å±«îzbYš:ˆöšÔä ßéæè*ˆëÚÎH\ªz‹©…¹N.3ŸdrÎÛ‘Ó¼™Ή»@¥àã ýö9âD„Ϧ¶2„iˆ†]­'Ç`3énz¹{uy…7È~ÕŒ“¿³÷\MÁŠI´Õúsp¹‰dpGÂêN…UÜËûßÿáuª¥ T–œänä-•«á\u&¥¾êFuîT¼GZ|Ãò.äïô• ç}ôõd4.¼YȼNâé6âåN’” ³ÿ|úWí±Éϰò5ÀM,V§(¾ÓÀ~Œ€ß}¦%3ÖÀ,Ô!ÿX• 3yCèXá°ú?®Úk·ÙÍk½>'Õ<ªÒ 7ŒÀš²kr÷X øÌ]d5ãxú ôªè—< uÍ{Õ.bì]þ¼/Ö÷çîOàõQ•°¬næ.´ n2¯õ»ÝÀìK£ŸØ›ÎŽ^ÒL¤K¨çK5ÉÄÛƒ•nÁâ¾ V:bzfPyËÃXä$h¿¾Fÿʆc c*þ£yϺÏûr:+“ìsZ±§HUžG{·š+ÕE´©jÓ¸Èô€ÿð#>oghäíèú¨J>³œÝY}'Èò.hÎÒ)‘…ê‡Sä ˆ+>P';‡Ê¨> _™´}`}ù¹x¾á(†¦SrߺšàC2á*—Š&Ž;(”Ê =¹¬‰ÿ¨IÌcé­e3£Ÿ¨ ÿärÓ”( ú%µÍÙàO-¨{ú“þóø×ärq9•CÌn›¢T_ÀŸçi}TpË„Lf*h>§²éú'[¹ÒMæE0;a¾B-x8~3“鎇nI5Eiâ­l/áÈ?¶+K´¸0ÝyÁWÓË "@ß`”¶§EAf ~òÊ(Õ™fXÞüùGs˜ù\àWyŒ²¼Í*½ÆoDc¹ ¿óë‚-þ£›p…l vCט48Ú…ÕhÓgd¥yfcûêwK€·Õ%»ùd$e:a3#ñ¥ÎÙöþ0’)þ‘ùƒ[mI•àØé›­—’ÏéœýºÆˆÿ›Q‰E®W«ªÒÖé_]´U%ÿpSÇ©˜Ï™ZÖào)¥¼Ôba±Z€i±µ;jõ?*Ü´EÚÎßö«ÄwPòƒÂê¤Ë¢/¡c°¶òYMA¯Æ-@Û*~Šgêà¯ÿ›O¾Š‹Ú[|ÁríÅ^Yµ¡%eM˜v±&;–¬‡ÈˆÿØý7ëüú­jÚRm¨IýÕB2õÝð ç‚ìÎ}püÑd¼—èþ¢æ¿4 úW ”5àöëER,zsüG¼åkP¢ð UQÑØ ë8„õû$ª™"xÚyµ‰Ø÷–x2O23({[…Žì1ìHpžåäK~`F9@|vãŠp_ÃcºZ’4ª ˆÁÛ׉üç¼Ï ÖgŠ)¶x þî_ãΑÉ-¦¶Äƒ™‘9ÂÌ?6*QDOvËD±÷4èNvþ“^¸öº/ú»1Qí- ÉéxæU`qxÓ¾ŠÒzÇ›ûëØlWÉ?nâMØŽ` 岇iè‡ÿ‰]šŒ¥{HÔhõî‘Ù‰"·a‹Ü©.ßíˆÿ®ÿך‹Õ?ÄbVȇ}ÿ)9å52Àò"ôy—¥ÿ£º èÜKüŸˆüà ëö¾>Ú¬¡ë¯>)6ößž³¶ ÿ*ùÏký"lqf×ú+‰ÿè Ÿ•ʬ* I(]é®xK=n£–.†êŒ_µWOYúWuÉZ _—:«¡F&²¯‚©Ž~uÍì‰~I+£:;,AÿÇüÇ*Ð)îóÍÙÃEá»÷‚‡5$®Ô£>Æh ßÑ)¨þ*ók/À+Ä3F1,ÂKN­¨EðÄ3Ç5²Èa¢±ãa|²-UŽÀZó£ªÈ» œÍ˜”õÐèKcùNè—\¤fà(øÓTݨ•Ó Âê•„¶Œ!´~Ú:+)"°(áí-rC~U›þAwÅêK{n«¥æQ[ª3Ðß}m Õ{½lÊð«VD–Y`½ãÓ1˜U=ª<ÔÚ_M×N¨ê_*&Ã^ç×O[€V¤n·"÷;§>MìM˜_—Ú.í‹6C|@‹6à×þÛÿÞUu¤øH¤u®c.}fYf 8~KM.ÒuÍôâ™'Ú]›Àô‹?_ä?Ázò¼À2ä|^Ás܇OOM×üŸMe8ÖÂ]¸` «‡'"¹KÂ,üfAÖÚÃ[á?ãÃi}-n«9"Xñµº ûÞdêÙÅ#1–Xv4ï¢5ÿ£)HÑt¸ºU?hMdDû‹úÝ+áÜ¿ÔJW5ß?ËôFÀ80Ù+x§ñì81ìSlãMîî*"²ôê”ÓBG÷Öì£~· ÑWw©)}–~{)®Ìâ?ܨ‰z@ÿà Ù™÷ˆ;ÜTAî„ \rqÇ›¼Ñ+¶Úi1§Ð¿˜E&&Btƒ?oDÔ=›9 e•ºà#>àW±ð/ÇôÕ<­á|?½Ú;å}ðRAŸ&Á‘MKƬw*?Ãy‘_±«ÅÈ?꘻Á¯î¡v[’,©/yWQ*¥ú ™ÛKVÆú9wwÛlJ ”ç[`û&“û]ÆÇÅú`>ùü‡+ºãéŒf|„ÿÐŒ%T64‚™^OþÑtµ€O]ëô¤« ¸ã‚x¤êøíäF7&æãï‚ ˆg¿ÿ'|Êø;8Ÿbr|BFÓÛWšþ~g·BÔå NKTæ*îëgdÔ‡óÁŠLûr꯬ùËñ˜#™D»šª„YðìÀœÖÀf§‘ÃEGǼhÛ£Õ3¸<à¤]"ß-(³ÒMÒÚŒËD«ut^‚CNŠÆm 2…h 65ÿ€?·æüÀòÝsëÍWsþ¼«ç$¸•ÔEySÝ´ýÝ d[³è³ˆkÿA6r6~Ýî{ôïôV“•¤‡^B¬-þc¡rTKÅ{UŒhÑEú‰´h g´§§¥':d:zW³ñmñC/Øm73µwæGuàìÁkˆò°|ã§ðþc¾HÄij­§ÀÞÅ¡Rm ¹ßf&m5e*ÉvôK6Ùš¹ì Ño9ˆöU*ÓOv4‹Ë^ ]«˜_û™»•Pü^…«ãöü}8fKbvZ ­õ\¿›Iy¨LRŸ«Í´<Ì´úÒN€_S+ª“Á¯ÞÙ³*ao?¿¢Ò#Þ¤%5ª©.T\ÅU‡*ϵɢñú)5ºú{}òM„IÊ âü9¼M‹è* žÃOb“(n©OÂÞJ¨Ÿ¾#Ï.¬I°{8 £°«ée~´»ˆãüÊ /ƒØº3õW÷µE¡þnX¿¬¯ÍÅXs»W®»yV†ô>ÿ ›^H='窷XédÂZ­„2 ¹þ#1½“Èbc5;Â6¬Y¸Äþ%VÃæ/€W§f‰`Å[ê*:¹ºÒ­±Ûênãɹ†QÁrž¸±Ì*7åK÷ˆÁˆzéùDýpçäAŸ ¨Ü|]£n}5ÏÀPú±þ0°Òzj¥¢“]OÙÇ»¾– d¾ê‰×a\êe—6 ûHÓŠºÑÃØÃ¼p̺| >?K»¥ý úîLäŒ^&»þà]!‰Hš;ÞÜàe}l‚üÇ7} hR:*¬VÂt. ›ÁêAlI.÷“üڵߒ’Zе zÓ`•ö3æcˆlÿZs.ýçˆPÓÂNŸ"xÅunÕKÀo4Æï62ù(7ÝÍ­nÙ†ot£ÿc0üHWYÛzþÇ'E%“üœ{+*¸÷¥¥Ó|Uólø}`ìqÀN^£¿{›ŸÅ4fÀÐÔ`ÖÈj|à ÙT/z(ÿÑK‰wû~åFLgÐËàѦPËîЇJ¯h^,Î7ÁÚ‘É?.…ÒO\JDVž¢/ŒÅdò†[r=ºY ,lŽþÁEès=7n“D7úšy _4ž»zŒõʤF|æGµw<Œ¶ådÑŽÞYyÇÜtJ~4š1…ª;5b½©V>Bð6p¬ùä#¹™Ø1ß1šõÞscswšŠyŽõæ*¾ê ô|½©ô8*£À¶=“‡èÒx ~µÎ¸B¿ä#büÃÔ‡™¨ZÞ7û¢M–þO´wøeL.3Éòò¶“Öcd.ô¯&áÃS’sÜFW~ü¹;øÕ c ˜VP±ÌF#±8Ò¼¿®<¢þj—2ž Ìd`Ä­©§Ê¡×2«RqPÿh‡‰ÚÀü(/»b/ÆüÖ†·¹œ„uÓ£ôB¬AÍï1¬_’¿ò°ØŽ:îôw椎À¢8þp¨™Ñ…ꬾVëk1´uAý`ÊäÔiè_½°]õçÿþ—¹)^‹vX†t ˜XûZ…¦{7QY[¦U£¨Ñ~kŸôcÈnè¶[:©èäva¾©Ú`Wîj’©êß…z÷ï·ôïß}Gÿà$E^Ä^VÀž€Ó¬EM÷4qتƧ¤ÅîÉÅ•HåõégY,êuO¦žr%Q¥—‚*Þçàw1x­ 9±EƒÅ毹±2תK ©àªKä—«µÑ‡0¬6?{Þ£G§~¦»^ /òC¨Z⫺ûÞôg^ä±èƒmO7‘mPû5àQ'`,rSg¹ŸPBÔ W·¸ÒQµôÛ»À&ÀžÞw¨°kÏ;óɽìFÄ…7ë9Ý'±øÈæ6ê‡yâ?Âx2'ˆ'ï~Ej¯ß¢:¶"„¿Ò¿~§/O™ >0¤ÇˆãV _1Xù®ºÂ-&•» M¿IEßçJ<꯾¢ºáNÆr,]™,hº¸G-‘7þ#•@EIñ0Rüy}ò©¹ÂšÀ:oä…5= žÄü;öØg‘›ò”x…AÂÃëšk*£ÈvTÚS²ì¸Lí¨Ú²_Ï ƒhíö ‘úøôOâ­Ñ´©­ê³q”]Ý£±Ñ–ªÊ~bû6Ô´®¥ñmÊH…Ñu8Œ¶Ô6Y{-¡4TA÷¨ ‹ƒO´jGî±3txõIXë¢h­–¤‹Äoô˶™·sz³¨¢}ãRÓM:owE¬Å]ó£Þ¶?jªž ÞÐ Ñ%]ÅÈ`£cƒ¸t¨:TKekëÁX¿ˆrÔë—ì%ÿ&ŠÂ~4¥N©fIûZ³*7ÞF1ªêú˜ýìKìÌböafUØ•óä%nÜ…¢ ÁŸÄâëŸDªXï¸âÿÝoôƒû…u¥ÝœdQî+ýÕkj-«æ¡åtùÙZÀz·U§ _h»ü[•®ü*þê]÷‡ÿ¸¥~UÖ*Oµþ¢9zQWTý7ñ«žøè¡úQáÆ;“|g:MQµL<Í"§ãƒøɉ"ß•øêj¡Êëx¢* ,¾z"Y†b©8 ÓG%@õ~"ýƒ‘á?ÚSO¶\í!êF²„pò®ALÛ{¸Ô¼?¹ˆ2RcG çâ°n¨þ#3Ãí̇¨,`9âÁÇ´‰YKç‰CêÓår¢`$Þí˜Ø)ò O2ÝÔL Ól£ x{KN•@s°>2˜œx‡h¨´äF“êˆö_Püa÷u9¾9>')!YEå0ò‡¶îš—èÂ0¶#3õH³àSféePãhûÑ‹Ÿ”ž'qá÷Fy‘<á#´€¿èïZóÏGý ¾~‚úª÷€s*'Q4|va½gð&9é·”Œ›ÏÀþ”͉º9Yg›í½³ÈÙ@ø:-á?SÝu •Î\‰ÿHo¼bþ Ä#åqúˆg8 ªÓLO£§VG:­8„z®ÆÜá;ÔbŸç» Ïè;Ý–-¦8ªý&S]‡Q¿ÛÕ(~Ռ˓ï;;ÄýýJ?qš¨€ÏºE=p#8K¿}ö¯›Á”(Æÿˆÿ çå ú%QÍã(ËLÁcîe7¨"K+‡†ðÏmôöÀ«•€,#¯áù«RãkRÇúƒ{· ½’’ä ¥±ÑƒP&ôC‹¤‹9›,jTÐ;“ø¢ÃÌŸ¯Tîà? âsèd4*K¾’ôAÿ½9ú‰‰éÏ»ãVòøæuªŒÛÓe¢›[t…JŠ%DažzM±-¾åÎôœàrÄQäJzÁ|™/˜½ÄúL(Ymt`rí r¢:è'nE %Ý~ÌŒF=²!ApE>þàþA‹?Ÿ†ºÙ8õ“+*f5û1³*Ï@Ùv€§Í²Ï³ÿ0ÓÚk€j2'Q{öS¶13ŠXµ§äA™þ‘þóK¶œŠæ8Y?lmþãþÁBè_MVck-à?Ž+eYó¶­=U·á?^¢Ñx+,sîÏ\•˜ôôµÈ j ÿ÷ :Ç}´ÚIQ"²|ÎK7ßA•á?’}o;QÈ~CþQPƒ¥ß# ] ew^ÅúÕ#%…:D¼â,îÁ>ŒÂÚ'qx/Æ‹“dG@PÒÒ0Vd/"UÕ=Èå¢ HÂlªÅìÇN¤ ïxò?•Þ:¸ËDqÔñ¤þº¯ý¤ž2+ºöy5coTKgæïþù~õ <­?èËŸäÝX½ ØØ>ÔôZ§o„ýöf§™¨j=HfҌ΅ð"…ÂJcµ&~–< yÇSºn:à#_‚HDþÿñŽä,ww¨Û.ªÛk„é?62…¡;~ðV¾ù”7™1¼›MÞ%*X¯íÕ>‘#õ£Šg2¶~ WC¿@þQSï†ÿ8~‰•ªÄ×ãÈY¢’Y¹éK©wšN×% ‹¼—lâ þÃ…ýnÅs¬Ä^nÖ€_…®½X¬…ÿ¨†½ßÑ¿Øä´ùG+𫵨oì1’£æQ6d™\r°¡oä;-Pßœê¹XõWñ“®Ô'0ˆ\¨›JfD¡·ï$ýiÈ6˜)Œ·°Ñ?ñ›9A/uÊïGÈÊ<³$ê8§ÿ@?Ñ ÿ|4ÇêO±ÉØF?þ­)KÛX)‘ý¥ù‘.µsØÿ Æa&s»Ê =.M½yOb¸”§xŠe¨¬tÆ-²ÔQì/Œ Æu¼Ñ ,ô vð˜X)V+'VˆAŽüc Ê1±"ÕõMDC;E¹Ö¨dO‚åXꯢ€„màs;ØôWôv¢¸4] 7°Þ@bÎ/¢ŒÜL7ð¯ úã?†ã?&òÞg`Ýr(ËϤ~wºñZê—Ô†í·Ÿ°G·_f¶aic·¹ ]År l™eS]e~âÕIÄÚ_ þÿ{©>ÁꦟèÿøOñ«4Ê]e±úTmIÿÇ¥&§ë´m¨ZSJþñH±…èrÌåeÂWXúW ‰ÞÁ ¾@÷˜¢‰aè'®Ó¨éÔlNç7¢5ë%ô‚ÿ°Þ™|à;~¢¦rEÍŒµÏ‚RÕ9¡ë‰µÈM4¼ ÿ1HØä 0–JØ|/NE-zJ'‰ 0§ƒüGCô²‘çÐáﯙ¶†þóR é³à3=±‡~ä–þÕGüI"ÃìðIYw²8á57#ÿȯ{ŠØDOÕ¨ŽÊ­~):ón‹yÛŸ˜÷¿ÿ݆þ”¦e`EU[HÎÝ+¿]ˆ)ð0=‰£¶RÕ„JÖùøŽËúSò«°^OŒ —ÿH ^„ˆm ±[*ü—BöÝ”µoêó@Ìs”£Ë‡º³'ÔAycŸ×Pßtý«¸aìr±²@ëߊJ?b;v`)øfçí³þ®«Þšüã êwUéúIþ± ï—„ûòM” ?•Û¶6Ú1ï=Ë–™»¾Šõ6c]'чЄ)ê\Þðç'ÑÉ…ÏÜÆIZ‹Ÿ; ¡ÿüKðRAŸf¨D/0ÇTä~dAø/êî21*7õ»­@N¢KXžnô%\w*¾åhÉmÙSÖcÒËèPW¬2¯#qIì¤*]oò¬ƒ¨z$5¼¨þIOeÒ|T8’¢”[Žìd:™\c¦\ç9M‘U8;©ÔIN+öU5NÁ6ò¶ÚXÝÎÔ-¤„™ÿQŽùQëá’Ï£çÑ ×…~/îc6îæcÖ›@_L¿®5pZoœ(Ì]ó¿ªÎU0ÍKΤ± 2uéèžEÿy ñæ÷“mÄ5½ðjcáÏwðݧéÿÈ$‰®Ž;øÉ6_ÙÁ«MìTÎnùGY0ÿ.x¡v¨Bõ6«0¿6ÊÈ®0‰°¤ÙŸõUý@¶t¨8êXorFUÉð|x»¼àÏ‚쥛$€Œa¾±‹NôÓä6á|Qƒ¿E¼ßµF_˜ÂæT©×ä^3Eo‡ÿX  6§JÈ-"« 02ƒ}ÍÁk$4ï›ÍndƒµÉâîÀ`dwKn|«"HVûÆ}3h¯ zÃL…à»P›TOJ¿ù^:ëWÏÑöú@ÿÇû6{|{){MôÛ3Ú·Ñ=ŸÕ–"(Yÿ[@åOðF&øGòó¶,!ê¯T¥»’Êé\üºÆˆÿ ⤌e~mC­„ö@©Á*—lÝèþªÎ¢ÿü³íNÄK„øy•wÚÑ´Áê~¨Cÿ`X”d(UÕVhÏU—ßÌ?j`ñGr§»y7GÇÂOVð(îaé­y᪺3ÄvB|¼¬dRGˆ÷à%îÄñ«ô«`MࢧQ5šø«7k¶ Ê?^i‘Ñlé¨mÖ¶‹Zؽ…Ä´°ûWà–3È{DÒ“°Ëßñ¯éN-«/Ç#|6•Xx‘‘øÔÊ£´Xê/¢-–ø –ªKD<åê¶Š³K³òÄ¿û'†¶„}ôÄOzƒ[}hïÒž‡ê«yD¸åVÞ‰³`oʼnØ=ˆ jÀü†7i² ÒL- £³;Ÿ_£QY× ÏôJŸ)_ƒt³äñIA®Žò‡ÀœŠ…éÙ7)K5ú<ÀãVbW/ðgës§JRÇö™Èð<úWß±µxÿçp_7“Íd`~˜ 8`XúWçlÍè? ç´Æ ;|²;UÁÓ±\sÈ>,ýöÜä°Õ§`?ÒÈuä{ˆ n? Òô¿Ô^ì'ÿ­È†t Kx œî–ë¹lJ<ïær푇²=,úV2|”?XÓOºôï„ÖOŒ§¾„ÿhK¹Žüø‡ |IR4ýéLoºRAôÝŒGÿyq8õ‰t½4ƒWðãÚ/™ 'W'8=鑪B5°ÈcMö×|-õ¶3À¯ÜÀ¯<©ßÝCWDKã+ú#µèÿ(M_…о»¸—¨T¸«ÕvZo­(Sp’,ºl‘ Ìn ýƒñgõé?_Kä,¨KZF¾4†Ê[OîèT0Ak>É5›driˆúݯAþ#;™ã#Ε?YxuXýÆj›Z‹‰èkÃdEï¶•9‡Œ¡ºYÆ‚Ÿ†þÌ©ÌÊÓù#~µW9¯>ÑÓrÏÐSƒÿ(JÕÜXFYSPD/c6ÌÇL&Î~‡»xÿ±¹½iÌ]ø†Žä…Áe+¢.ñ§ÃVæji°ó%ˆK¢U­z“ùµ³àS ƒ…Cßͧ!°4‡é‡êz{5£˜ò+x¾Ç¢ gvLÿ1–¹ùˆ¨ÚáQè÷ØmÖ Rà,O ûúwÃGe³÷YóEÝÑÊ?ºá?zâo6qª_ðVÇëþîEþ?ú½Ý¶Ì!æ5¼²5QŠõ"óåÑà?º¨—ñE´»JAN×QôK¨õÐoÿŒÿø=þü‹íµöI´1,bU:hI´¶êE%!,CWm,jXñ#¬iÕYzã5-½•kü©>b¼RY^)¨6ÃßLç-IɵjœüZø+úD8‹Òú`2&Cž“ÿˆ_8b¶{üÆ+F»\®רá³æ4=Å36—Ïö@ÖúFÛÿ±œ¤ªœ©oáúÇr/Î3G¥ž>Åñæß¹Ìÿð=ÈŽfÁä‘ÑänV!§ëŒ9COHª<éS‹Iþqîü8þã9ß·P³ÿE?q¥ZGX³Rª’¯Ü„=øAþcõfßÁrUÅV¢)}­ñ&óÉn¼½?,½jLoZ&†‡ºâ'èïfÅCfÅ'FÅ ŸÄb\“)ŒôÔF¥1;(IT»~!+Ètv[JJæøÂ²W%¢H ŽpZ±½ú™X u10µSTW}×ãÒý1ÍhEN3•úÝ„v/𫆆ú®¥ðXvc¼Á~ð³Ýøz¿Pú%óÁôs™œF£¥«Ó™£²…~{; áñ>ÞL+ ùÇjò†Ô²Y ó©”r]ˆúÝ‹¨ðyàKQuPÌuoX6ã,úW:øÕ",gæf'Kêd.„?¯޵‡«Éó‘FCúÏQ!lo¶*kÔ ¬ÇˆIöÉï(=Æ4êƒ %¶W"  ~W³/&±æGùû©»íIþq–÷oW[\î£*}¶Xåð›ÐOLI H9"¾G¼k±™àמ¿QŽùƒŸÐÓRÑBίrÓØG¤Žþómx¾žzüG%üGI"»ŽS¸Ué ž•7¡5‚v]˜…í>(•ìÁ·å¢Šá³ÝÃ~ݬHÛ ã´¹žû›²›YPöàϯ¤þêïhî¤ÿc?ú%Á•L/lÍ”ßÃ…‚ßÀ8àWÝèÿh¨e×<ƒP°óô–TëSõúÝß›_›G¹¯©Øá>d‰š^KS´‚TÿÔ¦ŠÚè ú«ñÔôNïCð>ÂþÔ[ر[¾¢Ö Õ ôK*)oÕäpÍñ«èdû¡Þû¯†úéC¥Š:‡n’‹Ø:ÄÇè‹H7x¬éAùÇMÎ@n,Ï(ø»‘â?*k[µµT Ü zßED(ˆ¸†€S|!ŽžŽ~øpïø·d8—"¼æzôÖ!~mí ÆºÂ§tÝO¡Þª,xÀi2ݳd`Þ ß„]ËÁŠIµµÔ÷#³:³ø*ÆËNfw›ˆCËR‰´Žýž¥ò*'»?ž¹¥øS ~so]ið«ŽøùA^muŒO–Øû1Xž4z_êwéò?giæZ î×Eõ0™©Ê­ïo4I|JövëZtù661Ÿ~\;Œÿ˜ Æž›»°‰û:šo½%ñþÖq¼¹Áû{hk®í¦Ÿ]%.^H÷Gj¹O9 ÄiÖh]:"Û“pø´Ô_­ÖOò¿‡dI=µDjè™'»ÕÖ¢;÷¹ãyÕgòR?Ðüwð wf€E{ä0üG)ÃÒOÌÎÓº@½èkгºÄ¦ƒC=Sý&в^av’UÃk…:4¾„½:ðèï¾Áyóë|Ë)´«˜ÙnZ¸tNPapÙ²¢‡˜îð›Ñ/É [ƒþ5S&€ B¿}8}±Ð¼êÉÓ8Vp7úýèZñ0SïP\¯ÆÙÍù{.r¡ŽÓËq Ï+£è?¯{ڂȪ >ƒIµâ)×Ð'T ÿ1Ðìa?`¿mV°[ó²NR¹÷Κ>fn*#$qáUñ˜¨ÓB±>ø\ÿ_òƒ?Oè8 _l” Ž_ýÞwGC?q¸šXk«•G¿½«l·5¤z·…ºŠÞ .ªö·Äe~”fÜLâ‡(ÈüêyꯖˆÚræŸgWoŸ¨¸ˆÿh†å&bèE•(ZvÞ„ôd +E|]D¿:£¤GÛè)–í0¾b5ö#‡´ô¯FŠCĸϬð«Ù°ò.âRØçôÓ¦Úvê¯jÃ[uB›ˆz.RSü*õ·i‰\ËÐ%”Œ®ªã ;-â…”a|ÿ>ê¯ðEXޏxŸþ¼9›±e–~bÞÿ²XÛùðÉñ´:<í„Ú<ì{<š'ô1ï8Œâ@Pýn¹–:w,i.”E¯àï»Q—ž.¦Q›S <Œ*ÅLT|y݈àW—¹êÀ˜Æ—ñäÛØñVöÕ´Ï!®ð×ÇÌ?ïÎýŽ-gã5ž‘T!‡)Ïj?`Ò¯i»´OT‰ÀªÍ$«[‹¶XZ”J5|L°ò鯵l¶{èïZóϨK‡G40t7ªÖÊáWMÀë4ò³ ${ÁšÒñçG‰?Ï‘Î`~í‡à¥‚>íP›ŠaAÏÑ„¿w§5>±øU £4ùGM´YË’´¡¿b#ø‘ ¹×ejw_Á D?qlèç‚ÿHN†•ˆø }|‡ð›¨µJhG=<;1nò;ýç%áÏgâáj2‹ï~~§3'ýçÎq;ª÷k%û/oO|#§£ŸX‘JÙtæÅ°Ÿf¾ßÔ÷ 9"k‘,…78@w gàºÖÔi‡kEqôKŽÑWT‚|M¿ZJ7¼«½ë`.žÐ?xÈHGOz*s?¹Â üònøÃðéåÑÂqoÙ+[Èq‹Ê\ïEìj3ªŠ¯Ã©è?­ ¤ “pó OØ•^l/£1} žxÁѬö“{Užƒôq¬·¤á1ÏÎÁAiÍŠK³‰ë+ ÙzÃS}ð€)è*“/£„Õ…ŠNDea:ëÑÝ5ÂñîíC7%5„•Éá/ñ¬$<¦½Júp£³’ì/}ìwÈšÚ™QyK.W^OSUøÜ"IJCþÃKùS- ó–5"/wÑcší+èYŽN’L7©ißI?N; )ðç;ènÌC•p^pKÿê–xËipWü¿ûàoK¯Gò_l]”ˆ½ÃÛ›‹¨ŒVh´jÚE¥*§ë0øÕDµ¡:D½G>¼¿æÏS+ûµÏ¢-hCvø_WzãSťйp!óè?/§º:ß0 ñÃ|ÂË~’>‹£ð¢î(¢×Sbi ÈìUu›kâÁ_0ˆ=ÄÇJ"µ¸ÉsÛAž1‹3™œ3aêÓÅ TΙŸãÐÒE¤‘陬Cþ±„ú«›Øå©x%þ£7ÙÃC}ú7ð#y˜Û””Èd…xá5×Ušâqψ˜tý•¢s.lÌ;Ñ+çK×ß32ø(ðÅôàñŸÐ¥lÁŠ?ÔiØæVøwêÞ‹1`ßà2Øœ™Ø‰Äð·¹æó°Øñ0 ¨Té®~I!¥‚Z‘ˆ}ߟš¿1Å« ^é+6›ºº@*ÃãÅ#}•^GÎ4«R´Öd»\¤Äܹ‹%¼ ¯åûQƒŠ¨øï—Ú}ø`ñU¨ß?Ž/š‰‡:MÅp2Ëóß?0ПîÈOúH²€2T[mç).×KƒÚ Årî’ßèlðÆÆŸ„ŸM ÿ9—5‡â'’Äÿ‹v§Ú™\­šž…,áHÌc¢–³ÄúßemtKUAÞkWè,k¬iLNr’;úô¬0úýB]qUÅjŸ‚M=¡Úûê‡~{ã±<‚Ê^A¬×Góµ^uÑ43•ìj<šUÓà?’éYTgD¬þ£9>ú1 Ãz,y|ºø¦PñSÞ¥pɱÉ?.’ØàÀ»Öäƒ xÈ}˜¢”E.š9íp5E‰LŽÒ±Ñ ¨GrÜq7þfsæXó~ôdÕr5ÈAu kÁЙ–ùµÁúWmë•£àMn¼Ù9ÿÄå²1wêa›é·WYHÍ\–TJaFCóÏf¾H3*ñì.¡¿¬F»E¹¬²Þirè2&Æ™™x‘’Lñ2ÍU¨Õ/¤ûò;õ]—èr3ÎÁÖÜ3éÓ±W7Ê‘Ñ0€š©ìxÚaŽSxý]K¿½1ƘËüô›/ãJWã}ò±¯Áf;ûj»§Y›>þéì{/ÙQQXÿ\r±õRpí¨œH×=ßÿW?ñ¿ îî}aë©D¤hÞNå4þ‹DýÕ¥§k›­:v¾š:åCUñï/†ùóï¶ËÚ}Ñœ7&ù^T훚B½§Ü#ÏË~µNÍ º8ß0 ñÃÔd ÐmϬ‰ÿø,r)ïÕxp÷´WÚHq^œ‰¤þî=å›ÒYÜâÝ[ 73Ÿ9³lÆ6Qì…÷>AT’;6šùµ™Ed0»ÖÌš'ÐfÂ.¯Ð­¾Û; …àcÊá¨XYþ㾈Å}X/â:ÎpˆKsú˜@iîv‹hDᱜ®à©Ï¹{õ¥X kZ…!ýðš+Èt¢ë.šU'÷wÿ\W‡‚Nµ‡ÕY…W»,fq÷Fë¹QÈûI®£^ìâ~oOË ýÝð²®²JU5=ÿ$²¢ŒüÿWPÃ6T½_¿º~5žºYhØ[*x­îþ‰ddÛ±ù-µDaìr?K‰íMŸpô=/u££˜bñœß)ŒæádHñukð~ãe:}\Cùø£Ü—ã0<Àº0^ôä§&ØêŸŽŽ½ºeÖ"Ÿif´–îó”ø…ìq>§.CuÈϹJo,ta²¨úK¹Kߢ‰Æ|ì^jâòkÔœE£*+•¹Z„‰<›Õ°9ÛøæŒòXˆúÝ϶%ÊNòäjò&»³*Rê‘i=6À-E±¿Y õÉL°ü˜ãЯªÈtª‹øø¬õžL)˜bL5ÁÊ!õoƒ7QÉaê¯ Â’´Båë:‡;Ps܈òÕ4ºíãQƒ{Á¸Dÿy£¶yºŽT¯—;õ†L( î?ŸÇÉû޽/Å;ñ¤I¡ff¸”žàW©È´:‚†=âs fÙzÓݸ×|$?29±¼Þkb Iý‰Ò¯#s…ùçSÉ?FÐo öT1ÓÿQ”)c[Ñ/¹Iurú/š-á‘:WѬßb¤d‡Å™ÿˆÿx ¬ŠòlÿHýÕ%[VE8ΪTþÇý1”Ê\ôw;jùµsAó0ÿ£ùÇ@õ.ýƒáY•_wÑù¿B9Ìü¨®ÔÀ¤õ̬٘_û@yþU)m¶æšâïáWñÄ{¢Ò‹¢:g¨ üù3‘þ#7ÖDˆ¨b(“Toª/œ·ίî*Ÿ”îÂG߉©6{†»µžë~ [x‘·²yho‘”ü#¼J¤K7ÓjÛDy*)Gù —܉M¦ HÿQT¿Iß[I¼_üýGbê¯  X|ÜÊ?2'½‡ÿXK|ÎÔ@¼^|¸†:ä9s©g¯Õw<û{ þ|^ÆÑŠpÞᘇ ›NWÄ:li%¢æù¼Çà€¢Ñ¯r˜ ¯µh¬„—u•„9ŠË7‚=%Wû‘þóÞ YŸ©y:ËN§`¥bÈSàW6lÔl²1KuåŒè&¾T™¯õä»_ÁË4cûñ…ñ ߉ò:3ÕÅ_ûžÑÛ¸ æaO* Ïÿ«(«—q¼¹Á×égk¨¦~÷•>¬?9Æ6°Ó±`“«°‡ó@•’à?vÁQ¬ã¹d$ÿXÆîz‘lÔÛi±ÔÐ=“ÑØB_|êJ7cYßs.˜ÛJÔšþOæ:œ£sp+þ£ù‡UsZŒŠ„ö¨÷Dáo ,RðÞ¬Oï”×h4­›*õLÅ\,³›à»pY¨þykJãõS±ŒåXûR¬åçë'sñ¤]ÕÉN+vkÏ]¹†…žEŽF³1þ¼ ý#[àÒÛ}é̇µÍ9CþÔq×ίSލ6x°“`;ä¶7ìj9ùF%ò—ÔèVE·ÏÂâ§Dÿêú ëͦä‡^°p¸Úšä5ÅàýçÖɋΟ ÿaÒo÷åë ~U”ð´°QÍf|>Ræe3±!éÿ(¦ü“\9ì§Þæ×û*=´ø£~D¸ÉyV¯jLüÍ~É®òuË£ì«È[ØW3?ê{LÄ}èGþ1šüuè_éè7gûGøÓ¶ ŠÝq²¥ÇÜÿC9«¬P?©½´ôàW•Ys­Úþ££z“üãâ¯Û©ÿ*ÊYí)¸K;re.µDšøU4pÈjôkûªiÔß«3NKBW°šDUàA¾ŠtÊ]5ÇEĵf?‰ë™áöFï(?”>âx)hɬkY4tš8G4|w·Æ'íŪ¹“K¤`­oT²5q¼¹Á«´•ÕΊ?ñ\c±CÀ¬ù瓱_ ¨Nšƒ¥+F¼|¾w½L ³ÈUÜExÕý vÉ?n/ôiŠÚ•\­:ug@VÁ< ¦âÛšÚ¶Fq*û‹ƒÀä!óhÅ.:ßÒáç6bSPƒ•DŸ)ú„ºbE  Â³ Þ*_ä.øåCtnG¥ç*Œ@vT8èøƒóhÆÔ"ôPÊÒÙíI}ì Yž‘Që´â`õ¹ßVâšta´Æþ$@d¹Q—œf;HQíˆ|Ýè4BqœÝ¹ÊÙÒ ŸpU•Qmèî´ÞDÑ „˪¢.?ŠN•Úc']«±Ô™ìØßS”Ñw°ßiÔÆÂcN ¸›»¹?E\ò¼h븃Ïm«•#0í8¯%‰,†‚ûUF··ýòÍÆDüÅuXs*œVÒÿÑÚlk^Ç· ‹ct#º¬ 1?jƒâ¥~ïã4—¢~éâ¦Äæ„;ZF&²Æ"ž=6ú‰çÑ>ìC®³In6m1Côp¼{Û”…Z,t ð¾ÿ`6È{ý3úìÕY'/î × Î#Õa/Á¯º›ï™?(ìŒ|äTܻϢ>W<ÿü1õWãA (ZÊ ŒdeÑó¤·%Ž}¸Ù×~ ÿÑÎN‡‰ñ”““„­›™Mv¤#k>øÕ{âÌœb›ãþï>ì±¥ ÑÿžÖé\D~'ºrJ™‡ÿh©eÔüWVÙgk¦VU»3ý%õ»~‘_Š?S¹„~{zÕŠ‚þçÓbj-Ñl#¦PÍ9˜ùƒŸƒ¾!òKæÏ©®ö%úä4 É÷L LþQH'ýsà?~F²þêŒC)>ÏoÃ^-Ånå–µ©æ%΀åß î*òˆ$!f0‡¿ÓÆè±l%/ºAEë¬Ò7béAº+½·åd°±"ó·Ô •¦kÞpœáðÖËKýU ®/Ae"ïÔœG®z¯Tƒxî0ü‡ûÛH|ŸJOªEÔÅ[M~Ðëçµ<'Æ‘s-ÕkÁ"/àýÏ-·Â³;²SsÃÔiúÏG(^álÎU©¬§>`Þ#þëú‰Ý°þ–æí}¼îz¢ÒTò à vh?ù;¾é;ŠgaùYÊj­Y }ˆÛnã¹kƒ(”e·šl¯â”ÅØ §Z“ZÉ•XÊÑpöoEÐÀraø‹67íþƒžØ€ÌðœëÈ´‘³Í‡•—PfvùÇir…¬d'«‚P±½ 6µTê½P×¼Nm)&ã2ƒ"ù‚Ö|$®8Í}{/[2Oc9ú%GÀbö£rÞÚØ#;à7+bK‡‘Y ™èìê-4Õg`¯ÍÉ:–ÀB¨ÆI,_jmãPÃu-ØÄ¼wÍ/òø••äe½8åcð yÁ›¨³VìKÿGC}g­2±@=8ƒøÆø«Ób.ÈP2ûâæøöFê¯JS!¶ït_ºŸ¸éQ¨ÈcŽh Þ´z‡Š f_ôcr+üÇx•4ôwSô þc xÛ(C.ògpÕëȹü¨ÍÍ&=DSÇ|k›©À"6–`· ¹t4¡ZüžùƒÑ™ ¸Žùºà)Êã?ššã»ð"µñH{¹s;et£™»?õógë­Q|Ôèìߟ'vAF¥ŽDð ¦1/¥þ#-ùÇS‹›Ô D3Ïàåê*8åîp3»ˆà‹aìf56›±:‰8—Á6J'íÒ—+‰~IxOÚU)­–ÄßLd&qfVù*‰þtݾÑ'ifÂr—Cßú(ß÷•ýî%ºóÕ{.Ú„Ù?8ž*ünd†œAåîþlwöV‚¿û™û§ -|½;UA‹‰¶‚_¥ KÂÓï†ÿ8b«EÿÇîþ,l[VúP6_-‡e˜¢ÞÛYÿáMrˆþW²“ |÷\¾‹¹õZbõS¨#³Hm!¦À£ãðlÆSìËËbÓ;£¸™G÷,Ʊ ú«Ã C à>ÎÁ ¨ÆbY,tHèÓ­~™ñã™°hïYåLúfŸ¸0Ô—©æÊFýÊ|ÃïÔbFÓžL´Püøw‰¬#–W]â´búÙÛcOO“yÈðNéð›qô.cxZûAxß^ô"ö¤Šê¨Za¬sb”wIfœë‰D[§õ‰àWÈôòRñõI?ªÊF¸Š}ÌŠBì\ˆÚÛ3L ŒÁLÛ´àWc¨®Ëýô¥¢¹8ú%>!ò¶AÊ:Îi9ù‚¬¥(½Suíæ ªcë£ß>»ÿÈ(L•skAˆú1ð.YÙxr™ÔF|ñY2¸“Ž'²WÙ¡F¥£òÙýAù ô(%½KÌ öªTQ¿B‰÷//È?bá?Nš¾æd|À½AÔ¯Õç\׋D/Ç»·L©eE½=ŸUy|Nÿi´±§ç¼4×¹‹:±’æUH½†ÿ®§ þ;እѮ K‘²h -V“.’(b´h¦MÒ©iÕŽ]‡¿Jðï$@Cî‹NúypŽÝä.Ê5Ùd%xŠiâ–x®¾ þãóÉO‰Nÿà"y«Ãl V! õWq¨§8Ê7\ã äÃÖO„ÿˆ'"ƒÙµ×Vj›È´¾íîÂ|%&lÌIÓàTêéÁ±jñ&–õég8¼ V‚ÿ(ÆüÚ$ 'MäRª×rR£Ñ6Ú“þó—ÄõqåiVô!Iªç¥Bñ×U©ëˆÃz“ ÖLr…ÕÈ Ka™7á?òK«_þ4¹M*:Ç/aoûˆÊÑ¿.ô“´Ì,Ïu.ÀÃÔë&~± ÈØ]ê¯nó6Î%‰ZpƒÊüÝ.þÿ>œK¥0ýÇôKúã7Òƒ·åžá®ǃ|Ħ·Ò¿kçµ·XØ^²¤\ÏZǰõ)ñEñð5onðF7ÛJ 5Š÷p>9‹Õõ¿.ewqšìâfÕµ¿; B1ÈOÜñI~¬û¿¿K‹÷—Ù•cÕ>š_[†üã5ø”!‡êw裶ôsaYKÒ[–›é|]éÎ[G†Žä&ßý™¤$óëCÏÿHÀ¼Ù¢<‡âØï¼Æ'yüj¿Ì VåAÿyI“Ø{¾¢ùÇj¸©ªÔzݤ_å(ê:õœêR§÷eˆú…wá¹^#¬x;üv&c&l§È\Ôï7“ñ½ …ªNÆ<`.˜œ tÌ𤋮¨ÇU5ETÍ<Î;Q;fÃî&ÿFåo=¸O:Ä£‚Ý3à¥\Ík`u“AÍüàû%ú(9ä>ÑÓñ0~Ø& ßž‘ß·tNræêrמ“䦋b-øšågg²æ?='ÂïÌŠw@ýØáh²âsX绎õ¶*kU)3I/}¾VÆfµ8ìb9VO*Ânâ/¡«ô£§&c¸J¾ÐLl?gaϽ*¸WIôKÆ;Þ½•ÊX-ùG&Nò#fEêò¶‘Ú^ÁœG–+ÕQíØßj±þ0?€áÕd²a}ô‡ÃŸKr£æøÂp*3§ðÒZ›~5ƒ÷Ò-øb4Æ{WÂt¸ÜæêF0¿ö¹Yÿ1ÎHn¿hÄf¢ˆ5ÿ£39ü2êw_cƒò‡@ì—þþá ùGÇÉR”FÊïÍe Þ`4åùG­½Vèßþ㤭¾ZKm£ö¡~7†r=øFâSåv‰¸y‘M/ %Ö¨šúýÄÄëÏÔ„jÇ®#±œ­,>z'Ú’a7Ñ׊‹ðçOÕäàW-Dz± òå/54a¯ëÃüÚžBÃZîrÇÆå•µáZˆÍ <—ˆ§ËÀøQQ/kÅÆè·oåJ_a±öbç5ù L'ˆN|údz_U&RÏM®sL¤pœá°V²~æ¦ô%ç8 \ˆT݈¡3¡?ù KáËÊ•Á…½éa:„8†­§çÒFpߪ“É:‚!çmÑÁ¢Ý‚øómôÔ5_Ⱦ}©MGÔwëo f…;¿6óÏë€7ÍĤ‡[ˆƒÞ’Zº‰4óé=e âôC¬x—^k2Ó ª©î‘}†…_MUVj]aS’ÓÞôêÈ@%,Û[|J}]·µ'T‰uÀšÌâ)YsʳR‰aMM V ¾‹»l9µÂÒo_LerQiJ¼Òr=5v® «¬3ïNîa)ðºì$û<Ã]üÀ¿{4›z#x© Oãè?_Q€¸ø ó ~òýƒàϳç7ÁO Q‡î¼ø¬å¬U•Ãð–K%Ô´ÒÏØãK¢“9Å!/y´¨ ‚úÝRäv³­Ø¿îdX]Œö}¨Ñþ þê0õWSa¬÷ãcÖpÕ'a½_[¸Êý!ê¯.Úú*kðµÁ¯Rpª²ÇJÆüGVªZWÂ*›1³¼'üÇ[c:&ûðÓƒñ–éNœÊ ú\'üjŠú‰÷áÉA_¯?ʘi¦°÷‚Ñ¿b¬còÖZêdcRåO–tо—º¦'‘Ñ@ª'ªáwêŠî!ð«5Ì+Ë»PŒ7VAù1PIŽUüc Ïá)Œ‡+³ àM^¡Ô?ŒÕ»ÁôB¿$çª>,bòö™ÿ±Oi…~b ìS30M?k4´ï¢Ãc7–uy -Í.̼lÖƒ¯™n¼A¹ sG˜ié?OŽpKÜ% ÏøðçGmiBÌÞ|Éü”Nç"äùûÏ?lû•ñð-´2è_Ug•¶Ì?o ŽUß+O~s~Ô›?ùÇät…¸£Ù´/jqõ ÇE[m Ó@^)9~kŸ¹ÄOâç#¢Qcu˜è¨º¦lW“qÊ1éi>õ¼1µ‡ÿþÝëÊe°Hˆÿ€+„‡¶¦:4 –®ÿèíÿ1PïKþ‘B܋Ċ婘#jíXë;t:¹ˆŸsáE~Rsš—ȵ¸}n¬ã!+Bÿ‘B€…\$$–¯þ'*Èz;`LÖüA?lrrüG7Þóõp#¹5«Oçïþ¹Mÿ‡:Á®øYøßÑ Dcõ¬`õk±(Yåt®Ø‡{›q|`¦Xnÿy%—Z xŠž˜÷d™úQÛÿX_H•Y:XJð^DôÑà¼Ïq--Å÷¢®VOÒeÖž˜>™œÍ{÷ž|°#O³(ùÛc*$žQˆíì-KË9øÎ=ÜKWk’%O?9¾ò­AùÇô±ÌÀ3æʃjêË@fƒ[ ÛÊN>w‰/2=*ùÇ<°Ÿ½Ôc~Ò·héþŸÏUÝÄTjsƒ^½ ¾Í™ðÇ›Ð_Î<¿m°¿w™ ¡”_8÷5©ø:ÆŠùñ ?õrþ£/»kv³|í»ñÁôƒÿ ‚¦[c÷¹3ý˜¾ØýÜÔïž½üÐÖ ü*!þãùß%˜«²8ÓDº\ê1|(:éoYÅ¥qÍè~µõ—¾<ïxFG™ ß?%„þÕf梢â ×èKõS2èkj£"ý)ímÐñ= 7ñŒŠe®9 }‰W©ßmAÿ ‡ž&l ÷ñˆ^Šú«¡Žwoý~&‘A0Ì8r–¸ÿ¡ÙéÚà$cºÓjê‰ã1'иƒ•ÚQ‡àÉä'K¿ý;øöш7s©ÃP:icD!Ðï:`?Äe£ lG:#¯á)üÍqfw»§=þóŽôŸ¿¢ :…ù@Ž5kÀŸÇ™õþ¼U¹þ‘þsè'jŽ“Eiöϯ5•ëÊŸê[üG>í„’—5÷ØÜP/iJúc%j¸]Žcãô!‰rEû@?W/pÛ"ýçù‚ú‡‹Úpí²šH-ïØµÓ_ ç¥Å7òàS0*ÛxJÛè÷È£œR‹aqJŠòd§7˜åZƒ;ì¥. ßÞ[ü ö^ß®Ë^‹í4ˆã;ƒ[ÂÝàÄ="b~»Vƒ9ë¯\Tw<Íz:ƒ€Žbåìy4YÝ~³[“â¤=`ÅÝØúF&Ý~NÿéWùG4Ù‡‹£¨Ë^‹áÄÀ“±ÇÀQjéÌ"Ú?•ÿUÒ<‰»˜øËü£€šü*ŠtIŠÆ»gÒ™ËÍèw1»ÌiÌsI ½È?48þ]x„ ø–ô¿ ®P ¾ÖQèw§²k1±Á mU@>ÔaOÈ—úW蟨˜~ì=Ekžh)^번½op¾¹Á«ÍWŠ£×h‡¯œ bU‚þ[A£‡ã?æà7cÕ3Ã!ÛÑòUê?rc‹Gx^~x«àWWƒ— ú4Z+$ÆáϨ_ÏÀ‡SìMÆ<ð ðçölÓæ}øºæZÙû]…ÞîÀ°fÈBÆ"Ñ3Ìs9©¾‰émŽî\–™Ì<nvØþÞ•ìä¦Ó|AEI s þ£ùÇ)¼Í*Y€<¨¢¶+ÔŠ-´@Ñ™ýÝFô³Kþň¤ßíAþ1f:ºã!ˆÎc“4•+Aª3àwì>+KÑïÇŽ:àîâGÖ‰ #Âþ»ª>l¨~|)WõD±¿§Ç渣hM@‡yqº„ÿˆÏê#È?F«Þá]—þ¼¹E_¸ÇLä&¾Áî¬E9*ÍL‘r……?ƒx…]Þš·ÿp_äÒƒºà¥W¨§àÏïq?³ðiØ¿øJ¼õ_áÌŽè;õ{غ¶äcÁ½×rI¨Ô‡‡ ¯ûU¥…îC¼ ¼g~ÑwÔþüô»cÈ ’¡º‚½;ާ´YÝõä4ž6?cÌÐãhak&§iåÅÎAyŸïj~Õ›'[?¹Ñÿjý1¼ð·¨k(ozbyíi/ðøªüôÂæI[Ú;øóîÄëð1.æ1öñ2z¨´ænøó?­ÔØó?^1ÿü>¯(ì×¼ü]( ÞS‹ƒGÛÏY«I^Ñ ¼.1‘ý³ Õ“èŸ(È?4Gì+ô»ÛÉ ÿ„ù°»mM÷1~èuC]á2‘>Ì—«ìÅjäkà?®‘9Že :*õñè?ˆÞ…Gñd=ÇÉænÀF$’«BÌÿx¦ôV·p§Å`Z à­`uLØŽÔÖPª"ZXÕmô)±(eÑ_µ¡ïZT̓ɊM³õ[P³?‘•êbígÖoé%¡ìÊmöÇ«Äó˨Ðð¤ó˺iÅr$ ãYî¾+õƒˆ]p•ù¾èvæ8óUjo=!•Y9¯™ÊóȈJ•Fa4\Q`ÝDÜ”ž(åÀ¯Þ²ý¨rìl~“¯"¦ ŽøKT@èÂ4Ò;‰¢ÄgÕèIçbV¦ÿ»e³¼Èe;ö8þ²RÓc«©ù[f+½9Ϊ Û_͇ÿ¸†Ž8õ%ÿ¸NýyðÛ©ª½ÔÜ¡ÎEðûÑ'øóÉZr½»^]¿ Ö`•]Jkº—ôÔ¦jÏÐ_íˆhPÿþA9¥ßDÕÚŸÜû¢0ô@-š¶[½®w¥ÿîjý–M³^‘ÿ•KØóÅOÑ/܃¸a™x!*©ûµ Ø×XØùIâ;üÇ×H-ç£&׺‰7Ä2û°ES9“é`(^3ÙjyÃIlFNp‹™¨wSG*ÿ¨I§Ø=¢!oòB|Ñ<ð—›DÒñà?L¬s\ÞŸ¢è†J`óÏG‚ÿpU{²c»…/Ñü* ú«›¢9–p5½œNPœڳØçµœ½âW÷´ÔVôÃ3lBðP æj¦³ÆR:àå¤SÝ ²Û+ÇfœÂ³t+Ôƒ¿ØÇ¬j)­½­&‘ ¤£:ЀïVw—Îíþ¼}°z Ï-¬ò~Þ°ÆÛÌ^¬ô üj“>ž×ð•ð`§ð"uPU¾‡S¯b¬Ò‡è—`-º‡Ûó½øyÑÈ?4¾¢¿óÍ ¾Ð½Juò~ÜÍTò¼\Ç2Tt3@œæ‘õ‚1¨¨¸~ÿ‘[nÂwøp.±“3ôä?åó´Zb2ž¼ û]¢÷pN>p wè’Éô…ÿð5 нT·€³ÛÓöîá?^Óÿª¬±CLsºß“üI Á\D©¢°:gë ¨ÕÈJmÆ bé¬Ö,zæºß§3ßâ‹Èêh¹ÎáW•Ñ4ÐF‡Z±³æBT`÷7.kО,.¨¯VšÍd)*#V²Ö rQæ#úWµ ÿ¨~uF~/ÙÅEòªä"tçÍ…"ûäG4œB‡ó›ÒÉ<μ{þy&*6ƒíÄ`JUbË¥{Q&âN·êÊ®|55Ëâ.w—?ã|®ÿú¬äV8O–†ÿ0ú½Ÿ¨*1ÞÌpüÇ!¥<ýK¨°‡…Y ~%ñÕñtUPóV Ã_ûtýU °,opÐãØ‹ góôLZØÓ=C+.‚gffJ‡?Êß'ìØÎuêÃSÓ—¢ õÑÅV¤É þ=6Ñ»?>9š9 5ßΟæõSäuvùÏ0úÝI¢0xÓ>Î!Ù5Àcæ®ÂJ_” Àn¦à?’‡<0?È^tߨɮN­É?u7]å£üÇð+/#%;rüï>oS}»«lGRüÇ$&2U°Ž3pe ó?Ê£rõ@EÖ‹g“˜;È@œ´0„öq­:üêO¹‘çuþ¼,ŒË,sTøó-ÌŸZÓ3(?š#.õ„ÑNu6›¡ßUÈ:·É²¨Ë÷óká?bÒ׺„1ÿá)^ͤŽ\ÌNfäoæ÷%VyÖüÊ øvø”&fê?ò;Ťç¥ÈAN| ªõÁåóÂ1¶1ãA4«ÃÇ*ŠR9€*Éã<ÙŒŽ½äYÀÛÚÑ¿d3Õ§¹Ì™àWÁ»vÑ":|]±åWFáÿãߟS↨Œ¢výM^!øÒLõ¦:B‹÷(n÷Oô¿ªÈôñZ=UU¼BÈOºzRÿ(ܱ.ʼnRá?²j'éŸØœúóiú^-ŽìõB~߯>7¥ãHt­õɰkÚ1ƒ(­&Ñm¼ÜDg»Tçz³ÔÝš ü‡/1Ée™žŒ+âdð¾šÖ"ó©yåÚ<Ô\ïè»`PÇQÿ±-Ewr³Šò<úÝib°óÝ›¥Ž!ÿHÿXImÔñɸg¥I7«:†tä/ëafj¢së†/Áû9º“Ø]J3· /ç}‘ózQ>PdiMŒ“ÎpÀw¬·òâã.0å=ºc·9\Š£ LÊqj‹XiP¡e ª%Y 7±p¤¦Õ97åéÃc%YÿñåuæPç,ò?æƒrKmƒ~·‘^DßÄŸŸ¦~°œ–‡ùç¯Tð¨È/ÅW~‡?)ðçÂÊÄb~mí=3mGŠÊðçG4‡–ú·®³…ø sþã<çq9ür2õ›VKŸDD¡~Ð2d$çøÐÿª gæ«4XÎyjºêS ב<¶ö¬ÄÁ·ErlÓ»#¼çlêX¾~}ž¾§/&RLMƒŽDß[ê ([á%Obe=íŸd¼ŽpŠümšñ6´¿ø•­ß€Fó(Hcb:OâðC¨Ÿ2Ánâ늗¿¹¡yFõ-?¾a0JÔXd3"±®d3Ÿðôö0ì‰B?@Ø^áŽãM—°#ÞäŒÃůæ©'ô\Õc¢QŠk8ÂWO¢SCÒÉø ûꆹXÂêOán×óvºÐ?ñÈM•Ð×eÿÉWi«ßÆÏ~0FR5V”n‰+ŒŠxÝjàý]@þ_‘uÔBuž7&÷íÖn;²‚ël¨gÐÂj/FkÄ`ÎB*<­/ë}†õ9 šƒ™®E`–ËÓ÷Oøí T£ïÅN% åjxt_éºò§þ‰þàW9ð‹9øª[h–.²çàÏs˜ÇäEºìe‚]¾ÊüÚ³ÌÒÈ?RR÷r‡ÑŸT [—X›êìÔ×^‰Ö¨*ÎmÂR+x®ñ õ-èÉè‰ú4õjçÁ\n“?tág”¢£ïZvavÿþãÞ2Ôz“É?êóã&±Ú[9Ÿ½¡`sÕ‚æG¥‡?ÿÂ=_"ŸÉ`훇.a£ýK2É¢¡ó¡|Sz‘ä@õÌõ;]Ÿª”{ø×LKYÃ|æðÜ©©x@¥ø.s$}°F 5L¶õoŸ îj¶Žb¦«{´¯AüÇã©Ì‚7ʃ°œúóäqà*ókW[Vlë:]=àªX«ŒÄDHóɲ/3ÿc˜àôêt=§©$ïPryJ$‘Í:ŽŽðäe¨P $3¸‡’Ý­ ½ªZá?þÀ47 ‰Y2Ñ`0ä%ÎSx,ˆ?¯L$5ïÍÈO½ùhê—˜G¨%YÅ<öÁŽåŽDŽtŽqäç™Ý[’êô‘VfÙ ÜÜ|ú<º¼²b“sÿ½—•XÔöýýó¾+nj2çŸþþÛÈýþCy 6Ð\`? 邿ì¦ÿn&Øö§óú[åPä–ù¿_õYÙ©ÛÝ‘š²£Gá¶ß2ñü¦zGï.\õqú!ô»¿×?1¯xˆUÙ°…(ÕC|BøCË%õÓ¿êcñ'BFLÿÓ¥îe~m}@â.*õ&ÛfASñ^´â)¶'n.¤Óï/R€DÆg– ~p¨†u™ _¼üê6v8 Vð/ÞœÔØüÔ$…­[+~DølþP‡’©¬ +—ëÈ]2áI¯§3Ñ9l|òñ|üœ±(cãê%#Xñ¢æ£Ð ?é{ûAŒ¿ÉU-CçZ«g+¤.ãCóHÌ¡Hq·_ö/I¥fÓÒ€ ŒÃžÅÃ×Jv­%>â½±†Èµ²1”$&Èu8 +hK'Àl‡³ª¦+á\åhuƒÞ§ù™ü£$¸‰ÝUãOží7j÷ÇQÄ&Ý…ÊîF²Œ\BܹˆJ¢Ìøa ÿWÓùæ?ç]Ôœ/}kŒ'~ΠDZ 4ûµ»´ ä*_âÞt'×˜Ž«\ÆC`‘Ö]õ„?ÍÿX¨Õ}ácRƒÑxàÍ< KôŽ~„¥éjQš:|æIê?*¡ßµó.W¾®V°ƒ,€mæŽðé9iP¾21Jò‰È5¨Á3Óc­zXŸ¬Øæ3&õ% ÿÈMÝË=²tõ(K –S›jÅ–ÚwÔfÛ©Ó,„l†ßN>Ý,I6°õPbÇSúi ‡áïÂü¨xÀ °3 +‹åÖû¢Ûâ‚ eɲNUUÃDÇLéî†ÿhOÿ«µø·÷æfžÔ?|V®ªÀ¯è5õ3j}VÙ­T¡þ¼š6åm€r'ÂB~A u‡þPô`G3á?îjþZí8=S °L?HÿÝ,¿u®â¨ø1Q–hµÚ‡s¢¦ªëY±ö¾ú;}"s…îjÁ}ÀB^IØÏûá?:‰;x»Ø¼9ø‘tÄ4þ¢·8ýþã1xZUâèËd}x;?ÕÃúwª‚oDÈ=½Á:Œ¶«­“QÛwÝÌ>˜ºé(ä à?Æ`íó¡lòä?v•4½º£Öpø¦d£çÉR7c©ãRy2™ÚðVÄæ³ˆÍ8>ÐÑcùŒ­ßÝÈjñ@öžp#É2²oÂÌœ+*Êšø­F9ð?Øì¹Xú6&½}ͨŽMèþ2Ciz¬‘è¯ö¢ G´°øêé£Éí¢³óÑ^§~p=8n3X±âÄ<ƒñqšv]÷fnM£¿Tnë÷P1þ¢1ýx=ÉûÁv¿'‡Õ@‡z†˜?¸ü*Šl[Å}AÚ}Ö²Áá§ã½w©™ŠçíË=³âÀðûƒ&£Wüy2õöè&ŠÊFK&Ìõsú¹ÌŒÆ ÎÇ©z޼ùG)G |PžÃ}¥+àaÒwD€³å¢$µ/ð­y>¹Ýëô^j{}¨(ŽõhK^žÁ(auLµÒ¢¿º –8šlkókc9R8ÑÑò'纻BVü‡à ¹&-¦ý¯Ìÿ¸FýG°îÈTûÿãþ‰ºzG­¯i°Uô£Aók*•µ|ôoŸ¦Ý¦Çï1çùˆÌ‡Ê6ýrKxÕÌ&?«}T÷¨ûôÖ áã™ÿ‘B o¦Ð¯W. žCu†(>’}¤ó¿iùˆ¤¾êéŸþA¼‰dÿÄj,­x‰}óÆb-‡WÈ*Ë1w,ü¹˜xÖoŒÿH!ôgø×WVN_¢/¥ðC³°F °ïv'Žtò+H–;~ä|¼Ý= þãE„þ#‡:kêEœýÃhAýaF*½¯¡cƒw*@æ±Î n9ï±kÓ =_+^Ǽƌ2VaOñ’ìX/» kR«³kïû‰:ù½Ø·ò¢­zà7û‡šFËF~ÐEr"ð¤¯â™Ñ,¾A^Ô.…ÈïÁ ?#Vw'CñÀß± /ÿ˜­nÒ'á_ƒ„U$ÿ¸Nt^Ž•?Á —4V£ãx>Òøq,^Ý v2ýÿÙPóÿ|G•&úÑ ÿá^U…v9÷;Ãh ÷Ñ®w) FUüÇi0ö`Cûyò‹ÉÖ‚ –ÓÓia‘J­¥˜À“0ÈY6ÂÜ¿:ˆm}LýC3âÊ"ôIÊrU üj=þ#vj9ð,\v& ó\N©_DÉP.íA+u,Ä>[[ºƒ)%Qª/s&^0ÖÅK ]E´MˉŸ'À§d0ŠkãC­Ø\‹B>¾SWÙŽH?9ÕãÍÚ2ùÇrz›¿f~T'ø‹¶Ô«ƒÊŒªë\ûPìiV¦æÔ µÞ øjÄ'ÞD-v·¯ûàW èµ^Ö»™Ì¤&Ëún­4¯â?¢2m¶ ç§9žk)9RB3–\¢þã&Q¬­ó¨ÎÙ/ƒio´ÂS¾ÆO<§Z ú«RÔ碲®3ªX?zœ×²VàÛú°Ó?Xõ;ïäXñÜù½ÔZ22{zÚy™oTq1^£œ5º’ÉÌþpÃâ¿$_ð1ï‚;Uãgm R x€_€ÿ˜%Æ:ýÇbu–îB T€§ÿƒI‡_ŒbÔ[æ%*a¥ ¯œa$‡ÉI•ü[|@5üJQêk™ÀeßqΈ"øÿ`þcÚ\¾ï˜±ç[ñÁô§~° ûçkî¥7‹›Õß±Ú…úÚTîä+óûËUvG¿–SýØH$SˆÃÎ;þ÷>ÜV’‡¨TÕÎjŠPç"òW¢ª¯Õvšª7щ¨ƒú—x1¿¶¨VJ„þê­¶Âê?¯¬ÁŸ¿ý°!±ž)õÓš@¿ë‡~·öö”Wû½ë¬#4ÐB_QŽ8¿µŸEqæ#¦‹Ó½üêi$çQãh]ñ>XzD 'ÐÎÕq¶Fs7Z Â°6³˜þñM÷ùÏ7ô¯MáÏg »ù@b {ž†HQ*Þ‚hrQýQ˜žUWE"ÿH¯Îàþvˆ¨D¾UˆÃ’`5_ »“ìNp߯FÐÝØ5?~R8Ÿ\<í³Ú*<úòßNò·çb9×Xk±:•±z+QKmáÚ3q½gñ í±|améß›\ͧeÂL'H»‹z»Â磱ë\̘Lœ.‰a_Ã\ÚgW‘7ø1³<Ÿø÷!~_Dý`/îç y@ 4\¶."ŒÔ[qP[üA #Ð,FÆæJïÅÃäFCÉ”:&8>¢ièKsš™»±Ñ_õµÊÊ~Բυÿ¸Œš"ú¥ÿ®“6‚+5?(Õì¡ÎÙß÷ñïBõQûP?Ø]ÏŽþ*/«¡bE­ó?ÔÀßÔ_%Q?ëÏA£åÿ‚ñP‹®ù«7ô~¢®>Jߌÿø½ü£‰ˆ%‡õ¿zBô½]\ÆÕÒó&dÇÒo¯Ä“HæÏTf))}ÐÎ×%ß8w\ Ë:þí]ø“]aWé”™é€ýnKêÏ磿z ³EÌãëdåüJÖðUÝ…°³ù±"1ÿ¼:•[Dÿ]»¢y ‘g2øóú0;A‘/×ÿ2SÜb;ú«¿´J<í›äÏðg“øú¾ä-ñccàÏ—RP‘n¢Ó‰÷·û—¡Çebñ1¢Ï/ýGNµ¹V”ìb$*“x¬öP¼æ ÷àoFɧ¬;Ìþ+8=8 ¾¶žèø6ž¹œ=œ«\Ïüó‘Tÿ¿A*ÏwÂ"ßzBLXÖØ®OÒŸ©÷žÌd_íîóÑY+O§—óÍ >Õ×”¦ÌêmDG_Ôk™Ô»8žÉîÆÑ›9L¿2ÙÇô40´›¹ëÍ<±KdÃõ(ڛू>íÑZ¡oªI¾p”œ¢*jìöÜQù~¢²¹ͯ™î¢>þcO*<¿ð%?½"5i3ÃÜñCð«¬dX9Ø÷÷0ñ‡Áñ““!gžP|8doêÏ ¿f€M) Û½ ÝØ Yš^5´Ð‰´˜ìü~ã&½h¶€<ŧ·•;½©šÑe–µÿñüªýPšQ¡r'“è/Ö›…=ÍgÄ Ó?Ñ-ˆÿð%ÿ(_xeœ¡þ|;Z­ô~C=I^ú—s½“CÍhÖrº¹XgzƒÂE3£3E#˜?®LRwñÙ‘'ìÿ Ø· ôxI;iÕ!KšLôstñõ¤No<ókëÒk ¹áp°°o|×'°ú!¸Çmêvíëâô’™QˆY¨¦{ÁšÇ£}3‡XïÑN£æ% S!Ó'¾ ºY[¿ÛŠn_%°õ-˜ÿ1Æé?–ѹ3 ï•=½úXñ#ã =¾ ãÁ‹Ò!øýÃŽ€­•&ox‰R»©ÕÏÊc¾"—+GvkOý(*ƒJ÷O<¡¤^IüGt‰Ù …z:£ó Ïÿø™>Ž5Í‘Í1½ÙjTâXYP–mˆ‰f_߇Y)$ö‡9ƒÿÆ+1ÕÎd©~s.“ó[ùç-´Z=¾]-Æù?¦F•[›ÿñN îGü=¿þU½ÿ˜†m¨@½M&ý£«úò±úb-³ö{u*Í…!Ç€„µ5n`_7à/*â?â‰giš!„qç' MøWwKý¡Žö„Š­`kžØåL²6 wwáeWØë¸30Qˆ3þZöß6Ôè QÝÇ®.a=Kž+/È;øêɸò.øÕ{‘üj©¸ƪü¼jju"Ñ÷&ñU¤$ªÝNHýy³ Z|a7oä-lèò&Ëø¬•Ž`ÅçÚ(ø‰^œl/¨þ¢ ìü(NëzÁ¦®ÂúoG{œÄ=•Ö@&wÿjÒýŸjUíO¢ºžÔÆ'ú ÏÈ0¢ š—ÌeØŒJj¹•¿á öbo/àGÄP=<­öJò‰X„oäCùžóÜUê]î€T6‘Õ½¿êŽnsOjYORrƒúN·püÇQ¥³î-ÜÈ^ÆÀb"†ÝJöW†ï¨ ®4ƒ¬£ùÇe|HT®Òîü±ÿqlÑ]O¤Ý ó(f2ÿ|+€ßÙç×doÉ`>Ê–xŒýôWò§vã õe°±ÍY½‚¼^êˆS¼ð0Ïåþ#7úδ Ha§O’_z£VMoÞ¡þ#•ôÄÏ2Í'øÕœKg2{VÕ^r†Éð‰rZ×P+öÑL2¢õpxeàØk=jDöÃÍúôqŸfí¿z Lµý›âç‚ÿx‚í ÿ9Œ'‹fB{KQÜî°HüÔøÎð—«Ìåð è|øl¨ üù'ú·¿¿ŠMÿÝAL iBÿ«MÔcÆ0“Ê!òkÊu QDAX£ò ª¤ŠÜÕ³;Ú¦œ\co« (Q¬ôk>1z¬öžÍpøsaV!òÚft Á=n¡ûs” ûðøûe&î8ªÙ¯a8èZlJ¿'`Vä#1˜ÿq˜J–TßçMìEöVƒûm$fŠžNÿ1‘ùçÙ»+øæ ¬7Ý>ÍØôOÿ!èñµüÏ‹Žúm©yÙÆ4ÛåV:ºŽt2KóF€±x°ƒÆ<ç)ô£ÊX,À@âƒä "ïÍŽ%ä@;¨çlCWš%ÖæÜdÆúúGî¡F%ÓÑûZùe_T`¶þê=8iN±5Ìü7þxB‰ªÞsþ MuS“‡:gΊðCRõ’:M3ôþÌ<¡fdêKku©¼ÅLì³®ò ²¨Ïô§b³+¬wý–ö]½ ¾×ÛˆÌ?_¯ÅÔ~O'V üªHa"VWêë¶3§ûhJV#©È(V ëô×Þ†¼€_~¾Šï)`/yûj°Ø8©Ýãq„ؽ¿F¬^”¼Äìã‘þ+& äâíõÉøêX"wP¦µœ1?lkZ"ró‘ÿ‘ÝSbê‘âI„Ϧ½:sD¸àyJÁ¤‚%¿ ~µf¥¢ôÅêià×Õ°zsÉ£çG½Ñ†ƒõD[¸øè‘èFÖ>-äjìXA,éròËTAd'‚>ÓKŒW…ÚåT[k°‡rük |Í'q‹=æ{²ôÇëu€ëv!2SñDGÁ–Ánœ£æ¯¦ž²aƒºW1åpöæù€­ß­I¶t‘Õçêgõë(‹ƒ_/ÅWî#Ñé÷Ÿžþê¬ÒŒ*ÎìÎð+{žÒFø²ñF.púVðSà_«c¯/ÇBËãÅ“ßÍ®>ÃÃMÑõŸüÇ8²AÄ>©ÀU¶Ã¿ÄßBÍõ†xÔß‚nx€0]–þˆŠ‰ê½‹(A‡”3Ú§ßÔ—‰áQ¯‰&Ø’´0ÑÏè5CKƒÿˆ&êÏ_ŠÇš¿sþÓ‡sÌš)b bÚ O¾‰õRÊÒtœ*öÂ3£v£H/º—Ä‘ñ™uÐÌ¢þã.ÑÌBò„o`"µ@™ùKíBÎPN-Uç…â<ÿºÂìêxâÔ".Hy}TIˆ“nq×KÈéKÉ ð:W^Šk_‡2:ªÑ´°GàWOáºíI±c©ŸèŒ…î*3X¯$•tËÀ6û§æó âñþX¾_©–³2¿¶"lÇô@Éñã©hΞÝ%ÿøDþÑ[ÿÌê9ŠÝ›pÙØ'þ-œÛõ¿êt?ýÐÉ^Ç“ÔàÝÌCÜj#~È2^b?Û’%Í&ò_Oþ‘•JÊ8Ü{盼ìvüÇAÑïß‘Ï8ƒ_„§ìŽuíƒ&+*ÛÓxƒsx’|ìá¼Ûb|•¯1Rÿ®†=ÝcµÊÂÖªå¢æð lD~ÕVËßÕ,NÍB ù׈nê‹f¨‘xor†TLú©þüú‰ åF†=…üdWê~• Û~Š~ÞѬ™ð¿qÉ?Š‚Í [(–õìË2ª[S¥µN¡ä\Ý% l Oô?‘Þª…ÿ ~Í´¨ŒèLÿ*³ÞcØçþpU/ÙÇXD ÓBÌNØÂ¤†ïDdÉiWÈäFünc|®tÔ³æÐw,“·úÑ1 ø•7ýKúY…èn²+èLÍdp¯ºôOœç|÷fQÿõyENßjuË—ôhIO1œç°ƒüh¾¼ë\5ñ¤=Aݼ¨”o ËÀYUŒ¦øààú_ê§¢ BŒ^þ¼Yþ£Sb€_âÏ}Ñõ¹ÞÅæek+|×k9Äj%»‘¬¤ÛÝT¹Dd¢Uç&ÿ/}ØDýùçZ/•~ÿ¸~Ð…þ»ƒ´—ZG=“~E-ÌiõQÚ‚^¹2=€ÞΟ™_•çô¸ƒ i‚aéOÐ_­!'€þÊM_¦ý¥Æõ>D´f5‘BŽF)ݘ3ä ºôT䤫Zr…/z1G¨Æ÷HúgÌZ)rª¶`a<‰¸Ò1¾G¡qÞâzaÎH_‘AdŠ”"¢õô#E¦ ÌeIÈ«ð)Qäb·“È;h•î‰\ä4Ç"Qÿ‘F…[Gœf–Åﮉ_Ú–â Ú–„¨$ˆÓ2lxÂ0,èÏ»xÿñ öÃ3’J’¾ ~‰ª×ƒÊØüù(x›ad ™à?ÎÁŒ óø¯¼fvµ0;þŠ -&\Ä8r¶k¢võ!ýÛaùû£èŠº¾šì;»guœÞ_Ýõðze.c õ,àoÕÁñϱëùA¥_ãóô9ðvEž+ú]»Æq:ïæ]ti…Â_»]鉊º%ñøD|NNê±g³Kó¨™ä=ZàSª h:†ÿ(Žé‘Ã.ò“³äIS˜?x;ÌÖÒ:[•`·’±Ô""ïÆ½”§r£.}¯N˜ÍéXk_•úÝ(U“a¡}Aub}³‚m„íßî«~I¹Ó4ØÜûx?t¨ Íð©í΂T'BåJþ1ož—¯ÚLÎ0R¿j†ÿè§}ؽ (6“a¿Ro0‹Jðæj&€ÇrÜCìn^”m`ÁOq%ðÏÁ›FƒReùÉÔ%¹ƒ³DP 7.Ê©èw»‚Í•;ž‡é “+n‚‡õ¢âÛÿ1¯ºž,vÓÈm!ú_]W«ëˆœÊ{ø;¼M˜Êû”šðØVOjƒ_d†ë2ê>F¡QêÈ”¥1(&ÂÎ| Ó£FÜÔ^‘ÌEýŽç=ƒ½_‡wnŽÿØ‚ÚÍ­‡ùžùQ_ྷ[ºÃÄâŸgzVI³¡åM¦Üž,)ÜCÿÄIb”ÓŒ`òŒ .\¼àÑ™)¢ß͈Ҷ;YÇK”]‡á?JYÈ—RA>‚iOª££™þã%ïögakº‚§ÐœT»Ád!~l†÷HIþ‘žì¯8¾ç0yê{x•ŽÃŽÏV|ú'Ç­Àcf þ#¯t#ÿX„U»Á[•TlwÞñ¿÷á¸[ ¡]W;©áÍê‰Ìõ¸ÀO¸ÁÔ$ÿ8¤ÚÓ*åµüè¯ú ¿ºõ›úÝïôOü &«æ¡ÿî{í™–TóR¯è­D}´¾N‹­E®[ÕßWÞF¸ÅË"£™/nã?NQßÈJþ1zÂû?q oèß/Ñ¿dgæ ÈEUc9<ˆÝ¿ä¥,öÁ‘îäï ‚¤¸ƒŠ¥‹ÔD—fÌsŸˆ~÷9çg>ˆÍ·"ÿˆÉ[èAÔä2é3ªÓºÔFœdV‚N­ôƒäMZŠï‰…ÿmGþAßa|ÞN#–¤g™ü¸7S·ç|ý§_×µ9Xó¾`ÐgPW]&ÿ(‰¦z/PŠ\è‚ßíÃ2æ$ê³g/ÔàÉÓ¡WΤþ©¥$ã ¾”’lý3O¡cg4‹ø<­Ñ‹ 4æÿñŽYr3øÚBìþ%Ôcôð´v[Õº;?ý ×ÕgqÖ©(ÚéOxRÆøóà#Ý@°æ`'Ë% šÿQÝèNþ±\iÍÈ6ìþú7åGj÷oMÆ0–ü£7,zlìÝz‘x£•Êþ°íÄlâ÷#äq´`kõ?÷f>Å#ÿÖ_=V:¨³a¯kÁ}äuš„~·-¨! ËßÛ¼Ï̉^y Í!Ô¬5¬qäšàS³,•S!âŠóðmQ·h±Î^ž˜üƒè?¶¹‘=W–ù·w¹ßG0)ëÀì\`¥À7ä$×ÙAþ1ÿ[JWúïŽpú‘ª§î@'•Ÿ¬ö1ÑÿgÃÇ´%©!iBä]s?µìLçÀ«)ÖüGeªý¨¯oø 5åáŠõž_ë ÿ±…ÌÞ…ìøæû¦+üG1s¹Qîr”ÕϱߑÄñŽî¾­íêNüGZP¼Â²3øeT0¾ó-*¼œwüï}¸ ü¡£QÔnÿX¿•ùQîšÅüÚ¼úå ù绘?XF+¯uÐ.ã£ÂNØùÏ÷èPoR> ̤qjú—äÑ.¨¯éÓ•ús-ö{ùG;,þH F ÕŒýX®<ª©—ÂâÔÅø·‘äÏOÒpšÐ9×'ÁVf”åÐ8M¿êŽh‰jfŒBSDk§o¡{9ü±ØøE ™>`:I@¤É©Fzâ¯$d79ˆ±×EBUUõÀß±Œäă°§‰±Àí‰éc).¢¸±gk”å:ÀDÕ넲*??“@m-öØ Ÿ±ÿ½Ao[?W­éÞ¬ÄÒƒwr>¬svüÝ%âõNÔŸw޽ž«ÚY+ˆ"™úuøóÞ òOaf:pöÝå}4=“A4LÞÖ}\#ù=¾yÅS&Þ‡ç?öSa:†¯ÐÑÕÕ!oØÇU¦ý±óyõúm™qX¡q°>'ñű`5´Õ•Ãñ~J}ŸhïŽÿ(MeË4ð°äl ˆÎéÏEÚÿq k™Ž˜t×·–ëóF+œP ;)lµÖEŒ‡Ìâå‹'÷ç>ORøƒ~P•¨ (s›Ò¼AwRd­Qt5ó™Žfj$§i%]ðCïÝCUg×ZÃ'oÅ~A ”¼&=øÕMyÏLGý‡ ¢ æ{ìuRs T)ÔRÛƒøî|gmj¨GiQñº;8PAu"fOFõà,s½W`K“ ¿ºÔ¿¤ Uä»yÖEˆîó(øÙ)NXzòq‘–Lo?ømqи¸äYKˆž™÷dó5…TLf‚oäú:D£Êew¼'´KÆ¿Z,ú;oø2U]Ä9i op®®¢0ê+ó‘úÁØVw4ÆÃ°ûÞð›Ðﺛ§¨Ñ.Ëüsx_/ðÁ&dîÛà?‚EOøj]ì±–L_G_‘XTWT£Œ š1¾‡ù[ÑPUï¢Þ/)SËדÇö&§©!×ÒUz¸èîôËÔ­z*”Ù¿+(½rÉäôoÏ ~Õ˜üÃþh3³ý¯ÌiÀß—aêQÙ~Ââü%ò‚ôsžÂój?:•ç„üÓx`Nvl±j ²¸E.3/9Á±‚êÁŽúÜÿæ&ÓìlUÑý!fP{öˆÝ*(~¯ÂιÝÿOü”t!ê?tµ{óýO–ÔÔãjwæGµÐ]™e«Ãï(]´ÎZcm˜ö”úàx 2«'QŸÒ¿½¹*¨u)æ×VÐí‹>\4Ù>«ÅÒR†z"Z³ªø+}AT&Ž.EÓ "›z‡ü#·ñ‡øC,‚ÿ¸£}‰h‘ ¿~5IÄD•qˆz® à&YÉ?ÄôWƒŒÛØÅj H£P_ÅÿQO_©{Š ¼Évÿ’EÄ]§¹ÒÄD„ ˆ[âàFY°Eë#Ñÿª‘:Œ稈Ήª#WÁ§jEžtÐÈÏ›¿ ^ý¹Ì-Ëp 3Åáç ø -ãèOŒo÷çz~UݘläÁ.ÙõYäbªÿ|`†ÿDË{š;hEýGØY௚@-«Å'KOFNóAœÅu"óM|žÇÂ0Óöo®xe¾€ÿPÂyÖ[Õõz?"À¢¶ÆUlƒÝ}·0×óËx_?¦¿Â~ÚZªÙxÏä )ñEqxëÃëå…~÷á#1þ94XÛÉ?¾Ó þýÒâßwÃ)ôãg–[à?ˆÎNÿ1ýUròåʆÝ=ô¨ˆ#71•< 9Gg+-<Ïc´\øª^Ô;®2Ë‘‡T1¯ÐÓ× ô–xø›¨„²¥·Ó\a~íQD·-oF.㜙ܱ¤jyÖÏl’EÖ&ú·'vxã…Û›>ÔŸ§Å4³JPÑG@Îÿ2Rˆõ!ð¿ôù°"ÕàÞÓ?”6ÿx~”®S‚_1-NßÄŸŸPšR^DëDÿ«Ûʵߺ£têý¸Kkb§"¡~GËÉÌóWúQý®·öü7ý\QE1öˆ’Æ:ìëNá/’ª›´ D_tS "yÉùQþjTð+»ÿî6âܹX‘”²üù4qfà$C6ÎH'WÄ¿R"…ÜŠú<}ž( þ2œxw¸Är˜TÒIª+2c)вz&ìë6ñ>Ô;r•¿?WP'9ÈTY–%ë:„ýdW× Âî_¦ÿ•ÎU®P÷ëcáH>à±›¢ÚõAMò UÌ¡ÑX—y¬à–a»'…ß±ùŠæÎ77øÏ(u/â•7Æ¢q»3=}ñ9®Ø¹†äGvo•FðçDZÉYXóçhxÝVîÌü'ÁK}Z ÿ1Ÿ ÉGV•`›ñFO©?/Gýy "èDt“*”ô þ"yÊpìn™‹þ»aõW÷Õ7ø¾¦œ‡© WÄÒ&Zâ|Ô Áã?bÓ')«r‡þ¹aã ÊbdKkQ$ åt&1Êk#Cí¡;ýKšãŸïEÈ­J£žûÆ•õ7k3©i¾µnàÈ{[êÿÜ貕»Ï‚bâ9ÿ+é¶ ÿÑ(Ôz]D)~¢j’|(s?ÇáÏ=ÍÑæ.<ä3*r€_}uò£/V|úïvA[´œ!ƒùŽm;xG‹~7&žà6ùÇmâRà|/É3ò2Ù©õç©ÿH¿laõF?ÕÜh4ëôÅ[þ…ŽAÞÝWø9×[¨žÑâˬxf’ÉbT夆±ýJšXÓÌ=TrÀ¤l±L‡A>r–úÁD°#ž<»¶àWÙÀ*k‰a!ú_ͧóÁw‘ˆ,~>±Î32˜‹U¬±ä ©¬gtÐÚG6XŽ*š·pàUñz•™1ÒάA^ý¯Ãh >;Õy O©ô­ Ø3‰ óÆÞ£ã}Oô»‹èÍÒŠ*Îåô/ÙäøÃ!ÕQŸ°Vƒ‰%@ÍœSv%\ >s-ªØì¼ã‚nÊù㢩íÔL¡Î…óŸ"üHÝAÿöÇZ3=¶¾1ˆ…¿§4Ò22ÿ£µv^ý¬D¦–.ø‡dWëWá3 €²¬¦‰ ßm$Òë=ñÕT¿uEÅ+ÔR;ðsÁN‹¢ªê«e#&Ý«_¢þûüÇàÿ>¢‹ì¡ÊX¸’<ó°ÉEéPµF€º’“#2)IÇœDâ©þ+$'äòu˜§¸‘¼èhû,ð|…ø®Ñåwð×é ¦§Éh‰”Ø€iâs„÷\V탮j­HÂûWä&»Í®MÁ/-'Ò¼ŒZè+¹GM®}œM`„]Ä´¡ kˆWA?‚ÿ¨òUu¥¬§¼Æà9@Lù[ÞÕ()Úÿrþ`ô»¹ðCˆ‡“ÑYà©ø!zâ#LÔ\É3ǰbTüÇÃ[¹¾Áø– ô\¯nýàFu›Þ<î9o]®Á f²<ï´”oðÝô£ºÝÿª¹ÄŒ µÙ8¼–7ýK²%œonðs8§´ÑϱOoŒ)² Ñ{4²–ÆøÆøÉÔº´â^mÿq´'.ÿîƒí â¸?\Eý¾BkD6Sþê0;U…oEþQýúó6ØÒÄfìt=ôWaŠ‹§2°1üÇ 1=ì“ÆÞÇÁ¥Ã¢¥‹ãE#!WS…(Ðï&iÞ—þèÅèi2Ѝ¹:¹Ò,tkò$è¯&‡Z±+õç±=þDø³ˆâÈØðÍÆøò…ØŽ“ :½è72îêIrÁ¤¼ ãzO|gbêCÏê, Á\æ9ä ƒŠŠŸÿáf’š_QÇþA-ÄyªõnÑe+‘u‚;ž!k²3[ÈçršIäôúÝÇàWh•ÊP©”Dž¡Þ¨,SSt¦2%£ûì}at¶Ù±Ï•™ò˜ü¡5”u:à/U³%ÏnªÚ`ýîvü‡ƒüã1ÆNê?ŠRñ¾†ã +.¥¯Ö:µtsR_Í£ô/™ËìØ²ÖNÑ6h› È%(¾;…˜îIæ«pšòóNIùH¼6N¢(ÏœŽñèÌž0÷0>(5‰ÏÈ?j¢Êªj^%srEWø ÿaÐ*®ržÂê8} ä`rû¬zÀLᘆx‹ù‚« àiÌ‚ÿˆER|ë=‚óÒ·•þü‡XNtùÆ0õEµ_1¨ÍøûW ú—ØÌ÷?ù•þWi´ZøéAýÛ¯ÁŸÇ‡AŸÿñ] ø­EË©oôD¼›]@`NÐ'ö"ókoÁìnúHê?CT=Ffá!"6Õšc`©–c»ì|£¸z@KÂÓº¥ß¹ˆeäÔFêÎ÷ª1´æ"Z¦µØ«e VMAà_‹."€HØ›ø< H‘S\Ð#£ˆ¨Ì<ÅËôV=¶+Šô#ƒ‰"ýšø×…ÿφ¥1`j¢o„W˜þWEÐÆ!¯ Ÿ™½Ñ]áŽ%ÜÅŸŸÂ‚äG%“1(ÿÂÌÅb¬øHLTkôWÞÔÚ½Xo1;RVêr2ÿº— ŽÔŒ­Æ^–ÝÕà77ô“)¯æÑZ⿺³ë©ñ5:WÖ ë1 ± yTÙöo#ø»tâή‡W“45·í?î£Ð+Ë÷ìá÷Jx wÜËp£*3df–t*ÊÈ ä;¦áÏÕ 4;ôuÙº¨tÒ/pwŸ™b5†èÝ’SÈ'µÁº€©ÏCýÙ‹}™ˆY€xó¬<¹¾9œÐJzFí^˜%Çпd8aF8|{Õ'üä=üÇ'ê!Jƒ’4ÅÎ÷] °Kš”œÇV~!_HCo‹IažËIê?R¡UK ~uÖM2&YU¿ò2ýéç±Ô’ÔkÔÂ+ !v(…Zl2}WŠË„Ä`‰´2¡VœKìÔ-èÉbźøG²;ùGu"}»þ\C´Îšb>B/Õž,¤,~xøÐ 鯩JoÐÝB­×C‚až". ƒ££¦b.5[2oªÑ[ÑWð-• ëQœuÂÛÀ#•-ÉvÀ-½";sCœ;ø þü ~¨µU`œéùÌÜ×fT»#ÌÁè­ºò)­ušÎ‚“aYÜè›;Œ}îDÞu?lk—…ÀŽ·ƒTà\œ'F;!S¢Ð®D«òT楦þcõÞä^èyÿb×ÃWk¨{oc퇑m–à}\Êtê¡NüÊ®Ty¯ pæèV'²áÁËPÞ¦ <Ï øµ`lséY%W'ëžôÆâW"3¾J~qVà]Ÿä<…‡©'™Kî;{W€wó<—µ¬VäÐle´Žƒðç1™—Ø„»?Dų̈̄ÐÒÉàW{ð!ÙðŽEþ+ýo‘ãÕQèŸøOóK=ª6¦ÏaSæø¨ötŽCJK- èÕdíz—jÂßùüê‹ ²›ú˜ú­*°bˆÅ¢1ñúm>‡§éüõOH$ÒË.àV¥‰rÅ>‘F½ªBËûJ o¦¡E²ûq5¡6þ×l¸±ø5£´l€b*ˆad# ÉÜ@7“ƒ_E&ÿ¨­¯#ÿ(ËÙ Ê´æã.w™,<|$7‘yØùlÄ-ÓŃPïlxw[ˆÊ«Äô§ðåå2ê€ÙØÉn¦(<'NADW“HlýK>i¹"Xq6l¨7üÇ~pÑöˆ-(/=éV•üê=>é×ûeT£rúWu°ÑÕüZ>®k1^-1ùÇ1ñPôµ‹ŠI ê¿;¦R]p •/ùÎ$"ü}\}I=¼^îjð«£0­Á¤àß“m¥OûsÑVé-ê£ö²¢\Ä®®ÇOEG©ò‰JšjÎ77xw(-é¢ßßePv¼ö:ÖóÀrÍ"®j“ê ÆtþÃôrì‡'^ÙèÎü§ÁK}Z¡õdµÊ†…\‰?ºOlyĨ>Õ‰þ%;èïº)´×É?R?Ø­De®Áx¨Ž ,Ų0Ï%#ùBF£69ädüÇ=”uѰæYã¢<–ãOT¾«¢1]]?wÅo”ÏGé_R™~¾ë¨Dô°™O`¾+qö‚Fßmx‚û'Úý¾h VL1¹±ØÌíØLÏÅcôùAßæä=ö¯fTtî§÷š.øœ|…ïº!®ÑÅù¯ø}èw?8ŸÜ3¥Û?®ÿø¢\TkkÇ´ÚzUÝ7ˆÿØ¢ÔÀÔÕÑ{ärÂùS"óáƒrE׉ûRïLÍ0õ=5M»CžWGŸËŸ-F¨÷!¢5󉤲º–œ L%a¢ß1Ûi/h|aæêûE2#•¹úóèwû á66a%V¡¼lЦ¢(d?¼@5ЙfÄS)…{#º,þ½ª¾Qߌ_»²+ŸÅI8ùô2Št's7@ÇžˆtØí™âe„÷lªîd#©Œ ¼ ÍQBðÑ&àAÈ“Îó~ä­,dŸF|½H+žÕFÀÍõGG½8ð†FÜÅ””uà×YÁ†þ³\À®)ØÔÖFuúZüŠÿÈ­&Ójào怰ÅÄ'ÐE¦)«E…_°dqòÚÄŽ‡ÁT^Â#í%ó Oº„b;e8Wé† ~1t­ê_v¨ ñ› —ÐÙØLÿÄ/Dþmd^9žUÖƒ¦¥/ñN@pü\óÏ»‘†ëÈÏ®/@1Îh6YQ;¼@,ûIôíàWiåª ÿ6þcµÑROü“~÷„Öüª ùÂiù¼T2´ÀÏV…»èbµƒ¬Û¨ÝØO]Cuð«f¨ƒ RýÖ |¨3Ï{‚;ÿü‘ªpwõ‰'Ö€ˆ½”ëÉûn€ü¤ƒ¡ÞE~FWó­Vv3ú¿§¬Tt›èyyb^Ndæ0øÕ4ævå™Úü¹‡¬O~d™kQ`õ‡‘™Å‹ê¸ 6Ö|ƒ¿kc†)@îq4oO(ƒqRoê™ 1W9_½e€qMNÇÒ·6Ï£0{I¥†­k5›ÍOr˜ébÝÀ ‡W²ç#®9Ë,—†èßþ”úÁ­¼-ÈgòËëød joÉ3¢`?ÝAþ+â/ÿ´.PYуZš®`w£¹×ÞøÖ×è¥ "óÄç»çRí‚ÿ°sçdrtˆJÐxŒß9l~Æÿ¼…¹XG=úKªoÁW7£îâ?u;YD53 iW§ÿ˜ÅädÉ›U†gÿˆ(è‹1 ‹O #|L*Øí5Ö}®¨4z^^UµàEÀýÔ3›ÁŸ?Æâ|Yåp£óú¨ÃõU¢:™lMú±Ç4Þš^Ô0Î`þùe´knÖ2ÇGFÇcr¦Vænªøkñ¤Xùdwb¢åtPù†·•ÿ•ùƒçèõ—s§¿+“Wp~+<ü-µ‘öQ«¥×ÕͯõD¿[@+Aÿ«˜šP#cKƒWû¬¼×“SóeÏàÉhtÔßjMÑì§ÓúP}†¾„^Š¿×?±<ç»?¼@IjzÐßã»x«ŒÓÒñNÄÎïÌ3Öƒ÷!ø:~þtJMªõ"ÿxFsC2[Õ߆çØMœÇÞã´ç&² 3÷ÐÏßþÓßÔeRÞjQ„Nv5Ü*«Ëàby@Ä%ùinìrâþDø*¿Hð)è_’ÿñJ¸ ‘ÜÖ7¨þ|%¶¸ïânVdæ?gÚp®¬;¹õ.ðòÛ¢?¶£ŸQˆ÷j#øt<鉵ß:–°Œ¦ ú«_ÕdSSi…y+=@¯2`õmþ¼þö©1}’+Uè YÅ‹Üè>^~ o§=þõçqùÊiÌâÝá»ûóNžGùS\,%¡%›«ô©ºb®¿* “±Žÿ&oÝ€q©·úó}¦~pÞÑOi’ÿ\°(øaEøj7˜ÙItT¬ŒFô>-¶ÔžHµ=õ&óé «?Í:ÌüÚIÄIñ8^ðçöô²“d€Wd+³0õÝèB‘‚¸¾¬Y¼5™\IüBO¼Í™žé•¡»­3‡EýK¤fÏáÏÎÂcÅož¡óyflû.bè‡ôô²’cïsÐÿj5wm÷JY‹½#3â9³„éß>^SÉ#· ÚÈÆÖ—þísé×׊ú,¨pœ#*Ÿ þÔ—*/´´y‰ïïÃþŒD{–Ù¸¬·õLFˆìA–Öüª;8©¿\Lý`øòjæøølÖê?ö°ÞPº=àª&ÈZxÝ(Û¢˜Iä1ÔùP|•vê|bõRôßÍ„ç­Ëé*mÆbÚ`\ú%N5{ “õ7óƒ?uBa|,°%õƒÇ@Ä–pÏÅaâ.Ý+ªÓ?ñLÔò…ó2¹²JþQ’~W=É®à?~Ð{Ä>$&¼üNð«2x'_|êÏíªÛ|Lîô3Õúg"άH/Ö³Æ1,~nkë¹ÒÁ7¶ã,;Ø0&\wZлbæ},Cz^>$Âù(rÉÆ(Mþ¾ácj[ð+ø?4 øOZUð èÍÒ“i¸k­.ŽÓŽ (ì¼ãÊ‹|V6º¤äÿPAÐïŠÛp†ñ"…vüý3ÿ·~Ç©ÁêUmðóêKµ§öÿQœùQ9]~ð´²ÚTíùÇïU×§Vßé&ûÙm®dÀ¬.èËDô»{ÈhÂÃĽ+µEF|þQ[W?²WXê2-.=- ˆ8°éÄ-xbÀ¯×QoÕý•Âq‚xa!ëe’Uá¢GŠ- <çÁõs?Œ¢þüºÎîFø«(“Ž|¨ÿ¸ÃZk@Õ_÷G©óœh¥qÅe¬£?üyAc²øê oéÒèw3£ˆB\ÙåHB°‹ËÂîÔ½Š®;ÛÉ–l}W%2uäu"Býî-øgðØ}°“C©tµ¹‹>F*‘)DäÛü[™·Ó½mT¥óÆÎð.Œ¿Ë®¿úÊ•,}ý¯ÞòÖô‚} nUÕdǼXñqñÖÝ@ÞtY¤ÒE8÷=]]§ ß{ÿ(.ç »œ®è ß]€þW õ Gñ3YÇÎ?$øÕæô„×÷ú«½b ™ÙØ65\†—]L5ÃT؉êXõ¨²9ÈÑI0’„25¾r;²‚hÄ“è&úOõ é_2‚+ÊâuïBty¤óý‹à?jÒ‹6:¼tæG-Æd€7? r‰˜·$<]Xþü»€ÿhAæ·+îÊ'¨EIÌûä6°(ôß½`)ær’ï\sa¼ûÇ îe4È`VêG…ÚÃYèw›9^$Ã]EÏDÌ™ ÿÑÿ1e“ê8MWóÆèwëÒsÊ‹ ¥<ˆÓKð¦þxølƃ0'§“HI ý>Î5üíkƒ+¤b+ø÷¦`7‹˜Ôô‘ζKágÆÀ„ûNí9†6í¢LjºHÑÖyjŽ1?jÈ_ ¬mNþמ5 £ßí‚:v¬J?ú_Ý¥~p+õ+¨?¯mÕµf²ÄKR7+¡^HüÜaºK‹Jþá͉:,3›å¥·Ê"üc%kÏb:õƒC©a¨ªw‘GÇÇåÝë@FSœ½.,š„˜>ŸÎ1ˆ¾Êá?^»„&_™ È?&QõQÜz N׎ڔšd4¹ºŠ¨Œ˜÷¬æfer㻜ͧ¢¶\"ÿ8¨ŽÑW  ™Â{––üã™Î±¾d)½…+Ó¥~©UϱÇa9Ò£¿š‰úˆ™ýU;«ºìÇ;¼¨Îîß.Åçþ{6*)ÕÎ÷^iö›ºXç·*–zE­§)z½Œ~U­Ìi=§ÔÕ²ÒÁ}ª¦S[q(øK#ñé…òB7ˆzWðÎÄ0’Ó÷±º—ùCàÏgé;Á¯2„z"Z²*üÇ`x¶XšJÆB¡yÔnZrlsê4ÖÀŸGÑF´Hпû¨&üGzm_òéX‘ô²*¾ab7ÇÏh šRŸ šp ÁþzéÊú} ùÇâ¥X¹¯vFÚï@¸{ÂV|%¹@ÿÄRT=ªÎèWëÅQGò• ™s‘8ð¨ñ]¤'jEö0,fkÿ8Jd½ô>¦K/Á.žÒz1ÞnøÉhÝ+°cˆ ¡ÆÉ‰ÿ˜€õ?F]ò¥£p*PžþʤE¹–‹üÊ…AlÔ&Ÿ°æÀ¼.sðIŒv²´ ij}DSµ ›–wãøU)ÝfÓÂþHþáο«\C²+ÄYÈÿa–Ó0“¼¼~€x´'øõD°¦-¨¾b£ÄøÓ\ù¼æF¥(b47ó¨Â(Âõ,†•_Ì{9ëÚŠ "6ô0o[àjrȵ¬y–|ñ§`ú«{ÁK}š¦UCñy`<ÎÁ}E×íÅ.ÍÁcdBÙßä=õÕ¨®ØJOã6tÿUŒþaùóSêm‘•X*™ßGìøYXžãòìóZ,ul˜Z7úÉ&5ïÓÓäV¯?ó#lüâüBd{¹ÃôO$Ò#ªØÏþªÜ¶¨?Ÿ ×ñ‡ÌÍdŒUÌ}цSktg'º£`wta["/V‚ðä9º‡àWyè¡ß”.Ãý@Ú£ßÝ@&ÒÍ”aKež4NÑ «Þîèw{”!k¯/šŠ™ögo¨ù§t}RK¦¾ Ö_m’òS5ž[§ÄVôHQˆ?ëˆtS %‹Á7RhqÔ‹Š·ÜT> ÎEÍ9W]Ç4Ûo¿1’ŸVÀê7‹úDÓµÑ^gÑŠP­¬)‘ÔþåÖ2¨QË?ÎQÿ1V$&¢|Af=ëYH¯E…_Ká-|@œ™¤g¸°‰bp,þSK=ú™ÒBüåf¢0;gê)âé­ðª^ï”´õÍ¡ÿ´Þui=,ë qU$¥oÓaPÚ”àWMA~™òªïGc›_¿˼‡È9—VZ­Ê „_ý€2K5 ‘>³Ú!üoAòh󬬂þê¸Ì}P)S?_0L Œ”ÿÈÊäøFš¥JŽKL0 ÿÀýàÚiËàÒPÿQ»}›ü [{å†wº(Jªõªé+/WW -ûÀ§=Æë6äÊg%ƒˆ¯wШåÔ—X©ŽÔ&ûØÁ9$ÒΉh6Û‘ÇùΓZÓ¿}(þc#š×’pä{ðÃÓà¶,ÅQ{°™÷ZЧc QÉ`iŽâ;¶“/^æ6¨¿äGŽ¥‚_íUJŠqì´ÜàW0(o± ÖNyH=vY:«öE…Y4§±Qk'¸®Jh–FÃÿÎB5Bô s_öÉÑ_5SY‡"gð“Ç™Ê—ÐØ¬Ÿ3Ò˜?` [Ã}W\cV¯"õƒ§¸O õ|ļÎÊŠP+vSdŽè(êÂdTmÁëR‚_­6jèÙ˜Ó´‰àþÔg/2>ƒ_u¢FÑ…®‘›A‡,½Ô^²ÇÛj«PëõÓ/£ŸàÞÄÿ¾'ÿØÿÛ|¨´¡ØR—} çÇÛåíIü•×yâ30M1~M ³_ÁcdªT·â·5®Š¢7Ãâ—ƒ§°¸äÆøó&(“ÁÊÁ–¤—XKæ×ža¿¯§–½-Z¤ãdÊöõæÉK•ïZ}wìŒîÞœœþWãà;êšó f4é¶>Áüyzºt!¨Œnö%»¼=9a#ýªôö¢•ýÙ.¯P’͆»þÄ|LzÝÐq¤6<üd:Œ0óƒ|èýKFs¾«™3ëÉ<ÜG棑Øö_ XÈDþ¿pÜŒxexþ{‚üiÌ|Ôæ4–’½”§I{3ÍË&Ù2ÚFÓïñó%³U/9õñ`3‹9×7xÇDb×ïÿ‹_ÏHÑå7öÏûNæø§Ž¬ö_óâ§ôJ®Mýy=µ‘z+x~íeæŸWE75ƒj’Cåæ~›R¾~Õ–µ:W4­êÏ Ü%òIuºhD¿AOúïFµ#\$ÄÛSŸNߌxÑví¶¨$»*1Áš’Ñÿjªx'4Õ1%ÄýÜC=YÄÔ/ƒ}7À*{‘+4G!5BøR?ê ~•›}"ó?D”ú'ZøÕ4üÇ["‰ep¬Ñõ+ø¡âÄpˆ™@R*ƒŽ¥ƒsÞþ£<5’«H‚çéË›˜÷=£KÈ*V¯ÂÊ»‰Tvã–P¹ þÜÊÿéÏ e6 yk¸}òbXH_-;XÆ4TJ×ô-ˆÇˆ5¡µ]äÈ꘲ÁT¥¯Ê<òŸ$¬ò]\åá‹>hÓ8ÛÂTîUÑ¿€\½æ©Üÿ°ÿñüªd„õƒ¨âš@ðƒ¼ 6úƒ&x¬\¿ì™Ùjõül|Á¿ð«Qš‚r2>þj¨ýÉuœ¹;sX6‰^xŸ¹è‘Zr‚ùó¢ YQðŽÂŠT‚y¸Â߬ØÒ}dÆ;¸†ÖD®±ªª8jpÿµæ6¥hXMö†7Lj tÂÃÕ%‚ï ãá fŽ>Šþ CMa0Zý”Ä–Ž¥ÃÔ4½»',~E¾E imâ f5b%½°¯gÑ_9¡ÞÚOD. ÈLhÜ¡¦0=Baò™Xû]1P‘baøóQôßmÃn³òWò«Éjc‰aõö˜ÞdÚ.¡á‡½ÿq–̰ Ñý/±1œ{!‚ÎÐüyüGN"ü‹ ¤ýYíª¾ÆXv†ÇĦC1å ÿQý­aºÁžÏ±ÛJ>çŽ 9³~@4°ßŒ#R}ÙR®[W­0Åh­¨š »Äì +ÐýÕ¥àþ‰Ã™ˆû5kæ×^$ïÙ—BcT cCøýø7Z0Çýš§žŽ#ìÈdqX¦¨¥ŽÀHDZ ¡cîgæ\ úïý¯ê™ûÙ÷ÝɹjÁÆWÕDg»ÿXCÿ]f±ÜõG­‰È¬4s0Kd$¸š“íU2þËÈñ~¥†²Ø3ÀÊ×5*¼EÝò\ÔBS>ξ Ýè¿;Jå íEL÷^h¦¯m:œÉvò|°2óÌÚôOüh· fÞnøUv²“ᦳ>–le+]™¾àërýOð«³RRY¶Û7è¯rØ¿³ßÐ(½ˆ)Ÿa~Ô]e€ZŠþ».â‰ÿȦ4¢þãþÃQ•å¾HÞôOìK’n:zK ”'ËGé_R—Îx»”èJ²¿:μXüAôm¯&R‰¯EIy¾¢c ¿ªw©ŒM/Á¨é¯NQÿ1„Õž`7kcWWÃTöW±³çÁ,â€au"ÿø¥úÁ’ÌãÝ, AeYs¿”{¥‚¸Å –+™VÃ- ýw£_UÂþHDª @|3±Ã®ŠÆx¦©Ø¿Ã m?±%@n]Ñö&Q-žêŸþ\Uf‘Œm:Œÿ¸†ÿÈN.’›3C¯Òi$Šo2…¼ø²±Ö¢£¼>’ È•RXè1("’­Kàr ¨þ{¡­Ϧsù¥$£¹‰W^Ì'n!Ê?‡ÿˆˆëš€j~9þš.wðPw‰ jÁe¢CDL½±6Ní¦~À6uUYÃ3võX4®c|®¦Cùâ8ÐÃÌ?ß-:ñÎÅâÁ3®#Ÿ™ • 餷ѻ‘Õ”‹:’ŒœæG¶—ã;G1CýŠ>=ôŸÍJØø*D½ÇÉ*c7ºàiZè÷õ.Fa¢ß6TÀF)傺é°> %Bq"è1d8£õx¸©aîË19€ü£*×y!*¨ïú1ÎÒ‹\! .o¸e•Î33&ý¥Šñß ¶B°ìûñ ä"ÁøUhEpæt /»¢Y˜Z}pÃðݳNº³±ô^?ÿ ÿу®W58ç­TjÃî»Ñ án˜üc¼ÈS°šûT»ËL¥íÔøÀ\|§#H úz\ÊNbBó(«LÛ?:ÂÌŽ$àWìð‚TCžOP üª°~“¬+«HÄó&ñóá?ʳR.0"«»'™WKæ\Ac½ צj¶0D7¨ÝòtEF+x”;öQOÀîs%¿ªk.KœM§–!ô0ÑmiÈ’n1—ª¼Ã%”¹’•y+ˆú!ôW‹á?4ª‰ Ñ¥ÒÝÑÍœ¢G};øót˜×螘ǼdæCuËØD&sÖû •õAÈjߊŠTö·ûãrku (Ä€R.šöÄÈÿáÄü”)tiñ弛ؼm÷˜5zù{ä\±™Ò ýîHb¢•à /ÙgIþ'ú«CR ÙÑYä‡Ôïßæ?bËwèeªýT'õ’\„ýUª­dd~íå–üLºißQy‹ê0kÂÍxª5Ž‹øª=PŽËwÕ.¢¦:\= ’"ÌöÏ«¶%ÿèFýqS,SVj?‹†ä ¸_†ø¦®Ä(ί½KÙyB#ÿ8Bž°ëé¤×$j˜*N?œ»*F$<\¤GÍ@*ÝÖÃ\ÇÂoÀ»ýÂvà‰yEl3¦!€õ‹\àWÛÅ?žs”+ÎðçxFâ;W0›$쯆ä³x²OsÌqôKäñ{±´OJž?¬øL™ šÔ ´É\ð&šÏ\tí(J\¶Îצ¯€û8‚ÕÈFÔw?Ó†úóe‘ÜŠ|r)¥ùÂR|ajXï—t‘iÄÊ/´©dYÙ©ë*D´¹Lè™Ç6ò™mÄìLªWÕŽr…ì®Ç~+ À5x/È@YŽî%(sifÊŽP>Œ%§Ù̹ºÁþÇd- V#¢þ»>R'õ?&v­?‘´Ê»êjsAÞ·á?:ѧÓ[3áé$(NlÑIî•ëZUÑÿêu˜s^ ÿ1‚z¿ìt¼²æŸáuýÈ?Þã1*0Ùµ|@.Ð&º™lÂ$µìµ&oAJS[º[•$}†?Ï ‡RŒæ%üÇipN_z]eC!{”X< ZTøóçÔ¤G3&ëw¿á¹NáçËÑäVBOTï£Øˆ¬ëë #ߟ˜œiE3©ÿ¨²cõ¿ºƒªuãáT‘{âaJëýÀÞÓ Œ¬ý§Ú>Ô=†ÿ(Deˆˆß ýµæ¯ofÊI[ã¼ÞÁPm˘ìú–ˆÿ”‘ü)®y†ë95OÁ½ø¤Ô7Š&ö+è ²ˆÈ©¾#+hî`×êàW©ÿèH½ß4æ3=F!µ’œk%þc<•{·¸ãˆj‚`ª~pgf ‡UÛ.»)&÷Ì‹çõçuô\ØæUäXÐïÆÁ[>§GzùHÓÏ8„âi$¬÷9´n`—*ã«­ü£‹=ÿ˜'OSc€Áf"ÆùÄSùN{cć?†—Ìe&$_(@6“ÒlKsŠ$›èøÿÑ„½úÄü¨ æ:Ãî?.Ê=Ôñ¢2ÑWOð‚´Ú3£4[üù2:%>@ÉUÇvÔvÎ,~µ~æ(ó? ƒÁ¯Ÿ¯¡+èW¢Îäÿ“úóÇRÎPú«.ÿ¶~7Pº!wPÒ·=ý«°»öIÕ•RJô»÷™u×¾?¢òâ‘ä«~Ùã¹-½4úÝ×Ô'^%Ïë~TI¨DÔ“5ò•«‘1L«lÎQþ㞨,WâS ‘¦{:Lnb5F¨'"²µŽÈq•>â›vŠñÎ0h> ðõéE>A\C-vþ£< Äæ¦Ñ4²Õ$©øÕJQÎã±Eë5 f¾¸ù#ÍЇ‘Å?-J {Ó¾‡#[/¯<šgç“ÌÚüªùr[löjbé}ø·¤°‹%‰ÄVhÉ´ìßþB†ÔWG¼=‹þ%ý‰º:£JÝ‚¢58Åjð+Oô¶©Àª½Ùÿ-D7y$—ÉñåxâÆP%{ªà\øŠrÌ©6;ûfæöŠÜcŸx¯zGTU#ªõ±ºh&SùNÞOÿJîCìZQüÇ7rÀÕä?AÙ;òü/­ÛÊÕM‰ÿ¸;ŽÎuŽõª£‚ëÇÑM§¶>?ÈÉ:<ÍDâßÙø“fØ»h Lw@IÜ©ìL•܌ߜÅý¾ ÿ‘0~媔s8ŽBè‚|ôêÜÓNxà‚XþvFEXպؖ¬ðÒ-èµ}V*fúâí^á—ËÁð/ ³ýðy@Ôr“}Ô×ó>‡r)kÜ¡–.=ôsS?ÈolÆ4ª‡jèȘ;¿ Œþ‰ÃC­Ø^ù.†¡GºAVºKþ]KŒ÷˜ftÇZ€–5½í ý¡&ôÁ ìÅqÂÖ‘m@X©kµB­7Läæ÷°ƒ+ê]Ù³é¿ëJ—ÂkL蕘»jñWñ!™Œ¡ÄÔÈ?fàµÜés–úÁŒú)ÑÊ~3>£ßÝCŸ¢äày‰Ó:k@Á¾P÷¡Ò•v%_ëÀä¡Ëüps]j;ƒCù’ ÅÃÅ6šà‹Ïß;jw¢´|OÖ±¨ÉSÏ@7­ÄœéŒàùµ‡ŒoÔŸkDöÏ™•Üô@»ýU=ó6y zå¶Asô»Žþ‰ ‚çGed'm$öÙ.$=€ù©ó¨Hþ‘_Ô6>1SJ|Á££ RŒ¸¶¾FÃ`ÿQ {æŒþÊ¢†?$ê—õÇš ^uØÌgl¤LzjÙ»‘ì @iÛ<úw¸ŸµF~2ØBT´iìÓKÄÆÉõÌQª°_äÿ£þRº‘ü'©3Ô¾ˆúÇ|•îã?~*}Õê»`ýÕêÏQ·1CùˆÿpôÌʚ÷¥½êk*xji°Í¥è¿W¹"¿F§ÐWÝ›žN±&TEýÓLøæXÃ&¨Ã߉*òQ%'LÅ4ìJ²§Ü…ÿ„ôßí ^‘wœÄ&lÇz棲]§*í(Ä•`ÿÑšúÁä"‡¸þíá~RAÝIÿö2׬ú"¢ý@âÖ<Äp©õÙ 3/@A…^ÁS¤ú£ÿ("' wÉÀ¯š‚W•ÿ"ë:޽+@<çÆÏ=Ée°ïÒiÕ¶¸ŠÏðÔ1ôäØ&“1ŒÂ÷ ÖÒ&Ò³é‹É¼±âɉúüø—NL®8îÿõƒLô·)*·„«žd2‘SKò»ä±@Yf11‹ÿñÿ± O² >ö’¨¢Ú"8Ê‘òjušv çBtI¯ˆ-kâG à?>sýNÁ’€PÏ~µÕfr¾÷E\î~DúÝ£Rô»Óð×s°lEÑð¬c½  æ‹¨}茷TðD`|ãI’èkAÝÉAÎR­² ÿq?Ì9oWª‰I`V9a.r^oè®rËH'§ìX†¦ íÀ…Ÿï3`“Ðwä=üÙ¢XæŒßÊO…3þ¨ Çó å,yª7“3Ò§£TR¦=0?ÂÏ×04c4 MXö“XèmðÏyµʺP+ö žµÿgÍlÎÙ9ïN6†÷ßÝj¦±=„OéK.ÓÏh…~ת?·¦;x››(ã‹Ðú«î¢ Þެh5yoorQ¸'2«s–³‘Ä6dç*ý¯né™à‘‰üc"çQ—oÒ7%‘_¿#ZÛ¯à5©‰¼–ûZ—<Ÿ6œëVÕïhÔM5Ј!"?cdÁ²:k€ï˜þt–éý‰g C)w…'à²}=o&Zþã$XÏ=>>Ý dhþ"ýKž;ɶ&€þÙl)ˆíOÒ «‘Q þ#Þå€^‡júºèwþcšâ‡t þã“ÒVm®>æ?<¨ÿhŒÿ˜ ÷ýIŠŠ-u|¢"Ÿ¥I/°Ï<\ïJª¡¦D¨.¤›÷Jæ×&V2þÕq–?±X{ˆó¯Ò%ÀÿQŒªT Kš’N¹s‰×£EØ%ÜqD¿_­Åï'P(â9š=^GcØš»>@œ#¹ÉêUøù8‘šúA¯ßoú‡¯U¨?ߊéþcÓêg;»õŒ ~úÀ@üÁC‘ÈúXôWä^xšm"–°¾EK ¢óQ´ÂÒ­§Îf13þ£Ÿ4ʸj¥?\ÅwÊxŽ~äžßW0™RXüÌt™ ^ _ðà"û÷+~¤upþáP¾„>m'*gjÕMçÅáZ X£¦D]Ïaοbùûó'ÁížÃtÂ#lGí%ªEˆ_ ‡ÿ臷UàÇ+Á¹Ÿo²zÝ#&¬«¹©[Ô/ÄÞ‰ý—â=¶‚E%Eé¨q5gÛŸ\Çñ#¼(F’óM—@µk=k¸ôj†eÙ‰Ô}ˆ–OƒõdÓቡ˜ñ"â^Èü¨°Ùõrò‰d0L*¥©†Þ›ëSN»}¯öR=ìiä…ûnÏüÚãè|’éÖê=°ÿ}õ Ú4± Ì}ù&?ctãxæã¾èDZ¯çè|žq +“ íè[óÖ¸”ñŽ<¦ŒwLà µØNK¤_VàÆcg­ñì{8²…ëʱÄÇDÞ[_Úšë×?·ì󥟃?·"òâ—Rèwû“B×®ÜD”‘Äïý©ÿ± Uœ¬a#Ø"r$ OÔYiyèßY§'9§RÝétøxÄöErGôjϵ±dYðÚD¹¿Xe#?±ºSæS™!®Ep”˜>€«ÿoÛ•ë~„x°LÈ}ô\µ©ܨÞï >‹ëzü*™vF|UA#Â_½SRÅàþ‰&~q¶&:ùGe1«êº)ˆÌ`ŒØ;O,J&"ÜmäsSÐî$+ë¤&UÂÞéð“ˆ#’£rC õn”zS:¯7gþ «Q‚.FåáJ£æÝ§mñ»d:çøôÂà Üñ/ù­°ÃäDîa@|à—½˜ÿ‘ŠŒà*ó£’ÂÜ4`·›Q×>þ¼8hÛvtrcàS’kEÂÔŽU>‹®\—G0<+õ¨Lú_-0êèé©DÌ:ú«ÇtyŽ~·7øUIÎz6ú ëÁrÆ¡'M•ô†úX¨h LP»¨¹šÂíÔ6b7ç…±¸Êäî }<ØW]Mïòàœ÷ã?rê'EûM¹'M·‘4¤öÜ´¬“Vª–kpF/˜¿€™È ›ÇÈ?f2½%ºÞ3øéAÔûüBo«‚8-ÁŸïcþùkž$K]|KOOPmØ\«læ¸èÙL®E5»Iÿ«ÝÌ×XTüêƒÖÍ@M¼byÑ.TýùTú·Çä*ÌA²E|Ó¾Qñç‚~·:¬‡ÿ1Åá“ÌÿèKv9‰5%Œåw£¸m—‚ÕUähRîj;kºØ&2‘%¶íš± lñô.°í‡aG­^Ý•BTLþ^ù?ÿÕOÊ&;ÔõàÏ#ê5•ãx%‘»+qÕvj'Õ[nÈþ_.µ‚=¯§,PÞ3ãðNT±ÿÎ=é ú\ äŠ&Âj¥SÒIëüJ]NýÇõùÇßññÅC²CWžÁUXøâ›p¢«Az«r@½¦öOE2õ­ýÓÿéÅNYVÚŠ[ +¾àÑ3Á/ ê5À¯ú‹óðþ°¸qÀSŠ„Â9Ä ‚ÈW¬­îƒ?/‡°käÊŽ|Œ_Ê£œ•xfêoóqàsþó°Ãùµ—a”ßË…U±hYè²(Èâã`£»‘”7 ÛFºÑ>¢®n7ýÇ“9¸“[ôÇ2[ýå]ÉxÒèÞ!øó©ìÁί~åDÅvW­øÕ3c9L)êçÂL!çZ‹çXc¼„InaçÊ @-%MÉ~®i‡CpîðçA Â;¸gúOÑv€:îøàWÇŒøØýwÔè½DÅ› ¿äG%H,ú_måIlǽcê½VI´}ìÏÞ*y8ø•D´“Ü<ˆ¥/0ËYµáf!tʯɇ’Sµ‘Š*üGiü:Y"¬zZ|üGMÖò듵‘ö]¸WvQ;× 'Ë·Ñe'–ùÁ¶¤nµ±“Êžíf;²›í¶f)Ûlîˆ?Y\bÓ™,,«$Dñ5O>=ÍÿD¿ë-%—í{_‘»üÛýwßI×eÅP+ªùUŸàþ‰nôO̬Sú+é_âÀ#í÷/dÙUõƒˆNó’‹ê&QÈÐ)¤¤ûBÔ¼§¿J.ž½@å05ãñYÄ”)‰xí©ú«©DxÃŽøðÎÀŸ7'ÿð„}lˆU:HÆÞ«›¸ˆM¼ïÈ@Üü#]”ð«bLZ]!Jã?–‘ÍÄú§°æÁÆÖ'ñ¡¡:1#»õ@ôWNäŹbIAbå¤#ê¾E¥ñ&lE+ýÿ Ï]’ïÑ$Tÿ¤¿º¥L„QhAôîÆt¬çb ØÅ,¾à:MP.mò![HMÔw†H±…h!GV›AvVŠÂûN…ÕOŠß0`¶Z╾ÒÿÊϘ ’uÏOP‹Ú®Æv|éôW_#¸#è_2–¬ã6ÇÕÔêOf)r¯àÖMµ'êy5©±,Åò¢ž°=óøÌëàz5˜‘~¹Riõ ˜¢ T<#x“QmÖˆ#ÈE¼]Léþ±“7VÞê_bÕŸ/%#;B^ÖBMά¥ûx"–L >‡È@O}À¯¢¡†-†®¿ö´&ØSGØt7li´øääìÙ PÖ^’ÞßgÃÄÆsû¡Ò:HÄyšÈ=;ÜÄ-Жܨ>˜ïè¹[þ|xFI°¡#ä –ÿÈ¡ÅS6‡ZѪ?ï€_=Kô³‘l@‚ÅžbR÷¯¡â-|í}ð«Wø»áTÈ—''[ "æG¶²—öMj½Å¢2YÖò¼ª|âx†ÅÔ³·6¶“oe·í‡ ¸†ãjÄ‚yp2·€˜MÀï!¹¢—4²ëCàW¯¥±äÙ¸îè´v•cYXý»øÏFøŽ!Äù7àÏW 9[f¼?oÇDª;dÄûuatåþܧõrûMvÃÀDÃÞßÖU¼xã2}®^¢—Ú.¶ åÕZ²­_Øý»¨Œ×S]Q˜ù²Þµ]#PßÒ¢¶(h÷ ä‘j|XðLì©w éô¬pÖü¨2T~Ü&OúFßÃ8t1 ¤³~KØù˜Ìð­Jþ‘¨° ymbG¶“ô¿r!ÿ˜È™ÒýJ+j·­6Ë‘¸Qõ²peÛ!ÛIòñÌË ¢ÃV3-W#&ý)>‰ Ûм"2ݼýBü^<–lò+ûºß¥röPûÂþO|¡Ó¿¤’‹î»µñÖt™íR¥ùÇ å†ü4ëoþ|“ö©ÏD,RrªR«¯¨cÄLÍ«W~„Èš¢²n1ñØB …yew½™å%7V9PM"ÆPò#\Õˆ×=)ÿ’ëŠ ìÆ)üÇ þ_ ÿ¡Ó¹ãÅ9¢ÖØðÍ#èÞž(‡ñZÖOK«{éß^…øy51÷ø[àEÎàWßaâ_e¦‚#œÁǾ‡#[/£Ü•§{z­¸z+XÞdXÍWðkð x·¢~¾¶…X, óÏ-õ?ýy§L#ï…•?ˆ5ü"Æé»b]©“¨Kö2¼Ëì}ý+9Îòv‘ÎÊ/WPŠi:U³™ÑÀ{ü„÷é w± LÍE£×·ž–Èþ?9ÌjkÁˆ.qÏêFØÿª7ç Žê.xZ%âÀ‡x†2üý…®=`~”l,#.еú~Mðç¾7ˆpþÇQ©øÕp¼ÏH5!p%V4?ûë0<;ì ýwgÑ?ñ zà<¶­(ZoÒ×üýº?Œmøõ‘Xæýü=5§/˜¨i_î©4PÞ¬†×-­Ÿài@]d\Ew›.RK˜_Û€<6–µ:õƒWéÜÒÇÜÕëVÃh‡é ìô ûznô¿úŠæãhè=w!‘q‰þWŸàÝw0c|#J³EæU0»Løoó¬Ù€î(žK]­¤PÞEeûï¤çÅÕÂ’ÔÖ&Sï­Ê^Š3C.êć0ÿ<Žêèco[/|å@yˆøæö}+ÖÞ™ûÉ·á-.Àžçã9FWÆâRïû£rðç+° ß´ùä¢ÖüÚ‹DÑyÙi_°Ç)À¯²q <‰ì{8ì*¿¿ÿ.MàÝ+Ñ„÷=‰×ɆÕl{¼ŠjZž $úQŽðv/Ÿ–âþã¸2kÞ’ÌúùõcJ%°œy‰ÄÑ éõuä%×ù›Ìû *߉àâŽÎC¿ê__“ÊñÈ?ba{ÓãÕf‚L> ÿhÊ•\ û€>-±ÐñŸàÄq-ÖÃ\gfdÓçô¡û>ý'|J¼Ç9޲ÊR‰ùs£é/>RUñ=±úÛ@¹Ü@—3“‰™xÁˆøóµRõŒè‹šNSf%ûdúŸÑxµAè;ã/“øá5Kë;ñnûÉÊö’…Rã„Ë]*õÄtñŒ5Ûï9޾ÉvÜÅDDõÍå%ê4âçøúDîà ˜§ªä!ÎøknÊ^¢Œ×XÆ>àWóáªöw¦¥“d\®æZ{äç¸zs%gòÞ˸kû*r™Z¸îðç“ɯ,þã¬uZxŸU ¸ªžð?›ÕhJØî<ÃÐ_1Ùûç§?"ü¶éŽ7z­¥nЕª²‡høý˜„×6y$kV†¯˜ CÍÄ@j Âòç§åOh"ê³/VèAèwqWN“3äÛ> "”…ÞK1lŸÉš‰èè[ŽsøF¶t‚L±ž°ˆ²#Ôî¤(dWÛñÏa!:‚Î¥À{x€þä¡2☙Žx7®m;Û0ª8¼ô¾0ò[Ð ¿ ÿ°fa¥¦Ï™ãêIÒQãÉ^(KmÇYí,øÕNc ³2F"ªáÊÂ}ß7‘õ¤'‡'}åç[–÷ n<³®hÝíË]‘ É»¨lªßÿ{»•˜*’Øøøt^bŒ ßð7¢¡L‚=Ý­ËŠ\YÎ]ºf£„à÷¢ßýæzæî–þNdáº-1R¢×íMÿE+1èÐuŠóMžåM½F/zýž!ÒÎj›ÒB Q¾ý•€ÿp†ÿ2tWpk_£:\Êtµr¦±/Ø•a:‰j.¢ã\æQ=a~TErïhzWú Y=¡]<½åÆè¯*Qu ®2´çFcÐÃìTyü"³’ÿ´Ú9³ƒ÷ÆÄó_ðÝÀ¯ê‹s|ÂMöh)4©s@¯âF‰ÿh §óRY¬æ"؉ÝèDîq„[ˆƒeÌB]^i2g²Š'"öýG¹*¤Ý¨CÒà?ˆ‰=_ kNâj­OÂ2š3Ä@^°¿…èYúWñ‘2=ì@®ÙÞaéw+àÓO_0õ HžÁQl4¢Î%Ôv÷“•[¡¯c æGÕ$·˜A–žl&!ýDÚ¼Ð&£ò¯«Í†Qµ‘-<›¹A${–WAÔÖW#ŠizÉëÔä©ÁŠÀñŸ)RcÕí÷×N«KÈ?v`;ñ¬ZÝgk1Èà¢ÁŸGÔ?q™TB=G¼"8¯•t¯OfU™óÎzÕ‚ü`(Ù`u¬¥ÆFåý2ÏcdHo8Âjúpó]éß>N§Cîb Ÿ€Mø±S>êCè9r˜Nwé]uƒ¾²•à?ÚÒ?²ÝQæQ²½írºZ\’Têý2kmáó'£1úE¤ÿ@£“£Q„È›ZˆôÔÜaþùc*µ£³ðpÕàZüˆï]õV¤¦â@ÖëŒ¾Šªâ‘û-)|-«è¿»ž˜7‹í¥ùÓœrÕýÕ92¨âü^ªÝ·bÑh&8eÈ»;‰(¼þ øøÁ ügôI°hØ9îX½ uxcà¦ûããºߟ¥æþ]sûǰõÍÍý(Ɔ¥ ÿpæw ‡ p­¼DùAÞ}„ìþ’“Õ:3?ªº™ÊÖ‘‰º?Ý(w×à3ãØÒ‚²¹RWRÍh~›3Ù§7CÍU™éÔÍìÏÞJyøURò÷p$`ßš n»}v]˜_`xÒ «ÛP3ë £ïÊÇì¬FFY4s Ðj¾1ˆ ;Ø£¹·:E'zì'ù@|4êÙV¹Ïb6ofQM0‹0?ê—™ÍÖÿqsÏI…ãH3¥>€|e=þ#y{ÉÿIÿÝ;RªˆÕK*?S†Úö›úÇ/¥órMEÿè¥Þ ÖïnJ‚_åQÖÐm=Pú»îô—%7ú—ŒÃʸ–WSªµ˜"âE§¨êvu‹_‰šµÿ}ØeÁ¯¦Òo©8ÑêÏ3j²|HÉB„˜SäCE:´HF”Îü˜üA®/XÐC°—] X¥ukîK9qš:‰à#…à Vˆj •šÉ*V?aQ”h=û{~ä*ë¿JÂþÈCÝA~æŽg"Sz!ÒØ÷ðïó ûõ­Ô—sZ$¾Š$ ö^äÙÈ[j¶¬ÓZè¾è]‹QåU^a+¾%}˜)aWc† þã%ùP?í2–þ•ƒUDã‹ûÿH~ O 3¾–¸4²³Ž&ÇW:b¡pLñÉѾ ?ò0KÀwJù7Á[^3ĸ‡°n·°’~¢–QMkk¦ÀÍÇW$¦Ê²Z8«{i^)¬5NóGGþd¤^JŸÒäA.‘Æ%#(×Aû“ë8ß…R5êÏj6lø&r¡qš‚5ªÖ!ºÞ  >#>±¸Õßñ:¾ó5ñÃô»ŽnÿZs¾ÒQL(‰÷xD]‡¥ß=Åä»G̯õªŠ) .T}‹>€|§"¶t õêýƇ«ÿx(‰É?ŠÁv§§jð8ûä0ÑvB"üëh‘r‚“ß3mÆøjÕØ –TDê<Èa½xS]ev¨ÝÝüª7¹ã%ºjžÄ;Ê ?kˆxÇÐÛc§y„ü#©ÓÛð猫0ìèèŽ~ƒ¾ËÀ”„ah†‰"œÁ~PÇò¬öŠÜh)õ$#xK#•m3u±áNñý ÃÙ<Èg.%¯;Gͤ€¯É¡ßƒì7ã‚TEv#VïKDRewsòÝäKè 2×Ïì PÐôÂN2îÑ·1ùÇK”žôÉɤ¯ :9ðòƒò$%>ÿ8Èë=¹–LÏjôWÊnëIÿÝtTÛG#²ß+]-Ò¥‘HÀp±`«½ðíÏÞHy¢“J¿¬DeÙÈ?®1ä´•#ûHç«mð)7QÝ6QL¿ßŠô¬êbÐm„ø¨<Ï£ANÜ; OËuàu+³Û†Âö>/ð÷ÌtܧÔÌ´BÑËvÖ–ÔÛÖÞ,Žwr£§V€>Õ¬€¾Æ°,XC½œp·_ÁÿÞ‹—ôJÎhßYŸ¤nr<ûwwð­•_Ì?ïDÿ’ꬲH*£TQ *‹`¾þeý¹¿tL}"&RP‰Ý_M©æ¡çî¿ð«ª«Kù»þ»Ù„LœzZ4ä™éEv]‹%ŸP’±zn‘EŒG—¤D¤ò  NÔq<~Õ›ÿ˜'¦¶°(øUPøžDè½@ ’‰B"*˜]Eò©õ¢6ÈèLlü:ž›ó°2 ðIuº¢ø«ÊŽËM|þ4 üGyùÇ:au‰k¯Ÿ£Í¢Úÿ±Ek®°_s"Ö/Mΰ™ÊÌôįN(SȬþ‰÷Àê^‰Qè¯FãÝŽ¡CªÏÓ0‡Èÿ8QgFüç°,KE{yoø‹ü“tÔŸ[ÆM ’AÃt!¦&ó"bm¬­çQ8梺{XüÓÚ#^ùâ?‚"Xq±¼VË¿gÐWÃ{¼&rá\sƒë|@[öB]¨¾‚ý¯0îf7Ñ]*u“sÊ{Dzë¤zðC`Ÿ6Ìå#ÇØ‰€jg"¨Ú`8á Íêu–.‡i@Ø7iLÖeÝÏܯGàW/K¿Z¦Ô3ÉsàqÑåb_ÀŸW¢²® ¢,øFTÄ­'ºKve •m CÚÚKäö·é‘Vƒ>1®XxÃ8 ÞyŒh»¨qS÷¡«•ÜEwú ¾Z2Öà=ʵ\çÓ=ôÆxÎâÊÜPÏõEǵú—æœzrý3R=¸šÎ'ÉŒÍØÒìàíAt ¨÷âOqþ¹ar’ðý.îÕõ§k¨õzˆÆì‡í`tQV¼ÔnÐÿê$È×uø“¸Ô”§®NØX/ƒ¹ pñ‡?õ0ATcdÔŸ‡¨?¿%5–·p¦.äÙÀ\[±» ÂL†OhF—®qXæwôµ½„bvókû™PŸ×rïÒáóéÉ?xÇ.y¶ò“Hl9öþ¢žRë F7 )lõá;RqåÂW!©ÄT¯óØþYô¸~5ƒ«Ý…x«Ó©KÛýÇPy¾*SÅ‘Sų±O”„ÿh‚þª ýwK›;åTŸ»ƒdõÁß­ÇÖ‹zGæàÂÎTô’ôÊ‹«¯/ý½e.È ƒùó)è-@XÛÁ—ïã=3¸‚"ÖÃÀüoäóQõ^ÇÇ9£¿êffÓ­ªmÄ•ñy3üOòKRÊó£~J.ÿvÿÄŸÒUæŸëðç•Uw¹.»ë¨TT©®8+s•w²&_ù}¹¢ôõ‘t˜ú©<õUé”\Z®æ£ ü5ulêbu9ý¯¤Pû÷O‹fÅÌÖ|ÀK“}ÏyOAýGZbÖ2 MK…M{ʼn">øfD—°píAÀo{÷BQNø€›<à¿ü|†È&²†Ð G~|Å©\‡~×êß¾Ë'ñ|¶&ný¡iúÐ¦×ø£'ü{EúHþ™?Ï+ÅZ,§qæy>û‘½y òšÝà/VLŸž"7~n'|r*µÎ®â e&6r8ø•'¼Çg¢{g8áuXf Ÿˆ½ÅsžŠLi™Ý92Õ@V9R Äx:üy:ž½_°4uˆòßkë‰2]ÐïÖcEOü‡ªßÆ>ßàj4Q6Bdq˜ì¡ZxaL®R]²€ûÜË¢xP¯.šþã9GÙ&`)^s¾Í‰Ø.Ÿç@žwåT½xOÎu Y@IØòCdZcÑïŽ%+ÚŽ×ôÑH@fhévýX5БðaëÏgÁŸO gÌ©?Yq‰éÅ5¯Ç1Ž%Ljoo9À…Ãx`£Q®‹øo¡ÞmNXüê‰üHü@­–tÍ¡º†çôÆž;gõËFªÕ“$3žÀXüyuüG˜ùÃØÔZœyUeY¨;=ˆùýQKEKçƒÿÐÑïN£6£“žÍXFÁÔ¶/tôXóу)P—ðp•ÉebáñV²ó h©Ði;®ž$õÕÐøžE,‚,H»­Ï£ûFkã4² Û,*#˜zfwŽü+­yÏ>O·ôW/ð®dúiÑÖ¾ÜU¬ÐJpÉf诊ÁŸw ß-Ìü¨iø®äHkÌNhX3š»øÉXã ýx³’Ñ\ÂÓ»S½Ò‹ˆÂ_[/Ø×óç(ýØ1ðÕ{zR0Àh(ú¡‹ªFIBX•~é+Ñ1/gX·•áb^IÅÝ® VÙ\´ ìþc¡3Í0+S¤lÌÛÍÂQ~ÖPÞ6Ã{|áiþ,r¢d÷W©œ 22‹#6¨®f6ƒ?ÏK¶-C?ÔSl{È>òØÆ˜Ô6/ã¼Wg3«>’Øp+»:±¦óÿ¤þüø•·ù,õ”…Úö›ðǪü„úASm£Ö`þ‡¥ßµú—TTj)sÐïþxä—âÞÑÿ*ˆjçV`Û1´R* ðÖés\d{þ#ñ_guSƒÈ?ZaëZ%¿ù䳊AÄšžb õçr„V*ü±ž–”9Bò¢²É¼=‡^WSQ…žÀÊžÂ>§îx¡HEâþíá~RSÝJW–Ê 8s±™°7ÀÊ“P‰­é£`1a¬_¡Ï*OMT,û·ÌÿÿAay,¸Ôò„àǰÓi¨>l ³½‰üã4ˆKJðÜjؾu ¸TËÏÿÓ«â,ó¼ål,þ(¼ÓdX™ƒè’ÊÁñ/º³Z)"ö§ø™aÌ? ©LÂä”`SÓÈ5²õêD[­°«Ú"ÖòÚ$VüŠE{ÎO|°ù—ð/-¶1ÂúÁÞDø÷¯øÜ¢d•׈Πàe_቙5®.¿:‚í·øó}œ÷4Î×WÄÆ¦;:×9ÎüTD=*°ÚB»5À¯Ö‚M9™‚1ÂTØsOlTJl‘;|Òm#Þã<ý„ëÝlå½ÁÊòñž[øÅÇøËSØê'zwê?N̓çzÓ­ªˆU+4§õø½‘°Éóô²L¯ÝmD’^È~"ƒÜ°Ø_±ã'°E{ÉcѯÒ##QôYó>ý‹1Œ™Ôû•…%±¼Ý ½¨z9eZ¨;=ýnwb‚ ¯‡áT$r™YÔvÛBõt!›jûŽs¾¢5ŠíèÙâKFóœ¸á<œZ,ZyÑN¸ú»¬'Þ𖾋.‘} *$ãØæ÷/ 0÷ðG™©ö ÏTëÞ5‹‘K÷]ì7ã"úÝÕà’‰¤r£Áê@åR^¦†ôejmmò©p û‰ÁO’‘Œ5ã?Š™ÞtÒÈ®t2†ÀÊÝB혂é+oT‚ȳN‚Ù^ÓÓÀðµ<ùUyp°hä*øÕqò£D¨§¼ÌµtG/a'³ìÏõkˆÞ£¨Â,¡ Õyæ²WS‰/ÚvÓÉ– ¿2|cóÏ2³<;sÏ5ssžÖÒ»ä#óÏ+¡ ù Ÿûÿ±Vëk÷Gå¶ð¥Àºâ=>ˆÄ¦m=³ÖÒ½wU$cÍI¶#6aËdÇO¯×–f~m.}qëX½œséÿ‰ÿ¸)Å Ñÿ*ýî¿[ÿñKº ÿñZ©Kþq-¸ÿîn©’Rüj†r“‡a#4ûv‰ðE€t\ #±ù™ñ¯%Õ¯0ægáÏçu²º•¾ð×§«üÕt™Sew½¥ä[Jœ8"%ýK¾ [„]2ÂÜ99¹Ò—=s¸»1ÃW-Pctg9ÚGº&3Y8á?¢âáW“¤*ÌÿpÕ-ï±»ïr’4ÈßÌóZˆü#51¶wú—¤—‡àqWgÇÖ«á?ŒÀ[áºKP X= S€çÖÄÚ®ÅÚ&3Å!üñ]Wú“±5à ·V*Œ¡~‹Z ÔNÏrE+Îë{üË\ú'> ¿LðO2Ê©”Údü󈇭úóo"Ï6Чj¾þ†³œO¬GU^ã-¶Ù®ÿ2¹Äm1R«œÅüÁÞÜ…˜àWÌÆÛTåÌ©Îâ™n§=_}‡…툒u qö.´ 1áâ?Ò§n‚ýÉuè©¶êÅÿ¢MÀ¶C¼žU§“ÌÆ ŧ$$¾@”{þ#;,ÿZîÿaÎþ¼¶_Mnþù"¥€AQ©‚çðo‰ Žæßчeà€kÓ‹6³¥Üe Èv"ö4ä ŸÐ$}'Ó©©Í³BY{Iz&)`œÀºìžå:žáˆEý‡/LfüG€y~¥õçó`hjâg®‚ê¬Ñëã9+*‹B­8DD»{ÑNWbE‹ñ–Ñï.0ú`W¡@ŠÁ¼"Ã6Ú¸Çö i¦—Fmüj7¾°¬aãP빈â(N±¿êÂæ(xÍ­Ì3ìÌtöúàW‹˜¦ôÍøFç¿@ødLëX€ÿhCý ?G™ü* DþqQªÌ‚ÔäP/ðß÷ñš¥¨ÿxFŃÊdŽÆ|êÎo2Ãõ«¦0?°%ýwo‘SMc EwâOG½Ù)™ vTâžbGÖS³rN4p+A­Šaí¢N@eÞ{ô¼ÉͽT9®'ÿ¨dÕLÆÛxŠNhÍDÝõçóÈ?â >w½Ž¡/ÞÚ{ú—T//A2ß1…ü#ýwPéS¾ŠÎƳ³1lqSr}<÷ø÷îó¥ÿîHöåd´›ñÁªßùl×È?v‚'VGË5›ÎWël7©ÿ˜Îü¬«(¼²št›1›Òw/!qàcð°øz­(M«ûý™ÿW_/S?øÁ¾X4¹½‘VÒþ ÿðÂÏÊí•JeµŒzR.ÃîÚœ”¡ÖMù³tòÞþŸ¢ÉɃVçC½šK ¢cÉsù“žZ ÌÜD]»£ëJøw‡ÿI)ñØWXÊ£ÔüÜiåëàWyµLôö/faDÿ8*gVF’øO6'²}L4ÞŠ¨¡>ýKƃžôcÍ–DIA°"CrB_u?ª€X¢)<};±ûV†T€§@Ò{àGÞ’A|yÙw{„íùGAy*~a|NFð7:w§EÑÑ“HyþãüyVPåšà ë™ëK B„<®½öWFâ:À€Ú~Á£—%N* 3=D\Òg¬â72“x¡.ÿ‘AΪ4µPe:‰$ƒ[øAÕf3®×”W¨ˆü²Ê <‡¡æJìá(ïQ³SAMÊVýëÈ&¡¿…ýK OÁkf&}8Øô~ô\ñÑ ¤‰Ûj¿ÈÿG/n†ê¿ûS$G µ/¢þ1ºüPî§HTŸW£ÿn=VÙCý`;ð«Ždߘ&õ7ÞÁŸkàØí±ÆA"¯š„ï‚|G(ú`ö(Yþ²bv¡ÁFŸow'š^G¿«Œ²§’‰'!…¨„º;€)QSty0…u”øÊι³Žø3ÞgÑGøb /k#ɘÃd¦‚0lW½ˆ®@søó½¢<pùð.öØ]Ž0üyB}.»þ ÕoD*æ+yD¿**ÏâŠíñ°«Uôøž @M`ÏWhµˆËÜXñX‘/¹Nj-±ÚáwÛS±æs4%[p%>z$ú‘'ŒÒ’ê'xþËÒih&£DJDÌy’1C˜ÙY§b¾q¹u(ú³ÀÞÚÀÃÚ¡U~~õ‰ìaˆ†ŠÏÛëAI´¸ûv–ŠÑˆbšaò<µ;6Ü@ÏU“5¬Î1Åùûž°Š¶BÝLþ±‰X¸¢nq?»-ÕýK¢á #šÿ±Cj¯cˆ9W`3ª_m&Ê^¨å»j%냯´ú·ïí©Í,W7ð@_îþCîÿ5žr/Ì­]¤´ƒ½³æŸ?¥¤V°z€ÒôgªodÇ4¿*„©!Œð½;Ù[]ý þÃ4ã?ƈµaîË;êÏÓ°¿Šr|ºÏpÃÓFO›wŸ ¢·¦m¿ ÿÕCô»I¹¨šÐË܇ÜgøU­‘²*ÔŠ ð£¸Æ×µ†\¥Áðñáϧ­ñ˨¬Èi{ÆT¾áÆ-ôÆèðX ŸyuØò1oðÂ4að«ö¢þã ècy£¤ä«PJu2\ñ?ÙàÏóQÿq™Èùõ÷èª8œ®>éªþŒúó<úµþãˆÔYžJª=þ£Hm YÕ'xò$t!\Í|öæd2ñ©nn1‚¨Å¬OG”ûø]t$„-} Bíj¿#ÇåUèwé3LÆxS×PÌaÒâ-ºî¶FaöÑØ@çâÙd3_è~xýîúåÖ7O‰Œä~×F·ÕWµìþc‰Îƒ­Âª Æ_R£¨Œÿa#ÚK†“ µÒ×¾‡#;Ò¤2ÓÉ™žóK|B™¹MKE¬‰NGóéÖT äz=¸ò=âô|ÖO!©eCY•𫞿²jZ–÷$“±f²NÅ»( üärª42mɬ׉k ­ >¯AÅúÄý‡‰¨>’%®‚Mš†·÷å#ÔšˆzúG×VË•@!Îý9þŽ\ª¾Äš ð}KÁ‰­+ñ¤°‡=òsœïf©³êß„­šÀ™ÅåÚU##t¯Š÷ÌVÁ9‡µÍ:äÍÙ2eh©6þ<,f·Xé*¦¡ßÍ ¦rOþ´ÈmÒ}*yÇIÔ£÷ gÔ°aŽôëxãSd8~ øy°-añ«O²D$Њ\w5$ïÀ¯|xNüÇnæd¤ÛÒPøàÏtñh‹_šjWfz5Z²Þ°sº–WYêNOÅt+|¹|.¸Õx:˜ÔZ“ÿñ‘9|Ôv@–‘î$kˆîÝðWˆºR‹^¡Öë!ªp‡8ǼÁhØit¿sñûàó­þ»ùé¿{Í€jŒÂbÆ£öÁ+ïãœ/Pqâ„~·¹ýf\E§sü]QÐmTIU9º®™ùƒ+©7w¡J,ô²ƒÍ1ðƒá†¡lë‰Z*¦Ñƒsù@¥×NûzÇäuЉ~÷šÃ{zBX¨ÆºžH¶ºÄó×ðGo©ý;LϯԦ;«Ö™Ña”|ð CȶZâ[€.Ô°?{“ñßé0W퓬7´ØèsÃT´€‡òA«; ›U?ø–³Ía¾„íÎŽRÌš©ø’ç罈MÎÜÕ¾ ¯2ÿcþc*Ö.-Oå{£3ŨŒôcÉ*øò6_›bkdk ~ˆrϦk¨YLg>À¯ò†P,ÛOý?þâ±”Uþiÿ”ŸRÿ»{\ùªÁƒ| ¥-öÈ[ÔˆÐL•ª“ñ5þXæð9W°÷Ex¦¿aYûhÛðÊ¿ðÝôZúJîÑNm¾ô²øD/—vö'×q îRUæ×E¬wÀÞ§„U©NõjQút­oB®ÕöÛ›—TÏ¥Åå|w³ræG½q,üj©â"†’säÆÊoÕ[éŸáÊè—¦¿Õ'bß7Q³pÎ(N4_uÓ>,_lfެm{LÌ›04Û-I_åç`˜=µôDîûÁ|Na‹ÎÀ*—$‡q§—`j¢Ü›Ì?ÉDÃ$Æþbä3'`+ð%Z\­V˜üc,ú«áÑ=vÚ\X¢èLî›Ò”Š”åô/q¢Þù1ùÇ}:Gxÿ‘ åULð¨qd±¥Q½‡Æ¯ú‹†x¬ hÌÊs¯Á¯ÆS¿ÐþÃÿqüè#sƒÍAy»‹½3Ͼ…8ä’žÃ(ÿÑÒ~¤ò>-+÷î¹– œ¸-ǘŠ>»˜Õ‡©JCé—xŒU¾TÖ e®m'&ô ¡Îf8W0œXf£8j_ï´¼Z‰Ë=ó&_ð×ÓrOS¢¨ ãQÍÜNþ²äj¼yž~-ÉÐ_ÝfþSFºæºÓ¿¤#þ·1ùG;Ñ;Dÿ«%ò"5%ôb°ŸBß@ýùgjì àÇÊß?aÚÉ‘µ¡JÅfN5ÊS^ UpC£YúwvU4‹ƒ!vá5¹›ºH”!kOŒ—j’Á¶ÝfNú_¥Êå&sEjÙ®ÛbØ’¡7îbø•³>_týnF0»ÿ ÿá/å Q?¨É}ÿíüC¦Éå½ÒEm¨ÞÖïî’Z“”$ÿ¿ ÛáÚ~{#|$SE0‰ü(8KPÿQŠ.ð÷ÔùX“êiESœþ`ùB/ûY}ÂÓîN´’z’ƒ¨¬Mù RVú»úŠêûâKùãôoŸ&âQAvÌe:ˆoÝ…Êì¶ì£Áè†Z‚‹¶Ó¦00K”"‚¦ðçî¢vxxú6°oâÖ‚D¤™¨|KRÞ76ÿšHÿGÿ‘Rž„^kŸÐè?×¾zMžUkÕüÇ+æ†Õ ½7¬ïÖÓÇò‚è3U†~7ùG-LT? dh=uèîzv£¸~Ct°ß”÷Ò(y6¶-{ßIFõª51ð,HPLs6ùÇ<‹/§Šä º=~e"þc):…ÁœÉ/veB>S6ÙCÞ¤Dƒ­ÛÇSà¯'¦b3º&®6™µ¬ ïä11áv™ÉÑ_yWÈD$ú·»ãƒe–â|»“”µ?{3™_ < Oìwz»e~Tq[-2ÀÚðPð3;ðGuð'š9×h@¶ä ÛÒü*žþ Uø7øapò¿OøúÝAT“,#JEGÝ›FWê?²ÛÑ鶤º±¸9ÃvÅ–Õv}ðP&ž3ºš*8 ú—Äf>‰©ØÌÂcþ^ù?ÿÕWJKoÜßÞKþíþíß%O¹­r_i¤Q=åì®Ýô/ÉBÿ’ ŠP¾üeÿöÒeõ˜JžO» œT‰þ%Oá?ƉÜjgõµ ÙBíßßgÙW'§¾t®(©-澯)µŸÒZ%=\Åòe"ˆç~doõóSò7¹3hØQ,jebñÍXÓpÁ.è0Úðü”#_°*ˆÓ‰ÂÂ?Ô;#þ¦¥:I!J ]@ö²èÙ‡÷§¿ú ÊdÓÏáîÀcjâŸõ»ß¥õðç{…ÞòéÑ:ù¡-_Eœ_Žª…š†/ ³°Œ@þcÿvwe8øUwXMä /Åx¬ê$Øý=Ìy­‹i)ÖÿŠæ§YÝæOaOÑ×âfÄ'*¥`þ`q²µ1 LqÈ$*Z:€n?Ö&óÄ'¥Š°2y¸'«=Á/l€]˜ÏõômÕˆîuoy:¿ðÿQÿ2Þ¼"¹—À~ôD¿;C}OýGsr‰ <ç®d)IÈeb’ûô´?¹Ž%¹0p„g‘otÁž¯ÄËŽ!Þ_Jºd=»^ ß᎕OÌt?7®è$®Êjžßj®pý;)­ÉfJ¢´±:VåùîˆB¬"9ÁP£5oèü—Ù8«×ãÙÎ'ÆSYOÄ}’,'!Ýc§„ÙÝ—äo"±Ij*ùvÁ’¸j:™PJô»‡t7º$¥‚g=gÆ¡^¯ñn*ýoð[ðóåÉ]s)3C­Ø›ùƒÃØÃ>`Càïm¬iéw­ù®æ>ð˜KÔŸ§^£;šÙ½ W©Èøìéúzž šðãøÓÿQ‚ÌÖ”t¹³?ùÇRЛ[dXšm+lÀ3&wo¥q˜‘È<‡žÉÙ›3—œ¡¬î/êÚ»ÇüÝìü°bÅñ¼Ýˆ¦R^ØÒè¨`g <*K÷û´XÖt˜×Ì…0 ˹r9Û 4ÑÁ¼v†èŸèEý‡…_íd?$Óiëô •Ù%p¯Môž\À´ÞÉæ&úa%D|›‰±/ôêæaŽÀ…s)I®Ù@4Ýíþc–<]}+‰,\¿úk5µÞÓ,fkhõ©bŽ×I&ÞDÍPï5:À&)˧Í0ê{‚yNúTzDü>á›èwGŠ Ø’¦ÄžiµÆúq冣q£{ÖRæˆl ~Ð D±:øÝWTÅÍïz=35ùG4Îé–xGÞÜ(„Çü½òþ«õƒüÊ€ÿÈj_Dý¾JÇäÁÌl‹þê˜\UNH ”ô°çc¨ÿ,ý~W¡:ì)þ£/ùÇyüÇ5:¶ûË7˜ÔQŠÎg•_ræ¿:ÎXâ%ÙÁìôj|ö4q]ä•w)NX×—êGüÇu¤Df÷B_ƒ#re˜xüìÕ§‡÷a4þ͈lÛ wî¿;˜EeâĮ̯%ýncu¹ê)j $ZAN°üã"œ@Z÷d7ö´1x:þ0 õƒ¹åAäÛE4-ñÛrŒ´Ú=ÑP›‡ÇÈÃóíJ¾p†¸x-û.+þ#ﮢ¯²{>” d/×ï“‹ÉJ³ÁáËÂV,?÷ÿHOT¾ƒãm%¦ÊÇB_0ûw Ð_¥ÅîÍUKŠú'H¼q˜„&~öµ˜6‹“÷¨…924‡èþ!È ³?‚£œ Š0’ß²ø—Úx«ª¥4ÿ)T^¶Ñ¶’Õ½£þ£˜Ørò˜ChÃÒR/3ÂþäÚMZHýà1Ô_´~d%À·±êx-?ö²6{™Qð #h†âa›q×àßÝAÐú«IÂõO\¤´³àCSài7`ƒ>¢€>ƒ­Ô§1Ãb/Q©‡‘ ~»¥Ñvº õEˆÅGÀÌÐÓh£ÃÍz/£Bd%àß÷‘Yxà'Ó‡#ã zÎÄDÑÇÁíÀŸlÆdð¦ÂX{/ò1zVrWgeS¨k8HQ¹J›Qä"¯èN¬’üjÑ„~¹[Ð_¥²§ŸVìÿ(æG¹ÃÇ;‹ÆúÿÀ/Æ­B­7Y¸°,îª,ŸøCó"ÿXf €éè‰þj/õ /‡èÏr™nœñ@®óPÐsd<u?QÅ~3îKcä]Zt|ÿErû»d¼¹ÉŽžÑçJ3 JZ„ÞêU$Gè¡;O0þ|-Êå>ø£Øü_p‰;CÔ^y_iøâëàWy©àŸŠ7ÒàÏwÑûe•ƒ©™üA}âaXþ…føŠ£(›Á^aGÖEDs»ÿ˜,O…ÿ¢'Ä*|Ìá~li!Næê¯’‹dÑÈ—êQ™X„žø™üö3¢•mAˆ]x*¸þÃLÙ…Z7E 0Ú3-*-þü*¹`iôÅôoÏKG€ÜèÏÞ£ÜËe b¹à]ežì7T3§Ó‹‰“ö+øß{qþ%ÞøÔIþ»¹~Ž#ò5¹¯òHi¢æQ/ëw÷IU•J'æDW>Ka;”:ÞÑ«'Òø 7©FÔ[U½­ü?âÎ<Š-ëÚ%§NUãîîîw×à.7¸wwwww‚;ÁIpww·àà+3tÒ!LÂüßÌÀso:!}ºäÔ–µÖÞ;žöB}JŸÊú}§&µ?ósti'îÝŒ%½Š}ÝŠÞ*µº\ËJ¬Gb¾¸/tý[hòËÏ©_èßÓ)Žm%ÑsÙ,¦½8Dœ~ ßQûßöSd&’,4×Q?øŒœË›ÊñÁôˆH„¾dpgÝl‹vî2øUPï /u5þ#7yÄjð«ÔFj4™&‡þ‰çÀÁzÑy·79WDG ë"üù6²œ2ÔFF{°ÉÎ’ŒÊÌ òcÕ!ú¡‚5 c·­7wfzjÙÇÁyD|úÁE0>]¬W\ÓeSV­Bþ™ýM>QýîHç.uÞ9»âŸÅõη*B=¨vÐnjÕôTðç±») ©Ó¨‚%ñÆDVà?ñÔ×°«Öô7Ìü¨€6Gu.$½Ëþ :ŽÐ_e¿êg\D¿k«·‚ƒÇBÕ%Rbá&–‹[ðç_CkˆŸR#hc…*o`ÝZã?îùdSú_õ[‰W‚a%Nœ@õ`´põO,Ò²º”Û¨œ9XÃwjVƒÛ•æÉßɪO±¡‡ù,8@½hWñ¹¶Œ·Oʲ‹×bWo(QùV,*jTþG÷EtA 8â ÅÕmΣq}]Í¥•…ŸÄ“ <Í®?o†]5`\ß‚iM{øŽÚ~*ЃlÕ{(‡ªß8?ê6~·/܉ zeØó P_xÁ¼Ã>õ!k°õ»¶K'Óþšþjõƒ×Aœ¾ƒñ¥É¦–±Öt£ ¬q0¬•ØÏêtß=CL_,g+knÁ'Ÿ§ ÖL=ñ/ú«Éô/WšÕ«¬ £;€¨¸ ö½Kö¢ ¹k&7ÈÖTç“Màä«P 15ë™›+BÜ—×ðÉl“¡{}&_ËcT]Úö<* 7L –†Zç˜?x‹ùÉÌQdŒO 3£<,ÿ8§ôS=áïê‘{”ç¿¶° ùÍ,渘µæ­_¨8€‚w25]áÁâ}‡“-Ä7»’Þ0–ëµT~•ã^i\”QjZºÑ/±œµþ£ÌÇdØáˆÆÄòÔ‹W‚¡>B,Ñ› ©¨o‘K´r>{È?¾‰ïè©Ç²w=Å[·yá?ÆYðã~h¡UÞû Òƒ²å#§s7[_é²$˜Sa9Ýϧã:ýw'‰ìø-¢*•~W‹­4dZóéss^kºc­ã!3Y&‘o%pì㜒¤F·#ˆ9ïƒ_Å•nbÿÏÿ‹_÷)©‚ÍÿxÍüÁ?Ó5j4uŸê¦ÝÑš1¿öR ÿ±Vi®eЪjÀž>(ÖRU½õÛb¶©(W´úݼäBôÄšŒ€ÿxõ‡}‚SŠH²'ý¯ZcïK0óþ‹È .Ñ"Q[a뤦Pò^ _…Ê.êÏÇÀX=!RnŒÅú}ÛSŒêR1ÿ)\úÝ"tÚX&Êà?&aåVŸfÝ\Ò¶m ‘™¯åØ!Ù±fGELçºî®¯r«3ñ¸'Ð_E'^Þ rQ+]-?/+“D&J¬Dt¿ž&¾ž3„r]¾áúrµfd ð@OðèÉ?ÒbEfâ?âÀ…?e­Ëx”Èò"Œr?:ÿý®j2_Š‘O!²OAþñMÜ=ɺ>P§%AY&5Ççi}IWtûH7±²&߉vz¬PŽrŠºA„õ¶ë‹às¯Á•„?·{fyôeú3¹ˆh=\űoçYÿˆ…oͬSJê>¢#yÌpª5àa¼@ùÆsý§_uÀ[æÅ\Á>{ã)SË.Á#ÍÂϧÖ$Ñ/øÕ8­–˜ÈNH„ÇñÆÃí¡šá3ýq‹Ð—Â"³¹ŸnŠÍéÀÞB&Ãޟ⓯ÓW0UüãCœñCõ½ÈÉÍÀu÷G+µ›³\G=_rr˜CàW6Zr•ú+ä&]K’ó|¦3âi4­ÅØåECðç}Ñïvƒ=ðËß0ŽÙV© ØBýy"ÇKsôÄ4ÆßáÎ0ÇüêˆÓ%")¸á@Q‰ës¯_üŠšþWsÈ­­¡ÙŽHì»ê\Ѫ`YðAæ×ö•yþÛëúŠä–a&üùòÁ<Ö1jSÆ8V;®Â±ô·š3Iä=½[Ê’ÁÆAgh€,¼Ÿy ò˸œ§þqEÉäÒÿª±šÖe_„ÿ4ÕKm¡½ÒRÿqQ-Í*Ë•êZ.­¶6XS‰íÿ´âaæ×ö n-›bB÷ÕÒjÇÔô/©§÷Ò/’„V“üû£È5ž‚ý¨rS›ú‡‘ü#J ÄLzšM%td=à÷oö/‡˜ÞEÄ@ÅH]*jàMD•­©…ëÿŒžÞ{ïNw´´(xÓs¹é“é_R“]“±’ŒøïOˆv1ŽŒùÌŽ{,⣾þ<·:ž y%z­dX­]øµÌìÈZ°Kˆåìþvÿ¨<Ìu(h$Õ …q·?jSØóm‰ñmÿñ{Ÿ]mv¬Ò<üGB¸A´wüJÊ»xûÉtþÛìj™]M¤U%Â_Bï‡øäjßÄøÁ6rfʼn•²ùžÇTsìƒUñá åÜkëj(G9@]©·"ˆÀUªÌ1^GY\OòžÈ¼¹qž®ø÷ÈZÏ5ìÊãáh ˆ8ø®IÎÈ/èèVÓñ\ýѤZp)™J"ßyà( ±°É°È'É&Np¬¤'Wtÿ}àÜèÑ™†¹^«(Æã§“`#ãÉŸ²/˜+‰M÷0s›gèŠtÉ,º©üÇZ>1.ÖòŸ€Þ63ÜêÀgü‚úÁ,œW&9öÃWná:zQ†û¤Y~zó0>¢Fo ª¡òt ô泃_%#ÿØå²b?M>Ê~- ïÒ‘óÏüóé ?P&¦þüVµ³ùžü£)¨Uâ÷C C·ðɧéÉùMoå²^Q–«´D¬V÷Ža÷o_I¶0Åq6ù=óSÿÑ‹} ¿> k?Þõ¡Ìfæ’‚Õ¾T<à?â²m\ô!V57=Nès%Áÿ·á?¢’ÍNýyokAWxè¯ú`í3™hNÀz;oîu’æG†|š|CÆ€Ìgæa•ØŽRÖ^3.usQó&wÄ¥zãëRóÈühd¢û¹û'è•[NôqÆn#Õ¾º´Õï°•L…÷Œïf ò¹Vuê\žƒ§Õâ &„Õ††ª ]ºªQcRßÊSýëÉpƒùêâ¹S­§÷€™ÉsŸ%ç+³£ãókWð7ÙG}æ®c¢T^ÇTµç Ÿ9­Ï²• HTÎÉ_<+-쌧þq‘þ‰÷ŸòΗÿ.~eûVÚ­§^R÷ä?*õµ¬ZòhÔæ…G‹ä<%@9¥¿&‚+ç¨ÂüÚ|Ú-õ5:…zÝG{ú‡óÏ#ÃŒ¤b1p˜üÆ^¡IÔZdâó„BŠ™"€ùçá«ÿ8£ÆÓ†²š«·‡½:Ww±Á•À…žƒ55ç>v»ñvˆÔK¡Oaú‡®þí¥ô…úFQ>t4f)™è)øzLcK1QlØú«T`^áèU_JÆ1WV¨%7’¤Äê7ÇÖ-åY¼‰uuàEÁý®DÕ™N/é¼÷¡ßž·Úhê1ÚsöÃ&¿½°]ù™Ø•^VþØŒkä`Ïç$øqjÐä×5³«µ’dUÃÈ?’‚öúrþF—ôŠÊÁ¯xºnñkðÀ;Dõ'`å÷¢~£X&ÔΖýÕ…z7ÎÇ |˜ãèòrt_ð9åÐ_­×oRÖUÐfìä^ð²XôB±à¬BãÏw(eÉ?Æ’M òe"›ZN”=šú›î ©iÈ%kbá퉑y½ØXF·’]ðþWñ™ÿ1H« _¿zŒš‰Zd“=ña•á.ÚÀÝÄò“Í7¢:oƒl £R…ê’Ñè³fÈBøÿÙ!îË#õøU"عò ¬ÁÎ{ ùGlr˜Ä£©¨Y{mý¯dQú·Oã róY—Ћ­†ÿÈ`”ÓÖ¹¬ØžúÁ^D@Ù½“ˆôÑk Ifv 'Ê,h&)Ž^æôW¨1)KÍý:‘Zùùd±Å #„~ûµ¿_‚+xÂ8 çѾ‘¹ÿDZž¹|Ÿ™ {šõ¦Ñmey8œÊ1®æ°©Ìòb0ÿñ4°þ#&‘ÿKö•/gïôW¹¨¿^E}|²™´–'ùǺ¡ŒdÆÒ~ò˜Ad[¦Ùÿ~‰H1(ÿØ©Î×^À$n6æ·eV#\{Gº0&€5_GÿÅåtŠœnùR™ é<õÌêÖQ°Ó\¿Ê<%é_Ò9˜ÿè¥G OUr¢Ç(r¯8o,6ã9â‡zá5öRQÌ:Kÿvw|æv˜®“d ^TþypÏÞá?T®Ñc”3й 6%..DôÕN2ŠqÑ,ïØc¥b²»‰ní¤UÇjCÿ«kôOìþ†žÁå©N¯nE—ÑÁo‚ßü Nš'\h¹ëùÿÿÝ}¥p°úÁçðÿîüÁOÊiµýwûêu]³ÑÑ9àWÙàχjŸá?ýÑÁV¼àÏû±Çk€`õÒ£ë5èõ„:ÿÄëwÐïæwyÂZ\¿Gÿ¼ÆØ™Vô1Éa|Rºi)°4ÕEJ1ž¾ ôOa-øïûU]«#T¢öÂx‹BðXä¤bXÌ ìDY2îaôß-,n„cÅšúZª"KÚÌ%æžIÆñ=QZìq29„(ìÈÕ3ø[·‘ß¹‡·°¥Î‡X>gÝ02á?ìþíëøÛ-Ë~ð«DÖvÝ[q£°nãŒÿêÏÍŽ±z]áéóC9»^ø¦µD£n Íc°ð‡Ñ說þã:•ÃÅh5Hùâºr<”ÏÅð_kyòâ“Põß_y߆'ÊNä_™³ÞƒM{ ²ÄlQöCòÊQvPGà?΂2L&ßxM&R“ü#à-ë)}þŠj6XÿuhÍ’A¥àJDáÚ’}þòg¬’EßÉÙ}‚…YŒ%Œ2WÿQœ¾–¬;ŒH#lÝQþ ´¬kxngéÆ×íÖ¥v%ÄŠóµ|bÊ!Éü¦sx±W쉣FQPz»â:T9/ð#w¨®èf?d §ùúû\ ôÞµZCQΫtÜἨ ¯ˆmi[ˆÍONÿ«f6p÷iÖWêÞ^ȪfdüGfþÚl…6º8gRD;âr Ûk¯E+ò»+héöÁGc¶ù0zÛv%XNÌ›ýnBÇó óž:˜{ðpé©®ˆÊ$Â%¨›ò¦ðpYo (bØVõ'ûùjl–³ÀþûÃT2sRžÿñžØÜ¿ÊBÿÝþàWa†^Ò©·Y€š— úÁ3J}u/q‰‰T"ÊÆd É?Á¢¸£hZ îO³›*½¹¦?µy­¬(FÂÊå‚ÿH†ÿx̬Vǃ_e#¾™lÜ”vd•ÚìE†‘ÿ±]ðR˜óéXü(Ž”èyw¢>+AOF/r…Üí&ìë"âoAo¿þ¯vÐt¼³+þ"Ê–â‚ñÃ,àÈ O1ϱ†÷ ¶$ݰüéÖU‘>ñåPw1«²›#ÈV¨àó“OsîÂ]j½£ÈEôṎL½“ŸÙݱ—ùƒ‡è ×ZIVÓбÝñÈrst±Qy’ þlx©ä<—q°B…}vnbóÏü/~=Ϭz=h'¨ÿmýnTõ¼ÚIóÓZé¹ôjÖ<¬¸kÅ´fÚüÇkåwªÎÐOÖR/èŸÉ?fwÓ7Žþ%ÕµøÚkêû_Ñž©)‚Ž:ô%\~šQD“£©D¬AÄØ•JŠ/"¶ºBK‹š¨ •~Óè‡7Ô(×e‘Ào6Ò·‡°Ø£çÈ7·`¹*“ÙD4šŠè”Nai 34 œÿ±ÿ×·ÿò“ZúJ}…(‹ EްDÕ—¸5i|9{!dÃZ¥"x¿hÎ=üË2ÿüA&u*øÜú_%çùÜλR±¿jb)6uA€w©œ$^?cl…ÉH¢‡å…ÁøsNÃȦ‘)ÆFO"*ÜA¯ñâðcø×Cä`ùyÎ’Sxˆî¿Å¯¢«iµ|† w߈Žíý(.ò—0?°qÓñx_9Ò[D~‡ñ¥ÛÁù^T×CãäFQ?Ø ¼ÐÎÛÜÉCìnÅùûžç¾ŽáE”¡˜±üåÈO6‘å¦7„HbÔ¢ûÙ¯Wo•RE÷†o£š„ȸÚéõDÙCx.§ÊÚ0³í9WwfLœí‰J¥õVÓ+8–Ï?K®“÷þc¶Vü£Œ‘Šw ÓÓ;²¶ØÖ'²9wÓ£õ¾™Á|DþáAŒÞ™«W¤k*þc¢L‡ÿÙÿêžê+2±ßRñïÏa‰Osn¤«GóŒÜZÆö°úŠâÌœD·Žâò¾ãzȤ2h;\ž—ZDòÉ~0šöè¯âÁwÏ¿JÁüŠt4¿ª3ϼ†Þ¶9NAê'6㑼Xï{ ²¨ì²^?Q^–&^ÙƒÊo Þr?<ùbæ¤bÇ~æë~!rV­gèÏÒ0­cº¶úø÷G bÙÌ¿¨ÿ¨ì¼)”nðç)ðׯ‰Íü¹›)$“yÉÙR—/"ßèJg˜èl»S! KÚÅ•í€Z*šÙœ\î$•^A|ëu&øU.êÏ—dž­L¨Êß7 ùÄüs»C×5T¼)à?v64£¿2dW|vÿöRÄ‚ýÏÞú·S¶ˆŠp ÑJ3±Þ¸oJG*k>,|8•t¿Ú Æ6”þ%SéÔ <Øjiv!vÒdEú'æ“Ãéw« õ¾d—ˆƒt:yßC¿{žþ%ëÍ«tØÅÙ6tøÐ?1•£žU*þût¿9'»Z™e{üÍrP¢¨ªâ€ó þ÷^\ÃÎðIiöo÷/ñWî¨í´ˆzS½üG ÖÜDýy­ÖþüžYAç}[Ù@ç¡’ØÃZô/ÉŒæê<•Ú­aFð:hênл~ÿ*¶Ð¸g§D=T·½Œ"¹[¨Å…y-.bˆ±èyãêÿö`ÿ²[ý¡– ›9Ohëwo‚fÖ·s±šÌÆ[[|h¼pˆÔá¯jR?¸M 2“sAÃæcï¡¿JkWËvXœwرg"5(ÖÙpÔff~í_ÆNê?ba•ö‘}ä¡{–;~nžQ ~;º–süÆXì4ðç¹÷>Ø){ùX›Œ}¯GVµ‹có£þ#k`WApøŠø¸ÙXëÓ¨ 2ÂלÅ37§¯^Гl!^FTckÅÁ—æ¿Ææ.D€ÛpÇŠÙók¿qÎÓQðÐÙüÉî¶\l-¯Šüz†PŽrù‡Ÿ€?Ëæu/R‰£{Ï'43.éõ°ÿ¶°üóP/oá|mþ#¹QŠîý®Çe7KÉGý`K¬ò0¤êøú ðDç#ÿ¨ #Ü‘»Ñk|F!ÞÅÖïnDŸu–(b3ýK‚4ðÿX{¸VDŒ!wާ»QV€…‡+ƒ½lgæ™hfÝfvà9ÐV¦Ý ý ¿Ù5„~Yœë1>Tï6  R€¯ŽÊ±Ägv¸—\F¾ì°´×­HæSY Œhjã¼p!vwÅä3ôD‘€ €EäÞáêÆ9Å‚ý˜i6ÅŒ¡ÿF:øÚ·D»Gew:ÛXâ¡.öå3—‚6~è\ް?üyYŽÊî1Üku5×\³Õ¥±­»P&PcwØ|(š ­}øûºî!Ù!Óš©å5QÏy‡É?£Ñh„"#?W®1kÆËégEÀ_,1GQgñ‚.('˜ÍçAÿÄø‰pSìwù_ƒ {‡ÂËW‚_E¦£Ënø/25=Õȵf25ª"ýK‚d©Žuèd#8£¿ºƒÚ8&5×@‘sUbGÕDS§ÿ¯ö¤þ#^y"¿ã!vóR‘Tã<ïÒápŒ~c2ƒùê™9Ú h™GáÏÝð¿'PéîbµºŽ#Ž˜Ü‘Ú0ûªã4ÞÍ$²;9H2¾W""ìã_âwºç…ý¼¸Éü¨¯ÎuߟÿY\ï|«ò üªªv_+Áü¨ójv—Í¤Ò jôJ`ÆÈŸÕŸ¿Sö“ô'ëÏ£”D÷×2¡¹:Fÿö²0£ÛÑò&pÙ¿AÇú«¤ø®ðe°KåŒþâ¹H©.Ô’I=ÑŸ’=¾¤~ð~èo ñSOê?ê‹"ø[`9s°LùÈIß°íÁÜeq„*8n¸ê?òƒÔ¯y@ð—á£\cÉÌS`3þiä=ò„ ô³JÄü°õ»™Õ&øŒ©ÔÉ%$óö¤?K|Xê&XâMèíøŽ÷âñ(Ì< «þüŽ6[Þ ¦pÌÎ-ÑÛaOå;¨¿2ðy/‰«/Š=$Æoe”F×ù»úDÌÊNÆ? æ%#Ÿ@Õ¦þ#Ìè)XàPY¯¹ _p®Àî/5 ¼m õçÁ2dçÝŒÂ{øKYBп\õB0žLŸò0nQeúëÙÖ{"«íf­( 5úát ÅlVþ†ÿèŸ[ÿ± oÔÜr8]?”\ö<¼û(°6ËÄâó‰eðïÛÈ{èY~Ñïz2ãx:(¬|‰]ƒ¹Üú¡…?oÊ¤í´æ]ô»õÍ-بïàH^DÐAa²S=’?Ëü¨\øTôc̤©Ë m‡¨ÜNOõú:j Òc]O€™¿ ä?¦ÈTxGðÓ»±úÌ C¿ëšôÔýVökixZÄűñ«ZôôÝ~•Üq“ú1dÝÍÆ(ŒSðwéúá3øë(!ø¢*¹Þ*DzdH_ãr:Õìy53󣲡k}O×̯ܳ€ÿ¨G®ÕÿvÅrz3½¼$ª:ïìYôW'ñ”nìŠÂ\¹Fä)Í‹ô-Qé·»œùçõèßžŒ¨3|òebû®ÖTò˜ž¨ã¢š-8—‹ÔŸíÂó(e"¡³ÇÔ_”&ãIŒÞù9}Pæ£ ^€Òl< ºBÿÝ㨌—2{<“µ¦Îƒ#´§èGÕÌé?f©ƒõHF,8¼ñÔ"ž&ú?kæ ±“fó2çý¡µeq Ö4­ix€ÎVô»íÐïÆ ³KQT€ñ}œ»ðxXgÑ£·ÆÚ%@ <ÃÒ̉œ[Cø±äçI§è¯UʼfDÓUŒþWø•àŠÛóÔé-þ¬BÂy¹ÿ¿^«Ú ¾È“>ɰ‚«9×”0ÐîXÐ5F%˜O#¹ô&þ_I,ýUÑ0¼ðum «Ît+ WêÚs"¡Lðú ~S“ÉrMé˜쩎ÙÐ\ƒJÀqzQñö ýg„¸/þê}rÔúœÛXüÂ]"ýׯYªêò›—åY"údTg_³ÂWÔ âp¶¢ðç;aЇËlhr„è_ÒUû.º±+ΣÛ!Û€_%B/5Õl ámµÒS?x‹î±È#º™Þ°ñiAœÃV,€Ïa|Ö]ë?–ˆô²ñ‰­1›~õþc,ÃIúÉ'p¬ÄD >e#ëÂÛ-[íÆuÝI¾ukžAžÕœ7ã¶2PÝ€ÿhÄžªNe|sPÄDä í¬o b^ð Í镎.óíè0ÿþ¢ˆµnªÚfìÏ:ŒV1hŠò”2‘û'n7nȤF?8¢ÔhÄp”aS|:_ErtCµûÕJAVø&)!óÀ]µ#n¨.wÂmµÏÞêÏ££œÍÈóù,¼|c¦uü «_“JÆðG¯ÁÀòÐÅaÙüÇüú2‡6 ]ЬFëbr Jžðiµ+¸|EÐß–h]„ÑýÕp+J³]¨Ä¦ÓK«§c½#¶#>ª,ó?^RûRͬÃü¨ÞàÀ»‰Ãb ,õ?Á¯Ž+1Õç?ODùª U“‡Ø¹Î ã…Ÿr’þxÏñîúqµ5«,QÜÐïÕ&Á¨ê½0ÞïúÏǔԷ"šÏBŸ½,zl0‚Ûê}2Ó – ßM¡Ytœ1ÅSîÏvz˜Î±+¨ÑÞÅT=5 4ãŒþüÃË ŸGZ¢>W ‹WxŠ#Ý0¢Êв§=ö|(uŒÓÀÃíåa*:»Öo/êÈÖlÂß¿ÿñUѵä :3äé“Ùû7§8ã…ò¶v9~$é…¢é6¶Ö“ d6×xŸ¨¥‡6«¸­:L·³¢·ø³ª WÏðÚˆŒ¿7ÎÀ¾ Ð?cûÛaG§€_-Çûeä ~á9 b.ƒ®ÛôW'aóß½A«òà!ãÑFƒ•O$®î‡xf´D!µƒjíø2¹\h,&ñÀ/m3ÆêI韸P«~Užˆs)M~"éœS~lz7³:üyc* ™»e)³"øUmbæ¿ðL°Ï­etòé!îË#õ=lj’ç @¹pKýÎ8ªSÐÜX?ÃjM<ý‘jîÂ&³MñGä=ŽuýP ° Êió\Vl£ÙúÝ#øßTüVg8·¸ô[Zhv!ÿX²)’ã øÕ8ªKš£àÝI7”¨ôÉ:‹Gž-“§¦OfÐÕS”¢z¼=\œøÆ9˜~Z½Ì (o¿b¡ Z¯±|gP ¸Ó1d»¬‚GnJn· Œ1õƒÒê_rO) ÿ äñ ùŸ]ÿd2ÝêªÙÖúŽöysl«ÃS$£ÊqTàüó1Dþ;©ì쀵ÿF¾ÅÁ`ùÇru€&¹§—ñõ2954™©&oÅs¸ÃM˜x’pÝs๓’žâU²†h¹[à‘ÜØ‘­™ÔÀùìõU'é:,xðÍ\rµ8gÜcâlòŒ¬p†úÁo`WIè `ŽAg<Ҋ˧U5›±ÉÌʃ7%©´ýyý΃_u&²@þ‘´àƒYÙ±Œ Qñ•½¬!LéÏüóÈŽ8Ž~t‚÷³®³{Túwe¨;󦪗郲½øÝÜŸŸóŸøz‰þ%Oœ j{5™Ë¾pþS˜/ê)ú—\c~mý``ýÇv¥4ªÛrÌ?÷§GãŸñçºz]Oú£ëD±aùmÝq QMý]WM¦%ÆOŽå Å¥oÉ;ºÆ4Á3}&óxϺƒAÜžÖÛœ¹UÏÁB¯$g,*~5”þí=ð^« ,ÔxV7,‹Z &{ëCõg0 ÍdIôÂËY«7ŸyM¼¥Î·¥óÉ º=žJcôâ½°Ê}É3ò ¶Zr£yÕ,zOxMV%ZÞ'‰Ct¿Ø}(àFØ ÊÔ=CÿXs´Æ Z2¢ï0ɇ°¬_ðÁÞàWá£Ëcjc©²˜û˜ö×€ù͸zYÁJ<à :ÉÄFOájíå¡úE¤bÇB·àCÆe¢‹µ²½vé‘H•YTºgì¶¾á?ªšš¹˜l¡ý –j‹ÿˆg”Ò\3ÔD0P;ð»¥ðÞ­á_˜cáNþ±Õò²R;îS8μ-‡‚°—ŹªËè°²‡ìì¨oÑÞe/öµ¹jçÈÊË’<1®á?†ÃìGæ˜ÿˆH~´ŽõÆÀ|/ƒ¥èMâ vv kžþ¼µófø+SÉ?`ÝX§ ™©;ñJ2¦Ný 6äFïIæa0ç© õç]¬Þèo'¡ÃZ…ú +L“j6i¼Á³²Ã¹Þ:u§¦’5îãéz-ãMñá3ð)Ué¿›ŸÿÊÛ­–ÖÿÓŸ†ÃuW±žãû‡fþMFÜÔ¥ûXu†þœ”ÄŽÁdwWƦ6à ¼ª–‡‰†Cð¿ é¤Xy%ãé”ÙÛªAÏÇŠfsrã»ìóo²Üƹ ï¨Íõž Øc‰XRá[˜6ê*¾R€„µqx2ý#!ýVŠ0ÿü>&1Q±Edç›?ÏPXìsžñïÅ[%£úÙùq_•Æÿ¶~7&ú«öÚe­¶žY¿¡Úsíî€_•×Úk˜?øE –ã<%¾z<¡Ñ|:XÏrús-:S¨^Â3 ¿ò×L-4N5èý!_èwÙ‡ç„ÏL^cX,ŠªAS Q?XBØó¤LýGÈ7…úý!Õ 7Å#Pÿ£ø‰ÑàNè¥2Õü+ÿEF 4†éç¯ôá®àúâè¯6‹ªà÷‹àÂìùQW°©QÐí*rYü;âæÛ")žn’xíò̺®óïò¨ P†,§‰ ¿½¤*7ØZ PúµXŠ+Tú%%’¶U‹±§ñu›§úWvk#É?zcý¶’1{:U£81ð¢fþãÖù1]téƒÏ!jþv~mdúïÆŸ›Ì3”/ôƒ.–mÈÙ¾ämlíxxºrÍøa׎³îrŽó¸(ªG å(‡ªóõ† gAÀñû§ùšøO\¿«úU]Å2÷#ÿ°×YÄ9D¡*à™ž‡óÉ :óJ=ýªŽÍ€5O ÷äÉÞνNV0d-¹Œ~ó0lFL®ì|¬ÇŽu-ýh!ÑÙIZg1bzà·ð<×QÀùROQÑôpJJ/¨CL…x ~•ÞœL6S\¾A9ìÎXV¨‘6ËeÅ‘äÞ]°ö—Á›ÖËøÄdäsÍÙä «™•Œúó»t¿%7˜ƒ©ÿ(ÿ¼ŽäÜü pÂd!øNô/)Nþqн1HÞ23ÿ|¾Ù‡î\½àÍ·òç­µæ}9ÒüFÎÔ?TnhWj³¨¼)*:oÆ ¥jO†­‡ÈOÒü#‡ùƒúÁ(ÖßÔ,€‘¶û·ûPáÝ…¯“è0µn¦žÚÿˆŒw¬šný¯Þ)áÁçe~bØhÀ†RÏÝyñPq}kòfz*T8JªL²Q?¨ããìþ%óé¦Ý*>F¨û“á'ä‰È)· )ïšUuðnV,«-L¶šÀ¬Žþ|·[¿Õñ *ç+SÓû4A%kÙK„ùó„/¨=À¯Š’!£—Wñ3kÒO>?=VÁò·£ÿû\Ç.G2&H†Iy…ö¬úݲôO¼ |:ÙaÛp©u~~æÿÕ× ô¿ ê¿«ªÍÕ¬.û,üŸ‘þ‰õá?*è%ôëª]—v’þí5­?Óž¾ñÝŸüy§\!ÿèJçŒüX­JúC­š«;Ôiö'²|¨üaÿ’¨Bà­Oˆ‚ ´ùÀwnˆTêH-)èX<ñM_®S÷ ×TÔJBƒ×¾ˆ¯X€Ý/Mý ŠòÈ‹û¿ [Vˆ8bœÈFÿ’ðøÌÚúR}®( iþÓó(|C0ä„r(öŒ9´àöñ¨["^†yoj˜ö©B'©-Wð®´øÕxüE "Çøcè“vóI© +ÌþWžÚpòŽDâ{™OòšŒ0/qka4; ‰pu9‹þ‰—À޲àK®b#»ŠVêÎß\Ç´jz-!øÒDX™Œ°ð‘è¬Ü„s½OÏ©O`jSáq#¢{‰ÿØÇ‘î#óGÉ_1Tÿ1„þ% 0aÆ‹“}<ƒy* ÷ã –îiÜfþ¹?¹BPù9Ä `ð=—¹Ïå‚uÎ:ЙJmòžX­ÑÄÏ•Á¨Vc%§yðm‰Cû ?rÇÂÅzK™R.ƒÙJôà EÿÄWAK¾¡5ãlí9œÉE`1WÍXpßU©ÇÞIÞŒë¾ë>V°¸±[¸Z{Ey£>é8Ã,à†WÉ?v£2ÛI¯ª¼Øöýf.&wÏG©óƒõ³ƒ_ÍÀÇe#×9£´HÉ™?èou¿ÆTÛ£ä ˆ,c‹±ÎUÑïÖwY¯“(ÒcÏ䬌gð3v“·l¥þãý³üàòQ;űܼÿ‘†ú»Ê¿6Gw–«“ËÌ.o7ç¼@»ÞˆÈõ~7zj—þ#€>%I© _†¾ØWŒ¢+³Ëþ kÉx"s„‹jXšzô\±«¢s¿²ˆ(b)øU¢pÖ‚ÿ¨âáú+wc*Ö5Ÿlžh$ÖãOì.â9ø:Ld€AOþQœóYOýùbdÐð˜»Ô($¡T Ù‡üøþè–H ‹¾S< 󜣩˜äWßDB2ïµXûà£nDJ+°^>x$ðçe±§;`!"èvοúsL›EvÑŽß®àþ,ìé¿Ý©!YÎóŸ «gëÏq%ìŠícø™¢¢‰ú;ÔΠbž¡ÑTÙÆãÎZàrmÀü^€\]Uìv­ÂL?&Ï?ƒ~˜ŠÊ³ð¹Cí_Ò‰)pýÉ;`ÆË`Å÷‚ʇÝ÷#Ãid¤JÈûÔîz2(ÓF>'>ŸÍ(6î×3ö¤ÉEôW¨EIÎI®¤»\þ£>Ñrj%ÝQ_í¯O·°Ne ›7Ÿ;RøKýÇ<­©˜ÊNKË1Ü ô½¹N…À”ÜáÏ€_2A¸©Ö¨A4> Ÿ—-ROøî2Ùëð÷åúyˆ+–IÅüj‡fRs3ý¯r[1‰xO’ÜDͤ›ö$®BtD<¿[,ËáUSjÛ\Vì­™ä‘[È €ÉÙ3û’ ÿ‘­ÐvzÓ>¶>£¿ºˆ¿kMø†è‹×0ÿüüÇQüÿkÝ•ÿ˜,*/âzTÆÝ4ÎÈEtßÁ„“¾T,,²ˆ–©¯XÛ?€j¦‚õᓯ ¿JŽ~÷¬ðpÞ”'ÔxƒjÖÃSåô±È´^R3Ô,ªÇ3÷é*=#Ï€:õ£®°'‘þ^r­>d[qÍvÜ©+ÆÚ`ÚÇíêRøìx·é†ŸL€ŽMN5þMȈ¾Ã¿K:‹$zÐÆïþýÕWmKÎz«Y› Œ¶1C=q Ëz RI›yq„^QßÊü*7,æ"Ð+Ož›]Ä!™AÌ%ñEAb°jì8Da[„êÜÃÁ(øk¡¶ÃZLeFÙ…×ÉI÷¬†XÏðügˆVRQEXÔe({/R˜ú«›Ú8åvØè}°1_³àÈ^â…ÅâŇGö'³û'¾& ªÛñ·ýwS«RË1Ÿ›;>¾%(Ês£;>3‡1”(÷<ý|èrªÀÈB¡Îÿè¯nÑmæ%üGHþü>ó?2À­¥…ÏM¬}˜ÝwÌ)õ×̼V"¦lŸµ ð¡¼f4sŸX?s7_–ûÌ ­q>åövÑ¢råW³{ “U Á®%¢²bžYÿs›•ÀñûÚ—ÕÛSýv+’Ïi¢§š#/Ó~Ð]çG-…ÀK÷€½Öå,îçÏ¡K}Oêëš?°¬ÁDtìgþù:NáGÈV\Ïsd\Éð—E[ç| ԇȾØU!öu²¸Èæ5Óž;˜cHÿÄS°(G`FSW8„j‹5xß>h«“™½`j£” ªBòQ‡kv„¾Ü˜ièf2²™ê(›:À—7F¿ëo.¤~p ý'-G2ëž¹—>V•@‡)x‚ÁÒœ3*ˆ¦¢‘óÙ›€Þö-+’pÿ£ÊÞâ½aXE©í›Š.,—u|mž¤>ŠêÈÖ0xšfV^V€ÿPȳ+Òo$±ŒÿØKý`O‘µH'ú‘<ɬªŽ5ÖWlÍ>¨”«¢¿:ïÈ¢X‘Žú_¬cp¾2*ùGGöô&㑈‚ÿ(®n{΋üôâ±’:˜âê+ÊëL.û,üóMy®–Ñbè5ôæú}æ*Ê1¥•ÖBk¢Q½Cþñ»®¡‚]ÿñRtCáRŒkšW¿†: ~5At¤^âªAû³9WÙDУ¢>χ1_¼¹Õ}ZLöf>_,’ú‡Ð%ÄO·©ßÔ¿Å+ÛûäÓÉŠ0ß-Å ìÖyt6ù±U˘?Y¬ ñÞо͡¯Ñ‰üà/Kˆa­/‡¤’±Ìˆ7?b…À‡gÕPœ{8´•ìŸÅSûPC7‘~^ ˆïvÁºÛüQò¤ÙðG‰é“É‹d4áRß´¢aÜíóš]ã]Kº Ä郆wj ~{Œ:„t½X‚ÖöYWBð«mœ÷ߢ—„¸eR5’–†'nÇ”ÔÖ]á?°Úsc.ü@£ V*2«Üá'v\ć*Q8TeÜ u¢Þž³ø_6ê"¬S1üÇ5®d=cÞCÿ@„Þ–,vr½el%¸ŠÏR¾ßz¥)õƒíX̓îµeÀ@æqD=È?†{·@Ûǫ́;}k›€êŠU°_›ÀÓíc¡'ûÅLÖªPýŠò MÐlÐK|°Üòyæ‰CYÓK•Â<Œ%«l®‚ùµÕFÏÈCîð_iÊýKîÒ¿=6¹mVô\Ÿd$óLÿ9”¯)Ðp]#ZNKò;Vtˆ|,b¬ÂîèYþ’¼U2cÞ+ÿ ÚC‰Ë‹ißÑï¶£¢;»k…ÒX«Y¬Ií¥r+èWÃñê¡rþc¶¾$>Öƒþ‰ù´MÌ?Ÿ+èžô/‰¢%rÙ¿a-™KÄ—Ó¨?¯‰}nËüs_QH=Šþª°ñ“=E4#¹®„kÅUðçMà?îbAêÀ*øñL7¥¯$®`oÎa'ròdŽcU+\ùG ÎgÖŸ€^ÙH}y„ )#øÕtOYùeâæD05‘$TgbµfweÃîÂë¡¶±‘×*âçËØÑxò<þcœrzò°ô»>ÚH®X'<Ù.x »Iq°¬äõ«±ö)å\¬µ7V>;°Á¤š1—îÈonF5š–þc¹FB¬~$"§–°£ ˜¾‚a XA |ÞC2¯;04ûð§·¨Ç-¤eÈAKO`~m{â݈CuŽÀ¯Q›ÝÅç0êê¸K{¼Ülþm=G‡ùa&YJPçº Õæ+é¿ÛÛˆŒõ€f‹:Bð«þp[½È:c‘?¢žzâr€°<¨Äæs| ð_{Yzí~ÐR¯–kÄXpÈôàûe],jW~·¸ôƒ¨DgŠ6ÖSæœìß~t,ž,¯1 fc.f¹Xb/¾VŸP^ ´NjL²q»KôZÏnúÈ]XäÔX¬;Vløó¿ÁÅæ€6•&[¸Í}Z~UŽþW®þ£·…lñw¯ 9Jw¼c4ð’-æ &ý-£ÿF:Ç'ë=hÑ%ÙÓì„ ·ɇO¾Œæö2ëÅM]Žpü‡­Tò‚]  Ò8Jgá] ÿïøš”h:ø•âXm~f.z ª5† hÆ¿Äcf1sK?QÛyï*-Õ¥ø.äøUy*ù¨ üLÏbiõÄ÷âÞaBÇaüGO8‚þ°[Y«ž: ,HBvÏÎ`ÖtóìÕ½DhOä,ANs4^(¢£½uÐŒ ÃÁ1õZdGjô¼gÈ?zã_²/ÛÂï·ä)j$zë¿;K©[¨1R“¥%ÅE#'½àëâ?Z0-§?ð5»â°31àWÚÀÌ×bö{³ ŒŠ% ò<æçX&:ýÇvµ>h¹õ»ñ©~gÎfþ`js3ùÇzԻݬŽyðç‰-¨|e½C»[‰¬+ ú~ƒ'ú XCzé.¶:¯àïÅMð« ŠÁ—Ê54­}xŽÇÁ|òrÚ{­ýÏ«ÕØ]k©?¯¯UÐf£ß øÃþ»Ï•ÕÌhéÊSW;×^«·€3¿§¯=ôíú-®f¸ìß°Ž0=øÕPð«zDÓC©¯Ó ýUb›ÌÔiŒád¸VôQ¿ªµ… Å?awð. _û^gÉéE Ü‘¸1逵=¬ÃâßËQ?¸Tå"húZ"åï "¶Ý±¹¶á|ýûù”X' ˜î“00ž:˜ß\Äù%Âê€Q.L|ÒŒg<õçשAHÈó_{º"@+ÆŠ¯µDºÝ±¾gxZ ,jnXrô–<ÿ5É&ÁŸŸáØí~ÁðÌMDiõÜoÎ:ªš\+ª<…#Ì"öƒ©]îøœÆXì×߯,†(rŸñEÖ1ŽpWã½ +„Z?è¡ÎÁ\‡=™Âw R\µ*—ùô×ðÒ#`[ûR¹0 ¦{9w= ùNt|~/ç“t žJNøó<á£Aæò‚3LÁ Ížßî8ñí¼^¼Ê;²‹+8 ¼\'Šæ´Tà«yZC1™ãÊLtPVE…Ú ÿQŠþ콘_»Ñ¬o]63šçe+ºamÄg%Aát‚ˆüžªÕ§cBÜ_õ¥HƱg€ÿЩ¼ïty±ðGÌ”¨E'Ð7ö=½±ÊÒ]q6Y?`§7pŸò•ÔÖ»¬ØOSÉO’;#jo•NϼŽæBYÍÏÀüÃÏêeÞ VobžÁf@‘#ž #a÷Otÿ±N¸*üÚ ÿG õˆZBóÕª0?êr ÿ8FýGs­¦æ©½F¿{/üKñ›†êÅŒzÛ”ÅÏ·ÖcéM´ìÚm}¾è¥ïÖ×1 =4Mçï?"#á bÙ†°Á@—nˆ(ªj T,¿ŠmˆpÖŸ¯£þ£žPˆ‚…,&oÈ,=°…u… Á-0­ä #áÏã«aúý‘F5[”›I<» ná$u°¤±äôß©Ö~‹ö¦=ះyorªMa§ÇØêBðའô†É´w\ÁßeÂT‚W˜ÎðI «ûM­'1~;ªÅw㈾Ü.ÝQ*ÓJ‰/¡þûÇžoçe46* ·ßòéÕ¿´<ä#¹£‰É?¾Š;øóV `ÃÀš#dq<Ò.,ãgú2í ÌÇÖPß[>ÔÉô3Ôµz#ð8_|[Mªzî#÷³X£•¡‹kôO\ƒåÏʳêÉùÃóÿ(‹Rî×»±C©ÄüÁ>|òpìÖ_(r¦ÃANº‚^uµ‰/ÑHL„»ß6Ÿ+â é¤ÿÇÚcÑxä>fé³»úrö5è¿ÛÞ,ÅdÒ¶ð¬iQî–eŠÔ2Tb‰Éiö⩞E—áþ…Ô_=Sï¢ßµõ\‹Ègžâeß§¨ÙH‡†kµtÙ¨ÿ8AU™]“ÉÍ”ç·öP#2þ#µQH[ä²wº¢¿jËÕ; ~µ K·kÌAfФéà÷IPûDpŒ2·ÃŸ7€ÿ¨ŒÿXDþu&Èîå§×rYoŠ(Æ'žf/”‘ƒåKð«)°ñÍÉWZšÓX+â?b:æ‚Õõ Zþ$ú«a|êò¹[`N å¶`þã¤2ÿ‘šKÏ_Xî\¾(¦Tk$úÝ)èœî€Ù]EáÔ•‰Vä#kÈcú¢–Ši6CÃwžÓÇy“'«ë´è`ŽÛ‰Õ_ÈL0!r ]¦­Ô¯O²¾Àžï…?ÿF7ÆðƒAǼðxk7b…*¢I°úóÑê8=‚ªƒ §’‡élámfu”ë‹BÌ‹ a­Ù‘ ƒ«ÁO«€ ¦7íêEV‡ÿHCÎTÿq‰y†CE)žÈfäåQÐ_uÌ…?ßh*0*£È‡ú9ŽSý‰ú æÅÀúÁTø?!» )ÜK• þÈû?éu—ùQšs'|Ušþa_)çMR¢Ñ¿¤*ýÛ+èEàÏí¸v‹RI«¦¹iCȔߡA+•€ZX~Øv£¾MÏÊ‘+ÔŸ÷™X¥ÅÑâ;:øû~÷:H,{—ÔÁÖµe>øUFBÛæˆæb¡Hb|Ö>þîÍ.?ßGòæB•ñDe±Ê—°ÈÍ Aø ʨ=øG×Ïz ±Þå¡S\Ÿ§/Åa2Ç ‘Úƒ®ÿšÖÔ<ßðG Á€c7Á×Sõ>ÌsN§v†[Fþ‘>s;¾Çî¿[—(OÃI0û\°’刚їßµ°ê?Nk=Èl”Éá™MFC†Eÿ«YDö&µä‰Ô_‚³Ñs?ÓA4V§:‹@ç—è`Sùä8‘êל ðŽÑ4°®Ñ­¤Ý{bœÒV[ KCÇyò mA×p¬º\Äõ÷%³¨ÈF5F“þÜ®ñÝÌüÚOø¸–L‰¥Ÿ˜ü꽨ÀŒ’ U~¾Ú¬Ô¢‹LoðìaXñtýËòD!‹«¸ ÜzX»Ý0 9ñ%Û¸SKÉ¡ö¢yè®ÇÒþ\èŸ_§iÅÁúìα;`LŠË'`›Þ ’èx•d» S€Š‚_U0ë ßm‰º8ÈXK,ê@øñ¡Ì¯}ÇmŠúzü¹/Z¢7†7]¡R“G à­õ…x¾¼üPððbøª£0ÊsdYvDAm¹ËÞé©©ÜÕ\çRàR ð_™Ì L ,Nÿ¬Éx¢Èô øÝÔÚõ„ç/ƒVb…üÀ¹L¡*#=„~w²°'‚‡*…ÿ½bœ§š óîÓÀáiå„»ðcÚøIð°·xÌÁÿÔ_m'ÿHk¦•û‚õ¿:Çüµ†‰ná%1Ï+pÄèª^àsÓS·žúAwôW)-{úbôNheâÙp¶̶ØÒ[ C+wd%&¾ÀdÃUÍlD?šy–W?àQðj¯¼Xí#|÷¦”Œµ  šz ~5kË­DEÁëϧªãõODh9ÈéQ‹$t(ŠÿÁ;ó“í “É,«0–ÿ 3Pòâ²Ó¿½©Ù˜<á öì6ïXfÔrîÂËè{P>™ø+5þ#­UÄ1ÿ±mrªQæÃ§? bqòfjÇšÿ&¤ L9‚'iñaBžÄœÿ“úÁ§JR5Šsg½RZ¨1ß9o@¸^DR/©uµ»ZU½¦î§Va•½J­ùÇR¦=}VþL¿ûYñ%ÿèKþQؘþWí°zH}¤¾Iß§ÅÖ‡6ý<ôœðÉ}Á¯êÀÍö¬ÿH¬öÓ"a <-’áä?6Ð?±ø†•?H<¸ëW˜üCÐ#g?1ô¸ïBÄÔ è¾› XžŸÇñë×"T*,™±ÒãÐâm¿ºÎ:©°Wï±Ç)É?ò‚pFƒÉX(‡yoâª#‰³ç‚Ç% ^^‡Æ*1U×u°„KÁ’¯âE’ñtå§^‚ÊO+ÆŠÛµ1(”›Âì Î!ZSQÒ…¨Úîßž Ôcÿz‘ÿR‚·­¨-j¨=ÉÀŸÄQ3i9Ñ0ÎÄÃÆÄùS?Ø¿ñÈE¤YÕèbÈd4ˆc7áûp=é jþ1†.½ÈST9þãþ·1¸JðÇè\‡S%t‡è±+–o+y¢mHÄ“ûÿT¹t «©ÿð&ÿðGÖ3ÓåRøø¹DÓ£d}l{Aް&™Ä Î< ±¬}ý–¢¿Ù‰'¬Çü¿š…~wñEaUñ?ÉÎ úËfN˜Öôù.l¾ [pCãÔ{_œ êÑäd1"Wk¯(ÌÞDãQ…¸b#=´ Ó,ä?RšÞòµtÉé’¡8â€f¦íΠ4¿w =ð,üG!£º¶ÖåNwÑb¥¬çº•%jÁuÏN½ß8Ó]ÿØ@ÿöotNþЇ,‡£K—üfÞ¡0õ-]Ö~·4Ñ)α/1ÏUtº+ÍÞà] Í”Ž­è’¾Ò¿d?õ Ý霻¬h<ûóþaþqO¹Áüóت4`¡¸JM¸³(•ÜõàW"œÝF~ßK=ŠLýÇß<ïMÑ·¾I©tðd}Ô…." É_Ä´ˆ(/c·ÆÒç“m™&STEtÒÆˆì†¡¿Ê(výüøñµ¼>CßÀîyƒöj½±4ç&¼J2b/]öyCqWXTkì~.Ïlh‹¾Pè9>ç+bƒjï æNŠ‚©>ø?Óðäì] ²r0Óóá?âêöœÈõÇS›Èñ0­3ŸHE1ìN:lÎ,³CŽñ9‰½Ï‚}]G¼]“þ‰ç³`5þ#)YQn4cx? ¿j ƒ1€Š³"x‘ÖðÖ»¹ÏúfÖ[jvŒŽËANÐÒí©ùÌiŒêê,qj.|ígrˆæÔLÓ¿ñôw"Н´‚,)%ý¶>ˆÚ CA«ü|µLi {añ5¸ü¹dVñ¤'Qöhô»C±cu`R`Ë®1Ùó?²¬ä~õ$ŸÛ`LÑÔ³'Ñ¿ÄÖP‹€Fµ*Q€;üG^ø‰¡ô-9Œõ:uâ—Á¯jà?šRÿ]†Ì¦=øÕ@™†&¤þÊÖï¦"®ÈÊñøð<›è¿›”îY»¨¨ˆÊ®8¢™OÉâ˜ãõWwA¯¶` q&y´=.wº/ý[ƒ–^å˜v¿Ä¿mn·< -Rd&PèŽ1æ{ð¶6æ1PœìxÎWðÉôO!†Ž‚?ï/ ÂÙÛýÛKQqrnf •~}8·šÌæ;@ýàSj 6£7LÅ÷&ª‡ÀÕÈæŽÂѤ?+ªÿ¼Ê¥­:O^K>À¿#CMR÷Æì;Ý›ú±p'Ð lÀBçç]ÐïNåʶ&ƒ‹À$•ŒõÁrÿÝê2í3Lâfêç2.û¬¢Y‰ªð÷ð(ËЯ¥Û×BÔÏQéß~Œüc9ùBëŒ!ˆ>ÖÈêò¬QU´UœüÇLu:üùú‘Mkí.¶Éf Gs² ¡¿¹‰iï[™u5€)‰›`{6ÂV‡ñncÄ„W+MÖÜ·¿s>¦I?ô»ãx~ü©pÝaÕqL³’€_F]v…ÚøÎŽ[è©K;‚×Xá~òÂðG&“Wàö¨]C¿Wå‚_]¢Ivý)wî/—}漩a¾ø®œQËkgµÊzø;:9¡ÔÖr£Àš¢}ÿ¸æ ÁÁT2ÿ£%Ö868yAý¾–‹ Z_üGEæœfÅdtœÏô¯Dó›ïRQô-·è¿; |v50S ?‹¡F¹Á鯽à?þoA#NÀsÇg“-‰‹}øÝX©(ü¼Ÿˆ(T±å×·ÿò“âèwç“!|ÃJ{âÝL¢®~ø_p˜®Ä@É¿nQ¯bÐ÷ïJ˜çI퉧YËïgÄ"-42£Õ¿‰×\@v\ Îfñú.üÇ b1˜]XÝ6k#á³=xRö`M}ñèy8ª ÔN”•P²NoóAÅ“Qpìõ¢®ú»9é¿› }€3JÃÓò•©]îx#*8°¯åqD¤þã¶cWr)ŒýzŽTµ~p’ºGBxn¦¨ÕüG~˜ù¯ämSŒíú6ý hKo0±Xúyè…#ÓUï‹(L9t3<ñ§ÅüõH¢ñÌÄsó9›aðO3ðõñB1Ñ=Áâ헊Ó;—¿Ýñ"ËÔŸ‡Ô_ÍÖ‰QÄÑÀUÉ xŸÖäJ¥ñ@m©_gv´ö‘\ašm[llð‡¿X»-þiý$19ÄP߈4øÉ ð~t&yŠªa¶>õç[ˆÅ-bß[–?ÕåLiŽÃ)Û¿žŒ¦»të–Öv»¬ØWû+¶Øà/²´ÎpF ¨>_l¶ Õ",s*Ç!úy´¢—ÖôWûY/=hà üÇh¢F¢ýÛŠ¼œÁq•êø¬{õƒÓàÏÒ7žchÎ f€{âïfƒ¾xó‰CÁ¹Vó»ùD»{ çÍØ© T ón$™üÇZ­ÉEJQ3Ó>¡=Â-<2£ÐÁª1úÝä#}Ðï>Ç ÚUè5ðýOQè/w®·NÝ ù£ ÛÎ{ÂÕ]ÇL’Ö>º–Ô´f˜ûÈ „c2ùG‡ŸyÃ|m] Ê;«u ÖÞƒÚüôDaUD¿`üÇ ôW¨LiŒ‚Í;,æÉfEGGª‹Q?èÇü¨„øVOº£L6ÝX¯(5ÅÌîF$¼aMzåå’ËÉ1à µ ú«‚àµ=ؿҘ~·!šßeàœÙ¬ÇÖD«‡ã‚ã*9N{&ë~%‹ËN¥èßðà?–1•ù‡ þãÀÏÿ‹_/(ù‚õß}Ëä–ðu¡ýõ¿)[ÔFÚm­žSß¡Vd·Pšk‰é_2^{ª>ýCý®CõÖ¯±Ãݰr^"—þA‹©]W_£“v#^¿…ÿkr^ˆ#Oðü«ˆóG¡™^s[F¥Å7’Ëõãú2ñH$gýù.ÕÔÚ‰°ãðГÀTSËÚàùýÄ#ì–18N+‘V|Ô‡ä?¶’úTen¨¹fð½»^}ºëŸÉôß]H¾`3E^Ør[u5—?ú«ŠLÅnǤmPqØä¦ð©y«É5í…Ç-‹Ò32dýà+ð«¢àr‰±hÏéõtO·Ë›FaSêâ2ã¦å‡‡ûÛü†×L cóˆèþ×6Ø`nÍÛeï´Ö>Šv6vÎÎq2©?_†îÌLªipÉÉ?SÝ‹®Xƒ¹ŽùaH¦£èòâóÏã¯ãÓg ø·9É'ÃÙøÕ{ã¦\È”¬nài5á?Vëø0ÖËÌŠ?ŠCýGüGMò…5äHiÍ‚øÂÎå>(ýÕU<eQbÛó?ÚàÅË™7QÜêV XþQôß½ç3¼cç¾Ýìm”ÀmPˆ}áný@K±Tlr®·ý•]ÿ±„ìû•Le´¢6¥ìyGIæÕÆDkxÿ)ùVdêý­{Xg7ë4‘\gôWnò´QVÔíùÇPµ£þÀîXAOvn²‰åNþ1ï‘ÎRèÎÕl&.GwkÙz@µÆr2‡æF"üG2—|rúÏ< ¶%ÿ(Èsåvñ@d¶ú8&ò;Ð…íéÀüóãLéD¿áò޽hÒšÍéÕÕÐyJn‰¨ôß-.µçÏÏü¿úzŸü#h²“ŸÒóßî•€þ»5´§Z{=¹¾UµëÒÒÿ*¥VWÅüïJP=hxŽ=±ú@G´Û„ücÈ«ßFqõL½¯· ˜µVû¬j><ë9ÄkÔ”;„=¥ÞOÌGEYuf÷@[HÿÝ)â²p„³ÿÕq5†ÖF¼ÁrmÀ# ’O Q›6\çùÞ‚ Ke”ÄÄOõ =üûcÌJýÇZüÇ|Ñf¢‰;Äpà¯ñ(Ýñv·Ó·" G:UÜsyfC[³œÚÆc¢0ØÙ…a$ò“=¥çìD¬]Yy ½itéêì(Þ/’qK‹Ɗ׵EDöÍaòíúó/¢ Qb9»/xY¬Îdro¬wf2oõ’ôß]Úñ³Ôjn­Ÿ? –âÿwðU\]×9sÎ îPÜ݃w)îÜK‹»µ¸»»;Á]Š‚» Ü‚‡ïyn„PB¿·ïS~-—”œœ™9³e­µ÷ŽÃÛ"ˆÄš‘k¢“ $VŸöq ćìnˆÙiª+…ÉLõ×w˜£ø[ïA%Ê£{;CþQ˜ë àž ¤ÿî3–yøÃBîêtâ†è0AD8š¯7xTk>‘yr£À¼\S·§Â6 Y ª4›‹xø.Þ`#>.6žy6þ~~n–U›Ù˜¡kOwLCO“|'6(€,é2ˆÌkêÏ«_uÂdBÛ ÿ±ä%½,AþÑŸŽ#ƒdQüÿâPÏ%šq‰x· ÷yýPn¿<´vÉD``Ñ¥µ_Ã"_²¯ÉçtDyOd\ú—\&WòeN¤'9¨§±5ÄŠƒŒxà~ÛÐ'ädÂTsžäOdE µ/àW[íDt˸iÿ¦"èÎpôåá|æ‘ùìÁ¢ž¿Š!¼B¬×Y¤3ÛàŠM@à^X‡ä|¼d2—ÚTL¯d~íQW__üÝfzïG8Ö~ØÙ~:¦»‚é¯niƒôqä©UA{²Â¶²³Êu4È…–ÃïWaNG:Vu¢¾Ûü©¥}_Ù¶ûÿµ‰À¦ã÷èëð åb’™Žg2Té,å"è¯Ò¢›Š‡ÿøÜ¿ä¸ºí¯ÎTd ­\ì‘\ÉüóJ¢…ÛŒÒÿ0oq’’Ãåż·ZÙuè¥ÕΣ€ȳ=Ž: Ù‘?¹! F|r6Õ”œÊŸˆ.­óè`,ÜaüGo‘ËÔí?ÝyíÖNkð«¹Ì£“RÍã,r®Ú™œ¾T±¿¦~ »Þ4 YË è¦D°Ž‘_Ÿïë+OµŒzP%ž¿Ö!X5áýÌ7Ú½ ˆþjˆy>ð®™ Õb•KÔŽ[ú•ZnŸ¶À|$ºÉǃµ-b*f,ÌÑ£Tª¾ÝHiüXžôÁÔåïTyòÌ +¤¶닌¤°óÍ{¨çè7h†OE–Ñÿ±›¸»&Z$o«˜ìFl[DœÅć|/š&’’„§£r-ó¸9 AÎ%—Y¿ì r’…7:*;Î X–’1Ùõñ1Ä;Ö ý¨MEÝCw阼Ÿ>ä"ùÀ[‹¡ oÕB—¿ d9É\b±VôïòûÉÖs®k W;”N(àN‡ðn!jý&y,oÙ|žw ×Þ\ü[2cê†QqüNZ²âšèJ®pÕê ›TÛZ†Åø€ží.… ¤Ä²Çñs[EÉ0;tÒ§á?ñÞé«sÕs6Á/&JC¤éov0£7÷;²Æ¼8ûÓ䵈"¾¾s£˜_{ŒxE§¿ÓìFZ´Ï•ñ”yø³k¢Ôüx=ª¹÷`§è–qÃ|ÇŸxÍÅfãZ¨%ç¥Å²ç„|Ï~ø×`ûè ó„zº²j3 þGª”º~UN-¡î%’Lƒ­§ã,øTyØß¡žô%ý•ÈG$žˆd.w¸òíô<ÌF‡ª-XÃX '¯˜Sô EWTúïf€ï~Leàøn/xü¢Æº+67Þ¡8̯ºdƒAç²a™7«öTcÌ¿Jæ<‡?_¡n1¡½~¸2œÏfºd½“œ°Tâ÷ëQ|ÀüB…|€uEŽÆ #ÿ¨ÁüóÍè¯î‚ ]VQøš«þ£=}|Ës/wÑ7³*ÿQÏ}ojUôµV <êuϺlÉšž¨¶˜ÓAï°‰àMm¨òŽ Ï=ù³e¨»È"ø*ݪ¼Éﺀµ}´6ÃŽ—é£ ?+™ÜN¾A½Ûe1°¾—ä•à;âƒÅvF€g9N:{3Þh-ýËÒýZî¹Dç™8ÖO”sû^Lž‰@\óïþ%Þ{Gy9¹œÇ̵Jå·µœímtæúªSÊ"Ÿ™©Æ¢y†ï ‘åŸÁªX·êµÌ:ƒl·-NO+ºsÝ)‹^k ÈOè²ÛØíœÅÎ »¸3…þÿãõJ1¡$—ÿápªîˆ”h¼‚]±ûVþënh™õ ¾å/´Vÿ8ÿH©ßÔ»oŒF̯]©»¢“CZSº_u3º3-ðÁê¯Þ¡¿º!ZɧB_ÐÖ|mä%ÿx`ö¿2/ü6ú«ô!Îï÷nTtáÈöè¯jÙV°6Š#ÂC¿š’‡IEÅVôMF˜Vêëu‘ 0;±yýx3òÆ›Ôí ~8ŠO‰„=ûƒüã•4ƒùëu¾|¥;׳ †[“#‰WbÁörŽ’‘+âè¤(c²’A”f§c‘¤×—àÎq¶]Šž™ M™éíXû¿ þ÷V9%|`~”#s‰Ç_žß¹‹ûŒ© BãxSÎ=ñcPµ™:²ZÄä+A‹fÅÇ':îVAtÔ}¹´P¿ ½‘›ÿþ1ùPDvæê‘~Çj‹J ž5+Y^€iy >\n5wù¸h`Æc— P­4"ëÔ#¶eç¹îÀ•ý¡ØÚã4ØÎ3úy”!ί ŠÿÑ‹¸fÅaŸÇ@`Ž€=¢zhb¨+~­¿iði°hÔ/¼ÄoÿH¨žÊ½Ìrc÷£ŸyôM­àU\³Yª“-ìÇ7L’uy‡Ò†ª?JýGö~ÉjLN5žëÍŒÞv©š£¿ô>Ý–ü‰vïʱª9zÛÊxÔõLgÚnéâ?bˆ!vØE”!kÛ~Ûî±å/GÁ,tV'©?TÎ"üÇ'u ¶úÞ.Ý¡äWfîDƒå¡ŠÈ½¢û´Ðë³ð”áë2£„ouäª|Âkf§,ScèÆxT¥Áη‚OÿÙÞRtn,\\øó´Ä2£‚Õ^-§ÒËÕác5o×,ßr¸_ïÈ7"Á2¸òæÌRo±œúÁÈ̯=ȧgògØÉs[DÖéªÿè!ʸýÇæD²~ƒ ÆùT$±sD(ïøÂq¤µ3¢D-âr»æÔ¼Œd>î2"…F0-sÐ̽'W~)>ðÔýçŸ}zw&¥#(F§íL² “8BjPöð«25.]ì)Ìÿx>¬±ã ^Žæ.1Š EÄùBd„--,¾Õ÷úËÏù7~©UЃ*)®1ÿwÅÄój£Œè ö«Eq\ËÓüöVB}u¼¾R›r˜\£F,"ž®ØÃbógv¡ª»5Žþ‰Ìu¡¾7¬?F4§˜ÂP<Ç­Ç'E“÷]ZS¸éؼ9MÀ€+pF“Η¾{ÍO´TY/¯Ä;:Ùía+ ßSvàO«§ì)õ×A×a¿³Ð³%$Šýõþ|Œ?PçvD{° ÆÄªWÆK4)˜KDtvèÂñŽ£¹LýlKË»ò­<î¢ö—žÃŠ" ¿Jc-aè]Ñ¿ñ SZКFD=_D麓HvJëÔÒ4ã„qÝèÔm ‚§2{^‚5j“Ç%…)­,v˜±v}ñr½@¯–“5eA?öœ8¯©ûÍ ºÞ=Z:s¢˜ƒ:l$–7&™ÚTP»YVZì\S~-§¾¯9Ú«ÃhD“1ÏãO2¹ùüZJ–ÔÍŒö•š|©ÑI µèÇEV±ŠØw° Z¬ZØ÷…tïÛÅìÀgDçuÔLjãaÁÁû‚eyÐ}sd¨+Nh¼ÙÁ¯²À?Á‹­!ÿ8Açó0Ô{Ô[:µþ†=ªáDt5‡Þ–ÙÐînÁ3Ì º)dE2ƇXñ°‘Ü€µC5Ä.˜{VjìÜ|5n¹yøcèw?Ê&ô›¿FfX,å&O}¢¤_‡u Y^Pä–…‰OÎY­ñXà¼]h˜:E=Ê5ú1–‚»8k¯RqùÚOöFp¡ø¤ø¤]tÎ%׈&S®Ïã¹VÏ­:ð×±Q¹•ÂÌA¥ÜT-F¯[™iê®ùQ=Øá8xõ^öV” MáS”jDug\æQéw·é~F,žß%NêOª±Tk9†U4§ þ¦ÿU2g16?žó4,\úT]þà Ý¸åäN𫞢ŽÛT§F|ü@e‹ 0R‘™÷UcœšÔù5¢þc-ú«eö0za ¢gä":ý‰~ >ŠØ0Ð…µŠ²]°.ÞTÂîõÀ¯;pb^ŠvMG:å©¿<¬þDÜÎÞâøÓ½¤ øUuu™šÛNK…|ùÈÄT-ÉPtTÆø¸oå¿þá™–/~õD+®ÿ˜]Ú`JÝWˆ¿ˆbš¦¯žÓºP+d”6¼ŒÆ-ýƒv!识ãÓ Í—~ÚyÁnâÃ(ì2ÓšíF 좹Ôô!£Iâ}øÞ’'̧ēËÄÏ %ÀŸˆ ÚXƒYdL¬Ïôód̯ =Ã!ì5é'õää{øUûzððÉÄj,è=¢ó¤Ø½±Lÿ8k†§#Íkc)“z›Ùöä€Èh1ùÇQ°òXœwØØŠøB¼ Éù 3Ä£ï¬{KÁ><ÐJ`—§Ó¿ý*©mðqÅÑ”×%³Ydu& >…"o²+Ð,úo]ñ‰­ñG‰Þ‰ñ ÝAÂÖ‚_¥›ždùƒ7My„iH7ʶú¥`û þQêgô"ÔŸŒSËĵƦ®¥^óÕåg^ô»u±ý«ùIgÈä|±ðI³EZ3¨C[Ðz5©nŠ?´à7<Á†¶SmÑöž¸q:â¹øexƒ\Ò5'i!>0%]ö‘tq¿¹A«íײQŹUÓìZ2,×Tª@GÐñp»ò"êÿÀ³ØŸ°¬9wvû›Å>'ã?¢}Õí¾ÑÿQ—þ'ë±å5üÇv«Õ ÍUV”IáÏ3Ã]”‘ñ&I˯d²»Añs³ÃÐõ/™_[‚\-YÊò Ø×Kô\WÔ°oÂÚ]fÄBú—<¦šâ56¾ qóMþîxl`6îô;=$£²ÎHLõÊp¿Jä<^ò¥¾vžjIEcO*Þ~rŽ¢h‡‡k¢jòß–ð)sñ+È6-m6CÖöIÀ¤NÀ^•ÍA%Nö±üj³¬¤ž`ùKÛŠy†+ÔúaÙö>¸xæ,r{É¥"R?8G4t?ŒZw} qTâ(¿Å~+µØËìØL–Ëä¤êô©ò¤KáLê?æñçÆö:°«ñü«_¹¦ñsÜëÒoOQr=%)ªÊ‚À2oFa¾‰§}¥“—¡²éºÊœ&«™ŽW‰Nüö;Xf pÙ<¢Q°úÁ~àè±ÀJs‘×¶';jný¢j:˜yîe§ ºï¸}ŽÏeQ§@±ÜœéﹸÅÕ K¡"jÊ&kÑ©áËWêKͱ¢7HnGÞrÃ’vç­é)WÔ_ô†œlovn0¿¶]K»¦q1³$#}ƒ³½õx!RÂDæù¯ä7¨?Ïì¶!;a®~¬¯Ô—{ Q‡h¶1Έ`–3éÉY³¿–˜ê/c¥ñA·¿Éª­üÓí(3†+Pàv²ÂLbN2u“Š5(kÖQhî]ÿ¾o}¾i¦–MÉ?JñƬFÁ(i3ŒÑ˜X¯>ÝL<¬äfø:2NÔ/èIñ°]?}¾æ4vFYøbížbËa÷æÑýJ –Ck_šæP©p~#Žœ@63­ûcìDtP¦¨² ö+ºÌî“ÈÄ;ókïi¿á3æ ³ZXú²¯âœ¯:ð“­_áR¨U®‚Ý[ÀЦ«ÏþßýsÃèEîŹøóhŠò’³⽟ Kð¯ô Ï-´Áo¸Q:ö¦ç ¹r:¤ÂNBµîà#÷½<ßsýÕ6Þz2š‹ø‚ÇäÛ‰‡€—ÍA1¤ðZ±4õƒ5ÉŠ¢Éœ‘sø›Äv?ƒ{D"ÿ¨"V™ñÕZ¼A¾Ïù‡7¾ 0Ìå Q=˜ò>h5o­4ùÇ|ÏDô»¥åkîW ²-O®³£l„r72öî×}$ÄSº”róÈŽ–sÕ=ÍOÔ7…üçüÇPðìDØ{ˆ}/p.`«QW”:½Fð¬é}ØÐÕ Î#>kØÿ‘×ê†ÿxIìS öj+¾@ÿùÆ:Í´ÖŸÔeyŠØü=7\ýŸÑ?72ˆXf4ÈgÀ裂`.AÿÄHFHE×@#Yò^Þ†<ü­ºà*ìÇ Õ–úóqd2‰¡oÙƒÉú«Öd5uYoÊáÙðûGYoƒÙ6ÄÉé-2“¥¹f4"{j™äcU}µ˜yêoloº Æ Þb;Lr3•’iå“КUƒýØJ.•Dy2…é÷ ôÅì…ת ’Û+9).[±©?_…JàWÕŸ|¡£}G•„ŸÅüŽù(‘šÂÈŸÇÚ/‡jÌ“Yž Ö¿äºþ—ñ†z‹· ³z Ó°“Ó¾èXNI”KUu´ ì!Îç$^e7óÏÐù&£í‰n !që± VP¾á²6î›ü¿ôÁO+ gpŸŸÿÿaaW?èÃá? â?\kÒRÀŸ×6ÖÂV|Ò|hÇç´m¦?øUê§ÐÍ(©¹‡UâW¯3Ó7Ó½ëð,|ÑÌæ¸e”«x‘È:¥-4üÁßÛÑm'?©°i†kÅåú_zaÊd uðjsØ´û¦™Í âÌ,XÚUô/I®ˆ %• ̸ ãè5žŽÅzƒŽ) \Eõb0«¹‰›Âíç¿»ÃÍZw¢Co*+"‚ãŸC½ë¢ê…Ïœbµ“o‰š=å 8‘ƒXg˜šPVàë;yÀè„'êMf}‹(þ)ùGPøœ(C—S_"P¹ÞÆ °Ò±ß%d)í¨ «Zõ²Á—b(V/¤#·z#nˆúøçÖ@éƒÿ…åIÈžh1÷û¼ûÀlO>ô0#»[…g+Ê]²°ôkx“MýU_˜ä‘ÜÕ•dGäO¯D¹0ùóyZf#ÓSþ£,Ìk~zGÞgÔ[²6å_«ß{’ naþc—k~íó™1Ô“A·&F {J*µO{|ŠÕ®É–*§ò¡ÿîv˜ógðçåÔ"|FlÞ.,°//ÕR µÞ ê?"ÐEƬ™Z nwÎ; šÎ(“¹©•©T~¾«õçóA}²ã«p6gÉ"`ƒš± ÄŠSŒX¨=’o oJ9ÎDµKíW=e5Íhtøó7ø—àW•É~ƒŸÂ]Ø ’w› ûŒ94ÄzUENüÁMžZMòñùÖ+PµÑh“wÊœø5Xj ÎÚ—z’öÔ4¬G)Õ˼‹k¡6Qå–>Áæ®×êéÛx“jI5€ 7°ûÕKtW)ìVÔ °û¢a-MÿÄÅd4³@ˆ~±ý¸³™µ]y¡4.&ˆ îqú]: Þ** ü7îÌt0º|àW&\w>ç"#Ó:驨Øî´†=%FwNCeyЪń¹Ênüª™~ÏŒ‹ÿ(Ò:Q¦ÂQùœŸù;*:ÞþLìML}Š‹oÍ4Ç\d51U_øû<÷âV"hþàj}"}™ÚátG—x\hvU'…“=Ã|zÝï£J~ºsËyÈÛ=ô/yÃRˆ>îmìÌ0§Ä^¬C>b¦bÁ*&¿~ÿ­¯œ¡þ#ªû$<Ôšê?6—)h_©ôãzTc‚‘ÉLnîûÜÓwþ£¤ÑÅb|‚?ßôWÃñ)P{…þª$JÁ ¼÷³ÌèæVziEƒé^nN2ÑÅpï:Ëi/Ͳ:½À+!¸Øí“ÌXb<oB÷ö÷"›U4œú«Yú-Ý“j’ë`™°‚/‰‘ÚZ1­¨bˆÀCt>1‰ìFˆœ Xëñµ”tÚ8ETlR±+KÜ«ø»úÖ>.'ôœˆã<\„¬ kñ§Z;Ô♈ª}†;§‹‘#’†¯@, ò–7Âæûp_c„ê¢úõŠça\i{"í«¼ÅAIxå ú“@¢ÈyDþkQKe‘ïÉžÚYD'ýé×Ë|þŠóY¿›Î$zç‰èwß‹_ɵž¡“܃Fh*:¤(¼­›ñ«ABæñßÅ`Ž^a"‹mô¾fì•«ËK!XìåxRd6¯ðÄ­¬RbƒU¹ú,• ß™ÀOÈû~I|ÂüâF‚6º[+kN Á¼§âw“‚7͵›A]ä$لʸuXø¦ð½Kˆ\ó`íD»´ŽÝís­Lÿ’ÐùÇcã–ﱋ;u—ê™XC?ð«<Ÿ§ßmcÈ=Øôhb[‘äE-ÕŽÕGÉ¢(í…:ݦñ’Ì áó—€Òì“Þœ»ýô\Kn° ê[ú¼ú0³.€z½ jU÷E`”ÿ$›$KTF6B2*ShTí Z&3ùQÐÇ$jµ«ã:õ#ÐÁ#²³—©àÈeþ âLf” &è.Ú܉ÄñÙð­B찊ȃÕþ‹›ñì°îÈcXövj9 Ï[´±µéuÂ^ "2M=úØEÄöñp[@÷RªÂr»øÕý0ŽÑÿj×WV¿¸Ù±ÿá ÖÍDÿ«5̬KgÂj Dƒlo°@/ø[ðmYïµl†ò$»\%–»×;Œþê#µÿ®é›™T=¢¾‘ø¬ ÌWÌM²(t(ŒŠZ@s28I©+ñ‡IŸKþ™:’.ðgÕäzzä1ßÝí?‘DŇzrFzÊdD{­U2zS-WËĮ̂Î`WËàúGqÍ+QJ<¢£/ÿöädÞ!¦¸´«3©¾lp “˜‰*D+]‰=¥õBcúJ ô»Þ°äçéÒ2ÀyŠžz}ð+þ‰ñí¼ª øUWõÇ蔃÷Æã¿R?xKË­§qŸ„ôßý§üG*ý¤†qÍ4æi=kNÒ’eŒÆŸçhzP?å/÷íï~¿ÿqưÖ8§5ÓŒbÖ1 äb`»¹ÛÜ…~7,NõÛ+ž0Ù °•@cÆbAŠ[Úãšh†¥oÊ,ÊÌVú0YÚ¯WŠÿH",ð¥<ï™ä-dk4»ÅbܧDç9ˆ5‡ŠŒÂ ×üÁÆVó¨¨L$8{¹”ýÝÂBÇåÝÑä Þn›÷ßÅú¢ªì„ûI}½¯ÿùJ V¸I†“ÉûqÊ+ƒ_5À3Í%žÓåüÇyð+o¾B]Y¨)¤_¯zÄèŽOlŠG{7ʤùø¼TH<W„/rT3t‹ñ¥·Xæ^oµ¾ÏxE$p†S_eãœxSCsüªyŒF›lë#õ‰è-uû¸o¥Ècû‚ÖU‚ÿhÌüÚ‚nÿñ+sP#’óæ$ÿ.]3!æ¨Üh¹ ¿*ËÌóÔ£ø ßýÿ±ïvÊ® §žDÍ ¶ë xò=qT ¼Ûl§’i®èÀ»?Ž. w„aOsL§8wj)S·QGÒιïøÛœÕè¯î€_5´â?3ƒÜÞƒ …ÉÔRýWô»÷´Á:–\×*ýãþíéôCz£‘Òtèåâe·hzF_c…aÂ/ns?Ïð|x«B¿›Ž\ó'ìÜó “¨"ÄEqßfòW„ {ÍÜyĹ—Àpˆa ò‹3ææ¿[è?ÿÐ<¾"É1 þëA¤oÀõF‘0,̬Í-BÝB4ÎÝ@áóÝk–z=¼Í!ò•¤ÄËÞØÓ¢ørXºVupés–ïQkg?©ˬû7-`8šàs÷átòìÄ­?Ã'Ow)c¨ÿ¸eæªÓa§T½¨õ û]Ô“ÃWô9ËA-WêÏ›ƒ=±šÑ#ÂÓZLœÿ»|Ni«ú€çͰvˆÚfXœ\½£Yä,ù…'qïÔ e¬Ÿù¸rqÒ|­mµw©\Ú–”ÖeápÚ_»G‹o%`æ xU&bìµøq\— §¯†ÎÏ×ã?öðSâïæÀÐì@SE_Ió‘û\Äü¨!Øû,p&L%›Â¬/oPI‰¾FíÁrJª'²Õè˰ÎYá°™ Š?VÖ§ûäPÏ%½ñ˜í¬lh–îP+7› u7Qtb8øí®zU›õýQ9lþB~bI*UöÑ]j‚¬ ²טbÅÕF.N×i”JåX§%ûËC¥ÛRöRIõ½ÿnr‰9JéªØ«9˜ÝLj,\Í}è³[ˆõ~)à….‘“÷C³Àt] nã?î2!ë5}YüÇÛ¾fŒËò“ÉõÄOï&c¸N•Wþ)Z¸Í9ú— ß)’[‚»Q›k\EO©¾êú°º\o)Víd/V»É$úÛW©–ÀzIT+´ÐåÂ`lÀr}“ñˆs¿›gSýÄ[ëbŽþÂk¦ü5ú­§sNÐÃ=¹¼É½íqüÇ+€N u¥/¶¾¶(íöÍõ;frr°œÒ!ô½ílE§wo)øT ¿gNbT|P:f€X¨´[Ú©R  ‡âlÎêK,M pˆpú»ýÇF}±9“ºÖqðŒ®èïœZçhN 2­U tëñCÝ Îq»³ÆnDÿ]?UÔnF’‘7飸 U}Nª¯*Sœ¹oå¿þá•V-˜~÷¤Vèן§eþ`z£§‘Ï,@ÿö*œ®ÕZzãg£­±Ìˆd¼ãO?òÏYíýK<ñÇIx ˜÷ŒNðç¯Íâ’ék¾5t#uˆóû½µaP䯟ó“ÎxÃàQOãÝ.‹vT#ïÈ+šv¸Vœ@KjØ…—°¼Í`YŸY½À¯â[1ÅLª‚žQç\¯²YäÍðÌ|OFÿv_,üGt±ëAaÞâ7jâ?$ƒ‰ýJ%KÒw<:wb¸ðÝÕZ¢×݈~76Ù÷)0›œœ¯²¼9s¨ŸÀÚ—Á6V‡«XŽ%MgÖùΊŒ~ä]¨|¾ŒÏ¹#ú‘ÑÔ…‹œ’‘>~ñþ9îcTòú8Ì“j#Èz¯ üß1`""g¾ûÍ ÚèR-™9LÌ@G64Ç㛇ÿMþ0;W”*Š1чµ²ÿ8ÿH¨of¾Ü #›™Ó<ñ9ÿðÖr•ðLoÑ?¿£%*ÏLd™ÿ±Þ¼j4îã÷O‹ƒæø?8'q“™PVÅ7'š‚qM<Ç\çÏÞÂÕÍ=üyø±Qúa=½°±ï×aR~¿ù ”²â‰  <±9^ĺ„ý¯¾Õ‰6øã`î Ò¥¼þ€ÏˆH4bÁšDà'±„]À»“Ë|Ì?ƒ^pª¸⠾ʗÏWµrðÒ‹„ŽehD”œ¾â(ƒ¥›oU•9B請ðóñ(Y­DfÈ.F_V ú}»Ñ q®ó þ1’Ì¡!<ð`øU/ö"ê!Öµ¥ÞüDOXñ±Xü©²†5@„D›4-õƒÑ©³Ï„ýþ@0ßRØ`ê?ËUê}cß[Øû"d5sñ¥éÒ{ žØ[–æJ2„š_»ÿÑ’¸þ­Uœ§>Êî¬êñîlüOg{6¾ãSùF€… ¡âïRvrÎÛàMKÉ2ŠR?Ø,Ä3)+<È¡Îó,Ûàq÷Ò¿ä<ëõ%;*®^Ïx2;ðUi™ ’Ø>ÇuN#7<Éý¸JUB®ÆŸÿ©ÕÕGai]ó?jQmŸ÷¢ ¬ûJ;9þc!½¤~µª"àWSìMôëKÿ«çܽ¡àu)U7Þ!Ï ÷ÃÝ­ûÀä;Zb%W•ÐÛ¢Û×Ûéh_SðGùœ-LßÊà$#yÂô÷èwcоw¯QWjô»Å‚ùKàW)É¢—Á¼(§T ç7¦66¤»²ûÀÈïÀ¿õ¡›ÉjxŠKÔøÃgÌ 7~Füò_[Ñ*ë>…àÏW/jf]³§ ëªå¼³‹R¹’)ƒçAë&Ÿ_´ËÑ¿¤9µ!'U,º›xØž ³QÀ,\½Š¢Êÿþã‘V0XÆáGýG¢çÂý¾û!ø•müj¤6Ó™Wô’¬²œSŸÃ¨KÿDÛxA7Åùg‘¶UR6"§h '³Í¿PìúéGÁ´Vš«ÌkäY~hŸûÀ¯:XSDið«IèwãY÷µ¬ÆžÚð«sh# ›iõb[æœ$„¾Æ»Òæ15¨ý¬„V¬ÏÀÏ>¥™èt‘šþí‡Âqɺ¹ŽÎK¥±{]Ñô,„ù¸I†­ä "Ìd¦ ÿqED&–Ý)ž|w‡;´†ôÄÙÎÿ ½îvÐ¦Òø“’`-ó¬(g`¿ÏM¸ú¹çµ }·~ðœÑ˜x¾'û˜ëZQ©'D1EüM5™QõLr½üJÆÚóð›È?¾…_¥Ó½õÒV933¹UòzDù©Œ0‹È?6JÞ .›LÆàʙѠˆV­h}(õƒOñ`6.‘ ”ݵTc,)ª›BmÀ2‘Ó¨Ü;™¼, ú1ºÛõÏb­]È&‚PO±(‡=DvÙ¿8’]uÀ6¹& úbO|`×s³Ëõð=»ð!{¬…ÔFõd.Ò?±/ÜNN¬ó<Ï#´{¬ªtS¬CýàzzpìC×t‰n!Uà?º`óŠÒÝv4ÿ¶å1#ÔzoõÔ5•\Áz1Ôj|ìæZ\ãL¥Èfj¢óyNÿÄB`N«ñÙÈvP§3Q–# n¬±âLð«FøýVQržÆ°y©ÔüÚd™›øyüÇ)û¾=œY¸}QLIõ‡,–Hýà|NUëO³uˆõê‹´à{çÉÇ:ámoZ÷¥Ÿ:Íw^§žä2v¾LÃzÖ'ÓŠkïúÌV4B‰¼”ÍRÅåÌ`õƒçPîYk ŸÒ¿õBœ¿¢k/Ö¹ U*C¨÷xÀ ¥ÔFôdzO¢»äd}ñî‘”k~T, –ºŸñvýO#€swŽ3’Z¹ØÀûtòÚE×Ý2öuæ×þŽ'™K5b'"]æbý×P£ò .¬#¸%÷&µ(lþyS}¿™]OÎgC ã¶*ë”c7•Pð>Æíef`ªh¢ÐͤÚvóšÈŠ‹FÆ·Ö|À ÃÃúYêü×™@³Þ«Z Ï÷›1e#´<Õ°ð™]ÓŠ¡—¿ªkuE¿{‘î—UÍ <ìïVª_¢~ð~Èì~<™BpÈ„Ô̇Yquñ+KeïJÔ»2\åc—yž¾*.-ì*XÛd eð"/È?zÂv¿%zôɰŒ[ÃQ?xFk„Jj!þC'nöáþ•'Ç­I”2Áª"oP«‘™xª:ùÇ4rhO³Öwžö%£31jk2¡{ä&";W™ºWŒ@î{X¡³àW7°÷ÍaÛ~ÓH}‹ÎQˇþíÞ`I%©9[2NâÞ&4¼Cìp¸‘‘çx–8¥WÕˆh(=üùVøóLª?Ý7l×èwßRÿ1HÑužúo<ÜjòN׌´ífÈþWeDbüÇV²æ¶²º­~ÁC…‘„ºøz~•šÂ¬öpµ?ø©{PDûÊÈ*‡Ü :º_ºƒÔ’­&ëmNX?x_lµ*ƒ(í¥¿T[TÁ}á=\3”N²ÏÔ‚a¾M3šªÄȪ=ß‘H>Æ&×7¯Á\“/dV‘Èž‚šm±S9åÉá<œ©öMfžÄa‡~T«Ì¥*$§ =w» *”BðÕÜùGwüGΜKõ7Hv":kCý` TÏea@"ñûNj1?êŠèÒì»*=\r©½¼Ñ7Áþ.Ð?1_°þ%³˜¤9J´%¢Áªþâ¹Êé¼±+¢ß‚~÷<üG#ç$þ¼øUú«œ ÷ªL½O-Ô+‘yK‰f£ÈŒÿý.ý.ô|î“uŒÌ1¬Z_÷£ý›1õGz$¸ò‚fUóåæ&¡~°3õƒ‘ŒçÚéwQÿñ v»4:‡–ùÞx‚îéºyE6¯ÒÍ]ÙÜ»þ›M¹ÿ×1ó9ñäRÔ7׈™ÇÒ‡5‚^ÃðUa¥;~žjš7œøU_ý­U|µ_<œQþƒ¹“ ç=À3Úc§º‘d7Í <î|õ!"õ~è^XC©SXƒ{„6.Œ˜Äòå 3-KÇœLD;›Ä©ï^ó­ ùÇFtªÑ\ž3÷BuTu—ÐËô9SZÁÚ‹:+=¼Ïj2oö8tõÝWüù^fŒ à9z|öe¥?ܸ§ô/ÉKev["Óòô^/EÝ5(^s7÷’åøÂw× ?BÈj?jgŒ;äÈÍñ ðåJαõçIáP3ü5ý v2ÿ<€žXD¬,|Í3âñÉxúòTŠf¤{uð§;ÌHÁi=Hô“ÿQL*&LÀb”[9Ù›kî=åÑ*@Áâ?UÙßL0¢IàkûÈ䎙C¬WYØä<ûaÃ*˦XêgÒ>åu›þ%¯X¯ý¯^0uÖ¦ê%õKðkõ¹›;±ÐÑUE¹[ôpo烙KŸnéðk÷È?ÒÉWb¯UšÉ%ÔöO뿸Ê*«ðK£éº2˜9æ7è\ÜvŸü†ü3޼löç1}a€ÞãôP©ˆ ¢s‹,Jýà5êÚs;+m_j^>¢!8ˆzyª,üªþòyŠjÔ*ÁôWm˜mx®±Ã(y ¼3ŒÅ¯¨ÖÊÑçK¢çšÃÉéîø‰Ýy‘‹”VÃí4꘥cV±Î‹²˜Õ×} ½õ9æÑÓÞŸ·ë¤ˆJ=ã-:´wF‰l¨ó¤Ö:éŠE…"õƒ{ð©è€S Ü#Pæ­ÌûX9b羕ÿú‡Zv<È—sIk¬›â—¯†ï÷7ÚK=™1ÂÈcÖ1ë Ysº–ÿQÿñ“¡ëû·ÌþÖÍÇ|~åšÌDÞ`¾câÇqý´ùýK.Â8?ÈŸo7“H/˜Ó D» à®’ZµjÔ4¶ú‰ºÌ‚ñË Ÿç¢Ô™Ñ‡ü…GêrÒB6 gû'“SèOÚb³»1á0 _ÙŽkþ„~÷$y—°G³@d®bßÀRhøô0Á]‚Î,{ÜOê[ ïÖÊ x^Le^XÛí¨=<ùîøÌ9°þœøŒ ¥ˆžçR’Àìô÷íð“¬aDø“á?æ`‹ª’ÌÅ®–ÓYE½Å´RYðëˆK[ˆººÿ76'õmz ®lï^Nr‚ˆôÀn‚ÿ8Ãûü¯L-]}ñOck7“ƒÌ%&›ôùµôÚf{¼nJ¹nè4»¹V²¥Ô(z#ˆff {´³}ñË ð™ÁË4ðç î77h£µ¤øYÈž‡a×â€7-ÇkånMÂÖDê‹è"øÿAjµ\ÝÝá;±÷EœNõûÍD?ò…Ôøœk²ž»HC ,zq:^b~ÔU t'—ò¤Z£ŒolÚpâñ‘ÔtøJÁx"²à?’QysÖ`5üò&P|G£Rï=¥rÀ´fÅÞgS1AÄJ“W"_„œ¨ùGlf­z«Ù|ûˆÎ#ð«T¨´b~m y\n<×eøä¹äÖEóëå“):s†·¨Ýz.Ñ·¼¥:&3€ÝL³ Ã%¿Ãêßf½Tt;\ ²Ø|mú]‹úóS¢±ûaìÔ*ß_oõƒ-"_Š]°3Ññ)è Õ¼©Ù[rº¤gþàŸÔ£Wµ¯“½ UµUT‰åá`úÝ?õµÆ'Nè5²¹ÕÏœ“‰ü½)àWÅÙÑ-5žLd"Œw'%o¢˜ÄŒöŸPqõ%ûlVYúó’îü£¦~ÎŒ {˜Ø(Õ)m¬N*Óüª":Gj)üÑ|;'ÝL"Pñ’ÈžJï’st¬Z:úówE\âlµtŸÂ­zos©pE9C¹³BÚyáäæJ—Ðçf“‰;:ûÇvc¼œ§JÆüÁ\ððŸD>¢Ì<Áî[ù¯x§•¦¿ºˆÿK+žmÄÔè™ùðç9Ð_•ãt-Ç”5Zñ5 üÊ'<‹¸ÿÎAí˜ù„Œ½œec&šgaÏ}™ÿ±[¬e^à}±°0 ÷·õa¥EþªTŒHµü¹¿ˆ§—#¦«ã[N\©Àr’†x#¾Zâ?_EÿDKhD%»Y©jÛ†(.5+®˜ŒÿðådăW_!’‰'áÒï¾5|¹*/ÎÖX"ÚñØ¿ã`` þ 6' ŠÖòØÙèXûyâøwwx\«/½ó3~UUnm*¿Vø{ÚWì/3ète¬Þ(,vÜïÖŸo4šÀO4·úP==&eˆ•Œ÷/ó,³Cìÿä$¬ÊE”­ªô/¹ÿ[w_;ªÇµ’ƒÓUçj†‚ù=Y«GD&“«¶ù26ÈUG°Ž=ŽàšÆüÚ,a\wE½†Ù|*&hU^ò€uxÅò¬ÀWzXGÌÂæk¬S#xéáÜÕ\Aƒ—¢%_oÐ[KÃlËy|ïª!2r§–Á~ŒAmЛØÛ r .ã2üÄvl}J~æFžÖD"ø‰ÖT3öWüùNúïvƒ?ORƒ ]YîýÏ(„jÁ!Oþì?Ѝ£ÌeÍ [áê•“µûá&ÁWü*¦†ºâXÆ#z´']Šû€7S Si©ç>‹¥þ@¿Øšp¶éPJƒ³˜ÕõmZÏÕŒ—ÅÁ€S£B¬8ÎH ßæK´’›«j‚mM@ö1O‘žÌ?êF¯û*ÝcïÈ‘ÊK=•=åÏø?ìéXy†»|Ãb½t`ð%aîQ?ØÄÇ€ý8BåáôOí¡v.ûºˆu>-ûªôöAX”¡²÷rÈðÀ¢û¡¬Ðjé­ñ5ÁD’ÄA5˜Q%Á ¥÷o†ö ,+å¤/á8»?8Y/âý³xËA¨Ã¢ªæ ‰äº`ü‡¾ÁˆÌ3; Þ˜DE·SÿD.±Ÿá‡î‚T §sâxªK"Ò¿}/»D¿Ü8öC"`vä&T…uEz·ÿ¨Çl»Äà%8uMd6±Úz¢2;yñõQ]-âÙ®£ëH6¼IêSª¡¨†— þÜUœŸþWÇAm«¸OáR:¹-K4šF#"ýJÎ3óv8üùjª«ÚC=N\§‚ÓßΨ.à;[“4³ â?Þ‰S¨ê†ñùïô¿z¨U Ö?Ñ_«ýóŸô½z¦}d0s™gõœ®¥š‡‘ݨo,íö׎»ÏGx>øi'©?OFœ±¹y„ô æZ1Ë4=×yÖ}‰UõG‘•d§Œuþ<ªœóß½æcZIøŽBðý5é’TŒ ä9ý¯–´‘‡>óçÇñ#Y»õU¿³âbøû°màŠgpòpÂËY@E¶²>àwÁ¯\}Gf#-¿™п=>vo$Þ#W*¨Ç¨7ºEþq DkÅ–{ÈëNã;æÀ~4&kð¦~0,­¶—žÇìÀÝ—ðç…@“Ö ‡¡_!¸y$2¹f-óZ×®x¹á./„¿Ìcï– 3ÿ˜§e1ÿÃðâC±¦®þíÞüô)øŒ ;-ÀƒÈtN}Ž—ÂVn†YÀ“#M1#|Uͺÿ1;åi;y~µÅ*N-a5åA\Ù.x©Ô Ø¢j6* öþxÉ>×&¾Yê¹$1^ˆ¼ðaÙˆÿ£ÛItá+“ªûØßÕÔþ…~ׇü㉌CÿöXäüò&öÙç·R2?jaˆ½Øä”¸[™ÉÊÊgV4òaj üyfQ ê ž Ž½HÿĦTVÆ¿Íç'CÓº‰Øû](ÿ‘Adá*ÏküŠ7Üj=”ë˜FÕ‡ùe¨x[N¥Þ{e9çX©“JÈ´§5ÄöõÑKmcÿ¯ÀÚvãÏ÷i õ‘x¢–ä3µQu%âNWf~Ôbz 4 ðØøýÔî£bG¸¤Žd ×x6ÝA›¢¨Žd™ÉgV¹ß´ ð±dq"2¦R© D½éR?‰zÁ¼öix•–¨ÍzRýÛy×» o1‹Œî#üyöÙ‚Œ¸$5Æ9Üþãgý"ùGÞŸÅV7²ßá?’ ßgפê|#õŒ—Ñ[Ðïq6þc ÕsÉA|Ð~ÞÁœÄ&AýK¶è£Í-¢6QÎþïmq…jÄ:´ru”ù\ÿáíÜs’9éZÔŸG…ÐÌNFRTºê–·0!‘\æ`ŒûÒÿõÏ´òÁô»Oé<ócq}ÐSéûð}ŒüèwÏ®ÿج•1Ò1ÿ|-ùÇ+-<³”‚V{¥1“0ˆˆ·¥9üc!}/—‰iæ^Ð,õƒõƒÞæ5x³)¬8 õHm*ì2ë9 :aZšL“Šo• sÊDÐŽ¾|¦_'ÿ¸¾â½lÎQ…üã®H/Vaq6Zq‰  +®›á©™üÉ<‰~·<ö`&kÍ‘>Ū‘ñWÈcâðNæ¶ö‰høÑnboðeGÁ¤U¤–q2vò*hûl¢bä·•@p†ÀåÞÂ2§ë.kº•ÈzjúΊÛî\gëÏXy®r Y{UôW#±K9ä[öü‘lþvDÄmÉ2Šrú·Tgq™pœÀJ"'ñ÷Ò²Ÿâ¾øk½çzx¤ÒðÍ@¬¶ÐUožŠO4^k4ÙMRbfo"è-`Y9™µ$Ôs‰gÜå ´ÀŸMÃ+ì»Ð_­AEô‰Î*«Ðsþ…Îg#3OÈxJƒO€ÿ8Ž–Ì՛ѓ+Oi¬ ±âø–Ö²Ý|üÌšò©õQösájè¥úRÏýšî¶º3M@/VC=†‹H„ï8ÊÝèÃÏÎaÝ UžSć5:OôÓÌp«u]N z¡¹š*³Ò¿}uwTRg-½ZÚR›·ïÑ“Äü7¬‰Ù±£Õõ„šÜ¾ÏRÂ+XÿÄjúa3"HSò~Ò@‡PP¥sªÁæ7bêà_ÔzøÚ ¨•¯mÛö øóööÏê¹áH0jò–½"ç$÷)ô¡þc¹hɃ÷R\%›yç>o¶›ªý*¶sÙñtîà…KÀ&-UÅí¸àw±É³ ž¡Ê[æÜWü÷á-Œy,÷É:£µÓS¹ÿôc»ˆ‡~7‰1üª‚é§—g•mZe#õsè|øFûÖTº°Ê=íók3r·£ó«¸¹À¸®÷Ö·Qi7œ~µ—zºÚçpó.ÌÕxáG•Ê*.މŒzã8ùˆNj¥ˆm• §ÿ‰L'k܇’«)qùF"®ªøŒ"b vv-–Ñ‚7*RˆËáše G> ŽöŒèc¿.Ï£¹EY䇞+:ºØ´ø¨(–Ƈ¿:¢K[,>ŠûT«Ñ¿‰8é¥(‡­£rCž¶þ$Š>‰¥ƒmô´â™e¿sgàD]ÙÊâÕGb8û¨Í{0—8=Úâ¥àWG@›RÁ/w%È!êë…ýHµXè¯l+þ#;<ájg/‹fÔ\·ús•oEWfá0ˆØ"2†¾pÿãéDY*Ld±8S¨±6ÀLBñ¶OR{ˆ:ªlc ¢ŠõXO7l÷ îã ~^fp@&:Öýæmt¹–Ó/æ“»ô­Š=]ƒ]‹ýTFäxÆf؇àâ9à}¼YÑ¥xbÕ¿z´ÔçO{Áh™ÝS<x\s ¶úw‹PÃ0œƒTG”R…P‰µÂcEAÙÔ‰ü£—LNý`èþí±É?¢‚kæÄo/bë9/—>ןï–ËÐïú©ÚLiJˆÞ)ªz–˜þZߨãó¼ßëGB<é¹Fv´ Ž-'Zˆ’ ý^ǨÊðï¿3I2ÿ<’3AùÊ.ÌÛõgµ\0)>¨&zÁ½¶Î™íC¬WL|´ Ê Ö«¾a±õ^Ži¡fÁð\¥ò¯(LCrg9ëõdþàvVé‡byèÚïòÙÍî`ú«SL±NÕ ‹_´ð¥˜Àt’{ä l/8ùVàW>ø"û–h\k£žÏÔëõ#_0¨¦{¬ÿÕ9}¯vFIoªì3qFòHýÒvº:.B5Ð o95pRç©Ú‹}nnÿ¡®ª;ÄnMðH Ɉ£Š "§;ÿ¨¤ß2uP†üœ±(½r¡ Nêd¥ë ÂöNIª«Ãøô¦+Ù@zåN°3ÀdVã-%ïÅžÙe5tŸ_ŽÌvüÇZ”ìóÈ/ó¢ñðÇÄwêªNÌšÊl¶=×q"x:~ì7©Šȩ̀«IDüGVøs û#¬¢ø÷œ"<Ó†¾üÌÿ­ßoq˜î“pF«øñ«œô¿ÊkŒ1Š˜ÕÑïºæ¢îÒŠ±à?æQÿñPÛþC[О“äÅúE¦ƒIus6ƒÓÉ—ˆ‰æVó’q÷ýÜnóO|*s>\57åÄr‘–üã¤Èo½6…Ø#~"ÿˆï¾·ÕqÌéM*Ž{øa/›¹rkY™žh¥Ä "›]Äç‘ÀŸ¦<3½ÿn¡ÿü¿4æú'–%ÿè ¶¶˜Uü£ â61ë[òøâÖ!ôT‰PŠíûî_j±ÄTXó}•åB¸ôlü̆X¹ÑÚü‡«oðìé'ã{œÏr£9+õ3vU7݃°üuQ%M$M&é?%R#ƺ×ÛÍü¨øÈDiñÍ©?ÏG ¿Î.R5=Wê3Ž»šÈç)Šä©šéÍÄóGè”;ƒfÆîßÌE?ß2ÌL V[QÈÝr‚Ú&“¹èÐöeƒ»™ÿ±$×U›זйK¦1mqWTs¨ÿxé`Æz~;šJ@ýG[© ̯ŒuÜæÒçƒÆù¯Ô~¿ ÒŽ\Ä5káË•þÝï©?ÏhŒ2Šš¹Í[z N—/ó£màÏMã£öcÙ•GåšØéÉRVs´!Œåô-Û†þj§yþ£Dˆóûw;sý¿éæ[˜äÉø‹ÉVR8ó™øŒÌÊKÝx4âà4ü #\+v¥þ#¹x ÷xeX7üH)Ùþ£«8ŽØ„ søzO]5·~o[üx„:×ü¨•ÄÝàåkcŸ±~ìÙ38 cÌ]MFÇœËßÝ¡¡×Æ*¯¤Î r%Þ#™õ –g6´8ìÝ>"Ø¿à¯{a¡S[QÍŒßYq›1 ¤¤-¹Ñ50 û¢'ç¿©U€¨|&•Áo± ÷áküÉjîñwZYYEóoâW´‡zT0àqx Xý§¨Ä¼¸Vký;ÒÒ_¾ ø•«†à"ÞmkwÅ: 2˜"Œ]¶Ô›™ƒÉÕ\}‹ËóvÀŸ—Ä'FaW¬Ff5óýZà?Ú~ö–]x7ï?QËé~sƒÏ-³ÙŠ8×&¯*OÌÀOnÊ+bÿK²Š$U‡ï=Œ}*!×7LÁÇMá®”7¡k&w1?ª';J…߈}~Ížb[1¼õƒ#˜‘𗏾œjLÍ^[p¤ñ(dÇÉÌ(ŒCç±è•Š Ïß°,fÆjf ÆP«äN > }–bªàEÕ <\)ô»'P´Ža½‚Ö'Ðå «Õ´ýF<*ÚüÇ\ð9?ÉT4b~H'p¡äð‘œêšl¡òÑ£±: ÿ8”dcYo¹‹I2û„X/#þ#;gà)Œr¹ßò— PŸPKñ÷as3ÙïÓšäPºÇÁ ºú‡áß(Ó¨šr½häÞÞ­¥>¸ÀÅê·"Jy&f[…P(·BÕ V Ú¦-*Œ÷0»s:¥/A¥0„ÕnóÓÓ…ÜãÝëÐïþô:è@&•ƒwöj+Ò¿·>Yàaô¿Ÿà+vQoÿœlæ%ÙÍT]O¨,júØïû`fiÝþËþ»oDÞô™~ œ²©JìxØ ºJeߤ^r ¶Dø‡jèZD;ÏÛSÍÿ z¢Æ/#½¬ŽîS¸›úÁ5¢1Y~/b?qGBU—ÜåƒÊÃ\«AöRæfs²à£’À"­AÁvH–¶³ËÁ û[°8=)ExÔžî›ò¿ôáZ¹ èî´Vã÷/I¢?ÖSƒÔ^Ô]¸Èa­®‘Óèhl"ÿ¸ýƒõ·µ;ô¿Ê éªAkncîüþU±Ç¼Dýà=|Õâ_nÓüGeê‹–GyZпäŠÈM§ï"â:~¥„ã}ù®°~Ô“ìâ¨ÎCVì†þê7,T,z¬í;Mtžä~’HŽÿê!ÖJÿó5‡z?üǰšdÄŸÀƒš£òKŒ~”ÊpûÈ X£ÃÁŸëzS+*J߈0·Á‚Òr"müÅbÎz9ðäkd!à k±{Iða)›‚ïõ ÑËŠCÝ늶p ŒJ=ò)X€‚2‚œÍ×÷àARË›`9¿YÙD=ýhð‚}Ôîéè쵂>ÞÁFü œÑ&G2›5]ÖcØöYÏ5“¸jYÃVËGÄ ÓÔ b+T ±Ø])¼ùtð«äÿ1à'FÒqs„雂—îÈ:ˈb09ôqÞx÷›´¹Ìÿ-Fà?Fƒ­dÀÍ'›Kl0•®\^èa#cÎá#ÖKN ¾Šýy³ËV'æ¾ Zêó§ÓƯè¯~f~”(AÖµotù{Å`ª]Çó Žm šµÿ”‘¿s€Ÿ}„‹£”XÂ:kZFz}Æ#ÃÊH'Ç›DÙ+È?.Òÿ*-Ç\õŠ®‚u™÷d«GXcÔ¨(>+eÕ9ÖKæh{C¬¸Ëˆƒw>À*ùÉJ¡Ë[;QõQëŠâ4¢³}²Š‚kƪ5Àì6P¾•ì>ò=o³sˆõ*ˆD \gy ñ3‡­Gr SNº ü­£Ó*¾ã˜=mØ`ú·ï„ÈL‘3d4[Q‘5”sE'÷<ÿ1^«þ¨ç_K$ Br1ý$z‡uF{ýÕF*¼éøˆ_éÍDª› {> wý踘HÞ#Üë×÷}lÎá'UÙÑZt oLeôÉí jó²8“QGfþà¼\{z¨bñ“§R“ó‹?xA/yKœ³š«ªÔ’,F!æŸ<…®«+µ «ížKCû ]þã'5”l4€ˆøˆˆ#«ÿX«o4WÓwïD*ÐæÑÌC¼H§Äáê*ÊÖÅîàÁ{>šß·‹Baö¿*¬w7ãk”œÅUº*ÖKà?ÒðTRðî˜ LKmCKZˆy#ã`3Æ£:#ˆòaÖŸÏ@¿ÛOÌÄõÁš»ºyÍ™‰fmh!4E¨$ÃïA šþaÏj>÷s“5žú+Ô}ÜdÔ¿ª‰^jßQŸ»ÓÞÚˆ7º>Tœýè¿[˜ÚÚ̯]gžâ0ÌÁEürk˜Ù-WÓ>è/A0«®Üi-ÛÉ-Ö9™«l¤n¡'Öé[¾2—õš<­$‡ré¯v“!]¢ K]êÏ;¸O˜ºk®§kâS;²Üë<—ôê&œ‘awûëH5û!0»Dù+ÔÕ”Žé—¥?'ÒUËÞ_Ÿœe‚{½¹úã!'ô.Qõ6D/?s;SϘ½î4µæc%wÏvâRÕùä³*XØ®>œ#ñHÝP§Ùƒåýt_3oyFÞ×áô¿ªk•V¹œdAµáyn£™Ò`ôcÃ"ù¡ˆÎF-fú·§PSáþxëΈè²Å— ºú·Ï"’Zɉ‡¦ý'êoÛù©ÿXËq‹<¦¢sѹdd~myË™M-L UÃNÉ9{Ahjr靖•_ü?üý‰–%bå§5Ó„8gáßJ<ýµјAÿÝâæÕÏùÇz:LÕ6shƇôOñøZDÐUyCïþ çÏÌËb6|Á^øóð±_öȼ‡Õœ Ïpßȳóqôߌü„¢Ž8G§”4á¬ì­?×mq{z¾¼èK5ô¢Ñ¬4ÂU1pžë´H¦ÿj\ ÷rQñ»8)’[©ÂŒr¿^w¤~M/`¹ÎS»ÐTY6£†çÿwðU$[·o©®êƒ;www×à î0¸Cpw÷àg€ÀàîÜÝýý;ßãD7á¾ïÝ ?ȉÕi©Þ²ÖÚ{§b—ÿED×L²9 Ì4ôOÜúó¯ÿô•Èæjú_Õ²?r•È7м‚gjA,­É4à.Px‰¡ž³ã? F.‰šàYˆ’î¢2›¦VJž%ï(ë]›ÈÙa±£›Î}úW6½Pç¶äÌ|±ø/AxR_ÅÅô—ÙåwTRï‰ü¯a'ŸáWB]ë—ú«âd¨ÑÈ?fbå3ð¬|G UþüžÕŸ™½f=THÇÈ>îÀ>ìã§óqžøÃ `è޵>Íìì’^ä‡8³üxÜ/DÖGLOó ³37oï5ÿ‘…úó;h«…à?vÀŸ/ÎÕÿ ]© ~µÊŸõÉ^o^¹‰s<ˆ­ÝÆëL|¶7‡wfu¿Ò‚]G_£#ùG-8Ø=ØÜ {=ðŒ…±èŽâê1þiUS=5˜f;›^Pñea¢ç¾äCe%ð«àý¯¢£5Å~HO=ÊyAÎgwì”1à?.S‰®} èàô˜x>#ó©2 ° ZVgRáY[ö0àÚiÚ<#lÕ^Ëâ\v1-ä2ùÇôW ˜W>&Ø`Þgª§ßÊôo¿–’œág¿šY„þÆA'”T¿Ê‹½? JêTl¿–sÔÕ$­ ÌÊˤ¿'øÌ(ôt×ñãà|œþW»¸" U 8ò€þ%'µîúªhKÁ4¤ÇÁCá ïýA1I|4úâRö^bp_"þÑd9Õé_rL¯ì~TÕ›»—EÞcݧ{ ýÕw2ÉìÔ\ªÜ[YpÈþÌ%OMÿÞgjýwר—í$èw÷ã?ê?QßÙ ÝÉÿ"#®HŒi»ýGúOØø‚0ZcåcžÝb*ª«²=šŠÁ¤ôXYŽ^`­›lDgbVmØÅìv—šËSý€z¬‡hÕòNÿö0ÞV?˜%tv2ú'–$ï[Ru<­¥ë´ë]L|`âý®²c(O;üùcq=Pé!‹=î3þϽÐá¡ó³L‰dŸ…ýHÒëçôLÆt#+õgüë?¶hÉÌFcc#ù‡úÍùƒðï`+ê`ÿÒáýc<Ó¯q߉™æs‹ññ7ó­æKâæÄ»÷°î}Å?øVÆMQÔJ& ˆ#ðç¦ Ó™Óïë±QÇÞ$æ­M„z˪A½ÁKæÕ®åþo![JÍQÏ ˜ÿ±! —Ò<)Ê`÷F­aמÅB»ä=Þ¡-¼ôkâ¥#äÙ­¹âQ¨GÈ•"ò,O]€˜´•<ëÿß .^ž•†ùµCYqüÇ=xÛÁÄ9#©,ǯ*3ü!Ï÷øþ£Ø²,x¥Eà+iDSýÜ/Î:óÏcƒÍ´’ƒ_9ókïãÏrž=äS¢¨!àB¦t̰l[x:ç’7ÌBôíÑï¶Ç‡b¥âx7§{J®Ò”mé©ÞÂüwýq½G>Ëßs‘Š“Î:רÓÿjª˜V7 ü*ÈÜÈáVò§þ¼~-/µn±€ª¢:ä´í¸Ú_ðë)è3ÒŸyâ¹Ô|oIпøÅ0ÝKÉ?0ÿüžr#ˆÞ_òwj¥˜á¾¹;èß ´õ>?™ªHÌ×H*ª$ïÁêoR_Ôð«öqû ÚÛm M¥¨Úø¤<È?f‘=ö#‹¯ Ò_5Ño™Q‰¾<Ù#õ@ÊVZÕ˜î‰~·>Þ#^m=¯âÐ÷ж—ÁKýCî1—Š¿exëwð‘÷Åòù2î(Æüj¡¨Åj½‰=oŠ*ôs¼€§ìÇ<¯‚Ô"6°{¹®»tWsתH^2a$•>è°2 »³›¼º5˜je–iuî‹ò¿ôâ%ýw˜„£Z«¿JÇ\¥Ì:ÏŠòþ’ތݵ^Kÿ¨ÿˆAÿ«‹¿uÄwµóæâæz(P Z=ÌÆiô»ûÍ5¢ õËèŸ6¶âÇ›ú˜ÒUm ì=Uâ´H«g3ΊrV|°ÍýèzsšaCî‘geÏ­Kà6•Av®ZõaÃÞÂÂûÇê¤ÄSMÅ—0ÍÿH`Î6¯p\߬¾0²cà?îðû_‰Á°ËÒÀVdµN¤¢É“ Ïìs üÑW«Aþ1‹ùçO± >`i¥°úµ±±£À¯Î`ó’bõ=Ésfâ[b›eBYq¡ñ—ƒ/Á€øbM‰ê°ÐMÈŠFƒ gž„ï8b*¶Ã‹ëQ‹þWçP ×Ï´“z ð¹ œKZÞÿSXÊbcý@n¡B ¢fá1Yþ:ð¨¼#}EÓïL½éÅïF•ãÀãN TÄÓæÄÄ’T­›Ìûhmëƒ O°¦±Î0˜Ë3äµ¨Ž tPÿ÷å æŸOÓàÏ'‚¿Ð³…AÎ(|uyþ懹~°'[Á×3ùM…ϘOÞ3î‰Á®ãZc€ð‚ÑON¼~Žoმ‘õÀ¯C;üÇ>¢ýüj 1n*ПËÄ»7PC• Cêl=eܙȈ²£(½N÷=Ä»èŸQí•ÿ0ã5qî#[Gœ LË ÿÞÏ;oƒÉæh[ƒ¬8ÁHÄù‚‚$gi…f-=‘üÕük$þÃÃe2ÃhÌG?ôW©`> Žx!(Uëµ9;ÈzùEÎà.ÏD ôë­ëàWSÈ5¦ÉÜTä­b¢ëGõ‘îè~²+sè”ËÔ5ôlGù«Ty[ôpß”¿µfú$îcY'Òñǯ¦[‘¨ÈMoÛBª›rdg7HQ´lݘõŒckO¶M %‡+¯Êg¶égŒøîÓTXäR9Á±R÷?ƒ¹ä¹°ÅÞ†®eL£’.yO7ñÄýQ´E¦fÔQD˜‡óû|«‚ƒ¼q¹ óé¼ãÌ`®ÊüèYôOL+n]¿êŠ©$ë`£Ëã?Úâ? IwbVyBñ5Lý¯šKÌc¢$éX oèø hDKψ7=°Ë9È›\ /“Â0ÿãœVMÆx‘<¦úÝlü¶†}NÆ\ú<íWu9»5+ýwó†r½ ªÎ­þœÑYr¢?XHôãÐ_æ€ \Èwb½Óȇ0,í­Ê¢õ/ï´dL+<|E®Ñ$tÎÇDKr¸óø'0‡}ÁQ"£»ï\Bd¿ˆ¬‰ 㢞¦Z]ïa¶ öä;È\ÿ+W\%¬‘-ÿÂT#ÿØÊVSä܇’¦£ÿÊCQŠ’î*øÕd1›ë>\Ö‚ÅÅ™ÕÁçâ<béÒ‚Íd¢FÍF:žsÜB|Çj>ö2ü„_m1z‰ø¤(xŽþ|`­Uì”ËàAQåtÇRåD;U‚}=,M*4_ÛÉ=®ƒ 泆Š1ÁîË{ý«žÿr×6Îs>Ó’ :„"ÿ¨ZƒÀøe¤þc¨]AÖ:€Ç›þ™ÎRÆ¡ +Î6íÃW—w)O~žÎ¶ÃA’²£Gš‡ÿø@ üQUž¦l×4NÛ¨rÜÏ={jö ²^‘EåÄêw“+­çr!“CÚÀ”@»ÿñäe…ú[ö“ù‡L«yÝ~üñaê?êaï{ºoÊQüDzÞ6¨šã­“õ&TáÍc2E£“Ÿrc÷S1Õp þcÝ :Ûw9Û±ø6 ™‰ïL ÿq\ßf˜x@G‘Iä®Ô'ë鉿Mò{‘É»É?n¨Í诺ÛéŠõÝaWrÇ.r•QqÝøU5ô»_E b•UÖtùYT°ò*ú—LÅèLÊ«ÉÔªt¦^~ uíÊ×Ρ†Zq86‡áH-»ª< Od~m °ÚÞ`õWÄM•‚Zóò¨–¨’dIuí±äÊUÂõJàOöN¼[Zú—D„ç{*öâ?ª°{ºŠõî+øŸ{ñH+¡¨ë/Rù™9Ⱦû‘¤ ?nvc”ÑÐ,cÞ×+°Ê>­€‘ÞèiÌ4ÒÂì ûRüä]-Z™ÒD\©ˆ“û˜“+útý&uþÌ5æSãÃoæI{̬ô ð&Þ½ÚÑ•Šbztã(¸Q4_l£Ò½¬)Ãtæ+Áј %`9ë  ®¢ yg!q-Ñlu,¼Ê‘^Daé_’ÿ±T^“°‚K‰Q|Y'‚¼O\_Äæý•}Y$‡z„Ô^ÁMF§C6%–ÏÞô€úA¿Ê)JñŒè»ê’+/B‡Ë,ÊŠKŒ©àAÎü¨“d çD[ùæDâ³A rŒNþq ;”Ì|)ß©Hýà¯ð«cÚ=½O¦ãƒ2Û¿Ñ®t¦ƒVâßØÖ üGLâü« XÞ XÞx½KÖ>Ñ!Äþ%uô f;¼w9…õ.ƒ%UÂ2Äë~å9\j–5¿‚_õyñâì—£­OKmïáÉDªŸ·â-—Ù‰üÃðïw• *ˆaÌŸûÑq+·‹èŸ®éä'Ó¹WÛ8ã5p¨ÍÍŒFðÚ¡³Æ$1‘kŸó79Ð |˜ˆâ]ÙY•ÅJ "ÿHÂìÀ:L‘Ú€ÅMHÕÂßXÀûTóåäþ«iÂøÆÚ¥ÿ"<Ò*¼ïZÑêz¨ ô¿Š€Ýêþ’ü¦¨2Õ$Кxg^É$™ Kç2ö¹Ó‹ o¿«•ÿVG>¦ÿÕX5OuÃÿÀ*ЋöVu,*èu“X$uïÏñÈôß‚gzmzY¯’Hƒs™ûàLkÜd]–³¨þ@-…~×pm¢û–zEב}²Ñó*ÿZûXçcqLU*¼ýîiTœÂÎüÈžxƒÿè ûc½ôÑþüÇ8âϬhÚ/Qîá* šèƒ*"‚«³íåºâŠC“ôMÔ]»UD;–*C‡ù¡DDÿP^ •HýÿÊüóSZÉ@þã¹ÖTOd_ü8ÇÐ?f¿Jfô£~0‹yÚ¦È*,’P2ÿñQ;ú~â©ö–ªˆ¢þüG«³9Ãx¥/@¿»Bl¡ÿîC*C«| ´/wš.üÇQÅekjwN_Å1®ˆ"Vb,ý.‘Ø*bÔáýÝ ŸÍÓßê™Ä[øéð܃ˆ¾«ÉpÁ¹Ä â²Ýä§YÉþB¿ûÞ KG˜æB¦*æ‚ñ˜‡šÇAàý°„±à¾/³N"×lØP ãú3÷ãot øo¼«È?†ÞGr°Sº–Âд€¿N—”s›3tªôOý¯rŠL\¥«DAÌÖ[~rz®àWåÔ&u”»úbo'ŸéEÝÌî‰e>Ì9df`iTLµÜ ,E-½/OA â“øU“}Ã^ðçUa&Òeêõã'àZ£QL¾tþcXbª)ò»E÷ê@z®ëôOüÆî¿Ž¢/¥ªÄ.­@ÿ’þöK0¦¿™?ØåÁBª mæl¢¿í¾…ü#*¸â¼Ò´ùEE·ÿh§4Ãód¥ ûì'cã• ©øô6œK×îÄp»¾#yÌc0Á?ñS¥ÐžeR‹Yñ5½>߈"²+3ì~œðFÿþ% ë ŠiyZ££·:§›_‹ì¥5ø•ŸëªÞ?í|T·ïU‘é®XÑþÊü Ž€7¤ç*yþWøó—šg ùƒgé†'È>ûqŽ¡Ì©ïÒÓŒÊD~~z5VÙ¡•6R2ÿc©‘œúó_uÕ yå ÚE3Ø}3ÐüÌV;ÓÛ8ÏôÓëæ1ÛÜNÿÝwz”ß:Îsf2P¦eX“Ø¿ÎààuOã"бDbøó„ôß ›ÿ˜ÿ‘A8õá¹û€³Ô…?AÉ^<Ó>¬˜qøH¼Ò“0õOŒen¡*²{~6s&^É™+Bwnò›àW¯É!ÎÀÄaªàÍPÏùºÖ„c™Býǰã5ìÇÜhÄKƒüöÄÆŸKÿYô~ëÆ4K‡²âr£ 5ÅÉ^N`…ïƒ$ÄbþyXéÄävÌQ2ûñ•;ìÿšTQþ©Ÿ ù–j.:‡%¤2rxJJl‚ Ôˆ\ËétôŒû<Š88ÑÞ ¬Ðj”MÓÉM¢Z."ÿQ—úó6xo'SÈÍÑýM¶–ÏôŽk6ØZk¶7 µ4ªY¾Þ¥ Ïû]q5ÌýäèBÿùµS,éÿqñŒóÁÉœm(øp*ì\`ÌÇѰnÅ»d—«XsG¸•wï~õ&`)ÿW»á?&馇Ó] ûþ p'è<ýlËR³6;ºØ° ›`ùS‚ùPQw,+“5ZŒv_^ê¯éÝÖ æi"ØËmø{Žü*&6–3mÕÑ_ݱ߰~"õ†ŸÉop•(ûLUrbïúÎ +N3ƒ¶ï#ß*nVï›úéjùËp:þéøOöõ\ÖD'vYrîù}ŽqYmfëª94Èzåé èðçQý âè.ÑÕq6µ#g¨?Çܼ\þ“ýþQ¯8ÿHÌÿ˜6Ôþü8’®*3¯¼•û Öê ¿º[t=™¼ë–iT#‰ékQ>Éö¤KaV4²CÐ_m¥þ|”ý¯Ú<,žêIþ‘ZÞT~^ßiÄDáz“Ý”SUǪxr Ûßì¬tËUÔçwÍC}Çõ•ÕαZ'&Ê?·˜Û ØŽ™†±€úó6úaS¢!L¢;ŽúJV}ÅUß¿Ëpj” ì“h°¢£â½Mw”\Ô'Vì¸jÃ;öèS§•{ne~ÔT|¬bþ‡/üÇú_½ÔuÅ}øÿâÅ:òšþýK–q;‹­"+ók¿ð'M—X+R[%Cœr÷ó’ôGz ñ>à¶Udg+¨D[޲‚X¦’ŽN¹U­Qè¯>› ~þõŸ¾òÆØé¯¿zKô±’¿ßˆ¿X)ààÓ¥frmªµ†ÁÜ×ja›GÓ?ñOòrtNùÐhÔÆ[ô· À©´Áæ½böš‘"ˆøéà´5F?,rk~ÿ ÖòpT[¥ñS°¹‰Òg`¿÷‘‹å%ž GSFäûeÿ]?­G †jyBzìîwqY4&³ylõ LH“*ÔúâáïÝoáýº£rš!ršß~>0­£^ßü{õŸËF¶°›¬-¿•—c‰)‡3_µŠ©+§Kx¼É4þNåZœ­È½ùy¹¹Zy³¿˜ŠBf Ù@2ùÅZ‹Ÿg•$iÈ_,Z¬cÄß›Q”Æ’NÇÙè æ£uhjF >6ètkb '²J0Ÿ<Ò’QG”Ç?4‚ÿX­þ²×óñ:uÐÕ¢ûÔ ?ë‰Èw—çäþŸnoE1îClüŒYÚk1•w£½ ÿ&ñèmP32+õàS ’{lÀÛõÀ$ ÿîŽ wzïxœéñ™éðXU¾´â€_VídzŽÍ íÕ};²køUuºè KJg§ÿðLüG)ËAùóR".6ìz¸–ø†ƒÖ¦²÷á¯Õå÷¨?ÏÁ„ööqu_6Vö"ý•'ÖÙ^5…îã¾€û´Áú2£þþ#•”ÄU}r[3ð8ÙFN!üC½w7´íÐ=Ý¡"°üǰ@ o#~uJ?lH¸cDéTI²®‰hžÇÓ/,õ‚:ó™âº¦_Åv¹ðê±÷ž D&S:â[Ë=°ze„rçôS¦N¤Tì‘òœ@o¯»šR/X‹®%—ÕX˜™ùÔ&þÁüÁð†+<5Š)Õ|ž¤Whá΋ƒDd%Ü»ð”¾ÈœB\3û‘“¥Žv:ªÿóÑ `5(ÕήŸë™+†«’«ú¯`náÑËÚ†ÈDž‹ôÛë ßU2ÐÄE÷¥üÿþâ±VXÿê~—{Zk=K}æþV¨/RcW³“\fAó ^ŽUÐ?1®Q—üÃ4i¿ŠJC^ø³¦SëU/ÿU¼¹Ì)Ì9È}› ›{ÍLCñ[Çém¾/r££ŒŽöÁG”Ö;oD!&E|ƒ9uÁ%ÛaZqýÛãŠ}DÈ'Á^Z`ç Éòp ùÅv2ãƒÄçÏ©f,âà?ÂÂhYæVø2x£^ÖvìåS"éJ ú/@Úz`/®ñôïG¿•ˆeW¨GøNËÁžÄ5ûB¾1«œEy9lÅ(+Ïõ.”¶¹“±~¬·†Óçò_ý™b #¿h zý¡èK_&`8FùÁÿx =NJì9{™ ýÕ¯øýüGzìy.Þ{<üÇ5áÉ5{ ð”*ÚnرXrœømü½…à‘1‰+äΖ͙ÚÖŽèLp®m¨ª~$¦nm 4‹šÝ—zb—‡S1:¦*>:èË ˜=ÝOnÀ™{k•Ìñbªƒ¾²Ý¿s6Íð:9±IudlãNô»A£ß&—‹ðÓXsW¦ŽÃàÿgÍ}Æ8Ñ•ø"’Ù,0Ë=ðpEAÀjSÿqBµ°ã9¶ÊÂLgZN䞆|ayÈ1ürNª‡‚ëw•ñ ì­;qÅLò€sÒ[´Šþ‰/Xq»ÄãÕíÓ¨:þü ¹a"0¶ƒàWÑÉæ‚‹nµ÷³¸x¾­XédèªÊÉG̯í)ɼ'/,¡‹ F™îwþ¼>*nèÛø }D‚õ/)&Rà%/±{ÛbÇ·X/åLê§©±ôß}ÎTÿq–ªñ¿å0ºÍ/à*;óÏ÷À£-B…\œü#@å« ÒgÓÖ¥j¦–ñ&¸¢¥î‚½W)UôVYì=*15ãìîÌjg÷¶×¢"ÀÙ¾Fë ã÷êß~X?o|;ü Š™ZehDÞÓ \)+úÚÜ‹Ï0)ËÈ·\èyßa÷; ßUT^õ$ûü“ü£Ž(+â¸ýGýØH”2­ÁÒOPO¦b»ê‘wÔ`bífús-e~íw:êTék¹šúÁ0Þ½‰µ^ò{7Ä5…†î]¸›þW‹Àê§Áö– G~ªJÓ},'øÕUŽYïµì®]®X®t®RvD&©ïgVqø)™’"Žòä4‡j-~oBxÀÞÿyõX« w/ðü#A(ÅýÃÁ^¤Õ/êiéßžÇ,dúRU¢iké3ÒÓX´@M¿ìçÿõ§µ¨Z ƒèä{ÍÍ1 V ôkæáen0ý ?=ãoç83²,†þ* *ó£ö‹²zC‘‰3B%ôâDê?²8üDSâ¤ÆÄÒMÅ,ì.pѯèÆú£¿z¦üÃE=¤Ÿ(‰Ý£k±ôEìLe¬âsò?ýyô4Öa[O{C=Â{ZY:¾Ì:Ùw)9ü*õ‰”†SAu¼>=Q]1ЗaD‘QÍÐÔv#®äAÈn`Ñ/‰¡ìO²ب<ò3YÄ#Ö<®ô(W¶.ó£:êG~qkoiGðiñjyÉ@¼¸³§ÈŒ˜Ïn fLeõGmN"‡;JŸy_|ÇXÖ> Ò†Øÿª¡^ÇìäD¦rOò.<™3ÿ#çĪ›YÃ|bßÿ1†+;Ø=-þã. Š©î'7à@×hÌÑb‰¥Ó½©8±öG¸êœw^γ–.™üæÿ9Â9üfB¹šXvìù|~®‡™ÊŽ}î£þc,öRã?`Ÿ ÿ:‚ÒâõÁµ‡ØK©Å~ «ÀN¯·ŠƒÏZÿq¬,šå Óf5-ñ^¤Ã£%ðïÉî+ºo™YQé_ž¨·1,¢ÂT¦fœž‰ N‡ðF'QÊ%æN¿EÝp¶hëñÈÚî XÎϾ"ÿ˜¦ªÆt¦ˆ®)o©ƒ¸!á?Ã"%g¥³¼ûxòךÔt²^^‘ž|ô$»·<ÀRë4¬þ"˜ÕdX×°ÍNýÇ%æá^—3èÜ´EÂDÙo|Ì) úÝû¢©ûð2E V­ùr%͇‚²\B,f“Dpõ}Ò\ÏÁ¯ƒgå„IHžY‡nå)8Òì"«Ûx꾦E”Ÿ¨l„|JuU_Uþc¾]…±7zàív˜ô†TƒL ÉJüú»•šÇS} þã¥H)›2#ìÇî¤vƒ¨ÊÁ:)ö©Ì®·v6ºYžCÐÈî`oqbz”᪀'Ê+UˆúÁ'ê YŒŸØ ^-dQ–n?ÞóëãM­¨ɽ.Rþ{¼tÀqÄÓ_èÌ?/Šþj¿^œ5×Ða*ÐW3?êv0àGÃðê¼öÄ|‹n¨V&±åi®0n뽘~VLBåÇgÁ÷ÿzÑ™ô¿ª .& ³UCD´ò2­Ä©Ì>`bšð°š„Ñ,F§œX8ú«wØ«&Ö*â¤6dYÅ?䟧±e¼ÈÔW̰DŒuæi¢oìÆà6/Ádª‚£<ƒ´†G÷aŸn¿Šûzýù*m6ùìLqA|m_CŽƒ®U‰“™†G|ˆö YÝD¾Rˆšû î{òõ›`Ô‰î ÏsÙI´ÓT•Ê’%ĵY±¤“ÁšŽrÖY¥3¿¶]©Kÿ2ÿ¸¯-Òó³×}Àøâ£<øÎÜ®&`u~ WeVkÏj$yOu'};ˆÓØéµ"Yˆêé]Í^[8¼EFüÇîFAŽî üÇRk*r‹¸y>i<¹×ZÎ!¶uÝ]A‹îö?ý™¯•" ]GÞ·Û–™ É-;s¦s`Pzá…|¹žGAì¯ÁÄl"CñÂg.¶ºR|f¯ŸÑMÌÍNGβ™§Ûk½•®Ëöø ÔÀ-ƒG?…«¤6“ßćÿXJåÄq8Û$x¸ñÁîËký•Ȉå‹ED|öw7}+á?2Ó#r&õdg¨3¸Çü»ÔDP£ahÒ±ÖNÞ}:úÝ&Ögºÿ>é†Ù“/ùVZ²G)›Œ£šæŸ/ ¥¯mtðöD®ð=U[tÆùÉ?f“øâEÖïÝ5{Y¯†È"«É º]ýŸ—ôO\ÿqž ëìtn´±ísp3íé|¸„Ÿéj·‘#œ'5¼ÖÑÕ}xg©"XFVJ—\"ë¬RsXAy^&ª]úÁ)ä‡é µž8,Ë{–½üjX©6hdcÊú—\Ðç±Ñï^!Æ(¬xëf…T æŸÃÿT­ëÈ1Z®èm¿Ó‡¤=¬ÈGzåwà»ðÔd%E^·ÿ¨£ï4¿€Ž$!ÿð”̃ÖUÍUœ£ýK®â'MWw;¸XDjÅ‹ÂÌ'¥þ#§rôWyω̲T ýîJ}¹oØ”?ˆm_‹^ö!×?tjŸ§ö¡Ó;J]É×-ÔWÊÕÜê3UüIí`X±ätzm Ž*;ù¦ç¥ÿÕ+îU,÷Nx¢UÑsº?sßÐ0½H£ßÒãsŒœôo?©×c•mZq:ï6çkQ©ö;¦U~üÐ3í†yURQØèÛ¢>óÏS?xÍœÅüÅàWW~³Ïã\SÉ"Tpç¥ g5§~°š^Åð­_ÌWææbg ±ÊùÇñ|œŠtè:V³ViêÓNÔ€Ö›é‡åKîàÁW§ˆDâ¶¹%à×~ù*º¹ÿQ(¿6p5Öt/8L8"ÖëØ/"áÖ“ÿdž¡û­-,Åü£ fíLÈBþQž¼f>ª÷Øú\ò:1ÿXÿÎ íno6:Yç°}#ÀÊ‘ Ž$s¨g£ Ú ½lbûG°ÝGQ·¼æZ3é³~âçš –m6•3» b­¦øÚph\náw7ñ¬Æ¤vàQìÔJ[`ƒ|¬½"Pá°t+}‚ÙˆþX¶ ÿq’õÊò· x*Ò?Q2=oµ ÀšVro2€ 8Gæ„à?Öjåà0gÁ &ÿH[>o8Áªˆ½l×›”ÞaEÈ=öb•c¢<›‰§ŸÅºÈÊ:šoõàýÛ0¿¶/çﱊډWhŠ‚›øÉ>ðç>hQ7«X° É?V`KS‚mG¿{ö øUðü#²ñR$åˆÒ0¯o˜ÕV"_ú·GQaª£bµjQ[½†¿T}§EÁ{k„8?9ùÞ;}Içzš‘š+FIï‚æ‰ù‘p+7°SùÙ³Dfòµ?ÿúO_I`®7÷ˆüÄ[ˆ’ç`΂Iù…MK+¥üÂz‡E\<ݲ0䵿àwÆÃè²9V¦$Ä©?_LvSK~â2T%rZHjæ å*ú€_¹äX´XÊS0À¯rÁ~L€™ŽDiÇßQSc°¼§9þãWwú•æ«gÑ™ÃQÑm—½DÀ>sžÝ©Ìc-cˆÂÓz+»¾~;Þá=Ë2„¨ß-¡WöçÏÓäºo!*.ˆÖà%ÖHk¿ÙÚŒ‹õú‹Þ‡ȶœÙ®ZCædíUûé¹>þ¼=°¦3¿v ¹Ä2˜‹•ìÍð‘7Pÿ7°ú¸wáB}–¹X4'—íÆzúóFôß-?ߤ¦ÚØF5ÙµŠX®¶T!~§:%žDá?¾‰à %éß\û¿RÿñE+¥¿s_éëTî²/Üß õE&G×jL5Š™ÉéUˆUÖi•ŒdFæ†Þê À@õÜ¥<‘j ¦‘ž3.ëÛé¿»R¬ÀÞ2ÀÊ~ë8÷™e#  p³•¨ï½-’éÕŒd8(×nŠVâ0êw—éõT"¼|‚Ðá.»±79Myá Kpš83:¼¡" ý¯ÂR?ÁÜh>•a2‡‘½L·cgþWxN¶Û¼â8Ó‘ O7U\ õœ¿j%É76a'8ÌfŽ…Šl‘kí…ÊïïC^¿žÏ³”ßJjÿ«ÝÆ 0ò!xÆsàýáÀ±òuÅ&ûEGVüã6±ÿyPôgTÓõµêRùö«I÷w´kznr§ÿUl´ë_Åê&;³~G°iªæ©r~M»ƒ×ØF^·‰c$cBœÌÒRolÅzÇÃñÉWjàA2rÕ,ÙÜšKÿ«/غ¡°@Èœf¢}Eä÷ZÔ§‹Màö?¯1ÿ|¼˜L¾7;”=ÒlªyÆá)'Ñ· Ì~x"ØØn_Э؜ÃRÐÆ5œûk’í'ýî £ \Qa¼å ª*“óý.¢úÚ?è¸{‚Xz?õÏéŸXGM&ÎM Bt,ç29Xê?‚÷ßÖš½Yïoô_­L»xÀ1íÃF·W&Ò¯*žzˆ¥ÏI>s Û|K„4†±9ÈÞYGþчXJ'—ZŠºì#•ƒœ‰³äÓí‰v ×ø€àO ™Sr]–†áŸDÝÉ"lª³#ÍÖAÖ+&RSÿq”³!hÜüÇ\ê?©…ôûz ²“Ç~«.0]ãŒìˆþê«ô&Oñ…ÿð¡+c¹5P½øßZ{}(¼V[´#ÕÉ¢_‘õfCcÖ›úRLô›d¤š$ üùJ&ÍE¹<Þö&7wÓUx )÷‹™î›|\?nDâ=ö1&¦þ¼!U=Ÿeû=óÄ73÷O&Œ°÷‡Dæ_SïÝ\½?‰‡Û‡¾ã,"¹Û4§ÿîGž°tÖÆZÙý{õƒBDgÔYѵ7W[ôeúCú—Ì1ך{Œôßë¿{ÕüL=ñ6ºÀbÒûÒWTÕ+1y“Šb℈be #ÿ1ýUñŽHë55acˆº«ÂD±j‚D¶ÉiG„N½„H.N˜ÿüØ"ÿâ£I=‹¨ÊG¬œìÌu"ýðæNÿÄd¼×ñ {D,þŸ†ùQ¶^‡ý4O|oÐ3m ÎOKœêøq¨.b12’TĬ$Vÿj„Öók¿ÑŽLàOk((Õ 2/Ô`uÑìŒDA“Ô| ¹Ç VÍÿXÈÎ#:ÿ2RˆI…i&ð«™à)` %ì_3®Õ'«ÞÒÄ­ÿNvVc5YÍ.â»3ÔNf 13lªÏ4{b¿¿pÍò‚xíá^V“<ÃW²þ@ø¥RìòpÎv*±] °“s©þc½–ÜvŒ•ÓÿñÛP˜=oaìk®Z^¬Ýø‡Øþüùz2”¥øºt™‘~š_»Ãh'úà32Àá{cÍ©ÇaƒÈz* ¸öPû¬Ê€õ/Áü¨…èƒSûW—L§#ýÙ†»ŸÉÿÙ:ó] ‡e`ã÷À/ÇËî”R=áˆv ¿zŽêv?QéU¾ö uu²‹Ä÷¾äOñ¸Óá‚õ/Yed¡Êè0{8^Æ©¿1±u#TuøŠÉøHäºk±:Œÿ¨CÿÝÂ\“p?«ÀÏ6re.˜‚a%áêçÔ’öFE¶Úº+W‚_µ¡º1/yÇ|;ØéÚ “Ò‹ê·àWãd+<×v,txvÈÜ×Ú¢¿º÷ñ˜üƒ©†b‚¥+ Nú›*ŠóÂîï"ÿ8ʺ­á?:¢ÃZ+Ô„MS½±Ñ:ýàüÇVý¨ ïö–,4“*ÆY™*™~L†-K†õ„ùSÒ5‘þWŠùµ;AÛªÚƒèÖ¨ÓE«xe¹×ŠÎÓœÂí?Úë̈ä9Èæ‡Ê7Xþ*TŒg@U‘Yƒ©õ¸c·´Óò/¼=–ÕeÁDK«Z ÿ1‡ü£5ØCo¢³gâ*êzdWP}Áìö£&na¯¤~0›ë1õŽy•é: ~ü.ÌŸ…͈Žz%‰L/ÂÒ­õ_¢ë[W‚̺LåNü û"ì‹f‚Hoô7²û×Ôg•©ZòNÔŸ§Cõ{õƒû´7¦‹,¯(cek*õƒ»õÖä>b‰yÔ¼c\„º…åg™q©Ò˜E½àPòÖø‹\ðç×Ñæ Óú!‘Ïj"ÊþóÚ«è"ûÁdB&–«1œŸõ§L<]D"9 N’vaU‰Í?ÿúO_ÉŠÿØÎû¿Ã¢úÜÀ&Ö¶¢¾ÄÅä}òS·ËxD¼ õÞ¬ÒÚa‰¢32Áþ·#åÀ"þŽí9½Ë@TW¿·,$£™-”'“<—òâºM£~{$+– þ|::Î$D=óÈÂŽ›d!bŸKüÔýÕ¯¦ö¾Ò–‚_9µi9*§šä²¿þê<*úp0žÃ±£ï@­N‘åÏÃ'­"8kíiBì_ROo‚ÿ¸I¶1•|æ4þ­ ž;¿ëâ~t7˜÷Aoº`û‡âýpORQ›¥^œr?¹7c¸VÅ,ÆrOGÁ¸'€}šJîÛÑÊRŽ ’<ÊY‡Í8ŒL+7ñý5xü•¨å†šÑ‡Kù¿ºh4Âêå$œ…ÌÝ 'ÙÃiøRtÉð¢69+½GjÓÝv)ÑȬzˆœî*T*T†»/wõûðñþÓ±’wPȳ¶P¹ýâC,ú¥ÎiüÇu4½ÿQ<ì9þî4¾$2gò^Ú?q<õ­¹Òo8«-às7-f-T5ñ³á’Rÿÿ±“ùçõÉBÊã?–ÐykøÞ"bºÁú_Õ†ÿ¨L~{šªÕnXÜ—ô/™ó¾úÁÔiäa–kt&Wì&ÿŠlo%—éG·ò(ŽßB5|#~u@«ª/ÃlÃQÕK¼*úáÝîQ'Ó®GT>…:ï̯=Mò'Ç\þ|˜Þ`°½O¬ =‚ ¿Ú¥/1l2Hçž–Uô”Aq_Ö‡ßñ¤"å!c¹Æâ¾ÑwºË¼Éê¾ú²×‰+Ø“ç%ŽÈ*2¹ýGCÿþ%‘Ðj̤gÛ9ôW¹U:ú·OÀÒ§ƒÿØno¥3þ.š=På…å/ÅýÎ¤Ž¡‘qfÃ=éd92õ[f®>Ý%LàO¼Ò !í6®d®< u×ÔI²˜úö8×#Wf×Kü]*ð«upò/dy»Èí;ᆕ´2›ØôcÁÿàÇ×tlåÞ«·Qófrö{‡‘ŠúÁ„ÆôW¹Ì¯þõ¾Z]#ƒÑ‹ùçú”°h‘Þñ©æg¾µ°Æ)Ⱦgš'Æý1½É?®Oôä¿uœ[ÍhþøU=¾ Äw7E<=•ñ]”C[Q˜®Þ™¬zfØ*Ú§èwõâ+ï+žËÁ¬×†ö;ö¯ž@c™ lfàåNè—¯b˜›˜ªèIþ1+7?r¿ô»èôŠGDžœ¾ã.lÑ„0àW—´ÄõcÄ3ñ½½‚:½ü(:š€-%Oz@ÄM^Àƒ:³ªÒ13+I(Wq•ÑDmÞçÿ=°ÑÕAáÇÁ¤æƒe^ÀwÏâ?ŠÉo =¨¢l­ÿꬓ±CRXqå|Î% öô*†Æx±×és®àtžñ·øÐ[Ï1­-»R•cXÇx5|*?±ýFòJ§þ#"èEgz2#Ã89Í<Ûjò¯t rfÊ,u?¹7e‘–›Ús­¨Øû–àçðr­a·Ê`¯î¦‰PPåB ëµÆ÷ÝÕb|ðIPë1fÌŸôW»Œ¿°zU­8àK[É.îbVp•ŽÈÖª0=c{¢¸M§.É⪆š >ìî ¾ã,‘yAºoÎ v_"O„„C)€½Ý‡ß@ŽæÍä%&KÈMèwïèì·c’ÄSššB=@Øþ#¼ût™Á¹*ƾ +Î2RÂÞý Ú—D¬1ê‡øôНšá?×'âšDwø¶Ìÿ¸ÎÑ¥òg÷⨄±›Í‚¬—ýnü½xÇƒÖ 9™jĦj>úÝ'0Èy©ý‹‚òôþÈÃöÁÊ÷@¯åÌãšGÿÄ"Ô˜ÔŸ;øÕ"²ÐúÄ;N/ËGb6ìÌ}æZ9óÇ¢×õ„eHEÿÃyv[Tc]©C_@·áÔêDg~TLvÀ—@½çŽ3?*xÞKîXNú_õ?_ÁüÚT¥,V—ÈD¢»–sõ¾Ù_ély•ú1Ìz‹ÿhÛÕSžµÂ“uûÚúYS€Šàþ ;ò±ªNÌtú·gY;N½d}˜?È—:ÓçpÚ«Å0ßà¿C.òŒôríÞ…{ô•æ8\ìGrä?íÊ®óT vS×ÑR{sízºNÀŸï§^%Ó€¨ltª)bǃçû Ö“WgcGV Ó´¡€ÿ¿óêøU@ÅÇ%øÐ_½oZý9úݥ̪ ~Մݵ–úÁ\Fc±áÁóõ{úÝçZ$¤² ×»©åe¾A¼Sÿb£ÌCæyºaýÿáÿÑÊÚH¼ët!¾‹èzCÃ&—Í$rƒ_åE#¶ùó¨ÿ/c7¥lM}Þ›ŸJžÎ ÷­ðw]`°SŠæº_]¬@_b^4·Rÿñ˜Û‰g?bãk€[}#Z޵ýD´~üª0ºS¿ Ïl EÜ/_k¥¨ÿŽ"ÀÁw¢“-JÖP K8‡Xî ü‡35°4~j1Ç%TýÕ%£'Œþk<‘å°ÙàhÅ­èDŽc°ªOÉIž¡+º·ò”¨›UVüñËNýú =••¬Û©ˆc)븨Ä5»Gýì]0u/xääçð(kÑÉ­çzœE•7Ä*•:t}Hî£É)ø£ãEŽ,.WÍ%û[£Qq„W[±ÆeðcˆíñœÄ× Q¿»ùç PÜÆÃ 5ÅÞK9š»0ÖuŸ çÕqr,_Ðzr…”r!×s+sÇ8ÞLdÛ+Ø_ž¶Ò‹ ô»méå¨ S8”#ožþ|£R<„=Ï Æ6‘|¦õíÐUoäß(üÇ[žºÃ"ެmupûm( çPm:ÏVÐ:$bØÍ©ÿÈ«z0³÷/º2grÔkW×]µèÌ?ŸJ틉®+ŠìG îEÇö°{ê‰Ýî3þϽø¨åÖ&iÜ¿JdŸ…ýHb ßel52Ò9â^‰UR?XÑøÓXG“×Ú¯ªÊB~‡×ä.âÉ:`·ÕA^mú'òéÔŸ?1îÿfŸ•ÓèwëSKà Ãç°oÉ?Ú'ú««è¯J›a›œ5•J¬ïæ-ìý<›ÓݼúÝ¢´Øëf5"ÚJþ‘ùç«B>¹ _MaÞf*V Vkyc“ރɔ³œü3ö8YwøÆï-®…zo¤^…N'CÄ-¡È¾7“½å¿*i±Ü%¬l.lY˜fyR?ZÿöCFsª~x ß'1š£ñÄøÀÑæ¥ÿÕtlýaPog:èõÆ¢ç/û'Zúa=qZ<<Ò7q–l ˆÝ ytiþÃ"v½ŠÞ ¾žw2.úÝMTZDÃRu`RD4âû ä$3° y˜åK¯“12%‘r#híéb#5»Ë¼®8ëUÇ®yP+=EUd>âXêý⸞¡gIubkbç9º„ðÓÇñs©,hÝ6;9¦"ûnüy3ü­¯uOk^UŒŽ kà?^Òã| þ¨»ÊLþ1­ì‚Ó‘2¶jEÛfî›qœžûx*Ég¬–™^º -ƒ:áðçá?ÚÛõ¨ÓˆÏd¥‰öôø _®=ŠúêÁºÁOIÅšî^o³¾ÉøB'kDOEU|öo2·d\¯\ö<ê×'¢¼Z ~õÆþ3u™¹OÑÕÄ íZÙŽ'0úÝüîü£!õƒq@‰3“ôËE#ËS¥¡–¤;øU<ù9ò¡Ú(κ’su#OjgVÇ`¾ÿ$»}ÌóxkUÌjâÞ…>újW«‘ ÃÓŸ±ìÂtK,®z«ËÔÖŸ Ž¤œë9ÓX4W”\/m§§–Aÿ’¸à´’ 8–UDµ‚ø=†À}yþŸ^<†1¨<­5ú·ç:ýK2+‚f7ð«Aì®5Z5òÖô¿Š‰¾ñ÷ª#S>¡+v¥5Õ`GŒìÆ:ú·eþùø—¿Ùçq½™+?Žêã[¬9ZÞ×Z\ã }FQHì[nÆþ%Cô—º)"ÊÛ(ès…En€ŽNX)Än<ÓIŽ9©5ÄšŽÿøbî ý‰C?á-"Q¸ƒ1-#«ñÉBDþœØ<>ºŸÜdñ°‘§ÅÓ ÏlH‹¯ÕzSßOÜ‘зlã·r~UÇÒ ´<±baº/c‡æcíËZqÍü¡¬8ÇhEõó%#8!Æ<å‚Ã…]ÊK¶0öûgí OóÉË‹®ú¯Tg¯´ýz:¦h¬"ëËH6óˆ.ÈuÁô¯Å9üÇHp”Dé7È@¶à=˜®;\”5"œ€s.¨×4ÿBùeÉqxÂËØñ"øÝt(pc‚Œ0™šŽz´#½9zà-—â?’q%¾£¿Úå~rV›Lÿ«ÉbÞh:þ"‹ü÷R“’Ÿ¨»Š¿}ÒƒÖ üÊÉ?fpý–ò3›PЧbpþãú«aD¨Ñ@¯ÖÁá?aoø’ÿ/Dýù*ײ¡Ž­:4/뻋ÚóshP Ñókt°ûòXVL"©4øÕÌ\OÆu­n85SzÓƒüVõˆ™L!’júÝò¾îùG$ü˜¬ûl#>9é´™ÈhJ¡Òˆ ´Ly’ŒO°AKžÚ£à/jSáèG®#»ˆz`"*«²TÝv r„EIº°Üâ~”ãzm²®ÉQè¯:fPwè_’–ú/XëÙôOŒGµÆpŪø·ðGiTüGÀü‹ô_GþÑk[]vQ,¢:þ6úÝTöÕÇ÷6A ,ñ#É–2IpøÕc2šõò-QS¼q\kŠûæúê>†E p…ÝZTe€c¨NŽ®%eí¹Ìø†Z`­½/ªÎKðÔ[õ•aG®`gª¦ QBÔrûZÔD@Yo´ü&Ò[UrW{6sÓ¢„».l³q§qÎ#UajÒÓ£iK¢fc1žƒµžId=fHü8À¹úTrßàÙ¿ÇÅW4Vñ]‰ð誼 oG×m¾bÒ#%ùÑ4:?ÿH ¡Ý=‰'+D¶™Oìú±àðã3­¼®¹wÂ9˜«W•I¿®2éè¿ûD¯ÊšÛ´ÊL®íjì  –¦ÿÞÙÑ>š6ö  ¢ütˆ8 Z`.óÌmæYãÑoί=fF—í‰ëj-W´:ŸÕ’wÐÅ"­ðFáZ2Œú«%ú=ÝC¼Gô<¡÷¯Ì|8«€XI>ršœ)%º¬AÔD¿R²¾ÁQȧΊÂìù?¨¦bpf°þ‰Ä숿¹Z™Ðä–ÿ}‚±~U {:ÊŽê:BýyêÛÐqêj®tÜóóDøÓä <õ³w#l Rà%OpïJ¡`Ûa]—Céç[K-—©è(µäþ¹:oÏF±<˜Þ„NÿÄ‘²Þx7™l*ÕD^íÜWð 1íZ<[qvE92©b»õQcfcòžèx«ÚÿPƒ½8ø“Ów’|S±ýî(¼G ù^ w¯wù犯ú¢ÍÈ©P?mAøótøšË,/›É~—ùÿýÖÏñÕbꑊb׎œ°­¼h)46yÜþ£#ü‡ JœŽßI†¥mÇüó¼xÉ) b/Ñ)×£†=ÙÑ-|hV{ƒýE®dòÓ$ËñÍIæAäпý€>ƒùQ ­Ñ éèôEÕ=,J>x…*óõ¨º20¢+5}ÍåƒþꋌÏüA– ÞkZ…‰x²ˆ° åî‹ò¿ôâ¥VH¿ã^ë<Õ ÿ.ž»š®¼¤YŠú¼ÛsÓ¿¤1ËøªøMýî;í‘¿ÿÈŽ5Œa5dþàúÃ?DµØô1wWõ8U÷‰üôb‹)de”ÿ¬XÏb·ÈÿqE$·˜BÌÍÌÆúóùú'ú·?'_x‡2¬3Ï`iÙÍ Oä}ŽÏ°¢ƒÉôq©?ßóÓqüü…”ÔCž†Ðå$Ы%ð gØáß±ÉN}{ty´›k‹™¸ç‚<³?¯¥iBoŽp<ñòÙDIéш×B 7s~D5 [ûֈʊ;?±æÁï±ñÃ&&ýŠ…-ƒ}³p%Á),ã!,d>ؤúÖŒ¯eƒ?޾пŠåšh ŠòØêƒuN‡©@þ±›ìã:yØbÞ³?G‰ôæ×V¬®1[ó“|ŠÓÿjuÀžð/È@ª¢¿ò4_à?ÊÚ QcYg:ØÖm0º‹¡ä‘I8†åxÚ[ä»@î ‡-K;87Õ%TQµ Ä,W`¯£‹@§ÌþÁîKJêÏc“¥%ÿ˜ ˾œsøU$*òö hº†&ç3UÉgˆæ_bÁúóóàC»PÉz{¼Ó7Yq ú«–þùGz¼b¢j -éŸ8 Ë—Úµ—ô–(Œ[Ów7õƒqÈ<Ð £¿ÚH qÈü3Èz­DZ¼ìEîG}²©CÖY¹ÛÙýVô»ð)è•}íÞÌÛIµÊLÙžl¡¾u5þ2¼*"w‹î+xZk§Ï®Å5¯&•ü*ÖZ6~¢óüÚ · î´üi>Ú¤qê%žÓ‹þ»ðô‹äxùd çÄH÷z[ô}ÆgGsEƘ^f7w`ÊûBû}P–¨«Ôf|‚‰Ãõ{LÇB-o5TY&ž«yJ+²©XĘ)ÝþcsP¿b9J³Ë¢•ÕÿQŠyƒÅ`ö«R‡“šAŸÁÄDm1-7£šFv{™çñªH-[¸wáJ}¾9WÔaµþ(Û.Q?Xõ[ êϪ„ºÆ‹¢) í›LQøÊ×b©Ãcœ.à›a@Æ¢n›‚:QˆøUžºN¼û{Þ79~ÛÿÁ¼qìÎW4 Ì æ[¸ÞÞ¨J‡“9Í"ÚŽA-É]QuóϸM«ËlËQpïÀå  /ƒ{DÅÆ Ù¥P,¹ß²—wµ¯ªÅì£þØóÉä %ÌÈôw úçýg’©%‚? £{.e«Už*é?UIüÇ`êò1W£8ÝLßG">^Èǽ\×4ìÏàý¯¢DDòÑTþD¿»‘}²‹*ê(t´=AÙ«ÔÜaþà=ø ]µÇÚç£úc; uÖKÁü£Aîôr#:ÑÉ~®U^®Æ ±éL8I5Eo;‹~#q\¶ë³½€ü¦“ªIž”—þŽCð[>ÜùuøÅ[fŸ ëõBU}Æ úïÖ‘~Ös²¢¡0ï™GÓåͤØê ÕyñÔ@*7Å@kX—Ýø£™ô¬*A½_7÷¼¬ÍÓ×£8›²Çnòd]W™_ûJUg~T'ìþ"ð«ÍôOEÁ!ô<‡ò ;Þý >Xáÿ/‹ îõèWpððŸÙ%‰”ŸèL7Æ~x³k¬³ ýÕ0:·Ïàêy¸>1qã‹Ä㛉Ìé}„¶|‡§DtÉä˜á9ÖL<Ë#4þcÑ“x~$ê¡[䯅ӽ™U[·++û˜|ɾ澳†ULTÖ¥´û¢í…ÿ(Fí[uÞ{$×é*OMu”^ò;u— ÉbËPs]å.âß ži¢\ˆŠëͦøÚDø°<Ãj¼y)¢»÷VrY“ÌAf bóéD¹ýYgùW øOd uBðë´2Ìÿ˜G„8A6Ârhè¯já13íˆOɉR¹$ìö~þeB-µìð>dIEͨFðÞÿŒ ¢/þ#ˆ×L𫳰xûPÀ½Â”¦FÙ +ê¿æª,Cì}.±þ0ã“ÑÛvƒƒÝéè†"·jí¨ŸÑN_‘kð“è_’G=“¾ õ§a¥Ï1…ïþ#¼CþQŽüÃáûÛÈô ˜‘ ï +n5²rÁ^%&Ÿ)F´âúj­AG•ù &©]ïí[Xç/r„jŒ~7'øÚtVßÃÿ'A”¯š=ƒ¬×JDCátÔ±,žá åGW•ŪŠÚ"3Sÿ1ÿñPb®ø;9A¥¦I¬x¸mcUU ÄìÒfè{Pý Áâ7».X}=é'U¯4€ÊHÿÄ>öTuÿÑÐ>(Ÿp—¼åWþÈ:¨ÿÕ ý‰ù U•e/¯¥Ëý8ªÎ‹2Gý¬Z`§%縅ÞÌ 7áúa•gÚ¡×ï4U@QPDqûNúÓb7åä)ÿQß¡ »êà?J3Q$ê«ót0ŽFûêÌÆ8#ŸYÚ<ª7gwÑÂÈ ¾Ó0Œ—¿9ð–v‰ùQTæà?Ò0Íúª‘¸§Ç§¯ìó ó£Âa«Öøq“ÌWD§cé±™5Û0ð«VÕ8GÝ÷m3±ØŸž&Ô^´ÿ³VOýœžHèDlÏÉj}”#ˆåSˆM DgYý£ø¬)©¸dþ ÉùqTÎÇÈô/1Y)¢»Øz 2V—§ÚĆ5?ÿªTXto(yf¯òãõy­ñÈBø’hX üV^ާ Þb±ôršLòyÂ|vk1K™Îœ¯õg—1’:—qìì+XËç¢+–¿%ÿÔ'J_‚—»ã]þc‰UÒ*.ÊýR¿›üª0 ð"îDŽ@RÑ€ÕÞ[Så7ro0hİǹ²ëÀ±–àf¡„nfF á(ëêCÍ®xqPº|dKñŠå‰ _ÃRŸ¦¿ø03"jÖ D¹“AÙæÀTyà?Þ€À…4?júݩ›ë>þ<¶Æ Ï6lr‰lNÖËø˜xþ•tÙYs#÷Ê©pœVшì—ÃÄ "Ôþ9K~pïdªžô'i†ÇØ G½\%ª¼Œ$1Œ÷flÜÞ« þcy°õâû×t$[XÅ1œ ñÛKP¡æBq5ŸÚˆSè||@qüÀŸb«aDàžòïíý+b7ÿ1×HF¶| Öé¨U‡»—F­¤—ÔdYœh<³Ï_Ðßc+|ÅhÕˆã,° ŒhxÓ®´&Æ9Â’"9ú]?rÉëlÂÌV­™Ž˜“¾‰Ëé¸þ‰È~žzŒ.+=…Ⱦ :­ œïQ*VêÉ—¢{.¢ûBvE7ôÀõQ"_3¬Xä ™?8œð%û$ýKå÷ÅOEétµºs…êI¦”Î}ª{½£ô/yE%ûKöHUU‹'b8•ôÃí¨l7’iŒg2ì*¦oÅs}Auœi" ¨vOIýùHη gS@T‰Üþ£~Ùü€.»åM™›p—mT~z‹ÌÅ”¡æ|0jàIÔvÃò¦®sóg2Ûk ¬æ}öê=Ћ~ð«}úzæR´ DmÚ%æw=µóÀ’yÁÁ[¶¥É[²|õ:=óQé“Èö “ƒ ’Èú“x¡¹Xî>ãÿÜ‹wZ=`ïßÔêÿ&¯p¤’é¤)éß^þü¤ÞŠÝµ€þí¥VÆ #žñý7ë?¼µ›æuQ‘èi…y ðýHÏ&óù”.Èþ 8Ž_55Éâtʆÿ(oÕOÄ-==éêZžBÐÇ/5ýÛÆÜͤÎþ­)AÈïÐݱÏ`9 ›[춦’¤èk­±á?ÂRžŒ~ô§Eq+º4kí‡e"ý›šä$7Šqg^æ±;ÔsÞ¦ B§:îÒ_ñù­¢ÖQï1ÔmX• X…ÈGàE¢…ê?æí-)»ƒÔœ$7º,œùL‰B?3MVD¿;«x˜kS~âìéÏ$šè·C¾ÚEm-øU5¹ž=öÙ™_Û•Ó%òïû¬»™g5±ë¾²‰Ln)?ƒNLd ±3@!½¡Ù“{Iz¡¤<€‡ðäol¿¼C|Ñ’þ‰;A[*=9jåÄvÏà…þ` ÌÏ8E+hŽ`ã7à+J¡ X2Õ™óò"NîD†pfø$Þä ö)ƒœe­$š]È5ñ¶ú›ßôOÁ–ô5úŠÁÜÇ\0[É?î‚nÂì¡ãUNâÊT'¡ÚÏva9ŸØµ/ü¹/ µ3¡}r°;ýR×ñ¹ÝÈÞ–±¿ÀgÞÄvy€_yƒéØÓ¼tí‹ "VLÅQSyÇ,Dä;ÈV˜@Ž¿Žñ“ÿˆKLpŠþÀNÿ«Zò”‰~ëkÔpæ´¢â "x»SëÌ+ïMžT‹ã[€Õ]Hös¿øÄ š!åI¸FÐËõÇn´îÈí(£:©0<·Ðï–´ï©÷ôü:#‚¼ì¥Œ.a?ÞpƒŒ¦ŠR…€_mGÚ‡¸¤ »¢¹ÞiÑ ýÕ |®mWRÃðé7ìJÔŸzÂAj4½«ÎâÛ¢,øŽj$üÇ1É}GNßS닎jŽUN…§î¨#g1½AEŽè3•3‘©ôF/`à1]®.öæGIx®žx$ºÓ•§M ýn!ÝþWIyÒỲĦLT)\…`yê_Ÿƒ",üGT*Ù À®ä»Ë¤¦“¼aú¡ÞlkµuïÂÍú\ê?P÷ð”U§âµ‡^Wùé4ìÃT°•åtòov)×P¦àÆq=¤â¾8õÙaL¿ÃºF#²I+ëþWêÏ©”q\ÒJè¡!âîÛìE<ºå6ÁŸW4¯êuÙÿ«µFêϽ8ä¿Wÿq™þ%Ÿa+2‚Û$°›˜a¸ Nä¤ð5˜.óµž-Øìp‚}Ú×tÉ"诊cï‚`œ6Õ*EetØY©FÏg5 ±Ê Ø2|:V?Ký „;¶á=š‚µ4—àTR‰ýàWGÉíƒÜ¯¢~ðöÿ!î-À«È¶­í’Uµjãî®ÁÝÝÝÝݵ¦qwwm$h Á‚‚…`Á îî'ÈÿVîa‡pïÿõá>ç’ÉÚ«ªVMcÌ9õÈh–ú!Ýî㡘«‰iÇá5Î󾟸 þŸ˜ï\àWÑQÍ.ë"¼æµJ=¬ädúïFcÞ‰eÍÇV a<¶ç5xOn´š5±Í®xC/ÁŠÓñÙDz‚Å0vw”‚tKœ‹ÈCþ1Tæ¶>+ìR0¨šðJ·ÂÞ´ ï$P÷¨ùɨfgzDßÊV|ýÀèg~…ã‹b󭱌ØîÆîc¿ëìÆüÚà ×à¥+«ôÜýØæ0Do5‰‹££q±@¬® ¿Š!í)%õ@¢Æ’Ë çžs_êÎ77xµÉÌÿ#ág5™ Šø'5ƒ}PÖ–$×ÚOË ßëØz°üÇzöº ?<›þW¡ûïz“ CéÎ};øÐuî:Ë-èwó1£nùG|ê*ÊÉFTv3Óó ç¹§g`ˆÅòPÏE× Ä)+þc 8ÒR,õ|ú—¼ÅfzÓ¿}¿¬kÙ5j×á/bÉ%d3ÅÍ/¬xœ5ñÙFRª§‚¯–ÞBZ*âwa¥‹¡/®KÆÆoÙZ$üÇŸLPJï8Çäíåò8xVkð«¦äûx ›ØLLrJïb½¼"?6ì±D3s€¹Á¸f.ë,w¢ÿ½A4^Áz/?ƒ]6{õOœ‹N¡jåý\MtYÅ|$þrnÏ*´y䑽ÌÇF2³{T%c"ù|ú··f&Õ4XêãðÇ>èÃd %¿¹ ó1‘L*/’-‚òSýÇeu·–„g@Q\VBóÚ”Ÿ«¬ÇáOLÞzOα‡~-Ïäù¼i‚¼#¹õƒ¡a&$5buDgþQƒ9¨OA,2pÖšvÖÔ”  ¥wÁçïÙOdÕ†ïŸNžàI/D_ú'º‚ŽÞÇ>œŒ)ÎSèÄtÀ2 kð§ee‡áÈEÿ° r¯U6~-ókз O8¥c>)ó^2·¼+1av³™ðvÞÁï‹× VÁêú§J•ŸÐ¬ßÛEJ»;ýwóëEõÛAúÝÔŸçf"ú>MjÏ•_M…ÿS^*÷é*XlÏž3쩟Ôî©ûÔ÷úAq[¿©gaDÊÓë.ÖAW“kÚuÍÄ‘B-ÉL·BÄ™ šþ%B¼!?ø¿†¨×ÔtB1_ÒŸªÀK2öqĽùÅ:ììY¾“¼d«¨,üôÁ¿ö˯,}»~ª¶ïXËíØàD…°;Â|J>›…ˆœž]" Öq°ØáŸ*v¿]7ð.‹Ê¹äe©Ó«Lœ¼Ü¨Ät üè,+ïRQ#f„õçîZ'Þä¾ 9>xÅ@òÌÄHÙ@ÁçbóÞc=’53zEþÑ™ùµµÔs¿¸Ö$øøžyx®,à>üª)«½Àèf~c8ZÛÏðæ>`e0±Ø%}nÉ?Âë5PG©wÆ×¤1=Aâ«ãwSòŽÚ}_<ôšúG¸îQä=È?–ãmýÕ{üÇ|盼QwúïÎnðN£JÉšNœ1¥À(xáâø ¦þ¢‡õ;Š ¾µ æc;ôc§Kõdڇू¾òÓ&‹qX‰â(h÷ÃÝ7úãekæהňôûbñÓ×E©‰èVÒz?» ‡›Y“úϹ¡žtFô» ÐäÃ]«Yò´žjk {²L¾ÄÒ4¥Ï«”wÍtðçvÅI-ªC.áÏ7ËðÌ2„ê¿ë©%Å;îàÔåc ÍFô¶+ähæ"®æ¸Lÿö5T~ØýÛ/ bÍ‹-}>#HñHïb‡ô§%+;KÖ `¯q•üc¹ÕyÖ»ƒ\ÆúÂä£uòŠÙŸêé|æxº~àJ.˜±euð¦ÁÎ;xHé¤N!2hoú“5ä5¯‹éF!é°fc;€éØóO‚_ùá—z€ºõ%¿ymÞçIyÑ¿d4ç23ú«UÎõ΂_ÅbçD%…d^Êè *ã5óÞË(wXûɹ>Êsò.Shw¡pøFd2€ûÇÿè-‘ÿ§þ»mÕ‡ºÃHËiÛjüMvT‚ùñùñb½¬dx¤µLbiÆW­©wœÖ”¯7 k+ïä;г3°§ÝÁÐlЛüÃCt&VÍ;y[<“‰ey§è&ß“U8îÓ÷&x[fª17â;ÞQÿ‘Äâ›8Ç™oIÙþ¿â?^R«“ÒyÐÿ*¸Öë‹Üßé¨ÿHE·Ä"àWOƒú—lVÊS>þ<)ï×áÈ-óŸŸ:¤\ÑÀûÃÒ´£šøJ`üþᯟÓß0ÿ<·sבYx¢Å숮¾Œ­1ꇪª ~Õ”ZôZ¨•*â?"—y-`þ`lKÕüqÇøËHþ_¬&{¸AmU1b]wQX¼‰”ÿˆAÿ«søµ¯ØâÄÉÔÂ5¿zf0¶"!¸›ÚͲÆaq<ÂkÞ¬4‚/wŸ‹ ›p¶»€¡‚Ø­'7ªd¾!WÈJ]šÏ²í­K„ó?&k½PÄN†=ðçw®ˆ9ä ù±² ˆõ  ¶]€Ï;‰W*[³ ¼§‘è«ÞÿÅy¢¸«iQÄ. *ˆ7z+|É?ªa)†Ðÿ)ZÈÆxÍýx£+h]/¡.]ƒÚz§(nfXEm¤OB–É\BŒáÍ+c4å]zÃGýGý=±údaƒƒü‡Ý5åšPà[ö;ßÜàÎVÊÒÃnWæžÿ1ë?½Ó˜„|è£Ná5}ÑØî%.MaÚÕðgÈ÷é ÀgCþñÑú‹Édj©°ºAöyö¡«wG¿»ä;éß~ʬ"ëH»b1-h` Üùø…¶°g‹B=iýwS‘íf‘ÿF—À5<w"w{²Y~“Þ²]û¢ÉÛfQ8êx¼òæó1xØ:³8kLíLˆ×hé9WPmƒ“©f^6ÒÂ~Ì•ƒÀ¿Æ0›/> Rű©1üÇ]l}A2OôC™:X›ùç}C¬—Z O»€o¾Êð1·ÂÿþÁ„Eº¿Ã d .ÛáX[3n›ÀñzÁ+Ágž¡þ£’ùâ'þÜMè<žlð«ŽÔÑ¿¤¶.:Ø1pÒýÀ¯Fyƒß³6Ó)wx‘«u…j—‘¬š í@<ûÿŒ`ÿ±úÁ8f#žà4Xž¼Ÿíš+Ý–7¾·5ÓN&áb;è‚¿R»±I¾‘Y@ÎS“ÓÍmBºÛ÷Ol >×MìRNÞ¡¹T>Ö2:É:ô/ñ@¹EæG¤÷UFØ B ÜÆü¨}èwWÁq>!v:/Rš]~â?<ÕÅúFчh©hP­zŽ$ŽR(nÑͱþl…ã9ÓÏïX¥­äø–ÕôþJ‰ÿLBöÿAlå]ʉb êŵÔOþÃ_©ü›saƒßš¨Ì?GÿÄ"ôßU4»»ÁtôWÙµ¡ÚQ-¦v_‰ ¼Ú帮€ 41‘÷ný)3Dv¨—õ#bŸî¯Õ¾ü&O3O×x/‰ÖX«?˜_û]…ú=C€^­‘-ÌÜÄÊýQ´ž§ßá¹ÝìIà üGb{"Õ4Ó ]ÙYÝf8ƒÿTAU¤Çßø{ÞxÁüéôßõ£å •ÙÅÐÞ¦q¬—›¸þtÖ>¢ñø™½ 'Èš˜§EOçb‹é5×xG\fÏÖÉÁ¿Í¤þã1˜_ë¼Ù«þ#!ýÖÿFeãEÓ¬CæK”¶îddýÀ¯,3º±Õ¹Þu‡ݬÄéw7 Ëp;¸7vÿÄN(Âvá?>Ó»ê Yˆim£I«—¼-¿a—‡ðrŒh¢ÒOóÏ[ÍÿHÉ{@u’ùJ¯iœ‘y)É?ÆÑ§å$¹ÈN°«’Tñ¿—£ÐJ­¤þ|å"7q>A#xŒw³ÙOþc³º ýU7ÞÍNäFOD4æ×ªŽôß}-G°3k’ã5ýw}É?¢J˱UVFÙÀÊ~õUøQ?˜™Œ«â…ÿ±Jâ< '•j ç9@¤¾HHþ‘þ¼^ŸþWUYåˆR„ùƒ½àÏ¿ªß”ß›_{Q¹ªkày@‹Ñ_%$¿D¤~J÷Ö¿i³Îq»‡g¶{u+×;"Ô¸hZj Ãn$^¢Ëjn—×°—>R}¦&±îÂl~BÆ>ËšCì ¢;Ž¥Í î´ŠŽ9÷"5ÿ<ª¾þ¼Vs%˜É"B_ð+Ã|ÁÿF¢‚Ÿz˜Bx…s>¥>ºØ¹dT_Pel%/ʃޣ!ös1ÓEâåJ¼•Õa“§ˆ0ÿX¢ÙÝ`¬ýÖ¸+Æâ+ïÌ€WÎLþaÏ+9 ß]È|ÇÒýnï_Îz¬ìR3â¿–q-ÙÙÁ7º¬t$B¸gL"¾OH¬Öh/½É?.ãI½°Í«±Ñ›DY=¼ZŸªj;}0w? ¼Qq¢/ÎI¢Â/¨ì‡íô2úWìÉ"ñAÔ¾¬K6ðÆþp8þc•’Aï'f“/ÌÀV¦%»ü›ÌhÙR/âê¨à@Ê.à]²Ç¬\Ãv¼Ç ²Ù;œÎaê?n3ÿc2qzZâëãä—ñ®x“kÄóɨR›ŒÅÏ$ïQ]×ÿÑ ÃZXçåd ËÁ¯æ…©?çDNâ‰BÔï%XÉ]ÛJþ|ýKQ…}èYæF“3È  0 ä4Ÿ>Þ¯‘ ÿ±‰üãO4n¶ÿðãH‡Û¥äEÑ_ ¿ú»ðuìQø{~m3r°-¨›Öà?Ž˄Ư ‰ø«<¹VàH{Ûæ|j:ËCÌÿ¸O‘þ‰/ˆÍ7ƒ‡%²|Xk,˜Ø} ÇÌD²8UÜÁóÏw0pñTrðF<‹kb¼‘F{<š¦!Ì(ˆÿða•«° ä2”¬ó-_²²ÉxBíYZØ«€Ÿª±P?“Ý=„ï.-k’É…LN¯º–;Ï¢þc ø•å̹î4‹Îé P~ áÙu&ÿˆÉüó2Ú[Ð;<yù(ó9É@™€þ%³éXR…NÈ@ÿ´JqÕoìŠ~úäsK!£‰ü̧ß³²1Ày Ð t¶èʉ²§Uœa~m5f–#¨‚oŒ6`š5ÀqÆ‘ «}w ¦z¹Ð鬘U˜“­“¡G!zKa6ûlð_ü;–ÚJ Ö®ßQê«¿§‹ Þjfâò¼Ú<­†^R¿Äœ¿*MG“=ôoù›øÕô»¯à?ʉxR›é¸• \À{Ÿ„o~¨]VãEhKƒ÷¦(žú{¬ÌzÑ{×|™ŠAú·?»l-Ú3m)‹Q7’øÕú_eFÝtŽÌ£='è:‘I†eÔk@yüÈAò}ðEÅÖHõOŒ¥ûê7QØÞ'–÷€•xGþÑžüC1AÆàÏ?c¯‹Äè“þ"¼fC­‰^w#þ&&Qïz#=Y¶Š]]Šw*H}°ˆØi˜ à3©@-[+zir£¹²“Tpò&§Ã*fä]²ðŒuN“}\&6¿ÅmÿÑì—óÏ“¨oÕ|(ÊlÿQÏÿ€Šº ˜Ó#£“ˆ× ×ý\è4;«nÃê¯A5K÷ó£üÏ×-ÔéúP˜’ ô'©È»· ¤®$ø±?1ˆ™ä£õïT?ô%~ý ÿ±Ÿ’„>Æ þ*<þc«Ò˜wx5*¸¹ðºÙ°53`f†À 7[€¿‚å/†öêDJØŠµìm3ãY>wºþZ}j‡§´Q .MÙÝU°þ*(úà?ÎÒ¤0q¾+•éä³´¬!Ý±ß ù¸ŠÛDæ-Q¯õ\rSëš”l77Ýr_`ÕvÂülÇWDC±§­^@5uØúŠÿÉ(r1ŒKIr™K|ÞXòÂF2-¤öb§–o¬¯(+ÖÇûg¥ÿÕ49ŠùVýèDÓqŠø~ú«1² YMsžö&Ц=ìñ4qÝe½yˆ–©ñ0gÈÆÚ`uwMð«úð'À(L°òaKÁ±Øí`ú_ye ÁOŸd‡—Íx²2õƒÁþc2R]‚ÿ «"ùGZ¢5F]p¦>V*اW•wJkù‚4õã^&î?HO°qàWqå0z%Kºâ®t>õª|𠧪 ¬JœñO%õÑž{K•ʘói¨×¢:^Ã8\cŠ ;G£þ|(þm´y5_A‘Ëé?þBÇ5ˆY\n¬@9VÛLÿ«ÊÖ ,}!z–ÜÁtÃ̰ΑÕÅ75&ÿˆ+—‘-?#ø"^ÁöuúÝêvˆÖœ¦á Ë÷ÄKYÞÍQüꆬJýÇ:ùÔ2„¸æD,æß¼ÑçдÆ0ïÁ+¡ÿE*3ƒá+p²&‹^ó¥<š¾]ðç&ívâü’èw[“i/ ˵gÍÚLwxé5°ª½F+nÒúr…a¤o <C±ü¥ñSá™ËÒõo1>o9V¼ú4xöÚ¢ƒú«'ýB¹¦æ‡¯˜Í;”ϾRtoðF·Áðçi™Z œÈËØI\ìC汋=nB-ULÿÎík®¶Öbe’£¥-I.°ed=<Ó;ôžÔŸ×‚ÿX‡2¶²9€'¾€{l@ħßuWj2?Ê“î.ñ9‰¸û3A}¨à@ƒS t\,lª'üƒ€¡]€÷XÚ–}îd~Thþc¯6_ÛÒÈE|í‡íz‹Ú‰úüO/:–x‚Á&ÿ¸oV¤;¡'Š×ÄàóϘ©òšü£þ#ô“ÎO¯¶ø,DîO`Ð=ðgèuõ VÂø<*¢ÍبËf]™QÎÆ#ÿ¸£<Ú¬AÌ›Só ñ¤7i¹ˆ |áϳàß±¿˜àW³åHòîDÒQ™ÏäsÞRvkJ>³ϵ Né:wúŽnw˜þ“U¸pŸ|9½íàÏ÷Pÿ±œþå æáÞ¿ÊÁ„«çLÛ8ƒþê»Ü+4ŒÈÞö¨‚¬dž‹ùQS0–çØ…¼%hásÀlðçé?þ%sèPuŒ.('©ØëMǪ~ì×0 t-.W‘löåOÕØ‡áÏãiÌ\Q Tç$äþ0ÐêŠB`Ñ7*&OXI±èËøÕæpG“â?èÝÎÕœ5âˆ|¢œÓÔW¯éqÉËòÍ1£‚ô“¥˜ÿ±œ<¨²u“ f‡Õþ¼œÏxö=Öb“•K.ä¥|LÖrIdKïçô^êV}?Uˆóíüng©ÿxd•¤öð¹,G-âpk„ãŠ#! H!ô» ³‰²Ðÿ+ª9¬úŠÝ{E`ÃÿJþ!±ô±'áþ#r*$çÃv~‹¸<§6‹úòúwµkº3¿¶¦6A;ˆµWÕóΟŒÌ”zp–îF*¢y?2Ž„ÚNfÚ^—ô úGíþoöy\¥'5‡D øÕµh,ã£òY à©õÍÐ_Õ3º„ËÒ†ÝëTõŠê±wL³7Ì@§q&]K2Ší°égÈAóaoéú'îD ¿J@=ýUQ K8L}á§­ ÓöÐüJšEñ)ñ¤ÇÅ ç“ »¯ÿùŽ—2€úó rÌë5}P¶‡§n‚ÿ˜rtŸ,"#Q]Yp·‰øÓ º3þÓŸ•Z+®pÑûy,ô+””EX1QèT©àåý°øtdÄ-æÚë0ÿÃ÷ Æd‚}v‰Mè¿Jòî½·ð›eȼƣ2ÓaÑ»â•ý°Ô·àÃwbݦðÿ½˜Œ°/]W¢" /Ž--„_O¿‘ä&øÒêÏsп}=o)s ×:(¥q•'݆»¼Ê¯(Uõ Xü”xˆ tfyÍoÔ Â¯  +ŽEzçõƃøÀѸP²žhv?Õ[7íú'5j¨ûøTë$èžEþñÿÑvh~¶™CG™Ìdý‹R—gÏ?ŸÊ8¹Yžd1(þz°ÙbA¨õô¿ŠÂõå‡#1É:–“Ÿí63ÈäðK¨»B¥€üª0ÿºO\ÓÔ±Þ7yRá›bÑ}ôǵÚ¯ÒÒñnù§‡¨E®$h ùGôLãá?öX7ˆÃ½È:’…üÁ=Ù@uâZT²§Éô¼ô¦!ÖË/’â±ìùƒuÐm\0î˜ Ñsµ'ÃÊÅü¨‘Ôe_”ïˆö™#a.lÕîÖ<‰Âø$SÜ;P/ÞÞ¹½mJEu>èp?îZ[r¿Ûb"ìþ3ò&; ¥Þ¯•uCÆ¥ÿÈdê?N¢Xlmý³ùóè¯Òâ£ÁùÇ#u–”8âÙrù ÿTÀ²L­í…þj3ùL*ÇTºV¥rXàW­ð¯¤ Ϥ÷¯¿OTÍœþ£¬º‹útä1Û˜\“KT5&“1§‡Ö|2£KpÞ蹞ˆ:Âgr¬6Ã}ìµòÉùè¯Þ•…ÿ¨Á Ô¼[Gﵦœ§QX»½â«ìD·ÄÔÝœ“ÕàõûZ½—Qïº8:À›§s,’I¬Øôà-`Ž[¸ŒŽ±ïb¾ÿJÿݯpU‰œ'áÓlúq%£zYMD¶‘OÏÂûT‹5á?ÊPÿ±ìéÕc¿óÇ_9H2{¢u*Nÿfý LÊ{æœèß~[{ù›ú«mú[ò˜¢% ÅX¸+oñRIOÿ’RFi2…'"=¶²;ïÃ?ít”@<]yx÷ºñž'ÿÆ.s ¦!³z]ìT'Pû m«ÿi¡ÿü›ÊõœGæ0çwÏ'븊þJpj?âRb­òÑñ9&êÓÉ"¤†?¼Å?À|î(bÀ&l¿ÊÿQ¿´ˆZ¬—d»Ì%~\Áç5è¥"¸æcÚ_D‚}¹g—ùO¢?MmÃ…º´á`öo9óç°¢þصâë(Ûþ²þürK-nGø`jYÈVâRa÷/y†þÀœ@üJò+T9î#¶?‚Åõ$ÿÈ¢áì²¹Ú\ï‚oKŽ·¨H¾²¾»«¼Aê‡b¯«þZŽ^hmÁƒ/# )`ÜD7Ñl1ìsgþÇ$±¼p!9‹o,Bµ4Á(«F÷ŽBT¨Ã{¬'Z·õ=«ð/{@ö“!­Ôãh¡;Ä+ˆtàW7¨Ji Žtþ%ÞÔ4DVžŽkÀuÞÐÇd¤|möƒ?ßÈZcðš—©ú;Ç*iz‹·²[é¨."hÆ™êdŸ2±ÒH'÷â?¾Ò}q%ýª*â}]è¿;œú¼åtBaÙYÙD|{LøB¨1ž‰™Îõ¼T-šYžs¿ÙÈ+K±LÀ/, Iòùð= ýK.r½è pÉjNÝË i‘ùÿIžÔÔ7.ÓŠ;ýG'ú訞 rF&¢¦‹*=¾Z‘eÕ&ÏJfù[©¬¶L"œLÏ/7YUVa8ú8r ùÇ;~Ë‹ü£…ÑÇy ÷ÑÉm©hÅ;:‹œæ 8 ‹Ð{,úƒåtxÖù±™­™—õŽ?“uǬDýÇ bÅ£¼G%È7‹ˆ_õ rÞˆÿ_¼gVKLçIxF7¬È©XÃn%¾ºMÕ©ÿ°ûïÞPíÓå¡”Õ\´†Ú*ªÅ£ÿæüóóÊê?RÃ%RŸ3P߯=¥î≾OÌÐOéèe’ƹë°{ ûÁú}¢ÁÉÔ{Ø8ymxAµ¼?±ÈG=ýKryÃUù„]é/Õ¡9Ä7Û[p]± ­Í?©[Ë-¼àhwónE7Af>‘òo´]0=µ8[È@Ð8ßÕ%·¹…­ïMþqÜæ0ú«$Æxq"Âk>©ÔS[lçWF3˜å\ØûGøáIàù%xów¡HõƒzQ˜ùQ#Xq«ÖFz èÏ v÷JÌÇò×2²Q•6 9\è:wÂlìÕâÕ@ñ:©¿RJ|RÖƒ_0½ñ_9ȇ¢Â$v"g¿K=ðSªº¦šÌoøKø¤-Ü×ÜÝå¨2é"œ]–W»é=øô¯Æ®ñþÞ_kÏ?M^è­çÔàºóf¯3©¯u]sc–óÍ ~º®J6}œpû! ÊÆ~–q5±ÿsàC Á¡ßä÷‚áØókíþW3ù¿©äI£>º©= ^*諳Zw1—ü9;ö{/‘ì7°íM<‘=ô/)LÍÂL"ߪTû5—µð °U™°Uè82Ñ,OmYèúó/êk‘ˆúÁœà†Xüðö{ÍôàW[Ì-2†uYÖ°3Uè&hÐWtÀ¹à?n²â 0übÜïèÚþ÷ÐM+Ï9DIy0®ŠÔF$dzÔdÙE˜í?âÑ¿]qÌ‘’ ¬=ÁÁªƒ ­ S™Mvá +yV·;ÿ©+lç4ÑT b‹ÍÆ7Ó 4¬|yAùÊšk¥c^ÖnìòwøO¨º‚Ù5ájO£q²ýwƒù0õ¥¼UÁ[R¥úJ 1¢ÁÎ bþyo4ƽˆò™þ ßÀNÁ»ÂƒH<Ý0žw|Ù%¨?r XêÜÜ>õˆöÙ(C޵ÿÑœ,¿‡ùÔ*kïÓA¯*ÇbЬO–J…ãKªJz¢ˆN'õ¸¾?1øUu§ÿè¬î`þ`Ïc úÝÔdƒå,G_º9Vƒ¡I…^*™H *7.q²Yé˜å±žÌa-ªüûXŸc"Yÿ'ÿ±EÊìäad3óˆ=_‹MVc‡«•”þ‰{È?.ÁÒts|t\µr;FÒ™ë;¨br]ŬæHz8§ö,ê½âb“óŠÿ½/(MÕà·ó&r„8‘ßI,Õ[ý¦NÕrèEôóAþcƒR’®#]5Ô¶Bý½úóKŠ9bbð—wB ô­Ú]u}C.ŠéÔKÜ¡›bpוÈì±?þƒ¹€"– ùÌ<PG±ùYÌãXȼxÑrê¶_<fˆ©1ùüy¼Ci‰Ýä ɵn¢ù”füG<Ònøz¸7rž–x™¹"­²? ªÚSGýϘš\`¨X ôóxÈÁä9ôÏÄò£°|#±ñ‹°õéàÏ_à©Ç‡ë?JÓ¿d1~û/*³re3à8'bÿç—'ú¶;OžÀZï4cÂÐ.­›J?‹\³±žˆúØüµŽb&-9Vw ÙÀCò7£$Ñv™‡úÁXü ÒŸjÂÒrŸ‹¿ØlŒ·f¦2ÆŠy¡ž‹ ž€|77º×)äA«á?¶€_E—¾æ6ªŽ¡}f «ü¶†ã/ó² Ý×̆Þ6u¨úÁÅð8»ßÉhæéß5ÀÄ`{;à?FÒÐZô»5_ÔŸ*Ž—ÜDÜËãÜÑ)°jUŒÓ¡êk‹´d2¶~·Vwø•'þ¨•¤w$u˨\8JÄú1öÇúÍ…ûè ªçIÆ0΢ ý‡8oà6êÏgÀbUgWµ¹ó7Ä~Ø™ã²3¶¹!¬ÊTºL”é©·Ÿžu“¹„ÓˆÇ_’»q{ðt£ß Î?¼ÕõÚNÿêsËÌà»Èûvào]èuŒY–cÙH|Ç7æ¾…ÿ¨CÕFt4Õ=á«úÁÅ¢ÿn§ÿhL¿*æ—ò&l0f›Ðt.—má¹›SçbÂʤGuû¿öŒéºY¬*ŽxÒÍÊ ç pöOˆÄäÁü¹·ú·>ddQZ´úodoÔÓÙx[@©öà-›;î9Î0Sx€ÕDÆuÌÉüEþ\#ÖŠÆû˜Ë¬õ_éß®ªåUÓyV¯‚f…‡5;í?|‘„¾‚‰Ñ_•&ò;©ÖgÍõJ*?úhîš…¾qû?ünØzCÿ+Í(N®‘tÀ¼S0ÿã´XļŒ‡¨ÙÓ9wö·Ã~g”þÞw4‘øbßúÂG¤¦[ð%êÎéó«“Q"™´fΉ"ü‰ÿnbç›ãGÚ1=s ýÁÿ÷bÁ¢`o§ã?.êa7æ;ï5æ)báuú'ºÃ1¼GT‘*Û0ÖÈFΑÓî"ŸˆCÿ]߯ù’R“ücø•JT뎨êdssñ'W°ÌI±Å@ff)}Ò‚kGÃl,èîZ=ò!DâGñŽ·ÄHÞššp( @2U/Âß] ÈE|n×;ä•~9ÿ#«ê£ÆûZ‡˜ öýîöõÀèn~„ÝþýUÜ äƒÝL.6ЧµRdw²WUu¼Þ ¯ök)H$½™h¿ ×ûÿÑÓ8„Šã=Ön&QìB,ý2ôO‰È?ž¢ØŽÿX¥ÑWà?>S_{—Oï„Ç,‚ýï€R œ¹Ÿ\ÄF~êPaº’M#‚Ÿ¯ÑRO¨…fø¯köüÁj° [¹WYÌ'œ w£"\Hg™‹êæy`åÉZ3?j%ú+,€+–wº¶ÜÌÉœêIÓANÄ!sá'†’W¸Ã-'׈+Oš›d,ë,3M¯ZßÑ\U—ïÁ\’¡®Þv¶«_’|8*Ýã~~ÂnZvø"?x¶L ]M°k´¦SðåégëA¯ðä ³èåÛ[¶g«H5åðFü×^ò™{¡øz诪_3ªó-7üÍÅèOëâ? õOÌÇ[óáf¦Ëhôo/…kͽÜÅŠ"ëã#þrno]À±³.p€Í`†/jMÍcðoé69ÿQÿ‘ÑÚ„ÿM63¾æÈ]o°µÇx¦Xô¿ÒŒàùÔ|Æw_%>K'ë¢ßŸhŽƒ…×)èBö’õb;æ3m1ýÛß¡ûK™†8¡ÑÂ_æÃ4º¬Ót û[üGc®1OÕË"kâ?f¢+Îe¥`7Ŭ½Ô~t€¥Á ÁÛøõ~V¹LÙŸ¬ÿºHo¶ùÉìbþàhò7ú'&¥¼vgÈýtiYÿ¨ç¸è¸a•¢3W}éâØ#£Ðé,³›Îo1ȼ“‘CÖ1[‰3Î;ø/~¡6þ©~ð5Q]úç,ò;IÉüÚ(Aýwü§ÿÕ:¥’–Nk¯c ¡ø%«þ'ÜU®ë¤2/ê¡Æ8Ýþ%^ê=査R?xŽðqkŸ#©, ~•”1¿ÑRì%©V¹ˆ5 ÔõÝàWµu—H­8Œ9ïŸõ³äï°0U‰—[˜c±‡EÅuìÉ>ØêGôOÿ]_ýW“\¾æ÷š—~WЋʜ… \OrÐGìÃSüGó¸ÛQüA|£G$øgJöâ*¾ã4G“w‡i  4œÿªNÁ€/"ÂÇ7ë%#¸æEZo™øŽ3ØË‡ I±FåÀ¯†¡ÈyÍ÷öb3`äÉ–Âï–æ¾zÿ|y?}VÝ©~ù©J)Å'ÀÓ<¦Ã@E§±ð¹¥XÆä°ë¶"x=žc«oGm[2ÜúêD½=P˜öd¨Ã|z=<[Zî\bÐ%º@G-4ÿa×NÚý†3Á#½Å—Î Ç,W ÓÃΕx|˜Ù6™[ˆ}nÔ±i†‘–>1î6û4à[ ñp#ÑW/&i¦Ç×BOH¼IýùR”> °i3ñ÷±2[êp€XyócáEº{T—[@ÌRQçèÃçBÙ–Ÿsºþ<*ZÁ¸X¾¬(§g’-„}³ñ«Œt$ô¢ÿî æ<µüáÚKKNÄ+”„]ØB2ÔÌ c[ ‰}®ÐR€"·,Àz˜/è05ƒy°÷S°„ߘǧÂÔ~ÁÃýÏŸ†'3Öy9Ÿoϧ¹«· qr:+8…®Ž7ùOò#ä[K©*iCÿݡΓr‰ú7Þ‡úäÞ¥ø\?±Õ¸k ÏU<”°cÈêQ'ž=Ür¥cîßt*<'4žÞaßÌþ0†ÑLÃî\o/óϰ±o8óùdZpÌkf tºØùýÔX¸‚ ͘ŽO0SiÃÑ>)V:xøQÜÁxÅ$"éOýKêª;õëLHÏÓaŽUŒ%2ƒ£ Þ,;þ#&þc% d3j&2w7¾ƒÉöt¬²O×uÎê L±ónSgèóE_"’ád¬Þ²*Rk^¥òVª\ÖYÕ­räwño#¨$)ãØ‚:,þã+XŠgð>–0ë‹]Î+þ¿P‹ÿÉ_Rü¯ç$Uªñ57-¹^GßEWxEÙ¢d¡þ¼–¶I‹F|ö{ý¯n*çôPDωŒŽº¯vCOÝçEæG]fší›ŸX›ÈÜ­™úcrâ(–³ ½ª.ˆtjMê[·ui Y˜q^—¥°k¡ï‰!®\ÆÂtÄÎu4‡ƒ%'ÿ…=+@ý^}Ð<â…îö×Ã|'¶~D¿~ö {¹›ÕžS—ÇoØZ[{~í²°£ÂAµÝ 0ªÎ0‹)×”ö`¨}©hùÆ»·—}•€ehL´?…ú‡Ô»eã­ÌIïØœÕv1>¬u%¢Ÿúr,鋘À¦*x¢E¨]ª£º]ï8ÄUg7pþK‚_•ÿe¤_Ý¢¦¢þÄ›'‘üLE _ »zäê>m9M"âü‡`b[‰Ö×ð~Î…­È©‡§éÈCýG>ù3@&²#{ÕrøËÇFlsqK/¥ÔÖMÂ̆!“’[ Œ‹«óÍ ¾îJyfø, ×L,×üL}J%²Ë`êMèhRW!,¼96m ÙÖl|ÒL¼HoýƒºBå‰6TØòS`Ó?AÁæ†î5ùGpíþÖvz¯‡ © =À\â`¡©õfýEäcÄß!¬³¢|QOC´'·Js|Íð¿Ê)O1w6ýUFæGƒQ)@ÿÄy°°Î;É—F™yÙG´Põƒ ´øœ®“°G.ð3ÍOt¸]N]|æ= %½Ò‡ÈºÉNò«e_»û²_ÙøjþG3â•Êæm¸«0$ “µ¦Ê¦<’(bç3¿ö þÃ<¬']w€5uá¾zÂ'-Ã4¢Þ¯—óaÜBºÒPðCÀ¯Rà?†Ïͳ²‹õn/£àA*¢äŠJ_ôAÖzào?jÿ WüB^#Ⱦ^‹ùÎõüÐï¾%/ú ÃP^ÃãO¦»Jo.À†Ä ur#»—´ÌUJ¥-¡bSý‚ÚUvà?rпÝ[KÁü(ïÈ.ôs·•Çú}¢ò’ÌmMc¸é‡´+ª'}Ëv‹Múýý¯ôßÚçÝ4Ëà?*aA©õ`~m µ6õƒUŒL䦷°ß5ôÈUNN¦%ŽxKU6êB…{hÔGc³sÛÂúàS¢sBÿ§ÿîÚH\s*}%ªä xŒÑDۣݼãÇ"2̂Չ[† Ÿ¯ù‘Ò|v5qvjp˜}à9e™ÚQ$:XL4´ûÙaÑ‹‚µnå_’FX~@cÆ2þh"§9dÞØM5¢òÕ0 ÅQ“¬ä.Ük+Æ>W7Õ¥Õ ¿¸êäêv5>H—;–>7ÞRk€zþÊÝךּ˜÷5)Ñí|Àòoò±`9•Ãõìå™_Û {eQƒ’ÞÖ{_„³ Ä|—qBï®+ÄæñrØùJìwîã#ÑuAØ Î'ÿX"¶aO×ó.¦ÇÖ¸òt5ÁÀZƒ‰¤67å]¿ÙÏ¿¦~p3ÙÑbôþúû0§ñš6RŒ"J ±’'qÏ÷$6dŽ@åIÏqfѤ1 <ÉåòbŸ÷PSw}UU¦¹†zÒŸÕ—p`ݨžY‰Å=ŽåøŠŸ-ðIs5üÇK*ÍöÓ…öüJ6¹„ÂvñÙáÿ ‚T&£{ÜÏW½NKÔÑQA[¶ŽLõÈÎ,üÚx"ó1ô«J^òþãõƒ­ä ÔÀ.èw?-3A¼Ö»…X¯ŒÈÍ}»G,Ð ½ólò›ÿh#ÑáëLë ú«±¬4D–µ6à‹†cï³ÞVêÏ›wêŸè¡tS'Oµä|uçJvb[ã£×µû·WÁªNEçäA#DüðK¨¿H¶ÕÚ”˜r*Þ?©y\,p^îÕW‹i6"CžcÐ/¾ >„ÉôO¬FFt_žþã>=¿é8uîZ똛 ï5Œû7½I Qó§ùƒMÔ“ÌÿHN:͘:¬œÑZf£ÿî]äYK—KÀ¯Þñþ¼TÌòŒlpHìXÑ+(ÿ(G÷ˆú× U‹È†²ÂEµ°zã?¾3åj S¥.1«¸ yH{+ÑÛ3qŒü£'ùqÇÿJþ¨üñí«ÔQ#bT\uè¿S¨÷™_»P«ŒþêÑúïæ¦âPíók¿+~¡áÿûšrW)ʃ¾¤ƒE½¢¿ÛOýà9ô»~úMØßós³õ(f=ô»°wc@‚N C-¥©`1ÃDcñþ%Õô`ó?mm†úUÍ"x™©UF ÷šnlcŒäøÓÄÌ—°ƒ¹ÈC6€_‰~•Y?ÆüÁXé…DòAÅ®à7b²¾jv‚—v˜Uà­5,îlq0Ä;Þ._)}ñ¸K‰\¨Z;žÚ©&ös.±´ 삱Þc+^DDØóë˜6‰x~÷ì!ú¡÷báªV+7Lü#Ø!ø Ë*§¹-*‚r¿Ì?>+ÏU2ì}I2…id3wÈÔZr[š–ÙÅØŒanÁ#ß$» ²»…\lõƒÁ¢ƒ¯¹ýÛ{ƒâä÷+nãMõá¡Þ!Zôiz,y€]V]œ7‚_½ÎckOÍàU~|µ‚ù3„ý¯¶ßç&ÿXNÔ>–ŒaqruzYl#ϼÅóÆ:¥áß`섳߃Y­UCãW'´ ¢7ŒL°¦­üþ)Øx<þ¡Ì g;Ÿ:‡¼Cwó*rZ¤”0voÂÓ|~mz² õ¤3jQÀ憂¡­%«¸V±çÙe^yÿqúóà9OAØZпdXRq~êñ3ž3‰¶2ÄŠ´4t59Iµ~ö×MEyH®’Ì2`õóà?ÞQ> ÇúLñxo¶ÂÏx±úN²©³øé{¡ð«r";,ÑMžY3®f­ñÈ<"7¢ü=E…äWê!Ê¡½½K_›ô,d-ç3GÃL¢¿ÊºÐWD¿Üw+ó— N>Z›»}TŒ1r1ãdýÛ»‚êLÁÜ"ß:NŸùadM“P:=ƒùéÊÓI€ÌÇÉÜ!‚c·ƒÌ¯O…„?º”lCöÝ¿ÐÏzÀ¼Ù}Ôâ°r:VSíÕñþü U…ƒ¨*‰CÖ8„§Ýƒ|¹Š(#â8ófê]ÝÁ™ËÈ©šg ²±Ö2§£¼{Szg½Ãc¬¦1 ]` &Q•·N[iÑ_¥’ˈmÚ¹›¸KÜÙÂy ÷Sÿ±E´'ÿʪ÷E «–Ãဇ¢‚¦yQk,ýwã:Ê::£êýB&—†þW˜?8uÑyô@-ˆoʈßS(ý8ùÿÇ¿ÕFjtçɺ«ÔV#§B û©¹Ôëj>í­ªžþ£kRJi´Úí›úì7û_}T>ÁQ•À"ÙýÂÏâ1Õ÷ô/ñ'¨?¯=WS9wv/a¿³]†Õ\-Ú‚Ãt þcŸˆ§–×.;ôݱ*ùâzŒH­8Vý¨VÑ@SoR1’s^——*±—øæuÎÁN܉Hùxº'WÚ:ˆ?ߊÿxƒå¬Aþ¡šï‰“˜xjclÀ0±7Â:ÔÚ ~KáÛãÁF&ò,I~[‘h&ü#ì]^ô$uÈF¶Àd¼ÑŠD°âYm<‘î®èo‹­¤Ì‚w+„_$ªÞˆ?ö#7)ÀýØm.%Z¨¿Ê£ã«/ÔBàWKÀª˜fSd+ÃZ¡‚½.e,„iø„7²£Ø5üí×ÛE/¨zx\WoTó½‰R“£‚/oà7jãA²¡¿ŠÊwÎè«©\MôXtq2y]<ðîKk:.‡=›•2`Ð^htW˜¦‡OžBŒ8ÿmÏ9ªiãÞU$÷ðÂ&'F™³ÍXD´°žÏeL ßÛËPKnÓzˆa .XªmDæ÷Yo}&ŽÁx”bZàz„!ÿhF7Þ¹f{l^Iªó¦à¡Öšµ¨-[ê¹äÔnˆ8ì½ÙÂi:æ.¦jf³™BøÈò-({Sæ?7ß3/öë”Ào¾„mñ¥IôÍ µ¹ë.- ×w†¬·8xX ââô¨}fÈ¿áßÑÏÖÁ<éK¿õѲYH}<’+6z5þè‘÷q½Oˆfñ°a·‰2šaÇw÷Í} ÷ éŸØ€ºÁ•ô¿ú(Ÿ‚æ0÷OÆ?_@¬Ð.ÉKÖ0×þ¤ß=ªŒVÇúuõk uAÌ4Š€ù`&Su*º—à?ž0/ëVzœ<ÿèd]§–} Ö>†ˆÇ‰nî Oä¬zSK€OyEÖí"kqÒ:áifZoAÕvý`Zï ê,Òпd;lwüœ·ŒÊ)ÎÏ çjJŠœ?ùêy]AQ€7bŽy¶“§è¨OýGS+%Ö}ªµ )›5ÀR¨¸¯ «^’Ú•XÒ•wò)Ïâ¶øˆiæ<…¾ÌÿðàMØŠ5)LWÑDzý¯^¹òÛË迌ùQI]¬¨öQ{ŸQ–±šÓà?ŽboêØx¥Øç¼âï NëÁvó#ýÛ#…‡Ýa*xå Ú`-›žžþWvý Ÿ’W+BþáÊü¨¯¿é?n)™U‰ûƒ÷~ý¿ÁÏ_¿:¨ïÖoPž!Äù »Ÿß¯¿âíÛ{zŠ·º¾8$Ò­ë©hD-zñAä7JD2ÿ˜¨J-‰xÆrÝè 3{Åb_bÛ¼b=öÞ×èŠ3O•Œùµ[Bn"ÜÿŠŠÿ¸B§–¯Øômœp[½ZÙø{þ~6‘y%fÊ$ ['ŽExÍ”Šø² ³ß œüLDú¢0:Ó!Aý¯ü‰`?¬ÆÞ5bD8?ê„ÖÏÌ7…=wƒÙޏ1ÿlª´‹š vì ø•ºÒ콡Qÿñ+üêýKŠâ7¿æÃž~  §554W¨ÿxI%• àXž¬w ¿±U—óì¥~0£ß­ûÑÈ1ÙƒlA<²…õèÖñÆŸæç†ê†ö1Ô³=­#8iàK¼±½¯aiv±—MÀ¯ÎP· þãݦÊJ7”C.üÌîê1þWùfSB=é¤ÌÊÆ5§^â8Úüän”¯Ñjªî¢nõaFê33‰Täl¼fº\Eß4>>=ó‡XÑCËF¤öAþáÿñ„Èž8;Ç,…ý›H-]ü‡ ÍŸ²SÀË|—MÐo-ƒQ¾~u’ºö1`càžQí26å£Ù—º8°óœëùâ?üÇNpbÙ|´‡¹‹)Y*=GΣôàj]é_Óñ]2±—êöþ2@æå™tcwƒá?’ŠÒ"ž3ÿh¨Þ âKÍ)žf0ñO3ÙÏÑþ£=sÞo 'öagé¨jŒŠâ¬Þ3?¹þü&Ý ˆ¡šÓìQ'éždâëPÉç"+c%ÀŸ¢vÄS6±¦2×Õñ„þ%àèsÒ]k+U…Qð§±ÌI°¢§ÀãªrÍåÄçÿ{_|1æŸ) Õðb½Èì'9ºÖL‹Ê‡ròD~wýw“h}©?O­½UÎFfçÏ<ÆDÃÊTÇϧ7¦éîÚyÕW=¥oû™þ@;÷ëïü¥øÂ[ÿ гˆ|c¹Fk*“©YðÙˆ-*Š‚áF¹a— >Wcˆ¬b±«w¨ìn’SlÄÞxèg";]Œ~÷Œ¾7쯇ùŽFýù Q–¨Ûxvº«s vðN~d_ ᨙÎJýy.ð«S!l@˜¥øF R‹º¼ñ"õì-A9ñ{DU2ˆ‘Ä®>XåBèIj¡hƒŠ7º‘>¨õçÌÄú݆ñþÈ›œÞVO…ŽA…„†/wœ½cÕùäyEmõWu°ß”Cj5#ö¾v~}NQÑ ô«-ø»XÌy>ÁŸìh=ÿ7–ÁK÷ÉWè=¹k¶þ*Þp^·íwF\žÇR½˜þ ¶÷O¸‡þpëÉcÐÛô6þcžóÍ ¾ƒ‹•ôúPª#“Ó—¾]¿ ¾VƒX 3WZ‰Ü ¨_vª ìjÀhø¤u`!+¸{ÂÕ=µv/x© ¯Žh}ݳ¸SÛá5²›gø|Op?𥲠$£¨‡È-÷Ó­ª*<ÚÒ‘1#˜`o,ô\3‹1U„D›% µJ©¨oÉ‚?ðýYDü‚'Cµ…üーìMwÖ3h²Þƒ¹åF7ðˆìÃëÉ‚_OʬÖr ªÛ‹^ +O#ââXÌÛ^&g™°Ñú<¡~p¡ô¦^¾¹¼…^*-þã þs´éË ¸¨· qË J[?ã*]'üÇ]ôW«eyyˆ Oy™þh|?óÏã[»ˆ>F¢¿²ë×3?ª =»8ï §ÒZLTQ†ü£-ÙÞU1Üøb>–Ý,Íj#ûâ/ªÑ™0Vz!ýwã‹×[Gé_2ßÿ˜ˆ!!دeüí\ï¤zL°ûv]\æ£Z¨%YZ+p¥êôa¼ÿüê üùG0¼gtå"¨ƒ¥¶ÇŸâzc‰Ì¢ŠÓtQèQA¬Ë’ÓÏ£Ò½‚Ñ\æv4€ŸéŒŸ<ÏÎÛ…ÿ}A-Vô.9RJéÆYµÕ0§E³4læ düÇ4üÊ6qN&cúJ~9RúË•hòZëdGt¡ÌÉþÓÓ7*H,póh<ÃØÄ„…Í6âàÿÅ¿ßÀx$tž„ÿ‡þ%†z’þ%´¬Ô^F¬(”ŒÌ¯ýS£û¾õ—]õ¿ØÊyÝžÕPìÌ…úAw픺\½OŸJ_}/lÈM5rjÛ«/ÔàW·ò¬}‰žj€ƒeWÓ1?ª*ÓÀQr #Ù·'(L,ñ«÷_1ý\k³µpy„ÙÈQlslÅôW÷õÈL´ÿ¢y0 ³±É"òy°þœL¢p¤-6yNôW:«ÎŠ„ÿ¸¯”Ä,¦Ï“Äza3óƒ_Q3‡Ç°ûKø’)\Cu¼ô%õç±]ûµnðøùí'¨°Îˆ~¼}͈ėÃL§Gɵ„lá„q‘8ý3oç@æŸ×UÅt¥FÕ`*ž+ ž'ý¨óƼ2Æð^%EùÔ Ôî01ì#þu9Òxq‘5Üü£¢Úÿq?¹$a/?_õJ ð¿@ršñzòu`Q•‰ÒƳážSÒ¹.Pü®þj±RŠùQëñ× áËcùŽç:¢Kîr^ŸA×Y¬½æ³ o?~d w¥­U{üã ýçïKÔŸÀng ûØKýº?¾È/{Úìn×›?ÈÕcæŸ×–+@ÈâácŽ @=³\‰H!´~ס݉ÉlÓƒ"­ä'7`©½ð ð>+å}¬`+ë(UØwÐO}âÙd3»ŽÿØŒÎÆyŠ£…Ä>×iYñö»8uE¸K•Ì{ýa™xךùSsÁ…;žÒÃd1ý´þ¢æâ {^”W/ðÃÍ# ,gõFN«a_ru…üã4±F|§ñÊ\@§‘ÖôÏ* ï1×*€žUuü-}àã³Y»ñj#9ŸÇPxÁŸ×£êí¼ƒgˆbgÏ5ÃØÈÞ9XËÔQŒ†ÿè%gÊøM¬òœ­YŽ·ý…_uÈðçïÁpƒsÿ½êfí;qÓKž@!©pöª2ÿ£.óyó2mö"þ':ýKÎo©<•7°ñnðèqð˜ÝèóÞ‡g÷IÏ&Š8ýG-øó*Ʋ£wY`öåé_’ üj#+Œü êgêX™Ñ_E³þgr£pú&ÎêkX5?ábÖçÿ¸à­ÌZ(ºÅ8ùÈN^ÊúŽV)º³Ô F­Ü•þíÙ¨KL ÿ±]æCUŠùƒ£‰Á|¨].÷T[DFíùã3ÿÿúû+ó?‚Ñ»T~ï3’«¯Ôdtk/Hÿöjó ÿQXËIýù-.ýÛ;ÏüAI†XkXžjâô/qU€ÃœDÍQär÷Ëô˜ðçËá©‚Þ—À¯20Ó­.¾¤0ªœøÈU$vBe hÆ¢‹f_0ä?¨ãÑÈcö“È?Ú‘t¿²û'n ¹‰pÿË¢ÿ®ÍßK‰ºí¾Õ牤íùêϱ9ÑPdÃÄb×ëÅýïlxËSÊQ?¸PüfGòØÖ¢:ìùTÞš«œø"ì¼)=$WáG3ëù"Xq‹Ö%å(؃3x‘ð™ð¹¨X p\l=þãvíŸÑÝ('ª¿ªcJŒþª8]T<ˆ_ aŸcâ?Ú ¿ºk $ïHÁÛzø7‹ä¾ðÓKá·UV+8%»Í„ø½æ<ò˲9ú«h bÙ™µU ,çÑJ3þ#™v4ÄŠÛµœìè0jƒ|ø·¢0YiÑK-”­è(?Ä%ú+Ó±FAoܯT•k^GŒ¿Ýü•¿^/ÄzuÁ¯ š'aä«’ì0Þ_-£óâ³ýhg—¿“ 3ðý©vÜÅ}œŽuöß¾£ã|Uf|tt>ŒÝL!š ‚[ßü 6œ‘üc2쾃ž¶Ñè 5ßÛÆòe îGTNP &ÿðE=ï+åD“Opk®ÎõüÈ?2€_=äý*(Ë¢iweÖcvë¥UO±›|!ªÃnŒq˜uEÞ„oXŠGNBæ3v¿'þ#šH)’;ýGgò—" þc‘Á¥Ðïu”¦K}s¼ÆA”©LØ­D'¨/Èw«HOjƒµÞ#ó~.ršuêŸè­.@ûׇèq±â Û*íˆÁüÁÞèáºÀªô·ú:î:Ê;®Ã÷GÅ »ÉúôOloYæ pÝF<¢·f©ÿ ~¥©e~ªø¸¥4ù_ûØðIèÕžþ»7ÕÚœ.%¿VLDýylú'ú;Ÿgd¾xðŸþ‰ÕÉÎ*îú]í»zX½ƒþjó?nÁd q~#Zs¹þ‚uÖˆ† ÖMáºÏŠGŠÐÞÂ;ÔEЕ¢Š8rÍ pºïzTcƒºóžp½mÍ~°é„7xèQôD.ø%":õçë#ÚÿþM»¥@ÇúFy5ˆú"˺ø¦WDáQü‚ây‹øè"3?ê¡ÒˆºŠ 0:ÑA‚בe—¢N¯'s2©Ûœ¶Œ NUá“wãëå"¸‹›´îdDÐïž©ù*Æ¢‡+Å®fPY‘ ”g!uDZÕÍÇx’îFÑ^õùÅU*{ÔÒ6ö…²õ»ßy ±ùþø/Ô×OD¤ÃŽÜäžÚóO5vˆzxUò5ÕŽz[THIÑ_¥Ã/®Áª•] @»6ÄEó{l׎ÛýK–áéプ=MíáøUJEòÕ°û«‰83ÂŒ¢rÞn¶³Þü¹Äy°¨Ód'ÉÍ­†þc= Â:zýšZèú‹ÔŸÿ…oÌ"uÖÎ@‹–¥±èMéÛ¾‡ž¾Ô¡_Dí”G®eKx Þû ö¾"ùcèü#µöœu9k¯ƒLž1 \JA…Å ªÝü˜4´ÕŠ)oÃ| ƒa.¢žý L@Ië>“fÉuæHøó5àxÝy6>øÂ‡|b=óIˆü£þã Ú]Û‡ä1¯‹®x7‹9‰™ÿ1ì¯ú+ë ߌÆu8Ö>îóv˜JŽc§éÍ(F°þj¯º_{EÜäųÊ*KN1³‘¿ÜE»J¡NÜt¬CÍÅ8úïÞaÞ¸]Q“Lq8>}° à 2‰ôNÿÑ›ü#g.'oë\ó±èBÿö†ŽŠä£¬Ö'\+é™XË ‡Óge"ÕîVA¹Š“ù‘Üûø²ÐÝy ÷«c™?ø1Î80›"•æw¬ÜLæýf7…þï}×ùaÐ+XªŒåpGÕkóÑÍÁFtÞËÄÜ¥šfqôïÝÿËo?± V2]…?VcýÞç¦×ILþ‘So¢d*•¢ìTJ£¿š¢y_*k¹³ÊÕ üªÞµ1®1ƒê$¼•Ÿ8‡þê%ó£~¯Ïã:ô»5y/«íö¢þü˜ø¤ÄÒ¾‰úðXYÄIx‘6áV„ÝôXt`1…Ý÷;ñà_X»nÄçXU±ý QkZü‡+óôÈt4‹­?¤þ¼oò ¢îÕ¬êîÓ”DQ}Áòß]_ ÿHKÜ|>„ »7E¹©tÆÏ¡Ö,ªÙ•PJ¬ý}ÑÛ5¤û1p ÞÿÒ /KÉ#êé¯<µ&øIÔßÚ~¿J‚›ﱨõVÛ+dOù„µï‚~·û/û'æ§‚'7¾=¯# ¾ö*¸Ê°Þþ0çÄôÆ_fò£°ç׈Œ¯-Ž@¼W¸èV8×]L w"J¥ã:Ý!÷2Èó2_ç›|=”Úú\1ǰ»yü rñíW-®:-WÚˆüãYQ&üÇ2Ûæºéwí%ÆT] “ÜÔ‹©œƒ"d§ÐØZ‹}xÙÃfWü†\a]àïf5*âVc¿àc.ñYð…è~³$Ô' Ö5 ¼Zú±ß ³îZpèâIw:¥?¦#JÛ¢w*HÏ‘ M¹à΢nZhæåyÇáí ¾Zj{µ<øÇ=œ’Ü0Õ` ÀÖný)ÿa秨Gt%gý(kÐ'&ï*®¶ZK«WÒÏ© Xe;úÝŠZ'ø8šö›ó?¼•ÃºŠ‡oº×ÜX ã¡h—Ô[XÚ úý2½ÜOgì¦b©¦¡·ZºTG\×”d`ÊeøðÛDnòÈ)Ï:«O©C±û‹Ä4’\@gøùGN±{sog÷‹X(²Š'‘êŸhRO JƒÎÇÊ-Æþ]$3ˆiÀLS ˆ%+…ÝKNV3+ø•?ù‡Fä+bœ&æ~üGmÃFéFÛ#_ð!"> z4ö·ýmõ?ýñÔ:ÀHæ·°Æm1©UqKÑÆgfë±õ§Ášr±öjâÜàW¿Šƒ”•j,*Sx‹fQ?hϪŠA¿Šã°<¼ÁE¸ú†;ÛT²¤5¢ˆ.ÃÙeµºnWßèæJ<ìnò•–ø¥dÆ'v7ɘþ‹gO/GaklÂd&¶{,ê…;¿Ö]©C¢%† œû`,Ð#ö× «üy¬}²¨ÒøNä £È?&†©L§}€ÿ¨ƒç¦c8•®Ø~/3LMD¿€þí—±)߬@r~VÌ^*ïáªSì3³¶'Ä=Ü¥å"öñÆJ'á§z=FgúÇ9|a‘sÇm+­Ã•ÅÜ sK9;ó·y†yEïb½º">^ÈŸgÙ üo‡ñ Ýïz:÷>7«¢Û®s‡úÁ d\Až¶Á"4ãMÏ“Ñä”MÍSb˜óîWJ“Hò“ F;|ùyñ7ÝU>Ò'×ÄLfÒb[øó$̤´í‹…ÝN¶5 O_Gs1£Áõçá?âÃñ~å–ÁÆÙuêô›lÉDÄtÂr8Ö æŠNýàøéAè¯tØiöèË™¼k¤¢I§ÿ¨‰ÿø†þªYíh·ª†«ÌãÈ k4—^Uåæ”w¡’p‘õ@ö¡ÚeU‹­ør9Ñ “ÖÈ?^ ÍèèôGéµdx.ùe&Ø‘TÖtÇæ…Lƒÿ(…oœH=úmæ–q4¥ÃÙ307¿ª ~µ¬úˆa¢Ë(eÖ¿7aÉy»ÿO_¼Uªý¤Ø½FÿÄ`5Öo.¬ÞR…6Ÿü£ýw{pºÖÑ¿½¬Ö’ùQqÉïoýÖrÞÊ4Ö•éQö^a¾Š~÷ˆz•þ%+õ{úuú—ü^ÿö)úP›é¢ÈH |ÿeñ])Lýy^ú'fg^_>£’ž9Äñ«íަÎå»þ¨Ù¢ ZgP–^D¸‰Œ¬âx¹Vù6YÎô»·ôÈt¤ ÐŽÓ¿¤Vo 6a lÃQ8¶xX°«Ø¼Xpˆe˜  qA"$ÞÏŸôO’ ;MÌp'•È?ªáÙÀz¿æêÓÁP—%WX†­uè¡€ë´Ú I“PBà|¿#¨ÿ¨ K`3Ó9ÈV‚»E1–ÛÑ^µýÅt½VV© ð4ØÕ¬Æ4üÇФÆ0óƒñEŒYT©½# »Á'ÎÃ-4Ú`£g‹ôzx9qµ¾ÞýŸ›Ù¶¦x¯"di߸wÁ”*꟨ï‰*Èfÿçó¤*“ñ¼-ÃåÏ=˜?8]Ì5âóµaŸ_“KÖ'K+Ǽï&øtæl·?ÖÓEi*P67r:›!éJÿö¨ÚÃPã¼6F,…½KDü¿ïðýôzV³ç‰gs_Œ,JþÑNV”«à?âð3k°˜ð/å˜i¶&ÔYLW—þ<%õö öœ?O:Æ¥zÝC>`þ`fê©_â[²‘“Œd‡.|½¨™•·(1Ñ×Ï[Ü£ÆBC˜Ä®yÛä ³A’*0Oi™•ýUtÇd©Óƒ¤œ¼K–k¿Êz ̃¬w-ÔüÚ"§öæÙ„kße\¿ó~Š»èP^t­÷™6W¤ÿî&2ÍvÜ×M¨ á?Z›EWçöÖb…¦ ª¨ÍihEuUÌ2PÜv…?Ic_e_f¸®`²Ò²¦‘ô¿oﶈ/LB¾˜Ü˜í\o“zRû„näÏ,—ÌÆ9‘JúIè¯RƒTQHþ± 6>Ž#:üù«]â/˘0>£¸Ó}°ù©ÿöµÕ‹º¥OÏù˜kîB“Ó†ú®x±úð<.¨¯®1SW·:X¯¸§iÁ²â3³=¾ÜiD7ŸrFŠOÄ`Áõç‡ÔúFÔz®œ¦Füë ™Ã¡8òÂôlÃûìEœÖñØñ˜*ÇžÔOú¡b«‰R¢"ókmÿq‚÷½6Fÿ•úÁXTús¨þ¨yEˆsæ|~‘X}¬¾Qݵøz#}_ÿX¢dƒÿh©­Õtí›ò{Þñ£âJÿ’Œd7E £“~TóRש×õôOܯû17Þoís¼~+3YäÁ2Q9JåANµ´vÝî}=¾ðiŒ*ÚÒÿ¹½á?.ê^àW©(éBì݆671ÊA"ô‹Xl¼i"snëÁì¯oß{í,ÝJƒ÷ÎÃZþMrKøMì#lS4-¹©[àÃEÈá­ùBIÆ™Ú ¢óþ•7÷‚1Ÿ üj&±²=z; £XÙÁxã›–'‚»è¡5E#Ûÿs6ÿ½´bLð‡^(†Þ‘#ÜŃ^€Õ8ÍÏd4 ‹¦êþð6Æ÷Lu¥ªt4çúr·kÌ“­AÌõÐo^äÍ™Cä“ìè qñ<ÂPôËtI§bÔpvYZí­·3<ùüÙD‚'ð ñleX-Š9“ž"9ôGغ?°£ãÉ%æ‚å6Ίk¢ÙYØ îU*ëSÅ8²™ÁÄÅIxϧc­‡È?jÍÇ5[Rõâ~µ_Ç\Ïšc‚2”ºF]]ÑB-飵ãÙO üÇx04…ÿû`SN2Ï5?õçÓA!ªÇ›¸’áØú«XUO¬t!£—puűéßž~).=:<‰ÛWr—¼À±>ÙÞÃUìªè.š™åW|Pò™ƒXç­`c.ägÓ;Þâð«iœÝ÷¨f™-@ŠÞ™óáÏ‹›.ð cèh~Fy(ý¯ZSÿq»˜…ë8ŒzxŽy„3î­O ±^3ñ”\ëøUM"‹CÆ%sš$«Q™L‚æd™ÞL7D²%ÈÓrg-AìÜð™}LMÖ0Š1Îí­¡‹Ò\òª N=ñoÄfã±¹…ò#f§ü'Јº4Ö*k 5Š^(¦ÎsÆp¯¿€Š%@‹×î_²O½¥}ä„^$ûŽ~÷!ž÷2«£[•¹àx¦õºbõ˜7ë…}aU¤Cz\ê!ÿ$NjÆûXŸi>éœùG]úð©D_¹‰ Q¹’˜šÈ¢¦ZÅé0Ÿ™Þ‰ËÑì~ âiªU2[Ç̾ÖGÐd·$«q@Øo@Kç)ܧîÑ—Ùçä-˜e}†Iq¡SýRØ“^ø¡xè¯NXÉñQ…äNk5]³l™äy¯©?‚žücóþ{_ÄQ«ÿ”q\Cõ¿Õ_¥VϨiáÏ+é%ðvÿÄýôß-HýÇ~æ¼ç¿~çÏWæ êfál£ëõuô¯~„?ß¡?Ðã‘Ìç7¢µGé—±—K©÷pã¹WSÐïV×.÷ßÒâœHiT wJjØu{©_ØÇ΢\-lg ð’èô#¸…•Þªé í@Xù]úʰ¿æ;¯É?¾ˆ¢(ñç‘,à Ç}Çß$f–Ôd¹Àû*(õª‹^³ªÖ„¥pÃߨó?Öí”1žŠÚœÍeFeXê3Øo»G× ,CѳE°âB­-;o8‡5}ú5ù[q¬È$ÚØåSìú$º «`\åŒD¢Ú/'½¤TÁP°¨+`*²Ãç¿@·ÐqÝèk²ÏÄ{–é”Ϭ7leì`Ö´ýGxøUíÿ¸³€¯"Ù¶~KuUÜÝÝÝ]ƒ;Ã`ƒë0 îÃà, w‡ÁƒCpw·ïߙˉ—ðÞ÷î…ß½2¤RÝ]½e­µ÷Ö{š,/îÓTâa§òò72ŒŒA…ô1«›±Nã¨ÄîJþ1Mol˜»¢9yÜWA[«•c~Ôjº1Ž Ï*oqÍ­øéåÑË6C9„'‹ÔÑva/ÕÆïjV1óƒþ9Ì’~Æ_¢xSjªÏî½§ÉU6Q'¼‡zŠ¢ÔŒ··Ò;÷üy¸õø‰°õ]ðOce ú#„Í?’Íÿ Ï3ø•Óÿj.:ÕpïA¨VÐp•Š‚—¸EÉ?†‚-–E;´ ¯šÌÌÝŽi¬õ¤w9ȈŽól³‚E6à¾K5 ĽþmX~užcO…Ké΄]úÕbM'QQ2/²‰üu¿Ù:ÔzyDRìö%bÚèþv[™ÊރʑÉ2>ÓˆÊ/«íèš^ ß@þÑžžb¿Q>(UI¹H pßÁMÚ }1<`+TÝ•P+|[o¥yGdêÏG“TÈ^NüíÏ?ŽY*#é8r ¶§?™Þ}ªã㋟ˆÑîõöë·ûVyžìûƒÌÁ™a ŒÄU¼ÚR|ïp2·Ñ¨ —‹®úç˜UÒƒŒ.>Yg_<\'"šD"¿Hãöu˜c÷N$ãÝZ UG\³¡ß­Fb9üG1§q0 ‘ùt P:EE¾y]Î!6 k9!Þ-UqŸBÝÓôD#°Ž/èqÓ.@§Ý|(V©‚¨ÄŠÛÝ\ûPïfpõƒ‰÷'÷rú'zØñˆ"‹C`çuˆp ˆïéVÜ7âÿâƒþ{&ú²V>D5úÏý¸ìè£2¢¶*kÖbþ`[N—§VÞÈIÿö#L›Õ¾«êüöO¹¤]ä¦3ž@w¹šþ»õ¡ú&-­0ïп=êOæõÌ@òŽÉðk@J“qÄÑÓóNVF7•Aø‹"ä9B½ßÞ—¦õÑýõæ"ߨ÷ÚD¾­eotN…E 6g7ÑÀ[ø†%"‡8ez}o‘_—æn”¹‰Gqç“uäýŒ 7}›§aó3Ø?q­n_E¥!–ù×Ç+Zq~þ‘ì(/ˆX"¸†÷ø³%¬^R^Å¿¥$~,Nö1Žûp×Èôƒkžo4äMžÀÉÀN_ES”˜ªÉú¨/—ƒWØx¨ `Þ·èrü¤4‹|w~ml}µžÿµ>#ñý+f¸5'†¿ŽÊ?¾,L?Ž>òyÇn|óR¼¨'9Ã|ªÅ‹šæ7vY–þ‰õð\¸–|d,³‰öË¿ÃCM³:˜p“Ðïö‹š€÷Kd¤R´¹µÒýæß¿eôß+–‚ú¡j,ÿ¨M†Qšˆ»5å2hZÐúu`.¶Þ“ØskŽÁÔe~­f‡GŒþb÷9r±û9øupGÁ¯Jâ?Ðÿ*ùG9ô»sÑ-§Ag´œŸ¼†œ©:=uÂfšYÑ Fæ~¤`£M¢òe­L®2R18‡ê=hr‰YoÑj vo:ÒöÆ•f~TØü#ú«“`°YÈxj¯Å½š¡:°£¾ðÀ©¨VKâ:«èKqD()ÿÎÿÍ êm`Ù¢c¨+.&œz‰cNNŽ.××ÚÄü~ª¹ú[¦ÇL§òíøÕ%j;«¤öx¸’ü‡SIM5—Eo÷Ãðf~mâŸöò"øUj¹Wô³Êãä¦Ýük ~=1øa˜þÌŸuð¬Wò!zÃIä2}`§Š³^0~uD¿`Ä‚ÁÑä*ô»éx»þ@=˜ŽW%é¿{Œ¹"é\‹™3‘úóm¨ŒKÙmPuEÂsuÆŸw>–‡¨&Ò»ýG.ð‡gø2 K¥?1PWú·çÀKV¦ëÕ:ÉL·Wã?º’ƒŒ£×ˆíº+»€_mF•ÿÿqLì¹èî>…‡©ÿð&Ú˜C”V þã´*‚z¡lÔ$U™}¥Ç\sEtÕ%Ç)F5æqæ×Â+Ù äJªNÓä;WÜYpßÁÿÜ›þ%Áç/µR!ªA~n‰°«ÙŒ)ôß-lž×krº–iéÈ?ú£¿Š†~×ï§–û¤9¨N0§ø(xW˜>ä0gÐïîÛÐ+Ý3CdMáYx€y_4ÿ±‚ü£œX ¢ëùŒçT(…±Î©­ªß¬rþzíèÌ¢Šë`ô©ÀjÞ½hD,çl²¹Clxï™"Ÿð5×~ýí_}%%õç—`uŸaá7`/?a9«`ßaWRËðœ{p˜º…$L¼üqþqS«….vžpaõÈ5¨DŠ:õ“±…ØuNâ©rÔÌÅÖ~2R‡²_mN›e´Æ&ôÂRž&»z.z bªŒÞcIyÌv=(È2’;DùU­4¢Úw•O´£zd~þ|ò§£ÊSq†û_Åro)@m–`?5¹dæ þã(÷b!YÅôWo¿Þùæ| ´*;OÕV¥ ×ôÔJ.ûSÓWÍü„õ J2˜H{!Ú–$Aók›-~½Üø b«9S3‘YM ê.û[å-Þ¢=2¼@…áíæàO&â—PEQ×ÔÁgCÿ:b,“A¹ãÝOŽrºq¯Óÿª/õÐ - Ï¡ÕèÕÕt"ñ xãuøÏÝÜ×rV—¯øóÌÆ]4Ü=@ñ§€ ùË)œ AZÝíL¡Ö3ÿã5·dA•P»/E,~žºùG~ú_…®ÜkdÀ¢N5#¡¼|a%T^0èØ¨ëÔŸ§oCŽt•~]õÔØçôd>WáJfßcêAïP'§ŒÈfª[»Íº*¬½úS-câGì©ZÖ³ö(u^=ý¯:Èžè|Ïq?}ÈPªÉýb¤û^Ðz꓉JþÄk×Ã[­áÏ »-ókËÐÍq*Ùõt6?DœßŽŸ2’õ7ÀÍô$ûÄ=Lîh¡ÅJ÷zGõËFRÈ·ÑÛ–V ˆ×k ³_£–ZOîÆœ@0«5ä ×A³^Ýÿˆ‡4†‡ èÈ)*ŠÏîë­Gþñ^¤!«[ÂÉ=#è&§Òº*€§u¦câßäGËAÖb¡à}CFW“ Åðy±ÔZ¢‰ÇD±'Äpï`ýî1ÝÇ\#Zð.9=>…´=˜…èþwAmÂ'yؾ®+®¬ôÄÊ„þê³½‡Ü##u%‰y“bð®Ðaÿ^Cr_ñîíYˆ‰QטÝ}Ÿ~n±ôczjæòõYe úÝÆPã ‘‚þ@?W]V»jZ`÷U੊¶§~p¿þÑ<.ö™wéeýäü¨vækìÞ *!΂"7ÇÑïf¤&ËÃj*ªP?X€þWáStMÑÏé‘Åsêc#€i7$oèE[4f”y¥‚¥r¿Ld¦~0<ˆdêYœ O/±€Qƒº@¬*‘<£~°&|©e½@ö‘–ªŽ5?|6g´è1æà?eùàË*Á3”'Ršzò#;Lwq~ŽõšYè+n4¦ccFa³áχ?U„#uæäåÇê/#ª>ŒÅ/ 5¿YPÔÓO~çàÜÐüõ¤dAžüü„d™Yé«3L|1´Í°Ó+øûyrÃìÑ™§5Oä1]ߨe)½¡9˜*ºhh¡¨ÐG‡’ ¿—\(¢aýiV4m:K$Òí䇆âãOõöÌoøÕZ!ú': ý  9‘ñڣɌ†R]×(=Ñ—ÏçA\ÃŽ$?ZÈïÙìp!Ýuý¥Cÿ:iÌ/ ïLœÊCvÖ D®" B}U˜iO3l?´SÎ4©ºðçÈ?ªá[†£fõ’5ÀÆ'…¹â´†IÜÓ m ß+`é·¬åò3ýÊɈP íÏYE~ƒ~…QÀ¯²bñŸ èÚHT^'Lÿ’}F"žÖ¢”Ô \%Ù_2üÇ õý¯ÁLgq½"nžCvS ü}þjMPuÊT}9Ñïv µÃl"5*3?üGkð: ´†Iå-èÕˆú§þü1–yˆò¦~0±½W?¢ûÝܪXªÐ/w°ûîÑ:ëãñÝäS«þ·(ÏüÚ¨vw;šý;¨N_»:ÛBÌŸýÛnLÿ’qTîí[ëOuŽTmñïù˜g8ŽÞ)ý‘‘ UÄvÞ²*iiÑ¿÷5<Ê&§ ¢}<¤<‘òLªTo°¶S©Q²ˆº~Øÿê°1Ï6lê,ßó@ "BªÌ®Á,”¯Ék|©?†W°ð ­ÈôKëþ!öòã;í­^Óz2ÿÌÄóoÅ• ÿqÖêZWˆª®ÖäÞø‚øŽ<ˆ™§Ènê߸î*zmówÐ>:®_ïÄ–ç纓¿½Ç7 1;à?|È Ênü}:ÙQZü°ƒ˜­û†ÿ˜­U¿Z޽‰]Ë€§‚Ÿìg#ž- ¶t?Y ¿•ßY`“g“!­Á~¬uXd>øj~Ô!ô»£ðgùè5².û&ªqV;([ªLÌÌ[ÈüÁÔ*€îèÕðréÙT™h|$ža+QIׯ柧1žˆÜyºßƒ"!ò ´–a-ã+O9E½$^® oûJ¾"ÞO¦Æ°Ç22·†|¦"(kFã@¨{¸ÅÈÌiÝ>ZWH?¢šFoNô[lÏB¿{Ööoú_U¢Šã:«å ›»~5–¼†uÅ _åðX‡ÀkÀ¬±NÑUe4½ªîQOr=W꣹Ʃùr˜zªfvµßž·†,ª¹<.þt•MZüÇ'ºÞ¥š$¹D{ú—ÖS5™õ›üyY½¢9\ wË™Ç[ÀJÆnã ¸*Oÿ«×Ô´ÛoÌ›I¥ŽS¹Å¬6ô/_Ÿ˜¿À¯ú‹–BÓ’hî~¡Wœ¤® þâ4HY6,·3ÿ<"öii1×°œ=Î2ßéaûïúÒw$jN,Ð,«£aÛˆ‚úÛs¨“j ãÙá¥k€MæIÅÃGù‘ëfªG^ø‘až‹2^ õª¹óä=8¤ûà}ÉÔg¬úl¦GGÓùÌþ²UÍí8·”0ÊÛáþ‰t‘ 3¿v®‘…<|+1P® ÿˆ2iŠÛÔ´¥ž;9Ý2â¸F²ÃêT8Þ@ •’œó*|üTºU¬€0øUN‘üêyc%üÇbë»­Z“oä§~p.“bƒÜO룔½”p8yÊ<Èúïþ&¯Š‰î‡²’ùƒÓ‰§þä)t&Ûóè›{;ŸÐnˆ¿ÀkÐC0.ýꇑьdÞÆ(:¢<"‹ÛˆGíAþA1ܽžõƒÉÆŸ‘+QÙÈ}å©Ô²ŸÀxÏÇt ’pèßGû.ú+ÕžßOÅǧw"C¡²RŠò"¡›ÿ(¡0·ÙpPgÐä4¡þ##õ³í”¬q‚þ\éä>œk ÜXTk´¶]j%ú«D9¾ðç5@£¿lp»>Ç\/ñ. €“ß'ž¨*®·ð3ÕCªz^0Gd•ë èU Wð«”.•ÑÞ+=ìØà’w/:,QAY?Dǯ/+ÿßÿùAû=~u›þW œÜðî!µîGG©Feê/ÕÎÓ<˜_ëôßCýÇåð.ôïö¡¿º# Á'%¤ºxý¯véÑÍm¿:NÿÝ—!¦¶‡gá¡æ x³…ô)9€uÎ/ŠÌ¡=/Š Ã®AÿĪ–‡¾Œf¸~VO‚Úý op7,æE²Çì2ØGzŽl)?ªo‘ ýnxòwÆ<¢™Â 'ó±šKˆ+÷ù>°œŽ€m±Žï±ŽÇ„ 55ó?Îk,ì'(NK2ö|D[×Dk±ìÝ>²Sà*£A[=,Ý,õƒ§íkô§"oHÎEÎ÷{jâÒa=âëuÇ¢Üð²®qOsãKÆ“•×U¿ËÜÑvèÅðÓxK2cy]̬ÿ8Ë»ýÿÑ­écÖs&RÍãO§žß—gVÑ Ë.8O¼¤^Éìnä)ŒOÙO,X–è-Š¢䃕ÌÄæÛ uhØáäNÝÀ-£¿úÝÚì~sƒOÎl­˜9M,ãÊFƒ”'g?3±ºð¶óeMbà£<ÌX»åX”àQ3ɼ–pWVq†¢¿z¼TЧÌŽ…‰‰¿ÙOôþÿµÊyà9a+–Q?˜ýUõ+AK~bAlÚ@þõ|YnuB˜çb€µ¦!sN…ó¦²c ìÛFY}¢d#ü‡¿ÊƒÿxMÆ‘O="7Ì šˆ7š~_”i»C­8‡úÁX{§þÇLõµ {µXÕ#ßJ<Ñu d´z#£xz?›€ÎÀo:U†ùQC­—U¤å»LÎÜÄg¹ušzQhu糟ÛàaEa}À ¼•ía2à õÄkžÂâ/Cáûóƒíý­¥¾”çÚ}x=ýb<Ýå/Â{Ä´›±Ë^Té9óÏ—£r­3¿c*óÏŸáWJõãiÅ”7ÄT÷Y¯o7bÂbÆãTyÉÐ7e õ–…íÕðïcÐïGý¬\™ÿq:÷#ê¾J#£p%{¨!¼Kmp5Çí?ªè§±M’3<Áš-ÿæíj¦òÒ ~"úÝLôXYOßöápí LTI ¯Q­qšZxŸØí˜0å/!ò5ú|úŠ·‚é…_9(2ê%þã¾;],;Ú\®‡vVWu»`PÿÄÏÄ %ì((߈›¼GM‰åêˆÍî+þÏ}ø¬µ 1IÜ_+ø“} ƒwEßÍüÚF1³¼y\oÃéÚ¥¥72Œ½tqþ“ýÛjÌGXÕÒts*f-6×qþ‡òÜŠ-æ ó Œ|ÊPç7xßþÔÔ|„/Ç³Þ «†ùƒEôÆ>þÞ…ØâõU~ˆåü³rWýKè°ˆ@uº‚¶´ýà´EYñ*ÓDq`†‡ÑÒ͹ø2D¾ÃÁHƃÝ%3ø p›Ø7 ú«Çh &¥ÊùúZhu¨’[(n‰ ›‰ÇKÀZÇ$Ò|‹‡ÊC<•6}÷5ö5g Úìe–ôŸùQÝñ•Ð|N„[L%¯ù§&Üé(,nñ«~íëm}å¶AÏ =þ#˜Økò²DùÏèT!d\þÿwù†*‰³TÑxã9–±úJø"æ·´Ú5Ñïv!ïˆÛ‘ÞiIV9þ7|TM3ùˆZ¿îØå¡`Q‹¬ €—èÕÌZþ ÿ1JËJþ1ýÕJ2«¼X®03£ð¹ó`PŠbC–[Î,ÁÄÌ©ÁrÖrGga?– âýÓ´° ã}Aó?ò£v[ƒ½/n1Šk©F´Ýýî5µ-R6¦aÔFµÅR<ôR~ gû¹¯‰Mÿsº#gD\â‰ÂÄÿþ°$ó9'^ôßÕÔVú·ß§£onPüËÔŸWÄæ ÿ€À#­ÄæãÎ$ Ó?q½‘ tn7§.ùÇ/ôd‰‹Úg–j* 0Ûjµƒgèµ@½c½¦Ê®+-˜åUEä¯U­Ûaæf¿Ê/ïãÏ;౦Yä\ú7µA[–6h~m.§@þgƒiűgq•@†üð—K¤ÎO="F¸OÍ bÚ©<ÇæÜõ&páty%/;;è}ÿ;ýw‹Ú©«ØLÄ?‰»ñvû¹ZS –‘äë\ýÕò‡ÿØí`¸ªolazN¶ ²§Vƒùµ“ìô®™6f]OÈ;’¹º3•깊B|ÔýAo²ö¨¢ŒÈîöÌ!z(œ¸v>˜«"Ò«©êÒ e ¨U20°n0æsaÒ±o£¡z£¶0»vú«•0‰÷ñåDDY …ÿ— Þ®O7Wˆ6d3}ñ.GE*²¿Ñôo$o³sÚý˜_{ ýngªÒK¸|Xó-ü¿E¼{ѸK¹àÏN¡ôå§ÿïþüjâÇYæþOëÏã?2’mT„??”øÐ¿$±1ˆþ‰èuä§6ê¯9¬rEÞan½À\ ~ÛV@þ±ÑÜkÞFõs<ÍæCôªž Œ{A9 Ó¹¯°þ^?nÕ¦û%±])3Q˜wöÛî¤Ô ‡?zÕ“÷xnV*çv/ò®&à«sDqØ Ž¾½–óÕÏÆ\ó)Þ©0[ÕúRTÎá:k´¨Qxÿc;ÒPý¸é‡; ÐÚàq}˜eƒÜl$û(JEeúiVUPýÝØþ³DêÐ_U´äýÇZc ˆÐ *1î€æ¼=ñ”åáPF7¦…õž Îs˜|Á™45Z)ú—|oÒKt}¥`.o^2ôW&ýÔrA®É´Öh˜ëWÖ.˜agVÕF°¼ 0¼[Dm3¬:Ö¹oEô.fGrŸxDañGÈ/kàI^ZY@Èþ0ÓšO¨¨èˆövÈÚþ—ÿqO4ù&~5U+þj!÷{ j¨ŒÔ L…ÝêCt> %SYÞ{?2·ÓØÚ£Ôú¥”«,§×Ìr8¹p-Ÿô°;\gôã°³ àÃ=y»Ÿ‚x/"ÿ8&©UF3êeß@'u„jšÔ¶$b΂_?2QVG!6"Ì“Ž ~e«å€ÿØ%ŸrÍ·¨—I£«rÝb1â„}§üùd~bY|É© ø97÷8šq!ÔŠKŒÌVKNÃ;ü¹7ò%n'Óq½%G¡$*êºb æÞ%ÿh©Î’“¥§âçþc¬ZUë™Ù"ÔzEJbàSd娜níB5ýî$ø˜ô£ÍF_×Ì¿„b ùÇrâúVìφZ©ÚøŽÎC úuþc-XO?Ϋ£löå™}–äoTôV“˜?¸—ºn?,v;Xú)ôÃ:A¶5µT,õÏ']qƒùó³ú #1€!—1¿6;¼EU¸¦N°ÅÉcnP+ùç—èYÿô3æt`òF|ºdŽÂÃu'÷üh–…Ýþ£¨~ȼ%Ò£çœd̓Ég5Ry˜¾À®BËkfoE„º¿ÜÓBä9d€@ý…ZúßuP$‘-A¾\¯·îkÎ퉙úÀà9ùG —?ý½èõU_”ÃKÿÄ—ÔŸÓß—Ù gÀµb«rvB”aÅâ¢ê(üjþWú·¿%WŒã> gèœ>Ò—kþ3 uÙIaËe~”ÐüyÌÊiL4.Òÿêv.øŸ†ãÓ5íQyqüGr«æ6ã.ÖçyãEó²ùÞx§vï:ËiÓL[¶ ‚¯I„ô‹å0ñ¨ÿ¸"˜ñ€þê-õmÃÉŒ×/èi…†EyD<Ø Ö 5~*0±ÃàV§Á†2€¨,¦~ð޹*[‹j®0/cá_c‰ö¦;™G}pgÔ´D‹šX–åLErøe±â‡×|FkJ]àÔ!qe ”ºÙ°ÕQÍA¸(w¢”Ú råLö+dÅúaÍý^c̾{;XM Äó¨A½šî%@e–ãóްÓ"26µ—US4ûnÿ«¨ú½¨Uë^{´€³À[ãø¡¼ó¹Ð²4„?_Gþõ/rTÌ ß´AÔü&~UŒúó¶àIX/ÿzìrN|Ä{,âZ&VÖ2…Ú†E®&Ãßx’'8½ Þˆ?@˜¿~,Kµ2ôOô"wYg’•|a6Vr¾h (x ¼øF|ä´JÇ@rÒËEäO‹ùíÿЌ„>=ô¯³Æ1†ûž†;µIVÝë^|©+}¯N¡ÑÙ§RbM› ¿ZH$žìî4ØÐ-ÔZ}`º–†yÒñ œ».þcVÿ±”Óç)ªhê ý¯ž0¯»,náY*(UÉÉ>Q“}SÁy‹ŒÓ¡VÜf¢rs7§­øUc"ýd`7[Èò¨þàøé\Ÿ‰Ç§á?ZRrŸ+YðƒŸ¸yFòs˜þ%ÕñyñNÖÐgxPú0™ãwµ~(—¨†ÈGm÷£ úÁî(orz&âÛ/àã.ÃâüIÿÝnîx\ë ¯â-è"o¡O$Wˆt¾‡ßˆ~5Š™Juíç¬rýî(ø~ô/9 ~Õ“ì-¥Iþ‹®¸cÝëÐOIІ?å¬6…ÿHBÿ«•²­ý¥Õvî][âý™LO¡g‹Ú¤„«}#o¨ÔD£È6ó¥uDR·ÿhªû™‘8s9xþË¥¢Š5WU¢ÿÕúr¥å:gÑ y¡‡ªû—hpKØ™6;ƶ•'ùÇs¾ëŠˆ.ZƒÝ§põSDgÞÍÄžûDüùKz.ަ7dºò× òº+'HV ˵„^Ññ,Ñ@,Õ·±¬*`­Ä÷ÿç>¼×„Pì^ÑéiC³ðï$!üGRæ×æGu8(ÿØ®åg~í`Ën#šþsèÜê?ÎÁJ4»fAuýÕ)ý­yQl6WÓ÷òOöyœb¾)™@þ±ø¹¢Ð¬Ø°5'ø ]E9ñ^¤b |QÚé.#¾Pøûäƒx~ýäxòXŸÑä y±aƒ¬¥¢‚8kn Çí3Í]dÃU±Òý‰¶ÿÆ\¤’áqô âÍH œ)[ôw8øó»Úp1³àZ-âèƒäZ•É?~g™g9Óý6‚b]?Z ’•…þí?zÚGŒ–’C‰´n‚¿<Cˆõ‹ÃvÌ&Ú+ë=Ôv±y§%àó%E]ý{yt]¿a¡VÊwdSóä~2×[¦S!ü«<þ£0þãjÄ!Ô^”ëÕRð« tº½‡2,?¼ò-Цë²;Ì…7^z(~9îíeb²ž!úïžÖÚé È+{bm;¡V8Ž'6è9Œù5aù‘Ò?7…Skf^­$Ò?Ç‘ÎÜéĪ7×ò‰Ly¼{sGô½è¯j‘­³r©´èR¼Q‡ µ?£ [ö +ÞrÕûé\—ñÃÑðQ>E#¿‡ÿ&w[š(¢þüæ¼åy8Uå>¼Ze—¨_-ò¬{ô¿÷…CIÎÿžQí˜]Ö{9ŽÉO›­0¹É‚©•AMùeƒ«ô¹æ\ñ't3q|Å ªév)üÇbæŸÄ+MqÝtEvU¦Æ=õ'U$û)üGÎydô6)9Ðï®ÿ²àðÏ·d±Ý'áüyB÷ß~n‰õºÛQÊ,ažê_2O+idÄ£x‘À¯~.ÿX§yÃÔÂú}õ¬Uæ:îzQ·s–ª¼Ëøÿª±ðì³MV⽬NþQ>ì5úÝ[úð“*L |DýGÓpæ3õ‹ôß‚Å{‰íkÍÓ^öÅ|0ýxþ‡±`¹Á*¼E|qÞ\Ž­¥5÷›ÏÙWDÐÌ5œH‰Š%§â ïvl·ÿØÿÈj­ù**ýzùMZOê¦qEŸ¬ŽÒ<'üGeÖízrËœÖ;•5œÌá7üÇÔv—Œ¶DMÃav®1Š¡œð| úC@°SÒ¯b)°?qlQ¸Ó¹<­ßE-ýî×Û úJj}^|cºÖL 9@’š¢Kºjõ–±ek"%oë |ò62ŠKøªÅ󛑾q&³ëcÌf }ùåzKžÀ‹yÀ̤A‰îlÛL V£À,/í€7½œÎ/EKë¢ûÍ ÞèT­0üùnò½ óY°\cˆ†Yùˆ÷ëeF“š ÿ±…mò üc%žs!>n=ú+‹óú×£…˜B†—Lå’ô@wÓ ]ܤŠÝKj ](bª@þV޹"ˆKVlý`lùZð«%b\˜+¶é¿ëL2(Ÿr™<`.wg1Óöâ0!vúHGøà9i°÷¿Â ÇÚ’Ñ™¾¾$7¹a< µ¢¯‘“ëÛJ”Œ¦%× &y²êFýá|,aj&à}`FûmôXíÕcÙUì"¶d[­ÆÌ¯íj½ DT¿€ôl¥b£%æŠ\KïÀ†xðàW³É?ÎÑy<€|d:•³¨êÿ‹há0÷cÌ ™†æ¾W˜_ë ÕUÞ ›‰%ωåÖC¹¿&©ìwT‰>#±ìkT|÷TwÐB·£k˜Œï„9 œa«¿{½}ä1¥£aØ`•Q¯EGëSH–À—DÅðF5"ó˜iï²¹,x•WL)Åt0C£ðnme Q¹ÜùGeý°éÇ-N 1Yf§ôV3™5ƃ~#ðüÔž¿g.n<ú«ªöL9Á®§¼Qv<áLlF[Ÿ'„ÿX©/3'Šn¼ýxË÷ŠÄ̜¤ÚÉäímæOÍu]p%¡ok2™®«(¬oʇŠ'ü€¼´(ÑBÛÿŠ~7²þKˆI°t.ûQG=÷c ó!þŽÉ¾F2³…¹E¯Áéš ÿQÄhlÜ!ÿ¸£…‡K^òŒhÚ0ÞÅÉèJ0t7ç¯~ÑÜ/¼Íçæº¹£nÁßõýOÓ̬Óœj«fÞ"¦^M}Eë¡MøðgY3|žs°~Ga~Àê=å}nD¡Ör$˜‘%nì%Ú$ŠYÓEløóßßû¿DÄ>Â܃u*]Äçä6ÏñLùÛiòÓ½Ô-D³~•ºq¸¤µ¦ŸÁPöðŽxÙkŸËzFþÑ—L¡»œK¦8ËÏ;ßÞêKÿݰøÕ3ú—ôä*Ó’Ïl :„Wÿ«FþÑÆc=Ô=̱½Eµ^µD–¤^<1‹@øóúptÍþ+ýcëåC(vþóÏã3ÿ<²1ÎÈh&7}ôjœÿ•ôoÏft0V±ŒøúÏͺ me*xì²Éï-¦õôÇæ.±{»ÏxuûòþÝŸÍÍËðð“D"Ñìä«ñ¥ð!‘é´ˆÒ«x8çGõÔOQÿñ”*…í0å@XzÈÉ 2YÄ]¬òNìàKÑ–Ÿ”S3gý»-ýë¿E"ÿxOŽ]ŽÆj:}ãÇ¿#2¼¿ââÄåÅÎZ ¶¿ª*ûzùkZøóÕð%QP>zÏ”àþUŶ/D%…Ø1Ü£4•X,e˜EÃØ©°+î4:‚„ ÄÚ%¸»ú+èõ$ºœêäL×­=(¦2“™c+%òéÃ.ò¯¿GÐ7èY¨¢X‡]-Ÿÿk^™{xà¶q1à÷õ4¹ÎJbc_XšqpVy¾Ù¿ä}°Y(<’Ç:ä?ªáÁ¢c­Ó_¼¡™Pí¢N­¥ì‚¯\Äÿ’3Gå*µ‹ÝonðFçà?æ_*[z“ ¤ñ]Õá3‹Á4•uÈH˜'E&±•y1evþ6ÿ6ÿ9îÐL— ^*èÓ!ôWƒÁ¯’cÓ<¹SOðE;È?.1O£ (ÉbæœfW:µÝ¥È?šÁ$S鉽ò•MÁYLJy.áϵE(‡ÑÐÒ3‘û¾ ¬)›:€–è¦:R¾ÒŽSñ˜ÖT²™Rôæ=„Æ•áLÆ4΄Zq³QŠÓµ—Ü23¼þ2ÝúüøÎ¢ ;+츮Ä.áòSOé£Û—UKqOV3¿v>ÊÛ“ð)¯ÃäpÂ%¥ùm+Ùˉä*ÃÛñª‘w,²>POloò™¡ª€ý7ègîê*T–Óñ·%üG÷\¯õÒWàÙZ¡æþµ›—¨o}ésÑ®OWó…àDûTN*6Æ0ä ò¥ÂΙ_;”;Gu¥RGtw¯w@4"Èꜭ%V UŽº9õçýl Î{ÕŒ]P ô±o£ŽO†Õõ+]µ>+§£å ö7ŽóšA4ñÜþÃäþ#'oëZ·¦VÕÌÕÐJ=bnòSö:ª¤ÆîÇ…Ié‚®!@ÒŸï¥qrÑMû&Xupý óIÌÍäÅ^¼AA.ÞSÿ`WŸ{¢hÅUöp¿Š‹2,6ýKÎS{ƒzQå¬ÿ…ü=—¬õ_™¤)†ûd]Ò ‡ð&î®)õ}zZcý¯ršGõÒ¬9›ú|ô/ÙcD ~ð{S…¾½øSø‡Xû´tßÈoRñQĸƒÝ~€ªé‚yŸúðUk|Y}˜y\i¼(ƒ…omU~â‰V—žtÕ™˜—73ŸU?œõP'iŠX¹;DMÈú ÆÏoEDZ7{°Ê&Ñþß ¦»ÂÕ¿ý³q€ªÈúXéaxŽ¹ÔŸŸ&& :v„!h.è>|x!”bKÜOêËu…ýó¶VMø*a“+—ÅÊááØsÒXŃð«Ì M¥ø9ÛAÚÞ9~°â£=™Ð@ЗÓ·ÿ‘^ (ud+°Xu3Èe«¤|GRÅÊ%r~·þü¶v\‡Ï':ý¶c¶u—)^r—Ñ|¾÷ÅÖÇ•{ñgÈ“v‚#Â#R˜aÕ±ÎUWÓ;šeñ\JŽàMÞÎNJ“d²>‚h­Á 5S0m{"7Fb»gZƒ9Kâ¹hŒ6.ì]Ó´Z0„UxW§ÛzAÔ3ØÑtо±hZ€ò¬³ê‚¶l#bŽ:´„Ÿ7ƒxq!±}[ó©vBâacqi1+±Ü*ˆžkWT’Ìaˆ*BÿÄÙ¶/ýKž¢Æ*©¦ñîAlü°ÏĦ3Ã<—‚Æ‘½x˜§Õ *+Aù|ÑÆ¦FõڈÅôCÚ@uò}Y^ÅPØa>°ûí CÝdüX\cg¨ŒLœÖó¨ r€KÕ‚?O¾HyÑ?qõçIñÂEe‰lCàmY™ÂþO¥_îðf“PëIÉQ΃76Áž¶¨p¤v®5ÌImæGM¿z­.‚—ÃÉ?Vs¥ðˇ¨ÿðÂæ“‰„¨ÿ8¡%ÿøDWòüG¹KL`½GàAºÝ¾|¼]o”¼n$7©ö<ûhPçÝcèw;s†2às‚óú # ÎEÎj^‘Ó2¶d.õƒ¥á?Lûw˜IÜ=Ýõ‚ü#.þãut(1(­5 Û­¢±øä¾ÞŠÌ‘ˆH4’•§¿Lv¿[Ó°ø…é_ÒÀŽboQí˜88®¦ŸmØãék¹k?ÆÛ›þ%wyëv‰ó(‚û_fÕ|ð«•œ÷:ÖQqQUp ÿ®£‡ƒF ¬=ÏuÒ•ÊUÐÕÊ®ªøU-¦– þœîÓX8Ä%d±ýëcýþUlR÷9ÿñ#‹ò½-9èDj£§QÆÌnÞê¿ëĦ\ôO\K¶ðá'ýÇô»·©Ì ÿQ„ùçÛT¼÷ÌÂÏY÷Q|‹Ó±¶>.£È£‡¥ôå92?*¾UÍoc+üËkú—8=×É?žsÍsxW?Áð;•÷KˆÖ÷aáfaíÓ˜ï¾,âÏjzU³1PÊ~VrEx§[Ú}®pœvôW>T?””x.“¹âÄô:'ê0Q=Ä2ÿú¸@+ŠfÞh"Ö<õ(}©†ì >SÖDßjcEòÃÌ¿hJ§sÿ怊çÏöôO|fÉmÆd1­Sÿ1làwg7Ú³ÝèWËa¥ƒÀ¤¤»T jì&ƒÔ$¥þÜå×6âÝZä\ýÜÅhäiAœ¨mÁ`!XC&‡ÇPë¨ÿøˆrÊ•S:¢SŸ¸†,X” W‹ð‡Îüó(aøóÕFZ¢‚ƒœ6r)ff<´,¬•jƒ^j(•pÉ韨»¶PÞù·¨xI…'=ÃsŸI–Q“©k=Cí0·ˆÁO¼ÀÙí çc’˰ô¨¨«žÐ§ª3•t×øÔxâ‘[ÂHlÀŽD3ÕBÞƒÜwp-ý¯Æ²³N’nr2“ôý¬'ò 5ÜŠù=ÐÇ–£{XzP¢vôX3¹òcøvhÊŸ±n ¾çEˆþíS™Þq<~qå/2Y+eLæ|œZEîÖ$kŠ½ÑŽBÿ«m*Lx ²šø\qS<ðyÑDDwçE©c¾/¡!œoí‘OÌ|Ö ÕØ•„œ£E|Ñs]@3%‚ò™ÔÉ_¶ÉŽÔî!¦»F„³Ì©Ý´¿\ð}ó£ZŸ5(ª•®(®j,½¹RË™ÆÞázæÊèŠéªBýG*×!U5pøs_Ðò‹pèUÐïÖ»¾,øŸüSo¥'qŸ„ZÙÝxn1Qפ4š‘ä0Àª8ó?JñŽôOŒb˜úùŸZ.@;TQ”<)höF㣾œú‹âˆyÒ|c¼øÉ:ÇÆæc⎉tòØÂsÏJÿ«¨¨Å®‹’V òÇ¢ùGp°·ÕqúQÝÉ;Þ kë5‰i%;‰sOsÆ@ï3üãH¸æHs±©@˜l"ÞÍ(Dî‚ÅÁf_Éù,?‚Ì ~¯õcÝOê{;<«5Âã΄oÿDì6:‹2Ô–Ã@sÓÚÒöxÏHûèwÄ"M4šÁôt犜þW¯ÅpT°ñ㈃ó³ÒlW]mWò±,¢ÌwŸ´ƒ_Åâç¯æjSb½>£ßm káðçŸy*ýeCPvbØv·EÕP®"‘)¾qݵô‘f{¼ŒÓé05¼íò2dG­drÕȬ`>ÀÚÃnt$®[AN˜þ»÷ˆ·»ßÜà»8W+~w. ™UðÀÙðcãXm2|ÃDÔS¹åSžLâ úó“ì1›\ÌîèíH:þ»‘Œ°º¶#E;ìvô¸›á`žà×X•ÈZSÃà¯V1ÿ<º‹Ú¶1  ±n|Ç"ò¥Òé40/ÌÇ7 ¸¬æ ¾\Õ59–ó±ˆü#ŽZ%÷¡ÚFÁj0’ÛøDjú«RèwO’ü%‹PÏÅbðÕjÚ#=§÷8øUFüGkyÅJ¬ŠMd.µÀ‡fã?Ó_ÊW]¡ßzõ@.4SÏÈ>&¢²ªi=1›†Z/H®à Õl@á¨á!ÿ˜‰þjöOñGYì«ê“=Fm‘£±üñE}Ðïî ›Ûç݈zîí§þc*Ù}KPÍxƒÄc/à‹»R“הм‘ô/ÙÏdŒ«DùýÐc'wØHmJwüÌ8Ï'š|)–¸×óÔ Gø”¨¤¤º+20¯ì¡ìlß@Ù´_]¦GÈk*Ùwr½ x`2FÓO,&,WžÝüe4ÑPrûbúQó<|dR¢½•ò­YÙš¢ º²Ñõ¥ EÀw¬á×èa"˜¸˜žî¾ÙùZåE4x•üc»ˆ/« ~Ùà~ôWsЕ¯µFqg£XWU;×#»4•õÄõÉ’|\OQï^FÓ•HÅwm «b4úÕD¬H¼{ ð•¨?ÿ¹ »/?ý÷§Ò‡Ð_]¥{ŠPç"ü«§Ôwé‰öF *·.è®~„(·‘GÚ÷Pñoÿzµâãk€A'ç÷ s‹‘š αÄ~qÓô7]敟œs5Ä|†eŸ@ž±‰è»Îãê˜ÿQ,+?ìBa«•™,\WÞŸ9Y.*H¯¢©K„úÜꌎÄäï ÖD¸äꜫV`ì…AÚVûâB}õýU]"_gæÞrp+g¾ì'¬ìE|Þ†ÜLLŽ kþã‰V|cv2.Vä–ZÁÄÜÎdC°°«<øu ,ß*¸‚»Fª\óz£5úÚ‘ ?WXCG‘«Xu!¨Ìmìûª þà 9‘º•ìÂCßêú‚ÿÎ/9Q×Î'OÈóÞ© oÌm«Ú˜âLnjF´¸Ø>WïOFOGbß ËN;k6ÓG™Á"GŸ*BÖò7~­4ž$üö(k²ÙÆŒ¬fÀVA=6¾9Ï)ò²ötaÞÓ—OžZ%zØí°2ÁÁÔCÁóš|åWò–ÜÄûUà/\’Î2Û½­Tr¨å`k‹ð_ó¬ftãÆ—…þõçú'NÂ%Ám‚ÀZKPÀ픈çOCûÓçð9øUcjìšòS×1„ÈSÖ¦~gj˜çRœü#\}aôY{©A™Ç=Z ‹¼Žþ‰{ˆÎ7ªR)Î̦nÈ:`4—ùûHð°†V¬0õþF~Néyë•—+ª$ïY‰Qï.VéÈ5ÍO|×{;ªkèXb/Á¯£ß}‚Bv6èT]ëN˜ùçÅEB²¬‹äßNÿvg~íbøL8ibïÿ0©'ù‹¿cþÇb¬rP³£ð=Geõ‡<(úºï üÇtEX¯*'b)œU>úØö³m»š¤ÙðçGè+u ܪ=Ù<:ïìËîb¨Áô/Au"º×Û­Ÿ¦~ðrÀ¿éßžDü7k´Êá*ÀýïJÿĵô\÷$ÿˆÍÜÚöpê:Ã…{1¹|ÃS"œë"'í.îS¸G_Lý¹ÓßßÑ_÷X-²ëWüÇM5樒½Äu‘üã=3€¯TiPW¶MNvTâºt¼Ù¥©?ÿ^ßR÷ø?øðYk¿zªü?í~;:õƒ©ÌDæFXyMÛ å3ŠÓQqñ™þ¤Ç~j÷4_ó%O†¾`X'Ìch¸˜ FÇïCô;¿˜&Ìöï—_bÞÂ*OÂ_삽-#6ŠZnÃé_]T&ÿÈAÇ‹ð!w¿ë'˜?Q>â4t 2¿ ÿ1‹g˜RœÀ–ƺ&Ãö,™˜”<ƒàû»³©§ƒ§Ôä2 Íd›°ùáAÀÔÄ‘ùÇ.¢ÌVOáùÃk–zEP¦i""Xk/”VéXëàÞÆò#YSôÁ™@ã—ÂÕ½þ¡ÿ8d4 ›á ¢ñ‡p(­¿@êZXià¥ûà?îÀ+¬×?®ÔéòÞ/Z^ÿžÒ.5 ºÒXè9p湉µã?P3r;xÉ™ô'äüÇeîÁ>ž”3EÊW$ü&3UýU'®'¾œÈ›¼?Vþ>_I‡ža¼ÙœùQ‹ð9eO2”Åä†I¹3oDóoÖl¦~p drС¶°Ù/y—+qݱ!à˜ãƒb#;ð¥HÎß’xqí[ñ!ƒÐÿ¸Hÿ«±œ®Œ¨›öÕ³÷uÔ£pèGxÌÞÁ¯.ËVXçEÔÄ%Ë9 Ò@þQÉê'F…yÒÉ7ôTî@õÌ~y•Ö r‡(—\hÌVÑ[ðÝi§ÛÏåMúDTsÉê2#é(¾f¤,Ä[%Œÿ8hd!§ »é‡õƒcŒF¼É½È;ðö½Ç&&Õª>žúª— F~ÜÑ5d$ÏAršâ™û.þB›¦§…ÿØJ-F6kHïeµzàtÝøîœÖHüÇ[âús|e÷õùÇêϳ³þ#—žÛl ûQ¿ûQìr¢{ìdR2’¨ d[ͨ¦†mA”;„kŸ„r=‚?g–ûÍ ¾ƒ£´f±ϸï)~5Œº/üÇTòbLYûíÔ?ì&¾ÍòïæÃ>ýèø¼TЧëF1ˆ\4ßs ¥óCjàò· ÔÏÂÚ¯FÏšS=“5Uå Œë.š¶[d+õ­Ùbx˜'m‘+§á‰UÄ]”™Ô\øÅT&¥Bo.ÖîhPýyDu{ý™ì° ×`©kä3Þ²83®¢Ññ'ä}„V,Ö'<ÿ&bìûèw—Ð}ö™Îv¡Ñõ‘Î}>T·Wƒ¯¹ÀóãÙn‘«x•4¶^|UîB·È n‚´Í:þ 푺* Sÿ±øºJO>ã ÿ‘ž‹—Fžr‰øþ&YTj<ú¸··d:ùø$rÚß¹/ëAM_Ëèb£ÂlÏ`¾Ueò¤ØûYvG*'ç£ïòGËÕ ÿ‘ZÍ"÷Š.mkŒ{=oÝÓˆÆ9¸Jl&’½LN±þ<©ñ»Ì£5ÿÄʤƒ}*Ìw¬Ã{üB^CS/Ð¥Ýfióµs#`i»‚_-$SŒ rUÕF÷›|ÿ¼ñ£Ä²³5 Xññ#ÁwÙ…?ÏEÚBþqïqt= oî8pÆ<ï­Öhó½þ1x© O§Œ¾b<¾ñþ==qÁ û‘SåFÁÕWy¨ýؘ*¾zZÔ@-D‹” é!ZßûØç6Ö ¯&—5>‹øÔ«–Š¿„ÙXÈ Ù7‡úóÅtÛ8…žs5ûYŠùµ3ñX¥énr•|føUm+·!·xÒÈÆÙ=ÃéÍCÃêd’IÁ¯þVý©×O¿ª¤ø®µðçuè0ÿ Z)²…O D3Á?þ»Î„Ÿà_ðç%à?¨Eh,—[7ØÕ”¿~ t÷è³^ˆzº7Xëó²?ó£–Ât÷†¯8M×ÃS2•ªJE÷b+´öúD"ƒnœ×¶ø-_PÎ\(jgb«R•=Žüã ùÃExš6AüÇH:·¼éö¥Zq"l•¢þc¦{½9úYÃFÍ‘¸¢–j„Í­KÖÓ€ùîuƒú—´Æ¤ÎÛÑ_í#KªBWÅí*Yã8*^FH+’ðÉÝùGm} ó£’ÀdL¶|¤âmíÈüÚ²(¥Ê£Ú=¡ö£¸êÊôó‘ô[»²’Ú 0W8­À¡‹T²‘5Ö} wéKÍåb4¡¼âŽ*éz€R`ó¼V¡Une£~0 •liŽþ*2Š®rôßa¥WÎŒ†.Ÿ¬þ_É?âè}Bt,yÂüÁŸÓź’–ޏ<5hU)ú—ÜÒï®Ô*â?ÆÁžžh?§.; ÿáTe—ç­oHµëEzÀïÖcbq.šÍ×Ìü‘å Þ™ó©½yŸ¨~!±Â}ÞäZb‡ÐèHýG7ú·[üœ†fæPoDèïþ[wæè ᛽/ù'ëõ !“•D fàþÃEÆ´Š‰e»Â¥¿ŠBÿ’çâwë=\‚·c㫃_Ýgýžà‘eJpû( 3CÂQ~_«d)ø ^¦¼ôá´V°^ 2[Ž -ˆU<ƒ½¸„­‹åσþ*Ë®y§Ñ &sÕ-Ë›Ìj|ÿÈ‹:›˜ç˜'1ç%âô@âÙL®¤oŽÍ}í€^Œ9¨8™‹$3ú 7€}vð«Æèx·Ì\ò'¶Ÿ "¸R$1£|c—åõ6fGØŽDÔ çZÎ3ü•kzl¥’Dçf]3“™ÊŠr×>ƒø?#øÕCòî77ø©.Ñ šÁ¯œùÝd2«¾<§gñz?UÀŠíýÞ ÞÆN„»Üj+9ÈNb… ¦ë+þü’ÑKŒÊ?ö2­£<1{wte J¿©ÒX©MÌ?Ï Þ€j¿‰Ü#¢»È]= ›ÝŽþ»Ã\q>bLèJá_üˆµ—­A¹Im’óUsóÚ›Ñ_½–™ÕKxø<üÌgìv5þ¯ÑMBã\¨™9­g-“Leõ–M'Âjó£FÃ+¤u½ÃòVçàÓPEèô”ôÁ͆‡ãþö µ^y‘˜Ÿy‰¬±ÞÐÛ:+}áã»âÝj©kè¤Jaû?ã?èß™ùƒcQKµå^‚îESÕåù|Å1­·> ¬§;þ£¸Ù&°˜ÔH¥þ¼‚êDæP‹ÉLÉá?æÂOÏâïsíë zQ'V©rJÌüÁ^î‡{R?i$£»EPUD£1úóžäè*ÿˆyåI]SQÇuéxõ¨®ªö@Ñ)ðéƒáIúÊÔÝþÃùç‚X*Yí!vW”ùƒÉ]ùéÛÞÿqŽÜrƒÝÆgxØful'[k[j ˆÅ=¼ÍAÜw½> ýUÝ w´"ÓÍö¨¬®w(•W(of-ε{Û+]Çð)]¿ØI¹‹û™5™LÕcþÇRÞu§›D]NdÝÿŠþ*ºÞBÏè> wþóÏÓÃÄ2†EÍLf€î¨3–jE £µ±Ïx¦ß׾Ǫºs¨/µ“ð祰~IQëìfþà+ý†þÒ¼Âü¨Ód#wu˽ëPßø¿ 2//¬¤NÐ u)±]èzVãœhÊÄŠš â…­¼fø±Žì#‰0ˆ$4Ù«pÖê ûË&ÃL&n.€þª)=‹á?–g7!¿¬È§ž‹’ D^Ø£µd5GÙá+âŠ;ÔŸG&ÆO‡ÿø_uõ¹Î?ŸohE‰`¼ø÷6ý!6ó½È?`dÙ[}P¢£XÈìü,j&ë­‘îwqüÇ}ìï0|Ûp¢¹ð͉ʧb£ÒðFzòNîæäè_È, |·þ< * àÅ&£ÕÍ„¶ê¹8)šå_°zÂÌ”µÆaÇ âü<’'«n´&²ú`‘ì›øUK}‚Ù,%2þ£¾m^ÄáU>’³ `&`óµi}¨õ›€ÿ›ƒ/Nʼ‘§âOkî7üÇZêgo+ÈJ;0÷‡ÎýÂËÄý‚eL 'œW¿ñÂ:¥’Žg›´…µ;š¦9Ì}¼`L}©.Í»p$ý!? èÓæ‰WÂÞobþ`ìr UV-ÀâfÆ>{£\:Š.¡’ÕRŒ³^Ij]cC¥g§Èb–qBvƒÖDT›™Ôt'hþùfÝ“…”RcˆG‹cû޲ßþðy™ÿ±5ÔŠÇŒ4œÝcT[f'j/Tÿ±œŽ¹½¨ˆgÏ¡ÿÕ+û-êV?ò‘_áiʃÚ-&Ÿ‹"Ú™yÈìj½Ò"JÁ0òm`Œ<áÏýÿ sRY=Äe¶ï0™i¾ÚC=b$¦= 3«Ömù”T5¤ç>Ì'´Nú╆°Èõ¾•O™SþY•WÃñoU‰ÁsÐ?qŽÝ‡ücëŸ&'›÷ ›‹çã+æ¸×óA™+8EΘGÕ&’¨„ îtQ…møóê?öدè}xþWè¿{F™ø¿à{:9¤¦ªpû ú ó³ˆÌ›0Ÿús›H¢™ªGoª àW‰°îìóvcj¡Á¯^“kF…»ÑÔ ëñ›SÅȬî>…õ•poˆGè‰Z2•×µ×®~š™)ƒíàY‡À¯l|T&úªÒ¬XüjŠ–ãøÃ6dÌYÿ+ók#è½CtB¿¤•Ð3…:î‡ðÃY`GÓ“Œ¼fñáW^Z9ªþz1?Êøéþí§´K¦‰]ÈŒ5n‚58f\Õçé×Ì£â‘y“þ%ϲÏ|OóøøNâ:,U:±SdÔã§E-«1üÇKQýîlé?·`(}ê# ]î§R¼{» Ï÷q¾%¶ÃlÀ^'$ÃYlj;jzÿð®iZ^Ó‡þ%UÁ­¢dZ ~¿{ÿ„Hî5IáÏsÒw#þcp8æœÑÚY¯Ä"ú·»dKyØJÃÕ~¿Âw@9{Ÿ8»Fæ ×Ìl?xÚ㌺(Š'b)/à?^ŠdWÈ—ÇaGœJ’ax¼“¨Îr ,é [•N”ø.ÓuM[¥gÁ Ï'.OÉ»|þ¼‘ØqPn¿êEþ¡áó.‘Å9úÝUø¸EhR˜ßŠ*ê%ÌaÜýLr >{7ÿ²2;KŽþà»jŠ*±ÌAU†sµã±óÉð×A,׺ßÜàÇ3‡ùƒcÅ+þ¡œ²Óï°xy9púâØöK‰/6ƒ_QµA÷¾³j-:Ÿ-ô ?…ÿ0é_’œ|æ {õÈK^Ã8jÅMøÞdD(ÿ2´Z·­´ðËT[æ}L`r^JéZM­&t!y@ôžÿö „mªÜH }9 ^J¤d%?üyC©m`k³ÐïvV‹éŸu ’øUL×pêAz3}u)WÚFÂ…ØNTeå^ÑÕý0N¡ßÎûÐQ>¶*8•7¢¥YIÔ±©ìºÌH »°ýî=xš?ØótøTÛB_ä\F&ÿ˜ì^ÏG¿l8ݨrFr+Û½ŒÎ÷혟^—IµG‰äñD'ÀëÞSÙùÒ™¨®«DäÄÈÆ‘;c~T4·ÿ¨«Ÿ¥þ<ïÖ2kL(R?XÕï|f•çaÆÉ8&ÖV²c¡îÒÐ_ÅÆ›$¦ßYtµ›Ópz¥1— úQ?¸Š¸Æ»Q‘îŠwUgøóBð·èŸØß.`{2?ª”ë<«G_[v•‰zÑ(r1Õ Ûx•k®*Ö}Yð?øgb½cˆùƒç™ù-¬ <JBýGªÍ‹ÃŸŸÕ+qZ½´òF^¾â…µ¿«í Ï"îsB{`JâÔ,T}U²ÎšGŒ¨Æ`ú—ܤªâõƒWBTÍ»¿éß|øÍ|ųYˆ%}†]¨ ŽÐ¿$—qCÔ³‘|ÆÔ5„åü³|?ý´žLù„ö…¤¼ýSàä2‹³ôX:‚ÍHh‚ë.!®š‹ÿÍŽ¾ü§tæfÓ™Êý‘hf3¸Mty†æ=ñW«çŸÉÅüÚ—"þca(ðe…ÕÓed:Õ(TSlãþ•DÁVŸÜæoª×^³¿Ò(Qk€ í`§ŸŒ\?Xq¦Ñ—ŒhˆÕ´ß“ÊH§V¯0vpô/1 ä,ü¾"<Ýd'úÝähÃýUA•¼g-÷° øUCú_½UMñ”Ý죰 ŸÉ?b¢¿j¬.¨w޲§×þ#¥h%2»ýGFý–¥m6üÑV¹Dä·&+üÇj¦~¤ c‰õ½˜DØ“þ‰U4ж8ÔFQ;È•ßá½ÎЧèþ{»Oá}üG"º~D{{Ä1UˆÞc<Ê®§%ýw/ ¿Êâ*O†™T± ùV;‰\‰¶ÒáÏÿÄw7ÇÝWüŸû ÿQÌ}²Îƒ_ýœ.6x§Iè_’ÂXîaî ¯VÐ?±¦ÑÝØMýÇÍ'øŸ†ãÓqíQyaîö[lþ.SšeÕúó­Xgêâ1+þÜü¨Îæìå øêÜÊÁŸŸ×ÞêgÉkжTw7´j˜Áuøÿnƒ-ÁéÞ›IxW,ÙKÜꇂ4ŸõÒÜHŒy¬96j‘ÈÎþ‰1ÁãbbQ€ëì"ÿøH<_ôé¶© úJ&ÄÁ¸EÇ⎋ÜOê{;\¯1³ˆ9ï•a9%æJôúÃA¬jƒ8“ÊyÌÂòW…j.øƒwÝÁƒ†‘-Ü„ÿý,¦ÁØÑ=—øq¨ÎCVÙg9MmÄ Ø¿ÊTfÖ/|gs—´­ú¯DÐG°g©°÷ŸÅuQ›œ…nràÂ…À¯j‘mígµóô¾ÚIþ1ˆìf¦(cjߨe!½¼Ù° XR!´ZKà?ªÑkò ˜ݾÌ*¦‹ÊŠáØÇn\ý|žz6:ï>ƒÿ€ûúê×\-ƒ9H¬‡?߈OM­€3?ª'lÑdð«ü}ŸUœht 1s|"S_®|-YÝ&r›efdãU˜·‹Ål¬A TUpÐDÒ}ð±pµTµQù0ÿ<½º)ëÃÌ¿JFþñ[þ¾72Ã*íRïEFΗ“DQR­#¾Ø×Qï3E]e _1ûœýšó’JSc± •Àráí¦£;ì†ÿÍl62ó¼.Y.*w¢0{Kÿ]¦¨ÉìhüytæÖ"_¸J?øÆô/©ß “3†õnñüž™mB=“ü" õEا †û­çÒíQku’üãʤ¢öV¡!Ô¶¢óájôýáTs7ýèõ'õƒ½Ýwp¥ÖV_7˜SÑdÿ¬fEAÖ>¡«Î€M9ŠŠë*¼|Pž~XëMÔTv&Ó³á?r?¾¹×Û£o1¢â?œ ¥2ª1ÏZ)ÐÅÌ,ßB—yº¸¶Û×ùÿGpþ·Èsšã‘SƒÇõñé‰oM'šåö…ôs¦ ⃷h!;¿>ÈÕúÁvzüÆØó>ðKÐ÷£Ï|r: O‡ˆ5ŸÅìÏQEvrŸÂ3ú6sõÛñ*%ÐÊô±»&Ði·/ºÀD¢Ÿâs&¢g¡2E*—Ë“^ôÜ·#9ÅÜó¬øÃî+þÏ}H¤wЃyãÛZõlúÏí"s]cysͯžƒüÃÏø¤¿Ò¾•~û§ìÐVšèÙ‘ ›Ïò4Ï·õíúó¤Øo~‚?fÄ u~¿½JðW+™×Ézã‘6ß'eþ`,=JPÿ’4(mo ºP„Ïü©O&þøŒõ¸ vߣìUý`®ç==dYô»ýƒúüâ¸é¼ï~2È?t+'ÊߌUº›Pœô"kuàý¾MÄ„Jí¨ì~À¯yV]Ó,a‚$Ô&Ì+ð€«žFlS7hÖu'J‚ŽÄäy­;?Ì?–5àazre§Àûu¬eZ|zA2ûÞ`$o@˜6Áì³’ãï:ã¹22Wþâw®õ¶6W¯„E]L%gzÔ¯¯¨»!ÿ#ÿhož˜úÁæòyÑa~Ïrz®ô Ï/o¾ùÆŠè_âôvüÄ|ɶõ»»ª«ûàîîîîîNpw‡Á&¸» 0¸»CÐ àî>¸ÜýûwîãD7á~ïÍùÍp€¤RÝ]½e­µ÷NJ=I6üÇ Ô­ux;ßàséƒ/¢ ÝZM·ñòª-; —„Ú,g&À6÷›°ì|-«è%×r‹àu©(œëÁ¡gå÷%‰½ßqõYèß±û‘nósàFæáßœ™'ÃÄëæn6& :-Stœ%–° Ñoe>ׄ7÷eö+=ýKòZ¹A *Q%š‰Zìöàc=T=žtpü*‰q_&§~°hÓa¬Út,õÔFŽ~×›~Œsé*u“¾±WPtECƒ”+zo·˜œ®Ï/¦q ÈÙYcäAaöù[T8ˆŠê„½íl«©Ê¿Ð•^´Ïì®Sð)娗ÿš{yuÁh|§‡ù·èd½,2–ƒÀqj=T= ÔZk‚ÕšL(ýþÿ ŽõŒÞ*Vtúïv…—nƒ6m«¾WÕèßÞßý06ƒ‚Ì"èDÆPŸ{¿Žg•^ÝaªÓ ØQ´n±ÂÃKÏÄ>w°Ú-˜ÎôÝo6* Y žßS9ݽÞdú—Ä!½Gîè¯Ð³ósûп¤ üÄÖ‹íšcŸâÿŸ¨NüD•Å|T·©y&Ca÷k©½f YO¦tû4únâØ¤¼[CÌíxªÒf{X‰è¯ÊS!þ’>ÁÛ¨x‰ŠWû»ŸÒÞOîÑÅÔ!¢B§÷à üGàúÁ Ì?_'=‰—é’>ô¿ºI½È¤rT%F¿{Œ$3“IÒ[Q]¨iÿHþ‘DÍQ>Gÿâ–ÿü*šî©Ô û‘Är.Ü!Ôá±ïºÑÚÈ.2ŠÃzVY£U52S¾’i_µ³¡®ø ÎQÿqÅ{2ЗHDx[Œ#(ž‰“ò¹¸Eýù‡@U¿ïgŸ ‰=X¾ÄpkÌDðae=ø•SÞMF"èÆþ%˜bqPì%W8ûQ÷¸­š@™TÞ%Ƨ×,mKú—&S Ëü¨{Æ*¤ã96nVõ+×à=¼.Ô|úû=&-x‡62è;Òµ×¢ÒmÑKjð(9à1ó?¦ºeÝV Áo ¢¾É'Ïd1¡Íìío”€‡ùïÞK ÷'9Q‘(}ºÐ ¬· Tk3,D6,Pgî°. ü´ÉmŽ‘Üe9¶4/;ú@Ø«•æGüÜ\ò[ù’mçg­á+êbÁGÈL!ê¯rëeD[²?M £vd=±eeþMJþ–”ücH~兟˪zà…¦»Ç ¶»L¤ðGþc––ÔßDïnMþñïÕ>336¤â-øLDà ‰è‘,ãþõÁ_¬&"Á;tí4FÊ>ÜûèØ´…ìá\Ù°ÃÝèY³bïW15¿uK¢}5üu¦KÑ?q¯u½Xë.ÙG6úÛnƒc耺ªýK‚öOÌ/ã²Ò2šF(+˜w@Õ~‡ÿX†:×IJ‰©ÿ¸[}C Am¼OÙ…ÿvÀÇ{’OµWçd÷öÖi5tG[Ü’üï§ŽR%ôNùÑË\'*olM¤ºÛ—~-;í©ðuѯ´wPIÒ‡¬æYH¥ÔU9˽Þf}§ñÅ, .¼Ü,`µG3Y Üð7û õ«©ôhg W{{ýwŸ Œ‹î*Ëœ«ÛVB"“ŽàuÝÐ <µee·ÿ(¨û‰ëØŒ¸`°ãTx˜Êæ0í‘`MQìUðü¾øŽ„v3øÙL0Šwüù.3qï“Ì êRq ‰/³M¼g @uÙY]ûÐüŽ£+'ÙKbæ¼v%qÅu²-üÛ.zÇày‡§ é›Ü‹9 *öjr•ûŠÿ¹áôö&1ù¡ß ‹üããë7é_2ÿQ‰ü£§uƒVÝ(c,5ŽÂ0~±û]m¿x(ÓÂŒ*Мâˆqœ~ägñADÏõ\AÞ‡÷ôOò.%¤bQ' ¤¢þCW©'Ì,«Á64»ŠÌaZ±š¾†þ›N×ò7Ø·VœóÎÄ©àØŽÑÆÚG!¿_#ËÉ" OÐÝþ¢Ë;Y¼ŠøÈéŸxŽÿ øÿ_Äß1°Ñ‘Èx?óo¥ªÊ¯ó¯Ï÷µŒôT[K­Àsð–ÍxŠbðÔÍáÄÊ ÐÅ#¢>ˆz¶ö/Šy6Ô)*ƒŠØ÷qØšXh ›ŸÌ=óH¬ì's5§Þ +?«cɬúϘ.©¯Òß‚“¯ÅþÀ;¼”¡Ÿ®‰Ÿtæ~¯h޲¿|kíE†TÊߤ1ÿ(ÅüóŽÜ¥ä9Á$æ‚H— Çx„¦w´YXT?Ÿ€½Ë§š²Ê<2¨XÔažåÌ Á¬€ÿ+W˜‰àuj ¼ù›XЃ{V5Q]v·„L#lïjð§3ÒBù‘ØåßÉËпÝ/Ø£¸kŒ•=ð‰Ñ_M…O¹ŒÎ—ndØþNäWÈ?èÔGt_ üj,622öyªc›Ñ ÓOINv _efü`Vê/f±-à:ןkÖvõÑòJ«ó‹>aEãZ6@ UýÕ:þíÿÑÅŒk\ ²â# ºßÔ™r±˜üãµ)è÷:ÍjÞÔ¸>"Õj±]KX½.üÇm2¨$ìo/ÿyòüÊšÇEPæ,—|Ç©8ÈÛPþc¯ùX ÇþÕKký\ùƒ±]c¬ð)Ñm/ú\±™ÓâMŽ\žèï3ÓD"¸ “}Åd#ÏO,Ú¶„úŽª*¹WZïwxÊ(Ntr EißB³|AJgñÿÑôâ0@é#së5©É*FÝxcPñ|f‹Pµ¬ÿZ±¯~X¿-6‚Ñ_åyW„çmJ4šË,'ß`eO`COÈßèŸX ÿ–Œ2¶`š!õ&Õ¤Àƒ>ã™J`¯aÖÿˆª2±<” Ͳ‡ûI½º€ß=תSÙ4–þ,¨ÄnvãôO¬‚gÅ[#Ð^SÏ𽱸)Ì[F÷°FàO“ŒšÔ÷µÇV:Ý!oÉÁ¬˜›3»š$l>þc3õçÅÁ.“7EF¿{.ð>_׿ë P4­F —ŸÕÞÉ«x6˜šNt¼+ÃüÚVØfG¹{„u‘ƒŒ5ÇÓ‹6§nE+鿉ææ;¢µ qNçÉüxhøß(z»ˆ ô/YÄ>KS 2”½yòw§Ðï6ôælný¯FJo32v3ô§`•ø®Ž°ÁÕÁ¯¾áÏ’ ß]ŒEN‡çG,;»Øæªùǧ€¥ü?Yd3³`à“ÂW8Jçíä*k°þ‡˜/[¾›ì[Ìÿ¸¨Ê¦¯ÆòÅeÕÕ`%Û¹¯5Ð,ï¿›™þ‰Y‰'ÒcqÇ‚‰"órº¿%Ãð¢ÛßêÔ®Ø×ÉÊÑ·?õ$Åaî}`ã=U8¦¤ÁøóÝð£ðû6QöNÊMÓé¿»ÔêŽÿ‚^*Žëª¤)0™#ø,.×~7U_I:Ò9âþi.y3çx+Jªj°3TŠÀl7°0é/ 9õ.cõ]Ö ºÎçJªÌ3ð=Ó™ÿQ“úÁ€y›µ¾ú<3þÃd?…Z€Âé¥zÃ,¥ðÍèwØ’ITI`À'Ù#¬¾ÔWŒAtƒXa U ½¸—Ÿ8©ãÜ›;‡þ꺰¿8óé¬ÂdÑ©YG¿Ýüd›™‹›Ä5Ͼa‡w}¡ï®b·+¨Úˆ~ÕÇÑ[óÎD—Eõ/© ~}WJ°ÒIæ<ð«jÔ¶pµ¢ßUúÔg Úe·'ßjŒšceE ¼Ò²VëÜ#Ö9Hÿ«tÓþ¾Á-ÔL•cˆ€F’Íž–1ìf®[ä,½ðè5Á Ú]O¨ ïêGÿv§*'©]‘…*ÞË„°bT!¹îû‚ÿà¯ÉõîüÇøó”AÎEØ·O¿¥'05DqLwº«mÔjYÆIê?k¿Ö]ø–vE0—‘úðXÓëâ õƒ‡¨»x+? Žzï¡naÙãpñ,gHêyÐ9œÅM}}jÑë¡ßÍk¶£~÷7ü‡-O’_;5a5ȺªÉø¦\¨º'cõr‚G¶¤R±!üÇü0lÍE=½ÄÒèØ„ A‘‰w ÂY¿‚Iï†ÍФ²Ññù«Lm¶ÿUýqùZC3e°Öòp IAŠ‘ÍdoÅÈìÏ›%X¿¹Ä 8ì{¡Vñ@¥±³ìf]†Ç‚zU„žŽR|a%xÓ<@qxþQdéeýg”¾ZOÉ.v ff?`#ªqåwÍæèv«ÔWŸýõ\g`‚Nóßt¢~/ž¶ áLÑ{ŠÖT Ä=LG³ïU…ë=O•ï*NëŠW ûAå{aç'ØEAù\6§Ý÷m¹V–þ»[Ìø¨¯Zªd\Ù´už¼™Ó¹áχÀ]¢úz=?Á™82¯ê‚¯ŠÀ|‚ k¾3z€HTÃ[®ÅF¦ç¾÷å;ªPÞÊÊEÍÁtz¼Ærxiøéª-øCU¸ùnx¨eÊölK°õŠßd |PaƒÕðSÈ ×3áü3Î «w„ùµûÀHîÂKk8ìy^ô\Wàûçt2“炬¸×(BLvn6„î) —Ûß’•ùƒºk¡õÚþÇcv— ßöög©ÚÀ©¿.ªY¯üy!üÇeT­”ö~úÓfÖ ú9¾Ç¾g³[OA\ÔoD´§“Ë8ókO²{_ú_5VÌvßÀ#Ú }!½¢º¡ ï‚ï]È)yÇüÞô³-Ëü1ô 9À\Ó̯íGýàt¢ý{hšp#X3Á£¨Çú—ìfþ „? >\ËjÄûQCº¶…‘¹Ç ™_{ÊNéºk¥?Ha¦J±–k ˜í•¨l~™Ý8ý¯L*/2sª¨à#í¬F®jÜ5:侦ÿ½7;‹‡n÷¥õ'½ªÎÛ)¬c(§&Ò¿ä#‘æ.™Tµ ù~ÁÞúZ±ÿ±‚ü² Áhv¼wvò·…`kÓ¹Ún®óè¯3Y7YÜ^ÔayÁ+‚_E!bML•LnUõ¿2ÿ<²Þ;Ð$Ø×Zùÿ¸ÿUJú'f4&3?*=ÝÕù»˜ÿÑÜX`x£¿úª]ú~»Âôë#í8ó?*“›Åø nq`@â“)DÁŠ îbýòà ñ†v!èÅ%„nrªŒ¥—6,lD?9W&âï…ØåõǵÛë'áaÞa3ßÒn:äÿ“yîyä XÚ«ØÐ§rõç5¥O˜êÏc‹‹Â r"YÌfé虜ž…ÏÙiЦ¨*;Œ¼…÷ë%»ygÜ›¦%ÓK‘Ÿ¯¦:6qàð«bÌ#¬LæN×t¬ôIrÝwx€õT„d7ï1BYñ‘1”E)õj›ññ”åðÓArRÃo.!._Í^K“ÕLâÚÓ¡ßÝÒÆø3§þƒ9¿è¥Šãe€_ݰEàÏã2]€Öå ^ãïÄv®þ8+of’c,q7„«ê£D[²µjQÆ^ôp¸Ö<•j€yEô1ài‡b÷à;¦aC“£¼·xúkÝonÀ²^ZAæŸûPÙ²È8®z6Q›ÿ*€aTåJ£Â@o:Ì%5? ϶Dj5~p ø¦? XÊÿÓð+ºõë]ç; cYû‘]ÆnÕbþà5k!,hlô»Ma„,_sˆØþ:6Ѓ9Ó‚=—’ÌÊ4ýýÙ¾âÑeÓ›ùºÅ &ØÞ5ÔS/·£[OU1øù!xÀòÊB“t Ï™ž*˜ÿ8iäÄ«#ÿȧ_—3‘UØbϰϳìtÌ?ÿF/òsÔƒ4¶^5eƒÉ gÇ¿î%þ8!œÛÿxSgWGÐÒ5äþí1?«•x£úÖô¿_A‡èÜ®³”þWígd\óÉ‹áM/óobú_í—žîÅhôUÄemÕ#8»Ê ŸOÜ O®ì†(šÆÑ7÷°•™þ%üùáLÚ¸LW°ßñ–Q­ÜËhê„æ^o‡~ ýUQÿüÕ¬üæMY f£›ýžÈ~l~"ûå àÏÏ1­¤Œ}Ž®¼Éà¤Gñ<~oM(“ËnÿQüC’‡ç¿ôR~²€ÙÛJîÊ ^ÕÖüõƒ{è_’ ý‹5Ò*Ž:, >N·|‰Ÿ˜Îü¨ÈøôvîSx˜þW³èV°‡3’Ÿm_­BhòX“PEÌ£Š¤¢=Âu ü*†«>ýÛM× ËäIçµÎÓñxWR½eVÅåÏxG÷ø?ø‚ü#€ñx©UÖC«HþÙ&’ã?ÞéyEYñ·¿ÿX®•1ª“‘ì3,ãå/ÖîÕN£ß­EŠ/ûY|1Ó:"ˆ¹¤®Bð~mNÉ$a)êDeÔ© ÌíW-+ù‡hxØæâf- CûÙ5:ÞÑ©“¤[Ãßœ†¶X%EÇ„Ehùr£¤›N,ÝŠ2ž¨¹Ü&þ<:óx¿ Ør©y ëÈ?nsÕŸYý¸QrÞŸl(þYO—A{F„´Ë'ZòóÄÙÉx?š™ˆÃƒÿï#öò¤Jo?VЙ_;|¬€ù%Týî}ãwPÛqà4Ù=T°Õ%¨!Š’Ÿ±r[VŒÎë°—dÙŸÖÜÓNèõÍJÜ­rDa£MÃÜ/›r¿n˜mÀš˜óáÏ¿ñ]D{Ô|Æ›±“ Âõ2ª^ç\yn½õQÈ æÂ’]åû*€¬ÅÁîDÁº% ŽbmÅdQ½Á¯ƒ7E†›Ôñ%!ÕŸoÔʈžrxÓd,†Ó¿d(W3+üyAll&å Ky†ö *„äjéc?·­ðg]±¦šöØè%GÃÇä!ƾŠo¸O.¹•ÜÏ=S¦uxa£¢XÏ`§kS1Ý„Ìé5š.N{Tøóà•>Å ÁkÆ_JÇs"Ï«¦3ÿ#׸Özí/GÔÓúDÿ‘o¨ÎŠR1µÓA2†609qè8ø¼7Š‚Î7#pm—ñÍ$ÖjlóðªÑÔ奠[†A¥óyú'¶³ž ÉÍÆZßPLÍ¢ž®ýÛ«Y¯²ŒÁÜÄ#5Æ3l7Ÿ©ÕtojIÿ’²Dô+Àuž3Çvõƒ¿1p!HSìý=XïW0ìu™_ÛȽ½MZð«Ï&ÿ”Sm'ÿgEUÓíšXäyÌ;¿G½Ë)ø6ÖoÖz‚}\EOò²HøXx{Ã\â^ï þÈHÂ38 *šÃjˆ½í rÖÿQTí9x˜r #{‹èzIýÇ:¯Ÿ¦£q|ð¾nˆB£AŠ$üÇ&œ7+ñâ uWv3‡Rîf÷w;5Êbx{³Ï‡3Ív$sf7Ò×Ò‹ÌÁÇÜçLÎülQàú%ÔŸä Ì=,#Ó¿ä©‹Ê”ý|_kTÁ#]»\.WL&ëÆdŠã.+¾×ÒÈ?æ¡­áÉ‘d¥þüg}KÝ7âÿàCl½q I°W´rЬ_ûq‘˜«ôNïƒþ*¯¸®—çtyS?ØÀ˜Hý‡Å|„Ÿ±ª!ÿ?m ]¡*ñ'ʾ/˜_{K† ÉÄtˆ`mB^!èŸñе¬ÇNuX*¹‰þ»yдt£_òxêLêQ?˜=Èôû~׆.N±dlñkìKp¦j<§"ªDô‡ˆì‹»E3ÏR?XOö(]]ð«Vø_Ýëäa‡@²–ã÷ÆË(ÂáÉ¥ëõ@Pº‚j%oо¯V.PÅ( ;'¬„µëO]¸ð¹æ<ðm0 æ^wä°AoøàW…Áºâ³Js¼fA¬RIlgPŒâø‚µØ¨˜üýl»ü»þgýB,åÿé–á)ÿÀŸ–ÇBÞ†_¸Hî°EÜ!:^Õ¤Þo‘oë6øUiØå¯EV1…þ»ëÀ6:þÐÿ*ú]ç9–¡ƒüS*ÕñôkÛàM<¹ÚAÌJ€GoLß«ûp?%˜RÈŽ‚ÅHÆ3ÌÂ;—ùƒ‡¿/øþªŠ»é‡ÿHä\„}+.ìjbØŽr¢†xæ_?8MKkTàO. ×OQÂmõçÕ°ÅqQµÑ·ÄH`Ö_Šò™¸Îl‡O¿ÈÓt‰Uspâü•f%yŸü#·ñœ“¹–ü#"QiÓ0ót’Ȇ]ª5§$^Ç3TrÑù jœî„kdiy&Lõƒ1à?b€X…'~ßÊì4²¡—`BgAd²Â\æaFdx·%aèß~Bë‚â`.yZDÞãó`´uÁ{+M‹|Ãþj ÏZrè›Z¶yÙ³?¿ñ€ó­ÁÄ„‘ÏI: Æ÷-~.öÞ™_{ ö¯‚Yùµ7B~¤ÚSm)ùGuµø5;0­;ÝdNFWyÍ¡ø©6¢[¾„78Jt<>hý¯n‡°br½ŽhJ~–S-ÆKîçz<¸oÉðçá©0¹,ÒR?¸ëŸ_õ#bX€oODgAÍçM÷›°ìH-—&ç‚ú-B[K½ g©"+5È`z2£uI‡šs„&¶Û±…ìc'YÅ*ñE׃½5/ÑaJ‹Ï95¿ ƒ´ŽÚº“XŰös‰qÓRíG=ÕµÉhJ ·Nµ±é¸"…øÆSrPOö°tYÍ"ÿXEþßÚ®fÒ'é4ñø9ª«üø”)äK9•‹õwÖÔ!:JMÿ¸€«Õ´=FNîÊ)®7 šªŽ E©-/<ÈLÅÒOª€ë93@Ö‚_Õ¥þã¦*ÇpÔ±^XÞ3ø±{Áú'—‰ðäNÞX«;Ã|«6?÷cwYA„–Ðÿê6‘óNò‘aèwçÐeþc Í1º@¶PÏñ“ýû·;õƒÉLsªõ éŸ8Á~K-cOúƒ4²¯£‹½ÎÖ–yª=ŒþW(»¸7ÑQdäÍŒhÎq_îD}‡EU"Ú™d¶°ªOÕÄ/t¡þ<¿½6¿=žcª}„zIeûXi\芅â™ ¡³7QX´óÉÜþ£†~T|’‰É@™«ÕK4%™XΣ>þã$6ÿ"Q¼Ú70¨ô•y£¶¡˜Z@¶÷ŒŠ„Cò §> É6ú—Ì‘}ðnx3É÷V°C‡ÿXd­F#ÐÒ^ຄÿ0]¥l>ì$üyüRr"£(äÀÑðÙ™T–i§î›ò¿ô!®Þ!PÿÄgZþÿ¸{$¦“&¥~0—H$èNv»üª¢1•ž&Âx ý ùB®“ÜF«_̤…y ýU\&|d~Ôcêµm–Ð"ç ëö¿òp¬:±mW³¸\ˆ~7š–jÄëÀ¯jš5EØ2š^úA=ªL~õ†Ìh€ùüc,p<¹Žõ"n$°’]2‹Ü ÂÒ³å±E¤•‹²ÿñk\„ìãoâò6`&±ð7d2â–r|ô ÿõ»OšS/¸uº?yÐÌËü,ë‚Ô§ËÚ´¶…°Éƃ‡Ü3b‡VÓ´#F<ÙX|ø},t$ö>·q"ÈŠ;Œœ® Ü¿tT“4£b">ó?æ½·$žŸngt½`~­—µ~î ÁÁ*á3÷©gÔ§ÌVDZ¯‚éwÓËèd(—ðü ¸ç+Í»àWX-¬uôï}IF úï¾´Z§”'Ý#á)G£S8ÁµœÁæ7¤þ< ßÈ ­‹Þ›çؘ¬¨ ™ß¢¾è¯ÆÁÔ&ßXMýÇUô«gÈk£çZŽâé¹Ñx¼e\«'üG8uD.rŸ™q诤ªÂ¹_jV·Ú¨vÁWwÄxØÞøÞƶíší_ÿñÙÚeIWMT½7¬Øä×C@,*_êÅòÉ4nÿá¡_f6j2P‚ æl¾¶þ|2–>)ÌŒ7½à‡ÚÑ@³Þ[ƒÑ‰­²ó031®µŒá)ïÏEùŒ(3€??§ÏdÎðt2ø¿$ói]ïÉ?fS?8¥õƒ×]©ÈKÓ?ñüy9*ËÚÈ‚-òd¼Ù¹U¹Ï}Åÿ܇˜ô/ °›~ðçÝÜm á?R0«¶ Oëu9­;µRFIê/ôO¿8ÿü)úݧ(œŠâÂæ6úïjÆAý­ØGWÂ3â½ñäç$ޝÉâg£$?ƒÅ*%WÈäz6ô»u¨ên 2PÆ,-¦\Ddd©o"Žn‡ï¬†¤ˆ7sª²‰¯b*•o˜æGEåzbÁ¼!CpfÚi Ç5x³×w¦þ#³*Œ~7&箯ìÄ„ô|^hð3Ñïš`Ö[aÊRR…“îI–û7v9ïAø¬øÖíš·¿™6qŽƒÌ-…‰÷$ʪh"v5Ùø2,ü¼fØš HÙeõŸÎŒÉ„˜2øž¹øŠô0QY6„#¸l¶Çä#ÿh o½ž+ß Þvlh9ùÇú·G‡œ+¯¢ƒÌhXÞåd3{ÙG!~~ Ó`_CÀ”jŠÏ(S‡¨#ש֫ÿQ•, ’w©ãä ½É?æ[/½¡ˆQš¡SØ€¥¼ŒÿºJ§”ôjßˤØ;T´—ÁL¦ U× ¢ö’ôb¼ C=®¶Ž™À¸dÅÝF6NÄ5ùø´|ä¤.ìÕØk(•ˆáÏã¡¿º _SɺÅîÒ¢f{€÷¢èf>̓¬—D7+ʾKf _ ÍKjÚÕ¾øzð3™ þdh‰uH¶âÀL‚[hèígÎU-uPvr?”ãÚdêRøókä Yéß^ ÿqß Tþcýw’œ±Ú]­¡ø»Æö Öúì(¦5ÅÖ+ð«€ùµ;ôËF4Utm‚YÄê†Wo‰kŠ,G»Æé!¹Ã)ÛåzÂd¯ØøÉ(j'ôÆ¿õæ}Œ"˯Jпý™ŒÍ©f.RIˆLZÕ]e𒃨üØjí¤~°‡ˆX¨OÉv—€÷4ÖNð+?ÖK2¶j‚†çûcþùAÎåf¢Ñè¯LÔ ñ9£áÉFÑ«›½ŠúÁŒt0Éc'³ º¶2ø‹úhj„8" §"!õƒ{¾/øþ[o±º§Ô ë×¶A¿ÇüóFNQ\œÕ«pº¶Ó¿$éŒOú;íà/-÷J; ÆX ›ð^æÆ4¢’˜Ôm\GÅ3ãñ/òçã…á.¤âüHYô»iõbhZÚ™ÕéÍüQR{Fþcþ@ x‚¥jCdwÑ©†R?˜N^Æ ìAA‘Ä©?_¦þ»©Ä1*]šs¶ñÝ^DãÈQr¬>Èf^üGtîEOÙ+È;Ò §{Ò¯}1ˆú^"óâÄùuXw4±ë[ÞïbðˆyA†æñwŸœ¡¬xÁhA&Ó›7ï¾I½\<žI0žÑàϰö[±÷á “ÑT4ãËRúÏâ ëÚ>½0ùÏ"êòÒ‘­?”'‰ºªÙtB·[Ôœ„ÕP»œZˆGØ Ç°’g–L<áRKëmD'rÄàSqˆÝÖg †wÿ±XÔ¦þc=LrÕÛ=gä{ìÀ³ùq¹Z1ú'úš©©졊ái'ÒYe02¸~&bZzƒzxÁhx¨ùø%¨¯ö²òêŸ[òƒ1HNÃV¤Æ:o¿ºÌ³\6é jÂüKðw¨ÿx[]ƒçNÿörXû^Dã‹”ƒm, ö\òÓ?1þ#U™l¾ÛJ% ÿÕµ Ñ1æn·ãPïWµÔDŠ*æ+XØüXRûõög©ÿH~õÞÀœ]ÔRÓa¾}A‚¯]n“ .¶‡û^Ò'Q?Ø%Ÿ£ |&ßZÞ¨usâÍ׃%:UíKÉ?RR“^/ 0}°ÃÌM¾D>å̧©(}Ç?öÉ™_0·õžæˆ ùµM$¥bBªÍ³3?ê–ÞˆÓå«Õ5 ‚_yS~C;ôKË}Ö‰'2|Rxª=b§ñM¿ ~uZ>¡ûº)þOÓS| nž V¹‹¨°*øUb½ ñ„̸‰,/£Ñ7 •ˆäøÙv;è–aKA®þŽü ;¼€'úÖŒfyí Ÿ€Èu/爕?[$Пgfž» Ï#P ­ÆÆ¼'¦-m>%?Gv“ä$/Šhäa½dÃPwøE뿨½2<Ù‘1s:2+ü{ œLyìýE37üuZàùp6OBõÈhB×ôåßñ•aVv—üz‘ácÐø Ç+ÝÅ'Õ4cËJúÏx¼;ÚU½^ì$«åäÝ{+¯Êš0?/À"¨j¼‹-`hæã¹ÇСÜ‘å2¶xè~}ÿXÿáô—Œo”Á< òWžü# nð÷-¢ªˆN÷¥X5§ûãŸæ(ÏÓtªiŒ¶áû¿n¥þ|<þ#±½_Qu‹ïhÍs‚ÿ4¿J…_ËA÷ܵØ< ³ºíÍzìÑÖ/Ìúï^3úÈ¡hßœïÙÉ÷_Eµ…'rŒþ¶…¬ëÖ& Å@-U™éâÀ¯Äƾ³ƒ8Ío›&g{Ò…Ð fá<”# °é¿K‡°÷4Vdk'üùYkþc)üÇ#ð&Ãêª á4Ô²¾xÐø˜ÁôW‡üë?΢Ó(FNÑ5H\ò…Yèw=˜>ÊÎì²ÀÛwçxÐ÷èO^2¯»TSŽÁžÖdþ`í ;ôáñÔá®è&Šÿ8CÿÝ™ÔvŸƒ¿†r*»-ÑÛž´|Ô|ë«5Î¥ ùÂIн£Ìÿ¨­öš?è­Ôg˜_Ìßñjm¹×÷äºsݲ¦øûaÌN©gŸ%ÿ8KþÑ…Ìk!×+do£ñ‘éÝhäv úÍúCÃ$#;NŒ‘Øúœ  †+Ô” º€B*–k2ìQL×szGreF| ýU 2©ÓþùVx™YsãWUôÃB‡MKÁzh½ñì.®ÄTÙ·¤êü*µ'@²Ú™>ÅzÁ¤?5ÅÎþ”!5³Ò¨Ræ÷)ܧ¯[äÞ¥1œÑ¢f{kšíLÊZ î5œ\ÆËuŒþW1\ÝÈJ<èßþ]Bú'Ž¡ÿî#òêbœÏÅÖ[Ò_=ùÿÐïFdþ¹Ëð4J0yúª.M[¥•†ÿð4Vt¿_ä?¶jKÅ%™“œÝ©ÙGýà]ýOúÜ‘çÅ5ê?žþbžTQ\‡Kþ“üc+v&#‘oVý ýۛЛ93jÞ à!ŽS9át<ì~¼bl憃ÿ(@þ±;>™+^ בÂÚMþq…Z½¬ôß}†š©3mGc˳£ÓÚÛ?@•à>ª`ù‡/üy{¸× s‡PZÜ2¿¨%LýþCa>Óò/tßc]ê)Ä×­ÁÚÏ‚ÿð¦îé’hääÑ-©n‚¹VUm”yV-Âúµ„Ig]gUNzAi®Ãô¿šÀüEôªêKþqo¼1J@ó?|´ÆúlücOvU†ç»L6/ª“èb#ÙE­.èu;Û׬hÌow öþó}þÜ‹ •ÞÔçÄS±Ì€þ»‹õ#诅à|ú裂Ši¿Ê Ë­»²£bØÏüÚL0ÜEÅWôÁN”ŸWŒ'ÒçL3ÑeIYÄí?êP/‰x.'Ï„T¶7wX¹¨ÍXŒr+)5$Û™d8ÒŽ¾k¡Oð=›®\øöÓ(áòŽì“ŽÂ2 ‹çNú—,—cðFý¹³3åú_­eBí<&¨üŽ–º ó?nƒ&FE¿ë²²¸èñhgÂë¹x¿cÐg5ÙU*â,Øaü?ümt”R‰Ü'ážV2òk?66uu±éÖ^Nä>z Ö\¯54²K˜ÿqOÿ[»þKËÝÔvã+ŠË¿’ù™–yÐol¢îû´| îˆh ¿6ÿ¼¬¸ˆ¯ËZ‹yvå*™] ~U ÿ[FÄÎ6 Ü÷áßmµ‰~I7ðwxWbcΙCÔb‘’ò,6b;ª¢+²™N9_„E‘ýѸ.Â!ÆUb’70'›˜ü¸N3ªA_xQ †üã‚Ö˜~%K™7•Äá~-Ÿ)9•‹°Ÿ¥x¯Îa¿€«tѪ`ú…Úñ»^MÅÛ¼†øŠ¦(.ß]•¨|Qóg,¨7û½a¦÷°K›1¨?ßõ“Ûgè›u«õõ+Âw¾”~0ûµ@ì:a“«šËÁ ¢‚Ì\!÷˜G´¾¥Ã8øóÊ"8:äü€¼z'Qn?¶´ÙÑF¼GiîÕK|Àys»@±Í´ /Uþ£‡žƒÎ/e+¸©78[K ~µÚù|Gr2µñ C°× èbQÏ» ¯ùë}™=FBÿ4¼a2þsÿ¿êZ°³sÅè+ç*SP1¸•èj8ðí®Ô£5Ã?JþqýÕmºñ¶³«†øŠä6È棿š.7[/Ÿ­MK3VÜ›LeƒuôFÏmíº Ò‘×Þ‹ú¤zé÷Æžä#"ßšýTiîc\2öÀW}ÐÈDTp‹–Ø’'µè^k3z«Áج„®ûTeO±>°^?ô»¥ðG+ÁÍæ$ƒ.‚æÂYÐûeRÎ̳ø†íæ!µ“l¦'|Gðœ)DúŽ~wW¼ˆê… CíÈ6OÃx/QѬÊ诺·7Kë¤OnÎShï²̓dÆb{üG}:J­¦;á 8äÓÔ C;°“~]'”¸£½=A¯\ä,cÝëÍÖ1À$ŸsV³Z¹@׫+ÖEªó1?êýßc»FSýÅu‘ºóì®zv †,x}OðÆNjüGM™Åí?jÑ¿]½*Áó®ºËýæl«–« w­š]ÿq%Ã$øó~èż¬÷–/ì~E»ˆõ7õyPôÓ¼›¿ꢳ^_ >”ó>ôû’Ìm7põÀCLµ¦£ÔÆTî®Ó®Ûô”i€Š«´ë õÅúª²Ú™‰bg¦¦ž7‡ê&O¸¯øŸûBïÈc\§û:¿6º¤èÌÿ(MýÇj¦ª;ýwkùñ(+a+žþbÿ’;Úañæ#õ˜éÍýâ†‘ÅØ­'ËÛôoÿ ž7ÈûÚ«-öaK‡Ê¢ "ÙÍÒò¨Œ gAY ÝTvæ2+‹°uné¬ïÀX Úx›ÀŠVèÊáϯ§#uT]sPü­ ÿMœðþc+þãj`-}k&^ÒY‚¹‰šËΡ^ók­%uÝËatL˜cæ!ÁI|“]ñk#°±X5g¸(¹ÂT¶ç¡òç÷Œîpøð7È 4¬jZâüò`£Ð|µ€ûéŽ^fp4)2þãgu° Ñ_ç{×Öef5z™Éæ D/;à'-Í5ä4‘Ꭹ¯"YD„<†ZºXâE7»ÞKÔ刦Fód޽ű׉¸ä æ!1Kdez‘œÊ r‰e\qfó<˃‰†?.7_«ÁüÚŬ6GÕD³ðüª¬’tíh zô£hýV**4¬ý ò?‰?'3¶¤½ôë`KÞ0†q×™§… _'÷Ãcû¢ð£ÿn-0—í '©±ËÍ©ô?OH}ÛtP¾Xßðsƒ=é:äÑðéñkÉhæ£Û8@¯ö<0Üó¬-ôÉHG5Äcª°1Ó¶?+•ÔðœUì¾§+b0ýî#-¬Èê?…Ymî zn°¶aïþ»‰éöj¸Xé—û›õ'5˜Ó%¢†áäRuMoÑ,È+È(diWðHa6¶™ñkð×èÇu‡õŠRñ—ýµ)á?6á¥;à?¼¹»Sð¨⾃›Ð_M5ý]ÕÃoÍ•ÍÌGê sÊ]ôOœÞ+]È>J_øaÌ÷)z‚zÍé v_µÑŒ©>É€úÁúA#"õø‰JJZ•8%“añ}éLXÜmúúfp­°5£DHêênW´ÞZIPfôCýÐS[(!=Üþ£õçŸd|Öé‰î¹ìd΀?oÇ4ÝtÔŠM.³)»z£$í,.iµ†ù>€åhüIYyÐ÷âûŸ×}ÅVéLûלּÃüÕvrò·5Va°°röüÇCÛÃÕ,—먕ï’ÀŽJNÕ¼Kì›ß]Fnû¾à?økøóqL«÷÷o¤_Ô ´ºUDg±’®Œš¶˜ùQžôT|¤üEþã„æ#4âð¤ AŨ{È ‘Cè¯ÞRÕýV¼¡£Vhÿ‚ÞÄÆâvx,€n†ï,v.7óÏ››EBúhd1«Š°e4]u_ý½xŠ÷¸‰Â³yÂì…¢¨Š”œ§ã¨eÏËztŠ/$·ˆ€¦ » ü»8â²Ppµ–šIþ±˜¸ëvç=èÕY”QˆérÃèf$*V;yg¯òýó~­üÇdicGƒÙçgg‘á&‘4ƒe¸ |–¹?‘snó¥‘;”¯-±1øî‹(œ>È!dí•ÍŒtÃù7^`/<ÿ)´IW±õ™É?rüt~mb}«Þÿ± ýnFb·WøíÆøœ{x`M5¥®7vÚþü(º«SØüx½îÌ Â.óÐ?±úùfvm·oÑóëýK>áúŸ§àÄ·ròuYY¦wûvØ{ž|a¡†±ÏÊ–k¦]Fž™µÔ»ÌcH3û 5”í¤® pütÃ<¹} ¥*n6rŸÂú&1QŽ…ÃÀ›±AF²ÇýåÄÓΕ\Šï­IÿÄ×vyz4RÝã:ÄìÞ,ô;K­6R+|‰‡AùJÊî+þç>$ þ#Ÿûd=¿ú5^:`§qÐ_ņë(&ŠˆºƒŽ†?¯DF²láÕ/ί½Œÿx%3“|aîÚbq‹øÉW§~Q|AÅHèÞuÀ~þ©-øUz"Ïb %©ÿQÕx šQLö‚U-b&³ÿ8ÁüÁ»0…O°0-ðG͉²Ð¹|+vj'ÊYÙÆéÚÆù–x%,PœXôÍ 6·°žUÁ®®ÂK;U!×É! ;ý& Êö¡^³Ð™À'ÈHXÔb`AiáÎMìÇhs oö}°¡TÄ@ ±{Þøæã¡òÛŒŠøÉDâÇÈXœü#ùG&¬ˆÓ£ï*Qø&¢ØëØì£DÇ1MMfÐïÿä1DÅäå+}X!/WûAÞDV‰=9Ž<É?ZP›·›;ºŸû°¯èm3—‰CÌ?è#D üÇö‹Ø~!¬Q)žñ{3¿šgz‰¶"ª5{—UµcÙfSâ´ÃøŠ”/Ý >F®û€^Wòïp|ú³:w=쿦¿9üù|xU‰…œÍ=†_-‚rï™þ%`)ÿO¦˜/rÒèt½J¡îq}ûÈ?þbþyNÔRsìôo?C·©œÖjr¤Œ¨Eg‚aÍ…¡'˜ìIaÖYRð´Âxîd4K`vS?˜ÌBFEÅb¬²7SøÞ¢ßMIGJl²S-?«^|3Ù{à-5rðTÃ8=åóq&"áL±&£ëètßp=†_XM.S‘ ÷°â±Po#jÍóË îDˆÿxÈôä(׉êªêª§ù‘ú>–‡u„úÁWöøó7Ö>æú}RCéd5ËÜ]‚3[kœ2¬Jj¥å^lúÝ…ø^ܵv<¿ 2…Óz ~%ìdCÎüÁcØÐ} D­©n€å¾…ï@7L~ך§MM 4ÿãúÝ(ÜÛ§œúüVÞ¦d™Mì¿í<önºqõ°_‘/œ¥‹û;Ø›IP³a‚rªpìr/þc3ýV[ÈxnÿQƒùµÈ?ÒrBçÒ·–éÉÄòºàLeí¸öM|ÅVûOûém{uï©ýXLåÆjbº“ø“қܯ”Û€OY+=Éã»r‚ýd»6Õ›Eè4émÕ%‹éh÷§¢éÊîª3ó–žÁ©Ña);%§à«<ÅY›ó™EþZ…ûvÿ}ˆ ”ÜÓŠª&üµ…-ýŒž’þ‰uE ñ—ÿÝíZk£e'½×ßÿ¢~÷:ýw?É|ظp`C›¨|¬O¤ÉØ C¦§{hÌoÐÝçǰš#ñH‰ŸË1°(Ý‚Á¦6µém[Ål#Ry#‚~Àï3?ê„ØE¶ŽúóŠè([ƒfd¿:Jþ¹•Sµënã^aêŸUœßdaÎÖ”W+°¦Ç±;×Á5÷Ò¿$'##Š¿Ë2 ¯B¡îð²–›ªŠeòƒ|N•ízô€UÀÓÊc톡Ýq© úçÈ¡×ãéèËhhï®0ð§ÞF9®p (Óiøÿk”ýåL¬ê]þlþã ±ù³õL(%º³»äãa³=øÙéŒkAVô5²“ÍìEëœ ^G¦É º?õUm­^tB‰äºN|>׺C¾Ôovÿ:õK¨{‚0R³#~²^Y <ó2¬`3²ÈæµÜf GW‹7þ»~Ö9¦ÍžTé¿» ¯'O{Þy:šÛÊêœì~¾ôß]ÌÛ5„|¦&ØÚ0™‹þWïвƦn®§5 ýÕ«(üÇL›~ºè±V¡ ¢œìî|w2PнüÑZæÄGö棬•Ÿ÷#ÙJªÚ+ñK­az:Ró§¨ÿØGí^vû3•ßÉ2ÂtáÙ¥¡Gw@þQY¿#l¢º|d ñ|‰ÌQVoü‡/µ Ù›ümµçu¨W™HÿÝýô²jddž?Ov\˜ AåïîSxLŸ!vËAdÜuÁL}äqË“jój°ÌC+fÏ þ\º"ºRÛ¯T ×°»̰ÍŠImüGežNuµ§û&ÿ/}x£ ä1ÎkÍuãýµ‘œúóÂT Ù™X™ÓµšúÁ&tàÚôM»ðKËùiëÑê‚mÊ€5/›‰Mtà!oËÑb…Xk¼ÑýÒzÍÄkìÁ&â݇ØÔs²ŒyFëa¤&ƒˆ%sÉVÔÛ…´â8}®ã6ž.þ0#È?¢\ÝN$ìÇ™*J2KF§VX®¹'.’ÅTK‰¹—À˜çQ½Àð?Áå66SÒª Œ[|,nL3 Ï϶zBë Î±ŠŒÊµ_ÏwUƒ(…_ûÃlDd¶ìiöv0žÊÃ,+Ò±?®:ÀèwòÑóIw ¼ªˆ¹Œ{5Jœ¦Ä®D@ø»=dæ—¨ÌÊd®"?ů\Ô¾‘éÔBb°Ìx°T¦tƶí4û€ŸTcžÞïà8»±Œoðòkàð´æÊ’!âW õn¢ ö*‹šs„ü¨¾²8~ø)ÙH}êLSÙwÄúï\–œŸ‘g3Åýæ\ï ÍSä6üõp¹(ø3oP¿ifT⿈=AžÚÀ}nµf`_ÊX[`+*ÁŸ7qÉDç­N¨YÇ©y2-ÑMÀÞœO©ØôéîJnµ¶å¿`ÝôVfkÚm9s'ÆÀß^D+\ÂJh-Bõ]‹z Ö\…ùî)ðŠËT¬ÇJ§¤"±.Þ_1ÃÐǪ†šv¢½ž‰|’´ »©eu„G* úÓ”ëŸCÅYAû_Á%‹<‚¢u$§BÁD{‘+øÒO%ŠË—ÎPq°Ð¾ø.tÎݳð;Y×4gŸ™Åá©’˜ëÝÛ;ÇüA/3"^©ñü®ldf¶6Rÿ•ús_j²‡Ã3Ô±¡ëšÊOiét*DÑÚT,>ÝŒÿžÖìé^o¾¾Áø‚v:©"Z±Îƒˆ¾w@ýG~{;\”åêFmÅsr®Œ¨Ä.Àª¼¿*Žÿh…Zbzb²s Žd}˜—?P‹ªYÝ`hk£Úê˪®ìð+úÝÖ|f•\c^à~tÕñ])¬è¯£6ÿG“š‰ïÜCÿ«¾({V¢±X¾ÂjàŠåêÄóxÄ]ÜNH=æ×ž·{¸ú ÊÊãJoS–y/~XÆÍr¸ü-3ºJ÷_éŸxEË®t§{~7qsöýCÿ5='4·±ÌH' 9ÓÉ6P?˜×hjŒ2tâÜó¡/è+kÄ™7ÐÑ méÄH#–aÈ5²è‡ëº÷—öÙAHtœ'À©öÅ­—qͨÃúÛ"‚ì òé‡@¶èã`ê\"Ë;D w8 Óð"ÍUo2†¬’^M Êcñyõaê£É:òn ïûÙÇ¢·Ø†§|JÄ» ßæ]îA\ø Qïôœ¸þ¦L‰×Kf–uçÐ?[í„ÖÌo™|!ïû2rŒbæ=®z*™ƒQôV:tlmƒmÎÏäîØ¡ÜÅñF?,³3'é$k|–Ë`M:b³»J¤¥ìû8H8õŽ¡%‘ZýÚO6÷Z;®ÛDä+‰š’ð¶8JÊæäwÌîêªà¾þõç‡Áî^°O¼ñr°³™2·Ž9? ŽÞ^”ãÍÜýBø¸}¼Ïõ‰œþ»ƒ¨ø:!ÒÆ´Àþ삹ñ%Ë…âËÆ+Œ ÁŒÓâˆrz©%ª–C¥¡£<c/”;¹É.¡‡>IްˆŠÎ¢ Ïk¸‚Aìò&úݺw°kÞdŒyr¹É6è¼í:ÉêwT+4·›©±øru€þW¥à?j±&sáÑ´…Y!Óƒ]0.ü¹ÓI´$þ͇*öœxy+:z-1nflèrº.PŘi»…õ2Skâ‹ý§\œÎcÁø? És<ÁÓÈß‚+1#XóéX•‡šÄ‰ö: 2“‰èþ6ýºªSÅ‘T—ŒæWÃ(;Rþ-+s׉ª¨?é|xž¼°'Y×D2†Ï*%=«bê—{_kîr~üGmr“¦ÌÝFß«B°{øu ÕÝùýñ«éÜ˦ÔË?FËÕk ÿˆÈYŒaöqon޾ ÿápXÌÖÖn&Z>0O¨Éd˜ÿq}quW$×;™« ]‘_QMò Et>¼P+´Í=ÔjƒëË9îëíÞ”ƒÓ[¨ê-ºÁ§²¬ÎÕÅ>ÀxˆnÃ;óÙó3ë©.U*E­Zv4ëÕ6×Án³Ñ)´—ùÀí?Ž€Äö’NG¸ÞDygäQ«³£ÕEe‘ÁDsÕ±ç»D¸otÁjOÿá¬Ô§”£ÿU:ûþk«€fäšõœ*^Ü—þþá£<Æ+憭ŠîÇ%¤.¢¢±Õ¨.Š‹'þúÝÙZ #£Ñјf(#¼~üÇoù7r‚þ‰e $·Ã7CÖ?«„¼`!1›ìµ õ^ìm 5F'Á­’bÁ¢«.øðª}ÎS-'0ˇê?Îj-ÁùWr=Ÿ°wsˆóóÒ5°k7k©¯x¨4XÆ2äM>Xî¶"4/<Î@LÙ•7e™•N”‹Ï%áegb™c‹Ê¶Â¥.àûº˜…eãŸâW¨’xš=ì*"©ùMöæ{®™Ý°ÎiÍ1`ןÌCx€°*;ÌùäcïyŸr ³.¨÷U¹WŸðme°[ÇÉþ+q—¾˜±±îW…õƒÞDöÕùžÀ©¿/ÃÁ)…T>@‹c±ë˜ ß‘k¹ËÉ"yýˆ½ ÀNì¤Æ­™WtМuüä¹<ï­ìµ…¸¦×¾xS?8ƒýdÁßld…g`q'AÀ¢gÊnm‹ùhUÅ.׿Zˆ—Tl/¹{b@& vÅñè}Fn°)§d.×¹Rå¥þ|±ZÌì¸vT£×@Ëê[éû•ŠÜð,Ùˆn"ÿèdÖƒêwÇ;9Ú M÷BzL>?ŸŽIÀ1àM©­¸Íð«ª+üù)U«ÜÝ»@¤œéÂ7EÙ ;œ#³¢ óul ·ÿ1ÿ1Þj«›o¥ãÈ r® ôƒNõô-<Ç0òºyx¸wT.RIÍùî—â¹VU_MæÇÏ#æ)¥–ðvÜQç©‹Ï„2j¦µ >%.ŒüF”Nã‰ÐGQß¾¥T+î°¦>^" è‡2M÷2^Òc0%•™-ox·ÃfSôÎ/ìZö4'™×d¸. 9ËI‡à«Xç}¨…KÑs 9þ~˜STÙLNt_ïFúï¦å-wæÃ|F]ÙÌnuÅÊï¡ãKò£ÕvUzî–@–„Jöèv1—‹þ%9­` OñåyÌU ÝþÃGŸLþQˆ3ÚŸ,y‡,m·uÅwo±\ÔÇ[`kÓ]£kíigµÑ)ÅäŽåDtä²~/3uŒaé¶ç¾ÉÿK.iyôˆî;sUkúû|ºŸžÓXCý`y¦;µfͅ诒“ bvùKíæ/íø²vSܤ:  O©>jÁ袩±»½\öCÅBºùDuï:, /–êŽ-ª†¯®Eþ‘ÍŒ W2r²zOŽ@›4Ä)©?®=C߯'$º?…î´ÏüÝÇÇU’·y¯œºårx½2‰¬ oÿøí?üIZ1^x¡*}²…ì(±:Ž§ËŠ1©êHÄòôÁÉ?*Ñc«\¨þãœ6eÈtp~§ßΧ0ñQylÝ8°äHØÒ„Øï2ø½MØÛ–"f(wq‚1ÚŸÿŠõ›o¾–Ó°óžà­«ˆÄq΀Ç=ão«è×»™ÅéŸxù‡kü×8ýۓ½¯#óIŵÆÇtÁJŸ¤RÌ·`²jƒ2vù>–m™Ü&ìÛIY(Ä'SŽùQµa;"©QÜ¡Óp0µ¹GEð>i>H¬y©ÿèÂ]XÏ:ë¸âŒÌá²ar¶… Òâ‹%’NGDÏÕPn:³¥«ò<³ÁÊ6 ÓÊ)"46##‘óv˜—àé{yBµ©ÜìšOc䬇 8†»¼ëGð~ðçEèÒç…µ&èP¸«ˆqc󴽈ÊáCúÐQçÇüã-8{[ÎÅR¾b—š‚ÿت²Ó~¥ÚgU…I××Kä/嬘ÖfTgA¯¶ÁM/TÁÎèw‚<éøZ<9ßèLè}LeöT,V6øîåX毨Q?ÛãÈ?<™B»öÀ ®ò.õ%+ÁsFÔ ²ÞzY¼ô¹hkîØó=S­–ÑÛpøU2—J§Ûèl·ZÏ©'ÉkŸdŠú0üôz '£ŽrˆŠÈ¼Öê+aökcmÛ‘ý-Uéß~€žÅɨ ?~·§+ÿ1޹#ù’3ÿ| \Š?@¶Çt,÷ª¯1¨düGek ØÀsJ…¬o¯²^¢+®êzJÏõˆ®4ä×ÑP'‹(KÌП'>˜«ŠO5×÷õþ¡¯±ˆ€Jð&D²ŠR[YË^i{‘/ø_-Åûæ¦#Jv{ ̇Uã½é§{ÄL„" 4ýªÖ«öæ#·ÿX£ÏMñ눥˜{ä-« Õÿ­VTüÙ;»¹ÝÓu‡ŽŠñ$WUvWd²¹¸ô/¹ Cx†,#w=‘Šó_Á¯nÒq7ºûζ.Ö˜ Ýäo7°žÓɺ ³_G!6üã›ÙY×Ðû]ü-ð«Äy¨Ù‹¢ë yéyØëª›•[8­O9´·õ¬*ÖVÕv!5¶?a¨Z‡ö;Y°³¾"9{Ï€—YL¬=Ïé£r[L-gÒ_aÔ¢MP:óÄ‹Sc1ì#-_uþc©Šˆß9¡Ë ggŒûyºuæ†Å¦Vþ| jÓü0ÓA†¾Òsd7ùÇvÕ‡.$GP0›ð|/™<²ÿÑß\)†3àŸ5Ò™wy‘“ÐÞû¢iûwC`ͧŸVLð«Œä‡èæ±<¬¸},®;~y1m%·ªÈfû{Gk¦oE ×¶ 9¾z4•˜—Õ4kqíîäóè•ÚÎk_ê‹¡?hÑZ”mÉj,ò-ªÁz¸7×S÷6ž¡ð0Õ`³§Õƒ>¤©TDæ‡û¡·]L¥ùu»=Õö—íè.§ûú=ºÃoB••?Ô–~ú#Aåµ»+Ý×; ÿQšh.1Ù3vþIV³Ê¸j؇™›"ìgL(ï ‡R=3m­‚ä"©ð"-Gqó{–Ý\JÞË} ê³DoYËÑþs¶|ÿñÑ®³‰ªËv'»ë9ê«®žöMUÞ%X;1ÊÞ³¼‘û¥£ ÙÆ[•ö¿Ò¿ý‰VJ·Ýwæ‚ÖM[¶ûá¸?¤Ð?Ñw;üGUò§û ­8ó?~3æ¦KÿµêÈÛøàž±WmÌá"…hnÜÓo‹…r“IçÐÑ7ll÷÷ííш>Á›ï¥o!ãÀÔ2ÞJ‡ÿr‚Œ`&¯¾ñ¿ýu†~˜äT½'¾œLäÛ™ÎUÎä¤ÓØÂ;þüyMºÂ'%ç=ùoWú×_¦3Å üš¥Ž€. ºë“Üý)ì~DÞúþ%Â+D0zðülá#Z[xÖ±è’yïá¬f‚ÿÈß1-Ñ%¬^bušèl"¶£)3³¤ûÙ‡¼âã7؈Î|÷!²õ{rŽ™ƒg’îv$QùkX…—pݾpý¦šJ<À+ò#Äbû`7ŽË !ò…Éúë²7C$Çr¼ì|Ö[2’5øéèw—büj±¹”+È‚òÆæmu¿¹í¯¥§‡ÄfP“eà qñ +ÑDL$c茷HÅÎÖ‹lÇzÿIvRŠßÅ»MÄ/Ý2Û‰Óúþ€¥ü?ýMþ1ƒÀ•œÇ&^†ÿÈH÷¥9ôIò ®¯Ký‡¼ùW"ÈSøO?0üÉL+ >—Å4 ždîüj±íj<÷}¿Ê —²ÿ‘ËÚ̾no€CÉGÅZ²™²Äö·ðÓ±pÌÍúÇ Oz ±S[4è&¸Ùv8¢§èw§Z ¬äè·æƒÄ¼¢'ºŸ]†Á­¨wÜãケð£Ká&2ïžæ.Ñ5ÈzÞ²,΢Œ.xÁUøe Mͬ)`lÑ]^t‚º@Þ0’‰$ýœÊ?¦N<™eàC¶•…þ%‘Í­î;xI«®/1uÕÔ¯^éÔ%WÔ^0¿Äv7üÇXòv²¤ix¤éd_#í`uý¸wñ1yz±ÌîõF“ µGìɤòåtžò3o¨¢è<ì™T|œ‡ÿxΔŽwLïðA%–lñ–Õ˜¯ï ?3G4Ê¢z—Îbþy\²üÜð@à(¥™ËJMýàt»:Ï5»ËÂæÇ§#|~*hÊ£«Nmue!J[¸£’dð}yøú"Ñ–k%'¸€Œa×g?ÌŽ§ þ2èÜ»¥ëÕñ©?C¥{V&ìÆBswž7äø•Ós:³Š(×¹¯øŸûðþ# îÚO«ûϯª¿×óB¢…xç_?¸B+h”6:+¨ÝˆñÓ®Þ!_ëYm³¸Ç=mŒ½ò0§Kd2vèÄ$ÙýÕvò#Èù y•€?$èç‰åhÄûÞÆ'‚¾†b'šL);ȸf¸Qö€¾@Çò¨ËW°?ÈgJ¨DÔiå1"ˆ‹ð¤àÁ¦È8ÒCþõý›þͯÉAZn‘D N^ILk©¬¥­DÉù5R9p—\ xØ 1dH‹úi½Á~‘Ä_òf/…¨š+D1”Z8g†G°—BØýÜÛ®"xœ|ÍÅF7á'_9ÿø '“ uêÎs)‡NrDnƒâ$‡¹Xîæ![ÿt~íMm‰×LíÍGÎíe&2ulØÿ#î, «È².\U÷Ö­z¸»»»»;4îÖ¸;4®ÁÝ]ƒ ¸w—àîîÚèÿUzxÂ$ükÍL÷šá‘†ûnݪ:²÷>ç´gå`Z);X 8¤oø¹£TÃ\‚𖹃ůòémEn¬h"¬Ba4¿›á3+‘¥=AɶÌ|$&1¿Ö F>^t!qÝH´hoðíÌíÁøZb±Q®Ç»Nš&ëX…g¸ ÑydêÇÒ‹éÞ`øzQ8¤øOî§ØþSþ±úóÅ<¹¥±ÎŽõ}„ÿØJý 3¿5ƒuŒè.•çǰÎYàÏâ}ã£íJÍßHøóÌ2¨–<üy)ì¶ÃvOa•%è̶£ßMÍ5®#Mˆvô ]h·¡—Ц•Š t_²E<†|v¯þ=Ðû2ÙˆíœÞ<<|3õ%Ñ,ú-E$‚_b¯¤ö|úØF(w;⎑˜ä›/èಋøc´é#þ ´Þ YuÔÄg=ú«Ã°)ݬÙÌCLÄtñ¬XÂéö$»n°5‡ñjTc´—Ñ{e²Ú« æF÷£wèr"‡ÊäË­àŽFÃßY`~žð uáËGÐ0 Ÿ}¨ÿa bÞnù½ b¨ŸÜÎÝ“ø£?Ýë`þà=¢§ï¼Í­Õf+yìo2óØT³[/±ÏŸa+¾Ò¥ë ]VÊR«rÏj¦8€3œÃ›M6 ÀŸ/ÐOŠhD?Y¸§¨$ö£«ho#ïÐàhÙ&½¯bØí8ðçUé«•Üjbǵ.Ù<‡)ÍG¼4Ð|寝6ë‹DY„ó/âœÝòlÊ3øyNŸfæ‘ ±s£ß½Dýà@ê €²e¢þÿšNEÓHØDn'±\ï¾âÿÞC/¡»ÜOÂ5ÇîßýÞ.²ê_™Ètب!ʈG~ýׂ_å2ºkŒFä_vÕ þ[®iÅð«&غ*æ`A$„?¿!ÆË.b®Øl<ÕÕoísØKFó Üf„|$³èíÉ?j’Gf’Ãá›S‹ˆ¡Zq J–XäwPÞÔ‡O¾¯à`%¨ÿð “G¢ûÖtý‹+KÉÁ_\ ŸÆCÅIê?Llèv¢è ù­©C¸ETÑKz<ì9Ú›RÔ6 Ñ\Ö¦Sƒ=œ&}œ|਋ÂgçÍŒ-{=k"—M|K‰ùóÕFª1ÚsU‰¶ÿæiMJUõîPìª$óz Ö´“o{ÍŠ¨¦éªÿÊkÞѶéÌ]ÊÄ3¿€ÚÙGð½ð> °Ç©x«J§ï„oy„½?„'¹ÅŸÞ"ó;ÿ£°ÞB‚Í ï¨Abï+i_\m>åŒnM…™. Š·Œ7m:ßðNÆ{™Œÿ˜¬¥‹$Þ±lÂ)»Ð41çqZ½@¯"ò~z™EˆF½` b`›ç‚nÁcžçû&ˆý?ñç¾ÆüG9ðÇ5Øç|DÒN}XFr‚šVfú_ÃÒT‚—®†þj%ÙWtqç°€ïÀϘ­,óy£1?*%Þ6ÙÇB<Ío€Ýë|k¿œŠÊUh4Ùìè^¯»¾’ü£ Î ³‰5Èì'ŸÑ;¬%õõñ¨¼g=²«QÝýˆù¹ì‹ÖmXõ (gkÂv!?B#FþQMŽt_ï,}?þ#OÝ(üÇ7iš ,øÕº¶?¤ÛîJæª{S âÅú˹Ú{Ô~LF¿{víÑ`Vòæy·ÿا{Šn²4ˆrG"ÐÍò->â9•‘³é ¼t­/üŒ¯kŸ]½µ2®tù-‡ áXÇ99 ôöQgDéïÝ—þÿ ôÊ<Æøóß«ëöß`rº—T3®UÅ_Ìót²ÛUZeª?Zg¯zDý¦ÿ ŧSÚ>ñH– ò-lvmMBÇÝ%ú11ZëÅa#ªÍ}?C±œ¶Åÿ8Þþ£?÷¼¶îa¼ÄŸ$•åhò¸"B¨VJŸ–øò&ëü cÛŸˆ«%ù‘äyðËËx”ô†ÿ¨$C£YÎ.–’iUÅ[ìÆÂ¬çWúÑQ\Ñp¦µ;Óo@UÀ„¬¿zMþ‘U†2³ÂFoÆN‚ÿÈO¦ÝÕÔm¢~ÙÏ#°UU=‘-„k>`ôQDÄy…(Þ oÉÈýHC”>Œ¨ÙÆ\$Û…ÿ€v½!º?é•ü?·µuz*®j)1Abð«d(çsV{ÐìÃëv€eø„ÿ8c¾eÅÓ 7áfÊzâ}0 æÕ‹‰JxÛ4j0YÇy´kM‰ q?"ªå¨ë»‹äÖp§RdaËØ÷Þ÷wäƒèFùórc4]Ì–óa3¼Tg¼E8µˆ|¦«À.fă´GÏvÜn2™B^¾aûžÄ)¾0§Ñ/4hïì]è¯æ ÃË‚½Ý{pל 6™ =h+ÔÉäå­£¨¥ ¸4&ºOåÇ)=ÅíÉdÚ ÷%¹¡ñ¶æ®zò¯/º…׿b•ý®·ZceyiIÕÆk²ƒœVLôW ðq`-k¸ÊÈyoÒ_Zqºáâþ_ ÊO‡"¸´zhF¡_ø+:zÚqtÒú št‡Î04çÀð>Ò+ð) ˆ솇¹S´ ´Þ$™ K•ûã6™o•Ó“«‹“Y0›o.øÕßÖjÔ­oUCжÔ5¶ÃOχz®¾‘ÙÄ4ý±Þ­ô¿Z WP€oÈéCy†™¿S@‡P“u¿šjuëe׳¿áSû‘¤â4£’|–#Ý7¹õ<˜N¦ZßšCw˜ÓæU¼/“¢îX7í £>€ž7?]õo ¾„)Ö=Ãvⲋà¾Þéú^‘ê8­/*}-“YŠÙ²›˜CrÛJ{>½å¥n°þ£2YRx8þ·ê0ªüÛ EЂ Pÿ±þ£59Ö b©ÔZvA×{û/òzÓ[Ïé6ÜÝåãzm·p…áÊèŠZ™ÇJ`_"ûõ’³AL0»|ÿ“úÁ·äŠþJØWÔÄuŸ“û„êCTý…^¸jdò›mÔe•Uôo/ct¤ÿnT#¶þ{ó?vh˘U[…ˆ«ŒÓa˘¥¯¨"©×>ÆDuÿ]‡f{½„3ÑÚWÖWoƒ¦›ÕõúÆyøøôf ÿ‘V„N9ÐR?¦'“g°á3»a]««‘ĶùänìÍ¢T¼ç«d 0Óc¡ØZ*±ŽI½•ÀŽËnÀv Þ€"FWõQ÷Üåú¯Ë(x¨ˆfó#Z-:8n¡~0 Va?Ì@qú·§G;5Ðaoá¿ã¨-Ä£ QK5 g}ÒîöT£ ¶Ùéx‚x;ÏxNð«TtÑ ¯+øÂ,ìØ1ø»Ôìw-•:µd+Ýß¾üƒÚF=ïÐVò„œ~üÇ+ÙŸ{–ô(z––hd²ç \ó6°¼`ƒiÀ¯J -˜]VÖ ˆR|{ôWuáPc­KsJ¸/;ÌÃtaûˆVª6VÈ©Êtê_R¡”I‡9Œÿè¬ým,—k°ZžØµô0 kyNƱz;bïôdZôFÅúÏ /5¶yï®ÓñóÉ?‚Ö,5fÉ ä±ˆ‰²‹؆ãf&°fp;á|_1ùã"ݦ [³`ßxûwŸÈ|LøSþ߸ ÙËLÃ1ƒ?¹˜'c!õƒ)È5ÖXʼnï[PñÒ¯~0*¨QL¬ù-¼Ÿ¨g‰ÃSà«ÿè g’î^'‰V²ó'JI…¡Ïî:+Šß¹x"{z˜zñcðßÕ¨, †×‰O¨øÛÂó°^ ´ÞpY=îVìNËó»g¥þ£%þã Ì@r0¡uèw·«vL?£úÓ ¥ ÜþuÁÂDŽäŸ\„…uúCÖU/ÍæäF eFÓ Oâf2%c¦árøs ÀŽ¿5,KS*ï?à9ãAXkQW'B³<ÐýðÍÖ×ßÌòD;CàÏ÷>0ǪTö ª)Ö'ú¿—r½ýÓ]Åí5téŠBwÆ=Vt”D¯|ÆL);Èvîë¢_A¯òâ? «QUL+–«(¬‘ýP3¿q"{Ëo^ ÿv& ‡"Öcó ÚÂØûæh>®¸óÝ~ùGNµ3oé.iiÜb²ÉBªPsuu©??ïÒ]eÈ?6«®àW]íÔô¾¾WNa=ƒk+ü?™ÿñH« zLåN÷9¹o@¨>ÄÓ¯ëYõFiÑ\¼¦«–¦mв‰ÆB#Š‘R-õÿ¢ Úú··ÄdÄšnB„3fꇄ‡œI½ÄzêÏ_ûÿáP|š'>‘+l“õ`øþ4ÛП¶’^üйðãdT3S°(ûÏKïÑwêÑeDð¥o0ñMû®ú¢'Jü¯ücüCcP e»PM$N/<Åvî_àWOãÝ âå¶ð¸ Nµ9¿^¥¯=aÝb‡¢þü6€Ìz¼|.£ò†îb/ùè׿ðç}Í ðëÀPöÂÌÂúu¥~0$ÿ1Û Š4€¿Ï¼Tâ÷%d7u±ƒÞÄå…ñSÀÿâõÒíìDÕ€ùµ¿êÔÿEÛ©GGXÈž’òwb‘5…õ>lvSÛðz©ªø­|ß¾í"wê-ûzYA+T×»‹ZüÉdxïüÙÍx¥ÊxÆÇäò^æüÇ7j¥›àEWá-=ñ€Ù@òp-{‚ñ´HôßõvjG°•ÉÙÇ<ï®ËƒìÃòç̲õE‹»‰ÿZiÞc,ÿ½9OìÓ÷yP6PîèÂÒÝo#_qr¸x cª‡• "õtùчՂE_CÞõ… î$Võ%h×~™ã'ýîWý«Œ‰ÇOçžji.ÈÝzú·'±–Óé¶ i/ð’ì®”‘úóxh†¯–ųæ«øÕµ Ë·8Ì;³•§.+ü~-§ˆt{ÝnÅ!‚_ÂļT ܵ[ë˜WÒÀ:޶9‰GàaÔ9îú"Ñ>Ðzð9Õ3üiœÝæð«yL`†,¬k5ýK.[{Èg–©V){7,N¾ÕKÝ¿J`õWñÍ‹îíÒ:è`ÁZ qô½Ñ>S'¨ËKLÝÜrüP:KåÂ^ûÀ2"ÿ˜g§'ñX˜¡¸Øû(\½fvv¯×Oßn¼%ÊK Î\ßJ ÆúÅ<© ¨j¢ú¦¼a­àWG@³RC¾þùÇ|æFRÕ ß¼ÞxNGßßù§£ˆ†Êö ˆØâTúh¦û Ùþ<3ùGX3¯ð×1ÿ»•Gѧ%¡|A$F5ÆÒ߇—ž;‘—ü£7>`,¶± vY4Tüy6±Aì“ QRnÇ/Çz9‰"Ìä3ùMnóšÌӟĬbþqHkBÿ-Oücdp˜ÍN úL•'’å~€È‚=ÍΓ¿䨾)Zo´Eòàß›<­ŸÈ–“°»ìð³á?¢«éð?ÉLҨˬØÔ¬-ËýRiwNÛ¢‡EY¶š¸<%ÙJÖkOÎvˆÌc¨_/"ÿOdO`ì}`E|°ÎñÕNôWÁ1S•ôü¢:Ü}r´ÅÉ8.g”p2’u<1„Ü+åTŠO?J¿Ê{s8ÿÑQ³™?èÍ™¯Awj¹Õh¹†a¯ûÏFIÁ[¿¹ þƒYà\óZP±ìu-þceGf›±üª¢ŸÿX.à9’sŠCôÞ›¿Óš “ž5™;[5J»2þÓ^´)en÷;ùÏ ˆu2M%_…›AËlð«8XhozôEÂŒ³à«2‰¬¤ö-'»½‚i†Jƹ¢¿ò4âñDœâNƒÇ¬ÎõEÅ^-·RPÁ½ŒN¾¶kúÓNÖ6ÕÖªNבÂxÔðñ7Qìáéñí°Ÿ,M&sŽ«Ê¼Åæ;º:Në¨ ÓÑÖ‹Ìá-•Ý#ñfí,ôYƒþª3þã* B«Škú×ûÐ[`ïÃÄhmÈ݆¾T—àŒlúvlÀuã?Èr¦ô·ÚÓmê§×“³qÝE€éH ~p¼¾„ü£:Q@+³®µßlzpXű¯€Tµî[ÇñŸÉFtW¦²Ü!WŠF_¬&hØú±Þ ¼bXøfîë~•^±1™²2›¦Y*ñ|äk“P)Ÿ¶.£'®v÷8sÛ¡¿ê…ÿhˆrê*¨]MA‡œtûCú|1uö ÖÛ`úÈûVüG[îÇW:%^`þà<×+WJæŸW±Wƒ_E€÷„¶÷%=ØŽÂä&  gýÿ„ÿxάÿúóZµÝƒ¼!ü6±~“м­F^ÑHD7:qÚ3´ÂFYô»ð_µ_¡Á/{úóó Mý8íúøê”Ôh Õ¯Šr²˜#NÒÑ׿ê1øÿ´xAä¹ ¾ü0Ö½¿f]=ýw«™)˜mìA¿ÁÌ"(æx…¿I}8ùu"ªºä›§Í¦jÁÂ>³ÿ ÂåeKýÖ£ òë;æŸ'ÙBþ‘L)™}8‹ãœàs²&G‘sŸ·èâûó0 é•ýK‚ÓJäЫ‰¦xר KU8»uÜ×ÚìîŒú^s¢h/ÂbKZQ ±{7þ<+$Srã?ziáІoE‡¼Ž]ÄW‘ð­8¥¼äYÙá曃é<»7l(¿r*7rÅûØë,±í§þWó ˜:,L<Î"*ᾑñ9õcǨÿȼ†yàÙ­ƒôO¬ÿ¨:” Û? {º”y{‰dz·µúçãRÿ…H*~ÛÑ_3]¢á+æªþô/‰GýygtM+T zðnÂöe W¸M=ö<¸ä¢æYýY Q0Ê6D*‘ð3^(-΂_­m­bP›²ÍÐVû…Ý4¨±_|I¬orÇœÏr±uÂyÃýÿé#‹ágó4ô†±ßj~R³­ÞVwðtÌ}†ÿ˜kõ¿ŠOýÇ(ðÏÔÞE1Ūÿá?5ÆéÂ7ܳ±º‡^_uCÿ‘‰:¾duÁ«Ž(;?ùÃ2»2ê°öô+¼ÓÝIM‚á÷Âû?iïÞÜd}®ñþ%‘`ÊzZóÌÆòˆé©"PoÙ˜úõ‹t˜Êïú[ñ™³;­¯h˜pe5µì 4]]3cÓwûzë§DtÞò<¼ï­(tÅ)`½µKP/³Ä~ â”Äuœ ¿jðæÙQ,禆#!Ý-•uÿá¨) rF£Í·nÿqTŸCïÎ4~üùsùGeWzWÐ6XÚ-º!Ÿq¹Âdw¥ƒ£_£ R¥’Ëþ¢ÒÚ¦Z~wë]%2I%—¸¯ø¿÷á‰Ö4@ýàú·rŸÓïí"3Ý) 3ŒÌ¢®øâ×ÿj¥–—úü,¼‘ú—Qiðßr^[ ~U˜2+QÜAüª³¾™Ûcé7xZß«ÿ¨,nyî£JguüGý†~@Ö1³í5G•*D[úÏNûê{õð(8ÎÁZ5à>Fž=˜{XCî›|ç[’ƒðL”IQñ7÷(èõÆûÅuøó«(zN`_°rGp™›ä N½XUþ<:hkx³CˆþãæÌLñbþàk³-V. ±çKðã9äEåxz½±a;©õÈOºQùR·šA†3KwÚ« ÄÚ’<&)ªthl–‚ …UNÉ^,©M½Š’²Ì(ùU¤°OÛ ¿’‰ÈªP£â V·A(;ásÛÀmR]M$ë>†ÓóÐßœZA¿\eg%=§¨ÊÞÛ^™]åÿë€QÇ£x3“¼³xGÁšM!ïrê?^aƒ{¢Y z4­³nm5|²7Ñx <È TÔ`z£ %+¡–°0 ÷NbÜ„ \{ñ¦G9ÃÝTW®§~0¨vrŽÑWÎdGÉù>°ø/9ÿ\ÍYú&EW³Ô/–¾„~·‘å̯ CN³Žµ_óý^2 STï1¢ñLæåmˆï§ç:~õ„ÞáiÉe–ª!0ÒÑá–¢b½F¼ÓÚÍþ醫^1|3ÜB)ó¸þ!ЊކŽ'=›†¦ŠºnºÐÛ®²²q{€ ý †õ•yO7TAxþËäšOé2ó{º†j1od¯@뵕ù8éÇÜ3üÇ:óššÅ¤Ž®Öhf\}¤NƒœÃÚ‹šu9ýÛ3ÛwáÏ;ãµ–5„£†¾¿ÊdÞt_ðI­‚>˜ëk §VŸ~`ÄæÕ]ö•ÓnÈLŒvìj~ôfÞvOô»ô÷`þùüÛõÌ2=ùG|sœ{½ÑúVã–YÝýÕNs¨Mϯdè±>Råþ%A?tÚ=üîÇ%3Œì,{»¯w¸î- ž¦§ßûÚ„ô…Êk,02Rÿa`ë5m£–ÉÈŒk;s£þ&~uVÛ(,ЫÖX@z/‰o†m4Ó/‹•rŽØ&n÷ô  ù¿ÛFâ ¤í²>w© Ý©þ–@„/¬F§Òoºœz"tÊåŽúQ=*ùÇylfâçíTcÏ žn"}QßíÁ£$'²Ÿ‚WÊ(þûMùý×èbµð…ßø€E:…w{ˆéˆ{O¥Fs¢úhª²ùLF ²ÖÍŽ!úsZgô dâðn¼ÇÎL¾2Öo øÕl^Zâñ¬DÖKØi·ûïÎ0Šƒ¨ÍÂÖ\">ú[Žæê*à ÷¥$;:ÉÉøO_¬FzõŽ¡©™GvÒ÷ýâªuê] K+È¥ââÉb£Kn@þ±ä*ŠŠHRþ*NávyµŸ‚7%“±“ËŸgÐk‰f ˆIA+áG|à»+qÂaxSqZS¼éiB–4‹ù‹Óÿj!‘st½sQ+¯mtr¥eâœîäš·Qÿ1žýdÇBn‡~Kþ²ÿqZõ±RS³68º¦Št—šG–ôѤÃÜÆð«•ô¿*ä-Œl<cm[1ƒî%‡¼mNPÙ°½³Õh«¤†ú#öm¾+/þc& @Vªýîá VªDðq'ɶnq¡¡ñ”㬜úÁŠê&Óéßž‡œ¦;“¼£¹vÛ]½¬ódHŽN¬0 ±–°ûïQ“í&ŠØ$ZÚa™’çá&9–Y]ÜÀ¯&Xý¬¹0a’³¢½Úg¯·vpýim_0®xæ™X} .>Οÿ¸EÁ82ïfp ¹ƒÃe4ò™ÓÔ &ƒ/ŸMIâüTÔå̓¡é®5“úsGý<œúø¥\Ñy´]Ý—;Kßa¼6ÿ€·k¶²Ö¡¿ÚN¯çâÌåhÿØ/ŸÓåËéEr%‚áO§àTâ×F×¼à^…sŸÌEôW!uDúÕÞbé×ôÌô/ÉK?Ù7~ó£úõ¿jhì1¢.}÷¯þb°?ßÿñ·l‹ÿHŽUšÉÄóˆÆ$ú–-‘SÄú·ß×?û÷~õCñ®b=H것ðå9©¨z,ËšgD9ø>wˆ±ø?kÑoÓGEòlëèÉ{ƒj7‚YÉAåõ üÆEXéx|Ãp¿þW§µ?*–‰{0Ü_ñDë±¥‰Ç+ó¤=6¿Ãp>ÆšV± ÊišÕÙ€‹¸?îצÐójú+“7o 63/Uãy°~=È?NòÄÂ2f¬Ä÷• ¶²Û½­È…FšC‰U½À›æ¡¨ˆUœJ•Xn¢©ÉØÏ3ü·0¬=ýV…ÿøU×Ȱº·Dh¼r:üD üG_¢ƒKÔ,_ ;}?y5'z{¿œ\l9ÙÒ2Ão·ô¯ÏiáÏk‚›}'j«À)íåÔÚÃqx ëòXðÂ:õOéß¾‘|nš‰v!ÐzSd 4¾w8fä¦ûͨÂ| QùàϽ°¦g˜ùÞŒ•Z pÝÁ•vÁk¡mBáɪI}æ+­¡¾u|'PÍ&xï¾2­ù@Ͱº¡nŽwv?2×a™'Y¬?é¿Õr: Qß¹ +ÚlóÏÁñÿsõ݆T•@!ûš­µfKð«ÓjŒGJ{}áwÙµèòÐŽîJi ûH}û> U;²ÎvTLÎÀ|Ee÷õΧþ<(qZsˆù·*Í„»\ViªüŽ!Æc»;3Eƒ/¿›@æ1iùàÏ_€ÄëD7—ªÚæ-wþ±]éPY™ç½íRÉ.ér¹:“i]¡Ú>¢«'ú°ç®¿íFÌ)F5MRú®¤²’Ù‡y¦/ɱäA'ÍÜ*ž ªtÀðÃ--U€N„ç´ªÿïùƒau_&2íF¿Û‰yl:º@KkÄ¡}¡ñYºïo]Åa­—¸+ c;#`ízˆçÆ%}®>[ô•uÄx±Åo¢úï,XVøÂ›{É̦ƒÖ“¯™%ÆXMg„⾨ OÊx!öüçû*éçô‹â*Vþ 6¹¿‚€múSây:>×C YB†ÆÇYb+ý¯2²ÚÖZEÆq|',îgbó豊1÷( ýš½Cô7µ‚0 ³©¯‹.Ì;™*‹<¼ñÎì¡K<£1aÕá;æsmCÄì9°æÝü˜âåðSÁ}›ÁÁÏ&)¬þæçgA¶¼°fɾʘÙeÕ_Îÿ¸§ ÃcgPGx‡’ðý©ñÍðM»M§ÓQrlE+T Yï ^~ˆÏ\Xâ‘ðçÂýîúßó0zQŸ¬-ºš‚ÿ8NÖÖRüÏ¥™ßá?^€ÕUÙÎþ¼X·øÕ[Y+Øù ´÷Æxò𰱑Ñï6'gH5,‹?É@w– Xw¢}j+Òq†+¹Ó/2@ѧùoÌïÓM£»Åy8ÕÝ à6žiœáwǨÿHn]·¼ÀØ«W£Éøp蛼±ªô›b"jôŸú—Ä6.ò6tÅ ÆNR¿7Z®â‹–¨µ¨CãÛ ©?Ø "”ýÕbðøh…÷a‡+Ñ'Hýà #2«‚¥Ž‹w*õ>À£¬¶$ ÝÑ`9_¨­¸i×·^«â0ü¾0>гS¶f“š€—©ÌSt†áÞä»ôŸz|F+¥ÁSVçyíjÖ•(ï*åt'Lít…G‘”´¾aU&í˜G˜Ø: º©îx«}诈*ÌnîÍõÑ7OÌjxÔ f#«3üGz¼ú,ì|\òƒc(®Ú¸¾ØgÀ슀>¤3üEªM “hƒÞl¹qÙ\ú÷ûš©ï xv ’•_QWÑâüaÅuUÂ4&ËŠIÞ™0û±`‘ÒÑŸ1;¸ØÕ Æû4èè5lC9øæiwþ±ýUYƒ'´'þc‚ gos]µ‹[»©ŸŽÿ¨Ï<Û£®Ûv1×Hªã¹b1í%=þã49÷AéÁ{tÖLˆŽØ¿ƒ˜ûÒÿãÂUùëVÊè¹ý¤2¶Y@îé]XeùGn#Ÿ±ÑFýpè—âOîӯг²$þ#!ÑÓJú_ÙÆtx«I² þcÆøø[ë¥{@—Ã3¬$í,oÑg£°qWþaî¯Dú—d©Buåà?.‰ƒØ¸{X˜6ØÏò<—ÅÌRò xè)~¦_OF•W†Fc,Å*%óRG²;¼<è$8Øs"ë8è ßð†—cb³‹f¶ Ñì×RQ×½üêxýZðœò~õAyŠ«w|G:åeÆÂÖOl ‚ö z¨ÝÂpÓÝøÛ×y¶Mxô‚ÔÏÄ'ö€ÖAŠÎâ?¶/]Àªd4‹ÉŠ¿Ì4iô/2øY}¼ÚR¼Í{ÙüêLÿ2Í~p¥‘Á«ì€s™Ã`Ò}5G°] éÍEüG zÑæDypÿÑKùœ+¼b¾!Šù ŽÓ T~?žoúÝ”äqoÉx6ã?kŒÁÒ‡÷Йøšüg5(ä@31¬ll±¡ªœÀÆÅ—äRÉäfq.ëñƒãÅn=è»»ÍJþQ¿³Œø¾¬ºK®²×Ì Ö˜7Àð#Øù­«t)^LÎ&Òm…ÿ¥¦I)+ycÑ+!!ñJü×Hløø7/•‰^Œ»™È”>¹¦=Ö~E…c.+2¬CbФóÔÔE´Fª8X˜ëtÇxogôâ þ b7KNÏ1&sxYiá³GQsðŽ~´OìñT8V‡ÿð%‹û„žïùÇV´c¨¯™h=™ /û~­8uG¾æcð¦q bÝTë ö4Hþ2¦ñí¥1 ý‡ ÕnÄ‚ñ‰d VaLÿËw©HD]kÛ„ÚÆ¿àn¨]è¯Âã'ÑǤêƒìÔÇϵ{à?z؃íÈø–àMŸ°÷ô‚"Ÿñt_îtý°qžîIUo³¥5›ùQ:ªªöô»ã¬ôoÏçzLý I ÇyKƒ_ØÌÛZh¸ûQñ3[§þ£{€‰“¨ÿ°A²Óþ­žÛe£þ£3þl8“CQèL&IÿÈFøÇôg¼¡ÊQƒþŽË™ò\H® ªïÜ«¯WÉOV7wh|hå ~°=ÕœÈâÖ¡ÿíîÚAÿöRÔŸ_¦{»‘…Ú‹<õKñ…Ápã«Dÿ“ùçOé˜Öý$|Ðjþ¿û·G£¯G9¸ŽR¢üy_Ö\®¥3²µyàW‘sþà)mª$gú`jPõ5â+à9äíåp:`¢áïåIIÄQ"ÏíTé,#ž ~Õ“ú«dƯÄ{ÑVÞ‘ÅBä’ÿ¹ßé[é| ÷ž›‚X5àm.m––§°SÛ°ý>d©ŒÆÌ€àææýxj~üVLcRoº>-Á­C{tˆ!An¾ò†¿¤® üyüGX³Gˆþã’–ÎÒëd8²—Š(e³á} lóhj—sã?¶_yr¦ÝˆÈ«š]EÐ>K?võã×vF>®tHëu؈¨¬“…Œ!'Vu$VÏ„Wvøó£ ÷×yúË™Edã_N~@ÿ’û2£ÚÅÈÆ}H@çëfdpÇÍžê>5)ƒÁþMþë%þÝÎYÎÁ/Ýf–IAáÏÐýØ—¦å×ËŠÖ|»¦†ó½ûØesü‡3ÿ#øÉ9ÑF¼ oòrŒmk(DÿD'ÿØŒÿ覽2&Ë-ðN³È7’bσç´zðûØ×vðGñƒá?Ò¨¬8;ºˆ*bîã¿1¿O>ôßÊ &øù|îÄENüùÇIúw¤„?o¿a~íÐp øCpÝðxt„;Ëã~'ÿY8±qÌþ|<ÌÁv㯩?OFï¨ÕTz%2¯oa.Óð¦ðä]‰°¡'P~=¡ª.g{\?hÅMF$³ ™®“¿`§¨ï†ÅJâߟy¯Q£^„ý½‰ÿÈŽŸ+Ή´Àû=ãö+.Í­7L–Â|! mJµ {?™êó®VKÓz€®5øÕüÑDÕš†{ä(íèÚ¸%À[Gñ…öï~½ùµ#‰œÚÁÇÿ¡ÊáO“c§w2§6u¬™ôjùÂÌÞ=èv{X­æð/ÀÖÆªiðçèMéæ ÷Y®_2ÞÀþ%RÝÌæ–¯Ù^Þ7ÑÀ˜çDåô Ùu‡ß ,óZú·?¤{û «¨eSTÁó°ùe[Yß}½Ý˜_ûŽjtœ¦fB™)OÝàË=ðÞè–À çÀŸ¤DÁ›NŠ)©Bc}AQyÔ¸(£~lpóÏÇ`‰Ö’qo†_hU¿Æ$ª'–N­yy{ªëõƒeÁ×ö«L.æK1GÊ´ð  ‹Ì Æ^%”Ak~¬ÿŸüõ¯ü«³îkõÐUAü¼§¸ú ½¨áí×÷îTÛÌE¿›…ús¦·É3ÿ8¬­†ÿ¨ ª‘k³\<22â?ö‰~Ô®çŒúËŸ·ðo~’O܇?_-³Â1T¦þã;sŽ2Т4¹©‹ùƒOe¦gaü³|?tBÞÕù€}¨c^¦ÁD° Zò!÷ÿIr“ŽóTµ§ ÕüÚ˜\Ï)ÎD´‡ý¼ÒlœQˆ¤:_¹TaæGE‡ ovÑìÔþ`J 'ùJ,¢ùífV¬ækóqà'•aÖ€_-†iÍ7u0Š uA°“цèf¹õžÖøŒDPÅySgâ?4?~y‚S¡íɪE˜ÿᯤ ¼Ú[mþ’8u§•oeqCüÚ9˜ÒNM –QÁ®_„ÿØ‹ïXKŒNyÊ”ÁÎÿ(¬WµaY£«iä{{È?ºáÙ’áqÃb /Ð…- ‘}câðmĉó¹7éa#pÕkƒñ]µ·Æ4y„z58¬ù ЧQ¨ß‘”Poù\4cñmbzƒ¬fÿ;ñÁ+Pgõ…/U;e ”°éຽ©?‚ÿ:ˆ­>K=wnëùÇgp¬“Xç†Ö|û÷h³v“Ó]¦ßëPô»ÝÖꟅO©‚ð@½¶ìgËð«ÌÔ’ÌV£¬t¯‚÷2è[iüÇ1ØóT MèŽ>U%"º9JuVÀ-nAÜ‚“ΊëÈö™±a6[éTkþã+3@ö¢Žev øÕAU ÕŠêOx¨£pVóƒÔŽÂ¤ÇÒîqšÉ‰¤«ã$*à&‘#Ý$ÿHi?…ÿ˜`y±Û¬TûÍgµª(‡/«èÌÛí¢ÞÈ{îííÕ:ês‰HÿÑßíAý«ŽMïKýy|k2Ø_{ª/Ûàá¦3¡¤¼Èû)žyxX8j~"ò¯mŽq¯GÝ1ú«fÜÓvfk¹L†¥Ê¥ú²¢ö|ÖBýÇyØïwvû ¬"ƒ=mcO±ðçO9Ñ£f"Ù^úÏ[œ§Ÿ.Xjä§wT Þ¦žVcúïä:÷1Ee.'7 ýîüÓ`+LRq8þxÖ3°_¼G1|Ù_D8?6è ®â!‹’ÉWÞ%£Ø•éß>oþ„Îmíö>×EôWÙ]MQeJ{W;/º®;¼Ã»åhžS ÁrÏÿ‹¿¾CëðÞý}ŸÐï¦ ôœ¹ÿSˆâÓ×¼$ú«‚¢1üyVñÖ Ñ¿¤‰1݈k¤øMýÕm½¸)«ßE'rJh̯õ¡îsùÇ ±Ë8¦‡4¹"ð†ëÒ·½õ +W4;ÊfØþ«²ˆ}x²ÓK2(ùþÌŒ'5 ]µ&*}CeÒDzŒ”Û±²'yR‚ÃÏ•1d Œ-žXNÿ«ÄÍ»Ám6°ÞVüÏgúÿDTñQ±ÐjÜ!o*C]GÿýÇMí/tM>Ryé âš‹ó{Çêž P5Ôkô1éÕ8õ X¿Öf¿ó†3Q|2Öש=4ðBiÈŠÊ`Á&c"¢½þ´Œ]¾"gV“½~é?Þi+õhØÐ•س´dZIàÏÛ!Ü1Ûã}ò˜3ˆH¿òóÓœƒ¹‰½^#/_²;˜g2¯^[TíKMTœ?ï‹g¨ŽzuUÄ_ÔŸo÷³R›°ód `f¯Ð_µûEþáôOÜe¦P;ù;Yà³WSèAÄØt'7HÝø$§ºoÕ!…Ô¼Ó/ù|Õ|qõ§þW«ñFÎÄÜôõó! ºÌ÷_5sPÞœþí§ÑïvÔH ¬ÚÖò Ne'õo9ÙÙðçi‚\qZüG,ø§~p ª¥q<S©ÿHo-Ç"gž¶³Gã?|ÈhRrÝ9aižª»XçÍÄâUÍ}úñ@+®3br^·È·²ã?jpb‰¨ÜgU¡þ| :T¸óvGê?zQ¡w‘X$¼êΊïÐ_98mQ9ÐzdüÇ#NelÆ"ð«}Ô¿MeòTnë v5܇·_ÿ’áVû:‚žàMÎ$¬ô¿£Ëkîöþc¿?OÉG«ºÝ›êýU®í®D®Œ®V uP÷ w³²O‚ì–ƒ@”_šTt†²ûþƒžkuÿgõ¹V$À4ßûÚˆºž‚YQÅDñίÿ•§žúó®FØîX¿Ùw¿–y>Yð­9AƒÎˆ"­±FŸ"Ëè¯Î1ÿ#šû~†fŸIÅ¢¦«xùƒ¼…Ýä9Ibxʪfe™vìL+ʆjÅZúeýƒ¸ŒÅúBÞ ûQJ-À f—ƒ±Ÿ‡‰Ssàñ6QU’VfÅŠŸŒ­àWŽâjHÎzþ‡ê$ë1Q…Se¬Tuó Tu±°[Bô—´DÄö«QÌ¿§ŸÔ^³¶ãoXž%æê§ïâ5ðÓò`/»xZwÿ¬<øSf'‹õszs§ÁC&å ÈDþ1d:ºòÂëíƒCŽB½ –>“œ«ß ~)íˆæ©?—Ñážë‚ -b¥W²)¾vÜæs²šÁ°¶ÚG:Ç·í‚¿Ff¾R& vJIl=ºÈ Æ—T lè™ßŸøñ‡ ~ͤr¸ ~ÕY¿v” 3ÉÅÂá³Z›+ƒÉ?<´K0k¨&YH”Œ+ÛE>3”èO²d¼÷sˆ}ÈN¦ne"^ßΚ{ðŸ™Dº÷'ýîæNãÉM@w©£\×w|ÑE²›mðQÉ?úÓ‹<38S Ô±k;¥²7M„³FýùSQ4È““Ä8 ÂÑ…«‚º€…¶A²S?8K ´âÚL¼ÓM¯Ñÿ*:+„£y¦ÞZ~•Ç|ÈÔ³€·ÅÇx/ÇpVQ¸–Íà4oÁ¯‚¶7$ÿhE%ƒ/Ú¦uvw뉪DþqŸ eØmÖÜJ†8Ù$ÿ('ã€ó½‚ÿkÃl3o*_”G“°æiÀÿgÓIð3š³¥T’ µ’ƒ_U}a§þ‰ÁȪŸû÷¸Dÿ«VDg°Üц­@‰YSèIX˜Ç9dZÉá{NP§Ò…úËáÄã‰é…?n*¹RFËlæ‰Ì×OWÐ_™ørÖRs‰¼eVí®¿èSò ^¿ õ›Ñ+g£sûköšÖ>d5&ƒkN½‹WU]  ß _ñ‰=Õà™úLåã{êÏÂ_Ý£ƒåi²¸íœ_3¸•›Ô©ÌfÎá(»,Úã„Ö',ÆßĆLÕ‘®Í?îÇQøó… !^Diûéˆ8ÕŠ‡žx,Ùq*{¡ãzáú~•%ï]•ÏU}p +Œ}Œõ¤lE>³—Ó2ÿ'üGd½¬žÚýd]×Úè1Ü¿ûq}¡û5žþNOb|4ʈ>ÔŠ;ùÇJ-%ê«ZÆZã5]á7…n™ý©íÚVñ… »XG?óýK²‡ô£ÄˆÓÅB1ŽŽŒO~k½±" <ë Vü—Ú>!¢^Üx-Ñÿ ³íC¿(;X•ÏÏ_Ò $ žŒOìX5Á'½‡ sÿdò(ɲ‡B ecá?ÚДü¼ÎŸ¤‹Aêºð&ÇûìÂbåš#©o`ï]À±^ç<¥»A2Ñ!úÛÚ0ò”iÒe¦%^<ƒÿ-f~“e‰TÆ¢…|†J£v‚AÍeŸ#è‚W$„»½Ù˜Ž‡ìÀŸ½MO gœŽ>qø"¬NXµOw–Ì$<ûÜ_ÐDÖûegË£š·Næý)·¬é»@Uç³?üymú‘wäª×aƒnq[Éß2id¡¬&³ËzQ {Ÿ,§»`ò6~1 7¼:d¦‘‹D|k'øU~r…õdHcñ‘©élÿÄŽšb¶ÌnNg·êò•Q5âl{ª #›RÍ5kÁ ¬yI Þ³š,é4{½ëøc1_ŸòãvþëדF9¼¨’Ã7ƒô½ÁæžçÚOûõ¿:HE ôW÷áJZó°¤’U_‘Ó½Óö;( ưÉkÛ Á^ q ÜðúÝäVA8”…ô¿b28qª/Þª >eRZj?,RÑÉö.2µ&à§q‰v€þeS;¨:aF&r>lÕ£ŸÈD”IW˜fq†êé›Ì ¬…ÕHEb/Ц7\Ïp›9¢f õV”WÎ4”¾x¸=èm7ƒß·A¹•›ùL۱ȟ,fóífYÉ?nà?êƒì=¤¿ÉW˜ô/ò²{{w`a§£4«Wsj‚Ú‚…ç^‹Rϯ^cžÊ.MÇCO{z¬fLȰ©Å ²ÁÚO.‡ÁôWTÕWϹ{ÉT³¿µÞ¬ ]°\Ù˜WÛŽŽ\hS9æß·ÃPC~o—_wOš–=:õœ‰Š:ÓôÇë'D6²Ù¢dñ†U–)6å-›Ù€§ñhјñ-¯3@.ÐW~ók™ÎB‡ÍzNþÁ´9"¥:àW3ÜþcºÒ‘²Þ`ÏéryÛ*çŠâ‰ÿˆÈ<Ä9pQ5é¿ûÊnçn_§I&½Å­详ûõO,À“øÂ|!þüÇkú'fsŸÌ¦¡‡N…ôã,ýM^Ä8~UB|×§k‹–Ú¨n4ÆQ­þ—ªNÿ~:¨GåŸD´Ù‰ñ}DÑÆø ¯Óå(üÓr]‘Ü»ø÷~õ¹®xvïôI?AZI¾—õ4†¯bV”ù©÷½'c„’ÿ†þ*’`³:ö½rm5 ‹˜@.#únöÇj46§¢¡©*_üj;~I,@iöóìöròްª˜ÑmÞ zØ‹Xx©·2%Oks@ˆþãŠV ^a3õô‰ðgÉ• ò¿"ø¹ð¿÷Y?)ñI¬é\ºE/•B8ÅFs˜™)DÏ7É4¾HOªqÆšÉàz£:Õɼvƒ_­!OØ‚ÿhJ6×é—eNj»ôHXdx£äøÚ$ø¾Dù éT±É°Šxp6Wˆ‹þ [ð .5EæþÎü.›^PtÁÇ&QóÈ;öâ{›ãi«€†Ý$‡ë"}Ä'bÇÒDâNVGE:™ì;™€{³&˜ü£§öÕ˜*÷cáב³$CM» •Ø ø&èÌR«?©šëƾMN4ø ‡ŸÙ†W½HÄpXlÔùoÌïÓJc¬œÏn²€ÔlT-Q¶Ž!óÍK~QÙú¢Öc£ï3Wãˆ_7ÞE|C$VÝÏ7_ÀJO”—~êÅ–œX'7w!3ÿ};:âex.ojÅþºSÁÂcÂô±O+Ó*@=Ê,ö|Šè^ÁÄÇóœÕïºÓÞ¬çæmÙ.ì÷-ú—xƒ`5d&•Ó þ Þö@êÏKÑ!ø8˜^XïËÔW¬Æžö0GéÕNDõ|‘»ÐÛføî­èOâ½âZÈJ`“wÚ3¬5ª–³ROÐÊ0Ji¬œ®núóçµVúp\gªnMj5çÈf ë.º«ÄT . }4xX>ìsoøóÁèw{1ùd-:€TÄì@¿NE2½Ýwd:ó_™…xZû™m¬Íf}jkϨdàMÅñ?›¬[v— ^g¸RÑý&]}©ðlO|Ø uñbÞ¢\²›¬í>¿¡ú#ÃÌ@´2žë,…ÿhˆÏ¨ÎÔ­ÅtùÚiet`}3òRvoæÌö§ö¼&ú Nû ¬{ Ψ]›lp¾^Ì“™ÁZ‘ån—Wè_¢¹zƒ_…õ{H÷—>.&üySû ?ÓÕ.D…Êi2–õr8ÑàX¸÷bÝÿ‹¿^DÇòÖý}wQ^­|uÿÇ>$„?Ï€Ö*›È*në-8í…Zbò„¢Æ`üG¢ßœ_ë£Md1Þö¼ 0½á?¢gô ¢¼¬/Ú‰)ÔŸûï:„ùýçbâ–j, \ßl…¿¨¾Z¦6?N¹dºÌ«ýOà!PÇÖx‹“`Ò]°ªÉå¼ Ó¤ÌTè&ÀÊç•–û™ûõ£‹ÑàW%±ÒK°ÀKy®³Ã/¬ô‰çéú¢¢è¯â€E7‡è?ök…Ð5M¥~ðó¼‰Ìóà}Ò1:ó+Nð1`†S’!ÍÇÞö9BØá£xZôx‰W`éÐ Ä;AMMGˆãäkÉU¡ÿUýþ/.ö‹¶\×`4¼‰Ý›«À°>ËæØþÓtÊÛ…7iŽñ¿q–Xˆ§[ÄŸj,ýÛƒ‹ èuDu¼mLbñbìn+ÕÀÇÞ#gÞSÄk"áŠxã¬4Ü(þ*,µ5 ‚ñ=´oÆ<¹uÁlÕËáÔ¡4b¸ø´,x5KMK9Fõàþk |à^|Ò0½;ÔBìÕý­Õ?¿ØðƒÙWò´]DæBuǤäs +½GÚÏ­bÖª» P^U9ÚέàWP/”¯DÐ)nÒ¸D á̚NJÞìæos:õçÑàæ‚‘DG“³ŽîÞKÁƒÂc¥“1í'ÛùÌõD&+óåix[–Pÿцݿ'ãÚ@m6“¤ˆäZ‰˜æ4‚y¯P_%Ú?Ê„’Ú`Cå°¾Pwòœ?}žs/ÚZ¯/þ#+YÖU³3§>ͤ®ßüÚìñ0/•yδÙ-ÔOæÅ_…¯¬E¾pŠ é"Þé“|îÞÞE­ŽŸÿhAŒVœ³‰×Š??Q‘Šº9tŠŒKGF/üÜ8–îä^×QÚvR}¨ÿØAîø›êŸxÑ¿ý ìßëBÖ*Ro˜÷”§} Ψ,õzôWOè–û½íº$³¯c¡³k@~4[3ãÊŽÒ?ß Ÿ6Yç}W¹éTšúÁt(fÙwÈg⢂‡;ÎJ#Ñïn²SPóÕzÆp“8©"ú«1¦§ÛœÔG‹®D«‰f19è ÕÔõìt•Á>ÉôxO{¤ë‰+‚ëO8zêÈ7´s ¿º[º‚8;¹úGú¡í¡ã>Ðÿà‡3tLôG‚n3 $¨ò#´_ž˜ ¹ˆ1Ÿü£ý€šótm¿ú¦ç0þ2^€Š íB~î€æ)ÎË2`™8Ÿ¿Ä3ã1õƒ#D Yÿ1Þ¸¬û?o¡Y¸„ø@uÎ.oìˆÃôÕ¥±‰»öJ|eå6©Û%üçµÇ0?*²t¦u¼$‚w"К؆Tfs¹› þËŽÿ`FftY[7÷(èŠ1˜Ô}^æ#Á1lðk2¤¦Äów`>šÀ¼Ã\'ŸHÇwŒ ÑìÓªã?–Ÿ ÞÏÅxß”ÌÊɓޥÍyvÌ);¾txϰŸìTÐÝu3è~Lì< ôe9õ3ù»-ñ˜ð %ÁðFà?§aמà\%Éóo]ä_¿¿®­ÖßÊØj_¬ëŸàb¯QîÌ âè$ž‚•%~=볆¬)-~8æã?ºi‘Åén¸ Æ<)6è<3ÿ¼LBBušÌ™8t?ù‚ß·‰ŸíÀ»Î~¯vá?f‘÷eÀÖ{ƒ€=@WqÜ̈Eoļ‹Ãèw_ZEP75DÅ»$ð™ÎaDg8×FòÈ:kZdã þ£^f"ÇÕHüÇ•_1QM#º õ¶ï“æ¶ÂXѪ¦§¶â õƒÓ™ ›ÑÜÉÔ€·ÅÓø€òó g•†õª¨Ët"ËìŠØ 6CèÄøÚ„¾©•5˜ÿq Úgz^GϵFí·dþàpY¥Ô ž‚dHÍ×jµÝ¬®0Úïá¹c0oq”½t©Õ*wØUw2»±ø¸Ä–ný©¤é?5æ±ÖXŸoJ<÷¾³œDþ6¥ÈR.ø…Ô~± Я~¨Ý—ùíáÓãÛ†¢* fo¬ÌÉîË]£Ÿ69`8Õ“þ‰^ä¦ö®7רÜ/ÿ¸~µ²ã?¶Q R ï)«&üG[êÏgpo\诪¹ÏoóÏÑì’E¥ê2yWÖ²î’q‚ç¹E¾±“ùCé‘;Ÿ|i˜õ’~îI¬J(Ç®ó¬hjS]Éýlð€¾[xÉBd3à‚°skàÏc»ÊZ;èqµÊ 惘ÿ¸ìú`W¥FQXµ˜r•Ñ®çõĤÊVvïØK¶vW¬ú±àñ×—ZÉÐï¡¿ ݾŸ·˜˜¹JEèÕ^ùƒºát7ð¦b£ŽáÁ´ŽHúÁŸÿÊ¿ùÉ.m ùG5Þö,à^"–OMÉbÑJvd^øN•ßÛgáôßuò³p¬]äé¡Ç6“áD•á$½Gdô`YÚŸ·ØO?¨§”Ïñ—±—]°ðÕU_ž¦rï•/ïxαò½¨" ÷3÷ó:?~’HŒãJ‹â16CûQ_!3ˆ¢‚µ!ºUêì^\ð«ôæ‚ýÇU­ ý½ñ7y?}Àêr™Oèú5[WF½'®Aü_ Û—.eBØ¡‡Ñ$m"ª€»dnßå0¬p P™‘ È¥ˆÐ&â]­ÔW¼ÈjËQ§ûùÇ¥ùUò„(ò¥<ñqðFIÐï¶ÀŸ"Ÿçj©ÊmFœ¾tŽXl&xð^Ö)K‹,fC¿Û‘SK¤‘¡žwV‹/Íý0<{ˆ2>`%¨¢ O8Yt_Ñt0çã?úÓ¿}"þÆ?o&Ž»Q…½EM¯@þq¬¹Öþ#œÁ)v·ž]žÁޝ¦þcak]LýÇð´œø°Íø›/œà 0”³ªýÊSCýžÎ%'ÕŸV>p§¿{ªÅ§ÀlôS½äçŸüzüG:âçD(ˆ½`ÚÇñ\Ìb¶_^k¡ò´ªaŸ+REwLÀ˜Ö ® 6ÙÒI›^&y:¯è^îô fßÔ'[и6Oöw…ùµK©z¨ BÕËç‹‚h…ÝÒzÌ„ÝFx‘Z(«k³»·àDgÈå&ˆÀÚÁ²<ùèÞ®¦Ä‹Ñ7Æâ·µÆQÁø=WJøXi_Õ•þ%OXå/¢… àW±É?¨×fuÞÔÚé“9Ò°uñÞs‰ò"P3Ó ”.üô2ðª¨ôkYÌœ¿>`d}Ѹ&†YéýYu›Þùî;²U¿f¼7«â÷Û_m'¶SäiÝñ©éTòÒÚMýàº)ô¿: šõ§ýÎSÙ8ÁfàW3ð­™`H¹Ïo~GD&ÃiFTfZ¥ˆ‚ªXOÙ¼þK+ µçùð$ééŸþ%鵜ܶ.ý ¿ªgvQÍðç·ô5ôßÍLü5ŠLþÜjéˆ'ò¥ð=T\=á?Öà冒ÅägJI»¦ÓÈð«j±ÿ¹€!úvæŸÇÊ=ÅõÀÔR½ACÿLÀžôi*ÎÀh²¡ Ž÷ z aÄ<± †ÛRóáýî"épp‡ÑU5´OaUYüGZ¼hs|ˆþãþ#:e§Î¢‘Ú‡÷ÈJ|”^n2õè÷@LcÃ0äÅÌóüIçtwSŒšØðiøÉóæRSÂðä„?Ï›Adè`G‡±Í[LeÖnk–‘=~Y?øJ;¨G4£b™ó‚ÅÍã¯dkÞÂØœkäW}ðxØù%<ÖF²±Y¬¬ÐïÖ vþ`½•h?’\ÍS¾LîÖd­Þ÷§øÌé≅mÿq’ßoâò¡?vºqÎÆ ¢ÿÕh¹Íô 0¯4ØOrß‘ä#í`;2_M4óÑ/·KÄOöÓ8Y3Çx¹¸ Åž·ÒÿjH…3©q>ýwü㘙‚¾.ýqÏ2ãô1Ý·£ß-a­ä¿ë ö;ðÊ×@ÈÆÊ"Q·0õiÁÞÒñï S™D^:l(è×TØÙèÌÏü=ÔF¡"6=ºÎâg¢1>*ÏÀ9½e g“t37“¥&‘*ÿ™jV>X÷nd2Oímd!-¬çì°",Hmîu êÏßpçÏàK—‹g•n²$J…[ÜËVxoó‘ÚÖÃêE•‡Ô‰' þ|ÓøžRñ’Š>Á»Èšp–¾ìð6êà/ò¬{½ûø¥äcÕÕ z;äVÃÀ¯ ´HCè9™œ¬f.Ýѳ҃vþczÞ–ÌK/Êøvjè8°MáÌõîõæëç ƒðOq%koÿEs…jÈ5¡ÿÉG«fÌÿ¸É¼“hö^üGYú·_³ªñdµ£âe.¾5«# ¹Ïo*}À%Z’¼ë/TeüG!º6BuÐ…Àuêg¶áCòã?2ƒØ½¡?cRæư.âýoð¬Ö1{ƒ_wççôåø‚Ôõ%jÚ ÷á?^Ø]éò˜Šœývò«x”z®~L(Îë*Lmbuz»?%~Ù"û`ÏŽ€z¯úŸø Vþ•x/È?þ¿þ# ó‚Ôz”‚ÿøî×w5õ‰ŒjFwØŠúQ÷ý ͇ÚZ±«Z¤¼0Ó€t‘ÎXEß™!²•h+VOtÍzÕÄcº?l%’Ù Ð}R)Øš»²sg…¬#OÈHÁ¢$?¯=œëL+_€_œ#;ˆµk¦âã Ècà<[È’‚_¢†¸¾üpÕdbüyiØŽUDo«ÑƒÚªÿû„¥m…uŠ¢JÂûÇ&Z§jy±Ølvû.§h°ÌTN=½hÀ9Å'¯Dö³ ÏÐåÚ#<Ý:ó!¾£–ªGW&§ÓÈjrÔtr‰Š¶z]0þcœ ý3IÈê¢ÞÅÙU¿ŠŒ†³(ÈL üG5ê?Vb÷2c›à‘6°¿ëøº…àWË_ª¶þÜ“sO‚ÇYª )gþÇüÇM:î¾Tg‰ÅX…ˆÆkÒwÖùƒ™”Ü¡üzoðšÏ?yÌ„Æ+騫ܨ\&Öá¿1çѫĩõXe•¦2¢†=»¼MUµ"à32±G_VSV¥üüG`ýÕv# ;:V-E*)_*F¡ÀÊ1¾â5Ðýîiøþ¢° 5¨©hÌ÷¾À¿nÿX œÑÿŸÑàW%a¯vš Á¯¼LNŠùµ¬fäH¯áS2ØW¬ÉTç-W#àŽ „î ë1msë¸]ó±{±[Ú`}'ß½Gy¬ø Pƒ;j¼¹‰î‹ö ó£ ¡0že÷²n‘xÒä,™bVóÆûG›í^o~ÙøÌ[QMf~m]ø„<£É?òQÿÈÚ@dÿ¶" –y—ÍUȞ̪%y²Z¬CXö§¯ÂÇè·„·U?jZ[™Õ–ÛJÆßÝKýsô6;IåàPüÛ”Ws˜ < íUJæŸß5ÃËCiX Ä{®ÛœÖ1¯íD|È6yÖ*ãºÏdÞk0è{™ÇNç:ë’ø8)Õß•‘‰¶%ñ{y«çʱ~õ/M)ƒ>ƒ?öûŸüõžV% c®7  Æú½ï%ÀëXgü!j‹‡º“í-bþyJ£°1ÑO¿{á·–Û¢-Ça+ `i šÍÄw£þÃSŒ¦ÿnw1‡ü#Šû~†fáÎâ.x¶LÂ=Ê Wq ž7þ£"u<ÏDn¹Y† ¶Jíçµ;éôÏâ<‘Ö="‰V°¿ùT}¬_^ò!X±‚Ä>¹ÌÒ”UBÅ$fþù^øóK03›‰hó Õ&æ‰%lK,ýý²´@|,³S(üG)º[­¡ÏÓsø„ °|ùˆra¥û€hdm þ< Æ(lmWQ2„Sœi8ZFƒäæä¢:¾ü*-ý¯¦`›â?Žà Vùu]™@]b)ùç/•vë4/]À!_!KpæÆ"ŸiEÖ°æ|;?ëJòL÷ Ôò¥ÑDcèŸøG°úÝlzqÑûÍ\U𫃜]Mø2dlßY㜃ÿX‚Í+«˜Ä·ÍåÎ\%/«Fo²ŸïjGM½@ À̷ÃÒÄ"¬Ï‰Ÿ‰&¾šjV@÷´ÄOÉZTíâaGõÙDáû~åe,Ó±0qYoHÌSNÏöû.ó£âl÷±_Xe¨¬hå±6í/´¹½T?*ZƒFq‰È âÓìãOnæ”æÃij–‚_•¡Ûkmª²/‚ e£ÿ•ƒ_%„¿Šx”ЇÏßEÕRÀ«vú'ömuTâëɸ.›©Cô²r‚7 §ÿÆlòJ¦çíU-ÀÙsŠßQ9Ü ßÁý[~8Ÿé&Ëà?nKÔÀ+¬3ߪ‘ôßín Qú›:ñ,ð3è¿;År"¿ùQ-PÌ&GzGM»‡ÒMÿXëºÖIŸEÞ|¦•ëd s•Úbµ¡®¯^Γ>…Ɉí·Õ¡VK{$ŒÊ>N¯®V’ɽ£ƒ¿¢z—~ÅÚú´ Œµ“çङ’Þ†>Øø%Ösææ Þb?5÷‘ìí–p%EÅ{Éj€â¬xÝTôWå`Y×}~õý"V¤,ëQMѸ¤¶ú¡ßoÿ…rËǪeŸe¢nfTËÙ¨¸7ñr‰¨ðŒˆÿøÆ“íôÔè¨F›Ýþ㸾ŒÙÉÅxža9ŽÈev.”V©Œ¼Nuü.g%úïÆs%å;Ž«"®‚ôo)D_”“Ä/ËdOÞñm`¶\ðÿ—>ßÓšˆä_i…TþÞÂëkè_2—ü£ªpŽ:c¹–ƒÊóúðçoôXº¿>/4ë^Ö¦Â*—ƒÎA佟ùQé…ú6ÑBöôË6®ê¡Á†ü¿)»8‡•ñq˜Dx„Éò}bÓù]úŠvr'S&2¹Ÿÿ¿÷ó§‰ÔIF–—°—±ïVEAZ‚©yN©k0kô/)$Å\5!ý¯ËêDð°¤p ؤ–àú¦zæ]gê´cÂ;$3§…è?|µ&fLú·ã-•ÉC·ß1 û•½”¸ÀJδ6µ™9ö'hÀ9ŸûeÌ;øž©\¯7•$£xûÚ‰Ïõ¨ 6½ÿq’] ?™‘‘:«_Uݦþã…ÌÿZÿ±þü“lK¿âËfwø…:æL,€öq“ïÚDö1‰Ì„ªwô»ÁÍ Ë®g5ñ‘à’ÿ Ú ºSŸ÷ï=Qþ!ú—,¶u–¶œ:Àjëñí)PZšØàÕÁøžÔ “Kyjììxe`§ƒ¨î躓 $eýw¯Ã Å2VGÑ›ÍÁ¿ì%Cì#¶êþÑî?'ècô’Sñh à»§Ñ=ê™Ù5@6t«]¬ŒLuj¿²’Q×ЪB‡‘rð>ÉñMý©Çî£:п$h^˜˜þ»yðÜÉÉf<`6f˜3ƒµõç«éŸXÿQ5ÑU¸–êÌD_KíB*´MÐóöS&xái}[ §{›ñNæÞ½e‡CQV9ú«qÖòhÖXô¶鯱õé9ºº×°®³C§û.üÇbr¯Yfç ÝFûËü MŽÿLdqм¥6ÒÉc„5ç‹M §°‰n!«Ôê?îÔµÁkN€QzÅTªŽt±õ¯ÿ¸†~×›ª&ëÕ'›è#%Ýå·à×"¢ßÇìøvX4Háø;Ы-ùÒ-®¼½f$h …·Ni.t?Ê[ô‹ÆW¼dpæ®VQú'Þ0÷¨æTkƾ?gKjצv<¡ŠÆ—ü#,Æ>«)`Kò9°0Qe+ÙÍ}~ô ":*•l<¡_UzzygJGeòùLy_â´-u2šìÌWO†Ê8>.ºu•·Ùé_RÀ¨:ð—è_²þ|øÚ4bœãÖAWxfwí§þã5j³êöúïfe¦m=û„ªì G¤žå3Oõ¢S±•ö?É?ÞпÄ?’ šõÿ­ÿHHþQŒþ‰eEQñ·^ƒÓöÒÊÓµª¹Ñýnä_ª:Ý·9Їýš3U©K¬‚¯È+úgõ¯b¬HgŠcÆm=¸™B–ô›æâøÕ6YÛ”„¬/ƒNÏj„Á’…‘e=ú—¤IÝOH ¿ä7=éDE¾·xE$ÑçÜ¥)ÊÕ3ĸ—ð( øÝ™ üêi¿ÜoSˆMâQ±"âÝŠ%¶a¥›ó¤¹ˆ[€ïÇSÍhoªÒ—¤}ˆþã¶ö§…ê;éLÌYE?\dÌÕñl“þ¸³³âè¶vwWuÕ9¸»»»»»îww‚{ðàîîî60 îîÁÝþ·áãŒ0sg¸ÿs¿$OÂ00uª»«·¬µöÞDù@vbŠ”‘ZD>6 XÎg“Õ”Ú¼¾XÊ Øh æ‘‹sž;êTk¤W‘—ü¦“ºC6ßÌŽÏü]&ß;Ëüól`_ûÀ€ã’ %ÁôÅ®o£Rþ wrˆX(ð+/bë}܉¿ñXQÔ™E¦c+lV¥ð=[š‹¿ OT½ò[<ñ?Ô„Ÿéôr‰¬xщDhcñÀ¯éKܚꘟ7ØËˆJ8§0 km ÖÏ¡ Õ ©@ÿwÛm@„fñûØNÍ÷ïoò ÏýÄ*si€%Ï_­%ÿH‚÷˜ÁÞðùÇÀ¿/`ßÃ3ón “"²ê+° ™õd<”µwæ¿j/•Œà,æÅÞ—¿Êˆ>k4§“§nR™áPæ¨ùXäHäM]kðÅ©ÿX‰K‚xxÙpð+|³ùÒߊ­DDçÉF“R…Q\ù`¡—À-TšŽ^êlÊrT>΄’VäIe”º¸FeŠ:Ž_m+œ aߦÊ\ …÷œ§€œËjÃÈfZ&%¤~pÕtˆ¤GQÒR§ÅϪȕÇâ¿#Ç{ ½=‹=4ºš‰Zr*šªBÌ m'Ášöb:ì@¦bLG) •ÔWwW>£%¸Ñ>üG<¡€Ї߉nð¬·Ú¼‰ÿÈBÍH»±e÷’ûì#ª<ŠTÄoÕ]¹È?Ž‘$D¹û_÷”I(µùû©Àœ ~Gm=×ûý¯âó …x‹Þ«"ÔŸ§ÒñÑìnu s¹ùÙŒÌ žh¸s£û ¾†•HúQáÎh~â¥ßí-žüã>üùœoùG,ˆ¼Æüó¸î ÚK‡¥jæO£‡ûõçÜȳ*¸£QëSX¿Ñ{‰Á6I0MÞj:£ü+ú«d±1€x¿ èSF|Ê»ÙÁDüG"ìí~üßîâb¼Ý$ác®ôÝØ·¯ÎYýÁ¯JÀöŒ)ˆeOtàÌŠ-‰Ç8GþñN—C3T‰ ò%¬J½‚ÿi€i‰½Œ)3{ÞÉï ‡¦ÿnFÎV2ìÙ@±¹øØYhckLÐña–ócï?‘¦ÔaÀ¯Òà?VÂw¿e¿aQwl5¯ú[q´õUŽäž½ÁòÌ'ãº<Æ;"ŠÕþN?)÷vúÛN ~<«® ÿQ ªùÇ3|ÒjüG›øÕjY€U®ðvuAÚBýùh=XWÃ7†×¯É2À,¦æåzà$DÑ­ð•õɤŽÓSKêîê˜ôíßþ€™¨Ó‰œªªd3Íð§ì7j}U,&Á®¤÷ä0üG!¼Ò_x¤Ú wù@‡v±Úøý…xâ—¼-s dú-±~<,t6lýL˜þþ"_0×\ËJKÆÖ•«º„5+‡a¡ûcÅ&‡ÖÆæ9ùÇ!ògT|ŸUDv Rµ†¾Ü‡e,uÿ‘Šw/:×Õ ÂòãØÚÁ ÏÉÉÏÂ,í@͵‰¬á‹=MfTYÝÌ Š 8£†ÙqØÃüáT§œåì§›C3¡QÆ:Um«ðU“ù”¼t³Á€6â?F_éßÎL]ø…*ä|ÔB¼xWò‡šøÉtê+ovZô°3ˆ®ã±æ^v7 ½Ä|âˆAðýÇYk¸œCþ¶{œ*ÂïGl‘ }TCê­}èenÓUo/Þ¤¸^HdÿÙN‰ïèÃâèw]2G€çùƒŽÿHÀ}oŠ‚w§o“3ÜøéÌüˆÎ\¿YÔs'%kHÀ5œBÍå¢>ä³Ljbê²ß38›|fþã=ça†*Æý·é6²Z¸P¾†^‚»ð"Ma>ªéúøÌÄ ¿‘= ½U­äº{˜?8[fD%ðÞ†h® ÷„2ª¹n ÿáv/@¿ûÍÀXvÛˆnóO¹ÒFàaã©w1õgPÆÒ÷}>FOð à‚¿ÁÊ´%Ëm(Ã3g|õ‡ñQÁN¯êSQÁ5 qOúï¶…a~ANÖ…Ü-ŒÞij{Æ;E¿ûÜn„Æ­£ÝC³³“0Wþ¼8óo æþæ¦~ð°ËåÎì:®?¹ÝQÖê®d¡‚_­$›"ÛúáÏçÓÇ5¸HVÞ©û*QU¦†Ð‹ÿqL üzîf¢£Vaü[*A’6EÑwíT·– Ži¤JÛ‹=þã¸9 ì´Öc8úÆyòú·Gr;ùÛýVwKçÞJG÷îd˜%ÜÙ©MIÿÄ[D…eWÐÉðlJnñû€ÿK_?7²ùéØ~‡iR!Cq~Þžižbþ •Q4 þ£§u*ó£jY•¬iÖ}¦þZýÇ£=ùGk8L¿òéEk¼¹E,’ÓÅ|±Îú$ÊþóΜ·Ë<öv]ãäKÙ”ùƒ—dC;…L&ÿ€WM'¾³¯ÔŒþWÿˆðaUÖ|d·&®ÉJýÇ=Xfç¿ð¸sá?ªù™iøZÎwµðÂ4Æoø`·âGLê5þ#2*/vBU–¹y1±¹ñí‰ÁúkF1;)øÜWù‰7y?{ÉFtž›7~ÕÎŒ\êœùN_tÌ=™\QÔŸUùy—ZEȆcýÎÀ˜D…I jeì8¢å0jÞe'6?<˜ótp’Êðç·~^æÛwöÓͰvnµelÞ½HT66få9x`o˜®Îª.iLÊyršýØæK¬;Oæ43LcæU©[tú—”‡—Ü 3YŸlËé^²Á¾%†Š§peɲÿ© M™©wMF»+ÿ1ýî ¹Š÷p ,lrX³X­5ƒÍ`p£±¯.vzÔB3A^’b)×ã?Vp7wãë–ˆÍf@îò<󧀎&GÝ´KyËpÜo/‡f2ƒŽ¹9¨|¨¦K‚¸üAÆ“fz4lÀ45›ùƒ§¸%²î€_5e½é(ß¶aÃ/‘¯EÕ1±È3©èŽáªªs]Sê7q™É–ÎÓ§|¾Š ׻ϼãïIo¥â_ömž­£¿ª ¦øVMF¿›ÿÑfÁtoÆÔÑ;UA:<¤&6,Å]ò™p?£àÏ;ù[o¨LC}‡'דqˆnð›ð5ñ^é© žˆåEÿ«?aû»€¶}ýì†gXÆ—È:ʰ}õø»¨?Œç-EþQ(¥—L@þqMÏb~Tq°¿f¨›’‚ˆ¡Ï|¼^ê.î¢èF®çB–JݦjžçNeþÇC&‰8þ£“m·‘^LìHÿáô/9ªß1YüÝPÞÓoý*j±xä!Nÿö´Ä oɦÙq¨?¯ê¹Þ‘æ5ŠhÎé_òšúÁT76c6Çvò¢zƒîNæÑ™a;Þ ¾k@ýG—­ÿÁbøpB+ØT/bâÜGÿÝÁ²,QÎ ÎéjiŸp Öñ:Í©q¬ïêâöqÇÓêËü,îø •¹©s¿ÁOì–}@¶’çÊ¥âu# ¹Á+¹ÊüÁ€Êܯ¡à?ÒZˬTÌübÖf͹Ft«þc¥õ×…àð÷çáÏumG¼u : åe­UèwûÉ™ÔḴÞÙeÉß2žßW° Wà /’3Œ”áìâLKô’¿Ûy±ôå#PöDžûàù±@¾hL\\.!<þ£/ì@}¬h1ô»'Á4îaEãñžÏ“ñdE?=Yè?ߊÌüókÔr}Æfniy‹ålF\H€‘dÑè€è9¹Ý=XÿqÚ¨ÅÉ^.]äÊ£AnòñSdI{$™‚£¯\‚½ØóÍŸ¬fïƒÕ_·ª\MäM¹ dž{˜†óêÂ2Óxήü*•º‰=­CÖÒ¼ÄÅ~6¶˜‘±Èñ©ÙIJð«\ë&ò-v!»é¿»ŠÝ@ž¸‹¯bQ=V4ÐÎ Íú¢yZR5ÿá’äÌÂÍM„÷‘ŸCŸ´Oà<Žzj-Ê除:29ÅÎ@üG#¬˜)Ï ·ZKd±„üclQmVˆ—:žûwÿ1ü*³ÚÁ5°àU?2sîOõ{¬‰Øç"dÛá$ê€ì µ“cìTítf¦.‡ñÎ?Sücº37xÓnr…?X#?‰ìÎbôW±@KSà=–Sÿ1–s<ü#®žR”Ö;3†¹°Uvð+X¸©ä1ôüG æ×^÷·âzË„[¼ÆýK…ÿ]…­{é:'g2ùÇGª/2]cþ¨2ýKZc}›ƒæ¼¿rºôü­7N¦Á«þÃYÆUlÁM‚o®{ª8ô¿š½¬OÐMðoÕŸi%¯¹Ëma¦¢èŠÍ~™Œëç]ÙŠþj ‘A=uŸJ»Îª3¨ct±#À›ª“,Ào$¢â-*›1c­þcþcÙŽ¹×˜:_ÿ1ý•…ŒHœ×DO°›Ê-öBõ\Ÿ%‡‰î «|õ1WX:ÓÒ­Éæ6ƒ_¥eûÄ¿Áü~ú—Œ6¯ 7tUb °: §*%>²]Û7¹®ÃŸ¿£.¥6þÿï’«™+ k7üyTr¼?ETMjÚ~¼&{Í™b’üx©çt­¼¡Ë¹ïÑ¿}’N b7ÙÕÞ5Ð}ÝÇË=’ü£]º ÂÈ+×}Îü"9tšçøØCçÇúÿ—¿^bV½/}Ç(lþÚ\qß½%DךÐZÂü¨ßÄ+³9§ký¯²X ¬ùt1ImúÖùþLÐ_4&Á*·+Iƒ®fýwó[[à™†Ê!b„˜mݲËkàkV±}>2cuæGi»¤ùÙÜoE†‚? ²Î_C™sAZê.lX¿od Þærèw÷¯^¶GÿW²È´²–þÞ±Àw–”ùQWde<ÅZbJoú1îÓ±±¤‘aÙ^ØÑÕoà<éáâÙC‚õ^FV¿yòŒÈº8?7^33Ñ7Ê)òúÕð׳±'#ˆ]ú€_Ç ±jaõâÞ]`o‘À¨’À3$ ž†Õ{‚Uö—9ˆ/½ÌŠÍí?Ð9žüBÌ´‰ð·srò¶$OjI·mþiòÌV E¯ðR‡È@`±ÏgœO’yõå˜ÿQÜ7w¿w+^»!±Ýi´ÄËíW¢xŽ=iNõÆF{o8Y×stlmm¯@üGã5רedÚÅZìÃ;œêD\ýk6Í΋Ež‚•J*¶µ¿zÁ¾kïÛê5Ëê+Ç“¥‚qöQµÔ­o¦ø,ãsê&Û¡ô_ö­?Ó“ë ¸Ût*yGoôZ¹G=âXýYû¸bÐ3ÒÖçð§¨U*fWÄ“-òø/ò) ë;Èë¶ 7<¢¸_1¿v!=#Wèdî~ø·3ð3ƒé7oê°òÙ©& ãzïœA0šüœÂðÊ’û=Wüßûâ-Ï“»m”ô“üÚ.Âà d²&ZÅïBZõXsŽ‘„úóFø·•"È©ØÊFcœ¸DtZ™(•{"ŠÈk­1§‰^r6üÇ:¢¸=»|ÿß/®a3w’ a~mó9Ÿ~¼ù©ôk ßœ;„ú«6æn“bNÕ#êEÛ_ #Á"þ.7`£îÕç#™ÊªÙý¼þwã÷waè¿ûTIX ¶Øþ&vð ñ¾KÕ%öG¬rŸ7¨,¸[»`ýÇq# 3óÁç"Áþí"2OA÷wø<@~XÜí`OkáþFÚ+±ýãE¹`îb«4ˆÐ(îÝ-ò¢XÌÌð&1@éû€š‡Gt’˜soû T²Õy7»Y)zÆX`¾—‘AÕŠ`ÑV²‹ç²ö|;xðE2’:Tk¼'¦:®²/êô& §6Ñ¿$°^5ÙÀ¯ZÀ¯'%3(ÇÉÁ­©v9ÏOï°ˆ¿Ä=°ë:ßøó™d 𤯤ÀËÌ Ä 4ÞYÃäV›þ¿ä©¹²õßâ˸d0ia<´Z útžZò¡ü.¿Zƒ×s4Æ'Ùíf±ñ§é[@Ãfa+²Â9“ Õ„-6Ñ{YôQ÷˜…á‹ÙAýGøóZT¼EGA4}ìßÌk)rqqè_’˜l<¾>üt ýÛ£ê¹Ôæcšzw*6¶-çÑõçIñgÈÂîÄã™y›Oý=éyÔtà]øŠ‡vîÒòhc8#Tž&Æ? K{Y•ƒ? Ã/á]þ]ß…ÖašÝ;~5@V¦þüÞ»{ØhÃèÎ0'õÙãkÖÊ2Ô‡úóÛè—S-LV½9Ÿóa”éûÜãk~zd&Ñ òÈZDMQ~õ“iìähž§'£ËÊ$øø„¨Z7t%kê‚/É£OR‘؇îÞðä7Ѭoõ¼dcÍãÖ »1A{»™^@õ×Óœ(v³ÀŸ?З\Ü‘éXhÁL_GðjÝ B;æGÍ'ÿÈ&[S/öcÁ!à ïÙS.'?Õ1ÉïË“µÔ§Þ£ U’a]ó¸Ëñ˜ë¸ê±ðÜ«©ÿÈE…ã3¬ü>bŠFhÔê0“ûÇzGÈ?†É ¡Cˆï6Ë£ôßîôCÞ†ÿ¸„J¬¡û¡{‡«œ{2õç9ܱ©~ÉKý¹Vq£ì 2q ëaÈ_›ñãÓÿÿ~}Hÿ«pž;sýU`ïjH>#:ºÖÖb+þ#´Õ˜5×À¤·êÑSñµÓ¼’E<gøÕ1ì^=Ø_&V‹"‰5ÇÜ)þfþDZÿñÒówCòÅoâ-ìãfò§CîŸÒ°››q­{² )‰.,;c°³\¿N:Ñ¥€¾ÍÜÂÏÿ«¡¿*kÿú1Žüc(±õï¨(ÐUër¶F,ƒé©B6³…èc+yÈeê’LÞKÕÇJ¦j!§ÝÏo·Ö3jÃŬº±ƒŽª)7V:/‘’?¿‚5Ï¢6³Ã1Ä.È?Ryž}à[jµC§<†¿{‘½}•cÉ?Àa8ýw‹ÂLá~ú`¯ÃªóœýJL¯iú*ùý¯ùÌXmF‡‘öÕJOþþ£Õ$‡‰¯•9“6L¼ÛYPÀu`ygñžiÔBôWaÙe³*þ#2Ù€“ý]íªƒÿ*…wÛ}EÞýÆXM|Ö <_V:¹Dä™­Äô6"!lÆš®ág¢Áï@Í5oÛõmlªqzâ öÓ]q“¤¸›ðJ'í+àWš?¸ýÕ8NE C ùÈMOàNÐq7>øÕ4SåÑïV‚]XÆŸ[¨µO¨!Ô¿…ÿ0ªŒm}•1¾q0K°¹^øíö4loz½FÂ:¥)ŸEý¹ýK¢èÍ nɨ̻‚ÿø[Åàxèß>üª'ˆÚNÅJ”N(yÑû,ÑiÀĦ¡Œý|‘þíUu]Ißà, ìóuðœ£h&ÒùÆ©ðòýg¤,® pÞ|ìdpûÑ_­†ÿè¡›0¿ö#Ìr"´W«a¥2í*-õ;¨oˆší63Ü_ªîô/ñå?Žýð PãݱžÌÝÈŸ¿*/Ýÿ‘HÓ[é—˜ìéu*uuÝ á±Ð²9øUL½_ü¤u”gsèßîx¿Xª‡ÝM¯·O¸áŒîÐx‚~~ÕÄýÕTLw!òËþ‡Gu;2ÂÖ*’Þ‚oM »û©Éí°v,tTýìg*qF|ÝÚÝÿÝÍužÜržcÜÊê?&ë<—ϪùÇ´wø©JvÔ|{<þã üù"Ô‹Yo8ˆT1WN÷2W ú{Q‘sW÷fÇ£‰òšd!Á¯¾È˜œ»vŸ`ýÇi£uyå{üGSEÇ øóÒTEôædæVíU0°à&á·°‹€:QÿwÍ0ÆZ°÷Ø­Ñ`kkmÿ“T':(Ë0 …óÁ.z±Ëëpµðµ‚TÚm4–š ¨]_ƒeN '¿Ø„lf „ƒD C@4¨mä×Éu‘ÁÃ2}®H øUV³´hŒÿHÆT <Ü÷|z)¾ºcŸ"’{.†‹Ïì²1ì…7èÝBüg2êøcóÄNâ?ÚO¬±ðçIÁ~š ¼ ­fðÿ„±øƒ ÇŸ4± ÷Ï%ÿˆÎüó­<©Í¬{ ¼\ìþ ¿ÚfuÁ×V³3¢¸:Š8ÅÝ9ˆ7Ùƒ~Õ™ J’…n´¥t^½ù ßrTçþiõµq¬ûÔµd½¹p[Éx©Ç;ÄÁ,¡Ïw Wuj¼`‘³“ÌÉO­¢ƒ_WÑɈ7š×'*‚Õ]I]ÝüGøóèðc¨¡þ„ÿ˜£gªnôO|ˆn Û5GÝß …~÷±¼í9zgàÏ'Ñ6Âë65«+#Ùçé¿®%YÉ‘ºR‘û|е+[G·@9p½õS½˜·¸ýÕczÌð¬7’þ»€Pì®ð5ä6û”ÊKÇÝÜà_×Á—²ƒ_†?/@ÿ’O OŸ©"o…¢¡wc!zz‹Ypõ=×;ƒú ”:7ìßCÛ‹ïé®K?ø‰T®D¿vÍTq<ÝFîDdµMæ ´³L&ð+‡‰‰£&‘»ìæÎwé,‹÷ør•)ÇO°Ou™Oèƒ'ZÄÓÅŸÕ‚Sðóóíeÿ$‘ô`ê?²QÑ|èÜÂYØß]T8–Õçx2q±ø—Õ¦¯ï&›'ªû[oˆL…ªà*1P;¬ø1øŠ‰°)­ð^I@`Æ3¯fµÓ ÕA'ƒ?Ÿ~U_y›yUðÉ÷üôª>`Ô6Ç㹋©ûv3rÒöD}/Ôæ²&Òf¡¾ë*sÕ;ÁÔ¤ä¸UGð¿Ïì/..ª½Ös¹NÿÄ#< ­&€_czÃ#{£²¨ÏãêN.xÜUÞžùQ¯ÉâöÁÄr½†{èŒnÎz3ðŠad?úÝI¦·Px¨¢D%oUrÛmgÕ¡Ümé€2Šú[Ô³ÏGa\ÿTŒþ\Ð'ÒµðçÐÄÜ$,Œþª1ñ î3W`×JÁ-ö²×Ðãõ°NÅ´ÁI(¹,Ö›†§DÿÝÔîèw·ª¸îD¬^]Ê?´„=ÙÇ;®ú(þ ýîgô»¾ùÇ)Øt_oòãúBö«4™‰é¿›Ito¾uû\j¤¿úÝšÁ´@ý‹þÃËÞ˜·½ lÀ&U$·Ö1§«‹œ¾Ãºb¾Ù¶þó·þ€ÿo;þØAþCtxëõƒ9d–oõçYDoDPËwCõN¼Ÿ K}Æ üHu5ˆ]–’‰1`—‹“7Ì¡ÿnéwãˆmâ ©‡à8[ùùODÝõXõ5>¤'ºŠ˜x©26?£Ý?Øüã£yÊ|©Ð?¶Ç)H¼ómGlaøóØþx•QXTjƒíŸ¸ÚjÂκs\ÄZ~‘£P1ճ驺‹Y§j"ÚÁXÒÏ w“ð›Ùe=ó~·îýKrWîÂÃfçóÓ—¥ Qþ~Þ§õXþhe¿ðNžÄcm&ÛY˺Ôj™#Pþ#•ÙHT"?IÇõ„Å?C\ÐŒ¯žpçÖÛ.9T¼ÄJ5"*^ÿØÿ“‘û™§:ÿ1Ĉ.æË½ô˜\IA 0Y\çP;Ür& …±QøÓxª8×°¿¹‘Óô‰J0,@€kÞoý.ÿFiS¯p€Ø÷§É—peá¼}ôS™éŸø»Î¢gÝÄx£JxH½ø$Zúj"¿/Ùº! ðÄ €o­%¯˜ ª8¬)´ž¢©(Þè¢òSèâ Ñÿj#œMJ"ò»(|W©ðD¨ûÍþN÷Ë"ö9†EË@Å]5§—¬³\ÇÇ' %æ}s 뺋ùAª 7l~õŒÌ᧨£¨áo=/™”þ%Wˆ¦:¡>‚.i6¸¹Fþq=Rþoþcüƒøn*6†ã?²c•jÛ]˜_[‹j•£àF)Ðï6”·éß^ DWÞ$೫.ðîýNÄðöwŒG~y‹(Ýé ”2F¦¹äÍ vã÷ÛÑÅ~ñXÖÂìÇjnÇ€ãýDg"g~­‹Êµbt@LB¶œÕn¬ÿxnÔ ¶Ÿ¿†üË÷¨ç; øÓxþçd ÑÁ¯Éi3±¤“­¬ð»»ÕVtÝáÚo;ØV°)±9C±)‚ˆîûÞa;E‰†)™“°×ï~¾~žFÃÆ/# Gb¦4´ævj–/¡ÝŠåù€Ý‹þʙŵ‹;G-–)E¼@žL<³‡hÄ{“[š‡]ìc…ÄvgÀý¶Û;™?(á‘«Ã^lg-g¶pVîcNÔ†@üÇP#”Ø ©—¡6¯->)¬ZÉjcÈ9Ú‘mD$skM{šº…(–ýÕ>ö7…(â½Tx™û¹NçË V]9ƒ|(—Ã7cŸòŽ;«ŸÂcD¡þc3±t6íd#yɪà?á?&â?Fп=æO•§1Á¯¢óÔ2ƒqmÄ/ !w˜‹Z5ž^ î”Æ·SÀ½ð~%tlÊþ:cz.Á¡K¡~ð õuQí‚™œÎ5$CÉ¬É æâ?þ4>2ÿ|W¶ T%ŒùlþéoÅe–&¦8ÍiHâ“ÿý‰þ%u\ú_õbîCØàyÌÜ€~7—öVðìàí¯9\åI÷ P-5Z&A)}‘gÙ] VQ/‡ÿm©‡ROòËš–Îæ«àSº21+¶ë"ÌT#ø³Ù qqôîñ1?õ¾é¯Bƒ½¡gBFÕüê¹Zª{’e5Å/ Ão¤Ä†î`x3X–òT뽡²f÷.œRTÔ‘ìÝž'2Á¼m½B=Iõ³;èvO‘ž¿]É?ò€¨mqNÌû»çŠì.o~‚Üf÷þ‰‘‰À @ö±ËÁ²Žçþ 5 ïP^b‚{ªˆÞ®â4صÞè=šÛDä1}\9ѧ¡¾$#?«xäË}‚Øí7;êbw÷ä'̵ԟWæ´ÏÂxÉ—:Ÿû&µ7«¨¼ÄÓhåÊ ÿñVw"„OTµ;Ý´’»îeƒÅ*AÌNmýWüÇ'£€éÛyæ ÓÐÿ·øUxæò¥²¶ZÙEKñˆY³žÆJ†YÚ”äóãFqugCë,D;akÓ7¹§ì¾ ÿñÔs>BòEb±Ÿxr3 ÆÕ‘ge ª÷’OWE9yÿ‘ØsBþ§[ÑÉôÝ´v¡¼iL¦°Ö.EÂÔ!^ƒaY‡âø ñþ@º¢ä ‘þ*Š8Æü,Ô},Ù‰ç8 ¦óªIåùliAæ×FÄv3-ÃÀîãêŽ#]ɘû'ÓŠOV?ð«2XŠud …ñÜí¹®Ôøˆ::2ëxæñU¥Ö-+Öy÷þŠÞ®6 Ë*^ìŸøóØÖ-º´cãàž¶à?î¢ß Çüj¼Ã(Pa°€ê²ñàM.j>"‘WœG/vþÆ æ¾ÓüÇßéÞl¹ì¾°F¡Ñ§M%Ò€Åï ÿĦ?¸Ð30¡=®úh£2ê¢ì0Xs˜öGø¯£äØ£…Ãpúþ3S&'k{FüÔÿ»ß¾…WësRDélr:˜å¡t?<¥z0¿ö¤*«Z L'|¯Þa§?ùÁ¯ÍÌ¿A‡{ó™õUi5uâ&5•ºø—:ýÚ€ÿ‡{ZDzêBŠ =‹ wSiؽízNeÇÞäÙÜ0ó©uŸ·4Œêo7Õ©ð®× ¼)*üû(*ÎËaOÓï0k¿ŽçÎ뚉î©+§ 7>x.÷&ýó\ïÓKØØ¥’Ä—aþ“Ú…±øƒ˜—Ò“*É”®pî¬h®RãŸÒ0?ê0ÜHXr15spñ¬8­iTKÛïüÚub‚üƒ÷` Ñç2y‡š‹\Ù1ú_-Ô¦»üþ÷y²?`Qòƒ_5¢þüˆ>µX'ê§÷%ýK|è»rM½ÒŸðká¸wÎD·t¼Ùû<ùÇeú·Oµ8ïS8Ssä ½ÓU þü e–ÓM%²û¨{SJ:u—¦ßp)ô»É?fÉþØžkvreËíž+þï}ñˆúAߌãœQ¥íÿîÓ?g¨¨ØnU¥ÿÕ3Óa›ü*ÐwX¯èê{ä—–=m ÷À§þ¼ 8½Kd°V›+Å4ÙM,K`ä}Ï[HN*yΑixFà;^Ê~f|k³,DË¢8þ#«H¢+oÉü/â–þ¸vpˆêåìS>â½ÚE&ò¥å`‡úÁÔDà?òƒ`æ§î8¬ªBrÏQ“qpNÚØÚW²p°þãŠQ•¾„é祈½×»åÆzäÇVtጽÃΆÁæÇ VŸNîÔ*XÍÙ« –j$~ã&¼„30%¾(5üçU(} 6èÈVd¨þ|Vmú•¬6F›Ÿe<µ‡ûF¼‰yäuðMÀƒÏr­CÑESë°ÌWàg`›×€Ï•¿ 3'“ÚÌ&nF¨ÉÄùûø©NXüŒàɉÞÓå&<ܽ¨äTÅØŸ¤_ÆbŽü£)¾ã9úY×°¥‚äIÞT¼„‡ö_›J =’ÎÿN‡ ߺ‘W¦ >ña„œ‹Éäõuzk÷|¬é]æŠÜdoµ™¥tQ²=ómtbªûÒw êzøóÑ eÈ—ëá?zb–³^gTféðq=Á­Ò1Áv68ÖrX–~h— SÙÞÿñ‚5íûk¹À³¹ÑôO|`—F›1œùQý©‡Š§–¡R~„†¡—> ï¹:ã?®ÀW¸àNә졾¯[pÛà?r6c ð¯ï¹Þ!æqa2K­ïÐIõ†3œ‰ýð]{`:nãÉ·íÃkÎÕŸôzïFÁò?-<Å;RÄΊÜ·~ÐÇ\C][üÇ|NýVy—i†M\¸'ÀR]ŸÍ}Í}ÉÕÜý7SDbÝtç>ÖÏ9õ[åÞñû¨?ˆÃ¼E±ë[ÉýÞhüÿÑÿÊÁ¯¼­’¢õçNwœ%F+°Э*qUežÇìï‹óÆÐoõƒE‰»³Û3ÄK:&N1'ˆšøib+ýwÿñ÷÷ƒûMjqÿ±Mf‡AŽm7—>èLY[eVêx¼E3øl"—ç„üO«547™·P_&.¯Ó±\Ü©ùÈ.wÁìÅfÜ–9èÐC&—!ш¹õTŸ>Æ{ì÷w¦w$¦¿Žþª–Ô¥ªÓ¿Ä€¥{+ëë?îiÈØæQßòÚ¦_,g¼(ïRaò®0´¯°ôIÔF|rNj=ð«€sŠ^yg+ G3<ãYþrÌ3½¨þèÚY-­8C ®ˆùÇðn•ƒT6Ü5Æ3?*HW P°Í<§~°>üI;øÛ:ôßmHϯdvÇñs°Ï[Qô&ÿ<™äfEQU˜­úq÷÷a€1凎ƛùµOP*5…«8Šÿ˜B’Nö ,n~ þ£ýK¦ËÍdg#ALbÃ쬧ke'§+ ô™çš%ÕTjœÃG-Äoüï[‰ v˜¾hÉ÷;¸˜n(£¸S1È&ð÷òù¨µ8ÆÄ¨ðL&I?Á"p½Uuq½ÿ¡Qu­ÂB¯Ã3ÿÍüÚ€ý¯â[—e4ò¸ø·Öä4cÁø¦£mJBþñaé¼Ô\§z¾óÏ—Ã!;½¶Î`›û©øà•gé.ä÷Ù.±>ËÆd «ß &â†}Qõ¤Ú9;v»cýlúA­gúÑ!ôRåàiÊÁEüF‡®³jZëÁðãü­×YÆ©xL6Ú,røÕtêÙë.`l˜˜žy½C˜»SµÕ]WøÌÆäy3AÃ^¢hÿð­bÞgô2»•TìÚœ²¦¨ë¯¨ýôow4Ïí°Çmð$¥á†ºÚéº} ßsO: Àzʯéá?¾Hßþ%]ÍÃÖ#»2ºÞv#=õþ°¸JÔk$¡¿ú9´ ÅÝ÷©F|Í߉}¶QÍnÖ½Q‡´Gé6–ø#ý}ýG_æ7Ä`…xßß+O’˜ù%Ðï¶ÿºÄœ“ü[<+¯kº~¯w£ËÂv‰¨ð?UT³ Ýçqÿ1ýÕ:ðo/Þ]ÐM÷i*ë÷èk0Rºjºj»·¸_¹j€‘Vqø¤ß\© ¹š°D9‘æ{Û”Ïàõÿ/ýd42C{NÂ𫸞ßýÚçÆ7/QQ±Ö*.š ÃjÍ*KŒ¬ WU¬9Lîˆl^û¥åv“ìãž‚ Ãï,Û`NE§°@,Û¨H|ÿKëÅ(CìC25¸{%ê/ÈéfëŸO~˜·”*Ø^ß?ð7s‰y_œ~ŒíkNt^‹÷¥¤]E^$Ê=ˆÃ÷—ÈHèºBâã,±›úÁè›ð>¯Ç.Ä^?åD|ÇzeGRÕ˜ ›Ön¬ÿ¸`$™Ý&¿ÈwÌŽ>ÇW}z%NfNí'¬v*,tVlßB´ÑƒDÀ87àMílå`?ýxSn€+DžIù¹Tp¤Ó‰ÓcÂìÅÞ/†ç ËPjþÆAöO\lLfþGr>¿žf#Š€Oò¾ÞC=Õ#~í §ú Ÿáƒï\‡eÞ‰w§æÊ "A g2™H4"ÛHBÿ’ldƒ'ðºÕAN`cOÚGè_òþ£.¹Âv6û½p(üG`ý¯†÷°ø{ðóØ…‹üéÿhÿÑö;ž¸2•8'¹êÑäH™Èì¶±M#O:n¯¤ÿîŽ7nýK¦ò3)P¬æN]åþdµt¼JÌ,¤©Ì˜È¾VAÔK°¥ŸQšmÂ+Ÿ&[Y# Y8À§¶œ¨¤W»Œ eú‹ç1¬);Õë2sâÎ JtƒÏÊGýàbüGz°ûÛt¨ ð1ýëm·[QÈ®N‚Á¦Â#•&÷uÁ,ÌÒŨÿè~õtÇ‹úcì°þ£:ÀV¨moÃæ8J‰^·_•séÍeÒoõƒ˜²5D­°o ÖíuOò® E7ÐÝŽ¥Ö¥ÕŽ·ñÃíˆîWÀ§ÄÓÿ œòö£5Ù >€˜ÚQ­U§v¦L»E¦ç}M_AæF¢â8š&ºýw'1ÿãyÏ vïEîMŰ}ŸÈhú—ܵ+ ëíFÿ«]vcy¿”œ—,èkß²¯¼° ‡ÑœÆH·›á cëÄ¿á?ž±í?ÿmð«±È?~Â÷רæôW³¬Â¢1ýwÛ°æ4£„•Ùja-‡­H`÷ý«!øj/ýKN’Ó•C‰WÖ¾,âŠÖ0ô»Ãä ‰Ö30L#è…S‰“¶Óÿ*Ö®5Ó9L»þã2õƒÉé”Ûl(w°¶ôûê=Í}æCñœý9(P[,X]5Œ­œ¼Ž•rú—$§þc« Qþ‘Œþ%·`?a‰/ã¿!–nÃ{ýÏáôßM¤~Çî%†‚ù燌ÔÌÿX$ŸÊ„ÄÞÛ8[Åá?J~ÃoŠ¡¡Ù†ZÈ=þÒÞ%2zž}à÷®U‚Ìc ãÞÍ «T?QÙ_XEI|ƒnó£ê±»²x¸·°k‡°he¨E©Mìöcƒ—Ñ•Îá]Ê{6ƒî:;é‘Ñ= Ø;‹ž(]\3Üë™?˜Ï]ϵúÁôn££ºžÛ+ð6ýxÃ߃úWê?nÀø¾w™Fèëg\_È~ …Â<Šõ—•\4ÂrئuF:+›UýU8+§y2dËüço4†Ñ?±9C1ÞÜ "‰HiÍ27R§¹Œúóåô/ L“ôGÞ`8‡èŸxµ38FoØ7*,S¡®0ì¼"›ç„½Ž··Å<->w¸é‰78©’ZÄ™(( Çñâ¿äx¨Ù2µL'#„`E7øÙuxüÛħgØÝGÎQØó¯0­ˆ,²©šöC‡Uc‡ ÿ•·‘¤k1ýèúÁ DI¥A‰rS}>û÷´Åé•°½Ô¨`¯y¤• ­+Ñó=‡àêâ“Ǧ*w&V/,v̺Š{ñl¬±]V¶3ïqûÖ1ðĆòTÓg$‰®O®…²ûõÊFèw€@ÝæOw€÷8Qùð+ßê»t!3—hÈ=J Sáô.=ÿQë=ÆÙNO܉â!µ_µˆÃÏ“kÍæ’äÅ¡Þd{ þ£“ñÒ,·ó†;ÅcqesȈFÃâ¶ÆŽ„#?êþ`¥'¨]nµ Û»—k¿BL¹C1}­Õ÷®±È1ÄNÿ«³ ?÷ðÑVµ˜Ùq ýîWSáwy`+êâ‰SÒ~öy-#cÈ<NNtfÕdÆC¦%?Z .åÌ£Cïó(Úéßžü£Ñï>²“ô¬¿‘\ —º2|+>žÚ;@ÿöù–Á3½ú—Dª Û+5‘™%Á¯:лý3l°Šã?ªR?ØœŽ.õXï ÷À‡è£³øËßÊ4tu¹JŒÑ¯½Ó~~5üj˜J­Q—žšŠø£A询P-~kß-ÙC•f¹—úGÆð¬·‘wl;ëMNÛœücŒÁz—é¿–‰º³ñ½ÀÃJ3qv*× ì·5Öy ÙBúUí&ÿˆƒfÀ·þ¼þã6Qž¡úØ-ôòãÔŸÇq­‚cØ¿ð¶Bã?öë“T™DtÁïæÂc*´Ð7©ÿhᇑêÆ¢29ôlû¶J— Ô« +ŒBev„:•0éUÁ³²ÑŸÑ`J{4ÐÅxú§õ2hJYpÌ–LPùq–O™“ÄrüÇ2,ÔXê?næ¼À×.ÔžgkMdþyJw2wuüGwrW;Wiæ–\7Þ޾Ÿs*ÿ•ùQϘøáÛ+ú‘Qù_…1~Óï&¡~дªr–I©>¯JNò™UÏþ¸]!úõüÇÐñ¦X„N iDBk8á$¹T,Ĩ_äÏ‹‰ûd‡eA´=ìîØ×ð>T(æ¦ÏHiÛ™ƒíõ}ãÕÍýæUñdI‚õÆÞ×#ÿ(mG°ÒÞ ÙQÇN§,§Ÿœ<è‹'vRéR†õöc÷Öpb¨ÆXëð-l‹þ€•±{°¸IíŽÁâWwŒŒà\“éGOwyµ‹}U‚Ñ/þ4žæ ë'P»ALÑ b‡«ßíkåÉoJÞq’ÓŸ{›kVĬcÈ?¢ªÙàEgÀ¢*GÜÿÑÁ¼ÄÅ®0Ƙpf! ±{tøø&\ã "Íuä}èßþ÷À‰é©$ïy‹ÅÝ$ ß ÙwéTfÑ|+{HL³‹sÒˆ»tŽ,nþcx£PîbhÝhbÅôø«pJ>ø¡Ìƒ•Œè¾'è©Vã ‡óû–0ðoñëõíô¨kbIcP/±‡ÏÛi/"Šø`ï'~ÒïnEµ†MåùÝï†ìWËÜKÿ«MôOl­wÔ}˨ÿøÍªIýà'ªχl™ÿü­MßêÏëÁ¤#Nz!ŠxÖTs#·Ro·ä[µ’…³Šë<”µw©e*ïÉ¿Ì0¦è8^Nb^_!0æ |ÝFæfó’xÞ6"º«Þ XÕ`ÊPîMŒy;™ª• 2ý?¾„¿ï~µ¼©ÿpº¤"÷Â+íÂ^AYô›ú Ë\EpbÎ]t»S°þã–›J‘Å\Ó{ θ,ÙK!*—ƒtÿƒ­ŽÿO· û8IÄÙýmß ²2Ù¦ZýÜI|ØTÅ ”RÐÛ0?GØ÷­'¬XÿÑ;H¦ë9õç/d,>¿6ïÞòÉÖÇ·cªFfIøà<ç°Î»ðWgÈË—Ó?10M`T3¿(c›äN?–£Xg§“C:îáG2¡}Ô:j©ŠäËy&Sȸ2 Œ‹JÖu(ÿ1•9ôãäz´o‹ˆ{3ÁgÏ #jG!7ˆ‡ní¨]jbï)ª3ÜzA¼ËAv¸€{s—Ï:hnpã3p±f‚o*Ú"ê>ØöI°¶Mè¯4Ýù£¿*¨ÏÐÿ*nm´N¿õ‰ð Ô^M–ðF¶°÷–(wÆÓgñŠZDæ3ü*ùÇ*ò4ýúÚƒ_-"Þ©·S¯‘þã²úΘo}"@ÿÝõä½¹W‚ücOò0LðtzŽä¤âºýc_PýÁ< <\f:ŸÀŠ»Ñ}Å¿mD5Àn+œ /ßúÉôxr§›}"‹¬6“~¾­A×R髸4ðËéç;žÝ¦sÝ£Š½)wvë%Ò¯ðO¤/ »È¨gv$£m¦®0?ªø•›ùQ—À©"¹ªÀ(Ó‰‚m>êšÂ”ðFTr ‚]8JþÑ6e¼Å{2.ßn´ÌkÖ »<áp»Žnúàe/Qð‘9™ˆx ýnAâýƒøËœ®ƒøIŸßåºë ¡â rÇ,²¹ôín4šùÕ’3WÂ^k¿P·¨µJBdüYG”[^Ô7.¥›LS*J²’q|7 øU}ƒhð"?WžNB=ýÌÚ‰~w,™ø&ô3È(.ë*ôs¡évÒâo¼Z_곸£á?6¨ìîè¬^‚¾ÁÖÊ^¼9÷9Y.ùoÌ?GÇ_Æü*lHXçÂ÷„÷U(2ä˜ôºÊ'šŠ¯f[VÙg½ªn-„ÿˆñ‹þc±1V  èF~ØÛ-"¾ˆoÍ6çÐ'f&õë¨(ñÅKƒÛ™óçåµHÔVÉ‚ã&}šâ[Þ²’Kß~:m°µØß?§õçwDx¸èÐäƒà?ú€ ä†9¾ðí :Ô˜ ð¸2‡Ÿž¢Aï1š8 î°œŸ½°÷ÐIµÀ+ÝÆTÂ>JUÞ¾.c;Ÿþã‚QÖÍÌðgÒé7qŽÞ“ùñg…ÙY?;»ºNŽ{šÜmç®K ¥üîu UN§/JÕ‹¼-n˜èäX7ügU‚õ¦2Âs$ᙆþ©:ù»~ðóõ=c†ù^fþ#1l|òÖpÂSà?¼í¬0¯5ÕKüÇ)bëu`bkð¡ña“³ÊŸg0«“„kÚÈõ"{«Ž•™üò4wñ„èIÓµ1 GiÕ^v=_$/,g¶â?á¨-:ç´f73$&¢‰èEŒP;"ñ Á¯Ö~ÃHÜDÚ+Á¯vqG¼qµ8dîösΗ׬©àWe@*Ö¡¹ªŽ_ÿˆ…í¯ÈüÚÛÔbG§Å ØŠ´0àÕÑúdvX õ†ÿfá?|£Ýï çbÞlzpÍLØÜ}ü;ìi2ü¹©g©yè¯lXÚ.ÌœN¿ôȬ¿ðm“æÏS Ýižõ÷^°Bqv/“¿%e‡%ÁøÞ©Áz‰.†ÿè ü”Yz÷°Îc˜'’NÚ™UL–À¿›•:ÓŽæGý)³Ñ1å<üZc°Í]øõzþ£·J¦C»W¹¸îèsDûýUwþ»›ðà ÉeÞ‘Ÿ|T}Õe?óÏP?8ž3ÖD=ådü®š€…Ò—©Kq¹êÁÑô…ÿƒÿ¸ Ï_‹ì¨=‘‹+c8•aÈ"‘ͽ’#uÅAw»^÷‚늚yžºek&•óÜ¿væ¡x‹q¦Ü:!šq­ËºËà u=EW{‹þ‰5À¯ÎÂú ¤ÛpK°«(Ä^^„ÿ€+UÍéZðcƒWÍùœ½òpç­È(ÊǺ‚{å Ýú@×Éf®!îËä)á?¨ŒÐûÝ]™t8×]Îßø2 /ìgbáÿ‹¿†17}g@Ü¿ ï¹O¿¶Ðæ3:ýwKPù+-‡?_bäÁ4‚ÿeEþÅúÕÆüGÔ2é9çÛ™?Ú ÿ1™ùç Ä.ô»Í„zÇ•…Sß¶OVÆ.÷£Éyp–¼ðåÐæ¥–Á5òˆ€5[¯VÀS!°(T-¸”/vMtYá?îÁП#²OŠ}œ'ãÓ³3$5*NýùMY [éC$¾Ü¯¶€›¿!®ý‚½øÌ¯å©X‰E ™Ìîlþqü*Æ·þ% æq~¢îDÝmì"D¹kA„¶¡DêM¤Såi@;ðšÇX™`³ûE ä;ûùd.¡¾`™OóN¬ 3¿ô­£Væ×å?è?O¥€Øæ`µ˜TÆ·"gØbWQ[©¢­G_©d‡àÍ×à–ñu,¢ñÜÖd2S‰ª \ñÔ|"AoøìzÜ÷ÌØÄW¼…GEñ$¾"üÑ>ìÝ2'§ÿ•3Cã@ þc´!™¼ „i%ˆUTlÍžBgìu3Ъ×DŽuð¿û‰æ'¢-E„½—ýMÇ[½„??en pã¶Xä8ôWiQ¨îÆ‹Ýä\¬ÆwŸU é_².Y» P^úsg~ÔS<åøß—øÕô¾Éà-ÌÁüÁÄDS9@›|@ĦpZFS›—_1Zçdž*×^~:3øØ2º·g%K9›1þ#«}„·Óï·XáÉ–÷ƒÈçÄ•Á ò…:2?1ß›ÕÕ n¦<ü¹ƒÀ õë=!ÃÙþ§p:ùþ3€çš‰«åª;°Z¹ªÜî˜ÔŸÁ³Üà'6SÿQš³^½Ïàýþ_þúÔ(f¦ñÜ™øäžßýÚçjæGE´v[¥Ew°¦?Ye«‘Í*ÿ1ß2­|¿Ø¿ä Ñ^Ü•mñÈ9ùoþÃm-eÎco¹þ|µ|óÝ쳜pªž÷£¿ºBTÙîÿ‘Ëò"îÏ cËf2´]:X,çûçüFýàØ”K`ljžÙŒÂ:óϧðF¢±Ä2Ï%ÿ(ã'¦ zŸ¬³â4ÑÇS8ãµä ïùÿ¬úQ[²‘Hh5žÈ(pqìÁÁúûFvNö4ùD†ÅF›QЍ;¨ÿìß,^ âõøäyäcÁϯn¥ÄstÅÖœÇBGÅr$Áâ‡FÓ»úçwbvè²&U0m‚Ôïn0þ4?È4ðuá)1ü#âÕWqþíµT¬ÔF>ï2ùǼÀ|ôO«¨Ì L¿›ÒÌ+ À^'RÎ<Çž·à¤dçg²ö º@ßë©L\¿ï7*1u4axúGñýŒGÌÿX7X;øÕR¼Q_”­ˆC56é7ª^ö‚±BZ\mÍÛ‰7=Éš ÿá;íîû“¾lµ—³É`va/øÐb‹cdiÇ@¬¢b³¦ºLfÈy©D÷ËØ¥&O:B}Ìm9•Cc™\Ö=j_Û‘ÏÌ…9nxÙžE´…übŒÎO'ŽztÏðA-œL‡Ò»ðqYá®+“Ž…ññøÌ þÞëC– *yç–éÊwK8˜ŽKé2ŽÊŠOXÃót—ZAÿÄ"ôo/І žëþc§h€hâo½©2%Н³àWýÑøØa§ÀtW)õe×Lús=ÐÞÔLT-°¥7ÁsŸ‚î…Ño཯H߇Œúðç ñªO¨ j­ÈhöµV§IMú_-CçÖU|hªë݉þ„S\ÿàS;‘+°»à´…ìYžWn’yÚzB÷€çÄLÍt»¥|m{©<ðÛ¨°_¥7¹â1?j?õ„©áÏ_Ñà¾Þ¥;E4§åZ¸«Xò?ý‡ÑGéûü¨¹ðúY©NI¬c¹+pÇZÀj=$ƒ™áª~u•õ{3µgjb>6ç]¾B¶Põpm¢Žðþ#’çw?¾²_#›_MEþ‘‹þ%ᬬ²Èˆf¥¤d)ݪ"9Õ4ðÕo£„ÉûÛû×Þž%l‘„ùç‹ÄD¹ÿ±Áº$Køz½ÄeÖÙŠÉ Ü¤ uÈméµ[V·?ˆ¸rè·üÃ×¾Æ÷ïÖ¦’÷•xL祘ª3UÅçÐÕÌ-£N:D ‘ÜiÝë…(ÿxií`(œþí;±‚Oˆu뢾28· Aµ®sâÞËè°Qì*Áú‡?OLõ¢A¬Ó´5;±g*2ív°HÔm8ºÄä i±¢óÉZŠà¢…1V*XˆÆDïw°W?AÍ7øC!2ò10Ùwþ ƒUeój·o»1Ð4aa¶à²pö± ².y•(|¯4ÈyüÇ:2šGäaN¾sÎ"ók¿²b3·¨Å½ræ¹'â)ÅU…ÿ8Í=\aOMÄ=,Yø=p×N­_8˜ ¯r„}#ÿ1‹ùƒ£ävøŠ• èÉñ3àf:ãsëâÕ4VY;96j9S[±•Ha wâ žî/ê?VØá)«›È› ¤=wêÖz'¾{ŸúM‡¥§Ålü’°Óåun4­øæ2Â)=‚¿-?ý4K u¹3ý|炨ÐÛ¿„è86üÇ|¡ÈX™±Ìÿ˜Epfx¡[0èÉ>Ëpöº›úÝâ6+1Á#b”B¬X ËÿEÍ–FRq©³8Ä,WG¿Ûš •Êô/9@ð݆æ5Uí8 =Äë9þ£ U —즰ô S[Aššé!*¾ŽäM¾pþ¼‡žLýdö9¿\}Ãò –ý–ôí‚qÀøÝÉÛUK½ÁVèÜâFÍú'}AjéÝÄó½á(rÂ7LE!¶ŒßqI}/4ŒÝ{ÈURÌàô\nwæ<¥ÑRÚu.z$d?kÊüôÌ?§K:ü¹vt}ÁÞï%[2˜"¸Q7„CA…ælÞšÁôßõÕR:}”l"ÆRø£K*£ŒkgfjasX£x8 {¾ÞÕÖâ$×{ëä7P ¿$ÚŠ"2öá(Ñ’¯~׋¾}ew|ÇX"P*at]úq5 ³zM²‡ª”œî‹îRäH™PÝ™¾_Q!œåÍ;&çá+Ã=EýWôWOðõ.ÏIxh5ƒ«ð<–_$4¶êã?¬oóW¹éžX ý•mEûEþ㥱ˆùƒ#xc*€À,ç¬{ÔŸÀ̃Å&Ëûë? “1ô…9-ÁûžóÛüó¾æ'ó„,nþ<²ý›¨ì¹.Íßo[™«Í›â+oÊlROâÀ:j<‘wCù1¦…ñÈQ{Ë´2½ Ê’ú]06z²K2 ‡Ón_Û‹rô9Èû{ò„ƪ´}ü#‘ç`ýÇ?Fzú7NEòÑ.S™,Ûd?;¸ú¢äGa öâSÚ“åÔ§‹Q”`®¹U|ÉÉ?î€S…†‰NŒíOž1Œ=4ÈÝiâê=  ·9ûÕìD²Uó÷Pÿ¦ooO*2õì²4Wí¶àE¹™Ò\=…¼Ê¿XmY*ÔH„È.£™iEC Nrû.±b/ûr þc¬CŒ”[¸ëóT{¢÷Ðjöáÿ÷àQdÛ×wUS§ªqwgpgpÜÝÝÝÝÝÜ-8nÁÝÝÝÝÝÂû«péá&ùß½ž™tšäô)Û²ÖÚ{Â? F”«‡¯ÿƒOŠ Š‚‰-%ZœIî´‹.bûôþ/)¯; äDâþøð)±7± »8oßùQèAƒ®ÞËUvê?Öb_™1ñN©0™¡¦Òû&°–£ŠñR¦àjf&ÃØLÿ’)Ä=Ûl-QÝè xÕªæîAEEKà—rÂÇ¿-óACôšÊ‘=æG½3’Q\Àd ã*­šPÖî± Ñ™¶?šÑh®ÃðÓmPÃVf‡WTÔ¯ÝùÜGô^î_OÔpMòÉ(pFç@[£Æo^¥þc½Jš 1>N*=ýKúØCQ‹µ#¦¾…Rª%Øâ|õ”~¿>ät'¤Ÿÿ¤VJŸE¯°¿ñºõÉS¦ÈTÌ?ßaUÇ:'ŪnÿOÅüÚeü-G=úb¸†pì´3HXr¥XœÍŠæ0÷£_ byž¤Qf-«Ž¹^>âÜ5‚ãIHÿ]k¶ÂåaŸdþ`R{‹õŠ.+Âö¦óJ.Ž82|Ê'3’, «¸·öþXr|Wž2¡™ÄºLÇ]OrÀø³]T~ÌeêÓ|ÜHŽvìL{8wྦྷ°>‰™Š•×ÜïÎ?ž¢ :';qÇ#"ñ–ó¬L®èÌÿØo½¡ûûú…õrMc"HEj_2ÿ#Ç^Ä Cýùó”œÊ>.Óà½ðëØâ>ôÿü ½®žÞ}f®ƒf‡ˆÿnKõ)Ð_¥D$_ýÕ2­ªÑܨk¬gþ Òüîƒ|ÿÖZ”µQœ¤pªÃD<‘×X£ŸóäTú_Ý¡#Jèð«?…7k­•™PtÕ4GP_×J/CÿÄšä‘èNðý•ŸÂ"È-ýëÍRÔìûayïÔÁ*4Tƒ±ÐYåclÄ1´Sá±bSeDô»ÏþÝBÿú·ˆâ´x#ë“/xb5½A£ØÑAìÞp|]Z8€Õ<íÈk™#Åž_æG2ÚÈ霫t*_sÿ}›xšù€I©Qže¿¦vü4lzˬéÄlU™ZŒ®j÷Nn÷3ùc¯é™ÿQ˜h%êØd13¸*³ÑZ屯¨ Ô|·Š‚j·¡žb X’Ïl SéªâCÐDÀïÏFð« ä0_ȸ& ì#’„í+LÇÅ`îïð!ÛìNL¸ªHÿ’Cø_¼ŽOž¥M´F€õ†Jë5OEC8¢ëà: PÚ6±þACìè¯âÑaeн˜ªŠQV|æ\u€=oKýÇIúïÞ%sØãOkr@k¨/IlÃY© ÒW0—r”éù’ÄêJ½ßò™òÔŸO&ØMýù0¢û=xš1¬æîVe4=Ý;üê1ú«oqi«-µ½aᤆ€Ñý #³_ž ýÕiŽ™Î\V\âû¼ëD]©gg¦—… ¥uÜÇ;’þWa¸×+pçÝFßÿŽÙNwí:ôF½½3¿¶ õ)™Ðï ïŠ¢;@\ë!w×aòì œóÂf·ÿ8‹?š*«“ÍL&bš'[Y\—èÌrÀzmÝfžU{ºk¥ëWW:ßsåÁWUƯ\%C?/G²³œ­•ÿþ#¬^[÷›aúNk®GvŸ'÷Ñ‹8ÔE„ÿ(ætŽðU›¯ÔŠ ŒfÆãøUèêÏOQÿñ€¼µÑ|}¦e&ÉŒƒØí9’éâ¥Þ¡Úg±k+¯ Êr\–Ðó×ðPwDÙò‡ø#D+vÕÏÐÿ/Öà 6¯*ˆU=õ79i*ºê 6ƒz<†e'c‚`…¤f2ªØ‹ÿ¨ƒÕÛ "²ûç(k_ï‡A¥ñ™L$?ýKt0¬÷²Z°ùÇ1-Vy…ü,MžÐ…f^<È Îã`ìg^õOˆ…=MÌ÷ãð}EÑ`޹—Q‘L«>?‚hÇÂZ&Á»ÅÅŠ A-õ•'òǼhx-þ(9ùGÝoPÀgý?Éhê9Z0¦„ôOlHtÏq vª'–ú3ÛFXOö;ŽkõÖœ~”V;>õç%ˆw?ó—#ÿXV…suÕŒn·P ‰°Ì•ÁqÖ`»{m§¦b8>;¨ùQ}´èw£GrÔ´Nf5‹ã‰ýïÛŽºáœf:º‹Œ"&• ì+¹ZãÉËf™óéåá­Žý.Ñ eº°”äýá6ÎÀÛ¯ãÜ;¯"¢“B=D2ôWeè¿; Äå1Jå1ÿzÖŸEÿÄ®Køó"|^l›­ÈF˜õ­¿‰Ù£Ã¦¤±ç“´dÎîr;·ë9üÇ#rÂ5t[¿Ê{Û­†D Ulk*Þ0œì(+ºw¦~_Ø0x¹@sO¨Ä@y­–Ôö-CG|„º¾T®(±²Âïg¢ ðl×{ò™ˆð0ˆrv∲æ:·ÿ¸¡/‹@rƒÖ!ÆÍh§u-†yb½°Â;>Ò®æºàJè*áêcŸTÙ\uð—)¬ˆöwžæÕøÒppÑÈ?–|Üþ+ß½ÐÚë~ìäcô»AÍz ÉV\äyFYòitàlo¦bZ££±j¿$ú•,âþ™­ÚüG T«©a[7ŠX"3õƒ+ÁV‰íø×¡ÔÇÐóÏE 8 ›:Xž”½uIÿD*—ÅÑ”~îåDàžîÍxÑU÷fþñ9Еçx¤òÄ¡¥yš ˜õåu¬ì!®æ üÇhT]eHŽÙ‡˜_›˵‰8bj§íèl>QßÄÂ;*¬œè¯ ²ˆ»²B°þã°–Œ®R+ä8Âd4y8Ú§²|¹»êä6a†€4ÍŸélý`k#ž£;/qÄ‘±ÕNÿ’Ôtꯊ£PÙVt[A`×)ÍôèwO8_~߬цëפ£§mÀ¶áÅÞIgfà:·¿Æg6Ã#…UÛÈáÎ7ÍeŸGf>Næ rþGz=…¨‚NÍV£y’wàÝûeÃD†ñ˜ŒÿøÖÓ”Ø܃ã‹ÒPÿóœ (ýUGíYàt£éé ´¯ÙƳ-Ç©c+€”B“0šÜ$«ZÅç-cÝEd ÃÅÑ_úïn3FÊY[lýL•d§#g) EÊX˜Y4-Q j 3…pxØ[ìøbíuü²TþÔ¢?Î_Aú—äB‰þÉܬÆI/3—•ÙÕÈîÏ~1ÿã)µ c8âƒd]3|çS…‡¡Šn}Y=Èš´·,3ñ~^ÃôC™s÷¼Ó!#ý³Ã=u'ǘC÷âAvô»Oð"5ìWª­« “Âr2CÆ™µÿQL!¶z+Žü\ð¿øõ•ÖÌ_%Þ7º™„, ÿu‹1™ž­U Qùµ-¸»¼´RÆFC|ŠEÿ«ƒ¿þÊ¿y縶‚ùµN­:ÐŽMâ©ÓhOß2¹Ž~Q'Á¯BÒ›Ðïâ 'ŽŸi%v³ƒ¶~]Oî'à×nFY<ÚtWɸ"`Ó’¿• ]L´;ædbëÑ2?#Ëm&cÎι€K¸¿[¯-ÐcšùØUmp¦õ°)¯‰ºššûÈ”þW“èõš•ÚãÜåku—;uœûpÇêgÈ?šáS{›m,/&ʬÂ[6·/ÛôejïV;%z§Çôl‰`_²¾’+ÅbnÇޏ7þhYUj‹öãO/pW2wûÖIÇ3–NJ挿ð°ïX_¨?ϳÏã?&‘mÅqÑgßvYOP á·þ2{«Z¦—ÛÜзá?*‚èö念òüùa´o+¬˜öBë<³»¹Ž’!U§_—fUv ×ÌMgÅsÄ®›åhìÚAâ”ÿÍü¨—Z+“`ŸiýU£ÿ<_!û…¹|ÙáÊ[ˆNâ‹îxëuZe#¥ÑßXç[?x8dËüë§Nhâ»ìFž\ûøjdDüI¬•§©?bÜ eÿÝÌâ+ ½øˆ¹šÁ|ƒ{«_$÷Ì-_Š…°a­‚¬rþuÓuõíôO|˳÷+عQx94]÷°S§àYuìãXº'&‘!©¹—b·ˆŒRÇÀ®¾âNø„=®eš $>ØÖ°x‚æEò¦„ôõm¬ÿ¸­5çóÇÅ$šÝJ¤|zëÔbéê(YÈjò„>xô®"®û©øõHwfuQé ÁûÜãÌùÈ1äÕ™¥0V¸%(û¬ÿE°« ÎSàÂý›ùçOèßžÖ™¢Áùɰé'Ò˜3x™žI‘T[fÌu£^Œ'¸Žï؃…~à°íÌôÓvúí2Ž^S”$ J¥_>8“-Ü+e¸[Þà>3ÿ|©ÈkÃNW‹AÙÖ{fY|/»àýVùùêí³1H%š j‘˜ÿoù‡,躔1>ɸf/§ÿî^Žù¬9ö=/\ùx+ª}ÔªFÿ¥Ã0õè_²Æ>3Ó®ž‚FMSˆVêuÒˆÆU½ÊÝ– EY%î ~U׬Öt\ììûqéJým«S§RH½zÈš+ñ‹é¾ágOCîB]hJu‰k7n}ýn[ÔÅ‘¬Ô#&¡þ|¨½®|¶ô¬Pf{m#?ŠŠ` "3tŸÁCX¡±Ä9]Èg:€b5¤þ<¼BoXøªÌh_Ft—þ¶sñ˜}¬NÌ©a?„ÿhÍÕCÿ’8tÀJçÏLÕáyŽÂ©¡fk&=NÒ1'þ±>ö}¦µÆNL¿ôûö3ªTnZ>N—_ÛÓê Ö‘üc%GþAü‰.ýç{Ðÿ.ÕK‰I^«hàÅ…­ˆ®’d0[Ég£3Û@ö–ÇÞÂ:ë­ØöLº>æ¡þÜD]¸î1)ˆE>óˆÛ\Ñ׋¥< Û¹"Kñnçé¿Æ5‹þ%Ìt±náåæºŽ¹¸j¢¿Ú­:3±±‹,îËEî²JT§U_Dà{ðç~ÿ“_Ÿ3«Åk}©åÑÓ¸ÏSè>÷›¶‹‰~ÓÊàW±Œ6¬²CK„zw$3mÃYôý¡Zn¿6V¼–m±s…¸[óÒišqV"öJ]®ŒG0*¡Y0¢pâã 9±%sÉ>3è·ôý²ªÙK–— Ñ75¥C´b9ê/‹;àJºjƒ¥÷¡þ| ¬XyéàÂNŸî”Øå2 !™‘¨Ä9ð«*0`§ðGLÁSS•ÿÜm ñ…Uó$¶ãO0Ÿ¶ÁúkZ*,ü"úy%Âò#Ö)kQ”ø¼¯Y“èþvê09ôpì_o³ŸN³<ÉÈ Jîôßý€5O„æ(Ú–H <‹U5X忱òÞxͤêXýžd×ß2]^ÚT= öê6~1¯é‰Gü ~Uì©:‘fM,OU<œží$Þà ¸Ø3=ÓÀS‰ zêDÖ£‰Là|)AšrSÕC>?9»MA…I%¹_Ä&ÿèH§Å`W+È ³á¯œ©LSùåÏTíó£6 :˜²’µÑl¬GÐöª# se¡ù w‘¸&L§[ѲY&W‰Ý¿àW‡èß¾Ž3•ŽücHÍ r™#¨O21*µÔó¨üú‡«"6¶~3™OGâûYj'“ýÐö[-c¼ãŒ÷Ÿƒ"ø2HþksÕƒE­ÅTä9êØRt_ºÂ§å§þ| zN§þü:èÑ }œÐw¸»¯)ñ~O¸’é`!棧 Ò²ÛBM{]:Û*×tû ókßßw§Op3õ•þ ùÌVôãͲ"à[ÊäðçLjá?Ž˜ïÔ^k5üùYöx’~Yé 5™¹°÷UGôDÇá¯Û‘mͧÞþ=õPµÅ_ýàJ­·Þ ÏÛQ="Ro þMfc¶î"VéFl1ýÚ›‚­D×5ÙjO_¬¶èwד)Nf"ü.ü˜‹˜k‰û/Ó/RÿQöo(óg0)ô¾°)õõÝmëk¡]Þ¥\ï}ç×Þ´>¢ßµáA“™1“u?š1dMÙÍ}þúê{Dî´ÂÄd”Iw¡|VLP¦øIg’×5ºEŸ¹ Àúfí±óquâYoÀNòDÆB žm?7x=ðZbe&³‰-‘`P¾£u^`¹ìÕÖ¦}ä¢ÿÕs»¼J «¦«"ºàZpëoA“OÈa ;`$M¸‡ÎÏõÿ“_˜ûyŒ›Z9=ƒû<…îs#Ñ×#µ1Õ¨*ºÃu7e•eðçŒÔ„Ä¡ZðGøþ$ZŸœpÁKàÏsÊ·¿[Äßû¶xWÄÊFeþèÊŸ÷Ì?ðaõ÷f^U‘úgÞY„àW‡µÄԉ̢>2,Vá,vÚáÏ òÄ÷¡~ð U‚j%'’݃—ëlϯÁS_ñ‰“¨KÙKýà4VÏOUJ_,@jô•Sy÷8>$…zÇ¿†il¯_òwtþ_nƒ?¿!ãÃÔ1Ó“FOªÏ9n6ßɇò3'^h çà&ÿ_M^sÎzüyP¹¦®'ù`‹|Èùó÷nål9h箈§yO÷Af Á=x€+.ä’Rÿc’SÕ·—öÖ#÷á=` Ò`kÆÂmu ëJ-^bð+§–|?ª³¡Ø•lèvrì3ÈëN™‹É?k_Ó¿}Ov1âõMðç˜nµ•,m ÛMTý³áWóZ{¨Î+cMÁ¼$Z&züøV™J– t/f¥ÿnF4\©È?ÈÐ ¼5Ç“+$´¼ÔßLô ‹žu<ýÛ—¨œôg\‡ÿH«.Ò§÷LU®Ë9ýP€ÏQÀïÀ¼Æy®¦ê=u$­\üÆ&ç½G}z‚øý©jY—9߈“.‚`-Q›¹›Z‰êÖƒÿÈN½ÃJ?F/¦Q­¦þ£*¦ØÖkМtè•ÇÙ»¬'Ô¦±/}tÅ:¯Œf½wºá+ܪÕÖ'¢@l¦îƒ3µV¨Ú¹ªgØÌL™Æü¨qÔ³ «YJÿÃVÖ(¼SjîÛsO kyƒ¥2™ÿ¸o½IàW:YäW²îzÖt:LíD–•úÈìLdßϼÀаÓ÷™’ –ÿŸòýÕÎLÖÛ ›³—ûxG黄à9(Äy¸«’‚8¤±J¹šÃÈ7Ã|§>å(ØZêgþÍz‡¿K•ØzÂÓ|¤:5‘H*º6ÿÜà6új,$Vö$ÿ˜@åqC» k3³†S¿Œ®÷¥ìf®sTV¢ÉUÙ•™Ü+õ”×ɪOËù\Ý“¦RïDà4?×ÿO~}BÆË}f^j%õÄîïB÷¹Ÿ´Sz,c©QƒÎa ':Ùë—ÁOMaD#Z(û·o…ÿ¸-»-æÅ+‡—è¯Î‹ ò‰˜A5á-ý[¨¶÷ŒÅð«šØçÑädÝ6ö5”©åâûŠ!ìU‘>õçÄe÷ÏÄô]ˆ;ÓM¢˜YL^!»eΆFt1ùGAù»NP¶Žùª,…7ZM_ÃþÎ’ÕÜA¡š…åRU©˜ŽÚ'øÕ9--U“©gqôú‡9{9a©sso6&ÿ¸aîÙƒö°øK'³e°ùG#={Ä}}™Ý™æ?¨¦òµÂ‘‚ÜÃÙ‹æÌœç~3›¬ý[¤ÒKë¯ß“…¨¨È¾6Rù‘ü£ë6#HJåYIõ”¼èe5ÈÐZ8’xðYÿG!rƒ!21¤éo!~nlu†OyÆ<õäLfšÍT?æÂæ<¶†Ÿ›Ã/,iõV7ý=+—´Fôo‚y†6¾¥jÆ4ÍèÖVø“0Ô]ÿ _1µY9ô»«èÐÕ¾¿2ÝAöâ…F-mæúø€öNu?d‹ðŸÑ|DWÝÍ:Ö\³†\κ-ì·viæ;]Ã/zËÌÞøôO¼Oo›:Ân\‘ît³ß„sÉ þøôá‹Fö\T÷£Š` S£ÿUAЫšÔ>dîEòÂx‘DàO÷àgL¦Ʋ>òŒ_C©™×l¡²úëŸx‘þWSäð«~øß5ÔTtÝB«¶Ê:G È*2›®CôçªâêE‡åôßýÓ®D_:€lO%²9ÎmÈÿEÿ«/ÌúÊç¾³^âM⹿s_€½CýGZz%ÖýÉ:²ÊJæÖ1¦QSè2lýVˆVùùC´‰â²lþ’Ÿ¾”o…K¤3¼õ/b£¼€½½hÜÕÄjŸñÄ{¬Á2YÇÑ=Ò¿ý¾Ì¥G0.Ⱥèn+Koü#pÏ¡Ÿ{ øµŽ¾S ®€œ¼'>íEœTæ˜*yyuÿ‘ y61dÞõ/‰FýÇ;xƒ˜ö4õWþßëp…g»1ï¦WÕÍëôÝÈN¿.ÁâWç´T.—að>•È4òÀ̆h@–Ñ®'9^¤¦ºÅ*§yg#µ”^x½°Ê™?T¬]O~õˆ|*ê…{Xòfä}¹8Bk}Z4°Å °j[Ía`M£ðWwéSƒŽ6ÿ1üªŸÜi 8zªå–r4½Ìp ð%ˆæw²F>ЖÉĸùÇJΟ'«nãóæ‹ÓúŠ€7 Þ¨—\J•K6z..V•±„CàÆ²PßWÆŠÏÌT/¬Të0ýKƒñäSo9ƒ^à8Çùi§þ`þщ¼2^è8Yƒ3?êŠZÃ4Ü–T§„g~Ô ð¦'ÖtôW^øäT18}ð›‚Ä=¢Cˆa5SWüõjØLý‡ÌLKuœ´…êŒÖ) }ÖGÑ¿=5SEV sŠA‡©]Düý­¾Ì’/ /p’ë6oµKE&Nãÿ˜¡_&ÿ(ÈûƒÌFðä^´]õP\%²§­FûõnDWjvùäé-‘o®z扬„…ù"JJ?½r+ð+ ¸(gвžÓ¦¦j¤Þ¬;,O²·UT`¦Å¿¥³·‚3ÍeþGð+ UÆŠtäÛ9èðùó–9¨o¿êÈ<‘<øUFúqµA»»Eõn¼Rð«•vq8©{Ìÿˆj§¦qû wà19‚{~-yz¹îç‚ÿů¯´žz÷u—i ¡ãü¶þ#»±Äh"Zˆø†£ÎؤÕ7ÊýL›5õË~?‚WµeÌøjœ‡§ô‹ˆ ûô0r£<#¼ÄeãI(q¶Ô‚þ t.¨NÖ0‚þ‚aÌ"L+y"Ë1ƒ/ˆhÖÙÝçáßm°®¾AJÿ«¨¥ZÍú€ÑÎ"Ò,-Ÿs?Å>eäÝyL,¢úÁäbJ‚ð2»ˆP‚[‰ê:Ôzø\ª<ˆ}bVMhV ÖÐJ‚t-„ÿƒí<³\–ºÑtlÏ;X‡Ø0Á9À^<Ù}‘?˜cîbE74´ÿ8V\bî?ðH‰ÁšÇà |ªzóþvê´ß²æ_faúïûÍé[ÿ…(þ(>#;þ!.õÍðb{‰Ç^€©µ†ÿø@v˜¸x=á?â«utðëmá·t8=¶¨ Š“@M¤ææç®~äòg.ÂTä_À¢*û¯æºL‡ÃIÍyTÄðƒðý´¯Æð+Ç4¡ KNYŸ›’ØûX²‡QD×áð‹xf‚_­‘˜Iý¹ŸZôÇÏ£¿š+VÄÊ‹,è*ÑËV[F<ŸÌº„M1í´ðûͬbÄä¥È»R#Ñǃ,dʽ̮K9îUÎþh-|ün|æKóoº&€="¤ƒÿm¯&ÉŒ=žûñ'\Êe’ÑÊÀÂlG5èwîx6$Ý5ôfÉèÚXE6M§’ÎÊŠ‡Hg¨Ìÿ8K‡à³Ì,o{?õ¼i÷ϳ¡¨`½ž2+™Þ9ò[gþà<ó–ÚÁz­¬6àWïÈ2™Ïm:ÀÓ‹ŸÕI5d­Wðëߨ³¸*ýô™ûÀ¯¦ƒ¬µWçÁ̪©¨ëÿ„§J—Ž©˨üKCWó­(†Y=¨¥©o'ÁoôãüÅ!W Ë_ÔeîÃ]Bý`T>-Œêdv°VšõˆþRõññÑï²¼í.ázcGp%£oÉ3T¼‘P7EmÒtm-¨\TYJúÍï†~&*™ÂdpŸT8øÆÌ`tM¨@lL•dBÔ³¨ú‹ ¿’~þ3ó“Z•™ul–üŸü£üÇj·ÿx oBå䃸§æ2ÿ<ú«–ÖfzÁï°"¸ Ów—k·ÝÃÕ„:û\T©ä¡;V8ûÏÞn9<à6¨E9Å}Äÿ½´Îþ:î>`ˆšº]D¦®.ƒ±Ñè.zˆ$†ƒ.Â45&ã?¤‘J?ªå¶ƒ_ÝÅ'·Á[7_ˆïF cú«Ýä[Ñ_} eý`ê?rmšEw£'ÆGY€~§dQ³ HÓê’Ë‹ÿ8€Æú:ý™¸‹ÿÐT3üÛsØß‰p­eå1ììNìTlâ$™V–“BpÌÅza“ÕFUQè¬'«ñÿz ~KÕÇ;V%©( KD• ókoj5ÌHÔ¹˜ä%ˆ¼‹‚)½•…°ÿ`ížaec£ŸIÀN7¯Ögv7Ja©g8ü¹ÆµˆF¾üc ÑWpûñ™{àÏoñº“vÚü¶þc²6þ#½Ú––Œ)>;kÏþ¡òWäºöÂó¤Vb$ülz[áÑ–³Ç#æòÀüùNªÙÇ€«š‡»~µöûõxÉ蟸 ,&èPQ¸«Ø¥ñöFX¥íäž2å/ó‹á°XíĮ́¯–³Ád…ÓT z1ÎV­ìðçe˜¾ÿ”ÁzÎOÄ!9K¾Îú —‘úÁ€þc¯¡ðý7ð±á» ©ƒ(nûÓ379œJ[{õƒ³éÂQÝ:O=bE‹9WdˆMQ]¡'Œ7X7¡iÇuÍ¡.ƒ8 3]aÞdþà0j[jÃ_E/•þ|ª=Ô™Èù:ç±9Uì1²õŠ»é‚<ã~VŽÅ®à|´â~m€¶¹—|+ákŠe+°ž!¡]õÕDšîôUlC½/Ô•|k×ÎV1Í‘îõ–ê{(àeßxZéÿnv—›Í*ª4úätv?ß~¾¹\¶ë­Ö•þü>k¿å MÅ µáüyªûfDY‘¾ ?ì ‘l6Y¹fÅ¡[<æGuñkjŸ²îÃó§â &¡L{®õÀÚOÿÝÂÌz†•w"ºte©hnsû;àaKÁZ<¹GçÐQw—•Žùƒ=É>àÝ®SíÑŵ×u–¿™ýH•v%‡ûÉÄÜÄ‹è=×Éñd4à?ÂÊi?7ø_üúžü#ûÌÜÒJû›fºmDaBMuüGCÑ@Äöå?Öj Ñïà½0Æ¿EŃþ”ëÚøó¦\ñ ×—…!23™Û²]æ qÍxÊùçQLõ„m* .”Ëì#—Z&ŸúTr6üB2ä®JÈïÂéŸøØ¾ –~šZ ¦S\> ÎÝ CeùG y-èƒ ðná- ðœHÊ©œ[OVO5À{Ü…ûpP­<ªûŽ‚õ‚ùµ'µêt:ñ&ÎNƒ܉+‚õ(Šmoh'ÊßÂêÛˆüÇ öèKU¿k`Sîoz‚_9±s,õE"­‰hxÛƒãw—ÍEÎ1;ïL&L¦®ãW„?¯¢ÿÎknÒæê±×ap˜Dæ&ê?¾ÉN ”^fWõÌ¡£ræ`lÆ#Ý¡.oÏÓyT­‹dvq×½¿áõ„©?K´[$Æ ö±‚™Œgi'v}!w¡Ad_[¿ Lq.W*1uü_äð ýGWÍÃQ@DÃþ4ÁörUYÍé_Ò äã«¶ùÛE÷«AÄ¥ÙÔ*|ÔRøä;ƒÈ?üØÚ;܆~דòò;³}ñ©&ØŽ´|WžüଵŽü##v¹Ý —«"D÷`Wºªçœ×ñÌŽ ¬‚Ìc`úCèÁ5wÍ—ÿøG¥³~M´R¢vòãdO™èßî {ž‘ZÛÊéeò•ÈVý˜û)wvxØH Vr<7™dMuÒ|§@—¬ (~û2ÿã#ØÐ%ô»Wè·R×Ú3uŸ„`Ð7ª‹üf¿@øÕ`Ÿå°Pñ ûÌsj¥oþÑuîgúz$±Ï1·|$™L_+øÕ4jhj“›e†b«­ºì¿Ú®ÕÐ监Éïák©Þdß‘à‹kƒ7ÅfÕyðç ¨Ñ[Dý`_º|  Wºfm#_™ ’0«$<þ#®9Â}«l×O_̲ø•Ñf[« ±]5EµG¿[“þ‰+èßžÑõŽï\诎Ò7 ,úv2§¸ø8-Â53–¬F]ÓÏGЇ/ Ùl Ø¿—*#Þ­šž®†»Ñ…]Ç%7šb·ž]Τã;‚UÖ~§žqî"ºü“H®¨¹Üí?.a×fÊ.DTcxšNÉ5ÖHêÛXÛÀ¾¶1u«Š=ĵ„­«6sNrº,´ùÈ9÷à?¶øòçoXY“Ënð¿øõ•Ö×ßü7Z]hVè¶ÑQ?XG´!ÿhÄÙöÔÊS}ÞÃØoD3Òü¶«wП²]›CþÑ ÕJžþ‡ô/)dlÖïR§yùƒ¯Œ†é¾žA¯ðÝtâ1ØË™—¸±3þã!¾ëwaÒÐ)w(ñzÅ`{ þX±2Lä+а“äµ°*ÁR€_U”wÉëw8q*‘ëX²š2òqÀMù]Lôd_Ø×wlÑYþ3`ê îwî‰&àWñÁ¯.É8ôoc6¿:®çZ$u˜Šd4±­wɲfK—ÅòíF´…sêT¾Õ3ûŠŒÁœÅîFv5ŠŸ¿F^Åj P¢¸àóP¥FÀvïáß·Ì8. p6›ê¿;êåÚL]'‚>ì›'¬ƒMù&¡¹Ýk¶ÂB«¨Ç“¿ãµ ߬üTw—·J’AÇGÇöÃ>OVkeX XÃx 9 ”kî¦Áõ˜€Z5ì{?ú—¼±JÃR_§º0ýµ¾0þ£¹ŒˆNö˜Õf"¿5?´Œõ²°ÃYÌïpüÇ@ú—xˆ „÷_ CÍËh÷E^®_3×€i"fIk—ÙS¢ö2ž“_‘-¥ÿUz¬ómúU¥°—à $]LŽYãÉ?ú±û%êŸùƒ~üÇ@ýªˆÎ3DU?yVv¦óägþy5x¿Ñ1¢ÞeÊâ¢è2ÃÏ쵆“ý ÿñ…»i‘fžÁ¢ôÔø¹Á›àW³@r½Xo>û+=ókgÒ à+ª cs\g]Q]Õ\È0Çà?V¡½¸Dþ1,–ž,àW.eÉÀ=~®ÿŸüúPk鿺GæèW ºÏªïÒK¡¿*-á?´p™VË(h´¤b$#¼î‡o†dݳÚ"qMÖ‚ HŠEþ(¢ˆ†Æý¦X'׊-â­áJœ-œ8 ¾á)ó×6‚?ÿ Â|S&k˜DD9ûÜ6„üycê?Þ‹w îï‰/[‘‡´TÓPþ”±yÞfSêÄ ˜Á°³Ëp>1Ä&ñQF¿»¸±{øä& õ‰ßˆKs1†ñ*Óë?.kYÁ¯¼Àç¾›•ÐÁåï'ÔÁÌ|7«b×ñ9›È?œN à?‚Ó 1ò‘ 0—Ðÿj+G6›|° ÈÚP¼ØÙ XEg’kvÝ „(#ùÇïº~-Òâ –ø èr/!¬õ¬˜–cîE>SÝý.yäž üGWÍ“äf3<ž±%•-N¯ïºä’ñ‰‚ÿ¢ªq ;Í ú4›_Î}´DÔ©Ëœ'6è;íp‹á!çâÓag½?ÆØ¡Æ*ËÄÁÍôø¶í,ô•jB’©ØúGà—óá!¶ ~]FFØ”4¡ßF4«» væ±9î üGk:ÚÞ£þcÖÅKýÁL©)ð©é_r†Þ„TT,Ì}w€Há¾,òüyb¸ì|0–y®UÅÑìòG¼Ñ}»øU1𫳜á›/læÊï"î.üøçÐʤÔkßånhHå…®uLwOÔ_a±§3í ÌÔð-ZÇü÷$Ì?ïK–W„#>CòÓ]ùÉ}÷iMÐïF òüúçJðÑÌèp3-¨Ë«ÀªÛè(ƒþ%+aÚÀù³ÛWñÒÍðIP$"fHb®u¯7‰úAÍ76éi6±<™µÕ¥¢£¨d¡~pœÉõµ²BµšúOT®,£&>çú;gô³©ËÊ2îó׎|ÁÆä!û6­øô›KH—Ü‚ðËP)?¡o/´p%à?R‘ v0Œõžªçð ¿•ŽkWÈßü¨'ôCÙˆ’}9÷Óif-§þÜvu¦âå9*«Gv{ë+>ý›1p0þm÷Îaë1?}\®„KŒ‰º!†Üä>âÿÞ‹/ÔêøU|¼bþ‡_7÷Ðíâæ*å6<¦Ìçg4çlïÒ3p q ü*µ~4TËmÕ–’âÜÄ;¹&|˜£î©¿çå9q•ïÞøëÚ’…Ÿ'ÀrÆ1IÀ±&ãå-:œ®Ó/Ó]/P?PMl-ÄÏ)¯/Ñ7ˆãX9KU±¹ŒF}±jUéù%Ömö= fy6[ CÿöˆxŒçà@»Qâ…#k¨/ü ´´yHRUØÜ+-¢õ˲X°þ〖+¿RJâ·êj ìBQô…Õ`zkÃ2D#öM„Ÿ«½Š½V¿ÛÄH‡§‡¹iî‚ûI”ÿ1+ñ§rÁãžä˜÷€Š]aÍ,fJYí·‘‚§6Z·Ì ê*ž< ßâÉk‰¿ÅóPÅV «qøzp«ë kk±Rk8ŠôoJQ$Êà-R(üøüQwÖJ\…üc¤h(LüGsl½ÃOÅ$ ó¸+ñ ÿÑG OoÎÝXøYD¼à?exÊydi©ê˜ÿñ”=xã;¨ZpÞ×èñíƒvêžjhU!ÿÈ­>ã?–Ñ/Åf­ù,á¶V?n¡®†‰:¡¿™›ýõÆîö#z[üª?É:„³×óû™È?VÂúd"—9¦î«v*,èè!¦ƒú¿?ɹ'.â?RRµXûðð«8VO½wíGÃÛѺ£Šã?ŽRÿ8éØRâ¹ÌÿðãœuKI/t†j˜Ñ H³M”jôßmBÞWõØž†bè´Õ×·|OªåÏ“9Õ¢‹Øß3¥YƒèŸøÂ½½Z} ™Ñ`ÐÌò`zõÀcmjSj ¿ª_>ŒN…Q`)ÖãçšYEè·Ò“reEÁ²ÅHøîõÆëçðUÉ'zšµ­åff9â>¼2ŒþüZXײ­;LÜŠÿÀ‡Ð{e÷@Gõ ´ð‰ùMTöWÿÑ\¿à‹_UÀÞû¨H¨@’RåW”|Èÿ±Ïú^7íUTqs©!gV1¬z4ëÏôQЉ?Ì*?vçç_¡çÚ";“‡;UºKä$+¿Ët³<,Ý>CöÖÞžï:Iÿ’z0éÏUcú—´¿zk}‡-9.§Ͻ¢N)Šôó˜?WþÏ5õÖþ[÷?0tŸž”ºº"ÆJô»ýDBÙn¹V«ÿ1ƸNíFTý^¨–;¡­6Ï™ÚÚÇ4äg£º± þ|«|'ƒ_…V¿Nì&IºíàWsä%ô»gQ“fþ‡àþŒC£à´H? (yÖqq¼Ã›RЏ|Yu¦š}#½‚ÍF/ͱ2ýK~‰û?¶¸)¾£…%‚wlñ¼H-üSkTiTO¨ÿ8AÝÂwpÖBÁúëøˆÌPXÞRêìG :÷Ö±îdVÄ–„!fº(JóÕÔö×QXÿûúñº‹‘„JÉX¿3Üß_ä`,t)¬j7¢Ö¬«œKºº£4ûŠjàõƒñ¯¨?oÎqÖ…?ïb—Ä/]å:æÚ‚<$#øÕÿB¿ûk•Í}f>iUõ˜îïÜ d/ôú†·Q—úF]VYþªúÝǰaõ![å_?å ~õA6Av½‡•>ððOÈ?NÈ÷â–ød¼ eý‡.n…—åÀF ãG 3õƒgd%,^9WÆ2»ŠM^,ªoÆœÆSÄR°˜ÛÌX“šæ_ò#xø쓬`.¥ª=“¼‚cŽ)Þ T®I6s ³F3–ª nó «"xJV•–)1>dŸd™`ýÇ9-¼´|ŽxÕx™\D2£ŽpGW±óÎüÁh O)ÔX_ÕgTtHÛˆý7sÿÞÂ+dR[u}ßoŽz»ÖE/ ©‹¬—? ŸX­Ù*h,"²! ïyŸ©œ¬¸™W›É%¼é=Ôy4¨LƒŒ¬¼9Ê=ì®Vró:|Ì~ó±è&tâð¶ lK°ócy6£Ã¼’½èGüëçh‘Åßò(yÔZìVf°Ã‘äY9ÒìÊ™ÆÒ ýî#°¨qÊi jQÇd2¥!â¼X;ynZ+áÁlp¾A°—ñn[ø½Sè™b¡Ê\aÀöï¦þ¼:þ#;ŸÿQ ôe¡Úÿ(è)lm8Y_òid)|þKó´±àÊ'Üd*ì"ê?VRA÷… 6ÇpŽ˜üñ»£îÛ¨w °â# žïm6ùLMüÇkæ×î° ÁGT¡ûWV»æËŸ²Z—8‹O©À;BNƒÍçn(,ôëM–QÁÌ^eô§Šo‰ù–úÁ)tî]€‚ø8ÓŸöN«þãŒêcEÇ4ä3‹™ÁŠj QäC÷EÙ†&t!×µ ÌCk”mé>‰¾%=Ñ”¥~p =šì#xÑ8TJÅÁÛ*R¡w”\s’·Âè$€_˜ë^¯ŸþÞðÁó~ ¾oe-1sI/ú—´eÆIN{05*‡¨|ãc2YüüyDòÉtŽÅ™‘ÖBüG8YE:íÇŸ%ä øU!îÜÛÊ$#OkÒÃ^Â\ŽOèuÙ.'ªZoúˆÆâ#8O}¸/âÄ…¨0¢R¯ø êBþÃC»GÇ‘køë9`ótÃ&ÿ(ÁYJ†5¬¥nbgëózÞc&V =×È“ûh2(ÖJsºx¡{ø¿¤¼~jô‘ÎT˜HTd 'z¿Ëîö¡5>BÏÜøL×Þ@×Ú ;ÝÊáø¼xd>íù÷…jŸüó—þ‰µŒ2'J*ÔR}©™À6®;¿=Fá¨Ð"{ ًì#RÈ︨^“)FáØÇÔÿ[¼dd5çqMMTSɘßÈöZ%`Ü[ÑD¹v?×¶®_µ²n« `xõñG§¨9I6ÛHT °Þ©“EÝà^èƒ÷Z`~W7èç[ \¡u¨¥öÀsO “@ýùE~¦5k®&G2Ààú«]Òp¯·úñ 2-Ô5³½ê¬ ó´¦g.S?ôWèŠ2Ýn » ñþD:—d~G=xõ]äšÃ¨~<ÎÅ"¾Ÿé>ÜEÔ|"{ O¶ÜÊêÓzÞ/Àç2Ð_dµÝ.Aï«°®hªÏÒ7.sFV[ãÀT‡À­U÷‰_ëɶîý Ð8æÉò4¿RùîÀQ\MÑïvÂDg®ˆEnôüLLÑAÆÒX©§Fƒ'²(qL:ø}?üꦾ[¬”½yúg:wýwKÂücµc âk¾ÛÎBýÇ|»¤k(õƒ­éU•I\áí7æ2Ùeøûà®Ñÿ'ý¯^£Øõ‹»Ï3ÿ#”vÙ}•"ꚑĘad£…4Zq¶×kYŒÖF[ã™ýîf÷O†äÅ m9¨N5_þ|ª™€Þ­ú=æ¤_íqð« j~¿rDê?Ú0›þ/2„åT‡?‘IõpÆ9ÙÔ¬& Pÿ‘þ‰9Ë W+¯{Áã?Â{Ä¡¾¯q`¬I-˜ãD¹×°*Q‰wgË¢T‡dÂõŠƱë‡Xµ~ã%wUžïòª:»Ã¢ß•fí`ýÇ-ñÐjtª yBO¡6¯>ûqÍ0³(ÊgRÀqô8c`[FSÉýT}´ýŒŒ¨t¨§™=Ä‘Ey[_7%RP—)Äß'Ȳ Ï¡«…™–ùµÛ‚^ŠybÝõ²ùGgŽpÏ‘Îy« ãÑœ¯Uè5Y‘Þ#<kñZçAñÒÀ$ƒXñŠ©ò¾?á3pÓŠ¬ÆéÄë‚íÖeñÿÑõÔVŽvW?>}ÄGð2ÿ1V #:Èã s+Pñ$'†]ÆÎ&bź¡ ~šX ÿqï1½ZR3†+Ó›þí3íð²1'»¨™îWë°å7áJöq4{U[4·Ûè‘$ìÒÖ]¦‹7GAUv!-–yŸ°_m££Nî@×¥ùG*ê.òcsÇS?èÌ£ŸEÿ’œÖ6t·¶ýÀ*NÿŒC°© ÙÎd‡Yx†ÿ©’qwÄ\1Ò²ÿøËÔo9¼˜0²¬ÚTÌu¤.,(nŸT½¨ã83ïþ˜Š’#ê~³—ðÓ³:‡>\†ÁS_…/p%R؈HôOÜDÅÂAp§ƒàW³­Bä T#|ûfôW1­HV_…gwŸÁ™øœí6<-ÁªÉ«2ó¾`“s³›Ñô'ŒgƒmXjÆGg>U,&S ä“ò5ž¢¸9Þ½Þæ×~IqÁÕ¶Æ0©gµûu¨lN~0,1ýÓ³>£}nóéñvžðJ ð]‘PWK°¡ÚÔ5ý\p(óã"ñ,%.y®b•¶R`Õ/¢àÕíµø£ÊÔ6VÅ$¡o|òJV%<ßGüÇ9üNbpÌ¿ÌÃîüã |Ê"9»4œçl”¼b•wiø%ÌuÙÌYËb×w]fÂÕŸ®ÞöYU¥ð0” ñíø¯]诪€ü¥"þOô»ß˜8XÈ}fžÁŸãþO’ÀDÃÔCé_Ò€UÖiyÉ?çxÆW-týwwk+™ÿÑ€ø>=ö%Î^ÆkÝdîÓ[æÞ2bIñûâ%Ka ºQþIFÐ?èçä*5ª0Ͷ¨ÙA¤ Ñ‘7…ÿ¸ à«|q¦†fD"Ì•Dš‰¥3ÿ#ºšŒ…†Š¢˜Ì¢úsS<>ð/±Hû°ª URUï¤é8ý¿óªàö1‰†#›Áç—µÊÜÏËäGõSÛØWu:`Õ$OèH”ì*^%V?ŠÔæ"Y0Ç<ÉHÿè Öñl"wld~/±²£ßõ!w¸€ÿ`Îø¸3s6?ý¯~§X  Ò3  ;––›cST›(n<‘mxU<¦&õ,xfÉ»ˆ*ÑP¥Õ~™S¥ßýª¥é‰è“í¤^f×µ˜ÿáÌ#qÉþÂem9ÊÿÑ?7 äà%8åXüé¯7øpí#ý¯Žrd{P¥&˜ÏjÉez¨\ëhª7ÈUЭáÔ:f3[K¦´ŸúšY#w™ÿqÁ §aarƒð¯†wæÂœ#›:¢[ÕUëØF^Ø…QTWÌWu@+‹²úhêß‚_’~˜À½V748£Æ¬·”ûÍ›ŠÕ˦¶¾€ÅÌA+‘sYÔ?—á£+0Oc¹a6õ‘îßÉcãûNÿ2ÿ#+Ùò,Z2®Êäñ­‹Ô;÷§£úÐh®-x‘^xŽ.Vð«¦xÔAê=z®5ê,W¬v ùµídtÎô 8«þœ¡ƒ¦„8‡þê|þG,~¶ÅTu/SÿЩëd§3âZÖ‹kű†ªÃò¦û¢¦‹«þ£õýñ Åe$³88ÐbP«êtÕú›Î‰éè¨5ŸÇÞô[[€þW£ø›+2ècFs–{½Iú~æJÀë··Ê3ÿ#ÈYV;†«“X—Á‹"ºîƒ`åÁ^¿†Y‰o1E•hçÞ‹²Ò±h?þôÖ‰ä¼Å‰ÞªÄt—oJÇõÜä+È]^Ÿ{q£ÿ}Eú£Äb—¹¬úhx¿ ^ç^M’œÈßüëôõ[&»ƒFÍå®Z!ŸXíè'?žÉ$ŠŽ“§é4ÜüêøÕXû€êãJÈü“æÌ9¼@TxJN„…½Ϊ䂟ü/~½¨µó×ñꈖ÷ÿÜ?1–cݼ¢½ˆìËŸ¯Ô²ŒÁø$†Jþã vT˜ ôTMsOFÃj¼ÕÃÊ=Ò‡y}ºß¼™œ®‚Bªö¾úݧàää=é£=Ô÷¡ßm)›±j^°œŒî;äß­ØüêHË]šQµcÏL/µUw|yûy¤$'vg5ùG:ù»HÜÿúIÅ%Ø8§§íY_þü31p¬uòæÆDúe±¬gdl>x^°ùÇ&­.?·½o|ô+{±Óaqÿˆþ*"ŒH^uˆ{5û4ËÑ‚9æ!Fm´`ƒ±5¯@“b‘ ¬&lØ ôWŸù—-d ‡Ð¶¾Âš¤š¿Ž¾Åÿáù{}W¡ÿÁïî'¯JJÉ|([€Õ¡­­Ëg‡S}8J®³% 4«‚:+óˆDAì2^Z”E ‘³_ßv–¸ÊäÛ°‰[ÌØ²•Hky£Åͧæ‚\z€Ö¥‚GŠÆü%ÿ1@‹!Êód›AÜ“ã1f`ºqþ»³˜|?Ï÷ ?®? ˜Øjž÷±d^WÍ-âÔ/ýwÒÍ÷tÅÙÁ÷×áÅnãuOseO103WOÐ7‡õœúöØÔšdoia»§1©%s:âF†‰Þ¹¡™þÁ›ªí…ØŒiTË¥¡z}Üùk,Ô4{'ÙNüÇ2ly´C_áVªð ;ôSV¼h¤BÍu“ª£Ô7–f=§«ÊN«ú«ÖtþKB¿¾{vWúï¶°jÀZTaëwzÈ•ßJ4QK °^î·lp`W¨?Ÿ ¢øB]°NYé0œÑr¹ÖÒ‰ö1}Ò—ÑY~<»½ŒOm .¸œãɼÄá\e¿©•Ç©BÆýß̬1šŠÊR3‹Q×í‰Ï­½ŸNþ‘Vùu*í¬6 <ãí¸“É £áOS2}1Ÿ¿üc.óÃSÿñ¬´5™;çÑú¥'Ç*eOgÕ.æŸ+*öÓsä´%\éÉ"æ[sg @°]=7%Ñ _ýG ð&­z1žŠOê!ZùŽVW]æÖޱºc•qM!©ÅúeÁÇ ä-Ë1Ç£¶? ÷~6t€Uá?NøË?62—¢lîÓÉò&øU$×pËw™4v–.-£\QÂÄu¥võcBq?WvúËÔ¶"Ù÷ä^I/"“Œ*ª\åïYûo½|¨5Õýfe>øÿ0ÿ<š~Žþí}ŒB¢>ü¹3ÿcó?Š“ŒíFlCÓ…ê¼µ…B'¯„Öt3Ö †hcÜÖ߉ ò.þ㳤B‡³eáUìjlt!t¼—|ñ«+ÄýõèmsDæ¢#\ÊOÄï¶Û À%Ä%½rÛ'æF¢úR(WÏb£öC8s~¶ËäO~·ˆ¿÷“ˆ§¾ó?Ân#îvp€²Ô5|áoMT9•Ñ_]€ŸÉGÜR$Xÿ±U«ÈÏ-‘·‰±†«Ýx‚ø¶¢DßMgJêv2Ý£`a£‰ò›=ƒ´Ìþ6§õ0˜kŽ#~Ì™ K†•‡«’üz.ʦoD¢‡ð+{È“¾²û¶TQ6ûí¤— Ú`]rÖNÓ9%-GšýU'®ð$“þy bLõäY]ƒÂa'8ÈyXA»õýnø ®L=¼¨„•IE¦Õöƒ7• ÷: 2w„üc¨ø†}ê†]ŒRj \F|*)?ÊQAÎêˆþj€ÜoƦޯ3•>rÄ¥àöÃã…ó“&WýÍÒÌšF}Ÿ†u^FF·Â\Œ|Á$ ;¿Ô þc9¼CN*:Ž ßEI„WËB6â̪¢ÞaÇwƒ5]Å;œ&ö¬¿ji<“™9¿Ì!…¸&ù:~2+üù$ø‹*³QTAÌV…X˜[a°¡·°ásUz*Y6뗜ÛFÔw˜•ÃïrÖŒ†½¿hUQñ¨Ó[…"é,õum°Ê ­^Ö ~ÂÇl¤nª{ø[\±öð«j299£@ïÀ¯ÿ¸ÖÚÚ¡Ò mÝeg³_PIÝ ThÝ9WÃÉ/Ö’ÑÄ¿‰ÿðÓ*nÑê ßýB'­‡&ÝKTi˜­Oø„v*3þ&þNB¾uˆ8¿ øÕ|¾‹ïŽwOÍŽcrŸgõ7p‘~ËFøš°‰5uû3‹ÕÙïjaÏ£~ä<ùÇsÔ¶ßñéG­çh“Ù+,¦Ë;½–É?¾ ß-)ް?þÔ¥þ<&ª”bÜSÕS9Âìlõ`þà5¨è"„Ë›Ž\•©;ÏÊ€º¸´U“ngÎDÑcDt1Éd“Q“ðs½çú>±BVç‰Ò:UBiuÆ·{8[Q…ØÈæºæÊ'R…]ŽR¸ š»» ^WˆR*$Q‘B­þüÌÿ¿¾ÞÓêûã?ni¥ô f½…äÓRÿÖ˜iuÅ_LÌÿ‘ƒŒdø•¶3$‹¸æ˜v@„Å"”'†’RÔ6®êaäfæ×®gŒ-ú3÷φäE)•nU“É3^ðT“Ò «ÔŸÀ,×âiõ–)ˆÅCV9ÙD_£ß‰¸K“©ºðŠž+é¹›E~Åš¾ãžÊ‡VÇ‹US†¿J,ÎÃô§Úü ¶x/ž#©ª€‰‚ +=+šu Ü>%ýjkë?Žâ?|¨‡|(cs÷o§¡xkvsÚO°m­4`ÝÉPŽì"«*,÷SôYœ`4?Í¥¢q=Lü\"ü–ä«`jó¢ÙнßIÕq&^¯ä_*Èüúït +èõ×,WkÀž¼AÜþ»EÈi:€1CùYƒ,fçà8ž7,È=³¦º$ˆOAl.5õ祱ïI‰ó™û8ž–Ô&&;Èw§EW•úà3+9ö¹<›‰Ìûð^c™çûërCµøb¤<ƒZú Ù@x"E§ÿ•3ÿ¼v1HgjÙ.£žƒu*Îgzâ=f’'=C+|æ—ù眫"ð›@|Ѝ›Ü‡Mf?¢Ø¥×3'3Þ¨NàW0ŠÏ8Žªí)ý^Õ‚®Kwê3p·ýs°/4<ËC¥´Ò‚Ñy1?ê³U¼}ÊÞ2äñš©è„èC61OÅ'?[©°â3# Xûòúß㥽á?®ãAšƒØtaU æM< ;áVÕ•.ì'°õQ¹Ÿž£¶ÝÍõ›Däáu:g³žŒÓôžó1QQËÍWðç­®(”ÓY–‹´öCff£²q6•*ûP!÷[ŽK†¿›ª¤éç?j õEð½¹§œþ»åQÍÅ@˺ ]S{T­cìt)cŸ¦b²!èÚ ôb6½Œ;ÂwE@;sÉi÷E^‡~7œ‰©W¶–òÄ3ÁŸGvUe>àQ"üÒ®§¬ö‘ÉçG©þ+H7±MÖ$Îà(úùnsú$ ‚Ëþ\°)ókHiN¬ý[–þ¤•™ÿщú‘ÅtU¾Å¼—0úµ™/R ÿtÇêj×´šQñ§ùòYˆc*«læI·ÿ¸£¯†?ïGD2€Hl¨ÜIÿv—ëok3jK¡Q.h/w½vårÅtuÆónt¥¡ò¥¢eØG@P7’Æê¤S¶œýsƒÿůÏé•ì—+_Óòé¸ÏSè¶áô¿ŠA¶QKt1}û_-£{&c(ó£b1~[•ô§Õ IÌ\ 8l(ª(n¤oá\ù\,§k¡Ä¯¢ f)£k-OL[?r—~hÏôÝäUPÚ.†›ì#R„èÈKÐÿê6l¼Äæuæ‰~lΧâ¯Ë`gO‚•d+] +ŸZÞúà¼ûÖ8-\<á`}þCú2oùjªR`8)°¬7ˆÀR1W ÖœÖ ׃¡Ê$ ¾§ñk…È@ÊaÛ©¹ƒ8ÂŽ(},Oz_fö¦ æ˜å@®FÁ?ÅþEÄbÆ ÿ gJÖÔÄSƒñy§ˆ¬3‘,!>Î#û껟ß7ËèŸøUæSç9Úijòú¼^N>[Õ"Þ¬€ZËÎNF] yn¢3R25ˆ]†Ó£‹D©Å•þã"^£ x_züÇqV|/ª‰°ÄŽMÈæ6€+.Fm™ü#žómþc„¦‰ò:G¶Ö4 Oú2¿þ¨z‘=$©kFwåì4øóZø/øçMøº§ævqPŒ=_3:Ë©D*©ÁÃvp\N •åYÕ€~³ûáX£ÑËéó[ÀV´#ÒNKuÅüÇ.ø|¿èw›Nÿ!\Ãùø°“jG˜Sk‹o­êXŒšýñŽtŠÃ¬Bw‡®‚'àÑãç9-œ\àVͰ÷±ñ#áñÙUoÏzK™ ƒ ÞÜÊž ÿqŸûÒʱa:¼˜ù>Íiûá®qÁ|`òÓ'{»=†³-µ+á®\Täôõ\ïPôûÑÉtóà?L;"Q¿ØÑݹÓÊyͽˆ‚7š  rÒŽáÃw”õÓï*ò¼¢Ä8õÁ{üÇUó˜.»ðŒ…YÚ"ߨ%\‰]]Aê¼éÃu^~¨ë¢k³SÚÕÉvsôWÅPPøóåꨜ ÎzœÂW,ò\ñ¿÷Á2ëÈ?îå~°¯”ÿNãÏkk®•WŒA¿[“ÓžIÿ«ªV;ëúÝØ!veõ_!à§ÝÆ,ªêš£JörVÄU˜9øˆúíbØi½1ƒÓt\áûÏŲײ.øxmú'ž“©Ì$Ö_²™Š%3Ëé² Šö8ž'äûïýþO5Íùæ^5ùG#üÑâšìLܾFq;›8OfÇlþþ[ƒý“ ýU4öM¯Ãfn'‰K†ôÛù7°‹Ø7h#«ÄØÛò¡æ¦d“Éøã£-†«<–®­*MUõn⺰cyÓû¨&¡ö/™f•¹j€Õ½ÃS «™ˆ¼%)üçXârI|ÿqVþ%oSc´-Í“Á^§a¬6úšÉPjæÔrmÅ£“HsvHoyòެj,šÎ;d çÁfNãK¯à›¦~°¸ð¯ ð_:œ™E¿Êÿ¶ä$.UP¸gȯP_E/\¤#ØÑRôc“ˆÿS3Ç1&Ÿžã?ÚRŒ•t#ºŽíýÄÛLE#xV7؉ ‰½ÀŽÎƒ»LäÎ'å W+.# 9 –Š}Aê? ß‡n!xÔzüÍ}|Ñüîú—|¦àfL$º¯n—†Áø5ãð7‡¯§–.Cþ»¿[Ñ@Û²Þ’³hŽòÜYv6{­^NE·…Âi.õ;™_ûv*ä3zÛ{ÔÏGÅÒm5÷~÷tï±’<æiÈ¢«&q±Mõàa»•¶íÆDΙ~Í)þªú.yœ{žÓUüÇn}™è£n ù½d,ž‡Çxµ–x…Ùô«º2ô;bEyɉà î*GÎ÷\ñ¿÷A™50W©ü ­" ¤½Å7µÐÊ)ú‹d5†1ÃÈJתªÔJ+òÎÿ8`l&š•º¨ffÒkÌe­Kôß=+‰ëbµ„?V˜VÄÒõÉ? ¢îɧºÊóè¯ÒX×a­–~ˆÌ©Š„jKÿ¹ò?ͦÍÛb‘U±yŽ0—74¥Œ¢ð|ô@WTÑ9d%–™ïqÄ5æGUäØ òrˆºÛÄä6°$óˆÀ“ñ3õ¨iÄ0àWû‰tµNƒxñÌGa,s="ð¡ª.õ~çàiw°–»RéOUC$ûΪ½·ñ.íÎ/a×55g)P©'F4¼;²Uô檋’9,!¨#«„ÈŸß2&˜1˜¼° [ž‹·%LDc|Ózªß³Ïºª~ʾöÂ{lËsÇö9õ4YF| º1#®Ù\ÔÆËf H„5]ÅOw?-÷É_–©s¢‰HÉ»_mÑbv=‹]'¤óŽ ºÜd#®èƒ~7õ `¾²F%l~Nø\(8éAøÈóX¼Qè@s‘ÃíÀwLÄkíVS…—øÝ}` —+P.dZLŽtú“­x SÌO’Øé}àWùÑ5Õ¥þ||ŠÂ>ßùñïÚ/ËÀZÀjVd?ÿ‘•ÕYŒðË{£aOçé vqç+]ú2?júÝHö4:[fB-æC5à@‹å¨þã õyÞüN†q×î&Þ­HÇÙ>Ì ïºJ=C-ð§jÔ±ýÅ™ð¤sú&üùUpÿöú'Ö’IAÂŽñ,ŒFa°]]†?_~µEmüG~:ÓΤ›ùYжüÎIžŸÆ(°VÃ(…G¿;XÐkt4ók·’«µÕû6ª¹L®ÁÆÏõ›™²ÀN¿Äˆhc—Så=„~XSÀsj£ôj…¯ŒB½ŸIφÔj’ç&Ï0ÿ¶Ü<â'ü^WÛ¡6«ÜÊ.®1 ö}½Èʽ¡ûÏô.yÇTô¿ˆû{è×êOøžuཅdYÚó¦”5ïQñ‡¸l­ºª}DvµÍ.àjáœvZ’U>†ÛŠDÆuXzg <Å|Gmúï>ç­ÞÇ%=²=þãþh%XË:"³¾` ŽsÜõŒ³ïAŸ›=L©ï%ÿðaŠíHÇ´[º²0k„*"çŒÉ2øDYQõW±ÐsÅÿÞ_£F€ŠóKä¡uD io‰á?R0¿¶ O}Mwýù#ýk[çéŸÏôÏOCZ!à×ÿbþ CeLk0€™ê²H&:¼§äqZ̳ž™aáüWüIœ¿š/³ƒY§¿z!0­ý |ÈIv‚›¬FüÊ=ðˆø»ëè` Çèƒ: ?…”èév’ƒDâOd4Y#ÀLÿþäÈ´*ã?ŽËnOOˆÇˆ¢óU5Ã;EA‹xÿžþímBÍ?ŘR¾ùç&þƒŽKäËÉÈ?¦4&Ê=Kľ‰è³_SÕµgd?« ™G'ÔCgðm_°‰qyÆcâ=&èRìq9Ó%¬h²ŠÄV%èŸø4ð%þÏŸïsͨDÐGÉ?Šâ5\ê9×]‡·  º«J0¯myÇ÷â9ðµUìpõÓä¯Á꯴Ù@”!OËDÞ–»uˆ\µ ™Õ#4Qs™X9X„#6o‡—[ŠïOÞ‘„ÎWÀ è‚äŸñ详ÈxWolKQìùtØ‹AàYí¨ÿp©màÂ/ƒEM&—(£W°¿edp>\ÇL±É\hÅ#L£ZŒî--xÏ<Ö»AíøÎ ý>ý ÓC6šô/)Gä\ ¿É\®ÿ<œÀ:+Hý`]ËEÜÓ m4ÊéD*Ô ØÝôp^ô.ykÆ^íÁ.g´ã‚Ûe—º…vø ÙTlüëqó’Çþ¹·zÑJ‰? ûŸŽ ±ü¯è˜»Õ®bÓšøÙåÚA¨ÁT8–¤ÉN¶hºýïý\âN÷ݾ[¯—ÌçrŒsÜØrº¡Œ IcP èv×*½ÏÚ“¨­ÛÿSØyÏ®jƒ`M'Ÿ‰O=þÌ?¿á9Á-ôTÚ¬Ü=ÖÜóë> ·Ò>ÍœA›. 3ì1ÌÃMKï‘UøÞv]øNÎSN¥7¹Y |rT”ÄéÔ\ÏzÌVxîAxâ¼?í,t˜z gY ÿQ F—}ÄÉ_}<« sÿ‘ïtÒîÐüïYP^Y'#UÑ<-â[V"Ͻ¥ʸ*¿]ÈÕÐY‡.ê!ûóB¿µ}ØXŸ¥¶á»*Ão‘Çúàubã·Ó*úûýÏ?§Í ðy’&¡CaJÿ«ˆô¿Zl?";êÏJu\Ç™PÒÒ5Þù¤«1¿v®ßüÚ“àˆkäpÖLäJñdHºùo?çÿÇï¦ÙÄôg'¯1¹%8­}X~r<ó‚™ÛAýGW¡­Þ<]ÓŒ¢Væ²êÏw‡eÏßÙa¬Ÿ@7óÖ÷V·E1Õò5¥Ü%÷2oé¸õ1Ä)ž%¾ûðÕºŽ­ŸN$³´cuÐ X&Ö+<–~¤Œ­ ˆÀ3{¾[Àó‡Vôß=/QØG“мƒÓÁ{+0?êkÂæD$¦$£¢ßæù®?$ÆHöæèÃ`aó°™è[¢É?> ßý‚Ek@•ilX÷²^¨þc«Ñ?ã®ÌJÃAøb°îJêntm3ô”›@Øúñ´6P-„ï³àwØÊjED?Ьê:×›™”g< ˜Çp¢jÿØ‚ uOFº†=*Iÿ’_ÍÁ/…ž{Š™„(þ(ûÉËj±©äc†.ØZN³„šˆÇ{IMÖQ~–¿® ÆO@ÿ’b"Òw¶êŸå³šÉ…{ÎV½†7È­¹úƒ+J…ÿ½…?û~• mR;TÆÛðxãðÙÁËî’\ Æt2â‹ÑÒ‡Ÿ·X; ¹ß,vÙ _þ'JF°Ê®p—°x£¹/YÉÝ È,ü²7ó£Ö©?ßc͆?Ï‡ÇØDÆPÿ0¿–þ££ý\E‹ôÙÎh¿&º¯LQŠJëDö-À·æë™2FÿÑÙr¸—Í8ù±t8ñ¹ÿ‘ØNJ‡¥0 w°PœCxŸ"àWÓá²SÁ1\¤†°# oµ’éÒoË#+59èm"âŸP• bCÒsv·]{߆JD—kóùÚÀ&TgŠà^NÑæy:s¿«>¶ÐÝaÛÿŸº2 >Ë=¹¥>v£º£çR)^ÉîŽûB¦P€ÉJÛ¨ߨ»2-ñ^¸1¬ÐNÔ—Ǿú±¼éYl¢Ñþ<#jÜ—ª lÔpUðÝð¹Åì©Ì±Lÿ’BØç‰N+úç¤þc;÷­=ëD³×à'JéÊ¿#Ù2ÓÿÑõÈDUßnŒ~÷oµ]ÿ‚2¶(òµ8?»l×ÇDÙôȶhSuˆÊ‹¼-mÉôæâ/S30¯çz3}D ²ÁàGïôa™E•·ãâ?Ö8ýÑÁýeGûkžú üÇ$úŒ4v’Û¹i?ƒÓY /[X-ðø‡àW×AÖ竼[Så=аgÎ0ôWÉ?.8Ýž.#\W3Wg³®ʶœ‰†.ç4öf‹œž†.ü¥þü1ÃßnÞåOa›Âç¹Ùžɨˎn±JP?hZîjÿF ëWúæn€?OoîóüͰ|¸klo¤{"P&tS/Db1É2­'äÞb½ØÌüA½FXÖsÄ|ÅYTmP)É?bªF<ËWÖQ¶ü,ÚRŸW^$ôâÇ*lpgçàSkeñȳÿ)ÍR¢ ø}rN?3ÙÊðÉæTuÝ„Ã=­žˆ)"\jC°ðx¿á¼ëá©ô/ÞŒÿèa¤BseÀ˜Ý4°«àχá;è*ø¦„sÕW`?:ûáësˆ='ñßV8ÔþbMþã„5VNä‰K6þü qÅøT|D±/SóüÁNnïÿøÕžƒý¾ËOZ £¼o3ŸŒ8i ûRŲ‰ :À3ÍÇN×ýñ“=˜užŽg$³LŸÙUˆ~W“í…žÉ~ÝõìÇ©ÏëNÿv¦nêß~ŠMDqŒh%-Mm|ì}ÝÛœŽ~–ð=½8N9%ìã¬W*ôRTÑU;}Þ…Ïl(üõ¬î{RW&†]Fÿ1‰þ\©{°2ñ“©‘¿Î6 ÈÐDg2ìD7;¶s–œ§1ç<žz˜ëØüÑt9»ê¹µ^èôÃD c½N¨ªËT§,¤âï3õöô…B¿›ÔéL¿¯uè¯ú3¤„“Ó>©›’m¾Ã·~äiŒ@¿»Ü¼mÅÆ7Gå6³•ê(#Ìq^Pï1…*•EN ×]G¸¾:á™·ñÿq$ɉ04/É”¼UÙŠçúÛKPï÷B*õÅêo}E˜j ý¯ÚÀµ$¹ggrícwù˜•ŠþZ/˜ÿ®éŸÛ~ ưÖ=1\2µÁã?^‚‡oÅÖ-˜@wè3öiøüÎöj:ì¢:e¿3þü¬z/爮íJ#R×e2–õ<ÏEðKJ¿S¿mð_üÝ—úøž“9OÿÄxž?ýØ6bÑá3jÝR¢­ˆìWÿ1ßÈiå³:Y{©Œ¢*'øŸ²ËN¯ö?@ÊS'?IÅë.s¿È=b­Øm]4ƒÓä¿–û«Ž8Î:Ód1ì}r5}k>ó‹y’|äpä@úÛþ&ü²×1ŒªøÉûÂÄèwaçè%DÏ%å1îþ>æ<¸àq§£¾Ê@ÓòŠ‘˜?øý—ClòxöJÎV¼×÷x*Úñk\xÿ»Òň¤††ê?Î9éß¾\>‘‰Üv甄Û/ {üõo_±wñµx†»[[w5Häån7¶ŠÐÃc$Êôç\it®0#šŸ°JÓQî¸Y‚S ¹[°âîΑ ÈôÛ‡¨”xf,3-"è‹0ÝY°÷ñÉêPM²fÿ5qYg*ÊÞS]â Ö€„ìÁŸF"/,\Áì2¥YR[K¤çbé/ó÷ëröYàiÜõ(áäñ‰X¾ª Md_Ëá  c{†bx[0þc !Ä@éÍ™OÓ-`‚ã!ª‚ÏIŠMrë”ã¢ÈŽ=žˆ7ˆš³Û±fn7¹ÒqÜ ¬Üm ”ãÉN³‡¥Xß'x]w—Io«ðô™ZÅüÁbXçfÔŸ¯ÂËirwåûA^ËÁ¯ ºâfÖ#™„5RsîãÙÇ|ž•^T;¤ýšHïÄWt]ãìú—µ•½5WþÖ]úi Õî^ã[éð+ý5›Œ.æBrµVú6üùÌŒª’°·èj“п}üq§*õ£±²­™ÛŒZÌ­äšî|á¨vÏ4.¨6x6·Òü(UŠû¶D5°{Û¹'ÎTužÐc}6VÚË)KÿöÇhβàå®Qeò æº/Uˆ]è³JßtOµa.Á·é`$"SÿQ”·á“£Ò83ÚÚËìë6ùÌYú<Žç¿Kü·☓Ø.E†ôîÑ›+·Š¬Ó˜?xüWú·¿¡âÿàŒQÑ Šóí,ýOÁ„Ì Ö$«ù‡e¹ÕáŒêV!«£uµTÔ­Šÿ ?]1¼ÅrºZ¨›»¨}"œøÃzÄü¨ur±X&P‹î?/9à÷…ô9‰ø€}Y [agT2Çôoã*ÕlETtÔ.CÉ?*„jKÿY»ýwMDû3¦:Öo%Sø2¨ò187oeVv< U×Ï2¤Iw™N¬áɃ òKp¬/°2 °ÖwÉàkðd$×Õüú—¤'kèªÿ8dô§2vúÝäèN÷cY ëç¿i¬j“Ëœ@ñ¿ƒ•¦ñ“:«Þ"4´²·ÕH½±O\ïîß>Ï/w‰‡Rr&˜ÎK5šö"g V`Þ´„l¢2î1Ÿü#7?¿9Ñ:êùžbÍ«a‡ëê{øÇNر;Ø~oÎa;lÁÄ, ¸Š·”õE&`Œà)ÛÈ‘Üóè{Û'¶§2÷)7Œoyð«CDßEÈ?æâ=²à=îê×ÔDS)ÔóÇþ¹Ÿ¾#VRr²K三¹¦2įõ °—üØóÔW(ú…{Så|JÿÃRWƒª†~àõç>ä]•DÝïÖûƒ˜þ'ôRèÁÃÖ¨s¨¹ÆR[߀zDî4-Ñ`·è?ð÷ðÃÁ—Pè²ob§˜µÝèfzçÐo‹Ê º‹L¬ QMÒy°éí™øðñŨ± Ñzô&œå˜žÁdO‹ñušøÕ"æŸÛTñ|$‹na·WåuxùŠô«jO—ö~§*½AžPóâfù£œRÔ¥wCÃÖ ÿAOd¿ü£˜çz2oÖ. s÷š›ª$5öõ¨G™ÿ¸nŸ¦j|;]s/á‰Ó÷q†“Œž‘ì·Db;AÏÑÖ“œ[,Û…âýš(ØÕáÏÛÀGE§bæ‹ÓÅéâòAÑÛÒUÖù¢ËS?X‘>`ŸíÓø ø2àaSð{ÕN?ÿ1 Ž¡¦leÞ᪗kÍ„T”ÿ“‘h<>z®šÜ=°¤·8Áæd áõà‘Üþcg•Éeƒr•ÆŒ/âmsaû °»ƒTGTÀ/ÝU/±êGE7ñFº¶~?ìùB4XÙéœøZÒã2ÿÑÞ°y¶þât¶“[¥'*Ÿ ÙƒH±%Ù† KÆÌvøèid1ÁÄö𶯆¹ÄZ'V›+]óJk¤\LÝ:‰½XÊ'øà-øˆ3àÿéÁ¯Ö£ò©‰å¬Et¿X—$ÃI–3Ííj½EF’°ÞÐ…¿ç1“:‘=ìîõ‰íìàWcíÔT,T$N½Fþá®?_F.®Å—¼tLlÝ@ú«V5œð±úTô»'ÕWS‹ìlLï…~÷Ó,öbïïéÜvaêäë¡çhè—Ôîþ»•D¿ïÞ–ª2;(Ý)¢ w°þc&EªÃBG±ï9SPKùbçÏÁ‡T§ÛüS|`;üÑ:°«ô¶a·Õ§¤ô¬·™91SürÜ[ª)ëOi³»ËvOX”¢°*³É;R³â2:Ûö¥FñwüÀ;®¼?ZåXöm|!òSž;2ɼc}€½ù Æ¨öL4¯ÇáÚÞ3°>úß•ÌÊàúL·¯HXæëôßÿqÈžóØ ›¹hç2ËÚ:"·1½A bƒ W·õS™Bå°“¹²‚§­¦Àbò™™ veÑä ‚ÿµçyí<øƒÉ1;@›’Rœ]òøC¦úÝZ<ó}ܸ€ÜGÿ’WdFËíô‘? :×Ûu„=\ƒèü2Ê•9#é‹r{³PÃDÏÄÏÿ{|fÏ»fäý_ןG£Â5õ¥èŸßoþÇJ#›UÎÊL©ØV2óÒ]Ônc õçõ‰‘óòß‘_t³z.–Ëcbþã¡ùþ‡Ö‹)®b_vÉ<ái™n¨tfB붬MÇ¿œÔŸÇÑ ~Õ?é+^‘!¸t'¢ú+ômZƒVç¬ÏbÞÈ% œÝPQ¤–…eXzÿ, M~ƒ¾GŒoK´ã £i‚nFìŸF×¢ÿn,bìÌjp¨þã¶Ñœk9=¥#9Ÿ…ý(EL^‹'½ª*ã®ÞІpÖyÊÓÐð«‰äïÑÁ¿ã©ŸÃé ›Kü+ë ã©ßÃZIQ­ÄÓ§þüZwf‘±ØŒi'¶øW|N<øóúä,ãÊPüRðfwÆ=hÐöâ—Ï¡>+MÿöÒÂñ<¡þK‡7s‰’ ~¿€)»QÉ}ä—•¹²+|>Dý`7a êîÍÕÏQýøy¯dì8>è|?üÇu]ÃŽjï¥*,<³,éÆ`<‹ð›/éW~ x•nY;d¸ õç5韘”Žœ¦*p2hâf3å±½˜4ž‹i"Ðé\+l;x¤|(°|QÛF€KO +t$¾ÓR zoyê¡0®Çù?ÓìvqøónèPá@Ýêî_¬¡WM?*ö¿U_"›k"üû ºïIy™„œÇ‡]Ç9¬îëù̯í “ˆ~-|÷kúWõÀ5µ“±ÏUðJ͹Ö{ÔÐÂîï0ÿc¾ÑÞœÆÞ“I´¤¶±¿L¦âÒ³¸7UçåP÷&ïH7}œ­5ý‹¢ß5AÆòL&²wæÔ •¶Áä_ˆž¢éÅðyÀ–£“ÁUAU‡þ»çèwX ¾á®óÙ¯Jå<*¯ÓöZjRR‚±Åµ7rï2Ȳ”ç¬oîQ@ò§|Ö)åOê7&–WG§»äë0xÕ §ºÓ”~¾å8Á÷衳2óä ¼™&¢+Ãw>'ÆêñÍÍà*-x¢¦Q×{I¾ Æü Ê­yö[xü]N#g˜ë:é™]-É0KSµÒ™sød?Tôž%­ª¢ÒÏ–^þ/Ç¿öé™1ØôïÛqþ<¦çœ~lék^ÀoUÕDZ««¬aþy «µýUòįÖ3ÿã˜ì#š…¨KÉœb0šÝ¯œóu±RÜ´žüàüÚ˜â3xÿVYÈ­øT½á’RÿqG&b® Qo×DÐÑ$ ÿ43›Qexð«8º% )Íä îayEÍEY1h¸-ùGnôWa©yÉ*vÍ”&Ê?ŠÝ<ˆNVrY}"+-nRMWwIOÜ’N ƒÿø“Ú¤å2Ê­ö¬ø31pFìêd°UwîýÄu›AræƒS#„ìü¥OµZ±‡ÎänϰèIø¾ÈÜ õñ«&W~k½/wŸŸQýU‹û—œ3¼Ì snþ<#~'z®Úøµªž. üGYý˜¯ÿµ‡ü膺€æi‘Ì(~ æÎ¤6eà%~&ÿ(EƲ/Ùw›¾L¥’]E${ Š®Üè&ÑÓ¤'qY~àt0ùGWòéò$Ââçä¼éãÐ ±n­‹RoîËÓSºï`öá‰íW¡_[Áª×¸_gÅrsn ãÛÄüóÅà°·Áåž“IŸP©¨À+cGG';Ä)ìBMСµdr/Ñ!ßÁW%_9 …ÌèŠóã?RàñsÃ5b͉<Çst;¯=ü*j®ê°·ÇÉ9 ³¾[ÌAlÿ‘ú·Ñ:9§}ÀÜýÝŠ'¬˜`Oˆ’¹£ûRoè¬>Ç.F¾ÐŸê·ÏØÂ-°´§˜pUÛÞ¯+s"mÈ¿|ÈN`çZÒïviÁ{ŽóTý©gã?N  g7…‰II?¨YD⯙ÓÑžh¾=ÊÓgØï®°] ÀÃ>°Ç!ø7žœ >æh0^»%,Þ0Ô#QÁ…:’”ƒGŸÀ<ÜbNmê?ÒªŸÝ åÀOtJÀSÙ^J¦”DgQÛ=ëõ5oÂüJÞ8Q5±P›Å 9]QÚ™€½¿H}÷;ªÿ^’Õ\dZ{¼Àz{]І2 eOvZü‡ÿ›Ò$&55¿µZö&v—ÍŽA¯ö‡°»aNVÐy·þü*ý'ÚÛUéT“ކ‡•:Šuøåb5Çã?nÑe‹¬§–ò¼­Fåmw½ÀóŒàšk‚‰5tf¸Î¸ ¹Ò0#÷†ÎGוþ\·p|aK÷ÉIx¤(\ÛW±ÀsÅÿÞÓü#@ýà]£x€?ýØ.â ßýÉšceeÄÓ­ßÝ`ä°²Zõéß›þWþý5òîUcšð•ݱUùxsïˆä¢·å²|yÇ7 /q^X!¡$Á¯žXzˆZKußßžÎK±è·âƒîég¦õŒÇ®ÔÔQ4øu æý1߈Ÿ¨)KAÿ’VX%Ú=)(øÕXt@c±f-A1³Èjf„´ša$‡¨,Å3µØù$v!1üÇm"ÃËàcOAÐKQ7 ô Oªÿ¸b4€Ù[EÇ X(G.ƒ^U!&¯Â“ÙW¿Ú 6ìà Œ'ÚéÇäîßY• »\a5Á“§:‡e×XŽT0,Àpòûg¬±ö¨J?]Í)T‘•Läàûõ|á?rP+ûY[2b÷”¬W—W©úú:ꢦÄéÏÈßܳwãAnáO ÂŸç ¶ÿn2³žÈEôœ[^lh3±Æ¼aÐWÑq¢®ˆO,Ú»tî|:Ö2&ù޾x+ÿÑ …ÅD¹½Û ò¶4ú3ˆWaòÈh°¸ùýúauÆÜÅâ £ ³ùÇf®w Þ“N+ÔŸûO»ûçšw_#ËJ Ÿ² öùXØ~Øï¿`̣ыcytMµ˜¾.à!Ü^"è{¨x½å× u%Á¯~ÝȇU]ªw¢{» †R-—Æ^¨çØi©?¯†zô¹D^æS­ãT2‘§ÜǃŒÕ±9é¿ÌÅßÝéÓV²«‹ð;™ñíx&Þã‡VÚ¹Y³ “™>“}ø8íì º4õWQÆÙœå%ò£}ú"J¡†Âž«ûŠ;È4 ~·‰%ƒÂíS×è Ü…ÊõàS/™LReÒtg´=‰,'}æW³b#*cî‚8¹gì  ß‡~!ùYê· ï´=–þT…ðc¨ÿøÉ)ãì'êNÿö~ô2‰2Öž§ò'r¥W¼31•5öôWÑõoäóTo»¶ê.w¨›:/5.%™ïtÇÞêüî²\×é™ ý­åŠÿqØv?ßýðG+ð9é_RÔs~­¨? ñ+h®Ë¾ÄLät¶¹EWŽx¢ã®‡®¬®Ÿ©ÿ8ÊüÁ\ä[¥èuþm'üy%â¹8ZÉ9ÿ䔈.²X/™Û2O.«„·õ÷âW™ÅK¬È^PÆà@ÐgeZ»,î”u^4•;ÔXüŸ ø<뱈ŒöÈFUÐH=†ì ‰¼ƒ=9¬I×EAC–’çÂp͑ŞÆlDÒ›±IûA¬Áx<Åv¾ÁξÁbTRgeDbÈ„ªG¨þãˆÑ «<‹:‡ø¼¡WÀFKâ-Škà‰A‡.“)¸‘£D;]Õ°P{¶¸ñ«pz,^ñ%vÝÝ·7 ‘t\¬X?,Ôsþ| K¶–=ßâùÿþí%Cì4p͘j¦VåˆÁZ‚ñ¹çŸ¿ÍÈY¦(wÿÙª5ˆÆ p-7´oº Q ½LfÂóîúh³˜ÈýË®—SMr‡¿ß ítf²–“xºG¨?ƒEÕGż\q'ŒùQŸä`u1ÿ1ÔøÊħ£ü¼ø´Ä°«ñ“`^ºYQò¢z`i·ÉN†gçÕkñSɸ.`ƒwˆAúï´†ÊÙœ{ 0¯}º4wb(¼NZ2‡v¶ËÞO/Áô/¹šUüª™\Lª»Òáv­^%?é…PÜŠÌýï„÷Ÿƒ?ºŠ:ì´šFýG^ìæ$Ðu =ýÕRøóˆörXŸ"¬õ5ÕŸïc.úî ·XqÙÑ P¢x b¿ëCäcP­ š¯ q}æGwÆ€–¤ÃÔ5]5k/ªÙðÓrÇz‹¦ß­WI&§*Æ7v ›ðB—´”JìJ gÉì÷ø£äLØA·ÛIøÏ¬ø%äuµA±^à¯îÑ? 0ëy„ÑýUrò›ª¹[mªaßéÓø(èt‡à‡F9±©ýó"OÂáë*éPÓOö6¶þØc&ZÍõ<*Pžÿ‰ªývÕE@±QÜù›’µtºɼ Óuús·Jì=Èâu2Ä~øÃîZr–>*ú«_<×Ûý•‹<@=f4®9:þÃ=£!/øÇ0å~ÿqyê›d_²ÙÉØ»¹ò&¨®’¬`žð¼å&g<ó?^9͘KuXOr¥£îåwòsø¯µr:è‚o|÷_éŸøž‰þZó[Fe38­¤çVü‡‘ÌËt$^BÜ3å´wŸW`úA+<ùÇÕì6– ¿jNî‘Þ?"²Ñs÷ox¦5b‹Øa)ëåØKÐÿ•W| \Ž¿¸Š=m~•Á|ožãÏe&Ù6¬t¨½ÌÿYµ=üÇs›Hù-6¹üé´:äòøÕE5Æ/šFý`q¹;èF‚|¥0ýèVTc±Îþ‡»®¶ë5ÿ¶Õz‰;Æ3“œ·W¨þã”Ñýî$[ÕUŸC×U˜¤v¾þã+þ-ƒ^‰%Ç^»¨¡Î<™iÕ†„ÿx„]ŽâÇŸ7†Ã Vÿ 9ØüçIòøDi `¢sü+È5þó…eÆl3ÅMNíWð)þ£ªêy0ç×ñsÃ`»Ÿ(/NÁ]ÇìVÆÞà*æË¢ÂÛð_:º™V_Ê¢—±Ú|F]N13™ÛC¾ó­hCÿ’h ‘+Œ ›‚_¿M¬ØÍ£ÿ*ß> 4Lø¬·h˜Î9\M°»¾Xׄp¯¨ÿ8DýÇBìPíMŽã®twoY"Ö™þÝÂÿYqŸÕ[.!óû ýî:êoÃâ…ëw÷#ü¬¯’Ä ;¡7jÛÒì²<1sr”§ˆð×ÀŸÛAø<Ô&áÜréYägô²¬XËd㘓ýÖ®z²š^ñ9=ýwQ/nÚ3t8+sƒÇþ¹wxÄŠ‡*í2 “{qò£ûz<«JëWº+öþ Öï¾Óœn ÅíbüÚ«Üöã6>ù,ºåA¢Ówë5qa®tÅŠTwõ!{¼Ý¼*9<õRêÏßÑ¿}€½ü.©ã­Éš ðHIÈ?Úê›Ò_c·‘š´Y¼yRêÃÍÔ“ Ô[½×Mÿ’Ÿ©*YŠR9þã„=ñy}áB2ã?z‚ÕÅ ÂĽˠâXó’•ØÀëv¶Ó©Úò!\[OòÜÎx:„¬sêº"¸.â? »Jæm´»Òm¤ßùÝRñd›ýKš2ÿ#1>9OÀUKFbUW-êI:3¥7>¸Ø>P§ôœ`iü“ƒ·³í¼ä_xKv“!Gó‹šäñðó‰¤Öð–.£×s·\/©lÙûÁKveþùu¦”ÌfþùÏ®Ìh—[QEã®?_#û£@y ù^„¥ÛÅ·çýÿê÷·F]´µßV{Hçäà°æoÿÿ?ýN†aæ°†YUE9Ñrw7XHýG:« ü¹iÅùaÿ±V\CÝ9 Ô¿±º ~UšúË‚¨NL¨ 7í¿_%ž½ÍF‰tÎâOùT¦1š»deð¶öE—SNd÷œƒÿ÷ýô‡¹ž}XÚ—{Ö „û ìïp”ìò »½ŒÇKÍ.£À«„ÅÇÅ'ÅWY˜b#XØõ7ö¸8ÊG¢•j¨±’hú3Ë(XÆèaàÏ÷è’;ýnLúMœ$ÎÏ©>q•îúëBXÁ  cK°'#É”Rù–.”kžkU‚íõ}LæÆÐ`5D4[—‹7Ò=ÿã ±,}d¨ºª&+„XéóÀXi¢UaWm‰ 6âç|eo|äQÕø)‘k}ìØ*òœ;¼ ñ!—Ðï."ÿ°ƒÙeR³ˆ(…,µ^J$èÃw5‚WÉLöâèuêš(+Þ‚’”BûtÖf.üO<æG}’ƒèùô®6,1Nîa½ àò™°@AN‡Âq ¥þC°/7~uÝé0°‚bäŠËñt#Øû~úï. ‚_ͲzÀl ŸÙOFQšü¥ñå/Øþ¦v:Ó®w"Ó‹|3ó?šPÿÑ%[,ò®øuz…|„‹+n=—‚=äǪncÍ1`ýèu˜ŒúñvAø:°GÉ?òئ=Ô.-Õò>ä #ÐïÆ¤þ|ÍwgxÖŠBuä1õ•+\J&p„h„½Ô·þjù‡åZÆ<¥átEÏi—·`íüè)ö·ÿ±\•4ÿã7íYˆ!. Œ'b÷Ñ;@¯ª ‚Mh?£¿H>4MãœöBúÁ§¢ûhîu+˜’›ðõ¾Ä"3ôß]f´0‡ éŠ×m¯ËéúðçqðmCý4Ï“èÖ‰úÁ¦°ò+œ®°,a²ÀÔtfÕXö1ü{6ýLú«‘¼L+ÏÖÃT+Û­ß=Œ–½.ùÇ/Ìç¸bopò1/öo'ÌôU¦%šT¡o…?Cìÿ{V%•¨ûöÔÔ2OÿQ‚'Þ²½¥fºn\W}øünÎ=æÊÎ`:ûp' xVJg5øX.úï¾Ae–f5±\T¾r´ÇÜ@¿ë×»‘÷l16ÊËþÅ¥\ì-°0Ëé\Õiê:KOø®ÔŸG²ë»†Ãtµ³¿Ø7À;Üþ£4V⊺þ_ñ/™Õâßÿê¡QÀLä9§oç¶ß£R?˜ÝêÿQþ%îîëŒô̯mŽÿˆl% Õ~õF/qE6ÌÚqCØ"ŸµÑœF½‰xý€uûû·¿´bûf˼¼ÅÕTy’9ÝÇÍù²˜Š$Ù »RX Ó•·6ïÓÿÊqù¬úíæY\HþQX^$ª?BÌš˜Xz´L+SÉOÁ_Üw_•â™ ?.p%wÝÃs"úÚüz‡ü£4êžLd#—¥ ö7†jþqÆHMýû"yÿÑFŸ'[.£žÈ¢0Èî^²Ÿñ™à¯±s÷Tס¡ê¯:X¹ðj³¸²'äFѰ9iðŽ1Èì;?†ÙMF·fØÝ¿½]\º…x§×3Mt èw:»­§£×GY•kÝC”ùž¬¾Vê:ÙÈÎÁ‹_/s9éfþs°ý¯„é™Q¬¥"ªÌÈûs Ýoy—“<¦ÔYÜ'¾mÿzÝ/½LIÿ«¨<ÁñçígV¹’¨wøU:8ŽidnÈÛéÂx·¿¸¯9aÂÑJÅåsÙÈÌ"ÓÙ¯6‰ AæÌ¢þ|ÏA|üÁzlà#²ßøÝ“º5}¯öRóœ§t#ôW[àv_¢Þo¸²³H~ò,fµnÉ\Ø—äØÈKä4ˈ3FÛg…/G—‹O å3‹x¿¬è¯æQ‹‘—jùKdCt$î÷sëwO÷.+<÷ÿQJ Xˆâ<Í·Á¯öÙe™:5ÌÝ}ܵ’ü£¾}W‹Ö%ª¯‡»Î.r×ë‹ß­W^þ“ræªë½W'éQ?’þ‰Ýu8*à&Q¹qœh&WÜ‘ª†KdQÈæPQÓ~IæpAúÏ(žFO×.œ‡»þ£%Ú‚(϶ëÉè˜"9éPuÍwÚÒ%½2lÃ@úƒ b7ç”]nL5\d®=«òŸ—½ýî[Už]QÅì?à'Ÿ¨9Lé}C•Š—Sþã)5/é²r‡ZǽÄþÃu1ÞÉÙ¤A¿›ßs½eÍ“"9|aÎaÙâ#õ«]ŽúÁƒô9OϪÍìn>µç‡©rœG ùlú'F¢ócVÜÉ“Ÿ\>>Ü73pÖÜ.6`ëVå„9­zØÐéHþ6Þö¡¾6õñç\'œú®¶Î}]ƒI¹u˜ãkÑw±Ð t1¨X2ä‚o þ‹¿?1*™i='s×(À›üØ6bЗ6¢5ʪHÿ+aUfÍàWÉè¿»ü*zˆ]-‚ÿ)'á?nÈrdìqˆV Gä´6pγåZú}ܱ¾šÁŤÁ¯åþêCë èÆ<òiØê–Ì?ol^3—3SÚG<5©?+^†ùƒ'Ä<Å{0ñJü^[Så"lQ‰ïCýGŠ0å±ÅCa‚ÀDÑÛxŸ÷à7vÓù•÷Y=ÃöæÓ/øðÔî Õ*TÿqÈȆÿÚKý‡û}÷Bë‘Eý-&’Œvç%V/*_M€É­Èê'÷ |‚ݬ˜Xª®Øškpšˆ‡éi°åý‰íóè|}˜Ýe]Œf§Ee£+}¶3Ì/2?¨Ä`ìü˜”{²Ùà6Õü¿(þ£µ~åç˜F²†87<Ö#‹Ðž'ÔñÌØøGôc™Kþq’¸ÀÝ  ç•ýrÑ_¼Mîû½ ß9J !“= Þ‰Óñ_åÛ§aÆk««ÜG¸üª@ýykv4Æ>äv…'¾ÿŒÍ?h?„=ŸEß¡ –Ý™Gµ/–€‰Â•<û«arƒMÓŸ1£]Í•WGø“ðù”}'žà«, †ÈDô¿ ÿñÉ:/"ó,z?–ï0,÷f¢è'0çõ%¶ùGX¸ªg¨ùÇ%#3hÅLô»±±ƒ‡Yi)}ßÝ36¦*fÁ±$Ћ©éoNîÛËÚÝb¹Õêî¾nïÙ‰å(À5ÿŒFs¢®Ò<Œæþ#–8¾ §ìb¥èMc¢ùNæ9êFư<î¾l8¢ÚñµÞj–ÑÝÅe³_¶™Œb?ör›, bóL~2JŠ,à÷qõVb6÷ÙÕ oKMÖ–Uÿ­ž‹©"1XÆxøóýj$ûï b}›¾’Ã9Í Érô»-åQ¼ÑXt é©ñXÆÕt&»éH—•”\{<—ÿ…5½ÉÄÆ©ñx»mTÑìR?xþ|2™nF½Ÿ“ÿÓž(/ýIŠ`ÏÛ[À¯rÚÏèæQP’G{êðXÏ%s-èŠëQ«”†k {2'¿‡œë˜ZFý9ýÌ™› ܾ ¨ø%ìqYð«eº(Ö=ªI>ãÇã)ØaþüÝŠ—­ø¬vmvLxƒÊ ~Ïôf¸ä~|Ç¢ç'TÃíƒÿx€^¬Ütýú—ͬ9GD ]1¦º‰|·ƒ«jÜ[ aÛÀïÛs"`ŸW3Íõ󣯠n‡å>ÉUÖÀÚÏÅ# û {\ WÃL£¥ÙŸ¸©%ˆSS°µîø³ðñ£P ô…˜HuwZ§;ì0›¯×¡;áyòÆÌ\ÜJŸ«dúgåÅüi>´Þ±ûÈ<­Õ©ÿèÿx¬Û€ÏpÑå¢SË%Л½wºhGr1UÖtò)ôäø£‡**³àÊxίõ~áxš˜ò£.èKĤ5©?oï\„—y ÿ±žI¸õáô/¢án›ô16QÈ%´#¢Øô&GOÆS–T5õø›Ä£[ˆ¤¶1m¦þc‹ýÕÙ3sÀo†ãmvÙÝuÔUÀÎUÓùK§sÅCçU×ÇüÚyj¿@ ûžm†Xô±þÿþ•7Fµõç'¨ÿÛ× ‹g^7]ÖôWnÿQœÓžc¤¤IYê?R1Ð ú½A¿rÈ,ž€ æÃÏwSEZæŸ_3oŠ]r¡ØGÿö‡!Z© k¹¿C¸µ¬SyWûv¯JA·ù‡²†ò7ññTõ0öß-N·W¼Â¾¦ãR}ìÖ|žŠšèw}ѱƒWØØqàWydX4Ë ÿüÊÝçÚ£/DOÕPT$Ó¨[&n–hŸ\ªZ¨þã"þÃF¿û=LM}„ªõ’ì¦;ë¡ê€Ê¸ëÝ5€£à,ú€b‡V3ÙËÊ£$õƒÙ‰>l,t¬ØxT6P²NÂcžÃƒd$æœAö“Èùxð·À¸H¯Î„øÇ³L>,ÊŽ’ài›€Þ.ÁJ¼bG[ÀŠ>SmÂ'/ãM:DN‘ˆnPùÅç`VdÖyÛGø•ÜÑcüýºdU™¹ñ9¹”rªÈnß,|šƒZ '‘ßM©È¤nã?п} ¼j\ßëWÈWø+dceÉPn«—ú$Ú¡Jö]Eìl'3ʤáÎP{+õƒL‰Å ¹ùeú9|ý+=\oþ] ¦ÌÑ u=ˆ*ê¡»m,ë)oð°a K%É Ú9ƒœXÔvo÷èA?Å©ÔYD¶÷bí‡ÀÆ/e§uµÊóÌŒ6ÏXQa‡×îþ»`?£ºó2ç#>| J«ËL¿EöðÞûŒÁ•ñqòìà¹Ñ5fÃ5Ã^|[°ñ#š+žáEäóe Uüªþ¢µó”~»ë™Œ;œ‡©g_óÑ׉ˆB.–­yº™¨ “ùž¯¦ÇÜ£ž}¹œ„erwuî#ÏÓñ~-‚ëÈ@Þ£Z„ÿØJ‡ùJèw—èìtéßTÎðÝr(QÊKÞªbÝ· þ‹¿G&SHé9wÿ]ÿnX?¶¤øpÖ+¼h(®ùùUF+UÞºåõWÇŒ⦬‹2!öÊ[Ęy~Aì—«à?1KêÂm/®¸ŠçŸ. òÞgT5ä5æŸ0¯¢ßÝ'^1ÿ#‘*ÆùQ%¨ä]#¢[%/CÖ9 ÖH)ièéÄÒ}˜ß”K ’ d2¹3 {|l]ѱ¼ÁYŽƒ_ÝÆ†•óÓ_ÝÆú¿&×-ã‘Ø_©ú¡ú9F>üÇxæ+¦ÐU‰3ùÅäåÕìfyö|D~7ùÇp"ö¦ªŠˆà¹÷Áou°•ÝìÀkþVŽÃB·„%ˆ]Ê ê2Ì=g6¾~«QžúóŸCÌ4o1ù‹ü{Þ“¸À[øÅ†d˜#á?Îcûçi|ñ[ï<þãŸn¢ß'SˆÁl.ýw³òæüDT™o´_µàMÊöõ¬íè(²ÚsQç'çZ‰­lO…âu¿ùQã?F1™¾4g&¸JLlÇBpåÜ‹¾X÷ŸÈ9ò£¿: Ö3Ô®9â<öèÖˤboýî k¢œÈ¾"ÃV,ž¹ñ« ØÄ#àAñl_ºR8N{·nbW@[ƒÊœD÷ÝÉ?¼ôl´ßùjÖ+rç0÷S8ùÝz Ïʺƴ×1·#sFºBí@]œÓÖôÄʆšö. Èü|$üÇ3ÛwwÚ‡úÁ!< ¯¸Â™<)tÓ§b|ƒý;sÝÈ3/õÓ5è\xíä3.8ô½Ì¿Zí‡V÷¾»'Í$]jÁt×SÅ3,ó«õ âdr¤7ð™ætô²gë¶T;^£–¤ë-ƒ?wOiFÍ‹ÿö©F3s'×…˜¤1œFKº&¯ÖÀÕÞÁ"Œ§>~굂äG£à:Ø ©Ç–`•á}4§öG¨ÑžýÍB¿+P9¼Ÿ5íîD‘ËTUz+Wú«Ÿc®U&¦GíGo–ÖÙÊ´ÄH° ‡ìÎôéÄù-ÒÇU|jýß”šæ9ÞØÄ`CÕ]Ü4—ÝÐÕ˜yç5ð<ç˜írÇéÍܳô8ðrÊlû3ïÍnüNž²h*»ÇÜ þ|£H,2‚{²J>§š}:žqµ}ÍŽ@VÙ‰úóctTl«>GWv•vz¢Ý‹àüEî¿þ¼$–(n/–{®øßûÁ¬næò"&oüòƒ (š&ñ\6!ÿPz,qp3úV£Æ5ýwýgØ„¼b"qKhVJIÂalÌß¼9¿RUò7èt1üÈ1|Ô)ò£ŸˆÖ Õì2š ‹Bþ‘‡xl/û+…«@fÜÔþ%Qzn"ëDDÖ§á1š Ósïƒßa«ÈÚ0˜_žVë¤V}±ê]°ˆ3Q%~ŠÈ:•~z[Q¥—¿…ÈøP»ŸZU!žsw¥qO£ºkØd­¥¾€ŸëSý޼èWïÆ°¢áÌ­·Ê„°’vúÙ¨'ò±·D\O*¬©»Ie0±Óh²ÐoÑ!#¶µùÇ6v?ž,6wþ¾«,ôZ‡Qè¿{|g5Ö4ÿŽ¿BýG7ÙTœâ$³ÃÄž¸™€uœÆâÏ]ì²#ý¯fZòõç A8r£ÙZÃIùÿm§þü(øMTzßí‚NK­[{øó¥ô†}AfqœÌâ5YÈ"˜³ îK-K³ƒÎìa‰îŠÕÁùL&ÿÈd¯¡þ<ó£ò8]iä•Y5ˆ[QbûGôÿë©_u/3½¾[ñšUv¬7Ñu|¬cO§÷FôR=ÝNd"ò“诼áãËãE*â5Û¾ù¢^…º®øã»õz“äЉ1Z“ER¯õ.·²þ#;ý¥†Ã|_#ÿè ×Ó¦ÿ~nyÝfA—ý¸?W¸Úh`®%žêª¨fœM~S]ÔgÐï êp^øJ Iô§ÿJýà[£`€ù÷2¦¿ŽîÛõ…í÷˜ôñ5gZ¹É?›yxº–Ù­üV=ê£[ CTå¿úac.S•ÚâÛÓƒÓ¯­ –—y ýÕú—,A¿{>øo á«Ä;7Šƒ¿8,'oÊ*f"ëª,­î‹8rºÞ¼¡ÎâûgéÊôi¹&$*~¢!XË,X}zä¸ôøîÑð%a°ãÐÁäP» øe-Žr¥îŒc;Ùÿ~O¦â=¾€Õ¾ .sKÆEï= ùÇ£ ot°ñM@µ™èDS„h¹—* ž| ‹¶• ZóùYýÕèP}fo+?Zâð±Ñ ;%RV0ŠÑDáoøó>ð«¿øiïÈÀóà•Bê_²Öc&‡;ÙO\PŒ¿$©ìÖ PŠû¼‰H_ÅŸRîi+9ËðXê¹2_°õƒ¶™þ­>³|ì¯w8!þö<{º(Z ÐKº…÷r!W êɹêJ0ùÇDð«FòœJBüß…è=‚^M6ÓƒëjÍ ¸:]Œà±ú|,iQr¨íxÍÕp÷ˆnV˜ÞR>ßÀ,&{vç,»tað¹؇ìdÀŸßµOѼüy{;3Š¡ DÚ™±¥Ã©w>LÿÄÄ2°.î7ë±1¶A…Å ò¤ôI?éHæ_`ºÒ%üG!¸…VØävèџ؇H¡T ¶°¥tðDWy*Â¥šdhG›4 HÑc{%lðü[*ð«}d mP6_ÑØïH=8À¬œ#ð“ÉzGèçø*º”̨RѳxUö9ÙåHòL¨’®¡žÕ-o:û$Xe_…pB®þe€Ømüy4¢:2ªþvUU–H¯¦níh&i,„óÙë”p½M‰å*F–tßtÙ¿JÊ3.ðϾÔ” h¨Æü¨¨àÉi8ÁOz/µÇyì®2Ô{tæ*u„{aôÓÑ·’3—æ9ÉŽÒ8IÁ¯˜fû‘wûói¾=2çÍ Â[· w¢*oÀ¦hWgÛ߸vg¥SÿqÊ)~uEç§ScW§*]`Žáfâ?ª 2¿ ã´ãÛÏü¿úý‰QËŒæy²®Ó¿$‰çO?ö3¢Ñ!ú£9ÝÊ$ª‹¿Mw-Å# ókkZG­„VlÓ¿ŸYXÖÝgŒ£ÿnS¢y° ´ ±E*ë~ýKã?.šþõªaY/—xî2Ÿw ¬ÜEê¤#[^Df¯D9üª\ýGó)}TžK¸û«× ¢iFOÀ…`Á6¹¯™ð ·Ã°µwÖ#2­Â`¢Ûøî30çÉÐ_Ý@s›ç®J®K©22Yo8U3Ôüc­‘BE`΢¯ ÇzЍ¾4uʼnÀ»«_ai—‚w¯a‚Ö\” T'ÚÝîa¥ÄÊü‰ý½M¤Ž\! WgÁt@%yT#î¿ÿHŽå_Æÿ)-Ë›{B¸êËF3ÌjsÛDÁ4ã{¦ÁÜĸ'ýÝå ñ·bŸ}9“ÚKæV0Ïd4æ WË£gD»ëÏ[’dæþ&‡y.ªŠðö||hnð–ùä[£ÉyΣ“ÁÔª \Iýùy…ÝúÝEØç|øÓ!̨õ×ã0Z›cÈÇ;óL5Ð t%üÇ!½Kú o;ÃODŸFþ0õƒÒwý°’ØgÉ{†à­ÎÀž3ïQ®ð\îLó„õL•àžNcRyeõÿQÏ.ìULÿʘ›ô/ùßÖŸG4/˜ÊZLýàâ¶Y§k™Q„ùQµ¬+–e™fXbqÿËÝÿñRvÄ·fÆÎèÁ8?=A2­G,´¤–Ú<ÿõâã?©íTBt&‚.(—Ëú°ýÉGþI¨?O ÿÚ,ðVkbî5™yK— ::Go!N Gí"ƒŸäÇâ&æ«ãÀ¯’˃þñSdñ˜N_áObû¶GÓ5Ènƒâ”&꣫`ñ¢‡%PuCõ[ÂL+œÿ4ý"°qÒ¯D^mQݾÀ.'×ë‰Ä ÷¥çphw»—•_Ö[s{~/³ŸVlv5QõLXõd&™°±‹¸[…åï!öß½…®?<5ØùÉ9É0Òr]åá%_]a—•Á¯^òõ}¬¹™ž_)­×Ê"Áö¿²ýêϓ¯àô½ùŽú ©àLN³Æ!QWD¶`™óÀ ÷†cq÷ß½(Z²àú_õ2ÞZý%ÁÀ‡†b{Ã㕪òwÓ`çòƒdœ&)H†0™Ì+>_Ù€ß\Oþá·ó{‚Ôœ¢q¬ÊKþr¢(ïw'âƒä0ù°ùÀÜ“;Ùà¾ÛÕl/Øé·øõSث۰í›áÎJ|g &±=•îêÍŒXçC0Kð˜ƒÈ?ÒØãôbòy*ÖEôy‡‹ ^ó4ì8QN{C úÁ“VbÞ««Êþ·‘‹¸E·—ØÙôSÝf:‚ë (~G{þ*ò~,-ÈnàmŽáƒkˆšßí°4éDvž;×nüŽ:OÿöáTŽô3\S™¤ô„¾¹óì…èz“ ¿šIüÑ…ús_z°Xv/}8@ÿÝeFYsœÒøƒ»T–ÖÖ­ˆò¦éc̵zc'ƒ/ïŸò™Žè{©iL…]*'c±Ó¡øß (¾br¿R+5ëxø÷ ·‰+*Û9‰"êRÅ8”©"ùÁ~{þÃüê3œÊ:´³¯¨)Üm÷Á£÷@¿»¯˜@Ö‘å<×Û½Ô™Š§n®Ú¦SÈÙ°*5˜Ê±•®‰›é9²Ü¹Ç  ÎN·ÿ™¬$™ñ6ð€ä Éý¿™„kæ\±Pv㹟'9S*'½«Jf‘§FÕêíÌv­w%uewµv&ê¡dIƒ2è¯À¾-%ÿøõ¢2ÿcÇ·ÿÅßo uðç?Îåþ×ùG&dFC¿û3ë>˜u9íÅè¯2Q?xØŠd%ûÁúÁ«ÆXñŠè´v¥•Ú,>’ÃL0§Š^r®ØÊüˆÖã:¥Øâ8lèZ™$§¨ª+×ÉÑfxk=¾#žŠ¼›ÅD`Ì9øÐþ»ÛÅ=?t¥ÌÂF2vwÜM¾&Êݢ垾€®Œ¹ÌÄ ~-÷WßYwÉ´jk»õF'©ˆ[ÞtëYÍ[—UTçâ=\ªY¨þã„—:ÃÑôO¼¯z€C»{_½Ä; ‹ÉÆt Ð&4m=‰¯;«á"´jŸ®Vð«¾dVð”.‹îºÛèø¦áX(åWÿq‘ü#£~L6ÿ+óÏ+†ˆ_-¢/Þ ™AÁgdáçGeÖsYÎj;˜—àÏÁØXXf0¡-x¥=Äöq`V‹ ÿ;þç˜ÞŒ&r€ö¥çzò‘ÍlÂ{UäݼGLU„/ÌCg,ß>îËpbÏ„¨åßñžW>Üxduƒ?5íMÿ·­ù ›•ëü ~–?%óë®>…«.ÀÏ\óÿˆ; ð,²lkWÕ9uª>Ü=¸Kã4Ö8;4mÜ¡wwww .Á]‚H‚CpwwûßJ_¾H‡!ÜÿÎL?ÏL¾„äÔ)Û²ÖÚ{ó$ c—‡Ì©b—Vû²žüc8Þ;{Xw{ ]Å!î@çù™¹½žZêBô•*Ãü¨ ðáTÂÜÂl’òú«¢ø,hûrâÁ–ài–“©N­©L~1vöR'Ði#þCZ‹É ~¦Vã2ÕäCT«›ÓŠE“èàWþTf§;jy³xÿ±LLÉ~5ê”{Vl×N»%óÀ›T­šäòst%pµ°7ª:T*®böØ#ë±á9šü#9hú,±Ù}Æÿ¹ïÐT:\ÅßÿÝG¿›ÔýÝןFì«Ó¿=­±ÖÈ!j‹ëúo¬²^«†r·«ác¼ÕM=¸4"ëùi ¨lNÔœ†u›xcä5–èQJ­ þc ú«wYÆý;‰ÄM°¦M² Ñ©ʲSþ¡Ç7NÈ¢æC_Ž%¾/ûÝZì¿k¥ÐÅ,}xŠßÁ&ƒ&”ÿ¸C>» <ß™5ˆî%É"4ÿ#¿ðoàõ_‚»ø²êmp±ßXõÑaC²œ·ø»äGq°5¿ë?|á?4s‘|,ã¡=ÚH¶ð ØéÔÓýÕ+0¦j.yĆfïæÝŒ*ìc8ÕþÂñLÿ[˜ÊS=ûl,è¬ÆyöÙ‡ˆ=!¸à5÷Uýa}¹ XÖ›ð$éù›¸Ü‰üÍRPîÓøÎĤRm&¦¿ζÏ|˜ªüE2o¸þ#«ž]”å¨éÔ<š?¹@;üm~ð¿ËØÖåb¸ð°VeV«ØõîM:23¾Ð'üj®–˜Øä*:²udVÉ©gœÊ½„Uï;‘µ%¹Ð%ØþD‘™ƒv¹’øÏ#+ÿ1¿vµ1GŽa79¨GØŽ­<ÇU[‰õßT?xþ\ ¿ºÁwÕàϼ+¿7 \gªCýyX¿^Éø(±÷ìÔmQ×ÉxŸâ?Ò[i`OfXÉì»VIª öq_~·^ñÿ©È¡nPÝýL Q©ˆy·„éß~Ä ß»XɱAú+f’[G¬ÚØó¾ /á@®`ØOGÑu½ØB;ó?þ$_°-o´ÐSeç¹¾9ús#*ŒG\5Ĭ~Û .UQ’)Mô[ÏáºGõøCvyÈzJ6ʺfÕà ¥ÃØuÇL&«Ã—~]°š~SÄâ nhÎ@g6þü«Œ«*ýîgR‡³’ØàšÝ|\Á¼Aü¼ »ÿÄŠoÅÅÊ;ùGnâ/] ¾®wz€í0±[‰òÆÓc騕õtfX *R£OÿÄ .W-ÛŸùç ñ—ÝaTxm–yN_Ük¿.øüú˜^eÁº£—Ú/ºí¾N?¶øÔe'5ùE qE¯Â*ÛðEŒŽÆ#†a~³* ü£œÖv3U©5Üñ/Tüí¿ª`L×o0ÿcøÕZfD¤6/xíŒâ–}•}> ø ¥sRã¬b>±™ÿ‘Ä,%rDèÌüꥈƒE‰¥Zà“+ñ½Âê'FŒƒhõ¥äÖà |óS,q^8ú«¨Ä&—Éaßa3Žš6èP-|ÉiP¬‹Ò"îObæÿ®ÿ8¥5Fe;†úóÒšþ“'A\6£ï)Á¿nwóâ,®‘xëÂ,yžücþ#+ëù ! $ÿ`v©Ã…XéÁÜ×SÁð“¨êÂÌ'ÃyŒ®áó1þË›Þÿ©Ã<‹µ An5 ä G~ %Ñ5s þ£>r¸åAuE%æD\€_i@øÕ¨wó§< ›˜¡€¸ 3?*ÐH˵¿G®–“Ž_5@ž"[ƒˆÅË£`êÍìÁDÓ[í.ÖôÆu±ÍžXåìþ&ç¿5Eá¼áÁÿ5äyKOfyŒ{¹„ëýr§3ÛÝéçxŸ:ñàWK™ÿA –ïÊÝzª!Z€GXhÝË’×Ü‹mÓFè{Ñe÷â©hŒJ£‰LL?øô_Œæ7þ|$z®êðÕ3ìf–ÎËÛ‘YÙ™ƒ{OvZÎt¯·X¿e$ªŸÙÁê‰ SǯþBÿÝüô/¹B¾Ãuißß¡š0YÄAjhR¨® „ËÕ3üy°¢º¡~TXôUª‚²ç9L}jsËRs9 ýÕJøø Ld¯CýyE{¦uÊšº–ÙÎj <ؼGô¶ïär·ÿ¸I\¼Iö"ކ–d¾<‚†ø49ÐNëw57¼ÖRæGec‚Tò‰ôoŸo×å:Æ;¼Böá­‹‰•xø_™õFkªÇq? /´zÿëúdô“ÊhL7ò‰|ðçXs‹V‡ùcÉ?l#‰¬ïvߨñáž¶C<¥'exÕØøà`×ô8r‹<#fŠÓÆ=¼š²o/XUDSLˆ$£9%)ȬzA4-Pœf”«e:úD¬ò¥ y–-cbQž=7#–˜@^ɯ‰n¢ŠÍ‚Wi-³É(rã·7äþ—TÂG|’žhv˜øjßTc¼‡MœÛû˜Aå6¯ÊT؀ײòwýÇ]­%]mÓÿ*j¦}\½ºøzàAÄÓX>§‡8UÝDN;±â¿÷œW°©ãavž“Å%cONÞR ÅþX¬Î²š}ìú¡îº@÷ªkð¾èwƒ1å¿×kg¼“ÉáÏ‹`¿÷Pe> ”o"¹B5jÃ'ÃH b3{ÿR þ|&½psÁ-Ü¥ºbˆÊ…âg«¾×ý–;+>6R8ïþ# S8¢bã˜ÕBeEÏ´ ÿq¦!®qPÿ«v(Ò†±ÃK g»‰"ª‰’¡Öû]J0ø;d4‘!c~ÔzX„ßPÓæ!ÿð¢²â-õƒQ,÷f·ì³+üùòi=#_#¯þ}¢üÿ­Ÿ¾ƒ;ñ—zN6ã©úÈ›òŠ:o µß[…¨7_AÝGzl³þc0ÓIñù3+vçÈ‘¹š‚çü³ î(3þ<Oë{žÞ:ÖLs¦ÜnJæÅ¡Fc.3šæÛe]oð—/©O¼[“Ù~ kÑú?Ég–ð¾Ä%ÿÖ+—eþ¹ª”¢¼EwU"Þö¢VS°¥«vkþò–•ÔuY}X>Û‹³]CíyUf€¼&[ÞB@‡•9„~÷>ýX·c뜼n>ýÛÏ‘ÍL§þœ)1tÙݵÀµŸþ%¹~·Ÿ{ WnTÿ±„ùƒ3xÊÎË>ÁŠ÷¥ü·à¢Áú«û̯ ÎF~ìàx=š1ü£,üG~ž®=ô/ÉIGÞFb#ËúÚ"üGk45¹°Kq¨ø“.ZwÅ æ×nûzDzKŸA&!Ôør²ÍÌ¡ß×OQÿ1A¦1kD°ÿU˜Èx£D`õ-ð OL/,s::jÖ»pœ±Ùcà?ÒE¨þÜ…~÷ ¾¢‘_ÆrÆ¥Pi"´©&ùGÕœº…4àFYÍ?¾ë?ÎiN½Ç¼ ÿÑ¥e)üN~"óUØÏ¼á{A@.£™‚5›HÿÄØ¡¬@ðõúúiªá ;×7ï »‹ÍžŽ(© É""û{d5ûÉöšàãËñ¦Edýo*%vhãÈ?èaޏYGtúïöà ® f}¦µ€8ÝAØâ«öó¦ù“…U„YevË×í„øýîϼ7EȧŠâÁv𬔠ǸÆçËf9S¤¦oSg¸é5œíRvš…9Ž_ä4º‰…Xæ>öÓP~üjUùAª‚BöŠ‚^ ‰@ýªÑÏÀæ%$ÿð‚=ŸÇª'ÀÚvPï¶vËÏhIþQÝü•^#©}¾M\á‹ï>KÇDv}}Nk³ª…XÈoq¤³x§ëß›ÎÕÂÜ—²ø¼0Vy±ß‡ØÇPÅ©LW-D|<uŸ:ööVð¯¼ô<\‘ïq {:“úó¢æ~½h¨oAç|À¯âpNÉÞƒ,mBok[-ÐEA9N ôU€ •ó ?±Tu¼Ç8b‘Š"t–YXxò@òÀþð){Ì'j/ÝàëY©?|/ξžÆig%E…ºŠìÓŽ_·`>«1jµ V}  ‰ÿèFVÖ/ÒV¾—à9zá%«3ÿ|¹½¥T}{=þ£»5<«¼ˆ3=e>Y€Š¾˜Ó ¶¦ôþ2>ã»m²¶NVgê?Ò ®ó> 0¿ö:suë3é9ý¯rÑ¿ê,KdævÅ€m/»ˆ)+†`¤Z¡¿²àK’~VWå™ÑŠçêŒlî…u‡OãÑ×Ý…?_ r5“NgeÈA ¢CäÎÔÌøð­_ŸÂ'¬·JûN?SúX¹]Ñ]c©?ß„Úl;úÝ‘ð÷ì_éœøP5¤þ£&ùG|ûÏàzüG”ŠŸéç‘hõë1ÿ¯¾¾Óš„˜X{S«ù¿æ?¢3O#õƒ%EÅpú'®Ö*5Œ!ÔèF”¬<¨M,olÝ:jórÒÿê9ýKNÊb8b<ÑoþÐ%È.¢€™’úk2Q¢ÞÖ£¿jBþñ‹œ+sQ‹œ¡þ«¥Kƒ_OUdUßÿÚ¡¶ùzȇĬ×y·Ra7¦Éd ™™S< g¼/›±œ§°ÖGùûWø7(Æ,âÃ2ô^0Uø­0õƒ¤nÆÃ*ø8ˆyK-¢ýf}0l_~N?¬é ¢ò?¾ÛÿÊÛȇï…Ïx@ÄûYNÁ;–3ÓЪ Vö ‘èiì¢/8ÓžþÂ0¾©¿Ú ÿ‘Žú0|LeŽº<ì u*9ç‡î+¸ýîÔÒí`ÊÚ€býIµ– Îc$èR^4ÆëÑÚ¤ÿÕ6øîL×F/ÞœÔitÆ·Ç‚q‰/f#Šãô«F0Âwæ ³øUsI¯fåÉ”ÙBtTñ§—~}—‹‰ã&ókOà?â£óròk—ÄÚ¤nÀü£·D?“‚kúïÐ5ê?Ò™i™?Øýüi3}êËcx’_à? Sþ˜^g¶U]·xºaÏba3bÑöë ¡âz9Ê\„Æ|0µ¿­JèÁºÁôl²6Ó ¥½Ýýî »k¸ý\Õ§I]ô»Â¾Eäuˆ7²4˜÷OÌ ›]ÿßùõ1Š«àÉ(ÎüAPÏEÄÿÉð2~¥þü¹^‰Uh¨þè ÿ×(¦D|)~ó 6ýU3"ð,ÄÉ/Eú—Ä2ÅAé˼pã•&þíCÄÛ`Q'ø6`08F1ºÍ–eÌTTjŒGaÞT”ˆÐ™WE5El"Æ}‰ík€¥_¢vò)§|H”~Œ=1ÊðQ2·Ì#ß~{Cîùlœ¯eVV[‡5Úr塪áê> Et°’rؽ/òŒi¶ýnþ᯹°Ê«°“÷á·rõŠbS«À¼vÁþ}Â.'źfÀ‚σÿ«-b|çœÛQØU_žk쟅ÎOýÑœ¤ßýÈ¿¾Âé †˜*úÌ}kþà'mÓñ›õ¹Bsás¢:ùƒûÛ ŸY˜wº´º„§;WïtQœaNãn •9ÂåÏc¢ßMˆo3ÀÃ~¿ÚÁ=ð$Û:²†»:D<‡Kh¾Ük 9Ob3@ÞíÃíß>Y3ц{›Nô&ÔÞéjž·#ú©^|œ£*—Ý lýˆoáºÉŸz°îD®À0±ñú+£ øU ¸¬edjÔyvà¶–xþžòƒ p‘ìU%ˆîçÂá|Á¶ÌXEfç%ãÊraîK#ã“ÌÇ]ÌÈñ§‘Ìâ~LF]šÙÚFýyZpbiûì;s¶ñ‰Èb÷§ø©F ,™áσûÿ9Þ#'Úk?²Ê°Ä%a.˜ÿ±Âʪ,”I[¨<‡é –wœÜâù‡Ã}`óºûša0ÅdßÔEž¯Ž¬·üÃÛêk•±šRáqÎòÉ?FÛíàw‘í3xʪ<ùÂ2Eýàý¯Vhô¡è"Zƒ‡ugÿmxö tL½lÃNG¾1~ßî{}ÛXýé•ÉNÿh©zsEöQ•çÙà~Ãfëgðn&ªƒß­ôfcIE“ªJ~‚úp:¹—v=%zkç¤ÿú}ÅËô[Ø‹ümYvNô»ÁU-ôMBRCUŠè¢*LMY0«Žä ­éùÒòƒIŸN}ãþ·”:Ùô/Ɉ†÷5+vðFfåŽBÿ× ^ÒÀô!šÌö–1íÆ®«tvø¨Ã ‰‹íᮓôhDýà1òäÌ?©Š6ë6ê9œx.6c©ˆHµÀ×cþ_}}®•Öƒyã‡tS ¯×iDŽY?©ÇÁdD$£1Ïÿ|-•QÓøË8oÄ1r}SÕþÚ'µ>ø:°ç)Qžºdb—ùµ‡Å~¹O쫌§?ˆ‡Ý4æ*ÍÀœæ­ž¢Ú oç-«bñRS?˜—Œ¼z˜w6üyâ?æ‰ÄÆWÈ*‡y‘Õ5KÉ7ÄÌ'±)iøé4™R“ÏÂ_"ÔOŸ/Åc™ݕӹc71®ª…7‰E¾Ýv%ïÂcÞ 7ø¼fßõÚ;™‚Ðaó³a•˳³Üx¹Ø/O¢ûM(‚¼É!ZÀÔ56û†ÛÙ6äö<8Ä”Ýð—ѽ–ãaTG%Ïde7sάÈ[Öä,#õçߊ¶iÝôƒ²¶ô<Ú6°OAõç“Ì&d/t»%Ê}Fÿ±_<—u-ô-iEüpîLT=ºÈÊ=ˆª–¢QÞ ÿÑÿ‘›¸ü"gùYôkcùÖ)ŒÇ¯{ Ü½-»…[ÿáEýÇpy”ë=Qõ$ç³”Ó}¤3ÖµßÅÆƒÔa:€n`(Dv<ó"²²Þ\Å©æ@qL¶V_½F79]˜ÀŒÅ‡âmö ;X€bׂÝN/ò‚Önð«r0¾%Ép"«Éªj¢š(“KÏ0g\͸/K€&ŃÇ/Îá9MmEìåTôW/è5ÞÞL¯ß"ôß]Š Þ×þ±_e4ý˜šò¾¹°Vg`@¢šã ~Ž~×ÇÊ ƒßîã_ˆžýíŽø¨¨Ž’ͼ4«¡pðµ=脺‹Ð;l$ŸPÛx—\²x—yOͲútÂÁ³¥%2ŸC?ÆéTܧ&Šî æTž$ûˆBý “!ÝÛ[ަgž¼99~kâ”®dÓçÕk SNCÿăª¬Õ UŒø 2J2_²š=øöŽ¢I¨õjËDŽâ ¸;\®³ûGwCð°gÌ;J…eE·‘¥TLþÌ‹®øÊŠdRþTÓ¿wºbþù\­§¾O9ä¨5¸SgùRÚÖ6ú&~¶rÂÊÁ:ÇEåƒÿè‰Æk&ZÞdd6íÉÍ>àß¾àÉÒšKÜwd$úÝgÔŸGRÃáÏÇ™m¸ÏmUmæ”g`ÊÆ C´2Nê÷ÄV Ö‹5ô/ù±þW/ŒKø¥2yC³öµŽ~Sß*K™¯D\9C&ƒ ÎÃþÕVês¨ƒ¿nž#Gèë{×<€®îèwPÕ'#–%Ó“ÜùW ýϿŻéT_K¸Š¿Þ c[UÁ Þaý‚(6r©Òô'ƒG­äù]ÿ±Nû(Ñ–£S5Á]“ÛÝ)úOÏ)Þ cf>8ôŒøŽ•ä Ãí rÓµŒä £©í¸~›uâÃ3ÄÀª FíYÍv¬ýaІ'x™¢dsÅõou­_© Õ×Éœ¿9»Ú=ÿ" ßMÌú‘]v‚±yÁz¾œû"мåXÜj²¬®ÿH¬'Nm|25ŸÕvóžøÉ¬\Ã}ä6çDSa[ëPm:³Ê‡ð¦÷¿:+ÏɾhæCžáߟÇã?È] Þ +™ñÝs@³zkº•ăŸˆ< ï3ŽL!¿ZÁ½î‹'ŽÕ_ìüÇüÚÍÆtéL5NH®0‰;q öÍÇLò›™þ‰+‰r³Â|”¦ûN,©Áçá¹fƒéÌ¿ › {Ò÷Î!ùÌìøD0qøØèw½À¯®Ñ?q Ý-–ªœÖVJç¿tèH‘Næµ#Œÿ8F\0•&=ýÀï&cƒö4ùGøéD®øZ ÿù©?ÉÛÔÁlGµùpÞ–Ö¡ìD]•ø÷®'yÔ=ô»Ë@šXmÑW½gÒlAæ޳çPÍ݉ÎTwrMOöyŒ yËê¢îË`ÄZôW³@n««<ÍUžz ó£"Ù¹­.ä1ó¨Ôø}ñL»ýGÑ+=;íÞ¤±W…?No®tßäyúú—TƯÌ5Y­xû‘ñ@qUüê0ú­²®·öSû³•üã)Vÿ=™Øt\ƒY/@Ýd*AM™Ç}¾%é—…<¼"‘Ï35I¦5« ¸íëÑ…þ%­U kóÐÝîµ[Ì<©³Ôº¨!´@ÐÖádÁ÷'3g¸ýÇyøsêÑ`3zð-•þVUØòºpçP ̰[Ú]]»¹˜¾Oýêbr%“Y¢ØOy‡W¡G/Œ¯ýI½?Vaç¾<ÿ_^qgŽWé¿›Û}~lálä1@«ŠªèQµÇ>­™QÞè‚þJÑmäÇúå~Ò@·«€¾dã-¾+ží˜•¾UÇÅt±Î¸ ?ú¡íeQ±Ê ¨ó^À,OÊ/Úk=ÏÀ'‘]úò Ôúî,Œ¿X‹:a¨ `ǵð·L_¢ð*æ¯2ºšÂ9»X…W9[F¤£@lA7-™lt!–úV*›ªLö!°©UàLò‡h7³‘䈀ÿh€µXΉÈm7Ïêz¢àÚ° uÌFDT¾¦ƒç$ÄîÀ£4ñ¾s·‹p†­Ì)x³}f4sXz70°qà,ÙArz‚íyÈÕh žWË\ùúÙú(ú·WR̨ãlVRçx†k¸o;üFqtõùº–ãøá=ö³îq8‡ó²ˆæVƒWL®÷%ð™T/üámüN üH*0‡;9,V‰ŒÖvò_ÔîI_°†Hæ)êòšÛÂñCµ_˜m27Î$ ü—€ËugºCà ©{œõJp²Üñ]AñâvÐ^¬Ñƒ»…ÿ½ÃCÔ:u™¨™˜„-çöMü^ÀŠ„Æs7þ£} £‚c‰*‡JNþÑ{:@͆9 Û ¡ž™þM‰&ÆP5q ÌNçg°Rk,±â1§ëú)ªûêPÿ±ÿ‘‹ÚŠXçI*6ÏéY}Z¨;}ÔHþvÝN*2æÈšñ­…̯ͤ^¨á /É\{Ñ£¶³üèÐU*Âr<Žþ,€#œÅóÔ £ß-#ãàu¯àÏ{C-2ßÐ/· ÜD3ô\‘\Þè¯öP§±”i¡•—)ÞÀÕšpäKTŒæÓvŒÎÑÚë«@q{rÌ.ä) ˆ†žPOB—+üÇ2z‡C¿[žx–Ý™‰5öX´Ð‡á?p´ÁhùQ!ÛËý¨ÌÑqɱ$}²ÛZg¥¿gt¼ªñ à·K“\²_Ó•ñ"zÙ´ôýÚ¦–ßû¼ò²©är¢ûúe§þüŒÎÓ¶Õš¯Øfæ²¹ªqÕúSÇymDLAµ…Xa:¶tÌuTáÛ°ö¹Í¡ª‚yÃí?Nçx˦ø'ÎÉlÖ³ç»ê’¹´°rqÅ„k¨=Ýuž~d ]½`Ž–ƒ_é®ñÖ$ë1Œ·l¾°8óÍ¥Écó`ÏzKË­»Ü×É}"ô!ž~L¿­75 ñ³8Äɯ×"ÕŒÞô¿Êi¤ý¦U ñ³Ú@q ư™Þ3=5åŒKzl8€ëâ8þã‘Ø>xí·ÆA2Çy2;×¼Ù›9tUáû¯ËFôâýMž¢{Yûïö¢ý{µÆúr}ŒxÄÜ6Y¸ ~u ›ZÞ#¼lΡޢ+]lr€‹}Ë’ïKcîöy2­œ0ÅK±œ›A(òªÔ–Ä€±¬LÄC•7É>ÞÊ}R~×,Ò⡊Ã|“Ô{m]K~[&aüBFbÿF`XYá”ÎÃýfWÙrwmŒddlð“DÚ1X%ùG|¬Rì…­œ ì3xÍTê3~…l‚ºšM!ñÙ‡¹¤wd*°’n¼%Ígò8ú…žØáNð5èçÔŸéLdºzµ—k€žv™,%‚{ë/—L&²àe’«Ôrí‚3/ˆ·4ÍXE:hÑEG‚¶×§ÿÕšÁÔN¤4}éß¾ˆ+¼Ê×OóPsut×i†ÿˆD,PŒè%V)1è’¥©o™õB%DNËÅ 8íXy´ÙZèFð´»¿W\Lýà"fÅÇ…sž„-¿ã´¿»=k,bÒCvbæÓt, òR›ì- 55Ð_б¾œlæ-,D­RT~¹a§—ãeœþÉ}©õSè„ÖZñèâð¾Ôh”!ÿG¥ZZº¼ß"ÿ¨ñÂ,}G¨ýŒlpBGxŠ“ñ´WÌwðç§­ IsPîþìJáÊìš‚¶¸2Ñ18 Wfuü§Ð90Çbr¨õ²Á”oÚÁUš§n™ÔZMÐF $»HìÚn'ºK?­>jýÛoÁUT£þ|%ëÝ£ Ë\uL~øz+´)ðd àeFÀ¹´%¬Ktµ™zöŽEU£?ÈpòmÓyš‘ÚVv˜ïÈ*~—ƒæ®¦{Jøêe(xSP9øšÚÄqxÒŽäSÕ;®6µEÔÏÕK¢{ õGZž€Ýª²Ìư!ÔÌ¥ëÕ]fÛσ9*OƵަ7ݾ²QÝèˬɤĂ[A¯’ |-}Üþ×úÁµ²xí@ÞÔ®r‚]‘É$µ¬âıá¢jS?#Ru&€Ôµ'«J®øtþ*ßµã-çÁã¯"ƒ-!ÿý“è-BtÆùH7÷8¡ž ÷Møî‡âð ʘld¥Å“ ùçZEc„1Ú8‹Zê•vé»+„ü…zKfªæZ'º.\b¹>VŽsW¬WÈhÂãTC®ú³ ÅT5žƒÂ&ófÍ:2P6Ðs÷`è—¤äY(%‚#ŒÐú»rú*½¡xC<îp¡ ]V>ÈŒús%(ÔP”}5©1(&7‰£¡ÿ4ÜïâÓ>=ÙA|tINMš"K('º‹Ê©vù#:©Xh]ï0³äþwïf€ïŸ@¯õ [s¦º?Ñçâ“Xé‚(ZŽ hŠ*C¦UZu2kaWÂpGÑ:hÎǃ8sµæškD#ì¦JV#ÖLE¿¨Q\+¸’ýf9²‘RÌ|ò±æbñS•³² ðiM­ó{sœr ºFÿÝZrP˜;½ÐH‹ÑÞ̃¶j S>à[7‚ Òw/õ$­¢LÃØýó4¶`u³¨çäøAÿ«aæ¼7šó"J) Ñœ»÷„9†¬¿àO–P‹]½OzWÔ]õébu‰kòÉt´¸ÇYõ¢9“éGÃBí0ªœBÎ|„·¢²*¥æ¢K:ÝœIV%¬ÇtpÊGeÞUô»[è\˜Š>ÁÝ©Êl…÷¸Ë‰fV»¤æ^ÏŸ*æÕpC¹ }9rGù‹™™ÚÆATwWÆxÃ/d ·Ôgê?*±çCvJûuþ­PG¶üÉ9—¨&æ"÷33V×Å+4®ç¸÷%­fŸ ®+].òg.Õy&áN†ÿpú垥Rþ½o§räExÓŽ¼/©L3DýyT}9Úžæà›[Í»TÇW3‡YùÚ>zXjüõ&Û©&¬Dý¹A}ccº«¤¢Ûá•F 1ᢻ¹Çí?Îé‘åüÇ4Þ ®Ô6OñKàj‰by?ØZM»ÝÁµÑ•Œ­}]y0Ŷ1üÇcK¨uä¤K±«¹æYBt¬wŸú¿ýƒKoB¿û˜ùçÿÛþWÑu_=ŠQÏ0E!ñY/ÃÓ°QËk´1¦§QÞ~Ö~¬ÿî ­‡ð—ÅÉõ<ÔW¾Â­Ñ€í¦^û–qûýœŸ± ë²¾c¶d |$óëuûÚÿñ½»[³þÅ/¢Ô' ˆõ=ì{w@»‰*zÓùé 1õ-V÷@·s‚Š£SšHüÒØ%œÖ/XÍ=x ¨+ÀÊÓcËŸ|º«}¤âñ¤ŒüÝüc±–Šn‹›ñQ¯¾w/vµ!Lôpi‡ånÂ3œ«w†] 7²yÞÍŒZDÆ@Òž ZOÌž‡©súUDUóÈ=“ƒ”TA5*™ùdI}OÈB|Þ§ÑÈ‚ jmXo3NËVØÄi¨)S«âðÁmˆô½ñ§ñg`A|©vÜFíhx:¶(¦"ãÃÓ‚%eB÷ãE]V2¤drgÍHrˆ†¦s$¶{ñò(îU\úÀDçhOÂñýÈ?šÈ“ØÓÙxÙ¨àIcyÓ[7ãªåT׈ sÃöNǃ|¦þ~lÕG-ƒ÷œ(’ûCœ§ó±·1Fve?1±‘‹à²ï°Ö$t'¨ÏˆÌ\¹st¤MV_Í* þ ™\$ú~4…ÿ½¥ÞÈ^²“Ûšþ½ðFC‘ùµ¢zf9{@GÌ2´&‘5–¾ë1`JÃzS@¿)L+#éÕÝwÉ~œ~žË`'Cnñ²‘¹õZÔ´‹»¢¸Ê¹P©ŠèpÁBŸcËÏ‚7mãw—˜D¿Pëm¾Dõ7ðÜžd¦cÌMä ó¬VWjTbÒ¿½D2Ö 9ÃJ`߇©ð„íYC=É%ô»k©¢îg·T«ªŠËN™ÍA»Ë]256½!ùGu¬êIxó¨ð ɸƒ?eH˜þŽàW±Àîòãû˜‹Ý§;A?dHê€ÎpO›Zyyû› ¿Šïú¶™ú‘(®å M©\?Ùk­Ï°–½¤-=gò¥È敦— ÝçûH[(nƒ(çEMòœú¤ò°*±èuž:øH0ègÐ?/ ~Ðýî,¦½Ei—’þí±Èáüˆ¿^È¥D2ÇÝþã²î-Nƒ«ŽâŽô4ÿ’Ó­‚\ýNôóæI©‰¸#þã ýÛûÚÛ©?/LËRh0’±œ”“y£ü.¡nßî‹òô!‰þgˆþ‰o˜_û=Dü[öÐOè1aFl‘_ØÆo\í­šÃžÏ7® C?ø­? ÷ç´þÂQ,æ†MX‰*4“ˆoÖ ic|˜FxNÎwÃ] ÌýµØ¬²(o|j ÎÓgü¼~LÖ2kɺ¨y«›Eè Ý0 ¸¿-Ù[¼¤î#¶ª û{ÍôFoÒ™£ÓXÐ7 ˜‰øénY¤m›û¯¾ýáø•‚£øÄ³µ—7³0Öª(Öú#Xr9âW‹Xj;|‡µ}á~†¿µÞM¡kš Îÿ˜wä8¹í.pÚFÄÊ“@¦»jªî‚jõ‡[èŒf-Ã_±½QÆ´Ô"íÓètS³Jvâ®Ć‚±?% ¿‰o:Ž]3@|ê "(ðÍI/[áÏ_Ë|ØŸö`j‹¨F ÍÏnê?6Ù{àÏó³É`%@†Î«ÛhˆbòtЄzvîÙÉ"M›»8…YüùBô¢]ð£±Ì AKŠ»F‚þjUgË€V¢ j® ø®M\›ÊbB¨õ„¼…¯¿Ï]« o±Û¤Ã#•âí­ž @Òµ ç Qõ8«‡êN,~üª0|ÊV𵇜ÅfuH ÷zÞø(b¹ÛÁäE…Zˆ¿˜ÌñVu XÓð›çTêýE§õ)ÌýàVíéê•kš …Ay3˜ouæ×JpÌ[<u­ªÌØm®Q9¨/Š¢x µFÇo;õƒk­+ô2>Oï./® ¼>Œ×ÓS& 1áƒ>ÄÈ%Z‹7AýÛ×kEFÆ\C#¿·°ÿ®6FÜÿkˆ*†ô àtqåmñýUp¾û­…üùsã ñ[Ù˜ë Ùp+ê8ÎÊßáVêË»òOshûïÔGÀÜ>ÆÞ§Qbõv™3Ô|,tdø™æ¬ŠF%‚?s^ˆ°QiÈ}ýü,hþyYò oÖÚBÇŽKÔbâM.Sý¶¶ZPݹ_Þp¿c_ÿ:ì×ÕZðýåÌùVÄw'àN˜±Ò‹‰ÁÛ‚å\1«?¤áY½@ôë»ók‡Y`ö;€þÂÒ)ìeZØêûØ®úð÷9ÛCXìkôéj(Ìž^ÿV…IÌ ¸+³°+fY‘w te¿‘¹³&VeÐïöGñÕõã:¢A;°P&7Þ&ß?ab`t~+>hIBv1ƒ|! ÿQ<û|zâþ,¾PÙà‰öi>~ >]ÁŸ?DU9ÿ1UK+~—þ\ï ¼‹©ˆ§¡&kOÍe/,YF3¼Ãô¡Ÿð @ÌFa?ÀB÷ÒØf‡çAr4ŒL2ð¥Aäd‚óXa .5ÏWÀÚ£cë~…?÷RÅÕG¢÷eèÏè¹¾K6–ÝÂÜéF†‹ë^~ŠÜ-ÿ,ì¢ûÌíPöY+ p«Ø}zú¡ÏK­^Âw_ 2F^¸™§=ä¿C\àL’QŸâô?¾ÌõM“Õ*{¯‘Šº_]ù©üþ‰ûðoÈ\¯’ì Âî2‹Á¡Öóðä×ñµ@ãöP_±žþíµ¬öäHšk›Æö×iHFØ•iW{¸/yÀw‚#ª8hÈæIÓ½Þº€·‡ÿÇóU›»‘\&aw+á?¾Ñ¬§ÉŸ|*Æ|‰öxäYÌÝpÁÑ´ÃÞ?aóP}ÉÙ×»Ow”~Åx®v&ÕÓÊf ¶òRMé/œÎJ—Û~TÛ_búÓ=êA¼¬cvæGÍ´æƒ6u@}<­&½$ªº÷—^ß-^ȤøÕG½‘RT'õº¬9CËDýùŸàWQÉ?ÖFt¡ ß»©5§d1ÞZ…v溸a,€§Ù,®Ë ÔŸo ~ðÉ­wÜØ ¾1þãïq&:–LÐýô‘د̲ SMóPÿ1åYA½¯Þ\ø“<Ç&5!.ï¨Ö¢ã2¥/ÅqbðD ç`ÜnFh¢ä!㜈Sëðçëy†žbO‹cŽb= •ÆReÍÃè?Ê#ò©ûN}ëägk÷éö°F¾/‰UýÈ?êÓëÓQªw1Ë€‘\ þc-xÏHzã‹ïu1nl$·ÅßÁóÆÇ Å¡~ö3µ$5Ð(à?VaÃýAt,5 UU™[_ðÍhÝõ+²¨ò‡)‰¯4ajšÀJm¡þCW¹ÉBê*§ŠÒ©h_ *v‰kO-‘ñÂÌšø{y¥ÇøŒ°OI¸îK¸…¨€ß ¸Àì'²‹Ï`Qž`C ÙuW|E÷„¬à^8øÕ-ª(!w€Õ ÿˆCfåðç=¨ù˜Cð’+)ñê»Gâ?ò©åÄ~#àÄ»‘´ÂÛm©ÑeL:ò™½j2Lì9ŽïE6µ•yLÙÐxÁ¯`¢I]kñ¿dÕ™xüìé1ÙR¶ s§[O%3jÌÔ W]ƒüÇ^êõ¿€ÏoV ˆèÏX…С|Ré˜ç7 ÿ‘•³¯Á°è!Ë“?Z?jŵFjîÿNòåTpî ñ7éøÚÊ¡Áœµ«3­¨¦kª¦8VE¸éôDááf®á‘À¼W¤gdÈÛüE¬ÀWÞæ>Ô$7j^AUÜ„ùµUUR+‰Ë »z•>é`‘{À(ÇcÖÀ:S‹ÈùÆEÇ ƒë–§QÅÜœM$+„¦ ¹Ü!#[묮 K@Å6ã?Ó'ä~Xæ…°+¬Ñ‘{£;W`tj˜ÁÓ\{Pž€l'€7ÿO«¸™V2+¨Â°<)É|é˕ܵ”è ªà%t{¼f½§KÊzŒàÎ&wìNGËŒîóMÄ|¢Ÿ~GóÓ¾JÓ¿$1øÕz&~¤»ð2&ÿŽ…Ÿˆ—›ruìê¶õ^Åâïáý‰…Žî­\ëÎ?|ôCÔE÷æÝÖÜE¾°²Â>5#ÿXDvuµn ×^*BÃ|àyáÖ»3Ѱ·µ‹§r\®2‚(!¹ «áyþ]Ÿ-ý¯ó£Îiõ㥃÷•„þ»ÏõöFrQNÕ+sµ·jF6£…ñÜHkDÓ·ÿj>íÐF‹3²$‘x\rºkâ€Ñ_OOÿ>ù@ˆ]Æ)ýiV þ•gÆ^P›éXÒ9pÝ9‰Ðèõò2¼E%y‰L§uû'æÕçê]ÅCæ3¿Æ–ÃúuVˈðRËëD爃ɫÐÐ<Áà„ýtɸ%‼¼ÃìÂFg‚k- :q¨>7QØ{ŽáG†ôÝás÷3v•¯ß¯Óc—Q©Š$Îßi>‡-,IUœõ]ûP²ŽÇCM4“„é‚÷u•à¯MŒâT¶ÀúGáôNNÄG¤£Ö±6' HØHP­“Øûj(~VàM“|ë9væZ_“%ù½fìkxÒ-Þ½–à“ͱ©Aq›ðu(ÞiP¬Kx¬Èp^äσ7äþôVË~u«µvŸQˆ|-&»¹#ßBd‰›â?fâýº“CÙäq¥7¿ã^Äý¡Ÿ–D4ûñÖS២)ÎÁõÃ^צvî 29G:>´ƒ«X‰œfž£ ¿µœZºÇÿ˜Ž¶™jövä±ÈYfƒ€=äø+ÈX÷£¿ÊcݤÇ^<»ˆåËtñêÖ:®å{ò¨9ÄÏÉ)΀}†­ld\• ¤"%þbÒ0Îrlql**–€s\•~B_ÂøDÌ‹ÿ ôþ#þC£Ò‡zv?íì"¿+Êןœ÷šOl_fö¯¢ë'W ×&k+óë1¶zDþz‡úóC°¶ÃP›Œ µ^|¢§èœåI"‹þj´ù˜ü£¥UÛú=Æ£›ìOöa,á\”V=Ø©øU î/’Ü׫-2¦{=/ÍSïdAhæ_䤉œ"ÁsObnú·¯§Òåš• Æb+ú«‘Öê,Ðã± ¶H–7W{¤ÊlÇ«½õkFBŽ÷ õ`w«œYÿQQõâz•…çXL]{|ªóÖ€:¥µ×Áö_£ÃÊk >¸/ý¹fªã`ÜIep_§Xø×Äs‰àÄÁ7 Xy]…È`£ŠH€Žá8³èmÔaÈ?ŠÐmþ³Òì ÑðÓx¾ð Üþ㤾T,‘#y¿zRÃÔD~±ê¹vSkYÅmºŸ4·›¹.¡ß-L­eªšëôÁYÐL8“žWÊD¬CñŽ©äv÷ÓüŸû[o‚ÿ8KÿÝìîûøc»HI?Û„Æ<æŸWG‚0±ÚÏFôWçŒÌƪA~ä¿@mS•óLJõz&®ûõ’ú#qýÕMæ¾Ð¯üÈrÚ3ã.kMÄ^Ý0§›À‚º¡6>-+P1Ý}yMj!²FèÌ‹èýôEâ Î{î\Y,XwÜ*̸dM{“-tâ¾6¿Šˆÿxg0ݦü=öåVý>ö:4O¥á_ó«¿èØôNÆ%§ùøÝÎÐr‚òÏ¡þã!žâËP=R„ø»ß¿F›”—ŸÆÇÚ>à)Ž,¾×¡«‡QMYg¬Ÿ/»æd¦‹¤¥*¾ (…oö'¢:…¯+ ~åL|­EåBØ^´_oÔ­¯þL:µÛ©¬ÛB=ä é B¹Ïñš¼¾*Ù ¢t'óÚÌp4Ò•ÕvôWW¿.âkL=·p®S4üCê S/þ^î"_Zc޹¨2“Og÷]ˆì ú_}‘[¨Z ±Ìÿ|l§¥äaì©3M6JË‘XÝÎäƒQ_Å@YTÎÌ>›ò™üc3ž~*ØÕ þßé_¶ÓÀvcìE§œ¤è]ç …º€Ÿ\ ÿ±þ³Ù¬W $y‚ú·ÿ„y‚—%†)é gqKùã?ʆ¹ÓíŒdÉUÈ!Ç`'ªá<#È?ûϤ"/€áç¨N^n[ãØqn¼Ç=øéÎ*g2X÷ µâ #3÷ÿüG*x†¦ø„Ëð{È?RŸwË.çŠç*ìeÍ`½¦ð繿­PŸÆw­À¡¶Hò3èµ´°$ƒÕ4ìêZ« çV„I¨ÿȈÿ8FOò¡j >íázj±–MJ*`6…àÏþ%]ÌHj4˜Y#Žš›·5!üÇÔM œ®‚Ìo½B\Ƨ¢õ§åtSLH-M'´ð$<—ãUNsŠû&÷Ó/)TMîéX³…UÄÌ*×s_'ž/Î|ÙkôÓJêòÁ¼€¥Yb™.z`Q 3 °ýPf*_8íL2›ûúE¥É[ùTm^w¤L~•…üã¦ýõƒ§¬ºtRìMÆT":Ì{¡KmG…ÿpz£&OnC ³×í?õôo`îã-íb“­"Ì#éBþ¶Áúh5¢º¾¯+ÐõÑ.Eþ1]5`JI;-ûöç-Y/7ÅÌDå‘I®qŸñîÃs4ùyÝW抖‡(ÿwôôä1˜•X”¢þÜyþ·jéÂÆã¾QÈHøƒü‡¿6ƒ©®¨kQ]vj+ŒwàW'Å!¢ú@ñŽþ»‘~hŸÇ©ÿøþí¥ÉG™må:9Vߤϕå̺² Ñz]úÑãxÿê ”ÔWèÅ0œX¨ÿxÆl>}HD”ï\Åò†yП<£G@”Rj2BV¹'«ùs-w _4ËÃØ.$¯h$»èßzŽ×héG¤“_ý‰e]ˆ=¿@fÔ\£5‰Í¢ ÷áNà«ño@着—h'«ÿH®¿ÇÞDo° üêÖ¹WÑ6ïáÑg ‰J ΃õT#ÿXŽïìEåðŸåPp¬Þ‡Nš! Ëø™(¶>ÂéŒ-šfÕìÿH§©/Oáß?˜§²_:”#3§Àï…U§Ï§ÿÕ°X 4ëÈ¢€#.#ÇðV™è™{[šÛŽ FRž 'ÿøL¥£ô}CmùCÙB¶ s_Z·d<|Pn°™I¬¹œ®7Ѷþjœ¥£nªŽ½ºƒœþð‹`\Ò°Ö8Ñ*™ÙzÐÚg}ÔHÂî˜ NlŠê¨vš¯XgåÉ_LC1TØߕӵV!øÕuúÁÂ]];ÛBæUX µž)%ܰ׺Dÿká[C˜ÍÛ í1 ÖÔö9jî—ƒQ>Cõ Óÿj¯:ŒŒa­dÊ}0n>—™Dm‰¢f bh 'Ô„8#:uy#˜Ï‘’ªö½èXXyèR¸–¿ƒgõ¥;º¯êƒVÊBqœ’+”->Wa|Wû‚ßkGþQIÎæ:¦³ß¡—šF_”*0燂fžØðç_Xû½ƒ½@¢ [AýGUY½Í×ëWD_‰~7Ïhóüy3…u …Ù&úâ^ÅÏ ÿèJ/”EÔ·$^%==‡SXd@§¨^Ž…úñ³ôvûÛôC:*Û‚Ûöç9í/7[]‘]ó¬^ìM¢ ¨ÈüÚ£Tã”w•±7© ®´Ô™”w;Öë'WƒÏ´ #Îù_Á¯âêõî+óþ<8üz½"ö5-xaôBUZ< òÞÌÿ¨CÿöOFjÃCÿ1uÀ5m¶¸*[‚ŽÓm„nFÆ8•+b7ýKüJ#¶­ÿù­ã"ÙÂ4ÙË9ÉüDµ™~M÷“ÍŸeí þ¼‰Hæ¾ÿjéÒLõ¢~ð ö𻙘ãEG~$SÚÆ3•–;ê% É4Ê(MqNèØÓsØ_ltl|Þì'¨PEãe©ÂæAì^Tt¹ÚwýÇ-—)éžrI¾1’y`‚Ìk¶§ùóEß“àbóðN=˜"÷=ÿQÅÈÏΜÿ,¸’3?Ê©ètæŸ÷!.?Ïó~ÍòF¼’R+9„þ-ÕÙzå<Æ<ÿ-@þ¡SÓR»²ý®"J®MEÙir‡u°{ðo·@k©ò7ž¦ü³–]dæ7³ªqÄGù«zØk“ûr–³$~ KxZ/ø›nœÿgÀ/ri¸ùÇ0Øø¦2x¶-!hÍ®~sª[³Â'vS—ZsTCi–_9XãfshÛVsý¦ÃöüšoL“íÙO4lý|Пw`{cñTëøs,j6¬s«$ˆKiõ‚èý(ÌÁ[ò»²Æ?üGgúï ö“„j¯ÚÃp’«¦QË>œü# ªÑ6Ô‹Ã?€©]G¾ž•>¯TéÐKŒÕw†zº/¿àÑö²¿¤àWݱø&1÷v«ú­t.©àŠå*íšh1¹ÜNáÇ{¾O]å¬K‰>¡Ö» î‘•¾æ ¦–ïún«µÕi»¦ÁL_A³<šZ—aVûÏO]Õ5óy‹Üø@Õ½Þ4zò Cõ7Ž'¥hb(ߪãÌ”0Ñ‹¨ïE½=³Ê‰ó›0ed=|² þ£+‘ž«ƒëXÚÜï~‰GëŒ$ ¨ ¢‘³Æ7ƒù³úqDöGõ1ƒÊž²¥ÝÊ5 fÇ“)ìyèó5È…ÿ(àÊJû:Õ×UɾƳãe%âÜǹÔE¥V_¥ø¯øèz3z~½Ô·µRÿëùQÑõ;Ôô4⊠B3J³ævô»yàÏ?YŒŒ?˜\Óæ ßm "‘ ”1º¼0®9}ÆÊ7øcÆãìç{ÿшú2Äã“Íú0Ì#˜#¸šºb²¬jó/œ‡}½á}ͪÏÖg‰ûðÑUpºª M¹åCÔ8>ø§ô|݆*8¦<Þa~öÖðG ˜Ê+/²Ž3(™œIí§@ÎOÇ$ç­†J/x'@Fý®ÿX¥å¥¾a³¼._óîùÚ,"_.ˆ¿EõZT¸ÀvÄSI±Ž‡ñÄÇ0» ûm##v¡yÇ)² ‡7ÉÛƒ÷:ùÇuîÍUìµ?ø•MœßÏ\ô›úÝÕZ1„•F´;~ üª'׬.ìIö[Dl;»ŒÿðáxQ@ÎÊ𽜇nŠd`UñÔ<3¾×Q¿º ¸‰îBEÅí ES!l}o¼zW”|ÇÉ4g„«¿êªi¢1úÝxÔWTÆZ~ÆS–ÀfÀ›T]ÚE¶–빈ü þÀ¾–ž,d/õƒÏÿ¡NŸf –£`Š’bëWSox“¿ßlæ¢â¡$øÕj~¦þüÓ@Z[N—•§A¾eý^OÓ *ß?øóZÆ™Žþ0Y©\ ³«3l()ÞC™q +åcÃZÓo]³Ö;;õwñGcð?“¸ßrçŸ7R’“^‡OIŒf«›ÚoÞ†?_g5Å'&²¯äJLþ1f¢8Êr²—ð|á÷½È§ã?B÷C‘ò Ú0ƒgk$G\j^P«­ž`K£`7^ e·OÒ'}&VyÌżrC2‹ƒàaWAÌV¢ßMíÞßR­6üù'sœ}²”º ·Ô.«“Í.Nùít'|^ù8sv»Z3˜ß1ÎNdÝ„)I7”½ènûªôf0^>R¿h|0«P[´šú¨fƒ<­&ó¢jÁœ·ºÙÑQˆm¡+Hú¼…ey`-%‡ËJŽýŒíö"5ºô¯ïFnúoŸ‘ÉQ²/4o©g"’¹Ò*éʸ ÜÉZôGíŽä—>ð³éM6ù)èð˜ý4=ä$~ì³\éÎ?îëëàu{ñ¦E%Ì}ÖæYu!;n¥§'ü<üÇaÐÄ\®¦ö,•Ç•žN™‰ÁØeî–N?Öä\9"4­îë9ü_}} õÁ˜Ÿ†?Ïå¾N?v ð«”F}ã'üÇ5ÝáÿÖk5_)TfC¿»ã‡–;©ù ï|sªt¦š¯Ñ_%2úèI¨x˼ðÛ̯ý±~Œwy‚Z™“éRæôåk ÜW_„5«jV—x>š}DĘŸFú(}§ˆŠ-N£ÚÀTìÄ, öÍ*nPg‰ÈSc«·ÀÊG–›#pΑÅK Ëð«wˆ¨2«:„ÏW|øU-'îaa¿æÁÂYä­Á¯V¢“Fôð¯úFÎ?øç»Pÿá‰ÿH¤ÙJH½_âºaøx‹h`6Ý9Òq’IXÉBØïÅØß±œýs¡¸øuá.c¶ìÁ}LF4>O•3ì>‘o’ÙÊöp•úäÖEÕŽ`9¸Ýîû.êÞP±áÏ³Ó ÌîC¯„÷²,¸ËP•sª/ÈÝHf}$µF ¿ŠCÜÛ ¸3h¾Èk41@œÞ‚½ ¦.yÐ,ýh¨/i±;—È$Y` ±kïa,–[Ì´‡± @ñ£¹²¸ZG¨pl6T üª|ÊCÎg%<_v10Ôz.y%×C|=ôÀKÍkêó+’ý˜¨Q—ÚYìSÖA؆•j$ú+g®ðÄÌ;¨|ͨU2²{½ÙÚŸz7v6Œ¡œXÎü-õì“ìwôžB¿‘ä…Ñ_m„?_„?éFw£xþTä¯"óÉ;³Ì}“gÑ7™èžÐæÖÏfKyŒÚË&Ôס¿ºŸÕÌNè:†zêœÅ:+º‹î2°êá?Ú²·¥øÄ¦2ƒ ¶éõtÌ~AÏî æK5ˆú¢VNTµÀ•|ñ>L¦ªj祢$]t¯Xì(ô¬Ohe¤óæ)2 .zWîvûËäûä0žáápRý¥¿•Ï×5˜I½;­’äZýíYðÙÈ@ÊÛ‹Tªû ½°nØÈ• Æä[*Ž Vœ¹Oýßþá£ÖPÿÉ}çÎiUôLîï~ìà)õ‡zZð«b¢™ø„_íÔŠ¡¼~UÈH ÿXw–ýÔxÞ•õÀ¯r—òºñYŸ¤ß;䣠úó3zp½jDöiŠKD€3e]ZøTŒöú} áB MWåïLJ¡3¯C'¡#â‹iÒ•ÕáÀþn@ù“ÅS{¬bSº1 âHÕÐl\ŽÀÖ,qQHPºXÎ}¨œž}—ÃDþ‘—,§ˆò„M‰ÉS÷PFûnþ±R+‹•_A}Ë;TMǰ¥‚ô»SñÕ±*p¿~t‚Äuècúnÿ«.FIØŽ¿ÈU.ƒMÄ&ò4Áçx Á2?åÜCr‘È:¶šƒÅmÀœ¶àΧ¡OÿýÛ¿H§+p'”I˃ð+ŸÜ ÒW¤ ÄdYù1~vœô˜Û^ô»z8w&¦î!òaEssÜœ h 9ÃBtšðg¿[̓¢¹¸O­_{:;ÌÁ¯9ý‡ßІÙZä(¡÷å|7BK-êʽ°O3È?²©çø†bì3 ÖÚÜá%W+¹Ç|¸Ùf!åÅgò¾{X.ÿ˜ÿqܘ„_¥%~]8Mn¶­ñ~êçJR p[õ3Õõ`§g f3aYöá“Á0Ê2ò÷0gÜÊx…þª ꇱ¨^¯ÁŸ?@·‘ÊÊD†0šúƒVyºæÞm)o='ïJ of€déà[ɹ*^ !ÏÚÏÈÌûpžH 9üy3µÝ|ÊüÚmÖï0òÓÀ… ¹l*Öœy³e¬¬àWU`â?®Óq9×&©j½Äòœ´£ßmDnºÖ<§6ZQ`ÍÂ_>´çÓIðv~>•#ˆÅ÷ð;ͰΛÐ7=ÅæOÅ s\ ´–zkžÿ©D8r´NQ™Øul~ú—ì·3¡ãð«t&E/˜æXçCä=“`„6À6MPô¹sŸîxôWL§C³±•†ŽE·L:£Ñÿ¤¦½ŒyO=èd²Žæ÷d ÙÒê('¡¿Ê޲ù ç{Mm™Ã}¾¹èwøI&%vo>P=‰í*Z©]E©÷ÌYîd‚È+»³]„ì(­=ÙzNwÁÿâYñˆ<®‘+?“ `b—¸ýÇyêdž¨±ÄtåA«€ë½+§Q}žŸ4Ò~•Ï•þWþª:YH_»,½±.Ã.“‹`K»â3SüWêÏ£ëõØî+s›þW9Ýß¹o@„>d@áñIoiÄUè¿ëpÑk´ìF<£ºq8H¿û-Ugø‹_`þàuY‹”’Èí¬8 ~5Ž9óKà?ÖðÝ^ýzøøŸÚ"uÐ4ôº#X±$þ£õò+eió¦H$wÊšæŸ"_„μLäaiDVµaUÇS˺œ?|ÀóyÍN&Xÿ™²´´åáoì&äï_E…Û¿Oþºkìõrl¶S=W4HYÝ<†B,ºy5üùn­ÚŽäoñk;Á¸7ñœ—FƒàL-ÿ„(¨¶¡Eý‹Lg ùK˜)r!÷õ÷çF|Ùìï V’dØYˆò3ñ†Ž•y.tO´ ÔíL@O³5Ê¡ouªÙªõÒ£ƒt½$È ÷ß¼Iï‡.ØÕÆx¢ŸÍ?ÐÚ8æör¬xâ+|­«NÉ"¸¶,x‡Jÿb¤Á«¥… H†×Ø~Ulêy”¿>Nÿv›ÒŠÈÙÁ™ÆÀ€8ók%³Nþ1T‹'j£9ˆ ~ÕŸ<í)1bfÎÖTï_ £#Óu,ÞPˆ"j/ùÇdîý.Ž6ŸzÙUÁ útÀ˜%UÄV›áÏ‹ªgd¿[Ì„ þ%‰¡/ÂÇÃÜUMÑïÿ€õÝKTþ lê$q­0ÏbMã¦ô@ ‘SM¤æÎO­Àg÷J‰ÿXiy ¿* Jt ÏÑ hþy^p©¨‡l$É>¼¨Î ¹Å«F:îj …dì¯6ò9õƒ»­VüÅ—‚.Ë•Ú5 V¡ŠUž¿,Ïc/üG ötOj®0ýãK3ùÂ^²Ü¼ÙÕ ¯*‡õ;ïÁ„ÝUö&k>]âsÒ…| š¯¦pñ×á?2ÀQ• ÝûÛ~Õ„z¨¿°·MÁ¯ú0õk“: þ–n/ƒàAúÁNç ‹àq»¶~+³Ð?Â, ‚÷ˆ—óIk³psô{F”x7ð÷õ¬`ºÞæ@«xUY{=ÒÇÁøÓýå|Åaëõƒ›`‚æ¢7×j°ÇtÔ/éÞ_1}ð Æ¿=•‘9Ç.®VÔw¶oÃm]¿ªGîá Ç5.¥7³£"ÁÜDGÃæ‡/Wä¬gåz·ÿ8MÿIJ‘Óh"´1ÒÓÎîêg7²Æpn/9ÛYöj×Ы"ôßý{~TgôW»¬}Dœ›äHlGâ;Dãwúßû9üy ÷•¹~7¿û»;rJý*õçÍéßžQx­rD«m$'#¹läbþ¹Ï-÷\óG¿[›k¼Y,§cû2ý¥˜#/ /qÞØóƒúÝäâ8QêB:¢Œ%î--ËŽú[ý©Ìo&"7 ”YLÏâWžú|ý ˆ ÊtÔ©øÕ"º!e¿²T<@°Íß™´^ýnpýí“ÿb<Tf@×z¿/EÜSöã6ÌôÏ0?©_¨[ˆ uQ^üî½¹¬y¢-ŸNŸŽxAUű3¨G…mo¨¤óüª 8SñNmÍð'‹‡ÜëzãbÔ ÷Á• ”eI¸©°t-Ù§Óój-+d×–š„}sæG}«SÍm¢žÕ,ÁñÁìx1=êŠt˜ùeÔ <…WéKþ/äŽçËÙ_áˆÔ K\ ¹¥ÿùüš Ó¢ôoJªñNžÄ’ׄ±ˆ ¢uÿ±Sô¬ÙÔ¨ÕU3©^™Dþ+‰¬a_8ùÇx­ èŒ†(!yUY0çÄùÈÒò°Bq•OÙ¥×}Э)dZÙ”Ã›Ïæšz³r業³ÃÛÆx9”Tj¶|ø×*òª¨• ýîNzq¤Å pÅzfÊ 246Àü*7STB/Xß0ynÿ€Ãš ÿqžsò5G®d° DA÷S‘®´'àW*Ð}õL ÄÓ\iLg»X?jÅ3F.ž9§ßW"5‹'%ÐŒm9õçuè&²KXÿüê$ý¯ªã‡krýnjä­œs$ºÂ±´|Žtæ×6äŠm1y2¹pšJÍlŒ9ðçÐ_Í#ךee&ÿDþÑ”jš³äR/Д•‘Á÷x•ÖE_ ó×x§.W¿¶LC¯H?üÚ++Ÿ5?4œž ùá§7Ó¿ý޵‹:ŽdQíÉ #ƒÅ@}-D7Áź!²Á­½Ç>×¶,Tü1Ð} ¶HÐ\t]ãì4Ô®E–>bïè2‰þíC¸†]É?ƒ9ÕE ÓÍ}ýŠé{©?jcsNJÀáU¶ª¸ÚP¿ÙÄQ ÀÀ[L“Ê ’}×aò¦§*ü‡¦tò¼x¼EÓÍCrµÛœe®êNòˆ5ðt5Q0FÅlÄ3Ž¡7Wdºúα—»¼ÑÕt5·«9캭]Þÿ Oà1én[†s{¡jÐOÕÿÿw1õ†z)÷•9Í4à<íÇV¥ßÒ?ë‹ —(+6é%XóVúÁÆ#©¡ô“?´Ü)m1ÝUkòGâ9ß&®ã?:ëôn—þâ¬ð5îê7~h½â¨P?ðöá ùä9Y¥o#ÃÙ!RË%²†ÙJ¤s_‡µtYt¿ËÅó±e=”õÞæ0,'ýGd6pžãDÖeZ2€\ò^„ú'¾0¤LÌÞ"óÖíÂjfT>اp §ñxIÐåC¿ôå‚|ðÝ®ÕÊÒmÑ™o¢xŸ|‰»„@îïÎÌ#Ïóœsˆ´ö 7¶ß·ª)v6 { éjýDìU™â[ø«“½_Å7ª ÚêI³ˆêÁ›Ô^õå:»á7 ’…7A9ë(S/âSöÐåw׿DdÔ_D°¹çJ=ñ3³H°gˆÅœiÇ ñ‰xãèm˜ÿ±;UIN#çJž#ˆúÅ´ñ«Ið=Äi®cV£8Ú ö85‘S}X|É+ìó(ØŒrû\ˆWÇï=ôuOøê#‰ óÂ_­!cÉÏõµãšr£‰*HU6Q*}’ S×Ýýéröó²Ÿüˆú¼M¢L(µè? ×Öža¶†£žˆ?ºçãôOLB=ö,æ×Æaþ`iæd/áïÊÓ¿d<Ø}²Ö«/S9JÓpõƒ^è²Ñ5+¹‰“rÞxLýài³<üù,_[ öÍá?ŠÀô ®öÛˆïnä §ß- ÿQ”nñÁ ’ò€Ùÿ1Y¦@5%ëx9æbÐ6¢|Ù¿Þ_¹|Ë"Æßªû,T sxòƒÀÃzÀ’–±C.Gýî"òN(± Ò%}¦õüÇ<*$RšÇð‚ÀùìÆ4# ©½jŠ~7‰,œ-ÿn&'ÂË&Ÿãͤû¾Ìì`¥³Ó=÷ŽÛÚAýàIx /j‡²Ï¼ã^úy"õ]ï^)õ'/:hézîÔe‰~²»úµÀ«Ü½ ::&¢¿JBk¼H¾õN^ILAäá×q¦xæÃî|>2—T_}‹Š%“ç)<©¾I`µbîãv²™-ðZýíÝö=0ÅÆÖYÐn^×3ôkã#¶UüÏ—àÿ¤{\µžšÉugœùµß³(Ÿ¯:üï ‰ç?ªÛ˜?ø»¾Z?E9®”ÓJ2?êók£~5* ¿Î?~¢ì?/Ž}N€]XKýy2m¹j21ÂOÿ„ÿP´ÛÿàW¾O¿Fl:œzõ`NDwQEͪÝÀ².ÑM±VÄ1ÊGrþÇoê&ðJIDÕ`98ÈV¼/"" õI»‰ÁÏ‘L1½©þ‰ñôûz2VÊ&²ÿOî…³¸„]ÞWŠƒåA¢oÓr¦ דúÊe*ÏXQ1j&¬Ö6Iåȇ*â+:1¥§(N¶”üj/yoZ=ÉwVÜ£ÕÅF÷õ¹>k½Çä™8¾ÔƒÊLÖeçyCœ.’¾:™%@Y¢¡ó»3¹ª–7ˆŠ¸–\«•pD·Æ(âÇøC¨¶³¿íx*L„G„u4‰Õ&z>X¨´pÙ ÉÖ£Õs´ËNEúec/YjVÓ‰sËÊÅxÏØo7Ã$} Á—wo ó£:‰sØç’ŽKò5Þá'|Hò Xwz°R³¬Ã¦î…ÈÇ]ÃÌ éKÿ’u_¨Ch‹ÅüG ,ä4üö9ü÷ #'|q?&ž17Y¯LøófÖ¬Èõg"²ïNÆ0MîQB©}þÙkwæªÔ]–‚Ÿˆ&¸ìØzùFa;ù[Íd¨X÷ÂH7¤ûh<^~²”kx¦)¢[C÷êÐW}Osú—\3Ëtä’]ä~#Ó›­dú îa"Æm&ò £zìØ~®ø ø•\æq>‡YõVaÖk 40øç<µà«ŒwÒþmÈ?*ѦÔæbÌ6·Ëð‡P×G­½šõΠ—™çöù¿Qèô–ò$Fq¾Pÿorösƒ3fæVøéMàÿO͆°üíÖt™K…EtWíá+ã ßQôX,ú¼œÒ–J!§c´WkaæBãq€]öÅÊgbŽßô‰íSÖmë^é¡y„â-•øsÑk ¦[ýÎkuQJTu]o}õ„®G䢎ãšl&Þ þœÙQìƒÎô\wRð'nð±¨GËtÈØæ-bÎýFN#‘VNc£Ë<Åx‰þøÞ »Ã…N¿ÄgV'§‡#…§Ð¥¦}ƾhe³+Yûð)Ðy5â>œwru1›¨¢š“mês\Wü¿û‚(N A¯(%BU£ÿØ.⫇¨¯™zIýu°þj‡’R+¢÷©–X³Õý?´ÜEe!ú]G½7¯¼PõjÚRõ-}“ßSþ„j럸\;×=Bd3f1ÎÞà™>êIQÝmrá…²e¢ÐûÖV ©3Õqúkƒa'²&ÖïùÇ%X<â ¶Ï—ìÆ@±Ô¿µÐ¿þ.P;«Ç„§ˆ!O%~{.v—³ö –˜ü½é¿‰TßåÏ×*©Ð­¢_ï{Ãí¬°“x§Ï0T~9ñµxÿ“câ3¿×­¦¡VýÕP¦ëx„ØÌJxµô¼©b™Ýˆƒ·a…N…xÛ¦ãéË9ÏûÊUÏGëGOeôôS‘²OôRüF ?ƒ.{r’±Võ QØvÖÛ̧yá›’ÉùÔF¤•xªÄÑSS%“V®'ÿØ€ÿh~e€›K»©oÓ˜ÞDÕäfüÇàGIéÿAüùrƒcCoŒÿHE…Gü¬ƒÌâ©Ægiˆb7ªü üê!Ös6þ£¤\†ÿ˜ Þ0;9I¿«ž·äú—ŒäÄÅÅÖ/çí~ˆwÝ„ßõ‘9踻 Q2j§ßÈ.ðç³ñXnÁS:ã_NHjOÃ×VÔ.‹”xý ì`>ŒEo<æ8j5~&Ÿ`~À#%!?…ÿ¨GýùxPÏT(¹N€ µ•ñÈg7ªg\öÏÙª7ÜÑxòF7üÇPò¾Æ]¹Ld¸ü(ÛÂ,d¥_†¤û{ø”d!•¸ê¾àW×øü3à@õqaÖK~7>9Š?ª9rŠq ¯6ÌìEn$¯[ë¬B(“¦R}˜ïg¡þc2ùk+Ôb>ddnæ*¹M„dÿ3”öj?rÜ1 ˆmètÐ ÕeJðþ?é)U†Î†Î¼Á Áú&O¬l=ú¯7A˶¼qŸ¶úóÎä!}ÕKÚ=²o•ªËÆfw£…XÅ;•*Š––§ù·¹Âʈ^öú«ôôùh=Ãl€ÓO&;¿M$ù]4•þ_Ì´,8TÜ…«4ŒwEð¯õÖ”¿³ÀÓf¡ÀÚʶl±+µnh°bmÁë¸ã?„Ÿû3Ïð€èK|ñ7Ox¼ð5;Ùqì¥(“?‘]MFéÝþ<)‰íñ5é<’³sÑôãDí[‰X+sF“Šð5HáŽäåAJ35£ë$øÃŸGN…ôåf’hõ¨èwª~{üª¤6Žùƒ µxêÞ/äßÙ­ŒÓOˆœdÞ6w5›È¦wÑ®¨ÉÅ;¦ÂПÿpÿ+í(õ`#˜3>‘Hwu–ºTõÇ<Ð5t9UŒnzHâolL©¨zªËô˜œí@”u±Ã[±ütÖþ(:Õ?Õ_KU»›Xü­…þõw·5?ò¢¹Kzÿ‘M–Ä{ÜC‘Uÿñ‹½Yèx…m‘ÐïNSr1v!ú« 8‰åüìrf3a-:ƒËÜ?:m$æïG]=BËzÓUµ xÊ~XßK\©;ùF^ò·ÔôœÁj×!2%§þÃáÒ5ªŠê’Ð „úz…2R}+ŠK´H™àMžS·Ù-ï:òï·øÌ%ÄzñŽ·ûx66hN1=¢YÅ ÔÔz*¼E9—ë9 _‘¼Ê@±ö/þB_¤g3—«{P«Ñ/Õ ææ&¼£½µ©}9‘þ»ÄM¬Ö “L¨³âãºÁ‡T!ÿpæ“y27ñ+±’yñ•KÁî:àe&P«øEttQ›.Æ%!Æ^Mdþ…÷ VÛB?X¦¿yߊiyàßêšµAÙJÊ—0% ÐÑúàNˆ._ÔôEUŒû–—;¿ŒË“cúÝtfo9‡Šîýä˘?¸½T<¬v\NÑi23ø¿¸ÄsÔm®·Ü¹äZ ¢‚cø·X|î¯r—vÒl ~ÕäÅÃög†Q?óúÝšæ¼° Þtþc9øã0×ĿúÆyØ€ŸÎj;ÍnØö±ðãÒ^G4¾…9åíÍ«T;&§O×߬V=Ûey‹›è¿#,Ât$ëíãÝTªñÝS¹ —VCsxÕtú£—'ú‹ŠÄ~ôãmo½DçÖ§£pO3‚Žy{þõd¥³zESeUªIÆ’)Ôffßd£#Ý_Àw Ê{3|ƒJ|ÿ†gâÍ\ÛfBúò.A3Ñ›zöqòë%BåyÕUè¯bRç5?¹Cl3*˜Ã쨔gƒ€Å¤c4S…©ÂtÇcf§KWF3?ùGøœkèO¢ós·ÅaWþq<|¿èI$Ö“˜nŒHou±Ç³ƒæ¦a6U{„Õܾcßb H}ë•,e—¥Þ%= œŠ^±„̸,ŠŽø‘ªVvÝ”ÿÐnð!•ŸOé¿ëæœEþc²ÑáÓfþ¹­gЯ¨•YåŠR‰ùçžÚm-–öRù1uòKe³þ´)µñA 6Þê/µüÚC5»rº¢ëþÚ9õuä·Æ¿|«†‰(*ã°T]Äfê•^ ç1Îëéévλ©§ŠÔ•çQã?žaOß9öK· V¡:øU 1û_W“3ú‚C4„_ßì-ü‡;:e“¬ß±š58ÿ¥P®^¦º«<ñ0“oè²y Š—;(¢57(é©’["¢ãÊÃT!’Ïã=üª+<ð¾ë?ŽH¨Uÿ^ÊZ-üXW0ÖdG1°Eˆò“ ßmBTˆÏ8O¦pdÿ.ñnTh%ÕãmŒï£I<¬°v™ŽÔ5> °‰ãPîÔÌka07ï’oÇZîÊ ‘H¨×Yµî‚(‰"@' r­â(>’µL6öè3ôÌ`­¨ŸÇµO'IHwüjuþcœRPo+.Á×/—sçÊÆ‚“ kO5¡¿!ˆ©3Pïö7³7 &JÍ`ÅÉÁùG_£‘þH éþÏÅߥþcW™‡z»Ét¿AN:®æ LGÏÃô¢U±^ÔÔ6â£>á¹æAû‚Oí#ÿ(î,öÖb¢Ãn·3ë8_Žä„ %:Ž\ÿñЉ"9Q9m ¿o.æ×.†ÕÈ [qŽÑ\Fe‹@B?–§Zy°’S|jJ°¤Æò¸ñýÕ9³ ÂD:K³/Ъž£&S<ŽÁ|4~ÇÞûÀæœ%‡®ÿUnñ_tV¦3ÿb„qÿÑÓ,a¶§;‰i;õ>ÌlÁ/¤âivUo¹tÏ©)™ˆ ö•k{žðçíyŽžpjÍø—Åaþ ƒ­5§ÿneú(N&þNÿqŠ>XÍÍQôŪÂtñm<©Ùdd[ñtõdR#¤Þl,ýÛ“Êß9¡ý©,J7öõ`½À¯JZ¸ºVzÛ6å-ÙÃ.óü¹e9óqgîà¯3Õ¦L¨‰^9Ôch{âÛ1žÊ±pxNýÇVhj=7_Á d§B#ûûÊ”^*]c›nd×GñÄ*ŸŽºüGýKÖ G{Ó„r„xAþÄd’Áp=—é>ÙË*þê’U×.dÝ“Åí_˜hÛŽº•khÖÏŠD&ù‰P^é‘©6sÝäÿÐQÕ†jZ×Éz dû·ý‡ù‡NµàG­&ýKгæ%ýÿÔè_õë?Ž+ƒè_R6ÚéßS<Ñ iSÔ@ý™øH¿+Ìÿ®]GæVœÐ¼É7ÇŸ/ÆÊ·D=t¸Û¨QEV¢ÒbÆèHâW¥èŸ8 6E€Šw¥ÚcgÑ—g˜Šèu 8ygP™¶è+*‹Oºo$¶vKóÕ-®3ªd HN¬U!€ÄÑùx'ßòöï#Ÿ¸+D‚ÿX¬Ä6®ˆâ°xIV{^f çµ×ü‡Qæ×Ÿ÷û2–tV¶§‘.ÂÉ¡7]JKEFoØgo² ƸïM4ÞÕ¿eVøÍa¬s‹_ ûâtŸN.²}¿º«tSO‰Z¼-©­`â6ÝpkÁüì¥2øbñ«ñ¢ëˆ¯ÏÏf¡ÿn¼»<j9=%^<ÑnZ2Ž5xóÂ`uŸ¸oóKz7=uØÁì6q‚˜ž…®ùs'û’É…¾Â¾^¬”Á샙ûš4n9>½YA+üÉqôp#@Ê΃ԯ¢î§œ\B®9“Ìx¿OÐïqºoj @´³ÃÇo bÏCvÖ‚fïOo–5ïÂQdzßÛДˆù°w¬>86z¿h"š†;Ý-µ@aãÅÀ l KâlîÏ(j5œúÁEtWÚMœ{]ì.Y’™è+°'±àlh¨ŒÂÝž©ú…Yñ²–“çï ¿–«Û“ :H.ÁF·Aq4d§”}‡y|íÌãð`Aj`ûZ°â ø_c–‘Pf½¢â¡“Ìì QʰÈr?õ¿˜™wÃ^OÿÝUæ´`üj$õƒ×È4åÙ¬&Cúˆ‡Ù$‰D®õ–+µÔ¨þúá©þ ¬/.›¾ žøÜ"ÁøÕô»?¡ÞCÓÍô±ºYõAÆú¡ãŠÇ^“Ãa5 å?¦Qÿ¡ƒ¶¾ÅmNÿ«ÙØÜŸPÕ~¢gÕlêÿgY)í›ð±í„Ö^ó&¬H:t·sQ®ôcw`öòˆü¡*rJ«uì£Ñj¼A³»ÝÕZ'—ôÉédèw-r™TÖe”ÅðÎüÁƒ¨È?ˆ¼£Û\þãó¨Ðƒ¢hÁ)é+RY5ìÅ\Yg©ýÔ£´J؇ìÓVA» ókkÓ?±¼Ïó¶ÌÑmý†*ï™Løy¬ÿëß1áÏ㻞\ ʇˆ´ö‘ÙFõ$ó?ÆÓ?1-z§ ñõƒEµÅ䦦|Ñ¡ôÛkJu›îÆÝ,E¶×ÇxHÿ«|Z šH\„Uð¡þãŒõëo¯ôÏß&ÕS÷1¼jqjgñõ¤‰©é­ÈÄ£jâžÈMY R+–DG¼COˆ"S—ÝQ†^wa²}´,êÏ ŠMIL½Lü Î>*h§AÚ#ì U‡p²ÁåÝ/Aöq‚•KÒ?<ªÌoxѽ]Pxÿ»;|¨x—˜nòAd c¿@®0‡Ü¨"WÝäJƒ5‘‡ÈİӦ Øß{Ú“µjÆSìý j1v¢ IMJ3¬lOb³ è5×òF\FÛ[’·Ó“|)6“óNGt™|ï:½:_‹r÷§0ˆÚcâÊÚ¬=ü*ˆ·±þã6+naÍ ä‡Èm¢Ëé"º‘V"ŸÚTÏÿ‘XNEc±íAMüˆ¸‡7ÞÒ›ü#èI÷àùQ=àÏÿ0âõâ?Eè?rèļÑxù3~öw̃“—…R’_Þ'VÈJõßbð¥wd[KPSMŎΤ²¤»þD ûÝÓþÄÔ ãØƒL°;hu^VÈnÆ4ïÑËã}L΃6UF}T‹H;–jlò\é-² 'ý_W-:‘T˜§Ñèm‚(^Du•ùµƒ©ÔûH•syXê àWùÍçü‹,`bOðWˆòâǼÂáWAZA²À#Øüâì¯=9é¹kõšàLÆÈa_·1Ýï†lfv¥ ݉:À¦<Æ;\àn&Òû„Ùa]ñ Å1"‰n €‹ §^|*×Ö›êÀ´ö :Ñž¤/ʺ¬ƒí¿ˆÏj &¶ŽêÁtéšþÄu¹ •>ê$žÄîJ[x’Rø´àý¸gå¨ÌX@^bXýt†êünSñ}Ø›eÎwªJýyvì©ÞÒ2ñyY[}3£Ñ›»–çÓL³}勨×P_}"«9ÎtܸÌíXeC™1>e¬6ƒ\FEà˜ýâp3δ+ÆÃKoEÿö5DôUàÏûÃSôÆËÜ„?›Ìýø¼£ß*Ùô¿À¯Ò ß­zé!÷«^3lzY®ÓဘÞÈßnÃÆÌÃKÍá×Zc¬®iág/øhžâOÎn|ªÊד`æQãqDf4‹š¯©QÎa3O3MªÊ¡¬™È~xÉSøóAtGÙ›óUMí£H‹S¹…=Læþ "»ˆjö‡ÿˆGw*ÔcŸ!×ÉKOÞõØ“ìÔŸ¿Çƒ¬ÉP‡{Ö†^q¿–ЩÕϋݕH_À{™ÄÏ‘— èØö,*Ï£ ð"Z)‹¨>ªùýÙq®ú­–?¯,.âÉ_p ¬Xf‡MfpªMùQI,/t]g¸â¿ajÎ⇵í6ztå2c󜚊(®ýmPj¨ƒáƒ"¶À·Vå4¿–þæ_XöŸÈ?ÖZS¨'³&Ó~ üGª»Oò¤æÑòÝezÄLÁüK=©E£¿B¤ÑÂü•jòëÆ\™¾»£5™,i™ öË~X)¬íàW·èyèTÊgÂw¸ƒ‡]DïŸMüâÚ_mêÏßσñ~*'ˆ*F%³4Ø’7:xžÕàX¬Fð1˜#’V= ÞXfF4û8Að÷ˆ.??êj}“ð$LßY1ÓÙ÷éÌ5Þ4­]t÷ÊlUµÏ£Èªb7µÈ,Ì?b•@ÅvìãZ²FAîâÇ*ì>úÿßï]mCôW×”<¡Ð¬[9zþ£õƒ¥ôÁ5%˜_[U›Ž~7•–ü«SM#þ?e®~S”“Hÿˆ#žâƒ¶¨ïàÔã‘ù]¢$0âüÊw5ý>¶tœ(‡ujo4Â$ðFwÕ…I³ï@–ûè!¤¿²Hð·‹© Ôz\NctY»zmú´Åà&ÇAÒý¨Q«Gÿö𪜈ֽ¨"ÿ( Þë5á?Z 7˜æñ ¥]+jß«`öy±‡ð WQqõÜ8U¦§Çëæ&ÚM ò·–•<àÈß±Otzkð«y²±è$4¶ž<—ÜÁWèì£FPîø_Ä5äµxœàM=ᶨ!ÿÈ †øš7;?jØ9`$oy_ç’Á-C×5¼mñRøww»ÖCÌ"§*ˆÇØÏ3¼Aþ±…k?ÿìú°UÌ*Ò¶ü¯3½Á °¼ä5¬÷9ÑH4wY«.½¹öHdÆR”E-å+¨i¹M ÛLböBÑô†*µŠLíp:Fþfšæbç”øçD÷cdLžØ\U„Ñ‹ŸŽÏ¿\Æé×\Lß§T\!²ÏÞ§„=”ɵÌVè¯êsOúÒþ”Ï.‰>3ÌËrïRÊ{dí9óÔ\KÁ–&ÃH¤³7ÒMÐÎg´y–ü#…åG–לp5*qÍTd`ËBõ¿òVjªÝÐh á)4ãß•oÑ_]ÃÖŸÌĘŽßp§¶â0~d 9>½‹åÒÖL5£é‹Gl'›„Ê?þÀÄ5©-‚ÿi N&sÀw´¿Bþ’ ´n7ü¹;:Ŷ©sŸè¨Ôs E2¿È"Ú¹®· ýÛߊØdñ“ŒOr’ ó§™Ù.ÍÔßdç̬۞þ%è÷Ø™ ´½PJde‡)Pa¼©x"ÆSC¸Ùå?vQO²CüÅÉÿ“÷ìOüG6[£÷ñ Óf? `;*ØlƒyU­áô¿*nW’ö8ˆÀ гF Óíd<±?‚·ä¿ý­÷ô𠙬õ@)¬¼ýw>5µ F£[{½6ù| îö¥¸VY믽ÖrR?øcýKŽ*ÃÀròSð¦Æ—µÜÚõ3Ñc‰L“‚ûþ¡MZúÞàáâlSKôx»™g¼E]%êá?ê‘4fþ¹S³òýÿò¨ëÐï>ÀNE‘@b›å~¬ª)nžJÈ9Ø*ö@?òýå”§Z žŽÃ”[xûÀZ¤Å/]‚WðCwΧ…@¤$8ÞùHÌ\©d‚—^ßþ„~W·¹;ˆ£«“'ô$¾-c‘`«§`¥‡P?ø=/ü×|›9$k[Æ`?/ ‚¿D¨˜D–”€èù.ê«;° ϰp“aûB®VQ®i9°U;Ø_|XìÖòŠñRÎF¿Û 6¢L°‡} o}¶Ê0ÌIÄ4B-uoèÃ5'ÖG†Y/)qp|"žåL§gr#Þ£ÖW¥âJååÔE´5_ËÉô‚: þY–{%{|ƒ‡Ù+W‡Ê?V’€6òž™V‘˜]@çJ:ÔÛØãø‹LšÍF—z R)¾•yJÎ,•®ôvIE6— ?ÒÉéÂÖþC%+¹I>YÔÌòîÀÓÁ¯<èèX‰ü%«ýˆ)³ïñI^ð Q™µ¯ž™u܈AŒŸEŽPa>u*ó?œ»ºÍG5¡Ê–f ºR-²ZÓ•&š× Y6Óu_‘ÇP/Ÿ„ªÂfX.;~A|1TÿÄ Ô¬£àÇ‚xŽUè§Ò†¼,¹ÌV3€ú‘øöQòôo¿#«0é°3ó?®™÷8ƒÇÅv0Nœó$âÇ::…> ÿþ×îj{5d2ÊEú—D. ÿòÓ3OãºFË«ÿ­ŸVËpº¼•ø¡ZL½°[õúòG¾ñ«ÊZ=ØF1‰ƒhlýèµK}Mßä§úªÑïªÏ¿ñÓ_þ•¦¿c­î¢%–„©Obµ(¦©»E;#ª|ø~=G˜7âË5þùNUõ ó€,¹Ë¶àk[ŒUàã%èà.;€*T'þ/cÌe†CB1ëk‹„ú¾A=dfx)7“øƒe’Å©évæ5S.C.¾¦à=»ÂÚ€P‹¸¾œ¥!¶ Oœ TÄþc3'¶È5ßÔÅÀ˜îÇ®Íà®ö¦ÿUìï\óp­6º>7OuTv®9 ØC;öyŸ|yÒ¼Þ]”5éFYCýZׯ›Ä*QAº²Zµ—x9æuÂ#ô¥«ltmzALåƒ_Lîá‹_J/·Ðÿê‚ëúB¾xª4Ô³‚­e”3a¶ü°å5Éjb’µœ">^¯×Ó£Ó-£1^n!¸À0|HTtÐïÈ ®Dà?*©ôFdnxÆ‘0;ÉXJGæ§Gâêgäq¨~?ñÁðKÉw¦ÀÊO!#¢»iáç>Ö‰™¨² ƒ(1SV^B° /»Cz˜îæ1ó,µÙÀZº‚ÿ<£~p)•w÷˜/r@4ä.†\©óU/Í ¾¨¾Qÿv˯=EJ3-8Ë"âÔSLÕ8iíÀÔ‚_™&sã`»_‘¯¸¡ß« ³âe­6wÄÛ°a›ç¡Mºd¸Qu}Ò¬'c˜í‰£SQ‘ÀnmÞCaü(VqüGkz&KÚïO®þ¼šðE wÔ„*Œéà:k‰Ÿ›Q‰¢’Œ¥â6p¢QæSXú8èwG’Ñ´@é{–ÆÄË,A® ^¬TûPG;þ£;ç, úÈÓr‡Ù…î„dI]¨ 4KÒ/rŒÊNê7:3ãûI/ø3t‹é%«Ó\ë UÏk áëßñ¼ª˜ÈQ÷ý¹Êt¶£Ìß©GÌÌÕúXõèþæ]²|9\»·Ü²`ô»Í\÷¯”ºAI9ucŒÕÒGd—PL5·v1×êžâ2hÝ_Ô’ld^â\&Qm¥j>‰• ýî;”éYèâ0 ùiWþq]½¤ïEí½žsštíO2¿Öè¯ÚÑ«~µ¹Ž®(éÑ_&Kú•Ê™uÔøá?f›NÿÄÕbþã¼qè·´ûjH}PÄ+„ý®¦?c£²Œ˜¹‘hõ®zXt2’Ò'÷Œ¨fŒ‰äüdà^ÃõÓè¥tÙoáC/lW"aÒcïq®ä‰nCƒyKÿZ'¨Ð{‹®¿Ó£‘¿Ä–Þ¬uš\ô 8þ ,ãâêÔä •è_òœèó¶xê:áWýõ"%½¡‰ó©r»„ ÜCÜÝ»?•“ƒë7&~LÉ›tÁ˜`”а³mèõziÉÑ 49 Â$2¦“)1Oüa.ñ£ 6tÂxÌÿêp²êèÚB:G„^‰™ðWD1®¯/>hïÐ}úÇ4âê‚ÿènü…­PäzÞ#oìÞ¿ÂìÁD4ÿü’YOmcly¸ÇY<_ø{28ÁòÒè ‘ýØ‹…dZñŸP±9 ²Çø¹Š©ÿNÿ’ÄXû¶øì§xØ_ðˆ©ð”öŸ—›úóÄßÏÈ¿æñî®@%¶7ƒz§½a/UñÑú’ Ù†_()OsçsßÎSÿQ•èu"è|¨c{ÓÍd9ŽSG¿’ÝÒé‚ùQ¿¢B» U¸Ââþæ‡%Ù½}Þ<¦%•@'4Ê|‡r*þãÌz'3¬Cv>ó±½3C+ §s®z-ÌŠgµÌ\ÑxLx¸ž<“t9†½kg’^6û2Qo+ì} øsŸ`LolÅ-¼GðÅÃÍÿp‡È î8Q >vá«?Ñ2ú_¹Ù{ÀðJêiðñ3ÌŒ––¹=¿6IæÁobþ`È$5Ìjod–ÈÊêËrèw"ÿ8`vµî’-,…@_Xþá¬xÏÜORdl8¬|j¸št"©þ8‚-ÆU[Ã%‡˜3¾uS‹xÞ°!GõUz)xä~téZÿ?ôÒlÿ¹Xl‰ÀLV¡¿ `½™²ùÂ[»*h¶R ÔãÏî<ëâD£sð‰ÈOœéQ˸«ÛŒ±Æú½…ý>j#Åž_E«¹( npw’—Åá,>€J¼0ó˜ÕkU±PååG<Ív{‡.Xš‘5”ZôŸKÁüóh\a=¬ý12\#Ò°ï èHø’ÎUù¨y¾þUÙLlŽÀ†–ÝzB¬–2/ðfuG˜'¤åÆ;^&ëE €ß>f¼’—±IóèŸØŠúÒLPýd-d­&ðàa¢a’Óì–çQyè]ìWL<@kp›hå<î\œ‹þ¿&%eþù&)]Áî¿"_š@þqœûXÿpŒîͪ(Bzœm¥âo"XߟD¿Yç§ÅyyŠþ%ïÑ_­Æ¢öcJË.çQ?¾ýn fq­£ ËdþMœòÆò}¨ÚÝ‘j€V +䣞›ú‹ÆôWh˜^H?­"ð ç˜G˜ “ T)¾a’Ö2®ñdpƒ9¯àH+¹®7·z^O„šï'òÜ‹ÒCd7~3«Ó÷6õˆŸÌÌÖr”WóчÁ‡lįûY’nóoå-YoÞɹ*G†üùP0OÈKLâ|8ØÈDq׬€Z÷/º'îB¥»Âªf•²}ñç ¨9+ ¡ÂjOݽiÆÚœ‰X‡ås‹”Zçógþ§~O¬v …XÝTªþÛú«Øê%õ‰ê©£sÝÕàþ»K”ÔZuY´ô?<ÿã€2Š^% ¸Û‰ÀHrЍzuõõËâ­þJß«½üAtQ; 4‘z·øë.(”Jѯë‚èHÅ[ET]ÍŒž‘įJ©ã™?v‹7O…Ù.É™XŠE®i¼Ó߃G^ j½*¶™Ž9n‘Ê(…~MO ŠOnòÊãátÖ~LV’ +ý³qýÕCº’œrá¯=ÿñŠuKÄkñ–šŒ[àbÍø_W¬Ü@´™ÁáËa+â‚öø¢æq×?|m¡}žV—õ‚ñ~šä®ÕYb”)“ˆI?`Aw×ñ ?Ã|ÿÅ­"²|QK÷ù#®*Ô$ ]¾ä¿ƒ!|"ÿ¨EŒ>žnD–üÃ+ÿÎc#Þó$«~Â7%ƒŸôˆ0ÿx¯”Ðcƒ¿‚©HÅ}›…_+ Âv®û>cæêéÍC(b«ÂU ‰šÆîï_ͦ#çç…ü>’þí-Ðï&¯h.Sá Wן;zY÷K ?óñ7½É‰"³1,dÅAD ³ OýÖÝA/hËE{NG ðžy<ÑSèVñDn€XÅ1ýÌKXÀ¬æó^æfp»(ø¤r ™E€4Іïß>ýU”š%ñosá5œùÃd6ªÏÈ1ä[˜P4ÇòÇ·tdþàª: ¡e}ÂŽ{Ê,Üãõê±0gçþÃ~- M[΄Í@mr›Í°Ì?Ù©íhöXó&ýPZáÊã?f’+ø£ð%Ó,  ³^Tq–xê'¸6ÞÀ˸$½Ì¹ 0›daê7bMoSó²ÌÜI•b*k#9J#~Ã#%4à÷͵Þ,¥¡:eØtÐÖÆ<¿âÔêùÉëð˜ßTxô©Ü½Bä[+­ŽÄ÷GÐ;å@cÜþ#§y‡ˆbŠLjþÇpõ‘–„§úä¡‘YÎh'¢¡1î‡Þª(ú(ê5ÜmoÔR†…zïwÌÜfnûLÈ,êOÃDqñ³kÙ©ŒA4R·ÈKÖE{ÓÔllW€Aéo=rf± ¸š†ïXM?xOj}Fà?,ú—Øh÷à9¢“)k¡ú'žT½è Û¤ùO²ûþB¥ŸÊð«Þøht?éoÕ³/ÚïøÿnÖ2ÙÇ®CuIIó†y´â ØË¹†!ùÿ‰þJ¨ÝBu¼òg~Tj×} y»"óUð OêTÍÉowƒ×\~ÕR›¥½×bпd_dqý›# 3bA› ‚ÞO7r‹Ôz f~¤o@\&H9üGdf3¹–S‚ÐïzЋ¯&Öª»Ñ†:’„êêÏûÁU§[íPú—„èB~î˯J¨ãÐÛéDòR¶_»`lô¼ÃF_!FÔÀ›g9SÕõÈð/5\¸HÍ.lñCê³ É\XU^}JþâtÔ ¤Fe¥ðþî³Y§´ÀÌ‚ª¿ªò –ÃLµ9,w{£¨FëŸD‡;𼩧ñZ ‰ú¾¼Rç;3´öÔ=ôäŒ:óH¢€ögDs–lz9;“ÄþÛˆbýé.¤QÞ„*ü궈—¿§æ$‚>Á{Rþþþ£~§ú£NÔ3üâíôMô%3Âc2JÉäõ/qSKéÙŒhÜ­¥ä¨ûQ‚U÷Óð:/°b/õ©ä{a@ËÉÉ\é08œxÜÇçbE„ó?Æ*ÉõväÙ±ÎM‰ÞƒX¯~7#v'?¸_2I†Šµ[Däü’;²/7Ûz¼Èýæú+_æGý “[¿ê ¢ýõ¨±NSñ‡ùƒ¨LŽ}DuÞ22E ¯´Mö§¾â*±s}ÔaoâôßUQÜ– ;F3 ¬s1ØÐoð¼#Ñ_í„ÿ˜cCíÕÑü„¥ÏK^á{ñ OŸÍÏ„pþ#PËŽ7ºM~——ýõîI4\~¬–Òì 3]ŶéÀ;ƒþ% ̆hX^5žä äz´¾ÓŒlúÄ0;L(ñõþ0W]PÏÎ3®Ñod ¾q'ùŒfϤâ•ûÌ•ôOÌimbWÍÑÛî“Ì'Lnn Ê'¿¬Ô%ÿø`Œm­O.áÌ=OÛaÔæGo5þÃÆ>Ÿ¡â¾7=ç£ÃŠGýGwbš,ì5):èÆt× l«úkiÈÃÞ‚cþn¦ ~0~u:þ¢u‚k˜k þüøU tÐluò6ÿ"ÏοÛÀ{Øžú¹¬iéŸøZÄ ·cÜ™Ä c™ÙÑNLþÑíïqú|Ða%;zÞäxÌ—ôk>¡Úb¼\Fÿ’]dšµÐVû %û„þj úÝÿ1C©¢`µ ä·É|Ú‰Øð ñwéå8—Îë3ḋÂX¬¶~Ãþo¡ïT<4býx6‰Ðç+*ÿ¦újÑa×ß±ïzfeà‡Æ³ý…k0‘}zåG–?6ù õâ{©– F¶ÑE:H>£F>UaÑÛu½Éèõ‘š”|äµ{ˆo¨ 2{3 w;]Ûo¡vfáV±Ê°j"ËQÐbåmJ@ý¹Fì”…ù<£àÐ\øÕõàü£/ìPâÑ?DFÒ[7̨F”|ì ýÿÆÆ66b|·~pŽV Œh xÓX‰DD\…àÏ“ò®vÅ<Ĭ†çö'.v¦K×iÌ¡~­jòž² ý.]É*r­Š€šøœÝF7vÖÊJQHx+ÙÄ~îï |\Jô»9õ[ܹ×t\Mµ`A¹}í…Ï®@¶¥ÃöÂ/¢‰m.}ªˆ­íÆ'vy;N_ûÕàÏ_.·LÉ S¹Ef1‚H59þãoÞô&hRûðnF•¾:FmßèhA§-:ýw‘ɤ~0¼öþ”6Qôàî§%«ØþuŸÏ_¦ŒúóØéè¯ršè6ÒÒôÆF¾F½4¬ÿ8 §—¢hîIwמAt¦zgÀ|æicݯŠÀ•d½f^& ]„=©OUÉH"…ÔxÓô;ì/ãݬS÷‡Yñ¦–‡½â٦¿5ãŽQ{H½óB²–áÖ9ze1|†¹ƒü£Ã¿vø7úݳd`^<õ$zØæåôg¦òÕƧ™ÜaŒA›¼Iæ1o{ ‰=δr<\²?¹LMT_ûáãŸP³±F.!¼ërPôžÄQc9_5eeY‚Xÿ† v£‰iòŠ¢¡ëþåAõ–zÞRðx›ä”˽Íþv¦YÍG¿{‘þW‡­_ád­”ÖHóJ¯ô¦nÅ0³€xû >žüïˆËø©‡uo¼]E>àWImOæGÕ¥ÿ® V7ЪmŸ°ÓÙµíÊÖJÙÿ±‰³sÝ<ÁOœó‰Œjó6f§\Wü¿û⚘dïýs¹îÓíÂ]õVjƒéßÞV¬¶d/%‘V\ë¨ùjɵ$êšZÎ_©E­`f0‡w¢ŠñF¿Í ÜiÔùÔý‘v]ýøCë­ÖF’Oi°¿5àÏ»¨ûÔèG£ŠLÉb ¤ÿȬ.Q»ê y²Vu´(Íå&|R,±ÏXŽMo\ÐÕµ¾úõHìñ†v[wÇò¾ ®Û ‚²ÆlçuXõOÄañH÷ÙãFðÝg³_¹Æh+ÑÑüÅÎøv06D^½`æÚÁ\ò*¥VXé&L!ýÿ1SsGÓÚ•Ùœ(1^(7$%‘r'xþ@8ä•°¾x¥@|L-òÒ_å?‚”ê A NœU—Õ,tµÉ?V åöØ[§ÈUä`G°P[Qâî32Y(…R›rCÝÕüºYZf¹–œh5?QŒ%€7е¾®×_GôeätàžT§Ä¢ÛÜ 1?²Êç¯V*qéu†."Seu¸§f²"z¸åúøðÛØÿ°[å*¼I.9Þc÷txè\=†¾SÍ ­aEéR°¬/˜O{2¤‚Ò„¥ŒyŠùQñ­R¨›ª£û€±)ä(‹°¼°Ñ¯Ådñg¸'ÝšþWnàØÈ¾Ø]GßüÕÑæT9ܼM‚À·bêùlhfüÇer?eT"Ô“_ôOÌÄ^£j5-q~2†£ KþL£ŠNtéKëgûoóœ,g6†›®Žíëÿ¼€?ôÁªzH<îÜCî]ù€g×”§xÓ8Îj ™Ë|ÖûÄdÝ–s àÑ—ÓÑü0{*SüØáa:‚m— Cõo÷Âtùk‡&¼™TeQýÕ³>ìöPP±±øèhœÑå¶#õ û¬–b^çJç WÞÞ8ZÆ2BPÔþôO|ï÷$¼š©ýDWÙŽ«<ÃÜÛiÔo·âÐ/dõŒžúkèw{Þa¼¹ e<ùÇb~®¨ˆ/zºžˆ‡ºH7Pƒ òÙ*U1ÀXe¶³3Óg×tϼb-É*Ž+‘Õ;ßÂJ[‘ÔÌ„Fqþã…É Ä½.ÿáÃüÁ¢ÙÄ|Þ‹{âÙ†Œm&•Ÿ`O˱÷ÃF5dþÇ òÜD y™þ6þñPG£qWv™jåÏçý?õ»IýyW÷T)¢†ä‘?ön¨¯ž¨Ë˜>Dßì“(yµ_`@î3ÿ#ᮿ½úm¥•~…l!;žº­qR—zrm>õƒAâ±þT¿©ÝR#Òt~}Í-ÚÖ 2¡ZüÃÈÇ,&¦ªëÈ?ŽéÑÅ”^½ô ®òõu:Ü{ªõõÝDÇϱ—Ù‰AÛɃD¸¨ ˆÅË~T‘þWµÅ!}ó·ú×ß=Ñžé1°½/9»À8²Ë«F&¨8kéð*G¨ö»ûqE¬׿»ÃCJòcº·‹ø/°à5MàÏûÑY"7p]lYR"'_ôWÉô;ßÙáXú²%wí<×öILý+oDkn¯üœ¼æüJ1<@{,x*‘÷«Jí·ðçqá?Na¹;éTDVäΣKÅ+îÀ0øc]î&²wæGÁ/à³gÒ7|u…³éJU]ƒ%Ê…—Œ‰ŸÂšÅéŸø&‰>°zÝ\}:Vgö`®?5Ÿ÷œY‰Àl†ÿh-ŽcMW€Ìgb?S¨lA5N t±±ï΄¯ûØøs\µÓÓw2ûì“3Þ¾7Ü}¼©MÓðÞIù‰¿Ð_ùƒ.Á&zá?Š¢s:N]ÿÑÊü †¶&Ün":ÿv ÷–Ah¿ÿ÷¤{iïÈÆ m=¶÷ ‡R|$ìnA¡ñX§+ô³¸Ä\?ø\üÇd¬n¼ÝMôÂPó50vª7ìøP+Àî¯âŸ3ázÊýƹ’)"í‰àP QÖVìŒöŸæ}Ùü0lÊ{Pö ¨¢GZ`äÓg„Y/·ð&Ò¹MþÑ…X¸§q‹ªO˜÷µÔ¼·æbí×S÷÷7YÂpøó;ä¯Ný 7xÛjþf£ß 邱™D}À%ñ&ÔC[ó|Un7»Y:º£fw"òX(‚ ãíiÎ1gR·÷LoÜGðµ”<ÁŸe®'2\½¬ TØ1ä\˜îh³á·š“¿´GÕº”ŒL;9È<ô(¨Œ/’Ý ºb-QÄžÇd®·„(+Z¹®×C]‹ŠÎ{9‹ë|¤—0üÍ‚v&úW®•|BnÙ”É"ÖMj wó\–3?*HR²Bo8±ÇœŒW¨3?oð‚zP_!FƒÁþIœç/üÌö-k"LÏ;˜²)ð¹™_kÚÕíêÖk™Ë.aõ¡÷ÍuóŒûy±ƒ7§-ïc ±ëó‚ÿÃßãâ=’»îÌ-¥T¨n&?¶¤T(=P§S?XUßì?|éÚS ý•I=È3%|†ÿíÕï*cÈó ¿2°]wõ |ÐZÕDZEtqšŽða__ó¾vˆüÃéUsŽû]D  `k΋ºpóy`§›íôÈe^ÕÎêLý%öMÈZtk¿î²UÅ3]Ð_ç ,îe¢j/æG펔~×ÔoãÿŽÒê1÷>¸…#Äø·‚£ú¨PÊó.œ†ñH G]OêkWzQ©~5_hø¡2X*-žˆ>h؆%D¡Ÿ ­í}lj =êwVœ¦µ#žoDôíLË”DHQ@eÒ pñ„?¿"°žâ¨Ô¬tu# }a®esç”QjaÃé*?mÓA¼Ñ%Q•ž2Z£­ìiLÛ <Ÿt ¾>ŸË’I?ÁŠR­«'ád—³`$·±ÞO ”ïÅMÀ“Æ6}…žÂœÿQFNàJÿ&J‹Aÿ›ýž‰€ÿ˜¢ddþ²ØCC& û8(®³hÖ+b…"h£–¾ɚĻ;“xa¿<™Wp(ÜŸÀŒÀŸæ?Ÿú×ï¶ ›øXö@ƒzÞô'‚.NÌÜ |5žøÙÍVǸåD§pÏeœ–ˆˆ·#9äT9˜¾CñÿÓé6[ÛîIßõ=èD/YóQö¶£ÿîTÿ"Ò¦ÉMìoZt;ÃÕŸGÑëà¹ÏólssÚȽƹkÕ…þYCˆÌsÞ' ÿî=Y„9ûQI”OÁ×ÖÂ¡Í smf‡EÄ;¸«œàŽø†)†E/ÆYLYK‡aÛž Út™:ïænò’¬ð4C©çëŠø0;¢˜žr@(ý®Ówglçëw²”èâ¤(Fn4À2á;NÁG{¢¿Ê`]GoDßIôâu§þ¼ ¹Y\xŒüLFc´ë‰LRïj¹ä/œÐ±F“S1_èAÇÄJLÙØÈ<ªìö¬¿›úóçÌ Lzv*üyv7V6Z‰ ¡ú—¤@õR$†Ýa$5‰ÔFm3½]šû¿¬ò¶ù^¥']sÏQG8ÂLÏt« Lòˆn¦Eyq3q_‘œ Ÿ7x›þ%‡Ålz+ŽEÁÛS ÿˆeO4瓜ÇT²20?ê¡UÒ®KþQËN‡G©Ç\ÜODM>™†Ð˜$ŠXõyÁÿáïj˜ùµW•Bj¼0ç"ò[‘œÐûê-üǵ «ìW’kU´aèwݵ8_UåDü géŸx—îT0 Óé K/ y©g驘L(â„öD ß1"âu>÷(þ£¬£Ãqa^>ê0¯äuçÅè´þ ­åX=¤®<¯:R¥?5 :d÷G7µÝp&42l"þI Zí@Ü:Ò¿¤£PÅÑÏÿߟh ~òWØ”`þ¾F òæà2OÀoÊáMJù^‡ÏÐŒâùww¸CÉ`<ë±ÌŸPÊžÃ{l ÏîNÄèi´$2 ¢¾€~w4ê¦áôß}ÿ9Õ]«„F§-ØÉœ¹!°„‰ÉìÇ©}ï„ý¸×ïYÓhÿ±õ+k^W«EyvÕšLa%1˜ƒ_õaÍî2ŽlÔ})Ó]âØ—ä^ŽºjŽH!Kó^)Šî9*ÙÁ|òÝ\ar#º¼ž3nê£u]j‹¾h9ÞÃáé ð²è 1"È?&(iõ^â6ùÇlø„è¯ærNºã‹jðNçüŽG~z³Z¾à.ã¾.åžÎ‡ó¢SÛúݽÚR1ü*9}{¸¬aÈM”œþü5 )­Bø6Ôho¥oä ìå |î#ïD‹/øžàW–¢ üÇ pŸ™ä¥ãàº3™3™?x åT^ºVÆ"W4…¹½XªU42œ¾2>}]樷Ü[ä•ÃñÜѹօàfûa¼1#v9Mðûô[Êh÷4з†?//Ÿ¡¯ŽFýß)yÉpæ×†íUXÜãYÜaW-ñ— øŠÉØv§£º;hL&3-'ÿð†ONŸ®ièr[â1ïâQÓç!Uhëèâ: åóœ†ä¤Ì›™ñ‘ݬ(t@Y _1Ÿ~¾y™ >Üêaæ§B¢ Ý¥öá<ñ'©Öñ$ç éhÙ[}¨Åüƒ457JŠõÆ'ÙÅú~5–aUÑ~‚µLÍøuó< Fqx–ùÜÁÑdO›¸Þþðù\÷¯€zþ<yøh#PžÍZfs»%yÆ+Ïõ(ÖêSPtÅã¹ä¢çp"Óìú(±ÛsX¿ ±Òå?®PÿqVŒÃ2 ä×qÍÌDÇûþÔö ÑEÜ>ä˜}Ô*Žþê‚,€§êHþñÈ< KxHl!ªèDv•RœýÊ{÷ßüö'zJvÝ™sJ~ÕrýéÇ>7-øÕGõoê›égÕò¬²OÉLýÇŒàúóø?Ø¿$@¡_%±}o‰ãRŠøàW«ÔGÔFc‚Ô9Mhç~h{g´Íħ‹ˆwáZˆ#¢<ÙÒJQ Æ·Œ@}ÝEQè}kéêêTõ/ýQ·DsÚkÕ…ŽR½áQÞÂ\$N}€þW7õßZè_÷Z{¨§ ÇŠ)·c6ñˆUUðYP¢X•¸N5|ÆK±S„­!Žhñ Jjì²Sÿ“:¸óhPë“ÿB¦=ˆ˜+!¶»|slÇq2’ßí5œÃ’=P"]"'ˆCãFÞþˆYØýAìò\ÀÏùq‚-¹ ˜YJþÕNgw”ájzµ;Êafb‘'äM*þذYø/X äþ0»Ïñî0ÕKEq=¤·EÈ5[j=Y[¹ŽÌò |DQ°Áº|”¯ÞH§£ØLQþ¾O… úÔ¼Óð1!«|þj󻉫 L{Ä$¿ª^äª^ëzž?¸Ñ&ÔO ùÂ"v½‰«ßŒÙG~¾»ÛAê?<ñÿiéб‡îþÄÓx¢±ï…è]tŠ^á9°¦ÌjÄèÕÀ¯‚µ£—Ç[ùþ‰áëÏ»i þ¯9Ðvº_’CÈT=©/OýšáçƒçÃW•1“#ÅÅgIó#h³l9ù˨Îú|­Îïϵ‚ÜoºdDÜÕB ë¬7;Êäæ@:1V´£Ú¹íAd7ÅÍF¦Z¾wÆ ò3h¦üPdЧ‡Y/¯xmd"¾ö2:“Á͆ÿØMÝa}ô\Yð[P \'šmÊITH\%—iËí‹jæ62ó$¿ê<ÿC‚G]îN÷Â#"!¶t9[ ôºsñI¬šd ÓèÕÓÜ:¸2;ý ¬)‰y¶‰:Pý¯ÊÒ¿=¡¬@V:‘úó&d ¨½li½d~Ôd´k­´ö=KG±œÖÚCføŽi勸¯9àSâãÝoE‚ng`~í+4a?ó½còn¦‰Ô³âuÛÓA«þ¢ŒÕ_´Ši ‹èKæÃ¤°œVL39,Å!ø˜X7b‹Ë\Swê'ÅÎS72óQÂÛìÊ´¨Á0ck@:wXå¬Âø•V~æì¦~0…ÕÀªc¾7ý¸ÛÛÅfNæ²ì$"2ÝöBŸÿÄתZ_Íé: ÷É?"â*#óI‰Õ‡ê#u¢–Lÿþ¼*kîVjmé¿+õ”Z쯲ª¯}‰ùQ÷@› s·ûÓÄM·µÅê}]'Î¥hšQM@Äk9ß=­ :yxû\c…ÑDx3¡çººAt5’‰žâ>jP$õ»¥Õ‰êÝ„ÛKBÌ\ެs°ÜHþ „3Ÿæv:q¸ŸhÉþíõƒdÀXK/²ÃDò(Gˆ¿Á¢ƒ½—2ƒÛdÏ·\OêkWºHÉ]^Å¿ؽS0ÊÇñ'ÁZ†S¿†Xª1ïfP—sdËôÙ/¯8\û™Ø»ñûM„¹ »æeª ~õ l|,ïSêŠk=­2~¥JvÖv;ïÑE²„GøgK½LTÑ#â䨱ôÄø‚¼“é¸sÓÉ/ ±Ã»èÖ|]zuÝ™ƒÑ |f&þãú‡8à+±†w7쾜?S„^Yø£nÞã‘Ï8Öûß ìÿ Ú†F2°úüÏÆ'-1Ö‘AM%‚§Û–þL ?)ì6EÍO¬w D>÷¼Šôè¯²š…‰¥èx˜§ä/fTÆeÁ¯â€] ƒÿ½.ã½E£pOº»ö†þíõáÏ—J_<Ò>w0ýwcR=2ÿqœ E§­½(³J‘ŒDA–—Ø9ˆ1Cf"Џ¥6 ³âm-›1lÁæêV¢†8f<¿ÚlRe'GÒ9¶üj™G%ú'îçÉÄÀ>ëð!§±êŒ¶zˆ^ʹIÄ-" [DÄ=øwã ú41°¾9Ðé1oO [äyêÏwÓq$ùÇ”¶í`fΰb23£¹B^Oe‚ÿ[Lÿ’þ(†Â©uÇËÔ"Îð@#0Çúw4š~„³‰ó3c—wÑ· ýs‹2¡éYÇtr™ëTïü)S!Od˜zS3É#pz5S~€u;X1ì’ j+àe*Ðð,õçi,_& ?¢s š°ÔdIÚEô6DH_ÀÄôo×Ðü¥á­ºïP€©"?ÁM\ ëxK¦ÑŸ^¾ ™-²Ÿ|i=¸âr´WE-Õ”ÄX7™?…ŒÛ¢kÚçë=£ÑŠ œ§Éä›Å!s2üGO³ ÉŽ¢VNm•±÷Ña%¡=ÂÚ,‹ÚEÀ몘q­ÛÔ ëˆ*ºòžœÖÿ/ú—¨ô/Éî:Y畲¡º™|¾¾ÈýžZ} ~µR‹¡×Õ¨Ž·Þ«ä‚?Ÿ¨zVæ†ä“‘Yï–²ÿQ“ü#6*Šx@ÅÇBUƒÿx¦_ÔkQµË‘YÆõoiÁr&ƒW-äUAÍTjÇ뢵áA¥ß‡àü#$sýX_TR‡¨“õhdÃAx:ØÕ±Dô­é¿kËi|¯'(O 2†âµ>6‚Ÿÿ-K?GýGCâm§ç“/üÀ5®úöÓ©‰Hz’Få‰SC‰ùµ+•&ô/™LEK ùùGIlÄ3êø§’!µÕ¸ö²+»“}÷¥þÜp=ûðûúçϵ6p À¯N“©(§òÒ=+¶Ö’Ž·aqø=ò…Ú°#áRÿ[ᬶB鯖Fku;Ø€k½ß®…eßNæñ ì©qð]¨µ¬w„*Àwô$Î,§¡¿Š¨³¨¡¦Õs`‘Ë‘ ÄÄn­Â'Cõ6ÆÅwM=±wOY~Ä™?؆ìé&5xË#ô=½–x§n4Þôá0Y¨ÊhE…ÄsžF5,Úmp»åø– 43ñ€N¿šÕÆ ýÐõƒgµb1×TTÞ#c(€úƒgËŸÓÌ Û}‚ŽEè¿ÛŒg.žþÈ”?‘»†¦÷½7k‡{.½´(X¬ZNM( ~€EÆ5†<9ØÏ lÉQ³& "_еêæKêèâp%QÌ÷ Qá?Š»Âé¯îk¹A_|ˆOò¡In)·&š£=&uôɽ ÿñ‘þWýéЕ½ñA´¶*¼‹m>#ÿ¸Éu××Ã24YÀK“s•§°Ìs¤§¡QW1þ£?»H ~•žþí¾Dû#åhøs_®´xÓQù.xÖL¹N¼vÀþ`"‹af&qº‚@¦×EUS£kû}3¥9 ÿ1&=üÅzËá&c«Ë’´£7q*ó6Ùc/ÍîZ¯³zVK ;âÔôt0[¢ñØŠ« úÚBt>ÃÊ¾Žµw³sZ;è|Ñt³¦s_sÀ EG1vÅV-QÈõDb1?îxr2ôÔñͳ"¾QÖ¬h{àÍzã{nRϾ„Ì(ýÜó¡Ž&(³QîιZϳHÊ›—ÈØàò/Ñ{¡ëXÎ;ÚÍè*ÞíHÉxñg¿õ绞W=!꿉¦ðçƒè¿‚pF¸¥}³$_†éÔû¨Ìë€Ýl—[á—£‹":lU\c0óÊøÈTô|bþyN2]®#'À•Åù* Ÿ‡˜·‘ù úŽ +"s¿óߥëñX<%'8ML~¿Yœ¾7Zú$à(¤/ã5ØIz׳xáñZE¬øïdÜ×°ÑQˆò ⓞx[ÓÙOD1v˜«.ƒÿ˜ÏUT¢É×êŸ2¿65þã¼B5üÄkTÉM©B™¦¥Êrø·Æd4Ûðmgñ£ñ ÏØóRøóØ4d—¶ZÿñÎøYNçŽ'«¬ ¢‡ŸñƦïaŠ€j.%¡WWÚÕÈß]¡®rÞ&d•Ï_ÍdþGwq ¿ü*9Wó7M[#Zžøà2w9‰…ˆ—'’Ó|DíxÕxÏ}\Çzú-lÿ¼Ð¿~?Eý¹'¾6 ùÄ9¾ö0íÂzøhÿáƒEÍAt_Òlþ3þ*?‘ýô¶/ebBa­³¢tÕ^RÿÑ»7‹Œ rž«7¶9Z«h|üÌRT*ŸE]œ¿–ÜЃLBÿþÉ´ª{Coñ†V+vÕW.ú¦´àL< c8dþJ=ßHð«²v\;Ž=’Þ*ÔŸŸGÃ7Ø»ÝåjÎóÄÊè…Y/5y9ä}VìÄZi¼–‹±ÕÉ?›qì\ívüÇ\øô¿Ú‹ÏjŠE÷ÃFÇ'¬–»DÈ<ÑÅJGêÏU²‰Ûœ 棺†yAqûì2òùt¨ªH¾µÄjf–¢¿mnºnáJã?Ãv…A ©?¤^ÓÒòm*\[š=`AWÏeaæ»ÿŒJösƒySµ—Î:d~ J>#º¬i\ñ@ô\+¥Q›þ%¹]×›þã±H6ò·Í<$¦Ã¢/€ÛÞGæñg;‘ɵaõwÓc~’™-¯Êô(f,ùƒs?œ3¸Ûå?ÎÀ8ó?œúAt}"Ýó¢¿êÈœ˜¼pñ­­̯}†ée-¿Êd5´rSWrµ‚ØÅÙnMÌ“L|-ïýÜÿÓ_G£SnH½G诒¸îÓ}VæÜR3ÿ£ú«¢¬âËü6T„<§~0íÚ·W7ÔŸІœüä¼ù7õûô@y¨Æ"y¡ŸÐ—jAêÅo/îo3èÇA7–мõ?uÅ(úï…“l‰6¯#±DS£žž&RWžúÁùz8óG`Úa—WÑ—¿r#ÿðA…÷|£È+.Fªþ\r=ùa)è/ÌE×!®w4Iï°Ø•Qì”åO~ì0š±Nœùîo)%éK¸´+gÊ‹kÞõµF13œ:•Øò*½G¼ˆ~–cõ›10öwV\¤5!Fí ËíÌ–‹‰ÿÈ’†ì£ =-îP °u ;E·qÎL禯éЯ)ÕÊF+´>퉤—’\æ w#ßèÌ›U•*ô2Äz;@G®r'ÎsT40Dâˆçpá?ÊÁ¤ËIL¾²™5KòÕcöCwH}¤.Í X`0½åKÐá|èIþñÝëFÎÐ`£¤Þ#ÌzEЮeo:C-è`îÎy˜ü£Ž9\–¿šn%¥3ºµo7ÑLKŸ•9äMÑÜÁ_}bcBͯ]Lÿ«ÑÄS“ÉÊjÈF2ýۓЯcŒu_³œþ ³Q?ÿ„ÿ˜Á×ì7ê¦]ðí3ñFûȽšÐfŠËŒ@U€ –¨=:˜5Bb QGK£ÿÕ:t]³­4öyjòžÃ[ìBu™ï­Æ$dŸðé§é»ZX”s]ojuŸͰA¢f’µ¤& U‡í¬«è¢®š—¨s¹ÃüÁ¢ðûÉÑ_©Vcz'º[¶©’ìý}/:‘»Ìuù×è¯Î‹ù`¶ƒù5B(ôK|Ö`ÝsÃÉÿa³—Ó¿¤¨ÝÙš-óÙqéè^ígþ€ØÎÛÔ÷¹¢Xv]úý‹¸è¯B<ë#¥œÝuŸ~ìÃ3 ¿Š¯Ò’ê?ëûƒû—ÐMKë¤×žiÙ5·ìwxOY©?D][’¨ÑÁ†Îk‰´}ª»8*^êôÍÌzøCÛ“t©ˆÿèLäíi4£EÑÿGÜY€WqmoföÞ3sðàîînÅ] Š»—âîîîîVÜÝ-!H®Á îÎ÷›´œIÿ÷Ü{áisNBöÙcKÞ÷]k1mWƒñýU¶ꦪ‹@èß–®­oÖ/ až)i‹·ø &•6¤Ç³0‡Át@ÔëÚˆJù9ÿ¶Ð??‹*Š´c,s¹Ìø“èwoa±®á¤Âš¨[HCú¥ï^?­j­¹ÄÙ9`–÷ã+w‚_Õ%öíóˆ®ñTRÎÂI4Ãq„ÇwV\c´‚õí†ý½IŒÅbq˜€ÂMî<5Yxé+Cìðœ±U:³¶ “¬Çœå ®FÍ{މQ¹© »K—î„Nu÷&r€ÏèwOSñð‚Ïбp!û_MÁ¼çîý•z’­x¡ñÜC`wÓóÛ3ÀHÎR]7‹üc+|…ÕNÀš™ŽnõÿÌ¡öPÝt‹7Œ|\…ó ‘%ÌåxÙÃÌÿXLßò¶0Ð3ìK î‰`ÐÇá9*YˆíK£6œÂî£ ð©Œ*ú[/¦¼—r‡û·^p¾R ÷Á–z‚× º9%µŸ‚Ù­°VÑ¿$±½Ÿ!-É`QQcS/߃‰9æbð« ¨¹F£ê®È]œíˆüÇHØ…ô/9’ý•S^›*“UÔzÇG·ÛM`dk7yC}¦/pnOý£‘ ÿñ†k_ßÊ€:úOA_ê= ÓÿêýÒ}÷”ý5÷[W¨ÿ؈—š„¢pþw!Ú‚æ2š TgŠÿ‰<ÃÔk³–Ì«ºZ%˜ÍñÈ®eß"/Ø6šúÁ30£¹6ƒmºAÂ|"¶É ?Ú ùJ·ÿð¡û9„'uñèRy…ùçè|2‹~)Ð(÷·ÿpv½´Ë¸ÆØ‹À¯Ò“Ñ”²[WˆaöÉÝ`Á5…¹˜ç>âÿÞ‹ð 1©Ýw‚wú±(üÛ&¤ÏÃèhÄÅÄ»üê°VÒ(nŒ2^Q;n„‰Š»’ó#Ú8qZ:ýÑñäòó?v1gåªX_qÆx§? ýÃøîuc+øÆ4ô»Ã@sªËòWô»Ûey•¦â’ì¤úÿ`ýGYæŸÏ¯ÀIüy%¬ßsøU4y…냫™wGèêû@„…äݤ%®ˆ¸Ü7°œ'É ²£ˆÉëø§à •˜¬´Þ÷©Ü/Ÿ¸¯TЂ¾ÞªåÄ_¬¿ÒÌBx¤2ŠŽDXЉð2Åá?`ˆ§2áC=aúã‡Ú=èz3òè¯þ$V½ÇŽÒb‰s=YðÒýˆy®â—¶cÉüX;¬é¯t J&ÓuR›£g Sñ„ (Šå Ò˜ÞoDú‚-Ô¢r …ùšœ|:Vh#,Æ+ÔÍU2…ˆÊq'Ñ ‹Ü`îÅÈúRá=怞&*Ô±õèFÖBD€íƒå[Ìî‡Áx€_ÙXñè¡àW“´L¢!ú+g¾F%zJs±Å@òv K‰ÈH_y¨N"É~´”}NçS§«ÙB3=i¼Þm¬#ÿÈG¿Ü“äYˆ6úqL¨/HOôKôô@ÕyÍlEþ±¿…nÛÐÚ>ƒÛ¯˦!ޏñZÆ fìÙ>8ù©ä½ˆ¶3¡pZÌüÁ]V ø§ðEè¿»‚«‘þü%ìõ35˜û"¦KÝâ)#Ï•7:E[rRj#±›}PÀ¢“l~ð« ®•äyéÃtÌ, 6ÕNë7á_N‘ÍV _¹¤Ó»Ø—û¶6ç|)jà=ÔOw¢ž=–¥è&›†›}Èškö‚?¿ÇÝS²û=Ú<¦0V"Òšë-¹úSÌ{h*Ê›iP£6[}a=RÒéks£ÒÃȤãT]ÔÅS±°¹Ù㟵3ȂԟçQmEÑZ±œ¾Lï%î`ÿ>;×Á™j®;±È${cÿ«Ò/äwøJt(«"èn¿{Ȇ«â?|°éûÁ1¢›ùAÕ«”UŸ± •Õni¡c^&ï|w‡{´äÔ'–÷¥™Ì&0ü]Xõj õ­À_>¢MÊÚ=ï¨"°v4èž_02â)[áɼ@Ü£q„9°ŠÈª‚³]Usü‡/9ʘŸBDιÂdºökËôøªùUWüÇ2ªoÀGÕ†C©‰ßH…Š·ˆ˜d7¨Ð*`v¡qÛ@þZ®N+RÃåËIÆñÌ%_(Aç°×ìs£š‚Šã(I'ð™ÞÃ/ÔD·•O™•!ÙÃbÒpä+Qˬãy††wý/|]蟯ëé5ˆê%§ã.œ¼Sc2®ätù…œàýK’Ø™¨Æ.€ý[b6ïÔ,d·ˆð?É.²mˆ+ÝþWI9†<ÓFP¤xó pÏQ­¾Ìÿx âRüê»K‹ÿ˜v(7\¼†«ùG 5A÷ ¶âE#7çýœ2±iÎüõ}03É?š£ˆê…åËIý` lØpö[ýU^²®0*÷ñ†>üf)1!Øzò:«ž’7¶GµQ]B <ÑêkuE³™?˜•ÜãÖºª9Œ^´>xÊ*D 'é~åa¥"+¹*3áÑZ#}¤ ÷šszRõŽJºêT V ªn.š4ôWµʮæ6=o ËÝ—3ê¼÷zV¯q_‘ú]ã-làKp̆V8UFÖ#ÿ`ŸFo;Žy†mì—Ô"®#ÿˆeo@sŸg"ªê´Ô¾§šå’j(Ëéßž™ù?þ2>÷ÚD¥[QàÏoXi\±ñ@SAØ^Яå‰]y…~(­È›"ÛIèÇÊKâ §ið4iLûºÁÛÔŸ–=x"‡ñw§\b C½0‹Î\á©›¹aÄø¹R¹’’ã 5ÛºòÐS± <‹SçtJn"ªèiÖDeð¿¨ÿx© ÐJý},ÿ?ú'¦çMKµ`AÑŒzªšÜ]›µ*FòwFxã™ZНgðÛ¯×ñ7©ìŒÅÙ®ñØð×GëïÄNù¼Ç_ôˆÁîßoWþUÆLP›‘tD©Ë ~5P_¢¯E?úPD“Èt†ŠÀ>.Á7ø»Ôz?½­8€ýøŒÅ*iA…êï*…oË‚ÿj¨ïSÿ‘€Ì—c ¾î,õÝYÁµ}°-ñÑ •b>Ó"r¤'ô›ÎñŸeýOr‚ìâJ÷1ü¹«º«bXÕCü]LŽÖl(õÑCÈ?.Y¿€çœ€ŸÉf rŽHTѽ"OñcÍl°WÇõMÁV|bäÂV ·L ~Õ|ÍŸ.²[¬ÆLÜ›Mdÿ ýKê»ú•a^â)lòK¬Ôi¦#.Ã.VYEë`ë=78wO¹Gêá¦(”téku¤Æñ>ÜB&é­tYÌÚ(ôO¬c–ƒ¯ØÎß2Eq‹Ù!ÈüóyZ5½ÈÚ4ÖkH6X5úisŸÕŒy~e@ÙVo<³rQÿ1›yèð}ì×deíÀ¯Â³×¤øaK-t_‘¡øp|ª¨õ+™C2óœÕ˜ŠÁúöpô¿ÉD.Q­ñTlˆuÄ^Èg,Çg¦æÚÇ´æ›×Uzù‹ìå>ÞwÚ6ñB&­©fšÍåkÕÓªëÊGWÇìð©õ o¸”}t3mÝ¡ÛrZ늕ÌÊdú_f¢wûbµvôë¯Ð?ñ¬œ8§kš|ieCiÕ—>i78W:S?z¸üQ3”bòàfs³m#¸šX]¬§`ÇgåT µØkfyäë‚ÿůõnzI÷™¹þê{Šœ°6[÷Ò#ã ô/ñ¨Ü^Üèi\¥÷HÊŸìß~M«.vIêÁ®É²Ê—üã!ºVŠ…Ìò1Å]ý{ÊÓàûfô} Z™h¼°l)ÇêkÉ?Êã›âÓ_çÕBêЂÿnðw¿è½õJ¢)–þ39l+ÓÁ ?‹mØ›¿Pç­%YCýÇ*ñ#±kôßMAVôœÜcwD$´0i°‡sÈ@*€æ;/½™puZN“»ÝW*øž߭ЮI”Zo¥ÊFgÁêàó‰°×s°!)`‚Ÿ`Ã|ðu‰ð«(ó»õçýŒ´§Ó?q/C,Ž6-# 8¥ã'øÂLò…³Ôk$4s6RÒ"c˜“^nÑ¿äˆLCýÇxÐ$/Vó—uèâ¸5×2’Öh5ßðn9ùÃ\xÿ5ÄÛçÔKÜ <@÷+¡g±`eÂdÄÎ'[ûžZOÕp¯Y¢‘¸…²¡uc³Øý°¨ðœÇ›r!,ˆ{÷‹ZxQýUb”ÉõA@Þ[6å¿ÄÄ 59k»8“™È@3ˆÄs‚ Î%kÀ™iKç4a„ì}z”ú?Q¿% [˜b&1áµðˆyði¬òà#ž¶´µ®3­üÔ±å@ÆcäÇá?®Ð]ghˆ+=ü* W­,Õâ#ÉArŒƒÈ5ÒR'=Îv§•À~`ûbE+R58 ¤2Ÿå a˜±È7†è¿ûÜ(Âwà?œ>·u¹zÍE`/=Ñèö ËA¿Œr®vèw[,_0Õp¬ôÚzs3g;›hl‡1©©ˆŽ²Ù©_êj.RGÍéô:üÓ¢†Ã|‹^* óÏ7PSígnµ"Ù÷© l¢´‹=ú’3¬1çw|½ݵòz3Î\®BUò”4ÜÑÞôómæ×Tl*ù†F¥ÞüHjì<ñ¯Ð·?—ôz̉‚±¨ ì]N¿`¼'û¾O¬WÞêÆëC*ú­kô©…îH¾°—iê_¨*Ùhy1)ñ´5Ó:[Ø i‘é¯rÉ´2ðxÓÑ¿= ÑhEêK7˜Gå\ÕÞJÅ?Ÿo€¤¿Ê °0Oú_Í£–ýÕ)ñIAiÏP?ˆ’R]’WÝþc·~š¾âƒ±3ˆS†ÉVBêÏ;¢?¸K~—\¦øÕgû7øþ{f2WYøŸÌ9K”é-7V$žËü?É?Âá?ò»¯Ü[-“×ýîëõü±¯xÝ4¶åD5q"@å§ýa40¶áCži!;ýûª/µŠÌL‡êÈ©¦ˆ ¯çè’’ç¿‚ŒÏD¡Ï?éçV-ðEÝẆÁ„¶d% {0šª2½mrðtOÅ~èÈÓê}ôžÂ™’w OT‹?‹X•{ì qÙu”T»ðJge/9YjÐÃ>ÚφAÔC¥SßË]û^Ë^ØÍšàBþðñ§P œ‘‚ÜÃa­ç¯Å…{9 Vž„çh™ÃBìt_µÄÁwÌbDÒ aÕÃá­ßD×ÖJ¢Q‹Z”nØûÛD«ù½,ô5/€þª+Oé[üÒm·»ÜÁÏ9ò‚\©"ú0–<®M×Mð«ãDâtx¡†ê…lŠÛOÍ@ ³¿šÍª÷É·6à;à“ö’;=QSå#4?üR«ÇSüŠóöÏä!ФRd ‰ùNNó–:'¼DØßÔ‡,"߀ÿ|Þ+Þi}(þc––DÔ•/À¯†a×¢aÏÇrM‡ÂŸwãýSüTeŽñ=ë‚ãOÄš+xÚ‡©É¬Üû;$ÓõÈ*G‘¤ŸUGø“³Øþõ°ßwñ5¨yÞ‹•BƒÉtñFT¨e—ÊMfñ'lû^ó)Œ\×e“aQwÓva¸Ï**,Ž©éfr°¥¿ÌqÖn*Çc1 Ã’ÆÖGf˜dƒ{Á,*_r‹Á,ï`6ßt½·à­ur˜® R¯É“›eL¡æ¹×›Šþ*Q 9üª1ŽêfµÚí™ïTÓZÊÑ.£ç—Îä“(s}æá7’qï¡i ö“þ‰¹7º¾M˜Ø¥L< Ö£±•ÉÕ×~ƒ×ˆŽÏ8D‘aÔœ° *î3Í墣V2+çðøÕ39 -àq·ÿ¸¥_~r9ñÒ"òûÞÒÏʃöm¨5ŸþWçè~ÿ KžP!ŸÚ••!1õƒƒÐ µ|‰HîKG(B^†ÌÝ'à?øÂÔêÝÝgÆŸþ»ÿWýUTýnŒ,b ÏS ÖôÒ2QdE1˜?ø#µzžéëÐXG‘è¯2Éâ"ª±N?#4tNñåg#ÿw‘—ÀµœW#Œvhs†ÉÌ<ó»ayËúk}‰ìJo‚.ÒDŸÓ_8˜Û÷ÿ$×'2¹Èé;{›PK7ÐÃ_'ÞÿhNž0œix* ¬HT"û5øå¤ßÕ,ï4 €¬u‡å~Äñfc’ðHq‰pÿ j~Êû=³3µô gÃPYeJý|hã{™ÿ ø:8BŽ.1‘X!|Û2Ë®6¢•ýÄ‘O$ŠÝ„'¾Á¿yƒÏO/¾„²"½¢yŠ£ñäÀ¯mÃ?–Â[z°›èô*/ÏÐ?q96/‡9ܧ;yB ¦}>“³Bíµ@û`”—þÔ0ÌÀn¥ÄÏvg`%z  MH}o •li5,÷'ÅÌ%⇥\õ±xÖEÂ2BFGÞ佈JRâ?fÁ;ݎתæ%l>}¯è¹ñ^ú&ý;ƒ9êØä65à§o›9ÐûŒ q/®0îâûZƒAîa½m“'ú+ÉZkÍiÖVk!õdkíwØã"ø¥èž™a‚÷ð¥~¢¾ï®^9ØŠ·É?&r®¢‘Y ÄF_P×M*ü¬=T¬wÀ2ƒ¯äÚ‚6ªBö"}Qãðžx³jJ/‚GŸÄ,¦àúˆVÜa™_»‘Ê‘ Ì?¿g/´K¢0ž~*"õãñèÓÕƒŠ’nä¾TŸ|᜷’Ü×x’VI/Í=Öš«PˬŠþê­|fΧ’î)µŒ3˜;õZLú·¯‚ï®eí§Ž£ç¡!VxüiRÀsr{½)ú}ã%žü9¿´5W ‘[©Ûø •m"ú• ³FÙáÏ·Ò·*#ý_Ò}¶û>¸?Üóš'³È¬îóþã¡LΓ0HÑ¿U‹Z•]ƒQ]ÕaBblòè¯2PQ’Ù^megÚlú“Å¿ Ç}ƒþ9¹A˜k¸ýÇtAžr)˜ÃJ"µ!ò˜u6¦ýKÖÓ‘lýÛ#Pÿq/Òä/« º³^VëÞz«\…†§)žÉG„œaæ>ÿÁÑõþAî,-›žÐ}ž~îcã‘!ÛÆ ô»uÄ#½0«lÓ²è_rŸn¹Ñ²ÞïŠÖLl•ÙÈlòìkBˆXÆQýŠð‘Qäk!EôŸäÏ» ˆß&²â0¢û$r å-}›ìL-:z>2€á¢âyf:AT›É>®Âw¤Ù‚ÒX½Ldà©®FOþèwÛI/±èNáSㄈ†}ÖÌyØË#ª<÷fVõ¡( þŸ‡jÂÃTÚ=•KäÎïîp‹&ѧúÁŸßÇÞ'6Ù V ÏÖì#,wEsL@ïDF…Ú™0è¦û™± ]°¾Î”Á” ¾Y‰ª#bS[€\#šwºU]D5ö™|¾ŠHýyXL×q­·.™ çÃ׌óç‚ÿh†o©ši@S ;êL<@îñ¯´SÑ!^& uJbD=ºH ¾—”®G9žl­( ÿ ò6*Udkê?æcQ ÀuÅ?wágWäcâ<=þ|˜öÄHI†Ø¾Š«x†º°F9ñ&PcE§?pºÌ$¾}ˆÚÌ™åÌÄí “ÔZ|úf:ÁZc‰,GõM,êIÆðµ¨5Ìe®CÏ”‚ºâcôÖKƒþª8øÉFâe¶8˜sº÷—r°ìâJ¯0ÞÂ4REð ­è¢> u Z©(œf0#uýKön,2Ë[–µƒª—ä7QÈŽ‚YjËüÁsÁV¼kä"#ófñ±ÓMÍ(Q}†ÏîŽå+Œþ*‘k$(N : ^¦ƒð'ø‡QYOþ:]e¡ßõXËéqӋ㘦nÀsôB[6Íáø]›¨ô¡Î¢èÒ&"òódÐõÓ*ëõˆúam+šÝÍTL¾yk^±þ ëˆ~5†îRà?ÎQ1YŠê”Et» ÆÖ¿ÁÚÐÆL¤~p‘þþé[¯ÊZi¹7΂˜Öƒß.KÃ=¬÷æ{8S{+óÏ·2Ke4uˆI©ÕüÀùö&ÿˆÏ\÷sA¿‘Ïð9ÑQ}0£ÈLjU‡È;†Sáx¶…XjªTâÙ=­”vg;= ‡¸VtÎár°é/r2vXøŸ?©ggf(?ÁsºZn²–¹Â»¦‘÷Ý"«ŒCýHg×^ºÉäsU±š%]™ìÜ;W¬WD^G垺Üç9þ'ü‡KïÀUü}(Ï´zŽÀóôõèkL}§ÝèNþQZ؆£¿:¤ýbÔ1Q?ýUÈ ÿß½¬µ+O‚²æ‹üCÅ‘~ÆG}ú+/™“¹â†x¥Þoÿ¾Òß?nÌÄŒ“%Á$&Ró1RŽÔOé‹Y»XV °ûÙ¢ÑyN}€^Aìáþ~FÃ=<‰\§·JñÝþ%q@¨ºÂ>Ÿ%#JIÆžŒßVD…-°x7A¢fáç|©ÇŠ……­ª’ÉòßØÒ¯'á™6˜Ž1•ÌcÄmõÀÏå[oCލ»ÌÃKÞ­ÇÒE½|›$¡yB&Z(Ç-ô"1{)ð«\Än³Àr²¦º¸êh+þ| øÕH¼{gŽÀ¥ -&úuG_çiº(ÈL?ü˜ÎÎNqr‹ p±Åé]~ %-¶n8¬îgUÈ\¦æsÇn‚kIÿ~w•1MvaGIP\̓¹ÀçàÚž¦¾¯<ýwù‘°Ë¿Â2o‡ãþD§,yb"ð™!óaÆf'6QyÈ>Æ€õ/?š€Â*º5™þWPÄžÝ*Éüéf!®õ{ôRïa7bs?îÐ[;‡ñÝñÒ‘ÉSœ¹óÕ3ÖÙÍoZÖP:–wÅD5OT-`ÂUeªðû)Ü"ÿ9¦þR…Eð>ÝOÅ>…ûá"øh_ü‡—¹ ¨Þ-Žu“nP9É?^Ø#é ²ÙJg?àœ´àhw ç ge°6›>R¸÷7K+¢7DÕß|¦»µYAž•é9gÝèÕ“y[¨¨pÝ'ÿ¨BuÊF*ìr0 x"žÚñ#)P@TRýU1ÿü5™›nRX+Qì¯QÌÞBo[ÑËÐåÁ6²‡—v ò…ÇtêrÙc­ƒd¡SÍhÄ 7èÑN:ˆÊߢë Å3žÇüx`!49¿R?XŠZÝØ×Qê7€¨ÇÊ'°{ƒ\µbZy;*üG8råìäÈždÞ ÝþãAÿч;j÷Ó¹ÀÊM÷ã1œ÷V^êÓÚÓ˜_›Ú%©WÙbgÒú@1KCx]á.- òyå’„Ó[éuÝg準0H5á×óõc_c辺 µUr‘Oè†Ów—–Ù¨gÌ1Ή™_rBÛ¿¯zI«!vse’býšª˜2¢ðÇÓ]#ÏË'Ï w¡õÔ {ÍÁFO¢ù¥L– f]ƒ Ýõ-úY|±?|wYú·7tŸ‡°×Ñ´Ìà}¿‹5<)’¹JµÁñ{¡hê¦"ÙNÂr /b:“ì„þÊçßúçg— "*õ-ð«} ÒÌóä·;À®‚ŸÄÅö ?cTD¸²ïãWë4?ð«#è¯>éï%·Ý ÛÑ}4•{Ùà§^°)ð^XÒdÂøÎ1w2’²®ìÄK£jv ùwrÄÓyú‚Y-;ÂOœùBSø´\ÄiÛÃ8ê—ÔŸŸ‘¹ÙU?ò­ƒ h·dM¸‰½ª.ʰbd! ÙßzpžœÇÇ(T/cUWÑ{9°6 péZ:¡ðáÌíTïÆ”@½b€É("䢆¸Jï‰Îà[«ñíÈ¿"sU4v™0ÿ±U³èu– a-ql|ó)AIŽ6ØN Þ­urMЖ¾ä'QÀ|€=/æ3—’‡¬¤ÿî’À¼Zo –-¹«2a¯†=8'Ÿšµžùµ9™‘} ¦5}A b·‘Í}â“£žzIÄž{2ð™ü{áåÔZäP…èѱÎÀé”ÓÝTø1(boP¯>ùŸUÊ õîl`z2³úÁ`Wú¾Q˜ìê"úèôä,-Í]ê*–ý˜Õ 1Î…éŸXÄ5ÝZlþN¿-Ä·.<Ñ#óº¹}à*OQog‡˜Pd"ü‡ªÛZuo4ÃjM¾‘ÚzH5DAºJ½†MžŒ.+œ}›+Ó üê ý"#Á,o1“z˜ÕZc½*ùø¢‰öì­‚|Dÿ«Gø7x¤ÅÔÎYˆC®EÔT¢®¤™]„þ‰íÑÚ&Å'$gù,+:3¿ö%ÜÓ;ç>¶Ú“#¯R-ÍXÌOïH—©iô…ÿ—¾…ú(ð!¯a¦’£ëÝ ~5•zÄÕÜ“ÙP}wŸ¿Øúv¡õ;õÊ:$³ÃʇCU{fSgÿ̨Ž]Æv¹œùç¹é6’™ùµ‘¬´ä±§°h¯ä:” ûÜþã’îO­ÛžƒáÜÝå~üG×:3 Ÿ °)#ñ±]éñíÌ&®ðô/¿$‰ÏÈ ²1ÙH$ÊѨg{£–ÝhME¡¿‘ʈõ“õ§´¦ô4N >ô K*™šgt¤~ƒüÃ&ÿxÈüÀxåGö¹ÅX‡:g*:Ý…D¸5ä,ê?ÖëÓÑÿTGíânÀúìäµÅ.pÍlHdLuåékOýàVüÇYâÖHX«²»Ü*BªrBÛ©ñŒ:†ZGÚÛüê#±gìPüÇÍuäu4ºë©m‹ƒâj>}9Gmvu¯Öÿá…ò!Ï‚OZ…ÏÇñÓ/˜{soˆ3FÉ>èŠ3aqTZ¶õIŒ>**¼ùqë,Ù¹ðU°óAÌ¢ÀúnGYÁzj¾—=d³×eŒqO†ç:cÂàQ4]s9C}¨Ý¶­èwoSE]€Jãd'Ùð³Á3òI:ZÞ1fZ´cWÐÉÝâM#'jÁ#œãxx¤dÐOa¶½,§'ü Û‹þW:þ£ùG:„\oB¡ÍÏÀøà?LCœýUdêû?0ï!œ äô€ùƒ8«CÔó¾,®2[q\%鿻ЙúÁüÚ±`NmjÇ@µGõ ¥\Ó™•üt®š/©:ýçÏ Ýÿ1HtÈ(¹ÆÊìzaO Ÿå+ª[ÛìR®íT–¦sâs¸+úàÜh­ïñ _‡±6 ˆh” «oé×ÏùO|dþ㎖õ'ãúÀ=E§ûÕ;}‰‘F´„ÿ¨ÂÝuDKoÔ âCG¿ûsݽ¼´Jâ†Ì 3ÿªËwÆ'ž€ó⎌C_'Æ==V°û7p¡¿ò2–ѹi©,ƒ¥ÙŠž{´ìKD¶UþFÇØÑ°Í5UŸäÏãÀŸ×NuÆc¬~¬~SØÔ¦Jñ O¡g1õÙ\nø¡þW׌W" õ# ½Þü¾£¯ÍÆ«ÍüW¥ì3¬Ð)ùþ‰ÇåñïóaüÇy¬ü)¶ë0èÐp›*X×~(Ÿbñ •5O!/i¯Ò‰·¡Ÿ.÷w{1A„~Ç¿z²Ÿh ¥À¯>£k*ÕÉ?|`ÖÏ’\‡“/£¢Ë&aò{´Qú'ù±ø°Ä}øÙ‡Ôtà)¨Gö’¬».±Þ^pàCd_·AônÒ…u»Œ,î¹÷øâ•öшÁùÉ‚—LÅî’/äE¿ëÄÀ«ñyÄ9s2\Ajü‡3ÿ½¯úL³„µ ¿Ú¦Å%åm𪿈xág'sîúá3š€Õ$J(ëóìh‹ù–})ú«µ¨6ƒ¬¾©™¼ >[QÎdgÊï6 4k#jÕ<ð °¨ùéß^ Fx)›@-wÅ`¡ý˜42c|‘ ðµE¨ÖØŽOšLVèÌ#h ÄRßgŶìê4ø•g(†Sã?â0 DY#̈ÿæùÇu#;9é>´鈲ÿ„¿BÆpÁê~5Ѿh¤_FuW{ë8ùL'ëpÀ§Ãן¿ÚCî•I÷p©å&•Â|¬ªÆœó ê³yö·¾1¶õdÍa¦÷3Õo'ºÞˆÌ¯]N–ÒlÏé0Ÿ‹,g£´Ü÷vú_5'ó^H|RL3#|ÞcæQdŠHs”‹Át$¶Þžº'úÝ]Äãɬ‹0ݳÌdÖ³²Yͬ­k¯2ê— òÐOxû’V"êÏŸ*TÏôßm€}ÿƒþ'©\WÀ¯žP?¸Æ:L/ã{äNëA›úÂÇotž™J¶tïþ#/ÏÁTuºïŠj ú«*è¬62ñÜåtƒ¡)†3ÁÃ’ f+ ÿá²¢±â9jÆP÷9íwûJú9±GNçYêKÆ{]·ÚºîRÿ1ÛŠ ê· ”-§k§ë‘]œg«YÞ•ÐîEï4oë*OÎEy€È¨>dby&ðáø¯½ŠG5ƒÓëðï?ï™îÓýîëwìk,úïzk_©üõ×nÇOµJTì¥"=ŠñQ «ª,ôÕ-fl¼”å‰v(ãm±Á¸Eÿv“æ)áÏuô»÷[è+ÿî c3hô0é0ýÐìÖfþ`xã„lNlÑ\¦­(2ýБÇч2ð0×î(~%–öæ ÿ„ò9ùñi¢ž×‹¨º&ŠÀ¦à» ú¦+Øø<Ûv¬þMø“ø9/ºW9óEs’¥¾!ÿ˜.7}w‡/4º-zËØüf!žt‡Ÿ‘Ø…ô_¢YB!bÍHäÉ·P½7>ÝJ(¯ ©ÇkÇ=z“¬ ˜GØ\¨:œòIüÐ,ýUŒ·øÐÜê‰ø]«Ö[¢»ÈTNÀTãH‘X%p5` áQ t"Ò¿ˆ_ÛG\¼›þ%:LMs‰ŒÆüÚ*"øKJs57;‰îÇFÇѺ‹]_)j ƒÚ쎰߳ñlÙÝ3æÆe>Š~w»OÔ’oÕ/0ÜÈÓî`sçee)nÒO mr~j3FÂÑ~%™‹Ör-9Ên>w´x¦‡ÔNúcÑ_åœoñJMŽT¿˜ýU|f–_´ÖÓ‹#§åÃüÖÖr(ûævø)5Ù7éÞ8Ä•žcXø=&g¹ï`êk®Æ(ú‰D¶è~¶sÊ*†ýÚiî{ò“ Çe½¥úâO3;×Å“l;èåýbTáŽpê%“RµÝ€;å3ŒÅfêÅ“QwÆÎ€ÿHîjj]§_W#XôrdHãñ['ñ¯'‰"ÒŠ@>ÀY·45i@g.¨ÁxÁEê>zéß>’Çxô¿JEgÛ•v[ŽxÑýAsº°Îh¯^|&Î ï»·7ÿ1Ž+1,°ºÛdR©„ÌÃ`¿ÆÛFìÔd¦{IGê§2a©³Ï_M ;Îe4=Ôt÷zK™UR™“Tm+¶J)ÓòÙh€á'†¬B©|ïûŽúA_ë:Ÿò/µŽ§ÅQ(LçxëÉŒè5¿.Oß(¢ò$ã8eÞEÅ1 @æþÆ\«Tä5i˜P º­DÍÊC’ÌŠA”äPÿ±˜.p~í-ýºØ'ç’ÌÀ6í–~̯õg²¢SÇxÍÚgW·“¸ÖºöáÓËÙ—é¿ëÁü¨.p#·á¡|ñÛ©þÕ|)+^¾îô?ÿUè­ƒäϵ?Y׸èúUæ,1b‰?‰Çp¶—k‘úÆ㳑Јý“óf¢ÎÜ*ËrçGÄfE‘’gts[<Á¯ƒ_½Ðý?ú^­5œiÔóeAPèÍôcî#7²Û)Ä¿y°ôOe'úaÖsß!ÿ¶`n}˜þ›X JòV  6¿7x{;%¨^žCÜÜœ½&=DjÉCâG*BïD2î/ø )iú‹à?ò€‘•3ÿ &ù(ßJùw‡‡´øš“ü÷þü1ùp›FDÉ#É<’â›Jò”ÇæNݦ“DØßY±‹&{èÍElCr®=9@ÕºÁU¤F¯ùù‚?YSm¬êìe9æ:. ãô¹è à's¡èGþq€+ëÏùoPt¤*õç `öò½"·¸@>°I& u~”Òs‰/ÒÀNn¤¢ñ(Seð«ˆê ä4§Å5êìºÓ¹i6™Ö '‹¥þg¹ÞåÛ î?o*}a(þ‚±GÞƒ¬­V¬˜>ñÜ}º G;T>–hf— ¼x¤‡D*/=ewrµÔà=&ÃOÎ$oÙoæ¡®ø65f É?¼Ì:ôô‚ã’fl{ìé3x¿×e*üytî­b°+Ñ_9úÝaÔn{P§0Úˆ#t%<Á\ñ#f+2,u,X‚lAo¥æŠ¥ÏvУ~gä‡óB¿›š.O-ÌÍäP‹Ž£§ï jé ¹¢¸ 1ÿ×ü£!ÜBU<üH,½ƒÆíåH*…¨{¨³ð¢þc@@ý9óÿà™|MïŒÖJjîõ»K´ z["ƒQœéNø¿âäéȰºØ7­ß¬ñÖLÔR¯é‹¾ß^ÎüÁ|¬[À®HÿÝîI"jjbâÚªÀÞASðÄŽÚ¼–ÕAÅ#fÏg¶Âc¤´`£'Úé]PÝÚ®Ìö1ú'†‡G_ÿáì >ÜÌ 0îl2ŽûüåÇE€/O.{Úô¦ö8—ÿ±ÛnÊ„ÄäÔᜠ2>lHbp0….+Ǭ¬Dìì(C’ GPõÜù‡/¼îY9Ÿ'u<ÕDcà?R¸lWo«#ªˆ»xóœv"××jTÆ-íåf&WrûWû7°­›<Ãû`]›òü´6—ˆýA/ðéu|P¡ÀZ¥×LŽkþø6bÒð‘¾ÅH+šÒÿ*7gû0ý¯ÚS™(˰uï_Šé¥u¿ÊC¯Ï’)‘âõƒ“á™îË'â™8G û#Žû°¥3e¢ÀMäãàÏ¿èGÑ“u`œÛÑÿªœû { [#ôæÂVàV°,Ïq7s ùËcq+};ÞA÷åoò´˜ÿo ýó³ðâ¥ÈÄ=ðޏ{+hX>ì{>¼Ç-ð±è¯JbYo¢§zŽŠñàww¸YK†ªiK‚uø±Â1À¶hbÇ,¤1oªÂæz,è>¡µŠò]üj±Qýnk‹K(Îbâ…2“Ç}a­6(‹ýy¿[ïMý‡4Gñl•±¾Ár¾ž„{ÚL=2úœsØzQ°Éá¸ß¨“¤‚¢Ô¤L'[„Ïq¹0áÉÍòrØèÙ–Mÿ«¹ðÕБ=äó~±–`…_»·×Ykª·bgCá þÀ§Æ‘ek} ?ã-–L¦z& YÒ»õ$KíòvF¼p ”¹ñx©ðùEÔ\÷z±õ3F"²ñ‡àËõ-:]Ë“ÄRåÑëf…OË<ÜØ.o²…‡teÜÂü¨ÛTíMµÄ8ò™Åæi0ŠœÒatÿþã¥m1@ÖKrý?¢Œ+ŸßUùQm¨Œ ^µ›ÆÅox0…ö5õ%̼º„^E}ˆƒäíZøó*ò: •L(v§söÛRñ×ܬÀq:Ø]*~¶}o$lóRüÕJìÑ:üç:úï†Dg3e?鈱WÒËÐNl~g·™ÎÊlí¥btú'¾4̪Oö–†Õ{“3¼0ƒ— q/v6žËhÄ+åaðWMã7|e*uG©‡8j_!3)j)¦l¤÷4­ô2éefã¼lÐw[ñŠ‘Á‰žUlþÝ ³ ¶ûà`'Á›b¡?ÝVÛ•ÙµÌÚƒ¸¾uÈ„[yNɳøÅÌìl½8r‡ŠƒôEØÕœKþ±ÛÁoŽEð™~‰PŶ—€ ÍG¿{¤©-üùaêó\ôOœlÞ–ÝëMЪê͈¦Á#>È îK:œúÁ\Ö*êæ!È„^` ýLÚP79–þ‰§È?ÆpvÓ=`¨™O­v_ä~úã=qÙ8«æVb"Æ´\Ó²øbtt\˺O¨>?LÞ´Ì4\§Ñ³Í²6 €ž‹÷;HßÕg uˆ¥ï†ÿÈ=MÕŒþj”•Ú•‹ŒCÀÕ|­T–ŒƒñYNÇ©Ô9ö·M+†ý®mÄï®c ç®ùçÏyý8üy?b¦%Äc×ä|«;ê…þäoG¬²`Ue˜¯ëãºÏLúæöL³²+1×§ }µœ>Ó‡9ïMè_]ÖÌ+Cöðüºþòk$¢éÀ;á­VXO뾎?÷¹‘ÐïF1©Eñ6óÔrQ?8ÑøDý`Ýë§–»«µ†SÊ žˆ(ðˆã1R¿'®É¸Ò’ºÆÏÕÉ/5Æ‚¾Ì#ÿpâÝr”œ¬¿Õÿ¢Ò¯$•âoÐau¿þБg¿ª&f`Mé Ä÷V0œ|Fþ± åŽ,…Åï$׉?pÌþÆ‘„éÁ!¢ÊBÄ·°5'±¢U©eHjæÇî×åd¹á»;ܨ݄#:Êù©ÜD;•ñD©ñ+A»KƒU<'>ÂÝÛž»µ¥²Eôï¬8ÅàSMaPÎ’¤ÅJgâ=`º[à?ðDn óV%ÌÛ|JLºH¦Õ;Ÿ?üGÚ ý­,M”:äƒþê)B=¬}3îz<µðo'ØëþæS>]Fo‚/ð.¢ž@¼—6OÎažIg–ltf1ÑÅ…#bôB¿ë²¨;¶{è[/ŽXàÕ_Ê¡âWË5Mä“§ÈÎ6 ãIG¾0†Œ¡+Þ¼)Õá/ØM ºî]Æz/‡͇ÏZCÒ<•Nª†’óÙbÌp°Q²ŠÓØôR¬×ëk”ÅÕ5ë4øxz˜î:VÚ’è/ ¿IõhgÙ'Äu™bä]U)>ÿyzèþ<¬”Ö\éë°ÈÀsn”À+&vvæŸß'Ch%3[CµlГxÕ ^ÿ•Ñï“Ê—9TGQkQ‘HgÚb®”è¯fÁ|d£ÂÛÁ¯ ÔÅOèˆâ O·@•ó‚­÷AìB»ö™,µk±ò†M™ˆòw©ƒùCAu.X{°Ö³Í£°ÂÔÏ“Õ5FÛüŸ”†uO&r¯×U«©×A­°»µ¼E5é/é» ¿ÊƒÿØÄt¦çÔøùQ3Þ„9¹{éçQXOVÍË×l°+EÕ4÷á–Fõšús_"œß¬pj…Ìa6³¦Û¦«¨½Šy¸]˜$µý•„™žƒúv#s7Z[‰<æs6|àä†Êä̵ùº`rôRïd¢8 3œ\¬†[•èßîe·Eû{ ÿñÍUv{3øØlËcÊ-•ž¹‰<ö£5MÕÓû ú]/êÏÑLð,-àŽº.[íP&C÷vž_¥È?¸‚h¥p5fþ`-¼È»èž½S æMê‹Ë1Ì×ýþ'¿&ÒgÀ€|ý„gÚ/úÏõEÿú›šžùŒ£FqÑ\<Ðï¤ÿUg½Q…i<¥ägþœÖZ0S%>öàì .‰÷tlï«¿wzòʘ2Š(bü\ýÇZc XXOéÔŸVÙé¿ÛX7Œr¼wqôŽ~·ˆû<üÛN ëƒõ,b5þ Ñ}E,Ws5ùÇ+qýîIl¬¯Ì¨¶Ër±Xðo ýó³OôOÌŒ'rúޝûÿ,¡0^i;¹Hy˜êST\øÊ+üíüMTúíòÛ´—têõ„/ñsbUl½¸ÿ`ò¬æýÝXÐ>øê‘ñàÛ%‚}gš‘ESc"ñ‹Te¤&ÃÊŽ%B]#T©/x"=ÉFáQvƒö'V±eŠ0#…{Úý þã<±{m¼ÃkùBVåÕÕ$¬¡êHüý†Â’Ì%_êçï/\ƶKî5poýªè¦ŒJ‚ÿ¨6Q~"+=dÏ‚_½`öìeªÅk“6#‚ÿ-3‹À¯Ÿ4ÃqÌÁ«+ÀsáÏ“sÕcUW¢á] v1ö<; Ã*tS+¬Ttµ8ºõ›õ‰Ï|Çgß›*Dž¼Q®ÝÓE}øª'ä·I`Tºr—GÇuÔê…âh>øU¹üj(ŽÃŸŸÁË0Ñômz€£d{ED¯`OË{±~è9¹jíÿq‹:QÔ¶L¯“®ñTb¯±îSí=ÂôÁò_0kÃKµ¥:ÞF%¶µÌÜ+ß¹Ïà¬Ð º¡L4o¡ËhnV"£¾d¤Ïá ú}u‚ïn¿µòÑoê/»ÚuöPz{â†3ÿc»™‘W9Õ÷z‹õGðY‰væª VAzC¤6Ï‚*íƒ_€§èm¿‡ýØLÞÔå$Þè4Ÿ°HL ¾‰Pß}0ÞˆJàóáx.ϱjðüDÃY«8þã5”[éŸøü*ðJ…ºßœ­ÙÊ©rø,ƒ×ûÂ|l§Þz(XËXUÌ੪n${îÌ÷[ª7F`ÔúŠ}¼°ty!3¢[«šˆɃ•mìÄx°Ìó°ð'à?ò˜çˆ×³ª/Lq¼úRôO\¥_E‰u·³Þeâ°W²~mg0žÙM~ObÄýœƒUØ!_ž§eø¦5R…оÑ"ˆÈhò™ô%„ ˜LöQ‚Þ1_8îOj¿X,á?&c›puFÂØ¨îŸó¼½%ÿ˜ª}1ŠsÎÂT„sò#ŸÉGÎ’L¤=Èùj7:ðˆ¿&GJiÎçºãNêI<ÒM¤0ö„8æåàWm‰.’c!’Ï\혈"îúØüpÁçé””ÞºiÖ§Æn-ù‡£Ó‡ŠÆ“UÍ–íBÜ‹—©ãLVV„j>i:<Ïxªå2PaÑŸžKóQÅî±=Ñw5°>šLýü­ðê&%KÚ†:2èß°~>èb`m;rMÞ™“‰w—2p Ê¡LLà.½To0œ‚æk5€ã¿@ýËiÎF!¼ñ%ˆîköt™hjŒ¹Zm6¯1Y¶ILê?&ÒÍc+u~M­WT)& {S1ºnçí¥ãï2óHùµµ2ú`₱œéBdºå{yüªÜtøòM¨cŠ®ÃàEÍÁ‹ü±Ö&ž® Wç#ÙYÎg.ÕÆ}¸õ³ÆÐÜ+äà•­ªƒ,Ž?^UÆži·“¬=r¹>ÁXŸÇ7íGw»•ü£þc6¼{6™[ÎrŸ¿MÚ1æ¤àn[Ž~7œ¢ŽY¿¹*Ь ¨¤u)uñL’,î‚Ôƒ”"ÿÈh¥†å:MŽþFî„å¸áÎ?zêÏÅ#95½jC¯¢kV?×!»1ç}6Š8~»¿¸¼]žôo¯`5 »rP“þ3_Þ‚!ÜL\!.)g¦“{ÝGüß{‘FŸDõJK÷“uÝ;õÐÓ?ñ¸Q–þ‰—jJ®hMqþã¦UßøOàÕS­¥8$3Q©ð˜úœ‡B‰óú,=#ügjùA$£ãP\÷õüå´ ä‘T?™“gi,{Ê®z,ãºü_ÒžÞ ØŠ  þmÅxôQ©î Òò‹:®íD¸º|ÅóM%üG~x­ÖòOÑëßúçg÷ŒÏ¢šê²—57ÛÃoì%?ƒõaú)ï€ÓðdÅïwx §G§+È-üdîÿíÄ&žèœnn.X@I-eÉ?"£L]Ž8k<ÿÎ}ŒúpÔ•±5—ðщ¶dè[ôTq¨Œy*g¡°ÿö âšÊ{ðƒ°kQÍ«äõ9Úüø´ŽTº¼©¬Ft» *éܲ‰ŸM¸—þPCè R©ýÄ(‡ROY¬i(ŒÉ!p®}û1:*ý¾~Œü#¹õ¾^./*5‘} ¢èæ ¸³@Làï½^4"á½û£^[A}÷LôW7ÔJ¬`!ô»³©‰X@¥òaô»Ž¢+ª§T­¼¦—ÖmöŸ o½?žB4aÿO`×ÒP%×™ýù,]ƒïDæí|®;X­®T4²¦€³e¥ÃëLb»à_Î5¤1?*‰\–xŸ¬²"õ—³•MN4“ÜÊ—)‚kÓÀ×YËíôvÜgE·oàcªá—ï±’Ž-ýÌùò…û¢ì§ ­3÷Ø0²žòdº¶¼&‹Z«à?^R‘¸ÒšEw[&Iq¼­˜ÿñ.©³€ƒ¨¥šä/x¹ÊfD»UÒO&GðÄ®ºõ§z+Žâ‡»ÃRd€‘™®ËåZ æä¿ÚDõ¸ Ö{9˜]2j},>ôè.$'¹íÍm)uÌ)x.ë«Gæ)Y@UE#М|¦yVºS †áOB÷Žëv¾,HY‰¹/wÄ8ƒ‰ï®¹ýGmpo9¸iv §×ÛƒúO³¥+•íEa—®b#nÉmD±¿àß“üOð«LÓ ÄZßh%tÝ}žÜô‡^DÑÏèÊ8o”3„_@O_O­*ý°±…2nj›~h•¯ÿè”ö»¸*³£¾”}”‡LÃLÉz|©@Ø H! R‘ø3ÆSÀ;cÙGq óʵ²‹Ãx!ûÒq¼- <ú³Šœ?täéôfz-±»ü¯‘ÛÙÎ<Âï.¢B/T}^²2ªÊ5bâlÑQ… SŽ6Üü«ö5‘Ü ,s¾{‹ûÔ— §ñs¥¿»ÃMZj}dLð°¢`JÕ±Ó:Ǽ.¡‡YÄ©xîSÙŸ{¯©:þ]i‡Q]Y¦3ÿÕé­jªù*%ÓƒŠ8S#>’qàûÇÈmžá ƒ šaúWÚdùÑ|ü×eªþ4П¨–;b)f¨­ÔK"õÙÄ·Kù¼Ýç ·L&·rý´T kËnî ÿ85,~Eû"oa^ëEIbÒ™øÑT×´YŽF·ÒërøÁ·ËÍ'ÿ($oã½¢þ OåI/T -èLמŠ‘ñ'ÉQO}ÀÚ]Ûʈ~w qH£x¯‡ìß~Ù˜o—ÿ±{üª9`a‰øëùG2ëªÙ6}-ÚÒ§Xòµ æ”[õB\éWFT`ý¸zóÌväHãÉÌæ£•*Ç3ƒ²­÷hºýn%büÞä3y`2>±Z/øøæjÓy‚uQUÍä'#7ú5Äa¥ªÝ‚}ŽI?Á-àW©\]‹Y«.}`¯âá‘|âhNà?f Ü«l=®ÍB~|­±z¼§) M~ø¸Wô£¥;5“û- l(‰½‘ø£) Œct>ÄDƨ`Ÿº·WS+®·E92ÞH®8ø9T Î@{µ‰~+ ¬Úä… á1R‚_ø¢‚td*.Ôí?*éOÈ?ðõƇ ’{­‚艇[¥É†^Ó]8&Ù ¯ËÏŽŽFx±YÖ•ÌnÁü¨ÍÖE"/éCdÓ„ü#Ãÿ$ÿˆ÷èê>3—˜þsqý×sªi1ôËúSÝËH'ÚˆÛ=·h™Pï.6žoé6VW½À‚¾Ú«UkññÑè¿[‡Ø>+Š«ÉúSê?IS¾7"ü¤~wŽ1€(uª,ö>‡*·•r€žÆ8 ›Z“nÙ°³UCLÄ º› ¯sèôÆÂјÞÀó9ébn&2¼(.ƒ×Ÿ'V¿csFþ)§‹yA1Œ×ºø òÇ37â}ŽcqÎy³þKx˜ËÒê* ”çìs°ûJ…±S‚ßàkîÐÑË„Ÿðe‡ ³ð|ËÔ”1PD&1×(EôìKìù»ýw7eÈ?º€u]¡Ê<>V:L@xó7"Ã\ M3±£ÎœŽßÐ_5ÀïÅ‘ÉÂD*Ÿ€_Åã_^ ¥^'<øUcØ¿%(¯Þ;<:ݪž“}¬å,áSÿ±çA\ åpýñBEÐ_åæ|M'k«DþáGMÜ=å’ÓDB°ð) l“ÙÎpt®Œ†FÁ?”üc‡f‹ÒøÔÄÿ}@n£„©‹}Ȇ-jÎ4 \er™àõ/@¹fƒÏ ‚K¿…ÎÏXGÜCGGø’Ùè¹ö‘«nU¹°ï©¬Üè2=a€cQëVt?yG ¬Þq³ý¥n˜iÁÛ{„¸ÒgÈ< c¨³YG¾°ÑìÆùY„?K>?ÍÚWý‘ºˆ“ [¿ÃL¤+b~:K=!`;["ÿ/*UÜ¿J îSƒLõ½‰í´vS1בü£8ú«¼®©XѺ(žÎ›uÀ×Pr}ØiâäL!ºýD•ÛUlÓ\²-ˆ“cW¯ÃL7'+ˆ ³–ÊŠKøÌÙ¨bg¢;Lnј¬ÇFé=¶Và?^¹¯qw­Þ;Šyj’¡fz¹HþÂ,¥!ÔsWG¼=ðúEúS¥W…úË}v´lç8/«ê? q2©±îõòëŸ ð*û®cõQÏÅ*ðÖ¶ÔŸAo5¾ç¹ÂNô¼Ìî û=:t­±NsÕW¢pó2/ÂGeb.Ú×wh„qbqøÎGæ#™Hµ´Š’œ„‡‰h?´&Ó kžd#ªå±VzØŸ„–ÆÉaTöã?¶õÑå×õºêý‰s·OÀ6 —‡É?t×p°¯;VEjì+ØÕ\Û\—ñéÍì‘f—nŸ‚ÿ`æ=˜ò 4ƒu`›9䪯 þ¿&A¿˜<Ô2þŸù}/ŠØ]ÔVôW;´ÒÆòˆÔç†ûÉùQ'´ßÄvtLѱu­Õ]‘œoŠ]j øCÄûîä¼à'qª1•ømŽLG컄œc2Z± 4M°i#eZ2‰¦¢”û þ»Áߥכè5É€/ÃL4Æ\¤ô_Øâwâ6l±Þ;TE¾² ,ð¾FÐwïO¢ö<"Ìñ!,qEòƒ_± û±‰ÌÓ‹/B6óŽP HЂ¾Þ¯¹¸§v0ë43.Á l·ëŒ­˜¤SYõ\¥‹nÏluÇø^¶9ͨ¢>ƒ ÕÅš_Eyµ€úóô(®ª˜¥ˆªï/m$ù…WxÃ9ȉÿˆª‡Õ‡çœ¶HÏŒE½Í^š€8E#·¬ŽÿX£ê€¿W¤ ¤(–?ÙÇ>ª ÐÅ „¾ƒ4CåÏŸi…D¬L9¼d~Î×BÎVqj{Ïá!O©ó¢›ˆA5õpÎ_òžàW‘ñê‘àV¹Wáq›‚‰Õãº8«0_€:åAƒS3ĽxßpâܾäËAhö’SíW3Aû±û$ìþ4+-3‡öã} ÑAÜ…x;­eXÏAŠrs$»Bô¿ /Z°÷h ”¦–¹T½e2Ç.˜ìdÌÿð¶¸Ò ßQßfŸ®”Tw_ÆCV³TÙý¯\rZÛ\³ØqØ}Ó S#ª¸SQ±ÐÎa_f’^WôX;èh¾‹L¡4™ÑcôMQh͆?ìqÖ–*æ!ÜcãP –&{‹!ÊœÔ[ÿ…º)ö~.ìÂm+']sWÙU­²Ö!ø_Øc[ºã³P)ŸNp?±é¿ëÁç=#§¬EÞUcÍßñèR8‰¾¾‘™»‚ùµ Xþ+ÖMk)ùLüGØvVfð¬$ ‹Y­TtPÙCôõQVƪuû†ú-á/'‚(€§k/Q(]áÏ¡(‚JlŠk?A’¸~±Ç™]&ùaqK·/ 29 /±vc-+wºø¿÷"®><ˆÿxIýà§ÿㇻðáŒ5F^ôW/8ù½ôoïclDõRfTúÇÝÒŠŠÕðç±@ Û£M@MI/úÄ\“i¤’šHõ]ä%øºSŽÔÍ“ÅÀÞg© ô/€·[ŠFf€œ+ãÃ4 ‘‘ÿýÀwiõÚz]±"ÀÂÕÄîG}ºëô£Ãô@ßÓ¤½“\ ÖþZ˜¯Rÿ‘…;ñ#‘ó^ìe~ìa>°›£<Ýå•$Æ/FÄòMÕp9=„UùvQ/Íéur:ë·ôÛ=ÎqmcBÄ? Ï”™Ø¿61P<"ÙCDüJDýΊԃ’W7ăœíȉËŽfà9xUEëXÏóXùSp·8 U"™A­ZÜÙéUm¬Ö›l­9¿ãAÖ„ÌfQõ3‡c!—x˜[sÌÃÉðîª^`—·¿=Pí¹–’ù ð’çÉ×v€©”sô²dm&hþ\ñ‡ðAÑÔ”Ø8H]_®‹¢ŽÆàÓ¬PüÇ6ð«ò2èáJ|D*ò¡>°áC‘k]åžÉ"Žâ‘xFsŸ8S $^œ¬VSÛò˜Ñw0ú«J¨ ö‚½ï [›¾›ŽJÙá»Ðk)-q} æW,‚ ø~u¶ÿ9E~ÕUŽ q]Îdl0¸šø£ \Sàˆ†R?¨cñ§P[·ThuÝ“ˆæö8~5üÊG¬t1|×ÅEKài|hT ¦¸BýGRŽ˜N†ê¾¹n‚Yíð Þ𮆮¹T_ç¥ ®(D [éuxŽ ÇX¹von˜VšúóX(§Ÿ¨¦ô9ȉö0/ ¦~t©N¾6—ùâ'˜Ë‰*‰RV7k³]ÕŽòæäùÉx*âsJªîõFê7W\Ù×ĵ¬1ÊtD3uú@ÕÖjgߢâeœý|l¦uÁödBûjüFj²ÍŒÔ¾0»Eæ’NG¿¿ÿ$Ð=E$ú0Ô"§|iÞÁJ·¢»²‘ÌaVÇ!ë™HIj½èäÛ ¢–] eB<+/ªjzüØ ©ŸåH·ÿx¨_Å,âéÍ=5Xú0ÿÎWA¼5TX<‚_ÌõÙ€O^Æño¸bÉÆ0Ù‡œ*' ÄNjù.°Úž]DÛ9à»ÏKÇ·žÂN·½)…Þ6'ùGМô˜';…¸.ç©Ì >Þ†Ïߊ™€ßž‘c\f±þ²2Ù/è߾ͬJÿöéônªÎ, ¹ÈP³L@þq/ØŠÏJX«û_boä:òÓ)Ä{#e4+“ã"ç™QAì¦X•¬„ŽŽ «3ýÛUaiÆÓ{s¦éÇÙ>'Ï‚wÁ’‘™Vç<ÉÿK/’“ qž™§JÖ_ì‹þÃ6È…¶S«/£‡oÅš»”ÜTŸ¯Ó¤x§FSýð«¿<­ä«À¯\ˆæûQk N~"}Æ^ÈÒ2¡´Dzí×êTÖihçñYA¨”ůSÔ)Ä¿k@W3`]ÚFrþGbµZõ"V´55ûÉØ×Ÿßžø/X€Xhmîá¡öªš#üw…þíÙ`Fãw%òÎF|^š{i-Ö³¥®¡&©‚JyPÔ̇0U?[ö¼ò@z RKJ={I¬V òxd7 °ÙÀ*î±ÑZJþÄê"óÚ‡¿â&­Ø ]ŠaFï ½Z€ú*»ªO|ŸÈgó™S5ò¤ž›Šæ]s·Ýë\ßllþIsƒ÷úDwZ½œæºøj¯éßÞ—s´öã¬1˜Må·b÷…ð)˜±AÝüÓÝä' Šœ4`C>Æxð°–ú5õH¨?jM¹üÀœŠ¢Zèn 76ÐWe=®9v$u´v 4ŸÑïqØP98¡50*'xÿkøêÂaú— 7´ A ¹½áÅ{Â ØøU#°¹øô¦]„.i#5/›èøµvÁ‹]1 ‰ú„-£¹ü*$’iÊüAºÍ »æ:fx§üdÜ£¯ã'ÔkèW5ŸÊ “]º¡¿jB_”\ð çxßUto¹Æ‘3rêœ÷LaüG ¾{‡8ÊV¾Ö›ãé—X„|c<ý“8N“¼ƒ³Ø`úÒƒä(™'ñÑ<ô»ÆM½]¿CôqÔ"÷Ce¢>c>j™9h”«Ã“»¢ºªB-ÉIk<½Û7ZŸñ¡éÇ›‘n¹©ÍL†ƒŠ–¢DM­ô÷òŒ3ÿئ>Ïá?þÔ§r´•»Ìž_êÏÇQúšýT ?ðYf—st±5àÏ;Ó÷ëùÇaê=Põ»+ó_™•Œ®¶#wÖüǯÅõ΋¤¨ø]Û§•¦þüµj÷Ù >\[ªjoÕwÊÁ_Ä«Ôs­ÀÚÛùG-ýžPÄE|Òvr’ÜðÑE*-"ËúMÆiMÀ]ÖÉ2<ó ‰’›Ë5êc‹ÌLôÃ2=Goaת†[«N_——üE~4mÁÀRSýgdf–’´Ò2°=ÎwÛ øŠkàmð Uôî«?¿«½%&‡§ÝÈÀ¿øê“°nŸøz ÕîÔ.f®Æ£(¨Õ|ô»è<õžLe´Qßù$ŒÿPDy<ßMTÞY©OéL†u…ÌÀÜM?ªèšª¢¾*èØ ^UÌìNÖQeÜnêïÿdf 'ÏP Z!æ#Örß"ƒ®MfAßcHSc2‹èô/™†ïOgÛet©ZMþq[ߔΖרQùjä5¾2¦óNœÿÑ€; ç½9ùej:¿%ÄçAU¥ÀêIüͤôKßgµ¹ÛÌübä=éP N)c²é!zª§¦ã½À>76[éqä~"€¦ä UÑYm¿zC'”mÔƒ¸ ç}~u ÍÙ 0À5œáÃøþ…2Õókƒà?D£¥xj_]d*æ~ K¸FÖ׺M=üQ± ðçñáW²XS­¸d4éÈ?txÅQ1æ ñpú§ê9á/gÂfŒàù¢n 5W,fwÍA«é镬BŽ]ŽçV]G3kó?²á?³Q!†»ÒOÚ5^Ñ,ä•ÿ ü*9UÜWî6Êëðf…þýyûûwÞ*{Õš'õ“éGúkîVJâ?¶iµçÔœûûŸüÃwü”lb)¸RBT:]õGB0Ó°¹úMoqX‰D^-s×ÿ°ŒóG3´ž¬5®k¶9½@æ3íj»ì«‹ñS¿ëÝDÈ„1矅ó"+HrZ±ßÿ S›oãWôgâþÃF# °Š›²—ü#Ró?^Ò¿$öÍÚt„È;÷X1}7hÇiXë¼K>zâøSAØKÚYÝ?ÿ»œœDçüÄw6•AØÂüW¬â \Ãz¼Ùøúús-u+. ÿ`¦5üp¡40|ù±Ö |jU¢ôóøâ³ä%'a5>àƒ3ñlº¨?Ùâ]e•‡Ž„çX¥-þ7(p=¢'ÛhF Ýf^³Þ,|Þ>âëËØèëh®]DxŒüc%¾ˆAÌ[Ž|ªKDÓÂ*Äh«É?Jr n`smýU0°|d/1èxØæoþ#H‹F.>–säÎŒ>œ™iX·t¬Z@þ1—¨~»Eo*£&ª®©T¬ä&[øB½ûð«ÞúÐå/‹CØÓóΠÏÂUèG_/øí¤øýX¬ Ž Žm WíahÎà?¾¢¿ú>vÔr¾^F´ µÞc±_þüÖ®ø[¤?¤^|8ÈwÀ™h޹Äåô/™ Û‹êi´‡³ïŠ8Æ' ù‡¯|æÜÞÅUmÃj‹Èo]A¹â1ÏÆdÂÉBr¶lè¯Ý?¿zŠÕo °„¨8z©aœéBÔm”$ŸÊ­Ïs®×]õÓ8æ{â½rfsý•@môB[Ùr%êˆòj%XXt‡<ë5ý¯’œcŠØ,м­øD­!9—•">¹vÎ`€Ñ‘š²²0-¬'ÔŸôùêE-Iw惭…ïOŸù¯LXëÁüù>­¢h†VÊ®tÛ£ÑFjëµ·Ú3õÝL~åßMüÇ6™{ð 5¬—ÐÀ¯êª×ظ䙵´¿´ÏZKÔ¥³Aª†àåÓʶrþc›lª·¡—{!WçÙG™úòb%±ñ{¬`UpŒÆJ‚GÔÆòå§þ"ýKúÈQ"dóÏýö-å0š›XÌ=z<¬UAâúÅpÈ­ÀŽ娛¾-ÊQ²W„Ç|U9F§¬wTD¾Â¦€ãÛÍ9HÄ8ŠêgMdì9šÏPþl™Ùr™üõBìÌ*ð«ôÙmT@¿;V<üÇ ò‘Ñðg]õLýà#üG,¼î,~{ 7ð˜ýÌé lvÿ’|ðç¹sͶ|?©u=ø¬v7ÃïsZ€ÿøàÜ^gøóžøµÜ õÈf\¤»übœ1›RÛÝ5Ør«¿HdžØ±ÑjÂ<Ûý¨²cïÀ˜d$o¨„æ:¿¾Ò¹^Yõ¶¦QÄ=@·J=š\†b) ýr‡YCÙcmˇeè§>ÒqÅÃ:ˆ¥— gf-3÷©Ç)̼ëï ~QN “¨®ù©¯¡Ð»¢ åìp( È8và'—XuÀÔX*]H£ .E]bA³U97ñ;od-ºj\tú£ÄÅo¤];6ˆiº\`&¤ûØxüÇ7³ÝK˜’å¸.Š£´5ĘIág«%yØž!IÇ|&Ht4*þW榡*o’óÌ<@¿‘Eù~Ã~ŽÆüÁÌÚy­ªè‹ÞŽåO)M´ÞT€iL5ü5uÙ¥”X â—^M%ôãâµvG-­ Oæ×&c¢iZí×ú¬ôÒ»aÙñÄ'—­ärõº™g¼uv-iãHæYÐTAšì¹à¥ñ®ÆflÍ+±|õ¹ƒ¬‚~w)ÿñV3%lˆé½°öD¸Øè¥(1ÎÂ:<΃ ¢«U›HøÊ]Ø·ô¿zÓp“Üv»nwÛ­OG ™†Ø±€±•¨¶¹šþ(Â.0K´¼tZꈿ“’(¿ì¾€•©€þê,ÍV0‹k`e^< é&–V ¯[•}·UΪoey” °„>ÄÓ\ìj²—äGm°Ô—ð›á@n“Õ¬àUgê?†½ÙøúƒòF£:•ÙE¼ÛI}Y_E4]ÏðÀgé†Ù\¢LŠ5GþÔ MƒÆSû@nàùýûr'Ð_‘ÐKo¦koBÃƤ kf%‡©ÍW³Ð奈;Q Ll#™—}¦ã §’o‡Õ_m×ÖÉaÜ%‰¯7£:ÎîÖ“ÏÉJ¥Þn*²Ò)·üù°ùèwOA_#"Ï­÷þÓõVKÌÑM'ÿX†NˢFþ1îÙ@'4•yê+©P;ÏüZo£µùL+?¥ùˆ~Œ}éEÛ_¿¡z8Ÿrûèã‰vìÿ.ˆZBÔ®=¹Sî›Ð¯¤^c"ýÁó8ÞZÍ™aä‡uïÿ(#¿–ÚôôO<ÇÝ”R´ µÞ'2òDD'Ϲ놰»kÆ)0µŽ`s¦HÃÜÖIóÂy‘£«Zò±+ä EÍ6p“_ôÒT3¾· €¨•¦ÉzOž§ý=5+¯˜RríØC0ÀUFr*bž2• Íó?Ü”‡":ÏhâÅiÆD™Ì˜d6tüVþ<&Ó?*_%C¿ëG“ÁÚlå¢ã@.³"üÇ!¢ØØø_yÐé?ªŸ…>—˜1þ£œeÙ@:Ó5£ÁžÔ¦¾ñ8ŒHEGq‹éfŽ L¨jÎd©²½ËÒ›]´@¥–KF†muž”ÿ¥‰ÔÅèb¿/æPÓS©ñý«_ûœ\=…þj«æ*ZÓkÝöÇ•ŠZ'Í]»Æ´òê¡_Zîž’YL“võ` ,HoBCÜ„w¸IO÷<2©L+Rk¹~iŸƒµæÔ-ŒdVØüGjø£t[™![P_Ð]&&vIÿ‘ýn)1ËæKTZýMMlgK4bG‰÷_”eõ+̰+ÖE☟h·Diò—˜Ä¨»@u쪼XÎéø¢æ W–‘ $o1g·\„Ç|R9#/Ê÷(’¿íÚ«M°ýA– %-i|á}6à?a¥Kë¾ê¯6i¥ð]9R»ËU,Ž0?è­N4×Äþ j„ üÜ—\ç Ö26U0‰Ôë?;jõ¢š€|á.¶·¶Ë…jvðt€3Þñª=þÃ@ºK{µð-ö »ZR²´Pã‹äºÉ1yÁ{xòô•'£Jƒ]ƾ<éŸ@­Ýò¤¡¼Gw|{ ”ihÙpüÇ6å•–G>#_Øc›Îx¢¡1ùG9° Vôî8€ẇBj=7ÞÁ¬Å†.FÇ:‹xdµ­aû'þ©M 6©¦W çàvlà%2.7ª©oç3O3ß äüÇoD¸ Ñä¦wU'ÂOŒ¢úDº{†©ýÊW³çGÍ¡Ffd? Ã[}6Ö- ¸ÿ\ºým3_ÐÑÉŸŠ¼Fæc0¸8ø÷Xæfª4j³ÇãêÉP+JÑž«`wóÏö³±Ol¬Än®¿êM/Ú¼ŽÏôOl »Ý†ù)ÙŒ Çþæþ„qÁÆ Eh-GT¹[78ïÜeÍØÝ Ã“¹ùŠiÆ ~°(üùI4E*Ç ÿÑ̬7hÝKXÌÅÆépîo Ò^mž7™Hª:¿—| 9AüGºjM¡ÿÓu³0<õHôM›àå› ë½ÄznFsG4 p˜ó6Q?iïñÏ÷ƒùjtó®ûâE_ÖšdE/`:ÖÃ^HÇ7Îã#4Oç`é¯áƒwÀm#æ+sý0‘Þ±¸š‘}~4j€’ì&ÿ(aQáÇT—üTÞÄ%Å {cŽ˜è¯2šeñpˆßÀËä>§ÿðQ?Ð?qéãd‚`æØÎ?bŠ ð‚>´…™’S”ÑÒ;wýOë|ÿYg­*ЉÕ2xI'=.øÕz5‹vŒqwârÿ#ä¯Ì ‡±u±àF߈õ³añžàjR[ñ ÿÈ[Ù‹Zå½L‹œ‘•za“ïìÇÒ7çÉz¶À¿¤~*Bþc¯–‡L¡%±øYìy6,G^$IQïæ¥¾*ˆ}®Ó½ŠW8͹xIWŸjX-Ò÷=û*§ÔTþ>åé?JKGÀnøÈèwkPQ>-!§ÙM6ïE>?­µ·ÿÕ3LS~Â&âI¾BUŽÁ…ºÃ\d87Å" íÌ$xäi\ó9ü÷™bÏäbâÏï; ù¼S¹¤·Á¯Ü@\ŒçxœVøv>h+þŒieôÊMc®7féO¢Öl•ŽŒ˜@54,žê ï×Ýè~y/Œÿ°Dw0Ó·º=×u!èÇq'wxx/²–¶Ö\"Þ莎Ó(Œ››£Ì;œÅ(¼³/{Ü/dŠ˜hê^|!fá?üñúÁ‘vë÷Ñ_M¢þ|ù–ÿQŒüÃÏZÈþÇcºâÙî³â^¼àrcˆ r^ŒÎðç]ˆ~¦ãWcŒòL¿QÙÛ@СFä4Ë™@]w}¦†¹]cõ‚p4]A“s%ȹ®É ÎõêªOµxܯ7¸ Jš¿_>Ñ7šóQź2§vÙß±êËOÖ=üÇuø?éåG¶¾˜Œk!×_fïþ¾àSÅ®ÿ¨AÖ»ÝzlÙmqMGTÏ•Ùa º‹ÔŸÓ]-Kiùk ×ïGóÿ÷9¡: Ö÷5^¢¿ /ÖûþóúüQ™KG©[Z%á*nמPjhãµeÚ%ͯôkêä ÌFÜq…Ü5»¾L$gÕ®èÎØì9ɹ#´|¡÷ÚN+@ü6SæË©©ÇÄ,V3€1üÎlÊEXÛ¬zöHöoOÍlÞ$<}ݰ¨í‰Bƒ_ý¡ÿ¦ï^Ä«ô¡ÛHAx­ñ²«zá~¤]eˆfoa‡ÿ$¡Ü|*÷ÒAl“AA½ÕטS’Õy¥Â]ŠoÞ€ÿX•L‹MO kÛ «•;·€½‚ ~BD¼…þW±üô㚈`Å}Za,}s>ð‘…{<÷^¹œa÷«ØCäï‰'Mj¬&3¡ú[h?íÀyO9¨~#Û÷÷éÅñælÌ+×F)Ö]Ÿ Žò†³ºŸtw›ÇϺҫìv>œÃ}ÆÄK’ <¥#çn"g¾Ú0[w¦'Ä ú—lÄ¢ä„ÿhªO13ô³Ô †ã? ¿Ê ®‘™Ê„øø{júoø`<Û`kZ_mƒß¾ªµ‰ë>‹Ýõ$Ç#î©WÂìðˆ6Wá)È_L¤îf/àz²´pÐÙ©óÞB?ÚXXçòfUj"JŸÀ-'µmÄ?efþ`û0×%)+ Q@w4Z½É/Æ鯀‹·ç.F§Ó…è ëˆPMüÇ|{1”\y÷Z†+WïB˜úsÑ|(%@f4ήÄÅŒƒ ,Ç©Zo¾§Ó&àÈÚ3qã&š&{¸Íå!RX¨'BíД aSlõCE&ŽÕ/¢³²û_ÝÇ}(fyRW7—lÉæâñr?òº[d3ûé˜2×h,¿:Ï`¥¢Úƒó1»¡"þ/)w üG-ë ,B7s¶Õ›Iê°¢3ñ~¦=mC£ÏHÎ^ÐÀŠäq‡åpçzªú@³ë)©h¿›z_÷§âc«*Ù!ThœG#5“|äv^uì3÷ÀÜâÌÌBͼ4tøUKçñS¾Šttë¬jàgl‘•ôZfiGGÀÃPìzš%˜l5ÎÊD÷šsP£OÈ„–4àWQ9Ï¥ÑWÖJ/§ÿh«Æ$/>Às´˜;¿«ôb~íQ«!;ó¥gqr¼PÇa®Ç7r›YFnGFøùò\«ÇøÛò"ÏRS”1ùdHÇzç¡ÿŸ¿0Õ?Õ®J”Tê§ÿð=Ÿ+ Tí¢Öˆþ»w‚û—Qj“´Úmm·úM [aõÏoã©1AÆ9"Û;,,8ùfj\&ë•”YeBü‡=a=òÿ keuS_%ÓóÌ7‚?oD<‘A»Šb©œ/3‘4U#µb<µššW4'¦÷B×SXšš.boqšœá¶êŠ,@\0M6ã"±Á/Ú'Ñû.°ƒ¬X¼!xÓZ»*|&6üÇúã<—~˜‘ð³…)7ävº_¥ƒÝÏ;˜DL>Ž˜~ö¯*þ#¾±N©1–?“¾]S"8æMš+YQ?îÑC[ü<9R>"ÈTd3;aºÏÁ ç}ËŽ?¸)’¨o²¹«Êõ“ÌÄ6²Þe|vrP¥¬Ñæu²>ÿ¡Y/ã,ì¥ò|5YJ½üùÑpV¼«Ä¥ÿî3ú±l>L.Xÿ‘Vœà ùGT¬Õ*߯b»GòŽñ@‹_â?ÂãÏw £.(_ã{&Ã'ÛÈ__²²í°.™ õ}Õ˜?±ŒˆYòžËÈ?<ÉqÊSoV)Ä$ ñs,¸:£ez ªÍÜf"²£ˆ—›™ô 4ìŠDܵ/‡í»JÒÕhÏÝtU½êJǽðÏ/à{òã/›'ôGtV÷5OÒß±…mñ ý¯–€ µáyÊYL 7´8YÏ':†Z8Âjþ\ÕÊ0Fžð‡‰žgR‹’‚¾W³étëcƦŸï*#ˆÊñ›XøFd›7à{¼é9ÂTÇæŸ/¢‹kG"’ƽ6¹D6KÆÄ§¾° ƒ±ª}±õ—`Q¢;ÂL÷¥?cüÇq˜öµt”ÜÁu5bêƒWd9üGç¹ ˜›èŽÎÑlż¨¦Ö|sŒéŠži Ã3&Lbþàj+æ =ÈBýy„ÉíiŒf´µûÉ‹Zg©oë¿•_c"ºLÆú¡ŒÑ÷áGODØEÌC«ÈJ͈`/‚–— sÈOΕ”¨¾É°§m0þ¬z|"š~^ÄWïÿds”ýj2*ôü©ºG5Iø’Þø¦£àWÑŒÙÄÓíŒ×dK±l¶:ÁÖ£ŒÑkÈÏZxÚ½ëT½:Qâql³'{,‹•·(þã¬8%æ>lP%£;~e4HzÅW2|üjâ¥e–É,F'%êƒõïÏ9«D¦(7ú©  vñAøçÁ~t"‚hþR½æ˜iÓd?ð«âÔKLÇ¢Î?JÀ‘ëh¦N¡9õ5ãPßW ýÕ:¸Š8ô˜Æño ÃIòägò¯…‹oèD·i.'ÿ˜‰O¼­O!¶ÏFŽ5Œ)EC@:ã?ž•MШ 3½=o[£.qí]¸§·W4áZÚ]3€7µô¡bã0*¦äfk&é¥w<Ú‚êe6ï‚_e#º$óÙD¤°\£…Î?N‰©dD_ùÏŸ½ÿqMX}Ã7Úÿ¼üS9¨%“Ï9;ÓÐlÅ!òíÂù‰·ëó ¤ >‘õ%*ó¼ðšÄâ\Ÿ¥üÜžf9ùh!Õ -è¦Í$ÇkÅ‘ySÇP÷G6ýWÄȇÁ¯nš.ب:t—:H.«·‹j3Ù¨7;ÿ<.³Þ‹`·ƒû˜c1ÆgÚØ8°ïQ õ§Wë"ëÝEêšOàüsà7ßÁžeÍêúx=HÝêÞù¨õãIxJ”´«w°·±–º/vW›ø>ŽãžUž~U:óI‚bÕEs¶ {¿žÇód­C­wEâC”zþzüåPýþcóÏïáîØxõg˜6ëgì7-æGõ!þhLnö˜$t™ AR{‚_Uæ9G¦Z ©ªÜ$30[·µúŒ%è¯úS!^ g¨5Ùdº.Þ©8•‰ÝØ]aüi%TÛQõá΋\†þW±@µ>CT4Ïé§³Ž W¦ž—ƒÿhkv·üéèëêÉŸª¼KÔp¤²ÆP™™•#ŽC€[zúï.wo€rT¤€ý¨‰:å­Ÿœ·==¾ú±BW¼H˜”êp ©-?ë2þè7r¹:tƒé2,23¦É `ÜANÿqˆþ%ѱ#vGµ}èyFšÙ©Ñ¾‘™2ì+HBê?Z¥e-â&VÇož0Ÿ­Þ‘ÙE=üq‹ÿÊüÁÔøÎ3óN‰¡†è° R/‚”ÅjTÍCk jүĮåÞ«×fÐë´v^ý¨„è±#³Ü úItóÇS/¬oªØ£6RÄ YL¾ E-‡sבY¯¡V’˜|ƒ,ŽÓW.;3 ö­ê!;P­q‰'=³^PÔŽÔŠµ²ZB !cØ/i×çU§úª3_çø3§Ân< ñS"±µëš·h f×°{îÁúÝ"V]…/òÀêÅ¡–­uŸÉņÈìîð™rAn$ß/¨Gq¸Zg÷ýšC|î÷ZÄx¤§"[’x”“Øû'ZŒV<¤UÆÒ·»€Îˆ½ÌŒoŠÏÚÅ™ùäí_†ÿ¸HPbÁ ¬¶€¯þ€ÕN‚i…u˜ŽH×NtäØB®`añçcU7e…¯溤ïeÞ«/ âÙd)Ñg$—1@¿Ö5™“ê‡Z¸œÃ\” »[Õ~ê?já…¯…ñ±E/²’øžbüFKc¿~‰Î†ðFqàÏç¡õ‘ŽŽf<ªûÓ¾6ùÇ.ò-øÐ“ÜK"Lÿö7àW_øx„ÿh ×/ã?Üð=ó¨QyÏ]κJž0 «¼”ž^œãVðJw¨¨yÀÄ‘YÆØð«Fô/«;¨Õ|ÿ1df·¬@ýy7úIÕƒSYj¦&/+ý¥f[]@îNYi¨?÷ÄSG=v„¼¡¼Gïç¼"UÕZF2æ\Ï‚æIý’èê¢*þ£<þ£7¼ü[Žxýw¯²g?þJÇw\µMðçîÆM½d¨ùƒÏ”}"l[c²û7†Ž>¾¬ßÑ’®%¬øè¯&P+š•–šu© ©lî5‹à?¾q×—»Úˆ’ü®Ó&.þ,÷€8,Ãê#g›E.ôÎgÒ Õ#Ë8êÒŽƒÌʈÿ˜hüî(Èœõv(»±þðç#ˆlšÃŸ_tñ¿÷"‘:í‡þWÏ5z˜;7²{ ¿Rð•D œœîŸè¥yk^êkå×òCJ Ö ÿñ3[E?'¢Š#ð*¶¾²|'²D‹ÿ¸ó–Zqlê6Y?‰úóîÌ£Œ¥ùÈúU–Úø–F‘œ_…ÙŠÅÄl¬Çu®\[,WcðáyŸÕ3⡨j¯)æü¸…Ÿ¼~®]¿c3“Ûzä$¾­:²„b LC£õQA߆ʈªÅå©òH•1èòùì„Î=ø¹tx‹DËý@±£kÙ‡%]Ãw\õÓÚ·Ÿìêû·Ojeõ[p:¨uµ+áí©®¥©ðÎŒ­·ðFÛÈoN±ïüÆaž§XÄýùÔÏßÿ8ÌçsÊ.5‘^aŒ~…ÕÒba;à)k wêAç¤âFú&>Î`Ï“,Ò›Ëáòç7éõF~Å÷г h»¬A®uýî%ºYöÂüÿ(@4ÜŸýæ¨ï“ÆÍG½fc|y@9¡e¿*H¼;ƒsîì?F±ÛþdˆÓ¡Å:…E9ªÿ±Ž;`|Ð}zÃça–ôÐzÊþðÿ¥°‘;¨ôÆOna¯Ûѳf¡þc#ÈcšÏŒ*T4l%—C?ƒNkÕyÞF ®tˆ¦þ¯…c ½Ü´~ëÐhí6p÷‚‹Ã1.ÃJ?ï±VJ[uJŒ?™3éJ§ÆG°)ãŒ.6.¢îõ\ǹç@" ãß:rï½6¶c嶃µ´Vá?â9Ê;6£¼*BýÇk2×”ø÷ðÿ{ðËõÜ¢{¨õ‰¡T0}ëìÄ9Ÿ?½›îMuÍ x‡ëô©*l]¤3ÈBø”?̯ d‹ðÊ}AÛ^1Å7WSEÛ¹^Gò¦ð€sÈ?\©LODT9çËèLUo6‘þ%·Ìt­Z‰~· )±ÐÑø g;F”TßH¦t^‘†ê5-1þïÏÁoæ<݃H/žQ •TutL“Í: M3ȹ¢8âÑ¿ý4™R4ª/Þ™­c¾Ê.b›œL=îÜ_ â#‘íV#ÿül¬– ™Š…Zö³ÔÅg¶žÀÏ<¦B%™u‘)»`W¨ž¤ÿn!ôW*Ï_ÐcwràkNÿ±Gý$äZæ™([È?Í‚ŽŒŽ™Ôôl3;1“ª´ÕÈáþ*•ƒ½ŒžŽ’Ô™4嚿湻/Osg—¥â¥”ôrñ¿÷"™:S É•¿*‰Õ>f¿¶‹tW‡þª‘hH¯Ü¢œmôWë¨þðÖ.€iÿ¥å.+ïP@æ$ÿxu?-b1S¤‰E^u¥ £E*-b-ÒoØÿ‘Q_/«aGg’´’3ÔÚQžñwò‹ìHõsýHâWqñyˆ¶6Q©Öž,öøÕ&¬—¯ØÆéKš‹Ú3¾ZUÄô·ð“×Ï´Ë¢+64>˜É1ø„"ØÐßÈbÖR;HÍ] «bùTXð~2âšÉ/ÊEyZ~“%xšk§@ž¶`¥'’+Ùù‡«ñ.XÛ°  @ˆ*éÇ"äÏŸiMáÇë’#ŸŸ(ƹKoñª8þ㫯 OºBd}ì(}§¢¨/r¤ÞÊ>5ù95Ìþ2ÿþÄå[ᕟËõ3ʯˆ©Ü9·G8»öó>-Òçpóóô/ñ“ÉÙÇ}vG7(žçÚð7õ„Xÿ×ô/ùŒí™ jë âácQ9WŠþ÷ ^Rniyå7úïεHf\ ÷ëÍ9aÏ«¹îåî©€5ž Dk»“ëìFþ1tB<ü[ýàam8±Icªé®¢·Í‹ÏlÉo¦$QÍ$ô™šOý¹ ºS*¸b#ê^òð³îx#/œL௽~Ö4üí½ùÇ>0¬±äXYË®‘œÌ¤ÓQðã¬ÆSªñ®‘QdÆ¥¥§ÇiØûFä{ÏÕ=Nûg¯˜Š{n>ÑN*¸ûéD¯ô›äñe1±YC­Ìt wu,Ɗ梋î9£&hÎòÕð3»É¤Rˆ.¡Ö‹%'¢|»ÃUíIƶM¿gÀþõf~m*ó ÜtúB½}ÚM—ß°*sø™Ç bgñxsŒ™?ÔvUJªÝÈÃç4%+Ë‹ö°?x9¬GYøîäAL¡JêØ ŽSùõ­ä4=é‡RU‚ÝÒG:/r æ×¦å»Ï@_kø îb£] kÀ „IÿˆÿpãÿApôPŒŠ.8€ n# Óð€’èwg:÷5ùG"b<»?óSãõ¥™Á^ýï(r…ÓæHüQ0°³¨Œ§›EÐô@••Ó,ÿ¸Å]ÿ@Î5íôûU¸®çAž¥íz{òDŽüø%ð¬ôOìïØÉõ«g¸ÂL%ÿØhÚS‘ý¥»¨Žï¬-O9øß{‘MOú÷÷{¨¤Q#B4¾ÿnØÏ*´bP^—úÁ(šÝ©i—’Q›¯Ñ.hžªö‹úÝSÔsu¥ .¹…8ù&Ï÷¼7eùA$Y´Î]‡ÝIx_÷Ö°\T}áÍ×3Ëžà™é´µr Jlbà‚zÑ,R+&£þ<A¦ðë×¼Ä~úÚ0Ó 4€("?¨Q \&[Gªû3æGÕ½ÇòíG•+ËY‰U½K~ã€ep¥ó†J°‘2K„;êYyY 4¿ï±wWˆM˜¨NÖp˜Ì¸}ú^±þüѼBeÝO‹ÁŠà~g‰ìÛÜÂCÌ!o/ÆÚeA b`Ww’'ýiÀºÏDáŸvP{®œS]xÿO\[é\µ{>–±³#`P@I³¯?É™Nè7ˆ®–€8ÔG¿¶;¡}…)I˜úiÀ\‚›¸²V žÜžçåÀo Ù[xcûÙQmvà§}a®ÀŒ ·ÿÕ-ø¶ÜòøÕ|Äõ&‡ÿèžî‹ï,HD|•ìd»ñüc ǽ<},žð ùvØú­¿ìÌY+ ƒ}lê{Ø‚—]Å4¨YØ@I~Pþö€Qÿ™—ÉUƒ@`nÈ¹Âæ–ˆEä: ´”•±Kýõ|XÙØ’¹L(šd}aõtx¥éDÛå™ç Ûßþc$õç'B]éx¢ÔSâð‚ aõ8ÂGðç›P«º˜Í@sÑ·žc¹L)°±×(Œ3ñ{¯‚½×qâ‘WZèúSNf­‡\µð ©&ÙGþÑÍÜad%ÿ˜—§ƒOqGåõ’§V´+¹Çà e>3>B”€-•Zê<ÛÍïäÑ%w‡ç½OÖZ_pæz;YWbcÞàO²ÎÙüŽ;þ#ìüÚ#ܽñuÈ'–¢v>C¶³´…~³±˜k½l<üy)³:1yur¹bØæ¾x¨sFn48Üë¡þ%1Ñ̆)=F ßø+úZ<„AíĪݦ˜ñ©J~H†T¯4{RŠŸžå·ûÕ8z?õJ¨SˆÞøí ð«‚x›vz7øómØ÷˜f{¦wÇsXŽ2øo*ä{˜þ¬– 5Òz±x,Ò¿iíB­§É ÁùÇc­¿Óñø:þcµ~ëè@ø§ ]/éè…Rw½hýÐ(üŽjø.øÕ#zVÍ2:üP?xI)«þNýù®cmеTÌÊe~2»R Ѥn*|ü-æŸçp̤o{z—´¢‚´ÙÞ71øUq2 ]ã<5™ªŒ<48ªœy¤`6~Ø´>XȈºÂŸ?¶<©Ö0_á+.2¥=…5Ï| ¶oº„]4¥kRJ3W9+âc•\¹ãžy¸çšš±yác61§÷ ³]öaó[ÂïÑC²›5˜j;ðçu¸»í™ ~r–(À™ŒQ%ó6‘yÏä>.™U1Ë`?âP{ØÉj`ÅuøÑ?Ñ`~Tð«(°+EÐï¾$ó‡?ï­·…A«#÷8øß{a÷o_æ¼”Ôªt~õk»øª‚?@ÿ]{þ Ýw§R”êós𝶛òkõçÇ”çLàIAþ!ðÉWEjqBmIŸ1êÏ?3 $Q„‘sèÝwÑʇåa¦×ê ä0üGtm›¢?¯ƒ-+Iý® ÇVLŒÄrú`ýZcC;xB/‹=¬|Œ¡8öê-3oêGªþ\Š7¢>5:¸òI²š¼Ø×ZX'wüG?T(L¸ÀÇE#¶LoôÐGõ÷¯Þ*7¥‡ŒV~{w «¼• k*6z«Þ|è5i}o§áO*ê—#į®ƒû=†Wh~åÇ™ÏÔœbXŠ<<¥. Û±Š'@›ò'ÈÌèÂå§pn+×á?jÏmÁ3^d¥äXÕ†¬P‹¼~•Ëõx‚5üüïz¼a<¹¢ßߺƒØÇýþ‰/ˆýŠÛÏ7>lQ@+rÌëÁüù^1Q<5Æc§ò1?ÊF†²;_Σ[¸øÕQÅ[Ë!V[DŽ6§3Ww4v¦¨ß}Ì|Ô·‹`îÓé Ö¯<‚áúvá÷7ýÕYm$µ©íÐKÝ€3ÉnËZM6s„ù´.Ô~킈o¾5jÑ¿Äöôì 5C`ç½Á¯êÈÐêXEIMþ‘‹ßœÖÀŠÂ͇K‰ ¢4¤höuuwŒêæGŽ;×:¸“´*9Þ‰0óϳê5a´2ÁÍB±ì©ß¢~ÐËüþ¼)ñmjøóèw¢0hÒÿ±®{õâöœÍŒaº5¨ÜQ¹û¯SáØÂ˜®³-ÓªxÌ­BþqÆüf 7§âíž²Þ|£‰ÑüJ!)\ú~ÕL)¤Ú“Ç£ThŒ~7™|$óÒãkœBO¦bŒ@kûÙL€*i±U›|Ä“<"©¹Ó _‘Xd,“>ÀùpHõž–’kð’#®b6cR*Y#'ýJzÂÈÔÆ¼¤v|ùÇg8ëÖ1ó-^J3íŽYÉ?žê­evæ]_p´rOáÉjHìpÞ!·ÞÃŒëÈ@¿Dw«8¹®SÒ‚Ž‘Þt ŽŸ›Åü£T>–$ÿ¸N¥Y¬£f:Ð÷õš«ñ¥J4rôz›¾Lî7óPíAŸ/fœ»àãjX±§/­‚p,µ¦ŽX(¼*¢ìò!ʺ%ïÝÍ'ÊÉ&~_ð_üœ‘ìcšóÌÜSr«E¤?ÛÜ;Åþ%µ† ÏOT[ÝwH) ~µÿq›™^´!kŸT^h½ej*Ò‚¤«¾WdÕ.êqIfQ‰H]´|Î]‡üÕÏ_uÑ ¡÷YGýùt>>ŠŽô¿Ê€‡êÏLº“t5É¡WŠdÿ«¨Ì6)(º`IŸpÿÔÁzþ~ÕŒm#å2±pjpø»rªì#–ÿ|CΟ|%ÿ(Ém€qØ–8«á=´»c\äÎx€·,úÝ/tþk++DxÌAÊNô»ñÉ‚kúúas’a ·b•[ º Ò“nøéÄöeôkšK+^ÑRsL•ØÉa¢ÌXͼx‘OØÒ¼T6^æëMd^è@}*ÛÏÐÃä Ñu°ŸIx£"ä+]ˆóWñ½à;õŒªp#vuúZ<ÈM²±‘xãÌ2V¸ùÇKQ±Yöß6æw‡ÀEÕ‡{òCó|Hß~‹ÒŒüc8<ö8ÖJHW}GºNþqXÙ§Yò)¸øtâì,\‹nÁÚâ‚p õ° ÛQÿ¦ÁºÏÿB¶¯· }ÃlÛÿ‰õ‰ózþõb“6@öâ¬U Ÿ8†ÖàGºìÆ ¿4èœv‚g*Lÿ’ÝàWÏáT6ÃÔï…ŸÎBO„‘a®K\¡rM‘©mEvØXº9_ô¶ˆnÓáÖS×}i~/©XIV)ÈŽ‘[Ô&Êy©n µ¢CÔc?‰Or€© "f9kÌÃ&-¡¿J𦬎ôôoß›þ»È Sà·n¹)LÕ“ˆßC­÷RL&ƒ¾JfÚ ù}úicݯll.! W—eÎÓdø”ÝX竨Ú½¨?¿‹?4©¡_ uçz •bj]âœy N•A¹êÑ{ú©±…>ëŸQ[3GÁ3 üª'™Èº?·¾ ˜=jm£Ö„9 xàÍô¿ÚÌ]>þ<Q T. "ΚÄ" CîÒ›¦£ Uˆè5Òž¼c-Yƒi°®Àa|6'[1ðGéÍ.èÂOñÔ¹Ýý¡âú_9ðxêçRQîonv¸£u®J\à §iDeÊaôWIÑ4úÑ)¥Ù«§ùæñ¼ôÆ“õƒÿÈ#Ï8øß{‘ ]F3ôQIN¥øöï½ò§šžiµ]™jiu¸¼”Ú@ú—‡?7~™ÿ¸‚~7˜õW™œiÖ¯47µœzHÌ&ˆ)“ˆ¦¿XÿÑR‹Z²F~ ÙÁGQRž„íŸ.[ÑÓ}ƒL;ZUÔsÞÁÿt’©¥è_ÒÛq‰˜–N6DŽÀ%¼‹PmÅŠ}¡Ò놜$Fªâ3í¦¨‰U{œ}ìÁ+'7Lìë¾êNV ýÕz8´ˆÿñPñ@c cå¯è©‰¢û𑎽þÁ½YÎâ!–#ÙQ_VÏ®ÖbFpÌûð§É›`¡½ƒø”Äø&¹Gq8ß¼Ê>¼Þ u:?’']ÙÔ¯?9}AÊIõ…,‚­Úqÿ‘†uëƒV¹Ó·"«iØ3kWñ\®Ä“.džwÕKÈ7Zxó£ža È ö·½àh†bÉ›àé`Çè$&ªŠÓØÚ¾ð¾Ãñé=ÉÒ¡V±ðW^áø}Êq-…|ˆ…_nÛ¸?ÈÓ\oÒ€ÈuO}"º5-a²ñ«ìqùá;·þÓœ­¡úõ7žìR0ÓABŽa@¼¬<5ØõRìiJó6Ñ}9s›ñ›¡ƒ.‚XÁoØýK…¹. ˜µ˜t£4,Éxþ›ï6™ê¶ÔcLÇÚMÂ̶Þà?ª˜wÑ-Çg=B/¶“ÝWáx¦ÿn îà…ø àWÃÐ_]ÔÀÃÉÎDÇAVL:ˆ—q¬ÃÔ¤Šã*Ñ;uCð+‰ÉW7• £¿º!ÆSþŒÈbï8A÷F6›Ù²ƒáßo  Ë~åË4¥óôÑ "ï *ØêóSxC‡¹Èpû!ÿè TÇ(\»k/¹yìù¿Q™‘ŒÊ¾QTW\£Šý J:þtܯ‹jõe~mVäµlϪ‰SW¼-°¡_á>ÎÀ¡•Âvu‡…?‹…Ëw]Œò6bÒVÆ‹p‡•§òþ0Os ž¿‘àT8æ#|´%ýÌw7±Ã‘X³ú-"µö­JÚ.x]Ü­™‰·+ãg jmj¤%>¢HÚAýùMtXèIs—,tFʵê‚2÷°‘–JŸaÎaA{µŒo=ìÆv£/øÞ˜ç<ÄǓ̅p­ÌIÖGã½Ñ ¶{‚‘ÔM¥§àm4hµÉ‹ß«ÛB­˜ýÕ\Ù =9Â0Þ{°W~¨~Ë7¥¡¡°c=ùBs°1bñ”Xçw¼óaÃã.&ÿðóè•pF¥7Ã:ý¶ |t [J:*´4ïQ7ÕjC½ßêI¡‹O_Æf%óþ£8ú«–d[yÐñ–Ë ¿ú å&vzOÔÒÊ\¨ï—é ½‚þ'µáχo]fúQ²›?·—Í bŸ`¤æRÿAÇ.˜Ç’r²óü R¼E*0W´ŒÔ1£;ê2O¤%}¾îšëÈDÚXÙÁ¯b[3Ì~Xû,tG. ~e×”MhCŒR?Ø ]©B„²‡Ú´uz-¹žùµùK銹‹.îx¥*ôß}†¦ºõ]5éÿ5†êäy>2´%Ÿk'O8Ïà¿÷"Šú‡:Úyf(IÕ/ÿ᛿¿JAµ`uüÇ7µ>kžUJjk´›T Ÿ§«Öö_Z÷Œâ¯õ•*¥dcÝ!Ë€X­QSÑ¿¨™ŒŽÿÈø‹øUQ-jÑ•`•‹°Õ©?¨æÖ®ËQØ”K²¹I'ÑÈyþi«IÔ\jÑíñ¥+V®“q”;3PlÁ´ûÈÆâI&7ß/û§…þçgw5QDù+ëmEÁk÷¨ªK6{’µúñÝøF"E¿DÍcÄõÏ”eàW.âšžŽ}ua¥ôð§PJu™VÈv²Þ0lxýJ„STöiÁl›cKw‚§å²³X–QD#Þè0™‚ÇÒØ CðUIÙ¿ÅâßOÂe“j῞aài‹à?:`Û÷èMYiþ£§ñ¿bמÄ[ýÉ»ö… x«Ýý¾ÄŸ ˜º*ŸÃ¼Ü#¿8¯)^”¾Pù°ðUèO‹j†àl£aoFã±¢£ºNþ^ÿ«ÍÊYð«;dgÓéÏۓܧ»IUŸŠOj ÷àMü½ƒëÃ,pî¢qäMÈâ–׆­ÿØLÿ’Ñøµ<¨m÷ƒ¡yâÛVÀmÃÂg£Kß° ë\EêüK\tv#P\¯%ÉÅLšÅaîE;ÿ°UzmQù®áw‘¥Î‚ëNl®2FÑgjùGú—¼bš_ŒF ÖÔÌ}ì¶üÏdýêjÅD¢5¶êŠ0»K`ã˜îËdŽýt}ŠNýùbüÇW+—ÃËüjT¥Ã”/Þ-)ù‘/˜ÒBãXjÚýãt•ì6•Æl㫹cÿú’iDcnírl¨OpýÇøó×pÝ-ÈjÐßÑV7§2×üÐÛm)ý¯Úƒ¬1•s>…Êj?Y‚è͉éëÀ—Ï£ïH|*½Ç<øôîTŒw°âS?8Œl+…éA67œœk†ó^qSïk @ô®cï[šèŸØ\,?óCŠY^6ÊF…ß 8ù/t…ŸM—Ç[¦ŽþÊÍÀä› îÁ¼r¯óüÝQNˆt U¸CèX Û˜Þ|O•³TŠ'¡OäoÖ#¬~ 8yÝZ@«V%&âf3&±NîÂ6(A¿8ó{ê¡çÙ÷ý2êÏ—áâ8Ü©¬w§ûîxP»ÑŽÝŽD0èy¬F.ò£Ös§ù†æõƒCˆlZä}çÿ{/’«+Qð~?SÍF§ªï_ýÚçWÊrøó[èw[‰jV9©ÔczízbW“¨;~i¹CŠþãµ}Ἧˆ2Ì\®&”odY)eôWE~iŸ´´¨Ž2w$'ìöµ vNŽcRàN™ÎÂ5’óÏ£SŸ˜Œa4rð’}0†›XÕþ|+9IСRèê¦ÊÆ"äþùÁûhqeC²–·dAÃ2€¾ÔǦδ+ŒÑ}5º ƒè+ëËtó9eÙ¾½­ç&êíC4ŸÌÎîÍ8œýËXKÍËïØð”ú-¤ëPø;œ¡EÁjUÃÊ{]eÁ[”ÂFûódÇF½…§pǃ×3;Àµn3Õ9¡šø'»ôTþ â?%ùÇòö˜Ù‰5ÊãS~©‹å?ÃY´çl­)Áš]ÞÓÂv·µ÷z …E ¼I…ånÎ×)° Eè°”— '=|@a²Ÿ%F:½‹ ÁþÚkr ‹µŽ f5¿3ÿÁtPü7ä]ñGýͳæ,ë l‹=o«åFÛ´—Õš ¿Z~µ+ÔUqý8ËOà{²âc]ñ—çЇÉfUæùEuܲ;ê™×`h¦’5”DS0•Þ-Sxÿ#Ä#éÂ̯}Fþñ-⢩QÆPý ÙÌ*j#×°ÃSÖtª#NšþV s‡±ŽNÀ®jƒ`¿Zb|ÃGO•΋rŒùƒ½É#Gam»p¬ùì;lsz£×¢e!Þ/˜‚û‚΄Qôú®|e­–É4¼µŒ:Fv}¦s½zêKí yüqî¶æ.º¨öÕWÑM묕ךf–4«X¾0>{`©ѱ=µVÓae>3gú5ê9zÒË|r…óü-Q®Š$DŽ6+8Õ¸/Ë¡¨í˜FøÆTÂÇÀo´¤b&?Ý¿*c%p”¢cMV³0º¾Ç¨kJØ+éçôÕ¨ÄÅ«‰—fñœ Ý,8ŽÅfvÓ\­ JCŽÔŸg¶v ß-d×ÓÀ¼ Êz'/Ã4 ¨.=Güï½H¨ÎVC2³ÏJœŸ²Ÿíé ù‡ ~UD4W©õ³ë+¡ßݪí¤ÿ®¡hP??Gþñ»|…÷¸/ ê E\1XmNÍu[¾¥o|-§óz†úß|ÑNcjž¾‚^ðóÆ¿r‡??'‡êËå*ü‡AFn÷ìŠø_tµŒš^4Ç1Qƒä´^ht0þãѢৼ‹§œLþ1"âå˜ tYÔ%:~K¦°– ëWƒ{i ùGOP¨ÇÁlÛKyK6‘i"ÜáUòmTÄÛŽg€w`]xÞwaaÛbž2QdQKÎC&}¯‘ÚÎM+HŽQš'Åœ*»JU×`â³£,~Ë>Ý8æÃz|hj=¯‰T?­@}ª¬U=e° ¹X{zö¢¿êU\Kgà+Xëqp½oÈ;f±_wÖœOþQUO)_„›¼Tr¢¿z«½ÿàƒ§¬Ã‡g* Ån1D¼ ‚mÊÖŠ³`#a)ñ_å pû·ŸT.j.ÒF÷&€»ëø¸±œ}»²w¬ö}lí ™™XykúaÛÖ³ë©ä5 `š†‹ÌgýoìÝPðÍjðÃ9[6¾>™ñáfZ[Í4ð ¹ÁÅ·¸¼E×Ð‡Šµ)ä?ùqç0W:…ˆŽç^Ø ;9LÎOwG½ôœ~–z³Ý¬èøŽÌd5#ŒÔd OÈ}Và“ÓsnN„™_›BôáÊ=‰+ÈûÖA¿{ŽŒá˜9nT™ËÅñ†zç¬UÖF¾Ÿ¼u4ïµÿawµL¦ÿUl9…\ùª pî aGaZ1*'ó?Fcá/0ñÏTh%þã(×¥5>ä4ý(—â?†«ä+ç lNýù@rµ¾XÛÚd|Yä]ôWçÐï~¡Úc u ã,olüu¦4õF]ìk¥³\Á™º€®¥ÆCeídzwçz%Ô@--áK<~!ó(ÕÈ+‰Òj’d¢£üJæ>†ÿ˜„?R­æe˜šT>¹ÈD_q½½õn2Ûõƒ¦ê#’rϹòT<6Þ£¦ªÉŒ¨^ô+©GÕ`¸V¬ùÿ1žÅþ#YÈøBÖX–pO ÓPc)/ÁšI&ßM®4“Q-8Œ¿]cÆBWœÅJæØåð°¢Äg´„©o”ýæ+´Š—¥•S9â‚r«óˆÿ½Éñ!õŸ™þ³îíé5õi´GZ ÑQ<¢×ˆ=¿¶‚6GÛ«íÓN« 1ÿ8§¼ÕºÀv¾—þDónBCUF}(|éŸC&~q~Tü‡J¯öì Eƒ˜ÒÝC®R“kä(z*ºÉl`<ÕEÅ0ÏløG,Õ"ªÝ½Ô¾Ö°o>ð «A:îŠíä 7ð)ïdmýN=1?ü%B}÷&ýKªaÍŸc×7’wD1N‚Ǹ³O?¼Ê;z…€úD„ÒA&Œp‡þÌÿØ+“b›}Aö¢îCç“id ÓÅ;(¥VÓMk"Þª¸î©EÔ-s­–=ÕåiÙ«{’ÉLÇ —aO¹a \`-vcÏÃ¥¼âçũ𼠒þTþüêüùMüÃ8ì|.¼vkx…ÄO>på“È¿€»Ù ëø—娩îzVùD ¯²ö¹’ެ?@O`\À]ÄŸÛ\|²ÂÔÆUjú† …º‚öØÁœÏöxªè¨UT0ŒsáäÊy-—|Kÿ’I¨Y52·ž(x‡aÿç ¿ Ðé5(ó‡ÀŽÖ‚ÒÄá_£OâwZ€æu×ÿÖÿê”6OŽä]Kà?FÉÄâ¬Í‡_H€^j2’aísŸo0ªw©—‹ÿXæMoù7þ¼€p÷­C£¶ ­æ\c$êîéðç·àçݨZw1•(Üà!{NƒOzÿXOdZ%À…0øUN:(,„»³ëêú³âNý §}æ£$›¡mMØ 6«ÀÚ÷9‹‰ðmø*Ø7îý¢Â®ùç"'ã?‰v:ñ޳Àu›+0áä–4+ø•¨ýAc•ŽPEWåjŸ'£qCá;‹úó\CqUqއ‚8µ1‹&÷Éܨ~Ga““1ï· §ÍœÔ{O·ìê”ôOLVÙŽ\&.ú«òà êók3ëw3€B.ÑËšÕÑ[¯ƒ…k…~+ ý¯¶šé·>‡>SŸ­—x“WÖ*ó¹YÎ'¾\Eí‹M/øÃDÈ/Ê{‘œ|²Ä%#¡¬¡÷43Òqý,]wãYé£f?S¸žâ{«°rQ:Ãd@#*Š£7jÈü¨}̯ÕÀ¢l=ß~5fSGfÏOÅgöcËcÕul!Lá¨jµ1š;J1i·¹Ý]42>ø6úp´gmþ+õ¹@¯8ï„wJ†Ÿ>ý!÷Jø¯^*™_û ýn7ú5eÍóJWzï¦'Ö49îáÿÙO¾ë§$sd*r† YI_ÏüÁõj+øó@ð+þ<£s×?Y"Ô·j•¨d_‡Rw3V!–l(;¨´`Ôgè÷Q‚x½‚È©%ýó‰ñÄÐWÀ\ꑳ7&Þª­ßç°¦ç±S*–ìø“àCí!ü/¤x'šûsx$¢xî±j<¡«P(õâ)Ša‚ ¢&°¢ü™26då@å>ù‡BýÇgVÚŽ}ˆJv"yÂFžìòʼnÑϼ•ãy¯ú-NǼC«Š~·5–ð2?üGBž»þ<=›Tc%(“7w½ðçGÅvUÄû)~…žŠ ½Fä;´.)¿ß‹ÜfVñÖzQT^Êh߃÷ÛÊY褗—ïµ°ÕyöñÞTÒƒé´M>D`Àëá?²°|B̯A\aIûá›z’Äѯ‘LD±r¾¾¿:§\ÐrȨxØ9Ô1Kà •^î” Nˆ@7ê½üÎPÿàÖ–”s¸<ª Îõ’ªÑD^Žà÷j]s¦~VÌ¡/|^êÅ€_-‡7:j­ÁÊ¿€ÿX†zê¹MêÙK“kYæ&ⓎLÍîë<“•7"3ÙGð°÷tŠO«¢‘§®/=k¸QKRŠÜf#šiTcö²JÃN%1íêÝ«` _e3*YCæ×6R-•;xqQ ýKR9ÒÒ¿dŒùŽ\«œU“iô'šã&óÚë51¨Ç¬‹GzÎùý.Óy`¹òȃÎ#þ÷^¤Sg¨SœgæýKBúüÚ.Þ‚_EÅ´#ðXsýÛw€^ig©*ÙôKËG]3G惋~)[Sñ“”¯“]~ ÿUG”Ò²9w™…ëhÕáÏ—Ã¥¬Çz%—Í™ð–88ÿÄ27#šh!ÊEjŨj>µ°‹ÿðÇO4Ã^u$¢o +w q;u™ª’ÔŸw "±µ{ÚÑoa€!#FÍL|^‘hd.Oã@lá,Ù7ê?¨£Œî­xÓ­468Î7xä Ä&+è5­gJSð«º`/Ar ¼Miý¨–$‚cÞ ÆOÚùÇ>áþfR#V»\JB,龯Y¯W…lT™ø§œ/*[TS/Fü¾\ŸLüì‚EïÆ9ܤ׷š¥O [Ò¯s.vƒ^pf—áU`ÚdxÊÄcJR‘@K_£ ìî4O‘]ç›h§©ÉX(^ÂN$—˜„÷† ¯þ^Î ·~p“rZK.cÒ¥u*ù‚Ê5ÁÞúãí*‚î…AJ‹õ¿ÎŠg¸"ɈÁ—°»Ñ| ×ç2[àa˜+}P›E”Ù Åîi¢b»~°31BÐùçÄÛnôo?fF%®¯ þ~˜*•O0/¶g8FDžþ|x˜ë’_ü=÷œÆP¤ä½3`È¥9‘þí‹Ñ ½"§±ýGnüÓ ò…°ëþDøCŒn¨æžªgB­˜Y ãZ¾Ô3â'£^…~wUn›©nlJ\ŸŽiEñ'ŒßY=µ¼ÜÿV,þî©:aæG½†ÿ°Y£×zbáº?ó£¶2õ(Þá!þ¨ zåÄŽ¾Tz ²q–rµ_¢èºa`¿'àÏ2ÿ£Yä ÖûŒœôoïNדþLgšHO”Øio”­™Ð_UG¿æËÜØ¬¼SgÐ°Ìø‘XÓdú癬¾Ñ⢠£ã=ý‘ ש®¤Þ£=½®*2Wý½µƒšñ·äËÍ  lá§©,ÿÄx×öõgæœ93ƒ»»»‡RÜŠ»»K)V¼8ÅÝÝÝ-@pw·à ÁíûMúç ô{î½ðÜKRÈyÏœ™Ù²ÖÚ{ƒ¹þã9üyveßÕ. ›g­$QÉõV&dÕ(N ú•¬Ak»pøótè±n ‹l7å¿Åäöô* 8mAt€ƒ±Ÿ<ø•s¹ÞüÝ<ùsÐ_m²Ò ~›ÿñ.‘Õá?R9QôF!ÿ¨­Š;‰À%7y‹½8"јõÁ›üOôWq©þïy²j©ÿµþêìhLã2þ£—p¦Ë¬ ¨??n¼4N1“nç~~ÏçP÷—ˆM¦×ÁÔP\%4þ¢O¥F/þt2½Èf$öìú{Ö£^{µBþÌ[¼ÜÌ&[Ê:Ôl—ƒLiFàYhköå¿kÅ0zY=•è nãKô\€¨¡ öªÊÕƒÜýC¬Ÿ ¬=Œ¹\ ¿ck·Œç¢*‘vxìàžˆÔ’Õf¥… 9­Á ¨daa¨„i* †ºC_mýKb€ ½ÁÞ¹¨ûxãÙÄò xk“d–}”#A´Êà?BSk/6€r¸“,NÂfa¥<¼OÍBô”€iÖÿ ^3—:ƒÿˆn6Þ7û·Ñ–êe:Ð ·þÇ|% yH3,q^öÕ®´6jóx äÈ@fàg 3ÿãkùÇÍweLT–·ðo‡±õð X7ñ¯%g‹›x®œŸÛãw64 ¬å9íä—·e‡vƒbµ`Hññq­ñ8£Ð%×Rõ`è÷àÓs‚_ÍfößC*ApŸçò÷íACWÐ/Ô7Ä’«Œ‘²k'¾žE${…Lp9ìÊüG$”ýËloËVžÿ±Žâ™›Onƒ‚èùfß hûß ‡¥×pfV¨‹ŸÅ*ýŸÿˆdA¿;ÃÂüMôO<_á Ê”¿gÁ‡[¨ÒÞ [´DN÷)¨YAðº†jŠÛåð燩?¯NÅtfæ”u†‚…•$·¹Læ¦â=WDíâÊ+„˜_ëKDåfã:õ=ð®WÕy:Ķ¥âsõ ž¢°}ݺIUÅøs˾ˆÏjKÞãKÿ®; nKÔÈĵ׊èÌÈä1'éL0EÕ“;eE¼N?êÏ[YÕÁ±Ù—™¬tžŒ¤ƒUÔÚ Æó3+wÆg´Náïûâƒ{.·.ó?¬ÈsÞËJÖ%sƒè ~Õ†~‰£˜užÆêC±Õ>~W]D—Ón ó“Žl1¼µ…ûÝI“õ—·µ{"-V»*ÏÜåòª¥-ÖºM™¼`Vуµd~ÔzòV úº×„*le§KÍE²H?Ù‚ˆP÷<…‡ôâ£Üln!?ZC—»y a qô‹ÁÄÚ]T²§q¼Á¯ò:Eí­j “–l©1üÇKrõ;ò ‘Ó 8¶A28Ï¥ÿÇ¿HB÷ÄÀYÏ´l_dâß»…·Ú,òæöGR…§uŸVîã¨!¨Ï•?ÈlÔl1 ¶"ùGWúT? ÐI›t?K/“ŠFè\@з0ê€Þ/…°wK˜©=RÒKdpm†(J{ÂþtЯ#PÿQ@ Ãþ2A~áG÷`ýüÄ~büX¿ŸÈÞ1ÿcˆøÍòu# åÉàJ[áß?¤“Ô1lèÖ‰Nü\¼é-YRºÂø”¶_î¦K`JÓFÕs¿èÅuÁ­„e¨ªGüèZÑdÒçCõkŒX…ÚØÒ£p;y‰Šâ'4ÞÑ’ â¯ÈºâYÃëžÃÂF3ü z\A¾¾Iÿ݇¨Už²›aøœLø.dpS@Ü#ÁZüÉ–a'·óç)Î`ªYDFÚœÀå.0¿ö©4ˆŒ¯ƒ$¸•’nýyBª:ãªLZ ÞÁ6 B‰Ô‹7¬:U9Vó•çÍ \müGr)ñŠ“ˆ ¼a#ÔSmÈzc]/ƒ#þŽ/¹Äß^ÃkFR39‰3äLÃÁrvâ?Bîp‘1Bvã„‹¨3ÄìY©g¯`®ÂGlFß‹Î;l+-þ£0}-6£EJ¾r&û,5µèßÞ'ijOHüã*z„mă¬TƒÉgÓ‰1œµ˜ùç«©q°§:|H%4³ùĬp§”¨ã=…±+ØŠqENâÑDFø¦xÈ‹L?—‡zºñv:hdw¦…WÄŽ}ÀņûyMö³¼>¶¢c°õžÃ§¸ú«GfoüÇZó©:NþÑ”¼Sì0Ç©±[f= ¯I|ûD€æ«)ç©[ÏUq<è‰ êÓËø&<ùÃÉê ÍÊ&ÉŽt}ŸË,ð:èw'SOò’)†¨ÓëK”þ€>ì¹É”já{ódsUF3°T}ý©‘’<ë19}M m†è†'ïK¿’2èw³ÀWÄuöÁ†hŽIíùmû®•ÌîŽò,9~Ú„Wùdv–äÏõÎמˆøXŒÚDAoÔ °å’ÌæíC½Gw®SÁ{d¥B%&Uè˜ÒQ¼æ'ë…•Ì*¥”ÚMôuG6‘~âÉ?èQ°AðúX¦eæïrµnæ>þIÿ’© VáGÎlrÂVö.êS1«ª!z;›8é*øUMú'vAå|-ðqþ¯}…üã/ÏÉ<¥~Ðÿ_~ö+¬ƒ2îµDGæ×þÌšGµ<àW;Dô—‹£- üèZR±Hæ¦bí‰a†“µEãuÀœà"h±“ˆÖFèµt«iZw£ èýYÌœDöXBÎ&–/h¬”˜‡Á4ê€Vô¿zÎ!èO†ü:ž^Y//&-<#žÉ‹¥†ÿhe^^ ÷g@:Ra¯ÞÊy²×wåï7¢XHT0÷}0 @;jc“w÷·‹¹rô½< ~ÕIº]aþù×Í®]á3Llá}žñØ{Tfع Xý7DÄ[ÙÝvüܯæ­Pç.3J³—f è'A–RaÙ+Á­<¤|üÇu®þ ×| =Ë;0À´f2zÌËœÑfè‘A´¯]õ%OHG¾R‡Ü¦ {zÉûø›jAnrwh5^þ.þy!([™V|MÙ~Y‹)ü%݉9¡’ì«‘]EâC GÍ2r€xÚÔ‡Óì‰o‚§ÎY}#è$öån@¿›Tj ¨sH ®ááurãMʢ犪:ƒõø’#œÃÇÅRkÈ=–â—Ç¢(8LýùÅKî4æ7׃ÿ¸“ÿQ럗Ù€M)B›“ÿQÊúåP®!+¾åwò‡{ªõƒCBÜiã£L SÔ€h56|(ç7 „*2µwcˆE'á?NÒ÷ŒÊs8ƒdd 6ýK¼ð õðïQ¿Ýb4ÑŠ˜å9Õû©ÈÒ˜*~uì.|DYê±K8á¨?ïŽç¨J‡?® .ØÛ'µý„g¼¶hl½sbQ…1O}ôÊ+Á¯ö£RnC-ã[Î9HòkÌ!\Fo®©ÌDº ×S—O½Hþá †·L½”vg¼ö‹^—øg4™ec´õå>Ùa Õ¨üzE°/Æû \¾ ~Õß:Göº ,lÌü 8ŸižËHýyj<à}îi=k7N¡ÚëL})¦xu·æ0oü2#8‚ ÇëTF…_pëÏ7£–Û.Б®­K=×ëèçE\øJ¼WÌ S‡þêû2}äsÐ#w(Öf’l²ßÒC²:8V1ê?RZ¥áŽòÖù˦t”xåñwÑ•Fæ‰?‚mZˆÿØÊj ÀúZÑ?,¦Ýˆœ&•s¬®¨ÓùƒÙ v_»õøa•7Ñõ9ú.´¬"CÎ0óÀð öú'FCú‚õzÂÒ7"ZX;½—O¸Ë>ºˆ²ÁžE[nÆ\宵F]<Õ|¯ÎŸWfq¬t#/ ¯¬;£-T+¡}JýÉ}sóL,ù•Ö» Óóšhô^ ·C8éø‚DOåà’gÚQ˜¤Ñ”:ûqäéw;ƒþU5èRÑ®Ag”.xË,èwsÃ`•7{zž™"ú+#ŒÝ-ð‚ÊÖ6óµM¶Õ¯‘ V¦ºâ˜Îªã86þäH[JtYg©á_A†·ßÞSæ‚(ÎÕüEtÔâ¥xBÞ)›g †ÕÒéOI”Ę@•Ä.!3q_PXÁÞi'¦çW8+u@§yFýe[žÁ—ÿÑZ!}är¢¦¿xšZËJ0;»ðŒyÈ­²Øùǹé,¿joobþy:ûøC–ÉSuD^åêD7±Šr­çŠÿ{_$ÒÓ÷óç=×2ÿëúçš7™.¿RþB¯Ášë©?_Mþñ褋î^¬– àjßÈæQX$2ÀøË‚2…L!Òñ=»þ¼ûú³§Ñˆüc¦ü…÷žª`¦s¤£~ðœì˸Cý^3³cˆ7â[«Å ÿnU¸òu(`:€æ\1©)a?+¶ó$ÑH‰íùÀ'Ìú®úó«Æ{òñ`"Û‰7‚x$WÅ@–‚t2#À¹äi‹„ªkЬê5×^ÐÒ_¦ b.¬N‘lAo;EìL0¦RDÒ©Ô·z¾<øU‚PVŸüã“kŸÀ.´°6ÆfŸ[`€ÏbS‹RCÖ)Ä}¹cÄÇòLÏYA†„Öˆ3_ÎZn}ôvêÖ3ß°ŸÃÖ»‘ó8lŸ;ÿãÝ¥æ«Ò\»?}&‚n1¼hÆv—ü#=hWµ‹êÿØÌü†àø¹{vqf¨VM*´/â#s޵•+¸L´ÓYT ¶^9 –ÇDÍ@œfš·Õ9êè Eýy|g }ioÐwßO°bÙ9ÇrªÞí%ù\y漓g<ÛëH˜5žã0ÙÌB*ãvÈè¯VQW–~WbS—çCmÄøô»ô±ÊsSߟ˜Ÿ<®²9³^]ý€‘ŽÌòö¹šµ7u0ž|³î¨¨·Ómø:øU ' óo`õß2ës5˜;Õqæd Þøó‚ϵ§"9oeâ*ˆ6”yŬdN7ðévê\&ÀX¬£d…ýŽ, yIz~¥µ¢8ÙEÖrežM…ëçõvb×^Ëù<íýy¿ʽVn'ºó ÝOLém…ïMç\q¶Û•ÐïVý@ÙÜúÁ‹ÖCÞ½ãðçUQV6ƒÿøšÊäógü§þLH÷’Áž“y¡åÿf÷íÐvðžþí±`;ÊŠæÂ0ÜX~‡–ÝX ‚õĸ©ÇÐìêÖàW ÁasÚ>"¥ÐCº¿ø ³Èò­‘çó¡†O•™ÀÁ›šqä(™Mgl‘]ÍuØÛ,< ¾“?¥wÖ«‰Y®OÃNs™ŠüÇR¬b7žtEÿ1?´Cãïo¦¬º›8z/wx»JDÐëÁ¯Ú÷^‚gvõW¯ä4c¡-xüê8Þ&…ŽˆöVy5ã‰5§ã? W—ƒ•|Þj,÷ËPçŸ{eA9ê“ ÁJ‡,ŸxcV‚iN¡^¸O0ÿýú« øÒø(£#ꩾ±Ë­Ú=žæ,9@_N*/~¬!V¿ ù‡ìÉÕ t€oáTO‘ñŒ'Ư*Ó}¿º¤ áà? ¨Cø“ØÈ¢x£tpÂÑÉëãsúŸ`|{€ï÷CS=„<)jÇ×r,»üòhÇÐ_EÅ+.ƒ1Hˆ­éÍUÄg ÆCù’ÓÔ!3ôÁî¥I®\¥ÌfòºáÀ,9N|g¥].à!Ó6^ª¥0{Ñ!4õ9‰"øº*aÍU†y̳½ ôß­OŽ×ƒ|¦)ŒS>òúô÷&ÔˆšÄ¡äG/¬Ìö-t¬ƒÀÈ.RïŒJ•&pCIð%àæk™>Z߃þ*+Ùòt³º5ŠI SQüõ·_Q‡·>~šÎ9MöщM¿‘»ötO£Øi P6eyïTå(Ïù]ÐÞ ¿ÊFýçj­’Ò¬ ÿ1ž©Q¿£3»DlžÞ‰ið!¨©Ï>Ó[†ÄJ¬trj•äŸh×õW»ðäjë1¨\ÚÊýÌ?WNs&S´ÒÛ awâ:·ÉHÚ£¿:KýGfjÒkY‡­¬vVaõɳkÉžüï}‘õn`gâZîovO mOïµ=zæM˜?Ø‚ÓöÒ~2&€`Ý3ëÑõ«ŽÜª¥s™‡l¯=µy‰‰ñVS÷ù˜Nï…ÃüÐk±ƒî¸‡QMë™ËÚ‘v¢œÆØJ&9—ê¤".†(\Î?ô_qÑ—‡-ÜÀÛ×¼ËÞ[‰+ëx#ïaSð’'0ôÅêЗÓî~¢ö<¬ÚÚO)òê°ó‹Ñw5v@³h*ë;&H Ó·Þ­]“Þ 4IQSQÇȶ“g2×/—"Š$êW›™„ñ;û.gj"´Ž(^F.®©‘ÖU2‚ÌDž5±ÓoÍاxê#oäJ<ÈfV=Çge0S‚ ¾ýÆæž_½‘é±2c±Î.î©5—äRo@ŸÚ£B|¿o'ŸçÎ Y`Ö”ÑÄý¯¬èK…P2ükQìB<ØŸà“µð›Éäö!ôî´Õœf_T^CñëáðêäT¼ñ—Ë-¥bù ÍóL«¨êŒÙ‡Ä?õæJïUvÅÖ^ëY ^›?¯/àn ^a®÷õÀèùïµ÷Òÿª'ÏÁÏdk¨ÿ¸LÔ²$€ã0™¾VÔMåÀ¯R¯åðÔb—È@R¯8­èïõžà±ÜJË}dÐ_Ý6×ÂîÆ²f¨ùàW‹ÐꜷÃQÑÞ„¾Z‹ñ€åÑG;žl¶­ùTäÝmÑ‘§Õ‡¨%þ²&1Åm*ÆöG¶ÊÁüfr^Ù…àÏŸ©07±õñJ •ìnžŸÞf-Q.ØÛ¢äRü6sƒáÏÛâ]#[7ÀþÛY×ðqQÁ^R¡¸}€úö=ÕòìCøÑVü»³TÐ_CC0Q=•\?PôFðw=¹ mØ]Uy]öŸ› ~UÐê ²À~Æt}„Uüªýw¡çš—²Ón¦jé¿Û‘úóȨIÜžÊݬ)Ô(-@¥2Th¸½+½ÄNéì¶Ø¨¬˜JìŸÕÛò¡Ì8Îp3\a™7HEg8ÝWÄäi¯Â¹*ëúÝJø~àTcÉ<î .ÈWÀ¯$õí%ìávFjîSZT䀳AE>Tå‘'ÿدû\®{Åï¶rUÐICþQ‚>ÀI˜?X’i—mvv&×ÞV}¶T·wb"Õ#Þáãò&OÖ(j6+Ê?*ÿÕÿª÷ Rÿñ@ûé›ÓGCÛVý¸ÙØfTF¿+Œv<]û™ÿ1ÏXa<3®êõU¡-ìï·01g©ŒNϪ×ÄqwE8”©úc79dtùÁH*rl9­½Q‹xw˜,Κbf ÿÈD·•-ø¦Et:LNtÙ,DGŸà?ø]<½™Þ^ÌÀ¹=’òƒÒ·GýXɼ$v—ísŠŽ‡ºÆ„ª™byà}ó+C“MˆŽ¡Zq+ñò`KK…oÁ~vƒ N¨2añÞƒI“J¹o-wNó•—ù×é±£EðY).¶o1`bÈ®­"ëJ¯F†oÁ+åKÄ]=d…üc ì)AEÆ.úÒ_e½Õ°ñëá,ÒÃDUÀú¤j1p ¯ðdÛ@ðo€˜äƒ?ŸÌ:kD¼Ó,п½à\{è!r«¡¨eŸ¢&ÑÏw)ùÇ%úï^ÅÞû²Ë´t ‹mvcùáøŸ…è¿ûÑhÍ{p”( QvmµÓ¼¤ÖQÿáMýGc"ç Îyð«1àW Àrüà?¢cŸóéÞ+rÎk·aÞ*s67Ÿ«Ä?É­êNoª»ÒÕñ¹µ/2 &d&ýP†[?ÙWì¬ÔÜDZ²€EïǼ”½ˆ ÏSxŠüÆSÚÆÓÖ*óÙù'du­Käjc©’èœw6r?Ù‡ÕTv¹Fþ¸u”(s›<Ù+®ó?™_ïáÚú¿…Ñsýëüã“¶†úóÅä-ÅkÝNÀL2–ŸÀ¯ê?ÖÝëÝ)VȈfD0ëv¦Ohl䜙Ì*#3;¶Õ³ëÏ»ÿ§?7:º8‰îÌŸ,dÙôtcjmŽ@ikcûZ}çüHz[½"Ì*xÆÔPx¡ß§%GÚ‰M¾Àú¾T)ÞmZ(VþÓ–þïï|Ð_UiOFîv9,¬žâ?¶cŽP9h)2å'R™è<0Ôk>¨Ýû(#“#äÙ©†Í‰Cþàò%QÝÅÚ oÝf¡–ùØP¡¬¸ÑÈÍ55£’Á Ä);]Ez;°Ÿµ°óg0 ¯ùÇɯœã' å3ZÝŸA«ò™w$ƒ)Ã-,žN#ÿ˜B™[õá=I“®–6äkùÇTü‡#o“£­} OêÿÑ܃+ì¹:ÙÃ%öËxÍ´üùNe4'é¶²~ð´1l´¾Y¾` ¶ë0x±™5ob+7lÅvf›¶î«:ø¥°.±È“æ€cáw>øÚ‘‚¿ñ‚>p‹èç±ìg“W§2ÛJb V³±û3™uzÛö§º¯=sÒ)#=j©Sð½É?zšôíÁîô+£1XätsÉÐ9ÕUKLåEÛõ(ŽºÓ 0›óÖ.éL‡ë¯É ½·`¡ñQ³™Öv´ÃÑvŒ ÁÜ›ðå>xï†xÜñx£SäD­xˆ(Î1:{x[ljîñmdÞTuÔ%ë9Šº×Õ_ÍPaÌÀì¯Ö‹‘VèL0Lý$Â<·Æ£‰-DN3ÿñ‰úcö2&Š0ãÙÀ¯Zƒ¦'C*Œ'©jÎö<3Cô£FrP­{äMM­+æ!ц·lõ¿ƒUu¥1…sŸž¹ÊIo~’I‰Ž=íZüpDð°›ðùƒðŸÐï&äÞ–"¾ø¤²ýŒìc÷Ë.¹Äi² ¾ÆAÜ™û’Ž™½)-wõ6Ð& ÿ•J©Ï<¨ßW™Ës?…]W¹ÂÊä$vºþ]ä®fÍÔŽ/ ã"ôØ:  ;™èõX„yðoyOöËÃD&-Q@ÔG?/ø_üÓ€=¬*£gø×üÇKm¬þXŸÚê±N¯ÄÓºNËg´5z§càW?6k-Ýñæ13 ]š©5"†ˆmÌ$ÿ¸#߉'â®ñFþGŽ)ùGBÞË,äÍè¯JêOô¹Dþ¹¨«x.™…¿³þÜáŒò¡Vœ@~P>é‹ð;ˆžˆ5°©'Xÿ.xØIÙ ö=ý¯îÇDb˜Xø•DÞ:YnR"ï%Ds%ùîû>C÷«»ô|ìê5oÓ.¢v|~íÐ*b$o:V7ç³b3ôM×y#—QÛ–œ¡¢i+”ÿ2rà'[áßN’1dÄæ$Ž@¾\ü꨹. .d¬üa°£Xœl’/j!>ß'o­N73u™œ¥;hXz˜¢úØàUœà 7;Ñx æeî —?†‡ëÁ¿@ÿ’¯å×µ·Æù[¾“sZÇ]-J„=CV¬l9MÄ$ÿ˜J$ÞO9;Ù| ŸÈލ—?ï(ðϡԟ'’`g¦RÅŸÆ‘ýýF5g ¼Ú=¼Ù_(«ïc=¯«GT¥Ïd×S9ÅÞä›sé÷¶+p©€¯6‹eÐÍTØúyÔv\ÆÚÌ#oÙ‡…Ël]°¼¨2ÈCì]‚¹K‰ÿßR/7þcl¶CýG“÷Eˆ'2Þª1ñbÐPU‰è¡Õ‰°+˜uênb‚X•„SG¤››ücÞhú½áftck°_WöÁ%Áü†-ŸgW¨ižN5_+2™<Žé”f~Ô{ÖŠþª½Ç‡ÐKw3Ô^âä=¢C°õNŠäÊ>äÙß2ó!ª°(·Ž’OÅB{Z™¹'±¦oÐõÆ…i€*¡ ØÞ)ôW­Yª¨Ø¿d#üGE²È‘<­¸ÖŠ($»YgéïÝ®JW¨•tye¥a~à»›åöoï`G£^£:g—Κ۔QÅ ÒÿÊ[?g$â‰õ#ºom=gïuQžEgêGwòÂÖ(ø…ÓôP´™ ;nZÐv5w=)JdÍZ_gËr™çz¯iÇÅ[YÌ¢ƒϪH?çøt]l„^w*ù‡½ùKÙ½í¸ö¾o5¡¯Ië1w;.YöQÞ¡ç27ü~ÏSø^÷\L¬4“÷«=X]"''³ç;ã?b“eU³:þN§‰3Ó>­ê:5Лý„Öú9OýU9…÷8 –Ò+Ä3øßø6©ÞUä9™pzá]Vß­Kc¿‘ŸþW/|’·VØèkL5ž¾z\}Ï]Î)í'±›úóXæeÙýnZÇØƒÿ¸…;š„95"{vý= 3Ú‡÷ë-ɺTOOlì€ÿèN-z3·Ùç;ë?¢é­õŒ¢›¹¦–þxXÕØi”|dðËá ÚЩµ¨Ig_9]|¢î©ñVéx‹¢f7–35Ñsб•hYÊ…ùRoqúÁ;àWÏð·®ù vOó† ôGØ»óäÇÑò$ O-ï/¼á5Õv,hO>­ª©‹°¡œâdÃí(Õš+=‚•Xk…K!,†ç<†ÍØCûož·"ó\?ïu¯6^?'ÂÓLÄ_žÀ„Áªöä$[ðßcy~Uïa•–ñ_¼ð{gxŸSuï|ƒÿ¸dðöì`…Á¯š`­«àyßÃãÂ̓_äÐ_v üy2¼mÏQó=ò¼¹Ÿw¦i»˜PÞ4“aý†ªêû)J’4¦–ŠÊµVÆ—œ'ú¿KX¯ñ •ÍÉ£›ÃÅE=ýý{ÍÇÆFù[€ÿXH\AvTÆäguŒéµù°÷[¨§+‚u®Š¾i6y‡"kJ´¶údˆ ü½Þ9ãÕPÓÁ×&àßÖ¨Ax´yøøÈÙØ’¥Và°Ö΀üc(‘nAºƒ¬…íï¨"`çtã\°;I¸û¹ ÿ†¡8ÏÄ}ªRvZcQýŽeFQæ¥qvЪóŸñäD"/óa½}j5ÏÓœá„~(zÆŠ`ã—˜¬µT¿µD¯eÑÍi!Ò/£O&ÿ˜b%µ×‘+”ànÄ»ìR…ðFÿqF+HÿÝ8œÛüå`&üYfYL#á?¡i;}׊LÿÄ­vôScà«SÁÜ´§r'z‚´0éÅÍ?=77¥þˆþ»ÅðÑsàÏ÷Pþoú§W{flD¡Ú~,ˆ?9Îlª|Ê&:§ e^Dp%eZ9Ìs~5S&áy«Âûþ€j7Ò­qiD>T¯ žÆd,ÝLâÐo¾$Uó°<0U(â`æòò^"ÿxëÉ?Rêš|$g‘ÕÍšL’G­p1õ8½…VrØ÷Jvyç5!h²èß^ΙŴ«Öeë*öâ¨ÜAtÔŽ.5äÏÿ÷¾ˆ£ÿžÿùóÞÒùòãço~ðOƒI†ïôÕF%QDœÁiu¤Æc‘ñÖ¸€ÿØ÷Cë£þcVPÉW@•^„5öé:s0’IS>2¢…Úù/øÇ4êR­6RÆÃR'5SȾ².õ;À¯:ÈN<Ÿ…`+xÎ!øÏÿ.¾1·èÅ»|…¸ü¢Ð.(§:ÁÊm ZöÆNèXØ}tË+fÿѯ~wËð!ÿh‚¦i>c+, œm|u…µÂýd #¼ÃÔ¼Ñß¡ßÝ£—Ì÷&gyÊû|Ë¿ß8¬b$ïb9õ„f?8S?¢ûŠàW¡© §€_ùÛ· ðm±ØcEûÀMcÿá±oÛ+9ŒI\_np™¶‹þ%Éf¦â/löØÍ@o3?Ý 2w4*êìÔrlFË2 ï1ß7Œk°x©±ä&úïv!ûKË¿~u€ëœÊçÍ|؈ðkà2îä·2‚ •áãÁO ðdG٠ijø–^Ÿ¥8•šd3]¨ÞþƒHe¡ŠþjyÃv´²s'N°Ã_¬ðÖTXŸüÓÏÂSg2k›wõÁV #ê““^%WK‡¬¨–›7ÕVüÐ¥žØçŸœ×tíëO={f«?ÇDàSÂXxc§™#Eð é“!3»Â¸µšv®*¿¢¿z©>¡³ÍEeÅc¢új!ó7óôÔG×v¾†~_èw“˜èË_äÝaãÿ‚…*ªW‘ M#á?–ÚñìêV:J GUv¬ô »,ÁBºDÖn*3TLt9ÌÀÞ¥Mu_##j8°ú–­ÖŠ~è-ÚRÕ†nU½¨gÏ ÿqÃNàøs޾ä6‰é«x Lñ/|ðnð«â²„ ì¸\û ¢ò¼å CÕ­Iðáï”áŒ#ƒiƒ'ËÇôÁKÌÔ©Âô§ÿn-ò¤–N†Y}qʆïX üÆã?3ÿ#,ïÐ<Þ„Uð㬗ôŽi ~5ÌÊF¯’zvç-zê&Î{§ªI–4¼nœu,}¸ôæ©ïAæÚñŸ‡ƒ?oïy² ¿ú·ó£"êûta¬2*ˆòÂ' âiú—´EuƸLÿö!Þ°þö0ìèdx t1µ¹JÄ£'ãIpÂãøû‘°ÿîÐÿ1…ÞnfXø”v²¼žÝ˜KåÞLæú¥DYÔð;ç&¦ÿÕ/¢±Â&¬j)ì|+µNùŒ˜‚]Ü'ñçM?C†3CLûç‹ øÛ{ÌÌWk(·KÕz¬~düÇfìûeöjaOópŸäm&ªï™ýµÅk‡©’SÄö¾ôh8ŽMß͇†ME¹[ D 7Ñ¡ ¢áêw¯ßšõôyíµÆ/ðæí±îÛù–¯ ä-}i‹ 9õåMØO†³–Ï:O ªebýõçñç&:¼—YÑ ŒI¸É™û6ÄKTTWùé~ âoÐem²­`Ý%Xý fY™L|­3Ãsí,+5¶ÙíŸØ™úˆ kwa^â?ú‰¨mûQW1´l0H|ð39 ÅvˆñízíþÃ1ÀBúU§›Š¹šYê%þc†þö.þ£ 5…sÈ*Ê`¹·€µQÑÉüõÃÁVŒ(ºðçéP+ÀCž ^Gß)è‹Ó}ƒdþíCQ!uÁ>¿JDŒ{†zÚÄiÀ_~bº7?óú«ÚjŒyþc&\Å0/_ÖËaŸ·Þá?â?bQEÝŠS­ ~uûß꩞ÈÀ ®7ó£à<±‰LÝ À¯ÞÒ?1"“øbÑ =¯Õ—šˆKÔœGÇ[—Α‹™ÙŸ•ÛÓ8*¾( YgŒ úÝè¯"Â/½Á>W±N ´Ÿƒ÷mMÿ«¢xñä5޳kÿ½Ô_Ô<„­̽Éöà4÷o9pñ eVkE$âІDa/©TLeæãÚzRÿ_Ö<Ý_®ŒÅ@åg °ºÂv'åî$µb(©vŸ¿–“ÁB˜Yû¿é&ºŽ¹Ü]·‡ûÙÙJè¤wzÌÍ´ ä”§û çþc4øUô»=ìRT´ß¥ð‚³+CäUNõýŸÌÿˆÍôóIž'á5ž?‚ç»Ï×÷ê^ˆ ÎPÿÑ’üÃ}ºh‰ÆzòÞÒ#ëÛ¿s™¿ÿÙ-3õçñ©ùRĨ'D4’;t‡i ùàÏ?1~0ÿèht…˜ÿÑx>‘¬/óÀöû#®‘ á+òSÿñ}õçáõ z}1ëq\ v°·Zè*®ÄòYwš¤ƒ7¸ƒ è)F}Ç5ß5^‰*`jIÕbbÃÄÓq™Ø°&äþ#†JŒåòżÀ#…ŒJ¿\þ‚vKž šÉ‹ò7üįÄ(?'¯boáÏïbÃÖr¦ãͽ°Í¾¹ó?þZe”!Ãè„×8KVä© ?—޲̵–±ÏE¸ùóü›Ät¦Œ¢¿øÆŠ´™ú3YL B~ñw¤?5ÂüŒ :z¢¶äG‰Ñ¶ã•}ùÿéÄdd6ñà++úi8æG7+`ÝðâEY--l«áŠ%§ˆÖ|мªyD?¸ƒðæEú§3ÏyÞÜÀe×iG¨ãtP³ŽDE \®;Þa6yU7˜„Dð2UÐ(ŸÁ¢lÅvùó•ä^}ðÌ]Í©âœÒí2fH—·ÏA¼>¬Æo´Áü•‰ñ°ù;°y‡‰¤/ª² %K‰ÿ#‘Ó,ù9=Mdvù"RH*,¼ä|³6ÿj33úàÃ׃…E²–3ö¬5ÍÐnû:Þ­=•Î3xjª¡œ=ÃÄöa`9uèµ*ØÎ.Æò´]âùʯÑPm¡’ú<5›TæOFñóŒ¤ 7"Ý· \±`r¢P qŠŒx˜9M ¶Þ ±Ú-²Þnø™Iæ3uÕÚƒÿ8‚E¿ƒÞ6§ýÀŠHO'º÷ÒSöØT3P¦ãè›ÞP3> wÖs31?ª « SW˜»±Œœ`Ö¹zç1 D{™ÒþmR>ãj p­õÙajüH UC… ‚_ÝÔ/ñð€wÌ™fëF@¥¯£ÚÚ:ý¯nÀ¿ÿ ÿ±À>ÿáÏÄqw züÈU<ëlêã·s½-@Í÷\¯¦Ép` %y×…•>¼uŸ*ñÛü¯<±éö N06]Œ£Âï7¢—IIº?&&ÿxETTžüc¨g`ýùiú·‡'žÛÌýg’#PätÆ¢4›I/²&àW•*ä³:Cì Ì,Äê¨h·¹,ñvvâÍ®ô?©ÿûÈ<¡âñ ž›®™úBøÕä¥ÄG½§½S«`ŒcúÇãl÷¦Àú_ÕrÐ?1ZØ(°”áé¸k+É?î ¼‘D”P-_ðé`´£š'óa™šùàÏFuŒñ¢ÜŒ²¥8QdèÕÝîša™ƒØXŒG!tS€ˆk®ÚÀSá/vòÜ'JNìzW–cÅúà›øêw;¢ž(.Ú obù¤D¢e±î>¦ÀJDy/M¿‘÷äb³¿˜júå‚»Ñ_yã?RQõ—«ÕœøWò‡-Øù*Ø”'°ê'9ÓÑ|B 3²­þ|•Q™Ö½yÞ/˜×ð«°úL‹g¥ª 2Ïàûfóß·›n¯­&ø–ìøeÛó¦ßßm»—ZSðâmð¾ÉÁ»\éOªÄ^aã&Aúâ§6§lÆ+=â«ýh’Нuöñ§ò2¼»pŒìÏ ;^œ+ÍÂ]‰JÄXS.QèÚ+0ï1‚\"o›I¶c~¥~pýwcÒ "øP[ò£`“MÙg&êA*ñ¤@œuín2 k:[´šS…YJn|'ø¥jËŒ òžƒüÄØ[ð®x=ÕèÇTi0§MÔ>¶Ò×¶…Õ˜V홥’¥VgØ€ƒ*1=,1¿6è¼Pg·:«Íá_$+œŸžÚŒ)ðÞKщ.b.“õ~¼y6rÍ(pÊQ:å$Kz¡vW"ˆæÜ;ž¶\q}rÒˆtð=}¯Íüî9Ì*úˆkÈÕ°5ðlY)2Š`åöy›.Ú[ï1½Òó–{9NÍ2Ï+‰Çè ÃSÇò#3*ÁìÀˆÎ0~~-óŸŽÀ#µo:„}ë2Ø*¢yÞs‚Ë©b'<›;ÛOÓ=ájX“õ(‘3Óuu¯ñº³–~¼íéUˆ~‚§ñG+8Ý£¨ª«Ræožõæé—éŸèrýÐïn4‹Sf"Õ›®%ÕèUrÉjÇ•n š=žóÎ?’Žli™W!ütêÐÒ3[þ%Û™ÿg­Ï\8+1lb'ë=S:.Ù¨ö³8½ã¨¦ß'ëÌd‘ÆT;¦·RЗs?Ñ«Ÿ\GŒØw™.ñG+ÉÇõ“k¬tNF§ŸU‡¹ÄìyxÇŽÎqêq*;m_5È)i¯¦ß—nâ-Ù —Ò•sCÕ^îò\ñï‹èúL½•çIx¯eÿ×þ#«IýG-Q“~¤yXs·VÀÃ)G¼Ñ_Q ò#¿niåáÏ3€ã  éX‰.ð `† J!ßæâW#ŒI`Žsdð‘îfA° ÄÌÿx$û£‹=EþQ“Ž>¥=çðO;MBýùh± û÷ØÅ'°ð‹A3jÐw'ößmjZð‚`Ø}ÄŒZèÿþî£á/Êcá…Ž±»¼¼û¿ Ó¸ƒýìJýA!âÇ·ÔMG¦z>°‡Â·Þ§™èA$ØP$"ï#\W{4NYÏíý]+_T1m p”œéùwÔŸwBéÓÿ拟HKÞ?œ‰çµ§Ê£Þaƒæ‘Ÿ žw?¾  ™–íJþà»Ü¬гЫd{±4ìƒìFv4”Bª†¦ÛSÏ$›ØƒeÞ§=Äß1ÇHM|Qy£½2â‚›åa½¢üûnøò|ìîvl?*È­â'´—ƒø{·wÉdîK ” aÉ ü¿šøÉPsFßT„êQ]Gpš´|_D$þ£¶s{tð«©`[a<§àQwò|Ÿ ~©Ú!cžìŽ*Æ¿úSœÎfXÛs*¯¥˜ý³€*µÔD÷á6sÝñÈ|öÂd?Áß$ÕÙ7ø$‹q›Pû±–'n8÷c ÝÊÓZwÕD·nVas5nª¦d ÓðFÈtž°Þ2jéš‘löt'Í@4¯ågÁ/”ñ{¯>0eõ:zÝZXÀTNL§Œ3ɺ­ Üg‡Ið¤øþ(qÎdüGpüê¤XI.xôðw³é诞¡2kµ6¡np=Š!ÃŽJ=¢ÝV Û7@ššñûÞ#…UÑš¦Â˜úÌß´úzgøiêªÙ²Ïó +#}ÐãÓ¯½¿u€êŠ(tõˆ ð™×': ºýwkƒ­å·vp’EÜÎsGÚê¯T¼ > ¢õ,·ÿÕNêD»ÀwT¶¯Z7™+’Ñ9Jõ~\Ç;#v8{4ÌM^®8ŠåâW™ÐìN¤ß¦=qˆ{Ê‹¼PˆÆºZi©í»Šêª¦m£Â:ɬxMÇž‰–ë/üG!:̧T/yNóñ6_0ïËKþ£ƒþ>e1ïäTüÇ$|e|—+·úqW—‘Ô±‡:'ÐÃUtªÚÂêÃüó£öÖxë-ú«ëä0ùpIeƒ €žKÿ]¦Z%COL¥ß¿ûP¡¯×#QïŸZ¿Çõ§©?m̤§û]×7ÿв§À¯FÈD`á° ÏDlj¯ê×É?2Ë3L³•ÆO?´ÏàWe̵2#w©—™šî†å™vµL6¢RÃ[æGÁÓ&DGÑom7ªÞBÿU,ÂÒ_ãn—á=ÞÞœúÁ ؽ{X æÿ1 §ì÷è¯.§E"ÄŸˆëöñDüŒÿ(É*Ç@…ZàL´.ÿÑÜ$§…zÍÇèß¾ þ##,rIu vȾ;h‘;û´8Le°îhø°ª)EšPV&ƒ¹¤´øJ|%ÿØJþI2“„úòúø‡üL2£د* uÔ³,õÒKÔE|]2°Æõø¹Eøýæiú…†ô™sŒßy¶š™9A¤cÏ®rÖÃó$†dm@uÙJn½Ã²fãtbtÕ…Ÿ¾ŠEúCq_> ïÌœKblo~gä jI"XKÔhzyÏ¥~pvùý¯^ãaR’D@=u8#X½Ÿ~3ØŠŽhƒµº¾8¶¼)ùÖ;už®'©o¬‚‹)¨ÿ¸­À­H«13xç*i@u„ˆ®vˆùQ'ÁÃLPÈ×f؇%æEåc]Au üê1uÅè ¥œÕÖ.º—°o’ôQÝÁÁ©¤µFªcò´çÓ’è`¢úsjÍÐ/tAuÝÍŠƒJÍ$¦Žh&ÓðÛpÖÛ½¨2¹Bש\ÔûuÛK‹-»*¥ª™ØñýŠLò4÷¾•Õ†·ÿ~x²È©Â¬óéè•ÓRݽ‹þío˜Ì¢9©É!FqvYÕXf}íRçÍŸeš ó£îi÷á?*‚9ôEgÖPÆ1ZEæôÝíÌu†¡=¢ó;XÛqüÐ,¦ãޤÛaR;‹•ÆÐõ€Ï¿%#y¢˜ÌÅ‹Êû9)@×>Iî³:9ñtFû‹^ZéÖÞÖñr4'7= «¬“„¬#1ÃGÞáËò8q`Õ@5ÿŸÌŒ¡ÿ¤â ð«¸Áž3ÏM õ‹°L83©7Ï$‘Tf•ƒZFãOc)=yïèQ~P¿»GK#æ-&«ÿ Æ+ õçô£â’L,/ˆGÆ'=Éís­Ñž\a%Ìö$ð°˜øÚø…²‹¹Q®A՛ܬ¢£Ï·.8±ÞQï,¶`—`1Cž C‹ãÌ…x“¹h€j Ñë~µì[‹ùï7Œ«ðÃÁ¯6â5vÁŸ§¤cÉ™‡xº˜àÎÙÈxMT‚›dp ;È"ž//k§åEÎ-èWFuîÈ­M¡K$y¯ä2.CìE%„?W6S‹Ðúï^2JW¶§–Îír•FâìtxâÑ :.~µ”ˆÿ0ñÜ9òœüfTYà›ú+Sߦ'%Â?­ïv›$©ži¢Ù¿Vôïê ;õ†E:‚>õ&Þôš¹¨"ÌWîµ/ýÛ°ªôøÃ<üû¾pQ¥¸·Ð<Ÿ1«ËEBXãA?òRk×5’Üä þc°©}Åì£1“|‚^wž1+tÀô4és~•ëÞy»·ˆÇŒ(&Vñ{8ˆÃXêýõ‚Ï}É­ÀŸì¥)‚wí‚OÌJwöäàWû¬µ(P‹`ËYåPPUçž§™êZk'\Àï_(í¬£Ü™Aö¸üj³F¤¿I%[IGcøÈ° wÕsò'’ v*:Öû*'æäXü*™èȹß6#’[M Wñ¿:Ã:±÷•aÒ;OѳÆŠöÁ¾DóǦKáqît_æÖvOâÉùhïн²-Þh‚ùH=„á­D>žüc.ÙÂYëÓ™N©dûñì]À›N2‘Êå?F¨«2°ƒØ¬Ðâ©vDm`°*¢ºîa¹Uבˆä;0d©BÌô¢ÏÈ:ޤ·s‚ÙµRYËí_R7hçh©ûɉ3Îòn¶³ºÓÍÂí4zÁœè¸–â?R:kPßÚÎæu„uzËô&ŸÉɽv`„šeê øÕFí”P<Á•¸ûè¥c6c6oO~ U \175“ɬ_Ô[Þ¢t湑øRzüGKúユ«ð 3ˆXzI/+ýKÚÓ7¿Ý{—PÕ^Ñ9D…JüÇs5Æ)‹ÿh@ÿ’¼Û—¥7ºùv¼9Åÿ'óÏcê=ôÀYº^\ì¹ðÜ„P¿°uoý½¾ÑH,‹WüÇA-½ÑǘÆLGºúÁþW˜n=þ<<ÝR;›D jJ.è'Åu2ÉÇâ3Tä%ø†7ÐÛͤqv3µM¨ÿX+ëÃWM"º/Žÿp}^è¿’ë¨?_‰5õc-fëšãˆF«Àñ»½Ì¯€]ÅÇŽùÈnX°ïéHs˸'òƒ¢‡S ÐSl6‹ÁÖÅ"ûÿjZ ï¥Éx#`û6Ë5¡îðù‡u—‘ÌwØ®#ìä|E'ò5t Ɍ²4xbç«ñ-Tõ‡²â>#?ûè _qoQ k¤È?*‚hDs›‡?oàG’ºïäz`$ü4h‹t&ëbFœƒ£‰@W lKï2Ô¶&¶?NÖá6tšwmYHLçóà |ç£ù‘8ø‹Tqnã]®Ž•ÞGS'Ƀ&ã?€Å§TóÐýOÃgÅâ®Ø`g_ë_²Só1¢Ë¨†ªÆð§Àü*ãk2‘ÁTÁ¶çPµà?î ÆÙÈsc!Wp¯&ð©ý‰é{Cìp‹1F¶€i+DƱ}Ó>,ü쬺€ÿ˜IoÖŸ©ËËk³ÖR£˜û¼–Z÷ÛôHIÎ5‡Ä¯ü :Oö”F5œf(Õ1K©íŽfMV3©_†ªéuÇñHº ôu‰ŠòÊ ÷F?ìN‡myZO‚šD1PUí5ߨ[ô¿ÚM¿ÜæØçØNX§¨³…¨¾1Ý‚or&ÑÐDÆŸœTKñ›SEðZÖwbo€é¶BM6ý®/*üd4"úyôpºo}¤ÛÔ²¥Œö6”q`¹oª0T;–µ£— ÔHx1ÿƒÎRxÓæoä%äSY“ªÃ¥vDò¶Ìë˜D—tö#lë`üÉêô\Þã7|Ax,ÔÑ4 ŸŸÓoѹ‡wˆ~:Y«`*½ñNí°Xb/²«¹ô/ñr;æ:ñí…Ö)f‹¼F!·úsêâYm¨Ç`Ïù½×n¹t¢’¼úÝ<Çõ¬”NüF]ªÎ#Ð=ì ’`—±ì‰ÖÏ(p àÝãZ¹Qiï†u&7c×lÿØ£?£qìù_üDÿÄxNj§º• åB^ú_Õ Ù.çŽ]À™B†9’.ŠËÉ?Y÷xOvÉ#Ôq5'žkü?éß ü*°W *w,Ï9…x%Bù6Ohò7¹Il åÌÜ¿>Wû.Á‚6€`åE‰SÝÛY,&…*B”áÐucºœêßß/N„Õwë?jb‰+À¯ƒç®N,þž7ç qÿxЗfZ¹ßÈŽçû{‚§55o`%,~xú%4¦Æà Vt#¿ ‘Ûe1&ý¯R~1 ãó!¼@¿¥ÖIüG7®4–œÞÓøÎ6ðæ•Ìî ç¸òDêÇÈäîòõvê?ˆ¯uY‰ªÂ4m"íkxïƒàC…ù3#Ì UvOÀ¢ºãåèz„WïE^x†ú¿ðZŸwøçªIÒÊ[øÜ X¶Äø¤æÔÎtê‹…E}_5”Â7°¡`}2Qÿ±ÜH|¨¹‘úÁÝK|µú¶ ÓyQ\m„»=Éz;¸#Ûè¹.­U`0—¬,غ_¬òðçͱ,IÉ?zÀ°\RIèŸØ5Ä~N­=3Yá™–ƒÊ/$ÿ8m.áˆ@íÝtüÇ+ UOa'ê’߬{IŠw¹B·•Ù*WòŽ®;A·(E;î¥,C2®rÄ65ÒèÎjã›Õ‰ääqVbÿëPÿñ@ÕG]¢üAœNç 0g‹WA—££Çl¸øóäÍȆ—_²ö¢­½ÆöF ú]?{ Ñü\*êÜ È?ޱ¢me¿Jmžñ¬7ýnWîâu eÑ(ý;²þc;z¦bø¤™è®|ðOÉk€‘´;Ñ¿ÝO3þãÙa4=ëµÒ_‚_%#§œDþ±Žy_ã¹umúŒ°–Яå%“D¦¢â nÁ‰ŠoŸožsN@Æõþ<yõç×1ÿã½t+—fÒ7õdY-‹úÁÍ(¥²Ò¿d“Ç€cëo¥ewy`»ÓZÙÕGâËòä¿K@åzøfºŸÐy“–IuÄ\²22ý±“Ý—ÒÛ1𮦸wÌ„lÎäßNF»´Ó”ˆáqÑ1yä·›*¯ÂÊ1Ìçýþ'ÿL­×•þZ&Íþ»Ï‹¥e~í.#½hƒVÊÍnéC@÷’E†ÌÅí{°œÀO¾¢å[QÛFÂÆ´3o‰pâ”þ»~ü*™ü(>â?ÂýÐ>Çâ?ršceflü ÐA2·þIß){˜;ä™îµ±(ó]+æÕ»èuy[¼Íx¢œn„L„[Ü|$\=ŽÛ÷"ØÇª‰ôͯ‹7¢Ñnxµ›ºÝ¬@WÌ\†½öÓ‰…ý+D¶û åÀ29.ÔÔúC¿ âêxËY¥=œaoóiزì(,“«œép>«¼é„ê?Ö™±2m]D”˜µ×ƒ·¿Tëxî/‚UÀ—ÔGúI†ûfÿ’ôß sËU¯“œ)¿-ˆò÷‚_½"ÿóp›O9ëqÌ|Ef·+ÙE¦ï¿rz˜ÿ/DVpFf5ŒJ62Œd)9Ép²ƒÐÁqcIƒ¿Máï-óýwg0ýýËåVâÇcJ?ðª%صèê0xS~&?úÝšX÷›œ™±×`Ió©ÉøÌ›¼c3²OZIྠ3u>Ö91»>¤:¡—z¡¢™Í¾Ð_1: ä|Jƒú«0 ËéÖƒücúÝ¥DõÞö}µ—úsw¦mZ,JdËù°ÓTZ¢£Ç¼A¯:.þc1F>w2xÏó5g`ŸPO7ŽX7Ò%DáM¨#÷ÅÃDÀ êÿNçüIÿD·CQà¯ëb#Xâs8²>XïYÌŸÆTÄŽdXñüG&>9Ô4Lc·¿Ðÿj¾ÒåϹ)VNkר@ج•Ò[Rú'HgcÎ?—<'›Ð¯äÜô¯è­¦¡ˆ=f•¢ÕZ¾oe]³[Ø)¬-ð.ônçÏ\D7ÙÍ1žÍyéŒLd%Ï9¿ºVs:ÕMAKÒ¾¼]¹¦Óa]Ña~/þ#õç`ú {Ui`|ÂÐæ,5Ɖ¥«(ýû—ö¾»::’™æÐ5ªöhNuú C:jF Ü †´ýžl©øS.ffE…?Ã3]$àíˤÿÕ&柛0ë+@ÿ2gÈÍp±–LʺD5JLr·šÎ)'†#œš(×úPõè‹ß¼e=[8,Ž@ÓöÒ?1¾>… ŸOÆ_«ðƒ}¥>ÿ¤¦EÔÒ¿}­QCÔeÞ¹;)o©ö+õçË™îþcó?.h¥Ä²…H(a'˜÷E"j|gêïÅ=™‹þ»ï¸Å?æ?z#P>ŒGiµ·)9G4]3ŽËÖè{æS•^Ãü=ÄxeÁ¿ ƒ¿­)¶_½ ©B¿»挸@îqŽ.ÑúM2œ…btðýêw~†.Ëò“Q±1{‰Q“íÂn_© '™RÆéd½kä,ÏúêRüG/MR_mbéßÃwìgmˆìcíþ;Ï‚­MÏb€æl&n‰,B‹¼ŒJXóöxs(kS°Ð•`DêóöÇR/¨õÛÁßì5Ë n©·*$«êJÌà»<¯Í×m*Š÷±—žœ_Z"±f¨ :™Õc<ø ¼’ æíŵ{‘ø°Ç«æR÷«õç/µX"=ç“[_[>d ,Ð5óÙ–è#"QY1ŠhÔ­þø‹˜9:õƒ>!êWòIøtòö~v(&WÓ‰½¹ýK¦ðn~BMÜæèÀJ8þtj.k ™Ó¼Ì*òíÁ/U[c̖ùÇZlù^þÝ<üÇAºÍƃ?ß òž 5ky¢Ì)0,aÁ7Á)?!‹n•CÜéˆ îé8Jä? °“#ÑLÄC$ÅÂϤOÒrìëRÐ}ðϰô™á\l˜ôg S¹È4/PÝt‹1E+r²gðkI¨ÿ¨¨ÖÓ‰ü0=]«¢T,,cþÇ{»˜³”jŠfÌ?¿ëÆ·¬ kºH#çš"[¿"–Ã;] ¦jŽ´Ê¼§ÂòôDKœ×z‹½/E¾•ÌùÓú“jÇ<Ìÿ˜‚f xà'üiU¼„fà|Ò)èwÛ¢¬ûƒ|¦*š´ZäÓ=é—8…úófÖkŒôUtMÕØÑ?è…ßÚND¾ÐSå…·ÈD. ßMhŸ{`=ä_»ýKª‘óUP¥÷çÿ‹Fbzm ²÷BKý¯ùpú=½±ÆÈ%ªÑ·Oë6­¨1‘üãŽqúóƒ?tUç´²b#}©¢{763ÿã#øÕ!qQf•Jêô¿Jì}mñ?öX¨atÔêG”umzð¶m²=±ÁŸW5Û}gÿÝ$zê§¡¥ô'Š.…™CF_ýÕì´[‹ð°‡úÁ¥ßÅŸ?§ÿÕ/æØäýd›QŒ¦¤ûôvž§{ OϰÔTK_y?73Ôk>¢Ý–G馇H°¶¸"hPlß\rÝ<`'é+tþ£yX5ú'† eÅ9Flx{З£Xü¤dX%`$ˆy)bf]޵ßÏ®/²Û·23v‘ìàwevX7ÙÕyÞãö¬–%T-~ÿiV#ïˆÖ]üè*'êvP<õ¬æS±È¬¨zÁR´¦ÿU#úÁÛx¢uvdç#ú«'öG˜›áÔÎ$AA—<ä–™ŽþWz­Ú+÷¼6Oˆee¢{++«“„Ú¢»ÅÜÕvs<Éj^ÚÀ ¤Z\ØÑ­œÄ!;±4~pïämÿ˜ÿaˬç-MŒ»ÍªâÄ¡þ£*=v{Ò㫇=˜ùµ‰+¿úÓÉŽ~·êwþ‡—ÜÙ 4¹´ü± mÏñü}SŸ„ÿúÏzŠ`ÏÅ÷/‡þ‰qé_R”ùƒ¶áVJ{keŒzè¯ÎÒ¿=éöo?‡~w1q´ö_ …Ëc¦×Õ¯“$–OEL‘ØÈúCûìl”C=4ÿÑÝO ºSýª?Ð7Iz&ÉD¥¹Ìî!‰ßºòzòîäçˆeó€WÍ¢Þ¶„ùJüÉ×Þ|u.)+ðP Å–o-俟1î‹\ĺ1à.s%V>žªC„²«¶ÐP©éõ N|¦œê5ÐÖËàWÉé¿›OQ \ƒ8z>Øo~j!á?ÖááÚàŸJ™a„[§óO¿FÉ`!z“ ž'ÇòWäÍ1Pr•ÁF ´³Ä@äÑ™@—3PWžúÁ«ßXð°¶J?#3_ ÚM<‘뮎G/«ž˜iÌn çàt½¸öUØGjqái:3ÿãk‰÷´GFT°³”xÉ2äAÉ?êà“^ESÛYøñþÿAþ1þ¿·9œìé½%G0ÑòË nÔ.ñå)ðœádA1‰¤ã:Ñw"ø•¦ŽÀ¯¤V»a¦‚ƒd£âg.þ  {ooΠ·g`õÂßkÏ6&Ë–xîDøƒi°Ù§ÈÇQA²«ž©¦[é^ëú öpˆ‹€AÿË»”üC˜C¾èÔO–Jv5õõl8˜‰ð¯ÍѨƒ k”ZFÝŸÛäóÏwá‘»ÄÊžÃ[D•›üÃ1Ž»ÓE}ÎøV::\vVE¿5ÜÚjMTþc’œzç*ô`z¨ŠQ!ïÇ“%Í68à™æÈšºW|Aà3ÔS±:¨°{š×™F5تo­¢gñså"pç×ìžðûÓ±¥>øärð盨—ßI2QÅŸïf~mg3]ZÎSMÒfx»ÌÇÓ,§ŽUÊšAuÞ +“}Š:¨”†¡šl%{‰:aWSS5'{nòFýž†l-ŸÙÛºbJÙ‰.ó ©¯eOMì ÿ±ÌI2¿¶Ýà?2ëÐõ™É}Â[gÉ?*ËLA&B¢þCñF”x¦ ‚7ä³Â9acZÃä'§e95Awàó°3)ÁÅŠÐ%†U€»|ýâ'9Ÿs×ã?6èýK¦ò<͇˜(7X©œTÔn6ÌKÓÞ.èt.3“¾¢ÑjFÿ«éÌñÝg=ÀãÜ”»ñm©h­$CΠñÀð‹(ú½ŸçÉ2©ûKêùî?V߬§4ÖÑ?±†Hn¸ê o-'üùãŠñFúE‡Ò^}UL”á:ïÊD Ž8IÊqLæ„ÿH ¢hŸUÜøád4‰F«Q?Ø•üc¡¬eþ%kIíë-ë(ÿioñè¿[^Ô!â=M)}îˆmDø)èqŽâŸÎRO²ýîRÕùµu—E!"ç0¼—;ñ?éˆÅëñç^´«íaƒ£¨¬¨Å¢ª,·…zÍÞÚbyF¾—©ˆÓ€ÕËI‚õÜóY€*tÂ^àWMÍ¥è™3Šô¡¬ØËHÏuºgæÖƧÁÖ¢n‚¼ý™Ðä, ë¾€õN J\–SL,‹}³ÿÕ æ×n•Ô5¼ä0ПT¦Ä¿•æ§Ë xú…sì rß¹ ï¶ /2‚Œ~L%ÄWvùF»j„­ÊANU…¼íO8¨ò\ës8ðcæeÑ[\ÇZwÆ6ÇãÍLųôTþøå}ðÒîƒ#žÝ[ýKÀÕôäŒFr7&Ð# ˜{3²òÅ2Ï…M®VÃᬠûÿYÂü@ö÷ïµ§“d#"ÔèxœQ(Aï󬬿ڌ}NÁd¾-tÎȈÍ+N•ñj¢Ç°Ø·±ÄÚËÀ»>кgˆ+¾‰Ö,ŸYŠ, 7õƒS°ÔS±–¬™Øý“(º :µê 8…™?¸ Ÿ«>CÆÔW%ã\Þ©vwèoÔ ¢¸eÆãZ;Nm6/¢¬ÝN5ÉÕÌ¢s}!\J}ø¨Ü$þí)ØÙZ¸’æ!:\ ‹÷FeE;â©kô)Fô½’üâ6}ª~¦âN{HØ ´H7áHª€¹lA/pXeƒ¢?禌ӊêõéq0Šüc«ý*OËÊÖU«þ£®UÚêAýàxi/¬þ”¶ÛíªLظ"x1š½<›UE3°÷ÃDý–aðÜæiªmíFùÔX þ6‡½ÎÊG½½tfszïìðÔŸ%óCùä 0„ìé4±DN/HþñA;+ÂÂcÔ#G}§b‚‘ä³öÐ{wÿˆ2lyÈ`&”LBÇÕž?ŠSÊzhE¶ ò”»Ý„>É­ô€äÏ×Ó¿ý(ý$ÞÑ!f_9ŠjĬh§kròIÐRgBM½ …X|ÔGÕÒyÃR™˜áñæyê§.ª–J Cöðôèð‹¤äýKÞhé@šþÝÇÅÖwé¹-F'Q‡zÜz¬²KëL÷ÄÓÆKê“Ñ¡ôŸ?åõç+À•"‚‰t¦·Ôkã.“®â ¿Ì/ÃÒÍ$‘Zå[ðõÿ0Zbýúʂܡêf9þ<¬q_v1[‘)d¹o'²à?ü»h\[S1ÛÅØ‰)3ÅíR‹ˆ£SÉ£X”Äz×d^s/ó?ƈ¹Áô«ß½3žˆFXøh¼Ã‡±¥ˆk¢Óð‚Áh¾pÇåèч¿a~TPïÍVí)ó£Þ0'ëØ —ȘņõöQ@¹ó©6Ab¯ÍGFŒPVœgT0Á (Ã7Æ%ÿ(ÏY%RÅà(³*?rtRG°»ÉsâÒ¿=³îÿÕëtëvéáÌê(8ŸË§d¿jÅÊSÌzð9Íià.s}€œfkîg?fö€ÿœ ¸´ŸöÚˆE­yQð«Bxœ6ì« ±‡ìî ú« "98Ns"ç±\¿ÛÃ$ÌÐ‰Þø+þcöĈ ~•ÿP ¿¸›ØÒÍŒÜî ¨'| OžE]Ǻ_äJsã“æPC3ˆóbŽ1Œ= øjŸ1‹(·Ùä&²…¬\s-¢ƒ²tŠB'ïuô¿ÚNýàÕ{8—lNƒSYH“ƒèc13dÿ’·†/µKËÌòìo89ÈpTÓ‹AWÂb{ç0+v±e1Ï—jŠÒL5œöRîüõçƒá’{›×ô­ÁîttÑßw )J òÇj ñî 8•äiðá»müÇ`ð«’(І²÷ëh‡{tU‚­§É™D@çÁtûƒK-2/¨Ã0 -Ð[)*º×Û¹±ÔG±ÎÇÕ4˜Œãø¬ºüï0z‹0ösÔ+yÎs‚7Á¯ZƒN`½6äååMY•Yàm`&*£×o÷³ŸÁHïB'Ö…+?ÿ¨ÂÊM8—ð|bz4{Ö;¤ß5`y“F3©|;üy»ÿGÜYÀgqmkföž=óâîîîîܵ8—"…¢¥8-VÜ!HàNpîî<¸»|ÿI/o¤IνßiùC„ìì™Ù³äyžµy\wû5þÛêúI0Þô/yƼò©¬öÜh6:®øpüŸðqgÌÂ̯ç¾ÞÚM‘«]ŽwꮊA6Ÿ Å­Ó'±¡ï3ƒi'“ìÈèáÞ£Tgþ` ºë'±²‘¹nEÄÙhJ¿mp;õƒ†éM¾=Ò_z[Ñï:¸ál²,¦“ØÉ?6áÏ[¡°+é‚¢oË~ë.ÖEy Ú‰æÊÊïc˜¿ýöÿÝßiô•Aü‡¥çÓ£ºïÓ÷­lqB‹»†¢µâáWm‰d$/Œ'¬ºê»–;¨å>èj%úõèxM<Ô—á?`¥†E‰jü®}¶6Ú_ –9°ô•¨'õ’yð7ñÝ`*RÑoð·öOLF¿ûJb4Ïî6¦ Qåô»­M•<žpÍu`iK›û¨0™!þã†ñ\T!:MˆÍ:ÇÏ&®oªË‡è° ˜À=P£ûô|@Ψtëfî…ÿ8K¿ ˜à8é@µ›Á¤xÀóîædÖÄN9 £íÌRïz_ˤq8wq¹QÑ{»ž™© yFR6‘5‡u{é_rkŸüªÖ93ÿ®ФÃêúCæÂ±‰xK¢*Eð+qöÜŸ‘*9ùÇBµåí"P¡ÝD§×TAº–L#ÒͺuÆbœJs_% ò_ÑŸÕ®ÀÈä¤ÛySrÒ«j)su³¿X¾B.?;k ò•a1΂FçrÁ*ûðoWm9oxà/ÄBÎêmS§’mZAþ±…¾¹µ’ŠFåZH‡õÌÌZ‰'šsq¬¢5~ùöù]X–+=Hÿ’¾Ì’8W]¢2nŒª(È‚Ömð«dt©ÎüÁôÖ*‚¿œÁü¨©Ìno—A96Œû’ MB&ØšÚæ¯îÍUÓŸyÁónsî~°V›Ù¯ê@ýHAüÇŸÖhû3ŠW¶p½¦+È [á&ZÏyj“ÁÖÎp¾²ÉìAæ¬ÐïyÎ"?31p0|kÒõ* ºÝÎx¶ÈTŽ?Ã;Õ°ß‚ºY0Þù©<=€µÿ(ïÂÄ=rûÌ?-cQ†€Pö‡?ÏCµàPëGý¹ºÙïT;Wú4¶µöYoÁ¯öËkäð%èÝRN.p_ñðçÃÜ'!2øUxŒjX{‹ ~•ýn-ÑV¤6~b̓Z!c Åßp ¾³þü¸]Ìm²èVT_m‹ÌùÀœÇZò lzÚïôRØzOâòqè ó3]¶ŠúÁêæf䦶pˆhå¾a]£óõ¨z=½Šhƒ]>ëͤ(s)YiSÿùœÏã`ŸdC4´#ådDò”qOT†Ù‹¡N‚­¥AVÕv`Lð¯àÏÍ2¬h UZú]š¯~'ìy}"æ· áùÎi´]~|'ª™Jzü­—à·UúÁÓ²0,«§9œ¬%•2]¹sý@e"©Zæ,㼕Ó}÷0Þó{ +ÙÝœ&gi‚ß͉-n »í§§¿ñ!^ÖÀ|æ-.$ùƒ?ÓèæyâÛEþÏßëŒÁþfªƒ‡u!Âtz\=CÑ:úóãøSàWU±ÙÍðÉàZã_N©›²ŸâŠß_Uä)þ6™ÿ4ýè_’}“§òF5ƒ ƒóÏKÂÏo¿*‚6ö*;þ]E}t^ÁVä¼ @GsÀ+;}ó˜Ï°ì[¬Dð5©ËËàzH½óH ¼„ ãŸT z‚Í¢Ûá)2°íø÷Î!²õdäI±Ð×ÌðØýÍ“jWÙž¼S¯™¤Tüê¤íö•·yÒ­‰®€±ùÓñw5˜Ý{÷¼HðîÜù©œ©ö`H äVYÍzaõ°S‘Ô¤§‡Ã”†gXÄ|ñ?™Ø”¹ ·QÌ¥É>™-ˆvþªvV¼C‡Q—œ÷);ïgî¡b£õ)µÉhrPIÒŽ+Ž rÚ™F°+5­Ä EÔ;¢­BøEN ã>…›õ×t7[ ¢1¾ïOO¡¹f£ýGÕýr´Å]Waø³º:“”sý„‡šJ®øTú<ùGk³ùGíeþ` }6L¾Ýê÷Ìÿ kþöýúû)ݹc^Ì̃žÑ™uþ|6ÈAê?b|gÿÝ­Ú£¹DFN¬\74¦ðÓïÂl"xÍgIð˜ßà{õ0Ò;¹™Fs,ÖcÑB–¦ÚqŽlÿØ-¢él*‚WXÿùÀÏ ½4ók»ƒ_ìǾçÕù6Ó©ì‹=9H<‹Hñ®/»‰9?æG—Œ}¢V(½ÚzµnözÑÈâ›Wä$ãöLjH aXËÕÖËõÔíÃlÇëƒíMf“‡7<+ÞΙ?8“=?0 ¹Ÿ}è+N5ŠÁ{´!kÛ ’´??¼· B/EŸÓXx§S×V¢EgÖúpâ4aN [£Í×/Êlê8–·øT&ªëó4‘½‡éªîò ^y.^i«å^NÅ׿5BÓ_½`b¹·H&ך h yVS01'‡ØŒÿh/ü°´½Éæ&a»ÿÀ‡d‚9Wx®}î77ðš©M1 ð«, C­±•x¶-üG_ð,§®a¢™ti¶£"³[Œ?Çóq0ªmè CbÏ“_ÈmÛ‘©lÁ‹€£é&Wo ÝÕff!]°ŠÓ¿½0Õs[Um~c ê™#‹6÷Ói‚O‡ÕÈŽøàr¼ÿr®ÊK „?Ÿ«âã+va÷oÀ÷¾S‰…^*È\fÅ6oTûÈòqßèÁý‡&Z«ÜƒÓÉ‹_p:…\SK°IsÁ¯zædp]·pmÃyà?ž’¹&e¥üöÍœª™f½oË1öªë>x¬%æYÔ\S`€à/ŸÀS°7YéuT±Þ¡sfVU¿º/LnRG¥é>‰çÉ?êßᮠÁ†×”d0ºNT!æ ^±ý;ÕMÈöÛáöÒ«ú«Ü—”ä!¹Á“˜kÜ·ó%˜ÖìsmëÕÝy êÛáÝw²Ë&LxZC6c»^ÒÍ}L»+{tf‰¹ð€à­²¬œèÞßí zÛJdÌ¿_9u9u-ÛÕ5 ê#9þ£%z³±væÙ>aºHúÌ×%Éjµ¥ÝÌSLÁ¹x!oºó6äŠ7~&QΟÌò±RQ-8O9Ç*N­’v_ú'î³[€_íQY©ñ²7’+¾…#Üü¤Ê«æÿJÿ«Ä BJŠÏZþÿØhx¢4Æ£Œ¨'>ꥸÛë´ÒÆxôW»z”¿)Ý7Ôöjv`6_`<=˜6SÓ—êgÀ´òH!SˆäFe÷ó u_LlÄÄòm@×úª˜‚‰0º¿¾Šámèš’£LmAýÕg8¢ô¢±ÌAâòè…ªb¡šÑãq>e+˜ø3øó“ä½Dà± Ÿî6ŽˆºØå¸¼Ã»ð©ˆž±=è@GžÑeA…fÓñyT Aöá>m•\E7¶Jd/yay[a‰3‚³¬‚KÈ Nr D¹Ì¯Ø¢ªfžÚn°‘‹ëìáa'CQ9e!·I¯—øÐ¤é«çS[ÁÙè–Œ~7¬Êœ#Ì<.s`f`ÅýðqññK X¡¶ú;Q¸ñ=¸Ì Þ£µd![Ð@`´¿Zÿö»L|z)ŽUgᜎq?â©)A{tÂŒNý ¶§qøH¬|?ò“xøhüæ+¡úðçwà?æàsR‚€õao“Ì”jþäVâë ì7ð™áÓ=Aÿ„YèMý`¢¿å¿}d72¼Ôh¶–½û«îÀj­GQ›eë|ðœìÖUˆîå[á{5²N§síµW½a~í §[ñVÅ[Wgà7FÓ͆ÿp0º±p©X_Ñt)ì}>TÁ‹øx‰µöËE¿a, ¶bAÝ 1FvPšÁø-æµ¼}5ˆMºoÄ£þ£Žk-ùGur›T“$@ß$,ê!ÿ‘BŸ°ëÔtkê1]sz‚ÿy™\5«u³Ö+É|޹TG\°.âC®SþÛü#9×ê8LÎð«y2°é¸ÖXoÊ ûƒ“Ò›ëmÿÑκÇÜÁô¹êlÍ£¿ãGlüêû“?cTVîÁóÎH‡Ç¬É\í~/ÀWD\²’[œ¦êÖó´ŽŠ<¬Ç${?õ#ÌÇcn!Qöpk‡Íd&ëWK³Šá jˆüÐh¦Òûz—¶KÄ+mþ\½+neEuy 'ö¤¯ã:øý©xôdqÏÉ :Ó—q6.KY599‡9õ'ü¼äöÛ¨ŒÍYó¯GçèqðçÉ]sÈÞ¾Z•ɱ*PÿqŒ~2¹]P´¤Rñ!¸Ýpë›sÒ—¾8nÃ¥~0º¾Xë>YB/®SW÷ý§ëËõdÆ>lG(Ãa×NkÕŒÉÆ&ã5õ ¾³ÿ•¯ö…Î×ôË ú_½Ò·ë_¨ÿ(&Êì"‘÷»ö™Ç(Hæ8‘þ»}ˆsÈ12þP?"» ´]Býyr³Wˆ‰aÝ„ôK/Ú%ßâÉ•C œItŸÄ Þï½DºeòÊe²µ˜Ö"A¾~Äx(j€–(µÿq”éˆÕrÖz†ÍzI<]Ž{ðŒ ˜µ“ùƒ›ebNéc°÷õx¢5ô lƒíZˆ•®Ã ®E¬/±fk‰œ ‘"œ»Ø×(A”ãÌâ;–”ε4÷Jãm,¢ü‚ìc1~Η¸ø6ñjüG–0óÍ[?!‹ñS3°ç7Ñqéø¥†ì°"YÀº;bNáñfqΰîBüq;¦jsoÜMô»t"Q¥`ˆšàãHÓc„¸< –"ŽüM¸àÆã熲û~ä ˜…ìâï(¡ÔnÒ±äg¶3èûš–Xõ|ï2£áàù±Aâû¢ueú* wP¶Í%–]ÁZ?ó÷^ºA‡œ?¸ÐøC¶ÇoeCQ»…=åŽo½8Ã8ÿ8SŠJЗ°S¤V‰Å· Gùµ{Ê´VÓýuÅq„MÜãÍ ëÑiy2ð’9‰h›\FMböJ+«}ÈþŠ¿(AE÷Låø÷¯`m7ù·Tfš¦±.Ø“Ž$:àõï£$K®þä ך'П†‰Hc5³çP;øywáRÊa¡ï‘¹Æ ˆÆ÷¨j9m.1*ØzgÄ\:¸=#_nÇ=÷6ï©Í0Û=È…bP‘·”¾—¬w‚_Aeÿ¬¢öÃÏ8ŒÍuI~u?ÚvZa½5™àZ"©î XuÁ¯ÚÁŒ¡&¯#ÙÐdö—šQÑ•×MxëÔøÊVTú§`âaQÔHµÌ‰îõ<ô³FLâGWÏ:kny.ít¶=G3€Êp>NýùrªI.Zo­Ÿð™%¹’8Ö"NSUY\Ît_ï'm‹HJ5r!Ö³­°´uèñU ¸ È„.P?†&ùˆ3O½>¸Ö|*t XUÔGâÇPý)Ï»ýÇ,ôˆ,|>1É ³žœK¥L——õ þà'/õçgÈHò9=RT2îŠ]¬ûD^çñ­PvüH——ˆ åî›òôALªº•_´œÿqþñu¦ þ£Š¨ÿpò̯Ž"ëŒqGOøõ燴KøÿñÝÉu‘S| >ñ«ð“õ™^Ä9‡ûyFäV$5RS0¦ãgüGZ9LVÒŸê+eWÓG®”iô»›?øU+¢§­yÖY«þãwµKñVnÖ¯lE ¦R ‘­„W¶vØ8Fþ1*`j…qn9ÇÆîî Rt›}¿£ïÆ;Vìî5ïÖÖÐç$§û.¶ïêØ…èVûÍ/2«Ñ§ï \ÛüG_>¯ÍüXá¬ø«‘ üª5÷ lz~,qì~¬Sa*Ït<”c…ö¡H:ÿÅðça! kµ%ú5éØ{ožÁ5jg,¼G3;d`ß½Zi½«Må®7¤ŸL Ô#e¨·€~÷7,û ÖK‡*éŒu7»³t ÉCe|S™à+ªÀ`U1'¹/·õç îú¦¢VGÓK8]J+¡¸jk²úXƒí8®ð 6“£Æ ¿: Â6€.—9ñ¬_ÉÐÕ-kÜŸXCXÄxåÀ7u«’Œe.¥koNü™—]Šœc5ʰîô—¿Ï Û^àW«ìN°Ý%¬ø×íø·r }oñQåG¹ë±7©½Zª“kÌ"3:Eß÷Y le][]†«¢«=FU¢Sãû'ú_=„‡º#7ónf¡Ûr±E¿Ôiºûd}¿zã¾ïß÷ÁcmýÛ—%Dcâ±J¬¹Žþí³é¨xþÃõó?vh;ŒøðçDó"Ÿ8I”{âl(uþ#—{×Ùg #6èýB™‰wi(õç#dê—H§»·Œ&ÙA´ŒÐŠP§›ä‹AèÛƒÒ“ UÆ 8Ë™z‹Ç;Íoè+ÖG`kKŒSäsá¤s–a>Á¬27Ëuá gúþã¹ôG¨´kámšj•Äh‘žóŽœÁj­e&ßÏ0+žäÄ`Q·Jò¥UØ##Üùc ª¶±¤ÝÉ®rö§ó¿‚(5K‘¤`§>ìó,ž4YMð¨Ï"O˜õ›µIúy™>r1þò0ñ[\öWŸü£𨆿OXê/xÐÅü– àXNOöåfMùÐxÊåúi/Œ«ò Jþ[xÉ]äjuÍÆ(nà ß$Ãl+ž€ãü®Êªqä‰C±óé¨Ãü,GÒÑàïËíÒ61á"Ó`Åû¢×ufÏwMÈŠòüÇqÎMâùä—à\s_³¿¾Ü›­Ìÿ¸bÉ5ÆÏò70µBØûeþ¨¾0}o˜i·.¯WAò‘ °xŸðPïă¼DÓýµð=ã=³3=Íòpã±k£x*ÓñEé¬jZN/ës• °«jÔŽ£b±0•ÇÑsuWùÉòÞê[‚îFüÙ 39Yäh»©¤*žL ²Õ›•ÎõÀ®çš@”òXè窞rú,Þ…­Ø¯Yj&íwS æTÜ7ïÀþ¡Ö˜ÎœÚ…`M'PXÝ¥2" Ú«ýL | Ûÿð`ª?ÚÑoäŠæB¨†“·~»…?jYõ ‡CÕ1øóÙô¿Ú)33Md8ú«VÖ`ª¼éL˜™y±SlOüÉi» Ým÷¢˜Á½ÂÉl‹þjÝ·å´ÜúIã3çþ"QDqk¿¹HÔãÄÕ¦ÿb;æŸ7‹éò¥É;æ=M´Ö%¥f>¬Â @1°’óU“®ICÜû{¯í…ï.Æ{EŸ"تô¦‡×5e.L¾XGÁÓÚ1ëêþn=Óä·à?ðœ[PC³¯c—¬â?<õ‚îD°~ÎLËzr6ýK¢2¿ö7f[E¦ÿn :?p=²‹À|\S\­ñOP'h¬vG®"ÿ(ò[Ap_ñïýwg¹ïÌ[-[˜Ñcx{z£-c~ívú—T± g:Ùz-%ý¯¦Œ«z}Wx ûþæùüBýGRüGjžx:á…§[NOÅ4ò«P¢ˆQÔ½ë`?Æ'e >¿ýnìBL9œúÁ;úï²Sý&ä¤{Äøó/Z]=ލEü¾<µ,J©Và½P•%^Þû™ß²œj¾"PÓƶøò㺨 .Yíæ¯'}‰Mõä+±?÷ÈoŠa—_É»²œî5ïÖ&È£DDåA¿r©sDäsÍTظæd4RE‰K¨ÍT¿ö%én¦ÂYÑËHRÒ7e?^"'™wqüÇKòÿ‚ <‰§v‘'ì¡çÔîÅ•úÁ/a\ìUÍSß' ¥zá?Ž“»ÅbåZØaGƒ[ ËÓ• ÿ(oÑXÞô ÜËY Cµäs#[ \ú¾Oœ”Að/ Åßʽ/Ãßé@2býãËâñèt¬ÓyæC±õÉô»˜¿¸Ê·6k»è_r‰Ÿ‚]Kȇ= ÁþOyÅ=(fÆÆ/BD< g?{ч³ÔÓyW?ûm¡ÿù{¶ÑF¶#oKN¼¾%ÏîàüÇ>õ™z‡}ôß½„ÿ¸ÂüórdÔgXÿßùMóA ÞJÙ;Äs¹ohêé<ð3“ðŽþÊtåÑüÇ(ø]ö'vWƺÅ×rsÝ÷àû÷ÃmÄæNß ¡ß}ot†ó#Ê/I^Ñ é¸ZHÿ«‰ä }ÐÅ&v] êV–ŽSwQ/%¢þã*׿Qý ¶—Nv= ¸dù3ìPÓŸð¿+͇àW ˜Íëàuþðç•íUÌìIÝ8ø/ø¬ª\µ/ލ*ñRÞ20n«Ó»Àå® ãþ ¢)/õƒcÐÄ6· þÒ*€]…Êõ'‹ôÁÚÀé—²S¥§j´púó²úãJkœª¼Ös‡èC®[ŸºŒÌtj€\\‚õb¿'ÙÏL[ œ,üùDÔÌ;ygšÉÄA°ãغ¯¸‹r³,QÓPäæôo V‡þí5`â‡ÐsÄ™Çò‚¢>¼Jo¦\%±‘]…ü,ËÁeîtçiŽy?°‚'2‚Þ™'`ã?Ø#ÙËd*QN¢NΊþŠÆ®Æö|ÕÆëÏüÁÎÖlƒ¯ÜKÜÔ‡§\YF„m qLÿןÆÖ§éVé#øÕZÿñu¿4öEDYú':þc-ýÛg€`]6n1{íwíu»vÂè uu sýw{Ó7ý¨8&ÓKCF¦IÙoØ?/_Á(DL¾ˆŽ¾y㿈β¡~^_@Ä:ðžôàW5#ÈŸëz]=«èãƒM*E]WM„ax!–a£}ˆYcbÿ° +þySßÝgõɬc¨° ¾ÄIωñײÖ¼ÒcpžbNÇq°¡™rL¸×|@Û$×Ë$Xù( r¶â}Ú1¢]¾ŠVö :©¡p ­Ìœ¢H8+N0ò£»jEžpþƒ?¢®p Y±PÉÔSРä%¾ÄægÁÃâš9e^ýCW}W›¢?¥ÉTfòžâž'"ƒk„'.ïLnþ†pø\½/üÇA²…ô2·Bí¿ë§Åäü‡ïäA´05ñEÙÉØöâS”%lïP|æBì]âšç­9[]ÀöÁV•û‘«*Šõ}ë½ËòA›SÍòmò bº óÏc±ö°%×ÔCÙT:ó‚þ÷Öxö|<‘æJìózõ+ªê±Ô²¿ãcoØÙDõçè®wBµ±î“ñdÀŠ~¦:ï6êá¤Üã·èôƒ®çÝxvçñZyð³ñ‡~Ôn²¢ßÂäÕ$®7ô ïòªŠ5•WMê ç6æ÷mÁãg Ñ¿ä6øÕWÁÛð#”y[v&3Y{Ø£îòd®Òëlµ 2¤œ)H(†ÚàoQÓ_ØòVWd ÷þº‚÷d²Užl{п‚Òú7ä Ѩÿhoͤ&ÛÏ*kûÙ÷³ÆÂx =GÖ±üj;¸jUÙé¾ÜRú#9Õ€o9u­™æ1±‡·l>ùFYtLÓèÇϵȾ`¥Òb4ú«[àW=©â/ÄYH`­æ4ÕBµ¨î—ú¡óŽÖÓ¼¡¶“ηò‚*=¡|jºåÎJýùê‡0­÷¦ÝÞÚk²š¡ÃØD®lòs§ä.·ÿXJ]¹7b&oiE¹ÄªÇôà1VX­È`‰å˜x͵Ÿ>ç~bê®?ûìa]$‚Ý~ÕŠ®ÌíTÞE•ïÈŸßGy¨ƒp?€}ð’é¤ïõ#FQG<Ókrvjy™^»È¸Eýyýû¼ã.ÍÏèÚ6lÂtìÏ,¦Q§²M‰H—ŒEÿ’Ôîó‘íyT Ò[¦ö}°™‚ü£¢þHŸIÿÝõt×)_Ð2„¢=¬U•^K%ú™»yÞ¿ç_6›«<ÃËb!ï•Ó[6#ŸÝ‘Sñ›ÂZ$È×÷1¿¶2Îé_âÌ¯Í ãQ [³wñGô,—ù>飜'Ch0ƒ¬òíÃýÚæñêpÈ4üYi! ;ÁxNge0à"èw#áùÖc!ˆÌáÜÅY†þ¡%3O7o`~² «\üê)ÙÇ,þQpù³Øè\ð…tÿo› ñ÷Fm ~ÿq™Ø}hNbƒŽüYgó糟à?ž£@[Ên}ðþäHÇñJ„¦é¸¦Ý3®IÝÒmPÄãÜÁšx°ܵê0e-ñ‰X½¸÷düÀïd yÐ_ÅÅîg…ÿð¦ÿnI."ãž\ÙY®¹%*µt|ÞOyŸŽO´¼þã-(×Tžõ:žõD×gÅ=°[Æ_=Çh&ðy¨Y"ÿˆ;¾«µ{šÿ±›Ø´:6σ.Xëù~d*ô¼ÁÎŽR/‰ž‘?‡x.WŒ2#UEøuj<|ÔeYɈ»Ç›{S?xÂ~OÏ«B° ³Ñ å ˜?xÿ‘Û5ꄃ>Ž'F'Þ„Çð;¥¹¦Þj§¹O톗™JÕÈoìJæª膪 bô›•4X†}j9­ñ\ÐõüaÿlòÑ<Å‘ŠÞ>Ì9÷B¿»(õƒ¥íÃÌÿØ6ÌŠƒ uhS3®VXêÏÈîåÚô/IA^t×lƒÿõÇeUøóÌÔ(G¾0‡¾W/Ñ <‡èfu BÏc{Ëuæßf€óÉÅ},iÎt¯—_¿fÄ À‡š5¬ÉærÑÅL¨ªÑµ$?Y‘'õƒé\[íÃv|Wdìýq¼Ügk$UüiðѨ¼g¶d~m ÷õ }¯ˆEdVœ·á©Z ÚPÞô­˜úÑÔ*-ìþ*4’uÅ·µªÁÒx °ÎmÕ¿ºÏÛ¬c7|™ômƒ“tþD»9OÎ<²²rµ•ÐõeYk;iŽv-­ëŽë]Ý5Öö¢þ£Š=}ñjë6ˆiÕd¹u9AŤï·ÿ‹§%ÿ˜á¾3ïé¼o¸?û¾mØú&=øUyøóûzeV9¢¥2&žÆã ^éûælÔ“A®²Ñ+¶1 ûlè=¦à?ŽÊä2¾üj$2Ôwí³õƒEÌùÄ Î,ìOb.<ï-}ƒlHNrX¦ç©!ÚEhÅhz =3õç[@Xúc¹.‚_Í…Á=$V?ì{ÉLö9*G‹ˆÔÜûWEiЗ8Øõíæ6¡ëœÌØÐ›XÄW°ÓE`T"›ÏåÄôßݬ•;àÚspÜþœòExàöÄ=cÀb²×B¿«“)¯&:Ž.ÿ1›üÃá§ûÀr\…ÍŒ¯+‰}JK$¾äè9X),PÀ¢2³~/Œƒ³Z믿•YÉ&bÏ÷ƒ^EF1Õ \w´¶¢rÆÅäa;¸úçìñ-üytZG”3DO¥Ó׿ü +Æo§a7IÕ~3’¬$¢XÓ©SË…­ï‚'ˆí*ÈÞ2zâü}ƒ[ÉwÈÜ£Ù`^™Á¯P?.¥?þñŒ©ÍTDó“QP93«æ½ï2çq–¼Í«Ô&…|wgåX¦ì`üûa7¯±Ú*<ønø…\tJ?I|ZžL!‡Uý®£¿Š‰5M‡øwÊ™ÿÒø¶™—¸µ&õ+øÓŸ§1…%©ÁW¦¡7õ±¢Ñ¯ï9ìIUë(Sz•‰J@?ªó¼Ð²Ö`þà‚`§û­Ñ?ý”(¿(yÅ0åL,_aí†=ˆŒ=]i—q¥sUuùPÁ^–ÿ‘jÀÔ“e|ï<5ˈI~]ƒ­÷^LÄo¿Áçwæ*6šÔ~k Öjò‹p™ñíä##©?ßÃ_ ¾û"Þê5÷`9šåÀ÷¹%Uhí8¿“Yoˆ^Qé#›Q#¹ÜþÀ½ûúóÅxßÄð —¨ìî ãfe7S=ñ'ÁÚ~UuÌñî‡\I?jÄàŽøñ–µ¶VšsÄpªKŠ€+åƒÿXi¤[ËfÐ&áÊFýà:h m/ˆLÀ0m"ÿè!SÒ¯âÛ‚ïµã™FŸÿÛÚ zQÇÊ„U? ë¡Á¡Œ±¯Øƒð$+`ùûRÍïEuüYüG9ªD·â?¢ž•KÜþc‘~Kœ“Ëͬ7‘^)»­l®/(‰ÛQ)Жy ¼òwÝ´S>AÕrÕ#Ãéim´.“û«9e?f’™vúíþ¯þN©Ï â?®ƒí‡×Ñ"¬ß¬à·uÔºUáϵti“–ØGÿ’GÆkj|ÂúÁP¿¾ë08€×ÖÑYŸ àë†ëëêSËx(îS¹Ÿg¨ „øbð«̯Í>ÝŒE…oiæán£^*WË”œ†î!:2„XÀýég­¾žO [9ŽM¢S;Óf㟿šIN2›èÞƒK¿¡ŠˆÿXoœå99Q‰ÚNÁ"T圗Æ:­fåÖæXÒ蔾Сsš ŽA¸·äƒ%Új椿C§ìäW@ÒVÃ!ÕÆÊy♊«WÆ~ " 5X´Ôáú¹F>2•žìÄ?’ ýUìôk"ðœÔ¨½d•3Øù£õç ˆìsÉTú û úá:m¼~RV7¹Gàwóq§š²2¹‚S0»‘ÞáìÁ‡œ ïzC.ò”úD"4Dì B¯å;"òSøDn\gf²¥|嶨(txÙ_@r&³§N#>8÷#](þc|[tyþc:Ün*ì};¼ÑïàEcÙUlfRìãr?õŠ5ß±žœbwäþcwÐ åã¡Æp´}­ð?Aø+’[6Ã^—¡V$+=sbÓ#/õƒT‰íÇ–ÆBG»_åÏŸfÙ-Äé~eÄá~Í {Øò™hÊnRé-¬ØÔNÌ%_LW½öôQ?9/­)F¶ðˆú<ºÿ =‚R;[½küJŒâ&—›kúýÇì…‰Îi-ú«ô.§~ð$óDò…™ JŽþÜc#r£z0¯EÉãZ‡"ÿXÎ]=qfŽtíJÊ._k§Œ·ò5:`Ê;¸¾jDIÈל>~ÏDqñ‚jŠ©¼Yžü¶nÄ ±¨£Qä"ÿ±‚þ%‘åq8£yØ­døˆAx4[hzê€Ý, Rˆ÷±oðX«Yg:'i žÿ²¸ô7ÿ1Ùø]:Ú²èÔn)ö'Z~µœža\mò«41y}¢{ªæá/¢gM®üÇ5ã“,×-N<¾–Äé;–|@Â=Of6Æv+.YòRøUDÛEQ>ù«·0 Nw…—úŠ`÷ð‘Q“»|þ«»Öfø¼àWË©Ó{ʼœtüj|šZô¢äaȵғ‡D‘ÖÜâ>…Cé™Gy *Zµ™F»Ðô¦Ë°rUÇW¬"C0à?SU‘™üã*;ý„ºé3è)è¹n‹Ž‡?ÄPßÒ­Þ( HwÉD+?XØ]»;š)&£¿ŠIÍpQ&L§ƒõÎúv±ü*ŠœFR÷óŒÈÂ¥Œâ<·ù2väw39ohmý(ó£jÓÓdùGu&*ôþiE¥WÕ³ g²êðÏ’X‘A7~Àx8s¸¿H&Ýý&‰ˆä\§Ð_)ÑÔAP˜íD˜ûáfÁ¶ÞbÕgĈ%°³o¨P/„{Í Ð_m¡kXB”0µˆÃ˱£Dp Sàõ pÊNðUXiüÇn|AæpõWMŒ¬Ðž f»K%ÎÍÿ¿gΪó†$þ$Vü2ùGj³üyXýÛWâ?öËêÖøgì¼ÃG4"._~õ t¿µjŒºŠ¯[޽c¿“üŸd²PçGÝÁâ%c(¡ö<…é¼™U¸ÖÓÜÉ3Ì”-*ž¢UÎ5Åÿõ%j°™#o¡JŠÿ˜B¿ƒ˜ò,ýKœž½ñAÞ{“] @Ï;@U…çiÇLŠÿ˜M?òç\½3-n!ß_DNà+.êÝ–þ:;ƒPŸ÷pöCÃ:bßs( wšÕ@³túînEszŸÊŠ}Ô^—¹oŽeq¡Ôê­žƒ9½f¢Y—Oú¦qO–Á_•Çw,C¼€hc쮲© h[÷£j:jßåwÕ"ÿX@6“väÕST|,ÌÓ U^Îo ÁÚ›I°¶óU{µ%ê*øó 6Sé&XiW×Lk‰jOo­§dqѱÎïñ{ðÎÓÍ*¢_°î½Š—ô' X¨fƒ†­¢z¡ÙÀ;•Ô5né 8ÁêMÿ«8ö[—ÒØûËä‘-4µ Ïî^¯&þ£"žm,ÑDc¿¬tˆˆBÿÄI¶IÝÜøó° ÉÓ}0¾¸'Ó5¶+Ì¥ûÊi¼sUÜ\à~‰=ôýFT<àU0Ìl–/9rc|Sbúª·§^p¸ÕÛþÀ”X/þ?3|÷:<‚ó‰lû‹ wŒúbô;ú¶à}í˜x% ‘ã †ó¦ÜiÖ¢ãz9úìN°3ÙÑé«õ•ë­..“k ÐͽZæôVCî¡–&Øèñ þc¾þ üj™ñJr™ˆéóíñL»@öâIþÒÀ%"ås™ä?¨žøÝÌ;Yk]#O_+·ñt룆Ìú¯äÉÐ_V5¿Ðòè¡Õj}»sÿô÷cú—D À¯šŠÛzmîö:-#ê«iÆ}ã-U%ß—]íÑ 1Q&!/¸.KSáz¥®új± %„.?&áÿi7!¿WÐ(å›$Ó`F› épZÿ±^67{˰ª¹Íö!:Â…\áÛçñÐ&§ã°¦Î\ðb° ÍÔ<ØÑGb#qÙ1bÖû23úîžrZ„ü‡¯qS”ÃZEÅoì'ʯ¿œX•ŽvÄÕ_°¢O`¢="†{Í«éuL ´FoÈv²¯íàiÔ¸qÕ…U,kiÔ1oåoÄ÷]ÌŒáöOìÄ};‰ýmK¼ëôžîÅÿR¢Ô,«j¹¾g¿»Xɱ»×AkÒÃþ¥ÔCëvèÜ=/m²~@%šŸÁŽ®Á£hdàzšÝV`Vi{õoäVæƒç¸‚¾Ï|–¯F`lúí)hÚ#ú·¿ƒ?Ï€çbÞ#>);öZÐ6.vg3(êsò ¼Y“È>z7¸à?"å¥ ÅŒ†Qv†!ÿ òÍämp^øŒáØ9¡P5iRO1 ëžxÏg^i88Ö^ñB‰TŽ6†Énh“³ªãø…ªì¨3ž«ŠZ ~•†wÿ"~~´¡Eиn!SÔœÌÀW]VOÕù£ìâI?3œ™Ä#É׃^-SãȇÀUÄE»4lg‡•ÆÞÇüÚª£õþ#V4¼…†† 'èbýÕ3£x‰SIŸD¬'9é u{µþ¼?ö¹|mð«Õª=d?ƒ¯ÇÁ:'%ÿ8®Žð\š‡x[ö‰yä}9uMÀ×6™aã}ÐFmT½™§N§Ûx®!Ö¯ô¿ÊmŸ£.§º„Ã|7qöº »ÜW\CK­WE8—§Ð‚;VM.–­Ðïöƒþ‰º‡¹ÔŸß´ÒÚq©ú«ý÷³°Ó¡,î ;•™<$«ç7»Ja}Ÿ‘Œ‰W‰íÚXûÍU¢ZºØùvðåƒè_ò õî^þ?7u'ìëô¿þÊ™`• ²¿£á’¼eþ sìx÷;›/ñ ÍòV4øsêáÛg™mžî%ÅQa¥ ß|Ij Û¡LHbU¡ËÛÐhgêÍm¹Ùxé~â™\†÷˜Í-‡~7ŸË¦þ£ªß´öH¼cS—)‹+5õçMU5&­û1‡ñ¬uþc\Å;ô#lFéí¾âÿÞIõyz nõb¹Ÿã÷í"* dZmQ—z\Gí¶G«û±üê ýK"ÒË#ð7žÑŠt›ˆMÏ‰ÜæZYÌÕ'ã§}e):ç'1¿³{Uð«țÏKÌÐúV2½~Y÷“­Í!péI©h!Î?üÿÞh5ô&b1™æql_IlgGµìý¡ØB\¶ »ã'3 ¯Età ´°×½n\mÌq°¾¾äè2rTÌé_r ‹ü‹žNòµ<‰G ‰Šÿ}Õ#Ú æŸÔ <ò†ß_Äymk®À€½÷;+Û—“ZÑ<. 8Žû¶þ£™¹ý¥â¡8`¥|XÙ‡D@{¨‘§²P=âyÉHú³¿o+à++´…º¿s›Ûv§~±#ØÊ:f.>ǃÿNÿÙä3+É>v¢ëºu>AïºWFhs€ßjŒ÷Xü¼“ÕÈY_ÕÅ7<À6¬3‹é‰Ig¢9› OÕ’Œ'+ÚüóÚ#Ÿ|ÉN¼U]ÞóódHMX3Ý¡*X'v¥ÇøíÇt«ŸGŽäƒéØ)üõÀn]ühôWƒx~Yà"¼‰ÞWËážÎÑf‚?¿N^^¡×uø8üùrøŸ;Øç¯²ÝßæGI 6užÓŸkþã–9¬)©å£þ n|åÔœ€«ï` k4Þ#øÕuÔM½ñµÍGúÄ`§û…ñ+«ù™éÉSÆ€_1ïÀø`-cQ§·ÃÎI¿ŒÊ®áø“nôßõÃúFƒ xÀŸ_³+bÚó ± .Þì±-Vw‹I¥ øUKf)­è®åva˜êgD÷cÔfZøá£Àì¯{AÎÐMùÊÀ¬u5U]@汫 x·|òôÀ·uÇç¡úNúïÆ æÜ¢®¤8Î^ê¾SÁ›wr´Ö.®¨®Šez¹Oáú_e!vzFß"ÖÐŒ¶hÅ+1?ªs>zQžÍu‹î“/ñOãèî{†û9ü*!wưæ’;þ! ñèÛ´}Ì{JÇ©ë‹ÿxEOÎ!Ìÿ¨DbXÛÖ#ôaué:òŒ.ó­­<ö@»žuÒJa•$__N&›Š÷ñŠÜèögõ»ä3K°«yï[ÈÁôOLä ïdØEX뻾ë½+;=MÛÃT.¦–aÝyÖìÅY´ ˆRReò ºoÀÿÇRcõû»O–Áü(ËýÙ÷ýÚÇÚt&2M3*ÁußÓK²Ê.­”1“X‡Œóäß§¿:@w¼Žò%}Ÿn{w_±(ýÄ::)?az4#ŒÈ>3©ÈGâ)~àmò5e扗å;²=óÂu³VýÇG­²žAt#¢õÆÆ”$¾oÃÛ\†*€ÑøÃ0ͧe"òÓI²ž˜­í16Š–ø§þc.¬JuŠÑíyx¶DáÙ‰›Ë3D¥Â}6{µùô£O†oxн;D3+€-_ˆ-Dã‡Å/ª–€5!Èlž5ÂÓ_ 2r¡®jNd¿–0àŠs‰'ÇÞe®®ç _ćDB”È|$Ÿ9ŒJ»Ü¥ÍbþG u4íW>Ö¾OäM2|.þæXâêô8»Ì^V¡ßýEDWï‹>u~e0¶#2ªÓKíÖß—[FÿÝ$ø¢X­òàW7áZóTR’tÍÚˆ7ÉEÿŽÙè¯î’á,áY͆#éC ±†ùGC,9þ‰ˆO3ãqœùµ÷¹Ò xôõê¶JM7¤íL™(a ÿÈ•egjÐöVðëë™_Û3H·¾¿ŽÃZV¬(ñø0ì¤3{v Öòöu¢uÙZa}¡ÇeüG!jôFñ|Šƒ„#Ÿé¦  žû€Î2è]¢?Öê!§-'8Ñï`€gÕPÿIXóŽØ¬L®Ë¶‡«¹uYÕ¨ÿÈEÉ>h©vÇá Õmƒ­·[LáT¼%²èFçm^ þ£µ-›À¯áÙÊÐ;q#l÷ üÊ'ø”¦0ò͹—OÑ $´Fª½ò³{{õµRz5¼Ñ$îtküe]ú_Õ&ÞnÃdÀ©i÷¢?ˆ>öŠÞ¦¨ÃQG^„XáøóÈpJ‰U)0»©îõ Ðÿ*>Okf·TC…Ø+œ˜|£¬5ˆJBXæÙ>À?í™Ò©¯0­Tìà=z¼KôT/,»¯WèÇD,N}CÀé üA-Ëtõ¦Î¼¹úÃvul~fø«V_«óÏ›ƒ æ'ÿøHÔY‡÷±=oà^·ÿX¢ßï×j"©Mü®ÉT“®ß©tYJVyÝîC'™»Ôd†ïߦÒQ¥2ƒ}O´ü8õÇärª{²/d’»ÜWüßû ó?õWŸ´LaNooO/ñ©™÷QRT‚ÿ¨ÎÝÞ¦å3ã?|ŒÓzRý`x ûþ>úUõ‹ÝŒlŽOŒVäI[Å"&Ý ™8íá~žÁ~0ŒOâŸeºÎÄsª WшX~Ÿ>AÖGÕU§Fþ˜‡…±HÀ—?kõèŸX 8ûëW_M!о#QWí Sp–þ0 ¯¶""¥/þÃtEÁ/'ö–Dq%‰¼GïôO¾.@œîáçBª:ÿ¾OOm t#î´™˜¿ “O¢ÊDúû¿o+à+G˜0¶BæÇ6ÏG æ‹J ÑX=Ö(þŸÜì„ÿpê?â_¶Ã+9]G0 ê•ZE»?õïäq3*ÈY<Ø úÕ¸ºvܼþêÖ¾Ý,Fò¾ÅdÄ¿}$+8Šÿئ6tyÙ̈ ú[~OÙ=]&¡v K£øéTXã1h‚_SÛæ‹-ÿ“½·"^X*žü­â8üGçþ܇¼¢´:o[@–¶†x<9lêJfaÔÃça~Ô>¾ÿ¥VOòy°×e§ ÖꯛùŒ\«>¿3ûùƒë‰íBõžzFoë(©®8œ<ìDºUÁb€`= ›É5¬t üðk}|°'ýÊè†Ã^"…Iôo^¡r‘ŒÜ†'òÍíϹ;¬6Y³¬F g©™>žþ% éµÑ:¯æùã×+‘\åÏ!2žyÁæG9ý¯ÚÀÌL#ÚéF-`~¦dÆ÷¡¦»&]ͽ™ÛñÀʆ~w¹Ý’8ü>Õ%¹—?€ÛÅ£{vªÛó™ ݧ0ý¯Š‚ì» ÕÈ|#<ÍÞªýK2Ú+©’ïEý‡'ýÛŸS•8otØzHÎÛÊÍ}ÖY÷¡9Zæ ^ìۂϵ=ÂE͑ß/W å<ó;jÓo·.L¦#>µÇÑ»d5¢ý­JÔò×±,hu†®ÚEd«±@z»ýÇ4æR<•žÄK8s[ä²™›tfÎ󈊯ˆšxÆu ÿÑÚ^¬²»ÊÉŒfnïq²óMòQfu²«¼òûžoWó¿û;ºŒ!î;óÊÿ4ÿxÿH _^^!Ÿ/Æš[µêàWËèß~þW!+¬þyß¾ô#ªGÔíÄ݆يz}Ý_¬’YˆqÓŠÌâÿy ßnÄB7÷§Œ‰]hf~UáÏ‚_Õdþ 'Y‰ÅüÁ–îûô'C~,Áæ NÀ÷ÑAǤ¼`WŸˆÙÄÎ 8Š"ãY@ 1'ä‡òù*c•h^r)v3ñÓÏdþ£QæUNÛsùˆ?Ýeápw¸@›G?–ÔœÒ/fròÿfx¦œ02…òø› 4K™Žø ˆV)s¯‘6œ뢿ÚÇ=« ßs?ECz"üäd¹A›€kåO2µˆ¯_’ïD´0|géµýîsr¢Áø‰0Ù°Áðï@“Å\œŒï\Éo݇ݣ•|bÜå¾=×"‰«òš™M@ ¼[GòFÜ«ãfjЧ;¢ú+ÐâëAÔûvÊŽ*j^ ÅlÐöéå+r¶XñØì£wþcvé YR$,üM¬û%ðp¥Ç Á{4fÿ›…Ë8b‡3Œ_eSp¿”pÝC±•§ðáðà;©vHJÍÁ,{ž•ÐÚ¯Š3¿v5=¨â¨tj$~dñökžôÀÏ%–ˆDMè8ÿ¢qñò˱衞²§éÌõ¤ÿî|[ +@ŘڴpñGPwR%¹~—\o+ÄÐÿ‘\¥PýÀ¸|Í[Ì?_B%_V«'Ö/3ó&ª»˜Œ‹x<}æ‹Rÿ1 =×Á=DåEp,õªX‚bÙþÕ’-Í“j5HScÖËb} OÈCUÅA{ÖxýÛÏRÓ‚zñëì~;š©éjkþ¼¶VQoÍSœˆÅoˆ/ì&ã˜ý±é½íÏVQ¼î*4I÷ð_щõ³Z׈ùkY;Xo&þã§¼¥RæŸî'’^¿eD'ްÕP3³õÐü] 4«°òéìhœÚñÑpz¢< >q¨µÔÞ [vdeá>:³T˜™_;ÂýD^R?˜œèëÞÓÃêqétëžý3xZ}«{ô/>‡IõòãGêXs­<äï8§¥áášqºýÇpyÖ™²½ÈÕ“Çü²T†hõ ókëêç°fuM/柒_ewÑ B+¾eºÍ£*®%àßàk©éÔŸ_„SŸ‡õªcNçDíþArxa_ífc—øÌE©ÍþÃÑzÖ$¶þÿ+øÕi·¤c.3Ø‚ô k½åÚ¹Ýs1ôi°£•áy3‚³ä7”£Šøìdó=µ ó‰×ïáéw[Ù9¥uù·ûÈ4ÒÁÆNGŤEßø1€??ŒßÌgêèq‹$zXkúhÓàÏÓÀl5‡‘W•6ã¡×á§«a画©ì…mÞK6Œßu™œ¢ß/Çüó¡\î-,¾¯¼ÍõœE °–»TˆüÙ¶›œ9’l"¾ÍÁÏÄfç)¸‹o¤7*¬¿/·jS>@Y5„œ%¦º€ÇéOõïDvÔB,"ú™t¸}OÔ>[> Ó•ß»]DùÛ„’1ÌlÏî“â<ÁNÖ’—z“û­ â:1ÕóÁ¯RRŸ‘ þãxýGv=¦e˜ÓWÁ­½¦ùï <ÐÕ6 ÿ8†(¦eQ;1~(žÖckš-PÕ§'Ö²BÊZñ x‡òĦ19Øé~m4ÁÇŽf àí7c S…8Åok&wg b ׺J5!z>û&ùÍ´+é¼ÜÃù‹á z÷Pׯî?67RS7‘€;@€ü©„¨J§Ûcö$km@ÿvÍêĵ¶gwþ`X)ÀžŽËÀÑf¨xš¢|žÿ(Ío- ká?þD•þ»žÌgzle¦^|5ÌÂ,ë6=>êàé‚í¥"›+GƘ.ˆ~7—~аÉJž˜ÖQô½ÌEª&UxÅmêGjØ‘èn;Ž©~‘`h¼í}h½ ŒÎ̳wqýð«^îû'ô "g­21ƵYÎ6Ç¢ hFÍe/¦²:ÀÌ÷´ ÁŸ›ôÓª`·¦›ï*«¶ÕXà„µˆDj35â\ÿ¡aé¼ÁCgcUšÉõtd¹`OLJ°&PyYÔîâ:âJ #•Ó R»&ÑŸq9ÙÉSrøcr7oIFÔÐ%ÿýnr¼Ç0÷Ñôüÿqÿ]mó£Ö¥D.q3 ÿ¸¢5¥ŸÉ^þ"« ©Pùû;ô+·˜n]fJ‡ó|%û‰ÇF}!ùÇ:Yþ#þÃé°ñÿrÑÿ!Ycjž])S¢§(Dµü9ÙÜÜÎüÁü /Í"è?üAg3Šá'|@™Š`婢n”0-¹›¼‘ˆù±¬H„?Mf“"°Á]ÆiÑÕâ’wøð§ XBa÷åø~ækôDÉŽÞȧtŽ,î5?¿ZO=KüQ,«£òOÞ|ÁJ‹©Ú Êjh]?ìlJó@¸ùÇ£6Ö¾:(Í ¡Œä ʼnƒ£Á¤'²x`DZ³ûèÏô^ž¥õdaìr6oÈlàs°çÇð7‰Éàšƒ­Õ·jeÎ!ÿxH^²üj?Ù×a|èŸfyí¢ä£–HøË§Dø{ñ·GÍä\uñçøÊY¦yÍ1­íÄô™ÕhÖn‡íˆGÊ„ØàÝ¡øUôÑÏ*¾s¨ŒŽG¾ÐÏ0 ýîp¬Ñ"ø‚°ßŽ>Ö©'‹ƒ?XŒŸëÂýøîl©K!žô£3þcÞmYPauäͽß@3,Z°ÎÎü¨DÌ‘‰ Çaë·cOMfö¤ûkáôâ‹,ȳ,ÆüØ!pNíÆüÇ[*ú†ZÇA3^¡#º‚EneÝa>Hb…XôภšT?ŬòrVŒM >‹\/.<ÄR~ï!*6V²¬¢ƒT{ôW\ïíJp¸{Ñsy¡º*«°Žî¶§ùÿs\I†j÷Ûb ìg„Ã0%Ù/«bI7È"PƒÖjš¶Øø( k:¢­œˆ‚ê 6z>çéì¨@*J¢àAzÈá>›-šnIg‡!¦§êA×XÎ5h†M¸ô½dw­¤-®‡rûΑ1œ–Q”3Õ­(èÚo(¸êP[¾‡š¿×LûEijÃù$ÿpæ'öFÿúý] CÑïÎ×¶Ä;³2ñõHÞF?î:Ú<ò*Giú†3š9™ý´P½du¥ÖsG7âAFðçý¯B²{ëŒA²'ùc)ò‰Óª­!ùjz)¾ÃB/¡æm?XÌk¢ûZT¡WP:}D&`ÿ®À(g Îutˆ{øÕø‚qêµ]d4 ˆXnS?ÅJE®Ñ>IÓ`SW±K5¹_*U¥—†å_ jqN¥1+ØŠŒf ˜×‰\K —¢VÀxŸ¥üðµnÔB¤rEq5wÍoê€é.''/ž*>þä¾f¹O ¶Þ1ы߼Kéj7uÙ÷P™µËOÁüÁ¹Ìå;j½'§Qþ„<¬Ö%4bI,¼ùAô»Õ´üÇtÎok¸’t¨k§=ΖôE²$«€ÌµÆ®B¦p‹:Ž:ì´%Jéh¢«±rs¾ûÌäÒ·‰¦ü9Y¹-ºwŠf]•yµìE̯ífGsí¦gýg;óg‚$ǯ¸¬ô\I ºËÜ7Êü²‡ûz£ê[Dl¢ÐÒÄeÏÕ5¬Ç8úï‚3š†Nà ”ís^:À£ù¿FåÔ¯â?éïÄs¢Ï#ØæË‘Vj²¿íÔÏDfŠH»1ÝÈ^¹âѹ†]He£Òdµ=ÜîïÝ%éÃÉ/CÜS[žp_ñïƒD̯ <«7™ÕXÇó}»x¦Ñßè‹ü¢–¸¡;s%Öã?Vƒ`=6럴ïó˵ÙFcêàRQMQÊ\$Ò‹±èÄ|˜U[~¦½’ÞäŠà»jÄà‰/–¹ˆÇÑk¤¿,¦_Ð}èq÷F^—µˆ;†P”ÿùÀÏžác]ÂQó&ú,‹Íï†ÞdYñ@¼Àa΀Ÿl„WZ!‰Pþ±ÄØ/úa1ã`cvó§ü@2ÙéXˆvTzß‚½Hzâ"* ¿ÃÊJú'î dØLÇ´„Q‰Gü½̺YîMôùãÍÒË\OŽò.Ü*šñF~*ýÚáuþíy@ýËÃç&.w&Hjgø»KÖTnÝ’©™Ux·‚~ä‡þꬆ½_Gþq®;&žÍéÃÔ€ø»-±\õûïÉ÷7Ó¿â56z.ïîc#´šÖûZ|qMÆÂö¾„9/B–”\,w0‡l'¢ÒÛc qýžy?žUjêøÓ˜SC­ÿ˜©m6¢ÊÈôÁž cƒgÑœ¸n¨’ÃÊÜó`Ý+àÿ·¸êÄê yÌbëI1:GÃk¡þüw2ÂÝLœ=A-|«!Ï9]Ê5Èå CÓ mZ?rO–“;­ÀC] I¢ÿÕ ñ+¨æc°Ìêx££æeuÀšOÜyøž®Mø[àL+‰æ—cŸ³V-Nã²­Kô˜ZNÿÄäîýUÐòé•Í‚°W÷̦ø«úÔŒc>ÖxzѶGå~ îû1=s¢¾Ë„¥6Ö&ÖóRñ#•aˆ~ 2¿65ó?žƒü½Cý‘Ë:aN]Éã¤ýÊîÄ|ÙŠôû2]Gìí°èÙèð¸’ÊœôÄ÷ÿ¸³ÏâÚ¾þÌ™3gæÅÝÝÝÝŠ{¡§¸+-(…ww‡ E$¸w n!¸Kpÿ~“ûç4¹ ýž{oyî% pÞ3gf¶¬µöÞ ¬209Ék^Ó¿½ŒìéÞ“* ‡ÃhÎ3wK9ñíOäXõñ?+©s9į5hnÃÜ'wk`÷e È!²¬NTi•|äɘ-÷»ù̺'Wð†®+î+»[É\šËÊÆ»ÌÚêg×C|Œ‰ eè?MwuäúçáŸJ?‡ÿèÍSÛA}/ÃkÈÃ=’ÿ‘oo€:…dfa®¢²(‘mãóÏßé~øÔãå´ýµrâì‡eGµ%²áÏO¡¿Ž.*lB{ó¶QÖðAiüÛ̲Ïj|/Bž·÷âõcÁçcŸŠÉ6ô#x ?ñ=*¬ÊæÀhöO|FÉ„Æ0°•+äÃMÁ—ú¶5/û¸ÿwÁGÎÉ® 3;Ñ_…hÐÃm'Ô·ÛÄk£?±i>êàüx":cC+°ÇeTþ þOR8·0?ÅÜÏp¨Â|¹OÛ,½ñ’µéœQKÝwÙ8ûç…gjD¬ÞˆjÇrØÅ·æ¶(»PnUá"€ ‡É@WÄ)Ú«\Dtoñ;°BÛYu~NÄ”AÛO‡ØSò•YäU%ÑsuCŲ„þ%.ÕÛœH7K{õÎÞÇüV>‰°~ðŽÛ ÿ(Ã;YÖ•¼¨:°3àL÷Ì4r‘ËZŒõϢƓ= €?OlÞC·5t˜# þf.Ý|³°ZC,ÛzQÃçv»eUꂱ€;•úó¥(No€7;Ù‡S>_w߸õ·žõÞb‚tzþVÅç@mtŒlÏÓ,xFñí0¤¯@4‚ÈÊ¡8­ÃõgÃsu‚ñ~ƒ'í/—†»Óɘ¸]û×´Œm,þ×Q—&%Ç~µÒ’ø§š¢5“W§‚V‚y@œ?[uãJˆaVtãðFgQ9À'LVÍcôß=O~‘Ó&lU,ú·ÿЇë'ðeX<2Ÿ˜° ‡¹GsÌ"᦭ӿ智c±”ÿ®zWû.&>ÜÀö`^`¬Âµ‚þ»¯ñÃá+ž’m=ó¯–ʾßõQö1Â<ÝÙô¿:'GXoѬ¥e~ílú«¬‡Y¨½ž>ÔݺÃÜÌòÆN$_زÚFÅ5C¸Ç¢ú)Qüí6xbzð«ßŒfÕÓNFÿÝ•V#êÙKƒ_†OÏH=á2¬~<êߘÌco Q“­¿ ì4b’í?÷GíÐÌô€±˜H׫Yv^4\˜Ö;”Þð¶ÓÇ·S¢p(e}Gô¶Ÿçêúš=Òßí?ö‚_½’«xSs²åR¦á:Ç£ {cÍb¥ö&\U¡«–¯*Ó²Á^‡wyÌ¿¸+w±‹ú0>)ÿ'ó?22}0$W¾ 6RÇó÷·ìßýäþ㩾‡þ» ™_›Ÿ§uƒ–üj½ Ã¬Ê×M7Y£-°ÐÜ^—µÍ5FqæÍÒ½Œ}²Ñ×¢¬(æ}øw;sþ,¶pa_ÖËb¨f–0`–l¦?Ò—Ë.L`¹,óƒm4¦~W×+ê¯D?ìÇÞçÊD\è÷ÓªÖ¡Üÿ‹Ø”´ØÄ;Ì,ègÌŒj[ü¹£¿jŽmIʳµk\˜x§öjüGWØóS Fiá0^ȱѨ?÷ÓÓí:C<æ§&Çð$_茭cr&: @³X÷'Ù â{ó–HÅ)®ŰÈ5‰µ.`±r›ãÉŠ¢Ó,ŽÝ)¬>âOv  6q/Êeä‰"Yó‚¶Hÿ +Á‘o‚Y>GîFÏDVöÅ*¾ÀÆOÁÎÞæÓfâ;wà­‚d-«Òðѽs¬'àÏÈø h7ñ–›°ä…ø=?ç•{Ÿ[¶5$µÃCUõ~¸?Ö2Ya,²=ÿ±P[Mý ®ª! A½t[ó§9ÿ1=VJrŽbðò׉‰Ùc|µìj-ÏÒd0ª×Æýq¸;=Mt%·í fèÅm‡ êÄ5¡¿„E= ÆñˆéÇèß^ÑÚl3ðÉ]aK®¨ô¬ËvktóÑ``æ˜Õ™'â‡éCt1—Úm“Ø} }W1ih3qýQÕ ›={’ƒNV·ÈGF«*h›‰9aîÊ+Ñ‹“¸…îº~kº:nžVûÀÕ–ÓSëg& eawCævŸƒOYÿÑüj-ÝPöð ÇÁYJ„›?èLߌ‹Ç¿BV4KùbWPÓØ˜|æó£æÙåà{΢Áz¥&á .ᥛVR}6VÜCýyn^…ú03#‰4j±»0z=©ÅžAÏûfàW3ÐíÆ‡W¾Æd¿îÖ¯ÄþaΑk®P5¬kœæXr¸‘î;’H?!bó´>'jIgýn.4œÚ™9T}ä¶·P¡1äéþÃve¢ÿînú_ÁµX)Ñ_­¢šò/ufq¢î¯1qR~¢ù»ù„¾!¿š‰ìô®Vð)Í©s©Ä®nQA“‰Œæ ¹[qºÃ7¿Êg5¥¯ó)ráD¬'å·ÿ˜¥¿0žK_"›¹DSå&k¬+„ê<È'¼ùàWþ®vfæGuV%ÉBf ;>j=à:Mþ1МʛÓN®v_ñï‹4tµ ©ÿx¢åŠôíjOwÀ¯’ŠeÔV4žèNuß&-=ÓkçŠÔ$ùÊþíôºß¡¸MÄ$ØÂæ8*;ë?êÞÆZ™ýU £æWÎ?ÿ¤›°¬Kd),ÉTôW}ñõÜ{&IÊ´DÖuŒŸÃ¼a‘]ïfü&6ºcÙÖ`M¿qjCDßÞqë}ÊZƒ"8§fÐ '=wÆÅÚ¯"Ð_Í îŸ¨Ð©z‚æ$ÃÏvàß Ã §Wì-îGnîÌubõûøØø“x¹‰ lSÈŽïë×CÝQçËAâ'ÙŽ¬§4ÿQüÇe0Í¥d#ëÉ?baí×1'¢&v´ü¹¶ô ùâzÕ´æ<þ£¥îNÇ2ÞÀ,‚ßC|ï ~õý• ýî~5‘>IóèµÍ~Š÷ùεjYzR?8E} w¯‹ÉaV|(~cïfN2®õÄíÇÐ_¡¾Â?ÔC̵‚—t¢âôÀN/JðHÞ0ò^p@ǹæF0ëí4I/z|ýŽÿè`g@i¶ÔŽÂ8³íËßÃjL7¬ßÈó_Åâü 4!©yP.qûéúc㶜ƹÞÜh¶§þ<Ÿë þTXŸé_–iôGñÁ…\=í¾ô/©Fþ±Š{uƒÊÝ3ò(+ŽPß«odtº}‡{Lÿ¿¿Í¨/ żвýãú÷ÚrÝ«Eã[ãs°~w-þcyðüÚä{¿j¯§4oQ“ªŒæy0§ÉFB¦VÕ÷ëé_OÆ3Šˆ‚ažß¨!’bßæ‚UöÃ*<0†ÊÊú6øó–TpnF˜ÀlitÖŠ´*zrc8Vn­9«·Ÿî³ÉJã±MçˆH¯€o>”³©@ˆNÿ’KÂ×è„eÈÉ[·ËZ{Xš|ÈX8t,Yð«×²·lå7k»¨ÿȳ|éOøF²‚ÞìÒÿQF¤œZl¾·Û‡U¹#¢š>A|SÛž<æ$™A^P ï±û&èU.lí lâþd/¶ÕÏÌI|ŸX&Ñ#ëlySóÄTƒÃߌg;ÌÌoXi/³úÈn&ß¼Äþ¯d¯;°gø´ÑtKµðêXçn?¦~~ˆø1&°Fü'u›ÿ†ú^FkÊÔbj)Ÿò8Sþ•U½í\{Zg"ߟðÍ9› x¨r¨îR›ó‡$ø¿ÏÚq‡<4$¸ ¬Á"c¡ù³úÓŽÖ.ª/üÂ!fž®tö(Ø•—ðÓèr™>%žµ eˆƒ_ÕuŸßu퀑˜¨®=ÑÙCõ›²ÖŠIï«xô7ÌHg•^ö÷dH¹è¢Ã£t´/Ñu~üycX¾íÔ›~Æ¢”>nÿ1Oi<QÞÂÓ´‘YëôOü`/ãJ‡Ð«¸Jxðç«í®þö UµÀ,{+Þ Â:F†¼?UU)¹íËÿ®MAûåcèþqÿÄëÚoDô›DA£3xpaÖ\ªekÄ.qOÜ?õåC¢õûmš¨KUM2r†vô«JmìÒ»ëË©ÿh+ ÉÌFF‘ýëè,è­Çdikli%,o%ÙPï¡•PBì†o®mÎ ×.²UµTúsQ‹Xæ(1ef,Sk"ênø¤)ÄeyªžÈ†Dâ›å/ƦÈ õóÕð-°E…ˆinR.¬_>,×Äõ Íè²ò³šS‰ÿ33Cýÿ\ÿ±^fÅÊ?ÁvÁÆ%g€=Þ€ý¬D¬ù¥Ô."ðàQMÍËQöOì-âãœ.#‡¸ÞdXĬ NÀrêSò‚Ÿ.ÄâS5ÉîkòI9¤ù7-Ò—.ÕúR?X$ý4^ö"XÓsll5s”é¨CËayÚàñœêôÕôdŒƒ/Yɾ&ÿˆˆ?¿¢­¥T5ðGñõñ_ELÛV 5l"NßÑ_MŸÅ΃5è¨ãágÒF€_×V‰Ë†¤c-Ö4 h\Ø‹aDÁC`¿uÕŠµ‰ççÀg\€åš‡ŸÉª}È zx7KÌGÛ×ÃÌzåÔ€ß'k›O޹‡’ttÓÛkŸ¤£ÅYU/r„üä5=ðVªqXçKª}v<ÂÝéDtì«FWƒýyÁ€ô2ßÑ·SRC²B 'NÏñ½v,ìu+몳ܪ<ÙÂ<ÈrøóYff±8ÌŠOEMt §y꜎_‹Ôs¿º/ó›ÞœNð•\‰]Ý©×xŒ:j¾õ¶;+Ø[røOµ?V†y _î«óûjc&ll”ÎmÔ^þÆð«MÔæSA*¶ï;ò/z(~PÇÀdöÁ¸4W:­^Àà^„Ê?Jk™õ\`¤ xj×5–gäÌÈ»ð=ýw'‚¯}ÆÜ±û“é!‚ˆ|¹\ x¡<¨œúÁœ¦·{{Eè¿û%×Mü}K©¥F}ðÖ.ôo\ÇýÓN¶À.›ª½=(p³áé¤U &,;ëÞ1ëS{R/‡:fÅsÛˆ˜à±JØÞJîhçv"ëÈO¿Ýµhv_¡ä*Ëz ì”®ò0á -G¿û7ÒæI8(o¹ý‡—~‡ücOûVbŒŸdg+ þcUB£áÏý©dŸéºéògMö•ÛU™éT“èXó–|å‚ÜHf]Š·± ßÁ}ÿÁ/²ê#ôTä3ü‡ ó\Dÿ£ßksÐï®ÙŒÆF=7«\ÒÊŠb6ý·ÁŸGÇ–†|Z ýˆPnbïÓª‡ñŒþWËõKÆ*æ¼4î‰ì"ËWí³õƒi˜ÿ‘;ó-o|Ù@Ï!.œoE)•’!•ÈpB>?ò¯žjµ¨ìÍ;¹»ZT§5ÌãD5žhYû‚5¥GûLV7ÆF¾ŒûOvŠcÆÏXa©6(lñØœˆ=‰Í{F<]äÅ"v®/G¹Ã§ÔxƒÇ}‡µË‚ÿhÂS™žœkHY0  óˆÄ§ò“Òôß ™êìÞP˜/6‰:ð5‰ì÷‘e”QªœÛäCß“’¬Á©xôdzdR;a¯ïÈÏFfM†YÂýÍYm‡þ^Ò…Ø}9Ha˜ìñÁÛ©2¾ŽÇ{¯ÔI>c9oÒM”¼ÃðWßÈW"„[u/¦éz:lªÍ>Nó&oÍ/ËÞ¾ϣΘ©äz#Ý—FÓ j÷¤3Þ 5uü©ÉiöG€_yi§E^ùÌÁÚdzèK\7š3ût)¶ÚÆg”ƶ)ƒµY(¶WáåúbƒPkb‰ð*¾¢ƒl‹©~÷(ç~ƒ¿»•Ú²‚ Lëð"ÿ¨€u®Bÿ«%DÌ‚üÃDÇQ§$î -&ÀgÕTÇø{Ô8®“©} ?{é[uŽ"ž½^ú´r”¬Ü›h‡ÎŒUÈ2…ã?t£'Þè86¿4úÝ‘€ë¿ ûU9Y¶ŒòÞÌÕ&âSÁÀÄÞmÁÖ/#ÞÂ^½ðs?ð¥%ÿ@ îÔÅ|""«õû²ñZ"&×ô ϵ~$3ö<šjìªéLå<óΜr…ÿÈÍTƒwÆKME²Ë•Úú,™]½ÇwŒ*¬­«Ç þˆ•ïhŽTŸÝ :›•¿FtÜ/Z‹iaá­³³»@,þ&y‹ †3œÐld±xhòÑ믹\n¼I™IÍýlò“ÈrR ¿ú$ÇDˆ_ ¿zn‘»8zÝ4ðÃð £É?ú€Ýñ³9ŸN()­j‚5«ú^ øRw,ߟœgiõ˜Þ[QçVÄ#'ëÃÜ•G¢ÑøQ|mfr/åÍj»ÁD®€‰ýJÌÛÕÍÕØåE­ `÷Š‹ÂxþÊßä…N¤ª1<Ìz'ŒÅ(6løázøË§èw¯ÀÉL±Žã#,êüJQ—@¶Ÿº†Ò8Ž[%È@üP´=VE¬¥ê´Ìà^¯‚–[¯†òp4Ùr½q0?£‚û·çGo5„9 kÁ‰*Pïýþ£ õšì¦8Y\+*ORYãðu½TíPó£2é›Å+³2ìÃx3—¥©QÆøá:ôÇmKVÔ ÅU9âýýøÌ˜ìð^*-?€ç{ëí oiKÍrHG™ÔÔ¡¹ðxó­ÊG;•þ% ìt®avRz^-¤ò¼1¹Ò%fH¤;ã »2:­–D gˆqÒ-;ŠÙ€?ºËsyôê,ùvc2ª„Ìžßrø¥EÛÇ•’ùµéCÙ^¥G…5Dlõ‘wÏé¿û#j²BTðÿ/ø·Ú`=dÖÙsòOáÞ„è~{MHGôöâ­¸*–êéxîkdÍb=Ý׃ŠíîBÁÏ_[ RËóô.¹,ýe=WýéwxÏXÁôÁ³ÆSQP8Nôÿ+%žƒRí–Éy瀇e#ÿ(&€Ÿì¡¢E–“Ǩ­0£1шˆ¶=,u]¬g¦ÑÕ3ïã‰0“3?ZO£œÑšÿ1Gô1€…bÚá<‘9‰Þƒ„­áKõÇiPÖØ°'a~ÊD¹C]Ç´§·ôäý¬4™®UÈüÑBÖ(¨¡.ƒ_Ic©¢Xq¹hŽÿøäôSÏ ^S‰ý¤æí/³`*<Ó.²…Wø§¼håп=M$k×Öë7e2ðŸeàs»Ñ®e¿u%ƒiÁ;:Õô潊MCTï‹·ÚŽ‡kn–Źnt½¶ñõ"ý¸±ážü«Ìd–5ð?UaƒOŒ<àW½ÉO¦ð†ýʯ˜ø7gþà÷›²ì6ÍW|/ß™y±õ•‰Þ?á;¦qWr_µ¤ÖE°¨ïÈ=V‚ÎnqœËÞÛá©}˜F¾öw¤h ÛsËÁÿ΀»Õ”£x«Žö9ù8ýÛ€\]¥ö¡ꦪp*™ñž±ÎkUajV…;Ãóâ:D2˜µdD­¸&ÉNâ ,¥"ï5~ñì9öØ÷Fô4Y~Udh³G~T‚TacaLäÄor}5‰Ú¦áq=¬Éèw'¢ßÍízŽk&Q}4¨·Ù<üÇU²3OðœßÌ’FŸìœb\é(®?ñÌ qzd¾V‡éXÛ:¢ô€úóÒàuÇÁ¯ö£~J>ÓŽ3éˆ; #ôF5VCä ÷Íè¨ýªwÃ|Ç©ü̉t&ŸžAa_ûÕšnò¾äÛìb~Tkz >CõTTŸëv¡GËv÷@†à…ôBba-µÊLi0×3˜­Ö ½Uú ŒE,]ñ&ÑÛz¢æ=ŽBlþ#Úƒ‡Ô~îÁF|+—¸ïH*æÍÆ!ž(éðŠê–nn³r¡(ìú‘¹$¬‘ð­Ð‡‚?…šmó£ÎZY¬"œ¢/O´N´z^z»óú{üÇtòÙD%«äE«"w±U޼g÷»ÝùWíÔ®¢öA¦Éw±§€_ͰîÃÀÈ ÜBÜ“òˆûÿ{_L¯íâ>™OZVÝt÷u»ø¨ ÐïèMÄSq]LÒs±Ê&-ó?Z‹a—ž{¾j¹³ÚüÇ>sôÉkœõô¾úAfž3&'ÅÓàOˆþ’©ðié:“ ÿ‘’8µ‰å㊠`ÊsÐb½’ ¤Íùw™ŸÆb9BüÆ^Ô§“À‰Œú`BþD¤g¨šß'»Ë´Æìhlp©èhT Óˆà§ðNŸ‡óøvå,Ã,üÇAll"êÏŸÉ.2lÍoD‹Ÿ£â"X£¦ødj ^®+9R/ó*ñþ/°Ã·ÉszcI{€´0Î}úwÿyˆÆx²VdU¼EÁýªœLŒäQÏù3*Ïð:,uº¶4 êÙ#Y3@Û©_–Ñ ÌÅS:ÝP’°ÖœYS|JGÓ‹D^äèš¶ðkŸDg(«c'Ð3¢ß=Ãií‡>Œ,CmJe4)¥Õ;X÷ƒFJ¸åaèX=Èð§QË‘ üJâG¼"ðÞà¥yä[ìi²ø‹ÁàÊ àybë2¨Ãä/-ˆ–Waã¡E:bnâO‡ów~6ýÀ¯Â{¸v¢¬Å3R¼g!þá-s?5l‡UVjÆ¡A= ~õ„yy%‰œÛªœéPà)Øß›²àß”v…g!üêkrªQj*Û™~Ÿ¶ˆ¼á/Ë´{ØI±Ïµà?Vc-ó`ínU=T~–—èdBßgiŒfµctÍ©ˆÎi qñ-ú'n±6ªòV3ЗäLPMáÚÈ4z0ÌWˆéÓ€9]âZ¨d^©Â±…†ЇëxµøØ#æax޵ôªòT-è¯>¤èýÛwÀ”ûQÓÅnpÂãìþ2þc€ê'ϸ·÷½Ö”ú7pç÷ÍÞ¨¹`ÿÉ¿Ðܼy*VLE×Ãd97ÉE  kÊ'Ç+AdóFþæ^/®~þ< éø3à^æUùNuØÑ%î7h¥f ÂJcÏ&ÿøŒ~·5Lnø¨÷\ï^êφÊ?L}¯‘¥Fâ’cê¡ìg®¦ãH[üQ?r…ÃÌÙ=M¯®œ¬šŽzÇèÆ&pJZõȼ·‚Ÿ+öá+Wºý‡Ó¿Dã]_A ´Ò,ß›®å̯=iå°[R?8ÕõÔ•ƒ‰ôõìvª†ë{Š®‘Öðî]r61LzꇲüOú'~ÖÆ2öËQ?EùÒÇìËO£÷û˜ø ú¯"·‘Ò8ÜÃ{—Vþ|¼Ø~7ßß2ü¿ê&m±h ÚðíwqzKå6Æë3ôÆ%ØóÇÆ#ÊÊé°ë§‰Ñ±`ÅØ-“9Ùõ·ôoï@O¬¥¨rÒše£™PÝtS44Wñþué€÷]½>m8óÃN¡¢žä‚)ë!ô°» ýŸxltb­TÁº–  L9U%"›0Ì¿›/¨‚(*#à~«F£ÿî1m)Y[rìî32šûä!ۉʻòÿÎdÜÆêŠÈñðç ÌmðçEd\Å—vyÈ/~ý?Á ©À¯ pÍà… áÆæÝÚŽ'Úö}EÊ]yܰÐÚ}ù×a_® Óýd¢Ô-X ‹ÔÜPMˆwìkÖ Æ–â?>òóYÄöóù}/¼Íf^iÂ.üÝcí™X//QgvÏá…§ÿSŒl¦ô5òZ‹yûsªÕøÏvÜ— è–ãóÉ7"ðèwOj°Ä£@ùâÏõoNWýqdZɽʢ?x ÒsT>Î<0¶vx®ræ_ÆÙ¿=Ý—Åt?R?²û\VíƒC‰Jí º©²Ðü ½Fõ…úÉÊOý`aìwZÐ’ú îÞJ˜þ†TšF<žß)fa8âöê5ŒˆàÕ@¼FÁ[Œµ¬Ùð 'ÉcåcSWþž åˆê –SÃüªJØ9¾„Fw2Ó@¢‰‚T ãŒüè¬~&;£5ÆÞ ¢ÓUÔkM?FòíÐxõþc5×>ì®ûc)gõœü» ~ëˆùNù3å¤. LËpyƒáï³vaýïhö5|rþwtê8u¨¢³¾ûç£þ£;¦^šß¨ýª­<*ÿ¢—Ç6ô»¿ÁÉ÷'Ó’vUøó1ô/ùƒúóÔvm*ÛƒìÅÀcU€I#§¹×{Æ,¡l°"&§s[ô.1ÚÂ`u¥GdjfEõdâ`×yð«®TL¹:ÊÔr›IWAàWÕKîžS“‘XÖw?Õ›µê³£dïc>QÓˆÖFZ]³©¹üÙŽ‰zk'ýKÚØEíÛÔô£blW;k©•Ù*¡¤ÚHÌT€nÿÑU7å%9ß²=J'9 þü:ßË Š˜Ä5N²Ë»¾‰qÛîB¿•è¯êÂη#+¼ ªºM®åݬÀsW†(Ü—þÿâ±6\ÿÓ}2ŽÿÐÜß}݇ßÔFƒ_ý&9ÁøÕJMP2™ô;zª¿½aÿ~õÕäÕèL5l.s‡QÈX¦OÔ×;áσŒ¢˜HþUûtÑÿ: ÏAJâÝaÔ¶dÌ)ýl‚~w…tæ×Ö2œ™WÑøOÏWû±üªÑo?Pœ_èâ=\øQé1YõÕ|ùs´êÏ׊uä¿Cxc¡šz‚\ÂZN¿—d í`} 2Õ)« øûngkÉ­2 >ç3H•Ã|¯&Ûèƒ÷Âs´$®®«ÁÅ/„og‰Ôùïk9?i* ’ µ!ðÁ$¢®êèt±c¥±P6{öY_ [öá3¨nüHµqº§tê€ga›ýAw£ç؎ذ¿9¬àx,YØ2ü¦Ó{Ì?ÁæÞRÿ±GÞÁ¿@¾¶™»š‡Óâ?Šâ¡ŠÊ‰†‹hw®ã¸;¿ã àßâs®o#ðãµ£"‘tÐ=ú}ðož°^WþMFúßð'¾ÜéüÔJ¯SwÔð»Í\Ã<²»?ñ {éŸ*FQð+|Ån’±ÌÀmT§À- ÉéÖÉõµ¨©+¡Iìa>W?É̦'ã•ÁûæÂŸ‚_ë]Õ¾@?”†t3žK³XSø}X{IätP.rûéúu:)Ì"fZþ›lfúÊj¼Ç ÉödZÕÁ¯ÞÁ¯ô²««LÔzSç¸ÿ±Ÿ^kyÛÍU•ûÜWüßûâ31áî'!P+F§ÜöéO´‘àW½DLòzfVñÓ”˜.ÆÐëºà]_µìðè2`Wqaò0Í:›áM¥ãc9þã¢ñR$üJýîMÝ6s˜À°ºÚòøoØÜÆ0Y>DïäÑ쟨éô˜ðÓ°§©Æ>EÿÄõ VÛ¨\ ޲ MD”H3d#DùůkbĦ x¶Ö‘‘æ#ê*eŽÃÞ_Ó¹ Ò ïöAbóåü(ïÍl͇zÈ4XùûØÑ«p4k©VjŸàa~K„ö¬ÈÉ?z:u1“Òm=ò9R[dùêF~µ?‘ ¬µvø8|i-Ÿ@®Ö5mÃN^A'–ܨ¸/’5wÓasƒÌ ¼´é8ñÛ'Ù Æ&ÓŹSw‰ÜiîV;ð;½`Ÿƒ”š_Va?jÖÌ•zFl?•m rdIEÈßËNßÓ…¯ÉXuɬÇê!ýd#ë>ùUyºz ±æÛ«é„•{ïk7#;‚º«¾¸¹B:vUƒ,l†(2QUðÞ¬¥Þµ¤³ÞbM:âß^ZŸá¡WèŒ@9už™'±\ØáJ&@å·‡Yñ¬ °= ¬-äì‹eÞPõ‰èƒ kÒŒèçžo"ó£ŠÐ÷=LG üäò·~(2¤³Õ•üaµ‹n5Íɲwµe%>Ü!=Üþc‰~\e1Ð*<Â/ÒÏÊCÅÌ~«êÝ»L;iawt=½jLý` •ÕÕÈKv²Õzɳ¾K.æé®€ž¥üÿd~Ô;m‰>Àý¾ëh‹þ©þê®6U©ÿ,’2ð!xɵb* ÈqQÏù•ý·h‹¨?¿.ÓüªPá[ÚØ‹Òxµ±YV¡ÉKa‰lî]G`\þö£ ý Ú]™o= ýU_üÇ }1úÝSÔK¤“lc„t(øÛ?õƒTÇ £ŒíFâËbð½x*ú˜—ŒnØü‹ä”AFRÞÏXêßEöåB±Åpæ×æáÞ†=.‡\ º»ÝƒÂ0´I±{ä$¹,Êk^Äü-臋`ã«¶Â§åÆŽŃ”…¾j6#gx*À«ô4™£ÅŠÍE.|bc¼s‚õWÅxþcƒ‡·cªÅ;v¹ÐyŠað΀äÄ1“2#ñM$—ºƒ 1ÛdYüãjžyò…çø±ÄåE™ÕÌìCÄùˆº,³/J”뜰7H”f¼`ŧè¯öȧ0¡—ñâ{ÀºÒc%Ã/eQ·Í’r,þc;6¯¤šAþᨩÒï¼'΋ÿK™¤ò~Ö<3ÞðO<Æ$üÇXÿçœAo¥OaÏ‚±e!ŸÇÊO硜x Ÿ ·Ã>b üV,>Š%o]ðÀËÉn¶ç‚??â 0(mkYMˆ˜Û`YÒ¡¬êZsOÑÿFN w_nŠ@PÑaX ¼ÇDð+jh¨dOaÍSý¬Ûô ‰CTî Vˆœ7qÕùQÆÞ„_KþQücX˜oƒÀN#‡ÉM0 ²ÿ±Ø:lùcÏ{ÀÔpIWe×||[M’'T@¦Ç+üËþ®§YÍ«0^n¬¿zÆ=k#>ßÜÃüó¥XÀ½`^ºk›]›¾´™ìw\m£¦:–µ-G-r™·°%Èz®Ë¬îýUÔòê%9í™à¯uX­ƒÜ&ë¡DM_©áte\†ÿÈJÎqÎR}ùŒ£øg~ÔOx÷œüÞ¦‘RM—J_/îã‰îqOXoÌF³+ü‡ínßdÕ; ýK`»Yu&üù%ôWìøV~¸—T\ÁsõbNGØý—†>1ÍoˆÊZš”Í»¶˜Ž‡Ðÿ®GIüȺÂôÁ~t­zH–4ÁªkC«®J‚¢¾epžìÊøèÆS9Œ§~ïXK´Ê]t¼¢zßE.ô¤³ëxb ú£,¢ÿU7|Ýp¼óüÿžçvœymUüÒ¿ýƒ¶º¼/'óŽÊš<×&Ò?ñW!Œ$ÆMÝén¸Is1}…8*^ñýÎ/­ßjE9T«Ò¼*Kã?’ûõ1ðVgQb_AõžŒ&Z ýß_º¢§C4OÑ Ín9}hüä7e:jzÚ„Ct#[ý=µÄFs3qwGlûUú'nFOôÈèµ;‹È€å¹O·ÜöƆÈ õó¿Äj¼ÑpØŠ  >tLzJ|2&í_ýw߸ŃráýNFyÍS¨ÿØ%3`Ë__Âòφµøÿá…ú§žº"°œ©ØÅ/f)£P+¶%¹¦Î0 PÔ¦* ŠŸ½ øÕS<7HØvtKDZÞEèVU=Rt5\ÛYTbhÕ)Ц7òGPO0µØªŽ9„:„ûxMO|’ùÇ 8ê«æpùVDT“t\;&ƒ_Uâ,‹ÿ ®V•»‡ØË³Ž\hÄ´6€Í”WKð£°)赜‚sMÿDrRy^g)öÇé_2œÌh we(߀¥ŸFÖñôèÞäåÇZˆFk×òÊx£‡ï}ÚWt”CñÞq°å^à†ñ%ãð“gÁ‡’ÁUø3¢Ö¹NÀûX*51y_ô¶U\³íßúïžBU–SûŽüc>i‘þ0ª£Ó»„[Þl¢êïÞ¥5Ñý:ð¦¼TšÖr°oð¯ÉÃå7EuØÚÓð3µÈ¸æªƒæq2ƒ› @/˜?`×wÙ®o]Ka>[¾¬øÕ¢ýñçÉN’1–1B¬†ó0ï2NÂà ž‚öìn3Zˆ£(¥Ú[›À§bÐ?ñòeÌ TžVr;j©¦äà ÀݬÎ07æËKQSË¡×åŒW‚"6àj›Ê½ØÔËÖ0²˜®°ùkí} W5é2µ–úÁQè¯*Ú}8Ë_Q’å¶PQÚA1C´óÅõeèw«qéáo]0ð¦U-ð£A›:ã1ò¡n:Á<©’örX–ÇôoïgiVa|o62¨ÛôC®ªöÊÔ'ïÀêõ]TwÑ5üaÙÌ&OꚺoyØ¿Òa¥>Q²‘'Ô¡.Ñé¤[þÜ䜿'séan‘³Ýù‡ùÇUüÇ\°ïãÔ6·ýw½Ñ¤²éVÞ®åºîz‚Oïe3ß ¦~Ä6XˆÏÉe¼…aØ ÿOôW´Åz÷{ƒòZ¸¿ûr?£÷»‹x>Hï(Ñ«êù†¦­×Rá?6Š ñù«ùýÚ}ÑVê(WoËúfYä&ý”q]ÖJšF ‘ñ«ö¤WB4Qæ%ºÝg–%;(Mÿv_Ù̼;W{Û3šýwc¢üJeôÃfnç9(‹HUÐó!€vÑù³üh¾”£È?ÖDãè¶ŠmFU’øj;VsqÒ[,¡Ã¤<ÄÆ Ûy ü‡†eô’‡¢¼fíŠT9þôÆúɺE&“t1ÞãèYU,LL4õ¡oK hŒÿ¸C·œpöÓˆ)Ψu(kÏ‚‰µ£ƒlm—ËU‰þ%—©pƒ–µüùöîæt»•śϜ7Ž€>ãYhB…ÌzÓK]óÿ ꎊ ÎÔŠüc 3{/© 2O©9i̹žÃ#%¦½¯Ú@ßÍ/ûk‚±>«-Ær׆¯ŸŒÿ`F•Ÿ;ÇÚA}Ê70ÔרÐG•ݾëÀÊ?“;æ¿*‹ž-‡»¥$ÿâmøJPÂúˆÞºw°ýK~ #úÁZÂdñ[öUª3Sÿ1Ý —Gýy²×Ô(ÚÞ€)Õ•!V2³>›ü£ èUoSY©ÀsÛÃÁô‡ç0 «ìFÌS/ÍzésX….ó#PRÕ¶ZÓ?qg:üÎJéåö›¨ÿ¸!çà?Öñô–ýaŒºV3w~ Іãö·ô>ëÚhßSI]#Pô®ä<5—K@Ar;ó@åî/øßü©°!üÇm-Ï?îŸøOtOï,òPþPOÉÓ°]Ë%FŠùâ–ˆ‰µÑcGçòvi—Åod `™oðIôÍúnpÂ"ò¶ñY|п®IQ{5›È|6$½¤J2ÿ|1ÃTÂÀxÚÝOð¿Ûa½¡žÙŒrfœV¥‡Ð µ‚¯‚øÙ"˜åeÔUÓqEzÈ!Ft­ýb§QšÈ2<ðlg^u a:Öé*ª¼“u¨÷3°}~òr”;\©]æzLlå rÿ«ðç A¿šãæà? )§Z~ ÀX,t?T4Qéw'‹Ê(¹~eGÀ&òòoŠ::XðÖÚ¨$NˆëÉdÐr©+`R¨ö«ª?Šäø¶kó¨â,¬fêÁ›R„œª.ùüz2£”ª,õb½P8žÄŸx›{aÏc­I5U&4B´9!K?Ð΋S2–ò¼Ç>x,ðè:¶-¿ºaV”ŒÖj´Eűõ£ˆ<ÄïÝ¿ô‰ÿ˜¡¤ÿîNßQ§ÄMõϬǺA¦‘"8ÿ8¢^¥¬Ão8ÝÛ™Õ±åK=<Ó5U ‘ý9ýÜxŒ½œÕ]³¼N9ãøV.úú›6DTûµ=•‹þ¶sð#·ÐÈ&$ÿîNû¡Ì☠öc59Í\x¢¾069Ö¸å=V&æM\º7Ãk,…ÿ(ˆ·{:´€“ý–þ‰3ìxK4@u‡ª“"Døj‹yΆçñ¸Õösû{üGS×*Ë“G<Ã|æþG{*rÊ÷d QzÆfƒÀ Á /¡ï5lM'|Ák°uŽOOîÏ"þ|Þî&óÒ–…,üÕ8¦/÷Â7†?÷e7ùz&ÙÈI,Ræ4ù3뮞uR5´jñ4ƒÿHAЕhýµo“þ6)ì²x#+’UZ 3t¯UZüÇB8Wªž/Ñ?«›õ›[ ƒéÏÙqAöþõbè-ˆ6ìý Vº<5†£ÕÓŸþ»ÖüÛ0`;[À“/ƒ’¤03×Eæ?®£õ;'«ñ¯ó&æ*ßËö¼… ÐP¥¥›¬€ &óZƒ×»‡gö¡Š¬‡Œ!~uK‹eœ–ð‡Àûü8Áüpñ ±` É»JÉF2òÙhæôÃóeBí"ʳ#ð«´ èwq]‹AV’aï'‚Ù 5µawùŒô`W+ˆÀŸ+®#W‹–5À°Å®p7Ä[´C›Ñ_¶‹ŒÆéOߤ¯,wýK®£eýdÕ-jHÄaºoÇâ3<‰ ¯â?>Ê~²_¸;}E¼FÑ Ñr~­PýÁ¯úâ?2YËÔ,ëøUZªÖ΂_Õ·®’sdAoëd /øº0×ÿ(T—Tg«—D[Ó™Á’» ëOýÇ~NLQÛxÍ®éÊåêçZÂK0©è9Ö^ñ©†uAíTû¸ß©Œ!avHD•öÊ™8ë͉3õel#òtô¿rð«sXæ@˜øþÖGVË)7 ö¦ŸUzk†Ú!Cª†¾×âëñ“@ŽªÃå´’Éúôvm®Ìü¨½ðæ™érÙ>ÒÕÚGÏônTÊwæÞ•q+Ày× Õ¿¤˜>MÄâi}Ìý,j]§þüOªKÊÚ1É?–ÀCϳ+».Û§låJlÏ¥ Ì}ðÅEðÐnçæîÜ3© Uÿ‘‘>®oe1bÇŸÐïÞ–5Ì߬p™È L:«xÀ¤x‚©…¹jÕ§ÏV5üG.« Èí&‹X ©kä&·ÿØKÿ«“r6Ïý*©Îr”•îÇ£é[9Ük$þ£†ë0± ºÆÙðu©]ĽzÇ}¸ §Ýe!žK.C:Ö‡{ÿƒß&…•™{ñþ#F˜ç"úm‘<Ãd4ò—ƒë?ÎjEê?ŽŠOôôþºüc·vGô¿Šþª°ékÜêèžÆ<™\0ÿÃþJýn:øÂæxîz[òv![1ÿÃK_‹ÿøI¶F¿›Èìg„d¨ÿîªcè•õdƯx¡m`÷%‰¾û)§ÃÒ^cÐé›r88Ï 3±U¶9ÿq“'´-öþ2u(ƒðL‰L OT–à1õZ®ù€YR"ˉmÆ“ßèï#Ú?;­ ֯ˢê:×6‘õ²â?Úa¥—R󢫬ÄÓ­ÔóÙ‡3ýWîÉ' £þãC+hïÄ~ð«Üä…ÉÕÆãÙŠÒ#ê2üÇ%ò ’øÅTV”Vsðî}@ãÁŸÇ#LÿX ˆ8°)%É7êª 1ðlCðƒ±FNK*üÎó§§ÀÑãPC³–ha;‡~Wáv¸Jt“Á*òPÿ±Np†óÈ[¼ˆ·Ó¢—ºJ,Ì¥*sMÐKìHÒ4pûõÀ©h–!ïä¿ö.ü_oîá:ârÕ¯Þ ¬)ܳ7ÚÝÍàW¾ÌÕX©ê¢¶]‚÷ˆÿñ€Œi†ÊÄõ?cN\è-Þ­ð'̬àH“赂jÄ5Ö,ù 5æ·’+›«µk/ð+ÐGü:ôqP#=_Û†–y™Í™Çç¬ûÀðEy†÷n·6þøUk;LéZB†àGþ±Æš f3©ý7ù†3«öˆ¹ë©ó›L‡¨ ü~õÖW‹|®x¨ü£ ¾V¤'["Š(oQùÉ^3©vø‹‚öB:–L&sØ ö ŸäÔlÀÚ/`.{fò”( >ÐÓ0lïÞ_"ø…÷¨bûX­”YÌÍ–‹Ü#1ø•@ýÛ•Öà;®Ø…Ñq}3RÚºHýGs¸LgjB"°ÔÌÇür?–ë'É?cQñÜדƒ¨|Íüeô“ùhµ¤±™ë”ëýQºØž*UŠ£lØõkæfêÌ–ñŽç¢ÃN¹îË‚ÿÅßã?ú»O&HKóõ»Ÿ´íÌôi*ÆQ½kn¿š~÷•Òc}%ÿ±Ÿü£/1wó¬¬f®±úE¯¯ï0¶Â¼@•9ÊÉya±”(Œÿ˜‡ÒêG¬Â[£¥ì®ûè›Ð_ §þü“Lev2Bž°ÿ6ìwŸµzúS1†LÓµòðÆôE¯ØÊÜmx›ÈÚ™ef"ÝAò'#<ªv¥}wJœ1ê™ãÀ„¶ã?6c!ü‰ugƒ³Á¶Þ#ê/AÝÛgyBΔCÝw*¢•œŸmÐüäM&ù ¶+%µ}ìi+5yEÑt^ m%þ¨ûohšQòçD%¸…ŽàsX›ìDñEñ"¯Y«8 m«Ûçph[ æŒÔ\¦ÃÍY[é%ÜM^¥“µ ª­>ÃôÅ¢c•êF½ø}õA6ÿ[ÿ’sB¡ÛéÅ ž¨T}Õž‹)äñà[/©/Èͼ‰[øªÚt—šF·Ü,Lë¸I5ÉU’;óBŸæÙ¹ÿ„×¥W'*çÙê€ye­¿5›×Ð ª¤+§«ËÃòVM­YÁš&¼‚®VøÃõÄÉixC_òcc:øÕ'vÕn|¥y6~&½ 7 7Ëîò¿:…f`•5…úÁøöu´R߃ ú£¿:Oʼnò•!uË¥´D:Ø*Z…—fCTù˜‹ ËÉ?rSi¿†ZPŸw”¨.ÊØG`YåÐÙvãZ“Y;9íÁª¼9ɽ½$ú*‘EÚ[2®<´¼f k,xUn{;*ãîXþݰܯá+Ñe·uÎç.yÌD• ô5¼iaùûz%uñxÚê+N¤:>.‹¸úP?ÒuTQ˜îBÔ&D_\n+¨ðÌoÕ'9Ç[g¡ˆô U?è­ß¦S3ëA—›~2Y¼é<ô*µU@ý]º+ ž£±JíjÆÊ«É‚xï¤7OwGª@³Ëî+þï}Q•ª¼áî“Ñôo‚;çþ“ÏO og"¬·Hm¤7ëUXó†V]x1ð´¸KÿÝ-_µè+íoàCú—ÜÆv¶6‰šô¿:BýàKã¾ß(.Їì:+ÿ*2â÷=dS•ÍëS'õÔÌhŒR§~ꑬÍþí)ôNº„+_ˆ•kFn°e`°˜cŠ–½Ä»Ñ?ùeˆVÿöCâ„QœXðöÒ. È XιØÄvø3ÌEúLõàrè¤1²K¾©Í‘Ûå;0¿Oh‰öyn@ƒÐ“'Í“J‰|ÄꯈrL"çùij÷£ÌâüÄ7Xävd0×Àªr€Ø¥æÅ êÏCëR>x¼=ä`™ÔNNö‚|häÓãGrgiût“¸ò‘û0ËÌ#Fè?bèŒSòp{ÌJà]Óñ™•àö¯ƒ_í7 _ãxFOv9™«ýt-žy ýîBb¶¿ŸÞní6zñÇø`5oÁò¯&Ro1|$…ZÌÓSüjVþ6]Wr§&ãz³?#_?è!šá?šÃǯ&ŽNÏèÁ•5 _àKêåNóž@Ñy|¤0^®Ÿhc/ëW«ÊÆ2Ô;¼ÙO"þo žÖa+Fª%ÄëÀ“4kŠØ«tÔŠKW½‹ø:p SÐã Zåzඪwú¹sÃ`ÿÏ‚¯'ÿèB¦zNmd Õ|ô´3ìvNW|êϧQ}ý-^©T l³ðF[ð^9ØFƒ0wY—“yâN˜Ïáï~W‡Ì5x£ùV5r«L–tM'÷‡çIµãf:uÝÁÖ×F­¼‡|k3^©·êj~mS­þ;ÑÏHN¥5A…e"xêô© ¤ç‹ž–P=SŠ~U#©AþQšþ»žôuMÿÄmԟס«áB÷MΨ_I¨½8gzSÿñ‡Y€®7i¨’ÜãLÖ ÿø O²Í^ —¨ß‹üã*ùÇ]xøQ ‰;’¹]úÿý§ÓÂ=oÄ[:HMõ\d¥p "ªEÇö´¬d ´m‰•àk͘Uï—Ñ*…~w+O¢Ø:ñe½múê?f‘Lí*5˜™©vOê?PÉØ’LÆå:@Eúg®s"ý[Úgì°KOyOîÉ¥¼ã%ˆ»Þ_7!ü˧ÿÿýžÿñ£ûd£œ‹ª#RdŸ÷†îª‚yçÅŒjÆ=½(kžÐêÀl⡞B÷‰ìFøó‹ÚcÑHú}ËÓSÛ}^tÑÛêOŒ (!bÈ”Fò¯œ?˜\T@;üûgÞêÔ²½¤Nè7d³ %™á,úES¿›ˆÜ*;øÕîwlà~³èF=ó³á‡…=LÄ?M‚Ç“´0&DxmaxM\5ªƒ¾$e•õ0Uxû ’¬ÂÔý¸„M|Fâ³ò;YÏ}§Â®òÝ2í43‘ø[,õyv¸…˜üOP›p¹5ÔMø‚Eh¢›b¡«0ÿ#*´²%ù‡7gÖ[sÓï0>9°Šy¨%©AÔ¼?pšÌÈÉ'Á¨D¦ßÝ©MÓ÷Ëïɵç£<ðǾÀÏ9øUGìÝs3l÷G|Ñ_Á¾ù2Ÿ;¯kÊ q7äÝ_}Ô>ˆkò*˜ÐZ4õ[ˆÂªñ{b9‰ƒ-9ÝHM,:œd$v¾+ž*µ¢©ø›AøÉZˆ!oཨ žÞÕÙu Á‹WmÁô^Pþô¿Ú€¯ŸDþуÏõ5âŠjƒmðw1BÖ"¾ˆ_0“:ÅX‰þjYA¬É!æ×f£ÿU-lì*ìâä¡)g¶ùÙH†×¾el²¿B°óùÕœn:£|e¾u…U6x»â»^(‡&‘:ùÇ%Ø–ª(~õf(•¾³Ãç¢þq'H\z¸ˆ±<{×Õ>f4Í!âH&ó­+­«*õƒ×UO,v Ñ{BüÛc®fç½ÀÌl„ØSg½Æn&Z9Ýv:>Ƽ\ÿÑÙZ ZÏ5”JìãTv÷…­Ù§»‡W¨‹o_‚µ™Œ«ŸZ 8ËÿW‰ «ß`(fRŸÚÞX¾•EñðÅÁ«ÖÐê­Uüc¸]ÝÚiÚíí’ wíYÕDÏ\Îë“ Éý3è³D6E÷2îiZ«7 õn3@ ¤^¼:«eèwc‘!m„ïÎk½ÿqÒLî–ˆ:D—5Ìi•,J—>.¢Ðö<ª˜,¬NYù±ê1©!¼na¯ÈJÚçáezá?&°ËËt(H>µŠH,z˜ûr®Ûì".vòuDN½`Ö³Òýx•‡«`RSþ “ ç¸î€·µ°» fû–;èÖyÞá³Ò‡È¨ïO\éõåÿ‹¿§Ôgë-ÝVé=Èc"÷w_· %—%VŠoŒF@°ÿ¸¢ÕÛñ§©?©oþªå^jDgį“tß\a‰Ñú|ÝB[TG¾gšmqQâ«öYBdá¾M’iˆ¥›™Šx¢’[ܔ̙ôow"áÚFÃh­h¢¿Jdt6Gbß›óž6›ƒnÔcF‰/ïÕìa , Ã0˜)‰ÑñÞ k¤ÔР­(l6’ÃL#ÿ8Cd@žD쉼(+ÊÚQî0þc¥L .ÄC¢^Jö¿+]Îâ^d&ìL_ThéÌÃ"S+NU@»»eïÁƒdÇ”!FJK¾\fá*Ïü|æØ]¨h_ÉûÌ?QÒ„½å>Ú\ý’̃§Y 2tÕTlÞ&ÃùXªŸ¹8øyÇbÞ£C !§ø[ž(q/ˆ«aú×wzlPã›Ô ìD¯°ÁÁ&¨³Žƒ_r­çÆ£0èË*å§€µá—âºsÒ;"ðóé±—C~=Å)e r¦W°ÿÈ êïLµêI†ù-Ñè_XÐ;0,‹ðl£Èzr¿éÅÁp;œ$&Éšø³ÌàM+±¾W@8’Ýs*M·7ýÛ“Q©Qþ|=ø•3p >Ùë >ÓŒi¼Fe><ÑMb~Ôms>jÕ DóѶNúþü8õw°¹©ðy:•‰‡AߪÀÙ¾Öâ³P?¶Ì`š3øä=Xü}àWçéé;Æ™XáJã*â‡?j Rrö >ùÇyØ—%üÝYfr£q˜'g§±† ê=x«c÷/›žÊŸÖýV ËrÍÁ¿êƒgóG¿û®»&öÞm³7,ÿ¦W¼pŸ`­Š>œ¼r± )üIU–ïe<¸™Î¶²»ÕøÀ.¤±/Œ±KQ‹yÓnb§Äo´PSÉÈ|8íÒê˜ Ñ®$Ô÷Š"pN?ÒDÖBæµ,£Ú¥ì{.aã¬qv bëøþ3}ð½˜)µÉþxÖ?A,çzGÊl2¤K ¦û:Z‘ºü:IþA×lú·w`Êl ;6qÁ òæä שdU³§ÚMÑáæ² À¤xa3bÚîf>Í—  ÿÕVÙ2°ˆZ“!Ö ¹ÉdVÛ©; ×3ü#…ë)JÞ?•ËU€YWK@oóv\‘[y;ñ„>1B*üŸÿ='þã'÷“ðŽþWÿ4ÿˆ§¯Ô“ˆE"¿‘†ùQNþqAûNx oqV\Ñ]_‰_=ÕÞRÁû‚ ä Üñ@ã–ˆñ¥±Ë߈c$yÜ»ŽÎ)•ˆw'b?ªq×_Å`(ëÇå·fuÙ‡:÷³²Šµuþ$½™ž‚·ÏéPÕ«²ïß vËpx Pwï”TAÓa+«13[[%üŒo‰d4,°ODüG“ D͈ù=©kxH¶SV UÙÂw´MÌ|'+ f¥oÇŽ2‚ yc“óÀx;W§‘Ï´Çò'5/D9ÿc”(Íu¶!z>Ä~rò¬æâšév¹˜ð/äð@û迈·â²g!¿6á=f`—™ßÊ›Â?‚Ë}§¥2.ÈsØ™ØÇMæül òÁ˨QnRãi$…ýB¥ÊP¦ž|b^¢µøÎ¹Fà?¶”–O°WÉ^]X®?ÉZ¦ïOAUûž,vôôêþ#¾Z‡œˆ=êéTØÙÿ–ô¿ Ëé>´{Z>Å™D_VíGQ›Ÿht«}†ÉçTúZ0á¤&#vüøõUê¤ì&{‡;CÛx…ÿÊ NOú¡Ìº Þ÷žþ[Ôâå5VTIgèÛ‚þ»Sé“—ÜÃA‡©ÒD†fÅ÷¢1ÙÌa¼V9Ø‚~ê žôUñ¥~p4ê¡ÒT°õf~íj:t %ÉE„;ë÷"KºDœ×hf½ËÆ<ð«[ œmð0LBR`x[“[¥·î£m-dï$.HFèŤ+iuÃ4ã4üñH×éWÕ+TþQK««&F™kTƒó/Îû™š Š6Lvê„U…€é.K_èy‡Ðï6móI­ð¬Ÿ8ï¼hÙÎÊîg&¡¾[¤ǼMÌ÷ äñ’1Ê\¨²¢ßªLeßïÖPûQÐ]Ñ=w˜5Á>bÝâ§š••õ>ðLî·¨ 繯7Ž¾Ìø(³À„·1w¨Mr„9@Cø“>L(¹DFT~( ýU{Vmµ²ZÕÔcâgþy3ºj¬pû£è¯ÞË%¼££ˆšÉÕLt? “?“:¡Xvw~qv%GÑËþ]Ù® t„oAß–ËÄ0ùw¨ÓÕëÿ ~•MŸ†=ürÔ:ºÛÝ—ŸFïwC÷ÕjÝ¿4ý/€?ÎΠ{Bg°­2 VÉhŽ yÂH]B•Ÿ:½ Ä©­TçU‚ÿ¨‹½Ïƒeþ f|-1ÊËAáÎ0®ÊÚ;XÏ:\e ʼѬåt’šNß‘­V2ª!Nói­PÛ +†’*¾¥¡ªŠÏÿ€z1ô!ºŒÞðçÑïVD!0ŽýÝS[áõ7ªÂÔD‹ª»ê¹ºY{è‡2Ml%êIV€_í¿ùs.IÂñ×…£‹} —¿¾bêµ2Ö%øó?èoáʹlɹЩÉAÿý;" /O¬žÔâáŸßpM3›ã }»ÑM.€¯H‚F>“Ö±ÎZKׯTÖüGBz̦RÅÎ=ß“ícbe)ô6_0‹:OÇÝ[|\nsíæ{k Uûí­Ä¨mÏZ]`fª’E³Ö`ÿ_3-0ʱœôqÞ‚õ1à5/ ¢Žý9Nýà]±–;߃ü¤£8e–t¶ÜQ*{ ûýH7űƱ)‰U­ãÔ´ Ïï~´ÁÜQ/ñ^]É"5ù\ÿ_ð‰aÂð«—J©ÿxþ  ú+‡ö·VTo¨ßSKp¶½•Bø“ÃÚ{-˜¬fó×Ó¥¯Š®OD-“…AÃ_wè=ÕnøéðçÉD4½˜fwH‰úŸ’Z+ð‹EXöùdßÙ˜ÿÑXõWOPpf¡8±kw½YÔVTSsèó¸Ú^Dã5 ”t;è¶*Îåð_,0aÌBA:/ xP;¯WÆÙõç{A‚:ÅeãNZl×~Sç Rû¼h-úýô÷£ßÝ cTÊÄѰnë@j[b‡7à %öo@ÿHŒåøËAZÒŸ¬ØÿáAÿ½&ø›èFúë…?®Êƒí`¥]صàZ!¬øƒ5¯3áxýwƒ°¼Øi&ú²tf[@)bËNÆhlÝCØx7ò°àûvÿÄ­F%ú·GT7Ù§õ…’Jw@ÎþæIöĶºÂÍüRb–wúB=¹PöyG–ð„é$džtmüþ²ÌSîj…Ä+ΣÖ:çi(þc9Çb"å‹ì²øßu£c\|ðZ|üx‘ÆA]Ó"j_Ü´i¢¡­Ðl€ßxÂ>Wâìþ„ñð¾V ªÊ®¢Å*a.£pÏíB•äGÎ×h&†G8‡×4E!fWâ¿ÂœÞà‹¥ôÆáÖ{ _âŽûH¿€^ìw£qÿq‰þ‰‡Éb1§<‡å‹e¾¿²ÕLg½ÄÚüÇEª]®s>ÆÈ™â³óð~GÅÓÕqÒσՀróPm­Â:WC/åW‘„è"~Äž̼§~èwëru’£5Î…‚7ø›üãµ²^KÇ>_’&2ÇõÍô<]Ãü¼Ötø”õðÕç˜xŸ,ÉÓœÏ Úê°ÏñnäwK¨?ÿ츭s¿ñÕÕº-­?wA®½ Oê?ÐîZõá*j2qvÞ¤õ.ÖßL9E¢[¥ÌÂè‰$Q~ôÿ°ëÏÄî§Exô?ij„ã,ýKÆQ+yˆé$É`VþrLeëj]a~T;æGá?^ñÓ7ÅÔ-¥¸{¢‰ˆ=tœ'ôÿð… ¬w3¬äW?ý‡ŸC= ~åÁüÁZzôPvÛSI{¾Y ¦ÿnÆ_œ_{Ay¥ E¹›˜±®ñAO®wS›Ó7ù¶¨!>ë1ôìZjçõŒÊÔa/gˆœDÞéò7…üc«êIı›|2¯ñ§sŽ|Ý„jmµ”>;·›ø´ZÖA¨òú£<ú ßtû”‘ᄀçBÿ(e”»4½$Ö-7qÝv"ùŽàë¹B­ÓCÖQAt*†ZÚkb¯áìøF){Äa‘í#ü¶]yÌÕ dµ*Xwú˜=F0þãyo°–ë'g±‰–+^ôþÌB|"®B°3¯ Oäsîx;gòDÛê†÷X¤58²ã{÷•ÎêQ†c˜‚fä$>û­굜(®lgÌÑæ NgÕ½(A¯‚™]¥×eLýK$+šêí™xÌ.a÷’e5 ©Ýź!´×Sš«À¯ŠËùø–žh«ãßbóit£üîÏBø¶"ô¿rE[åMèT ø”ø{÷V¼x6âïñô³º‡¯ßz…Æ‘m¶3Nê÷¿ë¿;Ecþ$XfFâõEÔ>Gõ7ß°û·¿eêÓ-ü‡{9*Ë›EñmPÇÆÄî6½z(ã1ÿ<¼ÚVQŽhqà][‚‡ÍŪm•ÃÑ)OÂ6Çaóé¿ëm¦Ϲʿ¶¡[îzP»”Tî½æ'ìþíí™?¸.Ü•¾®µçœxå—Æç,ǮŤ*þ!ùÇ'”IÇ蟘ÝQß±ÿQÚ…§ä`ñð2/Q‡s¥AY#t‹;£ŸCAøœ«6ÿFî,ŸÒ±ì~L3&úÝ*t%ÜÄ´¦‡r™×Љޭj ÎF°ÌÅ»Ã" õ,E¾¦ø?yÚá/+PÛËŒjתIeÆV2­4¡õ;¨’èa†`a{r.{‘/d%o¨Åʱ¿™õVY­}$C2FÌñÆý0ÚƒAôOtEo5“õ 8|è¦õÿ±†*Çár¦peƒkJ #ôÀØÿaW´ýó'ùGˆÈÊSÕÏð’ó` .Òñ°ªÛd±˜ÃbWÆ7A–‡çrsœdþy_k©ÌàèˆgºÈt©¬E€ð Ê¸¹Ì*‰í_ð¿ø5:Uã8ÏÌK¥øÌ¤Uo«‚n‰ùõšz|Í•5(™ð›´ẊΪ®ú¥]TRêóP,ÆbVEw´ÍÉôöôéÚKÿÝb"½x­eÑâ9:* —Ò:cùæ‰üD·‚t©ªº«‡“³ÅEå’Æè}~´jüXQ}²/ñimt²ÓxúÚÑé/<Ê#ž­dØýÔ ŠRÿ]?í’ž¬=•<Ëš;Œ®ò–Ð;×ÿ€®}•°| ÚÓ"¼ ˆìÇ ¿:ߘ” ®òøÕ^üGCî´¥d¹ô7.Ü#ù>})µD?9‹®Zvò »Ëúö'&ÿM\^dè- Å22/¼_ zà`æDKõMdÆ÷®*ª³E]¼Ú<"ÁsðÀ¯jƒ•Äz¶ùø“gõ2i–í-û߇Ϫˆÿð‹dÅ/Jtý¥¸Å'%': vœ j|ú/&&šN-ê“Ì›)€ÿè§E.{þËîûåÜ•xzêÊ‘_T¢ÞãXy%ØýÄàýõÉ8ÐY+½˜fóß%8—ãc4¦ÏÞ¨ë#,9N›KZvÿ8Ö¼ ë55fÙå>–ô¨jÎ3W (‹¾Ž;:ŒÅ~ŽîŒR1‰ðÕyô—ÒT²¿FØûíð{PlÜ0¦ Vnn‘³Íxà.Ù°ú·ñ-¿›š9´&#jã§òô7®ÿ;ui¸+}M£s÷›‹,‹‡Ü ~"¯mþª¤#­£’à ëù»¹EW’¹Û%ð¦mDE"ô/yªPñgb£çR¿Ø8'Ÿ è@ýÇGC+P²z£›š¢¸ÕÌHÿÝÍøÔæô/y‡¿JEÕ»‡S’UÊ„æ³í³ÆjmÑÐt"ÿð ºâ7s ³S¢œªŒÝÄüó)p‰èã¾èc½a‚ðˆýeœoü‡¢nÒè¯>·¤4k1Ägc¾ìK=Ei˜‰µ¦»•˜üÔ¨$uÝ'¬—fAò’'dpKè¿»^ÞEqQQdtž¿<ê”Ðiô5ÈàŽË¬bµlE{åG“g°;Kñ[á?³ë¥æTº3ÒÊLþa¢åj ÿ‘¾ëËœøÕQu~‰ˆnak:oˆ]f3Ç1T`m©Ü<`¶`§•g÷Ð4 ?Ï‚¶kÿ)ó5j…‡øž<ÓÅÈ?Â:G¸ÿßÆç¾ Ã¯â?â8ÏÓ¯}ltõ„]KÿÄŽzŒÐêŒÃÔŸŸÖjÏ´ÄZÆ_ÔïV\ôÑÔ…Ç¢æ«#þ#žÞGíCÿÄûâw0’øzFíG(IäG]L¦3Ddæ)¾oäf:GEæQ˜àuþ¼œ1„,òß ÿÝŒô{ɤ¯F´—\´$ªÅñÒ®>¸©{ãßÁò§¿Šilô%á5ÒwgµûzyîªXò +¢$êÊo¼ [ <À!Ka±‰gb’˜óÓ#ü“þWǨ6ŒOüf÷7ln•ëžjW2†kFmÐ…ðçÞx…xºËOV,¡å!SèB,þ¿›Ä&Zçh 2-èS÷ÈX‘^‹²§_Ùóh“ˆ÷ʽH÷©(§”¶ª»¨%oÛ7'k‰Ï$Ù^èè·Ð)8µ¬Ïü?ðx—ðœëÈ;nò‰vebCñH»ÉŠŸ•OÔDø‘ùœ$#Ú‹5, Î ^ º…ÇìKV“]Y'PE»ÿnAYÝX*;ƒå ¢±Äÿ…×|Â<Ô"Ë?^à? ¸"l_zŽÀ ÿ‘ ¦è¶!ÈRÃ>eÄ `åi\§pž¶¨…#›ÿÑG‰IþñɨÚÔåÚ *™È~:/Ç^ÄÄL;¯»ê_à;å®Rï±[{©EÓÒþ¢~WU êkˆ¿ \mÀ„·{Úhu;ú+ª°?ëѨ?Oá<êP¸o7Òlýÿ PËáÆj0õ2"'zã¢&8Ór¼JrchE{¸_ÿæM"ú¨´ÀœÂõ!Â|Në SlÄ–^7Æ'Væ™!ªE)ÿ8­} ÿJž±‡¸î,öýzËø"_ôÁwÀq*Ã3‡àGÛ‰q?ݳ—r <î øÕ'r{BÉ 0ÀV¬»È( ~õ®aqøPüGnô»aª—o¶øÍËfZe˜’®0 °ø©°–¹°Ö©`âëã?^bû׳g/úDùc-_ˆçz<5ä›ßÿö¥2Z=/JϹóäí縊Väj»ð¹`yÝÀ¯îrV©_çóžr†/ ‡÷Ñ"ë½™PÍÌ8?êYNÂü&È„26pLô»Ÿôiz°áÇÅ„¿›ñ?‹œÃ¯š_>?U =`dsDAôÀçD{òñ<™š1;BFþ÷ÃÞ¥¤D&}qî^°‹ L(þª ù‡1ðEâ‹'"'±®›h¤{„ýÚ_§bbˆ$ öGA–»ÊÛ0ðë°Ëa¿ïñý" ö¯a56‰½ážÙÈ–¢œ©†L^X†poíÄn6ZAýt^8–œÄÎ÷ÈéŽrÌÉôõÊýºvY­6Þ¡ÏÊYlCrìpú¿¥@ZËóKï3r8ö%(™Ò˜EŒí¶×{¦tWw¡¿ºaL'£9®ö†§¦&GXu~-0éÑ2¿² ëùN0OÓ;új‘1ò‰è(€%‚‰·ë#Ë‚(˜e|Pº¢3ùÇB&RU”#¸*Ãá?)ûº»°¯ÓÐûU÷ñž(K3_Å{O$ÓZK{4rœ‚T}“œä¬¦¡‡Ç ¸Ÿh_fQ«øL «vþgÍ ôßmÉñ$`½uø°K\O¼ì 8‹äÄÒgáÏ šWÈ?šâåêìƃ‡èNwßé+þøNi·ÿ¡Ûshù©õ`:Ã`‡ ¿ŠeºÉ9 B>ôß]cðY ™Ñ4›óiO»ºÃÓdnî.] Ÿ/\Õª‘3ï]+ÂjÓ8‡Aä>ä Ïå$ìsNG4Gqú·o–•è”HNÍ”nž±#›jºýÄP2<Á{ÏDýEwg釦Ÿõ‚ÀëK¢8u§ârI¯(ë=¹L T»Þðû—ÙÅLêÅîq}Å•ü#çúwÆ*Y‡úºÌÈBwôJÔ=œ§SK6üÇkõƒí™öšd?ëM§£ËC¼qf¦É¸;/®¦®Ð>¸ŠnFq³%j/c‚ìF¾eíüenÇ~f¾?gÕéðç/LWp'üjjæU쪇¨ðv¾"ü‡ÆsИÄO6 /3YÁ«¢'ŽMÇ–¦tq·ûʰvYµ™DëJÿáëªb¼!®8ýÇyìÚ¾Ðücá&1ÞüÝq%Ø4ÓÔ®´5Òæ˜ïx‹Ê¸‹5Ef‹Làlž2-<Ûò>ì-µÌ#ö;wüß{‘üª“Ó*½áÊÙ–ÿ?ùO½Fÿ’éZ&½(Ó92°ŠŸRŒéçÇ´wè¯Òý"~õLɨÏñÈ?‚E-´M§´žêJõ¢î%ª1ÿCÓãü´r:üZk‰ ÇŠÒÔ{µDyôgéÕ›™Rsà³\Œ zÄžÙáWøú.>“Úêsáy7’5´¡Oz¤Uè¸d÷Ô»„yŧÄE¿[JÃ`¿þö÷_À¤Å¾¥Á¶{Á54—»á?V`C¯7¾ÄNTC•zWRç¸ä§×f³rUøð³ÙˆÂ‹Â¤4!ÞvÁ²{A7Á<‚YË>7ò§vÆíG½F¾g­)ž²ØÔ]8”ØDÑ%P.Æq)K|öެfƒqkïJæÐ5ú=¡úèë/GøzE§^ÕÀÏgÃÐÃþ¼ ¼ÀIãwì]{øó¾D°~ n;ðÊÏÉ v£h,¨?°’ý6&S Ÿ‹»XÔSdRGÙ_q*ÚÓ úM£ž_ÌÐãà Œà8×ñÌàoFßþWÛðZß/7WI¬7Oab–ØØ ç Ï^äÒbŸBëêE¹ŒF,>çÐq$,{z5Þùn:ÁR­·¨‡Ž"1õ[Ñ“^ÅcnÕ_¥¦’ì6PXù‰ë«š8ÊZ ãùA‘Á\@{ZRô‰p¥×j*}”{…È–á“ìþ%öü(Œ÷dø{fk´õ p[óˆYfrÔ/C,]ºõç—µ:œ_"לDíä9üÇybg;LJþ‰qÓÌݲu€a»3àež²û“xçÝFÝláGý&ÜÌsî× Dí ááMZâÝ3ˆiàù¨_ Û°…j•è–?LE=ÐÊ3ð37ðÊåDñÑyQ*)uÕIh¦áÅઢG¯ŽÿXDÎV…z?›Îe5´îå—'ÿxƒ¡1VºÁŸ'¢þ£„üb×E8×êÍ…}¾Àç§0›0£¦Œœ"§Ò51 óö™CÙ­79×m+)ú«5 ‹Ì4oQG2•êù‘ð’#ðsW¤¡:V7yFíùçG9ºF:V´žÚ9è§0çK¬¾|¯ ú°a¼îûŸý•ÊÙ¼{œqFx;ýG }Åw‰)ÜîDUnb«ÙÚ±‡Lh<]îÀ,±ê8æ:>âå:Xe,G-«ÝŒwšˆHÞ’tE!È?Ž9wüß{‘TÝùMgµ/t.ûOýGnõ>ùÇ ­ª^_Oª®½­” {ÉÍB¥‡ÿû=*…õíôÝ`õp·úmú`*ÆšÀ¤¦{6çõü÷+ýó¯­µ^Ø—á¢OÍ*0‘ÖÌ9Úª¾ŒµÂ–>µ1^ß!èG«ºÐG¥†¾„xüÑxmpúáT@W‡£±§‡]#ª¿#Rr] ×(Íÿ¸¯}Ô³b{]äbï‹FO¢Šl`^0È•ˆÂ“Ëœ(6,ã(QÂîáÝv%@¼¦ë‹Žý-$}É`q@jO+UÂ.Þ4Rãí®3ý_º£½ÿÑBÿú~3ò‹°3ÝŒ[ø³¤Ä:ÙCñ«ªv]]G6á3¯ƒg^ª^ã,¾ã.ÿͤÿnØÔ±òJ3ug~"hk=bŠ"ºÛ#æë¹™Vù“Nr¡oºIÇápÿÌâú›ë4G&1OÃÍ•’ïE˜".þ#1ð÷éÌaLØxa¸Àk¿¥Rp süÆ¡ðD½vÇÊ k½ˆùƒ;9÷`ΦÊlæÂULtž¿ÒêDüG~â‹nÆ9_¼1Pñ7 þ¤±õÕò>ò•Ì d=wú¹÷…õ¿CÿöÜø5»#öGQýÕ§ÿ¸Dÿijb2O‘ÏÂbñ·i9úàk›ù]6«³Ó¶ŽåŽOLÙíey_¿ 2w™ vçØBTQR~¦þìÀ·ø¿ô:“ºöüJ¥{çyúµCH©z£¿Z…þªýìþ%7©œªíÔÞjRsù®B÷߯þBÉ®¯‰ADŠ*Æ>=@ëÏüókt¬(,žéqè_bg8QÿÓ‚x+¹1FdÇÎ6òˆz¢„zL}F¿èJ‡­Ïb€Þ&J+ÆGïœQŸy7!dŒ"ý™†6æ´[¶]|¢»(«‡õþñ‘zk·ôlÜ*q´÷W]¹6¯¡×7˜>UeÑï."ŸOÿ«ÓŸê ¨Í<ÉgÖ¡À*ã?šQ>‘37}F²ŠBÄw`gšQžþÜ‹ZñL¨’ÎR¥×væ0½°r™;dkÖùŒþº×Ï4–:ï™êFíŠóìXšˆÄãfKêý2ӯă~‘ié²~¹)À³R¹w†O¹Bþ1‚n`óå j2ʈ1Î+â ~DWŒÆäµƒä>QQ.181Á°=¾çýT9þ„ß¿N½ã,ò‡žVff%Ãh¬Õ¬¼ ¸Ó1§ÿðFtBŒ¹°ûRoOÍäŽx¶`T:Xk²cõœº£(Ê5¥ðNk7þCÃRh<=ýÀ¤]d‚ÿÉüóê_j[ç™yþêgÎËáENõ’ªÃ—Á¼`FŸ¢(e´•ð篘•D=áçÿýÛJA}#v8Ö?šý¬Öù¸wuOôWufj¹GýïWúç_{iM¨ÉÚÞ°2=Û›ƒ·½…`Y.ä9õêQZÑ…‰¿Ùõ>ØL/p*d Ý@Ç‹19i?>e3Vj6‘âM1ŠùQé_ò@{¤äN”Ò›X~—ÑJn§šqyÃAìÏ9ìiz²ñëâ01ШŸáEåJ­kø`òó W«À[›±ò\Ð÷RÄŽ¹Á>ˆÞ|'‹qý§õ´¼ðö$½ë|Í„KnÊÊGLKn$jò†aO«Q˜øþžó‡õƒ•ñêQQ®†¾ k>ÁJ_1Þë›ôLÌ‚Žå›ŒF¬hϯMÉóv8ÿ±AI§w(YfĦFp ˜Ý8ΡHKj‰æÂø ¬e>1ó+´[ñr¹þ}ð^èE"öÚÆôš¡œw›?™-ˇuæJTbúT+oÓÓVL…úʨÄò“ä# h@]Äfyµè Wz±ö$”?/€YHÅß"üùdbû´Xø™ô†òƒéddz´Bu5|. Üô² àÏ™] Í ·¢ŸVŒl;êó4DÙ °üWa&öÃD§ãëV+>zÓ1ÞÜÄüóéèŒsÓ?q&ê°ü݇·.ÿH/†ú{'wÙ>¹ž¼¥©9½Àmà,0ü[©£›ƒ_yGÑêNd>>œ_»ÿî$Öõ¿œÒü# þôxbWé* ÑPsUÀçöd¦ë ò¬DåA䮨„AÛ¬Øø¦ì$ˆsS’û\Çyϸ¨»µ·°3/QÀ%0óà?ÆÉ·tù:FÜþðñît®ÚŒúÙ¶÷ Í ØæÛæ*´ y¨ÝËç{ðèaõû•Twº‘Å"ß]nŒïõ:2zµzÌýèŽö×ßü“ÒÅjMa|*Ï;ñª:ª¤ø ]ÈÚ€„ñç—UoôWð³¹§¾ˆOÌ?/gÍ«;jWÏêÌüÁuŽÔhzsZî2z½Ô7®1ãpç¿›ˆŽâ¬¨ßtlqnýÿüE*u>õ _?æ½R@å|÷õ»QûšT½¡ZÚ)-ƒÞ^¿ªVe•+ô¿:©mÔ„k0jËüë§Þ¬qáCý™Yî§'Õ‡©³ÔûðyD áг’ÑüÊ‚­µÄÍà)ºƒj×AÅUJ=£>R0*±ø“õÖQZ1%ósèc±nûñEÙAwºÉ X'Cø‚éŸÏŸ‡6#@Ì ôYQ8Äsš‚ëAžqÛ¶Ç耚+¶z¾£$lÀò¦hDÎDý(àW>Ê=øóËðįò(ºaß ìØ |[NPìËtÀ˜K×ç?Y½üGÊŸì¹¾VÿP7”÷‡ÿèI¬Öµ±ruôˆžøŽ#ÆFT´×ˆ×ýÅ;ÝTŸþ`×Ê\õ´( ³d耑{Þ+}ˆž­Ÿ±ð»‰›Ÿ„"QÛð)7ÈwVãe*Š{ÚÅHVŒÿñ ÅTzyϱŸcO¶¢G"Uz!†EÓœ`â«áÆsÔí±–©ˆE’€\ÄLWÒèMÅM€¥Ä±.<é3ÁþÆâs7³èh€ËÐ%â==<.±Ó¤Ô$®áiïßïaìÔý¾Sþ­ý8#Éᦒ_ ›æE½7ÔÈÆ^ k-HÉ'pÅ9Dä¨dOý"\—ýðç‘O6êã§sC8?k`8rÑaj²ùˆÎ¹tù¦;Ò)Ù‡®%Ó©FÌ s} ûÜYÖ娓h«Â­ø„xjšón÷dÏG>]ÍAë +N7×Rÿ‘«ü +]û¿–®éñð| ©•ŒFÞÌáÛþ%ÑÕmš„¯ÿ@ÝQs õ{¹×r’o”'#š‹.89üÇqø”¤Ì³]dí5‹P±q—,f2þcÜ׺^„e„¥Õñè¯2 üèMžµY,4ŸWfj|W¦ß¡å>™Èò7øøŽdI-™C›ÑÌLþ±‹ûð“(Eפ=Îü׺¶ãb,wûBü˱Ϭ„ì½ÞÑ© øW~Ç!‡áHæ(e’7éöµØEWý—X‰ÇbŠ ô/ˆ!"S)Fòàüÿú­œê"µ•óÊ}äÊÅu¾ûµJ¡Þb¢ß^­€Þ~r%Yå ’Y;€q!>‹õ]„öïW¿¢Ò=¨‚sáioŒ66ƒ¾EõR¯S?Øñõ?œÃ¯_^£—þ#'œ÷~£˜@½ëZÕ®m .$Áˆ–Ex"Âÿ~Ø»Ôô{É«O;>ŠŸ;´cƒìè}ý4öÿ wÕ~Q´è£GDÅÃV {uF Ö‹aá Ã+Ÿ'§é&¯ƒÂìÆ&_¦7xý\±ŠðíDøÜak„½š¤<¦Z×[c’#\a]O´`ÝñF+PîÚqpqéNÍ}G>«žñP‹ñ“«ÝA+RÒ.à xZv\+­lF\[Õà<Þ^¢ÿ² ±ÏѨ ;œp¯(CÕƒ¢&ª­%ØÝCÔXÞ=Àæ·Ñ¥¢€œ€æs6ˆ÷E¡¬ù‘ýŸ'ÊvŸ´«áÖùçM<5¶®Ð³Ïžr’žlj9 +ñ˜?yÚeqZ¯hî‚I.­·§ŒŒÇÜ#ÿØŒëûåæ*¹ôv¡þc=z]¿šf×û¿U½E¸®èÿ´{w™¨}çsö£#Þ]ô»¹ËÅøn &üÇt2µ;ø™•Ôy] ª¯ ±ô}üG5l)³.œ@´¥™±V ñפƄÕðÝef‘ýu£^…½_%G£Î›ò“Á¤îÚ¼ÇÔ¢èXi/¡T¾¹‘}—àMÇd+ÙŠ$†?üv×g´º\ËãD-ùÀÌæËc†E,¿©!éE›Úq“©à•Ñ[•Gä ¾è`7ñoû`9–å#ô/IÂyOÂ=pÃhC´È8 wÒ½©Šéæw—jˆÊôOœF·ª£°,þæ9 ]\ º;^G‘¦šÃå´oô»½éâ:ýà8øø>`RMÑþF½\˜í?ðJn_9«­uÞjEÝ`òšf4ªhZêŽ5˜ÝG±Ó¹ÝÌêvÍÇ|Nßa”§ oÙWnk$9Ò«¸ÃŸy“úÄmætj13 4S\B8šød=V' ¥)¯Î¦þ<#èåc¶-þ6¦˜¹é-rßêCÇöLÌ%iŒ÷`Z‰ãØ_;ÔË­˜PÇLËU>BewÑñù†ÿ¸Bÿ,Ñ:rèŽÆ$qËLM=ãn0´zWζZZ1É>:R£ÈD+ªäûÒïk±ù”÷)ùGGòÚ82©8êÜñïEZú'örÞY•jlç»_; K½ÌüAO­ŒÞN¡ÓeÏ)iéݾ Eo<ºüZý`’þ<™‘µLWªšSëûÔÇÌŒoTYéŸXX“¿tœÕµ™D©cEQâÊ“FW¦fV£¿êl4aÒS:¸Ž‹ðDüh÷q˜ZAŸ{~ä±¶d8¬ÂêÏopœ'ֽ˄‡¥þ‰‡´Çzvò—|DoÞØÌY° ™ÈÖ¡{j‹ñ‹mO^½¾EdG¸JyzuN$ÂrUåIoÊëÀzîÁfW‚+eš:lÍU1›è¾ñú§þ£!8‡Mâú@2~œÅ´ ÜåÐ}"ž:„õ?ÛíŠU­}þ¬ÇVÔ4áð…2LÝ#Ë[ð<Ý8®¸( ìþ‰ô…Ç´1<À¯¾à9vá[¼©« Ás=¥ÿîÇHû·'¤‹¾ó?2Ë`†ˆÝŠÂÅÃÿda* ÖèùÌÍ û…à{úÃR 6¢Ã|$`m%ÿ1UI¯÷&ƒÌ5­V£Êän#©øÛŽ~‰?/ŽçõžŸ“~Tu,š‹ýJmÉcý’úWø­*Kè¿;<~6Øuò¬ d€ûÁsŠÁVø‚åÂ:ׄÿX.ëi'÷é€~게n”ø®ÿÕ$jí£s?dçx¦€ùLŸJ>‹?‘كǩÊi!ÛiÉTÃåè¯2Qÿq2X6#tÑ&„{^‚à'­¤æJºÃð6n‘l7g`Í{`™;žZñȪñ? CŠÇÏùÃÏß!ÜnTÒ›†[ÏEœä\=0î£f߀þê„þŒc*]Pÿ‘®+³ÀÙNšOˆÛüÅ>"˜>d¸éÿ'øU"º®wp^¹ÛJ1õ×x…0 ‘P=©¦¡þ£¢Þv"#kž â:º;¨'ŒþËøU6}™H¿pŒ\£É"ÕS=Žb³šHNGïä?\vdö+WmOUƒ<õ׌ÂLçÈrç%šáï×ñ9 ÷ Âÿ~Ø»Ìô᪨ âŒ1ŠèÙ®?_‹…:©¯‡o½‚Ý7Ѥ~nb`”æÞÐŽê¹±T)ˆàoqG´Ãv¥Å:-ÄÒý†%d&Ì0œÆ±Úy¥ÂŽ'ü«¾ÊKž6¿V\ÞAًݬ f×/ÔJ_0êƒçˆ|çú'Z?Y± V?Ùgå2ç-HXò†øÜ¯…éùù(|þc¸ÊÐþë"0Týk¾¦~ð†hÎþfs\§ÉfŠv`N« {þEjž‚x »‹Ë:Ö "÷:‚·’Ñ®‡ßdè»$Lˆ ”Òž$bûœD!à( g2þ# ˜Æâëåp×}xn €Æøÿ˜I½jUqžý% å)ÙÙè›;»“=¨rBRz«/‡¡ ¦‹álb…e`£9¯!ú“ïªcÿ@ÕÙæóñëÉ/üÑBÌ!>çÙ×úDuÄYÃ,LÍEs4]™A¥ºÁ_¼‘)Þbj„s8Oû@5m}ò£­ hwÈ?¨J@ÿ± •N ™>؇nÍé6²V<ó?‚éa²@6"oqhnáV<®UÂóÙú«bÔ”Ï&|ÆÃSæ:.ŽÀúåuÄ¢~p¸y€i»óÌ7h ,¢ñð7÷Ù‹§QG«³/ÇK=¬/€ê›öð$k æð2¶¶Ù—št\Ø{oxê¬×.Ù®ÿ¨Ã®ÏÁ/ãã¦1ï) õ¬ 2à$ð°nÜÕÅ;‘ýn{+˜n÷ ˜Ï´Çª€*éÛÀœ²àZÇÀÖÑ/÷.üGM™Ã‹Ýtú_}âùzóŸÌlJv—šµGP¯‘†:ó•h© :®Ã^„ÐÿÊ ¼è„‚Wy€gƒ?ZO¾¹FTýföguŒþ‰NzMxÞe~1Ú8ČުàWUéY¯1=ʤ-zàôð+…¨~É C•Í,G]üq"ŽÇ¨È¯ŠÝNÿqý®‘Ô&b[/c…˜n¦¢°³Næ C{PÞq‰ŠÂòT%.‘¯©þè¸Û´c­ ð«?Œê(0 ÿOêÓ¿=,îT²«™ÂÝg‘<¸?øVøóÚdø>z‚Ðé²›Á¯þb‚Tô¼ ¿ëPúƒeþõí³JR}'(L~bejô+Úê5ö¡ß-'"®žî§“ó¯ßVÌÓ7Z¸bI¼È`;ßO%na ³„¥®Gä,ïðõ]Fµ#þc'vè*5ÍõùÚ‹ÜÂØ®Ï%¾9¥õùÀá‡ÃÌýúKÿæ«7ó£ÒbOí:¸]ÆßTù#ÿ˜„=HǨpóÀ4ŠÝø¼ˆ]õ¾_v¸âGÇ—°ŽW U·Yaè:àa=‰¥sƒ´¥EKtCtÂt7ü:E¥’VL»ûôÁcF‡‡Î '•|½ 1îb¦ÝìyƒQFbSP%dŽœ÷÷‡úe zU´¢Ö` ÍE²øëð0Õ­¨ž2ÊB ½©»¸²µ…ìèÖI~ÊU$Ôý#YQ¨o¨‰¸Aþ±N›1 ;ØÀcòú·×Ñ3R}0ÿ1‰Ücˆ1Œ^7EV-Iþ1O) 7>ðÓë`vÒrvgàìô/Ù;¶ îÇ,ßÿ ß]K¬8Ÿ5‰ý¸;ï}7`,ókÛ™¤‘‡Y¡)GÔšßÈ~ƒþ%6~õä­)üÇJ&W@Áaw{PQ÷ÿÑZŒðŽÓbE´ÆË¬Ãêz“øs¾TÓ„}Ÿf&`ºFêÌöò¯ÕèÜ´€j4XûOà÷Ãdyζ#‚þê²Ö˜èç,™T!eãå#€Ê¾#Xò·r úžbŽDô¿bRý C€ A§öå?û„\eQ#Úk‘»¥%†¸âv=èÞZ¹ÜÁìÎ~ž’+ä&ÿXm¥ŸÖ2¼Ý5Xßð T´q”säÑoêk‚ÌÆ çþêJO îg‡y$è½™U×yâï,Vm,þ«†YϼŽ/nFebS¢…Ìøüøë\Æç=M]§©|÷1„Ý¿ý$q YŸü# øÕ:êJ28vƒ>=oZŠºë$òK8³i‰%ÀNQï~õ»óŠU{ÃÃÆ¿ Z°Ps0c±ùFCvù>þÊ[‡æ7S͆–/èšfe4sÂ^àÉ~'Ô\pú3ê&òQüËL<ý ñÖŒæ˜H®6•3èaæ²µfŽ èS98RªŽàWó©®±{U‰-\Ƕøº¬"¢Ðyþ_$R×|ã?(Õ'ÿá§Å…ß¶´iZ½•žB³½Ð%ÞÃ]SÀ³R¨‡~iÝGðnðÙyæ£mz§M„·>£ß@¿k‰ƒGr\ǰÓ-É6F¿óÌ^%¿±+èúã©úïê?òÜÅF6Ä[Þ¯µÇJ'å©F”žK¾5ZÃ'¬†¾Bþñ˜þ‰Ÿ”W‘ß{¨tPwÜÇ’6%oIC>ÐLf“QoTȘŽÞ>ˆÌcüùqø–g¬ÖøF»ÉН,¦]±±ŸfÏ^)A¼ÿD„`yÈJ蟘n` ÌÊ4Žº/þ8SC_‹í°íß/÷'ójas£·ª rñŒØ gÈ â¡ ØÍ,®tj¬Ý_0 ôq¿ZîÖ e4ó$ž}7ÿ£—Ö…Þ8Pú«±ùñÆàWôŽazm9ê,Ћ¼qx1"êÝ0ö¯¹Z«àS1žÞè(¦8­Õ?Ç:ý•ÿÈÀñì$§~:žÈ=yõƒ¾Ô¬²Îõ35rŽÌìAÅîÛG\ì,¥¶5ÜŠçµ:àWÞ†ÎÏ­'«:I'ŽEpÔ»ð]É?R_•wŒÀ*W‚qð#ÿH‚5}‚ﺆ ô2~ÜÖïÑqä#^­# ¶EÆvøiÌ?Gó”Ðe~úß,äàj™™7~“~¾I©ÜE.÷Ž=äΙ‰ÿØÃõ^#ªˆvÎóW‹þ‰·áÏ[=œsÄ<ã´™ ÛhU¢÷É'tfì¸úg”Rfap± b¨?ÿÄó<íUV㬸ìôÕmú~²˜íð .¬’™*ôDTu—æ9ÕåÖ?ƒ×s•Gù¬[â’ó‡ýw+£¨?o$}á›±Ó´ÔEv k9 Çcó‹QÐÜç¬îÇ_IŠñÂÜÕî„;¦ÞÄP¿hÁÔÆ#>Ló7/R¥ÁubêsF=ÑþÜ^LEä2¼¨Ýi=9ùN D7'Óï0ìN¬­TT{“ÍLa½ÆøÔºTNFÇçv¦Iyê?|èÏUE×G¬t|ÞuêÈ+›û©Ô˜Ä9EFUMæ7Âjw¥:K{Ï•|K ËLÉ„ñaè|Çcå3YÃà¨Ç0íý2ˆÓ3ªÚm6ý>SÇgsí‰ôv~ç‹"¿ô7ІÒêd:w&ÃÌ56RÿqÁôVOM¾Q„틹‘ÎŒîÔ‚¼g½Qð!¾V ²’¦=äÖþ%ñªúÀ¯·Ì~ìÚ ò»ÿîV,Þvæn&ÿ˜Î^½©g,Fÿ«íá¨EUâLüG~úO ïãSžŽâ¡.àWeF±ûë‚ÿůÉéŸØ×ygÝVÒ«)œï~í0R©~j2mœ–V¯Ç þcj\è½OhŒHü‡;ý¯ኂ¡W‚Ë~ £UX¤ œå½1´"ÜÀ|R×QA­#›˜„~¢ õ²nh³ë ÚÑŒ|( öÞƒè= Ô Ð§ƒ2Ž™…>…§‰TKп¤¼Ù Œ¨!üOB¬UWÔ±WägîȈWz–BNYx6 ú)9“3Ô<ÉÅŸMEÅ柯bþÇ:Y…êŠ 2Èlütò>àW‹ÂÝÝ絪 ÷¸ŽÙÙÓ<°Ó N›Ì©hÆ¡eM½ÊCÿÄ ²±9˜¡çd)¹Ä5Á¶æ®f„n š¸€W½‡ßo îD&sÎ'‚Е/å»Ðþ%Gá½WšC¥ýK‚åHØó®ÔcjàMv¿Ç½"àë-§”C¿; ß$ø”¦üT1ºIÇÇç6 õ¹½ÉÜ`Êa¥—2Oj°yúsW´vÍ©LuÀ¯ÎcÛ¨ú†êþYWˆ8u;\@sü‡/±QG¢w±r0™\<+ÍdÑû°78¿ÏÈ «aJÌðwÎeºOTG˜FFpžüãºh…?ßBýyRú—¬¿º†ÚŸr^éëž3:Ó¿änø…Bß½bþàC@V°þ| x\!0¦Oâ¾ìÝ,;éÙáFû/³ÎMj\B)qš]|¿Üdê;‰ÛXø¥ð°¹ñŒCñÝAª¶aÝãïÿFnòöú*\w:âÍD‹ƒ±Hó ]ÕNEXr¼6V4E±¡ão<ˆ´ýˆÜŒt{Šê?¨eȉš©¶Yþ£9•˜ùänDä/Ñža1Ý? ¤þ<Y[¼Œ?º¥]ä½#ˆ¢“’c39†Îg} WR?ƒŽðéÈ5Xà÷õá^£VÿöÏj5ùîa:ye ›&ï ¿ú‹ùQ³Y½—u­h4GEÇ Àvà(øÔhàWÑ͛ԀœçŠ—0-çƒ~žH'¨eç|õy§ÍøÆeø¸÷TCäeb…¯5‘ztꦭ/ø˜²-¹Ìg|\ôW>"¬ks{T<3‰§fáÅ;ÂÔ¥^ÂKÚ‘Ù°}`ó£4‹‡ÖéyMM¬¬?¹H”]a»’b÷Ëç0&;·›\¦½$ï~BÊg‘­Þ5›•Q\•±¦âåÖXI‡é’{¦aÕ ™hkΊShw׿aô•¿éß^Ií…Ž'£QЏ¤§Ü(–É¥fGqú©L"*ðbŸ¯É>þ ¾1s'Z=¨?Æ•ª€ÞýqÉG|Åeìô¾øób€1‡¿•Œi"àËС½5uðO™k_ÓªMÿ’øŽ«ìs¤4˜Ú¾‘¼i»ù‘Ø5Hx`Ñr£f)ø?š?8Kmá¼³>*iþãþ‰™Ð_}Vç0ÿ¼"èR6Ö|JÿÄcš—„~7Ûw GçåôE 5¿¾þÜî‘TÊx£?ÕÆ ¿z¦„Éz¦ÇÔ]B²H5ÒoÓzƒ-eññËŒ–¢6󣮪~ø¦éb-xdêÏ:ÏC¤Küë›qÕÅjK}u‡±¦õ M’t­2„Xhì€%I~ZK:Íñ’·Ð¿þ톤Wľ™Ø¬MvV€ÿH‡­Ù~Õˆ*ò'è¯$U0w¨ûÓ#¼¤\D-ž'„:ºÓXœíàþ]ájþ‚)(DDWÛ÷†lù:Ö»šò“jµ°ôȯnà)3Áä‚IÆ3ÊK¶à?ë åT ²i_=åç×^SfŸ— ~Iþ±{®;ý†¨Gô=Ðø ûùÎÜ®ÿðÇ=$G¹uY‹ŒQI£Vc Ü,êfüí:ñ-6`»Œ-?*_b­ÆD¸.›´{p7Œ" Hà@€Ó-"—Imî¼"£IJÿ’ãàc]áÏ'âóÃÔ?AÝÔUÖÀæÐÿÊ_«ŽÚã,Wò7<¤;×$Dn#ò¿õCßd9îQµÖ•0mÁQÎÁ %`¯©÷û›s3•ùµÃ¡Jþ‘‚;÷´Ñ 6åÝ´Ž1Ö®ÌfZ½¬âÖ øAxŠæ{ó¾²)ýK. h»‹Çl/Wˆ0Œ²œÒIÌ‘Íàn¨#2ÿ#DÄ ³^è¬'w[Ëzµà/ú‘wl0ÁƒgçÈÛÁð›äœyˆP^ˆ°Ù I©*°¸[íšÐØæ$£±8a¼—ùÀ›ÊÓïª7}³9n¡^;ŠÚŠ7 ¡kú¸Ðüc:úâ! ³cÐ_ípî·†: ü*.ØCWxž½d­fFP¥÷ôUW˜ÓñÌBÕyrG"ÖohMcvTR+½Y”.#'¹ócâÇÐã;ýÇEüÇI1‰How±›XkÆaâïsœO¿?Ì*ëØ šèp”¿zcãYÖ»· ÏöG±ì<õç.ÿ“þ%IU·oú'¡¼6ç)Â#ñ“·1Õ{ÔNÃT¿ÊÇ*W•tO\¨=ÖžÓÿêàO~?ü?¢¿²ùbÆ®tÈvè³Ô#êêü‹‹8"¶.Q¿[SÂõ'Š3`~m_QúóS¢6½ý=ˆoâQÿÑ4J;OB½e~}-ÖÍî¥Y†·ÙoÃG_Æýy ûP0a‚žkõ¢Ô¿ä˜öDÏ–šÔ~'Ö³3ùrZc9ØûY*ân‚’•Å*¾ ~p°˜ÿÓ#\¨\cÒíi°ò7p—ˆî÷Q=Òhîù‰ É•àL=‰ñ›AÚÏ®öŸZ|O ˜[xŽTXÁ’0 i±ÊE¨’xÌïçû±kĤdI¯õèêê?”þèw‹“ ¯³»i=ä8Z°ÂïÄËŒY0 ïÁe6sÌ'9¿7ÁI|éµY»þæ}g¨Yô[â!ºµ#x£àRÅÉ-ÎZJ¢ýÂb¸žÛÜHd Ê5À3ë¾ä]z$ùÇtêj‹‹œ©ÄÅñ9ŽYøÃ?ˆ‚Wâ+ñ¶ñïa×OaÕâã?–rþ mOåhàwúÝeZ[üG9ÎÔy¬}8ƒN°£ñ&vÏo4§/©# @-U™ÎMå@ÆÓóÉÍÈVÎK£…áJÛõƒ×±$ ‡^l+‘ʸ…Xèwç·¡Ây­u†kLEÅÔWtË0ÃXü!ËrŽG𗸮½8Wçço,?ãŒô0·’­|‘#­“–â¸KWÚfXÑ"Dü·ð2 @¹‚øYO¼Ä"£Lþ#>V4)ùÂmúïΆ:!·aƒ«³7ƒùQ3aŽQÙ=È<(Çšoá}Ʋç.xËä ï¹îK¾éŸX™)ÚýðÑÃáãÛË~²õ³0á?ºÐo}–¾úØ“VËön¾¬Þ­vC¸š’p:éñÎ{&ºD{øŒgÊ0‡SM` ¢¯T0óGÒiw¯•ɱÍÔUøô-°éÏÍXÖ>øø¬d@ï:s¯ |3;ÚUí£?£7FYžÿér©¨&—ÉÑŽ "Mè$Ÿåk”UÅzƒFb–Y—>Åð™éÌàj6ÿñP4$ó¾äôG™_{Xüɼ‚#\*Y.ÔxLGß½†]¯¢þü­uÀ±„*•zôoB.×t+Ð ‚Ë{,¶à?òÊä2“8éÜñïEИ°\9þüóøá.ª¿¨.Ð’é}É?lÿ±›þW‡µáZ4ê?\±þã°[Ÿ ÛÚÆÝou£N“"#-koé8KjíÐÝüIÿ’ا¼b"óŒ§SÿÑ KÓG| .EýUu6•ÏËyö|@uraéFÊý(R}ôm\ýs`N§áSBàχék¢pŒÇµ»z&¸çä¶{l~ ¾.3–s ž£ ÿ]â3”J[A5Âs ‘->X¹C¦â‹­yGÿ«{ðÞðíñuC©Éoª ·Ñ=y‘U<ùiýG-v¼wýø¤ :™øk9¬ÒD=kBmüN0£x_!Ä+tV‘ÿ QÚ«ÇEEléì.^œî Éá<@¹É2Æ:zß#‚Ý@>s‚Äç#ZT"Õïê\j]ð’ÇÉ×ö’»eå‰6ðs±ä#‘h¬g[žfÏ­À;7!É—fÝ$‰ÄÌ„?/¸ö¹–Œ_1Ä©'šÝeXuþ"1»¾›q“&•áfb?Ú ê;«?þ®»Â­µ- ùmX!{KKbËxÔêÅ¢«?ùGt«>õÕñ&ËaÞƒ”M"Ê_€ÿPáä†~ç?4g……Øñr:Wc4þC1™¶¢é¨ÐNòíø×Dîqðî÷ñu·À`~#Šˆ§í ·â ­6w„]ŸsÓ7e{ºÄ:ga²ŸÑw?³• & wħ¿º„7Š=÷C#v ½ÜèáiI‚&6yŸúÉrÞh“Êk¢¾#?ÓY>ƒuÙÅ´X9L&ôª2Y‡·¼ºà-:§Óßô/©¥Rg£‚èO¶\oTíºßèj½3+±ª'“²2XÕ©’Ÿ‰ßm¢ÿÕï¦==~›7;ª Sóœ7¡¥.ÕÞƒ_½"_Ln.66Š{F/úïzaí‡Ó¿w•yçÑï¾¶’Óo}!¬ÞjÝÃŒ#ŸY„o]Dï¹öÎóW ýÕ'bÛß¹§ày„+˜\}z«ï_ bÞìQ&ImE5u•|f.½´^3éþ½™ÄÌE ÿ-Žá£(M¦~Êé?6Pÿ±üʃ d ûGôWÕ¨•i‹÷Xhö•×àÏ÷ÒÓr„5YZWòiäŠ÷yJÞâ?lþ#>üùÿ‚ÿˆƒUÓ_(¥U‡ó<9/@”^Hú—„¨+µœzG=D­Ì*ë¨?ßHE¡BýGau[”VùúCÁ£ç‘±?§D1cþAkOÝ÷iý˜È êÏ3übÿ’bZ_ðž\õšX†ìô/©¤ŽWo‚Q'ea bƒô®QÚyfúM&Ò‡‘;îã¹,€îO݇)[‰ËÎbÃ6ƒ»ù2Õ°o”òóÚ=8SR¬Þ!Ã,ç&c5Úf_`Emu‘ÛKG­ˆ¬ê׳öu˜rˆìÃV¾SºIä¹›Úÿ'vÍKFR„êàcb"¥ó?~V-š_ËB¤[gå"yFLò¬‚pRñ¹Ay>ƒâl ð`í«`xǘ͢¨aðÂŽË~õþc— Z©x‡dðÙÍÈàöòÛÑe^êø»RÛ|ë´ f÷f!5ˆ£û„_(ô]<êÏߊ›ÔxqL‹A°êÀà¿¡: 4°Oé@†&Ãù¬g舵4Ñ ¨¬˜<ÿ1Cɦ7ç`Æ7bÙ’#ÍÀô!j] ƒŒ,9܈ÙÈm|° þc^°1ŸéjœÀìŠp„ƒµÁ¢hvð¦IàS¸–KÉ•¶ÀH¤„í>n}6a—K0ÿcóºÎâçæ“§2š|×iy¼ö^ÄÂ{€ÿ˜€ÁÑ vü þi¶©Ð0>5wáZÊ›ÏCýGL"ûs¬ÖQ6à÷G˜uD«€%;G­L~zôêØÏR-r“ʺƒDÀq…™ÿ±CæÃB_!ZxE?ª@òSr?wS{= õ¶·n$fâê=B±ïæIŸö)fc³ŒN Ç« å3=œõìþ%`WEPðƒÉY2]z}ã?ªS?8’̨7õUÈ)*‰O"zÕ¶Ô¤Á:`m ÿh@Ç‘…Vqð«ÃV &üÙüù`rOê›Ê/"ÌÞ-IHNÎ̜ٲÖÚ{g2³ƒ²U…Y‰&©,¶ü³þøaþù]G76–d9vu;lÑUÙôç=g1Ñ­/9È,ë:[Îü„׌Ž:ŽJ?ôR½”­Ôß>Œçõò z‡É?’ñ{Gãïƒ,3[ÂGtE1µO'Ý=Tqx\Û–FÀ:_ èÿu_Öpwͳ×â½¾^óÔ‡ÛN©í0ÛMÌj¯zLg®ÌLÌ› û=žnó·Y¯9Ùêþc•zoqL¸»6—f ê0TtÃ@œ*“…¦ëPJøæD÷ ͦè¯Yùà¾o ’-fì°•‡ ›Qt EËeçET4¹Øu¹oÛô2hØP™Ô¬.#‹˜äRÝèמŒŽŽë™ÿÕ¹×Zƒ~*•5™êÄ ä‡“M»ã4jhæo­£ë…»þ£ü‡=á³þh·ª/†Jø&ÔŸ7¥~*ôòµû_=³¡³-G_÷4ôaÏn&%Ý’úWý¹Û¬g~íQÑON…??*W‰žfLú9ÎÅwì0=© MOåà :¬¤qV±†Ñ¿ÜÄšÖúïÞ]±™“Uü7Ö2ÿÃfƒÝwæ‰#‘VG ×c öAêÏã3ï<¹QÉxª¥à´î¤þ|) ¬'ºÔ ü"ÿaëw'ˆot.8MµÿvæGµÑzÑçØüê™ñM÷‹ú«¬z'øóž –¿ƒæäã -OýÇ âßpéoÉ?Fþ¤ÿHBǰ4Ƭª=‹2+ϰ§bj9Í\¬þQlØZ¬÷=ÔR?Ç\Ðw£ßm&‰y/OKœÁÂÙ“QÏ¿Þ&^Î@ÜïÏ}hûú«Áð‡èW*©<ÈÉŠ%Èbq¶Û†ó¾ C¼ÿ1¯ü&¿é¯ƒ=ÅàŸ&Õ‹óíÁºü¨vŠÍLOÞ‰x§]²_cãwp'ö¡HºApC¼4d¨õ/蟸^”"Ö‡OÜÇü‘§Âž_»þ# øÕ,”‰‰íÚÉ+ÌÿØGþqL–¤þã}ðmñy<žÂñ„¨w+whèP&°ÃÈð&Q~ÔÆF;3“Z€Éì¾Î]|ÿ±´ëÇå&9Ò0ÿãVfþ"*™•]t°‘*Ô·ßñqiATüÔt4§×Èp–áãÆákâ Ÿ4wµÚ_kчhÿF¦â W\¥¶׿Y%¿:Jþq‹9R{Tøµøïd7£øsööèñƒÿ˜¤¿¿jÉ SA›¶ªiœ”q°»ŸÁצһ}? ítë Ö¸’ޜҞZ½ÆÜäžÖgƒõ¿:ÀsH dj&ùÇyÄéˆÙ Æ}ý¥âQïœÔ9Â\È„Ä!ððy±}ÓðFëÙŸO¦b°ús‡0éú⇲©)ùÇQ¹DmAû»Ùá9lr6:KÍ@5žúÏæk|Vx¦C0èûñ‚½ÕVá®[.ç(«F—Ò ¤³¼ê¦ê¢\Ö¸g½é“ÕdÂÖ'¿z‚•ÎÉî.’ä†ã·;§|†AÊÃý~!æ»òã€ü#—zˆJ2‘Ù‡Š¢{2.sžàÕ†š›Íñ–tnd–ús+¼ÂRf‹‡Çø[A}Ñ< ]þ·Œö§q—ü£!¾`ê+ÖÊ è¯ŠZß­>xIf8âI†ÐÁý6õˆ=ðzg©zŒl% È?N€˜ä¢š¼æÊ?Îikè«Ñ‘S?k²HÌ_AÿÄðdáÑ”²Æ97Àž£ åú·×$ÓœF ò‚wå…ØÅ.ªÁwÁ5®ðÿðª 7ÿñ‘þ%ÿ«~7z¦øú4ú—47Âé¹Û»¨ÿØ‚ÿx¯‡§Züת[n2n VÝ®»Î(oàÿ0gå0úÝïF4# Šà_¹-¹ô¾Ø·¾è7Ø*9ðÌÜÔú¢¿ê ZRçWÎÿIþ<:}OŠs°î°ú)A|é:RþÑXJáCT·K¨ÿ¨oLþ‰-žƒÿÈ—„À—7³µÚ ~5 <æ"öÐRüÉmq’Œ&è  çø,îqÏLüGM¬qeü‡3-CŸ—ȼ4¶ï&1ÓMüèÇ0ùóŒÄ©hj°Àþ(Áâqú3c£cÝæÀB} ¯Ù@†ä…6ø&Öò+ÏÆªÿ¸í¬m]Õ{îS bߘœþ†d³éÉ•Jå“ãÁ ƒ’Ù]\î¬øáE¢µ~©_ áR_;¾R?x…ØË nb¾ÜÊÿsp­/ñwÉ?ªS¾ [ÛØÞæñƒOˆøÕ(òhˆŠ“/TE¿ó–ü¯.õ¡ÉÈ?J“oÌ!»É‚E^‡üž¯î"#™Žr²µÍtåZðÞÙô®`£•¨´ÜD?A›ßhDþ‘ÿð…CæVjÒ™—éRÉÜ/6àØ—`íþ JþþCÿÄ…ô¿ú*ZÈ$XðÉøYÜ¥AX·œæ:xï/LÌ‹Jö"û«ÃüðI©ívÀ7 `ætÆÐ—y_®ë5ð> fiño“ÁUΠB½`ã‚äÇÇZ¥vö4=È?¦™÷±É©ÉÌÞƒF‚?÷”5ƒñÅSr­¯d¦¹c^r§Ú@ÝaW2@ƒyàƒÈ|Ñ9õ0—Ò¿DZÏÉQʃVG-| ž˜Ú,¹žq G.mñÔTPÄ!d[­À±‹Q—WÇŠlÇìB¿Và!u ™é¿kϵçÖÁ³FÄä"›,ǹÖûàðпñd¿’Ϧ2'Ë*â¶,E½å,ós¹ˆnõëÐïžaªÈP¶óf«#3O’ðD¢ÁË_F£Y5ÐD¯BÚC'fiŠ~⦚LÖ:Ñ,Žþêô}©ë{@æÑüÊöGSÈF6RŸ¥XJžÊ¬ý[Ñš÷ù¦ËÐö'Å ¹˜åMó2ôW£™BÒ‚éд¶Ú8—9c8ïsûäGÑ5ßò†èò!˜kOYŽêœ"â×:œ»nÏÿ¯¾96jm]'ëóÏÓº>ûµ…íúØz=Q‚~ívß}Ž toß«¿ÒM=Ê/ò~̃›M]xD43E°Í~ôÍüóXþ·FT#2ˆØ¯ì/³>0+ð›ñð¨1ô»ÉÖ`ï{’ÅLŤ$2/öùÇòïoº»j+ä­vÐëã?Z³ÎC”M)Y©\QZß²x£¨¯<ˆF7r‚oED] »OÿÄ×¢ß9åÒnø·¢ ‚7šÏ´èwçƒu? Û†ÿðãÊ#ðÙgÙD\ׯ‡°¹øâ;‡˜Ú.~ª4~$>Y›=I¾œèk¤37R½Qˆëí‰÷èKæ¤óÑ£ý¸Üpøóú‚.¹tGÿžó%ž¡?—ؼØÍr‰|äË©€¸Á³Zƒ¿Úf6–Ì'…ðÿaþàú'6áÉ%ã¿­*«k($æÃ®¡æ/þã,•™ÌD÷Uà?ŠAy5xü¶ÂK‹.ÁžôT] ;þh/V÷˜š@t1þ\§þ|¶»•›(ÿµ!5±|sÉ ¢eµÿ~6øU/™JÚÑ÷¾^–«;@”Q—+Þª.R±Œh¿(ýc31í.3üùj&\M$‹iÿX÷ï¿p ž®P°l=‚¸ö”ó?v…ôR'èðW‡ì(<ñøH«0xÝ4©«ÕDú—Øu˜ ©ë¿Íþ>ÁyQÓÅ×C)ƒÿËjÔ:p2–ª>â¦HÂŒ¬6hž‹Ð‘ö!õ)•©ÿxJýy%úñ^…?¯‡ßh~ŸZùBèâÊU®õó£,2ÜçøúxfK¢Ç—ò»ª‰•MEüvs¶•…ùƒô-å÷ ÿ¸…†j¬rÙ‘P_MÅkúgºú¯Ðýç¥9ò“E<°’Û¢( ûûzm'ó?΋Œd~uëû'þ¡÷ƒÿ˜/rS à)k0çÑîPÍV]Ž¥þ#&¸GwÃpþÓÞ¢i}´ß£ÔÿÀÆTÅN÷U>à:÷ŒiØ”‹œß^~cñ?-ôwL?@þÑ„øó ùÇôGÀaÖÙ_·~çZ˜ â#\Ðp´wH‹¯wÜ¥úü0œ‘©Š‚º×$šú mXÞ!»_Ô&¼Û(l@#ù*ÌùµÝô†dɉ˜®c±RÉfâÿ é^’…÷ô3'x y7 ª‹à=‘¨Û‹§¹-Aоt,fâ|cò 0 ûAþˆ®ìÂü*QòLÕ‹áCf²ä*VûS@‹3ºÐ…>s¢bøê^,))u"ëaѳÁ1_¢óÅlz{#8Îò¤…Øî¼ë饢Âð±ÂË­¤{+ô»UÑ“¶ƒÿ {÷n(übôWÑÔ:”9‰Í·€Ù„ ±ßõÝr"ÜÍD¦›]û¡;èT½‰hÆÉ qÿñ„;·ë¿«ž~öWùÊçLœ]oRóMþqDÇpft!3(cÎg£âAmáC8•k\I5ÃuÚ;´°¢±ÈœïÒ•k;ù‡§:JþÑ þä«zI-]˜åTu/VKéÖu›«ø¯qûìO†2èŽë¡äs”ÓFàyqZ€†õ£÷[có1?1‘jõˆžXúúØûiVa4^WÈåìÊ’äŠ Pæyérk½{àWÊ;rÊæ@zÛiýôÈF ãf@wÃÇè¯6èÞàWŸ©<þKË}t”4Á(yõÅã ÞXódþù!QH<6,#Žžä—ö¹@ïÐÿ*'˜åHð墴öF{$Ê0dŽHÆ3ìm»ñµ…Z[c'U{È`« 3쮼aÄ¢‰éà2ǰ[D üÞX‘ØXÚ"¾~^?ŽÿèŠÞä"¸À)æŸÁΕ^œµ†ÒKéL\ÿI¼­"ÿ¸Dÿ«+tÀŠAß“‚Dú-X3öó pYÞ»wÓRxëÉØŽ¢òºVµÏHøkèwšaŽc§;ÃÅ$A¿[”è,7ïÃz¬ýqò…\p@­QϾ4²h¡å4Oó4CV„׆GÛÄj_ÀxêÊC|-Žj ÿÑ^½—9ÁÕ_ÇsD¦jâ¹âYýV ûõ÷‡ µâD_±ÐžxpºÊx6 /çPÛ˜ÿ1—þWÓÈh²Át¡kf7z¼ˆð®†P¾ùµÝÄ9²™UôÛ5Áùf‘qŒg3Á#pÏJÃpûaͶÂU¼áª7°Ò\¬!R‰ëÚ•¿·õÎÔ«`s‰ð7¾ª øU_´™¹‰Þ#™)Í`øÒÊn^ST%ƒ²âý/öÔEë°û"ªÕþZp²þL|ðÓÛQoRÓ¹OcÈ?ƒÍÀ"?2“ÁÞž„ÿ(a s8§¦ Í\áÿ©êqž’ën•¾½âiòdP1à±à#/ÊGXöMxÜ—j4µqñ à?6³^?Ó˜ Ìéëy¢ÁØ~´þ<¹xFvu‹ÎhcÈ?öÈãêÌB~s&‘ä@Ù:‚þíóÈ–®Á§,WµÉinóÛà•;©^ôWõM´aäx£É;àeºP?˜—¬¥à,Ì+¿ˆEÎK ÝŸ¼ø¨}ÜËŠ €-ÉXb0G*+j6¿@lÀ øsîï ud³7ÕäþÒGÕ£þ<2m+ŠÝ¬Îc`v—æ×Ž þ#®5†Þéyö‘Ì~ÊCöyÅ—½)¥51žP^î«Z* RkŸØÙ˜õê2?ÊŸÜò;½Èº£çÊ|ªÖàŠQÇ%5³©¯°{Ý8õµÀÜøÕqmý{Y'šÚ$³ŸÔtÁ_„§éŒþjŒó-3!+Y«Ô ´%ÔYöTLMncÅxäËò?Ñï*mLÀ¬ò¿Né;G-¹ë>ýõµŸýí†öYÌ´Ú2Ì?OÆ*WIé¾»…ü#²žòùó'ެ†­cúB-\yǸ¦W¤Óü!c·È€ÿø £ÿ—ö9Xÿ“xaŠ`Nu}Ñþ»[@ã«0ox:Ñzt9å'ë?i‹´’ÆüÇN,f-,LSL56¦cs.a±#¡qÀïªlLû‰›çÃüóÄ`?‘Èm=±Å=ù3§bX@}ØàĪ \rø!br˜×¼Ñq’hí p€âäâMï†ÿH‚õ¿ÃÞ €_Ýf¿+agpªã?>†±ÃúzE®´È®?O†ÿÈÆzá¨GÎÍù ´‚üc3ØÎÝÇâ³CsG’A¿ïèGDZJx…þ¼'^ðEcj6v ùL©ªÈqªŒÍ%<ËBT ï¹ö‹ðuÄ~ýeÐ…>K§e¡â búåd{`ŽJà?âQ­QFa×Ò°ˆ¦;©Jä}Éw€¾})ØëëüÇ G^£§¸‰´»Ä‰ÕÇÏņ¨ª$JªË¶6•wõ¾`'i,*­~0_—~8ÝkõÚ(j a·ƒ8Uàšíœäx‹ž#WLjÞrÒÿª0ˆŒ™â ”U+@ÛÐÅ!ËÿÐw€þP|ç´¦£ûî-,ô4NÇ(´R_°Ä«Ì˜ôÜÈŽÿ¸GŽPDh*Ú¡¶å&›KfWN&fþAà›¸_/x–¡ {šL¦w)«Mfnà?öƒÀ˜tÀ¢Ê€óÑ׆OYNÿ¯+x›+œÍÁØÂ äù9]¯Ù=®äQê?&¡ ÉŸ³³üÖp¢ùTsäêÏÐK« ÈY´»WÈxú¨qÂýŒ›8P?•üã%Õ$3TCqKd£6eó 2ã2¶¾¨Õœ~éS­B°Ì§©Ó+oîæYÿI†tŠŒ*¦ /ÝÜã[Ç"ý=6öùGs(Ý?•#_ˆƒŽÉîXÂ|&z~]F¿;ËœdÝDÏ6<&ë%¿:L,XR¸ï_k­'/ ‘Ïh¹Q-^rI@ÿö{ÔÞFàK÷°Åt½z /3ÿ±ˆúó¨ÌÿHK”à‹è*}Ä Wþá«­`~m[ÎÔp2»9ÂÃL‡ÿXföAvÝìL¥}k§|TtjÜ×*Ý™‰»9œþ‰ÀŽ?ˆµÄžôPñĹÀø_ú8¶6*Pý‡¿#“'È9ûùmÄ×>R?8[ÿªw5¾iYYÅÇS_¥/Ð-CP?¸ûç—â;ï8j{àÏS¢ê.¯Ó¿½“®æ2§+’ÐÄ}=~˜Ê¡ ¿®®Nÿ'"¼r ¼)€•ÒºPÍÖXæ¥ý‰ÈŒÿpÏñ ú³A?KEßÞÂÆRÞ”Ó䡉¸F¨íØ‘×Æ&ÎÆr’7"#ϵ#lmÐ ñ³›ú[㓨 &rDd쾞JŸ&jIÞ³æ„9}‹þj„¸æ³åxA´¶HhXß X¥ Ø÷ðàæ^Øì` Fê « Æþô”‰ ·ê%ÄÍ9JéöüÁô/yDÅARü¤m…?õWļà̯ã>x¢ >‡OxÊü¨ØZhk¾v´¢â¦©ºCöñ;? n«'•/›ði|¤²ë?NÃ+ù‡Ý–ïà–œª¹8bÿ]¥¥B¿û«µœÈ‹Ÿ+ 7Ž<)W˜^44bíÇŽN#Gh޵ŒÏ“É?M~5½_KôW©±’­É†ž ÏmŠß‰M/M62žŸŽŠÿ˜Ãpün=XåbìÇ9J¾4NÿÀôÕK‹>؉xƒd0Éñ,Wг*!û­¬V.ºCåÅZ¤Šã¡’ãZ­Ü£þ£F n}=—>ú}_›±þc< QKêQ"áwƒ;a&Etˆü¨˜ÕRôq)‰_ó‹TI:¨ÅÓ9;—ôJìýQKq¾{ŒÑU5¼½+,Lð«Dè¯9{Ñ8;}˜Ž¢–Š :t ŒíŠ:ɵ·1ÜUcöS£dÈD–õDÆ7¬$ÿð‚w¯bö'g{ 3“†fÝ ÆÛóuÁí†Ý´ÅÒ¨vü :X¿[ÑQU[Î:‹ß“½5‡¨‰Þ¨ùG>д]Övú'6¦þc±UƒŠôÓÔ‘W‡ëjƒ~O3¯0s‰¥‡ë@¿uŒÖïrî¿á=d)¥V]ôR±èoHÎÅüÁStO|Hÿ’ÍæBê?bâGn‚öNÂÍR§Á(ò ww£?´–ÆS*Uät¹ÿ±K®¡ÿn²¶z̾5ðCáë­&¬oãW¥©–OÕLÁ®¡…{ "_xºüÇ ô»;@rד¡ÖäÓpwÃÌ´£d+óÔÛ3?ʃ ù8ÎÖºQfàÚ’™¼‘"$¾ÊøŸð‰ñ]'ë¡#¯Ïõ™ëüÔ9µ§šŸ6 oÑÔx©d•㎸ú*B>éß™ª¾÷§Vùû›t­)¾" ýŒî‰Úð·õ¦ÚmøUz¡‹7Ô¼ûû[êÏŽúb¸Šá¢–~­l&Ú3?j¼vRT”ÕèKh€Ì¥CÊÏ,•¾'ÍÑ_}ÂÆu"y!€_5’Å)bÑ‹0÷Elì@Ñï§ø'º¿eM8uˆhþ,lÊv³=êMªK>ðV'ª¾-N1'ñH˜;\Âü¨Ob9-oÁ:.€á{¡÷¨D¦Ûü>5¾)Z‹G¦ÓPÆ5ª?/¤—ÁÔåÞ]Å7&&“I…NÖ©š•g‚ ØÂÊ[±Ý±­Y7¦H }í6¢À~ÿñÏÕŒ+ŒOJO2›èScå:©úqÖãE½A®îK|“uè_r/„ãhùŒhàWéñÞáɦ¶Âm”ÄÓ^ g¹Äü¨±F$Ðû^ØåÄð¯žëŽ‚ÿ„~w¸¸Š7Ú„Ö("W6 k=Ÿ1{$Ô0VŽvu:(Ž?:ªøå•ð8sY÷£±Z >)¬þ›hG†—’{ÝÂüÈf¡}[OÍFbªý¶¡«©ažfºFørä;Ùa5† ½®b‚_×_uÄhܵô(Àö€LâÞŒ@OEÓ3=qoZº.í¿*„ט‚í+ŒZÌ e¸j†ÇÌ,ÿ¸¨ÇóäÀc.Æ'œ¢ ÇV³ùGO¸äOÖEøåzäF©ø¾¥Jrfœ Cz@~ØË¨ä,–¯eZô8¿³ÕjêÏ÷Ò¤¢Ù½ÁkˆËa&nü ›ß“úóÛÔˆ¢Þï+^ä*º¨ð«ß¿kKñÜ=À ;±ÿÞ” ÈZ:Z神gz¡ˆ-d5ošHgÛÆÔFg§[9“cé.v–L)‘Š 7¸ÎŒ¤ûwpÛ¨j(ùÇ@¢Ç8ì±ó íùƒ«P\•qÞãzŸ3åj/üÇMfqͳËÈwô‡Ùn³ªp[‡VZwø˜Ä$“ä&µNxSÿ‡ŽíW¨|kf£’ýõçu郕¥6ùG3‘ÅLJWýíØˆW¢0 ȵ.ÿ±þ‰ÛÁ¯¶¢Çð’â°™Þ¹“\­4Ã̆Tº$uzRŸþ%óðÆ©øÊt´É‹eœÀò\[Âÿd~­E]`ÿ‘õžž\{DÿݱzT£ ýKìù'ñ`Ï'’‘ÄÐãýbÿöŽúôJL2q—Øüœá¯¤ÿ®'øUfá "9v˜›\Ç'àƒAúìÁ ‘Ÿ·xüGæŸOÑà?ºÐ—P`û«¨ úóîÏ’¢8hb€ÙÞŽ®ŽÝï…Åo,?[ˆ®S|¤û{ªÅ[ëÝ?êGÐïÆ 7Šnu„7º=~$‘áòÿñ»Rü-ªª¾âxw6¤%=OÈöw¶[hö“7lg¶I-¹ÝY&]ªÁs_ÃùmŸùªëa¬X@ÏÅ^jã‡îqZベ'å™|‘5Á=2ªï¬â ¾Î€`~î‰8"tüJ׆£X¨¯NaÍkñ3Ña›±öFYÅLfæÈ×Å·\àÚÉß¾ ûO<[Ÿi÷!1ò)™â }srµ‘§w]–¢Â'¿Kd´/¡œ8(×®‰b ^ÙÑVêýèãØ^ Èp9Ùþü!x-~t?þê+xž?™„4ܳéÜKÇ@õšŒ!Žò‚߃ϱóhð4_Ùk1ƈBØÑrOåO2§Ûh˜¶£ƒu¯ò÷G“˜_;PìGß´»•Ï8ìÏž¹5u”T»ððö¤ŒñàG/ÈpæóûvÃÍ%zlѶþ½ÐÿýÙþ£Y¥“\aì³ÍD-aµXËäGÐ_Õ3«f.*8*+…Í[5†‹ðS™ì¥DSÝŸü£ §9€­ßž$™_»tý5 sàÏç¡—zEþŽ Dâ?‰•çÎdVÿqN¯ ~En µœæ•pãÑÂvÄGþ‰é+Ñytgys ÍzyÔA50 ßâKýË,]_£e““Q<"×ògWÉ¢v£ßÝIßÞŠä3÷Ô:Ëçc²R_¢æªù4SÕ@çvuÚªJš1ð«ëVv4Öf‚¬µ'þiÑ{‹x»3(]a³¿y”î„yÑ_ëDþá…èCWÆD˜78å-à?ޏÖûÀüÚàa_ˆ£˜Egb:IWøí˜Ì¯]G?øäN_0»·d5 éÕìl|{Z|—aÅ_*Pn»#Ó_ÿT ÿî)ð«êø‰Lg§âÅÌìlÉ®ªYûÌXTÇ_±öÐeÄߊAŸ‘–¨Ä"£¿R¦ÝÆ›xã³8 ΋e.ÿ1W[]ëã¶•äøóHÎp0ï-™ ²Ð¬Œö໵ÏÙÓ*„ÿ8«¶QÙÞ ?wÆ|A®þFl$nIýG¶ÿ¤þüŠc¡æÎD¿Ó¹ì­,žOï©Ç4’2-wÛ—üc>@÷Ô¿Òþתë¥VÍ ^a×oR3<ËØ®Ôê0'x¢8ml4Â…ôâ®çù÷sý§?§éˆÅ׋¬Ä„=eNø6tëz"ŠËÔ‚<—è6T¡Új…àÝ °qvLZëÚ€K]eblá¬b¹_8á»1ÿc_h‹úú=}ÕH5‰Ï‘OØ<DækÝ«Spƒþí“Ä»0¯y‰cƒðáßp •Ýg.Œw'ÖÙþ*­ò‘q•=¤% }YÃÈÆŠôzÄØ °÷>¬ áGÒÇ(”R¡8ËoXɾ·³íùñK—èk&–¶·H¨m ¬IvjÄóFW—ewÞÏ{LãkH\?_9;›‰Ì01W³;„ücó’à?€WÅ&ð“ƒ@í£Ò^ ž•—ùVã@ÙžcCÏ©×pö6W5…¬¦ÜÊW#®îîÞôףͦ…S+AV¹Žl ö¹ {(ûlšqˆ¥§Ð·0õƒÑ˜ÿ1‡]FÇ>÷æ7AÿuJTû?®'šª‚÷ŸBuàr"üp,ïZ5¼å+sî6[÷ñ]éôêI\è* Ù*yYÜ`ýÛOé ðh[PSä…mïct_ÕbÞ63cÕ0”Miéß^Ä9ÐÜA‡ù:àMðp‹é­xŒ,é¾ÓiÔ zrÄ<ùcøº0c‰Ë—€{µ6 Qáq ü*.Ò,ª}Õ ¦µ§5;S3ÙŒµÎóßužûÜ@ýë;jSÈ»€êÅôáÊ#ã?²ÁÁg ^ã3ý¹òXeˆï‡2·v„¹ÑÊnÅ2O+ dæ‰YÈ" w½ÀÇDЇ§D9“dB³úÈôÊAE¸7«tg½a MãéÉøœùåËèfrn#]ñÂex"áÍ^Ü› TMw]o­œñœ±úØ'½á?Òã'ZÒGfý_‚` G¿]ñP<ÝØÿtfXî·ÄNN¬Å)±Ùå?vi‡é‡R6uoÒNÑÑŒK?Ç}¦=×å(ûÌn•pgBI=gQ:d>E0˜Lni¿ßNpŠ~¨4>£¿ÚȪü[~w ÕŠºîÌ#Gi-œë³_ÛC:Í‹úÁšè¯²ŸbÐkô/Y¦ï¦~0ŠžZ[öKË rÄS"÷ç‰è&3 a¬×vhŸŒK¢‚ø„þêå/æI=ôµ B½A-û2ÎÙEDú¶|IaZ‹Ñ3·\aØœØÿD§~°§± ~׎I#qMaIÌxK¸‰·ò0UÎÏEgÑÔpϰ }ݳú #ÚÓèäÉÞü;&:?_'Á¯Ê漕)A¯üð CÅÙ0wxÁ¡òï&»~ˆ–h?öÔœ¨)™Í<Ù7û5ùÍ|ìhìmn¹¡ïÌþ›xz!r ?°øg¹ÞøØÔGÌkÄ0WÄjÀ¯|ƒéå³È`Ò ]'á9ýK ¸>ûµ ÄD}õBëA·«*†N¶`ë¯$ýÛ×éþzLô»>¿´ÜKG90Ápت{¢•üBÇ«ÑôG9ÀÄ (â8h–NG”_Y°£>Ž·y(ùÌ@Þü:b®H¬íÒìÚöfô%d£r´Ñç§V̈~7ƒ±ÏubÊò¼1ƒy£:Ê'†Ýé<Õ<‰r_ƒŠ5ú)ýÕ9}:¢ÚØ$?,çVðczÊ%ïç7TEE• þ㓸@†4Qœ s‡S¨?ÿBE½ Þ*Iæ]«žu¼¸êÄšt-¿úLÝÅ^,ŸÓ°ÂX±"<ë ð«–ØšK(në‘5Ä…ó©DwÒʼ[@e.á?R•V•G©ŠŠ¡¹•˜AŸ¦u¢ÿ•ݸ/ŒþlýCÑéIþN%B Ù ;zœíÀ['¯Y…—¶ç†TÑEËl¼…»üŽGàgù©’è ì¾Ã©±cSÄB#3–y2ÜôF,eþE€j Õ4A÷e6Í‘Ñè‹’&3ö"Ù€¸ûLÿQ‹ôVnjVãAü°â ðX}É?Ûðßmú·¯ ¶d½¦¨GTbâ?¶ã‘üøîy°»QLe ˜þ åé5Ø… °üEðIáÈjb-·`‘ªŠNÁžK)ý¤0¸WáÑÏ㿉ð#QWÅ3çÓw=)Õy©‰KÏÁÞ”0¿ÃúÄÄ>Ä{Ü¡‚"ÑIü`üÇA½yøaÈü襖rÇ|™ÿ±Øì§Òû¬œ·Á_&ÀdÕ:Aþñ^ö&SØbϯâ,2êÙa%ñnß74…jD:š«õÔÔ Ð_ݱúC_Y˜‡¢x(µŽOð¥9?ÀâÖÕôb “›ãjDÿÄ5ø0=¹ÿíз¤¥7p#úïÖ270¯ãˆX3ê½'£»jŠ!¥•?Z“Œå kffÖUjéî¨ÿÌ1]¿ò÷”g˜Àì!ëŠÈà\ÝÁ¿¢[=á.X%á?v0O$'Qÿn¼Ô7º¢œ„-Jmc_uTŽcƃ[ÑÐIkrƒš|ÊùUrSs×rZ~ä ÏÁþ†Q5î`¦íð§etíŠA†”‚{x„üãhÈ ÌS®ü㬶ÁX…t="6Èbƒ™‘~\^ô/>eîÄkþfÅrž¦Ÿ~TjLÖP™—Lg¬¹×üNøY¬ä9¦?O,ÜŒO°ÃøÿðÓXÚô@óŸ8ÊhÑ‚œ‹ŸÿÕ‰áÏïh+teÔ¤iaV9ç0t/}ªî0RéiQ¿{ÝQœ™ÀÑá?®Ç=5¤ÑC{«-1SÉóÿ)ÌÉ«AwÞZB¥`OБb¦HŸrÿQY4 cT ú'vø©+¯¤Íbþù6N °°ŒXø± B¿3ÅÔC·#hKÇùdôøM w… » üÙsÝ—:ê²T½]¹ñ‘­ÀH£³ÒD2ˆZ 1ÉTð¦Gâ,}/„¹Ã)øæ½ZÀû`qöƒÞÖ—säð—,ÄÑ9Õ"vØ ïÔKª™éÀ»K¢gÄÊ4%·>E·ø3Þí%˜]jÐßrÞ7“ìDYÄdu°F%"k!u±×Ô´¦Ú •^³ñGý±øÃ©ÎpâÓK’é=šÃsŠFÞµ&­w¦ó?Îh‹ƒ-Ù_o/Z“G¾æª&p§Þp·w°Â"Tµé¨>Æü&æA¦»f¢I^ð‡ˆìµ¹Å^u›jƒ^ÁžtýÐê“/LƒŸƒÿ:'™l‚µŽ¶i±[ñàÏ}øù|t-™H={:ü‡7ꯦœŸÂò­6;ÈŠ»ô\dÊÐd'›™¢|¥uˆ«ÌJüÔ$ê+¢‘?µº°·DàP'vØôj# ÍNž]£~õêâ?rb¡¯Ð…f*'lÞhúÝ~ TϬ®ô/9eŽ³Ú™£ÔŸt"y ûQÔÎ ½À*z~µUÛ„{êX#T øÓ¶xÕ.0%U™ï–ž»“É«™èw¸é-ÈFX¥ø»™û”¦¿\ÉîO ;[’níÊWÇdøó,<ÅY2µ™B¶U.³ºµ}T/Tb§™õ –ûLà s9õçÌîÔ¨¤Àw< +<‚ÿ¨HÕEk޾¦“ä.õ͸#¯šùe@Õj²C…ø>Z¸A bY­æ n«­ä¨™Qá?vr×?‰Š¼)]þc«¶‡YM`g¦ƒ_D–ÍNÎ1ÖV³'½´fQuŸÅJéôvF£#òoÖ@uÕÊMwßžhåìwå‘XKž\ÿ‘ê?©?Ï€5tOFѨÛHä\{-þáÓ¬ðçá`Ë#¥ïZNV9刦Ϡ#ïS=*þcß?üìõÁÑÄØŒLŒF'›\eøèEµÚÃú+Æ9ý“¦~iŸƒõ™X€?±ì‰DsŠzÌ?ï¢yÑO1±Åuøæ!Fð˜ïÇ]Ù_É¥ÍÓêãA–Ž Jªˆ¥kËÛ\ŠŽ¯c`²6ò_b“+ðçm~ ¿:MÿvƒH5ººIö±[j÷ʘ7w„ê’ ÄM¹ÁyüàÏ»‰[a^óÇi®åÛY «Py)hKbø :{¨ œºÎDýµe$#,´2†žœZóïMì:J¬~lÖ.F]wfðîÕØãS\uL,l%øŒF,Ím ‚ÞÁoð¢}D>â¹¾øV»HT‘Œ£ŒCL|R3îÁy¼ÇjvwƒLÂÎÁ*Š{!ö/ÉBgbü¢þ#2¸€7×Z™\ë:»[DÅPãüg˜¸s»ƒ{By·~%h`Ð}ÙŸ-q¤3þGéç±ýŽ=‰u&ë Cµ3À<#1ìúþë¬rrºb›µ]·1Ò-ì/¬óPu^ÞQýñ…@½¦ß¶§a8šKP4µ$OãÕtÈžuüªµQ;ÈY,(¾‚¿‚/êGF±”ücõ …ÌZ0îWÉŒRƒÇêíVèDòœkh‚Ùƒ‡ó&Kª§f ×C©Š>…L«8dr“E ¶´ ó`«/ì@)Ϫ‚ÅïnU6k37’ÍÜÇ?õÚA®èø±»þã õ÷áÌ߇Æ4GȢ⹘Œ¦V¾¶¸šŸü£ÓÈJŸ§¢ÿno×}ú³A?ËÌÄÆêÆÞ”Äõ¥±ò­”'"µ°;™ybaÀÒûŠ>¢ÛOÕøêûÈ?rÓîeÚŠiõ¶ã¤Ì‡mN¦2‚ô܇¨ÿ¸æg8Ñç{»ðç)ì‡í¨Œ„•Ž7ŸD­7;{ÈTFh½Fþ¾æ·ZôU5ÀrÎ`Ô9’ Ù]CÊÀŸ—ËðLÀÝœDå•ÀcŠhÚ¥¿8ØŸ–6H›$*’µ€±Ø £ÈË¢wp—¬VA6Fñ¼q\ÒM®þó鿇8?*µÏHÄw¥¤[I,ö±6*’?\þ^y”(&–¹õq;‰Ðá³¢à9ó„Bê5Á üÊGf%Â.Me‹ ¬ÇóÄæ…Ô5o!ý|ð¯M×mÛ(‘Ræ95¥–;;›/•âåD}Dr’ÑØu‚ÿtàÏ QÿÑ‘úƒ¸¤1È;ÙËß‚š/_¬ÔÞJ‘‹¸ =õƒ‹ÿ`(ßÕO‚ü%çôŒX#ôIé±rK©m(K”™ýÌW*ä÷‹ âJ˜;ÜäøHþ±DÂpßÃ:¯†7®ˆ%*ó€Bœ‚ö ÿè7h.cQÃX1‰ž‡|à®ï™"É„w 'P ¼Ybe7E¯¤ªähÛM¤µ»Iýàyøó#¬W‰Üòð¾]x¶ ª„@¬ü4l-¬ùf<Ã9ho¨ï| ‡T‘˜\Ëo¤åÉJ}y\ò6[Í×U©°îoÎF8°©ø‚MXùöØïxxáD _BÈ?ìùS`SrÀ À¯ær÷{ã—s/xªõñTPÏnà³Øèy×Âütqè#´û×c®‰ÿhÿˆ µ…HûÜ÷NÀà?è1N }vàókK‚UQŸ`êW«.ð~ê•H,{.åõ3Ô…þK¶€ i»Jž¾CGªyÌÊÀ4‘èTÓÄ.—6Ms 4#ºØû0þcUa˜ŸÌÁú'Ó3£CÛÍÕn‚%º"ý™ 8 ¾â™êdG¿{˜Â6(¹r0¿öZ '+ùÃß1à Ûëß^Z|ÁWÚõƒ½©SŸ-«Ýtª*^uCù¡Ê`@¿»½ØæGùó\j‘Ïœ`‡÷¹âZ̯u×ÔuÔÖ€¬UƒMiŒª;ó¥3˜Þf]TÊ•`å·ã?‚_m!Êïa¶E›‰Yò{X¥ù˜Š€(*¼t+ªß8Æ“¤äm˜% üG[qW:¨&¹‹?L?ßTÚÃ{\´J2ÿc>Ý´¢Ã: '7@}$~8ÊLÙìð«ÆZ3ã~5JzÐ?q¹ãݯ[ÅòÇ—qZŠ–÷©%à? ¾-e¦¤þÜâ)oåÌ0ßåú.Wþ±B[ilØÝTÎÈf±6eõƒP ,$k+‚žk‹s¦•E_×i×Þ£‡óØöb §»1Müÿ¿JDýyY×Y}ÁäÈ®ÏB1x¡|9-øU|}ŠžÞ(n˜º½ÊYGæÐß_%Ôö„òs!96̸!rБâ«(!ïÓ?± |÷!c—È-ÞvE{¼_ÚçzÝÌd–} Z©àWµÚSj% Šf"<1鄟îuˆù1'a&npÊqu!¢®²›•í*ˆ‡ n÷èvØÆø™kþ Ÿ`kâÏS`0©%ÝÎû~ .äu_ω›J‡<„?oKŸ¾ï–û«gáÉö¢xü *zHg%çµ1ý8Šdð¤)Ô$X·.dËeÀ¯ÂB+ á?Γ´€W𦺻 ¶:!HXMbæ¼°[ˆ˜vb“ãàõPY•¹*nKàÞ—ýÑG/u4­±@'XqÞÍž—{ˆl¢–¸¢~·VÞÈ!¯aËg£Döf%ÁûÒ ½Å—¼6&±Qµß_È6„Ø3:ýc÷½Bð£é÷<ÿ‘›úŽDïßÉ€ªÈ± U ±îºêÍIŒ›°Ÿc‹vqå8KS‰!.ÞÚÁ —ê°ë?:¤`VÇ:ՀʈÆì0ÙK|3óµQ8QUæIuEq**ä4Û±WÇð"ODx1<Ø“nÿ‹ˆ7+ëã¿¡œŒÑpÝwØÏªÓnÑÿª›µ‡õ«˜º9<<ƒz³ð‰;PÎ*>8ÈŠËôœøToøóø·EàW¯™ì´Äüü£«µ -Ò{ªû€\åGñÅ–Ç#¿ÄÌYîËîðrÿ“Z$%ã¹36ƒm”ûÕZ”Q5à?ª[诲cû›Xë¨HiI÷–üÆjœ x x¥zꄸíZ¬®£¶\²1¨ßïtNé'òÑwý8üÇ+± tXŸNÆQ½òx«*×ÝàW•è‚ß@ƒ? ÖS9ñçߨÿxÊ“} fÎŒ+çŠ~tÑ’˜þ%»ÌMVEç ºŽ\‡GÙO—à×L+ŸJn˜ DÑ0‡èw‹ÊÛ¡¿¼I?Ó²r±\®¢ˆk2:XnjË[—ÌxµÔüF~“€>ZÙñ'YéèÃŒ‚ÿðâ®kè©¿‹õ.ÿ± ÿ1^”&ŸE´—Yž3sN¢ÿî@sstÀÊçsîs^¥ŠpB8g¦ŸLeNÕ;Þ¼¯b ïdÐÏØâ„ëþ{ÄÖÆi%\'á­£ÄÿŒ_e§{b}8þã7#l…ÃqÒŸþ%‹ðôL?LˆþçkTÚHò, ÈÀ fÕÒÖjëŒm"•8k|¦¢=‚k×ÿ¼Ò_»UßC¤;E”ä½_@u@g‘ ÝÙ=ø*̆y‡,¢ mÕòÌ Yd!ï°{ÙTh‰5©EÉZñìö–HÇùh'ºÛC[$Ð×_ÑW'vŽ£Nsï`½­2y’u‰ú»×R(?z²w¼æŽpRÐÁ_¼Ä\Åâ”ÄN—Ã/”™‰I™µ„~÷ùÇq¬[,ÃÆŠ¹õòàH`zü©D1ÀéLª#ÃôÖ¤š$<¹ÌJö¼‹z >奈(²i¯]]éübûm¬W ;N/É‚<ÙifUPN€þBα‡(í0þÊ7yÍ,Œí!òy˜™Š]%„ÿH¿9ÀõäÇøðsûèÑ=ÀH„¦³#¶y 9gOкdðHiÙí£üÇbê?¦‰CähKø‰4Øó•`výÉ?&’Ç{ãmS¡‡~ôÿ¹Û±Ni"~æ-õƒ{ƒ\¨ÃÑD¯…þª Þíñ}Cð«>äH)ÉF*Ð?ñ=œü±…ÇT:ú'.CyŸå »â ÞóU¤Cƒ=—ÚúuØÀº¬·wHMF_`GÛ1±—cÌTôßMK}ÿQþc"64 µÓÏùŽª,õ1©ƒñÇô,ìþ§­8W<ËÿŠXæHô{ý@½ß•.Ù n! L·?¾ë$þc²ü3Xÿ’‚xɇ²?Ì:øs:”4;Ñaå&õÉÐ不ìJªÜ?P£1EýŽÞìî)yRCu@¸5í}µqd‘v7æ^¨x»¢ºb^¥ï•™jøcD÷˜ÿჩ>þd }n€7µâYIÓ‡³UE—^®'òÿq–gfk"b˜à¥pp>ªþ#ùÇE¢< uÑ›eD Â6Ÿ™ ®Ë¾{ähòw¿¯FZ ê5¾ó-•ë˜_{Bn4ÎBt}©gù X‡ÇØLÇk0ÝsÌô/ɃGŠa&_ß ¿ªH&¼Êå?–Òw-(Ë$ø-ptGL§sùÇЫéÔ2´:×95gg5k¿z€Z¹þ〩qÎu2õ²wJŠÓ®+þ÷>ˆd£ù®³úБ›IÿÛoϦizb}œúó$ºÍŸ{:âÀŸ/„É 'Ó~M]öÁуZâØ­ÈÜ´…6‡>•Gá?>·è_¢ýÒ>GêW±Z D1lÂ\ðÌ9ô/i¯=ÀëW ÒþªãO­˜GÛ«0ü‰Fï£ÿ.@þÑD¦¡L ûº€ˆ®'' &¸dW1Иÿ·òº~þ#1Vï:ŒÇNô»û¨d°g¸¾¡âyt#E@ ÞŠ;tEtèa-8ÿ àmñIÇjÕ'ðçç‰À RóçMDŒâVLDOÕO¦3¢‡qÍ•ôß°Ñ•¸wשLj†ÿˆÿpÂ~–ÁŽ¢–rͰ¤ÕYP©x÷4¡ÖŸq Ónˆ*j/û©ÈÏ$”çE3vè!ka{²ÊXûOdu{ñ£§ùmŸˆf¿Ð¿äEˆú«ÄZN#ß‘AmSóáÎWái$ÆËiìE‚F¿ê‹ðÄv÷!çɌߌÁ÷} ÁŒvÄ3¦£¿JBe÷šÃ]*ÌOEªF,??œ6 Ú_FJB*F÷åŒà'¿›47Úþ×úü£U.Iñ>ª>?34ÀËî&òMÏ\Ò=Ìò®Žµ$þc Ïwx©3ä7Á_ &ä×’—ÖoRqÐ(cY€Ùnw?`?)ð>T Ò*¾õ‡õl«øÕ\âÑ4`/¯éM8RÕã<¥×ƒê¯êÙÉÈȨ¦vQUÿ\Þ&Ym6á÷÷g¾ßG¬©pŽ7רb耎Áv Xv[|HaÝFÝ|€}ÅÉá’«ãèzÁãxHµ†ùy%;¬wÂêb¥!C *4–þ=øÕd²ºäQw©þx¸„ÿh Ïm‡? z¨‘tnIJ%]SºKåÁ¢À"g¿ò¦Æ¢¼ÙÊÇfÎø&êÏ‹3©–΂÷?*Ì pÐx} »«ÿ:8-õ«t¡­ƒçZˆjÉGÍÅÃöÆC$gîÅŸÔ>¡þ£uoU×|ƒ¥On§™`ØÇ¨*ä™õ‰Ažô1=ñÃeºä_EþñBÍ3›Ãa³mÿñëw üjž*ÏüA{V4Vºâv8ëX²õÊAÖË&¾¢N>ÍëÎ÷-F×êAex<øSüG?üÇ{&!5=Ô¢ûgT8ÖÅ«nÇ»ìgkª.ªììh«ÍbgõaZ¢ëW}S2«€,åÑñ`þG~¦ÙîCïT”ú¿Vf+ Ê®ZøÊ×dg™áúÒ]‘A›¥_çé½!WŽmCµ¾×,O~œþ†[`Ê0?Ê—ë-Â\¦ ÖK3™×<ð¼ý,ò­>¢l þWíè¿{‡s¶>o¨Z#âÀ¥€ñÞkÕ°.RêI÷ûÕÔ¢Ÿ¦Óatq³a÷ãZqÍd×^¼AoD-"™üÇjc#ц­¿šK •ˆ=¬Efoúܧób7k”s=ÓS;YÓ”p¦£ÿU”Ywy·ä}Éš#©Dÿ‘ÿ<¿ö±#»–1ȹÕìýð±˜Çd_Ùõá©dF ýwçÑ÷‹žþÃ]ÏóÆðgt_ä'¢tòŸ2nêm´[äô@#ê0Þ£ž áÇBýÒ2Ý8?ј¸«èR$ê^’…Ä3:´ÍúÉú´ÚUöv’üú}rcç:«ÃàWJØÉGØí¬ÔMØŠ*†û ‡º1G8ã.ÑL&¼…Þç ¬ŠMNB¬º›w1QJðë× lDq>ÌkÞìˆ-#¡áx"¤úCÝñ˜‹umNŒß_ƪlÁö-7j‹Ío(áÙú¿÷[VgÊž¦z€ÿp’‡$’9ArjÅ’î±Ý'ò•#øGBP—š~÷³£ÇJ¿™[€_;‡ê¤-þâ75ð_"Î÷ W‡ð£»±Ïà@>Ðíî‚îîô÷¾ŽÄZ#"~&ד‚Øí(X]a,å0™½2 Õ7qÀ¯†©²ÔôÄô„ÿxLž¹öǽÊß r¤4¦¤„¨†âÊÄ+UÅÂ:ÑÇV#šE$“¼e:õ¼Ýf°‹%¼¹ýù÷.õçÁ+}ëUà?òSݸ‚ø¾žòc­ud0˜h—,f'±t>4¢y©Ñ¶ãgt TOø…MÊŸh78~UþÞ8žêîu`\ x*“ññÍ]L„‹êËúué´4_%RqÉ=nñýðdÚ`ú«ƒz2Ò}Xé, as‰ô_‘1̃?×ÌvT2|³ÞàCú’T6‡ã‡J`¡ÆÒå(œ÷,]W£R³XJ|”™ñ’÷ä°©òœÚÀüÕôÛý®ÎY}Ar®S·1Ä«¦“| ª±"È>²+¨Úb…ÝúÝzŽêÚxî\SõT¶çê,*ËÇê¼ÙŒ«¬‡7[ ?S„¹®¾Ö<«$óÐ÷áM¢¢hɵ:è¸RírV¹íïGëøè˜ªû’ß}Fg.Ì×hKâ›èvéw˜ßZÁÏ{À/ø‘œAe¼Ž]>cÖú˜Ÿø#ÜLþ1Ž2s\×;@«eÜ‘âZ9LE™U«´SCõ\Ž*I_ó®õ›ß ÿ‘ù†‘©RIÍJlfät{o¿…àÏ»üÇ|òê7….%¶ºcærvëki¤e¥¦Î³Î˜Î×Vk¥ŠàL ÿ3„ùçO±ŸÄ6Ô…¶â#ƒ8éºâïƒðàWnÝÑSüG>×}úµ]d¥þ<¦Þ[g´5’êEXåˆ#‘Þÿñ]OFÿÄ£¿´Ü GãGÜTÞÁO\Šaîp¥#>ùÇFñ@h g±«é[Þˆ¼¸7šÛÄXÖlðçE+ü^'™À0ÃX1«^ þÃFb®€M$KÌ‚µŽÉ»_ÿñ’(|=öºÒûx™7Ìf‰©…Ômݾt]ˆÿ(GüÚ/»&þUSvoÇF k±<}yÃ9ÏžÐD,°]×þÂØ¥m¶dKê?ÃjEÄ{x`+¯Â³¯£Bû‘oT´—ÞÖø»èw«âå €_¥)@Dî­nÒíu@°çRŠþ»ÀúbQ­ X„Âb,Ö2~wSX™yT—úó¥ª úÝù¨Î2b›ÏÁ-ôU…¹/R_dÅ=z&v¯0WÔ ¦úªšÞ{ÞZlyo¬¦æLõ;üÇ õÒ ò¯K0 ·ðƒ‚ÕŸ—1¨ú¾H”Ñÿá%W“ÍL0ý¹ ®Y½Pʇgaþ ÿñþ|,÷¤%¹‡?ýŸs/‹»®;XŸùãÁ%Ûñšã{û‰ò:þ »ßìo5ìG3P"æRÑá|?~ "|wgÕ›\æ8=¿ƒhºgï|£þÜG&'ÿXþ;Yhf5‹~{Ü‹üe.õƒ×è~xÙJÁüóYø€¨ôUôá¥ÿÕ®·=ŽÜø_'­ØÈGQ Nq2ìL<ÔÙ@œŽYí¨ã0?*‚^˜5÷0?j4L¢±ôìš·ë|ų̈ÑIïøFþÌðÓûß/'L'^áÈ?bºvý3ëMÇ4d&y:¬æ$ð«‘èLÉh@Ȓý åL£ÙO­˜ÿ1ÌØ:ÏŸ{Õä©ùÇvj6¼ˆJ¶å^‡ÿ¨óSøÕ'úï¾g_‘xû¶¢…mŒOȺ…M¬|>Þ‹úß0w¸ý®.=éöþ€®RvïEb.r.OiÏŒ€_-%o†}n.ã/¸yeô"t”ªGTô[m‘»å è_R]•Rè©·BÎ![XAݾþõç1µ¡¬é¤þãº(Êû؇La&\…?1z[Ъ øÕhØé÷Ø´]dÇA¤ü@¶¾ÈßÅåùó¤Z#*Qx\ð©„øí#0ÅáÈoâsÉhb<óÏב/4MéûÐHä!™á>üßéÈC‰ýä{áv²ð¦Ûópû‚É,gùŽ¥(†õ?½"4+y߇‘Uô„ÿØöƒº°«žO ¨Ù&ÕH]æûÖ‘cø¨ØLÂ>‰fè%ݯ©f}ll ,ebtP݈ïï(Sæû¡bMý{¯Âµ­g½‹jW>Þ„ÙÍj8ÚÝG ìˬK¬ßÞ4Èr ÒÍ{°á£U9¼u}^³ã©ge÷›Ð_&ã™Aþq•ɲÌ‘àMƒÈ?ÞÄÜTˆøï’!EAÝô–jòÃäR‹e;£aõjŠpàF¯À[ÿñó”¾Ê›º‘¢dÔm,hëÙ‰®„ç˜Öž>]“@›Z£gû‚õ™lÄW¸£ŽŽúÚ2pµŽøí~pëƒáÂѯ£ýÛòçfòRÔzoÁŽv§îEüGJó(Ø`²»<½ *™tcÇ–6üÊžî!•©£mùD¯¯ÙÔ &`¢Õ@rÁÂô++‹3»*‡ª.>¹[vk>\ˆÃé„ňC/EªÞ©?OC_œœÅç°°7Ä}—ÿXOÿ’ÝTÒ® JYH„æg&t–Â×v†?Ÿo¦Ó×-kÓÛ*ë¬g=¿*ÄlÃvæeó%ïÈKôWd%Þì ÿ ~GˆÿxGæ˜,ȹøñM í+©Ñïjd‘ŒÁôo/Ä*Û˜¾Pa¤gþÇþÐ~0įß%ÿ8Ú” ¶³½ü€âj™ö\Û¦•^D_àÏCê‰âR_œ¡ŸÀ–vi¹ÛKQ€OIàÏý9™QE.qƒºFÛŸºòÚ*­µqtåvµ V~¸:†WŠ$nÂørªöã?n‹^¢÷Où÷úMãºbÛ¶ÄFÿÞ ?tû™—8<#üÇGqZl&ÿ{þàG4R+È?¾¡Êx®æAŒR™}õ‘ù‰«÷€4-b½6Ü…Ra©jë˜ÁÑšèý¾-2Ñvìo\ô8%49Øø ØÒøj ¥‡(O#hwBy _Ýàϳ«ëð°¦PªµÃël³K¥ªËUXŒgä6‚es*¶:)‹‹sú­VŒ¢Õ0TqÆWÔëo㧪p¿â“%%R7à?&¹à?æ³OòÂ>0 Ñ™ªS©n…à?z;r ©àÉNßÛ«©…ø£žÄûËØUê½SÉ(غՠLŸù Ùÿ*ò²®°—wŒÍ?ÌìHÿ«î¨bÃVx‚Áܳ[O |„Ž%iÑèxYŸÌR`$%˜¾ ko‚¶ï‚QÞJLþ•¹0ØY,¨£&ˆFŽS0*kÑ Lʆ¯èFrˆ µþÖð«Zäãñ™°ÍþT¶…Yª 3énüž™G©üÿˆ; ¸ª¶ím¯˜k®µí.,Äîîcww»±»=vww`w b& (Ø…Ýß³9×Mˆ¼ßÿÞ«¿sØaî¹jÄû¾cŒÁøiƒ<ÒÆâµq Ny³9™ü£5ùÇ+ºpÜ£šîž¬û˜ ‰:²íü½FÖ9Aof‡ E º@Þ%Öèf¸ßا<'˜Ûñ%ÿèfå§+zC¦3=“ƒ™d~V¼^õûóã¿.ôl Ñ_µÄl V¦>C{Ù“ü£ ñ•~Z®àW•PF­·ÖRaQdšÕ>Ä—ZÌ:¦??‚î0yZY:”~7©:U³óˆA\1ÅÌ޽_–€Ó?Gÿ«ä\;¬?l§AÃ.Q•¸×ÜÒvšJü=ܓ㩾Ÿ‚*`Œ¨JQÝRíÊÄÐäÁþÃUæ£ä]3/µ}«©ô{Nÿ« œ»ÍdHçè9üé¸õX:‘¤äªø£¿º$Ê9=rø½ªºÒvÆüGG4%á?î0g±'ýšÑïµí³ùÐS¦+ú«ªSÆâ—>˜N –¢7YscÉ?:н‘îÐΟ'1– ”FÄŒˆîw’Ld—ké’STzƒ•®†çnCüZ1 ýw kíaö{Ð%ЮßMï‚%}ƒâ¶&ñ^*"͵œ/âv»Ö+H¼Ôªágaü8 o•ª·ÈÍ®ºñì­çÚ>ÆÆöÄògf¥qÆQÏõ±mxçÇÔ‚x1?ê¾øc‰P_3«%t=ÙõiÉýÏ¢v. ÇqÆè8YË ½èÉ"¼õ>dCø·g\ÿœPËüëå ð«õè¯2ƒY§N’qT†5‰ElÞÝÁj¸ëê B›±Ohó<<üB¸ó^ø¿7ú†Ÿê?šjuñu`Ýñ9µ‰}á aÏc“x›‡˜8›Ÿ¸¾*¥õ¨cßÓ-CñàŽEn$aÕRŠR[» ©øÕ:l8u‚xu7¼GIs'A¾P“ƒŠçkøáp"+°åÈ?nÃx÷–­ÀÑJi³ÂÜ;çµl`rǨ‚Í Ÿòÿ]8N˜sé`Û[zëüØjeBÝ5•™â¥Á^fâ[r÷8öÉzÓ0ëUƒ`>#^mþäýÕV³,Brúyü…B*þ£»ÝjÆ……þª \Ï r© ÔÞ"¤GK¥–º‚¸©+™j{r“Ñpå³(]/únb~mq«£õˆºÄúÔ¥Ÿ¦0.¹\{â×øß¼tÃ1Bñç6u¶ö»â#Wì£,gœÝ¥/ýKž¡×]B‡ô½äûP_f—»xݲÁŸ{ÓÌ¡ÿKwâ¹=hlz8Ž·‰ÚY·O’©Âs5A6&":fV$ÿ¸IÍG4¼Ï &Œ£ÿî ²¤d]³ñnI¬D™ÏK?üG0}ÿq„ùçD{ž¤ÆL¦?¼ žjoó(lQc&î²™¶ÇT‚l—~øâÑtxi~æéð¤ƒàL™Qøý|[ÿÇ¿S®†tBû¤dP#StþjKYÕ›jšàùQ%õjÎöS%¯¶FÛ¥iÑáÏCô¿Z!ô÷cÐ#y½ˆ2Aïêk§À¯Ò'¦ ¸­K=¡–Òq=CÿÞ¯^×ÖS³6S c˜Ñ†Zéð3uYÝK&6j‰™á®tWæFçÞM ¿¿‹¾-Xþ)LŸ*Î2ƒ‰~þXåfÖ9,ò03>Q<ˆ Oý Ö¢ qHúpøU VŒì2Zµ¼p:Cåã.Ã1üÅ]: º[ó?ÞÃ.ï¦^cþ£&9ØBùœý_@µÁh®×³Ã4 k{Ê¢ƒ]§elF͵ôÅ“ìâ³”*R™=ßFeÊdØþ·L1é€_¾ÈŠ·ñs#åþPÓW+)íÕ5d‘ÃÙUsÎÉXÑÓˆK¼]»O¿\_²6ð =¬2`[aë¡5…ñ13±Í² ¡rJ[bêü†‘‹ÔBÝýî7T£ÑîÖ¡þ#„ÿ8¢º+·Aää%à›èв•jœ¯hÕª¡åš@ý¹‹-¾-·µIžÇwºR;tÐ|Mä–§e ‘OF“…þ'õƒ’ù­gæý£;Þý°!Qûšûþ]ÏüÁô/ÉÎ*OèµDë™OK¢†Ì‹Êzo”Fô„IŒ²æ•¨ ÿñE›£Æ`Rø9‘Žþ‰R·i¿·Ï¹Ú:žæàWyî[ˆ‰ÂE½ ‰Òô¿*…÷ÐŒQ¬Ì£Vé÷¨28‡5­‚³×ö4îéöúsoÖ?% ‘¸ŠRúê(êíºnáÇr_¹Ã€”‘>Øèع' ¬/‰§‹Ó±é‘¸JŸ•M‘^›ÕJôº‡„ÄÒ ªüä*:ѾÊŽTxùÀÇoDõ×;Ûü*2i”Ö–ŠŠNh«.cb£"ráobžêÂDË6ÖrÃþ¯5òËcDã…!’ª!Hv¸Ã§c~"´†ç±¥ÍɵbðO-ñš•‰]Áˆƒ?ã1è0BvôDÏ>Ͷ>þãy¸…ìo“¡¢|'±7vd¯?/‰Æ>S  «!æéÕÈ?ÖcùÖ‘{LdçI ªOØm¬òeðËÅ^0ª…TŒd$ÿXj”kˆƒmkÈy»‹ .†¥ÛD¼üÊH(·‚VoÇ~ ·ù¬Ÿúi:ÁPô»ƒÀâá¶Ü#çÚOþq„>Ù‚¿õ†ê:oYþc 9’ '¿ŽŒî8U„þ#l¶ (%µÛÜ£Mð\³°÷˜†x͉º´ê­ÁèM¯1«núݓ̇ÕAÄ2£¿z/¸O ]ƒ,4“¶:̽ã®ħžE…^Dl:ÿ.}|wcß?ÈØÒ¶à%#ừÀá>ÅÖGÇš> ÞßGìp ½f˜õÚŠè f7¹GFã?G蟸˜Ù²ÇÀü.R¯‡¸¼#Õy÷eo*➀Ö­»LFs†šñ~r](üª…RIÝ‚R¹¯|kt?jjÉ$ðwÌåØ w´ö¼õ¬–ÔØÝįTÇ´#þˆƒÇ* ÿ‘ÆXá¸g’ÀŸqÍÞ£ðC5Œpp6æ<‡?_Gÿ’MÌ?÷ff–]uÊ\ž^ÄãYÍÕš.=‰;ËŠü¯ƒZŤä~oP³#6AfòËLvŠe%#¯9²x°eØœè§U†þWiÍŒVb3 :ŒƒøÛ òþtaú±Á£ê ¸·N<ó3xšÖ‰CflÛ6´©`a똚ÒÎWkðp ¨?÷•ÒV‹º—Þxg¬W3ör–¦­ÄÿÄ$aš^Hÿv»~7²Žz?Ž:üWòM0o0š>ˆyç帻+_ÔÝÚ:í%øUªßÌ?îпý nKÜÉH+¾2?í«ê©_ãJ~¥ÿUê5á÷ò~®¶›¨~ VË/†rÖ“íDIý„üe‡‘n23½yü*õƒèvX¼9 ß4üã½ÌÀîÃ÷‚n ~å„"ÙÇFêÀíó?fÛ'â·'2]â4І[7É?ú0?jxF´§7É?&H{Ž—J›æÞÙ§åÃû›,Å×9Ü„?§æOÞ‘½±ÌqmÐ ¢*¯‰9̼Ã9ÉHæóœX7¸F‡~zÝ0ë5oÐgMõ!ãñd®ë1s¶YžúÃ÷tï2tÇŒ_õƒ]¸ RY‘î—Qt]Ãæ—çBÍÿ¨G×MÄ?݈:Êî²U¾ïåW³-ú«\°ò»ÈÒYÍÑOõÀoìc~ …BöLû,æ×ú‘çÃg†è¯â«“È?R’ãMÃĦ‰„ÙŸHÜìô§:Šþ*%øÕŸÂLýÛJ/ÊX诎°Ê<ô\‹yº§Rÿ1Ùq¼˜ßpŒº6ùéùZ·ÉN L±˜JÒ’üã9ÚìKLÃ툾8§5ÆlÇ»hfv¶œD ç±öO°k¯Cåø5äkXoÑß³Õˆ+Po6o‘ƒô´²ÂŸ_À§·³ÜP³å@wLOdó+Vâ5ªÏÎ`ÞÎ²Š¸îyûo¼µÔþjsÇ™¹®dW—ÙcjõúAFÿÝæº Î?¼ ï±üʤþüxÈFáÕ¥ú«ÌFVlRCzƒ|ÓÖ“Ý¡§Iaò÷ôOLáØu–Sâ?*3·6˜öNæ€ôšº‹þWõé¯4‘®¬qzë(­˜‰)Þ}àÊ¥üysM|\?¢¾AÔ†|åúŒÿ˜¯äÖçÃT„ï®~¥É… ‡c±ê#9RH¯ú |Áil-,ø•;±Â(rάb»ÒíõïÎÑŠTÃjí ¯¨ˆÿ꓎l€:dzql§gS ó’¬CEõ|jTìÑûAl}5éé‰0!Üu©Mÿv»~7/ú'/jøæ“§M„›Nœˆöê< Ñ®Öþµ1ÕyÓÑãä¡÷Æ#|ÈRiW?ÓÖ„Yñþ£/‘B°› „©)ôOœgN…AèK/(i{ÿ1v¾:uÐçÑ4§DÉü’Ý…ËÙd ÇT¯¨Ä9Ë®:ÈùXÉCr-ùGAêG,ó>üG¸‹aXÓ²+6ÅpüÇU*èoð_ ¹7”z¨*Ð¥\ÅîxêÞ ‡Ri‘½joª\¢—òF–ûüÌšDÿ«5ðªUÀÜ/]AÅbš'àjâʼF÷M¬=Byð|(¹YÄ¡-ç¹ö=õç»è¸›„þ‰~ø£<Övt½oÍ„°×‡É:çN—Gé»ZBLtœ¿¦jî<ÉÝ6YC±Ò¸ff`þùi0µ7¨ËöZ_À¬z Î ÞV ÖÂïý•àÎ`ŸmyåÈ?¼ðkÅ@üÇâ •Ì4m[È€¦3ãü›™Ÿ•jÚSãlë`­’‡¬,è¼zóçö{ùOS)ª;s‡BCž’ÿô+3ECüÇ%›šÉqž~ï³3á?,úï&Ñ]õ”ZQVñVÞc¨ö–º¼jˆ"*ë¾V\õÓÄñ…‰RGP›SŸ¤Þ¦~ð˜HMýà+-ÚoÎÿX¬]À¾ÍYÚ ³ÐWŒ_•etÓ¨&k°Ð±ÔnQœÿaçÏ»à?bð„™Œjð<Ïâc}56ú"6ÇÞ18:X™k”ô»ŸÈ?L˜Öò4¶ó(h¤°¡ûaK€rÿ!+’{Î_ ÂüÁ¥J<¢ð-øC6 âj€g‹ Zt [Wå †2o4€³P‹úÁ‘\Œ6ZMMÁÁnãÑ’Áà&€OyFÆPÿôŒ{~%{^Á.oòY¯˜î•T øÅšO•¡ª |îù@]ò"'ò îx¸å¨¹ò¢2Kœ~‰LÉ> ê2‘±39Í7ø€³¤´jÝ_²ÏSÌHVa×0Å‹ØX⫉~zZbÇ~àl ‚õǽù¼—t–ÙFëç V’èÓÄIŽc;vÈ Ï¸€ÕÆ’Œ‘•`'÷`-2ã;ÜÈ ^’¬ÆxpNÇ’‡d>?ÕЪÁˆ–Åx’1täH‚òÅE±ZÝÕ bÔ¸`÷ר/eÎ!Gúbd„ûÉ÷e!£X(µèß{­¥Ý‚ ´Ï`w `wÜsàSñáPFPï@2ޏ~¬~µ#HSÿ–üÃM6á>ʤ­ ó\_ÒJ‚êù¡¿*MÎ3óÄüÁõä_èß~ÈJ`¶h¶ù cå¨?¿^™¿$ëWz¡Ñ1\ÿÄ?Ågr·'ÜU½ñ3gðæ\°¹%Ì{ –SÞºkŽUX)Gš*<ÿlîÎöxB-–Íì)=ÄUÇEéD¥åx¶Nt‘iOÒ ;ðTz™ýˆî+“Õø‚¯•ÃVŸg2S>ô¼`WòÀÜtÂÿ:‘4Àƒ¸SëÅ¿zD„ci|“•É?Û£R«ß‘‰í¥ßHÛAæGbéÝðìoÐàŽÇ¹q¥7×íM¦F,DÕDue~ml¢ƒ xËæ¢Ükµe£ëýŸå%æéJÛlöw•þW½é“²ÈJIµb"3xï2ÖÇôç>#.8ü‡umy–ƒŒÔ¦~0 ó0yj0ÓkãsŸ”³ªØvØžƒbu¶–Ó ?Œ¼+è#ì³~xÂ[þŸè¯à?BêÏo*ÿmü*ýKúí~ÐQÿQ„»õ¼ò^Ý  ÒÞhiÑïþ^ÿĻʟúUòBpž- ý)ýÛ÷ÑËCèh|=šRoä¸QþáÅ8mž.•;ˆ|+€YÙ;GÚëÏë¢å}šbJùóÜÔöÕÏ¡œëQ^¹“Üÿ¸£/&ÆÝ‹­>C~úVôÍôMÿ°£ÿôX»„¬ Jtž(ú¦QõPJ*“ÖN—â}™oô\ÜÄÏy…±?Výu€’MÆ6ñA(TîÞ%?:ˆê¨6Ã<Ý`±‚«¨»˜ÍgÕ2¾j1#Y±‘V=tƒ‚&¥à^M‡1d ìr.P—mðàždKEÉÁ¢lO/ä/õWB©>E±?é¼4ìY{3P¿*<«%°e6š†Ër±ü ¼ÓDò8ø¬¶éXÏr°àè7@¯3*ý®‚ßÙë(¦†ãÏK‹ïà†'9ûƒYm'ûÀïÑ¿W3¿’å%wØa­G¿;¥ñC~¦½.¡@~‹W ~RuÚ‘ù瓉§zsý›€b5GùQ^c’ø]jff¡°ÝDþÑÂz`­À¬4‘g„KêAw'ó÷fFé*ÿÈ¢öÖ®©åÔçÒ¬K·EÞg.l þcüûz:z¡9{D—•Ô<€¡YBΕ<,&÷Ð)zè!èv}ê¿î ¶m¨1FÖàŽV°ð±Y¡½{ýÙaÃÔÀ@+1c‚+&¦»¥½þC‘¸î‰\t^ðsø]ê:´BÍAtGƒ)Ó;ÂüF'ø%f=f|ä„Û©c5·yØÛ'¼ð"Ë–Ep#î¡äÚßÅAîÒfÄ 9Åï1ÌánØó-½ÅÔÉŒOàÏ‹…¹Ï¢¾lVõó?†kNàWZ0ÿá©$Ö¦3ðüG5ŒÊš÷©?¿ŠUÏ “ÐȸEÿ«–ðÓõ‰äŸt›ž*RËöS¦kû‰BW‰¬DÉ#ñm„³ÚT=O¦PIÔ£b‰m¢tä…ÕÝôO< šsåue,K3Ty­É?¦r%×Ã5¤Jñ¹@ýyT4ËOÐï*Ä2Ñå ìðtêvfyèÈAü‡?¼_að¦»â¬˜"öGºÃ Š3˜èúy=3jƒºÔQ}%cç‡O»È½ø£…àL®|RMCÓ¿…=M?½k Õ„Ço…-½ŒUO Šï‚Š×õ¨ÌjŸÀžÖsÚw}‰ê¡ø¬ÇRoý´ÊßßPÕ¿ÔS¢‚¼…Ÿ-õÁ“Ԛ뱫P¦"Šê‡ÿ؃'Ø&vÞþ,ý5já?‚"X1•šMw&J.·“qáwÊ“­Jôjßñ–·õÊzlð«‘Øæ)øôNüMEÝKãP„ùÇ%‡>Iœ£Ú‡b«ö|ùÇTT@ˆ½ïTÁ/Ý"¶Þ‰ÿp&çYE>ÑïÿŬ‘§?U75Ó\EWîŽdÔ`lÓ?çgò{«ÀslĨWÁìK0?ª4‘–ÃøZ¨E“É^"ÿHFÎ5&Ü•®ì?c7bßÂaÝ1F¡°Š¾2›Üãó‡×/`¾†nÎDqœ¦å1N¦Êæè’iaVܤ•âZÅG;“¡ÌÆ'<•£akûQ±>™É®ñmwÁKú˜£e Oþà•xT²ð¦«äpãÃñçÙD,ô©7ˆ5ÚÃb­1¶Ó'qݪÆá^3¯;‹u’šûqxŠÑæ óO9¼¥ØÕ]½òº8ï¸ÆM¨"Š~•õêÁ´5¤Þî™|ˆþê)õçó˜µÊ*C}Þsk:“5€ge¶œñÅÝeŽù,þ#¾Œi,s¬÷Q™©àɃ°÷–™Fõ¥<Œøõâ舲–Èþ˜ØMêÏסƺ‚?J ËoÏaéT‰ÿë8UÕVôƈGüÕɘ.ELYÃ*e{ALÐ Uݬÿ4&#v‡?Š…Î¶0Ö>-èb39Ðaîý ð¸wâšÃx¨»ô 0î`ßCùW/³¸­“HzÁÝâ7G¡ó±½±\˜_;L~µr£ÈjMµ7¨¹L¢­¨ÔÒË â÷Çéùÿz‘B]ªÚ¹î¿ÿÜ¿Êèx÷ã»QûZ„ú,ÚXæÔdÞ ½ÿî)Å<Ë“Œ$½–ã7õW3þΉ,(Xb`çâ‹Úu sWÀd}Ðcéâ7õ» 4w®örQ¿=^SúüÕQ_ˆ’h+ê¢óŠÇŒõ¨ÕŸÿAà~ú-Øä‹èw+aãºñD5c[Œ½9'±ç×Q×ÒÃwõŽèLú2?ÊŽ¥& >:“YÎnãÉ?΂U3¡—*E_'Ìê%¼#½6ë•øÜSÌ:ý@Np»¿N -öxQ~)r;~uUtÿ¨jP»Ñ–B}¯¢Öž(§+ Èut¼©À±’“Ùõ¶Íy²“ ß]ˆor7²™×cŸ~ù×õƒsaœìâ~äE+°õO‰ â'`±Ë³°ÕŸÁŸÎb™á¯ìý¯ÞmÅ=-ÛÙZ&5·ž CF”¶Îüü&ާèÚ[zNÑWN¡g½ŸÿXÈ®G uÀÛ ß=aD‹ ÿX ¸Àa^âìÏg/±– Ê S6ôSvþc49L>¬Ýj÷^q­Üà:—¢éú‹'þ­~Fݲ±àWõµ¦àW•É“1Ô‘÷¹ûÖãÁÉ f°ëô£­P*¸Ç }~T|˜’‘è§®H‹™ïÓÂ]éÊàW_ÈhÒ“aœBµ†h"Us#õÏYÑÅšjùÃ…÷7-ô»±à?>ã ^Ãf·Fi—E[fųäùß>aW÷pÞÏOäX°œIø&W"iÃv™ }ÍÒ•:hY’ýMÛòŃÜâš÷ ‡_e¡^5± Ä«5'C €?_CþјÚz8D…èL;ÿA®ƒ&õ<ÚÜxÕSœÑkô\ïÿ’tWÚ¨sд)ìËÖ¼'Žù$(6öx¸éS] àuµéòqÝ­…Ò«3X£ižC%¢I›±ÐqErÑ÷Î °g³:*š¢œ—¢T¸Ô¡¿awj9m×a/®¡ZÃ4Âo°ÝÁÃ2¢8K†ÿõ‚ÿȪÿ•+õÃwD ¢•îè”;І™ÀV™Q°÷¾ðùÏɺ050.ûíF7˜¢fb+¾™†îOÒ1 ù[‡ÿ8©.¿êÁ<›èi¿XEÿöäjmÌOT§ôçXÛØ¶’¦³•µðát ®Eÿ’›æ[|Glb€AF®Nýÿ ~•H VrÜYo•üjÇ;Ljҋ?è_’˜yçõ¦z\-«\V²i³4í›–\˨ºGi•?C¥Ÿ…ƒýG#—ø€þð–z]÷-ñÜÉø„Ô¿µÏuÚAò±¢JÎÍF+ø—Ê4úïVgYgáÌupÓFiÅ4ª¿:B¿Že Ä&Õæ9úº£‘[,ÇB\Á;‰¢ÆE1T4Ñ£Ò³å5õçÄÞX†â ?l©öþ4VûÕãwy*K¡Ò{Aÿöàì?Îϯ¾.Wr:'"Âöç_1¸p‹ÑÌÉ ¹`0ŸU•úAÉŠ­5æmRÝÒþã*þ£(QZ¬D °¦ºX©Õ O»È%Òã«ZÂUY"Ó/'…½Vf«¯EMž¡ìk+Ù *gòùs†…?jjЉÆÔõì9ÍÎlÇßBœÑBlKÈq§‚ÿ°#iΠ%)ÁÐvÈCR°Ëx쪙8¨g2·ÁÈç„?ïÅ“9‚HäHMÆÑüÚÉJFêÏ}ð¹GéUž¤a:ùÔ(®ò,Ø‹ø¼y°4oÐcïxZãã6ã“ÇàCb‹£jøÙ õµÚ¢¹UJ<†;XÍt7Gð@AlìúÝ“ÖWð‰t)gnÂ:¿$/´÷o÷'É`”ùÉüIÿ]Ùd4¥ˆÛç¢ß;^†bvæ™™™¨ô ØV?3!(Q*üGló!?1Av媕 ×?ÑK+ÌÑÇeµáÜ˱ø»Ñ¿—ƒ‰ÅzÑ'ÖŸXúz诮sNà;£›AØ^1NÔK†¹s s¿9ÑYàYÑ|ü÷*y¦»!ú­XÔg¸¡DºÅœ±æ+9 O Ñ ×ã ÀÃÝfÕöòL¨ü£­ÒN]‚_…ÞÕ•lp¨H`¨Ìlü“ž/£©JôbÒ_Xe{]{/¦,Ñ_ŠþW^àWön¿žd6_á3×:n•ØêDí±‘–s<Ž9†£#쵌9€ùXNÔgŒ¿ª„~÷ zvë ìEVtXÍ3œÁ±TëL€— *еŽãí„ÿø&’qV'KåñÔØl–¢·Èz^%²bÒû¥.½LšZ*HÓæŸ±ª’!¦1SË· ŽCà?úã=wøêQxÝÜO‹A .ÁŸ?G° ß1Fj «ê6w&´—´ÕCa—Ì–“9»#©-üDžÿ1À(b ×ÿ$ÿH¬Çùqª_*…S×ôã7”[ïU¼*•Þëž“5ýSs×öj†îÄü¨Í!?…W”úQkL"½4"¡¾[M¡yê7DeñD¦½úÍ:•ÅÚe,È4‘‡x‘o1½à|òÚÆ$ÑÈ.‹±XÑ1ÿÓ]Ô‹ðA ¯È7+íö¡¶ª-=í³ÀíÚ¢‡ôëùB‡Æ®Qê_òþ㲨Éý}Ù«I|‰ä}x`á¿’/T"ƒx&Îàón8®Ô¯v¸C‰^wü‡* ò¤×#£qÆÊ]¯/MUÀ£¤\N=âXÃæAÓßýj¡}¿¥Ö ;ޔʵkàXÑðl¹@°®ã‹€iÄ…OYgxpg%‚¥Ú85¢lÁ¾Ü'êϰWöúÚøˆ8üü^‚/Fx1Ø×y2’kd_ñ¯†ðçu™O§–ÖMüG:¹õõa~§, º ç-–œaüÅ|·Ì0ÓC@!6“Œä¹M nçŒÝ¨þc¬’J_"ü©Î_‡]+€ÒrˆÕÖBKr”íÑ>]@wº”KÀÌõ}|â îÍ.èw7©‡þu¾~|¯åãɲ²ÃlFÑõ?cïÓâcœUæ ë!•ƒ7™_[€.+ÅñI™Él†aËà?\ÄôpWºŽv ƶ þh7¬óC0¹ †}~m Я10ÒÇÁ:\­ ¸Œ¼æ;*Draýâ™O˜_;Ï\ÅH§- ³â­1…LO—8bw˜†@éfnƒ?¿-[¡ÕAÛï`ï/1ÿ£‹y‹.†.ø—(¾øtò®zHÔi?æBC¹ æ8K€¨_IuÊ2Ö»ÂüÁdt•êLu·@•ú™õâj£GÐÍ;Ô4“{Ä£§NiMÿÝEœù^œ•N`z•ñœIÌGf}ð«:LTr§V¼œ¹/“bÛÑ…ÒUutWÍé6” '÷D&#„{Œ¦×ag¾ 5Od¶«/¹*½èS•>R«ÍÍVmúï·n%¡›{ p¬yàaðG9©È?EÜ™=”"®)ýŸRÍY Å:™]ì1Ð?1/3뽿3ÏÁÌoÂÃÝ„?Ÿ~uØ*ÅtÈDf"ž—óäò/3=ÅU‡ÿد.Ñ÷ˆ.ä° 7Å~³Ÿm#µ23©ñXËÔ÷*VÛú_Ùg¬{ÑM,8YóüÇiüÇ.î¬ÒtDÈJà8•ÿñɘ¢ÔÑqg=Pòª¦ãÝï}xVæ×¾…/ÏAÿv¬¿:¡|UÀ¨…ÿHÿ›ó£Þ¡ß}ˆZ& ±÷hz¦Ðg©RóÓÊ.ÓÍä­úþ·¶·DÛL|L×]žû£T—¯7üG}rÓ‘ôbÎblˆ"žK=Oÿæûð/À$*¶wíhOÇð¹h9ýÁ<>£òÒÀÈ:ëQÑ \ÕÞèöúÁ¸¬·tå3ûë@¬z Z…(¼´lc}‹þW3ÄãH¯Íú_}sé(üìø2m+<ðxìñ âçL|'?Ñù x‡«Dþï5%’ëiö”š<+~àu’ìûçðŽÑŒ¡<ÙÂ>žÉýä]©¥7>†ªñYñýŕѨU½'jÉ“äÉRÁgw%rÇ'ÃKN&þ~‡ÿð ›`ÇRú£á­$¼´¬˜–úÄF"¬ÖVòž=äG5È@\ȇÞg6ôæ9ˆüc&ZÎij𲜠mÉ"À¯fÐÿj¡8Mvæl+¿U›g=:xKùÞ™N–ç`Ó烱¥”öúóý @ƒˆbŠ‹?ñ#µ b8þ# œû 2Á‡üœ;hÖ<†“¹§Fïñ£Ø§ÂælòC&™êGD~ÛWí§ùõ4aâÇ“€rå§è“Äùº…½<‰nÊÀKúyj÷Z1p=üGló°¡ÙàWŒ<áúï^вÓñܺ,-g_6nÉE¦›ÙÑÕò²bÓ-#öwºz˜·ƒsÍå¬x‹š[äØcÂñçØxø?8ÁÑtQ_`\¥_Õ*r«Ò…ú¾i0WaÆÃFσ?®X•š’óxÓï29€þ»!ªï¶J u)J¸~ò5½†Ã(F<ó©Ùë\ÍœO½ß,s7øî…ðçµÍØ•’Øû®Gx‹RøâÂFÈD–xêRÍ>GçÊýØf à Õw6êÏíõ«‚µÔÅm§±òöÊî]æ,¦¤òe0~• ÿáe ÅE?Ç“ÒýåkªqªâGÈQâ¼±ýUº†µ·$<ÏL”WSÁìüÀÕ†™Í¨v,º˜ÜÌB>uÆì (È£PüùruþÃõîTlÝqÍÌi[Æ$«®èô²P3™ÿqØö=p]ú·_·R£¿jÅ¿}cµï“<²"ê‹Â3‚§ä?ý­Ï̪áï)EÔ”Žóô{ŸCÕµ¸Ú ô»ƒÑï–b•è¯öÁŸ[zô»áòÿ¼ú#¥·þXd@õ™8.ƒÈ¡ÛAßäl"†xMEûÛ^ Ü¿NÐ|Àª§€ˆMãÉë-ÜÄ¥úTüi¸Ò)÷uó¢8?ª¬ê§6Ò°yϱ/T6Ññ'‡ìKÿ+,ßbý'ðþ¯DC1B¹‡Ãm'ÔÛ»Ú3=HùWøŽØÍî°†mð§`XJó£ªÆzÛÀ¯¾EzmF)ˆSgá?î£ ? ‚²N`$ëΤ«8V¾þã±èÉ^ëPþ9ÔN"zYIKÃùjLôíÅiAÒ³a£ÏbwÊÀzï×9à„²¤*³7¿2QýW}@¿+“Ô«¢˜¼†-®Ìï¥Å+vÃ#y`3 «œxÃ9ð3ìu0îØ"û ¼ââ/ê³é(©ˆ³€>çgk9ÑXð;sŒlb¤žìº;þe™Q/rÅ<Ô+&À¿¤ŽÀŒRœõE‹:È(Fc‚€l€}êMUNЧç UM°þ~ âÙ£3àlö=œ¶ÑÍV5ü¤û®èw{a·sâ=ŽÈŠàC#ɸ2=(Ìÿ çøwª#.aDzb¡*»Ù´¡?ˆLbä3Â]éòÚ}¸ÿ6ðñ[ðÞàW>ÆbûTXŒf^Þ#4§}­«ø:¬¿œ )ʦ۰Sd=|t¡pþ㌖ï·}B.òžÉxê+r ÚØÉð㽈ìß=½Ÿ/ 3‡ö wN<°»;ð3@EW€ö– ³Ã¢BI¼EüäJµÊ8F5û³"Õ'Þ2ˆyG…A†VPÓ0úsݺ\ÿÑ Ïõ+üÇ=è¸ýj+õÕ)äã®øí¿¸'¢n‰Ë\¦?Ñï6M;Dt_þ<+]DësþœÍ=œ½¿˜èE.[F4N9Öêòøøpzæ˜5Á—ËÁ;åñ( O>Š|¦>Õö‡±úÙ™¾dÑ^?èGæ:Šn—KPOÌõéÕLmÃÄ…ä<óA²3G¾Ê¬CýùVzúê–¯ù…NŠãÙÛ'úªŒ3‹Ðí1“™ÏzÏÓbÏìøD^ð„ëŽücvm3ÝÒܰMèÞÄ‘EÖJŽô.Ì–ÍêD'ý3LJjkm-•ç,ïlDû؈<+#Œ.Ä_ÅÇÿ÷^¤R{…Òï¾PJªñÂÜQßI^º'FÓ–‘ôÒ“ivýîe%:èÕ4í#ÝÖ ÿ”áÿóÊïz„ˆt %ñ̉Eb}+ø•½~0“xOÿÝXZüßÚç|mVpˆØ º7M¥–û®²…þ»¦èwï{ýyû(­˜G=ˆþÂ>!«T-R7:^ŒfÕA°/>å4Oú}ÑHü¥ùQ>Ú¢™ä1Þä¢gÁr¹Ç¶+™ÒšJ-½&V {é)çÉ?Ö‹{+Èmu2¤èØÎýàïű§á›ÝPhÕ„/(kH=²«]@Kµ¨ˆn×ÞëœpRê(¼è8’?¸OÔzlµŠh)é¸MŸ¹'zŠ_ê¯4ôW‡ENöÐ]͇µD¿ÛOa/éLv”\â ‘Õ ¾Îƒµ) ®h©Ä2ƒ_%'눇µÊș߃¯¬LýÇjf&b7èI±~ýØçJŽ}ç gñ“pC÷ó½·XÉ¢/û¨¯XB^••J†åXÿÁx¶qDʾT¹´ÅGÍš 7’s¸„ïµÃ–5é‡~ê_Ò[«Å}[Ým?¯*o’©¬CYÇHM-šÎ‰GáB ™³ä`¡±øäR¬¾YÆF/2.Ü•nÿˆC˜˜ÕvR£²†»oøURsºÛ$Tw›D¼»@pJÀ1L #Nï8J®âJþšÎ¨© ³âMòÜ#:•7Ëøù›ÆÖ™Šþê¥ì€-}Gý…ØF&\õ7À„â“îá ÇÏ3é•ìWQ|ãèNp¿¦|áÿp£þ|&>ì$ý6œÉZY=ÌðôW©pì ^mÿJVÓ^ž!9fG"»¹øµAxêVd3™ïöUî€?i6¡×ú·×·š0±£?:¤¡ÌŠFÿ«m¬Ù‡~U{Øë2®R…”IÝ¡Ý1Òl3L³ê’¸ø¬f–7u‡ÃàO6YmaÏPïF¿ûˆ\gˆ¹ƒŠÉ…°7“äQêqK‹¾ŽãDoðhܽ5ÈÃVÉÉb“±Þ,k«…ê *³Cb‚û¥§æ£=üJ,2®h|ÍdfÃÄÅúKô»õ;ä_þypÿÚþ¼µ1%ÇhìàT±J|‡Í}I'š¼ôâõÃS¹E1ÿ¨¢žQÛêpÐØäIĨX›Áð绉YÀŽÃÒ>aÚì }g¸]Dôö:ý¯^ÔÅ$ôÁ÷€«ÍË]±$«*|Û²vû¢X"ºˆ‘^›åÊ¡«ñˆ÷à´Ïá?¶ÂZ”&VîoT'2;E ¼ŠÝµå,4†? ­L©åiol4ÃÖœ@_Õ6%)¹R)™›ç4ÚÙ-õv|ÕØëSÌŠ£žŽè0ù^4µ·º^”gЭÙç¤ ÿèDw€cÌ Ó¼ŽãÜv·Ÿ¿Xu3þÔ^ÿQÿ«¸jzüÇIp?ªß± '¸…ØÝU|ÙE#¯'†™žó»ƒSl5’b3b+£U%—Ô©tE_· tΉÈ˜xgÖÎuNlB%äú·{†[²)þ£'GI…%+T Ò²'(_¼C,øm_l aU#VÎeÖ`—͉î+WÅøÊ§ôXÏTׂPü´#ÿ˜ÊÏm„ó¹Iþñüg}×]¨Œˆ‰fÔ.£ù 6û)øÐE9ø£˜Qù¡·xÿ1žÜô‹‘ƒÏìK¾õ”þ%»ÌÚð÷ÝP&}`úêòãä á(J;÷Gk{ŒŸ’ÃM×ë„Y¯²0Pã]ä~mâ7Á؃Bv1ó]ñ`Ï©L®Ó ë|~_Z÷ñÕñ–{˜¨rŽ ‘Vä·Û«¯´R·çt† ëÏNÞ-ž1°~pýàdÓESIbð=Äø]ðG@tJs.[³ª`ÇÔ¢Ê\¡æÎø0»ê ¾Í—šB/ð«zjªßÆÂ-¸á?&ð”%yŽŠh~íð«Q⸑kÿu–±å4î—Žè¯VÀ§gDoÕ DÅ´ T%…ÜÄ}´ûáʧú£ßõ uÎì/«hD3<ѽæÁvõå“óR]Rþü 3Xßã9|ebô•hT-¢Ó9 m@»¾0ÿ|E¸+]Y»$Ttß…dD[È©è~@·Y's·œIýù}üÇ,ë þ£ªù™*•„hÈîQëwÿQ–Î`y´ùaV<¡e nÝþ = û8g耛C©ñèÌŸQE=œ|¡ùÇ]< ‚—yJÆà W²˜úÚaÖË+^QñçÇ]Ò‰ÕÜè+H%lw/ºö: v8MÑ9жçæU|CuYot ïK9X^Õÿª˜úð¦¶ø¬î²±ü‹Z ‹H¼Ó™ÊQ•}ú”ÌŠ=j-µÚ¢¿=D]üG32¤WòGžVF7Bqª:úÁøøðù耠pÊB]`-Xž¤Ô‡7·YÉ?üÁë²ZkQó~¥Be.¼Rz8•þb~àWEBáW5ÔŽÁúÝŠäaKä ñÂØi¦£6c+üÉ}ó1ùŒ' zGò¸ðçP—“…‰†vþü36ã/ò_&r Gþ±QÝ®‚‘\A>³“Î݇LÍæFýà<2¸)ô/Éh•µí´Ý´ ÙÚXGå3êÏ YSÉaíÓD>ŠäÀå`ÏŠüOô»IÔIjÇpŸùQ.Žwá‰HÞ¦V«‰¨4ôRôO,À*þÔ.aþÇC柧øÍúó/J+TIN`E=ã~‰øé¢ê«¿:Eÿ’Ç¿Y'o¯?oÂÊ\h¶g£+â2¹WÇæ¥.ÔŸ?‹õ>Äÿt¨ÕíÄóx~Ob=J`åzÉëT4$ÛÉ@/‚ô™ÓŠùQÑœÝ×nèo©8LBï…ílõˉµ÷&*‹ˆ7Ñ©|;GGÆÈý‡›òŠj§0åW°`Û龨˜u&“å@¿›[xG´#Nol|Ó"óÎÚøž6œ;;/‘€W9@‹âc•«ð78ÊZüÇz²4Yäïñ!LhØó¨s¯íåmìrU,¾Q˜:JK&YÈX&‡¢s:Ffdïþõ,ä$øT{ú_= »Pð»,j>=![*¸ˆŒä0GàsJQÇó›xªÃùzNxWª9¶ðöùçɉ֢“Ó|‹¿š¯dc~í~#5úØÚèwbÁšÔÀæ›ø“æèö·ÁuåC]; úÉp&ÿØŠ×ÌÝÔĸ ~>Rh¤Uñ¶ÏPèØç{|àó·ó{{PÕ& vØÓzfV1Ï’ä¥Ê‘YOÄǰ€[øûH”Õ-ãïCo¦ÝaïñXÏCîDÃ0u•‹é†"61«Å¿º ¯PýÕ ¼Q6:ø1MdùG5#c8þã¸Vœœl?g+? åaääP:.õ„›ïÅdؘ¶@ø…™¬^þ<Pà‰ÈhŽ€ç¬%[¯ÆN$ŸÉÏ‚ŒûDä›ÉáÕÆá?þ‹]¡"úÝ‘Two}Í óþ£1,Å!²Oº2Ž‘'ÄÇ5vUšÂÄ~m íåLâ±Oè¹êXOèŸØîh5 ÖzðÝc­Jä¬hÙö“LÅ_nG1CÆ 5ÿ#–ºF;GÌΪ›¥ÐöÖ¦ Wú%:cßwÂw@ÝtÚºÿqÁ‡gOÌNÃÂÏ ÃJ¼3A£ÇÛVmBþ‘˜ÈNÞdGs$µ)¶ŒäCÕÁOƒ€ù“!µ$ŸÉÅ,X+¹éwû@’GúгÿáÁüÁÍ¢ Þc,Hñ1‘År©ZN¥ý:|5+Ðÿj‡í••ÉÖÒÚ‚þª0èÝ„`ýî.CpL­Èk?1…T`:Nåü…¡vUí½ªþþóN)¡fq¼ûñݨ}M­~S£iÃ4ÉüA5Øø*ßT7mýK’á?¢RKòI_àÏï“ä†?oaHñ‚þo÷Ô㺷ÈÅäÇÇôOŒÈ¦„ü~øW35o¬Á$ú—t%ÞCðZéþ½NËà?’ˣܿý üÙ~òŽ»øZ°µ£ˆWû1ÅQð€"þ«¢ö¾¯è£ï ¿Þ_£+=爣½°‡PÆÃÙç|ænòãù.Í]òEÜ‹E,-‚Â|k£ò5ò*ПÃߣ:ÏŽmø,£uÎÞ|w-üGWžôîF&=¢Î ¡Ä©> `Yᜑ Kìb$!Æ/&µQúbÑø‚Ôx¿Êt¥¾¯§þeý५ºCä–gùä*Äïq‰Âš‚_ÆâgD13 ­æ'VÛÍwŽ“yáG>Á¯"òrÉÔ¢zjP®è×ÔK^ÆHŒ‚ZHú"ƒ&Å27'çÚÆç $qÁ_Åæ|$Ž¿r¦‡öI¼ÑLªdR`ïíþcÙà`tÊöI¡MÐ(ÁF¯ *N¸´¡'w@üÇ5¤Úùï³×œþ%CYAEUµ„=|€mØÄ ˆ|ã£î{/ŒÿHg–†c®Çó/¨lBv³Y®…CU;ÿ½^êíó%èÕbV±óCaâÁïŽ ¢SRëüyI3&+&¥žý>ÜÂ30˜š°ME´áažëCèwGãuŸr?,'0î°Î³=>²=ÓWm¶;Ø¿NT_WÄÜ C’D÷7°öä5rÇ~º]!ò§†ˆÆY;iÜ‚Å!w»@ÕÆ’- ”/¤l²a…x‘œo¾2Ãm”Ãx‚†íÇF÷ÛC¡÷Õ”FêZb”ØÛÁä&ÝÀ!RÂ%׿ÊcN&ß8É ¾þÌ œƒn×þ<7Õœ½±x«íàD_‰Ö;6®®'Ñ̽%¾KfÚ»ÃåE÷V›zl诎šsÑﺓÍ<¦Jå(,ÿsfÎÎ%Ÿ)I¦›_¦©J(E\3&ÜGS\Ž{`£l&nÛÍ?lEÁ­êÞoåÚ*¶ÅTã¼c¾áx³(\H-ú·[Ô¾'"ê„ °²CøóÔ®µØÝlb’ b…™Ô¶ÇÚ„ÿõBeõÌlc²m²Å±ÙàèQZÛ»¬0×ÐÏüÈ]ÿN,Ã#•‚ÛÉ-9Žø¿÷â‰ÒC étWIþoׯE×ú@m«½ÐjêT{ýàAå™ÚJËÊ ôXZ¥Ÿ:ýó1¾Qjá“Ëa¹œÐÕôÕïi}ÕëÔíÌ›ôÕú$í¶zñŸ÷¯{´èÝ·à/jC·Å[²d{‡F]ˆAâ”(Eü*§z„ë} · ûQ•è¹/]7zÒ#x+ÑÅs¢§â¹8*rŠYúõp»ˆèísmL ö|ùèNðhÖ€GãÙnˆU|†† 6kbûVFê?Ö(Éé+µŽ,/ÑŽîÁ¢bÅ ¼Ñz£1Vå(ˆ7Sظ[·cU×éÉÃXŸ÷—\cú#ñÒ@VðÁM ©‹íªˆ÷(„µ_Ê:gŒ™`n mÅ9=®‘µ·¯¨ §cŒEe^=™•ðÏÅhvá‰ÕN%‹KÑÆrޱד¬ìƒzG/ÁÀ{õ'DE]“¼êOq>~ö Eg;aD“{â¢-ýKæRã\Jú€ L%¶sb±9‚äø¦Êm ˆxˆ"ø‹xÚú0Qg'9I”üò mâØRäqËÀă[N5®éãÕaáN]3-L}»`± $F;G–¶‘ªŒò 1j.4§ÇdQ39([!î »ÛœH|¥œgŸîºÄÓüPüŒàئÂW,•SÙÙTЕ·è‡3{ð 3@2b]¶1Qä%]RR€`]¿º/[ÉDðC¡T–ö­ºiN¨œ·bïsÁ²–÷[² ù8$þc Ì온ÀîjúÉšœ“ò¬ëEÎàÎO¡ç ³Ã3¢ 9äMž† ä+À¯ÜÑmÕ3ék#¡ Kní!_Ö‹=ò•`З‚^y’ñ ’µEH'Ï^J Õ äÐ^ÿZ ½[kôð’ÙˆÍÈ 2š;8wËé?žx¤Õýîdê ³Ói«>5I~äo6þ PÝ Rª´=ðd @n“šÙ`ƒb¡rn†ÊL¿  J²­íàYÅù„É0ýÍék2“ ®3á@¹5FQÍq¼3éüüN¦÷þf¦“ÄBùÜßÖ̪­ånf¥Ïúm2ÔŸW‡Å¨Ä÷kÓ{å1XCa0 x ™zGGþ1W]¦OG:‹r‚XqŠ™¤ÊÄn7¾{?«¶´­fÂn[GXøÑ0?™ÓîcÞç®+Æ’G>Fç¿0JÝZÃݦÿßo-õO5³ãÌܦÿ•êx÷{‹QÝ`¿‹bä RL^¢nû—ä`~Ô~ýHÕb‰bT¸5!zìFÍð!ìêMìµ½·Á~‘ ¶ á¯Ïåg­[0ÿÞìæ=v¦qõsbÍ.èý¢ßO‡Îû>=I–Eê?n(6ð}“ü¿¤l]ð§ErðÖíÏOè?É´ý ¢#ɇèw…™Ç2Q:âî¡ #WÀ9袈õ¯nÑ]*1À´Ãwɲá÷…Ö3ÌŠ´$ÆpÎÚ5ÆGÑ8=4Êè¯RÁ7µ†ã=–¢šr5/ËŒf_ò?aøyÀ°ì$K®îι/r‘-ä*.4|á?&óçÏäzfudµ|ÌR 9ÇÀ¯ü`øçé5Äør~6Qaó'zȆ+iÔËä)¹†ÚëéçÔ«ú«tt…ZI¥EMzÝžaþyK3ú«“¦³¹œý5C¶+}ÏPŽ2IÕqÚzðá$Ü­©Ì¤†b$§æ¤2]|mð绨)iûH6s ÿØ>Àìaµ1çƒ*vÄÿ6áÚ·ÝEȼÅÁôßý 'SfÐ]¶É™©XÖVy†Í­ÅÌ6mP¯Í +|Uk'ªµVqf·‘—x¢·i>#xžg:üÇ|u!³ÊcðçO¸G™™4h.¢³.s®†[®¶=¶—¨ŒÇQ?Ø’o|Ö|ÆuxCÖ‡ü2waTÐòçøÿêk,ô»!ŒùKæ×þž.6dNÌó3™wž þ<)õŠâ¥$Ôfk½´3Ú5ÇoÚûhôñ‰Tó`Y‚ô¯ÚvõmyÞ]}¿~]{©FV¹²3û«›Ú&¬òîÄv`NõE7qKñQ%LCBá$6ŠÓ¢EõWeÕ×êc]Asµ ÓŒ'æOt"•@Ü}¹ú¾X±—ð6«DI±BJŽôZÛ _eè$± }Ü(>ÐëH¦Ð ëø«˜È_øˆÎ‘úS-D´¹œZ³xÄÑk¸Çc¥‡Œm3êåŸ3ÒÈ)TvÇ©c´ý)Î {Ö¥‘ÖŒ|"÷öKÙüˆB¬.ÌÆZÔWî(´j1ÅïŠã vT¨¾Ä9U©»BæÓ@7 Ð󫙃•Ô6¤wÉ*4²u˜q¸•®!.äMaLr¾MŽþ­ØâXOQgQ?˜ tÐÈk>ЊU7‘$£_û)ê×ËÙ¾P-~ýÕ3ÔX7°ÙíÍÉÄÑ«²·\kÌ@;ßÔqþÆ«St•øÿœL î°ÑìhkˆžË•~%ÇÁ×ÞX»èšhØ*ÒÅj,Jã¼øçdS¬Ïrmú®»;üÇzú·£ÖméI4ŽÇÍFÌ¿=J§/²®ŒdoóàÏcÚŠÚºÓ¡fÌ|ú®\0oq÷ëyºË`^G©Z ä¤üß¼z£´Tó;ÎÌs%ó¿_93#ÖM;©5&ÿ°óçk•×jW­•vK+¢9©¨±~ãÏ1eV5/ñs"t"Oô¤úø•è¤=õ-úÍ[(&ýõlÓnƒ\ÌÙ@9úCÄÐÂüª>æ¯K±U(Ô4vœ‡_¯£Ð[ጺOŽæê"ž¨ ÿ¯„­fß>7ïOå;‘†Jµ`9Q©è¹¡Í¦{³ €;ØÍ¬ÔXùÍ W†l†ñgí×èq¯ˆ§bb¤þc¸R~p#z€wF V,êD¦½™h¹9Š’íh€á?:À°tÅŽÉ1—ÔZÌ"òÝÅÑ}-±ú9ØY+žþâXÒ¥Øx/pôè cõy*R‹´ê›_œ>UCÿödØâbd1ÛYç¶B ¿ÑÈŒþ()XÀZ,ÆNPÀx£e|¢'ö¼ƒx£E‹`—ÙÕ^z>[ÈõèvaOÿï+Œ·äP¯¡º 24ˆž!žB´‡Þ±9ù#À¯*þc=(Çpš`¾DSÁåzç•wÁèS‘·Ûý–Jš-\©™ÜQc9¯¯ôÕêÄpÇ\_«.܈|˜ðK|Ý„ãN†–öÝ™ž¹O±Y.VYf­ÖBµ ~ä5üîHöj¯.÷ã AKþµ°vƶþl8 ÈÎûsô»YÍ8æP9 Œä>Þ Öi¢ù*àc³ñx‰àÎïÀ¡÷¥²Ÿ}h“ÜÃIÚ1’½gOGaMGôÑšc¦§ÈPzy܇>Körú=v" ©NvшÝ{ßoÄnM×ígŽh‚;¾n%Ç»Çð’»éÞÔÃ@…ÇkÓfOÂLÏ5§Èôz´Ìass²™3TTp8'˜çöãöT2ª»™Öë8Ÿ+8ª_ªØ©IdÕ0—£oòÀ†¶ZF×Â\ ÏÓ<|O‘%äze3BøVK¡yrŸÄ!t2ÿ@7žˆ©Š ™rRÿ±Ë¼ÂdX'æûÁ,ܧÉ%”ÂõÀ¯  =ˆgŽ•ë"jˆšŽýõC?ó†g¼wè^é*î{Ì–¶x !ÖYüœe;Lö1‚ŽÔž›Q;£ö2ÑK}#Îj ~µ'ÅÇá?¨sõD|s¹›–“<`þàb2Œþ¦^bhâ2Û}[IöØ‹aSJª[sè"v‡ëð^,!:*J$—ü¢ßKÚ‚Ž3s‡ù±ï~\Ϩ}­Þ¥ÃˆóëÒ¿Ý®î;Oýàæxk_U—_NŠxõ›JO=P4Â&äá9~ÊÄ]j6m-þãš¾I÷Ôü’¥x½ú%l §¨ ×ÛÒ˜#Üé÷¹AUá/r‹ôTƒÜíÂ=¯£Ð!ì›zMbãKæØkUÛÙüÊ›çñvå;ù‡'Ÿê·~µH¨ï¿ÔN£ÌÀ½ëˆõ|E R†;ã!¶§5ÿO*k?|‡ã¿*úDê?î*yÈÖÓèÜÿ›¸Ç«q¯6`¯kÁ’ã³ÓJ Óqˆš÷ñs}ôò‘\íÞZ 2Þøð›DÜIñ½.xÍd² èu!49»ÁqNáCb÷´CûLÿCýUeŽ®.VùzØ¢p éá#ì}&–P*M‚[ØBb÷I‡øÏBeñ6ÂþWy˜šP–]‘cAî Ôê_]ŒW‰äS£ 8Jýù|2šÌà-“ˆÜ£Íz(‘]‹ ÿè¯Xz€p'kë…f+)ŒÇò³Y`a½Qp¥dÅÑp>`‚&çÎç_§3`ÓöëƒÕÅ¡®¨ýåR­”°+þ2`Ñ÷ài£¡» ‡»WV@Cô«®z~̯MOG>ùG®°þåežó;½ ö9Ö‹£ÎA•µ¹}´rͲÉCÔ¼ ÓÕ|ó¾ þ£ vá»G«ÖÕ&éûE ¾Hw'ÿøU”ñÇDÓ¯pßl±›ƒŒNb–PÖ¨D~t·ÎÔæ=õZQ:ò*ô©÷×íseí\XSp§Zr%J©ô›w‘Õ%vv?ª®%º_Ä› óÝ'ÚrýÑÌ'0˜}¬ð<¨hÌ]8±F`æ‰e5Œwìð„(©ÿ8¥èx‡È‚8ú89vUâÜéãÐL¥ ƒÏ‡íI†8·ÔHOÉ1·ÐêµÆSž$r·óN`ŠÑ°±¨F4äc)<…ݸÃ=\oô,¿Ä¯©ËÔ Ï/A^é£ðAô#:b”]ÏóÚO¾ÂíD›°ïá‹ëA°ÿˆ¨#|Õ þü?3Ÿæ¿ßŽóUä/‘¼…ÿX­'¡²{Và4¶~*$]Rá¥Dà?†)©õ‚ÞŠr(ÈO*üÇrƒŽò¼ïÏcï²?Õ"igÐè1kæ`,{XN„Ñjë˜ô‰Ét¢@ªò*[~DßáÔ'âÙQTƒ_ùƒ¿•Cq_æJ¿NnûÜl¸Ï#ð«ÉÌÒÈbkøÐ Ø…]°ËgÉqúšwØatYôí Þ&€ž™}ÃÕÍÁ›®²«Edp+Œ¹ýP%s5#~ 0E`¥ËPÿá#¢> âÊá-±âfù„s<\\wœÁáJ9u?ùUqüÀ`ü_“é¯z2Y6ùÇNæÖµÑWjÑõ%‹k€¯9‡ºYr7½Ûë% ÿîy|ÆÇÜf. ¦=šMЗ%²V“×øZ5èöåÏÌaÝ4ݬÛäsÍ5°`3ÀÿÚ¢ÆAþi T[ê_˜'‚XÇîòwÕf7[[0¿6ðå)Ñ_ ƒIC¾V¢Joê@Ò˜ ¬§pßødÁòŒîvøwuþ£$ÙÇ PV?aXu@ªQ?¸ÑþÕ‘éê'l‡¬j¶ötóâÈ“07ÑǼÉõ{'6ÝÕ£:'¶ðtñïÅ;¥‰šÈqg}VjOüw>_g¾¬Ði/µ úYµ8kÞ¡þ|þÃG³è6ò{ÓMªÐ8ÇVýA4¾K?¯ugºÈB})ºé•º—vN ÑkDe·ôm\Q«Y þ¼›x¥¸£ßMDý`Fq’úî¶zGÇyø§Ë«_Ô3úgž<_2Ç?‰àªóôÿAOFr›Ó°ËKuŒŽk½ôè×+úkîúE´ýoAš|ˆž³ÊKØT?âéXÄëØê:<ÿŸÄr¦º‘úwJ"#9}¾â’äÅÃÃg·˜±&ØA"â¹x”ÁøƒRF9=M$Ç\N«MLÙ –â>¹µ3,;×ãÇ\žõ?³êf΃6ûŒ½Ê„Ú΢¿TVTVª"®ü‹]åçj¤f~TîþXÅW\•¡`-7ðEñ(§`‚üøä[F=±-BýUkÕS¯ˆ_¼7“ÿñö£˜Ø1ã31ž‹Ø¢yè€78˜Äçe"Zsá ö‰ÀŒQòƒ—nƒ_BÆâLÇÝ-¬6ÕH€MÊ vs ¤3'Z¢‘XG.` øÚ*Îâ_dLJõÉê’px¨V@,&ÓuÂãl$CÕÁt®‚ú€å{؈-,í/if1§‘áèd £@tóó'©-ëîº|W½™]Ò4‡ø~ú+/"ý—(°6Ê hw˜‰¨É>‡¯*f¾&ºGþq tÈŸýW¯Œ¯…ôÿ³ou”öFt#¿{G<á§òÎx/‡ÀX$fjÈX*áQ±vz üyútU#ClAõÇ1üáiüG·ÿGÜYÀgqu[æÌ™3óàîÁÝÝ­¸»-®ÅÝ)×âÁÝ Á]‚»»w·ï?éåIH“&¼÷»}Ë’@rræÌÌ–µÖÞ;HýÇ&Y‡N1—‰5æ+OÔ§à9¡MîŠfí0;õ•È?æÁÒßÁ+õcµv°=GÑ;úOyÓ}‚-´Žú^vVRÝ¥š¤—ªH”…®½í©®HÈTª]XçìvSôWCÈáêÁŸß?÷Æ´±[F¦ô‚;0/Âнij}>­ô.LGŸ,G•Áÿ±ú¼kpò{áÏ/0Mä©ᥢósöY§yG>à?úšyð™ºÜé>Áï—Þ"ÐÄÁ‡Z6=^'7¬{I¤?Ö#Ñ­$‚Qþ»%Ye³öÏ߀ ‰éÇ»+¬ ùÝM­½qKÖ#cωE¾ÃĨàcŒõð盌½âFˆV*øóFÜ NÝJι &´0z«GZ;ý&*£Ì%7¯ÿit Ó•¿Úh\„·}̳PûÞ ´¼8Ø.âf?ððÏT^ÆL5ÂÒ‘æšXrØd={ÛCÞq”«>O\ýÛäÌ׫A¥„DëzCv Õ\×R`'×Èçò)zÝ“ðÔõÙOW,üª¦"ÁlæF£GíÆúÕ1b„rÍùD>,r;÷§dGÑÈCbsGšM°‰¹ý+z—¢æ\úr‘¯B/3ë!u¶ÔõÉúE‡l­,¨äT² gþGKXޏhf˜ö‡­pxx§âNá>˃þ‚õÉôþF1Îéï]züˆx\53ŸóN‘dàô ´û¿ƒâ- Ã÷Äˤ_KÌ)G†ÿè¡Å2vá?¢a3êàA¢á7„u·°r‰ƒðYZØÔ©¨¤¾áI–ã“V’Å£>Aèä±k,ÒIO®3lÀZ"÷/|ýI*Ø·“q$—XLì[ þ£•o“áG"ÃÌ+9D[_ª0¢Ý¿–â¤L‹ÿpa§©°ûG˜õ ÿ±•J‹˜p¾ÉˆK×ã?*2¿v Sõdè#üA^îØGýÇŽZcDbìÎA¢üLx£ÎdlŸéL5׊N5ß`øóG°ìÖB•þ6jÛˆ yÇØß#bùf¹ üùô»ùð÷Ì‘¨–ð•j5µÓ¬^àa¾ÌâKc¿jOÿÄžÖ{ëREÞ› àkÞÔ´T“áWݵ*ø ~~fKøó‚èw£b—GÀn§¢þc7yðIÇÀ¯òY™¨Ùé­Ýðû½P8삯BnäQõ‰b/5;qÈ‹<¬÷ò¨D-NÝ— jCà»Ù]wð§ÉNÀ)kó“í— cs„ieeq÷›2ýÕùM–Ñ=«JÉ­æÿþ‰Wá?¦¡N^h‡sQOÞ‘ =Vê:=˜vèÌ×ÁþSõÔÐ4å^dÒ#¹ÆÑd÷»¨<¾I5‰ƒ„u„K‰VÕ”ú-®ð`lµì j5•“yÐݳòæY`Þ³QV&RÉeXº%yLÿןÚðú«÷Z±ÿ˜?¯ßÓá?<Œüø¿ôWáÅh¬#âúݺ" ±õ¡†ŸlMµ_E¢¸7Æ=1E'¶Óãî±ÕðÅ„„²¿^",þxP¥XèÆà™}ˆw|ôwÒƒICmäEøóVFc÷üým!ò»ðÀ˜†à?b‚|ÁN—%ÿØ€Št2ŒArÔ_dOãÂ?-ô?ÿö€þ%—ÑÖÄPë°0Û‰àN‚]$óxÂÕ¿#ï.‡ÿˆ‚Ø-K‡ê?^h‘¨«X m:]€7€þU ÿÕ2›e01Ô>ü‡'éN§ù–fQ#K(×\_4 hÍ“ý”<Áƒ?+>4[ð^§¦jÚ™âêt<ôPgð1÷åg£™îÂUÔ¼õÛ2•ÝE°hžÌáxÅn‹ :RËÓˆsÿzGð ÷M…Ç«Ïüà´vôFmÎû!W—‰3»–X˜•÷ƒÜ fâØ|ã+õ$]áÖñ³úâ1Ó­àÝ&ÿª¥26Ëy -ÍÛ ÿј736=%ìÅ!rͼD·s‰í?q¯ærÝ3`å§à—îõ€iE]üúïöÆç$QÚ.eÁÆV¿Êc·–£ßÍÿQŒúó±pßЭâú·£ ºÇ÷{û"ÄEÖºÔ§ŒoÚÄ“fO¼C:‚LµâbASÁQo"ú®iép¿ÉÑj¿Dt›8¿0ñB&Ñã‡G Eæwn«(ÅPüGtЫyè¯"2çi3ù‡S¥×œ®„ŨA8ŒOI%ßur…ýàøËÍÎAÆáÏób¯ãÕFó”]Tó¨ŸnHýzBë,½F2 7ÀÔ¼Ì|mùqÊeT=¼Ç%V¼ÉË+­ÖVßO0½õ…nwç™ú¾tô9kÝÅ\¤§ïq¼Ü5kZèîôeœHæJ¯~o8žüÃatÿú¯ý‹nQ¥›Xg£úÕ÷"«¾+/=¯ÆÒákû{Œ ¸3*¬\ v“¨D/JïàÇp{oä lCqjpç»óeúLcOæbŒ©ôر@ªú¢w®ƒ&;½¸úÙ=\G]1\Žžë¤ {ž‚úÁ Ömóïо¯ïI¹ãûÿÅ?£èƒÕŸ?¢þ#4ENH›K«ŸÓs‰…ôo¯a¤NýÓí£¾šúó«ÌÿHÿ“üÇ;m"U#lC <¶-#Ûè¿»†úót;)žè¶û~†´£À_¼ä©ß++`GúšõåJyT›Èütf=Ùšjí×rˆÑ1L+Ò·>ŽŸQêÜ bèH÷+ˆFu³¢¤«5vlhJ,cE9Ö¸x !}lÆ$%ÛpêöÀ…µÛ†U½wñ÷¨1\,_Y?TÿqBsð]/ù…w¤lyøüðàOÛÀ[òmƒGô9š2ÔÆl ÛÒ¶þúûF¢žrOöcÖH€Ç,Œæù”Ùö3–t5øÕ.¼H&§ß¸êð²¼þ1„%ßi^L|Lʪ¢¿š‰»Gÿľ|LôBEÌxâGþæü„«p?'û«<#³b ²Ñ: pTÔÁò\ªG¬QÜã÷%=ýK¾‚ô´Å^oöóg@2£VÉÎw|ÆôƒÿØ,Qu04Å™5ŽÕþ€•êŒvUWg'K7ûô–}MÇ{¬t˜•OF§¿å-3ÌáóS8x”~1‰kr:heaæìYf°JüÇô»I­¡ØH‰úÕüî Ñ꛹/¶¸ÆÙŒªž~°{ÕRVë‹~7‰µŒºq Ëš‡9CAìª05jx):Åû‘-t%o&?vd+b‘=ï'FÉ*×E½6%|Å «.z[Ç<¹ Š3¾¿|wYМ?Іí{F×<ˆÚd(,rQu‹œqê0”èt(j9VØýÕfz>]ÿ& òºe½%‹«¶¸…k9F†Ò\ ”ô¤¢7w±8ÔdUBõ£òÅÅÔÛÎvLzNŽ'ÿØoW «ù'j ’yRËo_Õ&Û|€ÿMÉ Ô?1±>_3Sqgš)- ¿ùÑ|Šæà‰]Õîƒ?Zfgs=€ÿ¸ ÞtÌšg²šâ9w“Obža4"dµ@üÇïzWúð)ªV—š^ª°l®f[Í`¼ÕÕ%bƒt®§v{º^Åq¥§û˜ü°èïÔ´'‰Å¶b×"šëÜþc.õÈ3ñF“Pôõ''Ï ÎÞjµ´¢Á§´À+yº.»2ºbºŠÛë”g™Ln¯u‰§^ÇfLMŽÿ±%˜·äÿú¯^h#ôòˆþ‰¡!â!í(º~SÏ'º‰XÆoFÿùQ«´úTÑCÜèß § i…ÀJë^Çß^ 7ãJËØ¢?ÓG^2œÜj'’?ß Öt£,†½Fw‹3r£V þ#;ýÛ› ŽI-]Û ïlàý|œƒ:ûcÆÄ@PÚY4 ãëpâÕ£d9±a‡?²ê4ãdÀ·…ø‘mxéŸb£k= úO—%x×cx¢'tù8i&VõÈh¾‘/?–CõË´ô L[a÷Âñ>g¥yÔtëõá}4À]Š •c@¥z˜ C­?Ï%ŠcÇûùÞ@[–†ç;3‘Ó¿½x÷ë‹ARVÀÚÜ…eÄÝI«Ÿ áZ?ÐñøŒL¥’s8øUjPêNà?¾h+áÌö¼¯·ÈNáC‚K½F\Hµ¿ ®ÿnB½†Q ø™Ì*yˆÓ¾:Lú%ÞÒ ’M AeEj9¶â?&…8üyRâö_‚Á¯Úh_ÄJ"€8tƒ*¶,*ßU…'%Qw^âÙ]ø‹Dô^pª‚è~‚¹Ü““™b&’Sô “^šŠr4±O\4ª»ˆŒ9Ñ0”ítlOI_Š ôf­bm'º/ŽJ¬º?ÿ±ÿ¹~ƒN.¨þJˆË2™¸Oô!jŸvÑWE§Ê Õ× ç~²ÒVxk¥JFõ…ê·o0Õyñ×±„×Owa¡ô þŒçm/ùÇMó#ýÛçXA€ºcK_£qÒ] ,_šŽÖ<\<×eüŸ‘Âa³e ÉSÃÞÁ‹/òg÷׫Yä3í­>xÏt.ŽþªÓ6ö£ß}>ü³ gó–_ãvÈD3­€îL¾¯Îó;ŒŸÜH¦Éu&‰Kø/|ïr]µí[ÔX”‡£gZ¢•ƒ`I°¶Œd¿˜ëÝOa$}ŒØI‡ƒü£¨µD ³—Š ¢¤ƒ ÃË­Gïô‘|ëXÑYÔ]‡¬^ôÕZö§Š<`vgšOV÷ùõ׫Pñû]y›7ÕÃÇü`5q%"™Žî±:¿‘ôüŠïJb÷gžÈïv zÜ@£`qv¿ÃÖ ¦;êöóõièw €|O3ªÞ[Öd×ú—tµ> àõ¦’½Žë¼ËrÕs•¡Cæ:ò8vôW÷±=@n‡òæT©ÿ+ók%ý¯Woµ\>s߀0}T¿¤§^0‡QÁÈ/´ðª–D ¢â‘NdùÉþ%_µyÆ3t £ˆT»›Qè´\ Óó#b£V¡nÊž]=E½UÛNµ^Ý—·†AÎЄÿˆDþ‘®{#q;*d³Ï]ÖBæ×FD””h ³AjÀŒÉŠm¾ˆ¡ÿ _éå%ÂÃWíësæ¶yz§Rñ\œ—®0Óá®B¿ÛŽúÁâÄôÝÀ¯ÃÈŸ ó*¤û Y—©)7A9ÇR¡B3üÇH´QÕ[u ˜Ù¾‚Åÿ;5 ·`eªâ-}É}6Âó7¢Çîm÷ öÕê>ä 5QUÌ#«i‹½uQµ^œª2=º.0ϰ ¬õÌ@/O—Ú h¡SX{àS<ñpëЕGQ õOŒ®ÏçÌäÜÓ•f^ë<}ÄÚ©dt¾HÆ6Îg# ¯3 ä59g¬ÙÌÿÈLž³~o¸‘;Ìn"S_«?B¿; ¯æLO .ß 4á(ú‘È*ºÙŠØú2«yóë þãÞø½YŠüãNàûŸ ‚_ÕÀk¼ãÊRãoÎcï+£ƒ;à Î7È9äS±Q…yÿü­?¨Ý™7Ô7ÿ1IËdlÁDÃ_„ñä0åø> [\ëÿ‘‹þ㈮?G®€çZÿ1Šû}Û˜ö·éÌí™_;Ž &¬Æ<øOœÑ!”ÓàKi‰¥wÑ;£}m ¢<AŽôÞLF´ÛnïÞê"^¸g§;&õQÙQt˜uÔñýÉ Ã(r˜Éôû{‰ÿ¨ÿqyåOÙcL²'ì÷1¾¡<üPŒ ó?&‰´äŸ[@ròÀ¶V±Ð½èß^žl /HÌr”¢(¥ Pÿq ÿa‘¥œÇ×ìU¯ˆêÑïn’NÔ\÷˜YÞ][*rî ¿Zjö§›D#Õ_oj<Áf%õQ±äió°Uœþ‰{˜uŒ~ígÑ µk1ƒË¦Nãwêø³€.>WoÈ•é…Bmñìþ*wþ±Q]+È6ž,×O>e~m”¿ý™Õl«Ž]†ùç™b[Ñ~¯–Ò½Dà?ÎYçxG¢™+y;‹“!›rƒûŠÿ½"è½õôîgõ™–Æ¿rã?ùù©ô+t™"²Ñ¿$ó¢4íš–FLƒÅ~—zôŸëWAÿƒªºFD\`|©øho½œþ‰wŒÆkñü'ý‡i¬ÅÚ{ó$.Æ¢vƒ3ÿ¦mEM¬ j¬³rœ0a쟮?/]¾ná?èxÍkŒ•ˉ…Ê&6“»¿îÛé~HÖ“€h!¯èGÿÝ3ÔD%®;v—è®4¶æþ£>lz8UŸ,õµüD—•r¡úZf¸öy|µA_4¨åðgձў WáQƤWëaÔ»cq+˜eŒÐ¼pkøçd*áy`§Ç¯(Mü˜¶b1Ïïa쉄?ï>tBpÝFœë¯ïÔïIòŸr¬ÑìVkËÞò¶Ä2»-<$ÏÙŠ·lç$ùÇóWy[< æø*é=ŒràVoÀ8S°·KxÉê<+gÉYÖ‘±N¢ÿÕõ¬\sw÷i‘™Aˆâ?„¼!÷¿(ã–q‰ìõ¾ÇüêQay¬èa¬ 17ˆ«#ð¼…#{ʪÿx«E &ÙXùÃS€°EÃîœ'º)¦q ÿ±3좲YÌÈÊÝn!J€ÓuÁS:™AžïtDÕ©‰¨K“†Wóx†÷€%Àvtµ»nÔÑUkÚúBú—¤R‹Ð%UÆÅÃÓvàé¿`þ‚Å.C=uWt_ÖÛ„çpfÁûâMËÈ ÁÎÿ(ªÆÜà”¦¢ßõe•V kð:P¹¤"ø†m{áÃþósS¯˜ Ôiw°þ#¡±D®„ÿpºz`—â½ÇšŠ˜¶4lÂ&|^utk5¶ö3Y×*|ýXlp{æNÒƒö®/òËždñÉÖЫãÌ ýU9:&^…xi!º/†åGä.ñÓÀšæâANÊçF— gOeêi;Îyþc÷ðœ9˜úÁøt”š„–è=Ü30ÿc3ýªL«/.êÝ«àMuÁ¯R™‚ÔŸÏQx"–);huæ}x”1V›þè›ÎÁŸïÀºú/ýf]ÅD…Þ—ãnÄǬjùa‡KeIò¶« ­Óñ‚§é_2“Ú·Zì„ÉOàLYìÓV¦m,Q­àÏ}9Õ⨠vã;¦€ÙÕW¿Ë'î7¢›6T¿BEQm²¶°íä0ª¯à?Y¬Áø•ÌäkÄþúS!ïÍüŽóp>ÛÉ5’s-…ý ¾¹Ù½^}¸„ÿpº/$²|P?•@Æ9燙•†î%{±ú™XɇB»!º„ü¨µŸ“lï.*ǹ¯wøÕê?ŠssÕY#’zmµu¥d~z úï>¦žD-´d~cJ¦xt½{®*ó[¢ó…3½*[Áhð«èä6UVâ~Ì"—îhÚvqW=:Ÿ fFí:”[½Ð_­q}e~mK&7ŽáÚÓ0×ð€u ÅÂbŒç}üBÄ´Ï}Åÿމ蟠L³áÒãºÏéçv‘@ÿBýù‘ÜèdäNÿžÝš-–‹~âžÈ(rê;j¹wZs4Ö¥ ßÃâJ"¦[åGãŠ!©pÿ9þã²X Z=4Õ~éM¿è) )ùÌd2»\޳̦+Ï®_Óç§°Rψ¡+`áê‚<µ6³É5àöÇ@´.ƒ°^cþyç0ÕŸ?¾Æ;p•/ØÌ“DÏϰӹ±5Gˆû+±z4U‡(ãš<çô˜ÕìÕ"Ñd ÝAŸŠe…f°åxÒ&™µˆª×+¯½kL®TÓ,b„vŠ%DMöÔ |’L#!R"r­·T¼æ *·¨²s¼Ç|3Vº •yWPt…ä5£1𭌠Ú׌}M *~-»ññzêÏS©Œhm:«—ØEgÅ­ø¥Ãd!÷Í ”šH^ø;¨S ôW_á?öG\—MybO»óõúc†¬jÎá]F‡{VW]”¿5Á¨>ÁŸÔ±§º¼©ÿøB'ÞCê.SrDZîë2Ï@xr éf®-ñÅDÕkª8ÿø¿˜î» „ýwk3?ª §}K‹(VPr‹úóúv÷ý Ëi°8y:Fü}tç)oxmø ‡¡.ŸºŸáà÷¦iŸÉ?¢˜>°%ϱÊ;9ÁJT4%§¡¨øe•æ-Yì6»Ñ¨ý ~Åö¢2¾¬žÒél˜?™Œœë¾¨(þ#¶{ÿ>µÌr2ÅYä†EtW»tò2<èF3/ˆR2j"Àkïf§–jÓžáØÝ.Þ³õìy*ž)6óï³¹Âd¨Nþ!Aµó°‹DûåøèøÕ~³} ”5•è1'|Ò ~Ú`ªç/‘oÎfvÏß—óÒrÇå-Ó+Yõ«BU Ÿ›l'õ»É䲃ßx2Ùê-™æb2™¾¬ü õçsôµÏ_kO€?ïÅS‘•|b1ˆØc2•äÇUu++så¼à‚ú ô/“äôéƒMÀÏ?#ßPQòãSˆcä”Lüâ+&“Í$CÂ*6kÌ ~ÐÏJEUÙôQ•¬Ïä1‘Á}®ñÙ1ìoc¼j<1䇗‹ÈX²ýÜ·4j:ÙÀMóƒá NTÌõ¿zÄt¾CTAì ÒîWüœ“»vÁl¿z€Þ®Rþ|½ÌHþq,²7ˆÙeó´šïß¿d¦J âÒHüÕÕÐRæŸ_‡Eïèï?¶²¿…øªI þí­µ>úið܆dmXµ‰œl¾TwèŸxŠ3›Bî6 ¥íoðßðÉ?"ÛñÈljƒ_]á´c“]”ІoÚ6q†Îñú1­Ë2–é«6QãqÞ}S6Öà §¹Éªƒ°éû¨5ùÕZÎ>ÿV{Õ\}€ÞØö3µÇ+@ëÊÈêó?ª z®dåùÇXÔp\ ì9ÌŸmFí`Û°"ñÜ\@ss]i s‡Ûøè+Œ?ecžõÙÞz§{dìÔØøx®½(Œ“ã?–Ь0uò­ø—ëĈç”xèrÿßàÏ•>-þAË ÇwŸS0/í?üU^ú_U„?OCý %Ò°Êk-½˜ò\$±Òd º V:G'8êÄä¡áW)D¼ZO,á+²åXþè˜. $*Ì/vl5Ö~8ú!8ñ‡Ôæ±²Sè«ôØ™íøÅäḷ­`vÁg¦Wù©<‰Rvþdg{²Í)·‰àæ¨TÐkùøª¨j8™Ï\lZ~ï´0Âñ( o#3!Úc§†ã£ús ä;I°úGƒÉ?fk5è¢O¿Iø…|ð/Y±9ñ@P¥R ê£a~Šbé«5œF8«…µÒê†~·¶ô-õ_©÷[N¿Ü†àMéQ8ŒÂ·¬;»Ê³™Ú(ÿóʴh€ ÷èBnq¾æ3ѵ¶š«Hh•{Àœ²† g·/¬wXå|ÝiØ¡yôdì¨ZÐûû­™¾„“oƒWmNÚ$PÒ³8^²"¨Ø)úÁçÅñÅ^—¦/ï;èÐjä‡s-Çî? Ïý¾œ¦ésÄm®ó Ï\Rk”t™jU„ñHM‡–M̯}zµ ½Yrº†lµ70K¾5¾=wã¾¶ÙQÄTäÉ»LÏŠÒÜÑeèž”JFøh¬Ð…«ÊaL LÔœ\æ0ººöv#×h×+;®+1Ζ³ryò3–ˆh4â×?Èš?›R® ¸âí£X`Òõƒ¯´BzÆž‹°o¤„.D1O¤3FIýñ«#Z\±"¨GO¨{‡})¾RêÓéq‰ª‰è¹ÅeÑ[§ûeĆ͊?³àZ±ÒKfÁgúZ©¡\¾Žj®°ôÀÚKóXë+Ál5ñæ]åÎ"üM€ð›°M~à+PS=•Ãda#¸¸9访ŠÆW™–H×Qtí4+©}Dø‰éßcgOas*“íž–‡äty!Ôk^­¥Ãß.Áƒ°¶GñpˉušÀʯ0k“î!¿™K® oÕÍHF¤PV,'åtf'N¶ƒ8>39s2°‚¼äñÈíç™»QŒ9úÝFLfújd 1ÿ0õIúGY€øµ1Ø'ïÐ+Ù‚½m§‚&#x?ñÞK"X:E~wä0÷g“8ôÐø<]ì2ù÷·_AfáÍ÷ý ß“ˆ:HsBée8šœ s`)€ögäç%ÂÛE ¦~p –ÙdÛÈÎÆ½: ìZ<Û039V³1Õ;ñA WÀÏ>‡e¹€ëì Ú˜î›õ •¢ÃEméÌ?O…žjí%ü‡ÎRó—ëÛ„û=[QNÀé_’Œ(¼™ÃAõ˜‰fAñ«⑌©ŀß÷Ćã~LCÛ”ÿ1Ê2Éf¢‚sì„=i ÿ1r*§òBÝGçÔ¤êÑRàC\&RïDýœŠõZ©c¦MeÞk/àÏ½í¨‰"¸ £¼ªG…÷Ir…(¨«¯å zbf ‚öö—±ù‰—ñHa±¶Â¬À2· ‹ÔGµ‹e´÷ƒ‹5„9Ÿ@µ¼­ d Õm~º/g>Hp\µÒúÓÀÇ<5›_eÄR¿QÛ­Öä­¬mÌ œ"V› ©"8SG®ÂŽ ÒVŸ^À¿;uNáÌYîˤo£{"аIfËOž’añ[Áwd%?JÇ«ht'ô†ICÿ«Éö:«~iOøpª%;Âñugþy ÷ùõæÉ{ ïÈÄ«T|yÛ¼lusF³Ûœ:ÎèÌýÈÁ„ÝŽðݯ­ôÏm`g…‰fE£žùZæA|…‡yÁí?V2¿v¦, 5‘¨îÞQé.&ÖN¯‘Ètj¹¨™6é&è^UÓú£‘Œ^5ᬻTüýþb¨ùY_úʳD~îéN9 >m´BO¾Ìj¤Î©!ØÒ¨®›¶æræ•ç‡bU¸³åh³öã‘Nó]¹Ði¾)e6NíÏì²È9(œfÓ¼)ùÆõm~âéîôÏ GUÜ#VíËŠ½ð-7èsƒdV úóVÌhs:!WàiXKUGTŘZØÉ~m¤«Öê?233j¿=šúÁÊèƒ/Ò!ùÊ×T9b†”æ²€íé ÄüóTs‘¬G䠱ѽ£¿a<æø­e=Ûµ…œæ4 ¶ËÖhr¹Þv;ú—T@÷–z piú· ü£ô†Ô6»àÓ¶R=“\¶Q»­ª® øŒèàlÖ¹R >%.üÇtÆ•ð䊼/ô£Ž =µyÞí?Öêã¨Khwß{V¦¶«ÐéjW¶Ÿi½}éõÕµÔåk»àèý”Ê.i¯¶NY÷xK¢€òNE¿XH’{®ø_ûè›ÖF¯ì~PÃýÙÏm"2üy4²hÆ<#•ý Q£X*<Å[‘ =ïÏùçÌzB®Öj&6䆨¡¥ÏØ6vÑ©?®'RÈ;>#®a—¼$*"Ë‘rùG5êÏ+Ñ˽A¢á?‚j&ƒ_­0þc˜ñ|á1üé/¦â­¿Ž2¦ tf Ýä§\!o²©Y­o7]õš8‡ÿˆ‡Mr²ýd3ûУÅ/½!Þ| VR¦à…<ÍžÍPõW#ð á±_J¸Ë²¡}X×*¬6Ƭ Þ´™ücÕˆ=À¾k›qzU}ßeUÑ̽18Øy|c20óBä„Á/èßS/b%/Þö£° 7PWÇÖï|ÿæ FÔ‡êŸñ{AKò=±`‰ª£¯B)–U4‡¢}Œ}÷Ã:Föq—\â3õƒ‹Ep}•ÞüÊéO¼€·q/WX›ÊÆø[]¢«@K#œµ5U>°ž–dPÃÀ똞‹ÌŒÿh§¥F¿»}Ót²€$ê O]e|DtâÏB°Ñ»`¡2£gZMìÿûãÅ»>½L{˜ùr±4R˜Èü¨ÑxòÄ|Çvð«ûXë5x£M* 3XóÚD¥»¨Ìm-Â|%˜Žtˆü«,.ƒö‚Ž,üxFkµÌbÅûài8/E¯Ä)TZX° 9éÓz–Ý•£¦Ð‹þ)˜÷3XÕåé4ÄÜÞko‘ vŠü#ûɉ=a~Ô|«k÷CId¸ÞÓE¶ª¦RèHoâ£s27˜¯qlû±YܰÎm'Óƒ4$"ž‹5ѼIþ1_у ¼—t - ^7ÐETßŽŠ ?¦Rè¤/ÀOoÇ+eÆ`@­mæGmÅS¶åù™ÊÉÔì÷¤2ï´šên§Ö‚ºÄÖüG8&ÄÃÞÿ?õ#¶I¦r™ÓÜOß'ÍKœ#C~Å›_ÀúÈ{ôÌŒGýDz¢^ô‘ZcGríÁ'Á'm…MßNÍE ë úf‰XcÕ³¬ K»Ïo„^ÎxIǼ,Ä@;©¼l²jU­£žÝ‡~ðÞ »`£žÙQé_²,)¯•ùµŸÉ©.€Y‘Eá-|ÝþÛxt*9Ö"âQGÝñŪäåLž¢ÇîM´Äõ˜5ÉuÃŽL¿•Åj.SªJá÷öX™ñ¼{.ïOr²´]î+þ÷>ˆ¨ÿ¦qŸŒF-HÊ€Ï~j…ôTˆ{S?ØÍHæï?.iŠÙçkñ©DÆŸœÿŸœÎÆî5)÷4cÈ·¢¤þ\?dì•©ä3ãпz&x²á?sm ž´¯ŒHFÿŒ~Xýä ØææŒ0Ö”B'°Å0¸cŸÐoÖƒçûج±Yýî2îh_ØétÄüµe#L5/èÞžYê6Ïãó ¤:pó§Á¯jadeíd0gå +TÿqOK@¶²ˆXÕ$ÿ?Ì Öw|ÖÆéò¬ø›Ò(S%8Ôq¬[#j(w»·è„oIx—Œ%q|Rt[›@œJÀSDš·r”Èú±øô»åõ$âÇHê«uÁ{¼Ö£¶7Úˆ&\ãFÞ«HDɽ±ÜŽm36þ(–è`6¹YØ–€KRÿá UŸ@ =ð8Çñ•…Ñ[ÄÆ1S ÇþD\Ý_°„«D.‘l97žæ}0üÇH-¯±P®„?J<à0õT7ú¥÷ÍÒÔR®.êÛåXчìw^o.¨XWlsD9íoèìløîd0±áðWªJ(o$ÿ)LýùAzö}µ’X‡‰ƒóYƒðÄà¥fó$Í¥¶ã£|ÿ·\8ƒ¸÷_ªO,î.5 flõçš5W-´>S]—\Üáê‹YOükÁàÈ—œÞ-ˆÁR‰+‹´œŠ/ªx`^݉]¾¨1Ô4 'ècïÃ^¤¤>¾-«Õ ÛœUÓ,ô>ð ×@ ™¶6NÆ'‡¼36Šüí˜yE͵Q>Žæ. Ö‚Dö^èG¨nÖ%ë~ý¾îõP‰õ¢Kf@<ØD«§/@#Þ”,p¬* C]ÎÌ ÿá C%骵ÿV†®ŸÑ8²:ƒ¾ 'ŒS?8 „qˆWDõ‚þvßÿ3uñþÃA3Xgå™»¼)õÇáÏ=è_²=pqæpM&—+D^³†ÈcgØB-fžNQ0Ýz¤ÞÇxH‡ ¼X’C*’-o[E\Ý™?XËÚnxŸ v:×v× Xš_˜6ÿçb~ínëÏ@l²Ú™èú\ê©TCþýúÿ/ÿL¤·Óë»mÈ3ǤîÏ~îçƒÿÈI½Gõƒ§¸‚˜ðû¾¨ÃN€_y›yŒê?¬7T&â¤Ïñ¼_e¢3µ&Z ¬–Ôž¥ózv*ófÓ-¤;úeÇtÅ/´G›vyTµTä ÷SÓüjqA3,î,ب„¼­‡tÅ} Ú7Ñ:ÈäÁÒ(°ÎÛƒí¢Vw&4=¢.݇ÓÎy8ó?„ÒÍÿ!õµâLVxN-·uQ.•O©#Œÿ^…ÀZzéGq=¿rúa³FÚé–[^)+ý•ê _8Öµ¬ûzþã:Š–dÄQÛ”‡¼Æüó.? „î¢%¨_ˆ¾ØvE„_I—ølV6û ùŸnîgÖGxs–Ûì×'Sd#˜ÄÉ`QÇäú_5±·X•¨CÙÖ„ý-r]¡Ÿo5:,‚µIß;ˆÿ¸EÊ âëÊè#üWú'~Ð~ Ա侖ì'ëºÝ7]K­Ò=èv•ÜhndN¶·Eû¢Ãà?Rˆä?Ù79þ#ØFcÔ>#¨Í¿J³@ÿ“?ä-ã–xù“uŽñš¹¼ê((ÓPØí$z-ý*1D},½Ó¿}F˜õ»†8j\&R}DLY ü½èF³²‰M9…O¹ËrOÖ”u ߀ã ñ£âñ7ÄÀvž!²{Œ‡ËÜ„’¨Qx&˜Ì(gOÈ©2r¨þc§ŸÔc‰ÔñCUÉ–Kc5˜Mæ,æHøó²ØÓÔ&œÀ;Ç0â¹ßŠà7XPÔ%jÿ¸Šw‹ÇñÝâ]³$ÝK<`2pª»ÍõøýøÒõèwS†Ø¿=†îŽÌj9QnîBD2µ†ðç«ññÀ¯~+º§[9‡¿ºéÏ¡'‘;Dp½oòé¿ÅÈ;"‹{`›/7¿Ú&³Ì´Ä>:£ƒÈ Ò£ßÍÈ ? &ÿ¢?_F|?Ì*%h+9µá¬>;òUÁÌH¼<>­= ¯ø½aÜíŽæ#c¨>?ÈñõueGêö"ÃÎ囦Àb³b;.³£Øe©YÈm²æÃNk䆸s!üÉ÷ r_’Ñ?ñ«li~Cå¼>ÛÑýî{ü'Üùm4§ìåä5é@;ü*-õçwX­=øUNô»?ÖlÉÀÞœ©ÉÁƪëægüÇèw-Û“ðç—àÏQ9˜Õm¬}xØ…£ð'À¯öš¹ƒø.ž›»wÛAηԼ¤Öл©™U†õî_eažE7ª-ŽÓ¥ñ&ëõFÛtŸÅî· ÄŸ·'ÿXn[‡þj“@Î*ãõ£Q Ñ ¬˜µÿ1ä©)õƒ˜ÞÀ:ÍÕ'@)V¯ô+.€^á³\è¾#ô¥â¥Y€ѺϻFDDGÜ[vxŽ–¯ÌuÄé"óϲ­gÚluk?œô|Ô-x_&“sß‘ß@NË/xo|\ Ù\­³Ê¸²Ûóà?Y9è›XΣ øÕ7k*ùÌ|»6Ú±ððÝŸˆ¼fã!À5Íynÿ± ­é Þ„¥Øô¼çí¢®Bt>©Hmý$”޵ة·k&ý|KØŠ~ð©{ìƒÚᔃÕÂÁL5[[Eû¯Ìÿx¢µÓK¸O扖'P7E÷ Óä…ÅDú·7ŠÐïJÓ|´‡ú*ÑK<"/ñЮ;¤Ÿ6ÁxNHXÊŒô°ˆ¡÷‡1ÝI„ûÖxHEâë0íêûMAÁ·Öœ-Kb Vñ<‘¹õpè¯ò2w¶½4“ÓÏ,¨æåû÷þøg1ýyÐIòþ#¨KËñœ·"ªhEœ¼E·«”Eˆ :ÉNaê¿ûLâiŒ€?: ×½Åì“„7{'•ƒY/«ªFüø„ ÇÝ2o¨þcŠ–‘Üxõ,_¨J½[ jó HE˜ùD(ó«Á7?$ÿ8†ý(ª~·„púïvG™Œ_‹`Sº€NŽBÇCý‰:8-Üù"´³7`ÙgóTÎB5Ñ…SÒóoõåEe9„~*ñÁÐWˆ}á¹[‹wÚb×òÇÜ£Ûåèn[Œ*ã1D ß`Z¦ðçj:È>–QþÖ¿=¼xÈ3Bo °žåh ÆãÕûƒ®|ßý vužô öy>«Oþ1Ý¿þü-\ÊN 8ÙÞ7´oqŽHEþ±Ÿ(#=?s ¸á7êHfYÙð:“Á¯¾Ù¯ˆŸ½˜ª‘É€ «$:ƒÐŸÃÚÃÝ)¤þ¼›ÌNžv“çu‘j§–›;Ô¦ÖVE®ç-yB6&3 †ç>¯š J}+S?sdYÒ,5IÜãÖZ}¶¶9üÇDUEÕä}Jd½¿òóïuœ\!+¨Î9‡ÊTŠo§¶=/xSEÕ‡úó+િ¨ÄæN÷åFbþÇ&2AƒÈ%•uOF+L7®Wè­F£9[a'q¿º~u‚þ‰»™_ÛÖÚJä1ó¨Ö›sd6™Ó}~]ôfèwßÈ|ø£*ƒ4ÕK«¤ë3ëE%†]¡—Iû,ÍXò50]¶n}âvxȃ¨mÓÓí?Ö3 m,ÝhâÑñ Õ7aãÀ¼×¶¶P{3ü% õƒûñçÝ©"YD7±(tw?e]Å[GàýžÊ›[%•a‰V݇òÿéƒØèw3¹Oæ³VAÿ« ÔÞ1Ñïîû©Ë WUu x;‹s>IåIQVßNO÷%àWçÏâËOîÓWìâ ^,«‹ì0ÇË^2ŽÞÿ‘}OSy•Š ~îsø§­ÖÓ_ê»kèCî}6FÛþ£¢YG®€û¸Rb]”Íe÷0ͯkøwA¼"bׂ} B.Êr+ÝÚ U ÿa’3ìCõgµ\4Æ•m±j«È†p_â“Å¥ ¿NýÇéð㉵ӃöÏçž©jR÷T_r.cV-<ùÈ”ã9™®æSc¸þgkîËüAOò¬ Xç%(ƒ^òÕô/ÆVÖ gî4?o¬Äĸ٭Rä¹à[’“ù´ÂÛlR~ð‚Ü—´ðçq@cbÅçÁBL&öôD¡„i²d' ýKömU‡?÷$RÈIìü„ؾ5ú½ft1ü‡7Š(xÔSTr¤'?êHdÑ}wŠU¡½<žÚ'°§¬•ÌKlž 5´é8é WRÂг:—î)«á±nKxªnjŸI_&s´²ZÀŸEqš‰Á“ªé?À¯ÎZ/àRjƒ¬ÁÃAsÖ‰úÁ—îl¥5ÒWÀ155ú“ç,3¶5U#-Ð_¥¤óì>{ëuµoP?˜’UëàÏ“S‹Y»ý•ý¥÷º+:Z>Ó|Ä+*^uµÈÌam“Wdi•–œí8zÝnÌ+ßl›ô¿šj— þc ž®Ý]BÎñ+g³ýU™Ù}~ýé|pS^#—]mQ.ùØ|HÆ>¥£½ nËÿá¾öÊÁ°>ÕaºÊ؟ѺÔ5⦲6oô·ÿØŽd>e:OéòƒV]WúÝW´.SR›û:ÒµÄõÎV®töÕ>¤0Íaë(y¶‹Xiš™x!âÅz=‹ûd¾Qÿ‘Àý™û††éƒ”úCæÎ1ÆFnáô/9 EëÅtñTÄ¡[Õñ0­òý‹<ðßQO=ɌΠÓ,ú&úÄxÉòˆñœŽ¾¡Y¾ï+ýõçM±Ès z«^ܧ²þ£?Ó¸Ó™¿ÈÆD$¶9ûoš—WøþY)øóÍÆ ÔQÏÐd¶$‚k*TÓ¬.7‘ÙÜdõO¬úRÖ’MŒàpûïë|ÿó­¸Aÿ’‚ÄŸN¿[º>Ø©?;û„¸¿ {oä{üGêPýÇ­8Í2bÕ×Äo°ÔË`¼%ªßr;‘ŒØ5~À›È¿D¨ýw{‹F\gâì»äDIÁ2ÂÆ¸ðM9à)-üÇFØé¨@—ƒ_9cKêFO¥¯A±î¹ ¹Ê ´#_dgjì—™E‰n™c±#÷y'¶âŽàKÏð“ÏR?xZ\þ~Xþ,O…i)r”oäý¹ØÅiΩ( ¬»(¶R :Çpúx´!C1 _«’ÆäZ0ù‡§–Õð•ÛÀ¯†£¦M…l2þuþ£è w:¿™üjÂKJŽW`Æ“ôälüŒaz@´û×Ðÿªþ#!a-ùÇ ¢—ÃÄ—T:Gw…ÆósÐ÷©¼¨±œŒç3øå,ú@ÍCôB^0ªÕþZ/-õƒQÉDãá?|©ÚžÍ•£~ð õŒc˜åGÿÄ|L§[­ŠS]1 <#Ìõ%Ø€æªùGDÑó‡»âð-Èïžá ú¼/ ó:ÆYìDõÅ–Þž¥:o%ó?zп¤0Øçüç¼§¸;9È3Ý ô»¥èBß= fc}瀆5$z­öÑg$ñôHÔ²}é¯r ןž‘àSÎà½N`£+Ê€³ÖT÷!žj‰ÅÌuT Ò·­;Lìø"¶¾c<5Ul?üR~zœÏbzÖ7®¼:+ú±Ã¬dˆGe@G™gÚNñÿñŠ?¡uA*κš ýn<äTzDwݲ'Qž”m>=¬r¡<Ãs¢CpôW3èŸXRVs_oW}ˆq•бÌ<¹}À¯¾š§­–®Ø0(=ñã­´®Åðç}à»#¡ȃÿˆe±ŸÂ› "ͱæ.üaJsÛìÒç“”%¢šÒø@Þ·²Â”£úRcêÖhØž*®ùè©#»ŠØÌŸ‡Yi/¿ÜºÈýû*½©:ü…Œø…±9ð ù—>vüG@þ¡Á…$rŸÓÏmÁC ²ÃŸç#ÿHâÏ\Ô¢‹Mb£ø "S¾ó§–K§ôŠs®È[ßÝ|cìg"îF}1bùЈmdÉ~jŸOÅvbÅq b“° ½d7æ¬NÒ‚e†ÿ0à,f…Ѥbþùfã"8ÉC¬p}ìÕåÌùË~5œüã7Pv§^c€¬¦þ‰oÐ_]–ÙÀ¿/ƒGûPñ‘Xe"ª_†ïhÊt‘3ˆEöqXŽ—B½æƒÚgú\lÅÛ< Úy1ys¢ÏZÄø3ÍJÔQ§neÞh 1z!S†Ú?±«( FÔ¤î)ÆÆGÄA‰$À¯cSÞ°Ëu0+‰žÃÕ/” !ÎL¬ÏÕ_Ê<(}k¡)›IU‹“a6$ÎGþQÝ?r½•¥ß~ã2œøf~{\ æÙ©J„áÌÅr:£;ª«»¬Z†»Pn-£ºwøÕ`ÞþäÁúû‘Ü%ߤsm0þc¾V”Üv%g?4%žq<ï²'~q•nÏá6‹˜9ÁògÓ/ö->}5XÃbr¾°ìŒÙú¦ ;œ$šËvŽBuÓŸ¬ðÈVbý#è£b™ÌE‹Zÿ‘å©X AÔ< ¬-ìÆc¦pů∠&åÌ”ì`7:âùDúó°nÜÄ´D×Á¯ºÙkÐ×–¥Ûú”v9¨};C¾ÃœXP=-ˆÿX-Rs/}Èo³y".þLâ«>Éüê ÖôSø|U:N¥†™½°ÿÞàCç‰FRå~xgËÜ(¾ýî@ÎoúÝÖ@ê?~§^ò•=ÅÐ~ôSMàÏû¡û©~píñ¾j& €ßT9ÀšÕÓzéká?ê1t “ª';™h‘é8ò̪J®Åöz/Rÿ±\«õƒµðýOÈÀ^4 ü5ó?>Â^= gŒhÏM/•—^#ç™›Þÿ1Ÿ+½†&ø"¬ümøî{Ìì7•oþpY^6w_o#½õWÐ_­€ Ö0*s1Ò#4Cï“uöòtVÀ–â=šB…cSlttóŒ)Wøþs²ˆäø²Vx²Ûì%ùVò›ˆÄä)ø8|%¾iÈ®7uy3åF#Kˆú«HúL}‡¬Š> ~Í›«²©Ÿ)g.7 Ã÷6 ry€ºÎ,#Ÿ9B.¶—ˆlýw‰àr× z=#h¤S©Qû¾’l5·™ÿ‘«|e¬¡~p£¿Ntq{+~fb¼pJX‹ƒÁøqZ!ô»'ˆL¨¢D°’S*ÌýcÞ‚èn0S.ªñVâCPÙ9›{= T«.OÀ}cÑߪ›z‰^²µ?æ5Ÿ ¤‘ôoXŽBÄúq`êÉ|d2Úiä³3ÌViW Û‹Ó›ƒžÊÇååZj¿á#E?”þ¨Æ£ì}"™·o^¯$¼ý-ÃП‡°ægm€¾F–eWýÀÕ“ÃßÂ2T ޝÇZ)ÍÑT/<"[Å{¾‰“܃Ve³)åAœöÂÖIÈR⨥ÔË8Ý& ïGàÔÍä‡}ÊIMÀxl÷4ð»ZÄvÙ¨üMÀu§ FÕ_Klô&ÿH†…¬ÿñ]UðèÈ|^OãžÔ ŸÖ$bðä‹ÁÄÆs%á^^>ëÙÒM4Cm[¾{q{I8“N\WF,¦Eÿ]o¦Üݦ?ÅUüG”§Áb¨>ä ƒÁs>Qm0-õ¯ÃüM<‘áÀà\ä Ó¨q˜ºçÉ~RYÓ™?h¢ûùÒÁ” ÕÐ’ÖhòØTP{À†º‚ÞÅxv.ˆ`‘—ð¶ÉÁÍ:©ÍXèAØâaÔŸ7¢;õÎÉ\+­k0üÓ­3DôQñ3ÈÆÎñœ^7£áÏKÊϬôœ§d ?q¸¹WùXóèM5€õ.딣³`O4¼É–Yñ%ѹ£¢ÆaåW©ÞÌýþ_øõø!< ùªŒò£Ì…Þ¨3 9Ý€íEhJ‚?§3ÈXð¬ÓÖ/0ó-ñƒ¯ü3®†*š ß½¢]~äYWy ÒS¾[^1?¨zô?I„B`5Gt×AÿúÁ´Ôž/Àê¢.äÏø\껪%èþkÊFªõƒod,0‡ÍôÐ'™}c¥aþàòÛTüÍAyu†ÞòøÕ«¼z1îNË"K¸Ã¾~@á¿_ï }qPvÇs8qîËSÔ̤“oúY®£—Jjæ‰üéz`§¢Gü]u€l®¹½‚^3_yÖqØL³1±\>yáû‚ÿâŸôÓÑøx?ý¯ $;¡Þ5èñaüÓŠiõ•zr£71Øið«lX×vê8Ûsc&ñÈ5žª% $1Í¥²˜1õŸúŸ{Aþ‘ˆüÅŠh¢699OæxëÆ`CiT.Øó³Ìê"ƒVü}ùÖÚ-©Ñá­¼g'¯ƒ%Žç³—§³:¸Ì~4@ÂS4"÷Îf® ¶2/ðª E^,}3P¦kÄú«™š.ŠŠŽÄyŸPîRÕO$¬¬$øÕzã…ö6ð>6éu°TfTgY¥)Œ~üGcr‡©äEUiP…!ê1ÕŸÜ¡“þøÕp2Æ$\em|= ¬*&úÊBìa¾< Í}O\Mv021Ùo +À³´Çe¥¶7&ï[¤`üGož·!r-Þhqg ð¤I SýAg¡ ¥^’Ýä"ºH´ì/3žkèȳ”­õ}úïEØ—ðꮵϚã‹]®¦ÿnEòkd¡KÈ{JoúåãœÇÛ寇;×È/õ,Ò²Æ:R‚_u!ÿ8‡z+)ó?0Cå»mGUzf*sšvÿÄûdÊÞtzÒûÏ£qý•7J;ûhƒF~™þc }6_€J6µÖÇÇ;úiű®Ã̲&£d[ÿ¸É³èË3h+ó‹ýOô»ÑÔcª«W´_ý^_Û΢¤WŸë¯*ëÌõÑÊq¶÷*9a?Ž€_ÅÖÒÿÐáÁõ›á½º¢¤Ô½„JXãa" ÕNv¡(@5Û]bÄJàBQÇ.ÑÃÆ|a×øûóT°ÀEõ¡ ÙW‰KcU™ãŒÿx¨wŽÅ3Ž øóI"K„ð«ëÚ=p˜ L½áîêF,˜”\v"±\pœOØù(X¾ÝbÀQé;¯§²é(úÝG ";AM6ÃZ´‡G˜KÿöRp,Ià¼ýÈ?æ€çì×¾ü¸D¨¯dÑÒõ7ÁþžÁ—Ù½pϾ‚N >naj)ÝÝwÀ¬/ÛõÈ?åÏ-:¯¹Àr&âËýð’6¸0ëÃÂ'ž$Ÿ“Õ-ã !ûØ çüJÜ Zx}`R©Iõtdôóæ)*‹mKAÜj‰šº0·ƒä4£°Ý]9þd0Ô%s6Cbð'‹•jz;±•zˆEz°†ÁXÿ!Áþ£ ¶ÓO‘Û:‡ "Ȱ§K&ëêŒÇªdÜÔýT¿0Kцã?Š‘¿ì#*. ïâkéA”@ËÍU¨ú™™Éâ2%h:ê-øÊ¼òx,þg:²õswÖ‚ˆÂ›‘=Îaó‘;°Ô“ìÞ äGˆèwS±•éB[éßÎŒq²…”`/çx÷VàWóHšW¨ohµ8ºã°G©Y¡'v-€u.‚_==‰˜-‡¿ÕÆÑÓÜ%Ûaý‰PP[á vvd5f˜üÃM|àβ{Üô†ÅÙ`¬U› òÕ›óuüª“ùæÓuü º¬ l­8ÖÖxŽýäœô”ÃÄçl¨´QÇS7K6a ¥6¿¶(ît›Š¯fð¦Ãä1­ôÌGlAýù:*Tçí'SY#t6¥€ŒÂr“1Žþ»ãç¯õWE Íqd5©ÅùÈÌËüÚiÖPú'Þ1ŸS™²ˆúóh?¼ÓH<@¦¢›@A¬Ã«]$ –†ËìWW€Ë÷$™ÌÓõLD£R0&õçuÌô 뇸¾c®ã;^)¦uÿáÉD‘Á`[&ç;ñÐr”•n2§¸è<ƒÿ½¹˜ªáÂm^Ò?1ó<ýÞ.ÜÔjní˜VO_¡—Òj²ÊI%…v€ ZLÍí7û'¾P*ƒ_¥3¢R-LžxŒ~·¯zžúój"(¨W öPßagmhÐ$xêæÄ´Ý‰å³ª'˜ÿÑ„:¿ÞÜ xdÏyõ"ýÿgRÛfOT¯OœÜ–¨¾#±ÍÆ*žÈ¢XQ7t“DF=lU@xû} %YÀJR‚‹\å÷íl&=~d-ïК#“ÌlD3=*j‰ÐþðVó!ÿ¸)΢1±¨œ»½_~Õb©ÑŒçê¶Q@®¢O;P'7ãö3¬éŸµ›jU8ÂØûgdZq@a²ÁÎ$#6+ΓPÃgîe·ÑÜÔaÝ#z”Ÿö¿z«LT7‹âìj~áþ•3þæ­=:,bÿïÄÄö¶ûœ‹“àóÓ ‡Xª]úg;!>ÆWËèÉÑZeÁKæ$“? _Ï{‹øÈH"féià§‹N"{ꄵÌnÛ‡ª&?ù$Gú†÷ n0„h¤3Ê—S?øÓðçí¨ûŽMþ1V–ãIïÄqæÁ¢§#®ô&ÿ8KDz”é~©à¨…OÊ.Õe•Ÿü ʈ~aîʼnZ1AVXÍÏ¥æå9ý¯R›i͵r,ùÇ þy0ÿÃON4¿Ó§ÀªÔé]$ÅùþªN µâC­"Öïw‰ùÑ@8©/L ¼E¿*ÃA4þF9»£[/8ܰñö$Þdç‰Aïƒú®ËQ_èÁúÝ3ÆY Æà ý7Ò9k½LÈüÁ•TZÂ’ƒOñ&ÿ/Þïs¬ýyN§eˆùµ á?Vsǯ÷C¥]$5â¡eíÁü¨è¯¢Ž•Ôz_¤¢2»û zWÅÜ Îè #tKö"²‰nÌunî†rE "â àÉÏdÞûájƒ¦}¿G.¸À2^tO<«rÅœGgý Ôm\âªmAMÐ _½ÿáB'«}¨MÜuóŒ2–ˆ!ÍnŽrä/Õð@¨¾C†ÔÖâ‘ÂúÂ70“RCVí)ÏÊy‘˜HìŽ3ÿ8O¯=b ^~ñ^€8Bþ1˜þ»MÑ ¬£;}a&áz:fZɘ*õMzÒ½¥¸µí±Rlžã(c2à?›’ã< ÿ¡…ÔÍjçõIqûͺ ×¶’S—S;©µÕÇèe´Ü¬yGI¦ÝÖnhÑõ¸Z’߬?¢¶FOY N61OhNñA¨>S?R“Þžy³¹ôìšKíÚÃÏ_MЦã?f‹Z0¡è¤èÇœX«EÁB…Y¨€Æu•6æ µxèˆûëë`ŒÏGW¡^£)ˆ~ujTVë3?[_Š8x¶H¢»0Øðײ¿zN‹"Rb—ÓÃKÚÚÕ.àW9Á›ytGZA–7òÇä¿öpg•â ³B’ƒt'£ù lÏÍö…•îVA7x¹ëd¬sTÃK{þógVL¦‰xSá'SâÝ"c#rQfÇåK±òÛ±»vý÷N±IO¥†×-×^ì2]ýNþq—8k(|E"´î½áVÀ’æÂÊí$òÿK¿Ûü } o–¡ -¼Žð)ÔšzLÔÓqÉþÜÈŽ¶¡ÞMË1ÝÄR\3J‹º˜ø2xš‰°ôý¹ÒÙðêÅaëÂáÏ—)åôþâñä0"ãäî ‘CXk!XK8·¯9çì!/iAÿöÔ¦ª/À˜bGÝÍpúsÌ\&†rGM=.îš-­5øÄ°-¬VrÇBÇë%KnÓ?±?¼ÿ:üè8°è0¥K¹+L™!DÇÈ¿ï™ÿÆÿy`\÷êC%Ç¿­ßM@ܨ­ªé3ô²Áý¯>*Ù´šŸVVO«EýÍùƒ±Õºz:…l0£Â"ŠÞUM¢=¢RbZì²zN2šß9?Úžô"?Lë9c>Óe55–vGÔƒ™~ŒWÉklÖÿˆÐŠÕÃjsÝ¿ñUkp§–r/v$²ð¡¸Š'Ø+ªi¨qϬ»îáŸïõ–UÄ Óp ÆnN±îÃNÛõ~ÏP÷|¥6»”?QS>1ð—;<¤\DµYDO©J¤ßË”èÏNm0§ÛFYlÅ=²å]ØÚÕ¿ä?êÃì%ÿh„ñGÚÏ膕(‡}ÊËŽm”É¿™]—¤¿ñ.=éOë?)KÔô»—°gÝñ:éÈzc—W¥¨ÕúƒÎIµXñže5ç1€èj.Ï”sµ½áœ¾|j#øó@CÈed;ñ ¹àÑ ’Cn5Љ½zú—ŒD7´ÿÑ›'ÓýÃñK•¢úqvh"v(®| :UŸ“œJñÔogŸåˆû§£éŒÄç³ðrsø~u²]¬SÃ*%ŽkD¢‹Ôè}½`TÓEÁ ÿáÍÄÚ„ÔŸO„óMjn£~0;õÁ5²Á­T…ÝX‰ÿH,ÂÖ²¶Ð^ÁŸWÇOo#£ÙIMÂI´?A21³fÑï02•n-¾¥2øÕ <^Aê/-5‡Éicd×\(µ}2k¥ð~àçhVaÍ/Ra1µÐ ì};Ô§Qð–£µiO(FýGnVÜJ5â:2·D7IõR¡îÅ6"&gú.Wm8'»ŒûrÕ$MÍeÔÞÄ––¢B~ Vy¡OýÇÙ/=€léï~ ä®hˆúÁ’Ì”XËs0‹?ýlò¼L-l†u¯Bã:æƒC6­Œðç;àš“Ó)¸ ¹ã;:Ä4Áß^Î{æ±rX3a‚¸fI̧b(þ#7õ–;PÏåÌ-µ¢:ÎZkÑc¥µŽÂ¦6+SùrüÊî_Ò^.áY®âÙÈüÚ‡Bß\klqðœ~t\Ïbm"çx â4´Ìî)™Œ;]»Ú[…èn¼IÀè,6vƒº?§ÿðeþàz1€o”1†góÝ|»‘ UeF­~.¿UÀ±ÉÀüÒTøì«Cw“¥æEj€’Íÿý b»ßyÄÿ½ÙÑﺘ¡·J65E¨û"â;IÀüJÚ­•¾UoÚ¤(7”ôä´ôzLæÙFd†ëÝ"«í‚«" ‘LDÛôU«£^?÷mèà^„¿6Ãñ?#É?Ú£ß-FLég4}Dõ<ó£ e=!*‚cïÖC?a?[;#}Tšê«aFo –hBa;y’ouwc$v8Qx9jÀ§‹¬º‹ÃûÙj ¹õG=¹QjP{_r£¶ AI¹3Ça¥ãTÆ$y¹'š„È¡¶ž²GœEt4B© oj—*~új xÂ/‚_„Sj…WHdlמül¡ÿûz --ž¦&öþ*ÚÌää ‰àüñ Q_ùc—bï=©Í>LßJ¬võg9Í+¥§JüÇìùV{EÔU[œŽx¹¨Ñ\VfEÛ#y`Ù]ÍâÚkàWgÂÙeð«Æ¼…­™> ÿR¿ÑÀ¿ž’Ñ$eúÊ+l¿­Yž„Æ«1 ~ýÈÁ4ö?.ç®ÑˆF*0´àWö¼À:Ü1 äP²o°ªo¦d ÷¹þ½h¨ç¯¹¸O®Àu!+Òñã.óÊçÁŸƒÝ8ÅüóâÔÌGm{˜úó«àj=±Î½ÐB_Â_ûÂÔ 1?ª”RM³?ü£?(’&biÑ_ÙÓ™ªÓw·5×JE÷×Lv-ƒÂõU‘ÈÃJâ?¾¡¿ªFæ`«ù†²]{‰§¼MÐÜÉüt0GC©°¯ OÞŽþ%¯a@VÒ³*üÇ ¶ZV[”gÙðAÔVzЯ¢bˆ‰ý¨ÿx‚š!OëBøó¸ò:C ÖèKEÉ+ó.™à:¸™„Žkæ"Ð1o+?:qÍØò=ß‹þ%É©ÀºàôûЕ.ƒ¹Ç†ó|E5ÎÑM«,LòÊëfC¼Åk«c£•Žëôä! )¾ÑT¸jÉÀc'Ó›%¾L&þõƒ9Ô…jGçð’üãßÕï&dþG~í V[¤—Ưî)ñÉ>´§t;L÷›úÝjýúÝôäõÐ6­¦ãZõ˜¾›n#*õyƒßÁy‹üòÅB­Vp‘(íò1Z3ۨúFõ°ög`E„1Nwáxÿj¹¤ª/øçLã ØøØ’ò䕌„ØÂáDfÍ@õ«‚í1t×=üóojß°ƒMQ ÝÂvz5°Ä™° ãà‘ƒ¤—帧.ŠÃ¢øu‡ùçÊiqYœÉÐgÇéjbRC¸X¾1¬êìÅ:ænŒÂÎF1Öi?ßXðw:h%9_­@ïïÁUÇäxS±»WÔI$Bãó¿´vìÍQ˜Ÿ°™Tzñ÷Êõ°(É]? {>´é+AYØùLþ½po柿Ð,á﹤tÚ¦èüöRæÜ5S¡=…:¬ùÇ@®tv¨7Ôƒ´–Cìc×F†ZñùÇœ5ß5 ~ùçKøû'¿5ŽŠ·ØŽÇØ¿Êø¶òÌò¿JÊÞßðθFG 5Œÿh$"üûÄ;£à¦'É?¦3Á{=º¾ÁM磳í8«üÇ|òÇäY¥©öyJ†ä£ÒQá?šÀŸÏEy0P¾1†‘“š"²;™É?ÊÀïƒíN‡~÷üGªã©Ü  ¥7Gº…ÃyòÇç ÒWäšrBû†~I¬ßüHþƒ%¡gŠ„ÿèŠ/HF³=oJz—Œ¥‡n-˜þKà¿‹©øiO%Ðrÿ Îó×þ<41 JÙèwÇàÏëÑóª ]èEÆtÝ-d /á¸R¸Ìjh¾&ÛŒA—õ»Ü5öü(ÓØéô'ƒûúõäÎÎz ýn‡YPC4V^æ(<å5:˜L‡¯Éd)d7™=6‡^eŸèÑÊØL”åFþ‘ôÒ7 jT³öÿñïêwã¨BËA½`)Ýþ¼XÈ¢X´n'=2±ønèd=©y«Œ) õƒ‹°ÎŸ‰¦¹Ï'"OO„aa®tsí!šˆføÅä0Gà?žÓÐJ p›Õèt|é/¸Âº†mk¾ÇFA÷ͼ âÔGŽ&vH­y†Zñ²Vxþ#ë Á§?Á²¯¦¿È}æ×´¾¡ŽÍàhB]êŸðSô:£;úq,þS|W¦0óëŠïÄþ¨§'‚8M2.Ë­æ³³9Dé-õâ¥-_,ó"2áLòx+» ˜ [|E¾oá¿j¬4T§ã?:¢¿ò¶DT£*GØ=lvдmÖøªäƒ©?ïnÞÀ7•3·ËêxÂOäHÉfÃÓy÷ u¯&ˆÐßp?%2?0‡Í’1̦Ö}+ ý¯VPñ™èþºu¯tÄË2}ÓX©õd‹¨/šFìæêЕþí:÷n^¢½2½H.¯šyé \ß“™J/,~M¦– ž¶»ÿ‘‚ í‘ÉØŸ‚,'.Žjwúƒê*}Ý ì;ª+ÝWßšåè´»…Ìt º]-øŽúó¨ºÊZg˜ÿQߊk-E·lÏÌÌ?ÇhE¾Y@ìvñïEnuNˆúÁwJ15j¨û,â;ɬ~PójþZ}&þ#?«ÜQÜ´ 휖X­¥QWF|)~2®ÚK¿Nvì øÕ9üÅõ¬þ”¾¶YE:2œßã?¶hž à³D9ìŸ1Ínõ&ݘªP[º¯’~ü¡ÆŸm7™z†ú¡T<\6F`?¢ãڳij‰Åبpó Q[5FäÑ#rÌç´Oðƒ¥a:nƒ0:c_sÂ~¬‡ai}iMÕ%QXLûåµ¹¤ƒ?÷†QyL¦q^Å {ß ?&%¶¼¶ˆº‹1¼WRcƒå+6ÑŠ±§6ÄEðnø£TðdÌYƒýÇ!ž‡ýXüLì$Jøê¹UW%XèsE£žÀ¯ºák<Áøž£zσ·È _ÿQ ;{x1XÙ]ÞÏ+.é=Vk¯ë¦6ÔcãÕ>‘¥¤Åå<åGâ‹&•Ù¸dB°È-°ãAñ:½ÈMÞ‹¼ Háõß] ~5V—[ 뀟‡/)Nž”Ц ü‚÷Í ?|–ld3(ÍKžõ1Xå¡ÜS ˜µö‡î «´fp; ñ›ˆî3É;ÄsÈÚva¹R˜§Árî`|e Øø—ïXòE`5جÈ0*aùÆÚX×:Øèèm}ˆ‰ŸR„Xÿ!@Ëc—^ãÝJ™:QT‰ÿq6b¿—J ˆÑ R½tÁäg«É®_äÓÝ…vLðg¢ÝoXQ»C×p¸äpB«e »óáò¡ssèúvÂRx–cžqQ®!o©‰?ú oQ]ŠÞU½¬•ø6dAÕjã?îâAÖƒˆu–Bôoo«ôÿHÀ÷¿sù^ ¡07ðË/R;ãaî¥R/#¬òcê+’åøÂZdA ݈«£Ñw¤,×<@lsÞ|ו=šý4ÜgßÉÍ á%^Ïd=ê£ÁÈl%Œÿ±zôÔž ‡¨Ž®×ž¹¸X~¥š~"õ¥Cä]Ôú}!¸s7ƒ_¥†ÿð¥cUüFU2¤tÌþøLï°ø§°Ö|æ×f´,ó#×8;i?ý)R;œþã´:üjß™IÔx þ¼‘cõçõè~²Åm•ù˜ç8 ¦XÇò—ËaY¤µ¿÷ˆë;1˨$úuñïEJu±êºW?)å~s.“k§ÉÕ8Z.ð«Rúz½¡V»tšþ»þÚ:-%þ#çoÖë¶ôï÷È ^R«ëSyòî®T2üÇ1øúøàµ§Ã"—Åë%Þó«mñ}›ÿè¢!Æö%žŽE4½ ÚƒHÿ k'¤b|œÍž_îpºrT<© ÂZÝÁ­§ªÏº ñ‰åq£4öïNpý`Qã¦ý+fÖìÞè­Á¯‚ %ƒ1ÎÂ=ûu~j¬âWžHIYDßó-èá‹kLùú“£NªŽPWÀŸoë F‡L­ ½Š½Œ Ô¤CßÔŒüã4ï·ˆ—9K`+Tq@ gÅljA=ÙFL¹‚5ƒ®UçcT28MzE]˜Ãé=’QÎÂ[ ‚qI n—3‹Zû‡?³”Üú0±ûlw«Êžä‰ÇèÀUžšþг˜ .}Þe‡üÀµb¦y±=³ók«a'ìºkE£Yêì}9¸ÛæUЯØp½>ôü»Å,½=2(Ö_ .$¬o§&"–Qõ‡L³üG$òŒ¬0ÅÒØ¡¨—¤9OÎ1ã2³" ùÇ æ½Ö2ãòµøäš&u gSˆiÒiî¡®ô ­4ÑŽ]IŸŸ3„mî†E†LD¿¾<Ž^æüÇdliqb˜ú¯<Ç3òê¥C­×T|E åœ@0ÉØ'Wâ?úàÈ1ÀrŠÐïk½5ÝA}ÊW2¤®d Íñ¯ñ‡7ð°;„KµWúó¹pb½`'…dCÇ/Ñï6·)fŽ@¿»ÖJD,þ‰þí%‰ðý©+,F.×”Ú˜ØÔm´’ÜO†«£åSe“v“«÷6­€ù¼º%ç­®u½îpzÌG-àMÍýy4]›ÍuÖ>³õç¶þj%çp°ä.ÄØÅÿþÓ þü5YÁ`WÐ÷‹‘ªâP¨ù &žI“°ô{¨%|d™àcKÑKåæ Å4£¡¿AÞ½•hP5;ýÇnu³g:á?F+_·ÌÎŽÎdUàö/›9ñjÙË{­øŽêt8›K?øVTÓì5 IDN5š˜3‡,"ÂëòóÏžÿS3ÐÓ®¡óÌ| {|çg¿÷ž¹àÊi×µú*½ ÓÊåž’ýÕ5- ú+7uÿo-G®+<È Y„ŸVD=®Þ¤I_QŽÊîÆôSü×kyÒA­ˆ¯ž¢(üù)Ô¤%™â€¨µ5‚ýÛÝèÓ2XßN,ñQü¤!O_%ö¸›²œ$PÔ‘+*ë™™uC°ÝUƒc“ ð'©¾ÊBLMŸg£%ÿ>€ÊD1nˆ#ðç[~yÌוâ!“B¾ Â|«5›·+9‚»Q+åo¢Ü¢õÄ@W´d¿XÑMËÎ^àÉngËCɬ’ñ:hw X‚õø]Äa)å.®Õrqâ_ôßý¢¸«¨ÿ8‚jGîýU+£ q|Iì]!޼<Ø/ŒŠ7‘Õ5˜UDíÑÄ¥pýGv5¯ž•üC—^ìÉ‹ß(½ÎŠŸ3år#¦ª¿½ª f0†wë€ÿˆG¾“”ç÷q8üÇRú'λð¹3ÐÆáÈÆSÁSLÁv¾ÀS¤ÂÒž³_Îg–\ÊY±û'6‚ÿøHÿ«°Ïîl­¥øƒóƒ¨}Çu› h-Ùˆ.UîÄÒq±QñÀÅç€}æ zÂÜ/"¾Oˆ–or˜ëÒþC’&„íÞOV1 ÿ: öü-ï0,òEp÷6T'O–ňñ‡bí³’Ü¡¾¢üGs£týîM­Gw•tVüÂxrBº¾ƒÖ»Ãqt½ ~õž~‡^ô›ïbž#?Œ~õ×ù€ë]K·'ü¸þÔïÉÕ±h#¨+_oœ£«Êdú·»ƒ‡]b–RZ+ÈœfµáXÿÀ&Þ$«(¿áGGøe¨Ú2Еc6Wº« ÐÕ Ç !ËÍÂS›Â|dÖ£{Zz¢DéͪEþÑeÓFú)ÞÃ'ïî Ü© wæÃýÛ*ûµô)¯‰2˜ïÅ1‘OÖ4;“¤·þ âŽÖ“cÞ¿°eõ¦u´%ÉÂÙ”fgò-¢˜èâ<Þ~ê0ýH€^d-ùQTñÆ8nvd ƒVK:´a…oðç=è‡õ JW²#Íz+¿á­¯ç±A\·;ýÇ)uþãâ‹aÆŸ¨Ë¯ÑÁw¬5ž^‘·Pe3‹Xm^ðQè/ï ~UEW_2“W<‡Iù­™àW†Ì,޹.ÇíUòWfûN© þ^_)×Fã¡¿ªJ¾Ñ\_Šþª6gû±’Vû„¢7¾nj1Ôƒ®À«tjy||Nò‚Ïb4ÜÐu-ºÙ˺¯èNz*Ü«8¯g–S|µ‘ð…£EqlÓIê«3ð¼úåîVî§(@顯Ÿ­š9½ýôX©kD M@KšËÃľ ÄBðËS¼Ë=VMHÍj鯂´¯z\X€XD¹—ÑoÚdÂrÚŠÈ?rÁŸÇ¥þü ªœ_OH P.¬'CþHŽà RT;Ý™8~™Q•ø:†®¿„ HhÌþe˜Jà䇰¤-áK\uFy/¸7ãgøäïÆ:ž¡üËŽÿÈO_c?=óOëÏcÐ?ñ¤HˆWë‡Ý D”¼ª4Þ¨1}ðKÃ-ìÃ,Ä{¼#ÊŠ× Ô…«Ë‹~×ÎO®áêÀæ1˜sAF¤ÊeX`/ý¶0–t<8R?vž€^jéy~‡ã?Ö*5ôµb;çlÙ@:<­;±Ápø†)p37x®Óày‚h,Ä~>ÅçÍÁsö$3+C³Q ;éþOøóÖôÌJ>ãÁŠWÑC¬À†-fž_vjÖ†Y»ÌØåtfs©,A¥\|Þ©$Þk‚Œ"–éj­ÝŸD}üÇ$`›ñ™×Œ9°»1Xcüùæd··îÍW15¢þvÖ¬—ª-'£=.¡M õ¼økÕˆtΚæ†3éB.ýUÎ$–4šJ8Õñ V 5¬tM³/6936y-õç¶~÷•}/éuC­W+šœ'â1Su˰» r'}³š™ã˜—u-RP¡ÃVws:]~ã׺ƒþþê µ'ûy]W¸X³*ôI[Œÿè…÷ ²Î‡ê%) t tºuà?öYó¬Ä°o˜±‘;ºÎºFw©ä3s¨~Ü ~ÕL‚á:àÛÊ=íÏ=lmló´¸%ªÂ•¿ŠG[_{í_MýGZ®ÊD:uÕ¢Óün:Û/C¡Pƒü-þ¼›óx[Sÿqož—»` Õ¹åCô»9P™¦ëúó"ø•§5Få63UFXµñr­—\ãxxXoºcoA8ßé?Ž©[Àê»b=†µ<ÏÌ”ŽjLø(î±™Yï™K©QqC¡Ý .©ýÛ—˜DX©9¦ùtÀ þøŸèw¨KÕÎÎ3óE©Dç‰ÿ­nðuµZk}‰Þ+8;8¤$Ðîh¾L´Í¦eQ·þÖjŸ”áô¿Ê†¦ÿ³˜Býà5V\ªúéۉ³á?êþÒò…~»Ú|â­) bai–‰é">}¿>‘yŒƒD,ãÍòçEàaêžàJ¯¸è×oôYIÿv/ž+{ÈN‘=×tTÆÑ,?Ñ^èi°½±@ƒ‰ç?ò¯ ¶f8[_¢êÜDæ‘©Y]-zPgú¨~ül³r“ÜcY¢SŸñÞ¸>Zh™f%x"Žð”¯¢~p Z¯lðç~\"ÔWhàNZò÷9wkZV‹E=‰b×»Â2?'÷XŽÿð2³r)ÃC¬×Ó«á¡Mö¢–:Cõ%È1lÛ¼ŸÕ>¡Qª JU˜j’FwÐ¦ÇÆa<ÛSŽj§¹’WÉ= 3;lbLÙÂ, _‘Ξ3h.§ÒÅ›üc?ú«¨±ƒõ6 L›(£˜Ýɦ‰j!üGSj›ï  kýÔW–y峄£,ú·Ö(‰2ñšÝ~x‘tžÅ«š\¡Äf ùíÎb°hÉ·œþã ºU¿[6 >_µÝÌ ¾ƒ³wýƒ™Ú*çXDÿ’[äkäzªÜÛ3}–ùä8w¢;þâ3¼*©pœÿ§_Ц.R]½¢ 5׿ݿ$¸Nqm™VDï¦ ƯN¢ß=©­°tªÅÃ*äÿõa¼U²ëSé´´¡¼ñE¿ 6ÿ±•î»Az 1[áñ?ÍÑï6%ÿÈÊïm Âg$V÷Ò¿¤ŽÑ›ŽŒ,ªgû_åVQ¾{z¯Q—²£ V²$™9?BýK.k'õ(ØçHÄÇ@­Ê‘Í”Æ&5>ã?nrØUq§È’ê‰9¿<æ…Ê#|ÇðÕ· g‰gÀ".ÜB–[DÒõV΢B¾) }øó+Ѻ£7è‹-½Ê‘º±Rnò$Xº¤h>ÉÍD?ûx&bËTÒ¡«hUþdÍxtÌß-rÇâíñ’YѰôà·ÖÐ)8™¬h,ÁVÜ'“ðæ‰°U¸G‰ÿ碋öÒî„s¡S¡¿r°«Ôà}Åñ‡ñUðn0"Vb©Îè#ˆ_§q•:‘ËdE¿›¿õ%ÿ±€þ%‹Å^ìóZìOnù uRŽÖ¤"¯±·O6yöóV ²ü ¿9 fªÚ„”⺶ÃJ5­((fòo2Š’ìè"‚ì 6љսÍÏ3«ÍKS> Ôâ=¦rVË[ðçMÅ‚0ç°ýÛ5îÝ8ÄØÃ‰Ú¡ð€=O„÷™j:ˆtcñá Z™Ñ8îT\›÷ø»£œžì´°Z{¨•£3Á5î±l0>ãáÅž‘Çì$z,G’$u˜ŽŽðµ¨¸¸ Údóû÷É>¶s¶ùÀ)C^”ÜÂîùò4üÂ_Æ ú·{ƒ5ÍÁÜ`2{)ê%÷[KÌ™r‰©Ò…|]²ºÓë$ùÞ-þ ÞWAµÌˆ7¸GŽÕeQúŽÜ%ÿÌå˜ož§ò¯:€pLµrÁPß…Ilƒ· ;³™÷¯!£®‰•%Úyôw8âL¦a,îÌ?ïÔÀ’TØ/A›ÆqÆZ‚î6 ³kW2e¤5uíçA§SMÙYz2— ¿pU×Gù o^‰»s1Ó-YŽ ¿ L©Ïü¨#ôsüJÊ9ôßMMÇ–môÕoG‡äÔðßÈÜg£~ŒD sÂé?¶¡ß=6{ š5x—íf=Çz­Îø÷f#«˜Õ’ü#™ã• ëåyTg=8ž¦"ÂlÇïÔ€?/bâIÈ+óŸ}B]©6pÞ ßÑï&t~ö{ïœP=­ff~T9½´žœzAEy®”Ð^Ñ¿äëø·–ËÄŒa» up KåE\fLU5TEl*ó²O‰ø’Ó¨t£o{4t8c™ÏCÄPªëhô|E°¥suW†ú¯ÖM©ždrÑ>p÷\ï‚ÄIMy¢Úғчxä0^j¼p3AÿĈè¯nSž †71hÓqìf+lr ¬û)ð«^0Õ·@HTjŽv 7Ñî—׿¦òNè†ÙµEä}•OzÒvä.[KýGAi÷ƒ?BÍdò0ÝX¤ÅýÅŠí´X™Þø¡×ø´Ì¶µD§8”…A!}ð™·ð )ån¾¾€§"ƒúî'§ï¸²M}$ªÀ%ÏÅšî$ÿWY¯&>³ ¾hXr2¦ýœÅ5ø…Ëü“" Cl ·J%‡š_’Ÿ=G; kTŒë¸—¯4Z0C<-ʦ¾TB,-ë‰Íq§ß:Žÿ˜¡¤ÖŠ `øóÑC¤ÁŒgoíá/&Â$†‘od§Òm ª'¼«'v`0kvà¸Çü(zÿ÷ÁOÕz‹^ø3>c>–è:ùÇ rÉ­ØüRÔÂyÁ´¢)‚ÎÛ¾>ƒÂ ¿‘Ôx¬Os]Fi0¶­ñ– È–È9dƒ«åGøg»ÿÕ Á&(Q øRSš}¥$?¼‡÷Ø‚`: Z1Í¥?µwÈ"OZKN'Dï ‘êPýts€-“ Ä3c¿YÜÑ‚,¦œõžf¯:еä]gÓÿp˜•C1uPÑÄ[§©–ð­ÿðyô»[Ewîö?ñpWÄSøth¯HŸ‚GôndUt+ãÕ‘‡8p,ùÖÞ`n« üóBì*ÓpQ~vDï‡2˃ã¿J2‹H7ók_üx JF5’™,%-þ¡ 8ÚvÔyaŠ.ƒ+ž3z wú'΂£-UžýOÛºNÿDz´?.7AqÓÇ‹#\…•X³Œ°&Óñ ¨¯[œD–Í X“µ(á¨â?fçEŒoú5ì¤âüZ Qÿ ¾y6þá>;˜;EOrs?]õÍBæ6ê+ÐãÞ.ž{™™ÄW&6*‰•a®K[íQk ì½ Ì0¹ËèßãA<ä ØÙÓð3én±„Î*Q¿à>çmeoPõüš«ÊË>úKZ)|³/ñp62”Ä—鼸‘ÊõcÔlµtú·§¥¢JfÃWØ\×Xòžõ|ÿ<ñB>Ý¥G²×K~‡+{Tm÷ÂN¹fº¾9”ã¹joº’u,Ç:Á¼6TS–ÂÞ_ÇŸN”w`~Ö‹[ö2Á*)õÔåÔà „ñ Ò«öR£“Ç4I­è§å‰¦µü÷,&kÔ4¯À”1·ã)‡ÂœBÇ[ˆ»ié?Ë)·•…šÝç߇§T7“ ÿh"ÐMë,|âø>øMä4§©« ûsÅ,jM4_qÌc˜ïØ—xË‹ü£†óŠ4P›é"WwÏTIAeæÂwl†—xj&¦ö#…ÃŒé•ÙÓµ•ñG3 øÕ;lÏìC,¼„KµG]IÿÄæX‰DŸ7Å3²£•µÊl¶x›y%p}øó@VmBy‰,¤ }ç7›Ÿñ¢,ºx‚%ýŸèwã©óU—²à½òïãWqÕ/àWÛ´tz_¦sØýKn+QµSÚ-PK¢Åú¡Cóò†ûâó6¢KŠ×[‘^ÇÏQ¯¡Ïñ ‘T‘‚úó2Îëîa¾ØHL9f¢Ï~u1Cä¤ÉQÑÚÒÞ„µš®»üh˜_õiæGUÖ‡€ì3&c¹^‚8­¹|§wC-t˸ –öróE¨~ðŽö˜i4UÁ¯â?¼à’wãM¶p7r7Feq]ÝÄú_óBê?Åatª¯°…÷Ya5uͰ¨“¹×“ÿÄ•+Ñï6į6£kup?|RH+Ä^:€¼ß@ –O’ mk5ã2KiÏô!"÷cݶŠsz¶Ÿæ1éß~F”’Ǹã[{ÈÞ‹¶àWK¨&I)S¢ß-*m•ðâºèqâ?qÅJíåûRðÙ¨› —ØÁ‘œ%_«KÝL\ð«ûÆTº3½FµŠÙƒçÍHTÕ½+ka~†#IF½†n>‡[(›¢óÈ©…®h?«çŽØFöœôj$™êc9]±Ý“j•݉_Фƒÿ®iö#‹È‰‡›ŠþÊÌé8w~B=4~\It¨Ÿô2ƒÌ‡`MeÈó®Òq:ãÓå4ñØy)•Õ0û­ÈFç‘õ¤Ni>UzN¶6Ž~‰s˜4›Žfó?™—©‡ÈdúÐiqÙÎQÙæ"­áî\ï¾â¡áÌÀ§%4Ñ» ºæ:ð i¬QÄñ=Á›â‹ׯ&»9ÎÖhÄr“ÏHsxÀ*‘!Äü¨ôæ;' P‚ÆLùV"S€€e†A©ÊìÛ«f7&§ì±š êŠ ?߇]vƒÅp3£Õú³‡ãDWèTýÏ÷2ÿÜ[t$¾ÀŸÛ¸bwÌDV×\ÎiŠWëãXê¸cÅb*È2™ÒÑ ÿ9}kò$ø•7W·4ìTñ{ Á?ïþÿïcRø>N„ÿHëüì÷VN¯êZum·VIïª îNu‚ùç[´5ô0ѵäjx3€~þŸ”zú.‘†å¨X˜·ú9*تÛuªuú—äÔJüÖ>§kã±!óDnpìF'Ñ@´gŽÇmê =˜˜ÿ1W¡©ûÁ?çÃ(À¢ì‰A†ëCÖQ™\f ˜ýŸÆeaÏÁ!Rêa´.h¯ôX 8öŒ¢<Ñ å!Tkàî‘1=婬Fäì/΋ZàÏ*ûÐ_©`F ’tÄj%Æ~žÂkVÆÞ3léØÊa&Ñ>׬_s pòä/ȳn¹7%ÊDÔš]l6âÃ5x¼]x» ¼™ù =ËOû—¨ê`êÏcÚöÀ¯mB™ý R^µ¼2’Ì@W…güknϸLþ±uIR±,Ü)‰yÕâzð½Oðì(ð Ua@2à>°bÑV‚elD}ܼ•=A1>þ# žéU8þc-ùÇŸâÑøHì_ù ¦¿t§Ö}:Ö¢(øÍhp[¿»„ig·ëƾjØ]#©?o¬ŠðÁ:ÙécR>[5sc&Ré\˜X9ÝÜg·|!Ûò²žÿ¾(%Ɔ¹.5´G⥨‚÷ŸÍÏ ©ºi¸³–bΕžô¼mƳfà?ÈNð+˜ž%ÕùÚ»”A ]ѾK+Kèƒz0ë—ç …Î [ÍÙÁýKÖb« ÷þø¶ºø ¬}°«W w—åiÎuæÜ‡|zËŠÏ D~䃳ÑïÎ0|岬!T7jô§êÉdØ›`vCàWvâí>Ù¬8üø#jÏ×Ñ!k¤œ%^;—«§4¿ŠŒ?UØY3™RD5ò_u#ºo„*x+ú«È0*AðòÌf }Hòš»ùI4·Y7‰”ÆçzW”Ú}8»XçTæ+¸Ï¼²vý3z)j^¦ ^ÂÙ»Œ¥^†—{ ¶Õ…Þayðæv ÑNpÙŒ!ð«fj5ú':ÐïRéŠ~7ªtX9è­¾šÈxŸÙ¬¼-ï]ЬAæ_|u"üG*3¹üÈó¼-LY”#{þc·:^_#:‘™Ø ÈeôW}³èUôÊ´’â•2Ó׿ä [«äò‘¡Ì5ÜdÆ”gÀMöa…êÐo p´óÐÿã/²2EÉ•µ¤º/ZÄ7YuhPë6ÐGÃNØÖý ýÛ/iwéIË¡FÄ–ºÞ-/=Ȳp†Z2[c'+lƒ??$Z0?ªžï7ùócäÍÐ]åâ|o¢Ž0 ùÇô»ùíbüG c‘ú sí%ô«ìê}u¢¾ƒˆûùpoòìÖØ—ÚF± q ÿñNÔf½þâ½Ìî¹{±l÷'²=<ÑÞXéعgøº°¶ àÏý™ižUÌ õ̆Þ×ߟÅT/Â-'£úFUê ü[#¼Ï<¼ÅF£6e7L…‡ñR u2Zä_¬8T«†ïiK~e+£ °³ ”ï§á2Qó÷ôj6gtøÕ ¨ƒb‡^ò§óÏ¿)Ô+"ùGk¢ñyøØ§Ì_)¿ˆ„ujJå@5¸‘x¼…ä:·yÖNcáRŠ áªÄꩵô”XQæâÁl#ï¨ÄÇ8x’W¨uóˆýú3lg=t±Ó±Ýap’‘ȼ˜ÿöã™;¨4DEçJ4›õм³1Ö‰K|_Ý3s!Šä3©æx‹o^k³”kÝ‘#QÄáê?€_u çIGG*»¿Õm° o<ÐQ™—úsæŸT:ç„È€ÿ˜C)Œ²䫸¢‡VK)Êpí6·Û±Þ2~f ÇtÅð":Ž?–™©þf2º.ÝÀÆ7Á§Ì[,N'Ļ츩Èu+®¹ºÜÙGþc¾V€õ,…y¹g$c†ÈZs³;üù'ØgV'TMa¨€D§€½?‡¹ÝÌ« uçTÑ@Go³ú}@`Ê 2†.°ÅÌ“Öp*õ^‘s fý5L*QÌ‘øÌä&çáã}d]YMÜu^”zÊ$êKç}3Çxó$]¿<Çy]¥…7Y-†šIÄž¢¢*ÀÏŸ¢³<;Ü ;Á<–`ý®;{*T7ÝØÿdô»ŸE6ô]F8ü¹‡’½¸;Y‰ÝÊŽ˜…?оuf0îGvUKëN„ÿš¯ŽÆú®oèÎÎ-«akhÄp»ªï±[‰’ˆãÊNåF!úSí0çä5O2Ïî_R ü:)jŸðó'Ð_™"¬þêí5˜d#Ö›‰ÿðGƒíGý¹Ž~÷5T¼Q,bÞsü~MÓaNF“të ûËQdµ4Wülß7/´rœ÷Û\I7üÂTyÑx,÷€8mÄ?t šî9Þ#ˆ)§éŸ¸ ?W=ð|D®€7« ã?šªËk\™² ?ð«“ð{ä'ú·cZì0»ƒ0ñ£©v ·¨ÏÑž—OÉ¥®“wM÷·ss¥¿ºŽxjñú"®`GQÉȇ‚i3¨ÚSѽ—H¿0Õ.—é—ÞÈe^gpS<_ øo¨Îš’9$4\µWÉÔÃÚî“gÜÉñL”ð™›2ƒ®è¹Á¯<¹iÛè_rNå"Þ$“T†â?òáåfŽf+½ç\üÑu þ ä¢.÷ÒTyGWe3¦¤TÅ7bþ`òŽ×Ö~øógèŠgâ?ŽXuð43!~5;Ãüóoâ˜ÓìT·é{ÅŸ îä ­©foO·]&Sz‚(އ-m-vÌ¡ ÖPëó?jó>§é¡IÞ‚ÿ]¿2“p±óTþÇ_ÄQ'„à?)eÿmýUjúï–׎ku™ÿQUkŽ¥»¥8´d$Iô ¨¥~¿ú¬ô&§Ë Ɖ3^Udбþnúî7¢;3ùÇïé¯k;°sãá©O–,F³¨œQŸ‹–t¹)Š£ÝÙ¡ÿ²/GtõØ‚ëØ¹šÄÉÑ×´eÎê<”/ȆÁs^‚¾( õ°¨xx—óž~°0¬ohÌzvw;¸9 «~"‹èïp_Ü!ó:úKÿ±“úAÝ8‚ëzݧx{~ÔHŽz$óÓ³vYÐ…'Øí‹øÌ_ó%ÁÉϱJ[ؘÇFvðšD`s§Àr2¢lzA¾´åÓ êîNÓ%å P¨ËtE’¡7Š:Q=!rȳähmÕÔ‹mКÍçÙ.JÿD;ÒN¦´‰|æ*u™ŸxÇóÔlÑ\µÉ®³ªõÔäéåüÇqlC9˜²ŒxJ“ÚñFbªËlÏ\ :Ø ßž¼,=þI„ã?¼”̺§Ø‹Õšþ‘Šüc(lüL²Pµ¸äm…Œ< Aã±ÞOñ“aÏmr_PÑøbÙýÛÇhuÄ¢‹h >Ëaä“§¬2òc-ËšÉà>'¢ò)Ä\¿äf>¦\ÙÌTr`§öD¯Äæ`¹^¯xíü u„þQ$ãjì g.)>÷Ì´fÊZ ©ÿ¸Jý{ëŒõ'ûKDæ±WõÍøÄhâÞÚh/zîßüs/Ÿa®Ñ~žÈùø™äðWÍ4ŽU`^mØÛ6ÎVôÀ[;é©ßÇ: ÏàÝ1×ð8zàKäðëøî0E¥þ'þC ¿êä¼Wß)9Õ$ÎÏþ9¾ˆ}L¤Æ€ÿ8­åÕ×Ñÿª>«ø)ßÔ»(²b“¤T¯»ð#¥-5ž…±±ˆÅ[£ß­¢>VÿÒÏÒýÊM¤!ÿHñ[û®m$Þš!*ãå£Êùb“ø¨ìR}Áßd%=®ÏˆÐŠ¥Õ»jgüGòá¥ÄðéQ ž!ºŒ$æƒy"çÂÕ#æ_(:êaUáÉGZ2,>(Ùíø÷!¬–›|”¤´ª¬ óë'®Š±âÖ/w8Gy æM ¡ƒü {ï‰ÅoŠÖÃhcqµØ.ÔÀý°³À_êwKiõ@9º€M½SK ’•ˆŒPO-+K°c<Ý:Œœœ¶är±Dõg3©tî5‘šXw(Œ.JbCÁ‡åõ+€…-G/ˆÄýö4ªu ó/à?>âC2‰ÝZxç1£S7ל·0GÁ­Sñ—Á¸;qʨ-ºé&líHìã$¾Ó ÿ™¿™“•Ó…ã?f))èu?¸þ7ê€ ðñ ŽX†5Š+÷pÓ›/ÁyÂ4 F}W½ž© X¡^ siëâ?Ú³‹zõSø‡@2·epO{dj3%}ÒíþíEÉRR 2S6–ÑÁ‡<À*7Ð*µ‘A, s¥›já´ðUø†ãpØëÈ£gb-S˜kd?pŽ›fdÐ÷çø Þ¦k¿1‰ó¡ëÃU+ª…Îhj•Éžnp®ŠÈ}¼óã“Ü àC`§ÇKêó†³RWsYƒÝÓvµ“»áÐ_ríšé.ÔÛ>ôRâ1úæ»ä=Á¯PÏɳt<F7‘¯ò$uâyAØ&0gv…üËŒJã$rÍVè‹oÁ÷Üã òOg°¶ÒUõäãL¯Eуø.;Lr[tVe͉ø£ð)Õah&0™©;z¬óœËM\'&¦S+ß…Ü&­ñ—s½çÊÍ+qŸ;-µùùídO暎2äÞpQÉà<égR^a$]â{27ðwŽÍŸ÷ã\ï'ÿ°-Úßš2ÛÎýn]žÒ9LG,Àüó:Ž|dmÉ|©g7à*èO=â`:M#s³²ÀŸG‡gÚfìEá"Œ=Nÿ± üj/lÙd0Ö™øªÃfG òÖx—(·rZe;GèòØÚò‘Þð)ͨ“?b*2qwö`°ÃúâÆ?ü/~ÌHÿDWÿ+*þþíùç©é¿Ûþ¼“¾Oïì?(1´ûÚz柧¥ûïù ¥>¾œhT®R7¡ê]àŽÑÓ¤½È…6³˜–Çy=#rºúkÇÉ ¦‹ Ä©ßéÙ>Uø+ ÕÛ0݇=5ðSשPŒÈJYÕ÷j}?qüSxÞâX°>Òî褀WLÂê¢b¥&½9 ·#&oƒ˜iT—Ô%åjê°û5 ÿøWñÏNKi ¨€ï òþþ#9F8ê bñXÅ/ܽ;°ø ùü6z—ø¦§Vƒþùå0?+sÕÇ¢ QåT|Í*²™/¢1Ǻ,°¸ÌoLGõžnf¯·ðQ_8úëF2ánÿ«djøOä»ÈöØTcŠO^%ä5ªzúé)È?úEãø;áÛÓP÷’íPšpüÇ %-øø¶´)ØÏw¼Cø¨àE•ñÞøòàF ñ7¹ƒìüÃïwâŒÄó~ÐïvÓ¢¿jÅ﯇Ó(-ßÒCd­‘ü§0•{aUo™åáhsÓîx×ñí³ˆò7ã²éÀ¯ºiÏEBÎZRö·–,`-Áz­§2}eó hF<¦Þ½ëGÿ+º4‚KIó1z€ü”­6/Ô½¯5—œò-øëZùÙ#“ûð[É1SK™~}†ÃÏ»Óë¶96 àkÀYQtƒ'‡¼¼å„޽=ÍUL7Ä)ägLr… è¹£@Êÿ1˜z¥Üa~&/EÄЭÔuŽø¸Ó"ášDÓD騮"Ó R¸ŒÜ¤½ˆLßÃX诫:jâà E9@q|­‘VØý tN¥©¥iIvh™7ðK0XÆ!çö¾2Íë$¸°Ä7ÓRà&K£‹Õð`‰ý©ü[ ÿq…]î4§â¥jÓ¿äU9^è«G¡9Ùæáª·ï 7{„¸*9ôHYEÈ#‹Ât½ob=ÄÍãÌùà?`C†3µdùGvæ×F—‘ÉÝ–ã?¾‰wbŸÓìU7Ñ—©˜h_î?qÀts,¦Ãî¦×Feæb«c5õ U‰»äüÇcÔY[ÍÏÄJö<ÍÙF¼{ ¶›óü_¤¦~ÐÅßTªüÛùGRæ‰7Ðviµô…zsÍV÷]T íùÇW-½–÷7û—‘ø£¶­„‡]j/´ê=úÄ좋GFøìtDùÓ2R[ß¹T#f<‹6j<õJsÑ*UdÎÓ0¸°LÆY=t‡‡Ÿ­^^}­6Ñr%¢¬HÄÕAžÃ|Ò{¢ÇÙç}$è ßB?û³EB|ýƒöZg%޶ˆ·–Ãwìc7yuüã~ªCΣ¿€N4Ä/†ûr´"oÌÿx#¾±ÒWô¥+°ø-±ªC¨šŠB,Uvà®è *ØÀx«É_¬X‰8Õ—(»5+|'÷艽· žP%AH^Ã6,?Ÿc‡ö¿²DBÕ¥ä½ÅoÊõº(ŠýugGG9J¦¹`ó=Q——™°äØ/ó1'ýÛÃëÒ•A¯'Á“¥ƒÏ)JTw‘\°ìÌ ôW~L«£Ç£úm™Òxºvõ…³íB‘q‚Ÿ½/û³QôË™&¼Ñ%o”½Á#?áÕªrUcSoQ뾆+x½Þà.Y‰O­;ìysc¸QüÊ¥öù{í:Z;ш¬2øÌJò‹{ØðåLIÙBÇÝ4äË@ÚÝÀ…1ùhXÎWìø<ô»k¥b2óæ‡N5uµ—">g?.;ð!£YÆqŽƒÿÈh®†?M×ð8Öë"ÙÉ0ê—’Íä$ÿB4TvÇÇ• “œÓJ€è£?}2¬Qàs ÝKŽ˜öŒZæt›? ‡ÉH˜ø6T\Ü ö«È=v`ñŸëÕÑ+„ºsR ƒž[`õÇ’1Ì4ÖËTÙ÷0÷âORÿQŒé¢µÎÈ´Ä üÚH®uGô\§ðÇ/È…È?ê)T»Iù†iê-™m›Èˆ <þ¼1¬òUºÛ´Ò¢Ÿr·ÒÁŸ_×JkF77¾û‡Ud.Ã¥×ù¨¬ÑΓœÆï¥0ýDh-+˜…ðá9Á0¼¢÷ý<æ3å·|LVkFÿÝ'Üô·Í󸚊—ÿh¤ö`þG,0ï}䀟tEZVQGzô[s!9®ƒe¥pLbæÉ7<ÑôÀã­*fzøs:¢§äë'Pb?®ùçûÕµúUÑ–Œv>$³±Ñ¬~uü* ®º¨†;6;";ÞpÌ+©Æ,~·Â<…?º„¦p3LÜ"œbÿü* ú]þNÉôoóLŒÒÚjK´*ú,½ºV‹»Ë_‰¢ #¯¡§ÓRÿÐaîÇg8äWnâ?ΉÌp¢’X¯³`û«{ÔCà„-ÐÞÖÖsÐÏ=äÏÿêu'Í‹ˆ×D̘v–ðï”%DÃué9>Yä#&=¡»GhŜԟwÓ÷ðäÙ³`J¶÷† øƒ‰Eý‰›—ˆ¦`3²K×=üóýÝ×.êq¹k’c³±öÀ˜ƒlÃJ·"#h» ˜º.&Š‹¿Üáå–ˆd×Ä+<Å5ìôJlê"ùyF øXú¬ÖO×ÜxñKÿ‘F+‹ÿhƒ¾‡­Î‚’ÖâúÝŒ<_ª\Nîq®9ÌJ#:Û> ÿp)1CuLÕ]Ý/r‚•Œá½÷Áÿ†ÿÈÉYüÊÞRƒˆüï‘yíbÏçx· LqG´°Ý¥ìu¨±õäFIÀ§sÛ¬d0žˆ¯¨Ò‹Žýtë7O7“wD®ˆÎÈ9¯ùÃñc”¬úøØ0U9²o<Í%È%?Ó°î äF"Ãôü‹ji»×¡'×y1_kFeLN±õýnAð«X˜·Æ0¥vÄì}Á·sÂgKøÝô|Hç«ëè€JÁ4¢:/ 9iOÄßd<ýäðäþ4S:«‹ð§ã9kë‰SZðÔä·þ ^¼?üùk7=is…±ò‘ËÙq~12›æ¨„ùŽÞðÕÉáöÿ³œ¨lÔ. «g6o‹=¢]ó‚Ñ5²æ™À¯âÂ.ÌGu– üj6»$«ž“¯‘qÌþðç›éß^ÍùìUSûRÿ‘–xå/c†ü ¿5bZ…Éñ“áÏO™ªãhXor¸¯xÐ!ô¨ •ÆLË­pçœ'Åþc½ºW?-:‚'þ‰y!þ2³9vQÔ¥óQ³þ§’cŠã þ²’å)oÓµe %›ÍØÒ˰‘߀⬦ˆÛê<)ÿ^ÄQw©}gæý¯~5âgoœœúÁÊÚV­«¾YŸÜ¿ý˜—úóCè¯ò0}6"¶Ôµ¶¿Ò…ùµI¨.{/ݘùQ­èwx‚ùMÈ?ZèE~³{ymÏû0Q’8ô9Ç¡¨³Ô[Xú©büu>ã¹¶gk7!_E&j¬¯ÄJˆ•'Jþ«7Üb‘€/ÊTxÿä:-õˆL´Ðb€lç§¢û3Ñ›§Qûšë¾Õ’z’,²Š®KðçîÂÇy¥Bî(äëöŠÌ^€x,žÕßb7ëÑ×¢îuSf²È`(±Û=°£-¨?×±b--ÇÔr.&!xMþ>GŸÍTT°°uDTÓ°âs‰×× þÃ¥¤ ¹3E‰¬ÎTwŠZò#g«ipþñÿQŸ™Žˆ1“aOþ{Bþ±™'â8Öuè»–ó)~þÑø¬R6mD¨Ÿhå¸[OâÓÁè ‘WŒ9n¯kä[9ëÕák¹9ê¡«fŽ5¯‘ÅDã~üìÿGÜ[ÀeÑmïß{öÌm+vwwwwwwwwwwvwwa¶b Š ØÝý~‡çç}âÏÿ=çœçã6{ö̬¸®k­å#â×3Rçôî–ÆÄ'¸o}ñ–«£àT{ͦdG7äy,`næ×N§«Ôiªå?‘Ï´åT›à‹¨˜F½ü¬ óÏ;1ÿ|­a×5>2&Sw2šÚˆhäF8³Næ8ôVkaª«ZžLâkg6ï ˜J†V»:\ƒÜ¦š³r†«^9¼zHó=­`nF»î šd%¨URx޾æ$+²cœÊy¦î¦K×'³œ5ü* w#:ÓFjújŠZÎëmDüè£.ÏpVù^?/Ë[­EÈÚÊ[Ñ­DÌ¥jE5IsôϨÿ(bÏEç÷%5c“¼Á‡ö©ÃNüê8ýÛ/‚vŽã¿øÄVY¬œŽ²T26‚ÿ8OvÕÑzjÍ ¢]uÔ±"šQ.±¦£c6aUÖm ¢·W!áô†ü—>O¯nc*õÏ_ö]ɧ&uþí翆ícõ•ÚB;€ÿX¦— ì.ò^)€ÿ8¯ =¾ó/ëÏ#ªõmÔ %fæOC7µê#õ,üG}‘^TÔ«jåÿjŸÝµÞ`0vþQ‡÷x Eý ¯~UM´´ŒÍ¿ô¬ ýºã¨ûáϦxz¦€¯1ša•;‰Ådîÿ^T¢‹a¯?Š>T©„…óñ×>êéÑŠÆ@âIDS ›œ _7ÇŽÒ=ð¡Ï©(ß-Òþ2Uè×®S|©ÿ8Iÿ«×𽧈§wׄõ SššÚÛÒ?¿šW°O‹ú‡S¬£å‰© 6u{žˆh;%ŒÔ;VI‡•Õä6x‚ƒ¨Ÿî‡·¿¥§Q]“ä‚ïOS—Ó¿¤ñûüÐ)8¢ð0óñ”øH™䣕|}_Åžw‘lç«£Ñ_]ÔB²ÓöºÔØà~öUî&S8)€I€G±Èë Ðÿ*><À0ê Æá£€ý¤¦6+«†6¿v¦’U ÖÁ/¬’=ˆÝ%¨W!~&üE+vç…ÒŽ9Äêwð%ŸÈ™&r÷ígªºU\øeþyc­¥°û—„§bÐ\í1kÍA;}T)ÝWÐ颒yŠêˆšô„Ê€¿ §\d?Üof± Ä}é«=¶Ú >V|{ÚD>Ø ´?œ¹Äê 3™Tª®‚®µ¢:o™a2Цk(Ž;É)èri“‚­è‡þÊÎ?^¢ÿXcpÖxDgªeæF®±5µ é(h8ì)JÍÌ>°ê9Èhæâ 6à¿Xæ Ñÿ*1Ï[V¹ÿhÊî–£æZHµød¼Ãe*àrP—Ý“n‚þr{}F_ýjt&9#¡™:Ê85~ÕQ]’Ø_~ û« Ħbº W¤›ü1ü[¼°¬­™ÅµmW)sŒü ù Ä®8»U çÃ÷E9­ùã'Ï‚I~—ѸsÍdazؾ¢_{?æß.©[Nº'ý·2¿vÙ˜›ܹoìt1úÝÜAêË ¿ Jk@ìT‹úÁØd¥AÀJQï÷•Ù’¬Ópé¯áe–ÃÓ7‚å×­øfa*¼¼@g/Àw¾fRÎÏ ž&ÿ8M÷ŠÑ<÷yð.QOÿà'Ó`+]‡“àÉG8vPÓY×v^9WÇÍT(á?&£ß$KˆC?ü/~̨nP]žUW‹ÿÛøU|ôQåà?Òÿª²–‡§õ³R–þíÞÔÆÒÜ~‰ÐþõEF£ÇÔ&ú'Æ@£“=ü!ÁÕ7º»è€þª†^O«ì}ø×«)Ê­\À4ô]øo,ÏC65®ö]¤5Ú€ˆe¥a›Þ'L+FÇuÑÇQÿ»ÛYX¼‚<ʳ”EŒçùÜ£>Üí½#bëÿ´-¾Nb=v(1àu¬pâå2<ãkQç·Eóttæ ÓÏOá?Æþq‡OÀ¯îá?âÃwGÐ9MäüÚàåᙲð;²âŸ‚Í/¤þ|Ïç×6??oÛˆÝ\Û7Ä%!3о^ ÿ±‡k¶ë£ÊãœÅ>êÏ+©®NÁ/ÿƒ²™Œ/ïñМUðöüÁð6_™ü£±|EƵ?| Û¶‡ïOtT Ù]Ê^7šZ7ðdÉÁ*áË/òûó²Ãgä·È?<ôh ïCQƯ´ÇÖ'¥î>çº:”úÁ½Ja½¿8Èjv7ªØäó‰ úúް ÷øùÊò=øÍuòÄðDØÓнØ8\ã£~V½üR•áZ=b“ªt%9€UËÄŽ†ÙÏÖ-¢Yžz ñx ð«lô¿Z†ü^3†ÈÙ볈,–‡¸ÓsµoÄ$•Éׯ‡ñõŽn&5Êaä7©!lBu€lˆnއíÎ. z8mCM6œ“É¢ÿU€V•ý{€Žæ@!ÐCÂQÙ·ƒ* fy=Ú«ؿ֨ÚÁسÀãÃ&ŸçÏöºÜp Ñ·° öòYQ7T#còÞ¨•é^çIÿÄ4T¨ ¢ëß%ºlùš/ð •À¯.°ß œPCÙVè˜7pßf¡ö†¯J Ÿ™†áP}µwÜÉk¼_¥ ʉ)Ó¥ê)úÚ1Ìòêæút~e7õƒw¨·ë3°·×d°îô¨ÈDW]mBǺ$!Ó/¨Æ¯«>R®Á}x 3Š@†pÖ|<ú« ;ŒÔø€¨¬ÅtÀJ£óýcÿÄIZ|X3ö÷–ŠŒLàXáøÿ¤Äf5`{£ã9W)¬Auš,e™8Bý øÍñW¶©¾â!ï]ò€4øÅd-»¨fÏ.Û;Ñ}ä Vâ—oɞɚbDavqhüG\µ„n’¤ÏNŽtš•r‘xƒ>£›Ì=vo5ØÐ(ò˜nx,»_J´Æ÷Bñ[”bú@qÖÈF|ßÚk|XUð©$XàQø 'øÐ†°³ûÁ¯^ $˜Ï:óÀ…ÚÛYbë/ú«5Z°Ñ2°Z[@h2HoòØÄëX®Ìæ9ø×ø‘»² +QBçþO”%É,¶É˜Æ=¸ZJQækOá?š`£àáÖpý‘2Õ#ÇäP¦Dx¢oíj=!ãèf~†9ˆNvøoµ™§s(*"ZÓ`wå“–þ<ÿ– ]nWy™úóð÷˜xa×~ĦÞ]~'k›øÿÔÂ{íÅßlDÓƒë‹_ïs<¯=ÈfÖ%½P¨ê»,c›—á’ q½Ý¨Zð§ÚÑÛ¼CÅ{2£Kd “Q“u@=äRÖR©;yN&Ÿ´"JÉŠHA¼]ŸÛî赋J¿*Liêc5€¸ÌlÃ|xášôòý(â?Ðø‰£Î—ã£rJûÄôæž}”¶º=*êvøŸpè`âË —:MÍF:ºÊŒ!›Ñ¸rŸ@Ïjן/a"\® ý¯êƒ?Øj¸b<ídfá&½ÍjŽv¬P‰ÚõÄ|/Puþ,kŽÙ”¾ŒùñÑÌh( o·]BÝòUÌqú³Ì?¿$úóÔÓ‰¤ÚÓL‰þê0XÝ:ê§ÂS¾²VáQnS÷á-}è^2ÓÚîö¬7YílÄã‰þwÚÎãùú¤ ºEã|²žÐÕ4šóo·ðEÕrÐk·®¾RoX?xùµ¾T¤ÇÐãj™T¿ZÎSIÄ<ÑøhE}ÑšÆ9éßþ…ùµoèßž"p~mñ¿Úg]­6UCDnb±-dGÑ ¨_yLJŠþD¥ñmaį¢3ç$±>‘xÜ—ˆ¡,ö®5¨Ðúï2M†l¡*Qx2:eõ]a¸f_-õ'Mx_ž“ìܤR€(¿Hst™Äè*+­‚ÔÀþná^Ê1"£ãB£®1øh[Ôkv×õS°·ÍÁev˜nG!V ÝTú_…ûÃ)¶ÔjÀ(TŇ?²¹"ò4à@ϱ„шš#_-£®z¿m 8ÛBqU7Ûÿê3uÅWDnlóò­‹äÞßá?ì.¦9‰2+»ˆHŸãV`»wñõ]DcŒÈÂ#Ôùnj\¦0<"c¸J~qüªXXD²¤„d ýÄx=½9›œ[.ijµ#WHɳ”5þc¡’›ù»ØØæÁàMºì³ßUÜTt¦©°d9Ùåe¼Á>r¤Ç¼µ³Ù][8—2F\ñðüjú«ðçrZU/<ï,ì)"Ú ÄÌ ˜”]˜š…¬ XK¨?×P`§ÕZ4ÂnFkœ­P”Ú;öÞ´½Ô!tt7ánïàAfËñæ{pŽgàø'øZEê?FRÿq—ï ÿ±Âˆ¥Í v§Ÿà?æã¥ïë,Âßœ0¨aâìRø¾ öÑà€c:ÚÀŸ1Gâlìe2ëí@p‡§òEà„8×S˜_Ð VzÂ’M†½ö0NÊEôªjŸrMÚuâ…É?&€Í‘˜êm׈WånßÁÃõÓs—-‚Ìl T‚?ƒñ3– ]ËA•V4´¬eðÀÄvSßXÌ*ˆÞ¶ž•†yRG¨óÎlÚøÕ˜¡ÃüD9™ÝØàÜœCݧyQóiëwSšþhö—ÈÊ`jª#!óGŸ? ßÈDð°Ôðé3ÐÆf`Ò®­¿š‰Bº;ø•­¿jæ<¿2Ìÿx€&¬$1P ùC¿&›eèµþÇ«[‰òà&Ùà;ôW£ðš¬¬ýÛ“%øàíô[þãœz˜ü£+8ÔHÖ˜FRú»Ñ¥we2½† 9V8¼©R©j;àG[³çŸ?ÄìcÈ /Ÿ9È.ç¥ÿÇ?ÉLWt×T»×JÁ{~Tê²K0-ªš¾O/­uä´o+É™ý±N³ôÔüÝüÚç̃ۊO ÆQ‰y:‘ôêNõ<ùGqpœ\z%ú¹ÿÍáÔÐ:¡EÆ;؉7¿©$’«^ )Õ©è§¶…±{rØìéyîwyøÌÄZs”|#{Ó¿Ý¤Þ ‡£øS]ºè^ç”R;ùÿçEvw üªD°&"w‹Jw]ÔÇéÓ> ¸aüÌU:¦~ðQ½=¿ÖÛÜ /Ó­×MðºKd=‚ô/)þjW:œL§ß熾ÞÍüŒ%½AOÚÞôO\c^×ÖJ‚þö¸Sz*Uêâá ò†–èØ¾‰•Î;òIÙ¡=ÇóÞåˆaê(f2È‚èb¯“ÅôÀL#™ÿqMײ‘UfUæ‚ø’.b÷ñÕ[Èý[8¯·½]Ÿð†Õ…Cœ,s “^‘9áQ—à*¯ÀxßFs5†®#ŸÙíò‡jæw3¦™\ô¾ü˜x$Š]NÿqCÝI­ÂÞø!°#Þâ4ó§Y‡x2n1k+LJ æ×Þ¡ž‡ÿ(IEÉ(îÕkrt4Ö¨û¤C¿;Þy2ššûßÖ_%G¿[üª¤¾—üÃ>í«Jjí> ÈwÍdZ`X¸dç-W¾(¹ô£Äñ©ÀnZÉ©,ÊôìsôO¬ž_oJE‰ë»ÿüYOð+&|_"¦E,êhÊ´Ù¥¢Qõ²0Ö&UO©Õõdþ¬UkUÿÑ’.ÞKÈÎñ®ˆúäMƒDÑ0áWgµ8¢$ñqbpoüO¹ßH² Ú†¨)µ,Œ¥}Žÿhô‹ªó×뾨øˆÌÿHŒ+…¥ëŠ‹ƒµ>ÀÇÚà2ž¼GkáÏíúóìÆ1íwXÓÏ•û·Ýfw­ÀKÞ²¯öx¤|– ‰@¢ðü®H#os—ÅS=öoù/Ê|:VV‘×AÕ:ã¿R©ß `ÙL\YÝ¥¾N&±¿aW‘{a§Nâ?vk!«+ìÝ%¤ÿ•ƒì,+ÈYY|Ûòœìí&‘+½Å Ý@›4XbÿZœDZú·Û=Sã…â?æ+åá?Nr]ë±YÉAÞûƒ‡ ÄØõ„‘¹º:ø_òƒ-Äß þcû€éodûéß>F«)êâwS,Q¹hOÙºDÅGVâʵhsòšdnæŸO‘ùaŠ“‘;4ÇÜ$ßL,‚O{²ù»G"*,j2¬»Òî9[Ÿ€Ž##Ðï^¡þ|´uÿÖ¯1¶"“rßâæ¢—èNÿö)ÁÞ—GZQ¬ßu0ÒìxÌQØ5o9Í܇ ö-ó?ÎYq¬$ŽÎ0ç•àÏÑ“Ñì#£ñ¤#ü'4ñèñó±?&ñ¯—ðÞÓduƒƒLÃ]ov¥‚3*z©¾ÔŸ?#OnŽ•©+ôCñU…úŽûô/ÙIÆÓU6_Ë•PZ©Óy¢:ñ›†²ZLbýpæc&¹>7À\fRS:f59-©êßðÀLóߘ;ŸÜ¦5yÜSáÊýß*g´Wœ¯Ý›Îa¾sE˜£˜ØãÂV³»9¥Ô&fž£+Êú—ìCÛÛš%vÿ’¨füÇ:bÖ¾Îë­¢§_ô† ñ–±…"¯šÉ‘ñ?}`ÌÏÀÏœ§fcõ%ïð㘾˜v*š™ æ(ôã<Þ±Ùé?N¨ûõsb8ñˆÝ碸hfuL""hlFe2–í?Þ[«ª#€üh’\Á®ËYcémòƒ<ð›XF¼U ÿ‘Pwžàï“,h*›;Oæ£RTý»¾R®:Ô'jº]Õ×Çëù4»»Á'%þã¶æÐMô».=ëg~ÿ™®æ¥ÿU"òw¢* —wZ-õ©ú@¿ÿÈ “ü]ýàl­àQ.àœy5‘^¤ù‹jD'±ß‰‰úPç9ü~_Š¿3Jwñç)×dÚDcP¡Æ¼ó³‰ì^µ"qzÞÒ³+,×üD‹„W`¤Ç†Ü‚KèL¬š“7t*N+ã ùG%2ˆÇ‚Y%Af0ÿn‡·•Ë✸ÉÉ}5Šâázs%äÊ=X¯QéYxÄEhÌÇÁNg5–jÑÿpÍË´æØ„æØûd ¹X/5ÿ½ƒ'ˆ ªÿ‰·a%þx¸¼Ý?}·¸¡çQ?üfs*…Qµó|üÐð«HämÅY!-õOUŒÞx<_üÑd¸™[xΦŠ{ Tþ#§ZLƒ}.$™Eöq.«ÙÑ1<ûnlú ý uqýÀžú‘yöaçöäÄ\ìøJ(üÇ ôW=Å%8r&Àò6~ÆÚW¡ŠAÔ]]~ÃÒ–ã<Ï€hl’ï9Ûx½•ÄcñKÑÅ.õnˆkžFýyÎ='þclBÎ5†ü#-{OÏöcôp  òã õãùÉ rƒldDÛ-Ò5™…†¸/s´/°ÈM9½ ü‡ð 7ànoÁN¯’£¨¤›1ôa¾Z‚Ê…ÁTŠÚýÛ}P¿«Cýàˆ`+>תp·éï•3E^†Yj.`5ê'P"…C•ΑÇô ÿzgøÄΛñW{é¯ò•ì8qˆþ‰%à?Êsà3#øÍ§Œðç#¸¶%TdøÑ97?õ’‹˜*~Šþ‰ñkƒÈRºà‹¼`T®ã)êˆ×ÎlÿÁ¤¾GdzE“±D#óÏ+Ñ3¬!q÷ò£(xïÂ$WƒaÞ ã]ÍÜ„îk.ݶ.Ê<„kvô[å–ö$òú›Ü+&ˆÕìªõ–JþæLð¦j*îßo$ÿ8f¦×:Ë<ÞåœFj5·cslDåŸÿÕÃ<±y¶=¥¯þÊH¶T þ½ò¥Ðïž…¡éhIÇ}´ÏM¨RÉ £ÃŒBâEÔ± ÿñ6Hÿ«+êÝ[ŒÀÍà©Aý`&Ç\vQƒ8ã4ªƒêø äZIÅ-: €Œ•`Ÿk̯ÄWz8•Iwé™RCþs¿ÿÉ™ÕEªëd>¢j‰ç<§¿û½ÑGUЮh ô‰z­,«„S hŸéˆeè´xj~faX8†š^ßHýU1㎾ Æ_õ!Ï«ÿQ@¯®åú«}ÎÕZ‚‚¯…±#s˜N—^äQc€ Ô¡§Éø¹˜ÆP½[˜VLDýà@}2Î lrC&•†/,†ÿÚr8Ó_ä£kWwf¶¯ ÕzÓ?±U)©°gx"+P^€Lf:ow,uY”§ÄL*3¯þ´ rF\¤º%'Ѝ\<­Cðq™ðiöTìà0WÈK¦Âôñ‘ÆŠ?ÖNÐlÛ\Lè9YG.²«Ôd! Þ#hØSö»æaþÄ®ÿ^ÏTœÔêßlò¥²NUÀª®`uíiJéé_Òîb½Q½i.²ðB`xvGßE¨SmozšÝ‡¿ºÊŠI˜?è†J çU _nϬʚ—É]Vs7Fé÷°@¶ÏŠÿëþ)^¸¶ïL(þc½’Zï"nó&. ŠMH¾1 ¯Ô‡JÁÙ²,qã*#׸ìˆ :¼ú ìÀnr¡ä6áÅ–_j&—jíDe¾–k¿<åA 'Ok«—ànO3cÈþÜ“¿ìTk”A™““Õaÿ‘|×焸ÓKµ¯BâÅs]Â+,Ca1LúS?±žHÿ36Ù¤OŸ>¨Šù <*¢,Jçfšƒ¹ã si½ƒ­øP«Êîo£É JÓ ÿöš9"+Ìqt°ÿÑÝ‘Ô1W˜,â0ÙGLö÷ŠüëüÏf#uˆúÁÔâôubΜùAãœÜ ÿQ¼JP±Ð…úgàDÓMôºäJOèØX…s¾K}Ê0½j²rÿQB骎ÆsÇoO@’”ùµé`ÊÁäÁÞïE¿›ÿáGÅdô·áš3ã?šPGÍYIôWÛÅrç3ãÿppOOñæ¿¥³»ýK"ÑWäóÉÛ¡2‚k ÿ¬•«Ý—îI˜u,Æü¨>Xáfò—u¨¬¶£7Ÿ¤£æDž‰ˆ"¿¼MÆP€¦ S‰˜^ cG¸hFãÝzXµÀ¯èÜÈ]±ŸÍ Â_¼“œù‡—ºA?!lMb/rä}â%ý¯Ы¸93¢PËØØŠÅü¨}Ô#–¶¶ÉE¨ÎJZ ÍAæÐm7¯D6O C„%ZuÊÿOŸä‡?wÕŸSªþÛþ#šú^­¬=ÔšêîzÀúÁJò‹Z<=Ý7ÿÕŽ#]ž¡Z#3ª™ÚøVú2ª{À¯Ž£ß-)êСñïò‘Zo¢Áu¢4÷|ÑGTé¨ÿx‡åž)¦ßä1Üèߧ^W[ès°ìW@*”âɬƶŠüøvâ¼(CeÃ`ø-a¸æ+Z4¢âÎĦ~ 6›é2²‹Ëì oáK¬[Ìè:9EN1<˜ mñÊ=¢=€­LòÁNÏäóöXùyF9'O#L÷K1Ä'¥±ñùG;­5»êŒý}§ÌÌ3ž„\íj–l CŸAV’1,Û9|ˆþí9U|‡÷”Õ0Ne‰u×°Î6°Éo¢;Þh1V;™¬A˜ê(ÆŽîÕ åWØn$ÛBÍ?¨ÉôðÄÏyQ•f稚á.—GÇQýŽÖ_ÊÑ BÌg¥÷HS¬e$TÕÈì^†â?VÀ·µWŒB¨›ÚrmŸ8·2xõ8Ø·ª¨™l¶(-¼ÃRœÛ\¿;÷ÞîaÒ›wÞËÔûÁ/U™¨µÇ”æœNà‘J’SŽÁçØýK’ÓóÐÃ\‚¶35uyÙ@±&â?'`÷éÝIŽ“ EpHüj¶&P7@ƒmOò"§ð¥þœZulû@ó Š®XXS?lq+ó9‡c$ë¸ì/Ç£)O¦uöì¼Ð*¢ÛyH}Nx—ñø„÷øµäB1Ía°É–#®cþ£.–ê8§œ”ßëG¶pA¾µ}¿üýË(üŒXÇëTÓÖ‘ Oy ÛYÓœ ¢ôˆÎU9¸ÞEt+ÜHýùüÇ@®¹3üù¼’7ˆS]ñÂy‚e”.ð±Ù•”}È|’/GÁ§‡VFs2Á·Xi©ªø 2Tļlî³Þ™)ñ ±÷ᘇR}R¸ôž/•³š‚ºoÌE|S¬ûèÓ Ö<}JVŸ½ZËÜòÖ¼Ñ3sg¯ã?Ö‘!Õ#ÿ¸, á?Ÿ¿Ṁå,¿éŸŒ‚VIGtWàÏ_¡­»I†4‰U£ÑÇïAí¹i%2“¿ù›@¨ìYÄ®þ»ÏðÞbQÕv¨;ÌRø“f˜"_üf=úËÛüù{|ævæGÕ¦ÒdD ~÷:ZÕ¼MÕéã2ÿ<£êI÷Ÿ·îýK9ÿöó_Ãö1‚ú\mBÿöÆúv½V…U))µëÚ-–žTË †¥Ûõ›î+…È?¢Oª°ÔÉD2½!™Òaý>ý¯2Šjz“¿Ì?*hc±Y£DÔ ÇéÇ8VDQ׫wE[¸±õ¢¨Íý†q~mJê»ë °§·°%ˆÊÛÊà Ìá…ݽæÏÀ]²œd`e õm® úígàÏmþ#ü‡/OC[¢¸¬h=`A€aU“¥ðFÈ?èÚõÇ{ÓIùÎd´§"2Kò€j·$+Žˆç¤ÛUS‰áIãðvÓ_Wݸ¡9þ°b­˜D/ð¹‹ØšŒàliðG_ÑÈFŠ wðô®Á’&%ælBþñYó[þü‹2U} JšŒá{/cï?â?Šc…Óðv§¥Š¶>ˆÛaT23‰c=Á¯vãibæ²-®cL£Zz<¼dzXž"üÔ²¶Rèw½àqo2Í«‰›b£)£ùJ#pË<؈à\ÙBá?Æ(‰É?N±Ú~ÙÛ+ù©ÚÜÕXt¥ªOv´oR˜xy#öÝlmd*üH]®$­ØöKÿ«QÚrÛR0›ñ È-©^mÛ«›ÚáÖKbæ2]*棎u÷ÛWÁ±2ªþŸ¦þCÛ°U­»à f“¡MA †{µÛè•4ÓºŒ¯jcšô4II þ5“BäL¢’ÌZpíÅY­OÄ}îd<ÒyÂð¢³:ó¶ù©qtòˆLÿÝ<ŽØûº0Ì×ð¨á@î‘?]!ι‰ÿÎD6CíÅS2šóZf,“³É :ÒÕð‘|mM _Õó&Ñýv€ÿh~Õ<ì ëç\ùháêÚ\^©©Î¢ÆfQõ´TEYã uyë;ÞvyÑZ‚ÿ(‡[`¥2ï?g¦ü!üÇ4ÔÇ~²==«Š©^„?Í5ΡÑG\óAÑÈf¬^0úýèŸøƒŽÃ3°úIˆëgáCb¼ ³ËFômÃäQlD=a#òÿü¯¸:‚ùƒQÈwWâ-_ëeB«¸ãy’LáÙU7v¶ oþ™JöÁtNìcEezIt35¶§<§ûÉ€^‹}Îüc¿zŒZ…v º#±ÄN3ÌÎvzBF´Š£Êv³ú8ö:>Ó?1—µA~a2îAö9Û|Æ;daov*xü¿S(ý¼šÿ·iÔcª ý¦äú·ç:À—êà-†ë[õfݰ”WJ~fŸû£¿ŠMýùßáW¦ZRßCÞšŒnámÀÀ=™¨~SõEÓÛ ÿÑR¯¦ÕvÞϰœÀ@­1(Çx¥öäÃDuê?Þ©OEnf¢Ï"¾Ébì #ÿýU{}vê:Èc!ÞÁr𵤢Öu/6ÿSŠ"ãDâ0)²ïiIE)ì|:ìê%˜è*r9üÇð«cô¥”§Ê2&®dÆÊÌÙÙE6£À0g2&aWÓÊ F+üÆ |Û}ró°6;àÖi¡u¦Nª2W†þ™9}»Çã0Ä<`r×y«¶Ò·5ùÇ\0ñ,r$LgKj9Ò@D÷‚/þºÁåôOì,®‚ñm„ÿH-¿àŠ~1V¡žºÅŽŠTq€_íwˆó/ÓéCßœœ'š8©†ä.—j£±zô>fV¹ü¹ß;—}ŒEêÀüã:õƒG±OEðyù}YÑùÖÅšî’ 3ßG†xºGiŸ¹§}Pi-…c?nù5ÈÙ“(Õ„½¯e×gT3¡9ŽÆu3yœy‡Ýåö‘Asá/öÕûƒ_Mæ”#£?ØNÅÆUãß§ ¯U˜Ì·šÙ|7¬ìŽRø“Tzâ?â™=£;Ø9ùš»¢é…ƒí0©°ç²Ý6ìþWáAvÈmðîMÍtT¿ŠMCeÅ4ª5Qÿqþ£§ÚYÞƒÁÙ×PÒ¿¤¢ÒK³?k;ŸZ ¦Î5¦%&ÏDÿ+/²…"V øîvôß]mα^0ÿc^zíï’Åf’§‚XÓïÊmÍçÞæ¿KñF4”À¯Ž1m¶>ýPlüj19Í!ê w0™e›}ì Ø¸¥xÓ–œõVòÊ_þã!šÍrXîA2‰(žÐ‘ ýUzúè'F}5ži"©¡ñFƒÖö'³|£š)É2ýɨ½ð—ƒÔ\Q÷¢Í;?ŽŒ÷‘8k~…3?c–[;ŒZ ¾•Ö1Ôq„ùé¬wrµÔ*Êœ’]àWô[±BÙ¥7ý“<~}¬ÿãÿ’4¿ŸóIp0ý<™óo÷ËcS^E;ˆÿX¨·× ±Êe%/óÏýá?¢i1þ2ÿøA=ð Þö¤X„fô&ôfŃê}úïŽæ^¶ÅCïßö§½¶ÖjbûF`©{ƒ\DQõ„úˆ's·X(Êa[|ôÉaºò8ôq¬¯ÂNÁÒ5‡n€Þ½3='¦q÷`ˆZÄü é_ràOÛâë§µgz~ö–gë)8{Ml|Þ@ëôˆÕ°y©Ù»'D‘ ß-|P9'¼ÄlÍ#VôÁ.Áâ·e—‚XioÞ£ ôñh„5Kh¬úãüÚÒð7X¥˜ÿ]¸¿ŠŠ·ˆ…/Ê“º+zˆ]§ Œ°Ïˆ;èwþfs_•UÌ?ÏVâNFt†}Ù±AЯBX‰¢†=¿ö>§ºˆ5¯óÛ|`^¶1 c›Zg¸Àœå„+ WåjÊ8u.™ŸÝ?q •¥Eiê“1øÑ§d¤éK}cP¡³DâMÍYô3ñ£.}+µ†ãÀì^À¦0+J,s>…/?ÍžSyݸiÞG•‡»Ðü*®Õ‰]ŽÇ[Î$¦¿ÈTõ£è¯îÓ‹r,:®âܹf'ô&‹x÷º:¯·4ý'¼àÏ‹7MC]^¾3óÁMìÅ«=7“Ñë% HGúïú³Ûæd6¥@¡RšIQ©û“­_@Ýr;ˆ~÷Œº\¥ïüdv@ÿvñýUGs Ý!‡á•29Æ9–RORÞz$GGòœÍø»¢7oÈ#üZô “ÎKÿ’E]©º˜5¡¦Tã:Ïéï~ybõ™ZQ»ÿ±€þWeXå!ú]Y´Zì¿Ôï µ´¾“8ÞÆÈ«_õT W’çU…?ϯôPaßáP­QØtüG¬SÑFd¢^þ­¨É³1M¤§zYñ«xê5ôßs .aŒí}Þé“XèTb´1ž÷§?ÏFrÃàweÖ7…aƒGµØðaïoof^Ô6j V;AÙ;cSÈb†E7/r¦¬ê¯Ë„?¿#.prßÀbn Z†Ÿhj³Ä¨‹M±ûÂNÓ‘n<ÆÙ?êw§heAššcïŸs¥)At‘·<#އР7ëŸåORòúÆq^Ï­¾ýu[ÿòAYŽbº˜|òÞ dÊÆ&[a¥ÝñÙda&×ÕÂ6aÇs°Ž÷±nÛØ¥›Ø¤ù†²b5þ#&×äAÞe®°“òS ÈHJŠ>ºg0ñõ(ò“.08Y`û¨:ùu¹½J:½8N5Ä|ƒÄ0注äéê±–4–< nW ÿ± >ã9YÏbÏyøN\AbqHõ ±ä.æ×Ú½é bq7¡ÏõÁóÎ72ÂÇ¢f| Ujþ̯½LBIòì询b­êâÊÔL†D*çßG&žÈÇ×SÕa×öÿ±ÌmèwýéU›>·`ßë˜o¨èH!“‹?q›*í.óÉ´¶ÁÞë‡ZqÐ’<_ÉðYcñÛoä2jñ–Ó?±LpTǦò ÿ(ˆþê$ N\°7?:˜Ü”ÜoEÞÿ:«ðâÜ/ðü†7mì•;`º«š É·Àd%G˜Aÿ««Ô^ÅL#ºoV÷‚õ€ã¯„?¯¬´Qçñ„D¯4˜l0ñzdó¾YÙ:Ož1Ÿyêk­|TúS™WŽþ¹Ö~36š“»<Ó6‚ö\¬Ô>2—TúïÎ »µM¼£J=zÝ7fo'ñs¹ñÓÇ`Ñ«1¡øùL.k5Xã'îß1Ÿ·¥°Dgó?©ÿ(¡n 2¿VW󫉃=g?¯ñÏ£3¼<¾¢‹>G/¢Ue•¯àWo¨(Œ K-í_êw#©9ôt«ŠößÞˆ îà?Tí1¸cOîei&¬çý«}NÕšcÙ—‰âäCèY’[¤U“kDm0ûàWIŒùaœ^õVÛ꣩Ü=l ‘þhô“gàÑó‰yXO,­·(BÜ ýÕö?›rL‹'*âÓÈ+XâcF-PÒ*è¸6òt ‚eIJd™žÏDTñg…ñ;eX×ueoŒ’0 ˆz‹#Xk'õƒÑÁ€£ÁŸ¿ ¦f ÕkÿX¾T«_Ô•øÀ÷dç^ÄÆ… vãýúA•÷^/}wëùTó7wærPý,R帓®Å"k`Šiˆƒ Q±×ÿQÿ±˽Œs8Ǫ#±àßõµZhE2©éôˆä‰É×J‘7lµEB¬vTXìпɅ(°€_5çzÁÔßYð]CñG•œð°÷sñ±ä'´¹Yñß6^žld!yR ¢ùid ¾TÝ­æ^ÏÃ{ôFÝAìùE¿{Zk Û] Ìk;V-¶ÄÚÃꤦ†"6=×w¢ÊÜo¦ÂD‘™Öôþk~fßÝxûË,šÚ[a‰—&Z˱K=ô*œI}¢éÃäò(V[ú'¿zFï®;íÂ'ÛüyN­s°»òMk†õóFÍލû{Hÿ’æZù•ÚìpµèÕÏQ êYŠOâµ_"ßå8ˆ‚>Ü)…XØ5ξ?ñÿZãÜKeFô»?äYli&ôWÃQ;ma·'ÈZÊ"ØùÓò Ý-²¡Ìd~mE¥¿:†\m6^u¦,-ˆ8Fvêë›’³e¥£Ô:ü[L4H>([ó 9ÞŠ~×a®%œ‹Ï<ÁýÊ îBÃÃD Þ¹ :ÉŒ`t¯™#Õ‰ùéÑ©ˆŸG^ägͳ»D}…'Õ$GÌôè¯nÁÜO§¦¡œHG¢¼A:PBŒ$īᠲ¢Ú;k¦rÔµ®Zeéåƒ>Ìá8 ·ïMÄa°óíõWš‡wæ6‘Ç%q ÍÝé?îRÿqSŒâMÍ3â)®˜%뛳VxjRjP>ÈáI~”ƒùQKðš½é5Ý|NÌŽŸ˜„¯½Âü!×½3ÿÙÏsá?\½4µð¿_eCUU{DÿÄ z ­OW€’‡Ùµ×´ˆú5–[êºVS-€Ö*š™¯p½±…¤ßÎ1ò&Wˆ|̪­• öüº~2ôÏúiÕɉBDú;à&Úˆœª†¦¾¡±6+‡ÏXÆúA7õŠZDoûgw'l–ÓRz…fä ˜‡k‚¾"7CD"=,š³èw“€ŽXðçöÖjr7|ïAž¦{àÝ@c2béÏ¢‰óKTúëµWæ‹Ã\Q,°0»ãh¢šxØ® ðñ¥©*;‹"u9 @]2åwbËûï¶Ó⢩‰ïõÁ7¦Â¢Æ6b‘7ç#–J nsÛAs¾—gB ½†ù¯~ÝV࿼U&0ÿ<#öwÙÀ>Øø(Øõt¬Ÿt¤:xwUÎàh`šß6ƒ,… }¯v6”ÓÒEæ³xŠ΃HЃ˜¸8ÌxLæ.äËuIô; œ­v·>0¸] bPPüÇv¥¸ÞBìçtú`qÝÀlüjg8ôI‘ÇñYa{'a»á›W‚¥%®/J®øH?üËüZ­+üGUXà ð¹Q%]nø™ÄX`ÿ±”d?¯Ná?ò›‹°Îoð„ÈúÚ5Ôð}!û·oÔN«*Ì,X¢ùàWwÀN>ÀŸ,„·x k«—Òu ýî'ð+“»ã}^ Ï0Ž('£æª³SèUñ¤×ÈRݨ‘é"OwQF-6—ÊDz)J"Áü¨Ôô/¡+:5^œHLôP§ðÛ@-ÏÑṂޔôâ:ð1F+¢ÿ Æ)ØøÑäãÈ0Γd¢vü8Õzå8¸šYY–纊w¦G7Å ýK + ¨ÌȽûBŽUýnLx‹ fvú_•§"ï$ý“PE§:šY ¨ƒXi}3#ã?*“k½ƒM©NeÒm¤w)óÏŸpöy²b›I˜åékŒ1ó/¤fÂÉ$æ²€ˆ-¬ÜA7Þ[ü¦v`‹Ù¸÷/É —SÿQ:v\R_´t"1E):*l£ãa)ú—Ôcöí]óµå Ÿ2‚ús:©A(ÅŠQá)©ÿOD·‚^D×…j¬vúSê!ú_ ½èÇÛÀt[ª;ѯ¸:u=I¬ìø‹pwúܧ s õç­¹Ó“ÁÝÞðœ‡GCìùýî‘ 7ä¿ôyVuþ2C-¥ÿù·¿û˜D£UÑÞj=ô àWCXå‚_{ÇüC­¦UÃ2ËÕõï*QõÍÂÎ>Þ‰ÎÆS=£.Ô>äy7¹“Es}l`…¢ëûÿôY ­ oÑ4ùfXþÖb(­ÞR »'Ö ìwBüÇŸÑ!û·„W7«Qô<à+»ˆÊë`å›È-Üû×úHâe¢’Ý"÷•Yëa¯¶j¯ôìØ!»¿Û lL)ÞÂŒXävØÁ¶ä g°Ë˜\á!zˆàDhׯ ¬7ö¢5V‰9³#Åq=Šã7kÆP'¨óÐÞ?!f†^Ø ñû|´Q©š…­‡%Û‰ç8É»áŽÿèjìÒ/j—]r~–œùµ÷Å2„[ðã{Œmœa9òÿã`NÇa£ê3?jŸØÄÈ›ºðµ[ Ö“©q.âüd§’Lo-bÅçáAÂÉ÷è ã!’í×Ý9M§ˆBXÏÉtkzb<äÞ3 ™X¡9O æ>p®ôÏ'Sµ&¢öþ«±û\ȼ'Ño ìåsTSóð‹ÌZæFêÝRa³³Ê·dvßøaüþˆ0ò!ŸEw-"üMÎ}×´ }‰Ø÷d1ŒôST¬þæËŸZ“ú¨v‡rž‰©ô»ÛßNv%VÈ©×~ÒjQøD&BåÜýÝ¡2|µ9™ýMb~m8‡—ÕÓQITQÌÞ‹E4~ìë>þª“>ËA/9Ø„¯½ÈWj ôÝB/³Mær°¥9`T/­) .ÇÍð vàç`CõQù6b‡»@nË1rŒpå˜Õ•Æêhê¡ìùçCPæ¥àiý!}̲Ö]<’W­dþy6ê7ª[ÕÉå<È2ÁÜ4'{û‚Þm{ŒjìqnÏ_9¨Ý%>;LL&Íwh0“Àxw¢CdLòATˆß§#ÊLüIp¡ùLö’ô奎“³ýÊ.7£â),lDþŸÿUW»2ÿ#úEÅN%Î2Ó½”£K P?˜ˆ9†•ÐsÕ ‹Õ z¿Ì£{ljÙÁ »9Ê îoÂå?¡+½%úbMº¢<&b£ +B®R ’fiVšhÍqt¦_KZú'¶acwËnDò\Fã)`4ä)¯þ?Á¯¢«GյΓ1Õ²jçß~žWØ>&A5†YµƒõzÍîéë©Ô^R?øVshiÔƒa[æÿ¾ËWI«÷¦Ëq<´¦뺂ÿ(CÿÄmtßÍ)éµ ù½|­(ÆTð {\%¦s4cÞ®Ÿ¨…O™ˆ–âó\\~ô_­—‰ñ‰ô,Tx`›}×’ëx³#‹*Æ8lD3c¿ÅaL)õ3ÿj¡ÿûÚYí0«µã=~‰•]8ÞƒÜæ#â1òløk°5ÃÐÿjb÷†|C÷¤ê¸>YÃ0¼Ð\2›Tü‹‘,`·µ$¸ÛåµLì©^1€+NÆ>ðç羽¼Glýhj>d%YØ v½A¢ÏLÂ߬ùM9¦®YÀJ&iÃò†ã´ÊßæâÍú!jƒ<¼Á¯Lå4÷qºãñ[Eˆ«Cö€é Bö tuUˆ3Œ¦»q¾ã »§FO•éèúÁŸ{Á¯ô¢NÀÓ|h.c:Ä)ÙÈ|NÏ»ÿÕ'ð¶¹h«ÜùÍYBÔz#²+{ s6ÛÃȽÆ=Ù M§ŒN4 ®ö4šÔÁæEYž·÷ðG)Ð^a=&]ײÛá ÝîÌy‚¬wß9ýî.˜í.fkçРb~í :KÝA×{ÓüÖT‹¬ãœüTøsw¦ç½t¾+c”žê4ÔçƒäSz W”ù‰Ö#à#ÓÃ.$€‘¾ #ýŠñoV«(Ùvþý9™VSþX0,cÁœtÃeo«÷µƒðw{‰¥’à?†Âx¿”ÅÀƒªZÍ™î^ÁÚAMÅDëŠÞ|3гZuÌä1KP¸Õ—cÐï–.ýAlu´EFkrïå2ª¸dÜ0c:b¢îŒ~w=ý7 Áêo=dšH;ó Ó¤zã2›%àsT¼Øú YÆgþqM½¥«`õ±MËð.mÌÔk­Y™ºÐðtú*bpŒ§~ð9õòÉæÜáω@Ìd3 y;x þOú'VPw3Uôç­‹Hþ‘Úù·Ÿÿ¶q™ Þ¬j¨¾^¯ˆ_}V*jRGÿ+CKõ—ýÝÔ”ú"aba¾‰ìÆ Ý¥éU!¶î#Ê ¿š¤¹úa†e´Ä»³X«-oa/QXTQsi:â>fÙV%ª^¥‡Ä B_WÂããí» ìÎ=ÿHŸ ˆéXÂC؉£ð))Éð® ¡¯eÿënÍ TmzTG«`i·`«ìùQo±ûwÁŠŠq·¨*¤èïÖûŠÿ8ºZd"&–n yFr"”˼;µÀ |ˆç÷ÂJ?îÌþÝJÿüûx-×Ùoöˆ5Òc£ÂòeíXY{ZÇ"V^AÍÞªÓçà Sµß¬ùQÙ£’aݧ`ÑN¡¶†.Gæ½iuó²øÐýÜŸA|õ"ÿÞ‹·ô»¾[ e“9À¯‰âÊ}øXôâä2YÀdb Ó£¿z€f×/ßæ?³ñ\o¬áŠÿ¸ªÄ$ÿðD/5‰ê7<ÆT²–°®ké«”€Š†d†g@ŽNÈÇä³ðÇ38{Æ CÜú¥ç×*æGµgÿiùy›Ã¿Ã²Læ(9C2úR ¾Ì .¤P7ŒßÖIŒäúûóûS èrÅtÿ\º—æÆéƒ\ cà.·¹ÔVD0·’ܰkòLw+]k¢ŽD¥Zn2‰sp*á…´Áwæ Ÿâ/3Ënø†¯\JÉeºf œ_ûÞJãXh^ 5¯ÈôÄ뻡¬•?È“„è_^lÀÝÆ«uÅco5NÈ-ôoFýGdæ É]ú_†ùè–󬮦@ç’ÍüvN¨IÿQýaô/YÄïW:0÷ÓYŒšcE°â£ºíÍdÛàbÇÐ_­bÅUøã}d6Õé_rÈùÌJýàfÅ¡§ñ‹ °ké¹²^àÝ@Ǧ°èø¨܉=ÔjŸÀ·|ì&zÆÕk¿þ—ž_´ú¨"ªpŽâÅÊ¡YêÈÕ$Åßc™KõóRzþy¢#-Šå+Mþfö™;eT#®˜â jÏPõuÃÙ=…wã?®£7x‰Úv1sgoaoš“­pÜÍ—0Ïi@‘4ìþìó"î}žüÇ­%û¿Ã•äã »‚„øá? ·z,kÃ/¼gzTjôWîðçñ*9dÖà·{ðœúFþÜ $1˜¦/ŒENyÔð”[™ÕŒŸÿ*?à?òÐÿê„5’¿/&“ˆb ®ïG=ÉY¼æuP½Nâ½óa©£”VÇqVC@{–ãRߥ‚ß©N·0»Y×mRAh8Ó·}±yþ#‘y®;Œvi®Ù;ï•Ú-â³Í§bó ýw üÇ'òÂTæ·T*ôöÈd+ñáæ;ðŸ#~åGÕm²ùMÜ1ÃÜN:ZzÑ@sä…ÑoŠ~CG¦ÇÓ?q!ÕˆëèyÛÇTÍÒè÷~È.äž[E¢ ýKrâ?¢·;G§“ŸôCR±2;² *ÎIÅyBø±ðñ}ño'A'[X­òxøx¦ÝoTsÚ-6ÐÁÄÕ¿}‰º >¾ qSÔ)†ñÖ|‡ºl‘™Œ**ÙFWò£ ŽCøôÔÖPy>ýž5Þìf¾#jŠB–>ƨμòÂ×õrü×>K‹¼Ñù¬êjÖ[õJñQ›Ñmw‚¾C¨6_Áü(mù‡† àºì“Êwm >>9USí ?=†þ@É­.Ñ÷Óýª µÅmÿ¿J¤•$\@$SýU 8V°¹GÉ.£†(GpRwáx®}üúYušPï@ÿ¨#X¹:ä£yådðÏz[¼€ïê›äü®:aª?Ÿ©ùé¶å '½‰¦Wƒ˜ìBÓj[·°vGb†NÏØ¢¯°½ò¿þ_7e8MÿD7:{$Ã#uÁ^FG%{û™Tc'Üá*`+cͲ›ÿ¨¿j£%&S©Ë>Øê´\g"rÂ;pT穱“¯î¿J — WZ#üèßnýf—šÚS="R`eæ‚ áÌc²¿ÒœXN31ÈÊ`›l¦f,~ø$oG/¾þ ÿq'”‹v¨ªnkĵ­Až¶ ÿQ‡É)'©›9Æ?7ð«éðåx2°0.Ù¨{‰ÍÉF%ÿؤÄÒ󓤦æx<™Û]¬kE®6Œtqr­Á`~ѰíåA²º¯¼µKð{}ùžRLHÜ­ººÇþ³ÕÑðç¥ñÛ ¨<$Ká?s⩱Ho‰È“+ì‡ó=CŽPÛ\LŒ­“/,D=†õ£©©\8ÿ|<>l>Vè:OÖ•z¾÷0}©8Jþ±5Òf™Ëôç ác€m"ÿ˜ÅýI«Í vW|´&Ø«ä)ñ ƒQ ß‘½Áî—²v}l–t¼´j;l<«õ7óƒÔ~L'ÿ8v«2Ï-èMy©/Æo_àì«Â-5VH:Ù‚þÁ_úY-±ö‡ÐÙ^%KËô“W²#j©ÞœÅE¸ûCä|MÄ;çryéÞ“3î-SPseƒmN ’S€Ê¾âØûµð/ÌèXÕ9ô¿ê‡?¹D¯Úà uóÉ?®ñ±þÃÅŸ?Wök/¸Òí¼n¦Oñ%lto²„Xô)éM‡Ü,þô¼nðÒ£¬%XíÙÔ‹Á³†7ûs5ËÈ?\ý.Ó¿$@HžªnDc9E,Î>õƒ“©JyI™It9·r UWs xVз,f"êŸÁìm¥?„7F^ð!u‹~Q 剛DmÊ%1ÕÊS¾”ŠÃùäjCÈŠÞXóá?vƒ¯ùÓ¿}(E¦›sÌÏÜ¿˜¬7€e’åÄ•Ÿ þ?æW¨SOBô»7—ɵUâAµ|ù0}úÝʬyU)®hOøï½]=äúÖ0|QMÀ¬óhD}áÐõ?ÒO÷Qoë ˆÂs‹îz/­“s×aXNi¡¥!ž\'2ƒàw4Ú3r¬A åèiawq7Á#]ç¿ZÑŒ­¦Þ”¨ü0ñG#žóÖTÑÕ6ª‹DÕ»ˆ­ýéÒÿEwÕ0ý~E/í“^ûd—Ÿá§‹ÃÇš@t8’H¿õ_ÄmíÕÿxÍï”ebXWabäèD•AÂ*‚žq)2v ¼g#5®M±)÷Å8íw\÷ÏýŽÑÊð]‰žýX#/õ9A°>ÚEѰ;T­Ål¤Žyü´;üGñßN°TéÕyL$‡K^Äõ@ù [ÜÆ5'—µA>Jñ~mæïSAØÏr– `4±=ÔúÁìjt]gqä!lóºáÖÀäáÔ^‚|Ecôlk ”˜ìÃlyï@ìïSô´#À¶Ãµ…??Fe\tsWPÚ7o,`w” £²!æŸ×:°ÿ ¨3 `u{k~&™mî%'h~ƒþ‰E#ÍÝüëHX¸œãnü‡={ý1í|ð円'÷…?ÏGÄ~N^Á42GS?øŒ´9éW¿Ùš ;±Öô3ßqÆ5Éz®ÁôçDÛË Aú'ÖRZ«ƒ 7­ïÆlÎ&!j¬ô‡,Œÿ)Ê4ÝõàaoP ¼¶š3výock7ÊÖœÌgrÄ6h¶® ~¥©^ÚGÃàm`€é)š d Nð +ŽÂF7¢ÛHY|Ñ>úî1§Ã-C¿ûæc>R#ðÏÕôë^à¼Þ j't iy~Wƒ!~Ó¿¯ÌÌŽxäM™ÿqÒ\ÁäßàmǬ³(%òtæšó˜vϸ¯0œçÅ]agþ㸺V÷}¹»ùÏOxš¨?ß@­äc3>ºƒÔ0Q=Ç­ýô Þ,wQ'Ú?·ÌÔPޤ`½áT-½bbAhSr~¾Çÿ©ùá?\vó;ýÛS9Ïéï~g,üG°ªqôO¦ÙÑÉS¥²–JwèBWÐ‰îø«åbÑÝh“H…žMðæ5¦ž@£†‡^*‹þøFµÏZI°öu¼Ó«ˆÅ·‚ebþ‡ÍJL,¾G‰9‡¾áoÊiüGkü†?r%òâZà%½úb ϧ‘©ìÊ1_D Sý §–‡¬h–ê3œñéƒX|t±:Èë'rÓªx·Gø˜aàÏ "ü‡âØ{$XÛ[Äï¸ØÂ[Ä)ý‰s£ßÝE”Óö­˜úGþcÖ¿Ñëû åan,fTÎëhsÙYmVÑžUW^Îu3}‘ÂÿæÎ¼SvÓ1&| 0†+Í@fÔ‘¬a±Q†7¾»1ƒXó&Íؤ›ø¿ƒXé:ÔÒmÕ¤U#S¬Øµb¬q…=dÃeÀ/¥aê#NéhÉ”HíñBm¸†TàvÙÐ;†¦¿ÚCÿÄÆÂö®‹±[I¥/ß_–?ɱÀMQͬáoµÁ¢‘øÃ-äLç‘ÔeíD¨¥Bvx\FþQÿg3æËÀj.ßÏ7Rk§7£“íC<»œ’ÈÙÎ?4TK ±X‹`,2Òozsˆ3ôÑ>“;õg½5xƒôD<ízÃjÏñ§AÊU:ö½"žïf~J„ÏJBÙe²3¸7£Fˆþ%?´†äy7Ér‚õÃß–k`¼?Áס?¡ê0Q½Ì ²{Á¤Rƒ3=Í[‹¯£ŠHgF;Ñš]Cå4N¶…aó;™Ìт̥ ºÝžVi¦Šïµºšô§ОPR…sÔ^ã÷× ’”$Rì»6ŒHj ÜPA¼~qð«Ž0Û5a¤—Á4ÄEÕ…™ãY™2r„®·©@Êšr‚_ñÝð…«ß^8õš,Œó…´g!$§Ö¥#YBZòŒåt¨zÁD¿UôIŠÅïO¥J9üÇ Ô€óñG¥Aö¡¿è¼#ÅÔ±ú7,Iy˜Ô2¾Ø+#Y•©èÊÕ…”'ýwUÇjk.¬·y1l÷`¦³$5㡟Hfí z¥Ò¯õ§}¹­ÞÐß‹ ¼]±C>¢€•ÛÑ­ºˆaÔ 6±Ò;&2p3ýåÊUtáÉœDwÓ”gàm·É"o/ô?á?r©Ûˆ ^É%Ÿú'EçÏï ùQÒ¿¤þ£§~Yíx*á?îkÑô÷ôE —ìZóŽMŸ~•íÑdºQ4ÐóªÛ™óø•ü£ºh‡ ^OëúÉÐ?Ë¡U†š/Š3<ƒGß"ÂSïèMÖEjg,öq=¤æ%ô•¾+;©|î@>ì…/²ítOòöôèjÃßÏc§ã’ãd$Êm  }‰`ÿº…þ»¹±óiÐàùb›HO,á 2(r8QfI”I à?‹¶¿ Á üËe¹ÊG*P>‚ ùÁœï$Fi…Úv›Ñ‹­¬‚›cg‹_ý®VãçÊý´âDôv—@_ð´,ä3YÁ^ªEÀÊÞÂÆ/%›˜ÎiØýo§ŠüüïôWB«ÞÇ<Æ? å'‹ƒËµG·ÄFdAc<ÿ›&Ä|l܇’ø°upXŹÖ}óàŒ6Ô„ƒèÍ.ûcå;ð;Sò«@˜ƒ,óŸ®VL½¾¸Éé¸ 'ï¹Òºø‡Èؤ¶DÜgPp•F»:r+¹þî^ ònç/ók‡kMñA¬N•£“L#rËxXÿçä À¯î ¼:Ný_ süÇgîöB0±Ôüå0’‰MÎwòŸ î×Þˆ(è;sãVÂÌ"Ö~ïÓ…îW§¨ÿØc4ÅLç ’ö2ŸGV³Ÿ;T)„þê+ïÃpÈxä=ö”øÃð“ð×Ùosâño¨}Æ9*Àí—¢Òù"•ñáÁÂüøN?¬ õÁý Îuž’þxôÙÆ y4¬—yŸs ¼)/\òUìèq9™¨ú8])*óÞÓ‰e!äIršøè¼)••ŠêXN~*üÇîF8ñEd¦ƒT}òŒfOpº]Tj”…_èIe÷(ókg³•gðæqÐïG¡–Äpõžû¬ìÕ «?ßÈ`þíDl|ëøôÖh¼c'&-®c¦ˆ5%[Ð_4óQþ5Ã*ΰ%þ÷ ¬««þ²¤ÚWÿ’Q'w©Œ'~€†et$C\ŒŠÁ4Ô±ŸÅÃ5¤ó8Õ‰ÉKꙺ•ÚLBVøšhl/=üÞßü¼àݪ'||üù(âÈ#b—™žùQó¨,]GÖÕµî]k¡c¼ÝQ–ùQ»è3P}ï7užÄè¼)ƒŒºÒúØÏÿ‹óÐEpóYý¦”Pã;ÿöwÛ¿Ôj3/j°þBŸ¨Žº¡DÓ¢ëþZdæ–úËþ»^Š¥¯C-“ìfŽQ^TÑ£Q鸇¹_EÑŒúºµÏ”Z,Âd0éÁÄIC¨‘ˆN¿Çëôÿ(>‹Ä'õaZ1ýw£ë¨¸¾AZÒxo4æÉœƒÎ´?‘ÀQ8‘Øë¼Ä,5u0á!-²(¿“Øä±x]¢»ôÔa!ÿèFŽÓPVäÏ‹a˜?8I™Ò÷«ÈÎOÇ…îCž+ý–¡!6å4xØ1räNÄÿyuÚŸªE+kT4‘¹5Ã{<&‚€Š)^2™¸ µ…wh9–46gPÊX,nÁŸÿ.ÿx¦tSw‹4òøÔÖÈÍÙwãÏ„©ÉÌ_›ýÝÁŒÂÖ ¬W´ûd}Ñ=´‡¡œ£C}¨ùóîæ“÷É l ­w#žD‘t±Iõ‡XþœBk¾Þ’,?+µDQÉ¢„â?æ(qôŠâ<^|ñk"ߞăˆVcélî5 Š UàW;ðq^\÷4t/}À¯J£ÆX§ººÿ³Õ±ôOlÀSëHu·ö!5¾äèSÍ‘ôr*`ž_/`."ïÒÈ“–ã?°ä2=üÇâÏâMeýŒhìÁ®AYÿè þŒ® øûó¼@<ì}yøó ¨^Óí-ô“°›ÍCøûZM<àYžÞè•:¯=•3¨‹ß‡EïF‡ÃÍQ ýîbYÜœHýáÏïã½.á[oiõrÁvhˆC<Áç‰wú {Fþq’,« õëÞò•9™÷~ÊZl#Í÷ºj‚\½Å[Ž‚‘_%Lj7Î{\UÉ«v¿"Ÿqµ¥ºÿQýU6ª"öYT$~Á/Õ㼦7J:£Ô]‹@Ì`üQã°s=¡n×Îp¥xRc˜7ÄdÝtmºf¦þ¼‡ÙžJÂþL÷£J~“é›­öø&Ë0gªhœ¯(¤v·<ü‡Z-¸Ï)ò»M^įZu¬pèÌÆ³Þ¦<=D¿Û Uõ`«¬ù•¬3=T^‰¬ƒÉ|"®:ýÇAõŒnÏÿÁ37>ö¼É¼(k'ý v›ß̤œ]<ú'nß/nm”{Xy.Õ!KM7Þ–Ø<‰#`£ÁýÃì<žÿ§Oò©›T—nUUK‘)ü{ ÆV_©õá:Zê›õæZKVña~m8*7"’dûKþü…IŸ G•™ ôFF8ñ‘Hy#uþ§©¢£vC_ü—ú«ZÄÑíU¢$èúq£‡¨ ~¥k^ð_ÄwQ™(Ø=Œõ*yPv½&P• tç°OÉ…­ˆô"Î(ê`iÇ‹ìzXÙ(3õÔX¢HÄ ‡±òeˆó‘ÉL!ƒÍ΃I@äü”¼käïÍEô»GÉU #g&ï„uŽArÎXfÔ„S=C{ˆÊì3½±‡¹Âÿún÷תò„¶‰¹ŽÕÈÂgˆñ_·~ÆÜ3ÖãCOY'á©Àœ6/=šô7kÚ'wAd%JÎ3ÿƒsËÅ)¦’_ÈšÉà<Û9ƒÁDUždHv墽3ýBÙdVÕ¡;P d»¯‹5]µ®ˆòÀ;v¡¥nw[¯OÍÖˆÀüÃVz}I_d€zýò¿mJ"½‰ð'²q;NìEÙMê,…ê–²Fªÿ¦Á|‡uÙBƹoÚˆ“ICÿ]ÿ+Ñê€!¶&O;_( .×O›|ê%=š˜ý,ô™Ð •1w‘„‡ç·+M¤2Š!ÎpúݘøÀ\|ÇBTU³ñçK°çáû'Pûqÿ1× o®“ÍDæ,Xñ¼h»îuõÇŒ0iÁµß÷´fT»^5ÍÚÕŽ3|-7ã?öËWr0ú&ÍñÌÊçèAmJk*ô.ñ]©P|Âî¥Öa#[ˆúÿ°8÷'Æ|Í<ã´< §ß T)ö}0=d¯š@íûȃÌRzÁiEnøo5‡k-ÛÑ_•Qº«ýaz¦ ž SXF:6€nJ¿ur…ïf~fÆŽ¤+áX:œ?&—³ùóEÔó_‡Íi ߉Ɵ1?êúOž´(æE1D$7´ù“òÔyÌɺO¿‘)ÔŒ§%ÿE5{!*þnÿĽxÉöõÝR]Ýww÷@pww`pw÷ÁÝÝÝÝ]‚K \ƒ'8 ®Á¿_g.'B2 ÿï½wfž{“À¤Nuu÷–µÖÞ›lx.¾¾¶œ†®0¯èï¼#¥Õ‘è¥ÒõM5ºËÏz$ôWé¬Ñªý¼é§òÏ6äÚƒ% míÌ/f3#Ïâ;žìãt¿0Œ#Nÿ±\å‰hG´Ò“§î¬8dq,·6Ãõ|f’U&½gwLqœcªp k¬ÜC­côWsÌh¼-Ɉly}3ªü+ók «Að+C-&ûâùåÇÄóíµOÚXýº¾0ÀÀdÐßj©ô¨Ø©ˆpÉ‹>¦žk•ÈC?ëTNÔÓ©“Ô«º?Ó:šˆAúp­«ó~þVØß¥×b•fRÙ·ÍÎ,»g‰ê£ú‘yØõÔ=°=7ôeZ1žºWÍ©w&ʽO®QÜ¡3Q}_zõçyºˆÕ‹§*D_ÆÆzD4Ë'4»b_lË[¢·µXùKXÖ ì6¦ÈŸYŽ â6,Ñ;ÜÎP¶Ò½ýìž=õ-m8Šýî´ Æ=‡ZÌÕz`osë´ð²Í*Z%ªí âð.<߉`c‚.˜Dö`»§Õ-#²Þ Ÿ8ýUlUc—‘Ôõ䥈šNaÑ΢ˆpR3ñ‰@m:Úûá×&‘\IÚOV×Úð¥bhõƒ)Ôší?²âªÃíäÌ«Âf"Fç*©1µíRûþDŠ]°–…¹îÌì6´ücó?Zˆ[œÎ0¤ ò=ïr v÷ÁX /ë‹'gF Lï|ºm¼\‡ßÜÄNkÁ/é9 [| p²‘õÒwzÄÎ¥–î&žÃƒz·œhžª€ %¡SJY˜³è%2°bðgy“¦ó\õƒÙFu_® š ÿÕ\$[€]DÇzÙòg÷˜5H×…¹G¬9€xa‹Q]û+ØŠµÒdb·x2Âï'º+g‚—ܤþ£%õƒéFÛÍñ§¹~(c¨“w¡CÆqzYm‚ÑȦréŃ­÷CwCkvÿ1Þ`¯±J¦š½ ³§ò:ñri˜f‚“%ôASôœ¬£1È”Ý_~':W®/œ\„)¨sa±fðü.”ye)QÞûY‡ùç]Íñæv:¥Ç@ëô ¾º”y×¼ˆ.«™SU~C3o‘ “ÙÀÚ]?eú+âÆ…†Fýà{1Vg8üG6k Sè{“m-ó¤+Ê ú_1óà?Þ¡,XÃý±õ»¯© ô¿%Ñï¾C!_•§ ¹ü¨“½î3‘sä@üzûºxàäGgÐ÷dJI&¼{R3-ž÷LÝV´"?ßJ]ÛC1”h©³Ál6úïjÌœÏÎ&{5„‰ßŠþj!ýwsYÃäF¦¾OÀï­2?óF&ŸLg"úÝ#ÿȬžT—:Ÿ õUBçOΡo¾+Þ̼§õÕWë}ºSݦ»¦ŸÑ¾hÏQòYYî¡C ¢€9|#Gx«G¿ZŽŸö͉êð4ø­}Õ ë.e‰ÏÑ¿¤‹È¡þPψ6¨¥ÞSQ”ÙX¬‡Ô܇¾Oƒ<ÈUoD¦qˆˆ²šÛZhúŸôº /ç±}_Dô»È?"2p7ùG-ø÷tX©;Xã\Ô—ˆÁ™lÃyT?žqV£hî5oWÖPþUä9)?1˜è$qòylqClÀU"ê Dà­±錥ôÕý*þiíOPŽnXI/2.Wx„¬ø#…|ù­‘Õ‡ÝÊî·n÷/)…æìó?’†±¦…òù¦È†Ny.Yà ¬¾=Ñ»<+¸Òq*9±œ+ˆîN®}ÙÉ)büÎTP\ÐφªßÍªšº‰ªÆ…,«>n1@uÞ¿³üÙ%ãQO¿mjŠÿ‹•ïÀ}É@˜(ä>/BÉ?Ö€_Õ£E¢Þ!Xß—` É Ó6ÄWîÃ%ŸELÿÃbüñZ¼`K¼R^±ê—ž‘è?/kä‚?Ø.u“ÌÇ;m„3þA§Û>Ô«§+=j«¢†Ž‡í/B4¾X–¡^6“üûN,%ÿ nlt ×I²½`'Ÿ@€VRÑm×Þ'îMmLÿ«Éøã´h»N‚è´ã~C5$Ø]y µåÜ&ë-Žb gx?`þ ›|#›Ó!ãèN Çj<\=*..‘ÆÁoÇ¿mÇÇ_¦þ£F°õ¾ê»Á÷.ÃŒõ&ÿØi,GgµÑ¬‡wó§ÿUw"øó+x´©h‘¼ÑHÕÀ/?AÝ5À$ÙEr\Õ•vêPÿnÏèÍ)sÀZFâúêÛW£îáì‚B-„áXÿñ–üÃ¾Š»Øãø £ø¥yèwWÿ|„•;ÊIí xîfž×òoçH¹êoÿ1ÑìF'­A(xϱæs-«EA=ûœ n5ýP:Ò+Æ—ùç6¢ò÷?¥È?üÀ¯ŠóÖF–¾º‡|g–w¤@_[Ep0ú0Ý; Dxƒ¨ÿhÿØŠ³‘îßé—›'Býá?rÂG“ÏAĦc!è"Žuï 9î!–Lb(t5¸~ew5þçF*óÅ9Xñˆ·’ȃXÀÙä¸=ñLãPÉf'‡7Á3˜gÀÓšÿ^_«¢Ô?é…JÉ“–¬á9o÷K<Þkp¶¹d\3°¨«ñ™cÄ)òÄ8aìÒ`ÖÌ~‘[:‹HÚ‹,+&²±½ ø†ÿ(Šm:Œ• ´™÷¢!5%7ôáÖÆ¥«Ññœƒ ^ Ñ[X¯ø•—‘O\J”×ï€ô´Â 4C]Ý/³ããëüCñ[À¯ÊŠ3Ü…XÓdò)WZ‰÷9¬qW¬ñ6ê&3c?'…ßàÎlÄ á﫱øâì/3ßÛj½ÑzýÉi{À™—ãš[­¸b}_‘ÌBÕ¿ž™—ÈFª3s£&*~+#\Äj™ˆéí!{±­ÓTx§.`s£ÉèØ£5ö]5WÑŸ ù:=s‡l ÿ1]¦F7 £~Z6µ–g ‚6*Ø]y¦µ2Æ‚ú© ]#d8·{ðç›ÍcØôFàM‘¾Ì¯]…UîE‡AO²£èðöWÈTu^0âêÕƒ­çnp`×y2ÓK€®šr®=¬¶Ÿ|‰þ*5Ì 47Ê5诞á=ê`ç‘Mµ žeµ%;PVR©“ÈëÇ‘áÏ„ËGm]4ê?*“gäd&Õ,´N¬¯9&XÙ@†N¡íJÁ'µÆûZ £¹‡éƒø»Êyí|åqÞind’Îdé‹‚Ú*½ádW@šz€Åö/F ¼Ÿùƒó¨?/ ò×l-WÃI”“×›Ÿù—ÀFªrG›È—z©[&^·.ú«5fyVÞŒJÊŽ«1Ÿ3Â*€ÏÌnæ•:8ÝâD‚Nÿ±Y=©_ÄÛú«·éËÎNÁéx˜e- ®§>üÇ5ð«¸Ö*ªiZ ëª!2Ñ`r,Îh Qd7qñŸMÃåoó¨‡@~.ýCÉ­fsþôóO#ö5•ˆ½˜÷1JßÍtÛÒcþ‡¢?¡&Ý›ÈgEd½«JTæ1(`%>(墋8Ô»vV_ê'9ûâb¨ÞCëõ[û4´bD¡ é¿Û€Øq0óó¨T_ñ1é"Ø‚b«¾ B+jÌaϨÅšng¥¢¼KõÀ¯F‰ElÔn<À\ØëH<%éô ¸Ô›Ú+½ ON ,ò)lf5ÞåÒXå F6Ž“K'*9 Ë_!³ιeÛêLÖ²Ì(‰½+µ YÍar°ø¤Ç¼½±á_É?BËÌ3«w´[Âîïrþò—È rnÙÈ–òÊOø>ôß]U\6ÀÆwBœ‰^5)8o¡øUàWÄî Ц¤`4P¯ÄX· ø“é\]-:¢o%>¿ÍÞ6ƒ] !^¨‚oÊ)Îü‚ÙuÓFˆJtT‰_°þµÎt¸~õ¸æú_­&¾|޽k þ‘Ò’5§sîé{²¢¾2:wÁ¾c*¬órø2\ÇÙê5ØšQø¼™Ö:%~3¼ÅrÙKî&7«£ v§oiµ°W§ð—È©šé߀G9úóY¶Ââ½ÍÉåè‡6l8lÿYŒ÷sí¶ÿü‚—ÈÈ}ú >Ð=a¼=É–{SkxÐXNw%µÐX%º¯‚=¼eõ7§Â‹˜Ö*Äë`ç?¢FèWÚ-g /çrU”?Ô1°w“ˆ&Æ¢‚ªK¶œÛ¼g·>šàä÷£µ¬r5*&P×.ȼΛ­¿ò³œ"sóë½R<µdÈ{È”Ms'hÙœùÏOGܬ®7ŒÅ.ªÚ—0ïi¬C?ɸgQ98 _ç%Z3×ëŸW¼¬ÕãwÛƒ½%êÎF¾$2O*ЖoøËÅx¢eøU&æªÆÏ‡…_ù+wÔäF1¬;s?Á™òR)Ó »É¨JÌ:›SYúóç£øÓóx­õd ÙáÏj¡UÖ&£â¡_ò+£Y˜ŠýB0ƒÄk=*Ñóx_[Õ“¼#ØrF¼ÓÆPüÇAÅÐkã²Â_¼Ã‡ÙúÝ, N°ˆWˆ6[/o€ÏðæD¦â3—à ‚Nƒÿ0Cœã"æGÕà©HfÛF,Û¤àWûáRb퇀og3ŸÒK±"Ö¾ ù‡ V¯">d¼,oäî!Ö»®i þc"øÕyN´AˆzÛhdË£9ã—仳Qœy‘Ì£¯c ªGêÐËÃÍhBG °°0Ö6žœé&9Á}[bê|‚>9iÄ!2†StÙlByÒ¸JŸ’EDß>x±«T¼UD{;”®èß™Kø.¼ÝèŠß„õöááO°ßAæ´£ÿî8|íhîÂ0üG%ÑÉÈôøÕ8j/`écX™ÁsŠÃL«ìô’™ å@)jg>³¿Ö –ƒt”D~`®g8_©’'7‘*|ù]ÖXMô–îÁTñC¬zˆî‘*u„SÌxó9ÜñÊr¤á!*R#úóz©-à»]xrG½”oäu3³— ßÍdÏxbrí^|É#r®ù̯båÃËÙøULù¼â$ýK,ãžÓR–Hi*ØÇðäH2ÿ]·Š"xψÐîË&et|¥$bô ð–éñE~Ä výÇC"ÎUät]ᑱ¥ZX\÷ϵÇiUá=Ú`'_Áš»°Ï¼d ð±°zÏÃY /”½9× =e˜¨”Åd|ňš T¹°çƒø­ÍÆøÁ†;}·?À*Íâ4Q,¯)j\Õ‡Ú?1‰úU; ~•ÛÜsßH&SŠãoSt¹Tlד¢ÉY Úþ¦/÷ª¼Olöšþj§I¯!®‚0-'6Ο=Ä©ª†=x”ŠòÚàFh“–‚Ø¿å®ìÆ.Å~4£Ê/–©ß~ؾŽÖj‹R [©ˆ×Çâ?|Xm«@qw¿øU:ÓPUð«?©PÌêTîw½,ŠÞ0$~u„ü#.ydT´áT6âÍgÀ¤Ä!ãèB÷«¦>)!L÷_fs&«Ùú+»;ö™l¶®XÿfoñVüÊ›g¬×7Œ¸â™\oÁÞ?“UéûnKé ÌWLY«ž÷8Zä XûOè¶ëó0ìõÒ‰#pûÞxµ¾2ŸX曦â¸Ew&Ÿp¯"™näÓÉ?ÖØÛ øç±rLóešÎ žż~uYž4§Ñ£%?õƒ3©å|Æ´òùô'LIÕ÷|£dôOüŠÞš×VÎeby… É*«}ô°[U9ÁZèwÓq2?üÇ*P§äH™¬{‘ª{Ö{r· Ô…$†¥Éa%Öy~µƒéu~ÂÇé?ÎPÿqK ƒè€uªo\3#;Š€ UFàmf¢Òåµ’ŠÄ·äL‡åIæáÎ%ÿ8bÚÓpcò¾Láý‰Ìà#ÿÈC4=Ãi7_Q?ÉùÓÏóØ×/ÊEµ$¾¢‹>OÏ ¿úÿW÷Ò®k·Ôêáˆ-óŸÿê‰â‚Å€û} |QO¥—¥>ñ!}“›‹´¢üGÃßÚg^-öc(Àû¾ÐhGƒTjKÍOôÇßߢI$£ŸÞ'B+ÆaþG½!hÎf|EüHCt] S Ä&_k>ž**¼J*}e®Ù]{¬W KÈʳå×P“¨¢#Qý®} ‡GøÁøÁkÔÎú¹/EI‚~÷ðÇﺓ)¸sʼnÞJ`ÛÒO"J3=SèD>×Ïœæ<1¼…g(ùÇ>ú'¶WøÝ…ð1ñq]©yéN]ý Dø(jt°ŸûQ Ýà®,gÙÜÿ®|vrúïª!®yõ°q¨—˜‰ø2ŽüþjÜ–Un$fö’i±+ód-üS ¢ÝÚ0¿keU´|»C¬wU‹‚ ÏÖïnaÛ&ï7ð{¹—#Ô<3°«eš—Qc½#?q% ˆmÞÇßu"?›bü© ¶âîë°˜Xû‘r üÇŸrÕË[/ªpCkpXc wq•±?±®Û›.*~èmKÔŸƒ¥˜ƒÉaŽ$V舞ëˆÝ<⨀. > ýÇPùј„oÍ?‰<ãO2ƒ:ð;X/:M$G[æ×ž7/ ß-ïñ'¹GT¸š¡d±ƒôßõ¿zOÜd×äF3U£• Z^â;ÊØÅLÇêJþ1Œ|Ä“úó To\†uèJ®Â`ŸPWΆ7c:ƒóz «“©\uáYF²¤‚ÎfZGnüDsøsêÅc2¿¶ õÞÔÎÌ«c¾13›Y‰k^óTï³Aæ™iôŸÜÔ³à*ÝÈ{Á¨\f:Dz€þšWYë«™$qøÕ]üÛéÎÔ¬õèwWä™Á† ÙŒB–véç‚ÿï™ÔÕê çÉø)ÙþÏõQToµ,þ£™¾H/PᥤÐ,ý"5 Þä©…¼ðûÊ'­ (ab°–ŠÆÝE¯¢VïÑw¦<@EêÏk:wø[a—N‹Ö´Me_N¼3dÒ«©µÛ «ú­WÖÎÓÇGhŘøÛ¤àWûQrÏ!.úè½#1é¬éy*AÒ3 ¼˜؃'ìÕîëµ±nìÆƒwº:¬X+,òPf[åŸCö£çÔc·úA4 a­·-@¿ûI#FN‹}Þš€U/ó7 ¸AWÞƒt.±ë¿ÓÓÃÕ_ÔÖtBåŽâ,7øU>t[§ô»ÉPâÚ3Pã£ÒÉ-`MÛÅm=¹š6Œsü¬lWŸñî>a?A­òcÇ‚ø.@…KV‡.!}½Ü&.`Ûv¡x­Hþájþ‘EµPsÀ&ƒ™À·!“©Ê„«cØü•L¸Ÿ¨¿‡yè‹ÝëJþÔ›Œ'-hh¢‡¡ø]è¯:á?²ÙµläV¾¬ÕŠ]&@eϯ½ÄÓÓ4c Üw >[¹?³ù·?1c1^ý↴×:ŠÊ¬‘îä‹É_î¢ [ú´ûüEn¤{¸!. *ÿÑår2Ÿx«Ã²6÷†8Ú¿ppZùÈ?VcÉçÀ]Lg­LôŽïØÇü¨n–Ž7iNÿ«ù䇅™´~ÿv<,Øj£[ˆykÏ´`¦wA9ó§ôÃߤcîvÔKþèwçÓ××ruL`õvôpò†ÿÈCîô ßuNÚ}vÊèu‚íÐ!Ná?.Mõá“—Û˜ÿq¶Â /öekEjÿ^ƒÉLfÖë0²qTÙô@|•üè ùϺ þ£²Òþ#%¹Ž¯±ž$«Hi”¦¯!Lò³¯¹•H?1Œ|9T®Ù©ÿ; ~UåY üGJó<þ~ªt Ò?ñ©²]»CuÊž§fL染Iͼ`tmè•Ø%ï;j7cïs »êêÔʆ¸¯,½gb™Íå "Ž*b¨óz«ªé’̸ÏT?&·Ç“þÌ?O„*j¢•Þb5ÌÇZ{š°uþãúÝÌ<Él&‡³c§]b,“ñó-ê1ý•°gŸ÷!ó¾-Nš nÖz÷~3dC%à?Ö8.Òÿ*©5F^%—kŠîØüã:ÊL;ÿhEüÕô_é_’ˆš®UΓù¬ä sz\ˆä—Ÿ*÷à?®jíôez½€îTW”š`úhý&œêÑ_~ãŸþà‚r‡î :"_¬qBQ\/GÝ÷ytn©¬ÿñ{õçÙ4WâÉù¢,oüYð«9ÂP³i>¢ê$T& óˆ‡;ÏáŸv¦«3Õ|ú0âq{¦xSlI3˜†‰Æ½ Qéq¬©?YM6li}Å?-ôŸ¿Û®yé± ia ï±b}øà¶DÓ“Áæò) ä_DÖïÈÅ:Š?ÂÝá:e8‹¥©@dé"/ ÊŸ†R|}]ð(ù௉aøªbø°´R?7Þ[+KÄÔ…Hü>¾ÌƯ\ÁO©Axba7ã?ò¿Ìò(•Ø›Ðï& ³Ž­¿òÕñKA†<ð‘‰ÐíüãO#–ËNnW+  ¼&“˜>Ëtìçv‚|M¢¾´dI®©.ʵ¥ø£ò`kˆù×µÅý ЦÄ|éäè*– n2+_5#È2ÿùv ýršÀ”¢ÂÁV¿¾‡ó©ÉîbÃJ´'ð©ªÐËÊ?ÿ%€÷Yˆÿƒ  ÓÊ„X²‹Vþ£7ŒÇEP•êä–¸š4d·àÌ7PÿqýÕ)¬k8j;~Ì ûÛÿt^61’þR?hן§Ã¾¸âö±Æ\®x \Šfοò2ì£~𠬉ÿ˜ÇI—ɰÓk9ƒ“Æ2£uþÜWëÄî}ÐÍ%ãZ€&à¹\ ‹r|­µØzŸºÌ?߆>l4:ã:<;§ØùJøŸ¨Dò¥CàWŸõëðöüóAd>sñGÉfZ“ |•¾Ö jèR§1ÊÜ"7˜ïaU6qª=@؃R=ç»ÙAø?”Öê,¢€Ù ™Sä_2­ˆjä þ¼>¶tÚƒtÉBF“ÀÑÂ*ËâEoÆJæ NïýÀ.‘M©Œ@íü9e›vÏøÄS;܈e¦2ºˆ2ä=ȯšÁŸ×¿2 ðI·©i_ÈüÛDýƒLͬLþ×ì~Aäèvqu˜‰8ªøeoYPè2¶•‰ùQ'ðGÙÁé‚]-G3Ïqi%#­V[óq‚+'çÏÛ²™ê³'â©3ÿØÿ°#ºÑÜßIÆ!±ØÌä Ÿ<üÇ~¯&¬Êk øUBG>kÝ`*Ñ~s{£`)bŽÅfÄ”½DhSrB<–ÿÏÌ­îTOæƒâfôÞG›ÔãÕÒ¢ß]ªÿ€_=¿Rìêaø\j`?šðV²ÿþ1ýÛûˆ0ÇOESbûtô¿:OÿcQOäBÛ?Ak®- ú9Åð±é•ðò×è‡ò—È[ã):âÁ³ƒe4&ês#´bêPrë]QÄ'†nC$^Knî~Ñ›p÷Ï?ÇG¹R«XBÄ`ƒî%ø÷ç5½²1˜H÷˜Ø ãOXȲd2#¨?wÊ#k9û‘‹µŠ~µJ&‹dDGþØô{h:¶ðÛ]ðÓX9¹Mf´Ÿ~b*•19ÜúÁ>Z!l¥=Aã1hy>p¬ x‘‡`kÏÙŸ·±|k X› ùGQj&¯éÔBaœã7eê#J³«µ°;gð_ ±Ðåðp©x³\Œ¶ØPoüܲ±+¬½‡÷½Øåeí^ð# ø)ªÓ Í$§º­·ó«¢ø‘¼ÄåßÈ [Šnú#˜ïú\ó`¿ÕZ>\F9~!®¹뵋Î%'©Î.^ëOCç¿Ö°Çd æŸo q†g5…lm¤Q™Ï¿F°§xš|Êjka(.Ã|ßfÒ¶I¾Pc.'Y‚ÛÎ?wO3:†˜õZëÈÓz›¨¼~kù‡ó?VcïïÓ¿}¹æÈCþqEV!â¿ÌÌç~ÂÚ_B…ºÅ¨«× ¾CòøÙgtå*ŽÇ¦Ï“š˜¶fË—y¸…Àr–[žðÓé¶òžuZpwÞ“{,–—ÉæÉ?** ÔÉFzð¼;Ä÷ed*‘ÛHÿ¨Býyc4][ñÂJOÿõ™ C»Q+]BEåAF³C¦1Ÿ vë/¥±ÉùÌœfþù#vwœç*ýKvŠ¤ÔæM$ÇÊ…ÿKÇÄxÌ•¨°R’=,`®‰þêu,{è/Ó ù=¿§;dW»éEþ}E+C¸ÈùVIG4¼d:Àg]zÅôßnÖuë*Û1ø•ðçÍ42.ÏÁ ¢Ø±Ì ê?Üõ{t„èMv?Žë¨YÈ1ŸJÆ2hnØÝ¹¨ÿX䘧RÌ:&½¨šlGýÇ!36þ#Vh.HÙU„e9á¿ôMbòÀ¹­”j¢àÏE„?÷•rSm¢#ÿ˜«w èß~KIÇìÚËÚ%Í—®Z‡"¼’ý^U^jˆ£cÃvV3îÒÃ73¼ÃEÝ+šHtÑ·…Г„·x-;Vtþî¥Ë#ˆœjí"ù‡?^ªXÎ}D„®ÜR§Ãt!šÙƒÝlF…rm"”¿ŒÛ P“°^ËÀì{ò¿åÌ:Þ¶øû5Ú>½ ¾-8Ìq~;xu%c+¾'3½¥®rÿ\Ð+X´w‡Ã˜ÿá)Tbí÷d4±€Xgò¬QŒä(úV›:”þ#¼ú‰y®€u\'«êˆ·ƒÝyŤIT½ ºoÌ»‘•—ž0LTª¨Ø,†fÏÿ¸ŒŸU/Oæˆú¹Xäq¥±G°Ì}ØoZO¢þ»L°ô åS¡bø ~•WžÃ«y‚ÑØþ#{äõÍE9ý,¶³5™}oxõ!¨óâ7mþü{(øÕ¾€üÃto#þ##£öaYÜ<Ô<_é¯UžØ6í&ùÓ¼ÜJ|§=½)Õ¨kU#Äi¯5G«Ñ‚{p Ä©)¿ÓƒëÊIõŸ/ýKƹÛõÄòÔn@‰ð•8a+øÕ<ª «Ò¿ä×úsÿ1š{¸„ËSÎßFäþœªŒÉ¨tŽR>ÕŠŠSˆú™èŠÈLæC>Ïî;Òè¿òÁÌ%ßM2µ„ˆýºaOæXJýÇMÙŽZÍñš©Û3Ù[C&lÜ€O k9×Ä(¢~ð~¥à "‹¾ä}ñY­ TžÈ×L/a7ɬ¥Ë–yÑLÙ…Ý‘·á*<øn8ï¼ÇÅÀ¯¦“ùMç莶9Ö6-P=bû t09E¯õϰIë¬ÂÔò_²Þõ¤Š%xà90Ë62—±Ù¹Þe7ù‡Ù3tó“!èW+KP?X;<ÿ*óGå'G×´€©¹­V ŒÅð͉̎hŽ‚™ªT³Rÿñ&µ)‘ÿDº«iR|©Ö÷ÑÏ÷2ZÛúÖMúw¢ž}¶Uet³”Œïu£3Þ"j–¿;óÍêvôW}ˆõºÃýÝÛÌdŽÍÖv³,•ŽGŠeåt,tœoKhÍçñR½©[9l¦•ÀM®U4#Jê';¯ø÷MvõñôÏÏû¤¤R3:úù§ûjRÉÞR;‹þjøUEV9‰ÿð¡¢ðœöüêTÄ–ùÏuYùF‹üì½hh\Gì¢N&ÿØ.:ˆøLfꦅoKƒ~`|Í…7x™¨ 6²Ó¨+º‘D¿j"þ¤:²1^ï¡+7Ô¡jV½lÀ "åúT;/’_°4†¨Cns«’¾ —±RdŽÐüóóÚ^={‹/_E/¯ÒèxeÏRÿD|û¤¨:ÄKºtµákS~QhøC{"ÑY2˜Õd3ËÈ–ÖÐ%'—<ó½ Þ/½±\ûôBù¾šVŒªØŸV3;~.ˆßeTa‘¨A»2 f~j™•x¹½ðçY¬ úª¬UwˆD©K@ŽÏá?bã! bƒýá? ¹æ7ÚŒ•޶ç3ÿ±Y{ÊÎR«~ÚSñÿá 6tž<ÈæÏ3ã?¾±«ê¢£þ„N¬ 0ó•ÈFñw¾">þn(þc üycq‚|a9FA8Ž~°*Ýðl›az¿b)%ø~,ùÉ¢ì x½µøîD¹ÄÊ_üGc­º(?KJt½¥ª7ÿåüÇ"r†¯0ÕPŠ&0íþ»9ÌÔ_Ä&çYJ2–!üùÙÏâ>Íâ]è‡Û‚½}&W“‚ÿxއ˜NuÁ °ŽîVl󌬀ÿ˜+žžþ&¾¡?|×ð«Àúû0¯k5ñ¨§ðµÅñŠK@¤|Ñïî1¯Ã4Dj00³cùC]j¨½Q¥&?z 7í.}Éï¾juƒí𥾋œÏ>½yÆFøõf;ø5Ñ"ç;æ Ø†eèwoc›gPsßmÖeئƒ¨y›ˆgÎ{\þ|4žwöq ÿ]g‘þí&]g¿™ àäÃ.è :y3¬¬ôˆ¿i=ÃÖ$ïØF?1OÖí! KœëÝWnhöOO®7²yŽz²²=Õ$ïÁ™&á{¢5KâMWøY¨ ï˜¬žfd³gk˜5äfð«zbªózK¨]u7oA ™N:ÄY™•^a ]»¡»]Ìœ¬ïÌjÃ<ªƒœÝ*«-Ýàï¶«d‰ÞVQ}¶RÜwúuàò÷Ð(à=‹C&¬êàinô¿:kÆ ÓÊGuâÇS6‰ÿxLEÈ$”ÐãÌ$ä™xòë£,_ÃÄ‚ëÎ+þß}“ Va±ód"«Yÿøkj}²®úÌÿÔx(ù¨'|©ÝÕî¨qÕ“¿uQ·¡w§fÎžçØ€Ùâ1ô\êlÕ[?ÇÙgb¶u»ßìUD+ÌÝÙB.Óç¨Uˆ™Ôxàçv?ÀäŽ Œú`ç9üÓV£©Ë¨lÂr’ˆ²1ùG-êè0³¡"üÇ%О¸|R*ž’šÿá¦ÝÒˑٹíE˜„RäYi,øÐV/,«°Ú#üGEQ9Ü®Q戓âu’ŸŒ,XºîøŽìÄŸOÀÚÚƒŠ_#ŠÞD?Ñîø¤Æx-Z8+¶ÖªqEM¸7°è®d2® ~g±÷±` ìùçKØëDú­¿ÞËTç²Ì ýübaÜyå-ìî`¢Á°ÝÝ©ù[JKV4€¹<ã}˜ o} $}+Þ¥(uýžZhoF52ü¹É5¿òâ·rbãÑê‘ -0Jˆ‘ú}üG3T̨êíI’ýUZ<´O(þc³’Vï".ƒ_- ~‡Æh ^ç/bê9ø÷ø‹܉#üt_`ÏíMf7ûÖ åý5ä9VÔª {þ`¢ö“ävÿ«±ü´™þí?älýY3X½N]€Ýß]Å·/å“–àòÁ¸‡8ÃÚWPÉÑÜÓ%pÎgåž¿Á`Cþd-íѰž3_D‡_(:4 ïÁ´0Óσ ªí Ú?ûî\×ZsnÂä$ãéM\ñD®¤§Ò^Öì€5µ­ÒŽQè¥JÒ!ý&Y@ <ÇCò†}<í;äzp- ¿~‰gà2w­7ÿe/c'ø•¶ùˆ”æ'ð¦šô/yÃtØqäWM»bs²Ns×Ó]7œMqæŒãJÇÉÇhÌêÉV°ÍÌfêûz³æús%Ë ž†aˆ“‹yy#˜'¸X ÐÐ…Îõ>ôo*=¸c_¥ÃP¦Ôìç§¿zgk=æ[ÓIkÿMâû-Ta>4ËÑWEo»†¦.zÅ“L= ¬²®~¥`7Ú‡5GÖ]ÆeB‡@5‚\á,õŒŸQØŽ¢Jü »[G½_mîN&3 oÌ ÞÅ­ ç—„î| ÝÕ£úѫі§ÄW0‹¢ÛAM?31uìc¸Óég¹—êÄ) iA°†š[éŸx˜í"­N…?Ï‚ÿį°ë¬!ž\çmç›XêMµvCë ~ÕYkÄ*÷•âÔƒxkµ§h:ÝÃùýà}]ùªuBs”ÚøŒgöÖ#ã?Ñ?ñ,sã‰fzW-bjÛŸ«–‡ÿhN¿b :Wè_2BPsj—¨^IK#ˆ_Å¢b?Þ²ö´5HNSù’ü#kOÆîmÅ*þA^¹\¤Õ×ÿüøøº_;£Ûs™²ÈGèšac<‰(fèr,rLòÄd ÏQ4÷Þ¬£‰'u3®xž” =ÀØ2’=ÂJ·@å㉎q%x'lJRc…=œÛkÅÁjšá_Å$ãô2¡&¾F¬ùšý½fÕàW3É?æb¿7‰ãôeM̺֚<.ìísð8ÇQ8E#+¨Îõ”«Ljt á!HÑÞ$Û;/£®¼¤ñP?ª~7ý}…|ÎY¼ÛòâpÅÐ}å>T-õ»(SË‘…Ù]!&qžÙñù»«Î77ð¶l¦_g=qœø~)9Fdþµ½ÎdT¤Ó°/ÉhUAަSAøß¼•ó³;u5E!–ÿ!B\sk­Z¿&è¼°¸UAvšñ´$Cyû€üc55kÌRp¾»2 €Ýr%_'À]dÃÜ ±Þv-:ÌSO#7a7û2°§Áä!ïØï@°«KT ¬´úÝ¢ÔlLÁ«2íŽõ'¢’µ;R¶Ò&[ÑO«Eþqt´ >q¤ô2Ë!æHê5îÊ6X¿ôôhè¨Ã_þã;KMu¥Ôù{“þ—þí¸º»ø¡h‡‡{ɱöÂì@³öë\ »ê…é8ýKîP[1fª(Ò%Ù•Š’Þr°¸à¼”®êlÞ‡áœû4ìw)žç¸hj3ÿ¼;þã<¦RÀTKGW:£÷5ÝéEŸk­Cþ‹Œ©+Œ•Kþ\SwjÉŸ÷óŒD5?Љ´¸,uϪŠ"¬ ¼üKÔWè’ ýU{Øø”ôOŒbV%[üÄçO¦â´ˆ8å<¿|jý³ÈÅ;»˜w*®(%?™ùÙY£ àÛìo$5„#Ñïƒÿ˜M¶P—î]Ù̼xÞo<ß›é¿{OÄp>…nê)t¥íyW{àA£¿Ê2·Í,€6Ù€-od=µæ8<Á“YWè_RÓêL'ÊEftX«4ÜÃ.ìÂß%<œ'ø¿û&3ªØùΓ‘`áU„µ7•úóÚðç=õùz—ÿq—þ%ÞÚMf ?¢Éïñçg•ÚpüÄhf ¡ÁùA§ÌéÚƒÿH)êê-Óäײ¡ÀÜ Šƒdl± í¢]-©~+Jì.`ýGBôÎqõJD¼›±žu±Ìåå6P1K4 9Jñ”,#µŠ©"TÿqD»¢»‡Ç!ÚºŠµO"Où·¿ýÆÿß&/©@Ì]0àº"xÍVhwb2U§kX ø ›-ïÀŠ6:v…ê[%êa¤b·÷É?è™kŒ·I­<™KS¸"|p|)Xï)3Tt:6ù‘},¶.3L8 üÌåZ«³~0µªÛEvX™eä§`R±^Y®2ö3.oAIù æc總ðþ‹¼Ì:*ÿ‘MEýÇ-~÷Q›'÷âO¼\ vùmW-QE?Nsê?ìîó°Þà?¢‚w¾¹'詤b~íy¼7½Yá9?²{qèÚdL»øíؽUò>×¿Š¬k)Þ´6511Å5†óú{Í.àWňPS“}¬Á‹=å¹› &³S^'ç˜h6£–ΕºnÅLk®iŒ}ïÒ‹ü'ž[±Þ:¸ž¨äP.Ø´x¡Ä/#ñ`Lú„iÝ~F–Óš†÷ÈÁçìÀtKyZi­x‹¼r"¢ SY Ù™ƒœ ¯¿ÿÑ~á~1GcÆåÌŽ°è…à÷w©Lä<®c‰3é%‚­'Ű¾Ó {Cùä¡ð[±MÍÁàu÷¬yXæ£æfÔMö”‘«ððÐr퇡ڎÿ-n9oFEæ×ÚúÝáxê±²¼,*b2·ü%;î3mk,< õ)ô:ô£²»­9˜¾Œ>° ;YsˆØNΰ̤þ㮲ýîKž¬ÙÆwŽ©uÉÒðÌûaŽ0ûâIFÃ^œ$²_K7^3 þ– nRô»Ðì*ª+© ©ÿÈÈS7Ù¨ÆtöºR0 1U—…­h¬yþèVÞ›kŒÒn5ùÇE3¿™Mþà}Þ„x)ÕÀüÇôWÞ¢ïDG²Ù/â°™Ü1ÓÚDþ1k «zZÓ}ч³.ÊÓôã­dÍ@™7) O>ݱñKþýU^øÎ'á‡Røÿ¬ßêCµ…öM¡ÕÛL¼®ä¡ÿîuÍK{¢&VõtÎå¾¹¯¼ þ<2ýT_ˆºÆeÝÐ#©ÝéSy$2 õƒÃCÔÓþÃRUGËÀ»¾–¨¡¸zYщX>®ö„8\¡/ƒÎk±>Æyÿ´Z &6&Ð+ç%rnbøRý¹;ýMÖ ÖžOUuy´–SDþÕÓÒ?±:.»CúBPvò¡Ù(o?ƒÜ†W¯ÏlÏÿ¨/J†»Ã5Êhô»_É?¾¢½…ZƒÝF\¸þ#µ¼º³˜g{MdÌТ†³b7­Šq Ö£áÍ^ra1s¼„õñdz}Û@þ1_7&c-óÏ R+úùÙZs"'¶t)¶k/ž#.û+ KúJ'¸îp_áVÆñ)ž…K©??’>Œ(rJý§¦tLãùHj'2hªöÈZÆDëTPn•ß©2¹Ouzg3øUXØNFîÉxqÆy‚ÿ»o²©gÀó~ž©æS38úù§ûj¨ïÕÁÚk­7üyY­6«ÜUòk¯4mvC•¿ÉŸßQ|A^’|‰Œ1úWí£ò§º™R™Dtøó!ôìáí±ºÿqBäDG¹ÐH+š0˯!õƒ-á¼D$ãŠè§ŽÐ•ÇV7â?Ê`Uí±íÀrrP=Øœ>7ɬ߸>ÓèNÏLjõ/9¢g%Ú/¯åŽÀ*ïæÉ„íù/º ƒ^ȈN¯ªGxÎðk^<•ÞâýK*2?Ê ¿íÃóòd>!몎•²;®.cmClýNlÒ’…sÍãµ’0ð=È@nƒZdDzgå™}Hvó€ w?¢©UäXu(™ÉB1_o&ÿ_½§Þ±à¦[oJÌÓk”oôZtÂæ½ ï˜ÇŸzbÝzóYt“C¿ËlË_þÉ©*úEñ„É žâ ~Ò®×û¥@4®{¤h¢ïÆÚÕ‡?ï 8„³s¯-îÔ|相èeðÒâùÂâW{NÜ b‚ñtúZšûZÖ¨@¤<‡øö1Ã6ž¢)d5µÁÌrÓÿ*wˆs쮕æY«ƒ u7¸T}8“VäT™ˆoS>ÌÌa4³Pë¦ÑMqª,+?€àõÀò6‘e,#²¸b½×šAáA ®dk¸Î¬uªÃa°ç@HÒö¡ÌfúƒÀ¥#—y"ÝdlóF®¿ƒ|þ‡¥×䄯áKâ=Úi\§cú‰\—•ˆë/Z­Øôo¿"+šõA2¢mX ×òù=¿>±<–‰)棾G^:‚Üg¹±N.Ã2—1gâ#Ρ7­«pÐzL>3jù/ðRõÈó.â ëá¡›ËAú'–Sú«£P ÄSÏ&ïé(Ññå¨ /eV7=ág^› à¿»á1¯ÁÚoãìæàQ—ñ{Íåدõ´rNó"ÂØC¤óLzÑ_ôUðƒéÑ’ÒšŠÏ,g°ª ¹ÓßvšI݆ånŽüƒlËìq$ú«Jâ󎤧ÿÕ'”7y> KS4“M¨Ob­av­ÃºEç{|G=ë,ýVºÓÿêU”×,¯ö’¸Éýî7áçäϧSþŒ(¹hx}"µKæªáÇ¡5[hƲŠX @Â;vÔ§\”wQ_M¨£,Fþá\ž¬ô*òÀÆÏõû»¢` ™Ùú_%vžÓï}öGú_µÔt½ ý¯jh­XåšRúÁSèwŸ¢ þ½ùQ·”[Za‚+=Býí®'Ñ µ•ꥻÑI9+õ‡>!â;LªEâœ7‰”X˜YàW-DÕ¡=áÆÜDR&QŒŒ ÿÐàa>kéà×ñVª šÐüª3ùÈyâÛí"…á IÄôWÛ¨?/º»j+ÔsâGjÂ(Œå]œƒ•Ä£ñˆœïó W÷ÞlV†’D%*ö¾ ³Öb,Ö~]žÓŸǔëÀ¯&=Ç4æj±ÃY±“VŠ÷®5~ÒæF]‰¢ ðÿŸðm‰Õ¿‚€,ÀÌÄf/‚Ÿž'6êyÕìa¬™þ|»H*±ÜëùBRPèƒËJË3œÇGðš]ÙíaSE¦éä=·EÉŠ ±Â+«”w¬¼‡uj%úÝÜàP.àWÑyV=ÁO» ñØé?¦ªwAb;¥õቹ(N›ŸùiðËMÛ#€éŸâØa¦_ä ¹ö|øÕ<3üf "™àW&*µ;?7ø?üšžéõçÁ¯þ¯ùÇSåªZ‘ùç}õzíu”—’†~¼çÉIn3¿Öí·®ê„rJ«(ÞRò\”¢†,%ó?Ò§ò"þ£0“ýFj­÷3" ¿T ¬òZPËfا:bœÈ¯&Ô¼Á¯¼Ä)‘™*©äÏu°*õ¤X¬¥x¢Šd…ä^ð˜Ozw¬Þ ¾ÛÄ„š¸ÆTQDß­Ð.êô.Gt–gk é%¼Ò þ#WÁ:¨²<ó}ñJü)Ê…{Í‹•ñâ(þ£&Ñ` <Ñ_ Cɰwa{ÛˆùÞÖV<½1FKΊµX‹ÎØÉ›ø ì¬”‡üã#þã½jý¹úåØÒ…èyí>¿s…»žF-Æšou—H *±y ï—ýÕà·kRÍ^͘…~õ3ïÃ2l½;þ™‰íà—ÇÁ¯µ_õÕŠÛ &çÙß!®Óž–Ûžœy„˜¦û‹Ž‹êkTÁÒ`ß7©ÿ˜J¸ÊÏïvÓ/'¯¸ŽïõINŒ=ŠÕFsZ¨"É‹ß-‹­ð€­>Èï’uMã9̹”†íÞ«Æ qÍ´ª¢0Þ;=Z©yäU^ø£åpÂë‰h5PötxÍ.,d#üÇGðË>`míñ6®ôRÛb=E×ðÛóáÚìŽ$tG'œN=øWö3Šþ»[¨écE5¢·mN¿ÊŽÚÖŽ¡<Ê)·Ó‚wçù€ÿ˜Á=ˆÛÝ %ÔMÃð6ó*÷ÊÑ/÷.hI Ç,˜ó6tˆ:Gõ‡Ýÿj9Ò2öºÈÈ«ŸÿqG_Ì3áÍ3ò7~å&à?ÚÀÇ|—û¬–ØÀ[Ôm¬‡ëÙ‚ÿø~U“ë½JöTœ¬“$¼Þ ¥£RGíEGµ9XÛ°OéDê6ü¨üˆZ·=ÊÃQ¸Zq#¬ÌhÆ^0ÍÖf‘š‘!½¦š¾-*±hF vå‹â¡½Ai¶Ÿóû!¿ŠÔ¢§Ö‘ù€yÑëÎdþÇ5lòpæG¥ÁŸL¦³L4²Ã¯ôa±«=ëÊ©¼/.AæfR;ëßD1TCÑ0dAµ÷Òüvå?‘Ž™˜žr„k¾H%É(¦ ϶RšîtË,@-’¨÷NQ -pþ¹umñÃy»–¢î؆b통Šé[+Ì’äH1é_2ɱ—ü£¨µD¥ËÖ|«;Ê®¸dµ‰ˆ¾Æ2™AÊ6ÿJÿDêÂÁc~Þ:ýÕÿ5ÿx§xÁ¼Ò:é£ôÒZ;Ö<­äÐú.4½WÐïþ~C¹LýÇKü‡šýÙz\ý«ÒWݧo ûH/Jéûµß«ÿH~\“Ì 8ˆuWQþü–hJ7šÃtÙŠj´×ƒ3Œ?Ï$äWÁ½d𱫓Q0ò¡“êOàDÕÇáW®‚¸E7&‹Üú–¿ÊÏë4w°„y MÏx¶&â5ö¢„ÅŠŠ¼²bTá/‰XjŠ5¿¡¬¶OéDýG\tHÉ?¶ɯÂOôg5ð4¶Â2¶œÅjññÙáæƒÑ_í#.j‹o»€Âª : üñ'tÑØñÞÉõD²ö¬’øÆ4±L/Ä €P6ÆE§ƒÀi‘€wh.~¿‹jº'¨ÓF<Ñ[¾N‹‰ÿÅ®ç,’1FcNôE-´Ì<“úF{-nÂçÜÁ¸söAÙJ±ÏddYÄtýŒtk0ƒ†°Kƒ‰Ò²ÃŸGÁÅìSt½ˆ8 ~5 G>a=ð5 ‰÷{7.B V }Ï$¬èúð“ñJåáƒ$ú«3”šÒš(ãMóŠYØzBõ`=**F“ͤ´²9Z£ß݆~×ÛŒÇN›rw.¡hE'Åç"°v7†ºU»Ff´ƒxàLO/ÒÚdGU@­ á'þ2ó6µ§G°‡…¨:•{ßè¼¢¢¿šÂVEN"cM¤~0…:Ž~U9‰ÑZe!1JÞ0]ÑF ¥‹dý0Ó¹d2üÇa4¸=èŸèjåÁÃç0ËҥƇ'uÑë áéÌ?N¨>àW¨pñHÕ3â!›Rž“®4 ¨l¬‹Ry†ã®u dm²Ü§›M•ÉR3>w-1qá:Û}£§_hYzÐ{ôßø>¹êNÞŸ+[¼û)œ?ýüÓˆ}õWN«©õè«ÏÖkøµJnfGÓNÃÄýMþÓžËñßø_z~Eƒ“‘9Áã˜?˜n4d=mx{Ô°5Õ 7‘‰X”) àWíÔ×ê1Q§ioúc1&‚õ_•‰tîKŠ=ž6TžÈ7µœ:a¢âLd=“i9`å§‹¬š_»–úó Xø˜d ×x§ãËcDæ°y¯ùÞðÂpËÐTýùQë”Áä AÞý±ï×À‡ÀåÿδÖ(I-„;(ÃzÖ7bÿñé²n!ä96Ör‘Uu$k»€²© +壚ñ{{GÆt Û¿Š•&¡b^Lž³F,Ñ‹†É(êu†ÈŽ*lÑû9ÚƒÛâ甪·öRx‚“Ÿ%¶?ÃYÅd#7Òƒ;\M¿„/hšÒ–|®¾ *6É Ÿ ÅìVüµ|â5 ó‰™j­i‡Ï‰&Ò‰ld(ª²d“Á£ X ^6,ªHTúïj!ÞšjZP—ÞÜO¬yI”­x2ò`}¯£ße…ùÍK´ÿž ó±‘ßÈ|zƒcuÆšÇ`ÅøÕƒÿ1ÅH?ëÎ*6ö4‰êó{x¤þxC`X3©t—•@îçÒ)xÓÐ8ó¾ ?· ?9.`=wy«=7VYåÉ%'ã·°ˆçtµ‘B¯l½ 䆼WÚ7ÄX!÷Ÿ÷À_3qÕ5Ú Þ7"GÅln,šƒV°Ð­©ó¨hVE-ÕVú’^š:t¸•¶0*¥8Ç;< cøôhì~.˜X¤¿çîþÁ[Z榆¼mæv”³Æ3Ðb†È1¾Û×ý ]GúÄ´ºÀŸç43 ²óÆ÷î ™9ôÒé?ö¨·À¯þâiéÏÝ…‡×1šþW¹¸æ$ðúuaú';f£iˆbÍ•©ðš³­út%³WËÄ{ÔÍF•Lh*“Ÿ{þo}Íþ*Ù‹¢–ø… Œè'K¢ËÚÚcêçéUºQ²j´ƒÚ5í!õU|VDV<É\¥ZôOŒD̘ҘEÿ’Jfêü§¡¾J,Zè+²ˆ¬ô÷MÄ GÐ%Õ„9ÎGýy+õêkå#PUöMŒŽ`þyñÑôt Uó°"5ÈŠ3É…X°„¢!é ,Í T^ñŒ"‹¾3Ü¥yÀÆ!ÞºMü6”èù(¬ì bWâô›àW¥XÌG|HýG3ç3Ö›À¯ösjõñGÑÉ6:“¤&¢÷ÁÞÕ€ÿ¸‚îvg:k–ÑØªÉpV •¢·A¿{n'?×Y„üÃnæ)Üòy¢Ÿeð@³Á¯Ö“óìaŠc!Õ5Œ5£«Ü®<õÙÑ9¬z ®²>>(7Õˆ¦Ñ[f÷ß@\¿›óÏçÒ©ÄOV!yô»´ðGde:œ_Åd¡óÕEò¯õøÖõÔæö,šb1ñÄ5òP{bàfcŸÜû[ÃÜÂvÍÀ ½¦ü¹»·{‚O®Å.Á€LåD›=ßt¾+••îê0ÔÓø¤I²ýÛ‰YèÏRúNÿ’–ævêߘ9©¹èd•ÀŸ°ŽÑ}*·5ô» fWAþ;œë½Röá?>ñü.1♑Œ†¢2™[[úI¥´&ÀP”£?a3z¶œaªÈ t½÷Ì8V7r¤šxjÝlÿ±Îäóz3RþŠ=Uâþÿ%s ]ZVjG*X™òT¥<‚ÛÒÇɹÜáõÇ’ö±*Ñ?±°™KF#NpC͵üê‹ÓlQ=ô§¢;ÙG{âœKâ„iÀŸÌ@_1l-ú+Ó1˱‘œ0-ók¯Ö€·™cJnWâ­¾F10ÕzâšóŠÿwßäSO Šùùy~J5“󧟱¯~ôO,ƒþª~˜þ‰ýY夒Lû¡§ýók¯:òš;»þ‰è¸fGž²Æ6òÕtÅ="ßÉëäù±«¾ÖVôXóQDl+•_ƒî D¡0Œî§JY¥²ÚŸ§¸á ÈìÔŸG¦þ£-Uu¨)YI§)_z&r ´ P‡}šº’¬¦Œ<ºüH70;ÝXì\ï5=JýÈŒ<ÈAÈ<Ìÿ‹.›™-•þ‰3Á¿ Zωòû’'d„µo] ¶dœݬÊÝÒÍöh.R5Ø¥#µ:Xÿ‰'ÚËŠ~÷¢éÿ±ŒšÁ`i]­XŽõôÖ:¸%]‘»Y娙Ìe–¿zÅ.Žž¾Nÿ±™¾~oÅÞ…ŽÄTnâúÝ!ÖN2–ÝÔ¼ÄgÊnJú_„¥ImM_ð¾ðçÌtÒ—^§ŒÁFEò~AÐÎKÿ¯Süê Ó†Hµ@ØÝ'ÂÙËGÅG­«©zo}ƒ^Gëà?òiñ˜_ûH»Š¦ó÷ü‡ó?:R—ë^ÎØ¥'Óß(¨[õ­¢²p¥þ|‚Ö˹ëp6ð×ñÐ?Ö¡AQlÂ6ÃUôB¿kj‡E##6ýX«¡©ÐŠ&þ#ª^…8w'Ö¾*¶´jJþÀ<„ (¾þíñCå©Ù)oq:ëÁ×qBÌ?«Ïx&ž‚_¹’Ao§Oâ~´Rûˆô¯[½˜×qÙŒD=É|T·Maãš;ÃÕŸ¥ZòÔ<ÈüW¥ üGltŸÈ±jÊr"‘šþWõ­OàAÕ¨c_CþáJÍÅ0+gþ’^b›`Í—£H;EnÓLF vå¼²T{ ³ÚžÎ9…ÜÿyBŽÐ ïX´®Õ'QO-aÈiôWmLÓ,ɵF6ÛÈùÔå³ç—^í«¿¹¨ZC|PZ\̨ôoŸÏÌèô/9GýÇBüÑeòÔ³·²™gà?r£bûˆÿ8,&’\púñê5ý‘hZúùóIñšü£ýK’2¬>­½õšÏ&úÝ Ì¯íF²KýÂÌlEutÃ,2wÓÿª„yˆ«Xx^¥úÝ@ìøŒrZ{If´øî9ùÇf‘“3+@—ÜÆôAo‹Þö.üù:~%G×4ŽN]Y™kšÕØÙWV¦”3ˆÿH£2ÛÍCâ–btWAíejŽØäcéà{ÍÜI¦°…œË›gP/e{N5GeüÇžl71PÜdRçÏ»±Z½£?ý‰F†€`©ÿÌ|˜:æ-úïÚ¹Û+k©ã>=ýwŸ2‹k<¼ÏJ3:ñ[bü¸+w  ý\ù¿ÿ5»z9HþñùQ©Ã±(aíÉ_¹«¶Ò>jKô=úˆÿáþÿ÷ðU\Ûû÷ÈÞ3spwŠCpw‡àZÜ‚»((œ`I€àÜ)î÷àîîð~'÷rBBÒ„ûïýµŸ–À>{öÌ,yžg­Eÿ]]BÞëtõÝÑ_ ÷û'• nÞ™W¢½A3×®¼z[?ÿQ•Ù@£Ãà¹á.òÃ7cá?Üè¿[ŒˆqÓézS‹÷D½(z¯¼u%ÚÈ(ú8 0õJÄ»°"µ°s Œ¼Ù)EbñCd öŽÓ¹ÒCfü°•0_â_ñFSÀÆ¢Ô9T³ŸS_þþX΂HmØs^åU-"½7«”5øt Bq°‚Wð¾DÎC±¯›à³'‰ë¶Â ÄNgó"íŸØŸúCä/ÍxÿîÂËt"ŠOC¤ÅG*²…µøÛ‡d1–‚‡m§þ#G„ýÛ¿*'Õ§¢$ØÐP¯Kè¯RÃ4Àòç¯Ï/‡1³â[°]þƒÓ= nÖ™Ž)‡Á¯n‡93û·ÉÔÇô„r¥ñ»ý¨âôëjÌNÈ `ƒÄPý\Â_èN»Àt¤§š=)în8þc#|[9ñ{°‹VÐøÌ™5ÆÅÆâÿAÝþI4auÀÿ—¢ýJì¿oÏì‰qE›“0Ìi¢5¿ÄÝ|†µwÃÓö"* VD¿±T¯-Áæ]c^EüGê¿Òã?jŸ¬0*¢¿:f½{Ú7ÁLdеðþä÷ä(ÐÝjfA ïh+G=ºKMáÞT‡ ¸BþÑÕ8„ÿfþy€Öý\A ‘”¿“qX>¤3Õt¦~?1Š£½ úRÆ1¦» ú«3(ȲQ=xdh=׿‹þ%%Cíðª>“˜â*‹Vøšùr%ùÇ:°¦#èüá\éµùƒyØÒ×d†-ÈŒãÀt1Fý >­ÌüÁþx^o2Õ~¬V OœÓ|æ÷ÏKO_æF)0ò/Q¹ÖÆK]‡—/mnãŠWà?ì+¤ró™¹Gýà=;ìó}#†\$šÀ©Þ1ëÉ,±W; ÕÔ^üÓrªÙŸQõ=EWqê4¿À -d&`^1Çy½Y™þ^¸µØú«d¢ˆqÃÌå¨@ý`N:¢ä²¶°¿Ýä6÷èæ;œúV>óúÝd™ˆoöˆiâüó£6¡¿úÄéÎ32ƒHq«yÎZH­Lyú|Åÿ Ó×LÇXP«zV qØêCn3–îÆ ŒSØ­­'ûL`RÃ9F¿êf7OÁÛéBfb<õÕpüÇJåŽVV\ÄÂÏEOKó‘ÆP®t 63-9NCY‰¾S ñ'OÈÄlÝÀt2Ö(Jˆ“ªÃi]þµÓ–Z)TÜ­A×.·7!&h• ì lÒD&¤z ¼ "ÚÏŽÿ¨FÝ}ròžZÄÜ«áÏdkÿµÞ j%SðT"ÆÞÄ>Öƒ'£Ê+´X˜;»úsÍ9ÍüÁç\wA|±‚šj<(‘÷¿]üê„Ö”<ï:º‡òdiƒ`¾ï0Þw@Ä\Aì¯Áþ&rìÀÞwÁbãÎ&Ú†þj&YÁZú'V uÅ7ô±ä2—È™;ÚJ-9‹þíSQKmÀî)ÎŒÀmÔÓÅ Þ/na9Yò§Ä÷ÈF‹3Î[\þc0ÙÌ$"ƒ.pBåÁâáuÊS[QM×N´Rº•–zmO›ûÐÝæ1×S;ã‡ÏÜÉ=ob$“Kœë%A¿ûÜö(OÁS#6h”›Ñœ¬C0pÕ‘A®&£8h™ä#3©2‰NÿD[¿»„ü£-j²Ý"¿Øê¼ÞLêHüG)bÇpŸéEKC±~s°63™# u.éç{ÿq–¾\-™&5ꉯj–$*ypPLå éß~R½ÿOÎÛš\ç¨ù˜êõåè¯æ²“dE©Ñ_mŪj­64G{+–c,1H2X50ï>¼ÙÒèõƒÁyéÿõ/r©GQU~ÿì:“ówß¿µ_?“Ô¡ÞãO}±î<]v¿RýÕ}zðÞbþà¯õo¿¦|¢~ð6Öý¸žJO®ö§Îf'S”\Ð_ѺüÒ>3hq°õ DAþ¿ t¼»¨ÿqþã-¥*‚#ÎÓ=¢´¢CõVãêÅñë°YõAwʃFw†?o‹²+ÑX|_ú—„ÌÐŒø hwõød g‚cñ]dã±Ù/ðJWe<£jàûœE…(Ìÿ8 Ì†? –ó Nû,ÍLž±¡Á+W%ÆÝÇ{¹„3í5K+}µ¸‘\ó$­·'×y¦0áÑC¿ zÓ¨?¨ÖX8ä\ôØŠÉý¹ŽÿØÃ¼Ë"P– Â|çtZ’v Si©ÿè7€2¸ø•ˆËCîŠ]ÁâËšÝ`í3¡Í «ƒDõR î_üÇ~؃¼ÑJ*p6Sóþ‰m­™fztM‰Ìbædwv®Bä%Ø¥=I¾Ÿ«÷Çòµ)…OÊ(ŸÒYÆ üùççæ°[¯.‚ð¾ä©›DuÍñ:ˆå»ÂÎì@ÙÅ(|Ënö”Òžü>‹ÔI¦Ç„=Ç!°wµÀ +Ûö[Àsgó<[°™‚žá­Ñgf0oe¹šóÁàbÇçòI¾øƒÂÌ"Ûæ ßR?˜™§Â•ŸoC³;ÚñY 5q¨›ë„¥ÞJEð«KFcÔM“P²•ÁOÝd÷]xžþ’ÍÃøEoÅ=8ŽÖ "×Ôæ"©$@–Þ¥PÿÂÖrt7/ÒU±7(TÎyØÛ>_Á{¥ã>ÿxŠŸõEäW@ÕÜÈ?v¡ß¥_;l÷U²­mô¿Ê ¾«ìO_Å TÈ»ã×þäg‡ñ˜‡À÷ú‹÷¾Ê`µˆè ã£lÇ$Å ¢´kéšS?×6\÷GøïwV«Š¹Ì\ ®•Ñ<Ê)o†]:HWÞˆ'Cj¯2¨g´¨á÷‘\å'ûÄã´9 ýn øŽúàb©©k¡Pÿ1L):ué³hå7|ë"“L?Tt>Q&èfpµêhîh&1˜ü#¹ãwºrõ£CÕ{ò!w¦Qµd*ÕßhŸWÁ²Tàš‹š¥É1ñ>®+éÒ?q¨zô'™qož²è¯nâÙÆƒo~23P=X&eúÝXŽhÖ2ã ße ·Ki0‡…|½ÌæWÙðÿ¤~03}N…< ÔŸ§ ùÝH¤_ ê?jÀwôÕwë̓­û¥¬fé7´ÇÚKøó_›?x =¾»ÄñÏé1ò^¯ ®î©¾dn‹üG?ô»Í~iŸ¹µÔDº³ÁÂܨï 61K#žöV¸Ã%Ÿµñû‹tÏ(­˜€úÁDzÞ½ý<í¨‹¨M„×_ 1Lã8þãþ(ŸUYÉ¡#>¾í þcºÚ ¸0îÓpÊ«áycb%‚ˆ€K‚r^gb@]:æ oÍÊFq¯[‹ž+Ø[í‚•{ÉU·G•s„¸n×Ü û—‰ùç¿ErÍóµ:XäAœÚ2l<«™áM€ %a5 ¶îš1Îa½ çÒ.s„lu¯ú^d ƨþBûS¥ÚŸd!k‰Ÿ²Íå*lÙS|èXð–Ýä'Û`°³Ê‹øðòTøÇèwíy†íÁ¯6ÃÎ4Äßœ€IŠi4óõ”h9ÇQWaÏxê-=8Å›".ÌýÇpüÇNÅÒ«ˆ D¦^ÄìɉÇòé½dflõ8Ø™£\]Mlÿ"¸‡[Äís¹S>ü¿™YAlKXÿá®5õЃB¿» ä2êrÐ1{¢],jÖ†a©òa]“€È,ç$¿r‚s©›žæþ{¸õ Ñ_M fP–²æ""/ªÛb˜‡^L?_AïÃI– {ìNç¿ùp_eàÏ/-t#çœ-Ûk£BÝé÷Zsü´=Ç¥\v<î3c%YŒ=ݪÈ_Ó *±£—ÍT€CÝâS5]#SØ –·ýnh•v,áK¾k{Önä>[äÃMqKó*°»Ø;{~Ôº£[ø¨Wðç]QK¡K 7 7ÌX(:çÞŠ«:‘¾fÓŒû¨¹j‰EM©Rµ^?1ÜìC¾1‡þ»ÅÀsÚYMP?#æ/‹r w‡ù´ðUcâr¹s½âê-Lk7÷þ¡Ë?Å0£!lѪRüðåÝñDý¬#0>1°øË,ÍJ®ešö¬ù˜fOc!ÁyÅ,çùeRÇê:sCžªvFÇHmvd´VÓ©¤xÓßôÓÚO-ú1*ÙÇ¡æ}dãŠx¸œD]°÷ëDg0'ú÷ Wƒô— ³ˆEþ”+À¯‚˜Ø8‰ìÍ—ùQƒ­üôÒïD—ÇâÖ㚕ޣPGÇ2N `*gÕVÌÿ¤OÓ+i9íkJU-1þã¶vNM¢îú~\Qúõ†rOk†4á'ŠÉÛz^p‘j|&Ú¶¡Ž®™>ôë?ÒÓ·<üGqj•—ÉÔŸWKkrƯXæbR—££ˆ_Yô»Ï¢’;á'£Þ“õ`}‡Èb,¸Ì1âñû¢xØ4ð«eQ¸ÖãZ2Q‡•2RÿqÌ¿8¨Óp ‚ ã·Î!Ìròð>¡9Ëð¿©lCh‚€Å‚Ÿ¸ÊJ3ÐY-ÆNìCS€Œ7>øÕÑSHÀüÚ°ºÓ°kÎѺçÁü¯Rá1Ï” û™‚w!7Vo;þc9HNøór¹Øƒ®3›óM ½š®©*Ÿø;ð•5ðl#ÈV‘{¥7FÊ-F9XùmXÉ^ìö ™B-öxX?®ÿÈ Jý¡x·8F~t|­èqqxù2àðƒÄU=ž¹ &9ƒÑ‹Èa$þ85~3 9Cxó£Î(šNløîqp±ð}yRFbס¹*ΛZE6í]‡þ_º„ûìÍi ä*bŠ5?ùÑT¿þŽzºþÇ¿Èjë‰ Ž¢ÞM`®dæ„§™ýÕofEð«â\w2"ñÂX¾ÙFE:j s†_áÏó`·©Ue È®ËtïM BÔ ›ìIýy[ôWOŒŽ`Z^hïJ“ìÇ2·'w,{hcB­hëwI»k£+ƒúäG7Aœ¶™ÒÔMWô¶×¨î–ŽyXúaØÀ›x¸ìø£¬·ÊxË•”ÒˇZï¶>®è*ÑTK2†Sr«­fþù} +p ¥¨Ø˜¦>+o©Pftà¿xÂv0òM wñÔù°ÌRšª¨¢A?¡É+mÔçýÈþªŠõ.¿'aÇR˜®MègrÃ|k½"ºß@¯UØûu0Þ-è߾ع^zu¹öIšÔŸO•׌ pjmPÜNa~HQê?<87J’9t¬W­-t×2¬èØç÷œÌ"ã)¨˜=±2ƒ˜à¼^M¨¥A ‚g··f>¸/곓L¥3ã9ìþiøqàW~V<ºÏç2ËqˆŠˆqâ:oÊ÷ À|Ø€~¨yŽ‹Ò̳ªÍóáJn•Ÿ”ÿ¶Ô± WÉÚËü¨^tÖ‚oIDT“]îà)m@†\ëÿ¤þ<ýCz%|A•ÕyN߯/j¿>S¶«´‡ÚXÝ“þ‰Xå´RF‹«ß¢â Þ¯Q[æßê€rŠþ%oAbîñ^×+`—–ªŸô+TA”½Á¯†ýÒ>c¢¬BñÜD [Èõ• êxŽ9àMˆùï+ ° f»ÁÕì—%Ãô/¹®¯àI=FVä†Ü$W öùºf|2΂Õ„ÿ8¦h«±šJÀ¯pÜ­ø÷1š³ŽtëmL÷¸´RQí~5 <¬/ùGcÑZÁO ~°9JÖYž– £ÉŒÕÏa> ~0–•þ¼%ê¶·èz Cˆ-Cb·ûÊFí5¸­­t} ~õP¸Yáx‚¬òä#¨ÿ8‰âl&yÂk Ö#êÏûã…Kr·_²¿%r õƒÛw$6ý¿ª·„ñnlÄ+7fGJX™†V&ë”YÍŠëXLþq–úA7êIÃîŸgÚd¬ü|ï&±AˆùµÛÕ»º O9€Ó¶ø·æú¯ebá~sí̆ŽuŽ»Ìga­7îg]ÄoÎ5“{à0σNþN¯í~?tŒtåý‹|TlpžŒ®æ‹pzCd[ùHýG+üG}ŒÞ@ëŚוòÔÜÐQÿ‘D ÑWD¶’ýóóèw›Š§âƒx \ä~=+þc†úþ£½ø»éƒ‚?!*+ýëÏ$Ðb ÏY.r¢ƒ™LýùQ]Í­Ý Ð;l9à@¼ôÐ~Dk'À¤¢ÉfìÞB8´s¨‡üÈ;_ëð{ÈD¢òú$ç½àV‘L3Ê Pÿ‚m„,œ\} Ý·ð\öè\g)üG)y•ÓKé&zé_Éza÷ÜÈ?†q_2 ¼RñôáõOÜ^S‡}êÇ߉kÜdgí°7É`$Üy;/}´­÷ ®?Åø‚ˆ ‡gr‘fcGsÍýQ–a_Ya ¼ðx»úÏþ‰1ékÔ– ƒbXWÉ\ìuüü™í?ºcÍÓʬd4!Wjõ ÿ‘§£ Þh:–| ¶ÿ/ð+Õô‚ñØI¬¿’þR¾¢ìôd0¤²Tcͦ†Ý_¦¦æjEUwãé ÑÉ}ÆðgîÉÓÆx8Ù+DÜ5¨†¸F<^ÃÑŠ~ZÍðv'a„2­m‚÷öÁ×ùÓ¿$g¨õžÂD7Î’Û] wHocJ«vüÍoÆAø”‚`9»-7»dßPØ6Ç2ûsõðcŒîâœó‚ëÐלt:Lý0òžr¢­LΦ*àWLÔÊDúÉÈ>ÃØ5‡`Cb’4%/ûÊ‘ÛD—!ÚyCݬ}á9!ò—ÒäÉ9 V3!­Eݬž¢ÿÕPž¶Ž`ºÙdò¡T2V¡·JÔ[Xižcš†äÖãùÇp«9³¥âGxƒ“)7éÿ’ä'ÿ8á<»~0,’ë¼­‘|ñL¹ª6§ÿÕý0ó£ìXþ<ýÛ£3ÿã‰vFMÿ‹ý)g´VÔŸ+T÷•’—uW=›:E=ÌÄ êtÏo®OþEþ#¦–\a*d7XŠšb®pU3Ñÿ¢ÌÂ1”2qäD=¤CÁ?^ª:Vý¢e&âÝŒí¬ ÂTœücŒ|¬O%ÞÏWçÈm5°²*Qê¿»V{›ò‘ê3b‰qXˆ¬êÓ`Q¹t[]ž9\Ì Ÿ÷;ã‡+>ä’|!Z°j¨^ÎF‰Îa¥ƒ‰£ ‡/ý¨`SrRÿÚ ü¼º»VES¼®­:ÊͳZ;ƒçõ-U±ˆm}Yy.¨ØJÖ[.néY#įªÇÔ+¢€ñ™¿1_YSÆæ´j઱*r®aOH<Ä÷†“•ÀÐ áÏ39èç) Ô×Ú%ñ ýKï×)Á;]ˆ3Ìߎ~˜s hT£8ØP°LÌqø"Æ“Ëý¼Ü!ææ§©†˜M][BrÁöØ|,1mÖØIþÑ–Úor‹œ…7¾}^¾.>+ýwE˜;3Ck,*ã3rÂvO¤®ü"؇շRƒ*†.ÌÊE´—¾H+øùWðyf>u…)#¢‰ü×^? ÿÈÍg–àç½Ð•Î#W‰u‹nî1˜Ž÷ø›úÁdØÿž(‡&ƒ–É8LîÔÝXÁ'wÕ&…Úá{­OÀ58ï<ðLr¢2{ã7áÏk¢E:Gwó¬ŽÁèwÝÀŒ®áá²RÇrÏ>d¼»Í¿2…ùèmPήXüUÒMÒ"®ó;¼~•ÿ±ÒÚ†Už+üö¼6ÿ}àt³b7Ããþ£´RIµç¨0îÊÖð$É©ÕÓé$Ø|©==QY+Ð_•Ât±Ú£µvsŠ›Áõ~7`T&é~¨Œ¥®Ô¢ûçÐÍì2³ˆsßþ¤ó¢þ¤—¥tt¡cîEüÉ:ú7s¢®Nh#×ûÈù­&Þª$BTFÑïÆB{Õ·¡£Q ÖìŠÇQ}T%ø7ðû/ÁšºÂƒœA»ö7ݪFÑaÆÕ,‚ÿxƒÒc-üÇñÙ‰_Vï£²Ú Ÿ¾Jø™¯ÁÒ¶QÓ2ÝÔ¬ôDy`Íp´¡&¤ó£.‚.®¥þ£ùÇMÞÅ3D:n`Õ£~P@ÿü|ÿ·¾“]õWO:Ÿ,“ù‘1ªíä3õM´øúT}—> ¸»ÈMô»)õÚ{ížšê—ñ«ûZ ËùX9‹h¥7¥RE¥"ć Ñú²`Ñ^~þþg5öjžboÞ|±D¤S‹k¦¶XÓ0ÑMzè7ìç5þõOÊdòêÄãÀnš€2µ$c˜*¥Xˆ»„µµÀ{RQ¥T5Jõg4…Àlz\æ}öË „½X‡õLB”ù„7¼ ÈËC_6Eœw*¢Ý­P¶ˆ“ô–.G>óïslµ ÞéƒÍ³\$[ZK7”AìµóÏ#ë6ஹq^Ãñ OñeexKÀ 'ûͰã©]<õKÉbc¥ ‘™¢sÈÁ.?(ÇÕ{¢<¾b+Ùúe°<û¿ƒêׯ挕wä£ù´ÃD²[øª‚¼§?Óî„s¹B}Œ_â-ê0•ø ÷ñ*þ<±±JœÔÓÓ}iüGklürÃì\wbø —áøUèýò‰K a›À‡Ê±. O}8ÅMð!uñí•àJŸ/¿» ~5—“C–صí"5ìǶZ7ò&ðs&½É¹êãsJ’|cfàT´¶s©?i¤% ñWTQ$¬$˜þâF/ƒsaÎðfñ‘ï1Îñ“Œfó8cµz{ñIñÌÛÆhøó©XûÊpó7Ù{0Ë•ò0zÅGZ0ÒÜÉrø·1Æ9ê?¶Ñ%>M âçktÏD¿‘Wø9¨ºrãgÁWŒ¤ŠÐFó*ÏýxSn賉XŽƒ_ å“O€E…‘éÎÆ¥n–Õ¢?áJ´a+͘Ök8—vdzŒ#dw¬:÷‡ùç]•6ª‡Lƒî‘k”7*‰Á²=E`¢™6ØÏÜA¥ž öËÑÃêÖö³©ã…+{Ñ \5úœd!ý.Ò«Gµ0€‡¹g73tC)¯àOWšðçS˜›òµíR&fÅ£b|Õˆ·©„I_áºÕôÌNXï¼ÞßT_=1Q'øÝ~2W†C ¹ÊN %W"ÇUºT¥“–·Ù •— øU³'÷”s;ÕËoÀ¯Ž«×è‡2”·ì/º)µ–¹áOÒ2ɪ:ýôKÁ„$A¶Ô1Þ„þ»©™-r™jÌ)fa²ÆX(vÆQN·âÿý•CóýIøŒ~7šówß¿µ_ï*ª¦õ¥[É m¥Z•UŽ)qµÚ m†6Ÿªö_ëå¯,ÔR ’–ôÜÒU®×§ïí}³¸£{1"öû/í³£v–<eTkbó+úd° v|¯;\ò{lór‘Lo¥c©åÐïþEî:„¡'ùG;c7öé˜Þ(X5´œ8·<9È$‘EŸ…£Û£U×Ëà?>a“¦ò YØÃVø‘•R%ã~NÑË‹‘Q˜uT™ÄtøXå»tÀ^N= ÿ1ÏtYö¿òXK÷'Ÿ˜A^ÖrGrÍkµzä͹Îc0&ùÈ j±æ™Ž ½!ÉÖàE}ñ¦ž°Ìÿh¢Ö‹hMu ú+͘CÜ>„÷¨,oK?bü}Dé[¹Ê9ààO`ëí¾èñ0Cà?,z >§÷òÏÿ$U«ÃbžÃŽ®E)u‚¿c+ò[i¹ÀßNúc"ØØå)øoîPR[y7<ÿ±]9«§ø»­±æà‹ì~“ð'mðºÉÁ26k^!ÿØb|$ÒÞOô>닳N¿Ž¾0ô›hùQõõ‘®øŸÅô'yÊ5_…ÿØ€ÿÑÌfoæa”'Sˆk&&Kª:%ŸTæ·¿ñFÄ ìç­Ý¦«À(ôa~ H+h§6²ÖôPÞô€Г:ç ù¯° ™PLíÏiš™[ íÕh#9ç° ØSb–³ÌÄlö…¯¨M§ÃÖbú{,"S(Í̦°ØEÉåÆc£ÿâtÊwZÏP;L'æó¼^&NYÍŸ™.™I|›‹÷•}¯äßõìÓƒë>KÔßTmÁ.cSiôLÄ6Öá5†qN¥¨~êÉÞ¨ámþ¼=oØ>P꿈í‘}EÉûú;-,»`ïÎE­ ‹y»°˜à8Y+C3ò¿œÆé.öéwá?šâMÁÊO—C9‡ç¢ßÈÄpýGæŠ%HÎݬH^uƒûÛ¦,=(K{¦ï•6惲ÆD9·ÿ1 £–Ü ßü‰5lÆ4ªšxÀ0æëXñÏÊIº£øQƒ‹èv(Z¤ h|˜ÉP‰5¤3kF,_1¬êŸ†& Þ¥Pÿ,Öžã?¼e|Â:v1ƒŒëorô¾KÑéxRkÖÖJmž#ëxÅÏs0¿ö¹Lc>»7þ£Ú«?×l{e³aÁ:ðÌ=2<͉f{"îLH=FßýΨ`ö¢I}tÒ£±Ï`€®Â‹0ÕRYÄr2åÜF#æ©í3æÀð¶1½axæQ‹Ýºlž¢§Ó+Ôbg¨?÷áT›r–“¹voG ýô{X[o|Â(øýñf\t .øFøÇÌúµ »P×ü›XTu{;Oæ½’á'%IT—þ xÒ}¤f2k6Pµ»«mRâk«´ñÚlm#ùÇŨ.ü电àÑ÷Ð_™ô­öÒ‹êé[¸C?.’‹õ`b¥´šÎ]GeἚBmòIQÓUš(èJ«)´ý¢7ü”‘wDY}@”VŒ¯VWó齉›g‚^ô#RíB:ž·UWÀ…¢ód=g«­oŽÂÖ¶¡8HËߎ¦fkJ°Ž¦D¶‡aüð÷±Þ%˜oMŽÝ"Ýáfe¢˜ îç ¿}¹a³qÅ'à£[Cž%¢ž‡U½Ï#ïkE#Yq†V¿Ñ;YîÁ #³©7o×7'É™KÖ´™ç_¥'>£×VëD°æ-e øU\²¢Áø¯Õ aÑ` ÇÀÁ—S«.=‰Ÿ­ÏÄÖAß4–sL*ßèO5=œ“ªñô¨ÂäTm`Kþâþ6%c¹#r‹NŽ[ô¼ÿ]É’ÆàñF“q%Gý^ `ŠñÏ·e#ó’ ‰õðå]±‘‚Ѓ=.”©AY’ÃØ=úKÁ¬¤þü9þã,»ËŸéƧ®ÕïüT3YG«-:Ây¤%_YŠ%¼Ë­„?Ÿ&`–GQOçŠÚÖÅLó[K™‚J¿ÒhˆÜ$2®˜æŠg2k¹Š´Ü : °¸S˜àƒB7ÌøÕh"Üñð´gLæ3>±vï,•'½PuÇäÒBß•›ZWÐ7»^­¥Íé0Ùi„ùl‚}‚þbm7¿Ð¾;YMIü›;È^#bòCà…©tŸP;TQ2XÆ#PÎyø…Eruæ àÏ}ɰfÃw¤+H =ë_£PR¥1“µ„ŸñA+µÝ„‹øä¼)žJ7µ5ÊØþFœ ƒÓ–ø®†ù‘¾ ¬àþÃÉXèB•7ógX)Ð_y¡"›‹ºm,§=ÂH)Cøøê3í'gÏÊÌo‘sÐi Óùä-˜u>¾âìÇtò™W¨‹ínŒsÕOÍB}gó©('Î8¯7·:GB%jqîÇ)#­’&ð›ó9L„³@ CÒw sUP‰6ˆ¥9üy³”c,Lus“™®£ÕÞñÄ‘Â!É?.à?,¼]|}Rc;9 oŽèbR±Çy‚ÿ»/âÑUj¼ód¾()ÕxÎßýÚ.^)>êkÕ]3ô8úiµ>«œRbj«µ±Úpm«çû_W–hÙ@òãòÎG—ÝôLÜLÿÝ}¦NÿªþEüʬ¼¬<-ÊIwÁÖ/njYm3þã©xJdwQQEtõð™¬zìǬi{pú0Ò£¨‘/MÌz›Ÿ#ØÞ{S?2-¢Õeóðìü†Np>Lg|ã±øtžõÄàoX±2] ºúN#½7”ÁÂüª )»§H{bÖìØ×@øÎ ØÇd&c3jaDù¹åk­X$+ÎÓŠ“¸¡f »ð8žØ"z¾`WSûyØØ¥XÆ[ì7'Zè½zµJk~VV«É?6὆°jažþ\ùyê"N’×xaÞà¥fó^NaÍQT÷g–ªx¡Å gÅÔjð«kœÐNÞºíœXòºì$ƒñ Üný&v¤#YÒp>m:Wœ ü*ÃôpüÇßÊU­‚8º× ÿá0ñ8î䃿›wã÷õyW›DZÿ;ðšiAjüøéRÞø†t>öÓÔœ†ô¿ª‡ßÍF» ‹ú_s\æÃV‘/G—¹ån hSRûv\w<•=Óu8±s,¢‰üד3L»@W³Ñð)«ñ‹É†î›ëðÛ똸¤ü"–*­yŽŒøÄB`•'À‡:`ùGàñój¡k‡njñÐg‰ˆ«!¹“±CåeŽFÁÔ”úé ÔDÏÑ©x¹6x¤J0èãÈç*“1œ!†þ¬uObˆ•pxµ™x?yˆúÁ…Ônd?Ëàã+‹cß;ºu5³™sÀÍú¢…žˆwÆ–üþ|®ÒýUr<ùk¹6¼ž³ U#ƒ°ÇMQ`M¦þÃ…Ü!ºÃTgæý½ ;ÈJüÆ"º‹ ûUã£t¾r©ÕûÚ}êfmÖ*WÎ%A";Áð䳎0¥½•瓘x–uvÑÿê \Wê2«çùàøQ³ä¼Þ¢êt]‡s%†œ~µE¾2ë8:R±_\-<Ï6No¨Ø{2Ã> muÍhÖT}v |ob›žôˆ8êÌ?6ªúyáA6˜'>»¼M6³î½ ê­†x¡ÆVmÇfÇú ¤BtÝËÀžyš©y›³¿¶Du•úå_ë0è<žÿ§/ º‚ÌtžÌ{ºš†ëEå#^(^êCµ·ö}0~þc‘ÖO›¥m *ñdTqþ™ ÊÍ….Çqà?âɺz ½9u*3õâó Ÿk5µ Î];ÿÒ?|Qƒ^{EQÁæç}/W1E4R³jKEg8ºð¡HʦۚãÈÿѹ¶ÔúpüÇl‚m™›žDø‡ôºð§±ù)Á¯ž‰QLàÑF¼îz­“^„X6¡ê‘l!1x ¬²7Üùþ;½.†—ŒŠ’ÈýÇfÅmY\´¯±ñ'`.ènK–täµ>ùq,¢¯TA¯–c¿ïk¥"¹f?­&1S]¬¯ÍÂæá ]Ñ ¨Dõ)Q_}e—+๡[ÌU_a~TcµvkÆ%ƒ|"â¿zom&WH67ˆ•FÁV,ÀÍxɶÏáÉþf⫊Ò{ (Ü)»µ(ô1¬ÖZüÇ þFEÔ´µÈ“²÷墌‹¼ÿMˆÃǃ·ŒÆ‡d`*} 2)¿püÇ.ôâ¥Y-ˆWY¬y œÑ@¼˜*u«kjŒé±û·ûsÕ_©‰™Í½š©Kw¶“?iÎZj•D{ê‰m¾bV÷hª%,ÜMüÇ0“õTÞ‡‡0ªòóÄ诪a3ÿD{ú^akÿõäôA«—sÉKMÂ0®sê Sø_»ö¬£»•’.`-Ý—‰ž»c›Çp.9ÃD ÷49<Ì,ƒ~¶¼ÓUú_Í2{ÃÔÇ¢šZqôi*MÄÿÿY€\a:ç0Ű'N<Ó¦„ºËéñ_Éýt¼Lmc–â…âÀ,¼g‡~d2Þ HËÉgN‰›z3µikJuóÏMTc±ÎÛðŠñ@™ÊÂÎ6âÕGcí_ã?óÓp?ÔÁd vTÕ߇³ÅtjAòÝRÁžÙýwçrjMQðžÂÜ£Btª~ {Ò‰þ‰ÃØý,N8-wÅö‹Ãñ{è÷\‡Õã?jÁtžÆçŽÄä³iM]F£<,ÍeУã°#ÒØÍ}žÇ£ñ§GÂñ]´Z<[MÈìyåt>Á¡xQŠIÍß´RSÑ÷?A•ÚÜÂÏMö9Ý^ …TÄò0g製…ù´ldóùoÎêyjÂmÝít˜ß¾TÓÝF“„±ûå^d·­à-ìNô™µ<¡V|¬õæ^ÚóÏ+³§vį·@–曃¼ô3ïLïñãô0Ùn&‚Å`Þk*ƒ6l Ù °»1òŠaK-¶¯\ÃÍäÏΓ;˜5¿;ÑÈLß«ḭ̂xȯTAŒÿHˆÏìŠo;‚…®k "Ò+8ïñ`òNx£zð)ÞäFõÀ—™ŸÍ1ð•ñI½aÞëwÇY“ñn½¨M,ΊÐ^3…—1ˆ¾5¦úI» º¶$ÖÅÌ$Gˆ˜FÑ‚ û|Xé…æ@æÌ%ç:M¥Þ.êÒw™ié˜{ p!Ùfnà Œ¢øþ£ ºB¿' Ïý”âåV³0Z®ô:ŒM]ã9*/ï¡6^k=§²s2ÌJEj&£›ªñ…çz¨ô¤áÚþc‹zSCyÞ™D FòÙÌêXˆ ,'gåÀ5µ Ÿ·R8ÚZ§ŒÝL!ÌoF7„¬=9Œkm4Óïé3zÌy‚ÿ»/LÕ»üýó>)9@š¾ÿî×~}¥ÌWߪS©Œ¥RmuÔ:%‰¶^¨MF•þûïQVi99åÄ ÿ_˜¤ñF˪¶Q—2?ê¾¾þ£t¤–/ôîëi:Huï`{pËú0QN«ÍQÆ^†o>*\ô?£tåÑиèÞÄÜ6¦Þ¼¤Þ¸8Ñ}Mh“©¤Œ&–„¹/ãÐzd"ÿ'£™Â‰.êt›µ»3®¤b¬BSê?®£—zKc÷o$³èCN3ˆ;–Y+jŇÚPžŠ øTDöÆR?¦þÜËìÃÔÛæèš.Ã2m™>˜¥‡*J.Q‹L®³™ KŠ×0»ÀW á«XéôìŽý7èû…;å‡ÂxøãHð«SÎõ®(ñõKpV7x7óÀÌm˜rÒƒ~RuáË}á〰MÆ‹|As¼d±œÕ†>Œ%¸Þýàv6^Vwž_nuýªJ£M—S 7ñIƵº9’QŸ1ÿq—‰çÈ=ºÐÕ×JÂþ¢é{fÄ%CÈ{‹÷èH¿oÐ[=£Š1à¡xâˆoæpÇzÝ—@O=Á* RWÃáËü¨Ïø¤=Æ~ôW-Ñ_ÑÓ8€­¹ÁÓß›˜&½™˜õ}åÿþ¯Ô‘ê$çÉ|SrÿÇõƒyÌu&°>ã/ìé§É?vkžÚ|íýÛ­â5e—Ö„JÑdäÏDE2ŽŠêlæŸû OtÝõëûã?ªÊ½¢ þ#¶¾úÝ:Ú)²ÆWtùÍ!Oˆ‚ú ç9üÓ¹ µ‹ZI÷!?˜‡þƒûWÿQMp{¬ÿìX<²ÐÇb¸(¦Ïþ§…þý³š»^ŸH6 ï¥Ý“/66¾ïö4šK@÷Ïb…ŠÀHÙ7 ýÛï)kÄRòÚX†x¢NXaV]Kžû;ùÇò…èwGaû2ÈÚ­sø§.i}ØAcÖ¹lñíùuÉŒÒañ’‡ÛyÂ<ˆ f‘‹<ÿú«ÐLmÈê1ÕÓjV²¢5|ú0‹ÂœTgòù½ÒL­+ú«6à8§ðFSð);ñ"Ñ'¾`ÙËEœ_eRÛèÑñj1ÁýÚæÌä”Z’\cµ£²µ8¡?kqçšÝñMsÉ&R3¿6-wlj8ùÇaå!s¯‘o 7ù@VéÁg°V¢ó8x¡?d-¢ýL;z‚•ÜË5¯â XˆÏº­oWÃêÜ´ò¢:™T<Æ^¢ö›¬v‚>‘»¨ïN@¶0ÿQëŸþ|!wJ€-.#û‹Í*ÂÌ“°üÇDí¹ó48üµØ´iÆ4üÇ.*Ÿ±¾/µƒ°Ê½àÏïù˜)5JÄb¨{÷à?ëq¶Lzäýq_¼×¦ÈñàMIÀ‘.cÃßÊT†{˜öñÎØÁTPgrL'—iÍü‡Á<ŠÚfÔæÝ…ç»¢ µ^q”ô>ÏÁ|Ìbð+s­ÙÈ܆‡ÜÏz…­O¦Ã1.ë“ðtÑØa;*»¯ƒíõÃj„~7¤ÿÕ$e¨:þ®QõXîG”“}a|Ð´Ž #úT˜jÚÛÒŽNVGô·c¨ ÉÿÑï ƾhU®r^n,5Ž~Gp<[á?\¤—HD–•…*ïÖÖQÔÉmÑÛú‚±=æ?–ÓÓ¤8g‘Ǭc‡¹Ù¨ñ‹‹ýÎë-¯î¢k^t)Þpvnâƒô7kÒ¿d#û*j7?ÀÄ{à‘nQ×H|ø‹2è¯,SÑŒ N}–)LPÏïܯ>c~­'ÞhÈõI¡Ñùx1ü¹Ýó«x{Щþ´ã÷$ŸµÆ8Dí}«1 »¿Dùœ'º;þCë¿/ø?ü5ùGþZÉ®&pžÓ¯mã‹2G Ûñî»Uûi=¥8´íàWSà?2¨G~i¹+Êføó»øçÔ VÐßS)íCÝÎ|üöZrÁ£¾dmMa?Œê®ð$øUEÕUóÔÿQåîÂLìzÏ(]¹¡vRêöì ñüÛ …T%à uA¯ŠO Àæ§Â›±%"Ëe·²ýnRœXdaæÃ¾wG;Š/¡+êb¦øXðETïÒ\#¹æ£š;±}žl[»îBWìèùG P…œi=ú©eäKØå qEo!~õMÙ¯f€ßY¦æŽ.‡ë®s«xôÉË­‚û¢¥ZA}ˆ‘Unù–Ø!Û¹ã9È?ÒÀIÞ¢v¬á ßKy•“¿l/ê±Æmñr‚U^£à¥Þò<¤²3d•ï_­Wé×y¿8Âøkìã˜bü¶gLóY,Ê®:Z¹µ\ùN²¸þìpùOSŸ›i5DN­"Þã$XÍG®é Ôzj¸a<芴‰ú'FVøóà7:ˆÓz,êØ’Ô¼Ìs_¼µ ¬É·Ãk¬Å[”KQrPÑîEþ±” é_òÜÈm~•!_xÌ'%÷ñæyL¥ µâ'm0ÞèOIÅ]Ûò=úÝæX|RCºÑÞ$&áè@=am:¦a“ËaçW‡mÁÃôÓÊ!Ð{ØóÔç“«L‘gŒýd3-a%²Óo¤ý?˜Gèù%™7~oª(Ò~ð¦™d ."èû­Pæ’xòŒ5C•ºTÏMT“ƒ˜ èNžÑ’  XgAïÝ7ð4ƒé§8:‹¢ø†øx¦Yìh㕘á\/ŽúJ³«¡Îàñ š)äz‘ÊÅ>Ly*I”¿˜üã ê«UÔƒ|0ÏÑåñ:½}k›§È7¢çÊ…ÿxI׋Œ0õ:Ù»+Oèr¼[Jj% :òX‹È²á-ŽÃlÇî@³¼œÝͰ ¡èúŠ #O÷ &Uß~À¯V1?êžÎýøƒØì¨He¹:|@ÖŠ£ KMÖQÓJà8Jý`nüåu㈕k(ýÛpE ˆåúË6àŸ¯¢¤ötÊÿO_$¡+z®’‡‹PÏYÔ?æ®2K¡MÒb1«üd°~÷¸’V;¡ÑjûÕÔêå¨/ÅŸôWŽÃ¼$’ŽŽZ¨¹U/u½î%”ý±èðµj¿ïZ@KBþqR”GIT~(Óµ¢.ù‡Š%»~wh”®<†ÚPm«O«Zˆÿ¨O]Ûé†OªŒ(ï!¿©#…œ!êó¾ü?üê¯u¿ò=^ŠïGž} ¼Á¶ú-^åÑu!…H|±hé÷(»Ä|‘ÍVlžÿ<ó¨{èƒUÝÏŸÑØ-3`óÑõüéþ0QéÏÛ<© §ê³y™¼XŽ póoà™SYõû¹|a6¿_.x[<ÖDÈŸ«ê~5#êÚ `Hð÷*ˤðîd"%ÉëËÈqØQLw*^j/üÈò‰BÌ¡«á\wfµ¢Nw,¼ìQ¼å!ü¡+W[^ «qZý1àW“°ŽYŒþ|Š'Wœ;1¿n ÇlUî’1\Å Y‰ÁÉᪧË\ÄÇíQ ¨T±—¿ZJþñ‘ë߯U¯ ÷ZÊzºðûijN Ø”¶`[ÅÀN`ußqr¥=ÿã1òóOk+ú«§F"çÅh¤t¸uXÔ1ø hiB8ÉÝ“ÅÚK¢‚é }ÛÀøWc¡é®‰Ö6¿µ”þí‹Ì;(}ÒÑä5í¹½¹A°>»Á†•ô9´ÐŽ/´Q$Ô=‰)žâÉÉ|AÃ|äc=,O[s5ÙÖ^êÙË[èSµ¶g J±Ø\sx+Ô.…q} ™ÿ1úw)øÌ§ð#º¢¤LþáASoæMœƒ.‚ºÃ“.b#Më&½m•Û\´ sÀgŸˆÆ£Ó)í±L̳?_23Ó?Ä@E]@ :® Ãú3l¼'xÖ*öX©NoˆÏ,KFx¼p:=0êŠ.åYT?ý {*·tí¥Üg6v¤@sU%q<Ñ{+Àê+eúá§5“X1L+@žìøLá÷·m }™žŠIx·^<Çų.ùÇ.3++о¤õ;õ—™JE_2ãÞ£˜5 4 šÀôtÉë,»!»þÐqøûÊÿý_ ¼‡§óIø ¤aÒÓö©¯©ÿ0´?´˜:3?‚ëÏýÑ_­!ÿ˜ªí%ÿø5üj²FKE•ftÿ”²…þ…ü£¯:O_Œ~w‰S/ý‹ýsk ^"@TÁ[·’Wõq¢šNÛ#Ú‘ß¼G•u†'¤ÿŸN .ÜNa}v0"2Žøþ¸ÆŠGzbàK¨‘²ÃZ‹™rµçŸú÷ÏŽhMõÒØ!‡±‹4<û zöý6ê¥<ŽN)/ÙG~êž"ï9¼Y9Ç''Ç}Dí³te!¦¶Dš§eüÇêz×Á;Œái­'_Eª‚Þ¡µ‡÷í Êt‘ ¦V°>þ׀ȅeŽi, ߆ßÓˆˆËq–·ôVâWAÊ5=þk3«ô未â?Ú“Â_ýŠ­ûÊãµ·ùyä%åG]ÓÃÓ”'¥ ç«x‚9 ¦|¬É/^/—„e”ðÕOã?Zi¿Øÿ<îPT1øõïpü‡ŸrZ«*Ë”ä ¸º+ÜÁ䃰s©u‰kPÛ…¥õBñ¤À†øû{ÈÄâ0}GCßêr°)åÈ{l½Ô1*;Þrâ{ÈFVƒ_ÅmêG£Twg0³£qmHg‹4(©:‚·Í4JÉúŠ0ëMÐΊ|øé4ðñ·ñ>ä½S©D¼^´üc!ó]›XEÉ?2˜7a}Krn€_õfí‰Ôì䣴»¡uÁ¼ÄéÕC5û„Î'ÌÙì®üù1<ˆâ¸H§Ã*àWŸ¹‚R W>6J5ŒúÁ«a_ù'}#OÜ r›³÷“kŒôßmʵ¥!ïN?Ù7ôÁºƒ¿†~7üG3²žÓ¬ÖŸY×H+B0ÊiJgøóײ§ñR®Â§ö…¥lc䱬Zø$ë/+>ÜEüGwú™L³ZYð]ÈžÂÒÀøPÿ×yCb«†@ Ö?ŸÄœãÞÔÎ4w¬r<£&§«uÛØAýG;Ë›–éA*’ƒ+é{Á{²ÏyÅÿ»/bPR?¨©ÉÔ¤ažÜ¨îÅî ¬*­.ô‹jyVÙ¥¤Ð–Sÿ1ÿ‘S á³¢²âye»–IÜoÈÅ[O§ òïê}ªø¤¯ca9­ã/í3 ù?“Xá4ݩׄ§Fþ kT$6ôAK¿D`q}N‹Äà.‘ëw·(KÅ ôÈ È\òŸôÂn•DKô„ü£!ˆÖ>*ª7’Ñ À’ß´Ê‘œâ­½ Oö1<™ –:ä3^(%ˆ=—ožn ¨Û\ê^‚¨Šêaÿ•Y3q‰x·á=¨ÂEAŸ€_k¡"-Mþ‘›~² ‰íO%NÅ{lડqaN´®…³ËT¨âóö|EjÂ~øI»;ð28ïsr X¬Ÿ…{m f÷~hrÍÄø’ðê×1ÿ¼¨8;Óü# ü¬ÅØëRøäô욌õ@{”\$:×°‘ý-fÕæt>»¦†V7)JMð«êTæÀcf…·Äª{duЧ­Tmø¢!ÚMÄKz¹§§rº!ÜjâðF e#Œ¼Ôn sÅãèµãÂS‘@4›¸eÚØ«à;³Ð^ͧII«þ#yƒŸ—'Ÿ¹Þ¸HÖtPõZ¹P+^Óz’9’íVÿµ!.¾o '–÷ÂbÖÁžå_Ýáç¨Do©Øæ’x¶ådˆž¨¬Ü¥¦‡t­°f!€8]£Ñÿ»@n0¦ãÓÚá?n>ôJ/h™oàNƒÉ–Ò˜›ñ2ÝвÍÁüAÅxŠø™JoÕ Ž©©qKúñÓa¢²lk¾4;€Zµ¤úd2‘¨Z3S?Ø‘9àƒ`C²À´¸áKáçÉ?ÜŒ ‚w¤¢ßé5´g“Lo¦!ÿL‡r­ùAYüE üÇq4R£è2õÉôgJûº†4¤ç×ïä3ûàϦ’±”·ç—þü+5)9xNWÕªfú'®ãÜÁÈää¶Òwä2óv'²Û&T“è–I½_LãñÆ1ù¯þc¹zR¿!þDCÓ‰÷ö¥0³9Ð>U[j]²Z“;æG=Få€Mr‡÷ÉÉÛ—ûÓ‰þq÷¤‹øµ ?˜ ÿ‡/¨+ÕuΓQU5¶ów¿¶ìe®šEóÕÒé9õ `²šþ»»P_ÍÑv±î¯]Ý1å(ñà ‘‚ótÈf`¥©I\©Ï_õz:ü¶ø¥}–ÒÈË 2Êüz_J/Ûèw›ñ½;ÔžÁÚ{DiÅ”j{øa<;vLÛN®*lf/ùLÏÎ÷ã?bóéBU2JýÛOiÃõªø¢¸ðÊ«øUã9/ÕŸ!ñDÝ"ú/ ³ð…šÀ)hŽ#»'»•¿™Ž™ÿ[³û<‹ì¥>`Ó±vBôW±ÈHã—‚ÂD¥?¯¾ÿqïØXõ4+¹ãÛʲvb8„ð˱ô;È»>ó9ÙÑ©œÐÛFÈÄaVÀWŸÏŒç]žk>Æ<76)£ì[ñ/µÛmW•ØŸ•\2§MÿúóÆ”j^=N0â~†»°Ûꊟ«ÊÈD\ÖJÌ×¢hjIþÑ—Ÿ{r²ÙÑbäŸ;ÂÉ?¶â?J‰üÝX»V` ‘ L…nÏ{ÿoR {燵ýR³ |q5ôÈF¾ê×ÔBaîL[­¹n+|ÙznäUý‚ë\VbÕ5øó.t^ÊJ¦Dg>Ö^%΋uî–”CÆì7ŒYïéˆ.RÀ/ìGš†çô5L˜íÕXäE g©‹°{—¤¡[î<2¦lðë±û9ðì-eá0®kí9‘½ä uAÄÜŒÇòú«‘ætð«2ÔeŸ¥þÃÅ1€+…鈅·'3ÎÀ7Ìä^§òtZ¨~Ö×ò Üf½ Äícåvc1hXKsW;[Z ýîEk ØÚüG*s&^º?'3˨Á‰7` lÈŒ—©äíÈ?ê¨qéÊl[fýÑÿª7ùAøŽáÖ ²™êð3¬1ü~¸“ ÿÑŽ³¸Äùµ'xþƒ~76“Æ.J“M®0ŠGò Y‰úóiä3¹ÐÖ^E‰µüJ:vÓ™¬?ySEºG7ã€÷^&r›'† Ù ™µ„¾~—E/òÁäÏOÅ-Óÿ³­óDrÁ#(¹2:Ž8‚¬ØŽjtbô£Kp,x/3“ñ7št{úíi_é×ÃyKþÛߊEWô9Γù¨dûù¡nSãkKè~•N¿¬6cÍ=JNô»^(°ürÿÝsÊe­>ùGLôµÑe+]Ò¼‰:MŸ% q@OùËþ£› VbªmzÁu÷=ÔÚJÑ…J¿èËŸˆzzç9üÓ©ÿ¦vUËëÉ’½±myëƒ0·”×ôºDt—Á5bñ¿Kè_²öŸú÷ÏÎiSÁ¯Æð|¯ šže 'þãþè }KP©ô‰Ê2šHwxJñÛE<üÇ pœ­Dæ‹ÁH{˃ì³qõ"êµ°)¿å´È:úÑj`ZIÁeÅ‚UDÛõ’ü#1ù<Þ "ñÅüÞ†&·¢»Z:‚]Jú'ªÁü¹;HÓZYPê¼1]@ªÃzT“}Ⱦ`e½ÈrÖñi³ø“ßÑ_™á¬˜\­­¿¿²»¾¶ÂørNðÜG¹Â@™—Ívçô–x¹¾DucX33ýÛãà?–†ã?6)´æâxUÔ´&÷À®?÷„KéÁ¿.X²¢ø{þÇa° gþc&H\# _úÉ4C¿ëFÞ“ >c=–è ú×éÂ’eëH´¬YÑźÐÿj&LU,ÐÀÉØÒöä©©?Qûüë1i~7'>Í i%qö$yOÎ6Tð«õÔl$ÖÀ¾Ö¥R<5‘óT2Í¢ä)›@ßJ’´Ã0]'µ®xÇ}ä ÕƒýÛkùœúIæH*Y¶¢õýK®š¿ÁL·Ä”0ˆ’È=jß_äª?i!VÃÞa^±…xåy®¼Á(yÜXW«ñAúcYo™ë麞{™ ;„êÞøâ¿Ð,w!ÿrÏÿý>(JwÅ]Ä}m§ö ÿ(/ Â[¼‡32¨ÄëD¾1oTœ.éôY?¹BV²/´ Íòlö8Ü`ŽŸs½ åvž÷j?w ©iÉmâ›|m4A#ÏZMÿ¬6Ö fjŒ¦n¡ñaþy*«þ£8çxüs.ÑeEqÖù ÖTgÑï°ÏÓ*ö×P$0v›å°íÓ¬êäà?¾PØž®Z—Ð5¸3™*·™Ô2Ì÷øüCÄ!ã˜Äðú‡úóMê%}‡Wîr}Z|2s:¦‚¬e嬞3½±ž|‹ã4}QY÷›tùÍEõ§™Ã8Vç"ïPGã5ÏLÈ;/ý¿þEB¦2-vžÌ[%ãÜ¿]¨ÛÕdô+I¥ ©ÍônV hG´ÅÚZm'YͯáW‡¨çj†r7ºÕIJŸ[/@\»Aß(ÒÁ<%Óë‡éçÙAuÖR/ìű„¨I*~WÓÿª6ì9Z˜ð¥¨]ßqý{ðí3É”Fð<Я',ÿÑŸþW]Øfr[ij²×6à úžLTºÎÌgÞ6ò˜¹ÌYhmãa¡§â톂èd$ÿ‹_MÐ…]?˜ä 6•ø|6±ý]ÁÞà£Í ðç™éRܼLÜœžõƒ¾ô6J£¿ê ‹†Ñ_½Õºôùƒ‘V‡¡éΉ=F5‡úA‹9†í¨Í>IµÄõ Q¸ÞË)Næ±³Ö5ýUh¶°(øUnN&2¿á%Ï~ØÎL OI¿õVô 4oQxÇÉ,W͜½dÜåší¾(m”â†ó÷T©ÈdmOäx²Šú¢©ÌM?—~ ùá?0íéYR,Ç0ø1Tü½Ã/­Àïo$ÿðæþ 3¾çz©_–6~µFæ2M¹[$£Ê²!úÚâ¨àF™­©ÔÁ¿è±r/7Ö¡"“¯ à//Ø×M\Tý‡þí5UoêÏ òD0¹€Ý9¨À©äÈH”Ö `à?’8öп}+þc&ýkYåÍÖ7ãXë]´ cE}ñNÜpâW›áÏO‹ÉØ“¾Ä¸'E4+›c&úŠTxàöàW¬ªŽeŽ—ôcll3ÆÃÑ´úÒ7‘Sp޲LQn±ÛyÅÿ»/\`?üœVé#ýwÿóúÁujdwWáZ‡pÍ3©ß«í R²ª¬AE÷:bf¿¹ƒýÏçŸMÄxUߣsŽ­¨?¯Ž¬(˜Êì#“ôðà%ˆgïñ±*­é-•Á|KuD*§íŽ¿Y‰œ«Ò}c(úݸ0ò¡/yþ#±kNøó=ØÉIð[«`R‚X݇üÃþ%tÏʦ5y*6¾oX®¤óCgš×47VÛëVžŒj ñP>D5Ù\'_þüœ@:Ç ó±QýÕ9bû\àW³Q¿ú þÃ7ÔcsvŠq“hgŽQŽ'ì”aÏlÄlÅxDô-‰Êo˜ªc5Uƒ±Ñ‰àYšâNâ[+¡¶­Ký t®ç® Sûƒ³¶Æ-gõÅ úï> ’·çGµ¢OËK{rqüAgôÉ(œ,+^¸ „‡x¹ú\¿)Cô:ï”Øú ‚—P!V2ŠõÔæ'ËZ‡WÛDßÌÚ„âÖƒüã>J„t ÎG}ÅqîŠ7g™çÕdâÜçþªÃ<Á›çæÉßbü&¾ÈÏf}GVh¶‡Üã3k÷ þSº£,§"½^å)9¬j\ Ž-*S“°Úé?và?.â?l]{ž;ͪ³ãO——=p>P TB¿ûž~-%˜ÿá+_˜þ»Ô=ÉãhPšŸè_r:ô#ó?ù]ZušÒ+á+õƒÿiÿ«0))è·WϯŸW{qÚËÐï‡Q_¡íƒ_üµêúcÔ×ᶯ_5±ª¤QWéÐ_]Ñ“èm´†Îû•ƒª…þª4™k:bÕÊò¡î!:©ßÔ=Ô®èqèÜT]¥“‘eÑû‚c.Án5ľÿÄXUy×ÅOüO\[1±»»°»;ÇîîNìN;01PÄî@ìn1°»ý~‡ù¼„8Â|Ï÷¾3Ïû:ã¹§î^{¯µöÞánPÔ&Ô³ÐÇŠDüoŠJè›ßŸãe¸Z…á#9÷Jê”Ä®2d¾ó‰ÒËÉúQK¤Æò‚­euþx†¾’ Û1ÓX^3¸˜•àÚúæƒrû‰¨mÒëk©f¬¹¼¹´-ÊŸæ·¯WŠP4&ÊŸ¢þ(¥ãîÕåN¥ƒÏ‰ƒÓfŸ°ŽóœB5±Yø€ms–6y›ü@ÄDÿhZla@B²|kWTmp­¶FÜÚ>ƒX¿ ­s$ˆ Ð멪Ÿ"¹}©™¢or•Ïék¬JŽ¡N« òÞƒG ²vªw胂.݃øiÍÊM~|Âq·!ü8 ½?ü@ï¦dî?¨¹fñ]ñ #ú'Ó‹3gàÜÑy´‚`ÞJîcîl1m‡zá—ù‰Ø_Ûšþnjij¨÷@L_­(Ñþ1ÖÝ©?Fá¼zŽ7™±žOŒCäBÒ’Z /óK¼#ÜC7æ—Ä'¶¤GÓYÊ §òZ‹ÿêa= óŒ³L OCE“Vl.lX.ÎÔêÏ£»p¿‹+9Âñ¥ÒŽœå2Yy^®©ÌS >‰œv õQô+lÀ‹i[`¼Ó 0\§J(ˆ>3ž düÕDð#4žZG‰ŽÚwz¡‹ Á6åd-x´v¨|ÌMö¹Gÿðgªï8ª„¾ ×0¸Á œeÎ0ó¯HÃä–Ô}¸kûÁ&hÕ5¨Zºš?àÒZÁ_¤RÈa&³u¤³{u×£E¥ ÷ú M8>E»hg^HŽª¥ûù“çä6’i{D ÿtfÞz%°¢-×»õ|úù-¸µÌ&t2ËÞ\³+x_ˆZᄄ†Q,.{¨OEntÀqš5÷›6ÉhdËcö£Ï%^°Ç8±1 ë=€³QŠ3Í÷Ά8ðqÔ­CEYâÚ6;~ìe/ÅYa±¥Ý¨?n‹ïÆ3&ew1e~9õKvÛ~ÛúK˜Wõ x¼²sÝÓŒ|° Nð˜Ý´:ð£?Ôè1<öÛóú!­¼„¿"†œG6í¿úù»Qû§Át¼”x­˜Uu*d„¯THÙ©ŒfÿÇz9Q4ç_]”®+%Å=¾ï7Ù5Ÿù% ð…nÄ¿{ùW²Z]ùó,ó°çÝH‰I4òÉ “kÕ>¢™ìUŸ¬~‘ø,ü˜‘~"CØ?öç8rgÙYíBt™M†Z‰ÈUUC;¯v#£;N̸ÖÜ#b°(¥þóãÊHµ"]J݃|v,™¼…ãy7Ÿ‘Sj›ÈÁ3¡¼í¢°ð„´€ëIãÿŠoÌfI+ùÓ}‰±ÞZ-¾«'à{<Ðè,üH¦P,ŸÜ?ýµXiLÕß–ÆÚ€›Œ(]‚ª@ÅÏún†mAüÛõàÇ+"t˜j-ö£D~D“J÷¶ˆÃY¦ ð¡šq$²†×© wWA[E³2ÿ±üÞ̓¼ª0^„Sèç‘áGf¹¢š týÒ´§¾š ºµåû„çé.üõ9ñ2µÑ -ƒ˜§$ÖvÄ{;ýx"u¡¹]<®$²ýƒ;Á"Â'dþn!ôóSü÷¸w¹aü;ƒA癟_šh½žˆÂ¬Î~œØÎ?‰æ®úËyÀv¨)ÈUœPLÆ <à öpÖ†Š$° pÐU˜•ŒýQy™laÍoÏŠƒ·±ny–#Ö•£Ô=À£Éè3ôàÇjôÎÈ ¥a$“ÿúã}"ÿ& 5ÏItözü´’l"ƒ’5Ü=¼¯Ô$’ù£”mÚƒo_ôAĤQÔ5™{„ „ºí<[\Kÿ/~ ùäJzîÍí’âîx¦8@ÿÇcÞƒ¡T¹Û´½èçÓÐ*\ÐS6P/¤G| z6@eªÖ|½*G:Î|•,Üá²:öHûñKóå¿Ð»[èÁÚTXM/ô÷fxÍz‚ ÇØÿqýƒçØÚÔž•ÊpuÞÜ¿ñtÔ ³‘¾¦ìÊüD'¾—“˜US<Ô¶em Qàk ð·¤ñ ýuᯎâ”Jo{ 8» XP‰Üœyˆj»ìøÁ·‚ù»}Pðº‘3%ÀÍǶ ÿn2¸µ¸`[fœW¾¶è3Õ͸l_,âßíaÄEßL¯]'v4ÔŸjÔPÆîç·÷ÿÿŸ èêö°?9Ÿmlû¯¢÷éˆ)”5àGJõ\~xK á³FÑrBÎÍý§%?%§8Oò@\yÔ÷LÚÈ'P£žï ÿ£u4ý»Å•Ó"-þ«”ĤØLLm)–â› p>Ño÷͹ªê¥+OË|À´jIx—9¨Ê•ˆù©ˆPµ‰s-Áo"÷%·«b<óK¢2‘·2MMÊ7’Í;Ä̉Ú{ÞòÚ(̃ˆ„à‡/¼}\Ì÷Å0Ñþgè/5KÑ?Ê0Û(¾¾‚jÈ•÷ÜÒJ·K'×ÏP•,CKiHnQ;§”ùÃç(Yàeÿ"/: •…ó*†ÆðÒ›·Ô›9¶'^ã™ Üvªòö!³Ï"{w~H^²—øŠãy o%Þ'âüFr•Õp"g^^7éHà‚s`g‘Ý^·Ô7JÊHÎ2ýÔUZD[2Ë©ð A¡ëhÌ—µôb :8káÇØÅ‰|NzüÅ6*²‰‘Ô¤GJ>±‹¬·©ž“lÎÚ‘dm-´ø«ö å ²ŽüÔËq+}‡éßI]7éHº¾6â•VJ:ˆZK४£Ç庋«ƒ˜0µ” }P>n£…ÄÁ¿[ÜLJ,MOTª'ÑŒ0Óúþ¾“³y“sN ¹¦ Ò4”ØYt˜ŸÆ5‡íç½™Á[“)‚è(¹Å”Ô`ÒNøœJôŒºª•äáîáS¥5ÙAP({ký þ+«p$þ«z–NË<óçDRP® Zr ¸µ iøµÓxž(SÂï«z¯Ç#dŸ½]`%GkmŒ§#| Z@F¼\¾lÛxK¶¶ÉVp0jRê£VÌ/ù¦†ö-?sÛ  ¡ši.h:ý‘ƒà¯’ÕÐy0g½¤)ÛzRŒa—£n–¤Ó½3n`ª™rÜñ"T3{)ýPއÔõ;5›ñ•­q˜ªR=¡²¹Ð‡x:“ ;¢¢ß'Î{›«ŒtÌ¿Ú‹Ž³‚'^D_Jõ_OøÚ¯·²<œy¹iˆ$³˜d¤U¢‰å˜—"#Oè»8¤6}ñïž þ8%|D,zó ¨£tåIÉ5ÙUHáNöY“<´n úÏ­]ãÇ@•Çì+¸LPÞ(Í¿:¦´Qs1¿Q#xå^PÃT¢Ÿd¶vƒú=¹<øñCÄѺ‹?±MVÏæ1W¤FëyŠŽ¼ŽºÈª?F‘§&ûMþ‘K߈þaõ…$e~Iľ…ˆÏf¶R—I'*+ E&ίq:&è—é‰ï¸z/i#g=OK rnWk೎x”¿ýNbÒˆ¥{Ãûõ³ÃNu'çB¿€¿*ȬŠîdœþdõ@å-ü»bó6ó¯žDrÀl¸¨3¢Ê¼¢öh 74“þ¦à¢åÈ Ò¨#ÔsÄÚVä=ùŒITLENÌwÔ%ü8,}¥ÿ㆖Œ?Q+»Ä=Î.¦õÁìK÷a¢õrñ'Ôp»¸æI<¯Ñ`–«z^.ášk(U©?zk™‰ï3Qt_rU{᯶ãßr ‚Ö?@ê$ô|W@?Ï?TNg<Ü}ì0jíß—¾VyBî3?ñºËçƒ ßàÞc2¥i…>Öe ]M™ŸhMÔº¢‘ýã:Ò‘nŒÉ¼M "ÔŸ”œÿ>-³Ý)H3©a\.ú½)}Χ`_bÙvõZ¡ª4Á¼}º&(rŒk¹¤ wÅ9Äiêk~û8¸UÌo_Ž3ª»1zh1»\ó³ 㛹Í8¢Ï5Ž3¿dGìƒZ1oZOþDÜ0ý¥Iò8¼ï×2ü».tÒÔ4¾Á3Å0ks¥ýͶÌÈ­@WDöIÍbþÈ|Æ«@$oj®å¨ñƒt²Nû;sW2Õ»°­Ö´x†Â›–\ïÂŒ«èîpv%èOiþq†ÍQçÙÏ´Ö(ËžK?Ÿß:›>S;„â}Ê~½%äåª5¬÷¡˜^ZŒÕ/³±¼uÆ(ú¿2åQ¿£yë]‰žÒÔ¬i¼5â‚ë¹…b6GôD! _rBÞÇü’¸;ðÍü(23éª!½–l5î]ãÌ/ƒnQ©=\ácü ­Áœ{âŠýxO¥XàG"ý,™P2ÃÐü„«ì2Ì!P?P5|Á=çlø+?îá$ü»õåÚ~QJ\°?‘ÚÄ¡Ï!þ«ùš‡^W|Ööñ;Ps”7“‚ÌToÍég?“‚Rœé+†‡úã:ÊŸ›è#žÿ<ÁÍ̃¿A$šË÷´J'û}éÿ8 ¿9ßx‡ë¹+›kçØ–š¦­‰‰t­Ä&û˜f¤ƒeÍÆ7»;žGx.B¯øç‘ÿÿÿ™P^†¿R™¿ûoû?¾KëÐÏ·Â_¥‡¶zöIiéý˜Ë ¬ÃÌ¿Š^ýqYb7*“õGb­™ªª™äìœ$b‰Kª£ÚJéhžQ¹KÝhä‡†Þ Î9µ¯)ÊbцtïPF‚è¥#:ʵätj/êƒÅÄ%f1ÂJ¸ Ü¨5ÉFÏ€iÈ„ƒ…ûk£Ò¾WGý1˜Lp=Ç\@f‚2Gn=“î kDÖœ¼U*øQïgxB%Ö¢¿Tໜ@·úÏW€g½ˆýû‰Òqàá™ÈDÿGmüÑ1%ߎè®0åÜ»3NYÈöªÜXBròXúSê«{p#ùTò±í¨‚-BfŸEöLtjÝñ®iXHý‘¦% ›‡æÌy•¦ÿ¼Ía¾G.Ô žàGA4ùûê#%”Ë=n"¦Xª|{¾ƒ5Ոͳ©úê¢û\FÐ*ŠAê6bI:{¢RÌAœ˜2›+_ ~ì–^(Ñ€ô¶ziý¨=T²úÏûSÄÔ_S­DûžA¿ž ¿ulŸÊÐTÚ¡¾bogè™Y?TʉRTÖþÚ ÄÇ ÐèoÊ|zæ™ÊÚÇ\cäAíNe¤DK.‹ã+#™}5°jœSK'öD8ÞdÅÚ¥†Û ¼ØE_ÇdžÁBœ\'aŸÜÈš§áOêÁ¨—øwÁÍôï1çÚÅÂ,¢`„þÁ!øq—leýáמR¸}á¯Zïo¡ÖƱm5lF£(U>lñ¹-wà¨y+ÂþÚ,b;•ó}Pm*÷oÀÑfõ9 ävRôBøe:Ï0Å}*<á ýãªÔ\5ôaê¶ø¯zòöZów×ç……3}Ï WªŽÚ°iCQªÙŒaÚ0Ç|ýz·é’÷À+°uÉšÈ8X"îØÈ]IU­MY—©¹“OÄp8Ô»z3öcZÕ\6QÁ{; =þ;>Û`JJ³‰qˆëpaÚYü»gDé0Mä‘ê˜ 'Þ€ez ñ…ýƒ¥lµÙOR‡X6Óefk†Õr¦GÖCõ‹óì«L¾ÓC›Ê6\æ;Úñc¯ì¯ž]9ZkzÓžŠW!õÇüÝSØ_ëK§KÛ6ÛEüŨ?ÖáEÈfºÂ»%ÖOÓÃuŠïxeý9=§ÿ ÿnJúÏçÛßUkÿG\û¯ì J?|“¶‘—)‰Ô,ø¯p)ƒ²÷Õåó­£¢%‡~Ðé Às<'O¨;±ƒ.-ú¹;û?LzÔb¨¢¹°-øQ…<¢é™bR9ÊüU ÙIu!~¬#l¤Ý×*Á&´ p(ñæ¿QTfSѬ(âÇae¦š•XÏþôŽQ•_óES¸‚4¤Rø /:F”üã³Ù+Mž¨Ä•éÑ(A–\dräš÷Ñ?X…Yp§´Ìß µ‰öÏþ« J><²a@.S‡ä×ò‚¿ßˆÑiÈì?Áðx‚/ûP±ò}:ó)%×üÍYš0œ×ĸ¦1àÇ^P–Íö Ñ˜µ=àúdòô×tÐ,ãê-O×$|©´@õK¤ø‘]ή&ÕâÀKX]ö³@›–ø¨àg8£%sÕ=LvmvÑb—SzºW6G¸‡Ó”@ü»ÃÀ³å ÂJ²¸»õØL‰ €)ZEåp}Ùî*'Û™<ˆöùa‡Ž¡Æ×Ô]á3*ÕÂñÒ7ãõm9ý0ž¥{Ú&®5ÓY× ½û&ÝÙNàÇK½6õG [}3wÂÔ_T&‡;^NîÝgÞVö¼S¿MÕŽê^œU{êJtä 7ӛόÛ8c™‰ÌþÓ˜Ný1‚ i=Ñ~¼þ—_Û¿ü=¤Áò &ô£j”¤j,g|a“¸læG/ ¾=0ê›ÉmÍ¡ðYËèKÏnl RYÏtüõ ÎXýS˜h(ÅT¯£yœ€oŒ‰þqZÀÚ¡ŸïFã>ÌüÝ6æJ&¢ bžâ¸µuèç Íz(K…Áê»è÷s`'œÃ쯭.ÏÆ¿›]Ñw¢š¨ Ó§a«†O· M0>ãwæ<ÆÛÐS–^èUŒ`ܸ*Où ßëÉ¢)wÃà‡zL ájËœÔs"û£ºâwNel7VÓGRĬDÿy0uM1󜾙îó¢ôŸO7lú-kw­;ŽÁlÿ•ù%)Q?Bû?^HÙþµþ¡â㊫,P’Ð~šY‡’´QJ ~¬PÖ¡d—÷Ûߨüp‰yÚÕÙ,>0‘Öœù‰9èaß .ôÆQ«)¿‹R‘½ŽbÂaþÕ²é›êÑÿî!td7T€þÁš6D~Ir¢¶Ê«N&Òo„{iIžß«#ûGó{wQs3aß B4T×ÿî a~ÿˆ2Yµt…pê«`¸Ó t¦ò˜ ’¬eÖU° 4ž±xÚQ9Üw6ÌAì?®—Ã_%$ª}Fé°:#vPgÌ#ž¥K/Œi5}5è6šïRAíÌûÏÝ•ªäöíq \$þå#‹.AŽÞ‘ƒïygéŧ-£þ8-N«UCfŸÙO(Ì*Nñ@a͉J߃ÿÊÑ?|ˆø»È­—G^“¡¹ ,mÁ4ž'–‰úã£ò1ÌQ~þè$— Á˜àG3Ü\¨/›Q‰\Ö2ëû™æ°E¥#Ž|9õG/"bÐ?âù‹"Áo<:uDøÑ)?`qMÅ`WÚÀÔ=$S`Ê<Ùí ý=¹¬/ŸhùÎÆòøE¢´Wjˆ:Ü· pHÖ¬ò»Ü¹ôyyëÁ ˆ;Óû6Åas1%ÏÞ*ñ~%ÕÒ(ú'2hf˜m_¯«5Ø&ôŠMúó‰6i™æåÍä÷ÕøÁ6£`ö•B?ûQ}<§8ÆB*­~Dg ‘Æ“7hâóÏ+ug~Éð£3wÚ–«üUCã%x1à•ú£ŸÏD©¨Äù a2º7÷ò¥‘Ù°¶¸ûèïÑ@êÓÿñX²ïœôI¹ÏñÎ’ñ9Ið?%Ã÷VÿÕh:4Æáç²ÎpˆùŸ”*M9tú“(>V·h^Ôœ Q1Œ£¡”¼D},rð¾¹Â!6ÁÚ9æ—dç(³Í\ÔYÇéטAϤ?þµ¹†µUªîcÙˆEý†7qÓPâi^vü8,¤ÿcúÇ@ò½Û⾑϶ØP›ÀÜ_äyæ&oV˜²ÙVõûÝAÂüþ1eºZ€è–‚¸ºJÉ÷³ •ˆ+šÂJ¾ÁBOgþnwû“ s€p?®—V£Üǧ‚ù„vë ÃfõY,Q/À‰à(Ú…n=þÊ9 ó¯Ö(UÈè»ò÷uþ™Ÿó, +ó‰ù%Ș¿pvR)xÂûx²]dþUëßÖo¥Ãòq‘\ß ZàÏY[ûRwáÚ/kÝÈÓ_‘é[›Ó~gbÊÿõþØLWMˆÚ‘“þÁ÷ôHHÒA)«â§ø(Ç”ëpO¡~º¨\ÝEöQW†³‰GÜ,¡y°ñ¼ƒÜƒþó­"Ÿ¸CVGé`?먯¢’†¼y›(Šÿj2ûyÆŠŽôx‹^äâð_=-ÕÑQ:b+µÈ¤ü5Gôõ]Ü¥@í9:Êl˜¯ïèçCèý8‰wýUéø~ ZlÎ:îÎlj±YÚeR¸+~§úƒgÑÏgSmÍÖöÁª­Å¿ëma_mfän‚µÿ€Ûø<^Ö9àFoðx®)7°$…1`Í/iËü¶Nd y'Q]kB,€nÜ ¤\C´w¤Gþ:ÿXôïÔ6¥ù¤†ÜÝ`j³ö(+šŠ‰äÊi”žc¼­™çÂW¤g†™¬|ÏY¦ ¯ [#îÉ?¤0'üÕy”¡U8&*èË©«ó OûõÖ”§Óÿ‘Vy¾¶šýƒÑÏsØ1g·"HÖåhµH}ôŠÆf¦/§¯ó;4ß™yiaïÑÏç ;~ì–·¨7ÑÏÝÐÉÍÄS#§m*L.žG<\fÍÍ\ôî1m¥ØP¼Õ?îow#YŽG¬Ídm›žND¯C; ¡) ÿ‰‚~>×~g~Héÿõü]•:ÆQ¡¤Pó}²ôƒè~Ê"Å[ñ—SÈ¡ó0£pZÒöGÄöÇDÑô”@·ž­z Y¨Njûhîl¨|;ö1u Ùê;tø!°m›D{bÞur‰`ð#jóãË]™¼Ô‰HºJ¦5ñ®>Ý CÀ ¼OgPâ»m…¨%üØNýaMæ¶âêªkÆA òüe(¤®°Ü¯ÉøÓ2ØdnŽÅ þó_>Òöׯ%Ž>€ÇÙF´´p¢_H]T™*÷:8µcYîãÜìÿ(û‡#ŽRŠ¢Çtƒ ¢§%Gª‚ž/£*¤äh*Jé:âýfÎs%ñù$óÛÛÊ5~sLS>Lÿ¹AU4Ž;çGýÏd~bâní,ÌÓ2H…s¶6Ë»rÌÉ ¾ƒ¦‹7Jdów3È)U…{õ õ¥5UÖЦÈ{…šá&ø±@=…ÞÛ—³ûfU™©2?‹ÚúHðÃ[º§”ûÑuzÁ&9r„‘ î2xºaôë9BíГ®Âàì ‹4Ðk–ó÷|mŸxB}-ŠpÍÍè?/òç¢>ØND}gwŸò.¶&…sï…þ‘—hêˆ b)¿Ïɧ«ú¢ÙÄC?ßáxã©?Rr÷³¿­-ºnàÇBbó]j‚ lÙ^ÕÚ,Á”¥üÆmX¶‚à{•OþÉ~:­‚b9"Cÿº¯Ôå.Ÿ£’,C•Ò[ÿ@ý±ˆx5gRæ^7oãß=I¤wf â ½&G\…ï«#xz,þ¬„ª¦ÖQ_ªd% ÐKæ_Uâ­8AÿùJfK­eþî&Ô…Šì˜ÝÁ5¿á¿Zgmö ©?ª £XûjDAág?¿òòõV~¸i õ¢†¾šýQuÑ?êÒ!Ÿ–n’÷(òm™uŸÉÈ®L¯/Îv ½; ¿¶ÙF—Ãøw·ÊGà¯zð¾÷§{ðºHff°Í¢0ówš{PË›àß}Š®ùN_Ï<÷Ú\÷XüWñê\…­¨Ë‘mÿ•ú#óK–ÚïŒÁžŽö_…¾mQùéýçiQËÓ«yÕ—rK޲M*¢œQ<`°èkžÿÊŸùWÄñ%dH7ôóTxì½ÕÅ"±¸~ÔQzFë< ) ,Ðf&SÕ‡c|Ž~>X~M7}Õt¹§dÂM—(îJ.”sªƒÈ<É£k¹ªÀt„§¯J<9 «“ˆÿ¢‚º: 7nø‘›?¥Qn%®' /Cn8 ÆÈEò¿ÊBVòE ê·úgÃ_}¹Ñer‚‰Ó©p’åW#+=GF¼J«û1‡v<ÂTÖ_Ow±âŒ‚R•ûúy6å–šK,>1U‚‹Ú “·i¿þªÕ?ôlÄ¿k휚 ®¡^ˆËìUÉ-®GiæŽ(…aõ} ?<©lFóù)Åcû œ ~´àj£?Ó&ñ<ªÁ`çÂÉÚü¨a4CGIÅQ|Bÿà2c®§<ôk´á !¨g>‹Ðiñå/Ê2ƒc ~#%‹Þk‰˜à…ßv çXÆi¯›WèÂô¥ë/EˆÿÊÅçÕ(ÕøêˆËGÿ` HAþ3“p ¸ Íƕ֪*®î2sý»¹š^t?ôóñ°muà…›þÁ¯p cµÙ¢7̼g˜úã¬zJXA{‘'Ôè—èµ÷Ægáμö&ÌOÔmL2¹À6Ç"f>öN6’êVGÖM²ƒ:7¦þ7ê÷Uhýñúãßú¯ÞKkP¤g(IÕìêc8Iò@ÿØÈüö¥Ô¹äèuGž•v*Řœøèþ %A¨ée™¹3S… Ž$©Z9šóÓÓ¿[˜ÉÝ©èpÖ^¨Å<ù†¼XÔÔÖ2ÿJÆ9TW åñì¯r$?$—»ÈñÔÊÄw7žw-œ¡ÌyæúU-F|ˆ¬õ%~à§b"ýƒ{"ùóË[™Ï4«ÿÜDšJlº 3Š¿ŸS;\$z—&2>Ã1>: ûOK}ÅzÞí’Ú#˜0o¢ó⺠Ñú oY!˜'â÷g¸ùÑx7žFpuF<7Iš¤¤GË.Ç{}¤LMÄ, ïû 6À¤›DÒW€Ö.¥ ^ê=àGõp‘%ô˜Š¼VöïˆõýÉÆ}¹®däNøóeõ{¨SðÓ«ÓÃpŽ äYl£éÿ( u—š";õÑ4œ¶És&kAÊ¢pÇ“ªìùN{œyÓ4?})üU{Ã<¹}%<¶çèÖxŒþ±Wðª…úaŽ™N¬½ž]„ö ô–úËäLÜ‹ÇÚ@0;ß§,Dö.ø¬ºâ×Do÷£ùxsüW>àÉfEíÐÛRoÞá ýÅQ¿‹öŒ÷<þ«óÔ) •üá&sL²#°XÈü«JLâ…ûö!=òûè–_c¤B??rÍ£Ö«Î;~‹ýƒ{í×[™ýQ7‰&åù^áh?f¡xwƒZÀ,ÕgoÔRþn¶ý£?½%ÙqÇ)Ô_©ŽG3ëb ßæ=vüX-POŠÞàGÞ˜[âHë‹vâÄüĺ¸ŒÛÀaùÚ.˜)mùM –²]&½p5¤Ô/ 9^! µÕ_òÎܰ_ñî‡Øòœ0û£t9-ÐÿݧëòFöGmQLµ²zœ¯’´K*ÎüöÊBe7úGôü»—¥“JYê‡â½šÙðàÄ•åMê ñL=2ÿ*zúGeæ_§A9ÍŒ>•]Û¯v#äØì¯íŠ*í%‰}¸m§EéÊc3›>™Z‡|r œH9bg~}úÀyÕrM$>Å7ýóÛ ©³¢p++ ÕrdÇÇâIäI‰U.°8÷‰¤7áP Ò…D/e‘÷g¸]š/<`üª¢›ÄEQi~äåhÇñ%5À1u †!=5mɃi»”œ8â2¥2üR=²—‰Ñé8RU*ä;±É˜“¡šoCE\;0y({„ów7¿$–¼B¾Šw3\ÆgΚäF|ˆú¡S×½Q"Û_›ÿÕ+q’X~ÜXÊç[zC\ÏV_|.Ñ]=ÿʪ?¬=Nq©$ÑîŠ<³Y‘àÇ é g/SXÓ˜,¿î8¾é éߥÔÙ³.òÁf,D}x볎oûx0¡!w×[ ¦o*ü£Æ4”ÊÔ=ɉgÓÁs Ø6ê¬ulåH‚«³Ì}&Ôï$ôŸÏ‚#ùF¥3€š¡±\ "òW~Ê üW£À£¥zèÖþÁe¸U/Á»ƒVVßÝÌžޔT5c‰º¹ñ-×›Ó2 ”˯”w†kónMe?áJÎï½ö‚úc¶1I‡þÑ õã2Y´'ZŠ3[Ï£ÆÓ§‚eyFÇÁÕ+Jøn© b9çˆ>ÜÄÞ¥mÕ“!·0¦ãˆZmvB?¿ƒ2íoüÀ-v-yÓìúÌ]ÜL¸wÃ<ØÀIº¬…òpòªµéý*.‹ÆñC”ÖëS­]?–p–Í™QØ=稑|ŒƒæN>«µ±ý|êÙ`0‘k°¿ö«¨H&µïLÁ„,£Š­&êy#*¤Ô¨µBúý˜«ï‚J¯ÌßšÓä˜SE[‚;~l‘ï©÷àUçSrÒOðÒx‚[ûk—Ié¯g?üÁ7gó‰îŠûª!ó¯fá¿Ú¿{ ¶>ÈmþWæ_%gËÞö7ëõGè3ûÒJ|¼VÉÔjÌ/±¶sl”é'\Œþq î)*¹xè’6+ùÑ?n 4IZcõ‡’VN C·øª>Vó¨£é¿Ê¯\ab¦¯HFÔJÇÆ¸†Ìßý!¯ÈF'ˆ÷â€èªŽ·ß‡Ðóøõ§”Ì'O¢–åi¯"_(EÉ~4ÒÞ¨õˆa~0F.ða—Ù^G=øëÿåwŽ*žj:ÞœXøP=ˆZqõ‹d6cˆÔw‰¡×P¯«’ñ¿£¿»°XÁþk¯4}0¸ö®c7¹‰§V€L~±ß…ót¬Åeþ¿ï¤ÝùãüÄeJF"}Xþ‹ÄÌ쨨È!ˆÌ ø±–Ü|;jýZª…{â(úùïœÕ1åóèVt™Êõm¡þ×y÷;sÕÍñÆ´¿êÄœ#¶ƒ{ÒþÊš_#’ëN…þñNœ?ŽÂ_ys¿JsõÐpÓêO؆0E] #ÔgJ>e§Ä .¡¥¯ˆ?vK÷•4ÂØ•ø>Í…oú<î– ‰ ¥Œ¯ë,ìÈÎÑÀq·–ø; ý¿†¶‰}ÍE"œa[¥’(Ëy¥&-&Šß gßBõ° ý#1«,óÛ³Öþs'ð£&µ\1âiI¢ó(=ƒ–ä—úc¹r]$ó“`3ˆøSÀIW¼MPfÐ>Ñ8Ƥ\èÝ…‰ù‹¹ê"œ­Ê Š;UcÅr´„þõ\©Ç38À“Ì ËgõÇŸÕ§‚‰÷yÉx÷±?ê³¹Ö¾{w©\ó¡~x -t!ÎÒ$5âü’u¼ÁAœ•Õñ~@;O5ßl,Ð%üW]è™~ÎþsO¦J­£ÿCCÀ¬þèIc¨öP9d†ýüÆHãä&ZaîǺcè…;uÃKx¡'F£}ö]Ø3[ÌLhÁŒ‡ôŸ¿£§ÆÂO®y£ÞF,‘öÔ~±±äÄêI¾W§x“Œõ|ßýõfFmâ|:R\Èñ7sÄ!ôû½0N¡¸YÌÎÆ.Ô¨yx›™y‰¯°^ÿUüWÏD!¾cS´E Ûm6>U²%§ƒ¤'úùðèˆÔ” ø'©?ºríŒ{h>–‹/€·j¶è+¾†Ñ?öÉ×ÔÛà‡Ï·Ø|Æ0ms˜¬’€š²ÊLr3½m‘íý*™Ì3úXP¯>´Yï,þö|'›r—¾¨¡Žû¥ÿ¿ÿ_^‰‚þócþ+Ýþ«Ÿ¿µ¾–VÈ阿›^-AÿGW޲†þCÊXe—rTÎ$ïÚaþ÷¿:(íf~Éü»÷™ŽëLý‘–ÉÀë¨?¾«OØ_Û,šóÛK`ÍCÿyžzaj…q¢·,ð_ Ño&+6‹òþºLÎÂÓ^ÃQ™_˜ ¯“vUL< $ÏÜ'Šà:^!ŠªK¢pÍþÊxذ DšĤÑÌY8€~2™·âØô÷v¤blñuÐzŠª|6G$o6¯'ƒWSÈìöy/%Iô?B–R‚7. ®,™Üy÷aÿýW›•&è ©¯n§3óçœÉ»4&DÅ N8À…­›<á}6Ðr‘i¹õØùe”öÉoD<ª¢±Ü%*ÁØDó^Ô#­ˆIl*!vª|Ãær7ÖƒÄîÔ9èÕy­¼ä€èajl®ë Ytm#gVô¨†žXˆ*楺X½B®>R/~´=úS“Cô‰Tÿ؉ßϪ?âÂøT¦þ8 9„(Kß ?ï|\l%ð yë—ôûô¼[óÛçQ#Ž¡öÙ­^ÿ¥þèÁ4”†ô]”D]X >œ§v8¨Õ‚±¹æ1ƒ™3@ŽÛL;Ì‚—µ"Hœ›ª¡"ç;QÏLý±%Â=ô¥ÐÜ-v¸ñ÷(ôLb|ÆñG ˆ‚¾ÌÔJƾŽräâ3PºÊðIÇ@.6°sÍi#ôÊjª§ÓdåYQ5zé·´÷dÑ+é÷s`²Tðcýy£Èš» çq;S;í¤:› ºk7"èçšðç­Ò^hC˜Ô»MóF?_Áþ¨xÄ–ïJS;œ&kþÌ´•kàÇ|º4r/çášš¥÷Ð3†ñïº1ÿª?w®‡þü¨~Ôƒ¿zOõÍèDÿGWê™+ìŸÕÈù{ãÇr1îáHÖþó-àÇ\ý«8egRÓï{ä „]NgœÄŸ—û>ž~¼æf£9ñÞšß¾”'™’2ÛôF[iLýaáÇ1´©ñÔ Ãèåå5Ì/ÉC&ÅÆ=­x®5êÙš¢Ÿ÷4ó M\9æ1¿ä*SFvÛÐÓëÐýhï¿.ЦÓÍž˜÷úç •/áçɤˆ‘8UòkGŒ$¶¹àGê gêRL¾ò¶CïInžFÿ¨Ž b†slTº$Ú%ØÞ:T™¹Ä­ŸüþS¡þuR¼—R“åÿ»ÿÊü+KÿH¡V?†Ì/Ù.%eþîb0$€Ù¹ÑÛnrF: ¤Æ{õ Q´ÞªMmÂn«YôŸ'a‚{2öŸÿ.JE~öI©ÿ ÙS“Û—a¿Bw1G–ÝD;#€Ìî^”ýWþ¢,jGžö*rÔ¸ èKñz¾Tkï-ÿÕ-áLf½œ©Q©?¶)£Õ\Ä¢dúIbæ2ø«§¸¦ò}6Ý%’µ bZ ö&wþã³9 Í›‰4‰„Y9bOÎ'Ñ)ά 9érà]0WcA…¢L1Š˜7G¼{‹”d8l€I;a$÷¯†–„ŽˆŒt¼Å?6€«ÑZvƒÌÅU|ÖÖìšÈþz(‘o€^àÃprßâœGGŽèÅü·7üÎ&fw|"K_K~{Æm ˜Rý\¨‘ir)e›úEÕRé;À™j¿àGU|gù‰ÆåØu–ÞºIÜ…qð7tmQY“j1Åÿ׳Û(]TŠs´˜dÄÖž”ÛT‚ýy*`Zú}ãèåõ@é[úêm+W½•ÿªÓ 墮¹&ÙÏ_<¹´ô´-#Š?çŽûáSÞÃ4‘µ‘‹¬”nñÌàGuÔ¤|Ô)ݨ~Ütgôó‹Ž·Œú¹þŒ´`â0d¦å΃ýú‚¦?šNï‘l^mh:1Ù¶<êôŽV/ÒØ·ª<£Z%¼+î¹Òvî.Õ[)Ž7V¿®=Ó] O¶&%0 Á¸øó÷7¶+9QF0ÊTj§(3x‡\µWʦpgøDÝEGÊ3Îj2Èà£íÔý`Õú‘ŧe"áô†;z€×þ”Ìz5×:µÛµ{¨”]8Ù7Lš!·ÔâðI˜QßOo-²ÑÿaàÚMŒ®Ý‰>ÉÌI/n¯§°¿Ö ljϼª û=üÌ ø“ µ{ö‡,ó¦ð½²vé¤1rj£Å-P ÿÕÿÕtè0“´ÜCð#wp½…]Ë0{ à S¯Ñ1:‘,‹Ç<¥ÉT ™˜‚ï@…ç ~ìÀ¿[7Wf¢Z}ðççÓ›’,¸±ø5[Ì™‡tÔêY\H4Ú†î2L{ͼçïNgê>¼iÙaTì|âó­ýƒûõ8œ–áßÝÌ|î÷º3S×âv£<Ñf ŽW¦þØáx•{¢O-ÿ]âš;¾î9ìfúŒ?x8{NçZœ={î¾Á_ñ{UÑTTã„>N̺9#ôŸWZsî÷y’¥ÀÄ6à¥ÂYù;™é[ž¸|‹i‚ºmYsS:ßí áØŽÓvª~—çóàÓ :EWÁ@5fú|2#oÑêäÙô>WìõÇvyüÕÐh¨U? Ã,³ì™À~fË[]%¥mûlÙ'\ßü¤{R8š 8²#‘"ßžnZܹÄûÿç~ø"Í’GÙïŒ*Çú×üÕ[ɕ޼1Ì¿J¤¾ Ùÿ±ýcóÛWÀ_%•Eë¢.J¾JÔXt^ÇÓVÃXµG·Þ@ý‘†Î›ôjK¥µý¬£rà\Ê{ü”gùv‡qO*fàßM¡øñ·:+*ÁŒ÷‰¢þ‘~&:?$jŽ)Ž£þ®#c~®–&¢ ›7s«^ ×x²o¶=îb‰Í)àU­½2sDcTÝÐùí~!ø1ˆ·­ôqqÈ(Fÿàœ ×éu™ [5Üæa3léüx¥ïËДNL7#ƒ Ã݃dÓ“‹èMø°ßžÿÓþ«Ð7áóÛÙŸcôü]òÀ5^IÎvŽÇ!Æ.)r€íçîÌOLÍýQ×Ð?ò±yÐ@Iˆ¡uQã«åjò æ_%"³LmÿnyE&'U@Nô.dT"e•èDg…Ãs ý<|Gíï®>)»‹¨3ðí.%{î3TKŸË[ñD-N~x”¢(l þª´êùÝјR¬ôWóRoÄ!®‡·ú€Ó©x4•úc ¬Q@HýAÒªMîyñõ’­)õÉ-³R ¢JÊ»vž­!^N~׳ë;”Q»«”úÃÓ^£T†ëoÉßV‚ë,ÚÒ­DŽžŒL|×»œû›—“þ¼ÓðWõsÌW’·|S¨T*ƒˆ»{8Z|ê£î(3ՈǕµ)!:îq0t$Ÿ¹L­GðþÈø«r&ÕzO£¥).ƒÙ¯œôMòà«Z&1\Ý÷Ô„Ê~8Oi&ùøµ¸Äñ‘àÇvôâ´– ¢!×v‰g9¾ˆîãüºNדD”㨠±ùÌ%ä‹k¹Ž6Ú3õÙ/ýƒ ¨fþâ›m1V{É־Z"ðU¢%ôR†7+üU}Üa®Zâ<‹þ‘ê—úÃÿ®5½2'úù1‹EÔƒ+QRnðótúÓ^›ýwè?~Fë â“ûQ,?œ#ä[•– ài²òæ0`ˆÔᯖËtìM+öG…™É„Çê¨O¹‚"ð\›Á1<«Qø¯f…{Ê?Tœ}OÐì\@¤iÚ6} [²¢"ÄÆÛæŽq‰¬ù€>Æ8Ádò-q( ø0ŒN$B{DgHmåÄûμ_ p3ÔÙµê!ýƒ±¨7â·B5SÅLŒ~Þ„ø?Ûê&dÿG]ðã-Ý$yfmù@^¶—w*¡Óÿ‘ä-ÌŒúnæv´W!ò»sÌÛhßþt³_2˜0e\ç“Á–†Þ-Šˆsöë-Fz)r¢ÍñÀ”>ÔNEm©9Êt6sØÀÞûøoûR…„e‡[ª´a3ã1ys®ñ½ž!:ÒÿqÁ^xËWñäß ${Ïþbð_׌Zì‘©SVº€Ÿ£¨ÒÁ¯e創Œ?Î0ÿª¥xN¼ïGä}+9Äqƒ¿êFT«Ÿ£†iB%±–œ>Œ÷ƒ§´vŸÌå³/«²’7“Õ”O­ŠþaÍ/¹Å38 ~la~I2x‰Žh«pOeCÿXJ‹‹UDÌ™°6é@¿-Ž·“ú#3O­lSüÕP”ê5°5WÀˆ…d¹KP¥ûУöYÏKÿÇžMEÝ z@·X‚KÚIiŠÖÏØ}œüÿ!úù:ª˜‰ Z "Ö " ik…ÿª™1ÿUkÎχkï†+ê1ò–2"Üñ £<×PáyŠÍøÄcúIXµº†zþfx¢"¨ Ûp ©tÔ]åÿ·R¥ŒAKZËgÏäèð/«¨?f£ßÕ#*.‡ßª-ZiÓ ©Wß–ð_ÓˆÓÁLûúÌdÂá`Þbæ'Ö4ÖÑ÷±SM‡#¬ b“ý‰G¦ñ^K¨?¢'»‘Œù5YØ5Ú|ËYí£g8Ãfð7¨57Œ|fE:KÒ?t–¶»¶†‰ëGí×[L>­J¼íåÈr¼ô&BÑñ+01¬››ã}NNü¯N=³™'³ž*§ÓõcßA×ëä%óÄ..{íø±CƉ>o‘µâ–ðëz3û¤0ÚLvSØÚÐɹöÎ4lÍçúa³&x¹ w›¥è¤†1ì U‡÷)¶Ø¯ø?÷ƒ.ÏS8°½6•ý>Eï,¾I«e¬0Ñ?. 1[û£’âÇš¦¬R®PD¯;ò,þÝÜâ"SŸ^³?ª þ«øèçÓÔÉâ‡z„i¼¥¢é¿ª¨Hd¸û…3±°^©ðW6e«è…òñ^¤£ó­¡:(JWž€Ú*·ÚŸø>—ØW‹ì»Ù`_öG•&VŸ¾RåHLy-©î‹Â-ôU¦ªe©?¾§-Q0ïXm²dÞŒYüïªLàG |ã]þx†ç¥©bõ~*‚TÄâ69'ÕÆyfU´„qº¯¼ÆÎŠßµÛ¬?¶(uCø«6 Ù!ؤ‰0D•À8 Æ> l“5{wß# T*„WîŒÚú·ýƒ‰qŠ¿è÷.DVk®clÞýn0Yµõ»àú"õK8O+n>Z‹#ýƒÏ”Èæ'&`ŠŒ~¤€ñꂚ2k®Ë»£¨5ƒÕäò]PF¡¸pIĦfÜ ~—n2oíÚÉ@tØúYžèpžpZê>ÔmQæ‹Ñ/½ ù®© ó ÔõE0JqNÜþEóéA7bEp«"ê‡Yû#r˳üjŠFîØ”øÞx‹ºœŽÈW-D?_ŠÛÖšßžX‹ùKý1UyÈ[:¯Ÿ7ŠÊr*Þ@̓J殨)pá+‰|=Ìœ(*™èÎs‡¿ÊM'ÇQrü {K-ƒÒ.Ü»¨twÏÑjsE]©?Ø:ÅL¥¥øm뢟¤oÍÁ¶Ûˆ‰_¶,Ygòðèð3Ÿ _GÐ?âˆuä÷8Þlž¢»æ£ï¥þhËüÄÌ ·üWßÙëzýc(½i _îÉHôx/X¢!èCÙÃÌß(õ“[óFuç¬\ùävø;qñ4}5*£tL¥WãÎVæ·áx ÉÇ«{8¢§.‡0cƒõ—a¶¹êòg垇«àý=%»tâÀª5æ Kð–åt” gÞ¡ ¯d ÿ«nþe\«ìN…T“«9ÃÆòÐ)³ÅññXѤo~fѬt¶•ÇÕÜÌb¦CûHaÛGGÉc0s [³æp´o̰êë¼1Ëé?%VØñÃWÞ¯^ÖF…|#N‹fqÛtfe™+PŒù%Ì¥±yÚî£GÕ5©?r3;ÒØ~œ"£;Goék¯ÕÿÆþŒòú6~†9ƒ9p‘yíþûúç'i-ûÏWáß-¯¾­þóR1唲ÿÕapiß?ýá_þÝué’ÒB܃oâ{3Æ*5=ˆ>êJ2{jüWÑÓ?+ÉÑW½EIf¶ 'móÛ5å è §ñV”b¢G?u ý>ür:a~Éú#Ÿ:ØáGLªO_7L+ö·ƒÑØA\‰K‹C_{©(í¯½Lÿ‡3™¥A}½T!«(а€±ü¸Èyg?Òh£0¿ý€´IøQQY3ª ÂTYÓARÁ?Õ!+õGõÀ‡4‘ ?vðû÷(MéPjB=ó”ëµøTÈËS‘•[}Ø›BüWpù8ás<«Va?|˜ÛæG“ýƒ6œ¾^döý9£\ l/âù6ÀÃpPÓɃ©·\Q+Žp¾‹Ð¬Ó£Ÿ¿Tî…9ÊÏ“ÉåTwÍ çWUø« ÌóªÁ½: çtz°zXÜ—ïÝxÓà’RО’Úf$ø±EúÎþs¨Cýˆfª~öÊÚ_Œ.…º(§ÀÍÒ(‹ˆÞ÷ÀÏM0w‹Á÷ñ à õ2¾÷Ÿçõ÷?Ç*õ…5õ¥ ¿/Šî=Ðh/n`_f0Æ!Ïœ”J!9]„ a›¾òÉ ˆUSÁ†¼Ì¿Úáx+”;" ¹k!ª”í°hñ ¬kz¾2üÏü«žf""}qþ7“ŽÇRúC*†þøn½©5 Gø¾¼VúqO®e”£þèô>ówçÓ˜‰ÒøÓ›20oý Js_êªø%ÖÂ`µ?nó¶ÞŽ0¿½€Øÿê6ÕŸqw™vJß Cßo@LcÇËe>5>ÃÚûÑer•.ÕÂôuÔ! yJŽâý¶“úÈ£yOºó6,¿óÂÜ5Á;e»5þ«±T"P½óƒµ8çåt]ä7|øÜtTú8StUó°ï ûk¿¢/ÞC©+af£½§0-þÝÄá~àî)4î)ðWOÀ¼L¶,aÖ7ÁØ-Dÿ¨L5å+Ê„ñ_•–ת2—ªÜ‡…z!é>FI[&s-UL.zQFÀüyâÚ½‚>t³|q±Í¯¨joÈÂæáßíHO‚¿?ÈW˜§åBEÛŽoÚ1ñÍÈHµ±›ùí·À¶ÉxºªP¼æx™ÌìÿÈLÈzulúqr¢|‡:rä8ÿÿ•Îô«É¡ï*øñoû?±0>ûksª™ÈÇrÌíRnø+wvJ#öG»(]F|D&ýŠ™wõUMÍJâNÕS$ûÔTªs„|Êþ²ü懺ðWÅqnâ U¡þÀ,ÂØÊ>ðã¢8ƒÿêŽø+Šøa“ûÊ5Õ±h§îdñ͉~åô©äùÏÕ†Ôõ—áD¿ˆò8}\Ñ?ýælÂþöYÅM-O$J¯c9‚¿ÀJ—?f `,F©>þ(¦6R”}RaæçƒÒ:±I$ ;zƒ÷g7:ÈtŽ~°lÞðWÙô °;ëÈÀ†ÀÝçˆÂþAê#èÒÍP?öcè2J£Ì8 (Ç%ë±zÏ×r/bè›Ðòî‰Sjuæ\†9¡0?& ×H…¿Ú>ô¥šq&ÛêDÎ則ôOgßü—œéD¢òQþž†o 5üÕ=%0ÌQ~þ˜Š)úßÄ xºÓàÃNî} žmEª7ýø1J½BÛÿUSžÎtŽš‘Z6!Ÿí ~l’>3ïÀšÖ›8dÍIuáç‚¶CùïœUcðן ÷°Ägú„ðkˉ̭µ[ì¯Íáš{1¿¤8w-7|Êfê‹sÔ€A 5x€““óö3}à'Î3m$»cWÿÁÓšDLgâ¤å­þ¾^7%WÄ0ôe ÆR} ^ÙUhÝÁ“‰!óK‚Ù¼F¬5‰+3D àŽÝMô-¡/3Ó*VGVè_¯•¼aÑ?JÀˆu"¶ëËÑÏ'1¯ªùý5bj [œWÕ‰°wC8¡µDû®œ¡…• ᎗…NNSÍÛkí¯¯¦þð0ÚQ ÄÀ5ÍywŒSl=º£O6®à°6‰Àšq5í™ÈÒüå(IcäñðW=õwx*Úè…p.×fÿ`op¢šŠ+z/P½5f†t@ÿXJ×wv*æh÷èðìNÅøBì·_l|ú}ƒx+.ò}Jo$a¬‚NÒŽ®"Žâjàî9üWÓ™9üØØGÿà6º.JWõr ÜÔWm£('Nد·Š¼Y—¤ x¾˜ýOµ}F [°^Ì:Lr4”Ÿ0uÄ dŸŒo,?êM<â½L:‚ý`£Ûñcoˆþ1šÈ1˜lä˜xc¤µ­Àk‡z0sÈVÃÔ6/Û)3«-½©‡¨š’3w®á@Ö•œ,³ú‡„a·ýŠÿs?ă¿o¿36Ø+Gû¯¢wßCæ'º+Žj6ðÃêÎØ(¤÷|9þ«ÃrùR´wQºŸðRÈp"6­;èÒÃlS=À³8¼Ê(¢už5k¦ùôFäÏ™ßÞSŽ…ÿª+ž¬§" O­½:,JGLÆ~ïê$*+ûü vÇ™ w€¤¶B9È·2~ˆþá*ª©žQ¸æ3Š‹š\;6¼ÎZ"–7RoüšóÀ“œïßüÕÞÃÙÁ¤…èçd¾ÁÄÂíD·¹p@ýáNvò–eÔ¯Ðg²4²ªå¬Ú¹?ê[”òàF+Þë àˆ5·"ÝŸa“u2û·|#W  oÅå²€Åj³ß⇣|P~-¬>û¡ÄóÜ¥8°?CÈ «ÿ¦Ó¦^p½+ù_þ^„¶]ûHÿù»H.5•\G¾êÔmM©ffÁ«5I‚q<Ð ŠÖêUòÇ6t© C˳IÉ.ËØ|×D‚;ñïVþ°{}P~àW›Ç6[ˆß‹ûö,+B¿ÛöG}¦¶ÛÎ} 6á³/¨wÙ?øê]Cx³ÌÔkA¤à䪙}ú3vFm5Ú“_¡ÿ#%Sºçó‰:~Û™àÌ0òûLZÆ0ÝÎ_ú\ð#1çT˜{ (6ŸÀÌùWëÁÄêwlÚ¶é3¡yÏ¥:,@v¿ !¯>‹Ú+m„}ϯ•^œûEž[±Öè39Î\fqÅ@‡D.~þÝŠtØÝ£&+„R¿˜Ø<WŸ«v-Bÿ ƒØÏ|ƒêy4Ž¥Y!ýKÁ5è)‡ñ%Uc6ÈFz¾êÃÀÔ9=À‡@fK¶Díî ~¼²?ã!ÒTy0ϵ7¬¦3HÜÄøÄÞÁox’ú¡w FÿÈÏþs•é8d­ùí>àÇ–ÿ!î,à²Êº¶bïsÎmwwÝÝØc÷ØíØ-v·b‹-¶(ŠÝb`¡ˆÝÝßÿ0¯718Âó~ϼò›n`ßûÔŠëºÖZÆ8ê\±ob¯s½J<ÝÖ_]âÉcÆ¡?D4[Ó@ªR\…ùÔ]ú£¹@ýÇ”lžd ¹­ºÌªAý`€Q–ú}æŸowZ‡‚ô×`S'Âð2Zˆ«Tü%aþàf8Ø(•—£ öÅ\¢_ËLvû‡•uulð¦dhcð_ééwÌé?<ñ7Äž¤±<¯WÅe3-õû¸?昩`áKXY›–æ(ÿ±þ#1ù¾4!}&ºÀÌE5¢‹ËÎ#þ÷¾ˆJõ`°~×¢ûnçyŠÜ.¢ª+È?Fã?Rëׂ0Œ½JAú—Ì£§ÉqºjE®~ðýˆÐ<ˆ×(¥?Šªú#-«Z”úó9Bg©&,¯ýLåþ®Kkqéã± þ´ðŠÞWtR?«gDsy•W”Yô:òøô.¨÷D}µ¯Qü±œ1Tì’Þâ(÷€$B•kN}~ø› õêqmœî‚epË%õ¬<Ñç°¬ýyå6þªíŸÈ?Tºúöa»ô…Z(è› Ìÿð€5²uH1 "ò™àJÝØ¥*ÙÜqiÁ¾‹D÷YäíW+.Ñ*€[5ăìÆÎ'ÇbÂO¼e—Qáç_“;¬&[Ž4 à+ö“ü¬²S¨ÛÔ'"‘±,§PYxüîœÃmdpwY×v6ª±SNÅ¿¬«BF‘ŠY-š<"øˆ³ ‚‹ÿ°ŒÃx °¦²ØòrÄciŒ@YHtÕý±xýà?Ú‚XŽ$JË ¾ö‰ˆ!¼þí•WÌ+ËaËj€_ù Áƒ%oÓsï”¶z=Œê ü‡=ëË«5šlö¸~‡º©àÙ_u׋ªœµBÔúm"¿°uÿGé¹ü*ý¯ºÓ)•ù‚^î©ÍéFi"S[YU«:4ÈW«ýµîL펰ûïf'·ð$ÿ˜S=üê1÷,ºnL£>»=ú«çôo@É•þã>»mÿ놅I¥«dìßh­ðöüó‚쩇a稸&€_•£›ÇØ€xŽmÔ’”3ºŒÚ6+øÚ|ò¹Þ îSäÕ0ý ±ïYÑì÷:z{QÕØ—N*)Ì-ðÀ†¼˜6~Ò˜~7©¹”³ÚÓ8€GªˆÏì Fì?ÚÑ?Ñî¾Ð¯6 MEMQJ–§É@òŒ‚Ô{x€‡½"ÿŽQV|ñBú £r¾¡1™ïëñÖ} MnýëÄñÿ§Ê[í^ÿX.S›±QÖS‰a´ÆCÖ £Êú·ïÄ#uÇ8¨ú>@Ma«£y ÅÀTã ûb¯\ˆùYÔÙú‘”»s„\jÔ/ðmÕèÇØ°JW®‡ÖQŽØŸœk1ݺš1?ê-•ž&ùúe"§‘¢vm•ÓlV}è5‚ˆq(wðcqÃLïØÀ¹ÊÃô"èwóYKþ\‘JÖ3ã(¹\7kSéMc/ªþG-B+¦PÛÂÇÕ±ãp¡ªØA£?8ÌU½:¾cÏêð£Ûè¯JêÁŸü>m”žä•@+±†qŒL©;ØØ "û[0É%e*îÒ¿ý×ý¯N+˜ÿüêžL@§ø´¼ìÕD¦8þã48Ù:4Ët›‚§9§…Å]ÂîsžVQ rœÏù@jbI¿R]¢ÐÃ$:ØúV2›Å ZÓ©&_+Vë­ƒ´a×±¿«¡ÿÕWx»•l|R˜ïÞp( ±Ieä@¬Ý70y¬ýZ0±®°Äô»1¹2Q1œèü{„ìhl{IüD ð¾4 •Å,}ýþÚQ»1ï>3‘®–QÁ˜ç„“œU^‚—@sÐØ¨I†q’}M ÎÎJ<=tŸ^¤g‘q”¬ë+èÛRZÉ0 Q9úl5ôw$›©Î¾²aÓã쩼›ÉFö¿$ÄN—³¦¢¼:‹ÿˆ–SÛ’€\!3Úá6F™J³ž'ók³añ™FC2 ÄôŠôD…jW¤Ì@¿»À¼@E\ZôW‰aUæâ¨Ó„­iH—ý•àw´Ð]>i ‰ ¶Â2”k‡Oê+öÒ5ÖÎ?î¡EÊ„W‡'´k 'R?¸<Ô£‹ñðù.ÝøfxŽM¨¥–Pã8¸¼(\ò;˜£+UЉÍá b=Àíž_õŒÖF!œë b®D øWاª0IÉá:ƒZ•çcùÌS³8]¡ÁLOzH¯sO<Ò:øŠ¹ø¸ÁÌÿ¸à¼ õƒÛ©¦ò&*QÍïôº‹o4¥³'i¸ÃÑ€b‘# gxbîfÞìM3)uŠÄ“@ó£¿8+j†È+a‡`9*sÏw¤»J<ÃÛtqÔcÊb*ûXc™¿5hžºüÇ"Ön`~Bs+…{jýß‹ñNÿ±^}Bÿ’ž\QàÍï…Ÿù .þ Y€¬²?}dòX5‹Ñ±îÓÿ*=gs²ÙÍ̉’¡ Ïe}êRГ)rÖyzþW_ÄU'…èß.Ñ8×ñDná¿ê?Ü©̨ûª¸6*é4_m¢¶JÛÌüóà~üY÷´²Bˈþ걸H­M^ð«TjfêÇÑÿê¨ùç¿®…ù>YèôÌiBú¥æ&ÿè F©ÉµýÜ;ÅdòOúïŽpÞÁ!ÿ2ìש˜M¯ŒÊt:V¾÷dic<‘æ#½=¶zvj6½ ®‰9LT_öÃù~ŸÖKÏ]Ôºƒ²Äá®( Ò=L¾ÀFù³b5˜Š·d¼ýDè@á,†Ï(Ö‚”7BM™N»->)kÂ.7¤œ?¨ÖjbÉóÉZ¹_óH­^¬1ºX?lz!¼ZEòv'á;8Qö¼ +äNþ±˜Ÿž>zç íDx{‹¦îP7á?ìúóað1Eˆž:’M@rÛ`‡Qyq@®ëÙ̺¨Ä4Ñ:èáÖŸ'Róé—…ˆûÞ þc(g­>ÜÌØÓp¡°–»še[9 ßžE^'—í"ç†ã?¼ˆÈK‰møÜjXóom/¼ØhøïÁF'ìúÔjUÈ?¶ žýÆ{î"z˜Êo´ãõ=ðçÅœÇzä¥ñºiÀ@&`‰ãÃOÊRô¹†jjýw'‚\Ý3Ò‹/GÛdëÙ€5µÂÄ”qÿÆŸ{hÉ?æÒ%m&¼ó4c:úÝFj·#ðs¨\èOûÞÈ„fj.üGA2%lp~·ƒ,¤Õ µÃZ;"áSAùÇ ì÷=yŸÊŒ…äB1Q&µ@CäK½óð«²T‘ÂiPÕAm^]Îè92¯ÏÚœPëI±™ˆâwFgиòlÊ zUMc+© +L‘ ö~FÔË1x½!¸ÕIÚZ?:`•bâG0±eº›x¦_dþy“0xî¯Oþ1,G6¢†‚ðÄB5üy+¢Ý >æÏã_'ÐËcá§E7‚?.G7Ô6ò€þåwÀ~ø”ûžÿ±O¬Û•¬±ÑÕÚšPÍ ŠÉÚÀ†ìùu©oü†ÿ#lUÛ?ÿÛ¥Øó3cQðÄxãá<ðÙ,3öÉÊzô»½Aß ¢¿ú™VêÇ»LÕò“T†ç¹ bcw‚¯ˆÏüÈ.Uø{¸uØ+±îTsìà?BWüXIQTu—zH¨ÆA²­þx#;ÿh¤ß¥ò‹wðÀv¾Ã»,âØ=Éë†óÇ&W|¯iáwæG}BMp6âÙ ½Õ‡?OAÝ@>1S?CÄÜ•hx^j,+5Ørl²ýQáøÊkøsÛÊ´ [ÐxÎ{€nO'ÿèMÏ“jÊÊX§Í`.áXâ妰f;T_›ˆ—Âúá–Z+QÝl**äf`#oò”oAå…Í4AvÐK0øU|"ü…p 8SjË¢á'U±-Ì{1 /÷\&lÚ$tesˆõ—Ñ ÅŽcÕ£LOú·0?€}¥cj|Þ^2•ê|ÞÀ> ‡É4¿kíÁ"÷¡{(.ÕÜx$¯ýÍæã«Qœ‰G;˜bݱÿQŒŽ!WÙW^z«¸Âд%†žNþZ­¨ oX±wܳ½Xq§\ÅT«Qd.›ñ“èåQšØÞ Nø%Õ*'ÈFá‰ú‘Ë cÝ!¬)E°îsŠ2Im¯º·¡àf Å8™Œ®øU™ÊRÔqÁ¯â¦óÆû¤dÖO‘w%óežEK4kÃQT¤Kúpôfû©p†Š÷ºy„.~fT®Îâˆ9dœñxº’_‘B诞ÑI­OmgØ™‚ÆcüG\Ñïö šÄ¤[Õ|> Õ\+%]æã™q`¹}¹gF‹âAˆùµ«ÕSä3=¸Ÿz“ÝW—Ç™5Ø:”¤£@+Šc½ã4z劖iÞukgM'·K¥ÈÀó×–üãžL,œGüï}a¨óÔàHâ»’ä?{÷ïÊL,ò<-óϨ•Xe½’þ%˜`»ùƒ‘CçN+›5:•ÐýêóeÓêwè¿[T] ÷ou?¦¡·Œdþ‘Dó£Šõ8þ#>ûˆÞD c·[Äïôoß„Ÿòe"Ø7&üp\½ö`,¼lyž¥ôF+,þ1üGOlM„ÎÊ™ôßÈüóýÔŸ&>þ>¾–ˆF!/Á=Ñ—Hz2µ'ö?9ˆÓ 1,õ^J±•juy“ücÈÍlpÿa<9»± ¹cséîØ™L'™<®•úÅÕž~µt®1™­Ð€NªõoØglpžµä «ˆë^aíc¡s\LýÇϘ©÷Š7Ú%»›ÈZò…døÆÎac;J¶ Tk¼ ›€wYÜ–kõ‚9 _´§áÜ’™ÔÔøolÖXÇ5\¬ø ºxÜdÆS™ ý®ñrKlrGp­±ø¬èÌÿœ‘>áø#Ô–ç±§µð 1vW<Ò,™·5Öø,=Ã*0ÿc&5/@ëöⱆ‚ã4ó$ÿÈæ“Å-c•E\‘\Á6ÆñÞ¹Þm%­nÏ´kvÞÓ™7 ¾é*5vÿöt‡¬‡Æ©)Ú©ÍÖ9jZ#èßÞt|õF¢¤Qr½h(®:7þã‹(H5ËÝ@Ì6ΘuÉ?¦YÍñkØÏkf4£rc#ž}Im8ýÕâ8X5æGÅ%†ý±ÁðçÅ@,IW&»E“_Í×ÔËøS_zŽÚÆŽ`b.Ži䇭xÖc•*Ó,Wé@UÓoÙUF& RäJ?Þý÷ÙTÇ©gæ;SACßg_ý£²†ùµÓµXz.êí¸v…’™Üc6øÕN°§È¡s~ÊBüÇAЫ{Ô3dÐÏÑÉ@7×’úÁCtêÉùƒY´+dûD|,al´R5©?®Yõ£E2»'¦ÞÎyþé¨cÓ+/•^lc4¹FìÝo¨aÊ7¼¶žúó©0*9å%ð«¬úêZè~vJë¢ÛókÃÆü§bßýðFƒ°ϰR7ÀÊ¢›}OO’ÂFÿùß~e,õƒ¶]~ 6±6f.þg<Þä(QâèÌðôqÿ2Øë¿ì¿;O«“ý–ù>(GPþQ ¥Í[™Ë »‹àF,‡;üÇiø®AØex»üHÿăðçû‰|íùƒÅQô òmƒ‰ RÏ0˜<üÝpVÜÊ à7ëï´`n5xÝ´ð/ij䫰啨e%yRTヾ^?û9üz ~}8±bjE£pÍÆ…ã?+·è¿{ŸÛ–³3ˆ¯É9*»;.z(¸ÊÆkòÓÆs“\q︊•ÛÉ­úôéÁ;³¿jËü¨Òü,l÷

    ° *¾ÓÊÉéh†“ÏMF³Ü//EðŒ°IJµW¢›ñ^ÎDÏPZ4•LÕêJÿÄÆLco"tþ\¥çT;X–¡pÖ)MoüÍzØ¥ \Á–Æ­ùÇ%™îGdàO¬þc°¨b|6JÀ—÷ÀC6K„ÿèÏ÷÷ÌóØû#x÷øö2¯<Òøóâ–óŠTPÝé•pšó"‚~þf9GR¦ޤBãˆÕküo{2‡µ(«wbï[0]8‰i%Ø}q–3ÿ<‰ tú½êuüGOžRW®”.·ÓMk£È|ã8ôÚŒWjLþñˆ~Œ1à?æàÝ3“L2©ON0Êä!:ÖÛWäßù÷E™ª+¹U5ýì?ìùÑ4æRÝw,HùVɤùÞ/Óö¡ßÜü¨ÓÊb-»¸I%ÜkÔD=Á¯2]Ôw‰¤èwé•#Yž]CÅ…>¨±h?ðåY¢šPû†×Ïdñ<ü¤¶ÞÒy‡üÓ¹×é ™Iï ¶´š¡ þ¿¡±‰H$'Ò ›¿+[C ¦åŽÿqVë¯WÁsd4Ã4ÌÆâ܇™I^ªžÄtg°‰9‰K’Èá"4Þ.}•µôOLƒ?‹åøcðÏÉ¿vãåV‚ÜÍŃ<ѪÅÜǡZ#QÿQõÕAlîÞ÷Tƒ@×*wf±®DßÿÁ¨H•Ø ¢ûÏp#v-öò•LÔ‚«Eÿ:t_í­ÈAU¶9J½ý _ɨÈA >›n…­ÁÙ5V}NÞ•‹èùƒq˜ß¬7ýw+†Ú¡¥·D~†{¬û þñÚX‡Zè,3© øÞKÇN:­Û õKÖ©JÿÝíØú)üîD  µž)VÂPÓ‹Ú–¸Ø×ØJFÔ>&;ŒBwf轃™~JçÝ¡L|Jˆº© hØ-¼kkØŠV¨O?8¯ñ¥;úÝtüü‰\ÄõhÉ“ÛÂüïñµî\tXcPJå±ÞáG†3‹ë0¶¶«iûÍ o«ðq“É?‚û]‚øšÇ@²Ëª( ‹ÿ‹ùQB¬.tž™ÏJf5¼^?ŽôŸ>S&« ÝÚu½ñØï¬¹Gɦ]¢ƒÉNòtê¾úã¿ý슲RË*®“ç½ òú½žSDýùAMêQôZ-ç®ÿöÇá¼à~\‰.%‰QÓkd%±|Vm—èÈú 8É Ñ ‚ýKâslÉõ)0›ˆî«c~GM9\îÐÛðDÚ,At˜µØd!õõEáì$ìKÞš«^ lî&]ÆG4ìS%î²1<ˉ¦íj‚`Cš\ú_eŒ8Н©ƒ¿(NTß–X1-6ú4™sW*jσ诠~p&¨Qi¹M Ûw<ìî|´ŠXòZÜ×çØI~,j|æ]pIþ¡á5¶%m‚U™ÊOý¸6uÔ¦?¹2_•ƒj )ƒr 7¢ñ2U;°*Y;Íç½X§7ä9›ðv©iäŠYåÐÊàØ4xñÕúwñ…íQ|Ú²ÿì³øUV¢±Â_Ð$g8Þt4±]V®µí±„ã?|è·VAà?úcÅ¿“­Ùó?&sœmù>]´êÉÆÆ)Тã`l/¨†YÁ•^ÃÙíŒþj'º“àÙ_ÑjŠê<Ù5aÜw`{_€¯­C}»™5âR;Ü/HuÛÈŒÉƒŠ oß„…íw‘Qþ¦¿òÒÐÿj"–b9V| œø´£oðçÓè5þ¼¢{ Îb:¨Tqú·ûá¹ “t—eÃTú|Ö:ñùº¹€ñ ?ºdÌ3'’(›šPq û<“µŠ’Ü ¢/ÉqlålеŠ+ó9ÎÈjÆ‘5Ågiš…Ñ×Ö…+†ÿØeÍCµþü¨9†šÊä9à`+È6s Ðí5‹W8üùWØÔ\õF¼‹#7*®Îx¸—T & þÜÖoYÜG7˜Fæ pÊØÜWåø´ðºþÃ[½€¤OdðÐ'â³™Õ1ÛºmfæšNÅW–¶ò;vS?ø‚Ês{~T>ÿ‰<1Ñ`Zî÷Þ «ï©³ý¿è_’ýUW癉 ŽûŸêw£«kèh;_CfÀüA[)t“þ%§Á¯6ß'$þV¹Fýàuþ¤ˆîÏ Ó™êA}®0ÄôWõÂèC?½ÿ®‹¦r½Ïi”„µ½¢çÃÕ‘ZwæM4^©å&‘]­ÿû½"Ôfjs}ö}<¶£>ö3-èFIy[ïN>{Œ§ò³(ãö§H¤ÏùÙ"!^ß«¹éMˆ¹£Ã,¿úR :4`!¬Ã6üGÖ þ¼ˆÈî¼R!õeBu½é“áÙ>bû|°ûcà{”uá’O£ïšGÜ?ƒ½~ZXÝi¨Åøæ”Vœ¼9Hþ 2¢¬àWv•ÅS"ðwx¼§ýFìÿv=›ìÄ þ¼£Úä'»|¤\P ¬ÌâhWloa²‹>Üý>TV¬$w˜DÌü†3è¿[‰ÿƒÒËA]ÿ³pû'º¨èé𒪱™`ö¾<òÁhœÉb»rdOF„þª;~#v 9XWpüÇ~å¹ÖD<”)à_Ëà?.“Qæ,¥Ei€¯¼€ÿúóMðÕ·ˆý÷àáv’C-à꜠þ£`˜cn¥U¡ê­—¬CƲ7ÈŒ`g¹@D.SaáC÷qt.yеOgŸþÛå‰vÛâ?zy±¡§3)LS{€~ÐMÖC|’Œh"™©=ÿÜäF•ó,ôI½¬læ-±—¬’¿ðv½ŒÅrîÒtZùP;4õñÜk'¹è]‰~+¿#Ñ…u"§©½?Jw¨¸wªÊB‡‡Ï‡§Ú;3«ÞWÞß§G8+§dTü[{c©¤ë°9جűýFýy3j^1p'þm6ýw£á?:±ÒM°³† vŒXâ‰óÖëÿ1œãë`|¤⣆p‘è õ'®"xÊñð)ÍüðÉ‚_­7çYx'wüÆ*ã1ÿUàxˆ Îõn(Yôo2±¿·Le&—SñŸŒ>ðÛñ¬%œ¹NÖ¬QV sÔ÷³Ú93>ú«‹x^7ÎMz£ }W ‹5ÎóWE=IåQN¸O7¦eµ1ŒfyG0«úV8}_ú·¯»Át‘ ¦z¬âæø/¨›ޤ»);ýÇ õ†þHŒ)èÍÝtEhVZÇ,ë4üù P»ÇdƒÙ˜u˜~–,Åt8 Òr&¸Û7¢BJÁÔO½‘ÏôàŠç¡ÿ׿HÈüÁéÎ3ó^)L•Åö¦¯•yLÔ˜£E×Ó“ÏWg•Õô/ñÓÆh{™•1’øÕ5ôW©Å¹ &ú’`Òƒ¦¨iÕMôO|©ŸÄC5ÓÚFjŸåá‹ËË¢±}:¹Oï"þT£¿jÊõ:M-ÐIª5GhŘØÇ zg¼‡[Ðõö‘aÇçz{ìâa¬Óf¨š£²0§ÒWë©À[|!¾w‡yF–]…•ð<ÚýPì$©ÀâÑ?Ñ>«ÿüo·â&æeWƒÑÎmìu™@ƒžØºÝز´Ä`ÉáÏߣœ ž³ù—ýkõ@iêaÉϳ“ôx‰2øÊ+xWñ†ø{5¹Ó<üÇ4Øð½àWÕª¿ú¢l§b|8“ 9Tc£ijÉÞÌæÇ3Õ¶";ØGµ~rÍD미V>\+w|à,ÁÔ·ÿ­Ik­ùî ´Ä{á<â\ñˆÑ:£Bc³ž¦Sÿq“þ‰Yˆœ+_Èšƒ˜¸gÀls¥7k/ÐïNGµ ^c;Ë=4NßñN^(e·2ãéürbóŽ‘ ¥¨l¼ “Ì÷Â$B×J&ÑlEKð¿—ÚP®Ø1ì})ª0FrÞï£QLu#k©Œ}ÞÏLŒït¼kT¦âmbqê ×6¡š’S¤¿6<ÔzT¬oØÓG:BU4–ÉÆFs ß7’xÁMgGu¶áúžÿ‘ÞXEýùp¼BféóËüc©V˜ß¬Še>‡ÿÈÄJ¶þù.Ñá7i5¯Æ*î 1 7üÇ ¢þò?Í?Lô»"ªakmûâ%K¡¨mËã'sŒcFù/º»» þ|,ŒŠD¿+õàØ4øÔåSsè‰9ÊXe ÎÒ(üZSê?±<ÇÁ”~×a[ÓÉ£ñ÷D2䨪£ñ~ëÂñÛÐï€ÿÈ‚í±ûµŸÂÞÀÇf…hŽB'®ØþEXì[øø£àW³±G“ñáûÂf†éþY…¬­(ö!p¹r‘-pžTHǃí®‚kš þÃÖ9`,Ü g#á?¢¯0OáíaÐü¨x0_p•© Es±õg°™¨È› ò2–é¦ï˜H%‰ú3Rÿñ\¥3öo k†0õ/5»‡åòÈòÄØý±kàÏ'›cè¿[K½“næy]ÑsU¦cÈU2ÃBDö¸BcŒ3Ä$7Ãôo7ÀþÞpî¿Q_Ö`z¦±6¥õˆÌª%º/JõSVó!Õòé_2šXa$ºfqv'e%¯œ—¶9ýw{‘/ô2ËADEQ¾´1_ƒùiè­:ò¹£ªÖ¦ä°ø×Qt-a¥ ðÞäHè_Ì·SbäãºyÈôf»‹ºBÈ`üÊ3È $—íHwŒ›"ÀLLþråô":qÝCœÆáãXž:ƒE—}˜ŸÖHsú«ÓÄDO¸ŽUaìLqÀyÿ½/°çsgFã'r~¹]¨ôñMFÿÝßôâô²£UäéµRÛE }‘ZîŒrTËIÿ]óiÊ*Ì0uàÙ6Ò7{j½K˜~p¿Z<-\yaôW¥©?nÊÄêNô/‰¢-¨){€g¹/šè«hO‡þ* ìãt,ó0¬Ç!YÝÍ5¼­7Ƨœä.ˆ .©r®¤¯úÕ¶øùqò’ ^ñŒ-XÎYØÃsØèi<£ùÿ-ôWÅЈj`=cEh "¼Å=˜5ÿQ ŸÚ8HuÞ|üÇØS`ñi‰3‰`¥‚¿Ú ž·IËù‹«=J+¥oÎq^àH³À#”'îzCÜ“)ᯰ¢Ëð ë`ë—Ï ~°ŽúÇOÖ|®l£cLbŽs þч£ŠÃÓdϪ€r§–z;îÍš»8'U©0¼N¶ù0œCÍÀüÁd¬’šü£+Ì8ÎS]bƒÓœÉ+Lðë®ï'²í ÿ1Îk(+^8G°>ÿ±N¹¡Æƃ¯­N4ȵíÈùÏ ~õ;½"wƒÎÙø•9ˆ=ÿÞy♚篟Ss‡9æÖôßíÈû¦CZG|}¬€ÿØÿ®Ñ¿½>üy¦?eD—3Jƒ0/6ÞV ·ÔCX«¿Ý›þ»ùÉySƒrmÄê–wèT(a8ÖQé½ UÓmz¢dCß”ä~YWiãìox••D¨™Âðçï´¶Ü©§AÿÊÀé´‡1ºcô‚…GGÍZkª?.ÁŸ/u)‹6ø*GPöÃÓhÊ9ÝÍQh!º®²Å¸â¹ÛKòÐ`fÞrYÑHf3d½Ì)·°¶AÃîD%6+?va +wå/’„à?ê)ƒÈ?⢾ ~Õ–ZÐbä©?ÿÄÌ­ªôáÔ?Ñt ¤ÏÈ$s&yC!Tl­±÷WY±ùRlqÞ3~ŠÔŸrß_$ËmÆ—ÍÄ]úV5r¿šb¶Å[Ž£Nϯtšþí¶¶·9ž™ÉQì0¯Ñ QF[ÉBª‡®¡Öp!šZi4C¹¼ÛÌæ¨ ‹ÒÈŠ‰Úv4“IΡ»½``:îú'VeþGbÓî8z…ûj¨&>„èßî£îÒo¢ä™Ì}ß%_øóãðyɆ¢Â¾§gÈjÇIòÂÖc ªãüÖ@În,ߘȞhØÏôIV 8ý¿þETê?–:ï}»‰Ãù]äÞü øUTm½–’üãZþjýKaDŽh#ÍœPà?®Òoâ h~{W9‰ñvèÞ" ùGòº‘ÚgZíÏߑğ¡÷£/޶Mô!¿yÉ|‡øÐŠ’Ÿ}æ$ÔûÑz‚½T¦ú <AâäîðØœç‚ m9OÔÒ—ül‘¯ûjÃõBèƒ òkO,½]UZÛ9ß1“èâ*5Ls 9,þÛþ‰‹ÉU\PÔf ÒïDN“Ûi÷C¯D,u æ ›2›ŸCnÑÂÖM‡ØXЗ µRÄÍ-‰µ.g¤f_¥±ê·Ø¥ƒa¬ÀŽÚ“à£ã•Òr.ýô?Í?>(ÔÛ"¬ÌP2Œä?qˆÐ=ƒ¸Ù‘þ=0•żæÉŽ'‚›å†ÿ0ôðê?Òª Úâ:Y–/WÁ›”­ÏSJð+)FëGá ÚÓd YÎòŽÔèRñünÇì¤I1qT&…;hþ÷gÎƒØ¼èÒò£œAÝ1®#}âý–Ý­Å×5–¨w «ßí¤5ÕÈþJ±Ýõa:”Àöß‚apGkëi¦ z< (Ö|Å5:(&eþùKæ?ý P…õvòÑ“ž&ʹF¿›€sg÷wº^FjŸáC•dWªú¢€_õ ®î…yœkYÎ)¼Ò<üB?:tmÀÃ…óI%ž977Pé«N òäLm•*BäWÊünö†ƒ/Èšý©õ»Ïd¾ ŽVŽ})¹Mqú—4Æ¿½æìÔÃÇ=‡œë½Q¢èwáÏ/‚Œ¦7È–âž”Dögaf›£™w² ›?üê1üÇzfJeA¿ë‡bÀµC1ºÛíECÌÿ¨ Î£ò(yø(¹Â¨ .È5f}G!zîÚº°˜T¥ÄqxÀ¥¤“Ö\¼[w+•éá;ÙÞ1î¿É¢Ô«6¬½VnG;êÇ æbš ®+çãwþKÍ5Ô'»¹ãî3Ïk"ùÛ¹ùvÿ«iL;ÙO¿ª\ôã¸bõ`ocèÔõœ ª+ÝÄ#Õmjl¤1o¶­ÒU ¯5š3ݛՊˆFø×ø—Ô2d¢x”XMáÏ›[MAˆó]s.~ ê±ÝœÅÌ žÆw^ù¨Ý"C>‰ÏOi^#E*to½ñ‘…˜8_¾Šù+ÐKÝ5÷ÀWì„ÿ¨An˜™úý(Ùú¡ß­ V;·º:þã7ð×áԼƦÿU ýÛ·¼éó• ë°åJÿª¦àckPJl'—ËÉô’¤&ž¢™r‚(·Óé?üàãýÅ⦠­ª¼F7ß̾‹z+-¾­ŽõÜò£"$¦#‘¥ÁÇ7ÁtÛŠOä” 6¬;Oc¬3fçÿÓ¯Ä!ÿ˜í<3Ñ©ÿ0ßEî-^0?*5µ‚ùõzú› üÃS) °Ñ+üÇoêÎH-wFñÕJà?Lzn'’ô¸z&0°-úb‘Y¼× èí´_÷òù†4|c¿(Ç5jNíg7᪾Twˆ¶ä¦÷QF>f~Ô€yTµ1•kÑJ-ÇöÕÃcA!Þþ¼+xùQ,J4*ã>‰ùâw="œÏim¡î2‘˜¨m%ñ¬0Îb¯'b©o±Þ%>JbùÞÁž~¹ÃÕÊ"±¯[“'95ž¨ ˜Zlç~ü\5j6ÎböcGí ½‚äau§!Ï™ýõ2­ö½|ÊEüHAVÊÇÇ;vIÇðŠ5AùÇF™•hæDŸÑë]û°ëØßkêiõ‘ÈmìÇ[Ž¢wFn*;b—’œ‡aDüý¦f ön'?ŸÏk9ÁßháùLä'1v¡¶yùTS<‰?¹Ð=æ×¶ÕÀÎög—Ýx*‡òŽ™¨êL„/ oþÇå–Oœ'wL̪‘ÆæƒOmì¢:²$Ú)O¼Á[®Œ]ó²ZNå£ή }Ľ´¨ðZÀxÁ>7¿‚wáܯCqkßÌZjæÆ:§¡ÿ®‡‘Ñb!¬s1Þ‹û¿1ÌzË©ŒI¶VmêI4N£è_²$Ìß°#z/*@зFß”…ªÄa(Žó_à’»éÈ]©?!=Ðìþ^Ç9WɺrÞ_Ãl£F‚)E\~ÕúŒ õSóÊ Ê: 'žÿ±ˆsÓ -ÀôW¡»ÅiäÑñ³w@!+ƒ_yPM²€YO+ðb»­átJÈ$¾3&xÓ~{fퟠMK8æAÄ ©…î<â–ʵ5«u1žÁ¡× C fw²¢YùÈ?ºSSwÛÌ`)äm±Ð+­¨LˆËuZi<嘫’Ã)ò°ó‚V,ý *Écä“1ÍDv1ÉŠÚ3§¼(âTê÷2¥i"*,•ŽëÇ©¼ÈjõÅAíp÷ŸÆô¶â!ô»…™~G¤'×(ûpáÆ1³ó·Z5Ùaa˜ݱ“œë0HØIs.\H"øó4fVãj©¥ôωJþ±Ïé?v¨Kô£ô/q#Æh*/ 3G¶ÛLKœ¡ã× ÑéËÓq ¾¿ŒõѰ¹š6ÖÔmñȨb£ì ÿ¡éþOêÏ2?ÊÝyå¾+v•žóÄGê CÝ©¢ßn.½¨þ!H¿»^ùþ%tàõ£ÿîéH­v›þ%̤'¼†)­¿ R–ê æŸëtŽÉ¨××úDjŸUµ«¢2ó)rbµj‚‰4¡smµhMçÕè­˜Dí­ÆÖ›â=–•WÅÈIý¹í“J`]÷ðŒ¿±À°&‰ôúšóam¤žø8 ÏåbüH\îójX›ÁÜkó°Úû`‘Ó²æg1JüºBþˆÒŽþ‰±ø›ÛT"zq‡ÏÁnŽá.;H-[fã8öv Êݾ`©å%-lÝ[Ø /ÓŠâ#Ú€Òø²BQ¬o1¼ßQw)(c¿ã[ÖcGçƒèL„ÏØ*6Ó?ñg]‚-õ¼z þü G;ˆØ=/œ‚=Y„þZF ÙÃ@øï¼ÏrØ‘m`½A¸ ªó¾„;¿6›Ÿ®sWÈ×¼y‚¼±†Å‚z󟆛 D£;__ Þ‘ø±;gsç3õçÉ8–áä‡ñ.b§ŒCôZ…làþÕ+œ‡Ø¼5Üö+|gm"ÿUàGï8ö½dŠcÈzà?è_þÖ?±ú«Üø¿TØ e`5×9¦ed0ÛáP,ØîŠ 'qˆq 3¥9›ÀAÕ•½6áÿ1dJq&̽¸ü*=ï––È}-5"îìa&½¥®¢îZÀÔŠàWe¬ôT$æÃšLÕBzºƒlÄ2ƒOá¥+j•C­øM«Î;Æ•¤>à‰¼dtmYÆLCþ¨Pã;Nš_™õøUêèܱËuðÈ×AÏi¡«|¤pcG63Ôo¸OzÓÿj=ýK–‘ay’/”¤—ùIêüî“é_’Î˵îF}ãtVl†Æ*ˆéÜ_ÅUý“+Ñþ|J€&¢ƒŒ‹©*®,¨‰'YCá?ò[1}Ñ_í'—ûDü6®Ó2ã^®žäqˆþ%ä–ÈŽì\YšÅt:V•íóÆ«-ÆF—µÀø´!OøDoG[¿›ÛªfÞâ>˜‹÷/ÇÓ½Æâ˜sÕô«rA8šl+ú«fG vÕôê:ì»þÔÆºÃJ+Q-O Ëüm3§™½Écâ¹µh3߈Nÿ±\å¾°ëšÛQÉô›ÜˆÿØÎ¬”|(K³³÷f#Çtæ×ž·b1ar$SOš‚d½<ûÈr “‰$ ¡` ûÿ÷¾7¨Êëí<3ß”¤ÿ1~õQYˆ¢©¯öMsè§è·«(>ô¿Ú­-ƒx1×0rìÎ=ÅCK!üᶯџª’~ˆù¥U?}¨0…7ˆxÝ_vŽ }Î2i7QqìÙ)ê®ˆŠ¢šN² ئ·0è›Î¡ÿ&üï4´þõ–Xæ¡pñ¥É ‹°¯õÁX±Spjû°éq“Vw ‰P¯úпÄk)°ënd/öŒŽZ|öâ•EèSOã¤ûФè/wè«,óDþæøÕ6âqpªADågé¬]\?£1oäÎëñàÏ ýbÅZCâæ&6æGŒŸ•'¦,lH,‚øD¶cê¬õüÆmüQBTl«à?êüdÍ›tؼ)0ïi:¶×\.>Þv²JDæÊ‚[Û¥–ã9–ñ\ àý¤|©Ón†:c}“„)’]½õkÉoODP‡‡`Fe9qNLÇqؽIø•aäá&£ò”N Ç,?¯‡7JUËš%X°?û̈ÿè‰ äL2%ët+)Ùïl³x™r· †î¥(´?DM®BNzðM€à˜vƒtî¡Ï‚Uq9Éf¾GÉGþQ Ÿô¶´4þn‘ö?-ùëh=´/dÉc¨ ®3þü’\ÿxÆj9HÑ|öŽVÜ þ%IAÄ€_½Ãž6¥6q Þ3ƒº÷Íkm±Êޤ,RWÎûÆjªÆ’ô&_¸ƒ5ÍÀüÚoF{êÏ/Á"Æs.#“êU_Iý`°Õ°w˜Sà $3et1;hì²+»ÍÌ9»Püêº5Än%•äÑÌÉø¬>Xû)|že´1J…¨~k¬TS§Ëdè³ná‰Á—«M¤I øw7ôa̺ԧtÇÎû† až›ñ V¥>'Ž ž½s‘ÞÊ:ŒÐ îùfvº‹=@ÇÛž¿oÉ–ñôƒßOõà8ògôo?€ò©ë>%ƒ[@†T†s½HTçœwuu±naçKqÏî6 Š@yÏlŠìƒ5—ÊðËìÏb~`{º˜œBçÇÜö†Tæ4íÊà;ÄÓˆWSIÕyPë¯Ä â(z#ÀÎ2+¡¶: ~ƒkÑœ|£½c«ã|Jë”q’NÁ­­èÎlåa ´,#˜,Þè'"Òmﯻéÿßÿ3“}¬pž™çôOüOõ»ººžŽèëµàWà˜©=SòkOð §´#àbÁxdDvV9­U/Äw4¼EäfŠt O×[ý,“ìcˆ‚z÷0zö_­™OS@°Wò 6ÓI—f¨ß {Þ×%Qœþèmô¾ÎóðO«ÅáØRë=‰Á6bá~Éh£Ðþ»ãˆÐ}¸š÷EI"üy¢š>ùŸúŸŸùjkt»“ÎoÆr…Xœëh‘f‚])Xú@y •®Î/Ñ ÿªÛˆ¢VöÐO8÷ög°˜=D÷ëˆQ&b•ÏÉ&DTÇeiâÑb¶1…\ªýÊ#­Ð†È“dÕ ñŒ{‚üGÔeѬàW¿áEãçvâYTcyÎ^rÂjùŸœÇçÔŸ›Äàa’ãu2£TëÞ/›gÀ’·‰ÞÁ¦ Ãr¯Ç«ô¹“L‡}«…7?*.ó£¾Ã„ÚuÅÕ¹#Ég*áC®bcß2?j«Ù•œ«.»Ó’”Òà\lw>¹Á—g Gqƒ®^ƒj IgQÂÐ)•ü£qp V,+»×/ã?[!ìI,; ,¢Wç,ý†9æ…ZoÑo–ÌgC­}K ç<æbŠ00ÉÒܹ ›ñ6. ‰UÈØÂVTŠxjŒ wˆŽþª9ïO¼ßmâ¾F²Q8þã€r™ús»KRm:×~'ëÁÞɬDÓÕ±=/Á*;àOë×ä<»¹>KÈi¡ءߥ¿[è-þ©µÕð»%A¼Â>eÇùn mbXÚ¶øæÐ R6ì}nò”¼äí’Loßf½3ÚPÉápmËð cŒñ(ó6¡ß½eì5æƒ_ ž֡ÇÒz*êæ ®OÔM«ArÒë9þœa'Mê]`w.à/«Â¦Œ…ixil Úm»khMÁ¶¾´^YSÌFJ§Øav´Ë`DŒGË]íÏP;|§!ó»ÂýjsN‡äqüÄJøsÛŸ »Të }ªF±ß%ÌrýNmGmÎì9¼%õyœá”!æuôä ëNôÄs²™(œjÉFxA¨®J’,§Ö/1½G’8ZÑgdùÍjí–€ý­Ã»/戚ÇÅJçy¥$Õ%çãÑYR3šì'úœM€ßvAk5ŸJ’ó Xôm¿ºD—G,·Uf)¹Þ>r™ºò¨È'‚YâRêJð«xä³ýå2#¿0Œ"VUG]r¶ÖVt<›ʵM`v¯©!÷6/3$¿ˆ*-hÅêÏÇ2G ˜?÷§É31 Ì¡%Hl,éoÖs,¦÷IAô»•é¬RÜjîØã¸iôغhlB ]Ýò`ó;±«Ê5‹²RCÁ¹ÝyzþW_èô/ V6kt/‰꾈øâo•TtÔèéÐ_•e•mAõƒnÚVmùýш/Åožcþ`vð«û||%˜]I­EÿÝØ…ýzR½W$ë?ââ?JÈà K¨@+%z‘øˆöòüGjªLêDP¿—Úþc86¾æ&8Ò —‡õ|ÄÀ~Ä8gð_ÄBQ1Býw7Sÿ‘?ö fš#î¶t÷Ú4p!ìu&*6¢Èþ¢Ê/¯Í:æÎöö³0Aû§ã?FÕo¡Ê; v,•q‰­Áw_ÖÂÖ½…½H]´$Xúf`¬>(£R±«â|<«°Ê/À™èÞQ©¿~ÔÑyáoín'.xÍŠ(HãኊÁºþ£=õƒöŒòqFX)wäúÛ¿­Ô[`¡š‘KòÁ\ƒi豺 ëÑŒ»Ü7ùÑ^¹á?ã?|Ù¥=².>nýKl¼6ä¿Êx£|ð á?Æ€KÝb½Ýðç«P„~5–1ÃÂöt§µˆÅób)“â4j1E•ÅÎ0ë¹i×è¿;‚îÉn`>3ˆž ¿ú„G[jLu™B‡×–ð´Ô{NÞö Þª*¹ñÜ—™´Ð¬Ô-­>ñî1êýŠ“Uüi\“—™ÿ1ÛeãA/Zò æbÂDgpz{~íIò’¯¼ËSáF×®àèççò„ÖG·yé7ØÑùX9 þ£vº'Xé\þ;7ÉŒž+¾ ~]óâ­ …L¢sÛå/3…ª?»Ò˜˜œúÁ3 ük˜¥> ;‹¼£øÅ1Ó ãj`¡cñscS]@rî`+ P‡¼¶Ž•–ãõ‚“ÝBUÒ0H;ÞñšêFu§(µ’s¯ƒOŒîgÊEÄš¬ûwüÇI2£!ä:ë9Ã5ù !^iÃYΞ_kòôèÆNôj>œûrxó ð± ð ½¶îKdÛÜ¥>c™B*ÔòOé¤püÇnú_£.¨JEФ³¼{72¡,XÍ?ŒÏøÈâhgýñ^øý®‚ uãwšÉýú½¿õOì^ Ö('Õ+P$Ýç87¢`XzJ‡§®n-Ä>œÝIÿQˆú¯\°ÞUñwS „>¬þjüí?ò“L£‚†zùÇa²‘æ!,ÿ!úÒ¾ËHŒ¿6>/J¯½09±eš0ÏËK­þï(9j5NÿqþüªèMþÑ™üã¸8jw¬d~T^pÉLp)]­޵ŽCV,G|멱 …pJºßÌ0cGÀ Ⱦkr=Õ}gðßû">¬ÂB癉†ÿOówT‡¥„-O­—Ó5­!kn ÿî*ÒÏjGÁÅ"×åõµà>^0A*©\¨;ôdju«¾Tä¤3wZôW?›rþ¹+®Ip /8ôž ÑfLS?ªÞ¢ \@ (ƒJ¸>ÝyÂ_ã¯WíþWéôväëÈEkÑó§šáF ]´ÁÞ_×x#j“Wn!£‰HG3m^ ‹™‘¼cüY"PÍrä!s°“YýšŒ‚ø¤¸r¨hüË.gþÇ<°Ù²ÄÈ…ŒÃX°¥ N£Ét½e °ÜsX´-øWâçbòFXTão>HK‹¥,J$V¸4ßI*iíjÚ‡Äýžd6›eLзjÔÒ\Öÿê½ü·…x!*LÛ&´“ÛÈ>úãw‹I‹«A ¯¬@ü[ýn#âü# a®ð5Þ<íðŒ !ôàØ4xÝèt!{).q Ÿ2vf6Uñ¬„f4ŽÇîƒ6Qt$*öuúoÕW? >Ÿg¹œ"ÀÌè8Hý`>º©¤aÕlôS\çØ‹~·ýwà¥R Dp3cG‰‰nãuz‚þöÒ¿=:úÝ©Î;AgÎlbçwÎ ¡/¢¨[ÕDš7úÝRú}°&E9 ”¥þü4ýÛÃÊ׃Fd¹Ê:@|'s}C¥ÎD&FUP»«º/0ᢷÖ~Ö%#üÕ›i ‰êwp'ºa³¢‹ÞÔŸgÓ‰!R§§ñ}÷öO4Õ~t^šÍÜÎXZ²¦ÆºÒ¿äªyÉZÍÞæÐ#$Šikš]QKmŸƒæ aýê*íÔY(†äLð«ß@{Ðw ó³›]èi>4¬*Vz0úݱÔ¼1Ëšvß+/ôÐð;t0“·Êuå›ö™¼þ™t3™, 0e±üNu査S~ÿ1Ÿù‘~#ó¨ ©BÆ€g]N‡®¼dS«Ð_-w^‘Ô¾ ›EpÁUø“Tü¹82“u  ‚äóØ%úÛöðñç°ò;áD\PÅÆÆS²¾é¢•xÊ|ôQ‰@ÄLPÁ?ˆ26‰Çf)¼ÅUrª3 _ÍÁ«9V:­Ëxaoc#5йéŸ8ÁLLT“Ü»è úÝõ?ü?§P燨ÿøò¿¨?7ÔÍø/-Ÿ^ÿa£K^J!æxkû´=x¥ÈåÊ :@¼DoûäÆUO­U»0'x¯È ‚•Cÿ3’üGGpüâhãJb;ÈÏz_üGíU;±©1¨‰iAý•Æ>Jà+æà-‚¿<’å‰ðÚÑE¯'öþqiP­býK<"p%whóÉ?¦ñ$ïæ{À࢑ÂvNçYœÃÝqL?;ë}íD>ç=ü³…÷(îb#z•šðçÙ“ ´öü©XÕC²6ùÇ1^ÝD7_:/ÀìøeýÇ&­Qj è¤rr„e9̇ ³çÄ®â,x±ïXDi©©?¿ª7ú)®ªÞêW‘œ»~2gÎ >;6º%XU^k#G¹¾Æ¯LÆn¯g¿vmwviˆoÚóp7¾ZZN¼› <¥:Ç7|¦çê"þãYË,=t½=~®ëŒ'ïÈ„ÿˆÏóžþj5ʵPsj2gç#ñITc;_á1JÀÒ%ÿ8‹BµD.Ƴ.bí7úuâ®Ð[LýykîŠÆ~>Zq%zY”!Ç$"ŸI¯uwò{°9°¥…a\Š65C9µÔ(+3ÿm~­7õç‰ÙSa¼Ì%rŽþÜi«À¯ÎÙÌ'o˜IWÂÉ–$£Éó»6¾”•²ÝÁ_ìyŽ©ÃÌÿÐôð‡°ªµX¯¶õ}´f™½°ÀÝ‚l߫ޣ7 ãšf_¼Rcjäw£>nƒê1Ø­W¨#N-ŽI“ûᣴ+:¦€_ÂWAoe¢hêBÿö@ó‘Õ#žÌTÖ¯xÁ.äÏÉi†Àª42 „À¯ìþ»ãÈfúO𽌼౭L/IÝÁ«Æ¢´­žÓžüÕã~dV7—â‰|Œ˜àXíøË¸ÒÓyA®(1õAºxÛ$‡¿þ,ŸƒÐöÂÔƒ?÷A½;~A§C׈ˆwÂæ5s…Öråýõ¾Xý«r7Lw{tu›Eûñç5O=/ìjJc/öh1ë&™Ò|X€wXë÷ü¿ØÉ[}#Jÿr‡”询 CzÅJÇÙßZ0RWØôòœê%bà­d[® ñÙ™õ«úAw­$V¦.~è"ŸsáwÊðÜ|‘é°ËÑ`í¶à;¶b󣣪ÊNŸ‡ëzÙŸâWŠê©žÈ¦3í!ÿpÙ\G lrWüG ãVv¸ÀJž´Eø&/êÑÂůâÒ9 Uö99oMYÍö¿cåO²—‡2Ÿ¤Ÿ¿v…Iî‰ÿ³ç¦FÍ¥áÂ5gÔŸûrÎÆÇFAéÇ1FÕë¦7P—Ù½HÜÑ ½—_ÉÅ–“®äŠ·Â\[ ý¤¸jõE öŸŸèÞdåhØ4Ú+ÀÀ’- £ókQì{&zé*ä ÇAÛÆóudáf½ùø˜x´ÄØû±ºÓÉtgÓ¿ä>1òü‡m•§ã?^)Áˆ çÌCuz ÈVc/¢Õ µâ}­ ÖoLN#Xv7òÒ—Æ"ò¢Ù ^u°YO¬§L`þýÒG™7È ŠQ'r7ÅðÇó¼Ò&„ZO›@õ®MMÅÿn•Ðï.5ÛÁ—Ç7_U»ÚHµž€é÷§ÊÑŸ:,o¿=–=Äüs¿êN°Õ@C©ÿÈ-ŠËŠô¿êGžaw“Ÿƒÿxhf³¾Ñu½+ø“7³q›™[ˆ<8æÝ䃌„28^  ·Ùž¯Sà™Ìo¢ƒ(HoɱÖ#ªR<áSÚ’yL¢vã 3O±ú)ô»-͇TÆl"wÌKtx_¸Poüã VGQ¹šžøg–\ç;&ãXE™Ê±…|&=·[vÿÃÚàM{Qj¯ÂŸ¤2ŸswÎY¢¢Ù¢úÝSNÿ±þü€ÿhÍS°W2›8ÖÐë>÷ÉG2tØKÿ’§ W·eVAKPÿ±ÜLKÄ|øU,:À\û±ÁñsBüÇ|ç™1èÃù]ä¶ñYñ¢ÿî­¸^‹þ%výÇzúïž§ú|·v\MIþüõõÐîJl]&9BO¦—¢ïíòßÄ3:üvÔšEjŸ ´ôØÔâ(–k"ù‡+ùGBí(WM% ®ßQ¡ã0ß»¦>»¹<¡6,Ecžô(ë6—ùåkÝÒ?…s+&SséɈè2‘»T›kT“ÝÁ·]–¥„›~ýLw4gݹ£ñé÷¾ÿ±V¹Gþa« á?ìú½ø‹qð ±ê±ë Ý¥±ý Qäܤj{ ™âb…5üÞ[ô†au-µ†¢ Ö  ‡;às/rœÇñ&°\Ѱ÷]˜­‘;šŒZlÃ…ã.ja·ПV CD»ú"í ØêQ6€ ­1Æ’—ºÓ…ãþdVÊÖ_ýAŸ¥«0*ñR©È;¾ÁÕt"Ù„×φéú õ#+¹€Ö "^q°qM¾£q©¹ïV î÷2Ý¡2¿ö³QÏÀŠ Èh¶â¹z“]ã zÆ´1¸Šï¤]8Kž€ÿXfv2Wƒ§m*MÆp›Hç+ú—ø•6¬ô Ô˜w/cd_œ×¸ùÇ(ú¤ý‰¾o$ç¤8¨suó“ÙÿQÂì CÑ Q„ú¿¾Öà8Ë­Øèm7°¢;5/ÛPtM4bJoçzp[ÏXï(Iz³08pLŽ¥üG ‹ŠøóÍt¬Hýà+£ ø’¬{‘«â bYýÞøÉλ:¿:å_âÑáh¨‹­òˆ™ÏQšþ‰méL‹îíïè~_þ»gÁð¼¨/l~CU›.#—Á&‹¼ôoæÏ÷Ð÷®CdÛ”âœY¶Ü×tA ƒþ‰eðNžŽ#L©nù[¬¬¬=ƒ³›š¸Ð¥Z&¨\pñ¿÷Åge ú÷Ó©Ó0ßýx5bŸê*ê÷á? èïÕš¬²W)¡]†Qß­íPãªû#¶Ìÿü–¯rV«+Þã?ìîT#P\`Í‹ún‘]|×sê-ÂôOøÕâù´äDõ»D=,àPÔ9™%žHócx+°àBvpÿöFj>}Tn3€>…×d=Þ‚ wåÞ¸ ®‘«ÍFs}ů¶ÅÏïà?ŠðD*ØÁÿGÜY€g‘lݺ»«Z>îî>xpwÜ îîîƒ÷ Á݃»C!¸»ûÀ};çç á&9ÿ=çÎ<3H¥ºº{ËZkïmw9LO|W {7-Ë"ª6nGÕV‰þ‰k”ðçÑÉX^cYwb•í¹€C`öëv•ê •Õ\í¢üôúöë?|𛱃¥ñŒG°¡“ñ:%ÐÌÆ!cŽe|dÇk9‰TÆmÀO‚_Uþmýù+ejÂHÛµâݰ½ˆž:’ØüùMÞœD·ïàRsŽ;éí·ÿQ„º~!B¸ÕM ž{•h÷Oö1ž¼¨>äv°ÿˆ'G‰ë0´]à¾[q 6~••D"þÞÞpüÇÅÅå%2„‰Ø¡¼•-á2í~éý¨TøötœÜ%Ð¥óXIϼš\q+þ£“~—þ»aõ»­´¶Ô4Bq‚Zƒ j}¹·Y±ü׌˜¼û½@N¢ãf13˜S°Ÿ±°ó'°•Sé9Rƒú°ú]oí>þc ùÑ&fͧ¦åœN•(ËüÇFªÉ‰šãàOÒR-î [Q”êô‹`Iv7ªžz±0õ¶Oµ>`¦G‰Z bqÛ›‚_Í7WàÝj3WÜFÛS9¶€7U6ÛÂÃ×!Ÿ9‚Õ’3=ÏSðQse'ÀXx–/¨Âjßo3æ°«¡0ï©©ûè€ |Àü(s¿±’žPþÜ ¿ñ&§úæä!=–Ò¿} ápãO3ú'–Ò›1‰o0ó?ÊÓMÞËê„7jFý‡m™Çá «:þ£è jnãš{Ï~êß~^QÅð«,t3^ÿqÅ(~Uþ|×»ÿ1Š*ÂWô\YÁL©ºÌ¹Î]ñ掻ôƒ²ÌOýÛK¨éü\”gmˆ¾‹éº{õƒfG ªØ‡X:Ösr‘Æôp¿J¤°epQó=>S£âËÝ©þ.Ï;óÃêô»3‰š:'ûÉ3ðçG,?fò¦¶¥=µêRþ̺ 6vɘ€Æ«¼Õ Ï”Š,9Ïû`½7 ó´2¤ãWÈ[òŸþ,±:›ü–˜à¸ÿ¾ÿØ©æÐViyDMñ$¸‡÷AåOòµÚVíyMÔüÇ)ìjmòIÿöôØöïXºÊê±ýÕG‘Wt‹âüóZZ6bÓƒ<‰± èŸøÝ‚ÉhNÿAK¡ëDWç9ü8ð>&PÛ«µÅR¬æÎ`þã.¼ÂD’àWÈO§£‰h D£÷§˜Þa¾ç¯yŠ?ñ±ñëÁ­RÁQãã`ý8³=1¹–V§Z£K$æ×îTÈù2)¾ò=Ñî*,ðJ8è1ØþÔŸgçÎŽýÖ±Í[À›6iÍÿبÕÃJÖ"O`B6b*¾­$YQ40žDÆ V]O&±COWÊÉYÞ ~ËŸW©±Q8íÄŒ„±(H§É>ØßÍLP¹J1 ›ò€Sõd¿›@¤&cÃ3 ‹âV˜3³¿L¦æ™@’Ò¢2«þ?øU+vw)H?'‰+pÑm©hJÿüG^zeJÞßðøåÊgúà?FƒÕ¸¨~äî°EˆU2Ì,`YøT¥ÿàå–¡uØÊ^ëпýó5Co±ŽÖAVÆ”†38ˆo¸HVµ‰ìÁUm XÕ¡Äâɰþi@)<Èuâ;±ãcù •À¯Ö…Yo‹öœ t\Û2<ØòÇú"¸Š‡Ø¸¡æJ¢è×(Z?bï’˜·˜ƒ‘ƒßù™ßíÆÇeœdJ-4wöAëˆ5=§»P›rÆù–þŒ>ŒLÀ¯hFíÂ!М ŽIæ ô»½ÀÙþ$÷Ï©ÚHî¤MµCÒGžÏèwk²»]†/ÝPzã'â »ê ÿqÉTÓÌÕ¨¼Žá9=ù}8ÏÙd6SX;·¼ê<À>ÔÎ@Ñ7Âx ÿÑŸ…Iô:téÞ¥Õ<…;t™ruŒÄÌ£Cá+f©ìá¾-Bѵÿ1ØpèóëÝcþÇô\çx®Ò˜PÿÁô3#?óe»RÿÑ&eÌÅpìý+”>p ‚û·DÍàϽY ÿQå§úÁ\ô/1y2kòþO1ÉOún*6² ÓH¯õoæyÎn-µ„·Á¯¼ÍñTOæcþ9%Ëäµ¶&¬üK~’«þã¼î}9†?éÀ›¿K1s9¶ÀD3Pƒé!m­VŽÝŽèÍr¢¿úÀYV²š+ÆÁ#&çí ²ÏPåçÿ÷>‰¯nùi~­BÛ8¡ž‹ÈïÄýUNØòb课ãW¾Jí(üÇVòôê¹È/Åß<£<…ÿø"ð«hzjÚ+ªÅÕ b¹ßW ¢¨¿ª¬%Bé³$uHÂcÑÿS»$›ÓS/PÖ¢f¼©©+O§6EùãýXƒ¯‡Ç¨†ÿhIŸØ® NÇA Â1?‘ké¿;3×|M›JýÇp«Ýúr"ï$Æ  ™d¥Wñ"w‰Ã«ó¬~Ç‹ö•¡{¨†·ø>e-ž+>ç –ÍàNö\Œd«ô²ÁüyVt^±AÞûJ­,™Bc®ï hyRxWÖTu»Ùß#ûØ®ï :à¾é*ªÄ*Á÷>¼½)ê)øóxø»oÔ6"úøò¡ `åðYéÕÝÜxÂN§Á¬‡µŸ‰ýÍ©¿‰ÃÍ?Ò1?*%èa28˜šx0»b]TRþXžkL`ê/Žc´Éa¾'Þcþã6x]ÝÝ*EUå5VëOÄkàzáióñ'Y»HÏx,ôMrÅ­x½%\ù$ÞùÛèwÃúá ZK¸¶&xëcðâÕŒGø££°ßk©ÔÀµ{ÂÒDã“kHIt¢]ŸàèÞÃ(¡g”Â<‹µ·Dý¨ö[E°ö¼O…™XIÝÆF˜ïsôõˆC½F6ü‡;xF1ãž¡-¶y×^Z Óû_t  $*¯‹ßêCNñ˜\s_j0·:oòNò¼WGxæ3šI`A£ƒüÙóªÓ‡°6z=n=ëßàÛ䊈4“ñ´…?׌\2jÖy<ÿ«OâªKUOçÉØýÛS8¿ŠÚšºÿ±ýUê©ìnm•òÔnå¿ø¨ÍÿR.‚ ¿“Í~,´QQ–¾J{ñ‰É?²ˆ¶ZÇ(í³¬æB¾¹—úóÆüûH %žˆ®–n°©od 8H­˜\í¤æ=a»Vð>×ÂÒýIí\+ô»CˆËÎâTXßr"üGdu7´‰Áü¹ ÎàË¿1x?KçÏÃBÌFÝ}¼(¶nûѱòÏw¸I™/'ËÄÄáwõDämñsÙØç¬uX‹“ä9kõ/’)hìò ^ùÿ~—§j…°ïn0 ç±9°ìEÉìÚA4ì!û݆gZݘEÞuV°±ú»]Fc~í Û;‰7o7ÜFBö×™*[•Їâ?îáGñïJ¼óxp©ä±Ãÿ‘…)ÿ ¸klcw;ÉòPËWþ<8J.9ZìÅt†¥i®5_Ÿæ#~Á+ÿ±ƒ­ÕÀ`Rƒ!5&š;‹÷èÁOeÃÊõ¦÷…jäÆ\BítÄx6hw^‚¿ŸLq…úóJaαepýy ò…ƒÁñMNn;u’»‰h˜;é¹´„˜ù6Õ1ˆÅ]‰LóWNÄšÓcÊ3aÖ[EÿÄØÄ%á;.ÀÌB·1[oW¤Ì kÓTX…¾ôÉxLEû âïäàM¶:¶ÚàU\KÅ0z“ëZ"”KàMv×óÖÆüÇdlñ|P¯ªè¥®Â$ruÉ ãpNº8Ì=Ûc(§;W7ð…ÿzùÐ{ümT¤£Ì2º/@këk¤3—‚<•³®“‡\5£ƒÙ«®"ÿb7o3Và'üª ýw‡èðV(½¦€œÕGåRÖ|ÈüÁOLì ÃÝ“N¼9é2˜Ž(§ñ›ïÍʬX\/Ý€µ£ýTŽ]ÅÄ@·±Jo>¡ë4TÔsÑä#ÿ˜eºañ»’Á¯0Ïä(sïqóÑ_åB¿»üãœóŽdQÇп$'ªñ‘hòò Ʋ²R˸ •rBº¡Ö[ò·Æ`€ÍådM,…ùƒñà»aú ßí.ï¢"ýñæ-QOÒׯoEKþý"›ñ©ÜIýÇTTgg¨ÿÈàX#ÿÉŒoìº5þ£ƒ™–·9þ£ žOt|;ûcÁÿâÇäê *@~üBìü¿›|bþGæGå] `F¸¢Sê0{p9„Yõü_©7©‹È'ƒèuoñ”J…òäyóQ_]G¿Û,ŠüGuòÿ\úNâÏbØ­«ÔŸQóige{4½g¥Îÿ ŠÐE·ÍXè‹Rˆnp‹ñ%ñùðèø”©ð¸è² $g°Ì©úÚ$Q¤êqþBìÑ;°˜jX»aø/¾»“¸9!YÒut#…œwêw»;Šþj!ŒNEò–¤ÆRXOø pàGP9eÄ7¥3fÍôÂ:GÓ×E¨¿Ú¨U&ÊnM&°‹îŠw´»L ccSð~¯å_[Éú‘'‘ýú·ÿ®Jþ­rB}%£‘_ýGÛ†½ßíHo•ºÄ†Õ`^ÝŒ×ä3xÇlýYwV|Dµè[- œËM  Ää+ZÎnt0ÿQ–<);‹)çŠSØ»îØþüù(°jfáʸàeƒÃñè_R޾ñ°¥õá?Îàgzsþűnm@êN a¨ÏìÀÕXÑçDÚ[ð™sðY­ùþNž÷°wf˜VA–áêòa/F_eÏ-ÝBË&¬¿NÍAkŠœ[LOÜÿê;¬ÍîOelŸÝ¿}G˜;}E{)3²F9<ØFú—Ì ;] VuvÞ+5Ùg•Ú÷MxÌøtÚhØýÛ[SC}ˆù⛩¯ã`£8ù±õcŒª¨ ‚°Ã/ÂÌßI'·¢Ý½ÅݘÄ5ìÀŒ'Bî‚o¤Z’¾æ®ô¹É<×@x‘mf,³i|üPú[öÃÊ(ƒœ÷¸õç 8«®Æ{j‚ª ew='Uë5a= šuÐ>wd’H!+¾£3ÊØkætêþ™ ÈòÓ!À¬­²ñT†è¯ž*±ÅG=>8çZ=µyHª×sœçt"ýÛ¿IÝùÚõçWy#'ñ%äYÕ¬¯dXûÍüyyPI¶àMDç¼Oæ8¸óÍtgôãw¤ÂŽ ½¬á5ŸV&ÓÏËÌëض/øÕ¡Dš©2r%ã ÒôEvfß±ôóaº²þºÝ5ZaüFk×ðk™áJâ+ãP;˜€7?¶±ŽÜîáþäÂ|•‚î’¿Ù¥¥Qƒdò¬)xÇÃ`M±æ=ñÍŒàŠ;È]Šæâ=½°Ï-Ph}Àè"ÙaFµ4]çlêjþ¦ý^&‰DÑkÑéq™øq(6¹>êo2ž”ÁýÛ; ƒYåÇg'•Ô«^„Ç€e‹Vnw=™L¼?7‘^n"õ œüÇò®5à Ó¸ï%ôõâ¢V×C«*˱ŸŒxœáDÆvÿÄSÌ99Dÿ÷ؼûYÁ'îƒ_e¿Êa|гâ?Ê÷1Lú#„ퟸ[3É#Ýуm…XbúVßLoçd7ØÉä‰åëa¥1u³2fÑ¿½ÙÕ{ðè˸ú"Zè 횉7: “S‚,ÅÍxªß2¦ïÎÙ)ZjŸµÌ®Ïƒ£éEþq/\¯46¥…qOx=Ì<Ã$ø·TɼÔç‚ÆmÖ7Á“{ƒ5-3ä­‰™¯™›PÛšTÊPA9µm΢7¸X|6O~Ü e¸2PŠçíd¼"ÿ¨d´•îènšmè¿Û„ ¤üùuX …™±Íè,5—¾&LK3tgçà@Úƒ}–ûœë™ ¯ñl‡Éy]Ì£r–ž]¬7xU¦x•¢^Ò Ë?ïuzs-&'IN]b :®x¸,Ædp‹¦ò•ó©.D¥ï².¨é"ºEDƒïh•vTCÜéç‰Èö1[¤úâÙL'±»ÍGg÷ÑM”é6Ï©·D…ï gþqH½ ~5‚(¯5j¡Ùz:eÀ‹å¦ko.ª×“ÝìrœAÅ›Ðún #Ë)lõåŽç¹ýƒ3o¯Wåþe•Q³°Îãù_}’ ö<„«sQÓAñß[О?˜T» õà[³Ênøó«ðçGµ ̯~Éw9èŒû™¸û‹lDNS›¸?Hl¦÷±J?¬.Qœ_›…ZsWüG:P˪øaàWyñÝõ“ä³ñQžÖŽ$Ü*±¨=š‹í+@Lc÷ûé¦û‰5<Ÿ§°ûË@ªoQ?XN„px¿?ÓsÚ,¼Ñ Ô¶ˆãçò‘J?¾^K<· „ú¼&ò ^>Â{sEÙ.—©Öà§S+°û ñ>ó`J¯Â²¡ñÁ-ƒ~•B_¢•Œ`Å£Z3~¶!1Î5ïg*N æ3†µ¶~÷£LËõÍÅOîÄ;¤Çoö„Wî¥Ø¬Ÿ·þŒM›„eÛ 7݉Ì+¾¾—nË·ÂY0±šI<’w@«ìúãœ{yаj\ge#ñ'S*?¡î™KÞ•Spç~¥¥³eRXñeáøýÔä‘Á|‡hÒuîhWr–ŠÄ ó±$Ÿá z_ðg©JxÉþ–ó=Øiú_î÷öó&ûS?X… ¦,Ö~ç~o³ ›xýUBx†ÖÖXê-Ó•þ%+ðëßôœhƒ cI{£ßý"Bbº­zUS`ðÃç¯c?“¨‰ ‚cˆÇ ª£Æhz!õjh"§)È÷ÆÓi¹‚ñ½T PüCœv1-g¨»’\ Òg’/H#7ªW7ã‚îoL4×iD§²¢.½7ü­; 9yñé’RœuÖò7˃:=«¼£ µ^éE¾üÌu Œü t­ae:€§¥2 !*LßRì³+z©KæG® þá*MYd÷k`‘=X-ùÇ)5lüZGô»©¶ñ%[¨ˆþª8[~Ô¶AtfÑ+w(}ª^ ßM~•Çx‡Úz8«>þÃ}yXýîSíƒÌg-zåç1 î ×ñ½ïøøfDû…¬XÄáɨd$ÅÞ?´kIÀïýˆF*k®¡îtуÂîÑ\‘ÕšÂ\< 2c‰yÿ‘ùvÇP³ÞAcœf¡'½ ð÷ÐN 1îò”~ÒBOËùGl†‘yÂóú7øÑAr£™ tˆâ£êÅdð7TbOÇ*/2RU2ŸÕ‡óM•ÞdN<ñOüGÅþãò±§úN¤ºìHßõøÇof%ÔÄð÷¨RÑá¬SG7‡ž!)Étšswìy(Xñ– ±7ï”ô⪊ãúRÝ4ƒäI9œ\«OC<¤;ÕæSéø5ʲ'\&ÿð5]­*xÒÒxêCðçãÉ[ëÉ£Îó‹­®‚w²9óp#§,eèV}G^k'× Y/¦§!G:Ât*?®z°•ŸùŠìCåìFëcÐZèÒ<Ëô/y-‡ðÔ·]ϪŸ5“àŽ \¤¶¥#Ý›£¿ºM~ô=ÃPXÿÊÖ(zíç2®ƒ§«PV†T¼üXù?ÿ1è•·ódTp¦$ί¢öÛ?â?ÒQ^–úÁÇÁ=,¶(¥Ñïú`í!ÿð‹Òrg”íZz2ð1õú"ìDuô»«©ÿx%ò‰IQÌ?Òá? è§ñ­@?Š!r¦šM;$PÿñŠZ ç°Ýí"uåñÕ*j:ñÑÂJ¢…ÆØ‘ÜÆ¢UÑxC_ÍZỽ迻2× ý-Ê‘ÇÇfyaŸ]ŒKXÂÑx¤ûx¨ þ_SÏâƒþ‰6*øÿ甲@úÈ4XÌ×zZÐ¥®Ä;9‰’ð±)A6B<åÁ>™”©åŽ`Å…ZE27XóøÆüØaúÐÂv¨ ¹ñŒx¼ÍØîúS¸þøú)¹Ž,Îî}Þ?O•£ê}i×qÍ¿ÚÁJéáAúƒÐ•1®€ýÚ\)½LyË;b›7ðg•éÛrþãN8Ë%T …èËÄK6ä§úðîµÄóžäºý‰Öˆ+Æx¬á¸ÿÆÄL@.âŽÿت<#ÿ¸ŒÿèF '¶ÇGƒÐ[÷žÓJ ÿqÛ}”=> ±û'z³Z9*ÁΨEÃ\s3­‘,‘¼iùr™Ã°ÞD´ŸŒq(|zâ9îÐo#©9®û ÚÞžÄâÃŒ´ôGQûüëÒƒ´Oh?Æ¡/ž?IMÛ]}5õAØËþ`½±£u¬äx¤ d5Ó˜-\ˆÞ[¸þB°Ãõ’a&…%ý±WçˆÊ‹“÷´#ÿøŒM]Å^b0½µ†µ•nNÉCM…$}ÀîÿÀƒÌ¥ÓH-¬:]©ôïÚ„PWüTlÅ«¾G™73üê Ó°Úñè[Õ5Ò*©{›Ÿéuän$þcXàPÐÂáxœ´2¤F´Ÿ2Nm¤æ#ú¦áXÆTz':€ ¢ò¡&HW«3Þ¨„%å­îØÿÅÖ°/òŽ (º6 ÑùD†Ì;½¨d7àýü‰Tr˜éôNè¯N¨Òk­5+°Ò\øóÉd\ÇÀ›fâ5Û¡˜ºw´Ê8Ì•O îh%¯;¯7§ê->É?À1xðnL¥58ê¢ÙLg‘øÖ*Ðwˆ½¿ÚÁüA¼ Q ÍøX+zñŽÇ/¥ú)ã çuù}+µºLõpžŒEø¿ËŸ¿Q–«PÿQY”¤IÖÜ¢ÔÐnÐ=q³æ‹>>jøU€rˆ~¨Ñè¢Ñ-¶ó?j2cúžX+ ã?þ¢XžWK€9 Ëbó›èª(GÃöß–ƒˆ+ <Ê5øÈ1*öü‚b–s#q},|E°›.ÌÉk•¹EçØ =_äRXHܵ§ÚQD ú];¦MˆÿhJ|>îÜDàÏiúï&&ïŽ8ÿ8¬l þ<7üÇG=± h‘ÒXx”«z=Pì[x»=ä2ÓØkj}K„ùÇjí/²ªf\çltf¼f1ð«ïXít¨Ÿã[–pë°³KP‰]•[D'õwçøPñS_Ë\ø¯áøÛmäUv={g~¾‰HŽ3‹7ÿHÔx<Ç>ÿ©d: ôçâ£v-œsL¡f:è^,®²6–Œ†ø­*ùGgbëÃV¢mšd¼W½§u µÃèr/oê…p8=ôÆSbîÞÔ™ç€? ær‹`ÖQKWÐ\•öC0¶bqC¢Ÿú_5W†¨ðÝAõ¼97Iœafeê`bê2F˜À­^›MÑ_U·ú‘ålÆ4B)\‹³xfÙ/üê'4瘒\Ü'>;ˆ¿Okº2a#)ØÞ<ËÅÑUñDô»¾Dùȹî7-´âÁ‹44ïâYçp·KžÔd4’AÎëÍ®.ïe)4%Ãt£«=5s;úpf5­äsaæw²â]ë³Þ/€ký~· ©“]?"g!û“<³F^;Nþ.²ù5û_êÏS‘ç ôc3`&‚vøë-±S·Q¤n£[¤yC*}–:‚kÞ •Kj†ºGdŸ™8¾ vÿ»ž^:þc~h+'‘ΘGžsš©±Í[þùµodbNk,'wýU"Ы^d"Õ‡ðË ‰ƒoæÏçðÓ·ã™ÊÒæ…x£=¹@çg.jrøó‡à~~äñåyÈ“jà)íºªÒ[\%ÿèÐ’ïNÃ~çÓa†ÆÒYƹˆó“ÍÊ=­˜¼ŠÔÎÀOÔ7IÏ ßžç;?íF¼¼ýnú«Cäs¸òixÖâ2u·Î¥‚?é§•%‰*jbïW±âUò“äëààUú·w°fÁU¼ :;9È}aîre”Uµ`¦eô8¿ô¿òC•†Œ¡(ëí€QV4&þ=5 #èa>ýU%Ë•yå9Yu¨})êLöc‹6"˜)L§Uô BÕZ×$Ý…Ú‡Íæq¼[%øŠ Ô>ÒáƒRªèØm®’üÞ…xø‘Ä ‹ôÃZÿPWüI ÉB ¤5Ô2é[ŒûæzãÞ0Rš«Áuª£±ÝIOŽxøº×ü1˜Õ ´hKÐt#c1åCç¶Q_e –òøÐ£ ™WGê=<ˆ»[_Í!ÎשÁŽïèk ‚ó?Im{ºÀ4";4Ìõx.Æ[¹Ï¹ž?õƒ÷yf÷Å0cPÿŸ»08¸ÈYüOýàþ‰ Ñ_½4ïQM’ 4«5/•ðnwÁצRw\û'ýnAuÈ©+¸À žÙìò~‡Ž‡EésÕÿ‡|Cuìd;ð={L?jAz¢Ãµû_éà”côQ¬féOþcŸzX\“ƒ¹»í‰d?£ß-îXÆö²ÌµÏD.ãjsÌs<@\Èzil¦ê¥žiŠ™ƒ§*?Ï{Oøaü!ýœWüßûÄ"ûÉDß(ñ™äٽ婪_Ÿ/sŠÈä\‡˜?˜*8ï8Ú«‰§±wÈmNù K;”©±˜¤4JŽŠp‡Jw¹š\ÅžÿQä¢1ùǬȻí†ÎÇ_/Æw]°}¾ð±úÍZq®³)øÕ Ö¬TÓzˆŠ+ê«ç ¶k=Œò²`}ÓÑã·ó£¢©gT´Íüþ¶ÚŠ•Ò’tÃS”5ÎÉ£rù5ž`(Þj¾;ƒŒ1…þP<×Bz#…Ü¡4jº]±ûsùqW áiëS§æ½êƒ'óûhÊÖ»´Œ«ñÞö ~,d•ŸRni¥Y-ØGKêëÄ=@Ó‘4 º3Œ’T©ÄlµûŠ/Xß®`§Mõ›èw „¹34»k“W¶ Þ¹¡ñìɱÍQ\,rMæG¥6b]“cùÊÃØ$k°+§‡‰é9|(Ìz‹µ;èÁ ¬æ±g‚_­®ôiX+}Ƭh%5Ÿ¢èzEÝt^üÇsªMºƒYnäé,ª…Ö^¼Ö:àûNÂFU€5èŒÿxbį­Çë{Ùo¤ëë6ó£9Çoaíóâßl¦} §;“É1}Cíð3þã;ÏÈG}:¿qž~ĸâÔÛ¼I†5.¹¬õ‘9¶ÛЋ-¦;×ܾ„mþCû©ÿUú'6#3ê€ÿ˜Áý¨ ¾ÜÉLF'¨h–ýGÀ|¡ÇHJú·wÇYÆWµÌ-ø¸uÔL®Âgv6¯Ž(/µ#xÊmܱ¸f½¹LOU|ëta›ùù?­Ít¿G¿ÃëLöäÿ˜~å°C!cuÇ¥~âÏk¨è7R”¹üyyE¿Âü(f‰Ð'21| <¯üÇyËoyœ.aÿ]ÌXðrwyNg0=âµ¼àôû™ÿa#!SÉ»¢þßG7øCpïEAú¶â+]­ OÇCüSz+ÀXB…b#ª‡¦£ß½Î;tD¥–AÔ$þx˜ÿ‹óS=b•¾£ß깈üVôOב›êŒ‹ÁüÇMôW¯µƒš·¶œü#jÝYtõ>õçïQÖÆ¤ÛFñX+¥ŽVßÒÿª¼|«ƒfwhŒü?µ¤èsnÈ*à-y? ƒ_uFÓ;›˜›þ7e"çȬg¨]Õbvy yF°ðRÆ ªêÞ“ø ØÓ›Â¸ËDbN$<¡­nüdp¥åÄÜ©áAl=Ö<]«A)žñ磿c"= Ûeé×åS¨^r7zâ"¸ :“aOfó\Ó;¡á÷ÇBzáÝfó½GrR„úÝ‹Z”`uyê/€U•à /+ñ Œ(.QºÝ¿Ýž?¸tå:Ǩ kÿæ+§ÕÄàs6?ø=ýûâ?|Àuö³£E`)wÉKˆÐ@±ì.'ÕÉ”î¢Ý¯2*‡ê&§óßP‡L¿jLÞu[w |.n‰Ëäxg[`?'ó›bs—mÅppüÇAôW-å-T´­°ÐÑ ™þ4œxú&YQüï Ø‡#ìñ%Ó›{´’¬¢8ʉãjž0×Üýn3Ö¨:´t ÛÒ¹Á¸k1„}!nÂV$§r¡8Y¸‘ØÔF~Ø›¶ö_÷ø†f÷›¢×Ÿ9¦6 ÿ±…Ù°—É<ÑâÌDÇZ è£>„™}`a ==Z²ö)®½„ºÂ1Ž˜Âj'°ÒuaôûÃTÇ .|õƒÑéÞÑî÷²Ã1À|dt&Ò½&UÏçClßË «ˆþPêŠÓÉœŠ?>dõß ©& ¤b£³±R€¸ô°ŠÀ}ßc*Ónc ½h“˜sñÑ¢ÙUcX5áOö¾2ýn*£ñI_Ìÿ[‘ÉýmºP_!Ñëv¿êK%D+¿£"}ršèÆ[þ£9gó•Sl˼!C´+™þ™·é0÷뙑ƒ‰B®Tµ´c²_skŽÙ—ùQ‹Q_G1p‹=—Þ(Ý­dN¥@O‘e÷ÔÃX„è¯*©›„ŽI¸¨QºJo#ȬìÈMÆæzu˼‚zÍ—^&ôð5_Ѳ)áÐmÖðXÀ9-Ï^§ÿ¸¥>?ŸÉ»ßÜû†tïD|&SGÍU“ŸOèXï¸ ßÏZmò;²³ï9ftã9Â)Ñûÿ€¸:.þ#}üë‹Å¿[ä§ï_Ò¦‰ÒXÏx<ß^DHY°ñuÉG¦‚¬e½D×yÀq1¿6¬Êç§eþçS»þ|>HG ]3lþÞÿAÿâ`ö»Vå\›¯þ^.A×›ùQaëÞ®¸D+‹¥o Ö{m3)¥ÁhM¬rþ}Fžà‹¥ß#°œ\á¢Ü.šÑß%ì*ÿúúšŸË„\çxÞ<»®>)¹wG̛֯ÐMŸ‰Æç>L†=Åw ÃDò‰tÔe¾Ö‡³`ªpI<×.<ö)®±Þ£ù_㬞\ÎÀZ:È?Zc+Á"=&ÿEÿì_—Û¦\†o äg‡kKø€Žìm>x0Öõ!lLR½þcÕÏygO°ËeèiG€VÇ~ñ½µJ²o6èV¨ˆZ®È®&x$àìR¯ÉùiÑ_¹ŠNXüÅD㹕Œ¥ öwE?ž[ ãÏÖÃûÀ›zÃŽl—EÝßêwãª~êiÞ¶-pˆ#É3òè ‰ŒÛ¿TSèŠò³2±­¶¾?籕 áøýèßþô—})JZTýßäìÌ>ê÷€•ï*EgRVÉ'牓ؑÎèĺâχr×Sè¯éÒM_Žÿؤ<„±8ÊÏvE%Œ£ÜÑ6d@¹@é›ƒÔæ§K‚ׯzÁõÁ_N!„ÙOµFá0w¦5Ýà+Ãeàï{Â\$9{1ÌF¢•jiy£¼z‡uOvQã¿i>þ£úÝ"ú-¿ÚƒÖ<3§o+€Á1ØÕ¥ËÉîgÍÄ!{hGýÇ'Áü”ÁøÕ~ò[/ÑB/¦â?Z'ð«³øj`H­Œ+ºEûVs- Bi«pW-ñ¦¢"ó?aåKÙÏm²õ»£t!F†ºb]®'b¹ÜUÅ®‡Ú výî"ð«Âô>܈>5/¼ˆjzPÕßth<×Ü^.¾üä¼ÇÝÑ_õ&Oío¼ÔÝ9F2¥Þa}ŸþÄ'D7õÆ,@?ðÍ=p¥™TÕ üêzYÎç•<â\ï½ÍÂÌØsË’˜ya&cÃ܂߮ƖñôkÙÃ? {¯Y7¨c¶Ê2™«,žÚþhYAËŸ:"fþù}2ˆJ<§žFG:º5³Ð[}ºµ4¨£á™®‘5†?D=‰U ü*® •Ä5N}¦ÌCÿ+§ÿ8¦nWd_ÞŠv¼þòÝà}Écrṿ™ó­\Ô“¬sàŽTb½ý[JYkP·e"«Í@¼Ô—ü]¥Jf·óŠÿ{Ÿ$gúÇç“ ýnçWQÛÅeùÇ6­4øÕeµ«\PjW舵ü#­282ë~RNÁgÞ£ƒûgκ¡¸¯TÝÔÇÂ[f€?ÏFý`ÔüG/Íß8~·öø³(*=U7ÞÉîä7–ì´¬*"·b,z{Uƒ¹Û«Á¯ê€X2Æ`U¿ Obñ@lŠFnû%“ ÷H\jýwë“YÛšžd 1±‡ °¯SƒõW×Q5„'øF V%õƒO/ô»™Ñ˜}›ðâj݉Q&‘ò”¥6në9@µ\Èoæ¡â¦*ù×íÔªû–ØšíT’Œ%Ö¯·ò |!6öb ×¼›͘ÿ±=¿úë7OÐCô»&×·6Œ«-ˆ~·/ÑÓ&òËàJ“‰…ïÀLç½\Éw'Ò½Wâ›öè×)éÔB":o9k¤ïægJáçâÏãÍdÿ¸EÛœ­=w|–>Õ½)ðÃñ”/ô¿zŒwmcª¡e°û—ÌÕóÿ‰?9ƛژücÈ=”Fvß–D}Øã&òüa®¹›Öž¼¹#žq7V¨šº±œ’Ý‘Ïÿ±‚èy,Ú¦û ;‰Í¿œÆPÐYDζ}ve¾òÚ0ëi*Þ{ ±Êvò…†;÷w!þ#{9=× ØïVVJð«ôhn§ÀNÕƒÉØHFW¸Àµg ƒT&ãðö¬øZXÝv\ŸÁ*s±Â‰él[‰øÙßJìXƒ‡s…zŒ7*D&5ß“{4O®µµC¹C¿þ?ú«¶0G ?ê{2ÿ<%õ}¬ô®ÚG·Â¦Œ`KÝA™&¡ežÄiwç¿Ø?ͯm ~åAåÎoZnô ÿU+½‡™˜¬ã#=¡Ú¡°ÒTþ»‘UZÌ-Ì/aΡ ã*Jø+üÍ]º+¶?Û5öw^°ÿHŒ-]Šßøì?*€$ 5RèŠÜf½<¿yØQ.ð«# bLÕ—¢•ºÊ×ý±RÙ?X ÿñ¾ú.v>9Í+ê±ùy zë5Ãtø¬uáLöq˧´ƒÿb,!¦]Œ_Õ†=¿d9Ðs51GÁŸWìÃoÕÃ\";| …îVýZ¬£Þõ>–;¿sõƒçÀ¯†ÀjÇ¥?U[bèÇæzå·\¡Úo2©.œç²†v\¿”ºóŠÛ¡¿êÿ`<§§'£¨Aq&)¢ÿnkô`ƒèVuÉ,c•rŒ°êRûâÅÔB(…ݨ=J†X—ŸyöS7ú_éÿšýÚÈIÞÜèÊÏ?G§ìEýyIrÖøôa»¨÷';ü“kþuX~s݈~Ư « ©×(’;œh¬µœg\0Ë8òƒ‚õ€á ^÷ØZ ~•ÔXŸè¯T+š>ç1É"ÔÀß~š¾ùï%u…d1ôgò½™Ì1˜ÙéôפWË2üE{Ç2‡êØ ÿqÙ˜M/˜ °g^fz#fô ÑX5ò?ULFÆ"þ¿ù;ÑáÏç:þûõ篩ÿÈ VUJ”øŸúÁEJsüÇ2êÏÓUË/J>‹ÿÈOþñÄÒ+adzÝ^2ž|+rˆéZ'ç®#³pnÍBow†wº6ìÂ3Ñ–þ%´@Ù…zGT¸_‘%…[¤VL >S@ ÃÆmÀ®ÖÁŽüaŒeÍbñÝ¿„~Xª)tYY‰­=шX_»çÒf2l¨¢&–Ëžý±²t-|ügÙ1úÝSÁýÛ à>ëÑ…uƒWÎÎX¼†¨:ýy¼éŸ8ëç¢{ié"¸æ¥ZC®°úÌDr‚œìçH7/­ñ;¿”(|ßñÚLý`+µÇoÖ|§\TßK{*â"·¬–Ñ–õÿįÑ}Lü~c2XW°mÎËNÏ2¿6¼þW1è¿ûZ^£ÑV®ò(ö¹ 8MIbê”ø{b©¸EîàFÿ;7¨‰Ü—äè'âqÏ…ã?ö)´2¨Ó×—§{íÑ`eñ4‹¡dO%˜fOã0Í[¼”ÍŸ/åÝ­’}øÿÑj’â¬QœTv]Çl;ô¨·3p,˜ÉzU}#ÚEµ_û¢T¥&¢Ÿ‘J.}œá ík: à5d3<«XéøÕ2‡1 E Ð_}Eõ%1LÅ?(nëÛÛ9«V.ÔŠBôÅ‹_"‹üÿÖÿ[¼f úÝõÖº¾0ŸµYû,J%˜wüÈP¥åô¿ ]ÿñA¬å™¸EV4„óó†Ûß—0ÿ‘ˆ¹ºíÑ™wéÚtØXƒULhڱ ã<¾'^ôþ–ó]é¢ôUG“/LæùCYAÖ×›‰Å¿›M‚ñ«îàL•èÏU“ÈþöÚ¢òe~cÕ5 ÉCè±"7;× PR‹Çp×Áÿbšøët™ìfÝb_ÓÌšÔK.m†ÿðž7{ÕlEz¶Ä7påôòº¼è<¿¼ê"a‘‡W&û\@ÿÝèF«ýׂ‚eAY|ôoë½±VÒyÓJòÑ}>…ƒèè1±Ü\éFMô9'~u‘¹x¯¥ZŒ¾<§Ñôm¦ƒþ»§ÌBüTMöF¿D‡‡ãüG&üÇ[jù—S÷ÒÜ´'òfD³Ðþü3Ç"£ötÊÿ£OâÑÿj²ód¾))ÿmýîwe.ùÇBú—T"ÿ°9ÔÕJnz_ÍÕfi»Ñ_…ÔƒFfëç•…ZBù@>Ç|bÞ¹ÿˆ£î3å?â&õçàÎ]Gf½ÚIâ·ÃàÁ±ˆÞr¯šýn+æž#ó“Å`~#³RBø)Ê“k.®÷™£§5†‚d݆™ŒÿhHw)‹* !2O¤ú·ŸÕF±šøÕ.ø=O"ûÃø1Ø»ç YwÈi²Â¦¼DËÜMF|͇•ÎàWyáe^ó®%º ÿች;~•œB3fc•»cÁcë~ÎÿðÖ2Àp4ÂÊ_ù$¤ïÍgbÍ·DˆävÿÝud'}aU|å,Ñ>¸wfx'i ß½(~àc¹ÊJx6›—XEþq–·ÀµÔ×àºA»—Ã,r“”øâëÌ~ùÎrÉÕdâ®<¥+¬g× áÔÚ°¦=GõªžS.›©lNýGwøÁø§Œd™‚û6(ÿqZ D¯á¯ç‡1iŒNÿ0ñÁ0,lúNÔœ¯(o\¢#Èìç v¹–?ú–Gß.®¨eÃ<;@_]y*òcϼ¨ï8…§Ü@62“B¾PË• öÂ…¹Bôèú@2®¢l@r]ÿ%ÿ¸ÍüÁdÅà 6Á:Oƒ›ƒ‡8…æhZαXª&V6ô¶ èA2šü£<Ñýð«<ð}tW-tW}ÑHøgU„ˆý/ãºþ€ùƒsÍåì¨Õâ«Añ]àÏc€ µËÉ 6 F¢z‚KìãE˜ú«·bÑmv5’«† ËîŸh÷oObz€å䥗ùbtH×¾—Î-žXûTBŽ&ÿéÃªŽŸê?zà?Ú CìmØÞ¨‰Ñþ#j®Æ0ÛÕÌ6ÔŸ¡š¤8öôOú¬ƒyÊ.}È—Ákx-8ëò²ó™¹¤DçxZw`»5³*Oÿ;½-Ý&ƒ¬üLdĽ8NåÆ$ë 3›ö™Cè<•ÃjfWš+>G—žåÔ4¯w¸”êA¾P‰¨ª7šŠQ²>5õ¨EÙH¦ÀO¢ãMëØ†Õ¿ǵ—z’dG—¸Û©Ékïð$.¤zà#* <¨¤=µ ^é¬\N¦Ö‰Î*Õ8« V&ª:f9[÷Y=ê³VÌÈ‹â./¬!3w°BÕÈÔ\eÔ‚¿ý÷1>ýÛ78OÆA÷éü*j+UV©©µSø>âÚ™UV*µãÚ>øíªkû·_QVjiÈ nóŸ¢w`~mi*÷ˆ¹23ó£ò‰AQôyñ‰©#µµV¥™.Ôˆy0)µ­äG媒Óÿj@¤®<µ‘o´Làí ±™Y‰¥Ó¶dþÇT<Êy,ö¼ÔS9NæK#q„ûµåð磉ÍÏÇ:ÁÜ‹!XØ|} Œ¡(ùÇf¡4•W¨\WÉ2- ÊkâðØýàWÓá{ýÈGŠW§‚ÿx[7ÿá¥e‹àš×kùÁ§j`݃ÈròôW§Gˆ­šµ«¡ž€áù’5mÐ ¸zOÅtüÍš¯©¼*ðÔâwç¼6à?îsLùxrw¼/+·åíx./2ûåA8瘈úÁ ‰‚^´Üôîk5vç¦p_/"W‰ØîþÔÉÿÅ÷íþ%™ô RÇ„׿ä¼rƒ~ÏO8ÞD¼±Œ›ØþøðTôOL7[?Ø“ÊÌ\mc¯wÈ }ˆ¦£Ë¯ïþ<ß¡·ø7õ%ˆ%2á=&ƒý\›XOEÎ,ÖˆG_¼šÖú—|$[HHý`²<ØÒ‚œ@#‹ž”è&ôzÚG™‰¬4ý®ãÝaæÒ+÷6ÕS±%c©T«oå¦K_f0¬hï\±¥+ÉB r>3õòaú·Çy2në:øÖh¤GúIüÐftµ •ޕ隀¾u üySs˜yå^vê?gH§ÁUßhmCí0¶tG{õ•xwtK³õ5tƒŸfv4§ÓÅ“zñS‚ÓÈœà eÐGv¿Ê­ÉÔ¤ß"²»Ïü¨ßÙ½ÐO‡~÷®V뱃ç§ïRnòõn¨p€éï's8ÒðNz2¿Ö+ô†ûÕyúïV$"w!7XGÔŒÉî²2 -Ë2ÞÇÃDÏ©PÜ~¥ëA•¯ù¼2“þ»iÁÓ^³Ò~ôW ‰œ'ƒï\¢Ka ž8WvûFÎ{I¯ÏÖD°â­ ¶¼)–ð&ž¬0ˆo¼ÛìN4zð~aÇ›±¤{ÈH¦ÂÑl’3D½ßÖŸRNªw¥=_qÄ®FLŽîI$_Lf€¾’òÜ,¬ý<}'ÑX&Ô ÇÑïÞçä¢Óÿê±|„…>Ëî¶“-”†ÙªKž”‹8¯´Ü~ånL#çj32Šõ“Ð_^¥=<üj»ò„üã.|Ç0,¸Å~Ú׋ îE ÀEÐ97lÿÃÏxìK·q§§ò é[Ћ” sŽ}´Æ²,ÞÅ iŒîEâmÁìE ¸î Wx‘ìñlÕtl~GPÿ¢ô2:f½@øó %ˆÙ¡ôÌu.€ÿx {1ýÕLøóŠVzÖÌJÿ«Ñ(%ʯÉ,jbÿN’VÑj„Z1±Àöj&æwz’s]Ö/c¨ÿXн/…^ÊjÇüGI"ôXä‚ä=3A±à¸;qDhü*†\JUå#Ë"D¢£é6ÜH~ѽÌòŽVÔ ¶²â´F¶õøCæmx‘´æcSšñ‚+nÇ1°œ Ý¿Ý_|‘ýA™;£s¼$™.t+9fÖ€=ñ€;*l•qÌwœF_œÑzhŒ%ë*Ãüó¹fJãþã±]U¸ÈârŸóŠÿ{Ÿ¤U'R÷÷ã÷iô¿²œ_ýønä>¾Ç¤§[I~ð«ójKVÙCþñˆŽX[´ä!zºÈ¬wúsWy—<ï†|%Kˆ´¢sQï‹Ì]y"R¢¿ª¥}æÕÛ+ÿ@5Q’™¨“¤‡Ú‚šôfújêíba¢sSdvf0_/ލų³ S–œ#+igú—¸ƒäìÂfì§ü 9R"±à ô»•Y%>¸ÀB"^ã ;ŒõúJŽpž*ÅŠ0¿å3æG…íÒ÷ëò—”YÒ›x­ŠÚ4ð˜µðoé±;[é¸ÑÐHOœÚ˜¤•ÃÉå™h¨eàš}´jú&¬rsìÕtÄcÈ>ÊߨZöXÆcÖµ»_­ƒQMŸ²år¦h¢†ŽLCöh_¹­ž"*L~1{¾ƒúÙíD_> -¯‰ìgà=½9Ëvüù#éGÿÄðzÄTˈ'Òîvu€ûà‡g+ÎUW Î?^’anwÉ>Z£ßm¯>ŽüÃ…,3ŽW„ƒ_íQ^kmˆ$S™4!šó›èÂå„/j|…¥Ì¨÷G;å ñ_ºÔmo|?ô»ÅÁ_ð«6LS¯Å›]LÞ ýîy2­]x§ÕD¾_°ø°¥®XÓ¸ÁóÓS?˜Ï•$©QX'C0ß-:yälÝf+¶Â%ÿXDµ\ ùÈt*üÜáχYê5ìAøöRp#öo.„ÿÅüÚÐõƒ1ÅP2¶ÓhôJ’Ø5çÈ?f˜P‡cvÅnŽžô×*Iñ3XÑü`w³ñF]É:ê1Dè*Ÿ$r.ØÕ}*J&5ˆØWæ ¡×ábæ,$¶/ Ætþ#€.È»:á?Úá?º³òp|]æŸôW•®ª;x^_Âa\Km”Ð…A€*3I©:HUojÅM¢ðhfk¢.žˆ7‰AG-ž"r®‘ä}ŒûrƒóÁÛ¢Ä÷ˆ¦NòL}6¢3«z´QÆCŽUEX9´p+-OkŒuÛ¿4l…™™úÁ@¿5Ôú§1†ûsÎ7%óϿˊÄC¸9ä`#•UÈÑ ¾úÝ4Ôx±vsë5€kÌ3ÖpÅ“¦ƒz?ݸKþ1EVG}çÌ?öÓ—é¶Âڈ鱤›—cªµŽúó‡`k­©*ùÇòuœäz…uÜ —Š’1fžª8(v:ÂÒ=Õ È¨MxuÏÿê“lêtþý±„®¦Cõ㫨}üN'­tÌ‹*'jÙÑÎe¥:ýWÀ Ïó‹ÒrÏ•K OƒÙ+²‚PÈ?P§¹X&“ïÈF:D1ÿ(ˆ~·¹FAlIaæŸW¤B«³vGÖç{x•ý2{$û·'¡6²”¨Š%]ÄL¡âã’XˆÕ;ŒÝÙƒÒë óÓEªâum.þýû."ñ)|<+? ›ˆÝ/Kàsù,‰ùçß”¥ÒýUWì{:c <ÈæÔNÇ*ŸÖÐKÐVMƒ£›·òIöÕ2Gp·×k ÈTꃠßÂdàc)òרŠü†«ÁvÔ‡}»ž <>r ,Òï<ûGô»ÏÉ?Nqv“ùÉ,ºUí‰÷A劮a 8øS¨Åx•M|„6ö©<%^i7ÃyvÈ…íúü«-YË`ºËWà_Û\ГÉe"(¸~0‘Ñ|k"\ëœWüßû$>ý¯f9OƤz0‰ó«¨íBS}èH¸E+!j 5¸Ûçn¥šv–ücóksD‘??Gÿö|d/Áý£é½ÐàT£ÿî-±Dæ¥~°èEýnJæG—¢þ#?¬—øro¹þWWek”Mvg¬ÛԘ؜MÄÿdÄ7¦qš w<KŒb켉M<ƒ)V앜EÿÄE/§ÜÑFŠÂD%vÝÇAÞi[gØÛ9 á«?@÷d÷/y+“ê½eÄ ±KôoßH¥rUîÄXåÎÄÈY±t{±°ÍáTðv먶‹…ΤϰþÃK«îÒ~ç ™rF"òXõ— ª¡^iyãåÖêUÉÑÉomè/þe¿UΪ·e*âÀq ?‡ÉfÒq½íY¡.ö« XrK2šXÉ^ [ûˆš`µ¯Ò{ùe8 f& | ãߨ‰m¶ùéBÄ%ˆËã³JU¹Rœ¿î…É ÿ1•|.)‘g4Nve8þc›òYË#/à?F?'✆ó^ºãÍÇ`Ñc¢¿MKy jð3ÙÀšËXµJšÝ¿Ì?¯Jÿ’üœZ6TK3Éh®“Ÿ­‡M_JV`€Ù×¥þ<>6*Èý|bû/xšÉFSøþ±F~=®<æ Ok¯XoøÕ ö0›f3Õ Qòc ZÎÙtþ«me6?ÙÉjÆ)Tb†¶¼4üÇ0ô»¡ó…Z7ÎÙîV ܬ%þò‘1üj!|wA¬éIªëâ:V“)”1»‚唃;[‡©exà?æ‚_M µÃ—b-9ée͉FeŸuÔy, rd ùÐ"zÑ–±Þ™° `ŠÔd[æ,xøÒÉ<“Ýðu©äGç=QmæÉÃxNÿ«‘Xh“ùçOé*ò•nŵ¨M—©Jì¯<“ø°ûÁ¯Úá opÏKã‘>ÈõÎõN+ª"OõMd– þXy¢_o¬´þ8¿&±Žzï.mTðÿþÏAæGmÁ4„¡Èˆÿh‡•Èv\§&ìçUØš¥ MLhÙ¦*à×µ·j õ5ì§Ñåy<Ѳ¢ð¤¯ag¢ó~¯Çw,á,¾‰g¤¿Ô~ÑEý3M½§¾”Ùˆš¦a™ýà+²â=ºá1³¯ZØŠ¦ÆK¤©œ‚}’èÚÉÏ_ !Nÿº1%©*P=Þ#NÝ?³ÿQ{]ÿ‘6¡Jâóp©Ý©“ïÀŸÈ{[€:âT`cáÍÜ£<§¢¿ž ¼¤9o£=¿vûLºÒ>ý^³zS»þïþc3û_ßå‰ß{H¿ž°üGM­"Ym2ŽÕØÝ’Øç¾D®¨¥ÎÀzσëö¢£Þ{¸ôœØÒ"ÔTÇÏÔ3º°ç*ôo_æN_C¿››x%/ˆÊvXxòÁi`Cþð!Ó¨Ôódr^ + úÝœæ|^~ç+Ðûz|<Ž'®fÞ!Ú²÷0È2¨–㿯Ðe]ÐãSÑÔÚû›À± ½Tiº ž'3´û—xSß8Ò¸ƒÿø¦þã³XCöqUÅ`2šQº/uÓ™âaä5·¡“Ía½¥’n¬ôR˜šÔä%öüËäfvµFô»o÷¸*ùÇDpÎQ<_ù[éb”ß¼IÎ&¬tjŸE?_ë/¦ŒgkŽÃ7¥£V² ýñ_0U?UcoV¾jt…ü~.<|U½¿¼£_5raß«Ódó?f“ÑŒ ãzμ'”Oè«õ Öj>j‰¼dS;å_2ÀyG²«S…ÂÖ‹ïctç©aÆ#ÿð%o‹n]f>â{¬aø'î̺*Çû¥6c’eÞ .Y€¶ÿ¼äÌ?ö0?ê…ÅÒœHè\lÆuÜàgKðÓ¶V ¤U ýî=ôW¹¬kÆ#Øó¢¨/ÜͤxÄÌ0¤=Qu?ÔÿÑ_¥ ûXì<UM®º8¿rÞÐH}òÿ‘™^WDyñ(¸‡ÅÎàùQ›èß¾™ü#jý¯®(ûxŸ?/JâùŽ"síJª/ÅJúïÞ¹D“(âW嘿Sl±zŸ– ãîrZ^»$[Ât'ÁN]…#Y?˜X3Ž ʲ äј«Œ±œû~XØ ñ9°øïø Å"•<ÒÆˆ‚Ø¢`$vOר׿ 8óÑŠ/%;=ÿ‘ÍaüGï ]Ñ"'ãŸèEÍ 6ÓøéÉÄóg‰RìŽÏ9 ”WSÙëúv-G+žÑšã7šÀþ^%Æ·çÍ–G¿{ ¾üùÍcØ™­ìz-ÞÏtëž\ ‹Ôê7k~W®ªñ±Ègð“ÉÔ Ó·%âòÑ Ì@§Ö¸Øú^P¡ñxÒü­*üFK*"¤7RÈ£˜Œ.däc*à“÷_ÀOÇ›D%–Ø¿òçÀ2z ßí„™ŽÉ :5ç±>œüÃüª&lJøŽF†]ÉЛ{êcуJÇR–æ8¾à²ñïyŒ“û´C¼ß™Y ]ÕùUëÀ3p–Nf¨iìJNõ˜Ì€Y~FLjSz ¾Ú ?½Žü£<ùG Z¤üx%Øæ¶¢þÃÇù¨ì@u‡hç1Yó=ÕDFEë @–ÓO‹.&ÖDú>%ÿØ[sˆŠ:ä%9çã° Sõ­0Þ'×[L"bñVÖÅŸ3Kž×7Sñ—úó®T8¾ ?r¡[UwüÑiô»;ðvÉèùeÁŸ¿$k ÊÛ5L ÓV÷‰Kr(Ïh2ï¤úQ3‡czçJ( ª“Ubºá ‡æØm%µnˬ䨡{¢ŠKE|˜ŸÝ ôŽ ! óÒÿãŸ$W½~¯¾)ùÈ@þ½_ª©›©ÿا•õéßÞU¶)É?vÒk#U%!ó$#³þSå.ÀW™ˆì ­Þ†ú&h¸>ˆåÁý«ŠqQÌ?Zii¸ß×ðsàEwpšZN½+ÝFb¯¿Â±D¬Žµwžm€Ý?q*1o/îøYP‰%X›cb^à¼B*p”¸ti. fDâRßi«EbÁ`$¾¬jÛ¦?‰—Çá¯ÄŽ K®»À%÷9#¼7w•rXWCØ÷Øt7P˜Tð GÀÙ:ÃÏ^f·k9S{jGV}u„õç´†\ç_ä1xʬ¬”>åubßuµ&`9Ù‚WŸ|hh ¶þÍ. õŽš€ì`?ðd°º\UÎÞžÿq¬jõƒ¯‰ëG/{ó]OÔ¸)Ñ9šâL8瘚.d&þÚŰ瓜ãg²TgK`Üg‚ßqX¾#úý:äƒÓxo“ÃÆ§Ä_m ׸ˆFò!þ¢#q¬‹q—ÙÚçÜàIy;ý©,©kœ%V¿lÜ„ÿ8‚‡›ËýÆþ/Š‹Áýz~Þäd­¶,Ï Åð8ž`4gÉ{×`—‘}ÄÅÞ»G§Sn "ç™d _õìü½J0¿ýÜàW>aÎ0H‹ÅÉÛz°¥DØžÆPîÁò3 ùéò:ƒj½¿¨x€¢+€!=¥^ƒÒÔƒŸ>ˆ'Φ_u"ÑšïžÂ×2ý Kÿ1 ÿ1|á/ªéN1w"‹c<ž£8Uþ°ð™`êãmúq6“õËZÿP;Ì+7€a>æéÂï'ÏXÊ2Ó¨@Ew{làó33{w1{q7*ãAô/iÏyŽ4ªò_òCÎã««´S}9¿yú‚@ÒwZ¯‹þª=ý©jà“fþâÞ,ŽlûúîªsêTuÜÝÝÝÝÝ]'îîBÜ]‰“„¸+ĸ÷wwÏ÷+îMC¸äó~sÿ“'CÓ„Ó§lËZkïMlÿ˜.]¥•à‘ÇšãñMIÍíøýUt7^È×øE®õ|?ôF4®Á$#©YÌh-càų k„ n†?>‘¼ÏA®ö/ØS7rPÅ_œûçžx ŒwIyÅu¼9˜ÿáä~­Æó¿ýÕc£™Ø™Žú!VJ0¶£d6+¨'q:7QÏ~„NŠÙ©rTè¥>ÂÎõ1<älêX™¯üïÿöß?“î`¹vÿ«ƒðyévu’üã5*³ž°ò+œ¯Øo1‹e òBb¸:kÿëCëêoÐÜã™n 6ôMô‘[µÂúÙ›¢ˆsoÈÊLXÿõ¯ÿÛ׸Z]*º»n»hˆª&¯rÇ:\­ñ÷ÈKRP/ñ‰)€9BU?èGÿ«|ü–¤h%ÞMÇÆW&ËF¬²„¿×Ù]vú_…£oSÈ=[üîr^·2ö%£ò…™F^06Á—.9™Pl¤R+ñnsø¬Æa=UÇ|J/ÂÚó?ncÙ3`¥ópt/ñŸØéSüÐv¬è¾s§¿íe¹/ü§]:µGÚެ{;:®¿kÏŠª¢ŽÁØŒ‚y°FâºÙ¬9’g4Z‡úƒ`.H-+]ƒŽkïÅK^Æ’—aâþš¢+Fjê?vÀÐöÀ~6Å›ÎáçÙÉ?p¥‚ë¿ëGÿ«â¬–Šh¸š­›<çݰ×é°çn KŸñâe°&ë©!|BöåCî1=¨]›x[œÒJ9}¨?ÏÁ~²à1<°‘7¸¢t¬Ç_µ'ºâ?Ÿ¿òïŸ8üê9Þ~(ìB;ðšÌrð²Þ æGŇ»É>u!H×$ªKgÂuŸ£×(z@Í‚ùíeEgöG"çñÔã“6ƒLeTÞ{6½îo+FADàÄJzñ©—{èw§+E1K€æl£kl§;®UÈf2GÙþ£Ç2žþíã[/²œK¼óþ£/þwœ±‘¬h³ =Èg–À.T c®5šühóÏ#›“°ò=á“Få·g)å}×5në¢1läð)˜fWÕ®û¹ÍSÔ*üGs½F¢0K)‚³u~ãM&Ñ⑼ÑÚ­„ƒ_ª¨>É­®õ.9"‰SìÌÔ4 üù&©«Êøˆ§–ÍBU¥îÒ“Ž¶#Ð_Ý'ÿ˜J–”Ô*IÿöJä¯>œI:Éòªëx+ký„Ž÷hȲTµ”Ù@…3LÅ@+ {ÙJî¶Ìj@Ènô\¾ÌM,.ÍÈD @ÖËèȸüÇQÍ%ažÔÖÜù—ð¦ÓîÐ’€œ+3«–a’ðRçSú‘¥µn¨Åd‚¹'îfRüGN"›6¨À>‘§ßtñÿîE¦Ÿô/ OEl×y Û.>:Ž_]Õ+‰–Ì´1 æ^¢‚ÐGßË|¶°åw—˜ÇðÚ72¹Ñ™þWÕµBÔù“¹©ÿkÒÿ„’¿ë^z ðöÝ2xCê?ÜèPWV?)™ßA•IQ—¢k¨Ž<#ýŠž þ›‰ðÿø¶ÌšðŇhX²tÁ-*F¿™ßÞ½«{ˆòÄ‚ ðÞÄÝqˆêË¢ìègÜÀŠÞ%ÒÍ5 “ü#_ˆ;¼äX&íúÅÊè’Òø¶ÁÆ% Ž>TŽ8÷4¸ò"а©XÔøÆJ=¤Œf“^J¿f˜1ÑÎPv“›þ³N¸Àwø”%äHÞ`NQÕ2üæ9ø¦¬?wh—´w2;õ°h©K‰ÏqöI«Š½nlŒá‰µû'NÅn¯áSGòŒ&€]øª×¿ÄƯJ_t™ø®B”aU9ó·Àd®±¨?¿¨€ßÄBÕ€óÛ½À} ;>?˜üÃ׿â5Q ýÕYöåÆ>Ëÿ¶gwv§ìêà-K°(·°É&€1ö%7;&öÃïývQcõÚÄ*LŽ„¯˜€¾ê*Ÿ¿ öb3‘oLx†îÖ 3>–>ùÇtl|tþÍ$ügg¬,ô¢šÓhoôÄP„'¿CÿÄê 1÷`¼Ç\ìëpú—|¡_Ⱥ‚$VåÔ+>d$>f0øÕVV뇟 8CÈ?î ÃŸ2›±¯¨Êl‰g¸Á*Ž/§2êß^‰ùQnd~Ô{ª'¡,Šid ê°µõŬHýùHð«ÏÔh|£Wzgò‘™Øìøæz˜”Lñ@ÜQ½—K\ä ã±~“|ù¨1…þ%…Œ‘ò¹ñFÕƒái U~ðËé軘þ¶¨÷km ƒK-޹Wî JÿqPÒ›Ùu¼%µ¡èwK×u3æâ?^³Ì¨pùžø ÌhkO¡äõ&oxFÿÄ͵³kýÈ6ÃÃÜKô-è©€_yk·ð#ˆÀêWyÉfú'dÊïS*—ÁôHæ²¾Ò¿åƒÚŒ~7¢Õ”óh+Ócqz-Éš â:ôüE*ú_yºÎÌwºšþ]ÿai{˜_kû¶â© º‘ùçaDöèÞpßûÂt,§·ô†¨¯¢¢2Mÿ]h*ò¼]2‹ü* ˆžAž‡¯¢Ç·ßOMWkþ|}a(óégüó÷² ÌzÃPâW©é ™PÔÃnn!¯‰UȬ¦Â3œÓ°Õ§A ÂÁ0?ÇÔÓBÚ?ª/™‰#©Ãø¤¹ÄÓÇ©°p/¿gxaµOÁ8$'ÿˆbô•vWãÿþß-Ç,yÿQ“ì …Ú圯= µÓn£,Xø-7 ÿ‡þí!­¸]/GþÑŸkÏÀH…ÿ¨DÝø<ÈW*LüÐ!mà¯7(’ë—Çéßþ'þ<ªvB{$“p×O%ÖòÁDã ö4–‚©mcòñ…LÉ›ó:„l"½f"‹çÁtbæŸ?“W„à3ÍÀ¯Æ‚—ù»†áüÇhüÇD²‰$ðõðHÈžžá?Ü‚­??âx§×`µ$Ä× P–åìÁy+FmDpëk ¨UÀй<âÈ·'ÌäÜöã®Úƒ~·P+ÓS¯/Ër®2cß=P/Ùý|7Rc¾ÿ̤5È{v”R©é¿;ßï ê;[bYÓÂl²Þ)üGrî {þà2±hF3áüÕ ã`&b_'SE÷ ¾á*k¤&®¿†Å¯޵ß•5n‰Î`¤û¹Û*ámúá!ŸÒ‡Ñ½|Se­fÌ¿@Õs'âútðwÈÒÃÚ{`í)?®ž)ü¶CK®I¹ ‡>n€qXíSkBŸÄ8æNì}vôDÛ­ÁXÑqøÃ ×Óî¿?ÈØ4`¹ä ×5nMÿÄQþÈ>’“öSEˆú² `jOžŸj”^诞Qåø˜úfoôWwÍ æRVôÄŒåú5E€wø ­»EÄãÃ3ÇLd´—Ôs*7ë ÊØ…ä/-é¼ÞŸŒëõ‰©?¿BÔ_—³˜“êӓ䓌£ÔÞwoI­—G„ÖŒë±H•7 ÃJì¬È|Ý| Kué›xˆXõÉgÖRÿ±¿”Û|AΞ,á×bÝà@ýw÷Ã|Ô²âfž4Ál£>h®éÄ Õ ÓãBç4ë%ÙÍEüGº4°gƒ`)â㑺Rk©¼2¸)k®“ú½H¤Í„_iZb-¡ë<…í#ø•Ý¿¤˜h(>ù×mqd£}­¾šþ%ñ´°U·søÂ@¾F¹÷‘è£ùG9øýô/Iå_ÿÑOo¦}V¢V°¸±Ko¨k|èÇ\P? [£ÜýÈ“³¤¢öOGŸû˜HÔÇþ®ã^¨L䛆­ú«©Ø_,ÿwYžÊ†±ÔŸ¯øÓ"Þ¿¨/¹l¯ƒYM²ëÏë׎¥KsÜX±<¶+H_Tåh™¿|èE=dL,×K<Åö5…¼ ?»Ü‰ýËŠí΢ÖV^dóêzÖÎân=¾§.J»%;Ö·09ó[ð* u̼Ç2†u°-T°Pî…ÎÚ®ý î¿(ÚÍOšêG7?‘‡ˆº?ÁBv¶ O×Lã-ùÖž¤e¬;/þ»ŸõÁ,—D‹…jþ2Þâ0k"®ËÇy+E1JNÞØQ7z!¶„éÃg¦_s⯂›~?^ˆÕ’ ¶j_ì‹ÿH‹…kLýÇMz‚M]BýÅSŽ;ÑÃ>³¹â^úï rÌnàWE8¦lô¬†ô<Ÿ»Ÿ:¯eÄÜ?Ô20“ihQo«4æWxéôàv™°|Eдº©Ü°7Û‚¬wBÿBT0œ«7|Á]õµ#e²ù þc4üys+5µI@^¦P?ÈÜAôH ‰¢—“í ŸÕr~Or×åÃ'¶SWP$—™J¾PœÞçé–Ó¹ª·"æó&,R<×,˜œaäÆw}ìo;Œ†ÿxÖ×TYåyØ~w1øÕö¸ t(±ýk/Ìù ”b¯ñBu©9 ÂXš¯™éB#üå«ÇSöSýù|XÜæmø‘|iðªxŒÖ:òÖ‡™ W™úÁæä‡9;¹8‹_åR×=smÝ}2­ãd¡‘Ìœèw_ Õ(G…}AkõMÀ›ú’\$¿ÙÛïCý`IzF–ÂSïǧÏ6nJú¸Ž7—ÖÿQ–ì¸7šó¦è¯æ˜úÝÙdYñ™1;—Lá ~d;+-fêû+Ç쿜ç¡ô/© ®rÕ…_íÑv¢$*Ø’˜e…¼`æ†ÿ8Ìü(w3ùG+’s1É}ºàßR›àè#[­ˆ’s%s46þB1˜ÿÿDýn@þñÑD‹è:O® ª_kµìLû($Š‹[þý·Ñ?ñ8çè›ÁÅø±Ð,wÞáCýù2Çœëj"¼(MþqBÌ”‘˜‘LŒ ò<„´f6ðã¢à+©ñ5Œ¢½\®å…ÿhÏLˆg dwQK…Î#Åcþy*üÇ(ÔØéÃ`ã‰.‹hrNƒíGÅ2jd©Dh*zžèEzîª/0ÜÞø‘(Ø×*DË#AV£g¹‚&5Þ#:y÷Ÿ"û€£?ê˜*WÂΕ‡9IÌ¤ÆØõ4øì¬þ<<*ïzàWvê9B¸Úz1vÑ |k“ Ëžìê)<©“Éñ[ð!{ÉNÆù竨ÿø]é°·ŽãÚ¸Ëóìg$Þ(šäŽXöFyu¬gˆÆ}¬¬Í®OëÉ3˸÷õ&`׫ø¨àÞÈsØ›ß߉­/Â刓€Ðg ÿ؇½ë‚ÿè@Íϰ†ld…‘Ã_mFãYU^ÄuB-õ“¨®/¾mŒEWÞ‰íI@‡õÓDþ°jÏðêËÙ¹=?ªˆq\¦§¦kcþ/ª‘ÍdåNËǘ .uXu/ç~5}xxêÚDÎñ°þ1© @ãŠ/Nƒ·Ë‹v¸‡Jl„ûùǹãâ½3â;Ö ÔN7M½#Ú‚ÝßH4zÚ¬FýÇ*o€»$ÆÜå³ë±¦QDþ ÏËG½wð ´öLöÖð©C…ÿø¨  CÝL5áœÞT”þ‰·°Év5Ä(¬}w޲!E@Õ˜}À?ÄzbŠ—df}TUê¡vª tØh 6 þ¼=B¾2'p ªØ©èws3ŽôG.üDa•BÞuÀêŽÚH2#{îc_2²ò²ªQ€iêuÉ?™å˜ÞNU¥¨Çn‹ÿ`Ú}Ý“š‹ñó›¨HœNÎÕ@½ Ôv§CЇ\Ù‹ÜWQÌìF;9scûÈòÔŽfþ¹]BÚ>ÓÞÓf­—C)Vß¿¿9“¸£‘¼áºÂéµ!D.eÐïþEþQýU8ö’pUØó;f{2…sԼ췑l£²$ùGDøŠ<㣕²½Œc\qù½dòîÆFï¯/c®HØú·_¥ÿUl˜kt7Ü-£ŠïtO¬Í#o¸(|D41Dï¦}–ÐËdhâ‘d%¦mE?Íšú60-úE]• éɺü#.õÕ–°;ޝ,b¬$†ëM$rK´"^=*ãùö]ÙRf=xþ|Oê ENîÄ»`"Ó‰Ž×Â!ÿXû±˜{*øÚÙM¶ ñ˜o8Úq<‰ˆ|ÏÃP̆?…ÕŸFÜsÚ(p‚ºBP¡aØhËØWþóÎìŸxéùÉ1js|Çð”vÿ’2óKêâß¡ûÎ{›ØårÖïBUâúïöø£ÿH ]e~ÔO°¦áç:,orüR<=1¢œÑÜú=–y{æÒœŸß§EDñ%˜Mf`~í]yeÔ&¼·Ù%vÙ’Ü &YL:ɯ¦Ž®ý'Ú“åLå2å%>¿v0þã’ãŽ^^úIAAj*‡ºÎ B•–˜» >è6 Tu¬g·z ~åÃ1`Õþ yóÅ…ÿÐ_U¦cjîª5±‘¥ð´ƒ92»ÿî%̵̡n>q똿úŠ×kƒ>®zŒï"hý ¯®ñI³ñ@‹Ahæ¨9°Õ3Ð_íO›DŸ w—*ÌI}~u‡='Á&ŸÏ©EíÉýTJ/ñÛ•þ¬wå<ïêVÀJ6Ÿ;¥ZRS`÷/ÉN…Úøä'0ÉßUY&þ=ÆÃ‡§°™Š>`0ŒÄ¢ÿoëý³P„=ÃRkµ1„nð£á?ú‘L×É€¶i8SDzu†ÿÆ•iǹì…~¸9Þ)Ž ˜1ÙÎ1LA^ÙT=1<ðWåx#+üNiüD~ð´ènš °÷Í­NÌ=鄚75%•ð—G@  Äò Ô¿ý Ã‡‰§¶C}U¶rj£ºEÉA&ûM¦Æ±:™C 4­[hŽçP™cÏñáˆ'Óý2–šA]l[iê¿n´Ú4!¸sÛ3AîSŸÌØø7ÂÄö€gÌAžžü¥&µ#ÅÑEÄA%PO>ÕécÝa~Ôcú'fÃô f¨Ï—(³‘ Oâ ÔAì×Êÿü×ÚmžëN0È¢¹¾ Û§¡b6æÕæUyžìHy¯£¢ÿüÁYú ô)¡™Åð‰W˜•ÊV)À\G[kÏ?O¢=“e,ùRd§û_aÚgný-úÇ£v%ö8.ä­$3ÑÛ¾r´'w— røü?¿J¨•9)HïÎ=T¦76wX=0¤gðëPnÒ£Mæž^Æõ“gú8QÏcÀs®„?‹ Rduì‚'¨ÑUê-R bÖÑïþ©3ˆk1Ç]ôW±\h° ^Øà™FjÖºâRœä*6l>èÚ>ë‡Ü¤çᘗëÕÁ§Úq|ñ©ø½²³Bo«úŸ·ƒ Éæ?RÉ¿C.b WÇ?¬éÔnj/ej|Øü×!*ºSâuºñ\÷D‰8ÒXŽnæ-Vv?õ2öPY‘Š¿óD Ðõ*––.ö$[G½|¨ ;«ˆHÿQn°µn¨*ð„M§ÁÄÆ/Œ Æu¼Ç<57' ºH4Ø5Cbî>h€gQ6WϱÈçÔ=Ÿµœ i^®ýÛüGýy+½ªŒö°kPK•Âæºqœ••YA$zßAA£aSÓ¹i©÷FØþÒ ÷U.ôË‚œÃ›º7I>´ž}*š ‡èw£›‰á'‚…Ã*heÀ>צ«ïhÈÅ©-ôÆ:âÜ0r¹ÒBôÇœ!ßÊëü–ú5:àå¨`Ìœ(‚EÝs»”õ†Òÿê~£8žp9•ý•=“æMú݈r)ÜÇcpM{ÞïôW;ðjÌU¨l\';úÝí¬÷L-2¯Â%Ïâ3;s.ú±¿žüÍ(_ps Ò¦ñáFlŠfYÿñ Ìï9=KPßÝv ¬ýnCüæLô¬L»zh!ü¹'{¦¾ê_òÌ‘D0ûÍÑ3Ü‚O ÊÊð2<Ý8Æòüw©žŒGN~e‘‘ÍÆl¥^µ¼¼Žÿè@þ¬Ü ìoµ=cÑË–w(BLýýÔ)|ç{¸ o<ð&Ðl: ‰Ýÿ_ÕÓ_µ!_Xä_?x…#=€ÝÚMWÃØ([KAFB™„ÈÙf|¿Ã´O‡yéODž þ|i{‘Z23þ¬0|¹ùÅlÔyËA¿Â™GÕ08àv0µÉÈ?"P¡žŽ(9Šp#uà¦/pn2é¿÷.b {¿ž‰|¦œÔ5:®¯`5§™{¿üê±µ…é$AJ®£EÊ‹öx6wP;õ?v_ïñÛï==#c~iô@뻓Þòóé¾Ñ\(*ºâV¬xÓ¼…žõïÛZÖéœçþ°7£9öÎì2ž¼ìº´ƒ#4ð²÷Æ0¸™¶Ò ýÕCzG„5*eºÁïߥJ%óë¢QÚ#`pkáÝoÂÌWÃ+iF@ÿ«ލâúÆÓã?>Ñ7[¨æG]×{ˆ2dÑáwñdÆ;iÀêS±Øk‰W¶bµSƒ5ý„ÿ¹BåŽcüGF¢b û¾äf>|…;Võ,*ñäÏ Ùí9ËØªg ájïÓëb+Ûó¬Ü‚YÈŒ¬Ûðö# ¬ò3,èF<ÈVìÆ\&´ï—óDÿÙ/Á]¥ÝÖtü×mŽv$jà"¨Gºƒ§þãG~Ûôo2¬‡™=x–RÌeñ»|Ìrµ¨æ_Q/sˆçØkX?W/— œ¹ Yê+"úÁDfÝÁµ†¡PHÂUÑyJ§ã?¶á?²Èûx£®ð°Qýùö\Õ´Ø£¡ø#M7ÚQÿ±LíÅ~¾fÏÛa–6ããê;‚©,ƒz0yQvþ½;ˆü#Љ-F~"x?ð+wÔC]a>R?æ·(HüTC0ü¡ðò?ú_ÝÐïLĬ&«ZˆÂé¡1ôëþ¤+¾-xFFfl[ôCyÈJYÈy®âíÊðjW-ù_õžÜç¹ÛÊÂϸq_ÜPÓÈ6©¯*u«¬è›:±Ç*T‘_ª€÷E¶ÒücŠñ"Hýîc1Dí6ƒÀí3Ö+o¸ã&Ì« ?Ñ’N··™Ä×9¼Œf`,ª„~¨h{å÷a‘ÕLuô׈ø´hòzª²“‘’Zìfä è_Ò‰i°¬ßˆÌkSó¸ÝmF2§úôv9ÍÑÔÇ#=ÄÇ¿¢â)ÐÖÃìÛ0Ó äTa“ð…¬ýsa§zÖB¦ñ š$9~é¡Í¼à3ª¥øºò•ëIɨ zódŸ[UmùÚˆÿQ½Unú|Õ¢öã=x› —Úº¶‘Ï)å¯ßê1wuoªk0ñô¹Ë\§þã§Á=ÚŠÈé¾\L5ûê?ÊÑ#1%Ú«ætð¿ú‰~×I5fuX–Ѩ2âõ“Q9Û™ûꛑ_^ æ)ù§ß2™_ëá:3þ#¾ë»°}ö+ú_¥À[äEÅU4JÇ!GIý6ùÇxêÏc‡qþÇyÇ.ú'Úók-0Œªè¯òÑSë‰Ø(ãÊsx¨*Aú1„´×‚úwYŠùç…ˆQ9‘þ» ™)åF§Üëx•E M¡Ë?Rieèœ1®Üž?Ø}Ta5‚ÀG Ç–^ç]Iì'ÇÉ$b~HÛâç/ôá¢1xMDâ£yxxäe@[¦ƒ²Ï8&“ô$¶ÑI†ö4ܯ XïlÛNµÛXâ½0øn:6~Ö¶ÿâ'uVŸõ€Y¤'4*†¯òu»Ø>§4W£ KèÀ¥£ýµÁ-ôo'ÁU¹kQOpÂ|GFtÚ¬ *Ý:L¥}øSè‹ÓYoÔÎf k.×<%™e"Ìæô¿ºgd”~-ø?üê¿ èD éÞÞužÂ¶OŽEZJz•dåÑ_ÙÓj¶; ë[ð(“áÏ£„qþà9ð« x×ò«ŒhTš¨MºCÂÿqZdÂX?XKÿ)Ë¡£ÈÃOw\áFýGVý ìILúMÒõµTƒPy*|cj1™¨{1Gìj-Ô”ƒÀ¯:cõΫ°£•°{ãd:±&§ð±>BÔÃZ&Àl!ÞòûCˆ5ŸÏ\ϯÿaòw¸ü³ð1wËåòúX†d4‰õËbw®³³fDOŒ4jÕ$+ˆÓ‡ôæG]×ëk7ãIùL씩 ÇüŽ $"ÈÐK€-xL»ÿÕB~zK®C¿ûû¤¢€½E×^h‰ÔH‰Å_ û1v#©Aî ²Þ1ú&Á×ÖEº„Nu‘Å<ð´K(Lݱûýˆt ÒEð³JWZBÕ`Y”T>ø£‚j/÷iÙ x¯͹Ãn•g…vøïëjµ«`gJãÅn9^°¾ÕÍ®ðüM±ñ>`q­Èènâ¿èC~ÛaD9…»ÂFölÅÔvcŽZ VÕ\§RБ°%ýK>˜‡ÀÃî Ë:‰f`+ùGü±7Þ¹/úÝtøónè¯ú±3;ÿ˜ÊÞjÐå4“é@ÝôNÀÎ?:£Ä*mEwv·êÑ%~†Ç*k.G°–‰(óðÖu™ÿ±Ãu§œAu]ÊË53¿¶(dCú—Td¢®;\Ôò‘ñ}ÓÛœr”ת`^d)ü»ì¨Î3ñé”ëx³hc@Nÿânëf¬fÒåãSÁ´¦¯Ê[ðµ/øß¶Ô#^á¬ÕÊúØ4ã%\â.G[sЯ že®ê[9Ÿ´äŽ;#·šñ9>øõÌtKîVÕ9Ëù„ù©-_ú—”£L£3ŠÝM" 1SÓx¦’b~­üϯM ”üpÄD%û÷>ÕҿÿUuò»Ra#·~„éžø8ZغC^vÐs“D6^y—¦{¸™]b‰L"‰ØèwÃÖ¿¤¾®cE®’ƒt¹/úáeÕ·ËÞøHĹO˜q²ºÉ>3ÉɃ2›ýØŽõk ß›C¹aýöÀ‰Ìäj®¤ç_ ê5ÜéåŠSy]+ëŒäðÊÛx¦#¨“Ô]÷Æ.½$½CþQ¸?6ñï’ÚÖáxì˜ÍüäüÎO°{ö7{lØÓ9ØÛŒ¬ÿáäÝE G{B¬ÿ¸¡×â7›bîqïçÂOV@õ‚ÕP£ö|s xÖp¼Ÿô¦{Ë?ÜA†vGË~v¬Ëîßžþ¼#þc·Q йÐXnsgXÉ»sA•ñ“Ø!8ÿOËEÿ«èäT§¹¢¾ ZtL½"ÊÞÆŸ¥äJcÉQ>Š7Z® ÇÜnZÙW=ò•3pÅWÈS²úfrEìXÆšærŽùƒ‰ÍäÏ‚ ÷Íøì¹ªŒ‘™èæ÷[ç ók2àQ+Òcö yÀT¸»·Ô}^ÙƤ øó#ùdzäàM’º=þá÷i ½ïo+:Er\»~° ¼ÈŠŸš/ã…þ* úÝ](P39GÒ¥, È]V)€ŸÙNŒ?+hÏÿöÛz1äbbŠ{œ™n|²—áEýÇPµãäó‰˜óÑ×ü>óÓÚ¯ÀÚx¡jã¯GƯIýy@þQÃÑü*,øs£ÙI?ÙÈÈÉ|“f–F½GUæögFðœr̯ÝjŽ¡›{PÀ¦äŸÈ’:{Ý 4¿öŒã‰~væ01Æ3Ø¥ÄFgj]Ú¢/kV·Þbìy7ª“/ÌC%þü Ǽ>¾8Ù³|äG×ñ¦Ñ“”&FköÐB.T©ø+KÏÄÑ0Üo©“ôæì5%ƒ[ >]o6êÙqÐ…àZ¬–ˤA¾_WØ]Ð Ùƒ(¯&ù.ùÍ|û¾’Iï—èùÕJÄ$ÎT„üä8Oªd!èÛÒÿá‹å1­H@î@gð×Êÿü×TÚ„@ü‡ƒî»–ë<…íÓMí0óÏêeD}ú‘Ú5dg™_ë£o"'Y­% cÿ’‡èaÉ—òüy$£!=ôÜèrL¬”É™ÿ‘…ùƒ!k‘ï’ž«|Aå*Õ£þ£¼Cÿö]ä‡ñRLô¦ÛÈŸì^àuŽâZ­XWqœ¥weN5 »ILĆ^ÃòGÇÆþs`Tfüþ«Á~§ÄNQÎ8>¶}ÙÂW°‘RXÓ^Dè¸ë™/Â]¥Á€4’iC¼6ßgè_Þ(ûž^í&J²ûκc»¶ '$Î/¢V¢æ²­~tc¹ž(„ïéMÁ¾’#¿&ƒI ~•‘ D ½ŠL¬»XÑMÆ2Ç6«’ù~èSö{¥AÀAGD•Ž §°ºñ…ɃڱÃuXÙKœ·±Ä¸ß9Ÿc8î(—§à]óœIq;`׫4Z¢¶ðDÚ^dDvO”<Åðö´§b±ðÅò·cŸ5¹âãÈQâSEãä‚›uÔ—žO@Æ‚¿¼çÓ{]Ž'²‡u}‹ú92±ÿ~þã.Ù–Þc>çp!á^q] šÇ âî- Q Ÿ³ Dì0>üùÇZæk$»n)=v99\²'öî‡QÏÐŽnO“Ue#¶\äºl×£/ö@i³^½dÅ)ðQKñDw`ŒgQi1ÖšÕî£ÙîŠòêÖ=«1H¼×Ç€1G•çè$DÒ#^/ìÚuhÖë©Ŷì kQá#zu{k%ôKäWè…Ùî·®hª+hÝ´"°…‰yÛ¢%J主b»ðFCtäé$S È1T$v ÅÖ‹ã¢ù@ d0ÑÕîˆ X¼ 0ÉŸÈhJ£Œý"cuäÏ×{àx#×2u«$Ûìt•jŒíˆ•·í|Clí5#“ZKýà|c+õ=Bįné­ˆ*›c%ÃdÄÊ'Ãî?3«xpv÷XÅž µUÕbp»ór¯(Ä|ßà·©4?­Ùš­ƒ™›’ ¿¹Úz°ŠØ×yT.kœËÕ X;à1¶ò„¦5žR;›¬M+(¢°\à3µ°÷cñô»“‰Mþá`É;lñLb¾.d%6C•œýEáú &ÿ8èˆ-êÉw°#`l#¢·rC 3˜ŒahºÍ—+ò«¨qoóÝ{ü½‡a#˜S‰B7Qᅳ¨7!j.ÿñÅê–Uí íôV5ýAŽÚ•3ð)åÕ2êÏëÉý®óQ›! ¢ºZÜų”©•aÕrFBU‡Ü ývß0 Äî!vÛ<Ï•öcj‡f½'ÞúÌÝÙÓF6ËxãòÇè k÷o·ýG&]bþÇdk*g~U.³¨‰ÏüÁ‹tÁªfS~ärµÐ_­0¥ÚOVü“,h,_Q¹ÜuÄÿ»±µeš›ëÌ„£ûÕßů"j»é_²Y/(ÒŠþú«ËŽŽøÝÌ$\DUbØØô“ø‹üã%ìÄ™_¼k¬ é-ãÉÏ¢ŒhÆüc¶ž ”ê¬ÆX™›¢¬ÜªµÕÈ!Ô¤„9'Óˆ =(‚¿ é´vZ'± DÝ쥉qÛ¹?rAx‚äÛqô ”ÿ÷eo] ~‰ßÞ /¶‹ü¦­ _…Lj«ÎO÷" ?O®ôš,¤(±¯gË-c¸®ÔoKúæ‡ã(õ–qùoF*µ”R3V¿“x¿š²;CåU³Œrš1>]Sô,!¬øFdœã([À ån êT œ[À+~a‡kY{%þ#Š ôÄiDÕ?òç´ðd)Ôq޲?¸_ü‡Ï“ǼŸNÄ| ¯[>â ÛâŽr@ÑgÎÁñç´²"²aòälÄ{‚Q©ÞU×TÞt¸.˜è 6’PýÅs9Œ,?&±‚“ëÓ=ÿáFÞ^¾4r£ jˆþê"þ¦5ûÈL-sõ‚Ý–õð¥âaõ.h%qˆèÝ, Ô;er;ë­Éjë Èì)€'PÉì¦Ê~už%Ûé¿;Eçc椿Ê&”ë×7]Õ£úÑ;ÈzOu“\lˆQF÷1YÌd|÷Rê?ž=ŒÅ&ÿ(kEûÈJGÆÑ\ªä;‰îóa79ôß¹³ØÂwO‚BÖ#£©¨žï©#Ylî¤ÿ{~ûã°É‰œCX¯‰Ù…ùé}³k_Y åM0Ò‹Þ¿íÐÄU\nsÝÅ£3µéĽÈ?lmï$9Ó(l>¡ÏH8ú··‚?‚ÿ(†*©üùV&vD¤sýسÝÌì]ÀŠeÔ9Õµ^T-¶øÆ]±‚»7è¸n7cX}È?J]^]¾solmµˆÓÖ‚¸s*,Gâ?Ò;ãZ3ahâÐçk.¾h3üÇ9*—Ã,‡?d}%û°xþº“™í€¿6xCû >‘l·)±â9ùÔ¼g³¦0ÿã.YÖR+•U×yÉù•þíá­j=¶ [Õ©»Dä”Ö©9ç<>`hª•}æÿ__R=8Õufœä ¿Úƒÿða~mIæŸÛ• çuõí0 «É?âha«®¿KÌP›,ï#};¾Êžâ›>U+¬½FUÿQ ÿñû<ƒÎGKòÿltþOÅ3]Ü/[Ó9§~^öCm{_Ö¥þ£N(ùôØÇ¢;X“7k2z䑉ø‰©°Ò×°ŠýœB—ùE!m‹Ÿkb­¨„·ˆ vËã>߇Mls„Äfj À"¿"r® üê®ã0øU[¹DF³ o9ÿ1œ,æ XJ&ìbVµŽcîoìÀz¯Õº®}ð[½ª×&ÏêÊ:Wˆ-sa÷KyE‚ïM3ýŒs°Kº8–:|”-;8‹Ò!$ÐÞh‰ÉŽb—ûañó iGf°Í¨¤î`¯—©~áý¹ +žXÛÞx§QjÁâW)¨?/ßÁmŸò⌂çÈGž”¸5&“د`ía÷Z¢@èÿ¯þ“#nþÇV‡Sü%S8œˆX©[ WÙG&ôP]8Z[ÓPм}Øÿ7 ü+À¯ÜÉé¦`¶00hÿ’:zKi÷O̯ÁhÔÆnôdE°öOTb0“¶Äâ P7å¥~p.±qtò(O<×0¼H9#»\亜×#à?Æþí¢ƒÊrüÇ]òµ8ð[¨?÷¤sÕq¸ÖØä±ùƒá?êªg|Z}üÈbBAê5Þë¸'ÈÕÊò7TOŒÏ0Û[Ì-x·rè›nc]ã8G€7uaRª”ݹq1hÒ(®ú#¥úÛ?ƒèÞ&¿ƒÅ÷1P±‘Þ†>*#ýmÿq ¤>sJÜÔÄ´àÏe޹)+V z! ¿ê@ú'Næ*Æô„Íè-ë3·ãŠ)Á$ñnØçÞðçeÐOU€ho.öŸ_;—U6¨‡œíªx»7r±ë†þìø¨ûò$mÅÛG6ËÀ‚–QuñàÏÀš<Ð>צãa{Ô·w˜{4Ìàsš˜·™<莯. ÿá!+Iéª?OþJ'BkÀS1Fu’éÕQ³³:,JEð«ÖN˜­p+~øíænp²Ô¦@[m×Ü„£›#W£ŒèŠbN¡+}I$;œ{¤èêAó-;šhÖ¡6>S­ŠX…èß¾y"Y­GêÙV\«CB‹¼ †uá?ÞE¤—ëˆÿw/3?jŠëNÏô¨¸®ï¶‹hÚ1-£~Jo*Ú K¯É*§Á®êûô-äû´œøUkžö¯Ò†1—2æþE‘7É$¿Sá^3Œþ£³^«¾ýÕ,IÙ…'´´þXNÇÚ”Á›jŠÐU$æ#ÿ()èðC„Üœ(ä šÊ9Äчx‚V¡–šG®P¤ÝSæCCqÌ?õ½¢&Þ(œ:ÂïO&‚;O2uî¢ÆzΊùa?^ËF}™4ÄkóÞqýU°:÷ÿZrÛ¶Ä(vý‡/Zú ê<5“ª%39A¢Vè!©µßé±–ÍyR^°¯¬X°ä¬¼% 5Î7±ýk‰Å—b‡6r/¿’E½?âW1µ§Z1pþódê#àuRÀÀ "Š;`ÔWïð^h: =S8úMd=sxBSùóç½YNhx-Ÿ¸/¡+õE±‡§¯"W£OhzõÊ('s`™ÇÁŸ×%;G´€®2Q‰áƒãÏ8"À‰=0 ‚Ï´ÂøÁsvàªæs#yÃqÛó*6¢Áz…²aƒ?ÊfÏjhø¢7,äÊôÑËJ°P%ˆÚW`£‚Lì»;Š)“•úPù,èv˜ßLJ-vr%‰v7â?§âªYèîp¤ö«Gz\vÐ¥ÚV¢ì­(6.‚½G¯:ÍÜrwT¨>è¦PӞμ‹åƒÿøÎ§õ$ßÇ.³é÷Kt'Ò9J½dð£®êžñ‘޹ËMæµRÝ™î»7­OÖr3 TjéÊpž÷`Ÿ›¢{BDà:åjrå{x±(ÉھꞢ›y^Ub_'«4õç‡ÀìLs!ù‡ÃœÄµ‚/^Avg×Oû\Ëõ£û# gþlÊ™2›ù†¾„_èéÑ Eì0ÿù–³6¨:â?ª0r“ùlwWÖ¼DýùQó€ÅàåÀÆÍ¡Ïb~ò–µ²Œüä:Þ¤Ú@ú­×æîìk\Ríå^ã©™ÝiXÑ™Eæ8ûaów‘Û\¡ÊnŽþ¸•?`švr•û}5³­?ÒGã×/2?ÊžîIþ1Ù#mot˜ÉVvm}|R&«¤s½ó!þ¨0ý¯X&:¬®äIÉ?2’õµ…ÿÔŸ¯ûµàÿðk ð«…®3£SýÁõ]ض¡´k̺¢7ÅÍóç-t?ý†¾‹ú¸aœõ”™a}Á®¾ãA²ÓDj±Vk«%•wÑNÇ“Ek½t˜ö9M¯@伃µl[+¸R«®ûÉ© 8áyÇ4‰ÐuDɦuÖª‹m g@8jóÿüêöé¾X€%½¼Ç@åG¸‡âF¥ŸW}bø(°Ñëð¦:ŒXd,æit'ºƒß‹È.%üGȳY^9ŽËƒ2±¸ä‰ß‚ÿ† ÞN•êa´,©à®søóžì5¡1]OÂYüHþqö£%^ä:x"^§$¯£DWWÈnÖ7í`ÕÅä97°ÚÿÈŸGÓÞjeÈ.ÂoŒ`?Yè˜ÕŸœaøÕYÞ™ÏkÏ;æ¶ìk|xF[§"ŽsÃk…Å»»Ýíá8ós5òa¥“ƒø'–»„ªþ£,õ8nü‰Ê”—8\©#®'7`ÙŽ8¢1“Š`¯:á/Îòïãkr²F+õ”§4‘Ñ.|1úîc%ù{Í\¥žÔøiÙƒœÇáL?«AdX ªm‰ŽÍ¬fg»à,â™c~T8ºÑ¦¡~p!œÄBï±™FTÛH/Yï’‹ ƒôE´W {ZD¯‘÷ìi•zý`j«YßéÈÕ•üy¼ËA<ÕÑÜ“EƒðçñDKÎòI¢ü àW­É^ÂÃ/2Wâß*Ùóaù‹ùƒ¯Ð_Ù^ 2ÑÈþesôÌï¹B‘‚dëi%Se¸¾0±£<Œýu„¾¨RU"pwfè=4obõ|Ô<óUžø¾ÔR®äl{€_ =ptÓ’“N)ì Vš.I¨àî _›yå“Ñ9=¦þ<µ³>“ýÖS?˜é+Q@Q0B;•Ș㺸·Á2tÎð^â±dæk9^>àߵÔ¿šnÖDm;NÍ«±|ÍØè¼£*žƒ‡Ë­[0 ÕuE²‚_‡#Æ«Êó¿IÝWÌÒMÌü¨>x2_ú—Ü¥±&:Õ$x»y–f&´tð¦wD7­È?jHAϯ ^¦þã–´;ÞÕÄ$5Ž™Yœ¬I̺&Ùl#¿s‡ó#>)œµNÝÁ¿•_óFÏuLåÖ¢‹}ÿÈ¿ü~Íú[ÿöðZV¬¿÷ñQgæÔï3ÿ£®Øï_sÔàûåú\}ž/Œþã­ã°íîWðÕ9DLêšÿÒ~ˆÝ2‚|!ò‰Aa¬ÜŠ~Þî\œ¤ÜÕ8æÏÓoË>ÌD§'“ SˆÐ!b©µ!(Ga‡Öa·Ðoïnåën1'ò6'<‘økÙNÆ •þꃾL4ÃVJuç|ùè.þÉXj›¥}ÀŠÅa ¾±Ë†¡À¯’kóå^™’{û«È©v53Lï¼Q}êN:lMd"È1Æ9RÏÂÕN*šÚÌ ‘Öu2­„x´ì J¾¬þ•®bçówßuÁË-’3¨¬ý‡5óiÉÈãòd5øÅØp¸Ý°ý)yF»ž<«y<ÈÊ¢±x¾çr'ÜWpúÝRZ qMF„)¶ýÇQlkQ2–ì-žZo¤‘w…6ª)œ¥=О šý]t¾«ëzrîô;àWä øü– ÞŒhp:¬ÄH00?éb¡¾]MTü‰(rû´yþ)`׉m‚Nfé¯W–ùÜ M^ ?¾0Z‡ˆ©7 æ O¶…hêº#ƒåL?wÐq݃8|^Ÿn™bYsøBOŠoÄ É0æóÕt®Çð´“äãQ:Í‚“oeýD›å ÿèj——ùƒ‹A¦Js¾ëYôßc4b »?fDÿ_ûdܥޤ›9Mpi?±Ñ¦3?zà| X{üñ«Í|neø¡§œ›—Aú¡ä"{zõ,> ÷Ý6ú_ù ÝòRYÀ¯ƒÁ|Á_kÒvUÂ_œ×ƒøˆøç÷Ìk è¾ÑݱP[ *ÜÿÑ—\¢·ìÆü+ÌL¹Ž–¸.{1´tgDú˜O1GS§—–Œ¦2u•~d\-`‘îË€Ù —iÅ"» äÉÏUIîþ.°û}Ñ[Å¥~°)ù‡=aw(×[s›9Šê¼ghÎ|P6{’=¾åI)a4 Ôÿ*Ÿ¶P„ç9ï…f£–ê/{Q+™ÙÙV&•ž5¡¾€Æö9æZŽþ¼ÕüŒ'Žî_ͦÃÕ{3Pÿ+/p?” £@sË€|aâVrµrÌÚ* ZU }‘s9ò­Ø–ÅË;‡š«É?N_­†+Ä5N%çÜÎÿ³WñµÕÚD×½GKŽ‚÷ï}x m§V‘yç¨?¿G„ÃqÛÑW¿L“ÉúBð«3aZö ùG3rW°ç7˜ÄôP¯ .’L.™à?Š–AøÀÃóWÆ8M¥yP˜h²–<® ×< ›Ñc7É""t}Óh=´¦¢?OßJ,\WâåœÊË,l#\p]ªèr‰÷–፶ÅÏ51[üÅj‘‰&fƒì|F+Úœ•‡bñ÷ûoBמZ’ª€ Qî.ïÔ6¢1ˆO$ó´ûÖÖb™ýGu¬Êy,Æbt³¶õ¸/—éª÷Ÿëùê-A–j¾Ø»IÈ北}M¥¡lzMü½™œi+¾nžá@ =^µùî 8ÚMŸŸ†‡Hÿ1”ˆk/Qði›ãF¹sO0‘Ÿ.3¼ýÙŒ‡òú«€ÞH;̯ét»DµÇ2"‚øó|¬Q ¤Nÿ†—gÅPö¶DâÙÿtØ”œE“Ï+ŒÿØã¿=Ä“uÁ‚Û× 7>sŠ‘†·½úJ>Ô íìUlüi¼‰Ýów5hú4²Š Æ òí üG>æGÅÅåƒ1±û²ŸÇö¯ »ñ¢{{t¬JIøÑ(æ ÖŸŸF,s)¬y ËH ×9‡ ‰x‹Àñä 6pYʺ̦ûvz€ôçèËT¿šV\ôX¨|â?ÿÃö3•È6â33É?¢ˆaœµ“àŽeð‰ Èž¨Æ0ž(“²7­ƒS~‚Jô•ÚÀr “çÍåèËÃGÜæª}Ð[ý¶Ã‹Â ïáÇ]ÑŒf.³I¼˜°ZÙì¡*Òß°;võ.y‚ý¹<ˆªà;š«þœË±ø¹~Ô%e ä?f8<5î“ê¹1„·¬(-ùU»êo6Ûü’úóW°Ìm™ëNmbxT-¨À¼¿ßåáiéíºUÞÓ?ñ ¤7QÚW•™¾ ½Tv期´2²£Áfeê³ÁrûÂÊŸ É¸–ÔÜA‹·á$&–‘Q\üÇ{Çl‘‰;m4Hø<5@VVg̸pù=ØAo‘uÖD&ö·ŽXÞÔLàûtðçQLçå>ñÒ1º}Ç—ýµÁ“ÚñMæz4&º½ wš‘èŸ5ú d]k˜ÿÎÙ×¹Ñ_,è§•–¾7Ù]R˜­ì Ü]Œ†êók·ÿZðø5Óç¸î„XôHÿ»þCh'™{I/‹uáßÃû¸£6ìù.ÝC÷Ò¢jûÃtT~Žs<Ÿà¶_ɈF[jFi%´·b§Ìÿ¨*f‡±ÿÕPú—æÊeÁ6·‚]í /jUt_ÙLã?y.+‰ž®óðß¶š’þ€IDkr…Ä´u³( §c•ŽQÿá퟼E.èv˜S„FQ÷‚ùçE°E1Ô~¬ñ,0ŽhZÇÛ<†¹OÔŸ{V¥•ü3°ßÔúeWÃÆ…S PýLËš‰—;³™TÙçRŸÙØû(ô¿JÂ1ß¿ºלøížhèUY"͈ ®±Èf¡¾]ˆ'ýBFÿ19ÃÊ?âk´¨ÂNâ?슔Œ(Rm•Ó>8‘3dJ+ˆ–m¥ìLlílìs/:–¿‘7ÄýQÀº^%Õò‹›ò.;YKœþ£^³,¼@"ŠzÔ÷Þ¦² ;–´-Úxÿüè*¼eÇ`û—œu|&ß=ËÙïD4îcëÉ¿œ@>2‹™’ÉñyÆT#¯‚øŽ-²õЃðsQ*,'µ‚AÎã òü\8(Ð$»gK¼,sz±™±á+Z‚_%'ºO c1›þ»ïйaKkà Ä0,¹'Èz~züß\«±j“”=?ʃj‡ÇT4N¥Ê`”¢¨s6ñGÉ™à‹nÀ¥äÃ6ïÀ bïc‹Fœ“ÓàyX¯¦zdÑeå#Uv=8öYXؤp] È·ŽrÅ«ó;OÕ¾¦7Í}4ç>D&öüóa² g®‹%œáÏS£·7 ½Ôsò](¨^1%÷™›]žŒ^•Ǩøàº"ÙµžB•6'zœDÿ«ËÆf3™³4U$ùÑJ}7YðMMéwx‹’K™.b˜÷à|£¸J\²E6%ßèŸxN“M¸›±ÃÍòžù ÿ³È,Kþ‘­rj2OçúW³N+OTƵÐ/7“uäÂâ´0jÀDø?é¿›–êÁÀýwsýíùQµZjúµ—Uè'gG'§­˜‡¾Rß@þ?Œó9îÐOâ ½oãE2 Au_Ií›ð’Jj²¨è¡‡®Ûú¯›²¯;|ÿQs~Ct–§µúUÙÉX'O3oéý¯BǤGK)z}Ø1irŽRªWÞKL‘܇¾ëõß—åX™] þõñÿåë#}¢(ÁoF!F…]M¨ža m5Æc<Ôq¢ÿ¬pü@ñšÉ4®{øO ÞrÌ¡bR¸ž¬¸†<Æ4m(ñ¹Sfb«CF°¢¯r”1 7ROŠÇôJüfU"­ Ær¸ྥPÚHõ˜¿wxϯ·µð(Öó’ã@;üaM' ‹ØFRu϶»^eÁôæîŸD”¾–¬fùÇ+>mVƒ54‚oyDÁôŸ`7ƒVŒþ%¾äkȱaëKãçÊ£j¯Ž`÷гX &¨&²ö0â¾xèÃL,~“`òðçMåM#*Іêʤ~þøDV¢ã6ŠîPä]¶×›ü‚i‹Ëñ™£¸ZóþhôW…‚sG½"Xi-rS{þG^r®è¯rîxÓ¿dªYÃêK§Ããð½ßÐ5%Sïñ«=±Òõøü†.WYï6õç9àdò`ÅGâ?&Y¬W¯Á²_-‚ãÞÄ|ðŸt÷uš7Ùs\<ÇmôC¹Tjµ™ëŸÏ_Ñp¿ënìþl[)PŸ¦ EèIÛÃÊoo:€†(¼³±ùPå øàr`MíLª#ñÍ4#"}úV³çz`¡ƒkv!£ñ4¶¨5 KµY/}¹<6ÏZÉdÆ£4¾/Õ’O=NΔã.¦²RŸw´A•ÿò4¬“H=U:r¬"ä09è4܇Ù~¯Q hÎâLä b4.¸yFüG £,([î@¿\‡þ¿H„ú*@ë!™?ÎužÂöáþ#/Z«ÒTg\ó÷»Ñïî¥ûî4òØÚù0-wÊqH/ ïP=ø€$FM­¸¶O ϸ BÖ/H<Òâô‡2•}‰‰ââ3k¶ž¼ªÕ×WË"¨±7Ð%å²ÌÊþ‰yµFZ Q•k=†¬£"5¼j†…:Kþ1o’+|¦¯L*f‡´-~þLŸF6ÜŸº…õDÞ°ÍÞXèXìø[…”æ×ÁŠuCÑ¿ä‰c0êÀXx [tüñÄZçßbäEWt‹áþªU«Bì_²F/ˆ%¯Nú!üefðµüpvwÙåkžÈ¨¯Öà=ÖpÜÃÐÚ®£è"ÖôwPíŒv]*âá‘üë#øóXXþ.ünzÐéý-ÏSÖ‰åNR¼ì¡ÿñŒŸuäkI¬øÆ{ðLþk§éߌ'ŒAW˜gw|Øxu ûæ©F1ÿ£7Ñ~+-U QàÏÇPuo+‡gªâd‰KÈí2‰·LÑî‹; þ­!>ñ²ê Ö]½ÅÆ{쿚O¥FrjöŽá…r¢eE6Ó’\j¢‘P´ýí*G• ñhOQýuÆs¡Âb u‡uÍ&àuóé.•…þ%‹Q;½F-¶‹Î_Íà?š“Ëu@{V…ì.U üª$ók‡á‰êU÷&Ÿhϓԫ >(ó£Q[qnõo¨oa£–ßiE Ó©Œwß@Çl¬xV.q]Ü=Žçú1rF»ŽRšUèQU¦ƒå.òwvÙˆÙçµÑŸ¶®2/pï xù;àW¨ôOªÆ‚Q Tž”ùµ/@Âëq}GÑ81•—Ñœ9©š)ÄN4ÔOÁÂj39p7Wf UÒJEwd§ô9Ë*ù—Ë»ð+wí ‘PSî¶øÃòùÇpz¿'¥O“\«ˆUÐéî<ÆüÁäÖFµÊÊÉ<®&èÒª£hºwÔ"SË(ãrú?þ"¶¶ë×ÇD¡ÇÔßů”¶U+®ïÔë“œÅÆ:«=ø~µ>ŽÚ¿¸aìßþÐqØð/˜ù‘N<Ñ£j·WÄ@‡ÎÇåDÇ0âWíõ¨Øá2ygdã¨N?´"úÙ~ûÛÁ¯¶Éò¡¬L€Ž8¥hèoáèG¤l©ŽpÜ äHr…X”£²]4‡Ë”bÔ¯û_¾úé+Ev|‘Õ[€ERàÕ•°û£á¼çõ{aÿã0ÁFÐ÷­´ëJýiÁ äë¹·Ë‚$DÇSt%JN vOT˜Xꈷ» û= N~¥ž*„çà?‚ËvÁ›¡~ÙL1ЪxÍ7àçØßRþþ!"G>]tùcþ¡k§´#2¶:`ØÝ €«Åä ì ^C­#“ëLÛê>Æò$yÂɷ䊽”o„¬þ*™þ»{ðbv\¿*nT1ºfÄW»á þc0ñ­©Ê€kÙ>)ÌÔÙ<ØúÁÍŽz)ˆ¤ ç•®Îqγ9ÙlÊŽÊãϧŸGJggòœ`9¾ pùà*ܨ¬°»³Ï„?·;Üü÷Z¬ÂsŸÂƒ ¡æd1³IÖRYÑÊl‰?›G/üôP(œÀrà=š(üG*þ¦WÉåe½µÁܽõÈŠ†Á¸L–âÔ§ê#-VGú;ç;ÍYç2J*iYæ<²˜Y¬8”£ §.b“wпä>wÕ-uNŽ6Š˜¹PHíA;€L£ Z²øë¬º€ºôAàWÕÐ,çáLoã™ âY_~s¯ÔÜÅw®FK*ºÌŒ²ø† ¯–&&8–'Šà¢èm§Ã(UƒI70»â'îÓ~†S)²o]þcšvY<–ˆDë hkda²Éøñä\ÕÀÖ [ «[é_ÙrWº³9Nr»TðéX±%*ñÔ†­ÃGÀµûy•ý•]ë÷¯ÿ"¢CLâúî×»¡ûZufb}–U俲k¹_;ÊQ?¸F¿¨Ÿbª^þ‹ªµãQïjTR$3‹Oúò$M^’Ñ_+†X9ýû‡Ö{“,G¿; ËRŽ–´AúÙVa¨VL£ Ê¡ß'øïšqƆˆ#øýþ¼ÀM£ˆP/T8[¸ΠÕx þµT11:ø%~{7­.’ ë .˱ÕɈ§Óðu¼Ó­°§y‰}Ÿ£"h.Cªw8ö9îr<>ØÉ»ØÑyØÓñäA‹–ÏýÀj§Rv‡ù f‘Œ#!âWmô6ÄÍŹ³ïÀÆXûTèœ ,]ªiÏq6òóhžæáõöÑm=íh‘~î3ÇíLªfÂW”ã¸,êZçÏ…ÿXÆ1Fåóo2†?ñwÓ8«]Œ¨2œ8õk‰@_ëhUDjþõ+|QTp+ñG™ð•·ˆ\÷àÍç‹ðͱÍ]`©:r×à´=© ´Ì¿_Îp4¦§æføŠAYT2ŽÑì²;>w4ÌäoE£õnsAØ5ú»ÛݯÜÙ]P¸Q"‚+Ƚ“Go'Ëãù“Áö' ¸N¦å¦õmvzÉ.ÇTB#š”ÂTè‹ÁœT,Ö$ð©d lAëËë©†Š†?sEZDÿ’÷ôÎxG5âJ”N™\‘ ~õþ¤´ù »޼â)þ®WÊŽEi£~Ûáe½,;òd•rø4wü‡ƒØ{‡ÉŒUsõ %0ÂÎvT—#ÒÝDåP$üÌò§•äR>þ·õ*Éð0M·¸ÿ‡áæ;Alæƒ5Âÿ$¢wS 2†‰ôƒ²°‹wášàe:«;°Cmà¨+«jò–ë¢t4Ó|‚ Qx¶:Q›^ÏpÒï©+®<ðå‡èREðO8‹ú0Ûè›[Þ\Í5Z ¢w”³ØZ6zÏ­p\Ñ_QO{Žã±Ë1èzX·¨õëÿÙŒ':NÖpk²ÕL—à˜¼Uõp8$:¢iå–vEÛ¿þë®U~(CKqWy«Ø2‘ºcÆtV£gI*ËÁ›dm7擼A·Î'š™ãÙKÄ´Øò²êòWµµâœ“_ÒMÏXe棳ðæ¯QÜ Ë“Â¹Õ¹×JÇrFí¤3JæîÎ3ß“?–ˈÚ«oÌ ¨àÿµÓþ«©-ÑÚ»ÎL -Ëßî_RA{Ný`æd˜‘ápÜtt×WÁ~\ÑÁª ÓÁ|åy!LÊÓðÉKÄM}”Vÿqýî-:¤äÓ ¸vš…÷飰Y«d!xï¶Fr9Q.c~Ôm¼~Ô9±ùUBÙ?±zµ¡âº£­X˜D]Å”mé>‰ùø à;od&ô»ýdA12[‹!Fˆhk>£¦œ‡UºúÿwÐUdY.¹u«ÜÝÝwwwwhÜiÜ]ww $XpÁ‚î.A‚ó•^„d’Ì¿f¦Y3„@î»u«êÈÞûœÃÊ`½W’3 S>ÎóŽLìµh)ÂÇ]•Ëø«TîûK/$Ûª†Õï‹Eµg5Ç‘WŒ4x»Çb(ŸÙØ¢…W‘ØI«®ÖŒ_¾ØtV"Óÿ*{wÆOÙª>‰Q´…«ØÏ}ý²]+V†œ¤µ¼õÁq¼ÉqFsõ°RÍñÐI…¢j;´¢ZROÁû]öµòç+îWLÆŸM(ÖпdØS69’S膗‰ÿõ“èó@(þc±Ò^Ÿ/ŽiQý$Àh(œªqF¶þÊæ²Ë–d—©?I5úWr®Åð6öôÚªÆ<=áoçXDëET’á êSLÞÂy¢žò‚O(d¾Æ–êV1ó8ÕzvçØBØû¨ÅÊAo”–ñçoý¯ê¢ÿppj Àø§¡#^„=·ð”š9wð–s b3­+Äßmèv8ü*ÙÉrŸð?Œ—Aª¼ì3|¦æ^zÂaÕ `ä_&ùÂ5bÚ4t¼l•Ásô6×HúMÁ¤Ã«®…ûŸµßÅioÓÆ»ËõE4¢ë»<¯ƒAÏ–S ºfº›™EÖgšÅbúB]@…ÊXÞ6ß™voÛfT»3&¼È <ð êÙËÉéäÕyD Êè/µ1xS "ÅþÔ,¥U¥ŸùZö«d1îæ:–ÜÿëLÿÉ×ôpÃ,® ÌÅ-l¦D_pƒx‰,:èNÿq^Ý®ßYma"ã&Õˆ½ðµac:’m5²ª8F9n‘•”³öIÅÑvd"§û™¸í«ðäÉî@ýG.¹Ýy<ÿ¯/RP?¨[µÈÃÃcTÃú¸LêøóZN=3ýÛ+ñt=„??Iÿ«#Ú9¦â ëCý¾Šu{®‚f_ú'ö ÿÕ!‘^<Ò3â?ª{~C]$È7j݉÷ˆx†ÌZN‡ÓZÚKüÇ8ð«ÜhYKFÿh¨ŽT›é»ñC6Ã[“ˆ¡¨œ CùR_ELæ&üùÑUÄÐûÙAX_fÓ]õD`%š<0ÃH*mÄj¼÷YêØÂâ a·ð ÅÅû°q~¿ršþW/E:t}i°é•‰jb`çñdÖ"Bô„]n¼#Ù¿‹±2ÜùQÓµæÄ”-±øwxZ]°Ã™ÉF¢ jL„}…ßI^âzÌ$ç,S7ʆé?ž’Pk>7”o/ö\CnE¦U\­Š1“ÈõXØH~meÇ üGañQ;â¼¾À/JÑ?Q!ŸúA.U¬Á•%¹‹¥ð12áÉ>`‹÷ `“†Àþ_ÉñLkBñnJ½·¸Œ…oL&Ÿâš%d'ÖoÏÉ$óJ‰—wó¿ÏÜ£ÜýÙd_9‘eº‹–"ÄÓØXk#jp"Ù`tçãNwâ#é§ä'‹P;<¤#ƒyIf'rÞ ¾¥Á0¬€ž‰5Ïl43C¬×_sGVÀ¿mÃÇl%‡ô7–ËÄô/Ù+W2]b­™ üý>ÙMSªÚ¡¿Ê$Mº¥O”iåxžª÷AT2ö>ÑZ²£Øýl¨šè++ö>…¹Þ„òßWÔÏ´AX0¦~]ÏÌ.aÖð4äÁÛõè[áχ‚OŸ#y#Àü<ÒÃïß^Z½+®ã?ÒÀq§–K±›£Ñ­îç9EýBy;5Ï1OuJL —ÿx¬Ù*Nx²·`U ±ü©ˆö_Ò…$7Ê”+Øy7vêIàNätY¬Ó¨aqò~Êcµ6úáKØòFð&p¹¶Ø_w|€'þÌ:„GÔUÌÄlÍ[ÞÐ]ÉsmW(çX[íÍÔè·XÀ© “°iE<ø—dGŒ»zášÊ.ûð¼&ÿ˜ft Åx)åõEŸœ­3Ñ«Å>fò¦ÏAŸ9Š9%‘cGlÅ zŒ\oxð5ndpÓñ uŒz -fˆggú«VxÉ’Tˆ¯Ã#yãiÂó\ÀfÖs™fŸvº4õv€‘üÜf˜{Ô´™ô²#ÄzÓ´¨äkõYá {XŽ¦ê½±n:ÜöZÐõ5fJªê®ÀP4g"îü]yjÛáIJÂF´4ü™óôýµàWð¶MéK++SÒÉÖ‹úóÌDà­¬é޲xŽ¿¨ØØÂî’ƒ\]§"q¶üˆ‡Ÿ"ÿ¨)žÃD]5>cà5è—#ÂèæÚQ[·”üÃ×\Û½K^á¹I–÷'ùÅe®¥± Œ.ë‹Ë*ÓÕ ´2-OÓ.‘ZúßzðoABssSÈì¢)UÉ©™@V‡j¿tÍÅü­Û m Ùm3‰¥˜_Ñ7Ÿäô§¨Œ^ãôÏÕõúI1¤ )þM1ȪŽRw“¢n“¢:V;ΣßMOÿÄd!í­1Ô=Sø!ìîÓå‰äžê¡½%Aïùâël ùƒœO–Jì˜Ðù§È}^qõ© ÿ‘]¯£ è¡÷Xi‚ÿXG úQæ×®‹ÔrþJuøs ÓûP$30ƒn"}C,ô¼ ºÐG„« þqWµ>Ø–¥(£¦ñfbºÓaµ“vY 2Ú0/¼ ^¿xˆŽ¢Á>ðOµ˜—2ž7Gì¸éÐûEÄÊ×õsĶ×ÈIŸ_}DÙñ©uw=){Š-Ïã5ÜxmU…]Sq…7ü‘unØøóJ"z¸÷æ¢òIÄDÇ¢gDySKmg7;ȚɟD÷¹ñ*þb¨S c“^F³R«.³:.[ÿÊ ¯©‚èdc?É*®ðßÛÁÙ<àꯉzæßj!~ÝGe—Zo{¯Ý •ëjŠ¿Ý@¬y\x¬Šmòb·ó±Ì'X{6<šH¤ŸþµDßsÑ…ì«x—?Fæ ž,7¸_zt 1ðç_˜Ê•˜èw8ïÿ`ÞÙ±¼ei‰¢²ßÕ¡øÙÈœ@w:~yÀ.<%²o„Òö5 ÿ8Vl,;?çr5”Îêz½tæ. å_ÖÁ¤[JŸÝ At§-ÆŒ;ôy,»ïG7Å¢ävoIþÆG¢ªv®ç¡œÕž¡Ì>A”ÀÌ Q̯“õ9°óÀ¯öZ±;é€u}ðsÿߺö+`€ÓQH—•3°øÙD *½Ú\H_× Ü_n¢¦ô4S8Z¡ºªF•d]êUǪ>>1åÊïäKs—ºÎ(àqGP-,¤6ì~mð¢ºG¿ zðÌ⽿&.š)Q»Ñ+r}ÍöÑ à#ýKÖ1E*§õY^²ÚQ¥ø—9×|ò\¬èÁýÖ‚tûµòþ÷ ê|úþúœhj®;ÿˆ­>R]4w­óÏ/©ötÀÇJæÖîi>ªT#§°èŽ7ÿ¾6ž1CȼåþjRâðä" XÓT-ü^¿®Êþý¦Öë² O1«Ÿ ž£è¯^p×&/QލºXçGÕ¦ßýdý"<¯ÏOM¢ó¢ Ñ ±X^ØoÞÊW°ôï©pÏ¢ º…0¾N®oÔcÇÄ”g‰ðí "î¶&}í~µo†%‹ÁÈÿ€ Ê$â9ïT‹)Ï™uuy,ì}*¹•L¦*>x –bJƒw?5ùŸ8ƒ?Ñé¿›,œ·jÍ`xaÁ£'À(Øéè0)Yá.ͯÃÃí? |™ùƒ…ÃÔ_=U¼Ô$ :® `°÷‚ì»ûÛ~»ƒ÷jäR[À&Oà12cï'c[ò¢n*~µŠZÄÛ{±õ;X¿ÓÛ]C¬7Ts¡Š´*ùÌð0O9ÝÆ(º ó“6ÞÒ'#­=•Ožƒo°½Fr§DðÔóñIcÁá,mv°5½>÷à]»DÔ¾R¾!Úˆ-Êüé¨Q‹9:² ß=‰ÿ˜C“Dì8ö~-;|Ž?bn q$÷9ÙŒ;ÙÙ=ôWÓéŸ8þD'Dz.€•>%Oâé.ãZƒ¼'§™Çuבeƒð”>ê1êhínþ]Èx ŠÊÔ¾5{у1ùìtFú ~²Zâ?†ÓW륙 f¾LŠw*Í9~½œ7dµrÿSA×ÝLE—¶3ÔíwÀ®—¶†’ .Ei;üÊÓRÀŸ6ZGÑP5@[Š“¹~5„ç&‡¬Wî¨Ò_ò$U ê[ï•ZöôŽì jõ-/ÓßÜMÿÄ]T´¿°,k;ýFV€_E·Òš?‰²NcíWˆ™â…XæôwÕÝúyñ9~âÇ{â¬9ß1À:ÃqVZV-âXéØ_ÆÚÿ(HßÇQ(ïi>[Èà;3K!ºØé¼âÿÞ9ÔÕðÒ¿>OÐÇ'³óO¿¾±ß˪Ô¤ÚV­²^J÷˜õŽùQ´;šJëø‘ôYÕ¿Àlr“þ‚¾+ÔT¢óqA½†V Rûü¨ _Ù"ja7«Rëß‚Ùs57k±8*jònÖÔuÌÿêŠëíÖ_á7ì9OM°ÓE±6íäâ&‘ø)8ßC¢,ººÞL¤šø¯úçß%Óèi‰¾°¥Øèû ;l+GL=üÊÐ'êÞÞˆ,"üÚœ÷ÊG®ç°p!Ì!×±Rsª×÷¸°*¾ØÛ©XÒåÄ.ÒØnþ±IkHÎÝôå-–=U‚ê_„ÝÌ‹¢óÔždx»ë‰ÿøˆÕn&ÿñR¹®`W»ñ¹V ]dSа(nOð½9`.·@Ãqõ^ø+s‘ôܸIwó<°ÓyÁjÉcð—A Ú¢ßÝb½Ú0òpX‡ù…ƒi˜ˆÖÖÚj³yUkqüÇEð–’tôR â>¶neŠõ÷jpE°ŸV…9@&U ûmÏŒÍÍø­à9UÀðÿp´ƒ®DÇ)¸Ô¨¯ü`gÖ‘,†9 ®ß­"híG}Ïp#£˜i‘ÇéÕÒü[Ž5ýé/•ˆ^ëQ;fVÆ;ó>,SCªTî ˆv'›*!‹é_RŽúã<§“ñªðç­A‹˜ß¨;NžqÓ܉ÿȃŠÕŽº,“ßW`§ à…ë“›%Dw[‚_š¨}œþÊ…ýÏXT³€1U0 ÇLc95à¡_2OÄ¿ÕY|*@¦2¿6ø—ÌNø™ˆù•¶š7Õß´wª¢îëCý¾®öÕW3ó"65Ê% /=¦¾[­&¤—IV* ê´°T¢¡.§“„ugÞ*GÔÌØÐ-œ[vƒëª‹í_K•…'Ùá ªÓnp³Éâ½°;y7f…¨ÿ8üü©¨ZZON~–þ(‡ù™üJâ‡m¿¦/Ñ_¡¿ìŠmëw;÷Ŧ·i<2±K¡ø¥äãÄ+2„d )åSüG)¼f𬰉e°£“pÈñ‰Éá‚>ÏÄkM1NèÚoþ£œ6…\7ŸQ†Ø“îrÅ;Œ”xŸfU0˜™Ô2TÂ:W#r^à?*€_uϹ'Q“’ÿhª%¿+Ò½‹Øù$1À=ôj~ò˜Òfó+5ÝàÜX#ŸyëV°ø.ø™°Ê“¹ÛŸÔ¹ÁžgZs²Ò[FBY¿0dåýÛ=Ì&t”_I%Dqä^u9±÷Ñ_m¡2':•,?¸þ]ò™}¾!ò™RBãyðåÉfHÿ1Õì`Ž“­ÍŸØûìÔbo°†“-­D1ûRN"[è.¿¹£ám%›‹Î{\Fé¤ÚsFË;àWÉf"‰QÝô¥ûGêún›W@ŠÊPkñŠúózô_'Þ§FÞÞ|#ùǼG+™Àå\orN{OÏf&~¨ÅÜÇðÙ˜hõšü#¥ã=nïZšµ½ÔE&Ž2OSÕ8— ím4Žü£µóüª¨íá?âùT¦Ïp‘DÞ¢b£*þþʚt¿ú‰ÿ¨bEw<‚?_mí·*0Ç<ºG~Ãj´Y >‹MNÿqZÝ6õÿpNÖGx³ÚHú_5Æ7®1£:úX9à?6 ñªd]b~m>+ú]WóïÐ#±Þ½ú«èÿ“úó$êzµŸód¢R?~Œë¼1Á¾(¦~gþù>òúúË€w•.Úi¬ÚCº¢„C[ Øb¨3ô5"5±stìçFzèíPG©ñìÊM‘–^¹u´LÎ]ûÁ0þp[[H¾éALè >RLüEþQ‹úÁæ ‘¾¢=oz«ö¿ê‡r¥þ„hÒ ›TÛY5LOô»{ñ&à*¿ åþNýŒJ» úíÜúÝû|ŸzÞí ñxâúÉpñíÐçÇÏx‰úꥨùç Û·ýÕKð+7òzøØèF5ð€K ;ëà&ãO¢áÎÿ«U ¿(‹ß8O´*±ü õð†éy»÷ã1W‚Ë\"ZÜMžôˆn‡9~«Åþuµ/•Cj|¼šìGmV5ÑCµ[ZA”~Ì®5±Þ-º¤Øê«m0IötñþFJ]ßøk‰ ¿§W+èéQd"¿Èm^ ÞT”*Äsà(˘é4V÷Å’µc–yK¼h[îM4ð5“û>ÿ1Oé ~u›X`ùFx˜ñðÌ4$š. ›®ÈâüÝ,ó^y•nîë8Ñuìt"+e^ZHüªž6DT3’ú`wKó3½É“à ‘qøåªTxÉ¢fXþ²L)©‰r¨«Ÿ–àÙbEˆ§»³öE¼#O.H´~Leþܶ¿OÁ³v™–µzìÍ–=YªÝÑgÐ9;uű Œï¨>‚ú«Ä,^œ_9üÇ“dz‘¹+ÿ*žuô0QS¸ž&ÃÞ§Bo>Z-7ã¼6:ØzÕÅ{ýs<ÿkÑ«7ÎS>ê…Ú²“©:æ3Ÿ!A=ÉY£ç(¤šÊ^h l…ØvîR#TPº«ÛQA —oŒŽd!ÍD4æ–ß§bã-zÝæAr…ÄTek޾t„N¾dÑj%ÜWÀëÈÄAüÇJåŠö†¬ô÷ ªYÆX$²qneé2RŽ:¼K(œ®Rå=Œ«ŽI?÷ÕDþÙ¬Nhã’ ß½™†ÅÏ¿úSíNçg£“qL6?ŒMð¥àà[¢P>lަ_Õ6ºa½¶žáݘËÿÃLaJP `­Û…7|æ§ÿ¸ŠçøÕhâ•mD7^f~Çz÷ö€ÍßDýGv«®c’ã z® Öz ¥p3úïÎ6Ú~\ì%:lÇ^bIÐü_ú:7ý¯u«ñÀþ]üª¼ú„ùQnZ1ú—ÜÐt]QR=xTó×>ªi#Y?˜J]¥/ñQüÄ$ºœ«{R¯TUý®éDt‘K¯nç¦àxO[‡rÃlÀ’d¥Åµ¨všt8õõÁÍ«G0ÿ¨I%Ö%øsO´ºMÈ`mÎu*xL\È^|·9Óa+ ˜ê&ŠD(ÿ( oÕ¿ §ýN5Þ¬ÒUþ—,t2èt'ô1‰á?|ñ›wDYQ(Ø;ü ÿñ§GŠFσ0G~ìk=9A t;vïŒ%Øp¢ÄÎLÍP±3ZÖpV®ÕægÊ€±>%ÆwÁ|ÙñA©yK_gˆÀ×ãIÏÁÕEí'®ëÕÕ°8y?嬚¯¶‰Ušòs‰ØA{v¸’ìåêßÊðÈWÉfã?ÀlعÍ(°FK?Ê¥–VËë97è—Ÿá¾–æWf7ð;â•ïbÛ`÷zÁ¢t#?˜MÕÁPüÇ"¥·>]ÜÂ.…?OHJâ fºc‹óc1ç³F!¬ÿd*¦_aÛ–ã;×ð9#YÙUOª% qŽuµð¥ñÙ—ìšpéV>ßH~UÜÌ~5 ¬=¿¹kÝÈœ ÆžÂÿqÐfHŒÞbYˆõ&hoбW5Ê’…qž ×0”ìãþd=ŠØ#ètX'°Å©?Ÿ…¶!“Ìý@ã*ã_ÇBÛlůZe¢“ýäo5©i\ƒn¯n&s¢è xíÐg«¾£ª¦fks3Þ(6Ÿô‹ê&à?>kc‚­—_ЦËxµÅ¨–fÑ÷ÝÇ»ã:ÑjõçGÈF›nôå}@f8ŠÝŸóÆò·çœ÷¸¦2@ÝÅÉ#ÓAþTUÔ0ãs»1?©¿{ÃUD È?º[M&cHÌ„¿mT²oGQðŠjÍbòkþ‰{•KÚ[8»c¼IÌ‹b°³ªáÌûhKF´…zI_k6ú«ËÖ7&Ào¢~07þÓi ®<Þp³((F9¯·œú'ü‡àùd¬–Oõ¸² LEú㎥kÕ¦—Ï¡f°(Ö9|¨•‰%ñð†ù݉7öá4ÙGJc›Óœ£~ð*oÂtž¹•`žGÍVäÓ馳—cÔ6r,£~0‡#š5U¾¢KJvºo.7ïƒõÞ[Á>:ÂGºéã<ÊÿøÉÕCAæ5ÄRóÓAñßûЂê59³¢ªëÍõØzE¹ ¾œêóÚSP±‘ZVªÃôU"+ ð‚~’úìjT´¼9ñ™Ñï†oKƒ~àm+wfþc–¹%Ž©EÈ?ú3@#SqÑC¡+ïF'ˆ©úkªû.c“:ƒ#Ô…?o‚þú:Øæb}=é71B´‹Ðü²ú<=%YK bÀíüÂJ¡Œš p“ »Æ"Š®—Tua!CWzF‘DKLn|³™{!8‘Ý;|ü¹*÷ ogšëÔ8n7H«;^}À3b'k™Š:Ìh`ÃÅÁìïðÌ»bë·‚@yaaŸÃ:äPÃòIþè¯b²«ä•ÉLò –d^k@e€Ùu’¥À¯v‚ÜM‚³¿‡Ï[Lä\U$Ó}/ÐùUòøôÅ-¿Yf%^¤»{Œ2é=Õçë÷©ukHåt_ÖîÆÄD%ñ[×Bñ«”Fúrq ?“X[àisÕCáuæ€ðصեÙå5ù«ò6>k.ç¹–«ŸÁpÿ%ijS‰ùµö<Ý"Xû]Øð3DTèãM>Àp¢§ ´ŠÀŸ—Ñ_‹ZCáä!Û’Y\ÕñbFˆõ:PþGi _VœŒÿIµœ_=`Ãê{ 7¦&}:Œ6²+dcÙþ€ºÞyt|ñžûÚL—ëÂ~‘§/t>l6¢bnʦ¼ðñ•°ôµ™Â}o¤S÷ÿ±oºß¸©ßamñ…¼ï,9È4 «ŒÃ䣨i'K˜:ú«T0 K©‰{Èä&ݺNÈÖ²«|€?]CÎÕÿáëÜ^Me¤zýUwò±¨¹Z‰òFZt¶í,´k'©?wy*~Õ fzƒyž®…åȔዢsÍyÈ#œëíQNjÐ<çž&7ÓQÑ‚ú-àßó‚SyÓŸË:´”þí¯Á×ÃÆ§À>³œŽÿ¨.§Ã›fÜçלú‡Ä¶µÉàöÉr"¹|hfq4 oIeø÷Rðèþü¯¡õözº’Ý‚é²,ÝÔòÿZô¿úûîêôwÑïúŠþÄJC¸#^bYÀñ7™L#ú'Ž2Oе=Ÿc‰cõç5a¸®Z•¬LGw3?Ù݇auÚ0Ù'Ž8é¼âÿÞÉÔ\Å?>Qcþà¿ë?j1(£¶L«ÂüÁïjNû*øÕ:º»è±4=’ü¹ =’w-b@A`.믴íhºž;³ˆ'òë5µ?œ÷3"§õA[Z Þ¾žè6Cÿ«‚ôOœ@7Voò…ÒF&WDd¥®(Ö&ê`.Às4»©‚ÿh@ÿ_"º`%?Ð_iFOÑJÄ`Ã^9§¾üªÉI¬à#HPz0MøÚDº·È¿.ÐEò‰!£ÜßWÝ¡¸Àß{ ÖúŒeÝF^4‘*‹Áp«Œò;èP}Ö7àö‘Û ¿¬ÙýJâßp½Ò¢˜w±$(s\¢êÑœ§gQ‚Šº2ô#y¢ Wÿïû²¿óDqWãiåv²™x4¿h×H¬‚%¸Îg´çyÂ4²<Ïß'µE|=´7£ˆZLO¾— ~#3{pGV˜,æ&šƒ Æ%øT¨µÿëÔÅhAåý ÿ±€þ%Ä*Ë—ÀÂDÃk ›@µÌxÐÇÔב÷B-t4+œ´=÷d,©êŽZœ×Ü\ë)ŠÃ锄í^ÍiÝf{ÑX=†‘­@7‹•Td¥T óØî?ø¼"dMá®Ë*øÕ!ÖëÂüL“ÎA•ÈI²”uù‡Õ~+È?S»Qúlý°“¹‚Üò§| _QƒóYhÜ á?ÞÂkõçxÇU"xd|Bi»¼é;þ㼕ӡ ßíi .¤5ú«h ÖaïWÃ)?Æ?¿ÖûyØ÷¶:•8_ÈÈÏýá-V‡äsŒÙ̬D¤ÿ‰Þ„ÉñS¬YæN¾mÓŸ² þá&¾k"'ÔMöwìeþ«§ SÏñœŒä3ûÒÛ¤™\ló}rÓ¹÷0ý¯¦ÁTA?5Úª‚uežRF0¶pûzæR )‚àW”3ÚbûiMgæ1æÃŸ'å¼ÞSÕ8Ï;–ë]EÏõ‹ÔŸï6Ýá0’ðýChî–âMë鴯 ¢›óŽ”SëéwÉ?ûœ”UÄ;c»™žúA{þ¹;ùQwêgS£ñ¾HåDü‡Jþ¡àWµèÐ~eP`þqÿq^ôdwý‰IN‰f,GofÏ7¤û ôĹ­šŽ9Ž'Ô»de~íyº®T±zÁŒ<íx-v 1i+3ËXâÐ?Ïï¿ù[ntáõ'£Ãü»øUjõšEÛ¦åÓ‹2-`MuŠvJ{«}¢þ<ºØŸ "×—Wmƒÿˆ{þ‰:åúUm·:\ÍFeCI‘HÒ»DÒ(zotC®pš}‰»rÀ¢ìWÛkvýZoªy*ƒ›×‹ þªŽº„|ó<1·7þ£wü¹ [㧈ìn‡Érž£ßM®÷ˆÀ¥&ÓÏ¡¿ê¾ð$±÷2ú‘¯ ÿXGd{ ¯ò 7ýªîÁòÇÏÃ]ï³ò•§ÓƯžYáeêCëøµ½Øù*X• àó‰ûç öx+þÆû†ü€iZ3Pµ2dUw±çI±–qÑ8}ÃÚå9/ÞŒÚ=ì#¶êÅÃì€óB¹¬Æ3ÒÈC°E ÈZ¢âi›d€e¸ÐLÌÕÕ<‡ÉäV³÷AFñ]Ûr[ü¹¸ZSgÎ ºþøžóœX%ª83aÁüÀkzê>úìR üK˜Œž¼ëŸÅ1‘Uç†â?Ü•Îô˱ñ«± ).`1“Xo6õ3‰@/ríÕˆÔíy݇å}´hÓˆémŽjW=[«¹8ß¡lµø•­ ¨£½‹v_³“³¿‹}΋-œI”›íTNüÇ 8œ7xàõð¾ˆÇK ÄâëMÔ”€L¼õqgÈV ÅZïàϷзÊËÌD—)O>­ ò”Ú%ˆÅ/’/e¥^´7õ냭øA«Í³qE©íá×¹€7­3«`—S —Ž~™_KWBºXíBÑœ_t>e6Ú‚5ÆÛúÝRâ¾èjÁÁä+3ò?×<¬þc =h¡³mŠ"î8ê;œq#<Ã9²³œi%Ù ˆõ+£ŒU½8«1¨†sú]Eú®ß¡VaxãmTÔit0ñCÃ[È|ˆ: Ñý¤Ùt>„-u‘¯Ä$ç3³\¹«}'.[ núC¦çÿ[JjË'ôñíAuË@2‡e`O—À¯Üaù·Q->€š—tä÷A/‡SD… -s¢ ýÿQ]FmYJDAVßуž»}¸ÊŒtCYgÍ‚ ù`¤Þ±lE"ó;žòN^$v´Æ>gþqOÝJýùž©æD»D+­CÂÄ4£6RƒïfUvlu\ÃijÜeløÉVmT ¯y3¿â?úQš)who‰óþC_ØýÛ»:Ÿ¬(j5µóO‘ûÈ’êk5 ÝÚ«ëmð Xåª2H[À·ÚbÒƒ‘Z.¶ÚS߈ UoÏ`,¿š/ûùQ)ÅGæÔÐòGjŸ÷µ™à+kD.¼GC#»è+¨¥´}¢øH_Q,¾™þW„Vì>T?KîèÅJͰÌù±Ó-¨sÛC”¾v–çý­ˆþj@®9·¾IOÂ»ì‡ Ü :Un¡³‡ÝüÏç#¼HaüÇiº.táUk(ÊyÅŸ/¶ÿ¸c¤„©®ƒ’¬u?WÿqÒHE½ÄOtg«àϯÿÖ·)ä†gi àñm­ç9lº‰Ÿ‹Ž‡Œ _W”ç&«»±Ï°*sùWŸÅm½\WÈUþñçØêV59þf|xU˜Â˜dFÍÀü6Â|ØKâtVƒÿX…XOD6Äh!TýX( SKè‚«e¹:LÆVýUn¾ó„µë‹õ‡ôOlrß,ìO0³”`±áf…â?Ö+5ðg¨NY@“xÜîÞ8¼˜F'‹i~ûy¿Ôt¯%³›Æ•Œ4Vë´]«kMÄDe@”æÃúÂe¹_=¤s_Y¸`WjÞ Ò?±Ub[ÐJ™ìÓFÊl}Saz²…ì_Ò\{ONY¥+| š`ôc±õÏðûРÇ,²¼ñ?-ÍwòoØŠüd:P4ÀNÅ vW^iU8ywâ“z|â4ü›NÿDwüG|ÛUz_ùÁ”FaÜc3œ {ó%[Ø(Ïr¾OCðç¥ÄSj€.:ŽBG»ËØ„W~·¥,ˆ~w.ý÷‘,7ýå}ø j­˜õ%òª‹×“±Û51@³ÏjkÉ?2Pë—QD¡I ­t¤öiê±W[DAîQY|F!qU]­=L¬³àY¾`í›FhÅæê6u9ùÇNlrlæ>Ú%X°øâÖõ ¶ÿ"ì˜h„nhhŽ0—®€wõGÓsÌÊ“ÞËÐ_Í'ö=¯³À…²Àû^gE*!ÃÝa\õ1ó£¶c'? tr…¡™Iýåßø5øð«› ü`’íù°ïÅŠßtC!7죵%²¯Å³ý†§563Quj0æ2ÔWG½º’•÷‚¸qÄvú—„´¥¿Ö|ª_ôÈuøpÏÿë‹êX57Ž^E@X—þ#.ly½£îÐ?ñµÒ]Û ‚å‡ÿˆ«º‡õƒ¡~?:@ßcøŠtø×Úau€^¹ÉE2ôWm"Ù¿äƒ6 Ž|Ú×c òŠ&â„:A»/Z ©ôËKE]½m°7"ÔmñÍ6êßô/9êâ…i®SD£†á¯ûÀ€ídží„ï»#zÑ¿dLX‹ù~6Ý[OÉ•Ü`.¬ö+ìfyž‰™¼Ý- ä «ñ ÿqŠ(z¸;üªÄb‚ÙFê“>à)`Ÿ‰¼ã“)-÷¯ qÖÈÆw¿‰!X¾bæos+‚l,àË“Ú`2Xy_ö<é+Ù•|yN‘û`8«ñ §°â[@Ýöˆmz®0ÐoÊ µ8þ)|x3¼N4°É¦Xý5ð){xg“>ÅôaÅ-àWýÁ]ÂUY¡N6ÈŽ ßOè2œëáÎõ•åì³hEÅ?Æ+»€¶Oâï»pŽñÅ)¹+.¬ïŠÿØ®tÓ'ŠGdýQü;°\£ÙÙTú¿Ú]íé•àg^ àÝ/Ÿá£¶ã?Æâ•ºò¬Öõßø±ÚdrÛRøŸ=X¡<Ø®.DũبeÖ KÆ@úAe7?Ã.7¦þ#+xSr…âØç­² œOÈþ»[´¨œV!0È-02®r:™°ÀÙ`¤×˜w蟘†®¬W±È±Ñ£dü†‚>x0ë.àZÀH‚=;©õêx´Ð‹Åð1ýˆŒÊð2#@×&Z'­ÌŽpè•ÍWL%ìF†”…ggÌËX²¯üÜaæ)}Vj‹gxÕ+œÌ|ô#³øÙ`,#e+ú&.d†·ÈP¼Ý!êïà1špÒ·É¥Âè””Ämçrõ•‰êiêzÀçŒÑè§óQ?¨ÃšôeòwU8½t´MATþ {Z‹*Wúº˜óð˜ë¥?úƒÒüz'–9×»¦è:¡>|ü½®EfTf“™WÛš>»ðW™&5þÜýw£¤s wQm;Å@>ê÷÷‰"b¼ózëRþJ¤ßìoxÈ<<5ÌÊŽ¡Ôœ·¦ËpüÈTr!–ḊÝMW¬ÚL|ñƒÉ´;Ü·E¿{L~®3ÿx¯ž…?E&Û–÷t#õç͓ȂZÀºï2Pë ýîZ¦&·6Ë{tþ*Î$®åæE°ÞÏàWôwãm|­t^ñï‹äô¿êë<™èt/‰íüSävQ‚úÁôÚ1­œ>@ÀÉû*èå£}¥~0¶¹êHAýàV¤ÅÀv©"!3Þº«)ð&å™åRDo©EާñЖ`Kçž'nìGþ{j}0á诎‰?±Ø}õ>ºòNx܉ú!2uo2ØvÀ&"üúCÞ+_ñ¢6¬‘ðçGà‹èGõ<9ñà÷v|Â3e'?8H/¡6¨ßã÷ÞÑ·å6ýwÃÇï+ñA»¼èwòZê­ì¯5<ù(òš D†©å]º8í ’ŽÝOhìü-n¹áeZcâÊfXßÄÏÑa¾p†‰‰˜ PÙý·šÜæ,„WÏMÏ@r•þY=ªf6Êá+슾=ÔÈø‰6øà•DÕ7À‚¶ÒÇû-g8ÝÕaòÙøÐîý2õá,˜S­Œ æ 8ùLÎË/TŽß£a¥“Ê×F:¡‰4æ±€Ø&ùG+üh ´õßÄ6ãd(þÃ]iEþq™ŸD,§a#§±^¢s»ÿU^,\VXJ_¸‚G¬N/sö6Ÿ×…Û&ô†C\s7m4QDøo, ­KîŽçÊà U¨?¿ ÇðÉQod3³´¹€\.1³+8ÖJüÓ®ÄÒëÂÄÂCRýI°›öĘG…`*óvÿ&ºÓ tpò—ÑK½JBÜ,È&’×LÆnú¡“ zˆQüÇQ¸Ò(”ÿ†áùFFoªðr˜ý˜D•ÆÝ‘Ê1… ©Ì.òhØú#¬¼]>&;¦¯¯*|aÅ.£ b¶Ø8EO¨íô/Y(똷­ùô¿º~uÙüIý jÝâNצþã Þ²3˜[#YY|qn¯ù‡+qÆTÅ3e'j éšF†5˜3kÓ³×r…S®HýF«ˆÓiêB*ƒ_Õ‡úƺ!ž)£±À¹ÞUå›v‹7Ƀ'+ƒùN,CÉGã²Rÿq¿¦8Và}¯Q—÷€úwärÓi%6žõ«1SZÔíœç×^íÏääTÄŒ½èSW|4ÐÒÑÿj/]¹>2ïÜ dl]r?SϾ—NýטÒ׿ Þí+D2[ÅdbâyNÿñ@=†~·3ÏSÞ§’T“´t,gva/æŒ4/á%ïXSxIê%ýä5”]™,ìf>'÷ðk‰²úÀÅýŸôßͨ.è5òÃj:å:>R_üÁtëdäôüÌ?¯Æ*qÕQš¯öF{®yªÑTïH®ÖKwE¥  š)j<Ñ-jÚ_ªõ…nÔ‰E>ê#§¿z®u þ\ ‚¼Œq¨(+©k´„œýßDöbyêFèÊKãq—èϰSWÀ.zðÖ–{Ñ£F/@¸¯`O~Šúøîø¼¾¸æúN=)‘Li×0œAYŽïŠ}}DϤÄ0›ù¨½"|„%ž†»^tõŽXÅ””TޤDiõ' EÞ›õDÌ­é%è ² vf¨Ô~Ñç·¸9äІؾ(oÊY®.z£¤hÕbcérà üÄÏ­ÀâÑÚJ´íÅüÚ,jX,ò@Ío¤!SéC^±3ŠŠwkjW$l‘±†˜ôûú›=ïAíµ_ÜŠùQµm!·ÅŸóÑE"*Ÿün??«­Eµ–ÝÎÿÉŽæ±éx×\†ýL#{sOÚá¡ÑU&*~av(þc3óÊæÒ&®ìÁuéØûA }ÈÖ†`Ým•R£µ}«Pœ^é_Í>qךpºsð?CìpüyY"Ô<è•:‘Cã7£´ØG„\ÎôH5j%aÑGßkøØúù¨—ŠÑ?qZˆgq©ö4·Ì$ò™Ùr0‘ì\Øâ¨æ¹þ|*ùGk7»Ëƒ~·7þ/µÓ;dG:#"ßûÄ{t‹?¹¯ÝˆQ4Оi0ÇŒ„°ç›Ì!¨~G‚äq|@ßÚ+ZÔìjºS} ÿææ4I¾€; ýl½Òâ1™óy1²9ÊU¹¹Ú²æ+¸…lÖ ê4Úìa·çAêìúÁ Tž´ÁJ”QÄ5çöª)sÕ=ÚPÐè™ È›±.µÄPq—þ%oÄ@ænÁ«$2ÚGÐ4a^Ê`ýòyּǵåjîü;ý(Ùç <‰/õNáÏ‹èô°NMQ’é«èÃÑ¥îq"ñåx Wð˜µXÑĬ?X1?*=qQÔ w*¬õ<•[°ç—àoaåa7Û`SéGöÛ“wèþi!xX?¬¶Iþ‘$œ§i•°Ñ%ðC—`9~À»Ç%ŠÉ»ÏV¹`׃†ïƒÿØŠ—9 ~•?ÌþW†ºWDø»a5ªe¹€Þv v3Š‚äÂôc^ð)y#vñ©³ùÛ¦Faê¡=;9PQjä. %yÈÜÖqN¥ð ‡áxv7õ“º?Ö¸+Ö¤+ŸÖ•÷VgqÀ¤æ…ê?*ë‹«`~½ÉüТŽÇë 0òc]+â'PÕW´~àVwwjœ­ä¡æd‰nþÖ¿½­Ö™ü#;?¿ V^ÆZ/‡?(3щõ:³,|Àž<™ö—Áœ†dóçCð#L6—9ÐNq_Rÿ¡ñ@4– d,üùxr¡+ðó;éÁ±‡ùQk­Xø2 CƒÙq&Ð6/þí²'wèJþ#‘nO^YÖ—•j{pÍŸ²XNe™•zˆ“Vnú·×uÔ7·ƒ°õ4=ð*þÃ5Á"štÞ îáJqv©¼yc,à™é"]ñiÑ_Õ6ŸÒ]* öp¥Õ=ð&ªŸÕצ3ÉN§'¬w{™YÜp>ÒEé¿»ön(~{×Ú "/ÐËÒ7'~Äîâj7¾ÓYª,:Ö•äµþ©ß}KŽ”$K3f:×;È´¬+<'ÛˆG2˜Ùˆ4zÛW¿ÊȬóËàWŸÑ®£ûKªI6Ó)¸´ÕÍÜ&d÷/)!g8å]Êk¨M¨Œ¾ÙÅ8 k IOúŒŽ6h€Ë_5€=’Tkô¦?ÊEføÎ&/,keæûwÞmïüê.Èʧÿx П€LàyšŠúþ¼Y‘|Èœm²iP™˜‰ùƒ·éߞܺ+ÏÐÙ7%ìúS‘ûQÌoFUý•DÁæ¼ôÿø©?·{åþã¿„èwÓ9ÿôë»û=õçi´5Zz=XSVù© Õ.ÁˆœÒN“DÎ;–SkéSAžñì|3õÌ«£æâÏE…!²S^$RûŒ£7‚ãX+Jƒ9Ôƒ“Í~µTSÀ]ÅuQ 1¢óÏË0pŠ~4b3Võ/ÞãB(bëé…þã2Å_Tåi*>kã"ptqô-zfl¦ 븖73ùAVìòr°°!T¬ú缡ÿÕuá"á^s<õõôwèQ¥£"šƒIÆ0ÿAçhlþm£ èÂO1 _uO¬úmîQÈ ¯Ðê‚OÕÅ¿Ý$'ˆÉÓŸŽºº÷Äé™±)WÈ·×`¹-<.Vé•ÂT`¼P.¨.ØÐøðöÍYy-'x”“\„¥öåÓF‘Õ‡Ÿ…þ©½TÝ3ä¶øs柿gèÀ1ÿv‚,¨0u y`p_Ëè¦ï¯?ÁÚ·…èþª'¾8¦qU$ã íŠÿØ«Ó'cSQ•›èý=»¨Â])Ž+ˆŸ|vdwY þ€üc-Ÿ7‹ˆq¨èrú—„¬Ìi£µ£þ£9ü¹+lvByÌm-ÕãÇPÜæ¡/Þ ú«Æ2}˜.žƒ,©8HìhE˜ñ²=#ƒWç)Ê*í«HÈóVJ.Á†ÏS¡ÃJ€ÂjÝÏÁ¯’æ\ j~5 {R”jqÔd9ähðÇ{ê¼`ÏN½!¹÷ã'^Ñî2ùÐÈ„­Úov€“ßb¥ÿULGjG#ó¨ìN‡íhY3\yƒM•oQ Ñ‚34åÅ=”o×8™)x¯yÆCù˜ Ý}©'éa~cÖFjzT-ÂZŸ’שоcßžÌÞ·;†©¤LÄ”WfÒ¿$¸Ÿ1“úÄFqtVMÁ¯RâGŽ’ÏÄ€«ŽFþQ‘úq{~mzª0›p%Q ¤`¯WDà»çIþáà9ð"oŠb¦§M*‹lÆ ÈH*÷§Á\,¥8H¿Ã³ÔÞ¥;8^ _ŠÊnTl”Kœç—’ùq·`Òò= ‘uÅ®µùÇ1|ÆyêÇ¡ÞAò„•Ö™gØm'vŸ½”?Y|¢˜ðó£>ª;Ðïö'ZiG´LD‡/Íüºä—ÍüV«±£úÝÏè̼ä;ª?ZZs©»HÜöAäɪʛýNw å-ùO+A°ùç?•”a²Ÿáí$+ókÓjsÁ¯Zèï|’—ÒßñP»ž0’ü‡ ‡ùD‹vÔUÅ8¯ß€?/CÿÄðõÕ"©ßÝ£Íe>ú«‹ 9máÌYùƒ½áÆÎR»“Æè§÷r>!ÿêZ«}àfá)®w ¦¨‰EüÓø@O“qt¤G\cWŸ5Bõƒ™Ñï&Ê&€›Ø`,€=b5ïô«—Œþ e©›¾É­ú˜?¸O¡¢ˆŠÈŸÂì}=¬!û™¯¿”ÔæXÊJªÆÄTð¬Xt1ŠÎ5Ðð³¸ÒÛx‰8 0µ2ªLI\«amŽ‚i×àl‡±Ò–á­ 3ƒý¤¸©þ"úÝ.ÄöîÌúŠ~¡Ö¨Ø]s˜×šò&5”³ñJ»°FëáA†Ð_…–d ~ð£8†®6|øWa*ãã‘<ÅÝÓ·é_°==à|’ƒõà3SÐY?)çz,ÿ±U©Ì¼2»~pJ@¯Ž‹Dõ¹—YP—WñÆUÁÿÎÀì•‹þjk+.™›ž&Ä9ÖÑú¢Ê( ~µ ™‰ëêHÆ—<$+ÇYf)½Ã¢‹ ˜?X¤&™ÇŸ¨‡€Ý C¬7KsÐï¾U";átÖÊ1Äú3e<øƒô¿zžU벃Ԥ»RõBG ìôrÆ‘øº‡êþà+êå¹_y¾JÃÛ÷’‡ŒDLÿ8kvdSéä‘%­`>:š‹Ì#¨ ˜Ù+©‡E ³+~•WœÆç^ãmXDÝßxãˆ|I÷¦QfOæG}J–s‡n…ë˜n2ÅbÖ¾'ù“/1þ êîˆÇΗ®¶ò—º¬o¤übŒ$ÿèJïÐÂTBL£ê£*ó½É´¢aE39†YEaé[.V.˜úÆ£(xKf“KÆ7&;×[Ë´“‡ÄÞxÌôfnc„ÈÊ”ÞbôÏêÈüËô•?ͼ§t­7À®6ÓYf ™Ò5òYð)õy‹ ú ì__í£jD¾àIþ¡Ð7Ÿ#ýK&Òñê ý_î“! ·ÞZ·È?à?zšÉñp¯P»=àg¼ÐÆ Rÿñ ÿñ˜Nv-êb°µfØf-æ‡5jÌ$õÆðç÷©oŒk-•Ï­¢(‚Œ}ç©§Z˜7°QBBšJÑyÿ¡/Ò2Í¢‰óÉú¬dù·ýGõ¡šJ[¯•¤ÿîã€ùQ~ôo?ÿá¯=W]"é?’3]n)¹GTªÊ§ô—Ô¶VSÒÅ£†¢´^.’üÇüG)ê?êGSi&†à?ª1ÿ|Ý,>‹¾0ÃmôÞÎsøW‡]‹ùµãô{¼+W°ªƒOF3ô»]Œ7úø—àDéÁJc´H¯ûW ýóïb3ÿ#‘‡)Ïäl€—?„\޽…wŠÏ,¼rxÑäb5#PÿñPy‰F픈ÆÛ\˜'¿!¿ìnZ÷@ÅšÃ^7áí¾’ì$ú?nýà|­ 9w9üÛk¥x 0 ˆÆcÏÿ8…Õ^…µ>BV± /óXÕ+„Ù÷£âMþ‘‘úóNx‹ÝpÝ"¸ qù}ö9,å,~n<ìÂA²/Wòô¿2B핃úÉ¿Š+g£Ú=Ë¿,Êη»ÃбÄeý>Qnuìh[²˜øâ4Æ ”¿Ôþü²ó]©¨tQÝÉIíþ»ƒð¾³6L?æO=5[¡h½H¶ù;úÝ?ér¿’Ì\Å}šÉDøk0&Ùec¼s=7漄§ôä}Jn…ýL&¿Ë¡ÔSdµfrÕ³ÑÛn±¸ŒO?b®¢ ¤þãùÇ ôE9ëÕT-ú†ðþÔV ‹Þ/ë üG*ª2.€_½6óbç[X›¬¾ð3Þäaû»2ÅÃaêòhw;<ÄW‘É8æÄ¯žªûÐsõ%ÿ°gÄÛÍ è¯Ö¢~^Œ7ºªë¦5„Á9˜1rC¾&ó*ÎtÛ•æGžõWb#9p%"”¤"r¢œÇóÿú"3ymyç³ãÿQÿ‘G½Iÿö%Za=¾~]­ÈšqÔAÚIØí"õ¡Í {ëÙÔúú$j<ßÐ' >ófú_m¿ºB%ès=¯^V³?!âÿ¹è=À‰¦Ø¦¶FNð«[Ìÿx+þmÒ¬bu½Q„V,Lýùý!V~ÏãlIa9 L'µX Þqä)%hÖWÑC|Õ†D`ƒL·Ð `)ƒ¯ýω}/Æ.7¡¦ïÍûý\ÿ>îH(BNIý}ù$êY±G\9ÙWZüG¬\ú4Ùq=¨0‘tIù7žc!¸Óm±V © ¹âV­:¹@5®ô5'Qt&ªA¾SÝõõƒW@ƒV±çÓàWÞpá÷Ä^½^˜ý¿)/ÕØ†Ú׿± &%Ñ{'2‚âò4–x0ÊÏkäE‹ð^d_öL!䟴Ðú'TÛRl[ÀahV<•è¿J’¹]€1ššá'ýK&À}›²ì0¼A2*^r­uÅœR Ñ?Ñ+n«ÔÞ±ÆLv9Â`z!ùÇK¼^ª–ƒy`ë-üÇÊ€ú1ä>›ôÄZÔÏÎhÍžÚ]ýî>ø…ÌœÔxòÊü @ÏáÌŸ£}b¦5oÒÝ#™9 „Là;7ËFx‡é²üyÈþ%ô/ÑÈŠÂàï 2{N@ýÇw&:¤Òû.Upň _Ãx†] Û]‰üã,5ùYgøóéÁv¨ê¸§yꪳBð«t C[ÍéÔ,Ãu$u$ ÿî ú¿*w¶¼i+ùÂk2ÆSZpµ{VqŸ{—°µjìt¶aˆúU:¸¶ nî…ÿkÏú‰È5s²æäPü‡R ¾Í«Õ ¶â3j¡`’sñæ=@€^À¾6¤VìxÐYêç>`‰Ö‚®M€]ªaìÒËü¦ƒî^€s+‡}œË®“ì0ÊÀø‘sø¢ò¼C/§«T[¤3ÿ Y„H¼"6z¡,Œ~wEˆ§{‡&Á¯:`)6ãf<23­õ{r§Ÿï.úfôf®ß1ô·Oñyþ#:5Ô3àWKù«Áõ¶–Þ•¨iº‡ÚpØÁ×R€oJ‹o»KÇŒ¨Ž<Ž^æ^Æ#¨C,††Ìï´|ï5¾óœÖ9Ø3rvxºTØž¡0Õ^ò5µxLúšŠc<ï:¼Ê4¢ú¦‹õßѽ™ÍÌ?«HýÇuç=n¦LVW’«-’ß »Ï{32¹¬¦n Êʬ¬tDOKWÁïÌkªˆfìùG:<_=NFaÇy¨¦¹Då ÿaÂÚ1JR3 ÝñóÈ fkøèºÔ\gýq¨°¾qŽK¨M¬C©c2 ÙÛu|[°èÜA<úôVú†]jLμM–§f^GmN­?*sô™ÿ —>Àzj=bíêý†›Q¬¦A\r•'ñ,\\c‹Ó¼SÝàSF¢˜iÎså%ö›UËPrýIדh­²Òw ãë%±NÉè¯ÚX˨Êy…½ø.vƒu—¦&ÉOßí<ÁÿÞyÑ_uw> .x,Î?En™_›XÛ¯åÕ+éçÔ ö*êhæG]bþùIUSCÓ`†ý Åðñk@«¨c€ ž¦ÐæQw‘Yœ§ózLæ4ÒòFjŸš>ŠüÃC”&¾Cþ‘UœdwÏDW´y~T¡GôЊUÔ¥Ì&¹úÊt8ï,±ì.r¤aøÚœPޝ]´þC#¾ÎJ´]X ¾:Ì N¦¿‡?£Hvç=oÏ5è(ã €9Í Åx(eõ!pÀQ冷} *P?”T¯vš»Ð”é€3ˆþ™ÍÅ,…éÅ•ì#ÿÐC<;õºDÍðûAÑóƒ€ „ñÉ_”ºÁ‹ð篘c{Qæ6S£À-%¿Ò îöc™Ìe´‚–üãÒ×P«ä/zP½³Ÿ³Mé]˜þãJ§{Øþ¬ 0ÇA³êP?8X%îi¬}Nf… 3Þ©ë‚íÐ¿êŒ‡Žƒí^AÜþÀÈc3 æTú,ÉãønUu”AÅÚÍü›^PEaäׂß-çîq†Gµàlaô~ß@ÀŸ÷BawEªt/ïkŽýé5‘žã·¨³hãs”I´ðá7n€. §+#sáÏk)Õ­dn3å{8§aLodä&k ÖˆüÅ‹úó¤XÑ·ô/)@/˜Øýæ|±•ttñ‘ðuEàì¶ã诞!Ú³ÌFg1‡ÙŒm¬ØŽ^tt<ß}‚ê!è¯~à?Ðõ0#ýAÀ¢ÌÄä]˜@ÿÝ5Îó+Žrü™HJšçûl ß} XóÜÕ7æg&F¹Á˜Ô΢Ó@¦\%³baïßµ„?ÿ{²Æé?>3ÏÔWŒã©mÿQœ¢›ÖLúÝ·'—yC×ÈIVÇ8‡/ë%a~ízG6¦’¾y {¡ðþý…ÿøn|Ô#7¡/”WêßøÖ 1åœ'›Ø1rv9ð#³«Oéßî¦åDu2 ÿˆ©ŽÐöjO©!<ƒ>>´°ÀŸùU!Ô™kP¹ ìU,c"þc,ùGvð«‚â…^L/¨•tî:äφöçZC0¦¢16¡‹QP¤ÏÕ•àWmåô&lϧ”ÖëGhÅ’êZâ»Öï÷{ù¢Ð,ø¡p"íáRªÂ$÷Ï´ˆä±õ+z²–äøÍÄúé¨ÿȇ}_Œ‡L|xèË€ü#¾PÂÝaôW»aÏ3ñ“ñåìó4X‹¿Q3¿ÿ‰ÕÉ#Wâ?6ƒ˜]Kµð&ªƒSð“õ¨„øŠZ'5g—4ÈAnŸ™çkX’Íœ„xÖ^¾ÿXl&ÿË'}W>«)@„6³ZK®/1'U3ÜÀžÎò½~Äá7Xm:÷Èüj'ñ}ð«;ÚÚPni9µ’nÁBE£¢2>Î^ý*uógzBñËÝK:þ£#'‹ýýÁßu ÅœÁLvÏÉaT êœúªg£—¨ m‰——ƒ@½ÂRN&ó²grÍ£Ú€ÿYuÛ‹þí‰#êbsg¨Ü"Òð;¤{–̪¿X{&ú_„ÿØ€Re-x€VØÓå2 õç‹BÜéZLtõ¨´<@…Ãü×”²1éÊ·‹Š¼Gpßi¨ŠØ‹½kŒÿÍUÅ–^ º/~ß‘ùQú!û0u½-ùÕ9*ÿË‘ÑØøURÖpƒ‹qAtÉúÃñ oJ2¤.Ô°¹â£>Éz ¥?VÎG«l‡YŲ²çœÌ²/ã0š¤ct>Y€þJ¿Êm]3çY½Mù$ê*^º'Ë4t2‘Åp0……—óÿ© CUÿâ k‰Â‰˜ ò_ÖM´Ä·À«–Ã4¢KzuødÌ-ÿ~eÏ?_ŽG݃·¶ä~ØûÁ]y¨}Ççï k^#¾ÒàQì~è)é_rÆã+zã?üaW¶ïÇfÒ.³Yð•×Á“è·êî¼ÞjjKøîèqz 9¥7”YåµèÓ^lëHÇú—|Ás§NÑËÊMUºa¾C~…<Ø4:“áîô¯èŸxWŒá™ê…§Ïj\0K:º[ëè¿» –ü«~³Æ9¦YñÀÛ>Ègð!%许мi¸aÖ§ä€Yùú?É?RÁ´pžÌ%‰šÏù'ç ÐE©?OC½G½üy]Vy¬üEÿvo:`Ý‹ôüÁäˆ3ð¿òP¡uK[¥6Wßê>"©ø@…b¥Hæ÷µD§[EUrï~Ì´k+¨Ý´k¢ókOˆà‘­õÀ<ì_]pSæèÒoÏÛó™vNä8“HÄW?ÄŸOê}ú?âÞ>‹k ÷ž™½G^Ü¡ÐwwHq îŵXqwwww÷ N·'XàînßrnßI“œûÞï‡$$;{öÌ,yžg­ÅoÑà@Ó‹à ¯è"¼E~žÄO @+a@ÎàCR’t%ÞoŒž>…Q•Þ3*_ÊÉÔ‘Þ›Ì??Ê÷+V4?‘~;¬D"tB~ØÍÚX©+ÃË÷&&€ªv|ìg¼z>bá‹Ô#î0Þƒ .ãwŒÂ7÷Çwm‡ÿX¤ý%Ýôìð)[¨ Ɇf  ¹e.øs*רïA”›ô©ˆY›š½büò£:ìÊ:# ýÛ‡¹Ó›á?,väÆ¿¯† C3šZÄd4›˜»žžã­§¬ß˜Ž&ñíXQ¸äµ oc8É êìP+¦vg/j„ªâ·úþúwæˆ1{SŸ2ŠN%ɮ޶d0]AJ¼É6M®ä{\eœáç6j¡³õÒ · ,¼?ˆ<6uDZ½à?z£ßKeöEjî§Ã|øÒUö¾Ñ¨ç8 "ÖŽ«id1?ª¸ÒY=ÎÉÍ)ëjt0òŸ[ä#93|.ú¦…LP*Š•nl¹Ñõq'uÞiÍU vó@ôö“Åf0Ìýƒ_} Ó:Ìýt!ÿ`®Ý' ýn úHÝ'C8bm±`ç¿ ÞLÕF'úòž£f¼" ¯¯¤ê,x~TµR‚Š6ÓO®’ÜÞŒã(ò'ã¾Ý“[Z1äg©*lm:Ðï~%‡¿Äs¾‡. CøGên’>ž·lÞe¹™Ù1 ÿ1‚¾4ÇÌVt™/Šþê]SZÆø”ÖàW³È?Ö÷n ÿhMv˜âÿ‰þ*­ºœ¾„[7“Ø1›ó³¿¿µ¿s¨¯áÏ/iÕEq'¨þßúA?ò!Õ˜jôйøêŸè¯²¡¾²ÀEÅ=íˆÚ\u¡sŒ÷²¨§E¯ÏãM õ=øU]lô½¡lOÿöÖäè½@þQ€ùQ£tåuè÷ÒPø’«+Ô”U@×Qƒî]õ'â2‘ó="ˆ²)³¶G3¿v@Ž.¸"á‡,bÞÕØ˜†Æì ïbwðä¢T>?½zÃüó°QîÏËïR,ò _ìä,ÒzVZ‡ÿðaòBy•Ô8»„j—™|å7Ý_‹¬"q6ˆœ¥:ÌÞ#|Pj¬p"¬õt@éôËdsþ¾¬zo§ë—…k„üGb4¤1P…íeµö`· PØýç š½DµEÎ}bªI(wO‘ï¬Ç¥“´ðz߸¨åÑï2] >¾^g ÙQfe‡IâšÉRc›ËQOe1Úƒ]µå,… srÂþáøMŠ›è!ï“oL"°Qè§Q±V[Ç’•fÊô#øã}Æ5üÇòQd-ùžƒÌúæVLњȪè貵χÛðÆcî°çœ üqƒ?Kþñ+LEUTþˉtß‘ƒyR÷výîŠ0Ïâ-.ÏUIT­ëQ$í5`‰2›Ã2·0ÿã&vYÞÖôL]ÌpÉ ¿ÓÖ"ÍáéœÎsõD]jEKT=Æ•”Ä#ô‡xr•ŸŒKþqm¬æÈHýÇQ£§9•<© wÛ‡ë_Ž÷:by@ëj½¢èw?’3Ú]¹âÝ.'AÃ&¢ßrÅ,‚ï~Ž%xU /ð Á°^MÍÀÇ5bŠF°þªšÒ[=ˆ§œb¼Ôgá¿ËËDz]ó-ú««¦ýK(LròÁ æ…až'­Å#3;®žuæf¦‡Zøç÷^ñV³¢A:ŽªŒˆO•ÎpK@yÈ6Á•Þ-ÃÞ|Q/ïŃÌÕ3I!6‡³`fµoÝ'”_Káõ÷‚øý½þˆ"+lu1ôW)ÌEØîÔF/˜Œ¶¼ÉQNfÃoÝÇ,Tê“àsg ‡ø<Ž«nG¶6ŽŠÂGôѨ¨÷¯ßÅÌ£çz\8éÙd2ã8úM!µ°oMoòJè Š€ÑÌÀ?\„mØFEÎm:Ž€ó]MÍÛoðÅÑ_-!ÿø/µ ”è z?*6…9ÃõZR¼s¼ïb8ç}Xè‹újã jàÃtLô3÷€,³¼è(UÓ|EÞ•¿}×r¸•Ä©/@Cb Qëw V .¿q‚qA×±÷~æJ²–a–øÕ+øÔ¦?Þn†¹oO@N°ßv}»6,Ôz…¥­[ Ö˜ ç´D?b\#oM÷fö>?³ŸV[‚­yRÿñ ¯P ÿq|i¿¿Sün8·Wüʃš†deù®j0n¥ˆÅG£¿jC®uEl1«óŸJ[µ‰ð_¥)«†'Ldž lHξܹž¨½&>ó#OfºÙ¹¢˜B~þcŸ¹€I>t< dJû!:Ë\'ÿh r—Fê%üùLž˜Ê2¸_ËŸtîü&³ƒŠ¶E'ÐD~ÐϘ5è8rÂjDTà†š«™µ.=™ã.÷e-ÜJuô»IÌÏÄDð+äbü‡‡¿z¢ú_ „ÁkË»´M®6]é律¸ #,ÏQk_)ËüÁ;ÆFøxWtÇ“Ðs #ÄZð”Æ¨ÔÒÛyÅÿÞyÈ?F;Ÿöã¿í•Wý &ÕÀt/‚fª?¥þã:ó?Þj'™_ž3âëü†f…”X˜h¦Nˆôâ }Ó3ƒ:f¢ÿnfÑ,RåPèµh]±Y ðãx›ªË-èñÆÓSh jÎc²<–§¹Q…þùàÏ*r^õÄ)Ð%bÊvúc,¾Ý?ñð#λVòNæ&Vì#Ý¢Ô7Ø&2š|ů­Æ–V#>ψuÝAÖ}ÝØy®$¥eD–9xw‡•‡TøÈXì+…± K½ÜfkoÖûi±¬¹Á^^“-ÏC»±4Rüj­æJÞQlê‘ûoè²Ã1|Ô³°–k? ?g³Ý±°eõÅàWy#ä? Õþ#'XN âvo²™dôºÐ+ÃôwÐçbàé&°×=°ËðÏ-ˆá|Îr© ÄSiÏš‡‡=ˆ§)H’ÜëqJoa™¨EH~U‹Õ»áe|ADç“…:q~à©”}ä• ¾¼4ò.Wjç¹Aó› jl”¿ÂVc»™ÕÇÞþSÝØ†llý¯b8ß¡ÿ,ÙV"]9·ÒpºÓAvc7¶áëèÞ BtŽ::3ð¿bù2cQ‡],g>õ>ÊÐÕâŠ2SK‚VÓM/…*i;:£1Xë¨PÔ[ÛlÌ 5Ï ÄSÝŽ¾×€¡zMÆÐ?ˆÿÿj‡?´Ä>—xFŠ‚_õç¹x`ÌoŸJ~4ôåwGlGAGKv˜Í싞‰3YÆî§ò»¯“ÓúiíB­—WÞ"vºÈ3;‰.Nt•_Moá‘TH~'ÿ(Bî0ÛZÿ±œÝ¢hŒ²í ;lƒß¬Çáï¼nÊXuî º%Œ'Si&cëy°¥Òó¥ FöQ]Q–â)“•ÊbG70 ¸Uüuñï¹GùÀãÞÉÉÎõ+/µà‡ÀÒ™YõV2~ᦞ§!#ÚiÎ!ÿØÆé]c¾ºÙÍeêÏÙe ÿ8Íù A©XXöp^ïŸÔ¦½•éÁ ¨%7þ’/õ¥frGSTÅ¥ðIðn—Èeþ‚ßK•ÆAË•ØC:t%"+¼†¶U}_ëôÔ=ð)ÉH†â?K3‰c›¢Þšhv@Û1ñËzIÏa/c;Sr[“`F^€Õ¾‘+Yñ/®9‰Üã¼âïƒTLCç<ƒþía#©¨î¥ ú]ú—Ľ Nå6ók©ù¢]RãE¿RÔ2bÝJyÆW›bŽÚMMŒrÁIdZÑ$šõƒ£µØ—2YÈx=·œ"ý©Ny/'èät™mgSsÿÊk¨#Ð/ÅÖÁÂÔç´’½˜Ñ~kz wŠÌA‡©²L”ú_%{„ Vô1oßR¬`~ÃÌ`Hhϧj<Ãú½“þTuÔ’‘÷&;¢bþàQÞ¸Kº ‘yòƒ¸ a[±xuá@/ šÉÜØ¾Dù*þßœ÷>ü«¢•€‘) ß} üå7¬p*¾ûÔ5~!?ºG†`¯¼úì üËy¹ü*_k~Wލ2™±ïÑÿ˜œè©->x1úÝ `ɉü/a—§ð&­Ât#ë)¡qÂí —ZÍ#^HOò¬za¾{.~-/ÞíŽþÏbÊãâö¤\êPN¡kéèw0[Ãñ+•¢¢~JXÛlØÊkœOSþËdÏÏld£~æ(ûFîH r¸Ù =ˆÊé+ÅW5¬¡V[ÚÓ㳇¡hÏ!¬#÷ÚAG¥DTktE¿›Öð))Au’9ÚZ鵊üäR±.Þ÷>õwð°8úçz«É?Ž‘3àŽ½°†1ÿãGY?ê(;[«ðL/y«ß’ô×íÉÏ å©pÞ’ÿõ— 0WÆî•ûŸÿÅ%ÿøoùó ªm‘Ojˆœð翳ffušv›î%·µ‹d5ÑëŸXuÍ2jtžðßw9Elo]¢ o^KtÓj9wý÷îÿéïÛZ=ìè^”QÈtËɘ̯ݭ%×X@µvlim܇øŸVú$yžð€çug¥–àE‰èËè9äAÔH>znøëL0Þ ås­ß?-ôþ-%ñ1ˆËÝñJYAJñÍ òŠqнKÒO^–"òþíYÕSLÙ»ˆíú¦äŽÝÅ_Eüùm"ØDâc‰ò=åÈ(ÔTǃUÀÎÛõ©È“rí¿5JUECÊ>±vfv_‚úÌÅ¢¹š9‚;ó\y«Æ¤ÓÉ~ÛæøXTm¶$3Ø Kpš¯MFKzÛ?»lw7ž£QLÏ/ßh{Ã9ÇÒjQ“(<úÔ*x›Õàg¥ùþ[ôj™ËüÁâ&øCs¼ÜŸø—¿x×8Dvürpòo¥œX)ßâì*”÷¨› NbgCˆàßð{rêµQ×.à¿ÛhÑ<‰ÁçëCÙu}†Èò“~·¹ÖO¶Â•!ÿð0Ò‚[´…­. ºò˜ÚµsfkýÛ¯Á_d3DZ;ð! ɿ쉉éôJ?Íô£ÿnVž·Â°³ø3M?§­¹J>àAOÚùtèëNwVðXóad ®Æ'¸ä¾üîDÊoB  öaÆÍÉïö€–àwv6ëŠ9´½-ñ˜^ñ‹ã;ý=êSÍ]/°ŸÚ’³dg=È¿fë{´6¡îryŸ{ß= ?sP¿Ê®z1A¯&þãµØ¿ LMµÞc—ùÀ À'·`oWágZóý…øò¬óWPFª»©ø_`¼…sênŒ“u¨N¹d–YJDŽ´‡ŠŠfQæwÔ²JÙ¯²’‡Ì¡îc>ÙÝ:<æ[˜Îàüc§ò^û„~wÞþ­‘_ß-]¨ªoMýzNê°¯í°Ý½Aí>ÁWl¶ö›1­aÔ¼¤ Ê £¥> ÿ±Ôy½©™ÿño^ž(ˆžŸr†qÐÌB/­ÔÄûÒ `"ó:Žá?n1ïdj¶&èwýÌ8¦=ÕòOü1×ÔúR§ÿøBÿvæµs?Ú“n“ßé¦UƒúA7îë.úg²ò9º9¼­gVzkŸq–*ô:ÖPŇÄ0¶~·QÏæ­sžà¿÷ABõ ýdÿþ}ñÔ¢ÿ5ÿ‘S}ª–c^mcQO¼U«±æe ¶[»‰ë¶š<šüùKôø©¹~‰VÚýîUúE'P5¢ðô¡­#*kõ»þ{÷ÿô÷­*‘â*ìGOÕ¦b šC»HEVo¹¥ÌgÙ/ŠõçÔžh‹×á?v¶Ð½‰Q§`ñ õ‡g(¯Ÿ–ÅÀ†f¢ß Ö€D¼·„bµÈLtú‰Ü¶4¹±;=»†'ãÜBTä=5¯áFWŠl0?§öŒ¼þýÛÏbgÛc?Ûb?ínå¿0_÷7lßúpü‡§’O4—çA}Áëð0ðþñæÃAà?á=ËÃ]ûážÅ»˜äP«¹öQœGKð«x?éØª£¿ÊßÊë<¬æ¹ª'ï¹YAV8Û&Ö 3ƒyÄHc– {IüG.2ª°ãËŒXT¨„VK)ÊBô»?dNj-}—SÓö\A…y Ÿ/g¢Æz31ôM¼‹«yþ<9YÔºoÌÃ6ƒ¸3?jZ¨»âU9Ûí(쎾­Ñ/<4a­šSA1žhO­šŽ: WE¨•ØÃw%ÄSÝÆÎ4îØO“Zm’Tn :î˜f[¬{“g¬$Fn„Þ7Ö8"ýDömÉd¶›::ã~xÞ¨c½ñu›ð¹¤æÜ_]¥‹:ƒ“B¦×“ÕþÀÀ‹£˜2é—¸Šˆ t0ÏG”ßÜ*ˆ_YNw”òØû:0CŠy•¿ËBßá|)×5_|þq°‡„fZ}tE›V‹ü£;øÕ"æemDû<€®-·Q6̤‡bfòkxà±d‹ˆ×2sh¡såèíz_æ"6k¢/¦s×cÝߌï(6ˆùS7áó·±âHËáØ1 ”,;µ0Í„d™×°?¾Dx/äF§ÿ¸¦nWЀöÃ2­ÕϠߎt‘ob~7/2u±•ÁÑÖq $†åiœ²êQ;ÙÞGåýSxûèσ–%ƒ ï-qÂÿèƒê¶þ#øUdŠœˆ6’Y½¢ºRÿÑJÔ"Ÿ·³ƒSJwêÑɵ«Ø~ψ~0ܯÿPJ‹n øŸéú“š7ô.ÏkÕ!÷Ê2±lÆüZÛCEý µ¶Ä§ëeìBwüGùBuÓnÊÁú&yN2}ƒù£´b9æý6^<ÛÈ^þIJ4&á9ž‹­X“‹XÄoø£ d¹£Tž¤Åî·›ÝÕTDY`óðù,è_ P§AØ¿Pý¡èµeìHwè«\£ûSô»ŸôÔX¹¦X¹ ¤>x¦êØEºiÝ¿”³@ããêû"íµPk‚ßøƒZ:ráéOÿx‰µ»|Ç;mEß «r¶øžÜ.*ªy#ØåG%@Uaeì:®p¿‘´á-Ü+ì…÷‰Jô!^yxýn®{ Ñ}-îURq(œIÍ,>Ëgà}3xOè3ÁØêÁøc÷RMµK<€QhsÑŸÜ£> Ø€ þnM8þc³’W´¯°Z³‰cubì¾d #ÁŸ&°†ƒZ—b°4¶=>o|Ô c×½šß9‚·~ŸHñ“ÿ¨¦µ$Š¨Â™_"*®BþaÏ‘GÇ‹ÿÈH\Ù ,?µÒi©YFÆób5ÊÓ-ØÀôz½Ñî.Ýî_âÂŽªá¶“Ñ,'#µ|§=›Ù®[ðs¬kT7–ÄòõÇÚ—@éu…¨Bt³Bÿ¬†ž×a{öÙ^ü~%T¯CÐ'¿FǵÙNÕáHºAåq¼†Co«›]±Í®ð©™Êv‡Üq™ZíWzƒ]ÝçùïDnq\_fø˜kÌ.¬ç†~wï 8ÑR*÷Q¡ý„í/<õ[ò±aä5£üò™ó·SÚã?òƒ”=Óà?šË±ðÞwáÏ™‰áOýÇ2ð«,Ös4X•ðF~tsoÀŒ’:(\¸æ Fe#aýÕQåøÕ¼åhý«!AY7PsÙ‹®‰EáÉ’!<¢¢}¼u–éžt™?—4?”_þ™gr2¼i¡!ÍÿÈÉ»Õo™M65R W+ ~XÞzjÖD½×áEþñ…|i5¿g2O›)ÍTðh7Àá?¾ÈNÿñPÝG=É`ÞÒ®xûòÞèOk%•AS™Áõ…lã™ÕÉ1‡õ ¢¿:JöÕÊZbN0?’Ñ>—ëx'ËÒ/óéç<Áïƒ ¨šF9ß÷Dj52F5¢½¥VŸ«©à;ʈfâ¼Zƒ5Ÿ)CÐóÑ^€_Éhößµ˜N:ÿ¡€Õƒß‹‡Údæ69ä™[Æ@ÛU«èÜuD; ùõ}è¯Ê€Â^µÕË?å-µ»ˆ×Ÿ&Öˆ½yùj?”?»‰“Ï{ÖHM„RS÷ǰ9'Py þ3áU²Eiþ` qA” QÀpÜÁý+ôL|>–ßÐÿqŠ}¿’Ï™õ‡üò’Âýø£r–úó+2 ?Y«Üþ#|¢ߒØÅ3t›_Ev´ÿáÐ×i¥"9ÅCZ#¤2œÙUþÎÄæÁbþz¡ÇØøyxÑÕÄ£9a'K¡ë:Cý`–Ö|«œVó|ùvÁO$§¶§5>r šâ}œdw˜ÏÛx“dGñËËx›š€ *"¼Þ7ÉÕ\⬌ ¿±e„¾$©({;ËIžÐ¥Ü'ÞÂÀ6!OjDä`sÝ&üyZжÅáøUôßí"?ã?Fð3ŸÉ°†ñ¤L'™®þ¯—^¯Zh&ù‡Ýsk.Þ`1ûœŒgò¦ÿnŽ0×ÜMk VZŒÜt?ö¾8;jÍÈ#¡¡ß=Èüó³ðÜ·Œ fns"¶þ%¾Å üj;ÿŸƒücY˜õ.j1ÁqëéñGñ4 Áéú¿EQ¼´ÿ1ÁºHeH-lþ4ü].˜Œ³ä*%È϶èÕÕ¡VŒ/šqº;Á¯* tDétÅÔ6s´{êbb×vDÕœ.ºvMw”þ°õÓ[Ø-O-¸êØ~“I/vôˆ§¤þÃ;ˆÿX‡ç¡zƒ HÓé¹qÝíRÖó¢’ã%¾£'È}®¥-ˆS£hˆúóâJ;uŽž _ýE·³”Ú¨íž÷M‚f¦l§#¡U%¨´û_9,wØùßÌMðç‹ ƒúA7vû-Äü=Êí 8çü‡03PEÚÍAGð¯ôI<‡’w—5ƒÚ ?¼Ò敟¦Cð˜ŸÌÄñíÃèiXXŽtž_!øó2og-îA9¹Úxm¦sÔ³²b/© Cµß ë=õŽËðƒ¬RÔL&0í*¢;ÄD‡¨€ÿÒû÷ |GÝÅüÁÎD"É ÝÁ¯T˜òÍèwåi­Rô¿ºß“üêÌür*1'šOÉ+?Ë¥¼K¹ˆ?âÈðª¤þþÿ«¿óÑ×`ˆódâñî§t~½ß™ˆþ»Ù´ Z9QIø¨¶uÿ¤ôюÈܤÿÕw%zÝY2«ùÄT©cã^“ë ¾Zµ¥šBnãN&‘%é½þ»ÇµØ–²^ž.ßôó÷‡y)ÛêóðM`*F±ÿnu"õÛ¸w~ 0Õ‰£Ó€F—Ò;¾9ÃWžÊêd èÛÔ% Gø õƒ®ÄÜñ{Äu+èÔ7ŸgñÂξÂäGÍu‹ R–|ézÉÕ (µ>£˜ÿVnw”Ÿž¦{àçjÀœ‡ÃÃÕ2-6`³–.’»ȹ'jº¶ÿÁ› OýŽŠ¿˜p´ØÑ…Dâû@Å6A2°U„ùÇ…9Ø…ýp/}ȇ2áÙ:ðzRn÷2ÿñäj4 È.²¯e ÂÕà?žháM6H§VF¿ûX×9ýúàÊKðÕñ$7ÈŽéß„"?ƒì¤‡kmÞÊŽx[U›?%ÿqXIOÿ«¯zP¤êØ­;œ}=ð«"ø ®TS˜FIXÊ»`-ØÚox!»ÏÊ B$p눞KÕÛȸQÒïæ¥{q¢Ýßðö~§" ¬ôhð¢^ ±Üðש ˆt‡qÕ{AøUvQùÁ¡›Eÿβ#¨Ê"‘qÎ#ÓÈã«tPˆÈªøo·Åþ¶ƒ=­'!7øþ<1519óEX•d ð' PàC{D¡ç|Sª¹ñ¶¹Ú¾øäLw鄊e Ìô.ö¹€Èñj.úâ®°ò\öŸ€þ%á=;)èõI~!3˜…fú0±tAâýld.ö¾ž‘Õ=ÙМ¡ Wl +~sQ8þÃ'H¿ûž7±–\£ 69JÏNܬ.Ž‘Û}›üà Ûw®ÛƒÿFpméÕøIMæÎ´ÕºÉòø¼dc±¾þä?kÀé.SŸ‘Ì~]22™—ˆÎ™³©”ð;°å›ùS•þíìw*hþ¹Ý?Ñ“ìÃLå ÚŸØôC@u®!%ªÖSÆsæ¼ÅƧw‰Íú‹@srÞ—é“ò‰ÎHþѼ16ß7ýì9ý;Š©(   ÛŒmþbs”oêlŽ„E¯Ä lÇnÀËÝÆï¬Ñ‚U7öº.ر‡x+zGP¸ºqL­-õˆcÍÏhcÓ’;¬¡â]¸ægæS˜ézF7°½ýüö}|œZÞrn¯•ÒK]JF;OU,*¿ì¯§ ®o…=n׳¥l°§XŽêàWþæ6xï:èwks¿?S㘗Ÿ¹¢âaå»ö‘œùü4·dÙþƒn(dEÃÐ>¥âo6{:E´¯ã—&›yÉüÁòk¤ëý¢Þ"ÿ¸‰Ì âZÕI°Þˉæ¯P— û\Œü#6¶y¨ØüHëÏýð»8±¶h®ŽƒòuÀ »âë\¨‰‹’1Äm š[˜aÞ¦@¹_Tð z¤¼Qsá?¼ÉŠ:aïc’]Úýw7€Ê\$™KO¤{x£‘(›Žƒ¿­ƒ]éªg¿ O•S-‚ æ1xß@"A›Ê‡ÿp…çOh¥{×ÜJœ›ÊhGÄ0ÛÝ@&~ÛˆpüÇ.æô’(Í‹˜èYìUàOæÀŸÇÁ£äÒ{ì$¸ÿ؈Ÿó$ç™J^qTdø)ÿh£u—%ñÈ(ìŠv_bÕðœ—@•J’Øúþ$ôñ¨aÖÀä'¿©@¦Òo³Õ¨IÿÄ ažE?Maÿ°[àP6«©ôf$0UÓ‡º??Xå\°7@´þ¢Fo4ü˜8¾e ¶t3§ýAjÅä¢í¹ZIVHÞ§ÓQé¹F¿ú«,Ž”ŽTŽ6 l£a1¶ÙÁ+÷€æ¬àÏc®û€;#µÿÿCJu‹:Óy2?”|tªúï~K*òlô»ª)º‹›A>é‚ÒY»ÊI>bªáÙ€ˆ“¥fcdR4žïe%æ¦'ÕÎê¯à†åá²ÊÂD9‡^{‰Ö»,Š¥&^•“™?Ø^»-§¡—{){`yÚE9ÿ®v׈è‚6ƒ¯-ÉÛ<„y0'y>ñçµ@fè’ Ú†ÞD¸ŸeB)T›™tÔC$4Àóùs‹÷>±qôè½¼ƒ^U>w…_¼OÿÄd+)°q®ÆR8¾Õœá"Í}à/ É?Êü€‘ÜÀ×ׄQñ‡\é?_Ñz P® –c³.xß”TéÅaÎIf› a;ÝÇîÏÀŸß–çEÚ íöÏ+)Êå‡Z¬ö<~±½~PODÅHs¸¢¹z|çj´,õáb‘Ç’OÜd‡“y§RËÂ#œå~U Ñÿ*}:rÀ¦•æO lXJ&Ai\Ð’IF £+oú0ìw† þWÁ~^n=õä2„Däv½G_òh³P÷AOÞ û¹ä9^Ýžº¸˜<©?î4õƒ.aÞš–ZOüG)ð¯‹Aó-|¸æ|vžMe±öS™e‘ û^Ý,‹ÿ°û—ä¢ÓIs¬ßqò62t¶ (LŠÄÛÖDƒ½ãcLÄON…«p1Ñ£›²çŸÂ\%ÿxAÆ“;“:‹)`g ©×¸£. µC‡h êwJÇ÷­7zpb1P"4= ‰~w3üyRS¸±¢ èÂ~Œ )yÂøóÝœÆ6:ß×Cا©Éc WWоu&»AýàQTf=Mw£ óçÐÇé±ùКe·ÿøL2¿Ð´ÉŒèúáÜò¾ó¦T¤û <÷2½ŽF £¥\Nwà[DöïÑ´.1aíÓ€ åtÔ‡YàW.(d×ѽÀzŸ¨o8ôàùQû”oÚ+pÎó< ÌDú 9ϘdþNÕG*Ç¡¸:MÇõÁäo‚ªÑ=¨-Ž !~ú#9ñ,*6JÈÎóË­Ž&:D»«óf£ˆLϬÅŽ|¬ÑýÕøÏÔ̧¿ÖU¦<ÕBÕ›šŠŸ”f\ãOõPOЯ¹Nÿ¨ž§ž}<–©;Oñ.9›š–Ô4CõšzF:`9&;SO’ÊšMÿ«ÊLšBWý·Ü¿rOV-Ѐ„ÒÇy‚ÿÞ©Ô]!øó8ôÉí<§èí"êÌœt+i ºE³gù]¡~p/åµö’üþx´–{©¤fþ B^ðE!ˆ-ö_݇™ä’A֣ɟOÑ*Oî’…ÀÖ3+°¯ü¨VÖö z؇6¶6ˆÑÑ#JW^Q V³`ö;×Ñ̇¦«~ILÃÞ\ç™2ðTšñ"XƒñÅÇž‚™6à³wÀÔWã1ö ¿²mèqÖz×P–Lá±|Àüóø‘îð¶²A"úÞ?ØJÄ:þd4öuQJlãš®ëñGƒÉb¡âŒÿجe'w錶é§ ÖÉŒ•–Ì6LE±+-ÖóÇ+¿ª€~÷¨¨¡C¨·Tåï ²–¾øÊ_É@ìIRk‰ÒÏ‚Ž"n|ÄØ5%^°.»Éès¯>iÁµÁç˜JÍ žÉçdÓù.»‹\v–•]Æ2.Áœ@ÿ{Ev£2¥3º—ø(«Scóë?wW’‰öòyT?£ Ù•=»«.ñ@8Ô¶ÄÞ‰ 7lw z¡cø¸Wð‹È˜¦ð]tô†9ÃÜ™ZU:ìU Ûó!¾nÂŽâo2tÊ?Êá‘Ú÷õ@2íØwfyz¢4Ž2Ž¨Ú£  &Â]…‡›Å™>"ß|fþ‡­>|A.~•»ØXb«±š¾YÝÍ1ÌC¼ß[€þ‰Ö6<‡JªGp­Øeüù`üGT°OÛk¯ôQûS9ÓÛø¢·DUÕN®Æ7+Ñ_½.µû^ð)á¾ßSq_ot˜úúæ2NÙÝHÆÄÄÆè‘èkëRîkgðù»A‡¿2ä¦4èÚ>þ'eðkÌÔۯƶ$] çRµ‘’L)€“[‹º®±ŽÓ5DG€âjGñEVàüÆè½Œ¤r½P²¸Ãé?gö”e9¢’2ñvUáV~ƒWq1Ó•Øöa‡ÜŒÂÞÛé?Óÿꮆwk R\—þí:Lù2æøàÏî3ÿ<£·c¿åBøÇFRG®{!Àb§‰Sع5ovVyÓyÅÿÞYT5XÉ€8*s¨ç,ê;ɯÞPójþZ1D\V«²Êmô»ëèˆõY»«ZÑÔ_}WšÁg~Gõ–üc¢x¯W몷Ånú·ç’Yá?¢‡³ ÕQ‡·Ž»Þ‘ =ÕáWÕêøžÄz—¤ª¢f¢S”®¼zçÆbø…?w»:HP:"”†ú-áM,},þ®,G_åv°üQ©L#®â?úÓß!§A{…ÿHÏÇóY-P£K`2výùé&#¿7§•ãä*2ZÊ‚äEygÒ°ÚN|HECGaÕ·àݦÀ?¤Ð}µÈºyjð=­XçzÿèÃñÜp!ŽR ?_Ä:Y=ƒáN…ÄSyV4𠺪\Q=#oÑL"­ãðÁŸesr¬Éx¶K¼7=Ñ â ì¾è;a@V“•uÑkÊX"¼ÊÚTj\Pè×zrøáºèÞÁÇ$*¼¢uR¿ vˆ@øó~Øf»Ûï_ø)ä ¬üÉpòJVÑJžE <F· ñv .¿?Qp2Žxñúøwò'Ø¢¥x½±ø"›Y9DÿݰüG­…,EV›±{vŸ{¹lò59À¯†‚ç8@sJ˜ùÍéx,»ßú"r…%° •˜W´<̳x^ÄåôÒü»ÝCk ñÁ ¢íx N‹Í;ô/Édu´î¾Fwó!õ&þCÅ“LbíYøë§øîï².Êó&lÕß“÷låš}õ§ÔŸû˜óÈ?ú£GÊOÿÝ Ž&Ü„Ùmlz¢…­äR“Q| ßãûêH…üU*οà;1·®+Ϙ1y¦*=Ow 6c ,n }œÓ|PO‹‡p,¥uÞ(àHNÒ þ<osâØq¨Äӷí’rÂÿèƒdê,µ«ódâ‚]§v~½_Y\ýJÿÝ-ZvÑ_œSmtô¢2†yèþZlñJMMÿ‘ Œh=Þã#he^}›ð×¾ªeÕÂC&•ÉdQ5ÒÎM¡w]›Kl:ƒü£Q\yY_¾V{ie5=†ì&³`£û‰ÐqèŸþìO:×ÇÁo‘ÑÔ%†ËN„ÒU¿..\„_> s£Ë$[Š…Á?áGåÑ_Å'‚¾"1¸» ú+û>ßPHÿ*ÿ b¦ƒÌ,‰ÜgÞWRÐgž÷(¶p-5Ô[ˆ»‡ðlÒOÿUpËÈz'‚iiXÈ<Òx£;ð13Ñûì g¿úJ]]˜é ¬º†·Èžì½ÿqM>~â’ÿ¾tS½¨fÕÓ’Åÿ…jé0,Ì› ÿá…gÛ ò;œwõØÈ Îa¹î‹¥ï»â&“ï¿—ñ÷/TqúËw¨”§SIr„}¸q‡3ö^…UzId½^z$Þ½=:/þ+«¯ Ǹ+ è_r ÙbМÏtKIöÐÐr|ÐWŸjp¹t/¹7òœa.þý?~ÁC¤ú©ôíOÙ-E¢kO*¿b­w³Ú'˜ÛÚ°©Óè^Šè¾ˆÌl}RØÚ…h¥èûadÐGÉéaÞÂéÚWÔˆ¿ã¶¢ƒZŒ2â.½=âá}¼É?˜N¯ïy–7ú«ð罨4ÈN¥É%´±%ᇦ귨qxJbQ‘ÓÝžRŠõz¿>g_åÌòêÏ}©Z˃Ҷ…ÙÿQ˜gg)«/'?zÏSêž>äzMð½2“›èw½ ?}›qÄ\JåúJúg=®¦¥ L2ÜÌRóùG70¦–ìo1ž+jAõ[°¶°š²\]ÇÓ:žº›‰dÛe}åaÔ4 "_‡Ú¶½níúúTl쥮°¿ÉžÀõƒ«ÉߤëÁš=å‹È›t€{ÿшMœ_ÞØÚàùÇlr®5TŠoÅâ_³>Ó¿d (ÙÖds<Š=ÿÃüï$¨ù,çõŽV;ˆøjÜýcÔüœڱŽQ̬CSÛé±þ«ãì¼Ýs¡Žû Úû´¢™~‰Cº¾Õé?žª‡Å%Ù»Ô¥åSYÂñ»ã<Ïø°I*I9&ÐÑ=üy¦ô´r¡„^c°Ú9Ÿ,¨)ùk,y:ä ù—>ÎL_ƒ`ÏúEÉa÷¢È6dן»Pk^AÌ׃ê?ž*½´ô/qažTÂhί£Ûe6ýüyKæ=ÅnÚµ*ÕèÍe%z4ÿ©cö?ïï¦æCmÙ|Yû²XŸ*£\¯}‘㙵°€ç³’>Eôv>!ÿ´Vc*yÛ‹TÛÁ¾×)÷‚âç9ÉelÎY =J6cÿi¡ÿóoåÅ+ñQxãÓQ•›Ðñm$þ¾ÌW“å7oº@–T]F®9{£¤×oÊÒAæ’ÀXLŒÔ“*½Eä2ûôNð´WèÕ¹y8‘¢oÖ"CÄ.kõïèF{q½¾Ôk CmpÞÑ|Æ;r/þø‘Õ`Iýe€ÈþeW©­A`΢3hú÷evbôíXÙ#x¨õؽ@¼”;9hÈ"Na>¾>»¯ws ª¸®K6w ~°í¹ÃéñêiAº‹ÈÌ2úÕíèDGò5Á~ǧ¿| òž³áøú—L“÷±Ï“¹Ÿ Œ» 5ù¯šÐ^äEyŒ¶ú8z›_$ÂýÌ=šƒzw5^ÙV` > Û5n„ÖFÖâÚÜÐk‡=8Ì ï0Ñý_ø³p Š•ƒ˜´#ó?V²þ 2ýð›Àœ*Ó?1ô´'EÙò959TYläRxÈÎ2&˜üßTµëô/™ÂÓÔLôdò‡ÃÓÚM‡’T†6$»JïF?€7L–°fÙôM?á.a7쭡ߢ¯)W{ p6WWN¦5]Ëɶr†›Q˽»"o‹oJŠîÌM%P€E}Åß‘Å&zjNv0- óçyÈ×guø¢DX'Y¡t(»->O¤–We*£|Nj0¶™xr`<'ð›ûéTRGþÝ; Îև̤+q_2Þ¶Äx+©ÿ¼Ü*üÇ ù€\rÖÌa|Ãç”&oË‹míŽ%émŒ§ß­]í}Ÿ(û3~m"ʶ‰xæL7{¯*a®¹ÖD¢ö~>{x£Cä–/¨ÏŽÍ›K¯¾” M±ˆ«Èåžóyò};áÏÿÒ[…¨vþÏ^i ÈûZÀçûàgö£ˆƒ€ö7D ;š(wœoqêÏ èzEÔþ O¨Ã{ÄÏÄë¿¡’±WÌ!Z“C=$j)NNÑ“»÷ÀXF·¾'ôk/ R’ÃqUk/ó=øÕtºŽäå9\v¶/ò¿î¥…öGùä3¸ø»°VãÀ¥Îq/½ØÓ´ªæyk'6PÃF/4qôOünt‚åîv ­Ø÷<ò£ó¦ÔTæ©W©ü˜ÎUÌà·Æ¸Ò¿¤þ£5òë™®1þA 2ŽX¤+¨è ¹ŒnðK­ãT_Þã^4¡KWcÇ\ú—$t4¢BÔ›Ù'C™»»Ì|γþFîã ÿïþúÿ‰þ* 3áú9Ÿ}µ_EÎÛÁyÔÇjFm¥VM4±‚Ô}?”¶Ôƒa‰—èw£×¿ä³Ò–þ‰iy×?Êièÿ½ñ PdÕ”idEQ>šúÝeÚ¬È$Y(ä È·åjõŒæB±“ñí‹bþQ‘Œ­¶¸5=MÄÛ$çÌÜrý­¸ðŒx?øÌ79.QÉ?bÒÿ* Ö% ù­6¦HF1²…½DüáVÞb¯o‚_ùµDÔY*ø–ìWFyð«ì…†èVµ'ì÷"ÃܼáUaûméÿ±O‹á¼÷Ák„ühºVº07üä-büT°)9Q¼e•¼Ä<‰—<±ö›¨ ôÄZ^‘¾Â5Bô±â¥¦BWs„w¨ ~".H{r¬`j—É^–R‡pþcùØÞ§ùôJ–âDÈ-ýŸÓ©YÄy… m4–uד þ#%1Ù-ö´FjT‰Í™ýÍhî3”;•B?Êó³õÙÏËMT*Ñ/ç(8ÕP"N\p þ°j†IàéïØÛR™ äáFL>›ˆwéÁ÷Öw‰?c.KäE9ð#ÉÔ.òû’"CÐá?¶¡@M.”ÅLƒÿ(B-f6lj~¸’5FQÆ›ÃÜ—ÝZæ¸T[†E]Mÿö»ØÖoTû¹cÌ@ò¸ ø^x—<è¯æ±^rã)Z©)àX}ˆ»ß¡:yÕoµZd3WÈ?Š1>G©œ‡Žk²á ·Š7|p ú¦,æú)ö0wàáL2³­ðñ[ÇÜ™ aøøx2€'îüÇ ÔÀ;ôÝø­àWó¨'¹BþáF/ÚVTMK©Ý»G¤PÕÕiø žx‘îÔŸk ›ÃŸïÓ ±÷û<³#ñõ¬¬V Ÿ[™úÁô—êG­÷ôSMÌyTŒ2ãŸ7û™æNôÝTú*çåž…ÿxÀ•ž@•R̬¤‘&~¡óf3QG±ÇœÇJgèžxVe7øÕm¬ý_æaÞ–‰`€®ÆâŽz28Ê.Ký° hWŒŸ3º¡î0Ó:º¢Z+JÇ’ÚÖGújD çâ¸E·ÇAXûßɹtS r»G¾U΃Ï\çÌ?¨ü.íîyAa·É]¦ þc# ù:¼Ûs®2õƒ›˜EÏ.ãýx™@ˆ²ëøÕg¹‹·ä0ÕØÿOêÏ2ÿ£›óÉŠƒú*l%­ó6DòAQ/¡-ÕJŠúèQ𲦡¶£úÜ 7™ÿ^Šˆ—Ôà†ƒo<¿jMm^Lq }W")è‡ôN¸0ÿ¼¤sׯü/´zòBÄNûõÆr-þc¬öÕÃTìm^XáºQœÿQŠzKW±•zîíä° À‰cMz‚¸¯$Šx/ó`;É‚bFð"üè›¶D$ÀŠ>áiX¡¯Ä6ÄÞMÃR_5Ò°Ñ®ô«ò“§dWY8ÒkÞ¦ì¤;‚ŸŒË“ä¶9q·ÄÒbåz ¤G‰ˆ·ê@ì¦ã™ïiI#Y±«Vš+uc+úYS½`¡™Ž¥ÿ‚Fé_‹ïpçL“‹Øõ êÝ"ì`à`†ê]™˜|¡¶Ë oôŠŽ5È/mL˅̨"8Êa¼Çb¼Þq¸•¶¼¥).„sz)¹ å9lù<Ç÷"ð L_$;pCÜ*îcíËcGÃRuå b ‹IÌèŽÿð¢ÿÕHy5Wg¿ßa8¦‚ivÁâO&‚ÿÆÞFœ€ÓÝ‚oÑéX³´º3ßSH_/âü„¦vÑÚËšèèRcqà?üPÂm#ÖXEÇ«ô s­ïÔž5’9O¿zÉo„&z˜‰ª÷ø©ârøØ\C&läPüÇ(”y#PXGµ‹ìMÏ¿!X—¥Fjj6ìþ%É™]±—ï-kÔÃ{Þ “Øþ£#QŠN´¾ˆšÉ“øÉpÕè µ%’=0££;™G)·Cx¡˜TúÇ¿­0nÇOÓ†‡zrr…K¼ä=X™v¼>ÆfôWm̦Fú_ͦZü83³ÜɈ|¨äÐÌ–Ü™®è¯ö“ß­!ÌbþGqe¸º^žz(ÙQcîZ&ôWe­¦mùÐ?Ñ“Jù¬oÖ$«= ;üGRs%ͼßI®¸‘S_â|f<•Ëø/<ÇCõTff¦WÖßQ]£Îü>¯‚=õ·®[1Ñ_í„©)d5§ò>3W|änªîGýG0º]Ym.~€­Wô2JÉ[ú2†¼ôo·»bÞ6}\ć8/@ÿæ[5­(,ó˜ãq":ôW÷ä,§ÿ¸¢n7dÞÒNÄKëäi3¿c ø™ÜÛp¥õð·¬$ôغn|%ûËšºõ?~Oú n©ˆ^û£¯ÊÖyÿ£ÒRW4Õù$ÄWKü×üG>õ»š^Ûÿ1œ|ÞÖïÞTZj‡µfØ>Vc«Ñë.¬¢qò`ZÔ')A8ŽŠ·Úµ½—sw• ʦªZ9箣r4›µáX—™ÒV­Ñ›È©r·ZO{+é³äJYm}OÑ7J+Öcþ` ± kzˆ'¨ þ£‚±ÍÐW± æ2‘õ+f˼£Cc%1> [Ë&¶‹$D–ãYÌ*ý#¶036•©gà<hI)pž‡hªzÊÈ{FžT.2Oñ§öDl#ÖÙÖ÷$Ú_C—DÆ!"Ød½ãÀœêw´ÈÐÊÑZEžùòÜ›­‹ÿˆƒþ€zÉ3{üj.<7³Ì½œo õåÕˆ4ÁiÔMêCù™JK˜]h_ðÖ4§*J¦T]‹3دäÏ.òÄù¨úé¿K-\ýU.¦x]{6%ìh?ö<çÀû>LNÿ«ËøxƒñÜ“–è&\ðo¾i[8þc½RCt•{ÉÆaÅ¿ó¦ â?²bÿËÃxd3ºð–žÆ›l1^£VžÌîFâcZƒî‰µ/aîôŸÌÿ(¢ö |ÁHr »ºÒž¬Š¾‰~LIýb%ÿHCä< Ý`%hI)¼Ã"ƒz¤ŸøõZ òjìc&øÐl~¿Ý¿ä)õL³5Ÿ¢"JJr/~¾ýw§ÀडZã,t)üÇ`øó`–ÓÞj,Që·–ì­¿qœqJÿaÌ„‹n€ÿñ OÞ^þ|«QÁÂ>3Âæ{%,ÿYb†•ZËPoKQü‡BuÑc}øß:Ý×ð…?ïe¶CæpÌ€¯8ÁÜÀᨚfÁ(f}¾« œ½1¯ÜÌ(./;O°1õçK`Ôó4ŒDå[œ^·yÍðÐ_§Öf"ðŠø.äËஃ·éÙI>`ü‰?̬Ïw®wZ¹§]çŽÚ½,æ;&+”0ýKî  ›Dî6”ɵ{©Øx ~u{Oÿ«'üG6Îù«NA “WwWm‚mz€F¦ÎA㱸«SËãh€¸<õçn¬õŽôžèÃn³»°5 LÕŠk~áÉ<È{}BާÑ §ÿx¬nçàÏû ò˜ KÈü¨…Ö ³‡7ÝZZ3é}4ó?⃑ݠþ£ӀטÃÌ;܇WhӒƬXv^úÿüƒtô5VR|Q~}ˆl+ETEËHý¹ú]Mûƒ§Ëÿq‘îWšx­&S7E¶@¨ÿ¡4ó©ò(U"·—èw§©=èõM–¥»¸hMüjŸ6ÇC×}¸‡]ä\‚ŠÚ9 +–K)æ‡z#Bm'Ä'åð¸9„J<âÁ†°† x_úéwÄ^búóDä¯e#lãÙFÌ ñs}øI;ƒÿhsr c÷OÜA¥Ûlìòyp0»nÖ*Ó@QÒöÊÿü?åÕƒç¨y„µZ ÖÔüƒØb7T6Çõjü÷Lp/j¥{?ÕM‡]}¨V $©vòïŸÞ'ÈnêiÈe¾pÙ³=K);²¾~GÞÅ"ÔïÆG+nçîÄYMñ9º/ÔÑK‚딀ñNO}·üù Þ¡y`e—ÈDl–!/ùǃ°Ûâs©æ~òÈÝ‘ðå èžX’LÄ—Üa;ˆçlñ Ô»Zoü<ó9õe¨{¾‡’Úü„MN 'èçÕƒk‘Zp•°½Õ$¢4‘ÅV˜¬ÊDøÉ?ÞÓ“v—Ù‹üc:s8 G^GbÑ_í :>™ÇYЫðt+© VýÛë%•ËÈûx+zâ6ê7Œý(„Úšý®æ+ô»9©ê^Ä £&î5£Øâ<òL´¾éqŒ_•QFà? àwŸêCÈOÊ¢Ø(ЙΆùAtŽ‘/d° Á'´êÚÓÙ™_›“ù&œ^<ó#•íãìzp¼züã)Ú§³àWÙÍ_ôžàW—"¨®2Zcáå—Ð k 3©¬$Ö¦á^AsÛÕôgþÇ,N¸¥± OEì/QÿaÂŽUã­ßòvKßj¦t$¥ÿn:&žå:uÇQª6ÞX*þiHVmð«XæWÞñ;Ä2{doz^,rúûê øóv¬6˜§j¥  Ê\kZ³{ÔêWÇ+UtÌ££¯ ÿqÐxÁÛ¦ÖTÛ‰…_ÊÍøzDsñeô&ôÙwíÿþ¹è ²Ôù¬ æŸçw~½ÕSÄ£_b.ôWZPwÎsн¯.i1Ä]êJÂã@#þ †Z^,EE{ÕP¿&¤˜ N€gz,—ñdú—ü­}îÖF‚ä씥ÀÆÑ{ŽœLýÇÙ›i2±bYÐïŽÒŠå9±Âä¯Aoj`™äÍx2OS2 ›?—ÚºtŠ$kŠÕ_ ó_ÞiîB²R<ã6uQÜ,ûÜ Î»ùG#/ÞèUä­Šþçÿ¹+Û™‘rÿq&~ øJcTSƒ@‹Ü©“axc!7¡'™@Äîªß´~p„VOSÙ=ÐŽ8DO¶á ¤8ðàw°¡¶Þö08Ï^¬Û]øóBf°)Ô5êE™È؉7ªÅÏ%$ÿèÌO-Ñ‹°ÓœT.ÿeÜÄsL½ÛÌInƳtוºîm|õY©?¿,/ão£sÚB~UžLÍÎD^ãÏòÐIþ"sO#•Ñ;oÏéHŒçˆMfçŽÿð¤þ£·¼„_`ØóÏoð.×À뤅È .“Öè òwNw©ñ i-žÞVNÚþã2ùÇëà}ÔA«N¯Æ|ÔpnU)Ò¹ Öº0Ý­Ò‘쥫…EW‹£øâær¸€x0 s¨ÕØN>‘…š¤¹aîôNí‘TSXñ5ø/c8÷`1øÏE"dzCí4 ¢õ%;r3?“¤æ¹Il¾Àæ×0ÁÌ> %Úü¦UáêV ”…%±ýÇüгx-•™O¬ÚŽvxŽŠTœ†¡ù®ïÀšîÁ¿=å|7i¡«¥’ÈmàW—°ÒÃð +ô£tÓò4;™ÃŒ¾¦á˜IµßfôM6§ké8ò„¼¨&š„û\Á®§(Ppõ[øu(Fã©'r?ŠÃZå„uï@w’ÔWì²XyðH™ˆÒËŸ/€ñ.†Þ¶3¾5¾©&Zšó?Î*Úpaoühvó7ÞþÏtkIß]:Á;ÌyIÅË,ë.uˆ;Ð_y™UèË{‡Ê¡E̯ >ú…~G­œw¤þCã™cb&Ži‰È?’G“?Mô%ò«LÔƒj°÷ÚBµ¯ú–¹-9d"™_´´r!ôémÐúÍoÁSËi%'ÉÅÔŸßÇ럑פ]ÞQ„Õ܇^áïϪñ&æG`Ê×2¹-ë:rÈkƒš¿3äÈñAµ~ct þþ¡øû£¶_$ÄÊ'äí[ ô ü* Ñôl8ïAº=‡ÔË4P6wÞ©ˆôP¶‚^]Ãó~eÙŒjôOâüÞìuøKJãîäÓáÓ3PEœ/’{‚“ŸÃÚ×Û‹‚©!sc»âac¿ãSìþík±ùiaUªRÿñPdÐHu•z[&aWñg-xŒÆÊu¸VWãÜw7ð«óTeNç+[`Ð=ñL#õ¤øá\n:4H»Ç4<šï’+ït~î5{ra¾Â]ò:p62ðÈ[*¼p2v^ýà*%øÕ1ŠAàçHÌ@¬u_=ño%"îDtÑsö/ Zà^-ÂÃÏã\í ä8ýK‚«þ³Õ’ZsYl+ öq.yÕ9r®õ EÛñYÌýpÀñ¬’°Ó)‚æÔå7¦ÃÖ—!»ñ3réíBTüg½=Z Ðæ }‹‰×׃É]@¿«båN›ÀðOÒÿê€åƒÖë,è4²®ÜÔ¦?mªdô'ù †VÇn<ë¹’†7çä«?§ÿîõŠÓ“øw î•ÍÝFyæ×ž Š_goøÍ{ñŸ;™<Ö=Ô“óYì#ã½Ç£ÁfÒÿj/õƒ}Ì1F3üÆ|¢Ó=× ºÄ¿"CêŽ]„Öö2µƒçQbÕ Á´¡ÿî<å0¸¿1|Wm.¶õ¹PÄxuõƒéßž˜ÉLÍ5×hís ùG}˜‚/¶©©J?‚ÊÚkâßp*°==İ(­XŠË’bZ“SdFµÉꇱ"—Ä:,ÊUþ3x²ÑÿªQ”êc‹CÂÁ5Æ6Nóô¬A#~œ¸ÕÆ×/3kTT"ƒxEþÑ5 øÕ>Å—[2 SJ,uclN ò¢]ÄòeéŸx\`ˆ–Ý¿=î§E¦¡•ã)-ÏNžÀ*¤„1~%³ð.þ—"Ps-#¯YíÎol';&o‰ò U/ð«ŒÄî]È@lÿñ^Ö%ZDft.+mé|aϯµ9o<ñòÉô x¥…ÇŸgRó2µíÌýxêÝì¢$9L6Tqïè¯QWÎOÁzÀLÁûµC…‘|-%×}5œüÃ[É)êÉ«TaL'ˆÅ•‚óé€?YŠ=ÔÀÿ›Â]â_×oèµ?Ÿ;µœ¬³'¼Æyæ|ó²4¦~Ðîæ˜‰ÓÀ¥®k,€5:I~Pÿ1‹™GÕÍÛFfòÕFUð‡$ØúßáéôŠrZ˜gq»M_ ”jk© Ü`LàIf¼D‡z†I¯°3¹a•ïà[JcDZZli ùNcr•6º¡-µ¢.ªólxe”„Ÿ úøÉ@§kv‡ß_zïâ°éåO=ÈpøóœxÙF ¹Â>¬útý‘¬Ú´/=†Üu U›¾Kß ~5…É…]Œ?Íôk*«°ý^êªÞd48Ïc`mžt®j(¯:O°.þcú«~Æ 4máÏÓÀ[\5[ÒO*3™Ö ôÀ9èÿ üª»s§—qIÓÿ±mÛ%jÛqô©Îõn(—àÏ?ÀŸOdhÜQ£ýsPHýG Çnz<^æóÃàW§ÌüÔwŸ r[NÆUžçë“ü-Ļ窧_U>žªÁè>Šý¨™Ú‘›©V…QgÆ_|ƒ?L¢[£QJ §»c +‘VáGD´~ëÏçß¼¡žOäPòˆþàÏ¥?óÏgÑ?±>XÝzüG!ê×;ÖZ¦£µú7ÔóPÜ]‰¿‡ÿ¢w7¾Ð¿5z ¥¿ûÿÝß¿—Œr>Yµ´ZÈùYôV.¢Þ£~p«VZ´qµÚ¬òEizuMûª}¤¾Ê;ZËÅ¢:l-j}AôÜD?+k³ñtoQüg—±ð5ø–hüoƒ6¶ÂS–á)ZM}Ö_r¼Z“üÅ5‘}3ë"tG†ˆ¯¨NA¿w}“ÿxË;½žÞ‰µp ×°)?Èr~зI”üÇ[m®ˆ‹ÇyID¹–È.†±.`öð$ÖIAƒRð‚]‘CG´»íÊéþ*1«åGyØ‹o{û‚ÃæŸ§öv _ :ô‹ åäÿ?âÎ.‹.}ÿÏÌ9ækwwwwww×k+vwww bw7bX˜Ø](Šèÿ;ìú‚»ÿß®ïgW@8œ™9sÇu]÷}÷T등U ϺEŒŸ”H^ÃJ{cµ“0¿öVÔšÃwÏ Ò:/}Eq%Sk~µÅÄŸëNÞ±ž•¾É¶ø¦…° –æ¬/ö]r*ĉ½Y{ ž|@ ¯I&%“°¡Q‹I÷ãܬ¶ ÔÏBŒ˜ÉÆO׿²t¬mQÆwÃ[YsÖÓñ¶ÙñN§ÂñÛÈ?úK/-Ö/þâ6WjMèË‚ÿ¨„bµÞ…(ï>é^Ý—Š˜õxkbuwNçiú—èa®¹šÚ †µ÷|;V¨¬~Ÿõ“¥í@_[ ѰöÂàWÙ¨™Ž1°÷sÐïΛÊÁ„öÐÕÌòT?ÃýWÁ-eÅh‚n¼'#8¢Ÿa"Óbfó Ý@ÊÁŸCµœ[zoSýYíS”Ú:;þjy¼£´}:2Šº—¦P‡¸Åè„^÷ÈN*ûcøó.¨š*À‚Ã3ø¾gx®=úkNémµO¨+Ž'ܵÚ žâí8:Ý5àW“èlÚçSþÌð0ÛôM°ýŸÈ?ªã^¡ˆžŽi¤7 ÁŸ·´ â?¦Ñ)fþ¯ŽLª¿êF“Šz?K• V ]G*ãO¶P7žÛØJֱРO¼q[ÝЖ[—ôç6üÇ=®ô2Xc#ú«gÌÉ}Ï`Î ÒÂùâ‘–Áè¨faeƒÿ8Ã5£ &FÄ‘Zvr\oyú·¿“‰A^[kçé¼òX[kd´3›Ë~Ü8Ižôi õퟑ(%š™%èÙÓ°æGÆ>ì='LJð»˜'ÒôªoýyüjóÏ«Ò), “ãífkð«³ø"¦«~•p)”ó×DÂäjtt Ñk¿Æ0ÿº;ÿÙßIÑT†ˆ»™ÑÛÙïÁ﨩ÕUj ñ7ó<-uÔ=üÇõ¬ ~Óø3þ㇭ýK$ˆûgÙB»$ÞS¯Ôÿñ\æ”qe^1D-áxž‘íÌú÷ ê8lÖRYK³K«ÊÌóÅJJõ!YãjâõZX >"ô„¶ˆV­Œâ¹…8IþqŒ˜¶5oL}ð«! à›ÁCoa'd5,ôÙ+JŠºØÌ¯Í‰­’ ½®XÁjúIðª‰XÕ{àöN Íùá+ÞÐÇe¦é5¯·]¢RÄ[ÚðnAªá7’×\¯¯€Jãë'žšÈ×3kÔ,‘¬ØRmKD_…Öâ?sVÓb‡¿à/~²ãKð}[ƒüGbTU¥¨}!Š19ü{÷Õæ®\‘Y@ºZr½Öüï²%׸ ”è8èÒ½~`õ„·fŠÌÊ?ÐL¨^á,XRI-ÞKKq;‡íÁžçÁe„÷ dퟨ8ÎÁ£¶'¦wÆûµÃvdÄÄ˹ŽÿXFÿö…ò¬–Åkfx"_°Ã&ä ñ°!­È8„ÞœÒ u«fÓ¡½qáß{ó]WE¢ßôW…ÕöœÛbZnü þãù*`Eo@°.ƒ‘§3Ë¢5Íhä1–à?$YÏb˜û-Ä÷)艚í¶ÙÖÀŸ§£Ú¤,ɾk>Ïc(Ýa€Ù,Ã:ÆÒ\eþ‡;Ý}­î¶qP©(y]Á_úpßsjCÞÄçj ¬Õ ¼o>*ZFÁ;ù3©c3þã%•Ùç¨} 4»Ù+GõBL1߆7pñ×asÎà%iWÕà©AÖºNø@Þ…gdE–~× üj&èÿDôfïá PUá[}•ðWã Ú«ºä^¬8†ž0ƒtgùر½¶ÖŠ ObˆþÿÑUïÿ‘ž¢:•áU¨{ºIV3Tã5¶ÉÊhŽâñfëÔrÉ/êýp.7,Ôsy&,žp«æyXókÇ—³Ä"ÿ®t–Åïë‡ýNÌü(ƒÕ„ã?¶Øò‰¡ø¨›rƒõ?†Û¨OB @”š^‡ÌÍdÈŒ-6ø•+ùÄ`ö×A»N¼VU_í.³sG˜ëËŠeÁç¬>ÃùÀMŠ9èì±”š·â`ìyŒRÆR4´ŸøM«°€@“Rk›µ] ”N<Ë T[a9&ðUësvÏjÉa‰g“øhÀ¯¨Y£?×b§©ìqì…ì£É`Ê0Eð$ÌŒ’ìþé ñí³\a­ûM¸ÁP¿D5Íýr`õ—S9Ò•úÃ>ù/ར®ÝlP3ßOo‰2×—ücë¶ÄÇ™¾VKÏ¿?¢švŒ^EêØý¯FcêSSáw­m2êÏß¡lªBv'µ˜Á¯ò¼ãÀTÒ«èÑ´±ŽË=m» ~ 4w¨–ÁȯU–·µ3:Z[êÑ~²yËÜjNÄê;™‡aSn ¿H“Ïÿm,¸gÎÚùfÊ0xØ´à›Ñ)·”ðtFt{!ê?ê0UÒFw®f&?úFþ±eW9®9•ñvè4qÉé"ãi‹ùÇ}ô»ï¤5ál$Öi¶\mäµï'“iƒNϪûfmûTûi3ýwéïø-­Í ø«_Å3¹+Qƒx!Îÿ„ÿH *ÕFWòE¨¾t<Ž>È~¥©KÔLäNjuNë[uê¯Ñ¿]USÿ!ÿñÝVIL–~ô|*+iâ:‘ž(ïÅ)øO¢¤¨û‡õËÔÄâ.°^½Á¡+Ér‰C½);ikä>Y?5HwH‹àƒ¾Ü¾(³Øƒ;®Sv9æ/æçÝ ‚xÊë¿¡ªˆ £¨Î*ZŸg¬´«dõßÍr³ü£¨VB½(6û1ÈÙ/” o—lå <âw*³Q‹±® ‡ʾ¶‚ß§×éÒd)²¶c±ý"ÕU­Œ%o†ÜÇiÇŽ “7êÉb`£î³ßEømınÜ‹kô¿*þ[/ó_ûô·­P®K'òŽhw£*ûGþ1fúëGAóÝÕ£ ÜØMæ gDÏT—þ‰«Á÷š°÷wéß¾›þ%7Œ¬¦3βðìß“M­Dw“\ZŠ ü) t§r5-ØC_í²>QnA•Î^ŸÑ–çKž±b_ôW¦Ù þcœÙ܈iÆ5sr|‰èNS׿‡¾ã×z×”ä3ý°L¬:X¹ÀÈdßG%J/¸'Ø“ÒfSû,ûGørýšY–ŽZýÉÃüy~¯ðÝÁ¯Òè™åŸEè¿~ûöwZ4•“w&øUdŒjD¿/‡bª‰˜÷QTÌÙÕ6¬yÃV^õTªªBÁÞˆ~0ܯǢþ|+Qtb0òpCéÄúÌߦO>S\©ìniäzÙêhÐì}d afGS£½ ¶æªìE7šT ç¢G¼«ã>„þÙПUR– ÝBß],L+tXÐ®Ž¥ Ò^<ÓE¢Òwd9:6 ‡ˆ £¥‹ƒÂ$²´ª¯6Ó´ÑÏYý ½9 ¥X e,ªÐ1dè}ýã³6oé/ÝèõüÊ ^e+z°®ìk3é’éçñ*ñ(Óø¼°GŒäšÛ«åðcVŸáwðúñ±DVÞc§ ð‹á¸WY•Õ—¹O¤&+*É"Xó½íˆ³ŽÐ›}í„ÿxI¦Ö’5Šê_ðLÃàJ?â§V©ŸàîžámÚMý‡*^„s©)”ätH{ÝÝÅýÚÆõ”‡7Š‹msÒÏ Ø&|ˆGû‚ãŒaíŽp Ì¡›ÚRTX¿/·þ|š<÷žAÄ,q<||wòªÑ°úqÈI¬Ù×Q?íÇ·$ѧ‚CŒiëý}$ªŸÂ,ÙB­"‘ük7§¾~š¬Ç¹£™*IW3 ÚÓ{ÌB¯f̱·cÇÀ¸‘eÓÚÉuaîáõ­´:¾Zx½AÀ¯.Á-ûÀ‘ï#oøÀT×ìôÉð*k>¼)þw,« 8›“º9ÔŠï‰ æ’éF3£›–~]»IÿöíÆP8‰‰ôßmfOmŸJýGq¼ÀY8i'|Ó3Ö?Ç9=¤Ý£ž7ä%Ç# ê÷”‰|mˆRöãÕVSÿ± oy nºý†Ñý"õ ÆkvØJï…uþÄõ¸ñÜûȯŽåzп}Ml@ñ'„v¾ŠÒQ¼"­N¾pRŸ#=´nFú—Ìb.Ç9jþ†Ry¾…ª?z Œ :±³Y)‰qŒ@°no2ÿÃtOR´õÿáIýà 9µxÞ¬Ur—‘‚Šý½ð—a÷+Ÿ'¢ÉCªÐk˜›ô‹f^2ŽÔ~ ¾ò—ûˆ‹kãÝÓüOòôJßðÙB3ÇCôƒ‚t¿ŠOý`Y1‡ùç]Xå®­ þd‡ Bíq¤+„ü†÷¶*ÌŠò“*˜CÍE¼$£ª<^ò‹ˆ)3Š–jä½ B®ç¢ö€?ŸF&<4¸€Ä„·\ª7¾)ŽlB.šSë)‚û¸„üɰ7EqSÌ&¢÷áYÖ¯$ˆ~Gøóõ¶‰ÆuƒLŒ×ëAÿÄÙa8œÏS‹"ÖåÜûZ¬Û]"ðhÚtâÛ#A^å…Å Kf^v•µ"}6GÈ?ü@°üåUlß:,gs*6í¯£zM))úfìvg¬YnT49#Y±?:=DZ °çûñtäÒRàÕRaO’`I¬J]Aþã(Õžèw‹F˜Ä"p—qÈTšreëñd3|Ó ­¼î×Ü%ô-4AK‰ëwqõ‹ÀœÆÑïì³z*œû–^I~µ‹lc|‘Ø_>üTìÖßþù=¡æèwÇ€4t?ÒPÞÇçyí Ç,„?oïD¼nUcÜñª’º)Öý-ìu ø)Ø»{d….øÎ¬‰ªv.Îoþ£¹ÚXæÁCÇ„­‹VÕ›LÕªsñdF.z´Î¦2¬8º¦ÔFA4Neô¯ gSà"¦ÃŸÇ >)4Úd³­Ç(¬‘½ëZââÚuî— ’÷¢ÓÔ<’øÉN°¨*àWÃP7dÄ:»Ã×TЛƒÃý¤ö&äM4„5{y §!«µ?|@fpÀ(®èsá§¥ý“YÉ^ånE¦¤B¡žïW¿‘Ül“Ç‚»æY릖ôãÇ{Üqê¡/×Ù…~·›QfÍ?Ï ³¼žiçõ¥è¯ƒ1UÅÊßåjÿ¦ª¿ú«àùµÎ¶ÊrRônLhEýGIôRû™ä÷Á(o|€l!ªÖëô3ok}Mš+Xs>5÷ç`|œõÌš«ãrŸ£^;MUÐ9Þ|k~­b°€i¸g©?ŸÎ…NU›à?.ÁW4¶á¥b£»=…Ϝڡ6Wã%³†À¯+CÄ}²Áæd ½ôìr3ÝsÚ[ÃÔ¢’± }µ’ÚÏ1 ý=|ÍD>h&ášòƼ"›ÿ¶”)óþã±r‹I=xJÃxÏöÊ´(­Ê¡Ð­K÷ÅÆ[f|1ØgÏ4 C¿7ÌOêÚç¹¢7ÒâÏ» ×Ž)ÿý¯‘tuœ,SÉño÷OÌÿ‘Hݧ ÅÅb·Ðw½zþã95;Ï3*ÄCã0ߪ»VµÉtoï­4‚ÿ8,cI) ¡ßý3?·Yí ^³„Lc,~$³ßPò«÷P^%“drlYý(ö¿ªO| 1—,æ¼raÞAÎYÇ=òk%oú¦=åS£p©qé¿›{ú ¸»t™È<À4ÎZr’ÍX®ôë<ÂüÚÈ{F¶]–—™"ÐÂÄÙ©AޤkcðIËР˜fÏý ûÂК{¤óû’œbwÙ×I:ævÁd!–‹âòŸ²üj-QS\} ýCöÉóÌÿˆ¿RwåžL à eÍüÄŸ/ij1­MmììN¸ŸàVÇñ"ù΄ðáù"Ô*<…˜pÙd YÙ­\(º\"^`¹[êñÉj£ „¯?‹gŸ®ÿØe+'zÀÆ'§wR ØlOÞåÒ` L§‚•ø†Þ,Ý×}¨(ñÀ~úñŒÖá•[q…µâËoõƒMÈ?˜þA_°å¬˜Ÿù7¹eâíFVbÞÄãÅŒ£ø\X¾,dsq`±c±Àð5gعÐGg+ú+…ë°4¥ÝAºÀ6ô¢Vü+ÛÙHÿÝUL§[E¿ªw0ÑaŸ`ï'¡Bm͹|¡l µâ{ÕÒîGP–¸#üÌ=ð«F- ¥Ä÷¹À¯ŠÚ€ •‡aØBý‹J~t’»±\¿€îçz–;Ôa¢4Ýšq<4îü¹‹1ŽnëͨŒaŸD½ø˜ä…ÆNýµtïɸ*“ƒ\¤Ø0ò&zÝüG[ e øÕâ“¶°áå@™ üDg¦ÃÚQuÝ2gÂx䢯b(Ò{cµ™ÚŒn¬B¥0“Œì>kWÃ×î³ÝTœt2nÉr þÐH×’ÜðçWTû¹˜]°û }¥VÐå1€î„Gt2[šrdS^Ì?®·Ï§Œ#ÿHI6Ø œ¯è¢{Áä2WÓiÄ‹Y^“©÷»D/Åh$Æ3 ½»© ¯ÖÏTÛ#Û+Ýa@–;üÇ å(þh8Y¢õLüäUÔÀ‰P×1®§ŒxÊâöô/‰Iÿ«Õúú'ޤ>~©áÅ;òR®" n¡ÿÐbÊàŽ-!ŸÌÿíljáÏ9NB"¥´’ÁñÙŸýf«{IØŽº¢šøÆ¬@›M0áÏM½ËL©T%þ:WT©-fà=îÐ÷É-«ÚWé­Ä†ëNƒ©JþÑüöyM­Bâ£Ò“³rÔ îRZ3Sº€V˜¸>~¼­îP𯮼]œæˆeıVw’ØwæÌÀŸä‘›°úó©W™‚^䚬FÝô”µÐ?ÿ-…8%’ÐÇÔo‚)Íæ ÜŠ…Óp‚ó~œ"ú‹ò ~3}¤×lWNái>gà}žCŒT ;=h~õ ‰°Ó&þã½´úïž“Û#í¿»\m„µhúóï–á u |$.jà®w9wàÓww’'Õm‰Ö.üËþbû¢¼•™±÷ƒÁý¨´‡¥iJn³‰þWî0ý#ˆƒ}±ÿsðJ.ø—ÉèÆÚ0 ê©z&œKÐEF…íPàÇ˰Çíèw j©ñsïøéUâµxL¤Þ6ÜšvØž\!6ó­Ràgz‡“xÚ ¢¿ºL^5+Œj^s6QüB,5™¾U~µôèù‡…4öá¿ÎD#{Å_ê÷0;ìHþ‘Œ|(%{p¦ã>Ïr#Ò¼ôüFЦ.ôüËLŒ›„)„SÁ5ö9 Ë; VYÂù„Õ^U¿HI–›üj,=£VÃT†?ðƒ“q¥‡ÓyòqæI,r#Øé†x÷b°×ÈVrP9_]ê”POå/Q‡»²‹+ÉAÎÓCg޼1. ž ëZòsôß­H4ÿ7^`=ùG¤c|ït0|4jÇPëIPœ7D;7à?ÚëgÁ¯ŽÓ{¶>xØßÆ=°¡œTå-•¾ªïÃâ"§kHæq$(;[ÓP.„þªŽm®²µÛ8ô»Áá:JW꽌*Äó…ŒcÔŽBÁZ•qQ³)Ý|ÇQgñ¿[ƒìèk–†¿:+—;žÈÛGõ ìÌ9žçwÝÙ?ûô°æw˜ÿÑÍòdúÁO…ãw§úo«1×\ ÞÿQy Ï9FÛ*ó…èNé'>‚d4µž§«²­ž[•rs¸w'üÐfêv30I}U Í”øXÆjƒÝÉîÊç2–6Îá?¾)—áÏGh£ð Èh¯ 쩨?¯†–ëw­“ÙÊ>Æ~½€aúégÍ^ä9ÃyV¾DYÏålEAžÉ‡ÿÉü¨TÊú9ýºÕÑ•bJd¿¾7ìß…é_RžyƒEOa¨–~÷­¯z\õU¿ªo‰IÝÃþÀ¿ü܉óˆ¢ýÈA’ ùQ¯TVIMÝq™XÅTqìú_.ôÏœ¤Ž¤ŠÁ•ÙÇ ±måDyŒiíþd=Ñ5U±j$Äè(­Øˆ:øîb5¹Ñ8Óî±Ë뉓ã‘Áo峺èË3ã†É2bn¶–M…89‰õKd ËQAîÖ2à‰6£…œ@q÷•Œâó£ÊDºÃ£¶Ÿp%eLl|RÝêTØDm Vu—V…7â±þ"¢–x'XЈlý¯ÏP-æ£ ÷ì¶:)Wü]ªÕ=1ñÙ» Äm)ql|ý$ñÿ}ê?J¡ÿõÓ¡ÿvR®)2'Qj?ü‡ÅâûËvtxܬÕ¿j«m£ªì)9¹Õ™p'×muIÿݘÂ;ôBAŸ¥U²ž!ŸšŠÿðÀ¦åÁN¦äçRbýÈ“â+önÊ¡¾xÑÖxhþ<+3å·?ÛmEÅyQË@ÌY3H™<Žüc6±Ázúü½)î…7‰AÏ­xžpèÌ€`ÞMØùQUéßž—è"%rÍO³† æ>xPª5ÐèÐ3Öb»  ôRøâìt¶ªÅú`÷~Ë?Nªzµ†ðçÖD¾uú\¬õt=½‘” d1==Îá?–_=Ä^Õû}ä‡ÉðÂûÕ¢ÉdÍ?LÿöX¢5z4ÞÙñ1È?Þë ±ré¨Ò|(¹ý=Ü;£·­ƒ¸L–bãJž’},c<¨y©¡{éü…ÿÀ§=KiÉ)ÛCW•íT.аͥ`¦™ mT«¦nX]N†ÀÇ{MíF_PMs\ímC”]œ±Q¨*ú_õåLEžÐœª ü¹'Ö9ŸYžü£5üùúïÞ·êBÈbvÃwŸåiUÐU-¸w©·ÍGõãJñ¼lF.Î ¬£ùÚÌä–hÒÝv3ëÙÌSè¯ÀöO§ÓJ ½gÜ¿ÉÔÅ’c§º Ò‡È¥8þ·¹Ö^¯%‘S¥¶o¯Y•rV˜øÄxßžL5ô#£ÛGa4‰Øh /+x¡Þ ”ÁüÇå¢À æ½h„ž'“ë›ËAÿVÀr,Du•”ùƒkðé ­ ÷dJiÌ%Æã¬æ ¢ÖîÄ%þZRùg ¥ß^ë ”MJpgI“:¿Èñˆ~Mqå©’¶£²((>*–~W(]é¿ûA}KÿöXʾˆ~0ܯgF5Ÿøô³tu?&ު딣J:;å—*ùG#ÕÊp¢þç©ÚërT¿ê¥u‘äFæèX•ɨ•êP‰ÐR„®¨hí’øAâ2yÁb…0¿ÅÀn‘?î$°8o_Y¾+ƒe¼(áWªð¥a;Lý8X}‰ä³áB—AH¾ÀŠ…My"ïr†#ǯLÅüÊD.mÍ.âîÅ a“Pæ»iÕñ(gÁ\¨G\¯³i>jdÙ¦‡Ú¿Q“u¾$&.@Æ`bŸrby|‰úWã‰6`g=yŸÞÓÿªk„øÕ7ò¼üþ}ä}¸{ØAs2›ƒàÑ/¹Ö=øWø¹•xÏ›ø«£Dù.Z3é§÷Ö ~*Y•ܨ`ÞM·Ú†ç­ÄÊ¢=¦6å@bJÅØŠŠ¯âwtÄó¥â)çÆGoÇ\³åàŒ’Á™” ðD›Y‰È.36dZ¦DT!v§¶î€ÏÁB¬©'‹ñ“Á_Q.ÜÆ6j+P{Rª¶Ãk\%“Ú¢'[a:ÎŒ&##ú«‚ÔŸÏ·l=z-<Àâç’Z“ßò7ÕOÆÅë–Àw¸’¥, Ö Cn]ã tžÛé»Ô¼®ßd¢ú r¨h(ÆœŒ+ ]5À_jkÊìP;4E#²R¦w3i.þã¾öRŸã½K âr„Ùç: ]É?ªýù9Á×v“ϸà½îóTî«-C­÷NláÄÝ!Þ™.µZÛEUÊR*æÒë ÔØþ…ð'àÕßÒ×q8^f¾x?• ë¨{©&Ï9m}ÛŒ üj1ú«AøóÎTÛešÅçKŸÄ=Æ&–¡Vï*úÛrèy7À:Ä3–£¿ZƒžëвDúm9ݱÞuú_ùi:ùÇ-µQ^«&/¡›ª ~U˜þ%çéß~›ú t­7©úžÎÔÙTtêòæ©§?~Q}‚¶]f”Áìhz°õ áå9Åçôò‚¶šþ‰™Á¬:\Á3½ 7ÏüZÕšˆz >õƒ_½Fæ¬Ý€ý0˜—ýkƒþÊfNòxb¥ÎÄRåú_­¤É`îÔtÙŠÙÅ>ß~ –¦œé¦¿‚=¯IßÇ9䛈gáS?ˆ¿ü/þVY.ôëj°çéŸýújÔþ.~•¶£žh*ž)5Xå§­ƒúD}Ãô'Š“r"jËüó»RÑcƒŒ¦E'Feºœø nA7›”:ºÒMD=µêíó¤ê }L–Â:Íbe[¹†þ»²l·7ÿoj#¢8°8Läßâ 'áþÙw°’þûMîÁêŸ'ý,ëU”)Å¢(\sBqBäÂzª¬² ŒÃÒ_Õ!ò]ÅÛ8‚Œ÷&˜þw2^?xþÈs®xÊ}yš B'¸:´:ÄÝÍÑ–Í€•?ªÕ WÅrÝU`lëÐnh¨hFr·¨­ƒð«VdVÞ0çcƒ­‰Àbë7`‘—Ã@E{+ýV>õ#œ •·J|ôR»ñà݈ßà?ÚònbåËÄs«±)WÀt]P6]äîzà›Öò¶û©Ç¹ù™?xSúbçå©f/JÀOÙ@lììä#–»3–¯'v¼‘Bü[1ü¨[8þÃÍ–E ¦†:#Ñx!²«7øð a<ÚÃÙñBÍõçäǰŸ’Ì5ìsOh¨¦ÈøêÏ0;ì®VçÜÖÒÊP·„ˆø¶a#ï¹7zÖ°©‹‰MSÝ—E5ðÏÜ—•0¿;@ rÓ}eS˜çrMðXuy¦k±÷ ð (ŒÉf>aƒçÒÛã=7ZÓ÷õâÏðšÑñþ¬5þ`5*NêôP+:‰Ä>GàÈ Ñå¥üÌ} ÓŠ&ÀÈ Ini&³W16Q¿Ñ‡Þ„YxÚëñ~óÙ¥çüL˜üßÄ÷Zó£Þ`ñ»£ßCýù.&°ŽO;OgÁÒôÙ~5!h~í'žKk<Ç#ØønøÃ zuyÁqÛÛæ)LÏ»N6Ó n$+º©L•Õé²ßð¦V¼"+‚ e¥GÔbfq%56°â滓?æÖŸÈ`íãcÛ%õ zû–¥5Ò ¾|¡=Ò3‘45gÓe¥Â68þK¬³ 5¯ÜvÔ±âü¼‚K…ÿH+ƒÕ™9•ô¿JA]Õñ 0;¤U·¶• ¢5òR“úÁAL:½(;‚ÌŒˆ"~U•úóÊb+ê+O,f7êÜÊ Õ^ˆàDWÐì|‘õy×çÃòsx_|\qT$â]Ž®ŸÇ¬CÇ»5Øbm)HL/XR©W„)xÌ”öaQÈ?ŽÚîÁ”xñéð-`Ðcb?nbïJÃZœÆZ§n-¿¥°ö"Ò.ÆëðÇAþêÐïüygº³äÃJÄã±éÞì>šs\Δ^.ò»¨®äŠàÉ$SN)~2YQoÎüj5l¬WŒw&–"1‘k òû“0ý³@±î€Š­!7) ~w–ÜéCæ³%Ù!î\úæ"K À÷–SÅ=,m#,ßô^–§O·ÒØÌ áøcàW}¥lÀTyÍ—è¼*O5¸zstkõB¨ÄÀŸ¯§ÿ•'þc³y‘úÄ*ä½á?²2£õþ®®Þ‹;M ];üª;ÑŽ+› ‡}]»Cg‘†3ùÇLs'܇ݞÓ^—ê’âä§é颰·[°/ëÀƒ|†žE“™è)(üSôWÍõåØÕthêbôÒ¢ šŒµ÷¡²{ˆÚ(ã£á*U—äÞx(k6¤Š"˜ãÊþjžrŒ~o4T/K¬Ÿƒ+l NU~WçÉ?òšÉ©ÒsfþÇXüÒur¹­¬9S·Ñ³¥Œk¢Ms¼r‡è_ò”3{˜s—ÝȦ哂'Y Õn2æÞàY|57¢žºˆOw Rs¥`>ìSNã44ͨÕ<~·¯ãTסþã›´f:÷¡Ž½œÜ@ÿ]?jÙ]àôßeÐÁ æ $ÿxfL3¦¢ë-H‡€DFtý;QÑXX¸CăÁó£¬þ»ävמ3¿Ln bß­AÔ[.¨ž›ÐÉw‚Ý…õ*˜wôëøÎ”Ì·šd¼áÔ?‘[ØE-4åÿ¢ÿUN¦!MsÜ©”ø·ë?r¢ßM¬žR«ŠéB¨uXóZPýÇiU§ÿ®©„§¡q<âß>xg«Cý`t캿l¤-1EOp¶×ôOÌ#cË¢—Zαëß~8œ/ìQûƒ`ì‘5°ÑûµÒUnQjPÓÛR[k1 ]£8ÿ£¼²ä}+¸Õ=âKÐ*tMˆVïŠýd çèy¡SÇ¡F±z”üGlqU8lÛ±›±|ïðp:§l*ÈUwØ„zq²™ w“Cô烾äCýÇMyJÚY'–ºÈÎ.€ž”†>Dý‡U«‹±ù%µË‘újS¾³¾÷×f²#•8ÿz«ïXQX‡yäît›8AnrO~d~TDþ#ŽrZyƒþŠþÇìk7œÓ ôWÉaRã×r0_¼qÔn²¥…<£‡øù]0!Å¥]÷f ¾î¼øy Å5û|ï*˜”ŒdHPéËâ9‘W˜ßnøùμíéàgcE«ÿ8ÂüónÒ þc:(Òwíþ¦&˜SZlH+°¹¸zAê/ïà?VP£"õMä]ð –BL‘þŠæ4öWqÖJp·÷ÀAäc…†dS9ð>éX2.À[x‹î¶åŒ…ð#?ù·¥èÏv€ßç¢þc]˜õ ñ=•ž<K <•Œ5#ó~-ØýÕüGÞRêmä)í3Þíä0]™?xÏ8rw+ãó ,÷ê5ŠÍú¬º¢Ô÷~QÿñN96ÿÑ…“»V®7Êõoï†&ÛŽ&¸®YÂ>Ö~~_yÑïî2ÿ2KR?˸Oþ ]ÈËÁÉÅ’î¿6ø_ü; ókƒ# ‹ÿÈä¸O¶ÒŠÎüÚƒj±ZhAìÄe[+ºïz’ø)±ÿÐ|· â?b¢=ªÍüó/êLòTg!ÿ("ºþaÿÝ…ê4¢ðÍ` ‡°w ä¹\É©Z]/ŸW…yÊ„‘¨\q:Ñ5ëQ*ÞÄvTG(‡î­=Û‰èÎ`wžÉ DêÃAÙVFaÁäÌ?Ï»SŠí\Å[x„ߊmïae߃sgÁ|‚¥ùƒOÑ<ûây?i¹ˆ’›CÇ k`.V“üc/Xé>NÝ|bû\tQL-1Zmƒ-o”œåª:Â$…£¶ã‹bau–°òö^߯uPúÓ%ÂÎÊ-ÅG¤:c ïÞibƒ¯ÜÿÆØâœXŠø`MA@â3ÖbÙâ–å@Ì­ßÐJ2ñÄ)µ¾ ̃}ä)f„‹yÅüNÿÝ» G]éÙÒ/Õ,09onFòÛáøUàWÎÔ%ÿ¨Á•Ýç T"^MKß^·úÊ–çþ=Ár»ß8ÿ¯@IƒzÏôV¼S‚§¯þc‡¨ÿ(®–±œüã,¶a!¾=(øÕ lÞO:_ÑéàÏKR?ìD¶T{ïNþQU. s¯ª*ÜNÔs XošÒgô{ñÃ1_İ£ŽÍGò]ì®$ZÖ!°Ýéa×oÂw·ÁÖüÂôoT›cwÎÂÄ'v„û„RjùBo'ŠY'¿QŸôkƒ¾Ê N²…_ æônÁØQ[í4ZqN1ݪ žc¤}±YžúWúôX¹ñÄ+È?­emNý`€ø3…Ò¯ßþŸýkØÃqg$½'"StFôûJ“ä£~°‘ ~eeÏl-©?÷P ñ’þ%'#úÁp¿nWÚ0ÿÃÄZ}ƒóvOèÝ]ù*Îщ?!ø•³ZɱëpóÅ5êp,énYï’CÍÇØþg²5sf·ËŠ`=E0Žæ‡C}Z•7±¹pg¿@þÑT§ü:hÄ)¶x)ÖûAÿÄQê¿_°p6¸ãMDó÷‰Ìsa½&à‹êÄžD§Rûºl'­ªÌýçüÇ=zÄמS­æ¦Tnwìëb8n“¯$…Ýü)§a£Sà?’F²âTµ>ž¦.~ã.Õ‚‰ñ˜`@·ðÅ› Á^ò¸–Rg²ºvYÞ•”Œ¬M¹©¼“ õØÝNøñ”Ú'ô»%á¡Óc¯“¢mD|¶K[À]8Œ÷\E Æ<êÏ?ªÏ¹è‚JJñVz£¥OþaÍWÌ ^”˜'ð€kû!ÆÃL¤ûÄ?üG[<ô_Ä‘ ðvîáø¶ü𞨠˜øóQ\Ï8tKÙ•Ð_“K”!ZžJ´~ ¤ßÔm2w·#'À‡ú°ý+¨=ñUEÁ×€eóiÏuf…ÿ(Ör +¥`ûÎë)aÓçÃñkÔ€,–/%ÿH­µú-ÿ8ª*°E-9k³ðpKÑ_=ÅR?¥¾í*JYIÏæ|ó!ÙQ~ã È ÿñë<5’…±…Õ_½Vk²÷SÔíÃoõæé=×ÇS…ØNÿ‹Ùì(FýéšÑÓØO‡®.†;÷äIö³Þ2°®=ÚµC¨§ì'<4…è9*5g};q¹ “{Åô&Æ3s ýÛïÑÉc3צZøá±Êá—=È·úâ«2#ê¦ã7¥þc9•ÿ“ÉÈûàe:Ð92)9[3øt¨ºNa ãA^ÓªÕñ3éÞýUSvçO>–C/«3Ö±Þ]›§zSÓÈŠiy¼dwO´õz)ì|"ê?<Á¯n²â üG"j?Ör/S“—\F™6™ÇÍ9_wàσ߽’J+ê5Róô{kì|ýwïRå· •òEØÕø#OjT>áŸf³;³5“ÑŒúG²Æiti8 B0Öá?+ˆ‹Éñûsî×ÉåT\º0E· ŒW‚ÚåMew7u{Mó°~Ì«¡9Ô˜n|àÌ…}éÍÉüLÇ…?›Ðç¸=ÿÑ)¨Kî8 ј~žÍñÙŸ-\JñWŠ¡ßm$&ˆAÖý–­…z’‰„:xVteÿ-Mi/ÖR‡À¤àÚFá©öPª)ÔŸ§–ñd%Ñçõ»sð©Î„ÿŸ&ÒLî¦ÉkI&W“/$Ò&ˆ`ï_mµ¥²\©„¯¸HþÑ q“¾ÿá'v&*¹,+¡ßí)kŠùÿj¡þ[L±]$‡OþÂz{±˜%ô5x³‘œ³KØ‹xÔÜ…Ëò.u*õ"}6[é_â" H‚ÕW¾.ÖØª??B,Ÿœa?þh˜àXll^í±š=’G©­Àäs¥×ÙOBþŽK=ÊC¬v4,Š«oÂ"ï$²>Äïº+ßÑ7¢5íÊæ×f%+ê‹ÿ8H6(;ÁMg§‡ñ}Ð_ã·-ä¿£ÜõpâKèµÿQ o²sn%>ók¯’!Œƒ½:‹ÏIObç瞢±z&æ‰ËÄÊ­ÑïàMoŒÏr [o†ã?¶Ú*0¿ö8Ül,®@OÜÑþ|>è5¨X)­8ˆÐ|øŒg¨,}Ãp®¢OîõN~ažtQµ¹nATuëÈ‚òèžìÁ…lä®,j©ñà9©ŒKô¿*l,Bã£0§}1ÈÙ<|Tl­y´ä oQ£a+°Ÿ™(Ä–Qz›üã3øÕ&:þ R¹ ¾U^y"Jí`4ÇÉ—ÊèíÁ›B¨d¬ßX™å8ý9zOýžöZ7]~$ÓÀÒ¿$½½¨P!êÜõ$ V³á»]Á¯¬úsú …¼äxò"þ{²ò`SµƒtåZ@çÞ6LÈzOŸõÌôkñ0ÇR+¹ÿ¯—Ç3xãAFÓ#¸üypýGyú_¤ªj$ÑÄ`v7€~‰ù©bÌÿHK5Ê9,uv4¬O©ÃNmÌF¿ëdƆYiþAþQ̉ iŽíyÙΩ¾ uàxÉŒžšÕg qOƒWõ!Ž_’µŽ¿½-ŸvÆÓeƼgo‹µô/ ®w)…þ2@æáDµÓÖè3eL}ª‘Üž€þù MOò¤)(ƒ÷ÃÜ¡ÿUÔ]ƒè”éi8N L^ÚxìÃ1i£'Ó¯ >UÎ ±/Þ‹ÚJyËHhA'ùjd»Œú°2¨?¿ƒ¿Ëe.Ó“ÃúBÉ6†üý“Ÿ©Ì‰û?éßž˜úÁŽ“ðÝ–óß®¬ª(É?ZŠI"A:ê¼íoôX^è¯T5™rð×íŠÒßvú'n%ÔÑ\ÖÐNRÿ1I)ªØ¸óeeYÿñ«ê,¸©-2üÕvj ÆËèÅȦZ_¹JÖ¡ölbùóªô+®)‚[…“­€í¬@5Àªv‚†ŸâLDÅüYYk@"¾è¬ÌJV’˜èÍ+X[š‰Øv&Q~ÞH_ìâGùd¬´ªjþõŸý¶7T\Díë_[7[EÜêŒ=^ ŸµS“øË Xý¬Ì?OÉŠý°3§Èaš€—çª:àCâÂÍ' ûÁצ°c¢M²šÓð‰d ó?òG°ftú'ž#ÿØ +S¦Ç &»6­Ã¼Ô’ÑE´18Ö1ð+ ]»G¦¸ Þ¦”ü©º‡sÑÈ?‚_¥=ÌÁ÷Ññ‚ Æ¿´ó0ýûQ3Œ7°=½ˆ"ûñ-Ã4;†wîm8þc1ýKÈ˰ØSø Á³ bÕveì®Õ{¸žý±¾´åøÕr|ÜH0±ø˜wôO|f‡e˜_[Ž¥AS:~›'< 뉮¸)É?fÓ©µ6*ú݉`$ÈM–¼lMNOþ15Ì=ô ÿˆÃSÈGEÇlXìðCuƒZÁML„ý>’®Uçð˜¥Q…OÉ-=‡½¯MåÊjôW®¡V|¥Ö{;FþQŸÕ‡¼TÐodÑaóÅãÛo™UíeñE¨<Žw{§mƬ&[ñ"fzÆø‹ãTå]ç´v ê8¸ VfÌûPjÁ-¢_Ë6¦æ­kþHÿ’.ä“©§qŸÚ~Õ3ÿQÏÖVYAF;Uq²”Ž2¿–œﵨ/~É<„†µùB{3;5˨ÛH~õ7ÈÞ7”UåÙA‚õƒ×lÇÕ Ägîä”™Œ¼ôOLFmLsú÷VeGÃÑ2<2×³Ç øÙtô¤Ãã X¤BdFñËx£³ÊŽûWüÊ$oîKŒqZ¯Iç7æG•âþ;›·oèÍö ‡t—¢ YR)ø©Ôðç_` ™\/çÓ!â€Ã<¡~ð•ìÕDÊMn$ÿX…Ö =U#÷Éfþ¦ÙDû!0ÅŒæR=R&Ò~¤ñ‘Sé+-죶€þjw˜3øßø4hÌ ÇÉ@ýyd½#ÚUyå§Rš~W•èõ‰Y~Õöã‚úB}ÆüÚ?Cç¢)íÐ㿦nÎWÆÖzˆêz¢Ü'èþM]Ôà|2¢…üúau ÈÒ6™›¸~3%ÈKJuõ©ì‚Ö~¡LÏsè(æ8îCÈŸ ûq3êP:à+<±ÉÍÈ΀¾LÄ" 9/âN |½È[ÙEfÁ3˜Ã®üyN±T¤ÀÂ}æÝsáM¿‹=N—›‰%‚ÿ8BŽóš..Wd÷(ðçÇlžòв8šutÓÁ(šÓݼ?Öx­V”„r˜îŸr$–_ÓÞªøäùg™Z[^ +lVå¬þ©P8 ЫDå ðŸÖü¨øªŠÚ~æ×¶Ž0ÿH©\Q>ËäÍÙ×&2Žo²7YË6Pp:z UÔorWW  ÞCŒ;.i,úÝâl8{,£ÄE¿ëI>5 /î S’ ¥Eqò¼…•äjq´©)ØQînSø‡ÌàØ À¤¶‡ã?Ãt—Gx–cˆ;%ö~ ×lñ®(p~À}ŒÓªÁ',…Ïx€ÿXOf4ÈÏ™+y+òüÖ?±ýÛsbc²â?FáΓ«Ì»¿š8,µÎ ŒC|–Þ˜é³f)¿rß,Òó£ÂžÅ‹jLîW"Íü·TŸÀiE®ð½Ö&º»>€ÿ˜b'¿)ŒrhHe"¼Ý ršªäã´—JhþQ~Sf£×ñ;ú—TQþ$3ú«¢§Z(Ëzá%jOì𠙈ˆq<>c ¼‚~÷¡ì§U݈JÓ2¿v\”V¬c”],Ášžâ •sªF¾Þ•.Þ'Ñܺ¡J]Ìz_aXJŠ¡7îgqÄY‘…P üÂvì ?qwJbÕ¹ Fðt—õ#ï:ÿ‘.Ò· zð>÷%9Â60Õ¶Xé‘ìÕU« °âíà¹ÎXétÚI5^$+NTk€”4 ú¾AÔ™Odâ/4]k} [¿F`?|ÁVyMd‹M¤œTnÊTø¯ø]wòª@üwM2¡ŠT"B¹Ó˜÷à×¾FÞÒvõããtòS¸ý“+éÅ)b¿Ô#ǃ­âÿ³¡\»Luüeº*/·‰•[£ßíÇîÑI€m€»YîüóMÌì.¯ÁõÀb}ÃÚôãévEYuz5õ—–ýôÄÖë0ÄK8Ixç+iî"îoýKšR?X^&'Öq õlçøÞÍTƒ\Óó‘w Ò_•4ÞÁ¦06ƒoI¦©L€ó^‡Â).ºÃj÷©6X°¶Z|Ãd¼Â$âQàiA\éß~…š·ƒf<Ô«å‡ÄôñÁ¯±×}ø¦Îx®çœÚÇï³ZŸÌé4øZIðµn0 õ)Æn£¿ž þcµßÍ’ö9Æcú¯÷6ö)ÄR]²Œìç,÷øl˜þ%IäbŠgœ’ŽDìWá?ö¦´7Fê-/Ôvç€á_JÿÇü–÷ÆX¦Òä —èVßœ«³Þ5DþQÆÖ^qᜎã4ÔáîW—µ÷ôómOgÜô«:H¿ªtpÝÞä ÀµV€C•5VPQ2ŽüãÌJA=qˆùQÞ¶Óªš3ÄÂȆÿ¨¢·2ºÓ7:ØT轆ûžŠj õç;Ps½¥Kü4gcAë’¸¡×üÛqÿª(ÎLNn„ÿ¢­ÕKËì- ½Eöã%=øðPÙÛ ú_Å¢â¥yÍ,B'ö8àW8f_Tä÷ä[9Æá?)—˜GÕó4’\|'ýÛ_á}Vma&0×¾¢ùÁœˆ"ë©Ù†ë|úTº›Ì7îÂ!¾”9٥Ș¿üOøólôÅYê¸36%y„ÕÃ!O_xç ÿU~õ•Z‘ú_ÅB تÞêFõ»úþí–|²U¤ŸÝsòŒË ß]ê¼¥éä!ñdÆbûâEë±RZ파Î=>Nþ±ü£4‘dnP“fº?vp W=œn+ëôN¨™¨ç¦ß­'îzPì˜úZv8ÿÞ’ª“c"Þoõç=ÕŽ2 ûÊE=à * ÜÈT–k™ÉRá1ýž`Ží ½˜Q N „þ<‹5û¬Ñ_'¬þJ ©­ÎZ[1RŸFF¹ï¡P‘· ”c==Ç'š k _ò®@°²AØYnü'z[âÄ71š°Ø_wª"r±Z;ý¨æCeßzc€ž˜Î´kÌ4Aý¯êß—6œ£¨Ã>is¸þ) qÞøø}ª5á'øO yÿá¾ßõÓamÒWô×[÷Q å wð1'Së2ŸX<SÏáÉÝéM6ÕR/!ï;«më¦,"'L¦WŸúFð“ú)£.5ìYÈ‘6³¿DfªôZ€_'_’¦i,Fç0¼É ü±†þSÏ‹xm;¤¿:Ï3ð'["j>LSßNW•®T©L¹ZI.s’:’UT¿l¤oáx«¶“¾.OYu}ÓòÉ®Žë­ÉlíÄ0_}xþ}`gê;\ö‚–7#ô…ùJ/¬~ÌÿxÊ4•X)ø)»‘˜Èã&Ïâžœ-ýå‡ÿ`.žI æïNóEãìÎ:£ñœ®f-Ñ$²³ƒU±ð«SAþc4ºå·ø×øía䵚î¥i§Ž›üÿéƒìÊÞ'ë/ú·çpܧ?û™•W诮¨M™¼ðS±ºãÞ¶µSw‚h=Qï) þ?A?Ô~ 6aŽ ¸íçê`t¡·Ä^º—¤ù©´*L¢þg”Zdi&qy7m)qySlWaé ÿQR½×/F]w2,YS*Ü#»FëßkÃUã°X±}•x Ó©ŸöZìŸsÇŸ'ã²^{™^8GaÁtÂKd§Ž9¶î n3xp3QôTò\ ['jÍ@—æór¬%#¯Í9`ó‘·QD–©8ùcãc‡Ïå—¤ö%xúeÚ-Ùû§h‡ÔX‘\óxµ–¼&û³òÿøøµ”ì'ýnt4Cȷ׃…sØ ± ÿ‘]‰(§ °=UeQÐIœy ¿R¸Âš\aIýhÑb,Àîàöz µ€  -³‹©Á³Hƒoh\% UW°¨+áSÜX³O#ûìë;UH MÃÁ„z³N/žUR툌GáÆpüÇV[^ÑLú¢v ›dn¤V¤3 ø“3þãØ]7ýõGô‡ >‡Á¯–àõ™=­”°þ£ùG:|N"|ØPô¹×ðF+xÏÏë_èrŠYîô¿:º)œr²¹„ my‰ wé)Ðw„åÏЫ ]/UÙKà–éKA؆c-aÌ×á?Va•— ¿ò¢Þû#þC3û;= ß5ŽÓô Õ`ð½³ÙÔZ<Ó3ø‚ >=¹¦—dGŒÔŸ%c Þ†¿=8öâldb7ɾ˜HDq(ÌüÁOb3 õg²Þ!xê?Ná%ÛcÈ_^’Å_®eZ,+¦)ŒpBCQ&ÿXÃTE>pl¯ž­™2þ|,Tw*xZeä0(ÀŒÄ}pÓ Ñ"ùce+1ÿi-üyNc%Ïm*Þù Õçåõg!ú_í¥þÃ깑§õ—:šnúsx‰ô@GýÇ(¦ŸÏ@c|†uv3ð=Ø'·áÁf1᪲>Åw:ÙÎqÿÊÓû“,~ÕIc¾Œ¼¨Ç2cØ‹2õ·4ü‡:Â@Öjø–êÄ™Ôå´„åaÄóµf°ßaÜÜ¿ý­rP<Ât⯦[ÐÌkOaº [ØIGËqôK,Hýù&~G>s·îA7ÊEð4³Œ÷  OåBòÈRú{NüVÇüï}‰éµÃw&9Øõ¿[žKñUªQíQC4Rµ–ç¶aê õ>Ö-%ÚÖêJU1ÝÞ]yG¾‘ëÄYøºÊ_Dáy¥•ÕjŽ]GånǤ7Yn4¶u´ö²ª<«´U?É6Ú$9SVÄB·¢ÿ(Š^­†X f³œè³6A–®«Å•;À4ÎòŽo„9}-{Ñ·iX¶–A¸‹d ¸È6lŒ žŸ‹?›?„ªhDLŸaϯÈÜQð/lwA¯Þà‚–¬åDvÄòYý¤jUÈ?.â§æÃàõ!k¸/¨é#¹‹ËÔ°¬É¯;¥Ä÷ P»èDË)@u|ñËøŸû܉í¾$ÝEE¥xkÊ7å“ÌDž5•|à8µñño5ÁüêÿöÔ¶ƒ¿Â6Máß/ÀþLÁj­¥”ßÕàÚ€àšQI'¨uñ^Ƶz熯ÎD”™køX|þDûàÏ;Ã;ÿÍJñ@²ƒ;n ÇxØÒ‹ŽòøÕXg• ÆêÚ; üjŒÈ_<“r0ÃÏàqÕqQ ¬BáГ´+ùÇïýwë©Ìãt¤¤Cà8ØKë½Üyúƒi„J4Ñx>£–±"µÜt¼kaââ?B`ÊA—üYµÃÿ÷#*ß û±Z_†z4Þã=ñöb0“Fz³ýOëm©ÿKÿ’Rz,zZµ‰Ã¸Û~ĉÁ÷Îf Të±÷ DµÉf&âß^ëÁ‚Fƒ¨uG=Ýþ–®m@ØšÀŽË•ßÃ#OÇ;lÔÎ…©ÿx!¶’=¢ßç`|àí¬îNíB7c¨˜/sžòP;¾Áìn¬mûaøá“›êƒƒ~¼a-½^ˆúª¶^Ê*²å¾DÃÈOÆËêZ:|dY&“—³z£ˆfÖ†¿¨næ€!ØãˆN @U<^.vû:„ÿ¸`óRŸð>ì'úÉlTACM½þm¼Ú`øó±ä3ƒñInðékÉ?¼ŒàZXg:ú„²útdÇý+£ŒÜ–•ÓîÔ;Éúe#ª¨Ìÿ¸DÊÓ>¥ ý¹î2íjjÛx¿¤FtX®kä‚÷Q¸øÉéŽüã•rNÀ—òtûã¶Ë”LŠú›,ÈÕÖQ#½ZêÚ;ؽ¨RIf®×š­˜ˆ;¯þ˜í…\Ê;^æÉ&ÝB>àÿÒǹéæ4Áqg’}DfQ"ÚXV壒¾¼¥èN>o!->¶Žê7<È;õ ýÛÿL¿K)/¦Koüwþ‚ø©Žd¦a,” ¨å©~õgý—¨Î –kdqìèBúÓ ¡IõìfïM¦dZ‡(Ö”R&)]ÅN<Åìj[ª«f´¦ÿîa"fo¬ßsÎ{4êÚÓFÉ$b~T%,UBý)>i¶é žnΠ쨊N6ŸæâäKÿöÈ5ïmWèQüU¦$ ÏÞ™|+-–Î \¨!Õu"êø€…X}©¹«©Ï>üçºKm¯ß¯ø ÿ‹þ ´‹š•¨ü#ïä¼Þ1v {S^E"œÿ¡(Ÿ'°Z«GX_žC&"AkþÒò»øõíX€d]sÁ¯.j·±RVE*êσ{ëï2ƒ’Õã{òÕä»àwòå‚ 1AÃ>ŠXò'‘í *§ûóž÷ÅóÅE­buzߎÿ8j+$z³ZAâëjè ˜Ã :Ù‹þ%cðjŸÑSëIüí†}DV±Œ½­Å¿ã­÷aþ`Øþ»íÔî²,U'U©qXDž5³— G2ÓHC·ªX©ŒÔ¨å7J”ÓßÒÛd;<À1|^úC‡å?oÛY«E~²O3—Ìt Õk4µS •$°Ôà?ZÓd:ÝrËÐKðµ²>šÓù!Lý‡!ºò,Ïr%EX­œøk‹ÍôÉÊü-ÔÜ`ê]^Ãüa’qš¯e­·gµ^»¦¶ur>ŠdP€±X©yèW±}ÍzGã1|o>¸€½Lí^‰·ó‡?Ÿ/Ýë|•gtÖ Äü¨è¯æíLÃôa)`Û¢n}¬);3\}ñÙÝ ú–B¿Û€š\sel¾B¿{üêònžaL£–]h?õÔ÷Å¢"e»1fz%=µŽá•Ö‘\Çf¿ÊŠ'¼÷Oÿ‘Evr\o%e(þ#/ïDoüÇ@yý•bo†ÿ©Á„«4èºF ÁcÕðÃr÷0û“<4’÷ð2þãŽ\NÿÝAÿñ\¹ß—§Ô‡·r±t5ÒÚwškð¾ áM\™$òÆœdßEÅâæ ý ^¯:㉆/gý®\E¬Y‚øÃ_ü/æ×fã\WæÇ#*â¸OÁïjT>JKþ‘CuÇT¦Þ<«ÄV†Ó»ý'œú…:“¨,âøžÜpÔ£©²yKåC\m›¸Âü´½JnjÚɤ²˜¨«þYŸ`wµ¦Õ¥U–ãMf~TyP™§’5z£¥ë„-m$‚ïƒcá|›þ»íÄ*l¦å5Q—”‡÷¥8ùÇØ€‹Ø“û²>*%gùMÎχýR q^T}I®³‘8š‰Ù`9sÈn|@Xmúk"t¼(˜”Œ鳡ǭ\ Ÿ?GßKNÜ^{.Þã0odlpüL:¹XüvpØ jdŠ®ƒðF;Àz;c®€85Ň”Àg:¸Þ†MØ’#pë9õã°»÷äQQ%Âúó·¶ŠŽiïPo~N‰~pÌë´´pêÝ´1Ø2/lšUÛ}µM›Æ• üÊ#ìMãó|ä@œRá?š’ul¦^£¤–ÿó%}ùE|éi .4˜;hM¥½u˜þýûrž¶øè¯ž‚0MEªã#†Là.ŽÆº½ÇZW×ݯÆÚ€…¬aw»È½Vs×Ð_} ³d;µ6ºŽT߀ñÎÉõ ãä]ÉEÿ’»Äø×Œø†'Ýxs“ä£2 ,\rgN«éUN® ó¤£ …»Õ>ù0ß7]_…†a \ÅC|Úrbs#7ˆ‰/¥ Õ‚z·2ìÈ9¬o}Èb,5¸~ÁÚª&œñ7ÑX”"C®ûhÿ¸³€¯"ÉÞöí®ê꾸KÜf°ÁÝÝÝÝÝÝ%¸;ÁÝBp÷ `!hp×ïéìÎ dÂ&ì~ÿÝá73 ºÝÕÕGÞ÷=çDů†ßÎo; c›ÀÍÙÊô¡þ£-*Þ²D {@Çæ£Fe½«þá ïŠì{ñÔÀ·©MÆaåK= Ú-Õüj=n—Ï¡·ü:ª+¾’Õ5Å3_¢~p:œ|•X†ôXnì¡…U gß„,e”t3 ‚ϰ®Q-³Ú<Ž8¬²=ÿ¼(Ù<ì~As¸Ù*¦«ì€·ˆ¥ô¿ò õ†ýëoo92ÓèQ÷e™Ò˜‹þª5³­¾‰½(!¾Šâ¢jp‡ß½Æ÷:¿ ýKò€?®4*S?xDËCý sŒÈ?R ÑA„Dßÿdè¯K0ÿ<»˜Fä½V¹#\@qê?úQ0ÿá}rb³ce*ÿñUŸ'òé~$â^a,1* ÕÉJ4>$*§>]/‰X†G`þànÇZyÕZRl|fð«æÄòñ¸çëX¯jè{.`Ñ6“õ.æêc3?*¹ëÙ‡¾Ï|?T¯ÌUÕ$’¾Â 9«°ÑAø· näI+±¤;@‘v‚Ö\‘~¢<3Ã^+švýUJþæ@î÷,|{Blt9'ñOñŒ¦ßUücáózžWKê?6²Æ5¶z<êÒs ^s‰n3O²®ñ§EÉ?æcC ¨¸¦?jàŠÔŠL7¢èë~x*õ¦\ùj„òQ8€œð…>œ ŠTÓEv¾uoc.d~G_P¬ŠØd/%LOò£Ä"WBÕ>;‰0sêzÀX¬Bu–g9ˆú‘Ç(ÃìÚÛô$Jý Dg¼Î~µŠ¯`üR±Ñå;þ£¼£‰6Þ°'ϲÚpú—¤6r2S¶:«ÜèŽQîÆ Œ”ÎÎVæ,´L"ü=øý¨Ç^ñ¼²+ÓXâz"ÞŽƒú*©öbº™-˜ÔÌ-¶õ%ÓXú€t¥þ|öþŒ]ìlëøUOÖ±;ƒ½dÕ¥ô­Hþ#UˆÚæD¢M8ñ[˜nuÜxb^C¶fâ•æÛÉl–X=à?n`åWÐu½=úê fjPßËäÞv-°Ÿ\ëÊ?n“<§ÿU3N»'3¶G“¬dVcSx˜‡fuº&–¥â9ÖKjTÏ©|)ÿXn>ÀÝ‘›ˆ*JâiÍÿÉüÁ„Ìÿ©,Šõø4äùèWRCô¦þ¼§ÕËQôꆠ_AÓùkÓM^;Rá?>u_—åPHꢧMû„Å(%5*»ûüâü(úic6‚IÏå’#å-‰~]%àÆŠQ?¼a®ãê‹2ô{I…ÿ8 ÖdÏUDpóŒ‘X‘Y`W׉Iãa¯â ¶"¤‡[¨E¾ûö‹¾Od!¾£®“Ó¬1ꃾüA\k÷Ojû…“D0 ÏåX~mç&Ç>|îjü,*¶‚ü¯ÇnŽ!—Ùþ£LÏ1k)þ#ùCS« õè;è%Ö-[)|½›ù °œr~Wÿq’ùQW‰óÎ’ÍjæPìèt!kM•F2¢þäOÈhãW[ÍAÖ³~å%üÇü[m”…§ear¿ÅÁ¯¿a•úStVãdku‹ßž:ÁÎx2“:ÅàW™W~üjÝð»Qå˜ÞŒN\r‘xî>ók××G»!Á4Å Œ¤†ê¾…jƒÌ£ÿ‚në8ê5gç+º3‹u@†e)»>Í|ª =ˆÆê1'”ç\;øßû"9ókCúÎÆ§~0óç"âWâFwÕLº¯ÞúgpuøqGð+ý~‹ùƒ¿†Î½r$¡Ÿ]d:ì=eŒE"ÓóioèS˜X Œèõ‹øÕ ½>(Æf™.y/5ãÉ?rëø?Øx5£+*"w[˜y)ÅBêÛìÁJ¨E<ÃݼAÓx«×U7çß¹²dóU"ç& (É6~ºHP~®rÒn†ÿ‘ÓPðñ¯å™6Ü+Ü@ýànª“r€|åW‡@…–ÑÛkæ¦|#Òi6÷Ö?NÍ_{vpŒ{ë›’^§¬Ô$â§°'T¸õ­|²çGÍ$IˆŽíXË%Ò ô»àYm¼o~¡$ ùDz…Ìr¡@Ù\ÅQˆÛÛáÓ£òæfæZ?„á?Ö‚_u“oy–›ñ9_è;ÖŸ¬«“Í”cÝœèëÉ&ˆö'ûû`‹–sßË`ħc›¿À÷…æ?édM®«Ó¢÷‹œ•Å仂ýÇjÖ® ß½Â´ñ\ ÷ùa’r‡7&9«Šþ6¿öžn⟛µÉ><é¢2Š+Zó C¥é§¸¿RÅ\GZ£â¡h.KBt×zGéߺ¶\@šƒ©(zgÜVe¨ÒHiõE#;dh õç‡áCV˜KéœÀhÑ¿}ú„Öj.qÇï²µkÿŠjÃD4bªF¼ Lw‘ÝäX%™ÚX” ÉÜÔž;^ä"¯èq6üj›Uü°0üùNýLz],ïÊ?¼é¿û@¶Æ &ëž)‡›I©6÷bn×|4Ð[ðöü([ÕUßòd~m=:¢ÌáOžÕ<‘+ÉZìþinr³ëŽÿ{_d¤ûr×ÎH-ÏPÿqÿqüj:ú+{~Ô!æ8Äuýõêõ»o©ž o¦ƒÒ×2¦ 7Ñßöt™–ÈÞS?ÿ~;¢#ªŽ¶!=#}Pé_²M+®ûÉô¶y/ÛRÓÐ)‚ókK£ß$F }Û'´žëAT›ƒ‘öƒ£Xþ \¦ Ñám¹‡:)ü¹ézöa_Þ<âÔýÄ÷MA¶oÁ¤t¦ê0=_;ɘ¿q·›A¯v±¶IF~ê?|DV­èOÖ|MþñL&&ÿè â ×ý/Œ¿(@Å@yc(ÀöÊs±Ê›Èv– §’ü«VïM7í«~I~E·äÉÓÛ‹-ÿ“_q¹¯7ä ¦\ ü@Ð[À æM·Ñ»3 V?ìü#ž¨ VÿÐF='è„ÿ`$§:¢qp îá ÙȾSÜí4P¶™\aoã±xª½ µ}é• ä1rXÒ>bËå`mA¬Rk·¤ŸGtôWéƒû—…?σe®‰9D¼ÐR†ÄtÿXø£çUüÊ }þÇùQ„Ý¿ºGçªØLÙ8…÷ËŒZª0yÎ ´M͸ÿ•ÆgíGüJ lëÿQÿÑG0®«1v-ŠL•ô/ynÕg~Ô&üÑê?ò¡)8‰^j*Þ ä-—©Çúþ–ýéÈ`áý!ø…ÝôÊÚͤÙö`s•ðý©Œð1ïPÿ1YÍ¡ÿÕò˜TçùwèÚ¾W\Þu-—ÛQO Î:ƒL¯ÿíÁSKƒÆ¬êذ4[A‡R`U g?+ùÇbúŽ”5½Èæ«äðÇoå`×z‡Gõ NÅNÚ{•ÝÈFœŒç¾dE#Ì£ð2Gð˜ý©?w×ÓËÌŒbê¬Õ òÖÔÚ¢j –ë~ók#…â¼Ú Ò•B¾2¶›Ò™‹U†¡¸: ×¹‘§ñž‘CÀÃúà?Λ1̘øÆ(ã²\MýÕ#òop°¶–o•^óÍ$ÎYÖ~zg½B·Uzø"ÎÙΣèÍ2[ÝÔ ¦^5$“›`â?nËmØŠ2àŸ±ä!×ÿ÷¾H®m§žú¯Ï“Ôè¥t}÷×ïFìÿ©´@-ú«Nb<ó<ë±ÊIGýúÝHâUíaÅ?_ù#ýì$¶ø¦,Â>Šè~uŸþíe©ÿ(-Fé?CÙÃ^³‘Îü椆SXCO×ò°–\¿(ûR á'[b[Š¡ºóÜÚ-‘èBóžw-ÔIY@ôû·ÄrÖö†s}+ËÓÇo¾,.„}1?üîcý„ÈÅ»ƒÚ¹mD³eÕ^,ñTÖñcÕûÄúÂüÞ#ëùµK%õÕd ïÀ”NÁàz€S Ç1¯–üã 8Ù*NÝ(X‡ßŒczxi”^”Ÿ¬Gä{‹Øò7ò¬$Ø1w…ÌÈË´;¿˸Ô툼!ò1ù‡t}óÖá\nO½B•‡Š¸îäsÈ?@S†óði“¸û#Ä×àn] CJVÿöôÚ+ê?_ }?ƒ¥÷$º/J¼Ÿ&ý!/²\%.-4G³ÜjOwKB™Š7ôAùÇzêóËKX­åØ5ëè êÕýí,ò‘ ¬u!2{^÷F¬¤goO œL ?¬ìÃßê?êèMÐ0Ôb_N`++€€Õ/I ÛHα„ã7ÌÌÄõÉÍ|æ$4¶¬Õ^l¹í?ÒµåÙ‚Ãq]—ä‘ðþP@­W#és3Ž|à_Ï¡{â.fm±nâ]J“LVI±ø1Р.'§Lþ™RŸ÷ÃSùª×!ásÔw¡—ú~µ…Ù­–ÎR¦=·›y]eÂïÆ¬ÆC]ÿÐT›‘‘¿â´>0Z¨nœ…ÝêÌD?ò™ìôOœiå¤÷º'8εþÜ2Gr]ÃÀßüðHgPl ’/]ç¤ ýKF°WÈoÛ⿻ɯ2;O#fÖ$_ØE¥^4H·˜ÌTÙìßðÁ¬À;7KLŸ©ZøÌFÞqÆqM÷ã}دm7RÉ«ÆUUÝ ´âÒ‘«/öþ ½sçñßXÌþвáO«?å±yðÔßè 0‡Ž‡©¿Ã¯Jiƒ…l²q‰§/·kÉ?š“gäµ^Âî¬G ¼nßt)L%kA—”tfºÊ\ãü]–óAåCê?îRþ h{â¼t¯ègFw†áèMà)ÔÅ%af¦àQ’Ø=Õ)Ыòèw'šßðr)^¬,ó?œò°kÿ{_äжj\'+= ÿÝú¸š/ý#½½¨.„n¯KïˆDïÜ}Ú:küÊ?éé15š¼õ=xc›Ð_õÒ¼´"Ôv„A¯(Öþbÿöz>:eœ–±3céK^ÕÖè1±Ûþt/iIoˆ¢™kþÕ•ÚŠçæbòJ~®7çòµÛ™FÚÕ±;_dA¢ôúòŽ>è_-ôÏ?{§ß…ð±±Æ{Áa ª0v‹pèR]1ú@Žtl(j¸Wø»¶Žéʶ42úÃà6î°'Ñ6*¡e ÄÞN…wØ OsJNÔ3†³ânt ©}ë³sÄ«Vøì„·¸âUüZ€wøÐ(cwŠ?­?ëÐu…]8އÀÏ%Å"6%ƒ[ V€}níÇ4–ë]÷\M.×ÔH‰Ží@ûø§–‰lôz®9°('°Î@°Š±koÁkÒÈð³¨ÝH¨:ƒ2v)‹ ˜œ«wþãŠ#Žè"Ÿác§‚¦¼+·ýÇбExµ'ä#¹VXÿµ -O¨eÞNcw X޾+>jŽPûØü*;–OÝ)BþÑŒ}Ê‹¾ö½Jeî3›[GñPc%2g£‘r ÚL¬»Šü†›\j½4":ì±ÁúÝm\ãHl¿]ˆÇXnúš'à|[`[~#Ì]—£ûIСjT·6âë!U^öfÆ=8»W9uä£Áõƒ¯Õd]ÕUjð¡ßÑ+}3Èu›è«ÿý.ýýëzìd |ƒ­ÍÌF¬“|æ)¬~tXæ«x¹XѨ™8Jg©"ËOýÇêÏoò¶ÄöÃâ§ #àppä©Xí[ÜóTâtPÁ)üù~-a/;ñéß~ãï戤iÂ?˜ÿØ–p¿P’!3vUcóÈQâÖ³ùG7ž|sVJ×¥ð3÷Âð»–¨(‚E΃Ŷ{ɴ箇¢¦žƒ¥3@2Ò?ÌŸ?½ÎµFR¹óÍä'Ýð—é%Cíce½u2%YoK!,jsP9*rT=wWa¥¨9Ã:£Ê1§¡ýLç”mø‘íøƒ”Ì4›j½—z48ºÆpXËÉ6+wlõØ@~b<Ó‰ö‚Ç̃?߯ š±È‰È+¢Á^xà 'ñ£é!(µ½™ÏÉ?ÚL$Æ>.PM¸Õ—^ô—ïš5žSwæt£ò<ˆÑ!!*s¸ÿép÷>DAzÍ®ð*§ÿ-9£¯Ñöa³±‚þ‰óéÀÑýï#zA¢þc==È?>ÀMaÅð—ðGðqÍeHO-ú·OÀsQ¾øËªjB74ÊÀ¯¢™#È7–RIW>ÙºóÕø“ØôOÜÈ*KÑœ]æŽ ¨(Æx×™ñe~”úÆ-ä©s ŒuŽªúÚ (£&Óáð ÈSWúùF!®ß~ ¥ØKtùãQHWÇÿ¡v·¯ë~3i]…äÌõâ™nR äcš©è-ršÆ30í­·pè=Xÿ.ØßhªÅë=%4“ñ”Û\’Á¯æºø»Úøah9»ÂJΓ¨}Ée6“÷í¢²§WUÂÙFå1ªå9ê™Ítò&»ÿÕIðýÄtX9²ÜïºãÿÞ‰µýßÕ:µ¬ÿ¶ÿˆ¡=b~”§ÞZôQ‚Õáýé}uâ­%úÅúDHÝA–é&›Ü˜,žêƒÀÕ#Ñ…6·tÂL×Ñ뻞gDv«…ž¸VfÁ.Ì3 ÊnÒS«¢¿”Ý w¹‚Hñ©lAþ<•Ö_Ë zc vQûVÝð‚ñžG,rSL`åÝTao“‰È+»Ê˜bx.홾˜ü£øì#"T»GÒqðü~ä7‚£þýØù—ô$9/«G ÿîÇJò ôW¯À^ìù磱÷3àí<мl…Þ¨7Öù£Ü¦ÇgGèÅPÃVâ×1ün\ò™ôä3oX›T‚HtW¼ÿS­;Ú)·ˆêÚÏ*si7´+2:‡]n‹¯L.×Ìi ØÿuüÈ "È«ìç$®y¼Êhì~#ùGXúÝÌZ4qÄ)ìÊ:˜ˆ<á?áÏßr¯oÄ:qŸÈ¿qs7Viçs·SdS;Âð{àÏ+‘Íä§v»>wö€¿ß¿›†ü£±zO†U˜ýóÆ›œ%‡ûÆîm ;êλ[Æ8)"éÎPûX€ùç鸧?±ïK±g—°ýóøî"XæÊµ´v™¦éuÎb.$?ÑðÓˆòG€¹¹¡¿šj=K$cíÊY›O4MÕ-ð>I}ÆéKt5·¨ ¾ÎŸ•5ƒÔX°Å?¨ÿ8JDž_ ä“?j?®øFovðõç™ù™Þêá­FPר‹ü¨/õyçm«*úÝ1ÌŸígî£úÃâ“®ðé³ÉwBÕž@Zo0f üùz ׃À´'ú 7]îûµ5ýîó“ùos)vt ;ÔV ùNÕÌÑ–þí¥Aáìþ%CTOê?âS'žŸþ‰éÀ«NZ^Ää)¬ ÎÞV"˜Ÿõð Í­°G[ð™t F9Û©ÿ¸@÷°û¨*Žð–F2çÑqÛ߈\çWÚMw¯ÞTü-€¥8c}Å›L†yˆÿ€ xø`5Ýf…ï:êgÒÚò4ª÷W36ã?b¨õf*gFæQõgÂî æ“D¡þ¯£%—`€ÒU±c3yíø{Ì}*×»üÇ3í¦ø,ÛëµÂ#,–‡LáÜÁüÁ~è"kv·j8'QÏy‡®õÕuê`Zпd‚éT›`ôV‘ÙfSäÒ3Öæÿ÷_I¯­Ò¹Îª=ÿ#™ë»_û¬”X‡ÜºüyqÅሦM wÉ5f¢Ñ^9~­~0ƒO´ 3ð¡â|¿ì"¶ÁÈÏÒÒS—C*YW,Ò›ÿÒu®Ô#ñþöEŒRô#¸~õ^–Äßo"+ñ“¥D“­˜^¯Õý@˜ƒÙSÇ:Æ"µœHn³UÑAÉ„Wð+="úÝgú&QoYÙ†ÅÚï: ì߇ϸmþ(Ë ñ³ÎR!O*‰6ë¿úŸ¹–¨{«ÍÁªî¹Š‹ÿˆ¯ÆµØ»<å$=C8÷¼S¯Áß­Îɾµ¥Æg]ûJ4÷ ÌêˆÝJ˜€ÍXŽyìïr9‰],þ“5bÞÊèÜß|Ãjð˜8ð*eñYÔ.|Àl:·^#/]^Ο÷†sHièÒ7Ìþ%Á¯ÊËÜåâ@O®¤ õEAž4"F‹IV6rÄó³¨&ƒÂL«£ùaEC4#Ç=€"¬> deÒfùM¡?pò§3 VFþÚ(Emÿ‘”<åµ~ÃÈ“çŸçûa½Âæ?.€æö@?{ݸ nÒ“ ¶B54ïS?˜©°3¬Æ BÍÏôœï[ÑC]àêà1‹€_y»qÇbm2ž|ˆzCÛZôv§îžõ Yƒ:ìó,,éït]/j5à¾ç8ýiÎÃKo†óÙJ7±¸j»\êZï¥Cˆ'ðEˉL¾©ŠœÔ¨0ÏÏbÞà)ógT¨Ì²NQ=¾ ÿñžð]èý’Œ+»¬2¨Vt¼I#÷ºî7ùGlºØõƒ3U3pëûÌXl~õ'KáÝ$øS+úïúÒƒ¸5s!k ŒNdšê-˜ÅPúS\§ÿU~G¿Cÿ’ÞœÌÎDcKä0朥¾3?½ßŒæl†R ³s:ý†+[1a“ZíÉNš™o`àžÊ©üT µß¸¦Jѵ ÿG_$¤ª;·‰­ý¡¥píÓ¯}dTížV•n‰DMâ±J¬âÍüóëú>jB.Ó¿ý×ü‡¿ãƒ^—.è@¬>Éä Ñïˆ50Y:ýK:ê!¬MD®³\ÇŸÔ‘&&âµçGu•~Z%ôWÐË­ «âEæG ‹ÐÿIý ­^Y]mÞ~‰èy*¶æ©ÿX‡Í;,cR#ÔOf³"piïõEðçƒádÏÉO#?„ê V{•³v Ä4ÙÌA¹O¶’éýÂÍŽIò(¸_:ð¦ø¦¬˜‹|˜±±æüÇ|äîX¿WÒ3\þ¼¼ÑRb­Ê†mÙS“gcŸá>»~毆«Øˆ/YÂgî‘EÕŸâWQ5í¨Œ„-AtÄÊd½²d¹Àwr éµúOÇ}¯ç¾ûÀ9d¡/Ü+=¤6 dCi_ôÍr?J°=x·=xà` Ù±aŸ¹Ößå"øó±ø´ôooÊ~vàêOkµW„á?Î:LÑŠn¾ñaËÿQÞ™xp¢ Īu—ÑTø#»ÿìY06M­†GN~Xmó9ᦇf¦éQ ÕEß´ ‹[L'ÿØ~µü+ª¹þW;@®|±Ö©Ð<åC1œ Ö"ÜólÏh"·„zÒïôXÔýw„ßÊ]-%&~ÿq‹Õv©)¨tŒ²$Œ|aT»C°}Iè½±{_þ|¦‘:”~÷‘Þ™}>åÉM•u{0©‡è¸¡z¥:ÒßU8ƒèáÞÇ<¨Jš­©sÌ¥¾KÑLàn¼‰’„šßvSà³ÉÌæTñ#—ÜJ-wWsÖk:«”³¼é›»´J@§ÙÿÑÿqÎgYb#yÝõhˢ߇'«nÓs¬¹ê.›S ýn>wy˜j¿¨èw_ÁS7¥Þ›nÁL?Nþ±€Œì"ùb•À˜ãZï¢ã‚~Žç Þþ=Õ5dU4 -Ñ閭ÿX c~”]í¬ÌôšƒÊø"ók'š3Þ÷ :±9D„¾›HŸOë'tÎÜhð°y*§ô¥þÜr–fj|QêýΛ¬wÔ’´³>Á÷O0‡Ãþô¥J>¥ù'§ûïãô»å6Wþq•þ»÷e3"œ®¼I;äd2¶yôßíDàz³(wšÖÙ˹úÁªÖAu_÷Ž¿¶ù–È빜GK==UõG\wüßû" ú«­` ø´¡NnD¯% êþ2ºŸÞJ4¤IIVÙÉüÚ‹0ê{õ£ø°0ˆŸ¯}…¡%嬋0 e˜UNs¢s›&cË'¢hF=úÏúïRƒ÷/ñq""Ô¦`"õå)­¡~åÕ´X&ÊÞšÌ?ŠSÿ!Ecb™Ièkª`óÓðµ4N‰!°Â‡À9<à¯e[tCÝþ~!ûèb®ÈÇ©zÁ _ɚшÅs±RkdwòÄàoäI2±Šè_rÖ±_“mÓSl—­'`÷¿ÚJÖM]†‘_Öžà…ÜnÿÄUzkî°)ì]˜[Wœ_°_Ñîâ/÷à_¶bÍÆQŸ·_®%5;vëŸdÚ;íªŒ¥N’+ŒƒçÎ~ÕýÕ&zwů„y„ïÌ//üRžUã+±Ã•0–K§EAwýZG¿Ÿ+ xQx©èi ’v=˜ÿ(¤ò®÷$WHAýG|“{þãz¿ºÔ¦ƒq/‡5¿ÇiŠ˜ëÖ Ì›<£ ñþ lèS¼ç&ø©ø¦d§D\=^¨{n¥×‘i9Yà+Fà?쾚먒٠g…É®yéE¬>ŒðHô«à@ûcËÛQ»ñB–ÿ-ùÇ­g'ÿ(ÌÓ,?Ç>üc:Öò2ŠàEd;Í(ô/yG¼\äe(Þ#?Ÿ´è¾(øÝH査ÿp…ÑE îî¼U)8’¶(õ|TgléLz2¶¤ãßm뢕Ù9æ£)=0™ÔaÑ½Õ ÐÅSz…Ö{ ¦à·¡¬K7¯Ó\ÛRz—·?/`ú[½Á\Ιo¨©¦?$õQÍ:XûŽä3Ûððkøü ò”ë×r´Ð¦ò$†uÀŸ7•ÑÛ^3 £ÎdŽ2÷bA_ ±Mëìbå@/»Ò2¬(¬\½í72003%a®õŽÀÜ¥zig@7M£¿ì¦Î™­˜ëfõàY `H#jI.Ã~Ï0çÀÆâùž“Í@qVM 5–ɬß)ª п„Ã0_5Œ¾*¾l­ÒS¯Ÿˆ*É"(v¯RAòžzÄÞäG7@Ûá=KÃOýfæD³xüêº< ~5ßå?>jâ¬Æyk®›È8^ÍZLýùzF¶£_IIòsp*±¬åê0\ÍPævÇlÇì ÎIJþEþÚ„%×öüG_¤dþù"×IˆFxxŠÎŸ}\BøóŠúI½üÇ7ÍúÁót/9Gÿ«¨yåŸ[§(O·+;×{&û‰{àUúÝÅd’Ñd-±âýGS=-l¦'JŽî¨Q É6Ô–ÑýeW8õµ²<ö¾èïÚ‡u¥¹èWü»hM¤°.˜W¶õ»îغ»Âëœ8w¿ÌÃ\°I2©9ÃÿbEá!Š}ㄯÁ®¦%žÎ•‰Í·5¼Çø.2yª=Ñ0üÞ–Þðç'©ÛÏ…Í3Ð , Ü€7ëTBçb[È•(ŒíþŒNc¯^¶¹MïO¦P;yW:¬jb|úÝÈDöþä À¯ví¬‡¸!7‰*?UðŤâ{™ë2–û³½¤ü¯^³j°}=ÿq—wb$ïØ<q{t :Y=×C¸Õ}L­EgšØEîç0Ïa??U-W1ràæéäQñîb€J¯ì¾B#±õñ©¶JCÕÆÊ0üÇ1ÇG½š¼lµŸß'Ö·sÀÌØë‘XÏO¬ÜŠj ªÕCÁglàéŒ!íhÜ¡^6r¨³ÓˆþW鸮ôê{Eìscî¸2?}…Ól»Ç-=c/1 $Ÿ¹þÉH̵–ƒ™«èwCÞÉܱ†ÿHŽ÷Î@ŒÝ¬Âúü5LaÕÌÝä >TþEÂÜÄ»U#ºŸþ¶ô"´‚êÞôÔ5dïÜmsv÷8{•| dθ­&²lñïjÍÀúbŸ[QUÑÔŸŠl£Ýk LÇ›ŸÛj~Â[1Š£wðƒÀûŽ{Õj®©»¹ŽúõÇÌâ+AW§ÖÓƒi%_̯ÜkSð«[x¿±øÔžL¿êº¼šÌÿ˜düÁ^<ÀôÇ7p¥©?lKE÷yú—Ä¿ŠÃÌØì NËÆ5÷’÷¬„óyLRD)c‚k½Ë¨Ÿïp.vß»™5è­ùÉx¥Òâ/*ÀÈ,€á>Fî6ü)€'3Å:Ž~·¾ùdo& ·Šj9AF¹ØµÅÑ_ÙúÝf {¹ºyÆÕö¿ê~eQGòžjö9–›ÓØ 3ß›\,­ùùú¸H.¾LZûëïh—Ä[Ùw¬¹É¨¹6Yûð=ðµ-y®)œC÷™c˜Ûê§.RÞÞ¦‡ù‰(ëƒÜ‚+¦^ ä¯)”þúôÿìÿéµÅZ×ÎÄåÝÿµº¼OO†~7ú«f¢´x„ØáÚÝŸþ‰Wôs̯ýµ»‹Ët¹Öt9¢Ç+j5oê}èÓ•Lî•Á¯ÚŠ…ôsùì𿚯ÿIv$‘}5™O^ÑæÀ4‚S ­èyX'‚ý¯2j#µzb0Ö`¶¯3WZ5&-²\¢µŸâ5±Ä!Óû‡aŽ÷úQÑ–S‰ÜÀFm² š*@Æ0š?•¸þ‘¯Ìô4dxÓfŽÚ^y†(»–!+µe¥?P4]ÁÔÀ–úaçS‰½4ø&ýËn鹦šäW·ù™,XËtøa „ÙIEÀ,Ó<Ñiªç7áY.Ë­¢ÕOû—¼wDÑ“+k@>”þ£ 8²=ÁñˆÖ:,ÀüÇžÑ6ÃÏÔ‹·4‘| ‡Õ™¡U8^òÓ b‚}äjvÿÝBì—Sí2þñä,P/Ôœ]±Ý“ðTÉɸ~gížaúH䯹’ôO¼ÎÎ5Fÿ–…| -üù7v µºM¼|¬çŸ²›¼k™R'Ë´›£Ò ü*QEð¥YDÆ'øzœðy|PБ–T$A_›þŸøÕg¸‘%XÞYàSIÁ¯¶†:݉±X‰Ø£*0â Q&M#BýàKÁîd^à8îÌÿ¸OGø÷ Lñð°Ï³ðIóÁlc‡ª÷svFvýnªô±ï·ÔªÐõ½.ÕØÂyÆJçL?_žˆÿ»˜’{¿ÏÊîê%QÃPý‹ùØÆGdE½èxøÁð"ÏØDÿ]Oô¿7©¥³s‡uè|ðR_á?ƒŽa;D>ãAÆ’Mžw½+ݵѰŠãÔ3£'³u'ÔBcV=S[4ÆÛ¨Ln+ºÐ#UZLשxæz¦½tèò¢ 5ººôÿ踩¿æ™íƒUŒiò~ ƒž)uÑÖ¡Oâ sý‡ÀReõÌñ5Z-ñ%À.½Áû0×&• ѯ%ÖšÓÖ^m Õt¥ÿUkø÷d0Ñà.f @`ÅpçjÇðÕ2‰ÌfT78ûôô{#ç¸üÇíó[ð”Úñ.L—{¨¸\‹gëJtN7`j:9QÿÛzAýG3ê—ÁÌ¿Ä^|“Ë8ý ˆgÞüOú'æd.À×Y ÿ‘ÇõëFè‹Øðçùô;ô/™B?났âCýà=&J1]‹ú‹þ#Àñ™ ¬×üz,K… ® °vÅMVæ”=‚+#taÁ©»ž¬z™Á$âÒr†¼[sEö€©xˆï‚þªG„îüæfCÁlÖâ?Ú`W ¨¹è8‹‰¬íƒÕû$KÓå|ùGˆ†ðçWúQß(*‘†ë°µLyÕ0ÉØÃçœ÷Ïð"ø,ß;òðµÕ7Ûäê.óaã³ c툊ŒE¾JQ–Œä*<â:T3ÉŸâEæ çžOë-¸§jÜé}4Hé8«yÑMÝ%»‰•xÄõ®$û˜IUâ>¢_ySÔü)~K»­0¶g±ºî ÑùÈ?ºƒÿ¸:3ŸX/ˆßÏŸ-[ÎW Ð%Ä—ÃØ¾DZR±W¾äÝÙG–r Yô*=Y’kÑAJÜÆ2Vy@ë¹SKŽZ>#>~oþc7ç­º|¿ ~þ‰;³«ÃˆWá#òQM‘^¥0×ïÃ\é_ůÅ Á ¿Ÿ´X¡ö±>èk éœTÜM¢ÆÂ›ÕViì@ÃtmRsøœæAÔ¶åè9U‚n0™°õµÐ7­ä“ªümþÇ7=ûnwÊÛŽ‚v½nGÁÙÌ:¶{S««z]ù÷/™Åg »Iê¦úD7£ŒoÚð®0*øÕè`_[¿Õ¸ÂGuCW<‚«Ë@5özfƒÿðUÒ¿ä,Z¤xT¾øp ¹—]†W°Â2䱉©Xè[œ’©ìßc½Úz߈ÚÈlæF<›Í ì ¸­fãé¾ûÁø£¼Ä>¾«ÿ]ÿöªôOì¦?PÁÌQ e #OS˜‰B¨’ºÁï§Äƒ¼Ç)»¿Í ¤ÌFÅ•Ò|FRKÅý®ûeÇ^ýÕ)v¿:eŽ3¾ ?ãŠ*ÊŒw'}З¢exö4üã- Ðþ›ŒL))õƒËÐ Tgÿ£ß Ù¿,ôO4à¶êݬRîr±Å|w~•€IOßN¬¼Ÿz—èÅèO5MWX‘ f ÎÕMìÃmô»'å—ÿ¸ªÝAÒÆÃ±³³å`3Žs=Û¡gØÆ4úHT:ަ#ÖSÖ_ ÿу_f=ó5ïÊ-òVÄ„¾†þ?™ÿñ;ýç¸NVüG×w!§#"_EÕjÙá?ꊾâe0~uÍÑLŒ÷¸­ŸÖÒüâüÚ Ç;&ð|CoùVf0†Ñ?±1ó?ž‰²ˆü þ|L¨þ;á]aG=;±é>YŒ¨q¼‘…ZîíZSÝæ‘?H¾a­ÄÝy­'“ï†ÀtØ}_Û`õ3¡¿jŠ g6Ѹ/Ö9'ËÉ9È!ýn±UTUù„ݳµLŸ9ç¹y·û’3Œ3tÞÛRðïáhêH·p¯ðƒc3ý¯Þ“ñ?Àöy’c·÷…*ÉžåÆ»ï†·{/çãÿ4c—ž+œÏémÈ*q²oÁÄäÀ‚%‚A¿f¼4¾ ·ñ%ûXS±Ëxår€<þ3ý•¦in :—ñƒù¹,Ô´#XNÔ|¨‘ã-c ¹Ø8,ÛÞ´A`,)åk=¤·wÈsN¨éb§|Çýìe¿w°wÅñ#hj;ÎÖŠ{ÄòíA^zñç}ðT™‰Òp­aéwO0Q©¢¼Mõæ0Õk~ŽßfÝ“€×4‡ùb¤Eûtti¿ $ÃÙA¹üj9ÁsÎû× þª¾^_U ÅîJ‚`vðØ‰·ã‚[­4ÛX{Q^]‚Ç-JýG ðÀäÔñUZ Ã[I†ô„øÇ†ˆLõf;êã÷ƒ#-Qó`h†“xSÁ½ÿq›×ߺ »_ä~2¹g^Ø‘Xçʨ;FV¨þ‰ºè‡G=GV7ŸxC 4ç˜î\_w¢çÈÎ/äÌ#ªulðI¹ö;|²»ºÉÏ ¥ßõ«Ø£Îìp2†cÆvüdz*zÝÚæ'ì])üǪ*öªù°ÓŸ`hjaÝ!é†Õ‘ùQ¾®,‹ÿ˜bdƒ}xA¾Õn½&ý¯Ø3oøóiðç ­„0*ÊÙÄÊK—ßíÌ}úÓÜú¹[ŧ§Xmr›Ï2;>å8¥¿àÚ<ñöïQö¾yÈËÕg`Îùq:¶û¨Ø(³aÓ¯™ñ™_«™EÀ.?á '¢»È*»ºÞ”<ðçQˆ šrz窯┡[_™‡¸ŸþTOéÓ5ÇŠäô&¹e¡ãÅÝ74/Sÿ‘ ý•]|[ŽCÁ;Öå?kWÅcÙŒ³Þ“éœI7ÆMä§=Ñeëä¹Q*÷t.¥>>§5JݧÊd2swÛ›x‡ŸÈµÆPPÍW†úŸð¹¨?_ëÚ]ËÀ/׃ü¥/œô/ɉZ·† >k6º´×QŠþ%gñ gµÔ¿ØÿÊßñD¯ ²¤¡]eŸˆI\›€:/™_& ÿ•»^ý—®³®žƒ·ù4ý‡ÃD’ƒ¤·VB?Jײw =Q5Œ ÿȨuÔ”höèÂÑÁŒ!ËKböä45 ë%0†ËäêŸø’ü£<üGtõÛ¹Xâ(Ìr/l…?yÃCò…BFblý;8›ðŸcŽ< s›F"J®Ü­[0Z´Û(…õ2¬÷²^w¼ßoø4áìâ~ýOì^5îô.wš“ëJK­å¼Ü°µ»ÁÏî hª-è².Ë3ÔüìÉÄÖžjL±Pǹ¯ø³œd@Ñ_ÍáJ÷Áªô†«¼¦2„7bo={PƒZl!ކq“ó­ Õs°âS𯓉ޯ“Œ§žý˜i€á¿ÆÆ—ÇÌ„­ø&ü ž¡\ÉH#²¢’±7SŠz¼ ÇxtÿCº†â¶“ø©¦T’|d†^igÔ°u©ó'sƒç¾FF7 f§qæoõçãÐt3÷Â~ï0–Q¿ ¸á(lÅiabñ+Dõ aûß›1Ì`u}é_² ­ñfžRiàzÆMµ´ðƒñÔðeEò†fð¥’(š6ƒ5ņÿˆìlCýà#æ|€EÚ…êj“ŠdÞ'ÿ¨­>ÈÅ®õ.8ŽÀ<&¶n¼VõƒÐP»£gª 0›^2ûÉ[ÞÌ™Æï/7³Qþ‘§1µu-µ u¦› ‰.ã3?*:1‰]!4QœόØäkY­=Lz²è¼…Š©ÚxŽ'êGÿ’æV3:ög6sñ”ý‰ oÁ•\þÃO»Ë$4jÙ‰rf%L2S£Ö]ÄôßfRv®™Ö üÇ ôbƒÕKøÖ•/QÓC¹’ëȇgŠ$ÃzK\›ðôE&m5Ö_‹[hd3»¾ûëw#öÿ˜š7ó?‚ô6bÂ?矿ºÎDÛ[úqV=±eþù·®94QÌæ=3@’Mh¸T\sC§°þ<®,+‡ŠÂ[¼¶žžw5Á°ÕB¶F¿[—þ{à|¿ÈzàM5Eô¯V+¦õ£6¥vjùGlUBÕ?â)Fãžsr¥ÈgÆÈ̪?ÿªï¹&©ìn Ky`ýûà‘öÜ îwV|ˆŠ ið«§Žeò }‹óaES™×r㞑لU=ƒí[oW[Æf=[8OÛKg¾7«4!çð&ÿèwÌF¤ùšŸÀîÏáš7G;Õ¼ÞIyýU韬Y{Fÿö”ê$àLvª(¾¨kÏ¢*ŽêF:'!î?Âå3`õÚ£Žý""„[ y2±ÑïDq›“»lÚ5?Û˜}ÀžÎ‚QLû‰Ã›£Y®OÖ—µ"¡|‰~ÖüÚŽ×zqyƒX`¼jì?ìΓcÔØâzÁ|ºeÔTwÉ)»þ>c_®µ­qQÜþ~Õþ%iÀæþ ºž¬J‚ÙõåÙƒMN$ºÔ¬cmÇæÝd^E s…6Î…'…5ÏläýN-ú;Ž$€öçNAЦô©1­í%4aóÉ?ö™Ñ`l?WW4ƒðnd ùn˜ÍÉ“êzÊ`¯hŠŽ`®7A⊃‡µQ>Æ]5˜Þè£T&³hÎ"êbΑè»Z™ÉBŠ‘Â[¹Ã œ†:¨×ùá)ßóÀ®ž‚æöT Õ9cƒÚ„þª·ÙIÕ¤þ|$LÅEtRWȈ6Ÿ¿Åc5A—öœžŒ£Y±ƒ*÷]ý`mô»ƒƒ• FC¸ýúDyÙéÒŒŸÏ@O¨uÔ_¿1õ£‰'øÕ&UíE…°QÅâJÁÍ?““]GÅæÏ‰m³Ï€Ùˆî)T¼Æ7j¡ßCçܬu–u<Ì™xöìè°tìý2üGKòõ³ô/iéºßßµq¨š£{ªaŒWõd:u@uú·&Ë*Ü=l½ÜŸ1I}ÙH;¦T¤Nô0ßóàÉäÞÑQ.ÿqúÁç²+§¸=ïÅb¹¥Z:9V"×ò4ýèõÉ朇&®€å£.[¨Ç¼ÉŸÙÊõWr)±Q°äØr›ëŽÿ{_¤$û˜æÚ™àWÿ®ÿˆ^_Ñ] 1‚³ƒSŽ.ú}ôðIµ½¿tS>àWµ¥îHuÆ"ñVïBCnGÛ˜HV#õ®«ŽÈÂ¥õLè}vɬ¼Çã™ïÖýUuý™ÛÄùTFgÑ=B+fÑ:i EKœkð5‰¹ò`‘›b%¿c÷üþM.”iDDøs~·™K<òOâîÚp­…@ßÇó>ÕJ¢r2ê•0"ÀŸ{;<á?¢a›c á´ßuäBö´3¨þT·á›·Ñkö/²±=ÜþW{ô¦D9õÈ@n‚ó¢ÂàN_ÉŠb©oÆbꩼ—^x¥ 0#~àWEµ ?ÙÇ÷Ž7Ú™]Ýä-ÈõüÁ•µÃÆ.¡³ÊU®t:–ú6Qâb´½Ø¶¼O%ðŸÂįZ qZÞ=ÜÍ›w \ >ÈöÑ”¯‘[îA G}a.ju&‹Gç줬º-Œüã zñòö~4§­…ëŠoë‡ÿ𠚢^£¢®‹g'œ´]¡¸…šÉY¬ÕâÃüh¡î¹™Þþ¼:ÈÂ8ˆüDäm81EÉžÒÿj6UeÛÍ(æ ºUU1íù¶ù䥪ˆÛ•†þí B­—H$&êF´ 3S OÏ´V li Ó‰6Ðs£›õþ£“y—?IO”(ôG™Nü>ÔÒCú7Ùï‹ÈMO€¨åçï àÌù«™X«½ô/i'z‰uÍîìóÑŠlé (àWã0ùÎr>ÝŸÓäÿ7ÿ1•SHLÑÄ礱ÿ±’ŸœÁü¨— kÅÐ6]¡fr³ÚBþñIµæ^©D!6 Ö»j'ï¸^ã*àWcx®ê!ù–þ#.õwñPô5÷ÑQÊ`Å8ΦVf>c§õ \Ëž(²ŸÚþÛ €õÁ¯Bf·wÐïsVóîG2'×ÄyêÆóRc_fb¥ÙelGæÍž£rpÕ„Þf&ê»?ñ¶l!¤Ãºïße+×ɬ %l„ÿèhìVcåä%µX+5üGÁŸ‡Æ¯jèõéõ\%Øc,Å#Æ·Ù}êÑ&`*D[úãE2Ÿ2¿¶(ùG~<}ɰ€3ˆy«åå’P{MD%+íÀ3\Éοºb ÅCXèºÁ².ÇÒô±Þ‡P©MûŽdža½"èÓ¦‰ô©?¬ø¼r(Šˆdüù4²À¯&`¯’Ó”Ç>Er^·*ŸPíÌæiüG"<×=|álžú~ÃG¯øÃzçÄtrRüî²™;Ô‚®³qGo•Å<ÞRÓºcÆtN6W2¿öúݾðÒ]Yï_¡ê¥|ázÆíè_2´u>«XÝpðøÔ4þס#º'ƒ©ˆÊ3;[Yéàü×ÚÙˆ¹ ¿±jÅ»d6uÕo†‡k½GoÝÖœÀß[fU:GB P…@%k.Õ-õ-?k×èMýù úÝÞ5ê€oÏγGõ(sRà?Bð¿ð‰ˆ|†çìP¹äÃÇ|‡*ê9Ǽã&¡Ïc¿¡YîH>35ðA®0ªÅ«ä¿7@Ï}å<—ÿ¤®MqÞÚâ?öÂŽôÇí§^f"œÏgêá»1iq.Ïã.ܼ=°ÜÊpº‹Ô9=ƒÿè Ëí×*$\Ûó}‘HÛò]ÿDEõ`øm؇úÁRô¿jLýG’`ÿqßÑ–þ‰§Q`ÒÔ/âW¾]´‡Ù~Rˆþ»Ù¨o­E¡½¬LHgô º]¡ñêé¹A,wÊ|ÄõÑ_­’çµ¶úCéõYV¦ÇT³öO,ÉüÁô¢/¨Í:ÎP¬|!µKs\ÌÁ&ûƒ‹GEá…8"— Œ&6Š2\U²þÍpÉʼnžK‘LÀ3!ÿxL\ÄÉîßžÚÖá8îØ¶#&9‚ ‡ºKìÏ0…ë:hÔR©±ÏùÉ?žËÕ úÑÝzÖpvq7þc\aV¸ß /Qì*:Œo,éfüÓvò®X°*¹yÏ‹ÜÚYC¶@Q! ‹|»kWÖç  G°^ {Þ\~ˆ­'ŸyÝlÏ7™_ÒÛ"dµhtØ#Yo7YÀav0#; þG´BIl˜‹Ðï¦R=ÈŸÜÉQ2Ók99š©caøŽ·zU¼Q¶`¾CÀ'w™Žž»%?õ׉¿O©à4ljC&rvgøçÂÐCë¯*3ÿ#=ùiV¬îd8j›?_Éw«á?’wµØ@EÙ1ødp¿ÃÐ'u²g^¬ÇöÕû›þ*†Hï4‚èb]0â3‰øý>m4ù‡—™Šµç0üÁœFÓµ% øÕ9°¡Šj$™RL}ÊOú‘Þ‹]>FÿÄòøžê˜¤ÆÅ,!?ªH¿õhÎÏLÝŽý¯¿t-6èÐM<Ólà^Ã[/õÃz—…GpþqÛh_äe,Vû©¬èÏá†~w‚U‘ücœ°7~%È| ~U®ç¾:NÈ,~GÒ£¿ óçÉÙ·[F'r£<µæ ꟚYóýÛ‹XiàèëKÍãzú椦 ™L4fžqS\GÅËqR·§ŸÁÒ:Í–T¤2Í@¥#ÇJoMKe…]ïçMUâls:ùGJ« øU2Â ð«¡Æ9‰âÆu¿¿kƒDf|y{²òÝj¨d ]tVÕaP,æØ>eä0öаœ)‰í™#˜Ÿþ‰o‰ã<‚ùËßéwÏÿh‰B¼1é6ÙÇ|Fmʳµ.ñè†Üý®IÿöêX[WªÓ§›ŒT/æd§Qïau~­Ã‡k{þ£/Òhû¾Ã¯Q=ø‡kŸ~mát§¨„^w€è)³k§ð¯ÉHlþ#¥ökÕ‘oôJTi>Çä4–‹ßDK­ók¯ËÚøÚàWÍé:«ë±ÀtöRW7ˆ÷¸4èÒ!­þc8ÌÇsY^‚ýDï­X†úó˜på[ð5±Lðþ‹±`çÅlØU·N¤Hf™%BüÇ7}šøƒè;ªº=ø,¸ÇD;£Á꽡þüã‘|Dæe„{…gë¨ÚO¦ðJ‹5ÄÇÓ°ú3ÈåfPwɶƒ°Ù ¶›1BÏΊëôŽ jÕùåG=cFP ðäþèÂ^S-`,cv`íã¨Íd&žðçµ-KÈ)Н½®ôÎ0.‚e¿UÁº¥R—AªÆÿßàÓfƒ×o$Z\Èþ–$ºw„ÙÙ'ùÇ ,~juÛ쉿ý/WOò”{Í/7Ó¿dèyÕ—L¢7±bì@³°ôWÛÁ¯ªƒ†e•¯q6³>w V¢ ïý[ô‡_é@üŽryð[íÔ%øwüÚ8‰.ôG{jýîìÞTÅŒÕÏC4² ´i>+ú‹œ ¥Ü;ú0 ‘O ýwk·ì¢OÉD‹™gHDz&+Ýcºß æJ½0c™áeÆ‘‹]$ÿ8FTå;ýnYG+ð« db7ðÙ é0UÇøZˆRØ÷ÊÁó£–¡i-dýæ`@£´ËŠcå1W©jøÒt¯¯ŸÃXë:xžÌ|+vŒ·áhð‘OéfAúÙ–§ÊÛ-õi*^z9}Æ*3ÝŒË|¦ÏTÆ,á/Ï^_“…¾C³10±AgxµåL¾:b<2¿ZÉèŸ5üã˜YƒþW;Éh£+jïnÆóÉh&K¸Á©I8'—»òËÚCñýU |ÒV4¢ý韸Ÿþ‰ÝÈ?ÞÓÍ×ͪíìÄ£ ZÞ¤4g]&/.§~ðñ‘`;ÎÕsüÇÿ‚?O¢mÖæ¹N–óÏÿ]ýn$íœV®£h„ž±0k^†ÿx®ßÔw¡ßM®ýZw–W޽ KîÑ÷#xÕ7½ýw#Ó[6ƒtÈ*b€1¶â¯CTO ~qL¡¹B2¸è‹ZêÏcóNñ»dËößͪ5¦r­11ô4NPÞ¥Lè¯êþb|ë1Þqp·²Œ$úþõñÿâÿ÷õé¢$Óî~½’ÓSéï¶z—÷þ.8Åïè†îR‡_\&u=©Ÿ-èã)—¯•f½xØôÎàó)¸ÒÓœµ¢D‘G±® ‰Z†ËÞ’ãô”ᬸH/ÆUTÿ9Ú‘ >7¬÷C²®Çø+ð‹Á¯ÖÁÖ£ñ¡ÏÃjÑT«ò“5ch_À¯(o<Ä@l|Q2‚Øü-Äšt\ÇÅŽy±È=vÀåÇæG–oõ³aÜn^æzÑ¿$¶ZÁßÜËOåÀ–çãšÞpEQèq™h¹Ê¡&\}ÅŸ”!gIÖ•$j×^vn¨ñ›Þ퇧Etâw¯á÷ó4åúnÓ¿ÝÃ\ƺ¨‘n w7O¡¿ježgretØ€°ã±Û™|œÿ‡õ.ˆ œU?®ª+ÜÆc^m·ÙÜœ¥Òš§Ñ6åËñµú Xö€?f¶"[ˆ?¶;¬ìË*ñÝôîvŽÞÚ ðÜÑ|R5V›"k7ܤ~ÐýÕ s?±}LT­Ñ ­| a^̉M‚ÿ¨D%{tº·4Esæ'Cúïž É5b/²Å§ªoj˜œ¡Le£B¼Óžú£ß½¿2†n&WP‚YÊþy—<©/6"‹\íºßŒÚá†ÿèƒG_¢È©F³&ä/ù@À¨¯æ±bOÛ¨éƒ.«'õƒ)ÌÄê¬ÕX¸ÌA°º!øÕkíõçˆWêý,–íÉ?N’a M{gž@%ÓÙ͹>>žuQùRõ²Ýq óQS\ÅÉrƒ“Òþ'úÝÚšïú—ÄÔ’üÛþÄÿ¨[ÞL´¯µrìö~øÛtOܧÑk¿†ÎùR3ú'HÌm ú•¼¥Þ<žöX̦®X“EÄÐPïCæ‡ß*«ÉÌäñyãÛ2¿¶¼¬¿j¦µ ~î,=}[¸NÈ?ê›ô̯}©g!Þ]ª†ü „´‰qUt ¦? sHFç¹ö’ÑĨP?Ö·çõñ"qø;8àÅx¥ødÿðBÀ‹¦ó†{ÁS|B/~E6ˆÀüóãŽ:rÊÑB Ñ8‰.ø‰Tä1'È ßžâ-_ÄÕu"úü"W…[>[OcÌÇ.W!óö$Âï –Ÿk d}M½ÁãÍÃy ŸÛ*§Š?åÏ£k/µmò:à¹X{/ð«ä(ÖªkŠôOÌo¸ƒÿ?Ä2äÍœC|ßÝr4ò'z·²ƒ©µçº±ŸØK_V›À •©9ið«’rØC¤Þ•Þ#]°X35üŒÉªÓÂð÷ôœò4žlš­Ø\GwX•©|?ƒ5’ÃOæ&ÿðÇþ¯WvŸ§5ø·Qø¤:x¬ô" C–¨p*2x ÁVž‡CZ ÿqZ]eB¬;½8fыܾ73š§|ø„ølp/U$òãu¡Ö3D,üã*Ø=ø{jÏ`$Õ Oðgs@¯.`iZqÌ«ðÕ·°¼v½ø5*ÆûÐ×»O©‡èOí=üª×cŸ÷PZÿÖ ¼ÎOõC1µ”ŠöÚV[z7²’;§U$>ƒ8 ¾sLI_P÷ÝÆ¹Pówn‹Ñ`š·gÆpUV]ÇÌ¥þ£#Ú€´æú—¡þ|93{_«LegöÁÚÂdÅ)ª»*ð~UÃÑI‹'«nÂ÷tTA â›gÌ2ô“*ª³|- È—àɰG™Ë*e®§£ÖööÙ^ôW+\Ge/ø•7|Úqžç=¼sY®Ç˜§°¾û ÙB÷`ýÕpð«f9N GW%2³çä26ã껉éµdƒvýÌPø}Ðõ Æ"»µ NF³^Ámùky±ROú_M îŸXÐ,J\r Üó¾œ G¹Ñ•\¢.áµlŠ÷èmŠdl¢b¦7õƒ5Áæ¡ÿÍD%{[2š|æZæGMóG¬öþ£™‘\!© «Jʵ ÿG_dD½»ÑuVíþWá):v!J»¤Ó¯ÂtA`MÇGe²­ôt÷"ÿ8ô³ ó÷9Îã?®Ê;ôÀúŒ¿ˆ,êii¨ó)•ŒÊd¦#¿X^DƒöÿL„-éÂËnÔŸ·×ÉFÌñ€/¸„¦«­k¼¤þf&­3‘oAðydœ%±úÉAHÞb±¾§m'dbr2J„üÇ}¹(HTò˜èm–ÞîzhóÔ=Á‹ÜÁÃüˆ÷cÁÒøÈªàÏ9ºÊ 2 Q±]?¸ +8–þWcÐÞ¤J/%vâ-öþ‘ËŸ¼’ËôðÔvSõò¼u¥9£ç‰Ò‚þe‡£~õúHåÅlÿr…x—ð>ëåRQè§üGBô»'È?îpM£‰èKÂëtaí dF[ù„…¼÷÷ÈܱËãÑ"4Å_E5Ñ?ñb$«fˆµò$*å À‡`§KÀQ—å«”xÉGb§8öÔ“ž_õÀŽú“Ó¤‡ø&{ãÃðçáÏKÉ˨»òë3ê¯îøÊ¼™³Al"©ý`w À[ìùƒ>DÙ—ƒs¨D#µ˜öŽøèÇK¬Ný`&ÎBzÁõƒ àŠòaí/à30hŒªýÆó’PÔ`)³Á ŒR:úÀÐøUñ§b(ŒÞÁ]ÍGg¶ †ü5s“È?¶0¶uþW•™j8–l!K°uŒfç†úô®ð³ÞîÉ ÿ‘‡ŠŽÖÊÏ8­Рăœ¦ »7ŒÒ8[š›¨nïÿPø·y(xG±öE|»gp‡í{~(ÀP?Ƴv¹?NÿÝXæð)ÍSô2·û·_¥[ú µL&–ÙŸÚ ïw„úÁEèî*È®ÅlýÕDNëNC-|Kmlkf:yTbæV1øn2­È`9Iœ%ñ˜§Ìùôßo® o<@Íäü3õ›Rÿq[òŒˆgç䶪cxÙr3#ú¨Bt ‹½ß…úªöù™ÝÁÞ:Þu\YjGýA3§“1äþn"K>m0Þ¼gªO´‰ôQÌW t àµ%¼·­´Ýg_£s?¹ÛRÖnO‡»þã=^akò6‡ôO¼©½/e-Î{ ¢©Í2©õÀÊc¦WKU¡Í˜vÍÙŸ‰ê>Ô;Úó?ìùQýÈa?a{‚äJ~.-™M4V—Qצþ}‘ýî×ÉR°ác$a_ŠÜÿê!ùǘöO<èhB>² d7]áÍœq\æ}¾ ûáC zw‘\4Â=¥þ#³Œ#‹ŠCzIJ…¿®5§n÷ôD“ßÛU@Ž–·´Æz ìÂÓ¼Êü@ÙXôuíÃ_?Öÿ³¢ß}¨gæ,ÅzÔ#žÏª–øŠ‘d—±S@¾éù(³‰‰a-ê÷ÎêK„]×­ClÆ*åÁúUã7¤܉8ý¥ô—Í"PÿqÞÑR”qøGÃVêv'.OÃàgœ1êçÞá_F?ß•dߤG¸øÕxð«µä•ƒóÿlØœbä6ÑP"ÆC¬°û^ìÄ&õÕäIr™¨\;ê&ƒ¿MŒÿð” ‰*IŸ%“IÏÿÛãʱŽCÕ@=â‚¿›Ellצ'¢Û%B´9!ë&Ñ„X†Å_Ôï8ÏVþ(þ㹑KÞO±LãÁ†z’LÉKI–¨Ñ# ÿqÎñH/$o“/ô@?d÷/iÍ{9frñqò‘üF3ôBé?Dîuާ? Ò‡ç}‹ùç¡ßš:z-b•NFb<†;u'þ‘a°ïþ**SŠ Zké%{[%ŸKßÝOxû)*#Ñý(Ÿîó¡ñ«8ðç¹ð‘¹ñ`ƒÀ§¦qî²Ò[<ÆPj¨W¢oOýÇsüÇ4ñaüŸÀ÷Û=Dz£IBñç& ôÁD'Qø{Cð\7±¬sAœN锇ïö!&Oä¬H5^{&Ýù¢‚ކ§ºæ4™gµƒúA;B ùÇ_L} 3VopоþT¥ô¥o1Óþ#³V/ü*’¥™ãÈRzááŽá»¶ÁXTünþy}G=m1…»ò¥_K+,t;úÞE'åo6¶s$ËïQ•l!«9yÉ~tYeÍÕðKñÍç9E-•f,u]Ü1Ç!ý"ûewª½ŽŽ.ƒÌ©š“­Ý¡Êls Å5:t­æ¿ÑP²ž˜‰éëžØ,„þê Xw†ÿaGs ßÇùèL´Òvæ«qËt8‡ ™*L_ǼÖ"òíXýOÌ|_Ä]o§ÿÕZ3»™ þã o¸LæE9Ü•œî¿[ [Ò °^Ž2ƒ@è¶2ÿþ4ÇXñ:õ­ð*¬ýêÓçãI{š÷‰ÁnËEX¡?Qª™2dâ»ëÖÿϿȆ÷˜ë: ±˜?˜Úõݯ}¸¦¥¢ÛWï!† ‡^U.8:ëJן‚_eÖÖÿÒr'ðeèœø@^è)RÑ¿¤ú«Ë²²LN?÷¹¿Ø?ñO=h»'úÿ¾X§ŒÒ]ÕêSÿÑ `ƒ,–Ó(‚ùGæmEU`Žgb—ª“‘棚«±O,äwNƒè‘¥ÉB‡Êd¢Wîù ó?j‘ÄXÁ …ykŠcõm„{Ö PÖä /we3ÜgsŠúÁ%ð@¯¢ÂtÂe"Þ÷î6Æ>]âjð>ôGéõU.ÒÛ(2_¯ª¸*–9”ô§ ä Þé3ÜÀG¢ýí n˰C;ùœtÍŒ]†uãNí–öPæÁOÎ'’>Kæ‘ ¯Qΰñw_ã8oþKV ÷ã r7Œ~쩱ΟõÞz!ëÆEÜ,Áɽ`“•f­¼à‰1Ô-£±ôïð}É?Úàñìl"%½ báV…á?¶Ðÿ*Ÿ|ˆÿ˜ c޼ b\pÿ’®XcK¥7ºQ °…ì bÙ5Üõ8,pOvÆWÛ„\™ýUQ½µ,ŒÊ æã¢rdb<§'þ'5 ¬É`ö¯©ƒNNMv<^b¢Ý¼Dã“U"æc® µ^‘f¤Q›ü£˜Úx®aµ÷áWfRé½T¨·åÀŸdE;¾"—zOµIlóR2º$úèVü¦÷“žåÔå θN3pjŸ#ê­ÊC,ˆ5Íäìm>QàíN¡ÕŽƒ÷ÁT·y:—B)/.‹‰xU?NÉ(ø‡äÁ^ê“o$Ç´‚©ö%™CmüX3ÝÖ»¢•èÂÕÛ1Ãtw•å×–rÔÔ†)àZnQ?¸m¯2Ò’_5€™(MWsêç€êDsÖ°Ê ]>gW£›óÈ?æ*'œREV~%¹ÖÛí8Hýù+ÎqãÑÓGñÐHjÖ¢Kn&t°ó‚ç½¢Æñ*èÓsF*úƒ8Í Tjú‚Š%ûÏ+;ºö/9õçe=¼QCj8—J?ãŽéæ¬gT$ͰƱò8Ÿ¯Üó¤ÿWÜYÀWqmküÌÌž=sâÒ"¥¸; .Eƒ+)nÁ[‚wnw÷ Á!'A‹I€@Aüý'÷q‡p“ôýÞííï6!4ûÌìÙ³äûÖúópw¢¿ÿ‘›:ð3<‹ðç×Az?]à%ôwŸˆÞœ¤äHË…—‘‘nó«t_.¥2¢½éb¦µ³¯ÇßÕ5é‰!ŸÙÌu4B`ý^Šéd×Åe„žê™?˜ÿ]kn§G/6DãÓ];M«SªPÕ_ûý«†ÓÏÖú«;äG¨Ö÷wþ͘þ|΂Q˜xLvm‘Z˜!60#5üùxê_aVmæÀXuwt{€_Yþ#XôÒ#àXÜ8!ݵ.ŽÓ}úYA¥’AkML·,Ì ÿQPŽ¿:¨M!>€? “ÐOôøôKÿáëSu¶Ö”¨$a#¿ý3ìceì~7«B“ÿÛdIx'¥¡pFÙ¿^öœmÅ…Y!”Úþå As°›^Tìo§S"8Å<Ês±†AêËÕB±ÜórµìFCPšøF«º HΊçð OÈM–³Ò&­U [WÅ^­ú7õ5%þ< VaùÀö.ñ{%®§0ü@ìasðµíx»ìÄy>« 9…`þyLgÇPÕÃQ‡a"Ž`JáÛÊâL¹•ÚMðëÖ ÷–—·ø¤ï©|ÉÀ'oŠÁl±…ƒ—¾Õ a3Ú2ð.µSÝÀä~€CmK·KJªàšQ¿º„xÿ(¶ûHpŒÎ{:§},¯¶á³ÜõŠtˆÏ'†>‚g›Aœ¸$  ³À3'EEqjT^˜>¾`S«e¼ß§õ héÈÖFÒˆÿf'ˆé>ê ž¢æ» ‹|¤ü5•Cwø´Rp ètÎ/ z!,©\k uÒ+¾P»päj¿à1'Ê}ú>z²ÑB—d5ð‘WÌÿ¨hïbBq0õ»Yéh?ˆÿËÝøc·N;Í?÷&û~f¡å)úè‹ä |Z´½2›y@Œ>¬n5Š#O©hNõˆìl(ÿoŽ z´Ffq[=ê¯ÒS9ÿ1UþAÕ\ãõ»6Ó…™"[ÐO´âüÂö?™Ç7ò/¼C–#CJŽÇkŒ¿Ö?Óo?IÿG0Þm3QD˜,D½µ Úı÷ ðŒ¾èE³ à ²µ›^~wC3\yö·ðm(a‹‚bœcÿ (ã´TDŒƒˆWÓÿ±EO_”Â<Ç*¯˜ô1¦{+ŒJ(XV[c-,Mwøó¢F!PEâ¶0ø»ŸáW”@ü‘;ñJWΕMïad²ï%Ãè‹ÏL„//Æ$áq(j]Çkö”èÿp§îx¼a' ›9ùY`VRŠ_›ƒÿ÷Ÿd¿šàØ™¤Ì-ìøSü>\*éè¾¢öÕRbu!úÛº©Ï¨È:«žF»*~Óy/PsWžÊÚGâ¬H©Ôi¿)%•Þêú"³h¡W[Æë: «i©;µ,kÞûÒàWg”†êc1dè±h@z\ûÏ]ð‰´pˆ³ñyg ÊÅœ¦KÚlÞSª*95è %2kSâ°…ÏÕyZ+ì°UúfÙ©FØÐá0~cXï!–'9ú%D<"I¬÷ìc[,¶ROVŸì #`µ2a_o£YT,ÇŸŠÒµL'™¡oeÕùNU˜__îlÕšÕ€è ØmN®ª¬Ä+ò·üÝb¦Åøª5ø_qI«öMý«ÄÊk%Pä£Zå=‰µOÅ;X‡X¾8ýzEõ¹ôI\ÇyÙÄ#l‚vÕ_iB‹I¿]W"ÔË" ë‹o8ÎoUÀËUÀƒÍ*/&k·°ž­èyiKfòÿM&v1%µh1é—²«µÄ½ ÖÔ÷üÖµ+zzønpÇ6™®ô:{–çt“kÞŽ%˜IÖ4åìH%…Ó“)£6/힟£µŠ<ÀI™©ÿÿ~ … øåL¤óÇÞeŦf"ÿ*€çhÀú«¤‹ÞLDs’ÿ~&™alóáϬW@¬?˜^3ØÌ™ôï¡Ól!óýèH¼LÖ•.Å}š‡ý³°Êtêà/¯PsgOÎr¬þÁñr…~l±…އzTø<Ô%ÿð£þ¶Ÿá~•ŽLç­Ëñÿ‡èü²KôšfáWÁd¥mØ¿múr4=vÑ[¿ŽŽ¾k CÕ‰§½á|΀’=§6Ö^¡7Ów}a_¶ƒ˜ÀQû<Å\Å4õ£Fôw?ðͱ0'xÝÙŽü#H¹ náW=8½kDWêw}ñb½É?Î×érLj`?ÈUfGן.ÅzTv†ÿØŠõÚÀud!ÞI#¼wüßû&5ýƒÑøU¥ÐÿÞ§ å<™®«Ãð™¢ì’Ÿm€ú“ ê>p±øáWþ¶«(`Ûà%‚EV}¦–XkFn$©Èj‚~I[ÍSm¯ë,®¦€G8Š&êP¬|mñ'ý¿£¿KÕý]ÈBº3¹".wžÿ‘LëŽåÜÍónJ—_Q¹tâšæ&~Ë’”Œ2)uxY´qXð‘ºLk‰-J„]ÝÉ×êØÃêX®~¼óy'I«ÿüšìE‚X¯ð¬m–ØEçZC‰\x¢á ,™ðF7á*cSü±®ëÑ4^NüŸBÿW¬üùBüÇ,˜n7ð¤‹ô@ô Ê€O³tKMtû°ˆsœEWêcÏ¢sY÷WiW>(w…+öÇš›q>8 ;_‡Œ¾õ‡ùôap¹—؃Áävg`üD}ZúưïmOT_a‚ùa¯¶²JAö­<~ò)~¸”˜¦Çò·Å4Á÷&S@÷eÉax¹¯—ÛË–âÔ†Õ¥^j¼Î5r fÄ©AlZÈÇøß< ¨Ç…Ÿç©läW“{ƾ#ÿ0î¹ÚŽsÛÉX7ÉªË ÿb—–Ñ ¬Tu:ìÆ^ô¯ ^Ôíjø˜íä ôgËü(4­wZ¯xTþ1 >ùv|»ô wðÀŸí£fu ÝÍ{Ñ/h> ;*fÜÀ2'£–-#}z°Kùä ªç+¾V­ÌÉV”o„< ~5*ÊDÈú(1¾cFj1{'ÃWVGƒÜ‡'“¶â#÷?ŸgµC÷uâ?öá?Þ“•_uÄÃ.–>`þi(´Ü¥¸4]ÝWÌùTIíÀ|o bW§H׺‘™v²þg쯋­2šˆd!§µ!þ{0¬U&ê“›ÁLXýƒ{È?RPëô$§¤¥L×E úð›°wÅÈmêã?Ð/u<ä‹¶ÓêÎìYlþ3*×ìDoeúÏk™ãxÍÍ-ð Ì-À*÷£Ò¸·IŒäïdM9–ˆ£ éØ?eÕ ­xòõ¸ÏIàW‡Ð¿*EþÑ™JâMôÉ?¤½ŸŒ_kGÕÙ(´ýŒâFqz¦n‘ÿž$¶<Çùüt¡Ô4cÝL=O_#5ÓjÏq§ç©vÃSVµ÷³_Ig’³™Mà?ÖQ ¢üHl#oIŒÿH'v~Zð¿ø5+õWÑø•AßF^Ç>Åï2R(G©¿ ¤þj˜–V­Ì*»lMÕ 2’ ̯µ+ûãµÜú?Ê¡žøˆºÕ<úM×ê²ÆC»+‹¤¢ž¶>žùG 5%–ϦܼÅU ”’įîDá6ÞípæŸ÷ŒÓçVšÑùÜ™'½ëט÷8«œC& 1Ôå05§•Á†æ å‡{!ÿ¨€NJ¶¾T½€< ¦Ó‡è7˜³L•S ,½‡ë$2Æz…GmóÅÎ(þC­Ú‡e]îáEõÔ>z—ó`?׿ë±³R_­æˆeÅùje®Éªk Ðÿ¢’k0^¸0öó5•š/ñJËõUXÒ•ø’]`MgÄaüü·”É„rO ?‚¡yýoþ‘V‡},‚¥(†å©+ýˆë­ÞÉõXìä!Ôh‰H5¦þóôTÁmïÁ„À‰“gUÅk–ë‡ò^¥@û,loc¸‹Nxù¬™Üî'8„˜ô¯Î’Oák—€ž'ÆÇuá}‰Å=| û°zujo  {ïyŽ}åèºøNMé´©ßÍÇu•£Cn;Œò~r¸p5ÛàO"åh£6ó岂eט¿·_ŽrÔJv÷"+N¢þê”a§~ô:ÙŽ ‚S©8.p N¥A~õ““~bjíW²Ûc\Q5|Úb|põWÛ¨bz*›bï_ÃôµW6._ „“.B½“{A÷–Èg`™{Ô/UúoR}øÓú€ªâžt“,»`;“Pû a½:pß·Íæ¬7צÿc{2LÒ_±ÿÚýÝ@Ç»RþóqzIz5#©y[!ûSO˜ùQ–ÿ¨‚¿Ømn¢ÿ£,üG3³øÕB¢~WcwºZf7Âx^Õ¥¡Ïs¬wŒü#”'¶‡3ò¦ÅïvÃÿ¤C§½ óʨ–š¿ð†þAwê¯ò x¨UØÇP´¢éÿ˜âx"••AZbÄAÄsáÏ÷éI™Røb(0†¢'?•~Ô‡ùà{GQm<–u{I]Ʋÿ â°˜åð!صW¢'®7lç.1Í(`ßÂUŒ¦Æ*’ìhú»£ìÛñé9Ìò#ŽíÑ c¼ã9¼«ù½¼àWödþGNôw£ó„°7ÿ·]T~†+¨yá?¬¾æ3¶è_£_r\ùh‹~uÑv<á%ªOE }úíu%hV«(ý«­êïŽçé8(ÿᛲj2p ½"79Jb´8Âü¨»Â“è<)ç ,-š!û Ù²*­Ck†ÝÜÅŸ‡R£³€gxA›…廉5Moj×çÑÿ­áöíoª›µüæ÷ÄÞÞQü‡å?ÆáAˆå`ÉZºÿü*i¬÷|Ò6[l&^«LwFVРAX¹tXŠìjep’§ä `{vbóè Õœ±¬8U­…ÝkD¤uz°‚ ÈÅñf Éáð c³4*e½Òú1qþÊbúŸÂù—(*±‚ê?P¥ï@ʲ~Âo{Ñgw ÏÑ¿”¿_NeI9æ¼S£±ñèu“*/Ôe"ßsœëó•tÃå¯ßâ^Ë‹¡šÕÑ ¯ þÚ•ùV¹Øék1äGmÏU½_AÅè{î°kTÎòV¬vì"9`9ª…ÆãžÖ%öÖªu˜F†Ò åº_õŸ·¡›=Yi|ÎZjh½AëæsŸ+°˜VþÑ.jþ‡?ók‹RUP¾Ã,ãþ§ ä¿r®ßͦ¥ÀôAiò0W°DþI=Q_økõEøôhg£函¿Cmzê¾[DýÕR<ôê—ŠðáêïìòmøŸÁ̆s?wål2†up]éÆ~Ë?…ìÃÁ›ê`wÓ9”í®Çø·iÄ §á?¾ì½¨  $é/ÿGõõô™{3i ÒfŸJÄ$W?j‹×€ê‡óßÔ£V 4o"ýƒ½e“Ïô+ت)¨&ÀÔûÁ9-cþGÝ•>Á_©¯-¿Ø~õýºÝÓlˆâˆS›Ê+è(YŽ·z2ö«L v•¶#j$è«/Ï#TzéÁÚsü›]â…™?¸þãœ÷ú?¤9ÙèÁ•ÚÌn†ÀÞÏB¦½¤ªþ¼ãT—Q¨ça­.œÏ¹r¨Ø«ïS+AÍs]Vx bJ.bƒ¶Í¤þªcvÃê¿ÅûˆêþcŽÃ„*744„'‚>ùÇúwÃÅ̃ٚDgû[s }#YMIsªTí-‰Ñ]FÌ&Ö‚çbç“‹˜¦<;6áÿé›,Êb&Ø~ZÜ#r®Düôw±}M \RÊ0í¼ú»‰£¦“¶µW‘}œT÷2¿6¾ú%7© HÿyšwC´TÌÕΣ|Ðv£_’ùƒ'ÔÖŽ«Žíʬ¿/ª&?ÁüØèÂt€@måŽ SAºÐ{ÆÑdQÚ*‘jW¼ÐÚ¨tSÏ)qšö“L$ÊA¹öá£XýÝKê\­*QIN×.lLyÞ¾ŠD¾ÝˆUPƒõÆ:Zë ôÖqè?ßo)¶³c•¨ÆÏÓÑKœ‘“yÎóßøUððgD-[©¿Z«þÕÕ«¨Ë'ÿÏ‹ÿ(¿¯³ú;2¿°ÆkXi:];aG®Š£ôéXµ1ý/ó?E&ð)xF_°¦ \_u‰ÜXŠ<Ô²Ô$—ðæïºá›¯À/uÁ«¤Šv:†å’*Áêzñîý ùãa®¤.O¸0yV05Ï ˜¯pŠÎ‹öXÒføùáú0æŸ?eg¦’…~½Ü^æ!胬¢gÄšÙ‡÷²3Þ{ èJ0ë§Ëñ<ñü ð«W0›ñ ñ1½ÑÃHü•þUMæŸâsËaïWp_‡Yk'e%ˆ¿EÂFô‡%5ÎãKrƒA‡|Çbݹü;—ÞElqÚà tç³Á~lb•)x¸±p'©›º~Ì~úW'¨¿: Ë–õ ê»&‘Ó,ÀçqâÏ#8Á“‰v¿ë™Ã>ÔoÈñôÌdÍŽÔï¾1Ï›5èÿXO>ÓE­ðG™Æ·üê!ìÔI§üã 6Ìö™YêrÿÒá'V2#oLùpû{FBû8c”\€'0ñ+ ØçÛ pÓ¹æÖòWqÊñPªÛÜöj.O¶)þ¥ õŒ…ŒÇÌÿx†æ}+:²WPy[ÌÂ×̼àEë¨ßu…¹©ÅÕeÄî·ážéKëF÷&јõ/QcÖt*‘ÓÓÞØìË„§>XþÉô>¤÷oýç;äÒhÈ>>#7šCÅEÁÏ*ª³)R¿Ûtµ*<Ïp±[ßm‚Û>Ngß3žÅ¿ÌÇ(tyš‰ìt«Ìgþ¬;WYÔ( ‹DT$VD÷Ÿ‡2W•颜–Nà¶‹á?ž›»Ð/ig„àÉÜÙ»¢ö‰àW—ñšå%æ4§ïq„‘Pn#£ÞÎo¥‚?ü¨Å/BwlÏÿ雕 XŸ–H{þwõwuå2úíשߧ٣𫃶?Ô·x”óô¦Râ§îuÃv ˆÚ¨àW#˜ÿÑÉÚ!Q^hè'Ž'ÿñ‹jŸïS˜È, ~å¯ÔR¯ ”FBšjÄ«qëÿ(¬ôT>ªm±™«@8Z€«Sí>ø!{mïÄ9â„_=T/kMàV“ðo ¯F|kUjö&ÂÅ©ÿˆ/ÈÎùŠ™%ÎU¢Ÿž[ô×öñ‡NÉjºJz”¨Æò±ôÛ©%-Fý`~ï‰XHæü*¿ãÙG¯ñùwóÕšÜg}˜é›Äøù¹¢Ò°/ð‚ž…@VßDư‘hqW}ý«:̉ü|…èï+ÁJ¸È64 rÿ‘žwðgþT€ŸÕÔ'`g““[3ý6b‹Vâ~E‰ä­m[¢WËÄüÁCàWE`y~'"ž×­;ÄÕ¤CtŠvˆ^Šúì‚…2vûÉLýUf>yO þãí!úíð±s±XïˆV{Ãn€XNGx$lM:¸õÛÄóLjõîð¤,ÔnùÇH˜Kó+üªý™ð(²`ï+ÐãØ ÿQ‚Xû>c2Ië©ß½$SPeáW¸ àwñ…õVb±ÓæÔ2ro(AÊ#x r4Ñ(Ô™‚Äx1[é–fõWW™?èO}o ü‡>o'>ß[{øVí@TÁ]á»VPuI¿Œã:c˜R+ì`˜ék6±"ÿh~uŠü# ¼K(ÿí y ß¿×I?ñüG8'6Æ»¸é¹oÔËXÈüÚ§ C¹è??mö4öɵøäp>é•|L5Âð½î²ægú%el•ñœÖ‘xêz`H-©z°ð«ÆdµèðÛÆ¤Þ”àE¯Í–f5jÆŽ ßÞÉØÊî­Ã[éøÆ2¥>ÔqTŽÙ6©Aðw–~É]¼Átq_¯lt ¾ö:·à?.Q¼ƒ;N†.Ȳœ üü;£<ժќùƒ¢„ðr<‘ŠJW‘º§ÄSÄ´Z"È=Ω¥cÚõOO3±ý•ÚËøùp2D#+UàOÁnoÁx‹‰Žü#üê-6Èêl¶º“ƒWµ'ÿh‹~É1Ôé…I`Ÿ@¾åbîaüÝ4ºC:wð6÷Ä¿ð;y8“†ˆCàØžÿÓ7™©¿šëؙ̠WŠßÂÉÐO,£Þ£þª‹ö¬Éf»‡ÿø¨ž£ÿüõ»ñ»»@æùÔŽRO¼+ë´0õgÅMÑЪrIDCôKZÄë:«¨iahPÕ7ÞU4g•hšt͵ašÅQ?ñ'¥³’P³º"fòä:qf''®¯ŸÑ¦IŸ'y-Ê€_ )ãä?î2?ª>yGZy^r5³`Ža£q–nç„Ma{ –WI¼‹õ‘¼±ÇEYbñÔĠǰoV>4‘Ú[?bálÒŠ×s…3‰ŸŠ1jîXvñÚ˜«jÈÙ~ÎX„»+EŒÁ?ï@q®bçw‰o¤dþÙWìÑê+å¾±&‰„ú^äU›‹åµ&Öþ€ sãzÊ€‰´Ð§¥ ŒJ¦Ð— â º+8\ªá¾32p¯ÐˆŒ`§Ï°f®Ó »ž\RW„~âmØøŽü¼'8SJì@^ò1øãà¥eÄ[âûõà÷I¸‹_î£[ó£úc÷ám둬‡ÿÀCm×—qß^œ¥‘ÔïfPu§{î­þ,rb êaÑW!íÓ\…ÿðÁâGek´hÓ2×/3u9ó,®Ì~½“ˆïËê¿‹mNë1)ê׆Ç«˜Íþ £â1X `?¡;Ú4á£+‘-ŒâŠK€=À·¹çŸÔèþ7k3íš;§õ*¬[mVMíÆIx”å°*µaã@`Þ0ÿ|ë5ƒÙ—–Ï÷€²¼ÏÛæ¤ßDõúsÎ ®êyˆüÃN¿|J]ã5ˆý/f8:UÛ êw¹ÂZ lÏèÈœƒÓ^VçϸýçcØ«‘ðN%ÈRúŠÖôkXüÇvk$ë¬@í6ö´“Y‹É°»á½Ë;Ù½µð×ð#Õe¸ˆ®}ô³P X·UV.‹ÒýÅ|-º {*ô¯–ƒ7Â~xR±lPÕ0šú«WØýì Ói©onQá3ý«Ê-%gÎòî²€¨*]è–q¡~«“tìŒf?EÕn˜ùµù™ä6 x>9<ÌE¾É;}WŒB•)šÿxGÿùsîѪà] »ØHgïƒÖd®b þ¬6jú£éÿ6›š3d$™Òs3Uq¯9…Ä2®$7ë[;vð¿÷ÍOøM޳*©“Š£ùê‘TB¯½6‘yž†aéï>¦ûãšz‘ú”ƒ1ÿÚ7~êK?p3ôwSé–ÿ‘@ûUɤ¼Ö6ˆŸél®í'ÿQJMG¤ëMþ1 +3øUõ»wP-Û„MØ…NqįÊ)Í•—j{Nã1¼FKp¡`3[èÞÚ’¨¨º¦~˜Œé…*Òi}¾qwŸÿø¹ºE³z,tjã+½ŸJ¦aØÎÛQ¼Åz”í È]ìþÃ×6ZøŠäT¾Õ]¥76°½ž Ow•w¾¶ô,gm)½$>Ø]Ÿ+ÿ±WmÄoÖäM¹’V˜Ü$ŽDýî+2ûä2V%×ÝJ\eˆ“ZÅoê'¦¥~× ®&ädóüÀ ÞÕ+äcÈvƒ­ÌâªF\•J;òù†ýï÷Ry§î‰À*üÙ«ý¬X‚˜° žÇÀÂ'AÿÊØµ;üGp† Ô÷f¤W4;ßùÄà?.qÞ*Š×Ô_- 0ˆ|{€8u%+°êyUyš»nÛ°Äþ*^@õ–â›­t›P¾òÕß8kð7øœÕ0(kðÀ 8)§¥N߇§ÑŠò'üGqþ=íÄ—zA˜ñ&T«n—Eð_²6[E"Þ|ؿ†Œf°Õ]Š÷ƒO™Ž¥^Nþái†qu5 XÞdTÜØÒQ°Éˉ’;é—$Å mÍ@ž2 ÉêôB¿} Pcêmmö;àW#P“*Vfgýà[æ‚éÜ"9Õ!ýX.hƒè_zCžÛ‘O|¨o??‰VÕJÙÿ1 æ¾ñë¼\KàçÆÁRx!ç³÷£1Õð³ùµÍéôÔËÂ^½Ðs&z ØAô ¬^VyÞi‰õÓÛÛ›ùÁí¶¢Æ[ÂØCöº™zè‡ìvKÉÌ4ÇÅݳ]P_áÛŽ²á2'zeP~鉯pI:Éäa>fR¿{”þøêSè_õ¿*ÃÓxÏ? ^/¯˜ï°’镉Qþc4oýB™VìÔmÌæÈgž0ë£0‚bnZ»Õÿñ„þó6Æ@¦ÚV¥D-Ë=oQ+ƒÕÔ€¡¾ŽÕÈBW”:„÷x¹G0ôw¢Ð«…œúWø£´ú\ô¯Ê'~uYQ?øh{ Ü©_š‰¸Þ• ÛïS•L©ýƒ5xNaµ'c™s÷Åa­ïjª~•Ry£î€±È%OðÞà U¥ƒ·4»–šhÌ.VkpÝèœnC0žUÁ|˜xæå1øoð+UõÓ»u¦§+÷”t5\¾(4&Þ_Bü ÏéGÕ²¥13œⲦ|Å4 ÿœ>@2«}0À%A{â‡ó‚_Cudú‰K™HçO/H>òòD¦©AKŠ’L•PŒÆþ½—yµlDã°§+aT&Êñ`‡SˆŽ#áôGÃ~¬3^ uoU&*º·úý’©>®Á)˜¬+NúíŠÖ ~éª[. >åð«q(®¯¥bµ.|E¸yßìiÿ™ ®hÒž$CJ!ëôÀ#]¡’ÉG-ûÅSÔ€_Ýålþ‹/Ú*{àÏGU¤ý°ö—˜ÄÚÇ”·F÷Y•k dw4‘DãÐ4·¹+ýA…=‰O,ý«^¢1xÓeò;t”L56q}ª™‘(¿œÙ•”­Ì‰íj, “Z‰÷{ÄÊ­ä1Ó±Þ1ü‡€aòoGM³—H(÷QguÇLoŽ$ô€ùATÌ|BÇÅ$&{ýH]o"£O.R6çí@5ÉÃq¿y•aÚ¼Ÿ½y˪ î¸’^—¿Ð¾Ú'ódr§™Ù¾ l-©=îö1xwTW Eù«Ä/ô \e^ħ |¤„iD;¸ÀÞØ“•" ¹_a|íïàW·Œ£ÌykzÙPU”ùµ'P ži>2¦< †°ˆ±°| ÷OôdS6+s;“D)ËôO÷¿¯ÐOl‚^{o­3úí†dë¨ÅdRâWüÀJ<ø”>Í@jxiÏÔVô¤ ó¦¦ø‘Yå œêÏc»Ö:ªNõé!‘Ž÷¸™^GT7/Uÿ>Cƒx§«o,Y" ¿*…œ~ÕŒˆ"­œOœFþ±Ta$ŸR”ºˆþâmà7ÖøüÇoÔµZC¬• º˜»X‰±¯'\Ê"Ø•§ØÍœ"£xñù/Æøý›õWYÐ/QeXNO}4÷½’Øë ý Eñ `CD/løÑ+Vüj­Z Σ)oÊ5bnK¿½8Ê{bMf®ï"ÿXÎß„sï)áþ¼˜?Øà'(¡¢ª×E y‘ë7*Ì•ý е+{Ï4;ò,ª“¼JK>Õ¤0¡“ö¿]y¥úˆëtÀ­'"ðaÅÒ°%•È[’“”Eÿ*„l¡ÚRÍø¹;XTbtTÓ`KGÇà?NÙÞ«ÕÄ+²€±à ‰ÁÑúx ‡×™MÐO¬˜Ëø[{«fa€ë8ñ1 ˜übSpºç–j[øóÎzqøŠ±X¶£äˆ©}è™ËLï° ú% °Î9Œª†'½âoé"šËóñÀªææ|Fcÿ~ÌU´ìTªMÛƒG›þ¥Ûä¬pú«}DÑ6¦)½ÁÃyð³Qò#ïÈUzÈzø¦“9ñçI´.xÇ‹úwø®!`DþúSæGù»Q°­}~Daz{/2¤‰`0¾ zÙð}quCÈ?èלê¯h“Ø•GüÓ‚l⪾„ú«5äYé¹ÁtØ’T¶dêêYyË0Ì÷°ç͹×H|Gî¦ùG´zlUÛh¥ŸžOz[¯#ÛJO1VO†,oÞeþùPæŸ*Kžy‡Àn¿À:¯–U@â’ã3+À\ ï‡/ZÖ¼šý<¯ùýƒSy’ °Ò¹˜¾”Š«íLd ?ý‘‰MóMo#ýƒ¨Š³ôw‹“ë]¥?ëÈ)ªŒÒrb9òLçÊütð‚1¯ V$-ÅÝHó4ýì/¹®ñL§j@•Øòt¼17ÁYω>ÔEë—¨ê3í;lIÎÜrä!ô®b ûPtiÅAÆrÚûØWƒ‘52—Ê î~Õ½½Á¯6QÕïÅof%’{©­uÜñT_­uœýDôŸÿ]þ#Òv–þ窧6EKeÝým­Õ<Èõ²¢*ñCçÚŽRõ&Jÿª ¾‡ùµ«”ÚŠ6Óž\²æ¯ÆMmäÓNJõØ÷qj*{ÑÏÐEÌAÊõ¾è óAgz˜ÖÕ±Ÿ~+¦¯e˜ÿqQ-Lþ±Ì¥ñ®«Ü€¥¹­ÍÃ’^à¿+Šc÷æˆ|qÒ¿º ÿQƒSeU?nb«‡®ØÂDl´Å<"ozG'ÌKô¯ÒÅz…ÛÀ¯ŽÓ¹V~â'¹•ˆf.ø×2²wXflÅ=VÜLá¿ôL™§f‹eÅ‘j5þËfDöç`zò‚ÖÔ"ÿPé°KÍT¾—àLKõXF •¥¬Ô',ÖZ|s~Ô+›ªIñëAòýá+~"3¨Æ Uå+²¹½D®/¨ŸƒÝÝDN3ö#èÐk5&ÿ¡)þê"qMw‘‡ñ’¾ì¼¿qˆ¼+\GýX¼„Q˜„5iÅ'MÆÇ¤Ã¤dõ-1øƒ¶Ëjfò &½Qÿ8}袾؋¾UV¥2õ±ÿEyœæ4ÑûþéN¬%ùÊTT›€»6çlÇUc½Vœ—J°é/P¤Oþ±ÆHH¯Bn"ê9`pïùdꆂ&¹2ð°ÓsÉ«ý€î±Õ±{;YÒ/N½sr#1hÕ4¬Þ ã)vÿ;ãÊ€¡ä]IAïß›üÉýï`¿ ©³¿XñqA{b‚tÒŠóÛ±‡—ð‡™ž!±Ó݈í1u{9¹Œlÿ²”Œø¾ýheyÈ'Ä"·œôçViÝ8¯×ÉŠºÃfÜ×gÉe`þè%®l\ :öO”=®šûég߇ÒÊwFø˜V¬G”ßW‚U;^¶N¶ZŠ;yøHõWUÍäö^Ôíž"BOi怹©‡‡KŒÇk?Jª¯v¬÷Ñv_½A|æÍ»ÿDN±Î /uÍïíÅÌÅÜ]-*§<¹Æ#\£—1ÛA`aÓá?êˆíŽýË­,Ô r6bïȑ‡Y‹¦½«T…å9Áœ’Ôöý¬héùNgê¢ *]ŒJä3Ïõ{0—Å\ÔP9òJ¸¦rmyëêKE6øüêæüÇN£¸Z~³¥}+ž34Ê3f[s ÓǼŒT0*ï^o¢!å?R¿›†éçÑ“-SÐ=øwý‡ªœTÊ£ŸØCkþn=vû<ó£BÔKêÕOI®ÄTƒéxÄ_}s•šíÂäd)ôZm¼Ò„úݵ¢(ùG5ð«¸e Ÿ.¡á?¼E"ÑYzE1U„*£ÕË¢'Oó¨ÖôKÚ;Nȧߊék¥‘r«:K_…MhLe'=fäž»4b`ÎÔ >%˜#mœüÇyæVÄžÚÀ6±jVy,ÇÒûóÇFÝc(Ä) ¡ó¥fô¯ŽÛQ¿›¼) |iY̬þ Þø]ÔåãÍçºïâ7‡²æ¼Xûw«¿ÕÃü²dé·»Á#éT’(z?ÆÚo¡»y×:žø~³ØÀüÁFßØÇ¬è_=™° ^d?ä Ù­fxŽZøÎẖ'û?†OYBŽÒ ýÝwêÕ„¡„¨ Å-*¤Nâ?Žpy¸k7î43ÝÜÅ+ÍšV>mô¦Ä‰ÓùJî8!;»,ÿqžy3µñea›â-®YtÆBd‡ý¶°–첕©áXï³2ˆg²ÏË•¶&†ÒR|å?ÜÕú¢º$þc8ÊL{9!T¨ñÛÁh^Må˜ÍD¡ëô+4bÊn^ù†Já¾Äº£±ªÙô_?›6ñï[wÑÒrÃÈ?6“ÏxÊaœŒ•ø;½ácÐôa>xôwïËÆKlnJ0·{ØSOìôLNU§÷Å®Y|þmªdË’­´Æ]•3@œ®Â©TÍyÌ4Ö2ö:\a:.Ná=4îýÿí4y†(y‹“~Éyú3R]å?NèËè3_CÿÇa:Â/ÓÛ] ìÉ›h?D4>p…]ɹ<ÈåöS­° üÌõ3ý’F¶šJ¢²ið(布ž¢ó?,þã:5IƒÁ¯á?\à¿‹˜Õɽ–SìfÌ"oÜAöt†š»_¥¢/qœ™Ûõ"Ïl#oÃ3Øp?íh]gêw³2ÿ|øUŒÏªxoÓM2ýĦ+¥àf‚ÈÇPq[᳊†bàWy8G=-k/gŠIú*|£‡ù”.{G±—ÎÁÓ¨Œ$·_´<;ólûá r?¡šÌjÑßžÿ‘@ ÕLâæ¬€FF#˜kñóšŽê×°’Ù§Øg‚_•1·á?&áwPüš¸€9'¼'9“)Dü"tÇöüŸ¾É®¬BÁäÓ†âú·ûÏ-ýv¦ÕvÖ&ÁŸ×gÍÛ¶ŽèïUýÐOL£ìýô!qúzÚvŒ÷ù¸#.ƒ9ý©åÒ†(îÊwâŒ(%~`VÇI§ø'¶EK¨‘¢ ~€È|û]ÿqG¡Þ#² a²_eþý{õs¡¿{S-€ýXN=y NDC¹„'?S[ˆ]¼Bþq›.÷7ÌÊ¢õí²ø{î5‹ß5ÀpÖc«]‰%jÝô!gF=K ]’އô&w<©o-|‰þƒDÙ•ñGIåAò…9ØÔd>èïº‚Ã¼Ç ÛAˆRëcõ»TknECP¦ûxÊüx‰âàWš £Ú&%ÖÞš}¾ˆ:r1ù‡7ó«S¿ä½ížrK|O­ÏR<íz3ÁWâM¬Í½B¿½1±íQžÏhöÖÒámCwgö!FýÝ N^⪞{ê¿3•jã“üÁôÃ` Cµ·ÄÓñ™=°ò^<¡ô Ï ð ëbð'Ñ{¶øº¢»‚&]ƸƒEæ#{˜„÷È&9…pÕ>h˜Ü¤6áøÕ`8ö–äOW5SMïôd1}¹0Ÿ›Äkue»£*-ÐZÁf&Å"·F/­,³¡¼1û1ý?Sè±èB”‰«ßì´Þ/Z2:ô{ë5¸§AÔhM#/ºò’ë™Ïü¨­¨‚tF¿$X6&‡ û‘üê ìÌg/äV§~±¢®õ¿òÃ?–ÄgõÃ'Ü@Gk|¶FÌ; þã,pòÖôD\™ñ ë±ôƒà^žòüv«_ª =E„êåoX³ r+1·¥¿X }ÜþÄÓáÆ>s"×¶Ó0Ñ鲿’ô£¢ëØÙ>2‡Bâ‘ãH×°ý¦ ƒ+ò$oJFÖZô¦þê.ŒÅC¢ø¾àC“ÍïáT{]³ýÞÞ¦Ýt¥ó± *©ŒÛXüÎò£ëX/À¶K½Ï{º ®ê©t‡¯ÊÇδgþTQ¹fž0ß}À¯|áá×3EåùG##™Qœ:…»ä2ƒ87•ÅxÇþåTj–N7:³Ö <¿RbþyYê·š¢à{,lw{|ð-ž´'Þ˜yê¯Êeß = ÿqELwäÊ-)µWýÉf}Á€‘påë‰2€JÖ3+ÑÉÙǾFª 9ŽþsËŸcþ  î˜ÏéÏJÆýá©¿Ê{¾À±3ɨ¿Êçø“ãÄíe?õW·Õöè_…*–ºÁ [ê¯üÔ‹êa%I<ýÇ 8¯øø4úoZôóƒ_íEDfò#ñœ•E•0¿'éeïƒ t㨿rW#Ä(—ø‰ªt&׎cýUV¥£òX­Ì;´€Ø¹%Q#_÷ƒ¯XFþQ…¾ž¡ðçq©¿ SWiÕ°òéÉ 6Q)S’·¯g©ÜÇ ÞÈ×d9vx²gÔ¿õIì·uÛà_šQ•NZ½EsÉ?F‚·ÒÃVœ¥Šªþcñ}ZüGXžöTÕëÓ”7ï¦em°˜±Ña`Ýï±x–%YLDµ ‹ºŒþî-b›V>ªv"¦ •è_ˆ$ò.wiõŸ—#Ÿé 2¶ÖaÌÊ&YG†‚RÃN®aÍáøƒ\L‡M Å¤¿+©‚Û,ö뉥ïÝ)€fæ¾€fæ>pfVÀ43“À43“@43[A433A03À03@ð@Ahf†Àhf†@df>Adf>A@À@@ffFAÌÌAÌÌÀÌÌ@33û@ÌÌä@pfVÀpfV@œ™%AÌÌAhfVÀhfV@ff*A33A`fFÀ`fF@(A˜™!Aœ™Àœ™@ÏÌA533Agf¦¿gf¦?ÍÌAgf.AÀ@™™Aÿÿ A`fVÀ`fV@ÐÌä@hfA03CÀ03C@˜™ AAš™IÀš™I@43AAà¿à?Ahf2AÀ¿À?AÌÌ,Apf¦¿pf¦?ffAþÿA€™™¾€™™>ð@Ì̼@ ™9À ™9@œ™)A0AÐÌ\ÀÐÌ\@dfA”™%A˜™IÀ˜™I@33'AÍÌ A@3À@3@A™-A˜™Y¿˜™Y?,Ahf2A€™¿€™?˜™!A˜™ AÐ̬¿Ð̬?ÌÌAff A À @hf&AÐÌ4A43Ahf&A@33À@33@hfAA™¹¿™¹?ÊÌ0A23?A`fæ¾`fæ>è@gfApymvpa2-2.2.0/mvpa2/data/example4d.nii.gz000066400000000000000000012444561202542755000200740ustar00rootroot00000000000000‹ì¼TW²î« I w\ƒîÜÝ-¸www·àîîîîî òþkMdî\y·ÏÜ—Õ¿ÃéÓ½»Ù_ÕW_UmY«²Ê?1Zf.]¥ºDõ¿Á%¼ÿÝu3ÿät?{„å÷Û¼¼–ãÿþ,Éó§ß"QDBKÎayëËWºHº”é$n›´)Ófˆ[¬`Ý2S¤‰[ºAÓzëÄ­ÛÀýÓ¬e“­þ™=ÿGÃá(9}ËÈBI~Ü\5äìGVÞÏ]øÆgÛ’¼¼½…··¼H™/Þɸ×y>mäôw9„\µÉmS¿`Ôí:ÎÊ®ÏCçüuû¿M“¥ù¯îÞã¿< HIù^òJ2I%Y%ƒ|èú‰%¤u1É")ù)À³T’{üïY%·|'™¥´Œã¿$þ‘J I]^Í,EÀ]G²IMò¿ÈÙ@XDŠKAÉ$äÞm KdŒO É%¯¶‘aØ'®|#çxÌ”¡>&þ7Œ¤š¾òAâk(=-iô!Ø›Ê]y*?b‘¯$†l—-ú‰åÕVOÊe™Ã£¾äâݺ<þµG xÝVæKB­¯ßiA¯÷彤×ÈšDïÉBÉç§kKëi‘ì¥îÕ :„-Ó°U.#¤‹t’ÊñŸÕ¥0žÜ(Áõ{«Ût¾&Ô(úA‚ét§Í4‘6Ñ#ZÆ"ZKh™lµ­·©º^ûiymª“àK'%Ó¤‘” 4”ÿðHAüŽ”2F·ÑC:AÔÚï^Ò©ZK—j%ͤË5¡¥³{ú³F·³šÃªY khC-§}e—áBRâ%´~®|Áö¯3¾–|ÒCÎÈ$9!át–ž…Û£µ7ˆi[]¤™l¢VÑÚ]‡ilÛ­×õ°>ÕHÕÞh0bá˜îÐ;:Gkh.­ _jÔ „¤4¬rÔ—„0vƒòQ²êD¼½T§hgm ó÷ M†¿‹i=ž¿Õkú™Ð-úQ#Zh»¦÷ô€žÔÙ:P«Ã™ÜúF:“?z`Ó…Qˆ —Ž=>(‹PùºÔÝÄÀ¬?éZ©ã´§ÖØRSëp= îpà™~nñ-JxÆÒMèeCm­%õ˜ì’ÖÄS™@ƒû'Æw05;™üÜO‹×gèE}‰OWëeݨ¯ô½ÎuͨßàÛvÒAvk Øp\WhpßÂFOØþ¬¾Ðwت•¶Ðæú©ÎŽèiP1é?kÈb¸F>Ó–(Ü=½¯ÇàÀv½¢g`Âf]À¯uP·dÚ‡8@c¡G°Ò¶øÄ.ñþ!ÝÅ㑞Ò1䎮dŽid‚ŠDVÆ@Cü‡#µ^ié&«%³ÆÒ…zÎ"Ï­å±BWÁ†™èÚ22à ‹dµ1ñ>^#êê(XÿLcXi‹‹^ƒ/÷ÑÆZU›ÈV¿uµ@Cü#³D#ë7’[òù­W×àùc°ã¾a«—T€_PûÌöŸX‰%zkRjÝT‹«‰—íXèmHníMÏX…Î1èØX ‘4”ñR—|µ}žŽî {ѧà/ƒŠí£º_‹¶ŸçÝ# ½ˆïŸë]ñ ÏÏàë=Ô­"1’ÐY*êgpc™î'2VÉ ²e"x%Ð`ÿnD’øhó÷èS2Ðô„¿ûÁÖŠŠg-ªÖLcêé„ÊŸ  :Êï-ø~¿/²Ý[}ŒÏémýÀgž5ËЀS(C0‹A_ÍÎcdzVvJ=-¬¤œ¤¥Î:£½$“”èþ<ºúÆ`ÿ‡áçõ(ÙvØ>‚¿¢°çOP¾å¨Àe0ná>˜p pvX€ÿwÁ†›¨Ã9ê…sTóé’Û·ä‚[ÔÎ%`PZKc1µ¿ÔB «öŸGkye€|,Ä÷[:¼¨÷|jºíÄw›@í߆¨žª%ü¬ƒ«°Ë6âzÛ„'÷ÂWõ5õá*¤«twÈo4¤íçZ’Þø*ññÍÒCr-üÍó%d Þ?#9tÞÝ‚ÎM@ÁfãÛÃx|)lAýžWûÓ÷¯Bû÷ð…^ÇãS`þf_%Þù%Þ9N/x»l„GîxÀ" nÑm&]Ò}¢¥œÒjÚ\ÊKÉh࿎DÒ]úË )îÝ‚ÙÓ°Â!”{vk#Rãtù#у½`^ºÝ [ÉÖ{@¾l°Ó+ưo9Ïù¦nšXò­ƒø»ÖJn/°ÉS-d-l¯4# ” 4ð_Gv‰Gm>•~¯#8ãÓ#pu ÏãñýÔ‚ä¶l ç›Ž?÷úŽp+¼_ÁÏ2¬1Ï×J«ðúºž'ÔËùTF½MYR"a‰dGµm|>±•´º@2ðNP9WÐNÆÒ—T”…t§èê·¢q³ÁtïÔAT¸ŸãCÇ€9x}Þ]ÁózÚy µq,²ÏGýS~_g›©ä»/´ ÖIo‡5•í"–†±}rBÝŽïk’ ƒÂÈ@E¶KÖ’‘fÊ ™ƒçâÕ‡xqvè‡Ç‡i}r`'TÐÅþ2>f ÀãÁ9ôƒÐ€å^/^ÿ›áE(ðŸÒÐöõpj¡•þx@Íb‘m€†ÔNd€š†Îˆ'¥5ÿq4pë†÷®ÁÓ“X`LèEôžÂÇu|8ƒèŸOݳ6dùMþXÏF²ÛcêÁýØë9ö c 4­6Öp–Ä>¢Ùºàxv¸jjq¬¯ªÖ nhðŒ·NCÓ µÀV×ñýE²Cgâ#Ŷ´6Ä^R ÷Gû'‰£¢É$uùz‰?÷QŸ–qjö‰9­_¤?€nj¿SËÂÿÅÄ|_Ø=¼óÑ€šðb2ª8 žŒ†ó‹àÌ!˜Q˜Ê¹ŽF·Xìz°‚Þés;H¦hcã¬¬Ž’Ú²™žª»D4|IH[JËç`œ§Yô#õÿ Iw;”ˆØ‰øñ'ž%ŽÑü>u‡¦ò{&z0”×§ª‹ñÝÔ ±Á#¢à’ºÊ×u°×V­i]È¿Èu¹,½´˜Ž—.†/©ä[”o˜¼—lXà"y¾:p„lµ‡º§+µJ'ºØ¡ÄA/mËß#ðù\wvƒˆçÖUÅ+Øb8×c›øü6ºÔfÓ1<Ö_x§…†°Qð¿)ṽªvÁ~µ´w áÓ‹eEòÈ]ÉËþìòG«ºÀæ“dò­ìu"¿¥ÖEÿçé·ÄÃj´nxFa…=äúet¿¯ñù(<<•Þh:§W°ÀQ¶rÁ#ú¢™°& Y` ›Šu[¡!{ua8'Fr“‰*ÊA‰@Œ7„égñf3P\£¢í‘7# †à׎xn±=¬§Ù¶ž>ûÇ‚x;¯®ÕV^mM%p‹îÀû Q…„t£´2–¸…­\Åø©v GÄ¿’ºÒDŠQ§>¢÷-Èn%†ËÃùåøw€–ÖRhYSâ!V¨ ú ü=\khð> *î1}±Z_^‹BÔÓŽ>’Ú  ½ñõ^ýÌâÙm¢g–ØF.X¤ÉÑü’>ÀèÛH.™(#¥©ÜAbhnÍ߇ãÁZÔ4K!üÜOñÊ×Z hR½,¿Ð'—$ºs_§É ñ@¶î/éOñ‰¹¼Þ“ßÈ×È 'Ñ£¨Ç)¶Ì¢t‡¦òŽPüýñü~Y%]å„{E:ÒT{-Àß %hijfðu0¹nh§Ïã`•‘Ôà ‰ûƒ¨A/-‚&ñÎX,8ÖO£Bp¹q¯t!JfÛˆ¦î`_Ц~§±ô€—LÆ?¼–·X ªÆÔâð¾ .£%´6¸ÇÂÝÅhõ`ØÆ³ä³\02b™Üþxp7b&§¶ãY%ôq:}Ólþ‹.lëa4a$š7 {ô„½PÔ||KÝ/õÁ; øWHIŽ›’¯%'—å''VÈ ¢¥d³#^ч€ÞǺ‹5báŦX§¸ÓP•Ôül›;´€?c@Ú •[N50nÜ…7Mˆ¥¾X¯hÄö¹øö0º–º3½Ä (þ½pð+¢¼œ¬¨ßÃrÄwN4/3Z÷¾tµïjßN Gì®`ËÆ0½>y°°fÕTš€Ï·Ã6í`I2ÃPøÒ‹8¤È·ø=ü-‰Aßu¬MOÉN*àhÅD È—` …÷?ÕgRŠ=ûFÓ{5·ëoFúã>Ó‰åÞ ¿M…X¤õ© âÕ¹l׊o@ÔŒE9•Úq$ŸÝKžÛ„zÌåøž°¤6(¢ï$˜ž îˆPü/©®J#ö¯-šT/V×”°3?}» îË›ˆâ™`ûÄÖëS)D&,Å»}ˆøJÄÁì3 ·ç;ÚåZ¢”C@»½ßÀÏ&" ÑÕÕè‹Õj£ŸÙ40‹$ (þˆšLfË âr2¾Žori\X]¬¾•X اÁàÝxò}£/$>î–áýM¼?hŽ&tÕØè@_¼¼ˆ×¦ÀŸ+hþ4ê¨þX¦1í¶`Õ¥T“‹x6^Ô$Êœä¯å¨bþ§<>ðJjÈI:Þú¨vÔ»;Y ±]–¿ª£Ye°Ì ¼8›(ÞŒïNPí9>o"Óׯ¿7ô•†³UäËBd‚æDÈt¶ßzàã5>wN¡jÁwu%ªšÃ“6Øe&š8—ÿÉ]1ÈqUzQÿ5eÿ:ãëa°¼'qÿ=öp]_ö°5ìuQpÍ_r„: ÕÜýÊrØi_ÌÑuت \ëEϰ {MF×øgóüÑÑ¼ßøtôçÕæ£Œ½´¤Ô(þƒÔþC¤Ìí@è†gá9WÛwÆWu`A[P,Aû‚}'6x­ŸZJj+íµU6ÉöY’`w-¦9…ísˆîmä½-T~WÉ ÃÉíQ»`¯‰5‡Àšáx+ߨXóËOÅ/rXÚÿmÁ: %ŸH|öÁÕø»6LèˆÏêÂÜéàZ þvW#[V+Î#´• Ö6˜ï¼rðÞÁØQ>¹† y55ÃETá˜Þƒû}ø®Êú-þoN.&LñÙEG”ZÓHüêî˜ÿwã–´£ê©Êöìù*ü? /UÇóˆ€Áìó`^›ÇÏ’ûŽë[m+aô4¹Ëk_Y+lQ°ž±ê6×Üù®àü‰(o‚Û€¿1–l†ÿÝ£èãY¬sMHÉÀ‚÷#“l•! w•ûHöyÈ{jØöÎdßÀûapeÍ£•ÑŒïô8–K§-d¦D!–ëy$i-ƒíD/¡€›ù¶éèÉ0O@9NÁª¾þÈñ<2@,ø6 ç€GJù/wÁG=Pï¾þ÷<_ù¯ñǰ®ón,²bK2vLby¼ä"o–ÒYZÉ. £%49 ‹}ÐXÝÜU!ì&ÿ1äú±äߥQ ¡ÿ:âÑ5¥>oNŒö$ò»âõ ÄÂ~ºƒ=»>é`5{GÖzfç“ÞRZ–ÉfògeÉ-UéåfÒM—’è|6ŸÞ“´xùvpgÒö /é„z`_4‚Àû!tE aÿyÔ“nòVÖJjlЉʦñ¿ƒ ° +¦»$†”ŒÌÊYH‹¯ Ù:TíVKêÇVÒ\JF+‘ùü3*áq¼6[&!ãˆú :”ó!š0•¸ßÆéUihØcå[(%èÈÚ“ñ«á­â Åþ£R›K§2/~eqmâHY!M%&ÕÁUI¤u·„ÒcÒÄ׉‚áʲÛKj¨·r Õ r¶Òc¿¥z쎜ƒUG5‘f—l†ý#d¤TÃ#©ÔB·ÂSû‰ÜÚàI5°ux¬á­î¤fØCÖ*HÆxEæ<ŸŸËn9$+eŽ,‘óR ¤,™]'&!bNøcA7QÐ&ÄÿÍB\‘dAê  6’ ‡ÿ/Pß .@ÿ?·žhÞ\4kYì’F±¶t‡ÁP‰j: |ìzKH_£%¿¤#Ÿµ§§:©ñ-†m¥nŒlé¨>·¨v‡z§+v¼ªÑì1šؾ÷oÇ-I)™e›”@ñwé nùÀúP©š…±þÄÄb 1±ýRP÷ÖÔˆZk$' ŠÀëzMKyñÙ¤©,œ-¥_ld=l¦µ²7¼rž­ŽjhÔo¥d gþþzt”Tä´Ãò~ß*¹pvŠ|¸Ï$—ŸFˇ“Å×’Ñg7qQPÃê'Þ´¢kø å!*²HÓØG²f*;jƒ¬—•°O,½…µmØRm…î—hd 56HùRˆ;ïÅÞë ðÞ§F;‰¸«þñlÊð#öè+"Áˆttt7©ŠÂ„°LJVÏ„Í.û+%Ãý·ú5È+Z8DÀ¦?£7Í øoFí+1$- ’½Ïe©‰àDÄðrôp¸wéÏØdZ6J&¦'K–‡±5سÑ7÷õ•s=˜²æoÀn‘‰œgü›5Lo{É ù-'ÁH¢mq ÿÝ8Î^Å—äÔvUäˆ|â;µ¥t,}AÕ<$³_'?4"æàëð ÏCÂþÒú,èJ¾ì¥ü9¿Ol¶®àùF2^‹þkØ®/:ù@J@ƒýÍQÄ$ª¢ó$]Qg¼ÕÔ ÝANØL›Œ‡ëÂ÷œDB3l_óÂwž¬0›‡RÜ¢[Ëf¯É%×tÙã)LæŽÿ×’È´±%ðç½k´—¨¨@aÔ¹ ¬’xäë^pº;~ÛJNœ…?gkCr_mØŸ»´]n¸ß“×Jj&j§¶ôŠ+é~ï’Û=€žz3j0SMëS7Ç’,’žz;(ŽŸÈJñäkòxvªš¨ð¾•úü¼€xÞN×:ß×Fõª üÍaÀhÆlø‹Ñã—§JCöc©ã¨hâÿ°.!§Î¢‹JO•Ø€– 4Ôßu3Þ‰Oe–AêÊmjÆxv>š‡z ó¯t†ýîz  h\=þšOuØ„š¹ìÖ›ú?ÐØö æŒ ö]©œyögŸ ö7Æ{êwÇÎ\2WNHN¶²,Ÿåíå|;ÝË Ó+ƒx|HŒ ÷g€ªÍ@9mŸ¡Oõ]°«¢waÃçzCãé)¸Z#}€úüýHG|ž¦ÊC5ŸLŸHA­…ÿÛ¢mGˆç­dýæxþ0膵‰ƒVxv¬·ÉOþ ù‘° UÀ$òß)ª…Ÿ©tkØcb篴GªÃ˜±xJ ÁþÆH«ŸéI!ûe3ÑWóûóÞîì×u˜ü^ÿèNF‹¢yµ±Í`po&º'ð{<¨‚4Á"3üñïCÏ>¥4*žytcô ¯-&»v4Øß égçËz ‰jŸ¡K™ gwÁä+T=oÉisÑñ“° 1*WÒŸëíâäŹüÛÔKù·§gÃx¶sJÒÂ[C+okЗXê y!´þ$Õdzã¿è7Ô²Ÿé~ËBí—×Ü»ìõ2wr EõÊøã¡£@VŸ§Gb%w–ß]»üÞk¼Ò'zGݵ%-‚å°6–”9lÀ†¥u’´ røgJrú’’ˆší‘&¤c9Hÿ’ÅÊØ7–„êíýÀ1´¬³Ö Ž;P·ÑÛ© ·ûëCgÑÛåqHßk~«cõm,¾¯f 쥦0±ÅÖÍŠYf ˆ³lA¿HtÝM]ºEvh6ûÖBÃÝXV„*&Œe¢ƒÙä¯}]¥·‰ wü\}§áÍÝ ¼_f·ˆ‘¡XÁï¿MøŽ^ÁÝCxW Z*ËÌ7Måq‚œ˜@gêoŽŸÉ­ÑæšÜvSµg¢¯)M䣗fîÜp-¯ãÑHƒ]Âß<@éßP!v!"–ÀˆSØi¸?¼F;ÑEµ§ÿ+j•l€µà“G¥ ¡þΈ£•d€œÇ‹·èjnÊi­m ˆ†Kp{©¶Dùiz¸gä³Ïí ìr‰HWÔá9‘½•Ÿ†œàµ¥à_" É­½–±uVš˜š«Áuz aþîÈþÊ’RCEégRÑý>’¯ñûY²àYª¾ ºIŽßªõ­®ýB§¼V3Z¢å55R'j„µXï¤ÆµsÚÒ¦è°(«‘²Úèo{$¬þšçß#¤ ù\ª€ET€èÔÓJ%JÝ“znÚVÒúY!; ã¿C!BØ>¾?Ý€ÿ7èv#ú£G!í3ô3ƒ=ú‹„¶Þ²SWXe‹®  ñßíe¬,çßøÚ¯Ö§Z{Mn»ª]Í:®oô hj£,MõsdÖÐVüÉMaE[H5¸¾”ážYD"æ¹DÖܶY»Þ?1FÈPé!kä3‹ …e©<£ÎbYm*>”'É„1l‘­©ØMÒ(ûœWé–Ô2ºBæË&MÄgÆSßÐ$zB¶èò@Cû'Ç.Y)­d³ü(™ä–ÄAéèûÞúÑÙÒ,Dp6ªÚøÔ5 lÕod8_;;Mdž´•Ñ’PFIt¿¨Õ§zÏkä°l 4°zŒ’I2j Ÿä§géªaìuз֕È_#%«6Ò÷²V/dÍâRFªc­l’Sñ; ¯$Ó2ØýŠj8¾6’.Ò7аþƒ£°|#!逳h›i+Éktµ¬•ä†ìÅB3¥ƒ|-ÙùIKלH’K\É!¥%³¤”² í­-³Ž“ú:SÆüË¡w#·t#òSûÜ'+Þ–Õx¶œ – ü½‘ÿ'“ÄRK¶Éd}(i¨¬ZÊÿÁ½þïU¥ˆÌm^”xÈ%ñÁ÷ûèÿ4R •¥«„£ÛKò?²Ÿÿ/ÇHI ³¿#¦£ßi‚À];Œ?ÆãñÇøcü1þŒ?F`FlI*¨óÓ-æþ‹ÙÑÿ‰è|3Ñ‘jÒ“.¡!vˆIçÔ®mú¯Dt>‰éï‹ýÅ\Ö ù;½PIzäô·?É"wÔGVÈiéð;ÛÿûÆ×t³™Á™Šgèf³‚n‹_ ƒÄ“<ò½,•;òЇè3¹'õ+mþøÞñÿ†¼YÀš„¾7½´— tþ9e–¼{5I+é䌌Ó:Z«k>ýAëêA-¢¡µ­¿Î%(Îóøùx”‘Š2Û¹Ô¡’A7KY-%½Ž–XdÜÕöJ?µlÍÜy¢ýØ¢€ñ+‚¤ÀÿºG?RIQùAšƒúž¾Ð¸¶Bwh"M¬g@ßJÓé^"¾¼µÔVÄBY›`xV× Z"»êgúŒ%q$jœíôßIP:7cmd}«Ÿ˜»"|¶ÞUwÏÓ­¨‡4’ÆÖ<àuó}‡·ÚâÛtûÞÚYW»`åm²|C„ä4èä¿ÆÌç9òø+ ?Åßmðú3~ën=©Mu¯îá¯Å:­ o!툟7ŽE±$VÜ~Ñ0–ÅŠZuÛ¨õѲœÉ*¹þÝ#†Ai¤“¸DýzI -t$ˆoàóAºL§ùk=öëy¢a‹^–RzÛ<ÖúA¿´ÒXൊ}i7ô„V±^VÖž`¿v(¦»¦0hÏüýGq8[[ºJx<8X·øy^/ëB¢t¦žs0{×Ûhp¢ÂÅ~t»?Þk>ž‡°ä€/-½åS¡aÈ0½OÝé_2¼UHÆËEIª ñ¾»ºá'¢~'¨êvݧst‘Ñ¥°à‰”Eý?µ„&hÿÏÉ2ð,’Ýñ×KÞÖ'Xà°vçï¹Ú5º3ÿÛÈ U¤“ܒ嚟<îÖr8È¿‹@½ L—Às[è&ݨSù»¸Þ”,Üâ˜Ù?ãÉU<ÿ†ˆˆh·ô¢Þä±ö|Ð$¶[«J t hü¨þ~iBwÁëÛ`ü<}ë ? Þ0ž-ÕÞÚ%X§#°D *þeÄ׿æ<Û>ê}…V:^¬Õææ ¸ ®h#MKFhˆÿpä ¶É©ëÙçñþ°©ÚA»ÂøËþ^Ή: Ôã©pfýw$›ÔÕc œ ùÔQ}úƒÕÒ‰Šü{Ç3g:½¥ÇèrI¹@ƒüÝ«L-_N{ù+ÝGÁèA~F€Qü=üKõ€¿³eÏöòJ&í(­å¡ ‚÷‹ðòsl?¡ õ£Þ¡j(ˆ †·§DÂa*‡L6]oH%)h ¿3â }méÝš³·{axø>&ïô3;v×ÉØc5ífHÞ®“`Æn@EÐv÷ЖðþŽ~n‡È}—¨™ž¢œáÂäÄ›ØF¬§}nsu–ô!½‘Y¾¤ê¹(7ñæ:ôm0ˆ¡Ûne›½àîêçôÚ¡}°Êl80™|èæ:>¤¿ üá­+|8ާ¯ó‹`°Öyª¡äÆ>#'F¶ol´-×ÇÒ=ˆÝû÷§ŸüœOBiXŽò Ç£}м£py<ì¿Èï!øñ%^/ɳY¼·+¦30êÔÁ‡Ñ¸dË5TG‘íêñ§»cÀ€}d€[ô ŸXà9~k¤£B+ í$5Í5tn’¶%ê·ƒ})Ï›éVê¼ Øa£¿nú·Sõ×@ÿÞÏuþäóQÂuø=©Ýã¯(ÆE˜r^œÕDÏòkzýZKê 3ó÷¿ w×ÇbB?w=_Æž»ùÖ£Û `þdP÷Ñ:ä÷…DÁ8¢ÁÍññ5<ŒöÀ’dº_àÈ~b&ùÁ­‚sÛ×—Ùê –JoImŒÖâɨú©~ ]j"”/,Þ|‹Ro"ï·£ÃÙD¶ëò¾ÖùTka‘ êÖú9à+¼Ãp¢*ð\À×·¨OÜËÔ?Áì1¶ù‚¨ØÂïh–8©çàÆx­''è³öŸGøŸ€n§©_Ççþ? ëû£mQ¹qèû°¾£"Þ„ßoÂñ#Ä¿«ööcãºÿ öج!¨÷]×`TÁ¿hXTð4Záô1•'R¢[J*‚o´’¶ Bk!}/¾–TzÓüܾn¾J7£ë0ü½”¿ÇÂèóÚZÉiòÁ¬4 œåZøü˜¬p€¨ÙAot–Œw”ªá‰&¶+Øñ1Û¯RפFú•ˆJUÆk þÏo ܯ،2@Náñ~Dø8t{~žãïý:‰EÜŒ¿g°CAÞwѾˆ÷.Âòñ<–c£¾¾¹JdÜ#ûíÖæàtqŸÜªÙ8sNò< èî ûÒ Y&T!Ÿý2(Œ(T¤½©ËÂÛ0ÀÍdzÔ¯p³Åß ¿& ÷wÄÔBÜL€;ýê^ÛáÉ4¸áî?àïø¸Æ«OyÝÝ:‚øØÊÃyþke¡Kž=YF*(–Šn0q ¡3RJ(uüÌß•P³~®ÎGp|>tëù ô³6ÌÕŠ¨Á?ÓùHâa-Ï;éP?³å^å3î^ˆCèÃp2fQ=,‰°Å:u÷½ÓRtF‹±Tf«B5ô³&–2ŸýÔô’œ.›ü(+$†c_Oãi·š››»lŸ×x¿·éwª ?àçÃÚ€=f‚生ëj¹?&¶•gO±ß ìôRæIL²ÁÏT@È ©} /4–µ°’Âÿ<û§ù©zWÈ)™Dl”zÕ>wßùy+W°Ï©‡†sž¶Ñx6–¨_†FLÄˉŽ-ðeL¹F68+¶j½$aP w}ü(ÀXÿ¹­`kw_`Sëeu€Œ ×Nhøx¾ ›ÏF³jýE2‚?¥=¿»Òý j¶‘¨Ÿâ9hA_­Î¿?ñsMXˆmVð|±ðd1°k Ð0àïḞ¢š˜F.ˆl üÝïó‰ŒýZÀâ“ >È:©K·Ø#"ÑРøpà­ôö3“ºÙþ>'SŸÉ6ø?_ëƒy4\"ÌÑì _îgµZÒ®ÚÏ7#ûÙöûu!NjNÝ%©5>ðNØÒŠÞ …¦šˆ…~¢*|KVÒc×ÖT'ŽÄös=vøs¡÷ôfì†_Å¡¿¿û¿ožÍÃ…àúPn«Ðùù(‚«vQ'lñsŽ×ÌYPÿÍÆ"ùÎkÇ^©Ã .D!w ›Ùa[©)©Š?Þσ ëïçg2t« ¬!NÝJF#Ñþ:Äü@žÍõsZæ ^å3ÀUpw™°@Yp6Õ <Ò¬ŽËãaé*ô®ÏÜœŽS±Å<ì#–Õ|<Ý {¹û}û#â;`ÌZß'=—¼».„.jîó³Ì7©‡·c¹'d†ƒ0*¯úìhI|ßZšÈd‰NÅÒ®÷ôÛÍi>ÎÏç]ÞßÛ;;tõó™n£»-D$,Ã>‰5?¹a¯.À›+Ér[x¨_ '=\éÆÖGàÍ ì5šØXNx öÈÃ(H½Jþ/Pü‰þÒ™üïj¿¥Ô<-ðk/¸5ÜŒ˜«ý¼aþ:ì°G[ò¬€U —o„­&âãUüëævs7Ôr°{‚Ÿÿ¨¿ßý'¾e<ùbÊ9ˆúè²äb¿‚zÝK Ø#!ÅÑþ9²@‚ù™þ»³—KA_ůç{“°t\¨¤U`îl4Àùr´¥GÏ*²Ý@pÏÄ“•±ZyìŽm‡À„7hƒ[í±¿/tzÙ×”Í^U§òW=HÍU= ø áû[òLâá¹êZ[?'~»Ãê:d±øÉ©º›°,Ü]Iô¯¥&ê¤alœŸï|¤¿'ºèSóþ6ͧÕPø^~Žï#ꎋmöÇ~vøy4šúãjnmÁv~-­ÌzHx=à¢2C>Óoõ{ö©)•nMØÚ OVѼ2¼{`ïDâ %ˆÛ£týùÏŠìͤ¹Qr஀íÆÐÿ¸.gø™â砀׈]ÎŽóù2Zկߓ Úÿ©“ÐëTžŠÿGY#ù@œ‡ý™ß[лY,ª¢`-ýß%TóüZCýú&§@0‹5%BÊh-I_”Œøè€g¿²^èäÔ`¤_'h¯¯õnb‡~| 8ßÂkìHØÒ›¿•á0 c‘ì’ÎÄün¿êa°º¹/Ý#'ç§“õ6øYÐg¡ú“Üy`‚¯Ý¼'546u\PµA/+â÷ï°š›á×­½¸‚j¸£Ã£´56jëg ©ï,M`ûPº8À³`“¥â®iè Çù.j¢Ë¥Ù·<Ø  XV«Î`ƒ™þ8î^p»µ±ëb w죵6fûr(ÿ|lÔPc±ý2âR¶x!v= ¯ž {Õ±n?¶o ;&²õbX—AH»€â¿%…¥Š?žÑÔÕÀRÏ;þ᧦cw6Ì­Xô_&wÃZKA¿ ά‚ÛÉì.Ë7aoï$¹}¼¿Ìë;ðýJºÿ~ý‡&ü­±j+_;wåÿº.íŠÿýgIð×fß«€¸QYý«ö¢ä³Îøýœ÷ûÔíùà£_ï§ iÛk¢ nfÿ±p}¯öñY|{’Ç)ª@WûB–€¹ƒÏP‚îü¸¹ƒ~ ßv6€'Ôßn5“jx¯ šV%ω‘ñÊûÕ-Ü +ýùŽp~%Þ>O¾ˆeZ ‡/t‘e²:0ßÍ8›ÇëÇýú©'øÔ4õW´ÂûØ®™ºÕÅg¡K‰¯µI@ñÿLÿ• ö¶‡—=ð^3°;¯–Âß³%ü 7n•¯K :¦ÁíÈâØmô»>(.ÑÝG4·¦O[MÅgŽ/nþÔå _‰üˆÎ!ºFÁüVÞﮪÄûn~Í“0¦y@ñŸ¥{+ãˆÅvÄìØÜ >WÛ…x|O Ôñµþi æÅžý/£u!-¾Å³êVÖbÛ"¯Çü 9'ôªç¢`-þÍëíPË>àwóEíÁÖK`ÃiªŠ'ßë÷Åý Aeïæ§vëÞŽäw#T <¸ûUŽJÃóI¨ÚZ˜?Ó_ëwÿN·;öÔÚ{c1ƒ³*¶û}à½zÜ ëÝñÃDD¸U´Àï{ЉUüO¡m½À }ð™ 7Èdi·†‹;Ãݞج¥YñüP8ÚÙÏçŽr/„×›PôÏì©ÞÐIV×ÂZ Û@ž¥•l¥% vÝ Û´òŒŸûo-–:ïÏ7 JêB^pó¦MÁ†•‰yÔQëÑÅfZEÆÿuzà1¨Ñ ?ƒYm¼Tšê®>rg®~‚éóáê:þŠfY-ŒÅ´hVÆfèVé/eéœ/QÃͪöZ[Ú=P$ Ž`­µT„îZ·ú×r›Ê7Ý€C)°È`M£ ´‘;þð™ *Ès™ Ûúyÿð¬:û¼›vçùf{ο‚#?jŒ]È×¾Oì µåDÕ\zBbãõ¸6ÃJÁëkþª¿7`^îÏžÎÒ-Xï¥_ag5µ¤;#–…í'‰%k Á3æIy Ó%û×Ï4‚¯nuŽèþA¿Þ󰾓ЊÐÔEc¨÷‡Ð9<”—ìÿ>(Û¤ _Hu°¬î we@h{À³#hݬéo$‹¾ÖdÎvòE‚Ìý_I#êÀË2˜˜ŠŸ‡ÃàäÁ;°s—쑲+=’ÅêÎ]>¥v)'¥Šd—ô¯mdŠT–|Gr*±T{‹ÀꮘpçƒWú™sïhbП$ÜĦëàÅ(©d®í„'¾–ÖpÙ­Z1Œ½ûQ/Âܸt¸ƒ¥ªÌ—ªtñO4“%²lÖ‰Ìø˜ÎÉ´ýséÀ'ÝÌ'¤4ÚŸÁR™;:Bãé#Y­nn¬_¨*>%"îóËP€ÇäÀ¦îÊÁ@ÿuìH’= ­·‰i~%Ç#há:ÚdšÝŠkùíYý9Ëõ°MÉjÁ4œ“ƒR t‹%'Õôxy½ô&+¹Zï!1¾½:AuûnŽúRãU&Ƨ²N+  ©ëR'õF7 Èܶ‚4³¥´¯,yà•S|‹lkôʨ=%–Œ 4ì¿ç%¿D•êÒYÛa¢`•ÊN¸ɆR\"«­ðWyÌÅ ˆ‰f(c6Í­_Àü’t‰…ÐûAô³õÈ—ã°b0»F¦kj¥Í­€0؆ØI§p-ìN}UN¢Éæ@ƒþ‹ñFFH<ÙI+X\KMuûœÈmåì¼?¯9“¾å,Ú5œ½ïà×È,çݺq5ÐI·¶Ý$¢`°Ÿº,qWED¡BŽÿ3¡ˆ!ƒýhwQ’çhK zž4=ÐÿfÜ¢,@ˆ‹Ê•A©Oi6+j«ýÚ½n}ë)0âìŸËÝLUñy,Ðί˜[™î¶3Þoíþïòë^^ÔgÔz·5 s,«j廓®ÑÍhЉþ?ˆ:’* Y¹5¶¨ƒæ­ów»-¢ûéG|»ó‚îÊö±Úœêµ¯¦GìàùÐûŒe»Ä[ïý×úËmåq5 ŽFµäæt5>ø-ùvC ÿÝ8D ”f6¢£ ©™ýqÊ’0~Ý€;ë¿ügðùŸŽŽt¡Kî+æiâ~ èL$¸ó„k°Ò;m©˜\%¸.Å¥n•l¬v³AæÊ¿¿!5‹¤“TÔ²%Unϧ  ¦ád€µT‡óaxE¸_ìmüªðîhfc?çõ|¿òm”p ÝÒ;ý¨Ÿó ±Á~âa¡¿jè-}CI$I ö7Fh­KŸCJˆj^0¹#!n>÷qþ|¥;ç†n¶'è‹ÑàÝèÝ`|߃gsø·)vi‹­Vú£¥ñ¨„_ñ‰háeXá®&‹©c¥¹6 Áþƈ¨5©ã›Ël) ÷ÝÑŸD¾Ëú+aþ=Nþsw}4£ömç¯ùCŒ"îƒ}¶_ñ¤ vHß{Æ_ û…Ý5[ü‘ÐSÔ;õ{} ÇâÐQµñ…&Ð:RQ&K_¿‚¹»ÿÁåú¡þz¿-`[FOÓõo;êÑÏA&¢{kxuŸp×JU#»õÒíøÛÝ+wG]°¸uoÞò=ë±\Zz…{†ûw#<ýLMºÚT@;‰ÕíڞȟòKþ ÐRpwåõ~ø¸¶v÷Dd_ÖÐqÁ完:ÔÀNëàËc°»ûaW£ùÇȧáÅ1l2Ž] 4Ü¿ñõg©#ûe¦~@ÕûÁßd¼gô{¯ù9N.œFTô{¯ŒðêAXáVBlO#34'¶%.€5K4"µO*:欖ÄÎÀ¢ü¬¢;úD J„€õúÛ‘TOK_úõo©ÝÙ»Æm^ N'óZ£Ùý†÷%&j‘íZ‚u\XDÐÓß+°ߺÜ_Ö Á ýÝòɬ–5¶©ô~/¨Žù³ÙlŒ¡g4Þ¿Yõýxke‰-*6¸Ã¾N÷÷û† nšíüí®xªD”÷ôG·c…õ Œµæy06XÌ'®Sõ=Ò7Ô<ñí« îiZ˜ÔNjuÛ¡MɯÆû·#,ñÿ-9ฦ·÷ú¥=£r{è5?‚}m‘ÌÝÿ´À_ýÒ‡èŸÎg0ã ?§ñëeßWt±-žÿ™J?Ý+eé±Á—äÁšôBÙ-5uC-‹Úïߎu…ý*"?‚+Œ]õg:CÀ„t®éé‰v‚“¿Îk Yž^Bn?J–[äïƒYŠÞí‡ûÓùügpèg,’Äí;Kîf6Ú²Ùm oi´¤ÄrøkKrí/M¨‚>Á×WÔÌÝÑUšÞå ~"Ú)2ßòØ8?Æ+ÿ=‰F´eT=±Ä!¿2L2Æ]}ª¡, q“˜¾§Ž5§ÿÉaƒ¬v=¤«‚dõëÎ^’ž2@‚±ÿ±­ˆÃwñÜgDn\<7Óßá|Ó_äÎë^óuý²c\ÈkEl«_íþ>¶‹ÍBúû]²€º< Gç××®é*à zôö­ “<ú:Xÿ%°âü¤ÇÿðñvVÄÁ¸LmWÅ2‚ÉÍ|ÞÀ¶h ûÄšÑ ºõßWûûâZ¾áG›fÕ¬­å‚É-•n¡þ ºc„,™Ò]ò¢ç7aq «€'‹ZxrØ3jž]èÝ{,áz¼–~D÷ç¿?µÌDK2sWFæ…1ûÈë´¸Õ¶õÖÉnu­‘²FÆâ?[ä')e‘–E¯£·9í¼fÀs…¨ æ×:¨(Y-“å‡#m¬®ió­5$Û+HsÀ‡„èfa”ïƒ% –ÑÞi"ëÁ–StV€¯wù÷Çé(½%µ6°cVØRSµ¿Õ—°ý{@V|eïí­µ‡ÏéÐŰVÖö¢ë•@}Õ_ñ÷ýLG”Ï/¶á6Övb‚hßN¶X$Öûþ÷F-rÁF‰Jÿú¾¿ÔbîçF úÚ.›ú0{ÕnªùyäÅ—’Îö¹¸«™:òÙ¹tÐݨügõ#lºuC Xm)€¾ü+Œ†øi”¼pë[k«o®&N…Ö½çñ‚˜¨¦ßé+¹ 祂FÐVR˜ž¶–”!{–ÊRT¾’dÒ_ÂP ¶I|º$=@M­(Å ì?0ªH~™!C¤>ÕKDë“çX¶`©‚…´SrZ ‘AZJºÒͦ”¨’WòI"I%Ù%‰¤…AäªÐr6’:`-ò%)hHÿá‘›z°*¹þ™²5v†ئ¡4¯·„RA IiÉ%ßñ<øóHzI Šñj1^?%ù¨’ úë]éh0ÿ©ñ-~ü”þ.¹¢ëY('¤ËK 0&ÿ«»÷"óW ,“Tbç•Ùf×7ZÓ–h.ùІܰ ð3üügGZ¸žŸ'–WRAWê] f§µ£n“E’NûÁ…”ÒK+[kj¿è÷–ØJZ kmºFÑ9ÒV*È÷0$°3œüçG "<¹d‘Ë’Òb[Qp~nîìÇJýT—jÍ&m§uµHÖÜBY<«mý,ºÕ±´–Ïöé}y/“¤Qðm™çðí×~.ðcr[sãW7‡ÉÝ¡‡ô¢ÎÖÂÚ^?×ÂÁr[43ûÔ®é×vS+Ø÷–ÝJX}»Ïk;t„Ö—" Ï$g¼ýýQGbÃþj0ÿ„´8–ÁÜÐGô±~C×êiU+m}u¼ÍÕ0¶K7óøÔâûódï4‰u´¡ÖK”¶QšK2IU~ŠÔ?=Ü1®r¨ýSI¤—õ¡žááæ¸9¥+xvL÷êK´î¤®ÑOðþU½¥[°H+f©ü• ì£^ÓÎ¶ÂæÚVJSéPòdÝ ?÷ù¿øp¿³,“©zÇÏ~ïÎú¾ÖÕº^Ïé6ÝÉ¿?ëc½Í+'4¹%´`ÜG4¦}gá, 8€}Z[:«j…¬1,ˆjµ€”ú—X*3Ù-”—Ïô¸çMÝ£ãðù+˜¿{œÑ ~ð¡0aù.¼}fÏ4:¨¯¨»72Zy•HI‰^&²»ð'©µ´Y–RÓJ‰@ƒûwG.êùÜrDê"½ OÁq/»;ûöûëß·Â…ƒ~Nü¹úލÊvÁíŒØ€uΡ¯¨Ô’Zp‹`)-/ªxïmm>5SP>÷ïFN*žÂRT§`úNX~þσëó@¿I€{´öÔÔ<î>©krBîb£'ºüpS#À…*ææyÌdnåô#:høEç󬶭hˆÿ`¤“$à_,WØß‹ºX'QÑŽãg2¼¦çu–ŸÕÌÍy¸<8Æ]Ó‡GÝŒÓÐÀ#Xᦺëa% ‡ÿÃW°â2tôûÑÊheºÃ z.(ºW€¼WÊßï{Žl?\n.¸­~ŽûéØc=Hv ÛýÕÜ/õŽ”wWW Ó/é#Þ9¡ñðüEý¨îÚ©;¿Îþ)µÁQ+¬-È,Aqä$çÇôk]Ýÿ5¿ÄDªú~îÓcø·/UŸ»ßþs;Gôï‘êFÛ A÷Þi([ ^Q\&;Æ'7ÄeÛ×°'2ub/,AwYOÿ~¤¡ŸË(C¤ /økUGëOÔº£ÁvÏ'âÝL°}ye›ýD{qmëÏúy~‘ŽèòÆKb{`E"ªÀèßy¶Èln…  6X_Ð?µ‘ïg—Æ2K;îºUæóè^wË6HM¸V³Ð%‰ÒŒÚ7ÐpÿnD£ËÍ,CÈikQ¹=T>'uª?¥îçD^‚öOÐ E´Eïws']ahÛBÆs×ÿ_‡)[¨¯h82ÀA×Ü^KhY-2š v€OÕ×v䘠5¢Ñã’DæfóÞNÝãæîáïëÏçúu€âóIx¤×U ¿ä×}¹M6ÛIÌ/Ðaäwl+ö‰¿bt r.¡#üê׺øj1Rê©Z(.N ÉJ^¿å5ü,¿àó‰~η><ß nû™Ýœ>KýÚîΈ+µtÖŠj }ñdi+¥Œ?:= Ù-Q£þÍ…àØåg»YÇkð÷8°ÌÏdæf´¯Ž`—ñ~ ¸E~•„=xþ˜Ÿ!uy¢lµŸ`@w>‚®ç\:ÎvÇüŠXe,¿…±ZJÏËJ”'#p^žK^<ù'öoä± ~?à§'Ýß 4a5àT¬âÖ¾@=àÖö9ê-~F·&ÐVòåb^ݨ©u¸Aÿöúû}§ñûsb_m·ÿîg~NäÍ~î÷pzR†tŒï`_\™$G$‹_ßw0UÉhxÞŸ¯Æ_ÃüÚûÀàt~Þ=®é~~×güÝŸÛ¨™òÎRl¶Q£ê.†§wÂ}—#Vc¥û~ýÔCl}v #ÃŒ"® ê3éPü•©üÓÊd¹Lþ¯g““zj=bÜÝÓÚ å;êW1º¶¹™Ý*/5ôµôfëÝ YF…Û|ˉ7ë»[5r©ÜÃþ)w'¬›3Ø­|0–wàsXà°?‚p™øê«{:ÂøŸ…¼% PÿøeŒ_ã¡Ê5Ðk½[»jׂõ Z·”:è ìö«ßÜÀ£n¥œë¼ÞŽxp¬ˆ¨ý¥0lè¥ÙÈ• PüðæT²7z±ïyê~Tµ÷ØvŒ®”¯ˆê_^–Éc)ågåuó{»¹^Üj'ùQü±dï¥0â$ž[ægðØëæ”þüvk]KC*7óG,ØH·Á¥%|‹›d 6‰h!ÍÍјÒÜ@Ì.P<ÅÞƒtê¸5 ÖIl©-§%š–åQ‡*ÏÍù0Я÷RŠŒ8ä³üª¿ÓðÕ l3V_—¢ÔºÛÙ¦,OnùÄp¶é©åu 4Áë ÐË Dÿzÿ«ú†oéÇßõÈ›yíÊx™šhµÔN Pé ¡4‡æ„í#ðö=d5ûû¹o$¼ߺŠx"1ß?DáÚª—Ÿÿ¤/¾mJFFµäÚ\–˜Ù0Àéº@Wxü¯ù»¯V…OÃØr™_?s3œh®1tF@‚ä—©’Msk<ÏCû]Ÿë|5\ËPõº#àn­S·êåx~Fª›+>LXÆTFU±Jm¶š‹ .b³‰âÖ¸<ˆ¾)Þ6 fsшඒhªãg>ž¯:ó¼‡Âå±f Wƒ­%û¤9ÊïÎhNõ`ü½oÓ<ä¹&ìïÞ_׬îç‚ú [Ü‘¬(^oT"Ûç!U¥:p«£VÒºÒÝŸ ;âï”Þáçè­l3Ub3lÙC‡zôM°GmÀ+ˆ^¤½ÜwVs4þmÈ^U¦~ïV5 Ó«€w\M·‚Ì7ƒŠÀÍtâÖÃËBŽEýæj9¶ª…¿›ðÙ~<Ë¥±ÈŽýºÀÛ}¶ßªOøæ»p«6l_†ÏÀ§élïfO@d½ (þQrXN¢míéq úµ,ª€ºî沩®ëàólöz:yð¶è÷[Ñ”ÖïÁœ­ Ú ¼6m‹ß·ù³(®.ºÏgvbßJd·’ò1_Kve«Ú¨m=PüîšÕù°½|¬JìwAÍêø˜.ÜlÀ3ñôN¿–ý%?‡íC¿òA3x2ØÏt˜O—BAZú¹c»ÐémõçÃÞèýº_|j7Èç‘ ¨Å4¢i"|‡7ÿ]é-kÐ¥†Df{ò^<ßÈÏhVW À„Îøi¦ŸÍø> ß„{ýùàñš '¯_Ó¤#؇ßEÑÆöpä$H·Á˜£d{·Fä"øU‹ou+iÍ篙üÝmø•RfÿZê¯Úìcm<ú#8Z²gÝáqð!&ªÂñºèá=l°‹î­¡ŸÙþ{>‘[k‚`¿6¶c(yUM #ÚÙ­ø~=ÿÞÿY˜SŒõñ~ 80b…·à+th@ñï¡Nƒ÷:÷í‰øfXÀÍoX„%‰…Jø¸<šçŽåfÙìY"’ÝÃFã¨uŸJI´}?‘_ˆ¿Ü ƒÁÝÞ¯¶×÷Kø´›O¾ïÖ?‡~¸•wc{~u¥Àö¿û%µdC¥&‚zh› ýaPÌà§*viÆ3W͸#\ì ¬¾„Â7@¿Ã¿Ѷ¶(@}>7p%QpÊŸtëFô&*Šøxj÷çú£Æ›ü<`•èC`ïˆ?!ue0™¿7€ÆiÀ0,h& >ÓGi˜¾Äwtgвè6H³kz k[ÝJI6ÜRضéBýÛÉ_w¿ž l +¸9Bû™³\õ°ÿo"*¦S£˜Å7výG§áýLÏÅÙÙþèïd|;ߌâg û9‹7“Ïo¢‚®oÙÉïXVÔŸÛa‹l·å²x»–Þ’úÊÎúUNÛ3|Í0ÏŸ3tÝÿ}>±§ÅNñ½W¥IÀçx"åÄ4$Uíb<´Å¯Yί^ü cÙû-è™ZDû¬üì_ý4Ž%·N6Á¦Zu?ÛMR†ÌÖ÷ä¾#~æÈ~]Ìãèb/¸3ß5xL%·wúFIÙ`ü"-¤)Yp=ð.Ð/c¿÷ÇoîŠ[ýÖUÀÛÀ³öÂËüª Ke®d•ØØ #! õmm41—î‘ò𦜿Zv%1³Ó¯ü ^ƒ;kyåбËvÓ®’1À«Ÿýiœ ä‘‘òPÎci`ÿíÞ¤;¤ û9ïí&û§Öy ‹©gËZO¢É4«Ü‘dÔo¯e¼FÐ4èC>=!‘àQMmØiؾH:‰Õ"™‹§wDÄgv’ßKô¹4—HÒ=Ðà¯$}pK‰‰§Ï¡Ë£ØËKð5œž“cò*¶ÌÏgÙ’,ÊB¡|—ˆõ:F†KOý‚XY#U$"¼.l1í¾¾ßI¾ÁK|‚Ea‘ðö…†Ð„6ýا±-“½Äæ±d@ Á3BhQÉ)™¥0jµžàæ¯|‹ŠçÓyR}ê¯ 8M D´[Äîm½ ‹;jt%Ÿhj:è.RC¡‡4²…·C¨»¢ooaüQ,ºŠï owQ‘»ÄÙ^Ôó„ž‘ì1ÐÐý§5ˆ€/Á¿O¯#nçÑÁ¿ï$j—Xâ>ˆžâÕlqusk›öÒ¬—Êot” Ô}Ðö-¸âçl}«mæo4V%KÔ¯m‡†£^zLeÕXÒ‘óß¡t†D–dRÂ_ÛwYC f éx> aî:ÐÇÒÜõ,.º#úwɆ}¨wωÂþh@MرZ'Ûe°¸¶­îðx†ÎD;kKûÖWnuuwMum.߉èôë†ä¤ÒŸ_WÇÛeT=÷ˆÓ1Dì+Ð_¤>¸È«{øÝÅß°…é|si*ÄRÉ5ýÉÏ{ý3ì–¸k 2Y:û>4¶*Øå²_å V,£åÉ}+ ý×JGáÿkèýÐï&R7úU‹Ohh{Iô»+‚Nùc@CÑÇèyUê…˜šBëÑ/þ ÍÉ›+è…úc¡õÄø~"ßõ Ñ-†•²;Ô‰Q„ÁncÕ»ð!‡Æ’ĆýçñQöIB)D7ãîbqg±Üµ\ï@¼„8šˆT½cy¸.¦x»Q#”ãï­ð¡µ°O¡Zæ×¼ÛDÌ>·çX3.1Z/UùîGøÿ"Ùôµä’À®|ö×#”r3ò_Y‹d{ðyY‹l‰uw³Ÿé}:¶…ZjAºŸbôKn&Ø<Øh~ßÃ6®â›ˆ~Ñ—äüØ1ƒÕ¶È '‰Hþá"–À†¢}Aeõ7¾ÑåD@e)K~ºç€ºœ£ÚBü$Ê·Ì_õ¿€ßý´¾¯§ùÕ7uó#»uÝû¹ ÝüÈ üŠÁ«ˆÿþª ¨ ¯eÏ4Õ£nø<†5Ù$•¼ 4è¿'Ñ£,(ò3ù/õ+~/ò¿ûó9]QøÕdÃÉÄ~-‰Ï;ò¬1»îwÛÖ!Xd臱í,·ÜŸñú‚Èφö%D ŸóûÐÎHRO⩹‘Âji‰+ßJiº¡(]?|jZ°ÚÏ{<Œç›ˆÞ‰h÷÷h^o4àm WVáýC÷”Î͹•ÜÞ>¢ƒ›ˆýZÜÒÛ'öE­o›´¬NÂÖ¿òç¯G *ñ$¶”’Ï@Ö]kãGús!n­Nw½çnM¥£/ÃÏJ†¸/>FDÌ$œ'î›ñÚ@,°õŒGü»5Ï¡‚k©ŸÝÊ`3ô‰ôDi3Ȫ@þ›KgS%—nTsóÈO­ý‘·*ô0jµþZ¿ýd¹öÚÀù›M¬÷Åß[áù tn7öYsûke·P1¦´Ðv–XšL,\ÃîZ¢¹T 3Ñ™Bòub¿HBÝL?žŠ~!uLEÍŒ÷Ç îCЀ½ü,ÐYþ.wŒ³,¯¯ šºÃþÁ‹è¿;FÖ›c»åøÚ]íÑ_#çjæ[Xe¹›ÒRRÿ/ЈÿzÄÓeï÷c¯§ãËï´ û¾8J=w ´CaÂ0<^Ÿw&b7Cúð_$ó_„å'°Àh¿f†»æÓÝçòÿñìwWFÎ ~AØBjJÞ †?¥. #y)kô*\ž[àþ¬ÅX~€çQýö°¿¡÷ý6nÌ]+¾Æß½ %ìJFHd¬¥{ Öpæz>wíÈy϶EO‘û3IÆ †?žV‘²Ôã›ê£v>Œ‚ŸýUáשƒûßm´¹¯üQêcÔÿw½v}iרçÝÕ1цžþº ›TFG°Wh:ú³<.ø*±)p&ìp×>äÀe¬½…µõX*•P1[Mí‚í‚þDekmf±ðxV«dÁl­¿zyþªØ]ǰ€øîç¯Ù¾àæÖ{éïúZ¿Ý*a£È•+©ûÞøYƒÓXJKfùýÕžiyžÙ ÒƲŒApÜtÚ„>8™]Õ¤ø,*ëH-°[­1¸7%fú«$âÁMø>¼­ƒ#¿À‹;ÄŠ»_l’6ñwKlæÕÔö5½_Yúþ¨p'”µ¢ncym¡·2;Ðpÿn<^RLbj~+M•z’…¿×€ðF·0vì=ˆl؇W¦Ç×PÛ§ÃMîû¼þJñ9xßU?·a~vüœÆÊYN>ûJóÙ«fí`À0‹fƒƒàêW“å’”‘Í2P«*Aõ.é "ýÜ}©Q8w]X/ðm¡áõTyÙ‰é—DHp[ƒú»UÞ‡¢€îʯú úWÙ2šYjÐgl«}cßi™h¸¿1.I;,ÐRjNKeiñl0ªvw´*!}àIô®'؆‚ß]}ÉÏïFCå¢1èôW¡ôÕÝ{‡~ø¹Æ·¾Ö’¾ßñ)Àc¶.–R5ÐPgLÁÒGæÈemŽ$ z;¡ál¼ÆµÍêîãÿ‘ßË÷âïpÄuL8^ÌzÛJzæ t÷ˆ1WІWðæƒæµÄ|J˃ö±,VE JÎ@ÃüÝ1A&É’‡ÈÝÁïîd¼Kÿ6‡Hp÷Cm æoÂû÷ü{”*éº*W®dY}û…œüÙÆza½–®C"Xxbum„Ö’Wræ?£¤=¢Ú¿å²8öÐßëõ3¾½D“€h®DL<'·¥´¦®š±S&ÁvÛË Çƒ3÷4|bWa~4â> ±ñØ; 0)Ϥ]WÕ A‚»»;$ ž A<·`àwwwwg°àîî\Ïý¾Ù³öïžÝë?{NOþ‹·¯azº¿n¾²§žú¤*=`=¬ª¿Û$t¯jÒMrë › v•17­ÕMóKÌal‘]¶ƒÖ ÙOȳ׎Ú# t؃ú_imýX£ê *ˆJT:ym¾¿ë·1RÀÚ)ûÖ2†bßÿË*~¦å@»šÈsøÇ0×kÚÝŸëžl}Añü°š«Ô¿WÀ¸Ÿt…œ|ÒA¾’Ï$Ìá¯L°è6ˆ@ôç´6F%á'¿…þU„ú¼¾4À~” Z™(ކ’bùøAwl 9<¢ÕÓôº“íŠÈDÙ,Ó©çjÊ×’IÚÊçò(rO®Ke-‹—Ä0w$ „~†nâZ´{¥ÅŽ9Ùã,’“ÌÕÊÛ»dQƒ2jbwô®T–`ì™GJ¢¥" zNùÄ÷ÿÏ/‹¤¢&Ô"î>qû(h"Œ¿7µufIjæÿ;«œäB ù$5üÿ;Øë«T1è‘ ç|¨Se°¤”ló½ÄS#[쟜º‘PMnRáí$V°ÊºRFKù?`´ô<òÉVéleûaðùàò‰uƒôEÎøzN| Hëï$‰ƒ¿d৺ü@Ý‘:¶ôN:Ë·¡nÞí¿»Ò#Í@y‰FËJɧ‘uqázá§$üdþÓv ù+[ç%"Š ¼RW¦Â$Âkhšóüß[e¤1¬µ†”–~ز2Ö®"UÑÁ?^9y?“Ÿ’ð~½_ï×ûõ~½_ï×ûõ~ýOZîêíìÔ¨w¾÷5ÿfê ðÞÖÞµÿ«,ÕŽ“öwr.÷AÕSvÿùª/Y¥*1ü«ÜTw'’Ô‡šÐîê9]£Áþº·¯ì¨^Öž6ÒRZd´SÏšY‹hEl†´Â–ÐŽH?'ôÕÿ°ä÷˜龯®±ˆëCºX/èI0ÀÝ[ÏÓ‚öX_iË æEÅ÷¿Âúo5:žRÃj£‹5&öB»ë÷x@64úÇX¥±X~ùTB¤¥¦´ðøô=å§ìÖëü{VÝ™ï˺Pizä½§¿é6²@qk:$ðÝðãYKë*Ô¶ïí”ÅÐRR‰Høc AIÉ-™$‰ÎSwÕGˆîÔ«ÇÖ ãe~ñï¯ëù•À>²þ®‡}`aA‹f1íz‰…ìõ­žÕ1 Û9M¨íÉŸZ´c}«Í…L×xw$s]î7è¸Md;Œý]_ÀÍøôLÝ6h:Û¥{ð±Ó`dPÀõ»¾­±AÀ¢ ›ÞÂÊX ­G.ihñþÅêZ'&¯o‘uÄz{‰ÄÛ`6kõ°»‡ [ÃÆV£“{ü‰|wÑK~M]WÁû#XKnä³ßô ì ªŸ!}ù«ZÀ±ªHNpª¯lÖ°äówiÜu=îúÆ=øû dŸ¤®×ó#^q½b; !àa8Ûïy˳×ê00µÝ#"Ô\Gü¨ÄESÛ¤…à¡úâýÅe,ÔÌ6¹ï«»d ®ÄVê ½DÖsW>Äﻡ‹hVR‰ØR=ŠìOõÛE‡ý¤á'‘¿f ‘°M]Ð26ÑVh1ù$Ôžÿ‘z&•ÍHý̶¨Úx¬;S'#“ë[÷ ¿-òïÀçû“ÎhsÝ¥‰ˆêéØ?yð>RžÐå Eø€ë%zR…ß@3Ç5•APЦ]-è?\%à{ áûÝÀ²sÈçzuÌðÝÀCü} ®³}w~ŸW7ÓÄõóß FÓ¤ªÖš¿ ¬ÆRZßû, C>H"&ä•Î6†k-haÿÁÊìÏh ‹ŸÙ¦ƒrK‘w;ÿ>Õî‚Kð…~þš÷‘:ÝìBÚ´:SJê2}Œ…§ùl‹gÛYòälÿ|HaϨÞÀ$[ðo |&E Åý»••j¾ Œ§&ùþ>Q»š¨u½ßg¢‰%øô~øfßÉo€ï…BF˜¦ç¥5òn#ÿŸB^‡'ÑW\øà#$?À›‘Ï(‡ÿg'®Õ/´v(º÷ï÷•I>’$âØËüû^È÷,§£‘v¡ï‚°Þw½þ‘g«ü5þKô%ÚÙ7z…· «ëyŠ ˜‡øst]#‘²“ÄâãáÑeµ>l8m Eþ«•ëç–äšÅ~%“_TwŸê!$ìÆÃõiMMe×Ñõõ›‡gÌ ÎÃòÂ[X<=™Åæ“·þtÿ??%-ùóÛ½à—à+áì©~D•ø™#œºk+BÏñ±Dh ‡ÌÅw÷v‚â÷y,GΟt,ò ÔúX}‡ÎÇ:âÕõÐǵŸ»O´"ˆ‘„Ûè³Â!ÐòVOÿÛ¡C`¯@Š\ðÜÔL±AÆÝD@ ÉGZP Yy´Ä¡Qí„ÿoÞ.Û·ÃÓã±m|¬íè¤=ò×êúð6˜m¥Á¿ãcå TGÑÂ}2@!ª@×O÷Ƥ&.?Œ : /côŒÎ¡Æ*ˆ¿*a‡êò ržÃËØ»ÒóüÏÝÓÕ¼óö€€«@†_ý5ЙtÞ°hªU‰71â59¢%ò¾ã‘™*à>ay ”´„Äÿs¼b³ºëëoà%Ÿ’9†Ì&Y°~.q}½£ÚuØù‚ÆÇS;‘ Ýr¬<‹-Æ!á‡`B¿oú¾Q®#À#²{d8ÿEðâ¦f„ûì@ƒ[`ÊŽÿœÒòx@j_î!#~L|fm¤frùÓJO™€ï~Œ÷?á·c¹÷`s´µ6CæQê0!„¨…ôA0¿±Xp—¿ãÁMþ¹âg¥¹ªx ºÙê턬ñ]`^ñW^2`i3| õ@KeÅÈɬi(8.TDbQ—5ƒ·Ÿ÷×ôÇÑW€m|üwÔ& ~Wí ê¹~ÿ4¢>•¡H·Åß%=Cóê9ÐÂõ;ÙOt$€ÏcÛmDÀV*£öIg/4'Òç³_,1y ¥¥ V³¹ðí@¯|øþnùØ"‚OÙß§xû|wŒûÎÔ)¾Ë§»öŠÎFª_ŸÉ bá:ÒÀâz Q}–¿–á‘5’ŸžuOßÀ¢¢×–Ü.¨«Yck…秦®.lì¢|ppç´ÃP/€Z¿aÅuHäîüÞξ»®¯ËÀþÞú3¾°D;©qô±,õwƒlfj~6‚òoAºû bB"&¼í#ƒ¸>wî^¨'  ›Ž±K !;+oýù™I¤Å"ö¨`**þã24‡ o·ýü§yØñ&Ïšâ ©nºá3‘Ýõ6+ç‚/Ü$œå± kOÀö7ˆ™üåz?%´½~nÚD4xÝÜW×3h‰Ö&¦µ®öAÐ\› kXŽôµ<ð/ >›A¿×_é*öï Ë co¢]°s_XþT<ÀݳŸèNü¯ðÝ×áýãÐÌ"?éá°÷ù™h%ª]'g¸¾W“ý§RØ—Ë6ýŬ†U¶i6&|DتÙ5°PRJÙ+á5žÖAÞñxÁ²ÚJP`µïü<Œ8p–ûNžîŽ×1zKz“Ó‚ÑÀtົ߮þ>jÃùðýÄѶ™íÙsr+®nàb[]ûΪ‚†‡øÖû0ãRÖ3€ÒDôv’YEj5j›æØwŒ€%ÈÓÂOºZë{ùŸóSÖ€…/ÄÍÂuý 7"ÅZ~îàýûØfúšèïÞ…ôq¨ æûûÿ? £,aë·|Ë],5? 0 ñ>øÑ1`òç†ûT’åò¹&Õr Ú/A¾0œ4xÈFäïï‚mã'Óo)Z‚1¬žï yžÏ­ñ]¡¹9èh¿ÊÝS•˜¬x/KGä}0ùÛùù‘}/—ÆØ¾uNy­ˆ:óJEêœCØõŽÄ\¿ÿè£ ¬ð7|w±=AkÀ}\m´mŒðçD¦ƒ1©ÂÙ²ä ð£7ÒŸYJ$í"WƒK] Özi ëÙùHA-åû“º¾ï­´.r„ù´Yo¾¿ ŸþA¿cgyÞ߀ªÀl1Ï'âÛWý\àë°$÷ù¥DÅt,¼ =$ñ÷E*8ï¦~ãï]í{ƒ¸ãDoð„øÒx Ö"ùŸ®ZÙûú¢×õÁv~ú—]Á~סv ¯öCCˆ†a`à Þ¹ÌßÝ}÷wÈ?©ðIWÿÇÞ£ù”; ÎæsMµÕþhr1˜xØ'Þé«I´À#!G$ŽÜ“9øp¤œÁcZÉÞ¶Ã#Íc}§ÞÙüëz¼woD£ñwìßýÇõ¹i‹5¯ãÙóÐÐhì{Ý÷¿> âBÚ0¶ˆB Mðs•ŸûŒ¹?™­¿Ü&ÿÝ•ùìýþ|?±#Ä÷¨]kù>0ó°ê*42ýu÷Ãïⵎì}^îï„vGƒfc] ø=ØMŒ¿ï"›ë’qM5Çà“Ø~ѱÝW ldψ¨fBN¢ßñ÷SÍv Ír¼¸¯wös/Oøù‘wº™:üŒ§‚{³Ðš›†=„Xç™Âv>éŽîáܱÀÝ|þ:ŸíŠfÆøþ×! Çfxñ]P4œM–¼“?¦–“ ⦜Žõ•Ü8ŸÓgó÷^¢Üu·ŸŠO/±î k¶9LKõS˜A¢¿%Y£)Úø…í*óS ¿‰n£±¸;xQÝÙ?wþðškC:@^pçȶxMN#cÐá=#VK¶Êì6™û‚ë}‘e®÷÷úòÍÀwOúðÛyî][±Í`Ðo¬×ÁH¶*o n¢“›QœxZöðGD/`çU¼×„ûsˆOàC‰•9ü/«Üÿ»…Ì‘äf7±ÃíÍR°¿Èç:[5@–ìñF$póŽgit° ébõ °Åª<φÌMy}š@Té.rÇÊÔ6¢77ÿ¥=ß¹xï…Ö&ú©¹í ‘1ûr –b’{ºYÇñKw”–ïq×ÿ¯ î¸'§´:G3-õ'<åK-4‡-Ä+‡áß ÑÄjM¡iñëk0ÆKD{O¾½'[w@sÐÒ1}ÁÏ|Þ3s}CÛ dž”–„Ún3 _E¦w“#ã`ä*‡Œ­°’ë¶”ØÏËë«ÈoàË•@´x‹ëùUA?]ûÁ\Hw-Î%“,G' ð•™|÷F}è§»¾@ø¶³ÄÇh ìµÂK%Db]ìNÅznæítžµ@Î)xÁwZ½8~0 è©)©W`ËNšoè€ÖNàѽئL¾ ¯Œ!6bãMøÀ*>QÇ¢ƒ3þœ ˆÆBøÊi™€Ê¿[ê“jàÕn‚×6}Å~/‡õõö ‡ñ» §G¯y ×bU-€§ÔÔšžÈ~¥)©åg™ÃåñNj¶pÝÎCÈóÝÑV"d6ß¼”9á"¹¹á/<¢öåSíÿP¦Hll9 ·û^Ljö)þ¼Þl2ßx"½-Z˜H ìS× à[½,神.Iq$tývPå·P ¾×ìºG†’ùö°µ›%õÈйá»Þï†õŸð]äÖñ¿\$ŠVI‰€Ê[ÊÙ)zü>ˆü ø™†/lÁ¦óý9ÀYð½~Èx»½FŽá|æ­”b›}üÛN¢“ärYÖJ?ü$ú®üLä8‹7á³ëx<ÑðÛÂË4£í—±¿'þ²t‘ΠÀ×þ Ç^öq=±à&8·ñ7ú¸®ëil:úZ?—bĵYwûÎÙi ¶töî'¡ìEƒ;üÄŸ‘0>7w™ ßqDts4„Ê?ˆÚ8-‚û´ °üªŸQü(©|ÿ*W,gŸ¯à¥°ä òâR$š¥5ñääšEûËDI¤ê;Ù¬•ì˜ µ¶ÑZX ;LÌ‹¹3ãk@€¹|×(Ϫwè‡ö \á ±µ„šç$lr7ÛÎÖd’I¦X~‘ï¨@ËK~öúžzœ†ÜÓõû9­œeß'"Qa ¯±´$<ÎuE»¢Aþ¨îj@‹cûý¼àûl‚¶šúg‹Á‘µh †­Ac稚ݙ¤ÛÄÀSMgóõërÿ¿¬9ßw£æÏúO!âÝÙ¾0¶Wb ã(rà ä=6Öa¿0ö+G²ÄÄñY2ç~©*™-·}c¥í1Ðý¸. ûøÄ.ï ×ü™£ èé ßv›GwE¨5ûóZxVˆ¤“ì²QÜì3w®¯;Ùk<\¥—ËiÐü¹k£¿ªá†>#«ŸÃòýŒ‡''æÛÓ®ßU\‹fw°o}˜Ñz_ûÝôGºB@…]ÔEa̼¢ÉÌ;| aÿÐpÈE)*Ù`‚SÙ»ýìù|â`‰¦·Kú~Æßç+xpÊÛêÈóßüŒ§Dyk"dŸ¸N™K51ðÐO|HtOÜÆö ¨ƒ’]¿4µó~.V8[¢™`G¤²üháÅM@©+Õ¨\Ö‡Xl¶¹©ií#,y ÂÛv4³ËOÇ诇!úÝÜEz †* œ¾Ã;n±›žÞݳ‚ÝT@oàG l1T߸ò§ëhÃªŽ¹¹ݯð:Â]ï®Î>î<Ö4pQãÛ æïí‹ ï®yž‡•G‘Ͷ`Žpjd„Kò ™3†~Êö+}eç:†.AÜ4aw¿DZ{‚=†!­¡î]績°s‘?§” ´è~ÅÑRIfÈyßëï°ïò}ÍO³ÆßÛô%¸x’ˆwÓzÁY'푾!Uím˜À"o&ù~©ï8o8àûG° VØÒ››ƒ1oKd/ÐÂN_ÿMAç -º_Q‰óò’AN éÇ óHP º­€µžÇ–w°Öuý\н~ïz6þ,Ò.~:T{0ÏõvgÏ‚yý?¾—ÁRZY«.î&o|‹7¸ºç߸N·Á¹;ûï/+Œ¶’Ü0¡GXý%–>GLœÂNnÚ—;¯{Ÿv]Áû¢ƒAä·Jø;+°ëö¯t†ã-fË`|ÿ1ø—²‘#“XàÛÌ&ò“YLž§³µ:F*Zì?¯ÈD@1.“=^‡µ}~¦óU¢|†ºk¦ãÏgð~ؼÖýšè;jÿ¯4ž~ChCtçõilë®ê5Ç¢["+ŠGíÕõöM9„M`Qù~Ö¤Ò,ÐbÿÕ £ÙaÁU@¬Ó~ÖÕ-ðþ™F†©·Å—ï Áb,ß™Z¶¿¡Ú:4‰ïÿê;Ä»#ä]Ñ×âd´¿~ôŒ¾õ½T+Zv;jÛø6µOøÞ~àK>-"ó-ô_­KRORJ_iUú©gÁø´›ï>TxàÏl÷Cêv~rm#ßÝM}(‡íàCýÜØIð§|ÒévG®À‡çk\+I,Œi µLq˜¶“âÔÞ¡gÅÑñ’UÒH'‰¥5üŒÚæÈ»½ŸEÆšŒ$ú{ò»µÖE¿Ÿzâ2âi´ãŽq Ç7–ø¹ñÉ›½0 Ëp¥DVŠ((`àñ­„}o/`>5¨¹-õ_V2ª÷$Ôâe$"¶Ð"äöêÚØûÂPänC\OÒ_ÐJK$wLJk¡wÄx%~²œÇì¿l0} åµeþë LB¥pÜ_p•Ÿ“°æÆT¡i%Ò·Ô¥¿ÒÞúÌÏ»úÁOziE Ô$›÷AÑE ^uù®qî®pOž\F¦tØßù§ù«&ãkáÃu,ú‹/ ‡Cmâ{[‘o?‘mùo–ês)@5þVV‘¹Ý¹O7É`hÐý¾„TûðŠŸÐÍ ~»+ºù«¢Ž"ÿV2àØî~=›ƒ2ö3 ðs!&úžÉËüt$µ|p kR$Ôu~"…¤±4Æ;7kYdìR¯ô×÷¸+]ò»;¸ÖæÓƒ,8/wWƒïóâûÜQ®Éþ¨ñH8ž›‚ä& \†7¸NÒ;É/ýÝ„/´•×r¡„ûýeí‡ç$Š"e9¢ûGlæŽd,ö׳ïó÷C¸ùG-±þHÄ ¶½Â'Α)×#á9ÇPPÂMBÖì9œÊñ§õ<ÏdÉ- 5b +GöÛhÿn}¨Eå°f²‹Xk4X¶»mô½Ïßa¹ ~nëtÓXˆ, Ï/òó{cã ê®øvG ¦àñ Á¾»Ô¹é,£E°7x»º°²U#~E.X¦äB þ»eš[z#éCªÇÑa7×Õþ>~}YÜ À™Ävgrß28ÏYjŸ#HõVÆîã#nRø^ôrxä[¾'Ñ^ös‹×h kcg`Å£ÑI%9hÿnÝ‘R2†½û=w3ïvÃ×bÍIàû^s“ ÝÌ›®ð€ø}‘±ó]Я#ñUðÍu†ÞÌcþÓrØÇD@x*ૼ/Ô¬œ²ª~!×-ðß­Ãàß kÓð€ÂæîúªnF­»’Ó­XèìŒÿÇ¢™·šßKsúÞ°ì$Q?ƒªg‰ŸkYÒ•´‚°ý " ”5bËBVÜ:Y}k¢C-îY+©I/­[ÍmŰÝ38ËTè[ôC;M7L‚ó<ö÷5&´©XõF´·êî÷rW@ŸBîY`¡›uCsÙ·ö¹¹Î­l ²¯°¦¶ÛÎÛCù1Ðâþ—õ#õhm)¡¬û›Ìî ãdÞv]'Î`Ûi`£›`݃o‰¨îkZaûÉ/Â.ù¹æ}‰Cþ8ÐVòB«LÕÞòÀz{[w»hÔX7Ié@‹ûV/< ‹$×òÈâ±×7½Ì#ýÕmkaø“ˆ‡5ÈøÊy†"YËk‘ј»FÄóÛ vœò÷Ì»3!74žñ‰5±v¶Ÿ:à‘UѾhzv …ý«!>CZË $ÛGÞNi¯°éUT°ï•H¿Ü›ˆÜ Wþ‚_ÏàQƒ˜Q¢a[Œ52éÂØt殊BÌBþš¶Øšê@i+ßZÔ²ªˆ›L¥°¿í~æc!Ëlî\Õây(èÎà<Ä×7ý-@‰ÄæîoIޝdBWnîÁ2ÝccˆûvÍÒ¼6Ôv‚uð”Þòi¨î‚]HªË¢YÉU®ëy̶޳IãR½¦117Ù¬Š»‚ÁfYì ŠAçl#Ò妺}¡}mEZ:¾õ×@dµZ6ŦÃ(:Ú%¹BÉÔÛ¶òÀ„›èÐêc{©¹­,.,HØòƒ_›­-Ÿ"C\³~&A=ƒf ˈ™Íp£çÚÄŽÚaPÑàLùžÞ êlJ³À1BÏ]¯ÿl•¦ vgù¶‚ÁVšÈMn5£µ·Ùö«m°›VÙ7ã{©>Ór6C³kFÝ"-aQ¹õk40Ñ!mLb¬­¶9hñÖ å¶ÿ}%’rR‹ýW‰Ò—·zä®,Ö_b=l*8¾DÛ¢ ´ŠFÑ>RGòIMùJšêm$ pB×ïýñ‚ÚþÊ þÙ$iBÉŸµ²È\"µ®4ñžÐYæÙ:›kï°M¬ù• ÖóÈ _ÓTN—¤•ïdD%ÿ—AæÆ6ÆîØu› fµÆ:¿oˆü”UšUJ2‚Ç$6yk¬õ²qAQ‚îØË4ßÎjR.¿ÈY$ý°þPž/–³²¤×²šLÃt®ÛZÛ©µ¶d–LˆîG½¾•’-Œ•ÓzÝâí ZáúØJr]!])¥–T“¾ü¸I¤©”S²&}P–É>­oÇu°>‘ÊèñKIhqþ[+¥ïè_[ ÃçÂS½&ýsXa=ŒÅ“À’J:¢?¯dC¾ ÁÏ2ˆ¨ù&5Az€‡ý¤±Äû÷@t+‡””v2ÉHeÍ¥·ˆüBR˜x/F|*ù%¶ï÷Ÿ („§g´h#·ïØ«ÿ“« ÒÖ–ñXôo뢠ä?[ŸHb¶ì•ï×ûõ~½_ï×ûõ~½_ÿù• î›vXö÷½Ì“¶šBs‰›ù~ÇïlóŸ\Y$Œ. òæ…»¾]Åy-“T’þÙDÉ¥SÜ3ÔDEµï¤×vÿ'VX|^? îs˜m*ÞFÒŠºÆÍóû@‡êmá{ÿ]ÖLÓFë-¤±˜ò—ÞùÿëWŠH{©Ž• Sç.Äëój'Y “ý”·^ÚÊ:Z°%°$–ÇRÙ:kkoÕ¬¤N“‚TÄe$pÝþ+6.%Ùu¸ÃÒ®ÏY6½®=%,'ΧIeQ-†åµ¯-µ ÖÔ²Û÷VÌviL]M}˜÷Øýý÷õ¥Ÿc·B\wˆ4X5± ¶vJ¿²ÍºTÜÝW´ºÕ³J6ÖÊ#ñ-½£q-™å·ŠÖÕ¾µR¶8($ípóß]E@¹¸²YÆè½Goõ³Å~ÓÂÍ>×UzA–ÛínfXA¼ÿ†ÆÄ’Ù;ÍÆß±­ª֜څJù— š€ì®7ÎdÊ„g¿ÖTvR“ZJ¼;¹—Í­Ÿ¶¶8–ÈJâ÷1,¢=ÑÔ°­»&ä¿£e®ÓRHîÎlª­Bþ2Øùf´Ö¼zËwÑúЪ!1ë¾±CšJËñïvøï¬Zâú”çòw»º{9V"Ï uýà]ÛÇþ:¯0öBOéz½¤ûùÉcÑm­>Ôüè᡺‰Çw´<™p±ñ-^ð±‰F@ÅCåyÿ¿]•%%Ѻ@îàÃîý“0÷ï+¬¾™"õôòLŸë½~j'|„ Xþïoy½ÓœÖǪƒ„¹m ºh¥!ð‡¢ï_¬%Œ>?Ùý´ŽÕæî„r ƒð¾;æyuGõ'éßúP>ÈŽéKht¿ƒ—ÑyÄ·HŽŸ gB0ä¤VÓVäÓÐ=©=¸/­ˆG°å;ß­d¯Ö#þ®ñð Èy4؉/lÕ:É_ xÈ+"#5þ•,˜ÁÄÜù‚Ï:ÃohlͪsaK¬ŸœÜçú~-DÚè¾gépþ:¤®3âodý-øüqþ> ÜÇÖhr;ªWx?¸Jä¶–Ï¢À6êÍ ʇJ[±É†=-æ?YU%75NÌ.—‹V,}o_Àc+²Ýò½†ùÉ'ÕÝÛoO«W%&ñ^ľ€½c‹}dÿä˾Þi¼ 3±p]/\a=,£$»†¾U¦^†ú&¯¤²«X¿ÝŸú!­Ô=<»Š>\·`'P8 á_×17™6—>ú„šï6¸ M=×Hö?¥»ýïaÌÍ‹X‰7Ó¬Ö­Ý–š¡ ¸IÞ¥åK-ˆ×G¶¥:ˆÇT8ÏVPÿh¿ûо:ÙÿE54ƒ¬PLI}Pÿ^±‹»»ž¯úyÏÔM¿XÚ…G¼ BÖ;§Ùc=ïgk…®U…*ÿKɬem5Ò.ÔeÚM§ ë/: õwóîçñpwC/„…P”ÑÚ2@SÃôŸñ97è ¼!3¸áîš a;whNbãßòÞÁRijq û>üíÊòÕûxo²Ùn¬=SÇx¢ÉtnæEÖ¦óÁ¾ : xdȯeÐUrðs¼à.qà&'ıtæîs;Ã÷œÕ´Ôé`Á±}­Ézj©&±CÑ|t7«2‹tßÝÄ 7Çâ¦ïx>Ýß×´FÝ•|a‰îÚD؉_lѧZEûk||º<>}ÿŽ`7A‚S|ò´Æ#”£&XA(GÈK*h9,§et3¢ô+ôèÎÇYY¤œ?zµº®œ‹<ŸÛ óèïü¾MåwœXpýÁVø+"¢¥ÉðC+Í­7 p‚&ÄâÛ+²ƒ»#"!–>vD±,VŠŒð9<(/<èk«"–r„,@]RDÂâµ®kã5løÈç7׿³/¬ö,ÑE—ûF ÐÇ]J|DZå~æA {ª_¡¹øÔCǼüjé±¶ãGŽ¢jþøŽ+)Ú¼ßÍüççÐÿÿ­|x&iåû•oÓ 8k´?õ¸x­‰÷ Ú°<œFN7÷«Yð2¾±æ·Ncó|†:¾{KÇ¡Á4ÝWúÈ’#u~«iuÉŠ±,•°Ÿ@Æuä›À{@""175ßcÐÙ]ÃÆÂRùyW1©ÿºb÷mú3¹`Ÿ¿ëe*[-#*jò\m±° û»®þÑ©•6’ý®'Áx@¼|¡»‹Þ>€ÅÀîÙ`Âf‘ý1‚l¨‘N’Z|‰ ö—’’›Ç¶ÓT4a©rV@ÁvX|‡¿`ÿ:É]GãÄÅo „ëûáz#º£Çy|lé´%lo/yb%Þô)¸ÿ™ï„p=E°õÀt\OØxùmK.<ƒœÃ÷§à)'É€KùÔeøÍSu3]‡XÖÑkcÑ´ ~`ýÈ‹úH‰Eì`…}&üÙ.ÿ¾"ÒU»û¤¨ŸÏT¦ öû€hwj’æcë9þ~·”háïk4&p—ˆXïkSd}³gx«’ÏWød/ß%uÐþýØwÿˆn­88™ÕúØdª¡@#àGOÞÉ]ýÿe®7Uxpk&’mÑ× Àßè$r÷ÇêëÑÈB­‹Në1Ïðgã‡ÑFìÜ_ùûg"ÿtÏÒ™ëù‡ 膟˜B%讞¡…$q@¥Ïò‘5Hêðú6uýÞ§øþU `nâQGßÅý¸º ÐHKXß üÁu°sÛEOüÐÁ< Ï÷ÜÓYøþ?9í L Vß…ŽÒZKkK 4Ñ–Ø ëhÝõSþÿ@®|h`„#>“[x"3œìû=Oà1Ê÷¼u÷¹ÎFš½üLÅóûêwèc^qÖßÑ}¤<çÿ#Y2{ã§CžC3ÛÐÛs꡽DÆošù«Y/«H.ll㬶ý =’T>—<Ø~¯ç× Þ˜Í`¼·¿6¦ƒ ñÓn¶`ÛµDô0¸Vä[ç{£lå¶xÌã[æ‘›;x möwD»YBð(w å<òÆ+’X%K¬¡µ  ôî<ý™sŸŽµRé´ÑÎxûPíŽ×¥µüq¾d5wlºYn–i#ðá Þ° ¯¾ä;y»£À{°ÿEFåŸÙÞbï=þ.É5°ÅÅZŸO¯3f’Þ’sc{ªGxÑ«Þ ×vW~EÂþXø'òWKdŸà{ÜtÓ"ðý±~ÞkVv3/×cç~hä'^;è'b.%'F‡ÿC^×?Œïô²m'¢Édv m%†Zá7kˆ€§Zöךü?z .\£¦v˜ü¿}’ÃcVÃsiSös2Gê~ìqE$è§[ƒÍ{£× ÃÝÙ:›|øZ3ZjxLBj¾BX±uP{ \\§ïslá:‡à%½øæž¼$¬ƒüƒ°~?PXÀI ÜLÜá’WâÁW—jeü½#1ìºw9ö2“¬÷…ïóÝmüâûáÌEªa<_M””êfv> #rȪÎÝ)¹Æß5¾ïX'Ho[ù¶çøÿp¾o^˜Ø’š;rüøØöh€É¿Ó“BÂqðùY~¦ùvÏ|6#Á$­êû¿ãÙû½TÇxÞP{Ï»´0ì¾!Q²é~%zkây$Ͷ3À‹7D»;*rF¸nGxÒß?ü(¼`>rÆOU¯Q4pÇ€Øÿiøör40«­Âs°—«Ér?€ƒn¶åYl¼˜ÊfrÎaÛiT Ë@‹Mèj1:Ø7ž¿ðGû¶ù¾Ž^‚ßAÊUh¸ œcÚJ~uˆ™ÚÜ$”õú&€wC%ÿµÑx¶ÊO1»ìûr ]À \C"ù úÙJn\ƒWlE’ü^ÅûÁÄûl\Êî#Ý ­òOÓføÃ;réu?÷7ª‰ÍõUíK%¹Ë»#„+`Ìç©Ìâ‘+'°î‰#95Ÿ Öنͷ µøî1bþ<²tÃ˜ëØ»XŸÝñ×½®Î bz‘Ÿ“3÷‡ûþ&‘`R›ýÙ’W ˆC¼ÕÄD[xÄ þ‡–Â^ùJé^áέÓü¬ŸHVi/c}$n³Vaëì÷y?ÖͰéÅßGØóÍžï^Ò(6ŠhH<×ô ‚ñ’ξúЯßñ ÿé ¦8îë&OÇKZ’=Æã[aa†îLQ$?çÏ–íÖb='ZšúïGßËbòm&r‡ø£@둲rÖõw{ä:Ç»ã5–~ëûÿÄû›ikãÐò¬ ÈžGwÐö1"j`@åŸý·Ê ©û§97WaðûÉñ­ÈsyÖù;#c#tÓDkÂ{úøw•Q-͉¬kÈ“éð…`ôä:ÿþÂ︚ØGDþn§ˆ‘oˆ×)芣õèz7ßXWHå€ÊïŽç‘[}ƒT›ðË#ìïxäYáþ4ö+–‚‡ u©Ì–âü›Vd 7!É] ÒÔ÷ÌŠ?”% &‚“ت3èÙ]kû~™ ¨úº2ûѱcЮwÄýY–púÓï«’4¢ hNö«Ä~Ž#Úw±÷óðÿ/À³Èø“ÇÀ¥ìõ M¥}^pS.ÛãÍSÉ[Øz£FÓ[’ƒOöEâV ÆT¦Wµ Å²v†jþŒf±6@z×ù8Q³䮜˜Bþ[£ -~¥‰Ùf=qµ•W¡ÃÄR¾€_!ÿ@’ÉäãÔ4PÍñˆ Žñ¾fû —K¿-VwçÁ>ðGw×ãÉ9l¨¥ºd)-†ÝÆ¢Óˆi§›1äWO¸.€Çø¦ 6_Ïì'þŒóæ)ßýF?ÖOä‡Ëï:~¤”Ò>ëg?4bO±d*>êd_†µ‡“Áëâ¿mA´ŽüuŠú.±=¡‚ÿÒ¾…õÆâˆ€†H=ä;åŽC«ˆú>*Çî¢[A™ë0A×ôn€§ü¾ê€½©·ÀXGƒ÷õ±úhö.‹w Ëöþ:Ñ?͸ ‰;ÉW©í?±Ï­®Å¦µ-6š˜çkʧ£Ç |ƒ;‚>ŸXxê'ÂU¦nú 9Lü¸³¤gx}W¨¸7 '0_:úkWVùcß'ÐÂiøÙÄé äè‡Ì{á/+Éù{Àˆ'à^ ‹b¹ì+jþotÅ·¼T³»ðüu¾NèbŒöG:öÀøÆâ1wá¾GÐÇ1lÙrÚUpbV¨þ¿U†²§—@·í uXëG† Gœ»Jý(yÁu÷\ç{?=P7é"<Ö K× ¦MãXËC&HnkÉjOÈîëÐÁ:$ܪ÷4"8yX³ñ‰cä„õ|ûq}GV˜«­¤n …g“r\Üó½xþ1ïø=r}B…w‹××£ƒµHµ}¼ôïÝ<ø\¶M¯Ê"ÍdU¨t³Y:‹`îê/7óíÛç÷ij}¨äæ¦<âÓîÊ’Õü´Ô:Ý/Ó*rH\o³ÖXw¡¿ßc3,-ª%¦N‹Mv[àqÌÀ¢ñ‘AÄÁlíž0)^ÊrÐò7d¾çÏt¸ ÷gñüíÄúK´“|¬gS‰÷<Ľ»&b>pWPO„†•>üWÛ£A6o{ÉýQl.Òº˜pnÇÁëÆ€‚aB#ý¹ÐãX7“ÕÑgr _íg~l#ó½ÐŒææ¬ÃÚ¬¨UµT Ã&(xíãÛ:J: §ÕÕÒJ2k{ÛŽûýÑåÚÒ†hR?ëÁu0dîzØ1 ãpœ_2˜ˆ˜§ßj ùa¢Ÿ´„ß„ÎNz¾ ¯OF¾ñ\Wù6üv×HE³×øPêP"¿ë~ÜHjÉ)ïuïBfùÍ ~Œ•_óús‘¹Þïfž!CL!è!Ø#þ8r)È·Xï }â'­Äû3”ÜY•œ°€ˆh :È«…eT ÿÓ*¨$±á½î,å÷ vI ²DûxÊaôÑ=8ßwGD`ý!d4cÅ=õg,¿¾· ÞüûUa-‹]ÆÓ¿´ÚÖŽXR3“v5nVø;ih±ÿ¼è/RL>Ð4Öl2²ysWE·Í~î›ãu \ìŽ÷'Æ\­ÓëOÃGÔZúÉî(ç¼`Qs~œš*⊦‚7…Y¯ÐrZÕ~1¡^:ªEBÕuðK$Ÿü(}á6wa{CÁ®ú(xV-Än¢–m©íÀü´ÇÁ š›g}¨i‚FzøÎÉ+ÑÈP"à òç&ïw'|jÙm§³óšÔÖÚ.«oµ€ô ´Ð½4³”!7Éȵ^‚d{à)ûˆ€õ ž;KÖ[kûé&-‰‡Æøëwî²üm˜qKÏÿÝŒçQ¾çûFò]+b×5‘u´rxÔ÷V™XÈhµ¨:#ÿ“@ËüW+¥þ(餑´%†GúkÜFñù ‡ õ't2«v€ß»éàñön¼çÎåAO;ÑGg>Ñÿßɧ “ÈÿÏ55¹/©='F^€Èÿ|6ÏÆZ[­&-ô_­Ø:CÈb‚/OõçF#ClêúÙþâ§;Œây;$ï‚­[¡Kþª@w¦p ’wóÇ̦nþG°ŸŽ±Þ_ÿ?ÂO€ÎžSNi=üa!ù&F(šÿF‡R‹» ?ŒåúcšuÁùÈÞW&"3žµðç|:°ÕNðï:þïfeŽ)öRºã¦¿`}7㟜§½ø¬;êUžÈF^ýÀé©-ÉB‘ü…´¾d—Κ™ͳïÏÙ4Äþý|-ߨÏÇŠä½<¶×zT¶§ü,§£ê®òÃgúùæ#ÑÎ*pã>,à*ÕóX¾/ lòkdKU^°RZJüP$5ý\ªÃ€ŠÚ#Pmtѯùw˜¿–åqï®ýæÕîÈ?i{à'!øÀ-pn±°ÙÝ‘¯9þÞ˜•z™ºçß7 ^×:À"ؘuV[#Íá–ú/+·Ö“ÒI³Ø;öv^»˜ˆîJXé ýê;;÷ƒùuëf “i~Jš™› ÄWŽnjâþíëï;…nî«» îpm|Ž¢ãùmªMÑ’<É6,+ñåûH‘Â’Yz cîZ×¹dýDùv2@0°¸à®å{Ä+‡-+UýjÅçp~£">vFxxæìxÿE´y–HxÆ"#¦¶^6:teêßV²SšS•ƶÂX*àY$8ʾO÷Ç„†áù“@Åñhä‘¿Â!qüP?47ã/VÍ^‚÷Éü]B)-¶Ýð:z<Ö¸ÄCYkKmøV—|îë߯6ÒI†c×`”›eñ„*¾ =EúYþÜà$Ð`X6Ë_'Ù6ÑøÞ/f­m½Í±¯‚ži_hqÿÁ*'©e.90йë_ÒØ}wËy¬<•š¨=øÿ’×—`ße`YZ댇¸*·„å±ÏðêüÈËÜdã{þHÐf4`=Ÿ*ïob=­“ €÷“fúüŸ(éå ©C ßÓýÄø=¬N®¹cŸ©±b¢|£¿Fô¿£ù™žµ1ÄzKg-‘2¢­×hþÞïãèaèq[kÚ@[`{A>7û抔‚û…Ε™}‹ †ß¯Ïù³›IÍͰˆeû5Õ¶’VÓ*‚ ›AùTd ×ïc½M ºKHÆHn l9RÈãaÉîzßlÕÕ%BJ³ýÊPÝÿ¿¤ì“ºä´¾X>?X.ë"ıvÖéKÁb+ÀÃáñ?Øäìo›w§-·ýx€‚ m«}м%Á‚X¿¤ÍÄ÷?¥î­À»»C]æûÛ•SH|;:û]þú5oì ‘®”UA•©á_ê÷èè]·AíƒNÛE;k/ì„eçqÒnañ¡ö3Ÿ¯kíù†N|î›dÅñŠÀ]íýï®/¤’”%rsYsdȇݺ ÃpsS†÷M¬™À#‚ÝUÜAƒ*5'ÓŃÝ<ÔvÇ*IÐWvÏ6‚‘uÈÍð‰c¶Á2[ ý]‘sS ß’”d¼"V=¿Ö7µAH\œXøÂªó|–ýš¨(N®ìγ²°£TÁÓ5¦u'Ë×°OÐUq40ÚÛ´P‰ê'D‡Z¸k¥‘iòŒúÄ]ý;ÂR‘×:‚ß]dR4·É¶Ùæbï—ÚÏ¡“ÄA'áÅÕáÊ«¨ó8 Ï™c‹í~S—©ôhÁþíÕN†Ë]?vw|[¸ §A³‚b Åç·Û|$›c‡±î6p¢E¡:N£5µ,õÿ‡à\ûɶ€ÑÃL Zeá¬V.‹$i(ª÷þõjDœ‘52KÒhIË”+(ePo*‚îvÍŠ=Áª-uuÓBé#óäWÙ(?Qí}2tÐèö!“7è9ú«.u¥„T•Å迱‚ñƒ&ÒnüœòZÊkS{‹÷G±« DI$…ZÉ _t]NÓIJž&õñ•r’GRÁ!¾ü~:Äÿ´U[:!9,þ·+š(=z¿Þ¯÷ëýz¿Þ¯÷ëÿçJ /,ï++E%Ù]=TΘ9u7ûO¬d0œ´‡ßñ¤±T‚ïÖEúOdœ—“ÒSúIKýØŽÃÿh-]û+$½Óÿ¡•žŸþ›\²JE))?ÁóÈ^m';5—µ öD«[*»£Å-ÕþMÍ U¤ ü÷¯ƒ”ðþðû ÔWñò¥Ò]®øj¯¦¬³ÂÖÅFZ-Ëf9-‘ ¶†h ¾e±Ú?ÉF ôG^°~J||¯NׯѶë}¡õ4§Ü”®RJë[e‹i4DcZr¤.m5,»%¶ÜV-LDJhîxûZŸááe«,ÐSÚ )bßÔVûf°`©¬Ó¤˜¹ù°9¬ þQok4‹æ'æÆf›¢6ÍÆ®ëuèétøï¯2T±…e‰„ó÷mÓezZŸê!Íli-©ÕÓÚºK†Û!‡6*±;Ï·ÁßßšÕÜ}1¬3þðH÷Sç ÿX«Žä’ÒT»£õŽnÇã_i:»…GÅ žk›¢4¯V³pÖiÝô‡dh`…ïß>@µÆ"Ú>iõ;þÓÙóPéWð0Žúî^¯uŽÞÐÈVÛi[¥ô¤$ó‹`{×ã1·½ñÝ~\g‡ä¦D‡øIKëjyl™âó€ßéûﮯ‘> y®6²¼Ógxõ;M†4‡‰qw-øX{Ë¿1ô¤>ÒÈÜËj§}—Ø lýNÃZ\«`U­7±±ÕÚÙV/ wûüë•䫺ŸÒ‘ó&1}A3šë!Ø5œíÖ}úD[iu0á!šq½Ð£ÛmݤWô%±â®v¹­q­ºïù™|,bù5¹6á{3Z¸¹2Kz)&]$¬®‚ÑÝâ›u­>Ö·nª3¾p‡(ߦ{t¹}ee}oè(ö9x·Iñê=ßIî"[ÝÔ¶6ÿÿ‚<øXGé)I©5~·ó¿^YÁý¯e™4Õ¥øÿaü}•ïòwI£úy7ÑÁL"=¾1Es€ó‰}üs¼³K#^ÂòwD{¨Ïý,€öíÔ6ÄË= —ÝrJ>ÏôžËH¼Ü]ÛzVb×é³£:Ì÷F !žâ•*Zä?Jdp[´ŽÉÔE‡È·ô2Ú¹ˆ6Ò[X$>£ËÑA° .ùF˜ÕZÁ6€)àÖ¡iU‘´`óIi«{ç3þ&ÝÈcº¿ÏïYý‚¿“}¸pÞwø>Éó‡Ú[«Êä¾'¼¬ŽÅ#ö_Ážð‰ÅàÁÞ½ŠVŽ ßZS»"å%?uqhªŒ³’—úI|?.Lf‘—u-ÒOПøw%\×Ý0!xÃnßÍñâ—ZG¿“¯´3ì7 >à:^B7©,Upl;ï»*Ò½èà ¨‘ÜrÂ>Õ–üyù -ËÍæÊIä—a_¯èD°ýˆïÒ°/ŸÞï&ºO‘Ù÷ƒ‘{ƒºþ]CÈvUô3m§nÚ…Ë|nB„ënv i“S)Ýö×Ãõ91£Ÿ Ï~¶³:ÃÏÙIh±ÿ¼2H¤¼vö½Ö“É\×O×y1Ÿê/œ¹»Ü†ø·¯üDˆ8l3[ÝÝÞ—‰÷Ž»'æ2~áf%¹.ò!ü•Š9§?"’Šj 7¼±y³ <3ðÝßÝõ¤ˆDÖ(þ^¦¡øéepëÖÜúO§o‘ßW"õ|Þ?Š­2ºû!o ójòá!~®‘ç‰öé°‚]TÊÙ‡þîÁ—šœÉË[ XPi¸@3ë }@œ¡¢øDÒPŸG=ÑOìxM®ÏÌÞßð]7ø~{©lÝü›‰X{™`‡¯õßÁ #“é]Ÿ»¹xùï=?\øØÄXÐ!ßóº„} ®oýlšu³|ö=UQEm ±BpW°”7²K¿E‚;~}êïa>¢ƒëþpÝw@poÎ’ãvóÎp"È\oࣰŸ¤ äã@‹·Èäg&:N˜˜wÓºÀƒ~°`¸pXÀ;ýƺkÇPPå 󕔨,]"G¹#ÈwQ{ÿ/ƒf®ïeˆö'âC@ˆ¾&xîï|ÝMÔ»ÊèªÖ„ïÝýƒìùò*ß´ƒÚ0!µÐM2c «Šï—±Úè¦(Yp$ÑÐÜ ôJG.n%nbá3*×g¾ÿãKuŠna¿±þŽÞ žß½&¸É73‘k:èݾ?Fl¢=†5Ó–ÄÍ>¼à±Í÷ŒÎ†µ_ø;eÝ”„Ô0 \V„G^ë–ëÇÀœRCòc³â t ²TØË;âvƒïR;žF\g„k¼2 ÄŸGLüàïz<ƒ¼%ã½Áη´'øð Ô|ãï¡ÚN€óE2W»’AFwüÄ'OND|jé,_€ûß»+¾Ic,ïCÅšÞRÃÞ\Ë)HÚoŸ‰äc‰úS`ý$ßá»<îõ½!Õ¤vgÖã5Н›=ð=cÏúÙ9y_m+ïº!!÷—ÔA¹­ÑĸN í#Ûä”åßÀ5—¿Ýœ“ľ»¦w¤Çþ9Xô;Ï+ó|vÁ£÷óÎBt´…p:8€Ìo|ϬgxÀ<ÈÅë„¶ÙwÎwQ‘ž³øþkcð€>;’šÿŒÂòI°HÐj;ñ>N'k'­ »m‚Ç»Jî2QÝBòú·ä‰ÝZÏßû?#Þ »Øv D´+ÈúHÃÚ)ßOh1±²½MÄ#^’U/þÒ zÿe]Oˆ€ÊŸ‹ÇXáÚ>ÇÏßóë°ò °¾´6Ö®D¿Ã±ùì/$_&ð{œ¿2ÄwÀ¿¢®«ícâe3Õƒ›t cŽ1Ç0ç!í@ÆK>®=Ø*¼}Ú Z9 .#UOa1$ÜäÙÍX<ÛumìG•ÛI³k[ž­Çª!ØWl,Ö\ž òµÇºsfÀŸŽ’,E'ÝÐÎ ¯C5w4¾à&ãœÁkj+© _ú~èÁÛ°  ¢U8»(ܧ¤TcŸvb÷ÈuÛ»?‰×÷¥j þ­ñ“N¶Â;¦ñXƒõÏ#¥;>Áæ!Í5ô¶ Ä܇£—Ãhç ²’øxëï’oEÌ„±b  kHP•|3 4²mR1`òW…ý´’qìçXðé"6;ˆ|ûØóHà@mNý70ÿô)õÁ,êæ:f‚õ~F]” ¹ªó—›z8Ž­×ù,p“­ÊóF0”Ê醱‹èæ¹–³¾6ÚFØ,já,©. ý6Ër¸Üxðýc‹ s;ŽGoÄO!õgøô|ø0°’™ŒüíøÝÕwsÓMï _s³_ùû=âÃ#>仢›ë¥œÄ†io¾ÿ®f´˜T€ »Ècî®Á\æfd½¦þ Ô ÄÇîë‰à×`ü1üÿùÛM÷ AâòZÙA?×ÁM¥cððŸ±ð@|}Ûág3ð7´4 ”¸Œ¥ÝñðXH*¶ Òî`Ëa?1'ÕOAr€ë uESØ}À+…fS”B²D°ë¶ŠXíe»þn+A€Ž ž;¢óÔvý߯ƒòÓÈuÉ 7Xv®ƒ­eûóú%ú{IÍÕ2Àûb ç8,?î4¯ÚÏ·à{žùxnR^Røp?í0ùwQû$ÔÏñÞdh×ër¸¿ ûölÏu8ï†e]g‡HìsÃ||Ühÿþ ÚŒúÃw€rO`CSý™²+d‡¸æ:Hÿ>G5„wÞ@þž`73:=Ñî“ÿ€Ä‘òT+Ág ƒö£ˆ×Ès éÝ4§Ÿ‘ϧú®#´[ôg߯ñ»+X6•­' › Ü>ßûŸ%ž‚}wˆ…|ö;­ˆMDw®óq,;GdÜÁGÜ13Ã[§ÞwLRHe¢¹µ(ض ti ß&|»ò¶Bn7·7v‹ùFÃðÚHØÒûÀx$éï{BMEæúXò] wÔ×( Ûh¶þX9­É©}2€øÕJÆïØ0€øíXŒXC4»s–®'ë9¼t3¶Ú„Ÿ÷‚ÿTeßGzi†Ã4¢Ä¢ ñéúäÇA¼ëz{þȳ¶~VLA͆/l%{ê .ÃᇭaÑîlª›¬ùˆkQmzŽ jgÇ(½HcI/ód*øî&uÍ'ò7á­Ã©{š`Ó¥ì{ dï†gàñ•t,2f@ÖþZ‚÷êxëVßuÂ? ¯þ|¦ßÑRŸH:ü£·6╾¾òäwäö¥°> Æeý6 òwÏÈ?5ðÙmDý5ßée-¶îó9ÅþÎbï«#aktÑV<Écj4­Mnȯ94!zª¨ùˆ‹ |&¬ÆP‡øµ‰û)>v\ÏÜ`âaß7Üw½ïÏ­½Ðêøþ#•*ÿ$‰--$Œïtp” µÕ÷ok„ÕÆ )~zECPñö½þîDúDÈÛZóíø] O(©Ÿ“å3ëé@¬ãÕøÃ tÒŒªàšæ€Oá»¶Á"î¨cKg5º}k=\ÿ‡ÿU䄌¹w’³ ß(|w–¿î¥1¯ºI ÑÌhp}"Q>»¿‘’Dy{¬<’j` Pi›hN¦ktØÔwÑs½’ƒ‰+‰ýxÀEgqì<ÑõFEÓ> òÒŸù'Ÿ“­Ýìçw¾ÛoÐÜMAF\Ì'²Ý‘ÿ`uóŠúcBÅ4s þ±<~ tŸ‰ ÿiâ+ç©êކ-+æ¡æfdd¶£àèß ç©ž÷Ñh:ÉPù] XTÚI6,2žì—Êv³ÿÁ`a8Ïê¯À}†¿gÑË|Pr”…Úxz-^½ á­"LÖõÀ¬§)‰N<ëˆ,‡ïìôǦÂëjlÍןà»Ä-×¹ºÑsîvšHRXþ†ÔÅ¥û¼½[‹”m}‡ÿ`ìvP¼¥¦Ýàc£(_Ÿß`†™àô©ì1V¯§åÈßè·úœÒ­B{ñ˜˜6^Ëú{g×€žÃø¾¥ÈîúJÑ/‰¿À®Ž’ÆM&BWâ·ñõA쟛çùˆ}¼â/ä騭 Ï× O]$¬B>Ç ZzKhAö+¾\ U‚¤¶Hf‰Á“üÑgl;€~iš€Ÿ;-ÑðÁTȸ“Xˆ¤Ë±v, &›o`¿gïÓ±Ùxöz>2€-—%ó÷¥–Éd,EÐ$*Ý3DF˜A" '(8t ö/öƒïðžDxÉ¢Þ!Èlp#y µV°ô"ϤˆºT{®om»ßïóéígÆž@ÒÓ~¦\â›®kZ? Û+¸&¸3ªûCÅuá³%µ´ñ3Wùž¯óüÜóËÄè9xê-¤YCf˜–$ã¹ã;ëU­rdñü ¿œ~¢¹›e¹^s í¸+‡ù RWÈ#‰|ü"¶žï¸ˆWÍæ:gô—’žµ[IG?áèñ: [½fßæ#gB‹bOÙ×­àÖz,¶ éÃÙ|ù ñü }BŽü”J6¬¿?ä?ú÷¿ÜXζ@9×ùñ1š«n®»þQž­õUö­hÑýzþ„ïcµ¹`ày˜Þ}MmwÈÕ£y¾͸٧õ•^b¿{bYµ«0¹Øf–žxÅO;ŒÅ_+ñž·hÊyÁ:pï*ßó\«X$›Àëùm3™ÿ->q­ÔÖÐàý"ÏñÂŒXí1rÁB‘ì:ØTÇrÛ%lÿú‚¹*î-Ö\é;^»{=ŒhŽÈVMj{±l ‹t³1îé9PÎûËN½ïºÅ=¡ÚÝMäOV×Y+®•¶H:¦¥Üô“*>´p`ô98[›'ƒµ^Â÷Ý190ÀM á]l¸žßsñ’©dɹ2AØ›ñÜ_AòXÝ™€=lsMÅX,KfIù<9ˆWlDC7à}CÍa‡¤œ”Àž;Õõ*ݧYQ«m‹ñùDìéiô±çó}_çÉ>JæÂF"ñ?÷ïþâz¥®ôÓ­öùë"Žàåq@¾ô–Ö_ñ`vml!–ÚÀ°ƒ©ãK£@ þ§EëËq5ÙLöï(¬¾ ~ð+˜pï?­ÂØ!Â@mv»(ïM¦tÇ<åÇM¹=Æowž×ÍF^…—¬õSnbY|+„í›)3)ÜYîvÚw¬éå` ÿÓz"¥¤Œ8+·õs]Ú×ÄÂ^?Ëå<]êíà1†ì¾ø¢]aK‘ö>yó.®¸ô_Û[†Ÿ,& ¢€÷±©SX[KMÍŸšœYÑ–[W˜ßk]$_J¤PÒ*¶¶¡ˆ¹NÎûͯZíçZ»s½û|GO×óGmÎï°ÔsÃÕÕš¯\÷³øé³ÉÿÛÑÖP¢ãïU”#&Yð¾T¼®%mU-ŽHÉJäϧ§©jJa?ñØåf=-`ßû³¼ø3Â#‘¸ èïft¢êâë{7Ñú„?nꦞ C{`½ø]ÚW8Ú=!Šâ÷Ž}fƒ©š Û™)ÅC‰üéõ78ày#u°ø:d9ÊžžP7÷ÅáÖ ¦òýÞOHwÇsݘSègQ²—-Æá®v<öõ¥Rt×C¾Õèä:‡üIì6úœD½\ÕúÙ+i¥dR ÅþóʯOås©/'$ˆÊÎÇèèÏbý~”f:ŒÇ᪠k8vn©?ã nVúyïß×z ¯ô¥ š†ãîŒ×vðá-¾Ö²XY+E6H€/$²°,²7Ðbÿy×»ÒPZÊj¼T7nZ±›{´«ŽÂ—{ûû†býa~ú«›çì®ë>î¯xÌm;À‹!<†ú¹@®^l‹w¬A{ÛðŒ»Ä~P°²•1wí¢a”fÛûÏ+·¾‘Ü2Hòhl侃 ÷Q¹lÔAÔ=ƒñô©þúŸHÝWk¿[£íêîðY?ŒƒM]…7I^/ âázÇæs×<³ŠE”‚˜Ô²Y]òA 왟¿YÈQËF¢?³Ý÷G(ûy„ëÖ¹'3á3=ÐF/´Ñ™x˜H–å+ÂXæràZÓ]38ÛÏI~ü™\èfGºûÆ:y©‚Ü}a5àBîÊàbr9ÐRÿõÒ<’l}B›³ão÷öH܇g3´µŸ~Ò ûûãÓ@ÄWäø8äò ª›¨ü>‰ß¯C[ƒx˜ì»&¯ôçU/‚¥¨"ÙòÿWTÊõÅB ú»uGrÉ­eË`:}mpÝGñ{ uÀ4p¯Úè€?ô#²Ý¤‹C°Â¨æº=_§ž{K\‡­W²¥;WÚ›ŸY À5ÁE¢é.,ñˆ²ÉöaЪæ¿DÓ4RM›™Có=DÿMpÛ]Ç}vµo|ÞÍÀÈcñàæû®ÂçÃYtjKD@bÛéï›Ú޾Ü}‚ÁÚ í¹9·ý¬Ï‹|ã2A~ê¡–I¿´È·ÊË.q à^=µâYBXð|n=„øïF.Q!D³óäþ<+DnW2Ú9MË¿àç¤M jÜìãÙ à5}ªéA7-õP;»lyB‘ïÿ¾ZH^i†=‚£”£¢X*XZXÛ„üSh þ¼=Œå_µO¬º‰lo5#¨Vt‹Ï#¬åókü5£nÂõ,r€;Ç­VÝÆÛBÛf»íg‹T(ÀSïÿѪ$_Èò{þ5ÚÌ2#¿»~kæfÀÌõW€/ 7àÑ™ÑÏGÈM°äöŽœ?8†l‡žów~9 ¬âµ'Í*YGÛ`1ƒjÝÕ26ÐâþƒURÜD¾7rÄW-îx°»–é ºnçî¾.7Ýà58ö+Ü (žÜ:c÷jT‹ßÂîúY+ð" Zq3S_÷î¡Ô§ÑÇÿbï-À­¼’4ܪڸOpww n‚{p„4îîNp×àînAÁÝÝ=È}×êž¹Ýs{fzä¹ûdž¬óŽí½Ùe_}õÿkU%fŠY+Šn[JO™laÿÁrç ¾”m2Ο\xæÏÿ\®шƒB BU Ç»à#:v/ný­5³‘HÕ¿œÐ‡ÈxœŽdóرÖË~® œLˆžÂk¶Û6¥d”Ÿe2¿E·Xîù*"žÝ |‹ÿü: M“É ŸmODo´n [$²{jË¿MÈÏÝáxߣ¹óhÒí­L ÿs³b¾³=Ò"Øbþ+¥Ô§ÊD}VŠh¾®·©W¿ðþý¹Õ÷çøcÇš„j&Œ®‡mµº @W;jå¬-^=$ÃÕ°YøFh;Ìk¤ã·¯4¶•´Þ¶.DÜóø÷W*©.‘ÈvJ^û\Kdßò¾³Û| (•ñ]0 Ö—Žx`Óì˜þL×Ú k„Gä¶BA¿ãÿŸ­ìRDzȯ‡wœnWÐÊZ=޵3ƒâ- VýË·¸¶ÝBvvªÙl»e§Ìíné6vG Ÿöá1™Àh^#»íœúôÿÏ&™È†õ¥ 6+‰µÃcùõ¶ Áç“ɉ‰üŠÄDE‹Høù[â%×l™E5;mˆó ù¿„KdàU~&">³0¶9ØÂýS+¿” <–½pàÒÖI‡ÃÚ×k-% VÍŽ/µeàýX{`ƒY‘ô;‹ƒ®rû™·•í'[bÛ°úÛk y(ö­6 ¶`ÿôú\rKGùšü÷•Åä Ì ì œ#ÚóÁ`› ‹Ö×Ú‹°À(«¸N.ü Çì1R¯²¨ò“Æ2!ÿP´2Q·[¨ÿÒú^jËIY (jmEà»PO•Wmª­Áæ <±c ÜixOM-€>*[ut³ZØ<3=<{·yþ\&Ä1þÿ|õò‹ ‘–nóDk¨ˆ˜Mv;M-PZE÷Haé-_ø+?n¶Ù§¶‘š <°”ö:2UöHMø”Þ­òROŠ"a##Meü'n¯…ô¤t’ª D!ù¼,(½ä¹$€ëÐrX®JRí쟙MЇ˜»\ÿýÕY2HRxk;¼¡‹t—ºð„Ä’\²R5•”š’V×”œÑŠ¿Ô’xLnô;ù:Øoým5¿’b䯢xEi´ñ9òÿËÊ„äò½ ©ÂRM*ó›?ןëÏõçúsý¹þ\ÿ×VJÉÈKîÏ h)É´†Î‘撇ܟ\2ûíý¯®ü’ Y]OèpÞ&pœÏ}Ï´«’IKjͬÓ5ŠuÑ:ª`$.ú¿± y†ßMÎË5*ÂnÈvþ×ë×é~õnge`£ºë‰-¯µÑ/aÁYƒ~ºã¾jHøýª¸òzKOhͮ祺hK5TÕJÛFŽÚXw+`Uì[þmbÓíΧò©FðG^¤³´‘²Wßë]kïµ¥±qÚ^Ë]jþwZ©cZ9kfõíKËâç_¦¶Æ®'‚¶2Aìoð?]ßHO¹"õu?±ýJ/ê=Ý­™­£Ó¢úÝL´šÞn©ØÍj¬ºIŒšPý¿ÐìÖKCkvôr:=þó+'1>T>ÓÙúD#Úy<+Òß×¼¶_ËÚn£nûôGkJÌ»;~W4¿=Ñðö=Zˆey¬§%5±tš(lqþ‹«28ß]ÞÉpßýí¥žÕãºÐwHI…Œ¹lžŽñ«YX|ý >ŠY<ïÇ4·U¶VVÆ"â ñ-ƒŸy[ƒŠ¹P°Eú/¬Èá©åœ¬ÕP–þªw4`ððØÕõãùl›†¶”ö©B @‚;êNö—´ªd‚‚×"3Ÿóü<KË¢!õ®ß¿]_È×ÒP~•cڹ›Úvâÿ¹>ðç¢ÞèQüa´Æ·_´‡&ÿ qB«‡×?× ø@"äOb¡ìwþZž¿5µŽW!¯ëñ?Z™¥ª¬—ÜÏwî€d›5¬=ÔX÷¡?!Íæh]¯]õºFÆË³`ûDÀïhæïŒ{Õß#Íg¥È _ØjCô{)ù¸&ô¥²XÒøPïô¦¾ÖH~Îwƒw}võ’Oãb-‘ó¶ã{ÇþåŒAð{xQ1òB ²C}ý*„w¿w«~ÚVJ,fý­~bou•º½ðïÔ`¸á{¤$¶œ–Ö® ‹pxHbä½nà÷¯}×ø‹~fH4|¿hXÆ¢Àzi-§¥Bp÷{·jƒ|d…DÔò:Ùw2¾BÖ[¯ëð×íí¡.Öq:×ïqýîFh&Ðï®>ÖH¾³É5ß7ø…~ÄO^‚ ©ÐR!¿C&¹r€ÿÌã¿·òJ)™%áõ)ò÷Òåz)O íì MC?Ã.ú=íÇðóÅDÅbäºF)CGˆ’–pQ?óoݾg·›(¼­Ò³ÒI¾ ¡™À]¿î$©4¥¶Õ :‹Ažýø»;ÉtQÝ„£H¼]÷é)¿ê¼ݽp×Ù0†÷]^h‹FÎÜ f /–á£:¨iéí¡<—áÔP!áÜã߯"’H’Êa‰§åt–=ƒŸŸÑ¤¶DÇë¤|åû¹=üót>ˆà:?‡œ!'F±zÈw܃üàoüާËZÔQ 4´V˜Ç<óÝCf’_‹HÚ` üoVOeù\“ê¼=,ç'-Ó¸ý[@Ä!:ÌÕAèÄõ7¸¬ÝÈal—ºyÇÐÉz¼&©=£ZÚÅÏ ìk~ªÎ¿Cõ©‚œÒí2€8Klÿneãý¤†ïç×X Ø9cÛ±µ»Ë9ë;<;†ÝøŽ§n*Æ^pþwí©eUÿ#ßõÛˆïªfµ¨Ù<*¡:Ö M¤×†’"T„i‘?¥L–³•¸}w»DÄÏDâ¡Ô·#ÈtKüd¯]d»‹øÅNPq¸YÛQì6¿{ÏÏ[%#Ú;È##ƒpi©€_ÁÝÌ8ö9²·»3l¬e·AþzA0{ÿþ¿ò§sÑﺷà¹F~^Ž„£Éôm°ýî0a¿þ ðüe¾ ¦;ëÞ¯/kQÍíkÎBõ“R£âë›ñŒ¨–ïWs3t\ŸãxC~+h߸n‡ÖÎÊ£‘µxÀFk©­ƒ-¾¤"úëÊKMk ¨ßã™ëΰ/ÿI¿!¢û!¿ë‹¶‚L¿–€ZK˽Œ_D¶<–RS §Å æ3ð.!OTÛî™Ã-^a= * ŸhHFÖ³äÂßÉI‚,J¸èy¢É©Rób©Œ|žÀ¾nÞm+"`>½ÉCÛfð`Ù¡R€÷]ó} N!ýb~±fÀÚ«ýéÿêNϸ“áA[É”»ñ‹#ÄÇ-MMEœ’ÿ£%m(úÏTùsJy9òÝö»§žÍÉ»[‹kCmž¢š´«É?á£g¹à1:¬¨ˆÁç;j=ì¾ËO€Nì‡A›@Ñ“þÜô2u“¡Þðøúdÿ*ü™,µM´púc;`’BŸø¾6o±Þ2ön0ßùSÐoì&ã¹n ¨qÁæQÌ®Ÿó¢³Ôvdx…fòÚØÍ- ‚&;©-¿‰ëÑ ¾êºüG°æº8}ÀÏïkc"ÿgM“?¡nÆé>¸áR°¢),¹Š¹ÉfnRÖýÂr[+sÕÒG¬ÿ ÎËk<öýtâ=#<^JîOоÖðó}LÔžˆÁ«¦¡"®E ²ÈÔÅ×Á€ÂTB©ìeç‚/†ùß“wÈó’~¢Õ;>Ÿ Å[bvŒ?Çï&­Æ‹Wá ®3ŒYi~ÿˆ7˜È¹@Vè>,4¹ƒe¯øÉHAÇü4¹N)ï4%1_ž˜É‰^)ð¹ô6B¿ šü›É¹¤“ŸÚè:¶S7Áöïÿ¸ïáÔ‹Ȱ˜¸wÝO\§÷Zú9HÂŽ‘Õz¡»ã˜›zy_+óï ¢¾ñÐ o.^~@þ¤š—|°_H¡™5Òv„/5ñ1?ÝsåU¼Òz8Â|uWBÝ5×_wˆ¹Œ<ã8òtù2¨ “ø’Cû»=“ýD“6Dó4o³bæºv_æçeh£/Þ1™†à•ð‚Xúk|ÆÍöû4Å;šSévä/ݺÑpŒW:@®‚>bšË„‰–NDÂ_UmוR%¨÷‚ÏK " ˜½në*¼ÁȱÖW¶ížê®…lò=ÍF!oSøPl_ „tnúã þÞÃw K¯µÁÇAhç+ý’W;Êkî× °ü~¼žÛ-ðÇD7aè:šÝ£gñ¾`ž¿+éäS‰ˆ/nõïVãÍËðËSš“|uw¹Í_í;ægÞÐÜH_kg%z#…™»ïÿïø–ß¤Ž¬¬uøk$æùÿ=äžV4EŸ‰4w_ù6|ÐÍü %‚(½[9%™Ü‹d€'¼£­þîîKä=¤±m/ìÎyøv,v{ÓHšCK¢žÈ±È÷x¬IUÖÆ€MÑIþžJj)0ÒMFºÄ+¹Ý0O¨ž¢Kwå`±…š*13è=`+IJ™'|ÿß}d¶•Hz¼K@T»þ«ùé0Hæ:š·ÔœšK #¥ëô}Ê©Œ ²ª0y×!­-Y ËBOíþÏÞçg‹}bn/Ys“ÂOø®y¿£Ó'xÁðà®’\zÉHßÛúHý«Ÿö•ÏÒh"߯uÁq3ÎÖÂi[k9"¿±]RGúZ95Ý'æîîB_nPY¼£2ìh˜²êè¶v{a?±Oí68ò rŸRw$`g4ø½0¦K/#x_®ßïi¼Øÿû5Ç'“×_¿ïB~ϬÅñúº¸âûX¿ÁK#ÑxOu~_‘è¯Å¿k}ÿT×9ÕíNt$þkϬ+àÞSêÅä–[ƒ{íß­mRHöÊ"|Ö>é÷xºyÕÑ­'¾zð#¿ Ìõÿ e°¿+®Ëøyä?¬sáÁ^Ñ´›‘óX¨+>p޾|~âÑí 6<ŒVÖó»ýDój4q‘\÷58þ©UÃ'µ!Vü+hm&‘ñúYŒ…÷’I®’ù^QCÄ#Ö“Y«a™l?½ôᮓZJþ`‹ÏÚ å0>9¸Ü_ç|ì'˜Fƒ± ¶¢AÈ¿[Ïb·{0„ÉÉâ"û¤ùŠj66Ò¥§¶ßH”áë±ð°Äíû¨©Ét‡‰•$Vî?@úLj°`Ï>úË:.ÄY÷¼¿GñÝîƒSˆÓ€í³Æc÷=d´ëTºS@‰×üÞMðÉ€m#¡3×éö¥º.áñ×ùþ&¯Ÿ%Ã`§4 ¥í">"ãY®Gzð®|þíÚ. Ò¿G¦;`Öï ö¯D®‹ÔƒÈä®üÍC÷xÏçau®ë÷+?á~ e®[ØJØQ${ÆßGù©ïçð‚í¾¹k‚+üN¨«XRßAÎ+ÜëØu#r!J>1Ïøûdüþšéï¦&ÀþyðõÏì#Þàî–¦ÂR\—RÁݯD:[ŠIz*× T9½ÀºF°y7«c^qÁ÷L8‹ŽD¢0vØ^N ·\­axD 2üNßñ:`Küä÷Ãü{œgIJ"ö9ÒDz`kd8Oj¥©Ô€ç¤m°E÷+¶®•LòVZ‘)ài»‰ü”䪥~~ÕxÜN2ßD?×o>òX€©r{ãéuª #Êâ%;‘ø‘² Ùï‚&Ïð¤—Õê[vsÀSù»@N am°æ—QÁݯ”zOÊÉOÒ©³{Üφ½îaÁp?wöÉÝÍ^â»:»nñAþCÔ;“°äaê„•òq>CÝl“x<óšÚGœ»^XàFéÈq@‹™,ž¿G¿ ¾ Ú¹N¶ ù~ UMo2âþ€.z¡•= ýy­6Àõy~&J|d9òO;ï¡Ç´`~8Ëh®cô[Mìï}e¦fº*!§ba°¸„äQ÷N%ûmôW¼—aõÙø}?ßÏ~¤Ÿ‹9»wƒ¿Mùo¬Lîßô»(fûGO$;t n’;r"ë#ÍoMÉ—Ñp)0 öO¯‚-ö¿®×2NÊÀƒbš«pŽ÷nâhßõ~òŒÔöÚ9áý]>× ÚíjlnÏDT»†7y ƒ1DÂ8´° lSp=«e±˜ÈŸŽA¶s•ò_x„‚ùèò ^Ýž"»»WìŸi[ìS¼?¤Lú˪-KÄMåKnNòÌdëXd>W©/ð'Afò1•¯‹‰‹ý°™ÃßSÀèbÛ²âçÄÁ)Rv¡Ÿ3]Îã™{ýu ÐVŸ/@LJF|­«ƒ-îÿgå’BF‹’¿ŸPŸíÅŽ[a}ñm¯¯þ'æ‘ïæ·«°d.XM|ûÇ-b5¼,z¸B­p üܧ®Ø“Ú®†I܇ ²<êòÀ*˯{‚-î?X®‡c#ÉïwêÞÓ¤ðüØÈ´-,ög?î!÷N¤Û‹VêÁé2QÏÅ…ÓUÏÜ~ÿÐDC:<ý´¿êÈkj0%¼?¼g“ͲµvÊ~ׯ24ØÂþƒ•C Hei!¿j8Zsó¯wêIö-%þÚÞ#—»ÍzÂfh?rû×¾7zQ$&Ä ²=ï®lƒÁ·ï3¹UñûCØ[jµ­XW)%Ù$¥TS‡þ1@¿ìvŸ?®©ˆY7Ç.¿¹ª>ªå¤²«¢U´®¯dÛÁƒüCÈýŸ›»†æö9x´c’Ÿ‚t":(,n7¤¦T¶¨ÿΪ"±%¯|;š‘XmdéÛVRgÂΙí{¿w{7?Çþ÷àB-¬ ¶ë¶Îïo< ¹ØII>(I¼7I¯ku[¤ûmuN´ÐXBrìrààwðÁ/u Ò7!šÑ>Až­.þÂßñªhcí„åÓfÛn ꡇE6^WÄOìd&Þ¿¶Ñ|÷»– ̵³6ÀŸˆ(ô;¾ÿñÊ,¹Éýå”n g=¿£ÓÓl(> vŒ?£w©ìºÙòø8Ûlì$úôƒ]@?y--8?ÆZo«L†ÈDõ7ÌšY>˧ B|' Œ’/¸. í'ªºûXßðå‘Ö–ì•Ö\¯‡ Ã ,o¶×r$0ÿ¨cÕÌÍùx¢Ÿç+mƒMók’%*á Cð^!^z·ŠK2©./¥UKQëW³yäùDõW6 Ûg²öHxÝJžXÎÀIP 9YÀu½ªcnNL<¬¿Ä3‰ƒvÚòZSý!Ø¢ý“+£Ä•²[K#k¤‚­DÃm;ºØe[Éú‹l®Ý¶'vÈŽ‘ë%Ps9¾Ü(*ˆ1 <‰Ö¶Úâྮ”ÁëŸ^%%;™ ¤Ö°—V4 ðÖV é[`ìšU„ŒE+-z`¡]µîöQ¿áç”Ô6Gì©]âqûí ÜBÍðš0úÇêXAŠÉRéêöíX´ÀÚ@öPÛ‡ñù~DzE[F<'Äï“ÂØ ü{^0¼W¨e¥m9þ±ÓzŠæYnƒ [ ÿÆÊJUÔ–ÚpµìÓ#v4P?pÃBòŽ‚÷íÐG2|l8r#ûŽXø.P °ÒæãóÉün—ešO¿¢j,­ƒ-Êse¯ËJEi%㥜.ñsÁ«nfZ c…5§.’º²KFh2êš“ C|£ÑšÔRC¥œª#Œï½rIzÉOD|ºÈJ¹#Çe‹,”ÒYÊK4°P’èZé-«d‚•©2ôì ›*!!cÆûÿ|¥¢>L/9%å‘"ÔŠ•¥!²á÷p”•f|#éxTirglò'ýü¹þ\®?ןëÏõçúgVNIá§¹•^ró]'»ü’DzÈ{¹FÞ¯(Ea™ÿà}ÏÿíÊL¥œ§´ŸŽ˜ ÓK2é.´ü¾³ÞÖC:B[i4 «ÍÑQÙ?pßó¿_9át5¥ÔÖ®ZEhy!•dx)©©m'ÛX[G%”Ú^¨ëvÜÜâÚqùMªÁþÿˆÏÿ~U€Ã·¦<*kUì‹cYu>M¦Ëío•lº}ã;€w§ÌÌG3ªßwúƒ>¡ðãàïpÿŸ,×½~ˆL“ ²[·h]‹g -?ŸûEõ¸nàjŸ[;j¾%ÖÙšX«n)­¼²xZU¡¿Ïƒ-Ä{e$Ö÷Ijø+šÇ®h5dkEl€Í×j’ZF[6êüK›¶jÖ]¤±6VÆNèU] Õ´.XPoùãMCÉ,i¨óHi=®-¯Å´ô–ÎiL‹êw³^[RÉöjX«aõ”ïØÒ£¡n–Ì2X?« ¬ÖAÚK üá°0—d˜R_š#UT‹l·ô¡Æ±zK/èÏú©=×£:_sZ$Ëe¹ý®+úT« ñ·ÖتÚW–HdF|”ÒR.èç¼þ++…ïÏÚTzijK‹MoëyÝ¡×t¿>Öäö»†²TȬö@3XKj‘¶˜ÝÐß5˜¨¨kUð’\xBt e)´Üˆ”‘lxÿy™+%, Þ~Ig“ÙÝiÆzYcá ®GD%l¿S‹€÷®ûIv²^ ¾»¢±-´•#+œÇ_ /Ü.™ÏÐ@]ù2Ø‚ý“+%¼&¹˜ÎÀçOé1pß»_ÛôºïôýX…ïÄ´ÄÆcý ±:«Ã¿yüïšÒ’[ 2åý ´,>ÊZ6ýñ1#ƒ¤•¬x<í¢®«±ëp=CgúÀsüN¦Ø{œžÖWhá&2w¿77x—Ï¿¨gˆ’°v_ßj‹O |e9ɇM­¸6üÈŸÎÖZšÉ$]©{¥áìßѲMOø/Ëõ¤ÆÿÃõt’¦! XVò~—GŸU7!ä#º{­9, +f±‰“îzš× Ùw«bÿ.`uIMj×ô¹&°p ÀV0“nFú‹ºD×ûsô |p¼ й3/`‘È{b‡u-{äµÑbX +*`§ô‘L†‡Ü«áÙ¥‘Ô#çUÕgHž äÎ~òý°—ñù+ßÍ æëk=Ç£\7è³äþDÄ{br`T¤ÝNÎлÄÁSu'ÜÙ¸¼ b5[¥[¤/µC` úWrpo´Ì—`ØB¿oÉuvw}¬û-›ÐÀ$¡t5ñ4ØÎ_ÝI¹J<ÒíýŠ@VÜ~ÜÙÿ[ßÏkAÀÖÄGy|¤Žî£*ª"Î=þýú’¸O"-àûîä?ãà)ö¹gÁuö¡×ÿ}-ÙÀuñX¢KùØâ;B»~ßî쬛˜qQwóý ¿Cô=ü¡²ÿd?Zm< MÕœz‘ŠªZˆêþîV©(ýåsMnâUoì> ûÏÓ~~úŘP?üÿ¾qÑìn×çbðbzI ŠäÀó¿¡h€–À ¿³×šVš„¨ùˆÉ%=Ø—Ukh_$œÈùKu.‘°û/ÒáÚTèô3,Ó‰XúÛ .Ýà„—üéàŸ}ç§Aºí-廃 ƒ;÷›Û~°áöµ5²­¶ØzÚ +¢é%^°…þוErH*‰ qû7ì¿ÉŸÑw=ßg`Ë-:Òwê§µðüá|·šÇ¸>°@ùo¤"|§¼ÐõÍÁs7 ÿ´7‡ï¯ù^*±ÀÁ/‘~ ³yÖΖ‘ ¹ïïß®ÌøMCµþ€œþÞ NÐþØw>þîN>´Õš¾¯G톖ÎéFìý”°ÚÈŽú³bëÐÏ\ßïÃíÿœ…ü'‰‘‡ðˆZßÖØF›€÷×±…vÓêh·`‹ýו ¾SI.Ê`dJc®×ùs¤Xˆ ;"Ãü¾#~ßXËi+dÿV›é`²þ[ÿå´ƒœ•ä‰!èì„ïwåXÿ+fóÑáePÒuýKö¶Ù6 œgøn Ž”øÁݯ"T<™¥0>üÄ csó«æb÷6Äs}m‚ÇÕÎ|´×ïµ9òw&;ÌЗ0€N Ai>oC`<ã±¹Ûíý Ÿ_OƸ†frà ³[Qëk“m0Yp ³Žv' ˜\Kg-E¾›GÄ0wšq¤öDêAXÿkäv“z¢‹oõm‰•‡áëÉ1½¥oOñ•õÄÌ\¼ ‰ïlyÜJý”…PÑïˆl‡üÙÉ­ìÕÀ)™"&A%‘R–ŠïŒýhµä‡´]±f;,Þ ©¶úq]ÐÅÏ Û¾»Ì¨ÿ_À”³Øß#e˜9ùãÂS9Ì$+< ¼× ^RûÌòS-F±z6‚lpÖzh—` /núIò~/*™kT|aí9ѽ€ˆŸÎ5Ñ:ù _Kñ„šÄˆëæºâ_Â#bSï¿ÂØoøÊ1rç`xÁ%Íe©©BÙf²§ëŸ½ u[ï o@ûü}€Í… Ö¤AÏy¤€ ·có#òå_×ýwNÕF ß04ãvÏÖÖ|ÌB+s‰þåü\Ïßâ;æ¼F_}É€ûˆŒó|}‹Ì/¨}Ž'æóŒÝøÆB´êæÄÞ$"Þj^«‰ä¶®°®à^K þ=•(ö”J?²ì‘F²{HíÎ|V!Ö§ú~?#Á Üþ¯Gñ‚Ÿ‰gÄf| )µmE¹Wøsp)Ì,>¨ßXŽõösS¶Â*·ÑüI€è|ö·\Z,È3¢ã":°ü7j·CØq¼ _ˆìõÈö“°ÿVßßb°ß ÿÂ40™æúéo…°ã|ÃõõX黾»*™-X'Ì…;¸st y…#ÈŸÉ*øi0m&^×8¨u@zêh’yÚçˆÖ È>œû Œ«¡ßÁs»ùIoëñúÎÔ]4f OtÆÛŸà3¿oë4ŠÕhÔvÏyÄdÜG ÜÇ/®Û@…¼òt4±Ÿ#XUkl :­eƒ(½øýj@?×óëïo©¯aÆa±øyuâ1¿Vwáï£ñøEؾ´†ÒÐZIÝ”ãf謼Ÿn¶^/HGøðddÜIíï·!óD·½¨–öÝţÄâXuòà ¸ÐÖÿÞµ€Ï¤$ܸ DªUx¸«N]¿~× p“×ñu9`þÐéûùSà‚µ¤f°RV„œö™cº-ÑÌz…ØÙ­¡ˆû=þüûc_î×ÄÉ}~Ö2X:KHÇ3»Q'ÐÖAôÿÔè>•¼XÞM,‰h;‘vïv=|ß…ÿºù5³©iobÙUDÈ"¤µV¶4pšFVJÛóušªgîÜ\tä|óuýä—ûkgÛ4 x˜©Û„r𛜌lØHóñÞX=ÉÉG#‹ëû¼ÂŸñ‹@à:€»NHAÀIÔ9I,¡UwwãRíã1kÉrõì$6m‹ÏTÄ£¯€Œîähr Oîá;‰Çò{𭃚]ÕAWÉü+­L°•5 w4Ñ´ p°V'¸oNYL;…o¿Ð”p3×íå ök÷&«u'vŸ‘á¯À`\ÌÍ ¹»62—ß¹Ù¿w°¸ë‰’š<¸Có,EòX~ÞÝXÑepä8Ó²yî›ÞÊ{nV}þ×›üÿ±‚&ÿPä//£±ª›ØñÊwê› ó ZïB• Üp¢›ï‚y tî»ÝÖÓkR~“Àn ÷šéöã-#М»tÂ_5SxÔN¼g)? þoR ösƒÝ=1×m¨~êA¼7>Ø3ÿÁð²X|§ïô4éÇ‚úS‰üÑZ é[’õw“½\?ø‘Èÿ½®•ØpE7~5BoâåÒ´'/œðùÿ0˜?­þæOÀÎåu£YVøpj,_Úš›±”ÎZP$·kR;hòÏ}÷wfë辯hïëÿ±xÊ·XµvîŒ\‘!`îjaw4òþß]öôîÝ™uÈùÁw <ï; Žç/‹ül…C|½Ž&óõNà|i'ÍA¦Ýø±‹ßa¼÷£Èîîç´ÄvWÀ­ ÂdÍ‹­újSm¢E‘¾7ÒwÇÎn?À#"{Y h_- 3ÛiB°á<è*Üw5Z eî>ñ"^wÏr3ÆVƒ¹]µ¹Ä¢ü»©~ˆëRó¿uvœÉ»» _+ ƒûˆ.Ncµ½Dr!M­UÉ}m¨+ãéßcë­êNýÞC?“ˆŒ†püÄP<$•Æ#7ª›ÿŒ(:\ñ i7•àd ctû&§èÈ ^?+ÉÀßS ôvßÁ°q~(½£ŸQF­ÏÀ·Fæ“Ë~Æ»º¸?–üÍßûÝÃs{ò›ªþza;Çc3¶á}%–Zÿ ßö÷Änƒ€Ÿ˜»n|^Qz‘ûx_v©Ê_¥\Šýðn7a©eÒ”÷~Òß×» "¶BúèšV«`ß^zÇ‚žï/ˆçíxÏP¤w]Ârk@“j²âN¬}ƒ¿g€YäG—'ÉË}-• û_%&ŠkÇ Ê/®ï›÷î"˜ë[t‰§ó[e"ïÿ ßp(/¯i?…ŸÐÛÎQ·Ôõs OÅì&æ.);#}4¼? Ÿ|ל‹<&&¬7í%Ÿ<³΃}ï4uÐ -ôëßU©ÓðÞÝ”ëÙd§{HÕ ~2™Ìæ®b½'.õ“\Òid4Nó€Ý}k×Ç{Q.äɹ`{/ØQbHì»;éîÐ+ È—ÝöMIí¹öwt|—z!§ Ñàßìé¦@ùcüÕ¿•øë2¼=•IذÚQbü¶œêÅEú°øvr­Nª¹I¿á©Ï!Û*¸Q0ò3}+xÌ$òýI"Èõ…¹ªm®ºÞŸnBj4‹o®“ö^üð‹¤˜´&‡P7íÆÍ§™ítà&º+ý§‰‚mhf0Ì(Ž†Ñ¨DBV?/©E1·8,õü3Xrv¡¢‘ÈC‰Ží<Ï]5zInÉDŒ¶Èð‰ëpŸÂ~/ùý>ȳÝ:.åå{üÜax\{A?Ýý\w8œ-ƒ ¹øË‰ÅdÁOˆì ÜlÍh,•LL"9Cs©ñõNӒ̸ëïU£Ûlp 7õ6¦õ@£ëÔÍÀŽj#µB8s]ÊJf2rXLl1|ϰMUÞ«a³÷0µ3dùÝ0ÚŸù˜HžÏ·ÉmYF2˜»úÓÖÚçÖ’ØH®±‰“ƒd†Í~¢ÚE^!:Q…Ì[´€]&šNñ:9à>Á÷Wœ’MxåGÞÓRßõù1øôž»üÖõ7ßì'®7Áj¾¡ºÿlÏfîšFrtÇ&RÏN¥6ªBÍ4Û÷ý^ç'é…Fòò×"Z?øÏ*n¼O*i•±(´‘>dõ1øwJìô— Nzwø²»N¨Ç@üÛÈ߆·Š¿Á_7%µ<—0 @hsS6×ôd´ÖXHææZìáûõT?¡··ý±âðÀux\F„Zþ5¿uÓNWûiJËÁÐg¼N +l™,%’Ç'Ý=‚˜v×L­ùåa°…gÅÐR—wRÒFYN2{¯ÁOÏbq7Ñbuÿ<ßÝ|6üð Ò?ÅîOü|p·n™qƒ îÁ¿]Ý'šØj[ ?&!¹"¿Ÿ}Î÷ £%q?–’ò#Ÿœ( ZÝ¥>y F» …;ýÞŽ:äë 8G=“^ KîÀÇX8Qf¸Ó"!¡•ƃܜ³>kÞ§’~ŽVÓZQžÎï‘Ïn•|—¤.väÉä©åK¼`-ñzÀßù¹£1<pûŸO sðü0£Þ { ¸Ae_Ï¿^O]ßOGß d-ñðá<ã2¯QŽ ™ ÉÃãñÍ­¸å –×ò ™­€ ¶è~E„‡—— R‚ªÞí|eg±²ÛßýÌw2ÝL/ó“;€úîdkhØü×ú½v"ÛuÕ‚zVóµ7¾_Ⱦ‡M§Zz çMlñ¤¼ê]8oe+Ãß ¯Å-'ä`°EÿëRm(íd ÀíWŒf‹ü~‡›dë·d47çg1±ßƒÊ ±°ê¶@3`ýV°üðÿêºGúƒšíµ0¾’—XNþªYìž«qøEýëö ´Á#\çÜ,hðƒ¶•P!ÀûÝŠ®$¬ñBÙJ|×ͽvûÛßç@<7Ñe þ?Xî—k¡Í‰‡ Â0¥·eƒ,åë8ªâbzDÛQéw¥fLm_ãëq±yIü?¹e¶ö6ئX7ë@\Eö „ùU3HcIjöÓž;ƒøÓýÞ壠ø)°} ÈWwåj:žß䟾ßçÑ¢ÅÑÑ t2Ÿ¼Ñ-^/À cóðžÔ`_hâàsôáÎÇ–$Jæj_‰Bä#_À'ﳉè.xö÷è`!:øOžˆ6FáÝ#‰ê¥ü<’Ǹ‰¹®pT›¯Ñ‰îðä³Ñ ÄÁ`ž·]ìÀ›2zOOãç l÷•ßO±ð®2ÐÏ­_¥¥ ˆþ÷Xä›Lü'Ìâ'·ÓÁMv×·ÝÄŸ@ÂÖØ~?œ÷­æ³Š˜‚tkx\??ÿ` wõâ1ô×âÛMxÄ?!*à;‹GÅ/Nk¹`‹ý¯«ŽÔ’2œ˜uñ¿ÇwñvÓ "¥ÓÁP,ßhï£õ´-Y`˜ŸŒÕŸ¾c*›[M®p½ÏGñØöÈ? ÄÜ…>’ .úûŠûµ4Òç±Îp€ÙØÿ§`‹ý7k´Ô–UrKóù õŸZ"jÚ×dÀ×Hº_áwŒ÷÷Çf’ ïÁdËÂäò‘]øGêúÂ^Åæø}㉄Ñ~vèQçç,™à…γŸm>Ϩ*l8!$úÝj,9$»ÔÁZ¿hRj•¬øm {AUs”hv»ã~ö1?¦»PWâûùàp)`4n²Ñ%X^l2ú'vŒJašK6p×–ø“ ð¨ KU¤?`]­™–NR&Éï:Üd’œÚǾóÏçô£†#ƒ»»ú ±êBâ÷ÿLõ§[à%9Éãîêßku­‹óœ’æØÒDPt6¸­¹9˜§õ >°ù/¡¥6ΖimilÿÍÊ)dšÜÖ­ÄfFêà˜pÜw¼÷uH<‹Õø¶Ûõ=KîÇ¢nG£Ëì1|·Û8vW?á9‡ýuÄÉTÊGý‰€»Ô¿‰y¥{ ß÷ÖÝF5EícЧ>ÿ£UTŠKY™ o-b°mZÛI¾_v§Ù¶{‰vÁìÜ\›È–J¦²½Çû³Ú[žw”¿ñ“2ñGÁÿGšŒpaRY-kþ#V ò y«UP%.Ua¹9ý´¢È»ÔOüØC<Ü€n öù+_ŸPÃ\Eºv\˃ÙÈsîÄQ²Èq2ÒÍþþŸ×~°F–Û¦ñõ£7"?Ø¢þÕCŠHa)&µ4EFwÕò²쀳|‰ÄëÑÄ+q¬.1_¤¼¦½AŒ”pÜDÁyXÎq1ƒ¯¦“Ykxðß!c°=±¼ZGê[Ôg}!q¤¦ЉVÃR#ÏWH´ÂÏ{¤ññ]ßöáõßÚßÓ¹õn6Û¡@Í÷TIA…Ë~^øVžõˆ´&ßÝEòˆ–v6N~ ¶˜ÿÁúB²Ê¢¬‹M°Ž°´{°öÓúŸÛJ\_Ó¾Dt=°/]´ÓX¾,þ@µtÑÏŽv¹þ¸¾Ô´ ]rbAòd} (d}­Ÿ gßÿv%“´2 ¸¬Ÿ2X$°p,|(UE~wž? ©¸MƦŒM=ר^¢£ý<ë,Ø·‹Ü‘Jw²†é»}¿i,E`™¶~ZAr[Äÿd•$;u”WÒξ#§gCº´ÈÒŒom–LL4°c0Ÿapáåö›í@KÀ:×!(´=+Ÿjtëm»l8~”]E³Ëd“AÝí÷Ï®R’œŠ ¹Ö¥j_o[@ƒ\D[[‰LsùMðq"ý„ß]²÷v‡ª~>ÔlgmøÎå‚öxNw²^rd[S‹¬®+àc¥‘èhàš–Ùé9ìw¸át0ü3$Üa‡`3g¬Cà¤Ý²_í<>°|‹Â7#+4µþäúªhe·eü)D›KȘwýϬ,°¡L"Z˺VNX»¥m˜ÌÛ„GO/Ú »jÛí9^ð=Ýì±-D_‰±ù6þ: ð«õ°UxD_©l¡þK«9ò”Fúʺ’zê6îÚVÛ ªÁ¯«ðýz$,Øl¡Ÿ¡£ëèâºÅEæ¡Ø¼Ý´~2xÅý#öAÿ/+w%¿æ±16¡ŽJB¢ò*nZ™@ê@¤@Ø@ä›o7ì‘% ܰ8šüµm b`;\÷=|°›&БÁ忹²’ «·äŒÄÏâzبHFKèKíHvku³@×ÀŽ@õÀ[KƒVŽšIì„|dzsó*ìUQI$ùZZI*ÝB埘>¹ž”ÂúR–ÂæGH"­®M¨~&è4*¥âUãèÉÆßŠûÍÿ/­¶¾wWr¸Ñ™ 3¤±|%¤>l!2~# ý €N²Ž:ê{ê¨"péÿkëïÏ©òÔWûíü¹þ\®?ןëÏõÿË*#àr™%'ß'¥:HDîwSSsùR£¥ž¤’ÚdÆf|–ö›ý_]9¤„t—áÒ>ÜPzQÆFî42[îHní¥=ô‚~Ô•Ú[3èGù] ‘–Á~ÓÿK+‰|ެ? ioýY›ë%Ùà§¢Õ•iòZ?±¯ý™ÞöVË~ ,jql·¾€¯“øÁ}%rø{[lÚT?h$ËaŸZzýAÞHv-­­‘vŒeµXö£·VЊXy‹n»´ÁfÉ+ ƒ-Àÿh%Àúmd²„Õ›Í*YJ;«Y¬‚¾—=’Bè ‹jÙ±ÿëa#­¯õ¶Ö6ÌzZz»®Kô;mI´¤ ¶ÿí•FŠI!I«‘>¬¡½õ÷y§ÚïÚ€¿þlݰ÷3}¨ƒ­"ºJTA =ìKKcoô–Û72æôˆùG[ùÁòâ’ ŸŽ=ã`ý/l½†¶?»sOQÑÁA4Ë"ûþÖQì¹ –}ci-›ÅÃKÂY"á ¤ChÏç´ÒÂb JvùL;‚ø3üé—£ºG¯é_æ\Ü×dÈžÓâÛ Íe%-¦õ½ BÙZ}E¼Sw"ä°°oý^§hè'§~¢úýþG+³$— 0ܺ—|Âïc¹ç÷Á_×߈w~Ãõ‰{ÁoBó}h ‹Ï—#ógë;MŠT²Âü%Ù!Ž%ECÏáPÁ?íôŸ¯DØ?£T“³Ò_7€ìGô’^Ö“ºßw>t; ÃØkhîì£;’œKo©A‰üd†Òæ&D´—*|~гú߈a©l£’¤ ¶xÿéJ R¥’õ2R/"Gb¢ÛõxwûFë$]ˆrØsm«î~ïkt’ÝR`i·¯- Q?ïÜžÑh ãâå¤>Ãw ó˜;ïSPJ[Àÿp•Àö©¤,ѸÄmj¤N°ÍÏ…xë»}\GK…lœM²Ê¶T-‚‘0-\7»l—:Èê[m.ØõF×â«üŽÎÍx¼ÛsBÓØ!ráj=‡§GçâÛ+°¡™µÖè\u§½n‚@Ã"ÖÑÏPŸ¬m%œ¸B°ý‡«”¤öÔ:14·¹ó¡ü™àþJ¢c_7añÃÄÀ9ðp½†Â¾×ÐGbbà(1rŒ™ÆîêâO‡?ÔLhæ;«n5¬Ÿµµ–MËKy)"­‚-ì?Xy¥ õZK†ûÌs½ÃyþoÔi:¸XG<ì'#N„ ¹.yáˆü3üöˆÝ"Ú6ß÷j’??”‘j¨­ ²ð¡Ú¶ÊjZM]4 ÿve÷JÉT¹(Éí²ßÅ⤻?ÂîË´›ŽÇ öƒîTà.ßéþØöðRÏø¹ù×ÍÚFœô fâjYgP±“•… £6ÏÏŸim‰ÂveEþR^gés<÷5±|__‡,Ût)uLíGöÛ CüþÆi:Ÿ¿^æ1…±¬ÓC(øß5ßùô#Ò;MM#ã[)" +10ÔæSº{Á/l‹u”Ê!j.\.Ù×jK°ßu:Û‹FZóýT$ÙŽ§láo4 ò6ž‚q%õ‘Œã·ã=gÚ„w¸îX÷øtg7"ÿ]üþèðQ]7¨¯­*™ –¦ n¬„`ð·ªäþ#Xz†?¹Û9j#mC4Їßüæñ® 1Ð×_ '|­µ´¹®¦î—2Zβkq´3Ÿ…¿Ï¥þ îwÃ÷?ßÇã7òýQpñƒŸŠÙÄZÚçV\»<ˆý]øŒò½´Ã_§c97¥c;8Ë·ÔÚ $ØEôŽÉÝ<¨ü;A3k|¬[‹j朖“)zÉZ ó?ïyo!¾´d¼Éof{káD¯5àg!š¹3QÅñÿ|nê wÚaƒ4ÂöóTì5¬ç¶~ žEÎ¥:ëv \Àð›Ù¾ûEw¾þ áð‰‘Ôö»4‹ŒV×7ý ì1 yä ڸ⫟õÈï"ÿ¯ëÎW0w <‡}i|`ºv”$A”¿´”“ëòïï,9k 2|¤jws‹_÷ï‚Ý?ê÷TEnš‹›í²F{^ƒäY,¦ÍÑî2GËPÛ> ËÇ¡úw×ÿ?jL«b¯x†›õTÝuÔ, ~9+aÉÑALkhѨ³úØOA¼˜MªK©ëûRð“{óù’¬ö–œ~…÷Þ‚ˆo+]±á%üù8šé…Ÿ‡³Ü<+ (ñšª1#>íξKs噩ü/ûŽYx½¸–ÛÒP–ÅæU¬®°¯¬¾í²Ã–#ˆó_€~ŸËý fúTÎf¡A¤–Ø\×Ú—Dípo¼ïÔºY×ÇwSí~@#É‘+³¿»—ßhaž›˜WId@„s  ›üº9àÏŠóý´r“ñ¿D;u‘¾‡u¶·– XûMþRJºHgPù¥&77Û÷,ïø¹ïXz?á'¾ $Òo޳aÁˆé_ñƒd¼ÞÔ4åôy¿œÝ×fxK,ô!¾ÀØÏrãApe¹Ðõúts¡ý±øˆhÙ-¬ÅµÉzQ‚× ñ?ZªbÑÓHý3ìn9ê ?·=ÌOyû´àÏó/ æ“ÖÿßR^Õ† ÄI)#e°;ëG|EdüÂ+¸)1SÉ3x•!|w€G»y@)ˆý\V†øOBöOÖ;ëÈ ö@%¨Áöàé®ßãDª½ñH꺙ùúð1 ÞßP› ‰ë‚>Øw}ŸàÐNðrž‘¦2MÎëPÐÜuŠ;Iž_í§õÆ zÀæ“Y$"^€4)-HX€J8Z­ƒˆÿ+x÷ƒÄ]Ç=¬‹=OYå§"÷Xü~?o#ã…·£( ¶â;×%þ$Œf¨^R·J$|牺ª×u¸ÝŒ§ 3¸IˆmñŸy7ûn®¯ìfáuð“2꺤>õ]’fû«„£xÌhßÑwʸ£n2Ê\<á–ºiØÑüyÒ3øE]7i9¨wòá½næÉBÞï2,?{§Î߆M7ãùýÈm3‘¢ž<Ÿè‡OwæëPüd†¯íó¼9<{)?OÅònF†ÃÉ>haqiÝ®¡åøÄYÂMš V¾×øäÌÓêöNoå”-òynlöÞýѪÄùz|ø:Hf ÿ[âyƒŸKŸˆi>Í‚GÌUwMõ Lç¹ï®V³‘ö zHNˆüõì'mlñ¥h8wH¾ÃÇ øIA»Bþ¾àwº‰h+ý°G#« ð€7p¦YšÖQÓ$ßÂÛªðäóÄZXCþ¸ŽNúÉ‚q`Aµˆ‚1VˆÇmñS“ZðZÁïƒ5þ]¶³ KEö¸Û¾°4VÖ>ò>/“·öcëU~vQmMøWÿîHdoÑ<~ŸsncÚÏZŠz6‰¦ƒ GÈ#WÔM|ˆBåŸÈnU9uO"æ¹Ì ê죿¬U’LRÍ;ÈK+ÉX‚%/࣡ÉÙa¨VOð—ÍÈzÐÇÀOl§‚Ô¦¶ö—–Ê¿†M³\¶˜IJ”Eg+xµƒ é ]5”EÄï]G(·[<¬}fSaþ±Õ(ö:-Yå¡D€±ÔÙßø™'WÈúîZöodëÃÄÁNP|?>°“ˆhÄ£:“)®ëh;ny`¿®ëñXà\rgS-B“®þü<¢Æ“2¡¥…šÚ²ûñ‡È¶M hÕ Ö~ÿ²ÒÈ`¢ 4üe¹lñîºw¿à½ß÷ u¹`+ZX…Dcax“¨ï~%²kÚM|?ØÞÅFÔO£«•xFW*ƒCüþ:¼Óû”×,HþßÏ¿™`‹‘íìâ Qß þj&ed"ÇMã}EÆ;_‘ Âá§É·õ¾Ÿù{T]5Øö{ßv3œrÛ·ø¼»šYËÚ[sóq ­oa÷xô4r[¿ÂGÜÝÎHžƒŠÂàï@·/è« Þûù—µDãÿÙ¿¤¹)•f¯‘ñ¡Ÿí» /xEœäwü´…ÿŸõ]Â_khlùØÏ‚ƒÖjòÓ ¤ÚƒÔ#´Ñwò[~+Ct¼>#Ä #€„¡ñ˜ì² ØÂ‹ëþ›^fH'|öS[B¥ëö~ÞCÚ§¾{»›‡tÄßÙþU›S·»é ÀÆ¢d‰ƒø{7˜N7¸€CL%Ë¿á‘ð×ì<5Ofò&^ ¯ E¦Œ‡üáÍÝcZ¢¹å\°…gÝ’²òÿŸ†¼°[({OlŽ„û]Ç‚'±¡Ûé1 FÜt'޽õxÔx¿C Ÿ ÑZb¤_ïïºk#KÕÍ8ú –³ÙŠÁv¢€|5ÐYŸÝ ‘sZZ„€¨¡µ§äÒfDq}Ðî‘Þ¦ƒðsû.áá üõšá~oìü :y/—­Ö†~>ì·ê¦§‚Ñ×ÁÊn~´»"xˆqºHj¥a ðögêºæå´¯m²ÅµRÖSÛKŽ ÿ'ºxŒ˜~Á;ŽhnÂÅ|$xì;}º­Û|½××q¤,cÕ`s´xÐŒœ×D[¡‰î<*›5²¢–T\ fœäÙgˆŸç¼îwp¿ðöͦ´dT>ñ-¯…Aþ0ÿ"®ž 2žr‚Jæ$‘Î\Þ{êg÷]/cÈ|K©aÆZ;kF. ¥­‰óþÿ{ofÕ•´mWÕÁ%ACpwîNðà„@AB€àÜ‚C°Ü=¸{ãîîîî.ß½Væý_Ÿo23ÿuz¾+ë\MwŸ³OsÊžzjェàÝð¡dþè§™5²¦øM?t¨°âxêX_ÞžxÏ/ ÖÅA—§N" _ó=7xPÒË\‰ ä¹ ï,‡5¦»¢iÕ°ÓKt1‰xß‹]‰&&cÑžDtYûŽXž lM6p÷ —£Öï6ÓÑÔ…‡u²?ÔsêöE¹‰°yb+À£„ß'ÕØê‘9³X}YlÁÿ².aÿ»R×.èkrÛ'ä±#HÐÆßõ< Þ?ôïÚ/Ò¬à×Xän«uà‹?"y*MÎkc9ú"¡µF'B2˜;‹”šjçS¿{ÖSˆnô·f _}p².^PL¶[ð¿¬Còì”°vœµf³éáÃíýÌÛþ P7²Z_rúš¿x¼;¿½Jã[ ͈l©y~â1 ¸Ý!xÌ%ýˆhúoAºsÁn×Ð{p¦¸õ¿öù·ÕþsOZ«Q¨bVï®sý6ì=«Ñqh£'?5åzcç®<¿ÖßËYØzñjnä<gEŽìÅë}ýSnzæ-Ч?§¼•jð!¹ä,ã‚V@þÐÓ!äKéF%ðÊ#‚T7ñÙ{ð|7Óåþý ¯ý>þD÷²Ú Íi+ñ’ÚÔÉGA‡5`@/?'ÇÍ߆ìÃêGù¾MD!±VðŸï,L`•n ¶Øÿaõ“&ÒC›X>¼5’ïèû1L-:Uûl½Ø3½ÙD‚»ö9ÛGÙ ™»ú°íZ ¼tÝÿï#m?âc¤þ†üs¨(VëülÙäÈ=ôkJÕ4ÿß'áBöÿ¾êIu©+ÓÕ1ÀðȔ۞`a·h:Qà¦àñ³Ÿ´ˆxÎMþ*ä»`w¶`Ü#Ø]lêw%ÌÝ/ì&&­ôTÜÝ@çaM•ìg[kl¦ „”ò6ØBÿ§•L2Ê P­¿Õ2Ùߥìl¿Þ? F;¹~Á²ã±¾»Š•Øïù,„ü%©”£Âl SéC;£Éœã8jLÂÍKzªé­¥uÁö;l«i ¯þêz€ç”tRVÆé`sëùkÀ³ÉTxóÑÃb$šàïƒ_ëg¹ï†%>õ ûÀfkʑ㓙»¾,C]6­h™¨+Ò¢©zü” ÖÛŸ/ ‚-î[Å$+°YjP™¸îÕ;‘ØÍñC$ðwMð{"\/„ë`™»¿ÿ>ß‹X'Qy¤,ngÈnæÇj°ó þsUÓà÷ÓÑMXÀp²!`Ö…o„¾• 4zpܸðó[~ÚÃ2<ÀÍó[Nõûböxf[Þ¾òó?Rý9Aµ’–Ævû+Ånø¿î úIa³-\`£å'CVÿÃ_…ªÿ¾’I6)%gäX}ÛŸïÛçç|À£§©›ëw4s}JaÙšÔ±nuþK7ÄvÎvtô@sPë»;Þ3Ù,»a‹É}Õ‰ÿeÚ[j[Ôÿe}*ieªü %ýŒÎðËkfrb"ÛKFÛ„ìð;Jj¦vïdC‰ÿx– oxã§ÝœÖ0äº}×÷Äh2 9?^à6¼¸¿°nÒ4Øbþ••˜:(¯VµÀ«Ê–Ä6‘ÛkàßWán‘m²ŸÖ7ê2ùfKð€)°üVTui¬ òÞô]àÓñþ¯á±È£n?Ý»h¬;šúÂ*†Rïÿ}•™–Ëi-޵júyí¥¤=ƒ·'…ç1·S&5ÜdûÖ¾GÂ5àù÷T5 lQÍûiünßdÔ{Ÿñ6ËJ"ꄊ_}•¡.?,}4¿e&c5¶öTlEðî‚Tm“@y·×»°uãQ×ÌN’ÙgØKä­ÊïQàNà ‘~hWÎÏûüÕÚØ‹8¦ß†‚+>Ëj)ƒåqÞÇæàÕ,6Uqiä\ Þ%Â/²x{o²ØÌ!ûy¾ótKÊqŸø˜èj£-BàŽoT²ãòE°Åú›Wb×éX³ƒkݱ^ 2â·Ø{-³vÖD, óss]÷a׈AÄI {â§²Ž<Ü´”ª6ÜrÜ´„ÖxÃ0©l¡þÀª)E¤²Ò,vìjˆ×¶v äù?'¾ÝYìÒèC-e`¼½·p¢äh¥ƒŸúÑO ±¯Õ»lUb&)l¡þЪ#üN¾tw±Ø={~Å|8 .¶Ä›§ÚX4ÒÛ,. ®ùÔ4¥ÐÈ—DË1{h+ÐÌ ‹8X˜ŽODÑÅ>èßÉÙ"ý¥"xgÍWm‚ÝÄîðµß"nY@ñ@’@Ô0•)ÇA„Iv/ù"pÅÎÙsàþ¨95©~lQþÎUKÚÈ·ÒKFH,8í5dJhhø<¿/HxduÕDEùêŠÝ¯Zt´1ÉÆéd©"Y$¥ó¿Æ*cm${Áƒ½úDØ Ûj½üõÍíÒD~’Kò1µBzk _“5gkAd¯& ¤¢4 ö‡ÿ'­¦²HVÊv9$‰ô¤œ’Èú±ñ 5crzZ)$ßË0#wd¨T—83ÔÏ9úãkÆÅ¦ßIwéˆF¾• ü;¸þ\®?ןëÏõçúÿw¥ðýþóú®=ÙäIOÖOËoå`H¥›ô‘Vü;EHý`ÔòJͤn6b2mÉóÉD•xHÎJYí¦´¾VÒ>ú©Æ×eÒE~EýÝþÑ•V’!ï|)¡µ‹Ö‚Ûžæ<>•ûúNÍêI=«³Ý>/‹bôˆÞ”Rfø¯8õí?¯D’J8µ|¤ôC?º©uÕÕpß0:KšXBk`_Xykm™¨ÿ{[ ØX­£íõ:«ø/VõÿוV2çI¤’F²­°ÝÒ‹ZÄÎàëå©Ô×q–ÓjØWb¹l„õ¶¼üÖ… hŸ¿‡ú%ò× âþötUÆ‚©©~›ifKm嬀ԴÉêÙm­Å$‘Õ²ÛÂØ¼ ¥µµÊ–ßÖ[]´‘ܲ£NÚUJщÎ×ÿu奶)#_Jg­m÷5›•´ø¶Z_cÙFèbŒžúö‘ÝôûÄv]ÙëôÛƒã*ðzS«ní,Ž ÒÑúgÞþ÷•ùGËDY&á톦$¶‹Ú =Æå¶ÏÌí÷™äû†Dçç3ºÈwÅpý’Ë[\0â++ "Ô#N‚M¥t¨¼âù¿­t ^b²Ýÿ¸îÕ¾CL‹h»ÀûˆögÏôŠÆ!.¢™ëstNÏkTûÐòñüs¿ƒÛëó%1pRi‘Pq§ûߺ2Ár²Så'Õ™úFÇû{¹ÞëGÄÿ$u÷¹ÑœDýBÍOÆ+iáì©f²ËzJ_¢©ß÷ü¤B«57‘pßõÿÑâAísõGV:0?»4ƒÒ]×ê3ç|w¨wZ…hߣY|Wðê:ƒÇ·Ä–ÈÜTœ6ľ»§ßõ?zJ¦Lkßû^?}ÁݶT{úWIÉ#®œ—õºJê~¢ü‰®×»z¹éeMëïh=ì»ÝœÃî©@„\ÄAÐÐíêÞª¯üþö,øKNøAbžÏf}§—Ð=û\ÈvÉ|'è"àØmüy¹ßüF\{‰„¾Ó2ÚQ=¡‘í’Æå\W£»ú1±Ï\Ü·<-¿*¾QÍF£âdÂÐ=»uM*ùVXûë=ÕmÄÿJ]‡õCt‰UÜÜ|û÷zGÃÚoZÌûÀã)—ù½¹!¢­à]‘ýpö¶ÈfÚb+nÏȨ¹Cñ„¼øg^ât¹ö´ôxï{¬ýÉöéA½ ƒõ´Þæ·÷ú¥Ö€ÁÐD8p!VŽÇ§!Ö{£‹ºx¹¢®ï·Ë– aI-,LàºÞû À§Cç*[M'K¥RäÁÿSìÈþt8 ÙSßaìk4’\¿…§»ÙÉÉŽ7á±`@m­mÒ¥º‘gÄêÃÚYp¼p¯%µ ÔQ¹¤n°EýVf<¿œ“\Ø1öܧñàø ÜQݤãxD&ŸŸ^`õ[Hï: ß$ ¢ûÛ5=ìà¸V‡óFþi¼r_ GõÑ@W ±Ghu4“ Aß÷þ_Wv,ŸP¾2Ú«‡»® é>ì{ ëOЉ~×Ëå­î†ûEFCáÍuG™ ˆgÖ]ýî6>·=àå½ë}"0 ½Õ–Ûc{e‡ì•ÔiCWT奕îò“Ÿo’ùŸÀi×øÎ•«´ö óÇæ¹»Xõ*Ya•.ƒ®'×Ñy~¯\.¢¼?¢ ¸±ÝÏ y[,JE”ÜJÙ›l›mšýbqW­±ü½ßÿ¾R“óŠHýYSáÜ…ÃlǶ{u¡ÎÂ~ÑȰ‰êvDÎ…ìE+ëÔÍúIMÝ÷û|¨hÖŠj§?ÏÄ6w·ûLŽÙ'¼©)ðÿ±¶ÍfÙTð¡³% œÑš’¬ +©¤‚Tio‘19,>:–Œfç±øzè:Å÷„é¦óõ€Ÿ²•œx˜×]ŸË€B#W©?´Å0¿8D†Ú~ÈÃí|D^,…÷϶­ÄA[ÛeCá‹+¨0BËlÄä r*i®é¬ŒÍ¥Ž)޹‘æœîÀ¯[û[ùÞ‹N@Sùy6zq½®Îë7°£Èä‚X°€y:ùs’“ÃùVã)ëðŠ£—`÷þþ}¡*©&G`½µµì&ÿH¿ehFNø^sOp{×RDþµÈø)ùþ¡Ü÷rGŠSÆ¢æ; K˜ Cx‰?mЊZ‡cÝÞ }dÆù`æmÍ4‚ÆÑ©¡â¼ ›Ê6TIU$<ˆ·žÐÞÚ‹|?šxï¬]ùí,•¯ÛÁÖS¿'bÇçÐÂ⢠´ˆtÑè0á¬Ô WtùàcKknÎ âhßC5Ãï'~ü±ðÚ°ëÖš9èýÿSIzØè/²K\õžŠOvë÷õÓfcý¶è" Û ßÙ¾ŸD‚ˆ0½ÙD÷¹¾þcxü}rÿ+u`‚yŸG“çøÎPKyþ<)1’™ÿ%›5DWý$GåÏH½7EÊ‚÷Ag'ËfßËÒõ³­Mµ>Ÿ<µU€Ìð]}]Ýû¬¾Z›I6Øþ÷Zæ[ £ÙN¿[v è&ï)ƒ/ñ·¦ ÷iâ!–±rT‹O¨R[1´ÐÉ>Ò`ß›UjÈ1yƒ÷l^F¶§|¹~°“@¼ïˆ ·ß!¾9+.DŽM ýAýB¿”“:“\ÿ©¥ LÅÎàŒûù nÀï³â˜û;S`” ýì“|æ:ÿ ·©#S VáÙ`_Jó/E¥îrú?­ÊÕ>f§ˆÚ%ÄAkŽå¾´d¶h îM!š¯j]ì¯ö=¯ °Ž Ý;9áû‚lò{Ä"_ ,|ô_CM”ü¦i¼…¹nÑ®Îu½¾ ê²ÄÄÿéf»>½ë|·ª7èàqp›þ¤_Sĵ~Gà˜àp¼b:¬¾4Ìg þÜJÃé‡èd¡¼ÄëcÀ!^òw.«ëŠ” tó¸Ù“ƒñü\Ìxæ&a”‚·êlèT`ÿ Ù­b?ûÎ_§|ϲ%êl‚%'k{´àæ5°Dæ&?…®¢¡QºD®ù>‡‡eŒl–¬ Âàß3â¦æµ&v’#ûó7ÍܽËêú¤‚W'Å3\_œ¹è#FP{À}%Menæ:…µÈqùöQñ¸™Ný°új]n²£›èúû-ÑVº\VJT={Gþÿßp¬ð ï}©é­¸%¶]=\ˆln.bzˇO±VÔ Z;¢­M´UòeåO%½¥4ŸôŸ8qÿÙNb«;ð§…a¾Ûëp¸]z{Al<ô»GójK['?K$m ‚æ—ç2…熃–7ÐÛU—˜?„G¸îÚñ­´¥ñªÃ}[ÂýËYMaKl@`‹|4éËÃzªI5Ðý!ñš Ç0wÞ2&y¨n'OWáǨbgÁÜÎÏm ZsdÉ »[,mðýCrF‡Ûøõnüߟ .½ ô_Hµp¯È‰¯çâ*ö€ýW"ÿ·´…öFMþr2LVƒbim9ê5>xM½” cCˆý¦ä€N ÁzxÐ"$wóŸÖ‘'Fƒæ1­£–”0†Ô¶qñx’›Œz†<àö~»9ZW怛ñ¬3,Œ7%ôgWçègA<Ø@¾&âv±º‰gÁ§û|ÆcêÎïo·Æû‡jG-£ a ÁˆHÑ‘ °oï@(íßÝ9í0uò t4ÛïŸsîKÜ'š rÎÃ7úžˆwð¬ÇÎŽ1å‚xM¨#)®Ÿ×#2öT¼u‡ßçìÎù´õÌÝgïB®kÆÏµÁ|×ý~(~½“#SÛ=/}AÀð@×+Ëõ; A‘vÒ»é‹É!~º€›øz¾å3D°> °ŸÿkÊXY†ìn¦½ëßÞRۀ쑽7¯À_#ECªØ.0žž`¼ëñ±ÑÏ{ß„œý‹ïÝ<üÞC·@+´9¼Îííè'ì£Æ9̳ù$6léC»Ž_ïDΩdË)D@$þ™XxõŸQÜÆ³¦ •ؾ°}úU·¹Ô„¹‚:³½ô“þÈêönÑ |>7ãb V<­EˆövÔË3\»áÓñ‰nÔă‰îUäö=:MSj=ßõl¸·yúùón~ˆ›|LS‚Š ÌÍÓ½³ÚÏsà·É7'ð®1Z<¨WBúÀÝVb·CzÆÏûuóÝô×ÝÀñ½çÏõ®ð“úaùnDB_^_Ž¿lÆnøwðzwÅk;¹Áq…¾Cv/c¹?Ž¥ÄÛcšã‘ì*Ï9T9ÃÿèέžÓ“A½+ #øÐ÷hßHmûŸž„åËݯÍ!ÚV>é~ßM íÐÀ¯ÞÆËý=/IÍáøqß÷£q2V;`ùIdÌüÍß%8‘¹I™çyæ>ye“*•v» ê\Ò\Ì;cºIf9Ìçš·YŠDnÂÝ=°ÏÍ5vÝ€.¢‘Èîæ™µBªþxÁ`^á§\¸ áW}ŸÛíü>‰Ì8 ÔÆ_ŒL…ùœÖ·H™Ã–ñĵ¡xýCü* URR‹ßÎbk5xüG¤ Ñ×Y³kErQ,*œìð—£Èpïm£ÉáB'±áQdí¨ùñÝ Æ£… èÄñû÷Ô‹îˆñ~JˆãKÃAÉf|wý/]¦{Cõ“Ê¡€íôýÔB¨{“#YY{~ ¢ü=@ßÄ ÜØÂõ+KGͲYOúFçôºº«@;ù­¢ÇÇ;’#ê“%ûàÿ+}gø0Ty³|¬"Gºƒt&GW÷Üä—Hö k‡¡(A¤ÜÆ/Ü"Ñ,+¾ÖT{µüL)"—å¢ÇóÈ1ßÏæ ¶=A27ÿý<±=\o¬õsXÑ0²{KÿÖÐMxj©ÒdÃç ú{…2[rô1Íè÷Á_’Ju™¤ñ×½öÅO ‘ü&Yêž=ßw€O£4™¦ó“¢V!ý ´uU¿¢® ¦ ó(1Nk!ýGúzpS…®ð—b“õóÙoüå§ ø;Eã€6CÁõ¥òß%Þ…z.€}^û¹¾çÈmÏù~)VxÖûµæÀÞHpÎͺ öFCnÄ3t4Ñç‡ÔÃYáHG|¯ Ûh(‚¹\z€¼±ÞwSý,¸DdÔ’$ØâS}f‘zËÏ~‡÷“³ Z^kȧßç¯W-ÃÏ]È…ÚH3kB|ÀM„Ü„n:óê]¼%¦ïoÛT,¬Q57•Ò&¼éØwF]×ãæî‰x¤ém¾²VÞXž½*Ÿ[|©TÒòú-Èß^³W“©ò`ÑXv Ø ëßî§oÂïóh"às¼Á@õæð…ÌþðîÄs#=¯ç×ÝPð Ç,“YFøÎÇø{vôT.|ýb9mN(¼$—€v•…Ô:m|Ï6×ïþ5•úcØÊ#<`¹÷„Ø6N¬¥µ¹2•5±•Xr®F´/­¶µ±=ÄCe4ÙÞÏQv/¢8~äúîRwæ7>ºuÜçÑ–ÙºJ¾`‹/Á 8:KÎú(dnæÁnßãûÙÍÍoÙC&;è'Xoß?#ŽG!ajke?âÅnvr1‹gelÞÓߘæ3èzÔÉîÎü~ ~ªßø« wˆŒWT†álJ(¸þý‘&•-ò+ÍÝݱoŸGn;‹Ý¢Û{8{DÛâïóØTõ;n¼…WÚÖáÅGÑRu?ËöўđküÕÎKd¿ È æwù¿67Sè2\8-^ÆuöÛï+“V¥œ©nÇÒRtp„›Î'OÄ'_BT¸k®’½/,Cö Á²§ðúÖßú™›õ=r¥$nŽ€†ûýÝç=o<„KÚ=oÉÀ?W ‡³Óä“hï ñÛPÐ#¿6šƒÒ l£×ÀD¼³:¦~.3 pWu— u ³º=`‘¨¾µ ÈÿÍý@,ç4×/óª¯ù¦5oñw%¡¬U± X;qõB?°—>¦Þƒ÷u¬ŸÿeÓI,¥ÝMÛO× )»ñÏ×€S×ýõŒå¾f??ï®ï~˜ÙkY[Cd¸ŽÆßøa‘ñ™ûdþ­¾ûí~Ð4€^ “®£Ïgè26XÑ£¶GŽ[|qóªÈ mLŽžD]—ÌÛ)¦ÍƆA#wíÅþ®Þ]áÏ\G'ׇÑ>¥‚mK.èÍkï´¶åG÷y𛽠õš×õ½ÍKÞ ä·¢VŠˆ(â{dµ²Ür ØÂ³"i]y&¥üN–;ø~ˆfE²*Øõ1Qz’̵ ùGÁpÀô.ùù}u@´—OSé<ij´ó%ÕsD*\×;t¦nCSùNç©ÀWW¿%š'+Ûg°W]æ3Áž•H§K ~Ç…™¼ŸÜYÏXo%Yÿ5ÁfrÚ ²û<\±a=kiY­°fÔÖÄÄWðºð‚—Ú“ç‘á·6ã?aÈ|¯xG¬íÎ,^†W|l)¨ÓÚ¦k ¹láYIt2<,.ò? :÷úþ£À/õó?ñ™·RëÕvdÅÒ0½æÄ}CûYS¢#×¾~ƒõËóýëjø:ML¸¹yÈsñÁ…ÜHüŒ\ .h)ß%®‡¶ä¡ r,Ùd‘Ö±àת¾¾pþ|â}xþ:l9 ôëKÍHõÑçh9*ᯑ¼ ¬¹*ð-Õá­ê¯pGµ`às*Ÿâ×Nz$}ƒ6˜»[ÚÍ×úÈX%)iBü"«©>@:7·f”»§•(p{›¦QÑôçë7F³',  8_ÌÆ"w'­ƒ•Döް¾VÚ€#kã'µ­#±=ìÿVœÌËG´Ç"û—‚< <Räqל%¸³ÿ}탇_”d|ºdöþè*äqsMz`_wÇ‹ë‚?PóX²D7Xž»Ö½TÑäÈßQËê÷¼£*þR?Ÿ§î\g^¿Kâ ÌBÖt÷×.ÑOáC™­¿L ¶àYs¤±äÑ|ÖLÖ–è^íÏøÍÔ!ÈÙûOáÜu¿ÎdÂi^î6žç.%Ÿ×'DÁWæùÎïîh×ù|9±pIÝÞèk©7𜛠v€¼˜ŠJg¿Êþ` þ—å:˜=•3Ô¹Ñíµc²§É~·ù¾¸PgÃúEên~7@{_œ$ëç´iàzâ{»Ÿ=˜<1Ž#æû=`çvmÈ‚GA§îÚR&rHiël±ÿ¿•YFb‹ZþzÇlÖ!pÄ>䳎~ò|hZ©à5¤†¦‡½$öç©bàÿ+‘Ä]ýž„G/Ä·Ç€‡`pnïçm2¼›Z6[ŒŠ ^ó\OûÙÀnGÈmGÖ«A¦O‰fP!µåvÅFÙ ù\BÏô“ßW2I!Ë·²J¿Á›kR£¸Í°ÿ¼×uñ>Œfë)±@7#$’7F¾/xTA¾‘ÿ:Ø·ÉwI8â°ï‰ö¯8fÌéWꀊ–IóõžŸÿm¥“LÔA ©ÖÀÎáÁ‚{~Ÿ[DüÛyÃpo.Òmý úŸuí[û É¿¶úH˜ÕÂ!ÿ=äÞ…vù]ÃeAº%ÖXŸz7+Ü9šõg}ÿ§•VJKq¹"çülÇ<X…§g¦ªÍ "l๭H秊A—Ý›RÍ6¢j ëmû¨WÉ–ÔMB9 <ÖaöÔ6ý.> ÙLt»6ˆw<þõ•ÿŸ%©Ï>ÑV“½öÂmj"}njڕ؇Ÿá$üÞÆšk7tº-¶ ÖÏ÷….o·Á†ËZæŸÍÜ츣êî÷¿nÑÀ½ÎøÂòËÀ`‹ùWÖ(é.¿ß±¬„DaðôOÌÓ]‚m/"Õ)?Õð›fƒ,f`±ÇëÚjxÍÇ0œ¾÷usþBtÛA$D$J¶Ø3›Î£¿½’~Áò¯¬ÞRS>Ćo´¸ESÛDwy$™ë'¹ŸåßKþ vRtò%’³à¯âä·6Èÿ˜×:ÙB˜A2~ø›)û©ýb騋[Äÿëj*‰á¸¯4‰%'®‡ƒòi‰ëà@¢þ†¿ŸÙ‰Éó%aò‰AþíZŸÿ•ˆ¸¬á¬“ ¶ãÄÄ6? Pù‡óœ±ÚŒùWXé©áRø¾ ©xóâÇ)ª~íö?…Á¦J~øÔ~³µÔÃÙ,Ä®Ùkkmng<ÀO'í¼¿Çÿ ¢a¢IW$ôÛþßV.ªÜ›êºY¤„ 4Óðåï±ãä²â–‹gj‘Ù7[ô@#ík—l>Z o…‰›rÄþ˜ä{ŽöÿÇl”†ŽÝÎÛÚ+?PÍŸÑuøôüx… Á£¯[{µþÞ¶¯ì'Ûi+ì™>•®TFùþ¥º¿ÿÛJ*ŸÈï¡,òw­&7³y¾Ïé‡ÝŽé‰b%íñTok g‘,¬=ÕšÜºÙ¾ã …´µQ` ó‡W9¤·¤Õ¹:OÓaå¤h`®VµXvJê( k©-޽Ôº\¸ä{]º}Íw´Áj£Ÿeš]#ñ` ô‡Vb¤Ï(Ä´¶Ý«°x8¾®é$½£Ï5à¯ö†Eþ˜Øý޾Ó줞 ìÖSšØÂ[·k8[¯5µR¨ï|þWA/5Øw\2ëPüÙ톸§‚uï}ìgúVaûCšÞrwY,Œe´¨¶ì· ý<Ñú”#¾³–hàªöÐÒ@‚¹Ï÷¬‚0dð»]ÒW/ëq|:ºÝÐðd½ì–ÐÖê}}…lá,-Vlà1,3‘žÝÎèA¬šÇ}©y­ª5°¾ÄÍ]©Ñ5}(Øíó·¬’à~RØÎ ¬îº{»{WÝ]ÝûñíóDzl~w÷È'¶KxBä®lÕ¬¥A}ÇŒÓèáïq–Âòû+HÐÑZ f¯—¿må °–2ò³Ì×”v#áõ®—íumŸnÁú7±ú=´ávHÍàˆL–—,䇼u£àA"sûZ’fZo˜Á%ÍE„î‰PÕÈÔ©¥‰ÜÒÏ|‚K:SgëNrÀp}»š=$ö]‡è#`_L«ë»^Þ%$·2_9¤NÛ82®µö÷†t· ¶ÄÖà éd‚Ðëå°|^‰'g´'¶Ëm/ˆý¾ø!]®cAÀ±ò®wÇ'¶U“Â‰Ïøy/±ÐDbÛ«Kˆ7!ñßÇ:à {ØkaÇùyšæ“úTM¡s—ÆÔs©µŠ¹k^űï>=©næIˆNF®\V D²AH–Ÿ’šbåw0‚Z™Ÿ¢À¯ÃNøø¬QÁ…†xþ÷0æÞ0¢ãbåµ$ÿO°»^þO« |¯›,“4dù8 ö#Mm›ëorRÓ>è ö?BŽÛå+¡Wåvtd÷\gÓÒÍ\o¼MºV¯á7ïôã;â¿(Yß~°5öÐ~³¶ø@]ÉlqÿËÊN•› û›æ#ŽÝýK Á¼›Ä÷Po4õí Íi÷ñêhÄøKê€(`€±ý}@Ù,+ïît¿Hüß >$w¾€9ÆÇ›òÂ…¿·ùØÿŒÅ dÔæ’%¨}/þûÊ ö7ÿÒPélƒÝ]ÁÊ‹°õfb³~ ×pȾO7jDs»ããánößEŽx¨9¨ßã ‰v§:ž¼›Êà$šºE¬d惃‰†ðUVSªcCÏJE•›CÞH}]¯_dIì&Ÿ{ƒ¿ûuŸö×_u•ßѳ-œÅ+žÃv÷“Àc“¢ƒî®·M,]ÒwDZGÕðœ,q ®pt˜d“m |h«M5 ÜÓq’MŠ[쿬ܒ†GN™ Žï糦€±D"¶"Ç|,ï:úìófø=ÐÛ`=ÛÀ¸'Hx‘L op}Êáùïµ*º‹v÷¾&ìôóናê[´b;lrVMj®Š§„ñ¥„Z ©Oñ©Ý½«îŸwX÷’¶Ó ÿyßùqþ±›è^îû,å§=ÄÊ#°~“".>RZD¢à6¾2 ¼ oØ¢W© r‘O¢XYðp¸uBg_Ã4ª[t¦²¸,–¤d·Ó¾ëq?ý Æî$»AÐRÛbw¿ëMª cp»=ÈäÛ‰ý;éb<#œM#]Õ›ÓJ =©}wâ³xÏ!|æ'òÁ:²B>8A5j…l©Ý‚gU ¶ðâßU; µïÈ5“<ÿ?ÉV`õÕÚ\›è4*š5 BÑïzƒç_æßûºAÂà-w9>Œ•°ää:7 égA4¸¾q×x_E-‹7hf«¯¨hì'“@*r@iX_mÙ‡§GÁöú.ý—ùm†ö»–:k7l¼k'ò}r—„;y> ­e&žãv5&7ÓPï¸>¢ƒl¹b´¯†j"à8l©(YÇ÷Y­iìí ú¿¸Ý?¥åŠD¶Èå¦Þ¬ðˆ} Iûãµýa>n÷Ö ²àuª½ˆ¶Cǃ}®'È ýR“Û5+5@p —}‚º»F÷[]›«}ÑÞñ¿0¢Xd†ÊÄGTô”ÖÒY+êáxÁLBæ««BŽÛÇÖ×ý¼·ñüîz^o߯àùëȃÐRd$=N””Öýò\îH<ç‰ïgÔÜ3èfÛˆ†Ñ:T|@Ù~¼âU7+°°…çÑÌ6i M" ‚,Fп˜DÔ¸xt\*¾£~Ÿÿ"P`e`ÿXúk{ öe¤â=Œ|·ÐÆ ü$¬æÀ+Zéx^T;ë÷Kï†7º»}‚€7ù[a@÷ˆŽ¾ûõç°ävdÂô  û·iÐÏŽçÊÉI ¢Ç°-ä·ÍÈëº@¬Gš50¿nøo *Ù“|w³ÐánþÃb-Dèåg‚íÆ_6ø.šS9¢*øÿ«5¥Žp;ǹIÀüõ¬HÿQÑÎÚÂ/šóS{tùÓJYi+gÄU³GÈd{üw×ÇüZئM±àAøK+`ÛÁÆ¥øÄðp Z¨­S¬hà==’Ü”w󟪻3|&ï]Ò2rCTË2ºž_…ÀÀ^Ö”hnßÚ×ö­{Jx|¬¯ä§èH±WÓPÓd£â{ˆOöÑ?”üý-Þ\ÚÏsJl,ÇÎë5<ÏBÀ„<ÄÁ{ò_xüg>š¨n‰ïoð‹Ièð‘ºù—®Dqß'§·5ÁJáýål£Æ•ØA”ÞÅþiÂßô½sÅ,9*¿ ©=ñâÜẌf£´Ø‰¯Ô„yõl• RI]•‰ê<ï*‹Ÿ—ÿvà'k©SÁ ¢cïâà•¬–m²JžIUt±šaƒßÿs[k[-dÛ†üSÐJZ¸o^¤/i ÉŒ5‘¾œå#ö…½úA”?½‘šÖ> ’½Ç; ·sS/“ QðߥàYwü=ªeæÓDZÙH´šü¸Tëédi ùJ¬'¤1 ÷'"a3±²‡L?’Hw¢b7 ÕÐiDþbNô˜ö[Mt´þv¶H÷ ÊŸ@zÊXK8s¹-:x^½ä“Ÿ#ËÝ%ÇýDÖËÀçkcàáÄê¬{ä_GæúýB̧?ûΘóü9þDÉN4ÑUË;!e hçº"+v‚£ÑÄhâf¹s Ñ2ÅgÎÝDX ´Pľ ;º™8xZP¯W ÿ/–ù~âãMoÏaiÈmSº“Ö$÷wĆõµ<òGúqÈçz œÂ®±­ž.“ƒpü£Ú¬Lß9ŽÆ!±cIÃàP›Éûý_G556´-nõ3Q\'€‹*Ì«b%¨}§J7ßñs'9lŸ^0ëi#{Y4Ó¯ø­vw{ÿå¹9h럽¼¸>IÈën¸ë<ÑÏŒ\¶ú{IßWï=ˆ£¼o)ÌÚõM®nßS ô·Aõ…¤‘EÒˆˆ½ÇçZ‹½Çñ]µ=¬þtr¨½µ 1Ð K÷Šs‘nZq>~Üû…|ï²Þvò¨ët1½MÔQèiº>§êuó/Þ¡•Ÿ‘>Ϲ²?«|g ä« Êÿ¥Ä”ñR’žÜö›6÷Ò÷Ãzñô‡~Êá38ß42ŠO> OžâùßlÉ. µûZÐná ›ðõY¼o¯ÏÄ[~Eƒ'aˆ%¨Œ&S[=öó3çák8òyÄÍZiTþSQâÈ1©¶#ÓOögº~ÃñS0§‚—ø¤c‰‡Nþõƾÿùhä_„ÏœÐä°¹— ~DÛÃo“ðžèj’ï< Üûºk7úG,æ1ŸÿaŒŸ,ë:Œ­ ê!Å%©L“ŽØr/>ÝSkù»]–cc7óûxá0­?òNò\‡ï>ÄÁBâøˆïÜ¿ä¯ oEwýñòöèo1¶w::szƒ?&ººÑõR›Hý4ÏÚ®‘É´ù‚º3.7öï+uáó;ˆÉý~û^d™Â§»¢¿én÷=B@nDv m‡”3ðòýøÌ~ó;ñ–µ>:Úù.@ó|ÇŒpæÎ|`þ‰-¦õóÎòÊ>rÃ#þê{2a8eB &ÿ͆üÃäµì¿Ü=LnBÏ ?­ÄM*¸â`#VÛ‚”ý@€nüÛ$ŸF,F7 }ƒïvºš÷÷E3ãðš™Øx£Ÿ uÐ÷?ÿ€\7/xƒ~÷ñL2ûˆê/ ^‘Ð~ êÕà’’U6Jðy-øõÞ×ê.ϹK⟯üõxÀ2ªýdw7m„ïï²ÎÏus=¦ù‰§ÓÀÎ>ÄÈtô4ÚÆ{’ÿ’Ú3u÷ä æsYö²æ ¯¬•‚:ÿâ+êßIBmþ«fÕ2Ä_¯›ÖE°ó`ö]dX†gÏ$úkáÙý‰‚NxÁD?Ñr-2¾ÃG梻uÓG¿÷r ÖõsÏvªëû„ï‰ýžØ(vSäáï„SÕ¦‚ îÐ^Rü÷\D?‚ãÔÓØ0”Ó™ø’Oþ’XØFÔ®A#µô32Àd¤ë¢nâz?+øñ2|¶Ôs]â–?›"Ûtß;o1tÀß+TÞš[|ë¾^õÝ¥ÉnRJЯ䂿¯—Nø~T*¼¦ú-¹ÐÍö‰åïf:ý7#ý|¤Ë¦)±ïP|<¿oFöUHíªåChl0š@m0ýTÔ É:ì~ØOºÊçO‚ôu¬”Ÿ‰øšš(,µÏ,ÍôI‰‚xµë]ÖVù{wžƒYóµ¼í‚åÞð½æ!×C xpÑÖ ßA|¿,r¬%LA#c9v"ã~ßA.q7½}ns©®cYr«kÅ-µ=ö³ôšë'A·Z©+½´¹i#Œæ¢ÖAÒöd¨õx­›ZtŸŸÜdÐM [vÍâYítÐn2?$Ë¿#ÇïÁÚÑÜj?ý&©f1Ü=3§ñ¤û0Ë8ö•¹ëE©©0óá®ÏêF"g°& ²ôî Ðç’‡ú¶„Ÿò= üjŒlYìè¼\ ‘ÍH6… 0O+#Y~2€ë~¿šÈc‹àp»À´˜¿ˆãh:}'ßñóÞq€œÿù#PU?ÒB–Ùb“ ÃS'¿3%^‚9ûê÷ÕP>%þæ³dÔÜGcjKuwô¯@Î'|úkäì¾Øð¿´&§îNŒ\ÐVÖºûùnÊûY¢ #ü'«#–úù™gyí!±”˜Ü÷ŸrWG]ß”ÜV“Zùë¢ÁßÝAjJM½*ãav»©t‹|J¶vyº9ð|þ‘¾ùBÈXåÈ ôx}/rxk¯i@€CšÖj8CY^=†OìÅ?ž¨»o6Ýö”ö\³S •Cù¹‡•êì£ß×dà¡V%ßjÛZ» è'ˆß×þ:Ÿ»Ò»žßVqÄ r[ym[¿j"EOx]mgél¤m!;ÔÓú<bnÆCî¤-™Ÿ~öóÚÏØxƒ¶Ô"“mÞJí`‹/·¨*“ûÜõ«uXíŒå<¸ÓÜýk7üľ¾‡åìßNk‚ƒyîh?Z3+dm©5´ ÜopÀÁègºÚï¿A‰ÍM¾~F¼§D{Ñæyuû'ÂÂ;=û Ü'ƒì—ß§^ŸT7©ÐÍvÙå'5¾óÿ÷ÕÍq40ÿ® ¶öÝ᫃êŬ†U·ýÖ V·ˆYçï쉧ìFg.÷7³+è4¾­†M¦!Fö‘UR˜ëœwG§„‚}!á e;<çr]ÓsÔKàøÇü]k±ñÓkhÃMDÞA^ü îÿy‹'çÄò#‘?š °!æºç¾Dƒ§É]Ð×Yß-,Ñþ!¯e!C|dOÕÝ-…ßÝ¼È :Pš[|‰ªMe› $ÚÝÌ×ð>GÖÑØo3¾;kh»±ëªš–°^7ù0ñ{O[[ow¿‘PÉÆ‚ß;¾x:ßsèmüÕ|– ßx ú»¾Y‘ù?h5?91£5 ARê,òß]d#ñüdäñ.0݉°¶Ô@‰±|4s¾1Ÿæ3ZX?Áû­Ž!›¹^ßµŠu€Ûºi7Iìò'Ú]¿°jÔ¸yБë…wÍ$0wgí[u3ÇZlñÅõ:j*QAè‡ZiÞ¡kñÛ¸¶.×–x‚-£òB Þ›ê-œŸ^Üßw÷·$ûÕ"Ëï§¶qýÿù;ÜÝ€éí9/–9 V6-ê’sÈ [ jà¯{ÒBêiSKš]D~w~ò)ˆÕœ¿³¹Lö[?jË+¯|/Û˜ÖôïJ^ë¥cø­‚c~ÖÞõ¶D©k¦sì-Ší§?±ÐÒÞWð9¬¡¶·_Ñu"tü•NëÊS©`gÁå£äæ9¾¶Ûä¯rG&Kàý£ˆ{~îÍÖ ”µŸ@ú~¼6A ƒ x~qÆN©»—ê,º¤¹‚ñàQ‹ÑÈ:ô>ô ºêOf)"·ƒ-<+',l’” õBàØBçrÿ¾‹G„P¹³Â‡© {zu±`Ræ¯ôàñUó0MgS½\í Œø y.>Qu–ìŸîw=¸¿½‘ÈHO TÖØP[xV€<”^ÖkAb;/Zp³ÏzƒnVË?Ç{,ö_­ßY+m­ñèV~îAl?DËÀ;kwÍm¿ðZSÞ9kßÄÿ ñ÷Nƒ‚±@‡8dÿ½pÉã _<+o#´¶$ ýÿWI @=×–ÁîŸø+ü¯øœ[À¼Ú›zoœ¿ïe)œ§Qþd¨Oõþ±'rW‡u@ƒ4¶°ŸÍÍr³!˃(9©ú¢‘1Ü4½•ÄÖBòGQ?ÿ ¬¶¶àYs$dñçù¦Pÿ%Vgûlß ™:á¿[2ÕñC?)·%’×@/ß“ç;-{ Ÿã8.œ}ÿ/Fþ£~¦žÙï$˜²î4_º¢1`¿5, 3ƒ-ø_VK©"Ï$§U%²Sƒ^Ó±Òê_7 }¬Ÿ~0‹è­Gj4ñ6Ä–‘ã“Yv}-‘Ì]ûêìÏ~öƒáô÷<_Áƒú¹ÈÛýô°Iü­Ùþšh$¿g~¨@?·JJ9 ©ðÖ¢d€™þúõYj 7Áë,¿ÿæÏ¹»¢Û!Ã`dŸ·¹I~/fy>3VÞJ”t"Kô×~ÏÄ6^ßÅ÷3~¦¨‹|×I{1Qt„©h_Z+2O°%ÿ}%—J2QÞ{V{„Oê8Ï*œÛÈÿÚ_×™‹Ló׆G‚+ýý÷ýdß–„ÚÏݹŸé…úqÜ&ßû2 „¹»Âܹ€wäÃç~btRrÄ^ml±ÿÃÊ.å øý„ŒžÌ”ƒ8HÆ'Èc*Q;ow}íÁ¶«à¾™È`eýW{A†×»`ÇA‰Á±S(wws§Å²ãküäÈsÚÄ&Ré†ñ7´ž0£•ÖÆŽYÍ@ m Î|ýç•] Jb¢à–¸Y%‰ýÜ*·“e’:O.ŒŒ±m-Q}]?ôÓAâaûØv Y -|¦º÷íF°¼ø;üD°AQNt]<²– °M[†ÊnÙýîç1¢–ÈO©O“ÍE>Œãï}mo_X_áîõù«$¿WÇÚMaö™l¼o øV–º‰ í\€å³Ù ës ¿_6V7TìzúŸV{ÉÇWjÛ/­¦ ·^çé© ZاÔÇw@økzL£€áno{xltTh)€ïçÈ»ÄK\«ÅëyÈ{÷´9v‚gŒ§nümõÓÒ,Ø‚þ/«±|'i%)ÈÖ‰«Ùklzo¬?‹w•H8ONwSÃX>´SÇ*Y;»¡iíFÅCš ¼Z•Wª€y‰‰¡Äü;këÈyÓñŠþ¡jîÏ]Í%©lººGó’ÑŽë)-i«È ií­F Šq÷¶ÞõÝßS€iC©v Qíµ·•:Ì–›ãnÞy+d­ÌÏÕ‰ˆÏ¨tGØt¸…ãhfml!ÿÊÊG^ª'¥’ß­”” ߆خ ljå-ú ÿws}Ÿkj±/1RØî¡ƒ[:š(HláÀÈ·Úņ#·›ýXÏïa-mŒm² 6S?Ô!Áñÿº¾–]TƒÈßµÀwwǾ«`3û™/‰Ì푺 ¨h?€x-`4çð‹>ºHhF<òWçÙ~¯áÏ(4°ï,/ o£¤·4¶xÓJ®Ãýä‚|òþ–éÝŒšðÂÖ6gäÇ¡Xu+œ¯hY™ÜÖì~Šo¥l³mãµÆHÞÄzY›Œ>ÊiÏ`‹õ7¯¸pý 0Þ¶ö‰jÚ¯HŸT̆_¶Q _y›„L§ÐBQ»f›QÓñ÷N¼^ ´èÉñm?¶ï,·—øM«` õ‡VÍ “OCÜ–#ƒU&²g‚åí"1?Dh€ôóìˆÝ±SzÙŠš¡Ÿ¼v•gË“ëIƒŸæƒ5íslþà*+sä…¬$¤ÀúK,Là±²e¶Ëb.Ù0ûÍnZø@ ðeà#b;S`7^ÃÙOmÛžwÜ·v(#L ;¡G$c(˜tþÇW )'ã© ¢i3ëxa¯ñ÷)V+pËNX¼@–À«8Xhë#-z kà¹Ý²ƒ¼ºÔÛ'oì¬,ôZÎôýÑU\* ƒÚ²H êgHûŸnˆ¨˜Gd¤´s,0ÜÎj>·WZÔÖJ ~«Z*§l!þáUPJKXÁ§úY {àH`iàÃ0k·S,[ { ²fÐÄVïÈ6qwô§´ÉÚYßÈ)*äÛ`øÒúfÔKKªº\~öûo–I“hijÙZ’Ów( Ó¤?šÊz´ µUÎß¿æIjþm "Œ—5òøÐ”ØÈ)¶/ÐD=¤ÿsý¹þ\®?ןëÿ­U’,Ÿ‘ŒçVI%ù$¿d•ª|åæÙâ0¥D’B‚ÝÓ⟿òJÉB¾oÏ)&=d°”’ʾW!ò~C2ÿ0é&ua|9¤†|Îñù‚º¯çŸ»j`á|ÈÌ_ã¥;å ß7UÉëëIij®'ðcÝ¢Qt<Cz´“-¤öGÿ‡WeiÇ+'3ä;d‹l-­•Ðý’H³ÉošÆb[:jüºö£õµíÖÊڇÖOÛJy¼á_¹û½[E±p?|û„$×UzW¯éSMa¥-œÐˆ‚ô–ÁòXm[kÓüµ°6“ºð½µ¯í¼ÔDo5øúW]Iñò~0ýù鯩˜»K6‚ŲZ6_’Ú]ôµÏì'ëŒÂX «bù¬‘­²ÚcÖQûJWªƒÁäïZɈà*2SNJ$mM”§°ôöÌ÷Gx¡ùì>~XB#ŸÚ§–ÍjšÛéžÒÊZ~ôñ›Í³YVÏnj$m"Ÿ…Êë}}eð]!ûÉ5I¨ítÞD¶ìæzº^vÑ­”Ò ZÃ2í¯ô™¾×Kú!G¤°ˆDÂ^ëou¬¤5°{úìüT²[ ?¸Rcÿš’F«ë`]ªwô¡Æ0·ƒ÷¾†è=Ä7‘ÿKn©ð‹çúš×? ³ƒ ùl1úÉ`ÀÅØÖL Ò[ ?°rÀqòó‰ˆÛÕ|QkÀÎèYï¯yÓ·jö”¯#šŠ¨ÏŠ¿»]­÷ÀÇô–Ùé-|%‰Å O|m%ì¨VÒ¹ ihèuø·-çùÅà5ßi$NeáÉì't½~„\Àê7ü^ÆZvHaÑ,ŠŸyÙn#ysÓÞâ—y­›uçÕ—ú³N‘êüÝnËÊ*‰a°­%¥º;¢ó#³ØZ¡³õ¶º½ çôïúXwò{9ü¼”ï塿úŸ VvèQøÐk}£iÉßû^Oùm®Tõ熒ƒUyáøŸHA}DDšÅµk:]§×‘Îu¾Ù‚6éUuz‰híKdå,Q˜8‰å¯ãoÔM…hcýl«-²W¶NëJÅP·>Ãó3À÷Ùá,ùë5>íú9ÌÓ¹È}›_–òÓcMlô€ŽBò¼à\A‹d`ý³h/z©nímƒ]²Ó6Å>·ÞÚ@¾¥F ­+’†¯ÜÕ~VÙ €i÷u¾þ¦‹t›Ñ™øþu;eœç_"ã}c µ·f#+fÆöŸøIwÐË =ï$CâAäÁ~xˆÛï°ÃBìÖ¤: ­•QV©ãùQGbûDà^s{ Ý\Ÿ“ ß^½§áˆw¯ãUý¶S€ˆOiŠÇÑÎö›À†m“˜g+XZ2AYâ ¡ ·öž(ÈL^ mw¹U ß ³Ä1Ü„dòÈ|%áë 6_¦Su¿®V×à à rß%;|ì»Z²»;üjBð¢‘òFã®ëC>ÏËÃ…ªÙð‚ÔNu¥A¨ó"Tòù©õÉkjœÇþ~Öç乨¶ ëÿŠÌ#t‰îýÂÛGHêvGÆEþXÿ#X »6 _…mµÖ7aÿWšš÷§#R¡ŸH–m¬F®oV>Il‘ÿÓ*HΫǧJ‚ oj¤Þ¨®ÿY?`¢ŽÑŠèc‘ûv-DÇâ1ÉQíhWêÏínÏ,Å;Ïá±` Å}§Ï¸< ¡…R6×îÚ!‹¦_†‚ÞÇÿ¾²‘ùŠÈnrþV­êwèŸ!ƒŸò»^·ùþGÍt¿¯jd4t4È…´nŸo.¼þ°nט¼32áûü¸Î'ñí­¯ž¡Õ"`Ä ;B.Ü ä’´üŸ¡c¥ó³Ë&$¸ƒÏ'Â’nïöEpn/²Ó5Úƒ Áöa× @Tò0ذ= @ XÞ{^w“0Š‰Í‰”˼/‚…ÿÞñ—.œ1¨”ZÛßý>ƒíBËyÂŒTºù¤ ÖŠYOn°? ÕÎu<{þ¤ u,ùnŸ®ò³ÏŽÀ ^rLt8_$-q]Ú:é-‹´7µ;|é¾ïÿ~ôˆHr{Ë¢6ÕF“줖4TÁ_©a¥)ä’Äñ_úΖ[‰ò Øù1HøœØï¤}àÏ‘,ü.G¸{@]Ÿ„[ðü2ü þ{­íæwŸà*¢@ðÿ“DÐv¼áœª=™p¬°¶ÞžÂ´Bƒ¤‘’TÚ“ÑΓ¹ßñ™#ú½Ü‡|ßö-Ä}_ʧ߬]ð€±¾Ë÷c,;=,ÑØØ9~î¾Ò†1wx»þ-ßûžbK©¢[SŽøÒRf· vBI’` /®PbòñA¼ÿ 2]×8øpsÝÀ‚úÇt4¶ŸÇWâÙ^4Žè¿Ê+]|É®E`E¥¨|ݼ¬S:…Ìb­ì€ÎBg·ÕõØ­I‘¹ÒŸÃöya ]É 9CÅtÔ|RI¦ˆëÒu†3M—I@&{Iæ Á{§À|—Â÷:÷‘ñôýØ÷ˆ¶ä;¥e˜„Aûßóyÿh­aKlÑ´½=^À2óWóYKä®àÏ e³ŒºPâ[x"?5õÞmòÝõû=–áûï‘íºîÁƒ·j¢`"|n‡þ¨õÉlœV"¶£íó´€4‘©nñžóÔI=Ðâ[K¦;¥+È7A”»ÔÕ¬6oÉßY ëfm­±þ*éƒ~… ;ï¤vu»Çc±Þ_Ý(×Ëy­ïãºQ ‘óÏðÛ ô3Í÷|Í¿[ª=e­ÜÀ;N«t”6…?Œ¶… üiÏïúq®B,Fä€ }J=ô“õ…)ÞÒÒA¯‡3HY"I`­Qm«ïW¿ÏÞEìþ†õ‚ýt$é j%µ_t ² ý\$®ãÀt&kuÄ{oC8v—·m¶Ù&À‰›O«›’•‰Z PÏîû!µ´¡xͰ ×I¨{vËT2TXÙEPû9í ¿òŸÄÖÍô"¸?ž[)Ü¿-xÁ þÝ©¥a‰í5†¯Œç¨ëŽÓ¾²£ÚÂÿùÝõBNBm\Éï‚`ãðý"V>Ü ØöwÅrr@òâ§QüÞo׳æÑ‹L¸…šo¶¶A®¸äíõú‘¶ÂÓ]oÛËøÈ3ýL¯ÊX%}¥ÒYà‰­ŸæÒ4ð<·[h˜‹gõµQ!%"êÛ4jÂo¨‰[k½ N‚Kÿç–eR’|†ì]˜¾ÊÏu-йévàûõðbágkv´QÓ6ƒÃu0¯€Nn²Q®I7$oïND@CM±ö5|j>:toËXNs“£Ë#}êàÖ0æzøÄríÔ)X9¾˜¬‘É䳈ة®¹©nÑàç®÷åøÎ,°n0±u5mi0`~¼sàÅ•5!l¿1R‡ïcyæ±r“ ÇÜY™p¿ù{õÉø®þIEä¿ "Ò¢‹Ôðà&Ö*¨çÃRP÷ô,XÊÏÈ>»y‡aýgÕÍsÛMöï‚VáщÌõìÞ‹´®ÃemÁóÓ´'9`8ßC{“Ûúº1/Uîk2çz?å!µ@zjŸ´~Gˆ›Ž\˜ ù£í¶ãÒ0ˆò§–Êð—1à^ sg·ëkÛõÿXDßÉ¿+ÈhÝÀ±È|ú*d¯w~V--£Ë‘x±±<˜Å³Ÿk5pPÀøÁd·D¶v<鯀©ÏA×?«Äæù[ŸÃª[ »ÔëÃÙ¤šL–)|¶Œd?7÷16Þú„ÜæÎø!Æë7صyn¾}[ s=ê8ÈÜãúâù{áÑ8²ÒžÓð0ÝŒ°§£<»É“E÷€$îªëúèfgç¥f4‹jñí…Ô ¢ü…‰þŸÅõ3sÓÝÝ9ïG~ÎÝH„‡w€ïõÒ®|o©_õË‘ÅU?ñyxŒŽ ÛbÝ#åÕÝåÿÔ÷Ì^‹|à‚ëÑÏüh°‰¿x„ÙM¬\öݳÜô\w-¦}®µ‚(E< ?ò_&ãE%;Ãfƒ‰y×Å{¨¶ÃÒcÈa}ø©¡ïr»ͬÐòú™ÀíxN¾ÆÊ)…öù.°«a÷ð¥DÆr"h‡NõÓãn •ë¾#æj¤ýšÈF< ê~¸º’ú¯Ÿì9ü-.5ÛB,ïzw-‚ý´&ÓmÀsGâé bÚ†”®æ=ì}ÿHhÏ%…~ê;ÛnõýßÎðž`Â<ôõЬòЍq¯—µš…gÀuÝ̬#ÄÎFt4•L8¿”‘IiÀ‰v¢±ú‘}†ô)ðýͼ;¾5·¨Z7ˆòç’¤ÒI>ÃÞ®k™ëÿ~ÄÏ6ï+—{¾ÿ—ûê„5Gz\C|,÷]]®i›noÅß_c¥SØu,1ÐßÏÅpÙ`"ž°ÐÏ5tû!Kø(YLä, u÷ g éAØoXßåÝÍ|‰n@ÒyDÇSt}ÞÏÐMŒw„Õ A”?¿$—úrUV~㱿›lzžÌí$t¹à ‘}mC¢á¾³gKþNl ð·*|›Ž€ý¬Üge°üÈÛÓ>G_ߨ.­g?#W?²ákrçZ<Åu¿Œ`?hü+ì&QävUÆ%ú+ƒ¬«U ¶ðÿXš/hˆ”)ì2ŽÆö{x÷áñ‡@­ópùùhd:¸Ë5´ö`w=|?¾Í!׳ùø@0í ßß¶ˆ$ƒn&NžÁã÷wá“ørûˆ7Rg¹¹ASx¥ØÁ–ܯ°ÚÙe&ò/båöú¼ D$vѥߓûÇè0tpPK[«`Õ°{×óÆ;ßhK¼ïEÃЊëyøX]=`0„þpÉòèá2Ïø º™0¿k«Bôĵ`ï}ùÇ: saaáýisþZÇ|ìšïòøþ|Œzg õÝ:¼¸•KUü÷*ìÿ+$ê†WS t‡÷€×ôÄ+jñ:ãÁ„Kšä‹dåàü׉ˆ©0‹U0 #DVR´t'¨“_ÿ¼&J9£iÀÿøü)ÿ¹þ2ê¾%`þ<äÍ¿?’ýFÀú*€Ûý,h7 ?úê£ µÌð;_¢ƒ3DÑV*êÈyË良FL-Bƒ‡Ñê&?[¢…µÓŽÁü5š*ì²"rÓúy#ýüYÈÜ&ô½—¬ŸìºÂwAè?û ë;ßÏOø^é'ÛÓªð_7ÛÁUÿnzö0_¬ñ{ã'÷©·û,x9?}D”%!Ó:ö;Cö[ð?Vé Cd3–Od+}å²ZÝÞÕ•ØÑ} ´/Ÿ€NÖPÝ:ɧ¢•ÝòW?‚Ø‹ë7¸ìV"`ß÷™žÜÞºáýoô,¥´pƒm~êá ²äB¼}¯ºk¼½Ô]óšD•äú!¿×î–Þÿ5÷)UGÈY%$›”•%*Üüùù >| ™Ý~ŸUÈ’[?ÅÂÓ|?ü'Z {¨fÜDã“ZVœ„:!Üù Z˜’¸¹iUÉ{îlä$ß½$šÝGü”Êùíô¯ÿ~¥%Ö’ÕÒ—,p{®ÆªnþÑ;j8·wÛM±ÚO=xÔ3˜¬ð¼ÉTF7õsszËj™ÐHDj åêv;ÖÊ6 _ÏiÝ‰Ç 6úúçˆÕ·­Ò=Øÿ§UQJI9+ ȃ®¿y2ª¡DæÎ½ðY7±þíØN$r|"~z«£l7–ïk'­t } e £ ‘§ÝrÓàsÉ2­B>¿®Ù¨ô’ðoFlÿ9¼>Zدn×^rX)â!—´ExÀvX“›ü‘[‡·è¢:ÿ¸©‰m¨-§ÚgKm]°‡!ºÌg’BBé Ödq'›“Y%lÿ½5°Vœß¯Ù9®%W×ÒÂ.Y]ð½žõo1ynvëE†ŒÒ§§Ö½d£ñ€¶DëýÄÇÿnÕ–j’OR¡åg³ËšJµ#ÖÌŸ_‰éçÝÄF²Ì<>ÊÆ"aZl[“¸¯ŽÌ426/v¢Âqjq¿»F6ÉwÛÜ@5;ôÏ»ÿÙjCl)Fž/€do‰õ ö ²uÿjZ[û‹žÑè"Ž ó‚á.*3n¯ÔkŸz€'ÑC)úá+u ìÏ»ÿùê&d¨”!ÓåÚb=—¹§Ç]‰„ÞÜ Óõá¾w0Å ÚÁ‚oóñˆ0 @1¸Q8ë@¥¶åZ| l.HÒK‡xëÿÛ)qá§µ‘… ź‰Èí°óØ¿ÞSwýº?¼6¯v³«6ÄV‘ø½'™>—¥°‰vÖÜÕ²wdÀHuÖY{õ¤Ç¿¶¾“Z_KèïºÆ_ÓqÓob`Ë¡Xzù.-™…Ì,ºÁºŸØ9òC/ìËÆàïiùm¸Í¶ É82ÐÞûæß¯µrXVÉK ‡ÝÝÙ¯eX»Üm;vºˆ‚îâå´‰%|‡üq‰‰-v´Ì3¨ãiXAæ¨AEYLW[ yU ÚË6IŠõ·+¦wͺ'ö·@7Ó»§ ²6vÚNØ>+Šü;ì2Y¾ÑÀò‡ªáºÁéé%!‘ñý³UC¾–/e¹Äs;Ÿ^`ë—ð™–ààrd»Àò€ÿy7í¥ ¬H`1º:n‡íË€ÒèL0ïCœ}ðo«§|*m©‹RÂoKÊ„ ªuà‰Å”L„ ì ä•Ö"…za%l‘e , <°%d2vXÃêÇÒ#Øü%«²—¯ä¦dµ^,¡R†ªê“@e»iJޝ¡{䡼•T>Ù©€úk,mŸ©Lÿ__¥´D‘‰‰ÝrN+˜;Õ~Q£‘%¯ÉRi.Y$£Ô”9ÒYúí_»Î°Á~Ëùˆt¥$‰¬äö•´–V2J`ãjRTòS×´•*0è¬R0Øoôïõ÷ú{ý½þ^¯¿te—\RèíÙ-(…áE)%³¤‘R 1Äw9ý×W.ò~aÉŒy$µ4¥>îÉ=Å¥"ì8'•RjdO"É`y^eI":;ýU«„”Eö:2XÂjM­­d½t½h¥¢\’*šT¿Ð5ºL'k ýRRq«'EðˆÁ~ãÁ*ê§Z—$½nÑ’T¹å¨hr½‡í‡ËÍaÓ¨wØ.Ûc›y´»¶ÖãDAi)#åCôÕî¾ò빩c:`ñìzNóZ4 oÙí®VÒšRIŽê\knµ¬“­´Vßö[üÀ{glÄ ð×®TÛ H{¹!iµŠ~ªk5}…¤§ºl=å´Œ´*¶ÅNY oÍÐÃû•ê÷ª… T 4´¨ú9õ@átZ >©Ô•gòö ºoã{4µ¥°“šÂ>µåò‰þbÉ­‚-°YþDC^›n£,'5r»l÷,ƒ-Ñy’Ij}€>DÏì®Ök;]áÏ€§@²8Û\ë6ØÊhKmeÅ,#:øÈhfkͽ•¬”õ¶³DB_+D´ŒÑÖÔ‡y?8H…ôåetEú(VÙ_jN˃•O¨ëñÖŽj }¤I- Zq}’C»+žö“•¶ÏìûÎÆY;+Ïo]´:žôa]Ë@ßüÞ Ñ-ºŸö›Û.j4«l¯õ¬¾Ãþêæáê82B:«k¹ð‹P¾§U[kh)AÈtè µu°ï­ˆõÑ©òñóه뉗ëwÚÚïΌǴ…ºOïëqbáv«]l0™.“½Wwö¡¤…#+¸óÃÝñ·÷÷µÆ ®£îi.Á<éÿ?_¥@ýA­rMK[ $‰deíŒÎA~w*ÄuÅ=Ed°ÝðžL–Å [uäO‚®îëMhIñް×îhû‚œÐXxª¿Â‰BÆŽßÿ~•‘FD~IÉ!üîÕ²æºÂÔ‹:Kgëj¿§Ïõ8é»7¼Ö~zO ‚ “Õõ¶zíÏÌ<×pvÁŸœˆ‰öšX°À}n˜Âz§!{NSpªÌùZÔbYbnQÀ»-~ïúFò¿;ã: G±Hæöó÷ÐrMÖ»ü›ÇÎ"ù9=ϳÞúÙ‰þâÖÕ:[TrâZ"_À(CêÊ âg•ñ²Q›`÷”0×uòŸð½·òïUîߦ‡‘1-ÖþÚXs#›ëop_Ç}÷´Èö¹e7ƒ ñˆ‚ßm >²\j„XÈ$ù$‘ÓdH•ø eì Ö<ƒÜ{‘;²Ýý²[s'AÊ!uÍ#¼¿¸¹PEì:²o×ýúJ3âµÉl4Ya‚I`/¼8ºý § þ¹¯ÿ¼Jùîª}»Ì{O1|મ×ëH´‚OÿÇôˆîÐïô¶ Y_AÇ‹DCt"%…±TXú8¹”Œõ“‡ŠQ!Œ„²¡0Å DTVi!iƒ-îXÅÉÏÅeª¼‘ìÈñŠwïºà>DæU|¹Ýcõ^¿—wH›«÷nG§ëØIÃéñÐV5$^ÍãÔuøP{èûÔ¶Ævœ¬lÃm“´þÚ ÄÍCrsOòÿÕÈkWÔíÙ~‡çï!öë0À g—ð„½ú­6„_Óg`ý*‚[<šÂÜ.¹êDŒë™|“ç=EñÈ{áÉ¿%ßÀ¦Ø/öÀæÛ$ê¤ÁùO«ˆD¦^_+§d;ò¬%z]÷×b³îÔ_È€ýÉÿáÍuñ[ܡ̕¿‹õ‚~UÉ‘/¸/—¹ž)cø›GÄÈCô HSÎ L…ÆP-ε±VI3੃-ö+=È÷1¹y8ØõŠh~êÏn½ð[®Áh&â÷u÷ÕϦ!:Þ}ßx«qüŽŸ¢HZÿÿÈ~Ò•<ÓÅ=ÙÁÆX Ê!xQ"2Â\¿W¦œ#»÷ó¿­ÌðÝÒRQS¯¹Îÿ®k½ëôÙ”÷>ê·8pÞÿQØ ÙNâ"öOŒeŸÂ†ªâߥyä'æN¢gêºÈžò§fŸðý¹~ Øc¿ÚM»MU”*èÝÜJˆ¦}rWÃ"A*ã¯ðÞëDñ[¼üïëÔÇŸV4“Œxß Æ¯õ‚)3˜;ç™’z7ý V GúÇ䋳d‰ëäÎ~.Ö%øÂxëesÀ€ÑvÎŽÀ…BHMΧÖר [(¤Ì»NN¼†·{~âÇ&è{þ¸.vÁ¶×þ4€;Ûë&åtê©í𦄠TB;“|¨U<ëßÆŽƒDZR¿r›Y`¬x  Pw8ø+‘$–b2w=é²R¿eA–„þŒÃ5ÞûNû_ƒ',ölðšJjWýŒäV^§ó7[´ ùÒuuê­ËÑÌsžý˜x…åݬ´÷ÔIÍ©“àù#àýñ°ºúeˆ¸*FòË3É‹í¶áßûµ¼ÕCú‡¾ÀjdüÅ÷»Ù³]Š×¿÷3PcØapà¡Æ·;’AkØ>ÍÂ_&±¡²J!n±‰ŠÆV ݼ&ŽZkAý$¨ÝïÝJ†ÿ/½vQ¯„¦ž G}ö†ìuÙïïrÝí¾×apÞ’T;qñrÅo;£“Qº¬ï¥/e³¼“µú#YoT³÷Co-÷ÑÚäÜÌ«n8 ÆÛ vPÍ|cEÈðMÍ])ØÃë^%Þ¯‚-øü*¦Ÿèþ‡A6dLÔ0¹`¾™ð×¥x{-sgÓoÂØ =ê'=­Áú!ßH.¯¥ç»›³ÐOEèí'C­ðµq í¡é°üLrÿFë„·_òïWÀöò7›œËÜÔ¬ÞäX³šAe‰ÿòT6«»¾¿«ß¿ŸûÞÿ“‘p$ì×ù¶ëhææ:µ/,3Y ?÷Læ«· ÚÃŽÚku< (ü~œ¶vž°› ù”Wp´Æƒ"¿ «h8¬¹sáW5ÙvqP¯‡–ƒ‘½’WÝt§ÔT~°Ù|»¿~‹W÷âw¤öéá{âw$šó࿉ÿùXv ºqŒg?h9 ¥·l~Þïpbþ ,ÂÍ‹=†N_"÷´3]-!f¶pïa^á6˜"¨ýï«á}£åºŒý²¥úÎߒdžðÞ÷‚Šn²I;¾ç;ŒÑ/µfÖWòÎxFss™¬86ݤ¤zLM¾{¹>›¸@Ê0 î½",„#9mÜ ‹¾A3ôSå¯.å„̦ίh®ã©ëü<›®Ÿnò§ƒó³ðüAÜ×ןé]ª•µ"·äH—ÙÜ$ì/yö;˜Ž›ŒvÆOƼ <è{H»N€¡ý¤Ì8~>¬››äxáu?!85¾4,ˆò·•xR<ÛB\ƶ€MÏ7·al+^}ŒØ†‡ [@þ“EMGôÖ$[NÓªZFöŽ£©ƒ<'”¹ÒcøË7dÿçxÀ<^ý1™#·?!Ï÷à ÈîgFÏ ¢ü#¤½œãÝž'V÷Âóçã¡Î‚næë2Àb¬¼«¯sLŸžv~ ®éNU´P³“ëëj9B•»]ÇÓåØx5qî¼ÅÕDüÀ_y­ßÁ¼FÖÐBá nÒbk V¾×qA”Šl”¬¶‹Ïð=¿Né[ìêæ¸_ô}?\¿ºÞ®#Ìj¸ßohç*½Ö°Ç™’ÒŸ‰¼ ‹ºMe´i§‚•'°yZPþŒÿÄô¸ï÷PÛÁ¡Ý©ÂÌ`m d3´]åï+³%]çîÄöûÔÍq|Á¿Ûðß¾{ù1üõ- ðsàzã÷³<÷ßN†æÝŸ•Ÿ%9µî ßÑÿ$ú™Ã³Wÿ»ˆ„¢øz6,õ=4ÒþW„{ßúôÓ‚º7¦‹|)Wô>•œût÷ ¹Ê}ÖµX4«±X‹Eå6«‹d]‘m¬p_ëàï½l¬Î‘Üæ²†»60ÁOA[ 3u ¯´^ÅÜÜÛô䥑ËÌù' %»<—qþJ]+a'`rüU¯›Zβžß\wó‹`øß Ì1‚oÈs@Ìê:Í#jªSÍDî)èÈ}CFy€~ÖûOÈÜ'ˆŽ€ß?$ÈaÇ­€U±UZ=¨ýZKzØon2×;n§°yt› 3y„JP\ç·"¿ûLw2ÖwÓ \÷÷°÷ $¿ƒôÝW¢ ×'|;¼q>÷-ÅúѪû4/,¿O ÆB‘_âYuâ?³­Ñ`N¿²Uä_Æ»=Ç»^´)`d›°¡€Òî*ðïHîzàì#¦§ÿc|ïÿ¥Èîºï×üÄÌqävS‘ ›Ÿxô'ðÃ]é:Á#OɨO© ªÀ‹Ë€…îúO4íf´>Üë]¤¼4–uØ{µÿŒÿ4þžÎܧ§þêþnþ]6øy^ÓñÉ|w½ð×øÙ†-t™„Ã6ƒ ;ðé>s,7®øOŽS¤·Mh¯Ñà )á Ádð7¸« “ó ÀaÞ÷Iu;Ø¢Z»éç^=Qwf­Ÿ°Òcâ_»ÐSð‡TüsåŽÄ%ëßû¹óy伺l·“¸z®qÉô‰}ÿãwŸÚà­F# $€|nÃƒÞ $äÅ~®³¥¿«ëìÓŠ÷þ¬æ5~¼›\æ®ü%ê§úyh®ëçh˜ÑM«ÑÀýæ<§ úîwI¸©®û÷u¤ß÷Gµœ¾;r8ï-2FxªÄ¨xAr8@U vÔäÀ–øý¬ËÜ'Þo5ŒØíe¹®nâãzÜé`6™oè7nô-ÙÔª‘é®PÅæ¶ÁxH_?+{)Ï>Á+Þ9/RK¸Ê71 («=…#¦µ‚ÄAb"ÁÍÓL+ù‚,i'Í‘åïyr}ß¹ÄïQÈÙ»Àn7ël½ïg~žô™¶Õ/‘Ùítܬ#ñ铚ÍÖÙ1òúüÞM œ‚¯äù7ñ‚cpŸDØÿKP/9šÜ‡GÅù  ³Ï5£”ªôéµ²”’ë²7€èn‚áKrá-ñ(žÊf=•Þ*<ù¹ýkm¯­ðþàyZ+k¤©-AúÊÄõ!ß!~ 8¸]ò]ô3Ym«†âš›rJ]¿07÷1³å·6š)¨ÓEbjkI++å„ÏjãÈêë@Á“~z•«ÛÜ>¸£~nÙ tÐù¿ó³Á"XIIý_¹SXh{MÖ¸Ë_Ï">úQî„ì1ÞÃ*r’GoÁ6ú™ÊN£áøŠeá—•%¸=PCébI"OÅueu3Üω¾÷ù 2Ûñ/˜Ü€ù·@þeXö„« @ïÊVënÂÆÀ·ßAÀŰœñ¾V>ËßÜäÂá!ÅaU®‹üð?–ÏC m¥lˆÖ©A•²"þ+úõG¾«Ÿ}7’ìà Q½ºÏ+—·RÑ×#ÃÀª¯@·4H^tÅ–ÝÑDX{†Í &áƒ@Ë…þ H2˜~¸OäwÓ±ó3®RUûÅzj¹TùEâkc©ìû¶Ç·ÓØoï|LïWl œØyP|6:iƒÿoð\o“%ÊÚwHß i>Ež¾ e8¢à¾±í&–ܬ€§ÜbZ:äé?A¿G¥&÷¹Ž*+ìL§¹•D”“’ºÄÕeÎÚQøù~à:6_U× îq=N;À}÷ Ï-¼8ª¹ý|-m4|vzd5`õÎ=Ô7èn<<`•Ÿwz™WØ’œCïü-æ¶rxÎÔÐ#"µNò…†•Å&+¹“,ýµ<,ÀÞ!Ïüb ^½‹êå¹:öÁšÁâÛ×:Ú*…ö#p”#“ïÏbûÙøÊIÿ™òcßýx6x‘ëÇÂ#"?Ûƒ-<+¢”rŽj/ àXO"ÚM5‹ÕÄÔ.‚Ý+Éùƒ‰mE;n2|=ûÚê¡öÖÓÆ`ý¯ì ü¡.œæ ~“çˇ@ÿüøƒÛ%¶}œãÕÒÀÿ뢷è¡kˆ˜°W^Á†ë ª%(˜=ÌÃׇáÅ;á‚Ïàòátc©mÖúù9ðùD}W¢¿”=Ñ&Tu¬»Õ±ö½9$ùÄÜD®&\ôD—Á‰¶Á$vø|0Ê–ZsûØ> ¶ðâz¿R@ËÙsªÔ›¼ÇAÚY»Áo‡ãÁWÞ±Á¹xô4â9XÞßok­à?—ÐHkž3„,mÐ_cë‡_l"rÜѸ`êMõ{ ¾ã¦$ v}%—ÙX t°…÷ë¾t—€æ%Ó]†½»£´0‰Ý^÷ÝØrˆ¶’ú'¾^Í>ËÏòÛ÷páöøF?ß÷ù±:hDT܇!A[á‰Ï¨ƒGó7ó‰ºI`îZÀ;‹&+[t¿†ÊpÙ(2ÝßéÙa}{¸Žãù#aó«ðüq°‚µ°šÒø|ªD7 ²7õN'$›¦õÉ´?(™Œ8hGöX¨Güç\¯a {ѧ›*Ö’Z*ß$¶ÀhHéŽ4 „!n#×<¥w ’ñý¼Ý¤¿Q^ó‘÷*h6ï„—|JL„´â·Æè« ¾Ó“Š'–-ÖÕðèMhl³Ÿ€>ZÝLµ{pä es¢'"ZÊ©!¥p_ªðäØä”ŸqºLÝçYW©àÝLÀI0¢ÙØÏÍv‚Ìñ…îHÿ¿ÞÑÒ!bÛÈomˆ™ŸÐÍžá&&rVúÙ³ðŒÅ0£¾fr…ë7D&[ð?V©$Ýañ˽•C³Ð@$¤úLpؽŒsû{ ç4âb‰¿&x] [$ÌžGOnö§»F2Ñ×ÊWÕ‚»ˆ–¶ŸîZ˜ÛùP ô‹ê»+g—±Áü•BZËZÉd±gÔ÷™OŽtY± “Ëᯇ‚Ol°u d°1!jòÇŸW3©,ŸÈIýÁÜçÀõ©ÑR`ÿ‡T1®ù§ÄÄoØþŒ%å·ÔÜúÂÆÚkj¢4`üP2ÜUrÇ!´T ÔÏo·4 È7žç5àóÛNmf>þ÷k’Ä‘ó’/ïÊ;îJf¿KMSO(Jž+g®ž9 ®¥¬îׯö»¨ ëbw7#ÂŒwWº^k'éW<Ð2ÞöÃm ¢s·çÿdU•4R]âêÛFµ‘zµ•ï_T(„<ý¹ÎðýÂÔ0ßÚ›g5xDÉô„ßõ}T¼ß›Ì_ßÒÁ(¿²Ÿ,mà“ÀT)'Ÿ[ÀºÊIY©+ãõ€µ·Œä½0¸^Ô­åø½66wÓë³ÛÏÜFÚKøÙÚà÷Qì^ãf<»™Á/´ºÙ×ý¿h¶®Zx­þtÆË+I¤“DÕf¶Úšr«Â?ÒŒÈÒß’Û AQ⽫²tYè¥ ~rQ£“2š›xø2²>VÉGûO@ʼR;÷¾ø÷«a9"_YÙÀGñÄuB2Yj8Q¼Ý]FãŠðø·<&°ášäø¯ÑÕH°??e1×ÿå+²_k ßJ”`‹õ/¬bðÓrU>·+6IZO¢¹™å³¶–’¼˜<諹 üˆgÄ$ "Gt+úXM³þñJs"ê«Ë¬Eƒ-Ò¿´>êHtÙ!wõSØëN[lá0#Á»:`âJ½‡mAßÁmê‚íìW[`Óðºè¦:Yc­y ª}ê7 ¶@ÿòúâžž‡%§]²¤_ÉqKáooð‡©¦·0úé¶VËÚY°  ,*ùì´Í¶ƒÈw’;kw¾üC\•Èe¤•¬”Áƒü¦vÄÚ2öáÛm+®X å¶WVo˜‹½3ÆÙr›J¼Ð :W’ó*ò*áYqé »åš¬ÔMv{Ÿ³laY»ààiëXma×ì±½ ¤°§°æcRK’‚ùÿ7,ׯ&‘;­¯¿Qóo·‰J¯Oɬ?Õ@6‹hCz¢ßÀö–Ú;-¦+áÒ}‚ý¶ÿÂÕH*JY%õ©xZ#qoÍ¡Ut´Ü“ôºS²j=½)C¤»ô– ²T>—1Ûù¯^­%œ.„²~T@"KF¹ “A·&²Dà!™$±”pÁ~›¯¿×ßëïõ÷ú{ýÅ+%LèÿíYQPòû¬—n_bH2Ébºzýµ+>\¶$’§.¬*_SÑå–üT–¯¢H_ÈW¸U¤´äB#!¡¯×_·ò {,¤mD%× î3\ŽH?™$åK¤o#Myä¨Þ“jh¥’|Š_d¢v,ì7þ—¬xpº”ø|_©¢Ý5–%±âvQj(-(饃vµÚS§ZKfqm Þ‡g’lRW>þ@;¿ÿy%…í¦—ÂXtŸôÑT½ŸØ [¥™ô¶_/ôˆuµrvÃÚØz‹¨Xká,‚NÅú剈RÁàÿh%Ç’i¥Œ|!aô[=§1-ƒU²jÇÎéZlœ\“Ùj (kŸáߘ«ŽoÛï6ÄÆjCÝ.ŸIv°ñøêûW?= QþXzªØsh…ìwnYl‹hÛ¤¹¼Õ¬Œýà÷xT·zö½õã‘ú6ÁzÛl]«Qµ)žó!Êé“£ƒrrQNkQ$Ll¥­˜=ö}ÐBáóŵŸÄFæjVÐj¤`3¬.ú˜kãm°U°„h+±6!#|Ïÿ¼ÒõɈáßd«&EòÌäËd×ô˜^ÖÚ Å# ,Zqç*Øp?5­åµö…•$&ªµ48ìs~ÿÚÊEܦ—ÚŸT-o-«¹-Ç|?—GzDÂC4¼à±4h'œ…µ˜xÂëŒìɬ¡ý„.jÛ"<ä‰T$K~830rÃrŠK*™"eðî”VÅ #Ù2Ýã{€»,·õ¹¶³€ÝÐT`A{¦ }ÿû§Ú}”Ä¢Xküâcke㈌/uü!U°û­,p¹Oñ×íò«–Ǧ‘ñæ¢È¶ <[¢×4 V-ŒÔIìžF¶öBß’á÷õ4z©†4´¤ d,ôQÅ~±í¶ÅvëÏR3ȧÝþ'+'’—&¯7×VÄj ¥ëaÇ’Ûö‘ÞÖ”à@ âü…ÆÀ;¢Z-kn©ý©Á{þt[#«Ì3^é{mî³±.xÐTžý™|‘°QŸO~‘¾šÉ«º^>·õ©Æ±ÜöROúޏI-½Ÿø›—G¾häþ¤öFY,~ ¯È×$!Z[hó핽$NiorHþ,¤L/£tÓ;Í®ê.ÿYþaxOX cOôŠžÀÂîSþ‹ºAÏhr»‹DGæ|æºÂf@ ‘‰‚¾b<¬>»ßòñj9+yætR‘°<ÕlaÉ ‘"“…·ëH¹ù¢ÃºQ·èoz¹·óuG÷á4¾?/c`a,¿#æ#ÛÁsèGÚrM- ߯‚œ¹mx1D:ÈWÁõ¿XUÀý‚púl– Û½ô]ý/ê =ˆ´® ÂBü᢮×üîNñßôg¥Ýà|ߎÁÝn·”Øÿ qšñ‘ïVÝšàï´µÃ1¸òAÍwdDú,2UÞKJÞmÞ^#íd]á÷´ìÆêWýY “Ø=%¨Ñ#~(2dß31&œ° š»ˆžŽsÿ=V8æT¦û]4Ó¨ÏP#dÒ!.¦„íµ”î²X¿½£À÷_áíü´.Çó'ù~槸ï9hÿF'ï'°¾äûÂdƒâö)µQhbâšîU×ëhÙ"Ÿõ´)ðá<<ÚÑÚÛ#[c3µ̲x°EþÓÊ-±É|_ÀQöjµYÔÇ©¬…41\ £$†õ$³²ÃyRãËY‘)¬§0øÆ÷½[ Ýê^‚ Äž®£ÝkôÉ܉¾¤Üšáý5À…ŸxÎN²Å#b(•9ŒÌFÔµ²0ˆŠÔÇ{í’åœÔ‚Aïýüåæ–æ”Ïe>ŸŸ{“ o€ë/ðïX|"ò¸ÞÆsA¿×0£°vžü—ÜKM´ïò3°Þib¼Œmå™{ð‘ FDô†Z œß=™ƒìPÝFQ©¥ËZòmHÀ7…!£œ÷£û“?a2ùˆk×›ñ¹Ÿ^0ìƒü®óÝ9Xëá’Žç¸)@çˆõˆä?w.ÔEÂOþ¬Èž¹ËŸÿ|«iy^Ap |I]´I߃¶ÉCħä©$™o†V$ZoôçUðýtV 9cÚ~Pnº?óÖR‡#WXdŠæ;æ"CÄ-^â—y$¦%´íhi·Îô]žÎ’ý^á/÷4, 6¯žƒzð$ à+[Âk´¥¾ ×É3âý'%2öy‰·ŽÑüxï½¥®#ø}°ü–ïæÖB{ù¶§ôv½žÇ&Ó'Ãßwªc·¸ÿ Yñg¤oÇ_¥µÍhòýî"#m2ô‘ÓöÛn<à û‘XÈ«¿Rk»ÿ½›~RB¾Â‡câ½ña2ݰ÷d¹O–ߎ&¢wýši¤‹‰€ßÈn×AËZÀèWÚÄVpï5´4ÿY¯ÙÌí:Ž'„…I¥ÆûóGRZ" <¨ÚÐÜyûˆöN*JŒ KŸ•Ì×D\Õú@[Á^¢ð¾zûi/qˆç=d¹¥ú(° ù6huÐ}ùðµ®ë PÕöH*þ¥—¯:¬ˆo‹@ùX ÂB¢â#$nOXnØØr‚€_‘%>%3ÄGw%ƒÞÿ¾Öß$é©ó•mªÅ±Û>oÌÎðsüa¬Ö —_Ôoµ¯þ€Ol¥&^¥ñ,¯Ôôý/÷êäCŒ4¶s6‘{vQ;]S‡õ_añjdVð¤àz¸bC²lOI½ÜUŒº'Ÿf€£Ä„ÍÄÀ[]ˆ¸¼Cw8¾íÃÊÝ|gØ16‰¸=¥_"ãøL: >ZË7rYûê("¿ŽöÓU6Ó†‚çñœ¼‚ ®ç}gß÷(šÎúÔ®itmô‰Y¨Æ¿W×£4Ù:¹*)– ƒì÷†ì¶yÇ`ÿ"¶(o¿£Éýt¤ÖÜšY›ãùS@¾^ú™×àÜ ¢h+¬éð„<ÜâÕú ‘)­Lá n–ÖAÿl ‹$•Ñྠs>â3.ï4 {xO,´p•ˆ_è§_•6×í2‘ý’C#mµ,ºp'åÝ| 6<ï4UC.ª½‰v,² ½Rõ§7âIóø~ˆš©1žô–øI®9ƒúyy"É#¤.Œõ>V‰èùÊmrÜ }Aì^Å£ÃûÑžZY³ Õû¸‡Ìýt Z˜Å3F!ÕTr^c¬[Ê~Ýž"zÜù¯%ØÚõÓ|’„·ãzP×ú>So´|(19±òg ¢üY%—L—bä·•XcùÜÕïËô{dj šÏÃ&é7X?5è™ÏæËdsaD½e,òÿŒDø¹5ÂHKdákáëàþ÷AÊ›>[†ƒOºî2ËÐÉ9"-:þ4C‹uR9ì?D¡Cw>˜þ\× mbÞõ¿˜Ã»Áo µ)ä 6ܹ®3ž~zÁ ~æ/ë\[Šü{¸%·ÕÈ|؇¬îDäYðÐu¾Ïí-÷'äçРäxjïà­RT6Èøå`8Í9â`)² ŷ׃íÛ}çï9ÚÙ£û8xÏP¶=§õÀzsà7C`|®S²ûËÆø~[o‡mV>éûG_W7ù%_î3#79BaÍîڢ붓”úáIP;@–&ÿ<’~T,ü\ßÈÙ†|·»¹ W7ý¬ÏÚœA G7Ê ÙªµA¹°æê„l0šTvߨ€DÝm°?éw YM\ìõõ‚ë @'÷`NëÐH!b?(›oê¯Áìÿ[ü¿&³}¿¾ÇDì nî÷Ýßf½Ç°ðBß÷`9p ¶.¯µ?–wS²vj ûƆÙC~«ôùÈáø-¬­ñ]c·û ¯©¬²Â+Ý|äP`ì[P`¯ý†™ŽÊá› Ê_BÒK4ß—)>ö9¨}@¹øíj|v»^ñ}mna·9àÜôpÙëçà¾çYñêŠØ|%Þ^Y.ó.‚tû@Ì^‹nRà¾"‚õa9©€ÛXoXÔ5ô=ÓQA”¿•””yøyxøÏ&|ü„Ÿñí¦sÜ@SÀ·¾ê²ÀxßÕb—Ï sÀ 7íË}©Õ|§¯ÇèëñbvÈÏq=Tú€ëx•›: ›}í¯”e¤Vv#JP1ÿÄkÁ=¥¡<Âfsy¿Ã‘îÑyÄ÷Àt×ð‡P\ÐõÀ}d˜§Žo¡&øT‹¢™¯Èü½ˆ[Üÿ9ú©`ëñú‰dýĽ«£ÝÙи¾~e*À×Ô?U}ØüÖÅžaƒlA“¿«|+áìªïp¸ éc™ë÷–n¾©ð]ðØðvy¾Gþáü;›XØî¹¾XO *ä/—¨ëp“lÆww=ò#WQÍ}6t”¿ƒ¯Ïàµßò¶JØ>?<9¡~"ÁëÖUj‰ûs)_1¨Ù‘ï¯#‰Û»3XïNÅ#®—ùYGƒ¹MF'3±ö<<æ^G3/›¹ÍÇ+–ùÙhóÕÍ€]‡FÛë[Ñ"ØLMeÃ1.RcµµÚàdß[¶¤³` É'a­Ïàcî“½Ôæ&?òÝ{7‚_CA„P¶œèÿ F4 <쌓ð‚9Ú=Ô˲X^ß'‰„=ØÝuÝCä¸>À[Ñ^t¬]ÊrãýÙm*‘±J³“cZJj€2VNOõ„TCê¯-² ÷šË>¶é°¾ø³›{šÄÜôÏû0¢EXµ·¯û¾ç·øw°æ÷3Áóh;q3ï⻑ÚU«ÑÓVòær ï?E‹bÈ÷I¨“ø‘aØñmЉÚp[Pû 4–$2Xª"‡Y^0é„Öþ¿ÂÐ÷òËÉNáë¿àóÓ‰}7éG~r`êà ϑçBëP9H$,æ5f ûtnÐáïJxAjêÅôÔÿ/Ðf:ËÌO¹áHyÑH|ØO|kTû×£Ú)49Ùï6í~Þ ‰_ðï>¾}„{¢qíGä¿N<–×qÕôy¤_Ìß'ùÒÂ|“À…ÝŒ‰MX?¼EòW™‡ÂýJYþÊ’Q>Ã*ýyßýܲ0ÍæÀn"sj c×yÏðþÃèä{m¥ñ‡išÐšÍnŠCð-@-S/êÃã|¹+;ÕâG#ÛrË*"é¼$’ýã“óï5§Ô ªô¿KSI*͈ùq¾G¥›ð¼Áw¬u1ílü?výïwˆ£µ#þ>Üׄ_[y+Æ­ýÒO†ONŒß7ýj€f¬;ºp¿>!³ÝÁöÀ¿ýxÀj´°Ù¡Ã­DFûä_ã'`u· Áž5].K*ø…Ô¢½ùJƒw/Æúí´6ð5?Mûfƒ|îêphx|y«eÈ}e‰{× ½ñÑcA+tÐÐ2Úd"ÀÕƒ‹ÑÄR¾/!š¶RA\ÕÈèm¨å†a^ÑJV+ØÂ‹»~T*IR-Î?"JWãñSaº¨;k#2Ù·°ÚŸ¹o!>x¯Hk wß 6 "ËŲ>~v^X¬_<ØX6cW,à/÷ÁÞQÿÄ#£¤û‡Øªß`ï}ùÇšA {UøKn§÷qþ6®Ma³íñ„ïÐÉ,м þ;ÔÊáù'ñð¾ â×`þ;Pb0Z3rû\«š»Bê&»k`Ó}ït7÷: 5@l ´NB®IH¿”x®¯YŽ7t÷uà"]°¤Ö§Všâw!jF) yÆzu»_æú]gà¾[øëš”-mýÍ ÀŠ'Ò3Ø‚ÿ±šÊ'ò’Ju'Ö}A_ž —Ä«YøëŸ3ü®€…þJ¨û|`­¾1’aá„Ô÷ëÑS™†^¾ƒ7¹«ûý5 Ø<=5âfuSÒzØ0ò3ûÁš…€é?ÿXe¥‘”%o_„­>Æ^Ia'qÀö½dÀ·þÊÈ,|`ºŸ6Í®¡H|\Ÿh-|?øýø‹»><]Í 8ãOMõ½Ôo•kƒûæç†ò“c–€~%dÌÿp;€[ËH‰oñy‡¹Í½ÛDö;¾û¦ò3 ~¦³à´¿úŒæºÛ¾åV’J®hpGÝœ\7%}1’ÏCð’- þmäÍf®cB2C Ëe‰©3JÚL« Æ¶Øÿk%–ŒRPʑݷ¨ëÖŸ’Jî1°O¿Àz«±ý<"`Ž¿Â9/ˆ‹Ÿ [dd GDß@ÒØüüÚ³f÷éÀ|¤ß‚‡5°ü°ëšÜòÁêòüvÀfJß`‹ý§•D2Èé¡ÁK3RÍfâ«>y`Z˜‡äëÉŠ«ýûùü®X5µ•âë®fŦïÁLA ù¨òú}ktQâNË4ïÂ–ŠØ—xA_-¼ãñZòe°…þÓJ/%À€ïÄíMqËãÿ÷©ÚNyw{V"ÛCì9‹ø_Ht?Ò¨X2µ%âw`yxôq™7ò7;<>º©ž7Ôëç§C´)ö ìq¢¶ ¶ÈÿaåœRJâh=˜;ózÏò³ ì[I¬g±Û䆤vÈ×1Ôé&ŒE!ª§#eU¹Š¼%ð‚[ü¾ ëÏ c^ RˆC¬t°1T{ݼüÅíšÅ¶z::Øÿ§UT È )È»»J¥úÈöYæ·sš›‡nt ‹À¿OÁn’åjQËÒÚÄö0tÔîÿÌO>ÜŒž–bû: }>o¼mµÅö?x‹¬”ö!²x©#c©K’ãÿnßj$²Ü~McnfiM,—ÛvÁqùk™Çð€¹þö.R~õó¢Ÿ$dú~Ò×~¿‹¤9õB_b¾&Ò¿±IU7D[°wýþ׫7y଼ÇÂÛ5®/d×µ®U¢>~‡M¯Õoé_ ›¯äQõ»ëÛé` UAÎ…àÅV}¬Žég³‰ÖÇF¡¥ÞnO¸ít$ïU ¶ ÿÍj-5a‚Ë´,ï66k‚ÿºœ¨ì3Ánû—a´ ¶ÎÌsrZ=b{¶E ÔÁÊõ@¶ÃXþŽWš²›ýD ,ã~µ ¶N{†è~¸í$“<•6ZßZÚH¿Cç°¶ïˆÛ¬Ä¶;Óá*÷ëÚÂOz¨«klc±oGž™iÏú«Þ[ùŠmÀü¼hi·“pžÚ0ÖPº[IJºJ©-‘ÈÐ_X˜`xòÁXL$Îh®ûÁ}÷éfëmªuÓ¿%³}IHbgý¿ƒþ|lzûÔ›—jC½·ßÂ:X—qÞf’ZÊËPÙB”ÇÇKÙûš[IØÎª£Ð°{ f™²wháSŸÝ“ïÑÎCtp–Ê  Z j‚;ÐÕ¦H‚`‹ö?\U$ª¤ß¤©g°µ°~?0 .Xxƒ¼° ››kÛÐÛM»îûüTóóÝïS5º)÷o4 hLh*õqniZ/£`‡M±~I´¨ÄSíJ+©?R –2ZGë")Ùõ±|ƒ´Çe­î‘‡ZÂwŒ¬ ¥"œ°¤ÔAþbAßÝÿ¾rKäI„:J9ݦ®ÊŸh4”^—Yr =,ц–Æï€ÜMuÜÊNë Ïdì¸ ¸ða¯$H‘kv’™šÙ"[rKD•»‡ú¶®Öè¶ÙFX+cÍí;ûÖ¦[o«b›´¼¶ÑRŽ*0$÷ûý߯ z4ê›F2BÎh{£íæ³ZöØõÂDþ™þýæ–ÖšX›aË­‡µàë;»§Ýõ3=)µðïÚŸ[Y±\¾×•¬Týƒ©òÅÔî¨ëö{DÛZvÝ"nßw‹f¡ÐIÛ`ËÐBaûÒ YÐàurBêÄÜ’>ØÂüË+£äó3Ë™ªµ­²³pH}@ëy}¤n®·Û5ÄŠ[>+g·ô¹Aæf6Ú¾¶šVžŸ[)«d±m+ö/Œ&?¤•Fr!{iY&ÕüUÝVËïÔùÇw}|¯Wùi¯ºÉÎy-–4ÿÃX2k`¥­ª çÚbk¤:>ðáh Ö¯„ýKÈ"aÙ­(²%°»º ümù-¹¾ø í*xPÎïw½@ïÕyžQœc¿€›,£‘ú°¦ãZh6p¯°ô’²X«ƒöaA·kšÓܯ‡zOŸjJ+k1¬– …6rú®Ë­ûÜë½~–Ak™ÐCnÓì®}fçdÌ(¤ìøûïWAlŸGK!-`ƒ@÷ØÈÕi]ËmŸóÛ)¢ ”¥GâèxEKç{å¥3w²#¯EÇÂ#mcÐò…&´ ¼B/;`íKª•¥CÝùño«šß VV"ëÍlÏü)î›àëø_<»ì»¢e±ê`Ýib!™%´WªöÌÏ=pÍB“!YòÂ3M…üM¬³µöÈzÚeé.åCô§!E‘?ŽdÍ]ÿ»ÝºŠ/wŠù92å7‡û—øý 7×÷7–½ô]Œîè3}¨é@…ÜDÁb š•°T`Bb »Õ³>ä…§¶Å kP5Øgžÿ»UŒW[ÞKjÞ{6Ðm=²žÔƒúÞ຀oÐsäþ»zJ·ú )ìºÒLo@t#îÍî«ë Ïx *d™;š*nÚ(ý&„V¥ÈPùÚ ¥É÷ÙÉqçõöýMâÝûu±pˆp°mÀï/ ) €|i@dƒ00¿ƒ~‚Û){;£•vÎvÙX­B`m˜ ÉKH?ù]J[ ì¾ïZ·[_@Úßõ0ßï"¿;+»ƒzx­ûÐÍKu'}"ÿ£ÑPg<êkû 9ÒêÚ;2L<)l‘ÿ´2Kbp¯¼ü$ϱêz ‡ÝRXTb8’Dî½ Þ<ìƒûÏë[}¥{|·§pD},P€}l7?‡U &‚†b¹@Ã&<ÒÌ‘ŽÜÙ&ÙV¼(޾[è?­TøI¥¿L•~og"s=Í##FXÝ}ýÿŸƒÍ³Y<;œà-qáº9&F¶š™ÆZS˜bA<ä0¯ŽT‰‹{tg¦ªÀ~±ùvÝÂÒXÙÓýßá~l¸éÇ’N¿¤jK|Ç!šÉaQìwu½Çò=½=רhæ:‘Èžj p.9öŠ>ÒÃ;ñÛNðrºŠƒÌ‰ñŸOà µÈ(±l‡-µ6“Ê`|0¤ìO/&C'%‡¦ÖZÞnè tæëúV”" ×EÈßÙ3 SZ¾nòø9McGÁÿüð` %ñþ¾ÇÁV¼ã%ØhTa>ݨ‹¾Ç?¾ÛSìÑ‚:?„\É@ì§—_¤3ˆUNsh~Xþ[dMüÇ37ßâ¸@#côs]çùË ¶¥C?‰ažQ’ç*•@|[çÏ9»É)}¿ØÒ0Á |õµoàGém²E ¶1Ö_K"&@¸ôÅ%ï·–µÁ.ôÆÃîYÍu…v§ZÎë÷:E«;ç¹ÎÛÕñüWdHw=(Ò»êçw KE¼ÐÏHxäϺ‡óŒaIɨÙ`Ìñ”­D° ˆ­ÔT`NðW²ñ,iC&{mc#Y ¢ØY1,ò»ÎÈ{©û÷ê,m¯]u:2'ïO‘wSÄ·Š– ݼŸÓ~ç÷B<â5Lù¸>†!¾Ò˜hÇ+®.Dþ«mn–X]⪾T< ­d’F:B]‡¾B¼ÏCÄA}ð/LæX¶Íwr8ûí =µ³.Á?6åGa?mþ^™ˆyNÄOá™t œ€î'g†!*Òàî4Q7쟿ڥñAÆàÂc©ôHOæ‹ ›5 2”Çî®Þ©®_{sçÎaùÙ¾“Ù!ýIÛêd4õ“ï²PÀÊjC-d®ÃéZªýu˜F;¯ëXÐF1(žw÷;ÒL‚ëœ&¦Ëñþ{ëDÁ4] û9 þO“PT{gáúÓÑÓ\ÍL®8އ‹í@cn&æ2a$^çqÃ÷‡u;hCÃwƒ©ƒ,Ii.Ç% ÖwÕ\h8OF,ï¦3¸sñí"vüQ»^w6 瘶á÷Úy\'”|2D’Û ?ùc9øxXÛó¼û~NÞQßåèwâÄås𪋾ˆë3ð{‰ƒ_¥“2òXˈUj‘«Üð¬~Âå5êú£Ø8ïÿ‚~Mü"“ÍÃþ£´‘Õ-èb¨l”…xº;éÿ#QP~8ÛjÂšïƒ ¡ÈŸWÔu ß7lò=…®óý!šnEü5èU@RXHYÞÕ+|õy?4QàÐÜð†ÓØý7ÝŒ·ÏD’/‘¾%Y<=è¯ã°÷ÏZK kUüÞñïˆFSãlµåhï*ŸÕh#Y/,º K¼LV¹ÎÿunPÑ"éÔAÁ\ÙÉü=d½ïS,æz•,À‹7óÞÓÕ ÿ8lìúN£îýĺ©¿’ÅÎr#ˆ)|õDò¥ÔFcxÎhÍb«m¿-&ú1ÎÎYÀ¿rÖþW¿Jˆö"’3ÜÙØ\èùg¸W03@nùTÊ ìrB]Ÿª[Ôü‹À÷A|õÁËÇûÎÃùw,¨ÝŒ¼^Ê÷ïˆhÓïûn˜+t"Ya’?¼n¿ˆ›ëqwZß`é\X¾,š«‰d÷]SJû³±ÁÛf–˜8ˆò'“ºrGvc§ °µ'z—ìîz-ç¶ûo#þaç!è⦶ô3œ\æ®g[±ødíÅ×܆’ŠÃjwØ0;gKÌõüwçÿÞÁ££QI‡A·®Ÿd6ÕMW«AU =ŒÕOƒº["¹T•%ø¿c/GðþÍÈîzןñý ÝI§@Ái¾çá6rb+›Ž¿´ŸÉåáì0Q0Ø@ìÔ‚ß̲áÔ¸‡À‰+0ÉSð(571ï¥Ï®ßùžyˆLâ&æ9-Ü×çR4ˆò–²îD¾x 5KûRãžâ=^҃ྻ p}Œ#Æâ{É…ŸY;¾ãH2øN<ü ÑpÀwB™ê§Úá³êzZ–ÃRù¨ð& _&$ºçmîzŸý¯ù‰Á¨€jaéú‚ìZ–üQ <¸Èk¸nŸi£ ÊßNâHj¹ØoTø»|åw žbéy ÞldÏ×52Ö2Ã*QÏÄ‚ó&áoy–z\àPàZ¹ïç;m"Û¯æ¹wÉ—½£ïš’–{Ðw‘ýØ{ p«®$ï{UÜ—‹»»[€àîîAB @p 4¸×àÁÝ‚† Á58ÁïW«{fzzú·{º¿÷ÜÌ“už{¹÷œ}.§ì_ÿÚ{¯ªÛ0œ°…UèMÐŠÍ >z8â´&vºÊ>þË’EÆê W;ˆWEËÀÿÆc£øfµ©Ù¨ìïø3—õ&ù?2踺gRÌE[ñƒ-xF$‹¼9`zk%¹n’SÔˆûý„ì5dÍxÁSþê¯2l\ ™ðë…6VjéªáMð‰ë`Ë W>ˆ°sò¿¯£m¦ùŸ~+± Ù^Q¿<Åšý%:Vœ,½Èñãȃƅg c‘}¨lrµy× ¬<ÉOȶ~ñëÀÊU¾Ì¤†•Gë ’3ë+™u9bY¤l° , êõЂ®³Û‡%lšï=é 2M‡Ïw•ðÚ bWð–xôé9ÎW`ât0…8˜€t›dŽÛîfðú¾ëûa¢e Ñaýþ† …;øS€ü—•Gr@ØQ~ØCذuEi+ØíŠQþ"øÞ0·JšcͶÚM›Ñ·ƒcS¤%¶/ Bõg€~ ¦øx?à#A†©è`£ìtç\âägä^ççãlô½±§ðÓñ Ñ“ ÖX Æûê*:\!Vd}1ã’9Òé ÞÑÈUpÇÝ`I#»GÕcÕ¾Õý|wH|N«ÂÇcU›4–ds@—âãGå¸Ûå¶¹VÈ> ,–…<¦£¡IøÉq<',¶®©ñÑc&ꀇü}¤ó×Mr’/S謠Nœâº |úüºŒ,5 ‰¬÷{L;+6ÉÖvsG·ƒ|ßÉ·àÀhä†oàÕ’QœŒtÏÝ|ã2Ï‘«9Ò*È-D…¨õ¾Ž£KÄzæƒ5¿–&D™MÖM‡&ÞI NB_OXëF#ó6d_†ǰÑeì W³I¨‹ˆéðøa þDä ÒYŸ·ép‚^ÒZ²£;‹þÙis¦ÐÇA±~‡¹`ºó¥6uSFÀ(òâükŒà%^TÚ% ¢ü{øßÛ¹O|—Ò0|Ö¹`Ú¢ù9ÚøFû»~"Òg!Û·2¹æùØÆ÷Çx@),©uþ°ÄKo0 ÝÌF;'A€(êüùß7‚ísóvÍø¦õÓ_Ñïhiäþÿð¿_Ü÷Të?KTªú)xð&ßõ×:ÿ_ö3¼¶áý‹x~¢‚‘d‚%È·ŸL‘Z:cÍûdÆRf8„ø°kEÖå|‹ï•“\#û{CÞv¯Ô[P!/9`”?×¼(ÈÒ[HàúºèÔ"V±ÍóyÍfs=ç³ÛËsøÀ j¡½iûe3£ƒ•~Øf4]wt"6Iñ ßX—Øíöãã?ó¹¿#÷o¤^ÿäK ?‰÷yŠ\‹ùì ý ÁxÈmoSâ¹;,&£fׯú5¸nw‡|‰vÖúpûñ¢ƒ0ýØH_€(ø}ØYëgóUì*â^Éôûã[º®ŸhˆŸx5žû=òÞ;ûo÷tÚT,;ºÂOú‰&áÉ´¶¦æí¨u´"µ]~pþ!–æsÿ|¼%ï:AöˆªÖò –·³(Küë|VâÁ+¹Ön7À¥w+©E7ó°ûRrüh"x£ïbvŠÏÌçõ±¾>¶®ÆÓ‰ëhX ØóÜh 5YÒ&œî#¾E[«xÿeùSçÿ§ä›¡`sæÞ¢ÏxÇ rÃM)äØ+¬úw3A¦„jsàžƒêgˆ‚ñØjžï_þ˜|µY–ïý±áIêƒsH”®XÈ×q%¨„›"ÿ´·ÊljA´ùWVE½%^‚kà×%àÁy|épðŸdÁšnZPåŸèîƒÿSøŒï‰ÉTséUAª±d±oûuVNôóf!×øÑu‰©_ÀkkâÿuÁ€Føÿ(=è"¯Ï@3}Ïë{b“µø©8·¥$(Û ìûF+ÀŠrê3ièŽUþ†.*ôƇëç…—F×°Ô¿ÖíúKa’ŸÂs sЇÍv9ˆ‡„Q› 7 É›kKý\+ƒævUä–ØŒÛ‡`Ät°€÷ì÷oø‰9Gˆ†ÄH ÌÒ%ÚS»KSw!¨ò[ÿÿ"®†Û)ŸêsÀ:X-CÎÑ ]o¸Ý0,> 9l2Χ Û~&Fð,±¿³×°«~†:PÑì“”¾b8†·Xh³ŽwyÛ[Ýl°|¸ Ã̤ t¢.uõƒ,½­Þn”›,™Èu‘ôò¯áSÎÉ»JOiÏ—U=ƒðåîÈdÓlãÃáßÃgm†A¾>&ÿµ ´Õñ×Káÿ“ñ™ü•eèa*Þ°Ú×PȪ¯ˆ‘pÔƒ¥uN¨èºÙõr 4ƒŸTø \þEì.–1þÊVi‡/'š§âÿ#yõ5\9«–Áç›ÚÌ­ ö‚ÏÕÇjù»/ó~Ä¢Èþ–o„$éɱ{f-¯CAƒú Ymy`?H±ÙŸ-˜I^Ü€V~D{9ÉYÐV7ßk|°…wƸ’®¼ô™>«ؾäÓµû]†ƒ„#‘b,QÑ_®ÇWùªƒ”{ýŒŒGäÅÙp¦ô0º:­ü@ÄŸMlðyoÑêá 0‰”ÔX†‚eù©¢6 ¶ð¬òn$,|æ6¼÷Ÿt7¾j_ºIrÀWò5r[ôèà®ôÖ¢<^bá~~NÊ0¬;”cìÜÀI *­[8ö„¿Gf‹Ÿd\ð8yÁE=HïÁ hèØ']ÝurG\~Xœ¥‹ >]óS{û;ºFƒ\óñå¾XÑîý\‰gt!.ZaùIxÀ~³¹Os8ê$|ï?ûÇ:ßoÂvóµÆÏU~åw†”ÀÏbè$Ý*¡¥GNc×Õ=$wG…—=†ÝçÓ_’DÄö>2ÙXÐ{¹¯ïûßñŠäD«Š+Kið|87€×Œ#mã•%ÄûnbàZ¼Ïã:ûEâcQÑqãpjúÿ—t¥Ýä5›`tÌóÕÇðØ—ð½ün¶Y­÷u?¸ÿB¾O@'à€¿IlnóÜW 9<æòû`vì4JÄ_÷·™ÎïH«•àÍût¦6òì¯ÿXi]+×ZVñÉêê|¯SêúXD©M~ž‡Ü›<‡±éž‹ˆèEø²] |.‘AÁd›8×Ç 44ímÃú—ÑAA¤ÎÇ£°FóäÇÿ7ëz®Y,ØbÿûŠçšb‹œð˜dº‹eæ§ôð¸»ðÁ…Èdç~¬«û~[Et_Õ¾¢ ˆ¦Uá1/@½<»É{øùÇëÀÏ}þ^Ÿ7ä‹N:N‹Qíûšñï ]­=tÿÞ¯[I]bI!Ý!•)#Þz 8ŠOõ÷¸ÌCòÍät›µŽ ¬Ì¢Ia=cð…z\loä3´3 ßßÞý„ýoI>¿p ˆì§½Æ&G~¢74•®t¥‚-ö_¬”.‹áHd¿Au{¼-WýDã©Ä¿Ýå2ÑOt\Kn{†\EÐSb"y |>:Þ`=££Â}lâÏj?ÿp°¸¶FæÌ:¼Ïº<“ÊÚFßbý¯]ö` ý+¿Ëäê¸ .íÂkíü¿M~]æçyÌðß÷¡›¾­\Í>$cÚý¼…ðéÈ|/¤qÕf>.AK?ú ¡»¨»ét +^?ì¿U’é]©¡›CÁä³ÿ¼òÚ»aÒùíLÎD¤¶®æ‹@½YDÀ~dIÁg_@}¿Ž#vbã‹DI ]Ç‘±qJ¿÷á çz‡øÉ®€í”ð:P÷ë4­Aô7ùÌOˆ›Þ.]°þ/«#y±åa|xYlž¿ÄßÝgW„‹!cx]J^·ç+‰ðSäʰo 5_=±Ú•£hÀöKÅö¢‡—ÒMïëyjå¼z ¯Hxíº‡ÂŽ¨õð¡îµ4†Á†è-þb Ìw$ö¡¥È]ÖËy§Ÿk3‘×l€òlDý\r×mXN?Ó~óò§ó÷a@6]íWu¥:N^éMJ;!×så\7ÉO¶ÎELßB†óȹÁúé´%YñÏñ]à÷øùÖÅu±D“OÐJdO *,ോTÉæ‘àÉÕîªh¢Çô’f dˆ´úU¿½*¹|nˆkLjÝ.¢PçÑÃS­%DŠJÚ•êÍê8ë‚¶ø¡F§º)q‘³…vGgyÔ®ŠÅÃîQë_#+¶Ó~dÊ¢:LÇ‚@\ù$T!ÿ^à‚g\ ½MWß.G•–Y?Ð’ä­ÚHw¿· ¨u´ °R„,'Ô :B@øß¤¸±u +£{µp`>æ}K©0CãûïWj—Þ}ênº¾°» Ú‰'é`Øì—ÈÜT¿#ÊË»4J`9¾^LŸP1åÔìzȆÇtÕZ<ðLßÈ÷q°…ù­4°Ô"®š[ãÖHì;@'ëz¼z±Þ¡†ý N³^÷œ _K?’ ä·º¸3ZÚ‚Ö6è*½àîñùgVF—ËÕ„ýæHR*ÜN:SÏæñ/t¥ŸpF×ÿßhC*½¬T‰‰–øÅirÆ0˜qíßßÿõŠE$tvõ¨ñæË)Œ¯oÑôËT´ýÑÇQü|!(Ù¹K£9b¼©™<·³JÁþøÿ’•ÎÍqe¥˜ô–ÕðüºHcjò¶ã Ëà@íÉ Ýðúá!p”×Ê×ÍÅte‚ýÁÿe+Ä}åú¹í.‰|!}¨sƪ…©&Àp*áüHßÚÏ;éDõ|´/æŠû#ÿË×Gn¢›ë"HI$ t@ ŠÎqÇÝ tòJšP}…Ý÷RA% ¥õí?¿Z¹oÈÈ —R’J×Ìõt]©š^€Åµ»ô gó~Þ?ÖëõÇúcý±þß®TT ÿû3_:WÈåùwf×vŸƒßËÃs » ü”Ñe ê~®ÿÿVÛeFú.·Këz»C®Ž[슺ª.Ÿ+íêQ#ep)]9WŠG ~óÿç+¾Kä’¸¬HüÚUe†srÓ­ÂÖ»1.¬²PZË{·>ÜÈõuµ]4õ¿ae®Uáô Ý7H†Ê}É­“e«»ã~áµhã&ì?–~­y´¨FÕEr×íq{‰ŽRhì÷¾R`÷\ÄwiwÙ¥Ðßä¸|¨}'Yd·»êêIG-­Ÿk1ýÒw¸œ 5ô5:Š(ñ©þ?¡bÊlþ©•‘¸ÏÞ}í¸*ZSŸJͧUô‰ì‘ïí¾Iß/(³Ÿòú¥nÓåÔ€¹5¦Ž”o¥?¨*þÝžJKÕŸ ´s5ä®4Eê|š_Ëha½ ©ô®kã&jU- ‰´¾öÓÚL»ê4P <—²M>‘Ö`D¶PÞõúo¯ääô,.ž‹+÷$º†hüÞz¤ÔäúP’èRVÆjMâï›Î­¹4Ž–ÕÁÚZ§ •ÚÆOÀí†Ò’~oÜ ‡ËN>OêêËm¢uñîlúX‹j)äO«9ÐÇ~©§…4±ZŸïg’Roƒ ½´…ŽÐUÄÃ!]¯ßh#$•]]—þw‰A¼üx~uwßE‚úÏ«o婜åß\DÀÇ:ÐÏèè»_~à÷y&Ö›b³0ÛëPí¤³õ2Ñ0IêÉåEBG¿ÏÿÛJM¼&wÝP^Â#ßi|;¿ÖBʲd¸«A#h Í î‘ÛÒ†œ×P?õ ñjXâ>•vÓ>xK5²Á~~Z¯Oõ‘Tw-a‹¡ŸÙôªŒ.ëèICµî—å¤dÁÊ15/øÅw7ÏOÌ„ÌÅöVÓŒè#!^‘ <–üÚA‹sD%]@4Ò3Z W‹¹n.Y¨gIùŒ9]·O¬ƒÿ$02 Z~ f¦!g¤‡1)¸ $Œ8+õ]—P<ÿ ¸÷ÏaÎzdð]Z­smJ=‡ •@¿=Ä‚õt{'Ë%6¯ÙžÉí’cKàï•´ ¸{—&ó'KØ|„›ríõ…LÔd½R(lAÿæ*N†JˆŒÓ"ãûw¤(VÏDV·.7åˆlñ=rO‚Š7$"Ò[‡û­Œ&šðHfÕW~6åƒDàdR0£*¥.Ì0Và¨&Üüä–:Áöo¬¬T³¹>®(ñûHŽâÙq±æ‰«×‘Éîx;MþKC…óˆ×Røÿ!ÄG]ü$(—ƒh) Cþ ±÷$¼0ƒ¦5ê.GF\ /5‹|îj[Øÿ²ÒÁÑ2À÷fK3NÔþ©@¢¿þYzëðNªß¿Wd¯Äð ƒý•µ±6Ð ZY/ãx÷ ©‹ýKò|s²è ¤_£“ÑBYm · mµq>WŸœÌe‚íĹÄý+ä|)—ÐÅY±IJ¬–ÅÕHf½¯mæS~Îpÿ;ð¯ï:.ˆ8d†"àÀ]¦ãÈ éÑ[&]¬ôí(]1p 4­T®²ûÞÂwûùϦ DGž7Èó³ü$‹Äú×”Çãsòjtµûí®°<“ÇïhšË«Åõ(˜xÕï«§£Õîwÿ EÓ½’ß HøN·¸¯`Y¡gEù¦»Ý.Ù>H^ ­ p<—x¡ û½õ@-ê–¹H`X† ‰TDw€<÷Ð÷=.ó‘kL•i2ù³¨u·ßÎ+Ù‰ÿ,Ú“üÖYo»©v~Äqá±X1+PÖÏILBÈLD|£É ‡CÅ ˜d®•Ùiù«„×ã‘÷î"YJòÛ¿ìØ |)}e Œ›€µöŽ7´«Š7Øì„ò1t‹‡‚¿J@ßK2þ^bª8v¯‰’’C‡°½uª6ÚÁÏOˆÿ!ÅðÒ,zÏO­ƒíK‚e‘ÈÙWÉüÖÿî¢ï 1LCÑÅZq§$§t-w‹ÀˆV‰íÛ%ÖÂ:èþJ¾Œˆì}A¿.Ô¹ø{%ÐCµ [ŸhyÉlñá} \t×SìN¦D€Âv­wí=2Zz?ëò,r['¬Ÿ}˜~è`¿¯ç÷»äÛ®˜_ùÁw|X Q‘yù£ï{W­“Ò}tq…ÈHOîL¢?‰œ¬õ¤R°Åw9\l˜Xuy$Ñá1¹¨jbñ‰c½Ó0Þ·dòK2›oÅÂuÀ ¾¿Ïd¾Àú!ºÒu u¡u¾›NLŒ!+î!„Oº+‡Ñ×1üç')M¦´s‚È)=@˪ÁßevÕÜa ÏÎgNAβýù?ùg ±éqä”â°¹i°ýIò Ï|ãû!ß“InŠ‹§}<ø°Bš’é ®{ÿèM|ä½|ˆVßÂ> þûá5Á×TøL‹ _-Mêʹ°õ«øöϲÓw;¾é;¾MB¦²Ÿç¾#ïÇg[‘µæé éAô’¥2Ö:üº«îùa&~ÒV ê&êÿ"7üôDT v•¤‚¶Ô/À‰:è'&²?æÿ<ã öDФ.½›I®Ú‡W¯–A2 «Î‘îÄø@¼y®Œá»u€Y«éEvøšlV'#ë`ž!•¤ ~²L´}ã ô²îáÞ;$’¾–¢HŸX3Âí¬ù^ô3𨝥@šÒ²J0˜ýïmßg.7O»DzâÓ&éWÈ? ‹Îó=MwŠuƒšé{~õƒÉо):q´uÅ…Ž&ß=@Ãfº—w3–Þ‚ï_ ’z¦WÔïˆ)C}˜G»ÃˆcãÿÅáo¤‡ËÔ 0É]ê¾9ø»íÚDÃazùô—ð‰›üd•ï?×g·´&s5$s÷аÙØÜ¦ÁôÅsFðŽöäõY:Ewbßµ¼ïò‡GSá;eà?¥µØ·SWùÙGmÐEc­(­‚º.3Þ_Í­æ³îÆæßËfrúU¸ë#?.<è!üå>°KO@#a.¨g›j7²£õsH„Lá=Ý`·½u˜×Ý#áN…A¹{ü­Gþ¼™í!L…ã½6kâ=ž´ êÞˆ®Üצß8µîæ‡`í—%µ¬Â? ÿçÓä¿™àáBt,W˜çbC|÷ërð@úâß ½ðñ1¼ë:ÏÙ©øäÿx à 2K*äOÔ¢^Ç¿ÍA‚ò µgðVA×Ä=vi}3ÃOtJ¢EÈÎñ±zt½ì%‹¯ö=P­ïu;ɯU‘©§Ž Ê›Éõ¦l¾›Žër²Ý^yEö³YGm<§ß%ÿ‘ïüdü¯!hÝg…8šN‚¹¶¼ËäV¹}xèlü3ˆýœ¨6/ø ¯ŸŒ¯”tä)2ñ1”x' ¨äÒÁi«Ãu‘¥<ѯA:‘g*[VCü =«›¨õV+ŒÞ áó!øÍx`#ø¶r•ÕƒýÆ'Þ/ø¾léàºÀòõû]~º¸ ™Ô&½žç—ã k8:BýŠdm}çÇNZE[£‘²H¶M^å¯Ýñ=„/ÜN‹-ŠE´¼“ù>š¬å÷×¶".F“‚M¨À×M{©x³PÓ:d²½ÍÄÎñ¾Å÷WÁ‡2ñ™m¶•M~Zå§Xïî6ÞþÙ9¾‘Uëj`™ÂÎþZ÷£•ò¨bgЬۥUWx,h€–r 7;³°JºJ=òoð:´tYÜ}ª”|ãèi°’u~D§ƒ»G„±M”¤ºÚ2Œg¤ï…´Š|ùBÊû<˜ T+¨µ‰äÔûñýÔ†ûýù’Cøyíª ázuÚzd4'Nòë¯zËwSO(ç\]¼>`ùð½Xð³xÈZÔ[ϵ®­¿òØÀW >ç2<`Žg6g&ϯ;N[‚¹ 9!õ¾uKÝC~¦¡'›+ç€ Û|‘ÜT—ÅÁÃD°Ÿ¹àÀWpéÛr%¨½Røî·ãá‡ä – ëçwGÓx°uhµÝ»ñeëk4âÏUÏ*¤·°»Éiõ€d$–æøóü•h` Ðcàö*pÐú´]¡b&Û‘â8ß_›àxÃñê©~’M[‚…ããýÕð¼óˆg³ye.\a6¹ŒU"¶Â%ÈWxîŠï¨~t ‹WѤÌ>X ÁÞn=òn‘Èo9~•ÿ~?©ïšDA3×ðãÉ @üd0Îwƒ:ÁQ[°®ÍJK ×û_Ÿå§¡Ÿáhc¥ïò†ˆ‹¥Ãòˆ­ÑÏqþzX‘õLI(‚(ÿjWÔ-w¿Àÿzäž/_ƒ×Åø«M´I‰õNb¯MDvdåÏ Ìæ•‰hc1rï¶åyÕ" ºZê'Yg¨k IC?!Œ®!Æ^ñšÍÀ,Aæ,6¾ âôëõwc%6Öˆs»…lë±›1×°ÚŸˆ¿Š¿ÎÅ7F£™¯‘Òúà ã·.øHt8 EÍ·ÀýäÞ»Fòè†gX½¼ÚwÑJ¡‘5õòäŸ!÷ŠÍŠªÈ³-u³¬tÁäG©[º.Äü`ÛDk™Ÿmq\ºò91p W ïd^7 \ƒ—Ø ”jÒZ’ãßõˆ‘†äñá Á¼ã[¼e…XGù›h ¬Ïæ^ö}Ïãû 5«A«·¤„¾vŸQz縰~ªÓ@tE­ÿù ìÿ}€>Vƒ võo&–_È1À°°H ù«J ªØºI“'~–Òz dâ{e®FÖ-6¾·ÿ¬¾ì)’i^bá{ã˜Ìúù¯.£{B„#2ÏÈmêü ÔcßÙ0;9úØp oþß*=`+Èg%&L®$u`f4PŽÊ?•V ¯‚‰SA†­`à:x¥Í=LT-åµMhæ©T†/ƒ;¾–.˜èg«·Kã2xævω[÷ë#|âsDï;ôðÐO6ŠÜÖíÕ²—uùê¢}¨PÕ¦×ú¾ëë4<ú&ùí `#:X6ÞD“Ç‘{ÞpÏ÷Ö=Œnl6¼M›&E‚~7ÜLøWF?ç÷5ù~5l11l¬fûïGa8‹ðÕa zo|غ¾'ŽãQ)¥ò©Ÿë€/ÔÓw~ÞÅErÇräç3 Í^ ZXoüxÄAPðºï.Ô($µ\× Ë˜üSOòéyrÓ5âÞ: ßBÎ Ò˜ˆ¿Úä›IØ~±±Œ¬ø&sQìn¿*TöÆb­¬E¼X¯7›ž¹ L#bvúóçßûY¹G¤0ÚJÎñ65>1ö‘únbå¿àª»bXô¤ä¥6@­ò|;ˆä=ÀüOä3~ ˆ`s_"Ý=Ž|î÷ýÿ뢃¼ÔÿU‘?>ï©;ÁÁõ;-lôãÇð^›‰ñž*89¯´ï‘ž,pÕÕrKƒ,ÿS÷¥»âbP«/#ÛµÆË#ªœô]åc©Ï÷1DÀ"ù9ž »‹|Ö©ÛPÕ¶FŽ.Ú”ŸêSÿGV›³Ùw‚µ<9ˆ˜ùD…î¶€£O%¹¿¡ÎÖº^G¸Oá Á]·ü.Ž|æ&øûrò@8²Õ6¼¶úh,í¸ïz܇ÌxÜ è3±3YmÔæ˜Öá?%ªó½¨Ÿét½Ÿ³ÄB$nfû>ð3yfñ“• ¸£ÑQ®F¥·ÕÏr_H<²˜F#³Ï½¦ñ°yOý¤ƒt$óÆ¢c°å!ª½Wذ©VFí@¾jjç6>¥’)OF+ à½+ÐÞ¿¨]I ØD›0‚ßÖ€žQôCj‘¡bþÁWܽ–ìÔýwÉMv§ÛAßóצý Ç~#ü~C?›~vF>FòVdðúàY3½‹4±Ñ@íN°^ë°ºu=çïÙêy]9ŸågˆØ|-Ô”ñaÀã‚-º_Ë©ÀaÞÁSK?£«v³Œ7Š¼ß Ì¬Ûw9Žê5ÆÞÑô­?Q§SÜ–LdÄÖ:m†ñSC¶ùN¨Ö þÙ`НVxE âÿ¡ausí`C±i U²òìý-‘ºOØŒüƒüµÀ©~Îå—ò%Çe‡Ñm÷5P[$Œ­ƒ¥?õ…ù¤C3iu2’A'xعó=T?ûùÒ·å-øñF’ú™A¡c7H5׆PB i2?½b',}³{~­÷?Íq&~<?ˆÇÿ‘(¶ íÑÓ¸@o¢û pþ¬kWý—â)§ˆ€ŸáB6=sé’¿ÄÎd"Wæ k^б$hMw[Šûi×/ä 9þr]÷g4Ï"÷䙉ôÅþ‹@‚ÑxÈPm:öí#mø>Ù£Üdü{6¼o2·sH'@”C|½…=%kÞñw$&c–#g¦—ÐqÿŸó{¶§’ìÊWD*š¨`A||£ŸS5Ÿ8žå埲Í#³ âßüôΘ‰,™RŸrÌäž[ÜáçGœÃþ—ÑãS—p±?Ï‡Ž îGÓŒ°§¥Cú[ð?¯ ®¼ËçgU5‡ÅåלZ?=âo'›Oåæùs{ üô[ãt#üÄ xÊ2~8Øó2v|˜¿s`=–ßÏ+6ÿ:1¹> ¹îcp£ò§F9È“t¨ëlÁÿ¼¢¸Ò®—« sù´°£ýÙûÿS*8;«gW¾–c[;³¹û>Ãö¶ûÍî~M¤/~‰Ÿ{:ÿ_á+¿­ÄÎuü½,Yr y!R·õ²9¿Õ ú•†žÞ`©] —Ö-žÀ`£êüö(8v+.õ3]¤6´{Þ–ùÉp$.U_"⸚ï ü7„»¦¾åös¤¡ßU"£Š&Õþ:EGÀª¿Á4¾ÔΓ25ØbÿÅ*èʺq®Þiçû.Ê^?átø>‹.÷³\w ×:˜ðø_Bµù¥4OŠìLg*ºë>Jìì×1꤃’‰oJj˜Á]K,F–©SjXâú[è¿XÉ\1WÒå¡ §«±ä4¸š]íîQm1Ò?£ê «'ˆƒÍ¢Äsdâ$'X¶ŽœŸÅßßðÄÏùZMlØ>»Ôüä6õB'_+Ö±šMD¿pIƒ-ôZùñ€oÜ}ɯkA½%øýVtð¥Ÿäµ$l¢¿‚ ‡=ºÛ}ѱüµœ—à€ÝÏîd“ׂ~6ëæ…œ&3&€ç¦&ëY­Ü‡ªoœvãÑßµ ¶Àµl·w{×WJkjø¥h`1ˆ6ØŸ÷<Î?´ØùV=‚~Žø3[‰ô=Ö·{#«jL¤ßã'%®C;/Á’ìxÅ6´”´¯©/9f¥.ƒÖ)àâ[àÿ²jº\fB®‰â¥dü¥ØÓîƒ8-ɱdr="»yí5™?%:0•“M¶½‚oìàkèWóhIþÎ%¼%Œ&AæÆøÊ]«KÈýõ\%ü;ŸÿzUwe\·;5V»_Õ®ìFn›kr,é'ÙÜ&3œ§Ö)„©ñê¾Ïy.·”Ý7±‹¸9 Æ'å¯T’4 eM®¨¢ûôŽâpÎиZ»lAn.Œ¬œ»Æå~ÂrùI¯·Å®–åT«‚+¢‡ôMàKéá´õÑÚìHùHÛùñ¥¤B_Á:èT}`÷Ï…ÚÞ˜áÕÝ×Qçb9›{ëÇЇ ] ßûÛ;ˆ‹íËáû-ýž§úÈŸ ”¢~<ó·+üˆ•~¦ZxßZ®ãõg=¢_HúPÜ| ð¡‹&ÖåØv9–¡&Šˆ-ëã½íÁíjSÈsIØ®p›hds}ÀíRé b? E©ðl&ŒÝ–Ž¬ß ÜÛ¤{‰ýÒ:8ègüÿ»õ‰k†”¤š fM@rc5µÉÙŸP±|N]ôèn»|l·sP ±/z ÔhŽõÂ;âÂr𣓿Ä{"l¿ŠØï®»ñ¼šOB۾׿^6›£Qð˜L0F{ã×üîþÁú56€D 4@x"µt$Ï@WˆøæÄû}¿K$>Qò‘ÑBûi=´s ÉêÇìšLBçÎ÷¿^!.¾+ê®»ž2OÏ ßXßÕÆîX+KÌ×à{¬6&XÖ».$ÿO„ß &ß¿ýRet‡Ÿ [˜£iÝË䬫lÁþî•×U£Û¸Ï¤ƒ^·ôCþò`xcmK;ŠŸbè-)‡wO!»' ³WG6â¹!·öÒyTyët¢ö Úù4°[Úº$ÁêZ%\#ºø®Û½mscí©]ð…vØ´#löCrÂPÝö»|éïqøUê-™°UСÆ¸À2~ íjfýý#+±KàRº\Ršz.X°Iß« l!ßwòW;²ëzPý+ݾ‡ D&'¤Ã,2Ú£™ËÚ50_K¿PÇöÿÞ• dvCÜ ²ø7È¿TÕÇz.ÓŸ_£É˜¤±ÿ©Œ_´ù‘åðˆ “ý2Æë!•õýLÂáïa´8þR[ÓhYݯëðƒ'úLçJjן ÍWÿm%'×W kw¶|þ2¾#ÂI‚ôå5*Ò¿Õ€æò÷u‚í´G¾ÚVûhiíëg@§äw›“̘Æócȉ¯4b`¡¤OÒ†ºÎ×¹2Âò¹ê®½d¯ÇcÑ/ç…äÀžécß˾ޗs`¢u ,•Éx4á¸Ï‘?9zøJG¢»Ç¼vÖ¡0ƒ¾zOSIwW$Þùõo«ž¿Þù‘k%á3Ö»´rÕWR€O®å6ÑðT¢Ãváô‘Ñ•cšÃÿñ• ¬(£ßâ9éˆÿäÄH~*©=´– ƒÁÞñû^Õñü n›Ë ªòWt+Âe #“Ý_vÊI£¥xFø½,Ùn›ØŽ¡ÔxzwX`)Pñ7|e"?'ágëþ”…Wºñú bÂ&gU– ¡t|"³˜«åfË`>ûGzQÒ’ïrƒé/ÀÁûò Ö~ŒNbâQ4#ÇØ®wá'ÛýÖ ‹‡µÉß~E~N¡müºvCqäsØtõ` û_V>"³›_·»Û#‚ù)ðÛòøø}¹(—Åzá=”wX·8˜B3iP9hXƒj | ‡®õS3"£…È ¥õý(†ÿ#Š:‚Öïr1¸!Bž¿ÿ¼òÀv:»ÒTRë|º8>›Œ¡wȃ·åš'³½÷wƃéÇE7!Äw6"á•ÄÁÚõµý®¸wò‚JÉü ´ÎÒ5è1.±4(jBnȦK] ÷u°þ«•Ü‹ E‘¸ŠÏ{Öµ(6Ÿ;-–<)Öy¹\‘ðøºõòJIÌÛý™‰èŠj}>Ó —r à+y)Oà@a‰ ²ŽCâ¢dŠ­¼¾TÄ'*jdéæ§€„ž•vú¹«.é@¾TXÕîVÏÆOq#DÃë99#sñ¸üKŒWDàˆ¤ün½­nKz"ûcbá)92úˆ„.Fé*01^ "Ôƒ]“ºò…¤³ò*Ô°áñýžðº´ T°û˜dåŠg%rcëuÙá»;¥÷={Lþ¾h¤ºÉÄ3Yȇ‘}góÒð£Xÿ þߊœ—îô!ÈИG*¢Õò#ŒòŒ$„W %L òtS]<¸{,l˜ÔŸá8Dy±^G8oJ0k»\™¾³ù{Ø`$ìOOH äç¸üÙ[=Åvû½“ü­'è´:,Bv˜£ É'Ku*9ác -ù_CÃÊá¢bÿ‰`^잎ÈNÜB¾DrF>{*Ý/{äß´ûÆÀC¬S‚åˆddù‚ ~fÞõ 6p^N/åµ|ÀkñÑL4µ;À§Âо‚)åÔXDÉ'TŠM$]¨¸Z^¨àГӡ²{íû¼‡`MücDê}$^'Gx~|.Ší=/7ŦÀÕ;c}ëq›qçU­‡F4ɦMuòwñ5Bt2KK­F}øµŽ%ç¥w•ÝH—¿Ý‹—ß&6’Ï’ðIcPáF޻ȿ ‰×û=ÐCð„cþðgøÌ-8aeP½Çß!Ρ¯—x€M͉«6%«`I5Žˆ RdÇûQ1lÔNü8©À¿l®0Þz9OÉf˜ý#)Iî®^û¹æ;ÃÀvù½¿Kyç“3:G„Gšó~§ä&8âoDÈuy„V~áõ˜È\ߨN.LBîL¶Œ£ªÂ__¦§¥f°ÅwI\¶*CÕš„j®Œ¡bÙ6Lá•xr<¹ßßù®@£d ˆ¿HRë$£ßÕ³xß^¬ëøOÑd0±9ÚM ïˆæjÆ@ pO‘ ËJò î/ìʹ—.öZ –e@¦}øl0;!ì'8~—|þ#èo=]¶Jj—zxðäLU¼•Çl¸`Y‰}{è7:¦û«ŸqW ù6A/»F®£›…y‡<C‚‡´°~Ô{fòý"â©[0ž¾%ã=Â’ê"ØúÇæ“ .Ø:,íF)© û£…Nd°ÔG)ÉŠ“¨m€ý@Ç2z–:LêU‡¶…M¶ç«¶~Flª‘ß®ªdóÌ*Øf¿eƒéïÂÖl‚Sð;<ÓOÁíâòyoóÛbl]„ì¢6ñ¬˜ÖC3’ëÚP×|ED ×/Éêñu©ï /ø.¿1ýµðþNXen©ûˆ†Z<œ)¹%˜³`mÆùl~ –ööó‘|&âÃ…7"iLäŸ@ ÆdFû9 —¨ ²kY¬ogý»¡‹¦:Þgø>`/µNÊ|W¨søËtQÌ,HpŽŸˆAT%ð½Ö ëTI%ƒ(ˆ+á~“ôT91¨d‡Pã¼¹^€÷ÇñäàØH©ÏÛùo©ØGƒ6ߺæ3,ßyêúê4þ¥ÔCèmš:A0°}óÖ¼”¿¢R°~-±~dŽêÁ¸® Ü'?^œXÇIÍG¼¿ô]z­ófýdÜ@~Ÿ,-‰ý ÝK±ÁŸk;?ßÛ8Ý 'Ö=KÖ¿í§Ã­'›^¥ʪ鉄 ZS+‰ü¬Ì&üdû/êÝ!9ÁÿRøôù’ˆGÄFÑs¾cU|ð:>|7™~ƒïîó•L‚Îá· EI¼ÿK|>¬¶/¨WI£ªuzÝ÷ç*yyá lÊÎ>ä/¥ÁcÊâQv.¬31—8Í|† A“¿ýóýßúÞ§y‰Ê‹Ø;“¾’ÈXó1‘¯àÿr¸^_ŽšIÝg]1¶s|!mLüGúì±ô9t",ЦC,óý’"ÃSàùÖ112HXÉéwø}u²D|.­¾w¥‚èc\E÷Â-*|¶%äìü\Û×È}‘¨†÷³g û\ìºÂw6ƒÆ®ÁìÊ y$ì8H¦·x}2Ú±þ†»|7ùˆº•÷×Q»nr”¸¡þûÓˆ7èÆ;Õ´®T â4ìYdß±n;Xw Ÿ¾,w}ãÃØî:x V¬÷ÈŸ˜*ãý—uB¶gÑúÄÇk2Ù§È_R­ós_ì>-Ù,ÄäÌmOò¿åoÙÔÌ£üýCaµA ›£·ô[ NÚÌb~ú[4oÄZ2Ë ŸY¬;NJ°±ž³øì?Û-›€`ç®,ÒG¢Èšªà)²žÇçúZg¢ï޽ˆ#ì|ð}¸QO$K«ó<ÆE’(=›(°~é[eÑlR˜ìŸÔw4VµJ"ûyPoüûyuþÃtð/3¾þ ÕÏIßÙåv›‚åÁ\Rënü<p¥ô—~X¸?µÎpÏ„o‚ýáµ4<,n66 =ù+ð“yhq…?{߈åß‚!çñ‰°›¨G#è5±»sƒ:ÿcŽkçòŠáÑJ´p¹ásNëu—èý$¿†Ç/õÿ–#a/$Ý»¯¬›ÈaÍ@¿º¾›ý2ÉG6Û|sAˆuxÔ"|äŒØôè˜äT{ô“µl¦FYÏŠ#„¿¢ôÎMu_¸Úî:^i×,"é3ß ~¢Ÿ}y…ܵÙ:6ls'Së® ÃêW°ÂȰ½Š xðÏÎjÌ!sÜ$ãïGfÈ,|d7l)¬Ú4¡ăõÏ;$†ˆ{»Š˜[KH‹ Ê?Þµt \diu>„û%&co‡å ‡_ Ý&*.ƒ†?×gú)@vHFm¶ƒ[ßóâÔ•aþUÈ·ÐÎj$O¾\†ÔËÑ…õÂÛBnµþ€»ˆë ÓæÐV÷K£ N¿û“Ò»ÛxÀAÐú ;×wz†Ý×’ÉyT·øž®ÍF6ëð}SžÊnøo3r{eXc9ª™:0¼—þœ™uI<ŠíWñ×&l²D8R,'̹¥®ÖÆÔ~Áã~Zß»Æ.¼ï<ö™Æ}ã½tŸz¢Ïw#}ĹØsºØ-¯ðpëóÞ‚®ˆýín÷Fþί‹ Å-þÊQ%`3¿‘÷õ>¼w‘$' ¦![äëõ_,êÆœ¡àúÏaà¡+ç¯Û¯Ç?¯‚ûÉù[Éu_"ûé€?˜å­ýY¹NM?ë7Â2Rñ}®SCæ§ Þ J–؈õWóŽ!¾'èôVš:)1Ñ_ŸÉ cH«']ðåèÚ»Ýκ˜ÜÏÉÒ·áŸb7 è.]g<™ïw|EÿY>Çí@-<§)¾Ð™æøé·À^¿—蟂¾ã}æ9 üÄÇÚÔ_PÿØü Ažþbë²ëéú¸dÞ7_c¥ðàuµžoç‘aŒ¶ ß§ñó2à~±+;7¤‰ïwß\j= ÇOeü]^yušï=ä˜ þ/äcˆ£Ù¾ƒòY´k^_„#¿÷÷Æôâä»ÿXŸ¹¢n¾ŸÐVSá—Q4.ÖyJŒ@ú!x€u]á»Z÷ú×0ÿ/àûÕ¨é»bÍ;RÑ÷v-Cm'dLën="í^ë™ý¶?BTüä5-}EÅ´ÚùãPÑ¥/õg:¸hxÚð{q< ¼€Ý¿FæŽÈ?KÚ,èZ0 úÄo+°/’¤„÷1%U;#ÒTL¥+8f+™Ã& n€ îÃò?ù©‚!äŠX°„,ðÞ<Ô¿Í]³` Ïú–Ô€ ðЏ^/¿úÞç3}ߊÌßà³ÑÂì:_j€Ñ¿“·û6?Ýà¬x Fíï[?ý¸î°©ü»é¯û)sÉÔ®‰ýF]T7Ø¢ûÕÈ5qÑ¥ yì¾D'»~ßÏ€ü ûöýÎ×úë¡cå꽪Ô3ËÐLoé 3ŽªýÐÂPî4õC\ðc ˜wØß ô#üéq`ó/ñ×á_6YËá4tô )B®v£µ³¿NM× ·aÀ ²Ù=¬><íçÉ&ù¹Hûð‰X¹ ¹}9¿óSÆójüþ(é^s@®ÛHµ/˜Ž¥§#ít* ›…Ù}\ÜH‘›|ðÏñK‘צ_mC›øvßpþnþrE6¼^«¢¨uH* ƒ-úŸWb× \à3íÍg­  4?là.Èf3 ­£ûrVËäŸØý/ yf;ñÑ›¸Žª?áã<Ï]‚l=÷ù;G¬ÌG,=’lä‡Äh!ÆÖJú*ØbÿûÊ຺n'ˆœ—O^ ÿžù+ó‘fè·Ï6¼ŽL¤œ&Šíš–Õ=ËðüacSowú¾Á›@>»—âš|¬a5ð¹vÔh¸9cYøBp+ÿ¿\‰\>WÒø|ǰÛJâ{-»v³yììǾVøšp#G<$¢ÃÁ3’í*jf¸Òb4tã¯ðú übø9£´™ï1È#©{Gê^ݦïôp¨™~aWÁò¸â‡î­íü­ÝͶü¶©×Óùí(òYto §EÔŸaÊQuQŸÆ÷ɽGT‡çÝõ¦×Ý/xÌÏO¹áÏýç¥BÌ æ=¤ömª´C ‘L¶Ø±>ÆŠ».Äêu±ÝÝçüüÞe~ž­MÄ»"vMÀîÿ[†VRÁÑÀ0Ë v.3©?—•ÙOø~Œå·qÜyâÇrýMÉêçÊ<†ÿ=‰ûBxÀ Jî~þ·•×¥pÜqÉH!ûÙœoˆuëgR’`cÑ7¾¦[ƒ$ù@ÈŠÔvÆ03ïHsˆý?ЭþÜáC0>5:²ù7v¥(Úý q¨þë34¦” eýP‹¸´®œûùÍšÆTßI4 ¨Ý÷oû¿¢ó|<½î‘ÝfÜ?‚ée¡Nz\멇m¬¨Í|ÚÜÆ/ ò6)ô1GÚy2Û-l}QGéA© wÁås9\©‰­2`ÏŠ¾¯{t²àvbü¶ƒÁØ®× àþ6?Ûå1–ÍL5û3±bWòÞ‰ÝE³žì`S h#êâüú¡^…í§'ê[ù꿾.Ñ_\‹P¸®>ÐÇÅ¢’OŠ­Šùóš)ñíë’„OK½[‹X?$v¦ÌîèHl¹xu¾®Xz…•=bw’Ù„¼æT¸µ|gxó§´d¼  Íø˜Š;ô­\®–‹év¹‚:”ØMç¶)ev"/nSŒjâÁǰ¿Ýù- îå2qÔipaºØãw‹ý©;x¯³AZM~6ÖÑWè$'±:÷Wu¥ÑÂ7J‡Ã£RÄ#lR½uõÍOu_J-£'…!¶§ .¯Ö¶*µ2µ{ÇmZØFSÞ‘Ç÷Â(µ¦²ú,øLiêÀIéÔ+>ÿýêêÊS œDþzX'é5¢b3x?Qçk¤¤¥’j벸Ð1á÷_±Ò‚`U\÷žð¹|Ø ¹¿Áì>Òbó-í¾n%*j:Ê*®íþkWlРxxؾz[×RÔ‘g.@ü“1ÒXêƒ|£a CÅÎöýÊᲂ=Ý·‹¬?NnÈ×ÒE¦"N(w¨[ËbW"”3üveÆ ¸¯]m©-OÜH42Ç’nÛìöÇúcý±þX¬?ÖëÿÉ*érÁJ¸J¿ó*ïï[)¨R¹â®¨{àšºþÔõMüìøb.»«ì:¸r.¯+õ¿”ÿÅs…]*ºÖ®™ëêRÈj7XÏ}â>wä¦î&òS!÷1õr–Pvu÷Ÿ]™\b*šbØ}(Œ÷[×Ïuw[Ý4ÒÑ}çÚÉzyíÒHKi!×\-bÁ&<—þ÷¾ÿ·U+Û™°R®·+ Ã$¯ÔtRMl¥öùIŠË{'ßK,íèwFõ–hÇv–…W¹ÿ±UÁu!΋#Iq7È}&Q}çÃ>òRÞ¹!n²‹/k5¥VÓLZR3êõã‘d–"Ò›w%b2[ˆb5Àæ#‰ë-.‰ü*Í5‘6Ó&ZIéQ‰ Ü:9©µ¡Öý øè:ÎwÊ­£—¤Žtp9‰œ‚¿Û©0%]E7…ª¾­¨^”Ïu¶¦Ö<ú¡~¡íµ˜.‘îîC]¢_j=-¨Õ5•&àõaºF'j]®£õ ¨ð>ðûÄø yu0î#9,õSS=£‘5­¶ÐÜZX[àíŸù°Qy®ZÈ¥9µŸF ÒuèAù7©qÕÐÀï-'ftéAð¾îœ.Ñ5¡NÖ°zOÚ"ktü;‹Æ×ÍX>¯Ð4D#h ¤Ï­±5€ÌÕË:B;ëXM ´ÂOʸü Áïe¥·sµkÝ/®µ¼“ÄHX•¨·»VKk,=,NÃë×Z–XHͳ)UýŽþŒúL®K|e„NG]u› ü¨s¤±4H:îøÿïWr0+‡«ïö¹‰²@^I$«Iµ©~„m³'d¤# Êi+ýUlçKaM‡´BÖ¿4yù3âõ+¯÷ô¤Ìõßó¹Ðs×çß^9‘?5¬v§ë Èjõ3µnøåoˆ…},É4«fÖGòHŸÉKƒmù‚÷wÔ!`ßp-Ï»6jÞ¹Ki ½[n¢„æY(E]¬_ÓE•IrHæê]¯ÍñêlØñ#¼ü.  8¶¿%)°.ßéxäóß<“ 쨋шÝ!•T[“+>×hñ™1½$ÂBKß㿵ÒSË䆽“'rSú#ug0ÿ®Xwójú\NˇD€Ý U›Øï¤ç$£öÕú0€O@»æHŸ ™-¶ÛÕæÁ4Å/zè4þÒÏúPÈÂPŒ]m"ˆ»"µ¥Î$öKbÃ’úTßùõ…\Ãî_ú™7Åñö>¼ò ºIFäçÆÒ-41ROg «˜ä…8¾ãI+r‚ÒEzB·èiî[п¹ â›õÜ0wÊ–Ÿe€õú@æ"Ä´ƒÍ½„åöýÓiM­7\0l¸49?¿ßn’Ãàß¡›hjÀÇ`ÿ®`Ã&…·ŒÕ¥ a ilQÿæJ ömv¥¤­4•/¥>yo'žÛ™l×ëi¹+Äæ^D ïÅ…í¤Ó:ÈÿJêú;Ûs‘!Ëi|¾‘Îû¬û±õÅ) OXˆO4òXÐK3h/9@ÕÚV¹)‹‹Eý‚Uílo{5l\i_ÃþÊOþ¾îDÄz"-…nj8Mbþ‘¤áí®ð'ò‘Žäßw’Y¿Õnº-Ô"ú¿Dönðâ‘z^:IõPwu4l·˜[(6Í*2ØõZŠÃv2éÇä÷’úRnÉ ¢â…X—tp½JX3!ç+¾”µ1UÁ!Ž(Àsæ%Càß‚þ ˆc U‰…ùè">‚†¦ªÈzà'wÙÉë5|¯²äpëYÂ÷Ô x8=+ËàvѰxBꀼ¢šH‚n>ò÷‚½”8xKRÝ&Öã4Rœ8‰ì7ï/Œ}¤SÁ¾Ú\l)ÅCQE„GNGZPËvÅê€mW%2(Ÿ—,ž [Ç×ã²YÎø½ ‰@¶Òà]<òAB}/刖p~wDLÐà<>òBb£¥ŽºÛWÆ[RªÍ°>©|gиÚ]F€¶ ƒ-øŸW,ªZ.à¥ÊG´&ƶ™ÔzÄ!ÏÕß"“·VÊF¹"ñôr&ƒÝ’íØ<ï¨ê%À^‚ï%ü0ÏW UÕî íIôƒ^ÆR=„«°BÇŠçJ¸§®¾¦Gò#Ò Ùc€ç±Éz¿‚øQ`:ç|G'ÛxBŽcÁ'äÛ/c 12ðï;¿çGñ„÷x@2< -¯Øä ÚH?C§àÝõ0HØOW’Sž†’»AÓÃxóºóà]2l}Q’ãߣ‘;">¿AN!ï 9*[øw¬å™rÑwƒÃ)†×Ç#¢m"Jbƺ<Ý'sÞGI¨û yÍ{¤¿‹<‰#£öÆØ¤ÐPq—HV°¸½û.ßL£×ñãœ`€Ï9/ç[á­»ðý²X&ûþ28w“ÜÿßÔ¬†ÇØì“[<®ÉI9+µo¦£zÔPE@ÍËè'2Ïf$"rêr"ÁŸÞSÃ=v©&é­Ò²yyòWf~»†4|gð‡rIÆPÿ3ÜC.|‰^²ûywé8.?y"€ÇÜD3—üÎ÷0~TrBQ¯ÉÑI2ßÿ¤õa<`«ô ¶ø.¹¯¡,é±ñ |úYκ´Ãk@f¿&W‰êŲ›îÇú3e†LáߣHz ÇÃó?Tó‡çð£sM"Q1]ð}Rl2‚vïy5,ˆPË÷½o®ÓÉ©'ðàßÀ%sMÝrI­[l¥,‘¥xøfâ>*xðžB²ã¼b],΃fý¡øÁbPÐv¶Ù¡œ°¾÷²ýíF!`‚ÅÁOøºõþÂ1‰aL‘¾¯žgIO0#[à3 þN˜„®Œëã’µ¾—m°ßÃÄè=¢~=6Þ‚<{üßÓkÓ`> '¬‘ 2IºðêE$"C`~N÷ËtŽ>nÞ“ÿ&o KLAî. Jø_/îêN]¡W¤Kdù“¹"®‰[ϧÞÊg}ëñÉö~]ì‡Ýnä·}À?Iaþñèn2Lz ï ÞÉ.—TWá1Öãæ0zúEb€%§‰Žhzï¯çû†x*rW%ÔDÈ‚]õ0ºOdùc¹ n)Üg?y>6œÔmùÈS†áøÜYß kßÕV>ûŽÓ H>À÷ø!ïÝk÷ŒxØ,ùº)¶çÑ ¬ÏÁ]þB¸A ¨ÚÂ|V¢‰Z_ƒ8§Ý Ð'¸+%•X/>õi¸Œø¹Íñàn©ˆè¨DÄY r[ßÎÕ b<]¬©g é "Àz¢þ$¤2G¦‘¿À«“¨ñ {Èî4àçaÆ…E& j€†PÚ®¡/È Ye·Kdù³¸–T}™á.vî>5Ÿ*"è12-çgñuœŒp•ì5ŒA wÀ#è42á¥~?]¬ë¸¹H¥ð D÷=ô_;ëA„Ûb{¢xB)ÍÍ+ëä…‹'уÚÿ>uOggÝn~"C½›V‘OEDŸ«îNKI^9å{£•–~šÇPrwlÌßÊ(ô2÷awIñ|Gü§‡±Ý“pØÑúWŸv–ÛWË$Ö·]?_ë(rã\¼~2:˜(s%·NÙ'ãßßP+CŸ)õiFmŠÀLÐàŠXOùî’>e4ÓÉ'*(AåÏ„ý_¹»ØVðû¸|Ö°j]=„zo71lSON»9d…ýü< Øÿí zwÓ¯8r/1¿ˆL—†Û­ BcÈ‘?A$»TÕüÍì0¤jÔƒeÑ^y]6ËÀGÊX #_µÿwb¸uj–ÒXw“½l¯õp8ãû—Xÿö š×÷¸ºB\*óÈ6Ëï3òy¬yAöÄÔw_ðhº ÕíZ{/—tú ÞÞoÊïË©·áË·%UBj á˜öü…·`h4 æ,Ф®$Ü7Jŧʗ6ÉòѰÐwo§1µ6έxæOý<­ÏÙgú9\ ?gÒFÄCSlo&ê6½}wÔF“«j _r`5B:¢¾„õ¼öç ÚV"ËCÌþÇE]·’Šÿ¨ÔßÇ|-1õ9öŸ‡ýŸPî“áTÄát›ïah;Ü+ãÇõ´QPHEFOÝø¥~«#ÐIµ>_V!Þ€ÿ„ÿl*z"@Ñ@ªÞ&èo.G'þWÈâ îŒËâ*ºOáêÛÄf^G⇾k‹ÍÀ±NÀÛùŒ÷á±ÖÛ:O!RŠhem¨½}×ï¡~‡ø„ÿ½·€—òJÖ½WÕÆƒwwwww‚îN€' $hpwww÷àÁ]‚køþµfÎwçÌ3GæœÓ;sYýcwïÞÝM—=õÔû¾«Šß³`þKá óÈ+Äêèˆä¹¬dÿ(~FêMâ("8SžQH{Ha0a² d´.…Ë#á±ß!ñI¾á.?¹/, n& Ä‘Ïæ!ûn+‰‚´°Ø2دïÿ™.7mL"¢gá-ãñ›oÑÛF"e7ìé5u Â~.£Çä k"­˜¦ÓºKàg]óî«ü;\²Ý$)‰…{ YG;çñ‘Œ}ŽÌu¸ŸHC¦€‡¤Åšãóu‰2ha0Þÿ¹¿¼¦—¶DÈzß÷m!|â8ïMBNNy„Ozͧ^";Þ% kié7±›Këº8«p kN]J–¿Bü«ŸyuŠïxBl"Ðmøÿ4ßý~<Ù~&U}JìßÃOý.å;4Ígé-9ï~ÀîW@¾ Ô‡‘A’Ô Ä|ê?zdSä~Å£>‡C'%*ºÀ1Ú° êL²¯õ?R;lþœ\~™Šßzýâkøw¾{§Mƒ›ê;¼ ïS»4Bþ–ÚÖw>¨GeS] ”ËnZšC¦´>/ÈŸ|‘ô®8Çg¾õ® ›k’‘<²JšLz离\î¹;‡ŒùÆ;ĘÛF0l ¿‡ÿœÇöðh,v°,‚±ŒG¶»Xµ†öõóO*øHhI†¯¥¡$ Ñn³æÉ^ß9ýž£TÇý|õø×:þ~œOßÚ¤C›H«Ê?ºþ` p•ÁÔôí©ä&øžµ{òØì–#hg!<,?‡ƒ€gaw¹ÀþšHÞ6ØV‡’ Ço8ëyesGáí Ħ€]õÇBg!ó#äÿmÄÐß½7l“øL”€Ú¿“«åúã‹g¤¶Z ÊÛ¬›ç¶Žü÷ÿµï?Ûé‰LÇ;.ÁË÷ÕÀ¿¶`@5¬ØÜŸi3Úñî9èÊf ܳý<ï.¡dÂC÷¡;ÆùŽï<ßOûÙŠ6ñ­wã Óü1?›ü±¯6TBÌ·BúJd³‚°;ÚF§‹M[C´ÄÆëýÄœ5 ÌqDì ˆ–ô™~”8:_)½sÃ]KÐï|ÓƒDöxËI4p I{#ïbl·Ü's¹YÐÕHÿɪÖ¸¢6ÑðYëô•<,‚F¡Rê Nð3lnˆuÎ_B¼¯GÑÁ‹d—¢ð!›ÜNTþ®îWÔÕÀ:]øæ ñøgòÔ÷?(mü<›µøý@î×y\ØCü~@WÙ©³i" $]q»”XˆˆdN¯'Cx¥õŠïÌ;²j‘t”µ‰Ùt…n¿–.Ð] ÇÁ‡ºk`Q3µóqÕÎóM»K'/»õÄ_í­ã¯Í‚Œ¨ðƒšÑ÷€øJ‹à`ƒ 5qt4µÉ;ý9{Ïx>ë:¬1 ‘F_sèZ=  ‚ºJÈêÏÖ\ü˜ ï­j³—“áá÷7‰Ùòµô g€úóðéö ú¬8X€ý_ù€6Ëû[òŸÍöË 6ñsÏäÓ¶¢­EÒË÷Î=%v•@ªŸ‚pëYÌŽ#\z[=Ü(—v©Çƒ}§A)ëci}ðç¢ ëûng~§I ìwâ9¾þ5Œ¯5÷õ°}wò˜ß­Nýs=õå}'ðùUhÓtw”ßRã'6Gç*¨WN˜þ?àGÿmµrå`m18üz/ñ`l6åíwxîY0 ·ç<óÐBk²ä`нŒg¯!Qß«wAúŠÜºsZš9ëˆÿx‚MÍ|$vÞ3³ ^¶”¨z"¨5^K1W$гº»¯ÜB¬òBb¯ûâó/¤ÚQ¯iXs<¾$+ù%.Ù²Þß…º¿>Ö·ÙßU±f?ërÙýkÐo‘rŒè_ƒí_WQ©úRÀºÖ=÷†Ì¡.,úÂôuU\]‰DFJ¤i‘'–JŠ'Xï ŽÁ—§cU¤žŒ!Ö¿EV›™ð½ìÕßK~*‚–è¤.áõÖòÖ?D¾L¥áñ‘TÍ©á~õñ˜‰üÛ­©4™+háYß»<îWy z«[v›Ü`S,úò³`³OìÖyãé¥á1;ˆæ~dˆ»¾óñj˜^r2Bzý…Wï„Oáß!^•n ;'…)ý ÓµŸ¶Çß2‹«Á;¹’î®Ë¨÷¨uø 8ëÀ®ƒžÿM“Ad0ë÷½ÈsÚ‰X5:ÚÂãoÝÎ_#ûðº1èç¾° ?Ùà~ì÷lÀGÉI®N ”–ÈJþe¦zx"-º_vb‰+¦ÈR6·~#2Üã߯xöQLw˜ÏDp|©Ÿ4V3LìÇ?CÆaDyùXæ{%ÛÒ9ÈÄ=ÛåÏ Û,Õj³à¢Àì¼zhÓ9 ;f » D@~mªJ„W;kÿx žòÝG!å8Íf²Út?ÙjYݦ‚¬â¯ý$^¾OXFŽœéûdö›ÝxÚ ^ž¡Í_`Ö+ò#QQ+˜ÈŸÞ¥BþhºË|F½›H…8U2ÔCd˜åÏq­Gþ%hbªŒ€!LàÙˆøcøuwIK6»‰Ìó<Û_ËÏ­žKìBþƒpÀSD…]!–O£ëcþrÝWÙõ9¸_ý<‚ÇÿRQ3Öÿ}ô]À+ÿ¿\E‰Ün H=k½ÆnŸ!Ñ5´vqmsL.#Ï*ŸÝÞŠÕyÅ«#SÍF‡ÑØÙ½Øà@Xô¢ÿÒÛù“;ž¬ã3ùÞïÉÿÙô“ÌŸ|ø¯Wvn#]Wl»ä:Ø”žDûZ˜@b¤{F&ß¶Ù5~1Õ®k‹¡6/ Ùï‰T@.Ûtž8Yá3~*2^|}ëyàªÊ†ú=¾ßCQ#4s--ð_­ôÔ" Ü"7ÙöcÙgHº /¸€üAÈ—¬uÍl'Bl blÍ‚-ê |ûÒ–‡5Ùå¥p… ¼?¤VÑ8d½Ò Â¯ÈBKèP]Áí‚FüÁÌú¶ªÀ‚fºŽ"d«°Xî,gž¾”Tc®I©Öøªæ8™ý92æÓˆþª©Èxþc|f™Ÿcü' Ub"ÅW^ÞûR"Âx›ƒüSÀ€ZäÛà·òò­Š¹ 丄Z[Æòy-”ÚT°*~šE¢ÜÎð“ÎP×'ÂÂňùXú›¿ZtžGɵ°žþ˜Hq²^¿«"3ñÒX;ê2­ïÍhaÿæêH-0ß ÆÃ‹À‚bÁRBñÍ#€ð6©ZÈ qõ4Þ|ÀOÈŠ¨aÐK=*9»jî¨Ïz«üQƒ-hÇöC5á/µµ^P f÷{oÈW®¸khQÿæúÒµ‚ Mq=¤~ÚÜïük«É¬…A»t`ÜòÀ©ŠÕíÚŸ¨þÜ_^üѲœlq~°ƒ¬Ÿ†Zj$òVÖ1:ij^é1ƒ*éFrMðÝ]Ûet…Üwnœ”­scñ¯²¦çëQýÜB›Šž{Ùø“V#ÎïÂwæbý äúýÔMUÁùÆÚÖ_/ÚÏwÁÞ«×5RÐh©Žü=-æßY…]62áp×OìºõH?^œO®¤6·,ù=#~ß ”|÷¯é§cüJ¶<SÚìóCl­¯åy}c´ÓÿX¡«t9‘°\†¢á@Oüýû«ßÏêáP`yD¼<7\°ÐW%?‘nç¸êkd«Às{Á5ã¿ø£;`|Ǥ¨`óRéLêž²`à2G¥¸È¥G¼ÿþêA&ˆëö»’Åï~Kª¸H~k®ßÀöàùU5v'&:áßiðÏõ9ùâ¯W¼ • -i$¯& úZ7bÍú:‡X.òõÓ†òMñŠÉX9ž"/tã™8 Ýt¼¾`P– ®ä€¢úÖ•üu¿ùË•ÞÕu5]<©îÓKz‚Û6¤´.(ý‘z>¶Í ·¦×©J颥:èŒGT#343ß÷Áá<Çm¥ &rC\|*ÁNxõGEVlF&ìG Ñóš‰L0Zc’)†ë~Ý ï¯îëÀ‡®"9ä+,Îrý×Wv— ìJ꺻c.<üæˆ^ÖÇH?ÿÕeG­êƒf£ÜGéNÕ”ÒÇ…„õ’VRVúÈ6?ñ"e ¿èÿØÊHD'pùÜEòé.]O\Œp—\4¹êŽ»>.] ¿àÿÊJîú‚‹S]©€6 S1NC ŸÖ§õi}ZŸÖ§õiý¿²òRßr_ WUX~zj<®¼·œ+„.þyWR¶—ÅÅ…åîwÛÜ*j¼ä®¦Kë¸:®#(‰'ä„!º«ÃÿÊßMá2¹x® ÷é\7wÙ ¢häÂûw»Ì—Úg¶kéJðרcÿÞJçr廇;êî¸ ®;¿uÄæÉ]H‰"AR×w½j+µä©ïJ£ƒLø@¾?hçó¿\vÜ6‹Kƒgg¥ÆY)qôªÆÑ"2ÒUpm÷Œ^¶:D˪ÓÓò-,—ÎàB"¡Œ+ð?öU ›ÛÜ®®K)#ufÓ9ZPÛè<¹èzºò«×¾+ŽjLÍ¢su±Ú~‡®ŠûDHý‡Ö@f¤¯îÖ»†r]šè(‚# ñú>‘&î jÊãÂÚÓŸ/©­õ€&J4FŸJy)F~Èñ‡Õ€Ù>‰çæK6,¿LoKýY?×Ìh º†–›ò\à»Ú£©VÖœZE{¨ÝÑÙ9(NP ìêƒ<4,CV·þÚuÌšC› gýJKh# ¡v½_W½+Q´»fÐè~'P9­ë¯“ 3u¿vá·%Z<è+]ìÊsËŒúþû+h—ÏïçŠI,M®¥°o]åsk:Ý/Ïä‘Tá™Ôèã¾äÇ;Rk~°!¾Ð l@þÚÚO'k¶ |zôZ¦´XÿÁ•ÏÏèæ»¼òRZcÏìZFkj; ­ï$¾~CîÉ )­ñ‚ øF3íîõä‘C­tœŸœOê:¢b˜ÓϤªû’XjhÑþ+˜mŒ.””×åxy/¢:µ~ƒ´aõ¹Ü—Hv[ÞI|tò@*‚Mu¥¾#/VÓxZHǃ“Í´–¦Äzù¨°½Ñ3ý‘á”®–ëhÿîÊé3}_²ê¢º· ë¶áþ–¿î/³Ú.vëÛ@¾ÐYä¾ øû8Ð!2ÛÌë­eÐØdË–Ú„8G¾èO¥ðE Eü;+Ì-Öï&ÍÈãã±bSp>$ÒZ×¾ìzFbh.r@.ò øNÎYõò·ñÑŸëgÔѺ¼ˆjÇúvÕ×wèæ'½¤ŸétSðØõñ·V¤ïGUK’ E+ýRëáÝv ëçØ¶z8'‘Èñe°¼]˘èO¬üÞ¿â c*ðÿs2Å4µ.€)ȇU±ýÝ¡[`ïõ )1^ð} ý›+³gì½] ©'K%1Ü‚ˆ®¢è©€t ×€¥-"ÊâÃ5©¿*¦Y?§ŸY£3s´’¦D AÆnº˜X­[uÍ@UpÉชƒûÝ ×CÖø_Ö ¥,–­‡·?‘Xÿ²œ—¸DÂ`-OŒå{åÝÛ€Ž•ÉüɈ‰„ú­Ÿz*¡®÷ûQ:ÎPÏ_=±ŠwT’à8-+¾_ún·¼¡Æ±>÷¥Èfk$´·ë˜Þ]9#Á¿œjÝ ¢‘ƒ 5ñ“œÈü¥Ú~á’¬[Ã;”WuCúx~Ÿ Ë §ÍøÀYŸ¾óë¿^ ü±Œ/Ég_Ù‘ô½DÃîñt¶8ü•<ë ©H]\ÿä‹ 2Ô%΋ iñö÷p¢’‡œ×ÛGäS~$â§À†ârK†‡üˆ/ÌÅk I/X)JD­ßE’:ÄöDs) ¯×$,XV”ûBHsU.Êa1«ú}ÄŠ€ŸÁ‹ pŸ‚èØ+W%8™ }%ûÎà ê‘/ƒxUs0 18¸Šì±J:¢ïàñ±F wÍUåká­MÑ@°îš„á£àßqõ®ïùZ*ƒ§|WØ“r ŽÛN®Qý¿‘”xGÏ÷¡èä2 ìy„Oºjê£z .!Øô¿Oâ"ÃúæJm¼ú‰Æ«cú.À!õÞoþàwÃæ§MA›*Û}¿ëw’ §Ÿ‘ mvØF}åËR ô# .À¿ &WfsÉ\ Wœˆ=)YÈ÷‰÷ßåd-­¶·í‘ÿ¹ï‰uÜÊ£Ó² ~p‘G ‘/1“— ßò)¯ä7ê¦Þ3b)¾Ô¼ þX< 'z¨ŽWtÓÝúT– .i …wfýäÔ»ä3ª»ÚÔøïä:èO×Kòx<=ê÷ïìÆ ã{ÐÀNÙ‚GXo«o°v*ÞÓ)ãïÈ—¶Êæ`ÄðWF‡Æ/ ûù(¶S0Zé§Cu¶N×{º2XÌÂJOæ«â¶’ï’“» b§rª?ˆl^ vç'd‡n%6Ëjoo‰í ICHˆ\ñÁ@ñâ¯hê½ß#Oyæ5wvPK{ëϰÃñ:ny]¿—®ÞÙ=\Xp+<™½0:Èï9„'òÓ /#Í{9àe¾(kñü]üÜÊ¿£<ŠA¬¿•’ ß-yÁ-ë[ŸËóHü_ˆ²~¨ÉˆƒÔ€½ùÄDøEE¼¢/±Ó$ÐÂ;ëžÌõ–¨ú Q+økrýSǺ;°™GXù=vß(«ð?í‡Ü Kd:Y>ÿÎw…÷ڎϳ~ð{pðW?$ØÔÏ R~ B®©/A.š6(Œ¾ÿOÝ%v?øéNÖ¡(ß5=±,èc;²n•ãÄùFY†lÖÕyµïp°„ûÐéB’+“`ã· Ã1|â>^𛄇/<ö2|©+ÿ3•À.°?NÐLxÐi­(Y~¦,9<´Ûè'¶X×çNh"&¬Å&íCÞ•¾“Çvj"ëò²?ØEþß(C}_Ì¢º]I²Ù>^smCwyå <â%þË÷ó:Õ©%³“)Á1[“ ÏHý€MD%’BòbÁ¬ ÙTyŠß—äÄA(¸ÐïrÄ÷qX‹t{ùͺšÞáçb€GL"Ò›H"Pp«Ì÷»÷aÿßÈ ÿ=Y L(>(hsp2€¹É…eÀ™¢>þëë2×(àò'u×Éû7¤蔚èlÏ7ÍI$X¾KÞ²‰&ÖÏ`5ÞžóÊï% ¤—ü"u%%f¢©Sha Òïå¹çb½Ôc£Õ\|n|µ=Äy”¨k¨3tsÀdÄþ¶·'œg'é±zhâ9‚Z­g=ÐÞƒéÖè°B2’»Zñ7È\™(ýÑM=©rü@Ì-¢¡»° ‡í´ÝqIà~Máûå°{qíè;ÅÖ§N®ß¡çèAáÁQ(}"—Ã5wÑðô·~ò‡uðûˆÝžö‰Ñˆõñˆê§áíÁºãñ“>xÈvô³øI†È×Ò]ô÷ý_Šë8]„~6ù:á.\ø z-ŸnBe5É·âñt)@­F5\]³t/lBªÐöî*Þj]R•™üÄR·l˜Í±¸ªî'ãÍ#AŠ`ñ¬°ž(“½›Làq4¿'`¤Žá}wñþˆh`Z OÔ§F³¶~ ºZ&vN ™æ LÐ*=Ã¥u3Üy2ý±~†qAòü|[½BÜ?Û»ý í\ä÷©HÓ [~›¯ªge–ÇÀÙ`â¤~ô‚é† <ä=Éu/Ö¯DDE"›ÄRS–Â÷“óØzíuCº´\ ;ÇJ¿”ØpµÐÔ=Æ^ã¥Öçá£Äå›ÚT˜äºCDüaɬÍà0ƒõ[­ƒT[¸­!?ÆGn›rÓLë¦Öóã¡X‡»ìHŸvìÀѰ a_)tؘJs§„I{Pú?õÿ_ 6ÕÚf”„%ú#Ù!`¦»Èñ7Èèo`1æ·@øe`|ØL-¤m š}ƒGÛ¼”Ô÷?ᇠá¶61é ïÉÎß?C{ùiG³ûiˆUø™úŸzètOdWÐMá·€JI@ÿçDxd´c—ï€ñ+þ†×G„çÌGþTuð€o¾-òÖC›a{!º ÑdÝöfù½ w=†Böþ(Šu€k©5yCß9ØzA––Ý+‘Ñ•tÕe98×”¸ ¿IeGú~ »ð‚#|–õÚíõ±›ÏXƒ†ÃÈn£•ƒ2Æý@ù›º©®Lõß5õÞ)(#`í¨è¬««Í@œãû™ZÌÎØÿ¾|ŽüÖû¡+^ß.ô%Zh‚Úè)FT÷%Ÿ.öçwà ‹|'ü|â$*¹ô=^‘zÛÁ³g¸f7Ò pB­@òQ­íÂj›°÷xjûAè`º°À‹ÑÂ|îÇû£`o¥ v74À³™všŸûÚhe#>Þ Y­çÙ<}3’/÷“!—àõIà}±ÁÙÈÔ„vvDµ‡rú“s•@Àìn4yn#yù²ãô§ý´Ÿ^ÒXZIW?án R¬ÜŸÓ.J<¾¬Ÿ}Ñ¹í ˆ/ÑB{˜þQ48 „Û‡7s?ýŠõ]Ã2j2j²âfIoð8ûÆVn¢/‡ûœ*o–µë».“£Ï·“¥“´—&Ò?˜ã»_®Àfù¹†Ý­‹2ÿ׿¾ (X,ЂÇ6'p,¾r¹ }M&f–ƒu±‰1›%”‰¼‘LXGiªÁå®Z@åwn°·ûMR€Gauˆ—X7áµ?ƒcC½·üˆ gûž¾}ý¿­T{EÀÿ 俯ÑAnª¾¶ a}ü¡£Ž”ŽH¼„(™Fµ4Û[ÏÛäšQãÁ°"âÿ6y¤NÑâAW\ÛKïÜ*Wþ9UjÀJÂkHØÚJ¤]é;@ÿЇ¡… øñâ¹;òl“8R‰ ñ_ù‹Q5Õ†ÿÖÆêSM—4¼~è· Låõo%šæ@z›†žÙøë¤—é|íêòZ|V3ß •*úQÊ‚°ý)²ÜKü<‚¾&ûMƆ |g·þd€ârÁE†ñwÔ^dþÚDücªšØ¿.ñ?‰ø~΃'í÷ø÷+•eZ´T¼‹¯ÙðùƼ/$¯Þ,5ƒE¸6®Œ›"%4ßÊæÜ>Æbáñ;g÷î»?^!ã¸$ýd‡›%ã`>m@€š ùeP1<¸Që·é× Ä~?o-Ü1ùÚK‡¥þ/«ãÈíµ¥d Ý :ÀsÂÔߊÍ?{áye€ ? ò¬&ê× 7’JTɤ_õïØNnéç^?AŒ • ‚˜M†?Ás‹`8yA“=øÒ y„_I9^‘SÈ×zX*¸\žÕÞwÏ]}'Ñ‘:V*¢¡a²»ü4vG[¯oë?ŽhÈÂk¢éza€ôëmÚÕ(ª…UøM>¡{ñû;<{Ý”´š‡[hÝã'BoB£!ˆ´êÒR#h òOàW;¬0ØÅã[&§"Ë£vÃ~l7×÷{_æ»ÞÏõ³?WaÓSÜ6ƒpÖù¿;lw"(1†Ì0ÔÏDßÞm3®ž·ˆ%›¢e?ó¢ÓÚÄLk"åw¥+ˆÙR" ³oÿeutÙ\gs_ãÀàbõþœ—u¯_„Ï@kÉ³ÐÆîw uW8Ñnyæb¸g=KÁÈ9¼Ë¢ÿö·.É[ùÄ'Ô–é‘=5ÂjýAWiŒ “Z^‚Ç®2.¯+ý¯á¥çýäW«Òï «õu_‚\VÕŒ„ÍžHT\FúEÒI­ÂõxýÇûÏ}çð„ãÜo†læUÁƒT‰©·jrù*ТÿyÅwéÜ2É©±`)vÎ2Yí3}êç^Å“×"Ù"ßû.zXçÏ{ âÑm^;O:€ωìÙøŠÍ|Û…ÅO‰ñÉžC\@ú#r•G±4œ^%JQ)”Óu0à±Ò¸Ú.‡ü„¦FÞ”pùtTíáÐ@8ðl5è¾ÏžâYðF$?†<+ÁƒPzL6¿ÞÏEøIlöÙy4pÉ÷¡…ËXÿš<À“ìJáš‹ü‹¬Y/ç‚‹ýíÚßî”–§ŽM?¶Jç"Þ»ÇÛ5¬Ðfl Æ—ûη¯áÉ6Å2™0H—¡›­þ*¡µþÚéCdÌCþèÙ ^ýˆGU©z.ŠõQ.»rµÁ§ÿyj2@WŒÚ<-ò¼ÆÃçû*v6µóÜ3ÐÃv?Ór¾Ÿbçö÷Áå#‘/žâÕïñþ×øŠõûÞŽ~¶øëƒ.ã%§‘§Ÿ¤[ÍNÖÅZ\ iüke0A?[‰]WØ•¯t—§Y†ì#¨Ð¦ëãež>×Ï>A,Ešøük"Ú8“ÍL ]Cè] ûYÌ+¬Kþ-"á²ï º›ŸAØüþwÖj°á\Á¨ÿ}b—ØçúkV|ú=v[»†OO&¦íÈÝ\¢~™ˆ_oáï©íúF»º5¼> '¼¿ÂÁ¦^­Aú£r¸Ìý5^\¼I6G.§7ô®VýÁRùžËdüÍÁOƒv6íw1°ÊOp¹ˆÿÛUOËðïeü&dˆÈä‹]°ÿ~ªG´Cûé¿[|Æ;è§?Øõ iÁ”ÌDW2^S7à}:÷þ¯Wz—øÙU¦N K¿ögûmÚë$ìyÅÏq8á'»¬ß¡‘ˆx|xªÚd Æl?åÇ®ý§÷ÀÈC^SëÅ®² éµ%•O-<"ÿúë#½êZZä¿Z‰]ÛéNW _þ@îºä±nø•Žz(ž^óGÿíß2œ]™é3R!3Dâq~»ò÷¯:ìç>eVëׄط#†ý´¯îÖ¥’6ØíÍêjÀGJº–R[Å‚Ñ|„µØŸ ’‘Ê®°ÞñsPV!ßN|û$%R€ÿíõX˜¬–<˜/VïÆ_"Á¢*…5;÷“t»ÐÃøþS)OÅü:äå!dwÝÝRìžïm;`écb=¢vÕæªºÅŸ=ì§z­——DõS¹/ý´$ÑÂ#ÇfÐa1•Ч ’WפäÈ.DUS}Ä:=¥÷ùŸbZØ¿¹¾p)ˆƒ_ÝS©DžŽýê€q7Àz;oŸˆêh«g4§á3‰D…M5ˆè³aý…x±k#xŽSCj'åç8ÆÔºÿßÖ^Ú;XN?øÓÊGEÞÅ•—&TkÕñëþÿ¦W™˜ÈFòÒ¥Ž‰ÊïÏá¿Uý^×XÔ Ï‰‹=ä9›™)­íý^¹MØ}(ÚXªË@¾ÂR$Øíýú?«¦Ë+/ëê‰M5.‡}£ëɬõ‘?7xguÍalüœ¬C&‹åÏf÷,ö‚G=ßÍ2¤Ák²ò×ï´ž°š¿¯v—jÔ›-æßY%`ÃÈNS%»ÞÂó‘ *!eqnIõ<È·ˆH<·CâBj3°¾$ÚÙ›yví\”gTQ©z+¶Ï¥£©wæë·p…~|~É@‹øï¬<.º+æ¹åT°iüµJ¶¯¹´ßÛ|ÿ>ÄâyëtÞk'Àö‘@Çsä‡#p¾Sþª‘ è«6ñ>ƒ÷çJt—ș튣]oÿÖ*áÁ;w7ÝZi -34hfx^€h¸ß?u«âë%¼$ùŠ‘ûÍ3V/å1Œ7¨hã‡é@àWª»å2Z >5Ïß[å`ƒYÝQ÷Ñ­‡»åÕ ~÷wi풹'éýµ/á4xÐO;€¿ÃúŠp€pÈrÚSè(ì_VïSI$“ Áâhßl¥tñ]7OÞÃHOòÿçT7…ýñûê~:Ð~Ë¢=$«^GuÕŽ§"ß5âÑïbÝÀ¿Ñz:Ûï÷]#=¤˜«h¡þS+ u¥ûàF»¦rQÏkNòwm…¬³}V¥¯üñ=²$lÖÇé쨬EmÚsc¢¦ŠÎ¢~l,ã\©`1ëú?»&¸ñnžLÔEz‰üu7[— ñëÜ’êaYägAÿ@Ȩc¸ÕóWx¶!^àÃòÁ•uàÞsEZ»°øïyò^|ôРɇ`ážzLÏÂl;Áè÷êB²[¿Ë÷ þˆ´Âïë 9B Ýù`þ¿½2ÁÓ»®£›ãîºfxÀbýFSV¯!uv=NéêÚRp‚#º…GMñŒÞäÊmn¸kà+þ;–õlùÂåð=ÿòÈ ­”0¨RÔýš(è3~>‚çì#6ÂqÓ’ûÉC^]Lúϳ’â ±\×v›;¨sÐ ¤Þ3>-ýAú‹Ø°ë€¾”›®©‹Œ§\ý×WäKý’M†ésª¢ïu»¼s·¨‹ŽÀ³‘å»ò0üJ®P ¿êÿÐÊíjP!ª[?¾çÞëLiåËvwÜ5¡®TÑ?ð´“ÿØJ"|ëªÀ>HW$³kæ» Áð¨ÎÿÌŠç’¸n¢›çr’j%Ó|'ç§õi}ZŸÖ§õi}ZŸÖÿÎÊåRÄ2ü?2÷ɺÅ$u‘`¶ªÃ{³Så–qaÁ¥xœÒ¥r‰ü ÿ§V%8n ¤Í‡Å3»în¯ûÂEAâ®,+Ê¿rT>‰aÄ©¹ýs­’Ô6¥ýQñ˜H[o膻ü.9¿v)¥¿|)‘d³k‡|épKðÎ6ÿ=+ ’ĤêÍçw©ÎpÝe®L¦òíêªò\6ZòI|âwyoª²ÞusE\ pÁöU¤ Îþ‘•Nã²`UçBÈm¨_h]½&sý$ëÝkÛ¬C}¨Fº’¿î–sn-úÉêòÚßá]±a$XâòKO)©õµ­vÐJZ[ßITiï~q•5³Ñ®ÚTãjK]¨ó5\PÈ Îh¨›Lwq\[W-w<þû«è–žŸ7Ýq ¥c4)–·‰¾m±re-¤ƒ]y§í´•VÓ^ÜWÕœÚS×ëc]ª?ð¯œæ–ðx·ÈcÅ@ö þ¯~o@?Ó=¯~…d5,šŽÐ!²_®jžë¢ùWY³k3ŽŽºk?­t‹Ž–ø²ÂUþƒ©F†K†ßær‰¤ŽÒ²:À&:ë+ùÜŸó!1¶–Z ‡Í£éa¢?™fÓ:ºX?òšÉxŦ½uŽ“=p„àvÅ׿½ê`û¸`w1Njèmêµ'²+êky& Á:Õó’+[?GëzqKGj(dª³ñû ZŸÈ©ßë4M¢ç¤•Ä’!ÈŸþ1'«(¶Jvgq›]R=„G×ROë— ^(ÍHü§ÐÇFûji-‰§k蠙褎¦×䀺¼#¡ÆA¥5Š&Ò«²XÞ’-›üf¡ärõ‰ûžn©+$±uvë"áï±hk½#iˆ…´Ø×®‰L¡ßK)äDtØ«Šâmu~__Ó ûÛ寻Úñúhz ­6Ä«‚ó*×ùÂ-wƒ$2öþ<ËE^{)±üµ›…õ¶DÇþ•´&¾Øwðk®‚šéOd€,ü%ÚÙ¤«µ:ð#qð“Ðsü[@,\Ñ¤ÒˆØ ¾W¿¥Ï%w-Ý/RL¿F–¬øvE䌨Ŵ#2ÇÒëò\rà ÙÐF-ä «¥Èw u"²‡ã·ðù6à …ýýb£7öÿTŒÔHÁš S>Ä7 *o$/ÒVĬ³se͇m' Õõw¹$‰øÛ`Ý믂Ɋ~Æ sý£ÐÁDpb|,¹@_Ëås÷å |8Ÿ–€ãVA– @>§ùýn°(d¿Z<YŸI -ƒÿ·@ÒÄ÷or…ØøŸ_ƒf’“êúÙðÉß‚ŠßÁ†Eù$e;ý[+µ‹úU“~ø¾íÐkŒLåùiÝ’ëS±½-ÏÄöz[·‹×rQ®‰ðšÄè )Y®ŽŸ`WÉ â]iÑOe¢d·Cðƒ:Žl1N8˜˜é¿ ^ua¢?½›ãÁ㓽³r+Oô×Ç’mð»Þùµñݯ¾ð]~ŽH&XAMàõ©è-)•›ðþ00¡*øÁ5½ _΀/4å“W=ôguäÐÁlÿG.¸þM©Cd—å—ób¨u±Í}XØÎ)loòÇÁÚï¬ µ@P/7Y®:ùÁž%ñÐV µ}ŽŠæóËÉ#q©:é 4P Ï8OnIU\ºÿ;˜^rWש ³##ןù“ÂÜîʱއO|÷wëƒþXÂÏ\ Atÿo ”À+‚ÀÀ„ ¤u´‚ùñ„T ©Í“HI&hkÈL4„ z+•`YÁ¥"H㪸‰nª4åßÉ-±Žö£ñ„„Øõƒ\–üS|þŽX'Øó²mÄDâ’DIZß1<­Ÿ’’»'AoñÀƒb=/c‚)à„éð“6Tùý„¼š>¨šdpa-øŸW2ðè» Éñh»žç:σ‰m‹éG¬þ¶Ä{B¼”=dº{0Ä|è('þÒTïŽÎªcsÛ¦DÏ;üDù¼ÔëûÿQ¢â!%¬aqò%¹e›ÎÑÃp¡ZGZZxg=`K¹0XÓb{‚D#f­û÷¤;ˆÏ_FÞ»²[výnòÜ.¬9Åw<Ï{Š‚$·žGfëðøP¬ßå]lÿ”W‡Á"ñyu´+x:,`»à¿/Ç‘7hË`0ÿ!¡ç}Yĺ³/—”Ò›¥§óQëÙNöÓÈ|MìÇúǹßË£ù²ˆxN¦ÕËHœ\ çÐÇIy†§[oÃßñëü>98GO`õ…p CTãõdÓ•R*Ðâãý9]C÷P Âú£é@äªGf‹‡]/bû#¾wÅ1þ­ñ]MîâùÖÑnþ2QñFóž‚—yÝ^a]D#ý"*ø­H^éAœDœ§n‹G Ônx”ïÏk‰§ÕˆúUXÐz½‘HjQ^áÕýd‡%Èÿ‹ŸG3ÐÁ?Û# ­{ªÍ>0 Ø {xËs½%b‘bòèƒï_ Hè£/¶™?SØ^E¡â¨uq¹@&¨L–²~µÑü®Ïå²NÖâ —Éx«ÑÃNž±n'Éñ3d¶Ø¬€=<»mÝâ]¡ôÑþÇ‚Cæñ±žF™ 66A¿ÒÎäš/àÀRÂûïË;*™…Ôf«e,òç âQí-‚Ï¿–ȵùÖù~ž'ñ€m² û¯ïH ©Š_Lä¯sA†Ãóߣ©›ð¿ßÅú~Ù4±\È]Ž8(¢¥ýDÌT u©&’Š‚•ïâbÁRraï°×|?ãðwɯ¾Ë{Èm×À½èãiA报ê‡9ØÏ¨ [‹ßLCOÏy_B=Ç3¶ì-L:/Ùô[j¤mTŵ‚¶B ©ŒûZï[~OP˜ìŸã¢ã©ï`ô5°Ï¬{A¢Ã|cé òÞ5Ýö÷íôûÛbëD0l¡Š®! tÃê_#ÿ:¼Áfâħ›‚¿Ÿ^!}dßë1Û×Ô=HG¿d‡I‡!# äq:ÍÐ`)]&7ôLÌ–õÌ,sŸö“‘}<úˆÖÙÄÐ}=žÞ™*n!¹yòý^GÈHß!ê‘üŒv¶c×þóùEð?Uâ2bX?/79¿ÅE—Ÿ¡Ûîø@=)iŠ9üuË‹ÈZù±ÒC¾÷±9Ž×ÈõÖéâ4¿Ý' nûNëàÝa¯vn/‡à÷ÅÜæÊLÙ„üt Ùí0ÙÓæ?ñýpNzqÖïŠ|%Éi¨sƒ®¥Õö˜¿”Àî…NÌ­¨«ƒ´Æbl¦[jµ˜dõ²P&áóÆjŸKxÝ‹„Û༙Á­6:„Ÿu2^¿ÑwxýIÒPÓLFþàÈ>"hhh“cÖ€“;ñ¥;ä’/ˆwë˜NÔN—€9çý5[é]:7Õõõsâ€\/¤$ß*¦^B²Ýrßwû€ýU·bçE Þ{éÀ·ïHoG¸;ò?–AÚ_géT¼ã®˜ü‡ÑÕV8â3˜ÀVÞy¨íÏ E{sÑß"â‘+Ðc¡9±þCw;[Õ“ØŒD¼’až¿Üõùù÷ˆ†ùXr–¤DöÖÄnäÅ«?ðÎ8Tv½y®ÖÏ Ãy-ñ²ÞÀ_béäßDì÷=‚{ø:ÈŽš&€]è¾Ðü®Œ{îl:EVìöÁÏ©[¿[Í­ÓXY –ÇÁûú.¾#á…­ñÿoÉå]a±ßÚ`ùþ<€M7ƒo+yï ßçÚªeEîÁC¬7žõ¿O¯|'Ÿ“aߣ›,ZUº¸¯&]âoŸ»‹ÔÉôªÏóg‰ç}Øj¦Lö}›ãçÀw³ýBù^WÙ¿Ïwƒ57ÐöX¾þ<Šê¶˜Ú¬ÄãäÊc²Å#è!¼h8±›rÄwEÝÇsÇñ«‚IÒ9€}àj+õú>‡ ^xÄ^Šü‹á8k=ë™àû>ÍFŠ‘|ûb~¿¯ÍÁ© “)ŒìˆAW4bS0¾Ð_ýÑo]pl&Öf;Ûðž=ü\Ãm?¸æ;häÔØòeχ•wõÜc—‚ú}1õ̬Ç÷» ®CöáDÄß~,¯Kå'ƒ×j÷5Ñ·ܾCþ6:OØ„¼°¯u‚žÇ»ÇâISð™èźçÜ‚S<ò½­KÈx"0pë b/…ØQß¹H~ijü2JJlÝŸ{ëyÛG~öÜ— ÍrIäÏŒ7Å×[Âb žÄBOŽüµðÿq>ã]D+yõ<‚ü«|áÙÜNâ÷¨‹mzb:Ý/}z>¼˜àÞº§`øJ8Ë[ìršï:IzË÷Hÿtoù9œ|° -@нp& x}tÐ «×„Éô¦žëDL‚߯ÑmøÌ><Àú mÀk~À{æ¡Í5»&Q¨íçƒ}ÖÓÙ|ÁÐ{*ѱKBþ[ÒPçc»®`X-ª¹g`ÇuXÞW: þ7šLZ©­ÿåf¤^“<&A[ƒøìbÓ KÀJÁ~“ií`pDr@*¬þÿ|‚ö ål_ïÚUG‘Æú_Oá~¤Ô…ѯóWCöÓŠ†Jw Çxñéå¯tɪ?òê£ Àf¢>š°þY6%;œgÊQeÔÈ]+¸˜ŸÕÐeq1°û!òqb*c/ëágoAÄËØn/ùp•Ïþ‹¤ ¹»~ÿ=‘ü„[DtñèxYb‘‘Ù[!ÿN¼~ÝKLEÔìÄHZ?Ið²dä-ɵužT èì»YÍ\uwÇåÐ(`’â6ç;1•Ý#<÷ŒŸ½ÁóŸä±<2n¦)t#1ÙÇá-‹Ñ—õ W,ûÄÜÓßå'#†Áê©‘<£?ö[Ö÷- ?S?|¯M¤¡ËháYU] ×ÝEä[ÆÃ>·ñךK_×·|lßCSÄæ® ³oƒ½Þá&‹Ö#غ¯ðb #ì,Ðh°î¸ïŸ¾ßŸ,ƒôé5¾¦ƒïçÀÒky­£K´»nî×_®ìà_ gKmöqt-®I`·©ˆnñÌïÈrˆÌ7ùg—ykà‚÷·ø9£|¥° ”\‹6=Go ¨Kj|+ù>.‘PÀ_3ÿ¯LúŸ·sI]N7—º.)¹9¯ÆÂ û¹7ð…øöa?ùg¶Ÿð; Éçc÷IpMÒŽt„L?ÔwÇ·éð«ñˆud¾+hï,ÙT4Ñ’Û×Àj‘?žM[Ó?l\4—ÄU‘òd¤xÁyP?.8ø?­gÁƒ»~Â|ßû|ªX‡çq°À¡xËjBoî 1?Å÷þ´óä{ИõÁ»Ç+ó)7%šÆ@ÙÔ®"o¨?étbàn°é“0QJéu|þŒ÷x§wÀ‹ˆ›Ôéç|¶i6smzùc"Ï¥Ô@:ë=t\M4ØyÒS^þ ßO ÷ùͺF_—ðßt:ÉuXçþëݵtÉe$ÕxBtûò£ŸWx†Œ‚*užG¹ÅXvƒ?¢{Ö_ ²„Zè$ú ¥K|Õ4íìö@MÞ_ù”PøzAÐ44ÕÞ ¢!4Ì÷¶¼”dJÓ›a1Ün¸ë‚÷§€Ô&C[»M-R­›§Õ~'Àµõ` :Ëó¯å3}%vÍWTôeó~læór"Äf?n÷“ïö¡ƒLZ[‡#ÞC‘.Se–&'TÓÏ´D°È~¶âÀÃò»\ÔrÅ©k“¨çŽâ¯á §ÖÅ~VÿS 0…(˜WD§VégEÜDü[^ÆB'ÐÎzâÃXï)XÀyb!9<ñ=I‰^_À­'t² +¿ÿ³R»x®”›*•ÕÎõYõ²Ö_Ïb޾ܛÎý|jéÜæsÛŒüÙýŒlëpžEmþQ ´pn°ŒwoÅ “Nùë…®‚!7A–ôÚÈ+j ƒª¦\ë@‹ý+>,赫?{Ê÷ŸŽ—ÛœÄô\~g=÷?øù¯3ý‘°ƒxs:ȃ÷gôg Âaã˜pâ•~Rêj øÿlêÉI"é$ïÈGv-­]t‘]¬:d¥u%]OWŽÜô$ŸŽMÑføÉgóü¤¹žñ à ÖÃõæùI¾v}‹uþ¿Kå ~Ž*ÚŽ“Úü´½>ÞAþÛü¼ š¾I3t¼Ž‘/‚ÕàY\l;%_ÁÖÎa݇¾—ïìognöáËËý<7›ÿ´íÌáì|Á[ «¿ñêDþœá#?Ææ¯ÇÆãCÆ„º'ŽÚÄÏÏ}6ì«ôƒû&Ð"ÿÕJìÚ¸²n,è ßú1ß:.ß{yð2~ðÓagâÙÓÑà ØßH±³ü©>+xF÷œªéWl¿×Ï~Þ(Ö þòdžõ”%âkQõuÓ¡ºŸùÞ5´Àÿ×Êéê»Õî±dW›ÙsÄ ¥VçÄį“âåûñ)Ø×Îl-ÁÖÁ²ÃÓSÓCÒÔèáȱoY‹¾ÎPž'+ÆÖ®Hý-µ±uÞOŒíñ]#‚Û*î*ƒI±%¯F„õžävÑOÏ/NDV¼íÐJ,»ËcÀz¼$-ˆ–¿žZØk^’ýw?6ûú„Ÿ’šWäóæi{í¬-´£¾w©‚i/ÜòþÖP:­/@®MHzCr‚ )‰[›r´œ¸é캆í°ã”È–ÜO| ȦxÇ9Qµ+žmÖs(?í°̧“öö3â÷J…`Ûÿ½†«àj¹ÆÎfÄ€áìç/ÂñJjꋆ¥`ú1ðÍ&ØÃÔjWAÖ×ÓkQt° ½ü.UÑÇ—°^EoåÑd=ÍS ]¬Ë´ˆ4Æ} ¿&²º ® VK@Í~4³#õëµþÿ3¹ñ°Ÿjvš¨Î‰ŽÒÀ_Àæ3cßljŒÏ®}nH•ŸØ_ó™OÛ¢µx: ÉGëuNÛDŸJ#íC|ÔÒ,d„±pü¯ÑÕxO;Pó•¼p™eq ÅøV*ÃÂnŽkçn¹üÈ¿KRÉä€áLÓ‰:_{‘'ÛRá T»¦c=õMWÄó©Üƒ-P4U·IB¥TiäÚr«ÐÿȲÖ²¯+-d„?³ÝSÇkgí¢Õõš´peÝB¢´þ¤­µ¦ÖÒszUhî³±¬qãÁ‰êä¿´ò¸4ÎºÓ ts%·~¦É4VÕÚ×÷óŽ­µ üæ6¡‰¾¾Gj7ßߢƒîÑEºSñ[<$d1ZÊhaþ“«"–OCá–¸§²X["ó8à¯qäJŠu;j9Ý$­´²–EßëpÍ¡yt¾Ó1:G'ks<%´v“ò“û?*h¡þ«¾ŸÚå'ö'Ëäh«ßèLü>‰^”{’O ñ¨4v®ë;$÷Ðú}dÐâºO'i}mB$TCgiõŽ ‘ ¥M‹ îW~üËÊ¿–w‡\#É(Uñ뼚ËöÒFÃ:öhv$n˳£5 z¡¿!iwbÞæ£ØüƒxD^"ažnñÝ€ãè<æûœ)ÃËKþþèvHAä*¦1ñ÷ߥò×Ò÷BK†âõ‰5²¶“ï5aÐ m¡ù‰÷ÄàÃD}ˆ§Ó"º¬Ò$A.h§.ÔSòì¡@0?3P嵞Ñ>VËy­TJ»ò—ωöl¼ãªîFu}“Îâ=g@ÄÅ â=iç¯/ ŽÝÏÿ´’ùÙ] àxñÁó&Èž‰[dͨ_imd(©!õ´T#ÿDzk¸õ<»H—˜yï{žV&êGé\пŠnÐóz“ω¥÷ô•ÞGƒí¤Ò—]?½²Áñ㣃~î…ôÖ‘$ªÞ@&ë ˜“X_ÿ[’̦':é—ø…õ„ËLfˆâ»‡¯§¶üˆî%ü¦Ûô Ù£¶~!_Ûë`ÌóSÂçwK{ýŽï:ÆD§å‰DÏúàÛ$ÞÈ ×¥!˜—.¸ _è 3ÈCÝwh34VüÛ¦‡~¢ ð³€f–ÜÁ`×÷ßZɸev½¥™¼.–ˆ›àñWa½$¶N£%<9íY!¶ž‘BÄûS1|p‰¦ÔR:Ë÷ÅOŠéà…#ðûû|ÎHü@ƒ¶ÂCêX<-øeÂô~Ä.W ™›býòÚ‰œßÿ¶n–wÅv/G$úíú¯çÄùQ°8Ü/)Ü(ÖþIã’&m¹OG,äýVêY½ ŽnÕºŽOGtä–*.V Åý¿VZ)¯Û+Ýý5My´·ö'ƒ—âöAl/Ük,Z7K2¤-¯áñöäÁ!xCNXo|Øq< õA03aà ü¿˜°A72i{ 4J·SQ¯s¥6ÿ »âz#S²YµÎ®Å‰ôò«\—7DÀy¼ÛÁyJ(•ÝëÂjpÿ¹ÚÞéðÂD¾Çá[IË_óÅ𓌰ˆ˜hd¥¦ j¬)\Ã`ÑûûO+qŸÅÍs™À½  ÜòY?!ˆw]>p{*/¨ü_qÿV.Jdd24§¹á|ÉŒ©ßÞQOˆÁã·¼òD÷{Ÿi4ýü˜ft€¬X-¨ŒdsáÚùô/W.WÙµwwd0ž aÓDN~‹‡‚ÔúHùÁ†xh"2(wÿÏ=Ð3ó÷ÐüþAîK}á–žFôgWßÅ ´à^ñ]|¿UìSI€­§II|!¿Ž1Y"€÷Ê_#âõψ…tøwzîgâ$¾ïXÖA91Öí¯†Ä;¢ñoð›(äË*xV2Á:ꃺWŠ›=@©w:×uý<ƒÇØm=^ÿŽ[€ YïŠó“ ¬?à9ËÏ$úQR!Y:*ƒ¸ðüY#ûä Þ`aÏË9¿›ïWráQ žG£¢)AeœŒ ‹Ÿ§D'Ÿñ3&ÿH¶ü Þ$ðƒ¨¼²yq$ñÕ t&GŒ†#Ï×*dÜÀ¯äî+WÛEÒ#2U&â³U>=ò½ur{ßÛáyB~áßE<Àv€ü '~Šu« kb[‘26š‰¬Qø ¼ÆoÂã©AÇ>p æä•q æ<ݯ'¨‹‹jp@€T.®«é"HK<¿\7•ïëXxŽDu{Cî ñe¼³ìâ‘õu=Wlò].¡©ãÄ{nµ!1ýÔ—ˆøB8øÑKð"¬ uµãId·]­ñý×TÈWmž`08’Â%u#œu¦JƒÜå`>©‰é˜øôgzÂïß¾Š¿— ²Ù/û]ñGe¥œòþÕ¶ú‘v’߉Ù<ôÌ{ŸàûïAþÏÑΤ¿Ü­;u;Ö_ ~Ão%¤Q Å'úóº Õ6)ÛÉ¢¶—/¶ß©Ü!Ûý~¿CȼSöòûy´°ÕwùP=%!‰”DÈ{„x?|†ÇG‚%Ù¼,ë ò9¾l¨ ¦ÖÓÕúX÷À*P/W»k€OÁŠns9Ét“%;\¥"L5‰^"â+zHBÅsÄw>·žXÛýžÎÝ<²ó]¡ˆõ·Ô€UÔú|?ÄSNS'=•ÏÔú&_…ÿ¼Äâ ¡ÄxT^„T´ÕÔOÁ¸g*ðq`þ«af¹ÅÅ6ʼnÚ5XïŽ ÷=¡·Ê~Y"sÀ<ëx»Ÿ‘mxÀBbâ­äënŠM¼:.}_ÛËøÀpâ6¾ò+~P Ü«²4Cˆ±r¾ûu+=EÅØ@ÃÉ•>Ü·˜‹ÎwËÎ·É ÷Í¥·°`9P`7±¬:koÅ Ÿõ5:@øÕw‰œ$kÉ u°Ô”ºˆ×ÌñýN¬Äß=ú‰ÏéÁ¼æè¶Yµ²—ç¾9ÿKðoŽ.EþÄ”?‰+䯹õRß-EÜ;rú&øOþ—#çvä߉íMêÈZ[Ï í$~û?ï!-ñòn¼b¿]ñ^–8¹ïõd4<ø˜^”þl{çíXò~šr²diøWàV:¸Ïr׋çÆóëõí¿!—°õt¾û|™Íýbßûmq°‹×Ö…6ñÜ÷ϳ½¥#î{àïï‡ý*‘²Èω¹„.Ãøî/ÅŽ¦YU˜¨«-y¦H@ ·en«Œù³’¹#©1ý7HqÔ÷rší;‚Nó½w‘õR#~ Ï©;°å ßÕw¯šÊý^ù”¬¿Wž@'ëùÝ:…$.Ž!÷˜Ó}±ÝÒð…rDC]+%(½±Ÿä®¹"±D Øû±ÚÅâþˆ·ÞÏX|š4ÔÛ„ß—Òï}¯Ï³~æÃßíe*ÿ¬ÔªÇS2ÎOŠ8Êë—úÎ)ÖùüqÝŸ3ˆK$ä"öÛé´¸2ÀçCl&wQ÷=1„îŒõíø–³·NvSe4ÿc5“rrÍ&# ‡ÏM+Fùù£ä´0ž×“äüí¨ !wœöúiQ»È—»ñ†+ü•ý~ê:ö¿VÂ1OºjÅ¿”°Ÿºn-5]˜_c0)‘¯ô7cÝ Ò¯¾äç<ÍöÝ/aÿœ°–¾ÔnáøãñïåàÀù†¿f„Û¯æSÆ€ÿ'ÀË5àÁJ^±Öw:#vÔÜöÇÐ:–û:Zo˜Ð.`)É=œÍ¼yCÞ~îŸ$·ÏÁëÆ{j¿ñìN2ÿbÐpÒ$Áú­A€o¨âéCþ÷ÒÊOÔŽC%p^:éÏbg¹Jƒÿ³%µî§~=ã­ô4F¹Ó?ºL½ÙÛ÷ÿî=²¸«én»ØpØ1«§~Âá:Pp€Ïßá6 d2˜&ŒÆW†âÃ#ñõšjþ·ã)Ñ]}äoN^ޤ[ñþ#~Rà??`"ö_K<ƒiœ!‚È!•àÛ«ìýÎÕsµa°Øj<ÿr__düÜ3ù‡¡—)D¾uÿ^Š -‘&·Ÿv3…Ÿ1t¸¸ ¼ëƒ ¥àö{‰“õÈ¿°©gò¾~"Pdr_ÞuO¢ðh”þ(µnÿÆTÀå]b £¿“YŠßä__dŸNüöÅÿ‡Árçy-tÀ :Áÿúê`Øûn4µÚóäé>?VÒë 4·ÒK¼Ô›îõfŒjµE=¬^š¼—M“âC݃ŵ0¹]uw×e„XÍcó-Lúéò ïKÖ鯃ýWJ?do FœÄîƒÐÀ8â{¯ˆŽ.óŽ&Ⱥ”Ø_Ì¿¹|Î2t±ÉwÕ<+v}”])öNÓ¹Ï-<«¬KÊ¿ëĦÍåyA¬ÿˆ÷>;¿qLØ'æåV㌒d¿‚šW¯#Íé‚dÝÈ‘ûx͸èã{Þ·å§áßR±‰+ÑÃt>g?²Œmƒ4¦ò©¥e%psŸþrå@úe®~”¤p›úyžzÌL-N/aÁÙÈ7iW‚þ¯‘f!¾0/1™{ÿì½Ü•å²þ?3‹înxé~éîîniéVTLR”’îîîn‘FºKZ@©ÿ÷¾Ýûœ½ÏÙûìrÿÖrÿ¹×ç]¬æ™™k®™yb†¨éö¸=bÛá!¼:ßw@\J$=áó‰¥ a8QÀÍ×~›±2$‘†FGœtÔ€5å&™ydËin¾ùEiË41½ççWoÃv_£—¹>ž¹èö­Ÿ 4˜ i Z˜Ž6¾ôña½Ÿxt-€í7«ëüOºNv½Ÿ÷ûs©ªR9 %óolÑýJ!Ù$£¬ ‚¹3Žécò’qp42”ÈæŽáoD6—ýŒö“>]t×x?í¯£‰ÞhÄu‰ž ëm…G·’¤&Lìç½¹£ƒÉÌíOLÅ+‘?œìq?µW(¬ÔÀ¹dVs{½ïi1Û¥ÍAª;ëÉù=‚%§ùÚpµº©Ÿ®+â2þ†U¿×&Øô >±„¬ÆÃ×ùyÛ`ÂÓd %Õu@Ëj,-_n©-›¥Âú‡Ì™ a’A®J\»Åv6ÆžÁIÉÏöá»wõ‚ºŠnvçú½á“Áÿ·<{ˆ¤‹@Èmî‡ó™Õ¾Ê9œöÞÂÉó_ñÇ»ñ}ŒÕ»‘ùtóÓÅû†Œü餴|!°uK`7ÐÂ=bõ.ð=yÜL°ÜÜD¼ø°›ïå¦@,Á÷¾øæØLæÔŸ8•Ï9{`‘S¼žÑuÇ€cZ}+o¨ù¾¶äÎY´UýüueÇïI ‹eßë øó{l¿›†¶™Øö©]禠,õ}6ø£;7ðˆèþœä6-ü: užG¿›ð¼—ƒ 9¶eB~WëŸ%z&ÿÕ­‡µÑ¢!s\ß•²õ¯Áî3äw»«=Î#É8¿wªßÓ»Ÿ8E|¸Šg\׌HŸœö[áŽ&±-ðâz?ùq“Ï#[i?ë·†•1 Ü™Qõðÿ~6I[Jê` þ_+—4’­z /…Æ#‡¾ÏQ¯oGúÉ~þÍ^›Žý7‚ï˜vÅOIvYR˜ã±{åŽßC¼î_Çýõ‚æ¤"Úí;àž¥º,OÞ[¡å ‘é/¿®‚ò¾TÖ¥öHËZsä_ï÷a^B®Ùxù4¤Ÿâ{ÏóÓÐV€þL–lì×0ðýÂÏ÷ø¸B–y¦Ü'â½gM¬¹…«®KXG8 -ü7*D¢ß¯+? ð¶d…ǿձäwzÜ÷†4Ó±çtrüH7Ù&Ãûn‚]˜ï~ï²ÂÈîò¹ÙĆ%þ˜Ç23K ýÝ94)AÃçvÌX³: <¿¤•L䯳•'5låfž|âÝ>A×÷w2­âo¥Ÿ9ÉOvsçt&-׉tiAƒÛ{6œw¿òsS××KÞuÉo2Ùsä‹>fZ ­)Ƀ-ôŸ¬¬þÊœhÚÁê`­»ê&âºó¿Öø ÞûXâ³ȽÐïû‚ûÕ|* ÞœÌò£…[ØwŸ0œç:ƒÁ©°-ëe-ZèÌg[„Ü5¡9©‚ÊÈ—ZÃ\ãÈ`Ú]÷ñØŽwÑܞѹH¾€ø7ÝO‚=H„Kg,…Ý!²ýà{ÞÏEzWí®‚;Ï?Ÿk€‘ŽÜ¯±µ$n÷ïÕbà-´VZ)L` ö'òÿ'0Ù}ê¿ldA·ñá‹þx°Û³=X N '5…¥ÝªÆ‡Hë¦û.Aö­`çžÖÆÎ{ñ‘JþŒª¦þÑbö‘½o‘µ¤ä ¶Àÿkå zM^§b½I^‰m®€ýw cqþÝèáÌó`-H8´KÔMŒ‹ b¢ßRØC)7£ŸsÄ…ØÜeÑ"àû-ˆ.À'Éãék ·ûè)=Œ?—¬¢Èïls´£„RäÿÓUCš“Eé×´œå³kxx1?ë·„%´£0¡Û“áê;Ëùýy®Y‘<î,^»çoÂï³û«?Êð‘úÀM•zôÏ´·ì¦~ʲ[пººIePP Î D²ع‹UBþRäw£}•ÿŒ˜‚Z!:pçÉç÷fS45q`-xo•-Ž)¯F7OÉ”bÀú¥m¸5³ÚĽ¶Áòÿ\¯P ÷“`ÞÆj,=ÿ6&&¦æñ(\ç(™MjGê;wÍ,›OŽ˜×ŠÚAjß4öŽÕûéÐ_$Þs{SóŽý·HM)lÿÆ*RɉDÎRË×°oÉ×Ãí'O‰Œ‘`…dÝÁEI²à&ÖÞÜ’\Ôz×ÁÆ í Ó} nŠÂõ­­-¶Ãpà›xPÛ Îºÿ{—ëøPVÞ”:Ôï¹¾“ ¶vÈÿ„¸˜^«¦§‚øÈÝ—¿áÖ-ÐŒ,览“çàÃ>ö!¼Ñ‚lÿªý=6ÊöëQi2ÿÿ½²bÿÜÒTÞÔ¸H°ôýù°v&xà=äÜO–^üÀYÜÀ3ËKÆü:Øp×|Ä ßs³/ðÙ66HhßèrIæ{ý>–;/®5áÛ``øwW7¥'‹/B{›o“ Ÿ†×+ÚÛ‚´îÌ׿Hi 󧳜|çu"^ûJ_Óý°jáßônå’pr´nrAFûû>X» Þ\.+Cä‹;ô!ª &·ËGLa ÁÆ+Ô÷ÍÐÈ+øÆ ¢~›¡“àÔì!t½ßß»ÊJ-bÁ«ÄÃÚøÁ`ü 69QïS,œV<‰g7µž°¼ø ¯¤¹ëcWØ)›nºÃIl¾T"èçyÿs+8(+dq¾¶ËÞEý?;1±+ÞŸ€û©ä ÑÄ4Þm‡Ÿ<·Öƒh¯8 îC7ßùÛ«’”’0é)uÕMƒé ŸoµeøxKd3ì¿Ö†ñ<¯¸NÄë¦ïòjc[­µ‚E¿÷~háä,5%½Ü1T³5üYŒ›üUÏÃì'¤ÝÖØxx°&L¸É:é&¢æºV¢êR'ì¶’XúH&íL|_j13ì+üü˜E lÇÊÛJì€Ú6¡›ñ®?Hwiâ™î?ºÒKUd Sô5%pÄÆÚ5ÛK®wÌn;Þñ±õÒö²¹ÛþYþO—ã‚ä’(xÏFºÂ,æ ¼¡}´µíÖ=ÒÌ¡FÈÏxúçWe0IÖIOHìOhÇõSIh›AGTí%1¤.ï¦ öFþ[WaPQÁ‡£ðˆ§Øúgi"E%T¡ÙÛå·^9³ˆT'«I. ©h+!yÂ`oÔËõr½\/×Ëõr½\/×Ëõrý?Xy©x~ïûxþùU^rqË/9%¥„{cþ­+«GÒÜHš‰úÏɉ¨UyV†š¸Š”ôû9£…ÿÌ•ÁŸ%&ɨû*ȇÒWêË©Eå×GÆÉrˆôÑ%³¤÷{Œ+I)(µ%4ÎpÿWWF?ÙÉ5EbhzMªûå0?EÚƒÿ"ú¦.Ôã:A£“ÈÒ•W[#{Ii.­BôL¿e”’ )zI?ÙŽÅÑÉö¶]× ÒP>Uä˜vó}ÚB›§±´ŸÌ‘µÒM:ÉûÒA^ ¶ÿÒÊ(I$-(~I¿“Wô²·zö¹M´KšE_•7e–~h_Xcëê»GËtœîÔ¦úL6ÈFiú» XŽË ¾‚êëÒ„ç´·¬°¥ô}kXm;.¯Ë6{ÍÆ£í3«cØP›g¯Û+VÕk PÒNJÿ.} 6 –dzÛ:9¢l„ ´•ÖÔX*‹gÍ-· °›zEöÛH=Ì:Û$Ëkl‰íµ1ö.Ï[Ø-«÷å-ôXJš[ h¥‡ÉóK5¹!Mµ½Åì³NÖÔçA¦Zßšø£“l£6·6ÜfZuǺÛ:Û |À§?å•h¶4ò1£æïf&n2™t`;žÖŠö1òUA¾ÁÖÊw{Èe…,ƒ5ÂÚãm&°om¶³´– ÿ¸fßã @Å<›l}mZÚ¡ƒ¥*\øû˜žÙ³ÈH) µ4rĪíØ­“Å·¨VÂ\ß»®–Ù&X=bß¡—r–D¤Æ?ÖX„À'Vüo´“xLGÛŽæŽê1âÁÛà ´W ²¹äyoHeݦi±¢;)ò5µ±ÖÎ÷º+m—‰x#ÌuÚ¬m¹oÆk®Óq64ñ‰­°Õæ®"øh1Ù~ÔaV Ð׊j!r‚úÁñÿX‰‰é…àüÔÒDZQ¼¼º1wS›f[­¡¹¾·l­VCÚ|"¯íÖŽ6¹ßÕþ]¤?`ßXE¼âcÛa¥x< P)0ÔÌ!G,F<ÕUéÝ>”Nä8#CR{ ßÅFÎá¶(÷H#€{´ÒÇÇò-l/º`£ñôèc± ±göÐf€˜îDÄOLle̶eÄ: g¶˜e僟Ýt³‡RŸb]ˆqEñw±ÓÉŠ#K=°ìúýþ¤ð~µQÈÔÕ_13Y[ÿw‰ï’½†T±E ¡‡Í% ð]:Zj­ƒü¡y|0¼—O&KZûŠÛ[Öä—‚ÉâÚ àïcó'zS ƒ‹¾+~2¡mÚÅjÿÀ ‘±7ZËh1Íu9[I Ø`¬èØaqÅ%ì_?†ÞÊFŽRÚ%;Ökî9ï}Ëßeâï| .6Îi®«ae?Ýá‚ ’¾†Gt&,ˆäÙˆ ã­'Q07؈céðü±üÍá×vÙ‹¸„.ºÚzØ5Ô®þpç»eógzEþZز%ߨÂw‰Í@|>²þb à¬ïàòL/hRráºv\]ü4–´T… ߣÊjá Ç]õØŸ)C>üÄžÛ1{•\ y ”å’àv½ûß+‡$—Üäºç5:^ü*’Ö"‚¶<>Š]Õ‡Äül°Á÷x@ž»k:ZúN>5ÀE#,žØ±Þ_ qç{7†#²€Œt0áòÂn0ÂGøIá@6í$ñƒ-òŸ­¬lOCÙ¨=ˆíI¡ [îúŠÝ†ñb˜›~ðwžè9ýQŸhb"^ôôîD¾üð}NrÀü›‚,1;¼ñ UPVslQ †HŒW-%#geaIøZ0ûÞýùÊJ÷Š<“QXªøía_ã³°fSª½'>‹ æSRùD2×'ÃñÔ YÛƒ„Äpc˜ÀqFÔ?x‚;z’§ r–7xu$8ÇnY¯@‡@s-2Ó\ÜÂÄ¾âø®›êÖÛ~§¾……ß"î™ïcízZ;=D §‰á–í¸3à+áÿeÑFzHfÉÑ@LÞ{•ד€ýbh ?þ1ÈOƒIcû-w`?z%õBæúߜ䥵[“¬& ²¥Äÿ» ßcmȶ lþf¸¬®7èý ïÏE½Ó,©‚ŸŒW—¼'1•ñMã™n^‚rŸÀ÷…ÏL° 8nkùÛL%ÝÕÚh³9/4;y_WyE[c­0P~QÕÎëUXÏï^¼G°‹Ä½õ^Ö[ºCÓ£Ÿ" ã׉Ű­ëêߨ_Ù|GãñÚ ¸"b¢À#ù-¼7OÍBúu~Îl¾¿& ßMƒvÜÔƒ(ö³FCþR|ª ŸO ÊòÙÏÉ—“/´Ó·BâˆAb©+e4ñn6Þ›•8•ôçñ§t¥ïä{NOêw¾«ç1´p×~ ×õê€øGnpÐéóã/‰øv~'%Hº…Ï$C•‰ÃÉ~«¦6Ôûm‹e LÑÙ /ØËe½Ed¦…£ªñÜöæÀ³ë"×5|ÝÉ}X·cûmH︡ûÁÆVôð„Ü?¹Q¼½ øOZÒ€Š0 ƒ ¢ò{q‘y™àûœr mÂöÛì"Ù6æ?¸§µe v+BF“Ð{mBЛÒîêQäÞ {‘wnÖ5H|O¸ê{»mà•-TÉÑÀII;¤±Àû]uÓOžk6‹á»è%@úÌøR7ò„†äÀg© ·ÙnüuÂy‹ª]ƒ-¾d”š²Crà¥e°â ,ü\;Ë=A>×õÿ0°-lÇð‰¼zÌË?OÝ,T—óœDW—ô6ubäw³‚žé#x"-ï&OÿEÈ?—,¡¼:–k-ÑVA¯“ûhwb_ ¶6-‘NÁu鉅 /êBßÏÂuöÙ†>Îécü~?ÚpÝ6 e^x¯òÒˆ !.Qð!z¸†擑Т˜"â.£Lí»ÿ·µ VVHgéƒ> -­“ZÞ/‚\å×Êwgi»´>¼Tçúî¥nþÅaäÿž›ëo²“úç±.?Q/ ¼w›øèº{?EæŸñƒûàá8zpóbŸÀ„×ø„›¦“ ,Lµ=dƒ]`ÁzAî‚Q€[SùÉÞ×YXúGMFŒ*CÖ… îðW|oñýܯúÎ>.¬Ô© < Œ—®È [\ôÓAò™Xðæc4q LìõÏkÀï;H³¤€š]<o î>á´ðgé¬y´ Ös3KNë.ä;‡õ • ºI—qÛ¥ËAÀr仿ya÷núÅbí¢•íœïìIïªë|–¿#KÐ×&~ë&¯þ¬àŽ9DFqRݾÙh-¸ýÏÝ5‰[¤´¡ªïþÉ`®ÓÃv,¼Iö'èú)÷K}O‡u`ø’/â™ë ßÚ£¹h6–ç È.ñþÏèè4:ØÊ§—Àœ[|?è3DΧ<ºÂ;÷t·ï„ØÛ~Ôàö@ÊIìÛ#s´.Q?’÷³þ~ñÖ:‡—OÖñ:RßÕn:†Ç³u:ò|Gõw¯p½p‡€ŠõMžO„#7 £ó‘Ûü{ OÙ"Üä”­|g‡.BD¥r(FŽØù Ú§lþ¯(sÅíá½CMó#Ü•‹Z6.ìwÜw{˜¡ƒõ+€|sÅõ2Þ¢µì²-“AÉH JFñl¶þøz’¿àe¾Îôqó€›çÔÕÕ`Lw%åhÛ­'‚Ü'ü×KNƒÙ,ä(Y‰xUýµ¬×°ÛjäûFiýÀ÷¿]D#aˆUd±«xÇõ@ 2fê×: =ÍDc‡ÑÌ~=¾âZžÁŸŽúÎ"…ɇò’+‚e—Û8dù3‘û¶Ã*õül¶hö¾Þæû7º~_SðýOÐÁ8ßÓv 2Ø,WÂÜÄ ×Êõs½ '{>Xï§cíð="vø¨¹Üg ›üL¼Ô€YA× Mf/Ô0ÉDùSPùwÇÈñ©s/â©kÀìl䚨nºë×GGóÚÏå£5¹õ··ˆÞém2˜Ÿç;[©ÃùÎXoEGë¸ÿuÀ^¾ç& l†=·ñÛ¬y“þm4ñ½Mt{ɃzÅLjðÿ†,µ]¿V7Ág6t“}†`ÍÈþ¾~ ºû` Àû)íA5ó:X®½ÐÒ*Þ›…/|á1²™ƒ®Öyìƒ1&r[Äoïö³p®“1º¹¹9É«7ß×¼’>ˆò»£>Ãe‡F¶Øg ÷åÉüÛGßùŸ"áP$seç —/´‘}I÷1™áHìîzû÷ó‚§ø.Ø»á‰Ý¾jtó?fÞ#ÐÌD0°ù—‚†­~.T<Ø¿¾ÑLAž™^>“Y ò Qy8Ñì}¤~œ¦ÛÝô‚ýÞGR‡õøx'ÍúÝѾ¥¾+ü$l?­ õ“.¶âk‘t>Ÿuݱ\–0•Ût2£ä>5:õòc"¬;¶<Æ’ÿwZ"é ¥´)òïÅJCÑÛÚ9 `0vÄ}Gì: _w}Ÿ¦ég°ØPÐßÑ6Àn¶Átþý†ï}Ë·Nƒ ‰|Îuž…ÏÏÃo¦û ÕNE«KmQÜÏ‘OOÜÓ6ýü°‚ÒPHsSÝÜ” ׳ð„Ÿy²ÈwÿÿL¸é';}üOæUs3¢[›ëg?’÷û¡H¿Y=õŒ·ÓO¿qlº€×7âaé­†Ÿ/Zös²…lóu vä2R]6ˆÛ«yœm>F.û‚ƒø?f’ñ ó>'ú}…t£¸ äßž¼ '°IÈãº!ºÜ×å‰C‘t­Ÿ˜»͸‘kýÜ'×Q~<<1 lcGÈ ¢áÜ6ÊöIWilñýqïóò®=§²ÙBÜr3€¾Â†ØþÍÈëf˜¹¹ 3`„ÑÈóˆ(¾ 6˜åk 7ÐÉXäŸÈ'×!Ý*¤ë翸úo›ïìr$7)í‚f²02ÌÛ°Aþ¿àæ>\U‰íå.Û´¹ú‘ÍE†[l¥›û¾¹†úÙ3=âçáÅKx>ˆ¨è^ïÄÍuütýÑ]Ï×ÍȼÆç .÷_è;;<¬æñQ­oTöýòÂ­Ö ‰c€u%­t‘ä«ÿ]ßçô• ÈgÅÐIð}ýq5”:²IÜo)숟úsA#Z|sgúíòûyÆcÛÙÈ·-ÌÃÎû¹ØKÑ×]^‹H-ü˜˜æ÷ý:%ý0®kd-rþr伃Èxzò?´à™›ý¹RS[ìÿZu%”'®`›4».•&ðÕR¤pû*΃ëÑ~ŽËþÖq›MŽ07ÙׯHœˆE-8ˆw7û®¸ëýþŸ}ä-±5BÚ4Èý SOëoß’÷œ²Bv.$Ž}ÿºŠH¢À8¤r×0‘TT}n/Î*l¹»þ*ù7÷«@þMr !h暦²ØÈÿý,Âo¢šCËRŸù¹}ß©¬XwG„Ý„GšÌ’•°ùR8ØbÿÉJ—ÑÛ¶Çn"ñ°Û.ÃäëɆzaÿ¹>‡›Ž¸ 0GÈ–ól>~ÑOˆ9„îÎ’1žöG Vðy7×uÊ®õ­ ŒWßÊâùW4?¶¯N0_‚ì÷¿W©F¸ÈÚ»le2{€„ðû‰àzˆ¯Çòèkàú¯ÂûK"ïugÇeòçÉE&^ÞÔ+heñb®ï‘¾ 0«CLiJDqgR½ÐND€ôäeCêÈ4DÀÌÒØ¦Ùðú“V&;ß £OðÕÏ$]–ùã3=Æ£[t†}Ë3ù³SòŠ« ¾¥fšèó¤epcL8°>ßø‘;7ššA¦Ù2¤ºA&“LR\&bÕ¼ö ±:§mcû§ùýW3á|·ÿ6²]E¢ETßðú lÿŽLM÷j 0îf&G?cõ-t¶Ä÷_ɧàíÍ`¿Ê–ŠH˜ÊšÛÏvKZJ­` ýg«º¼*×¥-Q:,u ]¿owp%2O§®‰•Ï€ìmäD³‘syÎuç9%$[tgŠÎ÷ûù‰Ønß¸Û ú½Þ+)È­Jú3„RÛ«è)IHuÿw+Ÿ”# z®MˆY'±÷ d»Dt?ægw'–E·‹Ôƒkà…)Dºsþl—˜ Ã_¦û\y¼Ÿ•·˜÷®ù8¸OÃw¾’5µ7ÜyÁJ³/þ¸ÜõÝ ä|˜œÝÍ¿y„tîH˜›g{&»KFpéÖÀkÈ~kFˆ÷ÿäç=/$NL'+ŒåÁ„YaÒ“äˆ iü5qølqû^†àùïîŠÇÊTÂñ‰|ˆU)ÙzÃ[/yßÅŠÇ©†ËS¹³N€é ÔÇ`µhÔ‰Ça…‰ÄÊY~_ÏL˜?">QÆ8®é@ÿ]¢DMkMþÓÆòj¥í—ð¾•w¤¸§J- §¥F²0?½i#Lp{Ÿ#^ª,#}KÓ+ÝD{·ÏØÍ»Ÿ Z&ƒŽ£š’¼¯*uÄíiïûë¦jØQ[ÉkR2Ø¢þ•U\JË>Y¢©ÏÓ°Õg‘#=¹KÀ¶à§¨Ýù;Èû ¯O[æD²TÄô$0àØq=¬—)ݹÿî,úŸµƒ-#®¶Àúµø•½ÒA>¶˜uµ„_•Ë’ÏÚÁÕwa¹T0W',½ÝOvsû÷wã ¨–óúÉÕ5øpÕó)¸qïå$Ã+Œ§÷Â_îñ¬§Ÿv?ÚÆéZ²ëPôýÿ^¥©„ºKíbsÈ[bb߯¬!2^…á.wú©¶÷µ y|ubZ;ø,–…s+ J‘ù'‚9ˆòm¢Ÿ}÷TK[+LY;Ê›R3Ø"þ•“zx5Õ@>û’mnbˆØ‰p[5yñ9¼û{òžVÅJÃÍñ’}ÄŠNhÉÍ´>'V&SÈa݈xåa€˜Äˆ\hâº>¤Î®lñþŽ•[RsÛ!íC?¹È]åðd»ë ´›Ѥ ¿3ò r>%&¦†/²-«ëùß ôg ×-Bä/lûm‚ý¢eu´4¢Êý•šl¸Š”D¸ìØ9žŸŒ·.ŒO¸ówž‘ fA/l¼­§¶‰ 2’×ɚ¢"óhjÜÄdÒÝl¤M·!v@ûhc|«a°Eû;WùizyOòêp]“lÀÈóÜ•oåÌÿ*„¥ŸýêØëö€Ûõeìc»flXàd`«Î–¥õd¥ÚÇû¯®¢ò©\’ݲ[ר^“Àad?½/ÙV¼} 97 Ö<Ò”,/´öný6«Œ –} öîÚwv„Êî¼ÞÂã*ã󪱩Âÿ¼þ/¯RLê¹3&È YªÀB۪儭±o´’ž„é³þÇvüã*.%‰ç§¤—¾J¦ÙÅ,§6Cö¼ÿ?Þ­´à µ”ÒQV€õ-È™|1¸grþ¿]9ÉŒKg2Û´RƒL94®e~¹^®—ëåz¹^®—ëåz¹^®—ëß»2Q ¦ ‘^Nÿî•PK\‰)Iÿð|5Pb? ×CðûùüûV>‰'‰$õ)(¯ÉÒ^?”’B*IêþÌ`ÀU…ey7´qÿ3+‡„ù©Øµe„¼#Ýä )'Ï¥§–!r\ŽòïVÞ­Æûe¥ˆÔ”Šâz›Ô öfÿ+èN'Ù¥h%ód„?·­¾–Õò²ô×s_×ÓÚZ—ËEùFÞ•|ÚÍI¬--ƒ½ùÿÒªì÷eô@ ä5Ý£4™}d1mŒ´ )%¾Í´VÖÚØ‡öTçëI©­áºW>GÅ~ÇsPkJy]C:ÉtY&‘ݵáÖÞÊYj{¨Å¬„Ò~¼÷Ž®´˜ÅÖÃÞ±¢à ¡ÝÒXVÜNiZ!á‹Ð¹ÎáY™‘½(žÜI®ÊVW¿‡ró[¡r¥Ïß¿Rúã^c$¦ÕúÈ÷ ’õ±W°o!»~Y}í k§Óí-fáÖßOØf?Úq›b+m¡-°ÖvB“èXôØBšHh\íö÷­Ì’Œ¨¶Ršj ûʆX5Ð=éÊÛsMcû4¯ï:É&hÆ@ŽÀdtPןåÿ±Ý³S|c­³ hbª¥±ÒMÖ'.ü^ŽŠdöQ~¥|¬fµ­#ì–Ý:Ûd®dQðíªàü˜µ´ƒðÝj°ÑŸè„?Tà6ͮ۞¯¶x̾ûñ!Ö—,¿‹£ÕˆÚq°þé­ñí]$vç÷ÕÛk¬-÷±ñ'`¡±EÅ#*ÙjíÎÛ*[j­¬&º˜ ò«Úx»dÑ©í–m ô¶óÒƒ8êÈ.yÉÝŠI_Y¡ðòÖ–Ó®ir«¦áÿé}—×ÁV…×ë ºEÏâÃmŽÍ³Z0á tqÈzYoÛD\\Ë}â@¹@¬Àx "º å³`òJ6x¯6Y]B;bûÀrGX-%À³ÛÀhîlÆçšÄW ¶´ÏÌu…Šgt°7É *Ú}|b·Ã:Ùëèl¬íç{¬\ÀË´/HB}Ÿÿç*OŽS@ÚÉb=n‹°ä[Øñ¤ÈkÉÁ~7Ëo÷õg-‹§»çåàƒi– ”Ô³Ó¶O¯kßÙF?§½•´Òðæ {jI»ìŒµ|ûi-Ñ‚-æ_Ya¨²ÒVúiìçú:7²÷ì}ä/å}ýtÆ£ò¼âú›·ÁÓ‡[.¼ ͇ë«Y3ð¾/ÉgEàâ â"¬qŒO å“Ùy1­ “9Ø¢þÅå&øå“Qº9ÇÚ«àû+X­-ØŽkf]¬ë™Z6$t½Þ[xà©V†Š`uwžó*>Õ“hÑÌ&“ÕÑÑäGý‰±Ùø0°@óQM„^}XùÛÈL™NT¯hYà¸OAü <¿Å°ˆ¼R©Þ´5òý¨îJƨöu@Sä‹a9,:Ïfa÷z|¶«m`‰|hç3‹ÈxlW¬B Ià'ª†´Á÷¬Ì0~i(wô+pÜÒ\–6þ:m×åùg‹Ý3’ó6µÛz]¯Â74Þ0Ôâó‰w‘=ž%ãó#©ŠùÎèËm;Yp;ß }ªIàña üxÒžh2Â`÷=ýó•VâQï\‘9øû«6ÞKu#Àü‰¸¤¿¨ðØ]¿ Ü×;z‘H‹øF¬oHN\T$#¬ŒÎJòúh4°O)þGƒ‹°é øa·e¶•°`º`‹üg+ Öï(`ð¾°Z}ä©Ã…!{dXÛ@y¶ÛÌ]ÉÙÎë)0à®þhŽFÊ€ZÈ_fHc¨ŽªÛç¶„ò9Ú¨kG§uñ¦ X·šÄW¡²ÒJ 2“ : Öµ+ ÿG`¹=¾ÿD]÷Þ¸X?)~ÎY}¬ñ`‰R~æSnïÁz¯#§›wáfcM$j€6²ðKUÐB"å›kWABšÀK¬µ¤DÈœ& $•¤û%,Vm‹»óÙšcË`?Ö¸—õ¡F¶Ôúݱj¤ c%V”†có—ÖÀ{5ˆ-øK†§ý/#çØC‹8jßøÉ‚¡°òI8¾?MÞ£-á°8È ;~Žuã¿ ¯ëè|E/Á{?h"+€¬nöG'tPÔÏwq¬ŸÍ=Ñ|£(±ïubèD²à†üZY¢Ávrã=dGì¦#O©Ÿ„D÷wío6i)?ëp|5œ­MÓßÅÎ57¿¢Èr]7Ï~ß×yMž²áõ4'™azçá9ÀÊCuWº¦æq=ü½¯¿& £†M £ÑÁdÕÐÅp2æê6[š¹÷߯+!H&n‚ÙhKˆ4Ã^EÉpöèQßËÕõ3>¦Ût±.âÙ9µSj< ¦=Ö¤Xý¢:­}r"Ú=M>²sˈäù`Ã(DƬþZºZö6^2ͦÛQÛÆãgR¿ öJ.‰¨{’ij× T°³ðýÖX§¢=÷}\wañt¿nÕµº¸†7DCú0"£›p”ÿȃ„®ox*ÐRÀ’€Žb¾—l s|™’Oº½#É>¡.^h¸¿k?iöÿ:޼•Œ¼?ªôÕdloØ¿yWbv»¬ÛÁ½›|°Lwøëÿ7è=bár¿û Saåø|«12)^Ç÷6p^Ò‚Ÿ¤ )’Ÿ ”žØe³áÀÛ¶’ìâ3þRu+ÜÌ¿¹RæúQ¿S7í.Š=Ó'H¾›¥¾_ª tò/á•Ûê®wUïSuòã‚ì0ø 5Èwsò,"zˆN´p׉=âÕGè¬ ð6|Ø ÍÖ%cê3l±Rü«ÁÁÂsôm;­gu#ÿB£ÃöBäo7°þnÛt3~°KÏ`÷»ÜŽ«»Îë(ÏR‘ ¤ù9Ñßuum#‚…DÜŸ÷:r½âë-Þ‰ ¢€˜Ö0Ì›d‚uˆšsµ•Ä ²üÐÀc­‚Åš€ý¬x¥š›ôsOŽnst£ï†¾Ïw´>νëí³›ûÜnPû]/ávTÜÃþ»Ffô¹Ý'¯òšëÍ]ןÐB5[`§‰‚îºÂ¯áÄ*A¿<Ÿ¤‘”p~ë n?Ózú¡NÕÞÚ‚XÏ÷y_î»Z@žÝžÆŽŸ€–|pa˜¿:ð¼â®^ë‰íŸ‘rœôc;žµ‡ç—ALrA&4Ï®“~aŸ}XVj1õ5«ëbâz¼MAÚ3¾“å.ƒ–ú>ž«x/òBšüÍFÒ«ÔÀÕÍsâ.)Nk {Šf®áMg×] ï:Cl&rlã•#|ÂMЭIvÔ,tÖÆA–?‡tVÄOzÊ›¥¢¾yÌÖîG [tšïå3F'ûÜÌ'Ív4qB'ù«áX[í¦5ù"qâ8ïþnq»ê{ßmÃ{Ö™ ÿ(‘3³ß·‡Ü¡ &¡ñA–ÿÙ)©÷ ’§<ñ a©ÈTü;‰vë±òá{¾­@棼vÔÇ…-¼¶ ´¶¨‰ûyDH‡ð% ÿvw±ÐOMÙêµõlxZÃÈ™[‘ ¼EÎ܆*á5§yƒ,y$ÕˆSñí¾YÞwªbÚ^$؆ý]—ÿ)``!–t¯¸þŽÛá„):]¿&F×çRÔzúþ–[ÿ4ÜwÅ3Äv¾±½m ûýܤÂö1±¯F;§µ}¡‡ƒÜÿ^¤Ž,"÷ý^ Qõæð“­ÃÀÿ¶xž®3õ[ßÕl²,A¢ýðÁQÐñ-¸èFJjc$î„V¦€’]xÎ}ì‚wöó¹¥hê;Xà¤:¯Ê‚åûÀkí$uã\Ë©ã‚~L,•,ò´:Ô²Ž»Ý<£‡~^Ã;]Ç!ç}WøNÖG½/Æÿ¿Ò/ñ7c ñb¡ï µŽ÷îâëûÐÄNø` Û¡±~"e$ÐUÚJ’4‚ýöS Õ`Ï…#ì Žcàÿ—át#cÁ6é,¢Á@ÏŸëá>Sçá ý,›ÔæÐ>B?çïc|c·)¼¿ÕsÂyäÞês¦u¾oÜZxäz¹Î;?Žñ ©ìS+o'È/‚}E|.I'µà=ÇíûÀnTôÁN!ýW:Dè'ú‘öÓ±<_Ƚëwý¾rÒ3Ãh탎vñÚßå{ x˜Èw”˜ÌgNËa̵¾gâ"ßCÕõŒ:CFÿÙís{MYþâ’Zr×Ý|ŽUlõføj.XžÏm™ŽÒÏú×ù³}Ÿßa`9¡íòòçU×p…Ÿþ3Ç÷I:†ü׉ôn„ëõ¼Œo¹ÎÚëðƒ3üún®/TEìÿºåÖNA–?·Ýrlº½š'@ô,|};v܃,#ðñad„=ÁÀX` œ¿žê`­ï8 õF¾õ¾ó¿cǵX×uÙþ·òï|´2 É/UG!ú¥ÍõI¼¡ÙȹŠÙ—AïFøL’“Ëa+×aK7Ù01[x{ Ãò½‘z Z™é»ÀÎåœý]/èÉhcß™ JÜýßõò{$_&Ý”>^Ò¸d>nßx2¬üÄ׸<ÊOÆ]7è]SI9yƒ x?[ê| OP Nãß]È7Ù&û΋ÀûXýŒ>G¾yD×ÚM‡¬=x†ïyìz¾¯GO|î·ÖØŠ^SøÙÏl·MdþÕì…¶DÁ?–\2Q|Ae¿Ûc{7ÂÒ#‘æ;l;V{ynŸî÷~¹LxïoñÑp¯ð“_ë{¼¾œÛ*ž-ó½]¿ûÕ¼â:®&þG€ó“[a2ÿpÿ—Ô‰­DtÀNëÈ— >ýHÎ>E» ãSjšûX}¤ïéïº ».î=/.á3k‘qž0žw?&&Œ V,ôÝý7óŽ›þ1ÕÛ};²¯ðSӦÖ.w<«|tÃû{Úç!q~h8 –)üˆTnN—ëz<ôô½Ý “aø›ƒ´È3À4ßq4š©ÉgfóéU~ZÚd<Ž~\`‡“Þæò 7dÜ¿†¼0‚‰å²{Z=èÕ¿[ÑÀzÉ ]ÖXäý«aûIlé¶t76÷‡. ³‘tÒ¸™G3ÀÁ4¸ax™”½ý|ƒõ°ƒ›wµ›¯G#«øÌ?I﯌Ǜ¦ ×%6’Û/ŠüÁ÷×× ­¼-ý‰Èn~™ëàvQ“Ú_'R-Àþßx¦_ƒ\¶ã: /Çúóñû±àÂe ³|w79ËÕ¼;}´_ZŠ?œÖ‚ø}»äyÁõ”¼®ÙaÿÚ<Ø¢ûîÏ`EÙ $˜¥ñ,ºmÇRs±Z[D8,Ï@â)Ø{¡Ïù‰+ôU˜Qì ²Î÷{EÜó‹¾ÿù¿×ØMSüY‹X>êŠÃèã8h¸¢e¨âi÷`‹þ‡•QÊH+-fnöÅruÓ<ú‰÷‘¨VƒýÑñN«½í×ù™Gß =Ñœïä±+Èú5ÖÄ{nÞÝš?LŒÝê§ Í ®é»å¹ÉnžtA«n»‚¾ïë+“”—´ü/aÛ2›O·¢äkˆ›üô£E°û8ÌÕÀŽÝ¦!¿ëv×:9òÛ1°àzž®öùþN¬¾ Ü¢2v}Ó6‚‹ûšÓ2Ú#¼å5PG*Î×Bæx\80³– «Ëfñ­•½ ;ß!ƒ;ÈßXã'úøæbØRl: ]÷÷5ØòuøIŽÜžò;ïë5´ó•Î ä5Ø>žå´˜0¿;>Ø_x%däw½ÞÎHm;ö컹üv†Ÿu2ÕÏ6ì‹æñR¬¿ÊÏvq{û£#STüÚqÛBt4Ϙì÷ôîÃâîø@f²ÜTÔ‰üy@qù\|Ëä§_´±‘A¯üþ{M¤ (#°~Sj²~ò÷J$úœ˜?”wˆïç=ŒOõSŸ`ý…šÎw½¬lGÀ¸›xV_xïßæ'ÿ¹I©¬¸µ ×)Äç2“ñtµú<¯g£yývuBläû¿GÓÇø@m{J¶žÒÜ>ž^xùÇè`€Ÿ‡8™ú)XÉ–·#­;bv <ĶÉp~*,ìæå®ã}7ùÖe>çÐi%«Kn•À²Øû6ĶÛnûѶ診."©45rÌ»#6ßQ®Æ›{i_Ÿß~ ë»HïØ¾Ÿgx‡Øp¯˜ê÷úIJ“êæEßó\œXý§û=FÛÐÀ=¢]]˜o³6¶ŠØ¿:(ë¬ýBª#\:r \â:Ú=G’ílýçØþd˜íó߯ý>®9¾ÿ¹‹ƒ‡Õu¼wçÆ¤„ÏâÂj±ÍuE=ã÷‚Nö¹ð"Ìx•º÷Ê#4nyüÑátV@ [ä?[¨ƒsHG}ÏÒÃgB&4;¯À#Îû¶n¾™›Š°ÞÏ@šúOj$q\áŽs?ÒäDÌ'~OÈ Ÿ .BgnŸñJ䮈\&—êd%`ÀÒ6IO„X/ÈTܪËAd aªlv@‚áŸ@vDsSmÜÑž(–ØÎ¢‰Í `1H¿®—ý™q§áº$–mlõ“±á÷ñ‰)>#\ÎoÔ„ÿ"rh%É”Š[Uý6dbßWÉK”ÇFX4¢–›ãx( ˜Œ|Ó‰ô75¢]àÑBdšïgýž$—ɧ"jÆ!ÎÏ3 Èû9h«ÐÆfŸñ»÷ojß0³5³rZ5Î|ùóUÍw©üRË[2켬§& f´‹`Øu¼ªã[èÀMø§‡ÔÍ»psÞŸbûŒdÌ»±»«çë3t² <#nÏ÷¥~Õ /Èf`ƒÁ!yU`)É''¤=³"[Íb{47•Ûý3¹L$û™Êý$6Èóœ|*%žŸŒûçxÂ:¤@”X¡nÿùa|'- ¹Ï5sgŽa‹ìòÊzö®æ'Þ†Þj/…‰É£ˆV­-+,uK—ò5Ûnü ¡å&w»Ã£`àg¤ËóÂö`ÁS`°¯·‰kXý…ºþÇ—Ð˲…ÌnííÝ¥ª˜-BæÌÏ?_5¤‰´‘÷5Ÿ•%RÝռĂ}Ä÷CêÎIzŸsÿ=ÜF+ —çå/;2}Ò'ûY!nnâ4tC‹’åýLœ„å: gÁ3Ú!sjSǾ°‡h`¾¾%3å•Ë|þçj"¹¥´T–nº‹åBŽö !Ý&V†í3ù YÛ¨ù:"aßò0`AX ¡¹³ÖRU%j„Y)íVÁ_ÔÌÎPg¿{¼ÿïUW’€‚dÒO›ÛXkŒ— w;‹•ë"INì|Þ)iˆ^^h²»äX¿—•ŠŠ¨\UZÙ+‚ŸÕyiѱœïë~Ÿ ßùj¡—Bø€Û|Æ(Mì¬nÞ¶Ö×V'ZèBßå÷³\Ïë0ù@Ì–Á]î:˜ÄÈ÷€ª¯>>ñþ| ¤WDþ`$¶®î¯ :OÜþÙ{FuU{h#éŒ6ëý.f?üéÊà3¡:Á&áëYñåœàº=~=Û:RÉ'°Þà{·Ý±éøüë¦æö‹tE;mŸ}cM`Í8Ú\ºó;e$Øgúüã+UZsP@[âă×ì]{ÓzY²£ÄVÆ;?ÙddÎGmëÎmhßM#ß¿DžPT»#yú` òO¯ÌdC¥$¹ì–ñš¿®î`óâäöIñíþ6ÿ ¾+kîü_wÝLòžWÐÅ7šF{ü®|þ/­4RÐ÷xj'aþ<ÞœvÛîÃl%‰xä4~:Л–œèŸ^øÄ6Ûb›¤e±ìNdºÁ>¿ó·X)%'uÁP¹BDLnß[ŒÀ~<¼-Ò¾°‘Ô8#ð†BxÂb»jqGõé ÍÈ£BmÏ¿²ÀÞ%¶¢Î­øÙãók‘·D <°|HèoÏ©^ó™%mHÛÿ-Wqò×|U6Ëu}ÓNÛQ³ÀCì= h ãMÄþëô5>“VBkïîo·ÊJr£p©®¥ñƒãd½™µ#UÁ[eí¼ô¡¹oã·Z)¸U”ªRJ7óÙ3©.3ô¡›J†NíøŸ¿Â±rwêƒ}rF¦J&É«éÔ1d–»ªýß·2Q#—“.2]Þü²MÞ"Î…Òñ¬—ëåz¹^®—ëåz¹^®—ëåz¹^®—ë·_E¨ù3K’ëé÷Û¯d’IËJuIþ‡WT›K6)(%% ¯e–ÚAݾïJ,©$Ò»=â¤5¯„ë\y—W[IiˆJHEW‘B<*ìÍý WvÉ-9Àw]I/Ådfß'ó°õz™.ۤ얘úª ”¹2Y^AÅ$Ÿ.Âç¹üý+5˜ÏàÏs×J•Êúª&¶4vS?‘/e¬Œ–´zN×h]®5®“ŽROÈ/áh+4:¼ý³+3X»UGþVXû5½¥e,ƒ•´Øö•e×6ò–D‘5n`¼õµ7yõªÖÓZÚP/I‰ŠÎrðÍ`w8ùçVaPŸ]ÂÀr*é ]­}l¬½náVÉ>@Ö·¬£¥Ó"òT\wì3¶ÜZZsëgíÛdyl¾ÆÐ’üB©/å‚-Ì?±2³åñøR²_zi%Ûl7íªõ¶ÂVÛòÛ{ÖÊZM›.½¬Y`³ºÎ°=m˜m³k¶ÇÖØv›klŽ’œÝ_c_/ØýC+›ŸþUzK­k3m¾±õ–1ðµåÆÊ÷t” °¯‘1®žµbÊ–ÝꂉWí]¶“ö‘MµöÈJÒXkéë§âæ ¡ë]þÖÊŠß×ÅvÊ(o{­›µ¶^àz–³¸VÔ>µgèdŒià…¾æ›Û:ëoÃÑIÛNf‚„Håö,äÒ/Á@'4ô÷1»<‘¾ì}Oꇠ¼+2—³×l¤­°L°_¤ûÖzXû}ÜÐ…üû™M°¨!ÖÖÞ¶Ý6w× 8ãxE k¯5‰ˆMÈ B…I&"w˜DÓÖHù¶-h‘»…ýb!q*xpªÕ²jvŒˆwO/z^|C´¶%¶ÑÎñ¨·°L_ì8Q%1°Jû¡ÑF!?+›Ä“âÄ»_¤„Mæö™½cm¹  õ]!Saÿ™hÃu-f¥- ¸ïf‰¨Ë'÷X¼À^;fƒ|ïø·àˆ£vÐbšjY%íé;ì‡îJ‡üé%¾L•b–ËØ pü¦ÇÖõðr×ÃÚõ“ÖF¡J–Ì ï 'æ„Ê‚ˆ£Ø»?ü÷*Újo슥 Ä|oO,Eà’Õ×´ü~¶`‹ùWW1‰ O-•+:þÒÎÚ$‡·».¯o‚ìöpA&K€Ü¹x-­ïçZç‡ÁÍì°±/¬¸ÙbC¬*ì±ÚØ4¾»™x0×úUjá_¡¸Š‚üò2X¹O!ÿl›‚úY}»£)Az%x¿¿¥ƒ êYKŽÔí`„|X:¶ïÆ_o[gCK'@Ä|ëÎ;­ð•ah ~1:°AÇËW!yNë‚‘›(}[ smü{VmŠœIí™f±hÈòž}h%Lyþ€<¸%1¡œ÷%h¸¥E, ýŒÇöó¬Ò_¶;¶ÐÞ…JÚ2[It8dííõDþ§ÐZ±}¾ÛVžHäÀçøm9¬ÖŽ ·ÑË]çÀžk2¼º3šq×=ÝÕ²x}k,^ w´§f ùÎÖÔ»+ÈG‘g|ˆ&×ýx¶Õ’šÚOò*6´Î“p=`rÈ)ie·ðéID´ŽØ3žý¬?iz[jÀ2#mR%ßOš9«Áï[eð]¤¤çýjü›ËJáÓí9¿5M´àßHX(Ød@ë$eÉCie¡¶M.Èw:ããgÙúW@r8:p]P#ãï±-&y»2øYi"$e¶/ogÅ©zŠ’ N΂õfÛç0EmXà˜¤Þ4D ±ö¶v ËU’*?6I‹$͉ê×°TE¬ZÁóç®ñLi)|gÐ(H/ö :¹¢Q-:(mƒÉuÞ O(‡ü¥Èšð+Ëmùr#}À}~µ'õC¬@Ú@êÀÐÀ>û@*…Ðù"%ÉÐÛËiÙ€Ìoâ˃a°ñåžÈô:ŒïúG"ò›E°¨°_U+6\ÕSvëŽe?ÆÎ±`€–XAÔD\ü LEþ†àáb²Ài`Ÿ‰©…á€ØÁܯŠH_]&ÈMýy“ØY<>’”Õ…y%.Ö¿ âoûë?æúÿ׃ù^CÒ‰X<"|YÑr‚ްC& õµÐ ªá¹±Ï!$#9Q |»–ïc÷1¾Þ–¨ VRùné°qr|g ^RÏdæS É OÙuj…`ä=E¾üY`i¾ˆ4“¤X§!¸ŽÍ¶¿ ‹]Fêïõ°îÐ;Øü¸>& ÜEþ+êº8&8­ñᵚæzU$ÿ+Îc%SÎÃù7%~R$äáQ<ò oɆ—¡‘õd”‘W·Ô®!pp"ìŸ\ÞÑNä8íðωjÙþ‹¾Õ!ßÍòz8âà)öHöóL‚û³š&,ì®styøï¦ïÉ‘9’%Ca¼™û|~>QÐM?œ'H`9C JK6^Sòc§Øv_c"EEðzGçû«Þ/è/xÁq¤w×»©W‚$ÓUÈu2‚öèDÀì<Žm{ÑPD¾ŸÄOL¼á{©>)ÏÔõ×ͦÜÄÀ®¾÷oøq´Qk[|¢pEÙ'®‡{!Ð{@gûΧK`¼³º œõ}ÍÏã?‘õ_Gþûú¯]ָȔ›ïU% ÖÅçOŠôàÀxí±â rîrçØüvLôZ‹[]?¥+H(¦¯ýÚ˜”RMh ¶¯þËŽûþ\ìX¡+Õõ„;©îÕsàÿ†Ÿ}q^ÜÊãô æ¯ö"7xŽgD󗨢››tÔ\!Sºëçü¢áäÂ3ð‚DÎÈÀöh£˜TVÖh[rڸĽØö=þ‰ïä?[gù¦[þ,Òÿ:è>Gð„3º‘ǯ þD-tÅÏ9xàçCÄÀ¢ÿ'`æ*ß9÷©Âå©FS]DE0ÇV¹~ÿu$5X+‘$•žZ‹Å†óöëB°¿Zgòï:4à:z¯F‚kz¸­/ø¾ßñ ×Õ(#^àº' عȽ€ÿ˜v<Âî7u;ß} N¿Qˆ-åÈߢK~ÙÄš}Ÿh!i-/´¼íÔHö˜íŒƒ¥Nê*¬îz]­Ä vÃ…û}Ç“±ê >纃?Eùfr¢›»ò÷6>±‡O°~t‹c/§¹}Ç{7ý¼˜xÀ¤n{v%jŽ´™Aß'ÞZæJc?ÕÌùm¸ŸóõÌwÃw×2»Nc@Ä2ppÀKsN;ijEèë±fÇÿ‡ib[Œ—EWK=GDF#Ñ`“s|öŸE\Ð’°^YkKF8ö{ßÏÙë`¥iå¯-‹©û\×÷XØÌùýNŒü)l#RNÑi:‚ûѾ·íQd9*œMç Ý }Ýzèe)kq ÖßÒŸã |§Ëk¾ßµZ?/.ŸÍ´¥dÆÇ,A ƒµÑìùe¤Çò±Àä êÝŒä%ßêZ-hkà9×ÍÌu-Ÿ¯ÀÿVìûƒŸ 亙φÝ:Z])õÍõš‰¤? û5Ð~ ìÿ®©›–”æk‡ý •±úê¡ää \=˜+·T–äkîWû’ì-™mÓjDÂKXÙu„^ä¹pOwSqÖð·]ìDƃÈ6xòkW¤‹fëø…D‰ëx¾Ë™ù 2+aÎsèâ0ž›l9½5ÿmÑAið0ØnJ« ËŸHÊË4‰N¿é;Õ½Àj«©}\÷WC®U:Ýwöq}þ7 ³ëð¼-lå/]ÕxDèDÌc¾OÐvŸ=ð3®á?»ùÖ}Í«\á»Ûð‡;Tqñ±Jà¿³í žÙ¤žÜ#»ˆÝcÙvX¯V×Õè’¹ž¸óõ[0°DÌ@þ­H¼…H0?Oiýuˆ¹&7‚îaoÇÑ×NpsÎ+ɯ)16¢ìÞ‰FíP¬5—êÁŸ t³/°Û.¶ù*[ïf—­Fn—ý}å;@/ô}Íñ7?XC¬ûf»D||›zï¾² ¸™_®sìdLçýô‡­üë2ŸôV€¬ ±•ñs«ø£%‰­zM&5¤Û{ OÝ‚m"$ÃJ«u8þíúŸ~‹Ì›|÷èg’ºY“ðu7 "µÝ¢"ÞÚwáó'ý7=é0Ï]Fx†h€*ñsn™¨„× Ÿ–T›}좄BìÔDÀ’Xì!Vn®ÓY|Ðz ùÇêýDƒýM^æu×ÇòïzbúN æël׎Ú.„ì3ðýµ~á~VÞa~k«&² °B?Smˆ¯¥Ý“||c‹´ ¶èXÅ¥¤L&ؤXÊ>‡ÛN²õ3Ùæ%h`.ºp}?wû~ŽÙ3Ñ‘ëiÛÏ®‰×¬à•«èå(Ñu覥íù*óÔ%÷IHmé¦"\¡^ìKÅ9)dÎÊ-™¨CÝÞʵH}¹ Q¥„¿'òMäÏu5ƒföaÁÃ`{3ò%±>›}‰ŒùmrÍóµá n×ýäC× ÜM̼L5™ ”'`ÉçnMÐÄAŸ}öÇåÎoþL¢ óa2šh¶H.”Ì®ò¿ÝÌÉXx-²»=bsýd›U ù¼žÏ–ƒ‘¯ð—ñìEæ-~Ÿ±ëvÁwKOBþ¿Ê:‚—•±¦ö‘–¶ØÿµJH!©-)½—–±¶ì<²ÿBF|Ã÷?^àk …°›j¶žKhçÁúr›AVÖæÁ—_È.êmnö•Ë…]®{‰Œ"6ñ¿ÜŸ]%Âú½­K̾ýã*+Ťª¤ö–©f[l9•IM²µ˜Ôk®³Å4tà: ÏñõœËža÷Øè+€¦j’ÇnÒ~_Áб‰(xÈ÷½BÞŸÃâïcùã`Bw4¬¢}`‹B"÷ùu½-i$‰,Иئ/6zDe«£øîÏó}Wë±^Küä£ÅyªéÉ”R‘)æ°Ý¼þ‚ÛV?ùè xÀw­Š×įÜL7'· f1ëÂÿ)„® ˜"E¤¦Ä‚¿k‚R·×ÊÕ­ ˆ}_p¿»º©°SAÀ ?çm*ž‹ª'9øxߥµCð|l¤Ü‰ŽÜÜÃÓ~Â.Í :^ÃîÕ¨yX9Ðß’ÿa¬ùQHõM Y‰Ãt5ïøî òž¾ä¾ß`õ9¾—õ ø~¹›0 œŸ×È ¥:qì"õÿmMc'ñˆÝþ˜Á¿wÌÍ 8N.PÞRéö ÞyŽ>ÖÛ1ªÅ%Ò ¤Î‚K$iÉ"€èg v+l>)×cí~ªã?Ín±Ÿ3 O%¾]$cÎG$$sLM}¤/ô±˜¿é|r²?†¸¿Šís%WÚu;eÙ¬ZL>ÿÓ• ä’Å’ù˜›à·\_ÂSØY?ÅòQì>1}X˜Be°Ž?ÊkÑ©bsónÙýÞç/®?ð3|ÀM¿;€NkߨrÚ û–ìÿº½CÖZ+¿Ÿ‚sR`+×Ï7VM£œv“h¿š\7ò=ôàb¢Á8Pð=p}בÕ N‘­¥’tgʹ£(ÛÑ› µÏÈ@Ì/nŸY}¢kq«߆ÖÊ+ÙÀ@Uý» Þ³€hµ0r 7ëÑÕ¹ÑÑGÛž]&°Â×;nšM|ø½žŸîþŸ÷«ðBbøþªËd.F·tD½&6îÓ¢h‹`‹ûV6òñR ‹§²sš“¬&2ìöpݽ¯ÀøÙy¶&˜ìs\7Ë;r§"ª=Æ?’'-CsŽÂü,¹Ã d#¾´®ldì=[m-àˆÐòý?®\RQÞ“DV¬Þ@Š|Tëíus=nñRê›pº›ìðHsaßëxy!ËbnþÉN¤_Äýu²b¼òD#IwðíDÓ8Ľ>6•ßJkhûùÇ•Ÿ<8½ôÐd-•ÀtVä7[¥·¨ âãAÆOXy)à¤Váà¿ôþœØ=T½Û}øƒf&ËËŠöbñÇ} ¹ŠŠ2¿9æëe È6Bs¹ë[;ÈMuçó—°é0^4Û¬n¯pl_ ùã`uWéoײ–Þ¿HnߎȉÄ×ñ’ÍdüYy–Á ÀrÕ‰&Ȫ"¡©ˆVÆ[‡@ËrÜÿß+/x(GµyÛ,8 ží'Ͻ¢©ý5¥,ºxŒô—´°eÂίp_ŠØžÎÒØ¢ÄZ"B9tu—š·ª½ kQ8?ŒÏÔµãÖÆªKow¶]ˆ®ö`3\ID›d]±º;òHýnQëºó“¡ƒÕ¼’‘¼ç…¶@nbzT²ß_g Õxøþ^pQÛZ‘÷&ƒñóZ-FÍ7ÖVËt º÷¯ÁR/—mò —ÅÿáãÙ--±ðQ¬ <–ÊNƒˆÂà9 ñDÃa†X¶ÛOú]ã¹ócŽÃ—¨ò PÿþŒ·úk‚bj_IlÿÆz…̼„d+rYó‚ëÈüÕ¶wÁ‚;;ª×âq ¤Ë‹>*ã—@þ6˜~£Ÿvœ ¼8‚œ8+ÙÀ`«8gYµ|ô;¸ ôU²áœÔÄoÂq5ÈZêÛ@œÞîkìß{ºã[gýL—4¾»:^sG v‘:ùÑ:è¥>ˆ/FÎ0ß>$V ЂÒQº[¸¿k…ƒÒòr@’Y;r¶dwî VA–¬ðØ#¢ß¸> ¾_ƆÀ”® ºáàöìÖ{^sÝ­¯ 1½È"Šk}éû;êŸE²KY™# ´8oíÏZ( £g±ÂvKù.ãç%ñŽíkäwç ¯E'îñZ"Fn¯°M·ñÖÌrXc] «ûL‡t•Ç$˜/g¹,ïõÞ…Øvšœ¯ –?¤î,†~Ôt=xß¾|ÿ9¾_ÍÞ§Òéi;l& zDïH©Róþþ¾•‚Šh¯<ÐÖ`¼„µµ†ÄðÔøüÈ×L(9ýjšQ°@G²žù‘».ðK¼¿/•nk먕õœZ9D¯yü[«˜—þ²OÝyþ…±y9ªøJHÿœž i_ýl™uÂ*ÁMxµ&¨pWR\Ö+²D¦‚û2!<ñèÿ^9¸•^2IËçÁ€ïØÇ¶Çà %ɺbåÛÖ4PÚ®„=Õº0CWrÇÚSí\˜ßw?è,’‘xÐJÒè =¥1°îHûÉF3"±»òªí´*ÜžjL4TÅ&ÛýIFQKVÙJçY9àÁrhá¹.‘‰h[-<ð™ îJ·Ïì°öÂßK“ ×Àûç‚‹XÚ@²I>¼ç?ge—ÆÒYŠh%[ŠœçÈ ¦Â}%ÀÃf¿_çCr(¾öDrK­ß­Çÿõ•†Öˆ n¡|ŒµƒvÃâ>4ܶ96ŒøÊâiZÉìMý7­l’Gºê‘2LÛ Ëh˜hËôkËFtìn?ê4I'…ƒ½™ÿÆ•Í×F`·ÞÚÐNÚi² ¶²Fgëu­¢oéÿ“|þ/¯d°z1™$õ¸ “ƒò†¼íš@‡Q7ÿl¶ÿ+1ìÖ˜Øþÿ±÷ðV]IÚwU]H @pw  A‚ îîîîîîÎÅÝÝÝÝ= !¼ÿµºg¾ž$ÝÓ=3÷cß¹Ùç°«ê©§ªöÙ»ª˜Tãߌ2ATúªñýz¿Þ¯÷ëýz¿Þ¯÷ëýz¿þß^Å¥ëŸ@î›@ ’‡”sšÿ7V I._PºŽv)‘¾ ÚÈ!YBع]ÿýõ…äõ=½+I÷¿éëƒJ0ßWR©]ETP*K~i&ƒ¤Fàvöxå’ôò-u}I'å$Ò6’Õ²I {zPŸMÚHGùmàÝ‹¼7C† ‘BÞñÿ‘•ùºÊ#‰¡ô±¤Ó+²S:ËUy%}|'øh²Evê[-¬14²^2VFHm)Œ6Ký@ïþs¥Ã³;È\I¡?hi-¡Cõ¥„ÑšT¿Ðg²ûw“)ÚÌúZ4 ekõ„ŽÓFšHïÁ£¤šêb®qù×Wu<ú;™/?I-¬su­¦Ö([Ãøë :i|­¢K5‡Å±׊ØR›aØjˆ~‹¾¦è#˜`0xh®qýWWF)-C¥ŽŒ–ÛÒJèhí¢ßh[­ª·t†ÖÒUZV³èrMâ¯}z¢aí”~kÍì «aã-Ÿ¥°‡º@ãèk‰®Ÿèº}ÎËïW6ÉŽåb»SNçè5=¤½±kNý^»êjicµ²6Ô&:]£Û!=ÆíŽ~lŸ›š;oö´TwET+´TVãj/ü¨äŸf&ì7ĸjrfÛ!O%³Žò×úLÖþÚS;h°C‰íŒ׊ \ìšF0w~øýÄ>¶ó`á L°UÓZ ?èÊwv 1W;ýãõ·"Xÿ¼÷L†èVï{^ÖYhbHÍ¿ÍuL Þ¯ç4ªÝÆj8˾ÓÓz’í6ëmTÑm²N:ÉH¢hÈ_Èv*Ë=9&G%¥Ž„÷.ëÏH´ûîÖGúËN×ïð…$š_;I ¹£_˜;ãkµÒÛzQ7éM¶;©áí%º ­ÑVŽ.‚¼ð32Ú¯ežì“K’¾[£Î²g|ÿ›;à`½¿~q§6†ÿ³j6íM†0D“ÛßjƒÞãï#tq@·ÃŽÏx4 vÖä:LÆK¾?dÏ‚ˆ O”²U2ÂÛóõEöNþŠ–ù°À‘VptíÆ~÷%s½PÂÝ3Ð@eü`´ŽË[üU`Ëýµ ÏÀ½cÈŸÕu¼sçÅ&ö÷àâ“ \ ;ˆ”;`ÐÈZ[ÊJOI)e¨CÞŠ&ŸJBiIÖ[+ÎðѬ Zø\?—»RÙ·¡“å¾ÏÉF½Bl¸ì»;=ÄOÎ"émÞ;D|Œ`ßÂ)-ª%°˜öDµ™®Á³ºP1Ç ]_»aÿBä=5%û>H— åy2ÜáÄ»è!²^“Ž ÞùĤwç¹®ó}à6êkü`œwCßpÿ‰×fÀ'A„ù®/ŸÙUâBl=GFQmÆÇ2HHºª¥¤–¤°óò¾ÆD¹‘:‘Û9p»9ùkýã’í^"ÂÍó¾ï®tÝ=oz‹»¾ AÃa}«Wu/øXëûßL!.²Êæúé4×’|obKûJCx Ðßþ¿ÕVšã•“ä•|ªÁø­ÀÀ*$r݃¬¿Ö£îiG| Á ‚Éò¦ûkCW…¨v™wê]Î?¾Ä«jmÑOsý²JÛO`à,¸(ct«\‡ C VÅî-儤ƒ¿o÷ÃÞƒ±èÈëºþ ÑT2ÃáµÉ¾Öi¤^€¼‡ÐÃPììûƒ^‚åNóùCXû°¿fº;Üç®–Šl‘l™Ám´RÜŽé×Ú€\0zˆ¹:qi˜—¼àø*{< À³÷í¦‘½~F†ÓׇƒŒCþ àH؇-΂óжŽO€^‚wuÐd}özktÝ,×Äi¡$|Ë'µrÖÄÖ âáq!c•’XðÑTðߟŸ‹Ô®—Ù|,? Ö z[Èvp°üïÆ»wòw[ûNOcð…Üo¢ƒkè`|x”êè,Z-$ÑÑDßSv»Î„ŠÙV 1×´&ê}!d|†wƺáô…0áAtáŽuå…ÿJ"w?8lïϦºL¾×žÇÓ኱¾ÏëÐÊvòw¸Y o¤(^ŸØjF;оÆE'·O,«#¨B¦ Ä''_!ÁRœ ÍØß3do õ1ÖÝŒ¯wï³ÈýÊÁà°·ë|ê|z,uÀ¢Ä>1 ‹ïfÛÜ.ø¾û4”.–dÇe°|‹f»‰+´þÉÆê:Š: $ÔB±¤4Þ?‡ wˆ ’Dìáì7ü¾…Á†`áÙHÓ“Š–ï ¼‹¯$&Ž&;X…>.`ëd7®sÒ´àfaÙ\¯•ô#Kn¡©‡bÀS4‘‰]ÒŠÅFè[|¿?q'ð++{Ñü.š¶&˜!9¨áÛrý >Ÿ‚ŒC°ú!X¡ì7 ©WqwWúöDËAÊrìÞ\ÏEcgá‚-d‰ó5‚f£f\Ž>ÂÚKôט‘ÌOÎìe?j8í&@[®@ /îŒÎò­¬‘Áxùj´Ã2G]7ØpýZ^›‰ÿ»ÉéWàóÓÈ Ç"áhrãúþù"ÁBßÿÅqÇ1БhÙH?µ+0ßA8qYtwV¼ö²qVU;Qe®—2Q"Z|8¸2õHq í»|$×ÐÔ¸»5º…µ1H6©Ç#Ã"HÔî ÓMõ}-–€A }Þ±”W†ûîPŽ/v‚„vþÈÉK|aìø„<`#L±SÚp{L5qRîKW-¦KÉ:½2úsz»Ëc¸Úuìë€íz€á°¶‹8Þ][À®·Ñn˜¿)ºÎmrŸ@âÚi»ún'£ùŒë|·™m\ ç0< 6›Ÿ…¶`$o ò[£…FÈX”w& “ `}2û?®˜>âïP02­ŒE;ý¨÷’ëm&¸¾àáÍU щÁX}•U;Ÿ9Ì=€Ha¤/!{$²–å°w+Ù¿5XíÒ4ÀʵÀ@,ÜJsçZ¼2 ¤4×âè©’tÅ3¶á+KÉò¶ê÷hé8^? Ĭ¡z>i*ûÔFñ|²ÏÑ7Ty->55é*ßÉyyNþ_;o@†"øý¼|$^_­ÔûK@{"Âd­‚T%»]ª÷µ ù^m²¹N‰“Ù²>–?§uÐ^GøÐuÔSKMÜœõïÍÐDúÚŸ-Ø5„ø7DzïÈ3‰Juž®î 6„»#Y1¬Ùö¢ãˆï5‰‹ùȆàƒ’`~!r_G΄<žK,E_“ÐÈŸã;’'¹_~EòYhv >²†|2¯…ysxþCâp°¬“nä÷¡¾’¦ÓÒÈÖ«·bïë›õÅ#vøÜ÷¸,ŸV$#ü—ñªûE¬8ÛñÜø ú[ ï¯ðµÓ4âE[t°8Ì»½¼Æjó ñ¨ IZ‰Pù§³÷å'Y+Q¨ò c÷šGKQï7ÂË{€Ü5  =hØDíõ2ê`ËÆØ°2 aÛ¬0äe˜¡#ù˜b÷e>?ÚÇ¿ý,É諚¬Ž³jÝ&ßKÁOÚ Ó‚Ù—ä}1±]!P]X °¥±þ,xj?:˜Š¼°x3bùÍ®ýñí¦°B^Mе ›õùÔf$¬Fô˜†ææúc…½ø†óäÇMøÄ`î@Qc0•-'Ô¹Ò ïû4 òǑأÂHS»ÇBòDe°ê\¬v’H6«õä>v9]=ìÛ‹;¬¤%gª„ÇtƒÕÇhu;#k0È™í»¿æµè 3z©ÇÑV }E´“ 0°þž†\$œF!g¿ ™ÁBqÍÁßüXj±ïxêòÀ±¾ÿm/Ø+¦Å#]@ÃX^™Þ«¢³:øJ-p²=ŒÀCg¸èwTב9MEæJè³%·>£(«‘õ9DíØ^@oä3¹(¥Ø·ÆšvÿÛdû_é›bÑÙÄû!¾ÏñDŸ ÿDìJLÔ‡8Ð ¨jÊ£ ×û²;h†¤µAù²À© Çýt’O÷À·*!};|`^’QSé‡ú£|!q*ÿgG¦Ê ,6”ýÊ]vš“½-ÂþöÁÞóAíré`Ð|CßÜxF3¤Yè»BvFz§·6Üb"[?Þ›Ìö}Æ‘ûøN´Ó-Õ šžêø Íðo!Ÿh&w†öÚ„}§²oÙ±M1ö¶1®ñz5(ß®§Àã—ˆvçc#±â[tœLAg]¬ Ÿ-®GòŽhr™ÏŸ6ñ|50‚¬°*ÈÌÿ1DläÓé5¥fplX`ƒÔ!ÊÏóݾ¿½YñÇ…¥±édbž›}²/ÞEM3(¸KKÙPä©<Áú‚mîKVÍ ÚõNù>ù3AÆjß%÷˜ï?m¶Å¿ZÀŒÝñ ×=°>Ì™;ÀWˆÿ,µ`áÆìÝ0ìÚ*áùŰk=Ÿ÷ÖòX^‰l§Ž[à;AŽ!·?ÄëåÀþ§öT"gIp ]Ý€3gcï|×"ç$>¹Ô¸_F»!;4пšÃwn& pØ«ä¾ë±K¬ã:ž†©ÚÀÎÅ® ±ªX>Š•]ww÷{Èò¸5þȧVÀÜLÈ>Ô3¿‚üoü¿Ý¨cÝþÈÿ*xb÷ÁäOåÈ•Ü1DÇþ=ÁÃR<¤V °ü‡e²t–¾¦ëˆ©º±‡°S-´â’wÄúÕÐÁx²Á¾þhÈ!0’KVT~‘#ÒTšƒÉÆxö·?ÎQ(é+ÿòüm:?~Œ‘ì ëh¬°= ºt=(^¨WA•ƒòÛZ|h>ÕÍâÄy⦉̈́ù*âI¸wM³àÿE¾¯ª«SÁ±4°ò?’FR +çZ-Gþ‰ÈëÎÜk NÛ“ÇL'6÷“mž“Í»Ù^g@÷v‰bt½µ±fA³ƒ^Ø}­fÕm2’¹îùý‰‹ˆ•ÉܱÀv|g\ÅýZ°ÒÏDÛ­ó¥l`…÷+§ì–îäÀnÚ‡Ë^Ç#y öv*Hmáó¼Ôïw@m'$¨¤å¤¯”AþëRA‡Èy!«@ùz‰¯ ,›mÖ;~þÇ*$u=t—𭈜«=ŽÁ[à™Zh$“¶ øô3·ÆI~IG¬ïˆ' …¡à´§Ÿ¸ ¼.€ùNòúÇpÜlbCT2—A’OÊc»¢2MÚËI®ó$:¼1Ù’X|‹b÷ô©Š¹³cVbe×븎åwŸûá’ÙðåÓs~| b`[b3ÏßbûvXÉMB\æPçý,ƒd‰F´+<»‡ÌE¥‰ä‘Í2IPŦŎy6OZJ<¸¤ ž“/ðœmê&Jç[:‘UôÙâOÛöÀ³Ÿè–@‹ý﫳ôÑTÂÉàªÂuÈO:úI.…uȾ) `ó²&–^·J)$ÐÙ;©!]e<úh(Uxe†Ä??ŸnÒg#É‹fPMÇÕ¤0œ¸Øšz²U¶´Øÿ¾ãèÅÂáíy`«öèà0û8 F?– ÃgwàþxpüÏ2J–H MŽŽœ'3¯¼“3`¹ŠÜPÄ¿ˆD†«ðI2pP¨N¯J$¼µ7Ï÷Žò¹Â?ö÷·+«d„?ïE…Ö‡,x²ŸñäŽïÞDˉŒO¡ƒç›äs-ÎCSnCs÷È¡6Ët F3å[4Õ&c¹mºU¶töÐÏ}m„‹¹9‹T~!©#Xo%“ÂÑçýy^3Éa¦h\[³Gº–¼·³Þ%ò7֤ػ v ®‘ úLÂñt>‘G²ÈrêsÙÂÚ2b@v«o=-Ÿ%´#Ä‚^xÔIfOà‰ÀO¾þÛõD’H Ù%ʼnSÛ}_ã`ŸÐÜY0™,® ƒ€„Fàú®tƒjj4X" ¼öPª33éij¹oe¿¼‘#´ÏçÕ­›Í¶ö‘}nlj…'õC;¡ ÑuŒ@‹ü›ÕJRÓÎËc-l§ÐÂ@bÖ|uØKä­·á„éÄðuøÇ"ajÄD±{ÖlOÎøJ^ʘa“¦µgúXÓÙcëeS,}`9,½&{22„Ýh»H þÍZ…üQ%‘œÑgê&õüS=Ö«þ¨ýzä^í§9N"’m$:®×˜Ä‡Ôäõw¤ üP×zQÏEÕëD¾¥ú³ÿ-(¦µ6× 1<^PHa—õc»D4É í-ðoV(íêg Ì‘OÁF¸+¦Å³d*£É×z!ñu}åÏò™Ìóüš‹—%»ÿLã9¨eº£©æÔŒÓà‹·pÈD¬=ÆÂþY-µíÓ¬Œ¥vºÞh·öKvI ƒå¤&=@LëJ´Þò;¯[€w¹Ý#BtÆîE°u#Þk‰"cû¯aÀâhd,ñÂ]'ÁÞòx!lºÎKo‘ÐÀ.>;B‡‘/§ ¡W6@þÏ%±<½,ǵ‘¦ »añMäokÉm¦PÓ´$GÌûÕ¥>ÌJ œL]›Êÿ¶Õ¹¨áì+{€/Þ’f·¾ÚC+Ksâ~,éhQÿpµ—ø’œ¼>·ä•Õ’R"ùÔn›¿d m‡üß‘åë}y­(±°:p\X„l§yó]ìÓÒ¢xöØOÎtE~”fò¥Ä%Jæ–­õ×l¤/©¸g“edò-°Oí ®—ù9~°t=ýž,ù{$nìñ^Mëûã¿…áÀªþŸ Ä w–ìgä9l¿¯ Ü=·ž—È´b±[õV<]+ñð€ìD§:òXʃê¡Ä:wEë1}¨×¨]ÝD ¡d~eñöV0À4|¡¶uÇ>KbÿÚl±Ô¿¡~„õåÓ£ý9b›‰1u ö.éÈ7BÞ …}b“—æ Ãß+EàéÆHÕ˜ç&ݯ",¤~ëOû%|WŸÛxðàÎÊ–½y^’(ГíÎè¯ä9×ñƒP¶ ß¹~îÀ‰ôØŠ"à–@KûÛ•Q#é>ÐYTîRË_²dxu°ô@=-/ {s,y]QÇ7 ßùŠ*q$·aÔ ³ý£žøKmð²üŸ_ùÊÛYPs…l 'ÛÕÆs†Ã¯“-쬬úš(»¬‘ÕpY8°ÜÄNEî‡ÜÌFû³^z€^°¼°/ößÂÝ/ÿ«ÑNeäkJÆè®–늢XDû…zðò?As§ðƒ%R,Dœ÷øÛŸÊwžl—0v›,ý€ŸðãfxÞ×Ô}oðë‘d„ÁhÁýÎÓd¸³¨«kfâîÈŸ;c`*ž>›gÍÐGL gíìòiweÄN?2HgS)Ï qøW"Ú £‡¬ #û{Šß>…Ç^iNòÖèÔ°bðôèa¾à¦ƒ5…ÿ6b7á%mµá«ô9ÈwóÏheòèüT™ù¶¯¨®P[Öb:Zº„8ù'IfÝ+ã%5Xÿ•úå; ‰,‹}Mæ–Ö’RÏÜ$n#Ë­Ì­•ÎÃúÝŒŸÝþÌà£äƒ‹xý}Ïm°5´²•Š'ùßBëc¥Ðm‹¡ë%gˆ“_$¶n—6,›5ƒåñ±,9Y\"4‘‡H¾ÎÏ‚^GlsWö/õoõjÚûXôU›øÞŸHèf@œÅg"[0™Ó-2¡R–Á²#ûr›a»5¶ÅÖåõ×s¹NU6]žh»€¯ÆË«€û¯°¡Ú 2Ÿjþz¨MäÄýõs°T¼ ²=ׄ`f¨¬óÑÏê†qäF]PGÕµ öÕ¶AV›ï<'-êßY‘´:±ÿ0{íæÚŸ•ZÏZ#¡»º}Q¯<¶ŽcEAÄNjä¨dwç©>+÷à©Ä©xÄ40vXBù ME³ºZÎöð¹p6Aß’e†Ô•A«HMI§±ˆÙ/¥L5_oIRò¼Säw5»–€ß"ÓJ­jõˆm`õôÖˆmô9ÑV¶_"ªü¶6ù3j2-B.9ü²£1œóû÷× ä_"+e—Ì‘XzY‡¸£BlÃÊ·¬u´’¶‡¨^{F²mØ{…Æ77íþþñœ D†rÚsi®—%‚õ’ݺ֪XJ é¡êKÙ,%†¶°ææ!Ý÷×sŽ„».ðï]Ýe­¥#ª¹3>›êx@e»‹§—°F<Šg3áA÷ûf)wõ,‘Ïî“S¦± Z/Ðâýk0Ð]6JD‹¢¥ež<'¾å#ŽEâáZ›Šn±a-ÍÍÛª ‰yÌ!þŠ¼â½¦ZEwÊâH›ˆžÊ£›Ïõ€ÒíŸ\k©~›’ ¤8-ŸÛ‡vXgË»볓w’lØÜMÈËi;|'ˆ¼pãi@ü\Ã},ud?ùÊÚX9«£¯õgýH·È¼êϲs›%µ¤Œ¸3AÚê§vËÒ´²½d äK8ñW9.It›\Úòµ—FR@òR=Æ÷ÝàJIQ-cღhV²¢Ïµ¶ô‘ë_\E¨†?"×ͬ]mªM%ÿë« ä¬ ‘›r@ÇÛKÉÄ-³d“ÔTvñ$—Ÿ}SªƒqÚÈ2‘íÖÓñ`bT Åù/¬o¨ÕvR­7!ÇûH¯ãy­#ÿûç­Å—,’JÒJY>9]ŸI~´ÕE†ý/îõÿäª%ùdŠd@‚š`¼€ÂÆ…þÓÙÐS9éMU9ëÿ‰. HŠÜÔÚ< ;ðWí¼_ï×ûõ~½_ï×ûõ~½_ïW`V"I/%¨ ªHyªÅÿ÷¦Þý£•žZ(•¤‘Òò½´¤Âë¿¥jˆü}ï¿·H‰ÍßsÖêçCsË+e² ’õ²L¦ƒ„urDÿIºýþ3+­¤ âKŠD©}çº,ÔÄG$7xO‹Vªcù½ò£¼”Çò±†WÓøšN;H´õç_)Àwn/{AjÿÒP’K i/áµ ÔDÆôH>Fóé<­«¥µ¶VÐËZLCkmБ9DöyüW–›çñ=ÌvDöËsÙ(¥õß­œN’OÆIX‹f-¦´DöÐ_÷3IËèh4–ÀwULh!þË+”ƒÑ:É×ú‹ºYÏîʶ‚:E Õ´êôÐ^ ZûÖÂZYc좵´ÚöEÔ‘`#Hö'e‚°zGY(9õ†¶­¾³‡;§‡¾ÓÖ:[ƒ4‡¶òöD_kLìÿ’¿C­zhg§­®u“\xL.|$ùŸ¬û½[Y$¿L”èšG;èFýQ7ëVPÝÎí•^Ò`Pñ¡] ÷õ#‹eÙ,§‰½ñçÎV°K:F?×ñ²Of#ò£‡?ÏJÇ7’U’@è=®g”.×uþ,˜C<£ûô¦|É£ˆöùß©;Ó#‹…²ÈÙwk1pPÓ>°ÚMˆFÿ,“ JI© Ó`öš:«ŸÕMzO× {°ÎѺWŸúníô#«ìýÔN¡¥ +nQàÀ§þÜÇLvQ÷ÃØA«Eñ…ÔìŸZiØÓò²HBiÍ¢õ˜Þо‹ÁAî{à÷Ѿ£ñ*lÿNÊh‹a)à?×8¢e°8ØÿÚxíϺ¡;µ­? r˜Tþ +ùLGùYNiK"únÇ‘k˜ƒä»¹ßõ=¾ŽêttRG·‰ø+ÚÂØï»B}#ÞÖXèà üpåßà¢5ÙSÉ@ øŸ,דñŒL„׆c³“pÝ<ؾ/è?ÏãYº»»¾V+xe"[4…ÙV£ØIß4š½Ó[H½_Ý,ù búz€¶kgMJDhÿá**­¥ ¸«W§é6¬ÞIqs}_fû^€°ò˜p1ÿ®ÖÇÔ~½`ݶSW¢¡ýÄŠÐvŒX˜ ù ^û>Ñ AÉ3}-u©ÊZÈ¿³’çVÄóËáïk}_Ã¥:Ü÷ÀëÛ¯DâMzJùÎ6Áõ(ͪ¥™<“>dsôzûÐfùk›ûŽW_YJ<Ã!u”-²à#´¤” ´ gŃûFÈ éNïzÚöñ'`ñíH¼D»‚ú…àÂâXp(~qJÁyµ‘ò6lÞŽóYwµß°ð¡…³Ï`¿§DÈ­½}j{uƒô‘a:äχô÷e4» /C}§è Ÿ—s™¿Nz’ïAa,ù_g°rœÜBn¡&¸©3`ÃpDwÐ/(1ÃÖj­"ë¢$’“È^?a¿ç"kGßö"w×ñò>Ófú¾á®bßî-ýËž‡Ÿé.=Ltü ¡%±sh. <'ø ¦ B´·TÇÓÉ®BÚÊN…_@H1L„sÌêÂ×Ç`Á X»;’ÜÂÁðû0Á.½ŠvŽèKxí·«xÍAßù}¾E+@Æ.¯#W>@Dp×€'£ˆª»$Ð]_~¿’Á~Á2œzî%6J,¯‹•wÀ+ˆct 6ÔÄB×ùy5lp[ß&3Ü€Ü ®Êß÷o¾~†’`íó !¢&:ƒrZ2é»çÖ24DÍŠô‰ä’DÃsŸõݵÿͨôÜ™ýÃt¬ö¿ßè iä»ý¹þþçÐÒ r£™Úf„ìî÷'D¿#àä®&€ù¡“hv }¹YÅ-~rNÓÙxm/7‘?c Åþ÷•ì'‘ÔZ\Ÿ'º-Eš¾KKGl=<\†ÕÂjì½<¯d+7âG‘+”=G¿ã1ÑɃޒ÷¸«Ý§á Ñ-,ùžˆNèf§u! „”+ÀSsK)y´-ètWn,WÇ^.Ï ÛÓ‰³ñí~úF\G³ñ¾Sð^0ÿ3ÑqØpÞð”ÏÜÿ÷ÐGw²Ô0á&þ½L uÇOzS#>­Ãj-N62ÎŒ‰óJ/¹Š-“Ç âîÎà^Æ¿ÓÀú4<`šïYZ.جK¸„Û—¢›5¾»ëI/ùYéOÁOÀÆMd¥É GÓ“`Ä趈jåð…'×_eVt©#-eˆt‚å¦!‘Ëûîùë:vø/s±à0ô0Ôõãyu³ïв“ígrßâ»\ï'ì#ó1b4Xr‘´|ðš\°‚E²iðIdrâ²ðâdÎíýù—• îï(­¸—Jä<û}Ï¢»à{/¼}+Oä•]Ü«û«€g íâÀ"¼dz¨=É’œõ¯‘9ÜÜ@öJšLÃ([ÐÎ=ðÿ«~?,á3éí;ûÄÞ¨››[<ÀÝÝrgs}‰÷7—…Q¿ôQ|<ˆ}ŠŒ‹AöZ|b:Œ·L ëg¼s_Œ\+ðŠÅèhÛº~`Û¼G<€!_‘9\“YMœÑOá»h ‚7·4еÆÔêáýIÜýЭò5‘ÿµ¬K%=Œåæ7ÎÃb§Aï^|¡›ïÜzÛuÐvh`>²/Ým|>¼Ÿ(8‰ÛE”gSÐCbå=™M,øÞ¿Ìg3û/%ŽìäkXt1‡ Òzáÿý•Q Kɬ5…š¦ÇzÉì6¶=¦j×|Ï»†~È lܘ¸ˆW¶àý£A…›“±ÑwM ³“ëºÞÙÃ5HŸSE¹ÙXÏüÕß1½Æ"ÿ8Ø3 ÕÂUòÌ`jí†þÅ4ªD“¸î|Fü¸ñ¯öþIß`ÍÕÈèlÝN¿÷½]ß²©Z†[„Ýçðw«Ÿ1‘:p¬¸Õ÷Íž…*éV©Î×ðxD,û’“|i>’ëo½O8ª©!Réºùgâþgæ¦)lMõ:·¨xŪ€à¤N€ '_’‡n—\Ä·nH² ›ιk^´6>±¯â#iý–Œð6] ¶w#õ1_á¹£$ýo$-ô|„´‹Øâ LqHM0Í?Ú®ŸØ þ‡ýþhb­àP¹ˆþ å™)Q´˜VÑVH¹Šû ¤Y„U¹o‚ÿøY7®«eRôäd=¥¥´šgˆ¼:Û׺ÛÑZi½.‡AûV?u.þ4…¼`¢¯þgÍÜ\Ý,è @%$…´‘Æ2Wkqj¾¦ÜÛâãý¸ äQ%»0?à›ý1ïüú!<ŒdI© CÙ[$›DF4]l#Òáu`×Mò 6Ÿãgèä½åðÉOxØ!*ǃ諞}y*ÿ×D¿±2HNJ)²–™øuKtÐÉw7î ê‡òÚdlèføîàÝÔ1%•6×¾Žö´©AŸ™ëæ®vH¬üŽÌ©/^±Mï!A+cýñ”Qh¢•à+аžH2KóèN?i;+ŸT”%²Z>¤fiç»×ÏÇÇKpo¬]°ý.ì5 ëÖÒzø¬»Æ}-ö¿£…¿4ˆŠo¯Bî*|:?¯Äaëñl历¸Jè1Vwø€guá{–€¢1^³ƒ5³î ìÑà路œ—w’Ê÷t¨AL.rËâÙeµ²#Ã.ìÿ’ÎAŠ­ÄÆdô—ÀC¶˜];¡«Ì~2Î/RFt&ó¹«d»çð€—°`G¶nˆÔ®zþ‡1 -ƒ“Nò}@å/%“å#bQdh„—6gë!{ -Šëý„«!X´/{ß•ü×u@¾¦©ÌMüø†Ï%Ö’š—­[ð ˆÍýÂÉþ˜Á*ªàëxÀ[<§ß^…ÐVhͳ6dNyô&ÚïPùý/ðõbìõ4ö¿)ûWo.‹E;]7ëÍMꙇñÙo ›‹ÀsitT _É–aë ÔN-ñ q0Ãu=QáíçÑÂßC§ŸoÅg»‘UŒf›ÒàeL€' M“½Ò;ŸõGrZj}ìT_¨‹\Íýì?×É{“?.0fŸ£qìŽ óÐ(­¨q‘"—ï[“ý‘¶%27„÷Ê`ù&øBi/W]_×¹,~'èw“œŽÓºyIÚÁõ¬®57×ÄUÁãø»Ï=<ÌÖÎ[;Žé<|¥:é‚~ówÄ?úŽ™š\;Tþk’QrÀFí°NGö©±ïðY}TEµÐÂhü×MõzJÜ»@sù£Ù)ähA̘¥®ÊŸZâýÅu <°=÷³ƒŠè !z…ÞZðÜÝ‚õO‚•²Ø°g¤˜<•‰X¦+l6Úg3å¨ñÜ­"Z( fî³dt·5¹E±ûú\¯ùßy£ØÑ>1×2;þ=¾»èû^­Á[ŽU¦êðÍåx7?ßìò§SøÆ|¶O~˜Æ†h¹€Êÿ@ºIüº^¹‚èæêý°J ýš››ÿ]ÛŽAÞmØlïéPÐÏFÚM[oÃl‹¶½–ÕÎñÉ û•ŒçÒß Ë?OeÜ´;•çÝhø˜¯|×é;´óL–@÷ÃØ-‘Øßá¾—Ñ@ߣýkÍÔgý|†þ0¿›ú¸›nĦaì9˜eL-·uË}aÄö³µTvéÏ#åAj£|ß\®5Ì×Í÷šDÔ»˸ßWæãçð¹odx€å*yd2Ÿê»¸¹ ¨X­H5ÿÌÿÒµ¼ÎÂö'4’e³´–‡µ±ºUP»6—MÒUzÉ*á­Z×Ü,ôGès x™”ãùÛ dÐ øÉHÞé®±øöšHcãû±äy€å©„ŒÀ⮬‡¸G=°Ot›âgnÀ¦¯©f¦hT<™ X"cÕZÄÄSè`.þóP~À¶û´Œ•µxÁ-xÿ5Ÿ\ƒüí°û X³”mexí¸ÈFíÐWÒKî@ Ïš+I䦌”°Äd7ãà¤;ú;€P7 {*œÕ\}¤ô‘b°üb¢Ölé‹ß¤$ë"Õ%–Ï’;¢³Iýít/ÿ†·ññuhïWp×6àc'È£>·_ðލZ\RZô¿®dRAŠR»N·“ÉhÜï[kÐEf §'d—‘mrInËJÍnùí5ˆ./5¥‘”yÒPâé,Y*_K5É?´‚×"}[4éŽø-Ó‡šÛ‚ɘ®£‹yþŒÊ•0ê8pW,ЂÿuµõÇA{ÊÇ`v.lÕï²— ·»^Çî}¥Š¦ƒÝYlKoí¨xOÉE‰­í¤®Ô’ÄZ‡,2•d9$Ng_Ûaê½_É fP~s³³CÛE°4‡ûC|ª¤–-ø_×I¤Ïˆ”qáv×Õ®r¼À†á¬L—”ÊÏu‚s,Ý„ëˆéõõ;}+ä¾,“V[÷ȲY‚¨š>´¦VÄÜüÓ«ú!ÛüJ¾ü)9bDKŒFç7ê'¶DÛHrboÈXá4±””éÒ ÏÝíÏlÍß[ü{†pN!çqS€Ü/œm‰‰ß“Í•Òàýµü$é@Ia=H-yg›4%øEh_ ²BzYÒêX›ŽôÅí:ßzR£òúOþ|ðYü¯+‘–L2MÆÃW·à¦PĪÛzHSØcjšƒØÝMòÛFôÚã'A'ªe ¦Ç¾Ù4YÀ¸"’ž”Ü ûˆfÁWÖh+lÛg0}lÛc‘ÐÀ¯Ø?Èî¡¿¾’ÿ)+ªöCþÊòF½ŸS¯÷öݾãÀÙ‘‰{.¸)@ûð„yTÄ[¨acj˜"%±<›Æ€ëº× ô3×k< CŒf)ȉbã ‰ÑÃM$j.ÿ½HV=@bË¢@‹ý7ë ä‡*Ê`-`‡üܲwÔ}ÑÙ÷)ú{ïâµsøîbƒë‹úƒ¦×\äII4-Ùbz±—º êm‘~ º.÷õkk”±ÉvÀNš;+<¥ä{[Q÷W"óÙh¡ÿféH¢`)i¯å©hòZj¿KkY_ûÐŽùîž3AÿA¸±+b9lïº!~K•ØÈO lH¬å§$ôî·ã`ìÿ½?ÿ7‹õ·Am?þôFï »b’2œùð×c)‡´ÅÚåì-8ÍeÙÍÍë秿σÔÜyïm‘ 4UQ5l^,)%^žGnRp´°ŠÏ\$Æ_$œÂ‹b£ÃXß.ó<”Õ±-ºo«h³>Öaäù% Q邸jÐUèëøw>6mÉßýÄíÓØÙõÍ‹´yµxhéçƒMÇöýÑíid¹¿èpÆ.ßýÿ•ïìú G%3Hm£4ŸÄãøwë0)©ä ›"Qà¨Ô+ áó1ķɺ ‹ž‚†Q!–ÁÒ¨“ÜÐñèÀ]'5$¸cb=ˆ×ü5ÛcÿK¡ûU4ž…"ú×·ÚG®“-¥ ´°°"b—4ìY%y%™µ„BúéÈ=‘ø6î[@ä[â§ÿVp}¼‰bCx¯¼×GSðéø~G±…(›Gµ;þ7ã“xý6ô²GCi#Ÿ6DžQk!}Aù6t³j«#gl?>›ªkù{€¸ß†wª`ý‰¼Ó”×ÝÑî…à~Û5öG€‡²í&j¾D‡hÌ]=ãzj»YhÑtŽ”e…-ì¬ðÚd6‘uâêó¦HS„$êoÑ d5'u3ѯ7ÌïæEN€¦ñŠ;êÙ ÏŸÃVSüñ“èãŸø¿¿w®ó×I\×°xýD³Êç2?ÐÂþn…¥"m åe¢ŒAª%þÌÆ¾ ÛÕrÎr®§éP$í&¾DÎå~ZæBoíq `9‘¡ÌÐoY‹¶î’E < žàßv—ïXÉöY%¯Ü´¸¿[‘5»ŸäñwG³OÕÚø³½º¢7Ë{þ¼‰Zf¨Ÿ¼<8ý8¬åçÜ=£ CÕóô»³ßñKˆ!Ou%µó¥@‹û»•VŸRÑ“Åàvþ|¼'[{Æsw¼â¥ïü?žzÀå=ÕÈs·úó[ú¡…Ù ÀU ð˜ÞøÈLuWƵdV€ ø+ò_w^ì ?Q1«EÒ\b!®ÿyb½&cÉÿËaµ¨¶¯ÝÏ›=AQàñGð\?²rïãÐHØ~'¿ÉúûkƒºúYàóØúµ¦±ÖÒ¦X {E=}‚ r1UÑ*%•BœüôŽ´–âÖÝÒ™»Já28æßKÎèí~Íœ†ýÝ™ 5aùyh`̶ÜOJXŒ.&Á–î¸á.âýc}ûE³$–ÕjÛ|[^KÎh1j fÔ‰–÷·+’þDT ‡¯'Ãg’­¸Zý,9ÿG–‘*î|ï®y›ç§¢Nƒù^jxâÛÇöO¸m—km­ëgåÞÄ÷Ó[Kc=r¿Òæ–×RZ!«¥¥a›@ËûÛµ™œ¯2ü×¹>2wí–Ú9MdÏ5Lj;\»ðõ5Hî¦tñ;ñ껺v?Rîã1î¬àÛúžÿ¼™Þ [1äN t¤ ú–Ú?eÓ¯å£'}`€4¡íÖü€Úí¡Åw?Å1í9îZä<ë+‚Ô„7‰pç5’ÀVøóÀ{룟h%–EáSÙù[jž(VÂFÚ râ [àsÿÞ:"§¨ÿɹ¥ñÁii+j¹±`XP™Lfžº3zoù_C\/„kX:½&6ƱnDÂr¶o æÕæfd«íKy­§}„·j6ÛX­/ßZÔ¿³Jsé Ý¥¤6µ Û§X¾œÅµœØï5hwg»!;ºJVóvÍbM¨k£[U[Ës7ßt¨¯V/_€Œ ྿ͳò°jAªéÄ–OÏ…ÐÙoY#d.à@É—»˜—Ϊ#{u˜<‘pUÌ[ßûÃ]ëVpg¶‡±¾Ô¶¹Á‰ÃL5¬þpg •¶Îv Ù?µ¼ÖÜòØ ].s-â?\Á²@†H Ö¯­Œ¹Yßðü"Ø1m"{¨lÇs+nm¬µ­¶1VßnlµxþNsZZë`™,ž•"ö… J”ì$c‹96S'†¸¹¿]¥-÷/µ™íáéáÿûØ<’}Žý“Ù3{jw¬!ÖÌl±ÌÐÑQ›€Ý“˜‹{ôWꈌdˆ ¬…-´a6Ö¶YMÞdGì¤Ï|Cþª.ue‡Ä ë{ë;¸|EÿN“[%l;l²µçõÜ6ŠXßJÃÍõ"szIFûTöK é$dªÜ–ÆÄ‘%`d˜²¾6ÿ¯FuÕ#ÐÂýS«¾|ÜÆ–£µ>9L 8 %Œ*èà Šgµ5›~ Çä¤dÕPZO¾’äŽ?ð¹bR•ú>™$‘ò1²¿æ“ù`ÐjZ½þyVÉW xzTl>ÖZ± ŒAït›—†È[Œ¿-¸e•Œ‡š¾˜Ä¤²ýKׯ*²]ÎIqp˜}d«aÎS>Ó÷¿²²I9©Ae÷“ö³µvÖ¾±›S ’'·”ÔRƒ{A)…žRbïRÂw½O$_Ji^+H-YÿHFÎßK/Á)Æ•]vKx¬WsPõ.‘3d™Á{î¹%Íßl™Š[l^K&‰ÑD ùË'§ù_ B:ëÿýU‘Œp(ÒÖB¦Âpc¤Ì•ÿQ_¿˜à %Z˜%¿þ¯íçÿÍ[Òá×9Áuq0ŸX’K®@ïÒûõ~½_ï×ûõ~½_ï×û•‘|0#u`9$G¤-9oFjƒÿ¬ÄäÄY¨¾–¾2EnÈwšI[ 9²W:…ÞNÿ3+•$äžY£J&‰O; É k*‚NòN6Èk M8ËMAÔ¨ú%¯‡´wÿµ¹ geiAmû•´£ Ê/ûø›„:0ÖÞ,e4¶6Ô<:U»êN§1´:õ_FtÏóùWV,ìK¾”&²\HŒZä/”RTjKoiíû¯+õG½ X}›«t´”/¨¿¤Vü³® ’‚{l‰,?Jß -”×ÖꦣfÔñ’™÷»iE‹oåíµ–µ¸–×’ØgÙæƒ€¹Ò ŒDþ?ë´Àtà=…ä…Íb[+l±-¬…¶§h"”®Ñ>šK‚l±µ·­­Å±èV›cZGK…öê3ùP'ƒ‘ŒxI‘@‹ò/¯HžUÒàéÛåŽA¾u©®Õ­þJØaZY{hD-”ÃÜUlQì±&´ûÚÒÊZ&+ií´…³íîªO8 £äû“qaI º‹bÿçòNSX {«mÓÇzÝ_µ_¯l}t¸mÐ_ÔuõÛ¢¡-–U³Ï- ÿ6±á6ÔÒÛ—6@óû3 sIÙ@ õO¯"x}iøí‘¤ÓûÜܯ'°þ]¢‡õÔ»ú‘]Ñe\œÒ{ºA÷è;-dYìgd‘ì»§l£³­ˆ¦ÕNè²^ýÕû÷+¥äaoÉ(½¥Çõœ—øGýçuݤ'u—ÞÑ·he¶^Ô$–ÙÆ{ëqAþ'°à¶§M-+¼XÔX%‹há´¨” ±¯ÿvå!®•ªb¾Óå;½¾g`ñÇê®épgvoõýÏF£w ëGÈü@£ÚOh'¶%ñì®>ÔÄü›Àn믚ԺÛ4‹§i¤J …ûOWØ*ì—ø:éê݇ÜuOgü4wýîßg*˜8íÏ cwTm9Åöa‘þ­f/Ýy#_ØE>ùLGƒ…9R‘ú d¯ô“L¯¤®F–MÜnƒõÍØ{(¸ÿÑuä:}´=ú9ª¯õšœ–`ÿ1ÈpýÀ£Ú/úBßÀÑ,7òb'ÉŽ¡‘…¶_¿…UC2’HRrürÝwyXʧø9îºÍ—à} ÿ®ó×Ã/Ö#ÈuCK]ÙC¸èà:ý<Ðpv¯Éfq3rþzïkšŸL!»–!íʇ[éÉÕrÂÒ¥ü™®ïëÎÛ6äí¥ýÀú2$9…ÝWÃ…îŒÇgú˜ØÖGñ·ëÿÿÈ÷Š#žÅæñ, ðm>P³*¶Å i#ihAÿp¹Ð å{ê™Çd8‡ÈsêP²zÛ×h0^Ð$¬''&Ö½†NPû‡Ò.°Ä[4ðìOw5­S±ÄäűÈÂÅ%Clg»-‚n ‘3±’“£¥—ÒÀ÷m?E ë‚‘qœ?ߟ«ãÔ]î´pŒ"çq½ Ã;@ù]ØÑõxuçL¤°0BB²À›°¨;ûÿ ‹jÙȉºéO! ëéoW|x?§Ô×—ó4qí7w÷päwñnž°< ÃvêYÞ‰œw|Œ8æ|~€†·Gä›aMwîë²¢}Ôƒqð…ì6˜Ïå´Ë`b;ÕaÓ@‹û»•P>%îuÙkt9Öt=kG"÷<|»²]?ô¡Xxµ¿.`ò½ëg4²ý®ÿß-u×Ý 1í!zšê;‡\¾$+üÐ;ìÕú~NÈZŸIIÙ"qmïw³Ë÷9šŒõ—Á‘ã*Ì7œÁ;#´<ì vãݬP¶S]…0 ûÞ÷×û›…·[>VîÕ +DÝ2P;E;mt–ÿ5=ä¬DĽÄdû½óYÎV쬡‚ss?NcÇ®¼³«ïC'‹ù»ÝÏB¹ˆg$´ç¼w ??‚Ä‚ù^Á ®ü2>{ˆ(‘Æêâ#ˆ5¥mÒ©2Pû3d¬”¾ezpÿ˜úåRÝB¢u  Ÿv@ #±ì¼ Fp½€–û«‚ñöv{_ÃÞÈøÞø®g{‰x÷Ðà¾c¯˜…¶|dCÏÐOJkÆè+ ¦"ŒhÁýJ‹í#Ë8)çåx…ÕNÃØ·‘dþÞ•ûtm\wÀNx€ë¼»Þ¥6r}\ö"çYl.æºÁnæîêE°h8ráËdÄ+`€ZÔ„g@B)«A­ÐM?ÖÎ!äØXrØ?#w¿Gžr ïf¯ wºè­uỞøÆ:Mª'¤¬p…Ç[Ø~¡ï„»Ë÷Âÿ«G#êÍÔ&|ú%Ñò†¦Fþ£<N¾Óâ·@@-KcÑè­rItxBrÛ;h¿’¹¯À¦o¨jö’á:/¯ËÍ] çrÞ4†ï‡³ÕOtWâÕõ æŸ8„ÖÖ «‰ÇÉR›ëýu“wjƒ ×ÿ!¼?¾€•µ•šE¿r‘÷”’¸ú‰ö÷ÇwûóûoaãEØÒ]õÚ‹ÖÔŽ`ö¨ï{³XMt['ÁŒnØyôð#8x V†‚Œýš›ÈÿˆÈ±”-¯¡<ÔÆá|6ÐŲÚ÷ *êHõ@‹/ÅñÿÒTeÉÊM5™JÞçú@\‡ãÇ€ëmÚV«iUmÇë3µ V›âç¿íD7³@Ç&_œÆo.p;¡E42¿Õ\ á¾±Ùg–ÙÔ’YtRƒÇel6ŒÒ9ÌÃsÓ}ãK&I@\?§MC³ÐÄî7‘o—"c©¥Í`‚ÚP+ˆèiÛ¹šß]ù½Ox÷¹ºé|$˜ `©ïûy]Gþh×ö)•æßZ¶Ð2Ú[­%=%A€c`$¬ÿ¥Ô”þ /`WÂü·@²«då÷âù­}ß¹øEC˜l²o O\Àv›ÐŰﺆ7¡§M’×_~™í#YìþŒHù˜Ïý¤9Èk‘ D·Sd)È9{%tòþdRD’j¹¿ª÷¦àµÝD³A¾ãK;t0‹¸?“ØÝOÀ›ÌÝax&þ~k»y`§Ù²—ö–òü7? m_Y,²Cwl`3ßÊÒZgËb9‰ “¨+xJLÉL&:Orã™~†Ábä8ëYl"ú rs§ðhRnÒrÚÂÏ>š?º«àv"×q2¦äÛÙª¶”ÅÉæRôLà¦Büˆw¸ÊðS5Ki1m¤–Ò«²$Àǃâƒ]ÓüXr¨ßŠîJî}xòqßÑÅÕº›t´ŸÝÌëý´,wÊ[s›Ÿ†3 ]mÆ÷ƒAüh¼¿¾ ×ç£Ïx}T{ƒ¹¾ù7©Ü•ð#4¯†Õó2ZÙÿ°4™ol™)W%3h¦ÛcA×íÙãZ¨C¨.!åFl7‹ñ:h>ô3ÁO>9Ãß`Û]z[Ÿ$VFÓUÒ=m†û‚ý¼“ `«÷/ùÂx¾½—ïŸñˆ* xå¯ÿfýG$…~µ]îÖܺÂU£ý´£ƒ¾òQ<û™ˆ+`áƒdDnNÂ2MdÍ`ÃùhÅÍ8݃þ–È]9Äg–¡¿­èÆõN^àûèm7ÉÜÕ’îhò "Ê)@ù{H<ª°™r‹è×x6©]'çÚä:ô;ä݉Lë‘t92Áääc†?D´}>_ºª«ë’3C“i'ÉŽ'uÒT¾ËïMr€mh¦'ÚÎ÷\ÃOÞéTaÈ•ûé²€òÿ0">Y#¥r;¥zÃpC5'ZXD$˜Í³óÈ6ÛOØ‹fŽËJ|£Ÿw+Ôõ/ˆŒƒüŒÀúº]NË,?‚X²É%E{­ÑHW|â<8z O¸«c§Â˱ÿ§“…|&mä”ÄðýÌj’å¹ý®{;ÍÜ‹ýô:7dÒF¦ðá©E’_T¿ùØÞ±E>( à¼y°è,ðr]_Ã/@Aw>ÝÌÿNxˆHxÉçV+ô[Ý)}$FÀäw•ùY‹ÿgaQ7ùÈóîŠý{ðïi¸ÎõítGB*pïƒå>ÕzHØ@!uü¼Øé 2âYJm%;ÐÉd,¾•Ožó“0•zwþT|¹^ÀÓü,Ý5äHÍ5¡Î hKFÀýÜYìóh*þÞxóTð\V+#÷"0ïæþŒÀ—ÇŠ-°_T¼½«ïtÕ•¼°r ‚)j’ æÑn2•ç[à·_ÐÝ2_78¼­Es-}ˆQp¤ë²ÛQ £“âS?  üud§4GºeøòH$‹]\âÉú5•Lg^s3¶ù‰vŽÉ]xWR!}¤¯€ ù4Léº -$3h)íü¤<7ð*òß&öõ'뛇¼Í@Q7tÕž Kýõy|/€Ò‹´ûrÆ÷ñEtS/aW7Óî,Zéwàó'Áïd¯ÃH—»ÍöìÝ6µàÉ|¶1+ª‰õ…Áˆ‡ðt÷[Éqýßx ºÜ|7 g=øšæ;èðG×nTþrŒh=ÞûÁ÷~¯ì{8Ôåù÷HS…ý>W§–›‚U—øîµýxw¬©…ÀHiMŽäÝ1È4„ öqÒýNæ8îG°u‚׫S_¬Å—Žã]ŽcPIí¶SÚÉ:²•ÚØÝM?ìFÖSŸnAž_\÷FžSpÙCßÑç"ü6XÄ{Áõß ±7šúÆ÷B›ÍçÏ‘µ¦~rõóC$¾Ç¿ÑÉ~®ÐH00–™ƒ©º- ò_‘Î2Ýw{â»úôÇ6M‘¿ –ð]»'`Ã=Ĭ‹xB;$ws »±÷ 5;ˆ¯\?¼þX·*–m‹µáKÛù̽ï9u]Å¿ãÛݤÉ0ÿtþ¯>Ø¿/ê€Ê,9¤>Ö¯‰¤­±aw¤³ÌTt‡ªøégü$ l9,ÌEðž £„ׯx– ,7‡1ö—nêÁ5?y?¨š«dA·½øì2ÿ[Ú$ŸÏm»ë¦Pù'Çõ¸uôÝÎZyVúŽËÃU4Ò­ÁóÏij÷KD¯0v™-¦j|=,É. »œÔ=åùü@ržH|Â×z'ÑD%ÐU’ïpõFu\»‰»›†ç~Eœ­í¼CRIRßÅ®Ȭ„OÖDua<1®7Èþ–gƒ±³ë`vO?77å÷È®C¼–ÁÄù DÂðÆn?øµHüßBÊþd–Ðf-ô9O:†wlEj×{»Ÿ)Øù?礪t'âÁ·wÑ䲓¾5ö;Îþu…ë;¹]?§Åþ¨`4~o,‹e§ÑK)ko)ÉðÿOÀ\ÄûÕOŠqÓoÆ£Ñ&øŒ;cf;^´†œh':˜ATÂ} ùO`ç?Ь–ðäQØsÈïÅ~Í&¦¹É-3üij®°ÖlX~öÄ>?'|jᬚ͠’mGl¶¥·ï‘¹.•acýПñ´ì¯&g샷OD³ãù†…xѶYÃÙýÄܼ¡{ÒP¾°ü7¤´|¬‘¨ÜL¶`ò“å ÖuŽÅbù`»»ífÏÚGæ&£¹™­5E·$VÛYM{Ëk©´ ú›ê»íà6¬á›ŽàƒáƒyäOÁ`蚦±ŸõgI-qåp€åi%­e‚L7×p±¯Zû 6‘ýïœ]ÙÛ]øòRŸ»]£víÌ‘µò¤%æ}FÌöã‹ÉM¤–t=7€ôMþø›¬}–üaß´›šp*•¦”ï-<ëª|.…ÈÞÊ öx üÔ‹íЧÒÒW>w°ý ¯‰Ð<¨%­¥Ñxš\Bi,]+¤‰†×°è'»î¡6Xôà'°´›ÿ|F÷‘?îÄîRM½…^’ ¼!÷ŽDõøõ¦—–‡=»„õ†#É[HÏËq‰âqŸöq­ƒ†µç×n|¦Ãe¶ôBî=ºYÊ‹!³Û'vØw?;‹Ôï÷>?£F²D†èÑ•xq@?vý•åK‰.Ã-ü·õRžøk=: ãYäþ ézÏ‚D§‘㠎‹[áúžØþ*Ñàͧ‰4&¥z!UÉ\ßó_ÐÚ30?ƒï cb)\ÿCø¯“¶ äÍnJú¸°„V%ó\hÑÿºÂë(‰E&ÐIµÝ\27¡)²mõ½“Ñ:D\ sïÁŸ+#u(rþÊd¶éÉ‘Ý\´`Ýý^ŒÇ?ÇÜuŸYU»B]4[k|‹Cæs„ÚH³j’O>ÿÛõ«ìÅå¤ÞßÖ"Íöó5ª›^4–œý-²u& EèÛ#Uàñz­®?I9rÜDÎ:hnœ±ÒŸ ×kDß9ò8)ª…ìs{^îàoˆ9!!öýÛ "Ä“wò+å°˜¶{·O­·?Ÿë0¼ØÛOòóÜÜoWa¾\Ô5nbRl¦¬›kÒÑOêYóøù_*C~Øùù¯=Ñ/ëWà`8ñfR …þ›•I—ÊJiöû"H^ê'¸Å³¿Ìû[ë'8·õnùÉ·Í}ÅÜ:~15L{?ÂMÿ›þÇ¢ƒ-~ÒÛu&hs+MÆÏØq*±§T©å yh¡ÿÃ:ïÏ~(¤,>L®>’H=Ìo„÷»ß&ƒöSD€Æ`þ+dnEÍÛÌÍ­Îvîˆ/Îähî‹üQ³EhãºÆ°´VÈÁ’’õÏD‹u5ŽT’Ä!ªj - f¥{+m©ÛÁôîú÷ëïxO"+ZOt†ßWÕ–à %(èèg¾OðÕ¢c‡¦H?ß÷‚uèß‹¥Oàù,›%‡ûÂX;ÛD…0]ÒxîíïWB#±á€bpÁ@äè€Å;áïã©T¦`ûmþü…£<ªêñïú¡ÀâÁÈ^‡Ç áþéþsc}¥ô&yBµ3ÜùZºC¸ù1·È)Ë‚þuø7+º.¦Ê Ý%{™_vÇ„Úsë Ÿû«@ó¨3ï<)˜põýòÅñpÛ>n3AÍh™ƒäiAû ´1.¹N$=èÏ#È©³¤ õVÊ…~‘hT1I%“„CŠ5xhìßiú!û¼~)¸^Éó.ð޷𛊲|lö3í®"ó8£1uÁXßþ–?ê,>´ÃçÏÏaÊydËô -!•%E“?œÎ$ÒMúk›ÄUÞõpê§ÞEÎÙ`ÙMHlÈ}²oÀžÓÀÄapïŽà•áD@7Iò¸¯ ~Q³{èhÏÕ¦£‹xÖÚk5r¢!LþØ:S2Ë5YLç®n‹=ÁZKñdwc¯ @'ÑLUؽ€~ÜÑÅXÿ$z Æ'Ü9Ò ý™ï¸jÈUÀKü•ƒ+ð‚ ºS JÉÂäO¬¥ŸLÄn¯ð€9ÈçΊg‘‘ãûI/ÑFk Ð_ +ÏE¢kXý÷- ~YÃqøÞ15žww¨»º˜eçoMsç Þ$‡ŒE&ÐA«KgI@®h‰ÿãJ å¤¾¶²d÷ÿ:é舆EòhÄÙýЏÞÿ¯Æ]5t]Ýñ¢l»ÖŸ ä®ësŒÐ‰d€—ÉÿsX!²¿Öö¡¹3d£X+iîWâõDÙŽ!LþôÚTšhGKbѩ٪Z("õ<|~!–{§iììJü¿¿º)‘{‘Û]¼VÝîîlЋ¾öqçIl#‘û¿¥ÞOMXØ¢ÙyMf™,«e¶ÐÜRË @‹û»•D[É=‰gnVQe‹ÝÝï3‘ÿ UQhûQ_ø+€&ús™–âÓ l?1á-ùÝY?çÉýºÝ‘˜9Ù³ ¼?3y_6ªˆ'dCxäî+­¼5•¹÷wë™ô–¯$Ž–·Ræ¢ùx{ž¯f/#id!¾¹k[ X^{Gœ‹c ò¿!»senãí¯ÈR!svûÈ ÀElŒD'Eµÿ[È[¥£T x©ýĆ4Äê¨×öi[ îJwe€Ënƒû£ä6áÅðØ·}‚D2wFäôm¼ö9`"ìÝ™o{‰”37ø°´ W=üñ/ÃÈgËYmlß[JXëëljØõXûÖ_If?ן×ʢ‘±­¸5³mvÄÏ ™ˆõ'é½vÂÂ$¡-Õg‹t|W›o¹­™O†@‹ùw×(™ õ¥ˆD†ë^’Á¸+®“µ¨]ös>\&ûŽ÷.ï _41žÆr‚–ÆØø,rÇ´–D¼¼–˜[r+ ÞÝŒøNVÇ&Ø·Z^ „«žþx”vܲÃU,²öIÐf,;ÄNÀdyÁÁxp 6@×È9É.uñí¼’XvÊqI… ²YäQñ‚ôÖ 9/ù¨°Cþ*$%¨Ð›KY²´ïµªŸ8À,èŠÂÛ#X£»±fv™# à:R‹è™JšJø}8)ß{ãûÏ451¯$ž-ТýÓ+rd–<üÍeõÈ\ ÙP»mï,qPÆ :`á”’Á’‰÷sKó¥¤fû$¾#â\) ñ4³öÓ|pÃD[BÆ,É%)øó¬2ðt"ö8- ø}nu‚ò]…Å&ããK±qZùyëSË–E_…/«Äñ×tµ—šTÒMÜ9!ÄÑÖºR†³M Ïtù×Wr¼9³œ¡°}K[gɨèÎil]K®œFJ“/§ãß¼øuZ4ïNÉ-“Ôð‡çÔÔs¹…Ñ:RûOÔÿë?®”ìy÷ÿÃÞ[€I}-ëÞ«jàÜÝ]„ AƒK$$¸[pwww‚»»»»»»ܾ_­½ï>ûì³íÜ{îדû°ú™a¦»§é²·Þú÷ZUî-Ìx Ì(‹ÉBäNçJcï˜xýÿú ;™ÿ 9%ñžcÑÐÐMq±%¤ìèûÿŸXÅ]c­7\,ⲸšèàuõËŽÄE/iÿ}ŸÖ§õi}ZŸÖ§õi}ZŸÖÿí•Ø÷Çþ .ÜÜ5pû]69àPVs½ýÖþ/¬*.7ÕNr—ùÏ¿gGÖø°ü|Ô¾#ÜYwÊu”†Ò”ŠñªûÈs¿¡øcYUS„ ¶;5Yj€ȶÆåGú¸®”«ã¸*’LÂ#ý[yæ–¸ÉVšPæùöýþ¯ëK«sÝstP“ªnõÏ~*Üïñ….´ª:-.+e¢”Õ†ZQïI%ÙO˜Þ ¶WúÿÝ•'¥þ) e¬„@ÒÎRVJ¹ù®ñŸÙ}/¿èßñï8Í¥™µŸî“gRKº#×â/ñòÇ[å|wˆrn¼ûÑŸ ? …µ‹^—²ÝÅ’LRÇÅ—Lº]JSìžWãiY ©5ª–ТºDÞ¹¸R ßÏ;þÙ*ì aù¢nªë._êI¤éô¶“1’]Ë×ÖïÒeÔ¯õ‘tߥˆ¦RërA j ýAù^è}d€—?~ …ùo¯š.«+á¾swÝ)¤o%§fUëdgý,Ë,Ù O¤«ü¤Çä…LÖ)CC«h]mô_hi¯ù5&Ó7®³Ë^þ±f@´q9]j>¹Ü—H’CêY$çå²¼–2$È¡så+})÷$›ÆÑ‹Ä$äϧÏåsÍ­ßkc-^béSb§y2× JºJdúòä¸:’PßÉ{d>ŒôüÞõë Ýky‰ý·øÝÝ/ä)Z:)o¤œ¶ÃBjD¦±µ©vÖ–Zd8¬1¥,¹0~ðGX™]ã62G`߃²Wn¡ëëq_ö£ëºÊŸë;(öçY¹+¯ÐM$­ ź=ßÑŸµº6»éwúJÒJs4o Eû7V^××øÅ ‰ìïå#~“TïKrµþ?¯DÁûô+?;*ø®AdýïÜ\·[’è "üš?¿7¹Ëj<à™o·ßçg;'‚å´».óü ¡r[GRÁ‚Ìþ¶?ò¾s¿(¦£u«³Z̰º`ß@7oç\§ÊtY*³ý¹·çÒÚïøžGæ_#½É/¥†•Ý|ôa';lúÁ™"6&¦ž“øÅ)î»H¾Ø)qm~RÐ|‰àÿÿh•¤fOUÛGRéA,½ ›N÷çÁ7‘ó6#Á€ýá§ðôˆð¡ÍE¹Â0À øzj}æ;'¾!+¤Ò b§nûi)ô®¤Õ+Ò\'ê(I,¿ZØ¿³âù%\!ùV­oÓRßÿz„ïq÷Bìôã(üØ:Ä-’¡¾7Ähbâ‚d”u®”,£â9%‰“Óþü¤jÝÏßBú—<–Q VVQ-µZíùõ÷Ö·þÓùCî{bö8‘¿›ïÛd˜Ì¤®ýÍŸ‰Ÿ'l Ö.ã¹gžÆ×ïS„× dëvc]P÷ã)= >ð'ÿïáéôño5B6]#ùˆ™à¶ ( Y/…ûR?Ó‡È`˜uUæƒó3a¯[‰üÁ|í;ØßX€,CK/¹g¯„ÓÈäÉCøºu‹ÚMdä%Û%€ ZŸÔh#›Ú©Ðä0‚lDÍOÒœ)h‘ÿj}…õ ¸¤’U“«/ûsÀ6ñj t; 1]*‘Ñž méˆäãñ‚eØ<õÞ ì˜êÇNŽž'^¶ã%O%¬&¡*8öîð—ÖG0Èë$/¯ÞKD2ºŒÁèúX2*Ýän1DÞ:Šôvbg ÐØ ß©EÄïH>ôä‘×mÄzORÃz÷ó7÷‰ú=òˆkÝ„ü¯á‡$ÕsnI©OJ ù}ç6QZXïdžj6Yì øûPÛNn´&îÏð~ÛSí%¶à»%›4Fª |EÀû0šHwã÷ýt°ûOm*È:˜Ó}bbï#ìø z…fÈ·²€#[°˜„RÆWÑÀãÏ’¥mÇß!¢_`ÿë¥ößLÔD®µàù`7Éúäù—Àòš¾7ÂS í^ËÏ‘ðý{øÇ>pb=Ùð3-€ü!ñ|ëöB²ƒ1'‰¨fTI-<~˜ƒ[v÷~Îú IæûŒ±u•Ô'â§€ôóxÇ˹wQ…{ì¬Ë.p3œà‚Ä!ºÃêuôqLrƒöÖ?f'Þ¿éÉwš\³“ÿøþ¯Ñ¨Khí+i\¼@‹ëÉBvw#ñû„~ÂårüMbØúÕÔ‘æD¼íé߉í®J=ùàÂâýó€ïþ”¸0Æ d¼mÜ? Ü\CŽ˜EYL ½áyáFexåZ„ M¬dä–Rû—À…\?²Ö-ßË4†Ÿty Ü Û÷DþöhÀ:Ï×cýçn˜?a]qm.”o¼;ºî¢6Š,i¸o¯!/¬!¢>P¤U €Ùtšx ZÆ!F è<òn WQPh«‹ÿF!jŸˆuoXˆ·ß ïÏA#áù-d¢<&Œß$”{î ïpµ°N 6 㲟ò´…¬I¢Âø¶óJoù~ÿ æÝ•D0€ZÚXjøQRCo¹*.Q€åχÿÛìÆK’Êw'Ø‹± [Èã³@ÿÅò‹?×o}AOã å±[€ÏŸDÖ¿ŸóÔ÷|¹A¥d‹ªÛшÝHýÎ#ïð‚SRHÑvZV§"û<8r ©à]b \MwÎ;»òœÈ|‰üóáükñÜ…ò+ž=–¿ßçøk€ç¤št‹É [`ñër´•çYg]S ‚‰Ôff.æKÄPï#9á4¯Y]3á÷m¨ÓI ä —írŃ÷ØäîdØq(öÄwü_ëgyUƒ©íûæqßP$¹–Žß·!¿}Ãã3ÀŠ?Í€yëÏÄF€LC «ð%¼fj-©át™Ÿ RœŸçhµ9YQu3µÀ÷•?¡«ë6¹PMê‚í½¸Í&»­D¢õ Ûdt1ÏOòYÎï7<¿#·È»ù÷(gg‚û¡‰-¾þ 쿊h_ä'à\@_ù×Î]G§ÛÉ0e´þ "XGÙKLj”‹~*Êvê¢ë~*Ú)rÀ <Â*CË+‡$&Ù?;Õ`D=L¼ô ˜üy\JªÞ.Yë;ùAjHK©-]ÉáÃ}Èž¾ÏùV¼û<|f!>°^I*d²³üóÑ òy<ÁzÝÚä»éX6…V1{ µ‡øÿ<È8älÙè_c+ScƒȦá%pÚPõFqQ$¿”‘Fäù_á{ÐCü ‚TFW‘Ìì9“¯H³ T+‹BªêVl<‡ìpÝŸ·Nùóü¼ ËáÏìo1baæÂ—óøTß;ì<5…uÔ›%i±~àÎÄ r±\=W‚ú¦"ÑßEšâñMÐE~.€ümñÿ£~X3´c=0·ñî+/ÁÁ™èé1Ò‡G6º ˜·ïžç?!x zã»ÝC³ð¬üõDbè0Qp^hù3®ô&j­tÑÜ×M~ô=íúÞT<¿-ÞÛ/hÎ÷…XÉ&¼t"&Føyh[ü< µ¾GþHßü.ÏØ¬Îó76'c+²>;9´Úà$±2 }mGÆ­žøIK'y•¢ò98Pë ìë±[c±ÞÞã°ðl~ãá»ÍÐ@cd髜ü»„Ûòœ.dÃÝx´Í9I5sYøùÖ ¡7ùãv?ë§iÅR«ÞóºýÐÀþb5öB\#;\!wàgÃ/À¿»nUîdÞ·Eù6?Áïï®9^ѹ'ðÛTdšJ>´þï{A¼¡ }k~¶‰˜Ö!ºô×C‡ƒ!“‰…­Èøšù¬ñ³AÚxLê;fœõן‚©uXàäÏên¹¼¯­H·›Ú¿ÝXq¼¦ öŸˆµ&ø@óøy4’ïೈ—á<ž²=´æ‘úüfýŸl>ò]þ€ïüm|ròO!¦&àa†›x}›)ûÖ_?šîÒLþ°RÌ­vs@æ9¼§¥~ÆÏ&j˜¾³‹õ>^Äû\ºæÞæ2I6ñhuЬ®5±%ÕQ¤nÉsK€—ÐæbÏz¯Ê þ½æ{L%OXäQù<á¾éðˆ‰¾kÄèÚßvõmv›°Ü¬ÖŸ(*avÛ‘´¶”Äf ‘ᨶ‹þ"yå~`s!øî?ÍÀ¡X½¤ïúúy¡4Õoâi ¶½#g<&\"oLA7ê)v]†öÓaãIK¥¥wp¿¹nÙ~0Ž÷i×·»IM,ÚU~‚´#†—áý'[áÑÈLïíû?µ&CÖA'?’;;;Ñá I ë©§Îûî™Oðþ~†Ê0t³„×iå§Šì ö#éE¢a¹ ¨üÃ\—Ë/@ÂKøö:ßÙx,L ­ïq—Íl¯vûþ—…ò’÷{ˇe°vitQ_âÁ'£¿ú~.R þêœØüã+È׎¬a=¡zñw§ýœ¨§žœ’Pj}qÇ~mMuE\zj?›ó>ƪ5ˆX €wÄšáÙVX'³<~&ò@îË"E¨˜j£‡<³!±Ñ ·Fk àRÛåÞ=]ÌçÞ6 ÂH<`qAœß)õùOàS3¤y@åßiì‹÷?ÞO;j ų!ÇRì6|«Äc…±¢†î*¹¸g °µDB;mÁ‡Ä}_¤«C ]“{&K ¬þÌw\†Fsû^y;ÉÿsÁÁ«býÿ>×~Zì´8ögk¿ûÑÅç}Ÿñl’óK¼Üfû†ŸÚôήظ2ïw‚ÊV±ü8lšBÒáå 4³&Öè%2÷÷!+Æ•P<¾ é碕&ÔUuxU|ýæû^XÇáGV-MÔîÿ¿Ís_Jtßçýïé¼ßã6+^ð}LÇ"{k?c‹U4mÐ@8É(7]I|6|”¿îÀ}%Ñc:¹ìú‘çvsoOÏ ª€x+@ý he‰ÜCÓ›|?ùh#µl èü7çîPýnvG\H¼Ý®jîâßD«íÚ©‚'¬G²1ÈÜY.âëAzVF’3€úÏ‘áäЛàÿ|Bå˜[æòûë€WÑÞP4Дl1ùëã]ö Šõ„I¯AÔ¿k$†îp“]ô€ÊïàÍÉ‚¹])l´¶·–èï r?¯Oy&0Ù§‰ôóTÿ‰\fðN´ƒ6Ò9-hž&Ò×~šMÂÚá3ÞCž;‘Ûpþ5Fù5¯ýˆWڋΡô°$×É.‹«`ù#Ii×Õv‰yÏvÅö"˜6ÁOnï{ÞLç÷‰|ý$@¸ì䫿.¶ˆò.Gƒe¶çq2–ÌR|×;Œ\Á—º²Äý i¦áa3w=ÃÄ+ ÂëWû‰‡Sy…mS“/ [&õ'å1ºŽ¦Ó¤P°è 0ÞEtÝs7¾v›õÃrÆÔ¹dÄqrâFâÜ:¹.Á»ßãé/`oñ4µm 9çú»·’MËjQ½JÄw%öø}¢kÐÃ5 ­/¯#: ߈>.JD­#?‹^8]j°Õ®‹…l¾íÞõ*™é.¹î°¶å~Èeòõ€?@ ¯%‹5û à1¿RÑÚ5Îh~ävØÁ žs==Áã·ð—mxêÔ>]y ôXxEbJ¹O?þÓºí2q›é?Ù@}j½Ýæ!ÏVÉêÍ€ìð3mŽr[àgb¿Áºƒü'yþ×=«&ÑK<×úÂÓÛã' Ç…å–A¥ô%¿¿z&$„tåÜà@ ï¬ïWCWœ*`7RÝ÷ìz÷ ‰ªݯ ÕePà ï·„Ì=ÚϽ¿L\Œï±ý·ÄÅ“LòÚ}$ºˆí´éŸ‹xî>lü;Z ¯íÐhy½ï¯D/Ö7°šœp-‚ÉNÈ·`p~÷ V½Œ¤—ÑÃRÞcD}âVøÈ·=*N÷×·á½;¨ÿ‹’®¸_\yp°01‹¨Yé'å,òŸ˜löýÏ’ë ¼à)™qŸDól¢]:Ͻ°å4,x¶;‚ç?%’§òþ—Ï4³ÿÔ÷ ¿^q©&á×ÝÀ7»<ë×€ÝÜ“ªþ“.Û1€øYå'n$ÞWãÿá4•æ€ÜÂâgùËÔ=kýÕï¥2ßå &]CKh8@JwVEOú=žtñmŒøšçyÓˆ ›Ú n4‘ï]¨ÛòûØ}]|¢¼kK&³îàʼn…àãžs†:تÜDË"ÏoÂpªÝ¢hµî©ëÑkt¯Ñ©~sê:éç*Z쿬/e—Ë麹¡pÓ8ªpSû<×fÿÎ%#,Ǫkø}’ôÆÎíýŒèöTÃà„±|ÝÜ®<Ûï}Y…—4Dw;ñø¤0ýxšMÏ“õZë)^å$ž•ÄÔ®×ýh±ÿj½q\z*º7¼o›}d½Ûï’ ¶âãë¸o+𰉝M¼jãíõ©’F‘÷Öù öiÐD<`°OOâE7‰¢ŒZZ€-Òåøƒhi^{4:ý î·%ÐBÿÕºâj¸Øn¸ë™çOç¶@Žøkûïý•ü!¼ïžTÿòŒ*h¡ÿŽ—ò0½‘~2È$Ÿî§§uæ“%ö’5ž"olýNifýFcè1©¡õtˆtqÝå@ ýW+%>‡|Kü¬Ã½xûlÜÛïÙäwÍìBc¹ òó¥×P=’LðÁ+.·›h‘ÿfÝ‘~t@ÿ%äµÖH¾Ï÷º]ÁûÞI68€6F »ÔØÚcríÁž È“}±²ËÛôƒUøÂ]êÝÓ àFÏm†P ØÅ]i¥©|WZà¿Y'àã±ü®µá~çC;äØ'öÙà! éw8Lßš C>Œ‡ïó;\f€û½A„T6ÊÎ}ÝáÑ‹|¿ƒ.,–£Ÿ%h#Ì?œ¾“/A¼Ó<ú‚{>H´ñ#þ!ÐÿÍ:þ=pNbñ¢ZÆ¢z_^ŒÕw!ç6Ð`*è6¼‚fÓ·à_M†?çB~ûì0¼®•)pÛ ¹-–äU¢ø³`µ’¦…æÕVZEIç@‹û_ÖZ—ݵtä–VÀnå5;^zÌ_ ˜)v.æMó³»wí'Äáõs‰‘ßaù6ë#‘~»™›]'š×É®•áþÔi#í¡%u3Ò¯Õýz=XÍ~ûÓjí*¹b®²ÔÖžÔè)õ®ÜÅ·zNsÕïn^†&ÆùOs>×5xIÍ\éµ:¾%ÇÑÅF2 U[‰ÿÅ|¿%ßéÏúèJëè@í£TƒªÊª`Ù ¸+é:¹xRœIÍ]o’å-þ×cóÍøþDä·óÏ$œÚ¾»¿Î ^Æâ÷-þÊØ>0ñšßég§ÆOID £Yˆ§®z\«ê=-!½©üçZØ¿³jãÿ¹\+×Îr„KªvlöœîOñ×½V“Ùvðo ˧“´³.Ó©ú=1ó½ õ{=OJr­HLlðó®vH,ͼýg+Õùxdiìú¹ w,¸ÉÃ]Æö;ñ‰ÎrÚ5uuñ•›.±­OëÓú´>­OëÓúk僥…ïåƒáÖu+\ù\JºÊ® )5õÞÿK+£‹C-ŸZ »Ãu°~›}Ö.lý»Ì¾ÛÇ dÏ/õüü¯~ÓÿC+3’äDæÌ&2¯rå©ùZ c~÷Èõ’»ÒQÎÈ:9,15¾N”g$õýžâŽÇÿlÅvy]gWÔ}…Ÿ—psð€üÒˆ—¸:h¤ƒtð³M£s˪‰õ¸¶ÔÈúVJÈlþΦA÷Ž¿ÿ|%ÆÏ¿v9¤¯4‘arO.IV9.}¨h'QOr‘t¶FÕHš\‹éךZËꯚ¯ou»D“Y®šû£"Á·DxZ7{×—zUj'ݨG¥Œ.—…®£Ìtûä{m£å´¯–Яô…|¦5•æÔŠÚG«sß©MüÇœ‚aSþùi厈îòçV_Ê É¬!5«,”ón¶Þ”vØ?¢¦Ñ‚ú»ØÞŽhúDRi>M¤µô¢$–ÞDMðéôøï®–ø}0n¯DФ[_"Óe‰J”'Ñ~wD$]õKnE43ψªïå+ÿ©ùJ ­¹4Hkè\¾·”|DÁkD=p;«îJN‚GÐtúXæÈmIêwóÇj1IŒnžóœ¯õ£\æ¾Äý3¿+$®fÑﵚöԉ襬 $™ã±Š“ßò!Wù('}gÅþÖÍá…ü.e¹\•"ØýR¾&:²àûª¯$µÖ÷óî ÿ BC0Ñ&ƒD Ú%_J~^ñq°¢ç.é‰õ‡²C¦Ë&ìþÈ÷kÙ%›å–ÞJŽÁ×&¹"§¸¥×ðº…{rBëòÄ-ùdì¦%ÁÁ¦WŸºRDý!ÐÂýËõ39/#ùý læ=¾~Pæûî6÷ñ„eþìòA™'ëAD;ÃùTŠƒyûø÷ÙÙ¸ß}× ëù–U»jU-¬et´ÖÓV²L îŸtÇóaÿ•î¼L“ÜúiÖÊlY û%V¶Î5çüîÇcØx7y±¾†ñýbcém¼ã…$!éM‹±“^!AÆôxE^žSS~…K” ´ˆÿtÕ÷WòKºœXÿ ƒÈÞäûaï–Óþ„ðP™$Ûå±a=.wKCMAfp†p ¤°ýáCo%—:P¢Š~aó¹熄”ì™ׯÔm‰\WÉŸ¼)Ѱà™åû:?†á¿Cþ%H~[È5|â–tç™iÉó×ùýƒŸ‡Ü_œ—L±Q^“ré7üö£VâCÊ»Àv|øÇ«€Ÿg¾Ýu’dÚ䛃¯Ÿ!ú—"Ç{P}¼\”‰È»Ûïz|ƒ'„Ð òÌ…UÛÛø V~žNà9ßâïÇñíü}:ØA½Ãk&ÔðÂr$XVEõyW%Ý<¾’êi¤ïHüOçkßÅ~,xT¦øF¶'ô(°LžHiêF’ nã1õ¬ïþF €‰g}w¸]bç©.ÊJyÎ_¤ÖÁð¡û®l0¬ bSá•qÅ$/Èý‰cߥܬçý=$ÜŠý‡Ê öÙN§axÆ9ž]ÙUÅ÷mFÀu¢b‹Ÿx@?ƒ/ÝAêù~úED¿—rñ2HïËe²@p»6P†ZÜ%•²j=ÖaÇ®2œ$3ü¶Ø“íx´õ2<àOxÞ$#|òÒÒ ‚%B¡mhá¾ü{‹N–;_h&âÿ=±ðÞô;\(º+ì"Zäÿ´RÃöK»Û£½‚Çn‘™Ò ;O¦ò@Üæ¾%Ü;Qâÿãxdò,‘ ò#ÏŒ º¿ÎÀæòÌÄø\l~ ûÛD”ï4™FÖ 0†äÂîR/MC*êgtÕýyõ›¾wÝü~ ¾Þ‹oÕ–SÝì»Ý^bÃ:ò¥~ŽVšj ,=•ªï3rÀ3Ÿƒ4%–¾‚ö^ƒzùáùñ‘$Z ]Ô‚)•uEÑ@ð¨ˆòã‹¥Üï.ŠZë[p¿£qfg_€ Ce„?çuž{öKgî© yþ~$¿"•`È‘õ¦ïÿÿ MŒÏô;%SbùœÔBõg´P\sSS†䀬ÁbB.Ïø€`Öµö1ÒĦ®ûBCb§®d€Äüy? g–[ç¶FÜ=Å–’ù6R ^'"¨uPŸMlœA‡Š>möO|-DPö“]£Ás Mˆ¥eÔ™íþl+‘ǾÚî1¸ÿ’Øþ‚ uOÉ‘`ð­A°­Ò<î§ΕÏtÈø³ïf¼Ùgо—cT=_\ þûùøˆŠö–㉈‘Ï4’VöÒ‡BCVU„Õù°Æ´Á`7d—Ê•p¯]ÙH€GDj«f‚\×¥>Ôß Þ[G¯‰þË:¥Ý@÷ñþÜ^à v}à‘Ÿv‘кcQ!?¼%¢ÁÎve쇡"jÁoÙu@0èÿ‘øoíâñ÷ÄΫÜ÷½«W‹M»< ~!ãÛé¿Ò\àŸ—ˆ€]¾æYïç=Î#–yîß©wúN©5‰‡ÓȾY—ýwðÅwzƒ…‚Ä!t¾ô@S›ÑDý.FQë ÏOèJ.h§­u‘ p=œÃÏzÜNT÷Öíz øm] fËòß\Ø]wl¹¸‰N¬‹}KɃěýi-hⱟö°Þ4y?רàÛx^c­ï—}«gÐк›¿MhÝÇëB£=µ¿äðµñ\î[·Ú½ùÀ`£|'Écc¤?lgœïX<®?ËwñµÎ€6£—Ô@úeÈvo8(!‰þk¾+Ð|þ ¥ ôšïúŒ(XBxWâ¨]=y"Iµƒ6ÔAp2Ú\GèOÚT[ ÆGþoxg'°Ó>²Õg ÿXâ¶_ ÐBoßnV^‹lòÓ–H6$³ÏwÈ Û|÷§Èþmm’(zŒû­:Þåû'ÌæñÓhò´œ ÒÀcR¥$–ÐEÚ@{PúÒðÞ±nQ;„žDeÛÜ5Пùo/•átãÌXý^$[Šõ­ãñR)C<›»ƒ¬q(Ø‚t§©.ÃwK>2þQ¥`'Þ³„¯:øÍ"`.5°hBì_$,A&P \&ä¾[nžÝ´k„Õí¼û´Ð‡¯ìün5þ^Þ¹ñœÜNòÈzà°ïñh^0‚ØYAæ9[à„¡á5{Ñç(br°ÿ ¸×ÛûÒfrÄùY‹j#-§ƒ5ºÖs+I›€Éß ÃO+êÄ;n@µo.NòópiMmßì_ÕSصq’M—ï¤-·©àÖ,vÎ3\~Àúa7› ²Û÷]F’”l_·úŽ·x™­n7ß›ï6+ç¨$ѼdR«ù+)gùÉ®ŽÇ¥8ONÜÇ=Éôt§an#þóÞ¦H$´Ó½ÉçñúåüV t‘n¾¡ßaü …ïåp ûÀg¦`ï‹DHICþœ„äC‰†øÉMb¡0yo/¨¿ŠW’LæµÏ’[­7Ä9¾ž“WÂKàúï¡ ÏŠ Ö—-Þ=Ú_¯; GæR—*w«ïºC¶¡~"äÞ> 0„ÛŠfl*Ü$l;„gÚÄ£¾{Ð;0õ9¾ôyÇH_ô8ÉOÉXè;Ì%Å®¡¤RÀä¿Dõ×V²™·PÇìý]ÃKWb«ƒ @-"ÙØívßÿîO'@mÀ!´4†X°óÏ aMãÑJ-2ÿH©î¯ü3xä‘þ!õz5ù· Ã£~FÖN:^É„oeh;àÞµ3 ’G·“µöa‹õhÀlzÐ×»}wwc†G‘ÙN¶Ú¤›«0¥“Dõøéç{¥Ú“m¾Gð:,þÚ÷½"áô¹1 ¾¿ÐwD²)A¨ÞùóÁ{Å>3{ˆ.rúÝdY‰ÿnn"ï⎟\²Æ[zŸŸs¿X¯Ã×Mô±†œ°Ùwuù26 /NÅÒƒñú޾ÛQ<`¢gKkñú[Ò”ì·AlªØMr‹uÓ…Æáï}GÅØþ4:zËs¾è§!vÞÕz¾Ø„æ HnVù†m¤ž”DÖÅxìN¾ßò}pU*ú¹'«ð†–Xµ±ïÒŸ~ESåg)Œ¶FKQ÷T‡PzçªÂ€Ã€Í›‘þ8Þ¿‹Ÿã{š˜| `úc±ß6±iðKåºÛçvJUî‰F*ÊþšÀ@˜âä‰ üd¿5Ä?JHqÉí»€ïàyÃ@‡ Ø;¤&Öâš<–`òòéó€Ê?ÐÅÖñso~óS¾Öû®í}õÓÉ݈„Exw×εŪÅ}„Lò•$ ¾—ôRŠx˜(Yñ˜QÈþ‘Èúì ‚t•rÈ_-Œ!\"‚D­J¶«e637°Pç’V»£®!ïnˆflmj¯uzt¤Ö¯M‰‚æRÇõwí‘ðg©>*K^¤ÚM•JŠù.aµxþXSZI$툠jè± Ï™D&µî˜ÆÎ;ÛÐß*¼£¾¼t•*¿#Øç~…À§ÂXؘËed±¹vÓá¾K‘©5?mñ3ï¸é®ò'ã¹e`6/Ä®‡4𳳲ɷØz±‘À_ûéA†l…gtóŸD¡Ú¿Sø æééÖüúÏ®©ËìZ!uPl,ïôxµ„÷ž LX‡döI°M?›V¾°½½D@ùàz“¦sŸMÅÞ aå)¹t$ì®,•”u]cD±Ú#Âç°£ÓpŒ‹ å^m!^ð€ $Ð×ÿZº ø@|2×Zxýplzšwxù+SÙ­€„cÈéGÈæ·@¿Rxs4Qi¶ùÏ>và-ÜcWF4/z"g}½8í5CK½ä…ûÒOC¾ {°«Ì7Ð÷ªŽ†ï? pwx÷‹ñáyÄÿ\Þï¼z¡¿Ê5ƒHªwò}_ÊI¿ª56¶®w!tæÖS<7©DäÞþDýYbܺ?Î÷14‡7VŽ»e~†ÒXpèºàÜ\ßÙû úè…îvøIˆû%Ž~bFÄV“%ŽðŠG¸ÿ¡„‘<.°ó/{æâb…î°g$÷ñ~ëåû¯]…ýâãüܯêxrd±IÇkÈæ 9«ŽÑ’Ag4)>ý˜ç,'n£±¾{Üy`h²ÎÓ™h‰¯ü4¹[èè)·7Uòºö–ßÁ?“ƒCã‰ÈËxô l=•wøšw7ÝOšëëÖd³`_4a3-î¿áô©”ЮZCßÀœ:!áóü¸}~ÏØX4pÆ?¯‰ ¯Éy»}Gµ·~ ­`Ñ»ª‹ç:¸–Öï[÷ƒÓþ$ž¿ã5æ’KGóݦ@¾æ&z]Òá!Çy]àà"âz­,ößréÝ!·À_÷±kõcÀæÖ|®ðügxìt°™l:ˆM¶/Jj%Ó¹ ^)qš^“è3þþ.Ø~{Á!Ž¢«¨ú™†×¸YOúÏX7`}Û¸…ÿ£A E÷ë )ïÎ;›oXÓ¿¿þzÿ8±]¬»¨Qoù^˜SðíU{ÐwÁkGì¶ÍÂ:s_5pa·Ÿo{dfùéAãÉòVéªÆÊjUxRn½L\}ÏkDE Y¥8Ü;x¬dÒÏÅpoÝüx9\õ[ìµÅÏó½D&XBt6ÛZ°/Yp èBŽœæû"[‡d›<=,à úùs!WÅÎC¾“úƒV׿šGkKtks·‘ÀÏ}þvÅ–ñ®°s’T-Ó=“Ø`ùLrT4~3RµýÙ®¯ ]?ÿyØ ¸^ô1?KUÔ™(H\Lõú¡—MÄ~"¦»Åº¾'Іäû]’C*j{}‹ß—ünP Åþ«µÙeq¨è?€ØÖå~!Þ#Ç¿’õþ3Ûé3—Ê  °€ï=ð„ñXÜjÀC AGOÐÁ®ûެïc\Mh†TÓ2ºG²ë*¡ÙºDHóŸh¡ÿj…Ûÿ;Tæz³…|nÛ¤æqÜÆÃj¡›D»]õý |ø KZd4ƒù÷Áòã¨p~ãñdÈ7 |Zâ>­ö×Êà`E-’i˜`+Éå4õÿO#=¨«¹ö¼û¡~Jãhô°ÌϨµ¹7Cüü³.x|[doÄ÷hÅ:žÆúSýU¿iÄÅ8â{žŸ‘òñòŠˆ²3‚NïÂ"¨] È©S´¯6–ÒîM …þ«SÀ‚g¹IØ|˜¿ö1Ø[¹3Ù®/1 ,†‡Û´ãÆÈÞŒ o±aŸh­FOý‘Ÿ=“çöð3@¦ðó"âaÚ»‡$£F~N$ÕÕVºÀUpé‚‘ýS€€ß¹×.!¨? Éæøë—m¤!ž\Çãÿ*? &^ÞÐOîëc8w ÌœæóàFbÄ® Ž ~&¡•õ¾Vì‹>-ë§J*EˆÿŸŒü‰ƒ‘ü¹¤1µXGøÜ$݃<¶ÿ§1Òñ6¶ù§ÖÛ¼–®_4çë/‚1ÝF‹yl9zZ鯈ŽôÐ_—áÓyü3N8?ù¥fÖ5®Ž‹Œä/-Å`@—¤ 5úBÿyUS©ˆ÷OÆKá@­¼}mþÕH©Ï¿6 fÖ]Fö»íwœ1/€†ãü¼‹¥ðŸbg>×%øÀjÄŸ´†Ò[b½Ö»–.F0’?»TsM©ÒÁúçâÁÓñ_;³©vSó×sø©=y|%(·‹ûî"ÿ81ž¥há8Ø9ˆÛvÎyri4ªd›{L~—ÌÚU£ o@À)n(ÿg ¥þBJÁGVøùo$†&¤b ÒùøÂb¿+þÞnó ÿ‡ŠöyA<@¤j;ÞQï—ðjûÆú˜9‰ÄÏ%ö·]¢6 ÉÎÆFú´èa”ëh‘ÿÓÚﺸ£®:²(Õj _9/wü¾·Yþ³±¡H5‹¯¾ÄÄ[8â+¼;ÖýBÃÁƒô%Ñþ o9ãçAÏAþ$HûÈãÃ;*‹Û—Ó.DÀKYé·ëçﯮ®·Æ;Ë F=Å`Íœ ÁtòØtâ}ˆ¯y‡ ý‰ªƒê¶„„ᆥ¶MŠ·Äâ§H}Ÿ™é'¾’lÜ{ƒØ¡ùa>E´®þB,„ÿ¯´¸ÿeÕpe\X)€¥c"wQ* ¯4¢’­~êGé#˜ƒmmJfz §ðý’X­'„í€ ƒ¤výà–Ÿ‰d{#OH$tyŸèˆ¬u ÒÏghì ð:7Ðâþ—UÝ•pñ€l¼Ïß‘æ.ÒLGÞu~ÄXØÀx~Z&ÑHxX]mFv áQ½)>`“N¢àñå°¿’¶ƒl¸•êwä¯Yà¾t—.×Ao¤§hqÿÎ*ê’¸9î8ùù²¿¾ù;ˆ¿8í¯Šw ¶‚bëül˗𹎚i“ã)‰@Œ"j“í¢ëA¿'ð<9bòÛyéR Li€×wщpàþdš]öï¬Ü.+ëjÁP>S;Ç;Çòó:—P''Ÿ‡×mhà”Gþ‚àä¬6$µ6AÊHÈM#è²ã"a-øþ<݆ý+à'W\1÷c Eý+µ++]îwf÷s›êG, VœDkaãZúvÞ&—$–D®ºIÃlc’’ò›íúΧ4·¾“Pú‚×é¥Cˆ‘Z_óiU;,f>ÿ£õ­;ájJtdJ£_`ùšM{€Ý‰õW­‰ yµ:R¼Ó‹is îOÔõZOëb=® ©ôRrïfÍ¥•°ö䯩?êB퉎ꡱ˜ºË«Þÿheuƒ]Õ$A]‚ëU} á‚N!wj=£7ùÛaÚçU!îÐ^ÚXé´÷P‚ÓUŸ¿¿ÊP þ(3$rw‡¯5é~БäÄê:mÔíBúÙ/³ô„VZT1¨žÆ+ÁÒèk­=¨>±A»¡ÚR'é]C„ •êï_®ô.ûèH$×ÒáDrjrÝ 8LQb!›~Ï÷qZ¼»’ÛJKh~éä'ÝÍ ×ÒdÄ<Ú¦³äLlT"†êêzYháþ­•­po]|* S2ÇgµjX¯­öÆ««÷£ÉäSÁþCR[§!gœ KÔü¿Â”vJNðn$¶_¡+u¾†ZÌß^„WÕ‘_$¸\ïþ׫ ¥—ûB"À—¨ -h<°@—bÓ™ ^lÿɤÉbJ) O‡Ĥ¾9¨!ƒâ„˜´¼ðƒts}Ü P%ÐRýwV÷;çæ¹‰.›äÕ„AYƒ2ÍéYÍt>W^&»un™kçÆºn©kJhi/¡É˜´pÐôÒÐ}ïJ¹ŸƒåÄ£µ~s­© z ‹Zîyñ{2'½M,8½Š~Úº .¼±4ܹƒ;îbJiQ¹@e_OÊJo·ÚÕt]&j½¢å{ýäRr+ƒ ƒÝT·Åe’ð2Ýr =;ru_»X. rNÀbíœh­“«Ë3ŠÀ)ƒ÷´Ÿw5FÎ﨑ªR!ô¡NŠé’¹\àd*ßé?¬¡˜kîZÁsÀ¢“¹ÂX½Ì?™ðG]5mFž+ïÿÍý1ð€àÞÛìÓú´>­OëÓú´>­ÿó•P¾— ˜ÐýêšS†õØ\¨¯þ “îþÝ•YS»8.­K»­ó­ÄOß¹5놺™n€$Ò½RM"JMÙè À úMÿ­ÜX:‹Ë«ÍÀ÷ Xú€³ø `ƒ‡$•`µOw­«MUM¯çåž”—<3/µÁ}Ù|‹üT2?»žîkæº)îšänºÊn¡-®mu€–Bîô[‡kC£14›®“¦î<$[ ø?Zi©c’¹—îwY-ý$ž®”ß%ª6‘L.² v?Ê/ú½ÆÓçrP¬«UÍ¡µø7±fךšI§¹vøÀ«÷ù¬œTwéÜ^·î¢Ñ4Šÿ|« ?¥Òß@»….—&ÕºšUséUß#Û:%á¾V³è-{‰‚o‚E—»ÿî*…ìÝjRmà!Y,§ÄéI¢95²V“ærÚuÓã2X3ëw]­Ø9.$¥FÕë’L;j~ ©'ÑbÞ?–Åf…]m7ÛŸ– ":-^VßInlœHçJc;ªN[  $M¢÷üy—]…ˆ°©ðÍ´‘&ÇcθndÈ?Òjõ]%¹.Wä¨<—øú…ÚDûÏðÿíC×Ë`¹áâj2¤O¥5…¦ô}Àð!yî+±{£j;í¡ßè^+í°ýC¬ ®¼K㊺Èþ\Û æ%' Nù¾îÏe ‘]ÇH¹/賂$ïóNñìKr^BèCôQšœØI+è¢kd.:ýcDA:lÕÄõp$¼¾”7rRnÁmìÌæ{<Àz\ß#"ìŒß y(õ™ïëw‡`S>G—ä±d Õ~Ç_M.q¥L1ðý.ÿÕJça©.ÑMoÉSßç톄ÒK²EÖË]Yã»ä¬µù²ŽßckKd7Þÿ œ“køIC¨­Éñõ£ü&G]ù%ö½þÛe}‰ËÃk»ËR,zÉíÔ×T9ú…æf} f¡‘WòAæJ6Ɇ§¿ÂGâ›ü½14ˆ a§#Á’k%"¨½¬Äoι¤ÁüšhV|´:ìî•›F¾;ïÏ¿­ò'È9y''|_<ësT.`ûŸ¥,È`gb£Áû®“ÿîIbî A>tM+k­O&èÀï¹å;—"ç‚Ú.>‘?ÀÅ–P2 ‰O‚w!Ôú œ–Ãr‡؇Í#ù-üý$øWycr¯#;>“'häQSˆ ø‚\pAÒ“óó[ä/„ï„’tè¸J ý»«<5]^wù»’ÝN ç{¿ d~}ï_*#‰ñ°œ ý+ÙŒ´Ýù9‘î ?FàvÞŸM®¹á¿ñ÷=袔–ÁÊÑškE2âj<¬>µcp[¹±K3wÕ¥“‚²{Ÿ•½`ßußl(I÷È1ý£•ŒÈÌ辑YXÿ%R\"îøsßljõ—¾#Â4¢(òÏ@òžxÂMXpo7J^'ïÑÁC¿WXàþªï¹ï0¿ß!‚"k(½MNÌ¡¿Â–»’.u0cCÁåDî¾ë$/]Ú™–å~ïó,2×bßü ‘½˜<°Ÿ¸@ì_‚ë^—.RÉÙéø«ò% 2ø‚ÄÒ/Áþ }ÌÏûÄöÞáñkDQ&­§uô®ûÉ}ë «¹h9¨Óû }>¸ŒÍü8‚§[׺aÒ l€ùÙyíu2Éw¢™Õ¾ÿñ i(Õ]i§éðø DÌ5PïŒ$…'Ãæ×á 65Á²‚~NMíTO¿—:D[€w~ù•‡¼œÚå•2à׿ÿͦ^æ';ѵ¬Ë÷{"~:?;|ͬ’jRAºaÝ×ø€Í²^ÖÿãY0!Þ`}@.!}hrÀGɬ´1È8ÆõÆúûbàV"r–ûA!w¤°Ý߉^»æ1Ä÷Ä{/ŸÃfà/{'Üø˜ÌóÝ ­oÄEj„ë €õ}€ô‘ôs|â=žsŠ "£æý ÁÊjLòA3)'áÂÁãÊH—Ös%1ïuw†xµ®¯—¦ö¿é'¾Íô§z¶ƒýÖ{±ï‘i5¿u29Œ/ó›íÿž€ôû%¬7®ÚÉÑ8p!›WP P+·×ÂäÉZÚZº9)ƒE | örõ%Š|Ç߈|Ïxÿâ¯ju%ØU#hf:Ø œÁªG‰ÙøÉYØþc,üÈ÷¹9CŽX‹†¢Ã‰“iµþ@ñ±x)-GÝ\EGépm€.Š’•æ n®@ ãËóyëNðÞ­OÃV¬ÿš:oZ¸€ý'‹íè>€.¬{Ín³°ÿAPñ1Ï¿†Ýo¢·èjç^žÉPã>Ñn=¿ßü&r#K2_3í¥¿øY¯¤º–fÁ LBÅWÓ •4T*6Ûn%¥v~ý6߉#‘áýZXá,dê¦Íõ}Îóüpëjÿ…ÖES·‘ÿ#~ ŸÙBEÓÄRO_“ùò«eÀÏAÁš:V;ê¯h>Ð+36èèlvG ãç]À¯åŽÏ“áxýYÍ&YlÄó»urZBØœˆ‹°Üúô‘–È{x@Îß #Ü/é4>å¹+@†þ\ÑךÙO‚é ƒ© ó¼üÖfS"ý70ÔÊšKcq{É{ßN–ÛNÁæçñ¡\òçó}!y_õzy:X§ó—ÄÂdÍïñük~ÔRtZÞ'÷Ṳ̂Çþ”T8""+Ù°$:È®9]ÜË_ܵuµ±Tä Âãj ¼`8>« òóNúS`Æ{&Jgßûµ>ÀÛ ÷]oí¾oô3<"$Ñ}ï·n’‡É÷$œîçµnûY?Q|O.(ÇWíà]CñAà±î°»å®ãË;|çúõÄz_i*í‘¶‘og€H ßÑ­>`œŸsËw…ß‹^n‚oÕó>r ÜO «KªCðö\0º šWécþD8Œg”DQÐÓT²æ-)BĬƒUÿfëT¯màÆÉ%_ÀäþmqËñäE ·Mo{L,œÀ†÷±Ú< ²?FÚmHµÉ;€¥1ÏHï~æ'Ý&7Òh[˜ÞA< ?ÚyÅ#¡àyke¤dÔÙøÿ"(…Z÷ÿÄ<’}åG{1ÑØ{|0Pk‚M`Ã2sýiý“0º»àô …w7Ù¾Èõ9ïÙºüìÁƒ-3ÌÂÓëÈ—Ô6vÊwµïtºŠÌV‘`<꬯ÿìt`D˜ïz~šŠG€«1‘?+•pzrMXôpÎýV^ðS±ßŒý"ûi`¢¿ÎsKÝã=oæ¾R›h°O|ΠGäúÔk‘¹˜wÁO‚X ©tïm'˃o—Á‹g’†Ϙ VZOÑDÕrþæÚµ¹bçä=ù3¼~¥¤{Àäßãr¸(`Øsä²I'Ö»¡ >åç^ÏÁ×áñ¿{d›á¯,#7ó'ÁûøÉ—‰Š“<Òo9.Mðò­2ŠÜ° )o‰®G mòoE»‘ñˆ×hçö9ÿë[¸Ãm \°“TàKÝS©(?H:øžÍ::äÖ¿÷9™¾5œg6Þ<†÷Þ{7†Ítå÷Ûü<ÉgòìÅ<=¾3¼lˆ•mÂÅ@?+p ÕR¾C‹&¿Müˆß¼Åòau¯R«h­Î8íâ¹]É#åÈîÖ•u7¶»‹}v¡‹žÄ¹uôÝå;~uCâždÄ»î¬móa†ú`ùêæg⎓¤’¯yŽÎñX‰-áy¬=ÏoƒO%÷µOdªƒÇøJ°/Œ3®²¤M_˜G$†ÃmÎÑi?»Ãæ6õ’Ž _Q¤èë¥ïîûyG–üR–ûú£ ëֈǚI'®uÊ&_¡àá0~‹ “ÜôS[ZH<ë…X—ˆhàdh݇>"i6m®g(½sõ@Àþn0q» ›XÇž­~ŠYzvlh­Íâ=ˆ“®øE~If¢‡R<ÚÙª ‡v~BeþmÁ_ÏÂó_¸$øAkÄc61Àº‹=óW×*io=XØÓÀé?ó¹ÂÈo]/oƒÐ7Áéþøì0_ÇÌÚòþßlŠÅxäJ†e«pË!Å%5øVErñý¼â3 ‡œ6)ïW?ñÈ:iUAV Ž@3ýäë)øDÊju¸ð´w@æâÀ€_»þšæ~xî"¤7k'LǺ€«üdëñÖ,L‰ªp¢£ ù¡””–" hK‰†ÍE~ãIKü\¥aDÇZ^)½î$kô›¤ò„ Y¯‘9kj·_Ûç’ã}/ûC`ô^¼~&ñ<÷¸›Çk;ù™(£aò3|ÿ§lòÆåÁªmy*ý†× Ãm#™ÐMGüg(÷5CöýhlñÞÐëÇÒØ õÁÌk· pÿû.·+즸|òR¬fCöê‚V“"¡ŸcûîØr9¨ðÖæ—“ :aùRÉwwXf"åþ*¹®1Ï‹ö˜AÅIüIG©-† Û)ùô[/6Q9“ lýo×ÿ¾uM°ç1,|\"ê*êüÞh"†ÞG#Ïav“}g'›l¼°Oª€Öçú˜¯”Tm6R Iö„Kwý6óìãÈ»û‡ÖÚ°‹²úÌw…·žhëAÛuÈßVb“»ZúêM‰ëå »U‚MýœªQpüwDÄT40ß÷@=Éû_Š]x¾T„x%™at_Qí%%#|_ÔÂó§=ÛÉ'ÇÈQÐOùšÜ·ÕsÆežg?Ä&Kž€Ï°¼)\YìeŸ]ÜáýöÅÊ@ƒ ¢øìjÿ¹‡õ?î÷µ¾Èµ‰÷jXú%lÿ[ßÏ,¶ZŸ_rJ^)(ê$>†ú×à ë±õt?qÑ_(¯‰j4m¥E´uì3•ï[rEwž9-ÚçàÁþMØù-;µ}‘s‘"ÿËçzl-©~ýÿ¤Kí@!?³oºïþoUnT*ŸûE«¹Ï®Š õP{°/;^ž‰÷þA²k-]¤½‘ÿ²u¸—x‹Œ8ìMä¥Ê^/Á#úK8"åÙb:˜6>§n(žþà\h)‚ ªð>gàñâ@âý®äQëõeÝ~Æú™Ÿ}Áø5 Sxoqt0²ÃççhM¡Wë½KE¨‰‡Øì—…DÀ ´j~¿Žœ¹T¾cÛu”µÄÅm¿/æ£+hñ]Xiå’¸~¾WÓBdìõ÷ñþâélx|8ÙO} ¦Ùt¸màà`b%±Ô|ZNWh~í¡Y5•n B:ÂmZÆZ^c—Ÿ»ü{åwMd'>àI«@–‡°‰+²Å´øÎ8`2× [Y'ß•¼ßáò=,§J5”£«‘¨/9a?v»ET_Ùciq'…¦%äÐtZL“ó|›úaŸ¯ÆSnˆèF´Q‚u©ø ›“z Ì'¿\æêðé'¶N¸/]'d·^_Óý¬çß±Þ ¾"³" ƒõ>^ì'œ_ƒÇmF¾ÐIoH< `Ÿþ…^=6ïážÏòvõÚ‡§áyv½ôªß)¿FìZO\} ÷ùê^A?¡Õz†ªV”Ÿ-º_¨ÁRÁXoóÞöøÏp®È}Ð*«^õs~Nâóù²yèOðð­ÄÁ? ÑiG´ñÈ-¥¢=€nBiX÷ÄÓÈ~¾Û9^Ó:ªÆ×“ün;%ûKlb&’–Ð/¤T E÷ë âº8ÛÅVòNvû.øÔ:þF¶§A»Ù¾»ý´³LØé; .»R–»Éȼˆlùܾe; #éb¿MÄD'‰4ÕDdXÒi?9<2ê¨`³ò5@!¿Ó/Ê!²^~­ k._¨]¼ä»ÛN†Ãàvá “ùm1q.</?EÜLG»ð£=|í@ÎûøA\MMžÏ:†#ú_ó?l‡!Ô ¨#Ñ]à&?ÿç$šìöztÚ B§ÖúÞÏr: ‡»ƒ$¡°Ý8Nkd ©ËáA½¨ƒ«}ÏÏ}èÃæ nåùKÑŠ}Ö—ÏO†&“kmòC*OVô0šèŸ ü'-øŸ×GW8„üVùåÒZ¶ºO¿c»„dÇñ‚ 0£ÆünØônÇ=÷ˆèxùð`…¿zrÁ‚ºÙŸzJžLŒ÷7Ãÿ¯I"tQ^7jWòAD]ë*»÷üÏ+št  –½É.!ÅA¿¯á–ZO<¬E+'‰üvÒ …Ó™ðž~âÃnžcuƒMO]à'€íGƒùé6h”8žÞñ;(ÃS%\G»µØrʵpE‚IG¬ürÓåvµ\Ø}u¬¼¤¶ýÏAz ~!ïð„©ðÙNhà,Á®…¶£ž»µ}²»ðÛ3Þw~>è'„ìBþHjW?#/¾‡O_@'¤öÓnZH‡º î»`"yãÒºNáöKý¬ç“~òÍ+âþ=¶Ûá;ÁŽ¥²ïŠu—PßX¿ÿ±¾ï÷a±¹ç6÷¤ROà¯vúýAÛü'aáEÖ6-±°¬È¬•µ¿nÓÂZÐýh±ÿ²²É+8@}wýs™¥>Ð)/û=OGà~½±vC*ÖØÜvÀôà6y6ÃÞW`÷‹±¾M9_†&fJNd5Ú°³ïAÔ|Ø<“†'&bk8Qzw<Ðbÿeå—뮞kçV»™äÁ>Øw$ÒŸ‡ÁÍÁ–­±fo*‚I~úûx?~8Èpˆ¬÷šèÈ÷YÉ_L'êmæÙ|¥7·Y¬‡öz"$´?9]¦˜H¯øNàC%…»h±ÿ²r‰Hf7Åå•äî÷ä1Ûÿ·‰wÙ—,ß ylþÙP/ySP -–Þ„]Ï#ã-xí¼dV"òŸ áÙýì¿õ¾“ögäœKã‘2huôPÌ ´ØY$¶dr“Ü.XLvxÿ:µ¿ÒÚ—M¿[ì'šuàÖ…/«÷Š]<ë(¶Ï?hÓoûYYÍü~"›¨|Y¾DæBZ„ü…ÌZ@ßÀŠºËû¯Ög’Ëe¡V¹ ¶)ˆc°`'dèLƇ´¶¦­Ÿðc'Æ Ö€nO$¦FƒÝG墑7§ñæÿ6k ¸±ÄODÚH.¼.oÑ×Kðt¨Ž€[î“îu …þ«uÛ}íÎHòÕ9dçw:OñûV쳌)H5Üë¾u!»-äþµDˆ]ÅŠ—¹|Ïɶëi=9/èGáNWxÕeDËarB>]¨qƒöKw/ÐBÿÕŠ.)]qé¨öíN¿Wñs"ö.•ì*n†—»+¶ÈÍ:àïÆÿí3³§TH‘ñ Y`Ÿïœ½í ç9ÃÉãð’Ã~?ès¾ß "itˆfàÖ±¼;èì„ïsÞ¥õ€¯¦§v‚k³ÄfMô¬>×ö2]D$¡æáo¬>EœÇ„çNõÓ’¦â¶/à$•À#ɨ?k%P ‹æ† _Ð\Á„ùüÇj ,_? ©ÂªýJ·ûë¢]©}ìêÿäZKNÏÄcqÕ&æ¦Õ\Z…ìžl³=T6;o š±)ßóüÙ©›Ä}= Kt·îÒÎ.(—^ ´¸ÿeUvß¹f.8nsjZb«œÈ³_N ¶ÏöÓá–û30ÑÕ®”Ô„ZB¿ÅOœ~=¯ñH<4f½lžö(?Cý: þw„÷Å*ôP~vÓ-îßYEÝ7n¤{ã¬Ö{D~·S`üU€mxw\¤>'< _ÃfâhS*¹ªZ‹z±¢öä·ãb§ÜÎbñàÀJn ýUàÛhõÈ—UK¡±&®½›haÿÎÊäâ¸n½þm…ûÛçW@ø°õoÈqù4$Ø·ëðøÜúµv×zøþ$|  õ½íi+¦{=ßM©9ø‹ƒhàOûÀïR)ì§²F”¼®l Eý+µËæ»­`ú+ÉK9‚ôÖÏ9£ÖÖbX9•¦àçKÈëgÔâÚA×sä';}9ò“3âk|½•6¡ò¹ƒÝ‰ Ãp`ÅgèëH°îŸÔý쾂їƒ§½ k?¢y¼ôßèOÄð×ZŠð±$Ö² Ä7Ú[7aSë@¿ã{&¬^› wßÇQçD IÐÑöúЮº$˜w†Kè*¸00<»Zn ›C®!¼÷|Äxn0Àºœ„Ö¤d³:Jïêp8ÀJ½®{üÔ„F>ÇU×£Z©ßó3i²·ä¯ è·üÁ{¥'>»¸“î£ÔÅËoŠÞkˆÆË Ò {8¸o(8ÀV}­ëƒŽÕÔÅúB¯ú~Gñ¾h+vÐqýQSûÙùy…Ýz6ÜæýוۥBåჹñé乺º–(ô©¨àá›eÔ@ËèçAI‚þ?öÞìª+É÷®ªCð ÁÝÝ5¸;<„àA‚†àîÁÝ=Hpw×àîîÜ-Àý­Õ=Ós¿Û·§§gžï¼¹Oöyxå¼çvÙ¿þµ÷ZU­›¿™=·å¼6—U³6øÌ4K8çÉm)‰ Uäÿ¨ Ê£ÿA)Áã.Hø‰ß±PÌÙ|²w/kŠ,9‘>=Wšj!··6(P<Ø]EÇ?Ò'%m&±…(NTÌäo¬²6¶`ÿôá:u‘Úð™ªöÞræ~ œ±X37Ö‡7wB'“íVhåWlµÐA³Àj[ * ¶øûœ@†À~ÛÉ+ ØÝl¡þKG©$We5\.»°ÕÚ¡^Êžá×Ë,z `àí¶ý¶ŸøBsÀ¾%RØvà#¥7±ðÊná;g`BÓa‚¥CãÿÏöòX¶I_i+¼¨—-bà»À7˜Å üej"úT6ø=4%üš—è ‘-×´dÇhÔ8ä™,Ç$šÆùJïŽrR_òûÊ`Z˜+ÍàÅ´„^—îRÁß5)))AÌÐdð¥|JOÉ-I£]¤9’, 9sžÿÕ£•Ô"+¦BâÖÒO:àõaËÉ%5(Q)«K6,ý7•züô-Ñ“OŠHm~ûåh€¿ÃšYñ‡R‘YëþÛ‘‘g³K¸]2%¥š4 Á}®þ<þ<þ<þ<þ<þ<þ<þÕ#¥d Ç—‚åç纒H«ëtRnù ®”4ا÷?zd’¸’G IqùNÜI¢K8Ov9+)´˜¾“Ô:CŸk'­¯#µŽ—D0¥ÔÁ>éÿ¡#“äÀÂä•Ì6dO!G®'Ï~Îá·ÖÓ:R¯Ò–Ý[Nk¤…`Å_H–`Ÿüû¨›­*Sä¨|­Ït¶ÑTzo&}¤«æµò¶ÁºQï7·––Õ\—§lVßfØZÅ«ªâ%䣊tF†õr@?ê%w£Ö¢mä=UÞKýÖ"X3ìï&Ô²&VŠÊ·›5@­ì±Æ×Ú’÷?T ´ãG¼ü¬TÓΞé1ìÿ›fµnºW3iýQ"}aspÜ ŸòÖØòYL«‹>¢¢©Ï­³¾5ꆀ.gÿõ#ØÞ_âê$¿ü¾Þк_Ÿh!Û¦…m½FSÑ‘ö«~oí¬¨¹=}Ï4³¹Yïõ-}Ês-²…µ´šUŠýá& ”!n;ÈsùÉw<­GtŸnÔ‡Ͼ¤il²ŽÕÙZÞ «—¶oÌííx¨¡ì„æ² DÂh ‘¥² ¼þG­E¿Óß?t”\ û~™¥4ƒ½ò{>^€}W5<þ}LÐbæzAÆAÊìDn¤¾ïït—±âV­ÄF¡Àà –Å¢hI>±P°Åú'JRŸ˜=+»´²¸ñ®ã½ën½^×Ol? Á.“ ÂÙb9ˆúzx}X;¯ïÐX}Ë^¼ÖÔè¡6xðƒÅמøTð:ÝüWŽtRAK.gu,ùžãÿÏý*žH6Asêm©·5&Ò—µ«šÍ’ã)à¶^ÔkxÎgä‚JVݾ¶îÖÙÚh4ÌnWÿÜá&xCþTHÃ!±ëÿsOOèM=§o±ýQ m°îK¯5ú¨íÈÿ׈·Ëñ.Qð€Wç±AÖÂúXe+éW½•ÓïCø½Ow–ŠÄÿ>I¬›‘Ö­à}¢[A¿CH}ƒßoà ûð¬Øý$‘ñ)þñE'JùÎ9·É“Oñ×õ¯þßÙÀŽýµ.9³D¿*ø•d•…2U>ÑR:ÎwAwk7¶êrÝ­§ÐÈ}] ³tßÙ|YwéT`X»ˆµßûÞw®3þAä ÜC[±A‚² `rtpÄu„D»!w"Tꛕò»Ü“ˆÚƒ³½ ¢ïÑ%¾;–[ã·—ßf óU¿–ÿrNÂׯóºÛ cT°ÒõϺOŒn®ÏC +Fþ«Œôn2Tx›£Ç¥«4 bÇ«tä”ôœ],M®Í|ƒ_ðàû°ž…¾{éy½Ë×ý¾Þ6|ý ÏŸæáº_žÔ7à_x»N^ùR“®£-%F¾FþŠ<2rÙXsù.æÂ’LËcI©åt²^Áÿ÷ƒnët&~îVz_ôÀfêDN$F+n&È9PÏíÿvû]W/Çù=%º8fžiMëÔFò‚ ä+íªáu˜T“!nŠ»¿C­§añéøò}ä_N~_ª£ñt—ý&öGûsu¨®ä§­ÈÛY[8ÛBô»éG›a‰®Ü[råA m,ü°ø÷^ Ÿ×ýTŽeBX&ȃïg‘Ÿ¥ ¼þ¤_H8ÿ-´6½l@knŸè=òÆabá z‰GXÑZûÙqíl <ñ†6“´Aïüð·#5z6™!ªùÁñID¸›òr‰æ{_­[ˆïËÚ“Ç:¿¢}9À­í¡%òž%RÞ~§É—É®?ön²Æ¿Û7.,¨©õ²Ö L¨HUrúÿ§¥:+"Qu„ĵ3ºLû"ía"`>ñàÀ4Ýî{?» Üíò{‡&èwšŒg®xÃ%u+¡ŸPGõû]ïâIWx¥‘ãÛ÷6ѦÊÙp X‹ w~ù·#=ÞŸN¾—Ò6Æï÷>ŒgïAâþX¸§ßÙ4ì—»õ|Ãý<¨×øö´tß®kòmÐhðÅDKzêB·+îÖŽ6R"÷hëIMɆØHS)ƒ-º?ÒK)Xé)+¿bÛ#xì2ü{Þ?Äw½ï;ÞÎÇÞ‡±¸Û:•Ü· Ü  ܯnýw¯ÅaA+x?>ÒÇ1×)!‚_)Zˆºù›gËm”•°Z6Ý2i-" øY0 ¶O-£äè÷oî;×Ï&Ï÷¡¾Œ÷/ý¶ã ñóã ÿXü¹±ñ ä»KîÛEHŠ­W‘"X0. ~àº]fBùì;ûŠªøGðÿlŸ[*ë+Ú(LÄK"ÈÅ%áûaì9¼ßïy§½a£uà¦!íÄ÷ÛãýÛɽ}/Ëæ<“‹8vu~êÄDúAÞÁv€„i°¹ërx˜8ÈÇoá-¹¯µÕ´Xä€Rd‚y~E]ë°"ÎÝÅøB\ÇÒ¤dñ(öožæÓúüëç3ž›ÖÚ÷Dž¢½ˆ‰5¼æ ´’öw‹'ÅÛsQÝÝÀÿw 0`_j0p3ˆÊ.øêéSª€Œ¾óë|Tƒ,Ѓj!=¬+¸GV˜ï|äGíž…Z.%ø´“ˆŸ†üý|ßÇmÈÛ—Šg£ï‚<Ì׺û¾±ÇÁ7!“-ÔÔz í$÷ŸÓçxA|ÛÆç¸ý0«þºò9¯HÆ¢ª®f@…6D_ ÊŸ6~VVÅw¨×^jvjµç¾ûÿ(m¥ÐÁ)m „±ÕpŸàD]ðŽÅhä#¼PM-•ý¦‘í;­ãg¥žFJÇ"!åe^¹/r»bû=pï¨~sÃ2À…Þw‚{§°° —Xé9Œå~}Žût$VnÂuÀâ´®6D çÆ1Þ¾ †¬îzØxìú?_§mÑÈu~rÓ?úÞ¾áȇ È‹MÑÜ|á2Üàk"ñ?…|ÔZ æs?ßJÞ› ÷]cÙaê¤õä€ú¸‘–ü öNd?‹o„3×AÎMK«>w¡¹+h&48S˜,8ÑÚ[+äIpyˆÿs¾ûËû×|U7Áïßž¡eÈí|•ß…hŸ„_¬EnšÉ¯Þ?–ñŽd6¶·ÜüˆüG@9·Ûéº>ÇWø=õÞ>e¯¾ªoñ—°‚8Ô­¼Í´ÌÉñþä}×±ª¾=Û_»ûˆ__à|¿Ñ¯‘sºY¹Ï'æG€ nŽë•w÷¸¢n?Àuä?é{ÅìÇænÇgü"¾¹]Òãùì³¼#[Š×'gë‘!;Û0}DùÓÈçROJø.§sðïç0õ ÚKhgA¾Bxþ\¤wPÇQ¹¾°C©{fåé¨éÖÀÚy­j_“5¦aq7-ϱžÇ¾{Ê9üÂõQ™‰ÇD #–ÁæYá…,?ø_¦‚سŠ|+ƒe$>>º- ,î:_ßã×ǰÚq-GÖŸ¦G}‡ëÓhÉ] h‰4uà€µÀýÏ~%v͈$µl”ï›áz¢Ç/æ¡©Shà)z}ª…ÉÅ-Ž~C ¼£—$”LRë´áŒ¡…î¾»Ó XNL[†?¨µ½æáÏ?ÛM¯2_ûi ͤy‘q Ù/Žf×d¾;R{42ÀWÍ®SÐ >qÈ?œØï;¨µ'\Oé øÚoàÌdH0¯–8’Yz ßLü»2Ôõÿx]Óæú.XýA…xú|£Þ^ÜWìsÝÃ+ñÛ8°¡qÑ³ŽŸ~Æo梻$0¿ÉTÊë@‰Füµ;Ÿ3œø_Kž\"Õ‚:á¬Ä‚5ô•ý"¤™D¤»Êv;ü¬‚T×¹x–Ï㓈šHÕA[iz-í=eqݦëzƒ;O£ áÀÐb[¢d½¿:vYSX[Þ™~´œ¿·5çšg}w‰CØ¿Nå¿'ŸQ=–ëÄùQl¹¯F6تiáô×ÕÝÁq«.ᯭ5§æÇ¿«iQ-@¼tæŸÚ‹o§ÐYS-«…ùë·`^u]Ôö’í·ƒ÷±á×ç´xu‰/3eï]{¦: kïâ,3#ÏußÅø$Ñïf]ÌÁ«+k-¯_!ÿ 0"<¦™­ƒÇ\'kö «"ynÍ>,ñw‡aùߨ{añœvÏ:Åç¹y¡ÐÞ%íôÕ@ý$Y  ht¬[ä']ïѬ–DÃè>_½/á¹õÈט¸®¢%ñ‚šøúPª$Å÷kØwöïäï]µ>µQ%ù¤½Äÿi>3¬ÅôóÏcàû‘ùHë{fÒtA–^dš¤—Q2oý„Ûï¯`}ÊÙM‚Ÿ®V›ñW 9ëW#Ï!º+€ÀD7Ñ÷¾ÞÄÊîÚàÞú5A‡ò¼rµ¯wñyKJ$ýÆÂOVó¾•~^l<Ë­Ÿ[|Ù*…e‡ïü7É[Ìõý¼Íùå²hã¿£³Ï3»é:R¿ ö K²åy£ÿÌ¢bW‡t…4Âü«@´¸jÔMD Pïî$6ææýÝD/®'Ö2ÃÑ _ýuÇM8ðmù ¤ê‚ü;9+סÝu{áû¼Ï!R÷óûô0É÷½­íãûŠfñëš¾´êdŠÇ2êGÉNn, #ÜFíçøô]0/<è—ŽšÏõO …¶øyê.׌‘|Á_"hw9Jþ;â{;»Þö+ü|‚;¾û}(Ûåg٬’«ˆémHõاѩá+Xhu-³*6Ïp“ÀÖÃ¥ÖøyZ7‰»šÒbƒáìkj¾é¼ï…Ÿ€åî·’äÁ_Ü”=rÄ_Ù™êg}Ÿ†±F77Åö è}ÕÛ¨Ÿf~ËO÷Fm‘-5öLd-91M¼Ç²n}ˆØR?Mã¼_庡Dz³ }<ߨ?| 21„Œ=d˜ìÇ#ïÁdÏù{Z'‰Ú;þ:ÿYPzÖÊ¿íÉß½…ï/æ“>’IkÚ7è¨ úq}b¯ŽõülñXüÕ9䆸IW·}'ç_ø>ù¶â«1àh—‰è) ºëc÷3¯¸é¯’î¥.˜IŒÿ^CT?áë]0¾uÓßeßÝÕŸ[~BÄdüæ ¿íB—»‘?‡å#RƒýneÄ?!ÇMI;+?[tÄÔµnø¿KS™ëcz—ïj;A»cDÀfs‘Õ­ šI»»[ü•­ÁÈ“LgHðrޝŽóžípÆ->Ï?B¡»×@0ïþóNþ Õ2"Ø¢û#5–(%“d´&¶tv“J=¾%¶«Äª›}į渌/¸5A3ñòè–ÌöùUPmÑX<= =ˆ€¾Þ ¶Ķ»ˆ•W°Ü æ>í+PòžÆ!OÄæ·T–ÑY:í*‡ƒ-ú_ôZ^úH2*¥ÏˆÜÅàøÐí-žü„ŒökÎ$Bæƒó,¡-ð³‘[¢ƒ²Ï9C|L%SƵâ`h?"àš@R³€…Aþ‚ë§çk6‹ë3Â3í/CHW¤:Q¾“,X6`î:øf¿v×­|<ï§"n Ž·ó›»œÊŠ’÷‡ûù°½Èš}4µ¶öwzÆðÎZ +÷å½O4uÿqØë{l!è!%:‰`u+ß+Iî"$.)¤*qéVûÄëÇî»´‡Ÿú¸$<Êó}ý<Çϱ\ ò—»*>ŸL1Qóë ÝNð°±R‡Øé‹vö r‚z¹‘>6hâîxä„)Æ6·v%Ц’2„ÈŸ\‡I|©ÂÙŸ·^«ë}üŒˆwý{£Úe?ÍÙÍÀêGŒ?ÒNdðhc4 Øhý»¿…ïL'x¼[Gl¬õ{…Ó ÐÈìúg°LV,¬k?Z'» ú…ù‹ëÉ …<*vŠknÔ$¾A¶vû>]7ëq¾æs+%ºƒmÐ…³y;AÅ»æ´Ë¯œéM5ÙGÁ Ü}õ{šÂ>‚Š™ÀÌ8æöC…&ÆR‚wdY°Åþ÷#«Ž”ò’—j/ŠÂ§×ûùuËýD“‘ê®Þväkt0R›÷m\×LVx Ö[–LXÀ:ZB]l±ÿý0'$Òœ#Ó€Mö½Þ[!§[=Zãíy¦.ß ‰…ê® GÆ»€‘noÄj†å~J¶»S4ů›^€^kìÎ2óï¼f¦ Nn½íûLCŽý'Éb)!ðÖuøît¬©¶âÓ§?\õ[4ð=’×õ÷¼úÃ÷ÃÂûÃÚ_Öö¿õûÀ~Ã'&FóžI~ø\"ä¬_W±Ó¯¨¹®m°e ÿ!gþƒ» VERÁw†ÁÜvÀf?Pÿ¼†¿®ãçò¬ãëm‘j¾?Æ¿–º8Öcn®åc"<?¹¹éC}ü¹%–¢§+~EåAbbï©nÏlýX(ñBú¹cˆÔ”r¿…ÞÿbaßdñS ß |¢&FçWÝ^“Ó£Ù"Àš_éÇÈ™Û<˜Ž~òë~÷áUá©.¦ÜÏšxÀ&ËBÆ‚ä©'«äžF :ã#yrõ'ÄkD˜Ÿ›ù6Í×ý#È{SñŠ_©t!é]Mb&¥®sW·cÚY¿3Èí˜ïçÁL‡ºuÏoù×!´¬U&d ·†æû·£œ”–¨Z™ºïhÂ÷¯ßCö:G,Çóçëjwd…__ÔJàÃo‰ŒV(K$\òÕð)$ž‚Ý· ÿ"êå•`Ãe¸O_rþWÖÝjÙ6+¡;ƒ-îß9²I%iF5¼Þ‚½åÁ¯Ýü‹}XõVt+$¶ðÛy‚›]ŸÌ*xk–²bö—« .Ë?Fwî*ú^ç`#Ø—”lËêÁùVÚ>;ç6 !•ßÿ~ä”üRQšÈVýÆïÙuóOW!Ë:8_Vâ!“¹K©l¢Z{[¬@ótö%œ°ÜÔö’ìúÏe›Èïö‡ïÃó³ÂùêðÞ~6Æ–Z k"Á[ñóެR\2JjØ »Âáú^Ä ¢ÝŒ¿ ÔïîÊ@^žß€Œ,—eÖ‚ú-Þß ¿NjKˆøÄMä|H‰äúßÂx.‘'ÀÇXUËwä¶+R9Äö(/±¤¨¼‘Gp–’DjjÙ%dðÜ^âXò4•á~-ƒ9¬µµ˜}o=íyo†¾ðÓâKñó;Mƒ¾ª`ézpž³ZÎVèj›ÇgäÆWêÉ÷ÁóÅ¥4 VÑ6Ä~K}w‹ŽôÍÝɾ ³všÜ÷Í&—} ZÚÙ2….\_äX`ýçhÆeºê°ýÂöT'Ú`å`LCxO°¬’YrÉ`9®›‘ï¼%:H°È†ƒ‡ÏAþ}Tòô3j¸Ã<»ÈvØC;‡u'XB<\#ƒT°ìÖÖúÛf4ð5vOBôG#…-»6eBö‘Y’€…O%­ÍÏkbº ù«%¨—Üï÷{H¥Ô ,¿`Ç‘1o fàg"âïõw¿ç¯š-°íü[n•,^0ÐÂú“¦þ!ú •ÜR¨aîêMw°o Í´¢6šø­aC‰„ T0sÐ@ÔÀSË8n“ÑO10¯Ü>5Çí×YS›Å÷äÉ}66PÄÚëÀ`‹öO‰$†ô“mZ?wÓMºÛkð`… ³Ý6Ž<¾œœ6ÕÚGû$°çrÀ¯%u@þP–¦ƒÃáI›l1žóL÷Êä`‹õO¥$ žZ‚H¾ay±lJàžà·Ùèâ–• „ ·AöÆ¢–Ùe´ôT›â9­—°wDÆtÛi¡£'¨õ3ýcõÁ«N-—ä¾=°I Mà¬E „ 4°iv¸„Ì…M­Œßí»–ÇëÈXL ÍÐuÁè_8RH#i‰×n‘õzÜ~ |¸dÈèØCì8Š.bYꜯA÷ÛÖ 90/¨fî¾èIømDýXQ7[”ñÈ"¥¬T“.ò³”Öá0œÞV"°/0ÄZôy4¶.ÀSI*¥µT6S`÷càÎk4²“ox÷÷¼ÿ}d—´ü«$ß!ks¢â¼œmøE;ôRžlQUæI]/}e “=2A¦À Zñêrü>ÿ3G&4J’Kl¸AFɇ]+Kcä«é×ï–§nJ#ñ$¯)Œ¦jIC ù“~þ<þ<þ<þ<þ<þ<þ<þ™#Y¾ì_Wí&‚” Û'ó“CJ½ã) Ù¤Ì9döxüW’RZêI]©rKI'™á@éàyÉ´³¶ÖŸôµÖ±Ú^ÓjVíçgfý¿ÂüJHüOÒZk3M£Õå¬o:Ò«º©¾cl˜¢ÊÍh7µ¸u£>.dçåŒgË!c…ãç¨)y¥Uàmßç0Ž…±Êºû>“²A»ZMÛ`ͬ‰}IåßÈ XZûÖšÛ'Ö^#éx˜pú` ðß:rQã ÅÖwäŽnÒÆ~%wUËn‡åÖãz{[1ëk‰¨øWXk«ayù—ŸGjK¢ùu„ÔâÁâ_>RP×l‘ôÚTok{­U‘ëž–µv¶@kò×)ø|r{ªOô{+må­½•²tö½•´ÃzE÷k;ªÿvT‡¹‰ ?Ú‘RRSÙŽ”Jz]ÛXfü>9¶Ý¥ñ€èTùåÔµCú»Ö¶ÏüNÁ§Zßr ‡!–Ër[O«eqm9˜1L þA:ŸÿíH+ %®´îúFÙ¿+&²÷ëâVh oWt‚¦6Câ¼à]B;£oAÃø`@u«F4dE 9,¬‰UÒ¯ÀÏÔíô?;RPÇg ~©™-‘|MøŽ×‡±r6â "2çG²«šÉSÛ§øGQ»®÷4‰ý€Ô™Ñ€»îŸ\ˆëviù?Ð ŒÜø~&¹&Û¤:8ÞÎél£Óün¸ã~E¬[å]‚\p@K!í}<¤ }cíŽßÁâÿ®›Z*Kb¦BGy´¶|lÁþÉ#£ý72_ŸéUÝ­Ût¸Nòk¶ë1dﻥ<Öxæ:\»Nw…¬°E³"xüm´ó»&Ãö‰,™=Ä?ÜÔ{wÿø *_†€ýNÿÙQ¬Î" $ƒлX;Ž]Ò©:R7ê 2 ë}óRcÙD¿²í:œØ8'^^ ŸOG>¸¨çÀŒg ¡™¹-5° 䆬¾¶øà` K#b¢ß¥øQCaÓ}Ø ¾˜ïwÅÅòë½Îë,|?—}ÚU&+¤ Þë!^÷‰½Òðé‚ÅøZ̺ëAiBz¾þߎ*D~¼¿ÞýToi <Ùõ°[Åã$;€/,ѹxÂsß×v˜¦²pàc\{áûüf0µ¼b»ïö -…Ç7 £BöDºLjIÅ` ù=²“ñªJsmäqÁ´÷~¯Ú¿£o‰.Õ-ºÚ÷ÅŸ£;ñüh`;qð¹ã[ätóqÄ6èb4t/P´ÇwÿOfu¬.¬éuâ—TQ!ñH-É¥·Ì’ξ·÷MIæ e®¯¹[︘KL¸þˆÃ‘p»ß ¸™¨¸¥×´$^rЯ 0äŸÇk÷éMj™°{A+k­¬©Õ¶SZC/QUú®ïÿó(GeŸL:J+™ç}}^ò;}îãýS}ˆ5xÀR]Žü}t„Ž#/ÌíoøÞF—|wü¥hî6:™È'¬äÝá°{ª£‘¾>rwÆ'haý +Ä®wÿpl·Ÿä¥¾Ý¡Ë°ø4äxoÇó'#ã&Ác±ßõ“õû{wûi®«çV$výA–ðî‰èe1󫆵l俉6Ü:áý¹Éˆ¨½zœz2aˆâá{é©è j/"{%¶œ©£u/^|Ô÷…Z§ aò}O¬ ؾ/¶~¤g©q:ã®'æ!bÄ­zžî÷ NGS³` Ñ‘¿ –od©‹ÛÛb+G¼ÑlÔÕ!é~xIǥњ޲nŸËX³ë/ûæáõÝô{þҎ蟌6æ€ ¯ùiÒ;?íá€ï|5ÝÌÆ~æ3öè´”ÄÊX=_Õ°}¶ÄzÙL+¯ÉCÄÞç¿i%Ö«à9§±ÿvb}™æâ×®¸ëóÖò="Û5po6Ò½ÒêRšLWÍWH«ðžÄÀß'yï~@tœ ¤¾´®¶Ñ&Û¶Œ:y`PûýïG?Ñ|ò=Ô¨€Ã­'ÓÂ’Sa²öÐþÈß^+ðµ2º.¨ÇÕuGê«ù$2ðžwÝ3:â3gÉûOˆœñ`ÆMòŸúFKÛ$[iC­>™p¡Ý¶Ú3ØbÿõÈ,‰¥¾Ü‡rià1õþ=Õ÷qšŒßw$Æ]gjø¾[ß’8 ¶ßëêdy(n¿ØDüÿ vÂú÷Ôíy o¿57ñÿwêfÄå%–ؘâXf³­›öbçËÿx–øà_i¬ÿ¾‘šý9Ï­õoL<4Ö&HÕë·ÁÚ­ø½;Èð ¶~ŒmÇã-ˆKDÍ/øÃñZŒçÛÄ3Ga™ì­f¤jaSl°•¶>䃶vAJ¢ ö>ýÛ‘Nb‘õÉWÚ–¨ÛÿzÒïwèå{žµ×zÚÜïæùQ[k]mЦ‚’ ð–%šžïºúCŽ'÷SbùΖ®Wèb?;±_Þ²€ÿÕl„•ÀºÚ£ÏÅU„Á? ¿_§,×|ÿןk°öæk#⺿ïǶ£ùù Ðo5QÑTLÄ ßO‡…‚{'ñ‹Ed‹3êVº=sáçÈŽ¬^ ~üŽ\‰Z¨XÐÙ.Y_ ;ÀSÂûê#S":. å•þeÏ2<à[P|(rþ"¸Î^=ȇA†Ñø{xŸëdz^ßû©®_¬›tNÓR F³øÂÏ ¶ ½«à`{ Ÿ|K|ô´Ÿñ‚Aš"ès¢óaùÞ’ÂÜ>ÅXTòï4–› ÆÏÓòÄû84p]L×èc¾ßÓ2Œˆ_ "Šm%×¹ÞYÎc–!ûB´qJ_ú+eQÍ­ÿÿË ×ïñšus‘BÛ'VTv8ÜÜkî>Ö qU~t‹an¾a\¬4Öw<¨¾Oõ;Ý×"YGžq]bF€ôë‘¶ÙÝ¡å-*¥SZ\\Ftü†ŒIAÿÅ\ÏàÕàcs>ay>zùM#X+bŸ‚?Yý*È÷ˆâ <øQzoÇ¿ùÈ2×÷ü ®ÓÓÏ6[éûœ óƒ«|gÈ xóGMN…{昄ܰØÏÃ3²hfäO .ì‡~üŽ " nk˜`x@N²`kG5¼#3ñ—@²øþ§ÑÌÍò˜… 'é³Á¾Ò Þxt±Nã¦uÛ~ÒähÏ3‰h·§u=©/¥(‘àº^¸ºOÁäàÃM´äz†/Eóü<¨ÈÖÜzØ~`ßS7÷>q&XèÒ˜ìå®f/ðUÜ òvâv”VÇwæ™Mð½Å0œnÞ‹ hl £¹ÈéÉ`2Oˆ’…ú¹­ÖÛÒ/š Ú„o<ç’˜ë¼OZÂgDS1-3~_—JèˆÍ²ªÖùƒ7'Žä–ì2KÜžÿճܮŸË|¿ï«à.~ð,ävW@;b¿Øz,¨–8ˆ`E­©U´dÈ9‹ª6¾=ý˜ãó6úÉÉ÷@·#ò,>ñ©E‡dAþøä̲T„SyoÕ î†J'ňþ—²›¿ÒÑÜŒ;×·z+Þ{\k#é8¬y¯^ŽýÏSOö³!» …¸ǺXwûF;Áç®råñ÷„°ˆ7x¿›”åêçdˆ…šFè:ÞÀö™ìs+ 6äg›iž ®h‚õsICÎ25ù|ö7 Ëù?çÄîÂú¿DÞsšÍb"ŸëŽpM\Pµ9>{õÒHVOˆb¨âÁr\Çß“àƒ‰œ¼/#RWGö~6«²ÖÆSvдxa°ŽŽUòÈÉu1r}CƒgOÑÃk?ë½?^Þô{Ìn·›ü¹ –ã&@\DödHúVÓåá¶wü5ßßxuB ‡m3ðY=Õe€›ÄJ,ü>#> M4³^d€Êü¯a5Uçö‘RJæyîþÄw÷r½N‚r³ð÷è¤:Ù`4ˆ¾Vs˜¿ŒEþ>0Ác2‘<–м¿Q]w»ìà`ªŸ€‰½ö³rÂðêݼû2¸ÆÁˆÊX"ËoîÊêe}3i}I4ùÇH<˜ÿxbÿ!çº ^3‹ °ÌŸD†sµoUr^Oü÷$œ×]×q“ÏêÏðåJȾ€gWƒ ®¯gFë£oÅÕÅÐᯠÄE¼f¿z”ÉgÏ4+xYŽJ UPZr@ xàí Î?˜ûì.ϱýN˜ëü½oßÉÏ$ë÷Áò?Rõ÷ò ¾Ñ2<÷3Þë»éÆ­¨[j%-j„ÏÕ,H{ióº>àÞrß¾#ßÏj>K¯.bMˆýøK<¾§‚'] âuÐyR@Fˆëúàæ›¼¢Ê9‹\ç‡q0 ×ã¹r») c¾4Þ1LüÖÏœ2¸NM¨gÁ’ÆóÛ:?v ~]—ÚÁõ@ïG¥8æ³ßÏdçñ ä¡6 ôlK%¸_[J¶ ÉAŠËd¸ÿ߯ë ÐÝór½\ÛàÙÃÉ_?#{déí¹Àß˾ß;óÕõ„éO¾pli•Ÿ!´ÖO6ù/êOæŒ÷|ËßÁ§§¡Õàý xôD°5"œù91·J3õ*Pi(OýÞeH3 v½nÖŸ»¿qÒO>­º!íø½ûé'ýÃMFšÂ£Œ]ç}s|”¸¹(? á| p£•~ÇswÕuÁç¾öuF>烿³žÛBYÜ ®ŒH)mÅÅü$â´¯—a¶‰\¿a§Ÿ¨qÏ!ët¤ïBO%Þ{ƒ°ñ~ZîU5×)oˆ±;»k&}øœþ°¡á~~ š›õ€Œ0A]G¹ýè"ü'/HX¶™— ¼£|'Íñý9Ä­ë_ßFÖŽ{QÝ<3³ÝÄÄr?íÍuF_ŽEÛa½æÄwcÐq Ö­ÓYç;þtóX0ŒçGòÛ0§t<È?ýœ_×¢ŸÈló¦p­dÐÏ¥Hå*]åKì³ß\€Åbýqœí)β¡¿‹ÿöàN/“ð‘¾|E|üÀ÷úN›[T[€m»ðL{¼¾-8ÐÎ÷ÁÙ~¸.âa]ñøÇèu™IT9n¼ TÖä às¤½ÔS7©2œÅ¾Ó;q“èN]sÜÚ„üKµ–òýkEê‚ÞÈ: ŸÙÃû®ú­ÈŒ´02 M|­@º#ÄÇmMdðŒd0ÅcüÇ@‚3x×{tð€ú²QP¯o– rZ6añ[Äíbl™ð"L#8Œë[{Æs«•Ô$Z”ØX«hAxq;l½]¹Ž·ðŠfÈRHó€Cù)ž~”Ñ~ÂÁê¾7Èû™Ÿ+¶.¸ŸŠO­õÝM×AÅÿÛ oAùËü¥Dì ¼ëíyRãã¿¡ÍÕ°§‘sGÔ„Tý?ÂÜDék¨òØ‹ÍÛ'M‘¼?^K£Ù“Õu½½ç{Å>ÖZøÒs¼a›>öÓãÜ,¤èw@¥wݯc¹½îøûu¬>ì:D†úû/ïc½{ü~™˜­«ŸiLM¥ù±ü(¤œˆ~vÁ˜\ð‹¾GÜ t×ýdÕÇ’A3òiñªw~DtjŸcÄR8› Û¼Æ3®Ëu“vªü"yá_E±ñz?¥Þ­ò» ^ïÐYÒ‡Ÿaÿsha"QK£ãÑÁïý]€õÈ‘/~CžX‰¬ AŒþH_SjN²‡ÓÏc4ë&%~M lÒ0àËèÙM›Ê Þ¨e‚¾>¼"5`*< 6tú)wâ ûéSŸ¡ò¼›1UScý¸Äu.Q/ÓI,ƒJæ³™ßçAËh M R¤ÑhÑ¡ã%ÓKC&ýHô=½¯¢™\TÿQƒ,½Ë€Å%7òR—§c•Än˜yjx7ÎÝ×Üâ˜6«Ÿh-€¦bWŧëYdÛJ}»‰sƒqÕøžÎ_íܯð7Ä[¦É-|/ƒü— dCÌ×L`xQêø‚~ºE˧±ÑÌïò^šÂÖènïçn i|3ò]y*àáxÓøFbÞÛMKKÑ`‹/Wå+Ðú©†‡Ç¸ÏîŒ[û„Zðþë®aÁ–cÑÁ,|£¿f"º3Œ-¿E³Ú @[c•¬9Y/ÞÑÀ÷þr×Ì]¯ Å^ƒ¿Ùì‘u \"SÓÚ!bXY9'Û@ºw0›øÁ#0û´Æðs ÜU¯ â ‚nîûÏÚ´„,b•á¾yýžŸá–ÊF™ßøžÈ'xÕFâÇu”hU‰Çøü{r¥ósØrÆL^Y=ˆ×þþv””n2ö7ÿNc7`¦‡ÑÁ' ßÅ÷¸_ýõÙ/ƒƒ|…ÿ\¼: è—ÃbYRßÝó:ÜÎM:~Öù{@¯4½5GÞ}ZÙÜz17õ(^sÏgÔœ!boPÉ"°>©K…>œ»K^?ýïÃú–Ã\OaÑp¡sÈ5ßO¯:Äo‘ÍÍL} ®#Ö)u3 v ´Ãö‡}ïðÛÄ’X|ªÜüÄSLßO­ª¿2|—wÞ‚)$‘AÁžãº¤“{^Ý\Êxä¨X|?ºþæ—|ø-xÆ~âc-ò2²ý}0ü¡_#9>»‘¯‡TÍYw/±ϹÍßoPU&³[&¿"âSˉ§¤%&vò®,šM‚9ýùߎ0ZRÈy)e?[hwÏD¢kXqþzÄ#öTÏfùÙ¯ðë»`e x8¾1’šg;Ò~äùP¶?ºÅk×óþÛ°œ¼°ßÈäI Ñø9‹ßEwKIÉz€FÕ>ÒFÉ;üÓ­sÞ¦E¨n ¾EwEl>?Çl¬öìzI ?$Q ׯ¨{f£M° 3HíVÀï%VÜúŸä’:ÖÂîù©Èi±.²À'Çöj(ýŽÌléEâÁÃúJËù¹ý nSzìszå¾?ݯø^@ìîçý=Öl¼no'0|q W¬?D«aý…:IïÊYYD®Ãïå°uÛ m`ÿ‰¬šŸÿ‘É #qFª„–6ÊV[{ëJµ°Hs‡ù?€ª€ÅÓ@ñ~ð÷öH7 üÚ‡Ïò}œ¦#òÏ +Æ7w 3òÎ S<âgõl1¯Š^zéïøþx4sŸHϦ~Ð pŠ·¼6½•²V°æ2ÖÙh?‰Bä(µ¥•L'JWÂ_»úN¶Õͳ_âgÏF+½ñéA¾ÇÿpôÓ‰xØŠi³4<\9‚¹Ùž}ýdàþ¼~ ï\ú§+BnMíZu“u †è¯?[ì?IoXph{ƒDn °[ó²ù–"ë ?ñÙ]ÛïŒ|=ÐÃh~^Šg¸ë#m¬l์é#Æk¦ª»§x¾ãv Þò=¡7QMG…ýd {T¥ 9]á¾…‰U!œã2ׯäý3pœó°8·ß¯»Ÿ Õ´¨ßx­ý:¾g~Šs~›~n·aIgÑØäw÷F&ó¾° |Ê+þ­6“J™›QÈVZl±ÿÃ1N¾–òKºÝ­±-½%§º;âWñ-€ õ+¢‡€kÍ@‰_ˆðÄd‡iýÇ»ÔIg‰øU°¥è`^2(ø•gÏÃ*Ž£›7:ÏvÙаx¸8Dõÿo"¹$£4¤ÞÙé'ÿæÆkS ‹œý4ðoõQW%$²W‚ËP%ÅÇš‰áò—à q,3ï9€ÌƒÜe‘ÅH¿ÂÏÕ;‡?M—±Evì«nˆ·Š!H~·ë=›ÖAVÁ¾°/‰çCÈ€³:FèööÍâë4<à$ÜÉ¿÷Ä~fjÿÈö¯ÿÉ Âç7·öqúšã+ÃHïææÝÀþçýì·ø0€á6QëHë` üÿ9ܾïQ"vÑfS±9ÜŽhnBïV$_L4ÏCæù`á<žÙ+¾@¶ÈŽ÷LJ×%²TvÞOŒØï¯Îç5‡ý Ð;š>ÞÜ‚æ°ãñ¼£ˆÝ ‘1óIùJÖ’­ û] Iìw¿Þmhæzù/÷×7!Ù=ðï‘¿R–\þ‘ÙOx¹ÄßÜ$Ù|=í+ç»È_îç:!|eßâ'cɇ_I³` ûwŽRR¾”aRUpž‰Ì­ˆ[¢Mó÷F.PûlÂóW"ã5òÄ;|ãŽf‚ËŸÖª¾ÛG"ó´_ñ¶ ɯ’AN¢™4ðáööñ1ÓZÃJZ§ ®øýGG.)-yȃÕ5§E1çÍ¡ìñ> ÌÛ .}·ÁbÜ]ŸÄ&_Ë&·ë:SRã)yÀí =‡ŽnâGÉí£¦Fúf¶¤h`½í²åÒZAxÿŽj.[çÂOÒð¨¬õõüKõâ!h¶OÓÁØwxs ëÏ«6k32úSþæ¦ÞÆ÷/à/—´"ö.:¶·zvÏÞ q* Ò4Øbþƒ£¸¤‡ ÉGÙbkk®×IÛ‡§„·…³õøõ5í æç_v»jç‰û¯© ?×ù›Cù#TÂo࣬!ٱپ‰… ä vêb=Cx'œ¤’V†Ji¸_É@Z˜M^ëk¡‘´*ÞœŠ|Õ^ku›f¥©ûh$‹kݱm€œ¹ÇßG?B¶»O6øÜf AD~qÐ!y`…¶vZ ¨ëþ™£œÂGßK;ªö—ZØ:àùÙí{¢¸½³º ùýÞÎÿƒ¨ ÖÙiÛOM'ÆÜdØßaÆ·ÈI­—mµ‘ÈŸ”Mwl«6A»~ÿïGI!5%£~Îí±MÈœ ®ûƒ-³ÁØtµµÁ«'Û]û€??"²oØʳ)ÐTëhÈ´¹9Ïhdyˆ®h'’Öç“ÿGI$õäž–Áúãënzm_˜[KP¾+Ò°íWk8mÏáô‡ìß ÎÔÌ( Þ ‚E~móí¤°Uö“ŤÔFpÌ?ÊQH.ð€Á#0·WzÎZ5Û†LÛAƒQ<öQÇݱuöÖ.á]­“]³¹6œ(mm³}ÈØcCl^0(ˆë¼ÿ•£–d’üREÎÄN†­wD´›ir_¨bë±l¤@±À°=Eà8ÏßÇnY‚À=›„vzÙ ë(ÊÏã5¤£Þß;PÌ–ó’ ¦?&P7Ô‰@¹@ô@œ@ž@À +Hˆø`ŸañUöÒžYÚÀy ¨hèÂ×#6üÜHÍGG[”ñ(,9¥"uA 9%ŸË1OUC½ l Ôµ Èß—|¸_¶km 8(ƒ$ Ä#âÛyù^¾!–BR§å¨!I$2_ÛK:]¯‰E-—]H}!ëa̽$¥VШ{SÎ×rÇ8É"e%dÌ8ÿïíá¹É‹}e‰LiÒ\ªË˜|Q²¨Ô‘ÚüÜLzÊ é$;Ä ö)ÿ-‘º¨@À÷µÁ>??????ÿ_Ž2p¹l’ÕïXKJÞwÿ?'ûg¦V(&ݤ¾d”ªò•t„õ”öÉþ`4eº4”ô0Ú¾ORÁRËh9 ɵ³6ÖCúT'ë÷šX?ÊV7ú.Ø'ý?tÄÃÞ)©¯Š›i_QwÈfxÐì£ïîWÓzZ7«d™í¦^Õ¶ÚWÊQ†ì™·ÿÈŠÂË?±(þ>wE¼Ûí‰Ëo…¬‚EÒ3ÒÅh$;®GôwcwÑBKûë׳f6Ü’˜ÛïÚM»H«Øïö?;òH=i!5%¾,v»;‚{4&r~j¡Ì­‹Jâ{†…áëZýÕ÷5ª‰ísÚ·ö˜˜Íäæ½Cµ-92k°ú/ ðíÆd¹¢>ê?êCÝ­;ï_“šÛÓú\]gü½h ˜,6ÞÆŽjrk`u-¥Æö9-´e±ŸÌøk[ýmþQŽ4äø¼RB"j+†ŸÇ¿Ïë*½¢/±yh0µ©eùVjVb"Ý@©,’­Ç3>CîÏÑÆ.͇d-âàYõ˰×çŸ;rísáócõyȾ^·è9øÍ6½¡ô¾FÄ¢qì>°C£˜ë XÌ Z";¥'ô¦ K–²oð„ìd‡Èî.Š^‡;þP0“Ä•Âò¥\“Þº]_ø,'ô$ÿ\o¿Éú Äû aíþðPoá IÉ new|¡ ¾pRCaÿÏ쑟‰òœ ‹>6j]©òÀÁ„X)¥l’>zŠ3…7ñûvêT«£ÐIRûÝïçÿÄ>±ÍšÑ÷ôJ7ˆšEäoÑëÝ£â3täöÏä&_³Zš¨ I]¯ÿÏ£,?%ŒgžÆ×Rƒq°âbßniÄBT‹i«ÕI÷ÍT&>5·²ñ*ïÙe_Ù%°â ùð|ñ XyC Ú4›„wÌ“ê°Éàõ;ûÏŽìTx™áí]t09¬ ¶Œnï‰x×Éx­ÓÙºønwU“‘cƒx®¿ih¿¾ùñàî_Ó•¼þ©ï™õ\_i.ð°½µ¾6‰L˜WЇP(ëQ¯Œ„ÖÏ@·˜Ø4-8ïÖ9¹ËuŽ®öý`ÜÚ®³ ÂâÜ­î‹Hôg°Û¼â Ï$¶çàæ8^å,ŸÖÊYCØ`MëcãÐAb (Ð*ØÂþ#7Lµ$Ñ?د=ÞŸ×ÄØú-²lÔéê&‚ÜÖKÄÀ"òÀVéû^]ó\à²nÐ ßc´qŒØ¦3ô2ù2!‘ß ÞÜ(oð©’:Mq“áòK6)O…B²ú,v]÷“ßÔ¯€ùé:è2€ÛºÀ”nÏ×CXÏ=~:EÔ_àïaÌeŒC:oˆgɬ–ï‹êX;›bÝm 9Œ¶ƒc…¬5€%xü"®kÕ{¼û>‹×áÓ;ðøeÚWÛiì¾Hûµ€ãu2»yX%¨ vù5anïøK°à†_÷¼U!$³j0Á„ÖÑS'·³ÔHwlºµ¦¶(l‘ÿÑTÊ$‘ÔÍ<º„ç>&¿÷çcí­Øº£vñ?Vê$¸UògAÁS°/íQð›ß5û¸†õwóÛ(tçv‹=Ð4ÖÕÆÛÏÔÇÐC[;c+4MZ ‘Æ›XNË~ÎÕÍð‰ö}Ð;äü)XrµßÕÑ L›ë½Á͘‰ý§Ã‚6ª¯üšÐÙøÿm7«xçN^3Ùw½‹—d§2îa+l>PÇ&[+›O¦ )Sñ>§ÒŸGÖûMóZÍ¡#à7ñô‹øùAmí;öö¸7˜Î³+°ýFÝþµ‘|È8Ÿßƒ>ŽáýJÀüþ‹nFöç†ô#¾¿(LfíK.覹BÌÕ±Ì`QB²ù¬_Ùk}"y)².GŠñ¾ÛÉ0¢£už? =LÀÞ—ÈÇA‹\rYB‘û—!óG]ƒµá%n݃Ë ý¾úäVìA”¶6Æ&ØTÇ"i3À:´±¸N÷nwÜ"­kFs¹"ó}£©|—_`À‡½dƒ‘ Àô³‡‡[~Yݬ¼Ú `N믩$I¥ÏIîöÏ¢¢ùŒý]£Øn°¯çÜBÛj'|}€ßÝÚ~;¤_B~_îà\ªÛGøz<{"7äWÍÏëݾñMx’ëþzšß¶€ ®î<Þ³ÏÏù­\Ò¬ÖØJÙ`b¯PPåO+Y啸Lï9ëß±þy¬ïÖü¯"ïw÷»™¶âÝ|_—aÚWº)×µ*ÉÍ2x¨©m¼î—žèl=ºÙé÷<ÀÖ®—ÌEJÎÜ 3¾Ç«kY xâ žOi™Éƒˆ€àÞø ’@#ÙKPkªÏm¿àíÃx¬×ïÈ„xîˆ?€HžƒÕ—¢›d·©š…ßë“ï"i}&}ùë:>e(zt¸ŒõžFY ›ŠE-™Ï>‚µ x˜ÜšØ-+±ƒ*T0¸&¸·‡(ÕGƒmݵþ>W›cíDöKòX_XмÀÍB˜÷ï‚ÌÅm!ñqW¾  Ȥʼnðáþ:ÑPá.Z{À;]ŸÇ<»&|–<ñ ¶˜ßo*F䬔¯‚(}2‰/¥6qõÜ|S8ßø@{?û§6ßÛaãÍh¡;þ=›rh¿uÍ*úzÇjë`¿Óq¯Ÿ 7—O8¥¯¼Ì³°ÿ4p6ü©¹Nð¥,ö/b],·m ê~€d¿¥Òˆ(]@ÿÎsÉïäÜëg¾ ZûO‰äó¾ËíØ\+äo¯axÍ6$Ù¤d,üþ"²¿$î7òŠ' å\Þq¤p^Ün)w54ŒÅùËúÝ‚%,’µ·ŸµAP× æ‘Ô= ¨óoª›btX]‡6ñ÷wáôG<";íó̶ œ<£µàË¥Éòsµ·,Ó*ä³+šÈž£½šÖœ‹Û5¢~ˆñTãX4¸_ÞQ™¿”¶ˆVÓÜs“l¢´šô¤”ôzÓ\Í¿=¦@‚·êúýoÂ÷Ûá÷ µØåÌEr˜Ëdñï€BGQüœ– †{ÛǼRA†ÁÂåÐÈn^¿Ž¨OhéÑ` x_"¿¦¥²¦|ßhg-s¯Ô ú«È6¼÷¥¿VUœØLhQýŸ÷Øn~þ#¹ ’oË·ú½¿ #A€1šÎ޹씦·L¾VBl{æ ŸIˆüWÞMÇçý¦y,¨W_©hݬ§=±(LÚ+hòw’2Ò¼ïçyë *ø·>oÝ@â™Úë÷óû½7ƒ’'í™–ÑBÚ—*¾¶’~ ÿ]ß8Œ½ ~á;æº.²Ç|öÛ‚/¹NPÏ5:IοtÿpS„Çèá îì(åd´´ ûÁç—û °›sžÇϧàçmÉtaDÓ‘p,`1±»V†Ýu´øv”îª4Õvòª+~è>j‡y~bªë™Ò®|É€Ï'Ar7µ¸Ÿ”(y¢?èÈ Ö€ã¥±ô’#Dì~]g ¹m<ÿ†’ëÛy.0ØÉ÷4o vçûòûh¸ÑþP[“jÓ ö@Ü#u¥›Ü"GOCê™~ªÙb¬ÛŽ\¿ÖsH8Ï«Nõ7_„/Œô•áft6hþU&¿mOƒ® ì/|Z/>¡3 Ÿxƒ÷o —®æób’ý™댹‡ÿçKbdFPù.™+òÎt¡z7ï®?y‚Õ¾Åno‘hñ80„Wuº#»ë1Ýw ^ЧŒÃò®ÐDü~´¿OÚŽ Þ`ÿg0~w}è4šp3àÚC/¨ãÛ1-Ôbye¥œÄzGýdŸáÈ4Ï ^â|]§æ×üu:1<ØÏ=m…Ü•`7}½ïopÐ_óÝê-FÓx]ô9–Oq]3O`ñØdÕ»øÿ¼cïéÅÿöŠŠËu€¨9ƒÚ9£lwMë&µ©ëõ°–Øî‡Eo`µÒvŸï¡ÌMÄÙúsþ}ˆëÞ¾WæÞåjœ™Hó¬ÛHTôò÷Ú¡›Ùd€“Ø{ÜÈõHvóB]w¼ýU¶ã=Ëxý þ¯Ÿƒ8ÿÆÝõš!+ÕÕän’ãm$ÚŒÝõk³ªÈÿ»­"#.ÞÕÀþþ>È8âa_&ê]'Ã3øùlì;Ïï…绉¹.ïF£ïyijôdÎôhøþrœ˜ k ÌuX;¢WƒÚ´+ÕgFðk-ñøxŒU—p^wˆþˆð9×}ú˜é{ÞŽõSºà ½ý„ïä"¾÷Ó$ŸAÄŒäo£a5±ï%~†O goüžðPö]ºù±É}©É‰ì¼fÖ`Ö¿?Ã>FËx"]á@nráô¿Þ¹þybÁå\ç–]øj^L>kw·…vÆs§àÇà´¡ÍM‚ B6ó\Ñõ «¥‰øûzôó˜ÏŽda©/j4l¾—XûMËÃ…B[x`A*ÀàÛ$³ ”ûxò^Îö.õòw÷waáÃøÅ,x)ÇjI}/©ô+|ßeÂx÷0žß­É첟†9ÙO„qì ŸÐxš…hÙî#Ä­ƒKOý´Ÿ×¾òà¸S2;§ŸÙP]DéENH©Eý¾ _vs>Ç‚ýîÎÕnΰ°Ÿþ±Ãÿ6¾_Ãk MOü¼'þ¿ùÝìSw­s;Ò;ÍŒƒóe…ÕeFˈª;þŽHlkóÝàçÅÆ6w‡ð…¦¦FžªËƒ>ÿ5#5€›ç<Tï‚í&!ËS,:_#››l \œªÄÿy$É`Ó‘s¥ï‰Á÷¼}ä{Æ®ò3„ jh4•‹øqú¹’ºº§„ùº®aI,ÚÞרÔ§5Ùï_ŽòØ™ŸßÓ™úÙ/áˆèêVtư‹¾«ó:|;!µ~(<àsªâU~Êû6øÌw`Ä9Þïf/ÕJš\ÃÂj?'OîñÝ/ª»¯TŽW}aõ‘¼&‘Ñ 'Pÿ DcÉ"nrõ.¼ÒÝÕ»íïë— «m%ú¯úLà®ç-Яýü×ß½0'^!£»âãzáÜîžØø@²ÃNüåìÕ¯þ¬ŽMÝÞ˜ðšÂõ5ÆŸvÂóN£Ã'|v€Š7ƒ}aÅì+rÁR­ Ù‰§ˆ:;¬ ß(É%+žàŒç’¦v ~Éâ™ë„~”¸ØàïýÌÇïãƒY<ûéf›©â³ }C›æ¯Ö÷ój9>i1¯?Š>ßEßîþÊMkùÔÔü†Ä×Î’/ØâËqÉ#×%2¨Þ ÖòÒs¿cž ‡7÷u—ßutß" ¦m ÃíJdL´%V O`Cl¾å‚áLä3ò“Îã3‰¥û°ŸO,ü/“…±äü"D~r|!¼mÔ²Ú,èw?Ý‘DúËb`gý¯½L¼È¹G2·¶ñq¼þz…¿þÊ·GÊ¥þ®×W¶{„:©…u¶×çwŸÆï‡ÿ]Gª•Xþ(?»{`Gó^RÜêÙD‹7—„ß8m½ðó¯[h7¢§ùí:ù!³¹½#‘‰¨,¾#ZXûÄͽÔwúuˆè´DbˆµÛ°d8/*çxÊGmCltxd8 —w•ï9<ã<çþA "Å(44 –T…ȾÎsÇ©Á£žðþÅ^~×#´hÕO‰ƒõSò/;~ðL³ÈÜ` Ïñ8Búƒÿ‰m.î1¾æçvô]þ.ú;A[ÈmÈ‚wyÆada2Ù>ý™<Ù@VWs}ÕvRîãq‰ .ÄG`ó°Å•_<´ßOMÌ&g‚-<Ç}ðS)NårŠšÅí_yÛ™„$gõÚp€ÇëTø½›iâîò|B&{È«»Qõu'&~""RcÑÍüõ%ïvkFá1i¬™M·¼æ&+Çç=¹á}-œ!¯]Ò*!¢v(í*i´^ÚÆûÎO¬Ió }„† ðëÿÇ ýbâú,ÒÇ´Êpž­øCm õtzpû"z`ëøþò©[ |—j'ôw<éGýÚšã7µ`A‘­œýDþK䫳¤µ\—Þcï÷Èw{¯ÀÖ® òmj– T<AþeDz4«`U‘¾!,¦±¿RhA^<"üËIb³á‹‡@@wýÐu„;©Éy‘ðù7šëw47 + mÑ{°¥I¨‡¥š Äê»9ç“ xt¼ô’ßã'7缟n÷òµöÖÈêà'mˆõ{#/¸Ã­C}4SÄßëØaý$x­Y-ºEÁ'Ž«ë”›Š(Èln•ÑWþþot(éB€üÉô¾“ƒÒ’ ŸÉ\­Z™s¾  цÀÓ/Í“`ôñêzäº _E­LÌ×@ú¶Tzøiµ_ ­dí¬´]æµ'a;nÎW sS"!w*¾—òþ‘œÿ¥‚—ù)È/òVrK[qû¶jr~¥á*ïÑÅPà×ø/×Y~²í`ªã¢~Ÿû$¤ïŠÅí h}ø ›…= þ»[Gƒ×µ3 (‰•'ÎOñ=1z(æïy¥Çïkðü9MiUea°ÿëñÿ¿#Íñ[wß;=YꜟñÚ‹m?¹øCðñùÈ’‡:ÇÝ i…>º¡¡šž8˜^¶çù–°æ¡HÚï‰é'%µP~MËGì´³ÆV×÷ŒoEe°ÿëq@ÚÈvùèw}œó!«ëä>;Ž ›»»?Á}ûøëdðùïÁ¼µÔ‰-‹æ‚×¼ Fz ¯ñø‚Ûáî¨Ý‚=»þ÷O‰#7Od3ùäœ_-_Ժ΢ÁûßÞ2K.JCû”óÝ„-×r¶‡|'gw=pºƒLí{ ‰>X,»¨†%gê²|t;IœŒö÷½úúJb;Ñr‰ŠAa?®söbã5¿½D÷µ(P6ØbÿûQEFKY™J®Žn®Î‰`¨^®øUŽËÈ}ËüÕ±‰H×Í϶„mŸÂÏh:[Ésˆ×!z=Úrzù‰a«þ{om嵤íVÕÂ=ÁÝÝÝIpKp·‚—àK°à.ÁÝÝÝÝÝÝ pŸ9súÞÓýwësÇÚùGæ{³—²ÊÞzëû¾YåÏ’î‡nñ;…¢€…­øÑÜÂfêö`‹ýW«Ô“!ÚŠ,u nçŽçÄ»Ìø£œ[t!òOöǽ»únБ<’}D=€!‡Û»#=בy°Ÿ±ˆw-Á#Vð{= ÒåýÚ6” ¨#¨·ò<ØBÿÕª&ŸKM™¡Mí"ìþ-v½‹ÅNóýç"Áý™xžì¯}Àcg4/œ.7ZŠ š}ŽT×ð†èT‡©˜f‚™óxÇ:°Ä!ÊUü( Ye¢-²;6ÏFÚQ/iåu°…þO+d•U †ò›V~Á£W Érüvݨs4zXë¯ HLN‹ýkù«¦ÞR纹N§ýÓ©‹Ü°—ð7óâò·„]mûm¥E ŒÓÑ!®/b~I,¹eŽÎÂó‹ð¯âÃ.ï¹ã¸ °æl?¹æø¾ök‘ïWÍG†bßÃjÚúš`#·ÅDˆ»êßí Ë[NžT!ã¥ÅWÚ“&J³`‹û¬¢’\²Ë>)Çwüfo‰üŸxý!ºTY).‹äža•Áí{ú­¹éoAûÔðãLøù3‹ÔSð€ê°¥…DG}jâr6«»küžk2ª·ç;£ßéTƆÙV>¯\ T ¡Ö ¶ˆw“ÅT?ÀjóáÁ5¨xkÂuRQ˵°ðùwx@YdêbÝB¢‚=ŶÕ@÷pö†Ü‘ÑšÀsWØ4Þ]ÊOPhcç,aà¤6 áÓþc¹NÆ·µš °ù0¶r0ÝìÞ«‘;—Eý¶³õvÜNXäÀ9äîBÆhMn ø ½U°NÖÆ÷œH‰ç™O){DñGY饥TÒ\|÷v6Ú¾²O}¿#Ü#eQŸñ«ãõ»í¡}èGÅ\Å^’CzA†D¼¦œ ´,½¼¯§M…ñ– ¶PÿĪ+y¤ŠÉ®Ù=«‡Ï€µ_Gú¼D@s8_-ËéýÍ^ã°ô Ð/=±Ò‰»{oX`5…m‹×Œ!ªßÁß_ͤ°4/ÉwÇì±ýÞÅ ä \ÂÿÛZ[fcñ‹öÞ¢"šæØôR $œgçytƒí V"6æóx 9G;þñÕTæÉ.,µí|Hà1\æ‘Ý´øÄq xnÕeioŸ’.Û."þŽÝµV_xÕ E܌ךJ›[”qÕ”Îh¡§LlÔñû-t Vàë@ý@µ@Æ@¤@í@ÚÀk§[¬N 4÷Êcõç–Œg—ÚZ]/•à”‰Bì¼§t}.Õ¥ž f «²øw Ø#=O”ŒÓÌpþÂÖR›ƒþ{´².’Úò‰Ô¶Áþòÿ¦ÕJæR‘ëSwË)‰¤«d¿Œ¦fÊÀ-:êŒÆÊC™ŠF’KØÔßäßµÆsûon(ý¥ƒ|#m¤ªÔ ö—úsý¹þ\®?ןëÿç•6WBŠú«ÖÒInIÍ_Y$,¯,±¯Œƒ%u’ù0€VÁþªÿæ•É‹Hò}¤îŠ¼Ù‘;T”;ò«”ÐZD»i3®u4‘n—‰pƒà_ÛúïZ)$‰T–…’]7ê$m¡áU¤úpWµ…¶K~"î< e…-”ÒÏôl“ú’×OŠøc¯ÌË“TÚY?µhÖØH½.›$…®¡2Œå{¾7§&.fµŸµDÓµº6ÖPš®RzÜýk+>ž_âIku»6ŠÙ¯ú\sØ-­©›å¥tÖéVÐjZEª¾"6ܺY^«bÝ-¯pSiE*§‚Áâ_^ðà DûšÇ’Xi+nç4¥ý¦m]—(Í(É­Œ¥µÆÚ7–ÞzYyËiK¬qÄ²ðŽŸ´+ÕPó·ÊJ#ªº¦Ò_kbÏLö¹EµÝúPïh+iKô†Ô²èævŽô}°^i^+€jól¢¢¼}mql¨ŽÁŠ[˜zÅ#³%—]wmKJsg½ÜÕñ4qð^7éÆ¿ñÌíqÛŒ›§°r#JY%ë`í,¿]pW‡Imräg¥%îSH99 å|O‹¡Èævú†³}Dõm}­Ôé¿®q,¹ï~ÅÏ…ŽËßî É#¼¥hÇÚ€÷µƒ ¡=Ÿÿûå¸M^i&Éu„>Ñ‘:yßç Ûy½¨çõWýE‹Xd[¤Å->,˜ÔêQ?ÁM~ì¹íz¨n‚ï$ÓÊR-Øbýƒ+…$“ä0¸›2Pw é l>ÉÜÕ¿è.Me©‘é©F¶×°(HÕ YUïƒîÇ_žƒ1,ƒµ°ÆVÙ~´/-`‹u-;Ø¢ý«¤¤”Tð½»²V×!ù1ü>²­Ð~GÏl Že´Wºo .fà^ŸÒ˜ã§ˆ—Oà‘°¿ÃC÷xXËŠ/L’œ!ÓIz¬”ܰ„dû06Î÷@×®;Ð|}ÎG êÝuðqí(ø—ÌÒÙgØû½F±Ì¾ïç& àç^<òWŒ6&;²íú9ù$ä\õ÷ß­œh ‘ŸŒ–ë½Ñ㺟_º­ä÷]pà•ïææú{F„éå´ˆàß°ðž ˆ_ÐbÚ|ÀÍ?ÈǧT±F6ÝfÚ|D´ Y%ä"a¸^q4°T;ZJr—›kðËo"®¯i'Åç%¬\G«jßïl¹ 4þˆÜÆSÆ:ÚG¶JgêozËÇÿ³ ¡Äü)`v — ±gÂrû v;¥›}KKÀí©º+[Öƒìcµ?2eBþPV]Ok s;÷ÃÒ[|pñ&7w]P[l¾Ig-/xÎí÷psP¾µa6Ç®X<;D•Yj[Ôÿfe¦ZûV.IAKí1ý"ÞžŒïþ)÷QáŽÓˆóÓ>:ìÿpŸøgáí 1’ÈܞφàÝ1äŸOœ¼ÖVß¾€ |ÿ7¶ƒv丌–ˆ¸Y0…A¾LÔó¹±Yx¿Så&rï'Ž/‘¦jW¢ßˆo#¿e2åï_t2~m<¢: X}Ì×xß0´wÆ#¾£>¬…üîlù »`iCI !ë*° Ô(Ye²tž@t5×¹h™®AÚú-ö߃üwÑÊ¥ßãëzÞ»[ˆ‰£D{s“Yh[G¦‡NÞi6r_Øðcûl‘õ¶Ool¨” Qצóg°r€[Óõ-qÍvâçGa~ãøw„vñœ¦kmÝŠäK°írâC=¥©]Lën¿×¯‰ÍAOéÁ­ºšW»ŽŠ§È ‰zº±eÔÈ}­«Å <ÒºüŸ!åQ*10)kI‡ÇÇÇÚ ¬»T§è,í®?ø)¸,Ø"®ó½ÃÃx>pÿ8‘|±Í%‡…±ýhišºÞÐñ¨*ÖÜã£á8œð3ÛÏ vï‹ÿXÙÜñêÜ |¿y`{ +Ñ}“ºn»~§=ø}Y¿ÇãW"Óx}êûÁŽê—xKd{盥}5:ŸñŠxå{®@gÐRkf}ÀÁ"°Â–¶”¬8HÛ‡6˜–¬ŸB ibþuì^8üF]…l©ê·“÷F ãfoý{Ø|>¾?…8p{£VëpI‡…¯Á .‘ðî’ð7è¸1žjà=:¨c­®}L >ÔÆr¿‹ ¶è~‰+È!"ù•Ÿs·w»WÖ"ç â¿ ?wô؇GÏ’Õoa×ëÈ<[;jvy(‰†A e^`§& r.iF»ŒÎf‚¡·aP™-,éŸóPcÃܕГƒØùõ¯Wn¥¤2œ¶·xŸä£~þ¾îÝ#‡MÄî×Èî»y>1 ¿½&•šâ:fgáý®wúB²„ë—Ãbù]dmù´+ßÜn™Ãhî²6°ù A+  ׂæ$5•Ãâ¦ØÅN»|Àž:O_¨t”NÀžO‘i°öC¿{ÉJl›ß†ëM¤O¤¸&µ8ÔÀ®ƒî´–ºH«k]|æ<¹sŸ² \jQ—´”:9DÏDÅ3HêI¾ß }I…7«·õó¾Új7˜Ìc¢x3ž=…<¸EÝÞÃÄúi$ƒ7lÓæZLÆâ÷‰`Â1aˆ?ðX,êÂSèmšÚŽFÖúXpû¦²3> ’ØwšD’YúÔ’”zošœ–ä½Ô|·sx¬ëOâúصýghv«§_Ô£ýþÿ·Äôbl|O^Û¿ð3BNÀÝîè·ÄÆ0^“ŒºÇÍŠœÉ+·ó®ƒ„ë’×wŒIhF–ít˜âº¬Ö"0¾çDé>¾ÿ°nÒ¶ÔÖà@:«aqÍíwÜEUs 9ÜL°oñùV6T+Á|j#eT*Âèhqrƒj¨ÌÀõXê{ÿG°(VÖªÚ-u»A#[f¤hiµfåÏ*åäš„÷œßÍ-»‚t÷q9ž; ìoФŽmGüLG䇠á·ÚJàGö«~n©®oîQ?ùgš˜K~®±òß7é ˜v”&Ǧ‚ ·@ÔDV¼ öu‘)¤º”$s%N'c™ëXÊñ·sØz Ñ_-Ä· ÄöBâ¿•ç@ƒñÿJÚNbXk+eãà5W5žs 8‡ŽFƒwQ©{ÓpÏU¤~L@…ÐÄJPQGôµuXVÓ ²àdDÿ8†?ŽD^×ùÐus{HLŸÖCرŸ6ÂêÑñÛôجh4þ<‰¯¤3dˆ´mšZ£’)¦ËK|ÇíszÖ¹cÀu© ½íH~}d%æ?ⱨH=!d°Aí•í_‘óxèxöY"u¿÷!ÉN8à40 )þRdts`Îâý{üŒ˜ý’ÞFi.ÝŠOHt6 v¸ÏÿB–%Ç!î§Q|ð½Å˜ÛIäúeF#¹}ô @ì ö«- e+üü>¾›€ enʯ›Üíºýo…ô÷½£XEð<’<Ç?^]ôºÌ“KòŒºq’¼Ä‡ÆëGÐÂu MMXž:h=>4E°ÄpßVŒˆ¯b¥±{ê 2¶ÚæÚz©Dù“J)¶¹ãØéÈën¦ë]rômê¹ûÄÁl,ÞÉ¢Q·¾&+f&Ò–X»gðÂà­v²Dø¬vÈ÷÷¯ßoágÝá6ÛOp]¾¾!zã®&ê §wS.j¤$¦¾£æ½ç§mÂwVøIÙ]© ‡ ;F¬|JýG»ö‘!³YenŸ›ëš[,¨3Ñ[È2L?„í\§ßMÈ×Ûwó¿¤eáôáññ¥ÄÅßÙ{:šhï»Þ¬õç8/óxTjüSàÅ6Þ³Ö÷@ŽÆ¦û9ZÓ±vâÇõFM·÷5d,j-wÝdOÛm³uBP¥w+°2È| œ÷]°—ƒ‡×‘ðÑ}“¬¸IfSÙ&ш[Ûøy?SxÕ|^É’Ù^l¾¿ÞÊíg-Îë²ü…#U×/"4uŸšë~›É\]˜Ãûó­—v¶ø’Q*ÊdÌæ‚ïöéf6º9°óðÛç0·¾£ÏB?ŸÆÇÒbY7ùw&¶>€ÿÇ·l%²&Û-@k_hhM¨ü| Uà¢ë{zSËØbüå%¾õÖwØŽGÍYÈâjðÏ$’â²ÂÏ(x‹Ô»NÕŽú™@§ð‚àÂl2Z§Éô½d‡ßïíßÂ~P7å:œý‚>"}k*¢øš›Ç]¨ø¾«¦#ò n"ŽYwÐÿ:ðXoû~_Y¥ ðŽŸN=¯ÞÅw.7o‚í.ú®øËüô#7Á¨Ž¦ÖTƒ]@ÁuÈ_ÞOwy§®¯Õmøþw<]3kM[}ïäß`91,-ÙU©ûÛ²ÀÏzrïVP}ý¾šI*©®_RᮃßM&ÒXËjðì;øÀQjøþذãGÙñ7Û£§F²€¹.†Ùí-üî;$<€~rhM þ_OÃtN¢¿èäÖGüÎb9¬¬}E–½ ˜e¥l–|lñeª$‘p:\Öâ£}ñƒv¿}‚U_c·PvÎ÷ßËmˆÖAcjI-Ú¹ys,¿-ѰV‘hnj[ôk¢¿¯Yà{]ÞõóΞú©¯ð„„TÉ-=ÚlnDNëöˆß£þŒ­säò­&3üT›0ÕPd+wÍï <ã9`'=AëÂ\ÀDÈžŸXn«îZ‘ÚݖõÍÈ“³}ï¬ý|Êuß-±Ÿz»m4 ^ûɪÏÉ5‘lF膓PcË>Eä/‘Îc»©X÷¸뇃·ì@3{‘h+Zhc›á¯ mµ­†M±³àE}b;¢Ý‡?,£FœÌ§l%ZN“Gi*ÃÖWÐF XHFM4"à_-%õe®Ÿó´ _¯ÍfòÝ#‚ê«Á¯û~þÁ.^1ïîä'bœ!ž[ÃÃÈ‘§õ;ü:9ìþ~³n°ÝWúûñEò¼öS¼ÞÕÁ/xÍ6˜eh´uIÛ„€Î…©¿ÒKkXJ(Û”ë°áC*>džnk ˜;7²Î÷³ïïkÛ'<÷í4´ ÖË¢Ú1íŠd9©hîøœá®úqõæóŽ7ZÖªYøžëx¯ kî Á{|⎎ óéF2ÀHY¬+áÙ}gì}}„µ›|çWÈ4OX§Ûå§þ}d.§±Ê Ÿ;®ÝØY3¼æR¹W/ò½ó6ú«ƒß"mïŠçÔõ"*úvl;ÁŸõN Ê:â4«M%s% ;áÛMÅë#RµÝÂVGñêéÔó«Ð‰›pŽçkZ9{G•[ˆ\8T«iùì82ÞÀKÜ1µ‹d‰«èÀM|ØNÍ—O¨HÆ,Š¿¤¶6–ä þЍßÉ3ÉI'3—¯WQ£|lÈa v@wFÇU= <—uÓq"ý#MhëiBÎ_¡|‡óc è=^½—ß±`nêï ¸Ä.˜t¼¤&y¿4?am¿f’‹ÁžY§ÂCÞª«ËŽy´ ïè¯Üä'ìDî¸è¸\4x{Ck޶2i&_ W$.ÊjbûkOL|‚¬³xïUrDjä|®yàzü‘{¼?¡×Jxªßâò4ØÂ³ëLùB"Úc$ˆlnf‘Ú@ðPí|™OÑÃ`½û´"V÷ç®Gû‘í»“š€Ÿã½¬›u´!v ¤<ÉíþŸTHNåë0€?=B/- Œ¹§¶ óRé`8àr­n‡ˆÞç|ÏþÈû)ìg?,vÑí:àÿë9¬Mà<•a~“´’üÅ´VÖÚHËà'åáÄ•AÂ>Äÿ]ò|vxÁ+¿Kì¶MµìêÅÒd¯¬„®–!@~‘•d€¨Xú;kLh„ßãtÂw¼þžŒ0ÇOuL5Tƒï]ÍÆkm?󢫶ÒJøEm‹&†ÁŽVÁ…¾†å!þCÁö]Ï· ,œ·žÿ.pŽOÉa쾬 ¶àYW¨oIZ,õDÝžæÓ`ÀF$ïéÏŽ€õ΢æ…„Å­ ýì'>4à™:ùSðx'*(7'üKü¥4¬q™2 qž 4x o©ðù7þˆù-Æ3ÙìÇý_ ¥•äô“ßrߟ›Ëvnâß $íÁÏ4t0Ê÷¿wW· Â׿Ò6 âj}‰'ÄÁ¦GÉx :ëPÞ·ŠŸ=~ÿÇ9òÇz$v=³Wñ™.¿œ§Òª2N–SÁü/ëk-/¨€“£wòÝÏúÊý÷é§îÌí ¤Cþïˆ|ÑBWfp¹0—@®ôðÙõ~>‚»Vdž³„çÝœ¬=ü>„ôÛЃ;ƶÀŸQLl…‰®Áûÿ]éeL¤ 9Éu°¾Cäº=}¡ì%8°Éwèbäž‚Ÿ·"&†R!=õs÷ÇGãZ4ËÅ+JP3L×fÜsÙâ<1Šaùb/úpÓÑÝ$´Ãè4 ø×äw×¾²Ÿlœl ¶ÐµJ€ʃ\Ÿ‚Qu­\8ŸRçö-Á®s±þ2á0ý‰xÞKNiÅÀÂväº5Úœ/D°‹È<ÕwMßMtäöÝôñç{¿ÅêÅÌ}ñý7°ËZr0ØBÿ§U諵à/%ÉZOý$˜ð¾~'×8$ŸBp³0ÜÄ ÄHVìŸÑâ‚dîZÎFÈZœˆqóræånÆoqâ##•ï Mc#øÜÖ>pÞ²[OÉ#;‚-òZ%­T“ªä?·»ÙÙ7,Þ¿ÓÅ^†¬†MÖŸAðÃàÚsôs[?&Nâ’ËSRÕÔ%2bíKþ|ÑêÄê®òþ’¨J…ßÏ!·œµ…ö‹Í²%RE*[àÿ²bHj‰+õd)Þü+<·*ö M²ˆ¤Ñì Ï‰gˆè¨ð¸löÏ.cu²G´‡ä¼ ø‡«‚Rÿµž6”z¡¤³.T̹Àý”š/ÄIïV*I*å`èÐ_ÏIáÂû°¥ÛÉ’ÎbÀ7ë{@úhp7½6’õƒ6C[™ñu×ýû.–?èÏŒîé×°¶Ä:››}ÜéK¢Ç^ÄZH\餒T—Ëâæ´_ ÂO#ËþME5œ¬F¦-xÿý›×3wÕËWüõ­9Vü½µÆÿŸ€™›`ÍñwÆg„ݳ=ÖÉkùl‘›%Bö=ýŸ«”´–¹2 ÜúØî"ï6?³½ÞžÛ6‚û›ýu+g¨ sá×Ýáô÷tŽ-£šïý+Qû<ñ3/Y-ÞÊîÀwŸko»h±¬…Dï ¹kœô”Ñx|dd9Ež €l Èònzû6ba/ŒÖÍLkåðçå z¤Àr›Ì߸׀êÎÕÍM¨ƒ[“Ecû™ïµ’mµË6Áfâ%¯¤°…ü«‹|&o‰€0¾b¢I¥=þÉ–#õk¬{ü»Int]@šÛ ‹g«%*ÁÒ€ /´mà]aùùÈ~nx1ëeiÝl‘ój¿lU•pÜ—ÈžŸDÅŸËnÀâ2ùI/Ïü~Æ;úš.9÷+ó;/vþÚúâßî˜yX~ ·'^ñÈ êcjÚáÒ)#Ù>¸ßÞ#Y;ãí Ò÷€8áç:ç·•vÀæiÛm×ávmílïÂû®ðH'¢¨Z›a¡±¤n°Åú‡W*ÿ;x@Gò^ ¤ÎGþ.7 ´„p™ü ]N¢b¸²O]õ'û%pÜÖ“#"òʰ’6ÉÆÛv»Ë+[‘ÏÚ :õæ¿_[¤3UÜI]€OO"6Ã]ÎqkÁm#Z)DF[BnÿÎ^[‹¨臜á}¦O3ªk?âÿkl~`X`,h˜~l‘þÉ5IîË2I šå@žž6)wØ ´1ûŸÙT{i/ì’í·#V?°„ˆÏa]m)?Sl/~R ̈*T(×?­cÐ÷9þ+«”4—!òAvè#Mèpó/ÖÙÐý‚e ¤ä äD ä ä 5)5°4¸‡N®Ûcn±ÑOˆœ:L„ˆ}¾ÿÊ*È7/)ÛeŽ$Ö­ØúgKèÈèhHØG\ ´ öþÁUxüA­À;òáq=MMK*q‡Ï¿gå‘hÒXÞK)=l°{…@‰@¤Ÿ»Ý¡ãd¼œ•¡zH¿‡7 Z¯)ÉóõÄM• ÉÓžþ™UNúÊ|ɪ³ô7j×®¯þ"±µµ“’‰ÊÁí¥™$‡d„T–x’#DÖxÿ»Õ]¦J{¤ì#³e´ ’fHš9ëñ\C~—ÂÚeƒý%ÿ\®?ןëÏõçú7¯<®?žñÛÒIqÉǽòäÿÒRFúË`©Ã¿`Œiþ^ÿ™•HR"}é‚”™ÈÿÕÄßÊ)¹-÷$§fVÕ'2 ~PA²H^4ôËJ"ŸP ¬”ʺLWig)»¥§L‘/$¡>¦6:¡ßèUKfbë´¶Þ—’ÝwwJì¯þ¿^9±eJ‰-ßÉ` ˜Ùmm—õ™ì—$šBZ Ëkií[Kg)í{ûÉê[q‹e×5½æ÷½„ó[€ÿÕªŠ É‰øò‹Æ°»Ø:³%¶¯-µåÕòFÚÛ§–ÀÊÙtkcÝøÂOQ«L%ü³-ÕÄB™Ûíõï¯L°ú/Á¹e²B?²Rö^/+’[k«e©4¯ÜÕŠHïvEE­·,–ÐØÛm íž^ëúk¼ÄL•ó@fkd‹âû5,¦î‹F”'´+:W¢[i{À#÷ôf±¨æ®k~©74®õ·ÕÖÝÚ[YË®_I-tøG[iðûŒ2œ w–þ¬‰‘Îõ8^¢›ýŒ—4‚ Uw^,†E3×û¨¾À;Ü.øÃúDk[V<¡¡å²Ÿ5¡Ö0È#1%¡Ô–ߤÒlÃûÃ[s×ïÐ3þ:NÅÖÂ-*~2¼ÖØv@ÏéE^íúÞ†#ÚÚW°µZQ+Ëéøg),¹¤¦œ «FÚ=¾ ~t0>,1í®á …Ì!¯ën]ݲ¡Ä~è>ݳ½Åêßú]®ã{8l‰¸7«ˆç‡ ß&ÿÖ½¾rt´ØÎÁƒêXW[fGù)¬Åñ±`öüøŸV~r^Gª¼ðvZ£ɯ5>ëºÂ„õ ƒáÄDÞ º›ûñ‘6<rŽL—ÞÜõBŸZô޼° ë_À_>%r’úRU!;Ú {ÌOK-&u$U°Åý/+“¤õsž_J:¼XíH~®ñýLVPû¸ù®Cð3͸ïQ!‰Å6×=0¯Åµ;©Ý¾ïõÄÎeÐ"5yÑí©GM²½vÓ">ÖæpË¥œ|£¶RYÂaû“ Ú n3˜ïz¬×ïu6Q¾·½(ùð,Þíú8¬E77?žò›Çäß`Ãz~žœÏý4¤Ôæze.²áT±ë­¸” {?ÿ¿•Z’ÁúJ=]ªuñë¤äø§¾›Õl=ỬÕN#û!ßÅî¹¾Cyd“º½-¡,‡ß9“ ,ƒîvùþ÷xÅqôw] Ùms¨œ·Ø§ °ù~§d®¤Ç¯i<ªà¤TCñ!6>x n@x¯›‚ñ¥’QQ4´aö¶ jïãÿXYá½Çå51íöîºéenÊÍ!üv4òÿ ½t‘ä;O‡µyxºÚf²ã|<#¾”× ò <à:\(‹§Nnn¬¤-ÔQHïzãíßiâ#ÌÉ)Oj]¨[xx;³ÑÞ2ƒhÝ€œ ýÜškäÿ¹ AOßñàñ_çèpu=ùþ´¨®’»rFzƒýø„ƒü\+âZoÛo¹m:ýÁwXÃï7þ(¢XFeb`µ¦ÔT=Èòçù‹JdMBE¥®9H®ï¯“ÁóYê42D¿Ã~5ì)VËn7A€Y`âC|z‚š&ÇKúòš÷ÚŽøÜèú'”°ÜÊ‚¦®ožëùz =E/¹¬º©Ž—Ô¤"ŠkMƒ>7¿Ÿÿ²K¢Ÿ.û»ý;ó‘|ªï»A[ùé7ʼnܳÄÄÏí ¸HΛ e‰—^pûãDÎ#ß;bÚ;¡5©÷'é7|Ç”¾–›‡QŽ×~eݨ‰ròSǪ™i° §¥æm#{e;µÊ^ìt I~ÅßÏû>;ôkíM–+NÞ*o»Nw.î]7«mäÅ©V2ðˆJi¡º¹W©fã!™Á·íÖ

    _ý½_lCÞ.ú¹¾9AÑì0ï?MÌQ×Ù¸8ø˜Ì1—È ¯Œè;Þ¶ þéÉÿP‘ÿçc< šu j¨Ä~J¼ý7°ù8 £SÅ»™ïñäÅä¯.Ø0’¥€×Ö±Û0#×Õ÷ºY«Çd…ì“©bú…þ¨ÑÊQ¢çŠþ¢®¿o$ª€yd€Øßõ>Ìmù­%Ñÿ…• àÑÅSéDùS‚¿ÍÉÚñùËþìÅ x}8Kà'z¹‰®öBd(ìg€,%öç“ÍÇkg _È—`G=MÝ8Lû)[} ØpüÒvLwr[ö…áóÝüç[éˆá @;ëΫÙ:iDùË@¹NuöAÓÉïˆú7êú`\€ãÞàg Ïu~8©ÉÉ]j3uŠºþ`Ï`>Måú+ÿ ïå¶Ôבd€æ C(ìZÏq»]ÿÏ´–‹çGö8ÏÏ;ìD,h –v ¢ü%d²ÄòØü‘¹y¾o@7Í4‘}bfKöHÌïö3°fSå= öÃÃÚÈJY"½ÉßHyž¹‹´nZ¬;û[_"S,WW¸8)ŸéÎ>µ¾Œ›½:¨;bZÂþ{ñ½Ý܇”`Þ[báUëÌ|Y‡ïõ-ˆo¯ó½1ܾÆA~Âdm |¬Ãe˜Ìõ²ÜGKËxÅknŽ=.ä¶mÍó“¯ÖàU—àXi-¯Õ²úhýcþ׋xPðVjß㲃ZÎËÌD† PÕì ‹ÍÃòUñýÎÄ{m-Œ¸®St:õàPôs”ˆ©©Ë‰žï`>ì(üÿLo®?fæbd,¹r/Ztõïp´5 ™ƒgð*·Ã̈„·ÐA”ÿs‰'3¤ûß}‡Ö“Ï'Éõa7=}÷ïMüÝ@ú½ÿ£ˆîqèf40{Mýî:ã%]Õwûº²nÚÕOèo¶ï€õˆˆYäß=Ûw ]À£Wõsrdalé4˜ýÿKò÷àÙ¾õ6/á÷ðù>°ú à luh¢µ@ïñ‚ü$‡¥ü¸ëž®Èy™¥E`7»Ñß#ÝBŒŒÇò®cÈp¸À]²©;Fö«Ÿ6v<íMÆc^“#3Ã5þ ÿ)ƒ7~Dµ6_îJ´ÄÆ“ùžÏ}¸×xÃPê€~ÞûcÃ] Ûi":9n)Œ¹~|Ÿ×Ãήà2¼`$šêá;=ç´m¼ÇMŸV— åżê6<á<Ó<¨g…Ë#ÿ-äl'°üJ¸žëóã&½¬BÂÅÔu÷‘a<ÒtÀFQ ¯Gû)°O‰îÐdr·#2Œíæó y÷(ß v$šp¥B“óÏW}w¡YÈþ=Ï®BGn¯ðº ^TFRËøïej»a:ùÇ ƒëtp™w²_‚Ï ~zpë„oôÅ‹7¢·¿;Ã^µ…ÛL¼ãGß%¢­Ÿ‰pÒ÷Æ CÖb®#ªë3gÇà+ûÑnT+¨Õ‚(n‰ {© ¹yµ[j£ïô8ƒûBFŒh/ÑÌl,¹ 'ruô“ñfñîh »æÁu„\í¸jÉÅý"ôÊNâ'aÍMƒŠFtAúù°f7o`—ï/™ŸŠ(UP'àå‘2‘8Ö­Cö3Ää/|»©þ¾ë}üwsP6ã³cˆéÞÚ¿˜…$ÐÑY¤8N¼»î +±¼›:éÇ‘Âz¶êoþz±06Xã™ë-wˆ¸‰Jm‘ÙBq‹kc‚z6¸õÿ Ø«˜›\¨Ô7‘Á´#xòKÍ +x º­%£/E-m8²ÿˆFòè4³ vœïo (9ŽWM" z×C'ô-Ùñ”V²{Ã"øéé§4“¥M»ù!?ê’5ˆòWÿ¶KB-gC5³>“QäëÇ ü\"FòW|.±æ€mô[¬?ØÏCvÝ"÷.^wÝÏvšÏŒ%GôCßi3d¶>âû£zˆ‰¯¿¢ÊNïÉeîRYø•h¼ J/ÔžÙe„WÕZï̈4{ÐÃ/d¾wdmø³›Ð@nðÞþèàBl¼û¿$SÎçï ý–‚ßÀù˜ëýÄàǰ€†Ö ¸¨¸LÖ8¯µm¼›CÜUB&É&驨óXw¾ùo û~*œHÙ÷3Yå-§fÇf‚lãó€—íš¿Ä1ü‰hn 11Ë©•ynñ± žx—š*ƒe±2ö•ï˜}ËÏ‹ ìÒ‚’,Èò甯Èÿ½õÈçf€ã[;?]Á·>Š|׸¿ÝO®¢aµ6u“æóè,üÚõ=ý@„lE?®÷¿ë“Õ[S);Á—#_ƒ ñ­•óǃ[Rýd‚-¿æk©)ƒ~@ni*#´4f#ø9¶†·°®ëÞ|8uýŸg»GÓik.–Þ@¬o GôÇ—/¢“+þX¹›󵦿¶˯„¸ùïÀÔ2¶üû„Ú:3¾ΰ›È«Á?œKjI)ê»"ÈxKöÒ¯1%u /#Á&l;Ý_ÿSN“jFp&Ò­×'žïŸå]‘ì þ¾ÖßÙ?H¼~ò_õ^Ñ~ÓTæ® JMÅû¹oÀŠf¢­Lìÿ}Õ“L²[FómRcÝØ¦Ͼ47Ñá±{Ñ÷ûróà7PåÁ~„ÿ-'.šÂkj››~4—ªÙÕŽíµ Y$¸C]¦;Ã'Ü@þèä»ðh! ñŸÖ’cÿªd–ÖWƒYûÿ¾ZÂË’ù–ÂköQý”&W¹+·\çÿôvÇ×®‡ý ¿mxBs<¥6Ò©ú[¤i¯ŸXi›Z\'ƒ4ÐÏ´’?pVÏù³åÆkk+ NDµ|T|…-«•€i ´Ï5ø¦Ákuâ1œE¢Ny«1m=œæ:÷CóÍOøÉß[°îâüG²v;ÍFÈO6ÏáÎóh={Óm‚'´ÁwªhMbcp=äÝÕR ,·¥ï“ñy¿¢§|z$¸_qû •ƒ-¾Ü‘ðÿHT)®kûiìó8oxøuSá–¡ÇeV‚ëõ¨ÞÚÁbÚ%<¸»}ním§uÃÊ'ˆƒY È·¾Gâ0Ô]?™¬û]­#»Æ&ÿ¯!k„¶„èâ‰v êìãßW(Í-»ÄÍix¤÷ˆòÉä·ËÈÿ1|õ#¾ùe¤]íYÍÕÚ,<†®îÃk_X ›l½-‘9®°”׺3¦§ˆƒÞû¿ÂÓ_h"$O ò»ëãŸjB‹Ïßt²³öû}} -”àÙYÏv\ܺct®Ë]:b6:|e·¿Þç0èð%ºy‚/(x^ÌŸå,iᬙUG"7ÑÅɽŒ8XEnØ öG ÞÃ`í”TÀ)¨%7âI‘¹÷øº_‡úÎÁ–¿«¬’Ä}l:¬å´È ÙHd>^ÅçÍöú©ž?i}XÞ $;@†x¤_Ûlëè¯}íbí`6tÓQ¯÷õàòB~Ðþc¢ë•À5Ï–]_}ÇZ3élñ%®.•ÅøÀ&ƒôÉ`3ý4‘ï~¾+G‚é?óG¶¦ðØæÛUô¡‘¨ýýð¤RÖÊjòÎC0½Sø÷HP` <¬yø¹Éß×`•±à€©ÌM„Km}¬«Œ ¶ø¬C0Àˆ–Í®Qº\GÀ€×dµ Ù7ÄÄîm&êÇÛoñ†Ðv•W5ö]à?±DH °­8]½!o¬õ» nQùLJCçÂÿoó™n^2=j<àeF«,óƒ-<ë4”¯þ2Ãâ6nñ×öÇ·à¼;æ:þ/…ó~‡ß¿ÀÆ'ÉõÉþÁ>W §³òîx§uE²´vÐ_¹Ì_ñS¶;ôkÇñ£'h©$Œ©:¿çØB´õ©œ ¶ð¬¤ZVJ¬ßÜÔ’¹X{¿¿òÍMkvÓ Ö€z`½KñõOá±]m–ü̺iO¥ÜÏš<÷3Ùp¤}cIÈ„ÓÈ›÷4'Ñ¿w¤£ÞuG„öùY‘¸ÿ­ #ÿe“›Áž•M+ËHÉëÓoçN÷+ð{ÙãúÐÛt4è7vྶ&à^ë§-¸u†7Òî:B3Ù\ëd߃†×u<ïyLmîªù, ãCuǘv C7_"=xñP«Èë` Ï «½$±¬Ðâäû4æ²óe<=9+,ßÞM¬¯™ ÎÓFdûÒÔ° àî½áÁ•©w§h5êžž^ýá¹,¢¹ à%‘ŸÚÜL=ã³òwˆŠådÅÄì¨eäC°…÷k£Ä’~|û8DkQ*–-xo s»XÜ1ÿ~DÄRÐïg´P ¿¯aϱwOС1™Þí ¨¡¨å;èPp½öCÝÿ±\ævÄ4w4Å]¾ V&XÏòé×Áü/k­$‘ä,×ë½66rø=Q;aa7ñv8Ñ< ÃcÏ@À}Ôyî|Xgä_ 'Ê ´FnnÎ$¸m <{. ñ„ŸýÊÞûž™Îò“ü•ç}ïÈšN§[ð¿¬þð°’ 6[Úìþ>™Çû™–±ïL< :è……$»7&/ºëž—ÃÒëk‰J\é§"t£jvS7Âþ\ÅàÎ$IÝ\Ñeäqx’›« ð¦Ü¶àY%åG9*YðÖR0•ÅØnqäwsÜyë…èd)uîõÅ3Ö#7ü„ w>0ln+~â¦Eüè€ýŸñ{ÇNùÝPkù{/ÍC 5-šnh=%~ˆ˜þA” 2YÌ\Í÷¿½ pÇïèCë?m¢?¾Ý<T4´Ÿk.ï&šóV^¨}x~:Z{|è_ªê›øüuÞ‘™ú÷Œºžè`ƒ-ö_­RV.ëgT‘ÌíòÊF}–fÿ19`¶¿.x%5Ñ"þc9(ŠgKòS ¼"c¼€Ý¸ü¹Eç`}wdë8äûØ—–×ë ±õPiL–ì¢úÿ畜Ò¦–ǰÚb–Üïÿy ÚägOǶËüµ_3`w·à|q­0ZjA…xPk€ø®~8²§Û'9 -\Â;’s?òV!¯>#w4…!õƒ-³>Z_[è¿Zé$™L“™ZË:[]/ÿCxïI?Áb“?3îæÃ/õçýöèQ}‚§%‹çF®Zù?…åç£ÆU[†ôîˆA|ð$§ÕAúâè5 ¼i"Q_æûm–ÎÒ#ØBÿ§•Z2SFÕºÈÞê®ÔnnZ÷F<ÞÕC¡©í¦ùã'Á77ÅîS«Œ?ƳK W^¤uGûŽ §sê&iÕ·éæ8pndïç]?ziµ_j©lÿËÊ-%$…ä î§‚£ `¾QñêDòMí¯ßû†B'F$ǧ]‡Æ¶I [k4QÝšá5í0î”GûÄy_< ¡ ±Ý6ÆžÙ=‹X«_…Èn%¤´“ û_ÁÊ)À«Œ {\°03œ·:°ÏïlMNÞ+jÕ5“µ§fLdcm„M¥¶- *n£ò‹„ïœ&'·h ¬ð°MòžoV_‚yÅ×ßZ­Àæ3·¯¨mûP˽÷û{ ƒ\å-ÛYd» ‘ñ÷æÄu5p½ Ú)än¦Saêš»ä€Oy¦%ºsGšØh>¯©§fn^ÐîÒ,Ø‚þ«ŽÔ¥J rµö]ïÃPÄÄwÇYA2áebÞMIw×o„EêêV‘ÜÖƒ 'µƒÕ÷!«G4×ýKäÿÂ’¢±ûàdc[kGmŸ9ì©]‚-æßXm$9L°)’f#–­sSÕö€¿÷û\¯R?…˼Ò$Äõ ²…˘Mðù¾¶¤{‹Å£òL+«mb…@…<~øRe‹@¿CšM[[È¿± I;¢à•|¡¿ÁÒ“á¿"k53·å3òÙSüÿ·_ý~ï¬+ø~—ZöŒN‚Ù¸™A1ÐG{F¼d"“äû¾ýÛz[l‹5ž ¶ˆwÕ”m’ž¬žŒ(Eô$’£âͱ-ÈÆÜ]¨m]'ô>èçuÖ½ÖŽÊw/œéÖà u ¢&õ`][bóAĹè¶^°Åû‡VRª¿ˆH[ÌVa¿ÔxB¤¨ ×/ŒogÂbÙH«}ÒÇÚψïØ??9³´´í¶ÏojÈüyˆü%Ö@;[¬xŦæs³Ë:؆g:8ŸIÓ#Çä.×›=d?#Wls B`ºè ÖU·°Üvÿ¨cm­7šH‚æ½ý#+>H5Š:g59}™?æ3 —ÉÇØl¼¾>ln¯ÆîÇô‚U |í§"\!Ç·ì<ßÝbºR¦“û+[7ÝlþÉUZÖ‹êN©£i@ï9öÞÃa¶á×Àæw,Z | Z ::ÊØ‹½7Û&x^[ô4’gOÙÉ@‚PeÉ÷¨®‚¥Ã?¿ŠK™.3%¶³Á—öûζŠÛvë¦ \·Ê¶;0(pÔ"RnÚmÛg'ÐØS‹è˜`we9Ò‡”#}ÿì*,ÕÑAeY*9`ùUðéN¨7ña™}hêx`  Ô t£ÖOkãy¹IsAÿ/,N—J!zÞÏ?¶òIAi(¿Hm­è8؈jIàZ`Ž ” Tך^?VÕ=RÄOb3µµšŽ”ìä»ÿ[úÿ7’^2LÈ÷+A3›¨O®‰5¶ÆC2J)é¯%"ßúÞ¯õÿ/ì„¿FÒJDé"3dª,“Åò9Ö­ J4‚56§v(Å#UCDOƒ?ןëÏõçúsý¹þ«4.Û_¦Ye÷ÝŠÃ K:ÉË­’‘Ô/è×´ÿûW~ßþsò|ydí§­&5%3Ì'Ÿt’AÒUVËh˜O-˜P¸bE)Â;þ3«vÍB%JûOgå $‹’CšI½¨ËuˆÆ°Öžhj]‰rH ä/ ɃýÕÿ×ë3ù.[M6HGßÿ߬«•´¢z[âk>Y¦YÍ]ßÔ Þ߉Jµý` ,=@WÞY)lþW+´‘e‘\‘”:A/èCn鬠…±*ÚœÂ2q«NÝ?ÃjXbK`“m‹=¤îa­B´” ÁýnÿÞJ‹ÿDý¾\2êêžHv_Ÿù³_•mµ¶ÆÚÕŠÛ÷VŸo,§ ¾PÚRãK¬Và’ýHýÛŽ)lAþ¥•|«$³ä”ÄÕ¾ësj¿Ëßí|ÎmWõÙŠü/´ :(`uxö¤ŸøO˜Ëm„5³ßôò"Ï÷ýí•^ÒHB#÷%‰¶Õ¹úDSâé·õŽ®Ñsh!µѳêöô$÷žú~À-·Å³çú…Á#jØgVÍÎéÇZ‡,ñG;þ•„,^[²jy€ÄõžþŠÄîèApà˜ïsM³X2ìÙÜNîØö‘¥±äh#·ÍÆ'bš»â!µÒp…?Fï÷ßW â>½Û#ó|ÛWX÷V‡Œ®ÇST{Ç£al«&² –ß>÷Wо'.² õ+ô’ØŸ+) N·óZS×À“þ8È„ µí5 þœ«?Bú9Ù\“úHݵOnOóI4Õbp«†Ä÷ÑÍ|å¥ßõM3“Gø.Á³u;¼(s°û‡Vv^i"ÉÁ¼”øp" m;ˆµèà•º=¡üõŒOu%òæ·TVÎâ÷°ý ߨõ åû§;’F[U['*láþÎÊ)eÀªâRP cÅÈV™bÙ)ýIèd¿‰u/ª» b»ŸºÞ×”üŸ‘È@ü¿W×1ö¼Ÿ‰wW²Þ6ÕvOˆ–†ð¨`÷ûûÛ«*õK*ßFuWÿ|j×ôˆï®þ\Áï¥Hî®<¤»üõ|Ѭ:Ï÷"·O6,ºz¥wu·^%CijÖ0ƒvÌ®Û][F„ü¤Íå댥‘äÂóÅ[y²Wd¤Y¬ ±½›l2Ç÷w M¬¿óÞ ¯o€fòÙ­ò§ R^"ù­Ø+Mþ Áþ=ðÿ6Év£ƒsZÈlAÿ‡•›-*½u^Ÿ‰"Ú¿ƒõ1½”Lp¬w]ß“ýNkB;£ÀÅ4°Þ§ZöÕ~Åï/èf"àzH ,ë¯þ*iü´ô-v Þ˜Uª„ÈÙ¸å¨ñzÉT 秀ׄç»''ß%æ7"Õ9p핟q´Ž(ˆˆE„¸=Íî¡b–ËÞjX‹dÃð73à>¥¨PMVçun.Ø[`e´šÔ q|¨ù>³´–3òBß`ÇÛØû7@Æ?ˆÌ#ñø)¾ðUÜs°ñ9>Ñ¢€û‘üÕ°îJÿTVÄ6j}ô³í<÷û½øë²û=ŸÛb›i¢e@DÁù?­佯¨×ã·O@ö³¾»ÉNßµÆu³Y‹¹Íï~ôA >ƒã„²>>ò™›óV³ƒEü$73(¦åsðڌĂ»Zn¡·3ˆl‘ÿjå’Oÿ´DÞŠ¦æ¸í[âøqXÇ‚è_ë8´qV·áaì¢ß Ã\Ïç›`À§v™œïú»¿áwu½ûa¢%Üá2¿_ò“ž<é—ðsX³ø‰ !c¥’dRLZÊkIk®_é]ßñùšç=#ù݇Ÿ—Xõ°Ÿë  ÝY°ð –þ¯îHœA/[V{¬uК›„Ž ’ÁÏ »ÎýhöZ¿²EðŸ@‹Kè<[°ÿËÊ%ŠJ'ìËnÒ3doų Y®!w®£Éjûü¸ÛÈýß‹›ÛÕ˜Ú ¢ƒfDI!¼ÿ±†-¼â=7Õͺ…Ö–s»É§Ö²96Ýjâ÷µ"ˆ“'Ø¢‹»ö;•¤”³i~Á¶g‘Óí\q@Þò3ÖïyY€D—¼ çã·È‚±‘õ&zªEð1Þ}CsÛ|ÄMÉÅ_›Á ×Mõ¸ŸºÒ_5ß“L8ÓÆ[g[eª¹BÄlÈ4,n׿FÖ šGÂîÏ=‹?€.\Ô¡DûQýÉ—ÀˆŽ~Õ­ä…åú)VÏ#J‡OWÆÏ?¶Y|Ju{È;)>6‚™çñ®FxI ŠÆrØe<`,ÿsðWn4ÐLj{@vK‹€DŸÀû§ƒ€SÉçsâk/•÷¹ßí¸êÑàGÉ 9ÐF.dJGuxNgðü*?×?{.>sé·j\ËfYàÈ×mß'ÐvT4DT9¨tgHr»ïïCÚäª×T9Ï}/÷ý¾×Ó&¢½ ø—º÷î®þ_‰Ei^ ÑÐVt~"bû™Ú(ßh#‰Šµ:¶tÇwéûþ4·þVÑê ¬O·†àfÝ•–´]Bâ…H»˜ßÁ÷ñv×ת‹ßréiC~G¶¥ÚÏÕÇ«»Ò#Ñîú†ÜáÝ_ŽÓl§ßß»m<ùßiFP²ÕõWC¶Å7:X ûF'Á7‚=/;y¨µt£–sG,Rå­÷Ì'”¹®/Gu‹×I~ÓÑD_pW:))'d*°øej»ÛþøÎv¾ù䜌üãÑMªùšT2®ÿ»ëÿ¿çVkmtÐKc¡·ä8·701辞sn¸ÿ¿A¦t³ò÷%ñþ DFþJCd³SA¯Ýdï«R”ïoØ0>ØÿÞ—ÌnÄî´%ò§·ò¶J“òwL›ƒ_Ð=d´Ïô…Œ•ñ2FÚPõÕ^0…6þŸ”cË@ÐóÔ@A¾ø~DÿW%ª€%dËÖxTgý2¨çsûc½»¤8ùÝÝ«ë¼Yc<6²Ÿk1Gà'ئÕÈhN}u" Ó<ºXZÉ<‰€Oü¨Í´¤ˆj‹Ôe·g¾›À˜8ûÒܤجX¼4UÓ×ðŸ¾ö­»N\Ûõ¨hnåd‹LÉ…‚Å}ƒÜÉ 11úÖ÷\‚lCñâŒhÀÍó+bµ7:Çí§%51Ðûí´#õ OÜåÕã±þ Ï–\×û1&¸—Ÿj Œ9¼¥´Bh£”5±ÞA=7Ÿÿ}¢ä'–ӓͳ1‘þ™ÏÚÑÀ÷£ þ`äÚˆûŽå‡‘zQÑNë‚ösÐÍBâ*|¤—Öƒ)žÁ“ŠÚV>mZŠ=ç³\?ù¬ø~:ôâfÅìÕüd‰®vÈ®J0÷Ã$‘ê²@\·×äëXvš\u„_‰ç> §cÁžÈ8“ —{e…#wBÎ.nöq0RÇ 3Áù¯ÉüU±þC˜`7ëg©@A·øpœOºLÍ”Èkµ©¬rÁêðyìbP¯Í*•e¡LóòÂåba›èØÿƒÇÿÝX÷'¼¿›6BÞi`þ3ØñeìÝk»¹àu¸ßW ÂëGxÅ÷ȸO]Í›Ònò³È·A×þ<¯zî{¢½EG%Èψ¸x&Ìp©{gJ_½BÕÿÖ÷*{ÃÛŒU‡ønç-©þF‘áÛ€nÃ}×Ë] ÿ@]£q5^S’|8YrkE°òÏÑSèò |`Ú[ GØéÙó¢â4±± ^}Ïz*œàÿ e•´^å¯ Ù@€îØÑMxOé9ßhò[O"ùGmA”/ÀÞ?bñ:¾ß«Ûÿ=WórÕnA¬ø±M¡z¨hn*¸ë¾Õ×…¯ùŒiDˆ›“0 Néθc‡'y…›žw[?ò}p£HDùkúɇ5°Ê}¬Ývûþo‹Ñ‚ë€Ñ“¿· Í$ß×x–œ‹g¬§J\é­xJËh& §™µ°¹ ;ÑÀ|l½9'û.¡¯ÀpvÞMpLè¡*¬ï:L:HPšzø­sþK²=ü÷"ßÕõsþ‘X]„\nnåtø¬ëñ¾m ô½-§ }‡à…Dòuª¡ìòFcøéOgˆ÷ý°(×zÈ?wo¡^¾Ú»É«øÔ0ö&ƒë&c~f]à‚í´EåÿBRJ{©¤îî°~6^p?=å{ý!—ÏòGüúh+ß»öÉ¿ àÿû6)š+J†Ì ×uÇF7S1ç÷,üe€G•ødühdü#øÿ^Ør%2 ;w°ƒû©µ´0Z+ˆòg•„2P*ó]Þ!Õ1ÿí×cO×Ãâ"Qü[ß&6¾CšŸÐHduóVøî6q¨fRXìÔÎyŸÙ„~¦q[BÖøÔOé F¶ÜXÞMV[‰¦Ràó—ðŸ#ä“ZV]ƒ9 :ñ?FË)<`:¶?Ém–\àûŽÑˆÄî1ìïz¹:°¾Ÿk1߇ »4¬èkß7}£Ÿð9vÔ]ñúY¼fÏD Ä‚7Ä0×%~ñRSžé/—Hˆ¦Áä¿i$'Õÿ9YÍ·YJ†:¨n’å ßñe;¿£š§7â3»Òuã÷0¡/òÁ¦b ¨zOãÏgáLý`ÀCr*¯xŠ_&ÓÅçJP ÷õó€oùyÉ×À‚˜¾#pÓ ÎANý›QÁü Û‹Mw`ÿxøH$û ŽK^;,ñ\7b™¯~1¿çóšXr¯t‘¿8gGQõMâOy×5ü<†ÅµÖ}º+d~E§n?­ÛC}ÎÜ0¨ÇóJFY‰d;ñÚ¨Äü%þ\GgçÙ®·ÿZbc>r» C°ÿL™å;<Å_6áëcÈ ®Kô0rå2ž=ï÷‰Ÿ„ ýʧÄÿ—G—-'UÄçdw½ÀOz%ÈGÀkÁ·Êm馟Ãò;øùÍÇøÎóñÛJD§ë€´é6€Š«õ[j¼>d¶yhj0­LGªxÀmt³—û¿¢… èuSË ?¶`Lj­ÜvTjYþ‚D`{)FŒš…¡jk¥¥ñá­Xó|ø*0ÝŸÇY€L©´6¿'“]'»Q¾ÓÛ\-†ÇG´F<î&^Íæßªèd?ºÙÎ-<蟟jh¢¦·`_*‹„?Dö½"JÙwR>Èò'¿–Šdª“ ·›îQG¿ Ü™]w~ï vžŸY Îg%úá÷n†Ñ´ÒÉ Ú@m­ È‘|ÿ¯ó¼ã,:Šˆ§—@òg>ž…ýº~ZÑÐDf­(ÁœþäÖOò9õO4Û‡—ÃÈÜ0w¦ÿ=þûŒX½ë‘~?¹}'~ÑB[bï¹xJW?¿²»•²ÎšÇB£­Ð¶éA–œé;_Æ ÞkÄ/„ÿG_Ooû«¿ª›vKŠJ÷ Ë¿RKjn³Ïjn^Ívìü¦êθë<Žb{7õr:ÑÝ®; Ïw¡¿Å‡{[Y›Ž?§RŽˆ·£§jþÈÇÞw™Ç$áLÉý)`V+ˆ°{¾îqWÍEÑ*27ÈòŸ‡½“û|ßMÈ6ÕçIð)Åwûq;Vàà5£É÷ð’šÉ6ÛbnßXwMd¥í÷YQÇÐ]*Õ0ÿÕh)8Ÿ¶04lb uÖe²`N>·–‘¦A–^@þ‚Ô¿oðþMàÝu׺Å\ûKþZ¿høí|¼*ø6ÜO½ùïÈnmm¬µ´þVÿÿaï, ­º–5]Uîîî.ÁÝ] 4„ $@—àîîîîîNp×þæLÞ{·o¿ÛWú¾±Ozdîq8ûlc—ýõ×ZkVƒ±sLrÛ+Þµ„p³dܤ·ŒÄH?O9ÜÂ#¸ óÏb]É»a?Áï‘\{ÊA‰lÇ4¬½Õ Ô)™ÉTuÉñ;@Äè°”·ØrÖìNpÒߢ”HÕÞ¾ñ­Ú!s_?ÝãÑ~žg¿'Rvzû'ÄûÝ5Ñï}5èÞ{Ü_=R˜i{ƒZûþ¶òé4é!UøîY±`(tØ6i~øŒ›]v…zð=h°¾3t¸£wÑI,šËº`ýv6ÄZƒÉhÑSaôõœœätœT7E8#uÌxO4dD¿A‹t䃒Ö7ØÂ³Ré2)&A¤læ®j*ç»ÇÒãõ­­¦5·H¶B'‚+ymGëîŸùÆ àÓWíL1>µËÏ] ЏÙW47¯2„Œ}â´‡,’"Øí߯ ØušHNêûŠÝ§0܉7ÿÌs;´Œ5ÅKJÛ§–Ê~Ñ~Ú‚l¸ÄOÝ ŽN>æ¹gàÿj¬È!kc0ଯÇ’6#NЯÏú•[{e¶ô’ðØú1»Â§žOårJzºï>ÖãºÿµÏÍu»½ ÏsÓžêû‰Ç-´+¬p€ÆµÎÖùŸ{x^ ÀŠ¢¯4p™°ãÉ|ú´xŒýœ¨ªlÑ_㤖ì xï{\nDš¡ºÆÏ³ÇÏx_û¦&šk çÀzá)Õù½…{M¨¾¢2è…ÆšÙ·Xû8Ä)bÈõQv3”.ò3ü$µ xÆIxBsxóÁü÷5B²ÈAêÔ”Xë&öï§cüÞž:؟Ϙ 3t×rÀÖ“ÑI'n xM7äé«y±ô`mFuÜ”Øæ»Já¸?ÓéæÈïôÕðPà(5Qh¬»:”Î ¶à¿¯æRV²QD' ^Åòü¬î9H5˜\0…¿æs›‹ì? ›YTøŽ »ú(’E¤Þ)dç°·Ÿý…º‹pSä¶sÏ9ŸnbÁû³ ­ºM–õÁü÷•N:È 9@ußÜNg³E ¸;Ÿ}iÿŸŽü+ðùÄ»úÉM… OÆÏųñÈ›Ç~?ö5Móóö–¢rïý™q÷È~2bQk@=\VP5DL¿q+¡4”Br û?£>‹—þŠlÍ]ðožƒ=WPÍ$7Ìñ×r'†:ébÛKü&)ȹÍωAT ñ¯wgRbPã|CpsÏ ×Cè šUâsk ¾ ¶Ø±JS®Ñp»ÄH”„¯cyÉ{×á±ë ,¾Ž,0ڟߊõ>‡¿º«¸Ž‘ϲÛ~øÝHÐa9Ìgè·ZÝõ ÙðópÄd…HdÒ~¦B4²_»/“‚-ô_,·ä¥ìÓQÈß„ž 6ÿBoðÏRý/Õß2ã||`µ?Û› nÔ;¾ðubn;ÀkÜ1¢]éÜ Yw•|Z뀮ÊÃu¾‡)FÄgºÂŸ>ô]À?‘öÁú/Ö‡’QJRÅÇ®î<€Ûµq‡Jfçûá6ñì1RMðûïiØ‘»ª»‚ŸÕÀî/Ñü‚¡m¯:‰'ÄÀËïQT¤Ò[cð©ö¶Ç꣉oÉ}}$˜×=ýŸ+£¤–22Oº_îê÷gØÙÍð½H gw×o^뎩›ñð+•]^3޹¤-©‘šRf6W?Ÿ‡ž#h%[Ä£…‘½»}fýìÿV²s°Äµ’¦ü¶*IaI.×%‘ŸÓû!~bâ×e6³|TG%ˆá•z ö–¨¾ _rûƒÃûþþ ²ZU䯮&jܱ ëÚ˶áû}‘¿£M±{6Ë¢nk •ï_¯jRCÒÊd9®n·b1~^Û “‰jåˆâ°–ŽØpG¹Üìwí–»žuŒ¯àu»År`á=x‰›ý‘Žjøµ²íÔDÝl‡•¤t t¶!òI°Eýës)nÖòYJPã'†é;Äjk­@í2Ht\üÈÏÉ‹g÷§ Šk{mÞà®kšÀ;·âý•¬8bNô“Jw‘M¶y¶À–Ù{ôÿ·ÕP²JTmНN°a–î’ĪŒœ•±r{‡ü»5¿Õõ»XªÙ4üþ»è¯íw{[Âáý4 úJeíÈû±@É6Û®ÚT;m m‰ÖÑ}QëKmì“QKÙA O»Ä·oˆ¬]ˆëÈ ÂjcÛí' ¿K‚]ë/¥ñˆGTP÷ÕõC&¸yZŸ’ýÛD;i‹õì¸ ¶ˆgµ§h&aà3y-µŸÜ=é?"‚ ÂvZ€oÉ刌Ä`c Û§_‚¬ÁÂTͯô‰f9ƒÅAû*øF5‚ýgê)!Eƒ-àß]=¥­ –2°ÕÜ|û66é>·_È_ŸY$«o ¶õòœ.•Öv¶Ø¾³¹ „›l[ÚíÌëÛD­€ŸÜÒ/m:¯ìÏÎláþÁ5DbPé„Ù¼²ÞØ=1ru$~Y)|!9>ž«´FVH»ØC°b@&Š|ˆ´Óì,ž’ÖžÛV Øaí`<ÁÞëö¯®’Z?Ò20@7ÛºXÖÌâÀ£µÄC Kió¹WÀ ûœåçU_¢©±xH Ëm#à}'4+81€WçÑ?Ší[«äœ,•òN[ÃW;"mûÄØncຠìk»ïæk ‹†µ£c{×᣻¹kIÛ…}ßøcÜýlYàüá#[nɬ“]Ý·Á~²Mv ýô'Z¡ÀÛ@ ˜cu?õ ¶8ÿª._I+Y"I5¥ 4 <°¤ ,‡ÂkNØ·%˜`DÞÀ={oC›¯@ÃsxÃQkȨó¨­BÂ.ÿuµ‡u’u’RãÛÇ¡¡Z^Z¬@¹ÀØ@„À@¶PY-v¨0r¶Úr~ ,EKÁ2TF¡´f›òö¯®*TÇÍä–d%š¯Zß@ÆPBU U7P×îØ+øN]Ý!Ïå¥ô¥2ÌkúNãh'*Ü:Áþâÿ¶5UòKx).•å”\Ñ:ÔýÏa:Qµ¿^ÒRrû½Tc±÷wÄz+Ð#$ßú÷¬aÒOæƒ Ý‰Œ2FvK]©*e¤Ïtâ¾ÛQR<Ø_ôÏõçúsý¹þ\®ëJ#¨bÿãšÝÂ’—¿SHÏÉý,’V²Q㇔¾fÿ¾•©]çRRPRI *£®RŒÇ*‡2Àïãó\ZI.`%¹eÿÿ óý­‚ÜJÈÇTƒ÷¥ –×Ër¹Wy{Ÿ•JšT‹è­ã5¢6àѼ° bh%$t÷ú]®GY)ì:H²èj?¹ªõ¶W’DÂû&É|-l“m„mµ½ü¬ öo®•u'+/Eñ„?^çó¿\©±p© ×]'ÙôµMz kµì´–ÔOÑÊQj­õÞTkgÛE˸mó¬™fB?M$dôøú×V1IH$7—«X»†ÖÕåšÂÚ[5Kg¹,¶}%{eºØjç­­ò“íûÙfÛÉßYñ’ÏÐAy*§?âúÛe÷ÇÂûi7­×t·žÓ8ÁÎkl+k¤²Nã¯Z¶Æ¦˜ë|^ÜfØ`Ëb5­’¦2NgStš¤£:úãùü•\Ïê½”ŽºHÏ"}"Ëf1,©¹+›BÙ$«¥õk+h,•ï–“ÙZØPb ˆõ²=xÁ0+jѬ?qR‰üÒÏ{üõŠôÅe†|©›5 ¨—Öâùþ5ɈýsÜRØ­®AÄ(–éÝtŒo­¶ @#Ÿ =l ¿ ÛGÖ^K¡ÇÒëó[)%®Ïa«ÔI÷F“Z&;Ëý¢ö@oè3ìÊò[m£ðòª–í¼Ò\Ö¬Ÿ¤³|xAëÆ-¯õÔÑRî¤ø~Fi#‘´%²g'¶ã[DsW0?ö{z÷é¯úZÛÚPýŒì÷Fãú«Ü£Û[}¤e­©•±pö ¯If­mƒ}mÑÖ\ù$è½Þþ±•W²ÊG’O6Ëy-š¹>¿eÁ¼ þŠþËz8¦W5£­Õ*h'9ú©g¤!3ÞÕ;šÌRÛcßçã–f! SLl2(Ò} ›”–8ÈžQjcëˆ zL» ÞÝgëÀ]ݯ®ûñ#MŒ”íô¦fð»ò`ÿçhå’†ã=n§ÛcôVÒ¾¾%3v%c~#õÈ!y5"ãU–q2 yRƒöqùÙ©[°üjÝ¡ë¸]Fâ Þ‚ƒñ­¾Ôè6€Èp³Îid¼å$¨xÍïñ+n¥ðŠ`B+tÒ)Ÿ‡àëòÀVsÉ@™§‘;¯½Ðxºëátü÷ÎEûô9’=â±Óz-Õ¶ZT“ƒy‰ÈÐÆ3"à¸ÞâU1É…),*±ï®íi÷À‚6\ì=ïkåÀú±¥ŒFµß8•©¹ýŸ‘ç’ïð]ý]7üü–©{tø’ÜÕ.h! ÇÔ÷Nê&ìÿÒ_+^‚ŒPÈÆX›eáÛaJmŒ?RòV¢¿•Ô—Ìæ¼Ùy¯lnÖƒówó)"ÿïh:’ŸÐöÞOÄrW>¹ý}™ññ̰À} ÀAžÏWJcÍ­ÕÁo?ˆæÂ ßh*ªädÁ÷¯V>øn9ù^>ТÈõ ¼öÝ_öëÝKž?¡Cñƒ£è!,£·a@QÀ´{ð£ÖúFK ½›‚’Âvã+›ñ€LxÈKu?Õì°¡uÒä?dÝBÀ¾ï¿^nÞS^<³9<÷šºˆ÷ñüºAÝì›Ù _Wu“¶èêjzÅïíð.©¹y(qÈöµÍáÆ6ßö&yàW°ñ>RÒNi<ë.³%v‰êp–d rçÿ}•$ë•–¥²SvÀã]ß"× ô=RÆ—Wâ½u<òÞÄû]W³[dÁÛêvÇÞÓ‚T~·ÀÄ0p ¢°Ÿu…Ÿ’ã¦a„±<ÔŠ‡È,1(¹ÀVØXmu4:Øbÿ¾RÃw+Âöûò­ßa3w—ÂeÜ „çz^g ƒnT¿õ‰žAî³ø€›êt]™,š‰ÝЉºX›èzpPl!`®ãIøPd{¢ Á¹Wh­$3?ž>K§ýLjÐ~?á-"å|è(þÐ>´ßÛkb¦:l0e°Eùé%…¬7Ù&¿ïU‘È\ÿþËdòpÄ÷¿²#–wXv[“øÞ÷‡aðôñhÍUHnö[^ð~1x±ˆ pG碅ÇÜs=ž7ûÀ€ñxÀâšíµýÒ,DIH­›QÒ«Û¡‡ÚÍYÞõ¨{Ï·v]Úvèp<`¢gôo‰ÃÆ·ùí^óRøëý®á¨uÃÙx¿Kh#’$3¾à)‡}·»fäÂU!ð½Õ¥*ꥵ@௄pžRÒïwÍgý¨]Ýõî‘`?nÖÕ*ë;½×ù¾—g¼#“¹ù8®kfmìšÍöâ9où„CàÄ"¿“ê9°&üHÝ -w=tSëdŸÙ9ûÁÆÙ8a­+i‚-¼¸iwY奤Á–;©ëi#xk ²ÿKPl9Ìoº›^¦Ý¡Xµï#U ä¿M-”Ð"iu­I4g7×í` š£mlŸv /8.€®ÿMQ¢8Ï|ˆüîšÊå2Ö‘.ÈÒç’LRDÎb¿MÈš¼;rY"ßeû›È?Äßäo«üì·GšÜKß/lûä¬42×ìWžŸ¨A‚+xyu¿/ü°º).7$AæVÖÈ`mñ|–B‡J¼/¸ËÃj)¥‰ú Äi\{è±j'Õí °ËÍ‚qû@÷ã¹l¾ï¹Ë_÷=LŽÂmÊJÉj¯ü.áïñ ú’. ö{ö”‘Xª‚¼nä1nGñ üe£Î‘ÄAŸRPÊÊS©d‘ú$Ë¢‘ÃßyžsûïûGý¥á°ì°~Ü…¼EúGÚW?'‹n ¿ÓI®´¶kp ð¦éh),•Dq0ã4Ú¸ j\Gf¢¹_õ–D–A–?Ìç#ýxm®+c2@8òÙ5b÷&öß ï‡ê“·&àÁã‰÷ÑDùzñ¦ÐÁÒ[òp¯·Ùèãk늇?ëãÚDüÈM-^V¢J4«È'TÀ7\]ÑY«hí ÏA‹÷]G­ºƒ|ŽzF±ÿuUÝßÁr³ö„Ïl×h&½ß9 ŒŸ‰W¸Žç#4¢¦Ô˜àä(íCÞë¯-”fÖûhÑu<¢ŽE»$Ñ@‹3ê¼+hÍrð÷y=*MáÁ\ñ@àÉê¦>Ŷ„T½ju`1‘`áù÷žÞY«3ƒï‰ô¥òiÁí²b/ýZKáŸêø~þꎽ³¹¼Õ/À›VÀcÁn ¹päÓ÷àJ)jâ·¼¦ ¨°›J0˜ò§Xx`n²ü2Me…a8‘ýô›7¾ÔM"}#Vþ(bUávÓ‰ˆ¶•džs KˆåÉÈ9^ÛÂ÷ª —†¼¤µ¤zØH„,ä3ž¢Ý_ñ&×a UP9x’PcöµŸÉƒ:ÿàC´ŸGb!Ç}­n®Ûç9é²À)Æ£kùùŠœÖÖSÆŸýpÚ9Î÷о×Ùî/ÃC*`ÿ âtjÛ¬…]óGMÖÃ%÷ªãÄ‹ù¤ÍÄÓcòc9ªÆBÖÃûC]ØwðV^j°tb~–Ѿï-"ÿ"h~©†ϳ¹uÓNÈï:=ƃ½Ô¦ÂݯÃðˆñü;pïÖh­ƒ„l° ƒÛBþãä¿sx’ë„6EGâ/Ëtïþå:ì'£Ê|C&]"ÁìQü+#[¥RF°Ìj¬>›÷çÄ»{cë–È6R¿Ä7RQÑ?ÑOMl²ƒï'§ýˆuÃ[Nj ö“þ 0ãƒäÔGpÀƒ~’Î^»Úåg¬-A¯5‰óáÊT ƒå´L€ó¥#öú^žnâYO|ÀMê…º¨›ù±Þw7mª¹5»^‘KrQIXOøÌDx2tã:›¹¾™›ÑÊZ¼~~‡ç»þ_‹ñ×5÷¹ß%ù†ÿ«Gå/%IeLÕ¨VØKÖŸ‡ã§_œõó¯†Ûc‘»1pŸh¤…4 ð‰ëûE5@ÂwޛØ›vÁžGðwwìl#¯Ìj„'ÿ?@GÑÌ~âì†&‡ª¢üÕ$’Tư’á×nºÕ¾]ÛçýÁ×í0 ×Ût›ß×¾$(…Ý ôŽhÓµšæÓXÜU ‡xÎÍJ?OÔìñ–¿Î»ç¡‹Ëh+'øÊ☛¬¶‘ÊܬÉ9A”¿“Ô×›â0ß}ž9„¾Ju7Iž€nk¨Ý±Ž¥`Àç<;{Q×érÑœÀ j6].›Ér›ðŽÃÈ<•˜^‡vš¡¿çH}ŸØGMA_1¬èðÙÝtp7i$œDùGÉJIik@#‡Ðóøþ÷ÔíY½SŸ‚ônšå&u=qÆbÑud;wÄÇ¡Ù12ÿí'd¾D5÷àý»ÐÚ‘Qlš®“!Çܬœ-èå0ϯû ¯­ ANøN\{íÏ ¾BC7ð™N°£<ä wÑlXP¯ê,íä2ö½ê/ã:{»0ƒªwÅ¢j Ml;†÷#^ð­ŸâzÙ¸9×µ…}KTÌVû™1ÇÑÐ\rÇRbd1Z‰†’Xvsý._û|‰ãûùäädœ~Aíø©d•ï°÷m0ÀõkràØŠÃ¬cZ¿øœZC ¬AÃÉŠ®ÿýHn®ÃÕ2-oMõ¶ìs/órPršï‘9“÷?Sçû·@ÿ”`Þ.-Í£9ðz‡‘ì–fƒwÖHÌÝ"õ$¡ÅWݤ‚KH\¯`sw&²Æä‚w`ù"XÌ6ßú{ê<×ÿvѱ†wE¶2p£¹ªdˆf<7F4œG¦Â'nñu„›’s”W¹3§IÉyÇð¸‚ÔA)©J0çŸ| ÿð½wbûîñ*:š?L‚õõ]ÓV¡±“øÔô§ÔMYì4ÏþJÞ¸ê]£ªü9m¯÷p©ûŸ@~rs_Vb­d0–uØò2, ¶½ð!×ûþ•ËÜu@šä§Ü¸‘/¿ÖG³}ߟÉÈ=‰÷ºãÿ¿"éa>å>rSã[%KmµÐCeªß/á=ñ-–%²¡A–¿•”“¦²Ž ·ˆXßÞÓtviÂÀéãPé=À¦Ë}¼«O+†ûN_»xt§6е®à}ÿw×)è>ÚL ¼ ûG#a%Çÿ¿´QR$ÈòçÂòPfúnÝB¦wå*œþ?zŸŠh›íY Y¢ÞM‡§ ÀžkB}+ÕÈŠ—aǧðƒÍxÈ"tuŸO;†ô;¼ü™°µë&úšª*¼à1|ö/eI• ËŸ\J#u}kÝ5çÁòðËùH T²ÿz¤pÑî<ÄU‚óðócÚ [Zþ¾„Œ¥mZúŠèŸÁókС답íE'îßñÙY©vî ]×')3(›Ðs‚ìàopWi&M‘ᩯô\¯§pÈ}ÆOÁžå{à.Fž=X|ÿ¶ÇînJs}±~°(Äqª˜VÂÜ”œ¯ñ…ïˆc`ÿy"æ<ò&"ç·°*ä”Ýèä¹f±ü `6{„Ϥ òñï|ZAŠËÙ‹û#~—ñÑ7Äó2â!Ð ·žíG'3‘®›6&2Y9Ëm­r×¶ÞÖÚ>£ò?I|´Ñ~pÃ]~.ÐI¼) È_Šº7UàN¢êØüφ~¿ÒÂÒ8¨òÇÔf’MVÉqü{ø6´;‚Ý–ècØýc ç;¯ /ûy¯_Àþ~&>ÒJÖÃêbÕêÄs&*º`š›Ž×ü×Ð×?#-?Ñ呂oI€®‰°0ܪZO­'=ƒ*ÿ;™)©å­Ü@&w¶·?Ùm~°‚øÍ#oˆ wÄÃMpó]ëx.¼„,Œ³O¨cv”ï5ñÊe䇨}ûà \Cƒ)`V1¨€Ž]®[R"+NM¤n"’Ö‰A•+È%ý5o™í5Lo¤ŸÎ]ܬÞçXnþ°H;k 탟$›]Ö¨V 4Áò®CþSÍ`¿ú¾ø[ˆþ/µ“?f²ÏÈ„Ÿö“?ð¹±-ïklÝù™h-µ¡ªü"‰´…T†ë¿ÓTæÎõ.T7 Äõú½O•–vØŸæwG®ÕÔs—5¢…û‘¿¿ñûr‚g¹°pÀ_õp- XAP¼=†¿*ò ŸêæCF#ï¥úØ;v…$Ò~rN2˜û–ý±êx|Û£DúJpÁ‹÷ïŠWÖWêf—ÅÅ;X+ë tZàÍn^¢;k~Ã÷vGº_{‘ßÕ'ø¬°Äˆ;ô+GìŒóRét™--üŒÊË ^?D‹bA×é5¬¹ÙËüÙ.w”ôÌ퉺³„ŸX[kˆôìž ²Á0ÛG~ŠÔvߟ…ãW×MÆ[„?e'c¤ â#xûÔ¶[xV,=&yä’–‡‘ÄŃ“‘Ïßåª!ÿ%¾¿»Úõøçz!¯Ç¢¡a³×µñ[‡®u±qd‚èb…·³¼ÃÛHîCä?‡A¸Š`±ºãëE‰ÿúö5PZt6=ØÂ³N€I¥·Î'*?±˜–ûÌ Ò¿Gæmxô+"ú¹nðÓ½Öñ×K¬X ;Ö³žÖ’8~­ŸÂ>17ÇuºugQ–‘K7¢½H0ÊkèÁu]á+#wÝdaëj ÑX]«láY?ÀþëK!­N­Ÿ ßBäö¿»‘Çæò}Ÿ€bý50?Âê’Ykj øî­ÉbÇÉý”ðcZ‘HhjÏsÛ`J;ˆ( Ê?Kv­nõGžƒYáJs¬Ÿ›žláý:'ä…䵫d¶‰Ú颒éã;€oÅÀkç!ã²zëEÆodyì þÐA›à)“´úrÇ÷+㵈‚k<¶GOûùÞ/a?ãýnbî5°5ø_Ó†ØFâ,dì…™!ƒd‰„·¶€S£°é(X\{n£ý$Ð¥~ºãxb (ñ yâ&õäùèi²ïýÞ†¿Ú¢§Ìö-˜àæÇº³&wü4Í]|ʼ*"|"&y#/\1¶·}Z;Ø¢ÿ¾¾“áÙ"Qõ»ó4KAúþŠŽþØØu;ŸÁ÷Ÿ…7tV7¿ÙÅGn]‘øj˜z0þÆÜÿ’œ9˜ Ûfã5;‰€-~¿À*>a3ï~Ž÷ä%nêaÿ—ÚÅòk»` þûúQ*IBêÓ‹XÜÙ{«?¼>C&w³£ƒèe4‘ð3zèýgbÙ˜–ùc’áæé7èË7vÜi\ú:XÇïixƒÛ=r<(beÉð¡º6YF[ðßW)-ßjZpû|]-4œçX¿»_äû/Û§{9~À&"ãJžY­75µEõ^›hŸîF¡ƒIÜÎñ¬;’|ÆwÄ=è§ŠG!kú+ RXlÁ_ ¥•,•ô ,K‰oîÇ¢/á‚¡Ì]Ë{ÙN7nÄ\dJfnßïꙓ¾ûÿEü{ÒOB?òоb¼…Å[íW4¸Aòa*øRP`¢– 1» ’ú^óà+²’Ûçëv´Þ#z+ÂÞÜì’ÕÈ/ÇÊ›`€'‘-Y ]ÉODÚÎ/å•SÁÅøýNxòYKNlJ¦L‡ì1©ãñ»y¢ŒeÖàV¾ÿûr×µÑawýŒæ•d¶¦Ô»;r\f7Ë“üÔߢ¶„˜x‡ÇAžT·ð‚¤ÝܵÿSÑÂ2xÿ<ÈåºÞTJu¨‘²â™áÙn§`[+cƒ-ô_¬’E¡YdÁMøx]mEÆ KUw kîÖ7àúr¢`¶?˜ Ø I;¨›ðJÝÞï,`@bü`/º›ç÷ >ÒÒVïhesí'òf;ôäŽ|–†ý–¶–Ò&ØBÿÅÊJ ”“r^'Àráùy½_oCâzÜ ?š†fÜuW4£-ÕÛA#Ç¡©fk »í¯n>ågî!‡\ÕR`ý0B˜¾MµÑD~K°µ­Õ°.Ú)ÄõFÌ ŸÉÒûÓf`ÔI"úҜӜ掆^ô¨¿ Û®ÂêÙL=/M5.˜áö¹ÅÝ^à3Çý¹ï}ܲóL!ꄯ@ÁÖÖû=¿ç%¤m°ÅýoV.*Áqä´dØz;Ù*´ŸÙùXkYuòÖk$r@.ps5QUۮ勞/Et'!þ3â×¥m³Ï÷×°dìý%öÿ  µµ¶Ô.ZÛÀ#ͬÁ¼æço¯žRL®Ka{FLG#G×A¢êæ77¡ÒOCÿz}/±å<Õðcý †ÚörÇõ½Åú®¿AN{ ³9£eñæ\>‹7Û–cãzT~U@L%úÏ’! éR»‰m±½§Û í+5‚-âßYõÈ„u$«¾²V”l-¸Ê> ˜}œ×0ä‰<’Ϻ“Ù/‚ìåÐDôóXÝ4 `d$0¾–wsîcXg´/Ð30:£^°ü»«²””Z2FwõngkC2øp–² ÙGä‡ @*ø_ÿ´ÅŒ² `Lwè‹Ö÷򪯯Iìe­«}j'-Ö ûÿþÊ%Q¤›¤ÒºÞÎ}g«‡š =4ÑSÃcÞÁ«Ú×d³8Ù¾C~|;Æ£)à©Èym?ü¦Q0Öæ'´¶©þz5€ õ—[ÒÒ*B†Ã~b‚Ù­$‘^Žè¦xçÕûX•ÀÑ ~l8a-,Ý_p{ü á‰í~aŸÙÖ¶ßUb[¬bå–šxë icç°aë‹­`ÕüD³›âîÎhv%ã½¶ DÂçÔxIm(Ø­t$&å±¶vXóâZéORB [¤jÕ‘² AR¹$w‰ƒ¶ÝVÙB»L®Ÿ |¦$Â×"m[<¼9Lá3[ióá8ÝÉ‚IAÄζ‰üÙ(Ý‚úŸ[ zÕ£*øPr’‹ØmKXK4Ï·'d¿1>pÙFñ÷|ÍgÇx¦ (0| 2î´mv¶ÓÞ2Y7ý–Ú2Ø»<ÿµU(--d-¬8-œ(²m±´]düõäý®V4PÄù&þ´)vØJR†Ú24Ó‚ÌWQ‘Œ!¸ßÏ?²*Ê×xÁçÒ]ÎÈ}™©[m·µ3øÃ¬@×À²@²@&»f}›ÍðŒgö<Ð4àÎñ¿Ò«ò±$aSÞþÕõ…¤Æ‡“ÉmÙKÜjÓ•Ý*/õï{- hn±àw¨yWÂkêA4Ræ»þ;Vc©†-'Â+iKÍo£´€6×QòN²èNI¡…ô$œ¡ôã5+ð—`ïkþŸYõäÌ•x²F:K‰%)å®ü‚oT“ip†¤D{F3T°¿æŸëÏõçúsý¹þ\ÿæ• ”õ?ÿ*Ì-Y0±ÿ7$‘¼’/ˆßîn%•,R„[ )$õ¥4—’ò Òç—ÔÊ)ù«8ÕBY*½è(¤tvû÷¬üØ<®”’šX¾…ì‘IrT~–)ðÛO‘»—t•FF#j8mÁ+ªðº%<è×õû¿[É%²d€Û–Ðï43•~»+É4‚–’tÒCÚŸZ§Ÿ<’ቖÁžhDs;ÙcÛN©./õËeý¬€E´†xFûÖâ[3›d©·èÚLŠþ缘?ÒJæ¥à›“KrD ›ëYŸêj]©¯‘»¬’hÖØŠZ:»«qísënã­¹µ–ØhËf®ÇIVuSµÿxù ?¨—_ ÊC9£i%ƒïóŸÙ\'ä+z@SØ6}$‰¬‘¥´Ò¦vŸÈŽçµü–ÏJÚ'èå+GLÔÒ DÐk&Pz²xrù\Âj.«ˆôU¬ˆÒ[¾òkßë/¾Õ—:«çÇ3b[n9l¤u°Úäš6}¸ÉÏ™iQiò‡9÷álï&פ‘ÙR9²Y ,šÎÖéa]ƒõc õ¨6´0vIS"y »©I-²‰…Eö aû€w³2ü=ÖÚ[g]-µþ ¹ ¿gqe·,V·[õ¾f³R`Þb¢]ÿJ[Z Çí¼†²AÄ0ÛGò»…ïi ²aU ELDä¹l¦í!/¬Ñ‰è4øû=þÞªH¤V•µò•VBŠŠXÕu<…„çu«n$öÕ˜–” ÚB#sD‹iMññLvUóœëwVÇjñü }£ÑÉÍìGâç[³“t j·«¿¿*Àô2Ë"ªù/,ˆßNëM½¯a-«¹ž@Qí¹†Ççû®ŠÜÕðþ  È¾ÛïdYð7#ú3p8pÏ®Áïé×øVH¾þ¡¸dƒµ¯wÁ¸ÇÄûZ¿sç ò?æv\wn_óYÝæ¯n<^^ëuÍé¯HNÆ‹nWÔí OœLDú[Ø>Ÿ–?°­LBj”†ëå”ZÌw)r½À– §ëbvX÷ëAÝ­ç±î%=FÔ.€}õ+î;¿Õ„d„¾Ïåô÷Rà }YÈ‘çù”<×¶Œ–öðÉ·JÂóKáŸÅ`sÑ‘)<þAgú¾-¾pÊëẖ"2¬P]/W2b,|=7:¸Ï+®ûoÕE@+KôÇ-›Ú*»moÑEŽxHzlŸ\&JTxLt¿ Ìà:n׬~Dq;ªW‘ê4øÑvë{ª7çãc0 #ì(šµ°ŽàÞ pò·®A/á È‚µ}×óîààp;h{-‹¶ qó’IBi>Ïâ›_ЇHçöÁ×Íøþi?b2¾¯v˜¿¯â¿îº×6˜,áf¥²OÉùáìYr’»I(nöOH?¨j5¬¿õá8qÑUçCú"Ò œâ›?å ¿˜³ái¬ŒØÿY]l¿A#ˆ…cꮉÈkŠ’ÊÁxBÃük¢3×ûdXùŒOJCvh 2¾ÐDh©:5Âf…íuE¡T%• Ä~;ív»«àÓåžâì%wÈO¾ùÑï|}îçßÌCwAˆ‡äºÁ‚BV9ëX46œl± œx«­2Ø÷ÛUÿÕ¬µRukióȆY¬µ4 jçÏ¿\I©rSIRxœ«\RÅ2`MÇy²óóPWáÑóµ/>àº\‡²w°<×%ÓÍ äãµ¹ì+«ï9¡“@…¾;pRê%—3¡Vä‰pãŸl½í¶‚kš_¢[p¿2Såg–Od&ã†ãgâæú½§Êq{õ§£©Ú]ç€ë¯4ö¼ HnIÀ=·Ï?‹¹Y(¥üÞn×=ó4,aŠÎëž’%kS!ä&«dÁ†Úð„¤h¶:ù6$ìÌì§Ú^”tp:·_s~PŒÙçy©cðçáÚOgõ·±ùo;˜ÝÕÑð$š cÔíòˆg#u»®ÇK. 0DÏ{u¬Èi&ÑŸØ:[¨@.Ûª¦$]ˆ˜€‘R’H™§‚aO±ñ ü:9²dÅòqm>Ò…xó m¬ß{nŸOG\äáù7hã©°“`žÛßs\ûûÞiŽý$O<%“<á5nwHAË û¹@ôײùàf]|.$ `6¤¿"QðJ‡uã´Ñ{\ð½£Ø]¬xï_«]´›öÒ‰zÃ÷q~Hd$µ;àá2²Cj»ì¹›0Uƒ«4¾íC'¡‘3~fxDSÙ>[N¶µ^øÇÿü Y`ý<§I†½›ëñrXŸãÁwt/·å~È$m¡Íµ½®Æ;Û®Ÿárª¤êÚJÛÙFq?úùO™,=yÎëªÁŒD~Et•Ð)KíTÁÀÔ"i® _'’ÿÿXäÓ”oý^XGmä{›¥‡íÜô==ö‚ÿwÉüÅá=u%˜wÚOA«aû%’ÖÆÖÉÍõsÓØfA,¸é8‚íK[;"? ? ˆ™šX¿ZHbﵪfXA–¿´–Å’ JW³üdóóXq#ßÞu÷9ÿ &LÔ¶HpÑ÷îâwÁÜCÞVQÊIZ0à¬Ôi Ä^wÜ~ñ‘³Ê#clëj ùìZX¿ žßÆÒÀ¿;hÌ Ï„¬Ì-;ÌÍñyßIV½£’w|n'ÞëúõóûŸÙHëm[´-ñ=ŒºÀM¹Ú¤}¥“ñ†÷?k3«Ûì;ëk1íŒÎà±ì–º]o`9ð76-y°&ÿÛiiô ˜VòËêw×›ð–?ráú5¹«¹/ûY'{ˆòÁ ÿHòÛT­Ç£­±usíª=5›Ô<úòÏ&2:jm-©ñ4­MIŽâE¿‚€O5€F#âU÷|OùSð¢6V†˜ÙKä{þAzx vîûä{g†Ë'¿¿V×Çú$ÒOãæj²ºæ·ºê¾;z-¾DƒýŒ$×ó#Üa–µ«èo_òÝÜÐèh1Ùb?µ@]ûÏ׸šZRQú”dàzÒô¾…Ï»ãWï<¿w}ïnõSüü×ù³Š6‡Ë÷Ðö ÄCmˆüýuœÎäÇMNfhMÖOä/ì2˜wœì¿Ù/ù9ÔõA8­+ÐÀ }¡%‰‡°T]5GP¥‘œ2\rú]­3Áõ”|«[ÈóÞÜ<[ ó«u)^îº7%°nd1×+„¶ó¨0—×.×oÐBsÞÓ»¶°Éèhòï€O\à™Çè2™à%’‹mC+§Ô_ˆLDj¸jT¾}%*•ìð›•Dü 2ü0pn¯ÿ,?«å[ícÀç°˜ì @vXò)m .~WèìwÅŸÇ¿'Øb˜Ýn»Dž[Ìûˆü‹p‰ßfëÜ!D¡RÝå™Ðèñ± êy‘† ßjé¿í¯GñÓKØ~0ÿ#‘¼ÿ?†mç ck´±Äïâûžæ±öøÉßl¡. \À¦MìG2ÝXÛŽ^ç§=ƒrÇbQÿ?¤vº¨ùû|ÑõÖr#ÛK)Dù+Ë—xÿYøÎu2öO~ÞÅv?ïõ¨°Ðdö¹:D“é.y Ûµ<õ‘ë˜SÎ3×× ¹ B3ía›ð­àßnP%9vN@­ðT9Åç)ïHÊ&çÝ9¬—6¢ü¥@Ÿ²ïÝîx¹.×˰û[ô1ƒï»ÏÏXÄýŸ~=¾PA³§ÀsµSZ 67 kß%3Åë3ùšñ=·ÆÛ~Úe ¯¤"㻳DoÁ‚}d§ÔÑì¬óXp É(±ai)ø&áàzß‚YçñçÄì^î „÷¹®nët~áúølö]ŒBaýõþ MõÓˆš˜¬¹“xŸOÜl=gòüT|ÞiÉM…Ÿ×²eÔÕàLÛ¨”aÑÀ P·‚~4éEZJ!é¤EÈÏnªçi¾ãM0̹廜Ž×ã`ƒë}> èëF\…l´Úz¤×e­<Âö‡`÷çÀ‹å ÆÞç:þ¹8±Íͨh®óå24ÅõXwý›P ¤Wå£ Êß ö¹[–aÙC0“\Ôé‹ü¤ª§Xt&¶=øñ}d_DFª»þ÷ãùw ~Y /&×Éó»yÅRªD×3i¯Y‡þ6‚ïüÜ¯Ì —ÔØüŒvÂînþÃBâc¢ï"½/¹êÏ–$‚ëg òˈßÇ&ë¹YŠÙ¹wU׿Áœá& &—›² Ÿ¿€T_‘玷cÙJª}7çÕ]ù±ûoÃÆnþ‡ãc±ò(_VÔýr)Oàó;xî´?"0<8ÆýõdÆ‹x@ du}ÿß nB˜«~[[Y*…!A? žQbH^u=Žgóý]×Ë]þ˜ß ìwÁ·:ž/%s#Ž¡ ú…Û^ájã£ÚUSÁ€ãÚ×Ú-MôóðV©ÓÉ5Ï#ÝÙĈ0Ÿ<0ÀƒðȽ¼çù¥4hÒúÊÇA–?›$úxê$jwd{Øt‰ÈÞ¢­´—¯fpb-:áçáçµÏ¨åÜ4S7/"±e·I¼þ!QàúE7î*©upà8öF³‚s‰ð‚#`Ãb¢+U`"` Ö’?Ùk²öGCʼnòép…àWb9ò'µFÖ•l÷½¶Å#zx÷^u3ÁcÃûàë/@ÅQxÎQ‹‚î"[-ä~8¿Ê×nO‹ºÎŸ®Cíl,¼ÿFî{ŒíãÁ Ïð÷FdY¨ƒ©ëÜí5aOêØŠ¾—›Ó@eâÙMC݉ý@þXÉ'º zñR€wü,$ÇŠ_ø¾êiÉ.Õ‚|%Ø)))å(¾ºÛ_Ù¸‡/äž;wëæÖ>ÂnsÑÀ0ƒoAÇvâÍ\ãh ºïzëfšº™ k‰€þd‡Óþ8Áø’cí_õ´ïŠ™_‰ŠÁï¼d—¬Ò?¨òïuYjñ½cÃP#Ûe?Ç«;7ØL®vÓkÝôyÄ| l{DtW碪Éam­<¾²dƒÏ¹ p±Ñ˜ƒì啱Á½rþ\Ò\ra~ü¥zkd…¬±­Ñ¢²:¨òO•‹RANHB‹`¹©ÔváÿÉ}.‹dŽ¿¿ÁFãûßik?ûï ¨øBóZsØÌgÈ_ÌX=0<·Ûþ¨çP>å{bÉõKÏöGãÓwã9/ÀÊú° †Ö×~²6DkãÁ]Ñ´ Ð1us<Ï`5‡`߀S#ˆú›äÇ÷øiÇ_Ãy÷ÁëÜ,ã8Øû*ØNö%ÿÖ²^TûÀ̸vw­ò\h ùï%:t³”ÏÁ6¢›«*þ¸G3ð¢¥] ýï#ëײH\uÿuñëºNã»Oå6L¼Cþ ßíLT¼@‚7ÈtFKñý¿±.xAy<¹+ÖÌI~K®»I2ãü ° êf,[¶‚[yç{Ní&˜‹÷^Ï‚-¾›}L“ÁÜÍ[þèüuØïb¸3‘П¸wÓcÏ/ÁÆ(þÜðiÍò5²¯‘¼ƒïøÝ=Œ´"v¼øÀÎúIiû‰&ðš©hâ¯~ú‰á/4·¥ó;&29]møYÁú[õÀ~~[…¤–јTi©ù¹¨©ÈÏ.ûîÃ^æÁFcÿ­ààL×_³‚8_Œ¤1±åuðÒí~T2ÿuxc ã Q>“W¸«‰ê½çwÆçÝâ:`¿›y\›J¡ºÛ*]ƒ-ö_¬„’C&K;uózÜÙÉ”äfT.+¨YÆ"»Ëàs°ý/Øw=5aj^á®v¸¡9}l§3ÏiV;,"×mæ÷<å¡6±nÖ´+hŸ%`5íÏ¢öÀ%“Âò‰t“'ê:]×ñ×l?òóìÝ\ÄeÄpt|þ2¹lºßÿtCãáÑéÑ‚Ûû\ ¿~¿HepÞãd_úåö Ô êõ¡JøÎÛtô‘ÙjH˜ýô—+PJbh#˪?€ Þ nÝäý?ÒDdĸH¹ù×ünÿw‹ŽgäïZT4gx´8sßCvW LE_IÀ¼»Ú–j†µAþd¾ëÃjèÏÁøÿX%ñ•ò!žïÎþ¾õW@ºs\74#Ò?ÖøTo×üî–H–ç¯jeÐmÖv}ޱ~ ªÚWÄýVuׯ¬¢ÊùÈïŸ/ÛÝo+í¡ °Çpß5Ò]‚yÕÓßZõ¤¹ תTèáÁw–ÂÏ*^T7é²ñ}ÓO vÓ]½š/±=†÷L#dEC9lÚY‚–îêkmOì÷¢æ+eËì…Eü¥iƒzÍÛß^}åCªá§ vT»å¯¯LtÀ·ZUØÙ2ä>Ž÷¿$¯?õ]ÍÜÌÎSßдàfb{¶º=P¯ÐG42’xÿ ßog}í¶m TÕÎ!¶'jªÁz2Y«ÁQã™ã)ÕAÁÂö¤%Ë]ñSpÏùÁþ DJl;ÐæX¤@M^Ûÿßç_@ܸÉ7ŸÂ"ÙXï<¼`¼w«¶{ÿku•4rUºkK¾}?¢·¼ÅþýˆÛ”T¼±ü4T7ÿÂõAwG=KSõ±áhª(Ñ!väß O:®I©ƒX^0s¬­¶#6ÎóT›‡¨©/ÿÝúVò #ÀßbÝæ`u^ûÞz[a|8+øþ¬pé:’ÉÚ·6&߆z.¥¥²]¼ë*Ñ¿If=ñýY|FK;çMœô“²ÁïXÍ%”‘²Q+yù™Êu€Ã>††ÁÊ/¨úcaùùv̞ۤÄ27áÔí;‹âØ×¶Ÿ¯ "αø¯lRˆØí÷¬†›šà´tF’’øyb¼=öuS"ÂzÝ­§ŽÜ6ÒØEûÄêÂÂÛ}¶èhFX Ôø‘÷5¶+hç,‘_:Ø‚ýëšÄ!CO–e2O×Ù82ëëô¾œ 9 ±(„÷“ÑÛáéaŒa©#[~mа z{l;í‚M ã¯ýƒu€/LÔ…£÷•Ì&TÔ«Ól)·¡–Y²¹ðÿ|H8ŸØvÇÁ£Ãsz‚əͬ¸Ïw‹l‡eÔ³ìZ•ë¶êI°  ^PöÞÕZÛ p<µ»›è°Ô/ˆgæÞ,îEöW‚·B­ÑQþ®ÂsïȪù¤H°…ù—–»2·¼D–©²þ;©ÇöÚl»gï° Ü;Aþ[íÛÁñúQç}J¬ '~£ÙYl·úu¾úëU d’xÒSÎJc;ŽÜ/m‹"›%œ·}0úºp€ü{ 4§Âéj߀¨ÛÛEªœ`ïoûw¬¼Q*Hz*ƒv>·¹óæYÜ@¡@rýÔvƒ+©&ÀòÓ[õ M®«ä2ïæYñ¤ªÄÖ“Tya‚]ÀÚ–&ð@GHjKg=ÈùÈ/$šª¾‘=2ˆz2$œßù÷­Jò%õqm¥‡t,7·îT²Ûe¯Œ×ØTö4©t‘Š2@¾òU}ÿS«¶4‘²OI@‹Ibɶe—ôòJ†i»/Cm;Ø_óÏõçúsý¹þ\®ÿá•IŠ“KK>É,yÈ…¼NÇÿøÊîk™âdøzþ¯ÎRŠÜ_ÙsóLyþÊN›‚Êùÿ·ÉRùéñ% üæ’ÌEúŸ`„i¤šÌ¥2P>‘úOH‡O’ÿÇúþ‘•ÉÓ#U.é-9µŠ®ÖI:Q²é=i'ŸÊIY¨sÅí¦Ïµ«.–Ê’XCÚâü iü4‹8’V:H1Ý«%l”͵SF¯Ë4¹()uºV¶ÖÞÚØ‹øÊ¶kK$dÒøÃ׿± Ö¬-4­]ö{öã»î÷º?Nݳ×ÚÇV†ª¿ƒ ¶Yè¡ÍÐìú©î!6 I†`‹ð/¯,|û$xó'ÒW6éWHî:Úe§Ò»O¼OŸaÙì#kké­)ÒSù[?îuÁ®ê7ZGwI-b!c°ù—–›ù‘ T”ôÈ<‚úþ¹¾W×ñ^Ô.–[·È÷ÖÚZY kŸZKÛŽü¬¦}f-¹‰]ÑJËJ± w¹úçWr²y>É/³ýáÒVÍ¢ÚaÝ¥—tŸ¾Ð;šÒ–Sñ² VÊJÚM5Ú6Æš[eif},?¿£ÚF$Ðû\ýs+ògÄ¿WJemM¬U±Gº^gjX…´ë¤«‡ÕËiì†ïöÕêYk„äMl%·Vö=~0]š ÍyÎû¿[9ðüš»×ë"ü>;2$ÄÆîjÎÐVÜŠÚ‡È\×vhdþúØ>ÿ#ڽǭ–ÿÿ/ŽÞ&‚mm‹%±­ÒTJ„ðÞïÿ±2cýò–IZËR[xKŒç'Ãê1ÑÁm¬œÅÊ[<¬üBhAËA>x¤)À€XÎÌúÛVÕ\ßçnVXd7­ºàs‚%!}e—„’XZKQ-j½¬v~HlßÓjh¢¬ïîìz%¦°}š‰ÃXF´’ÉUµœh*4ßÚº’^jÞSØjoÐIX­LÆ Ùs@ÊÃóҀס‘2¯]Òg¾»ë}ug·òšëq‹ÇRk1ì•>ÖÔ–Ù\ŸÜGúÄïïÏâ{FçÔ0E üÞ½¶ÑÞ¹s pæ"Aßñù[y±O2É¢`¿€íÖuzž\çz{FÓàý÷u?¹ð4²G@ÎG<~O3û>¿¡°{d0!§%²8|J'|¡:nm™eÖÌðzl8'L·¬Ü–äàyVÌNòÝz]®§õ‰žàÞ}êw6ïÀâ—4¡]ä_×'8›%ÅúƒÈ“±í.¯w;|cšÛýžœllÝáEï¬zà¶uÔî䕸ŠbyÇxÂñËàÉ® Ê]r½Ûû{Y݃x‚ëb¶Ÿèºß ø«¯ÂZ*+lEìkÞç®?„7ˆE€ÿÄäÑndÈavÝŽØHKøY›±ãÍßZyü䋾ò\ŠÂಂgÎÞ[õ°îáç1–wûwÎèf½Á3»|Ü{ø}LÏ ‚•á} ÑÅä¿ïw\Ñœä†h⢰!ÖÓ¾µÛvK¿‘‚ÔS!k¹ë?[óï š?ò3ß;«›ðýƒz]ÜÔ€ÝÆ'Öaõ›¬üz§ñˆí¾Öiˆ´q°³ë—ÆöèJ¤| JŒ#ÐÁ)òe>rä ßñð=L(/¾1¿(j¹È‰ßÚÏþØõÄCw¼-Øþr¥‘܆Éq;µ¶j"KÉ-‚Å…ÇD Ú[Aœ î¥Ó/#½“Û]_ÉBÌç¡>×)E$%JN‚|á…ãÐKJ«Ä…È ãl2œð²EÄ´b!èj(wÔ2—Ô—tZ[Ûcç {I°¬$¨æ®è¹¦s‘h4»‰n®WÔ5¢$ì§(™ð¸«‚ºá5;}wèÃoOÊkjp«lÉàE;l>0™ß;ì\ØûúÛr³Î’J\Y'qô¹TÕrp¼ˆtdö H•ÝŽë°p„ö@¦øDDF¤¹ éíŒ&‡»ax41RV†ÿÎ3_è+²¥›–ÙïoLt¸èoL§r* ³Bˆ¤AödD~kü;‡~¨¥ÍMµ¹ ®_kx{¢nÆÁp¡ãµ™.#ß»½?™ÑLF{OœÜ€÷f…åF&&ò¢9 ã ªÄC¾|¬åÁ»¢ÄBwâ¿(X1Ú,°\ÐAëk†Ðýý·èå%"ˆ^ÇšjIu=ýÓ#ã4±°ì9ž™¥‹Ñ@W|`™Ýun}Å«Î#¿›SÉcÅ=ßó=Ö?Ev<OJ‡ŒoQðŒÚ`a&'ÑI¶øžÕˆê¤dýÛ¾’ÉO€¹‰?ÏDƃXt¾6 ¿#A'ÑJ+¤µ0¾ÇÖèB¤ï«ayüpž\¬ï¯oí9µã75;±••G:inIdù‹R‘Ö‘·Èß"â©®[qüÛõ,vÌUɱö>,œuÕïÉ®ÑUXQ›(O¤¡9®èo•ÑŸôš¥ 2t3£B!T~¢Ã§úHº£nq<þŸ¶E=”—–rFŠ“×sáïoÉ㉱|vîVN [?£cá?kÉ#‰àÝ0„ït öAÖ+ä·¬ÒGØd®StžÂæ]lªŸ›pŽ(ˆN>Ô-pªûü}ùÏñžd¥žŽbÁß›]*ÉCÉlO±nbòXnsûœòÃccún‡±b/üÿ¶º]ÿý‰‹åÈﺡüÀ£ýõGY-óÔõCÁãʽÖ%ð·ÿç0¹1`®‹˜ë‰²^y–ϹŠÞòÌÇÖL§ý ÁÔäþXåßÈõªtGvݱ¼Õû¢ü†ï‰=“œÐSÛ†Âv~ÒÞú³:›×ЂZ˯BöÞ`c¡ó¬9µO?< ?œ°'zpÝ"\ŸƒÑú­¦²…vÌæ˜ëï±ÙwƒÎENÉg`@%ÐC&¿wÀÍ‘½¯yàL£$fP0•T”³2Ÿ<¬)Íõ{\‰$‘oˆõ~> ¬¡ƒù«RD¶bÖØˆh3µ²/õæ‚ñ…¨xÍDøý<[NDþ;ÄOvêÿJÖ’JÂíªŒÊÁŸh\âësK¬Iƒze|"i$e}¿ç»—°e?8ΰÌu=[ÇÙ Ót^Ðdñ¬TE½¬*6‚V"{Wô4 *ô³©ow—‘ÿ„ÞÃëO"©ëvËï•Íì÷—»9y¤˜MÒ¶°Ï`Ê_MæÉr}€ä·t/>?ßtý½^'ZÖõbZ+˜ûÇö ÿºŽ~n*Øhg9L¯uµñöµ±­Ö–8y€÷+X Û)š Ëïæú©î&׆ãýÙAÛÛê&o9ôÿJÂ[<òó=|¸¾¾V{Î÷ÿw]Õvàç?~A;´±}“é{ݤ!k¤¦êMé§ÿ ±_l3è· =‚îÜNÁ0–Ä"‘Wž¡»7T‘ÀÕú5œ¨¢5²ZøR;­DùóHIY)ÏñóHÈ2ž(_ 2» ½ÏÏ ¯Š¾× <Ö¬V„¼íjýÚøo:›kƒø»'¸ÿ±ÿ=\7"µß9Ÿí]ÏÌ÷H^tSS¡ç¯ý”­§üIˆ‡Ê6:¨ýÿëIFY%Ñáh¹m'8¿¤6oï.~%Œò°”›2ºúî6hñNÓbAwœô3¸B4GîAH¾ÁwÙDl¼Ôd`CIìQÓYÏ÷/ó7ñŽe¾_âcß+ï8yó"ìçÖ?·ÖQärdÑj ¥ë>V&hòWÀÿÇð-÷S³'3×ñ4·Äf·a‚§É`oÀ„GxÅA"(>1|Øé'@,DºIh"òïÕ,~Þ1<ßÍvÝŸÖ¡‰§ðáKdÍOl*Zˆ`ûÐro­BV£Z¬äýa(x°³H Y‚ÍÚÔu©Û½}æzG>tsMºãÏðûAhâxà"40}MÆúèq©Å»à/¿ ïvn›ð˜Y:¬XN¼Ü¢Ž¬à¯‘( o*C…•Þ&Á{û™ñ±¬”. êü§üÒ^\ß’‡|ûÚ”˜ž¦Í´ ¼þ;¤JŒÏ.ă]ÿÇѾêsÝ“'W×"ç<Ðsž¿‰ãî˜Èjt3ÏO uÝÿ> G$é#‚¬Ó˜Ñʾ‚/4Â'¶µtapü¯:‘ûß©9¸tÂÏ1l}³‘©Ü¯¥¾³½ë?kÿ¢Ã®Ðƒ²[JúnÉnRüfÏ×ø~a«¹çŽ€Æµ¤äÉÔÁàÉÈœQ@>w~49'³Íã;oÕ“ÒTÿ}5ŒÌ¿sÝÎÏý¯À¿Dÿ;b๺¾˜®óÑhrÀxt1ù&ñsPÏÊÙ#MÑÄ pažï”¿ˆ(ƽ}|V\x}¤Žà;€?!»&1×)z.ìçì.êõäªäÂÓ ØzrÚ?åü!·;܆S¼#*ÂÚùcµ¯ï;…Ûj0ÞuùN¬¯e ¼–¼úÍöp=#7ð÷Qð/ᵯž*Àb÷&xÃ=}¦E-z©Ô+B–Pÿmþ ýNÐ{«ïèöT~‹'l%O´SøÃ,|y1LÈu?}ÇóÜ/È:ìF>Ë‚·¬9]Ÿ°Õ¼z$Ï-õçÃÛc*àœ6¼ŸéòÞ— ê6bá±wÐq%IºÎˆ2Ûmf”™dɶÌÌÌÌÌÐfv›™™™™™™™™™™á}™½û–æÍîÌξªÞÓYG²Tª*ß ?þ¸7oDFêÅ RĤñ¢ük¨¾Z˜ª0”ín²ïD¬úÉuí?A¶ûâúßÛy ¶§ÐoZØ@ì/ÅÇ_ kä?µSÐæÉX´g;þMâ1‹Wì…+~{—|bËŸ:8•ÀeÞgókbxV*õ7ù¿11M2sÒÌ&3_ÂÓ—PéÚ¹n8ÊóHsF°Çqß•èÁÖùvBXì»´¯‰ÿ×Àǯâe¤0: :ôG‹x×)êÈËȉh·s´¯á ¨„_Hj¨™ÔÿщþB^•Þö¿OlƘHäç‡äý¹ØnVïÎç_qþ¶\Eœ ÿÍ#7ŽuYð€´’úî8oÇgt‘›lÚi´¾%íDØøí~²µï-x\_0¬±Vrj ¤šCD¿Äcv;v8N¸žß4uÞJá£äAcCµ‘SUÓƒ ¤ž9åUù›˜`X5H kr‡Ü"ÊGÁk:©»¨ï_= d\‚ÿïw;`?I,NýÒG;­Í÷]á¦^£š¶ç ¦¸IyG`øôéèâ„„‡ïÚî1¿êhÇûšJc/ËoL( 2eÌ6i ûy‡­­µçÓݤñDîHwæk4åç#®+bªú„ÚÜﯭðýv acØÜ1±gö>Ù©àÄË^¿‰Ÿw¸~ú `F‡ùì Äw Dwãt‘OôBkO0L²“§ý·8Þ®zï'ÍñùA|Í‚óÌsýïmO`{&;ˆ_l«M±¼õƒ|DCTøíÏ~4¶Ôu|ŸÏ,w×Fm_\ÛMÔvÖ³{fÔXdê{[xÖvÓ×D¤J ­!Ôîù¸âfùÍÃúvîoOâ`,ÖœG…3Ьm!:¨Wxi¤C?ë—_«Ù1ˆ;3n½ã9ÛÀÁ¹àá¾¶9–I(ü¿’ÛñAê^o‹Îaö˜æ!ÕXX2Ùmê’øDÂ,<¸t…Óu‡ÏutíPä·WnsÁ|²‘ûJ‚b™ÉgiøÊ©e‰ê&øC1}ެ«á‚çùZ‡ço$ßYË€ ¦‚ˆ˜á讃Îõ¶ð¬zf¡©lòK?MI6ÿ†÷ÞÁs§áõðøßÈÝܹ yDÁX<ºRVÐʰžàjçÀ.õÆâç$V­ŒÊé¼ÿ:òîÀ¶õûÐÅEt‰La3bDÞˆ¦êz[xc' 4•L)H\†Ô§0Á­xï)ü¶+ž?Dzû#s.²OP)dÑ:ðŒím?=õãmU›w£­³D€í|Ü;áöJY¯†›°ð‹¢ñ¼-¼[åá`‡Lv,„çÇ™î’ÇÂ|¦`ÙnD 䟅÷w³«î#­û; ¡anßÔ ~²ÓagãgðöuÕãN^{€<¸L8'ï$™ö7šk8÷x—ûþ˪o:š—òÃuÿNÿNƾï*ô}®ëû$×õ|¦ —> Úpé‚OLrÓà–Kv)êzCÏçù…h`1’¯; ÷ <Ñî{6OÂ$®“¿K4" <>4XC‹/ ¿]¶ÓÛ<2“\¥ò³»v,?Lìž@²n¦ŸÚ‹O#*æºÙ&ªÏ¤šˆD¿ž0‹L·ÛÏäû7Qðx’‡J*¦Ú^ºöúw C€^×õÚœÚË7VZó«i+ A¤ºK;£'6Ú¸ƒõläïÇl'ìÉn*ÐJ±ÎóNk7#m‘Ûÿc=`¯Ú…ÇÛ)Çà¿vß›ÝOÜϤunÔóTÅÞ»êóïWdSÛt7yˆÌ˜Tq¡9J;¡Ûοæö=ot³=w»¸ÞŽoK0ý*‘A°’øÊSª¼õ®²è®.!jìÞ™Çî.¢ä¹±x@²fwí|­£¤š·Åþ¿Ëßíÿ.@ °EjãŸ)À÷n¯er ÝÕ.ÛÏú–_Å#8¾Cm¿çJ:œL‚Ö¢¸Êv+ZXO•´•¯ÃdÆ‚êä‹uUÌ? 絛·`‹ë½zÞÿ߯”&ÈL5u$%Ç÷œLu›ï lï÷ .s]7óqn:ÖbWÇ'r“Ü’ÏöÙÂÃ2¸8xäæÿÚ}À¿RD›©½—n¦»Üê47üá‡.“&>Õ%$· 45Íd>ŠäO©âîºëÝÓ°¨ÿ·,3ž«±óìÌK«É¨{ƒ4è–]ÄÕ nR‚=û·„wïÀ‹ìnHÛ{Qï¯Ü=såõ„éäm‘ÿݲ=KÚš‘ÒX·¿Áú™à˜=²-l%…€!Ú뜻ÝnØX÷’|?In vÄÆ #»åþ¶fÞ讈…Eò]:]Kö>é R‹Ïæƒwƒ6%ŒG²ÂcíQdº¡`ß2ÇæÏ‚dùðùº X XþÛÙèÉt•Ô%«·Ôäš?¸†öºê^pü ¾óVÏP%§q³Á2{bJ“ÎÛâþ‡UÖ˜¡æ»Ô#cÇú§)fÈf ±~8j¶Œ YZjüÃØv8`c<’æ÷Š‹=§ ÿÏHuxR¸½Ï§]/ì·äʰ`ÿ äY©ÓDºFÓ{<žrò4ùá_¯”®«cE³Ú,‚'ƒ/Öu:CWê=íp"{¯ë?P«ûv2DJ^•]ã€ÝAü!Ô<¤¾ôG]iMSÊð®Ù)qÈæ°ý5˜\\Ïd›…ß?ÀÊkð‹ Èìô-õWmÄ«®’ï'iWêÜ?Þ䇻¢"A;®èj*ã|Dó6 ðDöÜÃúÃŽ£‰E œÍ€E]ŒôÖM `7 .}°Îû{Vr³Ê’BÒtK\¦‘=U=¹=ëô¶Äò=`G=a935¤g/^0Jö›!&±ÏNºúÛWÓÕ 4›Lti)Ã%ºvóT V'Xrâ~²Øiè#ð‹z€ŒpY¾À!ƒLoò?|•0#Í\GBKÙªã<•uŽÙaf›ÈpânZÙÎÉÂî#ð_œn÷XuL/³ÏD‘'&®Ä”úø÷¯¦ƒinžÂrkéNé½»9þ\®?ןëÏõçúÿ½2Àxryû þÇWfS”¯<ÿô[ãO}”ê¶Ïe7TÌÙ}º¿ç߿♸&•)d sBÓÍ\û,1™¨óš2TˆÙÐD\“Ûäãßb¦‘ñ…½Mÿ¸“0™É ÿ#Ť”Ì1!ä½ÙެeÍ0SAÊ`Ù%$šl4ëM[ÓÝ4Ä#þ¸sïþõJdâ˜ü&†‰m^›é2VN•æ±¹ˆ·O“"ò\ªkBí«ù´”Ó™rËl1§L}|Áú›ý÷V|“»ç6Í]ã¯wä¤DÔòMrÊsÉ4–VZ@Ûhn¾*k'®uõ“Ì–âGØ‚Z ­·øo­dÔ½qL=ÇÔ²úAjVÃÊGd)Z)«94™ÛÕÓN;èI]ÊOÅ4"5ñHi/a¥¦):úy[Œ¿sÅçÈÓ™àfŒ©-÷¥‰¾’HWZséI¯ïMK3Ñu¼LÆsu‹Ö×Ah ‹æWÕ/òLv‚‰‘ŒÈùŸéLN“Ò$¥Òý"14‰¦ÓŸâá{‰ý³êF©"CµˆÆÁÞ¡ÐBJž¯¨“µŽŽ%Šê¯Z^;ê„ü>Ðçîo[iˆÜô&…i*µ¡V»ýõ®Ü–ÐZP4H3èf©¢ö¾Îðjç¿Û'qµòЙÚHwëjíÎ{çHS‹¬éÍû<ÿ¶ߤÆcS‘×ß»w-³6ù²ãÓ_å®$á÷Üh¡/H÷Y j<Í£Qñ$èá‰jm®µ¥ŽÔ£:O‡è'ù@”ÙP~Dl¤b"‹~¾™ñåÔZXó‚¶«QfCêòNš~õ‘þ‹C+ÑôïiŠnÒ‚#u?mÓWR[˜ÊdRß?šˆ¸Om˜žæš4@Ê‹r›jFàæyØÎ¨!ðú0š©žHK¤µ{<2€Iˆ‘ïòI’kW­FÑYڀع¢é=eµˆéËçúú ˆdÔ1EÍ`sTê¨Ñ3rJNÈUr~#b %Ï<¢‚s%±p çñwL2“ k¸IaÀÿvè$6ÐdˆÌÏ-õ³þ¢M?Qqo‹øWV Jaf›;2ÏÏåº~” øtU˜ÍiÁÈm·ä¡$Óby½«;–&B ~Ú8 ï&c´ÓšÄKB2£½ó9:Zê¡ÏsilZû0#ÊuÒÁçC»ž ¡‘ Ðu·ºîBúÈÿÿÝCFŒ‚E_‘ã“hb!VîÌk£ò¾²Ú HÁoFoðŽø°Ã):US{ÎKYSÝGÙ@FÁ-hª›t¶öƒáSYt½ƒ ”.øZo‹üoVrSÕÌ2ò–жþ ‰lײ¤Hù\.ËQ™+A½BnªK,ÿI B†uSì>ð: †”›èØÌ§$EÚN:Êu‰ëBÄ€I”NדÙ3[Ïg¾´6*ìt Ö-G$6>[ôJBT'â+ ‘¼NŽË*Ù!)‰ódû„ÄE\¬(Í+^Kž/°ýo“'¢Â{FóŠÊ°Ãžøý¢£±4–Ü Ä7i(“|fl60? ˆJ®›ÙcþDu/ –&Í»®^“‰ÿÔh$6  ÿúãï$ ¯ ÐpxD~Þ‘Žˆù@¬Ø¾èÙáCåȆƒ©ƒÞVIzsSí¯Û¥”$ö‘z “C¾S¦9~{S* E¬ÿ^lÿ¢®kQj]&»d‹t$ÛÛŽPQÝý¯Qˆý¨®»{rý!nPVôqº KŒ ¶›`KmÆkóÀ‰Zã _dŽÞÐExŠè ãweÄþ‰Ly ‰À·õ²\²º¹_ˆ{?çÿ¡t­œ‘2Q†9 \xEž»‡ã {r}Œ¦~á6oœBoö.iåUaa‡¶·d;¸Q-b<úê2YT>Q 4yÍtÓEÊPÅ¥ÖûRƒ\ïÇQÛnåÓ²¹6ËäŸÉ_ã`ë®×cZLìBlÛ^n×ð’³ ¥íî–ìA‹ßÑV&-­Åáùñˆ4xK!4QŸ:`šy[x–þæ¦tåØ"Ùƒi¯$#™Ì¸î÷§Év{ß)}¤‡Œ’é®KØ>0.8q?‡ç«£«Pjû„Ì“¥hê.`™ï+| ÑSŠZ©8ì!ÿc ¼èW]©õ}àÐ Å$1Í$'Ç–F߸G¯‰ò|䲤øï+ž±ÝßoÂ×H/é'Sy\–µ0‚ÏøBV´¤û‘÷09Gìý!áÑÇs|á¦Äpù±5Þñ™Ã2âÒüÖ•ú¢(œ¨’x?¦1~æÓ„ 72ÏÍñ¸(÷Éàq@ïxÄþ< ^}…úg¹ô”Ñ2^¦`ëÏh&µ>0YÈ€Ïä;Ú9$+e¾ÄswEÒCò‚g#ƒ Qˆ’7nŠZ2¢ ¶î“üT3´ª”ñ¶øp¾ä¦±©gLVϤ‘4¼»OÏvo;} ’/Åþ‡`õå@øÍÈßG¦ GAúøºÁl1¥tƒëxº•¿%"ë'×ËÄÆ)"ÁrħDÐxÅ^>©ŸÐÉí£N‚G<”Þߤ7¥ÍMÃU3 ^ ®vZö`M›Oáï–ÿÔ‚ß΄Ï–¶®Ü øÀ9gÆ›÷àâ2б3¯o 7XIäØûŸ®IX}ŠÞ¢’Âáû9ÑnLäÎEü+šˆ¤õ½^؉õÉØOd=Þ² zp‰WðÛ&|þLB¾cR˜\^ÔŽ me¨ü†ü³A÷晹èî´]zJI=ˆ„ßÅž9²]¿à5…àEŨ¥›êùU«“Qýɘ‘ô’¼2Þö€ "`hµŸ^ ¾Mt]^‡ }?ä[ä:׌á™9’ùSk_2yxµòàõ£`²¿¹þ€#A¿Ã’JŸéi¸Þ{lú ®æÆ§R9k'T;E`¬¶‚ÿòKiÙbÒ™ø^•?½ó—£àúYŒ@¢Þ|-ÛÛc#Q½ì³Z%aృ`2]¨ç"i_‹WL W¹{E;Áêé~ªüÝ0ÿuxÑC2‰Àýž¢ƒ¦nXª¡1pÁxZÕ]7ú$`žÑ½(}Lþÿüf•Í4dÇ’Ïoò°Ÿ;|B&[N ì–6ðøFdîžÔ¯àÃe0ï ¶uՌБzi·»÷Ûé1±Èø%ݼŸÒÄE/Ý¥‹Ýœ°FøR=-'M¼:=™ñ7e‘ÿ‘ëù³Ž¸ ¼Lö Až O^KAÝ~ÝØÞxï¥9ÈÕùêâA°â•®ð*º~: Ïž‡ükðïc0ˆ—dÇpàjHwÝ$œ;3š«gBø@}tÑDëzu—@Jju& ¼'–n®ÁX‚ƒÿi4´Ú|˜+=—Õ Û ì½ŸÎzçÒØ¯'7ü*¯Å^óY@tØ»CÆ«íø}Ý1Ä(jû‰u{‚‘ÒÂý‹òŸÈG>ù$]¼: 3Ÿ)ož“ý’‘õlÏÎK0”Tt¶›õ„¸Øþ±ì'Vð˜êê÷rð¸førp.ª;ÃW‹·@înd‡ùjû¿Ûî¡/ÈŸ`]‘W5³2¹Þõ©‚‘Š“‹7÷‰×Çÿ7˜cdª# Ü5ä}…”gá,·°ßz,¸ZÈòýÇî^øe`š½&%HP•«¢Ûù©-Œ¶ìàWþjgæØ;¿ÃÁ">ò‰õµhŸE«iüݱÓ㫃ƒ‘ð²l^å€Í¨~bÀl¸žþþpÝw YX,xƒ/àÙwñˆbïkŸÃ]ãæB¤!›•Çúµ»\ÎvÁ³ÓÝ ‘ßvñN{þãñ‹OÛÍï15˶þÉÿ³LÊÂkQ}”)ø¿¿×äoi’š Ôyxkl½CЄXˆº¾ñvðŠM®§¯íob;"( ¦Мš6!.†47÷ ³Wp¥£ø½'üÕC Ù™/ሂxxA!tÖÏϨe` Ãÿ~©3"õZ²^ù1hþ üNE f?L\GtL#ËÙÎæ¶ä2D1*¹¦pýÄøv!l¹ò–›‹½9‚ŽàIÀÊÕüõÝÙÔ¬n nýH Ø^9©ä¡©âÅ;#³cÿÈg«ò\xÀ"9Éq‡rW¹Wñ•”Jf!âº> å±·=PwJtâ?ïKäÎù#®ðîüu¦›—¹<¹'шøk`Atdûæ¥!¯Ô€%¥¦NZE¥ýÔôšôö¬w““ȾϑÓcá£O±Ú~9ˆ%ãsìï+X,á†c¤/šXç:[®àQþ¢$F¦=h倛ŽrïXB¤Ì r€?ˆþ¬ Ýeü©QŸ[ ã/IÑZntQ—y5ÿ×6•LT¸mZ]ªYl·×tìÄ_Û~“$$†_QåíÃþÓÜ”¥Øwò¯uÝÝ€e‘`B'ùýõï6ø í•h»^î=߉‘› ´¸ÇoYˆ®HÔ‚7Èv"P <î“Wí? ĤB ïpÌöìÝ5$?K|¯†ùA’—<³öc÷´­Az;ín#ßg¸>CÀ÷«HcóÂ:¢blp1Zk8Šo”ÕÈ®·®)ô€šè*_Lj’ˆDC,Í«1Å›–™Âæ®ÙÆÛ3[‘b"6>èÎm<àˆ Çø˜(¶=†ÃóÇ"Ù,™K~?çºÛÓþRW~AÖiØz%Ï/@ sÄúÃ^ »×øj'?|˧¾¡Á“¼¶0Œ()Þ_¼yWüZS\CÒÇèàVD$?{þþ=ÇŸ‘c<'ÇñòÅ®.æòß~ õ¯ûµIÞ˜)f%z[BL@7ölÉtp¿‰©vŽpC>%®~G_ à6r‚¶)‰‹”*’Ñ‹òïÿz˜Áäó ßa×å|8v NIG€ãw±–í_jeïþ¯"¾‡£¥NDÆO¬x oYj–›kæ³iDŽXÎ_÷¸)°kùœpéšÍíI ²œwSSýÀƒl®kòYéÕ{Ù¬¦µiOîZ…„v¦ÁJ$XÇqžÅêbóûÈ·…èèAŒá5S‘Ëž(ARÛžBq´¦Ü3S‰™D‡–º¬"ÒÏ‚ÿaðýÈäÀWTOàHAÙS`À j‰·¦«¥7戩kê™Ìbg×öÕBêzl¾ ©_a»'Ä…Ís‹ˆåu®ûs_þºV¾È/šEÚH-‰C<‡Õz òø~ÍüƗ킸ÁÍQˆJÍ ìÆ‡¶:䋆ßw]ÂÊ,ªoï®ÆÔÀ¡A÷ŸØé"È?Dú «=om÷¸æ&~@–e®Ãi;,¼Œ×†ÐPðºº:@Óƒn9áÁù´¢ØùQÑPo4S2{uú‘]síükpù&²nq|l§ÓYXÙN)XÀÑŸ[ŒÂ®£±èmä°³Ábº9Nլݵuo=¬ù‚¨9‹.W“CF» 0÷ÐÈz÷¸Šß§‡ ¥ÕßgÀÃ/ÊH ÓÎËòŸ5A¦¶°= o#Ý<ÿ³ë×=í´°¿€VæcÇb¯^#Ö»he§ƒÚYílàÈø”W\rÓ¡Fáév6ø´1œw_ ,GTI£Q-Fuû†SûOö²üLC“¿/Y‘à“»êI¯:«/ ИßzÇÿ6ßOÝî‹áÜ“rüÔ =سúï@†õèð Ü`‚«;ýõDwø?ŠóÚ:Ôš´¾PHŸ™Š0ï®PÒÃ<7É9öm zmp9 ÕÜMP  hWIZ¢‡þnêW[2À¢Ûv5ŒÜA¿È“‹*¸9¾P]¯£»ŸÄöf¼g¡{Ï0òf§å®>úˆ—Å¢Z­Ct“5¿š3^–ÿ XÊ Àfía·«ÄÎ+¿)v^g$®ÁWs¤X{ƒ÷Üüò×ør}­EÔÇöþà`7¾ÚÀ¡ÎQ |$f%gà“áL=`CvZô2×Mq7Y"Úk­mµ‡O샜hJš±›*6+ö€°€è€çÿÞ㺛촄(¢#Ó u9l_[ûjyxb-< 8ØŸÞçðºìu¸¹ 8ÄqãQxƒí<É]c‹À»bkOŸè‘± 4”&§î·g¹n‚TGÜœ§®È;Xÿ£e0?”rHßIÛíµ*¸a¯ò—Âÿ{Æ Ûw=>pþs”¨²Ó0·¸ia ~:ÙGÝÊN’ö¶ènm$/“J0¹<|¥§.=&ÝðÙ>ë8ÇfÚ“ –8Ûå•$:Œ¬× O3X…LÑÌ)¹.ˆ€ž: lè‚—ït3Pm`;Et2ï g¸+j$¡†ÐT:ÌÛ¢»õ›id’ËrXŽ=º‡» B޵Ȱ#îë&¿ØÉŸ³Ñ‰ÝÇáO¶ÜÁ«zHk|:¸AGÝÑ òh йHj'g_vó4w!ùMòÊq>ï; ;2™?aFõþî»JÃÁ;›œdòh°Ú XlyîˆØù§'ÉåCf ñ°ÆMGŽKÞᮓö@æÞ®³}w°¡(߃¸±W Ö»kç¶‚zÂ×¼Àî>ÌkÃjØqMÚœßè • ´¬y)y©Í߈ÝyŽóˆc?íæ[ä^êfÀ &V¸9`/˜E[Ã.:ÌœJÌvsOf€~WÑã}7;뻄§ò½JmkªTÄš¬ˆî3À3šBT¯ᦶ‡o bó“ØÝöœÐ+×xRÛÉðSÈë@‡¡Ø|ž¼—xššº(õÀ!PoÚÙÀß—âóy¼‘gb÷HgÒj¯± }|xRFPr%ò÷ó¶àÿ´’‡Ó‘Ù>Kcjvª{½æ&ˆ·O°3¿ìÜÓ¹hÂNµZ:Øé>ët÷Aòðáåî ©í ¼šÇw-ñ¹>¹1’W$WTÖð`Gv¤¯«³ÈþÞ­ýÿeÅ$:›ÜºXRc›ØDg8jÞ÷`×{¢y!ö\ïØü7Ãg XþÎM¶þ&É©þìUîmî̇:ÕyÀ^¬‹8úE³¹»áá[d¼x~¸ß-SIo‹ýW“ˤ0¤(Ì×N¨·ó¯-ŽÙ3µ¶œ?ÛKrϽh€—Ä_râÛûäœÜÅÞSÑÂv7õÅNÏ>õKk\òâ*EÅ_Žøú,9ù}˜ç´Ìñ¶ØÿjÙXƒM-¢ÿV·gö»*¸¿‹é®—¹í{= ]ì¨ä°Ìij½Ãë>“RŸH8wWÄ^¿9 n^üyÍ øQG¬KàMAnVÞ@mâYfZ{[èµ™<ä´’ƒX^F4/¦‚±¬oˆ?¸âòÂ+Çk¶Ë±ûÿ£˱õ(1 îÝÅáíLpÛû¸›åÇŸòi;¤o¯ ³×W=åWÙýþÏ+³Ék†˜7’Y×cáån”=6ÎM»/¢qàψkÛÓý"Ùá•Ä%›×ÐzKüÝ>ŸzÚÍÈ;N¾ÿžÚsA`‹vo|Aão:^'“[ë SÇÛÿ»•Ñä6uM)‚oŸvüæ“áG» f©ûÞ#mr2ãN¤ß*ܦҋ‡\™t%ÑQ=¼Åß7’ö"ÿk±W½>5ç$)¸W…|’OWèVЯ·Æ“²&±·þ«¦ÉdšTçvbç¼x‰›s³zíxfÏã&×HtÄÁÿc‘-ÊaÿGbï½ flÅûð÷(àC*„Ûü&ü­¯Öã{7]¨Ë´$È_Åëçýþã*kJ˜Úf1•PEb4²ntSÛn“é¾PÁÜË+cÃøÿ5w|JäÏC6¯F~O‹ì×ÄÊ^¼?3ÈØ@ËhD=…—Ø©ç=ùÔ` x&H¯ŸõýË«® ÄJ¡…©h¿ƒ×Å Yp¬þWÑzÛ?;Ϧ¬.3cJ|:œ!¿–Å'v“õ¢«&Ù•J)¬»?¢‚v@K¶þUð°-ÙÆW&_ýÛUÕ”2ÕÌqÓTç€uoˆ ¾Š߯Œœ‰©ZìDÔ¸îú}mŽý3ºÝœéñ‡ÌDù.b?Ì ”f€é>7"¡™5|â=¢‡µ.Ö÷ÝNÐȃQL8YR'ÄŸsãÕ!°eUwßBK I†ßª¿p£;ÉÔîlòÓ,øÀ3þÆíøÌ × A´$ÄîÍt£.Ð=Ä~Víæ£w?ÿ¾j›z0¡‚f¤,%Sƒ¯Æ%ÊKaÙæ:•ší3Ìðº›ì˜Áíy+€øëWjÅZZßÕv7‘=¿—ÍÍ LDÌlÆòƒtÒ§Ó@ñõ. õ©ò› 敉†ú€l‰°sFøkg¾‡æ·DJÇ*ëh¤±ú1‰OEÓÐMG¸ Þ¥@_íÜÑrhènãU¹<©5¶Tô¶xÿ¥•ÑÄ ®˜Þ²Xâ³½a.M°sr¢ 2-«ñô,¸¸vѳº‚,?ßø,gñŒ$¼b+ïiä¦@LÖ ž6žrÙ”ö¶`ÿå•›(Èg™–R‡Zm–lML×Ã㛣`4‘ô¾ä'ÇÍ'·%Göj<ž‚|Ü$({·÷0<šv"÷·ôº><õä/­L0ÔøÄ³©àëU´;ž0ÕMi¤åaûYt8YCW“1sºþ@uy.­»¸-Ù.'´g±ªÇ_ÛS_ÿñ–í“ܤ‘Ò ~JòùNàù –wt÷°!ãmÖýütLד ~ÀùKq AÛc^׿žåºPúúÄœã¿g%ÄÒš1f¿ŸnGÞûÙÆséêëô¹¦ò¬%>rës)ƒ´$Ún`mAý0†ÐRýÛÿÌ®¤}q“Zè%ˆ—€|Lc{Þé=d®ÓÜ3ûg&>†‚z à:­ø[,¿ÂÄô‰k\ÿ½Î2×D“ìrLÒQLÒƒðø×äµÍzN?éK0¾½»XVgªA+Ë*3ÌáèÿŽÕ;Ž1Ì yG•;м˜Ë“Äœ؀¼@ÀÜT¼g`˱t¨Ü&{¤òi¦÷·¯Â& UëS_¾šÇòNx:y>R'&’·’ à¼0‰ÜÅOÆ™>ÓÝṊšVH6Ôô6±¥)ù0HûI89d*H;Ð¥¦ä£ÕÝ?jU6ÙÌ“JbId¹cBIs³Ø”þ2I>›b>x^çÏõçúsý¹þ\®?×?v˜R°$<ò˜J&ëÿÒÞÿ¿¯”&£IgjšjÔƒ•Ì[ê‘<— /’gãQŒ:¿š)hªûðî¿w%F¦@ÓÔ¬4‡MdYlÈ3 »W2}aÅѤª4’õf¹éEPöŸÝG¯ñü}+¡‰çjà$ÒC Ë8ya¶ ‡FMXYh®H §vŸ×5Y+~Ò”@þÄÿ+ü 9Vö7é©~ûÊiÙ…„—¥»6«ÍVóÐÔ×/Ò]Kk2M¨-4;5QTí))äœégÊ¢ƒ”Þ>üÿÖÊd‚À´Œ¦¤o†Ë} ¡a©t“éw%[¨ôŽJ«eµ &Õq®èošSC©½_Äžùʃ‚¼-Äß½Rbõ“Ó´47Í0I¬5¹ÖÖ,Úù¿ÊO“ÌäÓzê¯éu žÐ® µÔžmŠ/ü¢Ÿ‰‡Û¼?ÿt"\¼ÞÛEu›Fß‹•<¶fEÖùX¼ˆî’'¦’6ИÉËiMvfiíè:¼UÓ¼f³›ñÇ›h2˜BÔú-ÍS±×òªk'¾l?—Èç’ {—×Ìd·zS>Jªëõ}NÆkkp?9È_FÛ!ÿù …É„Õ\”ìÔµ:Lßè{$IMC4ëë3‘’šø&|§¥´'ÓeÅî!ô¶Xï.E¦×ԃǗÓzBöÈoÚ ÍÔÀèXž‹¤qÀ‰Mè"@ëët0p”Ð`ž:V2À -®øîJízÁ–5-°x~ä©‹u3èGb ˆ¯X7Q`ôždÕâX{šØ;@‚µñ€vš,ªCtï Âþãð„¾|¢ïT<·¤»)o¼y¿ÿ__ ¨e¥õÄ<{,IÁýš?Ï<zt «—$¦¾Æ#ñ‰üÛJ»Ê“ý j"¢¥_“ˆHïú^ØÙ!U´'ñÑÐGû°ü5M-“Â4é8âIx¾íVZ‘¨-±‰æ7²CžKF-É3o$ ¸¨ëÄ^óO…ôíÐF òß[)©S‰þxd?˜bzwU°¥ÎÑUøËSÉ#¶6òÅUü”‹œ7LK€7ï‘ú{7ø`Þk9ê:CÕ^H›ÀáBJ½*7%¿¾“¸Z‰Œ×ßWÞÓŒ¼ ¦ u! Ò'Ðd(½ˆ—¼'¾|oLQª÷êf¦)cÎá߯䤠ƒâ`™ícûÞ¤º †Ü5 ’ê7‰ªEÀý‡È_R{€õ¹9,Áîé¦"d$K¶ÑÆ<ZOË\ý¨ç¤­ÊŸ›èï`vKI‰B%›†ÛoN¦Áõ†ØÞ0ÏäøIæÏˆ\Yù*¦Ñ‰ï ¸ÐS‰J´ÂÊ•`ƒŠÇ<“ph¨ ú›® ÑMâbZjÄkRélø`o üïV µŽJ.dªæîèOìöõÙ€!°Øsl¿Wî!¿" ño»zˆû¨nN^$. V¾’Hüé‹ÁƒFyñ•íînú²|^>}@vÍëSýÿãÃN뙚n¶}×Å¿"Re! ÄSÛíÛÞÍ1_îÊ0! :Š®×ñ„©ÈýCLl"õ¨ìGæ§²Û%Å“!"îÊ y'[±ÿ=w·÷R™D.¸†f‚QäÔó¼¾>˜˜–˜¸-›ä4’GB?¶OJ/65DQ >•_xKŽ)Æ¿Íô¸6‘êÞÞÄ2‰‰€¤`ÖÍvï…Ô–åTrýÿßÈK×Ñâym» ‘ɲLV#ÿ6âã3)µ¼à>Ýn&Ä4õÍÝ9iÀɈ°âR A62Å7 §ŒÂöåµ*¹ñ¬xo\Wñu”ˆøîKl=<çH3" P-4üç,Ïž¦Öß#°þ8˜ÌD´ð–‡Ÿ.@KÑMX9qÄLF¸A$DD;ßÁ‹®sŠí†Ù O(®½ÑÀ=#Þîþþ»üþf€„q=oÊBwŸïbÀÞÅ ÿ¾áºœ;ã`‰tEþ2^F»½î鵡—jžEL  Fj+³É¶“N(b(8¨Q…ܘæÓ.uYæ€y´²þ&y¼-¾«wGšbûoÁ–ó‘m<8¤› êíGª5Äý!½·RzK_ƒ¤–ü¢/Íi]íÝñó°}_IJÄÄkâGáõ÷Þªön™âd [O¼–RúB’+iT)`âyYþx&¯™k6“Ó§ãß;°Î~¤ŠüÃÄÞË»Ÿ¸ž û‹››=ì:ÁöÁÆX4'Í7ä>Æ×>™B”Ì£ÞûÂ_ßaT¶ÓK3C,£¨/Ê&'T‘®^ߟô»eÎÈY»½ãîû·Ý‡cO[÷ÄŽ€Çà:í‘ÂÆot(‰ƒ‰dŒè’ Ü‚6Æ‚ye]/¸× ãað/ <*¶“ˆ ø+Ò·s3ñ¾KV7E!›6–^ß×Ä6?L=‰„7î^Û£ìRÙl®ÔrÛ\¿ÏR^‡\CtœÞ' lG—YÒEz¹ÞÀ3ù^ÿ§‹Õv½¸Dæü.6“dæQÒ]5«§s¥¢–ÖÁxÅ]òIyb☘^•?ƒIkúJh=†÷ït^{ð™þ„ßkJbà>° T Ô~ÚK»Â\êámW£¡®;†0Ì[ st‰#»Û»à^òÌk)¨vªHI]«ƒô.x¸N zÚÁrÀ*ÉM°×Ï‹Òg'ú‡šàöÌ þ<{OG¢(ZÅà·Ü’‰,°Ÿœ?|ÖIÛhSp ~Bm7Ÿ‘`Ű06¾1XgÁrWÀð6G¶÷ "I¤*94™ëúÕHOh*O$Ï^?TóJ¯ö¿Ïc š&©®rÝšm¯ÂCòï´³cçq¨çÏ’»×¹p¤Ç_‘š¨3òwã— Á‡ Dtp®7ÿŽVÛ=á5q”B]OIHF|GõôozEmU49IN¨êÅî߆º/¿ùn¾"ÇzXû[üü#–ôÎòáÎöçæÈÏ ÛýbÑ $ëAÜF[RßÙ~fEt8²7¥¾ˆU‹Áklmˆ¯¬Õ¨‹k5òU’wÖåï¶wvxêäŒ:R–zõŠˆ½ë=+|uºbÏ6öž']ˆïÛ»¾m´÷Èþ‚í„È@þ–šØÖœ”üT%u|¡Šå2%Íò–í_ñ„ãÍ/=ù9Ç~ Lü*£ÄÞïûÙÀã™´@þÜ?/>Ÿ‰gÚiçvʤÐ-d ïÝ/R›ì“™¦#ñuP.+õÚìÔ²ó¹R}rç~§ÉYŠÿOàµãaúߥ$L¾Ì¡ˆV@­ÞV“!–ƒ“+¨„w’í45Û5ãºýÄgÁëí”܉hÀNLŽƒüŸMy/î’nŠ›PÔm`ã‹]GêÄdlÛëæ(Ð æÎ€Ìÿ§XsÜ$kßÇÈS ´“@Æ×ñr¬ë·Ýõ~¶3#ãë^< „þ$§ û‚ùåÜLÁo(¥•¥¦)æ5ù—’Ç™Cd¾Û ó]¹½ïñ} ’ÿ$/„U;ãþ+ö´ý­ÆÊ$ä³òÄÓ‚í©p’ÏùÑß~bdŒëý¶œWlç{Ý¿þú\b¨‡šáŸúo²£òÿ¤ {Öò*þŸ"N0óA«KÓA±­æpÌàƒïð;Ãï.8°¹§À~F!ß4„ÎJiðï7 ‹Ot3^vÀ›ºnqv—äztZ_¡’š”G$"!üâ0ÿÓ/ð†\àKT°±€W{0ÉÍtä? æŸuß—Pù¯D7±–Ýù2”ßÊdþ]Œüã‰êIÔÆÛ°ä3ñƒ%#bFhP#‘Ääoˆ-p?߇í6Rí•§ŽÉ‡Œ[°{jòÙQ>e:¯[‰Þ–àEÁÀ„0Ÿ—n2²= ÖM+à¦!ªn&^”Þ˜U¦…©`s¼ß`­ö¬í5äžÆ±ïÃ?#R އÁ.ÆŸçßs‘ì >\[H6äM¶ó­Á€jê xþêžÍhh"¾²ÔMRµ½µmß´Õ|æ%2ŒÞÖMΩEÄ{³ìšjêš&¦ëá›DÔÇÈ9šš}­Ü&kÝÅž¸.X+ÜÑ…b'Û¥Ó²ò@*ÂéZPõÙî­©|‹#Ñ}¼å¨Ë“ñ—ò•O;Í¿Ëɡω²ÓØß^+jNÕo©ëõýá#M2óÊØ³Ü?ñòÓõ4~`ÏymÉ7àó“\¸IøÉG<ü>qîÓü+@m×TƒÚ.Üù91>Ó]/ZÅ{§òYKyïrHRNÜ?Å¿üɘMu©6”ÊÆÛ] §q*™ÕvêÇÁ±$ûåØÇJ‡ù}ÜÌ—a° }È~[¦Bò*î¬fzj£fT59ù„'òÈM’[B¬sg çòÞ¾|ÂF¸€|/.AHLraYÍ Þï‹qÄ47ÏÝÃ$ºŽ8}жkÕjÌ‘÷õ{Ãvfá #ñŠ+ ÂjÄlp¾öZ¿OŽ·ÕŒ0Àî_ÖI" ?Ùr#´„w á·EÄÍw)èv§!Z*»½%iõ¼©émñÍ}ÓÚ¬4¶K—¨E¶Ïÿ4½ðCFë-]]F[á&<’Wò^P Û·ùÚhI0³3ú¨BN·¡nS©”Wâókñ™>`á tw ˜žX“в£ ÀS²·×5ÓŠ£°]m¿®âQÛ¯Ø>®Ãý¤»ëjºÂ±ß °‚Ô‹•©åê»ù¥‰úNxh˜@'#ÿ]¬? ù÷‘Sñ ãAŽ À)b#Ú9õt9cö1½->«­Éb¶ÀrìUËè0ò8<¢è{âw¬ÃƒŽXÐö¿ŸID G'¯%VGÞüZ Ò›bg@¤²m_\®Ú ýA×z-Ø·Á1¡³üv“È Îëšè0]¤Ýµ¤ièmáY#L€É-™À¦ŒúÒ]X‹¥g¹O}öŸCϳUˆˆdºÊnŽmb´e'þÝ VÌ«¹Ý°ˆº”*`«ë}~™ 0 >p&tω öEÀËâƒiÉ5|¢ì`SÑTEþ÷Øf#Gi« àß2ا›ÅváÓ»¥6Ù<¬½ 8þ™†’3ŒÚy?—©v  •ò†ºù€›su‹Û©pùëy^†õS¾ˆ-kg€Wò¶ènýj*™àRØõ>…??ÄcO¹ÐOݵÐhb¦Ø p¾“hσ»éσx.ºö—žÒK?5£CÙ²ÀÓà…í–yÔõ¾¿Ë϶wÞU7]3*~ÓÛ¢»•ßT7kM¸\Züò V¿LÝÊùî '†'¹ ÐÃݵŽÛH3R~“Vä†ÄÅ1j¢nnÆËlwõÞ²„ºwr :Ž“_¢ÉKð©Í|ÂU²k0nøÆ>h2@ÓU+ùO°à#ê]›¹NîcÃqààdZä8àbd´WÇòót1P â)›Á½ DÈ "ßÎÃ^õ÷£Ç{È~IÞIN-C |]MB3÷% ù¿žøÆÝ0Lv“Øô“3‚üa±LH°à9xì#7Ïm!ÜÏòØ!àâfÐ},yq'òe¡‚I'¹¨cOº3ƒ;‘zÖ·]P7#ùcø°÷mGÐüäÇÔ¯A‚¨ eTØýôûJiê™§ò6Ó ϦUÝ=o@ƒëDïtäYÂmuóK"×DvÖÁ&¤ëÏWx=CÔŒwÓ!W¸ÉöZ²¤y<µû?ìuð|n@R/|YDE¼-÷?¯ôDÀf³£KÅ1*V²{9ïPÝw½À “igÏÙs»[$ uŒÝƒ,˜V-JØ*a’›¼ÅÍ:Yâ¦?åòW¡ød{åØ^;®~çá}î÷Ï+>d¢R•Àº‹@µ½Hl¯ÞÅŽS{•›1™×v®CDl˜Œlgw Û)˜›Ýäk;)Ïêg7>p‰WÙ½ Q´õSªëd­Ûu§¾£Rô{üL&“Ûx¤/¨· LÛŠ¬¶n?@äOuç¼7QB3›ñ‚Kb»ü†ÃSöó*;Û18¼é-Q ß¹{Øäú`ÛNÉv„½o8'œ!'~ÿI¨”×jsOñé?¿/{ON1ÓN é$ûÉqoÇæûö ÿ:—âñÛðô#’Ìõú¡G¨o©éâ¹½¢öšIXÄF7Ùjä Ñó‰ýÀÇûò½Ep0ËÇîÌj’™ñ殤&ĆÙއϽÁó× ç%9ÏPì°™ì]ÀMòË î­— w…;)RÆÔpzÐMy×õG+Où飨.á¯aÁQù·µãr >±÷ù_Vnx@%3ÛÆÁíÞío°ú—`Ù|8ˆy®‚ÿ'ÜñÇË×wØz‡Øî§Qô#Q²Òí”è&©§U{]åµu9ÏîhŒ×½RÏ‹×|þ_+3y "Ä#)˜ewl…ÂöÂiïH»Æ¥º{’Ìôÿ„·äs;§loà×`ßFW÷Ûs 9\oìLšçCÂ}:Sñ– B¬¥«õ2u¯ïõÈËeòšqÆÞ‘ oÏÊÑ&Õ„Øýò?•Txn!*·“øñïÓ«SáïyôH ÄøF–œï®~nÇþ/$¿6×fnG~âã+(PÙuLoÁ»Jß`þÿv¥7UM$sÀäÅRq9ÊØHCáÛvÖAR­MüžÁþÁÀòôx³Ý1cg[%†+u“¡¹+Cöº½/¶³ë0 àÓ"hYUÏ-(ù}Ðûí* d2á¨psÄáÝ5»Ì A."">Zhˆ½oR¿$#‡5Dš’úV’jiìM_È4c÷=‡•ƒï†ñäÅg:R16…ïüªWÔßsMúú¤õ_mí$(óÊøQ¯„‚fFÎ_±a27±ºñü˜¼î<öÊOEdl£ù°Úˆ¬v¿ðyI´Yx_[ô”^ëŽß/Ðý<N zuâõ__5Á€b&²)"•ÕÎ=°÷7UÅ–±‘®¥vá·w°šDZd": €è ½y=¬°× ÞHA´6œWÓúšÚg¹žFö©*ÚLºùèÝ¿ÿ¼Ê…Í`“€è ³ÿÇOˆ¬­‘¢—¦ÐWòD>“ÑSáÿ5t¶^tSJ«½ ð¶;Ï÷Zê }4’Íd úè½I,4•U>ß '§)Î1&1ÏÌ'©‹„ñ±Zy­‰ù76HþfÞM¿*R®rñSP;ÕkîÚÁsi˯üé'êËoa=õ„œúô¿°+5\ ±élÒÁØæ¸;ê8P.50;y×Oìîïm&’¼&-^ G!zh+<£!ø—ëGú úP^›ÞìoXþ&e³y-ÆHå6Víâd†Úp»·5QßO'ó™t)9"2ò7%?H 0oÕä\Ý€ô—t>4-¼ºÏùïY ñ‚Ôf’ùi¯_àƒt¨öÖäóŠäÁHZT_MML7ä‡ lo€ÂÔ8ï5¾g-ÿ.ÔrÒ‚ˆúã­ <™þ&PÖýt—ÞÇwóµFëÁå²i8ñhYD®K¤ÏáxKÈŒÕÁ‚G²Jc{ÆyÎã-E¥ŒOÝëý·¬x®ÿÿF3 N×O?i1OUÏ+¥ÈmuÈñ[ÑB€ž"×å·h¦ƒ›1[N£§Ód„Ǧ¤rý¿eÅ¡2®kf™80¿¯ÒUïë4bá¸>]_iÏ[=ƒÿ÷Ñ‘ºVQ7Ä ÓñÚqòÒ´6ùþôÿ/NdüL=3À“ÖÒ]WèOpm™~%*æèI=¨[´«NB3?e•–«f4¯Îh~õö¡ÿÃVêòp£žfˆ©&!=Û5Ðó”/NEØšˆ(¦iàm` Ie”ŠÆ|ãêÖ?r…Ç¢yMsÁœ‘‘úRO€{MÉë Ž‘…ÒH*R5íM¯ß×ø?³²Q%G6½Ít³YòêD9-×MK…ê?žü4Jl̆={sGßÿüJorà=M1)(·Ì8Â2SBv™µæˆ·íÏõçúsý¹þ\®?×ÿ—•¦›Ù¢ÎùcWyÿµ•Øõµ/»ýljÀkSÝ¥…í–0yø½_ùøû³ßõ¶’S§3åáÿ L “Rî˜ ¦•©ÏÏmLh¹gF˜0ÿ ¦_þ^½«ó¿’˜@×>2Î5cÐASsÖìÅÚ#ÌTÓD¶ÀþóH3é&L5*¿ÒTŠéÿç¼þ㪀ÏÝ%ÍSY&H©/Y¤>Þ‚:àªÑé²Z¢iY'{¥¯ì1Mcü »ÏŸíÿÏV6$©”™©þ‡šIéGé/%¼ô2;LÙ qµ²ærÓ@OÊy*÷$HË[*$Ûã1Õ J!Ådj¼&©Ü”¦šBjm¬5õÜæù-rJ k£Ç5½~•ð:GÓê+)ÅW=^ØëiÔY€EÈkÓAúZLJ ]†ŒÉ5ºöÓZAK#“Ìíc/«Ù´€ÆÐšUÇë.í¢yí0õ¨ŠXàïmAþ®åg û M9$é‘)©†ÔJECkmƒÄ¥´µÄÔŽšY3h8d¯è&`æÑn6ê"Ý¢u¿æ‘|îŠZAo‹ó7.²]ÓÕ\5“%´Æ×¹úLI#M­¢w%;~pNûj´Y£ºnðy]_¿ˆSë5í¯Ýt”†ð¤ót’žðƒ ??JJöÊæ­2ÈmßÅîî²ýßsjF,œ@wJHý$=À¼ð<— ëGí=àÏä¥Dw³À'ñVžsº@F‚%á¾²ã÷¯-?@^/c®»“ûÄ âãk ä ‰um/ìs’H¿I­­o¥21‘“ÈEÈ¡@Š¢ZU¯ho­…𚦠Â+½*ËÁ’Bà¡7»½üWV&8nb²÷ÓKº»žµ 4˜&Fú¼nGHh|á¹$Å2èc™.Õ5‰¶Äó§h]^“†lØDÇ!s4–N7ð\2Ý©¯ÑÕ"ª†©jÊz[Ä¿²ì¼ŸÔàU8"—d†NÔµxþKÉ #ðö¯òX"ù¶×El·ßeÌïFèdÝ®+5HÉ-A¿dû[3ì_Ç]=þ¡Ó5·$6E½Úïé?[)ÈøL?s”8Þ#±bU²ÛÉAL—×wð›ØÄ€Ýgw8õÐÓ a'­E Ø.8µ4ž&Äöñ®ÔøIL7 Âîú^Ž®ipÏ™åûJ›Ê ÞóBŽ#Ëo¢øL,úI¢Û¶ëÿ}"¿¼»C.h‘pJ2HÞ^øÈ©3µ¸†!þchv^ÓBÁÎà7u³‘Žfˆ·ý‹ËÞRÕŒ÷ŽÊJi+e2RVÛÅî¸BÏZn‹T¹‘«#2×#Þ߃~<“}”v;ÀKèp002y"¨©vÕùº^{¡‡™DÓAñ“ÎÞõ/®È¿Ùä’ZR[~“Š ün2x}ìø^žÉElX¾I (?^QQc!l ‚»—7òWB´0°œ¡ï.­+t*ÑRÍu è©¶cêAÓÜÛÂþ‡åO}›ÉÄ °òHV;–&z‹jAþ3x+G©{"÷ ‰íâ|†…“ ‰àARøAzrÂ)@=`YRJ¡  »›ŽÑFÔFÛƒ„G¤ƒ”ó;ÿíŠO¥RÂ,;ÉéƒÄ'æs"WF¤/‡·ÇómÞ $Ç× ºÞ?ÁÀF{WexÐ;)I¬¤ÕÃb'DƲ ó>ÌÃv<²÷†ÖѶÄÂ"ã+ÿ—/í 3IerK<,žïÍ@¦çöý…BÞRÔ¼7e«”ÐMùŒF^Hp7ã3Q`ïöK'ä$ 4‚÷Çzéq‰ü‡È)}„ `ý@cküh`Ýmª½h:M>H4,½KŽàõï主£ÓîñßèzC¼–(ÏŠÄ£ÎËÚ'âõo`JßøËGÞ=Ú;J€þ°zMÁc¤ë¸}j<Ÿ8C𒨝hÒ8¿îŒ¯>Ïpº2 tB}‚̶èÙ+w|#ùqãÙËîÈæd†Òä/‚>És÷ê¼ò®ür„À£r‘ÿã!öî)Û[/‹c‹9ôˆ&“–Þ Ä¥2?gb©í@Ž×v¸Iæ§å8£sÔ7ˆ‚T¯ð€•²”šo‘ØnÑï@?‹û!±ó+4f{Å#ž‹ítF>Iž³wz§vUó!¼ÈÞYÕ†ê¨üâ$hÙÎÛâƒÂ1L]Ó]’s„GÄîn€”ÉôUÉ…¹áü±åRþv— xéç¸9–žÇÓ#¸é—×À‰ûrt8ƒBÝ÷È߈¥ï ÂW01,Œ(>>RYÇhsX@k½bz*f,“ÈÔ73%…n“ù2ÇBYFÜŸÝl§V;÷ê89äzœqwÆÎwB»žŽáøžE¿`Ùèg—ëû†Šá~cgaÙsCÉá™ðøJð©Êð‡M²ª Œ§žz»û‘ÁúùM[³V~"÷jŽÿ 5þ]yŠ-ãõ¶‹Å!¤^÷?Æ_"ai›ÖJñ‰ÄЮÒ_J;ÇÄöÏ?·< ¾çó.Ht5<üÀªn"dp²´•´nÂ^K-“ÀËòÇ6ÙLY3ÑÝ»Zí öw<½îú7mñ÷áÑ+ÈŸ¨ýí]O?\/Ø^2SF#åC³Ê„ÕI²^–ðu‘WÂë_¡Ã/d€g „f÷ŽO!}i´Q ¨¯WM!üÏ»+><|±ù¢Û‰m!°U7ÓöŽëàûÞ%;ñÿír[r“µfë\þ¶H†ðÜPž‹!Í3‹öà3o%F’üEì;+3{—t½r[ë"] êN$¬—DVlÿEï®D¦Œi#þøuJŽ7Ñ6‘,𠕸ØÒv†\Cä‡Ð0˜亞2KæÊ`±óâJò{ü<˜Ñëy.§y¼!^‚Áê’õSÃbcùߨ€;Sás¢iQ¹ìu`àýqà÷±]ÍþnsM,~MÃÆse"Ñÿ¿¶wô¿‘QÚÛÿX%3dÐKºð}°LÅKêëF=Œ‡?vlÁÎMÊC5ñ‹Þ /ÜC—EàÖ!@¾nÆÖI$©$„IêEéSÁýê›9Ô.§År¶`î·h~Úu®.¬$;‘|ÙÝù~‘ ©>ùk .±Î1§SdŒëqUZ·é(ü{¡›¤ôù+èdprœ —–ÒZjÉoü™ÿÇÎPkL¥h{+U¼·2?sÐ\¹`£DË¦Õ X8*™ë 7ç‰ë= à,b¤Ù»'±<=-Ççm§ÇÉü›RÇ‚r£t±zûGÐCHrѬÀ/l«¹d·êDqS|¼.¨W€ ÁúÔwÕÐÚX²ÚjˆóÈûL²À †RGå¡,Oæ/ëfÀœejƒ¡KÀ”è2Ü«Sàââ}ÅðÔÒ@ K&}!Üôž¹ ¿Án™´8ÿß?€‡ÌƒØ~—]øjÈ÷”jÏ~V¥¶ëMÜûoÅ{>R'FÖ2 Dˆª¶ÿoÜø#Ö÷Ó€±åÐà$~>.âÍ€©L13Œ? Ž…R#yt<ÿðšø /¬ 'J£–ïáë´”Õzؾ—þÊ£ ïh¤}ñˆ¾ÔxݰöfõÀ™×‹ê8ôU&‘™ 8—ë亀‡æg"€ñä“WïÉ úm‹Ee€«×lØGÄú¼â¾$%/,à»â ³¨ýúó|YÍüí¾&rG‡ËŒÆóûcû¾øuHwÖ`Ÿð.å‡Üö{X˜t×%;•es]É;[ƒ†›d¶Wσ¥‚ý¶§b;$AHz’Ÿ^rô¶R{!–Ãí“NX2œ®vÝŸ¦ðuLr¸‰ï-´%þÒ ®T¨o?7 /Óµ’Xã%ÿê¼$dÀ°S>ðY!Ü5¡ÄxΩLlLñêýÐYá_i8ÖoÒiïñ¸rß&zm7›DÚTº‹íÛe» –~ŽÇÁþÞžÝï«vªÍHì?Tk€ý']ï“®TBá'ùܧ®‹Zxª¤¯’éíµ¢òpÂbz^Z÷Mu/N®eüÍQ“ÿž)9‘ù5GÜM¬¹)ÖZ#@-Ûíhl¿›ŒâûD~³Ó>[ï±zmŸíì&Cå×LÒ´ØF~³]ð¸¾êyÕV„àïÄNǵqõ.™,¥¤9 Ô[k’IgZ“ßI~M§›Áø[;êî ¿}Ç–÷@²ÙXø?d Ïkkb÷ @A¼¹#XÐO§“AN™±ä’;°EÛ.Œ^…?' Î‡¾À'Bþ‡hø‡Øiáä­iá5ùgãÿÛÌ ²| 2ÿ'Ét'8öåüû–£~$G@ƒUp¼‰ð¸e À¸R*˜vX½#\³ž×/äû "è"ŸLïËU±çÇ×ñìfÐæ¸ÿ)1<òWñžõíü‹ì&€Jw.}¥3Œ| q>–jæ!ÖŠ "\@+cá¸3ÐB<àŒ›wUõÿ°wàV^Iº^U‡wwwwww‡$A‚…'@€àw îppàîNЂݷV¦ï™›™îžî{÷¦Ö~Îále—}õÕÿ¯¿Š\׌Üß’,0^‡RÕ–ˬOÖT`!’®ò3$îãA—Áë‰d’GòÌúˆ×sš‹„ÿnuuµ\?xÎe„­þèyºïx\‘çøìI°lõÝPb¸~X¿·îM¸òs0Fͻ𖟩çãý3ýë—ü3ˆy}ÎB//$-ìç=½ë"9 ý]ßÊ?ìIK÷Å‚ã³As}Ç×-üX_;›}ö ^a~BAïÇO'Àzèà@>Ð=7;÷Ž£±y¼g%Ÿ±’(_Ë¿ËüÏn±©W)ÔΤ£rCeKgH—JïÜ0×ÎUq¿"÷ÿ<,~ÝFüEu:[ÎÀfúÉžóùw>kÇtFJ|¤oI ´ÂJÁÀ뺒Ñ/vþâsvá+ ˆ™àþjp`?·øDI|¤<ñL³µ|Pù{¹ž®¸+ ö»’¡!áJü˜ôÀ ì|O_ß;Ÿ~½Çóƒ’A"Sùd¦Ö©å§º?†Ù=!¾/¡¹È» ë[ïïYøþ~‰ä¬\ã})àÌÓt7ô‰,%»ÆÁ€¿vW°['<2ßn3–E´ó“^¿n¾¯çx¤í§·ü.ÍȈ|GÓª0ßÒpùêdÀ–jçîà3³a kÀx;.öŸ6 °O. qÁÓÇX>ò' i*¾pª«ãú»8dÿ£èÀòÕ(l~ô›å?Á—?C–XŠtÀ·ƒiÝä27ÃöPõ—CŸcÍÆhä(^‚Íç{þ³ ßï‡-#®lzR°/¿Zïÿ讑~æ;ýâÕ[FjöóàÕ<¬vJ’Áýïâ­g‰t뀾Ìó¡ R‘ q_ˆOÞê‰Ì½É5@ÿ©ªƒU‰ì3Tý#ˆûýDýNt6ËÏÕ¼(AˆÛè夤áuv>ä˜pI-<«‹+ëŽQãã¿ç'ŸE׃Dúû`õA$ù)£ƒÒ„&*Âwl?O|¾^ÐÁi„FšÀœÛá1‹Ùz¡-BŸ?í.‹QÏ ï]É'<’‚Ô·¥BPìHl‚‹]›"ûyÝQù7)kxxÊñ©ÿ“jz2D9ô4RÇê'ü?‰ƒb?|wÀ3—‹¿§Ö±zšŸû½ÇÏðÚˆl}ˆyDò |`&øe¬÷óšîDrOÐñ)c>?ÌwŽ¿†Ç/–b}cÐ{ý é|j³¥ŸSõf׌p…ìZ‰Ê7O E÷«¶Ëâ–º‚ú‹ÅñÓ®/ãÑç@ÿ`-’B²ÅX6^ðr‚gÅúþÏÁÆ#ðƒ ½iÉ&ÿ-ówÿ§ø”½hl3ø¸Žd'¬Ãl¸rpì„/é²¹\®üÕ§O0Tls‡Jý*?‰ïQăM€^Ž|ãÈçŸÃoûÃm–ú /åð™õ ãt3«ÛkW÷?"ù>ßz/¹õ*ža3…‹uŒF ÐBjZt¿lxI[w`•§dÀ¤d©ØüõëDÚqD(ñl3 '"÷fb¦Ø$ÔLÚW²IrÆzä·ÙK¦ÜCæß‚ƒ ÛàKg%+øXÏ¿ŽV¬sn:ªÆ7<î÷Wl×ѽ‘Ëä¾jø@Zß­öL5rŽ$÷MŲ6÷pª?¼™ßvc1þ\?“#Cwúã"CylƒØ>ãülæv ýFÓÆ—üËŽåc„3€¡A1ýÅVVWÁ…Ƚ/Mü$#Û¿p ëÍÄ»{"—Í=³IxÓñ…åDøVX’í{±næk%&U¼ÅÂjdµ£;›üH;_hG€÷±Ñ«õQ­JæH¢Eµ ºÈ¦ÁÓ+ŸKá ¸ôZ‘Ú<±¾Äëú)C‘¾7>°/ÞŽ4ãy,éßø‰6YÀ±ìè,•ÞCê[àF}ƒÜvì×úá_F ·<†F¥î©HÞ¨}ô+¦¶Ãò©Ïõp‰]r—ßµ•O±d¬oYk:™m8H7Ò×/ûÀµ­x÷0Ðõ‡­öÓ?ðý#Q£­&â¯Pó¤R;K¾ÍOt<S|-ˆ•dÄT°Æ[b{Zr ÝM?%þ0y4½f‚O8µ#_7ð™ª0ŒÅÚI×P+5qûù¯l¾«Ç g}&ø‚ˆÿûžÉ^Kfòw¿¯e%?{å®$¡~ÉI¤„òìc4TÅ[ÿ"±ùÏ£¡ úžŸóâÔŽ¤?’|ú…®ÐEz_ßû‚¯lEWØ­r½§4ß9,`%b“Sh~?bžq˜ø>ªý öÙ5~Yü|[›~°ÙÏ·3)©´þQƒš8¿ßEohÎm¯nâêZØ?Y¹l:öŸ/ñüÜ‚xXt~S¢ke;²f%ºw€„ßcÏsèÁæå'·ÛŽÿk`Ãç=·!Û%¾6FúBÚZ‹óixoR°¯‡®Ô ðþàìð©+âæ»Ñ xyøYl<ü}*·—Ø2+¶%ÉЂMx´½aÁ»DZG[ ¿e€Ãž®Å{©†KkO¼¨ •ns>­*‘ðE›5©z›ZÔ?]õ]Oòà7®¯ØÅ–Xï™4"dÆr"c*4ré“úDDêúTÈXŸç^bó¥žõœ£î;ˆôɵ®ßQ¾3_?ó6k”–ºÍÕ â+ ã™™\g7^ÊêgZûU‚¯¶ fëƒfYÕö$>ªùñV×áï¸jG:–’v‹íýz"õÀúÎpÞÙú©×ÚKëe2I»Z.güþÚ*å2ƒ#ÁAU·Nãw<¿:÷m>Ú!¼ŒvGö°ðžjd†÷È¿úiÇ–;w‘ë[¢Û÷<”˜ï©ót‰®GË¥¿kä0Šã\Y÷«[H+…äÕðõ  W!}H–‹'ˆ…TõtøVUëq`¾¶?~ƒŸyw˜j·.UdyxÞ,b¾ þ³D¿Õî2,›%ÐþÕõ1ß1µÛìFJ!ßÕ! (W4|%Í´­gy÷¥¡–ôׯwÖnà{]ž½íw¼”L<›”:ç#´3V¿DSµ•þj{Ÿ]ö 8Þý×Wøp{Q.’źë`$X„Œtœ?†_‰Ú­œŸbõä¿ZY]#ØJ2X@U=¨7ô¢Ö-ÚÇ#§Ð¥TuéñŠñz‰Ú±9~ ¼·/YÏæ‚ý–— ^0œçøŸ-ëü–Ìq)e¬h•¾ÁÛÛÀélÄ0Ý¥`ctöÏGF8©k‰õzð„‹ò»« +zì*½EþleséÉŠ)\_wØ…·k?õ±>×H½È’7$^ÈDt1ëß!ÏÙùÝ1²ÍýàvÚQµ@ýÊJèê!IiÛMv?HmR/d.Z8H¼£×©j¾GòÞú Zˆ­‹äC<¾4ÕÄ¿ÖÊé;Xõv3]xÍrFÛO7Êy¦aB*ÃÊçDÃé ‡Læýë­\p£\E7Ƚ ÇùSÊQhWùDÊI7YOU%h®ìÿç¯.¥ŸtÒE“êª;‘u´ûÉÅkî¸û,ëü¿XÉ\'WÁ-rOaI©]U7ÄMtƒý¥Þ­wëÝz·Þ­wëÝúÿ¶ŠÁ†ÞÞúö[ù¨‹ò¹ÂÈ_Ö×;E©—ÿuW&ÃÅ£LÞïÖ¹…®Õpy\#Ø`sW æ_œG´§Áÿ›U;§„ý'¦Jâ ÂxO¸áT„]ÜHwJ?¦¨„º¯]]Wž×¦ECÿ:+ ž]’š6¯ëè¶»Sn®ëëªñSÞ%u\"yáÊo²[ÚI5y鯻êxAr—Æe ho‡Îʄٱzi—Û}éæKýQÃhiù_¯‚õ³êé¨=µ¶>•£rK~‘oäÐ 3QQ½½Ý~POŽƒå äSýN èR-¯­t²ìví]&9¢yu‘ŽÐñjï2êD]©'eºœu ÑAU G …øV> +¯rMd—Ñ):M+kB­¡mµ^–VîšÔ i¡µ¦Ð8šJ j;= ÉB„ŒÓ»’MŠºêoñ,”tÄwf7Ú-”H>OÏŠu=-£ñ5­–ÖêMžÈ¯ú•VÑtZ_k Íó_j˜óº‘ß!!ªýÀŒ,oáQÐZÄ{&ü¿ûXòúi½´2VÔ¦úF"hþ½ Ñ´+þN›ù³å55šøL§ê!ý‚×nЊ!%ô[| :x;Îýý±ò¹\0™–d¸Ò ¿®á{[/› Z\÷‰õ ¨¢õ¼^^J6]¨Yµ¨ÓWb½!†h¨¶×ZÚE§kÜ z|ð Qð¶p£Ìdø,nƒ« š·Õ¡šÒ÷BþLãaù°šL/Émy&´^PCóiwí¡³´›–ÔRÉGƒ†ÕzH.ðýþ’é3°2þÔ Ð¢ý +=¶ÏçÚ¸W®ºÎÑþ:Ü{õÇĵuDº%űìoþ:îæú\ê#e{]«÷õ*|\¡cµµ~dÓ`Bt‘A§È ׿XÏg÷ï¿,›_•ÙUrÀ¼Óxpý©’"CwâàºX‡ÜŒD|\M 6ÇÞ#u2ï>Ö&*òï2"#Þ’Žw&BmÈ­t“Ôq½Afñ¿Yý¬–„®­|@®ÿ kZ——Ⱦw[$?+‰üÙmÛ‚Ýíº¯“䆞ø~>²Bͤct‘_càå@»6~¼à>Äšñ\ät®Œq<÷¾ÄÕ Ä{m¿s-¾>X´ŒÆÖsœ¯¡Ñù© ,†Ì]È4;ÚIa=myß<¿“>²^3C÷évÝ«¯ô1QšºþôOWf¸j!7ÂÅ“Ž2YR"G¬W)~•ߥ¼çšœ–èàÿ'H]‡ü6_¸-MðZD{&4à4¢ö†!VÃ÷ÓòÊfxþ(]Ã#kuß)²K6¹Àwýü³UÚŸ§¿I¾Ÿ)Ëe»\”SRIª ÙC ¯ïëE¹$ ñ‰aZ OÏ@dÛu¼µ¡vÄÿíêæ—ä‡®ðáš„Èo.|£óá `ƒ¸¿©$¹-꟬ôT+ÅÝP·E‰`ñÈøHVÁtrc×XzŒL~%2*ÀrÙ>7ÑÐÙ{‚@¼ðäʶàaQ¿st0Ѓh¤88R þÊ+ŸÈ*0&Øfd§‡ëÅs|>+®ïiX0®´ªÎ•÷‰€7è䬜'Ò"GFéç[„’òzÛšVïËxQQ¢Æð1¯›L™‡¤DOYÁÂäÒ%ZVsƒà—Á³’Rç¤s¥£¿²»1…%×GĪÙa¹Eö¾—ƒÏþ€ì÷ Ìß:<—EÎÑS.¬A®À—Êô5ˆù¡^÷?Fö‡dͦ:mÍ úè2éÈh¡ÿ÷Ê袒õºÚžû1ßµñ{“ø.åÑCNìk}¶KL¤³9»d3?—`¾Ñ@ƒ6 d^wVÎI Ð"2‘HûÁÿ?%¬Ï‰õ½Ý-—¥¿ßOWAÏ»ÂÔÕîýú—•ŠŒŸÍM”~§~I<7"h_PèõsJ¬G&îAº;DÃO2Kæ û+q~âSa0 91¯¾Éó™È áGUà§›\ {þee‹Ê¸ïAìèÚ ›%æ»^'ÏEAùAþ£ÈsZ¶þÖñÞ:Ûí”daÓ°^Ij$L®E6ñb3ÂnP?Ä—£×ü{—¨ùd,ƒØnÑÙ:ªêgb¬s …wÎÕ¿û]ÊûéÈÏaù 8:5Þ5PïW¼ þëÛ.÷…²=ìæ'*yâïûIîK},vÝð ~Ÿá¾jXßMäµX¬Èxþ‡¾¯pdÏž €o$jÁ¤.ë#!z”{#¶—+ ÙþQ¸?4wd5’[?ƒPY/+©¡§'xµeƼøýK²Û1tt=(\àŒÁ²›±þ^<{!µá ¤!}A¯xîCI.éÔ:ÇþGyÍbá5YòÜ! Ù$ž?P,Pæ—_«’c“-íʱ®f€åO?ƒü'¤«vï–Q¿¥ §%Vë]­Ÿu.=‚Ô'±g6Pn’Ì“‘ÔÈ_"qy) ’-2—×üŒ—ìGgÑáS05Ÿ” LÍìg!¥#KäPë…ÑY'áÓu5¾Ø•‡ì÷Œ¾a^¬cýš“ú)8Ñ©øvcÁÈj½ Îãç«©îR…×2ŸH‰œ5¤1~? F¸\Ö‰ÍA1l!žKFäîÿ)ƒÏòÇÃ[S=Õ†+¥Ö´£Fi.-a_[ñ©B¿pÔ°ú \ÿ}8¼ƒÁYï— |ç‹Dy|} ¬Ç÷³Ã[¦êâ{¥ï2 ÿïƒf†ËYŒo ×x÷V<á8&ä·Þð%u(Þo½DÃëIêÂ6èa$ؘ+ 3âӸ쮛;Â;ò_$ΦíÈÓÆj2èä°ûd†«Äób{‰$#F>UÛùFÇÊ*#ÓÑA/*¢`þä Ú[É»ðò¨Η°>™ßÉ·Ü:éx2FA^7FëôhX*äãÎ!¡]Ë]™£i|>?!?àñ5‚ïŠs•˜IÎkIïMoz/ó=ü磅EðåAÜ>ëG©ñ¿ßᆻÑI%üʦťÕ\TÎeÈ™ÀôxÖiŽ èÞ¡8®´+‰¥~Dzi=‚Þ#oýˆ¯¯Çºñ|·š8°»°›S2g¬Ûks<àK0ì*¯ÚŽüëÞìþY.”¿~óÓ¡bªõ@xBEœˆß/$.ÈW«à»&6Õõò›'Ý(½u>)åæá÷™õ ùÍŽëÄ„Ï8ý[C&´# ¿€Ž6×p™„Dm´2Uügpù¶ž×†àÝ}x¤ƒŽ%.ö"ÝQb%TÂjnر ¿dÓ¨TÖv¶0ƒVÄ ÊÂ~¿ÒËh f@Ï §ÿg’³Oøîl)°X\–ï6ßÿ(UËcäÿ•¬f4 ;Ïô×uÛüƒ® øPí¯ÈãCÀõ¯Á…‘ ß÷ å"ßAç>Z³¾¢Ñý\Á$0Œd¼¯ QÖûÛ, uZûòºÀ,ð¯Îp»Ò/·.Ý/üu¬{|—ì#Š¥ «Çñòù¾î±ëú?¢âïõÛíMü5°ƒ°æ41’w¤ø `Ýß6Á˜cSQØlÌd„ØÄ~" ^Ô€xH«\ÙÊ_ô9åö“ýšµ·¢‹Uøúmm…ï\ë]§æ›íû@m‡Û¤ÅÚ­ýÌ‹ÆH^G[!·aߢ ?˜¾ þàûŸýBÅoýÿ`ûjÒ±©šåàÁSЊabnéÀn½±ÿ%÷3ü&.9>Š?Ã{—ï=6sÌÿ<`Á9±Ùp_SûÌÁ¶o¤%Љ<ÙŒ˜oJ¼÷F=@ÄVºÃw}ÚŒôû°¼/~ úGÖsèô ^Ë÷¿©¬¥á¾/¥$Ÿ3\ú¹ÀõIüovGÀ¾|dþ„ÈON–O‘ôüæ¨Ø͇øñr$ŸJ®›ˆW‡ñ×>—C«h» >#ƒh }ýÇp¦­xÌy´ú;>t M šNÃ$žˆIzˆŽ­ºÈªÕu|À>h_¹¼n‹Û‚Tª)Áè+°÷qðºÓ¾Ê_Íïõ~Þ&¼ç;ª€ÈäôbZ‚:ÆfZwñÓpZ‚]Ñ„M² ¹íG —ˆ,ë uÄÏÖÛÊÿc¸ºž8cä£&XÐià%\¤¶ —ûA½í~Ƨå9›õ0Ïw1=LD›<“‘a?©÷:Áꡃä‚Dþ§H?ö·E:øúsø¤epÆc …;ïÝãûÏÅìL€è5öSÉ((I÷™+Nο ¾Ýó+ûÎßc|·ûm0€»Øî[rßXžÛÈ«Î!jЯÖ®´ÀëÃûlþÅ ßr Þ>Ÿ™ÅÏt.Ÿc“c­sÜVt²û‡ƒ ü,VG wƒ(k÷µ«Dv¬>J%3DòýÉx¼%ß&ßlåÞ\é‰l÷ÐVVämDÞû-ÔѰ¾Ï‰„ú#ï}(Ÿk±¾Mô)ßG«ð¥ÝäNë’ÿ´I§Öa*£Îp¼Ý7ŽÆJ{Aãg|ó¾²]€$6Õm·¯ñ‰õ|ÿÅH?–ˆ¾Ìß»RÁöBîüÕÚkd(þ¿I>Âûwóê pȾoªuij~xñ¨ÿ3ÂCÀÎ4°­7h´T@å¯çú¹\n$uJ(<'&lç.N ÿ7Ô'ݤ#Üx¿iežïxÖçƒö~ÏW$o |ŽÌïvÔ6GåK2Åf4°ÏwK›OΘ†ýûy(Y´ (Œx“ä5ïø @Q7ÜåvqñéTxá©S.À„¯!é4êúÏ¥“t•þDò ßíu$Ù|«Ïu6<¶µïü]†ÐÞ÷¿oŽ.ê Ç™¼ÎŽ-ƒ­G'Ê?9ý"Œ ¬Ÿÿ•JOñI›È"óÞ i:èí¬Î½%ÖÍú¦D£JŸ„¼C@Âø~g LÆžƒñëô”+6÷ZÃxz.Ûï¯l3½tz›J\@6`>ùã úMD]q ˜þS_Çé*-rÆõ °ôÎm²º©RNÏ‚Ê °Þ׳ñÝ“|ï™àÞXlõ2­ÙÖÂmÒJ^Ý–Œß ¯¯†­~1l_“ǦKq¤Ÿ‚Ô–G‘í¬ÿ«M”Ê ±¨­O^Js¾.Õ®ý÷—ÕÂ%uS¤èWlÞ‡ôûàn6çÃ΄Fšå`Ø\n£ð€ÜrÌ…ÀxÛ‘€S©ß('²)ïCõ dFúåäûèp#x×äÃæé5™£ xÙ@#žI¥ ØßÉUt ¤ZtµŸ7a½IðÓ§d…» Í¾ØFlö¬à;÷ çºbïÂHt™,¡Ô¥°~m""ž¶ðßz`nB{ à?—¤òf¤Þ)€íkQ÷ö5Æ()ƒbg|/»†‹ªÌQ݀ݼ¤NÏdÈ׈ãmH¸´ÁOƒˆnWæ–_ÃQÕX~H³¦”ÛvÂÂSyõyòÝV¼ÿßbà Ñtèq衪–ÕIÒÍUtÁ°ì#*ð'ÎfÆÒ÷5>1jûØÎ`¿0¸Ã²4œ òM÷p–HAµŠ.”¿‡ÃÆ€óüt¬T;v¾ÜúÆÿ1ïl=þ“\óRó½¯Ûà×—Ð×k0ð‰Ô¤†L¬íƒbGxjÀ.Ü$?ù55ÞlLu¹¯¾#öÇ"ÿBßÿúr O˜Kn°s@#yî!¨Ð‹1ž ¹Ƴ—|wé/ËE^ ®—G‹ú>j6-è9\cª®Ö‘º†ø†ë&;€Bá€1±ý¾ñ&/ÅþÝs›ƒÝbkëý>(XígÁö“±yw4p†{#ÐθÞ.ôµ÷ÚYÃóüàS¶àa5)2›~«s|©F 9¥%GþÿÏ*áò¹*î¹ØQ:›mt þwÝïï¹å9Ü|dZé}1’÷³!læñ$°}ÿ6Çâ?Â÷Œ!ÿ€ß¬A{Ûý9Ó‹¾wî ó ØyÅç’M+À¾sI°ôOổTãQ5—Úl¯ˆ¾Ï¡ÉGed5{(²¦Xä6 uzƒ?ÄÚù‰©¡~nÄJðÒ˜ï÷ž_@¶_ê(r,LD~=‰fkÀsèΠ鄘ÖÕwd„ZêÇ ij›…y[läH}.3VdÝŸ×ý¸mä±ðzy^"ë,b` ¯ÙæÏÛŸƒ¾öyâã*Ÿ”I³h ^¾PC‡ð¸×\y‰‰î(Hý‘ZvS=åc«C~Žç|} Ò/Ʋkøw·Ÿ›T#aÅüdõð`Ù|tsÔóÝuèÀº¥Äú{ðóRªçÞOmÒf^P6x:@gq…])WšªÌæRÙ•¬ëázÃ=¦öǽ÷óØ þZïyàC,¾B"'ýYÓ>ÿ[OÜëèÉfåî$Nú)àçAÛ7Xͮԅj=%³!ýJ žý¿Ñ]J—Ó‘æz˜ì´×Ïï ²ãf’Õæú xKˆî‘üžåçÞ#“_À¯­OrX¿ &Ò¿ôŒhQ²—˜±®ñ6U+ Œ¶t"ïm€#V×2ZAÚZìÿ½âºŒ0±î ˜JL¢ó¸Ïù#‰æùH¾™–“ó—øiH¦‡ÃòB¢àù‰áÈáˆè°Ú—~ŸWtØÏ ,n³/O‚œW±üE¼ãŠ?›zTbP+×ÑúX§9Á³ÒR¥pßÊ·äéWDûy,8 Œ'ÚmßÃA,ù¯kàÛ«ä…ÄÑšLw¡‰¢Ø> hžw mAú½àÀ^<å”<%ÿÛ¡¬~E"jÁ5ÖE3 sïÿóJê’¸ºn¬«Nuò’oüTÎaçiD²Í¾8MMô ÒØÎǹükò?÷sÒãaùð:¬;âw¾…3ñïý̼khò†ï ZÖ_ši,uó=­ç\àw¾ýǕև§©Í?ø™è^ì=ÿ´ŸÚ™PO{‹nÏw£“7äÉtÈŸÄ<ŠÌÖ:¡?¯¿ëoñSƒÃó²ùÉé—Ä}Gí£ÝôG].\pÌ~ú?«ö/ì Áè¨xA½†Uwá Y¨Øò½Vby;+ºù‚'…A¶ÒAïëm)@ÞLƒ>lÐv¢Å®J©åý¾4ZËoÒúOÁ+*Ã8ƒ¯CF!WÒ¡•~¦…ùMŠ=–$ÚFë„vø³;ýLܵøu|ý‰š®¿†1¼DÏ||›û‹LZ‚LWŸ°Ý^Õá;=ÑÁݦ¯ù_’ZØ?] ýuÏçÜK©K¾—&ºmv‡í\Lª·°íÏŠƒ©d §öð€𛊳Ñï «•ð|;"bñFqŽüj/½….¾r5-è¹J]]qù„®E4[­o»‚ܹ±å~Ïê¶‘÷cãݧ+¡Åa͉@ÿ«ò³N÷ÿýu¸”cZZÌÿf•‡ ÖvÝ"ɃEí\ß{ÈoS{ŠÃZ¯ú³—;`:ÝðäHjSóÒj3uþ:Ÿ  ¾ÍÅ8K¶ÌN]PQCõ3´3‡¿–è'ºCû=ãó×WI—ÀUrwÝ:2zNòvEb¹  4Ö¼â§Ù…Ï4%º£h'¢=…ÿ§ á¿c|¿òN»’ð˜Žó…$¹ jnÄóƒáˆç¿Ê¸Th`°ûÙm•fù"€eÅ´ ˆOü›-¬-xd“,Àæ[fW›Ž +zŠv®àÿ6{ Ž&ïÕƒ:^xÏUŠãÝ}U@Ýe<ωõ+cÉšÔ,UA„ˆjgísÁe:!yâ}4>^†,±Nl»|•<Nü¶ŸDÆ« ‚®’ÜRly[Vf—&Y~wedºïo‡x.2á6Á}xK‡‚7È€íÀ†×hÅÎÇ…9$BSÝÈxsð€Hº[JW.ÐBý]+ u‰{äú¹šò#2VCšd²N¾H¸LdìzѸ ~nÓ¿ãª]ûÛ­Dƒ+Ô告𞕠ÂÇ2…Ȇk½þÞ5ÕMrÃd¬nÕŸÈß§ÑÀdï¯õžïÿʪ'e‰Îƒåô&æå±ÉøHØÎþjϘUêȺ·¶xTü {ízûkŸbÍÝü.×°ú•žôýAúèFêÙdù„Tö“õ{$ÿ¦7^7h9ê²Ê*«·w¥s6©.­ëáfºŸ\+,=4/‹•/é\8Òa=·™ Ú—AGu­¿Êaú¹![Ü7 HðçûŸ®ðÚTˆÝWBöhëÌ!ƒõ¤Ý¬iC`ópÜßÇyN,¤×ߤ¿ÜqC©%‚éÇ?ºÒűð„!’[ˆt £røD&ëR=F €|¤ äg×À…{˧>üù*᲻䮴Ë)ƒõ1ܘ“¹ ó=! ´„ä”—øJÄÛÁtþþe󡺻(n«[!ÏÜ-ÍÝùÁqŸÊh÷1µmÙ·íÿÖ•ŽÜÞÕtù©ƒšú~F]+7ÆUs ýÕþ?­„à@*÷­[L~H‹Ü¹àËo焟wëÝz·Þ­wëÝz·Þ­¿wåt‰\&j£äþ"ÿŸV\¿[ìi»¹¢.=ÕNNWŒj¯²ï˜œ8ÈæÚÿóVuXnêŸì.¬·•ÛáÚ¹ÌÈ]Æ5ä¯ÚÜòRùdFiƒðìî?¶Js+Çχ}ëcm›‹9ÀÕ¥¨ïöº 2Y>“¤r=äBC)ñ<øÉ¿ÂÊF­“šº?'UN7Ç –M²\ιÆx{sü?‘䓺TßÈSùQjÈ^ªã h˺ÿg":’Z€pe÷‚²ø‰í"#õ#­­õõÌrm¨€‡¹è:FŽéM£ õC]®ut§üäN¸/‰‘¬è'oÐuúü{Vn|9««êÖ¸\ò…Ø™ ÚYkj}!‘¤›»åÚh^ýÇZizm¡ u‰¾;dˆ>”V²ÌÅv\-âäí\å\°¬(R^‘ßdšÆ×†ÚÛÏ8®¯4—qU$NHíŽÕ{ãU4~®kõ"zŒOT×’’Oè×ùü½«1\ëŸq)‘µ¼¶ÓšÃ_óŸ_+jtí¯_Xo8d®¤]‘¿ ògÅÆñcWŽÖeºOKY v¼]GCKáùÉùÎ…]Rɭô´~gÕ;’H³éMy! °n=M¬¹5ϼ¯{¥†fиDÆz}„¾úk_Þ÷¹×yRX’“Z¨¿yÕõ“Áér»0RI÷ûóY½tšZ/ØûYShT½^:ûEüÜÛë:VCüÕót•ö$*£ƒ¶HŸCɧ’BãI¹ƒªç﵊ù©NEAýÕ.ƒnÕò [[bÿCß-¥6Ç꿈C'µœ¶ÖÙ)dœ*¯LÁß˵ž‘JcpÏöy§Õ 2OÞA[¡ƒ,ﯬ¬®ž+àú¹®ŒÄÓú ±þJ®J¤ÿXŸJt-†·% "kýL êv탷×Ê!ítÑ–h¨¢~ýNÚÑÏÂHª¯üôàÀõúø[VNø}-·Äõ‘˜ ]G͈…ScóÄÈÑ©¯HT,[«×!ö[êEi¨‰B>ï*jaMÇëëë& ¦æÔQ:]G 3º‹Øé«74—´"—ïþŸ¬ø~b÷©;&E°\2,]äK®¯‰õVÄtD½.?Ivü<¾ÐtžÐP·j4äÌ„^ÞÇç3ëH=H&(¤ctNäÞgèÎz‡ 颿"¹ åi`«9ø¹IÔ¤%ðèOA±4 \&9ÈnÓ=NËÉÖµó€û‰ñø¾³i °Ázݤѡ à¾+n¨Næuyù1/ؤ3Ñà~xcpÎHN2»n—„Åòñý®½6È—K­‡S"ôPTJ8ݺ„—õûâÊirܼ¡©Z…Äú(=‚Ör“óÌ&]¬àÃu7xÐ_§Ký YÓóŠúÙt6ÖÏŠÊãCt#µÁ °Ïú]æÁRjFp\ûø—•Ý%"ö»F|×føyp¿4Y«,Ñû ÷íÊè_e—<–BÈ‘R÷È IKÆ/NœÔñ{¥ãû+G*Zñh4n%ñýsú fâ“êƒÖûÿ ˜dXià¢QÏJã«ênH-økcìVƒìþ5Þ=ò]dy¸'‡ä‘Øì³[²”š?7–øÞçÖëôÄ kðW$îg%+.Çâiù„2èe Èø!Yr+‘ÑÚu "&D®ïâŠÍ5IŒõ>×~|Ç„dÀrWü·«a­ÇµýD×UDB 0ø—^mXa¼"=RG-¤ä¯ˆøFl$ÏÍg¤&Šª¢ÍOáÅ5ñ¥þ1$ªVv…‚âêo[6—ë[7ôÊŠß÷Vœ@ˆ\‘°¶uíz_/¡…_ˆû“r _P¢ˆŸ“Eó‘û­³cjßëÖvÆÇ'bÞà#1È™8 ¿›åy}1ô›'¤ž¤tÑ-ø¿­´ðÒcî€$å[VÒ3rùr!Íûð¹¼ ÿyFÞ³é7Ö#åWâàœ\–hh«9°^(ͨ€¶: H•ˆ±îßyÑHl2h:0"·íë‡d„%:¦,Т;ë™ÔõrY‘lÖQûîkñû¤TúU`2oä"²Ü÷»ÚOðŠ;rŒGΈõy.‰¿Ä!Î+jÖ'±Zž|.¯ÑŽõ}L‹'üBæxl¼+y& ÈÚ|JEÕ2(vÊ$ë¸ÅÒ”Œ¾‰¬n»Š}ŸJj"9ÕþoԼǑú2¾Ú_Ïýƒ×Á xá}‰€–Â#k$^AÿèûYíjÈðd†¼ïþS›Œ:XCU]1$Z@{¿ýe%¦*u'±-|»?\íìxŽ(øQns»…Í®ËfÙÈ#'d¥œýWñÜ1â 'Y/þï¸)׉x‡¼°¿)xÍ;ù:±Yt*Ÿ_6±•y/¾5&ôI …gŤê‰M/a§©ømjÛ$hb3V¾Áí4ž{XvÊb¢þŒ,’ ²&ð= úMÒÃ;.ûÙ·7‘9ï¬È6## ø`¡l&bip y ;ɛݤG …ÇúÑà}%$.ùl¡$–Ø-¿VÕl~™ósLöûž6g$T¶s³+\ŸŠõM¿†¼±Ô®ú9Åýx÷ ê‡ç ÿ+þ O<´ÖÕº@géqøÐj¢ï©Ç¢£Âº+ÀÝÏl%CúÖή×ÉÒwÆÒ•ÁôØÄò5$·Þd²mÆâ?ùk\¶È2™O X—Œh-<˜þü`?òß%:b€ ÷ð…})vM°õ 2íá51‡Èß Ãú ¦ù…~.lWÂåÀâ1Àð÷tògáÛÆÆ¦6á vµžÛüµmÏÐÀE¢|6þ?›W¾–¼~VX¢à*Z:‹®¬Ï©¡â±90$¢¯›l²ÄS4SšY…¬`3æñH6ü/°+…Kéöó­£Q™¥Ñ2)šb©bÈSì ÷Øz%¿—ûÉ?ÖÓiŸ¬ 6#qx],S$¥ÞÅ/öóèY˜Ãä¼Ã+C¼³þÛ€\ü›Œßù4'×Dþ!äÍbŸ”ÖUÆûo‹­+›ŒÂ†9ÑDl¸\’ð{ƒ¿êõ¸Ÿ xLl²ÉN"à+Y-y_=©L¤ *Vû>)6ûã7PÓðð}´XÑ_ R ¹kh{ì_©Æící­+4Ô ò ÜÊâ ºa.)À÷ê¢au&6LÍýT ´Ëv÷×|]2¹¾„é¤Ô2NfÈ2â‡ò¬`÷Æ£¥'Ô‡±u‹XüÿkJƒ¬à«¾Å D 8ó‡TXÕÈ~CA„¹è#m@' ¤rEÝ$g3ÎÞ`ëÀªóøõYIHÆŽ žùî€t¯}7ßE’$_„,|/„q²BúJo°ákß+*!ÎPô¸ ÛGòGM³“ÿ˜8‹0®Ÿ ]Dwûðÿ.6%2 u`*¿¯œq§6íë%œö¡ÁÞ|>;Ç7}>Åÿ”½ðºÖàøLl¸Æ÷Zà;ãÍñïË8ý–×PÏ’ à5“ K=q‹O‰‰n“ú.ñÕ2f; ‰žÝ)Ÿ vkù†…À%«Y¬£ÇOø¹õëÜJþ{ˆOŸàÞzï{nv䳋ŽàÕÇ@†Å M@Ø#lM—ëZ©î€†›ÑŸÕR6?å6ñ`Su,2Pd£®Dd¼–ÀöŠOTr­ñí0|»ÄxT;&þ€ïy¹NlƱkÿWâç0$doAöîŽÖ¢ë´J†KL¦ë‰èušY÷7‡‘ÛfÅm󀇩°w]ä/¤ùÁÂκ L¼Eü²D—Ó-¡ò·n6Óó…Ø9œ(zÙ·ÉU¬wœ,hõÌFd]Gœ?Ûê—°—äõDÅAYï@ä/¢®o\Kôõðœ°zi•ŸÚLëhBªÿq ˆuO¡\¹€ ÍBö»í~FÖ¨ð¸8¾öû…ï=ï{—l·¶s\¬³Ï2¤_‡­SÃæºk?½fǹ’ÁpºãèmñÆM;@Ý|Î5r8ý±,ɉæz£¹6ÚŒ(I­6=îd@;ÀftÜc þ’‘è·¹§@²ÉØî&¸fo6ŠÍ|ßåûoñÅÏ~èM=×-t„ÉÕÕþXýS⢯îñmF€]%o=£~„¾$’ñ™1‘:Š¿9„0¿Ö‘Ï]›€É_ôÝî¬Çy4Pï„·ö¾ë1¢vö;ÏýÛÜŸ‹c°þh° ’wÁú`Í¡ü´Ev«š»¡!Z&¼ÜÛå™ÃN~¬r²êá ï wÔ÷<ÌÿtCòèG:Púpoć°ÿeîXÿÐ&¶=õ•íz²Ûõ²œé;8¯ô] gp?7²¶DæÚ ¯¯ç{?Û=c9­AõýÄÉ>ån–6ú¹[xt+÷¿'vã ×ä=2b.< Öܵr—]2ü?TŒïŸõS^æá3á´£¸M—‘ò|‹íÇó¨õÂM Žëé1Ìf™ôÄö]ðþ>:›Ø^ã3çn>iî&¡9ë#· Ý7¼ 7| ‘©^ÊWíRÝ}î¢I:XÚ&|ÒzÖ®ÃöS‘øsäï#ýáù½|ÿç9޾ůãÂáz`wÛ÷ÔA«µ:諃ñç\:¯ßå§Áí“ï`F£x×<ß?s2âÜ(¼/":Ï Vt·Jºî‘{"QÈd6åê!ß{…·¹Mè(]¥¥tC³ùö6rßÿy¬3o{œz"Ní8o˜‚>"ËùûÑ×ß'u¸9ý盚ÌÈ©ç$ ¢Šû €òsýÝTgœo-VqzÅÊ ù É{Hgøý\4bø?ž³ôêˆôðøfä¼xÂ@ª¼V0Úš:T;"cźÝî#ëmÄþ£}µù¸räNæwÈ%ÒïÚÞ5r³]Y õÎ6ÀR/Cñ€O¨ê;I[ì'XXÿç)þèHYò]Olß ´¦’‰¡•ÁÿÏáD©rëHø¯MJ[¢Î@î9¾ÿÿe=O P“š¿(ÑRz³¨4uå,,PÔ&"oR³ß—÷©û×á÷SÀ›üÑ ù§ò× ü`$z¹$u¼§5°V|á'"DDŸ¡•1z¯±y1ÖCô$¼gxðÿJ­ð/A_¥y¥uCM¥u‚`'L›ýíbR×ýL|Cv; Þ-Æf[ÈÑWÀëñDïl$²<^Y`¹ÎÚ ÜG]`Ý7ƒqw¥)üÏv7|…¦Öón;nfýÐ"À‰ããë)`˜¿K%|¿¢?"UËôØ×_V—ÛE8zHrÁÈ_á·;±ÜÐÚv4=ðý\g‚ {‘¿””ó{ÚhµãKÉlãݬò€íœñ~žˆuÔO³»ÐË>Êæ¥^ÈÚ|4}@“RÊ(²vª²Øü{ i~"‚C‘>¼îÂþËý9ßeD€u8?+7|v¯#ŽêɲÁ4|b ö?‡„ŠÍuZ†ˆÏGeuT¼¦¢©õRŽ "¤šà \×Ë}LMž¼®‹§&Rëù|‰ÞÇ¿ |d/AöžÛý:>AîǰFëNg.òØb^µôßÇÏI”«ˆßõðÜ'2Yà') úeâªõ ŽË¥†‰ä„×T 3'P›zm=ì^âvoˆ6 Xì;BO"“!~—×àÄEIê§?\ó»îÁ{Bñu;–b=‘N¡;$ä’Äd‚×’I ø&í‚ýmÙ5Ë ÝL©­7À²Ãþèe±éïÖû™Ÿä8—xŸí'aÍÇÖ!žÏ_ðs-ÒÂqq}™E—¡§©¼~ÏüäÏ ó8bÅëS5~ûÏ ƒ¾ë> ´Øÿn¥rÝ-WMëWÁlvâã ÉpSÑÅr¼~µŸñc@gòˆE€ùOJ&‹ÍïøD`ûH ¦;ü íõÇ;®¢ÅKäƒè"¢ß-YMè ²l… º&0¥+ë>s%©èÚ¤—EðÚ!Ø{"¶_ásÿBäéÏw®ðg;O€Öû?5ÖÿE2ðo2Þ»ÞË?Ýÿ\&‡@º‹äÀGþüßsbª¯®Lþ*M\Ì@ ýïV:—Þ•q9å#Ðiì²ïaÿ#˜Œ,¶Ó-ÔÿmPÖû£av>ç:ˆˆÏ<„'Ø4~VÄRÞ· šD.¸†ôêµô>¯‹ H¯Ý´Ÿ>wƒ-òZi\{WÇí¡>} ·üÙº H´¸²ÙÁþÈÍ„Xä+â=°„úH Âè£ûIçñõ¼?Æ}–l±?Åïø‰á5ˆýÊð¿NØ~¹¿?7ØVNi©{)ù‰ä“ømœm²ÚŽÎTDø1<÷[Y‰ÇøÊߪà|Ès€,™Û>Eþõä>;þwÚOºJeÝY‡iª_PÑvºÁe ¢ÝïYå\-y6© ¦Ån£;_•¶žï’û¿óxp|Ÿ‰Œ?K"C:¡óÉŠÉü•rë°ý!n?ã7¶2§Z'ìN:W»Ã}Ûh/}ß ôÔË?_5¸Õw­¤ Û&¸YUYÊøÙ}qˆ† ðàõhà7;›wOlß{fl[ÌïéHHµ`;¥b«qƒç`HDýPkÁ*âè 쯉Þ'¨·ƒsÕÅ.U] ÷@†ð_‹ã8D]TC?€Ç è¾ÜÛç‘ï•ç€iÔ¦[vDùÉ…Oüìƒ'R&U‹G^Kz-¯·¤µ?_ØQ—ë­&5]å@ ú_®अÝlW¼²Ìv ·ëÖ`»ûžÝ×":âaóXà_L¤¶#;Èé·ð};³WÓ_7QÅ׺u^²J¿ÓÅzÇÖñùÁÜ ¹œ+H.ØéÀVŠÛá­ùÀ¯æzÕçöþ¼†,©•@¼T ©±ÿ3p0>UŽùFYª[ÛO\¯ùRUoKc$Äk·»¬ßñø×VF—ßEuI¥<¾ÛÙcý¶7ö<ÎvF„l$÷µ- ÀÇ×òØHIJd&KžÁ?b!ílÞÛ_dG’ºib}.NЏ0íà^M]\¾e!÷‹›„íËáÃ%¨aOƒy7ˆõ0dGÛÇðHšj3‰§'T‹‘/ÐÔ=y†^bQ7ŤÊï©VÖRÛw˜)‘4û}¾çoYÅ\"¾gd7ÑM€Ùe"†Ó!å5xž]áû+üæ`må§@7Äò=5„Hýˆ˜o‰Ÿg&Z‚x­ÑKZPdžˆ”æsƒñÊ×?[)Ð@WÊ…'Ú/H 2w-"ú9Øöž|ìžÓA›hT]JŒg¡f~-5ü®ˆž~H<ß+¤†æÆs²Ë!7ÐUùÞž•ˆÅ·Î+¹¥Ùë#m¯95¥&R›ñjõïí &Ö•à\!t“ „õ›‘-í,_3jÝ’è§¡lw»É­Á÷¶ º .¬Ü•R~–Eê÷NÄ|~ê‚H?”Ñ  Û—Ø9ÏíÐáh©~P‰w|Dì4’Ç.²ϱ¾¿o¥wmÝJ÷Ô„×TÖYØwþ“µ«zæê ²â3ùIm?LÐ`¯é‹·Œ¡æé…W„×H’O–ZŒ`viÉ3]'wÝÖqºM×¢…‚Z\§éD] ƒ¥8øØœ«ŒÇ¯@?ƒÕŽñ9xÑQ¹êZ„x•t™ÝpW?8 ±ùdï ÓñüÇ:Jîé]}%Û±y‹'ÌÑÔ 1å”tSÞþ‘• ¬w]Í’&äuü!°¾ºìÓ[ºFVà À½è69Ý¥ë¥ gwÿ¹+£«äD–Ë-²K7Ám£KKªž¡0ž©úB K6Êkê¼Õ]ßþ»• /ˆ 7lªwà5Sà¡“Èò‰Œ¥z4Ä,úVOüøk«L&5âbùÎ’mpúõšSê»Mø{WÏe²ÞÿüU fTäwßykpõaŒ9þåº~þm+³ûÀ•}«¸í»õn½[ïÖ»õn½[ïÖ»õ?_vD?¹ŸŠö¯¿ »t°ü|.Ë¿Í8XI¥S€z°4•@>žMO=(ö4ÿóW.*ßò®+„Äe]IWÛusŸº¬T|Ü.ê6 ‡â<“Çwù×Z \*—›ª/kí.»›îœÛèÆºŽn„kê&ºrN–Éj©!ë]â 8¾PÍÕu5¼ÆÞö•Z75}[ìý“›$7ä¹<–ÁRKwFúÈï4ª¦ö×v/”#Ø?ûÄõÄcšø^Òo÷Êï{V7v¿¹LÒR~¡ÚP{êHÍ+ߺ;"ïÙ=M¡Í4LHØ:G~ue„ä–æøK'׌˜y;WIW”ê>“ëç*Éd%W$£öÐiع£6Ñ“ÒÔÕtË´ŸöÑ®ünçÏžÕú\ªj §%e³™Á|¾ÿ¿^@òÔ.™ëá&J!ßÛ3ƒÖÓœ:H;`ë„Ú]‹ÈonŸ6оú™ïZ[«hgݬSù¬Õ5¢¶“B²$xÛ¢ "–žŒVÊÍsd–¶!º­·M:dMªÉ|_³òº[>æ™2ú¡~©Ã4—æÖÙzB‡è7:I›ëp},]ä}æ|«Ž‰–uÀ¯2®œë/§užvAßâõv•ÜÉ¡…‘¿ Vn¨ÝðƒžÈ¼ÁŸ­¡»Ð@G¿ë©1~’MOË )%U\Cpäm9PÀŸý=îI&)HlÝ "_=¥§ÄzxõC¶2X9£¦%îãõ½‘=ú˜­#|ßÌ\DÅ|Ý®ŸòÎ÷u¼ôwÀ“àƒ¼ÜŠa÷n—×ÕúYÅÑ'ò‘ïu VëÙ#µ¤¦A+­xü7â½ ž_U ƒÙúO±`ó´^‘,äŽglGx;}¨Kün¸ºE§cýCºÆŸ½$­àCµƒ¢ç韯”® ¸—ÉqïiQm¡uÉë9}ç÷ŠX}5¾RúÑqu!VÿhO,DÒÏõ>¬è•Tâ9þ^Z@wê)"#;Üè¢jˆ†4ÕŽø@fØŽOÿõÊ>%…éõu¿H­¶ö:lï–Ø5‹}±f¦%3øÞ›\Pä««Õˆ‹²ä¾Äêx}O|f›~JjS€íí¼ð~_ÓÉè¦ œ¨VVHæùÉÜ7n1ݬ>‹ªüÕalÚ˜~[„¸B$¤ÓŸ¤‘¶Ä¾ƒ‘s0´ï úYOÛ i½âvéy}c¢kñ…/ðŠ"b3ó‚qåÀ7s»ARÛW×G2[Ö‡÷œ—‹rMûI¶ï5…Þ”`úarCýMZ#u™¦"Z&éxØ`C|#±2œ¼¯?!õ >×õ~JÎhþŸàcÄ\PkJÜÒW‡é¶çVB_É!< —VýJT}O—ú°ßˆ`¾Í‚±«ù²£³X Þtíïûå§&RÊ`÷ÕØÿL(”XÇ'N sIc)Ðâþ_+#6)èNHW<›–"¾‡¢‡òH(zC.I8Pî¥l#ú“#w|´Ò”øè'®†—$A+)ñ€¡D~GÍá»"gðý^$2*àýóxu^xóøÂ7(ÈΕfq ]wÖ}á»ùt½ Áß2«uñ¾"×å™<”7ò žð »çG#Ô:À7BíàEõÀ¾øä¿2D€]GüžFÖ§’DË!uIj¡jè,1üà]¤™Cêi|x@ð°Á\¾Êâbãï-`òóÈgùàøÑ‘ßzbüq­£õu~ê¯è½&qññL†ç³aÓ¶àZ<ì‹h¨'ŒÊ_ä²ü&iÀÉ¢<–׆õÕÁn½¬UB IaÑÅ ´àÿ¶²Ã{Ú»SÔ26Ý¥(Y­+^<t³¬Ä:†Q»Þ+6~ÿ?HO\ ÁÚ‰þ´ž'”ƒ#æù„øAZ{à¯úŠAÈÀ§ÞBsO¤šý$ …Œuõ‚Fþ¤®º»ä*Rž‘tøõ#yªÕEQÔ:ZÇÅ‚a‘ÐÀ¯’L!•"~L¤÷öõ]+c]>_“'ccq›Âû¢à¥` £t˜Ð ?øAòÍL¼4®¨ë* ðã Xó!¶Úâ½–lDz)*Þâ|/Ü7b~pû§@9yeRß5±ïk…üù¡±a…‘Õ¼Äzà'Õüm¹â+XB³ß;wKI† ð€¬`|7«‚åEE‰üõ²Þ_ÿüRî‚}aà}÷ùë²ïwN²“á ¨ÅwvnU@¶ª~ÊGj´•D­÷ù3>ïš|Ÿ|›Ï+Âg—€V&NºQ9\!W4 ë~%ÿ*¹úò‰œäûÆ­‹km©Ûd£ì•ãØü9²œð×½\€ ]“ŸÀ¿ ¾OD!¿ë5;Ñ\™ üKíu AgÅ®}ŒG„˜í[ƒ*@Ø1°¤M:EëEHäj‚E±t³ •¯®šÏï`y6ãàG¤½Ç£Gd÷®cû›ü{FtÖÏÉzWg‚$ôr ÷ÄüÝO@±ÈˆvÜæà÷£‘û°×h!Õ´V@{ÿý±ÒPõ5sÞÓˆ:f·¤ÅVõ¨Z‹’ÛNáïW‘ør•]r¿ã¡¶ëlÁÂÞ_ÌÅå6Jnrw~¸¬uhK‹IŠ_Gêã²›ã¯cä„£ Ä6Y ¨n'O&ç]Éõˆ¿ÎÛ&`¼"×…àÖñà7ÒŸ&kîä“BÁÉpèÕ:ʤ†/MxH3rLY˜Ã rEQ—6 ò—p›] ¤ÊB4vÝ&¯_á»ÏåÖãåSdÒÏ’¹Øv+ÞÐôN®{eœ,’!È3Pºácx…ÍÄ9å;½[Æ<ÎûçÊž;)$õC ê€óÄÄ}ê©ÒøA=mÂf (Hí ¹yØ2ÖHEÎŽ“yBåv—ï¿—xž‡œ}g§ÙàßJd™ FôÄš ‰‡)hfŠô“%`Å:^¿ÚׯÖûÖÞ»Ü÷>¶Ù1{¼V.¡×KøJª¤< BQ~æI‰JoÓÒ¹vn¸äP›ÛÖ#ÿS?·é ,$Âç#û4™€Vr³ð5¨¡u Â*™Ž'pû–gg#kŽÄßßÉb·®é[ýã‡$91ß'«¢-µ/ˆ¸1À×Å%w™\Yj?Å¢µðG%$ñ×}/Cž©Èm[Oúî·+±ì×°½ÁÚ.žŒ9Ó÷¼šî{cÎÁ?’Áq·KWÐÿ²ÙO XGæØàû E§Bª ~¨Ku³.VÔà ;a¤uÙ\S·OIeÖ^ ‘ÉÓÀc÷ Õpùɬ+ô+$X‹wŸÄ¯‹Âå?¡–m‹ÇŒÀú«}Ç䱨>~1OKê8ÂÙæû¥ÌAGßñ;”|hóÚ‚|Û@Ù¾svMjçií†`G¼¿D~;ÆgóºÎúî]ËøÖ3A¶®|÷Ëò3ÞlQ­/èJXâ08b'8̧šL­ÈQ`9s ~­«Èéóx$Ô³¦¥ ÃtïG+ÀÁû°…©TÖ3ÿ<¡ 9`œ>uŸPþÄß<·‹ØÜj¯BÞ‘`ùd*ÃÈoöý'ßÖ} ¾<tø/ïwíH$Dõ×Bo&ÛWC²þ°ûŽº ß?@&8EXæXìg#­DÇA¿LÄV%x@rÍE,ôÑh•ÿM÷;¸½ þf½Ÿ;Ji.ŸH¤­Ÿ|)=|~³~ð”îDÀH|½«É®€l{ÐApq:h«;ü,¬}°b¯¯6ú 0ÝÍ‚3oÅþ¯ÄæÅEYÙlѯõäð1Rî´»,ùÕfüìòµÝA,Ý[Ú~-¤ƒ´‘îHoýŸÇÊ:ßéó|M¦˜ä'8FV« ¿AÞØøòp0 (™c ²56ûž©“|žXÏkîñ*›R„Z(^Oõ tGˆšäÿù’•šç1ÌÏrÜo`þj¤']øý100 Vò»<(ø 5Íxmª=ˆþµøM2À鬣uÕMG^·­X¸ådÆq~:Ø?ä¾$¢îì3þ"™õ¾ËPéñ_ÁeÅ.ßóÝŽÂTßH?ñu6X`óÆò3ùgÃÐD9òØbmޝÛć{~2^|ü™ŒF?‰íˆüMþA(5Ÿ,9i“3ìˆÉ´üZÚ Áç’X ÿÀ®Ò®±»çî€lÛÐ@ˆÞôÇxVþ]dX0P¾Ã¾õylºèÇìƒÁÀººÙw¹›"ƒÉ-‰ˆVäF«ŒvÈa_5[dë gÚ\O|å¤m–÷©+kÞ¡¾kຸ(ºÛ>ÅN“ˆfã´=‘½rõëg¾Ìs‚Õ ÁpICýÞÏg»8j:±>ß`J)‰‰âä´]TM6õešÙÈ{£‰‰xÏv<+;¡Z‘pxÐ\©ð.ˆPsIu¾£fµXÿ’oû5RÍ¿ °x7䙯ßÖé»qð1ÜmÒg  Uyž7 Ô+J ™Uç ¹h`l&væâù6eÈÒ ÎSžZ0U@í°ò¸jî–KE&ÿo¼„ˆïÕçÈbú’ !~‡ãÁãa?-±ç P¾†>áæ£¥Ái ¯\‹“%[RûV‚cÛy¥ .I …w¶×Ѧ`Ù|û0TÿŽøŽÇ>Ç[“Å^ú)XÖÙx 2Žæñ‚ZAÏ#Ù|c)ì #ž=–˜ ÎÁêÍyí?ûcQ±ËOó5ðl¸Ã iLô4%VÓjAÒ¶€«ãÖ¹äòø°’XÜæœÇQÍ%Òkø²›ç»½ÛÜ®3È9ËZ´ N¦fúÒ[–߈ŸŸ§8F–KB–Ÿ‚ß‘‰øÄÃÏAÍOþÜ${A³ºTĀͶý…êæ±d‡ 6ôsŸU_Êm4s¾¯ –cÝé¾ÿ÷"ä&6óøäþšXÙæ§ä¬ÁlJú¿k,;ho{âí,hmMOÅ—KSƒ}%|ï°aAsuLb—É=pVË&òSJ&ìfs/mïß±ù…SAú…~òï2ßy˜wï8‹Ï«^÷ÇJCmðçŽûs! 5 R#bv„÷¥âi¥ŸhoÍÒö šÝÐ)]a7Ì!6Ãi½%õ‘<òÓf"×mä_å§,E>›ùi±> YÏëÿW{goeµ­ý1Æ¢nØt³éîîn”AÁDAEEéîîîîîF:$¿ÿœzn|÷œûyÎõܵ<sýöfåfzÆ3Þw¾cœ¢š;2ü=1 ®·Øã»¡»ëâ[RKNÄÁÊ¡ƒ~äý£TÎ)µEœýüu¥…¿%U-¦¹³#‰çŽ0×{0áÈs‡L6<_€ƒëxíy‡×âÚcßåt*è8ƒÈ˜ömømrì~øŽÛ+´Ë‚üî¼ùu T#´Ð"’.Ø‚ÿ¶2IÉ%õ±JjóùH6<'jãÙI´0†_†^Ü,¯ùHæÎò^ó;C2Ïîø ;zðVë¸ðŒßŽùº3§ª½Ö…è/Åû„HˆD…ÎúÚ\mÔÉÏÿy%•:²AO¥ÓìC,´ßG _Ös‰ìiؾ?Ï}‡ü›=3¸Ïï=H ÿ>ÚLJ9fðމÞ[ÖÁžÎhkoûñý”D|XO¸ÕÚX! ¥þï…¤³TÐ)Ä}UøYbÛíw;œE×ëz ^=ù¿!ò]änàv@¯ KF·G>¿C’A~â½?¡µÅü»üLÚ!­¯©ÅòY;{û±BªcL^4ð¡„S“ŸÆ«£Û3ŸÃ—“íúû©ëˆ¯øqî|·›eévýz.|X0´s²UÛ.骦éxÆ c&˜9¯8A9dˆm™É,•­ž¦þíIUUF[àÿk¥’b’CøøCøÏs¿Ÿ+›¥¶ƒ~*–Û´‚7 c&vwuÎLr^ ƒ á3ÎSV‚z®ú}¨%Éž»ù;ù,½ß%ø&¬¯Œ}Aމ£µƒzÖÿ¯¯LÒEÚIsÏjã˜YPÚñ;7]¼ÊÏ\üÛÀºm [*„,䂈ø@Î\ìú ‡ù$3·ƒ°¢M´OaÀõá~î6Y¿¦Áö¯®ÖGfÉ,Ь5Ýî²›LïöĹy@nª¯›þµš¨>MœÄåÕŒæv…ç>„뉭ƒïóÝŒ·ü Ý9¿‡ès›kðÿþÖÒfiÇ ÎûþïW©íö#aÙ»~ªÃ1d)`oÁZÜUûüQ€ þ<ÉSÍ “‰FÞKOfK…Fà7‰‹Í~ßt"˜^‹LÕ{ÐÏÓ«ê- ®ë(irØ÷ï«ØLê!ß(Ï\wkQøJAs<þ¢Ÿ=C7ŠíçwæÂêE3ž¿ÂÕM¸\‹í““íbÀ‰îø‰/¯ð®˜°äâ6ë7Ö&Ò"ØBþ·«™¤A’]›Z«KH^UåÊòûàNß ýU‘Íñ‘êüNjóÈw™ÑÓ!²@6>Y‰ûI,*Ü ±ÕõZX›„Çlò!ÅûþÚ* U%¹ü,(€Uíkì'B®…ÁG„/ƒç±÷À…0»T »àü¹°ôeP"vîl_"³Ã…àþdÛçù4üùC}¹þ6%Éeám‰Üw¬x˜.Ž*®‚U!;΄#7á•Oìj¹F&øþs²œc ×ÀŒvö.uþDý§¶ÆÛÛ¬gñ­àÏ»ý=+L¢Ò•<ØØæàáÙˆã4øBa¿—=…méù»ØL{5pßÊãÍÍŒt¼!5zª‚ß”ô;¿s‚‚Ót>üºxÈûþ_VvÉ&Õ¨ˆ>Í¿´‘V ?vWú•õ“|€ n>®».úkÛBfËAˆ æUóýß+Pf²×­)ºzdü@€¬Å¤~°Åú;V6tVÚÈIùT3Á«Á[;ãÏÍýUE©“¢ÿŸÛxh5ax‘ÈxUýÑ5ÀêDÿ`lÿ®³¥:‘˜úótø÷U@*È(¬VQk#{?\5?Áµhžœxhh‡}×ïO`÷à»Íñl<¿ÄnÛj›‡žê+³¤ T‘Y§ïÊ%館 ¥2®I促ÞBn†_Fr_[[ Çmm3ˆq!JFú뻲Û{Œ†ŠÁ ¢ÚY)‚W;ÿþURòJ²A Á›dµÏÀó%x@8Þû{¯$?¶ â›á ¹­‹~l_a÷uú¦ÖÓáØ=w°Eø®,TÆUÉWd4¼°èVä"ú{Û]¼¼³­°Ÿlþ±ŽÛCwÃöºëf‰­éðü•ÕŠ ùs ×w¨úæXÌÀ$ öí$û ËRát ¼kÉ© éiùÜhì/ý‡®”ò:µËùFßµ[5pÀzaÿ30œ‡¶Uçãoaý޲¹;…Ìlã?v†}"×å±~e÷¬Oàý@6Ë©iM´‡6³ºÚ6774Îlþ3V ©/X,½õ;›êí‡ÓǶ™dŠ(ÚSbQCgÁc;ä ×Áä¹%¤‘DÔúò‹çF+Åý™¤ÿVr¬œ/ÏGµœœ{eüUÔ/×Ëõr½\/×Ëõr½\/×Ëõ¯¿rHšœæþ¿µÊú ‘Y$u@ò`™ê —¬T¹y$Òº¾"µ•$¥®%u¤’âõ„ÿ²:È,Éü”‹dÔºäSù€Ú÷÷*Ëw2_¶È´ò ÚÉI5XAªKü¢yЯnúcVª\·G¼ªŒ—dšIãèiƒç¯’vX¿¤~¦st§ŽÑWµ®D’ŽÒ™WëáõÐ@Ã`ùÿáJAd§”rò¶|‚•OÈýÖ:Ù^Ý‹Ç-ý¤¢\Ò–Ç:Ø[csõ¹ô’Ù²@Þ—NÒýü¹åÏ!ang°¼#}å 4гšÍÊÙëkg5L;bçÅÚÇz[=û |eûíK[®ßêFm¨÷ä‘ñFôøúÇ–›rYDJ fòHºêAMmï[>‹aís«nMm·4‘ÖØZûÄ[Mki_ØDkÁ«µíšÖ×sÒZJã=¾UI²ƒeå[Y-'µ½ µa¶;¿f -‚•·”DÁU½/kýY±/ìM[`y­•Í" FYûÐÞ°‹ZJo eÐA¨v½þë+ YÎõ*7m¬M,f`­µÁ³G ¡ënÖÐjX~ì?ÇNj]}ec¬®U¶$Ö­·áÖú#õ,–mÕZ‡lP þYŽŠgâ–‚ —Rk.<û;ìËÞïãâÕY,·¥°Îó 5~1ŸGngo^´tƶÚG覭M³±|v:ñ°S¿!Ž:ýI| „d„ÅL‘ºA+ù‰-=’|‹TO4–•±õšŸHOb?Ù =l­‚µtVÐ2Y3gÏí3ËnMl­² hm©}m—õØ¿˜M¶~JÙv\Ç*ÙCx÷cani¥¨ôCнž×Ì~V×ëv­ÑžhTûEW‚‰),ªõvi¤ž 'è„ü?XG{bWÁ„êDÈ`›€–ásl…Y+D. «~þóÊâà÷cifÛ¼·§³œØû¹ž×§šÓºƒr—õQqA[bù: _è¤%±õhtP×^·åèÁõFx–ä&`$F~Boì"ù±‰¥ÕÆ~J\(®p0?§Œ“|߯ýîÏd¹àÜEò@ižIëçA”âÙfö (PÞ»_(;Xƒ§7ë>´,–ß÷üML#\ôC£±᪦š1$çd!.óÀÖòÕÚb©ÌØ0­%å–©Ÿ"e{${ ·µ¢ßõ@Ý$”ÆöH]ÏÈ„6mµ$Û}d…-›ïû =ްIpƒê`Á9{%p—Üð¡m¦*vדÿºòQç´õoÀ\ Y¢·±÷þxDýÏX½+ÖŽé÷¼gÎngïÏ¿Ñð’øHî&á°ä–>hÄß(+ÔÀÛ…M¶lê–>äfÀ$ûsPá]„ϱZüTD’pýø0>³gúBÃñ‡HpÞG`àuuû¿Yj¬^Í¿û™fFÞ†äû¼h#uBY<'ŒØÈLv8os‰·‡p‡• äÖw%n°EþO+ ß§©¬Ó†H¾ÓÂïàLcÑáúÁÿ°Þ‡ÁwG¼©4)yÎ!|s^éJ´¤'æs[b‹‚.2ñ©ì¼þT(Ã;kYþæLÛ‰‡Ô ¤ Œ—Ü!´8§Ä¦N7€ç·Âb͉Y7Õ¡†™šÛÅÝ^ÅbYDtÅ÷´n;hd‡4:ì83˜Ñ«»~×Yà Å|7°|¦þ_? çonB·íó@Û@ÍBW@…¡ª’yŸisìT™ ö=™Üuõ÷W¶EGîdXó9ü÷&øUå}å}WÛºdÀª–‘Ÿp¤Ï‚ß!Cóþ4,BôOû€¦«,}`=i˜T&êBcåýèW~šÍ«Dt*d.á§¿ÜÖÊÈpž¬wŸ¿­îº°#úìˈdeìc$kåùßç|*b!u\‹ >Ö0Àõ¿O6÷Û2ÛîºìP/|.Zi¹23œ§…T×w)³‰Ò;z@k\êšL ™c?‡õ4Rï'ú/ó;ú)mµá¿Å}í¦gÊåüŒ¤èà™º¾×Ñü®è<Ó›LØ&té7 ñ§Ùè=V*¬ŸZë°´Êøj)¾ÿ ||=²¾Ð³ä¾ÇzR«ëôwUoé°?ì·6ù£‹üȘSN Ö½F>Œb¾ÀSò‚ Å|Gõœààë0…A6ÅæY[í0RK}Ù!£±ß0$ ý±m bá¢.Åïo"õE4°]7û¾Ø'ÑÉ==§×®¼Åös¯Jƒ‡îÚöÇš ”tY3'¾/XÙ]˜Šx”½ôÕˆ©ÏaÅK-y`‚. ]’iýÔ·ñš»$RzÖ_ Ž Û?¥û¸Ð-Ô»ýռΎè݈6nhQßÏ6;Ÿ+CÅ›ŠÚ(1¹Âu„Ï <-¢mð¬`Àûö)ÿÎÁû7€•¬·û¯[à}Õe‰& NvˆYwõ^;£;‘xƒnR7Áuu¡Æƒ+xf-—OT Bpó^î‚ ðŒü×°¼›/xÃ3…uàßÏülýf€÷-¦¶ ¶øT=åe‹¤!G—@ê¨vô»©Îsocw'õ´°O÷âÿôXx„û›u ¾°–<èzœä£Bp½Îi‰_=Ž€Wõ‰FÆ ^qU"•ÐFj¡©ðá*ü_©Úb}KâYþD0±ÙÚÉܵ]®OKRò|Hæ;÷׹ȿ\gPóoÃþ×ðèú œ#V‘ò ]B»C|<3S5‘ÑœËÀJǯQ3'à/—à'-³3Ìú˜Vi4—>è»&Ý•^56tikÀú>ýj"Õi*{µ™¾ó½›ø±œ88‰?lÕuÜ»S8‡6òÇ»_<×ëž!Ç@þ‹È~NO ±xÏôð3zpÓ3!ûT;ÌOj‚ÚÜ`E©y›Ë0¤ûD§ÓnrUUê¸üØé.Þ}Egêí;šî Ï!ÍY4²ZaûÄä¼8xŽ;ö{G]ÿ DHD4wiO‚®óõ=ƒAFƒ_D#_ü¢UÉÈý-²¶ ªü %›¼!M4·æÇ{ó=ÏbY×£÷’Ÿö¶IÇêdäŸë§žlö×ù»+€g#ÛEðºö$ ^Õ…èi/Ÿv½ÓÎûIs|ÏÛ-þŠÙ S2W±m ¦0ÆŽip¯MMþ["t yû]â8%H~™g‘ùWòÛuoí«Ý|W³eH´O>,é b ±Öå~ÐyhÀõ¿q3P.â ûu Zí{€îÂNòŒ›-pÒw¼HܼC}qIƒ»_ ·“]²FËáÃqa¾7ˆÙ‡Øo,o¯ŽÖ¡ú•~ªù~Îþ³ˆ|57ÛÁuBêM$ôÖHôúX…^œü§ð‚‹¼oÒO÷] —sï0²Aò‡`d^‚»š*·õÑ$A•ßÍx_(n:ßMMCdÆÁGÝ1/×h“NÔqÈ?@¿÷}çøn÷ëµ¥ýŒŒáµsÔg¼eÄÉr?Ae!?Û¸ïꈸÖгäðÁþ¶—˜Þƒz`˜ä—Þ²æ2Ÿo:Î÷ïÛˆ”ýy„ï{û ÷†â ®³Í"¢ý„¶³ýu®Û´Q²È{ËP46¿q‚ÈŸæ½~9vñú4>ã&D¬åïoæÕgêfl¦Äߪù.ˆ9‚|]t.ëÉê³>ÇâŸcK'u'~æþ· ྽ë^?Ýw€k@ýþþ»•è˜î-ü±ï|: 4<ígû÷ºÞÏ|ï¸:œø˜@”¬ñ<ꀯ*ãQ5V!o¦òqÀ$ò½,À3¯Â`¿AÖŽÚYßÓîú.¾ÿ¹~ÿ÷‚Ló]Àfáí5»³!ÖÓ¡ÉûóŠËsñô±¾ëùb~Ö¡ 7EeŠ›c`L\˜q"Là©Æ'ûÿh©à?ÁÍ€‰ä-É£mí6ùK É]ì'¯õFîö£Ÿe3Ûÿ|shý¨bÖòÎÉ^úi¾Ã³óó³xÐ<^€ý·ø~`3y‡«’‘óËX9r_p6àw²UR/¨Ò»cŸ5e§Ô2ÇÕ§û[üŒÃDðdôÑW?Cþ1ȽÚ÷·íå;wÃûëÚ*Þ1=}Éoç!c±ÿðo ï—¾ÍC\EÌàùÃjƒºª¹5âö>µ–;F˜ÍÞ zØrR t×OøÛ ë‹ ºL–ÿ› ƒá~ã{Ý¹ŽŽK±ãhüÚU/ŸZ1Õ]ÇÛ!è¤?VþŽw>‚ýöòó€Öú©7«Ðšëˆ¶ÀwS<>^Q7³\c¼¹FÐÏ…”–ÒAöñí`g7çñ65Œ›÷:ÛöǺ?øé |Vü Šc¿n0…)¾ä~÷]Î'“ÿnÂ~>ŋ棯™øÿ¢‚トGî³Ðà­f-¬–zô»UGË,-asñÛøÀ&o³O±ãäú î맸ß!K\+EôºèvÝÍ'ûiãñÿ%¾"ÜÆç—xÌÆæküÜ—]?À]hù8uÅnþFaûÖQ{¶¶ø’O*Êeù¢Ø¾ï:l>ìs“Ûܧ)~ØxßÇ»¾øç±á\$²¿K¦‹„s}Ïó½ ÿ!òÂXÑtÏCr7;`¢ÇÕëZÀ2øý`>÷4“¤ ¶ð⎤ÃŽºª¶q<)Îú ·~«'#Ãè`¤¯ÑŸQ A;í´ þÒ÷ÌñÝw¢¥…DÀ¢­ïš<ŒgàS¨ÿ*Yq+kÈ€¬­Ö úÑ?·*H*i'ga$«°w{l¿@_ø£[[5™z¢Ÿ‚6ÂOã½`:¶t(ßçúÂ~Fƒc}wû™èb1°mÌñ½ÿgzïÙ‰_mKŸh¸Ÿ{—ÈòX¾8úëVv),¹ÅMm}HÕÖÌ~¦)±QTS»:ÉføŽ×nÎ<Ï‚†z4?íqá[ïK|wLwÄØõ_áçþ¹ã&ýýg¡Ù¹šÉInɬ¥}¨¡ÒÃx•µÌûúD|k9ȸÀã»cˆ[×Mx?NĸÉh_£)^ú#~ÊÑa8EQøþë ^ìÝÒ:Pÿ7„]6hÒ`‹ýo«±„Ki¹§µm…¦×ÙRËw7ÞŒÿ>$Âû‚vSñw`+²¡º½ˆÔav__³ÒvWš›€ºV0íìôõí"" Vnf5ýÌËwøé‚&Ûvx5„®,N˜IæÀÊëÏò¼‚,òÇ{6ýÆ&“¿fûùˆ®8ü}ï¸ïïév„M&2ÜôܾþÝè«üuèé¶æ²D»›€ˆnÙ°þTb`VH]“XjIY}`;¨{VÃGÔ͵ÞNT÷ëú¬÷£ŸñºŠX8¤‘l’?3t6èv^¡¾sýž¯+ü»çðÛÍ¿‰––·œV=¤ÃWrƒÍ¨×Sw‡ÎJtŸìŽõâÙ%¸ª›]7„Ч7Yk„Ÿÿ4”{ ½_ÜÕÒØ}z2Þt bÜ÷†{–4ާ¡ÉÓh§8¨ÿ¶µÁ Ôîhk01 Y¦Rçþý畜MÊÚOlÞÒ¼d« ~zëWH¾ÉyÜsG{—øY·ñÉ#ðò"ä·vHpç~WøY‡CÁLwî`µîEó[›nÝ©zo_Âyÿ$Û¯ÍBj|bä/+£ñÎôÖ„\•IFë³=«só;÷Á‰ƒên¦ÙX´1Ó{û}M=jßo·Ÿ‘3ýèg¦»3×àÕù¬“u¶Ê~ÂRZ«k—í>Gh] SBZÉ5i¯FÆOo`uwMç6nîèÅdäp ®rßÍBšÁm6:q¬)2¨–Ëûö|´¯—Ÿ—ý“Ÿ–³“,èΊg Ãûó±àYñBn|vðøuyª @ê3Øx:¾{šèÞç'Ù àÞª³•øÃ$tp€Xwy0²%Æó#åNdŸ þÀgFóùË ã6rái8`5k‡ô5ýY¿z®eƒ-î_Y餮L—'ê®Z ØxÛMl~ÚŸ ž¤Õ1؃H¶«>BO‘,•ld;D^˜ŽÕݤÔ±¼›¦›š¼ïf' Û¾²¯Á‡$0¢ƒú%|#ôVi©âv‚lÙàgamϨ/Ý?óãfþÄËÏù¹&n’ëm=¯a¾ókDž]N~ã’LñG¿£çŠ˜Û+•ÅRYå$î;Ø{Ë jmØF(®ÈII9<7;9» öKigawéñýM0ºS0}7f5X˜ÑÂì<Q)e3·wb²O&Qãá¹êVËßÑ­/¨“¬¿ÛVñþ參 ¶¨cÆ ¶Ê mJ%°,øo<ËJôþ–oÒ³xü9¢a%‘í^|n¯p*xM:3[‡ÿ»ãœÉÐM0Ï]AôB[Ùm¨*¥™|l1ÿæj#åM¹)¹­X}‡(Nh­A­_@7wËa Û÷÷Ð÷ÿ/Næ/o1|u—ƒ,pÏ_ÌŽ¤¿îŽ®j.Cv°‰¶Õ†Ù0] ߇xìZRHºËwúuJAäÊk_‚Û‰±ð*d¿MFßAtU]ÏÓV <ßC¬ç/ò÷à%i,·%õ×Ï Cþ[¾Ot-ûÌ:‚ûµäíï‚M*È )¯¬?Qð:^ü6xÇvÀúŸ€|‡‰n7¡<œ'ÕlvÛ ¼…–²˜‹ü¼ ÝU~7¶ŠÈ¿ÈllÇô>øª‘ÿ—»4³l³w‘¥~žË±ÉónWëSÐ :y ïx…ÊöQŸ”,mn×PJtÒÚ Y´S„ª?7UÕ"¨¸Ž“R!o}·HV©.¹$! ' Ò' v‚êî8N^7áßc |3}’-²ö–d¤rÚ‹–â[CòÜDä¯ƒç ²ùøþIíªM¤`Ч]ÿÞ•ÀïŒë"y´R´4ÇòS _¢¾8‘].üLã×Ýí±E üĽÎäƒ]~zjKk‹ç|l#a}_Á}"kP/[Ðg=ÿ=+\ÒÃRÖHGmh'ÒÝÊâãÁönÔ2n·k&¤þÊ6Ù2ûÂïêºE^ˆOÎ+NæojŸÛbä´ž‡ë·—ƺþ÷i%%^]NÉ ýÎ#OäǽwÁº¸~¢åd‰Uà\-|> ¶TÊJ¢‘>èª#™Á]3G;JIÉô}ÎÿØ*ˆßV ^Ï›cÏ#6ËöÛ·d…, Bw›a[l(r–7wF¯½ !î€éïBúÂøÃ\L> ý™'{å—Ø’DzHO¸O.ë«€´ð{8ZØN˜Ý@ëé‘¡­Õ'2Üþ¾1d‚×lª>ƒQswÛ³Ò¿éåi¿?OìkSasía½mm¦­ôWö3œˆèm[Á†üOûù¾/ÁÞßðǬœTk%‡ÔnÚÑ"žÚ•÷¤\ú_©vvùDöÉAY¯3ì ýî¯Aú×7ˆöFDþÛÈãï4'Ø×5üsVU<®ô•6Ú×ÖÙUêÙ-6Þ®èYP/~ ,9A5–tÆ[BíèÖµòK^l[Nrûé?)sl“®•ã¶ÖÆi]½"EaŽÿÿ·WrbR9*i-*Þ&µ€Öí2 {Â`½ÿ…• ;—–Ò@Þ’)R@VÃÓ#{(ìæùßZ¹¥’4Eþêx|Uü!,Ø_èåz¹^®—ëåz¹^®—ëåz¹^®ÿ…•Â)ÿóçû=+uN"Iüo×,N–<“œú'õ_Ú?Ý1þ¿geEÒØÔø¤¦ä—¶ÒMZéR]t’™[¿‡¨¿³ûËþá+U\lÜH¾’6ò¦ô•Ê¢ÚGË»²Y6q›-i¤>òW‘"RLŠJÝ?Ñù¾ÿneå–‹V&Æ[ËH颣u‚ÖÔ²X:Ê~騯Y'Û£‡´†N—íò½|(¥œ¸+›†Àõ]ÿ“UV²€nEðïHü “š:V/k<ëilˆ¼%ŸH,‰m­Žå³úö‘]Ô)º^jhF] _ú8 ~‡«t—Ò|ÿÂROFÉTy$“µ‡µ´r–Â"Y +f‰þÀ€--°ÌÞµÎVÐêY» fl»Æ×¡Rí…NŸË¿g¥ÇÞù$—4—³2\cÚ bºZ¸•ÅÖ=ìun#´–̱¦6ÉÙöƒU¶±ÖÕ–áƒìM»¥u4% 2þ ' $â{—!–cèqm`}­·õ²6ÖÊâY)î5Aí£½¡ßÙ'¼–ÄúX^4³ØnÚ6›`£í›g5m¹ÆÐ G5±N°Eú;–;÷]YH Ø×6É:Ø[o•,²e´Ë>³ù6ÎFj²@À{ÛêZn¼þ“À.ûñ·3ÃGl¢½ÐMÒD²“ÊI¡`‹õ;—ËôyÈgê/ZËÞ²j–ßšcÕ1V€Ø/m…°ïkaÑÆ:ì%ÐÀ0+N,L³‹¼³¬­ä•GvɪX#n9´ÑT%Ø‚ýŽUV*I2¸Ì»ò±ÆÆêõ,¥EÃî™l‘u±ZÓjØ=â¡ Àu¾þQ[ò{ª-E;5yw}¼b–5 N"¼À»l›ïØa²EvØRh/—ëÝÔöî2E+ßÍ-§]Ó8–‹ ÿ©]_óÔö1H—=Ôµ~ºP÷ñ¾A6_¯Fá;ˆþζÏ~²ÕÄAÂ@¡@ôÀZp =w~ÿe%Û'…·½-ì”íF–ÖVÒâ#s",?Ò*Ø]½£qí+îå³¶àà#ØÀPßÿ¶  ˜=ÿVÚiò@k{dž’¶‚ƒ‡­B J`¢öÒ…p>¬…üù@ê¹zoïmÍðð°v*‹…o×Åúô¼†c]w%cypn–¥'ãµÀ××’ë€ýûk‡†Jñú=‹ÈØf'ì¸Ý¶ËúQªg €y¾ö˲ÀtêbÕÏðúôàÜÇ~ÂAZs×3µ¬¾‹Õx,\€WrâéÛyµ½Íå^oKN.hƒzû[ìŒu#>>³°@tk.UCt>z)êØLò9|®–«CìÄ ÞÀ¾ ‰€ŽdøFVOcýñ‡¬¼«QñDË ™ð”"ÄÅ2òÀ‡ E3<ÿ-^“ìù:¯M¶W èøQ øIr¡¶ŠÁu_—Ñ2ü®†tƒìS?Í¥&¹ÌíðÎ…ô5‘éœ>S×'; òX»ñZuÞHˆ‡ŒåQ#¼¤5a'9¹²,¼ky×í¬•Ä \•® @h­ì0ÝTîwt8q[Œ/ˆï—²ìVÛˆú¨Hœ¨e÷õ"˜÷Xïkd¸þ÷H^ ÿŽôqÁ‡ï©ŠøÒ£ñüAøHarât{/šM.xœÐz’7úžüÇ•Bâ—×`ó®£y,–΢ƒüÑ‘Ê]éÑž«ëß_ét,pMÝ^èvÈ]lŸÍd°€¿æ%-©Oþ_Ï­(ÙÌðè}î÷!7,Ác&ãi¡µK$!þßAÂñجŸ5†Ï½ç‹ï{µÝÑšÐ^% D†ÍFççœžÄ ¢bÿ†‡÷V†ù½rÔâYï2ÿZp¢,·w`ŒõуÛ¹Ýfƒ5.:ÇÊÂA¤âRI'áëµáð5Aôž6… ŸÞ~ÑŸõ©†ááB zxô›ôeàMAŠöp£¶~âYeK æäÞÄ+0#-þPÆòðú q0Yp‘pÞâéëR>d®‚J*±$¤­ ZT{ K¾‡_Ãã¼ææ^Dä·yMDÆ#ž©›Q’÷4À[ªÂ‚æÙ—`}>- b Á‡Šóù·ÑB\rÉD¤>7CF|lým\8~°÷+¬´ÕNg«¾§ >“ò»*™«)±Žü‘í¼ÑÛzC#ÙSMœEA¶N |äÍ×mFü§Á{i:tÖ”ìß…BmHTT¦:Ø úíâßçh`•aWí †ÂJÿW—:$ËÓÍŒL7±u00¿¹îÿWý•¼{u—Þ÷²¡›B d¯¨šÏ•ð׋ÝÕÇþŠÀTü…Žèà=²Aú(Á;rówÚÛŽƒY°ÒX[xV<8ï×â˜ÊH²Y;¢¿¼Ÿdp@wê!nçô nõÏ—rÏ]Ñ_›§'RîjJËf'a@9@ÜàÿmM…¤"îsû>'È îº‰Ôüä§šü/X lÂGnJI‰lá©ô“qðêÆ ssrutPŸ½½wêl¿O7é6¦3ñ„«ú (>Q´KE|\×ìXùm<=©©ïl—ŽçÄ DCö4ÄÊPnîèØD²âi<à6Ù#s°€Ô’J¢KwüöoC´Ð‚\Ý€o}NêZ]‰ü‹ù™­?ér¿ëp÷\]ç’Ș )3¢ƒ»è/\81ëdž1&%"{ÇZû³ì¼³™DÁwøÚçäˆ!Ð!©T’ R ä>I^{ÖGáö oßå§,Ó-:OW#ýßÁø®ï þ”‰L‘†›<ÈŒ·\F7‘±uD?'êgu}„Í\×€×À€Êdƒ^T¯£‹¢TCímÐVÁ_H9¦ïÙqXÝPï5øEðésD¼ël²Í÷?ßÜõ½>ÎûyÿUHHŽ ·KêfDÅÄæ?kÀ\—ô;ü­;긣ú‰*ñøÉF†é|CDühÓaÁøYËc˦ tq?±'`®gQN¬7ßw«;}ïë â|à¸ïhœÇ®9…múxÂí9\ñyòžr‚w^Å+Îñš›p íÕŽbù.æ&hæ°êAG€¬’R’#y}²x2­íµ—ŽÓwõrýC¬îúoD–ó  ë zLØËýXù‚æ‡+¶éa=…\€™ÂKö ¡ó¾öi4åzîE{·4<ðøwÓ¦Qtú<Ðlî¨4xŸ‹¨¿ìûœÍBÂXë&?Ã÷uŸ¥‹È‹È®·ùì¹AרëäœY_PÞ×k>"®¡•Ëx}$;Æ;Ï"ûmtu˜¿w‘ßNƒ7ð„lT#¨ æYë #@né.O‘#;L>‡ÏÔqÉh7f;ÖCüÏÑ‘¾÷«ëã~ØË¾I† ­‰µÒ¦ZÀÇû:¼c½g‰w°óYßýã¿—z]AöhTÈUÀœ`ääš‘`E°'U’R›|^¨næE‹@µ»–ï;OÇssýïVû®Æ«°º› 0—W¿å¹«ÚÙ¢éS)kóñô…¾ïëâÓ^‚ü® Þ:>± ßß‚žºƒ}‚ïi°«ÀFrUªÁwÙ-Mêû²e%{Ç0w•ûnî»Nôýýðx+pÀ÷õM¬LæSq4¾æ³>H>í¸ž)n†Æ9þu=ðCŽAí1/iM·,M¾lãçë ÓuA?#ÐT–JE;A( _ÍEþJK\Ÿûí*÷I¾·ÿTb:؉ö£ƒxÀp ƒ±mQ}Ü—gæá!»Á¼ ¡ëæ:¸npûýÜ7¨¤} ê…ýÞ°F0Í|:,è“@‹ÿ_ÃÿkÂà£û>e±a?ÇÀò]ÄüTðo10û»‰'®·ûmä[€^>õ]o;££¥Úg~íï~ùeΛˆõø¿ë÷{KcÛ rjv|¾¹ÿuì¿ÛÚH­dù“ITHóñÃWú‘|&ØŠß÷×Q¾÷Ï0â{àÌÃÇw“ߢÛf42N{k_ô°Œéïuµ Ÿ¿NÆÛ‹_¬E«ÑÞB?eyáqq]󯛉ö>qpœø6þ»ó1­°öE¾ïnÏþRÀÝOãõ_h?äúLû€ÿ#|§ïõ+¤>Lß 2Lá=_¢‡e~NÂ8?!`9žãæÃìÀë· ƒ™p×y):Yê+(7#æ²La0ðckªÁÞ!”ZrH1øŠ›î·Œo¿´šŠÕfÑ«ìS~0öÿ‘Ûý¬Wµ¹x½ë…;“º`¾ïœ=ßw}_Àç ãNp`+÷–øªy‚g\M±V]WÙüþøPymdùèþ·É5½{q“;ûNÿ|ߪóú=Öÿû»ƒ÷kä_ Þ-'~ÐoÐEo2Á~Ðq•ïx» Owùa ¨ï&Lõ½ÓÜ䨈¾RxC¾‡—=&âªãƒ~mx<)%_J\¢òèµ).`™Á×»ë<¼¿ïk5 _ŒFþè¶{DW3ÐÉBn®/à"?;c‹ïú½AÝ~°­ž=.‚!ƤBr³_\ŒÔÃ1< zÓj½ ^,Ð]Áç—€c®ÇÍA,t/p3ïzxÿ–WÜüоóßaÐÜÍ;ÁmŸØN,|ÆÏ4ßóz:œw¬óÇÌæ{ü»à{¢ ±A¶Ö–Ù2_4P ~/ ’K*Êwd5WçG¢5`á§Dü.$vžGbóÑ’ì?Üw¿_ÖGýý¨ ¼cªü±HÖŽ×G˜èçlóÕÑ"<ò®á÷Lï9KùK ü„°…è ¢=¡| %%zç—,²JÒÁÉk;ì;8.ÆN7É_¼w;OŸJ|Ãï{,œÈÏ(ØÏXmDëÈ 3}vÛF×zïp12ßw½a7ã?øl¹qÇXR’ûCá —Nò¥æ6‡U£ùÞW4‹Ý&Ü‘¬Ù° ¯ùÞ®£å7¾÷¹;"4¹Æàù?/›|çÇé~FžÃý¾ê[¸)sÈ"@ýWà” ùä)}„^SiT òìÿ¬l’P J ­AVÛ#X\[‹DÓÈë m²Ÿ 4KÏäµ1Äõäs“à†#ï­OÜ"g,'>Ö£»Õ|ÊïqU’ë·}]Q7':‹]ôÂ^ ¥´_S[¼º¸]ÅËGa{—¢Í>6zô_C´\æ=¨­£ ð‹L Í >úÿºÒHM‰©1l ½«ñÀæùØKˆ#ÞÖó|Oçyø„;¼È#¹Ë ³aòõÈœym7væÙÓj?Ùu s“ðîð³=ÍB¨­/ðžSÔ‡M-²}$Á®ýþ²âH=I¢mŸ¦‡£Ö£6Ík×ùžGÁ¿ÓùþhßÑv‘Ÿ„´ÌO¸›ç;Œ¨e±l>ïë…”Ëý´äÝþ(Ñ~<)ª¹ â¸wK£Zf3Þ›’øúØŽh» s¿¿¬ºRVNIP:º%µ}'Çid87çãKäÿÚO¿å§_,BÆ-T0§Uì2•"®£Úx¤wóßæyÖw ÙW¢L–Í’ñj,‹ó˽ø° pî½ný‚^ùýûúÉOÞ¥¹°ý‡–+ŇGRû óó¯\vŸèûÚNFÂQX}ØÏ¢€ëm‘3ÔÞ³ol üÿYuLHuà “†²RNâÁà¾;a¿}çÿO©oÝñ¯ù~ÎÓÏ}Gù·Ôu\És?`k7/4…-òÇø‡óÞù~†¢›¼ ¹¥ùÈvÁ7óª£Õ·Fö¦~R׈¥dÔ1­&vOl›±÷Ÿ÷GáóýÑ„ó…ñè`¶ugH®kl,êvÅö;Fâ[r[I¶½ÔÏû<@$µ˜øt"²Z4bÆMu{ï™äQp:x9ÉO?Ý ‘ÉüeA””0l×K³¨Õ=!v]TznEå ü:¹ÞÅûÀ¾Ä‚»Öi±Ç¼µøqÛâ®ï¢r“~Ý9ðW|·ô=êp=:Ÿr’ÏS×w¶6ƒŽÑÓ üê4áf UÓi!·4)öÏ(%¨ÍÝ|gõð?·rh¿O8â]"Ö#áDFë·ä–HHl¯Ù1"cŸÛMÕpÆOK˜áç ]&¦ä/V·qVÿªe¥´TÈí/Aœ\jQdIfËÉf ìœø¾ïÎvF4wvó2mÇŽãÕ‘a½4 –O»ÙèçÀþ„ÔŠÎáj'ñ„³ÄŠø ø&y 'Ú2’׃e•œ²Gšò-3áÉÉáûaÛ¼Ötö ¼õ1Ìo ÈvhΊÜÑ,¹ßœ¼àr6˜ÛâØQb'ŒØqS ¥tÖÅ–Z[ßY¾›oBo5•2Ô“´ì,HuNOh!só|·Ã!oâ]äŸÂïdøt¿¬ ¨~ ðSƒ–éC´´ÿÈÄ«Ћúi¯©¬ƒÝµë`æB©B{_ÿãj$¥‰|A ä7gï< ánäÝߟG†dæÁb>?y-7zÉ ¯uÓ^Çÿùq3î7¡…\V8å÷MßÕHÜ`©#ôáýÿuµ”Bò¹ŒÅ»[ÃT YlÌU/?Ãl6ãÅ‘ÐËY"âþNÖwÓÝüwlc4ìp4~°Äïš{¬ÙA»èìk þç/Î"¢®Ê—!ý¿®á¾Óç|yªmýu®K‘Ã1–¬`Ú ";òžéÎPÏ—$òó#}{¤[ŽôÓüt˜%~6VB«ó/Š¿/° Öïïj«µþÊW€¹—µ%»((à&œD’jð–JðוÜ…<÷œüwF3RÍ$± àEøožw;>ÖÃ÷ö𾂠}{jŸäæ²{fÃÐ_&mƒ~Æÿ¿_M%3øÔ@Zêtê·¿µ#žÉÜ>ž’X3UïJÐ ò?%ÓÇ·ªÄw¿kb¯?ïuA ãçÉÐMCjÝ€¿¤5•å%©!=Cfæßß^•%‡¼.1¥»¾A¥Z9ª‚p.ãW³rxÅE¿ ø¬º+⌺¾²;ö÷ÔÝ߯.vùåÈøE‘=?zÌM…¼˜¿ìi׿oå<|׺’þ[Û*cÝËäþJäÅ\Ô<—ÕÍ|[ö°QÜJZ^žÏeqɘîo™['°"¿õ¶¡ö…ýˆÎºköŸe……Àé|:›ªÍ­;¦¥‘ð!þÝ #á_ÛWEÎX»´¿úý‘±ƒ*01R½Ôñ{ÛZ>×VWKxÐ÷ºü=+¹¤•øÒKbØëƒ/Gåc`á¨Ö \ÉïàéEñ¥ ]>â»!pDÏi6ë‹V–Ù|ØN<;M%YCÚH)*¾7ƒ-Ôß¹’KJ)&=t•K}"º,‘ЄlÐÕf"alø_Woßçxy[Oµ™½Ëí˜ ;.kÒqz†Ê1¹â_å¤BèL-³[.ÈtP.£¦Q7 Àÿ7ð3ÂgKÉ{2Z:6ó;sÈÑ~¹^®—ëåz¹^®—ëåz¹^®—ëåz¹þØ•Q’K~B³«ã¹’Ijªý\Ráß®Ûy Õ%-pyIÁ¿yƒÞÍ⟹Â$±Ä‘â’ i³I ž)¨s¥›d‘¦RJšK1)-5¤!:(Åý%Mdõ“ ³I]þÍ'£äUÝ-ˤžl×ïÿuY'÷åMé'?Êh5’*RBÒ¡ƒ…é¯$žU2I|€Ð&šÐ²Øí,ýe8'Ñ3ºZ+èBª)u«4“"’Còó‰4!q}×?¾ÒÕ©$»T$æÛË&é®Wµˆ¥² ÕX˜v‘Ž`Bw}%0Ô¾´w,®ÝB´¥ž•$*±’ L­¾¿wBò,’’Jky(õf-,­UµŽÖÍ>¶ö–M JB ³švÆ&YikŠVÊZ›oÙl”F×Òä„”R&¤vºÿÞ•™ož<Ë+§å­hÛì¤íµžþ gûÌÞö]°GJ?«XªoX5ë`#m§°}6Û@[k+õ'b&*ZÈ⻾þï•ëW—Üò‘ÔÐæH3ÊÙz‹a¹­Ž]Ô>ÖÏ&pS=kÙùˆ‰Bö‰}`Çí²¶®6Æ®Ù3+(d­åC° «t°…úÝ+ èíf=Ÿ”1ú£­³·¬†}ˆíg[K`ùì[»`ñð}S"a´5²…ö¹÷÷öØ9^™dÀz»‚/äԱ䌆 hú?IN,OÄ7ÁoïŠëïü¹½g¯Xv{×Û¬ŸÒR[_ûΚY~ð ˆ×)ÖǾ±Éï¨ @þm#Û–Ù>ÐZä–ŠóÁùˆú|àv4}Û†bõ&VÀbZ"knðëhd¾„ö#’W³Ê¶CGk»d#ÀŸ‰æØ}>ö_ŒW ³T‡vÔhˆØ©Ãñªú!^4?ù¬ŠT–èšÛ&âã=±;¬\ Mô³zDyuA¨íI#‰üŽòDb>'Î›ÂæòoFP.XË"Ãîk{µìg½¥´1Pl,m ÐÖcM`a†ß‚yÈoÙèqžÔ•w¬²Äc¶Õµì.™0iˆ]ÿ–¾—QÎÉ›°·OñáqH–ÝâÛ}ì¯s¾¯Ñ@ Ë úÝW³Hü[†˜€TÇOª‚îïºÈžÎÊãóS`@×áDï 7Ì1ð§õöÔZÛ{h;´Ž%—„Ôzƒô0® ¾;?n ®Å·çúD_èM ȃXˆì»ÁoÖ¨H: I«ÀR ;æ)³óÙñÔ ÁÄšxICâaø0 m "zhc2Mè¬ÒF^.%ÉðÞ&HqÁfò­G€ß5ÈiîºýW=ËwÇ}ì¯uw]ðáyg[²]Iü£ü¨<¸7ßï‹íßã~C^iAµ´DÈHè†/tƒ_§¶Øÿ¶œ76§Î[Lü~`¯"‘Ãýáܯ –»n˜q,:HðHÕ^øýíá®w/ˆßi»-]x_É ;®lól–} KœòÍÄ?cûûfWgáBŸñéDšÌ 3ÅñÅRd}µ±|×dvMSaÉpü P†è†ÅŸêißýüŽFÃÊÐM{^wL &âs1©†¢ùÏ Âöó×"ÿ0£ù?r`>ÏŽ´EäÊüv.˜(º¿»•ÉÏ-ý€Øoï§uÝ]¿Ò(dwµKzFOù+Á÷ñÜy-lO4q?”wsž2ûnÞõü¤˜Ç3ÈŒŸ ³à-,U$ :á1=É‹¿ ö¢£Ë°ÐÈaÜÒITbö‘f'‡m©ê®ëYݯ'ô‚ï\{HïºJGÏaÿôvX3¢£Zø@E¤Íïù˜<F,$âV’ìäW;‹¦v¡¯-hò´æÆûKÀÁ{~öÜ×ÎúóèÁ\µeÜ'žŸØ£æ¦›ìÅêÑAvù“‰‚Á:VG"Ûh?Ñá”ïç¿I‡"›À~Þ×}’Û–ã®÷Áj#–vaÎã3Ljþè! Ö.Á-ÜFÛbû ^#ÐʾÐR#Èò7”¾’šÈL>÷¶·ý<Ÿ)Ä}vÛÊ÷^Ãm¨.ÔIȶª`•ïf¾×g‚ÁÍB:[*ÚZ¼}6Þ±{«¹>X§}­° é ¶Û .\¤x¢%­9Y`·]9·ËûAŸ–zªyà%ïÀI†ÁeÂl¥Ö†å^ã\ïâ)¾ëëv4±¹]Wè›úÏ Õ>ËîÉieG°÷2ßùSÍõ·¼Âí&¾² y )­5õ[ž'¥RÌ`¹À¾ À/òzå'Ù¤©6÷•kT¹¨¹î/›5©¹.þÁø¹:Šßë=#ZIü»St-þð!±ŸEËj {ú»Ž§Çyí4òŸõ•Ó>¢ç÷¶Â>Ãò’-Âý|Ð`Àç¶Ü’jû Ë_JöËC¾çbµ¬•ÂþQì!¨µ)–êdE6˜ÅÍÍ3pøpÖgÇeHÚ] kW¼à)Þ±}ñ=±Ü„ÈC äŽßú¡ïçç*¸šLYÍZÂÿÒ“:Xªà`ËSJÈ<‰i§|_Ò0˜ËzbÝõîwqüŠ-DcðöH·ÀO€Yï»[:žœŒŒ“wÞ£.ÚÀ§vòÜÏž+ÅûïòÜ!4wK³x~¸Úwu¯À˜²VÉêØ–è› |ÙÜNl[#’ý¢®"p“*öü–§"³ÓÂJðïºX…yó]NÅx†g§"ÝZPï*q áò¯EO¿À¬ XD2Ìþ(ÄŠY¨”@©lñ%–$–6XÚM-ÛW»~vwøŽ[|7Ó ÄødŽä®#êp˜ÀB¼z3º„{ÉŽ­¨ynú?Gyìæ^á÷nr߬¿…¿—–:! >‘j¸<8ÒúÀK‡Àբɤ¬äÁb×ùÞKùí*œäÔ53ñüñÚW¿ÖqȾÜw¿tý½`ÕUüŒCÒA°ÃèÔ:Éa / ökåxÅwÂÝü÷ˆ«ºö¬'ìx 洞>·“pÏà¯TRAjó-Ÿc­;xhbß×ÒuòœŽô±ÿ,¿ž(ø =,Åþ›xe³v!#¸‰!nÊŸÙ*$Ýæ»ÝíçõØý×>Ð;ð”ehïªV²Á6ËöZ?¢&œ¹”U‰³ éá€éý„ë[ZÓ\ŲŸ§Ÿj?2ü |`žï\>´Â3‚-<:¢É;xoAssW{®s‚×ö¢—9 è¤v½ÓÜ„ˆeèv/ˆX†1ÓFÙûÑÆk°¹Ï¯+œ øŽ$§jKe™l™Ÿp0 ëvÇó‡ƒ|#Û±½ hÁM8pó=–ûéH{ÑÀB}ŸOÆ´mȼ›»9x›½W¡‹ÍDÁs|ê1Þ1ÛwÒ;HOìaéƒ>ûåוQÒHiŒmž’6 Çßó"vŸìûÚðÓŸ¦ù°Ùç#ÛJ^»†TMµ èöŒø™@Öw3þNzu€ÜñÓð¼~vöMt9 í¸IÊYa‰Ûñ»ÐX¹¥²ü(Q±ÒAß³ôè&í‚ûM@Þðû‘È?ÇOÁ]Æm¥ï{‹÷å3êøì>Ú3½3T=®â;:º£i‘,7œ§ñž-mV7c"†õD}$TzàæG5䱺™7nÂ¥ëXœ›ëú4œX˜ †Mòm7ù)?KAÿiðÿƒTµ@À‚æº@Ïô¯¸9¢.ž ñ~wÄ ù¿ù>¼ò„ºÝdM©˜{†Ì¾P·GµUP"Ð/>Üd¡¾j±ÌuoŒÃk]oÓá:_X‡Ý„—¥~*â/ e)Xýj^‰»¹'§‰¢­zÎOS:Îm…>&?~ö¿·vܧ1ñ‘†N7°B°ª’K°–ÿ|„ È[óü ÐéXÜM¸pžVÛb'ˆñ3döžVË&áÃ}¦˜íç{Âú[øüm¬íÎÅ„÷¼G œ—hˆ`ÑFÇ O>û÷UD²ÃCÝQ7÷y –úxM_} LœmÝ<7l‘ïî½–Zæ¢Æ³Wa³®X¸¹ÉKýñ2‡ ÀùÃè)öΫ~Â½Ôø}ËçwPýçIèÈßÊïôž—ÆFò0{<Æöîxç|2ßhŸ&ãÉ®¯÷¼?2|'’¥@¯ØMLÍ4Zá…Ÿ|â¦}%léK‘òùîÈa¼7³•ƒù°v mÚê†7AJK‰Œ´5¬?1—8ž‚Ì_àÕS~&ö‚ä3|W÷ÙDÅ+–IF5³MSØ!ß9®m$RvÀÎøÚg»ï~ßžZ¿–5¡â->ÚÚû¶ÈÆé{ìɧÿq¥ôSéçØðž~‹ÔßÃÿ:Áãý‹ð퉠Ÿ«„ÝD£ðŠ“`dZßÍù´&±[šÊÎ’×Vñú:´·Ÿ÷þèçd\×bÖ ‹âvCj[a§ì²ÎCß¡Áþ~]©©‚ŠÈsIŠgšmÀ›Ç Á\ßu4u ~½g¾Ë¸¿ÉÆbÛ³ª~ÚwôœzFø×9sçÏ–¡‡Yü¬ Gº8HŠå Ù)]gì0^S>„¼ß-ÇsÊ8äwG¯ù#™'ÁmµXm:6w³>î`ÏŇû9hý§(ÄuDËEΈn»xï*„ÐCXçì 3€oXÛcßÙvÃz¢ñÐZY$…””ýT¦n¿Ë1°ÏÍ®O W¿ê§Ýó¢Â × 3É…“°òfž{ÍnñiÈéñí Ÿ|qM%¦"ˆ*žÄN£ÄÈþ:Ð$X"Öó~ÿyeÀ¤Šö÷ó_«ÛÉáQ [âñï9<hï¸ítDx.1ðÉܾ¸ä¹H¶ù÷j4Þ ¦w‡êà~r‚ßiÉ‘eÑÀ,ë`o[”Êýÿ¾RÁƒ¯H1òuR"5µŸÙ®cë-àßm˜¡;¯=Ç<‹? Ê%Åç]§Û{Ôy;` Óñö¨dºpñ¢Ÿ¡½”H:¤q­5y “­´ò6WƒÌ믭lÔ#]% ˜–Ø.Ùù-)špS\„‘ñîcÏúØ—–p˜ù#/Ûñ’©þYrò\*sÓÎùiYSñ˜´äÀnÔýïƒå5Øç|ÿú —’Yºj=xZes³ÊóÚ]¾û9u3>ÜüšLÔy{Á´ÙÄG1XÝ#dLƒ–bÙNq Öwǃ\Gü  a$ðb?x° F|•J©²M¶sdÁ%ü©—}Õ&¼)§´ˆ…¥¹~çqm | ²ëSƒó÷ˆæ±ä‡L0ùìvXOpguîÁ Ök|?-ö/ÚU&^ŽêmŸ9žh›dm±-kHîÿu…Ý— ÚD›§nRë^î?5µpJâÜíb¹I8‰=“#c$u3-’·Ô7Œ‚Ü ñ›¸T­ÐZ"¾:¯fÿNÚ»VM> ]Okµò1°J"áíÈ/ÈònÀm¸ñ=´Pž¸ˆDµ{U3“'#øÞØÉÑÒkhf¾¯‘n`íÛ~o\)k †$%ò3 »Û!8Ä6ʤîÿþ¡–úØgÒçÀÚ»ô.ü>-˜~ |po/Œ¦È‚Õ`Ûh¶ÜsÃid‡¾ê¦5Aü¬DÌCt±ÅgþȰþŒÁñÿ±šKª¡,rHaoÇoÓR»·BÆËðØºævJ¹sÁ¯!]q¼¿>ÒNz¶ëήí. )çÿ}áî¸×7V9pÒ2“÷ÚK•` øÿ\Í$(ð¡tÒòV…¯íš`Éû‡;â‡áƒîÈÇ;øH9^OnÀ¾ñxÅ*äßÇû\ïÿºöþn ©öãÛך¿üV°…û]+v^M¶H|ì^Èmú¹k>² M {änù‹pëiMyö ,wÙ~»?ò}M £VdüOˆüÏð’ZKúKhïþ=+ä’b2Of©;K[…èOé˜ < ]Û P#£=×î eðý¨Ÿz9- ö³ã/á6ݾ'^2X+]$MChÞßï[…Áªƒ’ÚÚZir|VëMÂÊä¹îö¡mC7nîÝ}ùD*‡XÅû{VfI&Gå‰6B¢bä±:0øÄ`ÚGÈÖ Ö‘Šf€³~xÈÛ°E7Ý3 ºè~¾D[u­­–׃X>oÈ_ùû×W)#_É.uWw¥ÃÚ5ÑD-$ëa]ðïXdïm¹-F/}¬Q:°*¿_á]‡ôŠ,‘‰ROª‡Ô±ž¿ge Š“ Æk>¾\¿•õ¯'û±)‰‡!ø€C¹ÒöX«bý·m$^ÿž šÊ‰ô¡ÊößJ#ù¢™$ô3ác“×¾µGX½¹c›ÃÉí“l²×677Ú] 9Í6ê,Ý¥òç_©%蕆üuUîk[o½ˆù²Öû÷ÀÏ?²àá}­AXÌó¯ÁtÒJŽ éÿ²2“[H^m`ë´Ž]ÇÇçØ`+¸`³lÚxŸfq_Øs¢¦NÐ÷uÿñ+·Šò¾Ì¶ÌvÔN[ôÀû–<‡å#ZMòÿ]Yñ‚·¤” ¡øÁL+¨c;u–å&´ƒõZú×]iAÃÒ tÖ·ì¤l.Ët®Û ¥fìçúg/‡ldªdÓ32TNÈ›…j ±ö—äì/÷¿²â‘J9˜›YTÆÊ ™ Ù¨^®—ëåz¹^®—ëåz¹^®þú?GSÂ`pymvpa2-2.2.0/mvpa2/data/fslev3.txt000066400000000000000000000000241202542755000170100ustar00rootroot000000000000006 9 1 21 9 1 35 9 1 pymvpa2-2.2.0/mvpa2/data/glm.mat000066400000000000000000002115121202542755000163350ustar00rootroot00000000000000/NumWaves 6 /NumPoints 850 /PPheights 4.768891e-02 2.866777e-02 4.764881e-02 2.866767e-02 4.764880e-02 2.866777e-02 /Matrix 2.562171e-03 -1.721225e-04 -8.872181e-03 -2.923608e-04 -1.776259e-02 -1.727261e-05 2.377229e-03 -1.788187e-04 -9.176419e-03 -2.728257e-04 -1.774790e-02 1.400818e-03 2.178788e-03 -1.900224e-04 -9.441924e-03 -2.436636e-04 -1.489706e-02 1.172284e-02 1.971325e-03 -1.977632e-04 -9.688133e-03 -2.314902e-04 5.755679e-03 1.479416e-02 1.757284e-03 -2.036958e-04 -9.929564e-03 -2.266792e-04 1.470575e-02 1.088244e-02 1.537833e-03 -2.087608e-04 -1.016642e-02 -2.201175e-04 2.751623e-02 4.776432e-03 1.313536e-03 -2.123761e-04 -1.039499e-02 1.203611e-03 2.422735e-02 -8.689240e-03 1.086725e-03 -2.091418e-04 -7.784640e-03 1.152322e-02 1.011340e-02 -1.339682e-02 8.687668e-04 -2.056701e-04 1.262891e-02 1.314107e-02 -2.560964e-03 -1.023120e-02 6.487744e-04 -2.115689e-04 1.849760e-02 3.151186e-04 -1.031704e-02 -5.839726e-03 4.188923e-04 -2.212083e-04 1.326575e-02 2.899325e-03 -1.419214e-02 -2.807380e-03 1.794894e-04 -2.293916e-04 2.429705e-02 5.311016e-03 -1.587538e-02 -1.196692e-03 -6.689668e-05 -2.347673e-04 2.390082e-02 -5.877818e-03 -1.652557e-02 -4.517382e-04 -3.171924e-04 -2.351230e-04 1.255401e-02 -1.121339e-02 -1.671753e-02 1.285103e-03 -5.644334e-04 -2.347578e-04 1.474043e-03 -9.065560e-03 -1.389364e-02 1.172699e-02 -8.141406e-04 -2.390537e-04 -5.589393e-03 -5.363340e-03 6.792246e-03 1.342277e-02 -1.070116e-03 -2.449715e-04 -9.272751e-03 -2.694655e-03 1.296422e-02 6.174622e-04 -1.331806e-03 -2.498087e-04 -1.100290e-02 -1.231899e-03 8.026499e-03 3.184420e-03 -1.597606e-03 -2.532193e-04 -1.176267e-02 -5.253269e-04 1.934277e-02 5.604940e-03 -1.866270e-03 -2.556168e-04 -1.208051e-02 -2.254440e-04 1.922230e-02 -5.593469e-03 -2.137019e-03 -2.573692e-04 -1.224087e-02 1.305589e-03 8.141999e-03 -1.095625e-02 -2.409342e-03 -2.586667e-04 -9.496827e-03 1.167539e-02 -2.680736e-03 -8.835244e-03 -2.682843e-03 -2.595894e-04 1.108546e-02 1.330832e-02 -9.496270e-03 -5.153447e-03 -2.957169e-03 -2.601622e-04 1.711819e-02 -9.355751e-04 -1.294108e-02 -1.086217e-03 -3.231972e-03 -2.603893e-04 9.219386e-03 -8.662990e-03 -1.161492e-02 1.067455e-02 -3.506910e-03 -2.602686e-04 -2.114829e-04 -7.861194e-03 8.459010e-03 1.300679e-02 -3.781630e-03 -2.597940e-04 -6.517151e-03 -4.802104e-03 1.440747e-02 4.669441e-04 -4.055775e-03 -2.589600e-04 -9.836834e-03 -2.405872e-03 9.389192e-03 3.137649e-03 -4.328985e-03 -2.577613e-04 -1.135372e-02 3.575334e-04 2.068961e-02 5.608902e-03 -4.600890e-03 -2.561951e-04 -9.148274e-03 1.131144e-02 2.059008e-02 -5.572845e-03 -4.871122e-03 -2.542577e-04 1.124510e-02 1.319117e-02 9.527222e-03 -1.093891e-02 -5.139308e-03 -2.519438e-04 1.723262e-02 4.649490e-04 -1.281175e-03 -8.820785e-03 -5.405066e-03 -2.492524e-04 1.218020e-02 3.095896e-03 -8.085073e-03 -5.141599e-03 -5.668022e-03 -2.462825e-04 2.342400e-02 5.520547e-03 -1.152079e-02 -2.490803e-03 -5.927991e-03 1.170126e-03 2.323336e-02 -5.675401e-03 -1.301588e-02 -1.044868e-03 -3.358278e-03 1.148084e-02 1.208505e-02 -1.101830e-02 -1.355658e-02 -3.535603e-04 1.700466e-02 1.309377e-02 1.196245e-03 -8.878074e-03 -1.366791e-02 1.347423e-03 2.281190e-02 -1.154631e-03 -5.683680e-03 -5.183732e-03 -1.080642e-02 1.176569e-02 1.468137e-02 -8.888869e-03 -9.191437e-03 -2.523512e-03 9.912758e-03 1.345671e-02 5.015479e-03 -8.092161e-03 -1.075481e-02 -1.071492e-03 1.611275e-02 -7.689194e-04 -1.527183e-03 -5.036661e-03 -1.136026e-02 1.038071e-03 8.367628e-03 -8.521278e-03 -5.085828e-03 -2.643236e-03 -8.705184e-03 1.163629e-02 -9.208137e-04 -7.744680e-03 -6.843680e-03 -1.295961e-03 1.188874e-02 1.476420e-02 -7.093213e-03 -4.704843e-03 -7.708784e-03 -6.513394e-04 2.082249e-02 1.087462e-02 -1.028901e-02 -2.324608e-03 -8.177889e-03 1.036599e-03 3.364716e-02 4.764338e-03 -1.169422e-02 -9.890979e-04 -5.667384e-03 1.145685e-02 3.037457e-02 -8.694060e-03 -1.221603e-02 -3.540199e-04 1.470545e-02 1.312601e-02 1.627881e-02 -1.337882e-02 -1.234999e-02 -8.824738e-05 2.056596e-02 -1.099023e-03 3.621077e-03 -1.019657e-02 -1.233998e-02 1.430510e-03 1.249209e-02 -8.831693e-03 -4.124236e-03 -5.803779e-03 -9.436445e-03 1.179441e-02 2.882629e-03 -8.034951e-03 -8.004970e-03 -2.777335e-03 1.129526e-02 1.344989e-02 -3.603263e-03 -4.979686e-03 -9.701698e-03 -1.168668e-03 1.746617e-02 6.175978e-04 -7.105918e-03 -2.586062e-03 -1.036698e-02 -4.244148e-04 1.252032e-02 3.177260e-03 -8.806571e-03 -1.236799e-03 -1.057594e-02 -1.040688e-04 2.382095e-02 5.588856e-03 -9.611677e-03 -5.894512e-04 -1.060076e-02 2.096615e-05 2.367454e-02 -5.618911e-03 -1.001810e-02 1.100991e-03 -1.055968e-02 7.257775e-05 1.255994e-02 -1.098899e-02 -7.442551e-03 1.152452e-02 -1.048123e-02 8.823914e-05 1.696747e-03 -8.873888e-03 1.299956e-02 1.319690e-02 -1.040874e-02 8.308086e-05 -5.164823e-03 -5.197792e-03 1.893159e-02 -1.026794e-03 -1.034053e-02 7.972613e-05 -8.661397e-03 -2.550342e-03 1.092973e-02 -7.344080e-03 -1.027467e-02 7.721788e-05 -1.022072e-02 -1.107869e-03 4.222593e-03 3.763008e-03 -1.021140e-02 7.281163e-05 -1.082907e-02 -4.199992e-04 1.843106e-02 8.430558e-03 -1.015429e-02 6.736478e-05 -1.101137e-02 -1.362514e-04 2.106717e-02 -3.426017e-03 -1.010185e-02 1.477494e-03 -1.105184e-02 -3.340187e-05 1.156400e-02 -9.816516e-03 -7.224417e-03 1.178244e-02 -1.102835e-02 1.666440e-05 1.413662e-03 -8.381856e-03 1.344111e-02 1.338458e-02 -1.096874e-02 3.281450e-05 -5.226014e-03 -3.646378e-03 1.954573e-02 -8.717162e-04 -1.091308e-02 2.893944e-05 -5.909201e-03 9.160633e-03 1.170544e-02 -8.611943e-03 -1.086134e-02 2.510463e-05 1.306475e-02 1.217117e-02 2.320912e-03 -7.822255e-03 -1.081346e-02 2.132303e-05 1.841352e-02 -1.415036e-03 -3.950407e-03 -4.776801e-03 -1.076938e-02 1.431517e-03 1.021813e-02 -8.878554e-03 -7.250985e-03 -2.394799e-03 -7.901198e-03 1.174012e-02 6.351659e-04 -7.973994e-03 -8.761961e-03 -1.057258e-03 1.275406e-02 1.337469e-02 -5.756598e-03 -4.866539e-03 -9.389132e-03 -4.213184e-04 1.884795e-02 -8.719991e-04 -9.128323e-03 -1.042578e-03 -9.628926e-03 -1.559452e-04 1.099702e-02 -8.624558e-03 -7.874097e-03 1.061128e-02 -9.725616e-03 -5.183123e-05 1.602303e-03 -7.849134e-03 1.206261e-02 1.286503e-02 -9.757289e-03 -7.371460e-07 -4.678029e-03 -4.810920e-03 1.783577e-02 -1.115978e-03 -9.751827e-03 1.639011e-05 -7.983119e-03 -2.430707e-03 9.813774e-03 -8.747415e-03 -9.749238e-03 1.426513e-03 -9.496078e-03 -1.095063e-03 3.194597e-04 -7.900250e-03 -6.923529e-03 1.172889e-02 -1.012670e-02 -4.607328e-04 -6.013652e-03 -4.826994e-03 1.368694e-02 1.332911e-02 -1.036967e-02 1.218848e-03 -9.365085e-03 -2.436409e-03 1.973596e-02 -9.262151e-04 -7.640621e-03 1.163773e-02 -1.091895e-02 -1.092891e-03 1.184249e-02 -8.663561e-03 1.294843e-02 1.332991e-02 -1.158424e-02 -4.529236e-04 2.408061e-03 -7.870326e-03 1.901856e-02 -8.957175e-04 -1.185855e-02 1.229757e-03 -3.909408e-03 -4.819591e-03 1.114359e-02 -8.648833e-03 -9.158635e-03 1.164552e-02 -7.249371e-03 -2.431643e-03 1.724053e-03 -7.873809e-03 1.140012e-02 1.330983e-02 -8.794649e-03 -1.088736e-03 -4.581066e-03 -3.421173e-03 1.744045e-02 -9.239525e-04 -9.450512e-03 -4.486574e-04 -5.082080e-03 9.272661e-03 9.535111e-03 -8.666012e-03 -9.716359e-03 -1.813060e-04 1.400152e-02 1.224927e-02 8.678737e-05 -7.876277e-03 -9.837815e-03 -7.454870e-05 1.941360e-02 -1.356625e-03 -6.244501e-03 -3.413121e-03 -9.890282e-03 -2.191757e-05 1.127404e-02 -8.838241e-03 -6.770145e-03 9.282153e-03 -9.906533e-03 -5.395281e-06 1.739998e-03 -7.952520e-03 1.228881e-02 1.223259e-02 -9.925974e-03 -7.167052e-06 -4.608073e-03 -4.856433e-03 1.767498e-02 -1.382234e-03 -9.945790e-03 -6.808214e-06 -7.936598e-03 -2.450571e-03 9.507375e-03 -8.855412e-03 -9.964535e-03 1.408413e-03 -9.465948e-03 -1.108289e-03 -5.749778e-05 -7.959948e-03 -7.153930e-03 1.171771e-02 -1.010669e-02 -4.696125e-04 -6.439663e-03 -4.859053e-03 1.344904e-02 1.473831e-02 -1.035734e-02 -2.003287e-04 -9.806406e-03 -2.454405e-03 2.232369e-02 1.079477e-02 -1.045899e-02 -9.121991e-05 -1.138121e-02 -1.116129e-03 3.504943e-02 4.665002e-03 -1.049121e-02 -3.644334e-05 -1.207230e-02 -4.807075e-04 3.167865e-02 -8.792144e-03 -1.048324e-02 -1.602480e-05 -1.237665e-02 -2.159048e-04 1.748636e-02 -1.205968e-02 -1.047464e-02 -1.483402e-05 -1.253832e-02 -1.120681e-04 7.564765e-03 1.433789e-03 -1.046431e-02 -1.264410e-05 -1.263509e-02 -6.102344e-05 2.034841e-02 7.431190e-03 -1.045135e-02 1.404424e-03 -1.269472e-02 -4.384951e-05 2.243580e-02 -3.797084e-03 -7.606904e-03 1.172191e-02 -1.275718e-02 -4.658366e-05 1.276521e-02 -9.923875e-03 1.303505e-02 1.336565e-02 -1.282231e-02 -4.913822e-05 2.588292e-03 -8.382477e-03 1.912358e-02 5.396895e-04 -1.288992e-02 -5.147694e-05 -4.010785e-03 -5.006625e-03 1.410081e-02 3.104848e-03 -1.295977e-02 -5.356822e-05 -7.443321e-03 -1.074829e-03 2.533021e-02 5.523464e-03 -1.303160e-02 -5.538046e-05 -6.182613e-03 1.063240e-02 2.512107e-02 -5.677966e-03 -1.310511e-02 -5.688023e-05 1.380071e-02 1.289969e-02 1.394805e-02 -1.104333e-02 -1.317998e-02 -5.803875e-05 1.961817e-02 -1.084195e-03 3.031682e-03 -8.921797e-03 -1.325586e-02 1.355080e-03 1.164016e-02 -8.712679e-03 -3.875331e-03 -5.237482e-03 -1.050454e-02 1.166314e-02 2.191805e-03 -7.865354e-03 -7.408552e-03 -2.581202e-03 1.003729e-02 1.468782e-02 -4.102026e-03 -4.796878e-03 -8.995578e-03 -1.129875e-03 1.884975e-02 1.074694e-02 -7.420415e-03 -2.410009e-03 -9.622808e-03 -4.332631e-04 3.151488e-02 4.619436e-03 -8.944188e-03 -1.068080e-03 -9.815292e-03 -1.406681e-04 2.807959e-02 -8.842842e-03 -9.580408e-03 -4.285824e-04 -9.856927e-03 1.386427e-03 1.381819e-02 -1.353432e-02 -9.825893e-03 -1.598342e-04 -6.995132e-03 1.175901e-02 9.917749e-04 -1.035643e-02 -9.924889e-03 -5.232795e-05 1.370237e-02 1.342095e-02 -6.921213e-03 -5.962985e-03 -9.955471e-03 2.318062e-06 1.984454e-02 -8.198201e-04 -1.096527e-02 -2.932621e-03 -9.945208e-03 2.440381e-05 1.204760e-02 -7.152748e-03 -1.281985e-02 -1.318735e-03 -9.931607e-03 2.656904e-05 5.540300e-03 3.939116e-03 -1.363721e-02 8.452210e-04 -9.916999e-03 2.776235e-05 1.994077e-02 8.619214e-03 -1.116434e-02 1.148053e-02 -9.900996e-03 2.775301e-05 2.276339e-02 -3.238222e-03 9.290335e-03 1.322473e-02 -9.886389e-03 2.553255e-05 1.344305e-02 -9.646135e-03 1.526334e-02 4.484043e-04 -9.874810e-03 2.249933e-05 3.469441e-03 -8.228604e-03 1.016879e-02 3.043205e-03 -9.866256e-03 1.835998e-05 -2.994869e-03 -4.916772e-03 2.132848e-02 6.863051e-03 -9.862946e-03 1.429618e-05 -6.331224e-03 -2.421611e-03 2.388002e-02 5.974708e-03 -9.862517e-03 1.115040e-05 -7.798198e-03 -1.023537e-03 3.326448e-02 2.239933e-03 -9.865498e-03 9.089641e-06 -8.335321e-03 1.049811e-03 2.835185e-02 -9.872274e-03 -9.869194e-03 9.119164e-06 -5.654470e-03 1.163105e-02 1.350908e-02 -1.391562e-02 -9.872120e-03 8.283993e-06 1.496525e-02 1.337714e-02 5.012548e-04 -1.046169e-02 -9.877489e-03 1.420505e-03 2.109493e-02 -8.132074e-04 -7.441126e-03 -5.957906e-03 -7.055978e-03 1.172816e-02 1.332107e-02 -8.544582e-03 -1.144593e-02 -2.870689e-03 1.355709e-02 1.333406e-02 4.004345e-03 -7.767989e-03 -1.321618e-02 -1.231897e-03 1.961326e-02 -9.184809e-04 -2.196744e-03 -4.728391e-03 -1.394442e-02 -4.779801e-04 1.172797e-02 -7.243045e-03 -5.421237e-03 -2.346835e-03 -1.420724e-02 -1.484075e-04 5.126266e-03 3.855374e-03 -6.852435e-03 -1.009236e-03 -1.427649e-02 -1.226178e-05 1.943048e-02 8.508917e-03 -7.398721e-03 -3.735261e-04 -1.426706e-02 5.131598e-05 2.215174e-02 -3.357731e-03 -7.557350e-03 -1.082403e-04 -1.420915e-02 1.492596e-03 1.272568e-02 -9.752266e-03 -7.572731e-03 -4.109058e-06 -1.131713e-02 1.180730e-02 2.647403e-03 -8.316971e-03 -7.523065e-03 4.665330e-05 9.371855e-03 1.483827e-02 -3.919242e-03 -4.995024e-03 -7.437026e-03 6.129364e-05 1.833767e-02 1.090264e-02 -7.360906e-03 -2.500341e-03 -7.358261e-03 5.500916e-05 3.116055e-02 4.783637e-03 -8.942003e-03 3.052303e-04 -7.284955e-03 5.062850e-05 2.789571e-02 -8.667515e-03 -6.774278e-03 1.126711e-02 -7.215106e-03 4.730613e-05 1.381441e-02 -1.335199e-02 1.357080e-02 1.313828e-02 -7.148592e-03 4.394567e-05 1.172547e-03 -8.756733e-03 1.950342e-02 -1.007825e-03 -7.085603e-03 4.154621e-05 -3.725493e-03 5.947538e-03 1.156286e-02 -8.690452e-03 -7.024021e-03 3.864964e-05 1.303838e-02 1.059056e-02 2.121428e-03 -7.878932e-03 -6.966955e-03 3.291796e-05 1.743600e-02 -2.044845e-03 -4.206561e-03 -4.830712e-03 -6.916956e-03 2.578544e-05 8.931579e-03 -7.616443e-03 -7.558576e-03 -2.443716e-03 -6.874259e-03 1.881469e-05 2.181124e-03 3.812338e-03 -9.116290e-03 -1.104122e-03 -6.838292e-03 1.238312e-05 1.653040e-02 8.603380e-03 -9.790845e-03 9.456510e-04 -6.808534e-03 6.354811e-06 1.937026e-02 -3.206076e-03 -7.249761e-03 1.152040e-02 -6.784686e-03 5.502360e-07 1.010225e-02 -9.583813e-03 1.322800e-02 1.323389e-02 -6.766588e-03 -5.133549e-06 1.813157e-04 -8.152148e-03 1.921877e-02 -9.637861e-04 -6.754145e-03 -1.051192e-05 -6.229054e-03 -4.831321e-03 1.130783e-02 -8.682147e-03 -6.746830e-03 1.399453e-03 -9.512007e-03 -2.333895e-03 1.853100e-03 -7.891911e-03 -3.914473e-03 1.170604e-02 -1.092941e-02 -9.363654e-04 -4.487853e-03 -4.844072e-03 1.670007e-02 1.333562e-02 -1.141812e-02 -2.762016e-04 -7.853936e-03 -2.459038e-03 2.274823e-02 -9.149684e-04 -1.151547e-02 1.408123e-03 -9.428553e-03 -1.122314e-03 1.484889e-02 -8.669697e-03 -8.635582e-03 1.182546e-02 -1.012294e-02 -4.891132e-04 5.404207e-03 -7.895501e-03 1.210339e-02 1.348902e-02 -1.043192e-02 -2.244798e-04 -9.268910e-04 -4.856761e-03 1.832229e-02 -7.451770e-04 -1.059738e-02 1.294244e-03 -4.280784e-03 -2.475963e-03 1.059644e-02 -8.488760e-03 -7.869100e-03 1.165373e-02 -5.843235e-03 -1.141263e-03 1.323740e-03 -7.702554e-03 1.268744e-02 1.327599e-02 -6.524442e-03 -5.093478e-04 -4.835021e-03 -4.654017e-03 1.868303e-02 -9.802733e-04 -6.821631e-03 -2.487784e-04 -8.014176e-03 -2.266391e-03 1.073370e-02 -8.720460e-03 -6.981075e-03 -1.486036e-04 -9.399507e-03 -9.277302e-04 1.240104e-03 -7.930527e-03 -7.077579e-03 -9.819369e-05 -9.902136e-03 -2.937531e-04 -5.139889e-03 -4.883116e-03 -7.136001e-03 -7.977128e-05 -1.001980e-02 -3.072036e-05 -8.545743e-03 -2.499002e-03 -7.195537e-03 -8.093066e-05 -9.996433e-03 7.146789e-05 -1.016129e-02 -1.161949e-03 -7.256152e-03 -8.233838e-05 -9.909708e-03 1.208944e-04 -1.089483e-02 -5.266370e-04 -7.318377e-03 -8.556642e-05 -9.787436e-03 1.363109e-04 -1.124056e-02 -2.618267e-04 -7.385317e-03 -8.917196e-05 -9.669808e-03 1.315619e-04 -1.144486e-02 -1.604298e-04 -7.454612e-03 -9.030266e-05 -9.556968e-03 1.266671e-04 -1.158802e-02 1.299487e-03 -7.523668e-03 -8.977765e-05 -9.449065e-03 1.216349e-04 -8.872653e-03 1.162078e-02 -7.591767e-03 -8.917162e-05 -9.346226e-03 1.164925e-04 1.162978e-02 1.322238e-02 -7.659468e-03 -9.027629e-05 -9.248549e-03 1.112686e-04 1.757108e-02 -1.034526e-03 -7.729635e-03 -9.059892e-05 -9.156102e-03 1.059913e-04 9.566301e-03 -8.775782e-03 -7.797833e-03 1.323498e-03 -9.068927e-03 1.006950e-04 1.621491e-05 -7.986503e-03 -5.039662e-03 1.163468e-02 -8.987022e-03 9.541236e-05 -6.420600e-03 -4.939026e-03 1.550870e-02 1.468851e-02 -8.910365e-03 8.992258e-05 -9.882872e-03 -2.553743e-03 2.433134e-02 1.076086e-02 -8.839397e-03 8.264536e-05 -1.155296e-02 -1.213150e-03 3.700586e-02 4.651158e-03 -8.777253e-03 7.491712e-05 -1.233590e-02 -5.751924e-04 3.358245e-02 -8.813145e-03 -8.721705e-03 6.951815e-05 -1.273094e-02 1.103847e-03 1.933555e-02 -1.352047e-02 -8.670328e-03 6.582655e-05 -1.015624e-02 1.151460e-02 6.527447e-03 -1.035742e-02 -8.622134e-03 6.389514e-05 1.027307e-02 1.316862e-02 -1.366438e-03 -5.975037e-03 -8.574592e-03 1.475920e-03 1.617848e-02 -1.068825e-03 -5.393172e-03 -2.952118e-03 -5.702320e-03 1.178150e-02 8.139453e-03 -8.806816e-03 -7.232754e-03 -1.342955e-03 1.495802e-02 1.480171e-02 -1.440037e-03 -8.012439e-03 -8.037294e-03 -5.961398e-04 2.388257e-02 1.085073e-02 -7.900937e-03 -4.959841e-03 -8.381554e-03 -2.719380e-04 3.664607e-02 4.713625e-03 -1.138240e-02 -2.570059e-03 -8.536967e-03 -1.408650e-04 3.330373e-02 -8.752219e-03 -1.306759e-02 -1.226816e-03 -8.618754e-03 -8.259378e-05 1.913362e-02 -1.344469e-02 -1.386444e-02 -5.862992e-04 -8.657453e-03 1.353151e-03 6.398218e-03 -1.027042e-02 -1.426948e-02 -3.160720e-04 -5.867669e-03 1.166617e-02 -1.430664e-03 -5.884322e-03 -1.452632e-02 -2.063944e-04 1.471381e-02 1.330690e-02 -5.398355e-03 -2.860704e-03 -1.471230e-02 -1.490811e-04 2.074177e-02 4.807502e-04 -7.182278e-03 -1.250902e-03 -1.485471e-02 -1.252283e-04 1.565829e-02 3.044583e-03 -7.931387e-03 -5.047105e-04 -1.499314e-02 1.293017e-03 2.682460e-02 5.459236e-03 -8.223356e-03 -1.844428e-04 -1.229922e-02 1.160558e-02 2.654695e-02 -5.745102e-03 -8.332098e-03 -5.883484e-05 8.190471e-03 1.462989e-02 1.530517e-02 -1.111086e-02 -8.372914e-03 -5.785247e-06 1.695573e-02 1.069051e-02 4.319634e-03 -8.990959e-03 -8.375579e-03 1.131926e-05 2.957639e-02 4.565340e-03 -2.659244e-03 -5.309969e-03 -8.382188e-03 7.342541e-06 2.610529e-02 -7.473105e-03 -6.268131e-03 -2.657494e-03 -8.392811e-03 3.610984e-06 1.464522e-02 -1.843251e-03 -7.934471e-03 -1.208554e-03 -8.406888e-03 1.413037e-03 2.242112e-02 2.951734e-03 -8.641976e-03 -5.143444e-04 -5.598668e-03 1.171720e-02 2.055964e-02 -6.899705e-03 -8.918409e-03 -2.268980e-04 1.499719e-02 1.332442e-02 8.630597e-03 -1.159875e-02 -9.050440e-03 -1.216915e-04 2.103166e-02 -9.290913e-04 -2.642196e-03 -7.770835e-03 -9.116183e-03 -6.913470e-05 1.312396e-02 -8.667533e-03 -6.927917e-03 6.340429e-03 -9.142962e-03 -5.003662e-05 3.677013e-03 -7.875022e-03 1.001706e-02 1.207518e-02 -9.170452e-03 -5.067856e-05 -2.651086e-03 -4.824314e-03 1.721965e-02 9.608386e-03 -9.198457e-03 -5.145853e-05 -6.000245e-03 -2.436315e-03 2.923902e-02 4.181558e-03 -9.227449e-03 -5.410922e-05 -7.554266e-03 -1.094972e-03 2.560128e-02 -8.979454e-03 -9.260694e-03 -5.762568e-05 -8.221630e-03 -4.564528e-04 1.129459e-02 -1.354868e-02 -9.296648e-03 1.353038e-03 -8.498996e-03 -1.870748e-04 -1.497473e-03 -1.030320e-02 -6.508492e-03 1.166275e-02 -8.627763e-03 -7.850247e-05 -9.327390e-03 -4.466324e-03 1.406913e-02 1.330049e-02 -8.688058e-03 -2.396369e-05 -1.045438e-02 8.878719e-03 2.008950e-02 -9.422289e-04 -8.707782e-03 1.407479e-03 8.404539e-03 1.210405e-02 1.216902e-02 -8.691290e-03 -5.905203e-03 1.171067e-02 1.374914e-02 -1.391045e-03 2.707921e-03 -7.913088e-03 1.468306e-02 1.331756e-02 5.623785e-03 -8.793361e-03 -3.636270e-03 -4.872890e-03 2.071123e-02 -9.351686e-04 -3.845262e-03 -6.449045e-03 -7.003632e-03 -2.492892e-03 1.279750e-02 -8.672832e-03 -7.292485e-03 6.972463e-03 -8.580747e-03 -1.157315e-03 3.345795e-03 -7.880463e-03 1.007766e-02 1.099448e-02 -9.273639e-03 -5.213598e-04 -2.988618e-03 -4.832232e-03 1.469374e-02 -4.939239e-04 -9.577388e-03 -2.559262e-04 -6.347492e-03 -2.447260e-03 9.092197e-03 2.725033e-03 -9.738774e-03 -1.517293e-04 -7.913887e-03 3.068883e-04 2.013998e-02 5.400879e-03 -9.833790e-03 -9.836023e-05 -5.765363e-03 1.125145e-02 1.990238e-02 -5.684622e-03 -9.888238e-03 -7.775432e-05 1.455860e-02 1.312479e-02 8.778891e-03 -1.096822e-02 -9.941928e-03 -7.722391e-05 2.046545e-02 -1.023600e-03 -2.038247e-03 -8.802486e-03 -9.995203e-03 -7.700878e-05 1.249603e-02 -8.710793e-03 -8.842256e-03 -5.105018e-03 -1.004835e-02 1.336931e-03 3.023925e-03 -7.903360e-03 -1.227201e-02 -2.442735e-03 -7.273633e-03 1.164942e-02 -3.336061e-03 -4.858099e-03 -1.375525e-02 -9.882683e-04 1.329236e-02 1.328947e-02 -6.721295e-03 -2.472980e-03 -1.427771e-02 1.124431e-03 1.930395e-02 -9.518687e-04 -8.312985e-03 -1.132959e-03 -1.153614e-02 1.172628e-02 1.137462e-02 -8.703324e-03 -9.019090e-03 -4.956917e-04 9.148148e-03 1.344420e-02 1.899974e-03 -7.928439e-03 -9.336650e-03 -2.282253e-04 1.534849e-02 -7.490550e-04 -4.459669e-03 -4.888180e-03 -9.508004e-03 1.289897e-03 7.653146e-03 -8.460264e-03 -7.840429e-03 -2.503903e-03 -6.789418e-03 1.164642e-02 -1.577467e-03 -7.661375e-03 -9.424410e-03 -1.162809e-03 1.375383e-02 1.327192e-02 -7.685267e-03 -4.603652e-03 -1.011965e-02 8.905910e-04 1.973521e-02 -9.829305e-04 -1.080721e-02 -2.209486e-03 -7.595371e-03 1.147217e-02 1.177218e-02 -8.724519e-03 -1.213014e-02 -8.667671e-04 1.286723e-02 1.321880e-02 2.265814e-03 -7.936144e-03 -1.256811e-02 -2.292016e-04 1.884177e-02 -9.686443e-04 -4.125919e-03 -4.889367e-03 -1.261640e-02 1.453690e-03 1.091692e-02 -8.695923e-03 -7.542396e-03 -2.504780e-03 -9.688637e-03 1.187068e-02 1.453556e-03 -7.915317e-03 -9.166913e-03 -1.166418e-03 1.110030e-02 1.353030e-02 -4.890192e-03 -3.458085e-03 -9.907597e-03 -5.308085e-04 1.737037e-02 -7.031265e-04 -5.425751e-03 9.239379e-03 -1.026132e-02 -2.657178e-04 9.699396e-03 -8.438851e-03 1.362656e-02 1.221893e-02 -1.047203e-02 -1.614983e-04 4.895076e-04 -6.231387e-03 1.901004e-02 -1.384488e-03 -1.061743e-02 -1.099880e-04 -2.776750e-03 7.126510e-03 1.084420e-02 -8.863969e-03 -1.072520e-02 -9.227221e-05 1.472553e-02 1.112040e-02 1.285883e-03 -6.562745e-03 -1.083524e-02 -9.439573e-05 1.946647e-02 -1.788192e-03 -2.257414e-03 6.844804e-03 -1.094732e-02 -9.628211e-05 1.115682e-02 -8.883951e-03 1.500682e-02 1.229921e-02 -1.106119e-02 -9.790814e-05 1.697023e-03 -7.823414e-03 2.233605e-02 9.706996e-03 -1.117659e-02 -9.925061e-05 -4.502035e-03 -4.668141e-03 3.440044e-02 4.233978e-03 -1.129321e-02 -1.005359e-04 -7.658167e-03 -2.228903e-03 3.075827e-02 -8.958928e-03 -1.141124e-02 1.310554e-03 -8.982250e-03 -8.701440e-04 1.644450e-02 -1.355487e-02 -8.705755e-03 1.161574e-02 -9.422331e-03 -2.343640e-04 3.640541e-03 -1.033520e-02 1.178813e-02 1.322369e-02 -9.475342e-03 3.063550e-05 -4.206968e-03 -5.932471e-03 1.772128e-02 -1.029084e-03 -9.385483e-03 1.344160e-04 -8.188973e-03 -2.912270e-03 9.713014e-03 -8.766613e-03 -9.230834e-03 1.599212e-03 -9.987710e-03 -1.306872e-03 1.665142e-04 -7.972914e-03 -6.211212e-03 1.192516e-02 -1.075514e-02 -5.633521e-04 -6.259827e-03 -4.920695e-03 1.459868e-02 1.352815e-02 -1.106522e-02 -2.419769e-04 -9.705575e-03 -2.530609e-03 2.084736e-02 -7.295545e-04 -1.118925e-02 -1.148886e-04 -1.135372e-02 2.287077e-04 1.314878e-02 -8.472249e-03 -1.124489e-02 -6.045204e-05 -9.281780e-03 1.118018e-02 3.903534e-03 -7.684518e-03 -1.125993e-02 -3.992345e-05 1.097422e-02 1.306253e-02 -2.229845e-03 -4.638713e-03 -1.127449e-02 -3.949404e-05 1.682246e-02 -1.078790e-03 -5.390279e-03 -2.255581e-03 -1.128863e-02 -3.938714e-05 8.799177e-03 -7.348174e-03 -6.760899e-03 -9.191010e-04 -1.130294e-02 -4.121291e-05 2.104053e-03 3.772779e-03 -7.249894e-03 -2.857326e-04 -1.132071e-02 -4.343021e-05 1.631883e-02 8.435374e-03 -7.354319e-03 -2.320420e-05 -1.133942e-02 -4.214218e-05 1.895705e-02 -3.424817e-03 -7.318373e-03 7.815033e-05 -1.135458e-02 -4.136148e-05 9.452964e-03 -9.817666e-03 -7.220050e-03 1.264924e-04 -1.137169e-02 1.370267e-03 -6.999660e-04 -8.382804e-03 -7.087310e-03 1.407244e-04 -8.563553e-03 1.168061e-02 -7.340153e-03 -5.059658e-03 -6.960375e-03 1.350205e-04 1.203410e-02 1.331764e-02 -1.085060e-02 -2.559332e-03 -6.838903e-03 1.308227e-04 1.807301e-02 -9.267242e-04 -1.249215e-02 2.560733e-04 -6.720229e-03 1.268150e-04 1.016924e-02 -8.678752e-03 -1.037273e-02 1.122947e-02 -6.606640e-03 1.218868e-04 7.207136e-04 -7.903247e-03 9.933740e-03 1.311449e-02 -6.497697e-03 1.158094e-04 -5.612183e-03 -4.862697e-03 1.583483e-02 3.904564e-04 -6.396142e-03 1.077968e-04 -8.966300e-03 -2.478837e-03 1.069663e-02 3.019080e-03 -6.303112e-03 1.008734e-04 -1.052442e-02 -1.138719e-03 2.185202e-02 6.859428e-03 -6.215301e-03 9.480488e-05 -1.119503e-02 -5.008016e-04 2.440091e-02 5.974782e-03 -6.134309e-03 8.720950e-05 -1.147591e-02 -2.351059e-04 3.378847e-02 2.244195e-03 -6.061599e-03 1.493011e-03 -1.161453e-02 -1.308895e-04 2.888157e-02 -9.867007e-03 -3.168925e-03 1.179327e-02 -1.168669e-02 -7.725695e-05 1.404391e-02 -1.391140e-02 1.750752e-02 1.339144e-02 -1.171790e-02 -5.617108e-05 1.039707e-03 -1.045865e-02 2.361946e-02 -8.680329e-04 -1.174781e-02 1.358835e-03 -6.899902e-03 -5.954221e-03 1.578373e-02 -8.609369e-03 -8.948946e-03 1.167184e-02 -1.089980e-02 -2.867522e-03 6.404313e-03 -7.819892e-03 1.164126e-02 1.472436e-02 -1.266831e-02 -1.233365e-03 1.371357e-04 -4.774716e-03 2.050189e-02 1.079373e-02 -1.340090e-02 -4.836047e-04 -3.158881e-03 -2.393457e-03 3.321221e-02 4.683189e-03 -1.367031e-02 -1.551887e-04 -4.667196e-03 -1.060127e-03 2.982503e-02 -8.779245e-03 -1.374623e-02 1.393379e-03 -5.298224e-03 -4.292627e-04 1.561761e-02 -1.348518e-02 -1.091855e-02 1.176343e-02 -5.545512e-03 -1.646069e-04 2.848419e-03 -1.032571e-02 9.747260e-03 1.340122e-02 -5.647503e-03 -5.912117e-05 -5.013210e-03 -5.949094e-03 1.586238e-02 -8.418563e-04 -5.683932e-03 -8.626776e-06 -9.012647e-03 -1.516057e-03 8.045537e-03 -8.572624e-03 -5.684975e-03 6.617457e-06 -7.999793e-03 1.040152e-02 -1.305364e-03 -7.776252e-03 -5.690917e-03 2.299648e-06 1.183378e-02 1.278243e-02 -7.534824e-03 -4.722827e-03 -5.700601e-03 3.122212e-07 1.756678e-02 2.750644e-04 -1.078245e-02 -2.331729e-03 -5.710529e-03 -9.691286e-07 1.237357e-02 2.966390e-03 -1.223158e-02 -9.883416e-04 -5.722787e-03 -3.983075e-06 2.350013e-02 5.438408e-03 -1.279326e-02 1.065803e-03 -5.738756e-03 -6.152584e-06 2.322756e-02 -5.742769e-03 -1.013442e-02 1.164630e-02 -5.755372e-03 -7.610901e-06 1.199234e-02 -1.110884e-02 1.046641e-02 1.337063e-02 -5.774276e-03 -1.056109e-05 1.011243e-03 -8.993069e-03 1.658574e-02 -8.199825e-04 -5.796812e-03 -1.387551e-05 -5.969336e-03 -5.317036e-03 8.808853e-03 -7.121388e-03 -5.822370e-03 -1.629838e-05 -9.583696e-03 -2.667207e-03 2.320908e-03 3.977976e-03 -5.849781e-03 -1.765129e-05 -1.125702e-02 -1.220594e-03 1.673903e-02 8.637167e-03 -5.878075e-03 -1.818508e-05 -1.197464e-02 -5.269178e-04 1.957773e-02 -3.225467e-03 -5.906584e-03 -1.815181e-05 -1.225910e-02 1.176164e-03 1.027221e-02 -9.622072e-03 -5.934843e-03 -1.748421e-05 -9.569953e-03 1.159380e-02 3.123733e-04 -8.192203e-03 -5.962049e-03 -1.514431e-05 1.097520e-02 1.328305e-02 -6.139122e-03 -3.458966e-03 -5.985659e-03 -1.434285e-05 1.699967e-02 -9.428672e-04 -6.636189e-03 9.346404e-03 -6.011288e-03 -1.629490e-05 9.080308e-03 -8.694585e-03 1.252277e-02 1.235447e-02 -6.038830e-03 -1.695902e-05 -3.820096e-04 -7.919962e-03 1.805282e-02 -1.235350e-03 -6.065818e-03 -1.574847e-05 -6.732230e-03 -4.883096e-03 1.003532e-02 -8.703809e-03 -6.090968e-03 1.400205e-03 -1.010746e-02 -2.501930e-03 6.238485e-04 -7.806334e-03 -3.286076e-03 1.171019e-02 -1.168826e-02 -1.161937e-03 -5.604101e-03 -4.704799e-03 1.731185e-02 1.331754e-02 -1.238018e-02 -5.254266e-04 -8.816073e-03 -2.299647e-03 2.335428e-02 -9.330575e-04 -1.268650e-02 -2.624623e-04 -1.023556e-02 -9.622977e-04 1.545772e-02 -7.253067e-03 -1.285186e-02 -1.596120e-04 -1.077365e-02 -3.283756e-04 8.851379e-03 3.852694e-03 -1.295213e-02 -1.080737e-04 -1.092560e-02 -6.474724e-05 2.315901e-02 8.513488e-03 -1.301419e-02 -8.967430e-05 -1.093652e-02 3.851815e-05 2.589013e-02 -1.935174e-03 -1.307753e-02 -8.991504e-05 -1.088195e-02 9.090243e-05 1.930346e-02 1.978487e-03 -1.313995e-02 -9.201302e-05 -1.078806e-02 1.099984e-04 2.985460e-02 5.017264e-03 -1.320735e-02 -9.713444e-05 -1.069524e-02 1.084555e-04 2.935719e-02 -5.912815e-03 -1.327987e-02 1.312752e-03 -1.060439e-02 1.060686e-04 1.804761e-02 -1.115027e-02 -1.052735e-02 1.162295e-02 -1.051630e-02 1.030119e-04 7.062750e-03 -8.961144e-03 1.001475e-02 1.467531e-02 -1.043151e-02 9.949416e-05 1.192421e-04 -5.253349e-03 1.882879e-02 1.074513e-02 -1.035040e-02 9.565434e-05 -3.457729e-03 -2.598668e-03 3.149200e-02 4.634063e-03 -1.027325e-02 1.505478e-03 -5.095843e-03 -1.150432e-03 2.805730e-02 -8.831495e-03 -7.372448e-03 1.180965e-02 -5.778159e-03 -4.556066e-04 1.379661e-02 -1.354236e-02 1.331471e-02 1.482959e-02 -6.027379e-03 -1.644797e-04 9.701665e-04 -1.038381e-02 2.226725e-02 1.088177e-02 -6.127718e-03 -5.486369e-05 -6.946476e-03 -6.005420e-03 3.506391e-02 4.747793e-03 -6.157817e-03 1.109194e-06 -1.099949e-02 -2.985642e-03 3.175584e-02 -8.720403e-03 -6.146243e-03 2.246196e-05 -1.286805e-02 -1.378924e-03 1.761421e-02 -1.341794e-02 -6.133624e-03 2.353856e-05 -1.370370e-02 -6.340374e-04 4.902963e-03 -1.024528e-02 -6.119883e-03 2.563014e-05 -1.408074e-02 -3.115752e-04 -2.900637e-03 -5.858887e-03 -6.103065e-03 2.562873e-05 -1.427067e-02 -1.834702e-04 -6.843583e-03 -2.837403e-03 -6.089308e-03 2.237265e-05 -1.439109e-02 -1.278448e-04 -8.606478e-03 -1.233208e-03 -6.078987e-03 1.993966e-05 -1.446952e-02 -1.058077e-04 -9.342044e-03 -4.934533e-04 -6.070085e-03 1.894659e-05 -1.454571e-02 -1.034863e-04 -9.625852e-03 -1.779069e-04 -6.061741e-03 1.838108e-05 -1.461933e-02 1.313079e-03 -9.730488e-03 -5.770365e-05 -6.053961e-03 1.767408e-05 -1.186223e-02 1.162831e-02 -9.773949e-03 -1.005218e-05 -6.047021e-03 1.643320e-05 8.688812e-03 1.326975e-02 -9.783307e-03 5.534327e-06 -6.041715e-03 1.306213e-05 1.468557e-02 4.440539e-04 -9.795600e-03 1.376703e-06 -6.041512e-03 8.914606e-06 9.572629e-03 3.011032e-03 -9.813281e-03 -5.064842e-06 -6.044501e-03 6.782604e-06 2.071410e-02 6.845958e-03 -9.838467e-03 -1.253521e-05 -6.048565e-03 5.571111e-06 2.324758e-02 5.961030e-03 -9.871103e-03 -1.957410e-05 -6.053981e-03 2.340563e-06 3.261386e-02 2.239718e-03 -9.910386e-03 -2.585485e-05 -6.064512e-03 -1.981453e-06 2.768504e-02 -8.464699e-03 -9.955605e-03 -3.153878e-05 -6.078584e-03 -4.556906e-06 1.565285e-02 -2.217939e-03 -1.000628e-02 -3.660275e-05 -6.094282e-03 -6.350310e-06 2.324284e-02 2.853386e-03 -1.006166e-02 -3.978875e-05 -6.111958e-03 -1.020200e-05 2.133734e-02 -6.898084e-03 -1.011874e-02 1.371211e-03 -6.135379e-03 -1.513387e-05 9.428393e-03 -1.156723e-02 -7.352149e-03 1.167449e-02 -6.162945e-03 -1.828788e-05 -1.790359e-03 -9.155705e-03 1.319892e-02 1.327865e-02 -6.192704e-03 -2.037174e-05 -8.852670e-03 -3.949663e-03 1.918562e-02 -9.787828e-04 -6.224471e-03 -2.261142e-05 -9.644492e-03 9.073968e-03 1.122525e-02 -8.721305e-03 -6.258745e-03 -2.533888e-05 9.342125e-03 1.218510e-02 1.722340e-03 -7.933193e-03 -6.296004e-03 1.385681e-03 1.473266e-02 -1.359426e-03 -4.667260e-03 -4.890069e-03 -3.508280e-03 1.169187e-02 6.618884e-03 -8.813840e-03 -8.087585e-03 -2.510138e-03 1.706993e-02 1.329530e-02 -2.882355e-03 -7.921159e-03 -9.719282e-03 -1.173425e-03 2.308733e-02 -9.617642e-04 -9.190791e-03 -4.818301e-03 -1.046712e-02 8.767583e-04 1.515809e-02 -8.703582e-03 -1.247305e-02 -2.406116e-03 -7.998878e-03 1.145169e-02 5.683064e-03 -7.914735e-03 -1.395022e-02 -1.059360e-03 1.240457e-02 1.316788e-02 -6.789915e-04 -3.453663e-03 -1.453586e-02 -4.156178e-04 1.831689e-02 -1.030569e-03 -1.238929e-03 9.238772e-03 -1.472431e-02 -1.411116e-04 1.032683e-02 -8.750139e-03 1.778326e-02 1.218210e-02 -1.476055e-02 1.383831e-03 7.954251e-04 -7.959356e-03 2.313107e-02 -1.435444e-03 -1.189904e-02 1.175324e-02 -5.618535e-03 -4.908181e-03 1.492412e-02 -8.907193e-03 8.797525e-03 1.341714e-02 -9.051269e-03 -2.518763e-03 5.319325e-03 -8.009816e-03 1.494333e-02 5.953639e-04 -1.068836e-02 -1.177690e-03 -1.103531e-03 -4.909453e-03 9.983421e-03 3.166461e-03 -1.143989e-02 -5.402234e-04 -4.514719e-03 -2.506477e-03 2.128184e-02 5.592573e-03 -1.180248e-02 -2.726818e-04 -6.135406e-03 -1.167966e-03 2.115041e-02 -5.600356e-03 -1.201913e-02 1.248531e-03 -6.871371e-03 -5.310661e-04 1.006325e-02 -1.095997e-02 -9.339418e-03 1.161040e-02 -7.219073e-03 -2.647809e-04 -7.640958e-04 -8.835359e-03 1.116920e-02 1.324042e-02 -7.422853e-03 -1.598196e-04 -7.579278e-03 -5.149570e-03 1.712072e-02 -1.008601e-03 -7.560860e-03 -1.079504e-04 -1.102072e-02 -1.080141e-03 9.134714e-03 -8.741888e-03 -7.661054e-03 -9.012658e-05 -9.689809e-03 1.068208e-02 -3.849247e-04 -7.946743e-03 -7.763524e-03 -9.229655e-05 1.039040e-02 1.301614e-02 -6.786102e-03 -3.482310e-03 -7.868172e-03 -9.434517e-05 1.634721e-02 -9.346505e-04 -7.380545e-03 9.215765e-03 -7.974855e-03 -9.623573e-05 8.513319e-03 -8.572260e-03 1.161409e-02 1.217301e-02 -8.083402e-03 -9.794691e-05 -7.886217e-04 -7.736638e-03 1.694504e-02 -1.992143e-05 -8.193628e-03 -9.946066e-05 -6.931717e-03 -4.672997e-03 1.155685e-02 2.819688e-03 -8.305325e-03 -1.007594e-04 -1.009346e-02 -2.285377e-03 2.256393e-02 5.328695e-03 -8.418272e-03 1.312081e-03 -1.145467e-02 -9.391923e-04 2.220008e-02 -5.815926e-03 -5.704413e-03 1.161896e-02 -1.192118e-02 -2.967633e-04 1.091770e-02 -1.114167e-02 1.479940e-02 1.322340e-02 -1.199655e-02 1.385729e-03 -1.041067e-04 -9.001591e-03 2.074489e-02 -1.030126e-03 -9.097919e-03 1.180611e-02 -7.112646e-03 -5.305835e-03 1.274825e-02 -8.768828e-03 1.166138e-02 1.350069e-02 -1.074696e-02 -2.645419e-03 3.207454e-03 -7.977455e-03 1.790552e-02 -7.198542e-04 -1.243676e-02 -1.193459e-03 -3.217021e-03 -4.925703e-03 1.021061e-02 -7.053143e-03 -1.316812e-02 -4.968627e-04 -6.661434e-03 -2.533639e-03 3.804356e-03 4.037382e-03 -1.346514e-02 1.209709e-03 -8.305602e-03 -1.188179e-03 1.830396e-02 8.715362e-03 -1.078354e-02 1.163026e-02 -9.060918e-03 -5.501664e-04 2.122318e-02 -3.144461e-03 9.762085e-03 1.471418e-02 -9.429898e-03 -2.843542e-04 1.199700e-02 -9.553236e-03 1.862331e-02 1.079663e-02 -9.654000e-03 -1.753056e-04 2.118074e-03 -8.136250e-03 3.133891e-02 4.671912e-03 -9.805131e-03 -1.168666e-04 -4.253366e-03 -3.413673e-03 2.795800e-02 -8.785365e-03 -9.912522e-03 -9.414048e-05 -4.673748e-03 9.387463e-03 1.375711e-02 -1.346936e-02 -1.001832e-02 -9.271463e-05 1.455797e-02 1.241720e-02 1.000062e-03 -1.028434e-02 -1.012298e-02 -9.162329e-05 2.015663e-02 -1.170536e-03 -6.838096e-03 -5.887188e-03 -1.022671e-02 1.322074e-03 1.220110e-02 -8.654686e-03 -1.080534e-02 -2.855525e-03 -7.504084e-03 1.162990e-02 2.848192e-03 -7.770666e-03 -1.258245e-02 -1.241193e-03 1.301085e-02 1.465197e-02 -3.319633e-03 -4.677214e-03 -1.332206e-02 -4.910183e-04 2.180038e-02 1.071181e-02 -6.472674e-03 -2.279017e-03 -1.359924e-02 -1.645810e-04 3.444473e-02 4.585509e-03 -7.837477e-03 -9.468029e-04 -1.368613e-02 -3.311017e-05 3.099568e-02 -8.870416e-03 -8.323220e-03 -3.165723e-04 -1.370042e-02 1.440760e-03 1.672436e-02 -1.355295e-02 -8.426541e-03 -5.601994e-05 -1.083957e-02 1.177527e-02 3.894416e-03 -1.036615e-02 -8.390963e-03 4.412136e-05 9.816797e-03 1.480465e-02 -4.017535e-03 -5.968884e-03 -8.294075e-03 9.160538e-05 1.874825e-02 1.086539e-02 -8.061721e-03 -2.938076e-03 -8.163732e-03 1.050535e-04 3.153121e-02 4.738519e-03 -9.916543e-03 -1.322822e-03 -8.040223e-03 9.821900e-05 2.821626e-02 -8.721030e-03 -1.073228e-02 8.430616e-04 -7.923809e-03 9.111039e-05 1.407823e-02 -1.340884e-02 -8.256237e-03 1.147711e-02 -7.814761e-03 8.373066e-05 1.379542e-03 -1.022819e-02 1.219886e-02 1.321238e-02 -7.713336e-03 7.609973e-05 -6.404467e-03 -4.420999e-03 1.816814e-02 -9.814662e-04 -7.619763e-03 6.824652e-05 -7.493237e-03 8.915890e-03 1.024217e-02 -8.691841e-03 -7.534241e-03 5.995566e-05 1.139591e-02 1.213794e-02 7.819029e-04 -7.892149e-03 -7.457430e-03 4.965223e-05 1.676206e-02 -1.365847e-03 -5.555180e-03 -4.835400e-03 -7.392676e-03 3.890492e-05 8.646717e-03 -8.780601e-03 -8.908972e-03 -1.028202e-03 -7.337496e-03 3.188658e-05 -8.212885e-04 -7.860830e-03 -7.635379e-03 1.062567e-02 -7.286895e-03 2.621833e-05 -7.102523e-03 -4.757511e-03 1.231998e-02 1.287347e-02 -7.243157e-03 1.831067e-05 -1.036749e-02 -2.351008e-03 1.811131e-02 -1.107730e-03 -7.208463e-03 1.048151e-05 -1.183759e-02 -1.008718e-03 1.011069e-02 -7.319960e-03 -7.180457e-03 2.986300e-06 -1.241883e-02 -3.682748e-04 3.468693e-03 3.838734e-03 -7.160812e-03 -4.803587e-06 -1.260838e-02 -1.004214e-04 1.777809e-02 8.518052e-03 -7.148428e-03 -1.317046e-05 -1.265401e-02 5.381563e-06 2.051060e-02 -3.343955e-03 -7.145542e-03 -2.304728e-05 -1.263198e-02 6.010348e-05 1.109902e-02 -8.322985e-03 -7.152917e-03 -3.150926e-05 -1.256816e-02 8.191725e-05 3.863026e-03 3.416811e-03 -7.166941e-03 -3.883196e-05 -1.250246e-02 8.352077e-05 1.792301e-02 8.339894e-03 -7.188931e-03 -4.740947e-05 -1.243540e-02 1.498762e-03 2.054878e-02 -3.417184e-03 -7.220064e-03 -5.622519e-05 -9.539179e-03 1.180976e-02 1.109752e-02 -9.756533e-03 -7.259620e-03 -6.406363e-05 1.115154e-02 1.342264e-02 1.034105e-03 -8.303009e-03 -7.306346e-03 -7.052228e-05 1.728540e-02 -8.289287e-04 -5.521268e-03 -4.983429e-03 -7.358722e-03 -7.445370e-05 9.476491e-03 -7.155117e-03 -8.952791e-03 -2.488571e-03 -7.413201e-03 -7.763572e-05 2.953489e-03 3.943479e-03 -1.052225e-02 -1.093678e-03 -7.471826e-03 -8.270566e-05 1.733803e-02 8.603281e-03 -1.116573e-02 -4.346984e-04 -7.536321e-03 -8.841462e-05 2.014289e-02 -3.260446e-03 -1.141795e-02 -1.668494e-04 -7.606229e-03 -9.355054e-05 1.080159e-02 -9.657448e-03 -1.152601e-02 -6.285528e-05 -7.680849e-03 1.314512e-03 8.070760e-04 -8.226962e-03 -1.157036e-02 -1.321820e-05 -4.934474e-03 1.162108e-02 -5.678983e-03 -4.906916e-03 -1.157919e-02 2.466443e-06 1.559827e-02 1.325463e-02 -9.037122e-03 -2.410144e-03 -1.159218e-02 -1.283309e-06 2.156858e-02 4.221441e-04 -1.053156e-02 -1.016726e-03 -1.160853e-02 -3.182989e-06 1.642380e-02 2.984759e-03 -1.110372e-02 -3.617359e-04 -1.162534e-02 -5.216524e-06 2.753016e-02 5.402778e-03 -1.128851e-02 -9.481801e-05 -1.164577e-02 -1.160059e-05 2.719806e-02 -5.796161e-03 -1.132694e-02 1.314168e-05 -1.167537e-02 1.394167e-03 1.590724e-02 -1.115931e-02 -1.129583e-02 6.875786e-05 -8.884298e-03 1.169596e-02 4.872593e-03 -9.040628e-03 -1.122301e-02 9.029523e-05 1.169279e-02 1.329517e-02 -2.157676e-03 -5.360262e-03 -1.114879e-02 9.160015e-05 1.770510e-02 -9.636657e-04 -5.816812e-03 -2.707444e-03 -1.107332e-02 1.506701e-03 9.771182e-03 -8.703990e-03 -7.533751e-03 -1.260702e-03 -8.168848e-03 1.181652e-02 2.940471e-04 -7.913021e-03 -8.295794e-03 -5.686559e-04 1.252794e-02 1.343000e-02 -6.068447e-03 -4.866284e-03 -8.627040e-03 -2.796765e-04 1.867123e-02 -8.183674e-04 -9.459165e-03 -2.483337e-03 -8.810428e-03 -1.704340e-04 1.087480e-02 -7.142627e-03 -1.105953e-02 -1.145047e-03 -8.922803e-03 -1.128921e-04 4.365104e-03 3.956160e-03 -1.177544e-02 -5.084167e-04 -8.990871e-03 -8.709980e-05 1.876252e-02 8.613936e-03 -1.210333e-02 -2.423167e-04 -9.051519e-03 -8.090896e-05 2.157663e-02 -3.252029e-03 -1.228741e-02 -1.373691e-04 -9.107077e-03 1.337027e-03 1.224373e-02 -9.647582e-03 -1.240561e-02 -8.529014e-05 -6.331736e-03 1.165237e-02 2.261378e-03 -6.802410e-03 -1.248566e-02 -6.700301e-05 1.423756e-02 1.329411e-02 -1.386904e-03 6.822421e-03 -1.256738e-02 -6.868529e-05 2.025314e-02 -9.447112e-04 1.587832e-02 1.092838e-02 -1.265089e-02 -7.181806e-05 1.233215e-02 -7.275009e-03 2.045185e-02 -1.925629e-03 -1.273896e-02 -7.482023e-05 5.703775e-03 3.821232e-03 1.201168e-02 -9.007752e-03 -1.282857e-02 -7.353840e-05 1.998920e-02 8.506179e-03 2.416124e-03 -7.952498e-03 -1.291418e-02 1.343528e-03 2.270069e-02 -3.348086e-03 -3.919041e-03 -4.797770e-03 -1.016975e-02 1.165242e-02 1.327189e-02 -9.750538e-03 -7.208774e-03 -2.358197e-03 1.036547e-02 1.325757e-02 3.198298e-03 -8.326717e-03 -8.666677e-03 -9.994147e-04 1.634298e-02 -9.947767e-04 -3.361682e-03 -3.598926e-03 -9.239683e-03 -3.635315e-04 8.380132e-03 -8.729778e-03 -3.965905e-03 9.207242e-03 -9.426148e-03 -9.792628e-05 -1.121198e-03 -6.519930e-03 1.508772e-02 1.224452e-02 -9.468050e-03 8.719379e-06 -4.674885e-03 6.840174e-03 2.051799e-02 -1.334530e-03 -9.441249e-03 6.471026e-05 1.254005e-02 1.083439e-02 1.240211e-02 -8.811817e-03 -9.371154e-03 1.500274e-03 1.699390e-02 -2.075282e-03 2.894868e-03 -7.923095e-03 -6.473185e-03 1.180860e-02 8.394421e-03 -9.170413e-03 -3.423582e-03 -4.824213e-03 1.421523e-02 1.341720e-02 -1.351531e-03 -6.689457e-03 -6.719778e-03 -2.416669e-03 2.034225e-02 -8.389834e-04 -4.999905e-03 6.783152e-03 -8.216210e-03 -1.071106e-03 1.252183e-02 -8.585232e-03 1.219531e-02 1.225109e-02 -8.818134e-03 -4.270515e-04 3.151859e-03 -7.801625e-03 1.950189e-02 9.673780e-03 -9.025192e-03 -1.556347e-04 -3.106726e-03 -4.756707e-03 3.155059e-02 4.187067e-03 -9.083847e-03 -4.634006e-05 -6.390445e-03 -2.372266e-03 2.789711e-02 -8.996503e-03 -9.072193e-03 1.423967e-03 -7.882032e-03 -1.034015e-03 1.357461e-02 -1.356679e-02 -6.190257e-03 1.175726e-02 -8.490104e-03 -3.990873e-04 7.646628e-04 -8.909750e-03 1.448192e-02 1.339607e-02 -8.712185e-03 -1.352899e-04 -4.257957e-03 5.815065e-03 2.059801e-02 -8.442511e-04 -8.792789e-03 -3.288553e-05 1.237616e-02 1.044844e-02 1.277670e-02 -8.589321e-03 -8.810108e-03 1.658570e-05 1.663874e-02 -7.780438e-04 3.419093e-03 -7.806716e-03 -8.791780e-03 3.319990e-05 1.082461e-02 2.543612e-03 -2.817341e-03 -4.762067e-03 -8.775860e-03 2.797899e-05 2.172406e-02 5.270058e-03 -6.072536e-03 -2.376120e-03 -8.767964e-03 2.117901e-05 2.137490e-02 -5.798865e-03 -7.530232e-03 -1.034404e-03 -8.765640e-03 1.533429e-05 1.013612e-02 -9.673855e-03 -8.098930e-03 -3.946039e-04 -8.769432e-03 8.568389e-06 2.024522e-03 2.792619e-03 -8.275831e-03 -1.251237e-04 -8.780641e-03 1.187147e-06 1.570969e-02 8.091667e-03 -8.305197e-03 -1.663764e-05 -8.799203e-03 -5.888376e-06 1.821136e-02 -3.499267e-03 -8.265063e-03 3.890465e-05 -8.824574e-03 -1.224576e-05 8.717440e-03 -9.784889e-03 -8.183429e-03 1.474279e-03 -8.855864e-03 -1.665777e-05 -1.362659e-03 -8.298189e-03 -5.272719e-03 1.178780e-02 -8.890077e-03 -2.084357e-05 -7.894363e-03 -4.957064e-03 1.542983e-02 1.342706e-02 -8.929759e-03 -2.739988e-05 -1.129946e-02 -2.460582e-03 2.157554e-02 -8.151554e-04 -8.977107e-03 1.378858e-03 -1.284197e-02 -1.064162e-03 1.378075e-02 -8.563459e-03 -6.204301e-03 1.168004e-02 -1.345594e-02 -4.016396e-04 4.446238e-03 -7.784253e-03 1.435231e-02 1.328402e-02 -1.367409e-02 -1.291933e-04 -1.770524e-03 -4.744344e-03 2.034486e-02 -9.733241e-04 -1.374340e-02 -2.084163e-05 -5.012144e-03 -2.363473e-03 1.239023e-02 -7.303717e-03 -1.374493e-02 3.278477e-05 -6.460350e-03 -1.026163e-03 5.717425e-03 3.790617e-03 -1.370699e-02 5.355831e-05 -7.024306e-03 -3.897606e-04 1.994763e-02 8.445716e-03 -1.366693e-02 5.436171e-05 -7.198521e-03 -1.213148e-04 2.259319e-02 -3.422996e-03 -1.362734e-02 1.466345e-03 -7.225220e-03 -1.280258e-05 1.308749e-02 -9.825040e-03 -1.076327e-02 1.176917e-02 -7.182354e-03 4.253152e-05 2.923507e-03 -8.399723e-03 9.885151e-03 1.337043e-02 -7.098475e-03 6.302559e-05 -3.737390e-03 -5.086261e-03 1.597464e-02 -8.836870e-04 -7.014797e-03 6.110622e-05 -7.278267e-03 -2.595407e-03 8.121580e-03 -8.622347e-03 -6.934932e-03 5.832550e-05 -8.959487e-03 -1.201713e-03 -1.274956e-03 -7.831853e-03 -6.856984e-03 5.731091e-05 -9.713940e-03 -5.443962e-04 -7.557455e-03 -4.783927e-03 -6.779312e-03 5.563878e-05 -1.008096e-02 -2.798158e-04 -1.086511e-02 -2.398806e-03 -6.704872e-03 5.329600e-05 -1.030646e-02 -1.767478e-04 -1.238103e-02 -1.060546e-03 -6.632042e-03 5.264158e-05 -1.046748e-02 -1.241778e-04 -1.301384e-02 -4.271841e-04 -6.559063e-03 5.287013e-05 -1.058793e-02 -1.044346e-04 -1.326375e-02 -1.651353e-04 -6.485930e-03 1.466686e-03 -1.070953e-02 -1.062493e-04 -1.337274e-02 -6.197787e-05 -3.585473e-03 1.177795e-02 -1.083368e-02 -1.084619e-04 -1.341645e-02 -1.041564e-05 1.710409e-02 1.482683e-02 -1.095977e-02 -1.099699e-04 -1.342236e-02 7.129103e-06 2.605881e-02 1.089335e-02 -1.108702e-02 1.301793e-03 -1.343099e-02 4.225366e-06 3.886260e-02 4.781742e-03 -8.389653e-03 1.160858e-02 -1.344272e-02 1.018810e-06 3.556718e-02 -8.684505e-03 1.209823e-02 1.322046e-02 -1.345778e-02 1.411594e-03 2.144540e-02 -1.339386e-02 1.803109e-02 -1.027800e-03 -1.064838e-02 1.171596e-02 8.760948e-03 -1.023378e-02 1.002586e-02 -8.764660e-03 9.948429e-03 1.331773e-02 9.860074e-04 -5.857248e-03 4.804127e-04 -7.971993e-03 1.598420e-02 4.757727e-04 -2.929039e-03 -2.841609e-03 -5.944956e-03 -4.918430e-03 1.090379e-02 3.045780e-03 -4.664471e-03 -1.239898e-03 -9.386966e-03 -2.525326e-03 2.207394e-02 5.443663e-03 -5.372446e-03 -5.019966e-04 -1.102810e-02 -1.178026e-03 2.180168e-02 -5.761036e-03 -5.630587e-03 -1.872607e-04 -1.177645e-02 -5.332435e-04 1.056213e-02 -9.699272e-03 -5.708548e-03 -6.528715e-05 -1.212845e-02 -2.573267e-04 2.400938e-03 2.740484e-03 -5.722577e-03 -1.679606e-05 -1.232517e-02 -1.420778e-04 1.603185e-02 8.033065e-03 -5.703527e-03 -3.249794e-06 -1.244679e-02 -8.178260e-05 1.847093e-02 -3.565236e-03 -5.690504e-03 -1.006305e-05 -1.252298e-02 1.357671e-03 8.907948e-03 -9.854329e-03 -5.685107e-03 -1.668752e-05 -9.765735e-03 1.167209e-02 -1.241758e-03 -8.368593e-03 -5.685344e-03 -2.156662e-05 1.078849e-02 1.328910e-02 -7.844530e-03 -5.029552e-03 -5.689705e-03 -2.586606e-05 1.679154e-02 4.584504e-04 -1.132348e-02 -2.534189e-03 -5.698532e-03 -3.057671e-05 1.168791e-02 3.033909e-03 -1.293938e-02 -1.138077e-03 -5.712296e-03 -3.454633e-05 2.283896e-02 5.441732e-03 -1.362790e-02 9.352548e-04 -5.729033e-03 -3.913747e-05 2.255736e-02 -5.749536e-03 -1.109790e-02 1.151171e-02 -5.751944e-03 -4.663996e-05 1.132571e-02 -9.674662e-03 9.369292e-03 1.322291e-02 -5.783638e-03 -5.537980e-05 3.187426e-03 2.776168e-03 1.534439e-02 -9.769583e-04 -5.823961e-03 -6.241944e-05 1.685277e-02 8.083024e-03 7.418480e-03 -8.691860e-03 -5.869650e-03 -6.893411e-05 1.933603e-02 -2.092698e-03 -2.045013e-03 -7.894586e-03 -5.922907e-03 -7.757147e-05 1.265135e-02 1.931437e-03 -8.386874e-03 -4.837742e-03 -5.985759e-03 -8.721077e-05 2.317905e-02 6.448293e-03 -1.174371e-02 -2.443873e-03 -6.058162e-03 -9.647973e-05 2.553413e-02 5.853112e-03 -1.330156e-02 -1.099199e-03 -6.139399e-03 -1.051241e-04 3.487281e-02 2.229385e-03 -1.397078e-02 9.553021e-04 -6.228921e-03 -1.135536e-04 2.998579e-02 -9.826016e-03 -1.142036e-02 1.153363e-02 -6.326829e-03 -1.222050e-04 1.521087e-02 -1.384768e-02 9.069910e-03 1.466439e-02 -6.433447e-03 -1.309397e-04 2.272048e-03 -1.039275e-02 1.790456e-02 1.077699e-02 -6.548600e-03 -1.393605e-04 -5.600443e-03 -5.886833e-03 3.062983e-02 4.666811e-03 -6.671818e-03 -1.473265e-04 -9.531939e-03 -2.797592e-03 2.725824e-02 -8.789660e-03 -6.802644e-03 -1.548910e-04 -1.122820e-02 2.540502e-04 1.306683e-02 -1.346992e-02 -6.940716e-03 -1.621331e-04 -9.057387e-03 1.131155e-02 3.189716e-04 -1.028033e-02 -7.085736e-03 -1.690928e-04 1.136260e-02 1.324541e-02 -7.507386e-03 -5.879267e-03 -7.237423e-03 -1.757714e-04 1.741285e-02 -8.756194e-04 -1.146180e-02 -2.844961e-03 -7.395481e-03 -1.821485e-04 9.594242e-03 -8.555505e-03 -1.322393e-02 -1.229118e-03 -7.559590e-03 1.225465e-03 2.802324e-04 -7.739602e-03 -1.394862e-02 -4.794047e-04 -4.902076e-03 1.153014e-02 -5.911911e-03 -4.686062e-03 -1.421213e-02 1.260213e-03 1.553757e-02 1.316212e-02 -9.122392e-03 -2.295540e-03 -1.145787e-02 1.169971e-02 2.141608e-02 -1.084584e-03 -1.053533e-02 -9.523164e-04 9.160668e-03 1.336615e-02 1.334996e-02 -8.837938e-03 -1.106018e-02 -3.145173e-04 1.527068e-02 -8.586897e-04 3.738718e-03 -8.064116e-03 -1.119782e-02 1.365323e-03 7.446310e-03 -8.589085e-03 -2.759548e-03 -5.027221e-03 -8.363062e-03 1.177998e-02 -1.913143e-03 -7.788560e-03 -6.283340e-03 -2.647647e-03 1.233024e-02 1.344265e-02 -8.146846e-03 -4.729980e-03 -8.015049e-03 -1.311079e-03 1.850220e-02 -7.917655e-04 -1.139605e-02 -9.222554e-04 -8.862065e-03 -6.754056e-04 1.073021e-02 -8.532405e-03 -1.001791e-02 1.073204e-02 -9.320647e-03 -4.091624e-04 1.416432e-03 -7.742758e-03 1.004300e-02 1.298269e-02 -9.634212e-03 -3.033423e-04 -4.781598e-03 -4.695438e-03 1.594470e-02 4.192568e-04 -9.880495e-03 -2.515374e-04 -8.004294e-03 -2.311334e-03 1.088528e-02 3.102908e-03 -1.008993e-02 -2.335881e-04 -9.435966e-03 -9.743883e-04 2.214867e-02 5.560281e-03 -1.029988e-02 -2.326372e-04 -9.985592e-03 -3.409733e-04 2.201650e-02 -4.202489e-03 -1.050697e-02 -2.283784e-04 -1.015075e-02 -7.874185e-05 1.375420e-02 7.624499e-04 -1.070796e-02 -2.253191e-04 -1.017601e-02 2.202612e-05 2.354274e-02 4.508580e-03 -1.090851e-02 -2.250681e-04 -1.013964e-02 6.975994e-05 2.278356e-02 -6.048652e-03 -1.110858e-02 1.190405e-03 -1.006941e-02 8.452641e-05 1.145679e-02 -1.112328e-02 -8.477770e-03 1.150626e-02 -1.000347e-02 7.714353e-05 5.357991e-04 -8.875549e-03 1.194835e-02 1.456302e-02 -9.947970e-03 6.652078e-05 -6.307631e-03 -5.126375e-03 2.064973e-02 1.063732e-02 -9.903246e-03 5.699542e-05 -9.737861e-03 -2.445137e-03 3.320617e-02 4.531941e-03 -9.866768e-03 5.060075e-05 -1.122262e-02 -9.920094e-04 2.967039e-02 -8.926785e-03 -9.834813e-03 4.481366e-05 -1.174824e-02 1.118781e-03 1.531681e-02 -1.363028e-02 -9.809891e-03 3.660342e-05 -9.012003e-03 1.171855e-02 2.404203e-03 -1.046422e-02 -9.794341e-03 2.717584e-05 1.166495e-02 1.343580e-02 -5.590109e-03 -4.662821e-03 -9.788265e-03 1.806576e-05 1.785863e-02 -7.583583e-04 -6.883105e-03 8.678842e-03 -9.790933e-03 9.674380e-06 1.015413e-02 -8.474776e-03 1.180863e-02 1.193279e-02 -9.801641e-03 1.896251e-06 9.064250e-04 -7.682969e-03 1.698423e-02 -1.432368e-04 -9.819871e-03 -5.425236e-06 -5.224716e-03 -4.631339e-03 1.151303e-02 2.750154e-03 -9.845232e-03 -1.238053e-05 -8.375962e-03 -2.241019e-03 2.248692e-02 5.302332e-03 -9.877387e-03 -1.899488e-05 -9.729959e-03 5.166062e-04 2.209700e-02 -5.838786e-03 -9.915996e-03 -2.525626e-05 -7.367456e-03 1.146447e-02 1.078948e-02 -1.117841e-02 -9.960696e-03 -3.113499e-05 1.317690e-02 1.333835e-02 -2.559141e-04 -9.051760e-03 -1.001109e-02 -3.660044e-05 1.930995e-02 -8.075407e-04 -7.286923e-03 -3.948550e-03 -1.006675e-02 -4.162479e-05 1.156932e-02 -8.492189e-03 -8.111111e-03 9.026367e-03 -1.012722e-02 1.367732e-03 2.324484e-03 -7.681410e-03 1.080945e-02 1.212212e-02 -7.364200e-03 1.167214e-02 -3.804837e-03 -4.631165e-03 1.613699e-02 -1.420990e-03 1.318572e-02 1.327910e-02 -6.955980e-03 -2.242842e-03 7.960124e-03 -8.876054e-03 1.917446e-02 -9.755495e-04 -8.312150e-03 -9.015412e-04 -1.605265e-03 -7.984278e-03 1.121851e-02 -7.303579e-03 -8.782196e-03 -2.637553e-04 -7.978475e-03 -4.882008e-03 4.546623e-03 3.793156e-03 -8.863315e-03 4.051431e-06 -1.132592e-02 -2.471254e-03 1.878032e-02 8.451180e-03 -8.797838e-03 1.085528e-04 -1.287059e-02 -1.124140e-03 2.143265e-02 -3.413942e-03 -8.669881e-03 1.568012e-04 -1.352057e-02 9.352260e-04 1.193762e-02 -9.811835e-03 -8.507765e-03 1.715864e-04 -1.094513e-02 1.152263e-02 1.788714e-03 -8.381942e-03 -8.350059e-03 1.672484e-04 9.574285e-03 1.327480e-02 -4.852345e-03 -5.063585e-03 -8.196443e-03 1.630868e-04 1.561093e-02 5.064054e-04 -8.368348e-03 -2.567819e-03 -8.046890e-03 1.592027e-04 1.058086e-02 3.096054e-03 -1.001989e-02 -1.170626e-03 -7.900877e-03 1.569699e-04 2.180738e-02 6.932885e-03 -1.074246e-02 -5.097196e-04 -7.755627e-03 1.547701e-04 2.442737e-02 6.048921e-03 -1.107260e-02 1.174913e-03 -7.613853e-03 1.500316e-04 3.388045e-02 2.326261e-03 -8.426089e-03 1.159378e-02 -7.477922e-03 1.440256e-04 2.903525e-02 -9.794175e-03 1.208302e-02 1.326390e-02 -7.348010e-03 1.382170e-04 1.425764e-02 -1.386000e-02 1.808153e-02 4.525227e-04 -7.223552e-03 1.329238e-04 1.311850e-03 -1.042691e-02 1.297133e-02 3.026470e-03 -7.104088e-03 1.279788e-04 -6.572358e-03 -5.938106e-03 2.411480e-02 5.433213e-03 -6.989388e-03 1.231766e-04 -1.052396e-02 -2.863085e-03 2.382448e-02 -5.762742e-03 -6.879401e-03 1.532521e-03 -1.224982e-02 -1.235994e-03 1.257587e-02 -1.110968e-02 -3.945890e-03 1.183721e-02 -1.294361e-02 -4.910113e-04 1.585233e-03 -8.973106e-03 1.677673e-02 1.343893e-02 -1.317805e-02 -1.670972e-04 -5.396541e-03 -3.864529e-03 2.293666e-02 -8.217298e-04 -1.322352e-02 -3.737007e-05 -6.174030e-03 9.106870e-03 1.514479e-02 -8.567758e-03 -1.319841e-02 1.881345e-05 1.278655e-02 1.217157e-02 5.804028e-03 -7.780991e-03 -1.313157e-02 4.011065e-05 1.814934e-02 -1.380656e-03 -4.246663e-04 -4.734658e-03 -1.306400e-02 4.058121e-05 1.000854e-02 -8.825828e-03 -3.679673e-03 -2.350856e-03 -1.299636e-02 1.454405e-03 4.763177e-04 -7.922757e-03 -5.144374e-03 -1.013974e-03 -1.010128e-02 1.176615e-02 -5.863812e-03 -4.812673e-03 -5.727240e-03 -3.801886e-04 1.058377e-02 1.340345e-02 -9.179501e-03 -2.401080e-03 -5.925017e-03 1.298192e-03 1.670996e-02 -8.408753e-04 -1.069835e-02 -1.056718e-03 -3.151342e-03 1.170947e-02 8.893473e-03 -8.591413e-03 -1.132618e-02 -4.125596e-04 1.747652e-02 1.336425e-02 -4.649848e-04 -7.814289e-03 -1.155707e-02 -1.371702e-04 2.358263e-02 -8.743487e-04 -6.707545e-03 -4.774674e-03 -1.163426e-02 1.391428e-03 1.574007e-02 -8.620632e-03 -9.973648e-03 -2.393342e-03 -8.807996e-03 1.176161e-02 6.344910e-03 -7.837666e-03 -1.144668e-02 -1.055939e-03 1.185680e-02 1.340108e-02 5.785795e-05 -4.794068e-03 -1.203488e-02 -4.202253e-04 1.797385e-02 -8.416809e-04 -3.257075e-03 -2.411431e-03 -1.223525e-02 -1.546386e-04 1.015664e-02 -8.574521e-03 -4.782531e-03 -1.076795e-03 -1.229185e-02 1.364052e-03 8.035276e-04 -7.778858e-03 -5.429884e-03 -4.458613e-04 -9.454718e-03 1.172855e-02 -5.427727e-03 -4.724901e-03 -5.694190e-03 -1.836396e-04 1.121171e-02 1.338665e-02 -8.676497e-03 -2.334572e-03 -5.817392e-03 -8.102363e-05 1.732159e-02 -8.565379e-04 -1.012896e-02 4.230746e-04 -5.876604e-03 -2.974966e-05 9.488801e-03 -8.608066e-03 -7.863266e-03 1.137463e-02 -5.897324e-03 -1.282652e-05 1.120962e-04 -7.832767e-03 1.258868e-02 1.325853e-02 -5.922712e-03 -1.872098e-05 -6.150386e-03 -4.794349e-03 1.863390e-02 5.315258e-04 -5.955249e-03 -2.591114e-05 -9.437090e-03 -2.413274e-03 1.363531e-02 3.159198e-03 -5.995053e-03 -3.279576e-05 -1.093051e-02 -1.075374e-03 2.493301e-02 5.586440e-03 -6.041404e-03 -3.897732e-05 -1.153828e-02 -4.386400e-04 2.479538e-02 -5.611463e-03 -6.093622e-03 -4.461732e-05 -1.175695e-02 -1.716654e-04 1.369719e-02 -1.096048e-02 -6.151311e-03 -5.014253e-05 -1.183031e-02 1.348692e-03 2.855178e-03 -8.826571e-03 -6.214644e-03 -5.591025e-05 -9.008114e-03 1.171487e-02 -3.981421e-03 -5.138967e-03 -6.283938e-03 -6.149631e-05 1.164495e-02 1.337325e-02 -7.452149e-03 -2.484808e-03 -6.358520e-03 -6.509922e-05 1.774048e-02 -8.695282e-04 -8.982420e-03 -1.035932e-03 -6.435103e-03 -6.812965e-05 9.895182e-03 -7.204120e-03 -9.556273e-03 -3.417306e-04 -6.515831e-03 -7.318853e-05 3.338026e-03 3.887738e-03 -9.698471e-03 -5.251606e-05 -6.602621e-03 -7.929924e-05 1.769022e-02 8.568378e-03 -9.693976e-03 5.483248e-05 -6.695666e-03 -8.528261e-05 2.046417e-02 -3.290239e-03 -9.621475e-03 1.522476e-03 -6.794526e-03 -9.084087e-05 1.109331e-02 -9.698190e-03 -6.681651e-03 1.185008e-02 -6.898798e-03 -9.732792e-05 1.071057e-03 -8.278058e-03 1.404775e-02 1.345921e-02 -7.010748e-03 -1.035080e-04 -5.438476e-03 -4.964848e-03 2.021771e-02 -7.942522e-04 -7.127504e-03 -1.068356e-04 -8.820623e-03 -2.471217e-03 1.244373e-02 -8.537314e-03 -7.246238e-03 -1.083549e-04 -1.033578e-02 3.388460e-04 3.123109e-03 -7.751403e-03 -7.366165e-03 -1.095052e-04 -8.094619e-03 1.130978e-02 -3.084389e-03 -4.705186e-03 -7.487333e-03 -1.105043e-04 1.232738e-02 1.321615e-02 -6.316140e-03 -2.320386e-03 -7.609392e-03 -1.099277e-04 1.833834e-02 -9.186641e-04 -7.755892e-03 -9.840372e-04 -7.729542e-03 1.304719e-03 1.047808e-02 -8.610925e-03 -8.315772e-03 -3.517908e-04 -5.022440e-03 1.161092e-02 1.121045e-03 -7.807154e-03 -8.491352e-03 -8.861291e-05 1.547281e-02 1.321354e-02 -5.112003e-03 -4.762152e-03 -8.524976e-03 1.440380e-05 2.140789e-02 -1.041196e-03 -8.365928e-03 -2.378088e-03 -8.494543e-03 6.417054e-05 1.340024e-02 -8.778580e-03 -9.824008e-03 3.769966e-04 -8.428616e-03 7.924651e-05 3.851676e-03 -7.984858e-03 -7.564699e-03 1.133005e-02 -8.367993e-03 7.367378e-05 -2.579115e-03 -4.932710e-03 1.287857e-02 1.323907e-02 -8.313177e-03 6.767432e-05 -6.030519e-03 -2.541488e-03 1.891295e-02 -8.956488e-04 -8.264521e-03 6.137952e-05 -7.682694e-03 2.173087e-04 1.107409e-02 -8.589443e-03 -8.222267e-03 5.487422e-05 -5.618337e-03 1.116444e-02 1.737370e-03 -7.786741e-03 -8.186597e-03 4.821156e-05 1.462603e-02 1.303541e-02 -4.476458e-03 -3.324560e-03 -8.157648e-03 4.165047e-05 2.045479e-02 -1.112604e-03 -4.875756e-03 9.377801e-03 -8.135084e-03 1.450510e-03 1.240960e-02 -8.794007e-03 1.431598e-02 1.235899e-02 -5.288403e-03 1.175391e-02 2.866629e-03 -7.977039e-03 1.983872e-02 -1.246282e-03 1.534260e-02 1.335690e-02 -3.555217e-03 -4.922025e-03 1.180829e-02 -8.728218e-03 2.140709e-02 -9.029173e-04 -6.995278e-03 -1.116142e-03 2.384044e-03 -7.840779e-03 1.352193e-02 -8.648102e-03 -5.809174e-03 1.053669e-02 -3.851696e-03 -4.743760e-03 4.091532e-03 -7.862607e-03 1.405775e-02 1.419742e-02 -7.068796e-03 -2.339369e-03 -2.228044e-03 -4.820520e-03 2.258735e-02 1.052142e-02 -8.488991e-03 -9.969825e-04 -5.577894e-03 -2.441335e-03 3.511173e-02 4.497622e-03 -9.018332e-03 -3.538536e-04 -7.141022e-03 -1.107776e-03 3.160762e-02 -8.904429e-03 -9.151156e-03 -8.149943e-05 -7.824650e-03 -4.761365e-04 1.732402e-02 -1.356502e-02 -9.135509e-03 2.514076e-05 -8.124891e-03 -2.143935e-04 4.482883e-03 -1.037821e-02 -9.055086e-03 7.818099e-05 -8.285206e-03 -1.131267e-04 -3.441343e-03 -5.980826e-03 -8.933528e-03 9.952302e-05 -8.383006e-03 -6.431598e-05 -7.496500e-03 -2.949730e-03 -8.810677e-03 1.012022e-04 -8.445754e-03 -4.889670e-05 -9.363032e-03 -1.336236e-03 -8.686018e-03 9.993441e-05 -8.512752e-03 -5.156808e-05 -1.019327e-02 -5.869040e-04 -8.565965e-03 9.538836e-05 -8.580882e-03 -5.381724e-05 -1.056206e-02 -2.614523e-04 -8.450651e-03 1.505779e-03 -8.652417e-03 -5.790479e-05 -1.074180e-02 -1.329014e-04 -5.510058e-03 1.181603e-02 -8.728763e-03 -6.112669e-05 -1.085369e-02 -7.784336e-05 1.521957e-02 1.486615e-02 -8.806785e-03 -6.353879e-05 -1.092344e-02 -5.458168e-05 2.421684e-02 1.093106e-02 -8.888000e-03 -6.730226e-05 -1.098888e-02 -4.982871e-05 3.705735e-02 4.814741e-03 -8.973596e-03 -7.126657e-05 -1.104920e-02 1.370404e-03 3.379500e-02 -8.653455e-03 -9.062789e-03 -7.415789e-05 -8.274244e-03 1.168379e-02 1.970598e-02 -1.336421e-02 -9.154219e-03 -7.555566e-05 1.229528e-02 1.328978e-02 7.051742e-03 -1.020580e-02 -9.246260e-03 -7.431948e-05 1.830504e-02 -9.641399e-04 -6.938634e-04 -5.829509e-03 -9.335270e-03 1.341666e-03 1.037339e-02 -8.699263e-03 -4.579234e-03 -2.813853e-03 -6.595392e-03 1.165014e-02 9.041101e-04 -7.902155e-03 -6.285359e-03 -1.212822e-03 1.393412e-02 1.325825e-02 -5.443832e-03 -4.846998e-03 -6.965081e-03 -4.745786e-04 1.990199e-02 4.186970e-04 -8.809838e-03 -2.454982e-03 -7.193291e-03 -1.581134e-04 1.475582e-02 2.989746e-03 -1.037748e-02 -1.109951e-03 -7.239603e-03 -3.679545e-05 2.586283e-02 5.394851e-03 -1.105516e-02 -4.679358e-04 -7.225079e-03 8.801468e-06 2.553325e-02 -5.804566e-03 -1.133953e-02 -1.951581e-04 -7.180228e-03 1.891022e-05 1.424124e-02 -1.115381e-02 -1.147197e-02 1.330467e-03 -7.145581e-03 8.914288e-06 3.206681e-03 -9.016998e-03 -8.705231e-03 1.169450e-02 -7.120795e-03 -7.828112e-07 -3.818029e-03 -5.322690e-03 1.189345e-02 1.332040e-02 -7.105594e-03 -1.032238e-05 -7.467998e-03 -2.659209e-03 1.793485e-02 -9.333002e-04 -7.099919e-03 -1.988428e-05 -9.167839e-03 -1.202959e-03 1.003283e-02 -7.256618e-03 -7.103853e-03 -2.981860e-05 -9.906282e-03 -5.048250e-04 3.418823e-03 3.846836e-03 -7.118039e-03 -4.176675e-05 -1.021028e-02 -2.122932e-04 1.771638e-02 8.506803e-03 -7.145840e-03 -5.418453e-05 -1.036383e-02 1.313647e-03 2.043816e-02 -3.354075e-03 -7.184802e-03 -6.290168e-05 -7.616037e-03 1.168192e-02 1.101698e-02 -9.745658e-03 -7.229956e-03 -7.029419e-05 1.296852e-02 1.331713e-02 9.451518e-04 -8.310314e-03 -7.283608e-03 -8.016698e-05 1.899854e-02 -9.294651e-04 -5.616512e-03 -4.988267e-03 -7.348395e-03 -9.156575e-05 1.109338e-02 -7.245634e-03 -9.051525e-03 -2.490321e-03 -7.424709e-03 -1.028937e-04 4.486530e-03 3.862362e-03 -1.062111e-02 -1.092044e-03 -7.511990e-03 -1.136313e-04 1.879357e-02 8.528218e-03 -1.126131e-02 -4.308512e-04 -7.609596e-03 -1.237986e-04 2.152664e-02 -3.327651e-03 -1.150921e-02 -1.604686e-04 -7.717007e-03 -1.335028e-04 1.212351e-02 -9.715718e-03 -1.160892e-02 1.362500e-03 -7.833795e-03 -1.428031e-04 2.075047e-03 -8.278739e-03 -8.811004e-03 1.172448e-02 -7.959562e-03 -1.517076e-04 -4.459891e-03 -3.541258e-03 1.181636e-02 1.334920e-02 -8.093894e-03 -1.599635e-04 -5.037134e-03 9.267702e-03 1.788658e-02 -9.022138e-04 -8.235890e-03 -1.661476e-04 1.404551e-02 1.228001e-02 1.001785e-02 -8.637798e-03 -8.382293e-03 -1.717639e-04 1.950383e-02 -1.306153e-03 6.081819e-04 -7.843663e-03 -8.535213e-03 -1.792737e-04 1.141729e-02 -8.770591e-03 -5.682714e-03 -3.376237e-03 -8.696314e-03 -1.871012e-04 1.942091e-03 -7.868163e-03 -6.164509e-03 9.322970e-03 -8.864551e-03 -1.923470e-04 -4.345033e-03 -4.760960e-03 1.294247e-02 1.227249e-02 -9.035789e-03 -1.961967e-04 -7.609430e-03 -2.348024e-03 1.838091e-02 7.430043e-05 -9.211365e-03 -2.012958e-04 -9.072555e-03 -1.000206e-03 1.309755e-02 2.915121e-03 -9.392433e-03 -2.067731e-04 -9.642156e-03 -3.540358e-04 2.421176e-02 5.422233e-03 -9.578583e-03 -2.128717e-04 -9.813266e-03 1.334610e-03 2.395495e-02 -5.724075e-03 -9.771457e-03 -2.180075e-04 -7.005673e-03 1.175327e-02 1.277627e-02 -1.105105e-02 -9.967473e-03 -2.196080e-04 1.366215e-02 1.341743e-02 1.853113e-03 -8.914569e-03 -1.016314e-02 -2.185296e-04 1.980991e-02 -8.151273e-04 -5.064731e-03 -5.223598e-03 -1.035658e-02 -2.151246e-04 1.201615e-02 -7.138882e-03 -8.613614e-03 -2.566379e-03 -1.054503e-02 -2.130280e-04 5.511926e-03 3.963063e-03 -1.022096e-02 -1.117003e-03 -1.073389e-02 -2.134063e-04 1.991833e-02 8.624976e-03 -1.087287e-02 -4.234177e-04 -1.092269e-02 1.201840e-03 2.274619e-02 -3.239868e-03 -1.109377e-02 -1.330205e-04 -8.280662e-03 1.151783e-02 1.342453e-02 -9.639704e-03 -1.116513e-02 -2.374242e-05 1.215695e-02 1.457477e-02 3.447377e-03 -8.210991e-03 -1.116755e-02 3.012476e-05 2.086989e-02 1.064766e-02 -3.022581e-03 -4.893743e-03 -1.113118e-02 4.878832e-05 3.343497e-02 4.540772e-03 -6.368952e-03 -2.400503e-03 -1.109623e-02 4.767277e-05 2.990773e-02 -7.501264e-03 -7.854348e-03 -1.009205e-03 -1.106206e-02 4.715696e-05 1.839615e-02 -1.886279e-03 -8.418975e-03 -3.561402e-04 -1.102810e-02 4.707201e-05 2.612308e-02 2.922430e-03 -8.598566e-03 -9.226089e-05 -1.099406e-02 1.461342e-03 2.421268e-02 -6.932386e-03 -8.635537e-03 1.135469e-05 -8.131523e-03 1.177110e-02 1.223399e-02 -1.165270e-02 -8.607918e-03 6.157765e-05 1.252520e-02 1.337823e-02 9.081441e-04 -9.259788e-03 -8.544428e-03 7.694490e-05 1.862491e-02 -8.750761e-04 -6.260912e-03 -4.050900e-03 -8.486038e-03 7.171461e-05 1.078179e-02 -8.613123e-03 -7.153910e-03 8.978136e-03 -8.432975e-03 6.749354e-05 1.396711e-03 -7.820752e-03 1.173698e-02 1.209376e-02 -8.382996e-03 6.286823e-05 -4.872078e-03 -4.771935e-03 1.703553e-02 -3.338836e-05 -8.339155e-03 5.542835e-05 -8.166476e-03 -2.385882e-03 1.166097e-02 2.827895e-03 -8.304031e-03 4.654650e-05 -9.666814e-03 3.712099e-04 2.269338e-02 5.362469e-03 -8.277934e-03 3.775292e-05 -7.448692e-03 1.131894e-02 2.236479e-02 -5.774124e-03 -8.260382e-03 2.941907e-05 1.294890e-02 1.319169e-02 1.112470e-02 -1.110865e-02 -8.250942e-03 2.141817e-05 1.893513e-02 -9.557051e-04 1.506832e-04 -7.565312e-03 -8.249387e-03 1.358064e-05 1.104458e-02 -8.641211e-03 -3.979655e-03 6.437011e-03 -8.255621e-03 5.814266e-06 1.651043e-03 -7.828832e-03 1.305965e-02 1.073489e-02 -8.269602e-03 -1.903320e-06 -4.625170e-03 -4.777187e-03 1.748924e-02 -2.054314e-03 -8.291280e-03 -9.553506e-06 -7.922375e-03 -2.387925e-03 8.940840e-03 -7.689975e-03 -8.320574e-03 -1.735052e-05 -9.423721e-03 -1.045372e-03 2.117081e-03 3.696928e-03 -8.357862e-03 -2.686353e-05 -1.003748e-02 -4.059739e-04 1.635683e-02 8.493254e-03 -8.406203e-03 -3.698991e-05 -1.026072e-02 1.276543e-03 1.909578e-02 -3.302273e-03 -8.463772e-03 -4.654367e-05 -7.509693e-03 1.169179e-02 9.738721e-03 -9.682199e-03 -8.531254e-03 -5.504312e-05 1.310062e-02 1.335146e-02 -2.625046e-04 -6.841870e-03 -8.605860e-03 -6.103900e-05 1.919384e-02 -8.808305e-04 -3.917883e-03 6.786706e-03 -8.685376e-03 -6.601740e-05 1.134633e-02 -8.616751e-03 1.334573e-02 1.091989e-02 -8.769985e-03 -7.283370e-05 1.959010e-03 -7.822324e-03 1.792042e-02 -1.924586e-03 -8.863183e-03 -8.040657e-05 -4.310057e-03 -3.356351e-03 9.485463e-03 -9.012143e-03 -8.962991e-03 -8.578800e-05 -4.772387e-03 9.340228e-03 -9.722323e-05 -7.963244e-03 -9.067008e-03 -8.962502e-05 1.435119e-02 1.228690e-02 -6.414238e-03 -4.812853e-03 -9.174550e-03 -9.311644e-05 1.980342e-02 -1.327705e-03 -9.682862e-03 -2.373572e-03 -9.285612e-03 1.317550e-03 1.170383e-02 -8.796701e-03 -1.111444e-02 -1.012397e-03 -6.571885e-03 1.162450e-02 2.209087e-03 -7.897962e-03 -1.165771e-02 -3.734277e-04 1.393251e-02 1.323386e-02 -4.103558e-03 -4.794792e-03 -1.181021e-02 -1.051856e-04 1.987672e-02 -1.020483e-03 -7.398963e-03 -2.386244e-03 -1.181667e-02 1.579324e-06 1.187583e-02 -7.347325e-03 -8.898167e-03 -1.043112e-03 -1.175562e-02 5.489093e-05 5.161774e-03 3.751174e-03 -9.508970e-03 -4.030698e-04 -1.165559e-02 7.361671e-05 1.935403e-02 8.408918e-03 -9.728767e-03 -1.342152e-04 -1.155730e-02 7.165900e-05 2.196360e-02 -3.457531e-03 -9.802105e-03 -2.659235e-05 -1.146139e-02 6.910054e-05 1.242446e-02 -9.858257e-03 -9.806737e-03 1.442774e-03 -1.136843e-02 6.557367e-05 2.227105e-03 -8.430840e-03 -6.941348e-03 1.177169e-02 -1.127976e-02 6.142004e-05 -4.463052e-03 -5.112992e-03 1.371503e-02 1.337575e-02 -1.119529e-02 1.470977e-03 -8.028548e-03 -2.617565e-03 1.981144e-02 -8.792419e-04 -8.287689e-03 1.177838e-02 -9.729896e-03 -1.220678e-03 1.196460e-02 -8.616063e-03 1.240548e-02 1.341123e-02 -1.050259e-02 -5.601152e-04 2.578673e-03 -7.822031e-03 1.853526e-02 -8.376891e-04 -1.088326e-02 1.124326e-03 -3.690516e-03 -4.772495e-03 1.071772e-02 -8.592936e-03 -8.287292e-03 1.154427e-02 -6.984325e-03 -2.386951e-03 1.353443e-03 -7.820627e-03 1.217342e-02 1.321381e-02 -8.486077e-03 -1.047853e-03 -4.899794e-03 -4.785919e-03 1.812020e-02 3.993019e-04 -9.103357e-03 -4.112985e-04 -8.181511e-03 -2.409570e-03 1.295531e-02 2.971366e-03 -9.332685e-03 -1.451721e-04 -9.675151e-03 -1.077206e-03 2.404325e-02 5.377576e-03 -9.417966e-03 -4.002317e-05 -1.028900e-02 -4.465680e-04 2.369714e-02 -5.818698e-03 -9.437091e-03 1.215827e-05 -1.052007e-02 -1.860774e-04 1.239234e-02 -1.116614e-02 -9.418030e-03 1.444099e-03 -1.061246e-02 -8.639538e-05 1.344863e-03 -9.030541e-03 -6.573252e-03 1.174980e-02 -1.064397e-02 -3.944387e-05 -5.695078e-03 -5.338645e-03 1.406037e-02 1.335411e-02 -1.064238e-02 -2.632894e-05 -9.362804e-03 -2.678460e-03 2.013665e-02 5.141451e-04 -1.064767e-02 -3.313223e-05 -1.108448e-02 -1.223424e-03 1.509708e-02 3.081821e-03 -1.065968e-02 -3.976073e-05 -1.184312e-02 -5.237006e-04 2.630312e-02 5.475858e-03 -1.067820e-02 -4.617315e-05 -1.216578e-02 1.183225e-03 2.606405e-02 -5.730318e-03 -1.070300e-02 -5.232999e-05 -9.510755e-03 1.160271e-02 1.485748e-02 -1.108241e-02 -1.073378e-02 -5.819359e-05 1.100707e-02 1.327178e-02 3.901803e-03 -8.949211e-03 -1.077023e-02 -6.372811e-05 1.701202e-02 -9.543703e-04 -3.050531e-03 -5.261386e-03 -1.081201e-02 -6.889988e-05 9.080979e-03 -8.687475e-03 -6.638266e-03 -2.609326e-03 -1.085872e-02 1.340233e-03 -3.848353e-04 -7.890463e-03 -8.290459e-03 -1.164780e-03 -8.082134e-03 1.164812e-02 -6.727276e-03 -4.834921e-03 -8.990936e-03 -4.760049e-04 1.248110e-02 1.328233e-02 -1.008564e-02 -1.027456e-03 -9.266354e-03 -1.936227e-04 1.848288e-02 -9.643416e-04 -8.815082e-03 1.062953e-02 -9.402373e-03 -9.297378e-05 1.054014e-02 -8.716503e-03 1.114124e-02 1.288562e-02 -9.476644e-03 -4.477530e-05 1.054296e-03 -6.526382e-03 1.693545e-02 -1.092918e-03 -9.516348e-03 -3.000486e-05 -2.488259e-03 6.825257e-03 8.938013e-03 -8.720605e-03 -9.561123e-03 -3.494770e-05 1.473662e-02 1.084516e-02 -5.277449e-04 -6.455992e-03 -9.610762e-03 -3.975886e-05 1.919767e-02 -2.059556e-03 -4.001383e-03 6.927997e-03 -9.665214e-03 -4.455012e-05 1.060374e-02 -9.171151e-03 1.329885e-02 1.093027e-02 -9.724496e-03 -4.936851e-05 8.596604e-04 -6.709445e-03 1.783967e-02 -1.976272e-03 -9.788650e-03 -5.422191e-05 -2.790379e-03 6.753073e-03 9.329426e-03 -9.072684e-03 -9.857711e-03 -5.909913e-05 1.439825e-02 1.083037e-02 -3.274593e-04 -6.595506e-03 -9.931696e-03 -6.398433e-05 1.886667e-02 -2.051632e-03 -3.888882e-03 6.873887e-03 -1.001061e-02 -6.885889e-05 1.028191e-02 -9.161780e-03 1.339098e-02 1.093035e-02 -1.009443e-02 -7.370231e-05 5.480743e-04 -8.112877e-03 1.795240e-02 -1.955370e-03 -1.018312e-02 -7.849321e-05 -5.918411e-03 -4.961028e-03 9.463425e-03 -9.051427e-03 -1.027663e-02 -8.312359e-05 -9.334957e-03 -1.106275e-03 -1.721380e-04 -7.988338e-03 -1.037468e-02 -8.715306e-05 -8.084754e-03 1.056963e-02 -6.540458e-03 -4.827920e-03 -1.047635e-02 -9.130346e-05 1.184788e-02 1.285084e-02 -9.858839e-03 -2.382650e-03 -1.058282e-02 -9.629359e-05 1.761860e-02 -1.118299e-03 -1.133852e-02 -1.017725e-03 -1.069459e-02 1.312608e-03 9.600826e-03 -8.753178e-03 -1.192790e-02 -3.757777e-04 -7.983381e-03 1.161583e-02 1.186485e-04 -7.912596e-03 -1.212403e-02 -1.045491e-04 1.251430e-02 1.321689e-02 -6.198032e-03 -4.843255e-03 -1.217106e-02 5.595102e-06 1.845036e-02 3.742614e-04 -9.528248e-03 -2.451641e-03 -1.214693e-02 6.280957e-05 1.326937e-02 2.942092e-03 -1.105470e-02 -1.103365e-03 -1.207952e-02 8.599600e-05 2.433535e-02 6.751265e-03 -1.168516e-02 -4.559954e-04 -1.200897e-02 8.910409e-05 2.678498e-02 5.853678e-03 -1.191554e-02 -1.776815e-04 -1.193531e-02 9.220662e-05 3.605849e-02 2.107487e-03 -1.198889e-02 1.354522e-03 -1.185851e-02 9.532594e-05 3.102603e-02 -1.001211e-02 -9.154710e-03 1.173190e-02 -1.177856e-02 9.848441e-05 1.605477e-02 -1.406005e-02 1.152075e-02 1.481501e-02 -1.169541e-02 1.017090e-04 2.909822e-03 -1.061096e-02 2.047767e-02 1.089657e-02 -1.160896e-02 1.518935e-03 -5.177840e-03 -6.111736e-03 3.329742e-02 4.799375e-03 -8.691307e-03 1.183083e-02 -9.333306e-03 -3.031129e-03 3.003301e-02 -8.652500e-03 1.202060e-02 1.485885e-02 -1.126436e-02 -1.401656e-03 1.595586e-02 -1.334824e-02 2.100617e-02 1.091971e-02 -1.216303e-02 -6.563403e-04 3.329562e-03 -1.017169e-02 3.384495e-02 4.795504e-03 -1.260445e-02 -3.371674e-04 -4.367943e-03 -4.360182e-03 3.058948e-02 -8.660434e-03 -1.286525e-02 -2.137277e-04 -5.355037e-03 8.990126e-03 1.651452e-02 -1.193105e-02 -1.306009e-02 -1.591848e-04 1.365015e-02 1.224870e-02 6.709742e-03 1.560945e-03 -1.321202e-02 -1.354273e-04 1.914024e-02 -1.237900e-03 1.961315e-02 7.567585e-03 -1.335951e-02 1.282967e-03 1.116069e-02 -8.648633e-03 2.182905e-02 -3.652253e-03 -1.067482e-02 1.159420e-02 1.846095e-03 -7.722566e-03 1.229405e-02 -9.775880e-03 9.803143e-03 1.319686e-02 -4.261736e-03 -4.605979e-03 2.257235e-03 -8.232971e-03 1.571586e-02 -1.060309e-03 -7.330321e-03 -2.182013e-03 -4.197705e-03 -4.854600e-03 7.686040e-03 -7.379797e-03 -8.583769e-03 -8.225008e-04 -7.481482e-03 -2.333855e-03 9.508785e-04 3.730257e-03 -8.930694e-03 -1.648622e-04 -8.896814e-03 -9.398884e-04 1.513369e-02 8.396018e-03 -8.868136e-03 1.227236e-04 -9.393470e-03 -2.845718e-04 1.774579e-02 -3.460232e-03 -8.640021e-03 2.497272e-04 -9.498454e-03 -8.525584e-06 8.218998e-03 -9.847865e-03 -8.323935e-03 3.242719e-04 -9.443078e-03 1.131936e-04 -1.954743e-03 -8.408776e-03 -7.947395e-03 3.652411e-04 -9.304592e-03 1.714332e-04 -8.614636e-03 -5.082897e-03 -7.550162e-03 3.865422e-04 -9.132657e-03 1.908393e-04 -1.214401e-02 -2.580862e-03 -7.131855e-03 4.082540e-04 -8.955261e-03 1.935190e-04 -1.380374e-02 -1.645126e-03 -6.692078e-03 4.194510e-04 pymvpa2-2.2.0/mvpa2/data/mask.nii.gz000066400000000000000000000003051202542755000171220ustar00rootroot00000000000000‹@"Med_.nii‹ad 103h0ˆ00Â!*`aÓ ûÓÒÜ  Xˆìxƒ3„.†Ê®Øls ö1Ñ3 Æ]”„? n:s¦Ð‰¡ïHè0u`q0ù $ VÀ$Ö€nvž¶!ÕÝK @lqEšIÈ1Ž)B¾iØ µÍ#ÎDâL"ÞDêšGši„M$Ý<Üf’g.iØÌ|æ1ó¨aÖH4Trð“ÉÕ pymvpa2-2.2.0/mvpa2/data/sample_design.fsf000066400000000000000000000531631202542755000203730ustar00rootroot00000000000000# Automatically generated by mk_fsf.py # FEAT version number set fmri(version) 5.98 # Are we in MELODIC? set fmri(inmelodic) 0 # Analysis level # 1 : First-level analysis # 2 : Higher-level analysis set fmri(level) 1 # Which stages to run # 0 : No first-level analysis (registration and/or group stats only) # 7 : Full first-level analysis # 1 : Pre-Stats # 3 : Pre-Stats + Stats # 2 : Stats # 6 : Stats + Post-stats # 4 : Post-stats set fmri(analysis) 7 # Use relative filenames set fmri(relative_yn) 0 # Balloon help set fmri(help_yn) 0 # Run Featwatcher set fmri(featwatcher_yn) 0 # Cleanup first-level standard-space images set fmri(sscleanup_yn) 0 # Perfusion tag/control order set fmri(tagfirst) 1 # Number of first-level analyses set fmri(multiple) 1 # Higher-level input type # 1 : Inputs are lower-level FEAT directories # 2 : Inputs are cope images from FEAT directories set fmri(inputtype) 1 # Carry out pre-stats processing? set fmri(filtering_yn) 1 # Brain/background threshold, % set fmri(brain_thresh) 10 # Critical z for design efficiency calculation set fmri(critical_z) 5.3 # Noise level set fmri(noise) 0.66 # Noise AR(1) set fmri(noisear) 0.34 # Post-stats-only directory copying # 0 : Overwrite original post-stats results # 1 : Copy original FEAT directory for new Contrasts, Thresholding, Rendering set fmri(newdir_yn) 0 # Motion correction # 0 : None # 1 : MCFLIRT set fmri(mc) 0 # Spin-history (currently obsolete) set fmri(sh_yn) 0 # B0 fieldmap unwarping? set fmri(regunwarp_yn) 0 # EPI dwell time (ms) set fmri(dwell) 0.7 # EPI TE (ms) set fmri(te) 35 # % Signal loss threshold set fmri(signallossthresh) 10 # Unwarp direction set fmri(unwarp_dir) y- # Slice timing correction # 0 : None # 1 : Regular up (0, 1, 2, 3, ...) # 2 : Regular down # 3 : Use slice order file # 4 : Use slice timings file # 5 : Interleaved (0, 2, 4 ... 1, 3, 5 ... ) set fmri(st) 0 # Slice timings file set fmri(st_file) "" # BET brain extraction set fmri(bet_yn) 0 # Intensity normalization set fmri(norm_yn) 0 # Perfusion subtraction set fmri(perfsub_yn) 0 # Highpass temporal filtering set fmri(temphp_yn) 1 # Lowpass temporal filtering set fmri(templp_yn) 0 # MELODIC ICA data exploration set fmri(melodic_yn) 0 # Carry out main stats? set fmri(stats_yn) 1 # Carry out prewhitening? set fmri(prewhiten_yn) 1 # Add motion parameters to model # 0 : No # 1 : Yes set fmri(motionevs) 0 # Robust outlier detection in FLAME? set fmri(robust_yn) 0 # Higher-level modelling # 3 : Fixed effects # 0 : Mixed Effects: Simple OLS # 2 : Mixed Effects: FLAME 1 # 1 : Mixed Effects: FLAME 1+2 set fmri(mixed_yn) 2 # Number of EVs set fmri(evs_vox) 0 # Number of contrasts # Number of F-tests set fmri(nftests_orig) 0 set fmri(nftests_real) 0 # Add constant column to design matrix? (obsolete) set fmri(constcol) 0 # Carry out post-stats steps? set fmri(poststats_yn) 1 # Pre-threshold masking? set fmri(threshmask) "" # Thresholding # 0 : None # 1 : Uncorrected # 2 : Voxel # 3 : Cluster set fmri(thresh) 0 # P threshold set fmri(prob_thresh) 0.05 # Z threshold set fmri(z_thresh) 2.3 # Z min/max for colour rendering # 0 : Use actual Z min/max # 1 : Use preset Z min/max set fmri(zdisplay) 0 # Z min in colour rendering set fmri(zmin) 2 # Z max in colour rendering set fmri(zmax) 8 # Colour rendering type # 0 : Solid blobs # 1 : Transparent blobs set fmri(rendertype) 1 # Background image for higher-level stats overlays # 1 : Mean highres # 2 : First highres # 3 : Mean functional # 4 : First functional # 5 : Standard space template set fmri(bgimage) 1 # Create time series plots set fmri(tsplot_yn) 0 # Registration? set fmri(reg_yn) 1 # Registration to initial structural #set fmri(reginitial_highres_yn) 1 # Search space for registration to initial structural # 0 : No search # 90 : Normal search # 180 : Full search set fmri(reginitial_highres_search) 90 # Degrees of Freedom for registration to initial structural set fmri(reginitial_highres_dof) 7 # Registration to main structural set fmri(reghighres_yn) 1 # Search space for registration to main structural # 0 : No search # 90 : Normal search # 180 : Full search set fmri(reghighres_search) 90 # Degrees of Freedom for registration to main structural set fmri(reghighres_dof) 6 # Registration to standard image? set fmri(regstandard_yn) 1 # Standard image set fmri(regstandard) "/corral/utexas/poldracklab/software/fsl/data/standard/MNI152_T1_2mm_brain" # Search space for registration to standard space # 0 : No search # 90 : Normal search # 180 : Full search set fmri(regstandard_search) 90 # Degrees of Freedom for registration to standard space set fmri(regstandard_dof) 12 # Do nonlinear registration from structural to standard space? # Control nonlinear warp field resolution set fmri(regstandard_nonlinear_warpres) 10 # High pass filter cutoff set fmri(paradigm_hp) 100 # Number of lower-level copes feeding into higher-level analysis set fmri(ncopeinputs) 0 # Add confound EVs text file set fmri(confoundevs) 0 # Contrast & F-tests mode # real : control real EVs # orig : control original EVs set fmri(con_mode_old) orig set fmri(con_mode) orig # Contrast masking - use >0 instead of thresholding? set fmri(conmask_zerothresh_yn) 0 # Do contrast masking at all? set fmri(conmask1_1) 0 ########################################################## # Now options that don't appear in the GUI # Alternative example_func image (not derived from input 4D dataset) set fmri(alternative_example_func) "" # Alternative (to BETting) mask image set fmri(alternative_mask) "" # Initial structural space registration initialisation transform set fmri(init_initial_highres) "" # Structural space registration initialisation transform set fmri(init_highres) "" # Standard space registration initialisation transform set fmri(init_standard) "" # For full FEAT analysis: overwrite existing .feat output dir? set fmri(overwrite_yn) 0 ### AUTOMATICALLY GENERATED PART### set fmri(regstandard_nonlinear_yn) 1 set fmri(ndelete) 0 set fmri(outputdir) "/openfmri/staged//ds018/sub001/model/task002_run001.feat" set feat_files(1) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf_brain" set fmri(reginitial_highres_yn) 0 set highres_files(1) "/openfmri/staged//ds018/sub001/anatomy/highres001_brain" set fmri(npts) 300 set fmri(tr) 2.00 set fmri(evs_orig) 13 set fmri(evs_real) 26 set fmri(smooth) 6 set fmri(ncon_orig) 8 set fmri(ncon_real) 8 set fmri(evtitle1) "task" set fmri(shape1) 3 set fmri(custom1) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond001.txt" set fmri(convolve1) 3 set fmri(convolve_phase1) 0 set fmri(tempfilt_yn1) 1 set fmri(deriv_yn1) 1 set fmri(ortho1.0) 0 set fmri(ortho1.1) 0 set fmri(ortho1.2) 0 set fmri(ortho1.3) 0 set fmri(ortho1.4) 0 set fmri(ortho1.5) 0 set fmri(ortho1.6) 0 set fmri(ortho1.7) 0 set fmri(ortho1.8) 0 set fmri(ortho1.9) 0 set fmri(ortho1.10) 0 set fmri(ortho1.11) 0 set fmri(ortho1.12) 0 set fmri(ortho1.13) 0 set fmri(conpic_real.1) 1 set fmri(conname_real.1) "task" set fmri(conname_orig.1) "task" set fmri(con_real1.1) 1 set fmri(con_real1.2) 0 set fmri(con_real1.3) 0 set fmri(con_real1.4) 0 set fmri(con_real1.5) 0 set fmri(con_real1.6) 0 set fmri(con_real1.7) 0 set fmri(con_real1.8) 0 set fmri(con_real1.9) 0 set fmri(con_real1.10) 0 set fmri(con_real1.11) 0 set fmri(con_real1.12) 0 set fmri(con_real1.13) 0 set fmri(con_real1.14) 0 set fmri(con_real1.15) 0 set fmri(con_real1.16) 0 set fmri(con_real1.17) 0 set fmri(con_real1.18) 0 set fmri(con_real1.19) 0 set fmri(con_real1.20) 0 set fmri(con_real1.21) 0 set fmri(con_real1.22) 0 set fmri(con_real1.23) 0 set fmri(con_real1.24) 0 set fmri(con_real1.25) 0 set fmri(con_real1.26) 0 set fmri(con_orig1.1) 1 set fmri(con_orig1.2) 0 set fmri(con_orig1.3) 0 set fmri(con_orig1.4) 0 set fmri(con_orig1.5) 0 set fmri(con_orig1.6) 0 set fmri(con_orig1.7) 0 set fmri(con_orig1.8) 0 set fmri(con_orig1.9) 0 set fmri(con_orig1.10) 0 set fmri(con_orig1.11) 0 set fmri(con_orig1.12) 0 set fmri(con_orig1.13) 0 set fmri(evtitle2) "gains parametric" set fmri(shape2) 3 set fmri(custom2) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond002.txt" set fmri(convolve2) 3 set fmri(convolve_phase2) 0 set fmri(tempfilt_yn2) 1 set fmri(deriv_yn2) 1 set fmri(ortho2.0) 0 set fmri(ortho2.1) 0 set fmri(ortho2.2) 0 set fmri(ortho2.3) 0 set fmri(ortho2.4) 0 set fmri(ortho2.5) 0 set fmri(ortho2.6) 0 set fmri(ortho2.7) 0 set fmri(ortho2.8) 0 set fmri(ortho2.9) 0 set fmri(ortho2.10) 0 set fmri(ortho2.11) 0 set fmri(ortho2.12) 0 set fmri(ortho2.13) 0 set fmri(conpic_real.2) 1 set fmri(conname_real.2) "gains parametric" set fmri(conname_orig.2) "gains parametric" set fmri(con_real2.1) 0 set fmri(con_real2.2) 0 set fmri(con_real2.3) 1 set fmri(con_real2.4) 0 set fmri(con_real2.5) 0 set fmri(con_real2.6) 0 set fmri(con_real2.7) 0 set fmri(con_real2.8) 0 set fmri(con_real2.9) 0 set fmri(con_real2.10) 0 set fmri(con_real2.11) 0 set fmri(con_real2.12) 0 set fmri(con_real2.13) 0 set fmri(con_real2.14) 0 set fmri(con_real2.15) 0 set fmri(con_real2.16) 0 set fmri(con_real2.17) 0 set fmri(con_real2.18) 0 set fmri(con_real2.19) 0 set fmri(con_real2.20) 0 set fmri(con_real2.21) 0 set fmri(con_real2.22) 0 set fmri(con_real2.23) 0 set fmri(con_real2.24) 0 set fmri(con_real2.25) 0 set fmri(con_real2.26) 0 set fmri(con_orig2.1) 0 set fmri(con_orig2.2) 1 set fmri(con_orig2.3) 0 set fmri(con_orig2.4) 0 set fmri(con_orig2.5) 0 set fmri(con_orig2.6) 0 set fmri(con_orig2.7) 0 set fmri(con_orig2.8) 0 set fmri(con_orig2.9) 0 set fmri(con_orig2.10) 0 set fmri(con_orig2.11) 0 set fmri(con_orig2.12) 0 set fmri(con_orig2.13) 0 set fmri(evtitle3) "loss parametric" set fmri(shape3) 3 set fmri(custom3) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond003.txt" set fmri(convolve3) 3 set fmri(convolve_phase3) 0 set fmri(tempfilt_yn3) 1 set fmri(deriv_yn3) 1 set fmri(ortho3.0) 0 set fmri(ortho3.1) 0 set fmri(ortho3.2) 0 set fmri(ortho3.3) 0 set fmri(ortho3.4) 0 set fmri(ortho3.5) 0 set fmri(ortho3.6) 0 set fmri(ortho3.7) 0 set fmri(ortho3.8) 0 set fmri(ortho3.9) 0 set fmri(ortho3.10) 0 set fmri(ortho3.11) 0 set fmri(ortho3.12) 0 set fmri(ortho3.13) 0 set fmri(conpic_real.3) 1 set fmri(conname_real.3) "loss parametric" set fmri(conname_orig.3) "loss parametric" set fmri(con_real3.1) 0 set fmri(con_real3.2) 0 set fmri(con_real3.3) 0 set fmri(con_real3.4) 0 set fmri(con_real3.5) 1 set fmri(con_real3.6) 0 set fmri(con_real3.7) 0 set fmri(con_real3.8) 0 set fmri(con_real3.9) 0 set fmri(con_real3.10) 0 set fmri(con_real3.11) 0 set fmri(con_real3.12) 0 set fmri(con_real3.13) 0 set fmri(con_real3.14) 0 set fmri(con_real3.15) 0 set fmri(con_real3.16) 0 set fmri(con_real3.17) 0 set fmri(con_real3.18) 0 set fmri(con_real3.19) 0 set fmri(con_real3.20) 0 set fmri(con_real3.21) 0 set fmri(con_real3.22) 0 set fmri(con_real3.23) 0 set fmri(con_real3.24) 0 set fmri(con_real3.25) 0 set fmri(con_real3.26) 0 set fmri(con_orig3.1) 0 set fmri(con_orig3.2) 0 set fmri(con_orig3.3) 1 set fmri(con_orig3.4) 0 set fmri(con_orig3.5) 0 set fmri(con_orig3.6) 0 set fmri(con_orig3.7) 0 set fmri(con_orig3.8) 0 set fmri(con_orig3.9) 0 set fmri(con_orig3.10) 0 set fmri(con_orig3.11) 0 set fmri(con_orig3.12) 0 set fmri(con_orig3.13) 0 set fmri(evtitle4) "outcome gain trials" set fmri(shape4) 3 set fmri(custom4) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond004.txt" set fmri(convolve4) 3 set fmri(convolve_phase4) 0 set fmri(tempfilt_yn4) 1 set fmri(deriv_yn4) 1 set fmri(ortho4.0) 0 set fmri(ortho4.1) 0 set fmri(ortho4.2) 0 set fmri(ortho4.3) 0 set fmri(ortho4.4) 0 set fmri(ortho4.5) 0 set fmri(ortho4.6) 0 set fmri(ortho4.7) 0 set fmri(ortho4.8) 0 set fmri(ortho4.9) 0 set fmri(ortho4.10) 0 set fmri(ortho4.11) 0 set fmri(ortho4.12) 0 set fmri(ortho4.13) 0 set fmri(conpic_real.4) 1 set fmri(conname_real.4) "outcome gain trials" set fmri(conname_orig.4) "outcome gain trials" set fmri(con_real4.1) 0 set fmri(con_real4.2) 0 set fmri(con_real4.3) 0 set fmri(con_real4.4) 0 set fmri(con_real4.5) 0 set fmri(con_real4.6) 0 set fmri(con_real4.7) 1 set fmri(con_real4.8) 0 set fmri(con_real4.9) 0 set fmri(con_real4.10) 0 set fmri(con_real4.11) 0 set fmri(con_real4.12) 0 set fmri(con_real4.13) 0 set fmri(con_real4.14) 0 set fmri(con_real4.15) 0 set fmri(con_real4.16) 0 set fmri(con_real4.17) 0 set fmri(con_real4.18) 0 set fmri(con_real4.19) 0 set fmri(con_real4.20) 0 set fmri(con_real4.21) 0 set fmri(con_real4.22) 0 set fmri(con_real4.23) 0 set fmri(con_real4.24) 0 set fmri(con_real4.25) 0 set fmri(con_real4.26) 0 set fmri(con_orig4.1) 0 set fmri(con_orig4.2) 0 set fmri(con_orig4.3) 0 set fmri(con_orig4.4) 1 set fmri(con_orig4.5) 0 set fmri(con_orig4.6) 0 set fmri(con_orig4.7) 0 set fmri(con_orig4.8) 0 set fmri(con_orig4.9) 0 set fmri(con_orig4.10) 0 set fmri(con_orig4.11) 0 set fmri(con_orig4.12) 0 set fmri(con_orig4.13) 0 set fmri(evtitle5) "outcome loss trials" set fmri(shape5) 3 set fmri(custom5) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond005.txt" set fmri(convolve5) 3 set fmri(convolve_phase5) 0 set fmri(tempfilt_yn5) 1 set fmri(deriv_yn5) 1 set fmri(ortho5.0) 0 set fmri(ortho5.1) 0 set fmri(ortho5.2) 0 set fmri(ortho5.3) 0 set fmri(ortho5.4) 0 set fmri(ortho5.5) 0 set fmri(ortho5.6) 0 set fmri(ortho5.7) 0 set fmri(ortho5.8) 0 set fmri(ortho5.9) 0 set fmri(ortho5.10) 0 set fmri(ortho5.11) 0 set fmri(ortho5.12) 0 set fmri(ortho5.13) 0 set fmri(conpic_real.5) 1 set fmri(conname_real.5) "outcome loss trials" set fmri(conname_orig.5) "outcome loss trials" set fmri(con_real5.1) 0 set fmri(con_real5.2) 0 set fmri(con_real5.3) 0 set fmri(con_real5.4) 0 set fmri(con_real5.5) 0 set fmri(con_real5.6) 0 set fmri(con_real5.7) 0 set fmri(con_real5.8) 0 set fmri(con_real5.9) 1 set fmri(con_real5.10) 0 set fmri(con_real5.11) 0 set fmri(con_real5.12) 0 set fmri(con_real5.13) 0 set fmri(con_real5.14) 0 set fmri(con_real5.15) 0 set fmri(con_real5.16) 0 set fmri(con_real5.17) 0 set fmri(con_real5.18) 0 set fmri(con_real5.19) 0 set fmri(con_real5.20) 0 set fmri(con_real5.21) 0 set fmri(con_real5.22) 0 set fmri(con_real5.23) 0 set fmri(con_real5.24) 0 set fmri(con_real5.25) 0 set fmri(con_real5.26) 0 set fmri(con_orig5.1) 0 set fmri(con_orig5.2) 0 set fmri(con_orig5.3) 0 set fmri(con_orig5.4) 0 set fmri(con_orig5.5) 1 set fmri(con_orig5.6) 0 set fmri(con_orig5.7) 0 set fmri(con_orig5.8) 0 set fmri(con_orig5.9) 0 set fmri(con_orig5.10) 0 set fmri(con_orig5.11) 0 set fmri(con_orig5.12) 0 set fmri(con_orig5.13) 0 set fmri(evtitle6) "outcome gain parametric" set fmri(shape6) 3 set fmri(custom6) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond006.txt" set fmri(convolve6) 3 set fmri(convolve_phase6) 0 set fmri(tempfilt_yn6) 1 set fmri(deriv_yn6) 1 set fmri(ortho6.0) 0 set fmri(ortho6.1) 0 set fmri(ortho6.2) 0 set fmri(ortho6.3) 0 set fmri(ortho6.4) 0 set fmri(ortho6.5) 0 set fmri(ortho6.6) 0 set fmri(ortho6.7) 0 set fmri(ortho6.8) 0 set fmri(ortho6.9) 0 set fmri(ortho6.10) 0 set fmri(ortho6.11) 0 set fmri(ortho6.12) 0 set fmri(ortho6.13) 0 set fmri(conpic_real.6) 1 set fmri(conname_real.6) "outcome gain parametric" set fmri(conname_orig.6) "outcome gain parametric" set fmri(con_real6.1) 0 set fmri(con_real6.2) 0 set fmri(con_real6.3) 0 set fmri(con_real6.4) 0 set fmri(con_real6.5) 0 set fmri(con_real6.6) 0 set fmri(con_real6.7) 0 set fmri(con_real6.8) 0 set fmri(con_real6.9) 0 set fmri(con_real6.10) 0 set fmri(con_real6.11) 1 set fmri(con_real6.12) 0 set fmri(con_real6.13) 0 set fmri(con_real6.14) 0 set fmri(con_real6.15) 0 set fmri(con_real6.16) 0 set fmri(con_real6.17) 0 set fmri(con_real6.18) 0 set fmri(con_real6.19) 0 set fmri(con_real6.20) 0 set fmri(con_real6.21) 0 set fmri(con_real6.22) 0 set fmri(con_real6.23) 0 set fmri(con_real6.24) 0 set fmri(con_real6.25) 0 set fmri(con_real6.26) 0 set fmri(con_orig6.1) 0 set fmri(con_orig6.2) 0 set fmri(con_orig6.3) 0 set fmri(con_orig6.4) 0 set fmri(con_orig6.5) 0 set fmri(con_orig6.6) 1 set fmri(con_orig6.7) 0 set fmri(con_orig6.8) 0 set fmri(con_orig6.9) 0 set fmri(con_orig6.10) 0 set fmri(con_orig6.11) 0 set fmri(con_orig6.12) 0 set fmri(con_orig6.13) 0 set fmri(evtitle7) "outcome loss parametric" set fmri(shape7) 3 set fmri(custom7) "/openfmri/staged//ds018/sub001/behav/task002_run001/cond007.txt" set fmri(convolve7) 3 set fmri(convolve_phase7) 0 set fmri(tempfilt_yn7) 1 set fmri(deriv_yn7) 1 set fmri(ortho7.0) 0 set fmri(ortho7.1) 0 set fmri(ortho7.2) 0 set fmri(ortho7.3) 0 set fmri(ortho7.4) 0 set fmri(ortho7.5) 0 set fmri(ortho7.6) 0 set fmri(ortho7.7) 0 set fmri(ortho7.8) 0 set fmri(ortho7.9) 0 set fmri(ortho7.10) 0 set fmri(ortho7.11) 0 set fmri(ortho7.12) 0 set fmri(ortho7.13) 0 set fmri(conpic_real.7) 1 set fmri(conname_real.7) "outcome loss parametric" set fmri(conname_orig.7) "outcome loss parametric" set fmri(con_real7.1) 0 set fmri(con_real7.2) 0 set fmri(con_real7.3) 0 set fmri(con_real7.4) 0 set fmri(con_real7.5) 0 set fmri(con_real7.6) 0 set fmri(con_real7.7) 0 set fmri(con_real7.8) 0 set fmri(con_real7.9) 0 set fmri(con_real7.10) 0 set fmri(con_real7.11) 0 set fmri(con_real7.12) 0 set fmri(con_real7.13) 1 set fmri(con_real7.14) 0 set fmri(con_real7.15) 0 set fmri(con_real7.16) 0 set fmri(con_real7.17) 0 set fmri(con_real7.18) 0 set fmri(con_real7.19) 0 set fmri(con_real7.20) 0 set fmri(con_real7.21) 0 set fmri(con_real7.22) 0 set fmri(con_real7.23) 0 set fmri(con_real7.24) 0 set fmri(con_real7.25) 0 set fmri(con_real7.26) 0 set fmri(con_orig7.1) 0 set fmri(con_orig7.2) 0 set fmri(con_orig7.3) 0 set fmri(con_orig7.4) 0 set fmri(con_orig7.5) 0 set fmri(con_orig7.6) 0 set fmri(con_orig7.7) 1 set fmri(con_orig7.8) 0 set fmri(con_orig7.9) 0 set fmri(con_orig7.10) 0 set fmri(con_orig7.11) 0 set fmri(con_orig7.12) 0 set fmri(con_orig7.13) 0 set fmri(conpic_real.8) 1 set fmri(conname_real.8) "all" set fmri(conname_orig.8) "all" set fmri(con_real8.1) 1 set fmri(con_real8.2) 0 set fmri(con_real8.3) 1 set fmri(con_real8.4) 0 set fmri(con_real8.5) 1 set fmri(con_real8.6) 0 set fmri(con_real8.7) 1 set fmri(con_real8.8) 0 set fmri(con_real8.9) 1 set fmri(con_real8.10) 0 set fmri(con_real8.11) 1 set fmri(con_real8.12) 0 set fmri(con_real8.13) 1 set fmri(con_real8.14) 0 set fmri(con_real8.15) 0 set fmri(con_real8.16) 0 set fmri(con_real8.17) 0 set fmri(con_real8.18) 0 set fmri(con_real8.19) 0 set fmri(con_real8.20) 0 set fmri(con_real8.21) 0 set fmri(con_real8.22) 0 set fmri(con_real8.23) 0 set fmri(con_real8.24) 0 set fmri(con_real8.25) 0 set fmri(con_real8.26) 0 set fmri(con_orig8.1) 1 set fmri(con_orig8.2) 1 set fmri(con_orig8.3) 1 set fmri(con_orig8.4) 1 set fmri(con_orig8.5) 1 set fmri(con_orig8.6) 1 set fmri(con_orig8.7) 1 set fmri(con_orig8.8) 0 set fmri(con_orig8.9) 0 set fmri(con_orig8.10) 0 set fmri(con_orig8.11) 0 set fmri(con_orig8.12) 0 set fmri(con_orig8.13) 0 set fmri(evtitle8) "motpar1" set fmri(shape8) 2 set fmri(convolve8) 0 set fmri(convolve_phase8) 0 set fmri(tempfilt_yn8) 1 set fmri(deriv_yn8) 1 set fmri(custom8) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf.par.1" set fmri(ortho8.0) 0 set fmri(ortho8.1) 0 set fmri(ortho8.2) 0 set fmri(ortho8.3) 0 set fmri(ortho8.4) 0 set fmri(ortho8.5) 0 set fmri(ortho8.6) 0 set fmri(ortho8.7) 0 set fmri(ortho8.8) 0 set fmri(ortho8.9) 0 set fmri(ortho8.10) 0 set fmri(ortho8.11) 0 set fmri(ortho8.12) 0 set fmri(ortho8.13) 0 set fmri(evtitle9) "motpar2" set fmri(shape9) 2 set fmri(convolve9) 0 set fmri(convolve_phase9) 0 set fmri(tempfilt_yn9) 1 set fmri(deriv_yn9) 1 set fmri(custom9) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf.par.2" set fmri(ortho9.0) 0 set fmri(ortho9.1) 0 set fmri(ortho9.2) 0 set fmri(ortho9.3) 0 set fmri(ortho9.4) 0 set fmri(ortho9.5) 0 set fmri(ortho9.6) 0 set fmri(ortho9.7) 0 set fmri(ortho9.8) 0 set fmri(ortho9.9) 0 set fmri(ortho9.10) 0 set fmri(ortho9.11) 0 set fmri(ortho9.12) 0 set fmri(ortho9.13) 0 set fmri(evtitle10) "motpar3" set fmri(shape10) 2 set fmri(convolve10) 0 set fmri(convolve_phase10) 0 set fmri(tempfilt_yn10) 1 set fmri(deriv_yn10) 1 set fmri(custom10) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf.par.3" set fmri(ortho10.0) 0 set fmri(ortho10.1) 0 set fmri(ortho10.2) 0 set fmri(ortho10.3) 0 set fmri(ortho10.4) 0 set fmri(ortho10.5) 0 set fmri(ortho10.6) 0 set fmri(ortho10.7) 0 set fmri(ortho10.8) 0 set fmri(ortho10.9) 0 set fmri(ortho10.10) 0 set fmri(ortho10.11) 0 set fmri(ortho10.12) 0 set fmri(ortho10.13) 0 set fmri(evtitle11) "motpar4" set fmri(shape11) 2 set fmri(convolve11) 0 set fmri(convolve_phase11) 0 set fmri(tempfilt_yn11) 1 set fmri(deriv_yn11) 1 set fmri(custom11) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf.par.4" set fmri(ortho11.0) 0 set fmri(ortho11.1) 0 set fmri(ortho11.2) 0 set fmri(ortho11.3) 0 set fmri(ortho11.4) 0 set fmri(ortho11.5) 0 set fmri(ortho11.6) 0 set fmri(ortho11.7) 0 set fmri(ortho11.8) 0 set fmri(ortho11.9) 0 set fmri(ortho11.10) 0 set fmri(ortho11.11) 0 set fmri(ortho11.12) 0 set fmri(ortho11.13) 0 set fmri(evtitle12) "motpar5" set fmri(shape12) 2 set fmri(convolve12) 0 set fmri(convolve_phase12) 0 set fmri(tempfilt_yn12) 1 set fmri(deriv_yn12) 1 set fmri(custom12) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf.par.5" set fmri(ortho12.0) 0 set fmri(ortho12.1) 0 set fmri(ortho12.2) 0 set fmri(ortho12.3) 0 set fmri(ortho12.4) 0 set fmri(ortho12.5) 0 set fmri(ortho12.6) 0 set fmri(ortho12.7) 0 set fmri(ortho12.8) 0 set fmri(ortho12.9) 0 set fmri(ortho12.10) 0 set fmri(ortho12.11) 0 set fmri(ortho12.12) 0 set fmri(ortho12.13) 0 set fmri(evtitle13) "motpar6" set fmri(shape13) 2 set fmri(convolve13) 0 set fmri(convolve_phase13) 0 set fmri(tempfilt_yn13) 1 set fmri(deriv_yn13) 1 set fmri(custom13) "/openfmri/staged//ds018/sub001/BOLD/task002_run001/bold_mcf.par.6" set fmri(ortho13.0) 0 set fmri(ortho13.1) 0 set fmri(ortho13.2) 0 set fmri(ortho13.3) 0 set fmri(ortho13.4) 0 set fmri(ortho13.5) 0 set fmri(ortho13.6) 0 set fmri(ortho13.7) 0 set fmri(ortho13.8) 0 set fmri(ortho13.9) 0 set fmri(ortho13.10) 0 set fmri(ortho13.11) 0 set fmri(ortho13.12) 0 set fmri(ortho13.13) 0 pymvpa2-2.2.0/mvpa2/data/smpl_attr.txt000066400000000000000000000000571202542755000176210ustar00rootroot00000000000000# to be ignored 2 4 0.4 1 3 1 # also ignored pymvpa2-2.2.0/mvpa2/data/tueb_meg.dat.gz000066400000000000000000001405561202542755000177640ustar00rootroot00000000000000‹S1¬Hvp02cf-3ffasu.datíýÍŽ.»²5 µ‹«àj)ýoÓ!:@n¤Õ@ !qÿŒa;ÂéˆÜgÓA¢QŸ¾w¯Ss>ó©L‡ãĈÿÓÿåÿñÿü¿ÿû¿ü?þ¿ÿÿ×ÿ_ÿ«Ÿç'üÄŸô“ÊOýi?ýgüüaø ñ'¤ŸBù õ'´ŸÐÂø‰ÏOÄ¿‰?1ýÄüËO¬?±ýÄþÇOz~RøIøÊô“òO*?©þ¤ö“úO?ùùÉá'ÇŸŒß˜rùÉõ'·ŸÜòø)ÏO ?%þ”ôSð@å§ÔŸÒ~Jÿ)ã§>?5üÔøSÓOÍ?Ï[jû©ý§ŽŸöü´ðÓâOK?-ÿ´òÓð:í§õŸ6~úóÓÃO?=ýôüÓËO¯?oÛúøÏÏ?#þŒô3òÏ(?£þŒö3p< ǃóxp NäÁ‘<8“‡òàT˃ÏÍcÃçxp<9ÏŽ‡ÇÓãñáü0Dž/>‡3 8Ä€S 8Æ€s 8È€“ 8Ê€³ ‰‚Àçpœçp 'p¤gp¨§p¬!SbøN6àhÎ6àpN7àxÎ7à€N8ŠŸÃ!œrÀ1œsÀAœtÀQœuÀa‡Ê;€Ïá¼<àÄŽ<àÌ=àÔŽ=àÜCãeÁçpôgpø§püç € ˆ tÞ*|RC€ ‰QÈ"@Òƒ×÷òˆG„<"ä!yDÈ#BòˆŸƒ<"ä!yDÈ#Bòˆ¼Ï¼ÐóFãs¼Ó¼Ô¼Õ¼Ö¼×¼ØG„<"ä¯>>yDÈ#BòˆG„<"ä!yÄLÁç yDÈ#BòˆG„<"ä!X¨Løä!yDÈ#BòˆG„<"ä+µŸƒ<"ä!yDÈ#BòˆG„ydÈ#CòÈG†<2ä‘! yäA§F¯·yÈ£@ò(G< äQ y”@÷‡ÏAò(G< äQ yÈ£@%ÒOâsG< äQ yÈ£@ò(GIt¨øäQ yÈ£@ò(G< äQ2=/>yÈ£@ò(ôÎtÏôÏtÐôÐÓEãstÒôÒtÓG< äQ yÈ£Túr|ò(G< äQ yÈ£@ò(NŸƒ< äQ yÈ£@ò(GyTÈ£Bò¨G…<*äQ! yÔÈÈŸƒ<*äQ! yTÈ£Bò¨G…y4È£A òhGƒ<äÑ y´ÈXŸƒ<äÑ y4È£A òhGƒytÈã/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâ/“øË$þ2‰¿Lâÿ?3‰ÿÅÿùÿöÿø÷õóûüù?×òú/Þgþ·ì?ÇùÎÿîŸõ±Þ×Çz[ÞËúØþ–÷Ÿõ±¶ÿ9Ocþwÿ'¯QÈó¿a}Œ—nþwý1u`þ7ïŸÓþXØ›ÿ[öï.û_•ýe¿ü¸ß ï7Èû ò~ƒýHy¿AÞoö¤ýèûKÓþxÚoöÄýûã~ƒ¸ß î7ˆûÙ×OrzòÞòÈòËäcû žýÏ~ƒg¿üõ~ƒg½Á3ÖŸuZûìöQî“Ý=O}‹`Kd hËkIoËr‹vKz ~]ƒ})öÙWfß uŸöíÚ—mß½}×ÅÜ×tßÚ}‰÷ž|ßö}ù·.lÕXвÕfkÑVª­cKã¶þmuÜÚ¹•u©îVä­×[Í·Ö/°-Â6Û^ló1mÉ6,ÛÎl³³­Ð²IÛBmƒµí×6g˸mS·-ß6„Û..+¹mæ6¡Û¢n»Ìí6¾ÛoÓ¼-õ4ÛÛ†o“¾-ü6øËüog°}ÃvÛs,?²½Êv2Ûçl´ÒvOÛ[mçµ}ÙòlÛÏm··½àvŠtøKâºÑqÝʸ.ÖRЏÄ—„â:å¸jI#®Çë7ÆýÏ–.ÉÿÎçŒK—âÒ¥¸ti‰2.]ŠK—âÒ¥¸ti}ÅÒ¥¸t).]ŠK—âþa=èÒ¥¸t).]Ú¿éR\º—.Å¥KëÅ¥KqéR\º—.í‡_º—.Å¥KqéÒúK—âÒ¥¸t).]Ú/¾t).]ŠK—âÒ¥¸ÿj=èÒ¥´t)-]Z§––.¥¥KiéRZº´®~Z·=­ ›Ö¥KëÞÌGKKz)îŸæƒ¦uKmÒzš´¿pÿáÒ¥%¯´t)-]JK—ÒÒ¥ý¹¥KiéRZº”–.-a§¥K©ìŸÖƒ.]Z³t)-]JK—ÒÒ¥uQÒÒ¥´t)-]JK—ö¶ýŸõ K—ÒÒ¥uËÒÒ¥´t)-]JK—öë-]JK—ÒÒ¥´tiþ¿¥KyéR^º”—.­“ÉK—òÒ¥¼t)/]Z÷;/]ÊK—òÒ¥¼´(ïÿÏ™×uÌëJåu+–rä%›¼Ž7¯#Êë-ׯڿk|éR^º$?¬]º”—.å¥KK yéR^º”—.å¥Kû›–.å¥KyéR^º´nC^º”—.å¥KyéÒzŒ¥KyéRîû×ׯï[º”—.å¥KyéÒ~‡¥KyéRYºT–.­kX–.•¥KeéRYº´ ,]*K—ÊÒ¥²tiýÑÒ¥²t©,]*K—Öá•¥KeéRYºT–Ž,(릖uÙʺ1e }|YG_Öé•ue¿ÄzŽýUòÓzÐ¥Këß.]*K—ÊÒ¥²tizéRYºT–.•¥KKæ¥íÿ¬]ºT–.í_µt©,]*K—ÊÒ¥uaÊÒ¥²t©,]*K—øuéR]ºT—.Õ¥Kë®Õ¥KuéR]ºT—.­—¬K—êÒ¥ºt©.]ªûçsÖ¥KuéR]º´N¨.]ªK—êÒ¥ºti=ÌÒ¥ºt©.õ©yÿÝúa=èºJu]‡º$ºT¤®s­ëhê~¿ýˆë›ö—.Õ¥KuéÒþ³¥KuéR]ºT—.­ÿ{éR]ºT—.Õ¥Kûû–.Õ¥KuéR]ºT÷_­]ºÔ–.µ¥KëaÚÒ¥¶t©-]jK—ÖjK—ÚÒ¥¶t©-]ZÿhéR[ºÔ–.µ¥Kë6¶¥KméR[ºÔ–.­chK—ÚÒ¥¶t©-]ZW¹-]jK—ÚÒ¥¶tia[ºÔÊþi=èºàëÛ×5k릴%í¶¶Î¿­ckûÍ÷ÓïXß!ÿYºt©-]ZÂkK—ÚÒ¥¶t©-]ÚÿjéR[ºÔ–.µ¥Kü?ûÒ¥¾t©/]êK—Ö/ìK—úÒ¥¾t©/]Zצ/]êK—úÒ¥¾t©ïÿÏÙ—.õ¥K}éÒºs}éR_ºÔ—.õ¥KûÖïZºÔ—.õ¥K}ÿ°téR_ºÔ—.­sêK—úÒ¥¾t©/]Z—½/]êKoúºû}]ßuÈ}]¢¾îA_²ìKëÓûPö{ígÛ_¿?±téR_ºÔ—.É_­]º4–.¥KKºcéÒXº4–.¥Kë{ÇÒ¥±ti,]K—Ö×.]K—ÆÒ¥±ti=ÓXº4–.¥KcéÒºWcéÒXº4–.¥Kë…ÆÒ¥±ti,]K—Ö¥K—FÙ?­]º´~ÿÒ¥±ti,]K—Ö…K—ÆÒ¥±ti,]ZG9ÚþÏzÐuµÇºKƺ#c‰y,Q}Úë_íwÞ½5ÿuø «òVå!¬ÊCX•‡0+aUª<„Uy«òþÙÿxv¦Wå!¬ÊCX•‡0+aUª<„Uy«òþÙ¿™šVå!¬ÊCX•‡ðÏúX^¿+¯çõ y=èþa=hYZÖƒ–õ ë÷—õ e=h]Z×#®oªëƒu=h]ÚÖ¬?këAÛzж´­ÿw_Ú׃öõl}}ýú¾¾t¬ëAÇzÐýWëAÇ|P© þ•ÿÊ¿åß¿òï_ù÷¯üûWþý+ÿþ•ÿÊ¿åßõ?åß¿òïÏ_ù÷¯üûWþý+ÿþ•ÿÊ¿åß¿òï_ù÷¯üûWþý+ÿþ•þÊ¿åß¿òïúá¯üûWþýù+ÿþ•ÿÊ¿åߟ¿òï_ù÷¯ü;ÿæ¯üûWþýù+ÿþ•ÿÊ¿åß¿òï_ù÷¯üûWþý+ÿþü•ÿÊ¿åßù¿òï_ù÷ç¯üûWþý+ÿþ•þÊ¿åß¿òï_ù÷ç¯üûWþý+ÿþÿ¬üû¿ø_ÿïÂÿ ?$œZ@8þýeé)"Sƒ©G@²þ 1u!„”æÏÉ6ŒJÅóÊ?@ê/òÔõßÂø%"ocÿ äY°ƒ±VüœX®Âeú„Ö¿ÈðB¸ýµÍ¿L) pó¯#=&Ôörþœ™1"KA’1?Ÿè:Ôõu‰fªøŒõû2Åë€G~Ì]SŒòȈŠÚ8²õ ©z¡›hu?‚ùu A~GĽ|Ä _ Ú®L˜ÿ"3ÏF\¶ßb@‹j)m?%ÄB~$×ûµ ¾®A|ÊÌ×F€c)CþÁÓ‘õÃN„ý3âØ›> 0Œ`Ô?`ú†/ìë¤êL¨<ë…> ×/&ÔJ…\A„‹»ÑèËæÏö9dWò× ÷† d+‹<4Î-#Ø®M>QKŽðg¿EiÐDmÿ ¨1Ò1!àï;±ñäö}lˆs#Þ<¼ ’ø¦Opß6zZiöõÁq\ŠZ.|¬2ŽvUñy`ùÊ#o…ì v÷ñó"àpíì¸Þ…ׯÈKànÿ>&(m­ çC—cu·ÙþÊ -HYÎÝkù£‰$ > >_µü>jck¬èœÒZÙuD¡0•1ç¸ ¾‰%âÏ»åì35 Ç‚“{ô‘¾vgtýƒË„Ûë‘X£Jøƒ}°…Nÿ¤d1ù·ÙÀ3 ÊäÆÞÒ·?[ãWpÿpFù™Æ_Pb$xîùšS‹oÑð`ÌZiû%ðO24 òŽòVÌÊpËG’û„§lMnhýgºÈ&ÈuẢÃì)‰ìÊÃÐC_éÀȈÇUÀ×µ·5…mD¢ø/Ö3Cïq®ÙÆØ–&<¬}A÷ÿƒì2smè\—O@T! ¹È˜ „txÈg+~\u‚·‚«×áÙ†~Ãíüó1(bîz#ïsºýÐ|û:ž¼‡ÿ²0Ñp§51QÆ;•f“m ¬;ÍìX””úˆ, çélùúéÇ:lz"ÜINþ6q^3#ÎßQäïEsÜ:àg¸¯±h ­jûJ:oi+1™wÿûûÆz-ìÈ”Z5šcNT¶¨,Í[Á™õÂ-¨3»î‹µ‰e?ÑÜ$ ¹] µ&–>WÍð-kÏ1…‰†RˆÞY÷Z!4„pUNíuÿ®Š±˜eV¼@‹Ê iËŒõ‚óžÖ";)þZïy¿PòJë‚E<3YH"åÐðƈA‡ƽZ»ðkßÒjµ÷¿¸<‚Üý•Æ[¶~.[9ã…GÂ#§yL6*²/‰0 €<8·OGW™ ±†“Elw¸ËÆ+=xDIÞ¦.;õÂt<"Jû¶×8öþOBrWKH’XܶŒ‹•úÄ¡±ì7W¶ }¨ˆô½2­ß_à{÷ñR¸9paÉC ,1É,V–êc@&ñ­Ÿ&? fí1 Ô¿½ñö÷Uªl$Q›Žú]¡Î²ÜZ[6ɦsïàuš¨ÊÂCÞ?göij+¥Ë‘½S>~c 2òSö¿Ïˆ ð<'¨36/³¥Êº¦zÙ’"Û?áËŸ­DËøõ€³¨¬ÐîGâóÁFe¼Ó&„•Ñ<-ë¿;öxŸIþH1­‘srNì¸'ÖßõfÜñŠ ˜™&„c•äA+ó¸<™8û[v‘Å ¼gLjí]ºç¿.ªq7v°0ƒ~vÆõáönSq+òJp. töUp­ÛØjfÜb…÷‡ˆjzºÏSûHåY·j°Š×"ë*îN¦Oëzÿ{áXkæ-¶½° ¸e°]s‡ø­–ßN¢À;Á€7‰7îÏ›Cqr©¸@ j²^Û[±‹Z0&éQ‹lŸÐe7wPå=1q 0ã'yÇ+Þ•ÿZu‡:‡™ß?ù?DŠþ¤Ý—ÚŒ>°Ñ ƒ¶4mÂn-‚UÅÛÌÏ´ðN5¾‚ì+%ÀN ˆjw gãchþ Â½j*{Eõ1ÈýÈ8¼ 'Úýði<<Á§»M„™†íò‰ °”Ê>VDRX5Z6© T¦e¸ózÌÓm‡)8ŸR|Å(p½%4­cŒo\cÐ hÔ.²Pù ¤ŸZ¸o¤kfé¸E8Y­K¼Ë?¶Tˆ,€9«¥©;¹êG®vrçªVVóî(š œ<‚ÔFîG´¿Ò}£M$m-ЩD$†OPþƒ‘þ:Z$;ȂĢA6Tï" ôÖúd. ûx>kš¿Õ^{‰l…Æ–"œ[Ä)ŒÆ@óÛ ºؾ¦½®žmÍK  Æ?—ÿFZ]d% __b Q•šÑÛ44é/¼'BŽÖÔ¿2Íd½Oú±eVkw+Z0ÛE¯`FìM ™zÄ€8 ‡–޹2nëbm"è*„¸ƒ8Ø•–×ÉV7ð}#ˆ{¹øßÂè$ø$ÂTøluÙ]÷ž¶^Dl)â±îª¢-e¸)²•7fg¹/ð¡™ýUž$3)ÄJWª«;ºüt!z%Œ$ýc_løôë:,¶Öa3!ë}*u[,ó?D¬°ÿù³;Õ8!‘ÒüÔsãŽlÜŠ<<}Ò–Ü áUzÝMÍá£1«ƒZŠT{L‘˺\ŸÝf£²ÈÏzuþ)¯ ö”`mXêkTW̳µ ŸuÜÑ–õvÖ>[ׄ—„]Q_H+ŸŸqtê©nëyk°7T6ÿ°u:´qô®¡×[ÔS?ã3Mî*äÎ&U—b—ÁÆ}Vâ+…6a¼ïŽ36åþ¯.ÄGB6ô¶ eoF"ú•ò±k÷3˜|â#M¾cX6ÂþXÒÎNÆúj—²¹“‰©|{õ6@¦QéªV-lÃ¥4ÿß´¬ï»d“ÛбÕÚûWú€ê×>³ mÏNÍh¢ã„fo· ,Ê?ZbKâù®pÈónuøB̈¢UR_¨´ÝÉû5æAâ®!œ~Ä]š(ÌÕê3‡5kB¶ôŸ6&·ZôßdÚ_8¸Ìú˜± ÒЦp¥˜¥ôçólí9ý7¦Ç­Ý‘‘•ŒÃdØ(ÂÇ6~wµ}oGl ñ_?ðÑm¼3ŸÌÁЬuV›Åøt‰¾ñU€±H•èA”¶ui±«™:Î"ÔH˶¢î0Ù-\(òk-™B±ÏÛ¼ö-¦ê¶ ¥l¿Ã6 l×éÆua·).v%t;ÉÝÊg_Ù¤Ó¶Fgã{MmVá* þ ïfà+Eßµµ{H™ŒÎ¢m/È•<ã }.ýkSÛ_ß¡°ñ.¢§•¬5¼Ë}{wy£Ì¼¶÷ΉíV—¢ÂU@µr$•ËýH¿.‚µáš5ÒmNeàö÷Ï›ê‹Nw,Ƽ”­/ûÆ‘…Ïÿúÿ&Û ç‚(£¤Ðxw³ì,MøØâw.ƒÏ; "Ñ^÷àŠoX…þhêZÔä uñõ«™€»îíš=þ+¾³ÿ<»?`®èçÝ+øˆ¶î€*€D%!A~ÃåKì±|Lîv»È·9Õp‡%b¼C ¸+À¾ G>B’+"emÊ*¶/ëÝJê`6aºòjgMÄz[à5–ÏeÞî >àªöp;;—cc\vûo/†1",ç‘™uEÛ ¸-[áL2c„¦ßà & ü#5vÍü;²ÖÕ>x¨å×·Í^Û´±õĘÀº-™-Ü»›aõɹS´™´µ¶EúUÏ´5RS vù“Ó9«a}»këxX™Iðc7W=ÀÆñ…Ì><ûGõ­³6AsõñÂ]ÈäëôÛ9ÞZº<®ûêÙ¸Ï ÷£fn28û;í7ÚÇ—«­Vº©›»æî¦Lè:87‹˜.Ÿ¼5Ãö±Œ ìžæ3…_{î&›úuÀ¹ðJJÝeôã„¥bÊ6¾¡bŽÔ¾6îÅ @£8g®ß˜ñ àSrýþWJ¶Mwµ\ áS_‡ï±¡çöáNC\Ü‚<¢Ãž¾kg¹àï+JºÃ9ÃØñ=±bÍw,wñ½H·ÄTÒì~!ŒïÉFWû+ AQYë?w©ÚÖX]ÖÎL¹âùŒÐ@“œypèHƒJ°Þâ#u€.à¡o:ÖÃßÓN…øžgFœr%]jpç[•aS¶J2!ÖûônÑþì'DÍ(¤‹©=^À´ï\ÁÄ´Òì3;늃C×ϯm3órà¶“!I•ݸ`[7õPI[ôóé_Vèï»”ÚÂ3lo°ÿ}×=ƒuˆö+䲈.ŸLZmÿoSŶ]ëJ%NìnýYUöåc.âÂs›‚øØÂš$k=lIû×öW\¹ÄÞã¯äÑ oÙÙüóe‚×&‹›Âënc[UŽsáÊ}w¯iÔÙ½•5#.æW8÷î¡ ÿíäíÆF]ñ6ÕD{á½:T:|¾×Žï¶:öÑ€2¨÷Wåòk`ÀÀD¬Å°˜—‡zõ´S”)ðñ Ææ”IdÆÒÊyÊkrÜŸ€[«uçm— ç,®óÈÓ¬øì`‚ív–ÉÑXËÖï/üµeø_‹·ý3 G3†ëâC×øuÀއ01‡‰{?€·)ôãCÎåÜ0 ¶x¾äÔô¥<]¸Zº=7›cØâ¸‹ƒ>òƒÛ¹ôÀS,Û§1¶ºèðÜÞ!åþxˆ;=00£_G¨`óÅÿV²ÈÚ§Ùö:e’…áŸ-:$’ÁG'² AöÏ%´_y··>¦(ê19í™Ì‚¢)Mø•ÃV~¤]®{|Ä?ŸÁ™A®Ún&ì`…ÑÊEG `Ãw½Âj56#N€O8Þg2íˆÊú1ycÚÐ.k²`¯¯Üùèø§Áu#-Ò9ר(«Nt¿µÇŽÜöÂ*³5aŽðÈšQûоéÊ"kÚH¾(~¬UµL>'·]VËÕbæú]Cçù}ÃalÄãò0Ôü´›±šQ0¿½«uä®2PhED”á?„6éúðw˜æ¦ñ?î†sÈŽXð”çÚÇÖ™ÝØ®#ÄrU[³57Ð?´²}–ßÊøk+\yÝùa‡O²²E½7òwÂÏ?öÉïaQ—|d(™8¡Ñ©Ðrü X3ÊãÉM¬¾ }.{´`1"nÊÒL¢»òû½Êu=\àèf>f®M|뜻§¾±ãÌ·#väd{ßRÁ=ëò8÷+¾šP`ç’ä`‚v6ɨ¿gÔ3e4㸼ÛeÉÖ»9ë»f눰>°&Äy>BV׎pâ6)ÓÁ¦Hæ²â¯Æè=h}®¥Õqµcë ­[²#«.e¶ˆköliÐ~¡›ôôÊlR7Bu…õžÊí½m’~8YÓ°ϸ?¦aïb‰óÒ>o¸sDÓâwZœ¥•îèÐ9àN!À>YêUâólP¾ey×1lžñÁ¬âðÁ.ô5™¬Ë]|ëÊÎ…ÜÞìŠvÏ;[ø/àÒÕáwç‚eƒRµ—õcìÌ ßÌœNÃáˆ`¹ŽU½wÎâ1]Æyº$¦‘Ë=&üƒï¢öÇœ²±–~ÜôކíÐíTÂ"¸Þ³™!t(,GQbËÎF»†T&³w!ͽ_8¾éÒK‚zÛkOºf!?êj÷ÁØþ±õà^6ÙÑÅÜБ.>ŒV¾ˆžþgZ Ë·õ}™c»ë,® kOÁ<¿ê¶7—¦Õ3oQï´çƒÀäî&Úðß5 ,ƒ–Ëì˜ìcŽöŽÞ-dÃV§ï Õ½}¹òwCÚ>¿ú]qÂrò8ð°‹(? ë7}Iãöö]N)ÐVm “ªt]•Q­[1}ÌâÀ ð`ª®·0L2øtsVÆŒ *LÎâÊþ³ÛÚäþã­|± t=¬ 3Gö1kr÷é>‰L¤0¸¦Ÿ"¨ËÅÝ‹~Ìñ¸±»¸âJÿÖ&9¨’#2JiE_ÃÝUPÇ^n‹¹Î–;ð›ÓOçP,bõ¿…i>_û"°PxÇbǪÜÈÞ§Ùo¨\7‡âp“7É•#¡üÀ¡›˜Ú“‹Ý>Ç™7aÇ7ýÔ¯KØÇ?4[©v7˜|w”.ÂMÜx7—+ Ar³>ôLmdpÍ Œ]øÓÓ.“u GIeÓz?¬åý/,¢ò¤fªë•is;”‚1¶•Jë0[ìxÛ r!¨á0p3‡(œS vŒÕžÇÙÄÂü‘~+Á=•c…hCtGÑäàqóC~Ø";ï|‹Øàœí…øV¨±,Ío ?¨1Éφä*/üw¦¼Á~^V~CårHÄ"á?Ü|G[fo¾ÅºŠÊmÇÝ.ù˜x¹è l‰Ã\Ö}~ÄãF½Í˜Íöì0°£µð„½wTñ£²Ü­l€VÎÔ:˜¥3÷øíÔÝaV¼‘ºßÃ-[ûXëâHn­úX2qƒ7\ðú?³Í÷¾;ˆaúª.Ñø ÈµüøwâѸSˆe¹cÈWaqO¶¨äJ%nÒaÊ ×#víü—gÔ° ›TÀ¶7>x™- à p½ÕÓ3§¸©Pgù.ãüAýkúH n»íŠˆò™z³ÜYw¥Î“‡ß7Ö?Š1vpãN½œæºC±3=®ct?qã†Qüúvî·]pÍ*÷"1 m4Q¹ð´sç¦&Ú–â†D|˜·{ˆÎV’m¦þÁn|[/7éín¦…Ž#ÁKÀ.1:$Ú'ypô­ž>£þŸwX8ŽÁ;e´Õ=³9o¯à&Ø<À`ã]Ïň¡çlŠÉU?V\FÁbé]—«p<“›¤é°Lý¨ÊàLp‡šd}Î[Ö©5Ž•Ï‚ÓﺠUL‹Ør¬2®üä-Ž0ñ΄|·Ã\üê2Çôwß{W:² ‡ÚƒAãxíÛJ…`bšwꀷ€­Ñ´ŽÂ²4ºPÔº&{’–ÈÕýlÆÕGl¨ÃŸ÷Qj|á´n#çZ€•…|RͤÿŽû¬Ó¥öÞšã:ÊÖ®} ²\çà’ÎÆÇiå,L35k/>,³Ù}çʾæ ;dôÇ Êçv…áe9·ýø`u4vеð<#÷)!øº»Ÿe¹Áfn<Êf;ž(în×;dÛtð8À¢ mý`©âr¼¶ÕnÑm7NÄ×Ïmvd}ÐBvÜÜ¥Á%»=ÎyÛ¶ …XT­·;º +tw¶ñ±´­?Ÿ»wa›ñ_=æ+÷ë”ìe2…¼ÔÙÁŒn4 5càh‹<ÓÍýö±AÏ,±Ò´oåèyÝô¨§Ö·|’7â¶Grç ˆÁ áØN[ä®9f.‡?p͵,¾;K}ãt¬¤lÞVÙ>æ™Lvê%~NçŽvlÿÈmä1¾Ï™ËÚn»9ê.ŠYJ²zS;lÿ„¹ .¿@Ì&A¾ï§E½ÚXÈ‚5m ïbH[ðdÒ÷uúØSäð Ümb¿ב ¹¦¶cö¶…½{bÆ•y>lî•Çäùn$׳X^²qO[7)¢µ jôQ¿ë/~xO¦}ƒú¸»”`ﳫØ!ŸáÇ‘÷?òÖû…ºvIÃ]²q»ë~&ï ï»T·úX}GÕw×ý$ízC€à3¼ðfv2×c7]á4îªì¾T?‘vˆ]{—H­Ôü¶i³”Ç:r+ø°\""Ã’7ÙSÿ‡?ËÎ6:`÷ÖÌøö–©#8¨üÊÈ"ˆï0ËføAzn £0¸|Œ ?æî\£þN¨paq{à%ƒ¸ò;_²¾¿!\ÁóÃŒü«à[É÷…H|lb¾#,ûïmËÍv=‰ä•'øzÒÍk)úÜĹ©É{fî›Ñ¡’}ÄéÑK¶Þy¿¡)>ÂËÖkjfaŒI¶m/ò‘"#Z ²ÌŸ?[ŰÇd×`ûrªÇßfÖíËu¸v‡.ô¸ÛPÛ•êŽ÷Òzq[F±]{¬­èƒ­Û½ùÞ¯™¡srs#m7<ÙSƒÞup™w ”õ,¤°w{È%H‹”ï©43÷Á¥à@¢7Q•®Œ=\öú®…þ|¹s·Çzð¯4ñžû÷›~ìØÿˆÛR©u%VÔnÖõ#*¹w·`kM=À6 ¬íucL 3·þÄëmiñÃTÙ¶zWûûú5Ùï!Э˜žÿãný|mÞeêhÛÜXö»è wÑÞ¨µu޵ÃÞ¬‘Z7îiél¬S0›(}Ð`6CÚ<ýF)ÛBó‡ 0Þ×Úgß¿ëà{Ãêâ»ÅT¶zal™ó<³p{7ìã’SÛ°ÿ Î½´üƒCÿª7ø%†ŒÏ¯)¾ÑnFС½ÿ+?œ'Ô²jþ±Bún;ú¿,ã&SsÿàcÙØ7ë }Šm.åAßíP?˜8À•¼}À¿ï´ûƒ;pµhÇÅáë%vÞ€Ìs ÇLåŠD.а9ÅÃüm‘>(Fí öØ9T[‚#Áƒ;fÿþ íÿsÿØväí|™kú»1&öºy¶¶ÛWZÕG‹Ä&î`Ó,剙<4hX¥¿»¶üöiTÉ!Þ? ¤–Üàn?i¢x7<î®Í¸-¿˜w, @e˜Ù(û’/úÞØÕ’·×Öî‡ôdÛ]|»ÖE™†ÈÛx®]Û©0¿Ó/µ´3¶±eËlnƒ·ë­Ùö¹óŽÅm 5e‹^8Ë[{¥)e»ÜÆ%d÷õµ‘¦Ñf7`ÿÀfœÜ f–ÏgÚwdù¨^ù-=礋=Mšìæº\-ÝÙ~ð"Ü3vúÄ×oÑ[;è0»9wgÕ¢íRT—ÕZ¬Ýçö$ì†-4;:@ãcý^ºÛÒÙõœ®qäÚ•·$]¡ñ£öm·Ãß’öûîR”ë^»(ÑÅì¶>a‹¼®Kbº[.jp+›XÓfÁžÚÚhÌmŸ¿Äíç±³ªæ>ñc\–écCÙj|lxÍ,ìø: ¤XI×3…`IæüH蕸Jö‡·¿ÓR+¼|££a5¢#}ùž×ðð;ùú_ª€îÛ·í^[KLgI\ݘéÍÑå7Ý:ŽøÛ”X-²<¿ŽìŽ€lfõQè¼#ç´È fXø…•‹»6Ýs5b;0@rÇòÀz¦]Âà_…ÿˆ8ý ¸³w1¸mb|08Û©u»¤ì~Â’ÒÇõ½±$5®º`êŽõ# v¼ÆÀAãc”zàïv³ÖMµa]¾gJ4Q®Í”žÏò©ùÕ‹ÁLSî´è moÞ!žðýn32õÑ•¨¸ÐV²Z7c`ŽúèƒË^"CfæÆêœ*ÙZ6.<®Kä £‰4Mî9º»‹i©1lÂàð¶Ñôí©m™äcqŽéß¹ÈöÃù;Ü™)®9ÀkƒMx8Y©kÙM)öcÚ ×¡^îßl?¶ïôѹsRßúr˜ï;ötdI¥ìIYò±ÎÉ9= U¶9¬[(ã¾xÒk›µž÷ò%?%kjs®Üà·ÔÜžÐÊÎO"yr­»¼g«sŽrÄhÙtʨL^8Óù?²z»fúÜ­wí3pÚ5Þ³Ùe´—U³ßÇê¦{PóÓØß« Ø›½i±lz†õ¿2ÿÚº·›o²éµ5|¶%a¥mÝ¢Ë\OÃ<’Af|ì­Û­~×IÝŽX éD$?'­èõ›LΆZR{sæ d³[‚wÏøQˆq,=vWTeQ…Ñ‚<Ã÷u¼Î®ëç×͘ßÙ –ÿ¿ÜV¿ÚÞtJ]·Âm7uõNßÝ]ý但| Œ-tÇbn‡÷1žw»9Ÿjc$[!µ¸e›’zt·ÖÓmvÌó~NÅÕŒÏuÒ"‡qw܆hºŒ@! 4û3F¶!ój}Lû¸ïÇ,äÝEpA¯//GîÙ@¯ö·ƒþ} :MÑÆ0.ÒC"mõÙ€¹>ÖʛޠÛl,Ÿ-`Ô9o#áñ=&ÌrŒ9ÖÔY°ÖÇlG1ëlĪûrƒ-r1×Çú»Üî´ó×ÿ3½G븞§¬7à_ÌŽÁÆ––¨Â7Ÿwï¼›}ö;¤LùóÌýÎÛÿNeeÊÆ_•™÷½wð‡˜¸+²_|wõkï·Aܸ5z·¸¬ËiŒôTíÒÈô»ñì΄á™$dønïïøý\³™°a ­³a®Àå)›î’ÉG“Ó"uoé_ê®±}@询ž»Å~˜Ú¸m„°ÈHŠáR·Å×üÁ/ÿ•öØ2žÀï`‡þçœ Jä` ‘÷¸r› ˆ>2›”Ûó·ý—™ —ò8P´_Ýá’^ _²‹•™á˰Ó-–àËqà8þcGaã@÷ªi f-°Ùj·=—MÁF÷ÿëIþ7–Ö_—U5(JçF„“ß_ñ1Âh#{ÓùôëÛ rÚUÜì²PW7ñ|7~ÖÕØ>Ø«ì¶4³ˆÌ¹š…ƒõ5Ø–psëHÜ$‘Vsßù|ƒÚñÏ/fŒ¡¨:“_ƒm®ždµ…,#ô}®î5L¬ìŠ>Î=ºq@ë8Üs»ÉS;îúQ½wË-<ž€5è\¾ÿÉë—%S·  ·.Â,iú˜,q<𦯿•]?Ç@V¼%·xÝÒ‹0NÛ´ûÜ@à€`·ÓÚËWX8ß}í> ‡÷3yšMS9·*ç°Iüä×HY@–[3ìÈCm]ÛBÒ-’Ñ‘ÝÅ¿]ÍPÊß°É/Kãl‘C^½ƒDCw)ÜSdݳŦmM¥µ©ôAlvÇÁ.(u`Û×ñT4sMÁYH«”û5 nÞð.”~ì+¸"FÛœ¶” –ç\zö1`az—…OðÌZΧFºpϵ¦=Y¾á-ú k5ÍM‡®jйläéQÜm\[ÌqÕ"Woty­+ÖÚ âXõ?xÿMÆg‰ |¾ ש–õ5‡myÑlÿÑ”.Ü":ß57÷ðÃ[ßø{W2v…O³áÖMö{fÊÕ„ÆcÙ³øïWÆ' ¯9ÐÝ·çþØEk ÿŽ2ÜN­š¥.»ðÁkhCdËI;Ÿ.ÚU[ø¨»Þ¥ÿÅÿáÿ¿ áÅܘ“VcÙž¹7<º¹Ú÷-èpsøÚ¡M1n/ìë-´1]þäê¬0ù™A¢Ï¬PxØ!È«õXne© g¸³q(";øtÍ¥a^a«žy­Ï Ô®"íA@@Ä?S¤ó—"ˆÆi…¢O]) ýDŸöç)«ÍrMãB·þ=Upté“å™áçЇl­sÂ;¨'xà¬à”{¡v¬æßj÷³èËÍmòŒh!•Úä×¶ë‰*«›Ln,Aø!¬xp³§µ¶Ü§@cëƒH““t„%Y{e·çY¯ˆÇŽ£~šüB\æ'æÑ4áA^H _×’ê³öïJ*#ñ0¶2­lå¼FðÈ]–öñ7"°Jì­ŸÌ!´¿<ò€sÈÿDZfÐó:Uc;.<¢øg~}™õÂ÷¿ŸÈfdP¥'}£JÞrܘÃB{@œ»\ièÌþóè<&T÷G¾éS,¾cFëw¶0ºHñ'\M‹ŸD8vT!T¹×6N˜vÕ}à=‚èi?Ëø.îAdC8öºß®¿r zCÈwö‘P;N¤AòP°»øëQ¤÷ü@=¸{Q**pƒâj““ÎDºçgü+É9®—"˜ÑÁˆ$GAïA&/äÐ"‡ÜØåˆò„°Ú­nS¾î?ÂÂÔûÙ×E UV«|b âYâ]³Aˆ‰ ëß²Æó»oñ»‹¾ÂªBNâ?9æslÒ¥A„Œ_PO-Üñ“Va¾‚‡ˆ»ºc8T¢5˜•ìƒìL¶KT<Ì +y’ƒÐèØª ÿ#QHœbÒS@<àD‡Zö€Wª=n—ÍS€uƒåšÞaŪ·§=Umêý[ɳÌp©w T`ùf&&:6˜-¦u*ËìB>›ƒÛ;ê}ß7_‡+Ô£žÐh& a ø· fæQ»Y9êýQÑ=¡'­Æu†,JÐÀÓüânºE¤Ry_ÂÀ$¹—}TD!Á»ÄµŸ#-ˆlY ‚XÆ#X].M›¾¾-!keÈTÿˆAl‹ªR`ãæ „‚¾/»Ç¸+އ¥m ³^E˜Æ¿;Ÿ¢i‡rILü°@w`"ˆøZ¢¸0ª 2tÁ;< ôŽÁãõTÄÀj!±¬Z˜&fª£Rq|·õ7óNâß">êÂÛ0`Œè/$†¨ Ȫ~–‰ÂvpœÁ$uɳHÅ1ˆ³$œe òïŠ~K£Æ´]Ìêÿpž»äßP„­]çL¶‘÷ï/¬ÇA^riøxÏ y‡þÔôôóúÃ`“w1üOb-;cshÜyD0¿Še½3dáÈbÕ}°$—½¹bìëá„’^)<Cd9/.™€£êªÓxßÎñaù}ÓØgå°º­7¬ÖÄÇÔ©teõòv-q¥hÈÍq'³ø,›ÏgÔ@§5Âc£|ÈýŒsXw'K„û5x=äï#N£Ã¦‰xM$H0W9°öóâŸ"¤ëUìú]õ˜*õ°„tF2c™0¶Õ0#iz+QrkF`±Ù_Ú)¹Œš-Ä0Ý›&YŒîÓ2×Bd‚ Q.дÑj´ã"ÄEè ?¿­žÍêE>c—ìALgå@¢ˆA^Á°¦!êG ~§ÀŒñY éºP ™Pâ?8R8û'. ÚkÌê#ÇÁ@ñÚ.l\Ù¢Æ#öBe\–\‡Îý±Ä’Ú*J¥¿Ø§D=òl~ç!ÖêÍ,n4D¹h.ÎÜ^Xî/ hÜö H§»–M ÆOTJüQ›žæ˜¸z­§?9ó[÷yY¯†Ãkô*¢Ð ºÉÆŸÈ£ÍJì*ïÏÌp°¬å©“ç($+œeSMªá㇜å 6bß5绊…­ _Ô`ÔY艎rá8J§ºÕg0-Y¶„ƒJÚÒ.÷ðÏ«Hˆ”P›„0öº³.ʯ¿’‹òO‚5I!eŰӘ–.5J„a`8vrÜ»h@¯K èkŹ᠞…8˜µ¨Q‘–r¿$R¶ª’ $n¥±—ÂÝL$æ¥5j5ÿà]N˾$i³ "bé:Sß±DÌpâxǨ+ŽˆƒQÐÕçì£Â³ Qû»TàR †nŽ`º}$wèbsqj>¨R§*ÌžjÔZR\.•‹Àµãp&Y4÷¾ì!Áï!ÙŠûbtËÙTÚšPr ºXÖ»EXzÒ¬˜cÓ[¸úõPij™ž2ÎRwÔÔ˜uF“]¬0 #¡U ½‘‹Àt5Spì+ˆÖãÁ û¤úõŒcð²êß©¨«áôñ®DYh5ö²[ôrðú ž*« J-µ ÈA,¢†ÊéiÓ«l?6 A‡S¬U‹'‘«9ðµbØ!¾¢ ìXŸZªÏ¸;³Ù%o\æ0ƒ¾!“À–kTbŠ·!wÝ ÇKŠP¨j£°D Žˆ&|¡BE爵­ºKGËš’šHöakb“@1r±?YÞ/A<ˆkQ $3È-´TÔâw3a‡GyõÂLí»Z |UU?‡Ë…е´v¿N& ŒäQHb¦ò©Ýxxº ÄIåóiebk3içìê9™D4XPÙã0`Í¢^ÇÙ^|$Mu}|^ž½’§ILÏ |;kTˆI íœ 2š*m9Ï""LYË„È27zhLÞ¡NÏ£¡8'+›d·%H, #<êYChÒëäXÔƒ^aÙÛVIyÓñ—ééò8t&ôù2c«Œ¶JJ$S<­¯]–ÖWöS ™e‹Š2˜–¸71ΰL ƒ´­ýýÖéã穎I»&¨ÃùAœ)hTEŸÝšdÞ¶`þk£Ø™›#j#¶ó çJýÚ®ðu¦Yû 2ãjºDMîo òa߸ o!‘ˆ Ħ!i­û„½Œº«ÖCÙH„ ¿¡Y\sÒc Ђ¹6ÝB|!¨Iž]ÓA \‡ßû.®—ÀåMOR+7q#Ë]¿ko¾h»2$D#þ Ï€kC•…È&¡I`Ù O¥íSÖ±œÖ‰ük éRLK¾iKD þ:«Y* 3 {b—<ɲï ο°‹¤o/ü¯-æ²öñÓª©‡åŽuɫ鉂OØ@PŒ*gn÷A!¨DZ?އ½SÛªæKí!IŒt©åÑL‘©9‰RÑ>!‹ÕP“¨²=¥Ûä:&D™Cbp*ÚԣĿáÉ@ÈÚð¼.UÔÁ!hu®§ù.QGˆ‰îºþ>Am“6'^Éëjùez¥¼ï#ÂÜž§Úi=áÝ£^äC´#¯öÝË&W¾âÀO!%‰ƒmý6cïY™äFt«rÓ ©þRÙõ˜ „«ˆ-¨å¼kˆáÀ‚:áP°:+0hÓO+¯ñö)Zóa©zl÷5 Aí ?u¼þÈ5¨Ì_6¬r†š³+äV5¢ùp¯E$w¤jûöWM¶ø|ÊþlOó7öª"yßû©)%9ŽÌ¬ï´Ð‚‰÷‚µèÏIß}=›Œ°=1ÃM„t#Uîþë Ù=Yåxh‚ŒÕ„Ýf¾Ã ‚B*XËûëŠÙ‘º‹Ë)ݼÙ5H|øÌvÕ¹‡ÜYÐkŒ8jºdõ6ø&›'ˆ¥Œi 9üu7µ%½u·4…è Òô “|¿mÚæéÑíX”AˆÂÐ2Ë»h0“µgpEYæx‘ZK•×ÁÁl6$Y» ƒ˜Å"®ò#ı1Ÿ·ò—E ÿ'µŠp,û¦ªeΫª•ɇŒ­Å“À¿ó+ßCrÏfLV÷p§ãö Î+Æe©©]0nþ/LÌÎÒsÎBVÂ2ÅrqöÿFÛ#ð>ðélx)Â~-þ§Ì©X¢Ýݰ•²˜„ ˆ »Ù`_é#e¿ŠkTã9B¨è›‚³ŒýÔ¬‡ŽC–¤ØÖâÉÄJØuÔ✵å³TSZBz¦±¼ '¦ÞÈ.Ù\È-s‹¨µâ á"ù~‹-»Ã`‚Fà]àR¥ ËHE^ÜY¥,òþýˆ„ˆlÜ}[€¿õ#í Å×}'´ Ú’C(â.ïd‰Ç„/>úD…$e’ÔÚüŒcc2µöù³GšÞ*D+ƒ‚SîÿüÓÙ|©3…Ãw[BvÛð—¬kîG,Žšš ‰KCù;!¸½q®ÉÂxœAÜ™O'_ Û©šœLlæÈ”Ê–aõ>$>x¤¤s÷¢~mË©L_ÃKkX13H8{/˜ä§ÑÄ 0Ï<Þeê?„>qªº d Гªˆæw¶¸rÁD—þ|ª)ÝÍù^¼E9ƒ­‹kë 6¿4°ÎÎÐ5I™q#ôr¥.@‹ú1J¬wIÃÿˆ!¸ÎÈ{³å}É>‚–DD(ûÌ""¹bEIË“0yƒµV­ïÂ9ýÚHÎÃam$HA:¤‹ïÛœüqU{½Ú×»šóë`ìtBLµ$œ+¶Ý™±MŒ­$¯Bö6iÄËâW„&¢¸#z2åÁBÀûï.ƒ߈ˆt'Þ0Úȼ[ígU">0CEguŽCk”¯â„…D§°6…ÐM8îÚ^äo“b!N¶þèJH¶PçÒ6[‰OÌC“Os5x2nýqM7€gІF{ÿe(À¦Ç¿Ö¹üºƒ·ã6.·þ’|Ø2v‰–âÿ„o%ó¦ôÄïFº­_ð.ÞÉŸ×ÿ¤Aÿº‹Rw‡hšÊœ ã6$:¼--ÇΔ±\jÀ— fÜí½äò‹k²WßVg' Byz8 6˜¤Ù¡“ĹC W¯„»v<¿¯¦Žþhä‚’ÿ:¨ž…rÙž«QÓ\$ÄÏY’p5²œ ³åV‹ö¥=™E­›Aàñ¢zhrcþ¨u´«Æ;>ÂF±Êï‘Ûs±x}7áAÉ)^˜”m^Ü´ åFDkš°Ââ²€©ÊÛÿXõ¶èaè"×B Ü¿Á†Ú&J² ¸ÿµ•5éYdŽ;Ïÿµ6Ж»lmðö3Öž4¬¡Ë]¥-@p¨ Óî°uú_[Wÿý¨OÁ¢‰vÃÛhûï¾&gü|˜ÍüíAûÒ:ô=8.•i—âÜîï×NÜÃWŽ_ oüµ@ ¶ùÃųXÜ´Øœp”üÙN׆6ȶU_kºœCrEšEBS{:ƒl+˜e¶jx'I6.Øl^t•ÓïÒËaÅ!qÄ>ê-½{j³·Â¹Œƒh7\ g90{"Ñ{­ãx7•}ÅÑþDcBò£uZÜ–ÄvKØÁV,|Î^2Â9/“F«°¦,l†Ðd5EQà~Õ6sËú£qÝH‡G4èþõ®om†Åî”"{I]•üо `äÖ RéxàÝö›€¯/ŠË«ù?Ǥ g-gtìž#ð£ Dã@µÇÓ5“¹Uφ}.±™䑦ºý»tfÐ5Íçö¡Ä{–ÊÆ#\ Érùåïq…ãëûݱ¸Æ•kéX,§-Yà…E… ±.7Ô™]E»_;núkq&’C’kH©|¤ƒœ/Ç…ièÜe.ëé ãSÕ {¨„ó9•eê*¾a‰´àm¤CY”ú>[áÄàj _3kqI*~ž§sf=ïYN[¼¨0ŒrEôº½t•Ö¦ó±!\6Eΰù®¸‡pm&‹òûµÐ¤9çŠ++xõ_[f[䜼MÆÒmj’´Ø¢UØ»'û};øŽT-¸ŸgFÇPPŒ” ÝïˆÈÏI„ÌÝXOÓè•ÊÚ[Kz¸Ä®>‹žuD…ÿZïÎÀ­røüwÑIjIj ÖßœÙBbÅ*â6l…¤"0ö ¸mŒÃø¶F ŠœUÅï_[µü½†Ïüˆù‡“|Ãç‹Ã¶Øù ¶×ÎAB5Ãðƒd+ÏÙñ ›3Ë' u diè§µ;ÎÂû¡ÒÊä¯ €²c®‡Ä›…»O–K2yE˜róš€ ç]9€8Ø)Åpã rè]uä¥D+ ‚^ |gF÷ÔŒ³Y®ñeÚ‘D,‘—Qy$YbS>d^Yš .ù¢REvÜå¢X4õ/.Y³<q+gÏh ⳇº.…ïh‚rD¹œáäÉçíQ¾†Á°Qh,ÓiZCãUã™&?’€ lñˆq‡X¢v{mË;@èÂT³:«ÓÖ,݈sv‡;äöh7ô%Ó &œ‚&_¾ßDê¶ûl ðÖ¾|1/\0ER>â áë¶y°ùð\ÇÝÓM‹„°¡•`¿zH7I$øIË0ÆO×ÝÁmA›¦•Æ • ;`)êpÍkÚéÆá®–Σ×ûç‡4eJÅŒHO×5öeó¦æ8´ÚpU|~íPƒkW[@)daÃÞxý ¯uß]Œ¶Ó6T*2Jg-H@Á@Ð Ó âE6–ŽËI´]Mžg‚ràcäï è!#˜œÙ ²@#KH`‡(¿ÆÝ4JPp»ÝNz»gf[Go:W6´óqPBv¥GѲÚͰÀ¾)•ºq„L‘ªX[ª°ø¹»ómµÒÞP¶Òòö¬m½™yÐ÷ˆ„®æ½­œòÆ0M2)ãêl¶Om0ÊŒ ­Þ¥kÃ]q„Xr½!¼ö¼G m\ÊiǤ vBÈŸ¥óhû‚–ÅUÍìФmE ŽY?âzl*´ÚT„6EgÝÃ&Lºñݸקä‘9R*ãž2ÉN‘Ñ´¶ÐN;÷#¥4ÅÏ€ËͶEr¡âgÈ=–cÔv*‰³NE§H¢Ç ƒ¿W:i؈쥸»Å`^§(6iâ-iõ ßs.„ñÅWK«á‚öûâ–µ»ú‚jÛ·2HÌ |W'MÞ1²X¤wTP>:¶ëi±}žü"b‹ë{*¿ÿCZ¾S~u_´¾‹Î-¹š -S}€Ï3ÿuÓa–;°¡ \¸¤ƒ»5‚@ ¦Í}hϲØx ´Lfhdl›z–˜¹ *ŸÂÁÖ±è„SÍĦ…¶qμŲÐ$ö¬~Ž”ßÏs°8¡^Ô¦ß9. XîDLµ£<ï]¶¬ŸXQgŸ*JåmòûÎfÁºñEªpw™B‘{Rñ S'>V¾îB°:˱ Yc]¢cápqåm ç…1:7âÛ‚WmKŸUHÄC‡¯îñ'‡q÷©Gg"ÎHFÞˆ@C¢…÷ï¿Uœ]à€t2U­8à>&ÒiŠm»rOàÂñ,®Šù´Ä¶ i*6h…@ýBIÞQ«+ëi E¥­Q–`âéä¿ËzÓâ¼xBæðÓ뤆š“&vHîÓdºA²ŸúµAê¯= ß.˜e®¹Vý'ÆßXÀÊò BÁ<”E祤ùƒ`°§É-¾“z 8´¥nËTå%Á_ѪÖÒûãy¿Í¾A´àX^*¶_ä~¤ /CƤqÎåxèÌéLûÈ”ìðŒ½›þ^vgÃvöÜî î5¾Êá‰ZµOl+è%ƒ»ßN\þ¦æ±³>“´š*¢$w°ä‚Vçl.j9´lǼÁ pN>wýüe–©¶„äô¢øsæîý…òabƒ8³‰žÜL.rà'¨†cñã¬O3–QÜ¿R¿»˜õ:›”uÖ:·iºƒ*;µåÇhozf‘nÐ)^"G;r‹ã­ œGÓ(ï¦k±[Ç5ࣥujùüµ¾û›¶—mQ¡¿þÞßù–CµÞ,²ž»ÒDî F&Е«†ôûNð§–HŠ’}þ¡Î’ñ#prΑä´ùu3,9®l8"….Ædѳ¸ù¹ôûF™a-?ƒ0‹d½u­Ê½úž"ŠËÄਪÌJ³©…!Øeÿ{RÉàP¶‚@¦GxŸûÝ®ÜØ! ÓqnÆFC¶ÂabÙúw–2ÒÑXz ø}†²Ë¸™CìûÑu¶-â»Ynšl6Ú°Vçæi[J ’v §qûäSKhp»{Ø–bÔu\—Âí|ÂD ñ(2ÝfG Y«f¸Yuìfܳ7nàÐB·<Í[~ØÉ5=H‹Íí·Aû.7BÎ’ç·4‘WÊú†Bù xN> î!:КÝ~qÁuÅjÕ¯j¾íÚá9ß³¹óæ».êö×MÎq2iCžNf[!—JZÄb£ ä²%‡‰s#²ÂaM€új¹«Èö[#ÿkøk­l<%׿ 7mVåÛë6©˜]\4XªÿŒ@¹ª~}¨~¼mñ€Ô …;1†Ôö«¡idQæ‹1‘_i°u&óòV–<Ï‚ˆ †:ˆ[‹p#|•·üZû°™ïM³`i8ìP§u¶Rép§p|c¹]Dæ9O| =¸6 ®y3ÛìfiƒQwSZ!ºŽXû#è@CÓti=W#Ì1 ±DÓ~Ƶ$M²²¨n%xõˆ yLîu>'–žÇí83Jø±œ7ž_q,m'Ñ@ÐûÀ…èñ?¹ŽŠë÷®Èâ+§²S[Xá …®¡m'Ÿ]q…¶€¦öI„r˜´0‹-³ùµ£ý´ÓÓ_³¯/5žÿàæ¹ôÄšcL°ëÿ0æ#¾i–]ÿ°>˜Sü™j¯] CFe¹DÝX¢åõŸ°j[)µ°+?ÁtWݽ¶ßÍE–ðÄãül‰ ï^£m¢; ¬ë—Z2jÞgr1MVnvG{Õ¬ÅsE¥ö 'È®ˆB³d•:M‚ÉàÞ-?ž¦$N)3Þ–”˱žÛxèK´w‰øÎ¥‹ZðiÑ 3™Ut"ßž§t5´wÌå–o¸ Æܯ勲ÀÁc í¼e±=~=ùè¾Ý—î×s¶®“zâ .ß¼:¾QÂБeTZž‹Å„lý±Ïž­šäS{6V»¤Ã›CãÄdÇì¡{ŽoKÎq×"=Í×\†!–1s9Âù¡õ‚aÙÔÿOÄ ÷Œá¯¥÷us–n›ôžòVj¦Éà´Þn'U‘§<í‰6vcX¬ß`!+3˲þkˆ5<–µqy(ü:atOw[v*‹|ùš6I«E\9ç`hÒ“µlóø×™ÛØô;n´€ÿ-v3^u´9ó«©æÛ6zÖ`š]Ϧœ¹h™–Fý÷|ä¯e]üµ,¿n0†}Íȃé›ÿLƶآË-Äз0l‡Ë(Âh‹¿¾µj¸8îõù“Åç&~õXš»Çþ±²àmw ýcCòçDÆ›zÙæ6~¸Æ-K²3Pô•ÜÖ™”WÒ3üÚ‚æ¯%„¶}}ú)òiWÅÞ|´_=è›·ý‹ÏÎ"Úï†Ø¼uLˆ…îå×glÀèãæ‹±˜Z–Ù˜™t%xµà·»Bá\­#íst>Öµ$øÏ[ß#q_Ó.w×À‡O¾1fÁËW%“¸Aì†ɳ6Üefo¾Û©òƵØû”ì➤µ£¹v›+€oµm#…t*iEvð†@#´æbÎãngÙÔÁ‘ÈZ>®É÷AkŸÅ“‹Â‰—lcÝÞô¯ÉNgi³åÓú9 ¸c¥Ÿ7¤W™Ä¿ù_ÝøhÛâçΚmèý7ÐÀû|l…¬œ UtW-Œ4Ù‚ýu¿†zñ×öØI©³wNÃR„š’ˆ«³9µü˜‚7…“Þ¸ÌsÑ?¸øÏ-+¶-eØudvrin¶Eè:û;)0…*‡KžcIÚ¦åVhûAù]Iï$X²¼»¶îáÙB€5ç~ Îîi¹©’m9Öã -ÿ,M”±îiZÞK×½§#>" ;ÂÍ0±±á!¿ðN¶³È„rÉÙˆnໞ”Õ4ßåc¿Ñ?(IãüVÃß¹c}Hßó+ìc·YÔ0],¤v†M؈†íKåµlî"¨ú㺠™nŒ€ r‚÷³Bô”í|¶">g“üák#L!fH•Ó“²QR¶—]aVûÙó¯%÷¥[þŸ@i¸šO$wµ½LÑcÞ”ë–lÄÂ6-`ÏFS…äEÈ £`ï*{ù@EºN•]vcÏÍÎ,Ùʾ¥Éµ®„ÂçÞôræ{pwÙ&b„ìú}ßìÆÔ_W•ÿ`¹¸GtÜdGÁÙŒÏlöÍûÛ²»ÙÅ_[÷$ïv(+8öF‰âpö%´CquC-‰…ûü0‘÷î- Dqk¸mîk·_Ù%ÔÁÀ]µ³5–wÈU =ê9XúË3ök'.l‹Å©m–ÒV0.õüÁ½mÆ­Ç´[Òìòƒò¬\¶ðÌlì!qØ87Ì‘¬¾G¨Ú+8Š ÒÓÂ4Ù„÷k•“yf ÙîÓôèà(2ìÙPÛM¨LÈÑ-·…èîfø©ØˆG$Z§ØoÄé¯;y/hÇN¡®dm,Büt9ÁeÚoÄ»e·v3ã¿÷Žðå¬çPFP¨ T¹£àY!­ôbÏ7EC²Ë'WÌI2f¾î¹ªo*’_;fýk±jŽ«àcfé=V®šå,®Å%ÿZsøëÈݹq6ÓÛNÉî"¤§–³¢ *,ä‹ìÏB ¡“xÐ µ{ß/iýÛá¥C€+7ô@^ÈbÔ¸HÌ`¶”¹‘t3zõk× Nå9`’›Š‚ð mÑÚ«ëBXöfK^ñk1M¿–MÀ¯Ww¶ãŸQ{x4$»™¹íˆÒ¯gö1I™—ÍÉ\õÑÕ“LÂeÇ:ýUwåKwj ³yÛ[ÓëùÒ»yi¹X|šwo0{¶|7Î…¢ÎÖ¸Þ¦­hÿÚmU¿†¸õ×~펨_»æ×n®ù`æ0Xc‡!~Ž» Z{=ø›ÝÅŽÐ)=¤((!pƒ=o­ýuàÏúÓ›ÑÂèÇ{FFaC®J{Gñ÷BLW÷¼ êW›ÐÖ?ìq“ª¿†»š,™«Ó‡ù.<™¯&þ:fé’±ÝÁ­­y•Û¢t{WW8`€¹%8ªå´ÌV%¹Èj'm“;3dž®Cfou aYdH–± ƒ]«Ýaz`ÎìôÍþæW¶\=ŸÉÞüÙÃóî¾!£ðï›ì¶ø0T—„~Ý@«e¯¿9ë4Ö1m8¢+ëæ­3ó+cêä‘ zˆ¦“mOÁ…´~=×]/»ù÷=B Èîh¢4ߤ¡nRÔp¬2!âhÆ££©¶ÉŽÜÓaÇn}Oû%rU [Ò¶’.êêYÝŒqºó7Hv";l{_­Åúò^á #ž]á^S`‚oâÇ:AÏJþ{Wœ[r‰¤;éóïÇ!cI¨®®gúˆ©n¾bîØVé‡c»üªý 7‘kZÔöÐ ¤€H¿Uq"6ÿó¤–¸;tކ ×frª|`lo¾j[­³xyÂû ä©|w[ìýý€7šåë÷¢JG°ûE”v9(‘­Ë´O é Ay¸ Ð-×¼œïïÍ̘ýP‚Å›öÝÝ®uòë¾Z"d»y$ÓŸ³KšMû§¦ãÓw–c³LÖÝL^ná³M£<ï”méÝ,Ì߉®JŠ å@RSt®±r…¤; ^eõ¯¼až@ãá}Å­Í¢¬ÆY~pÙßTcn÷­-y¤·­ÖÜC‚ÄßLJì$ á¼¼%·‘–áÍ«²+bZËzhé½lwÃÓ0›ôËÑÚ{ïhó>6Yš5>¸ÀÛ KGЄ̭Ã{gyÙuulRné©íÞ[îó˜ü Q`JÁ®‚úkÙJ\-‰-PQø›Ìò«°£^ÏÞT¤O‘3\û7ú½f,:q¦QMwÖlzµCÙü ÎoNGÈð$Ü{8BôKíáœA]Á«³ýŠ /$Ÿˆµœf6?ñøö»2JüråµÓUu÷Γ¾#èpÆÂu´ÁÕ3ÿ®0­rëKs`®ej]£ÈÌ8ÖFÚŽäº~8&?S °Hbïð—¸}Šçˆ|á‚beJ¸9ËX—bD“»|¾vFÕ]^„kU·žÕ@ û}ìû‘À– µìuºÇüH òÈJPH‡CŒ, nw‡›Tdùlö%,ÏätíÛ4DR~m0÷h?¡Ÿ‰ù+>µ=Ÿÿ¿o¿]¯—‡"vqå6Ûd2÷t%ë…I±–¤ñF ù¥X÷Þú 8HTÍuoïnGS-ÈÙ‚ læáDzkªÅk?/\é¬ÕWÏŽfpØSyw·ÄE\m)S(·D¿€ì§.nŒ-G2Oy¸1+‹•¾i´üÊmdž̓„fáã÷àÊa®…ìØ­–àÝo¿ÁÄ–;Öšwßñ5i¾ÛFkãÃ_Ë`íå󳤑”`9F#朙ØÈ¿¿¢ýTñ íùˆ(ïĮİŽšÀ€®cÎo7Cj&{I€#°ð8¢üTÝÃy/Gåt%\Þ÷›…).ÌA³XȦÌlœ«¬ÛÕºÓz7‘ÜÞjÇØÅ%CˆÐs-šõ¸nàÃAœ‘º§‡wKn^ä_»ý×.¡ó»¡m•Ê‚|~Ñ¢; SZ3Ù…›Ÿ²3â¶€aãE“ýºÖ¯]¶lÛ–àƒ“ƒMQaWk°¡¾ßíó&Cšcá/R?’欶?þEÑwÛã_K å %vŽÆíɶ[Év öJ~p‘85¢{<ÃݦCÝ ŒÐ$¶œ³–ÂÈ/2² m·XRX»gÏb*ì¢àBË9š-Û â+cà†˜4ÈÐàÝ;µIºiŠòÌW÷ý²BwINiW ›Ûµ&–Ðm«³< ¾©mÕ†b}ì™JŸ’:R8·×ù»Ìò±kîÚ8ëò6Ú•>üÇÞvÄ¢ü³cQ'<çÑmÆ7,ÖsªO^‚b6/mW7ÙÙW­ø"ƒ«”Úû÷cñ÷ÍïòQ¤ª4å°0áëù·æÞg÷B»uá×@0çü,÷‹”ƒ44ðF;$hK V{,dÆdÄžC­Î2ì£|˜±@¤é&¹k¼t#F0‚Ð"bôÛsŒÞµÝý×Ѥ}¬Í6’ÿª#©õ«’ÌrXÛÛùZr´üÞ~q÷sî±H·Ðr<Þ£{ÞÜ+œ}‹ìε|MwŸïË›Üýr;ì`Ñ=~9ÒmÖÌ‘CIÔ«›),ÂÕ:Ô{?æW:zš~ížgN±‰–…Úõ,v"Ÿ -’¤ÖtåÍ´ùkIíC;Ú}»oÕî†þµäÕ¿–©æ×Œ¾9š=·JÁF;¸·‘üÎü-¸Óo 5 ­­üÿÚ5²6 ÷ì‘wçͬê²+¬øÄܤ‹`@•š™M"jEþ æÚyÇë—ìÒÇàãu˜¶xÄüÞ zç<'c‡p€Üd'àS­ÍMiýk‰Ÿ~­'µ„Ò4ñ¹Ëñ&üüØÚbRË×õk«³{ðµ·ð²·uã¡îvNþÜ{WØ'êQ4ëX*£‹búײÝš:îhç&DŠìïз\Y/÷¯WHqèx‹©\UHbPè0´ëto÷³^Ãèí—¿Ãì'b•VÙR'Õäþ<'"Z~ô·“íQÓyš«æšIWËÅŽg7Ík7ä+dA¶+ùkZ”ë9ê"WÝb݈3C*n™}JèˆÌ/yB'ïí tñc¬ãî72L׸w½@;~øëö:.õO=œ~IgSŸ])r+-ÚÇ¢Ç=™ùV2¹j)W ù×r!Oä+ÒLR`Êk$Ú³ 4f™54ˆo(÷;¬M^Ï-÷žmSñ) \²²(ðñêk;4ôȱhŽô¸Äçh1‚‹FrJ}Õ›Ë~®ãC:4ü§i(Œàߤ-WÉÛ–ýÞé«+%d¿òý rS*ü"aÏýäf¿6ÏG2ƒw 9»³×,3ÁÄ,d…¿Ý ¶\M³þà”[×^ÁµÓ²³Ø´›Q¬qp?ÛV»ÀÑÌ–TÊÎÄZt"±D0>£)ýAd$6í5Þ…éÛºùÞˆ…tÚ]Án:É"îÚIöÕ(ËÆdó>øæ¸bù³’½Ýkoų¥ÛZ·ãxVooSà<öN•׈ôÛs„Yj<; ®…»,bÂÅG‡Òo2pK¨ÆN¾Bé#.Ô±ÝSù5qA1Æ`7ký¾1ä[Çé=ÒläÏlGUzqo—»Ææ_P÷^Ü õºá ŽGÀ5!L,~¯' ¾×Ю'œ¿aX‘r <‚ÇGw×Üè#[G°ŒŒ¶¨Œ@yÂÃñ-®1;Ån[óvÉo³’œªg¬*,•1á?3*`Ѿ¤v­Óà\IŠEl[*' Î"~£CÖQɬîaE¦Ó¬Öó6×hƒ-ÝZ~KÛ ²x·ÙÞn†6ÇãÆ¥=ÕüÝüf·G—'±ÙŽûU†B‚Íòs¹¹±¬ÿÊXj»In@Û‚|øq+ø b7eebÅð阥§r^¬ð­S–s™©cÇÑ‹•Ô]»MMŠ?ºÀ¡«îñW-·fÑ—aïU¸ëééoL°=/»´â÷cõ d ¶]å=ùo=“ñ¤õ«élÚý–ñk(÷Á¯¤ìœÛÖɯeñéû=¯þ.4j‰ž!XÁ)pÙ%t]×ëxÙÕ§ Çd‘Sùî=DVwÜ~Á¿öoÛŒ›|Jx:¶‹åæšUÓ8šÈÊ´4îïù<»t˜%Âñ’:x8»ªñ™q»Ú-#„mNY¬]»eK@=É-YÔ=r, /‘Ž?/ò ]-zn@Ò&ò7›,…†™ísÃþxSÜÛ»%@ûµøµÆé×r"ÿ~Tnˆå>® ­A•º¹½Öôx„<ûH䪺ÌNfÝUy7Ðjã:j„Eã0¹ÝÃZ®×í6ïüZÒq“¿û!:+ÙDùâµã9žÉî2´ôãÌ»È2‘Nùâ°ÈOw+ªÝ1I6¦BT…êɽÇ®|ñ Õ,¡ë=dÉŸ9/º¢®_+i>Úâ¶Ðä@.6³²|E Ù®¯f ö>fÈï>½¥Ä°Ôin4Æœ–Ç1’8 ´K¿ŒÏM…±†,Þc5ž›ížÑ¢½‡ˆRîÒ­¼i]ݳÝáôAlHÉNp_cwŽ‚Ï@ ÐÒÞÕ†c£‚'mâ]¥P·ÍC²›ŠsTà¤=2UM_ïä9Ä]ùOå›4Æ#•o/YÈeDG©2bä jdÙØmIÊ[¶ØgõÝæÿZö¥›]©ÚÝüòÕGvŒX|Ôò WwïwÙè>é‚üûk‰ê¯>²ÃYþnAGÆàÖh¹³BʧJÈçKåÀÕ¿;!¿ î–ï÷ëâ¿£Ìé­Ìq ðùývlïסÕnB>¿}_‡ˆ5该¼ñAÜЬñ¿\l|~æ]Aµ#ížœÓ #,mAÙM/7,ò‹=¾#ð¯õ &#œåJv ç÷Ø>¶·”fdÑ.Žáü,[ØUù’nV@Ëåöè¤ïGóÿ¸¯#Œ<܉Ô'ï}Ìw8¯öhùï}_–|ßH|Æ ¡¡öXàMù9pö‚É|…·EÛÕv€é׳°Ä¸¿¬©+„û…-j`€·T‹é ëƒ<éÚ¸‰— ÍÔ8]ÝÄWàîS>»«î¹³ÿ‘7z‚g®¸Ð®øØÙhÊ7ï4«&Pˆq²îûq-¡÷XÆiÏwúèWuÝÀf[U° |‡43ñ o¬7ÀÂ/¸ÑuŒïl–Mn¡kîËÓtߨU;ðs›´ÿÅÿöû¿{âÿŠ/…ïäl'þü™«{C«¸ÐŒ¸žºÐË¥ýxnD¹¼Ãû¸—:Î🇹¯8ñÅ×wÆÖ¥tý¤AhО6~`½ÏO„9ŽRWÿl(Ñ,1ÇõE*™gYeþQ¥…ÜÂy=ò(n¥\^}ÃÃ̾N@ÌzÌÄÚ!LW–!è6Íä{ý<8H™gx}Å ¼Hm¾'9ØkKû©ÉŒAPu™?ÓÏL£¸~CföÊ,Ó¬£ìD€=½ËÏ{&Ô§ïw€æêÆQöï£FÓü÷­5Hpñðä}óLó[­âíëÜ÷&jS™ª¤jõ¿¹É£;™Q¢G3ÈÊÄ£†}Çâ„©ä*ÉÁ¥ÎÚ‘ŸÀ½vi«×yNTFT[CKÑϹ°6YFWÝOäïŸþÿ!qp¦Ö^åó3+¤[Ócaát¦ÚÛ±zF9öŽ|éAΉ¹)Ð'’­söÅÁ™u^ý¸-2ã ¾uØ—mH®o{VçTá&uŸ|cßZ=§4j`Œñ¬Ü÷a g¨½eÁ$õ¡š>qN ®?€9õŸ5Øu½H8ÿľµ‚ÀßÅÑq޹ÆYÄ?Gü úÑ"X ¸=«—€ñœÓÛçÏ>aê*i¨-®è´s!ñ¤ºIò ò¬HóVÈ:SƒÚ7äîeËKA‰ÉàÓ‡Þ_®Õ›PÓeÏG¯CÇÆ:}^û—ãd=®=E­²MÜ×ѫȅ%˜Ér ÿ¢sÅIÜ—ó¬!§ëž5‹p**<Ô÷²LšbIU~ÃäF>ד\ýéч[RÇ6óö%'„OÄ(·ÙèÇö–ÿR;öª‘«h=YÏktÑ@J gŸ²Hfæéa䪗 ÏD~.u–¤xŒW!´³K€@S98†:‚—âÿîõË“¬}‡0ƒ´¼8¤„zô @ sü¾žu2=à`»(ÌÃz6nßrž´¦,á‹‘˜`ƒµFAhË„\ëK!ŽbVC»¹¿¶Ïɯeª`‹¹*N~'cDmY$w«ûÎ×Lìa–ÙH; !Âa~©ÛV2À§Ç .çL ôžÃîêáùíüyˆÆ‰@1èKáC‚Ë(ïü_òˆy%q çíÅR‘9 QÂþ|a/¬õnÙC!Øê‡ÞËßÏÖÈ“šZc~‰¹%ìáÚ£´È—`f/(ŒepîHÉ¢Æ*ßa•Q V]ï¸(MÕ”ù*éÕA“M|æÇû-†šyè[9bßADáïœìáEÞš«2Ë“U g(¦ãÑ31¡qBNÑ3•ݾC€ÊøµÏZÑúøvžlaî,é1_Ä/TÙÀEpl.l¥IDk=ê46bû©rÂ<³à´U‚a ÃìöŽnQ_aXÅI²hÃHW³®uÖ²§xØÊËCÒ½ÁVcçI-+ÎvrKâ?mNIÈkÀ¹Q\}‹׃ֻ腠UÆ%mœt9­´õuúÄòÈɲÁ¾‹í%ñTgçù…I5­ñv•€À…œ4ÉxФù“ÐzT\|ñ²d¦Âqš‰KXÊV8í¼–;ï1±ôÕ^åH¢â‘4ÒŒ¤!KÕ³ÛÅYÁGHùH8E}xº¼¹Äž¾ïÚ¤ZÀùTýýl`#cÉ*eÞ´\Do3m.’¹gØ !•M¢ŽÀRM_®f+i€–M¢Â­$„,¥i] –ÎH¢ª­ …áÖöCfR\õ´ÞÃJ {}߬Á¥/«>7¯bc× ëOžÔdÖñÉÐ ˆý`^÷ÏêàÞ‰r,39q,¤Ñù•ÁF1)Z^wp{CgÙR«Dÿ³ŒÙöå"õnÑH˜V˜ÍÄ A"‹=½í°¿`®.ׂ^áðÎ.>XÀER-al‹\÷X+x¢´ˆ>–Æ!caáôÑ£ÇíeÇìhù˜kts?%ï”`ß÷‹*_ž9b7/«V•9ý#ÏRt—“#®¶fa梢÷À¾"Ž¥L4Ê4™;rÉ sÏÖõ Uyk}4&#QZCÞzxˆVfIy•EÝÅ'ëÒ3yÂÄ8õ¤.Òïœe=`½A Xô³°A*bSÀ¬eJd6,¸£§h5'Óe¸¯L? ¹«R,ß#—çDóó/r=ǰ^к¾÷órö5F}ÕΚq'‰“{ û¥!x[VØË!KM  d©3²ÎaÔ’Õ ²?È>_ݺU-™ÕJ9–ÀލT€ã-Rטš.q¯½;‚3*ê1êüFÑ…ß h"ì]ìîS·%5µôæ. Iøá§„óÜ0ÆZÐ6føEòJFŸ„Å%y-Þ:¤CR.l›å± -oD˜Öš:öFì~¥ø©î$BÐxÕÕ/øp²cÊÉÑ6Ócªí榺E ‡!çxµš1‚aˆÞ=¡ »“­msݙٶ½òký†Á4³4}FD/œÊË88yÇôødP‰‰§>YdƒsÄ b‡ ,N±«¸Í/—[ÅÖ’u›ñ²ó±@jÛfð—N–ÓÞµ%å[ÑÚvåcûµ*Ûa ´“ªæC§뉈¸uuüxF&M!_I:]Ž.¨p Y/«$0ý¼³®Ä nåHU*„P§Ò¢¤yðò“»QSx‚ ¹ ¦êo t–,?Û>sr–*;%¬P‰+åýÁ/ÄB–øÈ#—Gœï `ûal º> e+Ä|¨·ÀýÏ=Ka[ ‹¹ˆBˆœ$Ú’!p4cV¹.3¶oôñÐEÃ<Ÿ™ Hâm¥¡3k?åxDϵuÍZç˜HÄ­ZàÈ¥F±H±†lÈkÂò °YRhá¤Îef÷Uí9?˦ò–¤ynQÿI¡o ìKÓuR%ã$ÀÕ¾Üäú±çÀÑu—ðˆ“ {ž‡z9AïÍî’X>£‰1+ÿO 󩴇ˤ/­ƒ©¢ñQ›»Áö ÎqRôV©ÑggÒIÅø²òhŒÈ©—Fà‹X ÒçK¬Ë¶AÂåH-m¸7‚#ÒÉÄ“ÎÍ’«'À½Á¤3ÑëÙ(JUüôÏ„ä(ï쥌ӜfâAjÏ”ÅUâ^Ž9,cFòrs ­xr7Xµ}άøëMLRç ="h_.]¢vÏ¥$MÚ‰äÿ éðpª¯¯zçj]_1.kh0+Ì´ØÄô0h*6¹GØlNA¤B6|fôÂîÀ‰) G?sÔÂá¸kÐr}ak|á!}¾^9%ºÊŸS*Xκõ¥Î(‹Ù‡Z2ú įYõ…8êg¨qºœ$Ú‘šscs\”šu˜‰*ÅÊ M[TàëÙÊ.ã‘c&Ä( 1ø¸yÔ½˜‡0Pà™RЍ,´­I,w:mЇe7ĤZ@`O§‡tMSf_E[©e._ßÀ3|ã(Ú›÷|(`‡ö ¡zÚym£´²X SÖ“ô•Xæ{²ÄW7dµç8˜õ<Ò=#ΘA-ýq ŽfJcJڲ᜜æa…"VJ'ª­>êÕódÀ(I2l“¤9»i‰KÚEáÙf¨Y¢ŠÌù~á4ÕV˜¬f-˜‡K‹yHÓ|†¶öS0/¤¾^ãëÛƒÆòOÕ¬™›Íú±s‰×E-(1È ¥qR+V™i8Æê°¦s§d*) JÖ—å žî8`Èãiâ¨=!©K“›‹ØÑ?˜0¶W¤ãLdwÖp /'^Æ©¢±ÂvZVËP$ˆ ¸†¥¥Ýc^߈kKBôÆÖJ;Mõ‡ÄÿUãvÉZ§%H߬–¡i¯49…˜ÈÔvŒR$Í< í û®µÅ:‹ÈÜ]ïXNW”oz@k¤u†pLb‡f(@¬N¨rŽâ¹×„Ë´ÚAØ`ÏAO)²]€3Å9³VŠë_ú,ÓŒ• ¶µ­lâæ’¾TæärÒ¢/~g¯¹­½ë-q1ÎÓ£Ÿ¶O‹>7À±M¿Éáͨ ´Y#` K\ ¡ÁZm%áâóHa’é&!+éžÓmy¦,Aµ¦sÖ;Ä :Áe7YaÖ™-L¥9ÏqÊ­ä¾Öò-=m$ÎûQh #ãœ4çaHȲ˜l\EÂOÃáIhåÔü 7²Vµž¨ô²bÀÕo?8ñ ñCø}Móá1 §#jtÀ8uä^O±-¢8´2šÉÂRbgMŒª!Þˆs¢e¶ÐS5ebG0‚ÖSȸ‰ð¾…c.'”¾k"‡¸±qÓêJš• Åm6Žô¢Äg†2Ðü»«ý‘ù§å™É|SB úÌ,ÅuÿaÖ ²D¥ìÀõѵxÜØ·ìs… V¸i›AJ…h,U–>¸®RC0Ûðhó†ÃZì£ò5ÄÊrñI°¡³ë!~/ºº>ý³‹ÈñÉ@ÊìtÍŽóžg8ÀƒD6€t"ü0i*%Îd茼²Jo“‘7á<ÂÆGaÑ…Ó&ì¶6}í‡S†M£žÉ{Z'c•aH’¸¬Ýz—æ8~!›IR’gNñ¸ìŽC'(‰ìó¨Á'{øƒÎ—ââëz3Œ” •X¤l8zm•CUÌñ[ [!)ž†eÜƒÚØwÎEiˆÛ4‹“Á úm[³sι×r°_$ß©K–ÉÌô>éɱ·îû¤!o?ñ/;0!¿Å$¥hi™ç˜âžÄ 6…؈(J.¦'QïÛœYÉU4*1,ß(Ì:æh—¤1y°Ú'5itŽÀDé[A*´Œ]Z´„‡ðŒ$,caš°Ô­1³w6Hö¡·­s4y-#]ç̪ϫ]ÂJ!U3ïËÀ@“j}À…Ïlˆ?ZšàŒ)©T¤^ŽçáHVÑÐ .‚—^LÑÜnÀÔEŠþ„ðÅ 8gÖ3!Ë39@'(-Ü…!0ç´cÇYSúw—üÙ”žÓÆò øn·?>‚œˆNœ„ŒšÂ=8ûD2‚G”„Ž‘ƒX5¨ë$Оkδ Åe¸IZ¡¼ò´€ã Šp,³Æަ³Ô㻚\˜„îZî,öΉü¾èÌ€ò̶Åƹ;´m5™ÿb¢À¥\‡®L÷,îa¨“ÖQáÚHe,ïIkB$‚¨ˆlÒ„gÊ*ÊÏ;Š(Šèˆ®7*Ì¡šç‚€vu2Y/ §^ÀÉ$’¨ˆ1¨$ŽHã” ‘ PߥŒMl5‰ˆÇPgIé‘%ÓäŒ/§ƒjlåƒ'9,tM›kWÖÇrÃä;ÒRqäò»^Ž e“ÌÒÔé<U". ¨çŠ“  ¢e¥Ù’ì t2Cj…´=ÃýDÄ£ç| Š¥K}Õè8›¹AT¬½²þö4+§ïHª,Ò'œŽEˆ*†½6î‹Ñ?ÈÌr9­Î“bDCΖ¹ˆúÄÍŒâagЉg‹[òê.p|¥ç¨ ŸìÄæDR¤ªeîAv™Ò4¢'Å04ºPŽøUM‘Èúð¤srŒI¬ìy¦_j°Ý˲› –Êb¼LIá\ìcÖVtš(²“¿¨Ùw9”¼^ÐpcaŽl<‚omÜEÆþ¦èÞR?ÉÄôL ëS6‰^AŠ}Ì@r§æu\kýäG @œÜ$möÛ‡›ød¶>[.:ÚÇ mÎL«õàÝyª¨:Ã1\—§>[µ™SAÇJ<Àcf¦$vUÐDš^UíA‚4ÒÊe ¨3Wúº½]f•)LÄþ¾äðmi‚;Ä,]jTäñ•Hò Sk†vôl° I`l&:IL&Žt=õdáÚ)þ³qôl`<¹RIü7IøV(”¹fæQ¼6K¤ ßžþºäY€·õO*yû±W}q&~“Ð-ä“`“ÿƒmáàY˜âVÄŒœE QSvX¢¸«&„丵Vp·ˆóyê»ð;k'•H ¦×‡]F˜EÓÎÁÚ$U%ú| Aêù,+вÇ,ÊNFŠª™Û¤M-[gå-¡”m³.>{F6Õ":ÀúIêA¯!ÔÂå4ÀœC¤–åG#6OœyÝH‚ Ci~3±b2'9s› M¥Õ¨3/sxÒð\¦b…mdéŸÞÏg=;ÍGzXž‘ Ã~ÂÔ·&iý¨§˜ŒûžÃ£-³™pìÔXáìO –*6÷©#!V6t™@%†€Öª‚j€L c•ÝL&wP|©ÕÙ*mRãð’¹tk9­Êr_tÑŸ®‰/QÃNF¿´ eaY8è?‰¯—€BuÂiå–…·:$8‚)c-pHë”7m6C÷Ç™hâ‰KÐ(úhë•AJ/ÕæÐn Ïkv@9Xd­Ž#”$OOÕÚÊŒÒrª1b%=Ö ´LG÷ÈàÇå9pš“ÂØ&ìµëÏóýJ®ar$?COÕ.kõæÎ’æöó‡ü[R¨›Cq}õF'G§ºâ#H ¥íá…œbÁªæ=¿0]çLnwYvNrRt-I5Ö˜Hÿ ùæÇ¢ 8.¢c–L(' ôÂCç -9£Ei°´¾°r(lj”–¤Iôߓ̃“vah$Î ŠÆÑ‘Õ;Cš'Md'£y¹- äZ;3`•9¢‚?g)2 ʈcêspnèe @ƒCÍÄd°¿C›VAá -`Ê Q®(豨!~, ļ¶ts=p«‡³óÐLqU–øh±ƒú²WWñ¹MB؃|šüê"&T«ë½œ=“#zl9dÞ¤ À)NE´EuO…6”ç¤èÜT3A”Gé©R|™ÀîUì ò+çz˜«–²IŒ’šÎâ=\¸_àîIðoY‚#Ö™ 'ô1§¨©ÆÝDïœÝGžÛ‚´¼ 7ã¦G|g}‡ÉFóÈpCe™³ßZUnÌ*uþŒ¨¾ÉïÜm€0ƒ~Xœ,Ù@°¨yÆûU>³¶¡)¤ÿ—5¨ò\0sæ‹&¯fB€™‡0Xˆ]íÐ1µj•‹½oüA³@”Xø!Ž3eÖãSÓñÕHÊÕ gªCÞ¨æ˜ÆiÓL¢C|80y_ìf[í9ò¸Ä«ÈPòÈ»š¸6±¢5# ”õç*UvÃÉnžOõÅ4'ã—½ÓáF3–KI®RJœñœhÓ~â SNz4pì%œA»D åÒÎ<ÍÈåR©×DJLÌê5s*-*MÚ'èLTaoà3‡×ˉ™S—Gg-&¡`?V™¦h¤®pVb™8¯³®R âCžƒ·­LÆ[÷=`M.Ñ,R½áPŸç5M:)hKÑ\—\\®£5Í@2¸§¿ü/Ig$QI“Yó@’Î’ÛB3tîSãÔ²”húÄ—Ó€è¤õ[Û|—Õb«sÞ¯OÀy°”^5m$‰&ͱ<Á7{‡ú2¤(ç®â3{Ç%Q@sÆŠäYU'Å‚-jîéÃfͥɃv®Œ"Úö‘â.êâþ[ yÍ|©À²æ¦Ñ Sì.Óåô@„ø'}³ CD°ƒ,‡ß×Zó¤M¦£¥¬ žžY8O2¶xj„À’ Eýô5cÏp‰ôpáà–øy²†î^Pˆ3' \ÚÛW*‡¯–SõžÜôa‡®³dÃÑYÞ5° 3'½Ì)÷Å¥ñŠÐhósfPñ¤ðRp‘¹i,ÓÅ|3N0W8hH†„I±á•ã8…÷V?À2R- YÖ‰,êó#è¡£ùÆ!ؾOe††ûl[!Sœ`>ÐI*Å8N8ð~À>íŒ3cØe¡I&Iºà{H#‡sãp;©¿µ‰,ˆ÷-Ï"–ZÜ9•ñmÛ5‰¥f0›Ôèã¥IBYå¸,y^u\¥,hü FÏÄvù%dHœ°(¹Ä/¥”O­y*B,g ƒ@bæÎHCž„qw…¬-$•(+-ƒSà‡¡‚ONiÃoÃ*,}›± Ñ¥©)ò€°ÇØú.Rñ ›´3ÇbPs´n û®$ÄÎæÞ8=òwíyêJžd:©èáR‰#NrTø%W¹ž‡Kf!Vî!*ÈH¨¥9V'Ûbà_ï™æ’9±¥úöªÆÉ³‡âÚsœ0wÖ¤¤s …¬OãøÉ€2'å+YœndLùsÊnd>·€ãÐQ„>G숥$·€¼˜¤>ÂgR> Fø–¥N}øîUsÅ1Iě־Hq“÷H ‘Lÿì ‹ˆÈÝžv "‘sœQ<$8¤ëlR¹šsâœ`KC_¬=“kûõbÜ`JRš+ƒ‚&D+åÉ¿r ´SçÒaÒ!õ‰DN*}ÕÜ&ÅAc„ 8›;YD }þgƒ‘d=S-ÒH Ü%ì„!î ç{=Ã7¦ûw²¶“sW@uîÞ&¥ÉéDpà»ÊHû,Óq®È‘3Uc;-†½‡U¯šòãàÿdQõüV§|ž³$_š<Á»¤Îre~%¤ (É0¿eR‰âÔ@PÏÆ,ìÃèƒr áÉÁM’(N·jZAo"RºkjòðÕºr:Íø·1Û×¼€U™§%©œÞŒ3Î…§V (}•qw_ôëÅæPÞ³«â³¦g™ð8K|¾(iÜG˜L8nH9¶$óesUIcz^´Ì78®ódípvÍÚÐZúè¤æõ塹†÷àdû”„Tç6–Éà!Ž…Ëë8¾ú#Ò8·M×TÏ”%7IqûàÝX *2£ÀÂÊxpج«å¹:~WŸ,/O¨’Ãs]yÌÅ)sÊ“”iš*”m¦¬ò¦†“"#C3kFKÐö¦¬FžDbÄ>ifÇMÈù€½’°GR ª¹ÊÔû,}Óe ¹Ò¤Jb¹‰tXÜÁ+©ïÌ(µ€ã^ ÙLgÞ*s}nÖ.Ç$ò’ ¥»Þdz|I8’,VlÃï¤tO}äãpÉóÆ>“ºä4w©u ¹ÙKãT‹ÇœÆgýLƒrR-Ì­¹û¢Mn£pê ¸d5¼ðÚÆíÜlFu+Ld7Bß,Of{ `˜LÈ-(ã×]žãïDÂÃqý3ËmŒe2àݸZuÓ<¹8“¨(4‡X”*h$Ì;½,5¨¿¯-ÜÉ,ˆÚÖ œ¨Ó™i)Ü ³+§êšüNîeä à!ì"µoé¯úlD|¤ú:ç%3› Çæ—õdb˜×õ8‚Áª‰|! ï9?Çe±.ªBúXQh¬ÆCþФpÂÏLüu+ç$螸Í\±ë rÃ:ÜYSær Þ†LfÝÄ/ì>0ˇï#L\ðkŽé™¶N&?æùšÄ>#̘í XrÚÑ¡Màô--U“xŸkØšÜ9nYk±Ÿ©ev™SOa¢§ù+ ùPEyÀ8ºÈ)m=Â`Lš­ePáa™%«tX»)ra[I‰á‚ês£K ØÖ‚ÎÙ¥‚x?k_y¢ 2Ù#O{©rCVîg&dnå®ù°ëqyÒŠÚðLòl!! Ÿ£ör"²™õÖ*‡In/Äl]ìL#E—— &dÚ®þl Ë 4fsýtÜŸm³hÇ`á5•S9eèÙS,›SŠØ-t«)núX?‹Évc&êç°XÎm{¶²ù Åb÷-UÏÌ0·ª7‹”„¾šîq ’j1ž@@wˆ-ɯÃ˳#¼öZšy¯H…2¹ÓöC]öFF”áŽÅà\cÊq°Óƒaà>â3rÉFß#s=Q¸ó÷2í|ú´ÈϪOŸ†ƒžˆÜ­Ìy)X‚ì‰Ä®ú¹«÷ɇœ &÷±(Ú‡d€|õcÎíåz§¯’ìÁC<\æ{À›&‡£§õÅ&Ê4¥&%‰.y6u°³0’ò627`¡ó¯œZäi40›0pYÝëµ'¯}Z;dÊ•6M ¡\yáÛܬ÷P ý”Jóäv.6§Ø#g‰ÄÉ`–í™’J¯æ³ß9‰?åH† Õ>0iß}Q (玛VÌe¡ÃQGÇ ù‘k9‚`ý´¡‘f,toE8nFüya¸à¨å[€ñ"<¡¥©Ü‰Ð¼U"l4hD\ÓÏv¹©«ãÄIË-€‰Ù>›k%^•aòÔ áu›lÌ­(Ù\3”ûE³jKiÄc¼ “Ë*œsÞšÿ_>c3êI*3“°Œ…ݤhK¸tD/]-*‡âG¨‡'“%ñ\vàÈ1W¾œjê5qÈ*)RžçðÍ ¢6‚΂V¢ 8•±{õà €’VU ?„ Ö›þVÎ[sÿL£p µ¶ X‘@>MTìè,õÎYÂd1q²ZqX«º|s2%žÎ1!ºÚÁa>“Ú_i½_T{³‚G¨s ŠWaö„PNû›È]žäøÒ×DÏAÂÃB@Ǝɯ°åÉrTewÛîçá0‘ÜêÌM¤é”MHóFvÂ8vþ{éš9ÔÊ•¸âlhEç3;LÒR¼è±Ìíñgæ“Q›3ŠÑf2ÛNåeZ¼÷kí³ž°ß‚T×äOŠz¬Äé<ºå¦3ÕÍg²A;9]_óÍ´35epsÄ çZr§Í½¶<Ø g˜F;ä^áB=u0L[ƒNÎZŠJèBæ>¨ÙcZWû ² ƒÆÜ¤i,A#Ê'B*“@°†¯q¸·=ÊÞÓÉ`7ž–¿ Y¨OÑ&¨;ogà€‹5ŠŸçÜ+îWŽMZÕD¨“‰\; Ì÷¸©U‹\ óhhÊ…¤h8Æ>‘½'Kæ ÃYGšËÌå¸Gž«?¶aÅMé9ÊŒ?1 \™Ñ‹„p„D*WÏ lYöeÐ%rÉïÐÝ9Ü„EN…8&-߉cB¶~ð®sb«Ýx ;UÌ~ºLE‘MÅ}²`b9¿7“…ýR7W™ppRŒ —ûÀ/xI®Ãy¹+®Ø=°÷Ǭ) ©%/ð©És|ïŇK^Iò×ê/ Õ&¡±–³+1{ùˆq¸˜Ø%4_GɹJq¡ º9F›4KŸ¢Ê**Þ ®\ŸAä›}s† •fbºø 4û£´#yV?5Á \m^½ÒJ*©»¼‘3),B“ÎPùG]zA.,d¸±\"Òvž5; R>-Mòø‡®5‚}‘ î4ô( =-;Èð89ìrR4[A+h3"§¾ðb²üH~Ùªù WX2§RÄc ²Ônç^ÈH‰Üé‰Ý%B¾H˜ݵ2Ú Õµ©Áì—œ`}K&ÐÔëLö¯ÝÒ3 1Hÿõº[ľ 9Õ ë4ubÿËZ}xªŸôHy4­vqÉ.ÙÛä)]½²×ã«;× ÓÈ 2yéÅ*§‰og•¬–D“uñcµsoI>Á÷Ã¥ý5·F *²d(¯ )Ç“tBÉ3ÉE©ã\ÒF²Í”÷Ÿ‹i£–c¹Ò†wL;òá±·'²˜°íÑÍR‰Xš§+17^˜ ±Žõ%¼Žý#…3 =Á•k7Øç’ˆò"û¾ø7w(C¯»2È5âŸ[Óì±sZ›IÅ~çgŽ[ÇÓ‡¿á‹å“"3%¯gmS«úþ“:7‹qGÖ rò`åH˜Ù9³À‰BÝb8ùÑp‰ê;8a@Žò ãî“0­ëüÉDÿ ‚š|'d:(šÌ©¸ØuïÍĉæ|–e KÐC­¿ÎX$¡häm#õjÕŒˆÔ«Ïk”ô¦¤`4Ùö.ÇcÏ:ûÍedø9ópšæ…<|1ÚÉ1gÌGÕ Ì…Š#(ïÝ›CqEr÷æ¶FÈÑ´ªôÐcy÷߯cñ­½Æ¸¼•Ç¤ŽŠClýžü é†O#7Ï5‹;ï¿«:}r–à•ÜÞÙ:æŠÀ¼þžhƒ4Hé£ Q™læé¸o†Ø3IÚçtï¹äÚaB J.ó=‰Àª¾@ûg2òæWT†{ø¤M8­Yd ØS*ÊÐ78è¡‚z¸i½. ß suŠ»GêLÄ{iݪ®pä'díC"†'ös7‘P°Éã‘ðâ^sF˜ä\£!uRZKò8¡°× ³ò –¹¹1æ(Íä xé29Hž)’h8̺_|”b.wèúc =c¬§úËbÒhIFfîîÔR ¢Gáéœ~©\( u®ä”§¦EcÎ6Öƒ3ZÔÚ-3Õ…ëòBIZa1»‹c£__ÈP—4êô÷M-Å5֑Ϙ|dšMº³}HOŸ€VIj¸,DÅ]Ì››¸KYK œ$#€þÌrsŠª¾0:Å\~nÞ²I‹ù•lœ%ƒwª;šÇóâÞAï±È=šC«†v ÉH8 $8Y&–ýh\\Í&¿•…S‹- çjäü2[i‡}Αä€ÍÉaä ;é£ëÜ vìÞ–3ËxÓsMÞíD‚ö*–!(tCZ˜´Y,’ŒtzJ7…{Fìr Ê|ªW›½E.d C:ZµìBð)Né§NK´ŒKiýLI0,kU‚.ó7ÂfjÇ`ÏÇ石í¶r³\mÖ_ é uÁî\?‚V± ýáA’±fÌEYùX1nïˆ-žyKî„OÏ8œ»4I?ž:ϨŸŸóœ¶bÙ8aƒG^w…`֦׉,)+_áS“(U³ æiÊÁqBßú©52Ø<ÚXc휛·Úé‚r›‹-µ–Ém’Œ6¢Ø±‹àŠÐ@¨+GöÁ^³]¶kÅéHx§0Ü¥2·f¶ÇÕ¦D^N™‰¢3$³aR(· #R9œ«s:¢„x²°4×xIOŸœ$ŒçŠ’90kË%ëˆw`ïÍâ-_‹–oán£GSJòà"ok‰ùûήײ"²8 ÑW ±áp LŒ(FÛÃ9ÂðžY"&óÜUzædVÝËÉΙv°¶,JÍ õ“$Lî;‡LêHB–YÆä¶ÒJ+ÉŽ¬œ1)Qç]k7ƒˆ}FîÂ+š4rsM¸êÛ ©îr$Öe’Ùõ¸ƒ;RB8W¸MœàbùÌÃb,ÚÉÎa#CÛü™ýˆ°­3«îƒãáE¸Ùgg‡(»2ÄOÁpèªMÅš”a„‚öë\æ0-ׄÅ!ú„3ý¨ í‘‘hfw#[–k¦3¯êòTÄD±À\u¹n|&ì¡¢âpp]}œé»©Icg»‰Å‘gÆÚ«4EÎm16ÐÏä¿J° íP Ñ)P“]Á@|¢rU]\ÀvM¥]ÙE$6—êÊÌvôœB×=GÊz`æz¶“ieî¦mIªè,UN!¿¦ÌÖžpZbLPáÓÿZÔãvènùfZäèÊ›œÀá3V uOH+ôdOvĦƒ®æÖôGÀf/ýÀ£k1žI?$yʤ,aQ]j “4gJC»á!Ój*Q 笚çG'¬ßÕåÛtá\"À¸FÔõ aN“=ãïü·zUÈWÅ„ uQ 7;&]‰Ç!c7—ÇôjcC6Î2‚Î.‹´2©ƒ†´“ÈHs”κö¸Ô5 €¾Î…‡sp}!Óûnûwp YgIν¿š±6éÂáAà¸þ´³S÷‘CVCò&ަî,oQ9mýÔƒM SçTÌñË%—§¨ÁH“?4œðºÌòRW[ÏMœ,YKù®5´ßÕ™g¦¾4‰ Xü¾( Ð$"Ä"JEŠ_|éÓÏä‹Ö׃äf2š0'ËrÎÂ"î›éº} ¾¯¼†„Ÿ›d³¤ß›dlãEEa…Ⱥãñj§Ž­š×ŠM飵•ÂZW(žmœ÷R°FªŽºmáÈrŸõ‚>†Ã“¨l¼îøl½¼WIï¯lf®ÄÄ¡œ6›Ërh"Ó¨ºz(ÜËVÄ:·Ÿ“9AbÇ{ÿ4m`ç9e Áu%È.X’¸Ê:r`ô©€ÖÔ¸ZO(ùù³àþÚ¤H§ÿÄÓç$hRä]#ižŒhû"grë³áHË\Á.ï4›ÐEË/s枀y¤?Èòý¤ÑÜ£¾ÐÒ¹dœ]²†¤wê ¢§“¸»±ç¤£3còb—³&~pKÅs–^Töde+…-ÒƒxV%L!a!ÜzpÊD!ü»2N¶Äȧrá ÌŽðM`ÐWJÊç*~…ÛŠágr=  Äv)¾†–dGÔ™ìÚÆª ŠFXˆi§…”)bò@äúœõ(LÞ‚ÐáNúCܹƒæ‘Z<ɰZjA™‹—0®/x59XÊ#Ä`«<ÛÖ…‰)h”&³Ç>d\©:ÇãEî¸7d"P®›ëµyV¡Ên¿þZ¦PÞ¤‡Í¡"ÂP™*XGàØm<ˆ_–êËóâf&ö…ˆ #p?UR¸’þ¢)^†\±ï=‰x®ÝÕáûB âgŒuÜ*z¦|&UMQu!1Ëïü…Ƚ97»v`e)$ƒÃ‰‰³ÉI#mެV#j,"³«ti.û:-e–V8: bxÓS¬vY¥ ;ë=Ù†(uû#x6/txq<ÁçKyG,(WAC©wå3¾ŠC[$äƒíI‘ ÷ú<òЯ”³ã”€BžNRVµüH¡·Ž‹7œ<•äe:-bî Áe•v\à6àuáSâ Â@Ä%–·r9u^.†ÎõŃK¤ çÈO5“¬GmR5c¯«Ua rlB„Ó=äzV¦•™½!£"Y? êÒ«[±Q”9gÒ d¿OþÏZ+‹æøíåd++UAߊc°©×ÐZ+øQE:Äu³X±/Ü,2°ÏFÔé‰Ê-έ"¬:hšˆ9¨QúÇe¦ÏÜ炃͕lm²2omaç,>gˆ+‚[E3B2©p*è5áÈ5Y½‹3˜ÎÚ3!X§ÊÒË'6$ãЋÑ&ZGC«ÀYÃç”ó9žLR ÷°ØJ`¥¼pšã\A—ÌÝiù$Â&4±ìðÏ!êf¤CîX-/‘(Ì­5:‡0C€\$8{ˆ(Që‚„ãrSΖ i‡S*ÚÄÄüjX“¹ç®O(Žh<Ñ}#[+—Pp"æ0qÖ<¡Ñf™<³9ÿšTN$È?ÀQÎúͧÖÿ„ƒ!ŸE~„€Óepný)RÊd§ú‰M—Lqÿ ¹ÜNʼ–ni$ƺwðHg™·€g&¡Þ½nÒÏÀ÷È4 ‘;Üã(0&4¼¸Q†æ,Í!lj[àý¸t"_Y!ŒOSU¸j³tIüí8vï¦qŸÃKì-mßBZ®½hÊNO:Áf1u²bsk: Ž$ æ¹ïæÌ>Ï$ ‘${Wx*%’‡‡fØr(¬.sI¶µ÷ ÏBÍ3ǯípi4.Ü’óÂúSÃ$E"#5K¨ÅÁZÄ5#y•<ùU¥Oúk©<'0Ä( sïëc¦^ŸÂ4.²Ý¡}y8 ˜¶™¶ Që$öÒ=‹¼³ú ø!ï )Vä î/§ñèLáP²{¤Y0{ÎŒ+r..b?#ÈÜ [ÏÂ?ȶ7Ù©c«Œ®ŒDãYydÀœu¡‡mu5ljí"ü»s‘@@Gô­°-j‰Ûû¾ZÉ„1Í ªAd“ÈI]ÎA2S‹ôF1ÊßÀí¦¼ÔBÿÉ©l•ˆ}›ö‘“ÙÏkØ»³7•p”(8$œmëM$ E¬§N¸F¹”Ã:ÁEßýµmÞLÄ ªîSRîæ}O=Û®»n¥žÂö œËLönNG€tù5üÈUjiuûÛŒó"DuSà¶Þ!ƒû\ÞŒÏÝÜÉ ¢•0Q3S¶šOE†p„”eÊn ǽ¥C (\ƒ(Ë ìê.“‹šbs+q8T¨nZ’EÄN$ˆäȱ†ðÂ’>\†ùªè2–ö}æÎœ~T ÎÈДL‚®¡‘·´ktF¼×svÑqº]*圕 ]©¸f¾—9¨ÃŽäº˜P;±.œ”Uwå˜q|VFa–MUwã·o^—Òd2 MJjÒf*IÍ…SÇiî6Ùo1§<²4NÉ}HÊ%ù0R~6þ^ó眥Kgro8q [ðx™Pt6ÛÖØ[Êä”âÆäj%¿x;© c'‚4Õš±ÝIƒ¥•Ö<§JîÅzôa¦á ®)Ë~#‹VôLlÓ'/ûäõëH-M2ìé(^ÈxDÒ ¡$ŸÛÖžYÇ<í”R=ÛOHR•²ŒÆ1Ó¥!(Ê>· Qô>²ž g\¤Yº Œ‹ žÒÁMDôÃ{ÕÛ I•’Ýu¶µ Ø˜/=gÍ"‘ÕíXy&¦m®o:]3òZä~æÊTîµ8eN‰1¹Z“ä.v×`2(ÅÍï1ɹ‰*è²çŒþdlùW2*.M|jÔSzO;0y`Ñòµóú=`Ø|‘}Fäk ‡:‡KrÚÓ†’ʼّf=“°ïpÆkÝíð+WQ5¡Ÿä.Öi_d°w)ÊïÚ˜ƒ˜ñÙ5ÌÉÖMQžgÚ «ôrEè Ó:u3•)I)¯IL‚siþ]É÷$‚L–ÇivP1oßp‹8wÎlËQeVgÿ»èø^ŸºÂ9¼üµV޼\Dp–…#KÛŸµUËrpÔtRœÈ‘’#7No«ÙUšë6ƒ¾‡åcngw*DöhÓvƒÙñkb”k=n s"GXF©HÀH}ï÷%ŽÃÍp ×~8‘^C¹uO`ϵM¯F6âU¼*iü¸úYšnŸÒè÷ö j;xÛ’yÿl`'mMB^Ö“–AGÐBÑÒM&£#l‘Î5q1SíQºˆC=hÙá©s•OQs*Gô…ô“u¢eÞ‡*Ä ÂC—&¿c8=}ì‡wmr1„p†oâÄîTÁz•cUÖ1Žªà,:'»ÒäÆýwÕÐovÝ0‡.fþ!¶ÍL~ òGfÈ2†‡¿g‰y‡áu’a§ û‡g¿—Ã"²_xbß8ÿB¬ ²âyÐ`/°-… ›y¤™a‰ó/7Gi/v8Îö6·Àûžh0Î9JÑØþ™±à&g0¾LÊç;×Íô®³%÷ C–¤˜ NË"X'ÕcCÙñÅÖ>ä9¡âÍOJ—ÁIçWìÉ´”ðÓ3ëÅ}7:[ÏmZ„-J[îâ`»ôo8žËŽ 4ÖˆJ±ê"÷{}Ù„ûL—å÷5ªÀ¶9õJv®¡ ä°cƒ˜_™`ó”?(*KÔõŒg2úéé5…ÊÕn¡½b<öG7&c¦Ff«ÚTÕÝHÐŽ¸zXe¶ª»$ç$X¹éœ=çÁñ´ð!Áu–Î2M×k& º˜Ï!ÍØèn’¾´ÆMñ‹FÛû2cD-åÓ !¶®ëe–á å\+uâišß¦Óœ„rüWõ ¹Ž­¹š‘>/¶3mB"²³!"aâÔ¾shD.óÌÞ•>›#H¸)uÕÚâdÆeÍJãÌÔ˜¸ʦ»%1­1¥g‚ˆQ^*UóˆÛñÅIãÌm“ŠÊ¥ÛMå›$ íÏkœû›BŠ÷œË¸ŠhLá|éT¸sf?$ƒÍ¶úÚ#Áé~xŒC(‰Ü'1¹9ó…EŽž) HÚÑ#Ì%“µg¿iõH½«,}þûçÐ'q ¤’ØyˆcÑI›[erZ’ãBOjNjø¤Šx!®É´YˆÜÍš¶N ã“FBëËK+!wœ¹´âp9¿\•-›L}HŸvnxäô„ø`n£WݤʂG|N¯Š›ê¸_aÝîC!èöÅÑGp½šíeZƧœ™¨I9Æ z8w‹P¯ Pa"Ús‹Z[äš!ÝwGGZÙµH’ U ­êšåì9ä9=#E¦jEBbdÉ”Ÿ•GfƒäNâaˆbáêTéÿ´Ù,/g+Vbn£ÔËʮޛ¹‚Š#”2>ÄÑ\"HZ×€z®­(¯£¸X‡8}ˆ-M:=ù ‡×LlaªQYHáÎP'Cé–_t*†Ioñ¸yë@»:…¹ÞwÿNrbÑÀ-é3‚!ª-é|ü3¥²•€µB*…MÙ¢ÀgÚä`Mõƒ‚8’¹ZÛôÉkËÏiµTãªÏ´Iå@ =¸xú€W'›#Kª"ˆˆ  ¯¤ƒ§c.|ŠPžEŽq™\%iÍÃóÐsÄMâò±×‚oÎëŽ-ZR]Œr:ÔÄ÷p_‘+hšß=Ü›™Æëz=Ü—¥ë^gM7.ëóçymOšà¥> ,Ö?ÂÇAFú1UE¥8A“³Žäq<ˆëMSIÃþýßæNÉýs Ø$<{Q,a¢sÔ½Ö—¡#Çu;xÈ÷>š/“j÷Œ9sƒN•1 Fäù$%Ô­‰ ÉóYy§¡)çPí•IS°ßxfå›ly«±Š®u*»:vfÝ$#êz/üÀ/÷×Djd0=’&ݫ똔c Dµ†»¸ó{±m:û}ÓîÆMÿ‡ñ àÊ@bû¡È{òïr<@ÂØ9@%¬d3ª°Òÿœÿf-œŒž­MH±ªÏ<3Ù<–þ™[ŒËe°„©BÖf/§4ˆ*;Åe®²mâŒ̰ÆõBZ0Î1½œ49ƒâ¸=—\ÓbÊó NGË™sBƒÕ4Ï¥Œœ>”\ËEzŸzí žkÛÉ>¡ôìÜï†êÕ‚aÇ®”=ç8ÒœÑ?#°nfšsPømn};ݰÁy™'ËÝÍs½}ÓÈãN^©íÆ~˜­:a;¡Ð !7TI£®}–•í[.£Œ‚Âyï\Û¡f¡@ë‰\ü—D;ÉãÆ¡)¥æìs%/ή‰ru+DZô lQ†× b³!€3E¥y~bLä;8z™ñ˜]ƒ”¯úd#»ø–©‡.±9Uþ•þaeƒ°kŠôf¨^=€Âµñ‘XœNöW´R}C58•E êó¢_Oìi¤Ñ!Ý\íø›¿ná]c‚`‡:Ñ_‘Â%Þg@•ã$=²æ3L°OœKz.áÔÍæåIû¸œ•cïBÜFLobPzúb¬E’þÔhz¸ÀüHçÂ^2)cT4×®†AžåHînm´’*“)„D‰Ä*E'Jç^íÙðÓ1Îͳ,+ù(ok?N! „ÛÇ ‰ÏNC4†­Z¢&_ˆD¶î¢F…¿–ŸÖ”ãqTÒ1)È"™g‚zöB1¢ Q©CX@à²+½\°ãØc.¬ŒpÌ=¾œhdiy³“i‡Í¾«-™Aâó⫦Æ+¿õ¾h6Ÿ6B˜ÌpIÓ.Hï¡´ Ðy‹ðžËÌ9ºœcŸÏXOÅ‘ †∭ºŸšØ”NÖ¿ª) 7r¬õÜÐ9™NÛ€­æ>†º~Ç}JŽB³$Ë Î£î¹Ö¥ûܯÇŒ-‹›±yÎÊ$îƒVlÉ3™uE«0’ˆñ!dI]'"ã¤k|í’$¤;œ’œSæ,ÐéãðÞýìì$XuÏAçmy¹m{ÂÍC;”7šewÚÆê0‹±!ñ8ñš§î©G4SRÏ‹ª|N8é 2çhÞò UaÆ+Ä ²%ÌoZ5Ò4ðJäQd–q¶Gp%GxY¬o£É{佸˃\`§#S9¨Ð´½Ë-rpM®C†'à.‚ã\âÜ£sÖ—²œA„ýùJ÷èåT4HJö>š9´~ÁVI'Gï¥á$Šr%pÛ#¹rÃãÚ‘ŽÃÃ.’Ž´ÄjÅŒœ:Iœ[[ù°#²+ý°†²€Ñhâ‘ rŒG‡T&n§#¤‹:¶ÀL á¡J>žþéÅÂG֬܊NB¼Iúg‹¤MdH;6wÙ¸/öe^”šÌéFì‚&âN¹¾»SLošpiφ*!·²ö”ÅÄâQ¦9+o%y§5=Iä‘"!ñìÿ;Lﳩìe ú7= ‘!“£©KL‡ªšeÖZÙ¢˜' ës :wònýO%c3—Ÿg|EÙkØ­MrNE-e޾–Á‡]¾ÿ\9‹uâmÓvšÜ0в+ 8£rÚAEärAÍsú©dfÁO` dÕä.à3õp–ÛfLê åC!ä­)"¤Ãó©‡ú¿Ði§73µ]—V‰ÆõÄžD²)®ã7Ü¢@¬¨IàÀr+§PE,“Å$ü ZÂ!³ExÅToV˜•Ù]´K…}C®¥:ƒÆ…yÛ2M­§ŽL–<± ‘«´àVÏ€:ǃ›ÐÏýƒÈÊÐbo›ít޲ƒ†kÏD',9){+»O’ðΈ ›¬"œ è&¦ ‹çͧˆªk:·Z’JêÔzÙ ‚_=+TIM0yä ñúC’$òˆp–\qD×:½‰wlAM™&´÷bÈ› … ŸŠQòM·¼Y†¦¬ãdß<ž2OhýkÆž[:ë.™¯ýG„Ãbèpð©@`ÑàœBèÚŠóÎBvòÄúå¤4Û7ÃìÓ˜Ý{8d›5é(0üãËéšEî="XÜôäV Ë %Xë®§³4‘|‰Þ^G‰3‡â´GQ§x¢”Þ|Òm–¶Ùí]i,X!þµÓläñá=ëŠçìZÝ…š‰#Ä àȆ¾¿Øöä´à¶æÓ+#47>kÐd¾T‹$ü:5‡¹cUŠöÌ)²úÊ7ÐrsïX€n{‰³L—U +fõÑUˆô€Dù‰æž˜Îúâ1S³á”þ’(¼ôqM—”ñËB(vïþZ,ô•ý>í¤çν š‚ô ô9’7Òãs[¢'¸z%þ…sap1«„á̘QKæMÊ0 d‘!tg†(²(Ý닞×9·0!ó©áZ<ã6/Fí\u­uhjLÌsV´Î~x>‹4lXßäè|¬•%Ü@à¶À32»Ïã9|“dÂIO>‹ÝHB<ØV—ßÁ]Jõ”žú¤íŽg7Ü•’“ Ÿ+u^¬A†Î™#äÈøN‚[eÖ&^–ûI'•Ñþ>.'¥¬ˆ2M}Ú c0ÍÀzî¦;œ ¹Ó_• Qà­JúB¦ˆI‚¯³¼ä "ñ”âßX̧L9°•Ù¥aVYðÅe=×—CŸU7Kq8€?Ù™2hÈ9Ó­Í>+Ï ^öþZ†Ò¬³7£¼©ìQ¾º¨8ÓŒ™¢ÔæIå-…Ê:žBÊÌ«„ßYN35’¨ä¬È¤ó!‘¿LPÖÉ“Ûu$Š[ ‰ý‘™(®@'œW£€›{.z䜟’ïrBçÊ‹ª0sþ8H›„ „Þ£îZcõ(>í¹rÖ:Ë\· ÷I”‹÷,Úo"ºŒP­úH×#N§.µØ9P‚ð¹tç«'ŒN$CR[.*T§Í1ªÇ+z~Øø—ÍÈ,tr»ó£”¨„Šã™tΛ»gbF¡6©Oxé%]ný™­uù…ÜÊNü¤´ qQ8óHdq­R"±>i $£X,Èi'¨Û dÎíeÇ+µ¹ôߎâX¸Òd?÷”ôœ9ÏέìºÍ\BqT­x²¼À¹pù*7®ª’5Å&˜´ýqª·¹LJÆC8s¯…ùuKèTë9oßÙ…Ó¢yž‹Ÿ%Þº±ä+Ä›Tåmì® âáFŸÃL‹¿R7­?É=Õýs4r\–Ùl¢1“xŽ:ÆZR8½Ì4ËìùdÇ\Š˜b–B?Áh<è`óµÈqÖRØžö‡æe2§™UaŸº-O×µ\ç¼½86 Bí&åºú[%(q2gÑΤ*ÇmS>eºòúڼǭÂDužP™›ì«ÎàQgÈ&$N„Œ‹UÚó„Ì>Ïá>çÎc¡E y^}Fòu“LZÑBáy8hVöŒÉ(!(GäÌet ûâÑùò°·™_4;™x…°¡cs¥Ë§gQÉ]¾áP-UÖl‚ÁÂÊì-y{¤6N° kXZÉæ±—¹¤@¦8-tFžè2)èå$ I(g›=½0aMÃÀc{mqäTÀ\Ä÷ïÎ.ñV± ¥Ù sL=Õ¼ÓÃ4]‘\÷ÄxV1Ê\w^Äd…ž´ÇcÉðòD¥'”Ëé¤ÉÌ ¤ø:ZΤ0ž‚qœübŦ]¥Â†eë!) 7!§’óÍrxÐÔ$¼fõô‰áELÎx©mÕ„´r°Vê $ `Yã:®¸/º•0qºspšøTŒ"·@öC¶¸:ä“I’ª€û_víïç œ˜Æ¼ž’.ÛQðkÿ‹ÿÅÿ¤au ùpymvpa2-2.2.0/mvpa2/data/tueb_meg_coord.xyz000066400000000000000000000210521202542755000206020ustar00rootroot00000000000000MLC11 6.43309 0.670899 13.4402 8.20804 0.69133 18.1158 MLC12 6.02874 3.34062 13.2801 7.75956 4.48484 17.8306 MLC13 5.39823 6.78026 11.8691 7.15929 9.73255 15.5017 MLC14 3.21363 8.61391 10.6813 4.06879 12.7677 13.3322 MLC15 0.95648 9.74185 8.79292 1.07282 14.5277 10.2404 MLC21 3.72035 2.14294 14.2558 5.11451 2.71475 19.0247 MLC22 3.85707 4.97217 13.5194 5.24876 6.75771 17.9789 MLC23 2.01625 6.9622 12.8764 2.86362 9.90188 16.8328 MLC24 0.150434 8.55218 11.4194 0.366156 12.6471 14.2826 MLC31 1.36801 3.98749 14.5124 2.27763 5.21968 19.2734 MLC32 -0.627059 5.97007 13.8514 -0.537318 8.6004 18.1042 MLC33 -3.24143 4.63291 14.2881 -4.4373 6.42974 18.7997 MLC41 1.3048 0.94737 14.9523 2.31824 1.11305 19.847 MLC42 -1.15389 2.67507 15.0747 -1.22037 3.46685 20.0125 MLC43 -4.00963 1.35956 14.7879 -5.5742 1.82642 19.5151 MLF11 13.2971 2.31383 3.15653 18.1465 3.5344 3.22999 MLF12 12.0735 5.18245 2.75578 16.321 7.81514 2.95661 MLF21 13.389 0.547957 5.8523 18.3004 1.05079 6.65094 MLF22 12.5779 3.7323 5.79963 17.1043 5.71197 6.57773 MLF23 10.9342 6.41337 5.20067 14.3995 10.0088 5.47705 MLF31 12.2649 2.2702 8.5339 16.6119 3.43185 10.7172 MLF32 11.0349 5.27666 8.18054 14.8047 8.00571 10.0118 MLF33 9.0207 7.49213 7.24406 11.5437 11.677 8.30899 MLF34 6.70453 8.82803 6.43962 8.85636 13.3163 6.92759 MLF41 10.9874 0.472447 10.7135 14.603 0.53096 14.1684 MLF42 10.2774 3.7256 10.5787 13.6676 5.3659 13.8694 MLF43 8.5787 6.63851 9.85316 10.9998 10.1559 12.4568 MLF44 6.1882 8.28856 9.40097 8.27662 12.3434 11.4527 MLF45 3.93468 9.67336 7.86596 4.86126 14.456 8.99736 MLF51 8.6925 2.04293 12.3176 11.2202 2.62519 16.5936 MLF52 7.74505 4.94581 11.9293 9.83169 7.12761 15.9166 MLO11 -10.6637 2.25014 6.732 -15.3931 3.16358 8.07787 MLO12 -9.2542 5.66291 7.07295 -13.4733 7.97569 8.43785 MLO21 -10.5418 4.25006 4.40446 -15.1684 6.0996 4.83642 MLO22 -8.71712 7.0638 4.47767 -12.4433 10.3657 4.95283 MLO31 -11.3332 2.50767 1.43071 -16.2279 3.46638 1.79954 MLO32 -10.0558 5.70851 1.76321 -14.3255 8.2826 2.15824 MLO33 -7.98397 8.33461 1.75274 -11.1541 12.178 2.18978 MLO41 -10.9907 4.31508 -1.06132 -15.6057 6.20352 -0.676544 MLO42 -9.2975 7.15523 -1.04352 -13.0713 10.4091 -0.614928 MLO43 -6.8026 9.26602 -1.07131 -9.30956 13.571 -0.629918 MLP11 -5.86214 3.17431 13.5085 -8.62626 4.27807 17.5277 MLP12 -5.12474 6.2357 12.502 -7.48496 8.94491 15.9808 MLP13 -2.55228 7.69497 12.3121 -3.43919 11.2986 15.6648 MLP21 -8.26949 1.84841 11.5154 -12.143 2.49476 14.6124 MLP22 -7.39821 4.57366 11.5478 -10.9638 6.24941 14.6286 MLP31 -9.25909 3.66496 9.27152 -13.4634 5.12296 11.5542 MLP32 -7.44854 6.64877 9.62921 -10.9382 9.51258 11.7818 MLP33 -4.88893 8.3254 10.1346 -7.0294 12.2863 12.3123 MLP34 -2.02824 9.40274 9.60955 -2.64128 14.0937 11.2319 MLT11 8.6119 8.10479 4.18194 10.8829 12.5483 4.51446 MLT12 4.68265 9.79876 4.84144 6.10382 14.5807 5.19647 MLT13 1.74361 10.2468 5.86873 1.79731 15.2272 6.32163 MLT14 -1.23692 10.4511 6.66823 -1.56995 15.4262 7.05632 MLT15 -4.25098 9.65316 7.19067 -5.87866 14.3207 7.9504 MLT16 -7.02166 8.12138 7.14954 -10.0117 12.0122 8.11575 MLT21 10.1314 7.4154 1.60863 13.0674 11.4552 1.87678 MLT22 6.53594 9.2105 2.4837 8.56757 13.7704 2.78775 MLT23 2.71556 10.983 2.99684 3.13757 15.9502 3.39922 MLT24 -0.307514 11.253 3.69686 -0.38345 16.2335 4.14546 MLT25 -3.37249 11.0274 4.28335 -4.57388 15.8464 4.87185 MLT26 -6.15779 9.01815 4.43457 -8.55371 13.384 4.89429 MLT31 7.92398 8.757 -0.177182 10.1259 13.24 0.0820664 MLT32 4.4619 10.1523 0.553291 5.77901 14.9667 0.868532 MLT33 1.06829 11.3852 0.736023 1.15405 16.371 1.12042 MLT34 -2.12556 11.5306 1.32146 -2.66397 16.4888 1.69418 MLT35 -5.27191 10.4136 1.66851 -7.09323 15.0522 2.09199 MLT41 5.79559 9.91298 -2.12984 7.83593 14.4674 -1.80332 MLT42 2.6779 11.383 -1.90355 3.31433 16.3307 -1.5454 MLT43 -0.584949 11.7246 -1.62847 -0.574255 16.7111 -1.24482 MLT44 -3.92685 11.4394 -1.23133 -4.97304 16.3117 -0.808614 MRC11 6.21769 -2.19372 13.3144 7.95556 -2.87797 17.9539 MRC12 5.44419 -4.7393 12.9214 6.96079 -6.54262 17.3328 MRC13 4.29595 -7.93743 11.1834 5.65095 -11.3622 14.5669 MRC14 1.8635 -9.31441 9.88533 2.20135 -13.7488 12.1732 MRC15 -0.509474 -9.8942 7.92446 -0.986795 -14.771 8.92541 MRC21 3.31778 -3.35588 14.0095 4.59469 -4.48621 18.711 MRC22 3.04587 -6.04371 13.0407 4.1599 -8.44387 17.2846 MRC23 0.940487 -7.68634 12.2308 1.34229 -11.1007 15.8631 MRC24 -1.13384 -8.86902 10.679 -1.47794 -13.2229 13.1158 MRC31 0.726879 -4.81547 14.1332 1.42428 -6.62335 18.7438 MRC32 -1.54256 -6.50936 13.3101 -1.8362 -9.40981 17.3738 MRC33 -3.91024 -4.79024 13.8456 -5.38908 -6.75822 18.1991 MRC41 1.12218 -1.89037 14.8375 2.03148 -2.6034 19.7034 MRC42 -1.60708 -3.2178 14.8056 -1.76942 -4.44994 19.65 MRC43 -4.20643 -1.50156 14.662 -5.86477 -2.14258 19.3366 MRF11 12.8344 -3.89177 2.89762 17.4602 -5.79025 2.79548 MRF12 11.1932 -6.47897 2.22351 15.0168 -9.70273 2.20064 MRF21 13.1615 -2.41637 5.72507 17.9518 -3.66274 6.44057 MRF22 11.968 -5.50113 5.42215 16.2076 -8.09881 5.96082 MRF23 9.86615 -7.73751 4.57047 12.8038 -11.7849 4.52853 MRF31 11.7709 -4.16883 8.2679 15.908 -6.13432 10.2763 MRF32 10.1103 -6.94094 7.61327 13.4821 -10.2662 9.22145 MRF33 7.82553 -8.68062 6.53342 9.71209 -13.2633 7.20594 MRF34 5.32681 -9.64965 5.64713 6.88249 -14.4026 5.68813 MRF41 10.7996 -2.39653 10.5441 14.28 -3.30234 14.0196 MRF42 9.58512 -5.52483 10.1649 12.7289 -7.86256 13.2736 MRF43 7.45092 -8.04023 9.21968 9.42407 -12.072 11.4252 MRF44 4.8546 -9.30636 8.61867 6.43061 -13.7475 10.2935 MRF45 2.4373 -10.1768 7.01155 2.78194 -15.1236 7.66208 MRF51 8.27346 -3.73547 12.0659 10.6485 -5.10803 16.2478 MRF52 6.88668 -6.48305 11.3884 8.65736 -9.20069 15.1952 MRO11 -10.8754 -0.675293 6.58978 -15.6837 -1.10274 7.89778 MRO12 -9.97506 -4.24173 6.64643 -14.4451 -6.16784 7.79597 MRO21 -11.0467 -2.43461 4.08018 -15.8504 -3.78167 4.43088 MRO22 -9.66475 -5.52537 3.94068 -13.7849 -8.3551 4.1137 MRO31 -11.5425 -0.372808 1.28347 -16.5168 -0.752355 1.63668 MRO32 -10.7389 -3.79488 1.34943 -15.342 -5.74082 1.54341 MRO33 -8.99111 -6.54759 1.10855 -12.626 -9.98162 1.19738 MRO41 -11.436 -2.08939 -1.36915 -16.2994 -3.21649 -1.06866 MRO42 -10.1452 -5.16246 -1.59278 -14.4425 -7.71387 -1.40293 MRO43 -7.99941 -7.50194 -1.79859 -11.0985 -11.4269 -1.74295 MRP11 -6.29115 -2.90911 13.2375 -9.21765 -3.94225 17.1593 MRP12 -6.01772 -5.93669 11.9547 -8.73637 -8.58155 15.2145 MRP13 -3.69834 -7.72773 11.6083 -5.04758 -11.4434 14.672 MRP21 -8.47255 -1.059 11.3807 -12.4114 -1.45617 14.4369 MRP22 -7.98497 -3.86918 11.1891 -11.794 -5.34002 14.0771 MRP31 -9.68174 -2.51387 9.00168 -14.0754 -3.57787 11.1409 MRP32 -8.35637 -5.72725 9.07802 -12.1879 -8.30593 10.9971 MRP33 -6.11621 -7.82427 9.45043 -8.73285 -11.6841 11.2581 MRP34 -3.47443 -9.27031 8.76319 -4.57786 -13.9783 10.04 MRT11 7.35783 -8.95613 3.42973 8.96071 -13.6931 3.36371 MRT12 3.18528 -10.2006 3.97731 4.01894 -15.131 3.88416 MRT13 0.163654 -10.3113 4.95292 -0.291589 -15.2916 5.00034 MRT14 -2.80721 -10.2037 5.73537 -3.67394 -15.1293 5.75371 MRT15 -5.69846 -8.93087 6.40139 -7.77051 -13.4726 6.70471 MRT16 -8.14655 -7.07335 6.48481 -11.6537 -10.5794 7.13316 MRT21 8.9223 -8.21674 0.92677 11.2664 -12.6331 0.810166 MRT22 5.08976 -9.67627 1.68012 6.60893 -14.4385 1.51832 MRT23 1.05293 -10.8959 2.0395 0.997696 -15.8966 1.98687 MRT24 -1.96853 -10.8517 2.74041 -2.54508 -15.8195 2.70371 MRT25 -5.02706 -10.2577 3.38722 -6.59675 -15.0061 3.41225 MRT26 -7.41965 -7.86832 3.6667 -10.3938 -11.8867 3.80759 MRT31 6.59421 -9.10791 -0.964231 8.17209 -13.8518 -1.10127 MRT32 2.92409 -10.1208 -0.340806 3.70329 -15.06 -0.439392 MRT33 -0.581357 -10.9589 -0.245669 -1.09681 -15.9333 -0.296408 MRT34 -3.79206 -10.6467 0.34972 -4.7993 -15.5451 0.288299 MRT35 -6.71049 -8.9923 0.812736 -8.97932 -13.4493 0.829584 MRT41 4.39355 -9.74924 -2.96818 5.67052 -14.5828 -3.10546 MRT42 1.1087 -10.8346 -2.87428 0.939914 -15.8321 -2.96821 MRT43 -2.19632 -10.7572 -2.61693 -2.92289 -15.7052 -2.6713 MRT44 -5.4643 -10.0776 -2.17081 -7.26274 -14.7443 -2.19027 MZC01 3.80106 -0.609105 14.278 5.1994 -0.942972 19.0682 MZC02 -1.44037 -0.281826 15.2444 -1.44856 -0.505828 20.2406 MZF01 13.5483 -0.843879 3.22514 18.5374 -1.18422 3.15103 MZF02 12.5461 -0.970928 8.48035 16.9593 -1.43099 10.7878 MZF03 8.8011 -0.885649 12.2682 11.2482 -1.26282 16.6135 MZO01 -11.3049 0.892652 4.24027 -16.2624 1.26524 4.78533 MZO02 -11.6667 1.16014 -0.982373 -16.644 1.51473 -0.645077 MZP01 -6.47856 0.137594 13.504 -9.59148 0.23432 17.4172 MZP02 -9.84413 0.586053 9.37474 -14.2462 0.789525 11.7397 pymvpa2-2.2.0/mvpa2/data/v73.mat000066400000000000000000000043001202542755000161700ustar00rootroot00000000000000MATLAB 7.0 MAT-file, Platform: GLNXA64, Created on: Tue Feb 9 16:41:23 2010 HDF5 schema 0.05 . IM‰HDF  ÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿ`ˆ¨TREEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`HEAPXÈxy@0 ?@4 4ÿ80ð?@@@@ƒÖqK 0 MATLAB_classdoublePSNOD ¨ƒÖqK 0 MATLAB_classlogical @ MATLAB_int_decode pymvpa2-2.2.0/mvpa2/data/xavr1010.dat000066400000000000000000000030041202542755000170220ustar00rootroot00000000000000 Fp1 69 -0.307 0.946 0.099 Fp2 69 0.307 0.946 0.099 Fz 69 -0.000 0.672 0.741 F3 69 -0.516 0.637 0.574 F4 69 0.516 0.637 0.574 F7 69 -0.805 0.585 0.099 F8 69 0.805 0.585 0.099 FC1 69 -0.313 0.343 0.835 FC2 69 0.313 0.343 0.835 FC6 69 0.853 0.327 0.407 FC5 69 -0.853 0.327 0.407 FT9 69 -0.883 0.321 -0.342 FT10 69 0.883 0.321 -0.342 Cz 69 0.000 0.000 1.000 C3 69 -0.672 -0.000 0.741 C4 69 0.672 0.000 0.741 T7 69 -0.995 -0.000 0.099 T8 69 0.995 0.000 0.099 CP1 69 -0.313 -0.345 0.835 CP2 69 0.313 -0.345 0.835 CP5 69 -0.853 -0.327 0.407 CP6 69 0.853 -0.327 0.407 TP9 69 -0.883 -0.321 -0.342 TP10 69 0.883 -0.321 -0.342 Pz 69 -0.000 -0.672 0.741 P3 69 -0.516 -0.637 0.574 P4 69 0.516 -0.637 0.574 P7 69 -0.805 -0.585 0.099 P8 69 0.805 -0.585 0.099 O1 69 -0.307 -0.946 0.099 O2 69 0.307 -0.946 0.099 pymvpa2-2.2.0/mvpa2/datasets/000077500000000000000000000000001202542755000157505ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/datasets/__init__.py000066400000000000000000000055621202542755000200710ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Data containers and utility functions Virtually any processing done with PyMVPA involves datasets -- the primary form of data representation in PyMVPA. Datasets serve as containers for input data, as well as the return datatype of more complex PyMVPA algorithms. Most of the time a dataset will hold its samples in a NumPy array. However, we have already seen that not only arrays can be used to create a dataset (e.g. the first example passed the samples as a nested list). Actually, the dataset implementation supports multiple samples container types (benefitting from Python being a dynamically typed programming language). It follows a simple rule to decide what can be stored: * If samples are passed as a list, it is converted into a NumPy array. * All other objects are tested whether they comply with two criteria: a. It must have a `dtype` attribute that reports the datatype of the samples in a way that is compatible with the NumPy array interface. b. It must have a `shape` attribute that behave similar to that of NumPy arrays *and* the reported shape must indicate at least one present axis (i.e. so-called zero-dim arrays are not supported). If the above conditions are verified, one-dimensional data is converted into a two-dimensional array, by considering all data as multiple samples with a single feature. Otherwise all datatypes that fulfill these conditions can serve as a samples container inside a dataset. However, some useful functionality provided by a dataset might add additional requirements, and hence, will be unavailable with incompatible containers. Most popular alternatives to plain NumPy arrays are NumPy matrices, SciPy's sparse matrices, and custom ndarray subclasses. All of these examples should work with a dataset. It should be noted that the samples container is stored *as-is* in the dataset (unless it was a list that got converted into an array): >>> from mvpa2.suite import * >>> import scipy.sparse as sparse >>> mat = sparse.csc_matrix((10000, 20000)) >>> sparse_ds = Dataset(mat) >>> type(sparse_ds.samples) >>> len(sparse_ds) 10000 >>> sparse_ds.nfeatures 20000 """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.datasets') # nothing in here that works without the base class from mvpa2.datasets.base import Dataset, dataset_wizard from mvpa2.base.dataset import hstack, vstack if __debug__: debug('INIT', 'mvpa2.datasets end') pymvpa2-2.2.0/mvpa2/datasets/base.py000066400000000000000000000462761202542755000172530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PyMVPA's common Dataset container.""" __docformat__ = 'restructuredtext' import numpy as np import copy from mvpa2.base import warning from mvpa2.base.collections import SampleAttributesCollection, \ FeatureAttributesCollection, DatasetAttributesCollection, \ SampleAttribute, FeatureAttribute, DatasetAttribute from mvpa2.base.dataset import AttrDataset from mvpa2.base.dataset import _expand_attribute from mvpa2.misc.support import idhash as idhash_ from mvpa2.mappers.base import ChainMapper from mvpa2.featsel.base import StaticFeatureSelection from mvpa2.mappers.flatten import mask_mapper, FlattenMapper if __debug__: from mvpa2.base import debug class Dataset(AttrDataset): __doc__ = AttrDataset.__doc__ def get_mapped(self, mapper): """Feed this dataset through a trained mapper (forward). Parameters ---------- mapper : Mapper This mapper instance has to be trained. Returns ------- Dataset The forward-mapped dataset. """ # if we use .forward, no postcall is called... is that # desired? doesn't seem to have major impact on unittests # BUT since postcall might change dimensionality/meaning of # data, it would not be any longer reversible; more over # since chain of .forwards do not invoke postcalls, also # forward would lead to different behavior #mds = mapper(self) mds = mapper.forward(self) mds._append_mapper(mapper) return mds def _append_mapper(self, mapper): if not 'mapper' in self.a: self.a['mapper'] = mapper return pmapper = self.a.mapper # otherwise we have a mapper already, but is it a chain? if not isinstance(pmapper, ChainMapper): self.a.mapper = ChainMapper([pmapper]) # is a chain mapper # merge slicer? lastmapper = self.a.mapper[-1] if isinstance(lastmapper, StaticFeatureSelection): try: # try whether mappers can be merged lastmapper += mapper except TypeError: # append new one if not self.a.mapper.append(mapper) else: self.a.mapper.append(mapper) def __getitem__(self, args): # uniformize for checks below; it is not a tuple if just single slicing # spec is passed if not isinstance(args, tuple): args = (args,) # if we get an slicing array for feature selection and it is *not* 1D # try feeding it through the mapper (if there is any) if len(args) > 1 and isinstance(args[1], np.ndarray) \ and len(args[1].shape) > 1 \ and self.a.has_key('mapper'): args = list(args) args[1] = self.a.mapper.forward1(args[1]) args = tuple(args) # let the base do the work ds = super(Dataset, self).__getitem__(args) # and adjusting the mapper (if any) if len(args) > 1 and 'mapper' in ds.a: # create matching mapper # the mapper is just appended to the dataset. It could also be # actually used to perform the slicing and prevent duplication of # functionality between the Dataset.__getitem__ and the mapper. # However, __getitem__ is sometimes more efficient, since it can # slice samples and feature axis at the same time. Moreover, the # mvpa2.base.dataset.Dataset has no clue about mappers and should # be fully functional without them. subsetmapper = StaticFeatureSelection(args[1], dshape=self.samples.shape[1:]) # do not-act forward mapping to charge the output shape of the # slice mapper without having it to train on a full dataset (which # is most likely more expensive) subsetmapper.forward(np.zeros((1,) + self.shape[1:], dtype='bool')) # mapper is ready to use -- simply store ds._append_mapper(subsetmapper) return ds def find_collection(self, attr): """Lookup collection that contains an attribute of a given name. Collections are search in the following order: sample attributes, feature attributes, dataset attributes. The first collection containing a matching attribute is returned. Parameters ---------- attr : str Attribute name to be looked up. Returns ------- Collection If not matching collection is found a LookupError exception is raised. """ if attr in self.sa: col = self.sa if __debug__ and (attr in self.fa or attr in self.a): warning("An attribute with name '%s' is also present " "in another attribute collection (fa=%s, a=%s) -- make " "sure that you got the right one (see ``col`` " "argument)." % (attr, attr in self.fa, attr in self.a)) elif attr in self.fa: col = self.fa if __debug__ and attr in self.a: warning("An attribute with name '%s' is also present " "in the dataset attribute collection -- make sure " "that you got the right one (see ``col`` argument)." % (attr,)) elif attr in self.a: col = self.a # we don't need to warn here, since it wouldn't happen else: raise LookupError("Cannot find '%s' attribute in any dataset " "collection." % attr) return col def _collection_id2obj(self, col): if col == 'sa': col = self.sa elif col == 'fa': col = self.fa elif col == 'a': col = self.a else: raise LookupError("Unknown collection '%s'. Possible values " "are: 'sa', 'fa', 'a'." % col) return col def set_attr(self, name, value): """Set an attribute in a collection. Parameters ---------- name : str Collection and attribute name. This has to be in the same format as for ``get_attr()``. value : array Value of the attribute. """ if '.' in name: col, name = name.split('.')[0:2] # translate collection names into collection col = self._collection_id2obj(col) else: # auto-detect collection col = self.find_collection(name) col[name] = value def get_attr(self, name): """Return an attribute from a collection. A collection can be specified, but can also be auto-detected. Parameters ---------- name : str Attribute name. The attribute name can also be prefixed with any valid collection name ('sa', 'fa', or 'a') separated with a '.', e.g. 'sa.targets'. If no collection prefix is found auto-detection of the collection is attempted. Returns ------- (attr, collection) 2-tuple: First element is the requested attribute and the second element is the collection that contains the attribute. If no matching attribute can be found a LookupError exception is raised. """ if '.' in name: col, name = name.split('.')[0:2] # translate collection names into collection col = self._collection_id2obj(col) else: # auto-detect collection col = self.find_collection(name) return (col[name], col) def item(self): """Provide the first element of samples array. Notes ----- Introduced to provide compatibility with `numpy.asscalar`. See `numpy.ndarray.item` for more information. """ return self.samples.item() @property def idhash(self): """To verify if dataset is in the same state as when smth else was done Like if classifier was trained on the same dataset as in question """ res = 'self@%s samples@%s' % (idhash_(self), idhash_(self.samples)) for col in (self.a, self.sa, self.fa): # We cannot count on the order the values in the dict will show up # with `self._data.value()` and since idhash will be order-dependent # we have to make it deterministic keys = col.keys() keys.sort() for k in keys: res += ' %s@%s' % (k, idhash_(col[k].value)) return res @classmethod def from_wizard(cls, samples, targets=None, chunks=None, mask=None, mapper=None, flatten=None, space=None): """Convenience method to create dataset. Datasets can be created from N-dimensional samples. Data arrays with more than two dimensions are going to be flattened, while preserving the first axis (separating the samples) and concatenating all other as the second axis. Optionally, it is possible to specify targets and chunk attributes for all samples, and masking of the input data (only selecting elements corresponding to non-zero mask elements Parameters ---------- samples : ndarray N-dimensional samples array. The first axis separates individual samples. targets : scalar or ndarray, optional Labels for all samples. If a scalar is provided its values is assigned as label to all samples. chunks : scalar or ndarray, optional Chunks definition for all samples. If a scalar is provided its values is assigned as chunk of all samples. mask : ndarray, optional The shape of the array has to correspond to the shape of a single sample (shape(samples)[1:] == shape(mask)). Its non-zero elements are used to mask the input data. mapper : Mapper instance, optional A trained mapper instance that is used to forward-map possibly already flattened (see flatten) and masked samples upon construction of the dataset. The mapper must have a simple feature space (samples x features) as output. Use a `ChainMapper` to achieve that, if necessary. flatten : None or bool, optional If None (default) and no mapper provided, data would get flattened. Bool value would instruct explicitly either to flatten before possibly passing into the mapper if no mask is given. space : str, optional If provided it is assigned to the mapper instance that performs the initial flattening of the data. Returns ------- instance : Dataset """ # for all non-ndarray samples you need to go with the constructor samples = np.asanyarray(samples) # compile the necessary samples attributes collection sa_items = {} if not targets is None: sa_items['targets'] = _expand_attribute(targets, samples.shape[0], 'targets') if not chunks is None: # unlike previous implementation, we do not do magic to do chunks # if there are none, there are none sa_items['chunks'] = _expand_attribute(chunks, samples.shape[0], 'chunks') # common checks should go into __init__ ds = cls(samples, sa=sa_items) # apply mask through mapper if mask is None: # if we have multi-dim data if len(samples.shape) > 2 and \ ((flatten is None and mapper is None) # auto case or flatten): # bool case fm = FlattenMapper(shape=samples.shape[1:], space=space) ds = ds.get_mapped(fm) else: mm = mask_mapper(mask, space=space) mm.train(ds) ds = ds.get_mapped(mm) # apply generic mapper if not mapper is None: ds = ds.get_mapped(mapper) return ds @classmethod def from_channeltimeseries(cls, samples, targets=None, chunks=None, t0=None, dt=None, channelids=None): """Create a dataset from segmented, per-channel timeseries. Channels are assumes to contain multiple, equally spaced acquisition timepoints. The dataset will contain additional feature attributes associating each feature with a specific `channel` and `timepoint`. Parameters ---------- samples : ndarray Three-dimensional array: (samples x channels x timepoints). t0 : float Reference time of the first timepoint. Can be used to preserve information about the onset of some stimulation. Preferably in seconds. dt : float Temporal distance between two timepoints. Preferably in seconds. channelids : list List of channel names. targets, chunks See `Dataset.from_wizard` for documentation about these arguments. """ # check samples if len(samples.shape) != 3: raise ValueError( "Input data should be (samples x channels x timepoints. Got: %s" % samples.shape) if not t0 is None and not dt is None: timepoints = np.arange(t0, t0 + samples.shape[2] * dt, dt) # broadcast over all channels timepoints = np.vstack([timepoints] * samples.shape[1]) else: timepoints = None if not channelids is None: if len(channelids) != samples.shape[1]: raise ValueError( "Number of channel ids does not match channels in the " "sample data. Expected %i, but got %i" % (samples.shape[1], len(channelids))) # broadcast over all timepoints channelids = np.dstack([channelids] * samples.shape[2])[0] ds = cls.from_wizard(samples, targets=targets, chunks=chunks) # add additional attributes if not timepoints is None: ds.fa['timepoints'] = ds.a.mapper.forward1(timepoints) if not channelids is None: ds.fa['channels'] = ds.a.mapper.forward1(channelids) return ds # shortcut properties S = property(fget=lambda self:self.samples) targets = property(fget=lambda self:self.sa.targets, fset=lambda self, v:self.sa.__setattr__('targets', v)) uniquetargets = property(fget=lambda self:self.sa['targets'].unique) T = targets UT = property(fget=lambda self:self.sa['targets'].unique) chunks = property(fget=lambda self:self.sa.chunks, fset=lambda self, v:self.sa.__setattr__('chunks', v)) uniquechunks = property(fget=lambda self:self.sa['chunks'].unique) C = chunks UC = property(fget=lambda self:self.sa['chunks'].unique) mapper = property(fget=lambda self:self.a.mapper) O = property(fget=lambda self:self.a.mapper.reverse(self.samples)) # convenience alias dataset_wizard = Dataset.from_wizard class HollowSamples(object): """Samples container that doesn't store samples. The purpose of this class is to provide an object that can be used as ``samples`` in a Dataset, without having actual samples. Instead of storing multiple samples it only maintains a IDs for samples and features it pretends to contain. Using this class in a dataset in conjuction will actual attributes, will yield a lightweight dataset that is compatible with the majority of all mappers and can be used to 'simulate' processing by mappers. The class offers acces to the sample and feature IDs via its ``sid`` and ``fid`` members. """ def __init__(self, shape=None, sid=None, fid=None, dtype=np.float): """ Parameters ---------- shape : 2-tuple or None Shape of the pretend-sample array (nsamples x nfeatures). Can be left out if both ``sid`` and ``fid`` are provided. sid : 1d-array or None Vector of sample IDs. Can be left out if ``shape`` is provided. fid : 1d-array or None Vector of feature IDs. Can be left out if ``shape`` is provided. dtype : type or str Pretend-datatype of the non-existing samples. """ if shape is None and sid is None and fid is None: raise ValueError("Either shape or ID vectors have to be given") if not shape is None and not len(shape) == 2: raise ValueError("Only two-dimensional shapes are supported") if sid is None: self.sid = np.arange(shape[0], dtype='uint') else: self.sid = sid if fid is None: self.fid = np.arange(shape[1], dtype='uint') else: self.fid = fid self.dtype = dtype # sanity check if not shape is None and not len(self.sid) == shape[0] \ and not len(self.fid) == shape[1]: raise ValueError("Provided ID vectors do not match given `shape`") def __reduce__(self): return (self.__class__, ((len(self.sid), len(self.fid)), self.sid, self.fid, self.dtype)) def copy(self, deep=True): return deep and copy.deepcopy(self) or copy.copy(self) @property def shape(self): return (len(self.sid), len(self.fid)) @property def samples(self): return np.zeros((len(self.sid), len(self.fid)), dtype=self.dtype) def __array__(self, dtype=None): # come up with a fake array of proper dtype return np.zeros((len(self.sid), len(self.fid)), dtype=self.dtype) def __getitem__(self, args): if not isinstance(args, tuple): args = (args,) if len(args) > 2: raise ValueError("Too many arguments (%i). At most there can be " "two arguments, one for samples selection and one " "for features selection" % len(args)) if len(args) == 1: args = [args[0], slice(None)] else: args = [a for a in args] # ints need to become lists to prevent silent dimensionality changes # of the arrays when slicing for i, a in enumerate(args): if isinstance(a, int): args[i] = [a] # apply to vectors sid = self.sid[args[0]] fid = self.fid[args[1]] return HollowSamples((len(sid), len(fid)), sid=sid, fid=fid, dtype=self.dtype) def view(self): """Return itself""" return self pymvpa2-2.2.0/mvpa2/datasets/channel.py000066400000000000000000000043131202542755000177330ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Dataset handling data structured in channels.""" __docformat__ = 'restructuredtext' # # # THIS CODE IS OBSOLETE! # # PLEASE PORT substract_baseline() AND resample() TO WORK WITH ANY DATASET. # raise DeprecationWarning("ChannelDataset is obsolete and might vanish any " "second.") if False: # just to please Python so it could parse the file ##REF: Name was automagically refactored def substract_baseline(self, t=None): """Substract mean baseline signal from the each timepoint. The baseline is determined by computing the mean over all timepoints specified by `t`. The samples of the dataset are modified in-place and nothing is returned. Parameters ---------- t : int or float or None If an integer, `t` denotes the number of timepoints in the from the start of each sample to be used to compute the baseline signal. If a floating point value, `t` is the duration of the baseline window from the start of each sample in whatever unit corresponding to the datasets `samplingrate`. Finally, if `None` the `t0` property of the dataset is used to determine `t` as it would have been specified as duration. """ # if no baseline length is given, use t0 if t is None: t = np.abs(self.t0) # determine length of baseline in samples if isinstance(t, float): t = np.round(t * self.samplingrate) # get original data data = self.O # compute baseline # XXX: shouldn't this be done per chunk? baseline = np.mean(data[:, :, :t], axis=2) # remove baseline data -= baseline[..., np.newaxis] # put data back into dataset self.samples[:] = self.mapForward(data) pymvpa2-2.2.0/mvpa2/datasets/eep.py000066400000000000000000000133021202542755000170720ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Dataset that gets its samples from an EEP binary file""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.datasets import Dataset from mvpa2.misc.io import DataReader def eep_dataset(samples, targets=None, chunks=None): """Create a dataset using an EEP binary file as source. EEP files are used by *eeprobe* a software for analysing even-related potentials (ERP), which was developed at the Max-Planck Institute for Cognitive Neuroscience in Leipzig, Germany. http://www.ant-neuro.com/products/eeprobe Parameters ---------- samples : str or EEPBin instance This is either a filename of an EEP file, or an EEPBin instance, providing the samples data in EEP format. targets, chunks : sequence or scalar or None Values are pass through to `Dataset.from_wizard()`. See its documentation for more information. Returns ------- Dataset Besides is usual attributes (e.g. targets, chunks, and a mapper). The returned dataset also includes feature attributes associating each same with a channel (by id), and a specific timepoint -- based on information read from the EEP data. """ if isinstance(samples, str): # open the eep file eb = EEPBin(samples) elif isinstance(samples, EEPBin): # nothing special eb = samples else: raise ValueError("eep_dataset takes the filename of an " "EEP file or a EEPBin object as 'samples' argument.") # init dataset ds = Dataset.from_channeltimeseries( eb.data, targets=targets, chunks=chunks, t0=eb.t0, dt=eb.dt, channelids=eb.channels) return ds class EEPBin(DataReader): """Read-access to binary EEP files. EEP files are used by *eeprobe* a software for analysing even-related potentials (ERP), which was developed at the Max-Planck Institute for Cognitive Neuroscience in Leipzig, Germany. http://www.ant-neuro.com/products/eeprobe EEP files consist of a plain text header and a binary data block in a single file. The header starts with a line of the form ';%d %d %d %g %g' % (Nchannels, Nsamples, Ntrials, t0, dt) where Nchannels, Nsamples, Ntrials are the numbers of channels, samples per trial and trials respectively. t0 is the time of the first sample of a trial relative to the stimulus onset and dt is the sampling interval. The binary data block consists of single precision floats arranged in the following way:: ,,... ,,... . ,,... ,,... """ def __init__(self, source): """Read EEP file and store header and data. Parameters ---------- source : str Filename. """ # init base class DataReader.__init__(self) # temp storage of number of samples nsamples = None # non-critical header components stored in temp dict hdr = {} infile = open(source, "rb") # read file the end of header of EOF while True: # one line at a time try: line = infile.readline().decode('ascii') except UnicodeDecodeError: break # stop if EOH or EOF if not line or line.startswith(';EOH;'): break # no crap! line = line.strip() # all but first line as colon if not line.count(':'): # top header l = line.split() # extract critical information self._props['nchannels'] = int(l[0][1:]) self._props['ntimepoints'] = int(l[1]) self._props['t0'] = float(l[3]) self._props['dt'] = float(l[4]) nsamples = int(l[2]) else: # simply store non-critical extras l = line.split(':') key = l[0].lstrip(';') value = ':'.join(l[1:]) hdr[key] = value # post process channel name info -> list if hdr.has_key('channels'): self._props['channels'] = hdr['channels'].split() self._data = \ np.reshape(np.fromfile(infile, dtype='f'), \ (nsamples, self._props['nchannels'], self._props['ntimepoints'])) # cleanup infile.close() nchannels = property(fget=lambda self: self._props['nchannels'], doc="Number of channels") ntimepoints = property(fget=lambda self: self._props['ntimepoints'], doc="Number of data timepoints") nsamples = property(fget=lambda self: self._data.shape[0], doc="Number of trials/samples") t0 = property(fget=lambda self: self._props['t0'], doc="Relative start time of sampling interval") dt = property(fget=lambda self: self._props['dt'], doc="Time difference between two adjacent samples") channels = property(fget=lambda self: self._props['channels'], doc="List of channel names") pymvpa2-2.2.0/mvpa2/datasets/eventrelated.py000066400000000000000000000236101202542755000210060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Dataset for event-related samples.""" __docformat__ = 'restructuredtext' import copy import numpy as np from mvpa2.misc.support import Event, value2idx from mvpa2.base.dataset import _expand_attribute from mvpa2.mappers.fx import _uniquemerge2literal from mvpa2.mappers.flatten import FlattenMapper from mvpa2.mappers.boxcar import BoxcarMapper from mvpa2.base import warning def find_events(**kwargs): """Detect changes in multiple synchronous sequences. Multiple sequence arguments are scanned for changes in the unique value combination at corresponding locations. Each change in the combination is taken as a new event onset. The length of an event is determined by the number of identical consecutive combinations. Parameters ---------- **kwargs : sequences Arbitrary number of sequences that shall be scanned. Returns ------- list Detected events, where each event is a dictionary with the unique combination of values stored under their original name. In addition, the dictionary also contains the ``onset`` of the event (as index in the sequence), as well as the ``duration`` (as number of identical consecutive items). See Also -------- eventrelated_dataset : event-related segmentation of a dataset Examples -------- >>> seq1 = ['one', 'one', 'two', 'two'] >>> seq2 = [1, 1, 1, 2] >>> events = find_events(targets=seq1, chunks=seq2) >>> for e in events: ... print e {'chunks': 1, 'duration': 2, 'onset': 0, 'targets': 'one'} {'chunks': 1, 'duration': 1, 'onset': 2, 'targets': 'two'} {'chunks': 2, 'duration': 1, 'onset': 3, 'targets': 'two'} """ def _build_event(onset, duration, combo): ev = Event(onset=onset, duration=duration, **combo) return ev events = [] prev_onset = 0 old_combo = None duration = 1 # over all samples for r in xrange(len(kwargs.values()[0])): # current attribute combination combo = dict([(k, v[r]) for k, v in kwargs.iteritems()]) # check if things changed if not combo == old_combo: # did we ever had an event if not old_combo is None: events.append(_build_event(prev_onset, duration, old_combo)) # reset duration for next event duration = 1 # store the current samples as onset for the next event prev_onset = r # update the reference combination old_combo = combo else: # current event is lasting duration += 1 # push the last event in the pipeline if not old_combo is None: events.append(_build_event(prev_onset, duration, old_combo)) return events def eventrelated_dataset(ds, events=None, time_attr=None, match='prev', eprefix='event'): """Segment a dataset into a set of events. This function can be used to extract event-related samples from any time-series based dataset (actually, it don't have to be time series, but could also be any other type of ordered samples). Boxcar-shaped event samples, potentially spanning multiple input samples can be automatically extracted using :class:`~mvpa2.misc.support.Event` definition lists. For each event all samples covering that particular event are used to form the corresponding sample. An event definition is a dictionary that contains ``onset`` (as sample index in the input dataset), ``duration`` (as number of consecutive samples after the onset), as well as an arbitrary number of additional attributes. Alternatively, ``onset`` and ``duration`` may also be given as real time stamps (or durations). In this case a to be specified samples attribute in the input dataset will be used to convert these into sample indices. Parameters ---------- ds : Dataset The samples of this input dataset have to be in whatever ascending order. events : list Each event definition has to specify ``onset`` and ``duration``. All other attributes will be passed on to the sample attributes collection of the returned dataset. time_attr : str or None If not None, the ``onset`` and ``duration`` specs from the event list will be converted using information from this sample attribute. Its values will be treated as in-the-same-unit and are used to determine corresponding samples from real-value onset and duration definitions. match : {'prev', 'next', 'closest'} Strategy used to match real-value onsets to sample indices. 'prev' chooses the closes preceding samples, 'next' the closest following sample and 'closest' to absolute closest sample. eprefix : str or None If not None, this prefix is used to name additional attributes generated by the underlying `~mvpa2.mappers.boxcar.BoxcarMapper`. If it is set to None, no additional attributes will be created. Returns ------- Dataset The returned dataset has one sample per each event definition that has been passed to the function. Examples -------- The documentation also contains an :ref:`example script ` showing a spatio-temporal analysis of fMRI data that involves this function. >>> from mvpa2.datasets import Dataset >>> ds = Dataset(np.random.randn(10, 25)) >>> events = [{'onset': 2, 'duration': 4}, ... {'onset': 4, 'duration': 4}] >>> eds = eventrelated_dataset(ds, events) >>> len(eds) 2 >>> eds.nfeatures == ds.nfeatures * 4 True >>> 'mapper' in ds.a False >>> print eds.a.mapper -> And now the same conversion, but with events specified as real time. This is on possible if the input dataset contains a sample attribute with the necessary information about the input samples. >>> ds.sa['record_time'] = np.linspace(0, 5, len(ds)) >>> rt_events = [{'onset': 1.05, 'duration': 2.2}, ... {'onset': 2.3, 'duration': 2.12}] >>> rt_eds = eventrelated_dataset(ds, rt_events, time_attr='record_time', ... match='closest') >>> np.all(eds.samples == rt_eds.samples) True >>> # returned dataset e.g. has info from original samples >>> rt_eds.sa.record_time array([[ 1.11111111, 1.66666667, 2.22222222, 2.77777778], [ 2.22222222, 2.77777778, 3.33333333, 3.88888889]]) """ # relabel argument conv_strategy = {'prev': 'floor', 'next': 'ceil', 'closest': 'round'}[match] if not time_attr is None: tvec = ds.sa[time_attr].value # we are asked to convert onset time into sample ids descr_events = [] for ev in events: # do not mess with the input data ev = copy.deepcopy(ev) # best matching sample idx = value2idx(ev['onset'], tvec, conv_strategy) # store offset of sample time and real onset ev['orig_offset'] = ev['onset'] - tvec[idx] # rescue the real onset into a new attribute ev['orig_onset'] = ev['onset'] ev['orig_duration'] = ev['duration'] # figure out how many samples we need ev['duration'] = \ len(tvec[idx:][tvec[idx:] < ev['onset'] + ev['duration']]) # new onset is sample index ev['onset'] = idx descr_events.append(ev) else: descr_events = events # convert the event specs into the format expected by BoxcarMapper # take the first event as an example of contained keys evvars = {} for k in descr_events[0]: try: evvars[k] = [e[k] for e in descr_events] except KeyError: raise ValueError("Each event property must be present for all " "events (could not find '%s')" % k) # checks for p in ['onset', 'duration']: if not p in evvars: raise ValueError("'%s' is a required property for all events." % p) boxlength = max(evvars['duration']) if __debug__: if not max(evvars['duration']) == min(evvars['duration']): warning('Boxcar mapper will use maximum boxlength (%i) of all ' 'provided Events.'% boxlength) # finally create, train und use the boxcar mapper bcm = BoxcarMapper(evvars['onset'], boxlength, space=eprefix) bcm.train(ds) ds = ds.get_mapped(bcm) # at last reflatten the dataset # could we add some meaningful attribute during this mapping, i.e. would # assigning 'inspace' do something good? ds = ds.get_mapped(FlattenMapper(shape=ds.samples.shape[1:])) # add samples attributes for the events, simply dump everything as a samples # attribute for a in evvars: if not eprefix is None and a in ds.sa: # if there is already a samples attribute like this, it got mapped # by BoxcarMapper (i.e. is multi-dimensional). We move it aside # under new `eprefix` name ds.sa[eprefix + '_' + a] = ds.sa[a] if a in ['onset', 'duration']: # special case: we want the non-discrete, original onset and # duration if not time_attr is None: # but only if there was a conversion happining, since otherwise # we get the same info from BoxcarMapper ds.sa[a] = [e[a] for e in events] else: ds.sa[a] = evvars[a] return ds pymvpa2-2.2.0/mvpa2/datasets/formats.py000066400000000000000000000133011202542755000177730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """I/O helpers for some commonly used formats for datasets. """ __docformat__ = 'restructuredtext' from mvpa2.base import externals import sys import numpy as np if __debug__: from mvpa2.base import debug from mvpa2.datasets.base import Dataset from mvpa2.base import warning from mvpa2.misc.attrmap import AttributeMap # LightSVM : def to_lightsvm_format(dataset, out, targets_attr='targets', domain=None, am=None): """Export dataset into LightSVM format Parameters ---------- dataset : Dataset out Anything understanding .write(string), such as `File` targets_attr : string, optional Name of the samples attribute to be output domain : {None, 'regression', 'binary', 'multiclass'}, optional What domain dataset belongs to. If `None`, it would be deduced depending on the datatype ('regression' if float, classification in case of int or string, with 'binary'/'multiclass' depending on the number of unique targets) am : `AttributeMap` or None, optional Which mapping to use for storing the non-conformant targets. If None was provided, new one would be automagically generated depending on the given/deduced domain. Returns ------- am LightSVM format is an ASCII representation with a single sample per each line:: output featureIndex:featureValue ... featureIndex:featureValue where ``output`` is specific for a given domain: regression float number binary integer labels from {-1, 1} multiclass integer labels from {1..ds.targets_attr.nunique} """ targets_a = dataset.sa[targets_attr] targets = targets_a.value # XXX this all below # * might become cleaner # * might be RF to become more generic to be used may be elsewhere as well if domain is None: if targets.dtype.kind in ['S', 'U', 'i']: if len(targets_a.unique) == 2: domain = 'binary' else: domain = 'multiclass' else: domain = 'regression' if domain in ['multiclass', 'binary']: # check if labels are appropriate and provide mapping if necessary utargets = targets_a.unique if domain == 'binary' and set(utargets) != set([-1, 1]): # need mapping if len(utargets) != 2: raise ValueError, \ "We need 2 unique targets in %s of %s. Got targets " \ "from set %s" % (targets_attr, dataset, utargets) if am is None: am = AttributeMap(dict(zip(utargets, [-1, 1]))) elif set(am.keys()) != set([-1, 1]): raise ValueError, \ "Provided %s doesn't map into binary " \ "labels -1,+1" % (am,) elif domain == 'multiclass' \ and set(utargets) != set(range(1, len(utargets)+1)): if am is None: am = AttributeMap(dict(zip(utargets, range(1, len(utargets) + 1)))) elif set(am.keys()) != set([-1, 1]): raise ValueError, \ "Provided %s doesn't map into multiclass " \ "range 1..N" % (am, ) if am is not None: # map the targets targets = am.to_numeric(targets) for t, s in zip(targets, dataset.samples): out.write(('%g %s\n' % (t, ' '.join( '%i:%.8g' % (i, v) for i,v in zip(range(1, dataset.nfeatures+1), s)))).encode('ascii')) out.flush() # push it out return am def from_lightsvm_format(in_, targets_attr='targets', am=None): """Loads dataset from a file in lightsvm format Parameters ---------- in_ Anything we could iterate over and obtain strings, such as `File` targets_attr : string, optional Name of the samples attribute to be used to store targets/labels am : `AttributeMap` or None, optional Which mapping to use for mapping labels back into possibly a literal representation. Returns ------- dataset See Also -------- to_lightsvm_format : conversion to lightsvm format """ targets = [] samples = [] for l in in_: # we need to parse the line entries = l.split() targets += entries[:1] id_features = [e.split(':') for e in entries[1:]] f_ids = np.array([x[0] for x in id_features], dtype=int) f_vals = [float(x[1]) for x in id_features] if np.any(f_ids != np.arange(1, len(f_ids)+1)): raise NotImplementedError, \ "For now supporting only input of non-sparse " \ "lightsvm-formatted files. got line with feature " \ "ids %s " % f_ids samples.append(f_vals) # lets try to make targets of int, float, string until first # matching type ;) for t in (int, float, None): try: targets = np.array(targets, dtype=t) break except ValueError: pass if am is not None: targets = am.to_literal(targets) samples = np.array(samples) sa = {} sa[targets_attr] = targets ds = Dataset(samples, sa=sa) return ds # CRF++ : http://crfpp.sourceforge.net/ pymvpa2-2.2.0/mvpa2/datasets/miscfx.py000066400000000000000000000414171202542755000176220ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Misc function performing operations on datasets. All the functions defined in this module must accept dataset as the first argument since they are bound to Dataset class in the trailer. """ __docformat__ = 'restructuredtext' import random import numpy as np from mvpa2.base.dataset import datasetmethod from mvpa2.datasets.base import Dataset from mvpa2.base.dochelpers import table2string from mvpa2.misc.support import get_nelements_per_value from mvpa2.base import externals, warning from mvpa2.base.types import is_sequence_type if __debug__: from mvpa2.base import debug @datasetmethod ##REF: Name was automagically refactored def aggregate_features(dataset, fx=np.mean): """Apply a function to each row of the samples matrix of a dataset. The functor given as `fx` has to honour an `axis` keyword argument in the way that NumPy used it (e.g. NumPy.mean, var). Returns ------- a new `Dataset` object with the aggregated feature(s). """ agg = fx(dataset.samples, axis=1) return Dataset(samples=np.array(agg, ndmin=2).T, sa=dataset.sa) @datasetmethod ##REF: Name was automagically refactored def remove_invariant_features(dataset): """Returns a new dataset with all invariant features removed. """ return dataset[:, dataset.samples.std(axis=0).nonzero()[0]] @datasetmethod ##REF: Name was automagically refactored def coarsen_chunks(source, nchunks=4): """Change chunking of the dataset Group chunks into groups to match desired number of chunks. Makes sense if originally there were no strong groupping into chunks or each sample was independent, thus belonged to its own chunk Parameters ---------- source : Dataset or list of chunk ids dataset or list of chunk ids to operate on. If Dataset, then its chunks get modified nchunks : int desired number of chunks """ if isinstance(source, Dataset): chunks = source.chunks else: chunks = source chunks_unique = np.unique(chunks) nchunks_orig = len(chunks_unique) if nchunks_orig < nchunks: raise ValueError, \ "Original number of chunks is %d. Cannot coarse them " \ "to get %d chunks" % (nchunks_orig, nchunks) # figure out number of samples per each chunk counts = dict(zip(chunks_unique, [ 0 ] * len(chunks_unique))) for c in chunks: counts[c] += 1 # now we need to group chunks to get more or less equalized number # of samples per chunk. No sophistication is done -- just # consecutively group to get close to desired number of samples # per chunk avg_chunk_size = np.sum(counts.values())*1.0/nchunks chunks_groups = [] cur_chunk = [] nchunks = 0 cur_chunk_nsamples = 0 samples_counted = 0 for i, c in enumerate(chunks_unique): cc = counts[c] cur_chunk += [c] cur_chunk_nsamples += cc # time to get a new chunk? if (samples_counted + cur_chunk_nsamples >= (nchunks+1)*avg_chunk_size) or i==nchunks_orig-1: chunks_groups.append(cur_chunk) samples_counted += cur_chunk_nsamples cur_chunk_nsamples = 0 cur_chunk = [] nchunks += 1 if len(chunks_groups) != nchunks: warning("Apparently logic in coarseChunks is wrong. " "It was desired to get %d chunks, got %d" % (nchunks, len(chunks_groups))) # remap using groups # create dictionary chunks_map = {} for i, group in enumerate(chunks_groups): for c in group: chunks_map[c] = i # we always want an array! chunks_new = np.array([chunks_map[x] for x in chunks]) if __debug__: debug("DS_", "Using dictionary %s to remap old chunks %s into new %s" % (chunks_map, chunks, chunks_new)) if isinstance(source, Dataset): if __debug__: debug("DS", "Coarsing %d chunks into %d chunks for %s" %(nchunks_orig, len(chunks_new), source)) source.sa['chunks'].value = chunks_new return else: return chunks_new @datasetmethod ## TODO: make more efficient and more generic (accept >=1 attrs to ## operate on) def get_samples_per_chunk_target(dataset, targets_attr='targets', chunks_attr='chunks'): """Returns an array with the number of samples per target in each chunk. Array shape is (chunks x targets). Parameters ---------- dataset : Dataset Source dataset. """ # shortcuts/local bindings ta = dataset.sa[targets_attr] ca = dataset.sa[chunks_attr] # unique ut = ta.unique uc = ca.unique # all ts = ta.value cs = ca.value count = np.zeros((len(uc), len(ut)), dtype='uint') for ic, c in enumerate(uc): for it, t in enumerate(ut): count[ic, it] = np.sum(np.logical_and(ts==t, cs==c)) return count @datasetmethod def random_samples(dataset, npertarget, targets_attr='targets'): """Create a dataset with a random subset of samples. Parameters ---------- dataset : Dataset npertarget : int or list If an `int` is given, the specified number of samples is randomly chosen from the group of samples sharing a unique target value. Total number of selected samples: npertarget x len(uniquetargets). If a `list` is given of length matching the unique target values, it specifies the number of samples chosen for each particular unique target. targets_attr : str, optional Returns ------- Dataset A dataset instance for the chosen samples. All feature attributes and dataset attribute share there data with the source dataset. """ satargets = dataset.sa[targets_attr] utargets = satargets.unique # if interger is given take this value for all classes if isinstance(npertarget, int): npertarget = [npertarget for i in utargets] sample = [] # for each available class targets = satargets.value for i, r in enumerate(utargets): # get the list of pattern ids for this class sample += random.sample(list((targets == r).nonzero()[0]), npertarget[i] ) return dataset[sample] @datasetmethod def get_nsamples_per_attr(dataset, attr): """Returns the number of samples per unique value of a sample attribute. Parameters ---------- attr : str Name of the sample attribute Returns ------- dict with the number of samples (value) per unique attribute (key). """ return get_nelements_per_value(dataset.sa[attr]) @datasetmethod def get_samples_by_attr(dataset, attr, values, sort=True): """Return indices of samples given a list of attributes """ if not is_sequence_type(values) \ or isinstance(values, basestring): values = [ values ] # TODO: compare to plain for loop through the targets # on a real data example sel = np.array([], dtype=np.int16) sa = dataset.sa for value in values: sel = np.concatenate(( sel, np.where(sa[attr].value == value)[0])) if sort: # place samples in the right order sel.sort() return sel @datasetmethod def summary(dataset, stats=True, lstats='auto', sstats='auto', idhash=False, targets_attr='targets', chunks_attr='chunks', maxc=30, maxt=20): """String summary over the object Parameters ---------- stats : bool Include some basic statistics (mean, std, var) over dataset samples lstats : 'auto' or bool Include statistics on chunks/targets. If 'auto', includes only if both targets_attr and chunks_attr are present. sstats : 'auto' or bool Sequence (order) statistics. If 'auto', includes only if targets_attr is present. idhash : bool Include idhash value for dataset and samples targets_attr : str, optional Name of sample attributes of targets chunks_attr : str, optional Name of sample attributes of chunks -- independent groups of samples maxt : int Maximal number of targets when provide details on targets/chunks maxc : int Maximal number of chunks when provide details on targets/chunks """ # local bindings samples = dataset.samples sa = dataset.sa s = str(dataset)[1:-1] if idhash: s += '\nID-Hashes: %s' % dataset.idhash # Deduce if necessary lstats and sstats if lstats == 'auto': lstats = (targets_attr in sa) and (chunks_attr in sa) if sstats == 'auto': sstats = (targets_attr in sa) ssep = (' ', '\n')[lstats] ## Possibly summarize attributes listed as having unique if stats: if np.issctype(samples.dtype): # TODO -- avg per chunk? # XXX We might like to use scipy.stats.describe to get # quick summary statistics (mean/range/skewness/kurtosis) if dataset.nfeatures: s += "%sstats: mean=%g std=%g var=%g min=%g max=%g\n" % \ (ssep, np.mean(samples), np.std(samples), np.var(samples), np.min(samples), np.max(samples)) else: s += "%sstats: dataset has no features\n" % ssep else: s += "%sstats: no stats for dataset of '%s' dtype" % (ssep, samples.dtype) if lstats: try: s += dataset.summary_targets( targets_attr=targets_attr, chunks_attr=chunks_attr, maxc=maxc, maxt=maxt) except KeyError, e: s += 'No per %s/%s due to %r' % (targets_attr, chunks_attr, e) if sstats and not targets_attr is None: if len(dataset.sa[targets_attr].unique) < maxt: ss = SequenceStats(dataset.sa[targets_attr].value) s += str(ss) else: s += "Number of unique %s > %d thus no sequence statistics" % \ (targets_attr, maxt) return s @datasetmethod def summary_targets(dataset, targets_attr='targets', chunks_attr='chunks', maxc=30, maxt=20): """Provide summary statistics over the targets and chunks Parameters ---------- dataset : `Dataset` Dataset to operate on targets_attr : str, optional Name of sample attributes of targets chunks_attr : str, optional Name of sample attributes of chunks -- independent groups of samples maxc : int Maximal number of chunks when provide details maxt : int Maximal number of targets when provide details """ # We better avoid bound function since if people only # imported Dataset without miscfx it would fail spcl = get_samples_per_chunk_target( dataset, targets_attr=targets_attr, chunks_attr=chunks_attr) # XXX couldn't they be unordered? ul = dataset.sa[targets_attr].unique.tolist() uc = dataset.sa[chunks_attr].unique.tolist() s = "" if len(ul) < maxt and len(uc) < maxc: s += "\nCounts of targets in each chunk:" # only in a reasonable case do printing table = [[' %s\\%s' % (chunks_attr, targets_attr)] + ul] table += [[''] + ['---'] * len(ul)] for c, counts in zip(uc, spcl): table.append([ str(c) ] + counts.tolist()) s += '\n' + table2string(table) else: s += "No details due to large number of targets or chunks. " \ "Increase maxc and maxt if desired" def cl_stats(axis, u, name1, name2): """Compute statistics per target """ stats = {'min': np.min(spcl, axis=axis), 'max': np.max(spcl, axis=axis), 'mean': np.mean(spcl, axis=axis), 'std': np.std(spcl, axis=axis), '#%s' % name2: np.sum(spcl>0, axis=axis)} entries = [' ' + name1, 'mean', 'std', 'min', 'max', '#%s' % name2] table = [ entries ] for i, l in enumerate(u): d = {' ' + name1 : l} d.update(dict([ (k, stats[k][i]) for k in stats.keys()])) table.append( [ ('%.3g', '%s')[isinstance(d[e], basestring)] % d[e] for e in entries] ) return '\nSummary for %s across %s\n' % (name1, name2) \ + table2string(table) if len(ul) < maxt: s += cl_stats(0, ul, targets_attr, chunks_attr) if len(uc) < maxc: s += cl_stats(1, uc, chunks_attr, targets_attr) return s class SequenceStats(dict): """Simple helper to provide representation of sequence statistics Matlab analog: http://cfn.upenn.edu/aguirre/code/matlablib/mseq/mtest.m WARNING: Experimental -- API might change without warning! Current implementation is ugly! """ # TODO: operate given some "chunks" so it could report also # counter-balance for the borders, mean across chunks, etc def __init__(self, seq, order=2):#, chunks=None, chunks_attr=None): """Initialize SequenceStats Parameters ---------- seq : list or ndarray Actual sequence of targets order : int Maximal order of counter-balancing check. For perfect counterbalancing all matrices should be identical """ """ chunks : None or list or ndarray Chunks to use if `perchunk`=True """ dict.__init__(self) self.order = order self._seq = seq self.stats = None self._str_stats = None self._compute() def __repr__(self): """Representation of SequenceStats """ return "SequenceStats(%s, order=%d)" % (repr(self._seq), self.order) def __str__(self): return self._str_stats def _compute(self): """Compute stats and string representation """ # Do actual computation order = self.order seq = list(self._seq) # assure list nsamples = len(seq) # # of samples/targets utargets = sorted(list(set(seq))) # unique targets ntargets = len(utargets) # # of targets # mapping for targets targets_map = dict([(l, i) for i, l in enumerate(utargets)]) # map sequence first seqm = [targets_map[i] for i in seq] # npertarget = np.bincount(seqm) res = dict(utargets=utargets) # Estimate counter-balance cbcounts = np.zeros((order, ntargets, ntargets), dtype=int) for cb in xrange(order): for i, j in zip(seqm[:-(cb+1)], seqm[cb+1:]): cbcounts[cb, i, j] += 1 res['cbcounts'] = cbcounts """ Lets compute relative counter-balancing Ideally, npertarget[i]/ntargets should precede each target """ # Autocorrelation corr = [] # for all possible shifts: for shift in xrange(1, nsamples): shifted = seqm[shift:] + seqm[:shift] # ??? User pearsonsr with p may be? corr += [np.corrcoef(seqm, shifted)[0, 1]] # ??? report high (anti)correlations? res['corrcoef'] = corr = np.array(corr) res['sumabscorr'] = sumabscorr = np.sum(np.abs(corr)) self.update(res) # Assign textual summary # XXX move into a helper function and do on demand t = [ [""] * (1 + self.order*(ntargets+1)) for i in xrange(ntargets+1) ] t[0][0] = "Targets/Order" for i, l in enumerate(utargets): t[i+1][0] = '%s:' % l for cb in xrange(order): t[0][1+cb*(ntargets+1)] = "O%d" % (cb+1) for i in xrange(ntargets+1): t[i][(cb+1)*(ntargets+1)] = " | " m = cbcounts[cb] # ??? there should be better way to get indexes ind = np.where(~np.isnan(m)) for i, j in zip(*ind): t[1+i][1+cb*(ntargets+1)+j] = '%d' % m[i, j] sout = "Sequence statistics for %d entries" \ " from set %s\n" % (len(seq), utargets) + \ "Counter-balance table for orders up to %d:\n" % order \ + table2string(t) if len(corr): sout += "Correlations: min=%.2g max=%.2g mean=%.2g sum(abs)=%.2g" \ % (min(corr), max(corr), np.mean(corr), sumabscorr) self._str_stats = sout def plot(self): """Plot correlation coefficients """ externals.exists('pylab', raise_=True) import pylab as pl pl.plot(self['corrcoef']) pl.title('Auto-correlation of the sequence') pl.xlabel('Offset') pl.ylabel('Correlation Coefficient') pl.show() pymvpa2-2.2.0/mvpa2/datasets/mri.py000066400000000000000000000316501202542755000171160ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Dataset for magnetic resonance imaging (MRI) data. This module offers functions to import into PyMVPA MRI data from files in any format supported by NiBabel_ (e.g. NIfTI, MINC, Analyze), and export PyMVPA datasets back into data formats supported by NiBabel_. .. _NiBabel: http://nipy.sourceforge.net/nibabel """ __docformat__ = 'restructuredtext' from mvpa2.base import externals externals.exists('nibabel', raise_=True) import sys import numpy as np from mvpa2.support.copy import deepcopy from mvpa2.misc.support import Event from mvpa2.base.collections import DatasetAttribute from mvpa2.base.dataset import _expand_attribute if __debug__: from mvpa2.base import debug from mvpa2.datasets.base import Dataset from mvpa2.mappers.fx import _uniquemerge2literal from mvpa2.mappers.flatten import FlattenMapper from mvpa2.mappers.boxcar import BoxcarMapper from mvpa2.base import warning def _data2img(data, hdr=None, imgtype=None): # input data is t,x,y,z # let's try whether we can get it done with nibabel import nibabel if imgtype is None: # default is NIfTI1 imgtype = nibabel.Nifti1Image else: itype = imgtype def _img2data(src): # break early of nothing has been given # XXX feels a little strange to handle this so deep inside, but well... if src is None: return None # let's try whether we can get it done with nibabel import nibabel if isinstance(src, basestring): # filename img = nibabel.load(src) else: # assume this is an image already img = src if isinstance(img, nibabel.spatialimages.SpatialImage): # nibabel image, dissect and return pieces return _get_txyz_shaped(img.get_data()), img.get_header(), img.__class__ else: # no clue what it is return None def map2nifti(dataset, data=None, imghdr=None, imgtype=None): """Maps data(sets) into the original dataspace and wraps it into an Image. Parameters ---------- dataset : Dataset The mapper of this dataset is used to perform the reverse-mapping. data : ndarray or Dataset, optional The data to be wrapped into NiftiImage. If None (default), it would wrap samples of the provided dataset. If it is a Dataset instance -- takes its samples for mapping. imghdr : None or dict, optional Image header data. If None, the header is taken from `dataset.a.imghdr`. imgtype : None or class, optional Image class to be used for the instance. If None, the type is taken from `dataset.a.imgtype`. Returns ------- Image Instance of a class derived from :class:`nibabel.spatialimages.SpatialImage`, such as Nifti1Image """ import nibabel if data is None: data = dataset.samples elif isinstance(data, Dataset): # ease users life data = data.samples # call the appropriate function to map single samples or multiples if len(data.shape) > 1: dsarray = dataset.a.mapper.reverse(data) else: dsarray = dataset.a.mapper.reverse1(data) if imghdr is None: if 'imghdr' in dataset.a: imghdr = dataset.a.imghdr elif __debug__: debug('DS_NIFTI', 'No image header found. Using defaults.') if imgtype is None: if 'imgtype' in dataset.a: imgtype = dataset.a.imgtype else: imgtype = nibabel.Nifti1Image if __debug__: debug('DS_NIFTI', 'No image type found in %s. Using default Nifti1Image.' % (dataset.a)) # Augment header if data dsarray dtype could not be represented # with imghdr.get_data_dtype() if issubclass(imgtype, nibabel.spatialimages.SpatialImage) \ and (imghdr is None or hasattr(imghdr, 'get_data_dtype')): # we can handle the desired image type and hdr with nibabel # use of `None` for the affine should cause to pull it from # the header return imgtype(_get_xyzt_shaped(dsarray), None, imghdr) else: raise ValueError( "Got imgtype=%s and imghdr=%s -- cannot generate an Image" % (imgtype, imghdr)) return RuntimeError("Should have never got here -- check your Python") def fmri_dataset(samples, targets=None, chunks=None, mask=None, sprefix='voxel', tprefix='time', add_fa=None,): """Create a dataset from an fMRI timeseries image. The timeseries image serves as the samples data, with each volume becoming a sample. All 3D volume samples are flattened into one-dimensional feature vectors, optionally being masked (i.e. subset of voxels corresponding to non-zero elements in a mask image). In addition to (optional) samples attributes for targets and chunks the returned dataset contains a number of additional attributes: Samples attributes (per each volume): * volume index (time_indices) * volume acquisition time (time_coord) Feature attributes (per each voxel): * voxel indices (voxel_indices), sometimes referred to as ijk Dataset attributes: * dump of the image (e.g. NIfTI) header data (imghdr) * class of the image (e.g. Nifti1Image) (imgtype) * volume extent (voxel_dim) * voxel extent (voxel_eldim) The default attribute name is listed in parenthesis, but may be altered by the corresponding prefix arguments. The validity of the attribute values relies on correct settings in the NIfTI image header. Parameters ---------- samples : str or NiftiImage or list fMRI timeseries, specified either as a filename (single file 4D image), an image instance (4D image), or a list of filenames or image instances (each list item corresponding to a 3D volume). targets : scalar or sequence Label attribute for each volume in the timeseries, or a scalar value that is assigned to all samples. chunks : scalar or sequence Chunk attribute for each volume in the timeseries, or a scalar value that is assigned to all samples. mask : str or NiftiImage Filename or image instance of a 3D volume mask. Voxels corresponding to non-zero elements in the mask will be selected. The mask has to be in the same space (orientation and dimensions) as the timeseries image sprefix : str or None Prefix for attribute names describing spatial properties of the timeseries. If None, no such attributes are stored in the dataset. tprefix : str or None Prefix for attribute names describing temporal properties of the timeseries. If None, no such attributes are stored in the dataset. add_fa : dict or None Optional dictionary with additional volumetric data that shall be stored as feature attributes in the dataset. The dictionary key serves as the feature attribute name. Each value might be of any type supported by the 'mask' argument of this function. Returns ------- Dataset """ # load the samples imgdata, imghdr, imgtype = _load_anyimg(samples, ensure=True, enforce_dim=4) # figure out what the mask is, but only handle known cases, the rest # goes directly into the mapper which maybe knows more maskimg = _load_anyimg(mask) if maskimg is None: pass else: # take just data and ignore the header mask = maskimg[0] # compile the samples attributes sa = {} if not targets is None: sa['targets'] = _expand_attribute(targets, imgdata.shape[0], 'targets') if not chunks is None: sa['chunks'] = _expand_attribute(chunks, imgdata.shape[0], 'chunks') # create a dataset ds = Dataset(imgdata, sa=sa) if sprefix is None: space = None else: space = sprefix + '_indices' ds = ds.get_mapped(FlattenMapper(shape=imgdata.shape[1:], space=space)) # now apply the mask if any if not mask is None: flatmask = ds.a.mapper.forward1(mask) # direct slicing is possible, and it is potentially more efficient, # so let's use it #mapper = StaticFeatureSelection(flatmask) #ds = ds.get_mapped(StaticFeatureSelection(flatmask)) ds = ds[:, flatmask != 0] # load and store additional feature attributes if not add_fa is None: for fattr in add_fa: value = _load_anyimg(add_fa[fattr], ensure=True)[0] ds.fa[fattr] = ds.a.mapper.forward1(value) # store interesting props in the dataset ds.a['imghdr'] = imghdr ds.a['imgtype'] = imgtype # If there is a space assigned , store the extent of that space if sprefix is not None: ds.a[sprefix + '_dim'] = imgdata.shape[1:] # 'voxdim' is (x,y,z) while 'samples' are (t,z,y,x) ds.a[sprefix + '_eldim'] = _get_voxdim(imghdr) # TODO extend with the unit if tprefix is not None: ds.sa[tprefix + '_indices'] = np.arange(len(ds), dtype='int') ds.sa[tprefix + '_coords'] = np.arange(len(ds), dtype='float') \ * _get_dt(imghdr) # TODO extend with the unit return ds def _get_voxdim(hdr): """Get the size of a voxel from some image header format.""" return hdr.get_zooms()[:-1] def _get_dt(hdr): """Get the TR of a fMRI timeseries from some image header format.""" return hdr.get_zooms()[-1] def _get_txyz_shaped(arr): # we get the data as x,y,z[,t] but we want to have the time axis first # if any if len(arr.shape) == 4: arr = np.rollaxis(arr, -1) return arr def _get_xyzt_shaped(arr): # we get the data as [t,]x,y,z but we want to have the time axis last # if any if len(arr.shape) == 4: arr = np.rollaxis(arr, 0, 4) return arr def _load_anyimg(src, ensure=False, enforce_dim=None): """Load/access NIfTI data from files or instances. Parameters ---------- src : str or NiftiImage Filename of a NIfTI image or a `NiftiImage` instance. ensure : bool, optional If True, throw ValueError exception if cannot be loaded. enforce_dim : int or None If not None, it is the dimensionality of the data to be enforced, commonly 4D for the data, and 3D for the mask in case of fMRI. Returns ------- tuple or None If the source is not supported None is returned. Otherwise a tuple of (imgdata, imghdr, imgtype) Raises ------ ValueError If there is a problem with data (variable dimensionality) or failed to load data and ensure=True. """ imgdata = imghdr = imgtype = None # figure out whether we have a list of things to load and handle that # first if (isinstance(src, list) or isinstance(src, tuple)) \ and len(src)>0: # load from a list of given entries srcs = [_load_anyimg(s, ensure=ensure, enforce_dim=enforce_dim) for s in src] if __debug__: # lets check if they all have the same dimensionality # besides the leading one shapes = [s[0].shape[1:] for s in srcs] if not np.all([s == shapes[0] for s in shapes]): raise ValueError( "Input volumes vary in their shapes: %s" % (shapes,)) # Combine them all into a single beast # will be t,x,y,z imgdata = np.vstack([s[0] for s in srcs]) imghdr, imgtype = srcs[0][1:3] else: # try opening the beast; this might yield none in case of an unsupported # argument and is handled accordingly below data = _img2data(src) if not data is None: imgdata, imghdr, imgtype = data if imgdata is not None and enforce_dim is not None: shape, new_shape = imgdata.shape, None lshape = len(shape) # check if we need to tune up shape if lshape < enforce_dim: # if we are missing required dimension(s) new_shape = (1,)*(enforce_dim-lshape) + shape elif lshape > enforce_dim: # if there are bogus dimensions at the beginning bogus_dims = lshape - enforce_dim if shape[:bogus_dims] != (1,)*bogus_dims: raise ValueError, \ "Cannot enforce %dD on data with shape %s" \ % (enforce_dim, shape) new_shape = shape[bogus_dims:] # tune up shape if needed if new_shape is not None: if __debug__: debug('DS_NIFTI', 'Enforcing shape %s for %s data from %s' % (new_shape, shape, src)) imgdata.shape = new_shape if imgdata is None: return None else: return imgdata, imghdr, imgtype pymvpa2-2.2.0/mvpa2/datasets/sources/000077500000000000000000000000001202542755000174335ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/datasets/sources/__init__.py000066400000000000000000000010061202542755000215410ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """""" __docformat__ = 'restructuredtext' from mvpa2.base import externals if externals.exists('skl'): from .sklearn_data import * pymvpa2-2.2.0/mvpa2/datasets/sources/sklearn_data.py000066400000000000000000000062721202542755000224440ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wrapper for sklearn datasets/data generators.""" __docformat__ = 'restructuredtext' from mvpa2.base import externals if externals.exists('skl', raise_=True): if externals.versions['skl'] >= '0.9': from sklearn import datasets as sklds else: from scitkits.learn import datasets as sklds import inspect __all__ = [] for fx in sklds.__dict__: if not (fx.startswith('make_') or fx.startswith('load_')) \ or fx in ['load_filenames', 'load_files', 'load_sample_image', 'load_sample_images', 'load_svmlight_files', 'load_svmlight_file']: continue fx = getattr(sklds, fx) argnames, varargs, varkw, defaults = inspect.getargspec(fx) if not defaults is None: kwargs = zip(argnames[::-1], defaults[::-1])[::-1] else: kwargs = tuple() args = argnames[:len(argnames) - len(kwargs)] sig = '' if len(args): sig += ', '.join(args) if len(kwargs): if len(sig): sig += ', ' sig += ', '.join(['%s=%s' % (kw[0], repr(kw[1])) for kw in kwargs]) if varargs: if len(sig): sig += ', ' sig += '*%s' % varargs if varkw: if len(sig): sig += ', ' sig += '**%s' % varkw pymvpa_fxname = 'skl_%s' % fx.__name__[5:] fxdef = ''' def %s(%s): """%s Notes ----- This function has been auto-generated by wrapping %s() from the `sklearn `_ package. The documentation of this function has been kept verbatim. Consequently, the actual return value is not as described in the documentation, but the data is returned as a PyMVPA dataset. """ from sklearn import datasets as sklds from mvpa2.datasets import Dataset data = sklds.%s(%s) if isinstance(data, tuple): ds = Dataset(data[0]) if len(data) > 1: ds.sa['targets'] = data[1] if len(data) > 2: raise RuntimeError("sklearn function returned unexpected amount of data") else: ds = Dataset(data['data']) if 'DESCR' in data: ds.a['descr'] = data['DESCR'] if 'feature_names' in data: ds.fa['names'] = data['feature_names'] if 'target' in data: if 'target_names' in data: names = data['target_names'] ds.sa['targets'] = [names[t] for t in data['target']] else: ds.sa['targets'] = data['target'] return ds ''' % (pymvpa_fxname, sig, fx.__doc__, fx.__name__, fx.__name__, ', '.join(argnames)) exec fxdef __all__.append(pymvpa_fxname) pymvpa2-2.2.0/mvpa2/featsel/000077500000000000000000000000001202542755000155635ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/featsel/__init__.py000066400000000000000000000015451202542755000177010ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Feature selection methods. Brief Description of Available Methods ====================================== * `SensitivityBasedFeatureSelection` - generic class to provide feature selection given some sensitivity measure * `RFE` - recursive feature elimination (RFE) * `IFS` - incremental feature selection """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.featsel') if __debug__: debug('INIT', 'mvpa2.featsel end') pymvpa2-2.2.0/mvpa2/featsel/base.py000066400000000000000000000441141202542755000170530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Feature selection base class and related stuff base classes and helpers.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.featsel.helpers import FractionTailSelector, \ NBackHistoryStopCrit, \ BestDetector from mvpa2.mappers.slicing import SliceMapper from mvpa2.mappers.base import accepts_dataset_as_samples from mvpa2.base.dochelpers import _repr_attrs from mvpa2.base.state import ConditionalAttribute from mvpa2.generators.splitters import mask2slice if __debug__: from mvpa2.base import debug class FeatureSelection(SliceMapper): """Mapper to select a subset of features. Depending on the actual slicing two FeatureSelections can be merged in a number of ways: incremental selection (+=), union (&=) and intersection (|=). Were the former assumes that two feature selections are applied subsequently, and the latter two assume that both slicings operate on the set of input features. Examples -------- >>> from mvpa2.datasets import * >>> ds = Dataset([[1,2,3,4,5]]) >>> fs0 = StaticFeatureSelection([0,1,2,3]) >>> fs0(ds).samples array([[1, 2, 3, 4]]) Merge two incremental selections: the resulting mapper performs a selection that is equivalent to first applying one slicing and subsequently the next slicing. In this scenario the slicing argument of the second mapper is relative to the output feature space of the first mapper. >>> fs1 = StaticFeatureSelection([0,2]) >>> fs0 += fs1 >>> fs0(ds).samples array([[1, 3]]) """ def __init__(self, filler=0, **kwargs): """ Parameters ---------- filler : optional Value to fill empty entries upon reverse operation """ # init slicearg with None SliceMapper.__init__(self, None, **kwargs) self._dshape = None self._oshape = None self.filler = filler def __repr__(self, prefixes=[]): return super(FeatureSelection, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['filler'], default=0)) def _forward_data(self, data): """Map data from the original dataspace into featurespace. Parameters ---------- data : array-like Either one-dimensional sample or two-dimensional samples matrix. """ mdata = data[:, self._slicearg] # store the output shape if not set yet if self._oshape is None: self._oshape = mdata.shape[1:] return mdata def _forward_dataset(self, dataset): # XXX this should probably not affect the source dataset, but right now # init_origid is not flexible enough if not self.get_space() is None: # TODO need to do a copy first!!! dataset.init_origids('features', attr=self.get_space()) # invoke super class _forward_dataset, this calls, _forward_dataset # and this calles _forward_data in this class mds = super(FeatureSelection, self)._forward_dataset(dataset) # attribute collection needs to have a new length check mds.fa.set_length_check(mds.nfeatures) # now slice all feature attributes for k in mds.fa: mds.fa[k] = self.forward1(mds.fa[k].value) return mds def reverse1(self, data): # we need to reject inappropriate "single" samples to allow # chainmapper to properly switch to reverse() for multiple samples # use the fact that a single sample needs to conform to the known # data shape -- but may have additional appended dimensions if not data.shape[:len(self._oshape)] == self._oshape: raise ValueError("Data shape does not match training " "(trained: %s; got: %s)" % (self._dshape, data.shape)) return super(FeatureSelection, self).reverse1(data) def _reverse_data(self, data): """Reverse map data from featurespace into the original dataspace. Parameters ---------- data : array-like Either one-dimensional sample or two-dimensional samples matrix. """ if self._dshape is None: raise RuntimeError( "Cannot reverse-map data since the original data shape is " "unknown. Either set `dshape` in the constructor, or call " "train().") # this wouldn't preserve ndarray subclasses #mapped = np.zeros(data.shape[:1] + self._dshape, # dtype=data.dtype) # let's do it a little awkward but pass subclasses through # suggestions for improvements welcome mapped = data.copy() # make sure we own the array data # "guess" the shape of the final array, the following only supports # changes in the second axis -- the feature axis # this madness is necessary to support mapping of multi-dimensional # features mapped.resize(data.shape[:1] + self._dshape + data.shape[2:], refcheck=False) mapped.fill(self.filler) mapped[:, self._slicearg] = data return mapped def _reverse_dataset(self, dataset): # invoke super class _reverse_dataset, this calls, _reverse_dataset # and this calles _reverse_data in this class mds = super(FeatureSelection, self)._reverse_dataset(dataset) # attribute collection needs to have a new length check mds.fa.set_length_check(mds.nfeatures) # now reverse all feature attributes for k in mds.fa: mds.fa[k] = self.reverse1(mds.fa[k].value) return mds @accepts_dataset_as_samples def _train(self, data): if self._dshape is None: # XXX what about arrays of generic objects??? # MH: in this case the shape will be (), which is just # fine since feature slicing is meaningless without features # the only thing we can do is kill the whole samples matrix self._dshape = data.shape[1:] # we also need to know what the output shape looks like # otherwise we cannot reliably say what is appropriate input # for reverse*() self._oshape = data[:, self._slicearg].shape[1:] def _untrain(self): if __debug__: debug("FS_", "Untraining FS: %s" % self) self._dshape = None self._oshape = None super(SliceMapper, self)._untrain() class StaticFeatureSelection(FeatureSelection): """Feature selection by static slicing argument. """ def __init__(self, slicearg, dshape=None, oshape=None, **kwargs): """ Parameters ---------- slicearg : int, list(int), array(int), array(bool) Any slicing argument that is compatible with numpy arrays. Depending on the argument the mapper will perform basic slicing or advanced indexing (with all consequences on speed and memory consumption). dshape : tuple Preseed the mappers input data shape (single sample shape). oshape: tuple Preseed the mappers output data shape (single sample shape). """ FeatureSelection.__init__(self, **kwargs) # store it here, might be modified later self._dshape = self.__orig_dshape = dshape self._oshape = self.__orig_oshape = oshape # we also want to store the original slicearg to be able to reset to it # during training. Derived classes will override this default # implementation of _train() self.__orig_slicearg = slicearg self._safe_assign_slicearg(slicearg) def __repr__(self, prefixes=[]): return super(FeatureSelection, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['dshape', 'oshape'])) @accepts_dataset_as_samples def _train(self, ds): # first thing is to reset the slicearg to the original value passed to # the constructor self._safe_assign_slicearg(self.__orig_slicearg) # not resetting {d,o}shape here as they will be handled upstream # and perform base training super(StaticFeatureSelection, self)._train(ds) def _untrain(self): # make trained again immediately self._safe_assign_slicearg(self.__orig_slicearg) self._dshape = self.__orig_dshape self._oshape = self.__orig_oshape super(FeatureSelection, self)._untrain() dshape = property(fget=lambda self: self.__orig_dshape) oshape = property(fget=lambda self: self.__orig_oshape) class SensitivityBasedFeatureSelection(FeatureSelection): """Feature elimination. A `FeaturewiseMeasure` is used to compute sensitivity maps given a certain dataset. These sensitivity maps are in turn used to discard unimportant features. """ sensitivity = ConditionalAttribute(enabled=False) def __init__(self, sensitivity_analyzer, feature_selector=FractionTailSelector(0.05), train_analyzer=True, **kwargs ): """Initialize feature selection Parameters ---------- sensitivity_analyzer : FeaturewiseMeasure sensitivity analyzer to come up with sensitivity feature_selector : Functor Given a sensitivity map it has to return the ids of those features that should be kept. train_analyzer : bool Flag whether to train the sensitivity analyzer on the input dataset during train(). If False, the employed sensitivity measure has to be already trained before. """ # base init first FeatureSelection.__init__(self, **kwargs) self.__sensitivity_analyzer = sensitivity_analyzer """Sensitivity analyzer to use once""" self.__feature_selector = feature_selector """Functor which takes care about removing some features.""" self.__train_analyzer = train_analyzer def _train(self, dataset): """Select the most important features Parameters ---------- dataset : Dataset used to compute sensitivity maps """ # optionally train the analyzer first if self.__train_analyzer: self.__sensitivity_analyzer.train(dataset) sensitivity = self.__sensitivity_analyzer(dataset) """Compute the sensitivity map.""" self.ca.sensitivity = sensitivity # Select features to preserve selected_ids = self.__feature_selector(sensitivity) if __debug__: debug("FS_", "Sensitivity: %s Selected ids: %s" % (sensitivity, selected_ids)) # XXX not sure if it really has to be sorted selected_ids.sort() # announce desired features to the underlying slice mapper self._safe_assign_slicearg(selected_ids) # and perform its own training super(SensitivityBasedFeatureSelection, self)._train(dataset) def _untrain(self): if __debug__: debug("FS_", "Untraining sensitivity-based FS: %s" % self) self.__sensitivity_analyzer.untrain() # ask base class to do its untrain super(SensitivityBasedFeatureSelection, self)._untrain() # make it accessible from outside sensitivity_analyzer = property(fget=lambda self:self.__sensitivity_analyzer, doc="Measure which was used to do selection") class IterativeFeatureSelection(FeatureSelection): """ """ errors = ConditionalAttribute( doc="History of errors") nfeatures = ConditionalAttribute( doc="History of # of features left") def __init__(self, fmeasure, pmeasure, splitter, fselector, stopping_criterion=NBackHistoryStopCrit(BestDetector()), bestdetector=BestDetector(), train_pmeasure=True, # XXX should we may be guard splitter so we do not end up # with inappropriate one for the use, i.e. which # generates more than 2 splits # guard_splitter=True, **kwargs ): """ Parameters ---------- fmeasure : Measure Computed for each candidate feature selection. The measure has to compute a scalar value. pmeasure : Measure Compute against a test dataset for each incremental feature set. splitter: Splitter This splitter instance has to generate at least one dataset split when called with the input dataset that is used to compute the per-feature criterion for feature selection. bestdetector : Functor Given a list of error values it has to return a boolean that signals whether the latest error value is the total minimum. stopping_criterion : Functor Given a list of error values it has to return whether the criterion is fulfilled. fselector : Functor train_clf : bool Flag whether the classifier in `transfer_error` should be trained before computing the error. In general this is required, but if the `sensitivity_analyzer` and `transfer_error` share and make use of the same classifier it can be switched off to save CPU cycles. Default `None` checks if sensitivity_analyzer is based on a classifier and doesn't train if so. """ # bases init first FeatureSelection.__init__(self, **kwargs) self._fmeasure = fmeasure self._pmeasure = pmeasure self._splitter = splitter self._fselector = fselector self._stopping_criterion = stopping_criterion self._bestdetector = bestdetector self._train_pmeasure = train_pmeasure def _untrain(self): if __debug__: debug("FS_", "Untraining Iterative FS: %s" % self) self._fmeasure.untrain() self._pmeasure.untrain() # ask base class to do its untrain super(IterativeFeatureSelection, self)._untrain() def _evaluate_pmeasure(self, train, test): # local binding pmeasure = self._pmeasure # might safe some cycles to prevent training the measure, but only # the user can know whether this is sensible or possible if self._train_pmeasure: pmeasure.train(train) # actually run the performance measure to estimate "quality" of # selection return pmeasure(test) def _get_traintest_ds(self, ds): # activate the dataset splitter dsgen = self._splitter.generate(ds) # and derived the dataset part that is used for computing the selection # criterion trainds = dsgen.next() testds = dsgen.next() return trainds, testds # access properties fmeasure = property(fget=lambda self: self._fmeasure) pmeasure = property(fget=lambda self: self._pmeasure) splitter = property(fget=lambda self: self._splitter) fselector = property(fget=lambda self: self._fselector) stopping_criterion = property(fget=lambda self: self._stopping_criterion) bestdetector = property(fget=lambda self: self._bestdetector) train_pmeasure = property(fget=lambda self: self._train_pmeasure) class CombinedFeatureSelection(FeatureSelection): """Meta feature selection utilizing several embedded selection methods. During training each embedded feature selection method is computed individually. Afterwards all feature sets are combined by either taking the union or intersection of all sets. """ def __init__(self, selectors, method, **kwargs): """ Parameters ---------- selectors : list FeatureSelection instances to run. Order is not important. method : {'union', 'intersection'} which method to be used to combine the feature selection set of all computed methods. """ # by default -- auto_train kwargs['auto_train'] = kwargs.get('auto_train', True) FeatureSelection.__init__(self, **kwargs) self.__selectors = selectors self.__method = method def _untrain(self): if __debug__: debug("FS_", "Untraining combined FS: %s" % self) for fs in self.__selectors: fs.untrain() # ask base class to do its untrain super(CombinedFeatureSelection, self)._untrain() def _train(self, ds): # local binding method = self.__method # two major modes if method == 'union': # slice mask default: take none mask = np.zeros(ds.shape[1], dtype=np.bool) # method: OR cfunc = np.logical_or elif method == 'intersection': # slice mask default: take all mask = np.ones(ds.shape[1], dtype=np.bool) # method: AND cfunc = np.logical_and else: raise ValueError("Unknown combining method '%s'" % method) for fs in self.__selectors: # first: train all embedded selections fs.train(ds) # now get boolean mask of selections fsmask = np.zeros(mask.shape, dtype=np.bool) # use slicearg to select features fsmask[fs._slicearg] = True # merge with current global mask mask = cfunc(mask, fsmask) # turn the derived boolean mask into a slice if possible slicearg = mask2slice(mask) # and assign to baseclass, done self._safe_assign_slicearg(slicearg) method = property(fget=lambda self: self.__method) selectors = property(fget=lambda self: self.__selectors) pymvpa2-2.2.0/mvpa2/featsel/helpers.py000066400000000000000000000403041202542755000176000ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """""" __docformat__ = 'restructuredtext' from math import floor import numpy as np from mvpa2.base.dataset import AttrDataset from mvpa2.base.state import ClassWithCollections, ConditionalAttribute if __debug__: from mvpa2.base import debug # # Functors to be used for FeatureSelection # class BestDetector(object): """Determine whether the last value in a sequence is the best one given some criterion. """ def __init__(self, func=min, lastminimum=False): """Initialize with number of steps Parameters ---------- fun : functor Functor to select the best results. Defaults to min lastminimum : bool Toggle whether the latest or the earliest minimum is used as optimal value to determine the stopping criterion. """ self.__func = func self.__lastminimum = lastminimum self.__bestindex = None """Stores the index of the last detected best value.""" def __call__(self, errors): """Returns True if the last value in `errors` is the best or False otherwise. """ isbest = False # just to prevent ValueError if len(errors)==0: return isbest minerror = self.__func(errors) if self.__lastminimum: # make sure it is an array errors = np.array(errors) # to find out the location of the minimum but starting from the # end! minindex = np.array((errors == minerror).nonzero()).max() else: minindex = errors.index(minerror) self.__bestindex = minindex # if minimal is the last one reported -- it is the best if minindex == len(errors)-1: isbest = True return isbest bestindex = property(fget=lambda self:self.__bestindex) class StoppingCriterion(object): """Base class for all functors to decide when to stop RFE (or may be general optimization... so it probably will be moved out into some other module """ def __call__(self, errors): """Instruct when to stop. Every implementation should return `False` when an empty list is passed as argument. Returns tuple `stop`. """ raise NotImplementedError class MultiStopCrit(StoppingCriterion): """Stop computation if the latest error drops below a certain threshold. """ def __init__(self, crits, mode='or'): """ Parameters ---------- crits : list of StoppingCriterion instances For each call to MultiStopCrit all of these criterions will be evaluated. mode : {'and', 'or'} Logical function to determine the multi criterion from the set of base criteria. """ if not mode in ('and', 'or'): raise ValueError, \ "A mode %r is not supported." % (mode, ) self.__mode = mode self.__crits = crits def __call__(self, errors): """Evaluate all criteria to determine the value of the multi criterion. """ # evaluate all crits crits = [ c(errors) for c in self.__crits ] if self.__mode == 'and': return np.all(crits) else: return np.any(crits) class FixedErrorThresholdStopCrit(StoppingCriterion): """Stop computation if the latest error drops below a certain threshold. """ def __init__(self, threshold): """Initialize with threshold. Parameters ---------- threshold : float [0,1] Error threshold. """ StoppingCriterion.__init__(self) if threshold > 1.0 or threshold < 0.0: raise ValueError, \ "Threshold %f is out of a reasonable range [0,1]." \ % threshold self.__threshold = threshold def __call__(self, errors): """Nothing special.""" if len(errors)==0: return False if errors[-1] < self.__threshold: return True else: return False threshold = property(fget=lambda x:x.__threshold) class NStepsStopCrit(StoppingCriterion): """Stop computation after a certain number of steps. """ def __init__(self, steps): """Initialize with number of steps. Parameters ---------- steps : int Number of steps after which to stop. """ StoppingCriterion.__init__(self) if steps < 0: raise ValueError, \ "Number of steps %i is out of a reasonable range." \ % steps self.__steps = steps def __call__(self, errors): """Nothing special.""" if len(errors) >= self.__steps: return True else: return False steps = property(fget=lambda x:x.__steps) class NBackHistoryStopCrit(StoppingCriterion): """Stop computation if for a number of steps error was increasing """ def __init__(self, bestdetector=BestDetector(), steps=10): """Initialize with number of steps Parameters ---------- bestdetector : BestDetector used to determine where the best error is located. steps : int How many steps to check after optimal value. """ StoppingCriterion.__init__(self) if steps < 0: raise ValueError, \ "Number of steps (got %d) should be non-negative" % steps self.__bestdetector = bestdetector self.__steps = steps def __call__(self, errors): stop = False # just to prevent ValueError if len(errors)==0: return stop # charge best detector self.__bestdetector(errors) # if number of elements after the min >= len -- stop if len(errors) - self.__bestdetector.bestindex > self.__steps: stop = True return stop steps = property(fget=lambda x:x.__steps) class ElementSelector(ClassWithCollections): """Base class to implement functors to select some elements based on a sequence of values. """ ndiscarded = ConditionalAttribute(enabled=True, doc="Store number of discarded elements.") def __init__(self, mode='discard', **kwargs): """ Parameters ---------- mode : {'discard', 'select'} Decides whether to `select` or to `discard` features. """ ClassWithCollections.__init__(self, **kwargs) self._set_mode(mode) """Flag whether to select or to discard elements.""" ##REF: Name was automagically refactored def _set_mode(self, mode): """Choose `select` or `discard` mode.""" if not mode in ['discard', 'select']: raise ValueError, "Unkown selection mode [%s]. Can only be one " \ "of 'select' or 'discard'." % mode self.__mode = mode def __call__(self, seq): """ Parameters ---------- seq Sequence based on values of which to perform the selection. If `Dataset`, then only 1st sample is taken. """ if isinstance(seq, AttrDataset): if len(seq)>1: raise ValueError( "Feature selectors cannot handle multiple " "sequences in a Dataset at once. We got dataset %s " "as input." % (seq,)) seq = seq.samples[0] elif hasattr(seq, 'shape'): shape = seq.shape if len(shape) > 1: raise ValueError( "Feature selectors cannot handle multidimensional " "inputs (such as ndarrays with more than a single " "dimension. We got %s with shape %s " "as input." % (seq.__class__, shape)) return self._call(seq) def _call(self, seq): """Implementations in derived classed have to return a list of selected element IDs based on the given sequence. """ raise NotImplementedError mode = property(fget=lambda self:self.__mode, fset=_set_mode) class RangeElementSelector(ElementSelector): """Select elements based on specified range of values""" def __init__(self, lower=None, upper=None, inclusive=False, mode='select', **kwargs): """Initialization `RangeElementSelector` Parameters ---------- lower If not None -- select elements which are above of specified value upper If not None -- select elements which are lower of specified value inclusive Either to include end points mode overrides parent's default to be 'select' since it is more native for RangeElementSelector XXX TODO -- unify?? `upper` could be lower than `lower` -- then selection is done on values <= lower or >=upper (ie tails). This would produce the same result if called with flipped values for mode and inclusive. If no upper no lower is set, assuming upper,lower=0, thus outputing non-0 elements """ if lower is None and upper is None: lower, upper = 0, 0 """Lets better return non-0 values if none of bounds is set""" # init State before registering anything ElementSelector.__init__(self, mode=mode, **kwargs) self.__range = (lower, upper) """Values on which to base selection""" self.__inclusive = inclusive def _call(self, seq): """Returns selected IDs. """ lower, upper = self.__range len_seq = len(seq) if not lower is None: if self.__inclusive: selected = seq >= lower else: selected = seq > lower else: selected = np.ones( (len_seq), dtype=np.bool ) if not upper is None: if self.__inclusive: selected_upper = seq <= upper else: selected_upper = seq < upper if not lower is None: if lower < upper: # regular range selected = np.logical_and(selected, selected_upper) else: # outside, though that would be similar to exclude selected = np.logical_or(selected, selected_upper) else: selected = selected_upper if self.mode == 'discard': selected = np.logical_not(selected) result = np.where(selected)[0] if __debug__: debug("ES", "Selected %d out of %d elements" % (len(result), len_seq)) return result class TailSelector(ElementSelector): """Select elements from a tail of a distribution. The default behaviour is to discard the lower tail of a given distribution. """ # TODO: 'both' to select from both tails def __init__(self, tail='lower', sort=True, **kwargs): """Initialize TailSelector Parameters ---------- tail : ['lower', 'upper'] Choose the tail to be processed. sort : bool Flag whether selected IDs will be sorted. Disable if not necessary to save some CPU cycles. """ # init State before registering anything ElementSelector.__init__(self, **kwargs) self._set_tail(tail) """Know which tail to select.""" self.__sort = sort ##REF: Name was automagically refactored def _set_tail(self, tail): """Set the tail to be processed.""" if not tail in ['lower', 'upper']: raise ValueError, "Unkown tail argument [%s]. Can only be one " \ "of 'lower' or 'upper'." % tail self.__tail = tail ##REF: Name was automagically refactored def _get_n_elements(self, seq): """In derived classes has to return the number of elements to be processed given a sequence values forming the distribution. """ raise NotImplementedError def _call(self, seq): """Returns selected IDs. """ # TODO: Think about selecting features which have equal values but # some are selected and some are not len_seq = len(seq) # how many to select (cannot select more than available) nelements = min(self._get_n_elements(seq), len_seq) # make sure that data is ndarray and compute a sequence rank matrix # lowest value is first seqrank = np.array(seq).argsort() if self.mode == 'discard' and self.__tail == 'upper': good_ids = seqrank[:-1*nelements] self.ca.ndiscarded = nelements elif self.mode == 'discard' and self.__tail == 'lower': good_ids = seqrank[nelements:] self.ca.ndiscarded = nelements elif self.mode == 'select' and self.__tail == 'upper': good_ids = seqrank[-1*nelements:] self.ca.ndiscarded = len_seq - nelements else: # select lower tail good_ids = seqrank[:nelements] self.ca.ndiscarded = len_seq - nelements # sort ids to keep order # XXX should we do here are leave to other place if self.__sort: good_ids.sort() # only return proper slice args: this is a list of int ids, hence return # a list not an array return list(good_ids) class FixedNElementTailSelector(TailSelector): """Given a sequence, provide set of IDs for a fixed number of to be selected elements. """ def __init__(self, nelements, **kwargs): """ Parameters ---------- nelements : int Number of elements to select/discard. """ TailSelector.__init__(self, **kwargs) self.__nelements = None self._set_n_elements(nelements) def __repr__(self): return "%s number=%f" % ( TailSelector.__repr__(self), self.nelements) ##REF: Name was automagically refactored def _get_n_elements(self, seq): return self.__nelements ##REF: Name was automagically refactored def _set_n_elements(self, nelements): if __debug__: if nelements <= 0: raise ValueError, "Number of elements less or equal to zero " \ "does not make sense." self.__nelements = nelements nelements = property(fget=lambda x:x.__nelements, fset=_set_n_elements) class FractionTailSelector(TailSelector): """Given a sequence, provide Ids for a fraction of elements """ def __init__(self, felements, **kwargs): """ Parameters ---------- felements : float (0,1.0] Fraction of elements to select/discard. Note: Even when 0.0 is specified at least one element will be selected. """ TailSelector.__init__(self, **kwargs) self._set_f_elements(felements) def __repr__(self): return "%s fraction=%f" % ( TailSelector.__repr__(self), self.__felements) ##REF: Name was automagically refactored def _get_n_elements(self, seq): num = int(floor(self.__felements * len(seq))) num = max(1, num) # remove at least 1 # no need for checks as base class will do anyway #return min(num, nselect) return num ##REF: Name was automagically refactored def _set_f_elements(self, felements): """What fraction to discard""" if felements > 1.0 or felements < 0.0: raise ValueError, \ "Fraction (%f) cannot be outside of [0.0,1.0]" \ % felements self.__felements = felements felements = property(fget=lambda x:x.__felements, fset=_set_f_elements) pymvpa2-2.2.0/mvpa2/featsel/ifs.py000066400000000000000000000152721202542755000167250ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Incremental feature search (IFS). Very similar to Recursive feature elimination (RFE), but instead of begining with all features and stripping some sequentially, start with an empty feature set and include important features successively. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.support.copy import copy from mvpa2.featsel.base import StaticFeatureSelection, IterativeFeatureSelection from mvpa2.featsel.helpers import NBackHistoryStopCrit, \ FixedNElementTailSelector, \ BestDetector from mvpa2.base.state import ConditionalAttribute if __debug__: from mvpa2.base import debug class IFS(IterativeFeatureSelection): """Incremental feature search. A scalar `Measure` is computed multiple times on variations of a certain dataset. These measures are in turn used to incrementally select important features. Starting with an empty feature set the dataset measure is first computed for each single feature. A number of features is selected based on the resulting data measure map (using an `ElementSelector`). Next the dataset measure is computed again using each feature in addition to the already selected feature set. Again the `ElementSelector` is used to select more features. For each feature selection the transfer error on some testdatset is computed. This procedure is repeated until a given `StoppingCriterion` is reached. """ def __init__(self, fmeasure, pmeasure, splitter, fselector=FixedNElementTailSelector(1, tail='upper', mode='select'), **kwargs): """Initialize incremental feature search Parameters ---------- feature_measure : Measure Computed for each candidate feature selection. The measure has to compute a scalar value. performance_measure : Measure Compute against a test dataset for each incremental feature set. splitter: Splitter This splitter instance has to generate at least two dataset splits when called with the input dataset. The first split serves as the training dataset and the second as the evaluation dataset. """ # bases init first IterativeFeatureSelection.__init__(self, fmeasure, pmeasure, splitter, fselector, **kwargs) def _train(self, ds): # local binding fmeasure = self._fmeasure fselector = self._fselector scriterion = self._stopping_criterion bestdetector = self._bestdetector # init # Computed error for each tested features set. errors = [] # feature candidate are all features in the pattern object candidates = range(ds.nfeatures) # initially empty list of selected features selected = [] # results in here please results = None # as long as there are candidates left # the loop will most likely get broken earlier if the stopping # criterion is reached while len(candidates): # measures for all candidates measures = [] # for all possible candidates for i, candidate in enumerate(candidates): if __debug__: debug('IFSC', "Tested %i" % i, cr=True) # take the new candidate and all already selected features # select a new temporay feature subset from the dataset # slice the full dataset, because for the initial iteration # steps this will be much mure effecient than splitting the # full ds into train and test at first fslm = StaticFeatureSelection(selected + [candidate]) fslm.train(ds) candidate_ds = fslm(ds) # activate the dataset splitter dsgen = self._splitter.generate(candidate_ds) # and derived the dataset part that is used for computing the selection # criterion trainds = dsgen.next() # compute data measure on the training part of this feature set measures.append(fmeasure(trainds)) # relies on ds.item() to work properly measures = [np.asscalar(m) for m in measures] # Select promissing feature candidates (staging) # IDs are only applicable to the current set of feature candidates tmp_staging_ids = fselector(measures) # translate into real candidate ids staging_ids = [candidates[i] for i in tmp_staging_ids] # mark them as selected and remove from candidates selected += staging_ids for i in staging_ids: candidates.remove(i) # actually run the performance measure to estimate "quality" of # selection fslm = StaticFeatureSelection(selected) fslm.train(ds) selectedds = fslm(ds) # split into train and test part trainds, testds = self._get_traintest_ds(selectedds) # evaluate and store error = self._evaluate_pmeasure(trainds, testds) errors.append(np.asscalar(error)) # intermediate cleanup, so the datasets do not hand around while # the next candidate evaluation is computed del trainds del testds # Check if it is time to stop and if we got # the best result stop = scriterion(errors) isthebest = bestdetector(errors) if __debug__: debug('IFSC', "nselected %i; error: %.4f " \ "best/stop=%d/%d\n" \ % (len(selected), errors[-1], isthebest, stop), cr=True, lf=True) if isthebest: # announce desired features to the underlying slice mapper # do copy to survive later selections self._safe_assign_slicearg(copy(selected)) # leave the loop when the criterion is reached if stop: break # charge state self.ca.errors = errors pymvpa2-2.2.0/mvpa2/featsel/rfe.py000066400000000000000000000303741202542755000167200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Recursive feature elimination.""" __docformat__ = 'restructuredtext' from mvpa2.support.copy import copy from mvpa2.clfs.transerror import ClassifierError from mvpa2.measures.base import Sensitivity from mvpa2.featsel.base import IterativeFeatureSelection from mvpa2.featsel.helpers import BestDetector, \ NBackHistoryStopCrit, \ FractionTailSelector import numpy as np from mvpa2.base.state import ConditionalAttribute if __debug__: from mvpa2.base import debug # TODO: Abs value of sensitivity should be able to rule RFE # Often it is what abs value of the sensitivity is what matters. # So we should either provide a simple decorator around arbitrary # FeatureSelector to convert sensitivities to abs values before calling # actual selector, or a decorator around SensitivityEstimators class RFE(IterativeFeatureSelection): """Recursive feature elimination. A `FeaturewiseMeasure` is used to compute sensitivity maps given a certain dataset. These sensitivity maps are in turn used to discard unimportant features. For each feature selection the transfer error on some testdatset is computed. This procedure is repeated until a given `StoppingCriterion` is reached. References ---------- Such strategy after Guyon, I., Weston, J., Barnhill, S., & Vapnik, V. (2002). Gene selection for cancer classification using support vector machines. Mach. Learn., 46(1-3), 389--422. was applied to SVM-based analysis of fMRI data in Hanson, S. J. & Halchenko, Y. O. (2008). Brain reading using full brain support vector machines for object recognition: there is no "face identification area". Neural Computation, 20, 486--503. Examples -------- There are multiple possible ways to design an RFE. Here is one example which would rely on a SplitClassifier to extract sensitivities and provide estimate of performance (error) >>> # Lazy import >>> from mvpa2.suite import * >>> rfesvm_split = SplitClassifier(LinearCSVMC(), OddEvenPartitioner()) >>> # design an RFE feature selection to be used with a classifier >>> rfe = RFE(rfesvm_split.get_sensitivity_analyzer( ... # take sensitivities per each split, L2 norm, mean, abs them ... postproc=ChainMapper([ FxMapper('features', l2_normed), ... FxMapper('samples', np.mean), ... FxMapper('samples', np.abs)])), ... # use the error stored in the confusion matrix of split classifier ... ConfusionBasedError(rfesvm_split, confusion_state='stats'), ... # we just extract error from confusion, so need to split dataset ... Repeater(2), ... # select 50% of the best on each step ... fselector=FractionTailSelector( ... 0.50, ... mode='select', tail='upper'), ... # and stop whenever error didn't improve for up to 10 steps ... stopping_criterion=NBackHistoryStopCrit(BestDetector(), 10), ... # we just extract it from existing confusion ... train_pmeasure=False, ... # but we do want to update sensitivities on each step ... update_sensitivity=True) >>> clf = FeatureSelectionClassifier( ... LinearCSVMC(), ... # on features selected via RFE ... rfe, ... # custom description ... descr='LinSVM+RFE(splits_avg)' ) """ history = ConditionalAttribute( doc="Last step # when each feature was still present") sensitivities = ConditionalAttribute(enabled=False, doc="History of sensitivities (might consume too much memory") def __init__(self, fmeasure, pmeasure, splitter, fselector=FractionTailSelector(0.05), update_sensitivity=True, **kwargs): # XXX Allow for multiple stopping criterions, e.g. error not decreasing # anymore OR number of features less than threshold """Initialize recursive feature elimination Parameters ---------- fmeasure : FeaturewiseMeasure pmeasure : Measure used to compute the transfer error of a classifier based on a certain feature set on the test dataset. NOTE: If sensitivity analyzer is based on the same classifier as transfer_error is using, make sure you initialize transfer_error with train=False, otherwise it would train classifier twice without any necessity. splitter: Splitter This splitter instance has to generate at least two dataset splits when called with the input dataset. The first split serves as the training dataset and the second as the evaluation dataset. fselector : Functor Given a sensitivity map it has to return the ids of those features that should be kept. update_sensitivity : bool If False the sensitivity map is only computed once and reused for each iteration. Otherwise the senstitivities are recomputed at each selection step. """ # bases init first IterativeFeatureSelection.__init__(self, fmeasure, pmeasure, splitter, fselector, **kwargs) self.__update_sensitivity = update_sensitivity """Flag whether sensitivity map is recomputed for each step.""" def _train(self, ds): """Proceed and select the features recursively eliminating less important ones. Parameters ---------- dataset : Dataset used to compute sensitivity maps and train a classifier to determine the transfer error testdataset : Dataset used to test the trained classifer to determine the transfer error Returns a tuple of two new datasets with the feature subset of `dataset` that had the lowest transfer error of all tested sets until the stopping criterion was reached. The first dataset is the feature subset of the training data and the second the selection of the test dataset. """ # get the initial split into train and test dataset, testdataset = self._get_traintest_ds(ds) if __debug__: debug('RFEC', "Initiating RFE with training on %s and testing using %s", (dataset, testdataset)) errors = [] """Computed error for each tested features set.""" ca = self.ca ca.nfeatures = [] """Number of features at each step. Since it is not used by the algorithm it is stored directly in the conditional attribute""" ca.history = np.arange(dataset.nfeatures) """Store the last step # when the feature was still present """ ca.sensitivities = [] stop = False """Flag when RFE should be stopped.""" results = None """Will hold the best feature set ever.""" wdataset = dataset """Operate on working dataset initially identical.""" wtestdataset = testdataset """Same feature selection has to be performs on test dataset as well. This will hold the current testdataset.""" step = 0 """Counter how many selection step where done.""" orig_feature_ids = np.arange(dataset.nfeatures) """List of feature Ids as per original dataset remaining at any given step""" sensitivity = None """Contains the latest sensitivity map.""" result_selected_ids = orig_feature_ids """Resultant ids of selected features. Since the best is not necessarily is the last - we better keep this one around. By default -- all features are there""" selected_ids = result_selected_ids while wdataset.nfeatures > 0: if __debug__: debug('RFEC', "Step %d: nfeatures=%d" % (step, wdataset.nfeatures)) # mark the features which are present at this step # if it brings anyb mentionable computational burden in the future, # only mark on removed features at each step ca.history[orig_feature_ids] = step # Compute sensitivity map if self.__update_sensitivity or sensitivity == None: sensitivity = self._fmeasure(wdataset) if len(sensitivity) > 1: raise ValueError( "RFE cannot handle multiple sensitivities at once. " "'%s' returned %i sensitivities." % (self._fmeasure.__class__.__name__, len(sensitivity))) if ca.is_enabled("sensitivities"): ca.sensitivities.append(sensitivity) # get error for current feature set (handles optional retraining) error = self._evaluate_pmeasure(wdataset, wtestdataset) # Record the error errors.append(np.asscalar(error)) # Check if it is time to stop and if we got # the best result stop = self._stopping_criterion(errors) isthebest = self._bestdetector(errors) nfeatures = wdataset.nfeatures if ca.is_enabled("nfeatures"): ca.nfeatures.append(wdataset.nfeatures) # store result if isthebest: result_selected_ids = orig_feature_ids if __debug__: debug('RFEC', "Step %d: nfeatures=%d error=%.4f best/stop=%d/%d " % (step, nfeatures, np.asscalar(error), isthebest, stop)) # stop if it is time to finish if nfeatures == 1 or stop: break # Select features to preserve selected_ids = self._fselector(sensitivity) if __debug__: debug('RFEC_', "Sensitivity: %s, nfeatures_selected=%d, selected_ids: %s" % (sensitivity, len(selected_ids), selected_ids)) # Create a dataset only with selected features wdataset = wdataset[:, selected_ids] # select corresponding sensitivity values if they are not # recomputed if not self.__update_sensitivity: sensitivity = sensitivity[selected_ids] # need to update the test dataset as well # XXX why should it ever become None? # yoh: because we can have __transfer_error computed # using wdataset. See xia-generalization estimate # in lightsvm. Or for god's sake leave-one-out # on a wdataset # TODO: document these cases in this class if not testdataset is None: wtestdataset = wtestdataset[:, selected_ids] step += 1 # WARNING: THIS MUST BE THE LAST THING TO DO ON selected_ids selected_ids.sort() if self.ca.is_enabled("history") \ or self.ca.is_enabled('selected_ids'): orig_feature_ids = orig_feature_ids[selected_ids] # we already have the initial sensitivities, so even for a shared # classifier we can cleanup here self._pmeasure.untrain() # charge conditional attributes self.ca.errors = errors self.ca.selected_ids = result_selected_ids if __debug__: debug('RFEC', "Selected %d features: %s", (len(result_selected_ids), result_selected_ids)) # announce desired features to the underlying slice mapper # do copy to survive later selections self._safe_assign_slicearg(copy(result_selected_ids)) pymvpa2-2.2.0/mvpa2/generators/000077500000000000000000000000001202542755000163115ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/generators/__init__.py000066400000000000000000000011351202542755000204220ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Nodes that generate multiple datasets. """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.generators') if __debug__: debug('INIT', 'mvpa2.generators end') pymvpa2-2.2.0/mvpa2/generators/base.py000066400000000000000000000210251202542755000175750ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generators for dataset resampling.""" __docformat__ = 'restructuredtext' import random import numpy as np from mvpa2.base.node import Node from mvpa2.base.collections import \ SampleAttributesCollection, FeatureAttributesCollection from mvpa2.base.dochelpers import _str, _repr if __debug__: from mvpa2.base import debug class Repeater(Node): """Node that yields the same dataset for a certain number of repetitions. Each yielded dataset has a dataset attribute that identifies the iteration (see the ``space`` setting). """ def __init__(self, count, space='repetitons', **kwargs): """ Parameters ---------- count : int Positive integer that set the numbed of repetitions. space : str The name of the dataset attribute that will hold the actual repetiton in the yielded datasets. """ Node.__init__(self, space=space, **kwargs) self.count = count def generate(self, ds): """Generate the desired number of repetitions.""" space = self.get_space() for i in xrange(self.count): out = ds.copy(deep=False) out.a[space] = i yield out def __str__(self): return _str(self, str(self.count)) class Sifter(Node): """Exclude (do not generate) provided dataset on the values of the attributes. Example ------- Typical usecase: it is necessary to generate all possible combinations of two chunks while being interested only in the combinations where both targets are present. >>> from mvpa2.datasets import Dataset >>> from mvpa2.generators.partition import NFoldPartitioner >>> from mvpa2.base.node import ChainNode >>> ds = Dataset(samples=np.arange(8).reshape((4,2)), ... sa={'chunks': [ 0 , 1 , 2 , 3 ], ... 'targets': ['c', 'c', 'p', 'p']}) Plain 'NFoldPartitioner(cvtype=2)' would provide also partitions with only two 'c's or 'p's present, which we do not want to include in our cross-validation since it would break balancing between training and testing sets. >>> par = ChainNode([NFoldPartitioner(cvtype=2, attr='chunks'), ... Sifter([('partitions', 2), ... ('targets', ['c', 'p'])]) ... ], space='partitions') We have to provide appropriate 'space' parameter for the 'ChainNode' so possible future splitting using 'TransferMeasure' could operate along that attribute. Here we just matched default space of NFoldPartitioner -- 'partitions'. >>> print par -> Additionally, e.g. for cases with cvtype > 2, if balancing is needed to be guaranteed (and other generated partitions discarded), specification could carry a dict with 'uvalues' and 'balanced' keys, e.g.: >>> par = ChainNode([NFoldPartitioner(cvtype=2, attr='chunks'), ... Sifter([('partitions', 2), ... ('targets', dict(uvalues=['c', 'p'], ... balanced=True))]) ... ], space='partitions') N.B. In this example it is equivalent to the previous definition since things are guaranteed to be balanced with cvtype=2 and 2 unique values requested. >>> for ds_ in par.generate(ds): ... testing = ds[ds_.sa.partitions == 2] ... print list(zip(testing.sa.chunks, testing.sa.targets)) [(0, 'c'), (2, 'p')] [(0, 'c'), (3, 'p')] [(1, 'c'), (2, 'p')] [(1, 'c'), (3, 'p')] """ def __init__(self, includes, *args, **kwargs): """ Parameters ---------- includes : list List of tuples rules (attribute, uvalues) where all listed 'uvalues' must be present in the dataset. Matching samples or features get selected to proceed to the next rule in the list. If at some point not all listed values of the attribute are present, dataset does not pass through the 'Sifter'. uvalues might also be a `dict`, see example above. """ Node.__init__(self, *args, **kwargs) self._includes = includes def generate(self, ds): """Validate obtained dataset and yield if matches """ # we start by considering all samples sa_mask = np.ones(ds.nsamples, dtype=bool) fa_mask = np.ones(ds.nfeatures, dtype=bool) # Check the dataset against the rules for attrname, crit in self._includes: attr, col = ds.get_attr(attrname) # figure out which mask and adjust accordingly if isinstance(col, SampleAttributesCollection): mask = sa_mask elif isinstance(col, FeatureAttributesCollection): mask = fa_mask else: raise ValueError( "%s cannot filter based on attribute %s=%s -- " "only collections from .sa or .fa are supported." % (self, attrname, attr)) uvalues_ = np.unique(attr[mask]) if not isinstance(crit, dict): # so that just a list of unique values to be present specified crit = {'uvalues': crit} # now it is specified as dictionary with more restrictions # XXX sorted/reverse here is just to guarantee that # "uvalues" goes before "balanced". If we get more # cases -- put proper order here for crit_k in sorted(crit.keys(), reverse=True): crit_v = crit[crit_k] if crit_k.lower() == 'uvalues': # Check if all of those values are present # just to assure consistency in order and type uvalues = np.unique(np.atleast_1d(crit_v)) # do matching and reset those not matching mask[np.array([not a in uvalues for a in attr.value])] = False # exit if resultant attributes do no match uvalues_selected = np.unique(attr[mask]) # use set() so we could compare results of different lengths as well # and not worry about sorting etc if not (set(uvalues_selected) == set(uvalues) and len(uvalues_selected)): if __debug__ and 'SPL' in debug.active: debug('SPL', 'Skipping dataset %s because selection using %s ' 'attribute resulted in the set of values %s while ' 'needing %s' % (ds, attrname, uvalues_selected, uvalues)) return elif crit_k.lower() == 'balanced': # guarantee that in the given category # TODO: check once again if order of evaluation of # these restrictions matters values_selected = attr[mask] counts = dict((k, 0) for k in np.unique(values_selected)) for v in values_selected: counts[v] += 1 # bool() to guarantee booleans same_counts = bool(len(np.unique(counts.values())) == 1) crit_v = bool(crit_v) if crit_v != same_counts: if __debug__ and 'SPL' in debug.active: debug('SPL', 'Skipping dataset %s because selection using %s ' 'attribute resulted same_counts=%s while balanced=%s' % (ds, attrname, same_counts, crit_v)) return else: raise ValueError("Unknown key %s in definition of %s" % (crit_k, self)) # print attrname, attr.value, uvalues, uvalues_selected, mask yield ds def __str__(self): return _str(self, ', '.join("%s=%s" % x for x in self._includes)) pymvpa2-2.2.0/mvpa2/generators/partition.py000066400000000000000000000530751202542755000207060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.dochelpers import _repr_attrs from mvpa2.support.utils import deprecated from mvpa2.base.node import Node from mvpa2.datasets.miscfx import coarsen_chunks import mvpa2.misc.support as support if __debug__: from mvpa2.base import debug class Partitioner(Node): """Generator node to partition a dataset. Partitioning is done by adding a sample attribute that assigns samples to an arbitrary number of partitions. Subclasses offer a variety of partitioning technique that are useful in e.g. cross-validation procedures. it is important to note that other than adding a new sample attribute input datasets are not modified. In particular, there is no splitting of datasets into multiple pieces. If this is desired, a Partitioner can be chained to a `Splitter` node to achieve this. """ _STRATEGIES = ('first', 'random', 'equidistant') _NPERLABEL_STR = ['equal', 'all'] def __init__(self, count=None, selection_strategy='equidistant', attr='chunks', space='partitions', **kwargs): """ Parameters ---------- count : None or int Desired number of splits to be output. It is limited by the number of splits possible for a given splitter (e.g. `OddEvenSplitter` can have only up to 2 splits). If None, all splits are output (default). selection_strategy : str If `count` is not None, possible strategies are possible: 'first': First `count` splits are chosen; 'random': Random (without replacement) `count` splits are chosen; 'equidistant': Splits which are equidistant from each other. attr : str Sample attribute used to determine splits. space : str Name of the to be created sample attribute defining the partitions. In addition, a dataset attribute named '``space``\_set' will be added to each output dataset, indicating the number of the partition set it corresponds to. """ Node.__init__(self, space=space, **kwargs) # pylint happyness block self.__attr = attr # we don't check it, thus no reason to make it private. # someone might find it useful to change post creation # TODO utilize such (or similar) policy through out the code self.count = count self._set_selection_strategy(selection_strategy) def __repr__(self, prefixes=[]): # Here we are jumping over Node's __repr__ since # it would enforce placing space return super(Node, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['count']) + _repr_attrs(self, ['selection_strategy'], default='equidistant') + _repr_attrs(self, ['attr'], default='chunks') + _repr_attrs(self, ['space'], default='partitions') ) def _set_selection_strategy(self, strategy): """Set strategy to select splits out from available """ strategy = strategy.lower() if not strategy in self._STRATEGIES: raise ValueError, "selection_strategy is not known. Known are %s" \ % str(self._STRATEGIES) self.__selection_strategy = strategy def _get_partition_specs(self, uniqueattr): """Return list with samples of 2nd dataset in a split. Each subclass has to implement this method. It gets a sequence with the unique attribute ids of a dataset and has to return a list of lists containing sample ids to split into the second dataset. """ raise NotImplementedError def generate(self, ds): # for each split cfgs = self.get_partition_specs(ds) n_cfgs = len(cfgs) for iparts, parts in enumerate(cfgs): # give attribute array defining the current partition set pattr = self.get_partitions_attr(ds, parts) # shallow copy of the dataset pds = ds.copy(deep=False) pds.sa[self.get_space()] = pattr pds.a[self.get_space() + "_set"] = iparts pds.a['lastpartitionset'] = iparts == (n_cfgs - 1) yield pds def get_partitions_attr(self, ds, specs): """Create a partition attribute array for a particular partion spec. Parameters ---------- ds : Dataset This is this source dataset. specs : sequence of sequences Contains ids of a sample attribute that shall go into each partition. Returns ------- array(ints) Each partition is represented by a unique integer value. """ # collect the sample ids for each resulting dataset filters = [] none_specs = 0 cum_filter = None splitattr_data = ds.sa[self.__attr].value # for each partition in this set for spec in specs: if spec is None: filters.append(None) none_specs += 1 else: filter_ = np.array([ i in spec \ for i in splitattr_data], dtype='bool') filters.append(filter_) if cum_filter is None: cum_filter = filter_ else: cum_filter = np.logical_and(cum_filter, filter_) # need to turn possible Nones into proper ids sequences if none_specs > 1: raise ValueError("'%s' cannot handle more than one `None` " \ "partition spec." % self.__class__.__name__) # go with ints for simplicity. By default the attr is zeros, and the # first configured partition starts with one. part_attr = np.zeros(len(ds), dtype='int') for i, filter_ in enumerate(filters): # turn the one 'all the rest' filter into a slicing arg if filter_ is None: filter_ = np.logical_not(cum_filter) # now filter is guaranteed to be a slicing argument that can be used # to assign the attribute values part_attr[filter_] = i + 1 return part_attr def get_partition_specs(self, ds): """Returns the specs for all to be generated partition sets. Returns ------- list(lists) """ # list (#splits) of lists (#partitions) cfgs = self._get_partition_specs(ds.sa[self.__attr].unique) # Select just some splits if desired count, n_cfgs = self.count, len(cfgs) # further makes sense only if count < n_cfgs, # otherwise all strategies are equivalent if count is not None and count < n_cfgs: if count < 1: # we can only wish a good luck return [] strategy = self.selection_strategy if strategy == 'first': cfgs = cfgs[:count] elif strategy in ['equidistant', 'random']: if strategy == 'equidistant': # figure out what step is needed to # accommodate the `count` number step = float(n_cfgs) / count assert(step >= 1.0) indexes = [int(round(step * i)) for i in xrange(count)] elif strategy == 'random': indexes = np.random.permutation(range(n_cfgs))[:count] # doesn't matter much but lets keep them in the original # order at least indexes.sort() else: # who said that I am paranoid? raise RuntimeError, "Really should not happen" if __debug__: debug("SPL", "For %s selection strategy selected %s " "partition specs from %d total" % (strategy, indexes, n_cfgs)) cfgs = [cfgs[i] for i in indexes] return cfgs @property @deprecated("to be removed in PyMVPA 2.1; use .attr instead") def splitattr(self): return self.attr selection_strategy = property(fget=lambda self:self.__selection_strategy, fset=_set_selection_strategy) attr = property(fget=lambda self: self.__attr) class OddEvenPartitioner(Partitioner): """Create odd and even partitions based on a sample attribute. The partitioner yields two datasets. In the first set all odd chunks are labeled '1' and all even runs are labeled '2'. In the second set the assignment is reversed (odd: '2', even: '1'). """ def __init__(self, usevalues=False, **kwargs): """ Parameters ---------- usevalues : bool If True the values of the attribute used for partitioning will be used to determine odd and even samples. If False odd and even chunks are defined by the order of attribute values, i.e. first unique attribute is odd, second is even, despite the corresponding values might indicate the opposite (e.g. in case of [2,3]. """ Partitioner.__init__(self, **(kwargs)) self.__usevalues = usevalues def __repr__(self, prefixes=[]): return super(OddEvenPartitioner, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['usevalues'], default=False)) def _get_partition_specs(self, uniqueattrs): """ Returns ------- list of tuples (None, list of int) 2 items: odd samples into 1st split """ if self.__usevalues: return [(None, uniqueattrs[(uniqueattrs % 2) == True]), (None, uniqueattrs[(uniqueattrs % 2) == False])] else: return [(None, uniqueattrs[np.arange(len(uniqueattrs)) %2 == True]), (None, uniqueattrs[np.arange(len(uniqueattrs)) %2 == False])] usevalues = property(fget=lambda self: self.__usevalues) class HalfPartitioner(Partitioner): """Partition a dataset into two halves of the sample attribute. The partitioner yields two datasets. In the first set second half of chunks are labeled '1' and the first half labeled '2'. In the second set the assignment is reversed (1st half: '1', 2nd half: '2'). """ def _get_partition_specs(self, uniqueattrs): """ Returns ------- list of tuples (None, list of int) 2 items: first half of samples into 1st split """ return [(None, uniqueattrs[:len(uniqueattrs)/2]), (None, uniqueattrs[len(uniqueattrs)/2:])] class NGroupPartitioner(Partitioner): """Partition a dataset into N-groups of the sample attribute. For example, NGroupPartitioner(2) is the same as the HalfPartitioner and yields exactly the same partitions and labeling patterns. """ def __init__(self, ngroups=4, **kwargs): """ Parameters ---------- ngroups : int Number of groups to split the attribute into. """ Partitioner.__init__(self, **(kwargs)) self.__ngroups = ngroups def __repr__(self, prefixes=[]): return super(NGroupPartitioner, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['ngroups'], default=4)) def _get_partition_specs(self, uniqueattrs): """ Returns ------- list of tuples (None, list of int) Indices for splitting """ # make sure there are more of attributes than desired groups if len(uniqueattrs) < self.__ngroups: raise ValueError("Number of groups (%d) " % (self.__ngroups) + \ "must be less than " + \ "or equal to the number of unique attributes (%d)" % \ (len(uniqueattrs))) # use coarsen_chunks to get the split indices split_ind = coarsen_chunks(uniqueattrs, nchunks=self.__ngroups) split_ind = np.asarray(split_ind) # loop and create splits split_list = [(None, uniqueattrs[split_ind==i]) for i in range(self.__ngroups)] return split_list ngroups = property(fget=lambda self: self.__ngroups) class CustomPartitioner(Partitioner): """Partition a dataset using an arbitrary custom rule. The partitioner is configured by passing a custom rule (``splitrule``) to its constructor. Such a rule is basically a sequence of partition definitions. Every single element in this sequence results in exactly one partition set. Each element is another sequence of attribute values whose corresponding samples shall go into a particular partition. Examples -------- Generate two sets. In the first set the *second* partition contains all samples with sample attributes corresponding to either 0, 1 or 2. The *first* partition of the first set contains all samples which are not part of the second partition. The second set yields three partitions. The first with all samples corresponding to sample attributes 1 and 2, the second contains only samples with attribute 3 and the last contains the samples with attribute 5 and 6. >>> ptr = CustomPartitioner([(None, [0, 1, 2]), ([1,2], [3], [5, 6])]) The numeric labels of all partitions correspond to their position in the ``splitrule`` of a particular set. Note that the actual labels start with '1' as all unselected elements are labeled '0'. """ def __init__(self, splitrule, **kwargs): """ Parameters ---------- splitrule : list of tuple Custom partition set specs. """ Partitioner.__init__(self, **(kwargs)) self.splitrule = splitrule def __repr__(self, prefixes=[]): return super(CustomPartitioner, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['splitrule'])) def _get_partition_specs(self, uniqueattrs): """ Returns ------- whatever was provided in splitrule argument """ return self.splitrule class NFoldPartitioner(Partitioner): """Generic N-fold data partitioner. Given a dataset with N chunks, with ``cvtype`` = 1 (which is default), it would generate N partition sets, where each chunk is sequentially taken out (with replacement) to form a second partition, while all other samples together form the first partition. Example, if there are 4 chunks, partition sets for ``cvtype`` = 1 are:: [[1, 2, 3], [0]] [[0, 2, 3], [1]] [[0, 1, 3], [2]] [[0, 1, 2], [3]] If ``cvtype``>1, then all possible combinations of ``cvtype`` number of chunks are taken out, so for ``cvtype`` = 2 in previous example yields:: [[2, 3], [0, 1]] [[1, 3], [0, 2]] [[1, 2], [0, 3]] [[0, 3], [1, 2]] [[0, 2], [1, 3]] [[0, 1], [2, 3]] Note that the "taken-out" partition is always labeled '2' while the remaining elements are labeled '1'. If ``cvtype`` is a float in the range from 0 to 1, it specifies the ratio of present unique values to be taken. If ``cvtype`` is large enough generating prohibitively large number of combinations, provide ``count`` to limit number of combinations and provide ``selection_strategy`` = 'random'. """ _DEV__doc__ = """ Might want to make it smarter and implement generate() generator? Especially for the cases which use xrandom_unique_combinations All needed machinery is there """ def __init__(self, cvtype=1, **kwargs): """ Parameters ---------- cvtype : int, float Type of leave-one-out scheme: N-(cvtype). float value (0..1) specifies ratio of samples to be taken into the combination (e.g. 0.5 for 50%) given a dataset """ Partitioner.__init__(self, **kwargs) if isinstance(cvtype, float): # some checks if not (0 < cvtype < 1): raise ValueError("Float value for cvtype must be within range " "(0, 1), excluding boundaries. Got %r." % cvtype) self.cvtype = cvtype def __repr__(self, prefixes=[]): #pylint: disable-msg=W0102 return super(NFoldPartitioner, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['cvtype'], default=1)) def _get_partition_specs(self, uniqueattrs): if isinstance(self.cvtype, float): n = int(self.cvtype * len(uniqueattrs)) else: n = self.cvtype if self.count is None \ or self.selection_strategy != 'random' \ or self.count >= support.ncombinations(len(uniqueattrs), n): # all combinations were requested so no need for # randomization combs = support.xunique_combinations(uniqueattrs, n) else: # due to selection_strategy=random they would be also # reshuffled by super class later on but that should be ok combs = support.xrandom_unique_combinations(uniqueattrs, n, self.count) if self.count is None or self.selection_strategy != 'random': # we are doomed to return all of them return [(None, i) for i in combs] else: # It makes sense to limit number of returned combinations # right away return [(None, i) for ind, i in enumerate(combs) if ind < self.count] class ExcludeTargetsCombinationsPartitioner(Node): """Exclude combinations for a given partition from other partitions Given a pre-generated partitioning this generates new partitions by selecting all possible combinations of k-targets from all targets and excluding samples with the selected k-targets from training partition for each combination. A simple example would be: Examples -------- For a dataset with 3 classes with one sample per class, k=2 gives 3 combination partitions with 2 samples for testing and one sample for training (since it excludes the 2 selected target samples) per partition. >>> from mvpa2.base.node import ChainNode >>> partitioner = ChainNode([NFoldPartitioner(), ... ExcludeTargetsCombinationsPartitioner( ... k=2, ... targets_attr='targets', ... space='partitions')], ... space='partitions') While cross-validating across subjects (e.g. working with hyperaligned data), to avoid significant bias due to matching trial-order effects instead of categorical boundaries, it is important to exclude from training chunks with the order matching the ones in testing. >>> partitioner = ChainNode([NFoldPartitioner(attr='subject'), ... ExcludeTargetsCombinationsPartitioner( ... k=1, ... targets_attr='chunks', ... space='partitions')], ... space='partitions') """ def __init__(self, k, targets_attr, partitions_attr='partitions', partitions_keep=2, # default for testing partition partition_assign=3, # assign one which Splitter doesn't even get to **kwargs): Node.__init__(self, **kwargs) self.k = k self.targets_attr = targets_attr self.partitions_attr = partitions_attr self.partitions_keep = partitions_keep self.partition_assign = partition_assign def __repr__(self, prefixes=[]): # Here we are jumping over Node's __repr__ since # it would enforce placing space return super(ExcludeTargetsCombinationsPartitioner, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['k', 'targets_attr']) + _repr_attrs(self, ['partitions_attr'], default='partitions') + _repr_attrs(self, ['partitions_keep'], default=2) + _repr_attrs(self, ['partition_assign'], default=3) ) def generate(self, ds): orig_partitioning = ds.sa[self.partitions_attr].value.copy() targets = ds.sa[self.targets_attr].value testing_part = orig_partitioning == self.partitions_keep nontesting_part = np.logical_not(testing_part) utargets = np.unique(targets[testing_part]) for combination in support.xunique_combinations(utargets, self.k): partitioning = orig_partitioning.copy() combination_matches = [ t in combination for t in targets ] combination_nonmatches = np.logical_not(combination_matches) partitioning[np.logical_and(testing_part, combination_nonmatches)] \ = self.partition_assign partitioning[np.logical_and(nontesting_part, combination_matches)] \ = self.partition_assign pds = ds.copy(deep=False) pds.sa[self.space] = partitioning yield pds pymvpa2-2.2.0/mvpa2/generators/permutation.py000066400000000000000000000153311202542755000212350ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generator nodes to permute datasets. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.node import Node from mvpa2.base.dochelpers import _str, _repr from mvpa2.misc.support import get_limit_filter from mvpa2.support.utils import deprecated class AttributePermutator(Node): """Node to permute one a more attributes in a dataset. This node can permute arbitrary sample or feature attributes in a dataset. Moreover, it supports limiting the permutation to a subset of samples or features (see ``limit`` argument). The node can simply be called with a dataset for a one time permutation, or used as a generator to produce multiple permutations. This node only permutes dataset attributes, dataset samples are no affected. The permuted output dataset shares the samples container with the input dataset. """ def __init__(self, attr, count=1, limit=None, assure=False, **kwargs): """ Parameters ---------- attr : str or list(str) Name of the to-be-permuted attribute. This can also be a list of attribute names, in which case the *identical* shuffling is applied to all listed attributes. count : int Number of permutations to be yielded by .generate() limit : None or str or dict If ``None`` all attribute values will be permuted. If an single attribute name is given, its unique values will be used to define chunks of data that are permuted individually (i.e. no attributed values will be replaced across chunks). Finally, if a dictionary is provided, its keys define attribute names and its values (single value or sequence thereof) attribute value, where all key-value combinations across all given items define a "selection" of to-be-permuted samples or features. assure : bool If set, by-chance non-permutations will be prevented, i.e. it is checked that at least two items change their position. Since this check adds a runtime penalty it is off by default. """ Node.__init__(self, **kwargs) self._pattr = attr self.count = count self._limit = limit self._pcfg = None self._assure_permute = assure def _get_pcfg(self, ds): # determine to be permuted attribute to find the collection pattr = self._pattr if isinstance(pattr, str): pattr, collection = ds.get_attr(pattr) else: # must be sequence of attrs, take first since we only need the shape pattr, collection = ds.get_attr(pattr[0]) return get_limit_filter(self._limit, collection) def _call(self, ds): # local binding pattr = self._pattr assure_permute = self._assure_permute # get permutation setup if not set already (maybe from generate()) if self._pcfg is None: pcfg = self._get_pcfg(ds) else: pcfg = self._pcfg if isinstance(pattr, str): # wrap single attr name into tuple to simplify the code pattr = (pattr,) # shallow copy of the dataset for output out = ds.copy(deep=False) for limit_value in np.unique(pcfg): if pcfg.dtype == np.bool: # simple boolean filter -> do nothing on False if not limit_value: continue # otherwise get indices of "selected ones" limit_idx = pcfg.nonzero()[0] else: # non-boolean limiter -> determine "chunk" and permute within limit_idx = (pcfg == limit_value).nonzero()[0] # permute indices once and later apply the same permutation to all # desired attributes # make ten attempts of assure is set if assure_permute: proceed = False for i in range(10): perm_idx = np.random.permutation(limit_idx) if not np.all(perm_idx == limit_idx): proceed = True break if not proceed: raise RuntimeError( "Cannot assure permutation of %s.%s for " "some reason (dataset %s). Should not happen" % (pattr, ds)) else: perm_idx = np.random.permutation(limit_idx) # need list to index properly limit_idx = list(limit_idx) # for all to be permuted attrs for pa in pattr: # input attr and collection in_pattr, in_collection = ds.get_attr(pa) # output attr and collection out_pattr, out_collection = out.get_attr(pa) # make a copy of the attr value array to decouple ownership out_values = out_pattr.value.copy() # replace all values in current limit with permutations out_values[limit_idx] = in_pattr.value[perm_idx] # reassign the attribute to overwrite any previous one out_pattr.value = out_values return out def generate(self, ds): """Generate the desired number of permuted datasets.""" # figure out permutation setup once for all runs self._pcfg = self._get_pcfg(ds) # permute as often as requested for i in xrange(self.count): yield self(ds) # reset permutation setup to do the right thing upon next call to object self._pcfg = None def __str__(self): return _str(self, self._pattr, n=self.count, limit=self._limit, assure=self._assure_permute) def __repr__(self, prefixes=[]): return super(AttributePermutator, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['attr']) + _repr_attrs(self, ['count'], default=1) + _repr_attrs(self, ['limit']) + _repr_attrs(self, ['assure'], default=False) ) @property @deprecated("to be removed in 2.1 -- use .count instead") def nruns(self): return self.count attr = property(fget=lambda self: self._pattr) limit = property(fget=lambda self: self._limit) assure = property(fget=lambda self: self._assure_permute) pymvpa2-2.2.0/mvpa2/generators/resampling.py000066400000000000000000000174441202542755000210360ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generators for dataset resampling.""" __docformat__ = 'restructuredtext' import random import numpy as np from mvpa2.base.node import Node from mvpa2.base.dochelpers import _str, _repr from mvpa2.misc.support import get_limit_filter, get_nelements_per_value class Balancer(Node): """Generator to (repeatedly) select subsets of a dataset. The Balancer can equalize the number of samples/features in a dataset, or select an absolute number or fraction of all available data. Selection is performed given a particular attribute and additionally can be limited to a subset of the dataset defined by more complex criteria (see ``limit`` argument). The node can either "mark" elements as selected by adding a corresponding attribute to the output dataset, or actually apply the selection by returning a new dataset with only selected elements. """ def __init__(self, amount='equal', attr='targets', count=1, limit='chunks', apply_selection=False, space='balanced_set', **kwargs): """ Parameters ---------- amount : {'equal'} or int or float Specify the amount of elements to be selected (within the current ``limit``). The amount can be given as an integer value corresponding to the absolute number of elements per unique attribute (see ``attr``) value, as a float corresponding to the fraction of elements, or with the keyword 'equal'. In the latter case the number of to be selected elements is determined by the least number of available elements for any given unique attribute value within the current limit. attr : str Dataset attribute whose unique values define element classes that are to be balanced in number. count : int How many iterations to perform on ``generate()``. limit : None or str or dict If ``None`` the whole dataset is considered as one. If a single attribute name is given, its unique values will be used to define chunks of data that are balanced individually. Finally, if a dictionary is provided, its keys define attribute names and its values (single value or sequence thereof) attribute value, where all key-value combinations across all given items define a "selection" of to-be-balanced samples or features. apply_selection : bool Flag whether the balanced selection shall be applied, i.e. the output dataset only contains selected elements. If False, the selection is instead added as an attribute that merely marks selected elements (see ``space`` argument). space : str Name of the selection marker attribute in the output dataset that is created if the balanced selection is not applied to the output dataset (see ``apply_selection`` argument). """ Node.__init__(self, space=space, **kwargs) self._amount = amount self._attr = attr self.count = count self._limit = limit self._limit_filter = None self._apply_selection = apply_selection def _call(self, ds): # local binding amount = self._amount attr, collection = ds.get_attr(self._attr) # get filter if not set already (maybe from generate()) if self._limit_filter is None: limit_filter = get_limit_filter(self._limit, collection) else: limit_filter = self._limit_filter # ids of elements that are part of the balanced set balanced_set = [] # for each chunk in the filter (might be just the selected ones) for limit_value in np.unique(limit_filter): if limit_filter.dtype == np.bool: # simple boolean filter -> do nothing on False if not limit_value: continue # otherwise get indices of "selected ones" limit_idx = limit_filter.nonzero()[0] else: # non-boolean limiter -> determine "chunk" and balance within limit_idx = (limit_filter == limit_value).nonzero()[0] # apply the current limit to the target attribute # need list to index properly attr_limited = attr[list(limit_idx)] uattr_limited = np.unique(attr_limited) # handle all types of supported arguments if amount == 'equal': # go for maximum possible number of samples provided # by each label in this dataset # determine the min number of samples per class epa = get_nelements_per_value(attr_limited) min_epa = min(epa.values()) for k in epa: epa[k] = min_epa elif isinstance(amount, float): epa = get_nelements_per_value(attr_limited) for k in epa: epa[k] = int(round(epa[k] * amount)) elif isinstance(amount, int): epa = dict(zip(uattr_limited, [amount] * len(uattr_limited))) else: raise ValueError("Unknown type of amount argument '%s'" % amount) # select determined number of elements per unique attribute value selected = [] for ua in uattr_limited: selected += random.sample(list((attr_limited == ua).nonzero()[0]), epa[ua]) # determine the final indices of selected elements and store # as part of the balanced set balanced_set += list(limit_idx[selected]) # make full-sized boolean selection attribute and put it into # the right collection of the output dataset battr = np.zeros(len(attr), dtype=np.bool) battr[balanced_set] = True if self._apply_selection: if collection is ds.sa: return ds[battr] elif collection is ds.fa: return ds[:, battr] else: # paranoid raise RuntimeError( "Don't know where this collection comes from. " "This should never happen!") else: # shallow copy of the dataset for output out = ds.copy(deep=False) if collection is ds.sa: out.sa[self.get_space()] = battr elif collection is ds.fa: out.fa[self.get_space()] = battr else: # paranoid raise RuntimeError( "Don't know where this collection comes from. " "This should never happen!") return out def generate(self, ds): """Generate the desired number of balanced datasets datasets.""" # figure out filter for all runs at once attr, collection = ds.get_attr(self._attr) self._limit_filter = get_limit_filter(self._limit, collection) # permute as often as requested for i in xrange(self.count): yield self(ds) # reset filter to do the right thing upon next call to object self._limit_filter = None def __str__(self): return _str(self, str(self._amount), n=self._attr, count=self.count, apply_selection=self._apply_selection) pymvpa2-2.2.0/mvpa2/generators/splitters.py000066400000000000000000000147621202542755000207260ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generator nodes to split dataset into multiple parts. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.node import Node from mvpa2.base import warning from mvpa2.misc.support import mask2slice if __debug__: from mvpa2.base import debug class Splitter(Node): """Generator node for dataset splitting. The splitter is configured with the name of an attribute. When its ``generate()`` methods is called with a dataset, it subsequently yields all possible subsets of this dataset, by selecting all dataset samples/features corresponding to a particular attribute value, for all unique attribute values. Dataset splitting is possible by sample attribute, or by feature attribute. The maximum number of splits can be limited, and custom attribute values may be provided. """ def __init__(self, attr, attr_values=None, count=None, noslicing=False, reverse=False, ignore_values=None, **kwargs): """ Parameters ---------- attr : str Typically the sample or feature attribute used to determine splits. attr_values : tuple If not None, this is a list of value of the ``attr`` used to determine the splits. The order of values in this list defines the order of the resulting splits. It is possible to specify a particular value multiple times. All dataset samples with values that are not listed are going to be ignored. count : None or int Desired number of generated splits. If None, all splits are output (default), otherwise the number of splits is limited to the given ``count`` or the maximum number of possible split (whatever is less). noslicing : bool If True, dataset splitting is not done by slicing (causing shared data between source and split datasets) even if it would be possible. By default slicing is performed whenever possible to reduce the memory footprint. reverse : bool If True, the order of datasets in the split is reversed, e.g. instead of (training, testing), (training, testing) will be spit out. ignore_values : tuple If not None, this is a list of value of the ``attr`` the shall be ignored when determining the splits. This settings also affects any specified ``attr_values``. """ Node.__init__(self, space=attr, **kwargs) self.__splitattr_values = attr_values self.__splitattr_ignore = ignore_values self.__count = count self.__noslicing = noslicing self.__reverse = reverse def generate(self, ds): """Yield dataset splits. Parameters ---------- ds: Dataset Input dataset Returns ------- generator The generator yields every possible split according to the splitter configuration. All generated dataset have a boolean 'lastsplit' attribute in their dataset attribute collection indicating whether this particular dataset is the last one. """ # localbinding noslicing = self.__noslicing count = self.__count splattr = self.get_space() ignore = self.__splitattr_ignore # get attribute and source collection from dataset splattr, collection = ds.get_attr(splattr) splattr_data = splattr.value cfgs = self.__splitattr_values if cfgs is None: cfgs = splattr.unique if __debug__: debug('SPL', 'Determined %i split specifications' % len(cfgs)) if not ignore is None: # remove to be ignored bits cfgs = [c for c in cfgs if not c in ignore] if __debug__: debug('SPL', '%i split specifications left after removing ignored ones' % len(cfgs)) n_cfgs = len(cfgs) if self.__reverse: if __debug__: debug('SPL', 'Reversing split order') cfgs = cfgs[::-1] # split the data for isplit, split in enumerate(cfgs): if not count is None and isplit >= count: # number of max splits is reached if __debug__: debug('SPL', 'Discard remaining splits as maximum of %i is reached' % count) break # safeguard against 'split' being `None` -- in which case a single # boolean would be the result of the comparision below, and not # a boolean vector from element-wise comparision if split is None: split = [None] # boolean mask is 'selected' samples for this split filter_ = splattr_data == split if not noslicing: # check whether we can do slicing instead of advanced # indexing -- if we can split the dataset without causing # the data to be copied, its is quicker and leaner. # However, it only works if we have a contiguous chunk or # regular step sizes for the samples to be split filter_ = mask2slice(filter_) if collection is ds.sa: if __debug__: debug('SPL', 'Split along samples axis') split_ds = ds[filter_] elif collection is ds.fa: if __debug__: debug('SPL', 'Split along feature axis') split_ds = ds[:, filter_] else: RuntimeError("This should never happen.") # is this the last split if count is None: lastsplit = (isplit == n_cfgs - 1) else: lastsplit = (isplit == count - 1) if not split_ds.a.has_key('lastsplit'): # if not yet known -- add one split_ds.a['lastsplit'] = lastsplit else: # otherwise just assign a new value split_ds.a.lastsplit = lastsplit yield split_ds pymvpa2-2.2.0/mvpa2/kernels/000077500000000000000000000000001202542755000156035ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/kernels/__init__.py000066400000000000000000000012601202542755000177130ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for PyMVPA kernels/similarities and alike """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.kernels') # Just base kernel implementations from mvpa2.kernels.base import * if __debug__: debug('INIT', 'mvpa2.kernels end') pymvpa2-2.2.0/mvpa2/kernels/base.py000066400000000000000000000322521202542755000170730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Base Kernel classes """ _DEV_DOC_ = """ Concerns: - Assure proper type of _k assigned - The same issue "Dataset vs data" in input arguments """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.types import is_datasetlike from mvpa2.base.state import ClassWithCollections from mvpa2.base.param import Parameter from mvpa2.misc.sampleslookup import SamplesLookup # required for CachedKernel if __debug__: from mvpa2.base import debug __all__ = ['Kernel', 'NumpyKernel', 'CustomKernel', 'PrecomputedKernel', 'CachedKernel'] class Kernel(ClassWithCollections): """Abstract class which calculates a kernel function between datasets Each instance has an internal representation self._k which might be of a different form depending on the intended use. Some kernel types should be translatable to other representations where possible, e.g., between Numpy and Shogun-based kernels. This class should not be used directly, but rather use a subclass which enforces a consistent internal representation, such as a NumpyKernel. Notes ----- Conversion mechanisms: Each kernel type should implement methods as necessary for the following two methods to work: :meth:`~mvpa2.kernels.Kernel.as_np` *Return a new NumpyKernel object with internal Numpy kernel*. This method can be generally inherited from the base Kernel class by creating a PrecomputedKernel from the raw numpy matrix, as implemented here. :meth:`~mvpa2.kernels.Kernel.as_raw_np` *Return a raw Numpy array from this kernel*. This method should behave identically to numpy.array(kernel), and in fact, defining either method (via defining Kernel.__array__) will be sufficient for both method calls to work. See this source code for more details. Other kernel types should implement similar mechanisms to convert numpy arrays to their own internal representations. See `add_conversion` for a helper method, and examples in mvpa2.kernels.sg Assuming such `Kernel.as_*` methods exist, all kernel types should be seamlessly convertable amongst each other. Note that kernels are not meant to be 'functionally translateable' in the sense that one kernel can be created, translated, then used to compute results in a new framework. Rather, the results are meant to be exchangeable, hence the standard practice of using a precomputed kernel object to store the results in the new kernel type. For example: :: k = SomeShogunKernel() k.compute(data1, data2) # Incorrect and unsupported use k2 = k.as_cuda() k2.compute(data3, data4) # Would require 'functional translation' to the new # backend, which is impossible # Correct use someOtherAlgorithm(k.as_raw_cuda()) # Simply uses kernel results in CUDA """ _ATTRIBUTE_COLLECTIONS = ['params'] # enforce presence of params collections # Define this per class: standard string describing kernel type, ie # 'linear', or 'rbf', to help coordinate kernel types across backends __kernel_name__ = None def __init__(self, *args, **kwargs): """Base Kernel class has no parameters """ ClassWithCollections.__init__(self, *args, **kwargs) self._k = None """Implementation specific version of the kernel""" def compute(self, ds1, ds2=None): """Generic computation of any kernel Assumptions: - ds1, ds2 are either datasets or arrays, - presumably 2D (not checked neither enforced here - _compute takes ndarrays. If your kernel needs datasets, override compute """ if is_datasetlike(ds1): ds1 = ds1.samples if ds2 is None: ds2 = ds1 elif is_datasetlike(ds2): ds2 = ds2.samples # TODO: assure 2D shape self._compute(ds1, ds2) def _compute(self, d1, d2): """Specific implementation to be overridden """ raise NotImplemented, "Abstract method" def computed(self, *args, **kwargs): """Compute kernel and return self """ self.compute(*args, **kwargs) return self ############################################################################ # The following methods are circularly defined. Child kernel types can # override either one or both to allow conversion to Numpy def __array__(self): return self.as_raw_np() def as_raw_np(self): """Directly return this kernel as a numpy array""" return np.array(self) ############################################################################ def as_np(self): """Converts this kernel to a Numpy-based representation""" p = PrecomputedKernel(matrix=self.as_raw_np()) p.compute() return p def cleanup(self): """Wipe out internal representation XXX unify: we have reset in other places to accomplish similar thing """ self._k = None @classmethod def add_conversion(cls, typename, methodfull, methodraw): """Adds methods to the Kernel class for new conversions Parameters ---------- typename : string Describes kernel type methodfull : function Method which converts to the new kernel object class methodraw : function Method which returns a raw kernel Examples -------- Kernel.add_conversion('np', fullmethod, rawmethod) binds kernel.as_np() to fullmethod() binds kernel.as_raw_np() to rawmethod() Can also be used on subclasses to override the default conversions """ setattr(cls, 'as_%s'%typename, methodfull) setattr(cls, 'as_raw_%s'%typename, methodraw) class NumpyKernel(Kernel): """A Kernel object with internal representation as a 2d numpy array""" _ATTRIBUTE_COLLECTIONS = Kernel._ATTRIBUTE_COLLECTIONS + ['ca'] # enforce presence of params AND ca collections for gradients etc def __array__(self): # By definintion, a NumpyKernel's internal representation is an array return self._k def as_np(self): """Converts this kernel to a Numpy-based representation""" # Already numpy!! return self def as_raw_np(self): """Directly return this kernel as a numpy array. For Numpy-based kernels - simply returns stored matrix.""" return self._k # wasn't that easy? class CustomKernel(NumpyKernel): """Custom Kernel defined by an arbitrary function Examples -------- Basic linear kernel >>> k = CustomKernel(kernelfunc=lambda a,b: numpy.dot(a,b.T)) """ __TODO__ = """ - repr/doc sicne now kernelfunc is not a Parameter """ def __init__(self, kernelfunc=None, *args, **kwargs): """Initialize CustomKernel with an arbitrary function. Parameters ---------- kernelfunc : function Any callable function which takes two numpy arrays and calculates a kernel function, treating the rows as samples and the columns as features. It is called from compute(d1, d2) -> func(d1,d2) and should return a numpy matrix K(i,j) which holds the kernel evaluated from d1 sample i and d2 sample j """ NumpyKernel.__init__(self, *args, **kwargs) self._kernelfunc = kernelfunc def _compute(self, d1, d2): self._k = self._kernelfunc(d1, d2) class PrecomputedKernel(NumpyKernel): """Precomputed matrix """ __TODO__ = """ - repr/doc sicne now matrix is not a Parameter """ # NB: to avoid storing matrix twice, after compute # self.params.matrix = self._k def __init__(self, matrix=None, *args, **kwargs): """ Parameters ---------- matrix : Numpy array or convertable kernel, or other object type """ NumpyKernel.__init__(self, *args, **kwargs) self._k = np.array(matrix) def compute(self, *args, **kwargs): pass class CachedKernel(NumpyKernel): """Kernel which caches all data to avoid duplicate computation This kernel is very useful for any analysis which will retrain or repredict the same data multiple times, as this kernel will avoid recalculating the kernel function. Examples of such analyses include cross validation, bootstrapping, and model selection (assuming the kernel function itself does not change, e.g. when selecting for C in an SVM). The kernel will automatically cache any new data sent through compute, and will be able to use this cache whenever a subset of this data is sent through compute again. If new (uncached) data is sent through compute, then the cache is recreated from scratch. Therefore, you should compute the kernel on the entire superset of your data before using this kernel normally (computing a new cache invalidates any previous cached data). The cache is asymmetric for lhs and rhs, so compute(d1, d2) does not create a cache usable for compute(d2, d1). """ # TODO: Figure out how to design objects like CrossValidation etc to # precompute this kernel automatically, making it transparent to the user @property def __kernel_name__(self): """Allows checking name of subkernel""" return self._kernel.__kernel_name__ def __init__(self, kernel=None, *args, **kwargs): """Initialize `CachedKernel` Parameters ---------- kernel : Kernel Base kernel to cache. Any kernel which can be converted to a `NumpyKernel` is allowed """ super(CachedKernel, self).__init__(*args, **kwargs) self._kernel = kernel self.params.update(self._kernel.params) self._rhsids = self._lhsids = self._kfull = None self._recomputed = None def _cache(self, ds1, ds2=None): """Initializes internal lookups + _kfull via caching the kernel matrix """ if __debug__ and 'KRN' in debug.active: debug('KRN', "Caching %(inst)s for ds1=%(ds1)s, ds2=%(ds1)s" % dict(inst=self, ds1=ds1, ds2=ds2)) self._lhsids = SamplesLookup(ds1) if (ds2 is None) or (ds2 is ds1): self._rhsids = self._lhsids else: self._rhsids = SamplesLookup(ds2) ckernel = self._kernel ckernel.compute(ds1, ds2) self._kfull = ckernel.as_raw_np() ckernel.cleanup() self._k = self._kfull self._recomputed = True self.params.reset() # TODO: store params representation for later comparison def compute(self, ds1, ds2=None, force=False): """Automatically computes and caches the kernel or extracts the relevant part of a precached kernel into self._k Parameters ---------- force : bool If True it forces re-caching of the kernel. It is advised to be used whenever explicitly pre-caching the kernel and it is known that data was changed. """ if __debug__ and 'KRN' in debug.active: debug('KRN', "Computing kernel %(inst)s on ds1=%(ds1)s, ds2=%(ds1)s" % dict(inst=self, ds1=ds1, ds2=ds2)) # Flag lets us know whether cache was recomputed self._recomputed = False #if self._ds_cached_info is not None: # Check either those ds1, ds2 are coming from the same # dataset as before # TODO: figure out if data were modified... # params_modified = True changedData = False or force if len(self.params.which_set()) or changedData \ or self._lhsids is None: self._cache(ds1, ds2)# hopefully this will never reset values, just # changed status else: # figure d1, d2 try: lhsids = self._lhsids(ds1) # if ds2 is None: rhsids = lhsids else: rhsids = self._rhsids(ds2) self._k = self._kfull[np.ix_(lhsids, rhsids)] except KeyError: self._cache(ds1, ds2) if __debug__ and self._recomputed: debug('KRN', "Kernel %(inst)s was recomputed on ds1=%(ds1)s, ds2=%(ds1)s" % dict(inst=self, ds1=ds1, ds2=ds2)) __BOGUS_NOTES__ = """ if ds1 is the "derived" dataset as it was computed on: * ds2 is None ds2 bound to ds1 - * ds1 and ds2 present - ds1 and ds2 come from the same dataset - whatever CachedKernel was computed on is a superset - not a superset -- puke? - ds2 comes from different than ds1 - puke? else: compute (ds1, ds2) - different data ids ckernel = PrecomputedKernel(matrix=np.array([1,2,3])) ck = CachedKernel(kernel=ckernel) """ pymvpa2-2.2.0/mvpa2/kernels/libsvm.py000066400000000000000000000064451202542755000174620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PyMVPA LibSVM-based kernels These kernels do not currently have the ability to run the calculations, so they are not translateable to other kernel types. They are implemented solely to standardize the interface between other kernel machines. """ __docformat__ = 'restructuredtext' from mvpa2.kernels.base import Kernel from mvpa2.base.param import Parameter #from mvpa2.clfs.libsvmc import _svmc class _svmc(object): """Locally defining constants for LibSVM to avoid circular import. """ LINEAR = 0 POLY = 1 RBF = 2 SIGMOID = 3 class LSKernel(Kernel): """A Kernel object which dictates how LibSVM will calculate the kernel""" def __init__(self, *args, **kwargs): """Base class for LIBSVM Kernels has no parameters """ Kernel.__init__(self, *args, **kwargs) self.compute() def compute(self, *args, **kwargs): self._k = self.__kernel_type__ # Nothing to compute def as_raw_ls(self): return self._k def as_ls(self): return self def as_raw_np(self): raise ValueError, 'LibSVM calculates kernels internally; they ' +\ 'cannot be converted to Numpy' # Conversion methods def _as_ls(kernel): raise NotImplemented, 'LibSVM calculates kernels internally; they ' +\ 'cannot be converted from Numpy' def _as_raw_ls(kernel): raise NotImplemented, 'LibSVM calculates kernels internally; they ' +\ 'cannot be converted from Numpy' Kernel.add_conversion('ls', _as_ls, _as_raw_ls) class LinearLSKernel(LSKernel): """A simple Linear kernel: K(a,b) = a*b.T""" __kernel_type__ = _svmc.LINEAR __kernel_name__ = 'linear' class RbfLSKernel(LSKernel): """Radial Basis Function kernel (aka Gaussian): K(a,b) = exp(-gamma*||a-b||**2) """ __kernel_type__ = _svmc.RBF __kernel_name__ = 'rbf' gamma = Parameter(1, doc='Gamma multiplying paramater for Rbf') def __init__(self, **kwargs): # Necessary for proper docstring construction LSKernel.__init__(self, **kwargs) class PolyLSKernel(LSKernel): """Polynomial kernel: K(a,b) = (gamma*a*b.T + coef0)**degree""" __kernel_type__ = _svmc.POLY __kernel_name__ = 'poly' gamma = Parameter(1, doc='Gamma multiplying parameter for Polynomial') degree = Parameter(2, doc='Degree of polynomial') coef0 = Parameter(1, doc='Offset inside polynomial') # aka coef0 def __init__(self, **kwargs): # Necessary for proper docstring construction LSKernel.__init__(self, **kwargs) class SigmoidLSKernel(LSKernel): """Sigmoid kernel: K(a,b) = tanh(gamma*a*b.T + coef0)""" __kernel_type__ = _svmc.SIGMOID __kernel_name__ = 'sigmoid' gamma = Parameter(1, doc='Gamma multiplying parameter for SigmoidKernel') coef0 = Parameter(1, doc='Offset inside tanh') def __init__(self, **kwargs): # Necessary for proper docstring construction LSKernel.__init__(self, **kwargs) pymvpa2-2.2.0/mvpa2/kernels/np.py000066400000000000000000000623031202542755000165760ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti and # PyMVPA Team. See COPYING file distributed along with the PyMVPA # package for complete list of copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Kernels for Gaussian Process Regression and Classification.""" _DEV__DOC__ = """ Make use of Parameter Collections to keep parameters of the kernels. Then we would get a uniform .reset() functionality. Now reset is provided just for parts which are failing in the unittests, but there is many more places where they are not reset properly if classifier gets trained on some new data of different dimensionality """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.state import ConditionalAttribute from mvpa2.base.param import Parameter from mvpa2.misc.exceptions import InvalidHyperparameterError from mvpa2.clfs.distance import squared_euclidean_distance from mvpa2.kernels.base import NumpyKernel if __debug__: from mvpa2.base import debug, warning # Simple stuff class LinearKernel(NumpyKernel): """Simple linear kernel: K(a,b) = a*b.T""" def _compute(self, d1, d2): self._k = np.dot(d1, d2.T) class PolyKernel(NumpyKernel): """Polynomial kernel: K(a,b) = (gamma*a*b.T+coef0)**degree""" gamma = Parameter(1, doc='Gamma scaling coefficient') degree = Parameter(2, doc="Polynomial degree") coef0 = Parameter(1, doc="Offset added to dot product before exponent") def _compute(self, d1, d2): self._k = np.power(self.params.gamma*np.dot(d1, d2.T)+self.params.coef0, self.params.degree) class RbfKernel(NumpyKernel): """Radial basis function (aka Gausian, aka ) kernel K(a,b) = exp(-||a-b||**2/sigma) """ sigma = Parameter(1.0, allowedtype=float, doc="Width parameter sigma") def _compute(self, d1, d2): # Do the Rbf self._k = np.exp(-squared_euclidean_distance(d1,d2) / self.params.sigma) # More complex class ConstantKernel(NumpyKernel): """The constant kernel class. """ sigma_0 = Parameter(1.0, doc=""" A simple constant squared value of which is broadcasted across kernel. In the case of GPR -- standard deviation of the Gaussian prior probability N(0,sigma_0**2) of the intercept of the constant regression.""") def _compute(self, data1, data2): """Compute kernel matrix. Parameters ---------- data1 : numpy.ndarray lhs data data2 : numpy.ndarray rhs data """ self._k = \ (self.params.sigma_0 ** 2) * np.ones((data1.shape[0], data2.shape[0])) ## def set_hyperparameters(self, hyperparameter): ## if hyperparameter < 0: ## raise InvalidHyperparameterError() ## self.sigma_0 = hyperparameter ## return def compute_lml_gradient(self, alphaalphaT_Kinv, data): K_grad_sigma_0 = 2*self.params.sigma_0 # self.lml_gradient = 0.5*(np.trace(np.dot(alphaalphaT_Kinv,K_grad_sigma_0*np.ones(alphaalphaT_Kinv.shape))) # Faster formula: np.trace(np.dot(A,B)) = (A*(B.T)).sum() # Fastest when B is a constant: B*A.sum() self.lml_gradient = 0.5*np.array(K_grad_sigma_0*alphaalphaT_Kinv.sum()) #return self.lml_gradient def compute_lml_gradient_logscale(self, alphaalphaT_Kinv, data): K_grad_sigma_0 = 2*self.params.sigma_0**2 self.lml_gradient = 0.5*np.array(K_grad_sigma_0*alphaalphaT_Kinv.sum()) #return self.lml_gradient pass class GeneralizedLinearKernel(NumpyKernel): """The linear kernel class. """ sigma_0 = Parameter(1.0, doc=""" A simple constant squared value which is broadcasted across kernel. In the case of GPR -- standard deviation of the Gaussian prior probability Normal(0, sigma_0**2) of the intercept of the linear regression.""") Sigma_p = Parameter(1.0, doc=r""" A generic scalar or vector, or diagonal matrix to scale all dimensions or associate different scaling to each dimensions while computing te kernel matrix: :math:`k(x_A,x_B) = x_A^\top \Sigma_p x_B + \sigma_0^2`. In the case of GPR -- a scalar or a diagonal of covariance matrix of the Gaussian prior probability Normal(0, Sigma_p) on the weights of the linear regression.""") gradients = ConditionalAttribute(enabled=False, doc="Dictionary of gradients per a parameter") gradientslog = ConditionalAttribute(enabled=False, doc="Dictionary of gradients per a parameter in logspace") def __init__(self, *args, **kwargs): # for docstring holder NumpyKernel.__init__(self, *args, **kwargs) ## def __init__(self, Sigma_p=None, sigma_0=1.0, **kwargs): ## """Initialize the linear kernel instance. ## Parameters ## ---------- ## Sigma_p : numpy.ndarray ## Covariance matrix of the Gaussian prior probability N(0,Sigma_p) ## on the weights of the linear regression. ## (Defaults to None) ## sigma_0 : float ## the standard deviation of the Gaussian prior N(0,sigma_0**2) ## of the intercept of the linear regression. ## (Deafults to 1.0) ## """ ## # init base class first ## NumpyKernel.__init__(self, **kwargs) ## # TODO: figure out cleaner way... probably by using KernelParameters ;-) ## self.Sigma_p = Sigma_p ## self.sigma_0 = sigma_0 ## def __repr__(self): ## return "%s(Sigma_p=%s, sigma_0=%s)" \ ## % (self.__class__.__name__, str(self.Sigma_p), str(self.sigma_0)) # XXX ??? would we reset correctly to the original value... model selection # currently depends on this I believe def reset(self): super(GeneralizedLinearKernel, self).reset() self._Sigma_p = self._Sigma_p_orig def _compute(self, data1, data2): """Compute kernel matrix. """ # it is better to use separate lines of computation, to don't # incure computation cost without need (otherwise # np.dot(self.Sigma_p, data2.T) can take forever for relatively # large number of features) Sigma_p = self.params.Sigma_p # local binding sigma_0 = self.params.sigma_0 #if scalar - scale second term appropriately if np.isscalar(Sigma_p): if Sigma_p == 1.0: data2_sc = data2.T else: data2_sc = Sigma_p * data2.T # if vector use it as diagonal matrix -- ie scale each row by # the given value elif len(Sigma_p.shape) == 1 and \ Sigma_p.shape[0] == data2.shape[1]: # which due to numpy broadcasting is the same as product # with scalar above data2_sc = (Sigma_p * data2).T # If (diagonal) or full-matrix -- full-featured and lengthy matrix # product elif len(Sigma_p.shape) == 2 and \ Sigma_p.shape[0] == Sigma_p.shape[1] == data2.shape[1]: # which due to numpy broadcasting is the same as product # with scalar above data2_sc = np.dot(Sigma_p, data2.T) else: raise ValueError, "Please provide Sigma_p as a scalar, vector, " \ "or square (diagonal) matrix." # XXX if Sigma_p is changed a warning should be issued! # XXX other cases of incorrect Sigma_p could be catched self._k = k = np.dot(data1, data2_sc) + sigma_0 ** 2 # Compute gradients if any was requested do_g = self.ca.is_enabled('gradients') do_gl = self.ca.is_enabled('gradientslog') if do_g or do_gl: if np.isscalar(Sigma_p): g_Sigma_p = np.dot(data1, data2.T) gl_Sigma_p = Sigma_p * g_Sigma_p else: nfeat = len(Sigma_p) gsize = (len(data1), len(data2), nfeat) if do_g: g_Sigma_p = np.empty(gsize) if do_gl: gl_Sigma_p = np.empty(gsize) for i in xrange(nfeat): outer = np.multiply.outer(data1[:, i], data2[:, i]) if do_g: g_Sigma_p[:, :, i] = outer if do_gl: gl_Sigma_p = Sigma_p[i] * outer if do_g: self.ca.gradients = dict( sigma_0=2*sigma_0, Sigma_p=g_Sigma_p) if do_gl: self.ca.gradientslog = dict( sigma_0=2*sigma_0**2, Sigma_p=gl_Sigma_p) pass class ExponentialKernel(NumpyKernel): """The Exponential kernel class. Note that it can handle a length scale for each dimension for Automtic Relevance Determination. """ length_scale = Parameter(1.0, allowedtype='float or ndarray', doc=""" The characteristic length-scale (or length-scales) of the phenomenon under investigation.""") sigma_f = Parameter(1.0, allowedtype='float', doc="""Signal standard deviation.""") def __init__(self, *args, **kwargs): # for docstring holder NumpyKernel.__init__(self, *args, **kwargs) ## def __init__(self, length_scale=1.0, sigma_f = 1.0, **kwargs): ## """Initialize an Exponential kernel instance. ## Parameters ## ---------- ## length_scale : float or numpy.ndarray ## the characteristic length-scale (or length-scales) of the ## phenomenon under investigation. ## (Defaults to 1.0) ## sigma_f : float ## Signal standard deviation. ## (Defaults to 1.0) ## """ ## # init base class first ## NumpyKernel.__init__(self, **kwargs) ## self.length_scale = length_scale ## self.sigma_f = sigma_f ## self._k = None ## def __repr__(self): ## return "%s(length_scale=%s, sigma_f=%s)" \ ## % (self.__class__.__name__, str(self.length_scale), str(self.sigma_f)) def _compute(self, data1, data2): """Compute kernel matrix. Parameters ---------- data1 : numpy.ndarray lhs data data2 : numpy.ndarray rhs data """ params = self.params # XXX the following computation can be (maybe) made more # efficient since length_scale is squared and then # square-rooted uselessly. # Weighted euclidean distance matrix: self.wdm = np.sqrt(squared_euclidean_distance( data1, data2, weight=(params.length_scale**-2))) self._k = \ params.sigma_f**2 * np.exp(-self.wdm) def gradient(self, data1, data2): """Compute gradient of the kernel matrix. A must for fast model selection with high-dimensional data. """ raise NotImplementedError ## def set_hyperparameters(self, hyperparameter): ## """Set hyperaparmeters from a vector. ## Used by model selection. ## """ ## if np.any(hyperparameter < 0): ## raise InvalidHyperparameterError() ## self.sigma_f = hyperparameter[0] ## self.length_scale = hyperparameter[1:] ## return def compute_lml_gradient(self,alphaalphaT_Kinv,data): """Compute grandient of the kernel and return the portion of log marginal likelihood gradient due to the kernel. Shorter formula. Allows vector of lengthscales (ARD) BUT THIS LAST OPTION SEEMS NOT TO WORK FOR (CURRENTLY) UNKNOWN REASONS. """ self.lml_gradient = [] def lml_grad(K_grad_i): # return np.trace(np.dot(alphaalphaT_Kinv,K_grad_i)) # Faster formula: np.trace(np.dot(A,B)) = (A*(B.T)).sum() return (alphaalphaT_Kinv*(K_grad_i.T)).sum() grad_sigma_f = 2.0/self.sigma_f*self.kernel_matrix self.lml_gradient.append(lml_grad(grad_sigma_f)) if np.isscalar(self.length_scale) or self.length_scale.size==1: # use the same length_scale for all dimensions: K_grad_l = self.wdm*self.kernel_matrix*(self.length_scale**-1) self.lml_gradient.append(lml_grad(K_grad_l)) else: # use one length_scale for each dimension: for i in range(self.length_scale.size): K_grad_i = (self.length_scale[i]**-3)*(self.wdm**-1)*self.kernel_matrix*np.subtract.outer(data[:,i],data[:,i])**2 self.lml_gradient.append(lml_grad(K_grad_i)) pass pass self.lml_gradient = 0.5*np.array(self.lml_gradient) return self.lml_gradient def compute_lml_gradient_logscale(self,alphaalphaT_Kinv,data): """Compute grandient of the kernel and return the portion of log marginal likelihood gradient due to the kernel. Shorter formula. Allows vector of lengthscales (ARD). BUT THIS LAST OPTION SEEMS NOT TO WORK FOR (CURRENTLY) UNKNOWN REASONS. """ self.lml_gradient = [] def lml_grad(K_grad_i): # return np.trace(np.dot(alphaalphaT_Kinv,K_grad_i)) # Faster formula: np.trace(np.dot(A,B)) = (A*(B.T)).sum() return (alphaalphaT_Kinv*(K_grad_i.T)).sum() grad_log_sigma_f = 2.0*self.kernel_matrix self.lml_gradient.append(lml_grad(grad_log_sigma_f)) if np.isscalar(self.length_scale) or self.length_scale.size==1: # use the same length_scale for all dimensions: K_grad_l = self.wdm*self.kernel_matrix self.lml_gradient.append(lml_grad(K_grad_l)) else: # use one length_scale for each dimension: for i in range(self.length_scale.size): K_grad_i = (self.length_scale[i]**-2)*(self.wdm**-1)*self.kernel_matrix*np.subtract.outer(data[:,i],data[:,i])**2 self.lml_gradient.append(lml_grad(K_grad_i)) pass pass self.lml_gradient = 0.5*np.array(self.lml_gradient) return self.lml_gradient pass class SquaredExponentialKernel(NumpyKernel): """The Squared Exponential kernel class. Note that it can handle a length scale for each dimension for Automtic Relevance Determination. """ def __init__(self, length_scale=1.0, sigma_f=1.0, **kwargs): """Initialize a Squared Exponential kernel instance. Parameters ---------- length_scale : float or numpy.ndarray, optional the characteristic length-scale (or length-scales) of the phenomenon under investigation. (Defaults to 1.0) sigma_f : float, optional Signal standard deviation. (Defaults to 1.0) """ # init base class first NumpyKernel.__init__(self, **kwargs) self.length_scale = length_scale self.sigma_f = sigma_f # XXX ??? def reset(self): super(SquaredExponentialKernel, self).reset() self._length_scale = self._length_scale_orig def __repr__(self): return "%s(length_scale=%s, sigma_f=%s)" \ % (self.__class__.__name__, str(self.length_scale), str(self.sigma_f)) def _compute(self, data1, data2): """Compute kernel matrix. Parameters ---------- data1 : numpy.ndarray data data2 : numpy.ndarray data (Defaults to None) """ # weighted squared euclidean distance matrix: self.wdm2 = squared_euclidean_distance(data1, data2, weight=(self.length_scale**-2)) self._k = self.sigma_f**2 * np.exp(-0.5*self.wdm2) # XXX EO: old implementation: # self.kernel_matrix = \ # self.sigma_f * np.exp(-squared_euclidean_distance( # data1, data2, weight=0.5 / (self.length_scale ** 2))) def set_hyperparameters(self, hyperparameter): """Set hyperaparmeters from a vector. Used by model selection. """ if np.any(hyperparameter < 0): raise InvalidHyperparameterError() self.sigma_f = hyperparameter[0] self._length_scale = hyperparameter[1:] return def compute_lml_gradient(self,alphaalphaT_Kinv,data): """Compute grandient of the kernel and return the portion of log marginal likelihood gradient due to the kernel. Shorter formula. Allows vector of lengthscales (ARD). """ self.lml_gradient = [] def lml_grad(K_grad_i): # return np.trace(np.dot(alphaalphaT_Kinv,K_grad_i)) # Faster formula: np.trace(np.dot(A,B)) = (A*(B.T)).sum() return (alphaalphaT_Kinv*(K_grad_i.T)).sum() grad_sigma_f = 2.0/self.sigma_f*self.kernel_matrix self.lml_gradient.append(lml_grad(grad_sigma_f)) if np.isscalar(self.length_scale) or self.length_scale.size==1: # use the same length_scale for all dimensions: K_grad_l = self.wdm2*self.kernel_matrix*(1.0/self.length_scale) self.lml_gradient.append(lml_grad(K_grad_l)) else: # use one length_scale for each dimension: for i in range(self.length_scale.size): K_grad_i = 1.0/(self.length_scale[i]**3)*self.kernel_matrix*np.subtract.outer(data[:,i],data[:,i])**2 self.lml_gradient.append(lml_grad(K_grad_i)) pass pass self.lml_gradient = 0.5*np.array(self.lml_gradient) return self.lml_gradient def compute_lml_gradient_logscale(self,alphaalphaT_Kinv,data): """Compute grandient of the kernel and return the portion of log marginal likelihood gradient due to the kernel. Hyperparameters are in log scale which is sometimes more stable. Shorter formula. Allows vector of lengthscales (ARD). """ self.lml_gradient = [] def lml_grad(K_grad_i): # return np.trace(np.dot(alphaalphaT_Kinv,K_grad_i)) # Faster formula: np.trace(np.dot(A,B)) = (A*(B.T)).sum() return (alphaalphaT_Kinv*(K_grad_i.T)).sum() K_grad_log_sigma_f = 2.0*self.kernel_matrix self.lml_gradient.append(lml_grad(K_grad_log_sigma_f)) if np.isscalar(self.length_scale) or self.length_scale.size==1: # use the same length_scale for all dimensions: K_grad_log_l = self.wdm2*self.kernel_matrix self.lml_gradient.append(lml_grad(K_grad_log_l)) else: # use one length_scale for each dimension: for i in range(self.length_scale.size): K_grad_log_l_i = 1.0/(self.length_scale[i]**2)*self.kernel_matrix*np.subtract.outer(data[:,i],data[:,i])**2 self.lml_gradient.append(lml_grad(K_grad_log_l_i)) pass pass self.lml_gradient = 0.5*np.array(self.lml_gradient) return self.lml_gradient def _setlength_scale(self, v): """Set value of length_scale and its _orig """ self._length_scale = self._length_scale_orig = v length_scale = property(fget=lambda x:x._length_scale, fset=_setlength_scale) pass class Matern_3_2Kernel(NumpyKernel): """The Matern kernel class for the case ni=3/2 or ni=5/2. Note that it can handle a length scale for each dimension for Automtic Relevance Determination. """ def __init__(self, length_scale=1.0, sigma_f=1.0, numerator=3.0, **kwargs): """Initialize a Squared Exponential kernel instance. Parameters ---------- length_scale : float or numpy.ndarray, optional the characteristic length-scale (or length-scales) of the phenomenon under investigation. (Defaults to 1.0) sigma_f : float, optional Signal standard deviation. (Defaults to 1.0) numerator : float, optional the numerator of parameter ni of Matern covariance functions. Currently only numerator=3.0 and numerator=5.0 are implemented. (Defaults to 3.0) """ # init base class first NumpyKernel.__init__(self, **kwargs) self.length_scale = length_scale self.sigma_f = sigma_f if numerator == 3.0 or numerator == 5.0: self.numerator = numerator else: raise NotImplementedError def __repr__(self): return "%s(length_scale=%s, ni=%d/2)" \ % (self.__class__.__name__, str(self.length_scale), self.numerator) def _compute(self, data1, data2): """Compute kernel matrix. Parameters ---------- data1 : numpy.ndarray lhs data data2 : numpy.ndarray rhs data """ tmp = squared_euclidean_distance( data1, data2, weight=0.5 / (self.length_scale ** 2)) if self.numerator == 3.0: tmp = np.sqrt(tmp) self._k = \ self.sigma_f**2 * (1.0 + np.sqrt(3.0) * tmp) \ * np.exp(-np.sqrt(3.0) * tmp) elif self.numerator == 5.0: tmp2 = np.sqrt(tmp) self._k = \ self.sigma_f**2 * (1.0 + np.sqrt(5.0) * tmp2 + 5.0 / 3.0 * tmp) \ * np.exp(-np.sqrt(5.0) * tmp2) def gradient(self, data1, data2): """Compute gradient of the kernel matrix. A must for fast model selection with high-dimensional data. """ # TODO SOON # grad = ... # return grad raise NotImplementedError def set_hyperparameters(self, hyperparameter): """Set hyperaparmeters from a vector. Used by model selection. Note: 'numerator' is not considered as an hyperparameter. """ if np.any(hyperparameter < 0): raise InvalidHyperparameterError() self.sigma_f = hyperparameter[0] self.length_scale = hyperparameter[1:] return pass class Matern_5_2Kernel(Matern_3_2Kernel): """The Matern kernel class for the case ni=5/2. This kernel is just Matern_3_2Kernel(numerator=5.0). """ def __init__(self, **kwargs): """Initialize a Squared Exponential kernel instance. Parameters ---------- length_scale : float or numpy.ndarray the characteristic length-scale (or length-scales) of the phenomenon under investigation. (Defaults to 1.0) """ Matern_3_2Kernel.__init__(self, numerator=5.0, **kwargs) pass class RationalQuadraticKernel(NumpyKernel): """The Rational Quadratic (RQ) kernel class. Note that it can handle a length scale for each dimension for Automtic Relevance Determination. """ def __init__(self, length_scale=1.0, sigma_f=1.0, alpha=0.5, **kwargs): """Initialize a Squared Exponential kernel instance. Parameters ---------- length_scale : float or numpy.ndarray the characteristic length-scale (or length-scales) of the phenomenon under investigation. (Defaults to 1.0) sigma_f : float Signal standard deviation. (Defaults to 1.0) alpha : float The parameter of the RQ functions family. (Defaults to 2.0) """ # init base class first NumpyKernel.__init__(self, **kwargs) self.length_scale = length_scale self.sigma_f = sigma_f self.alpha = alpha def __repr__(self): return "%s(length_scale=%s, alpha=%f)" \ % (self.__class__.__name__, str(self.length_scale), self.alpha) def _compute(self, data1, data2): """Compute kernel matrix. Parameters ---------- data1 : numpy.ndarray lhs data data2 : numpy.ndarray rhs data """ tmp = squared_euclidean_distance( data1, data2, weight=1.0 / (self.length_scale ** 2)) self._k = \ self.sigma_f**2 * (1.0 + tmp / (2.0 * self.alpha)) ** -self.alpha def gradient(self, data1, data2): """Compute gradient of the kernel matrix. A must for fast model selection with high-dimensional data. """ # TODO SOON # grad = ... # return grad raise NotImplementedError def set_hyperparameters(self, hyperparameter): """Set hyperaparmeters from a vector. Used by model selection. Note: 'alpha' is not considered as an hyperparameter. """ if np.any(hyperparameter < 0): raise InvalidHyperparameterError() self.sigma_f = hyperparameter[0] self.length_scale = hyperparameter[1:] return pass # dictionary of avalable kernels with names as keys: kernel_dictionary = {'constant': ConstantKernel, 'linear': LinearKernel, #GeneralizedLinearKernel, 'genlinear': GeneralizedLinearKernel, 'poly': PolyKernel, 'rbf': RbfKernel, 'exponential': ExponentialKernel, 'squared exponential': SquaredExponentialKernel, 'Matern ni=3/2': Matern_3_2Kernel, 'Matern ni=5/2': Matern_5_2Kernel, 'rational quadratic': RationalQuadraticKernel} pymvpa2-2.2.0/mvpa2/kernels/sg.py000066400000000000000000000177731202542755000166050ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PyMVPA shogun-based kernels Provides interface to kernels defined in shogun toolbox. Commonly used kernels are provided with convenience classes: `LinearSGKernel`, `RbfSGKernel`, `PolySGKernel`. If you need to use some other shogun kernel, use `CustomSGKernel` to define one. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.externals import exists, versions from mvpa2.kernels.base import Kernel from mvpa2.base.param import Parameter if exists('shogun', raise_=True): import shogun.Kernel as sgk from shogun.Features import RealFeatures else: # Just to please sphinx documentation class Bogus(object): pass sgk = Bogus() sgk.LinearKernel = None sgk.GaussianKernel = None sgk.PolyKernel = None if __debug__: from mvpa2.base import debug class SGKernel(Kernel): """A Kernel object with internal representation in Shogun""" def as_sg(self): return self def as_raw_sg(self): return self._k def __array__(self): return self._k.get_kernel_matrix() @staticmethod def _data2features(data): """Converts data to shogun features""" if __debug__: debug('KRN_SG', 'Converting data of shape %s into shogun RealFeatures' % (data.shape,)) res = RealFeatures(data.astype(float).T) if __debug__: debug('KRN_SG', 'Done converting data') return res # Conversion methods def _as_raw_sg(kernel): """Converts directly to a Shogun kernel""" return sgk.CustomKernel(kernel.as_raw_np()) def _as_sg(kernel): """Converts this kernel to a Shogun-based representation""" return PrecomputedSGKernel(matrix=kernel.as_raw_np()) Kernel.add_conversion('sg', _as_sg, _as_raw_sg) class _BasicSGKernel(SGKernel): """Abstract class which can handle most shogun kernel types Subclasses can specify new kernels using the following declarations: - __kernel_cls__ = Shogun kernel class - __kp_order__ = Tuple which specifies the order of kernel params. If there is only one kernel param, this is not necessary """ __TODO__ = """ - Think either normalizer_* should not become proper Parameter. """ def __init__(self, normalizer_cls=None, normalizer_args=None, **kwargs): """ Parameters ---------- normalizer_cls : sg.Kernel.CKernelNormalizer Class to use as a normalizer for the kernel. Will be instantiated upon compute(). Only supported for shogun >= 0.6.5. By default (if left None) assigns IdentityKernelNormalizer to assure no normalization. normalizer_args : None or list If necessary, provide a list of arguments for the normalizer. """ SGKernel.__init__(self, **kwargs) if (normalizer_cls is not None) and (versions['shogun:rev'] < 3377): raise ValueError, \ "Normalizer specification is supported only for sg >= 0.6.5. " \ "Please upgrade shogun python modular bindings." if normalizer_cls is None and exists('sg ge 0.6.5'): normalizer_cls = sgk.IdentityKernelNormalizer self._normalizer_cls = normalizer_cls if normalizer_args is None: normalizer_args = [] self._normalizer_args = normalizer_args def _compute(self, d1, d2): d1 = SGKernel._data2features(d1) d2 = SGKernel._data2features(d2) try: order = self.__kp_order__ except AttributeError: # XXX may be we could use param.index to have them sorted? order = self.params.keys() kvals = [self.params[kp].value for kp in order] self._k = self.__kernel_cls__(d1, d2, *kvals) if self._normalizer_cls: self._k.set_normalizer( self._normalizer_cls(*self._normalizer_args)) class CustomSGKernel(_BasicSGKernel): """Class which can wrap any Shogun kernel and it's kernel parameters """ # TODO: rename args here for convenience? def __init__(self, kernel_cls, kernel_params=[], **kwargs): """Initialize CustomSGKernel. Parameters ---------- kernel_cls : Shogun.Kernel Class of a Kernel from Shogun kernel_params : list Each item in this list should be a tuple of (kernelparamname, value), and the order is the explicit order required by the Shogun constructor """ self.__kernel_cls__ = kernel_cls # These are normally static _BasicSGKernel.__init__(self, **kwargs) order = [] for k, v in kernel_params: self.params[k] = Parameter(default=v) order.append(k) self.__kp_order__ = tuple(order) class LinearSGKernel(_BasicSGKernel): """A basic linear kernel computed via Shogun: K(a,b) = a*b.T""" __kernel_cls__ = sgk.LinearKernel __kernel_name__ = 'linear' class RbfSGKernel(_BasicSGKernel): """Radial basis function: K(a,b) = exp(-||a-b||**2/sigma)""" __kernel_cls__ = sgk.GaussianKernel __kernel_name__ = 'rbf' sigma = Parameter(1, doc="Width/division parameter for gaussian kernel") def __init__(self, **kwargs): # Necessary for proper docstring construction _BasicSGKernel.__init__(self, **kwargs) class PolySGKernel(_BasicSGKernel): """Polynomial kernel: K(a,b) = (a*b.T + c)**degree c is 1 if and only if 'inhomogenous' is True """ __kernel_cls__ = sgk.PolyKernel __kernel_name__ = 'poly' __kp_order__ = ('degree', 'inhomogenous') degree = Parameter(2, allowedtype=int, doc="Polynomial order of the kernel") inhomogenous = Parameter(True, allowedtype=bool, doc="Whether +1 is added within the expression") if not exists('sg ge 0.6.5'): use_normalization = Parameter(False, allowedtype=bool, doc="Optional normalization") __kp_order__ = __kp_order__ + ('use_normalization',) def __init__(self, **kwargs): # Necessary for proper docstring construction _BasicSGKernel.__init__(self, **kwargs) class PrecomputedSGKernel(SGKernel): """A kernel which is precomputed from a numpy array or a Shogun kernel""" # This class can't be handled directly by BasicSGKernel because it never # should take data, and never has compute called, etc # NB: To avoid storing kernel twice, self.params.matrix = self._k once the # kernel is 'computed' def __init__(self, matrix=None, **kwargs): """Initialize PrecomputedSGKernel Parameters ---------- matrix : SGKernel or Kernel or ndarray Kernel matrix to be used """ # Convert to appropriate kernel for input if isinstance(matrix, SGKernel): k = matrix._k # Take internal shogun elif isinstance(matrix, Kernel): k = matrix.as_raw_np() # Convert to NP otherwise else: # Otherwise SG would segfault ;-) k = np.array(matrix) SGKernel.__init__(self, **kwargs) if versions['shogun:rev'] >= 4455: self._k = sgk.CustomKernel(k) else: raise RuntimeError, \ "Cannot create PrecomputedSGKernel using current version" \ " of shogun -- please upgrade" # Following lines are not effective since we should have # also provided data for CK in those earlier versions #self._k = sgk.CustomKernel() #self._k.set_full_kernel_matrix_from_full(k) def compute(self, *args, **kwargs): """'Compute' `PrecomputedSGKernel` -- no actual "computation" is done """ pass pymvpa2-2.2.0/mvpa2/mappers/000077500000000000000000000000001202542755000156075ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/mappers/__init__.py000066400000000000000000000064431202542755000177270ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Algorithms for (reversible) data transformation. Mappers are objects than can take data, either in a `Dataset`, or plain data arrays, and transform them in some specific way. There are no general limitations on what this transformation might be. it can be as simple as selecting a subset of data (e.g. `StaticFeatureSelection`) or more complex data projection (e.g. `PCAMapper`). Mapping algorithms might be unsupervised or supervised techniques, and any mapper might implement a training step that has to be run before it can be used. .. note:: Classifiers from the `mvpa2.clfs` module could also be considered mappers as well, but they all are supervised, and only provide ND->1D mapping (from data samples onto the target labels), most of the time without the possibility for reverse transformation. Modes Of Operation ================== Training All mappers can be trained by passing a training dataset to their :meth:`~mvpa2.mappers.base.Mapper.train()` method. Mappers that do not need to be trained will silently ignore this call. Mappers do not modify training datasets. Forward-mapping The mapper takes a dataset (or plain data array), transforms it, and returns a new dataset (or data array). Mappers follow a copy-on-write (COW) scheme that only changes/copies data that is modified by the mapper -- all other information will be shared by input and output dataset. If this behavior is not appropriate in a particular case, the input dataset should be copied manually and only the copy should be given to the mapper. Forward-mapping is possible via two different methods: `~mvpa2.mappers.base.Mapper.forward()` takes either a `Dataset`, or an at least two-dimensional data array. In the latter case, the first axis is assumed to separate between samples, as in a dataset. The method will return the transformation result in the same format: either a dataset, or an array with at least two dimensions. `~mvpa2.mappers.base.Mapper.forward1()` on the other hand only takes plain data arrays that have to be of the same shape as a *single* sample in the dataset that the mapper has been trained on. It will also return a plain data array. Reverse-mapping If a mapper supports reversing a transformation, dataset and plain data arrays can be reverse-mapped with the corresponding methdod. `~mvpa2.mappers.base.Mapper.reverse()` and `~mvpa2.mappers.base.Mapper.reverse1()` behave analogous to the respective forward-mapping functions, and also have the same requirement for their input data. """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.mappers') # do not pull them all -- we have mvpa2.suite for that #from mvpa2.mappers.mask import MaskMapper #from mvpa2.mappers.svd import SVDMapper #from mvpa2.mappers.boxcar import BoxcarMapper #from mvpa2.mappers.array import DenseArrayMapper if __debug__: debug('INIT', 'mvpa2.mappers end') pymvpa2-2.2.0/mvpa2/mappers/base.py000066400000000000000000000351311202542755000170760ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Basic, general purpose and meta mappers.""" __docformat__ = 'restructuredtext' import numpy as np import copy from mvpa2.base.learner import Learner from mvpa2.base.node import ChainNode from mvpa2.base.types import is_datasetlike, accepts_dataset_as_samples from mvpa2.base.dochelpers import _str, _repr_attrs from mvpa2.base.dochelpers import borrowdoc if __debug__: from mvpa2.base import debug class Mapper(Learner): """Basic mapper interface definition. :: forward ---------> IN OUT <--------/ reverse """ def __init__(self, **kwargs): """ Parameters ---------- **kwargs All additional arguments are passed to the baseclass. """ Learner.__init__(self, **kwargs) # internal settings that influence what should be done to the dataset # attributes in the default forward() and reverse() implementations. # they are passed to the Dataset.copy() method self._sa_filter = None self._fa_filter = None self._a_filter = None # # The following methods are abstract and merely define the intended # interface of a mapper and have to be implemented in derived classes. See # the docstrings of the respective methods for details about what they # should do. # def _forward_data(self, data): """Forward-map some data. This is a private method that has to be implemented in derived classes. Parameters ---------- data : anything (supported the derived class) """ raise NotImplementedError def _reverse_data(self, data): """Reverse-map some data. This is a private method that has to be implemented in derived classes. Parameters ---------- data : anything (supported the derived class) """ raise NotImplementedError # # The following methods are candidates for reimplementation in derived # classes, in cases where the provided default behavior is not appropriate. # def _forward_dataset(self, dataset): """Forward-map a dataset. This is a private method that can be reimplemented in derived classes. The default implementation forward-maps the dataset samples and returns a new dataset that is a shallow copy of the input with the mapped samples. Parameters ---------- dataset : Dataset-like """ if __debug__: debug('MAP_', "Forward-map %s-shaped samples in dataset with '%s'." % (dataset.samples.shape, self)) msamples = self._forward_data(dataset.samples) if __debug__: debug('MAP_', "Make shallow copy of to-be-forward-mapped dataset " "and assigned forward-mapped samples ({sf}a_filters: " "%s, %s, %s)." % (self._sa_filter, self._fa_filter, self._a_filter)) mds = dataset.copy(deep=False, sa=self._sa_filter, fa=self._fa_filter, a=self._a_filter) mds.samples = msamples if __debug__: debug('MAP_', "Return forward-mapped dataset.") return mds def _reverse_dataset(self, dataset): """Reverse-map a dataset. This is a private method that can be reimplemented in derived classes. The default implementation reverse-maps the dataset samples and returns a new dataset that is a shallow copy of the input with the mapped samples. Parameters ---------- dataset : Dataset-like """ if __debug__: debug('MAP_', "Reverse-map %s-shaped samples in dataset with '%s'." % (dataset.samples.shape, self)) msamples = self._reverse_data(dataset.samples) if __debug__: debug('MAP_', "Make shallow copy of to-be-reverse-mapped dataset " "and assigned reverse-mapped samples ({sf}a_filters: " "%s, %s, %s)." % (self._sa_filter, self._fa_filter, self._a_filter)) mds = dataset.copy(deep=False, sa=self._sa_filter, fa=self._fa_filter, a=self._a_filter) mds.samples = msamples return mds # # The following methods provide common functionality for all mappers # and there should be no immediate need to reimplement them # def forward(self, data): """Map data from input to output space. Parameters ---------- data : Dataset-like, (at least 2D)-array-like Typically this is a `Dataset`, but it might also be a plain data array, or even something completely different(TM) that is supported by a subclass' implementation. If such an object is Dataset-like it is handled by a dedicated method that also transforms dataset attributes if necessary. If an array-like is passed, it has to be at least two-dimensional, with the first axis separating samples or observations. For single samples `forward1()` might be more appropriate. """ if is_datasetlike(data): if __debug__: debug('MAP', "Forward-map %s-shaped dataset through '%s'." % (data.shape, self)) return self._forward_dataset(data) else: if hasattr(data, 'ndim') and data.ndim < 2: raise ValueError( 'Mapper.forward() only support mapping of data with ' 'at least two dimensions, where the first axis ' 'separates samples/observations. Consider using ' 'Mapper.forward1() instead.') if __debug__: debug('MAP', "Forward-map data through '%s'." % (self)) return self._forward_data(data) def forward1(self, data): """Wrapper method to map single samples. It is basically identical to `forward()`, but also accepts one-dimensional arguments. The map whole dataset this method cannot be used. but `forward()` handles them. """ if isinstance(data, np.ndarray): data = data[np.newaxis] else: data = np.array([data]) if __debug__: debug('MAP', "Forward-map single %s-shaped sample through '%s'." % (data.shape[1:], self)) return self.forward(data)[0] def reverse(self, data): """Reverse-map data from output back into input space. Parameters ---------- data : Dataset-like, anything Typically this is a `Dataset`, but it might also be a plain data array, or even something completely different(TM) that is supported by a subclass' implementation. If such an object is Dataset-like it is handled by a dedicated method that also transforms dataset attributes if necessary. """ if is_datasetlike(data): if __debug__: debug('MAP', "Reverse-map %s-shaped dataset through '%s'." % (data.shape, self)) return self._reverse_dataset(data) else: if __debug__: debug('MAP', "Reverse-map data through '%s'." % (self)) return self._reverse_data(data) def reverse1(self, data): """Wrapper method to map single samples. It is basically identical to `reverse()`, but accepts one-dimensional arguments. To map whole dataset this method cannot be used. but `reverse()` handles them. """ if isinstance(data, np.ndarray): data = data[np.newaxis] else: data = np.array([data]) if __debug__: debug('MAP', "Reverse-map single %s-shaped sample through '%s'." % (data.shape[1:], self)) mapped = self.reverse(data)[0] if __debug__: debug('MAP', "Mapped single %s-shaped sample to %s." % (data.shape[1:], mapped.shape)) return mapped def _call(self, ds): return self.forward(ds) class ChainMapper(ChainNode): """Class that amends ChainNode with a mapper-like interface. ChainMapper supports sequential training of a mapper chain, as well as reverse-mapping and mapping of single samples. """ def forward(self, ds): return self(ds) def forward1(self, data): """Forward data or datasets through the chain. See `Mapper` for more information. """ mp = data for m in self: if __debug__: debug('MAP', "Forwarding single input (%s) though '%s'." % (mp.shape, str(m))) mp = m.forward1(mp) return mp def reverse(self, data): """Reverse-maps data or datasets through the chain (backwards). See `Mapper` for more information. """ mp = data for m in reversed(self): # we ignore mapper that do not have reverse mapping implemented # (e.g. detrending). That might cause problems if ignoring the # mapper make the data incompatible input for the next mapper in # the chain. If that pops up, we have to think about a proper # solution. try: if __debug__: debug('MAP', "Reversing %s-shaped input though '%s'." % (mp.shape, str(m))) mp = m.reverse(mp) except NotImplementedError: if __debug__: debug('MAP', "Ignoring %s on reverse mapping." % m) return mp def reverse1(self, data): """Reverse-maps data or datasets through the chain (backwards). See `Mapper` for more information. """ mp = data for i, m in enumerate(reversed(self)): # we ignore mapper that do not have reverse mapping implemented # (e.g. detrending). That might cause problems if ignoring the # mapper make the data incompatible input for the next mapper in # the chain. If that pops up, we have to think about a proper # solution. try: if __debug__: debug('MAP', "Reversing single %s-shaped input though chain node '%s'." % (mp.shape, str(m))) mp = m.reverse1(mp) except NotImplementedError: if __debug__: debug('MAP', "Ignoring %s on reverse mapping." % m) except ValueError: if __debug__: debug('MAP', "Failed to reverse-map through chain at '%s'. Maybe " "previous mapper return multiple samples. Trying to " "switch to reverse() for the remainder of the chain." % str(m)) mp = self[:-1*i].reverse(mp) return mp return mp def train(self, dataset): """Train the mapper chain sequentially. The training dataset is used to train the first mapper. Afterwards it is forward-mapped by this (now trained) mapper and the transformed dataset and then used to train the next mapper. This procedure is done till all mappers are trained. Parameters ---------- dataset: `Dataset` """ nmappers = len(self) - 1 tdata = dataset for i, mapper in enumerate(self): if __debug__: debug('MAP', "Training child mapper (%i/%i) %s with %s-shaped input." % (i + 1, nmappers + 1, str(mapper), tdata.shape)) mapper.train(tdata) # forward through all but the last mapper if i < nmappers: tdata = mapper.forward(tdata) def untrain(self): """Untrain all embedded mappers.""" for m in self: m.untrain() def __str__(self): return super(ChainMapper, self).__str__().replace('Mapper', '') class CombinedMapper(Mapper): """Mapper to pass a dataset on to a set of mappers and combine there output. Output combination or aggregation is currently done by hstacking or vstacking the resulting datasets. """ def __init__(self, mappers, combine_axis, **kwargs): """ Parameters ---------- mappers : list combine_axis : ['h', 'v'] Examples -------- >>> import numpy as np >>> from mvpa2.mappers.base import CombinedMapper >>> from mvpa2.featsel.base import StaticFeatureSelection >>> from mvpa2.datasets import Dataset >>> mp = CombinedMapper([StaticFeatureSelection([1,2]), ... StaticFeatureSelection([2,3])], ... combine_axis='h') >>> mp.is_trained = True >>> ds = Dataset(np.arange(12).reshape(3,4)) >>> out = mp(ds) >>> out.samples array([[ 1, 2, 2, 3], [ 5, 6, 6, 7], [ 9, 10, 10, 11]]) """ Mapper.__init__(self, **kwargs) self._mappers = mappers self._combine_axis = combine_axis @borrowdoc(Mapper) def __repr__(self, prefixes=[]): return super(CombinedMapper, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['mappers', 'combine_axis'])) def __str__(self): return _str(self) def _train(self, ds): for mapper in self._mappers: mapper.train(ds) def _untrain(self): for mapper in self._mappers: mapper.untrain() @borrowdoc(Mapper) def _forward_dataset(self, ds): from mvpa2.datasets import hstack, vstack mapped_ds = [mapper.forward(ds) for mapper in self._mappers] stacker = {'h': hstack, 'v': vstack} out = stacker[self._combine_axis](mapped_ds) return out mappers = property(fget=lambda self:self._mappers) pymvpa2-2.2.0/mvpa2/mappers/boxcar.py000066400000000000000000000223141202542755000174410ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Data mapper""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.mappers.base import Mapper from mvpa2.clfs.base import accepts_dataset_as_samples from mvpa2.base.dochelpers import _str if __debug__: from mvpa2.base import debug class BoxcarMapper(Mapper): """Mapper to combine multiple samples into a single sample. Notes ----- This mapper is somewhat unconventional since it doesn't preserve number of samples (ie the size of 0-th dimension). """ # TODO: extend with the possibility to provide real onset vectors and a # samples attribute that is used to determine the actual sample that # is matching a particular onset. The difference between target onset # and sample could be stored as an additional sample attribute. Some # utility functionality (outside BoxcarMapper) could be used to merge # arbitrary sample attributes into the samples matrix (with # appropriate mapper adjustment, e.g. CombinedMapper). def __init__(self, startpoints, boxlength, offset=0, **kwargs): """ Parameters ---------- startpoints : sequence Index values along the first axis of 'data'. boxlength : int The number of elements after 'startpoint' along the first axis of 'data' to be considered for the boxcar. offset : int The offset between the provided starting point and the actual start of the boxcar. """ Mapper.__init__(self, **kwargs) self._outshape = None startpoints = np.asanyarray(startpoints) if np.issubdtype(startpoints.dtype, 'i'): self.startpoints = startpoints else: if __debug__: debug('MAP', "Boxcar: obtained startpoints are not of int type." " Rounding and changing dtype") self.startpoints = np.asanyarray(np.round(startpoints), dtype='i') # Sanity checks if boxlength < 1: raise ValueError, "Boxlength lower than 1 makes no sense." if boxlength - int(boxlength) != 0: raise ValueError, "boxlength must be an integer value." self.boxlength = int(boxlength) self.offset = offset self.__selectors = None # build a list of list where each sublist contains the indexes of to be # averaged data elements self.__selectors = [ slice(i + offset, i + offset + boxlength) \ for i in startpoints ] def __reduce__(self): # python < 2.6 cannot copy slices, we will use the constructor the get # them back and additionally reapply the stae of the object (except for # the bad bad slices) state = self.__dict__.copy() badguy = '_%s__selectors' % self.__class__.__name__ if badguy in state: del state[badguy] return (self.__class__, (self.startpoints, self.boxlength, self.offset), state) @accepts_dataset_as_samples def _train(self, data): startpoints = self.startpoints boxlength = self.boxlength if __debug__: offset = self.offset for sp in startpoints: if ( sp + offset + boxlength - 1 > len(data)-1 ) \ or ( sp + offset < 0 ): raise ValueError('Illegal box (start: %i, offset: %i, ' 'length: %i) with total input sample being %i.' \ % (sp, offset, boxlength, len(data))) self._outshape = (len(startpoints), boxlength) + data.shape[1:] def __repr__(self): s = super(BoxcarMapper, self).__repr__() return s.replace("(", "(boxlength=%d, offset=%d, startpoints=%s, " % (self.boxlength, self.offset, str(self.startpoints)), 1) def __str__(self): return _str(self, bl=self.boxlength) def forward1(self, data): # if we have a single 'raw' sample (not a boxcar) # extend it to cover the full box -- useful if one # wants to forward map a mask in raw dataspace (e.g. # fMRI ROI or channel map) into an appropriate mask vector if not self._outshape: raise RuntimeError("BoxcarMapper needs to be trained before " ".forward1() can be used.") # first axes need to match if not data.shape[0] == self._outshape[2]: raise ValueError("Data shape %s does not match sample shape %s." % (data.shape[0], self._outshape[2])) return np.vstack([data[np.newaxis]] * self.boxlength) def _forward_data(self, data): """Project an ND matrix into N+1D matrix This method also handles the special of forward mapping a single 'raw' sample. Such a sample is extended (by concatenating clones of itself) to cover a full boxcar. This functionality is only availably after a full data array has been forward mapped once. Returns ------- array: (#startpoint, ...) """ # NOTE: _forward_dataset() relies on the assumption that the following # also works with 1D arrays and still yields sane results return np.vstack([data[box][np.newaxis] for box in self.__selectors]) def _forward_dataset(self, dataset): msamp = self._forward_data(dataset.samples) # make a shallow copy of the dataset, but excluding all sample # and feature attributes, since they need to be transformed anyway mds = dataset.copy(deep=False, sa=[], fa=[]) # assign the new samples and adjust the length check of the collections mds.samples = msamp mds.sa.set_length_check(len(mds)) mds.fa.set_length_check(mds.nfeatures) # map old feature attributes -- which simply get broadcasted along the # boxcar for k in dataset.fa: mds.fa[k] = self.forward1(dataset.fa[k].value) # map old sample attributes -- which simply get stacked into one for all # boxcar elements/samples for k in dataset.sa: # using _forward_data() instead of forward(), since we know that # this implementation can actually deal with 1D-arrays mds.sa[k] = self._forward_data(dataset.sa[k].value) # create the box offset attribute if space name is given if self.get_space(): mds.fa[self.get_space() + '_offsetidx'] = np.arange(self.boxlength, dtype='int') mds.sa[self.get_space() + '_onsetidx'] = self.startpoints.copy() return mds def reverse1(self, data): if __debug__: if not data.shape == self._outshape[1:]: raise ValueError("BoxcarMapper has not been train to " "reverse-map %s-shaped data, but %s." % (data.shape, self._outshape[1:])) # reimplemented since it is really only that return data def _reverse_data(self, data): if len(data.shape) < 2: # this is not something that this mapper created -- let's broadcast # its elements and hope that it would work return np.repeat(data, self.boxlength) # stack them all together -- this will cause overlapping boxcars to # result in multiple identical samples if not data.shape[1] == self.boxlength: # stacking doesn't make sense, since we got something strange raise ValueError("%s cannot reverse-map, since the number of " "elements along the second axis (%i) does not " "match the boxcar-length (%i)." % (self.__class__.__name__, data.shape[1], self.boxlength)) return np.concatenate(data) def _reverse_dataset(self, dataset): msamp = self._reverse_data(dataset.samples) # make a shallow copy of the dataset, but excluding all sample # and feature attributes, since they need to be transformed anyway mds = dataset.copy(deep=False, sa=[], fa=[]) mds.samples = msamp mds.sa.set_length_check(len(mds)) mds.fa.set_length_check(mds.nfeatures) # map old feature attributes -- which simply is taken the first one # and kill the inspace attribute, since it inspace = self.get_space() for k in dataset.fa: if inspace is None or k != (inspace + '_offsetidx'): mds.fa[k] = dataset.fa[k].value[0] # reverse-map old sample attributes for k in dataset.sa: if inspace is None or k != (inspace + '_onsetidx'): mds.sa[k] = self._reverse_data(dataset.sa[k].value) return mds pymvpa2-2.2.0/mvpa2/mappers/detrend.py000066400000000000000000000352141202542755000176130ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Mapper for data detrending.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.types import is_sequence_type from mvpa2.base import externals if externals.exists('scipy', raise_=True): # if we construct the polynomials ourselves, we wouldn't need scipy here from scipy.special import legendre def legendre_(n, x): """Helper to avoid problems with scipy 0.8.0 returning inf for -1 Scipy 0.8.0 (and possibly later) has regression of reporting 'inf's for negative boundary. Lets guard against it for now """ leg = legendre(n) r = leg(x) infs = np.isinf(r) if np.any(infs): r[infs] = leg(x[infs] + 1e-10) # offset to try to overcome problems return r from mvpa2.base.dochelpers import _str, borrowkwargs from mvpa2.mappers.base import Mapper class PolyDetrendMapper(Mapper): """Mapper for regression-based removal of polynomial trends. Noteworthy features are the possibility for chunk-wise detrending, optional regressors, and the ability to use positional information about the samples from the dataset. Any sample attribute from the to be mapped dataset can be used to define `chunks` that shall be detrended separately. The number of chunks is determined from the number of unique values of the attribute and all samples with the same value are considered to be in the same chunk. It is possible to provide a list of additional sample attribute names that will be used as confound regressors during detrending. This, for example, allows to use fMRI motion correction parameters to be considered. Finally, it is possible to use positional information about the dataset samples for the detrending. This is useful, for example, if the samples in the dataset are not equally spaced out over the acquisition time-window. In that case an actually linear trend in the data would be distorted and not properly removed. By setting the `inspace` argument to the name of a samples attribute that carries this information, the mapper will take this into account and shift the polynomials accordingly. If `inspace` is given, but the dataset doesn't contain such an attribute evenly spaced coordinates are generated and this information is stored in the mapped dataset. Notes ----- The mapper only support mapping of datasets, not plain data. Moreover, reverse mapping, or subsequent forward-mapping of partial datasets are currently not implemented. Examples -------- >>> from mvpa2.datasets import dataset_wizard >>> from mvpa2.mappers.detrend import PolyDetrendMapper >>> samples = np.array([[1.0, 2, 3, 3, 2, 1], ... [-2.0, -4, -6, -6, -4, -2]]).T >>> chunks = [0, 0, 0, 1, 1, 1] >>> ds = dataset_wizard(samples, chunks=chunks) >>> dm = PolyDetrendMapper(chunks_attr='chunks', polyord=1) >>> # the mapper will be auto-trained upon first use >>> mds = dm.forward(ds) >>> # total removal all all (chunk-wise) linear trends >>> np.sum(np.abs(mds)) < 0.00001 True """ def __init__(self, polyord=1, chunks_attr=None, opt_regs=None, **kwargs): """ Parameters ---------- polyord : int or list, optional Order of the Legendre polynomial to remove from the data. This will remove every polynomial up to and including the provided value. For example, 3 will remove 0th, 1st, 2nd, and 3rd order polynomials from the data. np.B.: The 0th polynomial is the baseline shift, the 1st is the linear trend. If you specify a single int and `chunks_attr` is not None, then this value is used for each chunk. You can also specify a different polyord value for each chunk by providing a list or ndarray of polyord values the length of the number of chunks. chunks_attr : str or None If None, the whole dataset is detrended at once. Otherwise, the given samples attribute (given by its name) is used to define chunks of the dataset that are processed individually. In that case, all the samples within a chunk should be in contiguous order and the chunks should be sorted in order from low to high -- unless the dataset provides information about the coordinate of each sample in the space that should be spanned be the polynomials (see `inspace` argument). opt_regs : list or None Optional list of sample attribute names that should be used as additional regressors. One example would be to regress out motion parameters. space : str or None If not None, a samples attribute of the same name is added to the mapped dataset that stores the coordinates of each sample in the space that is spanned by the polynomials. If an attribute of that name is already present in the input dataset its values are interpreted as sample coordinates in the space that should be spanned by the polynomials. """ self.__chunks_attr = chunks_attr self.__polyord = polyord self.__opt_reg = opt_regs # things that come from train() self._polycoords = None self._regs = None # secret switch to perform in-place detrending self._secret_inplace_detrend = False # need to init last to prevent base class puking Mapper.__init__(self, **kwargs) def __repr__(self): s = super(PolyDetrendMapper, self).__repr__() return s.replace("(", "(polyord=%i, chunks_attr=%s, opt_regs=%s, " % (self.__polyord, repr(self.__chunks_attr), repr(self.__opt_reg)), 1) def __str__(self): return _str(self, ord=self.__polyord) def _scale_array(self, a): # scale an array into the interval [-1,1] using its min and max values # as input range return a / ((a.max() - a.min()) / 2) - 1 def _get_polycoords(self, ds, chunk_slicer): """Compute human-readable and scaled polycoords. Parameters ---------- ds : dataset chunk_slicer : boolean array True elements indicate samples selected for detrending. Returns ------- tuple (real-world polycoords, scaled polycoords into [-1,1]) """ inspace = self.get_space() if chunk_slicer is None: nsamples = len(ds) else: nsamples = chunk_slicer.sum() # if we don't have to take care of an inspace thing are easy if inspace is None: polycoords_scaled = np.linspace(-1, 1, nsamples) return None, polycoords_scaled else: # there is interest in the inspace, but do we have information, or # just want to store it later on if inspace in ds.sa: # we have info if chunk_slicer is None: chunk_slicer = slice(None) polycoords = ds.sa[inspace].value[chunk_slicer] else: # no info in the dataset, just be nice and generate some # meaningful polycoords polycoords = np.arange(nsamples) return polycoords, self._scale_array(polycoords.astype('float')) def _train(self, ds): # local binding chunks_attr = self.__chunks_attr polyord = self.__polyord opt_reg = self.__opt_reg inspace = self.get_space() self._polycoords = None # global detrending is desired if chunks_attr is None: # consider the entire dataset reg = [] # create the timespan self._polycoords, polycoords_scaled = self._get_polycoords(ds, None) for n in range(polyord + 1): reg.append(legendre_(n, polycoords_scaled)[:, np.newaxis]) # chunk-wise detrending is desired else: # get the unique chunks uchunks = ds.sa[chunks_attr].unique # Process the polyord to be a list with length of the number of # chunks if not is_sequence_type(polyord): # repeat to be proper length polyord = [polyord] * len(uchunks) elif not chunks_attr is None and len(polyord) != len(uchunks): raise ValueError("If you specify a sequence of polyord values " "they sequence length must match the " "number of unique chunks in the dataset.") # loop over each chunk reg = [] update_polycoords = True # if the dataset know about the inspace we can store the # polycoords right away if not inspace is None and inspace in ds.sa: self._polycoords = ds.sa[inspace].value update_polycoords = False else: # otherwise we prepare and empty array that is going to be # filled below -- we know that those polycoords are going to # be ints self._polycoords = np.empty(len(ds), dtype='int') for n, chunk in enumerate(uchunks): # get the indices for that chunk cinds = ds.sa[chunks_attr].value == chunk # create the timespan polycoords, polycoords_scaled = self._get_polycoords(ds, cinds) if update_polycoords and not polycoords is None: self._polycoords[cinds] = polycoords # create each polyord with the value for that chunk for n in range(polyord[n] + 1): newreg = np.zeros((len(ds), 1)) newreg[cinds, 0] = legendre_(n, polycoords_scaled) reg.append(newreg) # if we don't handle in inspace, there is no need to store polycoords if inspace is None: self._polycoords = None # see if add in optional regs if not opt_reg is None: # add in the optional regressors, too for oreg in opt_reg: reg.append(ds.sa[oreg].value[np.newaxis].T) # combine the regs (time x reg) self._regs = np.hstack(reg) def _forward_dataset(self, ds): # auto-train the mapper if not yet done if self._regs is None: self.train(ds) if self._secret_inplace_detrend: mds = ds else: # shallow copy to put the new stuff in mds = ds.copy(deep=False) # local binding regs = self._regs inspace = self.get_space() polycoords = self._polycoords # is it possible to map that dataset? if inspace is None and len(regs) != len(ds): raise ValueError("Cannot detrend the dataset, since it neither " "provides location information of its samples " "in the space spanned by the polynomials, " "nor does it match the number of samples this " "this mapper has been trained on. (got: %i " " and was trained on %i)." % (len(ds), len(regs))) # do we have to handle the polynomial space somehow? if not inspace is None: if inspace in ds.sa: space_coords = ds.sa[inspace].value # this dataset has some notion about our polyspace # we need to put the right regressor values for its samples # let's first see whether the coords are identical to the # trained ones (that should be the common case and nothing needs # to be done # otherwise look whether we can find the right regressors if not np.all(space_coords == polycoords): # to make the stuff below work, we'd need to store chunk # info too, otherwise we cannot determine the correct # regressor rows raise NotImplementedError # determine the regressor rows that match the samples reg_idx = [np.argwhere(polycoords == c).flatten()[0] for c in space_coords] # slice the regressors accordingly regs = regs[reg_idx] else: # the input dataset knows nothing about the polyspace # let's put that information into the output dataset mds.sa[inspace] = self._polycoords # regression for each feature fit = np.linalg.lstsq(regs, ds.samples) # actually we are only interested in the solution # res[0] is (nregr x nfeatures) y = fit[0] # remove all and keep only the residuals if self._secret_inplace_detrend: # if we are in evil mode do evil # cast the data to float, since in-place operations below do not # upcast! if np.issubdtype(mds.samples.dtype, np.integer): mds.samples = mds.samples.astype('float') mds.samples -= np.dot(regs, y) else: # important to assign to ensure COW behavior mds.samples = ds.samples - np.dot(regs, y) return mds def _forward_data(self, data): raise RuntimeError("%s cannot map plain data." % self.__class__.__name__) @borrowkwargs(PolyDetrendMapper, '__init__') def poly_detrend(ds, **kwargs): """In-place polynomial detrending. This function behaves identical to the `PolyDetrendMapper`. The only difference is that the actual detrending is done in-place -- potentially causing a significant reduction of the memory demands. Parameters ---------- ds : Dataset The dataset that will be detrended in-place. **kwargs For all other arguments, please see the documentation of PolyDetrendMapper. """ dm = PolyDetrendMapper(**kwargs) dm._secret_inplace_detrend = True # map mapped = dm.forward(ds) # and append the mapper to the dataset mapped._append_mapper(dm) pymvpa2-2.2.0/mvpa2/mappers/filters.py000066400000000000000000000146211202542755000176350ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Filtering mappers.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals if externals.exists('scipy', raise_=True): from scipy.signal import resample from mvpa2.base.dochelpers import _str, borrowkwargs from mvpa2.mappers.base import Mapper from mvpa2.datasets import Dataset from mvpa2.base.dataset import vstack from mvpa2.generators.splitters import Splitter class FFTResampleMapper(Mapper): """Mapper for FFT-based resampling. Can do per-chunk. Supports positional information of samples and outputs them as sample attribute. however, only meaningful for data with equally spaced sampling points. Pretty much Mapper frontend for scipy.signal.resample """ def __init__(self, num, window=None, chunks_attr=None, position_attr=None, attr_strategy='remove', **kwargs): """ Parameters ---------- num : int Number of output samples. If operating on chunks, this is the number of samples per chunk. window : str or float or tuple Passed to scipy.signal.resample chunks_attr : str or None If not None, this samples attribute defines chunks that will be resampled individually. position_attr : str A samples attribute with positional information that is passed to scipy.signal.resample. If not None, the output dataset will also contain a sample attribute of this name, with updated positional information (this is, however, only meaningful for equally spaced samples). attr_strategy : {'remove', 'sample', 'resample'} Strategy to process sample attributes during mapping. 'remove' will cause all sample attributes to be removed. 'sample' will pick orginal attribute values matching the new resampling frequency (e.g. every 10th), and 'resample' will also apply the actual data resampling procedure to the attributes as well (which might not be possible, e.g. for literal attributes). """ Mapper.__init__(self, **kwargs) self.__num = num self.__window_args = window self.__chunks_attr = chunks_attr self.__position_attr = position_attr self.__attr_strategy = attr_strategy def __repr__(self): s = super(FFTResamplemapper, self).__repr__() return s.replace("(", "(chunks_attr=%s, " % (repr(self.__chunks_attr),), 1) def __str__(self): return _str(self, chunks_attr=self.__chunks_attr) def _forward_data(self, data): # we cannot have position information without a dataset return resample(data, self.__num, t=None, window=self.__window_args) def _forward_dataset(self, ds): if self.__chunks_attr is None: return self._forward_dataset_helper(ds) else: # strip down dataset to speedup local processing if self.__attr_strategy == 'remove': keep_sa = [] else: keep_sa = None proc_ds = ds.copy(deep=False, sa=keep_sa, fa=[], a=[]) # process all chunks individually # use a customsplitter to speed-up splitting spl = Splitter(self.__chunks_attr) dses = [self._forward_dataset_helper(d) for d in spl.generate(proc_ds)] # and merge them again mds = vstack(dses) # put back attributes mds.fa.update(ds.fa) mds.a.update(ds.a) return mds def _forward_dataset_helper(self, ds): # local binding num = self.__num pos = None if not self.__position_attr is None: # we know something about sample position pos = ds.sa[self.__position_attr].value rsamples, pos = resample(ds.samples, self.__num, t=pos, window=self.__window_args) else: # we know nothing about samples position rsamples = resample(ds.samples, self.__num, t=None, window=self.__window_args) # new dataset that reuses that feature and dataset attributes of the # source mds = Dataset(rsamples, fa=ds.fa, a=ds.a) # the tricky part is what to do with the samples attributes, since their # number has changes if self.__attr_strategy == 'remove': # nothing to be done pass elif self.__attr_strategy == 'sample': step = int(len(ds) / num) sa = dict([(k, ds.sa[k].value[0::step][:num]) for k in ds.sa]) mds.sa.update(sa) elif self.__attr_strategy == 'resample': # resample the attributes themselves sa = {} for k in ds.sa: v = ds.sa[k].value if pos is None: sa[k] = resample(v, self.__num, t=None, window=self.__window_args) else: if k == self.__position_attr: # position attr will be handled separately at the end continue sa[k] = resample(v, self.__num, t=pos, window=self.__window_args)[0] # inject them all mds.sa.update(sa) else: raise ValueError("Unkown attribute handling strategy '%s'." % self.__attr_strategy) if not pos is None: # we got the new sample positions and can store them mds.sa[self.__position_attr] = pos return mds @borrowkwargs(FFTResampleMapper, '__init__') def fft_resample(ds, num, **kwargs): """FFT-based resampling. Parameters ---------- ds : Dataset **kwargs For all other arguments, please see the documentation of FFTResampleMapper. """ dm = FFTResampleMapper(num, **kwargs) return dm.forward(ds) pymvpa2-2.2.0/mvpa2/mappers/flatten.py000066400000000000000000000224731202542755000176260ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Data mapper""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.dochelpers import _str, _repr_attrs from mvpa2.mappers.base import Mapper, accepts_dataset_as_samples, \ ChainMapper from mvpa2.featsel.base import StaticFeatureSelection from mvpa2.misc.support import is_in_volume if __debug__: from mvpa2.base import debug class FlattenMapper(Mapper): """Reshaping mapper that flattens multidimensional arrays into 1D vectors. This mapper performs relatively cheap reshaping of arrays from ND into 1D and back upon reverse-mapping. The mapper has to be trained with a data array or dataset that has the first axis as the samples-separating dimension. Mapper training will set the particular multidimensional shape the mapper is transforming into 1D vector samples. The setting remains in place until the mapper is retrained. Notes ----- At present this mapper is only designed (and tested) to work with C-ordered arrays. """ def __init__(self, shape=None, maxdims=None, **kwargs): """ Parameters ---------- shape : tuple The shape of a single sample. If this argument is given the mapper is going to be fully configured and no training is necessary anymore. maxdims : int or None The maximum number of dimensions to flatten (starting with the first). If None, all axes will be flattened. """ # by default auto train kwargs['auto_train'] = kwargs.get('auto_train', True) Mapper.__init__(self, **kwargs) self.__origshape = None # pylint pacifier self.__maxdims = maxdims if not shape is None: self._train_with_shape(shape) def __repr__(self, prefixes=[]): return super(FlattenMapper, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['shape', 'maxdims'])) def __str__(self): return _str(self) @accepts_dataset_as_samples def _train(self, samples): """Train the mapper. Parameters ---------- samples : array-like The first axis has to represent the samples-separating dimension. In case of a 1D-array each element is considered to be an individual element and *not* the whole array as a single sample! """ self._train_with_shape(samples.shape[1:]) def _train_with_shape(self, shape): """Configure the mapper with a particular sample shape. """ # infer the sample shape from the data under the assumption that the # first axis is the samples-separating dimension self.__origshape = shape # flag the mapper as trained self._set_trained() def _forward_data(self, data): # this method always gets data where the first axis is the samples axis! # local binding nsamples = data.shape[0] sshape = data.shape[1:] oshape = self.__origshape if oshape is None: raise RuntimeError("FlattenMapper needs to be trained before it " "can be used.") # at least the first feature axis has to match match if oshape[0] != sshape[0]: raise ValueError("FlattenMapper has not been trained for data " "shape '%s' (known only '%s')." % (str(sshape), str(oshape))) ## input matches the shape of a single sample #if sshape == oshape: # return data.reshape(nsamples, -1) ## the first part of the shape matches (e.g. some additional axes present) #elif sshape[:len(oshape)] == oshape: if not self.__maxdims is None: maxdim = min(len(oshape), self.__maxdims) else: maxdim = len(oshape) # flatten the pieces the mapper knows about and preserve the rest return data.reshape((nsamples, -1) + sshape[maxdim:]) def _forward_dataset(self, dataset): # invoke super class _forward_dataset, this calls, _forward_dataset # and this calls _forward_data in this class mds = super(FlattenMapper, self)._forward_dataset(dataset) # attribute collection needs to have a new length check mds.fa.set_length_check(mds.nfeatures) # we need to duplicate all existing feature attribute, as each original # feature is now spread across the new feature axis # take all "additional" axes after the actual feature axis and count # elements a sample -- if not axis exists this will be 1 for k in dataset.fa: if __debug__: debug('MAP_', "Forward-mapping fa '%s'." % k) attr = dataset.fa[k].value # the maximmum number of axis to flatten in the attr if not self.__maxdims is None: maxdim = min(len(self.__origshape), self.__maxdims) else: maxdim = len(self.__origshape) multiplier = mds.nfeatures \ / np.prod(attr.shape[:maxdim]) if __debug__: debug('MAP_', "Broadcasting fa '%s' %s %d times" % (k, attr.shape, multiplier)) # broadcast as many times as necessary to get 'matching dimensions' bced = np.repeat(attr, multiplier, axis=0) # now reshape as many dimensions as the mapper knows about mds.fa[k] = bced.reshape((-1,) + bced.shape[maxdim:]) # if there is no inspace return immediately if self.get_space() is None: return mds # otherwise create the coordinates as feature attributes else: mds.fa[self.get_space()] = \ list(np.ndindex(dataset.samples[0].shape)) return mds def _reverse_data(self, data): # this method always gets data where the first axis is the samples axis! # local binding nsamples = data.shape[0] sshape = data.shape[1:] oshape = self.__origshape return data.reshape((nsamples,) + oshape + sshape[1:]) def _reverse_dataset(self, dataset): # invoke super class _reverse_dataset, this calls, _reverse_dataset # and this calles _reverse_data in this class mds = super(FlattenMapper, self)._reverse_dataset(dataset) # attribute collection needs to have a new length check mds.fa.set_length_check(mds.nfeatures) # now unflatten all feature attributes inspace = self.get_space() for k in mds.fa: # reverse map all attributes, but not the inspace indices, since the # did not come through this mapper and make not sense in inspace if k != inspace: mds.fa[k] = self.reverse1(mds.fa[k].value) # wipe out the inspace attribute -- needs to be done after the loop to # not change the size of the dict if inspace and inspace in mds.fa: del mds.fa[inspace] return mds shape = property(fget=lambda self:self.__origshape) maxdims = property(fget=lambda self:self.__maxdims) def mask_mapper(mask=None, shape=None, space=None): """Factory method to create a chain of Flatten+StaticFeatureSelection Mappers Parameters ---------- mask : None or array an array in the original dataspace and its nonzero elements are used to define the features included in the dataset. Alternatively, the `shape` argument can be used to define the array dimensions. shape : None or tuple The shape of the array to be mapped. If `shape` is provided instead of `mask`, a full mask (all True) of the desired shape is constructed. If `shape` is specified in addition to `mask`, the provided mask is extended to have the same number of dimensions. inspace Provided to `FlattenMapper` """ if mask is None: if shape is None: raise ValueError, \ "Either `shape` or `mask` have to be specified." else: # make full dataspace mask if nothing else is provided mask = np.ones(shape, dtype='bool') else: if not shape is None: # expand mask to span all dimensions but first one # necessary e.g. if only one slice from timeseries of volumes is # requested. mask = np.array(mask, copy=False, subok=True, ndmin=len(shape)) # check for compatibility if not shape == mask.shape: raise ValueError, \ "The mask dataspace shape %s is not " \ "compatible with the provided shape %s." \ % (mask.shape, shape) fm = FlattenMapper(shape=mask.shape, space=space) flatmask = fm.forward1(mask) mapper = ChainMapper([fm, StaticFeatureSelection( flatmask, dshape=flatmask.shape, oshape=(len(flatmask.nonzero()[0]),))]) return mapper pymvpa2-2.2.0/mvpa2/mappers/fx.py000066400000000000000000000436261202542755000166110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Transform data by applying a function along samples or feature axis.""" __docformat__ = 'restructuredtext' import numpy as np import inspect from mvpa2.base import warning from mvpa2.base.node import Node from mvpa2.datasets import Dataset from mvpa2.base.dochelpers import _str, _repr_attrs from mvpa2.mappers.base import Mapper from mvpa2.misc.support import array_whereequal from mvpa2.base.dochelpers import borrowdoc from mvpa2.misc.transformers import sum_of_abs, max_of_abs if __debug__: from mvpa2.base import debug class FxMapper(Mapper): """Apply a custom transformation to (groups of) samples or features. """ is_trained = True """Indicate that this mapper is always trained.""" def __init__(self, axis, fx, fxargs=None, uattrs=None, attrfx='merge'): """ Parameters ---------- axis : {'samples', 'features'} fx : callable fxargs : tuple uattrs : list List of attribute names to consider. All possible combinations of unique elements of these attributes are used to determine the sample groups to operate on. attrfx : callable Functor that is called with each sample attribute elements matching the respective samples group. By default the unique value is determined. If the content of the attribute is not uniform for a samples group a unique string representation is created. If `None`, attributes are not altered. """ Mapper.__init__(self) if not axis in ['samples', 'features']: raise ValueError("%s `axis` arguments can only be 'samples' or " "'features' (got: '%s')." % repr(axis)) self.__axis = axis self.__uattrs = uattrs self.__fx = fx if not fxargs is None: self.__fxargs = fxargs else: self.__fxargs = () if attrfx == 'merge': self.__attrfx = _uniquemerge2literal else: self.__attrfx = attrfx @borrowdoc(Mapper) def __repr__(self, prefixes=[]): return super(FxMapper, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['axis', 'fx', 'uattrs']) + _repr_attrs(self, ['fxargs'], default=()) + _repr_attrs(self, ['attrfx'], default='merge') ) def __str__(self): return _str(self, fx=self.__fx.__name__) def _train(self, ds): # right now it needs no training, if anything is added here make sure to # remove is_trained class attribute pass def __smart_apply_along_axis(self, data): # because apply_along_axis could be very much slower than a # direct invocation of native functions capable of operating # along specific axis, let's make it smarter for those we know # could do that. fx = None naxis = {'samples': 0, 'features': 1}[self.__axis] try: # if first argument is 'axis' -- just proceed with a native call if inspect.getargs(self.__fx.__code__).args[1] == 'axis': fx = self.__fx elif __debug__: debug('FX', "Will apply %s via apply_along_axis", (self.__fx)) except Exception, e: if __debug__: debug('FX', "Failed to deduce either %s has 'axis' argument: %s", (self.__fx, repr(e))) pass if fx is not None: if __debug__: debug('FX', "Applying %s directly to data giving axis=%d", (self.__fx, naxis)) mdata = fx(data, naxis, *self.__fxargs) else: # either failed to deduce signature or just didn't # have 'axis' second # apply fx along naxis for each sample/feature mdata = np.apply_along_axis(self.__fx, naxis, data, *self.__fxargs) assert(mdata.ndim in (data.ndim, data.ndim-1)) return mdata @borrowdoc(Mapper) def _forward_data(self, data): if not self.__uattrs is None: raise RuntimeError("%s does not support forward-mapping of plain " "data when data grouping based on attributes " "is requested" % self.__class__.__name__) mdata = self.__smart_apply_along_axis(data) if self.__axis == 'features': if len(mdata.shape) == 1: # in case we only have a scalar per sample we need to transpose # it properly, to keep the length of the samples axis intact mdata = np.atleast_2d(mdata).T return np.atleast_2d(mdata) @borrowdoc(Mapper) def _forward_dataset(self, ds): if self.__uattrs is None: mdata, sattrs = self._forward_dataset_full(ds) single_attr = True # yoh: Had another tentative solution but nope... I guess # logic of wrapping into list should go into _full # and _grouped #(len(mdata.shape) != len(ds.shape) \ #or #(mdata.shape != ds.shape and mdata.shape[0] == 1)) else: mdata, sattrs = self._forward_dataset_grouped(ds) single_attr = False samples = np.atleast_2d(mdata) # return early if there is no attribute treatment desired if self.__attrfx is None: out = ds.copy(deep=False) out.samples = samples return out # not copying the samples attributes, since they have to be modified # anyway if self.__axis == 'samples': out = ds.copy(deep=False, sa=[]) col = out.sa col.set_length_check(samples.shape[0]) else: out = ds.copy(deep=False, fa=[]) col = out.fa col.set_length_check(samples.shape[1]) # assign samples to do COW out.samples = samples for attr in sattrs: a = sattrs[attr] # need to handle single literal attributes if single_attr: col[attr] = [a] else: # TODO -- here might puke if e.g it is a list where some items # are empty lists... I guess just wrap in try/except and # do dtype=object if catch col[attr] = np.atleast_1d(a) return out def _forward_dataset_grouped(self, ds): mdata = [] # list of samples array pieces if self.__axis == 'samples': col = ds.sa axis = 0 elif self.__axis == 'features': col = ds.fa axis = 1 else: raise RuntimeError("This should not have happened!") attrs = dict(zip(col.keys(), [[] for i in col])) # create a dictionary for all unique elements in all attribute this # mapper should operate on self.__attrcombs = dict(zip(self.__uattrs, [col[attr].unique for attr in self.__uattrs])) # let it generate all combinations of unique elements in any attr for comb in _orthogonal_permutations(self.__attrcombs): selector = reduce(np.multiply, [array_whereequal(col[attr].value, value) for attr, value in comb.iteritems()]) # process the samples if axis == 0: samples = ds.samples[selector] else: samples = ds.samples[:, selector] # check if there were any samples for such a combination, # if not -- warning and skip the rest of the loop body if not len(samples): warning('There were no samples for combination %s. It might be ' 'a sign of a disbalanced dataset %s.' % (comb, ds)) continue fxed_samples = self.__smart_apply_along_axis(samples) mdata.append(fxed_samples) if not self.__attrfx is None: # and now all samples attributes fxed_attrs = [self.__attrfx(col[attr].value[selector]) for attr in col] for i, attr in enumerate(col): attrs[attr].append(fxed_attrs[i]) if axis == 0: mdata = np.vstack(mdata) else: mdata = np.vstack(np.transpose(mdata)) return mdata, attrs def _forward_dataset_full(self, ds): # simply map the all of the data mdata = self._forward_data(ds.samples) # if the attributes should not be handled, don't handle them if self.__attrfx is None: return mdata, None # and now all attributes if self.__axis == 'samples': attrs = dict(zip(ds.sa.keys(), [self.__attrfx(ds.sa[attr].value) for attr in ds.sa])) if self.__axis == 'features': attrs = dict(zip(ds.fa.keys(), [self.__attrfx(ds.fa[attr].value) for attr in ds.fa])) return mdata, attrs axis = property(fget=lambda self:self.__axis) fx = property(fget=lambda self:self.__fx) fxargs = property(fget=lambda self:self.__fxargs) uattrs = property(fget=lambda self:self.__uattrs) attrfx = property(fget=lambda self:self.__attrfx) # # Convenience functions to create some useful mapper with less complexity # def mean_sample(attrfx='merge'): """Returns a mapper that computes the mean sample of a dataset. Parameters ---------- attrfx : 'merge' or callable, optional Callable that is used to determine the sample attributes of the computed mean samples. By default this will be a string representation of all unique value of a particular attribute in any sample group. If there is only a single value in a group it will be used as the new attribute value. Returns ------- FxMapper instance. """ return FxMapper('samples', np.mean, attrfx=attrfx) def mean_group_sample(attrs, attrfx='merge'): """Returns a mapper that computes the mean samples of unique sample groups. The sample groups are identified by the unique combination of all values of a set of provided sample attributes. Order of output samples might differ from original and correspond to sorted order of corresponding `attrs`. Parameters ---------- attrs : list List of sample attributes whose unique values will be used to identify the samples groups. attrfx : 'merge' or callable, optional Callable that is used to determine the sample attributes of the computed mean samples. By default this will be a string representation of all unique value of a particular attribute in any sample group. If there is only a single value in a group it will be used as the new attribute value. Returns ------- FxMapper instance. """ return FxMapper('samples', np.mean, uattrs=attrs, attrfx=attrfx) def sum_sample(attrfx='merge'): """Returns a mapper that computes the sum sample of a dataset. Parameters ---------- attrfx : 'merge' or callable, optional Callable that is used to determine the sample attributes of the computed sum samples. By default this will be a string representation of all unique value of a particular attribute in any sample group. If there is only a single value in a group it will be used as the new attribute value. Returns ------- FxMapper instance. """ return FxMapper('samples', np.sum, attrfx=attrfx) def mean_feature(attrfx='merge'): """Returns a mapper that computes the mean feature of a dataset. Parameters ---------- attrfx : 'merge' or callable, optional Callable that is used to determine the feature attributes of the computed mean features. By default this will be a string representation of all unique value of a particular attribute in any feature group. If there is only a single value in a group it will be used as the new attribute value. Returns ------- FxMapper instance. """ return FxMapper('features', np.mean, attrfx=attrfx) def mean_group_feature(attrs, attrfx='merge'): """Returns a mapper that computes the mean features of unique feature groups. The feature groups are identified by the unique combination of all values of a set of provided feature attributes. Order of output features might differ from original and correspond to sorted order of corresponding `attrs`. Parameters ---------- attrs : list List of feature attributes whos unique values will be used to identify the feature groups. attrfx : 'merge' or callable, optional Callable that is used to determine the feature attributes of the computed mean features. By default this will be a string representation of all unique value of a particular attribute in any feature group. If there is only a single value in a group it will be used as the new attribute value. Returns ------- FxMapper instance. """ return FxMapper('features', np.mean, uattrs=attrs, attrfx=attrfx) def absolute_features(): """Returns a mapper that converts features into absolute values. This mapper does not alter any attributes. Returns ------- FxMapper instance. """ return FxMapper('features', np.absolute, attrfx=None) def sumofabs_sample(): """Returns a mapper that returns the sum of absolute values of all samples. """ return FxMapper('samples', sum_of_abs) def maxofabs_sample(): """Returns a mapper that finds max of absolute values of all samples. """ return FxMapper('samples', max_of_abs) # # Utility functions # def _uniquemerge2literal(attrs): """Compress a sequence into its unique elements (with string merge). Whenever there is more then one unique element in `attrs`, these are converted to a string and join with a '+' character inbetween. Parameters ---------- attrs : sequence, arbitrary Returns ------- Non-sequence arguments are passed as is. Sequences are converted into a single item representation (see above) and returned. None is returned in case of an empty sequence. """ try: unq = np.unique(attrs) except TypeError: # so it is not an iterable -- return the original return attrs lunq = len(unq) if lunq > 1: return '+'.join([str(l) for l in unq]) elif lunq: # first entry (non return unq[0] else: return None def _orthogonal_permutations(a_dict): """ Takes a dictionary with lists as values and returns all permutations of these list elements in new dicts. This function is useful, when a method with several arguments shall be tested and all of the arguments can take several values. The order is not defined, therefore the elements should be orthogonal to each other. >>> for i in _orthogonal_permutations({'a': [1,2,3], 'b': [4,5]}): ... print i {'a': 1, 'b': 4} {'a': 1, 'b': 5} {'a': 2, 'b': 4} {'a': 2, 'b': 5} {'a': 3, 'b': 4} {'a': 3, 'b': 5} """ # Taken from MDP (LGPL) pool = dict(a_dict) args = [] for func, all_args in pool.items(): # check the size of the list in the second item of the tuple args_with_fun = [(func, arg) for arg in all_args] args.append(args_with_fun) for i in _product(args): yield dict(i) def _product(iterable): # MDP took it and adapted it from itertools 2.6 (Python license) # PyMVPA took it from MDP (LGPL) pools = tuple(iterable) result = [[]] for pool in pools: result = [x+[y] for x in result for y in pool] for prod in result: yield tuple(prod) class BinaryFxNode(Node): """Extract a dataset attribute and call a function with it and the samples. This node takes a dataset's samples and a configurable attribute and passes them to a custom callable. This node can be used to implement comparisons, or error quantifications. When called with a dataset the node returns a new dataset with the return value of the callable as samples. """ # TODO: Allow using feature attributes too def __init__(self, fx, space, **kwargs): """ Parameters ---------- fx : callable Callable that is passed with the dataset samples as first and attribute values as second argument. space : str name of the sample attribute that contains the target values. """ Node.__init__(self, space=space, **kwargs) self.fx = fx def _call(self, ds): # extract samples and targets and pass them to the errorfx targets = ds.sa[self.get_space()].value # squeeze to remove bogus dimensions and prevent problems during # comparision later on values = np.atleast_1d(ds.samples.squeeze()) if not values.shape == targets.shape: # if they have different shape numpy's broadcasting might introduce # pointless stuff (compare individual features or yield a single # boolean raise ValueError("Trying to compute an error between data of " "different shape (%s vs. %s)." % (values.shape, targets.shape)) err = self.fx(values, targets) if np.isscalar(err): err = np.array(err, ndmin=2) return Dataset(err) pymvpa2-2.2.0/mvpa2/mappers/fxy.py000066400000000000000000000055741202542755000170020ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """""" __docformat__ = 'restructuredtext' from mvpa2.base.dochelpers import _str, _repr_attrs from mvpa2.datasets import Dataset from mvpa2.mappers.base import Mapper from mvpa2.base.dochelpers import borrowdoc class FxyMapper(Mapper): """Mapper to execute a callable with two datasets as arguments. The first dataset is passed to the mapper during training, the second dataset is passed to forward/call(). This mapper is useful to, for example, compare two datasets regarding particular aspects, merge them, or perform other operations that require the presence of two datasets. """ def __init__(self, fx, train_as_1st=True, **kwargs): """ Parameters ---------- fx : callable Functor that is called with the two datasets upon forward-mapping. train_as_1st : bool If True, the training dataset is passed to the target callable as the first argument and the other dataset as the second argument. If False, it is vice versa. Examples -------- >>> from mvpa2.mappers.fxy import FxyMapper >>> from mvpa2.datasets import Dataset >>> callable = lambda x,y: len(x) > len(y) >>> ds1 = Dataset(range(5)) >>> ds2 = Dataset(range(3)) >>> fxy = FxyMapper(callable) >>> fxy.train(ds1) >>> fxy(ds2).item() True >>> fxy = FxyMapper(callable, train_as_1st=False) >>> fxy.train(ds1) >>> fxy(ds2).item() False """ Mapper.__init__(self, **kwargs) self._fx = fx self._train_as_1st = train_as_1st self._ds_train = None @borrowdoc(Mapper) def __repr__(self, prefixes=[]): return super(FxyMapper, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['fx'])) def __str__(self): return _str(self, fx=self._fx.__name__) def _train(self, ds): self._ds_train = ds def _untrain(self): self._ds_train = None @borrowdoc(Mapper) def _forward_dataset(self, ds): # apply function if self._train_as_1st: out = self._fx(self._ds_train, ds) else: out = self._fx(ds, self._ds_train) # wrap output in a dataset if necessary if not isinstance(out, Dataset): try: out = Dataset(out) except ValueError: # not a sequence? out = Dataset([out]) return out fx = property(fget=lambda self:self.__fx) pymvpa2-2.2.0/mvpa2/mappers/lle.py000066400000000000000000000053241202542755000167410ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Local Linear Embedding Data mapper. This is a wrapper class around the corresponding MDP nodes LLE and HLLE (since MDP 2.4). """ __docformat__ = 'restructuredtext' from mvpa2.base import externals import numpy as np from mvpa2.mappers.mdp_adaptor import MDPNodeMapper if externals.exists('mdp ge 2.4', raise_=True): import mdp class LLEMapper(MDPNodeMapper): """Locally linear embbeding Mapper. This mapper performs dimensionality reduction. It wraps two algorithms provided by the Modular Data Processing (MDP) framework. Locally linear embedding (LLE) approximates the input data with a low-dimensional surface and reduces its dimensionality by learning a mapping to the surface. This wrapper class provides access to two different LLE algorithms (i.e. the corresponding MDP processing nodes). 1) An algorithm outlined in *An Introduction to Locally Linear Embedding* by L. Saul and S. Roweis, using improvements suggested in *Locally Linear Embedding for Classification* by D. deRidder and R.pl.W. Duin (aka `LLENode`) and 2) Hessian Locally Linear Embedding analysis based on algorithm outlined in *Hessian Eigenmaps: new locally linear embedding techniques for high-dimensional data* by C. Grimes and D. Donoho, 2003. For more information see the MDP website at http://mdp-toolkit.sourceforge.net Notes ----- This mapper only provides forward-mapping functionality -- no reverse mapping is available. """ def __init__(self, k, alg='LLE', nodeargs=None, **kwargs): """ Parameters ---------- k : int Number of nearest neighbors to be used by the algorithm. algorithm : {'LLE', 'HLLE'} Either use the standard LLE algorithm or Hessian Linear Local Embedding (HLLE). nodeargs : None or dict Arguments passed to the MDP node in various stages of its lifetime. See the baseclass for more details. **kwargs Additional constructor arguments for the MDP node. """ if alg == 'LLE': node = mdp.nodes.LLENode(k, **kwargs) elif alg == 'HLLE': node = mdp.nodes.HLLENode(k, **kwargs) else: raise ValueError("Unkown algorithm '%s' for LLEMapper.") MDPNodeMapper.__init__(self, node, nodeargs=nodeargs) pymvpa2-2.2.0/mvpa2/mappers/mdp_adaptor.py000066400000000000000000000277701202542755000204700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """MDP interface module. This module provides to mapper that allow embedding MDP nodes, or flows into PyMVPA. """ __docformat__ = 'restructuredtext' from mvpa2.base import externals if externals.exists('mdp', raise_=True): import mdp import numpy as np from mvpa2.base.dataset import DatasetAttributeExtractor from mvpa2.mappers.base import Mapper, accepts_dataset_as_samples from mvpa2.misc.support import is_in_volume class MDPNodeMapper(Mapper): """Mapper encapsulating an arbitray MDP node. This mapper wraps an MDP node and uses it for forward and reverse data mapping (reverse is only available if the underlying MDP node supports it). It is possible to specify arbitrary arguments for all processing steps of an MDP node (training, training stop, execution, and inverse). Because MDP does not allow to 'reset' a node and (re)train it from scratch the mapper uses a copy of the initially wrapped node for the actual processing. Upon subsequent training attempts a new copy of the original node is made and replaces the previous one. Notes ----- MDP nodes requiring multiple training phases are not supported. Use a MDPFlowWrapper for that. Moreover, it is not possible to perform incremental training of a node. """ def __init__(self, node, nodeargs=None, **kwargs): """ Parameters ---------- node : mdp.Node instance This node instance is taken as the pristine source of which a copy is made for actual processing upon each training attempt. nodeargs : dict Dictionary for additional arguments for all calls to the MDP node. The dictionary key's meaning is as follows: 'train' Arguments for calls to `Node.train()` 'stoptrain' Arguments for calls to `Node.stop_training()` 'exec' Arguments for calls to `Node.execute()` 'inv' Arguments for calls to `Node.inverse()` The value for each item is always a 2-tuple, consisting of a tuple (for the arguments), and a dictionary (for keyword arguments), i.e. ((), {}). Both, tuple and dictionary have to be provided even if they are empty. space : see base class """ # NOTE: trailing spaces in above docstring must not be pruned # for correct parsing if (externals.versions['mdp'] >= (2, 5) \ and node.has_multiple_training_phases()) \ or not len(node._train_seq) == 1: raise ValueError("MDPNodeMapper does not support MDP nodes with " "multiple training phases.") Mapper.__init__(self, **kwargs) self.__pristine_node = None self.node = node self.nodeargs = nodeargs def __repr__(self): s = super(MDPNodeMapper, self).__repr__() return s.replace("(", "(node=%s, nodeargs=%s, " % (repr(self.node), repr(self.nodeargs)), 1) def _expand_args(self, phase, ds=None): args = [] kwargs = {} if not self.nodeargs is None and phase in self.nodeargs: sargs, skwargs = self.nodeargs[phase] for a in sargs: if isinstance(a, DatasetAttributeExtractor): if ds is None: raise RuntimeError('MDPNodeMapper does not (yet) ' 'support argument extraction from dataset on ' 'forward()') args.append(a(ds)) else: args.append(a) for k in skwargs: if isinstance(skwargs[k], DatasetAttributeExtractor): if ds is None: raise RuntimeError('MDPNodeMapper does not (yet) ' 'support argument extraction from dataset on ' 'forward()') kwargs[k] = skwargs[k](ds) else: kwargs[k] = skwargs[k] return args, kwargs def _train(self, ds): if not self.node.is_trainable(): return # whenever we have no cannonical node source, we assign the current # node -- this can only happen prior training and allows modifying # the node of having the MDPNodeMapper instance if self.__pristine_node is None: self.__pristine_node = self.node # training is done on a copy of the pristine node, because nodes cannot # be reset, but PyMVPA's mapper need to be able to be retrained from # scratch self.node = self.__pristine_node.copy() # train args, kwargs = self._expand_args('train', ds) self.node.train(ds.samples, *args, **kwargs) # stop train args, kwargs = self._expand_args('stoptrain', ds) self.node.stop_training(*args, **kwargs) def _forward_data(self, data): args, kwargs = self._expand_args('exec', data) return self.node.execute(np.atleast_2d(data), *args, **kwargs).squeeze() def _reverse_data(self, data): args, kwargs = self._expand_args('inv', data) return self.node.inverse(np.atleast_2d(data), *args, **kwargs).squeeze() class PCAMapper(MDPNodeMapper): """Convenience wrapper to perform PCA using MDP's Mapper """ def __init__(self, alg='PCA', nodeargs=None, **kwargs): """ Parameters ---------- alg : {'PCA', 'NIPALS'} Which MDP implementation of a PCA to use. nodeargs : None or dict Arguments passed to the MDP node in various stages of its lifetime. See the :class:`MDPNodeMapper` for more details. **kwargs Additional constructor arguments for the MDP node. """ if alg == 'PCA': node = mdp.nodes.PCANode(**kwargs) elif alg == 'NIPALS': node = mdp.nodes.NIPALSNode(**kwargs) else: raise ValueError("Unkown algorithm '%s' for PCAMapper." % alg) MDPNodeMapper.__init__(self, node, nodeargs=nodeargs) proj = property(fget=lambda self: self.node.get_projmatrix(), doc="Projection matrix (as an array)") recon = property(fget=lambda self: self.node.get_projmatrix(), doc="Backprojection matrix (as an array)") var = property(fget=lambda self: self.node.d, doc="Variances per component") centroid = property(fget=lambda self: self.node.avg, doc="Mean of the traiing data") class ICAMapper(MDPNodeMapper): """Convenience wrapper to perform ICA using MDP nodes. """ def __init__(self, alg='FastICA', nodeargs=None, **kwargs): """ Parameters ---------- alg : {'FastICA', 'CuBICA'} Which MDP implementation of an ICA to use. nodeargs : None or dict Arguments passed to the MDP node in various stages of its lifetime. See the baseclass for more details. **kwargs Additional constructor arguments for the MDP node. """ if alg == 'FastICA': node = mdp.nodes.FastICANode(**kwargs) elif alg == 'CuBICA': node = mdp.nodes.CuBICANode(*kwargs) else: raise ValueError("Unkown algorithm '%s' for ICAMapper." % alg) MDPNodeMapper.__init__(self, node, nodeargs=nodeargs) proj = property(fget=lambda self: self.node.get_projmatrix(), doc="Projection matrix (as an array)") recon = property(fget=lambda self: self.node.get_projmatrix(), doc="Backprojection matrix (as an array)") class MDPFlowMapper(Mapper): """Mapper encapsulating an arbitray MDP flow. This mapper wraps an MDP flow and uses it for forward and reverse data mapping (reverse is only available if the underlying MDP flow supports it). It is possible to specify arbitrary arguments for the training of the MDP flow. Because MDP does not allow to 'reset' a flow and (re)train it from scratch the mapper uses a copy of the initially wrapped flow for the actual processing. Upon subsequent training attempts a new copy of the original flow is made and replaces the previous one. Examples -------- >>> import mdp >>> from mvpa2.mappers.mdp_adaptor import MDPFlowMapper >>> from mvpa2.base.dataset import DAE >>> flow = (mdp.nodes.PCANode() + mdp.nodes.IdentityNode() + ... mdp.nodes.FDANode()) >>> mapper = MDPFlowMapper(flow, ... node_arguments=(None, None, ... [DAE('sa', 'targets')])) Notes ----- It is not possible to perform incremental training of the MDP flow. """ def __init__(self, flow, node_arguments=None, **kwargs): """ Parameters ---------- flow : mdp.Flow instance This flow instance is taken as the pristine source of which a copy is made for actual processing upon each training attempt. node_arguments : tuple, list A tuple or a list the same length as the flow. Each item is a list of arguments for the training of the corresponding node in the flow. If a node does not require additional arguments, None can be provided instead. Keyword arguments are currently not supported by mdp.Flow. """ if not node_arguments is None and len(node_arguments) != len(flow): raise ValueError("Length of node_arguments (%i) does not match the " "number of nodes in the flow (%i)." % (len(node_arguments), len(flow))) Mapper.__init__(self, **kwargs) self.__pristine_flow = None self.flow = flow self.node_arguments = node_arguments def __repr__(self): s = super(MDPFlowMapper, self).__repr__() return s.replace("(", "(flow=%s, node_arguments=%s, " % (repr(self.flow), repr(self.node_arguments)), 1) def _expand_nodeargs(self, ds, args): enal = [] for a in args: if isinstance(a, DatasetAttributeExtractor): enal.append(a(ds)) else: enal.append(a) return enal def _build_node_arguments(self, ds): if self.node_arguments is not None: node_arguments = [] for ndi in self.node_arguments: l = [ds.samples] if ndi is not None: l = [ds.samples] l.extend(self._expand_nodeargs(ds, ndi)) node_arguments.append([l]) else: node_arguments = ds.samples return node_arguments def _train(self, ds): # whenever we have no cannonical flow source, we assign the current # flow -- this can only happen prior training and allow modifying # the flow of having the MDPNodeMapper instance if self.__pristine_flow is None: self.__pristine_flow = self.flow # training is done on a copy of the pristine flow, because flows cannot # be reset, but PyMVPA's mapper need to be able to be retrained from # scratch self.flow = self.__pristine_flow.copy() self.flow.train(self._build_node_arguments(ds)) def _forward_data(self, data): return self.flow.execute(np.atleast_2d(data)).squeeze() def _reverse_data(self, data): return self.flow.inverse(np.atleast_2d(data)).squeeze() pymvpa2-2.2.0/mvpa2/mappers/procrustean.py000066400000000000000000000201341202542755000205260ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Procrustean rotation mapper""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals from mvpa2.base.param import Parameter from mvpa2.base.types import is_datasetlike from mvpa2.mappers.projection import ProjectionMapper from mvpa2.base import warning if __debug__: from mvpa2.base import debug class ProcrusteanMapper(ProjectionMapper): """Mapper to project from one space to another using Procrustean transformation (shift + scaling + rotation). Training this mapper requires data for both source and target space to be present in the training dataset. The source space data is taken from the training dataset's ``samples``, while the target space is taken from a sample attribute corresponding to the ``space`` setting of the ProcrusteanMapper. See: http://en.wikipedia.org/wiki/Procrustes_transformation """ scaling = Parameter(True, allowedtype='bool', doc="""Estimate a global scaling factor for the transformation (no longer rigid body)""") reflection = Parameter(True, allowedtype='bool', doc="""Allow for the data to be reflected (so it might not be a rotation. Effective only for non-oblique transformations. """) reduction = Parameter(True, allowedtype='bool', doc="""If true, it is allowed to map into lower-dimensional space. Forward transformation might be suboptimal then and reverse transformation might not recover all original variance.""") oblique = Parameter(False, allowedtype='bool', doc="""Either to allow non-orthogonal transformation -- might heavily overfit the data if there is less samples than dimensions. Use `oblique_rcond`.""") oblique_rcond = Parameter(-1, allowedtype='float', doc="""Cutoff for 'small' singular values to regularize the inverse. See :class:`~numpy.linalg.lstsq` for more information.""") svd = Parameter('numpy', allowedtype='string (numpy, scipy, dgesvd)', doc="""Implementation of SVD to use. dgesvd requires ctypes to be available.""") def __init__(self, space='targets', **kwargs): ProjectionMapper.__init__(self, space=space, **kwargs) self._scale = None """Estimated scale""" if self.params.svd == 'dgesvd' and not externals.exists('liblapack.so'): warning("Reverting choice of svd for ProcrusteanMapper to be default " "'numpy' since liblapack.so seems not to be available for " "'dgesvd'") self.params.svd = 'numpy' def _train(self, source): params = self.params # Since it is unsupervised, we don't care about labels datas = () odatas = () means = () shapes = () assess_residuals = __debug__ and 'MAP_' in debug.active target = source.sa[self.get_space()].value for i, ds in enumerate((source, target)): if is_datasetlike(ds): data = np.asarray(ds.samples) else: data = ds if assess_residuals: odatas += (data,) if i == 0: mean = self._offset_in else: mean = data.mean(axis=0) data = data - mean means += (mean,) datas += (data,) shapes += (data.shape,) # shortcuts for sizes sn, sm = shapes[0] tn, tm = shapes[1] # Check the sizes if sn != tn: raise ValueError, "Data for both spaces should have the same " \ "number of samples. Got %d in source and %d in target space" \ % (sn, tn) # Sums of squares ssqs = [np.sum(d**2, axis=0) for d in datas] # XXX check for being invariant? # needs to be tuned up properly and not raise but handle for i in xrange(2): if np.all(ssqs[i] <= np.abs((np.finfo(datas[i].dtype).eps * sn * means[i] )**2)): raise ValueError, "For now do not handle invariant in time datasets" norms = [ np.sqrt(np.sum(ssq)) for ssq in ssqs ] normed = [ data/norm for (data, norm) in zip(datas, norms) ] # add new blank dimensions to source space if needed if sm < tm: normed[0] = np.hstack( (normed[0], np.zeros((sn, tm-sm))) ) if sm > tm: if params.reduction: normed[1] = np.hstack( (normed[1], np.zeros((sn, sm-tm))) ) else: raise ValueError, "reduction=False, so mapping from " \ "higher dimensionality " \ "source space is not supported. Source space had %d " \ "while target %d dimensions (features)" % (sm, tm) source, target = normed if params.oblique: # Just do silly linear system of equations ;) or naive # inverse problem if sn == sm and tm == 1: T = np.linalg.solve(source, target) else: T = np.linalg.lstsq(source, target, rcond=params.oblique_rcond)[0] ss = 1.0 else: # Orthogonal transformation # figure out optimal rotation if params.svd == 'numpy': U, s, Vh = np.linalg.svd(np.dot(target.T, source), full_matrices=False) elif params.svd == 'scipy': # would raise exception if not present externals.exists('scipy', raise_=True) import scipy U, s, Vh = scipy.linalg.svd(np.dot(target.T, source), full_matrices=False) elif params.svd == 'dgesvd': from mvpa2.support.lapack_svd import svd as dgesvd U, s, Vh = dgesvd(np.dot(target.T, source), full_matrices=True, algo='svd') else: raise ValueError('Unknown type of svd %r'%(params.svd)) T = np.dot(Vh.T, U.T) if not params.reflection: # then we need to assure that it is only rotation # "recipe" from # http://en.wikipedia.org/wiki/Orthogonal_Procrustes_problem # for more and info and original references, see # http://dx.doi.org/10.1007%2FBF02289451 nsv = len(s) s[:-1] = 1 s[-1] = np.linalg.det(T) T = np.dot(U[:, :nsv] * s, Vh) # figure out scale and final translation # XXX with reflection False -- not sure if here or there or anywhere... ss = sum(s) # if we were to collect standardized distance # std_d = 1 - sD**2 # select out only relevant dimensions if sm != tm: T = T[:sm, :tm] self._scale = scale = ss * norms[1] / norms[0] # Assign projection if self.params.scaling: proj = scale * T else: proj = T self._proj = proj if self._demean: self._offset_out = means[1] if __debug__ and 'MAP_' in debug.active: # compute the residuals res_f = self.forward(odatas[0]) d_f = np.linalg.norm(odatas[1] - res_f)/np.linalg.norm(odatas[1]) res_r = self.reverse(odatas[1]) d_r = np.linalg.norm(odatas[0] - res_r)/np.linalg.norm(odatas[0]) debug('MAP_', "%s, residuals are forward: %g," " reverse: %g" % (repr(self), d_f, d_r)) pymvpa2-2.2.0/mvpa2/mappers/projection.py000066400000000000000000000123651202542755000203440ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.dochelpers import enhanced_doc_string from mvpa2.mappers.base import Mapper, accepts_dataset_as_samples if __debug__: from mvpa2.base import debug class ProjectionMapper(Mapper): """Linear mapping between multidimensional spaces. This class cannot be used directly. Sub-classes have to implement the `_train()` method, which has to compute the projection matrix `_proj` and optionally offset vectors `_offset_in` and `_offset_out` (if initialized with demean=True, which is default) given a dataset (see `_train()` docstring for more information). Once the projection matrix is available, this class provides functionality to perform forward and backwards linear mapping of data, the latter by default using pseudo-inverse (but could be altered in subclasses, like hermitian (conjugate) transpose in case of SVD). Additionally, `ProjectionMapper` supports optional selection of arbitrary component (i.e. columns of the projection matrix) of the projection. Forward and back-projection matrices (a.k.a. *projection* and *reconstruction*) are available via the `proj` and `recon` properties. """ _DEV__doc__ = """Think about renaming `demean`, may be `translation`?""" def __init__(self, demean=True, **kwargs): """Initialize the ProjectionMapper Parameters ---------- demean : bool Either data should be demeaned while computing projections and applied back while doing reverse() """ Mapper.__init__(self, **kwargs) # by default we want to wipe the feature attributes out during mapping self._fa_filter = [] self._proj = None """Forward projection matrix.""" self._recon = None """Reverse projection (reconstruction) matrix.""" self._demean = demean """Flag whether to demean the to be projected data, prior to projection. """ self._offset_in = None """Offset (most often just mean) in the input space""" self._offset_out = None """Offset (most often just mean) in the output space""" __doc__ = enhanced_doc_string('ProjectionMapper', locals(), Mapper) @accepts_dataset_as_samples def _pretrain(self, samples): """Determine the projection matrix. Parameters ---------- dataset : Dataset Dataset to operate on """ if self._demean: self._offset_in = samples.mean(axis=0) ##REF: Name was automagically refactored def _demean_data(self, data): """Helper which optionally demeans """ if self._demean: # demean the training data data = data - self._offset_in if __debug__ and "MAP_" in debug.active: debug("MAP_", "%s: Mean of data in input space %s was subtracted" % (self.__class__.__name__, self._offset_in)) return data def _forward_data(self, data): if self._proj is None: raise RuntimeError, "Mapper needs to be train before used." # local binding demean = self._demean d = np.asmatrix(data) # Remove input offset if present if demean and self._offset_in is not None: d = d - self._offset_in # Do forward projection res = (d * self._proj).A # Add output offset if present if demean and self._offset_out is not None: res += self._offset_out return res def _reverse_data(self, data): if self._proj is None: raise RuntimeError, "Mapper needs to be trained before used." d = np.asmatrix(data) # Remove offset if present in output space if self._demean and self._offset_out is not None: d = d - self._offset_out # Do reverse projection res = (d * self.recon).A # Add offset in input space if self._demean and self._offset_in is not None: res += self._offset_in return res ##REF: Name was automagically refactored def _compute_recon(self): """Given that a projection is present -- compute reconstruction matrix. By default -- pseudoinverse of projection matrix. Might be overridden in derived classes for efficiency. """ return np.linalg.pinv(self._proj) ##REF: Name was automagically refactored def _get_recon(self): """Compute (if necessary) and return reconstruction matrix """ # (re)build reconstruction matrix recon = self._recon if recon is None: self._recon = recon = self._compute_recon() return recon proj = property(fget=lambda self: self._proj, doc="Projection matrix") recon = property(fget=_get_recon, doc="Backprojection matrix") pymvpa2-2.2.0/mvpa2/mappers/prototype.py000066400000000000000000000033061202542755000202300ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Prototype-based Mapper.""" import numpy as np from mvpa2.mappers.base import accepts_dataset_as_samples from mvpa2.mappers.projection import ProjectionMapper if __debug__: from mvpa2.base import debug class PrototypeMapper(ProjectionMapper): """Mapper to project data onto a space defined by prototypes from the same space via a similarity function. """ def __init__(self, similarities, prototypes=None, **kwargs): """ Parameters ---------- similarities : list A list of similarity functions. prototypes : Dataset or list A dataset or a list of instances (e.g., streamlines)? **kwargs: All keyword arguments are passed to the ProjectionMapper constructor """ ProjectionMapper.__init__(self, **kwargs) self.similarities = similarities self.prototypes = prototypes @accepts_dataset_as_samples def _train(self, samples): """Train PrototypeMapper """ self._proj = np.hstack([similarity.computed(samples, self.prototypes) for similarity in self.similarities]) if __debug__: debug("MAP", "projected data of shape %s: %s " % (self._proj.shape, self._proj)) pymvpa2-2.2.0/mvpa2/mappers/shape.py000066400000000000000000000110041202542755000172550ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Mappers that modify the shape of a dataset""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.mappers.base import Mapper from mvpa2.datasets import Dataset class TransposeMapper(Mapper): """Swap sample and feature axes. This mapper swaps the sample axis (first axis) and feature axis (second axis) of a dataset (additional axes in multi-dimensional datasets are left untouched). Both, sample and feature attribute collections are also swapped accordingly. Neither dataset samples, not attribute collections are copied. Reverse mapping is supported as well. This mapper does not require training and a single instance can be used on different datasets without problems. """ is_trained = True def __init__(self, **kwargs): Mapper.__init__(self, **kwargs) def _swap_samples_and_feature_axes(self, ds): out = Dataset(np.swapaxes(ds.samples, 0, 1), sa=ds.fa, fa=ds.sa, a=ds.a) return out def _forward_dataset(self, ds): return self._swap_samples_and_feature_axes(ds) def _reverse_dataset(self, ds): return self._swap_samples_and_feature_axes(ds) class AddAxisMapper(Mapper): """Add an axis to a dataset at an arbitrary position. This mapper can be useful when there is need for aggregating multiple datasets, where it is often necessary or at least useful to have a dedicated aggregation axis. An axis can be added at any position When adding an axis that causes the current sample (1st) or feature axis (2nd) to shift the corresponding attribute collections are modified to accomodate the change. This typically means also adding an axis at the corresponding position of the attribute arrays. A special case is, however, prepending an axis to the dataset, i.e. shifting both sample and feature axis towards the back. In this case all feature attibutes are duplicated to match the new number of features (formaly the number of samples). Examples -------- >>> from mvpa2.datasets.base import Dataset >>> from mvpa2.mappers.shape import AddAxisMapper >>> ds = Dataset(np.arange(24).reshape(2,3,4)) >>> am = AddAxisMapper(pos=1) >>> print am(ds).shape (2, 1, 3, 4) """ is_trained = True def __init__(self, pos, **kwargs): """ Parameters ---------- pos : int Axis index to which the new axis is prepended. Negative indices are supported as well, but the new axis will be placed behind the given index. For example, a position of ``-1`` will cause an axis to be added behind the last axis. If ``pos`` is larger than the number of existing axes additional new axes will be created match the value of ``pos``. """ Mapper.__init__(self, **kwargs) self._pos = pos def _forward_dataset(self, ds): pos = self._pos if pos < 0: # support negative/reverse indices pos = len(ds.shape) + 1 + pos # select all prior axes, but at most all existing axes slicer = [slice(None)] * min(pos, len(ds.shape)) # and as many new axes as necessary afterwards slicer += [None] * max(1, pos + 1 - len(ds.shape)) # there are two special cases that require modification of feature # attributes if pos == 0: # prepend an axis to all sample attributes out_sa = dict([(attr, ds.sa[attr].value[None]) for attr in ds.sa]) # prepend an axis to all FAs and repeat for each previous sample out_fa = dict([(attr, np.repeat(ds.fa[attr].value[None], len(ds), axis=0)) for attr in ds.fa]) elif pos == 1: # prepend an axis to all feature attributes out_fa = dict([(attr, ds.fa[attr].value[None]) for attr in ds.fa]) out_sa = ds.sa else: out_sa = ds.sa out_fa = ds.fa out = Dataset(ds.samples.__getitem__(tuple(slicer)), sa=out_sa, fa=out_fa, a=ds.a) return out pymvpa2-2.2.0/mvpa2/mappers/slicing.py000066400000000000000000000132521202542755000176140ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Mappers for Dataset slicing.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.node import Node from mvpa2.mappers.base import Mapper, accepts_dataset_as_samples from mvpa2.base.dochelpers import _str, _repr_attrs from mvpa2.generators.splitters import mask2slice class SliceMapper(Mapper): """Baseclass of Mapper that slice a Dataset in various ways. """ def __init__(self, slicearg, **kwargs): Mapper.__init__(self, **kwargs) self._safe_assign_slicearg(slicearg) def _safe_assign_slicearg(self, slicearg): # convert int sliceargs into lists to prevent getting scalar values when # slicing if isinstance(slicearg, int): slicearg = [slicearg] self._slicearg = slicearg # if we got some sort of slicearg we assume that we are ready to go if not slicearg is None: self._set_trained() def __repr__(self, prefixes=[]): return super(SliceMapper, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['slicearg'])) def __str__(self): # with slicearg it can quickly get very unreadable #return _str(self, str(self._slicearg)) return _str(self) def _untrain(self): self._safe_assign_slicearg(None) super(SliceMapper, self)._untrain() def __iadd__(self, other): # our slicearg this = self._slicearg # if another slice mapper work on its slicearg if isinstance(other, SliceMapper): other = other._slicearg # catch stupid arg if not (isinstance(other, tuple) or isinstance(other, list) \ or isinstance(other, np.ndarray) or isinstance(other, slice)): return NotImplemented if isinstance(this, slice): # we can always merge if the slicing arg can be sliced itself (i.e. # it is not a slice-object... unless it doesn't really slice we do # not want to expand slices into index lists to become mergable, # since that would cause cheap view-based slicing to become # expensive copy-based slicing if this == slice(None): # this one did nothing, just use the other and be done self._safe_assign_slicearg(other) return self else: # see comment above return NotImplemented # list or tuple are alike if isinstance(this, list) or isinstance(this, tuple): # simply convert it into an array and proceed from there this = np.asanyarray(this) if this.dtype.type is np.bool_: # simply convert it into an index array --prevents us from copying a # lot and allows for sliceargs such as [3,3,4,4,5,5] this = this.nonzero()[0] if this.dtype.char in np.typecodes['AllInteger']: self._safe_assign_slicearg(this[other]) return self # if we get here we got something the isn't supported return NotImplemented slicearg = property(fget=lambda self:self._slicearg) class SampleSliceMapper(SliceMapper): """Mapper to select a subset of samples.""" def __init__(self, slicearg, **kwargs): """ Parameters ---------- slicearg : int, list(int), array(int), array(bool) Any slicing argument that is compatible with numpy arrays. Depending on the argument the mapper will perform basic slicing or advanced indexing (with all consequences on speed and memory consumption). """ SliceMapper.__init__(self, slicearg, **kwargs) def _call(self, ds): # it couldn't be simpler return ds[self._slicearg] class StripBoundariesSamples(Node): """Strip samples on boundaries defines by sample attribute values. A sample attribute of a dataset is scanned for consecutive blocks of identical values. Every change in the value is treated as a boundary and custom number of samples is removed prior and after this boundary. """ def __init__(self, space, prestrip, poststrip, **kwargs): """ Parameters ---------- space : str name of the sample attribute that shall be used to determine the boundaries. prestrip : int Number of samples to be stripped prior to each boundary. poststrip : int Number of samples to be stripped after each boundary (this includes the boundary sample itself, i.e. the first samples with a different sample attribute value). """ Node.__init__(self, space=space, **kwargs) self._prestrip = prestrip self._poststrip = poststrip def _call(self, ds): # attribute to detect boundaries battr = ds.sa[self.get_space()].value # filter which samples to keep filter_ = np.ones(battr.shape, dtype='bool') # determine boundary indices -- shift by one to have the new value # as the boundary bindices = (battr[:-1] != battr[1:]).nonzero()[0] + 1 # for all boundaries for b in bindices: lower = b - self._prestrip upper = b + self._poststrip filter_[lower:upper] = False filter_ = mask2slice(filter_) return ds[filter_] pymvpa2-2.2.0/mvpa2/mappers/som.py000066400000000000000000000176111202542755000167650ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Self-organizing map (SOM) mapper.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.mappers.base import Mapper, accepts_dataset_as_samples if __debug__: from mvpa2.base import debug class SimpleSOMMapper(Mapper): """Mapper using a self-organizing map (SOM) for dimensionality reduction. This mapper provides a simple, but pretty fast implementation of a self-organizing map using an unsupervised training algorithm. It performs a ND -> 2D mapping, which can for, example, be used for visualization of high-dimensional data. This SOM implementation uses squared Euclidean distance to determine the best matching Kohonen unit and a Gaussian neighborhood influence kernel. """ def __init__(self, kshape, niter, learning_rate=0.005, iradius=None): """ Parameters ---------- kshape : (int, int) Shape of the internal Kohonen layer. Currently, only 2D Kohonen layers are supported, although the length of an axis might be set to 1. niter : int Number of iteration during network training. learning_rate : float Initial learning rate, which will continuously decreased during network training. iradius : float or None Initial radius of the Gaussian neighborhood kernel radius, which will continuously decreased during network training. If `None` (default) the radius is set equal to the longest edge of the Kohonen layer. """ # init base class Mapper.__init__(self) self.kshape = np.array(kshape, dtype='int') if iradius is None: self.radius = self.kshape.max() else: self.radius = iradius # learning rate self.lrate = learning_rate # number of training iterations self.niter = niter # precompute whatever can be done # scalar for decay of learning rate and radius across all iterations self.iter_scale = self.niter / np.log(self.radius) # the internal kohonen layer self._K = None @accepts_dataset_as_samples def _train(self, samples): """Perform network training. Parameter --------- samples : array-like Used for unsupervised training of the SOM. """ # XXX initialize with clever default, e.g. plain of first two PCA # components self._K = np.random.standard_normal(tuple(self.kshape) + (samples.shape[1],)) # units weight vector deltas for batch training # (height x width x #features) unit_deltas = np.zeros(self._K.shape, dtype='float') # precompute distance kernel between elements in the Kohonen layer # that will remain constant throughout the training # (just compute one quadrant, as the distances are symmetric) # XXX maybe do other than squared Euclidean? dqd = np.fromfunction(lambda x, y: (x**2 + y**2)**0.5, self.kshape, dtype='float') # for all iterations for it in xrange(1, self.niter + 1): # compute the neighborhood impact kernel for this iteration # has to be recomputed since kernel shrinks over time k = self._compute_influence_kernel(it, dqd) # for all training vectors for s in samples: # determine closest unit (as element coordinate) b = self._get_bmu(s) # train all units at once by unfolding the kernel (from the # single quadrant that is precomputed), cutting it to the # right shape and simply multiply it to the difference of target # and all unit weights.... infl = np.vstack(( np.hstack(( # upper left k[b[0]:0:-1, b[1]:0:-1], # upper right k[b[0]:0:-1, :self.kshape[1] - b[1]])), np.hstack(( # lower left k[:self.kshape[0] - b[0], b[1]:0:-1], # lower right k[:self.kshape[0] - b[0], :self.kshape[1] - b[1]])) )) unit_deltas += infl[:,:,np.newaxis] * (s - self._K) # apply cumulative unit deltas self._K += unit_deltas if __debug__: debug("SOM", "Iteration %d/%d done: ||unit_deltas||=%g" % (it, self.niter, np.sqrt(np.sum(unit_deltas **2)))) # reset unit deltas unit_deltas.fill(0.) ##REF: Name was automagically refactored def _compute_influence_kernel(self, iter, dqd): """Compute the neighborhood kernel for some iteration. Parameters ---------- iter : int The iteration for which to compute the kernel. dqd : array (nrows x ncolumns) This is one quadrant of Euclidean distances between Kohonen unit locations. """ # compute radius decay for this iteration curr_max_radius = self.radius * np.exp(-1.0 * iter / self.iter_scale) # same for learning rate curr_lrate = self.lrate * np.exp(-1.0 * iter / self.iter_scale) # compute Gaussian influence kernel infl = np.exp((-1.0 * dqd) / (2 * curr_max_radius * iter)) infl *= curr_lrate # hard-limit kernel to max radius # XXX is this really necessary? infl[dqd > curr_max_radius] = 0. return infl ##REF: Name was automagically refactored def _get_bmu(self, sample): """Returns the ID of the best matching unit. 'best' is determined as minimal squared Euclidean distance between any units weight vector and some given target `sample` Parameters ---------- sample : array Target sample. Returns ------- tuple: (row, column) """ # TODO expose distance function as parameter loc = np.argmin(((self.K - sample) ** 2).sum(axis=2)) # assumes 2D Kohonen layer return (np.divide(loc, self.kshape[1]).astype('int'), loc % self.kshape[1]) def _forward_data(self, data): """Map data from the IN dataspace into OUT space. Mapping is performs by simple determining the best matching Kohonen unit for each data sample. """ return np.array([self._get_bmu(d) for d in data]) def _reverse_data(self, data): """Reverse map data from OUT space into the IN space. """ # simple transform into appropriate array slicing and # return the associated Kohonen unit weights return self.K[tuple(np.transpose(data))] def __repr__(self): s = Mapper.__repr__(self).rstrip(' )') # beautify if not s[-1] == '(': s += ' ' s += 'kshape=%s, niter=%i, learning_rate=%f, iradius=%f)' \ % (str(tuple(self.kshape)), self.niter, self.lrate, self.radius) return s ##REF: Name was automagically refactored def _access_kohonen(self): """Provide access to the Kohonen layer. With some care. """ if self._K is None: raise RuntimeError, \ 'The SOM needs to be trained before access to the Kohonen ' \ 'layer is possible.' return self._K K = property(fget=_access_kohonen) pymvpa2-2.2.0/mvpa2/mappers/staticprojection.py000066400000000000000000000030351202542755000215460ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Static Projection mapper""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.dochelpers import borrowdoc from mvpa2.mappers.projection import ProjectionMapper if __debug__: from mvpa2.base import debug class StaticProjectionMapper(ProjectionMapper): """Mapper to project data onto arbitrary space using transformation given as input. """ @borrowdoc(ProjectionMapper) def __init__(self, proj, **kwargs): """Initialize the StaticProjectionMapper Parameters ---------- **kwargs: All keyword arguments are passed to the ProjectionMapper constructor. """ ProjectionMapper.__init__(self, auto_train=True, **kwargs) self._proj = proj def _train(self, dummyds): """Do Nothing """ if __debug__: if "MAP_" in debug.active: debug("MAP_", "Mixing matrix has %s shape and norm=%f" % (self._proj.shape, np.linalg.norm(self._proj))) def _compute_recon(self): """Computing the inverse of the projection matrix for reverse """ return np.linalg.pinv(self._proj) pymvpa2-2.2.0/mvpa2/mappers/svd.py000066400000000000000000000051771202542755000167670ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Singular-value decomposition mapper""" __docformat__ = 'restructuredtext' import numpy as np #import scipy.linalg as spl from mvpa2.base.dochelpers import borrowdoc from mvpa2.mappers.base import accepts_dataset_as_samples from mvpa2.mappers.projection import ProjectionMapper from mvpa2.featsel.helpers import ElementSelector if __debug__: from mvpa2.base import debug class SVDMapper(ProjectionMapper): """Mapper to project data onto SVD components estimated from some dataset. """ @borrowdoc(ProjectionMapper) def __init__(self, **kwargs): """Initialize the SVDMapper Parameters ---------- **kwargs: All keyword arguments are passed to the ProjectionMapper constructor. """ ProjectionMapper.__init__(self, **kwargs) self._sv = None """Singular values of the training matrix.""" @accepts_dataset_as_samples def _train(self, samples): """Determine the projection matrix onto the SVD components from a 2D samples x feature data matrix. """ X = np.asmatrix(samples) X = self._demean_data(X) # singular value decomposition U, SV, Vh = np.linalg.svd(X, full_matrices=0) #U, SV, Vh = spl.svd(X, full_matrices=0) # store the final matrix with the new basis vectors to project the # features onto the SVD components. And store its .H right away to # avoid computing it in forward() self._proj = Vh.H # also store singular values of all components self._sv = SV if __debug__: debug("MAP", "SVD was done on %s and obtained %d SVs " % (samples, len(SV)) + " (%d non-0, max=%f)" % (len(SV.nonzero()), SV[0])) # .norm might be somewhat expensive to compute if "MAP_" in debug.active: debug("MAP_", "Mixing matrix has %s shape and norm=%f" % (self._proj.shape, np.linalg.norm(self._proj))) ##REF: Name was automagically refactored def _compute_recon(self): """Since singular vectors are orthonormal, sufficient to take hermitian """ return self._proj.H sv = property(fget=lambda self: self._sv, doc="Singular values") pymvpa2-2.2.0/mvpa2/mappers/wavelet.py000066400000000000000000000322331202542755000176330ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wavelet mappers""" from mvpa2.base import externals if externals.exists('pywt', raise_=True): # import conditional to be able to import the whole module while building # the docs even if pywt is not installed import pywt import numpy as np from mvpa2.base import warning from mvpa2.mappers.base import Mapper if __debug__: from mvpa2.base import debug # WaveletPacket and WaveletTransformation mappers share lots of common # functionality at the moment class _WaveletMapper(Mapper): """Generic class for Wavelet mappers (decomposition and packet) """ def __init__(self, dim=1, wavelet='sym4', mode='per', maxlevel=None): """Initialize _WaveletMapper mapper Parameters ---------- dim : int or tuple of int dimensions to work across (for now just scalar value, ie 1D transformation) is supported wavelet : str one from the families available withing pywt package mode : str periodization mode maxlevel : int or None number of levels to use. If None - automatically selected by pywt """ Mapper.__init__(self) self._dim = dim """Dimension to work along""" self._maxlevel = maxlevel """Maximal level of decomposition. None for automatic""" if not wavelet in pywt.wavelist(): raise ValueError, \ "Unknown family of wavelets '%s'. Please use one " \ "available from the list %s" % (wavelet, pywt.wavelist()) self._wavelet = wavelet """Wavelet family to use""" if not mode in pywt.MODES.modes: raise ValueError, \ "Unknown periodization mode '%s'. Please use one " \ "available from the list %s" % (mode, pywt.MODES.modes) self._mode = mode """Periodization mode""" def _forward_data(self, data): data = np.asanyarray(data) self._inshape = data.shape self._intimepoints = data.shape[self._dim] res = self._wm_forward(data) self._outshape = res.shape return res def _reverse_data(self, data): data = np.asanyarray(data) return self._wm_reverse(data) def _wm_forward(self, *args): raise NotImplementedError def _wm_reverse(self, *args): raise NotImplementedError ##REF: Name was automagically refactored def _get_indexes(shape, dim): """Generator for coordinate tuples providing slice for all in `dim` XXX Somewhat sloppy implementation... but works... """ if len(shape) < dim: raise ValueError, "Dimension %d is incorrect for a shape %s" % \ (dim, shape) n = len(shape) curindexes = [0] * n curindexes[dim] = Ellipsis#slice(None) # all elements for dimension dim while True: yield tuple(curindexes) for i in xrange(n): if i == dim and dim == n-1: return # we reached it -- thus time to go if curindexes[i] == shape[i] - 1: if i == n-1: return curindexes[i] = 0 else: if i != dim: curindexes[i] += 1 break class WaveletPacketMapper(_WaveletMapper): """Convert signal into an overcomplete representaion using Wavelet packet """ def __init__(self, level=None, **kwargs): """Initialize WaveletPacketMapper mapper Parameters ---------- level : int or None What level to decompose at. If 'None' data for all levels is provided, but due to different sizes, they are placed in 1D row. """ _WaveletMapper.__init__(self,**kwargs) self.__level = level # XXX too much of duplications between such methods -- it begs # refactoring ##REF: Name was automagically refactored def __forward_single_level(self, data): if __debug__: debug('MAP', "Converting signal using DWP (single level)") wp = None level = self.__level wavelet = self._wavelet mode = self._mode dim = self._dim level_paths = None for indexes in _get_indexes(data.shape, self._dim): if __debug__: debug('MAP_', " %s" % (indexes,), lf=False, cr=True) WP = pywt.WaveletPacket( data[indexes], wavelet=wavelet, mode=mode, maxlevel=level) level_nodes = WP.get_level(level) if level_paths is None: # Needed for reconstruction self.__level_paths = np.array([node.path for node in level_nodes]) level_datas = np.array([node.data for node in level_nodes]) if wp is None: newdim = data.shape newdim = newdim[:dim] + level_datas.shape + newdim[dim+1:] if __debug__: debug('MAP_', "Initializing storage of size %s for single " "level (%d) mapping of data of size %s" % (newdim, level, data.shape)) wp = np.empty( tuple(newdim) ) wp[indexes] = level_datas return wp ##REF: Name was automagically refactored def __forward_multiple_levels(self, data): wp = None levels_length = None # total length at each level levels_lengths = None # list of lengths per each level for indexes in _get_indexes(data.shape, self._dim): if __debug__: debug('MAP_', " %s" % (indexes,), lf=False, cr=True) WP = pywt.WaveletPacket( data[indexes], wavelet=self._wavelet, mode=self._mode, maxlevel=self._maxlevel) if levels_length is None: levels_length = [None] * WP.maxlevel levels_lengths = [None] * WP.maxlevel levels_datas = [] for level in xrange(WP.maxlevel): level_nodes = WP.get_level(level+1) level_datas = [node.data for node in level_nodes] level_lengths = [len(x) for x in level_datas] level_length = np.sum(level_lengths) if levels_lengths[level] is None: levels_lengths[level] = level_lengths elif levels_lengths[level] != level_lengths: raise RuntimeError, \ "ADs of same level of different samples should have same number of elements." \ " Got %s, was %s" % (level_lengths, levels_lengths[level]) if levels_length[level] is None: levels_length[level] = level_length elif levels_length[level] != level_length: raise RuntimeError, \ "Levels of different samples should have same number of elements." \ " Got %d, was %d" % (level_length, levels_length[level]) level_data = np.hstack(level_datas) levels_datas.append(level_data) # assert(len(data) == levels_length) # assert(len(data) >= Ntimepoints) if wp is None: newdim = list(data.shape) newdim[self._dim] = np.sum(levels_length) wp = np.empty( tuple(newdim) ) wp[indexes] = np.hstack(levels_datas) self.levels_lengths, self.levels_length = levels_lengths, levels_length if __debug__: debug('MAP_', "") debug('MAP', "Done convertion into wp. Total size %s" % str(wp.shape)) return wp def _wm_forward(self, data): if __debug__: debug('MAP', "Converting signal using DWP") if self.__level is None: return self.__forward_multiple_levels(data) else: return self.__forward_single_level(data) # # Reverse mapping # ##REF: Name was automagically refactored def __reverse_single_level(self, wp): # local bindings level_paths = self.__level_paths # define wavelet packet to use WP = pywt.WaveletPacket( data=None, wavelet=self._wavelet, mode=self._mode, maxlevel=self.__level) # prepare storage signal_shape = wp.shape[:1] + self._inshape[1:] signal = np.zeros(signal_shape) Ntime_points = self._intimepoints for indexes in _get_indexes(signal_shape, self._dim): if __debug__: debug('MAP_', " %s" % (indexes,), lf=False, cr=True) for path, level_data in zip(level_paths, wp[indexes]): WP[path] = level_data signal[indexes] = WP.reconstruct(True)[:Ntime_points] return signal def _wm_reverse(self, data): if __debug__: debug('MAP', "Converting signal back using DWP") if self.__level is None: raise NotImplementedError else: if not externals.exists('pywt wp reconstruct'): raise NotImplementedError, \ "Reconstruction for a single level for versions of " \ "pywt < 0.1.7 (revision 103) is not supported" if not externals.exists('pywt wp reconstruct fixed'): warning("%s: Reverse mapping with this version of 'pywt' might " "result in incorrect data in the tails of the signal. " "Please check for an update of 'pywt', or be careful " "when interpreting the edges of the reverse mapped " "data." % self.__class__.__name__) return self.__reverse_single_level(data) class WaveletTransformationMapper(_WaveletMapper): """Convert signal into wavelet representaion """ def _wm_forward(self, data): """Decompose signal into wavelets's coefficients via dwt """ if __debug__: debug('MAP', "Converting signal using DWT") wd = None coeff_lengths = None for indexes in _get_indexes(data.shape, self._dim): if __debug__: debug('MAP_', " %s" % (indexes,), lf=False, cr=True) coeffs = pywt.wavedec( data[indexes], wavelet=self._wavelet, mode=self._mode, level=self._maxlevel) # Silly Yarik embedds extraction of statistics right in place #stats = [] #for coeff in coeffs: # stats_ = [np.std(coeff), # np.sqrt(np.dot(coeff, coeff)), # ]# + list(np.histogram(coeff, normed=True)[0])) # stats__ = list(coeff) + stats_[:] # stats__ += list(np.log(stats_)) # stats__ += list(np.sqrt(stats_)) # stats__ += list(np.array(stats_)**2) # stats__ += [ np.median(coeff), np.mean(coeff), scipy.stats.kurtosis(coeff) ] # stats.append(stats__) #coeffs = stats coeff_lengths_ = np.array([len(x) for x in coeffs]) if coeff_lengths is None: coeff_lengths = coeff_lengths_ assert((coeff_lengths == coeff_lengths_).all()) if wd is None: newdim = list(data.shape) newdim[self._dim] = np.sum(coeff_lengths) wd = np.empty( tuple(newdim) ) coeff = np.hstack(coeffs) wd[indexes] = coeff if __debug__: debug('MAP_', "") debug('MAP', "Done DWT. Total size %s" % str(wd.shape)) self.lengths = coeff_lengths return wd def _wm_reverse(self, wd): if __debug__: debug('MAP', "Performing iDWT") signal = None wd_offsets = [0] + list(np.cumsum(self.lengths)) nlevels = len(self.lengths) Ntime_points = self._intimepoints #len(time_points) # unfortunately sometimes due to padding iDWT would return longer # sequences, thus we just limit to the right ones for indexes in _get_indexes(wd.shape, self._dim): if __debug__: debug('MAP_', " %s" % (indexes,), lf=False, cr=True) wd_sample = wd[indexes] wd_coeffs = [wd_sample[wd_offsets[i]:wd_offsets[i+1]] for i in xrange(nlevels)] # need to compose original list time_points = pywt.waverec( wd_coeffs, wavelet=self._wavelet, mode=self._mode) if signal is None: newdim = list(wd.shape) newdim[self._dim] = Ntime_points signal = np.empty(newdim) signal[indexes] = time_points[:Ntime_points] if __debug__: debug('MAP_', "") debug('MAP', "Done iDWT. Total size %s" % (signal.shape, )) return signal pymvpa2-2.2.0/mvpa2/mappers/zscore.py000066400000000000000000000266041202542755000174760ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Mapper for data normalization by Z-Scoring.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import warning from mvpa2.base.dochelpers import _str, borrowkwargs, _repr_attrs from mvpa2.mappers.base import accepts_dataset_as_samples, Mapper from mvpa2.datasets.base import Dataset from mvpa2.datasets.miscfx import get_nsamples_per_attr, get_samples_by_attr from mvpa2.support import copy class ZScoreMapper(Mapper): """Mapper to normalize features (Z-scoring). Z-scoring can be done chunk-wise (with independent mean and standard deviation per chunk) or on the full data. It is possible to specify a sample attribute, unique value of which would then be used to determine the chunks. By default, Z-scoring parameters (mean and standard deviation) are estimated from the data (either chunk-wise or globally). However, it is also possible to define fixed parameters (again a global setting or per-chunk definitions), or to select a specific subset of samples from which these parameters should be estimated. If necessary, data is upcasted into a configurable datatype to prevent information loss. Notes ----- It should be mentioned that the mapper can be used for forward-mapping of datasets without prior training (it will auto-train itself upon first use). It is, however, not possible to map plain data arrays without prior training. Also, for obvious reasons, it is also not possible to perform chunk-wise Z-scoring of plain data arrays. Reverse-mapping is currently not implemented. """ def __init__(self, params=None, param_est=None, chunks_attr='chunks', dtype='float64', **kwargs): """ Parameters ---------- params : None or tuple(mean, std) or dict Fixed Z-Scoring parameters (mean, standard deviation). If provided, no parameters are estimated from the data. It is possible to specify individual parameters for each chunk by passing a dictionary with the chunk ids as keys and the parameter tuples as values. If None, parameters will be estimated from the training data. param_est : None or tuple(attrname, attrvalues) Limits the choice of samples used for automatic parameter estimation to a specific subset identified by a set of a given sample attribute values. The tuple should have the name of that sample attribute as the first element, and a sequence of attribute values as the second element. If None, all samples will be used for parameter estimation. chunks_attr : str or None If provided, it specifies the name of a samples attribute in the training data, unique values of which will be used to identify chunks of samples, and to perform individual Z-scoring within them. dtype : Numpy dtype, optional Target dtype that is used for upcasting, in case integer data is to be Z-scored. """ Mapper.__init__(self, **kwargs) self.__chunks_attr = chunks_attr self.__params = params self.__param_est = param_est self.__params_dict = None self.__dtype = dtype # secret switch to perform in-place z-scoring self._secret_inplace_zscore = False def __repr__(self, prefixes=[]): return super(ZScoreMapper, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['params', 'param_est', 'chunks_attr']) + _repr_attrs(self, ['dtype'], default='float64')) def __str__(self): return _str(self) def _train(self, ds): # local binding chunks_attr = self.__chunks_attr params = self.__params param_est = self.__param_est # populate a dictionary with tuples of (mean,std) for all chunks, or # a global value that is is used for the whole data if not params is None: # we got mean and std already if not isinstance(params, dict): # turn into dict, otherwise assume that we have parameters per # chunk params = {'__all__': params} else: # no parameters given, need to estimate if not param_est is None: est_attr, est_attr_values = param_est # which samples to use for estimation est_ids = set(get_samples_by_attr(ds, est_attr, est_attr_values)) else: est_ids = slice(None) # now we can either do it one for all, or per chunk if not chunks_attr is None: # per chunk estimate params = {} for c in ds.sa[chunks_attr].unique: slicer = np.where(ds.sa[chunks_attr].value == c)[0] if not isinstance(est_ids, slice): slicer = list(est_ids.intersection(set(slicer))) params[c] = self._compute_params(ds.samples[slicer]) else: # global estimate params = {'__all__': self._compute_params(ds.samples[est_ids])} self.__params_dict = params def _forward_dataset(self, ds): # local binding chunks_attr = self.__chunks_attr dtype = self.__dtype if __debug__ and not chunks_attr is None: nsamples_per_chunk = get_nsamples_per_attr(ds, chunks_attr) min_nsamples_per_chunk = np.min(nsamples_per_chunk.values()) if min_nsamples_per_chunk in range(3, 6): warning("Z-scoring chunk-wise having a chunk with only " "%d samples is 'discouraged'. " "You have chunks with following number of samples: %s" % (min_nsamples_per_chunk, nsamples_per_chunk,)) if min_nsamples_per_chunk <= 2: warning("Z-scoring chunk-wise having a chunk with less " "than three samples will set features in these " "samples to either zero (with 1 sample in a chunk) " "or -1/+1 (with 2 samples in a chunk). " "You have chunks with following number of samples: %s" % (nsamples_per_chunk,)) params = self.__params_dict if params is None: raise RuntimeError, \ "ZScoreMapper needs to be trained before call to forward" if self._secret_inplace_zscore: mds = ds else: # shallow copy to put the new stuff in mds = ds.copy(deep=False) # but deepcopy the samples since _zscore would modify inplace mds.samples = mds.samples.copy() # cast the data to float, since in-place operations below do not upcast! if np.issubdtype(mds.samples.dtype, np.integer): mds.samples = mds.samples.astype(dtype) if '__all__' in params: # we have a global parameter set mds.samples = self._zscore(mds.samples, *params['__all__']) else: # per chunk z-scoring for c in mds.sa[chunks_attr].unique: if not c in params: raise RuntimeError( "%s has no parameters for chunk '%s'. It probably " "wasn't present in the training dataset!?" % (self.__class__.__name__, c)) slicer = np.where(mds.sa[chunks_attr].value == c)[0] mds.samples[slicer] = self._zscore(mds.samples[slicer], *params[c]) return mds def _forward_data(self, data): if self.__chunks_attr is not None: raise RuntimeError( "%s cannot do chunk-wise Z-scoring of plain data " "since it has to be parameterized with chunks_attr." % self) if self.__param_est is not None: raise RuntimeError("%s cannot do Z-scoring with estimating " "parameters on some attributes of plain" "data." % self) params = self.__params_dict if params is None: raise RuntimeError, \ "ZScoreMapper needs to be trained before call to forward" # mappers should not modify the input data # cast the data to float, since in-place operations below to not upcast! if np.issubdtype(data.dtype, np.integer): if self._secret_inplace_zscore: raise TypeError( "Cannot perform inplace z-scoring since data is of integer " "type. Please convert to float before calling zscore") mdata = data.astype(self.__dtype) elif self._secret_inplace_zscore: mdata = data else: # do not call .copy() directly, since it might not be an array mdata = copy.deepcopy(data) self._zscore(mdata, *params['__all__']) return mdata def _compute_params(self, samples): return (np.mean(samples, axis=0), np.std(samples, axis=0)) def _zscore(self, samples, mean, std): # de-mean if np.isscalar(mean) or samples.shape[1] == len(mean): mean = np.asanyarray(mean) # assure array samples -= mean else: raise RuntimeError("mean should be a per-feature vector. Got: %r" % (mean,)) # scale if np.isscalar(std): if std == 0: samples[:] = 0 else: samples /= std else: std = np.asanyarray(std) if samples.shape[1] != len(std): raise RuntimeError("std should be a per-feature vector.") else: # check for invariant features std_nz = std != 0 samples[:, std_nz] /= np.asanyarray(std)[std_nz] return samples params = property(fget=lambda self:self.__params) param_est = property(fget=lambda self:self.__param_est) chunks_attr = property(fget=lambda self:self.__chunks_attr) dtype = property(fget=lambda self:self.__dtype) @borrowkwargs(ZScoreMapper, '__init__') def zscore(ds, **kwargs): """In-place Z-scoring of a `Dataset` or `ndarray`. This function behaves identical to `ZScoreMapper`. The only difference is that the actual Z-scoring is done in-place -- potentially causing a significant reduction of memory demands. Parameters ---------- ds : Dataset or ndarray The data that will be Z-scored in-place. **kwargs For all other arguments, please see the documentation of `ZScoreMapper`. """ zm = ZScoreMapper(**kwargs) zm._secret_inplace_zscore = True # train if isinstance(ds, Dataset): zm.train(ds) else: zm.train(Dataset(ds)) # map mapped = zm.forward(ds) # and append the mapper to the dataset if isinstance(mapped, Dataset): mapped._append_mapper(zm) pymvpa2-2.2.0/mvpa2/measures/000077500000000000000000000000001202542755000157645ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/measures/__init__.py000066400000000000000000000016361202542755000201030ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PyMVPA measures. Module Description ================== Provide some measures given a dataset. Most of the time, derivatives of `FeaturewiseMeasure` are used, such as * `OneWayAnova` * `CorrCoef` * `IterativeRelief` * `NoisePerturbationSensitivity` Also many classifiers natively provide sensitivity estimators via the call to `get_sensitivity_analyzer` method """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.measures') if __debug__: debug('INIT', 'mvpa2.measures end') pymvpa2-2.2.0/mvpa2/measures/adhocsearchlightbase.py000066400000000000000000000460601202542755000224730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """An efficient implementation of searchlight for GNB. """ __docformat__ = 'restructuredtext' import numpy as np #from numpy import ones, zeros, sum, abs, isfinite, dot #from mvpa2.base import warning, externals from mvpa2.datasets.base import Dataset from mvpa2.misc.errorfx import mean_mismatch_error from mvpa2.measures.searchlight import BaseSearchlight from mvpa2.base import externals, warning from mvpa2.base.dochelpers import borrowkwargs, _repr_attrs from mvpa2.generators.splitters import Splitter #from mvpa2.base.param import Parameter #from mvpa2.base.state import ConditionalAttribute #from mvpa2.measures.base import Sensitivity from mvpa2.misc.neighborhood import IndexQueryEngine, Sphere if __debug__: from mvpa2.base import debug import time as time if externals.exists('scipy'): import scipy.sparse as sps # API of scipy.sparse has changed in 0.7.0 -- lets account for this _coo_shape_argument = { True: 'shape', False: 'dims'} [externals.versions['scipy'] >= '0.7.0'] __all__ = [ "SimpleStatSearchlight" ] def lastdim_columnsums_fancy_indexing(a, inds, out): for i, inds_ in enumerate(inds): out[..., i] = a[..., inds_].sum(axis=-1) # # Machinery for sparse matrix way # # silly Yarik failed to do np.r_[*neighbors] directly, so here is a # trick def r_helper(*args): return np.r_[args] def _inds_list_to_coo(inds, shape=None): inds_r = r_helper(*(inds)) inds_i = r_helper(*[[i]*len(ind) for i,ind in enumerate(inds)]) data = np.ones(len(inds_r)) ij = np.array([inds_r, inds_i]) spmat = sps.coo_matrix((data, ij), dtype=int, **{_coo_shape_argument:shape}) return spmat def _inds_array_to_coo(inds, shape=None): n_sums, n_cols_per_sum = inds.shape cps_inds = inds.ravel() row_inds = np.repeat(np.arange(n_sums)[None, :], n_cols_per_sum, axis=0).T.ravel() ij = np.r_[cps_inds[None, :], row_inds[None, :]] data = np.ones(ij.shape[1]) inds_s = sps.coo_matrix((data, ij), **{_coo_shape_argument:shape}) return inds_s def inds_to_coo(inds, shape=None): """Dispatcher for conversion to coo """ if isinstance(inds, np.ndarray): return _inds_array_to_coo(inds, shape) elif isinstance(inds, list): return _inds_list_to_coo(inds, shape) else: raise NotImplementedError, "add conversion here" def lastdim_columnsums_spmatrix(a, inds, out): # inds is a 2D array or list or already a sparse matrix, with each # row specifying a set of columns (in fact last dimension indices) # to sum. Thus there are the same number of sums as there are # rows in `inds`. n_cols = a.shape[-1] in_shape = a.shape[:-1] # first convert to sparse if necessary if sps.isspmatrix(inds): n_sums = inds.shape[1] inds_s = inds else: # assume regular iterable n_sums = len(inds) inds_s = inds_to_coo(inds, shape=(n_cols, n_sums)) ar = a.reshape((-1, a.shape[-1])) sums = np.asarray((sps.csr_matrix(ar) * inds_s).todense()) out[:] = sums.reshape(in_shape+(n_sums,)) class _STATS: """Just a dummy container to group/access stats """ pass class SimpleStatBaseSearchlight(BaseSearchlight): """Base class for clf searchlights based on basic univar. statistics Used for GNB and M1NN Searchlights TODO ---- some stats are not needed (eg per sample X^2's) for M1NN, so we should make them optional depending on the derived class Note ---- refactored from the original GNBSearchlight """ # TODO: implement parallelization (see #67) and then uncomment __init__doc__exclude__ = ['nproc'] def __init__(self, generator, qe, errorfx=mean_mismatch_error, indexsum=None, reuse_neighbors=False, **kwargs): """Initialize the base class for "naive" searchlight classifiers Parameters ---------- generator : `Generator` Some `Generator` to prepare partitions for cross-validation. qe : `QueryEngine` Query engine which would provide neighborhood information errorfx : func, optional Functor that computes a scalar error value from the vectors of desired and predicted values (e.g. subclass of `ErrorFunction`). indexsum : ('sparse', 'fancy'), optional What use to compute sums over arbitrary columns. 'fancy' corresponds to regular fancy indexing over columns, whenever in 'sparse', product of sparse matrices is used (usually faster, so is default if `scipy` is available). reuse_neighbors : bool, optional Compute neighbors information only once, thus allowing for efficient reuse on subsequent calls where dataset's feature attributes remain the same (e.g. during permutation testing) """ # init base class first BaseSearchlight.__init__(self, qe, **kwargs) self._errorfx = errorfx self._generator = generator # TODO: move into _call since resetting over default None # obscures __repr__ if indexsum is None: if externals.exists('scipy'): indexsum = 'sparse' else: indexsum = 'fancy' else: if indexsum == 'sparse' and not externals.exists('scipy'): warning("Scipy.sparse isn't available so taking 'fancy' as " "'indexsum' method.") indexsum = 'fancy' self._indexsum = indexsum if not self.nproc in (None, 1): raise NotImplementedError, "For now only nproc=1 (or None for " \ "autodetection) is supported by GNBSearchlight" self.__pb = None # statistics per each block/label self.__reuse_neighbors = reuse_neighbors # Storage to be used for neighborhood information self.__roi_fids = None def __repr__(self, prefixes=[]): return super(SimpleStatBaseSearchlight, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['generator']) + _repr_attrs(self, ['errorfx'], default=mean_mismatch_error) + _repr_attrs(self, ['indexsum']) + _repr_attrs(self, ['reuse_neighbors'], default=False) ) def _get_space(self): raise NotImplementedError("Must be implemented in derived classes") def _untrain(self): super(SimpleStatBaseSearchlight, self)._untrain() self.__pb = None def _compute_pb_stats(self, labels_numeric, X, shape): # # reusable containers which should stay of the same size # nblocks = shape[0] pb = self.__pb = _STATS() # sums and sums of squares per each block pb.sums = np.zeros(shape) # sums of squares pb.sums2 = np.zeros(shape) pb.nsamples = np.zeros((nblocks,)) pb.labels = [None] * nblocks if np.issubdtype(X.dtype, np.int): # might result in overflow e.g. while taking .square which # would result in negative variances etc, thus to be on a # safe side -- convert to float X = X.astype(float) X2 = np.square(X) # silly way for now for l, s, s2, ib in zip(labels_numeric, X, X2, self.__sample2block): pb.sums[ib] += s pb.sums2[ib] += s2 pb.nsamples[ib] += 1 if pb.labels[ib] is None: pb.labels[ib] = l else: assert(pb.labels[ib] == l) pb.labels = np.asanyarray(pb.labels) # additional silly tests for paranoid assert(pb.labels.dtype.kind == 'i') def _compute_pl_stats(self, sis, pl): """ Uses blocked stats to get stats across given samples' indexes (might be training or testing) Parameters ---------- sis : array of int Indexes of samples *args: In-place containers """ # local binding pb = self.__pb # convert to blocks training split bis = np.unique(self.__sample2block[sis]) # Let's collect stats summaries nsamples = 0 for il, l in enumerate(self._ulabels_numeric): bis_il = bis[pb.labels[bis] == l] pl.nsamples[il] = N_float = \ float(np.sum(pb.nsamples[bis_il])) nsamples += N_float if N_float == 0.0: pl.variances[il] = pl.sums[il] \ = pl.means[il] = pl.sums2[il] = 0. else: pl.sums[il] = np.sum(pb.sums[bis_il], axis=0) pl.means[il] = pl.sums[il] / N_float pl.sums2[il] = np.sum(pb.sums2[bis_il], axis=0) ## Actually compute the non-0 pl.variances non0labels = (pl.nsamples.squeeze() != 0) if np.all(non0labels): # For a possible tiny speed up avoiding copying and # using (no) slicing non0labels = slice(None) return nsamples, non0labels def _sl_call(self, dataset, roi_ids, nproc): """Call to SimpleStatBaseSearchlight """ # Local bindings generator = self.generator qe = self.queryengine errorfx = self.errorfx if __debug__: time_start = time.time() targets_sa_name = self._get_space() targets_sa = dataset.sa[targets_sa_name] if __debug__: debug_slc_ = 'SLC_' in debug.active # get the dataset information into easy vars X = dataset.samples if len(X.shape) != 2: raise ValueError( 'Unlike a classifier, %s (for now) operates on already' 'flattened datasets' % (self.__class__.__name__)) labels = targets_sa.value ulabels = targets_sa.unique nlabels = len(ulabels) label2index = dict((l, il) for il, l in enumerate(ulabels)) labels_numeric = np.array([label2index[l] for l in labels]) self._ulabels_numeric = [label2index[l] for l in ulabels] # set the feature dimensions nsamples = len(X) nrois = len(roi_ids) s_shape = X.shape[1:] # shape of a single sample # The shape of results r_shape = (nrois,) + X.shape[2:] # # Everything toward optimization ;) # # Silly Yarik thinks that it might be worth to pre-compute # statistics per each feature within a block of the samples # which always come together in splits -- most often it is a # (chunk, label) combination, but since we simply use a # generator -- who knows! Therefore lets figure out what are # those blocks and operate on them instead of original samples. # # After additional thinking about this -- probably it would be # just minor additional improvements (ie not worth it) but # since it is coded already -- let it be so # 1. Query generator for the splits we will have if __debug__: debug('SLC', 'Phase 1. Initializing partitions using %s on %s' % (generator, dataset)) # Lets just create a dummy ds which will store for us actual sample # indicies # XXX we could make it even more lightweight I guess... dataset_indicies = Dataset(np.arange(nsamples), sa=dataset.sa) splitter = Splitter(attr=generator.get_space()) splits = list(tuple(splitter.generate(ds_)) for ds_ in generator.generate(dataset_indicies)) nsplits = len(splits) # 2. Figure out the new 'chunks x labels' blocks of combinations # of samples if __debug__: debug('SLC', 'Phase 2. Blocking data for %i splits and %i labels' % (nsplits, nlabels)) # array of indicies for label, split1, split2, ... # through which we will pass later on to figure out # unique combinations combinations = np.ones((nsamples, 1+nsplits), dtype=int)*-1 # labels combinations[:, 0] = labels_numeric for ipartition, (split1, split2) in enumerate(splits): combinations[split1.samples[:, 0], 1+ipartition] = 1 combinations[split2.samples[:, 0], 1+ipartition] = 2 # Check for over-sampling, i.e. no same sample used twice here if not (len(np.unique(split1.samples[:, 0])) == len(split1) and len(np.unique(split2.samples[:, 0])) == len(split2)): raise RuntimeError( "%s needs a partitioner which does not reuse " "the same the same samples more than once" % self.__class__) # sample descriptions -- should be unique for # samples within the same block descriptions = [tuple(c) for c in combinations] udescriptions = sorted(list(set(descriptions))) nblocks = len(udescriptions) description2block = dict([(d, i) for i, d in enumerate(udescriptions)]) # Indices for samples to point to their block self.__sample2block = sample2block = \ np.array([description2block[d] for d in descriptions]) # 3. Compute statistics per each block # if __debug__: debug('SLC', 'Phase 3. Computing statistics for %i blocks' % (nblocks,)) self._compute_pb_stats(labels_numeric, X, (nblocks,) + s_shape) # derived classes might decide differently on what they # actually need, so defer reserving the space and computing # stats to them self._reserve_pl_stats_space((nlabels, ) + s_shape) # results results = np.zeros((nsplits,) + r_shape) # 4. Lets deduce all neighbors... might need to be RF into the # parallel part later on # TODO: needs OPT since this is the step consuming 50% of time # or more allow to cache them entirely so this would # not be an unnecessary burden during permutation testing if not self.reuse_neighbors or self.__roi_fids is None: if __debug__: debug('SLC', 'Phase 4. Deducing neighbors information for %i ROIs' % (nrois,)) roi_fids = [qe.query_byid(f) for f in roi_ids] else: if __debug__: debug('SLC', 'Phase 4. Reusing neighbors information for %i ROIs' % (nrois,)) roi_fids = self.__roi_fids self.ca.roi_feature_ids = roi_fids roi_sizes = [] if isinstance(roi_fids, list): nroi_fids = len(roi_fids) if self.ca.is_enabled('roi_sizes'): roi_sizes = [len(x) for x in roi_fids] elif externals.exists('scipy') and isinstance(roi_fids, sps.spmatrix): nroi_fids = roi_fids.shape[1] if self.ca.is_enabled('roi_sizes'): # very expensive operation, so better not to ask over again # roi_sizes = [roi_fids.getrow(r).nnz for r in range(nroi_fids)] warning("Since 'sparse' trick is used, extracting sizes of " "roi's are expensive at this point. Get them from the " ".ca value of the original instance before " "calling again and using reuse_neighbors") else: raise RuntimeError("Should not be reachable") # Since this is ad-hoc implementation of the searchlight, we are not passing # those via ds.a but rather assign directly to self.ca self.ca.roi_sizes = roi_sizes indexsum = self._indexsum if indexsum == 'sparse': if not self.reuse_neighbors or self.__roi_fids is None: if __debug__: debug('SLC', 'Phase 4b. Converting neighbors to sparse matrix ' 'representation') # convert to "sparse representation" where column j contains # 1s only at the roi_fids[j] indices roi_fids = inds_to_coo(roi_fids, shape=(dataset.nfeatures, nroi_fids)) indexsum_fx = lastdim_columnsums_spmatrix elif indexsum == 'fancy': indexsum_fx = lastdim_columnsums_fancy_indexing else: raise ValueError, \ "Do not know how to deal with indexsum=%s" % indexsum # Store roi_fids if self.reuse_neighbors and self.__roi_fids is None: self.__roi_fids = roi_fids # 5. Lets do actual "splitting" and "classification" if __debug__: debug('SLC', 'Phase 5. Major loop' ) for isplit, split in enumerate(splits): if __debug__: debug('SLC', ' Split %i out of %i' % (isplit, nsplits)) # figure out for a given splits the blocks we want to work # with # sample_indicies training_sis = split[0].samples[:, 0] testing_sis = split[1].samples[:, 0] # That is the GNB specificity targets, predictions = self._sl_call_on_a_split( split, X, # X2 might light to go training_sis, testing_sis, ## training_nsamples, # GO? == np.sum(pl.nsamples) ## training_non0labels, ## pl.sums, pl.means, pl.sums2, pl.variances, # passing nroi_fids as well since in 'sparse' way it has no 'length' nroi_fids, roi_fids, indexsum_fx, labels_numeric, ) # assess the errors if __debug__: debug('SLC', " Assessing accuracies") if errorfx is mean_mismatch_error: results[isplit, :] = \ (predictions != targets[:, None]).sum(axis=0) \ / float(len(targets)) else: # somewhat silly but a way which allows to use pre-crafted # error functions without a chance to screw up for i, fpredictions in enumerate(predictions.T): results[isplit, i] = errorfx(fpredictions, targets) if __debug__: debug('SLC', "%s._call() is done in %.3g sec" % (self.__class__.__name__, time.time() - time_start)) return Dataset(results) generator = property(fget=lambda self: self._generator) errorfx = property(fget=lambda self: self._errorfx) indexsum = property(fget=lambda self: self._indexsum) reuse_neighbors = property(fget=lambda self: self.__reuse_neighbors) pymvpa2-2.2.0/mvpa2/measures/anova.py000066400000000000000000000133641202542755000174510ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """FeaturewiseMeasure performing a univariate ANOVA.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals from mvpa2.measures.base import FeaturewiseMeasure from mvpa2.base.dataset import vstack from mvpa2.datasets.base import Dataset # TODO: Extend with access to functionality from scipy.stats? # For binary: # 2-sample kolmogorov-smirnof might be interesting # (scipy.stats.ks_2samp) to judge if two conditions are derived # from different distributions (take it as 'activity' vs 'rest'), # # For binary+multiclass: # kruskal-wallis H-test (scipy.stats.kruskal) # # and may be some others class OneWayAnova(FeaturewiseMeasure): """`FeaturewiseMeasure` that performs a univariate ANOVA. F-scores are computed for each feature as the standard fraction of between and within group variances. Groups are defined by samples with unique labels. No statistical testing is performed, but raw F-scores are returned as a sensitivity map. As usual F-scores have a range of [0,inf] with greater values indicating higher sensitivity. The sensitivity map is returned as a single-sample dataset. If SciPy is available the associated p-values will also be computed and are available from the 'fprob' feature attribute. """ def __init__(self, space='targets', **kwargs): """ Parameters ---------- space : str What samples attribute to use as targets (labels). """ # set auto-train flag since we have nothing special to be done # so by default auto train kwargs['auto_train'] = kwargs.get('auto_train', True) FeaturewiseMeasure.__init__(self, space=space, **kwargs) def __repr__(self, prefixes=None): if prefixes is None: prefixes = [] if self.get_space() != 'targets': prefixes = prefixes + ['targets_attr=%r' % (self.get_space())] return \ super(FeaturewiseMeasure, self).__repr__(prefixes=prefixes) def _call(self, dataset): # This code is based on SciPy's stats.f_oneway() # Copyright (c) Gary Strangman. All rights reserved # License: BSD # # However, it got tweaked and optimized to better fit into PyMVPA. # number of groups targets_sa = dataset.sa[self.get_space()] labels = targets_sa.value ul = targets_sa.unique na = len(ul) bign = float(dataset.nsamples) alldata = dataset.samples # total squares of sums sostot = np.sum(alldata, axis=0) sostot *= sostot sostot /= bign # total sum of squares sstot = np.sum(alldata * alldata, axis=0) - sostot # between group sum of squares ssbn = 0 for l in ul: # all samples for the respective label d = alldata[labels == l] sos = np.sum(d, axis=0) sos *= sos ssbn += sos / float(len(d)) ssbn -= sostot # within sswn = sstot - ssbn # degrees of freedom dfbn = na-1 dfwn = bign - na # mean sums of squares msb = ssbn / float(dfbn) msw = sswn / float(dfwn) f = msb / msw # assure no NaNs -- otherwise it leads instead of # sane unittest failure (check of NaNs) to crazy # File "mtrand.pyx", line 1661, in mtrand.shuffle # TypeError: object of type 'numpy.int64' has no len() # without any sane backtrace f[np.isnan(f)] = 0 if externals.exists('scipy'): from scipy.stats import fprob return Dataset(f[np.newaxis], fa={'fprob': fprob(dfbn, dfwn, f)}) else: return Dataset(f[np.newaxis]) class CompoundOneWayAnova(OneWayAnova): """Compound comparisons via univariate ANOVA. This measure compute an ANOVA F-score per each feature, for each one-vs-rest comparision for all unique labels in a dataset. Each F-score vector for each comparision is included in the return datasets as a separate samples. Corresponding p-values are avialable in feature attributes named 'fprob_X', where `X` is the name of the actual comparision label. Note that p-values are only available, if SciPy is installed. The comparison labels for each F-vectore are also stored as 'targets' sample attribute in the returned dataset. """ def _call(self, dataset): """Computes featurewise f-scores using compound comparisons.""" targets_sa = dataset.sa[self.get_space()] orig_labels = targets_sa.value labels = orig_labels.copy() # Lets create a very shallow copy of a dataset with just # samples and targets_attr dataset_mod = Dataset(dataset.samples, sa={self.get_space() : labels}) results = [] for ul in targets_sa.unique: labels[orig_labels == ul] = 1 labels[orig_labels != ul] = 2 f_ds = OneWayAnova._call(self, dataset_mod) if 'fprob' in f_ds.fa: # rename the fprob attribute to something label specific # to survive final aggregation stage f_ds.fa['fprob_' + str(ul)] = f_ds.fa.fprob del f_ds.fa['fprob'] results.append(f_ds) results = vstack(results) results.sa[self.get_space()] = targets_sa.unique return results pymvpa2-2.2.0/mvpa2/measures/base.py000066400000000000000000001234041202542755000172540ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Base classes for measures: algorithms that quantify properties of datasets. Besides the `Measure` base class this module also provides the (abstract) `FeaturewiseMeasure` class. The difference between a general measure and the output of the `FeaturewiseMeasure` is that the latter returns a 1d map (one value per feature in the dataset). In contrast there are no restrictions on the returned value of `Measure` except for that it has to be in some iterable container. """ __docformat__ = 'restructuredtext' import numpy as np import mvpa2.support.copy as copy from mvpa2.base.node import Node from mvpa2.base.learner import Learner from mvpa2.base.state import ConditionalAttribute from mvpa2.misc.args import group_kwargs from mvpa2.misc.attrmap import AttributeMap from mvpa2.misc.errorfx import mean_mismatch_error from mvpa2.base.types import asobjarray from mvpa2.base.dochelpers import enhanced_doc_string, _str, _repr_attrs from mvpa2.base import externals, warning from mvpa2.clfs.stats import auto_null_dist from mvpa2.base.dataset import AttrDataset from mvpa2.datasets import Dataset, vstack, hstack from mvpa2.mappers.fx import BinaryFxNode from mvpa2.generators.splitters import Splitter if __debug__: from mvpa2.base import debug class Measure(Learner): """A measure computed from a `Dataset` All dataset measures support arbitrary transformation of the measure after it has been computed. Transformation are done by processing the measure with a functor that is specified via the `transformer` keyword argument of the constructor. Upon request, the raw measure (before transformations are applied) is stored in the `raw_results` conditional attribute. Additionally all dataset measures support the estimation of the probabilit(y,ies) of a measure under some distribution. Typically this will be the NULL distribution (no signal), that can be estimated with permutation tests. If a distribution estimator instance is passed to the `null_dist` keyword argument of the constructor the respective probabilities are automatically computed and stored in the `null_prob` conditional attribute. Notes ----- For developers: All subclasses shall get all necessary parameters via their constructor, so it is possible to get the same type of measure for multiple datasets by passing them to the __call__() method successively. """ null_prob = ConditionalAttribute(enabled=True) """Stores the probability of a measure under the NULL hypothesis""" null_t = ConditionalAttribute(enabled=False) """Stores the t-score corresponding to null_prob under assumption of Normal distribution""" def __init__(self, null_dist=None, **kwargs): """ Parameters ---------- null_dist : instance of distribution estimator The estimated distribution is used to assign a probability for a certain value of the computed measure. """ Learner.__init__(self, **kwargs) null_dist_ = auto_null_dist(null_dist) if __debug__: debug('SA', 'Assigning null_dist %s whenever original given was %s' % (null_dist_, null_dist)) self.__null_dist = null_dist_ __doc__ = enhanced_doc_string('Measure', locals(), Learner) def __repr__(self, prefixes=[]): """String representation of a `Measure` Includes only arguments which differ from default ones """ return super(Measure, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['null_dist'])) def _precall(self, ds): # estimate the NULL distribution when functor is given if not self.__null_dist is None: if __debug__: debug("STAT", "Estimating NULL distribution using %s" % self.__null_dist) # we need a matching measure instance, but we have to disable # the estimation of the null distribution in that child to prevent # infinite looping. measure = copy.copy(self) measure.__null_dist = None self.__null_dist.fit(measure, ds) def _postcall(self, dataset, result): """Some postprocessing on the result """ # post-processing result = super(Measure, self)._postcall(dataset, result) if not self.__null_dist is None: if self.ca.is_enabled('null_t'): # get probability under NULL hyp, but also request # either it belong to the right tail null_prob, null_right_tail = \ self.__null_dist.p(result, return_tails=True) self.ca.null_prob = null_prob externals.exists('scipy', raise_=True) from scipy.stats import norm # TODO: following logic should appear in NullDist, # not here tail = self.null_dist.tail if tail == 'left': acdf = np.abs(null_prob.samples) elif tail == 'right': acdf = 1.0 - np.abs(null_prob.samples) elif tail in ['any', 'both']: acdf = 1.0 - np.clip(np.abs(null_prob.samples), 0, 0.5) else: raise RuntimeError, 'Unhandled tail %s' % tail # We need to clip to avoid non-informative inf's ;-) # that happens due to lack of precision in mantissa # which is 11 bits in double. We could clip values # around 0 at as low as 1e-100 (correspond to z~=21), # but for consistency lets clip at 1e-16 which leads # to distinguishable value around p=1 and max z=8.2. # Should be sufficient range of z-values ;-) clip = 1e-16 null_t = norm.ppf(np.clip(acdf, clip, 1.0 - clip)) # assure that we deal with arrays: null_t = np.array(null_t, ndmin=1, copy=False) null_t[~null_right_tail] *= -1.0 # revert sign for negatives null_t_ds = null_prob.copy(deep=False) null_t_ds.samples = null_t self.ca.null_t = null_t_ds # store as a Dataset else: # get probability of result under NULL hypothesis if available # and don't request tail information self.ca.null_prob = self.__null_dist.p(result) return result @property def null_dist(self): """Return Null Distribution estimator""" return self.__null_dist class ProxyMeasure(Measure): """Wrapper to allow for alternative post-processing of a shared measure. This class is useful whenever a measure (or for example a trained classifier) shall be utilized in multiple nodes, but each node needs to perform its on post-processing of results. One can simply wrap the measure into this class and assign arbitrary post-processing nodes to the wrapper, instead of the measure itself. """ def __init__(self, measure, **kwargs): # by default auto train kwargs['auto_train'] = kwargs.get('auto_train', True) Measure.__init__(self, **kwargs) self.__measure = measure def __repr__(self, prefixes=[]): """String representation of a `ProxyMeasure` """ return super(ProxyMeasure, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['measure'])) def _train(self, ds): self.measure.train(ds) def _call(self, ds): return self.measure(ds) @property def measure(self): """Return proxied measure""" return self.__measure class RepeatedMeasure(Measure): """Repeatedly run a measure on generated dataset. A measure is ran multiple times on datasets yielded by a custom generator. Results of all measure runs are stacked and returned as a dataset upon call. """ repetition_results = ConditionalAttribute(enabled=False, doc= """Store individual result datasets for each repetition""") stats = ConditionalAttribute(enabled=False, doc= """Summary statistics about the node performance across all repetitions """) datasets = ConditionalAttribute(enabled=False, doc= """Store generated datasets for all repetitions. Can be memory expensive """) is_trained = True """Indicate that this measure is always trained.""" def __init__(self, node, generator, callback=None, concat_as='samples', **kwargs): """ Parameters ---------- node : Node Node or Measure implementing the procedure that is supposed to be run multiple times. generator : Node Generator to yield a dataset for each measure run. The number of datasets returned by the node determines the number of runs. callback : functor Optional callback to extract information from inside the main loop of the measure. The callback is called with the input 'data', the 'node' instance that is evaluated repeatedly and the 'result' of a single evaluation -- passed as named arguments (see labels in quotes) for every iteration, directly after evaluating the node. concat_as : {'samples', 'features'} Along which axis to concatenate result dataset from all iterations. By default, results are 'vstacked' as multiple samples in the output dataset. Setting this argument to 'features' will change this to 'hstacking' along the feature axis. """ Measure.__init__(self, **kwargs) self._node = node self._generator = generator self._callback = callback self._concat_as = concat_as def __repr__(self, prefixes=[], exclude=[]): return super(RepeatedMeasure, self).__repr__( prefixes=prefixes + _repr_attrs(self, [x for x in ['node', 'generator', 'callback'] if not x in exclude]) + _repr_attrs(self, ['concat_as'], default='samples') ) def _call(self, ds): # local binding generator = self._generator node = self._node ca = self.ca space = self.get_space() concat_as = self._concat_as if self.ca.is_enabled("stats") and (not node.ca.has_key("stats") or not node.ca.is_enabled("stats")): warning("'stats' conditional attribute was enabled, but " "the assigned node '%s' either doesn't support it, " "or it is disabled" % node) # precharge conditional attributes ca.datasets = [] # run the node an all generated datasets results = [] for i, sds in enumerate(generator.generate(ds)): if __debug__: debug('REPM', "%d-th iteration of %s on %s", (i, self, sds)) if ca.is_enabled("datasets"): # store dataset in ca ca.datasets.append(sds) # run the beast result = node(sds) # callback if not self._callback is None: self._callback(data=sds, node=node, result=result) # subclass postprocessing result = self._repetition_postcall(sds, node, result) if space: # XXX maybe try to get something more informative from the # processing node (e.g. in 0.5 it used to be 'chunks'->'chunks' # to indicate what was trained and what was tested. Now it is # more tricky, because `node` could be anything result.set_attr(space, (i,)) # store results.append(result) if ca.is_enabled("stats") and node.ca.has_key("stats") \ and node.ca.is_enabled("stats"): if not ca.is_set('stats'): # create empty stats container of matching type ca.stats = node.ca['stats'].value.__class__() # harvest summary stats ca['stats'].value.__iadd__(node.ca['stats'].value) # charge condition attribute self.ca.repetition_results = results # stack all results into a single Dataset if concat_as == 'samples': results = vstack(results) elif concat_as == 'features': results = hstack(results) else: raise ValueError("Unkown concatenation mode '%s'" % concat_as) # no need to store the raw results, since the Measure class will # automatically store them in a CA return results def _repetition_postcall(self, ds, node, result): """Post-processing handler for each repetition. Maybe overwritten in subclasses to harvest additional data. Parameters ---------- ds : Dataset Input dataset for the node for this repetition node : Node Node after having processed the input dataset result : Dataset Output dataset of the node for this repetition. Returns ------- dataset The result dataset. """ return result def _untrain(self): """Untrain this measure and the embedded node.""" self._node.untrain() super(RepeatedMeasure, self)._untrain() node = property(fget=lambda self: self._node) generator = property(fget=lambda self: self._generator) callback = property(fget=lambda self: self._callback) concat_as = property(fget=lambda self: self._concat_as) class CrossValidation(RepeatedMeasure): """Cross-validate a learner's transfer on datasets. A generator is used to resample a dataset into multiple instances (e.g. sets of dataset partitions for leave-one-out folding). For each dataset instance a transfer measure is computed by splitting the dataset into two parts (defined by the dataset generators output space) and train a custom learner on the first part and run it on the next. An arbitray error function can by used to determine the learner's error when prediction the dataset part that has been unseen during training. """ training_stats = ConditionalAttribute(enabled=False, doc= """Summary statistics about the training status of the learner across all cross-validation fold.""") # TODO move conditional attributes from CVTE into this guy def __init__(self, learner, generator, errorfx=mean_mismatch_error, splitter=None, **kwargs): """ Parameters ---------- learner : Learner Any trainable node that shall be run on the dataset folds. generator : Node Generator used to resample the input dataset into multiple instances (i.e. partitioning it). The number of datasets yielded by this generator determines the number of cross-validation folds. IMPORTANT: The ``space`` of this generator determines the attribute that will be used to split all generated datasets into training and testing sets. errorfx : Node or callable Custom implementation of an error function. The callable needs to accept two arguments (1. predicted values, 2. target values). If not a Node, it gets wrapped into a `BinaryFxNode`. splitter : Splitter or None A Splitter instance to split the dataset into training and testing part. The first split will be used for training and the second for testing -- all other splits will be ignored. If None, a default splitter is auto-generated using the ``space`` setting of the ``generator``. The default splitter is configured to return the ``1``-labeled partition of the input dataset at first, and the ``2``-labeled partition second. This behavior corresponds to most Partitioners that label the taken-out portion ``2`` and the remainder with ``1``. """ # compile the appropriate repeated measure to do cross-validation from # pieces if not errorfx is None: # error node -- postproc of transfer measure if isinstance(errorfx, Node): enode = errorfx else: # wrap into BinaryFxNode enode = BinaryFxNode(errorfx, learner.get_space()) else: enode = None if splitter is None: # default splitter splits into "1" and "2" partition. # that will effectively ignore 'deselected' samples (e.g. by # Balancer). It is done this way (and not by ignoring '0' samples # because it is guaranteed to yield two splits) and is more likely # to fail in visible ways if the attribute does not have 0,1,2 # values at all (i.e. a literal train/test/spareforlater attribute) splitter = Splitter(generator.get_space(), attr_values=(1,2)) # transfer measure to wrap the learner # splitter used the output space of the generator to know what to split tm = TransferMeasure(learner, splitter, postproc=enode) space = kwargs.pop('space', 'sa.cvfolds') # and finally the repeated measure to perform the x-val RepeatedMeasure.__init__(self, tm, generator, space=space, **kwargs) for ca in ['stats', 'training_stats']: if self.ca.is_enabled(ca): # enforce ca if requested tm.ca.enable(ca) if self.ca.is_enabled('training_stats'): # also enable training stats in the learner learner.ca.enable('training_stats') def __repr__(self, prefixes=[]): return super(CrossValidation, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['learner', 'splitter']) + _repr_attrs(self, ['errorfx'], default=mean_mismatch_error) + _repr_attrs(self, ['space'], default='sa.cvfolds'), # Since it is the constructor which generates and passes # node=TransferMeasure, it must not be present in __repr__ of CV # TODO: clear up hierarchy exclude=('node',) ) def _call(self, ds): # always untrain to wipe out previous stats self.untrain() return super(CrossValidation, self)._call(ds) def _repetition_postcall(self, ds, node, result): # local binding ca = self.ca if ca.is_enabled("training_stats"): if not ca.is_set('training_stats'): # create empty stats container of matching type ca.training_stats = node.ca['training_stats'].value.__class__() # harvest summary stats ca['training_stats'].value.__iadd__(node.ca['training_stats'].value) return result transfermeasure = property(fget=lambda self:self._node) # XXX Well, those properties are defined to match available # attributes to constructor arguments. Unfortunately our # hierarchy/API is not ideal at this point learner = property(fget=lambda self: self.transfermeasure.measure) splitter = property(fget=lambda self: self.transfermeasure.splitter) errorfx = property(fget=lambda self: self.transfermeasure.postproc) class TransferMeasure(Measure): """Train and run a measure on two different parts of a dataset. Upon calling a TransferMeasure instance with a dataset the input dataset is passed to a `Splitter` to will generate dataset subsets. The first generated dataset is used to train an arbitray embedded `Measure. Once trained, the measure is then called with the second generated dataset and the result is returned. """ stats = ConditionalAttribute(enabled=False, doc= """Optional summary statistics about the transfer performance""") training_stats = ConditionalAttribute(enabled=False, doc= """Summary statistics about the training status of the learner""") is_trained = True """Indicate that this measure is always trained.""" def __init__(self, measure, splitter, **kwargs): """ Parameters ---------- measure: Measure This measure instance is trained on the first dataset and called with the second. splitter: Splitter This splitter instance has to generate at least two dataset splits when called with the input dataset. The first split is used to train the measure, the second split is used to run the trained measure. """ Measure.__init__(self, **kwargs) self.__measure = measure self.__splitter = splitter def __repr__(self, prefixes=[]): return super(TransferMeasure, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['measure', 'splitter']) ) def _call(self, ds): # local binding measure = self.__measure splitter = self.__splitter ca = self.ca space = self.get_space() # generate the training and testing dataset subsequently to reduce the # memory footprint, i.e. the splitter might generate copies of the data # and no creates one at a time instead of two (for train and test) at # once # activate the dataset splitter dsgen = splitter.generate(ds) dstrain = dsgen.next() if not len(dstrain): raise ValueError( "Got empty training dataset from splitting in TransferMeasure. " "Unique values of input split attribute are: %s)" \ % (ds.sa[splitter.get_space()].unique)) if space: # get unique chunks for training set train_chunks = ','.join([str(i) for i in dstrain.get_attr(splitter.get_space())[0].unique]) # ask splitter for first part measure.train(dstrain) # cleanup to free memory del dstrain # TODO get training confusion/stats # run with second dstest = dsgen.next() if not len(dstest): raise ValueError( "Got empty testing dataset from splitting in TransferMeasure. " "Unique values of input split attribute are: %s)" \ % (ds.sa[splitter.get_space()].unique)) if space: # get unique chunks for testing set test_chunks = ','.join([str(i) for i in dstest.get_attr(splitter.get_space())[0].unique]) res = measure(dstest) if space: # will broadcast to desired length res.set_attr(space, ("%s->%s" % (train_chunks, test_chunks),)) # cleanup to free memory del dstest # compute measure stats if ca.is_enabled('stats'): if not hasattr(measure, '__summary_class__'): warning('%s has no __summary_class__ attribute -- ' 'necessary for computing transfer stats' % measure) else: stats = measure.__summary_class__( # hmm, might be unsupervised, i.e no targets... targets=res.sa[measure.get_space()].value, # XXX this should really accept the full dataset predictions=res.samples[:, 0], estimates = measure.ca.get('estimates', None)) ca.stats = stats if ca.is_enabled('training_stats'): if measure.ca.has_key("training_stats") \ and measure.ca.is_enabled("training_stats"): ca.training_stats = measure.ca.training_stats else: warning("'training_stats' conditional attribute was enabled, " "but the assigned measure '%s' either doesn't support " "it, or it is disabled" % measure) return res measure = property(fget=lambda self:self.__measure) splitter = property(fget=lambda self:self.__splitter) class FeaturewiseMeasure(Measure): """A per-feature-measure computed from a `Dataset` (base class). Should behave like a Measure. """ def _postcall(self, dataset, result): """Adjusts per-feature-measure for computed `result` """ # This method get the 'result' either as a 1D array, or as a Dataset # everything else is illegal if __debug__ \ and not isinstance(result, AttrDataset) \ and not len(result.shape) == 1: raise RuntimeError("FeaturewiseMeasures have to return " "their results as 1D array, or as a Dataset " "(error made by: '%s')." % repr(self)) return Measure._postcall(self, dataset, result) class StaticMeasure(Measure): """A static (assigned) sensitivity measure. Since implementation is generic it might be per feature or per whole dataset """ def __init__(self, measure=None, bias=None, *args, **kwargs): """Initialize. Parameters ---------- measure actual sensitivity to be returned bias optionally available bias """ Measure.__init__(self, *args, **kwargs) if measure is None: raise ValueError, "Sensitivity measure has to be provided" self.__measure = measure self.__bias = bias def __repr__(self, prefixes=[]): return super(StaticMeasure, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['measure', 'bias']) ) def _call(self, dataset): """Returns assigned sensitivity """ return self.__measure #XXX Might need to move into ConditionalAttribute? measure = property(fget=lambda self:self.__measure) bias = property(fget=lambda self:self.__bias) def _dont_force_slaves(slave_kwargs={}): """Helper to reset force_train in sensitivities with slaves """ # We should not (or even must not in case of SplitCLF) force # training of slave analyzers since they would be trained # anyways by the Boosted analyzer's train # TODO: consider at least a warning whenever it is provided # and is True slave_kwargs = slave_kwargs or {} # make new instance of default empty one slave_kwargs['force_train'] = slave_kwargs.get('force_train', False) return slave_kwargs # # Flavored implementations of FeaturewiseMeasures class Sensitivity(FeaturewiseMeasure): """Sensitivities of features for a given Classifier. """ _LEGAL_CLFS = [] """If Sensitivity is classifier specific, classes of classifiers should be listed in the list """ def __init__(self, clf, force_train=True, **kwargs): """Initialize the analyzer with the classifier it shall use. Parameters ---------- clf : `Classifier` classifier to use. force_train : bool Flag whether the learner will enforce training on the input dataset upon every call. """ """Does nothing special.""" # by default auto train kwargs['auto_train'] = kwargs.get('auto_train', True) FeaturewiseMeasure.__init__(self, force_train=force_train, **kwargs) _LEGAL_CLFS = self._LEGAL_CLFS if len(_LEGAL_CLFS) > 0: found = False for clf_class in _LEGAL_CLFS: if isinstance(clf, clf_class): found = True break if not found: raise ValueError, \ "Classifier %s has to be of allowed class (%s), but is %r" \ % (clf, _LEGAL_CLFS, type(clf)) self.__clf = clf """Classifier used to computed sensitivity""" def __repr__(self, prefixes=[]): return super(Sensitivity, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['clf']) + _repr_attrs(self, ['force_train'], default=True) ) @property def is_trained(self): return self.__clf.trained # """Train classifier on `dataset` and then compute actual sensitivity. # If the classifier is already trained it is possible to extract the # sensitivities without passing a dataset. # """ # # local bindings # clf = self.__clf # if clf.trained: # self._set_trained() # elif self._force_training: # if dataset is None: # raise ValueError, \ # "Training classifier to compute sensitivities requires " \ # "a dataset." # self.train(dataset) # return FeaturewiseMeasure.__call__(self, dataset) def _set_classifier(self, clf): self.__clf = clf def _train(self, dataset): clf = self.__clf if __debug__: debug("SA", "Training classifier %s on %s %s", (clf, dataset, {False: "since it wasn't yet trained", True: "although it was trained previously"} [clf.trained])) return clf.train(dataset) def _untrain(self): """Untrain corresponding classifier for Sensitivity """ if self.__clf is not None: self.__clf.untrain() super(Sensitivity, self)._untrain() @property def feature_ids(self): """Return feature_ids used by the underlying classifier """ return self.__clf._get_feature_ids() clf = property(fget=lambda self:self.__clf, fset=_set_classifier) class CombinedFeaturewiseMeasure(FeaturewiseMeasure): """Set sensitivity analyzers to be merged into a single output""" sensitivities = ConditionalAttribute(enabled=False, doc="Sensitivities produced by each analyzer") # XXX think again about combiners... now we have it in here and as # well as in the parent -- FeaturewiseMeasure # YYY because we don't use parent's _call. Needs RF def __init__(self, analyzers=None, # XXX should become actually 'measures' sa_attr='combinations', **kwargs): """Initialize CombinedFeaturewiseMeasure Parameters ---------- analyzers : list or None List of analyzers to be used. There is no logic to populate such a list in __call__, so it must be either provided to the constructor or assigned to .analyzers prior calling sa_attr : str Name of the sa to be populated with the indexes of combinations """ if analyzers is None: analyzers = [] self._sa_attr = sa_attr FeaturewiseMeasure.__init__(self, **kwargs) self.__analyzers = analyzers """List of analyzers to use""" def __repr__(self, prefixes=[]): return super(CombinedFeaturewiseMeasure, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['analyzers']) + _repr_attrs(self, ['sa_attr'], default='combinations') ) def _call(self, dataset): sensitivities = [] for ind, analyzer in enumerate(self.__analyzers): if __debug__: debug("SA", "Computing sensitivity for SA#%d:%s" % (ind, analyzer)) sensitivity = analyzer(dataset) sensitivities.append(sensitivity) if __debug__: debug("SA", "Returning %d sensitivities from %s" % (len(sensitivities), self.__class__.__name__)) sa_attr = self._sa_attr if isinstance(sensitivities[0], AttrDataset): smerged = None for i, s in enumerate(sensitivities): s.sa[sa_attr] = np.repeat(i, len(s)) if smerged is None: smerged = s else: smerged.append(s) sensitivities = smerged else: sensitivities = \ Dataset(sensitivities, sa={sa_attr: np.arange(len(sensitivities))}) self.ca.sensitivities = sensitivities return sensitivities def _untrain(self): """Untrain CombinedFDM """ if self.__analyzers is not None: for anal in self.__analyzers: anal.untrain() super(CombinedFeaturewiseMeasure, self)._untrain() ##REF: Name was automagically refactored def _set_analyzers(self, analyzers): """Set the analyzers """ self.__analyzers = analyzers """Analyzers to use""" analyzers = property(fget=lambda x:x.__analyzers, fset=_set_analyzers, doc="Used analyzers") class BoostedClassifierSensitivityAnalyzer(Sensitivity): """Set sensitivity analyzers to be merged into a single output""" # XXX we might like to pass parameters also for combined_analyzer @group_kwargs(prefixes=['slave_'], assign=True) def __init__(self, clf, analyzer=None, combined_analyzer=None, sa_attr='lrn_index', **kwargs): """Initialize Sensitivity Analyzer for `BoostedClassifier` Parameters ---------- clf : `BoostedClassifier` Classifier to be used analyzer : analyzer Is used to populate combined_analyzer sa_attr : str Name of the sa to be populated with the indexes of learners (passed to CombinedFeaturewiseMeasure is None is given in `combined_analyzer`) slave_* Arguments to pass to created analyzer if analyzer is None """ Sensitivity.__init__(self, clf, **kwargs) if analyzer is not None and len(self._slave_kwargs): raise ValueError, \ "Provide either analyzer of slave_* arguments, not both" # Do not force_train slave sensitivity since the dataset might # be inappropriate -- rely on the classifier being trained by # the extraction by the meta classifier itself self._slave_kwargs = _dont_force_slaves(self._slave_kwargs) if combined_analyzer is None: # sanitarize kwargs kwargs.pop('force_train', None) combined_analyzer = CombinedFeaturewiseMeasure(sa_attr=sa_attr, **kwargs) self.__combined_analyzer = combined_analyzer """Combined analyzer to use""" self.__analyzer = analyzer """Analyzer to use for basic classifiers within boosted classifier""" ## def __repr__(self, prefixes=[]): ## return super(BoostedClassifierSensitivityAnalyzer, self).__repr__( ## prefixes=prefixes ## + _repr_attrs(self, ['clf', 'analyzer', 'combined_analyzer']) ## + _repr_attrs(self, ['sa_attr'], default='combinations') ## ) def _untrain(self): """Untrain BoostedClassifierSensitivityAnalyzer """ if self.__analyzer is not None: self.__analyzer.untrain() self.__combined_analyzer.untrain() super(BoostedClassifierSensitivityAnalyzer, self)._untrain() def _call(self, dataset): analyzers = [] # create analyzers for clf in self.clf.clfs: if self.__analyzer is None: analyzer = clf.get_sensitivity_analyzer(**(self._slave_kwargs)) if analyzer is None: raise ValueError, \ "Wasn't able to figure basic analyzer for clf %r" % \ (clf,) if __debug__: debug("SA", "Selected analyzer %r for clf %r" % \ (analyzer, clf)) else: # XXX shallow copy should be enough... analyzer = copy.copy(self.__analyzer) # assign corresponding classifier analyzer.clf = clf # if clf was trained already - don't train again if clf.trained: analyzer._force_train = False analyzers.append(analyzer) self.__combined_analyzer.analyzers = analyzers # XXX not sure if we don't want to call directly ._call(dataset) to avoid # double application of transformers/combiners, after all we are just # 'proxying' here to combined_analyzer... # YOH: decided -- lets call ._call return self.__combined_analyzer._call(dataset) combined_analyzer = property(fget=lambda x:x.__combined_analyzer) class ProxyClassifierSensitivityAnalyzer(Sensitivity): """Set sensitivity analyzer output just to pass through""" clf_sensitivities = ConditionalAttribute(enabled=False, doc="Stores sensitivities of the proxied classifier") @group_kwargs(prefixes=['slave_'], assign=True) def __init__(self, clf, analyzer=None, **kwargs): """Initialize Sensitivity Analyzer for `BoostedClassifier` """ Sensitivity.__init__(self, clf, **kwargs) # _slave_kwargs is assigned due to assign=True in @group_kwargs if analyzer is not None and len(self._slave_kwargs): raise ValueError, \ "Provide either analyzer of slave_* arguments, not both" # Do not force_train slave sensitivity since the dataset might # be inappropriate -- rely on the classifier being trained by # the extraction by the meta classifier itself self._slave_kwargs = _dont_force_slaves(self._slave_kwargs) self.__analyzer = analyzer """Analyzer to use for basic classifiers within boosted classifier""" def _untrain(self): super(ProxyClassifierSensitivityAnalyzer, self)._untrain() if self.__analyzer is not None: self.__analyzer.untrain() def _call(self, dataset): # OPT: local bindings clfclf = self.clf.clf analyzer = self.__analyzer if analyzer is None: analyzer = clfclf.get_sensitivity_analyzer( **(self._slave_kwargs)) if analyzer is None: raise ValueError, \ "Wasn't able to figure basic analyzer for clf %s" % \ `clfclf` if __debug__: debug("SA", "Selected analyzer %s for clf %s" % \ (analyzer, clfclf)) # bind to the instance finally self.__analyzer = analyzer # TODO "remove" unnecessary things below on each call... # assign corresponding classifier analyzer.clf = clfclf # if clf was trained already - don't train again if clfclf.trained: analyzer._force_train = False result = analyzer._call(dataset) self.ca.clf_sensitivities = result return result analyzer = property(fget=lambda x:x.__analyzer) class BinaryClassifierSensitivityAnalyzer(ProxyClassifierSensitivityAnalyzer): """Set sensitivity analyzer output to have proper labels""" def _call(self, dataset): sens = super(self.__class__, self)._call(dataset) clf = self.clf targets_attr = clf.get_space() if targets_attr in sens.sa: # if labels are present -- transform them into meaningful tuples # (or not if just a single beast) am = AttributeMap(dict([(l, -1) for l in clf.neglabels] + [(l, +1) for l in clf.poslabels])) # XXX here we still can get a sensitivity per each label # (e.g. with SMLR as the slave clf), so I guess we should # tune up Multiclass...Analyzer to add an additional sa # And here we might need to check if asobjarray call is necessary # and should be actually done #asobjarray( sens.sa[targets_attr] = \ am.to_literal(sens.sa[targets_attr].value, recurse=True) return sens class RegressionAsClassifierSensitivityAnalyzer(ProxyClassifierSensitivityAnalyzer): """Set sensitivity analyzer output to have proper labels""" def _call(self, dataset): sens = super(RegressionAsClassifierSensitivityAnalyzer, self)._call(dataset) # We can have only a single sensitivity out of regression assert(sens.shape[0] == 1) clf = self.clf targets_attr = clf.get_space() if targets_attr not in sens.sa: # We just assign a tuple of all labels sorted labels = tuple(sorted(clf._trained_attrmap.values())) if len(clf._trained_attrmap): labels = clf._trained_attrmap.to_literal(labels, recurse=True) sens.sa[targets_attr] = asobjarray([labels]) return sens class FeatureSelectionClassifierSensitivityAnalyzer(ProxyClassifierSensitivityAnalyzer): pass class MappedClassifierSensitivityAnalyzer(ProxyClassifierSensitivityAnalyzer): """Set sensitivity analyzer output be reverse mapped using mapper of the slave classifier""" def _call(self, dataset): # incoming dataset need to be forward mapped dataset_mapped = self.clf.mapper(dataset) if __debug__: debug('SA', 'Mapped incoming dataset %s to %s' % (dataset_mapped, dataset)) sens = super(MappedClassifierSensitivityAnalyzer, self)._call(dataset_mapped) return self.clf.mapper.reverse(sens) def __str__(self): return _str(self, str(self.clf)) pymvpa2-2.2.0/mvpa2/measures/corrcoef.py000066400000000000000000000052741202542755000201500ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """FeaturewiseMeasure of correlation with the labels.""" __docformat__ = 'restructuredtext' from mvpa2.base import externals import numpy as np if externals.exists('scipy', raise_=True): # TODO: implement corrcoef optionally without scipy, e.g. np.corrcoef from scipy.stats import pearsonr from mvpa2.measures.base import FeaturewiseMeasure from mvpa2.datasets.base import Dataset class CorrCoef(FeaturewiseMeasure): """`FeaturewiseMeasure` that performs correlation with labels XXX: Explain me! """ is_trained = True """Indicate that this measure is always trained.""" def __init__(self, pvalue=False, attr='targets', **kwargs): """Initialize Parameters ---------- pvalue : bool Either to report p-value of pearsons correlation coefficient instead of pure correlation coefficient attr : str What attribut to correlate with """ # init base classes first FeaturewiseMeasure.__init__(self, **kwargs) self.__pvalue = int(pvalue) self.__attr = attr def _call(self, dataset): """Computes featurewise scores.""" attrdata = dataset.sa[self.__attr].value if ( np.issubdtype(attrdata.dtype, 'c') or np.issubdtype(attrdata.dtype, 'U') ): raise ValueError("Correlation coefficent measure is not meaningful " "for datasets with literal labels.") samples = dataset.samples pvalue_index = self.__pvalue result = np.empty((dataset.nfeatures,), dtype=float) for ifeature in xrange(dataset.nfeatures): samples_ = samples[:, ifeature] corr = pearsonr(samples_, attrdata) corrv = corr[pvalue_index] # Should be safe to assume 0 corr_coef (or 1 pvalue) if value # is actually NaN, although it might not be the case (covar of # 2 constants would be NaN although should be 1) if np.isnan(corrv): if np.var(samples_) == 0.0 and np.var(attrdata) == 0.0 \ and len(samples_): # constant terms corrv = 1.0 - pvalue_index else: corrv = pvalue_index result[ifeature] = corrv return Dataset(result[np.newaxis]) pymvpa2-2.2.0/mvpa2/measures/corrstability.py000066400000000000000000000063151202542755000212350ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """FeaturewiseMeasure of stability of labels across chunks based on correlation.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.measures.base import FeaturewiseMeasure class CorrStability(FeaturewiseMeasure): """`FeaturewiseMeasure` that assesses feature stability across runs for each unique label by correlating label activity for pairwise combinations of the chunks. If there are multiple samples with the same label in a single chunk (as is typically the case) this algorithm will take the featurewise average of the sample activations to get a single value per label, per chunk. """ def __init__(self, attr='targets', **kwargs): """Initialize Parameters ---------- attr : str Attribute to correlate across chunks. """ # init base classes first FeaturewiseMeasure.__init__(self, **kwargs) self.__attr = attr def _call(self, dataset): """Computes featurewise scores.""" # get the attributes (usally the labels) and the samples attrdata = eval('dataset.' + self.__attr) samples = dataset.samples # take mean within chunks dat = [] labels = [] chunks = [] for c in dataset.uniquechunks: for l in np.unique(attrdata): ind = (dataset.chunks==c)&(attrdata==l) if ind.sum() == 0: # no instances, so skip continue # append the mean, and the label/chunk info dat.append(samples[ind,:].mean(0)) labels.append(l) chunks.append(c) # convert to arrays dat = np.asarray(dat) labels = np.asarray(labels) chunks = np.asarray(chunks) # get indices for correlation (all pairwise values across # chunks) ind1 = [] ind2 = [] for i,c1 in enumerate(np.unique(chunks)[:-1]): for c2 in np.unique(chunks)[i+1:]: for l in np.unique(labels): v1 = np.where((chunks==c1)&(labels==l))[0] v2 = np.where((chunks==c2)&(labels==l))[0] if labels[v1] == labels[v2]: # the labels match, so add them ind1.extend(v1) ind2.extend(v2) # convert the indices to arrays ind1 = np.asarray(ind1) ind2 = np.asarray(ind2) # remove the mean from the datasets dat1 = dat[ind1,:] - dat[ind1,:].mean(0)[np.newaxis,:].repeat(dat[ind1,:].shape[0],0) dat2 = dat[ind2,:] - dat[ind2,:].mean(0)[np.newaxis,:].repeat(dat[ind2,:].shape[0],0) # calculate the correlation from the covariance and std covar = (dat1*dat2).mean(0) / dat1.std(0) * dat2.std(0) return covar pymvpa2-2.2.0/mvpa2/measures/ds.py000066400000000000000000000027611202542755000167520ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Dissimilarity measure. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.measures.base import Measure from mvpa2.misc.stats import DSMatrix class DSMMeasure(Measure): """DSMMeasure creates a Measure object where metric can be one of 'euclidean', 'spearman', 'pearson' or 'confusion'""" def __init__(self, dsmatrix, dset_metric, output_metric='spearman'): Measure.__init__(self) self.dsmatrix = dsmatrix self.dset_metric = dset_metric self.output_metric = output_metric self.dset_dsm = [] def __call__(self, dataset): # create the dissimilarity matrix for the data in the input dataset self.dset_dsm = DSMatrix(dataset.samples, self.dset_metric) in_vec = self.dsmatrix.get_vector_form() dset_vec = self.dset_dsm.get_vector_form() # concatenate the two vectors, send to dissimlarity function test_mat = np.asarray([in_vec, dset_vec]) test_dsmatrix = DSMatrix(test_mat, self.output_metric) # return correct dissimilarity value return test_dsmatrix.get_full_matrix()[0, 1] pymvpa2-2.2.0/mvpa2/measures/gnbsearchlight.py000066400000000000000000000174761202542755000213410ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """An efficient implementation of searchlight for GNB. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.dochelpers import borrowkwargs, _repr_attrs from mvpa2.misc.neighborhood import IndexQueryEngine, Sphere from mvpa2.measures.adhocsearchlightbase import \ SimpleStatBaseSearchlight, _STATS if __debug__: from mvpa2.base import debug import time as time __all__ = [ "GNBSearchlight", 'sphere_gnbsearchlight' ] class GNBSearchlight(SimpleStatBaseSearchlight): """Efficient implementation of Gaussian Naive Bayes `Searchlight`. This implementation takes advantage that :class:`~mvpa2.clfs.gnb.GNB` is "naive" in its reliance on massive univariate conditional probabilities of each feature given a target class. Plain :class:`~mvpa2.measures.searchlight.Searchlight` analysis approach asks for the same information over again and over again for the same feature in multiple "lights". So it becomes possible to drastically cut running time of a Searchlight by pre-computing basic statistics necessary used by GNB beforehand and then doing their subselection for a given split/feature set. Kudos for the idea and showing that it indeed might be beneficial over generic Searchlight with GNB go to Francisco Pereira. """ @borrowkwargs(SimpleStatBaseSearchlight, '__init__') def __init__(self, gnb, generator, qe, **kwargs): """Initialize a GNBSearchlight Parameters ---------- gnb : `GNB` `GNB` classifier as the specification of what GNB parameters to use. Instance itself isn't used. """ # init base class first SimpleStatBaseSearchlight.__init__(self, generator, qe, **kwargs) self._gnb = gnb self.__pl_train = None def __repr__(self, prefixes=[]): return super(GNBSearchlight, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['gnb']) ) def _get_space(self): return self.gnb.get_space() def _untrain(self): super(GNBSearchlight, self)._untrain() self.__pl_train = None def _reserve_pl_stats_space(self, shape): # per each label: to be (re)computed within each loop split # Let's try to reuse the memory though pl = self.__pl_train = _STATS() pl.sums = np.zeros(shape) pl.means = np.zeros(shape) # means of squares for stddev computation pl.sums2 = np.zeros(shape) pl.variances = np.zeros(shape) # degenerate dimension are added for easy broadcasting later on pl.nsamples = np.zeros(shape[:1] + (1,)*(len(shape)-1)) def _sl_call_on_a_split(self, split, X, training_sis, testing_sis, nroi_fids, roi_fids, indexsum_fx, labels_numeric, ): """Call to GNBSearchlight """ # Local bindings gnb = self.gnb params = gnb.params pl = self.__pl_train # we want to reuse the same storage across # splits training_nsamples, non0labels = \ self._compute_pl_stats(training_sis, pl) nlabels = len(pl.nsamples) if params.common_variance: pl.variances[:] = \ np.sum(pl.sums2 - pl.sums * pl.means, axis=0) \ / training_nsamples else: pl.variances[non0labels] = \ (pl.sums2 - pl.sums * pl.means)[non0labels] \ / pl.nsamples[non0labels] # assign priors priors = gnb._get_priors( nlabels, training_nsamples, pl.nsamples) # proceed in a way we have in GNB code with logprob=True, # i.e. operating within the exponents -- should lead to some # performance advantage norm_weight = -0.5 * np.log(2*np.pi*pl.variances) # last added dimension would be for ROIs logpriors = np.log(priors[:, np.newaxis, np.newaxis]) if __debug__: debug('SLC', " 'Training' is done") # Now it is time to "classify" our samples. # and for that we first need to compute corresponding # probabilities (or may be un data = X[split[1].samples[:, 0]] # argument of exponentiation scaled_distances = \ -0.5 * (((data - pl.means[:, np.newaxis, ...])**2) \ / pl.variances[:, np.newaxis, ...]) # incorporate the normalization from normals lprob_csfs = norm_weight[:, np.newaxis, ...] + scaled_distances ## First we need to reshape to get class x samples x features lprob_csf = lprob_csfs.reshape(lprob_csfs.shape[:2] + (-1,)) ## Now we come to naive part which requires looping ## through all spheres if __debug__: debug('SLC', " Doing 'Searchlight'") # resultant logprobs for each class x sample x roi lprob_cs_sl = np.zeros(lprob_csfs.shape[:2] + (nroi_fids,)) indexsum_fx(lprob_csf, roi_fids, out=lprob_cs_sl) lprob_cs_sl += logpriors lprob_cs_cp_sl = lprob_cs_sl # for each of the ROIs take the class with maximal (log)probability predictions = lprob_cs_cp_sl.argmax(axis=0) # no need to map back [self.ulabels[c] for c in winners] #predictions = winners targets = labels_numeric[testing_sis] return targets, predictions gnb = property(fget=lambda self: self._gnb) @borrowkwargs(GNBSearchlight, '__init__', exclude=['roi_ids']) def sphere_gnbsearchlight(gnb, generator, radius=1, center_ids=None, space='voxel_indices', *args, **kwargs): """Creates a `GNBSearchlight` to assess :term:`cross-validation` classification performance of GNB on all possible spheres of a certain size within a dataset. The idea of taking advantage of naiveness of GNB for the sake of quick searchlight-ing stems from Francisco Pereira (paper under review). Parameters ---------- radius : float All features within this radius around the center will be part of a sphere. center_ids : list of int List of feature ids (not coordinates) the shall serve as sphere centers. By default all features will be used (it is passed roi_ids argument for Searchlight). space : str Name of a feature attribute of the input dataset that defines the spatial coordinates of all features. **kwargs In addition this class supports all keyword arguments of :class:`~mvpa2.measures.gnbsearchlight.GNBSearchlight`. Notes ----- If any `BaseSearchlight` is used as `SensitivityAnalyzer` one has to make sure that the specified scalar `Measure` returns large (absolute) values for high sensitivities and small (absolute) values for low sensitivities. Especially when using error functions usually low values imply high performance and therefore high sensitivity. This would in turn result in sensitivity maps that have low (absolute) values indicating high sensitivities and this conflicts with the intended behavior of a `SensitivityAnalyzer`. """ # build a matching query engine from the arguments kwa = {space: Sphere(radius)} qe = IndexQueryEngine(**kwa) # init the searchlight with the queryengine return GNBSearchlight(gnb, generator, qe, roi_ids=center_ids, *args, **kwargs) pymvpa2-2.2.0/mvpa2/measures/irelief.py000066400000000000000000000417601202542755000177650ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Copyright (c) 2008 Emanuele Olivetti # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """FeaturewiseMeasure performing multivariate Iterative RELIEF (I-RELIEF) algorithm. See : Y. Sun, Iterative RELIEF for Feature Weighting: Algorithms, Theories, and Applications, IEEE Trans. on Pattern Analysis and Machine Intelligence (TPAMI), vol. 29, no. 6, pp. 1035-1051, June 2007.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.datasets import Dataset from mvpa2.measures.base import FeaturewiseMeasure from mvpa2.kernels.np import ExponentialKernel from mvpa2.clfs.distance import pnorm_w if __debug__: from mvpa2.base import debug class IterativeRelief_Devel(FeaturewiseMeasure): """`FeaturewiseMeasure` that performs multivariate I-RELIEF algorithm. Batch version allowing various kernels. UNDER DEVELOPMENT. Batch I-RELIEF-2 feature weighting algorithm. Works for binary or multiclass class-labels. Batch version with complexity O(T*N^2*I), where T is the number of iterations, N the number of instances, I the number of features. See: Y. Sun, Iterative RELIEF for Feature Weighting: Algorithms, Theories, and Applications, IEEE Trans. on Pattern Analysis and Machine Intelligence (TPAMI), vol. 29, no. 6, pp. 1035-1051, June 2007. http://plaza.ufl.edu/sunyijun/Paper/PAMI_1.pdf Note that current implementation allows to use only exponential-like kernels. Support for linear kernel will be added later. """ is_trained = True """Indicate that this measure doesn't have to be trained""" def __init__(self, threshold = 1.0e-2, kernel = None, kernel_width = 1.0, w_guess = None, **kwargs): """Constructor of the IRELIEF class. """ # init base classes first FeaturewiseMeasure.__init__(self, **kwargs) # Threshold in W changes (stopping criterion for irelief) self.threshold = threshold if kernel == None: self.kernel = ExponentialKernel else: self.kernel = kernel self.w_guess = w_guess self.w = None self.kernel_width = kernel_width def compute_M_H(self, label): """Compute hit/miss dictionaries. For each instance compute the set of indices having the same class label and different class label. Note that this computation is independent of the number of features. """ M = {} H = {} for i in range(label.size): M[i] = np.where(label != label[i])[0] tmp = (np.where(label == label[i])[0]).tolist() tmp.remove(i) # There must be at least two exampls for class label[i] assert(tmp != []) H[i] = np.array(tmp) return M, H def _call(self, dataset): """Computes featurewise I-RELIEF weights.""" samples = dataset.samples NS, NF = samples.shape[:2] if self.w_guess == None: self.w = np.ones(NF, 'd') # do normalization in all cases to be safe :) self.w = self.w/(self.w**2).sum() M, H = self.compute_M_H(dataset.targets) while True: self.k = self.kernel(length_scale = self.kernel_width/self.w) d_w_k = self.k.computed(samples).as_raw_np() # set d_w_k to zero where distance=0 (i.e. kernel == # 1.0), otherwise I-RELIEF could not converge. # XXX Note that kernel==1 for distance=0 only for # exponential kernels!! IMPROVE d_w_k[np.abs(d_w_k-1.0) < 1.0e-15] = 0.0 ni = np.zeros(NF, 'd') for n in range(NS): # d_w_k[n,n] could be omitted since == 0.0 gamma_n = 1.0 - np.nan_to_num(d_w_k[n, M[n]].sum() \ / (d_w_k[n, :].sum()-d_w_k[n, n])) alpha_n = np.nan_to_num(d_w_k[n, M[n]]/(d_w_k[n, M[n]].sum())) beta_n = np.nan_to_num(d_w_k[n, H[n]]/(d_w_k[n, H[n]].sum())) m_n = (np.abs(samples[n, :] - samples[M[n], :]) \ * alpha_n[:, None]).sum(0) h_n = (np.abs(samples[n, :] - samples[H[n], :]) \ * beta_n[:, None]).sum(0) ni += gamma_n*(m_n-h_n) ni = ni/NS ni_plus = np.clip(ni, 0.0, np.inf) # set all negative elements to zero w_new = np.nan_to_num(ni_plus/(np.sqrt((ni_plus**2).sum()))) change = np.abs(w_new-self.w).sum() if __debug__ and 'IRELIEF' in debug.active: debug('IRELIEF', "change=%.4f max=%f min=%.4f mean=%.4f std=%.4f #nan=%d" % (change, w_new.max(), w_new.min(), w_new.mean(), w_new.std(), np.isnan(w_new).sum())) # update weights: self.w = w_new if change < self.threshold: break return Dataset(self.w[np.newaxis]) class IterativeReliefOnline_Devel(IterativeRelief_Devel): """`FeaturewiseMeasure` that performs multivariate I-RELIEF algorithm. Online version. UNDER DEVELOPMENT Online version with complexity O(T*N*I), where N is the number of instances and I the number of features. See: Y. Sun, Iterative RELIEF for Feature Weighting: Algorithms, Theories, and Applications, IEEE Trans. on Pattern Analysis and Machine Intelligence (TPAMI), vol. 29, no. 6, pp. 1035-1051, June 2007. http://plaza.ufl.edu/sunyijun/Paper/PAMI_1.pdf Note that this implementation is not fully online, since hit and miss dictionaries (H,M) are computed once at the beginning using full access to all labels. This can be easily corrected to a full online implementation. But this is not mandatory now since the major goal of this current online implementation is reduction of computational complexity. """ is_trained = True """Indicate that this measure doesn't have to be trained""" def __init__(self, a=5.0, permute=True, max_iter=3, **kwargs): """Constructor of the IRELIEF class. """ # init base classes first IterativeRelief_Devel.__init__(self, **kwargs) self.a = a # parameter of the learning rate self.permute = permute # shuffle data when running I-RELIEF self.max_iter = max_iter # maximum number of iterations def _call(self, dataset): """Computes featurewise I-RELIEF-2 weights. Online version.""" NS = dataset.samples.shape[0] NF = dataset.samples.shape[1] if self.w_guess == None: self.w = np.ones(NF, 'd') # do normalization in all cases to be safe :) self.w = self.w/(self.w**2).sum() M, H = self.compute_M_H(dataset.targets) ni = np.zeros(NF, 'd') pi = np.zeros(NF, 'd') if self.permute: # indices to go through samples in random order random_sequence = np.random.permutation(NS) else: random_sequence = np.arange(NS) change = self.threshold + 1.0 iteration = 0 counter = 0.0 while change > self.threshold and iteration < self.max_iter: if __debug__: debug('IRELIEF', "Iteration %d" % iteration) for t in range(NS): counter += 1.0 n = random_sequence[t] self.k = self.kernel(length_scale = self.kernel_width/self.w) d_w_k_xn_Mn = self.k.computed(dataset.samples[None, n, :], dataset.samples[M[n], :]).as_raw_np().squeeze() d_w_k_xn_Mn_sum = d_w_k_xn_Mn.sum() d_w_k_xn_x = self.k.computed(dataset.samples[None, n, :], dataset.samples).as_raw_np().squeeze() gamma_n = 1.0 - d_w_k_xn_Mn_sum / d_w_k_xn_x.sum() alpha_n = d_w_k_xn_Mn / d_w_k_xn_Mn_sum d_w_k_xn_Hn = self.k.computed(dataset.samples[None, n, :], dataset.samples[H[n], :]).as_raw_np().squeeze() beta_n = d_w_k_xn_Hn / d_w_k_xn_Hn.sum() m_n = (np.abs(dataset.samples[n, :] - dataset.samples[M[n], :]) \ * alpha_n[:, np.newaxis]).sum(0) h_n = (np.abs(dataset.samples[n, :] - dataset.samples[H[n], :]) \ * beta_n[:, np.newaxis]).sum(0) pi = gamma_n * (m_n-h_n) learning_rate = 1.0 / (counter * self.a + 1.0) ni_new = ni + learning_rate * (pi - ni) ni = ni_new # set all negative elements to zero ni_plus = np.clip(ni, 0.0, np.inf) w_new = np.nan_to_num(ni_plus / (np.sqrt((ni_plus ** 2).sum()))) change = np.abs(w_new - self.w).sum() if t % 10 == 0 and __debug__ and 'IRELIEF' in debug.active: debug('IRELIEF', "t=%d change=%.4f max=%f min=%.4f mean=%.4f std=%.4f" " #nan=%d" % (t, change, w_new.max(), w_new.min(), w_new.mean(), w_new.std(), np.isnan(w_new).sum())) self.w = w_new if change < self.threshold and iteration > 0: break iteration += 1 return Dataset(self.w[np.newaxis]) class IterativeRelief(FeaturewiseMeasure): """`FeaturewiseMeasure` that performs multivariate I-RELIEF algorithm. Batch version. Batch I-RELIEF-2 feature weighting algorithm. Works for binary or multiclass class-labels. Batch version with complexity O(T*N^2*I), where T is the number of iterations, N the number of instances, I the number of features. References ---------- Y. Sun, Iterative RELIEF for Feature Weighting: Algorithms, Theories, and Applications, IEEE Trans. on Pattern Analysis and Machine Intelligence (TPAMI), vol. 29, no. 6, pp. 1035-1051, June 2007. http://plaza.ufl.edu/sunyijun/Paper/PAMI_1.pdf Note that current implementation allows to use only exponential-like kernels. Support for linear kernel will be added later. """ is_trained = True """Indicate that this measure doesn't have to be trained""" def __init__(self, threshold=1.0e-2, kernel_width=1.0, w_guess=None, **kwargs): """Constructor of the IRELIEF class. """ # init base classes first FeaturewiseMeasure.__init__(self, **kwargs) # Threshold in W changes (stopping criterion for irelief). self.threshold = threshold self.w_guess = w_guess self.w = None self.kernel_width = kernel_width def compute_M_H(self, label): """Compute hit/miss dictionaries. For each instance compute the set of indices having the same class label and different class label. Note that this computation is independent of the number of features. XXX should it be some generic function since it doesn't use self """ M = {} H = {} for i in range(label.size): M[i] = np.where(label != label[i])[0] tmp = (np.where(label == label[i])[0]).tolist() tmp.remove(i) # There must be least two exampls for class label[i] assert(tmp != []) H[i] = np.array(tmp) return M, H def k(self, distances): """Exponential kernel.""" kd = np.exp(-distances/self.kernel_width) # set kd to zero where distance=0 otherwise I-RELIEF could not converge. kd[np.abs(distances) < 1.0e-15] = 0.0 return kd def _call(self, dataset): """Computes featurewise I-RELIEF weights.""" samples = dataset.samples NS, NF = samples.shape[:2] if self.w_guess == None: w = np.ones(NF, 'd') w /= (w ** 2).sum() # do normalization in all cases to be safe :) M, H = self.compute_M_H(dataset.targets) while True: d_w_k = self.k(pnorm_w(data1=samples, weight=w, p=1)) ni = np.zeros(NF, 'd') for n in range(NS): # d_w_k[n, n] could be omitted since == 0.0 gamma_n = 1.0 - np.nan_to_num(d_w_k[n, M[n]].sum() \ / (d_w_k[n, :].sum() - d_w_k[n, n])) alpha_n = np.nan_to_num(d_w_k[n, M[n]] / (d_w_k[n, M[n]].sum())) beta_n = np.nan_to_num(d_w_k[n, H[n]] / (d_w_k[n, H[n]].sum())) m_n = (np.abs(samples[n, :] - samples[M[n], :]) \ * alpha_n[:, None]).sum(0) h_n = (np.abs(samples[n, :] - samples[H[n], :]) \ * beta_n[:, None]).sum(0) ni += gamma_n*(m_n - h_n) ni = ni / NS ni_plus = np.clip(ni, 0.0, np.inf) # set all negative elements to zero w_new = np.nan_to_num(ni_plus / (np.sqrt((ni_plus**2).sum()))) change = np.abs(w_new - w).sum() if __debug__ and 'IRELIEF' in debug.active: debug('IRELIEF', "change=%.4f max=%f min=%.4f mean=%.4f std=%.4f #nan=%d" \ % (change, w_new.max(), w_new.min(), w_new.mean(), w_new.std(), np.isnan(w_new).sum())) # update weights: w = w_new if change < self.threshold: break self.w = w return Dataset(self.w[np.newaxis]) class IterativeReliefOnline(IterativeRelief): """`FeaturewiseMeasure` that performs multivariate I-RELIEF algorithm. Online version. This algorithm is exactly the one in the referenced paper (I-RELIEF-2 online), using weighted 1-norm and Exponential Kernel. """ is_trained = True """Indicate that this measure doesn't have to be trained""" def __init__(self, a=10.0, permute=True, max_iter=3, **kwargs): """Constructor of the IRELIEF class. """ # init base classes first IterativeRelief.__init__(self, **kwargs) self.a = a # parameter of the learning rate self.permute = permute # shuffle data when running I-RELIEF self.max_iter = max_iter # maximum number of iterations def _call(self, dataset): """Computes featurewise I-RELIEF-2 weights. Online version.""" # local bindings samples = dataset.samples NS, NF = samples.shape[:2] threshold = self.threshold a = self.a if self.w_guess == None: w = np.ones(NF, 'd') # do normalization in all cases to be safe :) w /= (w ** 2).sum() M, H = self.compute_M_H(dataset.targets) ni = np.zeros(NF, 'd') pi = np.zeros(NF, 'd') if self.permute: # indices to go through x in random order random_sequence = np.random.permutation(NS) else: random_sequence = np.arange(NS) change = threshold + 1.0 iteration = 0 counter = 0.0 while change > threshold and iteration < self.max_iter: if __debug__: debug('IRELIEF', "Iteration %d" % iteration) for t in range(NS): counter += 1.0 n = random_sequence[t] d_xn_x = np.abs(samples[n, :] - samples) d_w_k_xn_x = self.k((d_xn_x * w).sum(1)) d_w_k_xn_Mn = d_w_k_xn_x[M[n]] d_w_k_xn_Mn_sum = d_w_k_xn_Mn.sum() gamma_n = 1.0 - d_w_k_xn_Mn_sum / d_w_k_xn_x.sum() alpha_n = d_w_k_xn_Mn / d_w_k_xn_Mn_sum d_w_k_xn_Hn = d_w_k_xn_x[H[n]] beta_n = d_w_k_xn_Hn / d_w_k_xn_Hn.sum() m_n = (d_xn_x[M[n], :] * alpha_n[:, None]).sum(0) h_n = (d_xn_x[H[n], :] * beta_n[:, None]).sum(0) pi = gamma_n * (m_n - h_n) learning_rate = 1.0 / (counter * a + 1.0) ni_new = ni + learning_rate * (pi - ni) ni = ni_new # set all negative elements to zero ni_plus = np.clip(ni, 0.0, np.inf) w_new = np.nan_to_num(ni_plus / (np.sqrt((ni_plus ** 2).sum()))) change = np.abs(w_new - w).sum() if t % 10 == 0 and __debug__ and 'IRELIEF' in debug.active: debug('IRELIEF', "t=%d change=%.4f max=%f min=%.4f mean=%.4f std=%.4f" " #nan=%d" % (t, change, w_new.max(), w_new.min(), w_new.mean(), w_new.std(), np.isnan(w_new).sum())) w = w_new if change < threshold and iteration > 0: break iteration += 1 self.w = w return Dataset(self.w[np.newaxis]) pymvpa2-2.2.0/mvpa2/measures/ismooth.py000066400000000000000000000046371202542755000200320ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """iSmooth - An intelligent smoothing measure. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.measures.base import Measure from mvpa2.datasets.base import Dataset from mvpa2.mappers.zscore import zscore import copy from numpy.linalg import LinAlgError class iSmooth(Measure): """iSmooth smooths a Dataset using searchlight params: model = 'regression' or 'correlation' correlation code is commented for speed(?) cthresh = minimum variance threshold to change timeseries default=0.10 if -1 is given, then the weight is defaulted to 4mm FWMH Gaussian kernel weight for 3mm voxels, which is 0.241275 '""" def __init__(self, model='regression', cthresh=0.10): Measure.__init__(self) self.cthresh = cthresh self.model = model def __call__(self, dataset): #if self.model == 'correlation': # orig_ds = copy.deepcopy(dataset) # zscore(orig_ds, chunks_attr=None) # ref_ts = orig_ds[:,orig_ds.fa.roi_seed].samples # corrs = np.mat(ref_ts).T*np.mat(orig_ds.samples)/orig_ds.nsamples # corrs[np.isnan(corrs)] = 0 # corrs[abs(corrs)= self.cthresh: if self.cthresh>=0: ym = (y + r*(X*Xi*y))/(1+r) else: ym = (0.241275*y + 0.758725*(X*Xi*y)) return Dataset(np.asarray(ym)) else: return Dataset(np.asarray(y)) pymvpa2-2.2.0/mvpa2/measures/nnsearchlight.py000066400000000000000000000147221202542755000211750ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """An efficient implementation of searchlight for M1NN. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base.dochelpers import borrowkwargs, _repr_attrs from mvpa2.misc.neighborhood import IndexQueryEngine, Sphere from mvpa2.clfs.distance import squared_euclidean_distance from mvpa2.measures.adhocsearchlightbase import SimpleStatBaseSearchlight, \ _STATS if __debug__: from mvpa2.base import debug import time as time __all__ = [ "M1NNSearchlight", 'sphere_m1nnsearchlight' ] class M1NNSearchlight(SimpleStatBaseSearchlight): """Efficient implementation of Mean-Nearest-Neighbor `Searchlight`. """ @borrowkwargs(SimpleStatBaseSearchlight, '__init__') def __init__(self, knn, generator, qe, **kwargs): """Initialize a M1NNSearchlight TODO -- example? or just kill altogether rethink providing knn sample vs specifying all parameters explicitly Parameters ---------- knn : `kNN` Used to fetch space and dfx settings. TODO """ # verify that desired features are supported if knn.dfx != squared_euclidean_distance: raise ValueError( "%s distance function is not yet supported by M1NNSearchlight" % (knn.dfx,)) # init base class first SimpleStatBaseSearchlight.__init__(self, generator, qe, **kwargs) self._knn = knn self.__pl_train = self.__pl_test = None def __repr__(self, prefixes=[]): return super(M1NNSearchlight, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['knn']) ) def _get_space(self): return self.knn.get_space() def _untrain(self): super(M1NNSearchlight, self)._untrain() self.__pl_train = self.__pl_test = None def _reserve_pl_stats_space(self, shape): # per each label: to be (re)computed within each loop split # Let's try to reuse the memory though self.__pl_train = _STATS() self.__pl_test = _STATS() for pl in (self.__pl_train, self.__pl_test): pl.sums = np.zeros(shape) pl.means = np.zeros(shape) # means of squares for stddev computation pl.sums2 = np.zeros(shape) pl.variances = np.zeros(shape) # degenerate dimension are added for easy broadcasting later on pl.nsamples = np.zeros(shape[:1] + (1,)*(len(shape)-1)) def _sl_call_on_a_split(self, split, X, training_sis, testing_sis, nroi_fids, roi_fids, indexsum_fx, labels_numeric, ): """Call to M1NNSearchlight """ # Local bindings knn = self.knn params = knn.params pl_train = self.__pl_train pl_test = self.__pl_test training_nsamples, training_non0labels = \ self._compute_pl_stats(training_sis, pl_train) testing_nsamples, testing_non0labels = \ self._compute_pl_stats(testing_sis, pl_test) nlabels = len(pl_train.nsamples) assert(len(np.unique(labels_numeric)) == nlabels) assert(training_non0labels == slice(None)) # not sure/tested if we can handle this one assert(testing_non0labels == slice(None)) # not sure/tested if we can handle this one # squared distances between the means... # hm, but we need for each combination of labels # so we keep 0th dimension corresponding to test "samples/labels" diff_pl_pl = pl_test.means[:, None] - pl_train.means[None,:] diff_pl_pl2 = np.square(diff_pl_pl) # XXX OPT: is it worth may be reserving the space beforehand? diff_pl_pl2_sl = np.zeros(diff_pl_pl2.shape[:-1] + (nroi_fids,)) indexsum_fx(diff_pl_pl2, roi_fids, out=diff_pl_pl2_sl) # predictions are just the labels with minimal distance predictions = np.argmin(diff_pl_pl2_sl, axis=1) return np.asanyarray(self._ulabels_numeric), predictions knn = property(fget=lambda self: self._knn) @borrowkwargs(M1NNSearchlight, '__init__', exclude=['roi_ids']) def sphere_m1nnsearchlight(gnb, generator, radius=1, center_ids=None, space='voxel_indices', *args, **kwargs): """Creates a `M1NNSearchlight` to assess :term:`cross-validation` classification performance of M1NN on all possible spheres of a certain size within a dataset. The idea of taking advantage of naiveness of M1NN for the sake of quick searchlight-ing stems from Francisco Pereira (paper under review). Parameters ---------- radius : float All features within this radius around the center will be part of a sphere. center_ids : list of int List of feature ids (not coordinates) the shall serve as sphere centers. By default all features will be used (it is passed roi_ids argument for Searchlight). space : str Name of a feature attribute of the input dataset that defines the spatial coordinates of all features. **kwargs In addition this class supports all keyword arguments of :class:`~mvpa2.measures.nnsearchlight.M1NNSearchlight`. Notes ----- If any `BaseSearchlight` is used as `SensitivityAnalyzer` one has to make sure that the specified scalar `Measure` returns large (absolute) values for high sensitivities and small (absolute) values for low sensitivities. Especially when using error functions usually low values imply high performance and therefore high sensitivity. This would in turn result in sensitivity maps that have low (absolute) values indicating high sensitivities and this conflicts with the intended behavior of a `SensitivityAnalyzer`. """ # build a matching query engine from the arguments kwa = {space: Sphere(radius)} qe = IndexQueryEngine(**kwa) # init the searchlight with the queryengine return M1NNSearchlight(gnb, generator, qe, roi_ids=center_ids, *args, **kwargs) pymvpa2-2.2.0/mvpa2/measures/noiseperturbation.py000066400000000000000000000103161202542755000221130ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """This is a `FeaturewiseMeasure` that uses a scalar `Measure` and selective noise perturbation to compute a sensitivity map. """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug from mvpa2.support.copy import deepcopy import numpy as np from mvpa2.measures.base import FeaturewiseMeasure from mvpa2.datasets.base import Dataset class NoisePerturbationSensitivity(FeaturewiseMeasure): """Sensitivity based on the effect of noise perturbation on a measure. This is a `FeaturewiseMeasure` that uses a scalar `Measure` and selective noise perturbation to compute a sensitivity map. First the scalar `Measure` computed using the original dataset. Next the data measure is computed multiple times each with a single feature in the dataset perturbed by noise. The resulting difference in the scalar `Measure` is used as the sensitivity for the respective perturbed feature. Large differences are treated as an indicator of a feature having great impact on the scalar `Measure`. Notes ----- The computed sensitivity map might have positive and negative values! """ is_trained = True """Indicate that this measure is always trained.""" def __init__(self, datameasure, noise=np.random.normal): """ Parameters ---------- datameasure : `Measure` Used to quantify the effect of noise perturbation. noise: Callable Used to generate noise. The noise generator has to return an 1d array of n values when called the `size=n` keyword argument. This is the default interface of the random number generators in NumPy's `random` module. """ # init base classes first FeaturewiseMeasure.__init__(self) self.__datameasure = datameasure self.__noise = noise def _call(self, dataset): # first cast to floating point dtype, because noise is most likely # floating point as well and '+=' on int would not do the right thing if not np.issubdtype(dataset.samples.dtype, np.float): ds = dataset.copy(deep=False) ds.samples = dataset.samples.astype('float32') dataset = ds if __debug__: nfeatures = dataset.nfeatures # using a list here, to be able to handle output of unknown # dimensionality sens_map = [] # compute the datameasure on the original dataset # this is used as a baseline orig_measure = self.__datameasure(dataset) # do for every _single_ feature in the dataset for feature in xrange(dataset.nfeatures): if __debug__: debug('PSA', "Analyzing %i features: %i [%i%%]" \ % (nfeatures, feature+1, float(feature+1)/nfeatures*100,), cr=True) # store current feature to restore it later on current_feature = dataset.samples[:, feature].copy() # add noise to current feature dataset.samples[:, feature] += self.__noise(size=len(dataset)) # compute the datameasure on the perturbed dataset perturbed_measure = self.__datameasure(dataset) # restore the current feature dataset.samples[:, feature] = current_feature # difference from original datameasure is sensitivity sens_map.append(perturbed_measure.samples - orig_measure.samples) if __debug__: debug('PSA', '') # turn into an array and get rid of unnecessary axes -- ideally yielding # 2D array sens_map = np.array(sens_map).squeeze() # swap first to axis: we have nfeatures on first but want it as second # in a dataset sens_map = np.swapaxes(sens_map, 0, 1) return Dataset(sens_map) pymvpa2-2.2.0/mvpa2/measures/pls.py000066400000000000000000000032141202542755000171340ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PLS is not yet implemented """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.measures.base import FeaturewiseMeasure if __debug__: from mvpa2.base import debug class PLS(FeaturewiseMeasure): def __init__(self, num_permutations=200, num_bootstraps=100, **kwargs): raise NotImplemented, 'PLS was not yet implemented fully' # init base classes first FeaturewiseMeasure.__init__(self, **kwargs) # save the args for the analysis self.num_permutations = num_permutations self.num_bootstraps = num_bootstraps def _calc_pls(self,mat,labels): # take mean within condition(label) and concat to make a # condition by features matrix X = [] for ul in np.unique(labels): X.append(mat[labels==ul].mean(axis=0)) X = np.asarray(X) # center each condition by subtracting the grand mean X -= X.mean(axis=1)[:,np.newaxis].repeat(X.shape[1],axis=1) # run SVD (checking to transpose if necessary) U,s,Vh = np.linalg.svd(X, full_matrices=0) # run procrust to reorder if necessary def _procrust(): pass def _call(self,dataset): # pass class TaskPLS(PLS): pass pymvpa2-2.2.0/mvpa2/measures/rsm.py000066400000000000000000000062751202542755000171510ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Similarity measure correlation computed over all subjects """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.measures.base import Measure from mvpa2.misc.stats import DSMatrix from mvpa2.datasets.base import Dataset import copy class RSMMeasure(Measure): """RSMMeasure creates a DatasetMeasure object where metric can be one of 'euclidean', 'spearman', 'pearson' or 'confusion' and nsubjs has to be number of subjects and compare_ave flag determines whether to correlate with average of all other subjects or just one-to-one k should be 0 to n 0-to use DSM including diagonal """ def __init__(self, dset_metric, nsubjs, compare_ave, k, **kwargs): Measure.__init__(self, **kwargs) self.dset_metric = dset_metric self.dset_dsm = [] self.nsubjs = nsubjs self.compare_ave = compare_ave self.k = k def __call__(self, dataset): dsm_all = [] rsm_all = [] nsubjs = self.nsubjs # create the dissimilarity matrix for each subject's data in the input dataset ''' TODO: How to handle Nan? should we uncomment the workarounds? ''' for i in xrange(nsubjs): if self.dset_metric == 'pearson': self.dset_dsm = np.corrcoef(dataset.samples[i*dataset.nsamples/nsubjs:((i+1)*dataset.nsamples/nsubjs),:]) else: self.dset_dsm = DSMatrix(dataset.samples[i*dataset.nsamples/nsubjs:((i+1)*dataset.nsamples/nsubjs),:], self.dset_metric) self.dset_dsm = self.dset_dsm.full_matrix orig_dsmatrix = copy.deepcopy(np.matrix(self.dset_dsm)) #orig_dsmatrix[np.isnan(orig_dsmatrix)] = 0 #orig_dsmatrix[orig_dsmatrix == 0] = -2 #orig_tri = np.triu(orig_dsmatrix, k=self.k) #vector_form = orig_tri[abs(orig_tri) > 0] #vector_form[vector_form == -2] = 0 vector_form = orig_dsmatrix[np.tri(len(orig_dsmatrix),k=-1*self.k,dtype=bool)] vector_form = np.asarray(vector_form) dset_vec = vector_form[0] dsm_all.append(dset_vec) dsm_all = np.vstack(dsm_all) #print dsm_all.shape if self.compare_ave: for i in xrange(nsubjs): dsm_temp = nsubjs*np.mean(dsm_all, axis=0) - dsm_all[i,:] rsm = np.corrcoef(dsm_temp, dsm_all[i,:]) rsm_all.append(rsm[0,1]) else: rsm = np.corrcoef(dsm_all) rsm = np.matrix(rsm) #rsm[np.isnan(rsm)] = 0 #rsm[rsm == 0] = -2 #rsm = np.triu(rsm, k=1) #rsm = rsm[abs(rsm) > 0] #rsm[rsm == -2] = 0 rsm = rsm[np.tri(len(rsm),k=-1,dtype=bool)] rsm = np.asarray(rsm) rsm_all = rsm[0] return Dataset(rsm_all) pymvpa2-2.2.0/mvpa2/measures/searchlight.py000066400000000000000000000547101202542755000206420ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Implementation of the Searchlight algorithm""" __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug import numpy as np import tempfile, os from mvpa2.base import externals, warning from mvpa2.base.dochelpers import borrowkwargs, _repr_attrs from mvpa2.base.types import is_datasetlike if externals.exists('h5py'): # Is optionally required for passing searchlight # results via storing/reloading hdf5 files from mvpa2.base.hdf5 import h5save, h5load from mvpa2.datasets import hstack, Dataset from mvpa2.support import copy from mvpa2.featsel.base import StaticFeatureSelection from mvpa2.measures.base import Measure from mvpa2.base.state import ConditionalAttribute from mvpa2.misc.neighborhood import IndexQueryEngine, Sphere class BaseSearchlight(Measure): """Base class for searchlights. The idea for a searchlight algorithm stems from a paper by :ref:`Kriegeskorte et al. (2006) `. """ roi_sizes = ConditionalAttribute(enabled=False, doc="Number of features in each ROI.") roi_feature_ids = ConditionalAttribute(enabled=False, doc="Feature IDs for all generated ROIs.") is_trained = True """Indicate that this measure is always trained.""" def __init__(self, queryengine, roi_ids=None, nproc=None, **kwargs): """ Parameters ---------- queryengine : QueryEngine Engine to use to discover the "neighborhood" of each feature. See :class:`~mvpa2.misc.neighborhood.QueryEngine`. roi_ids : None or list(int) or str List of feature ids (not coordinates) the shall serve as ROI seeds (e.g. sphere centers). Alternatively, this can be the name of a feature attribute of the input dataset, whose non-zero values determine the feature ids. By default all features will be used. nproc : None or int How many processes to use for computation. Requires `pprocess` external module. If None -- all available cores will be used. **kwargs In addition this class supports all keyword arguments of its base-class :class:`~mvpa2.measures.base.Measure`. """ Measure.__init__(self, **kwargs) if nproc is not None and nproc > 1 and not externals.exists('pprocess'): raise RuntimeError("The 'pprocess' module is required for " "multiprocess searchlights. Please either " "install python-pprocess, or reduce `nproc` " "to 1 (got nproc=%i)" % nproc) self._queryengine = queryengine if roi_ids is not None and not isinstance(roi_ids, str) \ and not len(roi_ids): raise ValueError, \ "Cannot run searchlight on an empty list of roi_ids" self.__roi_ids = roi_ids self.nproc = nproc def __repr__(self, prefixes=[]): """String representation of a `Measure` Includes only arguments which differ from default ones """ return super(BaseSearchlight, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['queryengine', 'roi_ids', 'nproc'])) def _call(self, dataset): """Perform the ROI search. """ # local binding nproc = self.nproc if nproc is None and externals.exists('pprocess'): import pprocess try: nproc = pprocess.get_number_of_cores() or 1 except AttributeError: warning("pprocess version %s has no API to figure out maximal " "number of cores. Using 1" % externals.versions['pprocess']) nproc = 1 # train the queryengine self._queryengine.train(dataset) # decide whether to run on all possible center coords or just a provided # subset if isinstance(self.__roi_ids, str): roi_ids = dataset.fa[self.__roi_ids].value.nonzero()[0] elif self.__roi_ids is not None: roi_ids = self.__roi_ids # safeguard against stupidity if __debug__: if max(roi_ids) >= dataset.nfeatures: raise IndexError, \ "Maximal center_id found is %s whenever given " \ "dataset has only %d features" \ % (max(roi_ids), dataset.nfeatures) else: roi_ids = np.arange(dataset.nfeatures) # pass to subclass results = self._sl_call(dataset, roi_ids, nproc) if 'mapper' in dataset.a: # since we know the space we can stick the original mapper into the # results as well if self.__roi_ids is None: results.a['mapper'] = copy.copy(dataset.a.mapper) else: # there is an additional selection step that needs to be # expressed by another mapper mapper = copy.copy(dataset.a.mapper) mapper.append(StaticFeatureSelection(roi_ids, dshape=dataset.shape[1:])) results.a['mapper'] = mapper # charge state self.ca.raw_results = results # return raw results, base-class will take care of transformations return results def _sl_call(self, dataset, roi_ids, nproc): """Classical generic searchlight implementation """ raise NotImplementedError("Must be implemented in the derived classes") queryengine = property(fget=lambda self: self._queryengine) roi_ids = property(fget=lambda self: self.__roi_ids) class Searchlight(BaseSearchlight): """The implementation of a generic searchlight measure. The idea for a searchlight algorithm stems from a paper by :ref:`Kriegeskorte et al. (2006) `. As a result it produces a map of measures given a `datameasure` instance of interest, which is ran at each spatial location. """ @staticmethod def _concat_results(sl=None, dataset=None, roi_ids=None, results=None): """The simplest implementation for collecting the results -- just put them into a list This this implementation simply collects them into a list and uses only sl. for assigning conditional attributes. But custom implementation might make use of more/less of them. Implemented as @staticmethod just to emphasize that in principle it is independent of the actual searchlight instance """ # collect results results = sum(results, []) if __debug__ and 'SLC' in debug.active: debug('SLC', '') # just newline resshape = len(results) and np.asanyarray(results[0]).shape or 'N/A' debug('SLC', ' hstacking %d results of shape %s' % (len(results), resshape)) # but be careful: this call also serves as conversion from parallel maps # to regular lists! # this uses the Dataset-hstack result_ds = hstack(results) if __debug__: debug('SLC', " hstacked shape %s" % (result_ds.shape,)) if sl.ca.is_enabled('roi_feature_ids'): sl.ca.roi_feature_ids = [r.a.roi_feature_ids for r in results] if sl.ca.is_enabled('roi_sizes'): sl.ca.roi_sizes = [r.a.roi_sizes for r in results] return result_ds def __init__(self, datameasure, queryengine, add_center_fa=False, results_backend='native', results_fx=None, tmp_prefix='tmpsl', nblocks=None, **kwargs): """ Parameters ---------- datameasure : callable Any object that takes a :class:`~mvpa2.datasets.base.Dataset` and returns some measure when called. add_center_fa : bool or str If True or a string, each searchlight ROI dataset will have a boolean vector as a feature attribute that indicates the feature that is the seed (e.g. sphere center) for the respective ROI. If True, the attribute is named 'roi_seed', the provided string is used as the name otherwise. results_backend : ('native', 'hdf5'), optional Specifies the way results are provided back from a processing block in case of nproc > 1. 'native' is pickling/unpickling of results by pprocess, while 'hdf5' would use h5save/h5load functionality. 'hdf5' might be more time and memory efficient in some cases. results_fx : callable, optional Function to process/combine results of each searchlight block run. By default it would simply append them all into the list. It receives as keyword arguments sl, dataset, roi_ids, and results (iterable of lists). It is the one to take care of assigning roi_* ca's tmp_prefix : str, optional If specified -- serves as a prefix for temporary files storage if results_backend == 'hdf5'. Thus can specify the directory to use (trailing file path separator is not added automagically). nblocks : None or int Into how many blocks to split the computation (could be larger than nproc). If None -- nproc is used. **kwargs In addition this class supports all keyword arguments of its base-class :class:`~mvpa2.measures.searchlight.BaseSearchlight`. """ BaseSearchlight.__init__(self, queryengine, **kwargs) self.datameasure = datameasure self.results_backend = results_backend.lower() if self.results_backend == 'hdf5': # Assure having hdf5 externals.exists('h5py', raise_=True) self.results_fx = Searchlight._concat_results \ if results_fx is None else results_fx self.tmp_prefix = tmp_prefix self.nblocks = nblocks if isinstance(add_center_fa, str): self.__add_center_fa = add_center_fa elif add_center_fa: self.__add_center_fa = 'roi_seed' else: self.__add_center_fa = False def __repr__(self, prefixes=[]): return super(Searchlight, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['datameasure']) + _repr_attrs(self, ['add_center_fa'], default=False) + _repr_attrs(self, ['results_backend'], default='native') + _repr_attrs(self, ['results_fx', 'nblocks']) ) def _sl_call(self, dataset, roi_ids, nproc): """Classical generic searchlight implementation """ assert(self.results_backend in ('native', 'hdf5')) # compute if nproc is not None and nproc > 1: # split all target ROIs centers into `nproc` equally sized blocks nproc_needed = min(len(roi_ids), nproc) nblocks = nproc_needed \ if self.nblocks is None else self.nblocks roi_blocks = np.array_split(roi_ids, nblocks) # the next block sets up the infrastructure for parallel computing # this can easily be changed into a ParallelPython loop, if we # decide to have a PP job server in PyMVPA import pprocess p_results = pprocess.Map(limit=nproc_needed) if __debug__: debug('SLC', "Starting off %s child processes for nblocks=%i" % (nproc_needed, nblocks)) compute = p_results.manage( pprocess.MakeParallel(self._proc_block)) for iblock, block in enumerate(roi_blocks): # should we maybe deepcopy the measure to have a unique and # independent one per process? compute(block, dataset, copy.copy(self.__datameasure), iblock=iblock) else: # otherwise collect the results in an 1-item list p_results = [ self._proc_block(roi_ids, dataset, self.__datameasure)] # Finally collect and possibly process results # p_results here is either a generator from pprocess.Map or a list. # In case of a generator it allows to process results as they become # available result_ds = self.results_fx(sl=self, dataset=dataset, roi_ids=roi_ids, results=self.__handle_all_results(p_results)) # Assure having a dataset (for paranoid ones) if not is_datasetlike(result_ds): try: result_a = np.atleast_1d(result_ds) except ValueError, e: if 'setting an array element with a sequence' in str(e): # try forcing object array. Happens with # test_custom_results_fx_logic on numpy 1.4.1 on Debian # squeeze result_a = np.array(result_ds, dtype=object) else: raise result_ds = Dataset(result_a) return result_ds def _proc_block(self, block, ds, measure, iblock='main'): """Little helper to capture the parts of the computation that can be parallelized Parameters ---------- iblock Critical for generating non-colliding temp filenames in case of hdf5 backend. Otherwise RNGs of different processes might collide in their temporary file names leading to problems. """ if __debug__: debug_slc_ = 'SLC_' in debug.active debug('SLC', "Starting computing block for %i elements" % len(block)) results = [] store_roi_feature_ids = self.ca.is_enabled('roi_feature_ids') store_roi_sizes = self.ca.is_enabled('roi_sizes') assure_dataset = store_roi_feature_ids or store_roi_sizes # put rois around all features in the dataset and compute the # measure within them for i, f in enumerate(block): # retrieve the feature ids of all features in the ROI from the query # engine roi_fids = self._queryengine[f] if __debug__ and debug_slc_: debug('SLC_', 'For %r query returned ids %r' % (f, roi_fids)) # slice the dataset roi = ds[:, roi_fids] if self.__add_center_fa: # add fa to indicate ROI seed if requested roi_seed = np.zeros(roi.nfeatures, dtype='bool') roi_seed[roi_fids.index(f)] = True roi.fa[self.__add_center_fa] = roi_seed # compute the datameasure and store in results res = measure(roi) if assure_dataset and not is_datasetlike(res): res = Dataset(np.atleast_1d(res)) if store_roi_feature_ids: # add roi feature ids to intermediate result dataset for later # aggregation res.a['roi_feature_ids'] = roi_fids if store_roi_sizes: res.a['roi_sizes'] = roi.nfeatures results.append(res) if __debug__: debug('SLC', "Doing %i ROIs: %i (%i features) [%i%%]" \ % (len(block), f+1, roi.nfeatures, float(i+1)/len(block)*100,), cr=True) if self.results_backend == 'native': pass # nothing special elif self.results_backend == 'hdf5': # store results in a temporary file and return a filename results_file = tempfile.mktemp(prefix=self.tmp_prefix, suffix='-%s.hdf5' % iblock) if __debug__: debug('SLC', "Storing results into %s" % results_file) h5save(results_file, results) if __debug__: debug('SLC_', "Results stored") results = results_file else: raise RuntimeError("Must not reach this point") return results def __set_datameasure(self, datameasure): """Set the datameasure""" self.untrain() self.__datameasure = datameasure def __handle_results(self, results): if self.results_backend == 'hdf5': # 'results' must be just a filename assert(isinstance(results, str)) if __debug__: debug('SLC', "Loading results from %s" % results) results_data = h5load(results) os.unlink(results) if __debug__: debug('SLC_', "Loaded results of len=%d from" % len(results_data)) return results_data else: return results def __handle_all_results(self, results): """Helper generator to decorate passing the results out to results_fx """ for r in results: yield self.__handle_results(r) datameasure = property(fget=lambda self: self.__datameasure, fset=__set_datameasure) add_center_fa = property(fget=lambda self: self.__add_center_fa) @borrowkwargs(Searchlight, '__init__', exclude=['roi_ids']) def sphere_searchlight(datameasure, radius=1, center_ids=None, space='voxel_indices', **kwargs): """Creates a `Searchlight` to run a scalar `Measure` on all possible spheres of a certain size within a dataset. The idea for a searchlight algorithm stems from a paper by :ref:`Kriegeskorte et al. (2006) `. Parameters ---------- datameasure : callable Any object that takes a :class:`~mvpa2.datasets.base.Dataset` and returns some measure when called. radius : int All features within this radius around the center will be part of a sphere. Radius is in grid-indices, i.e. ``1`` corresponds to all immediate neighbors, regardless of the physical distance. center_ids : list of int List of feature ids (not coordinates) the shall serve as sphere centers. Alternatively, this can be the name of a feature attribute of the input dataset, whose non-zero values determine the feature ids. By default all features will be used (it is passed as ``roi_ids`` argument of Searchlight). space : str Name of a feature attribute of the input dataset that defines the spatial coordinates of all features. **kwargs In addition this class supports all keyword arguments of its base-class :class:`~mvpa2.measures.base.Measure`. Notes ----- If `Searchlight` is used as `SensitivityAnalyzer` one has to make sure that the specified scalar `Measure` returns large (absolute) values for high sensitivities and small (absolute) values for low sensitivities. Especially when using error functions usually low values imply high performance and therefore high sensitivity. This would in turn result in sensitivity maps that have low (absolute) values indicating high sensitivities and this conflicts with the intended behavior of a `SensitivityAnalyzer`. """ # build a matching query engine from the arguments kwa = {space: Sphere(radius)} qe = IndexQueryEngine(**kwa) # init the searchlight with the queryengine return Searchlight(datameasure, queryengine=qe, roi_ids=center_ids, **kwargs) #class OptimalSearchlight( object ): # def __init__( self, # searchlight, # test_radii, # verbose=False, # **kwargs ): # """ # """ # # results will end up here # self.__perfmeans = [] # self.__perfvars = [] # self.__chisquares = [] # self.__chanceprobs = [] # self.__spheresizes = [] # # # run searchligh for all radii in the list # for radius in test_radii: # if verbose: # print 'Using searchlight with radius:', radius # # compute the results # searchlight( radius, **(kwargs) ) # # self.__perfmeans.append( searchlight.perfmean ) # self.__perfvars.append( searchlight.perfvar ) # self.__chisquares.append( searchlight.chisquare ) # self.__chanceprobs.append( searchlight.chanceprob ) # self.__spheresizes.append( searchlight.spheresize ) # # # # now determine the best classification accuracy # best = np.array(self.__perfmeans).argmax( axis=0 ) # # # select the corresponding values of the best classification # # in all data tables # self.perfmean = best.choose(*(self.__perfmeans)) # self.perfvar = best.choose(*(self.__perfvars)) # self.chisquare = best.choose(*(self.__chisquares)) # self.chanceprob = best.choose(*(self.__chanceprobs)) # self.spheresize = best.choose(*(self.__spheresizes)) # # # store the best performing radius # self.bestradius = np.zeros( self.perfmean.shape, dtype='uint' ) # self.bestradius[searchlight.mask==True] = \ # best.choose( test_radii )[searchlight.mask==True] # # # #def makeSphericalROIMask( mask, radius, elementsize=None ): # """ # """ # # use default elementsize if none is supplied # if not elementsize: # elementsize = [ 1 for i in range( len(mask.shape) ) ] # else: # if len( elementsize ) != len( mask.shape ): # raise ValueError, 'elementsize does not match mask dimensions.' # # # rois will be drawn into this mask # roi_mask = np.zeros( mask.shape, dtype='int32' ) # # # while increase with every ROI # roi_id_counter = 1 # # # build spheres around every non-zero value in the mask # for center, spheremask in \ # algorithms.SpheresInMask( mask, # radius, # elementsize, # forcesphere = True ): # # # set all elements that match the current spheremask to the # # current ROI index value # roi_mask[spheremask] = roi_id_counter # # # increase ROI counter # roi_id_counter += 1 # # return roi_mask pymvpa2-2.2.0/mvpa2/measures/statsmodels_adaptor.py000066400000000000000000000222221202542755000224120ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wrap models of the StatsModels package into a FeaturewiseMeasure.""" __docformat__ = 'restructuredtext' from mvpa2.base import externals # do conditional to be able to build module reference externals.exists('statsmodels', raise_=True) import numpy as np import statsmodels.api as sm from mvpa2.measures.base import FeaturewiseMeasure from mvpa2.datasets.base import Dataset class UnivariateStatsModels(FeaturewiseMeasure): """Adaptor for some models from the StatsModels package This adaptor allows for fitting several statistical models to univariate (in StatsModels terminology "endogeneous") data. A model, based on "exogeneous" data (i.e. a design matrix) and optional parameters, is fitted to each feature vector in a given dataset individually. The adaptor supports a variety of models provided by the StatsModels package, including simple ordinary least squares (OLS), generalized least squares (GLS) and others. This feature-wise measure can extract a variety of properties from the model fit results, and aggregate them into a result dataset. This includes, for example, all attributes of a StatsModels ``RegressionResult`` class, such as model parameters and their error estimates, Aikake's information criteria, and a number of statistical properties. Moreover, it is possible to perform t-contrasts/t-tests of parameter estimates, as well as F-tests for contrast matrices. Examples -------- Some example data: two features, seven samples >>> endog = Dataset(np.transpose([[1, 2, 3, 4, 5, 6, 8], ... [1, 2, 1, 2, 1, 2, 1]])) >>> exog = range(7) Set up a model generator -- it yields an instance of an OLS model for a particular design and feature vector. The generator will be called internally for each feature in the dataset. >>> model_gen = lambda y, x: sm.OLS(y, x) Configure the adaptor with the model generator and a common design for all feature model fits. Tell the adaptor to auto-add a constant to the design. >>> usm = UnivariateStatsModels(exog, model_gen, add_constant=True) Run the measure. By default it extracts the parameter estimates from the models (two per feature/model: regressor + constant). >>> res = usm(endog) >>> print res > >>> print res.sa.descr ['params' 'params'] Alternatively, extract t-values for a test of all parameter estimates against zero. >>> usm = UnivariateStatsModels(exog, model_gen, res='tvalues', ... add_constant=True) >>> res = usm(endog) >>> print res > >>> print res.sa.descr ['tvalues' 'tvalues'] Compute a t-contrast: first parameter is non-zero. This returns additional test statistics, such as p-value and effect size in the result dataset. The contrast vector is pass on to the ``t_test()`` function (``r_matrix`` argument) of the StatsModels result class. >>> usm = UnivariateStatsModels(exog, model_gen, res=[1,0], ... add_constant=True) >>> res = usm(endog) >>> print res > >>> print res.sa.descr ['tvalue' 'pvalue' 'effect' 'sd' 'df'] F-test for a contrast matrix, again with additional test statistics in the result dataset. The contrast vector is pass on to the ``f_test()`` function (``r_matrix`` argument) of the StatsModels result class. >>> usm = UnivariateStatsModels(exog, model_gen, res=[[1,0],[0,1]], ... add_constant=True) >>> res = usm(endog) >>> print res > >>> print res.sa.descr ['fvalue' 'pvalue' 'df_num' 'df_denom'] For any custom result extraction, a callable can be passed to the ``res`` argument. This object will be called with the result of each model fit. Its return value(s) will be aggregated into a result dataset. >>> def extractor(res): ... return [res.aic, res.bic] >>> >>> usm = UnivariateStatsModels(exog, model_gen, res=extractor, ... add_constant=True) >>> res = usm(endog) >>> print res """ is_trained = True def __init__(self, exog, model_gen, res='params', add_constant=True, **kwargs): """ Parameters ---------- exog : array-like Column ordered (observations in rows) design matrix. model_gen : callable Callable that returns a StatsModels model when called like ``model_gen(endog, exog)``. res : {'params', 'tvalues', ...} or 1d array or 2d array or callable Variable of interest that should be reported as feature-wise measure. If a str, the corresponding attribute of the model fit result class is returned (e.g. 'tvalues'). If a 1d-array, it is passed to the fit result class' ``t_test()`` function as a t-contrast vector. If a 2d-array, it is passed to the ``f_test()`` function as a constrast matrix. If both latter cases a number of common test statistics are return in the rows of the result dataset. A description is available in the 'descr' sample attribute. Any other datatype passed to this argument will be treated as a callable, the model fit result is passed to it, and its return value(s) is aggregated in the result dataset. add_constant : bool If True, a constant will be added to the design matrix that is passed to ``exog``. """ FeaturewiseMeasure.__init__(self, **kwargs) self._exog = exog if add_constant: self._exog = sm.add_constant(exog) self._res = res if isinstance(res, np.ndarray) or isinstance(res, (list, tuple)): self._res = np.atleast_1d(res) self._model_gen = model_gen def __fitmodel1d(self, Y): """Helper for apply_along_axis()""" res = self._res results = self._model_gen(Y, self._exog).fit() if isinstance(res, np.ndarray): if len(res.shape) == 1: tstats = results.t_test(self._res) return [np.asscalar(i) for i in [tstats.tvalue, tstats.pvalue, tstats.effect, tstats.sd]] + [tstats.df_denom] elif len(res.shape) == 2: fstats = results.f_test(self._res) return [np.asscalar(i) for i in [fstats.fvalue, fstats.pvalue]] + [fstats.df_num, fstats.df_denom] else: raise ValueError("Test specification (via `res`) has to be 1d or 2d array") elif isinstance(res, str): return results.__getattribute__(res) else: return res(results) def _call(self, dataset): # compute the regression once per feature results = np.apply_along_axis(self.__fitmodel1d, 0, dataset.samples) # figure out potential description of the results sa = None res = self._res if isinstance(res, np.ndarray): if len(res.shape) == 1: sa = ['tvalue', 'pvalue', 'effect', 'sd', 'df'] elif len(res.shape) == 2: sa = ['fvalue', 'pvalue', 'df_num', 'df_denom'] elif isinstance(res, str): sa = [res] * len(results) if not sa is None: sa = {'descr': sa} # reassign the input feature attributes to the results return Dataset(results, sa=sa, fa=dataset.fa) class GLM(UnivariateStatsModels): """Adaptor to the statsmodels-based UnivariateStatsModels This class is deprecated and only here to ease the transition of user code to the new classes. For all new code, please use the UnivariateStatsModels class. """ def __init__(self, design, voi='pe', **kwargs): import warnings warnings.warn("The 'GLM' class is deprecated. Please migrate to UnivariateStatsModels", DeprecationWarning) if voi == 'pe': voi = 'params' elif voi == 'zstat': raise ValueError("GLM class no longer supports 'zstat' reports." " Please migrate to UnivariateStatsModels and tvalues.") UnivariateStatsModels.__init__( self, design, res=voi, add_constant=False, model_gen=lambda y, x: sm.OLS(y, x), **kwargs) pymvpa2-2.2.0/mvpa2/misc/000077500000000000000000000000001202542755000150735ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/misc/__init__.py000066400000000000000000000011071202542755000172030ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for PyMVPA misc modules""" __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.misc start') debug('INIT', 'mvpa2.misc end') pymvpa2-2.2.0/mvpa2/misc/args.py000066400000000000000000000054541202542755000164110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helpers for arguments handling.""" __docformat__ = 'restructuredtext' def split_kwargs(kwargs, prefixes=[]): """Helper to separate kwargs into multiple groups Parameters ---------- prefixes : list of strs Each entry sets a prefix which puts entry with key starting with it into a separate group. Group '' corresponds to 'leftovers' :Output: dictionary with keys == `prefixes` """ if not ('' in prefixes): prefixes = prefixes + [''] result = [ [] for i in prefixes ] for k,v in kwargs.iteritems(): for i,p in enumerate(prefixes): if k.startswith(p): result[i].append((k.replace(p,'',1), v)) break resultd = dict((p,dict(x)) for p,x in zip(prefixes, result)) return resultd def group_kwargs(prefixes, assign=False, passthrough=False): """Decorator function to join parts of kwargs together Parameters ---------- prefixes : list of strs Prefixes to split based on. See `split_kwargs` assign : bool Flag to assign the obtained arguments to self.__kwargs passthrough : bool Flag to pass joined arguments as _kwargs argument. Usually it is sufficient to have either assign or passthrough. If none of those is True, decorator simply filters out mentioned groups from being passed to the method Example: if needed to join all args which start with 'slave' together under slave_kwargs parameter """ def decorated_method(method): def do_group_kwargs(self, *args_, **kwargs_): if '' in prefixes: raise ValueError, \ "Please don't put empty string ('') into prefixes" # group as needed splits = split_kwargs(kwargs_, prefixes) # adjust resultant kwargs__ kwargs__ = splits[''] for prefix in prefixes: skwargs = splits[prefix] k = '%skwargs' % prefix if k in kwargs__: # is unprobable but can happen raise ValueError, '%s is already given in the arguments' % k if passthrough: kwargs__[k] = skwargs if assign: setattr(self, '_%s' % k, skwargs) return method(self, *args_, **kwargs__) do_group_kwargs.func_name = method.func_name return do_group_kwargs return decorated_method pymvpa2-2.2.0/mvpa2/misc/attrmap.py000066400000000000000000000232611202542755000171210ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper to map literal attribute to numerical ones (and back)""" import numpy as np from mvpa2.base.types import is_sequence_type class AttributeMap(object): # might be derived from dict, but do not see advantages right now, # since this one has forward and reverse map # however, it might be desirable to implement more of the dict interface """Map to translate literal values to numeric ones (and back). A translation map is derived automatically from the argument of the first call to to_numeric(). The default mapping is to map unique value (in sorted order) to increasing integer values starting from zero. In case the default mapping is undesired a custom map can be specified to the constructor call. Regardless of how the mapping has been specified or derived, it remains constant (i.e. it is not influenced by subsequent calls to meth:`to_numeric` or meth:`to_literal`. However, the translation map can be removed with meth:`clear`. Both conversion methods take sequence-like input and return arrays. Examples -------- Default mapping procedure using an automatically derived translation map: >>> am = AttributeMap() >>> am.to_numeric(['eins', 'zwei', 'drei']) array([1, 2, 0]) >>> print am.to_literal([1, 2, 0]) ['eins' 'zwei' 'drei'] Custom mapping: >>> am = AttributeMap(map={'eins': 11, 'zwei': 22, 'drei': 33}) >>> am.to_numeric(['eins', 'zwei', 'drei']) array([11, 22, 33]) """ def __init__(self, map=None, mapnumeric=False, collisions_resolution=None): """ Parameters ---------- map : dict Custom dict with literal keys mapping to numerical values. mapnumeric : bool In some cases it is necessary to map numeric labels too, for instance when target labels should be from a specific set, e.g. (-1, +1). collisions_resolution : None or {'tuple', 'lucky'} How to resolve collisions on to_literal if multiple entries map to the same value when custom map was provided. If None -- exception would get raise, if 'tuple' -- collided entries are grouped into a tuple, if 'lucky' -- some last encountered literal wins (i.e. arbitrary resolution). This parameter is in effect only when calling :meth:`to_literal`. Please see the class documentation for more information. """ self.clear() self.mapnumeric = mapnumeric self.collisions_resolution = collisions_resolution if not map is None: if not isinstance(map, dict): raise ValueError("Custom map need to be a dict.") self._nmap = map self._lmap = None # pylint happiness def __repr__(self): """String representation of AttributeMap """ args = [] if self._nmap: args.append(repr(self._nmap)), if self.mapnumeric: args.append('mapnumeric=True') if self.collisions_resolution: args.append('collisions_resolution=%r' % (self.collisions_resolution,)) return "%s(%s)" % (self.__class__.__name__, ', '.join(args)) def __len__(self): if self._nmap is None: return 0 else: return len(self._nmap) def __bool__(self): return not self._nmap is None def clear(self): """Remove previously established mappings.""" # map from literal TO numeric self._nmap = None # map from numeric TO literal self._lmap = None def keys(self): """Returns the literal names of the attribute map.""" if self._nmap is None: return None else: return self._nmap.keys() def values(self): """Returns the numerical values of the attribute map.""" if self._nmap is None: return None else: return self._nmap.values() def iteritems(self): """Dict-like generator yielding literal/numerical pairs.""" if self._nmap is None: raise StopIteration else: for k, v in self._nmap: yield k, v # Py3 Compatibility method to keep lib2to3 happy items = iteritems def to_numeric(self, attr): """Map literal attribute values to numerical ones. Arguments with numerical data type will be returned as is. Parameters ---------- attr : sequence Literal values to be mapped. Please see the class documentation for more information. """ attr = np.asanyarray(attr) # no mapping if already numeric if not np.issubdtype(attr.dtype, str) and not self.mapnumeric: return attr if self._nmap is None: # sorted list of unique attr values ua = np.unique(attr) self._nmap = dict(zip(ua, range(len(ua)))) elif __debug__: ua = np.unique(attr) mkeys = sorted(self._nmap.keys()) if (ua != mkeys).any(): # maps to not match raise KeyError("Existing attribute map not suitable for " "to be mapped attribute (i.e. unknown values. " "Attribute has '%s', but map has '%s'." % (str(ua), str(mkeys))) num = np.empty(attr.shape, dtype=np.int) for k, v in self._nmap.iteritems(): num[attr == k] = v return num def _get_lmap(self): """Recomputes lmap from the stored _nmap """ cr = self.collisions_resolution if cr == 'lucky': lmap = dict([(v, k) for k, v in self._nmap.iteritems()]) elif cr in [None, 'tuple']: lmap = {} counts = {} # is used for 'tuple' resolution for k, v in self._nmap.iteritems(): count = counts.get(v, 0) if count: # we saw it already if cr is None: raise ValueError, \ "Numeric value %r was already reverse mapped to " \ "%r. Now trying to remap into %r. Please adjust" \ " your mapping or change collissions_resolution" \ " parameter" % (v, lmap[v], k) else: if count == 1: lmap[v] = (lmap[v], k) else: lmap[v] = lmap[v] + (k, ) # create new tuple else: lmap[v] = k counts[v] = count +1 else: raise ValueError, \ "Provided parameter collisions_resolution=%r is of unknown " \ "value. See documentation for AttributeMapper" % (cr,) return lmap def to_literal(self, attr, recurse=False): """Map numerical value back to literal ones. Parameters ---------- attr : sequence Numerical values to be mapped. recurse : bool Either to recursively change items within the sequence if those are iterable as well Please see the class documentation for more information. """ # we need one or the other map if self._lmap is None and self._nmap is None: raise RuntimeError("AttributeMap has no mapping information. " "Ever called to_numeric()?") if self._lmap is None: self._lmap = self._get_lmap() lmap = self._lmap if is_sequence_type(attr) and not isinstance(attr, str): # Choose lookup function if recurse: lookupfx = lambda x: self.to_literal(x, recurse=True) else: # just dictionary lookup lookupfx = lambda x:lmap[x] # To assure the preserving the container type target_constr = attr.__class__ # ndarrays are special since array is just a factory, and # ndarray takes shape as the first argument isarray = issubclass(target_constr, np.ndarray) if isarray: if attr.dtype is np.dtype('object'): target_constr = lambda x: np.array(x, dtype=object) else: # Otherwise no special handling target_constr = np.array # Perform lookup and store to the list resl = [lookupfx(k) for k in attr] # If necessary assure derived ndarray class type if isarray: if attr.dtype is np.dtype('object'): # we need first to create empty one and then # assign items -- god bless numpy resa = np.empty(len(resl), dtype=attr.dtype) resa[:] = resl else: resa = target_constr(resl) if not (attr.__class__ is np.ndarray): # to accommodate subclasses of ndarray res = resa.view(attr.__class__) else: res = resa else: res = target_constr(resl) return res else: return lmap[attr] pymvpa2-2.2.0/mvpa2/misc/bv/000077500000000000000000000000001202542755000155025ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/misc/bv/__init__.py000066400000000000000000000011151202542755000176110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for Brain Voyager""" if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.misc.bv') from mvpa2.misc.bv.base import * if __debug__: debug('INIT', 'mvpa2.misc.bv end') pymvpa2-2.2.0/mvpa2/misc/bv/base.py000066400000000000000000000033121202542755000167650ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Tiny snippets to interface with FSL easily.""" __docformat__ = 'restructuredtext' from mvpa2.misc.io import ColumnData if __debug__: from mvpa2.base import debug class BrainVoyagerRTC(ColumnData): """IO helper to read BrainVoyager RTC files. This is a textfile format that is used to specify stimulation protocols for data analysis in BrainVoyager. It looks like FileVersion: 2 Type: DesignMatrix NrOfPredictors: 4 NrOfDataPoints: 147 "fm_l_60dB" "fm_r_60dB" "fm_l_80dB" "fm_r_80dB" 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 Data is always read as `float` and header is actually ignored """ def __init__(self, source): """Read and write BrainVoyager RTC files. Parameters ---------- source : str Filename of an RTC file """ # init data from known format ColumnData.__init__(self, source, header=True, sep=None, headersep='"', dtype=float, skiplines=5) def toarray(self): """Returns the data as an array """ import numpy as np # return as array with time axis first return np.array([self[i] for i in self._header_order], dtype='float').T pymvpa2-2.2.0/mvpa2/misc/cmdline.py000066400000000000000000000337141202542755000170700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Common functions and options definitions for command line Conventions: Every option (instance of optparse.Option) has prefix "opt". Lists of options has prefix opts (e.g. `opts.common`). Option name should be camelbacked version of .dest for the option. """ __docformat__ = 'restructuredtext' import mvpa2 # TODO? all options (opt*) might migrate to respective module? discuss from optparse import OptionParser, Option, OptionGroup, OptionConflictError # needed for verboseCallback from mvpa2.base import verbose, externals class Options(object): """Just a convenience placeholder for all available options """ pass class OptionGroups(object): """Group creation is delayed until instance is requested. This allows to overcome the problem of poluting handled cmdline options """ def __init__(self, parser): """ Parameters ---------- parser : OptionParser To which parser to add groups """ self._d = {} self._parser = parser def add(self, name, l, doc): self._d[name] = (doc, l) def _get_group(self, name): try: doc, l = self._d[name] except KeyError: raise ValueError, "No group with name %s" % name opts = OptionGroup(self._parser, doc) try: opts.add_options(l) except OptionConflictError: print "Problem addition options to the group '%s'. Most probably" \ " the option was independently added already." % name raise return opts def __getattribute__(self, index): if index[0] == '_': return object.__getattribute__(self, index) if self._d.has_key(index): return self._get_group(index) return object.__getattribute__(self, index) def split_comma_semicolon_lists(s, dtype=None): """TODO Parameters ---------- s Input string dtype: optional Data type to impose upon values """ res = [] for x in s.split(";"): if not ':' in x: raise ValueError("Each entry must be in the form key:values," " e.g. 'targets:rest'") key, s_values = x.split(':', 1) values = s_values.split(',') if dtype is not None: values = [dtype(v) for v in values] res.append((key, values)) return res # Some local helpers def _FORMAT(s): """Helper to provide uniform appearance for formats in cmdline options """ return ". Specified as %r" % s def _EXAMPLE(s): """Helper to provide uniform appearance for examples in cmdline options """ return ", e.g. %r" % s _DEF = "\n[Default: %default]" # TODO: try to make groups definition somewhat lazy, since now # whenever a group is created, those parameters are already known by # parser, although might not be listed in the list of used and not by # --help. But their specification on cmdline doesn't lead to # error/help msg. # # Conflict hanlder to resolve situation that we have the same option added # to some group and also available 'freely' # # set default version string, otherwise '--version' option is not enabled # can be overwritten later on by assigning to `parser.version` parser = OptionParser(version=mvpa2.__version__, # "%prog" add_help_option=False, conflict_handler="error") opt = Options() opts = OptionGroups(parser) # # Callbacks to tune up the output or cause specific actions to be # taken # def _verbose_callback(option, optstr, value, parser): """Callback for -v|--verbose cmdline option """ if __debug__: debug("CMDLINE", "Setting verbose.level to %s" % str(value)) verbose.level = value optstr = optstr # pylint shut up setattr(parser.values, option.dest, value) def _split_comma_semicolon_lists_callback(option, optstr, value, parser): """Callback to split provided values """ if value is None: return None if __debug__: debug("CMDLINE", "Splitting %s for %s" % (value, optstr)) value_split = split_comma_semicolon_lists(value) setattr(parser.values, option.dest, value_split) opt.help = \ Option("-h", "--help", "--sos", action="help", help="Show this help message and exit") opt.verbose = \ Option("-v", "--verbose", "--verbosity", action="callback", callback=_verbose_callback, nargs=1, type="int", dest="verbose", default=0, help="Verbosity level of output" + _DEF) """Pre-cooked `optparse`'s option to specify verbose level""" commonopts_list = [opt.verbose, opt.help] if __debug__: from mvpa2.base import debug ##REF: Name was automagically refactored def _debug_callback(option, optstr, value, parser): """Callback for -d|--debug cmdline option """ if value == "list": print "Registered debug IDs:" keys = debug.registered.keys() keys.sort() for k in keys: print "%-7s: %s" % (k, debug.registered[k]) print "Use ALL: to enable all of the debug IDs listed above." print "Use python regular expressions to select group. CLF.* will" \ " enable all debug entries starting with CLF (e.g. CLFBIN, CLFMC)" raise SystemExit, 0 optstr = optstr # pylint shut up debug.set_active_from_string(value) setattr(parser.values, option.dest, value) optDebug = Option("-d", "--debug", action="callback", callback=_debug_callback, nargs=1, type="string", dest="debug", default="", help="Debug entries to report. " "Run with '-d list' to get a list of " "registered entries" + _DEF) commonopts_list.append(optDebug) opts.add("common", commonopts_list, "Common generic options") # # Classifiers options # opt.clf = \ Option("--clf", type="choice", dest="clf", choices=['gnb', 'knn', 'svm', 'ridge', 'gpr', 'smlr'], default='svm', help="Type of classifier to be used" + _DEF) opt.radius = \ Option("-r", "--radius", action="store", type="float", dest="radius", default=2.0, help="Radius to be used (eg for the searchlight)" + _DEF) opt.knearestdegree = \ Option("-k", "--k-nearest", action="store", type="int", dest="knearestdegree", default=3, help="Degree of k-nearest classifier" + _DEF) opts.add('KNN', [opt.radius, opt.knearestdegree], "Specification of kNN") opt.svm_C = \ Option("-C", "--svm-C", action="store", type="float", dest="svm_C", default=-1.0, help="C parameter for soft-margin C-SVM classification" + _DEF) opt.svm_nu = \ Option("--nu", "--svm-nu", action="store", type="float", dest="svm_nu", default=0.1, help="nu parameter for soft-margin nu-SVM classification" + _DEF) opt.svm_gamma = \ Option("--gamma", "--svm-gamma", action="store", type="float", dest="svm_gamma", default=1.0, help="gamma parameter for Gaussian kernel of RBF SVM" + _DEF) opts.add('SVM', [opt.svm_nu, opt.svm_C, opt.svm_gamma], "SVM specification") opt.do_sweep = \ Option("--sweep", action="store_true", dest="do_sweep", default=False, help="Sweep through various classifiers" + _DEF) # Cross-validation options opt.crossfolddegree = \ Option("-c", "--crossfold", action="store", type="float", dest="crossfolddegree", default=1, help="Degree of N-fold crossfold" + _DEF) opts.add('general', [opt.crossfolddegree], "Generalization estimates") # preprocess options opt.zscore = \ Option("--zscore", action="store_true", dest="zscore", default=False, help="zscore dataset samples" + _DEF) opt.mean_group_sample = \ Option("--mean-group-sample", default=False, action="store_true", dest="mean_group_sample", help="Collapse samples in each group (chunks and samples, " "or specify --chunks-sa, and --targets-sa)" + _DEF) opt.baseline_conditions = \ Option('-b', "--baseline-conditions", action="callback", nargs=1, type="string", default="", callback=_split_comma_semicolon_lists_callback, dest="baseline_conditions", help="Baseline conditions (used for zscoring)" + _FORMAT("sa:value1,value2,...") + _EXAMPLE('targets:rest') + _DEF) opt.exclude_conditions = \ Option('-e', "--exclude-conditions", action="callback", nargs=1, type="string", default="", callback=_split_comma_semicolon_lists_callback, dest="exclude_conditions", help="Which conditions to exclude from the analysis " "(but would be present during preprocessing (e.g. zscoring)" + _FORMAT("sa1:value1,value2,...;sa2:value1,value2,...") + _EXAMPLE('targets:rest;trials:bad') + _DEF) opt.include_conditions = \ Option('-i', "--include-conditions", action="callback", nargs=1, type="string", default="", callback=_split_comma_semicolon_lists_callback, dest="include_conditions", help="Which conditions exclusively to analyze " "(but all would be present during preprocessing (e.g. zscoring)" + _FORMAT("sa1:value1,value2,...;sa2:value1,value2,...") + _EXAMPLE('targets:rest;trials:bad') + _DEF) opt.targets_sa = \ Option('-T', "--targets-sa", action="store", dest="targets_sa", default="targets", help="Which sample attribute would be used for (classification)" " analysis" + _DEF) opt.chunks_sa = \ Option("--chunks-sa", action="store", dest="chunks_sa", default="chunks", help="Which sample attribute would be used to describe" "samples grouping information for partitioning" + _DEF) opt.tr = \ Option("--tr", action="store", dest="tr", default=2.0, type='float', help="fMRI volume repetition time" + _DEF) opt.detrend = \ Option("--detrend", action="store_true", dest="detrend", default=0, help="Do linear detrending" + _DEF) opts.add('preproc', [opt.zscore, opt.tr, opt.detrend], "Preprocessing options") # Wavelets options if externals.exists('pywt'): import pywt ##REF: Name was automagically refactored def _wavelet_family_callback(option, optstr, value, parser): """Callback for -w|--wavelet-family cmdline option """ wl_list = pywt.wavelist() wl_list_str = ", ".join( ['-1: None'] + ['%d:%s' % w for w in enumerate(wl_list)]) if value == "list": print "Available wavelet families: " + wl_list_str raise SystemExit, 0 wl_family = value try: # may be int? ;-) wl_family_index = int(value) if wl_family_index >= 0: try: wl_family = wl_list[wl_family_index] except IndexError: print "Index is out of range. " + \ "Following indexes with names are known: " + \ wl_list_str raise SystemExit, -1 else: wl_family = 'None' except ValueError: pass # Check the value wl_family = wl_family.lower() if wl_family == 'none': wl_family = None elif not wl_family in wl_list: print "Uknown family '%s'. Known are %s" % (wl_family, ', '.join(wl_list)) raise SystemExit, -1 # Store it in the parser setattr(parser.values, option.dest, wl_family) opt.wavelet_family = \ Option("-w", "--wavelet-family", callback=_wavelet_family_callback, action="callback", type="string", dest="wavelet_family", default='-1', help="Wavelet family: string or index among the available. " "Run with '-w list' to see available families" + _DEF) opt.wavelet_decomposition = \ Option("-W", "--wavelet-decomposition", action="store", type="choice", dest="wavelet_decomposition", default='dwt', choices=['dwt', 'dwp'], help="Wavelet decomposition: discrete wavelet transform " "(dwt) or packet (dwp)" + _DEF) opts.add('wavelet', [opt.wavelet_family, opt.wavelet_decomposition], "Wavelets mappers") # Box options opt.boxlength = \ Option("--boxlength", action="store", dest="boxlength", default=1, type='int', help="Length of the box in volumes (integer)" + _DEF) opt.boxoffset = \ Option("--boxoffset", action="store", dest="boxoffset", default=0, type='int', help="Offset of the box from the event onset in volumes" + _DEF) opts.add('box', [opt.boxlength, opt.boxoffset], "Box options") # sample attributes opt.chunk = \ Option("--chunk", action="store", dest="chunk", default='0', help="Id of the data chunk" + _DEF) opt.chunkLimits = \ Option("--chunklimits", action="store", dest="chunklimits", default=None, help="Limit processing to a certain chunk of data given by start " \ "and end volume number (including lower, excluding upper " \ "limit). Numbering starts with zero" + _DEF) opts.add('chunk', [opt.chunk, opt.chunkLimits], "Chunk options AKA Sample attributes XXX") pymvpa2-2.2.0/mvpa2/misc/data_generators.py000066400000000000000000000415271202542755000206200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Miscellaneous data generators for unittests and demos""" __docformat__ = 'restructuredtext' import os import numpy as np from mvpa2.datasets.base import dataset_wizard, Dataset from mvpa2 import pymvpa_dataroot, pymvpa_datadbroot from mvpa2.misc.fx import get_random_rotation if __debug__: from mvpa2.base import debug ##REF: Name was automagically refactored def multiple_chunks(func, n_chunks, *args, **kwargs): """Replicate datasets multiple times raising different chunks Given some randomized (noisy) generator of a dataset with a single chunk call generator multiple times and place results into a distinct chunks. Returns ------- ds : `mvpa2.datasets.base.Dataset` """ for chunk in xrange(n_chunks): ds_ = func(*args, **kwargs) # might not have chunks at all if not ds_.sa.has_key('chunks'): ds_.sa['chunks'] = np.repeat(chunk + 1, ds_.nsamples) else: ds_.sa.chunks[:] = chunk + 1 if chunk == 0: ds = ds_ else: ds.append(ds_) return ds ##REF: Name was automagically refactored def dumb_feature_dataset(): """Create a very simple dataset with 2 features and 3 labels """ data = [[1, 0], [1, 1], [2, 0], [2, 1], [3, 0], [3, 1], [4, 0], [4, 1], [5, 0], [5, 1], [6, 0], [6, 1], [7, 0], [7, 1], [8, 0], [8, 1], [9, 0], [9, 1], [10, 0], [10, 1], [11, 0], [11, 1], [12, 0], [12, 1]] regs = ([1] * 8) + ([2] * 8) + ([3] * 8) return dataset_wizard(samples=np.array(data), targets=regs, chunks=range(len(regs))) ##REF: Name was automagically refactored def dumb_feature_binary_dataset(): """Very simple binary (2 labels) dataset """ data = [[1, 0], [1, 1], [2, 0], [2, 1], [3, 0], [3, 1], [4, 0], [4, 1], [5, 0], [5, 1], [6, 0], [6, 1], [7, 0], [7, 1], [8, 0], [8, 1], [9, 0], [9, 1], [10, 0], [10, 1], [11, 0], [11, 1], [12, 0], [12, 1]] regs = ([0] * 12) + ([1] * 12) return dataset_wizard(samples=np.array(data), targets=regs, chunks=range(len(regs))) def normal_feature_dataset(perlabel=50, nlabels=2, nfeatures=4, nchunks=5, means=None, nonbogus_features=None, snr=3.0, normalize=True): """Generate a univariate dataset with normal noise and specified means. Could be considered to be a generalization of `pure_multivariate_signal` where means=[ [0,1], [1,0] ]. Specify either means or `nonbogus_features` so means get assigned accordingly. If neither `means` nor `nonbogus_features` are provided, data will be pure noise and no per-label information. Parameters ---------- perlabel : int, optional Number of samples per each label nlabels : int, optional Number of labels in the dataset nfeatures : int, optional Total number of features (including bogus features which carry no label-related signal) nchunks : int, optional Number of chunks (perlabel should be multiple of nchunks) means : None or ndarray of (nlabels, nfeatures) shape Specified means for each of features (columns) for all labels (rows). nonbogus_features : None or list of int Indexes of non-bogus features (1 per label). snr : float, optional Signal-to-noise ration assuming that signal has std 1.0 so we just divide random normal noise by snr normalize : bool, optional Divide by max(abs()) value to bring data into [-1, 1] range. """ data = np.random.standard_normal((perlabel*nlabels, nfeatures)) if snr != 0: data /= np.sqrt(snr) if (means is None) and (not nonbogus_features is None): if len(nonbogus_features) > nlabels: raise ValueError, "Can't assign simply a feature to a " + \ "class: more nonbogus_features than labels" means = np.zeros((len(nonbogus_features), nfeatures)) # pure multivariate -- single bit per feature for i in xrange(len(nonbogus_features)): means[i, nonbogus_features[i]] = 1.0 if not means is None and snr != 0: # add mean data += np.repeat(np.array(means, ndmin=2), perlabel, axis=0) if normalize: # bring it 'under 1', since otherwise some classifiers have difficulties # during optimization data = 1.0/(np.max(np.abs(data))) * data labels = np.concatenate([np.repeat('L%d' % i, perlabel) for i in range(nlabels)]) chunks = np.concatenate([np.repeat(range(nchunks), perlabel//nchunks) for i in range(nlabels)]) ds = dataset_wizard(data, targets=labels, chunks=chunks) # If nonbogus was provided -- assign .a and .fa accordingly if nonbogus_features is not None: ds.fa['nonbogus_targets'] = np.array([None]*nfeatures) ds.fa.nonbogus_targets[nonbogus_features] = ['L%d' % i for i in range(nlabels)] ds.a['nonbogus_features'] = nonbogus_features ds.a['bogus_features'] = [x for x in range(nfeatures) if not x in nonbogus_features] return ds ##REF: Name was automagically refactored def pure_multivariate_signal(patterns, signal2noise = 1.5, chunks=None, targets=[0, 1]): """ Create a 2d dataset with a clear multivariate signal, but no univariate information. :: %%%%%%%%% % O % X % %%%%%%%%% % X % O % %%%%%%%%% """ # start with noise data = np.random.normal(size=(4*patterns, 2)) # add signal data[:2*patterns, 1] += signal2noise data[2*patterns:4*patterns, 1] -= signal2noise data[:patterns, 0] -= signal2noise data[2*patterns:3*patterns, 0] -= signal2noise data[patterns:2*patterns, 0] += signal2noise data[3*patterns:4*patterns, 0] += signal2noise # two conditions regs = np.array((targets[0:1] * patterns) + (targets[1:2] * 2 * patterns) + (targets[0:1] * patterns)) if chunks is None: chunks = range(len(data)) return dataset_wizard(samples=data, targets=regs, chunks=chunks) ##REF: Name was automagically refactored def get_mv_pattern(s2n): """Simple multivariate dataset""" return multiple_chunks(pure_multivariate_signal, 6, 5, s2n, 1) def wr1996(size=200): """Generate '6d robot arm' dataset (Williams and Rasmussen 1996) Was originally created in order to test the correctness of the implementation of kernel ARD. For full details see: http://www.gaussianprocess.org/gpml/code/matlab/doc/regression.html#ard x_1 picked randomly in [-1.932, -0.453] x_2 picked randomly in [0.534, 3.142] r_1 = 2.0 r_2 = 1.3 f(x_1,x_2) = r_1 cos (x_1) + r_2 cos(x_1 + x_2) + N(0,0.0025) etc. Expected relevances: ell_1 1.804377 ell_2 1.963956 ell_3 8.884361 ell_4 34.417657 ell_5 1081.610451 ell_6 375.445823 sigma_f 2.379139 sigma_n 0.050835 """ intervals = np.array([[-1.932, -0.453], [0.534, 3.142]]) r = np.array([2.0, 1.3]) x = np.random.rand(size, 2) x *= np.array(intervals[:, 1]-intervals[:, 0]) x += np.array(intervals[:, 0]) if __debug__: for i in xrange(2): debug('DG', '%d columnt Min: %g Max: %g' % (i, x[:, i].min(), x[:, i].max())) y = r[0]*np.cos(x[:, 0] + r[1]*np.cos(x.sum(1))) + \ np.random.randn(size)*np.sqrt(0.0025) y -= y.mean() x34 = x + np.random.randn(size, 2)*0.02 x56 = np.random.randn(size, 2) x = np.hstack([x, x34, x56]) return dataset_wizard(samples=x, targets=y) ##REF: Name was automagically refactored def sin_modulated(n_instances, n_features, flat=False, noise=0.4): """ Generate a (quite) complex multidimensional non-linear dataset Used for regression testing. In the data label is a sin of a x^2 + uniform noise """ if flat: data = (np.arange(0.0, 1.0, 1.0/n_instances)*np.pi) data.resize(n_instances, n_features) else: data = np.random.rand(n_instances, n_features)*np.pi label = np.sin((data**2).sum(1)).round() label += np.random.rand(label.size)*noise return dataset_wizard(samples=data, targets=label) ##REF: Name was automagically refactored def chirp_linear(n_instances, n_features=4, n_nonbogus_features=2, data_noise=0.4, noise=0.1): """ Generates simple dataset for linear regressions Generates chirp signal, populates n_nonbogus_features out of n_features with it with different noise level and then provides signal itself with additional noise as labels """ x = np.linspace(0, 1, n_instances) y = np.sin((10 * np.pi * x **2)) data = np.random.normal(size=(n_instances, n_features ))*data_noise for i in xrange(n_nonbogus_features): data[:, i] += y[:] labels = y + np.random.normal(size=(n_instances,))*noise return dataset_wizard(samples=data, targets=labels) def linear_awgn(size=10, intercept=0.0, slope=0.4, noise_std=0.01, flat=False): """Generate a dataset from a linear function with AWGN (Added White Gaussian Noise). It can be multidimensional if 'slope' is a vector. If flat is True (in 1 dimesion) generate equally spaces samples instead of random ones. This is useful for the test phase. """ dimensions = 1 if isinstance(slope, np.ndarray): dimensions = slope.size if flat and dimensions == 1: x = np.linspace(0, 1, size)[:, np.newaxis] else: x = np.random.rand(size, dimensions) y = np.dot(x, slope)[:, np.newaxis] \ + (np.random.randn(*(x.shape[0], 1)) * noise_std) + intercept return dataset_wizard(samples=x, targets=y) def noisy_2d_fx(size_per_fx, dfx, sfx, center, noise_std=1): """Yet another generator of random dataset """ # used in projection example x = [] y = [] labels = [] for fx in sfx: nx = np.random.normal(size=size_per_fx) ny = fx(nx) + np.random.normal(size=nx.shape, scale=noise_std) x.append(nx) y.append(ny) # whenever larger than first function value labels.append(np.array(ny < dfx(nx), dtype='int')) samples = np.array((np.hstack(x), np.hstack(y))).squeeze().T labels = np.hstack(labels).squeeze().T samples += np.array(center) return dataset_wizard(samples=samples, targets=labels) def linear1d_gaussian_noise(size=100, slope=0.5, intercept=1.0, x_min=-2.0, x_max=3.0, sigma=0.2): """A straight line with some Gaussian noise. """ x = np.linspace(start=x_min, stop=x_max, num=size) noise = np.random.randn(size)*sigma y = x * slope + intercept + noise return dataset_wizard(samples=x[:, None], targets=y) def load_example_fmri_dataset(): """Load minimal fMRI dataset that is shipped with PyMVPA.""" from mvpa2.datasets.mri import fmri_dataset from mvpa2.misc.io import SampleAttributes attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes.txt')) ds = fmri_dataset(samples=os.path.join(pymvpa_dataroot, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=os.path.join(pymvpa_dataroot, 'mask.nii.gz')) return ds def load_datadb_tutorial_data(path=os.path.join( pymvpa_datadbroot, 'tutorial_data', 'tutorial_data', 'data'), roi='brain'): """Loads the block-design demo dataset from PyMVPA dataset DB. Parameters ---------- path : str Path of the directory containing the dataset files. roi : str or int or tuple or None Region Of Interest to be used for masking the dataset. If a string is given a corresponding mask image from the demo dataset will be used (mask_.nii.gz). If an int value is given, the corresponding ROI is determined from the atlas image (mask_hoc.nii.gz). If a tuple is provided it may contain int values that a processed as explained before, but the union of a ROIs is taken to produce the final mask. If None, no masking is performed. """ import nibabel as nb from mvpa2.datasets.mri import fmri_dataset from mvpa2.misc.io import SampleAttributes if roi is None: mask = None elif isinstance(roi, str): mask = os.path.join(path, 'mask_' + roi + '.nii.gz') elif isinstance(roi, int): nimg = nb.load(os.path.join(path, 'mask_hoc.nii.gz')) tmpmask = nimg.get_data() == roi mask = nb.Nifti1Image(tmpmask.astype(int), nimg.get_affine(), nimg.get_header()) elif isinstance(roi, tuple) or isinstance(roi, list): nimg = nb.load(os.path.join(path, 'mask_hoc.nii.gz')) tmpmask = np.zeros(nimg.get_shape(), dtype='bool') for r in roi: tmpmask = np.logical_or(tmpmask, nimg.get_data() == r) mask = nb.Nifti1Image(tmpmask.astype(int), nimg.get_affine(), nimg.get_header()) else: raise ValueError("Got something as mask that I cannot handle.") attr = SampleAttributes(os.path.join(path, 'attributes.txt')) ds = fmri_dataset(samples=os.path.join(path, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=mask) return ds load_datadb_demo_blockfmri = load_datadb_tutorial_data """For backward compatibility with tutorial_lib which people might be "using" already. Deprecate entirely whenever tutorial_data gets updated. """ def autocorrelated_noise(ds, sr, cutoff, lfnl=3.0, bord=10, hfnl=None): """Generate a dataset with samples being temporally autocorrelated noise. Parameters ---------- ds : Dataset Source dataset whose mean samples serves as the pedestal of the new noise samples. All attributes of this dataset will also go into the generated one. sr : float Sampling rate (in Hz) of the samples in the dataset. cutoff : float Cutoff frequency of the low-pass butterworth filter. bord : int Order of the butterworth filter that is applied for low-pass filtering. lfnl : float Low frequency noise level in percent signal (per feature). hfnl : float or None High frequency noise level in percent signal (per feature). If None, no HF noise is added. """ from scipy.signal import butter, lfilter # something to play with fds = ds.copy(deep=False) # compute the pedestal msample = fds.samples.mean(axis=0) # noise/signal amplitude relative to each feature mean signal noise_amps = msample * (lfnl / 100.) # generate gaussian noise for the full dataset nsamples = np.random.standard_normal(fds.samples.shape) # scale per each feature nsamples *= noise_amps # nyquist frequency nf = sr / 2.0 # along samples low-pass filtering fb, fa = butter(bord, cutoff / nf) nsamples = lfilter(fb, fa, nsamples, axis=0) # add the pedestal nsamples += msample # HF noise if not hfnl is None: noise_amps = msample * (hfnl / 100.) nsamples += np.random.standard_normal(nsamples.shape) * noise_amps fds.samples = nsamples return fds def random_affine_transformation(ds, scale_fac=100., shift_fac=10.): """Distort a dataset by random scale, shift, and rotation. The original data samples are transformed by applying a random rotation, shifting by a random vector (randomly selected, scaled input sample), and scaled by a random factor (randomly selected input feature values, scaled by an additional factor). The effective transformation values are stored in the output dataset's attribute collection as 'random_rotation', 'random_shift', and 'random_scale' respectively. Parameters ---------- ds : Dataset Input dataset. Its sample and features attributes will be assigned to the output dataset. scale_fac : float Factor by which the randomly selected value for data scaling is scaled itself. shift_fac : float Factor by which the randomly selected shift vector is scaled. """ rndidx = np.random.randint R = get_random_rotation(ds.nfeatures) samples = ds.samples # reusing random data from dataset itself random_scale = samples[rndidx(len(ds)), rndidx(ds.nfeatures)] * scale_fac random_shift = samples[rndidx(len(ds))] * shift_fac samples = np.dot(samples, R) * random_scale \ + random_shift return Dataset(samples, sa=ds.sa, fa=ds.fa, a={'random_rotation': R, 'random_scale': random_scale, 'random_shift': random_shift}) pymvpa2-2.2.0/mvpa2/misc/dcov.py000066400000000000000000000152071202542755000164050ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Compute dcov/dcorr measures for independence testing References ---------- http://en.wikipedia.org/wiki/Distance_covariance """ """ TODO: consider use of numexpr to speed all those up -- there is plenty of temp storage """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import warning, externals if externals.exists('cran-energy'): import rpy2.robjects import rpy2.robjects.numpy2ri if hasattr(rpy2.robjects.numpy2ri,'activate'): rpy2.robjects.numpy2ri.activate() RRuntimeError = rpy2.robjects.rinterface.RRuntimeError r = rpy2.robjects.r r.library('energy') def _euclidean_distances(x, uv): """Compute euclidean distances for samples in columns Helper function for dcov computations Parameters ---------- uv : bool, optional if True, then for each observable distance computed separately from the others. If not -- then distances computed for multivariate patterns and output as observable == 1 output observable x sample x sample """ # TODO: could possibly be optimized to not compute the same i,j # and i,i distance twice but I wanted to avoid any explicit Python # loop here dx = x[:, None, :] - x[:, :, None] if uv: return np.sqrt(np.square(dx)) else: return np.sqrt(np.sum(np.square(dx), axis=0))[None,:] def _Aij(d): """Given distances matrix observable x sample x sample return normalized one where means get subtracted """ mean_i = np.mean(d, axis=1) mean_j = np.mean(d, axis=2) mean_ij = np.mean(mean_i, axis=1) # ain't broadcasting is cool? return d - mean_i[:, None] - mean_j[:, :, None] + mean_ij[:, None, None] if externals.exists('cran-energy'): def dCOV_R(x, y, uv=False, all_est=True): """Implementation of dCOV interfaced to original R energy library -- used primarily for testing """ # trust no one! if uv: N = len(x) M = len(y) dCovs = np.zeros((N, M)) dCors = np.zeros((N, M)) Varx = np.zeros((N,)) Vary = np.zeros((M,)) for ix, x_ in enumerate(x): for iy, y_ in enumerate(y): out = r.DCOR(x_, y_) #outr = r.dcor(x_, y_) #outv = r.dcov(x_, y_) dCovs[ix, iy] = out[0][0] dCors[ix, iy] = out[1][0] Varx[ix] = out[2][0] Vary[iy] = out[3][0] outputs = dCovs, dCors, Varx, Vary else: out = r.DCOR(x.T, y.T) outputs = tuple([o[0] for o in out]) if not all_est: outputs = outputs[:1] if uv: return outputs else: # return corresponding scalars if it was a multivariate estimate return tuple(np.asscalar(np.asanyarray(x)) for x in outputs) def dCOV(x, y, rowvar=1, uv=False, all_est=True): """Estimate dCov measure(s) between x and y. Allows uni- or multi-variate estimations Name dCOV was chosen to match implementation in R energy toolbox: http://cran.r-project.org/web/packages/energy/index.html Parameters ---------- rowvar : int, optional If `rowvar` is 1 (default), then each row represents a variable, with observations in the columns. If 0, the relationship is transposed: each column represents a variable, while the rows contain observations. uv : bool, optional dCov is a multivariate measure of dependence so it would produce a single estimate for two matrices NxT and MxT. With uv=True (univariate estimation) it will return estimates for every pair of variables from x and y, thus NxM matrix, somewhat similar to what numpy.corrcoef does besides not estimating within x or y all_est : bool, True Since majority of computation of dCor(x,y), dVar(x) and dVar(y) is spend while estimating dVar(x, y) it makes sense to estimate all of them at the same time if any of the later is necessary. So output would then consist of dCov, dCor, dVar(x), dVar(y) tuple, matching the order of energy toolbox dCOV output in R. """ # Assure that we have correct dimensionality x = np.atleast_2d(x) y = np.atleast_2d(y) if rowvar == 0: # operate on transposes x = x.T y = y.T elif rowvar == 1: pass # default mode else: raise ValueError("rowvar must be either 0 (samples are rows) " "or 1 (observables are rows). Got %d" % rowvar) # number of samples nsamples = x.shape[1] assert(nsamples == y.shape[1]) if nsamples < 3: warning("You are trying to estimate dCov on %d sample(s). " "Please verify correctness of input" % nsamples) Dx = _euclidean_distances(x, uv=uv) Dy = _euclidean_distances(y, uv=uv) N, M = len(Dx), len(Dy) # .reshape is here to combine TxT into a single T**2 dimension to ease sums Ax = _Aij(Dx).reshape((N, -1)) Ay = _Aij(Dy).reshape((M, -1)) # and once again use cool broadcasting although at the cost of # memory since per se temporary storage is not necessary Axy = Ax[:, None] * Ay[None, :] dCov = np.sqrt(np.mean(Axy, axis=2)) if not all_est: outputs = (dCov,) else: # if all estimates were requested -- be so dVar_x = np.sqrt(np.mean(np.square(Ax), axis=1)) dVar_y = np.sqrt(np.mean(np.square(Ay), axis=1)) dVar_xy = np.sqrt(dVar_x[:, None] * dVar_y[None, :]) dCor = np.zeros(shape=dCov.shape) # So that we do not / 0. R's dCOV seems to return 0s for # those cases, so we will dVar_xy_nz = dVar_xy.nonzero() dCor[dVar_xy_nz] = dCov[dVar_xy_nz] / dVar_xy[dVar_xy_nz] outputs = dCov, dCor, dVar_x, dVar_y if uv: return outputs else: # return corresponding scalars if it was a multivariate estimate return tuple(np.asscalar(x) for x in outputs) def dcorcoef(x, y, rowvar=1, uv=False): """Return dCor coefficient(s) only (convenience function). See :func:`dCOV` for more information """ _, dCor, _, _ = dCOV(x, y, rowvar=rowvar, uv=uv, all_est=True) return dCor pymvpa2-2.2.0/mvpa2/misc/errorfx.py000066400000000000000000000146141202542755000171420ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Error functions helpers. PyMVPA can use arbitrary function which takes 2 arguments: predictions and targets and spits out a scalar value. Functions below are for the convinience, and they confirm the agreement that 'smaller' is 'better'""" __docformat__ = 'restructuredtext' import numpy as np from numpy import trapz from mvpa2.base import externals # Various helper functions ##REF: Name was automagically refactored def mean_power_fx(data): """Returns mean power Similar to var but without demeaning """ return np.mean(np.asanyarray(data)**2) ##REF: Name was automagically refactored def root_mean_power_fx(data): """Returns root mean power to be comparable against RMSE """ return np.sqrt(mean_power_fx(data)) def rms_error(predicted, target): """Computes the root mean squared error of some target and some predicted values. Both 'predicted' and 'target' can be either scalars or sequences, but have to be of the same length. """ return np.sqrt(np.mean(np.subtract(predicted, target)**2)) def mean_mismatch_error(predicted, target): """Computes the percentage of mismatches between some target and some predicted values. Both 'predicted' and 'target' can be either scalars or sequences, but have to be of the same length. """ # XXX should we enforce consistent dimensionality and type? # e.g. now lists would lead to incorrect results, and # comparisons of arrays of different lengths would also # tolerate input and produce some incorrect value as output # error # np.equal , np.not_equal -- prohibited -- those do not work on literal labels! uff # so lets use == and != assuring dealing with arrays return np.mean( np.asanyarray(predicted) != target ) def mismatch_error(predicted, target): """Computes number of mismatches between some target and some predicted values. Both 'predicted' and 'target' can be either scalars or sequences, but have to be of the same length. """ return np.sum( np.asanyarray(predicted) != target ) def match_accuracy(predicted, target): """Computes number of matches between some target and some predicted values. Both 'predicted' and 'target' can be either scalars or sequences, but have to be of the same length. """ return np.sum( np.asanyarray(predicted) == target ) def mean_match_accuracy(predicted, target): """Computes mean of number of matches between some target and some predicted values. Both 'predicted' and 'target' can be either scalars or sequences, but have to be of the same length. """ return np.mean( np.asanyarray(predicted) == target ) def auc_error(predicted, target): """Computes the area under the ROC for the given the target and predicted to make the prediction.""" # sort the target in descending order based on the predicted and # set to boolean t = np.asanyarray(target)[np.argsort(predicted)[::-1]] > 0 # calculate the true positives tp = np.concatenate( ([0], np.cumsum(t)/t.sum(dtype=np.float), [1])) # calculate the false positives fp = np.concatenate( ([0], np.cumsum(~t)/(~t).sum(dtype=np.float), [1])) return trapz(tp, fp) if externals.exists('scipy'): from scipy.stats import pearsonr def correlation(predicted, target): """Computes the correlation between the target and the predicted values. In case of NaN correlation (no variance in predictors or targets) result output error is 0. """ r = pearsonr(predicted, target)[0] if np.isnan(r): r = 0.0 return r def corr_error_prob(predicted, target): """Computes p-value of correlation between the target and the predicted values. """ return pearsonr(predicted, target)[1] else: # slower(?) and bogus(p-value) implementations for non-scipy users # TODO: implement them more or less correcly with numpy # functionality def correlation(predicted, target): """Computes the correlation between the target and the predicted values. Return 1-CC In case of NaN correlation (no variance in predictors or targets) result output error is 1.0. """ l = len(predicted) r = np.corrcoef(np.reshape(predicted, l), np.reshape(target, l))[0,1] if np.isnan(r): r = 0.0 return r def corr_error_prob(predicted, target): """Computes p-value of correlation between the target and the predicted values. """ from mvpa2.base import warning warning("p-value for correlation is implemented only when scipy is " "available. Bogus value -1.0 is returned otherwise") return -1.0 def corr_error(predicted, target): """Computes the correlation between the target and the predicted values. Resultant value is the 1 - correlation coefficient, so minimization leads to the best value (at 0). In case of NaN correlation (no variance in predictors or targets) result output error is 1.0. """ return 1 - correlation(predicted, target) def relative_rms_error(predicted, target): """Ratio between RMSE and root mean power of target output. So it can be considered as a scaled RMSE -- perfect reconstruction has values near 0, while no reconstruction has values around 1.0. Word of caution -- it is not commutative, ie exchange of predicted and target might lead to completely different answers """ return rms_error(predicted, target) / root_mean_power_fx(target) def variance_1sv(predicted, target): """Ratio of variance described by the first singular value component. Of limited use -- left for the sake of not wasting it """ data = np.vstack( (predicted, target) ).T # demean data_demeaned = data - np.mean(data, axis=0) u, s, vh = np.linalg.svd(data_demeaned, full_matrices=0) # assure sorting s.sort() s=s[::-1] cvar = s[0]**2 / np.sum(s**2) return cvar pymvpa2-2.2.0/mvpa2/misc/exceptions.py000066400000000000000000000017411202542755000176310ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Exception classes which might get thrown""" __docformat__ = 'restructuredtext' class UnknownStateError(Exception): """Thrown if the internal state of the class is not yet defined. Classifiers and Algorithms classes might have properties, which are not defined prior to training or invocation has happened. """ pass class ConvergenceError(Exception): """Thrown if some algorithm does not converge to a solution. """ pass class InvalidHyperparameterError(Exception): """Generic exception to be raised when setting improper values as hyperparameters. """ pass pymvpa2-2.2.0/mvpa2/misc/fsl/000077500000000000000000000000001202542755000156575ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/misc/fsl/__init__.py000066400000000000000000000011511202542755000177660ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for FSL""" if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.misc.fsl') from mvpa2.misc.fsl.base import * from mvpa2.misc.fsl.flobs import * if __debug__: debug('INIT', 'mvpa2.misc.fsl end') pymvpa2-2.2.0/mvpa2/misc/fsl/base.py000066400000000000000000000221171202542755000171460ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Tiny snippets to interface with FSL easily.""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.misc.io import ColumnData from mvpa2.misc.support import Event if __debug__: from mvpa2.base import debug class FslEV3(ColumnData): """IO helper to read FSL's EV3 files. This is a three-column textfile format that is used to specify stimulation protocols for fMRI data analysis in FSL's FEAT module. Data is always read as `float`. """ def __init__(self, source): """Read and write FSL EV3 files. Parameters ---------- source : str Filename of an EV3 file """ # init data from known format ColumnData.__init__(self, source, header=['onsets', 'durations', 'intensities'], sep=None, dtype=float) @property def nevs(self): """Returns the number of EVs in the file. """ return self.nrows ##REF: Name was automagically refactored def get_ev(self, evid): """Returns a tuple of (onset time, simulus duration, intensity) for a certain EV. """ return (self['onsets'][evid], self['durations'][evid], self['intensities'][evid]) def tofile(self, filename): """Write data to a FSL EV3 file. """ ColumnData.tofile(self, filename, header=False, header_order=['onsets', 'durations', 'intensities'], sep=' ') ##REF: Name was automagically refactored def to_events(self, **kwargs): """Convert into a list of `Event` instances. Parameters ---------- kwargs Any keyword arugment provided would be replicated, through all the entries. Useful to specify label or even a chunk """ return \ [Event(onset=self['onsets'][i], duration=self['durations'][i], features=[self['intensities'][i]], **kwargs) for i in xrange(self.nevs)] onsets = property(fget=lambda self: self['onsets']) durations = property(fget=lambda self: self['durations']) intensities = property(fget=lambda self: self['intensities']) class McFlirtParams(ColumnData): """Read and write McFlirt's motion estimation parameters from and to text files. """ header_def = ['rot1', 'rot2', 'rot3', 'x', 'y', 'z'] def __init__(self, source): """Initialize McFlirtParams Parameters ---------- source : str Filename of a parameter file. """ ColumnData.__init__(self, source, header=McFlirtParams.header_def, sep=None, dtype=float) def tofile(self, filename): """Write motion parameters to file. """ ColumnData.tofile(self, filename, header=False, header_order=McFlirtParams.header_def, sep=' ') def plot(self): """Produce a simple plot of the estimated translation and rotation parameters using. You still need to can pylab.show() or pylab.savefig() if you want to see/get anything. """ # import internally as it takes some time and might not be needed most # of the time import pylab as pl # translations subplot pl.subplot(211) pl.plot(self.x) pl.plot(self.y) pl.plot(self.z) pl.ylabel('Translations in mm') pl.legend(('x', 'y', 'z'), loc=0) # rotations subplot pl.subplot(212) pl.plot(self.rot1) pl.plot(self.rot2) pl.plot(self.rot3) pl.ylabel('Rotations in rad') pl.legend(('rot1', 'rot2', 'rot3'), loc=0) def toarray(self): """Returns the data as an array with six columns (same order as in file). """ import numpy as np # return as array with time axis first return np.array([self[i] for i in McFlirtParams.header_def], dtype='float').T class FslGLMDesign(object): """Load FSL GLM design matrices from file. Be aware that such a desig matrix has its regressors in columns and the samples in its rows. """ def __init__(self, source): """ Parameters ---------- source : filename Compressed files will be read as well, if their filename ends with '.gz'. """ # XXX maybe load from array as well self._load_file(source) ##REF: Name was automagically refactored def _load_file(self, fname): """Helper function to load GLM definition from a file. """ # header info nwaves = 0 ntimepoints = 0 matrix_offset = 0 # open the file compressed or not if fname.endswith('.gz'): import gzip fh = gzip.open(fname, 'r') else: fh = open(fname, 'r') # read header for i, line in enumerate(fh): if line.startswith('/NumWaves'): nwaves = int(line.split()[1]) if line.startswith('/NumPoints'): ntimepoints = int(line.split()[1]) if line.startswith('/PPheights'): self.ppheights = [float(i) for i in line.split()[1:]] if line.startswith('/Matrix'): matrix_offset = i + 1 # done with the header, now revert to NumPy's loadtxt for convenience fh.close() self.mat = np.loadtxt(fname, skiprows=matrix_offset) # checks if not self.mat.shape == (ntimepoints, nwaves): raise IOError, "Design matrix file '%s' did not contain expected " \ "matrix size (expected %s, got %s)" \ % (fname, str((ntimepoints, nwaves)), self.mat.shape) def plot(self, style='lines', **kwargs): """Visualize the design matrix. Parameters ---------- style: 'lines', 'matrix' **kwargs: Additional arguments will be passed to the corresponding matplotlib plotting functions 'plot()' and 'pcolor()' for 'lines' and 'matrix' plots respectively. """ # import internally as it takes some time and might not be needed most # of the time import pylab as pl if style == 'lines': # common y-axis yax = np.arange(0, self.mat.shape[0]) axcenters = [] col_offset = max(self.ppheights) # for all columns for i in xrange(self.mat.shape[1]): axcenter = i * col_offset pl.plot(self.mat[:, i] + axcenter, yax, **kwargs) axcenters.append(axcenter) pl.xticks(np.array(axcenters), range(self.mat.shape[1])) elif style == 'matrix': pl.pcolor(self.mat, **kwargs) ticks = np.arange(1, self.mat.shape[1]+1) pl.xticks(ticks - 0.5, ticks) else: raise ValueError, "Unknown plotting style '%s'" % style # labels and turn y-axis upside down pl.ylabel('Samples (top to bottom)') pl.xlabel('Regressors') pl.ylim(self.mat.shape[0],0) def read_fsl_design(fsf_file): """Reads an FSL FEAT design.fsf file and return the content as a dictionary. Parameters ---------- fsf_file : filename, file-like """ # This function was originally contributed by Russell Poldrack if isinstance(fsf_file, basestring): infile = open(fsf_file, 'r') else: infile = fsf_file # target dict fsl = {} # loop over all lines for line in infile: line = line.strip() # if there is nothing on the line, do nothing if not line or line[0] == '#': continue # strip leading TCL 'set' key, value = line.split(None, 2)[1:] # fixup the 'y-' thing if value == 'y-': value = "y" # special case of variable keyword if line.count('_files('): # e.g. feat_files(1) -> feat_files key = key.split('(')[0] # decide which type we have for the value # int? if value.isdigit(): fsl[key] = int(value) else: # float? try: fsl[key] = float(value) except ValueError: # must be string then, but... # sometimes there are quotes, sometimes not, but if the value # should be a string we remove them, since the value is already # of this type fsl[key] = value.strip('"') return fsl pymvpa2-2.2.0/mvpa2/misc/fsl/flobs.py000066400000000000000000000106031202542755000173360ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wrapper around FSLs halfcosbasis to generate HRF kernels""" __docformat__ = 'restructuredtext' import os import tempfile import shutil import numpy as np import math ##REF: Name was automagically refactored def make_flobs(pre=0, rise=5, fall=5, undershoot=5, undershootamp=0.3, nsamples=1, resolution=0.05, nsecs=-1, nbasisfns=2): """Wrapper around the FSL tool halfcosbasis. This function uses halfcosbasis to generate samples of HRF kernels. Kernel parameters can be modified analogous to the Make_flobs GUI which is part of FSL. :: ^ /-\\ | / \\ 1 / \\ | / \\ | / \\ | / \\ -----/ \\ /----- | \\--/ | undershootamp | | | | | | | | | | pre rise fall undershoot Parameters 'pre', 'rise', 'fall', 'undershoot' and 'undershootamp' can be specified as 2-tuples (min-max range for sampling) and single value (setting exact values -- no sampling). If 'nsec' is negative, the length of the samples is determined automatically to include the whole kernel function (until it returns to baseline). 'nsec' has to be an integer value and is set to the next greater integer value if it is not. All parameters except for 'nsamples' and 'nbasisfns' are in seconds. """ # create tempdir and temporary parameter file pfile, pfilename = tempfile.mkstemp('pyflobs') wdir = tempfile.mkdtemp('pyflobs') # halfcosbasis can only handle >1 samples # so we simply compute two and later ignore the other if nsamples < 2: rnsamples = 2 else: rnsamples = nsamples # make range tuples if not supplied if not isinstance(pre, tuple): pre = (pre, pre) if not isinstance(rise, tuple): rise = (rise, rise) if not isinstance(fall, tuple): fall = (fall, fall) if not isinstance(undershoot, tuple): undershoot = (undershoot, undershoot) if not isinstance(undershootamp, tuple): undershootamp = (undershootamp, undershootamp) # calc minimum length of hrf if not specified # looks like it has to be an integer if nsecs < 0: nsecs = int( math.ceil( pre[1] \ + rise[1] \ + fall[1] \ + undershoot[1] \ + resolution ) ) else: nsecs = math.ceil(nsecs) # write parameter file pfile = os.fdopen( pfile, 'w' ) pfile.write(str(pre[0]) + ' ' + str(pre[1]) + '\n') pfile.write(str(rise[0]) + ' ' + str(rise[1]) + '\n') pfile.write(str(fall[0]) + ' ' + str(fall[1]) + '\n') pfile.write(str(undershoot[0]) + ' ' + str(undershoot[1]) + '\n') pfile.write('0 0\n0 0\n') pfile.write(str(undershootamp[0]) + ' ' + str(undershootamp[1]) + '\n') pfile.write('0 0\n') pfile.close() # call halfcosbasis to generate the hrf samples tochild, fromchild, childerror = os.popen3('halfcosbasis' + ' --hf=' + pfilename + ' --nbfs=' + str(nbasisfns) + ' --ns=' + str(nsecs) + ' --logdir=' + os.path.join(wdir, 'out') + ' --nhs=' + str(rnsamples) + ' --res=' + str(resolution) ) err = childerror.readlines() if len(err) > 0: print err raise RuntimeError, "Problem while running halfcosbasis." # read samples from file into an array hrfs = np.fromfile( os.path.join( wdir, 'out', 'hrfsamps.txt' ), sep = ' ' ) # reshape array to get one sample per row and 1d array only # for one sample hrf hrfs = \ hrfs.reshape( len(hrfs)/rnsamples, rnsamples).T[:nsamples].squeeze() # cleanup working dir (ignore errors) shutil.rmtree( wdir, True ) # remove paramter file os.remove( pfilename ) # and return an array return( hrfs ) pymvpa2-2.2.0/mvpa2/misc/fsl/melodic.py000066400000000000000000000064521202542755000176540ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Wrapper around the output of MELODIC (part of FSL)""" __docformat__ = 'restructuredtext' import os import numpy as np from mvpa2.base import externals if externals.exists('nibabel', raise_=True): import nibabel as nb class MelodicResults( object ): """Easy access to MELODIC output. Only important information is available (important as judged by the author). """ def __init__( self, path, fext='.nii.gz'): """Reads all information from the given MELODIC output path. """ self._fext = fext rpath = None lookup = ['', 'filtered_func_data.ica'] for lu in lookup: if os.path.exists(os.path.join(path, lu, 'melodic_IC' + fext)): rpath = os.path.join(path, lu) break if rpath is None: raise ValueError("Cannot find Melodic results at '%s'" % path) else: self._rpath = rpath self._ic = nb.load(os.path.join(rpath, 'melodic_IC' + fext)) self._mask = nb.load(os.path.join(rpath, 'mask' + fext)) self._tmodes = np.loadtxt(os.path.join(rpath, 'melodic_Tmodes' )) self._smodes = np.loadtxt(os.path.join(rpath, 'melodic_Smodes')) self._icstats = np.loadtxt(os.path.join(rpath, 'melodic_ICstats')) def _get_stat(self, type, ic): # melodic's IC number is one-based, we do zero-based img = nb.load(os.path.join(self._rpath, 'stats', '%s%i' % (type, ic + 1) + self._fext)) return img.get_data() def get_probmap(self, ic): return self._get_stat('probmap_', ic) def get_thresh_zstat(self, ic): return self._get_stat('thresh_zstat', ic) def get_tmodes(self): ns = self.smodes.shape[1] if ns > 1: # in multisession ICA melodic creates rank-1 approximation of a # timeseries from all sessions and stores them in the first column return self._tmodes.T[::ns+1] else: return self._tmodes.T def get_raw_tmodes(self): return self._tmodes # properties path = property(fget=lambda self: self._rpath ) ic = property(fget=lambda self: np.rollaxis(self._ic.get_data(), -1)) mask = property(fget=lambda self: self._mask.get_data()) nic = property(fget=lambda self: self._ic.get_shape()[3]) extent = property(fget=lambda self: self._ic.get_shape()[:3]) tmodes = property(fget=get_tmodes) smodes = property(fget=lambda self: self._smodes.T ) icstats = property(fget=lambda self: self._icstats, doc="""Per component statistics. The first two values (from a set of four per component) correspond to the explained variance of the component in the set of extracted components and two the total variance in the whole dataset.""") relvar_per_ic = property(fget=lambda self: self._icstats[:, 0]) truevar_per_ic = property(fget=lambda self: self._icstats[:, 1]) pymvpa2-2.2.0/mvpa2/misc/fx.py000066400000000000000000000203651202542755000160700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Misc. functions (in the mathematical sense)""" __docformat__ = 'restructuredtext' import numpy as np ##REF: Name was automagically refactored def single_gamma_hrf(t, A=5.4, W=5.2, K=1.0): """Hemodynamic response function model. The version consists of a single gamma function (also see double_gamma_hrf()). Parameters ---------- t : float Time. A : float Time to peak. W : float Full-width at half-maximum. K : float Scaling factor. """ A = float(A) W = float(W) K = float(K) return K * (t / A) ** ((A ** 2) / (W ** 2) * 8.0 * np.log(2.0)) \ * np.e ** ((t - A) / -((W ** 2) / A / 8.0 / np.log(2.0))) ##REF: Name was automagically refactored def double_gamma_hrf(t, A1=5.4, W1=5.2, K1=1.0, A2=10.8, W2=7.35, K2=0.35): """Hemodynamic response function model. The version is using two gamma functions (also see single_gamma_hrf()). Parameters ---------- t : float Time. A : float Time to peak. W : float Full-width at half-maximum. K : float Scaling factor. Parameters A, W and K exists individually for each of both gamma functions. """ A1 = float(A1) W1 = float(W1) K1 = float(K1) A2 = float(A2) W2 = float(W2) K2 = float(K2) return single_gamma_hrf(t, A1, W1, K1) - single_gamma_hrf(t, A2, W2, K2) def dual_gaussian(x, amp1=1.0, mean1=0.0, std1=1.0, amp2=1.0, mean2=0.0, std2=1.0): """Sum of two Gaussians. Parameters ---------- x : array Function argument amp1: float Amplitude parameter of the first Gaussian mean1: float Mean parameter of the first Gaussian std1: float Standard deviation parameter of the first Gaussian amp2: float Amplitude parameter of the second Gaussian mean2: float Mean parameter of the second Gaussian std2: float Standard deviation parameter of the second Gaussian """ from scipy.stats import norm if std1 <= 0 or std2 <= 0: return np.nan return (amp1 * norm.pdf(x, mean1, std1)) + (amp2 * norm.pdf(x, mean2, std2)) def dual_positive_gaussian(x, amp1=1.0, mean1=0.0, std1=1.0, amp2=1.0, mean2=0.0, std2=1.0): """Sum of two non-negative Gaussians Parameters ---------- x : array Function argument amp1: float Amplitude parameter of the first Gaussian mean1: float Mean parameter of the first Gaussian std1: float Standard deviation parameter of the first Gaussian amp2: float Amplitude parameter of the second Gaussian mean2: float Mean parameter of the second Gaussian std2: float Standard deviation parameter of the second Gaussian """ if amp1 < 0 or amp2 < 0: return np.nan return dual_gaussian(x, amp1, mean1, std1, amp2, mean2, std2) ##REF: Name was automagically refactored def least_sq_fit(fx, params, y, x=None, **kwargs): """Simple convenience wrapper around SciPy's optimize.leastsq. The advantage of using this wrapper instead of optimize.leastsq directly is, that it automatically constructs an appropriate error function and easily deals with 2d data arrays, i.e. each column with multiple values for the same function argument (`x`-value). Parameters ---------- fx : functor Function to be fitted to the data. It has to take a vector with function arguments (`x`-values) as the first argument, followed by an arbitrary number of (to be fitted) parameters. params : sequence Sequence of start values for all to be fitted parameters. During fitting all parameters in this sequences are passed to the function in the order in which they appear in this sequence. y : 1d or 2d array The data the function is fitted to. In the case of a 2d array, each column in the array is considered to be multiple observations or measurements of function values for the same `x`-value. x : Corresponding function arguments (`x`-values) for each datapoint, i.e. element in `y` or columns in `y', in the case of `y` being a 2d array. If `x` is not provided it will be generated by `np.arange(m)`, where `m` is either the length of `y` or the number of columns in `y`, if `y` is a 2d array. **kwargs All additonal keyword arguments are passed to `fx`. Returns ------- tuple : as returned by scipy.optimize.leastsq i.e. 2-tuple with list of final (fitted) parameters of `fx` and an integer value indicating success or failure of the fitting procedure (see leastsq docs for more information). """ # import here to not let the whole module depend on SciPy from scipy.optimize import leastsq y = np.asanyarray(y) if len(y.shape) > 1: nsamp, ylen = y.shape else: nsamp, ylen = (1, len(y)) # contruct matching x-values if necessary if x is None: x = np.arange(ylen) # transform x and y into 1d arrays if nsamp > 1: x = np.array([x] * nsamp).ravel() y = y.ravel() # define error function def efx(p): err = y - fx(x, *p, **kwargs) return err # do fit return leastsq(efx, params) def fit2histogram(X, fx, params, nbins=20, x_range=None): """Fit a function to multiple histograms. First histogram is computed for each data row vector individually. Afterwards a custom function is fitted to the binned data. TODO ---- - ATM requires multiple "samples" although it would be as useful with 1, and it pukes if we add that single rudimentary dimension Parameters ---------- X : array-like Data (nsamples x nfeatures) fx : functor Function to be fitted. Its interface has to comply to the requirements as for `least_sq_fit`. params : tuple Initial parameter values. nbins : int Number of histogram bins. x_range : None or tuple Range spanned by the histogram bins. By default the actual mininum and maximum values of the data are used. Returns ------- tuple (histograms (nsampels x nbins), bin locations (left border), bin width, output of `least_sq_fit`) """ if x_range is None: # use global min max to ensure consistent bins across observations xrange = (X.min(), X.max()) nobsrv = len(X) # histograms per observation H = [] bin_centers = None bin_left = None for obsrv in X: hi = np.histogram(obsrv, bins=nbins, range=x_range) if bin_centers is None: bin_left = hi[1][:-1] # round to take care of numerical instabilities bin_width = np.abs( np.asscalar( np.unique( np.round(bin_left - hi[1][1:], decimals=6)))) bin_centers = bin_left + bin_width / 2 H.append(hi[0]) H = np.asarray(H) return (H, bin_left, bin_width, least_sq_fit(fx, params, H, bin_centers)) def get_random_rotation(ns, nt=None, data=None): """Return some random rotation (or rotation + dim reduction) matrix Parameters ---------- ns : int Dimensionality of source space nt : int, optional Dimensionality of target space data : array, optional Some data (should have rank high enough) to derive rotation """ if nt is None: nt = ns # figure out some "random" rotation d = max(ns, nt) if data is None: data = np.random.normal(size=(d*10, d)) _u, _s, _vh = np.linalg.svd(data[:, :d]) R = _vh[:ns, :nt] if ns == nt: # Test if it is indeed a rotation matrix ;) # Lets flip first axis if necessary if np.linalg.det(R) < 0: R[:, 0] *= -1.0 return R pymvpa2-2.2.0/mvpa2/misc/io/000077500000000000000000000000001202542755000155025ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/misc/io/__init__.py000066400000000000000000000011121202542755000176060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for IO helpers""" if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.misc.io') from mvpa2.misc.io.base import * if __debug__: debug('INIT', 'mvpa2.misc.io end') pymvpa2-2.2.0/mvpa2/misc/io/base.py000066400000000000000000000473351202542755000170020ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Some little helper for reading (and writing) common formats from and to disk.""" __docformat__ = 'restructuredtext' import numpy as np import mvpa2.support.copy as copy from mvpa2.base.dochelpers import enhanced_doc_string from re import sub from mvpa2.base import warning from mvpa2.misc.support import Event if __debug__: from mvpa2.base import debug __all__ = ['DataReader', 'ColumnData', 'SampleAttributes', 'SensorLocations', 'XAVRSensorLocations', 'TuebingenMEGSensorLocations', 'labels2chunks', 'design2labels'] class DataReader(object): """Base class for data readers. Every subclass has to put all information into to variable: `self._data`: ndarray The data array has to have the samples separating dimension along the first axis. `self._props`: dict All other meaningful information has to be stored in a dictionary. This class provides two methods (and associated properties) to retrieve this information. """ def __init__(self): """Initialize base class `DataReader` -- no parameters. """ self._props = {} self._data = None @property def props(self): """Return the dictionary with the data properties. """ return self._props @property def data(self): """Return the data array. """ return self._data class ColumnData(dict): """Read data that is stored in columns of text files. All read data is available via a dictionary-like interface. If column headers are available, the column names serve as dictionary keys. If no header exists an articfical key is generated: str(number_of_column). Splitting of text file lines is performed by the standard split() function (which gets passed the `sep` argument as separator string) and each element is converted into the desired datatype. Because data is read into a dictionary no two columns can have the same name in the header! Each column is stored as a list in the dictionary. """ def __init__(self, source, header=True, sep=None, headersep=None, dtype=float, skiplines=0): """Read data from file into a dictionary. Parameters ---------- source : str or dict If values is given as a string all data is read from the file and additonal keyword arguments can be used to customize the read procedure. If a dictionary is passed a deepcopy is performed. header : bool or list of str Indicates whether the column names should be read from the first line (`header=True`). If `header=False` unique column names will be generated (see class docs). If `header` is a python list, it's content is used as column header names and its length has to match the number of columns in the file. sep : str or None Separator string. The actual meaning depends on the output format (see class docs). headersep : str or None Separator string used in the header. The actual meaning depends on the output format (see class docs). dtype : type or list(types) Desired datatype(s). Datatype per column get be specified by passing a list of types. skiplines : int Number of lines to skip at the beginning of the file. """ # init base class dict.__init__(self) # intialize with default self._header_order = None if isinstance(source, str): self._from_file(source, header=header, sep=sep, headersep=headersep, dtype=dtype, skiplines=skiplines) elif isinstance(source, dict): for k, v in source.iteritems(): self[k] = v # check data integrity self._check() else: raise ValueError, 'Unkown source for ColumnData [%r]' \ % type(source) # generate missing properties for each item in the header classdict = self.__class__.__dict__ for k in self.keys(): if not classdict.has_key(k): getter = "lambda self: self._get_attrib('%s')" % (k) # Sanitarize the key, substitute ' []' with '_' k_ = sub('[[\] ]', '_', k) # replace multipe _s k_ = sub('__+', '_', k_) # remove quotes k_ = sub('["\']', '', k_) if __debug__: debug("IOH", "Registering property %s for ColumnData key %s" % (k_, k)) # make sure to import class directly into local namespace # otherwise following does not work for classes defined # elsewhere exec 'from %s import %s' % (self.__module__, self.__class__.__name__) exec "%s.%s = property(fget=%s)" % \ (self.__class__.__name__, k_, getter) # TODO!!! Check if it is safe actually here to rely on value of # k in lambda. May be it is treated as continuation and # some local space would override it???? #setattr(self.__class__, # k, # property(fget=lambda x: x._get_attrib("%s" % k))) # it seems to be error-prone due to continuation... __doc__ = enhanced_doc_string('ColumnData', locals()) ##REF: Name was automagically refactored def _get_attrib(self, key): """Return corresponding value if given key is known to current instance Is used for automatically added properties to the class. Raises ------ ValueError: If `key` is not known to given instance Returns ------- Value if `key` is known """ if self.has_key(key): return self[key] else: raise ValueError, "Instance %r has no data about %r" \ % (self, key) def __str__(self): s = self.__class__.__name__ if len(self.keys())>0: s += " %d rows, %d columns [" % \ (self.nrows, self.ncolumns) s += reduce(lambda x, y: x+" %s" % y, self.keys()) s += "]" return s def _check(self): """Performs some checks for data integrity. """ length = None for k in self.keys(): if length == None: length = len(self[k]) else: if not len(self[k]) == length: raise ValueError, "Data integrity lost. Columns do not " \ "have equal length." def _from_file(self, filename, header, sep, headersep, dtype, skiplines): """Loads column data from file -- clears object first. """ # make a clean table self.clear() file_ = open(filename, 'r') self._header_order = None [ file_.readline() for x in range(skiplines) ] """Simply skip some lines""" # make column names, either take header or generate if header == True: # read first line and split by 'sep' hdr = file_.readline().split(headersep) # remove bogus empty header titles hdr = [ x for x in hdr if len(x.strip()) ] self._header_order = hdr elif isinstance(header, list): hdr = header else: hdr = [ str(i) for i in xrange(len(file_.readline().split(sep))) ] # reset file to not miss the first line file_.seek(0) [ file_.readline() for x in range(skiplines) ] # string in lists: one per column tbl = [ [] for i in xrange(len(hdr)) ] # do per column dtypes if not isinstance(dtype, list): dtype = [dtype] * len(hdr) # parse line by line and feed into the lists for line in file_: # get rid of leading and trailing whitespace line = line.strip() # ignore empty lines and comment lines if not line or line.startswith('#'): continue l = line.split(sep) if not len(l) == len(hdr): raise RuntimeError, \ "Number of entries in line [%i] does not match number " \ "of columns in header [%i]." % (len(l), len(hdr)) for i, v in enumerate(l): if not dtype[i] is None: try: v = dtype[i](v) except ValueError: warning("Can't convert %r to desired datatype %r." % (v, dtype) + " Leaving original type") tbl[i].append(v) # check if not len(tbl) == len(hdr): raise RuntimeError, "Number of columns read from file does not " \ "match the number of header entries." # fill dict for i, v in enumerate(hdr): self[v] = tbl[i] def __iadd__(self, other): """Merge column data. """ # for all columns in the other object for k, v in other.iteritems(): if not self.has_key(k): raise ValueError, 'Unknown key [%r].' % (k,) if not isinstance(v, list): raise ValueError, 'Can only merge list data, but got [%r].' \ % type(v) # now it seems to be ok # XXX check for datatype? self[k] += v # look for problems, like columns present in self, but not in other self._check() return self ##REF: Name was automagically refactored def select_samples(self, selection): """Return new ColumnData with selected samples""" data = copy.deepcopy(self) for k, v in data.iteritems(): data[k] = [v[x] for x in selection] data._check() return data @property def ncolumns(self): """Returns the number of columns. """ return len(self.keys()) def tofile(self, filename, header=True, header_order=None, sep=' '): """Write column data to a text file. Parameters ---------- filename : str Target filename header : bool, optional If `True` a column header is written, using the column keys. If `False` no header is written. header_order : None or list of str If it is a list of strings, they will be used instead of simply asking for the dictionary keys. However these strings must match the dictionary keys in number and identity. This argument type can be used to determine the order of the columns in the output file. The default value is `None`. In this case the columns will be in an arbitrary order. sep : str, optional String that is written as a separator between to data columns. """ # XXX do the try: except: dance file_ = open(filename, 'w') # write header if header_order == None: if self._header_order is None: col_hdr = self.keys() else: # use stored order + newly added keys at the last columns col_hdr = self._header_order + \ list(set(self.keys()).difference( set(self._header_order))) else: if not len(header_order) == self.ncolumns: raise ValueError, 'Header list does not match number of ' \ 'columns.' for k in header_order: if not self.has_key(k): raise ValueError, 'Unknown key [%r]' % (k,) col_hdr = header_order if header == True: file_.write(sep.join(col_hdr) + '\n') # for all rows for r in xrange(self.nrows): # get attributes for all keys l = [str(self[k][r]) for k in col_hdr] # write to file with proper separator file_.write(sep.join(l) + '\n') file_.close() @property def nrows(self): """Returns the number of rows. """ # no data no rows (after Bob Marley) if not len(self.keys()): return 0 # otherwise first key is as good as any other else: return len(self[self.keys()[0]]) class SampleAttributes(ColumnData): """Read and write PyMVPA sample attribute definitions from and to text files. """ def __init__(self, source, literallabels=True, header=None): """Read PyMVPA sample attributes from disk. Parameters ---------- source : str Filename of an atrribute file literallabels : bool, optional Either labels are given as literal strings header : None or bool or list of str If None, ['targets', 'chunks'] is assumed. Otherwise the same behavior as of `ColumnData` """ if literallabels: dtypes = [str, float] else: dtypes = float if header is None: header = ['targets', 'chunks'] ColumnData.__init__(self, source, header=header, sep=None, dtype=dtypes) def tofile(self, filename): """Write sample attributes to a text file. """ ColumnData.tofile(self, filename, header=False, header_order=['targets', 'chunks'], sep=' ') @property def nsamples(self): """Returns the number of samples in the file. """ return self.nrows class SensorLocations(ColumnData): """Base class for sensor location readers. Each subclass should provide x, y, z coordinates via the `pos_x`, `pos_y`, and `pos_z` attrbibutes. Axes should follow the following convention: x-axis: left -> right y-axis: anterior -> posterior z-axis: superior -> inferior """ def __init__(self, *args, **kwargs): """Pass arguments to ColumnData. """ ColumnData.__init__(self, *args, **kwargs) def locations(self): """Get the sensor locations as an array. Returns ------- (nchannels x 3) array with coordinates in (x, y, z) """ return np.array((self.pos_x, self.pos_y, self.pos_z)).T class XAVRSensorLocations(SensorLocations): """Read sensor location definitions from a specific text file format. File layout is assumed to be 5 columns: 1. sensor name 2. some useless integer 3. position on x-axis 4. position on y-axis 5. position on z-axis """ def __init__(self, source): """Read sensor locations from file. Parameters ---------- source : filename of an attribute file """ SensorLocations.__init__( self, source, header=['names', 'some_number', 'pos_x', 'pos_y', 'pos_z'], sep=None, dtype=[str, int, float, float, float]) class TuebingenMEGSensorLocations(SensorLocations): """Read sensor location definitions from a specific text file format. File layout is assumed to be 7 columns:: 1: sensor name 2: position on y-axis 3: position on x-axis 4: position on z-axis 5-7: same as 2-4, but for some outer surface thingie. Note that x and y seem to be swapped, ie. y as defined by SensorLocations conventions seems to be first axis and followed by x. Only inner surface coordinates are reported by `locations()`. """ def __init__(self, source): """Read sensor locations from file. Parameters ---------- source : filename of an attribute file """ SensorLocations.__init__( self, source, header=['names', 'pos_y', 'pos_x', 'pos_z', 'pos_y2', 'pos_x2', 'pos_z2'], sep=None, dtype=[str, float, float, float, float, float, float]) def design2labels(columndata, baseline_label=0, func=lambda x: x > 0.0): """Helper to convert design matrix into a list of labels Given a design, assign a single label to any given sample TODO: fix description/naming Parameters ---------- columndata : ColumnData Attributes where each known will be considered as a separate explanatory variable (EV) in the design. baseline_label What label to assign for samples where none of EVs was given a value func : functor Function which decides either a value should be considered Returns ------- list of labels which are taken from column names in ColumnData and baseline_label """ # doing it simple naive way but it should be of better control if # we decide to process columndata with non-numeric entries etc keys = columndata.keys() labels = [] for row in xrange(columndata.nrows): entries = [ columndata[key][row] for key in keys ] # which entries get selected selected = [ x for x in zip(keys, entries) if func(x[1]) ] nselected = len(selected) if nselected > 1: # if there is more than a single one -- we are in problem raise ValueError, "Row #%i with items %s has multiple entries " \ "meeting the criterion. Cannot decide on the label" % \ (row, entries) elif nselected == 1: label = selected[0][0] else: label = baseline_label labels.append(label) return labels __known_chunking_methods = { 'alllabels': 'Each chunk must contain instances of all labels' } def labels2chunks(labels, method="alllabels", ignore_labels=None): """TOBE ASSIGNED BELOW """ chunks = [] if ignore_labels is None: ignore_labels = [] alllabels = set(labels).difference(set(ignore_labels)) if method == 'alllabels': seenlabels = set() lastlabel = None chunk = 0 for label in labels: if label != lastlabel: if seenlabels == alllabels: chunk += 1 seenlabels = set() lastlabel = label if not label in ignore_labels: seenlabels.update([label]) chunks.append(chunk) chunks = np.array(chunks) # fix up a bit the trailer if seenlabels != alllabels: chunks[chunks == chunk] = chunk-1 chunks = list(chunks) else: errmsg = "Unknown method to derive chunks is requested. Known are:\n" for method, descr in __known_chunking_methods.iteritems(): errmsg += " %s : %s\n" % (method, descr) raise ValueError, errmsg return chunks labels2chunks.__doc__ = \ """Automagically decide on chunks based on labels Parameters ---------- labels labels to base chunking on method : str codename for method to use. Known are %s ignore_labels : list of str depends on the method. If method `alllabels`, then don't seek for such labels in chunks. E.g. some 'reject' samples :rtype: list """ % __known_chunking_methods.keys() pymvpa2-2.2.0/mvpa2/misc/io/hamster.py000066400000000000000000000141211202542755000175160ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper for simple storage facility via cPickle and optionally zlib""" __docformat__ = 'restructuredtext' import os from mvpa2.base import externals _d_geti_ = dict.__getitem__ _d_seti_ = dict.__setitem__ _o_geta_ = dict.__getattribute__ _o_seta_ = dict.__setattr__ if externals.exists('cPickle', raise_=True) and \ externals.exists('gzip', raise_=True): import cPickle, gzip if __debug__: from mvpa2.base import debug class Hamster(object): """Simple container class with basic IO capabilities. It is capable of storing itself in a file, or loading from a file using cPickle (optionally via zlib from compressed files). Any serializable object can be bound to a hamster to be stored. To undig burried hamster use Hamster(filename). Here is an example: >>> import numpy as np >>> import tempfile >>> h = Hamster(bla='blai') >>> h.boo = np.arange(5) >>> tmp = tempfile.NamedTemporaryFile() >>> h.dump(tmp.name) ... >>> h = Hamster(tmp.name) Since Hamster introduces methods `dump`, `asdict` and property 'registered', those names cannot be used to assign an attribute, nor provided in among constructor arguments. """ __ro_attr = set(object.__dict__.keys() + ['dump', 'registered', 'asdict']) """Attributes which come with being an object""" def __new__(cls, *args, **kwargs): if len(args) > 0: if len(kwargs) > 0: raise ValueError, \ "Do not mix positional and keyword arguments. " \ "Use a single positional argument -- filename, " \ "or any number of keyword arguments, without having " \ "filename specified" if len(args) == 1 and isinstance(args[0], basestring): filename = args[0] args = args[1:] if __debug__: debug('IOH', 'Undigging hamster from %s' % filename) # compressed or not -- that is the question if filename.endswith('.gz'): f = gzip.open(filename) else: f = open(filename) result = cPickle.load(f) if not isinstance(result, Hamster): warning("Loaded other than Hamster class from %s" % filename) return result else: raise ValueError, "Hamster accepts only a single positional " \ "argument and it must be a filename. Got %d " \ "arguments" % (len(args),) else: return object.__new__(cls) def __init__(self, *args, **kwargs): """Initialize Hamster. Providing a single parameter string would treat it as a filename from which to undig the data. Otherwise all keyword parameters are assigned into the attributes of the object. """ if len(args) > 0: if len(args) == 1 and isinstance(args[0], basestring): # it was a filename args = args[1:] else: raise RuntimeError, "Should not get here" # assign provided attributes for k,v in kwargs.iteritems(): setattr(self, k, v) object.__init__(self) def dump(self, filename, compresslevel='auto'): """Bury the hamster into the file Parameters ---------- filename : str Name of the target file. When writing to a compressed file the filename gets a '.gz' extension if not already specified. This is necessary as the constructor uses the extension to decide whether it loads from a compressed or uncompressed file. compresslevel : 'auto' or int Compression level setting passed to gzip. When set to 'auto', if filename ends with '.gz' `compresslevel` is set to 5, 0 otherwise. However, when `compresslevel` is set to 0 gzip is bypassed completely and everything is written to an uncompressed file. """ if compresslevel == 'auto': compresslevel = (0, 5)[int(filename.endswith('.gz'))] if compresslevel > 0 and not filename.endswith('.gz'): filename += '.gz' if __debug__: debug('IOH', 'Burying hamster into %s' % filename) if compresslevel == 0: f = open(filename, 'w') else: f = gzip.open(filename, 'w', compresslevel) cPickle.dump(self, f) f.close() def __repr__(self): reg_attr = ["%s=%s" % (k, repr(getattr(self, k))) for k in self.registered] return "%s(%s)" % (self.__class__.__name__, ", ".join(reg_attr)) # ??? actually seems to be ugly #def __str__(self): # registered = self.registered # return "%s with %d elements: %s" \ # % (self.__class__.__name__, # len(registered), # ", ".join(self.registered)) @property def registered(self): """List registered attributes. """ reg_attr = [k for k in self.__dict__.iterkeys() if not k in self.__ro_attr] reg_attr.sort() return reg_attr def __setattr__(self, k, v): """Just to prevent resetting read-only attributes, such as methods """ if k in self.__ro_attr: raise ValueError, "'%s' object attribute '%s' is read-only" \ % (self.__class__.__name__, k) object.__setattr__(self, k, v) def asdict(self): """Return registered data as dictionary """ return dict([(k, getattr(self, k)) for k in self.registered]) pymvpa2-2.2.0/mvpa2/misc/io/meg.py000066400000000000000000000110041202542755000166200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """IO helper for MEG datasets.""" __docformat__ = 'restructuredtext' import sys import numpy as np from mvpa2.base import externals class TuebingenMEG(object): """Reader for MEG data from line-based textfile format. This class reads segmented MEG data from a textfile, which is created by converting the proprietary binary output files of a MEG device in Tuebingen (Germany) with an unkown tool. The file format is line-based, i.e. all timepoints for all samples/trials are written in a single line. Each line is prefixed with an identifier (using a colon as the delimiter between identifier and data). Two lines have a special purpose. The first 'Sample Number' is a list of timepoint ids, similar to `range(ntimepoints)` for each sample/trial (all concatenated into one line. The second 'Time' contains the timing information for each timepoint (relative to stimulus onset), again for all trials concatenated into a single line. All other lines contain various information (channels) recorded during the experiment. The meaning of some channels is unknown. Known ones are: M*: MEG channels EEG*: EEG channels ADC*: Analog to digital converter output Dataset properties are available from various class attributes. The `data` member provides all data from all channels (except for 'Sample Number' and 'Time') in a NumPy array (nsamples x nchannels x ntimepoints). The reader supports uncompressed as well as gzipped input files (or other file-like objects). """ def __init__(self, source): """Reader MEG data from texfiles or file-like objects. Parameters ---------- source : str or file-like Strings are assumed to be filenames (with `.gz` suffix compressed), while all other object types are treated as file-like objects. """ self.ntimepoints = None self.timepoints = None self.nsamples = None self.channelids = [] self.data = [] self.samplingrate = None # open textfiles if isinstance(source, str): if source.endswith('.gz'): externals.exists('gzip', raise_=True) import gzip source = gzip.open(source, 'r') if sys.version >= '3': # module still can not open text files # in py3: Issue #13989 and #10791 source = source.read().decode('ascii').splitlines() else: source = open(source, 'r') # read file for line in source: # split ID colon = line.find(':') # ignore lines without id if colon == -1: continue id = line[:colon] data = line[colon+1:].strip() if id == 'Sample Number': timepoints = np.fromstring(data, dtype=int, sep='\t') # one more as it starts with zero self.ntimepoints = int(timepoints.max()) + 1 self.nsamples = int(len(timepoints) / self.ntimepoints) elif id == 'Time': self.timepoints = np.fromstring(data, dtype=float, count=self.ntimepoints, sep='\t') self.samplingrate = self.ntimepoints \ / (self.timepoints[-1] - self.timepoints[0]) else: # load data self.data.append( np.fromstring(data, dtype=float, sep='\t').reshape( self.nsamples, self.ntimepoints)) # store id self.channelids.append(id) # reshape data from (channels x samples x timepoints) to # (samples x chanels x timepoints) self.data = np.swapaxes(np.array(self.data), 0, 1) def __str__(self): """Give a short summary. """ return '' \ % (self.nsamples, self.ntimepoints, len(self.channelids)) pymvpa2-2.2.0/mvpa2/misc/neighborhood.py000066400000000000000000000652511202542755000201250ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """ Neighborhood objects """ import numpy as np from numpy import array import sys import itertools from mvpa2.base import warning from mvpa2.base.types import is_sequence_type from mvpa2.base.dochelpers import borrowkwargs, borrowdoc, _repr_attrs, _repr from mvpa2.clfs.distance import cartesian_distance from mvpa2.misc.support import idhash as idhash_ if __debug__: from mvpa2.base import debug class Sphere(object): """N-Dimensional hypersphere. Use this if you want to obtain all the neighbors within a given radius from a point in a space with arbitrary number of dimensions assuming that the space is discrete. No validation of producing coordinates within any extent is done. Examples -------- Create a Sphere of diameter 1 and obtain all coordinates within range for the coordinate (1,1,1). >>> s = Sphere(1) >>> s((2, 1)) [(1, 1), (2, 0), (2, 1), (2, 2), (3, 1)] >>> s((1, )) [(0,), (1,), (2,)] If elements in discrete space have different sizes across dimensions, it might be preferable to specify element_sizes parameter. >>> s = Sphere(2, element_sizes=(1.5, 2.5)) >>> s((2, 1)) [(1, 1), (2, 1), (3, 1)] >>> s = Sphere(1, element_sizes=(1.5, 0.4)) >>> s((2, 1)) [(2, -1), (2, 0), (2, 1), (2, 2), (2, 3)] """ def __init__(self, radius, element_sizes=None, distance_func=None): """ Initialize the Sphere Parameters ---------- radius : float Radius of the 'sphere'. If no `element_sizes` provided -- radius would be effectively in number of voxels (if operating on MRI data). element_sizes : None or iterable of floats Sizes of elements in each dimension. If None, it is equivalent to 1s in all dimensions. distance_func : None or lambda Distance function to use (choose one from `mvpa2.clfs.distance`). If None, cartesian_distance to be used. """ self._radius = radius # TODO: make ability to lookup in a dataset self._element_sizes = element_sizes if distance_func is None: distance_func = cartesian_distance self._distance_func = distance_func self._increments = None """Stored template of increments""" self._increments_ndim = None """Dimensionality of increments""" def __repr__(self, prefixes=[]): prefixes_ = ['radius=%r' % (self._radius,)] + prefixes if self._element_sizes: prefixes_.append('element_sizes=%r' % (self._element_sizes,)) if self._distance_func != cartesian_distance: prefixes_.append('distance_func=%r' % self._distance_func) return "%s(%s)" % (self.__class__.__name__, ', '.join(prefixes_)) # Properties to assure R/O behavior for now @property def radius(self): return self._radius @property def element_sizes(self): return self._element_sizes @property def distance_func(self): return self._distance_func def _get_increments(self, ndim): """Creates a list of increments for a given dimensionality """ # Set element_sizes element_sizes = self._element_sizes if element_sizes is None: element_sizes = np.ones(ndim) else: if (ndim != len(element_sizes)): raise ValueError, \ "Dimensionality mismatch: element_sizes %s provided " \ "to constructor had %i dimensions, whenever queried " \ "coordinate had %i" \ % (element_sizes, len(element_sizes), ndim) center = np.zeros(ndim) element_sizes = np.asanyarray(element_sizes) # What range for each dimension erange = np.ceil(self._radius / element_sizes).astype(int) tentative_increments = np.array(list(np.ndindex(tuple(erange*2 + 1)))) \ - erange # Filter out the ones beyond the "sphere" return array([x for x in tentative_increments if self._distance_func(x * element_sizes, center) <= self._radius]) def train(self, dataset): # XXX YOH: yeap -- BUT if you care about my note above on extracting # somehow sizes -- some dataset.a might come handy may be? # so actual template get constructed in train and _create_template # could go away and just be returned in some R/O property #self.dataset = dataset # TODO: extract element_sizes pass # XXX YOH: should it have this at all? may be sphere should just generate the # "neighborhood template" -- all those offsets where to jump to get # tentative neighbor... Otherwise there are double checks... some here # some in the query engine... also imho Sphere should not even care about any extent def __call__(self, coordinate): """Get all coordinates within diameter Parameters ---------- coordinate : sequence type of length 3 with integers Returns ------- list of tuples of size 3 """ # type checking coordinate = np.asanyarray(coordinate) # XXX This might go into _train ... scalar = coordinate.ndim == 0 if scalar: # we are dealing with scalars -- lets add a dimension # artificially coordinate = coordinate[None] # XXX This might go into _train ... ndim = len(coordinate) if self._increments is None or self._increments_ndim != ndim: if __debug__: debug('NBH', "Recomputing neighborhood increments for %dD Sphere" % ndim) self._increments = self._get_increments(ndim) self._increments_ndim = ndim if __debug__: if coordinate.dtype.char not in np.typecodes['AllInteger']: raise ValueError("Sphere must be called on a sequence of " "integers of length %i, you gave %s " % (ndim, coordinate)) #if dataset is None: # raise ValueError("Sphere object has not been trained yet, use " # "train(dataset) first. ") if len(self._increments): # function call coord_array = (coordinate + self._increments) else: # if no increments -- no neighbors -- empty list return [] # XXX may be optionally provide extent checking? ## # now filter out illegal coordinates if they really are outside the ## # bounds ## if (coordinate - self.radius < 0).any() \ ## or (coordinate + self.radius >= self.extent).any(): ## coord_array = array([c for c in coord_array \ ## if (c >= 0).all() ## and (c < self.extent).all()]) ## coord_array = coord_array.transpose() if scalar: # Take just 0th dimension since 1st was artificially introduced coord_array = coord_array[:, 0] return coord_array.tolist() else: # Note: converting first full array to list and then # "tuppling" it seems to be faster than tuppling each # sub-array return [tuple(x) for x in coord_array.tolist()] class HollowSphere(Sphere): """N-Dimensional hypersphere with a hollow internal sphere See parent class `Sphere` for more information. Examples -------- Create a Sphere of diameter 1 and obtain all coordinates within range for the coordinate (1,1,1). >>> s = HollowSphere(1, 0) >>> s((2, 1)) [(1, 1), (2, 0), (2, 2), (3, 1)] >>> s((1, )) [(0,), (2,)] """ def __init__(self, radius, inner_radius, **kwargs): """ Initialize the Sphere Parameters ---------- radius : float Radius of the 'sphere'. If no `element_sizes` provided -- radius would be effectively in number of voxels (if operating on MRI data). inner_radius : float Inner radius of the 'sphere', describing where hollow part starts. It is inclusive, so `inner_radius` of 0, would already remove the center element. **kwargs See `Sphere` for additional keyword arguments """ if inner_radius > radius: raise ValueError, "inner_radius (got %g) should be smaller " \ "than the radius (got %g)" % (inner_radius, radius) Sphere.__init__(self, radius, **kwargs) self._inner_radius = inner_radius def __repr__(self, prefixes=[]): return super(HollowSphere, self).__repr__( ['inner_radius=%r' % (self._inner_radius,)]) # Properties to assure R/O behavior for now @property def inner_radius(self): return self._inner_radius def _get_increments(self, ndim): """Creates a list of increments for a given dimensionality RF: lame yoh just cut-pasted and tuned up because everything depends on ndim... """ # Set element_sizes element_sizes = self._element_sizes if element_sizes is None: element_sizes = np.ones(ndim) else: if (ndim != len(element_sizes)): raise ValueError, \ "Dimensionality mismatch: element_sizes %s provided " \ "to constructor had %i dimensions, whenever queried " \ "coordinate had %i" \ % (element_sizes, len(element_sizes), ndim) center = np.zeros(ndim) element_sizes = np.asanyarray(element_sizes) # What range for each dimension erange = np.ceil(self._radius / element_sizes).astype(int) tentative_increments = np.array(list(np.ndindex(tuple(erange*2 + 1)))) \ - erange # Filter out the ones beyond the "sphere" res = array([x for x in tentative_increments if self._inner_radius < self._distance_func(x * element_sizes, center) <= self._radius]) if not len(res): warning("%s defines no neighbors" % self) return res class QueryEngineInterface(object): """Very basic class for `QueryEngine`\s defining the interface It should not be used directly, but is used to check either we are working with QueryEngine instances """ def __repr__(self, prefixes=[]): return _repr(self, *prefixes) def train(self, dataset): raise NotImplementedError def query_byid(self, fid): """Return feature ids of neighbors for a given feature id """ raise NotImplementedError def query(self, **kwargs): """Return feature ids of neighbors given a specific query """ raise NotImplementedError # # aliases # def __call__(self, **kwargs): return self.query(**kwargs) def __getitem__(self, fid): return self.query_byid(fid) class QueryEngine(QueryEngineInterface): """Basic class defining interface for querying neighborhood in a dataset Derived classes provide specific implementations possibly with trade-offs between generality and performance. TODO: extend """ def __init__(self, **kwargs): """ Parameters ---------- **kwargs a dictionary of query objects. Something like dict(voxel_indices=Sphere(3)) """ super(QueryEngine, self).__init__() self._queryobjs = kwargs self._queryattrs = {} def __repr__(self, prefixes=[]): return super(QueryEngine, self).__repr__( prefixes=prefixes + ['%s=%r' % v for v in self._queryobjs.iteritems()]) def train(self, dataset): # reset first self._queryattrs.clear() # store all relevant attributes for space in self._queryobjs: self._queryattrs[space] = dataset.fa[space].value # execute subclass training self._train(dataset) def query_byid(self, fid): """Return feature ids of neighbors for a given feature id """ queryattrs = self._queryattrs kwargs = dict([(space, queryattrs[space][fid]) for space in queryattrs]) return self.query(**kwargs) class IndexQueryEngine(QueryEngine): """Provides efficient query engine for discrete spaces. Uses dictionary lookups for elements indices and presence in general. Each space obtains a lookup dictionary which performs translation from given index/coordinate into the index within an index table (with a dimension per each space to search within). TODO: - extend documentation - repr """ def __init__(self, sorted=True, **kwargs): """ Parameters ---------- sorted : bool Results of query get sorted """ QueryEngine.__init__(self, **kwargs) self._spaceorder = None """Order of the spaces""" self._lookups = {} """Dictionary of lookup dictionaries per each space""" self._sliceall = {} """Precrafted indexes to cover ':' situation within ix_""" self._searcharray = None """Actual searcharray""" self.sorted = sorted """Either to sort the query results""" def __repr__(self, prefixes=[]): return super(IndexQueryEngine, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['sorted'], default=True)) def _train(self, dataset): # local binding qattrs = self._queryattrs # in addition to the base class functionality we need to store the # order of the query-spaces self._spaceorder = qattrs.keys() # type check and determine mask dimensions dims = [] # dimensionality of each space lookups = self._lookups = {} sliceall = self._sliceall = {} selector = [] for space in self._spaceorder: # local binding for the attribute qattr = qattrs[space] # If it is >1D ndarray we need to transform to list of tuples, # since ndarray is not hashable # XXX would probably work for ANY discrete attribute if not qattr.dtype.char in np.typecodes['AllInteger']: pass #raise ValueError("IndexQueryEngine can only operate on " # "feature attributes with integer indices " # "(got: %s)." % str(qattr.dtype)) if isinstance(qattr, np.ndarray) and len(qattr.shape) > 1: qattr = [tuple(x) for x in qattr] # determine the dimensions of this space # and charge the nonzero selector uqattr = list(set(qattr)) dim = len(uqattr) dims.append(dim) # Lookup table for elements known to corresponding indices # in searcharray lookups[space] = lookup = \ dict([(u, i) for i, u in enumerate(uqattr)]) # Precraft "slicing" for all elements for dummy numpy way # to select things ;) sliceall[space] = np.arange(dim) # And fill out selector using current values from qattr selector.append([lookup[x] for x in qattr]) # now check whether we have sufficient information to put each feature # id into one unique search array element dims = np.array(dims) # we can deal with less features (e.g. masked dataset, but not more) # XXX (yoh): seems to be too weak of a check... pretty much you are trying # to check either 2 features do not collide in the target # "mask", right? if np.prod(dims) < dataset.nfeatures: raise ValueError("IndexQueryEngine has insufficient information " "about the dataset spaces. It is required to " "specify an ROI generator for each feature space " "in the dataset (got: %s, #describable: %i, " "#actual features: %i)." % (str(self._spaceorder), np.prod(dims), dataset.nfeatures)) # now we can create the search array self._searcharray = np.zeros(dims, dtype='int') # and fill it with feature ids, but start from ONE to be different from # the zeros self._searcharray[tuple(selector)] = np.arange(1, dataset.nfeatures + 1) # Lets do additional check -- now we should have same # of # non-zero elements as features if len(self._searcharray.nonzero()[0]) != dataset.nfeatures: # TODO: Figure out how is the bad cow? sad there is no non-unique # function in numpy raise ValueError("Multiple features carry the same set of " "attributes %s. %s engine cannot handle such " "cases -- use another appropriate query engine" % (self._spaceorder, self)) def query(self, **kwargs): # construct the search array slicer # need to obey axis order slicer = [] for space in self._spaceorder: lookup = self._lookups[space] # only generate ROI, if we have a generator # otherwise consider all of the unspecified space if space in kwargs: space_args = kwargs.pop(space) # so we could check later on # if no ROI generator is available, take provided indexes # without any additional neighbors etc if self._queryobjs[space] is None: roi = np.atleast_1d(space_args) else: roi = self._queryobjs[space](space_args) # lookup and filter the results roi_ind = [lookup[i] for i in roi if (i in lookup)] # if no candidate is left, the whole thing does not match # regardless of the other spaces if not len(roi_ind): return [] slicer.append(roi_ind) else: # Provide ":" if no specialization was provided slicer.append(self._sliceall[space]) # check if query had only legal spaces specified if len(kwargs): raise ValueError, "Do not know how to treat space(s) %s given " \ "in parameters of the query" % (kwargs.keys()) # only ids are of interest -> flatten # and we need to back-transfer them into dataset ids by subtracting 1 res = self._searcharray[np.ix_(*slicer)].flatten() - 1 res = res[res>=0] # return only the known ones if self.sorted: return sorted(res) else: return res class CachedQueryEngine(QueryEngineInterface): """Provides caching facility for query engines. Notes ----- This QueryEngine simply remembers the results of the previous queries. Not much checking is done on either datasets it gets in :meth:`train` is the same as the on in previous sweep of queries, i.e. either none of the relevant for underlying QueryEngine feature attributes was modified. So, CAUTION should be paid to avoid calling the same instance of `CachedQueryEngine` on different datasets (which might have different masking etc) . :func:`query_byid` should be working reliably and without surprises. :func:`query` relies on hashid of the queries, so there might be a collision! Thus consider it EXPERIMENTAL for now. """ def __init__(self, queryengine): """ Parameters ---------- queryengine : QueryEngine Results of which engine to cache """ super(CachedQueryEngine, self).__init__() self._queryengine = queryengine self._trained_ds_fa_hash = None """Will give information about either dataset's FA were changed """ self._lookup_ids = None self._lookup = None def __repr__(self, prefixes=[]): return super(CachedQueryEngine, self).__repr__( prefixes=prefixes + _repr_attrs(self, ['queryengine'])) def train(self, dataset): """'Train' `CachedQueryEngine`. Raises ------ ValueError If `dataset`'s .fa were changed -- it would raise an exception telling to `untrain` explicitly, since the idea is to reuse CachedQueryEngine with the same engine and same dataset (up to variation of .sa, such as labels permutation """ ds_fa_hash = idhash_(dataset.fa) + ':%d' % dataset.fa._uniform_length if self._trained_ds_fa_hash is None: # First time is called self._trained_ds_fa_hash = ds_fa_hash self._queryengine.train(dataset) # train the queryengine self._lookup_ids = [None] * dataset.nfeatures # lookup for query_byid self._lookup = {} # generic lookup elif self._trained_ds_fa_hash != ds_fa_hash: raise ValueError, \ "Feature attributes of %s (idhash=%r) were changed from " \ "what this %s was trained on (idhash=%r). Untrain it " \ "explicitly if you like to reuse it on some other data." \ % (dataset, ds_fa_hash, self, self._trained_ds_fa_hash) else: pass def untrain(self): """Forgetting that CachedQueryEngine was already trained """ self._trained_ds_fa_hash = None @borrowdoc(QueryEngineInterface) def query_byid(self, fid): v = self._lookup_ids[fid] if v is None: self._lookup_ids[fid] = v = self._queryengine.query_byid(fid) return v @borrowdoc(QueryEngineInterface) def query(self, **kwargs): def to_hashable(x): """Convert x to something which dict wouldn't mind""" try: # silly attempt d = {x: None} return x except TypeError: pass if isinstance(x, dict): # keys are already hashable # and sort for deterministic order return tuple((k, to_hashable(v)) for (k, v) in sorted(x.iteritems())) elif is_sequence_type(x): return tuple(i for i in x) elif np.isscalar(x): return x return x # and then wait for the report for it to be added # idhash_ is somewhat inappropriate since also relies on id # (which we should allow to differ) but ATM failing to hash # ndarrays etc # k = idhash_(kwargs.items()) # So let's use verbose version of the beastie (could have been # also as simple as __repr__ but afraid that order could be # changing etc). This simple function should be sufficient # for our typical use, otherwise we might like to use hashing # facilities provided by joblib but for paranoid we would # still need to store actual values to resolve collisions # which would boil down to the same scenario k = to_hashable(kwargs) v = self._lookup.get(k, None) if v is None: self._lookup[k] = v = self._queryengine.query(**kwargs) return v queryengine = property(fget=lambda self: self._queryengine) def scatter_neighborhoods(neighbor_gen, coords, deterministic=False): """Scatter neighborhoods over a coordinate list. Neighborhood seeds (or centers) are placed on coordinates drawn from a provided list so that no seed is part of any other neighborhood. Depending on the actual shape and size of the neighborhoods, their elements can be overlapping, only the seeds (or centers) are guaranteed to be non-overlapping with any other neighborhood. This can be used to perform sparse sampling of a given space. Parameters ========== neighbor_gen : neighborhood generator Callable that return a list of neighborhood element coordinates, when called with a seed coordinate (cf. Sphere) coords : list List of candidate corrdinates that can serve as neighborhood seeds or elements. deterministic : bool If true, performs seed placement using an OrderedDict (available in Python 2.7 or later) to guarantee deterministic placement of neighborhood seeds in consecutive runs with identical input arguments. Returns ======= coordinates, indices Two lists are returned. The first list contains the choosen seed coordinates (a subset of the input coordinates), the second list contains the indices of the respective seeds coordinates in the input coordinate list. If particular coordinates are present multiple times the index list will contain all indices corresponding to these coordinates. """ hasher = dict if deterministic: from collections import OrderedDict hasher = OrderedDict # put coordinates into a dict for fast lookup try: # quick test to check whether the given coords are hashable. If not, # this test avoids a potentially long list zipping _ = {coords[0]: None} lookup = hasher() _ = [lookup.setdefault(c, list()).append(i) for i, c in enumerate(coords)] except TypeError: # maybe coords not hashable? lookup = hasher() _ = [lookup.setdefault(tuple(c), list()).append(i) for i, c in enumerate(coords)] seeds = [] while len(lookup): # get any remaining coordinate # with OrderedDict popitem will return the last inserted item by default seed, idx = lookup.popitem() # remove all coordinates in the neighborhood _ = [lookup.pop(c, None) for c in neighbor_gen(seed)] # store seed seeds.append((seed, idx)) # unzip coords and idx again coords, idx = zip(*seeds) # we need a flat idx list # yoh: sum trick replaced list(itertools.chain.from_iterable(idx)) # which is not python2.5-compatible idx = sum(idx, []) return coords, idx pymvpa2-2.2.0/mvpa2/misc/plot/000077500000000000000000000000001202542755000160515ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/misc/plot/__init__.py000066400000000000000000000012521202542755000201620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for miscellaneous PyMVPA plotting functions (mvpa2.misc.plot)""" __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.misc.plot start') from mvpa2.misc.plot.base import * if __debug__: debug('INIT', 'mvpa2.misc.plot end') pymvpa2-2.2.0/mvpa2/misc/plot/base.py000066400000000000000000000561371202542755000173510ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Misc. plotting helpers.""" __docformat__ = 'restructuredtext' from mvpa2.base import externals externals._set_matplotlib_backend() import pylab as pl import numpy as np from mvpa2.base.node import ChainNode from mvpa2.misc.plot.tools import Pion, Pioff from mvpa2.misc.attrmap import AttributeMap from mvpa2.generators.splitters import Splitter from mvpa2.generators.partition import NFoldPartitioner from mvpa2.clfs.distance import squared_euclidean_distance from mvpa2.datasets.miscfx import get_samples_by_attr ##REF: Name was automagically refactored def plot_err_line(data, x=None, errtype='ste', curves=None, linestyle='--', fmt='o', perc_sigchg=False, baseline=None, **kwargs): """Make a line plot with errorbars on the data points. Parameters ---------- data : sequence of sequences First axis separates samples and second axis will appear as x-axis in the plot. x : sequence Value to be used as 'x-values' corresponding to the elements of the 2nd axis id `data`. If `None`, a sequence of ascending integers will be generated. errtype : 'ste' or 'std' Type of error value to be computed per datapoint: 'ste' -- standard error of the mean, 'std' -- standard deviation. curves : None or list of tuple(x, y) Each tuple represents an additional curve, with x and y coordinates of each point on the curve. linestyle : str or None matplotlib linestyle argument. Applied to either the additional curve or a the line connecting the datapoints. Set to 'None' to disable the line completely. fmt : str matplotlib plot style argument to be applied to the data points and errorbars. perc_sigchg : bool If `True` the plot will show percent signal changes relative to a baseline. baseline : float or None Baseline used for converting values into percent signal changes. If `None` and `perc_sigchg` is `True`, the absolute of the mean of the first feature (i.e. [:,0]) will be used as a baseline. **kwargs Additional arguments are passed on to errorbar(). Examples -------- Make a dataset with 20 samples from a full sinus wave period, computed 100 times with individual noise pattern. >>> x = np.linspace(0, np.pi * 2, 20) >>> data = np.vstack([np.sin(x)] * 30) >>> data += np.random.normal(size=data.shape) Now, plot mean data points with error bars, plus a high-res version of the original sinus wave. >>> x_hd = np.linspace(0, np.pi * 2, 200) >>> elines = plot_err_line(data, x, curves=[(x_hd, np.sin(x_hd))]) >>> # pl.show() Returns ------- list Of lines which were plotted. """ data = np.asanyarray(data) if len(data.shape) < 2: data = np.atleast_2d(data) return plot_err_line_missing(data.T, x=x, errtype=errtype, curves=curves, linestyle=linestyle, fmt=fmt, perc_sigchg=perc_sigchg, baseline=baseline, **kwargs) def plot_err_line_missing(data, x=None, errtype='ste', curves=None, linestyle='--', fmt='o', perc_sigchg=False, baseline=None, **kwargs): """Make a line plot with errorbars on the data points. This is essentially the same function as plot_err_line(), but it expects the data transposed and tolerates an unequal number of samples, per data point. Parameters ---------- data : sequence of sequences First axis will appear as x-axis in the plot. Along the second axis are the sample. Each data point may have a different number of samples. x : sequence Value to be used as 'x-values' corresponding to the elements of the 2nd axis id `data`. If `None`, a sequence of ascending integers will be generated. errtype : 'ste' or 'std' Type of error value to be computed per datapoint: 'ste' -- standard error of the mean, 'std' -- standard deviation. curves : None or list of tuple(x, y) Each tuple represents an additional curve, with x and y coordinates of each point on the curve. linestyle : str or None matplotlib linestyle argument. Applied to either the additional curve or a the line connecting the datapoints. Set to 'None' to disable the line completely. fmt : str matplotlib plot style argument to be applied to the data points and errorbars. perc_sigchg : bool If `True` the plot will show percent signal changes relative to a baseline. baseline : float or None Baseline used for converting values into percent signal changes. If `None` and `perc_sigchg` is `True`, the absolute of the mean of the first feature (i.e. [:,0]) will be used as a baseline. **kwargs Additional arguments are passed on to errorbar(). Examples -------- Make a dataset with 20 samples from a full sinus wave period, computed 100 times with individual noise pattern. >>> x = np.linspace(0, np.pi * 2, 20) >>> data = np.vstack([np.sin(x)] * 30) >>> data += np.random.normal(size=data.shape) Now, plot mean data points with error bars, plus a high-res version of the original sinus wave. >>> x_hd = np.linspace(0, np.pi * 2, 200) >>> elines = plot_err_line(data, x, curves=[(x_hd, np.sin(x_hd))]) >>> # pl.show() Returns ------- list Of lines which were plotted. """ # compute mean signal course md = np.array([np.mean(i) for i in data]) if baseline is None: baseline = np.abs(md[0]) if perc_sigchg: md /= baseline md -= 1.0 md *= 100.0 data = [np.array(i) / baseline * 100 for i in data] # compute matching datapoint locations on x-axis if x is None: x = np.arange(len(md)) else: if not len(md) == len(x): raise ValueError, "The length of `x` (%i) has to match the 2nd " \ "axis of the data array (%i)" % (len(x), len(md)) # collect pylab things that are plotted for later modification lines = [] # plot highres line if present if curves is not None: for c in curves: xc, yc = c # scales line array to same range as datapoints if not linestyle is None: lines.append(pl.plot(xc, yc, linestyle)) else: lines.append(pl.plot(xc, yc)) # no line between data points linestyle = 'None' # compute error per datapoint if errtype == 'ste': err = [np.std(i) / np.sqrt(len(i)) for i in data] elif errtype == 'std': err = [np.std(i) for i in data] else: raise ValueError, "Unknown error type '%s'" % errtype # plot datapoints with error bars lines.append(pl.errorbar(x, md, err, fmt=fmt, linestyle=linestyle, **kwargs)) return lines ##REF: Name was automagically refactored def plot_feature_hist(dataset, xlim=None, noticks=True, targets_attr='targets', chunks_attr=None, **kwargs): """Plot histograms of feature values for each labels. Parameters ---------- dataset : Dataset xlim : None or 2-tuple Common x-axis limits for all histograms. noticks : bool If True, no axis ticks will be plotted. This is useful to save space in large plots. targets_attr : string, optional Name of samples attribute to be used as targets chunks_attr : None or string If a string, a histogram will be plotted per each target and each chunk (as defined in sa named `chunks_attr`), resulting is a histogram grid (targets x chunks). **kwargs Any additional arguments are passed to matplotlib's hist(). """ lsplit = ChainNode([NFoldPartitioner(1, attr=targets_attr), Splitter('partitions', attr_values=[2])]) csplit = ChainNode([NFoldPartitioner(1, attr=chunks_attr), Splitter('partitions', attr_values=[2])]) nrows = len(dataset.sa[targets_attr].unique) ncols = len(dataset.sa[chunks_attr].unique) def doplot(data): """Just a little helper which plots the histogram and removes ticks etc""" pl.hist(data, **kwargs) if xlim is not None: pl.xlim(xlim) if noticks: pl.yticks([]) pl.xticks([]) fig = 1 # for all labels for row, ds in enumerate(lsplit.generate(dataset)): if chunks_attr: for col, d in enumerate(csplit.generate(ds)): pl.subplot(nrows, ncols, fig) doplot(d.samples.ravel()) if row == 0: pl.title('C:' + str(d.sa[chunks_attr].unique[0])) if col == 0: pl.ylabel('L:' + str(d.sa[targets_attr].unique[0])) fig += 1 else: pl.subplot(1, nrows, fig) doplot(ds.samples) pl.title('L:' + str(ds.sa[targets_attr].unique[0])) fig += 1 ##REF: Name was automagically refactored def plot_samples_distance(dataset, sortbyattr=None): """Plot the euclidean distances between all samples of a dataset. Parameters ---------- dataset : Dataset Providing the samples. sortbyattr : None or str If None, the samples distances will be in the same order as their appearance in the dataset. Alternatively, the name of a samples attribute can be given, which wil then be used to sort/group the samples, e.g. to investigate the similarity samples by label or by chunks. """ if sortbyattr is not None: slicer = [] for attr in dataset.sa[sortbyattr].unique: slicer += \ get_samples_by_attr(dataset, sortbyattr, attr).tolist() samples = dataset.samples[slicer] else: samples = dataset.samples ed = np.sqrt(squared_euclidean_distance(samples)) pl.imshow(ed) pl.colorbar() def plot_decision_boundary_2d(dataset, clf=None, targets=None, regions=None, maps=None, maps_res=50, vals=[-1, 0, 1], data_callback=None): """Plot a scatter of a classifier's decision boundary and data points Assumes data is 2d (no way to visualize otherwise!!) Parameters ---------- dataset : `Dataset` Data points to visualize (might be the data `clf` was train on, or any novel data). clf : `Classifier`, optional Trained classifier targets : string, optional What samples attributes to use for targets. If None and clf is provided, then `clf.params.targets_attr` is used. regions : string, optional Plot regions (polygons) around groups of samples with the same attribute (and target attribute) values. E.g. chunks. maps : string in {'targets', 'estimates'}, optional Either plot underlying colored maps, such as clf predictions within the spanned regions, or estimates from the classifier (might not work for some). maps_res : int, optional Number of points in each direction to evaluate. Points are between axis limits, which are set automatically by matplotlib. Higher number will yield smoother decision lines but come at the cost of O^2 classifying time/memory. vals : array of floats, optional Where to draw the contour lines if maps='estimates' data_callback : callable, optional Callable object to preprocess the new data points. Classified points of the form samples = data_callback(xysamples). I.e. this can be a function to normalize them, or cache them before they are classified. """ if False: ## from mvpa2.misc.data_generators import * ## from mvpa2.clfs.svm import * ## from mvpa2.clfs.knn import * ## ds = dumb_feature_binary_dataset() dataset = normal_feature_dataset(nfeatures=2, nchunks=5, snr=10, nlabels=4, means=[ [0,1], [1,0], [1,1], [0,0] ]) dataset.samples += dataset.sa.chunks[:, None]*0.1 # slight shifts for chunks ;) #dataset = normal_feature_dataset(nfeatures=2, nlabels=3, means=[ [0,1], [1,0], [1,1] ]) #dataset = normal_feature_dataset(nfeatures=2, nlabels=2, means=[ [0,1], [1,0] ]) #clf = LinearCSVMC(C=-1) clf = kNN(4)#LinearCSVMC(C=-1) clf.train(dataset) #clf = None #plot_decision_boundary_2d(ds, clf) targets = 'targets' regions = 'chunks' #maps = 'estimates' maps = 'targets' #maps = None #'targets' res = 50 vals = [-1, 0, 1] data_callback=None pl.clf() if dataset.nfeatures != 2: raise ValueError('Can only plot a decision boundary in 2D') Pioff() a = pl.gca() # f.add_subplot(1,1,1) attrmap = None if clf: estimates_were_enabled = clf.ca.is_enabled('estimates') clf.ca.enable('estimates') if targets is None: targets = clf.get_space() # Lets reuse classifiers attrmap if it is good enough attrmap = clf._attrmap predictions = clf.predict(dataset) targets_sa_name = targets # bad Yarik -- will rebind targets to actual values targets_lit = dataset.sa[targets_sa_name].value utargets_lit = dataset.sa[targets_sa_name].unique if not (attrmap is not None and len(attrmap) and set(clf._attrmap.keys()).issuperset(utargets_lit)): # create our own attrmap = AttributeMap(mapnumeric=True) targets = attrmap.to_numeric(targets_lit) utargets = attrmap.to_numeric(utargets_lit) vmin = min(utargets) vmax = max(utargets) cmap = pl.cm.RdYlGn # argument # Scatter points if clf: all_hits = predictions == targets_lit else: all_hits = np.ones((len(targets),), dtype=bool) targets_colors = {} for l in utargets: targets_mask = targets==l s = dataset[targets_mask] targets_colors[l] = c \ = cmap((l-vmin)/float(vmax-vmin)) # We want to plot hits and misses with different symbols hits = all_hits[targets_mask] misses = np.logical_not(hits) scatter_kwargs = dict( c=[c], zorder=10+(l-vmin)) if sum(hits): a.scatter(s.samples[hits, 0], s.samples[hits, 1], marker='o', label='%s [%d]' % (attrmap.to_literal(l), sum(hits)), **scatter_kwargs) if sum(misses): a.scatter(s.samples[misses, 0], s.samples[misses, 1], marker='x', label='%s [%d] (miss)' % (attrmap.to_literal(l), sum(misses)), edgecolor=[c], **scatter_kwargs) (xmin, xmax) = a.get_xlim() (ymin, ymax) = a.get_ylim() extent = (xmin, xmax, ymin, ymax) # Create grid to evaluate, predict it (x,y) = np.mgrid[xmin:xmax:np.complex(0, maps_res), ymin:ymax:np.complex(0, maps_res)] news = np.vstack((x.ravel(), y.ravel())).T try: news = data_callback(news) except TypeError: # Not a callable object pass imshow_kwargs = dict(origin='lower', zorder=1, aspect='auto', interpolation='bilinear', alpha=0.9, cmap=cmap, vmin=vmin, vmax=vmax, extent=extent) if maps is not None: if clf is None: raise ValueError, \ "Please provide classifier for plotting maps of %s" % maps predictions_new = clf.predict(news) if maps == 'estimates': # Contour and show predictions trained_targets = attrmap.to_numeric(clf.ca.trained_targets) if len(trained_targets)==2: linestyles = [] for v in vals: if v == 0: linestyles.append('solid') else: linestyles.append('dashed') vmin, vmax = -3, 3 # Gives a nice tonal range ;) map_ = 'estimates' # should actually depend on estimates else: vals = (trained_targets[:-1] + trained_targets[1:])/2. linestyles = ['solid'] * len(vals) map_ = 'targets' try: clf.ca.estimates.reshape(x.shape) a.imshow(map_values.T, **imshow_kwargs) CS = a.contour(x, y, map_values, vals, zorder=6, linestyles=linestyles, extent=extent, colors='k') except ValueError, e: print "Sorry - plotting of estimates isn't full supported for %s. " \ "Got exception %s" % (clf, e) elif maps == 'targets': map_values = attrmap.to_numeric(predictions_new).reshape(x.shape) a.imshow(map_values.T, **imshow_kwargs) #CS = a.contour(x, y, map_values, vals, zorder=6, # linestyles=linestyles, extent=extent, colors='k') # Plot regions belonging to the same pair of attribute given # (e.g. chunks) and targets attribute if regions: chunks_sa = dataset.sa[regions] chunks_lit = chunks_sa.value uchunks_lit = chunks_sa.value chunks_attrmap = AttributeMap(mapnumeric=True) chunks = chunks_attrmap.to_numeric(chunks_lit) uchunks = chunks_attrmap.to_numeric(uchunks_lit) from matplotlib.delaunay.triangulate import Triangulation from matplotlib.patches import Polygon # Lets figure out convex halls for each chunk/label pair for target in utargets: t_mask = targets == target for chunk in uchunks: tc_mask = np.logical_and(t_mask, chunk == chunks) tc_samples = dataset.samples[tc_mask] tr = Triangulation(tc_samples[:, 0], tc_samples[:, 1]) poly = pl.fill(tc_samples[tr.hull, 0], tc_samples[tr.hull, 1], closed=True, facecolor=targets_colors[target], #fill=False, alpha=0.01, edgecolor='gray', linestyle='dotted', linewidth=0.5, ) pl.legend(scatterpoints=1) if clf and not estimates_were_enabled: clf.ca.disable('estimates') Pion() pl.axis('tight') #pl.show() ##REF: Name was automagically refactored def plot_bars(data, labels=None, title=None, ylim=None, ylabel=None, width=0.2, offset=0.2, color='0.6', distance=1.0, yerr='ste', xloc=None, **kwargs): """Make bar plots with automatically computed error bars. Candlestick plot (multiple interleaved barplots) can be done, by calling this function multiple time with appropriatly modified `offset` argument. Parameters ---------- data : array (nbars x nobservations) or other sequence type Source data for the barplot. Error measure is computed along the second axis. labels : list or None If not None, a label from this list is placed on each bar. title : str An optional title of the barplot. ylim : 2-tuple Y-axis range. ylabel : str An optional label for the y-axis. width : float Width of a bar. The value should be in a reasonable relation to `distance`. offset : float Constant offset of all bar along the x-axis. Can be used to create candlestick plots. color : matplotlib color spec Color of the bars. distance : float Distance of two adjacent bars. yerr : {'ste', 'std', None} Type of error for the errorbars. If `None` no errorbars are plotted. xloc : sequence Locations of the bars on the x axis. **kwargs Any additional arguments are passed to matplotlib's `bar()` function. """ # determine location of bars if xloc is None: xloc = (np.arange(len(data)) * distance) + offset if yerr == 'ste': yerr = [np.std(d) / np.sqrt(len(d)) for d in data] elif yerr == 'std': yerr = [np.std(d) for d in data] else: # if something that we do not know just pass on pass # plot bars plot = pl.bar(xloc, [np.mean(d) for d in data], yerr=yerr, width=width, color=color, ecolor='black', **kwargs) if ylim: pl.ylim(*(ylim)) if title: pl.title(title) if labels: pl.xticks(xloc + width / 2, labels) if ylabel: pl.ylabel(ylabel) # leave some space after last bar pl.xlim(0, xloc[-1] + width + offset) return plot ##REF: Name was automagically refactored def inverse_cmap(cmap_name): """Create a new colormap from the named colormap, where it got reversed """ import matplotlib._cm as _cm import matplotlib as mpl try: cmap_data = eval('_cm._%s_data' % cmap_name) except: raise ValueError, "Cannot obtain data for the colormap %s" % cmap_name new_data = dict( [(k, [(v[i][0], v[-(i+1)][1], v[-(i+1)][2]) for i in xrange(len(v))]) for k,v in cmap_data.iteritems()] ) return mpl.colors.LinearSegmentedColormap('%s_rev' % cmap_name, new_data, _cm.LUTSIZE) ##REF: Name was automagically refactored def plot_dataset_chunks(ds, clf_labels=None): """Quick plot to see chunk sctructure in dataset with 2 features if clf_labels is provided for the predicted labels, then incorrectly labeled samples will have 'x' in them """ if ds.nfeatures != 2: raise ValueError, "Can plot only in 2D, ie for datasets with 2 features" if pl.matplotlib.get_backend() == 'TkAgg': pl.ioff() if clf_labels is not None and len(clf_labels) != ds.nsamples: clf_labels = None colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w') labels = ds.uniquetargets labels_map = dict(zip(labels, colors[:len(labels)])) for chunk in ds.uniquechunks: chunk_text = str(chunk) ids = ds.where(chunks=chunk) ds_chunk = ds[ids] for i in xrange(ds_chunk.nsamples): s = ds_chunk.samples[i] l = ds_chunk.targets[i] format = '' if clf_labels != None: if clf_labels[i] != ds_chunk.targets[i]: pl.plot([s[0]], [s[1]], 'x' + labels_map[l]) pl.text(s[0], s[1], chunk_text, color=labels_map[l], horizontalalignment='center', verticalalignment='center', ) dss = ds.samples pl.axis((1.1 * np.min(dss[:, 0]), 1.1 * np.max(dss[:, 1]), 1.1 * np.max(dss[:, 0]), 1.1 * np.min(dss[:, 1]))) pl.draw() pl.ion() pymvpa2-2.2.0/mvpa2/misc/plot/erp.py000066400000000000000000000373311202542755000172200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Basic ERP (here ERP = Event Related Plot ;-)) plotting Can be used for plotting not only ERP but any event-locked data """ import pylab as pl import numpy as np import matplotlib as mpl from mvpa2.base import warning from mvpa2.mappers.boxcar import BoxcarMapper # # Few helper functions # import matplotlib.transforms as mlt def _offset(ax, x, y): """Provide offset in pixels Parameters ---------- x : int Offset in pixels for x y : int Offset in pixels for y Idea borrowed from http://www.scipy.org/Cookbook/Matplotlib/Transformations but then heavily extended to be compatible with many reincarnations of matplotlib """ d = dir(mlt) if 'offset_copy' in d: # tested with python-matplotlib 0.98.3-5 # ??? if pukes, might need to replace 2nd parameter from # ax to ax.get_figure() return mlt.offset_copy(ax.transData, ax, x=x, y=y, units='dots') elif 'BlendedAffine2D' in d: # some newer versions of matplotlib return ax.transData + \ mlt.Affine2D().translate(x,y) elif 'blend_xy_sep_transform' in d: trans = mlt.blend_xy_sep_transform(ax.transData, ax.transData) # Now we set the offset in pixels trans.set_offset((x, y), mlt.identity_transform()) return trans else: raise RuntimeError, \ "Lacking needed functions in matplotlib.transform " \ "for _offset. Please upgrade" def _make_centeredaxis(ax, loc, offset=5, ai=0, mult=1.0, format='%4g', label=None, **props): """Plot an axis which is centered at loc (e.g. 0) Parameters ---------- ax Axes from the figure loc Value to center at offset Relative offset (in pixels) for the labels ai : int Axis index: 0 for x, 1 for y mult Multiplier for the axis labels. ERPs for instance need to be inverted, thus labels too manually here since there is no easy way in matplotlib to invert an axis label : str or None If not -- put a label outside of the axis **props Given to underlying plotting functions Idea borrowed from http://www.mail-archive.com/matplotlib-users@lists.sourceforge.net \ /msg05669.html It sustained heavy refactoring/extension """ xmin, xmax = ax.get_xlim() ymin, ymax = ax.get_ylim() xlocs = [l for l in ax.xaxis.get_ticklocs() if l>=xmin and l<=xmax] ylocs = [l for l in ax.yaxis.get_ticklocs() if l>=ymin and l<=ymax] if ai == 0: hlocs = ylocs locs = xlocs vrange = [xmin, xmax] tdir = mpl.lines.TICKDOWN halignment = 'center' valignment = 'top' lhalignment = 'left' lvalignment = 'center' lx, ly = xmax, 0 ticklength = ax.xaxis.get_ticklines()[0]._markersize elif ai == 1: hlocs = xlocs locs = ylocs vrange = [ymin, ymax] tdir = mpl.lines.TICKLEFT halignment = 'right' valignment = 'center' lhalignment = 'center' lvalignment = 'bottom' lx, ly = 0, ymax ticklength = ax.yaxis.get_ticklines()[0]._markersize else: raise ValueError, "Illegal ai=%s" % ai args = [ (locs, [loc]*len(locs)), (vrange, [loc, loc]), [locs, (loc,)*len(locs)] ] offset_abs = offset + ticklength if ai == 1: # invert args = [ [x[1], x[0]] for x in args ] # shift the tick labels labels trans = _offset(ax, -offset_abs, 0) transl = _offset(ax, 0, offset) else: trans = _offset(ax, 0, -offset_abs) transl = _offset(ax, offset, 0) tickline, = ax.plot(linestyle='', marker=tdir, *args[0], **props) axline, = ax.plot(*args[1], **props) tickline.set_clip_on(False) axline.set_clip_on(False) for i, l in enumerate(locs): if l == 0: # no origin label continue coor = [args[2][0][i], args[2][1][i], format % (mult * l)] ax.text(horizontalalignment=halignment, verticalalignment=valignment, transform=trans, *coor) if label is not None: ax.text( #max(args[2][0]), max(args[2][1]), lx, ly, label, horizontalalignment=lhalignment, verticalalignment=lvalignment, fontsize=14, # fontweight='bold', transform=transl) ##REF: Name was automagically refactored def plot_erp(data, SR=500, onsets=None, pre=0.2, pre_onset=None, post=None, pre_mean=None, color='r', errcolor=None, errtype=None, ax=pl, ymult=1.0, *args, **kwargs): """Plot single ERP on existing canvas Parameters ---------- data : 1D or 2D ndarray The data array can either be 1D (samples over time) or 2D (trials x samples). In the first case a boxcar mapper is used to extract the respective trial timecourses given a list of trial onsets. In the latter case, each row of the data array is taken as the EEG signal timecourse of a particular trial. onsets : list(int) List of onsets (in samples not in seconds). SR : int, optional Sampling rate (1/s) of the signal. pre : float, optional Duration (in seconds) to be plotted prior to onset. pre_onset : float or None If data is already in epochs (2D) then pre_onset provides information on how many seconds pre-stimulus were used to generate them. If None, then pre_onset = pre post : float Duration (in seconds) to be plotted after the onset. pre_mean : float Duration (in seconds) at the beginning of the window which is used for deriving the mean of the signal. If None, pre_mean = pre errtype : None or 'ste' or 'std' or 'ci95' or list of previous three Type of error value to be computed per datapoint. 'ste' -- standard error of the mean, 'std' -- standard deviation 'ci95' -- 95% confidence interval (1.96 * ste), None -- no error margin is plotted (default) Optionally, multiple error types can be specified in a list. In that case all of them will be plotted. color : matplotlib color code, optional Color to be used for plotting the mean signal timecourse. errcolor : matplotlib color code Color to be used for plotting the error margin. If None, use main color but with weak alpha level ax : Target where to draw. ymult : float, optional Multiplier for the values. E.g. if negative-up ERP plot is needed: provide ymult=-1.0 *args, **kwargs Additional arguments to `pylab.plot`. Returns ------- array Mean ERP timeseries. """ if pre_mean is None: pre_mean = pre # set default pre_discard = 0 if onsets is not None: # if we need to extract ERPs if post is None: raise ValueError, \ "Duration post onsets must be provided if onsets are given" # trial timecourse duration duration = pre + post # We are working with a full timeline bcm = BoxcarMapper(onsets, boxlength = int(SR * duration), offset = -int(SR * pre)) erp_data = bcm(data) # override values since we are using Boxcar pre_onset = pre else: if pre_onset is None: pre_onset = pre if pre_onset < pre: warning("Pre-stimulus interval to plot %g is smaller than provided " "pre-stimulus captured interval %g, thus plot interval was " "adjusted" % (pre, pre_onset)) pre = pre_onset if post is None: # figure out post duration = float(data.shape[1]) / SR - pre_discard post = duration - pre else: duration = pre + post erp_data = data pre_discard = pre_onset - pre # Scale the data appropriately erp_data *= ymult # validity check -- we should have 2D matrix (trials x samples) if len(erp_data.shape) != 2: raise RuntimeError, \ "plot_erp() supports either 1D data with onsets, or 2D data " \ "(trials x sample_points). Shape of the data at the point " \ "is %s" % erp_data.shape if not (pre_mean == 0 or pre_mean is None): # mean of pre-onset signal accross trials erp_baseline = np.mean( erp_data[:, int((pre_onset-pre_mean)*SR):int(pre_onset*SR)]) # center data on pre-onset mean # NOTE: make sure that we make a copy of the data to don't # alter the original. Better be safe than sorry erp_data = erp_data - erp_baseline # generate timepoints and error ranges to plot filled error area # top -> # bottom <- time_points = np.arange(erp_data.shape[1]) * 1.0 / SR - pre_onset # if pre != pre_onset if pre_discard > 0: npoints = int(pre_discard * SR) time_points = time_points[npoints:] erp_data = erp_data[:, npoints:] # select only time points of interest (if post is provided) if post is not None: npoints = int(duration * SR) time_points = time_points[:npoints] erp_data = erp_data[:, :npoints] # compute mean signal timecourse accross trials erp_mean = np.mean(erp_data, axis=0) # give sane default if errtype is None: errtype = [] if not isinstance(errtype, list): errtype = [errtype] for et in errtype: # compute error per datapoint if et in ['ste', 'ci95']: erp_stderr = erp_data.std(axis=0) / np.sqrt(len(erp_data)) if et == 'ci95': erp_stderr *= 1.96 elif et == 'std': erp_stderr = erp_data.std(axis=0) else: raise ValueError, "Unknown error type '%s'" % errtype time_points2w = np.hstack((time_points, time_points[::-1])) error_top = erp_mean + erp_stderr error_bottom = erp_mean - erp_stderr error2w = np.hstack((error_top, error_bottom[::-1])) if errcolor is None: errcolor = color # plot error margin pfill = ax.fill(time_points2w, error2w, edgecolor=errcolor, facecolor=errcolor, alpha=0.2, zorder=3) # plot mean signal timecourse ax.plot(time_points, erp_mean, lw=2, color=color, zorder=4, *args, **kwargs) # ax.xaxis.set_major_locator(pl.MaxNLocator(4)) return erp_mean ##REF: Name was automagically refactored def plot_erps(erps, data=None, ax=None, pre=0.2, post=None, pre_onset=None, xlabel='time (s)', ylabel='$\mu V$', ylim=None, ymult=1.0, legend=None, xlformat='%4g', ylformat='%4g', loffset=10, alinewidth=2, **kwargs): """Plot multiple ERPs on a new figure. Parameters ---------- erps : list of tuples List of definitions of ERPs. Each tuple should consist of (label, color, onsets) or a dictionary which defines, label, color, onsets, data. Data provided in dictionary overrides 'common' data provided in the next argument `data` data Data for ERPs to be derived from 1D (samples) ax Where to draw (e.g. subplot instance). If None, new figure is created pre : float, optional Duration (seconds) to be plotted prior to onset pre_onset : None or float If data is already in epochs (2D) then pre_onset provides information on how many seconds pre-stimulus were used to generate them. If None, then pre_onset = pre post : None or float Duration (seconds) to be plotted after the onset. If any data is provided with onsets, it can't be None. If None -- plots all time points after onsets ymult : float, optional Multiplier for the values. E.g. if negative-up ERP plot is needed: provide ymult=-1.0 xlformat : str, optional Format of the x ticks ylformat : str, optional Format of the y ticks legend : None or string If not None, legend will be plotted with position argument provided in this argument loffset : int, optional Offset in voxels for axes and tick labels. Different matplotlib frontends might have different opinions, thus offset value might need to be tuned specifically per frontend alinewidth : int, optional Axis and ticks line width **kwargs Additional arguments provided to plot_erp() Examples -------- :: kwargs = {'SR' : eeg.SR, 'pre_mean' : 0.2} fig = plot_erps((('60db', 'b', eeg.erp_onsets['60db']), ('80db', 'r', eeg.erp_onsets['80db'])), data[:, eeg.sensor_mapping['Cz']], ax=fig.add_subplot(1,1,1,frame_on=False), pre=0.2, post=0.6, **kwargs) or :: fig = plot_erps((('60db', 'b', eeg.erp_onsets['60db']), {'color': 'r', 'onsets': eeg.erp_onsets['80db'], 'data' : data[:, eeg.sensor_mapping['Cz']]} ), data[:, eeg.sensor_mapping['Cz']], ax=fig.add_subplot(1,1,1,frame_on=False), pre=0.2, post=0.6, **kwargs) Returns ------- h current fig handler """ if ax is None: fig = pl.figure(facecolor='white') fig.clf() ax = fig.add_subplot(111, frame_on=False) else: fig = pl.gcf() # We don't want original axis being on ax.axison = True labels = [] for erp_def in erps: plot_data = data params = {'ymult' : ymult} # provide custom parameters per ERP if isinstance(erp_def, tuple) and len(erp_def) == 3: params.update( {'label': erp_def[0], 'color': erp_def[1], 'onsets': erp_def[2]}) elif isinstance(erp_def, dict): plot_data = erp_def.pop('data', None) params.update(erp_def) labels.append(params.get('label', '')) # absorb common parameters params.update(kwargs) if plot_data is None: raise ValueError, "Channel %s got no data provided" \ % params.get('label', 'UNKNOWN') plot_erp(plot_data, pre=pre, pre_onset=pre_onset, post=post, ax=ax, **params) # plot_kwargs={'label':label}) if isinstance(erp_def, dict): erp_def['data'] = plot_data # return it back props = dict(color='black', linewidth=alinewidth, markeredgewidth=alinewidth, zorder=1, offset=loffset) def set_limits(): """Helper to set x and y limits""" ax.set_xlim( (-pre, post) ) if ylim != None: ax.set_ylim(*ylim) set_limits() _make_centeredaxis(ax, 0, ai=0, label=xlabel, **props) set_limits() _make_centeredaxis(ax, 0, ai=1, mult=np.sign(ymult), label=ylabel, **props) ax.yaxis.set_major_locator(pl.NullLocator()) ax.xaxis.set_major_locator(pl.NullLocator()) # legend obscures plotting a bit... seems to be plotting # everything twice. Thus disabled by default if legend is not None and np.any(np.array(labels) != ''): pl.legend(labels, loc=legend) fig.canvas.draw() return fig pymvpa2-2.2.0/mvpa2/misc/plot/lightbox.py000066400000000000000000000512421202542755000202470ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Basic (f)MRI plotting with ability to interactively perform thresholding """ import pylab as pl import numpy as np import matplotlib as mpl from mvpa2.base import warning, externals from mvpa2.misc.plot.tools import Pion, Pioff, mpl_backend_isinteractive if __debug__: from mvpa2.base import debug if externals.exists('nibabel'): import nibabel as nb from nibabel.spatialimages import SpatialImage else: class SpatialImage(object): """Just a helper to allow plot_lightbox be used even if no nifti module available for plotting regular 2D/3D images (ndarrays)""" def __init__(self, filename): raise ValueError, "plot_lightbox was provided a filename %s. " \ "By now we only support loading data from Nifti/Analyze " \ "files, but nifti module is not available" % filename def plot_lightbox(background=None, background_mask=None, cmap_bg='gray', overlay=None, overlay_mask=None, cmap_overlay='autumn', vlim=(0.0, None), vlim_type=None, do_stretch_colors=False, add_info=True, add_hist=True, add_colorbar=True, fig=None, interactive=None, nrows=None, ncolumns=None, slices=None, slice_title="k=%(islice)s" ): """Very basic plotting of 3D data with interactive thresholding. `background`/`overlay` and corresponding masks could be nifti files names or `SpatialImage` objects, or 3D `ndarrays`. If no mask is provided, only non-0 elements are plotted. Notes ----- No care is taken to deduce the orientation (e.g. Left-to-Right, Posterior-to-Anterior) of fMRI volumes. Therefore all input volumes should be in the same orientation. Parameters ---------- do_stretch_colors : bool, optional Stratch color range to the data (not just to visible data) vlim : tuple, optional 2 element tuple of low/upper bounds of values to plot vlim_type : None or 'symneg_z' If not None, then vlim would be treated accordingly: symneg_z z-score values of symmetric normal around 0, estimated by symmetrizing negative part of the distribution, which often could be assumed when total distribution is a mixture of by-chance performance normal around 0, and some other in the positive tail ncolumns : int or None Explicit starting number of columns into which position the slice renderings. If None, square arrangement would be used nrows : int or None Explicit starting number of rows into which position the slice renderings. If None, square arrangement would be used add_hist : bool or tuple (int, int) If True, add histogram and position automagically. If a tuple -- use as (row, column) add_info : bool or tuple (int, int) If True, add information and position automagically. If a tuple -- use as (row, column). slices : None or list of int If not to plot whole volume, what slices to plot. slice_title : None or str Desired title of slices. Use string comprehension and assume `islice` variable present with current slice index. Available colormaps are presented nicely on http://www.scipy.org/Cookbook/Matplotlib/Show_colormaps TODO: * Make interface more attractive/usable * allow multiple overlays... or just unify for them all to be just a list of entries * handle cases properly when there is only one - background/overlay """ def handle_arg(arg): """Helper which would read in SpatialImage if necessary """ if isinstance(arg, basestring): arg = nb.load(arg) argshape = arg.get_shape() # Assure that we have 3D (at least) if len(argshape)<3: arg = nb.Nifti1Image( arg.get_data().reshape(argshape + (1,)*(3-len(argshape))), arg.get_affine(), arg.get_header()) if isinstance(arg, np.ndarray): if len(arg.shape) != 3: raise ValueError, "For now just handling 3D volumes" return arg bg = handle_arg(background) if isinstance(bg, SpatialImage): # figure out aspect # fov = (np.array(bg.header['pixdim']) * bg.header['dim'])[3:0:-1] # aspect = fov[1]/fov[2] # just scale by voxel-size ratio (extent is disabled) bg_hdr = bg.get_header() aspect = bg_hdr.get_zooms()[2] / bg_hdr.get_zooms()[1] bg = bg.get_data() else: aspect = 1.0 bg_mask = None if bg is not None: bg_mask = handle_arg(background_mask) if isinstance(bg_mask, SpatialImage): bg_mask = bg_mask.get_data() if bg_mask is not None: bg_mask = bg_mask != 0 else: bg_mask = bg != 0 func = handle_arg(overlay) if func is not None: if isinstance(func, SpatialImage): func = func.get_data() func_mask = handle_arg(overlay_mask) if isinstance(func_mask, SpatialImage): func_mask = func_mask.get_data() #[..., ::-1, :] # XXX if func_mask is not None: func_mask = func_mask != 0 else: func_mask = func != 0 # Lets assure that that we are dealing with <= 3D for v in (bg, bg_mask, func, func_mask): if v is not None: if v.ndim > 3: # we could squeeze out first bogus dimensions if np.all(np.array(v.shape[3:]) == 1): v.shape = v.shape[:3] else: raise ValueError, \ "Original shape of some data is %s whenever we " \ "can accept only 3D images (or ND with degenerate " \ "first dimensions)" % (v.shape,) # process vlim vlim = list(vlim) vlim_orig = vlim[:] add_dist2hist = [] if isinstance(vlim_type, basestring): if vlim_type == 'symneg_z': func_masked = func[func_mask] fnonpos = func_masked[func_masked<=0] fneg = func_masked[func_masked<0] # take together with sign-reverted negative values fsym = np.hstack((-fneg, fnonpos)) nfsym = len(fsym) # Estimate normal std under assumption of mean=0 std = np.sqrt(np.mean(abs(fsym)**2)) # convert vlim assuming it is z-scores for i,v in enumerate(vlim): if v is not None: vlim[i] = std * v # add a plot to histogram add_dist2hist = [(lambda x: nfsym/(np.sqrt(2*np.pi)*std) \ *np.exp(-(x**2)/(2*std**2)), {})] else: raise ValueError, 'Unknown specification of vlim=%s' % vlim + \ ' Known is: symneg' class Plotter(object): """ TODO """ #_store_attribs = ('vlim', 'fig', 'bg', 'bg_mask') def __init__(self, _locals): """TODO""" self._locals = _locals self.fig = _locals['fig'] def do_plot(self): """TODO""" # silly yarik didn't find proper way vlim = self._locals['vlim'] bg = self._locals['bg'] bg_mask = self._locals['bg_mask'] ncolumns = self._locals['ncolumns'] nrows = self._locals['nrows'] add_info = self._locals['add_info'] add_hist = self._locals['add_hist'] slices = self._locals['slices'] slice_title = self._locals['slice_title'] if np.isscalar(vlim): vlim = (vlim, None) if vlim[0] is None: vlim = (np.min(func), vlim[1]) if vlim[1] is None: vlim = (vlim[0], np.max(func)) if __debug__ and 'PLLB' in debug.active: debug('PLLB', "Maximum %g at %s, vlim is %s" % (np.max(func), np.where(func==np.max(func)), str(vlim))) invert = vlim[1] < vlim[0] if invert: vlim = (vlim[1], vlim[0]) print "Not yet fully supported" # adjust lower bound if it is too low # and there are still multiple values ;) func_masked = func[func_mask] if vlim[0] < np.min(func_masked) and \ np.min(func_masked) != np.max(func_masked): vlim = list(vlim) vlim[0] = np.min(func[func_mask]) vlim = tuple(vlim) bound_above = (max(vlim) < np.max(func)) bound_below = (min(vlim) > np.min(func)) # # reverse the map if needed cmap_ = cmap_overlay if not bound_below and bound_above: if cmap_.endswith('_r'): cmap_ = cmap_[:-2] else: cmap_ += '_r' func_cmap = eval("pl.cm.%s" % cmap_) bg_cmap = eval("pl.cm.%s" % cmap_bg) if do_stretch_colors: clim = (np.min(func), np.max(func))#vlim else: clim = vlim # # figure out 'extend' for colorbar and threshold string extend, thresh_str = { (True, True) : ('both', 'x in [%.3g, %.3g]' % tuple(vlim)), (True, False): ('min', 'x in [%.3g, +inf]' % vlim[0]), (False, True): ('max', 'x in (-inf, %.3g]' % vlim[1]), (False, False): ('neither', 'none') }[(bound_below, bound_above)] # # Figure out subplots dshape = func.shape if slices is None: slices = range(func.shape[0]) nslices = len(slices) # more or less square alignment ;-) if ncolumns is None: ncolumns = int(np.sqrt(nslices)) ndcolumns = ncolumns nrows = max(nrows, int(np.ceil(nslices*1.0/ncolumns))) # Check if additional column/row information was provided # and extend nrows/ncolumns for v in (add_hist, add_info): if v and not isinstance(v, bool): ncolumns = max(ncolumns, v[1]+1) nrows = max(nrows, v[0]+1) # Decide either we need more cells where to add hist and/or info nadd = bool(add_info) + bool(add_hist) while ncolumns*nrows - (nslices + nadd) < 0: ncolumns += 1 locs = ['' for i in xrange(ncolumns*nrows)] # Fill in predefined locations for v,vl in ((add_hist, 'hist'), (add_info, 'info')): if v and not isinstance(v, bool): locs[ncolumns*v[0] + v[1]] = vl # Fill in slices for islice in slices: locs[locs.index('')] = islice # Fill the last available if necessary if add_hist and isinstance(add_hist, bool): locs[locs.index('')] = 'hist' if add_info and isinstance(add_info, bool): locs[locs.index('')] = 'info' Pioff() if self.fig is None: self.fig = pl.figure(facecolor='white', figsize=(4*ncolumns, 4*nrows)) fig = self.fig fig.clf() # # how to threshold images thresholder = lambda x: np.logical_and(x>=vlim[0], x<=vlim[1]) ^ invert # # Draw all slices self.slices_ax = [] im0 = None for islice in slices[::-1]: #range(nslices)[::-1]: ax = fig.add_subplot(nrows, ncolumns, locs.index(islice) + 1, frame_on=False) self.slices_ax.append(ax) ax.axison = False slice_bg_nvoxels = None if bg is not None: slice_bg = bg[:, :, islice] slice_bg_ = np.ma.masked_array(slice_bg, mask=np.logical_not(bg_mask[:, :, islice])) #slice_bg<=0) slice_bg_nvoxels = len(slice_bg_.nonzero()[0]) if __debug__: debug('PLLB', "Plotting %i background elements in slice %i" % (slice_bg_nvoxels, islice)) slice_sl = func[:, :, islice] in_thresh = thresholder(slice_sl) out_thresh = np.logical_not(in_thresh) slice_sl_ = np.ma.masked_array(slice_sl, mask=np.logical_or(out_thresh, np.logical_not(func_mask[:, :, islice]))) slice_func_nvoxels = len(slice_sl_.nonzero()[0]) if __debug__: debug('PLLB', "Plotting %i foreground elements in slice %i" % (slice_func_nvoxels, islice)) kwargs = dict(aspect=aspect, origin='upper') #extent=(0, slice_bg.shape[0], # 0, slice_bg.shape[1])) # paste a blank white background first, since otherwise # recent matplotlib screws up those masked imshows im = ax.imshow(np.ones(slice_sl_.shape).T, cmap=bg_cmap, **kwargs) im.set_clim((0,1)) # ax.clim((0,1)) if slice_bg_nvoxels: ax.imshow(slice_bg_.T, # let's stay close to the ugly truth ;-) #interpolation='bilinear', interpolation='nearest', cmap=bg_cmap, **kwargs) if slice_func_nvoxels: alpha = slice_bg_nvoxels and 0.9 or 1.0 im = ax.imshow(slice_sl_.T, interpolation='nearest', cmap=func_cmap, alpha=alpha, **kwargs) im.set_clim(*clim) im0 = im if slice_title: pl.title(slice_title % locals()) # func_masked = func[func_mask] # # Add summary information func_thr = func[np.logical_and(func_mask, thresholder(func))] if add_info and len(func_thr): self.info_ax = ax = fig.add_subplot(nrows, ncolumns, locs.index('info')+1, frame_on=False) # cb = pl.colorbar(shrink=0.8) # #cb.set_clim(clim[0], clim[1]) ax.axison = False #if add_colorbar: # cb = pl.colorbar(im, shrink=0.8, pad=0.0, drawedges=False, # extend=extend, cmap=func_cmap) stats = {'v':len(func_masked), 'vt': len(func_thr), 'm': np.mean(func_masked), 'mt': np.mean(func_thr), 'min': np.min(func_masked), 'mint': np.min(func_thr), 'max': np.max(func_masked), 'maxt': np.max(func_thr), 'mm': np.median(func_masked), 'mmt': np.median(func_thr), 'std': np.std(func_masked), 'stdt': np.std(func_thr), 'sthr': thresh_str} pl.text(0, 0.5, """ Original: voxels = %(v)d range = [%(min).3g, %(max).3g] mean = %(m).3g median = %(mm).3g std = %(std).3g Thresholded: %(sthr)s: voxels = %(vt)d range = [%(mint).3g, %(maxt).3g] median = %(mt).3g mean = %(mmt).3g std = %(stdt).3g """ % stats, horizontalalignment='left', verticalalignment='center', transform = ax.transAxes, fontsize=14) cb = None if add_colorbar and im0 is not None: kwargs_cb = {} #if add_hist: # kwargs_cb['cax'] = self.hist_ax self.cb_ax = cb = pl.colorbar( im0, #self.hist_ax, shrink=0.8, pad=0.0, drawedges=False, extend=extend, cmap=func_cmap, **kwargs_cb) cb.set_clim(*clim) # Add histogram if add_hist: self.hist_ax = fig.add_subplot(nrows, ncolumns, locs.index('hist') + 1, frame_on=True) minv, maxv = np.min(func_masked), np.max(func_masked) if minv<0 and maxv>0: # then make it centered on 0 maxx = max(-minv, maxv) range_ = (-maxx, maxx) else: range_ = (minv, maxv) H = np.histogram(func_masked, range=range_, bins=31) # API changed since v0.99.0-641-ga7c2231 halign = externals.versions['matplotlib'] >= '1.0.0' \ and 'mid' or 'center' H2 = pl.hist(func_masked, bins=H[1], align=halign, facecolor='#FFFFFF', hold=True) for a, kwparams in add_dist2hist: dbin = (H[1][1] - H[1][0]) pl.plot(H2[1], [a(x) * dbin for x in H2[1]], **kwparams) if add_colorbar and cb: cbrgba = cb.to_rgba(H2[1]) for face, facecolor, value in zip(H2[2], cbrgba, H2[1]): if not thresholder(value): color = '#FFFFFF' else: color = facecolor face.set_facecolor(color) fig.subplots_adjust(left=0.01, right=0.95, hspace=0.25) # , bottom=0.01 if ncolumns - int(bool(add_info) or bool(add_hist)) < 2: fig.subplots_adjust(wspace=0.4) else: fig.subplots_adjust(wspace=0.1) Pion() def on_click(self, event): """Actions to perform on click """ if id(event.inaxes) != id(plotter.hist_ax): return xdata, ydata, button = event.xdata, event.ydata, event.button vlim = self._locals['vlim'] if button == 1: vlim[0] = xdata elif button == 3: vlim[1] = xdata elif button == 2: vlim[0], vlim[1] = vlim[1], vlim[0] self.do_plot() plotter = Plotter(locals()) plotter.do_plot() if interactive is None: interactive = mpl_backend_isinteractive # Global adjustments if interactive: # if pl.matplotlib.is_interactive(): pl.connect('button_press_event', plotter.on_click) pl.show() plotter.fig.plotter = plotter return plotter.fig if __name__ == "__main__": # for easy debugging import os from mvpa2.base import cfg impath = os.path.join('datadb', 'tutorial_data', 'tutorial_data', 'data') plot_lightbox( #background = NiftiImage('%s/anat.nii.gz' % impath), background = '%s/anat.nii.gz' % impath, background_mask = None, overlay = nb.load('%s/example_bold.nii.gz' % impath), #.get_data(), overlay_mask = '%s/mask_brain.nii.gz' % impath, # do_stretch_colors = False, add_colorbar = True, cmap_bg = 'gray', cmap_overlay = 'hot', # YlOrRd_r # pl.cm.autumn # fig = None, # vlim describes value limits # clim color limits (same by default) vlim = [100, None], #vlim_type = 'symneg_z', interactive = True, # #nrows = 2, #ncolumns = 3, add_info = (1, 2), add_hist = (0, 2), # slices = [20, 23, 26, 29, 32, 35] ) pl.show() pymvpa2-2.2.0/mvpa2/misc/plot/tools.py000066400000000000000000000021651202542755000175670ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Various utilities to help plotting""" __docformat__ = 'restructuredtext' from mvpa2.base import externals externals.exists("pylab", raise_=True) import pylab as pl interactive_backends = ['GTKAgg', 'TkAgg'] # Backends can be modified only prior importing matplotlib, so it is # safe to just assign current backend right here mpl_backend = pl.matplotlib.get_backend() mpl_backend_isinteractive = mpl_backend in interactive_backends if mpl_backend_isinteractive: Pioff = pl.ioff def Pion(): """Little helper to call pl.draw() and pl.ion() if backend is interactive """ pl.draw() pl.ion() else: def _Pnothing(): """Dummy function which does nothing """ pass Pioff = Pion = _Pnothing pymvpa2-2.2.0/mvpa2/misc/plot/topo.py000066400000000000000000000167501202542755000174150ustar00rootroot00000000000000# emacs: -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # # The initial version of the code was contributed by Ingo Fründ and is # Coypright (c) 2008 by Ingo Fründ ingo.fruend@googlemail.com # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Plot parameter distributions on a head surface (topography plots).""" __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals if externals.exists("pylab", raise_=True): import pylab as pl if externals.exists("griddata", raise_=True): from mvpa2.support.griddata import griddata if externals.exists("scipy", raise_=True): from scipy.optimize import leastsq if externals.versions['numpy'] > '1.1.0': from numpy import ma else: from matplotlib.numerix import ma # TODO : add optional plotting labels for the sensors ##REF: Name was automagically refactored def plot_head_topography(topography, sensorlocations, plotsensors=False, resolution=51, masked=True, plothead=True, plothead_kwargs=None, **kwargs): """Plot distribution to a head surface, derived from some sensor locations. The sensor locations are first projected onto the best fitting sphere and finally projected onto a circle (by simply ignoring the z-axis). Parameters ---------- topography : array A vector of some values corresponding to each sensor. sensorlocations : (nsensors x 3) array 3D coordinates of each sensor. The order of the sensors has to match with the `topography` vector. plotsensors : bool If True, sensor will be plotted on their projected coordinates. No sensor are shown otherwise. plothead : bool If True, a head outline is plotted. plothead_kwargs : dict Additional keyword arguments passed to `plot_head_outline()`. resolution : int Number of surface samples along both x and y-axis. masked : bool If True, all surface sample extending to head outline will be masked. **kwargs All additional arguments will be passed to `pylab.imshow()`. Returns ------- (map, head, sensors) The corresponding matplotlib objects are returned if plotted, ie. if plothead is set to `False`, `head` will be `None`. map The colormap that makes the actual plot, a matplotlib.image.AxesImage instance. head What is returned by `plot_head_outline()`. sensors The dots marking the electrodes, a matplotlib.lines.Line2d instance. """ # give sane defaults if plothead_kwargs is None: plothead_kwargs = {} # error function to fit the sensor locations to a sphere def err(params): r, cx, cy, cz = params return (sensorlocations[:, 0] - cx) ** 2 \ + (sensorlocations[:, 1] - cy) ** 2 \ + (sensorlocations[:, 2] - cz) ** 2 \ - r ** 2 # initial guess of sphere parameters (radius and center) params = (1, 0, 0, 0) # do fit (r, cx, cy, cz), stuff = leastsq(err, params) # size of each square ssh = float(r) / resolution # half-size ss = ssh * 2.0 # full-size # Generate a grid and interpolate using the griddata module x = np.arange(cx - r, cx + r, ss) + ssh y = np.arange(cy - r, cy + r, ss) + ssh x, y = pl.meshgrid(x, y) # project the sensor locations onto the sphere sphere_center = np.array((cx, cy, cz)) sproj = sensorlocations - sphere_center sproj = r * sproj / np.c_[np.sqrt(np.sum(sproj ** 2, axis=1))] sproj += sphere_center # fit topology onto xy projection of sphere topo = griddata(sproj[:, 0], sproj[:, 1], np.ravel(np.array(topography)), x, y) # mask values outside the head if masked: notinhead = np.greater_equal((x - cx) ** 2 + (y - cy) ** 2, (1.0 * r) ** 2) topo = ma.masked_where(notinhead, topo) # show surface map = pl.imshow(topo, origin="lower", extent=(-r, r, -r, r), **kwargs) pl.axis('off') if plothead: # plot scaled head outline head = plot_head_outline(scale=r, shift=(cx/2.0, cy/2.0), **plothead_kwargs) else: head = None if plotsensors: # plot projected sensor locations # reorder sensors so the ones below plotted first # TODO: please fix with more elegant solution zenum = [x[::-1] for x in enumerate(sproj[:, 2].tolist())] zenum.sort() indx = [ x[1] for x in zenum ] sensors = pl.plot(sproj[indx, 0] - cx/2.0, sproj[indx, 1] - cy/2.0, 'wo') else: sensors = None return map, head, sensors ##REF: Name was automagically refactored def plot_head_outline(scale=1, shift=(0, 0), color='k', linewidth='5', **kwargs): """Plots a simple outline of a head viewed from the top. The plot contains schematic representations of the nose and ears. The size of the head is basically a unit circle for nose and ears attached to it. Parameters ---------- scale : float Factor to scale the size of the head. shift : 2-tuple of floats Shift the center of the head circle by these values. color : matplotlib color spec The color the outline should be plotted in. linewidth : int Linewidth of the head outline. **kwargs All additional arguments are passed to `pylab.plot()`. Returns ------- Matplotlib lines2D object can be used to tweak the look of the head outline. """ rmax = 0.5 # factor used all the time fac = 2 * np.pi * 0.01 # Koordinates for the ears EarX1 = -1 * np.array( [.497, .510, .518, .5299, .5419, .54, .547, .532, .510, rmax * np.cos(fac * (54 + 42))]) EarY1 = np.array( [.0655, .0775, .0783, .0746, .0555, -.0055, -.0932, -.1313, -.1384, rmax * np.sin(fac * (54 + 42))]) EarX2 = np.array( [rmax * np.cos(fac * (54 + 42)), .510, .532, .547, .54, .5419, .5299, .518, .510, .497] ) EarY2 = np.array( [rmax * np.sin(fac * (54 + 42)), -.1384, -.1313, -.0932, -.0055, .0555, .0746, .0783, .0775, .0655] ) # Coordinates for the Head HeadX1 = np.fromfunction( lambda x: rmax * np.cos(fac * (x + 2)), (21,)) HeadY1 = np.fromfunction( lambda y: rmax * np.sin(fac * (y + 2)), (21,)) HeadX2 = np.fromfunction( lambda x: rmax * np.cos(fac * (x + 28)), (21,)) HeadY2 = np.fromfunction( lambda y: rmax * np.sin(fac * (y + 28)), (21,)) HeadX3 = np.fromfunction( lambda x: rmax * np.cos(fac * (x + 54)), (43,)) HeadY3 = np.fromfunction( lambda y: rmax * np.sin(fac * (y + 54)), (43,)) # Coordinates for the Nose NoseX = np.array([.18 * rmax, 0, -.18 * rmax]) NoseY = np.array([rmax - 0.004, rmax * 1.15, rmax - 0.004]) # Combine to one X = np.concatenate((EarX2, HeadX1, NoseX, HeadX2, EarX1, HeadX3)) Y = np.concatenate((EarY2, HeadY1, NoseY, HeadY2, EarY1, HeadY3)) X *= 2 * scale Y *= 2 * scale X += shift[0] Y += shift[1] return pl.plot(X, Y, color=color, linewidth=linewidth) pymvpa2-2.2.0/mvpa2/misc/sampleslookup.py000066400000000000000000000060061202542755000203450ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper to map and validate samples' origids into indices""" import numpy as np if __debug__: from mvpa2.base import debug class SamplesLookup(object): """Map to translate sample origids into unique indices. """ def __init__(self, ds): """ Parameters ---------- ds : Dataset Dataset for which to create the map """ # TODO: Generate origids and magic_id in Dataset!! # They are simply added here for development convenience, but they # should be removed. We should also consider how exactly to calculate # the magic ids and sample ids as this is not necessarily the fastest/ # most robust method --SG try: sample_ids = ds.sa.origids except AttributeError: # origids not yet generated if __debug__: debug('SAL', "Generating dataset origids in SamplesLookup for %(ds)s", msgargs=dict(ds=ds)) ds.init_origids('samples') # XXX may be both? sample_ids = ds.sa.origids try: self._orig_ds_id = ds.a.magic_id except AttributeError: ds.a.update({'magic_id': hash(ds)}) self._orig_ds_id = ds.a.magic_id if __debug__: debug('SAL', "Generating dataset magic_id in SamplesLookup for %(ds)s", msgargs=dict(ds=ds)) nsample_ids = len(sample_ids) self._map = dict(zip(sample_ids, range(nsample_ids))) if __debug__: # some sanity checks if len(self._map) != nsample_ids: raise ValueError, \ "Apparently samples' origids are not uniquely identifying" \ " samples in %s. You must change them so they are unique" \ ". Use ds.init_origids('samples')" % ds def __call__(self, ds): """ .. note: Will raise KeyError if lookup for sample_ids fails, or ds has not been mapped at all """ if (not 'magic_id' in ds.a) or ds.a.magic_id != self._orig_ds_id: raise KeyError, \ 'Dataset %s is not indexed by %s' % (ds, self) _map = self._map _origids = ds.sa.origids res = np.array([_map[i] for i in _origids]) if __debug__: debug('SAL', "Successful lookup: %(inst)s on %(ds)s having " "origids=%(origids)s resulted in %(res)s", msgargs=dict(inst=self, ds=ds, origids=_origids, res=res)) return res pymvpa2-2.2.0/mvpa2/misc/stats.py000066400000000000000000000274461202542755000166200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Little statistics helper""" __docformat__ = 'restructuredtext' from mvpa2.base import externals if externals.exists('scipy', raise_=True): import scipy.stats as st # evaluate once the fact of life __scipy_prior0101 = externals.versions['scipy'] < '0.10.1' import numpy as np import copy def chisquare(obs, exp='uniform'): """Compute the chisquare value of a contingency table with arbitrary dimensions. Parameters ---------- obs : array Observations matrix exp : ('uniform', 'indep_rows') or array, optional Matrix of expected values of the same size as `obs`. If no array is given, then for 'uniform' -- evenly distributes all observations. In 'indep_rows' case contingency table takes into account frequencies relative across different columns, so, if the contingency table is predictions vs targets, it would account for dis-balance among different targets. Although 'uniform' is the default, for confusion matrices 'indep_rows' is preferable. Returns ------- tuple chisquare-stats, associated p-value (upper tail) """ obs = np.array(obs) # get total number of observations nobs = np.sum(obs) # if no expected value are supplied assume equal distribution if not isinstance(exp, np.ndarray): ones = np.ones(obs.shape, dtype=float) if exp == 'indep_rows': # multiply each column exp = np.sum(obs, axis=0)[None, :] * ones / obs.shape[0] elif exp == 'indep_cols': # multiply each row exp = np.sum(obs, axis=1)[:, None] * ones / obs.shape[1] elif exp == 'uniform': # just evenly distribute exp = nobs * np.ones(obs.shape, dtype=float) / np.prod(obs.shape) else: raise ValueError, \ "Unknown specification of expected values exp=%r" % (exp,) else: assert(exp.shape == obs.shape) # make sure to have floating point data exp = exp.astype(float) # compute chisquare value exp_zeros = exp == 0 exp_nonzeros = np.logical_not(exp_zeros) if np.sum(exp_zeros) !=0 and (obs[exp_zeros] != 0).any(): raise ValueError, \ "chisquare: Expected values have 0-values, but there are actual" \ " observations -- chi^2 cannot be computed" chisq = np.sum(((obs - exp )**2)[exp_nonzeros] / exp[exp_nonzeros]) # return chisq and probability (upper tail) # taking only the elements with something expected return chisq, st.chisqprob(chisq, np.sum(exp_nonzeros) - 1) class DSMatrix(object): """DSMatrix allows for the creation of dissilimarity matrices using arbitrary distance metrics. """ # metric is a string def __init__(self, data_vectors, metric='spearman'): """Initialize DSMatrix Parameters ---------- data_vectors : ndarray m x n collection of vectors, where m is the number of exemplars and n is the number of features per exemplar metric : string Distance metric to use (e.g., 'euclidean', 'spearman', 'pearson', 'confusion') """ # init members self.full_matrix = [] self.u_triangle = None self.vector_form = None # this one we know straight away, so set it self.metric = metric # size of dataset (checking if we're dealing with a column vector only) num_exem = np.shape(data_vectors)[0] flag_1d = False # changed 4/26/09 to new way of figuring out if array is 1-D #if (isinstance(data_vectors, np.ndarray)): if (not(num_exem == np.size(data_vectors))): num_features = np.shape(data_vectors)[1] else: flag_1d = True num_features = 1 # generate output (dissimilarity) matrix dsmatrix = np.mat(np.zeros((num_exem, num_exem))) if (metric == 'euclidean'): #print 'Using Euclidean distance metric...' # down rows for i in range(num_exem): # across columns for j in range(num_exem): if (not(flag_1d)): dsmatrix[i, j] = np.linalg.norm( data_vectors[i, :] - data_vectors[j, :]) else: dsmatrix[i, j] = np.linalg.norm( data_vectors[i] - data_vectors[j]) elif (metric == 'spearman'): #print 'Using Spearman rank-correlation metric...' # down rows for i in range(num_exem): # across columns for j in range(num_exem): dsmatrix[i, j] = 1 - st.spearmanr( data_vectors[i,:], data_vectors[j,:])[0] elif (metric == 'pearson'): dsmatrix = np.corrcoef(data_vectors) elif (metric == 'confusion'): #print 'Using confusion correlation metric...' # down rows for i in range(num_exem): # across columns for j in range(num_exem): if (not(flag_1d)): dsmatrix[i, j] = 1 - int( np.floor(np.sum(( data_vectors[i, :] == data_vectors[j, :] ).astype(np.int32)) / num_features)) else: dsmatrix[i, j] = 1 - int( data_vectors[i] == data_vectors[j]) self.full_matrix = dsmatrix ##REF: Name was automagically refactored def get_triangle(self): # if we need to create the u_triangle representation, do so if (self.u_triangle is None): self.u_triangle = np.triu(self.full_matrix) return self.u_triangle # create the dissimilarity matrix on the (upper) triangle of the two # two dissimilarity matrices; we can just reuse the same dissimilarity # matrix code, but since it will return a matrix, we need to pick out # either dsm[0,1] or dsm[1,0] # note: this is a bit of a kludge right now, but it's the only way to solve # certain problems: # 1. Set all 0-valued elements in the original matrix to -1 (an impossible # value for a dissimilarity matrix) # 2. Find the upper triangle of the matrix # 3. Create a vector from the upper triangle, but only with the # elements whose absolute value is greater than 0 -- this # will keep everything from the original matrix that wasn't # part of the zero'ed-out portion when we took the upper # triangle # 4. Set all the -1-valued elements in the vector to 0 (their # original value) # 5. Cast to numpy array ##REF: Name was automagically refactored def get_vector_form(self): if (self.vector_form is not None): return self.vector_form orig_dsmatrix = copy.deepcopy(self.get_full_matrix()) orig_dsmatrix[orig_dsmatrix == 0] = -1 orig_tri = np.triu(orig_dsmatrix) vector_form = orig_tri[abs(orig_tri) > 0] vector_form[vector_form == -1] = 0 self.vector_form = np.asarray(vector_form) return self.vector_form # XXX is there any reason to have these get* methods # instead of plain access to full_matrix and method? ##REF: Name was automagically refactored def get_full_matrix(self): return self.full_matrix ##REF: Name was automagically refactored def get_metric(self): return self.metric def _chk_asanyarray(a, axis): a = np.asanyarray(a) if axis is None: a = a.ravel() outaxis = 0 else: outaxis = axis return a, outaxis def ttest_1samp(a, popmean=0, axis=0, mask=None, alternative='two-sided'): """ Calculates the T-test for the mean of ONE group of scores `a`. This is a refinement for the :func:`scipy.stats.ttest_1samp` for the null hypothesis testing that the expected value (mean) of a sample of independent observations is equal to the given population mean, `popmean`. It adds ability to test carry single tailed test as well as operate on samples with varying number of active measurements, as specified by `mask` argument. Since it is only a refinement and otherwise it should perform the same way as the original ttest_1samp -- the name was overloaded. Note ---- Initially it was coded before discovering scipy.mstats which should work with masked arrays. But ATM (scipy 0.10.1) its ttest_1samp does not support axis argument making it of limited use anyways. Parameters ---------- a : array_like sample observations popmean : float or array_like expected value in null hypothesis, if array_like than it must have the same shape as `a` excluding the axis dimension axis : int, optional, (default axis=0) Axis can equal None (ravel array first), or an integer (the axis over which to operate on a). mask : array_like, bool bool array to specify which measurements should participate in the test alternative : ('two-sided', 'greater', 'less') alternative two test Returns ------- t : float or array t-statistic prob : float or array p-value Examples -------- TODO """ # would also flatten if no axis specified a, axis = _chk_asanyarray(a, axis) if isinstance(a, np.ma.core.MaskedArray): if mask is not None: raise ValueError( "Provided array is already masked, so no additional " "mask should be provided") n = a.count(axis=axis) elif mask is not None: # Create masked array a = np.ma.masked_array(a, mask=~np.asanyarray(mask)) n = a.count(axis=axis) else: # why bother doing anything? n = a.shape[axis] df = n - 1 d = np.mean(a, axis) - popmean # yoh: there is a bug in old (e.g. 1.4.1) numpy's while operating on # masked arrays -- for some reason refuses to compute var # correctly whenever only 2 elements are available and it is # multi-dimensional: # (Pydb) print np.var(a[:, 9:11], axis, ddof=1) # [540.0 --] # (Pydb) print np.var(a[:, 10:11], axis, ddof=1) # [--] # (Pydb) print np.var(a[:, 10], axis, ddof=1) # 648.0 v = np.var(a, axis, ddof=1) denom = np.sqrt(v / n) t = np.divide(d, denom) # t, prob might be full arrays if no masking was actually done def _filled(a): if isinstance(a, np.ma.core.MaskedArray): return a.filled(np.nan) else: return a t, prob = _ttest_finish(_filled(df), _filled(t), alternative=alternative) return t, prob def _ttest_finish(df, t, alternative): """Common code between all 3 t-test functions.""" dist_gen = st.distributions.t if alternative == 'two-sided': prob = dist_gen.sf(np.abs(t), df) * 2 # use np.abs to get upper alternative elif alternative == 'greater': prob = dist_gen.sf(t, df) elif alternative == 'less': prob = dist_gen.cdf(t, df) else: raise ValueError("Unknown alternative %r" % alternative) t_isnan = np.isnan(t) if np.any(t_isnan) and __scipy_prior0101: # older scipy's would return 0 for nan values of the argument # which is incorrect prob[t_isnan] = np.nan if t.ndim == 0: t = np.asscalar(t) return t, prob pymvpa2-2.2.0/mvpa2/misc/support.py000066400000000000000000000622011202542755000171620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Support function -- little helpers in everyday life""" __docformat__ = 'restructuredtext' import itertools import math import random import re, os, sys # for SmartVersion from distutils.version import Version import numpy as np #import numpy.random as npr from mvpa2.base import warning from mvpa2.support.copy import copy, deepcopy from mvpa2.base.types import is_sequence_type if __debug__: from mvpa2.base import debug ##REF: Name was automagically refactored def reuse_absolute_path(file1, file2, force=False): """Use path to file1 as the path to file2 is no absolute path is given for file2 Parameters ---------- force : bool if True, force it even if the file2 starts with / """ if not file2.startswith(os.path.sep) or force: # lets reuse path to file1 return os.path.join(os.path.dirname(file1), file2.lstrip(os.path.sep)) else: return file2 ##REF: Name was automagically refactored def transform_with_boxcar(data, startpoints, boxlength, offset=0, fx=np.mean): """This function extracts boxcar windows from an array. Such a boxcar is defined by a starting point and the size of the window along the first axis of the array (`boxlength`). Afterwards a customizable function is applied to each boxcar individually (Default: averaging). :param data: An array with an arbitrary number of dimensions. :type data: array :param startpoints: Boxcar startpoints as index along the first array axis :type startpoints: sequence :param boxlength: Length of the boxcar window in #array elements :type boxlength: int :param offset: Optional offset between the configured starting point and the actual begining of the boxcar window. :type offset: int :rtype: array (len(startpoints) x data.shape[1:]) """ if boxlength < 1: raise ValueError, "Boxlength lower than 1 makes no sense." # check for illegal boxes for sp in startpoints: if ( sp + offset + boxlength - 1 > len(data)-1 ) \ or ( sp + offset < 0 ): raise ValueError, \ 'Illegal box: start: %i, offset: %i, length: %i' \ % (sp, offset, boxlength) # build a list of list where each sublist contains the indexes of to be # averaged data elements selector = [ range( i + offset, i + offset + boxlength ) \ for i in startpoints ] # average each box selected = [ fx( data[ np.array(box) ], axis=0 ) for box in selector ] return np.array( selected ) def xunique_combinations(L, n): """Generator of unique combinations form a list L of objects in groups of size n. Parameters ---------- L : list list of unique ids n : int grouping size Adopted from Li Daobing http://code.activestate.com/recipes/190465/ (MIT license, according to activestate.com's policy) Also good discussions on combinations/variations/permutations with various implementations are available at http://mail.python.org/pipermail/python-list/2004-October/286054.html """ if n == 0: yield [] else: for i in xrange(len(L)-n+1): for cc in xunique_combinations(L[i+1:], n-1): yield [L[i]]+cc def __xrandom_unique_combinations(L, n, k=None): """Generator of unique combinations form a list L of objects in groups of size n produced in random order "Elegant" but incorrect since pretty much samples the "tail" Parameters ---------- L : list list of unique ids n : int grouping size k : int or None, optional limit number of combinations. All of combinations are produced if k is None (default) Based on xunique_combinations adopted from Li Daobing http://code.activestate.com/recipes/190465/ (MIT license, according to activestate.com's policy) """ if k is not None: # Just a helper for convenient limiting g = xrandom_unique_combinations(L, n) for i in xrange(k): yield next(g) elif n == 0: yield [] else: for i in npr.permutation(len(L)-n+1): for cc in xrandom_unique_combinations( npr.permutation(L[i+1:]), n-1): yield [L[i]]+cc def ncombinations(n, k): """ A fast way to calculate binomial coefficients by Andrew Dalke Source: http://stackoverflow.com/questions/3025162/statistics-combinations-in-python/3025194 Alternative implementations: scipy.misc.comb() -- approximation """ if 0 <= k <= n: ntok = 1 ktok = 1 for t in xrange(1, min(k, n - k) + 1): ntok *= n ktok *= t n -= 1 return ntok // ktok else: return 0 def xrandom_unique_combinations(L, n, k=None): """Generator of unique combinations form a list L of objects in groups of size n produced in random order Parameters ---------- L : list list of unique ids n : int grouping size k : int or None limit number of combinations. All of combinations are produced if k is None (default) """ ncomb = ncombinations(len(L), n) if k is None: k = ncomb if (ncomb < 1e6 or k > math.sqrt(ncomb)) \ and sys.version_info[:2] >= (2, 6): # so there is no sense really to mess with controlling for # non-repeats -- we can pre-generate all of them and just # choose needed number of random samples # Python2.5 doesn't have itertools.combinations for s in random.sample(list(itertools.combinations(L, n)), k): yield list(s) else: # Let's cycle through permutations while tracking # repeats seen = set() indexes = range(len(L)) # switch to indices so we could # reliably hash them while len(seen) < min(k, ncomb): np.random.shuffle(indexes) sample = tuple(sorted(indexes[:n])) if not (sample in seen): yield [L[x] for x in sample] seen.add(sample) def unique_combinations(L, n, sort=False): """Return unique combinations form a list L of objects in groups of size n. Parameters ---------- L : list list of unique ids n : int length of the subsets to return sort : bool, optional if True -- result is sorted before returning If you are intended to use only a small subset of possible combinations, it is advised to use a generator `xunique_combinations`. """ res = list(xunique_combinations(L, n)) if sort: res = sorted(res) return res ##REF: Name was automagically refactored def indent_doc(v): """Given a `value` returns a string where each line is indented Needed for a cleaner __repr__ output `v` - arbitrary """ return re.sub('\n', '\n ', str(v)) def idhash(val): """Craft unique id+hash for an object """ res = "%s" % id(val) if isinstance(val, list): val = tuple(val) elif isinstance(val, dict): val = tuple(val.items()) try: if sys.version_info[0] >= 3: # TODO: bytes is just a workaround and is slower # Anyway -- research joblib for hashing res += ":%s" % hash(bytes(val)) else: res += ":%s" % hash(buffer(val)) except: try: res += ":%s" % hash(val) except: pass pass return res ##REF: Name was automagically refactored def is_sorted(items): """Check if listed items are in sorted order. Parameters ---------- `items`: iterable container :return: `True` if were sorted. Otherwise `False` + Warning """ items_sorted = deepcopy(items) items_sorted.sort() equality = items_sorted == items # XXX yarik forgotten analog to isiterable if hasattr(equality, '__iter__'): equality = np.all(equality) return equality ##REF: Name was automagically refactored def is_in_volume(coord, shape): """For given coord check if it is within a specified volume size. Returns True/False. Assumes that volume coordinates start at 0. No more generalization (arbitrary minimal coord) is done to save on performance """ for i in xrange(len(coord)): if coord[i] < 0 or coord[i] >= shape[i]: return False return True def array_whereequal(a, x): """Reliable comparison for `numpy.ndarray` `numpy.ndarray` (as of 1.5.0.dev) fails to compare tuples in array of dtype object, e.g. >>> import numpy as np; a=np.array([1, (0,1)], dtype=object); print a == (0,1), a[1] == (0,1) [False False] True This function checks if dtype is object and just does list comprehension in that case """ if a.dtype is np.dtype('object'): return np.array([i==x for i in a], dtype=bool) else: return a == x def version_to_tuple(v): """Convert literal string into a tuple, if possible of ints Tuple of integers constructed by splitting at '.' or interleaves of numerics and alpha numbers """ if isinstance(v, basestring): v = v.split('.') elif isinstance(v, tuple) or isinstance(v, list): # assure tuple pass else: raise ValueError, "Do not know how to treat version '%s'" % str(v) # Try to convert items into ints vres = [] regex = re.compile('(?P[0-9]*)' '(?P[~+-]*[A-Za-z]*)(?P.*)') for x in v: try: vres += [int(x)] except ValueError: # try to split into sequences of literals and numerics suffix = x while suffix != '': res = regex.search(suffix) if res: resd = res.groupdict() if resd['numeric'] != '': vres += [int(resd['numeric'])] if resd['alpha'] != '': vres += [resd['alpha']] suffix = resd['suffix'] else: # We can't detech anything meaningful -- let it go as is resd += [suffix] break v = tuple(vres) return v class SmartVersion(Version): """A bit evolved comparison of versions The reason for not using python's distutil.version is that it seems to have no clue about somewhat common conventions of using '-dev' or 'dev' or 'rc' suffixes for upcoming releases (so major version does contain upcoming release already). So here is an ad-hoc and not as nice implementation """ def parse(self, vstring): self.vstring = vstring self.version = version_to_tuple(vstring) def __str__(self): try: return self.vstring except AttributeError: # Version.__init__ doesn't take care about assigning # .vstring if None is given, so let's just treat as it is # an empty string return "" def __cmp__(self, other): if isinstance(other, (str, tuple, list)): other = SmartVersion(other) elif isinstance(other, SmartVersion): pass elif isinstance(other, Version): other = SmartVersion(other.vstring) else: raise ValueError("Do not know how to treat version %s" % str(other)) if sys.version >= '3': def cmp(a, b): """Compatibility with Python3 -- regular (deprecated in 3) cmp operation should be sufficient for our needs""" return (a > b) - (a < b) else: # having above cmp overloads builtin cmp for this function so we # need manually rebind it or just resort to above cmp in general # (why not?) from __builtin__ import cmp # Do ad-hoc comparison of strings i = 0 s, o = self.version, other.version regex_prerelease = re.compile('~|-?dev|-?rc|-?svn|-?pre|-?beta|-?alpha', re.I) for i in xrange(max(len(s), len(o))): if i < len(s): si = s[i] else: si = None if i < len(o): oi = o[i] else: oi = None if si == oi: continue for x,y,mult in ((si, oi, 1), (oi, si, -1)): if x is None: if isinstance(y, int): return -mult # we got '.1' suffix if isinstance(y, str): if (regex_prerelease.match(y)): return mult # so we got something to signal # pre-release, so first one won else: # otherwise the other one wins return -mult else: raise RuntimeError, "Should not have got here with %s" \ % y elif isinstance(x, int): if not isinstance(y, int): return mult return mult*cmp(x, y) # both are ints elif isinstance(x, str): if isinstance(y, str): return mult*cmp(x,y) return 0 if sys.version >= '3': # version.py logic in python3 does not rely on deprecated # __cmp__ but renames it into _cmp and wraps in those various # comparators... thus our good old __cmp__ should be ok for our # purposes here _cmp = __cmp__ ##REF: Name was automagically refactored def get_break_points(items, contiguous=True): """Return a list of break points. Parameters ---------- items : iterable list of items, such as chunks contiguous : bool if `True` (default) then raise Value Error if items are not contiguous, i.e. a label occur in multiple contiguous sets :raises: ValueError :return: list of indexes for every new set of items """ prev = None # pylint happiness event! known = [] """List of items which was already seen""" result = [] """Resultant list""" for index in xrange(len(items)): item = items[index] if item in known: if index > 0: if prev != item: # breakpoint if contiguous: raise ValueError, \ "Item %s was already seen before" % str(item) else: result.append(index) else: known.append(item) result.append(index) prev = item return result ##REF: Name was automagically refactored def rfe_history_to_maps(history): """Convert history generated by RFE into the array of binary maps Example: history2maps(np.array( [ 3,2,1,0 ] )) results in array([[ 1., 1., 1., 1.], [ 1., 1., 1., 0.], [ 1., 1., 0., 0.], [ 1., 0., 0., 0.]]) """ # assure that it is an array history = np.array(history) nfeatures, steps = len(history), max(history) - min(history) + 1 history_maps = np.zeros((steps, nfeatures)) for step in xrange(steps): history_maps[step, history >= step] = 1 return history_maps class MapOverlap(object): """Compute some overlap stats from a sequence of binary maps. When called with a sequence of binary maps (e.g. lists or arrays) the fraction of mask elements that are non-zero in a customizable proportion of the maps is returned. By default this threshold is set to 1.0, i.e. such an element has to be non-zero in *all* maps. Three additional maps (same size as original) are computed: * overlap_map: binary map which is non-zero for each overlapping element. * spread_map: binary map which is non-zero for each element that is non-zero in any map, but does not exceed the overlap threshold. * ovstats_map: map of float with the raw elementwise fraction of overlap. All maps are available via class members. """ def __init__(self, overlap_threshold=1.0): """Nothing to be seen here. """ self.__overlap_threshold = overlap_threshold # pylint happiness block self.overlap_map = None self.spread_map = None self.ovstats_map = None def __call__(self, maps): """Returns fraction of overlapping elements. """ ovstats = np.mean(maps, axis=0) self.overlap_map = (ovstats >= self.__overlap_threshold ) self.spread_map = np.logical_and(ovstats > 0.0, ovstats < self.__overlap_threshold) self.ovstats_map = ovstats return np.mean(ovstats >= self.__overlap_threshold) class Event(dict): """Simple class to define properties of an event. The class is basically a dictionary. Any properties can be passed as keyword arguments to the constructor, e.g.: >>> ev = Event(onset=12, duration=2.45) Conventions for keys: `onset` The onset of the event in some unit. `duration` The duration of the event in the same unit as `onset`. `label` E.g. the condition this event is part of. `chunk` Group this event is part of (if any), e.g. experimental run. `features` Any amount of additional features of the event. This might include things like physiological measures, stimulus intensity. Must be a mutable sequence (e.g. list), if present. """ _MUSTHAVE = ['onset'] def __init__(self, **kwargs): """ Parameters ---------- **kwargs : dict All keys to describe the Event to initialize its dict. """ # store everything dict.__init__(self, **kwargs) # basic checks for k in Event._MUSTHAVE: if not self.has_key(k): raise ValueError, "Event must have '%s' defined." % k ##REF: Name was automagically refactored def as_descrete_time(self, dt, storeoffset=False, offsetattr='offset'): """Convert `onset` and `duration` information into descrete timepoints. Parameters ---------- dt : float Temporal distance between two timepoints in the same unit as `onset` and `duration`. storeoffset : bool If True, the temporal offset between original `onset` and descretized onset is stored as an additional item. offsetattr : str The name of the attribute that is used to store the computed offset in case the `storeoffset` is enabled. Returns ------- A copy of the original `Event` with `onset` and optionally `duration` replaced by their corresponding descrete timepoint. The new onset will correspond to the timepoint just before or exactly at the original onset. The new duration will be the number of timepoints covering the event from the computed onset timepoint till the timepoint exactly at the end, or just after the event. Note again, that the new values are expressed as #timepoint and not in their original unit! """ dt = float(dt) onset = self['onset'] out = copy(self) # get the timepoint just prior the onset out['onset'] = int(np.floor(onset / dt)) if storeoffset: # compute offset offset = onset - (out['onset'] * dt) out[offsetattr] = offset if out.has_key('duration'): # how many timepoint cover the event (from computed onset # to the one timepoint just after the end of the event out['duration'] = int(np.ceil((onset + out['duration']) / dt) \ - out['onset']) return out def value2idx(val, x, solv='round'): """Convert a value into an index of the closes matching array element. Parameters ---------- val : scalar Value that is to be converted. x : array or sequence One-dimensional array whose elements are used for comparision. solv : {'round', 'floor', 'ceil'} Resolver strategie: absolute closest element (round), closest smaller element (floor), or closest larger element (ceil). Returns ------- int """ # distance to val x = np.asanyarray(x) - val if solv == 'round': pass elif solv == 'ceil': x[x<0] = np.inf elif solv == 'floor': x[x>0] = np.inf else: ValueError("Unkown resolving method '%s'." % solv) x = np.abs(x) idx = np.argmin(x) return idx def mask2slice(mask): """Convert a boolean mask vector into an equivalent slice (if possible). Parameters ---------- mask: boolean array The mask. Returns ------- slice or boolean array If possible the boolean mask is converted into a `slice`. If this is not possible the unmodified boolean mask is returned. """ # the filter should be a boolean array # TODO Could be easily extended to also accept index arrays if not len(mask): raise ValueError("Got an empty mask.") # get indices of non-zero filter elements idx = mask.nonzero()[0] if not len(idx): return slice(0) idx_start = idx[0] idx_end = idx[-1] + 1 idx_step = None if len(idx) > 1: # we need to figure out if there is a regular step-size # between elements stepsizes = np.unique(idx[1:] - idx[:-1]) if len(stepsizes) > 1: # multiple step-sizes -> slicing is not possible -> return # orginal filter return mask else: idx_step = stepsizes[0] sl = slice(idx_start, idx_end, idx_step) if __debug__: debug("SPL", "Boolean mask conversion to slice is possible (%s)." % sl) return sl def get_limit_filter(limit, collection): """Create a filter array from a limit definition. Parameters ----------- limit : None or str or dict If ``None`` all elements wil be included in the filter. If an single attribute name is given, its unique values will be used to define chunks of data that are marked in the filter as unique integers. Finally, if a dictionary is provided, its keys define attribute names and its values (single value or sequence thereof) attribute value, where all key-value combinations across all given items define a "selection" of elements to be included in the filter (OR combination). collection : Collection Dataset attribute collection instance that contains all attributes referenced in the limit specification, as well as defines the shape of the filter. Returns ------- array This array is either boolean, where a `True` elements represent including in the filter, or the array is numerical, where it unqiue integer values defines individual chunks of a filter. """ attr_length = collection.attr_length if limit is None: # no limits limit_filter = np.ones(attr_length, dtype='bool') elif isinstance(limit, str): # use the unique values of this attribute to permute each chunk # individually lattr = collection[limit] lattr_data = lattr.value limit_filter = np.zeros(attr_length, dtype='int') for i, uv in enumerate(lattr.unique): limit_filter[lattr_data == uv] = i elif isinstance(limit, dict): limit_filter = np.zeros(attr_length, dtype='bool') for a in limit: if is_sequence_type(limit[a]): for v in limit[a]: # enable the samples matching the value 'v' of the # current limit attribute 'a' limit_filter[collection[a].value == v] = True else: limit_filter[collection[a].value == limit[a]] = True else: raise RuntimeError("Unhandle condition") return limit_filter def get_nelements_per_value(data): """Returns the number of elements per unique value of some sequence. Parameters ---------- data : sequence This can be any sequence. In addition also ArrayCollectables are supported and this function will make use of any available pre-cached list of unique values. Returns ------- dict with the number of elements (value) per unique value (key) in the sequence. """ if hasattr(data, 'unique'): # if this is an ArrayAttribute save some time by using pre-cached unique # values uniquevalues = data.unique values = data.value else: uniquevalues = np.unique(data) values = data # use dictionary to cope with arbitrary values result = dict(zip(uniquevalues, [ 0 ] * len(uniquevalues))) for l in values: result[l] += 1 return result pymvpa2-2.2.0/mvpa2/misc/transformers.py000066400000000000000000000325341202542755000202010ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Simply functors that transform something.""" _DEV_DOC = """ Follow the convetion that functions start with lower case, and classes with uppercase letter. """ __docformat__ = 'restructuredtext' import numpy as np from mvpa2.base import externals, warning from mvpa2.base.state import ConditionalAttribute, ClassWithCollections if __debug__: from mvpa2.base import debug def Absolute(x): """ Returns the elementwise absolute of any argument. Parameters ---------- x : scalar or sequence """ return np.absolute(x) ##REF: Name was automagically refactored def one_minus(x): """Returns elementwise '1 - x' of any argument.""" return 1 - x def Identity(x): """Return whatever it was called with.""" return x ##REF: Name was automagically refactored def first_axis_mean(x): """Mean computed along the first axis.""" return np.mean(x, axis=0) ##REF: Name was automagically refactored def first_axis_sum_not_zero(x): """Sum computed over first axis of whether the values are not equal to zero.""" return (np.asarray(x)!=0).sum(axis=0) ##REF: Name was automagically refactored def second_axis_mean(x): """Mean across 2nd axis Use cases: - to combine multiple sensitivities to get sense about mean sensitivity across splits """ return np.mean(x, axis=1) def sum_of_abs(x): """Sum of absolute values along the 2nd axis Use cases: - to combine multiple sensitivities to get sense about what features are most influential """ return np.abs(x).sum() def max_of_abs(x): """Max of absolute values along the 2nd axis """ return np.abs(x).max() ##REF: Name was automagically refactored def grand_mean(x): """Just what the name suggests.""" return np.mean(x) ##REF: Name was automagically refactored def l2_normed(x, norm=1.0, reverse=False): """Norm the values so that regular vector norm becomes `norm` More verbose: Norm that the sum of the squared elements of the returned vector becomes `norm`. """ xnorm = np.linalg.norm(x) return x * (norm/xnorm) ##REF: Name was automagically refactored def l1_normed(x, norm=1.0, reverse=False): """Norm the values so that L_1 norm (sum|x|) becomes `norm`""" xnorm = np.sum(np.abs(x)) return x * (norm/xnorm) ##REF: Name was automagically refactored def rank_order(x, reverse=False): """Rank-order by value. Highest gets 0""" # XXX was Yarik on drugs? please simplify this beast nelements = len(x) indexes = np.arange(nelements) t_indexes = indexes if not reverse: t_indexes = indexes[::-1] tosort = zip(x, indexes) tosort.sort() ztosort = zip(tosort, t_indexes) rankorder = np.empty(nelements, dtype=int) rankorder[ [x[0][1] for x in ztosort] ] = \ [x[1] for x in ztosort] return rankorder ##REF: Name was automagically refactored def reverse_rank_order(x): """Convinience functor""" return rank_order(x, reverse=True) class OverAxis(object): """Helper to apply transformer over specific axis """ def __init__(self, transformer, axis=None): """Initialize transformer wrapper with an axis. Parameters ---------- transformer A callable to be used axis : None or int If None -- apply transformer across all the data. If some int -- over that axis """ self.transformer = transformer # sanity check if not (axis is None or isinstance(axis, int)): raise ValueError, "axis must be specified by integer" self.axis = axis def __call__(self, x, *args, **kwargs): transformer = self.transformer axis = self.axis if axis is None: return transformer(x, *args, **kwargs) x = np.asanyarray(x) shape = x.shape if axis >= len(shape): raise ValueError, "Axis given in constructor %d is higher " \ "than dimensionality of the data of shape %s" % (axis, shape) # WRONG! ;-) #for ind in xrange(shape[axis]): # results.append(transformer(x.take([ind], axis=axis), # *args, **kwargs)) # TODO: more elegant/speedy solution? shape_sweep = shape[:axis] + shape[axis+1:] shrinker = None """Either transformer reduces the dimensionality of the data""" #results = np.empty(shape_out, dtype=x.dtype) for index_sweep in np.ndindex(shape_sweep): if axis > 0: index = index_sweep[:axis] else: index = () index = index + (slice(None),) + index_sweep[axis:] x_sel = x[index] x_t = transformer(x_sel, *args, **kwargs) if shrinker is None: if np.isscalar(x_t) or x_t.shape == shape_sweep: results = np.empty(shape_sweep, dtype=x.dtype) shrinker = True elif x_t.shape == x_sel.shape: results = np.empty(x.shape, dtype=x.dtype) shrinker = False else: raise RuntimeError, 'Not handled by OverAxis kind of transformer' if shrinker: results[index_sweep] = x_t else: results[index] = x_t return results class DistPValue(ClassWithCollections): """Converts values into p-values under vague and non-scientific assumptions """ nulldist_number = ConditionalAttribute(enabled=True, doc="Number of features within the estimated null-distribution") positives_recovered = ConditionalAttribute(enabled=True, doc="Number of features considered to be positives and which were recovered") def __init__(self, sd=0, distribution='rdist', fpp=None, nbins=400, **kwargs): """L2-Norm the values, convert them to p-values of a given distribution. Parameters ---------- sd : int Samples dimension (if len(x.shape)>1) on which to operate distribution : string Which distribution to use. Known are: 'rdist' (later normal should be there as well) fpp : float At what p-value (both tails) if not None, to control for false positives. It would iteratively prune the tails (tentative real positives) until empirical p-value becomes less or equal to numerical. nbins : int Number of bins for the iterative pruning of positives WARNING: Highly experimental/slow/etc: no theoretical grounds have been presented in any paper, nor proven """ externals.exists('scipy', raise_=True) ClassWithCollections.__init__(self, **kwargs) self.sd = sd if not (distribution in ['rdist']): raise ValueError, "Actually only rdist supported at the moment" \ " got %s" % distribution self.distribution = distribution self.fpp = fpp self.nbins = nbins def __call__(self, x): from mvpa2.support.stats import scipy import scipy.stats as stats # some local bindings distribution = self.distribution sd = self.sd fpp = self.fpp nbins = self.nbins x = np.asanyarray(x) shape_orig = x.shape ndims = len(shape_orig) # (very) old numpy had different format of returned bins -- # there were not edges but center points. We care here about # center points, so we will transform edge points into center # points for newer versions of numpy numpy_center_points = externals.versions['numpy'] < (1, 1) # XXX May be just utilize OverAxis transformer? if ndims > 2: raise NotImplementedError, \ "TODO: add support for more than 2 dimensions" elif ndims == 1: x, sd = x[:, np.newaxis], 0 # lets transpose for convenience if sd == 0: x = x.T # Output p-values of x in null-distribution pvalues = np.zeros(x.shape) nulldist_number, positives_recovered = [], [] # finally go through all data nd = x.shape[1] if __debug__: if nd < x.shape[0]: warning("Number of features in DistPValue lower than number of" " items -- may be incorrect sd=%d was provided" % sd) for i, xx in enumerate(x): dist = stats.rdist(nd-1, 0, 1) xx /= np.linalg.norm(xx) if fpp is not None: if __debug__: debug('TRAN_', "starting adaptive adjustment i=%d" % i) # Adaptive adjustment for false negatives: Nxx, xxx, pN_emp_prev = len(xx), xx, 1.0 Nxxx = Nxx indexes = np.arange(Nxx) """What features belong to Null-distribution""" while True: hist, bins = np.histogram(xxx, bins=nbins, normed=False) pdf = hist.astype(float)/Nxxx if not numpy_center_points: # if we obtain edge points for bins -- take centers bins = 0.5 * (bins[0:-1] + bins[1:]) bins_halfstep = (bins[1] - bins[2])/2.0 # theoretical CDF # was really unstable -- now got better ;) dist_cdf = dist.cdf(bins) # otherwise just recompute manually # dist_pdf = dist.pdf(bins) # dist_pdf /= np.sum(dist_pdf) # XXX can't recall the function... silly # probably could use np.integrate cdf = np.zeros(nbins, dtype=float) #dist_cdf = cdf.copy() dist_prevv = cdf_prevv = 0.0 for j in range(nbins): cdf_prevv = cdf[j] = cdf_prevv + pdf[j] #dist_prevv = dist_cdf[j] = dist_prevv + dist_pdf[j] # what bins fall into theoretical 'positives' in both tails p = (0.5 - np.abs(dist_cdf - 0.5) < fpp/2.0) # amount in empirical tails -- if we match theoretical, we # should have total >= p pN_emp = np.sum(pdf[p]) # / (1.0 * nbins) if __debug__: debug('TRAN_', "empirical p=%.3f for theoretical p=%.3f" % (pN_emp, fpp)) if pN_emp <= fpp: # we are done break if pN_emp > pN_emp_prev: if __debug__: debug('TRAN_', "Diverging -- thus keeping last result " "with p=%.3f" % pN_emp_prev) # we better restore previous result indexes, xxx, dist = indexes_prev, xxx_prev, dist_prev break pN_emp_prev = pN_emp # very silly way for now -- just proceed by 1 bin keep = np.logical_and(xxx > bins[0], # + bins_halfstep, xxx < bins[-1]) # - bins_halfstep) if __debug__: debug('TRAN_', "Keeping %d out of %d elements" % (np.sum(keep), Nxxx)) # Preserve them if we need to "roll back" indexes_prev, xxx_prev, dist_prev = indexes, xxx, dist # we should remove those which we assume to be positives and # which should not belong to Null-dist xxx, indexes = xxx[keep], indexes[keep] # L2 renorm it xxx = xxx / np.linalg.norm(xxx) Nxxx = len(xxx) dist = stats.rdist(Nxxx-1, 0, 1) Nindexes = len(indexes) Nrecovered = Nxx - Nindexes nulldist_number += [Nindexes] positives_recovered += [Nrecovered] if __debug__: if distribution == 'rdist': assert(dist.args[0] == Nindexes-1) debug('TRAN', "Positives recovery finished with %d out of %d " "entries in Null-distribution, thus %d positives " "were recovered" % (Nindexes, Nxx, Nrecovered)) # And now we need to perform our duty -- assign p-values #dist = stats.rdist(Nindexes-1, 0, 1) pvalues[i, :] = dist.cdf(xx) # XXX we might add an option to transform it to z-scores? result = pvalues # charge conditional attributes # XXX might want to populate them for non-adaptive handling as well self.ca.nulldist_number = nulldist_number self.ca.positives_recovered = positives_recovered # transpose if needed if sd == 0: result = result.T return result pymvpa2-2.2.0/mvpa2/misc/vproperty.py000066400000000000000000000022041202542755000175150ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """C++-like virtual properties""" __docformat__ = 'restructuredtext' class VProperty(object): """Provides "virtual" property: uses derived class's method """ def __init__(self, fget=None, fset=None, fdel=None, doc=''): """ Parameters are the same as of generic `property`. """ for attr in ('fget', 'fset'): func = locals()[attr] if callable(func): setattr(self, attr, func.func_name) setattr(self, '__doc__', doc) def __get__(self, obj=None, type=None): if not obj: return 'property' if self.fget: return getattr(obj, self.fget)() def __set__(self, obj, arg): if self.fset: return getattr(obj, self.fset)(arg) pymvpa2-2.2.0/mvpa2/suite.py000066400000000000000000000242701202542755000156500ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """MultiVariate Pattern Analysis -- load helper If you don't like to specify exact location of any particular functionality within PyMVPA, please simply:: from mvpa2.suite import * or import mvpa2.suite """ __docformat__ = 'restructuredtext' from mvpa2 import * if __debug__ and 'SUITE' in debug.active: __sdebug = lambda msg: debug('SUITE', "%s" % msg) else: __sdebug = lambda *args: None __sdebug.__doc__ = "Shortcut to output debug messages for suite imports" __sdebug('base') from mvpa2.base import * from mvpa2.base.attributes import * from mvpa2.base.collections import * from mvpa2.base.config import * from mvpa2.base.dataset import * from mvpa2.base.externals import * from mvpa2.base.info import * from mvpa2.base.types import * from mvpa2.base.verbosity import * from mvpa2.base.param import * from mvpa2.base.state import * from mvpa2.base.node import * from mvpa2.base.learner import * __sdebug('h5py') if externals.exists('h5py'): from mvpa2.base.hdf5 import * __sdebug('reportlab') if externals.exists('reportlab'): from mvpa2.base.report import * else: from mvpa2.base.report_dummy import Report __sdebug('algorithms') from mvpa2.algorithms.hyperalignment import * __sdebug('clfs') from mvpa2 import clfs __sdebug('clfs distance') from mvpa2.clfs.distance import * __sdebug('clfs base') from mvpa2.clfs.base import * __sdebug('clfs meta') from mvpa2.clfs.meta import * __sdebug('clfs kNN') from mvpa2.clfs.knn import * __sdebug('clfs lars') if externals.exists('lars'): from mvpa2.clfs.lars import * __sdebug('clfs enet') if externals.exists('elasticnet'): from mvpa2.clfs.enet import * __sdebug('clfs glmnet') if externals.exists('glmnet'): from mvpa2.clfs.glmnet import * __sdebug('clfs skl') if externals.exists('skl'): if externals.versions['skl'] >= '0.9': import sklearn as skl else: import scikits.learn as skl from mvpa2.clfs.skl import * __sdebug('clfs smlr') from mvpa2.clfs.smlr import * from mvpa2.clfs.blr import * from mvpa2.clfs.gnb import * from mvpa2.clfs.stats import * from mvpa2.clfs.similarity import * if externals.exists('libsvm') or externals.exists('shogun'): __sdebug('clfs svm') from mvpa2.clfs.svm import * from mvpa2.clfs.transerror import * __sdebug('clfs warehouse') from mvpa2.clfs.warehouse import * __sdebug('kernels') from mvpa2 import kernels from mvpa2.kernels.base import * from mvpa2.kernels.np import * if externals.exists('libsvm'): from mvpa2.kernels.libsvm import * if externals.exists('shogun'): from mvpa2.kernels.sg import * __sdebug('datasets') from mvpa2 import datasets from mvpa2.datasets import * # just to make testsuite happy from mvpa2.datasets.base import * from mvpa2.datasets.formats import * from mvpa2.datasets.miscfx import * from mvpa2.datasets.eep import * from mvpa2.datasets.eventrelated import * if externals.exists('nibabel') : from mvpa2.datasets.mri import * from mvpa2.datasets.sources import * __sdebug('generators') from mvpa2.generators.base import * from mvpa2.generators.partition import * from mvpa2.generators.splitters import * from mvpa2.generators.permutation import * from mvpa2.generators.resampling import * __sdebug('featsel') from mvpa2 import featsel from mvpa2.featsel.base import * from mvpa2.featsel.helpers import * from mvpa2.featsel.ifs import * from mvpa2.featsel.rfe import * __sdebug('mappers') from mvpa2 import mappers #from mvpa2.mappers import * from mvpa2.mappers.base import * from mvpa2.mappers.slicing import * from mvpa2.mappers.flatten import * from mvpa2.mappers.shape import * from mvpa2.mappers.prototype import * from mvpa2.mappers.projection import * from mvpa2.mappers.svd import * from mvpa2.mappers.procrustean import * from mvpa2.mappers.boxcar import * from mvpa2.mappers.fx import * from mvpa2.mappers.fxy import * from mvpa2.mappers.som import * from mvpa2.mappers.zscore import * if externals.exists('scipy'): from mvpa2.mappers.detrend import * from mvpa2.mappers.filters import * if externals.exists('mdp'): from mvpa2.mappers.mdp_adaptor import * if externals.exists('mdp ge 2.4'): from mvpa2.mappers.lle import * __sdebug('measures') from mvpa2 import measures from mvpa2.measures.anova import * if externals.exists('statsmodels'): from mvpa2.measures.statsmodels_adaptor import * from mvpa2.measures.irelief import * from mvpa2.measures.base import * from mvpa2.measures.noiseperturbation import * from mvpa2.misc.neighborhood import * from mvpa2.measures.searchlight import * from mvpa2.measures.gnbsearchlight import * from mvpa2.measures.nnsearchlight import * from mvpa2.measures.corrstability import * __sdebug('misc') from mvpa2.support.copy import * from mvpa2.misc.fx import * from mvpa2.misc.attrmap import * from mvpa2.misc.errorfx import * from mvpa2.misc.cmdline import * from mvpa2.misc.data_generators import * from mvpa2.misc.exceptions import * from mvpa2.misc import * from mvpa2.misc.io import * from mvpa2.misc.io.base import * from mvpa2.misc.io.meg import * if externals.exists('cPickle') and externals.exists('gzip'): from mvpa2.misc.io.hamster import * from mvpa2.misc.fsl import * from mvpa2.misc.bv import * from mvpa2.misc.bv.base import * from mvpa2.misc.support import * from mvpa2.misc.transformers import * from mvpa2.misc.dcov import dCOV, dcorcoef __sdebug("nibabel") if externals.exists("nibabel"): from mvpa2.misc.fsl.melodic import * if externals.exists("pylab"): from mvpa2.misc.plot import * from mvpa2.misc.plot.erp import * if externals.exists(['griddata', 'scipy']): from mvpa2.misc.plot.topo import * from mvpa2.misc.plot.lightbox import plot_lightbox __sdebug("scipy dependents") if externals.exists("scipy"): from mvpa2.support.stats import scipy from mvpa2.measures.corrcoef import * from mvpa2.measures.ds import * from mvpa2.clfs.ridge import * from mvpa2.clfs.plr import * from mvpa2.misc.stats import * from mvpa2.clfs.gpr import * from mvpa2.support.nipy import * __sdebug("mappers wavelet") if externals.exists("pywt"): from mvpa2.mappers.wavelet import * __sdebug("pylab") if externals.exists("pylab"): import pylab as pl __sdebug("atlases") if externals.exists("lxml") and externals.exists("nibabel"): from mvpa2.atlases import * __sdebug("ipython goodies") if externals.exists("running ipython env"): from mvpa2.support.ipython import * ipy_activate_pymvpa_goodies() def suite_stats(): """Return cruel dict of things which evil suite provides """ glbls = globals() import types # Compatibility layer for Python3 try: from io import FileIO as BuiltinFileType except ImportError: BuiltinFileType = types.FileType try: from types import ClassType as OldStyleClassType except ImportError: OldStyleClassType = type(None) def _get_path(e): """Figure out basic path for the beast... probably there is already smth which could do that for me """ if str(e).endswith('(built-in)>'): return "BUILTIN" if hasattr(e, '__file__'): return e.__file__ elif hasattr(e, '__path__'): return e.__path__[0] elif hasattr(e, '__module__'): if isinstance(e.__module__, str): return e.__module__ else: return _get_path(e.__module__) elif hasattr(e, '__class__'): return _get_path(e.__class__) else: raise RuntimeError, "Could not figure out path for %s" % e class EnvironmentStatistics(dict): def __init__(self, d): dict.__init__(self, foreign={}) # compute cruel stats mvpa_str = '%smvpa' % os.path.sep for k, e in d.iteritems(): found = False for ty, tk, check_path in ( (list, "lists", False), (str, "strings", False), (unicode, "strings", False), (BuiltinFileType, "files", False), (types.BuiltinFunctionType, None, True), (types.BuiltinMethodType, None, True), (types.ModuleType, "modules", True), (OldStyleClassType, "classes", True), (type, "types", True), (types.LambdaType, "functions", True), (object, "objects", True), ): if isinstance(e, ty): found = True if tk is None: break if not tk in self: self[tk] = {} if check_path: mpath = _get_path(e) if mvpa_str in mpath or mpath.startswith('mvpa2.'): self[tk][k] = e else: self['foreign'][k] = e else: self[tk][k] = e break if not found: raise ValueError, \ "Could not figure out placement for %s %s" % (k, e) def __str__(self): s = "" for k in sorted(self.keys()): s += "\n%s [%d entries]:" % (k, len(self[k])) for i in sorted(self[k].keys()): s += "\n %s" % i # Lets extract first line in doc try: doc = self[k][i].__doc__.strip() try: ind = doc.index('\n') except: ind = 1000 s+= ": " + doc[:min(ind, 80)] except: pass return s return EnvironmentStatistics(globals()) __sdebug("THE END of mvpa2.suite imports") pymvpa2-2.2.0/mvpa2/support/000077500000000000000000000000001202542755000156545ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/support/__init__.py000066400000000000000000000014561202542755000177730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for PyMVPA support modules mvpa2.support is destined to contain temporary "fixes" to external modules (Python, scipy), which are known to be fixed in the recent releases but are not present in comodity distributions. Example could be copy module.""" __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.support start') debug('INIT', 'mvpa2.support end') pymvpa2-2.2.0/mvpa2/support/_copy.py000066400000000000000000000253641202542755000173510ustar00rootroot00000000000000"""Generic (shallow and deep) copying operations. Interface summary: import copy x = copy.copy(y) # make a shallow copy of y x = copy.deepcopy(y) # make a deep copy of y For module specific errors, copy.Error is raised. The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances). - A shallow copy constructs a new compound object and then (to the extent possible) inserts *the same objects* into it that the original contains. - A deep copy constructs a new compound object and then, recursively, inserts *copies* into it of the objects found in the original. Two problems often exist with deep copy operations that don't exist with shallow copy operations: a) recursive objects (compound objects that, directly or indirectly, contain a reference to themselves) may cause a recursive loop b) because deep copy copies *everything* it may copy too much, e.g. administrative data structures that should be shared even between copies Python's deep copy operation avoids these problems by: a) keeping a table of objects already copied during the current copying pass b) letting user-defined classes override the copying operation or the set of components copied This version does not copy types like module, class, function, method, nor stack trace, stack frame, nor file, socket, window, nor array, nor any similar types. Classes can use the same interfaces to control copying that they use to control pickling: they can define methods called __getinitargs__(), __getstate__() and __setstate__(). See the documentation for module "pickle" for information on these methods. """ import types from copy_reg import dispatch_table class Error(Exception): pass error = Error # backward compatibility try: from org.python.core import PyStringMap except ImportError: PyStringMap = None __all__ = ["Error", "copy", "deepcopy"] def copy(x): """Shallow copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ cls = type(x) copier = _copy_dispatch.get(cls) if copier: return copier(x) copier = getattr(cls, "__copy__", None) if copier: return copier(x) reductor = dispatch_table.get(cls) if reductor: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) if reductor: rv = reductor(2) else: reductor = getattr(x, "__reduce__", None) if reductor: rv = reductor() else: raise Error("un(shallow)copyable object of type %s" % cls) return _reconstruct(x, rv, 0) _copy_dispatch = d = {} def _copy_immutable(x): return x for t in (type(None), int, long, float, bool, str, tuple, frozenset, type, xrange, types.ClassType, types.BuiltinFunctionType, type(Ellipsis), types.FunctionType): d[t] = _copy_immutable for name in ("ComplexType", "UnicodeType", "CodeType"): t = getattr(types, name, None) if t is not None: d[t] = _copy_immutable def _copy_with_constructor(x): return type(x)(x) for t in (list, dict, set): d[t] = _copy_with_constructor def _copy_with_copy_method(x): return x.copy() if PyStringMap is not None: d[PyStringMap] = _copy_with_copy_method def _copy_inst(x): if hasattr(x, '__copy__'): return x.__copy__() if hasattr(x, '__getinitargs__'): args = x.__getinitargs__() y = x.__class__(*args) else: y = _EmptyClass() y.__class__ = x.__class__ if hasattr(x, '__getstate__'): state = x.__getstate__() else: state = x.__dict__ if hasattr(y, '__setstate__'): y.__setstate__(state) else: y.__dict__.update(state) return y d[types.InstanceType] = _copy_inst del d def deepcopy(x, memo=None, _nil=[]): """Deep copy operation on arbitrary Python objects. See the module's __doc__ string for more info. """ if memo is None: memo = {} d = id(x) y = memo.get(d, _nil) if y is not _nil: return y cls = type(x) copier = _deepcopy_dispatch.get(cls) if copier: y = copier(x, memo) else: try: issc = issubclass(cls, type) except TypeError: # cls is not a class (old Boost; see SF #502085) issc = 0 if issc: y = _deepcopy_atomic(x, memo) else: copier = getattr(x, "__deepcopy__", None) if copier: y = copier(memo) else: reductor = dispatch_table.get(cls) if reductor: rv = reductor(x) else: reductor = getattr(x, "__reduce_ex__", None) if reductor: rv = reductor(2) else: reductor = getattr(x, "__reduce__", None) if reductor: rv = reductor() else: raise Error( "un(deep)copyable object of type %s" % cls) y = _reconstruct(x, rv, 1, memo) memo[d] = y _keep_alive(x, memo) # Make sure x lives at least as long as d return y _deepcopy_dispatch = d = {} def _deepcopy_atomic(x, memo): return x d[type(None)] = _deepcopy_atomic d[type(Ellipsis)] = _deepcopy_atomic d[int] = _deepcopy_atomic d[long] = _deepcopy_atomic d[float] = _deepcopy_atomic d[bool] = _deepcopy_atomic try: d[complex] = _deepcopy_atomic except NameError: pass d[str] = _deepcopy_atomic try: d[unicode] = _deepcopy_atomic except NameError: pass try: d[types.CodeType] = _deepcopy_atomic except AttributeError: pass d[type] = _deepcopy_atomic d[xrange] = _deepcopy_atomic d[types.ClassType] = _deepcopy_atomic d[types.BuiltinFunctionType] = _deepcopy_atomic d[types.FunctionType] = _deepcopy_atomic def _deepcopy_list(x, memo): y = [] memo[id(x)] = y for a in x: y.append(deepcopy(a, memo)) return y d[list] = _deepcopy_list def _deepcopy_tuple(x, memo): y = [] for a in x: y.append(deepcopy(a, memo)) d = id(x) try: return memo[d] except KeyError: pass for i in range(len(x)): if x[i] is not y[i]: y = tuple(y) break else: y = x memo[d] = y return y d[tuple] = _deepcopy_tuple def _deepcopy_dict(x, memo): y = {} memo[id(x)] = y for key, value in x.iteritems(): y[deepcopy(key, memo)] = deepcopy(value, memo) return y d[dict] = _deepcopy_dict if PyStringMap is not None: d[PyStringMap] = _deepcopy_dict def _keep_alive(x, memo): """Keeps a reference to the object x in the memo. Because we remember objects by their id, we have to assure that possibly temporary objects are kept alive by referencing them. We store a reference at the id of the memo, which should normally not be used unless someone tries to deepcopy the memo itself... """ try: memo[id(memo)].append(x) except KeyError: # aha, this is the first one :-) memo[id(memo)]=[x] def _deepcopy_inst(x, memo): if hasattr(x, '__deepcopy__'): return x.__deepcopy__(memo) if hasattr(x, '__getinitargs__'): args = x.__getinitargs__() args = deepcopy(args, memo) y = x.__class__(*args) else: y = _EmptyClass() y.__class__ = x.__class__ memo[id(x)] = y if hasattr(x, '__getstate__'): state = x.__getstate__() else: state = x.__dict__ state = deepcopy(state, memo) if hasattr(y, '__setstate__'): y.__setstate__(state) else: y.__dict__.update(state) return y d[types.InstanceType] = _deepcopy_inst def _reconstruct(x, info, deep, memo=None): if isinstance(info, str): return x assert isinstance(info, tuple) if memo is None: memo = {} n = len(info) assert n in (2, 3, 4, 5) callable, args = info[:2] if n > 2: state = info[2] else: state = {} if n > 3: listiter = info[3] else: listiter = None if n > 4: dictiter = info[4] else: dictiter = None if deep: args = deepcopy(args, memo) y = callable(*args) memo[id(x)] = y if listiter is not None: for item in listiter: if deep: item = deepcopy(item, memo) y.append(item) if dictiter is not None: for key, value in dictiter: if deep: key = deepcopy(key, memo) value = deepcopy(value, memo) y[key] = value if state: if deep: state = deepcopy(state, memo) if hasattr(y, '__setstate__'): y.__setstate__(state) else: if isinstance(state, tuple) and len(state) == 2: state, slotstate = state else: slotstate = None if state is not None: y.__dict__.update(state) if slotstate is not None: for key, value in slotstate.iteritems(): setattr(y, key, value) return y del d del types # Helper for instance creation without calling __init__ class _EmptyClass: pass def _test(): l = [None, 1, 2L, 3.14, 'xyzzy', (1, 2L), [3.14, 'abc'], {'abc': 'ABC'}, (), [], {}] l1 = copy(l) print l1==l l1 = map(copy, l) print l1==l l1 = deepcopy(l) print l1==l class C: def __init__(self, arg=None): self.a = 1 self.arg = arg if __name__ == '__main__': import sys file = sys.argv[0] else: file = __file__ self.fp = open(file) self.fp.close() def __getstate__(self): return {'a': self.a, 'arg': self.arg} def __setstate__(self, state): for key, value in state.iteritems(): setattr(self, key, value) def __deepcopy__(self, memo=None): new = self.__class__(deepcopy(self.arg, memo)) new.a = self.a return new c = C('argument sketch') l.append(c) l2 = copy(l) print l == l2 print l print l2 l2 = deepcopy(l) print l == l2 print l print l2 l.append({l[1]: l, 'xyz': l[2]}) l3 = copy(l) import repr print map(repr.repr, l) print map(repr.repr, l1) print map(repr.repr, l2) print map(repr.repr, l3) l3 = deepcopy(l) import repr print map(repr.repr, l) print map(repr.repr, l1) print map(repr.repr, l2) print map(repr.repr, l3) if __name__ == '__main__': _test() pymvpa2-2.2.0/mvpa2/support/_emp_null.py000066400000000000000000000420001202542755000201740ustar00rootroot00000000000000""" this module contains a class that fits a gaussian model to the central part of an histogram, following schwartzman et al, 2009. This is typically necessary to estimate a fdr when one is not certain that the data behaves as a standard normal under H_0. Author : Bertrand Thirion, 2008-2009 """ import numpy as np from numpy.linalg import pinv import scipy.stats as st class FDR(object): """ This is the basic class to handle false discovery rate computation parameter: fdr.x the samples from which the fdr is derived x is assumed to be a normal variate The Benjamini-Horchberg procedure is used """ def __init__(self, x): """ x is assumed to be a 1-d array """ self.x = np.squeeze(x) def all_fdr(self, x=None, verbose=0): """ Returns all the FDR (false discovery rates) values for the sample x Parameters ----------- x : ndarray of shape (n) The normal variates Results ------- fdr : ndarray of shape (n) The set of all FDRs """ if x==None:x=self.x pvals = st.norm.sf(x) return(self.all_fdr_from_pvals(pvals,verbose)) def all_fdr_from_pvals(self, pv, verbose=0): """ Returns the fdr associated with each the values Parameters ----------- pv : ndarray of shape (n) The samples p-value Returns -------- q : array of shape(n) The corresponding fdrs """ pv = self.check_pv(pv) if pv==None: pv = self.pv n = np.size(pv) isx = np.argsort(pv) q = np.zeros(n) for ip in range(n): q[isx[ip]] = np.minimum(1, np.maximum(n*pv[isx[ip]]/(ip+1), q[isx[ip]])) if (ip1: print pv.max() raise ValueError, "P-values greater than 1!" return pv def pth_from_pvals(self, pv, alpha=0.05): """ Given a set pv of p-values, returns the critical p-value associated with an FDR alpha Parameters ----------- alpha : float The desired FDR significance pv : array of shape (n) The samples p-value Returns ------- pth: float The p value corresponding to the FDR alpha """ pv = self.check_pv(pv) npv = np.size(pv) pcorr = alpha/npv spv = np.sort(pv) ip = 0 pth = 0. while (spv[ip]0 hist = hist[whist] medge = medge[whist] hist = hist.astype('f') # fit the histogram DMtx = np.ones((3, np.sum(whist))) DMtx[1] = medge DMtx[2] = medge**2 coef = np.dot(np.log(hist), pinv(DMtx)) sqsigma = -1.0/(2*coef[2]) mu = coef[1]*sqsigma lp0 = (coef[0]- np.log(step*self.n) + 0.5*np.log(2*np.pi*sqsigma) + mu**2/(2*sqsigma)) self.mu = mu self.p0 = min(1, np.exp(lp0)) self.sigma = np.sqrt(sqsigma) self.sqsigma = sqsigma def fdrcurve(self): """ Returns the fdr associated with any point of self.x """ import scipy.stats as st if self.learned==0: self.learn() efp = ( self.p0*st.norm.sf(self.x, self.mu, self.sigma) *self.n/np.arange(self.n,0,-1)) efp = np.minimum(efp, 1) return efp def threshold(self, alpha=0.05, verbose=0): """ Compute the threshold correponding to an alpha-level fdr for x Parameters ----------- alpha : float, optional the chosen false discovery rate threshold. verbose : boolean, optional the verbosity level, if True a plot is generated. Results -------- theta: float the critical value associated with the provided fdr """ efp = self.fdrcurve() if verbose: self.plot(efp, alpha) if efp[-1] > alpha: print "the maximal value is %f , the corresponding fdr is %f " \ % (self.x[-1], efp[-1]) return np.infty j = np.argmin(efp[::-1] < alpha) + 1 return 0.5*(self.x[-j] + self.x[-j+1]) def uncorrected_threshold(self, alpha=0.001, verbose=0): """ Compute the threshold correponding to a specificity alpha for x Parameters ----------- alpha : float, optional the chosen false discovery rate threshold. verbose : boolean, optional the verbosity level, if True a plot is generated. Results -------- theta: float the critical value associated with the provided p-value """ if self.learned==0: self.learn() threshold = st.norm.isf(alpha, self.mu, self.sigma) if not np.isfinite(threshold): threshold = np.inf if verbose: self.plot() return threshold def fdr(self,theta): """ given a threshold theta, find the estimated fdr """ import scipy.stats as st if self.learned==0: self.learn() efp = self.p0*st.norm.sf(theta,self.mu,self.sigma)\ *float(self.n)/np.sum(self.x>theta) efp = np.minimum(efp,1) return efp def plot(self, efp=None, alpha=0.05, bar=1, mpaxes=None): """ plot the histogram of x Parameters ------------ efp : float, optional The empirical fdr (corresponding to x) if efp==None, the false positive rate threshod plot is not drawn. alpha : float, optional The chosen fdr threshold bar=1 : bool, optional mpaxes=None: if not None, handle to an axes where the fig. will be drawn. Avoids creating unnecessarily new figures. """ if not self.learned: self.learn() n = np.size(self.x) bins = max(10, int(2*np.exp(np.log(n)/3.))) hist, ledge = np.histogram(self.x, bins=bins) hist = hist.astype('f')/hist.sum() step = ledge[1]-ledge[0] medge = ledge + 0.5*step import scipy.stats as st g = self.p0*st.norm.pdf(medge, self.mu, self.sigma) hist /= step import matplotlib.pylab as mp if mpaxes==None: mp.figure() ax = mp.subplot(1,1,1) else: ax = mpaxes if bar: # We need to cut ledge to len(hist) to accomodate for pre and # post numpy 1.3 hist semantic change. ax.bar(ledge[:len(hist)], hist, step) else: ax.plot(medge[:len(hist)], hist, linewidth=2) ax.plot(medge, g, 'r', linewidth=2) ax.set_title('Robust fit of the histogram', fontsize=16) l = ax.legend(('empiricall null', 'data'), loc=0) for t in l.get_texts(): t.set_fontsize(16) ax.set_xticklabels(ax.get_xticks(), fontsize=16) ax.set_yticklabels(ax.get_yticks(), fontsize=16) if efp != None: ax.plot(self.x, np.minimum(alpha, efp), 'k') def three_classes_GMM_fit(x, test=None, alpha=0.01, prior_strength=100, verbose=0, fixed_scale=False, mpaxes=None, bias=0, theta=0, return_estimator=False): """ Fit the data with a 3-classes Gaussian Mixture Model, i.e. computing some probability that the voxels of a certain map are in class disactivated, null or active Parameters ---------- x array of shape (nvox,1): the map to be analysed test=None array of shape(nbitems,1): the test values for which the p-value needs to be computed by default, test=x alpha = 0.01 the prior weights of the positive and negative classes prior_strength = 100 the confidence on the prior (should be compared to size(x)) verbose=0 : verbosity mode fixed_scale = False, boolean, variance parameterization if True, the variance is locked to 1 otherwise, it is estimated from the data mpaxes=None: axes handle used to plot the figure in verbose mode if None, new axes are created bias = 0: allows a recaling of the posterior probability that takes into account the thershold theta. Not rigorous. theta = 0 the threshold used to correct the posterior p-values when bias=1; normally, it is such that test>theta note that if theta = -np.infty, the method has a standard behaviour return_estimator: boolean, optional If return_estimator is true, the estimator object is returned. Results ------- bfp : array of shape (nbitems,3): the posterior probability of each test item belonging to each component in the GMM (sum to 1 across the 3 classes) if np.size(test)==0, i.e. nbitem==0, None is returned estimator : nipy.neurospin.clustering.GMM object The estimator object, returned only if return_estimator is true. Note ---- Our convention is that - class 1 represents the negative class - class 2 represenst the null class - class 3 represents the positsive class """ nvox = np.size(x) x = np.reshape(x,(nvox,1)) if test==None: test = x if np.size(test)==0: return None from nipy.neurospin.clustering.bgmm import VBGMM from nipy.neurospin.clustering.gmm import grid_descriptor sx = np.sort(x,0) nclasses=3 # set the priors from a reasonable model of the data (!) # prior means mb0 = np.mean(sx[:alpha*nvox]) mb2 = np.mean(sx[(1-alpha)*nvox:]) prior_means = np.reshape(np.array([mb0,0,mb2]),(nclasses,1)) if fixed_scale: prior_scale = np.ones((nclasses,1,1)) * 1./(prior_strength) else: prior_scale = np.ones((nclasses,1,1)) * 1./(prior_strength*np.var(x)) prior_dof = np.ones(nclasses) * prior_strength prior_weights = np.array([alpha,1-2*alpha,alpha]) * prior_strength prior_shrinkage = np.ones(nclasses) * prior_strength # instantiate the class and set the priors BayesianGMM = VBGMM(nclasses,1,prior_means,prior_scale, prior_weights, prior_shrinkage,prior_dof) BayesianGMM.set_priors(prior_means, prior_weights, prior_scale, prior_dof, prior_shrinkage) # estimate the model BayesianGMM.estimate(x,delta = 1.e-8,verbose=verbose) # create a sampling grid if (verbose or bias): gd = grid_descriptor(1) gd.getinfo([x.min(),x.max()],100) gdm = gd.make_grid().squeeze() lj = BayesianGMM.likelihood(gd.make_grid()) # estimate the prior weights bfp = BayesianGMM.likelihood(test) if bias: lw = np.sum(lj[gdm>theta],0) weights = BayesianGMM.weights/(BayesianGMM.weights.sum()) bfp = (lw/weights)*BayesianGMM.slikelihood(test) if verbose>1: BayesianGMM.show_components(x,gd,lj,mpaxes) bfp = (bfp.T/bfp.sum(1)).T if not return_estimator: return bfp else: return bfp, BayesianGMM def Gamma_Gaussian_fit(x, test=None, verbose=0, mpaxes=None, bias=1, gaussian_mix=0, return_estimator=False): """ Computing some prior probabilities that the voxels of a certain map are in class disactivated, null or active uning a gamma-Gaussian mixture Parameters ------------ x: array of shape (nvox,) the map to be analysed test: array of shape (nbitems,), optional the test values for which the p-value needs to be computed by default, test = x verbose: 0, 1 or 2, optional verbosity mode, 0 is quiet, and 2 calls matplotlib to display graphs. mpaxes: matplotlib axes, option. axes handle used to plot the figure in verbose mode if None, new axes are created bias: float, optional lower bound on the gaussian variance (to avoid shrinkage) gaussian_mix: float, optional if nonzero, lower bound on the gaussian mixing weight (to avoid shrinkage) return_estimator: boolean, optional If return_estimator is true, the estimator object is returned. Returns ------- bfp: array of shape (nbitems,3) The probability of each component in the mixture model for each test value estimator: nipy.neurospin.clustering.ggmixture.GGGM object The estimator object, returned only if return_estimator is true. """ from nipy.neurospin.clustering import ggmixture Ggg = ggmixture.GGGM() Ggg.init_fdr(x) Ggg.estimate(x, niter=100, delta=1.e-8, bias=bias, verbose=0, gaussian_mix=gaussian_mix) if verbose>1: # hyper-verbose mode Ggg.show(x, mpaxes=mpaxes) Ggg.parameters() if test is None: test = x test = np.reshape(test, np.size(test)) bfp = np.array(Ggg.posterior(test)).T if return_estimator: return bfp, Ggg return bfp pymvpa2-2.2.0/mvpa2/support/bayes/000077500000000000000000000000001202542755000167575ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/support/bayes/__init__.py000066400000000000000000000006611202542755000210730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Bayes (BayesConfusionHypothesis) support code """ pymvpa2-2.2.0/mvpa2/support/bayes/multivariate_polya.py000066400000000000000000000046521202542755000232520ustar00rootroot00000000000000# emacs: coding: iso-8859-15; -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """PDF of the multivariate Pólya distribution. See: http://en.wikipedia.org/wiki/Multivariate_P%C3%B3lya_distribution """ import numpy as np from scipy.misc import factorial from scipy.special import gamma, gammaln def multivariate_polya(x, alpha): """Multivariate Pólya PDF. Basic implementation. """ x = np.atleast_1d(x).flatten() alpha = np.atleast_1d(alpha).flatten() assert(x.size==alpha.size) N = x.sum() A = alpha.sum() likelihood = factorial(N) * gamma(A) / gamma(N + A) # likelihood = gamma(A) / gamma(N + A) for i in range(len(x)): likelihood /= factorial(x[i]) likelihood *= gamma(x[i] + alpha[i]) / gamma(alpha[i]) return likelihood def log_multivariate_polya_vectorized(X, alpha): """Multivariate Pólya log PDF. Vectorized and stable implementation. """ X = np.atleast_1d(X) alpha = np.atleast_1d(alpha) assert(X.size==alpha.size) N = X.sum() A = alpha.sum() log_likelihood = gammaln(N+1) - gammaln(X+1).sum() # log(\frac{N!}{\prod_i (X_i)!}) log_likelihood += gammaln(A) - gammaln(alpha).sum() # log(\frac{\Gamma(\sum_i alpha_i)}{\prod_i(\Gamma(\alpha_i))}) log_likelihood += gammaln(X + alpha).sum() - gammaln(N + A) # log(\frac{\prod_i(\Gamma(X_i +\alpha_i))}{\Gamma(\sum_i X_i+\alpha_i)}) return log_likelihood if __name__ == '__main__': import numpy as np np.random.seed(0) # x = np.array([1,2,2,1]) # x = np.array([6,0,0,0]) # alpha = np.array([1,1,1,1]) x = np.array([100,0,0]) # x = np.array([0,50,50]) alpha = np.array([1,10,10]) print "x:", x print "alpha:", alpha print "Likelihood:" print "log of the basic formula:", np.log(multivariate_polya(x, alpha)) print "log of the basic vectorized formula:", np.log(multivariate_polya_vectorized(x, alpha)) print "Log-scale stable formula:", log_multivariate_polya_vectorized(x, alpha) print "Monte Carlo estimations in log-scale:" for i in range(5): print "\t", i, log_multivariate_polya_mc(x, alpha, iterations=1e5) pymvpa2-2.2.0/mvpa2/support/bayes/partial_independence.py000066400000000000000000000060141202542755000234670ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Partial independence model: one margin fixed (rows margin). Analytical solution + Monte-Carlo checks. """ import numpy as np from mvpa2.support.bayes.multivariate_polya \ import log_multivariate_polya_vectorized as log_multivariate_polya from mvpa2.base import externals externals.exists('scipy', raise_=True) from scipy.special import gammaln def compute_logp_independent_block(X, alpha=None): """Compute the analytical log likelihood of a matrix under the assumption of independence. """ if alpha is None: alpha = np.ones(X.shape[1]) logp_ib = gammaln(alpha.sum()) - (gammaln(alpha)).sum() logp_ib += gammaln(X.sum(0) + alpha).sum() - gammaln(X.sum() + alpha.sum()) logp_ib += gammaln(X.sum(1) + 1).sum() - gammaln(X + 1).sum() return logp_ib def compute_logp_H(X, psi, alpha=None): """Compute the analytical log likelihood of the confusion matrix X with hyper-prior alpha (in a multivariate-Dirichlet sense) according to a partitioning scheme psi. """ if alpha is None: alpha = np.ones(X.shape) logp_H = 0.0 for group in psi: if len(group) == 1: logp_H += log_multivariate_polya(X[group[0],:], alpha[group[0],:]) else: nogroup = filter(lambda a: a not in group, range(X.shape[1])) logp_H += np.sum([log_multivariate_polya([X[i,group].sum()] + X[i,nogroup].tolist(), [alpha[i,group].sum()] + alpha[i,nogroup].tolist()) for i in group]) logp_H += compute_logp_independent_block(X[np.ix_(group,group)], alpha[np.ix_(group,group)].sum(0)) # should we use sum(0) or mean(0)? or else? return logp_H if __name__ == '__main__': np.random.seed(0) X = np.array([[10,10, 0], [10,10, 0], [ 0, 0,20]]) # X = np.array([[13, 3, 4], # [ 3,14, 3], # [ 4, 3,13]]) # X = np.array([[10, 10, 10, 0, 0], # [10, 10, 10, 0, 0], # [10, 10, 10, 0, 0], # [ 0, 0, 0, 30, 0], # [ 0, 0, 0, 0, 30]], dtype=np.float32) print "X:" print X psi = [[0,1],[2]] # psi = [[0],[1],[2]] # psi = [[0],[1,2]] # psi = [[0,1,2]] # psi = [[0],[1],[2],[3],[4]] # psi = [[0,1],[2],[3],[4]] # psi = [[0,1,2],[3],[4]] # psi = [[0,1,2,3],[4]] # psi = [[0,1,2],[3,4]] # psi = [[0,1,2,3,4]] print "psi:", psi alpha = np.ones(X.shape) print "alpha:" print alpha logp_H = compute_logp_H(X, psi, alpha) print "Analytical estimate:", logp_H pymvpa2-2.2.0/mvpa2/support/bayes/partitioner.py000066400000000000000000000037201202542755000216730ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Generate all partitions of a set. Copyright 2010 Anton Vredegoor License: MIT See http://code.activestate.com/recipes/577211-generate-the-partitions-of-a-set-by-index/ """ from collections import defaultdict class Partition: def __init__(self, S): self.data = list(S) self.m = len(S) self.table = self.rgf_table() def __getitem__(self, i): #generates set partitions by index if i > len(self) - 1: raise IndexError L = self.unrank_rgf(i) result = self.as_set_partition(L) return result def __len__(self): return self.table[self.m,0] def as_set_partition(self, L): # Transform a restricted growth function into a partition n = max(L[1:]+[1]) m = self.m data = self.data P = [[] for _ in range(n)] for i in range(m): P[L[i+1]-1].append(data[i]) return P def rgf_table(self): # Compute the table values m = self.m D = defaultdict(lambda:1) for i in range(1,m+1): for j in range(0,m-i+1): D[i,j] = j * D[i-1,j] + D[i-1,j+1] return D def unrank_rgf(self, r): # Unrank a restricted growth function m = self.m L = [1 for _ in range(m+1)] j = 1 D = self.table for i in range(2,m+1): v = D[m-i,j] cr = j*v if cr <= r: L[i] = j + 1 r -= cr j += 1 else: L[i] = r // v + 1 r %= v return L pymvpa2-2.2.0/mvpa2/support/copy.py000066400000000000000000000015441202542755000172040ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Support for python's copy module. """ __docformat__ = 'restructuredtext' import sys # We have to use deepcopy from python 2.5, since otherwise it fails to # copy sensitivity analyzers with assigned combiners which are just # functions not functors if sys.version_info[:2] >= (2, 6): # enforce absolute import _copy = __import__('copy', globals(), locals(), [], 0) copy = _copy.copy deepcopy = _copy.deepcopy else: from mvpa2.support._copy import copy, deepcopy pymvpa2-2.2.0/mvpa2/support/griddata.py000066400000000000000000000031001202542755000177770ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import griddata with preference to the version from matplotlib """ __docformat__ = 'restructuredtext' import sys from mvpa2.base import externals if externals.exists('griddata', raise_=True): if __debug__: from mvpa2.base import debug try: if sys.version_info[:2] >= (2, 5): # enforce absolute import griddata = __import__('griddata', globals(), locals(), [], 0).griddata else: # little trick to be able to import 'griddata' package (which # has same name) oldname = __name__ # crazy name with close to zero possibility to cause whatever __name__ = 'iaugf9zrkjsbdv91' try: from griddata import griddata # restore old settings __name__ = oldname except ImportError: # restore old settings __name__ = oldname raise if __debug__: debug('EXT', 'Using python-griddata') except ImportError: from matplotlib.mlab import griddata if __debug__: debug('EXT', 'Using matplotlib.mlab.griddata') pymvpa2-2.2.0/mvpa2/support/ipython/000077500000000000000000000000001202542755000173465ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/support/ipython/__init__.py000066400000000000000000000035171202542755000214650ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Various helpers for making PyMVPA use within IPython more enjoyable """ __docformat__ = 'restructuredtext' from mvpa2.base import externals, cfg if externals.exists('running ipython env'): ipython_version = externals.versions['ipython'] if ipython_version >= '0.11~': # TODO pass else: from IPython.ipapi import get as ipget if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.support.ipython start') __all__ = ['ipy_activate_pymvpa_goodies'] def _goodies_pre011(): """Goodies activator for ipython < 0.11 """ try: if not cfg.getboolean('ipython', 'complete protected', False): ipget().IP.Completer.omit__names = 2 finally: pass if cfg.getboolean('ipython', 'complete collections attributes', True): from mvpa2.support.ipython.ipy_pymvpa_completer \ import activate as ipy_completer_activate ipy_completer_activate() def _goodies_011(): """Goodies activator for ipython >= 0.11 """ pass # TODO def ipy_activate_pymvpa_goodies(): """Activate PyMVPA additions to IPython Currently known goodies (controlled via PyMVPA configuration) are: * completions of collections' attributes * disabling by default protected attributes of instances in completions """ if ipython_version >= '0.11~': _goodies_011() else: _goodies_pre011() if __debug__: debug('INIT', 'mvpa2.support.ipython end') pymvpa2-2.2.0/mvpa2/support/ipython/ipy_pymvpa_completer.py000066400000000000000000000060751202542755000241770ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Attributes-aware tab completion. This module provides a custom tab-completer that intelligently reveals the names of attributes in the :class:`~mvpa2.base.collections.Collection`\s of PyMVPA. Activation ========== To use this, put in your ~/.ipython/ipy_user_conf.py file: import ipy_pymvpa_completer as _ic _ic.activate() Usage ===== The system works as follows. If t is an `Collection` object, then In [7]: t. shows not only `dict` interface but also `Attribute`\s present in the collection. Notes ----- It is a rip-off from IPython's ipy_traits_completer.py """ ############################################################################# # External imports import mvpa2.base.collections as col # IPython imports from IPython.ipapi import TryNext, get as ipget from IPython.genutils import dir2 ############################################################################# # Code begins def pymvpa_completer(self, event): """A custom IPython tab-completer that is collections-aware. """ symbol_parts = event.symbol.split('.') base = '.'.join(symbol_parts[:-1]) oinfo = self._ofind(base) if not oinfo['found']: raise TryNext obj = oinfo['obj'] # OK, we got the object. See if it's traits, else punt if not isinstance(obj, col.Collection): #print "exiting for %s" % obj raise TryNext # it's a Collection object, lets add its keys attrs = dir2(obj) #print "adding ", obj.keys() attrs += obj.keys() # Let's also respect the user's readline_omit__names setting: omit__names = ipget().IP.Completer.omit__names if omit__names == 1: attrs = [a for a in attrs if not a.startswith('__')] elif omit__names == 2: attrs = [a for a in attrs if not a.startswith('_')] # The base of the completion, so we can form the final results list bdot = base+'.' tcomp = [bdot+a for a in attrs] return tcomp def activate(): """Activate the PyMVPA Collections completer. """ ipget().set_hook('complete_command', pymvpa_completer, re_key = '.*') ############################################################################# if __name__ == '__main__': # Testing/debugging, can be done only under interactive IPython session from mvpa2.datasets.base import dataset_wizard t = dataset_wizard([1, 2, 3], targets=1, chunks=2) ip = ipget().IP assert(not 'targets' in ip.complete('t.sa.')) assert(not 'chunks' in ip.complete('t.sa.')) from ipy_pymvpa_completer import activate activate() # A few simplistic tests assert ip.complete('t.ed') == [] assert('targets' in ip.complete('t.sa.')) assert('chunks' in ip.complete('t.sa.')) print 'Tests OK' pymvpa2-2.2.0/mvpa2/support/lapack_svd.py000066400000000000000000000056101202542755000203370ustar00rootroot00000000000000"""ctypes wrapper for LAPACK svd implementation - DGESVD""" import numpy from mvpa2.base import externals from mvpa2.base.types import as_char if externals.exists('ctypes', raise_=True): from ctypes import cdll, c_char, c_int, c_double, c_void_p, byref from numpy.linalg import LinAlgError if externals.exists('liblapack.so'): lapacklib = cdll.LoadLibrary('liblapack.so') __all__ = ['svd'] def svd(a, full_matrices=True, algo='svd', **kwargs): """ ctypes warpepr for LAPACK SVD (DGESVD) Factorizes the matrix a into two unitary matrices U and Vh and an 1d-array s of singular values (real, non-negative) such that a == U S Vh if S is an suitably shaped matrix of zeros whose main diagonal is s. Parameters ---------- a : array, shape (M, N) Matrix to decompose full_matrices : boolean [Default is True] If true, U, Vh are shaped (M,M), (N,N) If false, the shapes are (M,K), (K,N) where K = min(M,N) algo : 'svd' or 'sdd' Returns ------- U: array, shape (M,M) or (M,K) depending on full_matrices s: array, shape (K,) The singular values, sorted so that s[i] >= s[i+1]. K = min(M, N) Vh: array, shape (N,N) or (K,N) depending on full_matrices Raises LinAlgError if SVD computation does not converge """ if full_matrices: flag='A' else: flag='S' jobu=c_char(as_char(flag)) jobv=c_char(as_char(flag)) info=c_int(0) x, y = a.shape m=c_int(x) n=c_int(y) lda=c_int(x) s=(c_double*min(x,y))() ldu=c_int(x) if full_matrices: ldvt = c_int(y) u = numpy.zeros((x,x),dtype=float) vt = numpy.zeros((y,y),dtype=float) else: ldvt = c_int(min(x,y)) u = numpy.zeros((x,min(x,y)),dtype=float) vt = numpy.zeros((min(x,y),y),dtype=float) if algo == 'svd': lwork=c_int(7*max(x,y)) work = (c_double*7*min(x,y))() lapacklib.dgesvd_(byref(jobu), byref(jobv), byref(m), byref(n), a.ctypes.data_as(c_void_p), byref(lda), s, u.ctypes.data_as(c_void_p), byref(ldu), vt.ctypes.data_as(c_void_p), byref(ldvt), work, byref(lwork), byref(info)) else: lwork=c_int(7*min(x,y)+4*min(x,y)*min(x,y)) work = (c_double*(7*min(x,y)+4*min(x,y)*min(x,y)))() iwork = (c_int*8*min(x,y))() lapacklib.dgesdd_(byref(jobu), byref(m), byref(n), a.ctypes.data_as(c_void_p), byref(lda), s, u.ctypes.data_as(c_void_p), byref(ldu), vt.ctypes.data_as(c_void_p), byref(ldvt), work, byref(lwork), iwork, byref(info)) if info.value >= 1: print "DBSQR did not converge for %i superdiagonals"%(info.value) # raise LinAlgError #if info.value <= -1: # print "Interesting!!! \nQuick, go find swaroop" if info.value == 0: return vt, numpy.asarray(s), u pymvpa2-2.2.0/mvpa2/support/nipy/000077500000000000000000000000001202542755000166335ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/support/nipy/__init__.py000066400000000000000000000023671202542755000207540ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for some of NiPy functionality. Only a handful of functions was borrowed from NiPy until we could rely on NiPy presence. Every file borrowed from NiPy copied locally prefixed with _. support.nipy.__init__ is supposed to serve as a switch board either to import available NiPy version (if nipy is present and version/revision is good enough) or a local copy from _'ed file. """ __docformat__ = 'restructuredtext' if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.support.nipy start') from mvpa2.base import externals # NiPy code requires scipy externals.exists('scipy', raise_=True) if externals.exists('nipy.neurospin'): # Import those interesting ones from nipy from nipy.neurospin.utils import emp_null else: import mvpa2.support._emp_null as emp_null __all__ = ['emp_null'] if __debug__: debug('INIT', 'mvpa2.support end') pymvpa2-2.2.0/mvpa2/support/pylab.py000066400000000000000000000024301202542755000173340ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Import helper for pylab which would enforce setting of a backend """ __docformat__ = 'restructuredtext' import sys from mvpa2.base import externals __all__ = ['pl'] if externals.exists('pylab', raise_=True): # Assure that we have correct backend externals._set_matplotlib_backend() if sys.version_info[:2] >= (2, 5): # enforce absolute import pl = __import__('pylab', globals(), locals(), [], 0) else: # little trick to be able to import 'griddata' package (which # has same name) oldname = __name__ # crazy name with close to zero possibility to cause whatever __name__ = 'iaugf9zrkjsasdf1' try: import pylab as pl # restore old settings __name__ = oldname except ImportError: # restore old settings __name__ = oldname raise pymvpa2-2.2.0/mvpa2/support/rpy2_addons.py000066400000000000000000000022601202542755000204520ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Misc support utility for making us compatible with liquid RPy2 atm """ __docformat__ = 'restructuredtext' from mvpa2.base.externals import exists, versions #if __debug__: # from mvpa2.base import debug __all__ = [] if exists('rpy2', raise_=True): __all__ = [ 'Rrx', 'Rrx2' ] if versions['rpy2'] >= '2.1.0beta': def Rrx(self, x): return self.rx(x) def Rrx2(self, x): return self.rx2(x) elif versions['rpy2'] >= '2.0': def Rrx(self, x): return self.r[x] def Rrx2(self, x): return self.r[x][0] else: raise ValueError, \ "We do not have support for rpy2 version %(rpy2)s" % versions Rrx.__doc__ = "Access delegator for R function [" Rrx2.__doc__ = "Access delegator for R function [[" pymvpa2-2.2.0/mvpa2/support/stats.py000066400000000000000000000145371202542755000173760ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Fixer for rdist in scipy """ __docformat__ = 'restructuredtext' from mvpa2.base import externals, warning, cfg if __debug__: from mvpa2.base import debug if externals.exists('scipy', raise_=True): import scipy import scipy.stats import scipy.stats as stats if not externals.exists('good scipy.stats.rdist'): if __debug__: debug("EXT", "Fixing up scipy.stats.rdist") # Lets fix it up, future imports of scipy.stats should carry fixed # version, isn't python is \emph{evil} ;-) import numpy as np from scipy.stats.distributions import rv_continuous from scipy import special import scipy.integrate # NB: Following function is copied from scipy SVN rev.5236 # and fixed with pow -> np.power (thanks Josef!) # FIXME: PPF does not work. class rdist_gen(rv_continuous): def _pdf(self, x, c): return np.power((1.0-x*x),c/2.0-1) / special.beta(0.5,c/2.0) def _cdf_skip(self, x, c): #error inspecial.hyp2f1 for some values see tickets 758, 759 return 0.5 + x/special.beta(0.5,c/2.0)* \ special.hyp2f1(0.5,1.0-c/2.0,1.5,x*x) def _munp(self, n, c): return (1-(n % 2))*special.beta((n+1.0)/2,c/2.0) # Lets try to avoid at least some of the numerical problems by removing points # around edges rdist = rdist_gen(a=-1.0, b=1.0, name="rdist", longname="An R-distributed", shapes="c", extradoc=""" R-distribution rdist.pdf(x,c) = (1-x**2)**(c/2-1) / B(1/2, c/2) for -1 <= x <= 1, c > 0. """ ) # Fix up number of arguments for veccdf's vectorize if rdist.veccdf.nin == 1: if __debug__: debug("EXT", "Fixing up veccdf.nin to make 2 for rdist") rdist.veccdf.nin = 2 scipy.stats.distributions.rdist_gen = scipy.stats.rdist_gen = rdist_gen scipy.stats.distributions.rdist = scipy.stats.rdist = rdist try: # Retest externals.exists('good scipy.stats.rdist', force=True, raise_=True) except RuntimeError: warning("scipy.stats.rdist was not fixed with a monkey-patch. " "It remains broken") # Revert so if configuration stored, we know the true flow of things ;) cfg.set('externals', 'have good scipy.stats.rdist', 'no') if not externals.exists('good scipy.stats.rv_discrete.ppf'): # Local rebindings for ppf7 (7 is for the scipy version from # which code was borrowed) arr = np.asarray from scipy.stats.distributions import valarray, argsreduce from numpy import shape, place, any def ppf7(self,q,*args,**kwds): """ Percent point function (inverse of cdf) at q of the given RV Parameters ---------- q : array-like lower tail probability arg1, arg2, arg3,... : array-like The shape parameter(s) for the distribution (see docstring of the instance object for more information) loc : array-like, optional location parameter (default=0) Returns ------- k : array-like quantile corresponding to the lower tail probability, q. """ loc = kwds.get('loc') args, loc = self._rv_discrete__fix_loc(args, loc) q,loc = map(arr,(q,loc)) args = tuple(map(arr,args)) cond0 = self._argcheck(*args) & (loc == loc) cond1 = (q > 0) & (q < 1) cond2 = (q==1) & cond0 cond = cond0 & cond1 output = valarray(shape(cond),value=self.badvalue,typecode='d') #output type 'd' to handle nin and inf place(output,(q==0)*(cond==cond), self.a-1) place(output,cond2,self.b) if any(cond): goodargs = argsreduce(cond, *((q,)+args+(loc,))) loc, goodargs = goodargs[-1], goodargs[:-1] place(output,cond,self._ppf(*goodargs) + loc) if output.ndim == 0: return output[()] return output scipy.stats.distributions.rv_discrete.ppf = ppf7 try: externals.exists('good scipy.stats.rv_discrete.ppf', force=True, raise_=True) except RuntimeError: warning("rv_discrete.ppf was not fixed with a monkey-patch. " "It remains broken") cfg.set('externals', 'have good scipy.stats.rv_discrete.ppf', 'no') if externals.versions['scipy'] >= '0.8.0' and \ not externals.exists('good scipy.stats.rv_continuous._reduce_func(floc,fscale)'): if __debug__: debug("EXT", "Fixing up scipy.stats.rv_continuous._reduce_func") # Borrowed from scipy v0.4.3-5978-gce90df2 # Copyright: 2001, 2002 Enthought, Inc.; 2003-2012 SciPy developers # License: BSD-3 def _reduce_func_fixed(self, args, kwds): args = list(args) Nargs = len(args) fixedn = [] index = range(Nargs) names = ['f%d' % n for n in range(Nargs - 2)] + ['floc', 'fscale'] x0 = [] for n, key in zip(index, names): if kwds.has_key(key): fixedn.append(n) args[n] = kwds[key] else: x0.append(args[n]) if len(fixedn) == 0: func = self.nnlf restore = None else: if len(fixedn) == len(index): raise ValueError("All parameters fixed. There is nothing to optimize.") def restore(args, theta): # Replace with theta for all numbers not in fixedn # This allows the non-fixed values to vary, but # we still call self.nnlf with all parameters. i = 0 for n in range(Nargs): if n not in fixedn: args[n] = theta[i] i += 1 return args def func(theta, x): newtheta = restore(args[:], theta) return self.nnlf(newtheta, x) return x0, func, restore, args stats.rv_continuous._reduce_func = _reduce_func_fixed pymvpa2-2.2.0/mvpa2/support/utils.py000066400000000000000000000057561202542755000174030ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Various utils of general utility """ __docformat__ = 'restructuredtext' import warnings from mvpa2.base import externals, warning, cfg if __debug__: from mvpa2.base import debug class deprecated(object): """Decorator to mark a function or class as deprecated. Issue a warning when the function is called/the class is instantiated and adds a warning to the docstring. The optional extra argument will be appended to the deprecation message and the docstring. Note: to use this with the default value for extra, put in an empty of parentheses: >>> from sklearn.utils import deprecated >>> deprecated() # doctest: +ELLIPSIS >>> @deprecated() ... def some_function(): pass """ # Taken from sklearn 0.10-branching-696-g19b5e33 # Copyright: 2007-2012, sklearn developers # License: BSD-3 # Adapted from http://wiki.python.org/moin/PythonDecoratorLibrary, # but with many changes. def __init__(self, extra=''): """ Parameters ---------- extra: string to be added to the deprecation messages """ self.extra = extra def __call__(self, obj): if isinstance(obj, type): return self._decorate_class(obj) else: return self._decorate_fun(obj) def _decorate_class(self, cls): msg = "Class %s is deprecated" % cls.__name__ if self.extra: msg += "; %s" % self.extra # FIXME: we should probably reset __new__ for full generality init = cls.__init__ def wrapped(*args, **kwargs): warnings.warn(msg, category=DeprecationWarning) return init(*args, **kwargs) cls.__init__ = wrapped wrapped.__name__ = '__init__' wrapped.__doc__ = self._update_doc(init.__doc__) wrapped.deprecated_original = init return cls def _decorate_fun(self, fun): """Decorate function fun""" msg = "Function %s is deprecated" % fun.__name__ if self.extra: msg += "; %s" % self.extra def wrapped(*args, **kwargs): warnings.warn(msg, category=DeprecationWarning) return fun(*args, **kwargs) wrapped.__name__ = fun.__name__ wrapped.__dict__ = fun.__dict__ wrapped.__doc__ = self._update_doc(fun.__doc__) return wrapped def _update_doc(self, olddoc): newdoc = "DEPRECATED" if self.extra: newdoc = "%s: %s" % (newdoc, self.extra) if olddoc: newdoc = "%s\n\n%s" % (newdoc, olddoc) return newdoc pymvpa2-2.2.0/mvpa2/testing/000077500000000000000000000000001202542755000156155ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/testing/__init__.py000066400000000000000000000017331202542755000177320ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helpers to unify/facilitate unittesting within PyMVPA """ __docformat__ = 'restructuredtext' import numpy as np # we barely can step somewhere without it from mvpa2.base import externals from mvpa2 import pymvpa_dataroot if __debug__: from mvpa2.base import debug debug('INIT', 'mvpa2.testing') from mvpa2.testing.tools import * if __debug__: from mvpa2.base import debug _ENFORCE_CA_ENABLED = 'ENFORCE_CA_ENABLED' in debug.active else: _ENFORCE_CA_ENABLED = False from mvpa2.testing.sweepargs import sweepargs if __debug__: debug('INIT', 'mvpa2.testing end') pymvpa2-2.2.0/mvpa2/testing/clfs.py000066400000000000000000000076001202542755000171210ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Provides `clfs` dictionary with instances of all available classifiers.""" __docformat__ = 'restructuredtext' # Global modules import numpy as np # Some global imports useful through out unittests from mvpa2.base import cfg # Base classes from mvpa2.clfs.base import Classifier from mvpa2.datasets.base import Dataset from mvpa2.measures.base import FeaturewiseMeasure # # first deal with classifiers which do not have external deps # from mvpa2.clfs.base import Classifier from mvpa2.clfs.smlr import SMLR from mvpa2.clfs.knn import * from mvpa2.clfs.warehouse import clfswh, regrswh from mvpa2.base import externals from mvpa2.base.types import accepts_dataset_as_samples __all__ = ['clfswh', 'regrswh', 'Classifier', 'SameSignClassifier', 'Less1Classifier', 'sample_clf_nl', 'sample_clf_lin', 'sample_clf_reg', 'cfg', 'SillySensitivityAnalyzer'] # if have ANY svm implementation if externals.exists('libsvm') or externals.exists('shogun'): from mvpa2.clfs.svm import * __all__ += ['LinearCSVMC'] if externals.exists('libsvm'): __all__ += ['libsvm', 'LinearNuSVMC'] if externals.exists('shogun'): __all__ += ['sg'] # # Few silly classifiers # class SameSignClassifier(Classifier): """Dummy classifier which reports +1 class if both features have the same sign, -1 otherwise""" __tags__ = ['notrain2predict'] def __init__(self, **kwargs): Classifier.__init__(self, **kwargs) def _train(self, data): # we don't need that ;-) pass @accepts_dataset_as_samples def _predict(self, data): data = np.asanyarray(data) datalen = len(data) estimates = [] for d in data: estimates.append(2*int( (d[0]>=0) == (d[1]>=0) )-1) self.ca.predictions = estimates self.ca.estimates = estimates # just for the sake of having estimates return estimates class Less1Classifier(SameSignClassifier): """Dummy classifier which reports +1 class if abs value of max less than 1""" def _predict(self, data): datalen = len(data) estimates = [] for d in data: estimates.append(2*int(max(d)<=1)-1) self.predictions = estimates return estimates class SillySensitivityAnalyzer(FeaturewiseMeasure): """Simple one which just returns xrange[-N/2, N/2], where N is the number of features """ is_trained = True def __init__(self, mult=1, **kwargs): FeaturewiseMeasure.__init__(self, **kwargs) self.__mult = mult def _call(self, dataset): """Train linear SVM on `dataset` and extract weights from classifier. """ sens = self.__mult *( np.arange(dataset.nfeatures) - int(dataset.nfeatures/2) ) return Dataset(sens[np.newaxis]) # Sample universal classifiers (linear and non-linear) which should be # used whenever it doesn't matter what classifier it is for testing # some higher level creations -- chosen so it is the fastest universal # one. Also it should not punch state.py in the face how it is # happening with kNN... sample_clf_lin = SMLR(lm=0.1)#sg.svm.LinearCSVMC(svm_impl='libsvm') #if externals.exists('shogun'): # sample_clf_nl = sg.SVM(kernel_type='RBF', svm_impl='libsvm') #else: #classical one which was used for a while #and surprisingly it is not bad at all for the unittests sample_clf_nl = kNN(k=5) # and also a regression-based classifier r = clfswh['linear', 'regression_based', 'has_sensitivity'] if len(r) > 0: sample_clf_reg = r[0] else: sample_clf_reg = None pymvpa2-2.2.0/mvpa2/testing/datasets.py000066400000000000000000000130211202542755000177740ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Provides convenience datasets for unittesting. Also performs testing of storing/reloading datasets into hdf5 file if cfg.getboolean('tests', 'use hdf datasets' """ __docformat__ = 'restructuredtext' import tempfile import shutil import os import traceback as tbm import sys import numpy as np from mvpa2 import cfg, externals from mvpa2.datasets.base import Dataset, HollowSamples from mvpa2.generators.partition import OddEvenPartitioner from mvpa2.misc.data_generators import * from mvpa2.testing.tools import reseed_rng __all__ = [ 'datasets', 'get_random_rotation', 'saveload_warehouse', 'pure_multivariate_signal'] # Define datasets to be used all over. Split-half later on is used to # split into training/testing # snr_scale = cfg.get_as_dtype('tests', 'snr scale', float, default=1.0) specs = {'large' : { 'perlabel': 99, 'nchunks': 11, 'nfeatures': 20, 'snr': 8 * snr_scale}, 'medium' :{ 'perlabel': 24, 'nchunks': 6, 'nfeatures': 14, 'snr': 8 * snr_scale}, 'small' : { 'perlabel': 12, 'nchunks': 4, 'nfeatures': 6, 'snr' : 14 * snr_scale} } # to assure reproducibility -- lets reseed the RNG at this point @reseed_rng() def generate_testing_datasets(specs): # Lets permute upon each invocation of test, so we could possibly # trigger some funny cases nonbogus_pool = np.random.permutation([0, 1, 3, 5]) datasets = {} # use a partitioner to flag odd/even samples as training and test ttp = OddEvenPartitioner(space='train', count=1) for kind, spec in specs.iteritems(): # set of univariate datasets for nlabels in [ 2, 3, 4 ]: basename = 'uni%d%s' % (nlabels, kind) nonbogus_features = nonbogus_pool[:nlabels] dataset = normal_feature_dataset( nlabels=nlabels, nonbogus_features=nonbogus_features, **spec) # full dataset datasets[basename] = list(ttp.generate(dataset))[0] # sample 3D total = 2*spec['perlabel'] nchunks = spec['nchunks'] data = np.random.standard_normal(( total, 3, 6, 6 )) labels = np.concatenate( ( np.repeat( 0, spec['perlabel'] ), np.repeat( 1, spec['perlabel'] ) ) ) data[:, 1, 0, 0] += 2*labels # add some signal chunks = np.asarray(range(nchunks)*(total//nchunks)) mask = np.ones((3, 6, 6), dtype='bool') mask[0, 0, 0] = 0 mask[1, 3, 2] = 0 ds = Dataset.from_wizard(samples=data, targets=labels, chunks=chunks, mask=mask, space='myspace') # and to stress tests on manipulating sa/fa possibly containing # attributes of dtype object ds.sa['test_object'] = [['a'], [1, 2]] * (ds.nsamples//2) datasets['3d%s' % kind] = ds # some additional datasets datasets['dumb2'] = dumb_feature_binary_dataset() datasets['dumb'] = dumb_feature_dataset() # dataset with few invariant features _dsinv = dumb_feature_dataset() _dsinv.samples = np.hstack((_dsinv.samples, np.zeros((_dsinv.nsamples, 1)), np.ones((_dsinv.nsamples, 1)))) datasets['dumbinv'] = _dsinv # Datasets for regressions testing datasets['sin_modulated'] = list(ttp.generate(multiple_chunks(sin_modulated, 4, 30, 1)))[0] # use the same full for training datasets['sin_modulated_train'] = datasets['sin_modulated'] datasets['sin_modulated_test'] = sin_modulated(30, 1, flat=True) # simple signal for linear regressors datasets['chirp_linear'] = multiple_chunks(chirp_linear, 6, 50, 10, 2, 0.3, 0.1) datasets['chirp_linear_test'] = chirp_linear(20, 5, 2, 0.4, 0.1) datasets['wr1996'] = multiple_chunks(wr1996, 4, 50) datasets['wr1996_test'] = wr1996(50) datasets['hollow'] = Dataset(HollowSamples((40,20)), sa={'targets': np.tile(['one', 'two'], 20)}) return datasets # avoid treating it as a test by nose generate_testing_datasets.__test__ = False def saveload_warehouse(): """Store all warehouse datasets into HDF5 and reload them. """ import h5py from mvpa2.base.hdf5 import obj2hdf, hdf2obj tempdir = tempfile.mkdtemp() # store the whole datasets warehouse in one hdf5 file hdf = h5py.File(os.path.join(tempdir, 'myhdf5.hdf5'), 'w') for d in datasets: obj2hdf(hdf, datasets[d], d) hdf.close() hdf = h5py.File(os.path.join(tempdir, 'myhdf5.hdf5'), 'r') rc_ds = {} for d in hdf: rc_ds[d] = hdf2obj(hdf[d]) hdf.close() #cleanup temp dir shutil.rmtree(tempdir, ignore_errors=True) # return the reconstructed datasets (for use in datasets warehouse) return rc_ds datasets = generate_testing_datasets(specs) if cfg.getboolean('tests', 'use hdf datasets', False): if not externals.exists('h5py'): raise RuntimeError( "Cannot perform HDF5 dump of all datasets in the warehouse, " "because 'h5py' is not available") datasets = saveload_warehouse() print "Replaced all dataset warehouse for HDF5 loaded alternative." pymvpa2-2.2.0/mvpa2/testing/sweepargs.py000066400000000000000000000144671202542755000202030ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Submodule to provide sweepargs decorator for unittests""" __docformat__ = 'restructuredtext' import sys import traceback as tbm from mvpa2 import cfg from mvpa2.testing.tools import SkipTest if __debug__: from mvpa2.base import debug __all__ = [ 'sweepargs' ] def sweepargs(**kwargs): """Decorator function to sweep over a given set of classifiers Parameters ---------- clfs : list of `Classifier` List of classifiers to run method on Often some unittest method can be ran on multiple classifiers. So this decorator aims to do that """ from mvpa2.clfs.base import Classifier from mvpa2.base.state import ClassWithCollections def unittest_method(method): def do_sweep(*args_, **kwargs_): """Perform sweeping over provided keyword arguments """ def untrain_clf(argvalue): """Little helper""" if isinstance(argvalue, Classifier): # clear classifier after its use -- just to be sure ;-) argvalue.params.retrainable = False argvalue.untrain() failed_tests = {} skipped_tests = [] for argname in kwargs.keys(): for argvalue in kwargs[argname]: if isinstance(argvalue, Classifier): # clear classifier before its use argvalue.untrain() if isinstance(argvalue, ClassWithCollections): argvalue.ca.reset() # update kwargs_ kwargs_[argname] = argvalue # do actual call try: if __debug__: debug('TEST', 'Running %s on args=%r and kwargs=%r' % (method.__name__, args_, kwargs_)) method(*args_, **kwargs_) except SkipTest, e: skipped_tests += [e] except AssertionError, e: estr = str(e) etype, value, tb = sys.exc_info() # literal representation of exception tb, so # we could group them later on eidstr = ' '.join( [l for l in tbm.format_exception(etype, value, tb) if not ('do_sweep' in l or 'unittest.py' in l or 'AssertionError' in l or 'Traceback (most' in l)]) # Store exception information for later on groupping if not eidstr in failed_tests: failed_tests[eidstr] = [] sargvalue = str(argvalue) if not (__debug__ and 'TEST' in debug.active): # by default lets make it of sane length if len(sargvalue) > 100: sargvalue = sargvalue[:95] + ' ...' failed_tests[eidstr].append( # skip top-most tb in sweep_args (argname, sargvalue, tb.tb_next, estr)) if __debug__: msg = "%s on %s=%s" % (estr, argname, argvalue) debug('TEST', 'Failed unittest: %s\n%s' % (eidstr, msg)) untrain_clf(argvalue) # TODO: handle different levels of unittests properly if cfg.getboolean('tests', 'quick', False): # on TESTQUICK just run test for 1st entry in the list, # the rest are omitted # TODO: proper partitioning of unittests break if len(failed_tests): # Lets now create a single AssertionError exception # which would nicely incorporate all failed exceptions multiple = len(failed_tests) != 1 # is it unique? # if so, we don't need to reinclude traceback since it # would be spitted out anyways below estr = "" cestr = "lead to failures of unittest %s" % method.__name__ if multiple: estr += "\n Different scenarios %s "\ "(specific tracebacks are below):" % cestr else: estr += "\n Single scenario %s:" % cestr for ek, els in failed_tests.iteritems(): estr += '\n' if multiple: estr += ek estr += " on\n %s" % (" ".join( ["%s=%s%s\n" % (ea, eav, # Why didn't I just do regular for loop? ;) ":\n ".join([xx for xx in [' ', es] if xx != ''])) for ea, eav, etb, es in els])) # take first one... they all should be identical etb = els[0][2] raise AssertionError(estr), None, etb if len(skipped_tests): # so if nothing has failed, lets at least report that some were # skipped -- for now just a simple SkipTest message raise SkipTest("%d tests were skipped in testing %s" % (len(skipped_tests), method.func_name)) do_sweep.func_name = method.func_name do_sweep.__doc__ = method.__doc__ return do_sweep if len(kwargs) > 1: raise NotImplementedError, \ "No sweeping over multiple arguments in sweepargs. Meanwhile " \ "use two @sweepargs decorators for the test." return unittest_method pymvpa2-2.2.0/mvpa2/testing/tools.py000066400000000000000000000255101202542755000173320ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """A Collection of tools found useful in unittests. Primarily the ones from nose.tools """ __docformat__ = 'restructuredtext' import glob, os, sys, shutil import tempfile import unittest import numpy as np import mvpa2 from mvpa2.base import externals, warning if __debug__: from mvpa2.base import debug if externals.exists('nose'): # We use nose now from nose import SkipTest from nose.tools import ( ok_, eq_, # Asserting (pep8-ed from unittest) assert_true, assert_false, assert_raises, assert_equal, assert_equals, assert_not_equal, assert_not_equals, # Decorators timed, with_setup, raises, istest, nottest, make_decorator ) else: # Lets make it possible to import testing.tools even if nose is # NA, and run unittests which do not require nose yet def _need_nose(*args, **kwargs): """Catcher for unittests requiring nose functionality """ raise unittest.TestCase.failureException( "Unittest requires nose testing framework") ok_ = eq_ = assert_true = assert_false = assert_raises = \ assert_equal = assert_equals = assert_not_equal = asserte_not_equals = \ timed = with_setup = raises = istest = nottest = make_decorator = _need_nose class SkipTest(Exception): """Raise this exception to mark a test as skipped. """ pass # Some pieces are useful from numpy.testing from numpy.testing import ( assert_almost_equal, assert_approx_equal, assert_array_almost_equal, assert_array_equal, assert_array_less, assert_string_equal) def assert_array_lequal(x, y): assert_array_less(-y, -x) def skip_if_no_external(dep, ver_dep=None, min_version=None, max_version=None): """Raise SkipTest if external is missing Parameters ---------- dep : string Name of the external ver_dep : string, optional If for version checking use some different key, e.g. shogun:rev. If not specified, `dep` will be used. min_version : None or string or tuple Minimal required version max_version : None or string or tuple Maximal required version """ if not externals.exists(dep): raise SkipTest, \ "External %s is not present thus tests battery skipped" % dep if ver_dep is None: ver_dep = dep if min_version is not None and externals.versions[ver_dep] < min_version: raise SkipTest, \ "Minimal version %s of %s is required. Present version is %s" \ ". Test was skipped." \ % (min_version, ver_dep, externals.versions[ver_dep]) if max_version is not None and externals.versions[ver_dep] > max_version: raise SkipTest, \ "Maximal version %s of %s is required. Present version is %s" \ ". Test was skipped." \ % (min_version, ver_dep, externals.versions[ver_dep]) def with_tempfile(*targs, **tkwargs): """Decorator function to provide a temporary file name and remove it at the end. All arguments are passed into the call to tempfile.mktemp(), and resultant temporary filename is passed as the first argument into the test. If no 'prefix' argument is provided, it will be constructed using module and function names ('.' replaced with '_'). Example use:: @with_tempfile() def test_write(tfile): open(tfile, 'w').write('silly test') """ def decorate(func): def newfunc(*arg, **kw): if len(targs)<2 and not 'prefix' in tkwargs: try: tkwargs['prefix'] = 'tempfile_%s.%s' \ % (func.__module__, func.func_name) except: # well -- if something wrong just proceed with defaults pass filename = tempfile.mktemp(*targs, **tkwargs) if __debug__: debug('TEST', 'Running %s with temporary filename %s' % (func.__name__, filename)) try: func(*(arg + (filename,)), **kw) finally: # glob here for all files with the same name (-suffix) # would be useful whenever we requested .img filename, # and function creates .hdr as well lsuffix = len(tkwargs.get('suffix', '')) filename_ = lsuffix and filename[:-lsuffix] or filename filenames = glob.glob(filename_ + '*') if len(filename_) < 3 or len(filenames) > 5: # For paranoid yoh who stepped into this already ones ;-) warning("It is unlikely that it was intended to remove all" " files matching %r. Skipping" % filename_) return for f in filenames: try: # Can also be a directory if os.path.isdir(f): shutil.rmtree(f) else: os.unlink(f) except OSError: pass newfunc = make_decorator(func)(newfunc) return newfunc return decorate def reseed_rng(): """Decorator to assure the use of MVPA_SEED while running the test It resets random number generators (both python and numpy) to the initial value of the seed value which was set while importing :mod:`mvpa`, which could be controlled through configuration/environment. Examples -------- >>> @reseed_rng() ... def test_random(): ... import numpy.random as rnd ... print rnd.randint(100) """ def decorate(func): def newfunc(*arg, **kwargs): mvpa2.seed(mvpa2._random_seed) return func(*arg, **kwargs) newfunc = make_decorator(func)(newfunc) return newfunc return decorate def nodebug(entries=None): """Decorator to temporarily turn off some debug targets Parameters ---------- entries : None or list of string, optional If None, all debug entries get turned off. Otherwise only provided ones """ def decorate(func): def newfunc(*arg, **kwargs): if __debug__: from mvpa2.base import debug # store a copy old_active = debug.active[:] if entries is None: # turn them all off debug.active = [] else: for e in entries: if e in debug.active: debug.active.remove(e) try: res = func(*arg, **kwargs) return res finally: # we should return the debug states to the original # state regardless either test passes or not! if __debug__: # turn debug targets back on debug.active = old_active newfunc = make_decorator(func)(newfunc) return newfunc return decorate def labile(niter=3, nfailures=1): """Decorator for labile tests -- runs multiple times Let's reduce probability of random failures but re-running the test multiple times allowing to fail few in a row. Makes sense only for tests which run on random data, so usually decorated with reseed_rng. Otherwise it is unlikely that result would change if algorithms are deterministic and operate on the same data Parameters ---------- niter: int, optional How many iterations to run maximum nfailures: int, optional How many failures to allow """ def decorate(func): def newfunc(*arg, **kwargs): nfailed, i = 0, 0 # define i just in case for i in xrange(niter): try: ret = func(*arg, **kwargs) if i + 1 - nfailed >= niter - nfailures: # so we know already that we wouldn't go over # nfailures break except AssertionError, e: nfailed += 1 if __debug__: debug('TEST', "Upon %i-th run, test %s failed with %s", (i, func.__name__, e)) if nfailed > nfailures: if __debug__: debug('TEST', "Ran %s %i times. Got %d failures, " "while was allowed %d " "-- re-throwing the last failure %s", (func.__name__, i+1, nfailed, nfailures, e)) exc_info = sys.exc_info() raise exc_info[1], None, exc_info[2] if __debug__: debug('TEST', "Ran %s %i times. Got %d failures.", (func.__name__, i+1, nfailed)) return ret newfunc = make_decorator(func)(newfunc) return newfunc assert(niter > nfailures) return decorate def assert_objectarray_equal(x, y, xorig=None, yorig=None, strict=True): """Wrapper around assert_array_equal to compare object arrays See http://projects.scipy.org/numpy/ticket/2117 for the original report on oddity of dtype object arrays comparisons Parameters ---------- strict: bool Assure also that dtypes are the same. Otherwise it is pretty much value comparison """ try: assert_array_equal(x, y) except AssertionError, e: if not ((x.dtype == object) and (y.dtype == object)): raise # pass inside original arrays for a meaningful assertion # failure msg if xorig is None: xorig = x if yorig is None: yorig = y try: # we will try harder comparing each element the same way # and also enforcing equal dtype for x_, y_ in zip(x, y): assert(type(x_) == type(y_)) if strict and isinstance(x_, np.ndarray) and not (x_.dtype == y_.dtype): raise AssertionError("dtypes %r and %r do not match" % (x_.dtype, y_.dtype)) assert_objectarray_equal(x_, y_, xorig, yorig) except Exception, e: if not isinstance(e, AssertionError): raise AssertionError("%r != %r, thus %s != %s" % (x, y, xorig, yorig)) raise pymvpa2-2.2.0/mvpa2/tests/000077500000000000000000000000001202542755000153025ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/tests/__init__.py000066400000000000000000000242141202542755000174160ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit test interface for PyMVPA""" import unittest import numpy as np from mvpa2 import _random_seed, cfg from mvpa2.base import externals, warning # # init to make tests into a package # # Test callable # from numpy.testing import Tester # test = Tester().test # del Tester _sys_settings = {} def _get_verbosity(verbosity): if verbosity is None: return int(cfg.get('tests', 'verbosity', default=1)) return verbosity def setup_module(module, verbosity=None): "set up test fixtures for testing" if __debug__: from mvpa2.base import debug # Lets add some targets which provide additional testing debug.active += ['CHECK_.*'] verbosity = _get_verbosity(verbosity) # provide people with a hint about the warnings that might show up in a # second if verbosity: print("T: MVPA_SEED=%s" % _random_seed) if verbosity > 1: print('T: Testing for availability of external software packages.') # fully test of externals externals.check_all_dependencies(verbosity=max(0, verbosity-1)) # So we could see all warnings about missing dependencies _sys_settings['maxcount'] = warning.maxcount warning.maxcount = 1000 if verbosity < 3: # no MVPA warnings during whole testsuite (but restore handlers later on) _sys_settings['handlers'] = warning.handlers warning.handlers = [] # No python warnings (like ctypes version for slmr) import warnings warnings.simplefilter('ignore') if verbosity < 4: # No NumPy _sys_settings['np_errsettings'] = np.geterr() np.seterr(**dict([(x, 'ignore') for x in _sys_settings['np_errsettings']])) def teardown_module(module, verbosity=None): "tear down test fixtures" verbosity = _get_verbosity(verbosity) # restore warning handlers warning.maxcount = _sys_settings['maxcount'] if verbosity < 3: # restore warning handlers warning.handlers = _sys_settings['handlers'] if verbosity < 4: # restore numpy settings np.seterr(**_sys_settings['np_errsettings']) def collect_unit_tests(verbosity=1): """Runs over all tests it knows and composes a dictionary with test suite instances as values and IDs as keys. IDs are the filenames of the unittest without '.py' extension and ``test_`` prefix. During collection this function will run a full and verbose test for all known externals. """ # list all test modules (without .py extension) tests = [ # Basic data structures/manipulators 'test_externals', 'test_dochelpers', 'test_som', 'test_state', 'test_params', # Misc supporting utilities 'test_config', 'test_support', 'test_verbosity', 'test_report', 'test_cmdline', 'test_args', 'test_meg', # Classifiers (longer tests) 'test_clf', 'test_regr', 'test_knn', 'test_gnb', 'test_svm', 'test_plr', 'test_smlr', # Various algorithms 'test_svdmapper', 'test_procrust', 'test_hyperalignment', 'test_transformers', 'test_searchlight', 'test_rfe', 'test_ifs', 'test_perturbsensana', # And the suite (all-in-1) 'test_suite', ] __optional_tests = [ ('scipy', 'ridge'), ('scipy', 'gpr'), (['cPickle', 'gzip'], 'hamster'), ] # and now for the optional tests optional_tests = [] for external, testname in __optional_tests: if externals.exists(external): optional_tests.append('test_%s' % testname) elif verbosity: print('T: Tests from "test_%s" are skipped due to missing externals: %s' % (testname, external)) # finally merge all of them tests += optional_tests return tests def collect_test_suites(verbosity=1): tests = collect_unit_tests(verbosity=verbosity) # import all test modules for t in tests: # TODO: exclude tests which fail to import: e.g. on Windows # could get WindowsError due to missing msvcr90.dll exec 'import mvpa2.tests.' + t # instantiate all tests suites and return dict of them (with ID as key) return dict([(t[5:], eval('mvpa2.tests.' + t + '.suite()')) for t in tests ]) def collect_nose_tests(verbosity=1): """Return list of tests which are pure nose-based """ tests = [ # Basic data structures/manipulators 'test_base', 'test_collections', 'test_attrmap', # Datasets 'test_datasetng', 'test_datasetfx', 'test_dataset_formats', 'test_splitter', 'test_generators', 'test_niftidataset', 'test_eepdataset', 'test_erdataset', 'test_datasrcs', # Classifiers 'test_multiclf', # Misc supporting 'test_neighborhood', 'test_stats', 'test_stats_sp', # Mappers 'test_mapper', 'test_mapper_sp', 'test_arraymapper', 'test_boxcarmapper', 'test_prototypemapper', 'test_fxmapper', 'test_zscoremapper', 'test_waveletmapper', 'test_mdp', 'test_filters', # Learners 'test_enet', 'test_spam', 'test_lars', 'test_glmnet', 'test_kernel', 'test_svmkernels', 'test_senses', # Algorithms 'test_emp_null', 'test_clfcrossval', # IO 'test_iohelpers', 'test_hdf5', 'test_hdf5_clf', # Measures 'test_transerror', 'test_datameasure', 'test_dcov', # Misc 'test_misc', 'test_testing', 'test_usecases', ] if not cfg.getboolean('tests', 'lowmem', default='no'): tests += ['test_atlases'] return tests def run_tests_using_nose(limit=None, verbosity=1, exit_=False): """Run nose-based tests -- really really silly way, just to get started TODO: just switch to using numpy.testing framework, for that unittests need to be cleaned and unified first """ nosetests = collect_nose_tests(verbosity=verbosity) verbosity = _get_verbosity(verbosity) if not externals.exists('nose'): warning("You do not have python-nose installed. Some unittests were " "skipped: %s" % (', '.join(nosetests))) return from nose import main import nose import nose.config tests = collect_unit_tests(verbosity=verbosity) + nosetests config = nose.config.Config( verbosity=max(0, verbosity-1), plugins=nose.plugins.DefaultPluginManager()) if limit is None: # Lets see if we aren't missing any: if verbosity: import os, glob testfiles = glob.glob('%s%stest_*.py' % (os.path.dirname(__file__), os.path.sep)) not_tested = set([os.path.basename(f) for f in testfiles]) \ - set(['%s.py' % f for f in tests]) if len(not_tested): print("T: Warning -- following test files were found but will " "not be tested: %s" % ', '.join(not_tested)) config.testNames = ['mvpa2.tests.' + nt for nt in tests] else: config.testNames = ['mvpa2.tests.' + nt for nt in tests if nt[5:] in limit] # run the tests _ = main(defaultTest=(), config=config, exit=exit_) def run(limit=None, verbosity=None, exit_=False): """Runs the full or a subset of the PyMVPA unittest suite. Parameters ---------- limit : None or list If None, the full test suite is run. Alternatively, a list with test IDs can be provides. IDs are the base filenames of the test implementation, e.g. the ID for the suite in 'mvpa2/tests/test_niftidataset.py' is 'niftidataset'. verbosity : None or int Verbosity of unittests execution. If None, controlled by PyMVPA configuration tests/verbosity. Values >=3 enable all Python, and PyMVPA warnings, >=4 adds NumPy warnings, >=5 -- nose debug info. exit_ : bool, optional Either to exit with an error code upon the completion. """ setup_module(None, verbosity) try: if externals.exists('nose'): # Lets just use nose run_tests_using_nose(limit=limit, verbosity=verbosity, exit_=exit_) else: print("T: Warning -- major bulk of tests is skipped since nose " "is unavailable") # collect all tests suites = collect_test_suites(verbosity=verbosity) if limit is None: # make global test suite (use them all) ts = unittest.TestSuite(suites.values()) else: ts = unittest.TestSuite([suites[s] for s in limit]) class TextTestRunnerPyMVPA(unittest.TextTestRunner): """Extend TextTestRunner to print out random seed which was used in the case of failure""" def run(self, test): """Run the bloody test and puke the seed value if failed""" result = super(TextTestRunnerPyMVPA, self).run(test) if not result.wasSuccessful(): print "MVPA_SEED=%s" % _random_seed # finally run it TextTestRunnerPyMVPA(verbosity=verbosity).run(ts) finally: teardown_module(None, verbosity) # to avoid nosetests running the beasts defined in this file run_tests_using_nose.__test__ = False run.__test__ = False __test__ = False if __name__ == "__main__": run(exit_=True, verbosity=3) pymvpa2-2.2.0/mvpa2/tests/badexternals/000077500000000000000000000000001202542755000177565ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/tests/badexternals/cPickle_disabled.py000066400000000000000000000000221202542755000235230ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/ctypes.py000066400000000000000000000000221202542755000216310ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/griddata.py000066400000000000000000000000221202542755000221010ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/gzip.py000066400000000000000000000000221202542755000212730ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/h5py.py000066400000000000000000000000221202542755000212070ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/hcluster.py000066400000000000000000000000221202542755000221530ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/libsvm.py000066400000000000000000000000221202542755000216160ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/lxml.py000066400000000000000000000000221202542755000212760ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/mdp.py000066400000000000000000000000221202542755000211020ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/nifti.py000066400000000000000000000000221202542755000214330ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/nipy.py000066400000000000000000000000221202542755000213010ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/openopt.py000066400000000000000000000000221202542755000220060ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/pandas.py000066400000000000000000000000221202542755000215700ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/psutil.py000066400000000000000000000000221202542755000216420ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/pylab.py000066400000000000000000000000221202542755000214310ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/pywt.py000066400000000000000000000000221202542755000213250ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/reportlab.py000066400000000000000000000000221202542755000223140ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/rpy.py000066400000000000000000000000221202542755000211340ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/rpy2.py000066400000000000000000000000221202542755000212160ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/scikits/000077500000000000000000000000001202542755000214275ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/tests/badexternals/scikits/__init__.py000066400000000000000000000000001202542755000235260ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/tests/badexternals/scikits/learn/000077500000000000000000000000001202542755000225305ustar00rootroot00000000000000pymvpa2-2.2.0/mvpa2/tests/badexternals/scikits/learn/__init__.py000066400000000000000000000000221202542755000246330ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/scipy.py000066400000000000000000000000221202542755000214510ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/shogun.py000066400000000000000000000000221202542755000216250ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/skimage.py000066400000000000000000000000221202542755000217420ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/sklearn.py000066400000000000000000000000221202542755000217610ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/statsmodels.py000066400000000000000000000000221202542755000226640ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/badexternals/weave.py000066400000000000000000000000221202542755000214310ustar00rootroot00000000000000raise ImportError pymvpa2-2.2.0/mvpa2/tests/runner.py000066400000000000000000000055101202542755000171660ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper module to enable profiling of the testcase If environment variable PROFILELEVEL is set it uses hotshot profiler for unittest.main() call. Value of PROFILELEVEL defines number of top busy functions to report. Environment variable PROFILELINES=1 makes hotshot store information per each line, so it could be easily inspected later on. Output: Profiler stores its Stats into a file named after original script (sys.argv[0]) with suffix".prof" appended Usage: Replace unittest.main() with import runner Visualization: kcachegrind provides nice interactive GUI to inspect profiler results. If PROFILELINES was set to 1, it provides information per each line. To convert .prof file into a file suitable for kcachegrind, use utility hotshot2calltree which comes in package kcachegrind-converters. Example: # profile and output 3 most expensive function calls PROFILELEVEL=3 PROFILELINES=1 PYTHONPATH=../ python test_searchlight.py # convert to kcachegrind format hotshot2calltree -o test_searchlight.py.kcache test_searchlight.py.prof # inspect kcachegrind test_searchlight.py.kcache """ __test__ = False import unittest import sys from os import environ from mvpa2 import _random_seed profilelevel = None if environ.has_key('PROFILELEVEL'): profilelevel = int(environ['PROFILELEVEL']) # Extend TestProgram to print out the seed which was used class TestProgramPyMVPA(unittest.TestProgram): ##REF: Name was automagically refactored def run_tests(self): if self.verbosity: print "MVPA_SEED=%s:" % _random_seed, sys.stdout.flush() super(TestProgramPyMVPA, self).run_tests() if profilelevel is None: TestProgramPyMVPA() else: profilelines = environ.has_key('PROFILELINES') import hotshot, hotshot.stats pname = "%s.prof" % sys.argv[0] prof = hotshot.Profile(pname, lineevents=profilelines) try: # actually return values are never setup # since unittest.main sys.exit's benchtime, stones = prof.runcall( unittest.main ) except SystemExit: pass print "Saving profile data into %s" % pname prof.close() if profilelevel > 0: # we wanted to see the summary right here # instead of just storing it into a file print "Loading profile data from %s" % pname stats = hotshot.stats.load(pname) stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(profilelevel) pymvpa2-2.2.0/mvpa2/tests/test_args.py000066400000000000000000000054541202542755000176570ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA args helpers""" import unittest from mvpa2.misc.args import * if __debug__: from mvpa2.base import debug class ArgsHelpersTest(unittest.TestCase): def test_basic(self): """Test if we are not missing basic parts""" kwargs = {'a':1, 'slave_a':3, 'slave_z':4, 'slave_slave_z':5, 'c':3} res = split_kwargs(kwargs, ['slave_']) self.assertTrue(res.has_key('slave_') and res.has_key('')) self.assertTrue(res['slave_'] == {'a':3, 'z':4, 'slave_z':5}) self.assertTrue(res[''] == {'a':1, 'c':3}) res = split_kwargs(kwargs) self.assertTrue(res.keys() == ['']) self.assertTrue(res[''] == kwargs) def test_decorator(self): """Test the group_kwargs decorator""" selftop = self class C1(object): @group_kwargs(prefixes=['slave_'], assign=True) def __init__(self, **kwargs): selftop.failUnless(hasattr(self, '_slave_kwargs')) self.method_passedempty() self.method_passed(1, custom_p1=144, bugax=1) self.method_filtered(1, custom_p1=123) @group_kwargs(prefixes=['custom_'], passthrough=True) def method_passedempty(self, **kwargs): # we must have it even though it is empty selftop.failUnless('custom_kwargs' in kwargs) @group_kwargs(prefixes=['custom_', 'buga'], passthrough=True) def method_passed(self, a, custom_kwargs, bugakwargs, **kwargs): # we must have it even though it is empty selftop.failUnless(custom_kwargs == {'p1':144}) selftop.failUnless(bugakwargs == {'x':1}) selftop.failUnless(not hasattr(self, '_custom_kwargs')) @group_kwargs(prefixes=['custom_']) def method_filtered(self, a, **kwargs): # we must have it even though it is empty selftop.failUnlessEqual(a, 1) selftop.failUnless(not 'custom_kwargs' in kwargs) def method(self): return 123 @group_kwargs(prefixes=['xxx']) def method_decorated(self): return 124 c1 = C1(slave_p1=1, p1=2) self.assertTrue(c1.method() == 123) self.assertTrue(c1.method_decorated() == 124) def suite(): return unittest.makeSuite(ArgsHelpersTest) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_arraymapper.py000066400000000000000000000065551202542755000212510ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA dense array mapper""" from mvpa2.mappers.flatten import mask_mapper from mvpa2.featsel.base import StaticFeatureSelection from mvpa2.testing.tools import assert_raises, assert_equal, assert_array_equal import numpy as np def test_forward_dense_array_mapper(): mask = np.ones((3,2), dtype='bool') map_ = mask_mapper(mask) # test shape reports assert_equal(map_.forward1(mask).shape, (6,)) # test 1sample mapping assert_array_equal(map_.forward1(np.arange(6).reshape(3,2)), [0,1,2,3,4,5]) # test 4sample mapping foursample = map_.forward(np.arange(24).reshape(4,3,2)) assert_array_equal(foursample, [[0,1,2,3,4,5], [6,7,8,9,10,11], [12,13,14,15,16,17], [18,19,20,21,22,23]]) # check incomplete masks mask[1,1] = 0 map_ = mask_mapper(mask) assert_equal(map_.forward1(mask).shape, (5,)) assert_array_equal(map_.forward1(np.arange(6).reshape(3,2)), [0,1,2,4,5]) # check that it doesn't accept wrong dataspace assert_raises(ValueError, map_.forward, np.arange(4).reshape(2,2)) # check fail if neither mask nor shape assert_raises(ValueError, mask_mapper) # check that a full mask is automatically created when providing shape m = mask_mapper(shape=(2, 3, 4)) mp = m.forward1(np.arange(24).reshape(2, 3, 4)) assert_array_equal(mp, np.arange(24)) def test_reverse_dense_array_mapper(): mask = np.ones((3,2), dtype='bool') mask[1,1] = 0 map_ = mask_mapper(mask) rmapped = map_.reverse1(np.arange(1,6)) assert_equal(rmapped.shape, (3,2)) assert_equal(rmapped[1,1], 0) assert_equal(rmapped[2,1], 5) # check that it doesn't accept wrong dataspace assert_raises(ValueError, map_.forward, np.arange(6)) rmapped2 = map_.reverse(np.arange(1,11).reshape(2,5)) assert_equal(rmapped2.shape, (2,3,2)) assert_equal(rmapped2[0,1,1], 0 ) assert_equal(rmapped2[1,1,1], 0 ) assert_equal(rmapped2[0,2,1], 5 ) assert_equal(rmapped2[1,2,1], 10 ) def test_mapper_aliases(): mm=mask_mapper(np.ones((3,4,2), dtype='bool')) assert_array_equal(mm.forward(np.ones((2,3,4,2))), mm.forward(np.ones((2,3,4,2)))) def test_selects(): mask = np.ones((3,2), dtype='bool') mask[1,1] = 0 mask0 = mask.copy() data = np.arange(6).reshape(mask.shape) map_ = mask_mapper(mask) # check if any exception is thrown if we get # out of the outIds #assert_raises(IndexError, map_.select_out, [0,1,2,6]) # remove 1,2 map_.append(StaticFeatureSelection([0,3,4])) assert_array_equal(map_.forward1(data), [0, 4, 5]) # remove 1 more map_.append(StaticFeatureSelection([0,2])) assert_array_equal(map_.forward1(data), [0, 5]) # check if original mask wasn't perturbed assert_array_equal(mask, mask0) # check if original mask wasn't perturbed assert_array_equal(mask, mask0) pymvpa2-2.2.0/mvpa2/tests/test_atlases.py000066400000000000000000000145311202542755000203530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA atlases""" import unittest, re import numpy as np from mvpa2.testing import * skip_if_no_external('nibabel') skip_if_no_external('lxml') from mvpa2.base import externals from mvpa2.atlases import * import os from mvpa2 import pymvpa_dataroot """Basic tests for support of atlases such as the ones shipped with FSL """ def test_transformations(): """TODO""" raise SkipTest, "Please test application of transformations" @sweepargs(name=KNOWN_ATLASES.keys()) def test_atlases(name): """Basic testing of atlases""" #filename = KNOWN_ATLASES[name] % {'name': name} try: atlas = Atlas(name=name) except IOError, e: # so we just don't have it raise SkipTest('Skipped atlas %s due to %s' % (name, e)) #print isinstance(atlas.atlas, objectify.ObjectifiedElement) #print atlas.header.images.imagefile.get('offset') #print atlas.label_voxel( (0, -7, 20) ) #print atlas[ 0, 0, 0 ] coord = (-63, -12, 22) # Atlas must have at least 1 level and that one must # have some labels ok_(len(atlas.levels[0].labels) > 0) for res in [ atlas(coord), atlas.label_point(coord) ]: ok_(res.get('coord_queried', None) == coord, '%s: Comparison failed. Got %s and %s' % (name, res.get('coord_queried', None), coord)) ok_('labels' in res) # all atlases so far are based on voxels ok_('voxel_queried' in res) # test explicit level specification via slice, although bogus here # XXX levels in queries should be deprecated -- too much of # performance hit res0 = atlas(coord, range(atlas.nlevels)) ok_(res0 == res) #print atlas[ 0, -7, 20, [1,2,3] ] #print atlas[ (0, -7, 20), 1:2 ] #print atlas[ (0, -7, 20) ] #print atlas[ (0, -7, 20), : ] # print atlas.get_labels(0) def test_fsl_hox_queries(): skip_if_no_external('atlas_fsl') tshape = (182, 218, 182) # target shape of fsl atlas chosen by default atl = Atlas(name='HarvardOxford-Cortical') atl.levels[0].find('Frontal Pole') assert_equal(len(atl.find(re.compile('Fusiform'), unique=False)), 4) m = atl.get_map(1) assert_equal(m.shape, tshape) ok_(np.max(m)==100) ok_(np.min(m)==0) ms = atl.get_maps('Fusiform') assert_equal(len(ms), 4) for l, m in ms.iteritems(): assert_equal(m.shape, tshape) ms = atl.get_maps('ZaZaZa') ok_(not len(ms)) assert_raises(ValueError, atl.get_map, 'Fusiform') ok_(len(atl.find('Fusiform', unique=False)) == 4) ff_map = atl.get_map('Fusiform', strategy='max') assert_equal(ff_map.shape, tshape) # atlas has very unfortunate shape -- the same under .T ... heh heh # Lets validate either map is in correct orientation ok_(ff_map[119, 91, 52] > 60) ok_(ff_map[52, 91, 119] == 0) # Lets validate some coordinates queries r_gi = atl(-48, -75, 19) r_point = atl.label_point((-48, -75, 19)) r_voxel = atl.label_voxel((138, 51, 91)) # by default, __getitem__ queries coordinates in voxels ok_(r_voxel == atl[(138, 51, 91)] == atl[138, 51, 91]) # by default -- opens at highest-available resolution, # i.e. 1mm since a while ok_(atl.resolution == 1.) # by default, __call__ queries coordinates in space ok_(r_point == atl(-48, -75, 19) == atl((-48, -75, 19))) ok_(r_point['labels'] == r_voxel['labels'] == [[{'index': 21, 'prob': 64, 'label': 'Lateral Occipital Cortex, superior division'}, {'index': 22, 'prob': 22, 'label': 'Lateral Occipital Cortex, inferior division'}]]) ok_(r_point['voxel_atlas'] == r_point['voxel_queried'] == list(r_voxel['voxel_queried']) == [138, 51, 91]) # TODO: unify list/tuple in above -- r_point has lists # Test loading of custom atlas # for now just on the original file atl2 = Atlas(name='HarvardOxford-Cortical', image_file=atl._image_file) # we should get exactly the same maps from both in this dummy case ok_((atl.get_map('Frontal Pole') == atl2.get_map('Frontal Pole')).all()) # Lets falsify and feed some crammy file as the atlas atl2 = Atlas(name='HarvardOxford-Cortical', image_file=os.path.join(pymvpa_dataroot, 'example4d.nii.gz')) # we should get not even comparable maps now ;) ok_(atl.get_map('Frontal Pole').shape != atl2.get_map('Frontal Pole').shape) # Lets check unique resolution for the atlas maps = atl.get_maps('Fusiform') maps_max = atl.get_maps('Fusiform', overlaps='max') mk = maps.keys() ok_(set(mk) == set(maps_max.keys())) maps_ab = np.array([maps[k]!=0 for k in mk]) maps_max_ab = np.array([maps_max[k]!=0 for k in mk]) # We should have difference ok_(np.any(maps_ab != maps_max_ab)) maps_max_ab_sum = np.sum(maps_max_ab, axis=0) ok_(np.all(0<=maps_max_ab_sum)) ok_(np.all(maps_max_ab_sum<=1)) ok_(np.any(np.sum(maps_ab, axis=0)>1)) # we should still cover the same set of voxels assert_array_equal(np.max(maps_ab, axis=0), np.max(maps_max_ab, axis=0)) # Basic testing of Talairach atlases in its original space def test_pymvpa_talairach(): skip_if_no_external('atlas_pymvpa') atl = Atlas(name='talairach') atld = Atlas(name='talairach-dist', reference_level='Closest Gray', distance=10) p = [-22, -40, 8] pl = atl.label_point(p) pld = atld.label_point(p) ok_(np.any(pl['voxel_queried'] != pld['voxel_queried'])) ok_(pld['distance'] >0) # Common labels for l in pl, pld: assert_equal(l['labels'][0]['label'].text, 'Left Cerebrum') assert_equal(l['labels'][1]['label'].text, 'Sub-lobar') # different ones assert_equal(pl['labels'][3]['label'].text, 'Cerebro-Spinal Fluid') assert_equal(pld['labels'][3]['label'].text, 'Gray Matter') assert_equal(pl['labels'][4]['label'].text, 'None') assert_equal(pld['labels'][4]['label'].text, 'Caudate Tail') pymvpa2-2.2.0/mvpa2/tests/test_attrmap.py000066400000000000000000000104521202542755000203650ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## import numpy as np from mvpa2.testing.tools import assert_raises, ok_, assert_false, assert_equal, \ assert_array_equal from mvpa2.misc.attrmap import AttributeMap def test_attrmap(): map_default = {'eins': 0, 'zwei': 2, 'sieben': 1} map_custom = {'eins': 11, 'zwei': 22, 'sieben': 33} literal = ['eins', 'zwei', 'sieben', 'eins', 'sieben', 'eins'] literal_nonmatching = ['uno', 'dos', 'tres'] num_default = [0, 2, 1, 0, 1, 0] num_custom = [11, 22, 33, 11, 33, 11] # no custom mapping given am = AttributeMap() assert_false(am) ok_(len(am) == 0) assert_array_equal(am.to_numeric(literal), num_default) assert_array_equal(am.to_literal(num_default), literal) ok_(am) ok_(len(am) == 3) # # Tests for recursive mapping + preserving datatype class myarray(np.ndarray): pass assert_raises(KeyError, am.to_literal, [(1, 2), 2, 0]) literal_fancy = [(1, 2), 2, [0], np.array([0, 1]).view(myarray)] literal_fancy_tuple = tuple(literal_fancy) literal_fancy_array = np.array(literal_fancy, dtype=object) for l in (literal_fancy, literal_fancy_tuple, literal_fancy_array): res = am.to_literal(l, recurse=True) assert_equal(res[0], ('sieben', 'zwei')) assert_equal(res[1], 'zwei') assert_equal(res[2], ['eins']) assert_array_equal(res[3], ['eins', 'sieben']) # types of result and subsequences should be preserved ok_(isinstance(res, l.__class__)) ok_(isinstance(res[0], tuple)) ok_(isinstance(res[1], str)) ok_(isinstance(res[2], list)) ok_(isinstance(res[3], myarray)) # yet another example a = np.empty(1, dtype=object) a[0] = (0, 1) res = am.to_literal(a, recurse=True) ok_(isinstance(res[0], tuple)) # # with custom mapping am = AttributeMap(map=map_custom) assert_array_equal(am.to_numeric(literal), num_custom) assert_array_equal(am.to_literal(num_custom), literal) # if not numeric nothing is mapped assert_array_equal(am.to_numeric(num_custom), num_custom) # even if the map doesn't fit assert_array_equal(am.to_numeric(num_default), num_default) # need to_numeric first am = AttributeMap() assert_raises(RuntimeError, am.to_literal, [1,2,3]) # stupid args assert_raises(ValueError, AttributeMap, map=num_custom) # map mismatch am = AttributeMap(map=map_custom) if __debug__: # checked only in __debug__ assert_raises(KeyError, am.to_numeric, literal_nonmatching) # needs reset and should work afterwards am.clear() assert_array_equal(am.to_numeric(literal_nonmatching), [2, 0, 1]) # and now reverse am = AttributeMap(map=map_custom) assert_raises(KeyError, am.to_literal, num_default) # dict-like interface am = AttributeMap() ok_([(k, v) for k, v in am.iteritems()] == []) def test_attrmap_conflicts(): am_n = AttributeMap({'a':1, 'b':2, 'c':1}) am_t = AttributeMap({'a':1, 'b':2, 'c':1}, collisions_resolution='tuple') am_l = AttributeMap({'a':1, 'b':2, 'c':1}, collisions_resolution='lucky') q_f = ['a', 'b', 'a', 'c'] # should have no effect on forward mapping ok_(np.all(am_n.to_numeric(q_f) == am_t.to_numeric(q_f))) ok_(np.all(am_t.to_numeric(q_f) == am_l.to_numeric(q_f))) assert_raises(ValueError, am_n.to_literal, [2]) r_t = am_t.to_literal([2, 1]) r_l = am_l.to_literal([2, 1]) def test_attrmap_repr(): assert_equal(repr(AttributeMap()), "AttributeMap()") assert_equal(repr(AttributeMap(dict(a=2, b=1))), "AttributeMap({'a': 2, 'b': 1})") assert_equal(repr(AttributeMap(dict(a=2, b=1), mapnumeric=True)), "AttributeMap({'a': 2, 'b': 1}, mapnumeric=True)") assert_equal(repr(AttributeMap(dict(a=2, b=1), mapnumeric=True, collisions_resolution='tuple')), "AttributeMap({'a': 2, 'b': 1}, mapnumeric=True, collisions_resolution='tuple')") pymvpa2-2.2.0/mvpa2/tests/test_base.py000066400000000000000000000021321202542755000176230ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Test some base functionality which did not make it into a separate unittests""" import os import unittest from mvpa2.testing.tools import * from mvpa2.base.info import wtf @with_tempfile() def test_wtf(filename): """Very basic testing -- just to see if it doesn't crash""" sinfo = str(wtf()) sinfo_excludes = str(wtf(exclude=['process'])) ok_(len(sinfo) > len(sinfo_excludes)) ok_(not 'Process Info' in sinfo_excludes) # check if we could store and load it back wtf(filename) try: sinfo_from_file = '\n'.join(open(filename, 'r').readlines()) except Exception, e: raise AssertionError( 'Testing of loading from a stored a file has failed: %r' % (e,)) pymvpa2-2.2.0/mvpa2/tests/test_boxcarmapper.py000066400000000000000000000153771202542755000214130ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Boxcar mapper""" import numpy as np from mvpa2.testing.tools import ok_, assert_raises, assert_false, assert_equal, \ assert_true, assert_array_equal from mvpa2.mappers.boxcar import BoxcarMapper from mvpa2.datasets import Dataset from mvpa2.mappers.flatten import FlattenMapper from mvpa2.mappers.base import ChainMapper def test_simpleboxcar(): data = np.atleast_2d(np.arange(10)).T sp = np.arange(10) # check if stupid thing don't work assert_raises(ValueError, BoxcarMapper, sp, 0) # now do an identity transformation bcm = BoxcarMapper(sp, 1) trans = bcm.forward(data) # ,0 is a feature below, so we get explicit 2D out of 1D assert_array_equal(trans[:,0], data) # now check for illegal boxes if __debug__: # condition is checked only in __debug__ assert_raises(ValueError, BoxcarMapper(sp, 2).train, data) # now something that should work nbox = 9 boxlength = 2 sp = np.arange(nbox) bcm = BoxcarMapper(sp, boxlength) trans = bcm.forward(data) # check that is properly upcasts the dimensionality assert_equal(trans.shape, (nbox, boxlength) + data.shape[1:]) # check actual values, squeezing the last dim for simplicity assert_array_equal(trans.squeeze(), np.vstack((np.arange(9), np.arange(9)+1)).T) # now test for proper data shape data = np.ones((10,3,4,2)) sp = [ 2, 4, 3, 5 ] trans = BoxcarMapper(sp, 4).forward(data) assert_equal(trans.shape, (4,4,3,4,2)) # test reverse data = np.arange(240).reshape(10, 3, 4, 2) sp = [ 2, 4, 3, 5 ] boxlength = 2 m = BoxcarMapper(sp, boxlength) m.train(data) mp = m.forward(data) assert_equal(mp.shape, (4, 2, 3, 4, 2)) # try full reconstruct mr = m.reverse(mp) # shape has to match assert_equal(mr.shape, (len(sp) * boxlength,) + data.shape[1:]) # only known samples are part of the results assert_true((mr >= 24).all()) assert_true((mr < 168).all()) # check proper reconstruction of non-conflicting sample assert_array_equal(mr[0].ravel(), np.arange(48, 72)) # check proper reconstruction of samples being part of multiple # mapped samples assert_array_equal(mr[1].ravel(), np.arange(72, 96)) # test reverse of a single sample singlesample = np.arange(48).reshape(2, 3, 4, 2) assert_array_equal(singlesample, m.reverse1(singlesample)) # now in a dataset ds = Dataset([singlesample]) assert_equal(ds.shape, (1,) + singlesample.shape) # after reverse mapping the 'sample axis' should vanish and the original 3d # shape of the samples should be restored assert_equal(ds.shape[1:], m.reverse(ds).shape) # multiple samples should just be concatenated along the samples axis ds = Dataset([singlesample, singlesample]) assert_equal((np.prod(ds.shape[:2]),) + singlesample.shape[1:], m.reverse(ds).shape) # should not work for shape mismatch, but it does work and is useful when # reverse mapping sample attributes #assert_raises(ValueError, m.reverse, singlesample[0]) # check broadcasting of 'raw' samples into proper boxcars on forward() bc = m.forward1(np.arange(24).reshape(3, 4, 2)) assert_array_equal(bc, np.array(2 * [np.arange(24).reshape(3, 4, 2)])) def test_datasetmapping(): # 6 samples, 4X2 features data = np.arange(48).reshape(6,4,2) ds = Dataset(data, sa={'timepoints': np.arange(6), 'multidim': data.copy()}, fa={'fid': np.arange(4)}) # with overlapping and non-overlapping boxcars startpoints = [0, 1, 4] boxlength = 2 bm = BoxcarMapper(startpoints, boxlength, space='boxy') # train is critical bm.train(ds) mds = bm.forward(ds) assert_equal(len(mds), len(startpoints)) assert_equal(mds.nfeatures, boxlength) # all samples attributes remain, but the can rotated/compressed into # multidimensional attributes assert_equal(sorted(mds.sa.keys()), ['boxy_onsetidx'] + sorted(ds.sa.keys())) assert_equal(mds.sa.multidim.shape, (len(startpoints), boxlength) + ds.shape[1:]) assert_equal(mds.sa.timepoints.shape, (len(startpoints), boxlength)) assert_array_equal(mds.sa.timepoints.flatten(), np.array([(s, s+1) for s in startpoints]).flatten()) assert_array_equal(mds.sa.boxy_onsetidx, startpoints) # feature attributes also get rotated and broadcasted assert_array_equal(mds.fa.fid, [ds.fa.fid, ds.fa.fid]) # and finally there is a new one assert_array_equal(mds.fa.boxy_offsetidx, range(boxlength)) # now see how it works on reverse() rds = bm.reverse(mds) # we got at least something of all original attributes back assert_equal(sorted(rds.sa.keys()), sorted(ds.sa.keys())) assert_equal(sorted(rds.fa.keys()), sorted(ds.fa.keys())) # it is not possible to reconstruct the full samples array # some samples even might show up multiple times (when there are overlapping # boxcars assert_array_equal(rds.samples, np.array([[[ 0, 1], [ 2, 3], [ 4, 5], [ 6, 7]], [[ 8, 9], [10, 11], [12, 13], [14, 15]], [[ 8, 9], [10, 11], [12, 13], [14, 15]], [[16, 17], [18, 19], [20, 21], [22, 23]], [[32, 33], [34, 35], [36, 37], [38, 39]], [[40, 41], [42, 43], [44, 45], [46, 47]]])) assert_array_equal(rds.sa.timepoints, [0, 1, 1, 2, 4, 5]) assert_array_equal(rds.sa.multidim, ds.sa.multidim[rds.sa.timepoints]) # but feature attributes should be fully recovered assert_array_equal(rds.fa.fid, ds.fa.fid) # popular dataset configuration (double flatten + boxcar) cm= ChainMapper([FlattenMapper(), bm, FlattenMapper()]) cm.train(ds) bflat = ds.get_mapped(cm) assert_equal(bflat.shape, (len(startpoints), boxlength * np.prod(ds.shape[1:]))) # add attributes bflat.fa['testfa'] = np.arange(bflat.nfeatures) bflat.sa['testsa'] = np.arange(bflat.nsamples) # now try to go back bflatrev = bflat.mapper.reverse(bflat) # data should be same again, as far as the boxcars match assert_array_equal(ds.samples[:2], bflatrev.samples[:2]) assert_array_equal(ds.samples[-2:], bflatrev.samples[-2:]) # feature axis should match assert_equal(ds.shape[1:], bflatrev.shape[1:]) pymvpa2-2.2.0/mvpa2/tests/test_clf.py000066400000000000000000001333771202542755000174750ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA basic Classifiers""" import numpy as np from mvpa2.testing import * from mvpa2.testing import _ENFORCE_CA_ENABLED from mvpa2.testing.datasets import * from mvpa2.testing.clfs import * from mvpa2.support.copy import deepcopy from mvpa2.base import externals from mvpa2.datasets.base import dataset_wizard from mvpa2.generators.partition import NFoldPartitioner, OddEvenPartitioner from mvpa2.generators.permutation import AttributePermutator from mvpa2.generators.splitters import Splitter from mvpa2.misc.exceptions import UnknownStateError from mvpa2.misc.errorfx import mean_mismatch_error from mvpa2.base.learner import DegenerateInputError, FailedToTrainError, \ FailedToPredictError from mvpa2.clfs.meta import CombinedClassifier, \ BinaryClassifier, MulticlassClassifier, \ SplitClassifier, MappedClassifier, FeatureSelectionClassifier, \ TreeClassifier, RegressionAsClassifier, MaximalVote from mvpa2.measures.base import TransferMeasure, ProxyMeasure, CrossValidation from mvpa2.mappers.flatten import mask_mapper from mvpa2.misc.attrmap import AttributeMap from mvpa2.mappers.fx import mean_sample, BinaryFxNode # What exceptions to allow while testing degenerate cases. # If it pukes -- it is ok -- user will notice that something # is wrong _degenerate_allowed_exceptions = [ DegenerateInputError, FailedToTrainError, FailedToPredictError] class ClassifiersTests(unittest.TestCase): def setUp(self): self.clf_sign = SameSignClassifier() self.clf_less1 = Less1Classifier() # simple binary dataset self.data_bin_1 = dataset_wizard( samples=[[0,0],[-10,-1],[1,0.1],[1,-1],[-1,1]], targets=[1, 1, 1, -1, -1], # labels chunks=[0, 1, 2, 2, 3]) # chunks def _get_clf_ds(self, clf): """Little helper to provide a dataset for classifier testing For some classifiers (e.g. density modeling ones, such as QDA) it is mandatory to provide enough samples to more or less adequately model the distributions, thus "large" dataset would be provided instead of the default medium. Also choosing large one for the classifiers with feature-selection since some feature selections might rely on a % of features, which would be degenerate in a small dataset """ # unfortunately python 2.5 doesn't have 'isdisjoint' #return {True: 'medium', # False: 'large'}[ # set(['lda', 'qda', 'feature_selection']).isdisjoint(clf.__tags__)] if 'lda' in clf.__tags__ or 'qda' in clf.__tags__ \ or 'feature_selection' in clf.__tags__: return 'large' else: return 'medium' def test_dummy(self): clf = SameSignClassifier(enable_ca=['training_stats']) clf.train(self.data_bin_1) self.assertRaises(UnknownStateError, clf.ca.__getattribute__, "predictions") """Should have no predictions after training. Predictions state should be explicitely disabled""" if not _ENFORCE_CA_ENABLED: self.assertRaises(UnknownStateError, clf.ca.__getattribute__, "trained_dataset") self.assertEqual(clf.ca.training_stats.percent_correct, 100, msg="Dummy clf should train perfectly") self.assertEqual(clf.predict(self.data_bin_1.samples), list(self.data_bin_1.targets)) self.assertEqual(len(clf.ca.predictions), self.data_bin_1.nsamples, msg="Trained classifier stores predictions by default") clf = SameSignClassifier(enable_ca=['trained_dataset']) clf.train(self.data_bin_1) assert_array_equal(clf.ca.trained_dataset.samples, self.data_bin_1.samples) assert_array_equal(clf.ca.trained_dataset.targets, self.data_bin_1.targets) def test_boosted(self): # XXXXXXX # silly test if we get the same result with boosted as with a single one bclf = CombinedClassifier(clfs=[self.clf_sign.clone(), self.clf_sign.clone()]) self.assertEqual(list(bclf.predict(self.data_bin_1.samples)), list(self.data_bin_1.targets), msg="Boosted classifier should work") self.assertEqual(bclf.predict(self.data_bin_1.samples), self.clf_sign.predict(self.data_bin_1.samples), msg="Boosted classifier should have the same as regular") def test_boosted_state_propagation(self): bclf = CombinedClassifier(clfs=[self.clf_sign.clone(), self.clf_sign.clone()], enable_ca=['training_stats']) # check ca enabling propagation self.assertEqual(self.clf_sign.ca.is_enabled('training_stats'), _ENFORCE_CA_ENABLED) self.assertEqual(bclf.clfs[0].ca.is_enabled('training_stats'), True) bclf2 = CombinedClassifier(clfs=[self.clf_sign.clone(), self.clf_sign.clone()], propagate_ca=False, enable_ca=['training_stats']) self.assertEqual(self.clf_sign.ca.is_enabled('training_stats'), _ENFORCE_CA_ENABLED) self.assertEqual(bclf2.clfs[0].ca.is_enabled('training_stats'), _ENFORCE_CA_ENABLED) def test_binary_decorator(self): ds = dataset_wizard(samples=[ [0,0], [0,1], [1,100], [-1,0], [-1,-3], [ 0,-10] ], targets=[ 'sp', 'sp', 'sp', 'dn', 'sn', 'dp']) testdata = [ [0,0], [10,10], [-10, -1], [0.1, -0.1], [-0.2, 0.2] ] # labels [s]ame/[d]ifferent (sign), and [p]ositive/[n]egative first element clf = SameSignClassifier() # lets create classifier to descriminate only between same/different, # which is a primary task of SameSignClassifier bclf1 = BinaryClassifier(clf=clf, poslabels=['sp', 'sn'], neglabels=['dp', 'dn']) orig_labels = ds.targets[:] bclf1.train(ds) self.assertTrue(bclf1.predict(testdata) == [['sp', 'sn'], ['sp', 'sn'], ['sp', 'sn'], ['dn', 'dp'], ['dn', 'dp']]) self.assertTrue((ds.targets == orig_labels).all(), msg="BinaryClassifier should not alter labels") # TODO: XXX finally just make regression/clf separation cleaner @sweepargs(clf=clfswh[:]) def test_classifier_generalization(self, clf): """Simple test if classifiers can generalize ok on simple data """ te = CrossValidation(clf, NFoldPartitioner(), postproc=mean_sample()) # check the default #self.assertTrue(te.transerror.errorfx is mean_mismatch_error) nclasses = 2 * (1 + int('multiclass' in clf.__tags__)) ds = datasets['uni%d%s' % (nclasses, self._get_clf_ds(clf))] try: cve = te(ds).samples.squeeze() except Exception, e: self.fail("Failed with %s" % e) if cfg.getboolean('tests', 'labile', default='yes'): if nclasses > 2 and \ ((clf.descr is not None and 'on 5%(' in clf.descr) or 'regression_based' in clf.__tags__): # skip those since they are barely applicable/testable here raise SkipTest("Skip testing of cve on %s" % clf) self.assertTrue(cve < 0.25, # TODO: use multinom distribution msg="Got transfer error %g on %s with %d labels" % (cve, ds, len(ds.UT))) # yoh: I guess we have skipped meta constructs because they would # need targets attribute specified in both slave and wrapper @sweepargs(lrn=clfswh['!meta']+regrswh['!meta']) @reseed_rng() def test_custom_targets(self, lrn): """Simple test if a learner could cope with custom sa not targets """ # Since we are comparing performances of two learners, we need # to assure that if they depend on some random seed -- they # would use the same value. Currently we have such stochastic # behavior in SMLR if 'seed' in lrn.params: from mvpa2 import _random_seed lrn = lrn.clone() # clone the beast lrn.params.seed = _random_seed # reuse the same seed lrn_ = lrn.clone() lrn_.set_space('custom') te = CrossValidation(lrn, NFoldPartitioner()) te_ = CrossValidation(lrn_, NFoldPartitioner()) nclasses = 2 * (1 + int('multiclass' in lrn.__tags__)) dsname = ('uni%dsmall' % nclasses, 'sin_modulated')[int(lrn.__is_regression__)] ds = datasets[dsname] ds_ = ds.copy() ds_.sa['custom'] = ds_.sa['targets'] ds_.sa.pop('targets') self.assertTrue('targets' in ds.sa, msg="'targets' should remain in original ds") try: cve = te(ds) cve_ = te_(ds_) except Exception, e: self.fail("Failed with %r" % e) assert_array_almost_equal(cve, cve_) "We should have got very similar errors while operating on " "'targets' and on 'custom'. Got %r and %r." % (cve, cve_) # TODO: sg/libsvm segfaults # GPR -- non-linear sensitivities if ('has_sensitivity' in lrn.__tags__ and not 'libsvm' in lrn.__tags__ and not ('gpr' in lrn.__tags__ and 'non-linear' in lrn.__tags__) ): ## if str(lrn) == "SVM(svm_impl='EPSILON_SVR', kernel=LinearLSKernel())": ## # TODO investigate segfault ## import pydb ## pydb.debugger() s = lrn.get_sensitivity_analyzer()(ds) s_ = lrn_.get_sensitivity_analyzer()(ds_) isreg = lrn.__is_regression__ # ^ is XOR so we shouldn't get get those sa's in # regressions at all self.assertTrue(('custom' in s_.sa) ^ isreg) self.assertTrue(('targets' in s.sa) ^ isreg) self.assertTrue(not 'targets' in s_.sa) self.assertTrue(not 'custom' in s.sa) if not 'smlr' in lrn.__tags__ or \ cfg.getboolean('tests', 'labile', default='yes'): assert_array_almost_equal(s.samples, s_.samples) @sweepargs(clf=clfswh[:] + regrswh[:]) def test_summary(self, clf): """Basic testing of the clf summary """ summary1 = clf.summary() self.assertTrue('not yet trained' in summary1) # Need 2 different datasets for regressions/classifiers dsname = ('uni2small', 'sin_modulated')[int(clf.__is_regression__)] clf.train(datasets[dsname]) summary = clf.summary() # It should get bigger ;) self.assertTrue(len(summary) > len(summary1)) self.assertTrue(not 'not yet trained' in summary) @sweepargs(clf=clfswh[:] + regrswh[:]) def test_degenerate_usage(self, clf): """Test how clf handles degenerate cases """ # Whenever we have only 1 feature with only 0s in it ds1 = datasets['uni2small'][:, [0]] # XXX this very line breaks LARS in many other unittests -- # very interesting effect. but screw it -- for now it will be # this way ds1.samples[:] = 0.0 # all 0s # For regression we need numbers if clf.__is_regression__: ds1.targets = AttributeMap().to_numeric(ds1.targets) #ds2 = datasets['uni2small'][[0], :] #ds2.samples[:] = 0.0 # all 0s clf.ca.change_temporarily( enable_ca=['estimates', 'training_stats']) # Good pukes are good ;-) # TODO XXX add # - ", ds2):" to test degenerate ds with 1 sample # - ds1 but without 0s -- just 1 feature... feature selections # might lead to 'surprises' due to magic in combiners etc for ds in (ds1, ): try: try: clf.train(ds) # should not crash or stall except (ValueError), e: self.fail("Failed to train on degenerate data. Error was %r" % e) except DegenerateInputError: # so it realized that data is degenerate and puked continue # could we still get those? _ = clf.summary() cm = clf.ca.training_stats # If succeeded to train/predict (due to # training_stats) without error -- results better be # at "chance" continue if 'ACC' in cm.stats: self.assertEqual(cm.stats['ACC'], 0.5) else: self.assertTrue(np.isnan(cm.stats['CCe'])) except tuple(_degenerate_allowed_exceptions): pass clf.ca.reset_changed_temporarily() # TODO: sg - remove our limitations, meta, lda, qda and skl -- also @sweepargs(clf=clfswh['!sg', '!plr', '!meta', '!lda', '!qda', '!glmnet']) def test_single_class(self, clf): """Test if binary and multiclass can handle single class training/testing """ ds = datasets['uni2small'] ds = ds[ds.sa.targets == 'L0'] # only 1 label assert(ds.sa['targets'].unique == ['L0']) ds_ = list(OddEvenPartitioner().generate(ds))[0] # Here is our "nice" 0.6 substitute for TransferError: trerr = TransferMeasure(clf, Splitter('train'), postproc=BinaryFxNode(mean_mismatch_error, 'targets')) try: err = np.asscalar(trerr(ds_)) except Exception, e: self.fail(str(e)) self.assertTrue(err == 0.) # TODO: validate for regressions as well!!! def test_split_classifier(self): ds = self.data_bin_1 clf = SplitClassifier(clf=SameSignClassifier(), enable_ca=['stats', 'training_stats', 'feature_ids']) clf.train(ds) # train the beast error = clf.ca.stats.error tr_error = clf.ca.training_stats.error clf2 = clf.clone() cv = CrossValidation(clf2, NFoldPartitioner(), postproc=mean_sample(), enable_ca=['stats', 'training_stats']) cverror = cv(ds) cverror = cverror.samples.squeeze() tr_cverror = cv.ca.training_stats.error self.assertEqual(error, cverror, msg="We should get the same error using split classifier as" " using CrossValidation. Got %s and %s" % (error, cverror)) self.assertEqual(tr_error, tr_cverror, msg="We should get the same training error using split classifier as" " using CrossValidation. Got %s and %s" % (tr_error, tr_cverror)) self.assertEqual(clf.ca.stats.percent_correct, 100, msg="Dummy clf should train perfectly") # CV and SplitClassifier should get the same confusion matrices assert_array_equal(clf.ca.stats.matrix, cv.ca.stats.matrix) self.assertEqual(len(clf.ca.stats.sets), len(ds.UC), msg="Should have 1 confusion per each split") self.assertEqual(len(clf.clfs), len(ds.UC), msg="Should have number of classifiers equal # of epochs") self.assertEqual(clf.predict(ds.samples), list(ds.targets), msg="Should classify correctly") # feature_ids must be list of lists, and since it is not # feature-selecting classifier used - we expect all features # to be utilized # NOT ANYMORE -- for BoostedClassifier we have now union of all # used features across slave classifiers. That makes # semantics clear. If you need to get deeper -- use upcoming # harvesting facility ;-) # self.assertEqual(len(clf.feature_ids), len(ds.uniquechunks)) # self.assertTrue(np.array([len(ids)==ds.nfeatures # for ids in clf.feature_ids]).all()) # Just check if we get it at all ;-) summary = clf.summary() @sweepargs(clf_=clfswh['binary', '!meta']) def test_split_classifier_extended(self, clf_): clf2 = clf_.clone() ds = datasets['uni2%s' % self._get_clf_ds(clf2)] clf = SplitClassifier(clf=clf_, #SameSignClassifier(), enable_ca=['stats', 'feature_ids']) clf.train(ds) # train the beast error = clf.ca.stats.error cv = CrossValidation(clf2, NFoldPartitioner(), postproc=mean_sample(), enable_ca=['stats', 'training_stats']) cverror = cv(ds).samples.squeeze() if not 'non-deterministic' in clf.__tags__: self.assertTrue(abs(error-cverror)<0.01, msg="We should get the same error using split classifier as" " using CrossValidation. Got %s and %s" % (error, cverror)) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(error < 0.25, msg="clf should generalize more or less fine. " "Got error %s" % error) self.assertEqual(len(clf.ca.stats.sets), len(ds.UC), msg="Should have 1 confusion per each split") self.assertEqual(len(clf.clfs), len(ds.UC), msg="Should have number of classifiers equal # of epochs") #self.assertEqual(clf.predict(ds.samples), list(ds.targets), # msg="Should classify correctly") def test_mapped_classifier(self): samples = np.array([ [ 0, 0, -1], [ 1, 0, 1], [-1, -1, 1], [-1, 0, 1], [ 1, -1, 1] ]) for mask, res in (([1, 1, 0], [ 1, 1, 1, -1, -1]), ([1, 0, 1], [-1, 1, -1, -1, 1]), ([0, 1, 1], [-1, 1, -1, 1, -1])): clf = MappedClassifier(clf=self.clf_sign, mapper=mask_mapper(np.array(mask, dtype=bool))) self.assertEqual(clf.predict(samples), res) def test_feature_selection_classifier(self): from mvpa2.featsel.base import \ SensitivityBasedFeatureSelection from mvpa2.featsel.helpers import \ FixedNElementTailSelector # should give lowest weight to the feature with lowest index sens_ana = SillySensitivityAnalyzer() # should give lowest weight to the feature with highest index sens_ana_rev = SillySensitivityAnalyzer(mult=-1) # corresponding feature selections feat_sel = SensitivityBasedFeatureSelection(sens_ana, FixedNElementTailSelector(1, mode='discard')) feat_sel_rev = SensitivityBasedFeatureSelection(sens_ana_rev, FixedNElementTailSelector(1)) samples = np.array([ [0, 0, -1], [1, 0, 1], [-1, -1, 1], [-1, 0, 1], [1, -1, 1] ]) testdata3 = dataset_wizard(samples=samples, targets=1) # dummy train data so proper mapper gets created traindata = dataset_wizard(samples=np.array([ [0, 0, -1], [1, 0, 1] ]), targets=[1, 2]) # targets res110 = [1, 1, 1, -1, -1] res011 = [-1, 1, -1, 1, -1] # first classifier -- 0th feature should be discarded clf011 = FeatureSelectionClassifier(self.clf_sign, feat_sel, enable_ca=['feature_ids']) self.clf_sign.ca.change_temporarily(enable_ca=['estimates']) clf011.train(traindata) self.assertEqual(clf011.predict(testdata3.samples), res011) # just silly test if we get values assigned in the 'ProxyClassifier' self.assertTrue(len(clf011.ca.estimates) == len(res110), msg="We need to pass values into ProxyClassifier") self.clf_sign.ca.reset_changed_temporarily() self.assertEqual(clf011.mapper._oshape, (2,)) "Feature selection classifier had to be trained on 2 features" # first classifier -- last feature should be discarded clf011 = FeatureSelectionClassifier(self.clf_sign, feat_sel_rev) clf011.train(traindata) self.assertEqual(clf011.predict(testdata3.samples), res110) def test_feature_selection_classifier_with_regression(self): from mvpa2.featsel.base import \ SensitivityBasedFeatureSelection from mvpa2.featsel.helpers import \ FixedNElementTailSelector if sample_clf_reg is None: # none regression was found, so nothing to test return # should give lowest weight to the feature with lowest index sens_ana = SillySensitivityAnalyzer() # corresponding feature selections feat_sel = SensitivityBasedFeatureSelection(sens_ana, FixedNElementTailSelector(1, mode='discard')) # now test with regression-based classifier. The problem is # that it is determining predictions twice from values and # then setting the values from the results, which the second # time is set to predictions. The final outcome is that the # values are actually predictions... dat = dataset_wizard(samples=np.random.randn(4, 10), targets=[-1, -1, 1, 1]) clf_reg = FeatureSelectionClassifier(sample_clf_reg, feat_sel) clf_reg.train(dat) _ = clf_reg.predict(dat.samples) self.failIf((np.array(clf_reg.ca.estimates) - clf_reg.ca.predictions).sum()==0, msg="Values were set to the predictions in %s." % sample_clf_reg) @reseed_rng() def test_tree_classifier(self): """Basic tests for TreeClassifier """ ds = datasets['uni4medium'] # make it simple of the beast -- take only informative ones # because classifiers for the tree are selected randomly, so # performance varies a lot and we just need to check on # correct operation ds = ds[:, ds.fa.nonbogus_targets != [None]] clfs = clfswh['binary'] # pool of classifiers # Lets permute so each time we try some different combination # of the classifiers but exclude those operating on %s of # features since we might not have enough for that clfs = [clfs[i] for i in np.random.permutation(len(clfs)) if not '%' in str(clfs[i])] # NB: It is necessary that the same classifier was not used at # different nodes, since it would be re-trained for a new set # of targets, thus leading to incorrect behavior/high error. # # Clone only those few leading ones which we will use # throughout the test clfs = [clf.clone() for clf in clfs[:4]] # Test conflicting definition tclf = TreeClassifier(clfs[0], { 'L0+2' : (('L0', 'L2'), clfs[1]), 'L2+3' : (('L2', 'L3'), clfs[2])}) self.assertRaises(ValueError, tclf.train, ds) """Should raise exception since label 2 is in both""" # Test insufficient definition tclf = TreeClassifier(clfs[0], { 'L0+5' : (('L0', 'L5'), clfs[1]), 'L2+3' : (('L2', 'L3'), clfs[2])}) self.assertRaises(ValueError, tclf.train, ds) """Should raise exception since no group for L1""" # proper definition now tclf = TreeClassifier(clfs[0], { 'L0+1' : (('L0', 'L1'), clfs[1]), 'L2+3' : (('L2', 'L3'), clfs[2])}) # Lets test train/test cycle using CVTE cv = CrossValidation(tclf, OddEvenPartitioner(), postproc=mean_sample(), enable_ca=['stats', 'training_stats']) cverror = cv(ds).samples.squeeze() try: rtclf = repr(tclf) except: self.fail(msg="Could not obtain repr for TreeClassifier") # Test accessibility of .clfs self.assertTrue(tclf.clfs['L0+1'] is clfs[1]) self.assertTrue(tclf.clfs['L2+3'] is clfs[2]) cvtrc = cv.ca.training_stats cvtc = cv.ca.stats if cfg.getboolean('tests', 'labile', default='yes'): # just a dummy check to make sure everything is working self.assertTrue(cvtrc != cvtc) self.assertTrue(cverror < 0.3, msg="Got too high error = %s using %s" % (cverror, tclf)) # Test trailing nodes with no classifier # That is why we use separate pool of classifiers here # (that is probably old/not-needed since switched to use clones) clfs_mc = clfswh['multiclass'] # pool of classifiers clfs_mc = [clfs_mc[i] for i in np.random.permutation(len(clfs_mc)) if not '%' in str(clfs_mc[i])] clfs_mc = [clf.clone() for clf in clfs_mc[:4]] # and clones again tclf = TreeClassifier(clfs_mc[0], { 'L0' : (('L0',), None), 'L1+2+3' : (('L1', 'L2', 'L3'), clfs_mc[1])}) cv = CrossValidation(tclf, OddEvenPartitioner(), postproc=mean_sample(), enable_ca=['stats', 'training_stats']) cverror = np.asscalar(cv(ds)) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(cverror < 0.3, msg="Got too high error = %s using %s" % (cverror, tclf)) @sweepargs(clf=clfswh[:]) def test_values(self, clf): if isinstance(clf, MulticlassClassifier): # TODO: handle those values correctly return ds = datasets['uni2small'] clf.ca.change_temporarily(enable_ca = ['estimates']) cv = CrossValidation(clf, OddEvenPartitioner(), enable_ca=['stats', 'training_stats']) _ = cv(ds) #print clf.descr, clf.values[0] # basic test either we get 1 set of values per each sample self.assertEqual(len(clf.ca.estimates), ds.nsamples/2) clf.ca.reset_changed_temporarily() @sweepargs(clf=clfswh['linear', 'svm', 'libsvm', '!meta']) def test_multiclass_classifier(self, clf): oldC = None # XXX somewhat ugly way to force non-dataspecific C value. # Otherwise multiclass libsvm builtin and our MultiClass would differ # in results if clf.params.has_key('C') and clf.params.C<0: oldC = clf.params.C clf.params.C = 1.0 # reset C to be 1 svm, svm2 = clf, clf.clone() svm2.ca.enable(['training_stats']) mclf = MulticlassClassifier(clf=svm, enable_ca=['training_stats']) # with explicit MaximalVote with the conditional attributes # enabled mclf_mv = MulticlassClassifier(clf=svm, combiner=MaximalVote(enable_ca=['estimates', 'predictions']), enable_ca=['training_stats']) for clf_ in svm2, mclf, mclf_mv: clf_.train(datasets['uni2small']) s1 = str(mclf.ca.training_stats) s2 = str(svm2.ca.training_stats) s3 = str(mclf_mv.ca.training_stats) self.assertEqual(s1, s2, msg="Multiclass clf should provide same results as built-in " "libsvm's %s. Got %s and %s" % (svm2, s1, s2)) self.assertEqual(s1, s3, msg="%s should have used maxvote resolver by default" "so results should have been identical. Got %s and %s" % (mclf, s1, s3)) assert_equal(len(mclf_mv.combiner.ca.estimates), len(mclf_mv.combiner.ca.predictions)) # They should have came from assessing training_stats ca being # enabled # recompute accuracy on predictions for training_stats training_acc = np.sum(mclf_mv.combiner.ca.predictions == datasets['uni2small'].targets) \ / float(len(datasets['uni2small'])) # should match assert_equal(mclf_mv.ca.training_stats.stats['ACC'], training_acc) svm2.untrain() self.assertTrue(svm2.trained == False, msg="Un-Trained SVM should be untrained") self.assertTrue(np.array([x.trained for x in mclf.clfs]).all(), msg="Trained Boosted classifier should have all primary classifiers trained") self.assertTrue(mclf.trained, msg="Trained Boosted classifier should be marked as trained") mclf.untrain() self.assertTrue(not mclf.trained, msg="UnTrained Boosted classifier should not be trained") self.assertTrue(not np.array([x.trained for x in mclf.clfs]).any(), msg="UnTrained Boosted classifier should have no primary classifiers trained") if oldC is not None: clf.params.C = oldC # TODO: test combiners, e.g. MaximalVote and ca they store # XXX meta should also work but TODO @sweepargs(clf=clfswh['svm', '!meta']) def test_svms(self, clf): knows_probabilities = \ 'probabilities' in clf.ca.keys() and clf.params.probability enable_ca = ['estimates'] if knows_probabilities: enable_ca += ['probabilities'] clf.ca.change_temporarily(enable_ca = enable_ca) spl = Splitter('train', count=2) traindata, testdata = list(spl.generate(datasets['uni2small'])) clf.train(traindata) predicts = clf.predict(testdata.samples) # values should be different from predictions for SVMs we have self.assertTrue(np.any(predicts != clf.ca.estimates)) if knows_probabilities and clf.ca.is_set('probabilities'): # XXX test more thoroughly what we are getting here ;-) self.assertEqual( len(clf.ca.probabilities), len(testdata.samples) ) clf.ca.reset_changed_temporarily() @sweepargs(clf=clfswh['retrainable']) def test_retrainables(self, clf): # XXX we agreed to not worry about this for the initial 0.6 release raise SkipTest # we need a copy since will tune its internals later on clf = clf.clone() clf.ca.change_temporarily(enable_ca = ['estimates'], # ensure that it does do predictions # while training disable_ca=['training_stats']) clf_re = clf.clone() # TODO: .retrainable must have a callback to call smth like # _set_retrainable clf_re._set_retrainable(True) # need to have high snr so we don't 'cope' with problematic # datasets since otherwise unittests would fail. dsargs = {'perlabel':50, 'nlabels':2, 'nfeatures':5, 'nchunks':1, 'nonbogus_features':[2,4], 'snr': 5.0} ## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # NB datasets will be changed by the end of testing, so if # are to change to use generic datasets - make sure to copy # them here ds = deepcopy(datasets['uni2large']) clf.untrain() clf_re.untrain() trerr = TransferMeasure(clf, Splitter('train'), postproc=BinaryFxNode(mean_mismatch_error, 'targets')) trerr_re = TransferMeasure(clf_re, Splitter('train'), disable_ca=['training_stats'], postproc=BinaryFxNode(mean_mismatch_error, 'targets')) # Just check for correctness of retraining err_1 = np.asscalar(trerr(ds)) self.assertTrue(err_1<0.3, msg="We should test here on easy dataset. Got error of %s" % err_1) values_1 = clf.ca.estimates[:] # some times retraining gets into deeper optimization ;-) eps = 0.05 corrcoef_eps = 0.85 # just to get no failures... usually > 0.95 def batch_test(retrain=True, retest=True, closer=True): err = np.asscalar(trerr(ds)) err_re = np.asscalar(trerr_re(ds)) corr = np.corrcoef( clf.ca.estimates, clf_re.ca.estimates)[0, 1] corr_old = np.corrcoef(values_1, clf_re.ca.estimates)[0, 1] if __debug__: debug('TEST', "Retraining stats: errors %g %g corr %g " "with old error %g corr %g" % (err, err_re, corr, err_1, corr_old)) self.assertTrue(clf_re.ca.retrained == retrain, ("Must fully train", "Must retrain instead of full training")[retrain]) self.assertTrue(clf_re.ca.repredicted == retest, ("Must fully test", "Must retest instead of full testing")[retest]) self.assertTrue(corr > corrcoef_eps, msg="Result must be close to the one without retraining." " Got corrcoef=%s" % (corr)) if closer: self.assertTrue( corr >= corr_old, msg="Result must be closer to current without retraining" " than to old one. Got corrcoef=%s" % (corr_old)) # Check sequential retraining/retesting for i in xrange(3): flag = bool(i!=0) # ok - on 1st call we should train/test, then retrain/retest # and we can't compare for closinest to old result since # we are working on the same data/classifier batch_test(retrain=flag, retest=flag, closer=False) # should retrain nicely if we change a parameter if 'C' in clf.params: clf.params.C *= 0.1 clf_re.params.C *= 0.1 batch_test() elif 'sigma_noise' in clf.params: clf.params.sigma_noise *= 100 clf_re.params.sigma_noise *= 100 batch_test() else: raise RuntimeError, \ 'Please implement testing while changing some of the ' \ 'params for clf %s' % clf # should retrain nicely if we change kernel parameter if hasattr(clf, 'kernel_params') and len(clf.kernel_params): clf.kernel_params.gamma = 0.1 clf_re.kernel_params.gamma = 0.1 # retest is false since kernel got recomputed thus # can't expect to use the same kernel batch_test(retest=not('gamma' in clf.kernel_params)) # should retrain nicely if we change labels permute = AttributePermutator('targets', assure=True) oldlabels = dstrain.targets[:] dstrain = permute(dstrain) self.assertTrue((oldlabels != dstrain.targets).any(), msg="We should succeed at permutting -- now got the same targets") ds = vstack((dstrain, dstest)) batch_test() # Change labels in testing oldlabels = dstest.targets[:] dstest = permute(dstest) self.assertTrue((oldlabels != dstest.targets).any(), msg="We should succeed at permutting -- now got the same targets") ds = vstack((dstrain, dstest)) batch_test() # should re-train if we change data # reuse trained SVM and its 'final' optimization point if not clf.__class__.__name__ in ['GPR']: # on GPR everything depends on the data ;-) oldsamples = dstrain.samples.copy() dstrain.samples[:] += dstrain.samples*0.05 self.assertTrue((oldsamples != dstrain.samples).any()) ds = vstack((dstrain, dstest)) batch_test(retest=False) clf.ca.reset_changed_temporarily() # test retrain() # TODO XXX -- check validity clf_re.retrain(dstrain); self.assertTrue(clf_re.ca.retrained) clf_re.retrain(dstrain, labels=True); self.assertTrue(clf_re.ca.retrained) clf_re.retrain(dstrain, traindataset=True); self.assertTrue(clf_re.ca.retrained) # test repredict() clf_re.repredict(dstest.samples); self.assertTrue(clf_re.ca.repredicted) self.assertRaises(RuntimeError, clf_re.repredict, dstest.samples, labels=True) """for now retesting with anything changed makes no sense""" clf_re._set_retrainable(False) def test_generic_tests(self): """Test all classifiers for conformant behavior """ for clf_, traindata in \ [(clfswh['binary'], datasets['dumb2']), (clfswh['multiclass'], datasets['dumb'])]: traindata_copy = deepcopy(traindata) # full copy of dataset for clf in clf_: clf.train(traindata) self.assertTrue( (traindata.samples == traindata_copy.samples).all(), "Training of a classifier shouldn't change original dataset") # TODO: enforce uniform return from predict?? #predicted = clf.predict(traindata.samples) #self.assertTrue(isinstance(predicted, np.ndarray)) # Just simple test that all of them are syntaxed correctly self.assertTrue(str(clf) != "") self.assertTrue(repr(clf) != "") # TODO: unify str and repr for all classifiers # XXX TODO: should work on smlr, knn, ridgereg, lars as well! but now # they fail to train # svmocas -- segfaults -- reported to mailing list # GNB, LDA, QDA -- cannot train since 1 sample isn't sufficient # to assess variance @sweepargs(clf=clfswh['!smlr', '!knn', '!gnb', '!lda', '!qda', '!lars', '!meta', '!ridge', '!needs_population']) def test_correct_dimensions_order(self, clf): """To check if known/present Classifiers are working properly with samples being first dimension. Started to worry about possible problems while looking at sg where samples are 2nd dimension """ # specially crafted dataset -- if dimensions are flipped over # the same storage, problem becomes unseparable. Like in this case # incorrect order of dimensions lead to equal samples [0, 1, 0] traindatas = [ dataset_wizard(samples=np.array([ [0, 0, 1.0], [1, 0, 0] ]), targets=[0, 1]), dataset_wizard(samples=np.array([ [0, 0.0], [1, 1] ]), targets=[0, 1])] clf.ca.change_temporarily(enable_ca = ['training_stats']) for traindata in traindatas: clf.train(traindata) self.assertEqual(clf.ca.training_stats.percent_correct, 100.0, "Classifier %s must have 100%% correct learning on %s. Has %f" % (`clf`, traindata.samples, clf.ca.training_stats.percent_correct)) # and we must be able to predict every original sample thus for i in xrange(traindata.nsamples): sample = traindata.samples[i,:] predicted = clf.predict([sample]) self.assertEqual([predicted], traindata.targets[i], "We must be able to predict sample %s using " % sample + "classifier %s" % `clf`) clf.ca.reset_changed_temporarily() @sweepargs(regr=regrswh[:]) def test_regression_as_classifier(self, regr): """Basic tests of metaclass for using regressions as classifiers """ for dsname in 'uni2small', 'uni4small': ds = datasets[dsname] clf = RegressionAsClassifier(regr, enable_ca=['distances']) cv = CrossValidation(clf, OddEvenPartitioner(), postproc=mean_sample(), enable_ca=['stats', 'training_stats']) error = cv(ds).samples.squeeze() nlabels = len(ds.uniquetargets) if nlabels == 2 \ and cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(error < 0.3, msg="Got error %.2f on %s dataset" % (error, dsname)) # Check if does not puke on repr and str self.assertTrue(str(clf) != "") self.assertTrue(repr(clf) != "") self.assertEqual(clf.ca.distances.shape, (ds.nsamples / 2, nlabels)) #print "Using %s " % regr, error # Just validate that everything is ok #self.assertTrue(str(cv.ca.stats) != "") @reseed_rng() def test_gideon_weird_case(self): """Test if MappedClassifier could handle a mapper altering number of samples 'The utter collapse' -- communicated by Peter J. Kohler Desire to collapse all samples per each category in training and testing sets, thus resulting only in a single sample/category per training and per testing. It is a peculiar scenario which pin points the problem that so far mappers assumed not to change number of samples """ from mvpa2.mappers.fx import mean_group_sample from mvpa2.clfs.knn import kNN from mvpa2.mappers.base import ChainMapper ds = datasets['uni2large'].copy() #ds = ds[ds.sa.chunks < 9] accs = [] k = 1 # for kNN nf = 1 # for NFoldPartitioner for i in xrange(1): # # of random runs ds.samples = np.random.randn(*ds.shape) # # There are 3 ways to accomplish needed goal # # 0. Hard way: overcome the problem by manually # pre-splitting/meaning in a loop from mvpa2.clfs.transerror import ConfusionMatrix partitioner = NFoldPartitioner(nf) meaner = mean_group_sample(['targets', 'partitions']) cm = ConfusionMatrix() te = TransferMeasure(kNN(k), Splitter('partitions'), postproc=BinaryFxNode(mean_mismatch_error, 'targets'), enable_ca = ['stats'] ) errors = [] for part in partitioner.generate(ds): ds_meaned = meaner(part) errors.append(np.asscalar(te(ds_meaned))) cm += te.ca.stats #print i, cm.stats['ACC'] accs.append(cm.stats['ACC']) if False: # not yet working -- see _tent/allow_ch_nsamples # branch for attempt to make it work # 1. This is a "native way" IF we allow change of number # of samples via _call to be done by MappedClassifier # while operating solely on the mapped dataset clf2 = MappedClassifier(clf=kNN(k), #clf, mapper=mean_group_sample(['targets', 'partitions'])) cv = CrossValidation(clf2, NFoldPartitioner(nf), postproc=None, enable_ca=['stats']) # meaning all should be ok since we should have ballanced # sets across all chunks here errors_native = cv(ds) self.assertEqual(np.max(np.abs(errors_native.samples[:,0] - errors)), 0) # 2. Work without fixes to MappedClassifier allowing # change of # of samples # # CrossValidation will operate on a chain mapper which # would perform necessary meaning first before dealing with # kNN cons: .stats would not be exposed since ChainMapper # doesn't expose them from ChainMapper (yet) if __debug__ and 'ENFORCE_CA_ENABLED' in debug.active: raise SkipTest("Known to fail while trying to enable " "training_stats for the ChainMapper") cv2 = CrossValidation(ChainMapper([mean_group_sample(['targets', 'partitions']), kNN(k)], space='targets'), NFoldPartitioner(nf), postproc=None) errors_native2 = cv2(ds) self.assertEqual(np.max(np.abs(errors_native2.samples[:,0] - errors)), 0) # All of the ways should provide the same results #print i, np.max(np.abs(errors_native.samples[:,0] - errors)), \ # np.max(np.abs(errors_native2.samples[:,0] - errors)) if False: # just to investigate the distribution if we have enough iterations import pylab as pl uaccs = np.unique(accs) step = np.asscalar(np.unique(np.round(uaccs[1:] - uaccs[:-1], 4))) bins = np.linspace(0., 1., np.round(1./step+1)) xx = pl.hist(accs, bins=bins, align='left') pl.xlim((0. - step/2, 1.+step/2)) def suite(): return unittest.makeSuite(ClassifiersTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_clfcrossval.py000066400000000000000000000066751202542755000212520ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA classifier cross-validation""" from mvpa2.testing.tools import assert_equal, ok_, assert_array_equal from mvpa2.base.node import ChainNode from mvpa2.generators.partition import NFoldPartitioner from mvpa2.generators.permutation import AttributePermutator from mvpa2.measures.base import CrossValidation from mvpa2.testing import * from mvpa2.testing.datasets import pure_multivariate_signal, get_mv_pattern from mvpa2.testing.clfs import * class CrossValidationTests(unittest.TestCase): def test_simple_n_minus_one_cv(self): data = get_mv_pattern(3) data.init_origids('samples') self.assertTrue( data.nsamples == 120 ) self.assertTrue( data.nfeatures == 2 ) self.assertTrue( (data.sa.targets == \ [0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0] * 6).all()) self.assertTrue( (data.sa.chunks == \ [k for k in range(1, 7) for i in range(20)]).all()) assert_equal(len(np.unique(data.sa.origids)), data.nsamples) cv = CrossValidation(sample_clf_nl, NFoldPartitioner(), enable_ca=['stats', 'training_stats']) # 'samples_error']) results = cv(data) self.assertTrue((results.samples < 0.2).all() and (results.samples >= 0.0).all()) # TODO: test accessibility of {training_,}stats{,s} of # CrossValidatedTransferError # not yet implemented, and no longer this way #self.assertTrue(isinstance(cv.ca.samples_error, dict)) #self.assertTrue(len(cv.ca.samples_error) == data.nsamples) ## one value for each origid #assert_array_equal(sorted(cv.ca.samples_error.keys()), # sorted(data.sa.origids)) #for k, v in cv.ca.samples_error.iteritems(): # self.assertTrue(len(v) == 1) def test_noise_classification(self): # get a dataset with a very high SNR data = get_mv_pattern(10) # do crossval with default errorfx and 'mean' combiner cv = CrossValidation(sample_clf_nl, NFoldPartitioner()) # must return a scalar value result = cv(data) # must be perfect self.assertTrue((result.samples < 0.05).all()) # do crossval with permuted regressors cv = CrossValidation(sample_clf_nl, ChainNode([NFoldPartitioner(), AttributePermutator('targets', count=10)], space='partitions')) results = cv(data) # must be at chance level pmean = np.array(results).mean() self.assertTrue( pmean < 0.58 and pmean > 0.42 ) def test_unpartitioned_cv(self): data = get_mv_pattern(10) # only one big chunk data.sa.chunks[:] = 1 cv = CrossValidation(sample_clf_nl, NFoldPartitioner()) # need to fail, because it can't be split into training and testing assert_raises(ValueError, cv, data) def suite(): return unittest.makeSuite(CrossValidationTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_cmdline.py000066400000000000000000000026341202542755000203330ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA cmdline helpers""" import unittest from mvpa2.testing import * from mvpa2.misc.cmdline import * if __debug__: from mvpa2.base import debug class CmdlineHelpersTest(unittest.TestCase): def test_basic(self): """Test if we are not missing basic parts""" globals_ = globals() for member in [#'_verbose_callback', 'parser', 'opt', 'opts']: self.assertTrue(globals_.has_key(member), msg="We must have imported %s from mvpa2.misc.cmdline!" % member) @sweepargs(example=[ ('targets:rest', None, [('targets', ['rest'])]), ('targets:rest;trial:bad,crap,shit', None, [('targets', ['rest']), ('trial', ['bad', 'crap', 'shit'])]), ]) def test_split_comma_semicolon_lists(self, example): s, dtype, t = example v = split_comma_semicolon_lists(s, dtype=dtype) assert_equal(v, t) def suite(): return unittest.makeSuite(CmdlineHelpersTest) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_collections.py000066400000000000000000000140551202542755000212360ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for attribute collections and their collectables''' import numpy as np import copy from mvpa2.testing.tools import assert_raises, assert_false, assert_equal, \ assert_true, assert_array_equal, assert_array_almost_equal, reseed_rng from mvpa2.testing import sweepargs from mvpa2.base.collections import Collectable, ArrayCollectable, \ SampleAttributesCollection from mvpa2.base.attributes import ConditionalAttribute from mvpa2.base.node import Node from mvpa2.measures.base import Measure, RepeatedMeasure from mvpa2.clfs.transerror import ConfusionMatrix def test_basic_collectable(): c = Collectable() # empty by default assert_equal(c.name, None) assert_equal(c.value, None) assert_equal(c.__doc__, None) # late assignment c.name = 'somename' c.value = 12345 assert_equal(c.name, 'somename') assert_equal(c.value, 12345) # immediate content c = Collectable('value', 'myname', "This is a test") assert_equal(c.name, 'myname') assert_equal(c.value, 'value') assert_equal(c.__doc__, "This is a test") assert_equal(str(c), 'myname') # repr e = eval(repr(c)) assert_equal(e.name, 'myname') assert_equal(e.value, 'value') assert_equal(e.__doc__, "This is a test") # shallow copy does not create a view of value array c.value = np.arange(5) d = copy.copy(c) assert_false(d.value.base is c.value) # names starting with _ are not allowed assert_raises(ValueError, c._set_name, "_underscore") @reseed_rng() def test_array_collectable(): c = ArrayCollectable() # empty by default assert_equal(c.name, None) assert_equal(c.value, None) # late assignment c.name = 'somename' assert_raises(ValueError, c._set, 12345) assert_equal(c.value, None) c.value = np.arange(5) assert_equal(c.name, 'somename') assert_array_equal(c.value, np.arange(5)) # immediate content data = np.random.random(size=(3,10)) c = ArrayCollectable(data.copy(), 'myname', "This is a test", length=3) assert_equal(c.name, 'myname') assert_array_equal(c.value, data) assert_equal(c.__doc__, "This is a test") assert_equal(str(c), 'myname') # repr from numpy import array e = eval(repr(c)) assert_equal(e.name, 'myname') assert_array_almost_equal(e.value, data) assert_equal(e.__doc__, "This is a test") # cannot assign array of wrong length assert_raises(ValueError, c._set, np.arange(5)) assert_equal(len(c), 3) # shallow copy DOES create a view of value array c.value = np.arange(3) d = copy.copy(c) assert_true(d.value.base is c.value) # names starting with _ are not allowed assert_raises(ValueError, c._set_name, "_underscore") @sweepargs(a=( np.arange(4), # note: numpy casts int(1) it into dtype=float due to presence of # nan since there is no int('nan'), so float right away [1., np.nan], np.array((1, np.nan)), [1, None], [np.nan, None], [1, 2.0, np.nan, None, "string"], np.arange(6).reshape((2, -1)), # 2d's unique np.array([(1, 'mom'), (2,)], dtype=object), # elaborate object ndarray )) def test_array_collectable_unique(a): c = ArrayCollectable(a) a_flat = np.asanyarray(a).ravel() # Since nan != nan, we better compare based on string # representation here # And sort since order of those is not guaranteed (failed test # on squeeze) def repr_(x): return repr(sorted(set(x))) assert_equal(repr_(a_flat), repr_(c.unique)) # even if we request it 2nd time ;) assert_equal(repr_(a_flat), repr_(c.unique)) assert_equal(len(a_flat), len(c.unique)) c2 = ArrayCollectable(list(a_flat) + [float('nan')]) # and since nan != nan, we should get new element assert_equal(len(c2.unique), len(c.unique) + 1) def test_collections(): sa = SampleAttributesCollection() assert_equal(len(sa), 0) assert_raises(ValueError, sa.__setitem__, 'test', 0) l = range(5) sa['test'] = l # auto-wrapped assert_true(isinstance(sa['test'], ArrayCollectable)) assert_equal(len(sa), 1) # names which are already present in dict interface assert_raises(ValueError, sa.__setitem__, 'values', range(5)) sa_c = copy.deepcopy(sa) assert_equal(len(sa), len(sa_c)) assert_array_equal(sa.test, sa_c.test) class TestNodeOffDefault(Node): test = ConditionalAttribute(enabled=False, doc="OffTest") stats = ConditionalAttribute(enabled=False, doc="OffStats") class TestNodeOnDefault(Node): test = ConditionalAttribute(enabled=True, doc="OnTest") stats = ConditionalAttribute(enabled=True, doc="OnStats") def test_conditional_attr(): import copy import cPickle for node in (TestNodeOnDefault(enable_ca=['test', 'stats']), TestNodeOffDefault(enable_ca=['test', 'stats'])): node.ca.test = range(5) node.ca.stats = ConfusionMatrix(labels=['one', 'two']) node.ca.stats.add(('one', 'two', 'one', 'two'), ('one', 'two', 'two', 'one')) node.ca.stats.compute() dc_node = copy.deepcopy(node) assert_array_equal(node.ca.enabled, dc_node.ca.enabled) assert(node.ca['test'].enabled) assert(node.ca['stats'].enabled) assert_array_equal(node.ca['test'].value, dc_node.ca['test'].value) assert_array_equal(node.ca['stats'].value.matrix, dc_node.ca['stats'].value.matrix) # check whether values survive pickling pickled = cPickle.dumps(node) up_node = cPickle.loads(pickled) assert_array_equal(up_node.ca['test'].value, range(5)) assert_array_equal(up_node.ca['stats'].value.matrix, node.ca['stats'].value.matrix) pymvpa2-2.2.0/mvpa2/tests/test_config.py000066400000000000000000000017741202542755000201710ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA dense array mapper""" import unittest from mvpa2.base.config import ConfigManager class ConfigTests(unittest.TestCase): def test_config(self): cfg = ConfigManager() # does nothing so far, but will be used to test the default # configuration from doc/examples/pymvpa2.cfg # query for some non-existing option and check if default is returned query = cfg.get('dasgibtsdochnicht', 'neegarnicht', default='required') self.assertTrue(query == 'required') def suite(): return unittest.makeSuite(ConfigTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_datameasure.py000066400000000000000000000571241202542755000212170ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA SplittingSensitivityAnalyzer""" import numpy as np from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.testing.datasets import * from mvpa2.base import externals, warning from mvpa2.base.node import ChainNode from mvpa2.datasets.base import Dataset from mvpa2.featsel.base import SensitivityBasedFeatureSelection, \ CombinedFeatureSelection from mvpa2.featsel.helpers import FixedNElementTailSelector, \ FractionTailSelector, RangeElementSelector from mvpa2.featsel.rfe import RFE from mvpa2.clfs.meta import SplitClassifier, MulticlassClassifier, \ FeatureSelectionClassifier from mvpa2.clfs.smlr import SMLR, SMLRWeights from mvpa2.mappers.zscore import zscore from mvpa2.mappers.fx import sumofabs_sample, absolute_features, FxMapper, \ maxofabs_sample, BinaryFxNode from mvpa2.generators.splitters import Splitter from mvpa2.generators.partition import NFoldPartitioner from mvpa2.generators.resampling import Balancer from mvpa2.misc.errorfx import mean_mismatch_error from mvpa2.misc.transformers import Absolute, \ DistPValue from mvpa2.measures.base import Measure, \ TransferMeasure, RepeatedMeasure, CrossValidation from mvpa2.measures.anova import OneWayAnova, CompoundOneWayAnova from mvpa2.measures.irelief import IterativeRelief, IterativeReliefOnline, \ IterativeRelief_Devel, IterativeReliefOnline_Devel _MEASURES_2_SWEEP = [ OneWayAnova(), CompoundOneWayAnova(postproc=sumofabs_sample()), IterativeRelief(), IterativeReliefOnline(), IterativeRelief_Devel(), IterativeReliefOnline_Devel() ] if externals.exists('scipy'): from mvpa2.measures.corrcoef import CorrCoef _MEASURES_2_SWEEP += [ CorrCoef(), # that one is good when small... handle later #CorrCoef(pvalue=True) ] class SensitivityAnalysersTests(unittest.TestCase): def setUp(self): self.dataset = datasets['uni2large'] @sweepargs(dsm=_MEASURES_2_SWEEP) def test_basic(self, dsm): data = datasets['dumbinv'] datass = data.samples.copy() # compute scores f = dsm(data) # check if nothing evil is done to dataset self.assertTrue(np.all(data.samples == datass)) self.assertTrue(f.shape == (1, data.nfeatures)) self.assertTrue(abs(f.samples[0, 1]) <= 1e-12, # some small value msg="Failed test with value %g instead of != 0.0" % f.samples[0, 1]) self.assertTrue(f.samples[0,0] > 0.1) # some reasonably large value # we should not have NaNs self.assertTrue(not np.any(np.isnan(f))) # NOTE: lars with stepwise used to segfault if all ca are enabled @sweepargs(clfds= [(c, datasets['uni2large']) for c in clfswh['has_sensitivity', 'binary']] + [(c, datasets['uni4large']) for c in clfswh['has_sensitivity', 'multiclass']] ) def test_analyzer_with_split_classifier(self, clfds): """Test analyzers in split classifier """ clf, ds = clfds # unroll the tuple # We need to skip some LARSes here _sclf = str(clf) if 'LARS(' in _sclf and "type='stepwise'" in _sclf: # ADD KnownToFail thingie from NiPy return # To don't waste too much time testing lets limit to 3 splits nsplits = 3 partitioner = NFoldPartitioner(count=nsplits) mclf = SplitClassifier(clf=clf, partitioner=partitioner, enable_ca=['training_stats', 'stats']) sana = mclf.get_sensitivity_analyzer(# postproc=absolute_features(), enable_ca=["sensitivities"]) ulabels = ds.uniquetargets nlabels = len(ulabels) # Can't rely on splitcfg since count-limit is done in __call__ assert(nsplits == len(list(partitioner.generate(ds)))) sens = sana(ds) # TODO: those few do not expose biases if not len(set(clf.__tags__).intersection(('lars', 'glmnet', 'gpr' ))): assert('biases' in sens.sa) print sens.sa.biases # It should return either ... # nlabels * nsplits req_nsamples = [ nlabels * nsplits ] if nlabels == 2: # A single sensitivity in case of binary req_nsamples += [ nsplits ] else: # and for pairs in case of multiclass req_nsamples += [ (nlabels * (nlabels-1) / 2) * nsplits ] # and for 1-vs-1 embedded within Multiclass operating on # pairs (e.g. SMLR) req_nsamples += [req_nsamples[-1]*2] # Also for regression_based -- they can do multiclass # but only 1 sensitivity is provided if 'regression_based' in clf.__tags__: req_nsamples += [ nsplits ] # # of features should correspond self.assertEqual(sens.shape[1], ds.nfeatures) # # of samples/sensitivities should also be reasonable self.assertTrue(sens.shape[0] in req_nsamples) # Check if labels are present self.assertTrue('splits' in sens.sa) self.assertTrue('targets' in sens.sa) # should be 1D -- otherwise dtype object self.assertTrue(sens.sa.targets.ndim == 1) sens_ulabels = sens.sa['targets'].unique # Some labels might be pairs(tuples) so ndarray would be of # dtype object and we would need to get them all if sens_ulabels.dtype is np.dtype('object'): sens_ulabels = np.unique( reduce(lambda x,y: x+y, [list(x) for x in sens_ulabels])) assert_array_equal(sens_ulabels, ds.sa['targets'].unique) errors = [x.percent_correct for x in sana.clf.ca.stats.matrices] # lets go through all sensitivities and see if we selected the right # features #if 'meta' in clf.__tags__ and len(sens.samples[0].nonzero()[0])<2: if '5%' in clf.descr \ or (nlabels > 2 and 'regression_based' in clf.__tags__): # Some meta classifiers (5% of ANOVA) are too harsh ;-) # if we get less than 2 features with on-zero sensitivities we # cannot really test # Also -- regression based classifiers performance for multiclass # is expected to suck in general return if cfg.getboolean('tests', 'labile', default='yes'): for conf_matrix in [sana.clf.ca.training_stats] \ + sana.clf.ca.stats.matrices: self.assertTrue( conf_matrix.percent_correct>=70, msg="We must have trained on each one more or " \ "less correctly. Got %f%% correct on %d labels" % (conf_matrix.percent_correct, nlabels)) # Since now we have per split and possibly per label -- lets just find # mean per each feature per label across splits sensm = FxMapper('samples', lambda x: np.sum(x), uattrs=['targets']).forward(sens) sensgm = maxofabs_sample().forward(sensm) # global max of abs of means assert_equal(sensgm.shape[0], 1) assert_equal(sensgm.shape[1], ds.nfeatures) selected = FixedNElementTailSelector( len(ds.a.bogus_features))(sensgm.samples[0]) if cfg.getboolean('tests', 'labile', default='yes'): self.assertEqual( set(selected), set(ds.a.nonbogus_features), msg="At the end we should have selected the right features. " "Chose %s whenever nonbogus are %s" % (selected, ds.a.nonbogus_features)) # Now test each one per label # TODO: collect all failures and spit them out at once -- # that would make it easy to see if the sensitivity # just has incorrect order of labels assigned for sens1 in sensm: labels1 = sens1.targets # labels (1) for this sensitivity lndim = labels1.ndim label = labels1[0] # current label # XXX whole lndim comparison should be gone after # things get fixed and we arrive here with a tuple! if lndim == 1: # just a single label self.assertTrue(label in ulabels) ilabel_all = np.where(ds.fa.nonbogus_targets == label)[0] # should have just 1 feature for the label self.assertEqual(len(ilabel_all), 1) ilabel = ilabel_all[0] maxsensi = np.argmax(sens1) # index of max sensitivity self.assertEqual(maxsensi, ilabel, "Maximal sensitivity for %s was found in %i whenever" " original feature was %i for nonbogus features %s" % (labels1, maxsensi, ilabel, ds.a.nonbogus_features)) elif lndim == 2 and labels1.shape[1] == 2: # pair of labels # we should have highest (in abs) coefficients in # those two labels maxsensi2 = np.argsort(np.abs(sens1))[0][-2:] ilabel2 = [np.where(ds.fa.nonbogus_targets == l)[0][0] for l in label] self.assertEqual( set(maxsensi2), set(ilabel2), "Maximal sensitivity for %s was found in %s whenever" " original features were %s for nonbogus features %s" % (labels1, maxsensi2, ilabel2, ds.a.nonbogus_features)) """ # Now test for the sign of each one in pair ;) in # all binary problems L1 (-1) -> L2(+1), then # weights for L2 should be positive. to test for # L1 -- invert the sign # We already know (if we haven't failed in previous test), # that those 2 were the strongest -- so check only signs """ self.assertTrue( sens1.samples[0, ilabel2[0]]<0, "With %i classes in pair %s got feature %i for %r >= 0" % (nlabels, label, ilabel2[0], label[0])) self.assertTrue(sens1.samples[0, ilabel2[1]]>0, "With %i classes in pair %s got feature %i for %r <= 0" % (nlabels, label, ilabel2[1], label[1])) else: # yoh could be wrong at this assumption... time will show self.fail("Got unknown number labels per sensitivity: %s." " Should be either a single label or a pair" % labels1) @sweepargs(clf=clfswh['has_sensitivity']) def test_mapped_classifier_sensitivity_analyzer(self, clf): """Test sensitivity of the mapped classifier """ # Assuming many defaults it is as simple as mclf = FeatureSelectionClassifier( clf, SensitivityBasedFeatureSelection( OneWayAnova(), FractionTailSelector(0.5, mode='select', tail='upper')), enable_ca=['training_stats']) sana = mclf.get_sensitivity_analyzer(postproc=sumofabs_sample(), enable_ca=["sensitivities"]) # and lets look at all sensitivities dataset = datasets['uni2small'] # and we get sensitivity analyzer which works on splits sens = sana(dataset) self.assertEqual(sens.shape, (1, dataset.nfeatures)) @sweepargs(svm=clfswh['linear', 'svm']) def test_linear_svm_weights(self, svm): # assumming many defaults it is as simple as sana = svm.get_sensitivity_analyzer(enable_ca=["sensitivities"] ) # and lets look at all sensitivities sens = sana(self.dataset) # for now we can do only linear SVM, so lets check if we raise # a concern svmnl = clfswh['non-linear', 'svm'][0] self.assertRaises(NotImplementedError, svmnl.get_sensitivity_analyzer) # XXX doesn't work easily with meta since it would need # to be explicitely passed to the slave classifier's # getSengetSensitivityAnalyzer # Note: only libsvm interface supports split_weights @sweepargs(svm=clfswh['linear', 'svm', 'libsvm', '!sg', '!meta']) def test_linear_svm_weights_per_class(self, svm): # assumming many defaults it is as simple as kwargs = dict(enable_ca=["sensitivities"]) sana_split = svm.get_sensitivity_analyzer( split_weights=True, **kwargs) sana_full = svm.get_sensitivity_analyzer( force_train=False, **kwargs) # and lets look at all sensitivities ds2 = datasets['uni4large'].copy() zscore(ds2, param_est=('targets', ['L2', 'L3'])) ds2 = ds2[np.logical_or(ds2.sa.targets == 'L0', ds2.sa.targets == 'L1')] senssplit = sana_split(ds2) sensfull = sana_full(ds2) self.assertEqual(senssplit.shape, (2, ds2.nfeatures)) self.assertEqual(sensfull.shape, (1, ds2.nfeatures)) # just to verify that we split properly and if we reconstruct # manually we obtain the same dmap = (-1 * senssplit.samples[1] + senssplit.samples[0]) \ - sensfull.samples self.assertTrue((np.abs(dmap) <= 1e-10).all()) #print "____" #print senssplit #print SMLR().get_sensitivity_analyzer(combiner=None)(ds2) # for now we can do split weights for binary tasks only, so # lets check if we raise a concern # we temporarily shutdown warning, since it is going to complain # otherwise, but we do it on purpose here handlers = warning.handlers warning.handlers = [] self.assertRaises(NotImplementedError, sana_split, datasets['uni3medium']) # reenable the warnings warning.handlers = handlers def test_split_featurewise_dataset_measure(self): ds = datasets['uni3small'] sana = RepeatedMeasure( SMLR(fit_all_weights=True).get_sensitivity_analyzer(), ChainNode([NFoldPartitioner(), Splitter('partitions', attr_values=[1])])) sens = sana(ds) # a sensitivity for each chunk and each label combination assert_equal(sens.shape, (len(ds.sa['chunks'].unique) * len(ds.sa['targets'].unique), ds.nfeatures)) # Lets try more complex example with 'boosting' ds = datasets['uni3medium'] ds.init_origids('samples') sana = RepeatedMeasure( SMLR(fit_all_weights=True).get_sensitivity_analyzer(), Balancer(amount=0.25, count=2, apply_selection=True), enable_ca=['datasets', 'repetition_results']) sens = sana(ds) assert_equal(sens.shape, (2 * len(ds.sa['targets'].unique), ds.nfeatures)) splits = sana.ca.datasets self.assertEqual(len(splits), 2) self.assertTrue(np.all([s.nsamples == ds.nsamples//4 for s in splits])) # should have used different samples self.assertTrue(np.any([splits[0].sa.origids != splits[1].sa.origids])) # and should have got different sensitivities self.assertTrue(np.any(sens[0] != sens[3])) #skip_if_no_external('scipy') # Let's disable this one for now until we are sure about the destiny of # DistPValue -- read the docstring of it! # Most evil example #ds = datasets['uni2medium'] #plain_sana = SVM().get_sensitivity_analyzer( # transformer=DistPValue()) #boosted_sana = SplitFeaturewiseMeasure( # analyzer=SVM().get_sensitivity_analyzer( # transformer=DistPValue(fpp=0.05)), # splitter=NoneSplitter(npertarget=0.8, mode='first', nrunspersplit=2), # enable_ca=['splits', 'sensitivities']) ## lets create feature selector #fsel = RangeElementSelector(upper=0.1, lower=0.9, inclusive=True) #sanas = dict(plain=plain_sana, boosted=boosted_sana) #for k,sana in sanas.iteritems(): # clf = FeatureSelectionClassifier(SVM(), # SensitivityBasedFeatureSelection(sana, fsel), # descr='SVM on p=0.2(both tails) using %s' % k) # ce = CrossValidatedTransferError(TransferError(clf), # NFoldSplitter()) # error = ce(ds) #sens = boosted_sana(ds) #sens_plain = plain_sana(ds) ## TODO: make a really unittest out of it -- not just runtime ## bugs catcher # TODO -- unittests for sensitivity analyzers which use combiners # (linsvmweights for multi-class SVMs and smlrweights for SMLR) @sweepargs(basic_clf=clfswh['has_sensitivity']) ##REF: Name was automagically refactored def __test_fspipeline_with_split_classifier(self, basic_clf): #basic_clf = LinearNuSVMC() multi_clf = MulticlassClassifier(clf=basic_clf) #svm_weigths = LinearSVMWeights(svm) # Proper RFE: aggregate sensitivities across multiple splits, # but also due to multi class those need to be aggregated # somehow. Transfer error here should be 'leave-1-out' error # of split classifier itself sclf = SplitClassifier(clf=basic_clf) rfe = RFE(sensitivity_analyzer= sclf.get_sensitivity_analyzer( enable_ca=["sensitivities"]), transfer_error=trans_error, feature_selector=FeatureSelectionPipeline( [FractionTailSelector(0.5), FixedNElementTailSelector(1)]), train_clf=True) # and we get sensitivity analyzer which works on splits and uses # sensitivity selected_features = rfe(self.dataset) def test_union_feature_selection(self): # two methods: 5% highes F-scores, non-zero SMLR weights fss = [SensitivityBasedFeatureSelection( OneWayAnova(), FractionTailSelector(0.05, mode='select', tail='upper')), SensitivityBasedFeatureSelection( SMLRWeights(SMLR(lm=1, implementation="C"), postproc=sumofabs_sample()), RangeElementSelector(mode='select'))] fs = CombinedFeatureSelection(fss, method='union') od_union = fs(self.dataset) self.assertTrue(fs.method == 'union') # check output dataset self.assertTrue(od_union.nfeatures <= self.dataset.nfeatures) # again for intersection fs = CombinedFeatureSelection(fss, method='intersection') od_intersect = fs(self.dataset) assert_true(od_intersect.nfeatures < od_union.nfeatures) def test_anova(self): """Additional aspects of OnewayAnova """ oa = OneWayAnova() oa_custom = OneWayAnova(space='custom') ds = datasets['uni4large'] ds_custom = Dataset(ds.samples, sa={'custom' : ds.targets}) r = oa(ds) self.assertRaises(KeyError, oa_custom, ds) r_custom = oa_custom(ds_custom) self.assertTrue(np.allclose(r.samples, r_custom.samples)) # we should get the same results on subsequent runs r2 = oa(ds) r_custom2 = oa_custom(ds_custom) self.assertTrue(np.allclose(r.samples, r2.samples)) self.assertTrue(np.allclose(r_custom.samples, r_custom2.samples)) def test_transfer_measure(self): # come up with my own measure that only checks if training data # and test data are the same class MyMeasure(Measure): def _train(self, ds): self._tds = ds def _call(self, ds): return Dataset(ds.samples == self._tds.samples) tm = TransferMeasure(MyMeasure(), Splitter('chunks', count=2)) # result should not be all True (== identical) assert_true((tm(self.dataset).samples == False).any()) def test_clf_transfer_measure(self): # and now on a classifier clf = SMLR() enode = BinaryFxNode(mean_mismatch_error, 'targets') tm = TransferMeasure(clf, Splitter('chunks', count=2), enable_ca=['stats']) res = tm(self.dataset) manual_error = np.mean(res.samples.squeeze() != res.sa.targets) postproc_error = enode(res) tm_err = TransferMeasure(clf, Splitter('chunks', count=2), postproc=enode) auto_error = tm_err(self.dataset) ok_(manual_error == postproc_error.samples[0,0]) def test_pseudo_cv_measure(self): clf = SMLR() enode = BinaryFxNode(mean_mismatch_error, 'targets') tm = TransferMeasure(clf, Splitter('partitions'), postproc=enode) cvgen = NFoldPartitioner() rm = RepeatedMeasure(tm, cvgen) res = rm(self.dataset) # one error per fold assert_equal(res.shape, (len(self.dataset.sa['chunks'].unique), 1)) # we can do the same with Crossvalidation cv = CrossValidation(clf, cvgen, enable_ca=['stats', 'training_stats', 'datasets']) res = cv(self.dataset) assert_equal(res.shape, (len(self.dataset.sa['chunks'].unique), 1)) def test_repeated_features(self): print self.dataset print self.dataset.fa.nonbogus_targets class CountFeatures(Measure): is_trained = True def _call(self, ds): return ds.nfeatures cf = CountFeatures() spl = Splitter('fa.nonbogus_targets') nsplits = len(list(spl.generate(self.dataset))) assert_equal(nsplits, 3) rm = RepeatedMeasure(cf, spl, concat_as='features') res = rm(self.dataset) assert_equal(res.shape, (1, nsplits)) assert_array_equal(res.samples[0], [18,1,1]) def test_custom_combined_selectors(self): """Test combination of the selectors in a single function """ def custom_tail_selector(seq): seq1 = FractionTailSelector(0.01, mode='discard', tail='upper')(seq) seq2 = FractionTailSelector(0.05, mode='select', tail='upper')(seq) return list(set(seq1).intersection(seq2)) seq = np.arange(100) seq_ = custom_tail_selector(seq) assert_array_equal(sorted(seq_), [95, 96, 97, 98]) # verify that this function could be used in place of the selector fs = SensitivityBasedFeatureSelection( OneWayAnova(), custom_tail_selector) ds = datasets['3dsmall'] fs.train(ds) # XXX: why needs to be trained here explicitly? ds_ = fs(ds) assert_equal(ds_.nfeatures, int(ds.nfeatures * 0.04)) def suite(): return unittest.makeSuite(SensitivityAnalysersTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_dataset_formats.py000066400000000000000000000024601202542755000220750ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for the dataset implementation''' from mvpa2.testing import * from mvpa2.testing.datasets import datasets from mvpa2.datasets.formats import * import tempfile import os def test_format_lightsvm_basic(): # Just doing basic testing for the silliest of usages -- just # dumping / loading data back without any customization via # arguments for dsname in ['uni2small', 'uni3small', 'chirp_linear']: ds = datasets[dsname] f = tempfile.NamedTemporaryFile() am = to_lightsvm_format(ds, f) f_ = open(f.name, 'r') ds_ = from_lightsvm_format(f_, am=am) # Lets do checks now ok_(ds.targets.dtype == ds_.targets.dtype) if ds.targets.dtype.char in ['i', 'S', 'U']: assert_array_equal(ds.targets, ds_.targets) else: assert_array_almost_equal(ds.targets, ds_.targets, decimal=3) assert_array_almost_equal(ds.samples, ds_.samples) pymvpa2-2.2.0/mvpa2/tests/test_datasetfx.py000066400000000000000000000114321202542755000206770ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA miscelaneouse functions operating on datasets""" import unittest from mvpa2.testing.tools import ok_, assert_equal, assert_array_equal, reseed_rng import numpy as np from mvpa2.base import externals from mvpa2.datasets.base import dataset_wizard from mvpa2.datasets.miscfx import remove_invariant_features, coarsen_chunks, \ aggregate_features, SequenceStats from mvpa2.misc.data_generators import normal_feature_dataset class MiscDatasetFxTests(unittest.TestCase): def test_aggregation(self): data = dataset_wizard(np.arange( 20 ).reshape((4, 5)), targets=1, chunks=1) ag_data = aggregate_features(data, np.mean) ok_(ag_data.nsamples == 4) ok_(ag_data.nfeatures == 1) assert_array_equal(ag_data.samples[:, 0], [2, 7, 12, 17]) @reseed_rng() def test_invar_features_removal(self): r = np.random.normal(size=(3,1)) ds = dataset_wizard(samples=np.hstack((np.zeros((3,2)), r)), targets=1) self.assertTrue(ds.nfeatures == 3) dsc = remove_invariant_features(ds) self.assertTrue(dsc.nfeatures == 1) self.assertTrue((dsc.samples == r).all()) def test_coarsen_chunks(self): """Just basic testing for now""" chunks = [1,1,2,2,3,3,4,4] ds = dataset_wizard(samples=np.arange(len(chunks)).reshape( (len(chunks),1)), targets=[1]*8, chunks=chunks) coarsen_chunks(ds, nchunks=2) chunks1 = coarsen_chunks(chunks, nchunks=2) self.assertTrue((chunks1 == ds.chunks).all()) self.assertTrue((chunks1 == np.asarray([0,0,0,0,1,1,1,1])).all()) ds2 = dataset_wizard(samples=np.arange(len(chunks)).reshape( (len(chunks),1)), targets=[1]*8, chunks=range(len(chunks))) coarsen_chunks(ds2, nchunks=2) self.assertTrue((chunks1 == ds.chunks).all()) def test_binds(self): ds = normal_feature_dataset() ds_data = ds.samples.copy() ds_chunks = ds.chunks.copy() self.assertTrue(np.all(ds.samples == ds_data)) # sanity check funcs = ['coarsen_chunks'] for f in funcs: eval('ds.%s()' % f) self.assertTrue(np.any(ds.samples != ds_data) or np.any(ds.chunks != ds_chunks), msg="We should have modified original dataset with %s" % f) ds.samples = ds_data.copy() ds.sa['chunks'].value = ds_chunks.copy() # and some which should just return results for f in ['aggregate_features', 'remove_invariant_features', 'get_samples_per_chunk_target']: res = eval('ds.%s()' % f) self.assertTrue(res is not None, msg='We should have got result from function %s' % f) self.assertTrue(np.all(ds.samples == ds_data), msg="Function %s should have not modified original dataset" % f) @reseed_rng() def test_sequence_stat(self): """Test sequence statistics """ order = 3 # Close to perfectly balanced one sp = np.array([-1, 1, 1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, -1, 1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, -1], dtype=int) rp = SequenceStats(sp, order=order) self.failUnlessAlmostEqual(rp['sumabscorr'], 1.0) self.failUnlessAlmostEqual(np.max(rp['corrcoef'] * (len(sp)-1) + 1.0), 0.0) # Now some random but loong one still binary (boolean) sb = (np.random.random_sample((1000,)) >= 0.5) rb = SequenceStats(sb, order=order) # Now lets do multiclass with literal targets s5 = np.random.permutation(['f', 'bu', 'd', 0, 'zz']*200) r5 = SequenceStats(s5, order=order) # Degenerate one but still should be valid s1 = ['aaa']*100 r1 = SequenceStats(s1, order=order) # Generic conformance tests for r in (rp, rb, r5, r1): ulabels = r['utargets'] nlabels = len(r['utargets']) cbcounts = r['cbcounts'] self.assertEqual(len(cbcounts), order) for cb in cbcounts: self.assertEqual(np.asarray(cb).shape, (nlabels, nlabels)) # Check if str works fine sr = str(r) # TODO: check the content def suite(): return unittest.makeSuite(MiscDatasetFxTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_datasetng.py000066400000000000000000000777231202542755000207050ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for the dataset implementation''' from mvpa2.testing import * from mvpa2.testing.datasets import datasets import numpy as np import shutil import tempfile import os from mvpa2.base import cfg from mvpa2.base.externals import versions from mvpa2.base.types import is_datasetlike from mvpa2.base.dataset import DatasetError, vstack, hstack from mvpa2.datasets.base import dataset_wizard, Dataset, HollowSamples from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.testing import reseed_rng import mvpa2.support.copy as copy from mvpa2.base.collections import \ SampleAttributesCollection, FeatureAttributesCollection, \ DatasetAttributesCollection, ArrayCollectable, SampleAttribute, \ Collectable class myarray(np.ndarray): pass # TODO Urgently need test to ensure that multidimensional samples and feature # attributes work and adjust docs to mention that we support such def test_from_wizard(): samples = np.arange(12).reshape((4, 3)).view(myarray) labels = range(4) chunks = [1, 1, 2, 2] ds = Dataset(samples, sa={'targets': labels, 'chunks': chunks}) ds.init_origids('both') first = ds.sa.origids # now do again and check that they get regenerated ds.init_origids('both') assert_false(first is ds.sa.origids) assert_array_equal(first, ds.sa.origids) ok_(is_datasetlike(ds)) ok_(not is_datasetlike(labels)) # array subclass survives ok_(isinstance(ds.samples, myarray)) ## XXX stuff that needs thought: # ds.sa (empty) has this in the public namespace: # add, get, getvalue, has_key, is_set, items, listing, name, names # owner, remove, reset, setvalue, which_set # maybe we need some form of leightweightCollection? assert_array_equal(ds.samples, samples) assert_array_equal(ds.sa.targets, labels) assert_array_equal(ds.sa.chunks, chunks) # same should work for shortcuts assert_array_equal(ds.targets, labels) assert_array_equal(ds.chunks, chunks) ok_(sorted(ds.sa.keys()) == ['chunks', 'origids', 'targets']) ok_(sorted(ds.fa.keys()) == ['origids']) # add some more ds.a['random'] = 'blurb' # check stripping attributes from a copy cds = ds.copy() # full copy ok_(sorted(cds.sa.keys()) == ['chunks', 'origids', 'targets']) ok_(sorted(cds.fa.keys()) == ['origids']) ok_(sorted(cds.a.keys()) == ['random']) cds = ds.copy(sa=[], fa=[], a=[]) # plain copy ok_(cds.sa.keys() == []) ok_(cds.fa.keys() == []) ok_(cds.a.keys() == []) cds = ds.copy(sa=['targets'], fa=None, a=['random']) # partial copy ok_(cds.sa.keys() == ['targets']) ok_(cds.fa.keys() == ['origids']) ok_(cds.a.keys() == ['random']) # there is not necessarily a mapper present ok_(not ds.a.has_key('mapper')) # has to complain about misshaped samples attributes assert_raises(ValueError, Dataset.from_wizard, samples, labels + labels) # check that we actually have attributes of the expected type ok_(isinstance(ds.sa['targets'], ArrayCollectable)) # the dataset will take care of not adding stupid stuff assert_raises(ValueError, ds.sa.__setitem__, 'stupid', np.arange(3)) assert_raises(ValueError, ds.fa.__setitem__, 'stupid', np.arange(4)) # or change proper attributes to stupid shapes try: ds.sa.targets = np.arange(3) except ValueError: pass else: ok_(False, msg="Assigning value with improper shape to attribute " "did not raise exception.") def test_labelschunks_access(): samples = np.arange(12).reshape((4, 3)).view(myarray) labels = range(4) chunks = [1, 1, 2, 2] ds = Dataset.from_wizard(samples, labels, chunks) # array subclass survives ok_(isinstance(ds.samples, myarray)) assert_array_equal(ds.targets, labels) assert_array_equal(ds.chunks, chunks) # moreover they should point to the same thing ok_(ds.targets is ds.sa.targets) ok_(ds.targets is ds.sa['targets'].value) ok_(ds.chunks is ds.sa.chunks) ok_(ds.chunks is ds.sa['chunks'].value) # assignment should work at all levels including 1st ds.targets = chunks assert_array_equal(ds.targets, chunks) ok_(ds.targets is ds.sa.targets) ok_(ds.targets is ds.sa['targets'].value) # test broadcasting # but not for plain scalars assert_raises(ValueError, ds.set_attr, 'sa.bc', 5) # and not for plain plain str assert_raises(TypeError, ds.set_attr, 'sa.bc', "mike") # but for any iterable of len == 1 ds.set_attr('sa.bc', (5,)) ds.set_attr('sa.dc', ["mike"]) assert_array_equal(ds.sa.bc, [5] * len(ds)) assert_array_equal(ds.sa.dc, ["mike"] * len(ds)) @reseed_rng() def test_ex_from_masked(): ds = Dataset.from_wizard(samples=np.atleast_2d(np.arange(5)).view(myarray), targets=1, chunks=1) # simple sequence has to be a single pattern assert_equal(ds.nsamples, 1) # array subclass survives ok_(isinstance(ds.samples, myarray)) # check correct pattern layout (1x5) assert_array_equal(ds.samples, [[0, 1, 2, 3, 4]]) # check for single label and origin assert_array_equal(ds.targets, [1]) assert_array_equal(ds.chunks, [1]) # now try adding pattern with wrong shape assert_raises(DatasetError, ds.append, Dataset.from_wizard(np.ones((2,3)), targets=1, chunks=1)) # now add two real patterns ds.append(Dataset.from_wizard(np.random.standard_normal((2, 5)), targets=2, chunks=2)) assert_equal(ds.nsamples, 3) assert_array_equal(ds.targets, [1, 2, 2]) assert_array_equal(ds.chunks, [1, 2, 2]) # test unique class labels ds.append(Dataset.from_wizard(np.random.standard_normal((2, 5)), targets=3, chunks=5)) assert_array_equal(ds.sa['targets'].unique, [1, 2, 3]) # test wrong attributes length assert_raises(ValueError, Dataset.from_wizard, np.random.standard_normal((4,2,3,4)), targets=[1, 2, 3], chunks=2) assert_raises(ValueError, Dataset.from_wizard, np.random.standard_normal((4,2,3,4)), targets=[1, 2, 3, 4], chunks=[2, 2, 2]) # no test one that is using from_masked ds = datasets['3dlarge'] for a in ds.sa: assert_equal(len(ds.sa[a].value), len(ds)) for a in ds.fa: assert_equal(len(ds.fa[a].value), ds.nfeatures) def test_shape_conversion(): ds = Dataset.from_wizard(np.arange(24).reshape((2, 3, 4)).view(myarray), targets=1, chunks=1) # array subclass survives ok_(isinstance(ds.samples, myarray)) assert_equal(ds.nsamples, 2) assert_equal(ds.samples.shape, (2, 12)) assert_array_equal(ds.samples, [range(12), range(12, 24)]) @reseed_rng() def test_multidim_attrs(): samples = np.arange(24).reshape(2, 3, 4) # have a dataset with two samples -- mapped from 2d into 1d # but have 2d labels and 3d chunks -- whatever that is ds = Dataset.from_wizard(samples.copy(), targets=samples.copy(), chunks=np.random.normal(size=(2,10,4,2))) assert_equal(ds.nsamples, 2) assert_equal(ds.nfeatures, 12) assert_equal(ds.sa.targets.shape, (2, 3, 4)) assert_equal(ds.sa.chunks.shape, (2, 10, 4, 2)) # try slicing subds = ds[0] assert_equal(subds.nsamples, 1) assert_equal(subds.nfeatures, 12) assert_equal(subds.sa.targets.shape, (1, 3, 4)) assert_equal(subds.sa.chunks.shape, (1, 10, 4, 2)) # add multidim feature attr fattr = ds.mapper.forward(samples) assert_equal(fattr.shape, (2, 12)) # should puke -- first axis is #samples assert_raises(ValueError, ds.fa.__setitem__, 'moresamples', fattr) # but that should be fine ds.fa['moresamples'] = fattr.T assert_equal(ds.fa.moresamples.shape, (12, 2)) def test_samples_shape(): ds = Dataset.from_wizard(np.ones((10, 2, 3, 4)), targets=1, chunks=1) ok_(ds.samples.shape == (10, 24)) # what happens to 1D samples ds = Dataset(np.arange(5)) assert_equal(ds.shape, (5, 1)) assert_equal(ds.nfeatures, 1) def test_basic_datamapping(): samples = np.arange(24).reshape((4, 3, 2)).view(myarray) ds = Dataset.from_wizard(samples) # array subclass survives ok_(isinstance(ds.samples, myarray)) # mapper should end up in the dataset ok_(ds.a.has_key('mapper')) # check correct mapping ok_(ds.nsamples == 4) ok_(ds.nfeatures == 6) def test_ds_shallowcopy(): # lets use some instance of somewhat evolved dataset ds = normal_feature_dataset() ds.samples = ds.samples.view(myarray) # SHALLOW copy the beast ds_ = copy.copy(ds) # verify that we have the same data assert_array_equal(ds.samples, ds_.samples) assert_array_equal(ds.targets, ds_.targets) assert_array_equal(ds.chunks, ds_.chunks) # array subclass survives ok_(isinstance(ds_.samples, myarray)) # modify and see that we actually DO change the data in both ds_.samples[0, 0] = 1234 assert_array_equal(ds.samples, ds_.samples) assert_array_equal(ds.targets, ds_.targets) assert_array_equal(ds.chunks, ds_.chunks) ds_.sa.targets[0] = 'ab' ds_.sa.chunks[0] = 234 assert_array_equal(ds.samples, ds_.samples) assert_array_equal(ds.targets, ds_.targets) assert_array_equal(ds.chunks, ds_.chunks) ok_(ds.sa.targets[0] == 'ab') ok_(ds.sa.chunks[0] == 234) # XXX implement me #ok_(np.any(ds.uniquetargets != ds_.uniquetargets)) #ok_(np.any(ds.uniquechunks != ds_.uniquechunks)) def test_ds_deepcopy(): # lets use some instance of somewhat evolved dataset ds = normal_feature_dataset() ds.samples = ds.samples.view(myarray) # Clone the beast ds_ = ds.copy() # array subclass survives ok_(isinstance(ds_.samples, myarray)) # verify that we have the same data assert_array_equal(ds.samples, ds_.samples) assert_array_equal(ds.targets, ds_.targets) assert_array_equal(ds.chunks, ds_.chunks) # modify and see if we don't change data in the original one ds_.samples[0, 0] = 1234 ok_(np.any(ds.samples != ds_.samples)) assert_array_equal(ds.targets, ds_.targets) assert_array_equal(ds.chunks, ds_.chunks) ds_.sa.targets = np.hstack(([123], ds_.targets[1:])) ok_(np.any(ds.samples != ds_.samples)) ok_(np.any(ds.targets != ds_.targets)) assert_array_equal(ds.chunks, ds_.chunks) ds_.sa.chunks = np.hstack(([1234], ds_.chunks[1:])) ok_(np.any(ds.samples != ds_.samples)) ok_(np.any(ds.targets != ds_.targets)) ok_(np.any(ds.chunks != ds_.chunks)) # XXX implement me #ok_(np.any(ds.uniquetargets != ds_.uniquetargets)) #ok_(np.any(ds.uniquechunks != ds_.uniquechunks)) @sweepargs(dsp=datasets.items()) def test_ds_array(dsp): # When dataset dsname, ds = dsp if dsname != 'hollow': ok_(np.asarray(ds) is ds.samples, msg="Must have been the same on %s=%s" % dsp) else: ok_(np.asarray(ds) is not ds.samples, msg="Should have not been the same on %s=%s" % dsp) ok_(np.array(ds) is not ds.samples, msg="Copy should have been created on array(), %s=%s" % dsp) def test_mergeds(): data0 = Dataset.from_wizard(np.ones((5, 5)), targets=1) data0.fa['one'] = np.ones(5) data1 = Dataset.from_wizard(np.ones((5, 5)), targets=1, chunks=1) data1.fa['one'] = np.zeros(5) data2 = Dataset.from_wizard(np.ones((3, 5)), targets=2, chunks=1) data3 = Dataset.from_wizard(np.ones((4, 5)), targets=2) data4 = Dataset.from_wizard(np.ones((2, 5)), targets=3, chunks=2) data4.fa['test'] = np.arange(5) # cannot merge if there are attributes missing in one of the datasets assert_raises(DatasetError, data1.append, data0) merged = data1.copy() merged.append(data2) ok_( merged.nfeatures == 5 ) l12 = [1]*5 + [2]*3 l1 = [1]*8 ok_((merged.targets == l12).all()) ok_((merged.chunks == l1).all()) data_append = data1.copy() data_append.append(data2) ok_(data_append.nfeatures == 5) ok_((data_append.targets == l12).all()) ok_((data_append.chunks == l1).all()) # # appending # # we need the same samples attributes in both datasets assert_raises(DatasetError, data2.append, data3) # # vstacking # if __debug__: # tested only in __debug__ assert_raises(ValueError, vstack, (data0, data1, data2, data3)) datasets = (data1, data2, data4) merged = vstack(datasets) assert_equal(merged.shape, (np.sum([len(ds) for ds in datasets]), data1.nfeatures)) assert_true('test' in merged.fa) assert_array_equal(merged.sa.targets, [1]*5 + [2]*3 + [3]*2) # # hstacking # assert_raises(ValueError, hstack, datasets) datasets = (data0, data1) merged = hstack(datasets) assert_equal(merged.shape, (len(data1), np.sum([ds.nfeatures for ds in datasets]))) assert_true('chunks' in merged.sa) assert_array_equal(merged.fa.one, [1]*5 + [0]*5) def test_hstack(): """Additional tests for hstacking of datasets """ ds3d = datasets['3dsmall'] nf1 = ds3d.nfeatures nf3 = 3 * nf1 ds3dstacked = hstack((ds3d, ds3d, ds3d)) ok_(ds3dstacked.nfeatures == nf3) for fav in ds3dstacked.fa.itervalues(): v = fav.value ok_(len(v) == nf3) assert_array_equal(v[:nf1], v[nf1:2*nf1]) assert_array_equal(v[2*nf1:], v[nf1:2*nf1]) def test_mergeds2(): """Test composition of new datasets by addition of existing ones """ data = dataset_wizard([range(5)], targets=1, chunks=1) assert_array_equal(data.UT, [1]) # simple sequence has to be a single pattern assert_equal(data.nsamples, 1) # check correct pattern layout (1x5) assert_array_equal(data.samples, [[0, 1, 2, 3, 4]]) # check for single labels and origin assert_array_equal(data.targets, [1]) assert_array_equal(data.chunks, [1]) # now try adding pattern with wrong shape assert_raises(DatasetError, data.append, dataset_wizard(np.ones((2,3)), targets=1, chunks=1)) # now add two real patterns dss = datasets['uni2large'].samples data.append(dataset_wizard(dss[:2, :5], targets=2, chunks=2)) assert_equal(data.nfeatures, 5) assert_array_equal(data.targets, [1, 2, 2]) assert_array_equal(data.chunks, [1, 2, 2]) # test automatic origins data.append(dataset_wizard(dss[3:5, :5], targets=3, chunks=[0, 1])) assert_array_equal(data.chunks, [1, 2, 2, 0, 1]) # test unique class labels assert_array_equal(data.UT, [1, 2, 3]) # test wrong label length assert_raises(ValueError, dataset_wizard, dss[:4, :5], targets=[ 1, 2, 3 ], chunks=2) # test wrong origin length assert_raises(ValueError, dataset_wizard, dss[:4, :5], targets=[ 1, 2, 3, 4 ], chunks=[ 2, 2, 2 ]) def test_combined_samplesfeature_selection(): data = dataset_wizard(np.arange(20).reshape((4, 5)).view(myarray), targets=[1,2,3,4], chunks=[5,6,7,8]) # array subclass survives ok_(isinstance(data.samples, myarray)) ok_(data.nsamples == 4) ok_(data.nfeatures == 5) sel = data[[0, 3], [1, 2]] ok_(sel.nsamples == 2) ok_(sel.nfeatures == 2) assert_array_equal(sel.targets, [1, 4]) assert_array_equal(sel.chunks, [5, 8]) assert_array_equal(sel.samples, [[1, 2], [16, 17]]) # array subclass survives ok_(isinstance(sel.samples, myarray)) # should yield the same result if done sequentially sel2 = data[:, [1, 2]] sel2 = sel2[[0, 3]] assert_array_equal(sel.samples, sel2.samples) ok_(sel2.nsamples == 2) ok_(sel2.nfeatures == 2) # array subclass survives ok_(isinstance(sel.samples, myarray)) assert_raises(ValueError, data.__getitem__, (1, 2, 3)) # test correct behavior when selecting just single rows/columns single = data[0] ok_(single.nsamples == 1) ok_(single.nfeatures == 5) assert_array_equal(single.samples, [[0, 1, 2, 3, 4]]) single = data[:, 0] ok_(single.nsamples == 4) ok_(single.nfeatures == 1) assert_array_equal(single.samples, [[0], [5], [10], [15]]) single = data[1, 1] ok_(single.nsamples == 1) ok_(single.nfeatures == 1) assert_array_equal(single.samples, [[6]]) # array subclass survives ok_(isinstance(single.samples, myarray)) @reseed_rng() def test_labelpermutation_randomsampling(): ds = Dataset.from_wizard(np.ones((5, 10)), targets=range(5), chunks=1) for i in xrange(1, 5): ds.append(Dataset.from_wizard(np.ones((5, 10)) + i, targets=range(5), chunks=i+1)) # assign some feature attributes ds.fa['roi'] = np.repeat(np.arange(5), 2) ds.fa['lucky'] = np.arange(10)%2 # use subclass for testing if it would survive ds.samples = ds.samples.view(myarray) ok_(ds.get_nsamples_per_attr('targets') == {0:5, 1:5, 2:5, 3:5, 4:5}) sample = ds.random_samples(2) ok_(sample.get_nsamples_per_attr('targets').values() == [ 2, 2, 2, 2, 2 ]) ok_((ds.sa['chunks'].unique == range(1, 6)).all()) @reseed_rng() def test_masked_featureselection(): origdata = np.random.standard_normal((10, 2, 4, 3, 5)).view(myarray) data = Dataset.from_wizard(origdata, targets=2, chunks=2) unmasked = data.samples.copy() # array subclass survives ok_(isinstance(data.samples, myarray)) # default must be no mask ok_(data.nfeatures == 120) ok_(data.a.mapper.forward1(origdata[0]).shape == (120,)) # check that full mask uses all features # this uses auto-mapping of selection arrays in __getitem__ sel = data[:, np.ones((2, 4, 3, 5), dtype='bool')] ok_(sel.nfeatures == data.samples.shape[1]) ok_(data.nfeatures == 120) # check partial array mask partial_mask = np.zeros((2, 4, 3, 5), dtype='bool') partial_mask[0, 0, 2, 2] = 1 partial_mask[1, 2, 2, 0] = 1 sel = data[:, partial_mask] ok_(sel.nfeatures == 2) # check that feature selection does not change source data ok_(data.nfeatures == 120) ok_(data.a.mapper.forward1(origdata[0]).shape == (120,)) # check selection with feature list sel = data[:, [0, 37, 119]] ok_(sel.nfeatures == 3) # check size of the masked samples ok_(sel.samples.shape == (10, 3)) # check that the right features are selected assert_array_equal(unmasked[:, [0, 37, 119]], sel.samples) @reseed_rng() def test_origmask_extraction(): origdata = np.random.standard_normal((10, 2, 4, 3)) data = Dataset.from_wizard(origdata, targets=2, chunks=2) # check with custom mask sel = data[:, 5] ok_(sel.samples.shape[1] == 1) @reseed_rng() def test_feature_masking(): mask = np.zeros((5, 3), dtype='bool') mask[2, 1] = True mask[4, 0] = True data = Dataset.from_wizard(np.arange(60).reshape((4, 5, 3)), targets=1, chunks=1, mask=mask) # check simple masking ok_(data.nfeatures == 2) # selection should be idempotent ok_(data[:, mask].nfeatures == data.nfeatures) # check that correct feature get selected assert_array_equal(data[:, 1].samples[:, 0], [12, 27, 42, 57]) # XXX put back when coord -> fattr is implemented #ok_(tuple(data[:, 1].a.mapper.getInId(0)) == (4, 0)) ok_(data[:, 1].a.mapper.forward1(mask).shape == (1,)) # check sugarings # XXX put me back #self.assertTrue(np.all(data.I == data.origids)) assert_array_equal(data.C, data.chunks) assert_array_equal(data.UC, np.unique(data.chunks)) assert_array_equal(data.T, data.targets) assert_array_equal(data.UT, np.unique(data.targets)) assert_array_equal(data.S, data.samples) assert_array_equal(data.O, data.mapper.reverse(data.samples)) def test_origid_handling(): ds = dataset_wizard(np.atleast_2d(np.arange(35)).T) ds.init_origids('both') ok_(ds.nsamples == 35) assert_equal(len(np.unique(ds.sa.origids)), 35) assert_equal(len(np.unique(ds.fa.origids)), 1) selector = [3, 7, 10, 15] subds = ds[selector] assert_array_equal(subds.sa.origids, ds.sa.origids[selector]) # Now if we request new origids if they are present we could # expect different behavior assert_raises(ValueError, subds.init_origids, 'both', mode='raises') sa_origids = subds.sa.origids.copy() fa_origids = subds.fa.origids.copy() for s in ('both', 'samples', 'features'): assert_raises(RuntimeError, subds.init_origids, s, mode='raise') subds.init_origids(s, mode='existing') # we should have the same origids as before assert_array_equal(subds.sa.origids, sa_origids) assert_array_equal(subds.fa.origids, fa_origids) # Lets now change, which should be default behavior subds.init_origids('both') assert_equal(len(sa_origids), len(subds.sa.origids)) assert_equal(len(fa_origids), len(subds.fa.origids)) # values should change though ok_((sa_origids != subds.sa.origids).any()) ok_((fa_origids != subds.fa.origids).any()) def test_idhash(): ds = dataset_wizard(np.arange(12).reshape((4, 3)), targets=1, chunks=1) origid = ds.idhash #XXX BUG -- no assurance that labels would become an array... for now -- do manually ds.targets = np.array([3, 1, 2, 3]) # change all labels ok_(origid != ds.idhash, msg="Changing all targets should alter dataset's idhash") origid = ds.idhash z = ds.targets[1] assert_equal(origid, ds.idhash, msg="Accessing shouldn't change idhash") z = ds.chunks assert_equal(origid, ds.idhash, msg="Accessing shouldn't change idhash") z[2] = 333 ok_(origid != ds.idhash, msg="Changing value in attribute should change idhash") origid = ds.idhash ds.samples[1, 1] = 1000 ok_(origid != ds.idhash, msg="Changing value in data should change idhash") origid = ds.idhash orig_labels = ds.targets #.copy() ds.sa.targets = range(len(ds)) ok_(origid != ds.idhash, msg="Chaging attribute also changes idhash") ds.targets = orig_labels ok_(origid == ds.idhash, msg="idhash should be restored after reassigning orig targets") def test_arrayattributes(): samples = np.arange(12).reshape((4, 3)) labels = range(4) chunks = [1, 1, 2, 2] ds = dataset_wizard(samples, labels, chunks) for a in (ds.samples, ds.targets, ds.chunks): ok_(isinstance(a, np.ndarray)) ds.targets = labels ok_(isinstance(ds.targets, np.ndarray)) ds.chunks = chunks ok_(isinstance(ds.chunks, np.ndarray)) # we should allow assigning somewhat more complex # iterables -- use ndarray of dtype object then # and possibly spit out a warning ds.sa['complex_list'] = [[], [1], [1, 2], []] ok_(ds.sa.complex_list.dtype == object) # but incorrect length should still fail assert_raises(ValueError, ds.sa.__setitem__, 'complex_list2', [[], [1], [1, 2]]) def test_repr(): attr_repr = "SampleAttribute(name='TestAttr', doc='my own test', " \ "value=array([0, 1, 2, 3, 4]), length=None)" sattr = SampleAttribute(name='TestAttr', doc='my own test', value=np.arange(5)) # check precise formal representation ok_(repr(sattr) == attr_repr) # check that it actually works as a Python expression from numpy import array eattr = eval(repr(sattr)) ok_(repr(eattr), attr_repr) # should also work for a simple dataset # Does not work due to bug in numpy: # python -c "from numpy import *; print __version__; r=repr(array(['s', None])); print r; eval(r)" # would give "array([s, None], dtype=object)" without '' around s #ds = datasets['uni2small'] ds = Dataset([[0, 1]], a={'dsa1': 'v1'}, sa={'targets': [0]}, fa={'targets': ['b', 'n']}) ds_repr = repr(ds) cfg_repr = cfg.get('datasets', 'repr', 'full') if cfg_repr == 'full': try: ok_(repr(eval(ds_repr)) == ds_repr) except SyntaxError, e: raise AssertionError, "%r cannot be evaluated" % ds_repr elif cfg_repr == 'str': ok_(str(ds) == ds_repr) else: raise AssertionError('Unknown kind of datasets.repr configuration %r' % cfg_repr) def test_str(): args = ( np.arange(12, dtype=np.int8).reshape((4, 3)), range(4), [1, 1, 2, 2]) for iargs in range(1, len(args)): ds = dataset_wizard(*(args[:iargs])) ds_s = str(ds) ok_(ds_s.startswith('')) def is_bsr(x): """Helper function to check if instance is bsr_matrix if such is avail at all """ import scipy.sparse as sparse return hasattr(sparse, 'bsr_matrix') and isinstance(x, sparse.bsr_matrix) def test_other_samples_dtypes(): skip_if_no_external('scipy') import scipy.sparse as sparse dshape = (4, 3) # test for ndarray, custom ndarray-subclass, matrix, # and all sparse matrix types we know stypes = [np.arange(np.prod(dshape)).reshape(dshape), np.arange(np.prod(dshape)).reshape(dshape).view(myarray), np.matrix(np.arange(np.prod(dshape)).reshape(dshape)), sparse.csc_matrix(np.arange(np.prod(dshape)).reshape(dshape)), sparse.csr_matrix(np.arange(np.prod(dshape)).reshape(dshape))] if hasattr(sparse, 'bsr_matrix'): stypes += [ # BSR cannot be sliced, but is more efficient for sparse # arithmetic operations than CSC pr CSR sparse.bsr_matrix(np.arange(np.prod(dshape)).reshape(dshape))] # LIL and COO are best for constructing matrices, not for # doing something with them #sparse.lil_matrix(np.arange(np.prod(dshape)).reshape(dshape)), #sparse.coo_matrix(np.arange(np.prod(dshape)).reshape(dshape)), # DOK doesn't allow duplicates and is bad at array-like slicing #sparse.dok_matrix(np.arange(np.prod(dshape)).reshape(dshape)), # DIA only has diagonal storage and cannot be sliced #sparse.dia_matrix(np.arange(np.prod(dshape)).reshape(dshape))] # it needs to have .shape (the only way to get len(sparse)) for s in stypes: ds = Dataset(s) # nothing happended to the original dtype assert_equal(type(s), type(ds.samples)) # no shape change assert_equal(ds.shape, dshape) assert_equal(ds.nsamples, dshape[0]) assert_equal(ds.nfeatures, dshape[1]) # sparse doesn't work like an array if sparse.isspmatrix(ds.samples): assert_raises(RuntimeError, np.mean, ds) else: # need to convert results, since matrices return matrices assert_array_equal(np.mean(ds, axis=0), np.array(np.mean(ds.samples, axis=0)).squeeze()) # select subset and see what happens # bsr type doesn't support first axis slicing if is_bsr(s): assert_raises(NotImplementedError, ds.__getitem__, [0]) elif versions['scipy'] <= '0.6.0' and sparse.isspmatrix(ds.samples): assert_raises(IndexError, ds.__getitem__, [0]) else: sel = ds[1:3] assert_equal(sel.shape, (2, dshape[1])) assert_equal(type(s), type(sel.samples)) if sparse.isspmatrix(sel.samples): assert_array_equal(sel.samples[1].todense(), ds.samples[2].todense()) else: assert_array_equal(sel.samples[1], ds.samples[2]) # feature selection if is_bsr(s): assert_raises(NotImplementedError, ds.__getitem__, (slice(None), 0)) elif versions['scipy'] <= '0.6.0' and sparse.isspmatrix(ds.samples): assert_raises(IndexError, ds.__getitem__, (slice(None), 0)) else: sel = ds[:, 1:3] assert_equal(sel.shape, (dshape[0], 2)) assert_equal(type(s), type(sel.samples)) if sparse.isspmatrix(sel.samples): assert_array_equal(sel.samples[:, 1].todense(), ds.samples[:, 2].todense()) else: assert_array_equal(sel.samples[:, 1], ds.samples[:, 2]) # what we don't do class voodoo: dtype = 'fancy' # voodoo assert_raises(ValueError, Dataset, voodoo()) # crippled assert_raises(ValueError, Dataset, np.array(5)) # things that might behave in surprising ways # lists -- first axis is samples, hence single feature ds = Dataset(range(5)) assert_equal(ds.nfeatures, 1) assert_equal(ds.shape, (5, 1)) # arrays of objects data = np.array([{}, {}]) ds = Dataset(data) assert_equal(ds.shape, (2, 1)) assert_equal(ds.nsamples, 2) # Nothing to index, hence no features assert_equal(ds.nfeatures, 1) def test_dataset_summary(): for ds in datasets.values() + [Dataset(np.array([None], dtype=object))]: s = ds.summary() ok_(s.startswith(str(ds)[1:-1])) # we strip surrounding '<...>' # TODO: actual test of what was returned; to do that properly # RF the summary() so it is a dictionary summaries = [] if 'targets' in ds.sa: summaries += ['Sequence statistics'] if 'chunks' in ds.sa: summaries += ['Summary for targets', 'Summary for chunks'] # By default we should get all kinds of summaries if not 'Number of unique targets >' in s: for summary in summaries: ok_(summary in s) # If we give "wrong" targets_attr we should see none of summaries s2 = ds.summary(targets_attr='bogus') for summary in summaries: ok_(not summary in s2) @nodebug(['ID_IN_REPR', 'MODULE_IN_REPR']) @with_tempfile(suffix='.hdf5') def test_h5py_io(dsfile): skip_if_no_external('h5py') # store random dataset to file ds = datasets['3dlarge'] ds.save(dsfile) # reload and check for identity ds2 = Dataset.from_hdf5(dsfile) assert_array_equal(ds.samples, ds2.samples) for attr in ds.sa: assert_array_equal(ds.sa[attr].value, ds2.sa[attr].value) for attr in ds.fa: assert_array_equal(ds.fa[attr].value, ds2.fa[attr].value) assert_true(len(ds.a.mapper), 2) # since we have no __equal__ do at least some comparison assert_equal(repr(ds.a.mapper), repr(ds2.a.mapper)) if __debug__: # debug mode needs special test as it enhances the repr output # with module info and id() appendix for objects # # INCORRECT slicing (:-1) since without any hash it results in # empty list -- moreover we seems of not reporting ids with # # any longer # #assert_equal('#'.join(repr(ds.a.mapper).split('#')[:-1]), # '#'.join(repr(ds2.a.mapper).split('#')[:-1])) pass def test_hollow_samples(): sshape = (10,5) ds = Dataset(HollowSamples(sshape, dtype=int), sa={'targets': np.tile(['one', 'two'], sshape[0] / 2)}) assert_equal(ds.shape, sshape) assert_equal(ds.samples.dtype, int) # should give us features [1,3] and samples [2,3,5] mds = ds[[2,3,5], 1::2] assert_array_equal(mds.samples.sid, [2,3,5]) assert_array_equal(mds.samples.fid, [1,3]) assert_equal(mds.shape, (3, 2)) assert_equal(ds.samples.dtype, mds.samples.dtype) # orig should stay pristine assert_equal(ds.samples.dtype, int) assert_equal(ds.shape, sshape) pymvpa2-2.2.0/mvpa2/tests/test_datasrcs.py000066400000000000000000000025261202542755000205240ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA's data sources""" from mvpa2.testing import * def test_sklearn_data_wrappers(): skip_if_no_external('skl') import mvpa2.datasets.sources as mvpads if externals.versions['skl'] >= '0.9': from sklearn import datasets as skldata else: from scitkits.learn import datasets as skldata import inspect found_fx = 0 for fx in skldata.__dict__: if not (fx.startswith('make_') or fx.startswith('load_')) \ or fx in ['load_filenames', 'load_files', 'load_sample_image', 'load_sample_images', 'load_svmlight_files', 'load_svmlight_file']: continue found_fx += 1 # fx() signatures must be the same assert_equal(inspect.getargspec(getattr(skldata, fx)), inspect.getargspec(getattr(mvpads, 'skl_%s' % fx[5:]))) # if we do not get a whole bunch, something changed assert_true(found_fx > 15) pymvpa2-2.2.0/mvpa2/tests/test_dcov.py000066400000000000000000000067531202542755000176610ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for dCOV and associated functions""" from mvpa2.testing import * # For testing from nose.tools import ok_ from numpy.testing import assert_array_almost_equal from mvpa2.testing.datasets import get_random_rotation from mvpa2.misc.dcov import _euclidean_distances, dCOV, dcorcoef from mvpa2.base import externals if externals.exists('cran-energy'): from mvpa2.misc.dcov import dCOV_R @reseed_rng() def test_euclidean_distances(): x = np.random.normal(size=(4, 10)) + np.random.normal()*10 d = _euclidean_distances(x, uv=True) # trust no one! distances = np.zeros((4, 10, 10)) for ix, x_ in enumerate(x.T): for iy, y_ in enumerate(x.T): distances[:, ix, iy] = np.sqrt((x_ - y_)**2) assert_array_equal(d, distances) def test_dCOV_against_R_energy(): skip_if_no_external('cran-energy') for N in xrange(1, 10): # sweep through size of the first data # We will compare to R implementation M, T = 4, 30 x = np.random.normal(size=(N, T)) + np.random.normal()*10 R = np.random.normal(size=(N, M)) y = 10*np.dot(R.T, x) + np.random.normal(size=(M, T)) \ + np.random.normal(size=(M,))[:, None] # offset # To assure that works for not all_est pdCovs = dCOV(x, y, all_est=False) dCovs = dCOV_R(x, y, all_est=False) assert_array_almost_equal(pdCovs, dCovs) for uv in True, False: for out, outp in zip(dCOV_R(x, y, uv=uv), dCOV(x, y, uv=uv)): assert_array_almost_equal(out, outp) def test_dCOV(): # Few simple tests to verify that the measure seems to be ok for N in xrange(1, 10): # sweep through size of the first data # We will compare to R implementation M, T = 4, 100 x = np.random.normal(size=(N, T)) + np.random.normal()*10 R = np.random.normal(size=(N, M)) # linearly dependent variable after rotation dCov, dCor, _, _ = dCOV(x, 10 * np.dot(R.T, x)) ok_(dCor > 0.7) # should be really high but might fluctuate # completely independent variable dCov, dCor, _, _ = dCOV(x, np.random.normal(size=x.shape)) # more dimension in x -- more uncertainty that they are # independent below is a heuristic (for T=100) and we should # just implement proper bootstrap significance estimation for # dCor ok_(dCor < 0.2+N/2.0) # should be really high but might fluctuate # the same variable -- things should match for dCov and dVar's dCov, dCor, dVarx, dVary = dCOV(x, x) assert_equal(dCov, dVarx) assert_equal(dCov, dVary) assert_equal(dCor, 1.) assert_equal(dcorcoef(x, x), 1) #+ np.random.normal(size=(M, T)) \ # + np.random.normal(size=(M,))[:, None] # offset # Test that would work on vectors dCov, dCor, dVarx, dVary = dCOV(np.arange(N), np.sin(np.arange(N)/3.)) if N>1: ok_(dCor > 0.6) # should be really high but might fluctuate assert_equal(dcorcoef(np.arange(N), np.sin(np.arange(N)/3.)), dCor) pymvpa2-2.2.0/mvpa2/tests/test_dochelpers.py000066400000000000000000000103441202542755000210450ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA dochelpers""" from mvpa2.base.dochelpers import single_or_plural, borrowdoc, borrowkwargs import unittest class DochelpersTests(unittest.TestCase): def test_basic(self): self.assertEqual(single_or_plural('a', 'b', 1), 'a') self.assertEqual(single_or_plural('a', 'b', 0), 'b') self.assertEqual(single_or_plural('a', 'b', 123), 'b') def test_borrow_doc(self): class A(object): def met1(self): """met1doc""" pass def met2(self): """met2doc""" pass class B(object): @borrowdoc(A) def met1(self): pass @borrowdoc(A, 'met1') def met2(self): pass self.assertEqual(B.met1.__doc__, A.met1.__doc__) self.assertEqual(B.met2.__doc__, A.met1.__doc__) def test_borrow_kwargs(self): class A(object): def met1(self, kp1=None, kp2=1): """met1 doc Parameters ---------- kp1 : None or int keyword parameter 1 kp2 : int, optional something """ pass def met2(self): """met2doc""" pass class B(object): @borrowkwargs(A) def met1(self, bu, **kwargs): """B.met1 doc Parameters ---------- bu description **kwargs Same as in A.met1 Some postamble """ pass @borrowkwargs(A, 'met1') def met_nodoc(self, **kwargs): pass @borrowkwargs(A, 'met1') def met_nodockwargs(self, bogus=None, **kwargs): """B.met_nodockwargs Parameters ---------- bogus something """ pass if True: # Just so we get different indentation level @borrowkwargs(A, 'met1', ['kp1']) def met_excludes(self, boguse=None, **kwargs): """B.met_excludes Parameters ---------- boguse something """ pass self.assertTrue('B.met1 doc' in B.met1.__doc__) for m in (B.met1, B.met_nodoc, B.met_nodockwargs, B.met_excludes): docstring = m.__doc__ self.assertTrue('Parameters' in docstring) self.assertTrue(not '*kwargs' in docstring, msg="We shouldn't carry kwargs in docstring now," "Got %r for %s" % (docstring, m)) self.assertTrue('kp2 ' in docstring) self.assertTrue((('kp1 ' in docstring) ^ (m == B.met_excludes))) # indentation should have been squashed properly self.assertTrue(not ' ' in docstring) # some additional checks to see if we are not loosing anything self.assertTrue('Some postamble' in B.met1.__doc__) self.assertTrue('B.met_nodockwargs' in B.met_nodockwargs.__doc__) self.assertTrue('boguse' in B.met_excludes.__doc__) def test_searchlight_doc(self): # Searchlight __doc__ revealed issue of multiple enable_ca from mvpa2.measures.searchlight import Searchlight sldoc = Searchlight.__init__.__doc__ self.assertEqual(sldoc.count('enable_ca'), 1) self.assertEqual(sldoc.count('disable_ca'), 1) # TODO: more unittests def suite(): return unittest.makeSuite(DochelpersTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_eepdataset.py000066400000000000000000000052041202542755000210330ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA EEP dataset""" import os.path import numpy as np from mvpa2 import pymvpa_dataroot from mvpa2.base import externals from mvpa2.datasets.eep import eep_dataset, EEPBin from mvpa2.testing.tools import assert_equal, assert_true, \ assert_array_almost_equal def test_eep_load(): eb = EEPBin(os.path.join(pymvpa_dataroot, 'eep.bin')) ds = [ eep_dataset(source, targets=[1, 2]) for source in (eb, os.path.join(pymvpa_dataroot, 'eep.bin')) ] for d in ds: assert_equal(d.nsamples, 2) assert_equal(d.nfeatures, 128) assert_equal(np.unique(d.fa.channels[4*23:4*23+4]), 'Pz') assert_array_almost_equal([np.arange(-0.002, 0.005, 0.002)] * 32, d.a.mapper.reverse1(d.fa.timepoints)) def test_eep_bin(): eb = EEPBin(os.path.join(pymvpa_dataroot, 'eep.bin')) assert_equal(eb.nchannels, 32) assert_equal(eb.nsamples, 2) assert_equal(eb.ntimepoints, 4) assert_true(eb.t0 - eb.dt < 0.00000001) assert_equal(len(eb.channels), 32) assert_equal(eb.data.shape, (2, 32, 4)) # XXX put me back whenever there is a proper resamples() # def test_resampling(self): # ds = eep_dataset(os.path.join(pymvpa_dataroot, 'eep.bin'), # targets=[1, 2]) # channelids = np.array(ds.a.channelids).copy() # self.assertTrue(np.round(ds.samplingrate) == 500.0) # # if not externals.exists('scipy'): # return # # # should puke when called with nothing # self.assertRaises(ValueError, ds.resample) # # # now for real -- should divide nsamples into half # rds = ds.resample(sr=250, inplace=False) # # We should have not changed anything # self.assertTrue(np.round(ds.samplingrate) == 500.0) # # # by default do 'inplace' resampling # ds.resample(sr=250) # for d in [rds, ds]: # self.assertTrue(np.round(d.samplingrate) == 250) # self.assertTrue(d.nsamples == 2) # self.assertTrue(np.abs((d.a.dt - 1.0/250)/d.a.dt)<1e-5) # self.assertTrue(np.all(d.a.channelids == channelids)) # # lets now see if we still have a mapper # self.assertTrue(d.O.shape == (2, len(channelids), 2)) pymvpa2-2.2.0/mvpa2/tests/test_emp_null.py000066400000000000000000000017531202542755000205340ustar00rootroot00000000000000""" Test the empirical null estimator. Borrowed from NiPy -- see COPYING distributed with PyMVPA for the copyright/license information. """ import warnings import numpy as np from mvpa2.base import cfg from mvpa2.testing import * skip_if_no_external('scipy') from mvpa2.support.nipy import emp_null #from emp_null import ENN def setup(): # Suppress warnings during tests to reduce noise warnings.simplefilter("ignore") def teardown(): # Clear list of warning filters warnings.resetwarnings() @reseed_rng() def test_efdr(): # generate the data n = 100000 x = np.random.randn(n) x[:3000] += 3 # # make the tests efdr = emp_null.ENN(x) if cfg.getboolean('tests', 'labile', default='yes'): # 2.9 instead of stricter 3.0 for tolerance np.testing.assert_array_less(efdr.fdr(2.9), 0.15) np.testing.assert_array_less(-efdr.threshold(alpha=0.05), -3) np.testing.assert_array_less(-efdr.uncorrected_threshold(alpha=0.001), -3) pymvpa2-2.2.0/mvpa2/tests/test_enet.py000066400000000000000000000041551202542755000176530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA least angle regression (ENET) classifier""" import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import * skip_if_no_external('elasticnet') from mvpa2 import cfg from mvpa2.clfs.enet import ENET from scipy.stats import pearsonr from mvpa2.misc.data_generators import normal_feature_dataset class ENETTests(unittest.TestCase): def test_enet(self): # not the perfect dataset with which to test, but # it will do for now. #data = datasets['dumb2'] # for some reason the R code fails with the dumb data data = datasets['chirp_linear'] clf = ENET() clf.train(data) # prediction has to be almost perfect # test with a correlation pre = clf.predict(data.samples) cor = pearsonr(pre, data.targets) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(cor[0] > .8) def test_enet_state(self): #data = datasets['dumb2'] # for some reason the R code fails with the dumb data data = datasets['chirp_linear'] clf = ENET() clf.train(data) clf.ca.enable('predictions') p = clf.predict(data.samples) self.assertTrue((p == clf.ca.predictions).all()) def test_enet_sensitivities(self): data = datasets['chirp_linear'] # use ENET on binary problem clf = ENET() clf.train(data) # now ask for the sensitivities WITHOUT having to pass the dataset # again sens = clf.get_sensitivity_analyzer(force_train=False)(None) self.assertTrue(sens.shape == (data.nfeatures,)) def suite(): return unittest.makeSuite(ENETTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_erdataset.py000066400000000000000000000103051202542755000206660ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for the event-related dataset''' from mvpa2.testing import * from mvpa2.datasets import dataset_wizard from mvpa2.mappers.flatten import FlattenMapper from mvpa2.mappers.boxcar import BoxcarMapper from mvpa2.datasets.eventrelated import find_events, eventrelated_dataset def test_erdataset(): # 3 chunks, 5 targets, blocks of 5 samples each nchunks = 3 ntargets = 5 blocklength = 5 nfeatures = 10 targets = np.tile(np.repeat(range(ntargets), blocklength), nchunks) chunks = np.repeat(np.arange(nchunks), ntargets * blocklength) samples = np.repeat( np.arange(nchunks * ntargets * blocklength), nfeatures).reshape(-1, nfeatures) ds = dataset_wizard(samples, targets=targets, chunks=chunks) # check if events are determined properly evs = find_events(targets=ds.sa.targets, chunks=ds.sa.chunks) for ev in evs: assert_equal(ev['duration'], blocklength) assert_equal(ntargets * nchunks, len(evs)) for t in range(ntargets): assert_equal(len([ev for ev in evs if ev['targets'] == t]), nchunks) # now turn `ds` into an eventreleated dataset erds = eventrelated_dataset(ds, evs) # the only unprefixed sample attributes are assert_equal(sorted([a for a in ds.sa if not a.startswith('event')]), ['chunks', 'targets']) # samples as expected? assert_array_equal(erds.samples[0], np.repeat(np.arange(blocklength), nfeatures)) # that should also be the temporal feature offset assert_array_equal(erds.samples[0], erds.fa.event_offsetidx) assert_array_equal(erds.sa.event_onsetidx, np.arange(0,71,5)) # finally we should see two mappers assert_equal(len(erds.a.mapper), 2) assert_true(isinstance(erds.a.mapper[0], BoxcarMapper)) assert_true(isinstance(erds.a.mapper[1], FlattenMapper)) # # now check the same dataset with event descretization tr = 2.5 ds.sa['time'] = np.arange(nchunks * ntargets * blocklength) * tr evs = [{'onset': 4.9, 'duration': 6.2}] # doesn't work without conversion assert_raises(ValueError, eventrelated_dataset, ds, evs) erds = eventrelated_dataset(ds, evs, time_attr='time') assert_equal(len(erds), 1) assert_array_equal(erds.samples[0], np.repeat(np.arange(1,5), nfeatures)) assert_array_equal(erds.sa.orig_onset, [evs[0]['onset']]) assert_array_equal(erds.sa.orig_duration, [evs[0]['duration']]) assert_array_almost_equal(erds.sa.orig_offset, [2.4]) assert_array_equal(erds.sa.time, [np.arange(2.5, 11, 2.5)]) # now with closest match erds = eventrelated_dataset(ds, evs, time_attr='time', match='closest') expected_nsamples = 3 assert_equal(len(erds), 1) assert_array_equal(erds.samples[0], np.repeat(np.arange(2,2+expected_nsamples), nfeatures)) assert_array_equal(erds.sa.orig_onset, [evs[0]['onset']]) assert_array_equal(erds.sa.orig_duration, [evs[0]['duration']]) assert_array_almost_equal(erds.sa.orig_offset, [-0.1]) assert_array_equal(erds.sa.time, [np.arange(5.0, 11, 2.5)]) # now test the way back results = np.arange(erds.nfeatures) assert_array_equal(erds.a.mapper.reverse1(results), results.reshape(expected_nsamples, nfeatures)) # what about multiple results? nresults = 5 results = dataset_wizard([results] * nresults) # and let's have an attribute to make it more difficult results.sa['myattr'] = np.arange(5) rds = erds.a.mapper.reverse(results) assert_array_equal(rds, results.samples.reshape(nresults * expected_nsamples, nfeatures)) assert_array_equal(rds.sa.myattr, np.repeat(results.sa.myattr, expected_nsamples)) pymvpa2-2.2.0/mvpa2/tests/test_externals.py000066400000000000000000000056211202542755000207240ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Test externals checking""" import unittest from mvpa2 import cfg from mvpa2.base import externals from mvpa2.support import copy class TestExternals(unittest.TestCase): def setUp(self): self.backup = [] # paranoid check self.cfgstr = str(cfg) # clean up externals cfg for proper testing if cfg.has_section('externals'): self.backup = copy.deepcopy(cfg.items('externals')) cfg.remove_section('externals') def tearDown(self): if len(self.backup): # wipe existing one completely if cfg.has_section('externals'): cfg.remove_section('externals') cfg.add_section('externals') for o,v in self.backup: cfg.set('externals', o,v) # paranoid check # since order can't be guaranteed, lets check # each item after sorting self.assertEqual(sorted(self.cfgstr.split('\n')), sorted(str(cfg).split('\n'))) def test_externals(self): self.assertRaises(ValueError, externals.exists, 'BoGuS') def test_externals_no_double_invocation(self): # no external should be checking twice (unless specified # explicitely) class Checker(object): """Helper class to increment count of actual checks""" def __init__(self): self.checked = 0 def check(self): self.checked += 1 checker = Checker() externals._KNOWN['checker'] = 'checker.check()' externals.__dict__['checker'] = checker externals.exists('checker') self.assertEqual(checker.checked, 1) externals.exists('checker') self.assertEqual(checker.checked, 1) externals.exists('checker', force=True) self.assertEqual(checker.checked, 2) externals.exists('checker') self.assertEqual(checker.checked, 2) # restore original externals externals.__dict__.pop('checker') externals._KNOWN.pop('checker') def test_externals_correct2nd_invocation(self): # always fails externals._KNOWN['checker2'] = 'raise ImportError' self.assertTrue(not externals.exists('checker2'), msg="Should be False on 1st invocation") self.assertTrue(not externals.exists('checker2'), msg="Should be False on 2nd invocation as well") externals._KNOWN.pop('checker2') def suite(): return unittest.makeSuite(TestExternals) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_filters.py000066400000000000000000000043521202542755000203670ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for filter mappers''' from mvpa2.testing import * skip_if_no_external('scipy') import numpy as np from mvpa2.datasets import Dataset, vstack from mvpa2.mappers.filters import FFTResampleMapper def test_resample(): time = np.linspace(0, 2*np.pi, 100) ds = Dataset(np.vstack((np.sin(time), np.cos(time))).T, sa = {'time': time, 'section': np.repeat(range(10), 10)}) assert_equal(ds.shape, (100, 2)) # downsample num = 10 rm = FFTResampleMapper(num, window=('gauss', 50), position_attr='time', attr_strategy='sample') mds = rm.forward(ds) assert_equal(mds.shape, (num, ds.nfeatures)) # didn't change the orig assert_equal(len(ds), 100) # check position-based resampling ds_partial = ds[0::10] mds_partial = rm.forward(ds_partial) # despite different input sampling should yield the same output timepoints assert_array_almost_equal(mds.sa.time, mds_partial.sa.time) # exclude the first points to prevent edge effects, but the data should be # very similar too assert_array_almost_equal(mds.samples[2:], mds_partial.samples[2:], decimal=2) # simple sample of sa's should give meaningful stuff assert_array_equal(mds.sa.section, range(10)) # and now for a dataset with chunks cds = vstack([ds.copy(), ds.copy()]) cds.sa['chunks'] = np.repeat([0,1], len(ds)) rm = FFTResampleMapper(num, attr_strategy='sample', chunks_attr='chunks', window=('gauss', 50)) mcds = rm.forward(cds) assert_equal(mcds.shape, (20, 2)) assert_array_equal(mcds.sa.section, np.tile(range(10),2)) # each individual chunks should be identical to previous dataset assert_array_almost_equal(mds.samples, mcds.samples[:10]) assert_array_almost_equal(mds.samples, mcds.samples[10:]) pymvpa2-2.2.0/mvpa2/tests/test_fxmapper.py000066400000000000000000000144221202542755000205400ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA SampleGroup mapper""" from mvpa2.testing import sweepargs from mvpa2.testing.datasets import datasets from mvpa2.measures.anova import OneWayAnova import numpy as np from mvpa2.mappers.fx import * from mvpa2.datasets.base import dataset_wizard, Dataset from mvpa2.testing.tools import * def test_samplesgroup_mapper(): data = np.arange(24).reshape(8,3) labels = [0, 1] * 4 chunks = np.repeat(np.array((0,1)),4) # correct results csamples = [[3, 4, 5], [6, 7, 8], [15, 16, 17], [18, 19, 20]] clabels = [0, 1, 0, 1] cchunks = [0, 0, 1, 1] ds = dataset_wizard(samples=data, targets=labels, chunks=chunks) # add some feature attribute -- just to check ds.fa['checker'] = np.arange(3) ds.init_origids('samples') m = mean_group_sample(['targets', 'chunks']) mds = m.forward(ds) assert_array_equal(mds.samples, csamples) # FAs should simply remain the same assert_array_equal(mds.fa.checker, np.arange(3)) # now without grouping m = mean_sample() # forwarding just the samples should yield the same result assert_array_equal(m.forward(ds.samples), m.forward(ds).samples) # directly apply to dataset # using untrained mapper m = mean_group_sample(['targets', 'chunks']) mapped = ds.get_mapped(m) assert_equal(mapped.nsamples, 4) assert_equal(mapped.nfeatures, 3) assert_array_equal(mapped.samples, csamples) assert_array_equal(mapped.targets, clabels) assert_array_equal(mapped.chunks, cchunks) # make sure origids get regenerated assert_array_equal([s.count('+') for s in mapped.sa.origids], [1] * 4) # disbalanced dataset -- lets remove 0th sample so there is no target # 0 in 0th chunk ds_ = ds[[0, 1, 3, 5]] mapped = ds_.get_mapped(m) ok_(len(mapped) == 3) ok_(not None in mapped.sa.origids) def test_featuregroup_mapper(): ds = Dataset(np.arange(24).reshape(3,8)) ds.fa['roi'] = [0, 1] * 4 # just to check ds.sa['chunks'] = np.arange(3) # correct results csamples = [[3, 4], [11, 12], [19, 20]] croi = [0, 1] cchunks = np.arange(3) m = mean_group_feature(['roi']) mds = m.forward(ds) assert_equal(mds.shape, (3, 2)) assert_array_equal(mds.samples, csamples) assert_array_equal(mds.fa.roi, np.unique([0, 1] * 4)) # FAs should simply remain the same assert_array_equal(mds.sa.chunks, np.arange(3)) # now without grouping m = mean_feature() # forwarding just the samples should yield the same result assert_array_equal(m.forward(ds.samples), m.forward(ds).samples) # And when operating on a dataset with >1D samples, then operate # only across "features", i.e. 1st dimension ds = Dataset(np.arange(24).reshape(3,2,2,2)) mapped = ds.get_mapped(m) assert_array_equal(m.forward(ds.samples), mapped.samples) assert_array_equal(mapped.samples.shape, (3, 2, 2)) assert_array_equal(mapped.samples, np.mean(ds.samples, axis=1)) # and still could map back? ;) not ATM, so just to ensure consistency assert_raises(NotImplementedError, mapped.a.mapper.reverse, mapped.samples) # but it should also work with standard 2d sample arrays ds = Dataset(np.arange(24).reshape(3,8)) mapped = ds.get_mapped(m) assert_array_equal(mapped.samples.shape, (3, 1)) def test_fxmapper(): origdata = np.arange(24).reshape(3,8) ds = Dataset(origdata.copy()) ds.samples *= -1 # test a mapper that doesn't change the shape # it shouldn't mapper along with axis it is applied m_s = FxMapper('samples', np.absolute) m_f = FxMapper('features', np.absolute) a_m = absolute_features() assert_array_equal(m_s.forward(ds), origdata) assert_array_equal(a_m.forward(ds), origdata) assert_array_equal(m_s.forward(ds), m_f.forward(ds)) def test_features01(): # TODO: might be worth creating appropriate factory # help in mappers/fx aov = OneWayAnova( postproc=FxMapper('features', lambda x: x / x.max(), attrfx=None)) f = aov(datasets['uni2small']) ok_((f.samples != 1.0).any()) ok_(f.samples.max() == 1.0) @sweepargs(f=dir(np)) def test_fx_native_calls(f): import inspect ds = datasets['uni2small'] if f in ['size', 'rollaxis']: # really not appropriate ones here to test return try: f_ = getattr(np, f) if 'axis' != inspect.getargs(f_.__code__).args[1]: # if 'axis' is not the 2nd arg -- skip return except: return # so we got a function which has 'axis' arugment for naxis in (0, 1): # check on both axes for do_group in (False, True): # test with # groupping and without kwargs = dict(attrfx='merge') if do_group: if naxis == 0: kwargs['uattrs'] = ('targets', 'chunks') else: kwargs['uattrs'] = ('nonbogus_targets',) axis = ('samples', 'features')[naxis] def custom(data): """So we could enforce apply_along_axis """ # always 0 since it would be the job for apply_along_axis return f_(data, axis=0) try: m2 = FxMapper(axis, custom, **kwargs) dsm2 = ds.get_mapped(m2) except Exception, e: # We assume that our previous implementation should work ;-) continue m1 = FxMapper(axis, f_, **kwargs) dsm1 = ds.get_mapped(m1) assert_objectarray_equal(dsm1.samples, dsm2.samples) assert_objectarray_equal(dsm1.targets, dsm2.targets) assert_objectarray_equal(dsm1.chunks, dsm2.chunks) assert_objectarray_equal(dsm1.fa.nonbogus_targets, dsm2.fa.nonbogus_targets) pymvpa2-2.2.0/mvpa2/tests/test_generators.py000066400000000000000000000310401202542755000210620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for generators.""" import itertools import numpy as np from mvpa2.testing.tools import ok_, assert_array_equal, assert_true, \ assert_false, assert_equal, assert_raises, assert_almost_equal, \ reseed_rng from mvpa2.datasets import dataset_wizard, Dataset from mvpa2.generators.splitters import Splitter from mvpa2.base.node import ChainNode from mvpa2.generators.partition import OddEvenPartitioner, NFoldPartitioner, \ ExcludeTargetsCombinationsPartitioner from mvpa2.generators.permutation import AttributePermutator from mvpa2.generators.base import Repeater, Sifter from mvpa2.generators.resampling import Balancer from mvpa2.misc.support import get_nelements_per_value def give_data(): # 100x10, 10 chunks, 4 targets return dataset_wizard(np.random.normal(size=(100,10)), targets=[ i%4 for i in range(100) ], chunks=[ i//10 for i in range(100)]) @reseed_rng() def test_splitter(): ds = give_data() # split with defaults spl1 = Splitter('chunks') assert_raises(NotImplementedError, spl1, ds) splits = list(spl1.generate(ds)) assert_equal(len(splits), len(ds.sa['chunks'].unique)) for split in splits: # it should have perform basic slicing! assert_true(split.samples.base is ds.samples) assert_equal(len(split.sa['chunks'].unique), 1) assert_true('lastsplit' in split.a) assert_true(splits[-1].a.lastsplit) # now again, more customized spl2 = Splitter('targets', attr_values = [0,1,1,2,3,3,3], count=4, noslicing=True) splits = list(spl2.generate(ds)) assert_equal(len(splits), 4) for split in splits: # it should NOT have perform basic slicing! assert_false(split.samples.base is ds.samples) assert_equal(len(split.sa['targets'].unique), 1) assert_equal(len(split.sa['chunks'].unique), 10) assert_true(splits[-1].a.lastsplit) # two should be identical assert_array_equal(splits[1].samples, splits[2].samples) # now go wild and split by feature attribute ds.fa['roi'] = np.repeat([0,1], 5) # splitter should auto-detect that this is a feature attribute spl3 = Splitter('roi') splits = list(spl3.generate(ds)) assert_equal(len(splits), 2) for split in splits: assert_true(split.samples.base is ds.samples) assert_equal(len(split.fa['roi'].unique), 1) assert_equal(split.shape, (100, 5)) # and finally test chained splitters cspl = ChainNode([spl2, spl3, spl1]) splits = list(cspl.generate(ds)) # 4 target splits and 2 roi splits each and 10 chunks each assert_equal(len(splits), 80) @reseed_rng() def test_partitionmapper(): ds = give_data() oep = OddEvenPartitioner() parts = list(oep.generate(ds)) assert_equal(len(parts), 2) for i, p in enumerate(parts): assert_array_equal(p.sa['partitions'].unique, [1, 2]) assert_equal(p.a.partitions_set, i) assert_equal(len(p), len(ds)) @reseed_rng() def test_attrpermute(): ds = give_data() ds.sa['ids'] = range(len(ds)) pristine_data = ds.samples.copy() permutation = AttributePermutator(['targets', 'ids'], assure=True) pds = permutation(ds) # should not touch the data assert_array_equal(pristine_data, pds.samples) # even keep the very same array assert_true(pds.samples.base is ds.samples) # there is no way that it can be the same attribute assert_false(np.all(pds.sa.ids == ds.sa.ids)) # ids should reflect permutation setup assert_array_equal(pds.sa.targets, ds.sa.targets[pds.sa.ids]) # other attribute should remain intact assert_array_equal(pds.sa.chunks, ds.sa.chunks) # now chunk-wise permutation permutation = AttributePermutator('ids', limit='chunks') pds = permutation(ds) # first ten should remain first ten assert_false(np.any(pds.sa.ids[:10] > 9)) # same thing, but only permute single chunk permutation = AttributePermutator('ids', limit={'chunks': 3}) pds = permutation(ds) # one chunk should change assert_false(np.any(pds.sa.ids[30:40] > 39)) assert_false(np.any(pds.sa.ids[30:40] < 30)) # the rest not assert_array_equal(pds.sa.ids[:30], range(30)) # or a list of chunks permutation = AttributePermutator('ids', limit={'chunks': [3,4]}) pds = permutation(ds) # two chunks should change assert_false(np.any(pds.sa.ids[30:50] > 49)) assert_false(np.any(pds.sa.ids[30:50] < 30)) # the rest not assert_array_equal(pds.sa.ids[:30], range(30)) # and now try generating more permutations nruns = 2 permutation = AttributePermutator(['targets', 'ids'], assure=True, count=nruns) pds = list(permutation.generate(ds)) assert_equal(len(pds), nruns) for p in pds: assert_false(np.all(p.sa.ids == ds.sa.ids)) # permute feature attrs ds.fa['ids'] = range(ds.shape[1]) permutation = AttributePermutator('fa.ids', assure=True) pds = permutation(ds) assert_false(np.all(pds.fa.ids == ds.fa.ids)) @reseed_rng() def test_balancer(): ds = give_data() # only mark the selection in an attribute bal = Balancer() res = bal(ds) # we get a new dataset, with shared samples assert_false(ds is res) assert_true(ds.samples is res.samples.base) # should kick out 2 samples in each chunk of 10 assert_almost_equal(np.mean(res.sa.balanced_set), 0.8) # same as above, but actually apply the selection bal = Balancer(apply_selection=True, count=5) # just run it once res = bal(ds) # we get a new dataset, with shared samples assert_false(ds is res) # should kick out 2 samples in each chunk of 10 assert_equal(len(res), int(0.8 * len(ds))) # now use it as a generator dses = list(bal.generate(ds)) assert_equal(len(dses), 5) # with limit bal = Balancer(limit={'chunks': 3}, apply_selection=True) res = bal(ds) assert_equal(res.sa['chunks'].unique, (3,)) assert_equal(get_nelements_per_value(res.sa.targets).values(), [2] * 4) # fixed amount bal = Balancer(amount=1, limit={'chunks': 3}, apply_selection=True) res = bal(ds) assert_equal(get_nelements_per_value(res.sa.targets).values(), [1] * 4) # fraction bal = Balancer(amount=0.499, limit=None, apply_selection=True) res = bal(ds) assert_array_equal( np.round(np.array(get_nelements_per_value(ds.sa.targets).values()) * 0.5), np.array(get_nelements_per_value(res.sa.targets).values())) # check on feature attribute ds.fa['one'] = np.tile([1,2], 5) ds.fa['chk'] = np.repeat([1,2], 5) bal = Balancer(attr='one', amount=2, limit='chk', apply_selection=True) res = bal(ds) assert_equal(get_nelements_per_value(res.fa.one).values(), [4] * 2) def test_repeater(): reps = 4 r = Repeater(reps, space='OMG') dsl = [ds for ds in r.generate(Dataset([0,1]))] assert_equal(len(dsl), reps) for i, ds in enumerate(dsl): assert_equal(ds.a.OMG, i) def test_sifter(): # somewhat duplicating the doctest ds = Dataset(samples=np.arange(8).reshape((4,2)), sa={'chunks': [ 0 , 1 , 2 , 3 ], 'targets': ['c', 'c', 'p', 'p']}) for sift_targets_definition in (['c', 'p'], dict(uvalues=['c', 'p'])): par = ChainNode([NFoldPartitioner(cvtype=2, attr='chunks'), Sifter([('partitions', 2), ('targets', sift_targets_definition)]) ]) dss = list(par.generate(ds)) assert_equal(len(dss), 4) for ds_ in dss: testing = ds[ds_.sa.partitions == 2] assert_array_equal(np.unique(testing.sa.targets), ['c', 'p']) # and we still have both targets present in training training = ds[ds_.sa.partitions == 1] assert_array_equal(np.unique(training.sa.targets), ['c', 'p']) def test_sifter_with_balancing(): # extended previous test which was already # "... somewhat duplicating the doctest" ds = Dataset(samples=np.arange(12).reshape((-1, 2)), sa={'chunks': [ 0 , 1 , 2 , 3 , 4, 5 ], 'targets': ['c', 'c', 'c', 'p', 'p', 'p']}) # Without sifter -- just to assure that we do get all of them # i.e. 6*5*4*3/(4!) = 15 par = ChainNode([NFoldPartitioner(cvtype=4, attr='chunks')]) assert_equal(len(list(par.generate(ds))), 15) # so we will take 4 chunks out of available 7, but would care only # about those partitions where we have balanced number of 'c' and 'p' # entries assert_raises(ValueError, lambda x: list(Sifter([('targets', dict(wrong=1))]).generate(x)), ds) par = ChainNode([NFoldPartitioner(cvtype=4, attr='chunks'), Sifter([('partitions', 2), ('targets', dict(uvalues=['c', 'p'], balanced=True))]) ]) dss = list(par.generate(ds)) # print [ x[x.sa.partitions==2].sa.targets for x in dss ] assert_equal(len(dss), 9) for ds_ in dss: testing = ds[ds_.sa.partitions == 2] assert_array_equal(np.unique(testing.sa.targets), ['c', 'p']) # and we still have both targets present in training training = ds[ds_.sa.partitions == 1] assert_array_equal(np.unique(training.sa.targets), ['c', 'p']) def test_exclude_targets_combinations(): partitioner = ChainNode([NFoldPartitioner(), ExcludeTargetsCombinationsPartitioner( k=2, targets_attr='targets', space='partitions')], space='partitions') from mvpa2.misc.data_generators import normal_feature_dataset ds = normal_feature_dataset(snr=0., nlabels=4, perlabel=3, nchunks=3, nonbogus_features=[0,1,2,3], nfeatures=4) partitions = list(partitioner.generate(ds)) assert_equal(len(partitions), 3 * 6) splitter = Splitter('partitions') combs = [] comb_chunks = [] for p in partitions: trds, teds = list(splitter.generate(p))[:2] comb = tuple(np.unique(teds.targets)) combs.append(comb) comb_chunks.append(comb + tuple(np.unique(teds.chunks))) assert_equal(len(set(combs)), 6) # just 6 possible combinations of 2 out of 4 assert_equal(len(set(comb_chunks)), 3*6) # all unique def test_exclude_targets_combinations_subjectchunks(): partitioner = ChainNode([NFoldPartitioner(attr='subjects'), ExcludeTargetsCombinationsPartitioner( k=1, targets_attr='chunks', space='partitions')], space='partitions') # targets do not need even to be defined! ds = Dataset(np.arange(18).reshape(9, 2), sa={'chunks': np.arange(9) // 3, 'subjects': np.arange(9) % 3}) dss = list(partitioner.generate(ds)) assert_equal(len(dss), 9) testing_subjs, testing_chunks = [], [] for ds_ in dss: testing_partition = ds_.sa.partitions == 2 training_partition = ds_.sa.partitions == 1 # must be scalars -- so implicit test here # if not -- would be error testing_subj = np.asscalar(np.unique(ds_.sa.subjects[testing_partition])) testing_subjs.append(testing_subj) testing_chunk = np.asscalar(np.unique(ds_.sa.chunks[testing_partition])) testing_chunks.append(testing_chunk) # and those must not appear for training ok_(not testing_subj in ds_.sa.subjects[training_partition]) ok_(not testing_chunk in ds_.sa.chunks[training_partition]) # and we should have gone through all chunks/subjs pairs testing_pairs = set(zip(testing_subjs, testing_chunks)) assert_equal(len(testing_pairs), 9) # yoh: equivalent to set(itertools.product(range(3), range(3)))) # but .product is N/A for python2.5 assert_equal(testing_pairs, set(zip(*np.where(np.ones((3,3)))))) pymvpa2-2.2.0/mvpa2/tests/test_glmnet.py000066400000000000000000000053251202542755000202060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA least angle regression (ENET) classifier""" from mvpa2.testing import * skip_if_no_external('glmnet') from mvpa2.testing.datasets import * from mvpa2 import cfg from mvpa2.clfs.glmnet import GLMNET_R,GLMNET_C #from scipy.stats import pearsonr # Lets use our corr_error which would be available even without scipy from mvpa2.misc.errorfx import corr_error from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.testing.tools import assert_true, assert_equal, assert_array_equal def test_glmnet_r(): # not the perfect dataset with which to test, but # it will do for now. #data = datasets['dumb2'] # for some reason the R code fails with the dumb data data = datasets['chirp_linear'] clf = GLMNET_R() clf.train(data) # prediction has to be almost perfect # test with a correlation pre = clf.predict(data.samples) corerr = corr_error(pre, data.targets) if cfg.getboolean('tests', 'labile', default='yes'): assert_true(corerr < .2) def test_glmnet_c(): # define binary prob data = datasets['dumb2'] # use GLMNET on binary problem clf = GLMNET_C() clf.ca.enable('estimates') clf.train(data) # test predictions pre = clf.predict(data.samples) assert_array_equal(pre, data.targets) def test_glmnet_state(): #data = datasets['dumb2'] # for some reason the R code fails with the dumb data data = datasets['chirp_linear'] clf = GLMNET_R() clf.train(data) clf.ca.enable('predictions') p = clf.predict(data.samples) assert_array_equal(p, clf.ca.predictions) def test_glmnet_c_sensitivities(): data = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) # use GLMNET on binary problem clf = GLMNET_C() clf.train(data) # now ask for the sensitivities WITHOUT having to pass the dataset # again sens = clf.get_sensitivity_analyzer(force_train=False)(None) #failUnless(sens.shape == (data.nfeatures,)) assert_equal(sens.shape, (len(data.UT), data.nfeatures)) def test_glmnet_r_sensitivities(): data = datasets['chirp_linear'] clf = GLMNET_R() clf.train(data) # now ask for the sensitivities WITHOUT having to pass the dataset # again sens = clf.get_sensitivity_analyzer(force_train=False)(None) assert_equal(sens.shape, (1, data.nfeatures)) pymvpa2-2.2.0/mvpa2/tests/test_gnb.py000066400000000000000000000046501202542755000174660ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA GNB classifier""" import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import * from mvpa2.clfs.gnb import GNB from mvpa2.measures.base import TransferMeasure from mvpa2.generators.splitters import Splitter class GNBTests(unittest.TestCase): def test_gnb(self): gnb = GNB() gnb_nc = GNB(common_variance=False) gnb_n = GNB(normalize=True) gnb_n_nc = GNB(normalize=True, common_variance=False) ds = datasets['uni2medium'] # Generic silly coverage just to assure that it works in all # possible scenarios: bools = (True, False) # There should be better way... heh for cv in bools: # common_variance? for prior in ('uniform', 'laplacian_smoothing', 'ratio'): tp = None # predictions -- all above should # result in the same predictions for n in bools: # normalized? for ls in bools: # logspace? for es in ((), ('estimates')): gnb_ = GNB(common_variance=cv, prior=prior, normalize=n, logprob=ls, enable_ca=es) tm = TransferMeasure(gnb_, Splitter('train')) predictions = tm(ds).samples[:,0] if tp is None: tp = predictions assert_array_equal(predictions, tp) # if normalized -- check if estimates are such if n and 'estimates' in es: v = gnb_.ca.estimates if ls: # in log space -- take exp ;) v = np.exp(v) d1 = np.sum(v, axis=1) - 1.0 self.assertTrue(np.max(np.abs(d1)) < 1e-5) def suite(): return unittest.makeSuite(GNBTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_gpr.py000066400000000000000000000044521202542755000175100ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA GPR.""" from mvpa2.base import externals from mvpa2.misc import data_generators from mvpa2.misc.attrmap import AttributeMap from mvpa2.kernels.np import GeneralizedLinearKernel from mvpa2.clfs.gpr import GPR from mvpa2.testing import * from mvpa2.testing.datasets import datasets from mvpa2.testing.tools import assert_array_equal, assert_array_almost_equal if __debug__: from mvpa2.base import debug class GPRTests(unittest.TestCase): def test_basic(self): dataset = data_generators.linear1d_gaussian_noise() k = GeneralizedLinearKernel() clf = GPR(k) clf.train(dataset) y = clf.predict(dataset.samples) assert_array_equal(y.shape, dataset.targets.shape) def test_linear(self): pass def __test_gpr_model_selection(self): """Smoke test for running model selection while getting GPRWeights TODO: DISABLED because setting of hyperparameters was not adopted for 0.6 (yet) """ if not externals.exists('openopt'): return amap = AttributeMap() # we would need to pass numbers into the GPR dataset = datasets['uni2small'].copy() #data_generators.linear1d_gaussian_noise() dataset.targets = amap.to_numeric(dataset.targets).astype(float) k = GeneralizedLinearKernel() clf = GPR(k, enable_ca=['log_marginal_likelihood']) sa = clf.get_sensitivity_analyzer() # should be regular weights sa_ms = clf.get_sensitivity_analyzer(flavor='model_select') # with model selection def prints(): print clf.ca.log_marginal_likelihood, clf.kernel.Sigma_p, clf.kernel.sigma_0 sa(dataset) lml = clf.ca.log_marginal_likelihood sa_ms(dataset) lml_ms = clf.ca.log_marginal_likelihood self.assertTrue(lml_ms > lml) def suite(): return unittest.makeSuite(GPRTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_hamster.py000066400000000000000000000073331202542755000203640ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Hamster""" import os import unittest import numpy as np from mvpa2.testing.tools import * from mvpa2.misc.io.hamster import * class HamsterHelperTests(unittest.TestCase): def test_specification(self): # more than 1 positional self.assertRaises(ValueError, Hamster, "1", 2) # do not mix positional self.assertRaises(ValueError, Hamster, "1", bu=123) # need to be a string self.assertRaises(ValueError, Hamster, 1) # dump cannot be assigned self.assertRaises(ValueError, Hamster, dump=123) # need to be an existing file self.assertRaises(IOError, Hamster, "/dev/ZUMBARGAN123") hh=Hamster(budda=1, z=[123], fuga="123"); hh.h1=123; delattr(hh, 'budda') self.assertTrue(`hh` == "Hamster(fuga='123', h1=123, z=[123])") @with_tempfile() @reseed_rng() def test_simple_storage(self, filename): ex1 = """eins zwei drei 0 1 2 3 4 5 """ ex2 = {'d1': np.random.normal(size=(4,4))} hamster = Hamster(ex1=ex1) hamster.d = ex2 hamster.boo = HamsterHelperTests total_dict = {'ex1' : ex1, 'd' : ex2, 'boo' : HamsterHelperTests} self.assertTrue(hamster.asdict() == total_dict) self.assertTrue(set(hamster.registered) == set(['ex1', 'd', 'boo'])) filename_gz = filename + '.gz' filename_bogusgz = filename + '_bogus.gz' # dump hamster.dump(filename) hamster.dump(filename_gz) # allow to shoot yourself in the head hamster.dump(filename_bogusgz, compresslevel=0) self.assertTrue(hamster.asdict() == total_dict) # We should have stored plain and gzipped versions gzplain = gzip.open(filename) self.assertRaises(IOError, gzplain.readlines) gzipped = gzip.open(filename_gz) discard = gzipped.readlines() gzbogus = gzip.open(filename_bogusgz) self.assertRaises(IOError, gzbogus.readlines) # load plain hamster2 = Hamster(filename) # check if we re-stored all the keys k = hamster.__dict__.keys(); k2 = hamster2.__dict__.keys(); self.assertTrue(set(k) == set(k2)) # identity should be lost self.assertTrue(hamster.ex1 is hamster.ex1) self.assertTrue(not (hamster.ex1 is hamster2.ex1)) # lets compare self.assertTrue(hamster.ex1 == hamster2.ex1) self.assertTrue(hamster.d.keys() == hamster2.d.keys()) self.assertTrue((hamster.d['d1'] == hamster2.d['d1']).all()) self.assertTrue(hamster.boo == hamster2.boo) # not sure if that is a feature or a bug self.assertTrue(hamster.boo is hamster2.boo) # cleanup os.remove(filename_gz) os.remove(filename_bogusgz) @reseed_rng() def test_assignment(self): ex1 = """eins zwei drei 0 1 2 3 4 5 """ ex2 = {'d1': np.random.normal(size=(4,4))} h = Hamster(ex1=ex1) h.ex2 = ex2 self.assertTrue(hasattr(h, 'ex2')) h.ex2 = None self.assertTrue(h.ex2 is None) h.ex2 = 123 self.assertTrue(h.ex2 == 123) h.has_key = 123 def suite(): return unittest.makeSuite(HamsterHelperTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_hdf5.py000066400000000000000000000216201202542755000175420ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for HDF5 converter''' import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import datasets, saveload_warehouse skip_if_no_external('h5py') import h5py import os import tempfile from mvpa2.base.dataset import AttrDataset, save from mvpa2.base.hdf5 import h5save, h5load, obj2hdf, HDF5ConversionError from mvpa2.misc.data_generators import load_example_fmri_dataset from mvpa2.mappers.fx import mean_sample from mvpa2.mappers.boxcar import BoxcarMapper class HDFDemo(object): pass class CustomOldStyle: pass @nodebug(['ID_IN_REPR', 'MODULE_IN_REPR']) def test_h5py_datasets(): # this one stores and reloads all datasets in the warehouse rc_ds = saveload_warehouse() # global checks assert_equal(len(datasets), len(rc_ds)) assert_equal(sorted(datasets.keys()), sorted(rc_ds.keys())) # check each one for d in datasets: ds = datasets[d] ds2 = rc_ds[d] assert_array_equal(ds.samples, ds2.samples) # we can check all sa and fa attrs for attr in ds.sa: assert_array_equal(ds.sa[attr].value, ds2.sa[attr].value) for attr in ds.fa: assert_array_equal(ds.fa[attr].value, ds2.fa[attr].value) # with datasets attributes it is more difficult, but we'll do some assert_equal(len(ds.a), len(ds2.a)) assert_equal(sorted(ds.a.keys()), sorted(ds2.a.keys())) if 'mapper' in ds.a: # since we have no __equal__ do at least some comparison if __debug__: # debug mode needs special test as it enhances the repr output # with module info and id() appendix for objects assert_equal('#'.join(repr(ds.a.mapper).split('#')[:-1]), '#'.join(repr(ds2.a.mapper).split('#')[:-1])) else: assert_equal(repr(ds.a.mapper), repr(ds2.a.mapper)) def test_h5py_dataset_typecheck(): ds = datasets['uni2small'] _, fpath = tempfile.mkstemp('mvpa', 'test') _, fpath2 = tempfile.mkstemp('mvpa', 'test') h5save(fpath2, [[1, 2, 3]]) assert_raises(ValueError, AttrDataset.from_hdf5, fpath2) # this one just catches if there is such a group assert_raises(ValueError, AttrDataset.from_hdf5, fpath2, name='bogus') hdf = h5py.File(fpath, 'w') ds = AttrDataset([1, 2, 3]) obj2hdf(hdf, ds, name='non-bogus') obj2hdf(hdf, [1, 2, 3], name='bogus') hdf.close() assert_raises(ValueError, AttrDataset.from_hdf5, fpath, name='bogus') ds_loaded = AttrDataset.from_hdf5(fpath, name='non-bogus') assert_array_equal(ds, ds_loaded) # just to do smth useful with ds ;) # cleanup and ignore stupidity os.remove(fpath) os.remove(fpath2) def test_matfile_v73_compat(): mat = h5load(os.path.join(pymvpa_dataroot, 'v73.mat')) assert_equal(len(mat), 2) assert_equal(sorted(mat.keys()), ['x', 'y']) assert_array_equal(mat['x'], np.arange(6)[None].T) assert_array_equal(mat['y'], np.array([(1,0,1)], dtype='uint8').T) def test_directaccess(): f = tempfile.NamedTemporaryFile() h5save(f.name, 'test') assert_equal(h5load(f.name), 'test') f.close() f = tempfile.NamedTemporaryFile() h5save(f.name, datasets['uni4medium']) assert_array_equal(h5load(f.name).samples, datasets['uni4medium'].samples) def test_function_ptrs(): if not externals.exists('nibabel'): raise SkipTest ds = load_example_fmri_dataset() # add a mapper with a function ptr inside ds = ds.get_mapped(mean_sample()) f = tempfile.NamedTemporaryFile() h5save(f.name, ds) ds_loaded = h5load(f.name) fresh = load_example_fmri_dataset().O # check that the reconstruction function pointer in the FxMapper points # to the right one assert_array_equal(ds_loaded.a.mapper.forward(fresh), ds.samples) def test_various_special_cases(): # 0d object ndarray f = tempfile.NamedTemporaryFile() a = np.array(0, dtype=object) h5save(f.name, a) a_ = h5load(f.name) ok_(a == a_) # slice h5save(f.name, slice(2,5,3)) sl = h5load(f.name) ok_(sl == slice(2,5,3)) def test_class_oldstyle(): # AttributeError: CustomOld instance has no attribute '__reduce__' # old style classes do not define reduce -- sure thing we might # not need to support them at all, but then some meaningful # exception should be thrown co = CustomOldStyle() co.v = 1 f = tempfile.NamedTemporaryFile() assert_raises(HDF5ConversionError, save, co, f.name, compression='gzip') def test_locally_defined_class(): # cannot store locally defined classes class Custom(object): pass c = Custom() f = tempfile.NamedTemporaryFile() assert_raises(HDF5ConversionError, h5save, f.name, c, compression='gzip') def test_dataset_without_chunks(): # ValueError: All chunk dimensions must be positive (Invalid arguments to routine: Out of range) # MH: This is not about Dataset chunks, but about an empty samples array f = tempfile.NamedTemporaryFile() ds = AttrDataset([8], a=dict(custom=1)) save(ds, f.name, compression='gzip') ds_loaded = h5load(f.name) ok_(ds_loaded.a.custom == ds.a.custom) def test_recursion(): obj = range(2) obj.append(HDFDemo()) obj.append(obj) f = tempfile.NamedTemporaryFile() h5save(f.name, obj) lobj = h5load(f.name) assert_equal(obj[:2], lobj[:2]) assert_equal(type(obj[2]), type(lobj[2])) ok_(obj[3] is obj) ok_(lobj[3] is lobj) @with_tempfile() def test_h5save_mkdir(dirname): # create deeper directory name filename = os.path.join(dirname, 'a', 'b', 'c', 'test_file.hdf5') assert_raises(IOError, h5save, filename, {}, mkdir=False) # And create by default h5save(filename, {}) ok_(os.path.exists(filename)) d = h5load(filename) assert_equal(d, {}) # And that we can still just save into a file in current directory # Let's be safe and assure going back to the original directory cwd = os.getcwd() try: os.chdir(dirname) h5save("TEST.hdf5", [1,2,3]) finally: os.chdir(cwd) def test_state_cycle_with_custom_reduce(): # BoxcarMapper has a custom __reduce__ implementation . The 'space' # setting will only survive a svae/load cycle if the state is correctly # handle for custom reduce iplementations. bm = BoxcarMapper([0], 1, space='boxy') f = tempfile.NamedTemporaryFile() h5save(f.name, bm) bm_rl = h5load(f.name) assert_equal(bm_rl.get_space(), 'boxy') def test_store_metaclass_types(): f = tempfile.NamedTemporaryFile() from mvpa2.kernels.base import Kernel allowedtype=Kernel h5save(f.name, allowedtype) lkrn = h5load(f.name) assert_equal(lkrn, Kernel) assert_equal(lkrn.__metaclass__, Kernel.__metaclass__) def test_state_setter_getter(): # make sure the presence of custom __setstate__, __getstate__ methods # is honored -- numpy's RNGs have it from numpy.random.mtrand import RandomState f = tempfile.NamedTemporaryFile() r = RandomState() h5save(f.name, r) rl = h5load(f.name) rl_state = rl.get_state() for i, v in enumerate(r.get_state()): assert_array_equal(v, rl_state[i]) @sweepargs(obj=( # simple 1d -- would have worked before as well np.array([{'d': np.empty(shape=(2,3))}], dtype=object), # 2d -- before fix would be reconstructed incorrectly np.array([[{'d': np.empty(shape=(2,3))}]], dtype=object), # a bit more elaborate storage np.array([[{'d': np.empty(shape=(2,3)), 'k': 33}]*2]*3, dtype=object), # Swaroop's use-case AttrDataset(np.array([{'d': np.empty(shape=(2,3))}], dtype=object)), # as it would be reconstructed before the fix -- obj array of obj arrays np.array([np.array([{'d': np.empty(shape=(2,3))}], dtype=object)], dtype=object), )) def test_save_load_object_dtype_ds(obj=None): """Test saving of custom object ndarray (GH #84) """ # print obj, obj.shape f = tempfile.NamedTemporaryFile() # save/reload h5save(f.name, obj) obj_ = h5load(f.name) # and compare # neh -- not versatile enough #assert_objectarray_equal(np.asanyarray(obj), np.asanyarray(obj_)) assert_array_equal(obj.shape, obj_.shape) assert_equal(type(obj), type(obj_)) # so we could test both ds and arrays aobjf = np.asanyarray(obj).flatten() aobjf_ = np.asanyarray(obj_).flatten() # checks if having just array above assert_equal(type(aobjf[0]), type(aobjf_[0])) assert_array_equal(aobjf[0]['d'], aobjf_[0]['d']) pymvpa2-2.2.0/mvpa2/tests/test_hdf5_clf.py000066400000000000000000000073651202542755000204000ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for storage of classifiers in HDF5''' from mvpa2.testing import * skip_if_no_external('h5py') skip_if_no_external('scipy') import numpy as np from mvpa2.base import cfg from mvpa2.testing.datasets import datasets from mvpa2.clfs.base import Classifier from mvpa2.generators.splitters import Splitter from mvpa2.measures.base import TransferMeasure from mvpa2.misc.errorfx import corr_error, mean_mismatch_error from mvpa2.mappers.fx import BinaryFxNode from mvpa2.clfs.warehouse import clfswh, regrswh import tempfile from mvpa2.base.hdf5 import h5save, h5load, obj2hdf @sweepargs(lrn=clfswh[:] + regrswh[:]) def test_h5py_clfs(lrn): # lets simply clone it so we could make its all states on lrn = lrn.clone() # Lets enable all the states lrn.ca.enable('all') f = tempfile.NamedTemporaryFile() # Store/reload untrained learner try: h5save(f.name, lrn) except Exception, e: raise AssertionError, \ "Failed to store due to %r" % (e,) try: lrn_ = h5load(f.name) pass except Exception, e: raise AssertionError, \ "Failed to load due to %r" % (e,) ok_(isinstance(lrn_, Classifier)) # Verify that we have the same ca enabled # XXX FAILS atm! #ok_(set(lrn.ca.enabled) == set(lrn_.ca.enabled)) # lets choose a dataset dsname, errorfx = \ {False: ('uni2large', mean_mismatch_error), True: ('sin_modulated', corr_error)}\ ['regression' in lrn.__tags__] ds = datasets[dsname] splitter = Splitter('train') postproc = BinaryFxNode(errorfx, 'targets') te = TransferMeasure(lrn, splitter, postproc=postproc) te_ = TransferMeasure(lrn_, splitter, postproc=postproc) error = te(ds) error_ = te_(ds) if len(set(['swig', 'rpy2']).intersection(lrn.__tags__)): raise SkipTest("Trained swigged and R-interfaced classifiers can't " "be stored/reloaded yet") # now lets store/reload the trained one try: h5save(f.name, lrn_) except Exception, e: raise AssertionError, \ "Failed to store trained lrn due to %r" % (e,) # This lrn__ is doubly stored/loaded ;-) try: lrn__ = h5load(f.name) except Exception, e: raise AssertionError, \ "Failed to load trained lrn due to %r" % (e,) # Verify that we have the same ca enabled # TODO #ok_(set(lrn.ca.enabled) == set(lrn__.ca.enabled)) # and having the same values? # TODO # now lets do predict and manually compute error predictions = lrn__.predict(ds[ds.sa.train == 2].samples) error__ = errorfx(predictions, ds[ds.sa.train == 2].sa.targets) if 'non-deterministic' in lrn_.__tags__: # might be different... let's allow to vary quite a bit # and new error should be no more than twice the old one # (better than no check at all) # TODO: smarter check, since 'twice' is quite coarse # especially if original error happens to be 0 ;) if cfg.getboolean('tests', 'labile', default='yes'): ok_(np.asscalar(error_) <= 2*np.asscalar(error)) ok_(np.asscalar(error__) <= 2*np.asscalar(error)) else: # must match precisely assert_array_equal(error, error_) assert_array_equal(error, error__) # TODO: verify ca's #print "I PASSED!!!! %s" % lrn pymvpa2-2.2.0/mvpa2/tests/test_hyperalignment.py000066400000000000000000000300761202542755000217470ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA ...""" import unittest import numpy as np from mvpa2.base import cfg from mvpa2.datasets.base import Dataset # See other tests and test_procrust.py for some example on what to do ;) from mvpa2.algorithms.hyperalignment import Hyperalignment from mvpa2.mappers.zscore import zscore from mvpa2.misc.support import idhash from mvpa2.misc.data_generators import random_affine_transformation from mvpa2.misc.fx import get_random_rotation # Somewhat slow but provides all needed ;) from mvpa2.testing import sweepargs, reseed_rng from mvpa2.testing.datasets import datasets from mvpa2.generators.partition import NFoldPartitioner # if you need some classifiers #from mvpa2.testing.clfs import * class HyperAlignmentTests(unittest.TestCase): @sweepargs(zscore_all=(False, True)) @sweepargs(zscore_common=(False, True)) @sweepargs(ref_ds=(None, 2)) @reseed_rng() def test_basic_functioning(self, ref_ds, zscore_common, zscore_all): ha = Hyperalignment(ref_ds=ref_ds, zscore_all=zscore_all, zscore_common=zscore_common) if ref_ds is None: ref_ds = 0 # by default should be this one # get a dataset with some prominent trends in it ds4l = datasets['uni4large'] # lets select for now only meaningful features ds_orig = ds4l[:, ds4l.a.nonbogus_features] nf = ds_orig.nfeatures n = 4 # # of datasets to generate Rs, dss_rotated, dss_rotated_clean, random_shifts, random_scales \ = [], [], [], [], [] # now lets compose derived datasets by using some random # rotation(s) for i in xrange(n): ## if False: # i == ref_ds: # # Do not rotate the target space so we could check later on # # if we transform back nicely # R = np.eye(ds_orig.nfeatures) ## else: ds_ = random_affine_transformation(ds_orig, scale_fac=100, shift_fac=10) Rs.append(ds_.a.random_rotation) # reusing random data from dataset itself random_scales += [ds_.a.random_scale] random_shifts += [ds_.a.random_shift] random_noise = ds4l.samples[:, ds4l.a.bogus_features[:4]] ## if (zscore_common or zscore_all): ## # for later on testing of "precise" reconstruction ## zscore(ds_, chunks_attr=None) dss_rotated_clean.append(ds_) ds_ = ds_.copy() ds_.samples = ds_.samples + 0.1 * random_noise dss_rotated.append(ds_) # Lets test two scenarios -- in one with no noise -- we should get # close to perfect reconstruction. If noise was added -- not so good for noisy, dss in ((False, dss_rotated_clean), (True, dss_rotated)): # to verify that original datasets didn't get changed by # Hyperalignment store their idhashes of samples idhashes = [idhash(ds.samples) for ds in dss] idhashes_targets = [idhash(ds.targets) for ds in dss] mappers = ha(dss) idhashes_ = [idhash(ds.samples) for ds in dss] idhashes_targets_ = [idhash(ds.targets) for ds in dss] self.assertEqual(idhashes, idhashes_, msg="Hyperalignment must not change original data.") self.assertEqual(idhashes_targets, idhashes_targets_, msg="Hyperalignment must not change original data targets.") self.assertEqual(ref_ds, ha.ca.choosen_ref_ds) # Map data back dss_clean_back = [m.forward(ds_) for m, ds_ in zip(mappers, dss_rotated_clean)] ds_norm = np.linalg.norm(dss[ref_ds].samples) nddss = [] ndcss = [] ds_orig_Rref = np.dot(ds_orig.samples, Rs[ref_ds]) \ * random_scales[ref_ds] \ + random_shifts[ref_ds] if zscore_common or zscore_all: zscore(Dataset(ds_orig_Rref), chunks_attr=None) for ds_back in dss_clean_back: # if we used zscoring of common, we cannot rely # that range/offset could be matched, so lets use # corrcoef ndcs = np.diag(np.corrcoef(ds_back.samples.T, ds_orig_Rref.T)[nf:, :nf], k=0) ndcss += [ndcs] dds = ds_back.samples - ds_orig_Rref ndds = np.linalg.norm(dds) / ds_norm nddss += [ndds] snoisy = ('clean', 'noisy')[int(noisy)] do_labile = cfg.getboolean('tests', 'labile', default='yes') if not noisy or do_labile: # First compare correlations self.assertTrue(np.all(np.array(ndcss) >= (0.9, 0.85)[int(noisy)]), msg="Should have reconstructed original dataset more or" " less. Got correlations %s in %s case." % (ndcss, snoisy)) if not (zscore_all or zscore_common): # if we didn't zscore -- all of them should be really close self.assertTrue(np.all(np.array(nddss) <= (1e-10, 1e-1)[int(noisy)]), msg="Should have reconstructed original dataset well " "without zscoring. Got normed differences %s in %s case." % (nddss, snoisy)) elif do_labile: # otherwise they all should be somewhat close self.assertTrue(np.all(np.array(nddss) <= (.2, 3)[int(noisy)]), msg="Should have reconstructed original dataset more or" " less for all. Got normed differences %s in %s case." % (nddss, snoisy)) self.assertTrue(np.all(nddss[ref_ds] <= .09), msg="Should have reconstructed original dataset quite " "well even with zscoring. Got normed differences %s " "in %s case." % (nddss, snoisy)) # yoh: and leave 5% of difference for a chance and numerical # fluctuations ;) self.assertTrue(np.all(np.array(nddss) >= 0.95*nddss[ref_ds]), msg="Should have reconstructed orig_ds best of all. " "Got normed differences %s in %s case with ref_ds=%d." % (nddss, snoisy, ref_ds)) # Lets see how well we do if asked to compute residuals ha = Hyperalignment(ref_ds=ref_ds, level2_niter=2, enable_ca=['training_residual_errors', 'residual_errors']) mappers = ha(dss_rotated_clean) self.assertTrue(np.all(ha.ca.training_residual_errors.sa.levels == ['1', '2:0', '2:1'])) rterrors = ha.ca.training_residual_errors.samples # just basic tests: self.assertEqual(rterrors[0, ref_ds], 0) self.assertEqual(rterrors.shape, (3, n)) rerrors = ha.ca.residual_errors.samples self.assertEqual(rerrors.shape, (1, n)) def _test_on_swaroop_data(self): # print "Running swaroops test on data we don't have" #from mvpa2.datasets.miscfx import zscore #from mvpa2.featsel.helpers import FixedNElementTailSelector # or just for lazy ones like yarik atm #enable to test from mvpa2.suite import * subj = ['cb', 'dm', 'hj', 'kd', 'kl', 'mh', 'ph', 'rb', 'se', 'sm'] ds = [] for sub in subj: ds.append(fmri_dataset(samples=sub+'_movie.nii.gz', mask=sub+'_mask_vt.nii.gz')) ''' Compute feature ranks in each dataset based on correlation with other datasets ''' feature_scores = [ np.zeros(ds[i].nfeatures) for i in range(len(subj)) ] ''' for i in range(len(subj)): ds_temp = ds[i].samples - np.mean(ds[i].samples, axis=0) ds_temp = ds_temp / np.sqrt( np.sum( np.square(ds_temp), axis=0) ) for j in range(i+1,len(subj)): ds_temp2 = ds[j].samples - np.mean(ds[j].samples, axis=0) ds_temp2 = ds_temp2 / np.sqrt( np.sum( np.square(ds_temp2), axis=0) ) corr_temp= np.asarray(np.mat(np.transpose(ds_temp))*np.mat(ds_temp2)) feature_scores[i] = feature_scores[i] + np.max(corr_temp, axis = 1) feature_scores[j] = feature_scores[j] + np.max(corr_temp, axis = 0) ''' for i, sd in enumerate(ds): ds_temp = sd.copy() zscore(ds_temp, chunks_attr=None) for j, sd2 in enumerate(ds[i+1:]): ds_temp2 = sd2.copy() zscore(ds_temp2, chunks_attr=None) corr_temp = np.dot(ds_temp.samples.T, ds_temp2.samples) feature_scores[i] = feature_scores[i] + \ np.max(corr_temp, axis = 1) feature_scores[j+i+1] = feature_scores[j+i+1] + \ np.max(corr_temp, axis = 0) for i, sd in enumerate(ds): sd.fa['bsc_scores'] = feature_scores[i] fselector = FixedNElementTailSelector(2000, tail='upper', mode='select') ds_fs = [ sd[:, fselector(sd.fa.bsc_scores)] for sd in ds] hyper = Hyperalignment() mapper_results = hyper(ds_fs) md_cd = ColumnData('labels.txt', header=['label']) md_labels = [int(x) for x in md_cd['label']] for run in range(8): md_labels[192*run:192*run+3] = [-1]*3 mkdg_ds = [] for sub in subj: mkdg_ds.append(fmri_dataset( samples=sub+'_mkdg.nii.gz', targets=md_labels, chunks=np.repeat(range(8), 192), mask=sub+'_mask_vt.nii.gz')) m = mean_group_sample(['targets', 'chunks']) mkdg_ds = [ds_.get_mapped(m) for ds_ in mkdg_ds] mkdg_ds = [ds_[ds_.sa.targets != -1] for ds_ in mkdg_ds] [zscore(ds_, param_est=('targets', [0])) for ds_ in mkdg_ds] mkdg_ds = [ds_[ds_.sa.targets != 0] for ds_ in mkdg_ds] for i, sd in enumerate(mkdg_ds): sd.fa['bsc_scores'] = feature_scores[i] mkdg_ds_fs = [ sd[:, fselector(sd.fa.bsc_scores)] for sd in mkdg_ds] mkdg_ds_mapped = [ sd.get_mapped(mapper_results[i]) for i, sd in enumerate(mkdg_ds_fs)] # within-subject classification within_acc = [] clf = clfswh['multiclass', 'linear', 'NU_SVC'][0] cvterr = CrossValidation(clf, NFoldPartitioner(), enable_ca=['confusion']) for sd in mkdg_ds_fs: wsc = cvterr(sd) within_acc.append(1-np.mean(wsc)) within_acc_mapped = [] for sd in mkdg_ds_mapped: wsc = cvterr(sd) within_acc_mapped.append(1-np.mean(wsc)) print np.mean(within_acc) print np.mean(within_acc_mapped) mkdg_ds_all = vstack(mkdg_ds_mapped) mkdg_ds_all.sa['subject'] = np.repeat(range(10), 56) mkdg_ds_all.sa['chunks'] = mkdg_ds_all.sa['subject'] bsc = cvterr(mkdg_ds_all) print 1-np.mean(bsc) mkdg_all = vstack(mkdg_ds_fs) mkdg_all.sa['chunks'] = np.repeat(range(10), 56) bsc_orig = cvterr(mkdg_all) print 1-np.mean(bsc_orig) pass def suite(): return unittest.makeSuite(HyperAlignmentTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_ifs.py000066400000000000000000000070011202542755000174720ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA incremental feature search.""" from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.testing.datasets import datasets from mvpa2.base.dataset import vstack from mvpa2.datasets.base import Dataset from mvpa2.featsel.ifs import IFS from mvpa2.measures.base import CrossValidation, ProxyMeasure from mvpa2.generators.partition import NFoldPartitioner from mvpa2.generators.splitters import Splitter from mvpa2.featsel.helpers import FixedNElementTailSelector from mvpa2.mappers.fx import mean_sample, BinaryFxNode from mvpa2.misc.errorfx import mean_mismatch_error class IFSTests(unittest.TestCase): ##REF: Name was automagically refactored def get_data(self): data = np.random.standard_normal(( 100, 2, 2, 2 )) labels = np.concatenate( ( np.repeat( 0, 50 ), np.repeat( 1, 50 ) ) ) chunks = np.repeat( range(5), 10 ) chunks = np.concatenate( (chunks, chunks) ) return Dataset.from_wizard(samples=data, targets=labels, chunks=chunks) # XXX just testing based on a single classifier. Not sure if # should test for every known classifier since we are simply # testing IFS algorithm - not sensitivities @sweepargs(svm=clfswh['has_sensitivity', '!meta'][:1]) @reseed_rng() def test_ifs(self, svm): # measure for feature selection criterion and performance assesment # use the SAME clf! errorfx = mean_mismatch_error fmeasure = CrossValidation(svm, NFoldPartitioner(), postproc=mean_sample()) pmeasure = ProxyMeasure(svm, postproc=BinaryFxNode(errorfx, 'targets')) ifs = IFS(fmeasure, pmeasure, Splitter('purpose', attr_values=['train', 'test']), fselector=\ # go for lower tail selection as data_measure will return # errors -> low is good FixedNElementTailSelector(1, tail='lower', mode='select'), ) wdata = self.get_data() wdata.sa['purpose'] = np.repeat('train', len(wdata)) tdata = self.get_data() tdata.sa['purpose'] = np.repeat('test', len(tdata)) ds = vstack((wdata, tdata)) orig_nfeatures = ds.nfeatures ifs.train(ds) resds = ifs(ds) # fail if orig datasets are changed self.assertTrue(ds.nfeatures == orig_nfeatures) # check that the features set with the least error is selected self.assertTrue(len(ifs.ca.errors)) e = np.array(ifs.ca.errors) self.assertTrue(resds.nfeatures == e.argmin() + 1) # repeat with dataset where selection order is known wsignal = datasets['dumb2'].copy() wsignal.sa['purpose'] = np.repeat('train', len(wsignal)) tsignal = datasets['dumb2'].copy() tsignal.sa['purpose'] = np.repeat('test', len(tsignal)) signal = vstack((wsignal, tsignal)) ifs.train(signal) resds = ifs(signal) self.assertTrue((resds.samples[:,0] == signal.samples[:,0]).all()) def suite(): return unittest.makeSuite(IFSTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_iohelpers.py000066400000000000000000000223741202542755000207150ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA IO helpers""" import re import os import unittest from tempfile import mkstemp import numpy as np from mvpa2.testing.tools import ok_, assert_equal from mvpa2 import pymvpa_dataroot from mvpa2.datasets.eventrelated import find_events from mvpa2.misc.io import * from mvpa2.misc.fsl import * from mvpa2.misc.bv import BrainVoyagerRTC class IOHelperTests(unittest.TestCase): def test_column_data_from_file(self): ex1 = """eins zwei drei 0 1 2 3 4 5 """ file, fpath = mkstemp('mvpa', 'test') file = open(fpath, 'w') file.write(ex1) file.close() # intentionally rely on defaults d = ColumnData(fpath, header=True) # check header (sort because order in dict is unpredictable) self.assertTrue(sorted(d.keys()) == ['drei','eins','zwei']) self.assertTrue(d['eins'] == [0, 3]) self.assertTrue(d['zwei'] == [1, 4]) self.assertTrue(d['drei'] == [2, 5]) # make a copy d2 = ColumnData(d) # check if identical self.assertTrue(sorted(d2.keys()) == ['drei','eins','zwei']) self.assertTrue(d2['eins'] == [0, 3]) self.assertTrue(d2['zwei'] == [1, 4]) self.assertTrue(d2['drei'] == [2, 5]) # now merge back d += d2 # same columns? self.assertTrue(sorted(d.keys()) == ['drei','eins','zwei']) # but more data self.assertEqual(d['eins'], [0, 3, 0, 3]) self.assertEqual(d['zwei'], [1, 4, 1, 4]) self.assertEqual(d['drei'], [2, 5, 2, 5]) # test file write # TODO: check if correct header_order = ['drei', 'zwei', 'eins'] d.tofile(fpath, header_order=header_order) # test sample selection dsel = d.select_samples([0, 2]) self.assertEqual(dsel['eins'], [0, 0]) self.assertEqual(dsel['zwei'], [1, 1]) self.assertEqual(dsel['drei'], [2, 2]) # test if order is read from file when available d3 = ColumnData(fpath) self.assertEqual(d3._header_order, header_order) # add another column -- should be appended as the last column # while storing d3['four'] = [0.1] * len(d3['eins']) d3.tofile(fpath) d4 = ColumnData(fpath) self.assertEqual(d4._header_order, header_order + ['four']) # cleanup and ignore stupidity try: os.remove(fpath) except WindowsError: pass def test_samples_attributes(self): sa = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes_literal.txt'), literallabels=True) ok_(sa.nrows == 1452, msg='There should be 1452 samples') # convert to event list, with some custom attr ev = find_events(**sa) ok_(len(ev) == 17 * (max(sa.chunks) + 1), msg='Not all events got detected.') ok_(ev[0]['targets'] == ev[-1]['targets'] == 'rest', msg='First and last event are rest condition.') ok_(ev[-1]['onset'] + ev[-1]['duration'] == sa.nrows, msg='Something is wrong with the timiing of the events') def test_fsl_ev(self): ex1 = """0.0 2.0 1 13.89 2 1 16 2.0 0.5 """ file, fpath = mkstemp('mvpa', 'test') file = open(fpath, 'w') file.write(ex1) file.close() # intentionally rely on defaults d = FslEV3(fpath) # check header (sort because order in dict is unpredictable) self.assertTrue(sorted(d.keys()) == \ ['durations','intensities','onsets']) self.assertTrue(d['onsets'] == [0.0, 13.89, 16.0]) self.assertTrue(d['durations'] == [2.0, 2.0, 2.0]) self.assertTrue(d['intensities'] == [1.0, 1.0, 0.5]) self.assertTrue(d.nevs == 3) self.assertTrue(d.get_ev(1) == (13.89, 2.0, 1.0)) # cleanup and ignore stupidity try: os.remove(fpath) except WindowsError: pass d = FslEV3(os.path.join(pymvpa_dataroot, 'fslev3.txt')) ev = d.to_events() self.assertTrue(len(ev) == 3) self.assertTrue([e['duration'] for e in ev] == [9] * 3) self.assertTrue([e['onset'] for e in ev] == [6, 21, 35]) self.assertTrue([e['features'] for e in ev] == [[1],[1],[1]]) ev = d.to_events(label='face', chunk=0, crap=True) ev[0]['label'] = 'house' self.assertTrue(len(ev) == 3) self.assertTrue([e['duration'] for e in ev] == [9] * 3) self.assertTrue([e['onset'] for e in ev] == [6, 21, 35]) self.assertTrue([e['features'] for e in ev] == [[1],[1],[1]]) self.assertTrue([e['label'] for e in ev] == ['house', 'face', 'face']) self.assertTrue([e['chunk'] for e in ev] == [0]*3) self.assertTrue([e['crap'] for e in ev] == [True]*3) def test_fsl_ev2(self): attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'smpl_attr.txt')) # check header (sort because order in dict is unpredictable) self.assertTrue(sorted(attr.keys()) == \ ['chunks','targets']) self.assertTrue(attr.nsamples == 3) def test_bv_rtc(self): """Simple testing of reading RTC files from BrainVoyager""" attr = BrainVoyagerRTC(os.path.join(pymvpa_dataroot, 'bv', 'smpl_model.rtc')) self.assertEqual(attr.ncolumns, 4, "We must have 4 colums") self.assertEqual(attr.nrows, 147, "We must have 147 rows") self.assertEqual(attr._header_order, ['l_60 B', 'r_60 B', 'l_80 B', 'r_80 B'], "We must got column names correctly") self.assertTrue(len(attr.r_60_B) == attr.nrows, "We must have got access to column by property") self.assertTrue(attr.toarray() != None, "We must have got access to column by property") def testdesign2labels(self): """Simple testing of helper Design2Labels""" attr = BrainVoyagerRTC(os.path.join(pymvpa_dataroot, 'bv', 'smpl_model.rtc')) labels0 = design2labels(attr, baseline_label='silence') labels = design2labels(attr, baseline_label='silence', func=lambda x:x>0.5) Nsilence = lambda x:len(np.where(np.array(x) == 'silence')[0]) nsilence0 = Nsilence(labels0) nsilence = Nsilence(labels) self.assertTrue(nsilence0 < nsilence, "We must have more silence if thr is higher") self.assertEqual(len(labels), attr.nrows, "We must have the same number of labels as rows") self.assertRaises(ValueError, design2labels, attr, baseline_label='silence', func=lambda x:x>-1.0) def testlabels2chunks(self): attr = BrainVoyagerRTC(os.path.join(pymvpa_dataroot, 'bv', 'smpl_model.rtc')) labels = design2labels(attr, baseline_label='silence') self.assertRaises(ValueError, labels2chunks, labels, 'bugga') chunks = labels2chunks(labels) self.assertEqual(len(labels), len(chunks)) # we must got them in sorted order chunks_sorted = np.sort(chunks) self.assertTrue((chunks == chunks_sorted).all()) # for this specific one we must have just 4 chunks self.assertTrue((np.unique(chunks) == range(4)).all()) def test_sensor_locations(self): sl = XAVRSensorLocations(os.path.join(pymvpa_dataroot, 'xavr1010.dat')) for var in ['names', 'pos_x', 'pos_y', 'pos_z']: self.assertTrue(len(eval('sl.' + var)) == 31) def test_fsl_glm_design(self): glm = FslGLMDesign(os.path.join(pymvpa_dataroot, 'glm.mat')) self.assertTrue(glm.mat.shape == (850, 6)) self.assertTrue(len(glm.ppheights) == 6) def test_read_fsl_design(self): fname = os.path.join(pymvpa_dataroot, 'sample_design.fsf') # use our function design = read_fsl_design(fname) # and just load manually to see either we match fine set_lines = [x for x in open(fname).readlines() if x.startswith('set ')] assert_equal(len(set_lines), len(design)) # figure out which one is missing """TODO: would require the same special treatment for _files fields re_set = re.compile("set ([^)]*\)).*") for line in set_lines: key = re_set.search(line).groups()[0] if not key in design: raise AssertionError( "Key %s was not found in read FSL design" % key) key_list = [' '.join(l.split(None,2)[1:2]) for l in set_lines] for k in set(key_list): if len([key for key in key_list if key == k]) == 2: raise AssertionError( "Got the non-unique beast %s" % k) """ def suite(): return unittest.makeSuite(IOHelperTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_kernel.py000066400000000000000000000327451202542755000202060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA kernels""" import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import datasets from mvpa2.base.externals import exists from mvpa2.datasets import Dataset from mvpa2.clfs.distance import squared_euclidean_distance, \ pnorm_w, pnorm_w_python import mvpa2.kernels.np as npK from mvpa2.kernels.base import PrecomputedKernel, CachedKernel try: import mvpa2.kernels.sg as sgK _has_sg = True except RuntimeError: _has_sg = False class KernelTests(unittest.TestCase): """Test bloody kernels """ # mvpa2.kernel stuff def kernel_equiv(self, k1, k2, accuracy=None, relative_precision=0.6): """Test how accurately two kernels agree Parameters ---------- k1 : kernel k2 : kernel accuracy : None or float To what accuracy to operate. If None, length of mantissa (precision) is taken into account together with relative_precision to provide the `accuracy`. relative_precision : float, optional What proportion of leading digits in mantissa should match between k1 and k2 (effective only if `precision` is None). """ k1m = k1.as_np()._k.copy() #; k1.as_np()._k.setflags(write=0) k2m = k2.as_np()._k.copy() #; k2.as_np()._k.setflags(write=0) # We should operate on mantissas (given exponents are the same) since # pure difference makes no sense to compare and we care about # digits in mantissa but there is no convenient way to compare # by mantissa: # unfortunately there is no assert_array_approx_equal so # we could specify number of significant digits to use. # assert_array_almost_equal relies on number of decimals AFTER # comma, so both # assert_array_almost_equal([11111.001], [11111.002], decimal=4) # and # assert_array_almost_equal([0.001], [0.002], decimal=4) # would fail, whenever # assert_approx_equal(11111.001, 11111.002, significant=3) # would be ok # assert_array_almost_equal(k1m, k2m, decimal=6) # assert_approx_equal(k1m, k2m, significant=12) if accuracy is None: # What precision should be operate at given relative_precision # and current dtype # first check if dtypes are the same ok_(k1m.dtype is k2m.dtype) k12mean = 0.5*(np.abs(k1m) + np.abs(k2m)) scales = np.ones(k12mean.shape) # don't bother dealing with values which would be within # resolution -- ** operation would lead to NaNs or 0s k12mean_nz = k12mean >= np.finfo(k1m.dtype).resolution * 1e+1 scales[k12mean_nz] = 10**np.floor(np.log10(k12mean[k12mean_nz])) for a in (k1m, k2m): # lets normalize by exponent first anz = a != 0 # "remove" exponent a[anz] /= scales[anz] accuracy = 10**-(np.finfo(k1m.dtype).precision * relative_precision) diff = np.abs(k1m - k2m) dmax = diff.max() # and maximal difference dmax_index = np.unravel_index(np.argmax(diff), diff.shape) self.assertTrue(dmax <= accuracy, '\n%s\nand\n%s\ndiffer by %s at %s:\n %.15e\n %.15e' % (k1, k2, dmax, dmax_index, k1.as_np()._k.__getitem__(dmax_index), k2.as_np()._k.__getitem__(dmax_index))) self.assertTrue(np.all(k1m.astype('float32') == \ k2m.astype('float32')), '\n%s\nand\n%s\nare unequal as float32'%(k1, k2)) def test_linear_kernel(self): """Simplistic testing of linear kernel""" d1 = Dataset(np.asarray([range(5)]*10, dtype=float)) lk = npK.LinearKernel() lk.compute(d1) self.assertTrue(lk._k.shape == (10, 10), "Failure computing LinearKernel (Size mismatch)") self.assertTrue((lk._k == 30).all(), "Failure computing LinearKernel") @reseed_rng() def test_precomputed_kernel(self): """Statistic Kernels""" d = np.random.randn(50, 50) nk = PrecomputedKernel(matrix=d) nk.compute() self.assertTrue((d == nk._k).all(), 'Failure setting and retrieving PrecomputedKernel data') @reseed_rng() def test_cached_kernel(self): nchunks = 5 n = 50*nchunks d = Dataset(np.random.randn(n, 132)) d.sa.chunks = np.random.randint(nchunks, size=n) # We'll compare against an Rbf just because it has a parameter to change rk = npK.RbfKernel(sigma=1.5) # Assure two kernels are independent for this test ck = CachedKernel(kernel=npK.RbfKernel(sigma=1.5)) ck.compute(d) # Initial cache of all data self.assertTrue(ck._recomputed, 'CachedKernel was not initially computed') # Try some splitting for chunk in [d[d.sa.chunks == i] for i in range(nchunks)]: rk.compute(chunk) ck.compute(chunk) self.kernel_equiv(rk, ck) #, accuracy=1e-12) self.failIf(ck._recomputed, "CachedKernel incorrectly recomputed it's kernel") # Test what happens when a parameter changes ck.params.sigma = 3.5 ck.compute(d) self.assertTrue(ck._recomputed, "CachedKernel doesn't recompute on kernel change") rk.params.sigma = 3.5 rk.compute(d) self.assertTrue(np.all(rk._k == ck._k), 'Cached and rbf kernels disagree after kernel change') # Now test handling new data d2 = Dataset(np.random.randn(32, 43)) ck.compute(d2) self.assertTrue(ck._recomputed, "CachedKernel did not automatically recompute new data") ck.compute(d) self.assertTrue(ck._recomputed, "CachedKernel did not recompute old data which had\n" +\ "previously been computed, but had the cache overriden") if _has_sg: # Unit tests which require shogun kernels # Note - there is a loss of precision from double to float32 in SG # Not clear if this is just for CustomKernels as there are some # remaining innaccuracies in others, but this might be due to other # sources of noise. In all cases float32 should be identical @reseed_rng() def test_sg_conversions(self): nk = PrecomputedKernel(matrix=np.random.randn(50, 50)) nk.compute() skip_if_no_external('shogun', ver_dep='shogun:rev', min_version=4455) sk = nk.as_sg() sk.compute() # CustomKernels interally store as float32 ?? self.assertTrue((nk._k.astype('float32') == \ sk.as_raw_np().astype('float32')).all(), 'Failure converting arrays between NP as SG') @reseed_rng() def test_linear_sg(self): d1 = np.random.randn(105, 32) d2 = np.random.randn(41, 32) nk = npK.LinearKernel() sk = sgK.LinearSGKernel() nk.compute(d1, d2) sk.compute(d1, d2) self.kernel_equiv(nk, sk) @reseed_rng() def test_poly_sg(self): d1 = np.random.randn(105, 32) d2 = np.random.randn(41, 32) sk = sgK.PolySGKernel() nk = npK.PolyKernel(coef0=1) ordervals = [1, 2, 3, 5, 7] for p in ordervals: sk.params.degree = p nk.params.degree = p sk.compute(d1, d2) nk.compute(d1, d2) self.kernel_equiv(nk, sk) @reseed_rng() def test_rbf_sg(self): d1 = np.random.randn(105, 32) d2 = np.random.randn(41, 32) sk = sgK.RbfSGKernel() nk = npK.RbfKernel() sigmavals = np.logspace(-2, 5, num=10) for s in sigmavals: sk.params.sigma = s nk.params.sigma = s sk.compute(d1, d2) nk.compute(d1, d2) self.kernel_equiv(nk, sk) @reseed_rng() def test_custom_sg(self): lk = sgK.LinearSGKernel() cl = sgK.CustomSGKernel(sgK.sgk.LinearKernel) poly = sgK.PolySGKernel() poly_params = [('order', 2), ('inhomogenous', True)] if not exists('sg ge 0.6.5'): poly_params += [ ('use_normalization', False) ] custom = sgK.CustomSGKernel(sgK.sgk.PolyKernel, kernel_params=poly_params) d = np.random.randn(253, 52) lk.compute(d) cl.compute(d) poly.compute(d) custom.compute(d) self.assertTrue(np.all(lk.as_np()._k == cl.as_np()._k), 'CustomSGKernel does not agree with Linear') self.assertTrue(np.all(poly.as_np()._k == custom.as_np()._k), 'CustomSGKernel does not agree with Poly') # Older kernel stuff (ie not mvpa2.kernel) - perhaps refactor? def test_euclid_dist(self): """Euclidean distance kernel testing""" # select some block of data from already generated data = datasets['uni4large'].samples[:5, :8] ed = squared_euclidean_distance(data) # XXX not sure if that is right: 'weight' seems to be given by # feature (i.e. column), but distance is between samples (i.e. rows) # current behavior is: true_size = (5, 5) self.assertTrue(ed.shape == true_size) # slow version to compute distance matrix ed_manual = np.zeros(true_size, 'd') for i in range(true_size[0]): for j in range(true_size[1]): #ed_manual[i,j] = np.sqrt(((data[i,:] - data[j,:] )** 2).sum()) ed_manual[i,j] = ((data[i,:] - data[j,:] )** 2).sum() ed_manual[ed_manual < 0] = 0 self.assertTrue(np.diag(ed_manual).sum() < 0.0000000001) self.assertTrue(np.diag(ed).sum() < 0.0000000001) # let see whether Kernel does the same self.assertTrue((ed - ed_manual).sum() < 0.0000001) def test_pnorm_w(self): data0 = datasets['uni4large'].samples.T weight = np.abs(data0[11, :60]) self.assertRaises(ValueError, pnorm_w_python, data0[:10,:2], p=1.2, heuristic='buga') self.assertRaises(ValueError, pnorm_w_python, data0[:10,:2], weight=weight) self.assertRaises(ValueError, pnorm_w_python, data0[:10,:2], data0[:10, :3], weight=weight) self.assertRaises(ValueError, pnorm_w, data0[:10,:2], data0[:10, :3], weight=weight) self.assertRaises(ValueError, pnorm_w, data0[:10,:2], weight=weight) # some sanity checks for did, (data1, data2, w) in enumerate( [ (data0[:2, :60], None, None), (data0[:2, :60], data0[3:4, 1:61], None), (data0[:2, :60], None, weight), (data0[:2, :60], data0[3:4, 1:61], weight), ]): # test different norms for p in [1, 2, 1.2]: kwargs = {'data1': data1, 'data2': data2, 'weight' : w, 'p' : p} d = pnorm_w(**kwargs) # default one # to assess how far we are kwargs0 = kwargs.copy() kwargs0['data2'] = np.zeros(data1.shape) d0 = pnorm_w(**kwargs0) d0norm = np.linalg.norm(d - d0, 'fro') # test different implementations for iid, d2 in enumerate( [pnorm_w_python(**kwargs), pnorm_w_python(use_sq_euclidean=True, **kwargs), pnorm_w_python(heuristic='auto', **kwargs), pnorm_w_python(use_sq_euclidean=False, **kwargs)] + [pnorm_w_python(heuristic=h, use_sq_euclidean=False, **kwargs) for h in ('auto', 'samples', 'features')]): dnorm = np.linalg.norm(d2 - d, 'fro') self.assertTrue(dnorm/d0norm < 1e-7, msg="Failed comparison of different implementations on " "data #%d, implementation #%d, p=%s. " "Norm of the difference is %g" % (did, iid, p, dnorm)) def suite(): return unittest.makeSuite(KernelTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_knn.py000066400000000000000000000043531202542755000175060ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA kNN classifier""" import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import pure_multivariate_signal from mvpa2.clfs.knn import kNN from mvpa2.clfs.distance import one_minus_correlation class KNNTests(unittest.TestCase): def test_multivariate(self): mv_perf = [] uv_perf = [] clf = kNN(k=10) for i in xrange(20): train = pure_multivariate_signal( 20, 3 ) test = pure_multivariate_signal( 20, 3 ) clf.train(train) p_mv = clf.predict( test.samples ) mv_perf.append( np.mean(p_mv==test.targets) ) clf.train(train[:, 0]) p_uv = clf.predict(test[:, 0].samples) uv_perf.append( np.mean(p_uv==test.targets) ) mean_mv_perf = np.mean(mv_perf) mean_uv_perf = np.mean(uv_perf) self.assertTrue( mean_mv_perf > 0.9 ) self.assertTrue( mean_uv_perf < mean_mv_perf ) def test_knn_state(self): train = pure_multivariate_signal( 40, 3 ) test = pure_multivariate_signal( 20, 3 ) clf = kNN(k=10) clf.train(train) clf.ca.enable(['estimates', 'predictions', 'distances']) p = clf.predict(test.samples) self.assertTrue(p == clf.ca.predictions) self.assertTrue(len(clf.ca.estimates) == 80) self.assertTrue(set(clf.ca.estimates[0].keys()) == set(test.targets)) self.assertTrue(clf.ca.distances.shape == (80,160)) self.assertTrue(not clf.ca.distances.fa is train.sa) # Those are deep-copied now by default so they should not be the same self.assertTrue(not (clf.ca.distances.fa['chunks'] is train.sa['chunks'])) self.assertTrue(not (clf.ca.distances.fa.chunks is train.sa.chunks)) def suite(): return unittest.makeSuite(KNNTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_lars.py000066400000000000000000000041361202542755000176600ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA least angle regression (LARS) classifier""" from mvpa2.testing import * skip_if_no_external('lars') from mvpa2.testing.datasets import datasets from mvpa2 import cfg from mvpa2.clfs.lars import LARS from scipy.stats import pearsonr from mvpa2.misc.data_generators import normal_feature_dataset class LARSTests(unittest.TestCase): def test_lars(self): # not the perfect dataset with which to test, but # it will do for now. #data = datasets['dumb2'] # for some reason the R code fails with the dumb data data = datasets['chirp_linear'] clf = LARS() clf.train(data) # prediction has to be almost perfect # test with a correlation pre = clf.predict(data.samples) cor = pearsonr(pre, data.targets) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(cor[0] > .8) def test_lars_state(self): #data = datasets['dumb2'] # for some reason the R code fails with the dumb data data = datasets['chirp_linear'] clf = LARS() clf.train(data) clf.ca.enable('predictions') p = clf.predict(data.samples) self.assertTrue((p == clf.ca.predictions).all()) def test_lars_sensitivities(self): data = datasets['chirp_linear'] # use LARS on binary problem clf = LARS() clf.train(data) # now ask for the sensitivities WITHOUT having to pass the dataset # again sens = clf.get_sensitivity_analyzer(force_train=False)(None) self.assertTrue(sens.shape == (1, data.nfeatures)) def suite(): return unittest.makeSuite(LARSTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_mapper.py000066400000000000000000000330231202542755000202000ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for basic mappers''' import numpy as np # for repr from numpy import array from mvpa2.testing.tools import ok_, assert_raises, assert_false, assert_equal, \ assert_true, assert_array_equal, nodebug from mvpa2.testing.datasets import datasets from mvpa2.mappers.flatten import FlattenMapper from mvpa2.mappers.base import ChainMapper from mvpa2.featsel.base import StaticFeatureSelection from mvpa2.mappers.slicing import SampleSliceMapper, StripBoundariesSamples from mvpa2.support.copy import copy from mvpa2.datasets.base import Dataset from mvpa2.base.collections import ArrayCollectable from mvpa2.datasets.base import dataset_wizard # arbitrary ndarray subclass for testing class myarray(np.ndarray): pass def test_flatten(): samples_shape = (2, 2, 4) data_shape = (4,) + samples_shape data = np.arange(np.prod(data_shape)).reshape(data_shape).view(myarray) pristinedata = data.copy() target = [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47], [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63]] target = np.array(target).view(myarray) index_target = np.array([[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 0, 3], [0, 1, 0], [0, 1, 1], [0, 1, 2], [0, 1, 3], [1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 0, 3], [1, 1, 0], [1, 1, 1], [1, 1, 2], [1, 1, 3]]) # test only flattening the first two dimensions fm_max = FlattenMapper(maxdims=2) fm_max.train(data) assert_equal(fm_max(data).shape, (4, 4, 4)) # array subclass survives ok_(isinstance(data, myarray)) # actually, there should be no difference between a plain FlattenMapper and # a chain that only has a FlattenMapper as the one element for fm in [FlattenMapper(space='voxel'), ChainMapper([FlattenMapper(space='voxel'), StaticFeatureSelection(slice(None))])]: # not working if untrained assert_raises(RuntimeError, fm.forward1, np.arange(np.sum(samples_shape) + 1)) fm.train(data) ok_(isinstance(fm.forward(data), myarray)) ok_(isinstance(fm.forward1(data[2]), myarray)) assert_array_equal(fm.forward(data), target) assert_array_equal(fm.forward1(data[2]), target[2]) assert_raises(ValueError, fm.forward, np.arange(4)) # all of that leaves that data unmodified assert_array_equal(data, pristinedata) # reverse mapping ok_(isinstance(fm.reverse(target), myarray)) ok_(isinstance(fm.reverse1(target[0]), myarray)) ok_(isinstance(fm.reverse(target[1:2]), myarray)) assert_array_equal(fm.reverse(target), data) assert_array_equal(fm.reverse1(target[0]), data[0]) assert_array_equal(fm.reverse(target[1:2]), data[1:2]) assert_raises(ValueError, fm.reverse, np.arange(14)) # check one dimensional data, treated as scalar samples oned = np.arange(5) fm.train(Dataset(oned)) # needs 2D assert_raises(ValueError, fm.forward, oned) # doesn't match mapper, since Dataset turns `oned` into (5,1) assert_raises(ValueError, fm.forward, oned) assert_equal(Dataset(oned).nfeatures, 1) # try dataset mode, with some feature attribute fattr = np.arange(np.prod(samples_shape)).reshape(samples_shape) ds = Dataset(data, fa={'awesome': fattr.copy()}) assert_equal(ds.samples.shape, data_shape) fm.train(ds) dsflat = fm.forward(ds) ok_(isinstance(dsflat, Dataset)) ok_(isinstance(dsflat.samples, myarray)) assert_array_equal(dsflat.samples, target) assert_array_equal(dsflat.fa.awesome, np.arange(np.prod(samples_shape))) assert_true(isinstance(dsflat.fa['awesome'], ArrayCollectable)) # test index creation assert_array_equal(index_target, dsflat.fa.voxel) # and back revds = fm.reverse(dsflat) ok_(isinstance(revds, Dataset)) ok_(isinstance(revds.samples, myarray)) assert_array_equal(revds.samples, data) assert_array_equal(revds.fa.awesome, fattr) assert_true(isinstance(revds.fa['awesome'], ArrayCollectable)) assert_false('voxel' in revds.fa) def test_subset(): data = np.array( [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47], [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63]]) # float array doesn't work sm = StaticFeatureSelection(np.ones(16)) assert_raises(IndexError, sm.forward, data) # full mask sm = StaticFeatureSelection(slice(None)) # should not change single samples assert_array_equal(sm.forward(data[0:1].copy()), data[0:1]) # or multi-samples assert_array_equal(sm.forward(data.copy()), data) sm.train(data) # same on reverse assert_array_equal(sm.reverse(data[0:1].copy()), data[0:1]) # or multi-samples assert_array_equal(sm.reverse(data.copy()), data) # identical mappers sm_none = StaticFeatureSelection(slice(None)) sm_int = StaticFeatureSelection(np.arange(16)) sm_bool = StaticFeatureSelection(np.ones(16, dtype='bool')) sms = [sm_none, sm_int, sm_bool] # test subsets sids = [3,4,5,6] bsubset = np.zeros(16, dtype='bool') bsubset[sids] = True subsets = [sids, slice(3,7), bsubset, [3,3,4,4,6,6,6,5]] # all test subset result in equivalent masks, hence should do the same to # the mapper and result in identical behavior for st in sms: for i, sub in enumerate(subsets): # shallow copy orig = copy(st) subsm = StaticFeatureSelection(sub) # should do copy-on-write for all important stuff!! orig += subsm # test if selection did its job if i == 3: # special case of multiplying features assert_array_equal(orig.forward1(data[0].copy()), subsets[i]) else: assert_array_equal(orig.forward1(data[0].copy()), sids) ## all of the above shouldn't change the original mapper #assert_array_equal(sm.get_mask(), np.arange(16)) # check for some bug catcher # no 3D input #assert_raises(IndexError, sm.forward, np.ones((3,2,1))) # no input of wrong length if __debug__: # checked only in __debug__ assert_raises(ValueError, sm.forward, np.ones(4)) # same on reverse #assert_raises(ValueError, sm.reverse, np.ones(16)) # invalid ids #assert_false(subsm.is_valid_inid(-1)) #assert_false(subsm.is_valid_inid(16)) # intended merge failures fsm = StaticFeatureSelection(np.arange(16)) assert_equal(fsm.__iadd__(None), NotImplemented) assert_equal(fsm.__iadd__(Dataset([2,3,4])), NotImplemented) def test_subset_filler(): sm = StaticFeatureSelection(np.arange(3)) sm_f0 = StaticFeatureSelection(np.arange(3), filler=0) sm_fm1 = StaticFeatureSelection(np.arange(3), filler=-1) sm_fnan = StaticFeatureSelection(np.arange(3), filler=np.nan) data = np.arange(12).astype(float).reshape((2, -1)) sm.train(data) data_forwarded = sm.forward(data) for m in (sm, sm_f0, sm_fm1, sm_fnan): m.train(data) assert_array_equal(data_forwarded, m.forward(data)) data_back_fm1 = sm_fm1.reverse(data_forwarded) ok_(np.all(data_back_fm1[:, 3:] == -1)) data_back_fnan = sm_fnan.reverse(data_forwarded) ok_(np.all(np.isnan(data_back_fnan[:, 3:]))) @nodebug(['ID_IN_REPR', 'MODULE_IN_REPR']) def test_repr(): # this time give mask only by its target length sm = StaticFeatureSelection(slice(None), space='myspace') # check reproduction sm_clone = eval(repr(sm)) assert_equal(repr(sm_clone), repr(sm)) @nodebug(['ID_IN_REPR', 'MODULE_IN_REPR']) def test_chainmapper(): # the chain needs at lest one mapper assert_raises(ValueError, ChainMapper, []) # a typical first mapper is to flatten cm = ChainMapper([FlattenMapper()]) # few container checks assert_equal(len(cm), 1) assert_true(isinstance(cm[0], FlattenMapper)) # now training # come up with data samples_shape = (2, 2, 4) data_shape = (4,) + samples_shape data = np.arange(np.prod(data_shape)).reshape(data_shape) pristinedata = data.copy() target = [[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47], [48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63]] target = np.array(target) # if it is not trained it knows nothing cm.train(data) # a new mapper should appear when doing feature selection cm.append(StaticFeatureSelection(range(1,16))) assert_equal(cm.forward1(data[0]).shape, (15,)) assert_equal(len(cm), 2) # multiple slicing cm.append(StaticFeatureSelection([9,14])) assert_equal(cm.forward1(data[0]).shape, (2,)) assert_equal(len(cm), 3) # check reproduction if __debug__: # debug mode needs special test as it enhances the repr output # with module info and id() appendix for objects import mvpa2 cm_clone = eval(repr(cm)) assert_equal('#'.join(repr(cm_clone).split('#')[:-1]), '#'.join(repr(cm).split('#')[:-1])) else: cm_clone = eval(repr(cm)) assert_equal(repr(cm_clone), repr(cm)) # what happens if we retrain the whole beast an same data as before cm.train(data) assert_equal(cm.forward1(data[0]).shape, (2,)) assert_equal(len(cm), 3) # let's map something mdata = cm.forward(data) assert_array_equal(mdata, target[:,[10,15]]) # and back rdata = cm.reverse(mdata) # original shape assert_equal(rdata.shape, data.shape) # content as far it could be restored assert_array_equal(rdata[rdata > 0], data[rdata > 0]) assert_equal(np.sum(rdata > 0), 8) # Lets construct a dataset with mapper assigned and see # if sub-selecting a feature adjusts trailing StaticFeatureSelection # appropriately ds_subsel = Dataset.from_wizard(data, mapper=cm)[:, 1] tail_sfs = ds_subsel.a.mapper[-1] assert_equal(repr(tail_sfs), 'StaticFeatureSelection(slicearg=array([14]))') def test_sampleslicemapper(): # this does nothing but Dataset.__getitem__ which is tested elsewhere -- but # at least we run it ds = datasets['uni2small'] ssm = SampleSliceMapper(slice(3, 8, 2)) sds = ssm(ds) assert_equal(len(sds), 3) def test_strip_boundary(): ds = datasets['hollow'] ds.sa['btest'] = np.repeat([0,1], 20) sn = StripBoundariesSamples('btest', 1, 2) sds = sn(ds) assert_equal(len(sds), len(ds) - 3) for i in [19, 20, 21]: assert_false(i in sds.samples.sid) def test_transpose(): from mvpa2.mappers.shape import TransposeMapper ds = Dataset(np.arange(24).reshape(2,3,4), sa={'testsa': np.arange(2)}, fa={'testfa': np.arange(3)}) tp = TransposeMapper() tds = tp(ds) assert_equal(tds.shape, (3, 2, 4)) assert_true('testfa' in tds.sa) assert_true('testsa' in tds.fa) assert_false(tds.fa is tds.sa) # and back ttds = tp(tds) assert_array_equal(ttds.samples, ds.samples) assert_equal(ttds.sa, ds.sa) assert_equal(ttds.fa, ds.fa) # or this way rds = tp.reverse(tds) assert_array_equal(rds.samples, ds.samples) assert_equal(rds.sa, ds.sa) assert_equal(rds.fa, ds.fa) assert_array_equal(rds.samples, ttds.samples) assert_equal(rds.sa, ttds.sa) assert_equal(rds.fa, ttds.fa) def test_addaxis(): from mvpa2.mappers.shape import AddAxisMapper ds = Dataset(np.arange(24).reshape(2,3,4), sa={'testsa': np.arange(2)}, fa={'testfa': np.arange(3)}) ds0 = AddAxisMapper(pos=0)(ds) assert_array_equal(ds0.shape, (1,) + ds.shape) # sas have extra dimension assert_array_equal(ds0.sa.testsa[0], ds.sa.testsa) # fas are duplicated assert_array_equal(ds0.fa.testfa[0], ds0.fa.testfa[1]) ds1 = AddAxisMapper(pos=1)(ds) assert_array_equal(ds1.shape, (2, 1, 3, 4)) # same sample attribute assert_equal(ds1.sa, ds.sa) # fas have extra dimension assert_array_equal(ds1.fa.testfa[0], ds.fa.testfa) ds2 = AddAxisMapper(pos=2)(ds) assert_array_equal(ds2.shape, (2, 3, 1, 4)) # no change to attribute collections assert_equal(ds2.sa, ds.sa) assert_equal(ds2.fa, ds.fa) # append an axis ds3 = AddAxisMapper(pos=3)(ds) assert_array_equal(ds3.shape, ds.shape + (1,)) # reverse indexing ds_1 = AddAxisMapper(pos=-1)(ds) assert_array_equal(ds3.samples, ds_1.samples) assert_equal(ds3.sa, ds_1.sa) assert_equal(ds3.fa, ds_1.fa) # add multiple axes ds4 = AddAxisMapper(pos=4)(ds) assert_array_equal(ds4.shape, ds.shape + (1, 1)) pymvpa2-2.2.0/mvpa2/tests/test_mapper_sp.py000066400000000000000000000127271202542755000207120ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for detrending mapper (requiring SciPy).""" import numpy as np from mvpa2.testing.tools import * skip_if_no_external('scipy') from mvpa2.datasets import Dataset, dataset_wizard from mvpa2.mappers.detrend import PolyDetrendMapper, poly_detrend def test_polydetrend(): samples_forwhole = np.array( [[1.0, 2, 3, 4, 5, 6], [-2.0, -4, -6, -8, -10, -12]], ndmin=2 ).T samples_forchunks = np.array( [[1.0, 2, 3, 3, 2, 1], [-2.0, -4, -6, -6, -4, -2]], ndmin=2 ).T chunks = [0, 0, 0, 1, 1, 1] chunks_bad = [ 0, 0, 1, 1, 1, 0] target_whole = np.array( [[-3.0, -2, -1, 1, 2, 3], [-6, -4, -2, 2, 4, 6]], ndmin=2 ).T target_chunked = np.array( [[-1.0, 0, 1, 1, 0, -1], [2, 0, -2, -2, 0, 2]], ndmin=2 ).T ds = Dataset(samples_forwhole) # this one will auto-train the mapper on first use dm = PolyDetrendMapper(polyord=1, space='police') mds = dm.forward(ds) # features are linear trends, so detrending should remove all assert_array_almost_equal(mds.samples, np.zeros(mds.shape)) # we get the information where each sample is assumed to be in the # space spanned by the polynomials assert_array_equal(mds.sa.police, np.arange(len(ds))) # hackish way to get the previous regressors into a dataset ds.sa['opt_reg_const'] = dm._regs[:,0] ds.sa['opt_reg_lin'] = dm._regs[:,1] # using these precomputed regressors, we should get the same result as # before even if we do not generate a regressor for linear dm_optreg = PolyDetrendMapper(polyord=0, opt_regs=['opt_reg_const', 'opt_reg_lin']) mds_optreg = dm_optreg.forward(ds) assert_array_almost_equal(mds_optreg, np.zeros(mds.shape)) ds = Dataset(samples_forchunks) # 'constant' detrending removes the mean mds = PolyDetrendMapper(polyord=0).forward(ds) assert_array_almost_equal( mds.samples, samples_forchunks - np.mean(samples_forchunks, axis=0)) # if there is no GLOBAL linear trend it should be identical to mean removal # even if trying to remove linear mds2 = PolyDetrendMapper(polyord=1).forward(ds) assert_array_almost_equal(mds, mds2) # chunk-wise detrending ds = dataset_wizard(samples_forchunks, chunks=chunks) dm = PolyDetrendMapper(chunks_attr='chunks', polyord=1, space='police') mds = dm.forward(ds) # features are chunkswise linear trends, so detrending should remove all assert_array_almost_equal(mds.samples, np.zeros(mds.shape)) # we get the information where each sample is assumed to be in the # space spanned by the polynomials, which is the identical linspace in both # chunks assert_array_equal(mds.sa.police, range(3) * 2) # non-matching number of samples cannot be mapped assert_raises(ValueError, dm.forward, ds[:-1]) # however, if the dataset knows about the space it is possible ds.sa['police'] = mds.sa.police # XXX this should be #mds2 = dm(ds[1:-1]) #assert_array_equal(mds[1:-1], mds2) # XXX but right now is assert_raises(NotImplementedError, dm.forward, ds[1:-1]) # Detrend must preserve the size of dataset assert_equal(mds.shape, ds.shape) # small additional test for break points # although they are no longer there ds = dataset_wizard(np.array([[1.0, 2, 3, 1, 2, 3]], ndmin=2).T, targets=chunks, chunks=chunks) mds = PolyDetrendMapper(chunks_attr='chunks', polyord=1).forward(ds) assert_array_almost_equal(mds.samples, np.zeros(mds.shape)) # test of different polyord on each chunk target_mixed = np.array( [[-1.0, 0, 1, 0, 0, 0], [2.0, 0, -2, 0, 0, 0]], ndmin=2 ).T ds = dataset_wizard(samples_forchunks.copy(), targets=chunks, chunks=chunks) mds = PolyDetrendMapper(chunks_attr='chunks', polyord=[0,1]).forward(ds) assert_array_almost_equal(mds, target_mixed) # test irregluar spacing of samples, but with corrective time info samples_forwhole = np.array( [[1.0, 4, 6, 8, 2, 9], [-2.0, -8, -12, -16, -4, -18]], ndmin=2 ).T ds = Dataset(samples_forwhole, sa={'time': samples_forwhole[:,0]}) # linear detrending that makes use of temporal info from dataset dm = PolyDetrendMapper(polyord=1, space='time') mds = dm.forward(ds) assert_array_almost_equal(mds.samples, np.zeros(mds.shape)) # and now the same stuff, but with chunking and ordered by time samples_forchunks = np.array( [[1.0, 3, 3, 2, 2, 1], [-2.0, -6, -6, -4, -4, -2]], ndmin=2 ).T chunks = [0, 1, 0, 1, 0, 1] time = [4, 4, 12, 8, 8, 12] ds = Dataset(samples_forchunks.copy(), sa={'chunks': chunks, 'time': time}) mds = PolyDetrendMapper(chunks_attr='chunks', polyord=1, space='time').forward(ds) # the whole thing must not affect the source data assert_array_equal(ds, samples_forchunks) # but if done inplace that is no longer true poly_detrend(ds, chunks_attr='chunks', polyord=1, space='time') assert_array_equal(ds, mds) pymvpa2-2.2.0/mvpa2/tests/test_mdp.py000066400000000000000000000155011202542755000174750ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## '''Tests for basic mappers''' import numpy as np from mvpa2.testing import * skip_if_no_external('mdp') from mvpa2.base import externals import mdp from mvpa2.mappers.mdp_adaptor import MDPNodeMapper, MDPFlowMapper, PCAMapper, \ ICAMapper from mvpa2.mappers.lle import LLEMapper from mvpa2.datasets.base import Dataset from mvpa2.base.dataset import DAE from mvpa2.misc.data_generators import normal_feature_dataset @reseed_rng() def test_mdpnodemapper(): ds = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) node = mdp.nodes.PCANode() mm = MDPNodeMapper(node, nodeargs={'stoptrain': ((), {'debug': True})}) mm.train(ds) fds = mm.forward(ds) if externals.versions['mdp'] >= '2.5': assert_true(hasattr(mm.node, 'cov_mtx')) assert_true(isinstance(fds, Dataset)) assert_equal(fds.samples.shape, ds.samples.shape) # set projection onto first 2 components mm.nodeargs['exec'] = ((), {'n': 2}) #should be different from above lfds = mm.forward(ds.samples) # output shape changes although the node still claim otherwise assert_equal(mm.node.output_dim, 4) assert_equal(lfds.shape[0], fds.samples.shape[0]) assert_equal(lfds.shape[1], 2) assert_array_equal(lfds, fds.samples[:, :2]) # reverse rfds = mm.reverse(fds) # even smaller size works rlfds = mm.reverse(lfds) assert_equal(rfds.samples.shape, ds.samples.shape) # retraining has to work on a new dataset too, since we copy the node # internally dsbig = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=10) mm.train(dsbig) def test_mdpflowmapper(): flow = mdp.nodes.PCANode() + mdp.nodes.SFANode() fm = MDPFlowMapper(flow) ds = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) fm.train(ds) assert_false(fm.flow[0].is_training()) assert_false(fm.flow[1].is_training()) fds = fm.forward(ds) assert_true(isinstance(fds, Dataset)) assert_equal(fds.samples.shape, ds.samples.shape) def test_mdpflow_additional_arguments(): skip_if_no_external('mdp', min_version='2.5') # we have no IdentityNode yet... is there analog? ds = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) flow = mdp.nodes.PCANode() + mdp.nodes.IdentityNode() + mdp.nodes.FDANode() # this is what it would look like in MDP itself #flow.train([[ds.samples], # [[ds.samples, ds.sa.targets]]]) assert_raises(ValueError, MDPFlowMapper, flow, node_arguments=[[],[]]) fm = MDPFlowMapper(flow, node_arguments = ([], [], [DAE('sa', 'targets')])) fm.train(ds) fds = fm.forward(ds) assert_equal(ds.samples.shape, fds.samples.shape) rds = fm.reverse(fds) assert_array_almost_equal(ds.samples, rds.samples) def test_mdpflow_additional_arguments_nones(): skip_if_no_external('mdp', min_version='2.5') # we have no IdentityNode yet... is there analog? ds = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) flow = mdp.nodes.PCANode() + mdp.nodes.IdentityNode() + mdp.nodes.FDANode() # this is what it would look like in MDP itself #flow.train([[ds.samples], # [[ds.samples, ds.sa.targets]]]) assert_raises(ValueError, MDPFlowMapper, flow, node_arguments=[[],[]]) fm = MDPFlowMapper(flow, node_arguments = (None, None, [ds.sa.targets])) fm.train(ds) fds = fm.forward(ds) assert_equal(ds.samples.shape, fds.samples.shape) rds = fm.reverse(fds) assert_array_almost_equal(ds.samples, rds.samples) @reseed_rng() def test_pcamapper(): # data: 40 sample feature line in 20d space (40x20; samples x features) ndlin = Dataset(np.concatenate([np.arange(40) for i in range(20)]).reshape(20,-1).T) pm = PCAMapper() # train PCA assert_raises(mdp.NodeException, pm.train, ndlin) ndlin.samples = ndlin.samples.astype('float') ndlin_noise = ndlin.copy() ndlin_noise.samples += np.random.random(size=ndlin.samples.shape) # we have no variance for more than one PCA component, hence just one # actual non-zero eigenvalue assert_raises(mdp.NodeException, pm.train, ndlin) pm.train(ndlin_noise) assert_equal(pm.proj.shape, (20, 20)) # now project data into PCA space p = pm.forward(ndlin.samples) assert_equal(p.shape, (40, 20)) # check that the mapped data can be fully recovered by 'reverse()' assert_array_almost_equal(pm.reverse(p), ndlin) @reseed_rng() def test_icamapper(): # data: 40 sample feature line in 2d space (40x2; samples x features) samples = np.vstack([np.arange(40.) for i in range(2)]).T samples -= samples.mean() samples += np.random.normal(size=samples.shape, scale=0.1) ndlin = Dataset(samples) pm = ICAMapper() try: pm.train(ndlin.copy()) assert_equal(pm.proj.shape, (2, 2)) p = pm.forward(ndlin.copy()) assert_equal(p.shape, (40, 2)) # check that the mapped data can be fully recovered by 'reverse()' assert_array_almost_equal(pm.reverse(p), ndlin) except mdp.NodeException: # do not puke if the ICA did not converge at all -- that is not our # fault but MDP's pass def test_llemapper(): skip_if_no_external('mdp', min_version='2.4') ds = Dataset(np.array([[0., 0., 0.], [0., 0., 1.], [0., 1., 0.], [1., 0., 0.], [0., 1., 1.], [1., 0., 1.], [1., 1., 0.], [1., 1., 1.]])) pm = LLEMapper(3, output_dim=2) pm.train(ds) fmapped = pm.forward(ds) assert_equal(fmapped.shape, (8, 2)) @reseed_rng() def test_nodeargs(): skip_if_no_external('mdp', min_version='2.4') ds = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) for svd_val in [True, False]: pcm = PCAMapper(alg='PCA', svd=svd_val) assert_equal(pcm.node.svd, svd_val) pcm.train(ds) assert_equal(pcm.node.svd, svd_val) for output_dim in [0.5, 0.95, 0.99, 10, 50, 100]: pcm = PCAMapper(alg='PCA', output_dim=output_dim) for i in range(2): # so we also test on trained one if isinstance(output_dim, float): assert_equal(pcm.node.desired_variance, output_dim) else: assert_equal(pcm.node.output_dim, output_dim) pcm.train(ds) if isinstance(output_dim, float): assert_not_equal(pcm.node.output_dim, output_dim) # some dimensions are chosen assert_true(pcm.node.output_dim > 0) pymvpa2-2.2.0/mvpa2/tests/test_meg.py000066400000000000000000000026111202542755000174630ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA MEG stuff""" import os.path from mvpa2.testing import * from mvpa2 import pymvpa_dataroot from mvpa2.misc.io.meg import TuebingenMEG class MEGTests(unittest.TestCase): def test_tuebingen_meg(self): # Use this whenever we fully switch to nose to run tests #skip_if_no_external('gzip') if not externals.exists('gzip'): return meg = TuebingenMEG(os.path.join(pymvpa_dataroot, 'tueb_meg.dat.gz')) # check basics self.assertTrue(meg.channelids == ['BG1', 'MLC11', 'EEG02']) self.assertTrue(meg.ntimepoints == 814) self.assertTrue(meg.nsamples == 4) # check correct axis order (samples x channels x timepoints) self.assertTrue(meg.data.shape == (4, 3, 814)) # check few values self.assertTrue(meg.data[0, 1, 4] == -2.318207982e-14) self.assertTrue(meg.data[3, 0, 808] == -4.30692876e-12) def suite(): return unittest.makeSuite(MEGTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_misc.py000066400000000000000000000142001202542755000176430ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA misc stuff""" from mvpa2.testing import * from mvpa2.datasets import Dataset from mvpa2.misc.fx import dual_gaussian, dual_positive_gaussian, fit2histogram from mvpa2.misc.data_generators import random_affine_transformation @reseed_rng() @sweepargs(f=(dual_gaussian, dual_positive_gaussian)) def test_dual_gaussian(f): skip_if_no_external('scipy') data = np.random.normal(size=(100, 1)) histfit = fit2histogram(np.repeat(data[None, :], 2, axis=0), f, (1000, 0.5, 0.1, 1000, 0.8, 0.05), nbins=20) H, bin_left, bin_width, fit = histfit params = fit[0] # both variances must be positive ok_(params[2] > 0) ok_(params[5] > 0) if f is dual_positive_gaussian: # both amplitudes must be positive ok_(params[0] > 0) ok_(params[3] > 0) def test_random_affine_transformation(): ds = Dataset.from_wizard(np.random.randn(8,3,2)) ds_d = random_affine_transformation(ds) # compare original to the inverse of the distortion using reported # parameters assert_array_almost_equal( np.dot((ds_d.samples - ds_d.a.random_shift) / ds_d.a.random_scale, ds_d.a.random_rotation.T), ds.samples) @reseed_rng() def test_ttest_1samp_masked(): skip_if_no_external('scipy') import numpy as np from mvpa2.misc.stats import ttest_1samp as ttest_1samp_masked # old scipy's ttest_1samp need to be conditioned since they # return 1's and 0's for when should be NaNs if externals.versions['scipy'] < '0.10.1': from scipy.stats import ttest_1samp as scipy_ttest_1samp def ttest_1samp(*args, **kwargs): t, p = scipy_ttest_1samp(*args, **kwargs) p_isnan = np.isnan(p) if np.any(p_isnan): if t.ndim == 0: t = np.nan else: t[p_isnan] = np.nan return t, p else: from scipy.stats import ttest_1samp if externals.versions['numpy'] < '1.6.2': # yoh: there is a bug in old (e.g. 1.4.1) numpy's while operating on # masked arrays -- for some reason refuses to compute var # correctly whenever only 2 elements are available and it is # multi-dimensional: # (Pydb) print np.var(a[:, 9:11], axis, ddof=1) # [540.0 --] # (Pydb) print np.var(a[:, 10:11], axis, ddof=1) # [--] # (Pydb) print np.var(a[:, 10], axis, ddof=1) # 648.0 # To overcome -- assure masks with without 2 elements in any # dimension and allow for NaN t-test results in such anyway # degenerate cases def random_mask(shape): # screw it -- let's generate quite primitive mask with return (np.arange(np.prod(shape))%2).astype(bool).reshape(shape) ndshape = (5, 6, 1, 7) # we need larger structure with this XOR mask else: def random_mask(shape): # otherwise all simple: return np.random.normal(size=shape) > -0.5 ndshape = (4, 3, 2, 1) _assert_array_equal = assert_array_almost_equal # test on some random data to match results of ttest_1samp d = np.random.normal(size=(5, 3)) for null in 0, 0.5: # 1D case _assert_array_equal(ttest_1samp (d[0], null), ttest_1samp_masked(d[0], null)) for axis in 0, 1, None: _assert_array_equal(ttest_1samp (d, null, axis=axis), ttest_1samp_masked(d, null, axis=axis)) # we do not yet support >2D ##assert_raises(AssertionError, ttest_1samp_masked, d[None,...], 0) # basic test different alternatives d = range(10) tl, pl = ttest_1samp_masked(d, 0, alternative='greater') tr, pr = ttest_1samp_masked(d, 0, alternative='less') tb, pb = ttest_1samp_masked(d, 0, alternative='two-sided') assert_equal(tl, tr) assert_equal(tl, tb) assert_equal(pl + pr, 1.0) assert_equal(pb, pl*2) assert(pl < 0.05) # clearly we should be able to reject # finally let's get to masking # 1D d = np.arange(10) _assert_array_equal(ttest_1samp (d[3:], 0), ttest_1samp_masked(d, 0, mask=[False]*3 + [True]*7)) # random mask m = random_mask(d.shape) _assert_array_equal(ttest_1samp (d[m], 0), ttest_1samp_masked(d, 0, mask=m)) # 2D masking d = np.arange(30).reshape((5,-1)) m = random_mask(d.shape) # axis=1 ts, ps = ttest_1samp_masked(d, 0, mask=m, axis=1) for d_, m_, t_, p_ in zip(d, m, ts, ps): _assert_array_equal(ttest_1samp (d_[m_], 0), (t_, p_)) # axis=0 ts, ps = ttest_1samp_masked(d, 0, mask=m, axis=0) for d_, m_, t_, p_ in zip(d.T, m.T, ts, ps): _assert_array_equal(ttest_1samp (d_[m_], 0), (t_, p_)) #5D masking d = np.random.normal(size=ndshape) m = random_mask(d.shape) for axis in range(d.ndim): for t0 in (0, 1.0): # test for different targets ts, ps = ttest_1samp_masked(d, t0, mask=m, axis=axis) target_shape = list(d.shape) n = target_shape.pop(axis) assert_equal(ts.shape, tuple(target_shape)) def iterflat_view(a): return np.rollaxis(a, axis, 0).reshape((n, -1)).T # now compare to t-test with masking if done manually on for d_, m_, t_, p_ in zip(iterflat_view(d), iterflat_view(m), ts.flatten(), ps.flatten()): _assert_array_equal(ttest_1samp (d_[m_], t0), (t_, p_)) pymvpa2-2.2.0/mvpa2/tests/test_multiclf.py000066400000000000000000000120731202542755000205350ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Multiclass Classifiers Pulled into a separate tests file for efficiency """ import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import * from mvpa2.testing.clfs import * from mvpa2.base.dataset import vstack from mvpa2.generators.partition import NFoldPartitioner, OddEvenPartitioner from mvpa2.generators.splitters import Splitter from mvpa2.clfs.meta import CombinedClassifier, \ BinaryClassifier, MulticlassClassifier, \ MaximalVote from mvpa2.measures.base import TransferMeasure, CrossValidation from mvpa2.mappers.fx import mean_sample, BinaryFxNode from mvpa2.misc.errorfx import mean_mismatch_error # Generate test data for testing ties #mvpa2._random_seed = 2#982220910 @reseed_rng() def get_dsties1(): ds = datasets['uni2small'].copy() dtarget = ds.targets[0] # duplicate target tied_samples = ds.targets == dtarget ds2 = ds[tied_samples].copy(deep=True) # add similar noise to both ties noise_level = 0.2 ds2.samples += \ np.random.normal(size=ds2.shape)*noise_level ds[tied_samples].samples += \ np.random.normal(size=ds2.shape)*noise_level ds2.targets[:] = 'TI' # 'E' would have been swallowed since it is S2 here ds = vstack((ds, ds2)) ds.a.ties = [dtarget, 'TI'] ds.a.ties_idx = [ds.targets == t for t in ds.a.ties] return ds _dsties1 = get_dsties1() #from mvpa2.clfs.smlr import SMLR #clf=SMLR(lm=1.0, fit_all_weights=True, enable_ca=['estimates']) #if True: @sweepargs(clf=clfswh['multiclass']) def test_multiclass_ties(clf): ds = _dsties1 # reassign data between ties, so we know that decision is data, not order driven ds_ = ds.copy(deep=True) ds_.samples[ds.a.ties_idx[1]] = ds.samples[ds.a.ties_idx[0]] ds_.samples[ds.a.ties_idx[0]] = ds.samples[ds.a.ties_idx[1]] ok_(np.any(ds_.samples != ds.samples)) clf_ = clf.clone() clf = clf.clone() clf.ca.enable(['estimates', 'predictions']) clf_.ca.enable(['estimates', 'predictions']) te = TransferMeasure(clf, Splitter('train'), postproc=BinaryFxNode(mean_mismatch_error, 'targets'), enable_ca=['stats']) te_ = TransferMeasure(clf_, Splitter('train'), postproc=BinaryFxNode(mean_mismatch_error, 'targets'), enable_ca=['stats']) te = CrossValidation(clf, NFoldPartitioner(), postproc=mean_sample(), enable_ca=['stats']) te_ = CrossValidation(clf_, NFoldPartitioner(), postproc=mean_sample(), enable_ca=['stats']) error = te(ds) matrix = te.ca.stats.matrix # if ties were broken randomly we should have got nearly the same # number of hits for tied targets ties_indices = [te.ca.stats.labels.index(c) for c in ds.a.ties] hits = np.diag(te.ca.stats.matrix)[ties_indices] # First check is to see if we swap data between tied labels we # are getting the same results if we permute labels accordingly, # i.e. that tie resolution is not dependent on the labels order # but rather on the data te_(ds_) matrix_swapped = te_.ca.stats.matrix if False: #0 in hits: print clf, matrix, matrix_swapped print clf.ca.estimates[:, 2] - clf.ca.estimates[:,0] #print clf.ca.estimates # TODO: for now disabled all the non-compliant ones to pass the # tests. For visibility decided to skip them instead of just # exclusion and skipping only here to possibly catch crashes # which might happen before if len(set(('libsvm', 'sg', 'skl', 'gpr', 'blr') ).intersection(clf.__tags__)): raise SkipTest("Skipped %s because it is known to fail") ok_(not (np.array_equal(matrix, matrix_swapped) and 0 in hits)) # this check is valid only if ties are not broken randomly # like it is the case with SMLR if not ('random_tie_breaking' in clf.__tags__ or # since __tags__ would not go that high up e.g. in # 'SMLR' in str(clf)): assert_array_equal(hits, np.diag(matrix_swapped)[ties_indices[::-1]]) # Second check is to just see if we didn't get an obvious bias and # got 0 in one of the hits, although it is labile if cfg.getboolean('tests', 'labile', default='yes'): ok_(not 0 in hits) # this is old test... even more cumbersome/unreliable #hits_ndiff = abs(float(hits[1]-hits[0]))/max(hits) #thr = 0.9 # let's be generous and pretty much just request absent 0s #ok_(hits_ndiff < thr) pymvpa2-2.2.0/mvpa2/tests/test_neighborhood.py000066400000000000000000000242101202542755000213610ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## import os import numpy as np from numpy import array from mvpa2.datasets.base import Dataset import mvpa2.misc.neighborhood as ne from mvpa2.clfs.distance import * from mvpa2.testing.tools import ok_, assert_raises, assert_false, assert_equal, \ assert_array_equal from mvpa2.testing.datasets import datasets def test_distances(): a = np.array([3,8]) b = np.array([6,4]) # test distances or yarik recalls unit testing ;) assert_equal(cartesian_distance(a, b), 5.0) assert_equal(manhatten_distance(a, b), 7) assert_equal(absmin_distance(a, b), 4) def test_sphere(): # test sphere initialization s = ne.Sphere(1) center0 = (0, 0, 0) center1 = (1, 1, 1) assert_equal(len(s(center0)), 7) target = array([array([-1, 0, 0]), array([ 0, -1, 0]), array([ 0, 0, -1]), array([0, 0, 0]), array([0, 0, 1]), array([0, 1, 0]), array([1, 0, 0])]) # test of internals -- no recomputation of increments should be done prev_increments = s._increments assert_array_equal(s(center0), target) ok_(prev_increments is s._increments) # query lower dimensionality _ = s((0, 0)) ok_(not prev_increments is s._increments) # test Sphere call target = [array([0, 1, 1]), array([1, 0, 1]), array([1, 1, 0]), array([1, 1, 1]), array([1, 1, 2]), array([1, 2, 1]), array([2, 1, 1])] res = s(center1) assert_array_equal(array(res), target) # They all should be tuples ok_(np.all([isinstance(x, tuple) for x in res])) # test for larger diameter s = ne.Sphere(4) assert_equal(len(s(center1)), 257) # test extent keyword #s = ne.Sphere(4,extent=(1,1,1)) #assert_array_equal(array(s((0,0,0))), array([[0,0,0]])) # test Errors during initialisation and call #assert_raises(ValueError, ne.Sphere, 2) #assert_raises(ValueError, ne.Sphere, 1.0) # no longer extent available assert_raises(TypeError, ne.Sphere, 1, extent=(1)) assert_raises(TypeError, ne.Sphere, 1, extent=(1.0, 1.0, 1.0)) s = ne.Sphere(1) #assert_raises(ValueError, s, (1)) if __debug__: # No float coordinates allowed for now... # XXX might like to change that ;) # assert_raises(ValueError, s, (1.0, 1.0, 1.0)) def test_sphere_distance_func(): # Test some other distance se = ne.Sphere(3) sm = ne.Sphere(3, distance_func=manhatten_distance) rese = se((10, 5)) resm = sm((10, 5)) for res in rese, resm: # basic test for duplicates (I think we forgotten to test for them) ok_(len(res) == len(set(res))) # in manhatten distance we should all be no further than 3 "steps" away ok_(np.all([np.sum(np.abs(np.array(x) - (10, 5))) <= 3 for x in resm])) # in euclidean we are taking shortcuts ;) ok_(np.any([np.sum(np.abs(np.array(x) - (10, 5))) > 3 for x in rese])) def test_sphere_scaled(): s1 = ne.Sphere(3) s = ne.Sphere(3, element_sizes=(1, 1)) # Should give exactly the same results since element_sizes are 1s for p in ((0, 0), (-23, 1)): assert_array_equal(s1(p), s(p)) ok_(len(s(p)) == len(set(s(p)))) # Raise exception if query dimensionality does not match element_sizes assert_raises(ValueError, s, (1,)) s = ne.Sphere(3, element_sizes=(1.5, 2)) assert_array_equal(s((0, 0)), [(-2, 0), (-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1), (2, 0)]) s = ne.Sphere(1.5, element_sizes=(1.5, 1.5, 1.5)) res = s((0, 0, 0)) ok_(np.all([np.sqrt(np.sum(np.array(x)**2)) <= 1.5 for x in res])) ok_(len(res) == 7) # all neighbors so no more than 1 voxel away -- just a cube, for # some "sphere" effect radius had to be 3.0 ;) td = np.sqrt(3*1.5**2) s = ne.Sphere(td, element_sizes=(1.5, 1.5, 1.5)) res = s((0, 0, 0)) ok_(np.all([np.sqrt(np.sum(np.array(x)**2)) <= td for x in res])) ok_(np.all([np.sum(np.abs(x) > 1) == 0 for x in res])) ok_(len(res) == 27) def test_hollowsphere_basic(): hs = ne.HollowSphere(1, 0) assert_array_equal(hs((2, 1)), [(1, 1), (2, 0), (2, 2), (3, 1)]) assert_array_equal(hs((1, )), [(0,), (2,)]) assert_equal(len(hs((1,1,1))), 6) def test_hollowsphere_degenerate_neighborhood(): """Test either we sustain empty neighborhoods """ hs = ne.HollowSphere(1, inner_radius=0, element_sizes=(3,3,3)) assert_equal(len(hs((1,1,1))), 0) def test_query_engine(): data = np.arange(54) # indices in 3D ind = np.transpose((np.ones((3, 3, 3)).nonzero())) # sphere generator for 3 elements diameter sphere = ne.Sphere(1) # dataset with just one "space" ds = Dataset([data, data], fa={'s_ind': np.concatenate((ind, ind))}) # and the query engine attaching the generator to the "index-space" qe = ne.IndexQueryEngine(s_ind=sphere) # cannot train since the engine does not know about the second space assert_raises(ValueError, qe.train, ds) # now do it again with a full spec ds = Dataset([data, data], fa={'s_ind': np.concatenate((ind, ind)), 't_ind': np.repeat([0,1], 27)}) qe = ne.IndexQueryEngine(s_ind=sphere, t_ind=None) qe.train(ds) # internal representation check # YOH: invalid for new implementation with lookup tables (dictionaries) #assert_array_equal(qe._searcharray, # np.arange(54).reshape(qe._searcharray.shape) + 1) # should give us one corner, collapsing the 't_ind' assert_array_equal(qe(s_ind=(0, 0, 0)), [0, 1, 3, 9, 27, 28, 30, 36]) # directly specifying an index for 't_ind' without having an ROI # generator, should give the same corner, but just once assert_array_equal(qe(s_ind=(0, 0, 0), t_ind=0), [0, 1, 3, 9]) # just out of the mask -- no match assert_array_equal(qe(s_ind=(3, 3, 3)), []) # also out of the mask -- but single match assert_array_equal(qe(s_ind=(2, 2, 3), t_ind=1), [53]) # query by id assert_array_equal(qe(s_ind=(0, 0, 0), t_ind=0), qe[0]) assert_array_equal(qe(s_ind=(0, 0, 0), t_ind=[0, 1]), qe(s_ind=(0, 0, 0))) # should not fail if t_ind is outside assert_array_equal(qe(s_ind=(0, 0, 0), t_ind=[0, 1, 10]), qe(s_ind=(0, 0, 0))) # should fail if asked about some unknown thing assert_raises(ValueError, qe.__call__, s_ind=(0, 0, 0), buga=0) # Test by using some literal feature atttribute ds.fa['lit'] = ['roi1', 'ro2', 'r3']*18 # should work as well as before assert_array_equal(qe(s_ind=(0, 0, 0)), [0, 1, 3, 9, 27, 28, 30, 36]) # should fail if asked about some unknown (yet) thing assert_raises(ValueError, qe.__call__, s_ind=(0,0,0), lit='roi1') # Create qe which can query literals as well qe_lit = ne.IndexQueryEngine(s_ind=sphere, t_ind=None, lit=None) qe_lit.train(ds) # should work as well as before assert_array_equal(qe_lit(s_ind=(0, 0, 0)), [0, 1, 3, 9, 27, 28, 30, 36]) # and subselect nicely -- only /3 ones assert_array_equal(qe_lit(s_ind=(0, 0, 0), lit='roi1'), [0, 3, 9, 27, 30, 36]) assert_array_equal(qe_lit(s_ind=(0, 0, 0), lit=['roi1', 'ro2']), [0, 1, 3, 9, 27, 28, 30, 36]) def test_cached_query_engine(): """Test cached query engine """ sphere = ne.Sphere(1) # dataset with just one "space" ds = datasets['3dlarge'] qe0 = ne.IndexQueryEngine(myspace=sphere) qec = ne.CachedQueryEngine(qe0) # and ground truth one qe = ne.IndexQueryEngine(myspace=sphere) results_ind = [] results_kw = [] def cmp_res(res1, res2): comp = [x == y for x, y in zip(res1, res2)] ok_(np.all(comp)) for iq, q in enumerate((qe, qec)): q.train(ds) # sequential train on the same should be ok in both cases q.train(ds) res_ind = [q[fid] for fid in xrange(ds.nfeatures)] res_kw = [q(myspace=x) for x in ds.fa.myspace] # test if results match cmp_res(res_ind, res_kw) results_ind.append(res_ind) results_kw.append(res_kw) # now check if results of cached were the same as of regular run cmp_res(results_ind[0], results_ind[1]) # Now do sanity checks assert_raises(ValueError, qec.train, ds[:, :-1]) assert_raises(ValueError, qec.train, ds.copy()) ds2 = ds.copy() qec.untrain() qec.train(ds2) # should be the same results on the copy cmp_res(results_ind[0], [qec[fid] for fid in xrange(ds.nfeatures)]) cmp_res(results_kw[0], [qec(myspace=x) for x in ds.fa.myspace]) ok_(qec.train(ds2) is None) # unfortunately we are not catching those #ds2.fa.myspace = ds2.fa.myspace*3 #assert_raises(ValueError, qec.train, ds2) def test_scattered_neighborhoods(): radius = 1 sphere = ne.Sphere(radius) coords = range(50) scoords, sidx = ne.scatter_neighborhoods(sphere, coords, deterministic=False) # for this specific case of 1d coordinates the coords and idx should be # identical assert_array_equal(scoords, sidx) # minimal difference of successive coordinates must be larger than the # radius of the spheres. Test only works for 1d coords and sorted return # values assert(np.diff(scoords).min() > radius) # now the same for the case where a particular coordinate appears multiple # times coords = range(10) + range(10) scoords, sidx = ne.scatter_neighborhoods(sphere, coords, deterministic=False) sidx = sorted(sidx) assert_array_equal(scoords, sidx[:5]) assert_array_equal(scoords, [i - 10 for i in sidx[5:]]) pymvpa2-2.2.0/mvpa2/tests/test_niftidataset.py000066400000000000000000000376721202542755000214110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA nifti dataset""" import os import numpy as np from mvpa2 import cfg from mvpa2.testing import * if not externals.exists('nibabel'): raise SkipTest from mvpa2 import pymvpa_dataroot from mvpa2.datasets.mri import fmri_dataset, _load_anyimg, map2nifti from mvpa2.datasets.eventrelated import eventrelated_dataset from mvpa2.misc.fsl import FslEV3 from mvpa2.misc.support import Event, value2idx from mvpa2.misc.io.base import SampleAttributes def test_nifti_dataset(): """Basic testing of NiftiDataset """ ds = fmri_dataset(samples=os.path.join(pymvpa_dataroot,'example4d.nii.gz'), targets=[1,2], sprefix='voxel') assert_equal(ds.nfeatures, 294912) assert_equal(ds.nsamples, 2) assert_array_equal(ds.a.voxel_eldim, ds.a.imghdr['pixdim'][1:4]) assert_true(ds.a['voxel_dim'].value == (128,96,24)) # XXX move elsewhere #check that mapper honours elementsize #nb22 = np.array([i for i in data.a.mapper.getNeighborIn((1, 1, 1), 2.2)]) #nb20 = np.array([i for i in data.a.mapper.getNeighborIn((1, 1, 1), 2.0)]) #self.assertTrue(nb22.shape[0] == 7) #self.assertTrue(nb20.shape[0] == 5) merged = ds.copy() merged.append(ds) assert_equal(merged.nfeatures, 294912) assert_equal(merged.nsamples, 4) # check that the header survives for k in merged.a.imghdr.keys(): assert_array_equal(merged.a.imghdr[k], ds.a.imghdr[k]) # throw away old dataset and see if new one survives del ds assert_array_equal(merged.samples[3], merged.samples[1]) # check whether we can use a plain ndarray as mask mask = np.zeros((128, 96, 24), dtype='bool') mask[40, 20, 12] = True nddata = fmri_dataset(samples=os.path.join(pymvpa_dataroot,'example4d.nii.gz'), targets=[1,2], mask=mask) assert_equal(nddata.nfeatures, 1) rmap = nddata.a.mapper.reverse1(np.array([44])) assert_equal(rmap.shape, (128, 96, 24)) assert_equal(np.sum(rmap), 44) assert_equal(rmap[40, 20, 12], 44) def test_fmridataset(): # full-blown fmri dataset testing import nibabel maskimg = nibabel.load(os.path.join(pymvpa_dataroot, 'mask.nii.gz')) data = maskimg.get_data().copy() data[data>0] = np.arange(1, np.sum(data) + 1) maskimg = nibabel.Nifti1Image(data, None, maskimg.get_header()) attr = SampleAttributes(os.path.join(pymvpa_dataroot, 'attributes.txt')) ds = fmri_dataset(samples=os.path.join(pymvpa_dataroot,'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=maskimg, sprefix='subj1', add_fa={'myintmask': maskimg}) # content assert_equal(len(ds), 1452) assert_true(ds.nfeatures, 530) assert_array_equal(sorted(ds.sa.keys()), ['chunks', 'targets', 'time_coords', 'time_indices']) assert_array_equal(sorted(ds.fa.keys()), ['myintmask', 'subj1_indices']) assert_array_equal(sorted(ds.a.keys()), ['imghdr', 'imgtype', 'mapper', 'subj1_dim', 'subj1_eldim']) # vol extent assert_equal(ds.a.subj1_dim, (40, 20, 1)) # check time assert_equal(ds.sa.time_coords[-1], 3627.5) # non-zero mask values assert_array_equal(ds.fa.myintmask, np.arange(1, ds.nfeatures + 1)) # we know that imgtype must be: ok_(ds.a.imgtype is nibabel.Nifti1Image) @with_tempfile(suffix='.img') def test_nifti_mapper(filename): """Basic testing of map2Nifti """ skip_if_no_external('scipy') import nibabel data = fmri_dataset(samples=os.path.join(pymvpa_dataroot,'example4d.nii.gz'), targets=[1,2]) # test mapping of ndarray vol = map2nifti(data, np.ones((294912,), dtype='int16')) assert_equal(vol.get_shape(), (128, 96, 24)) assert_true((vol.get_data() == 1).all()) # test mapping of the dataset vol = map2nifti(data) assert_equal(vol.get_shape(), (128, 96, 24, 2)) ok_(isinstance(vol, data.a.imgtype)) # test providing custom imgtypes vol = map2nifti(data, imgtype=nibabel.Nifti1Pair) ok_(isinstance(vol, nibabel.Nifti1Pair)) # Lets generate a dataset using an alternative format (MINC) # and see if type persists volminc = nibabel.MincImage(vol.get_data(), vol.get_affine(), vol.get_header()) ok_(isinstance(volminc, nibabel.MincImage)) dsminc = fmri_dataset(volminc, targets=1) ok_(dsminc.a.imgtype is nibabel.MincImage) ok_(isinstance(dsminc.a.imghdr, nibabel.minc.MincImage.header_class)) # Lets test if we could save/load now into Analyze volume/dataset if externals.versions['nibabel'] < '1.1.0': raise SkipTest('nibabel prior 1.1.0 had an issue with types comprehension') volanal = map2nifti(dsminc, imgtype=nibabel.AnalyzeImage) # MINC has no 'save' capability ok_(isinstance(volanal, nibabel.AnalyzeImage)) volanal.to_filename(filename) dsanal = fmri_dataset(filename, targets=1) # this one is tricky since it might become Spm2AnalyzeImage ok_('AnalyzeImage' in str(dsanal.a.imgtype)) ok_('AnalyzeHeader' in str(dsanal.a.imghdr.__class__)) volanal_ = map2nifti(dsanal) ok_(isinstance(volanal_, dsanal.a.imgtype)) # type got preserved def test_multiple_calls(): """Test if doing exactly the same operation twice yields the same result """ data = fmri_dataset(samples=os.path.join(pymvpa_dataroot,'example4d.nii.gz'), targets=1, sprefix='abc') data2 = fmri_dataset(samples=os.path.join(pymvpa_dataroot,'example4d.nii.gz'), targets=1, sprefix='abc') assert_array_equal(data.a.abc_eldim, data2.a.abc_eldim) def test_er_nifti_dataset(): # setup data sources tssrc = os.path.join(pymvpa_dataroot, u'bold.nii.gz') evsrc = os.path.join(pymvpa_dataroot, 'fslev3.txt') masrc = os.path.join(pymvpa_dataroot, 'mask.nii.gz') evs = FslEV3(evsrc).to_events() # load timeseries ds_orig = fmri_dataset(tssrc) # segment into events ds = eventrelated_dataset(ds_orig, evs, time_attr='time_coords') # we ask for boxcars of 9s length, and the tr in the file header says 2.5s # hence we should get round(9.0/2.4) * np.prod((1,20,40) == 3200 features assert_equal(ds.nfeatures, 3200) assert_equal(len(ds), len(evs)) # the voxel indices are reflattened after boxcaring , but still 3D assert_equal(ds.fa.voxel_indices.shape, (ds.nfeatures, 3)) # and they have been broadcasted through all boxcars assert_array_equal(ds.fa.voxel_indices[:800], ds.fa.voxel_indices[800:1600]) # each feature got an event offset value assert_array_equal(ds.fa.event_offsetidx, np.repeat([0,1,2,3], 800)) # check for all event attributes assert_true('onset' in ds.sa) assert_true('duration' in ds.sa) assert_true('features' in ds.sa) # check samples origsamples = _load_anyimg(tssrc)[0] for i, onset in \ enumerate([value2idx(e['onset'], ds_orig.sa.time_coords, 'floor') for e in evs]): assert_array_equal(ds.samples[i], origsamples[onset:onset+4].ravel()) assert_array_equal(ds.sa.time_indices[i], np.arange(onset, onset + 4)) assert_array_equal(ds.sa.time_coords[i], np.arange(onset, onset + 4) * 2.5) for evattr in [a for a in ds.sa if a.count("event_attrs") and not a.count('event_attrs_event')]: assert_array_equal(evs[i]['_'.join(evattr.split('_')[2:])], ds.sa[evattr].value[i]) # check offset: only the last one exactly matches the tr assert_array_equal(ds.sa.orig_offset, [1, 1, 0]) # map back into voxel space, should ignore addtional features nim = map2nifti(ds) # origsamples has t,x,y,z assert_equal(nim.get_shape(), origsamples.shape[1:] + (len(ds) * 4,)) # check shape of a single sample nim = map2nifti(ds, ds.samples[0]) # pynifti image has [t,]z,y,x assert_equal(nim.get_shape(), (40, 20, 1, 4)) # and now with masking ds = fmri_dataset(tssrc, mask=masrc) ds = eventrelated_dataset(ds, evs, time_attr='time_coords') nnonzero = len(_load_anyimg(masrc)[0].nonzero()[0]) assert_equal(nnonzero, 530) # we ask for boxcars of 9s length, and the tr in the file header says 2.5s # hence we should get round(9.0/2.4) * np.prod((1,20,40) == 3200 features assert_equal(ds.nfeatures, 4 * 530) assert_equal(len(ds), len(evs)) # and they have been broadcasted through all boxcars assert_array_equal(ds.fa.voxel_indices[:nnonzero], ds.fa.voxel_indices[nnonzero:2*nnonzero]) def test_er_nifti_dataset_mapping(): """Some mapping testing -- more tests is better """ # z,y,x sample_size = (4, 3, 2) # t,z,y,x samples = np.arange(120).reshape((5,) + sample_size) dsmask = np.arange(24).reshape(sample_size) % 2 import nibabel tds = fmri_dataset(nibabel.Nifti1Image(samples.T, None), mask=nibabel.Nifti1Image(dsmask.T, None)) ds = eventrelated_dataset( tds, events=[Event(onset=0, duration=2, label=1, chunk=1, features=[1000, 1001]), Event(onset=1, duration=2, label=2, chunk=1, features=[2000, 2001])]) nfeatures = tds.nfeatures mask = np.zeros(dsmask.shape, dtype='bool') mask[0, 0, 0] = mask[1, 0, 1] = mask[0, 0, 1] = 1 fmask = ds.a.mapper.forward1(mask.T) # select using mask in volume and all features in the other part ds_sel = ds[:, fmask] # now tests assert_array_equal(mask.reshape(24).nonzero()[0], [0, 1, 7]) # two events, 2 orig features at 2 timepoints assert_equal(ds_sel.samples.shape, (2, 4)) assert_array_equal(ds_sel.sa.features, [[1000, 1001], [2000, 2001]]) assert_array_equal(ds_sel.samples, [[ 1, 7, 25, 31], [ 25, 31, 49, 55]]) # reproducability assert_array_equal(ds_sel.samples, ds_sel.a.mapper.forward(np.rollaxis(samples.T, -1))) # reverse-mapping rmapped = ds_sel.a.mapper.reverse1(np.arange(10, 14)) assert_equal(np.rollaxis(rmapped, 0, 4).T.shape, (2,) + sample_size) expected = np.zeros((2,)+sample_size, dtype='int') expected[0,0,0,1] = 10 expected[0,1,0,1] = 11 expected[1,0,0,1] = 12 expected[1,1,0,1] = 13 assert_array_equal(np.rollaxis(rmapped, 0, 4).T, expected) def test_nifti_dataset_from3_d(): """Test NiftiDataset based on 3D volume(s) """ tssrc = os.path.join(pymvpa_dataroot, 'bold.nii.gz') masrc = os.path.join(pymvpa_dataroot, 'mask.nii.gz') # Test loading of 3D volumes # by default we are enforcing 4D, testing here with the demo 3d mask ds = fmri_dataset(masrc, mask=masrc, targets=1) assert_equal(len(ds), 1) import nibabel plain_data = nibabel.load(masrc).get_data() # Lets check if mapping back works as well assert_array_equal(plain_data, map2nifti(ds).get_data().reshape(plain_data.shape)) # test loading from a list of filenames # for now we should fail if trying to load a mix of 4D and 3D volumes # TODO: nope -- it should work and we should test here if correctly dsfull_plusone = fmri_dataset((masrc, tssrc), mask=masrc, targets=1) # Lets prepare some custom NiftiImage dsfull = fmri_dataset(tssrc, mask=masrc, targets=1) assert_equal(len(dsfull)+1, len(dsfull_plusone)) assert_equal(dsfull.nfeatures, dsfull_plusone.nfeatures) # skip 3d mask in 0th sample assert_array_equal(dsfull.samples, dsfull_plusone[1:].samples) ds_selected = dsfull[3] nifti_selected = map2nifti(ds_selected) # Load dataset from a mix of 3D volumes # (given by filenames and NiftiImages) labels = [123, 2, 123] ds2 = fmri_dataset((masrc, masrc, nifti_selected), mask=masrc, targets=labels) assert_equal(ds2.nsamples, 3) assert_array_equal(ds2.samples[0], ds2.samples[1]) assert_array_equal(ds2.samples[2], dsfull.samples[3]) assert_array_equal(ds2.targets, labels) #def test_nifti_dataset_roi_mask_neighbors(self): # """Test if we could request neighbors within spherical ROI whenever # center is outside of the mask # """ # # # check whether we can use a plain ndarray as mask # mask_roi = np.zeros((24, 96, 128), dtype='bool') # mask_roi[12, 20, 38:42] = True # mask_roi[23, 20, 38:42] = True # far away # ds_full = nifti_dataset(samples=os.path.join(pymvpa_dataroot,'example4d'), # targets=[1,2]) # ds_roi = nifti_dataset(samples=os.path.join(pymvpa_dataroot,'example4d'), # targets=[1,2], mask=mask_roi) # # Should just work since we are in the mask # ids_roi = ds_roi.a.mapper.getNeighbors( # ds_roi.a.mapper.getOutId((12, 20, 40)), # radius=20) # self.assertTrue(len(ids_roi) == 4) # # # Trying to request feature outside of the mask # self.assertRaises(ValueError, # ds_roi.a.mapper.getOutId, # (12, 20, 37)) # # # Lets work around using full (non-masked) volume # ids_out = [] # for id_in in ds_full.a.mapper.getNeighborIn( (12, 20, 37), radius=20): # try: # ids_out.append(ds_roi.a.mapper.getOutId(id_in)) # except ValueError: # pass # self.assertTrue(ids_out == ids_roi) @with_tempfile(suffix='.nii.gz') def test_assumptions_on_nibabel_behavior(filename): if not externals.exists('nibabel'): raise SkipTest('No nibabel available') import nibabel as nb masrc = os.path.join(pymvpa_dataroot, 'mask.nii.gz') ni = nb.load(masrc) hdr = ni.get_header() data = ni.get_data() # operate in the native endianness so that symbolic type names (e.g. 'int16') # remain the same across platforms if hdr.endianness == nb.volumeutils.swapped_code: hdr = hdr.as_byteswapped() assert_equal(hdr.get_data_dtype(), 'int16') # we deal with int file dataf = data.astype(float) dataf_dtype = dataf.dtype dataf[1,1,0] = 123 + 1./3 # and if we specify float64 as the datatype we should be in better # position hdr64 = hdr.copy() hdr64.set_data_dtype('float64') for h,t,d in ((hdr, 'int16', 2), (hdr64, 'float64', 166)): # we can only guarantee 2-digits precision while converting # into int16? weird # but infinite precision for float64 since data and file # formats match nif = nb.Nifti1Image(dataf, None, h) # Header takes over and instructs to keep it int despite dtype assert_equal(nif.get_header().get_data_dtype(), t) # but does not cast the data (yet?) into int16 (in case of t==int16) assert_equal(nif.get_data().dtype, dataf_dtype) # nor changes somehow within dataf assert_equal(dataf.dtype, dataf_dtype) # save it back to the file and load nif.to_filename(filename) nif_ = nb.load(filename) dataf_ = nif_.get_data() assert_equal(nif_.get_header().get_data_dtype(), t) assert_equal(dataf_.dtype, dataf_dtype) assert_array_almost_equal(dataf_, dataf, decimal=d) # TEST scale/intercept to be changed slope, inter = nif_.get_header().get_slope_inter() if t == 'int16': # it should have rescaled the data assert_not_equal(slope, 1.0) assert_not_equal(inter, 0) else: assert_equal(slope, 1.0) assert_equal(inter, 0) pymvpa2-2.2.0/mvpa2/tests/test_params.py000066400000000000000000000124141202542755000202000ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Parameter class.""" import unittest, copy import numpy as np from mvpa2.datasets.base import dataset_wizard from mvpa2.base.state import ClassWithCollections, ConditionalAttribute from mvpa2.base.param import Parameter, KernelParameter from mvpa2.testing.clfs import * class ParametrizedClassifier(SameSignClassifier): p1 = Parameter(1.0) kp1 = KernelParameter(100.0) class ParametrizedClassifierExtended(ParametrizedClassifier): def __init__(self): ParametrizedClassifier.__init__(self) self.kernel_params['kp2'] = \ KernelParameter(200.0, doc="Very useful param") class BlankClass(ClassWithCollections): pass class SimpleClass(ClassWithCollections): C = Parameter(1.0, min=0, doc="C parameter") class MixedClass(ClassWithCollections): C = Parameter(1.0, min=0, doc="C parameter") D = Parameter(3.0, min=0, doc="D parameter") state1 = ConditionalAttribute(doc="bogus") class ParamsTests(unittest.TestCase): def test_blank(self): blank = BlankClass() self.assertRaises(AttributeError, blank.__getattribute__, 'ca') self.assertRaises(AttributeError, blank.__getattribute__, '') def test_simple(self): simple = SimpleClass() self.assertEqual(len(simple.params.items()), 1) self.assertRaises(AttributeError, simple.__getattribute__, 'dummy') self.assertRaises(AttributeError, simple.__getattribute__, '') self.assertEqual(simple.params.C, 1.0) self.assertEqual(simple.params.is_set("C"), False) self.assertEqual(simple.params.is_set(), False) self.assertEqual(simple.params["C"].is_default, True) self.assertEqual(simple.params["C"].equal_default, True) simple.params.C = 1.0 # we are not actually setting the value if == default self.assertEqual(simple.params["C"].is_default, True) self.assertEqual(simple.params["C"].equal_default, True) simple.params.C = 10.0 self.assertEqual(simple.params.is_set("C"), True) self.assertEqual(simple.params.is_set(), True) self.assertEqual(simple.params["C"].is_default, False) self.assertEqual(simple.params["C"].equal_default, False) self.assertEqual(simple.params.C, 10.0) simple.params["C"].reset_value() self.assertEqual(simple.params.is_set("C"), True) # TODO: Test if we 'train' a classifier f we get is_set to false self.assertEqual(simple.params.C, 1.0) self.assertRaises(AttributeError, simple.params.__getattribute__, 'B') def test_mixed(self): mixed = MixedClass() self.assertEqual(len(mixed.params.items()), 2) self.assertEqual(len(mixed.ca.items()), 1) self.assertRaises(AttributeError, mixed.__getattribute__, 'kernel_params') self.assertEqual(mixed.params.C, 1.0) self.assertEqual(mixed.params.is_set("C"), False) self.assertEqual(mixed.params.is_set(), False) mixed.params.C = 10.0 self.assertEqual(mixed.params.is_set("C"), True) self.assertEqual(mixed.params.is_set("D"), False) self.assertEqual(mixed.params.is_set(), True) self.assertEqual(mixed.params.D, 3.0) def test_classifier(self): clf = ParametrizedClassifier() self.assertEqual(len(clf.params.items()), 2) # + retrainable self.assertEqual(len(clf.kernel_params.items()), 1) clfe = ParametrizedClassifierExtended() self.assertEqual(len(clfe.params.items()), 2) self.assertEqual(len(clfe.kernel_params.items()), 2) self.assertEqual(len(clfe.kernel_params.listing), 2) # check assignment once again self.assertEqual(clfe.kernel_params.kp2, 200.0) clfe.kernel_params.kp2 = 201.0 self.assertEqual(clfe.kernel_params.kp2, 201.0) self.assertEqual(clfe.kernel_params.is_set("kp2"), True) clfe.train(dataset_wizard(samples=[[0,0]], targets=[1], chunks=[1])) self.assertEqual(clfe.kernel_params.is_set("kp2"), False) self.assertEqual(clfe.kernel_params.is_set(), False) self.assertEqual(clfe.params.is_set(), False) def test_incorrect_parameter_error(self): # Just a sample class from mvpa2.generators.partition import NFoldPartitioner try: spl = NFoldPartitioner(1, incorrect=None) raise AssertionError("Must have failed with an exception here " "due to incorrect parameter") except Exception, e: estr = str(e) self.assertTrue(not "calling_time" in estr, msg="must give valid parameters for partitioner, " "not .ca's. Got: \n\t%r" % estr) # sample parameters which should be present for p in 'count', 'disable_ca', 'postproc': self.assertTrue(p in estr) def suite(): return unittest.makeSuite(ParamsTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_perturbsensana.py000066400000000000000000000040141202542755000217460ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA perturbation sensitivity analyzer.""" import numpy as np from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.datasets.base import Dataset from mvpa2.measures.noiseperturbation import NoisePerturbationSensitivity from mvpa2.generators.partition import NFoldPartitioner from mvpa2.measures.base import CrossValidation class PerturbationSensitivityAnalyzerTests(unittest.TestCase): @reseed_rng() def setUp(self): data = np.random.standard_normal(( 100, 3, 4, 2 )) labels = np.concatenate( ( np.repeat( 0, 50 ), np.repeat( 1, 50 ) ) ) chunks = np.repeat( range(5), 10 ) chunks = np.concatenate( (chunks, chunks) ) mask = np.ones( (3, 4, 2), dtype='bool') mask[0,0,0] = 0 mask[1,3,1] = 0 self.dataset = Dataset.from_wizard(samples=data, targets=labels, chunks=chunks, mask=mask) def test_perturbation_sensitivity_analyzer(self): # compute N-1 cross-validation as datameasure cv = CrossValidation(sample_clf_lin, NFoldPartitioner()) # do perturbation analysis using gaussian noise pa = NoisePerturbationSensitivity(cv, noise=np.random.normal) # run analysis map = pa(self.dataset) # check for correct size of map self.assertTrue(map.nfeatures == self.dataset.nfeatures) # dataset is noise -> mean sensitivity should be zero self.assertTrue(-0.2 < np.mean(map) < 0.2) def suite(): return unittest.makeSuite(PerturbationSensitivityAnalyzerTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_plr.py000066400000000000000000000026741202542755000175210ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA logistic regression classifier""" import numpy as np from mvpa2.clfs.plr import PLR from mvpa2.testing import * from mvpa2.testing.datasets import datasets class PLRTests(unittest.TestCase): def test_plr(self): data = datasets['dumb2'] clf = PLR() clf.train(data) # prediction has to be perfect self.assertTrue((clf.predict(data.samples) == data.targets).all()) def test_plr_state(self): data = datasets['dumb2'] clf = PLR() clf.train(data) # Also get "sensitivity". Was introduced to check a bug with # processing dataset with numeric labels sa = clf.get_sensitivity_analyzer() sens = sa(data) clf.ca.enable('estimates') clf.ca.enable('predictions') p = clf.predict(data.samples) self.assertTrue((p == clf.ca.predictions).all()) self.assertTrue(np.array(clf.ca.estimates).shape == np.array(p).shape) def suite(): return unittest.makeSuite(PLRTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_procrust.py000066400000000000000000000107021202542755000205740ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Procrustean mapper""" import unittest import numpy as np from numpy.linalg import norm from mvpa2.base import externals from mvpa2.datasets.base import dataset_wizard from mvpa2.testing import * from mvpa2.testing.datasets import * from mvpa2.mappers.procrustean import ProcrusteanMapper svds = ['numpy'] if externals.exists('liblapack.so'): svds += ['dgesvd'] if externals.exists('scipy'): svds += ['scipy'] class ProcrusteanMapperTests(unittest.TestCase): @sweepargs(oblique=(False,True)) @sweepargs(svd=svds) @reseed_rng() def test_simple(self, svd, oblique): d_orig = datasets['uni2large'].samples d_orig2 = datasets['uni4large'].samples for sdim, nf_s, nf_t, full_test \ in (('Same 2D', 2, 2, True), ('Same 10D', 10, 10, True), ('2D -> 3D', 2, 3, True), ('3D -> 2D', 3, 2, False)): # figure out some "random" rotation d = max(nf_s, nf_t) R = get_random_rotation(nf_s, nf_t, d_orig) if nf_s == nf_t: adR = np.abs(1.0 - np.linalg.det(R)) self.assertTrue(adR < 1e-10, "Determinant of rotation matrix should " "be 1. Got it 1+%g" % adR) self.assertTrue(norm(np.dot(R, R.T) - np.eye(R.shape[0])) < 1e-10) for s, scaling in ((0.3, True), (1.0, False)): pm = ProcrusteanMapper(scaling=scaling, oblique=oblique, svd=svd) # pm2 = ProcrusteanMapper(scaling=scaling, oblique=oblique) t1, t2 = d_orig[23, 1], d_orig[22, 1] # Create source/target data d = d_orig[:, :nf_s] d_s = d + t1 d_t = np.dot(s * d, R) + t2 # train bloody mapper(s) ds = dataset_wizard(samples=d_s, targets=d_t) pm.train(ds) ## not possible with new interface #pm2.train(d_s, d_t) ## verify that both created the same transformation #npm2proj = norm(pm.proj - pm2.proj) #self.assertTrue(npm2proj <= 1e-10, # msg="Got transformation different by norm %g." # " Had to be less than 1e-10" % npm2proj) #self.assertTrue(norm(pm._offset_in - pm2._offset_in) <= 1e-10) #self.assertTrue(norm(pm._offset_out - pm2._offset_out) <= 1e-10) # do forward transformation on the same source data d_s_f = pm.forward(d_s) self.assertEqual(d_s_f.shape, d_t.shape, msg="Mapped shape should be identical to the d_t") dsf = d_s_f - d_t ndsf = norm(dsf)/norm(d_t) if full_test: dsR = norm(s*R - pm.proj) if not oblique: self.assertTrue(dsR <= 1e-12, msg="We should have got reconstructed rotation+scaling " "perfectly. Now got d scale*R=%g" % dsR) self.assertTrue(np.abs(s - pm._scale) < 1e-12, msg="We should have got reconstructed scale " "perfectly. Now got %g for %g" % (pm._scale, s)) self.assertTrue(ndsf <= 1e-12, msg="%s: Failed to get to the target space correctly." " normed error=%g" % (sdim, ndsf)) # Test if we get back d_s_f_r = pm.reverse(d_s_f) dsfr = d_s_f_r - d_s ndsfr = norm(dsfr)/norm(d_s) if full_test: self.assertTrue(ndsfr <= 1e-12, msg="%s: Failed to reconstruct into source space correctly." " normed error=%g" % (sdim, ndsfr)) def suite(): return unittest.makeSuite(ProcrusteanMapperTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_prototypemapper.py000066400000000000000000000125001202542755000221630ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA prototype mapper.""" import unittest import numpy as np from mvpa2.mappers.prototype import PrototypeMapper from mvpa2.kernels.np import ExponentialKernel, SquaredExponentialKernel from mvpa2.datasets import Dataset from mvpa2.clfs.similarity import StreamlineSimilarity from mvpa2.clfs.distance import corouge from mvpa2.testing.tools import assert_array_equal, assert_array_almost_equal, \ reseed_rng import random if __debug__: from mvpa2.base import debug class PrototypeMapperTests(unittest.TestCase): def setUp(self): pass ##REF: Name was automagically refactored @reseed_rng() def build_vector_based_pm(self): # samples: 40 samples in 20d space (40x20; samples x features) self.samples = np.random.rand(40,20) # initial prototypes are samples itself: self.prototypes = self.samples.copy() # using just two similarities for now: self.similarities = [ExponentialKernel(), SquaredExponentialKernel()] # set up prototype mapper with prototypes identical to samples. self.pm = PrototypeMapper(similarities=self.similarities, prototypes=self.prototypes) # train Prototype self.pm.train(self.samples) def test_size(self): self.build_vector_based_pm() assert_array_equal(self.pm.proj.shape, (self.samples.shape[0], self.prototypes.shape[0] * len(self.similarities))) def test_symmetry(self): self.build_vector_based_pm() assert_array_almost_equal(self.pm.proj[:,self.samples.shape[0]], self.pm.proj.T[self.samples.shape[0],:]) assert_array_equal(self.pm.proj[:,self.samples.shape[0]], self.pm.proj.T[self.samples.shape[0],:]) def test_size_random_prototypes(self): self.build_vector_based_pm() fraction = 0.5 prototype_number = max(int(len(self.samples)*fraction),1) ## debug("MAP","Generating "+str(prototype_number)+" random prototypes.") self.prototypes2 = np.array(random.sample(list(self.samples), prototype_number)) self.pm2 = PrototypeMapper(similarities=self.similarities, prototypes=self.prototypes2) self.pm2.train(self.samples) assert_array_equal(self.pm2.proj.shape, (self.samples.shape[0], self.pm2.prototypes.shape[0]*len(self.similarities))) # 2-nd portion of tests using a Dataset of streamlines @reseed_rng() def build_streamline_things(self): # Build a dataset having samples of different lengths. This is # trying to mimic a possible interface for streamlines # datasets, i.e., an iterable container of Mx3 points, where M # depends on each single streamline. # trying to pack it into an 'object' array to prevent conversion in the # Dataset self.streamline_samples = np.array([ np.random.rand(3,3), np.random.rand(5,3), np.random.rand(7,3)], dtype='object') self.dataset = Dataset(self.streamline_samples) self.similarities = [StreamlineSimilarity(distance=corouge)] def test_streamline_equal_mapper(self): self.build_streamline_things() self.prototypes_equal = self.dataset.samples self.pm = PrototypeMapper(similarities=self.similarities, prototypes=self.prototypes_equal, demean=False) self.pm.train(self.dataset.samples) ## debug("MAP","projected data: "+str(self.pm.proj)) # check size: assert_array_equal(self.pm.proj.shape, (len(self.dataset.samples), len(self.prototypes_equal)*len(self.similarities))) # test symmetry assert_array_almost_equal(self.pm.proj, self.pm.proj.T) def test_streamline_random_mapper(self): self.build_streamline_things() # Adding one more similarity to test multiple similarities in the streamline case: self.similarities.append(StreamlineSimilarity(distance=corouge)) fraction = 0.5 prototype_number = max(int(len(self.dataset.samples)*fraction),1) ## debug("MAP","Generating "+str(prototype_number)+" random prototypes.") self.prototypes_random = self.dataset.samples[np.random.permutation(self.dataset.samples.size)][:prototype_number] ## debug("MAP","prototypes: "+str(self.prototypes_random)) self.pm = PrototypeMapper(similarities=self.similarities, prototypes=self.prototypes_random, demean=False) self.pm.train(self.dataset.samples) # , fraction=1.0) # test size: assert_array_equal(self.pm.proj.shape, (len(self.dataset.samples), len(self.prototypes_random)*len(self.similarities))) def suite(): return unittest.makeSuite(PrototypeMapperTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_regr.py000066400000000000000000000145531202542755000176620ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Regressions""" from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.testing.datasets import dataset_wizard, datasets from mvpa2.base import externals from mvpa2.generators.partition import NFoldPartitioner, OddEvenPartitioner from mvpa2.measures.base import CrossValidation from mvpa2.clfs.meta import SplitClassifier from mvpa2.misc.exceptions import UnknownStateError from mvpa2.misc.attrmap import AttributeMap from mvpa2.mappers.fx import mean_sample class RegressionsTests(unittest.TestCase): @sweepargs(ml=clfswh['regression_based'] + regrswh[:]) def test_non_regressions(self, ml): """Test If binary regression-based classifiers have proper tag """ self.assertTrue(('binary' in ml.__tags__) != ml.__is_regression__, msg="Inconsistent tagging with binary and regression features" " detected in %s having %r" % (ml, ml.__tags__)) @sweepargs(regr=regrswh['regression']) def test_regressions(self, regr): """Simple tests on regressions """ if not externals.exists('scipy'): raise SkipTest else: from mvpa2.misc.errorfx import corr_error ds = datasets['chirp_linear'] # we want numeric labels to maintain the previous behavior, especially # since we deal with regressions here ds.sa.targets = AttributeMap().to_numeric(ds.targets) cve = CrossValidation(regr, NFoldPartitioner(), postproc=mean_sample(), errorfx=corr_error, enable_ca=['training_stats', 'stats']) # check the default #self.assertTrue(cve.transerror.errorfx is corr_error) corr = np.asscalar(cve(ds).samples) # Our CorrErrorFx should never return NaN self.assertTrue(not np.isnan(corr)) self.assertTrue(corr == cve.ca.stats.stats['CCe']) splitregr = SplitClassifier( regr, partitioner=OddEvenPartitioner(), enable_ca=['training_stats', 'stats']) splitregr.train(ds) split_corr = splitregr.ca.stats.stats['CCe'] split_corr_tr = splitregr.ca.training_stats.stats['CCe'] for confusion, error in ( (cve.ca.stats, corr), (splitregr.ca.stats, split_corr), (splitregr.ca.training_stats, split_corr_tr), ): #TODO: test confusion statistics # Part of it for now -- CCe for conf in confusion.summaries: stats = conf.stats if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(stats['CCe'] < 0.5) self.assertEqual(stats['CCe'], stats['Summary CCe']) s0 = confusion.as_string(short=True) s1 = confusion.as_string(short=False) for s in [s0, s1]: self.assertTrue(len(s) > 10, msg="We should get some string representation " "of regression summary. Got %s" % s) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(error < 0.2, msg="Regressions should perform well on a simple " "dataset. Got correlation error of %s " % error) # Test access to summary statistics # YOH: lets start making testing more reliable. # p-value for such accident to have is verrrry tiny, # so if regression works -- it better has at least 0.5 ;) # otherwise fix it! ;) # YOH: not now -- issues with libsvr in SG and linear kernel if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(confusion.stats['CCe'] < 0.5) # just to check if it works fine split_predictions = splitregr.predict(ds.samples) # To test basic plotting #import pylab as pl #cve.confusion.plot() #pl.show() @sweepargs(clf=clfswh['regression']) def test_regressions_classifiers(self, clf): """Simple tests on regressions being used as classifiers """ # check if we get values set correctly clf.ca.change_temporarily(enable_ca=['estimates']) self.assertRaises(UnknownStateError, clf.ca['estimates']._get) cv = CrossValidation(clf, NFoldPartitioner(), enable_ca=['stats', 'training_stats']) ds = datasets['uni2small'].copy() # we want numeric labels to maintain the previous behavior, especially # since we deal with regressions here ds.sa.targets = AttributeMap().to_numeric(ds.targets) cverror = cv(ds) self.assertTrue(len(clf.ca.estimates) == ds[ds.chunks == 1].nsamples) clf.ca.reset_changed_temporarily() # yoh: Here LARS pukes on some seeds, e.g. MVPA_SEED=665157742 # conditioned that test_regressions was ran. I could not spot # anything "stateful" on our Python side, and I guess it is # a problem of R's implementation @sweepargs(regr=regrswh['regression', 'has_sensitivity', '!gpr']) @reseed_rng() def test_sensitivities(self, regr): """Test "sensitivities" provided by regressions Inspired by a snippet leading to segfault from Daniel Kimberg lead to segfaults due to inappropriate access of SVs thinking that it is a classification problem (libsvm keeps SVs at None for those, although reports nr_class to be 2. """ myds = dataset_wizard(samples=np.random.normal(size=(10,5)), targets=np.random.normal(size=10)) sa = regr.get_sensitivity_analyzer() #try: if True: res = sa(myds) #except Exception, e: # self.fail('Failed to obtain a sensitivity due to %r' % (e,)) self.assertTrue(res.shape == (1, myds.nfeatures)) # TODO: extend the test -- checking for validity of sensitivities etc def suite(): return unittest.makeSuite(RegressionsTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_report.py000066400000000000000000000075351202542755000202400ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA simple report facility""" import unittest, os, shutil from mvpa2.base import verbose, externals from mvpa2.base.report_dummy import Report as DummyReport _test_classes = [ DummyReport ] from mvpa2.testing import sweepargs, with_tempfile if externals.exists('reportlab', raise_=False): from mvpa2.base.report import Report _test_classes += [ Report ] if __debug__: from mvpa2.base import debug class ReportTest(unittest.TestCase): """Just basic testing of reports -- pretty much that nothing fails """ def setUp(self): # preserve handlers/level for verbose self.__oldverbosehandlers = verbose.handlers self.__oldverbose_level = verbose.level def tearDown(self): verbose.handlers = self.__oldverbosehandlers verbose.level = self.__oldverbose_level ##REF: Name was automagically refactored def aux_basic(self, dirname, rc): """Helper function -- to assure that all filehandlers get closed so we could remove trash directory. Otherwise -- .nfs* files on NFS-mounted drives cause problems """ report = rc('UnitTest report', title="Sample report for testing", path=dirname) isdummy = isinstance(report, DummyReport) verbose.handlers = [report] verbose.level = 3 verbose(1, "Starting") verbose(2, "Level 2") if not isdummy: self.assertTrue(len(report._story) == 2, msg="We should have got some lines from verbose") if __debug__: odhandlers = debug.handlers debug.handlers = [report] oactive = debug.active debug.active = ['TEST'] + debug.active debug('TEST', "Testing report as handler for debug") if not isdummy: self.assertTrue(len(report._story) == 4, msg="We should have got some lines from debug") debug.active = oactive debug.handlers = odhandlers os.makedirs(dirname) if externals.exists('pylab plottable'): if not isdummy: clen = len(report._story) import pylab as pl pl.ioff() pl.close('all') pl.figure() pl.plot([1, 2], [3, 2]) pl.figure() pl.plot([2, 10], [3, 2]) pl.title("Figure 2 must be it") report.figures() if not isdummy: self.assertTrue( len(report._story) == clen+2, msg="We should have got some lines from figures") report.text("Dugi bugi") # make sure we don't puke on xml like text with crap report.text("$lkj&*()^$%#%") report.text("locals:\n%s globals:\n%s" % (`locals()`, `globals()`)) # bloody XML - just to check that there is no puke report.xml("Dugi bugi") report.save() if externals.exists('pylab'): import pylab as pl pl.close('all') pl.ion() pass @with_tempfile() @sweepargs(rc=_test_classes) def test_basic(self, dirname, rc): """Test all available reports, real or dummy for just working """ self.aux_basic(dirname, rc) # cleanup shutil.rmtree(dirname, ignore_errors=True) def suite(): return unittest.makeSuite(ReportTest) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_rfe.py000066400000000000000000000524441202542755000175000ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA recursive feature elimination""" import numpy as np from mvpa2.generators.base import Repeater from mvpa2.generators.partition import NFoldPartitioner, OddEvenPartitioner from mvpa2.generators.permutation import AttributePermutator from mvpa2.generators.splitters import Splitter from mvpa2.datasets.base import Dataset from mvpa2.mappers.base import ChainMapper from mvpa2.mappers.fx import maxofabs_sample, mean_sample, BinaryFxNode, FxMapper from mvpa2.misc.errorfx import mean_mismatch_error from mvpa2.misc.transformers import l2_normed from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.featsel.rfe import RFE from mvpa2.featsel.base import \ SensitivityBasedFeatureSelection from mvpa2.featsel.helpers import \ NBackHistoryStopCrit, FractionTailSelector, FixedErrorThresholdStopCrit, \ MultiStopCrit, NStepsStopCrit, \ FixedNElementTailSelector, BestDetector, RangeElementSelector from mvpa2.clfs.meta import FeatureSelectionClassifier, SplitClassifier from mvpa2.clfs.transerror import ConfusionBasedError from mvpa2.misc.attrmap import AttributeMap from mvpa2.clfs.stats import MCNullDist from mvpa2.measures.base import ProxyMeasure, CrossValidation from mvpa2.base.state import UnknownStateError from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.testing.tools import reseed_rng from mvpa2.testing.datasets import datasets class RFETests(unittest.TestCase): def get_data(self): return datasets['uni2medium'] def test_best_detector(self): bd = BestDetector() # for empty history -- no best self.assertTrue(bd([]) == False) # we got the best if we have just 1 self.assertTrue(bd([1]) == True) # we got the best if we have the last minimal self.assertTrue(bd([1, 0.9, 0.8]) == True) # test for alternative func bd = BestDetector(func=max) self.assertTrue(bd([0.8, 0.9, 1.0]) == True) self.assertTrue(bd([0.8, 0.9, 1.0]+[0.9]*9) == False) self.assertTrue(bd([0.8, 0.9, 1.0]+[0.9]*10) == False) # test to detect earliest and latest minimum bd = BestDetector(lastminimum=True) self.assertTrue(bd([3, 2, 1, 1, 1, 2, 1]) == True) bd = BestDetector() self.assertTrue(bd([3, 2, 1, 1, 1, 2, 1]) == False) def test_n_back_history_stop_crit(self): """Test stopping criterion""" stopcrit = NBackHistoryStopCrit() # for empty history -- no best but just go self.assertTrue(stopcrit([]) == False) # should not stop if we got 10 more after minimal self.assertTrue(stopcrit( [1, 0.9, 0.8]+[0.9]*(stopcrit.steps-1)) == False) # should stop if we got 10 more after minimal self.assertTrue(stopcrit( [1, 0.9, 0.8]+[0.9]*stopcrit.steps) == True) # test for alternative func stopcrit = NBackHistoryStopCrit(BestDetector(func=max)) self.assertTrue(stopcrit([0.8, 0.9, 1.0]+[0.9]*9) == False) self.assertTrue(stopcrit([0.8, 0.9, 1.0]+[0.9]*10) == True) # test to detect earliest and latest minimum stopcrit = NBackHistoryStopCrit(BestDetector(lastminimum=True)) self.assertTrue(stopcrit([3, 2, 1, 1, 1, 2, 1]) == False) stopcrit = NBackHistoryStopCrit(steps=4) self.assertTrue(stopcrit([3, 2, 1, 1, 1, 2, 1]) == True) def test_fixed_error_threshold_stop_crit(self): """Test stopping criterion""" stopcrit = FixedErrorThresholdStopCrit(0.5) self.assertTrue(stopcrit([]) == False) self.assertTrue(stopcrit([0.8, 0.9, 0.5]) == False) self.assertTrue(stopcrit([0.8, 0.9, 0.4]) == True) # only last error has to be below to stop self.assertTrue(stopcrit([0.8, 0.4, 0.6]) == False) def test_n_steps_stop_crit(self): """Test stopping criterion""" stopcrit = NStepsStopCrit(2) self.assertTrue(stopcrit([]) == False) self.assertTrue(stopcrit([0.8, 0.9]) == True) self.assertTrue(stopcrit([0.8]) == False) def test_multi_stop_crit(self): """Test multiple stop criteria""" stopcrit = MultiStopCrit([FixedErrorThresholdStopCrit(0.5), NBackHistoryStopCrit(steps=4)]) # default 'or' mode # nback triggers self.assertTrue(stopcrit([1, 0.9, 0.8]+[0.9]*4) == True) # threshold triggers self.assertTrue(stopcrit([1, 0.9, 0.2]) == True) # alternative 'and' mode stopcrit = MultiStopCrit([FixedErrorThresholdStopCrit(0.5), NBackHistoryStopCrit(steps=4)], mode = 'and') # nback triggers not self.assertTrue(stopcrit([1, 0.9, 0.8]+[0.9]*4) == False) # threshold triggers not self.assertTrue(stopcrit([1, 0.9, 0.2]) == False) # only both satisfy self.assertTrue(stopcrit([1, 0.9, 0.4]+[0.4]*4) == True) def test_feature_selector(self): """Test feature selector""" # remove 10% weekest selector = FractionTailSelector(0.1) data = np.array([3.5, 10, 7, 5, -0.4, 0, 0, 2, 10, 9]) # == rank [4, 5, 6, 7, 0, 3, 2, 9, 1, 8] target10 = np.array([0, 1, 2, 3, 5, 6, 7, 8, 9]) target30 = np.array([0, 1, 2, 3, 7, 8, 9]) self.assertRaises(UnknownStateError, selector.ca.__getattribute__, 'ndiscarded') self.assertTrue((selector(data) == target10).all()) selector.felements = 0.30 # discard 30% self.assertTrue(selector.felements == 0.3) self.assertTrue((selector(data) == target30).all()) self.assertTrue(selector.ca.ndiscarded == 3) # se 3 were discarded selector = FixedNElementTailSelector(1) # 0 1 2 3 4 5 6 7 8 9 data = np.array([3.5, 10, 7, 5, -0.4, 0, 0, 2, 10, 9]) self.assertTrue((selector(data) == target10).all()) selector.nelements = 3 self.assertTrue(selector.nelements == 3) self.assertTrue((selector(data) == target30).all()) self.assertTrue(selector.ca.ndiscarded == 3) # test range selector # simple range 'above' self.assertTrue((RangeElementSelector(lower=0)(data) == \ np.array([0,1,2,3,7,8,9])).all()) self.assertTrue((RangeElementSelector(lower=0, inclusive=True)(data) == \ np.array([0,1,2,3,5,6,7,8,9])).all()) self.assertTrue((RangeElementSelector(lower=0, mode='discard', inclusive=True)(data) == \ np.array([4])).all()) # simple range 'below' self.assertTrue((RangeElementSelector(upper=2)(data) == \ np.array([4,5,6])).all()) self.assertTrue((RangeElementSelector(upper=2, inclusive=True)(data) == \ np.array([4,5,6,7])).all()) self.assertTrue((RangeElementSelector(upper=2, mode='discard', inclusive=True)(data) == \ np.array([0,1,2,3,8,9])).all()) # ranges self.assertTrue((RangeElementSelector(lower=2, upper=9)(data) == \ np.array([0,2,3])).all()) self.assertTrue((RangeElementSelector(lower=2, upper=9, inclusive=True)(data) == \ np.array([0,2,3,7,9])).all()) self.assertTrue((RangeElementSelector(upper=2, lower=9, mode='discard', inclusive=True)(data) == RangeElementSelector(lower=2, upper=9, inclusive=False)(data)).all()) # non-0 elements -- should be equivalent to np.nonzero()[0] self.assertTrue((RangeElementSelector()(data) == \ np.nonzero(data)[0]).all()) # XXX put GPR back in after it gets fixed up @sweepargs(clf=clfswh['has_sensitivity', '!meta', '!gpr']) def test_sensitivity_based_feature_selection(self, clf): # sensitivity analyser and transfer error quantifier use the SAME clf! sens_ana = clf.get_sensitivity_analyzer(postproc=maxofabs_sample()) # of features to remove Nremove = 2 # because the clf is already trained when computing the sensitivity # map, prevent retraining for transfer error calculation # Use absolute of the svm weights as sensitivity fe = SensitivityBasedFeatureSelection(sens_ana, feature_selector=FixedNElementTailSelector(2), enable_ca=["sensitivity", "selected_ids"]) data = self.get_data() data_nfeatures = data.nfeatures fe.train(data) resds = fe(data) # fail if orig datasets are changed self.assertTrue(data.nfeatures == data_nfeatures) # silly check if nfeatures got a single one removed self.assertEqual(data.nfeatures, resds.nfeatures+Nremove, msg="We had to remove just a single feature") self.assertEqual(fe.ca.sensitivity.nfeatures, data_nfeatures, msg="Sensitivity have to have # of features equal to original") def test_feature_selection_pipeline(self): sens_ana = SillySensitivityAnalyzer() data = self.get_data() data_nfeatures = data.nfeatures # test silly one first ;-) self.assertEqual(sens_ana(data).samples[0,0], -int(data_nfeatures/2)) # OLD: first remove 25% == 6, and then 4, total removing 10 # NOW: test should be independent of the numerical number of features feature_selections = [SensitivityBasedFeatureSelection( sens_ana, FractionTailSelector(0.25)), SensitivityBasedFeatureSelection( sens_ana, FixedNElementTailSelector(4)) ] # create a FeatureSelection pipeline feat_sel_pipeline = ChainMapper(feature_selections) feat_sel_pipeline.train(data) resds = feat_sel_pipeline(data) self.assertEqual(len(feat_sel_pipeline), len(feature_selections), msg="Test the property feature_selections") desired_nfeatures = int(np.ceil(data_nfeatures*0.75)) self.assertEqual([fe._oshape[0] for fe in feat_sel_pipeline], [desired_nfeatures, desired_nfeatures - 4]) # TODO: should later on work for any clfs_with_sens @sweepargs(clf=clfswh['has_sensitivity', '!meta'][:1]) @reseed_rng() def test_rfe(self, clf): # sensitivity analyser and transfer error quantifier use the SAME clf! sens_ana = clf.get_sensitivity_analyzer(postproc=maxofabs_sample()) pmeasure = ProxyMeasure(clf, postproc=BinaryFxNode(mean_mismatch_error, 'targets')) cvmeasure = CrossValidation(clf, NFoldPartitioner(), errorfx=mean_mismatch_error, postproc=mean_sample()) rfesvm_split = SplitClassifier(clf, OddEvenPartitioner()) # explore few recipes for rfe, data in [ # because the clf is already trained when computing the sensitivity # map, prevent retraining for transfer error calculation # Use absolute of the svm weights as sensitivity (RFE(sens_ana, pmeasure, Splitter('train'), fselector=FixedNElementTailSelector(1), train_pmeasure=False), self.get_data()), # use cross-validation within training to get error for the stopping point # but use full training data to derive sensitivity (RFE(sens_ana, cvmeasure, Repeater(2), # give the same full dataset to sens_ana and cvmeasure fselector=FractionTailSelector( 0.70, mode='select', tail='upper'), train_pmeasure=True), normal_feature_dataset(perlabel=20, nchunks=5, nfeatures=200, nonbogus_features=[0, 1], snr=1.5)), # use cross-validation (via SplitClassifier) and get mean # of normed sensitivities across those splits (RFE(rfesvm_split.get_sensitivity_analyzer( postproc=ChainMapper([ FxMapper('features', l2_normed), FxMapper('samples', np.mean), FxMapper('samples', np.abs)])), ConfusionBasedError(rfesvm_split, confusion_state='stats'), Repeater(2), # we will use the same full cv-training dataset fselector=FractionTailSelector( 0.50, mode='select', tail='upper'), stopping_criterion=NBackHistoryStopCrit(BestDetector(), 10), train_pmeasure=False, # we just extract it from existing confusion update_sensitivity=True), normal_feature_dataset(perlabel=28, nchunks=7, nfeatures=200, nonbogus_features=[0, 1], snr=1.5)) ]: # prep data # data = datasets['uni2medium'] data_nfeatures = data.nfeatures rfe.train(data) resds = rfe(data) # fail if orig datasets are changed self.assertTrue(data.nfeatures == data_nfeatures) # check that the features set with the least error is selected if len(rfe.ca.errors): e = np.array(rfe.ca.errors) if isinstance(rfe._fselector, FixedNElementTailSelector): self.assertTrue(resds.nfeatures == data_nfeatures - e.argmin()) else: imin = np.argmin(e) if 'does_feature_selection' in clf.__tags__: # if clf is smart it might figure it out right away assert_array_less( imin, len(e) ) else: # in this case we can even check if we had actual # going down/up trend... although -- why up??? self.assertTrue( 1 < imin < len(e) - 1 ) else: self.assertTrue(resds.nfeatures == data_nfeatures) # silly check if nfeatures is in decreasing order nfeatures = np.array(rfe.ca.nfeatures).copy() nfeatures.sort() self.assertTrue( (nfeatures[::-1] == rfe.ca.nfeatures).all() ) # check if history has elements for every step self.assertTrue(set(rfe.ca.history) == set(range(len(np.array(rfe.ca.errors))))) # Last (the largest number) can be present multiple times even # if we remove 1 feature at a time -- just need to stop well # in advance when we have more than 1 feature left ;) self.assertTrue(rfe.ca.nfeatures[-1] == len(np.where(rfe.ca.history ==max(rfe.ca.history))[0])) # XXX add a test where sensitivity analyser and transfer error do not # use the same classifier def test_james_problem(self): percent = 80 dataset = datasets['uni2small'] rfesvm_split = LinearCSVMC() fs = \ RFE(rfesvm_split.get_sensitivity_analyzer(), ProxyMeasure(rfesvm_split, postproc=BinaryFxNode(mean_mismatch_error, 'targets')), Splitter('train'), fselector=FractionTailSelector( percent / 100.0, mode='select', tail='upper'), update_sensitivity=True) clf = FeatureSelectionClassifier( LinearCSVMC(), # on features selected via RFE fs) # update sensitivity at each step (since we're not using the # same CLF as sensitivity analyzer) class StoreResults(object): def __init__(self): self.storage = [] def __call__(self, data, node, result): self.storage.append((node.measure.mapper.ca.history, node.measure.mapper.ca.errors)), cv_storage = StoreResults() cv = CrossValidation(clf, NFoldPartitioner(), postproc=mean_sample(), callback=cv_storage, enable_ca=['confusion']) # TODO -- it is stats #cv = SplitClassifier(clf) try: error = cv(dataset).samples.squeeze() except Exception, e: self.fail('CrossValidation cannot handle classifier with RFE ' 'feature selection. Got exception: %s' % (e,)) assert(len(cv_storage.storage) == len(dataset.sa['chunks'].unique)) assert(len(cv_storage.storage[0]) == 2) assert(len(cv_storage.storage[0][0]) == dataset.nfeatures) self.assertTrue(error < 0.2) def test_james_problem_multiclass(self): percent = 80 dataset = datasets['uni4large'] #dataset = dataset[:, dataset.a.nonbogus_features] rfesvm_split = LinearCSVMC() fs = \ RFE(rfesvm_split.get_sensitivity_analyzer( postproc=ChainMapper([ #FxMapper('features', l2_normed), #FxMapper('samples', np.mean), #FxMapper('samples', np.abs) FxMapper('features', lambda x: np.argsort(np.abs(x))), #maxofabs_sample() mean_sample() ])), ProxyMeasure(rfesvm_split, postproc=BinaryFxNode(mean_mismatch_error, 'targets')), Splitter('train'), fselector=FractionTailSelector( percent / 100.0, mode='select', tail='upper'), update_sensitivity=True) clf = FeatureSelectionClassifier( LinearCSVMC(), # on features selected via RFE fs) # update sensitivity at each step (since we're not using the # same CLF as sensitivity analyzer) class StoreResults(object): def __init__(self): self.storage = [] def __call__(self, data, node, result): self.storage.append((node.measure.mapper.ca.history, node.measure.mapper.ca.errors)), cv_storage = StoreResults() cv = CrossValidation(clf, NFoldPartitioner(), postproc=mean_sample(), callback=cv_storage, enable_ca=['stats']) #cv = SplitClassifier(clf) try: error = cv(dataset).samples.squeeze() except Exception, e: self.fail('CrossValidation cannot handle classifier with RFE ' 'feature selection. Got exception: %s' % (e,)) #print "ERROR: ", error #print cv.ca.stats assert(len(cv_storage.storage) == len(dataset.sa['chunks'].unique)) assert(len(cv_storage.storage[0]) == 2) assert(len(cv_storage.storage[0][0]) == dataset.nfeatures) #print "non bogus features", dataset.a.nonbogus_features #print cv_storage.storage self.assertTrue(error < 0.2) ##REF: Name was automagically refactored def __test_matthias_question(self): rfe_clf = LinearCSVMC(C=1) rfesvm_split = SplitClassifier(rfe_clf) clf = \ FeatureSelectionClassifier( clf = LinearCSVMC(C=1), feature_selection = RFE( sensitivity_analyzer = rfesvm_split.get_sensitivity_analyzer( combiner=first_axis_mean, transformer=np.abs), transfer_error=ConfusionBasedError( rfesvm_split, confusion_state="confusion"), stopping_criterion=FixedErrorThresholdStopCrit(0.20), feature_selector=FractionTailSelector( 0.2, mode='discard', tail='lower'), update_sensitivity=True)) no_permutations = 1000 permutator = AttributePermutator('targets', count=no_permutations) cv = CrossValidation(clf, NFoldPartitioner(), null_dist=MCNullDist(permutator, tail='left'), enable_ca=['stats']) error = cv(datasets['uni2small']) self.assertTrue(error < 0.4) self.assertTrue(cv.ca.null_prob < 0.05) def suite(): return unittest.makeSuite(RFETests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_ridge.py000066400000000000000000000032271202542755000200110ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA ridge regression classifier""" from mvpa2.clfs.ridge import RidgeReg from scipy.stats import pearsonr from mvpa2.testing import * from mvpa2.testing.datasets import datasets class RidgeRegTests(unittest.TestCase): def test_ridge_reg(self): # not the perfect dataset with which to test, but # it will do for now. data = datasets['dumb'] clf = RidgeReg() clf.train(data) # prediction has to be almost perfect # test with a correlation pre = clf.predict(data.samples) cor = pearsonr(pre,data.targets) self.assertTrue(cor[0] > .8) # do again for fortran implementation # DISABLE for now, at it is known to be broken # clf = RidgeReg(implementation='gradient') # clf.train(data) # cor = pearsonr(clf.predict(data.samples), data.targets) # print cor # self.assertTrue(cor[0] > .8) def test_ridge_reg_state(self): data = datasets['dumb'] clf = RidgeReg() clf.train(data) clf.ca.enable('predictions') p = clf.predict(data.samples) self.assertTrue((p == clf.ca.predictions).all()) def suite(): return unittest.makeSuite(RidgeRegTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_searchlight.py000066400000000000000000000716041202542755000212200ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA searchlight algorithm""" import tempfile, time import numpy.random as rnd from math import ceil import mvpa2 from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.testing.datasets import * from mvpa2.datasets import Dataset, hstack from mvpa2.base.types import is_datasetlike from mvpa2.base import externals from mvpa2.mappers.base import ChainMapper from mvpa2.mappers.fx import mean_group_sample from mvpa2.clfs.transerror import ConfusionMatrix from mvpa2.measures.searchlight import sphere_searchlight, Searchlight from mvpa2.measures.gnbsearchlight import sphere_gnbsearchlight, \ GNBSearchlight from mvpa2.clfs.gnb import GNB from mvpa2.measures.nnsearchlight import sphere_m1nnsearchlight, \ M1NNSearchlight from mvpa2.clfs.knn import kNN from mvpa2.misc.neighborhood import IndexQueryEngine, Sphere from mvpa2.misc.errorfx import corr_error from mvpa2.generators.partition import NFoldPartitioner, OddEvenPartitioner from mvpa2.generators.permutation import AttributePermutator from mvpa2.measures.base import CrossValidation class SearchlightTests(unittest.TestCase): def setUp(self): self.dataset = datasets['3dlarge'] # give the feature coord a more common name, matching the default of # the searchlight self.dataset.fa['voxel_indices'] = self.dataset.fa.myspace self._tested_pprocess = False # https://github.com/PyMVPA/PyMVPA/issues/67 # https://github.com/PyMVPA/PyMVPA/issues/69 def test_gnbsearchlight_doc(self): # Test either we excluded nproc from the docstrings ok_(not 'nproc' in GNBSearchlight.__init__.__doc__) ok_(not 'nproc' in GNBSearchlight.__doc__) ok_(not 'nproc' in sphere_gnbsearchlight.__doc__) # but present elsewhere ok_( 'nproc' in sphere_searchlight.__doc__) ok_( 'nproc' in Searchlight.__init__.__doc__) #def _test_searchlights(self, ds, sls, roi_ids, result_all): @sweepargs(lrn_sllrn_SL_partitioner= [(GNB(common_variance=v, descr='GNB'), None, sphere_gnbsearchlight, NFoldPartitioner(cvtype=1)) for v in (True, False)] + # Mean 1 NN searchlights [(ChainMapper( [mean_group_sample(['targets', 'partitions']), kNN(1)], space='targets', descr='M1NN'), kNN(1), sphere_m1nnsearchlight, NFoldPartitioner(0.5, selection_strategy='random', count=20)), # the same but with NFold(1) partitioner since it still should work (ChainMapper( [mean_group_sample(['targets', 'partitions']), kNN(1)], space='targets', descr='NF-M1NN'), kNN(1), sphere_m1nnsearchlight, NFoldPartitioner(1)), ] ) @sweepargs(do_roi=(False, True)) @sweepargs(results_backend=('native', 'hdf5')) @reseed_rng() def test_spatial_searchlight(self, lrn_sllrn_SL_partitioner, do_roi=False, results_backend='native'): """Tests both generic and ad-hoc searchlights (e.g. GNBSearchlight) Test of and adhoc searchlight anyways requires a ground-truth comparison to the generic version, so we are doing sweepargs here """ lrn, sllrn, SL, partitioner = lrn_sllrn_SL_partitioner ## if results_backend == 'hdf5' and not common_variance: ## # no need for full combination of all possible arguments here ## return if __debug__ and 'ENFORCE_CA_ENABLED' in debug.active \ and isinstance(lrn, ChainMapper): raise SkipTest("Known to fail while trying to enable " "training_stats for the ChainMapper (M1NN here)") # e.g. for M1NN we need plain kNN(1) for m1nnsl, but to imitate m1nn # "learner" we must use a chainmapper atm if sllrn is None: sllrn = lrn ds = datasets['3dsmall'].copy() # Let's test multiclass here, so boost # of labels ds[6:18].T += 2 ds.fa['voxel_indices'] = ds.fa.myspace # To assure that users do not run into incorrect operation due to overflows ds.samples += 5000 ds.samples *= 1000 ds.samples = ds.samples.astype(np.int16) # compute N-1 cross-validation for each sphere # YOH: unfortunately sample_clf_lin is not guaranteed # to provide exactly the same results due to inherent # iterative process. Therefore lets use something quick # and pure Python cv = CrossValidation(lrn, partitioner) skwargs = dict(radius=1, enable_ca=['roi_sizes', 'raw_results', 'roi_feature_ids']) if do_roi: # select some random set of features nroi = rnd.randint(1, ds.nfeatures) # and lets compute the full one as well once again so we have a reference # which will be excluded itself from comparisons but values will be compared # for selected roi_id sl_all = SL(sllrn, partitioner, **skwargs) result_all = sl_all(ds) # select random features roi_ids = rnd.permutation(range(ds.nfeatures))[:nroi] skwargs['center_ids'] = roi_ids else: nroi = ds.nfeatures roi_ids = np.arange(nroi) result_all = None if results_backend == 'hdf5': skip_if_no_external('h5py') sls = [sphere_searchlight(cv, results_backend=results_backend, **skwargs), #GNBSearchlight(gnb, NFoldPartitioner(cvtype=1)) SL(sllrn, partitioner, indexsum='fancy', **skwargs) ] if externals.exists('scipy'): sls += [ SL(sllrn, partitioner, indexsum='sparse', **skwargs)] # Test nproc just once if externals.exists('pprocess') and not self._tested_pprocess: sls += [sphere_searchlight(cv, nproc=2, **skwargs)] self._tested_pprocess = True # Provide the dataset and all those searchlights for testing #self._test_searchlights(ds, sls, roi_ids, result_all) #nroi = len(roi_ids) #do_roi = nroi != ds.nfeatures all_results = [] for sl in sls: # run searchlight mvpa2.seed() # reseed rng again for m1nnsl results = sl(ds) all_results.append(results) #print `sl` # check for correct number of spheres self.assertTrue(results.nfeatures == nroi) # and measures (one per xfold) if partitioner.cvtype == 1: self.assertTrue(len(results) == len(ds.UC)) elif partitioner.cvtype == 0.5: # here we had 4 unique chunks, so 6 combinations # even though 20 max was specified for NFold self.assertTrue(len(results) == 6) else: raise RuntimeError("Unknown yet type of partitioner to check") # check for chance-level performance across all spheres # makes sense only if number of features was big enough # to get some stable estimate of mean if not do_roi or nroi > 20: # was for binary, somewhat labile with M1NN #self.assertTrue(0.4 < results.samples.mean() < 0.6) self.assertTrue(0.68 < results.samples.mean() < 0.82) mean_errors = results.samples.mean(axis=0) # that we do get different errors ;) self.assertTrue(len(np.unique(mean_errors) > 3)) # check resonable sphere sizes self.assertTrue(len(sl.ca.roi_sizes) == nroi) self.assertTrue(len(sl.ca.roi_feature_ids) == nroi) for i, fids in enumerate(sl.ca.roi_feature_ids): self.assertTrue(len(fids) == sl.ca.roi_sizes[i]) if do_roi: # for roi we should relax conditions a bit self.assertTrue(max(sl.ca.roi_sizes) <= 7) self.assertTrue(min(sl.ca.roi_sizes) >= 4) else: self.assertTrue(max(sl.ca.roi_sizes) == 7) self.assertTrue(min(sl.ca.roi_sizes) == 4) # check base-class state self.assertEqual(sl.ca.raw_results.nfeatures, nroi) # Test if we got results correctly for 'selected' roi ids if do_roi: assert_array_equal(result_all[:, roi_ids], results) if len(all_results) > 1: # if we had multiple searchlights, we can check either they all # gave the same result (they should have) aresults = np.array([a.samples for a in all_results]) dresults = np.abs(aresults - aresults.mean(axis=0)) dmax = np.max(dresults) self.assertTrue(dmax <= 1e-13) # Test the searchlight's reuse of neighbors for indexsum in ['fancy'] + ( externals.exists('scipy') and ['sparse'] or []): sl = SL(sllrn, partitioner, indexsum='fancy', reuse_neighbors=True, **skwargs) mvpa2.seed() result1 = sl(ds) mvpa2.seed() result2 = sl(ds) # must be faster assert_array_equal(result1, result2) def test_adhocsearchlight_perm_testing(self): # just a smoke test pretty much ds = datasets['3dmedium'].copy() #ds.samples += np.random.normal(size=ds.samples.shape)*10 mvpa2.seed() ds.fa['voxel_indices'] = ds.fa.myspace from mvpa2.mappers.fx import mean_sample from mvpa2.clfs.stats import MCNullDist permutator = AttributePermutator('targets', count=8, limit='chunks') distr_est = MCNullDist(permutator, tail='left', enable_ca=['dist_samples']) slargs = (kNN(1), NFoldPartitioner(0.5, selection_strategy='random', count=9)) slkwargs = dict(radius=1, postproc=mean_sample()) sl_nodistr = sphere_m1nnsearchlight(*slargs, **slkwargs) skip_if_no_external('scipy') # needed for null_t sl = sphere_m1nnsearchlight( *slargs, null_dist=distr_est, enable_ca=['null_t'], reuse_neighbors=True, **slkwargs ) mvpa2.seed() res_nodistr = sl_nodistr(ds) mvpa2.seed() res = sl(ds) # verify that we at least got the same main result # ah (yoh) -- null dist is estimated before the main # estimate so we can't guarantee correspondence :-/ # assert_array_equal(res_nodistr, res) # only resemblance (TODO, may be we want to get/setstate # for rng before null_dist.fit?) # and dimensions correspond assert_array_equal(distr_est.ca.dist_samples.shape, (1, ds.nfeatures, 8)) assert_array_equal(sl.ca.null_t.samples.shape, (1, ds.nfeatures)) def test_partial_searchlight_with_full_report(self): ds = self.dataset.copy() center_ids = np.zeros(ds.nfeatures, dtype='bool') center_ids[[3,50]] = True ds.fa['center_ids'] = center_ids # compute N-1 cross-validation for each sphere cv = CrossValidation(GNB(), NFoldPartitioner()) # contruct diameter 1 (or just radius 0) searchlight # one time give center ids as a list, the other one takes it from the # dataset itself sls = (sphere_searchlight(cv, radius=0, center_ids=[3,50]), sphere_searchlight(None, radius=0, center_ids=[3,50]), sphere_searchlight(cv, radius=0, center_ids='center_ids'), ) for sl in sls: # assure that we could set cv post constructor if sl.datameasure is None: sl.datameasure = cv # run searchlight results = sl(ds) # only two spheres but error for all CV-folds self.assertEqual(results.shape, (len(self.dataset.UC), 2)) # Test if results hold if we "set" a "new" datameasure sl.datameasure = CrossValidation(GNB(), NFoldPartitioner()) results2 = sl(ds) assert_array_almost_equal(results, results2) # test if we graciously puke if center_ids are out of bounds dataset0 = ds[:, :50] # so we have no 50th feature self.assertRaises(IndexError, sls[0], dataset0) # but it should be fine on the one that gets the ids from the dataset # itself results = sl(dataset0) assert_equal(results.nfeatures, 1) # check whether roi_seeds are correct sl = sphere_searchlight(lambda x: np.vstack((x.fa.roi_seed, x.samples)), radius=1, add_center_fa=True, center_ids=[12]) res = sl(ds) assert_array_equal(res.samples[1:, res.samples[0].astype('bool')].squeeze(), ds.samples[:, 12]) def test_partial_searchlight_with_confusion_matrix(self): ds = self.dataset from mvpa2.clfs.stats import MCNullDist from mvpa2.mappers.fx import mean_sample, sum_sample # compute N-1 cross-validation for each sphere cm = ConfusionMatrix(labels=ds.UT) cv = CrossValidation( sample_clf_lin, NFoldPartitioner(), # we have to assure that matrix does not get flatted by # first vstack in cv and then hstack in searchlight -- # thus 2 leading dimensions # TODO: RF? make searchlight/crossval smarter? errorfx=lambda *a: cm(*a)[None, None,:]) # contruct diameter 2 (or just radius 1) searchlight sl = sphere_searchlight(cv, radius=1, center_ids=[3, 5, 50]) # our regular searchlight -- to compare results cv_gross = CrossValidation(sample_clf_lin, NFoldPartitioner()) sl_gross = sphere_searchlight(cv_gross, radius=1, center_ids=[3, 5, 50]) # run searchlights res = sl(ds) res_gross = sl_gross(ds) # only two spheres but error for all CV-folds and complete confusion matrix assert_equal(res.shape, (len(ds.UC), 3, len(ds.UT), len(ds.UT))) assert_equal(res_gross.shape, (len(ds.UC), 3)) # briefly inspect the confusion matrices mat = res.samples # since input dataset is probably balanced (otherwise adjust # to be per label): sum within columns (thus axis=-2) should # be identical to per-class/chunk number of samples samples_per_classchunk = len(ds)/(len(ds.UT)*len(ds.UC)) ok_(np.all(np.sum(mat, axis=-2) == samples_per_classchunk)) # and if we compute accuracies manually -- they should # correspond to the one from sl_gross assert_array_almost_equal(res_gross.samples, # from accuracies to errors 1-(mat[...,0,0] + mat[..., 1,1]).astype(float) / (2*samples_per_classchunk)) # and now for those who remained sited -- lets perform H0 MC # testing of this searchlight... just a silly one with minimal # number of permutations no_permutations = 10 permutator = AttributePermutator('targets', count=no_permutations) # once again -- need explicit leading dimension to avoid # vstacking during cross-validation cv.postproc=lambda x: sum_sample()(x)[None,:] sl = sphere_searchlight(cv, radius=1, center_ids=[3, 5, 50], null_dist=MCNullDist(permutator, tail='right', enable_ca=['dist_samples'])) res_perm = sl(ds) # XXX all of the res_perm, sl.ca.null_prob and # sl.null_dist.ca.dist_samples carry a degenerate leading # dimension which was probably due to introduced new axis # above within cv.postproc assert_equal(res_perm.shape, (1, 3, 2, 2)) assert_equal(sl.null_dist.ca.dist_samples.shape, res_perm.shape + (no_permutations,)) assert_equal(sl.ca.null_prob.shape, res_perm.shape) # just to make sure ;) ok_(np.all(sl.ca.null_prob.samples >= 0)) ok_(np.all(sl.ca.null_prob.samples <= 1)) # we should have got sums of hits across the splits assert_array_equal(np.sum(mat, axis=0), res_perm.samples[0]) def test_chi_square_searchlight(self): # only do partial to save time # Can't yet do this since test_searchlight isn't yet "under nose" #skip_if_no_external('scipy') if not externals.exists('scipy'): return from mvpa2.misc.stats import chisquare cv = CrossValidation(sample_clf_lin, NFoldPartitioner(), enable_ca=['stats']) def getconfusion(data): cv(data) return chisquare(cv.ca.stats.matrix)[0] sl = sphere_searchlight(getconfusion, radius=0, center_ids=[3,50]) # run searchlight results = sl(self.dataset) self.assertTrue(results.nfeatures == 2) def test_1d_multispace_searchlight(self): ds = Dataset([np.arange(6)]) ds.fa['coord1'] = np.repeat(np.arange(3), 2) # add a second space to the dataset ds.fa['coord2'] = np.tile(np.arange(2), 3) measure = lambda x: "+".join([str(x) for x in x.samples[0]]) # simply select each feature once res = Searchlight(measure, IndexQueryEngine(coord1=Sphere(0), coord2=Sphere(0)), nproc=1)(ds) assert_array_equal(res.samples, [['0', '1', '2', '3', '4', '5']]) res = Searchlight(measure, IndexQueryEngine(coord1=Sphere(0), coord2=Sphere(1)), nproc=1)(ds) assert_array_equal(res.samples, [['0+1', '0+1', '2+3', '2+3', '4+5', '4+5']]) res = Searchlight(measure, IndexQueryEngine(coord1=Sphere(1), coord2=Sphere(0)), nproc=1)(ds) assert_array_equal(res.samples, [['0+2', '1+3', '0+2+4', '1+3+5', '2+4', '3+5']]) #@sweepargs(regr=regrswh[:]) @reseed_rng() def test_regression_with_additional_sa(self): regr = regrswh[:][0] ds = datasets['3dsmall'].copy() ds.fa['voxel_indices'] = ds.fa.myspace # Create a new sample attribute which will be used along with # every searchlight ds.sa['beh'] = np.random.normal(size=(ds.nsamples,2)) # and now for fun -- lets create custom linar regression # targets out of some random feature and beh linearly combined rfeature = np.random.randint(ds.nfeatures) ds.sa.targets = np.dot( np.hstack((ds.sa.beh, ds.samples[:, rfeature:rfeature+1])), np.array([0.3, 0.2, 0.3])) class CrossValidationWithBeh(CrossValidation): """An adapter for regular CV which would hstack sa.beh to the searchlighting ds""" def _call(self, ds): return CrossValidation._call( self, Dataset(np.hstack((ds, ds.sa.beh)), sa=ds.sa)) cvbeh = CrossValidationWithBeh(regr, OddEvenPartitioner(), errorfx=corr_error) # regular cv cv = CrossValidation(regr, OddEvenPartitioner(), errorfx=corr_error) slbeh = sphere_searchlight(cvbeh, radius=1) slmapbeh = slbeh(ds) sl = sphere_searchlight(cv, radius=1) slmap = sl(ds) assert_equal(slmap.shape, (2, ds.nfeatures)) # SL which had access to beh should have got for sure better # results especially in the vicinity of the chosen feature... features = sl.queryengine.query_byid(rfeature) assert_array_lequal(slmapbeh.samples[:, features], slmap.samples[:, features]) # elsewhere they should tend to be better but not guaranteed def test_usecase_concordancesl(self): import numpy as np from mvpa2.base.dataset import vstack from mvpa2.mappers.fx import mean_sample # Take our sample 3d dataset ds1 = datasets['3dsmall'].copy(deep=True) ds1.fa['voxel_indices'] = ds1.fa.myspace ds1.sa['subject'] = [1] # not really necessary -- but let's for clarity ds1 = mean_sample()(ds1) # so we get just a single representative sample def corr12(ds): corr = np.corrcoef(ds.samples) assert(corr.shape == (2,2)) # for paranoid ones return corr[0, 1] for nsc, thr, thr_mean in ( (0, 1.0, 1.0), (0.1, 0.3, 0.8)): # just a bit of noise ds2 = ds1.copy(deep=True) # make a copy for the 2nd subject ds2.sa['subject'] = [2] ds2.samples += nsc * np.random.normal(size=ds1.shape) # make sure that both have the same voxel indices assert(np.all(ds1.fa.voxel_indices == ds2.fa.voxel_indices)) ds_both = vstack((ds1, ds2))# join 2 images into a single dataset # with .sa.subject distinguishing both sl = sphere_searchlight(corr12, radius=2) slmap = sl(ds_both) ok_(np.all(slmap.samples >= thr)) ok_(np.mean(slmap.samples) >= thr) def test_swaroop_case(self): """Test hdf5 backend to pass results on Swaroop's usecase """ from mvpa2.measures.base import Measure class sw_measure(Measure): def __init__(self): Measure.__init__(self, auto_train = True) def _call(self, dataset): # For performance measures -- increase to 50-200 # np.sum here is just to get some meaningful value in # them #return np.ones(shape=(2, 2))*np.sum(dataset) return Dataset( np.array([{'d': np.ones(shape=(5,5))*np.sum(dataset)}], dtype=object)) results = [] ds = datasets['3dsmall'].copy(deep=True) ds.fa['voxel_indices'] = ds.fa.myspace our_custom_prefix = tempfile.mktemp() for backend in ['native'] + \ (externals.exists('h5py') and ['hdf5'] or []): sl = sphere_searchlight(sw_measure(), radius=1, tmp_prefix=our_custom_prefix, results_backend=backend) t0 = time.time() results.append(np.asanyarray(sl(ds))) # print "Done for backend %s in %d sec" % (backend, time.time() - t0) # because of swaroop's ad-hoc (who only could recommend such # a construct?) use case, and absent fancy working assert_objectarray_equal # let's compare manually #assert_objectarray_equal(*results) if not externals.exists('h5py'): self.assertRaises(RuntimeError, sphere_searchlight, sw_measure(), results_backend='hdf5') raise SkipTest('h5py required for test of backend="hdf5"') assert_equal(results[0].shape, results[1].shape) results = [r.flatten() for r in results] for x, y in zip(*results): assert_equal(x.keys(), y.keys()) assert_array_equal(x['d'], y['d']) # verify that no junk is left behind tempfiles = glob.glob(our_custom_prefix + '*') assert_equal(len(tempfiles), 0) def test_nblocks(self): skip_if_no_external('pprocess') # just a basic test to see that we are getting the same # results with different nblocks ds = datasets['3dsmall'].copy(deep=True)[:, :13] ds.fa['voxel_indices'] = ds.fa.myspace cv = CrossValidation(GNB(), OddEvenPartitioner()) res1 = sphere_searchlight(cv, radius=1, nproc=2)(ds) res2 = sphere_searchlight(cv, radius=1, nproc=2, nblocks=5)(ds) assert_array_equal(res1, res2) def test_custom_results_fx_logic(self): # results_fx was introduced for the blow-up-the-memory-Swaroop # where keeping all intermediate results of the dark-magic SL # hyperalignment is not feasible. So it is desired to split # searchlight computation in more blocks while composing the # target result "on-the-fly" from available so far results. # # Implementation relies on using generators feeding the # results_fx with fresh results whenever those become # available. # # This test/example's "measure" creates files which should be # handled by the results_fx function and removed in this case # to check if we indeed have desired high number of blocks while # only limited nproc. skip_if_no_external('pprocess') tfile = tempfile.mktemp('mvpa', 'test-sl') ds = datasets['3dsmall'].copy()[:, :71] # smaller copy ds.fa['voxel_indices'] = ds.fa.myspace ds.fa['feature_id'] = np.arange(ds.nfeatures) nproc = 3 # it is not about computing -- so we will can # start more processes than possibly having CPUs just to test nblocks = nproc * 7 # figure out max number of features to be given to any proc_block # yoh: not sure why I had to +1 here... but now it became more robust and # still seems to be doing what was demanded so be it max_block = int(ceil(ds.nfeatures / float(nblocks))+1) def print_(s, *args): """For local debugging""" #print s, args pass def results_fx(sl=None, dataset=None, roi_ids=None, results=None): """It will "process" the results by removing those files generated inside the measure """ res = [] print_("READY") for x in results: ok_(isinstance(x, list)) res.append(x) print_("R: ", x) for r in x: # Can happen if we requested those .ca's enabled # -- then automagically _proc_block would wrap # results in a dataset... Originally detected by # running with MVPA_DEBUG=.* which triggered # enabling all ca's if is_datasetlike(r): r = np.asscalar(r.samples) os.unlink(r) # remove generated file print_("WAITING") return res def measure(ds): """The "measure" will check if a run with the same "index" from previous block has been processed by now """ f = '%s+%03d' % (tfile, ds.fa.feature_id[0] % (max_block*nproc)) print_("FID:%d f:%s" % (ds.fa.feature_id[0], f)) # allow for up to few seconds to wait for the file to # disappear -- i.e. its result from previous "block" was # processed t0 = time.time() while os.path.exists(f) and time.time() - t0 < 4.: time.sleep(0.5) # so it does take time to compute the measure if os.path.exists(f): print_("ERROR: ", f) raise AssertionError("File %s must have been processed by now" % f) open(f, 'w').write('XXX') # signal that we have computing this measure print_("RES: %s" % f) return f sl = sphere_searchlight(measure, radius=0, nproc=nproc, nblocks=nblocks, results_fx=results_fx, center_ids=np.arange(ds.nfeatures) ) assert_equal(len(glob.glob(tfile + '*')), 0) # so no junk around try: res = sl(ds) finally: # remove those generated left-over files for f in glob.glob(tfile +'*'): os.unlink(f) def suite(): return unittest.makeSuite(SearchlightTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_senses.py000066400000000000000000000036501202542755000202170ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Sensitivity Analyzers""" import numpy as np from mvpa2.testing import * from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.generators.partition import NFoldPartitioner from mvpa2.clfs.meta import SplitClassifier from mvpa2.clfs.smlr import SMLR @reseed_rng() def test_splitclf_sensitivities(): datasets = [normal_feature_dataset(perlabel=100, nlabels=2, nfeatures=4, nonbogus_features=[0, i+1], snr=1, nchunks=2) for i in xrange(2)] sclf = SplitClassifier(SMLR(), NFoldPartitioner()) analyzer = sclf.get_sensitivity_analyzer() senses1 = analyzer(datasets[0]) senses2 = analyzer(datasets[1]) for senses in senses1, senses2: # This should be False when comparing two folds assert_false(np.allclose(senses.samples[0], senses.samples[2])) assert_false(np.allclose(senses.samples[1], senses.samples[3])) # Moreover with new data we should have got different results # (i.e. it must retrained correctly) for s1, s2 in zip(senses1, senses2): assert_false(np.allclose(s1, s2)) # and we should have "selected" "correct" voxels for i, senses in enumerate((senses1, senses2)): assert_equal(set(np.argsort(np.max(np.abs(senses), axis=0))[-2:]), set((0, i+1))) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_smlr.py000066400000000000000000000043101202542755000176660ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA sparse multinomial logistic regression classifier""" import numpy as np from mvpa2.testing import * from mvpa2.testing.datasets import datasets from mvpa2.clfs.smlr import SMLR from mvpa2.misc.data_generators import normal_feature_dataset class SMLRTests(unittest.TestCase): def test_smlr(self): data = datasets['dumb'] clf = SMLR() clf.train(data) # prediction has to be perfect # # XXX yoh: whos said that?? ;-) # # There is always a tradeoff between learning and # generalization errors so... but in this case the problem is # more interesting: absent bias disallows to learn data you # have here -- there is no solution which would pass through # (0,0) predictions = clf.predict(data.samples) self.assertTrue((predictions == data.targets).all()) def test_smlr_state(self): data = datasets['dumb'] clf = SMLR() clf.train(data) clf.ca.enable('estimates') clf.ca.enable('predictions') p = np.asarray(clf.predict(data.samples)) self.assertTrue((p == clf.ca.predictions).all()) self.assertTrue(np.array(clf.ca.estimates).shape[0] == np.array(p).shape[0]) def test_smlr_sensitivities(self): data = normal_feature_dataset(perlabel=10, nlabels=2, nfeatures=4) # use SMLR on binary problem, but not fitting all weights clf = SMLR(fit_all_weights=False) clf.train(data) # now ask for the sensitivities WITHOUT having to pass the dataset # again sens = clf.get_sensitivity_analyzer(force_train=False)(None) self.assertTrue(sens.shape == (len(data.UT) - 1, data.nfeatures)) def suite(): return unittest.makeSuite(SMLRTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_som.py000066400000000000000000000030441202542755000175120ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA SOM mapper""" import unittest import numpy as np from mvpa2 import cfg from mvpa2.mappers.som import SimpleSOMMapper from mvpa2.datasets.base import dataset_wizard class SOMMapperTests(unittest.TestCase): def test_simple_som(self): colors = np.array([[0., 0., 0.], [0., 0., 1.], [0., 1., 0.], [1., 0., 0.], [0., 1., 1.], [1., 0., 1.], [1., 1., 0.], [1., 1., 1.]]) # only small SOM for speed reasons som = SimpleSOMMapper((10, 5), 200, learning_rate=0.05) # no acces when nothing is there self.assertRaises(RuntimeError, som._access_kohonen) som.train(colors) fmapped = som.forward(colors) self.assertTrue(fmapped.shape == (8, 2)) # reverse mapping rmapped = som.reverse(fmapped) if cfg.getboolean('tests', 'labile', default='yes'): # should approximately restore the input, but could fail # with bad initialisation self.assertTrue((np.round(rmapped) == colors).all()) def suite(): return unittest.makeSuite(SOMMapperTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_spam.py000066400000000000000000000015421202542755000176550ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA SpAM.""" from mvpa2.misc import data_generators from mvpa2.testing import * from mvpa2.testing.datasets import datasets def test_basic(): """Disabled the test since we have no SpAM yet """ raise SkipTest, "skipped SPaM since no SPaM" from mvpa2.clfs.spam import SpAM dataset = datasets['sin_modulated'] clf = SpAM() clf.train(dataset) y = clf.predict(dataset.samples) assert_array_equal(y.shape, dataset.targets.shape) pymvpa2-2.2.0/mvpa2/tests/test_splitter.py000066400000000000000000000426251202542755000205720ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA pattern handling""" import unittest import numpy as np from mvpa2.testing.datasets import datasets from mvpa2.base.node import ChainNode from mvpa2.datasets.base import dataset_wizard, Dataset from mvpa2.generators.partition import NFoldPartitioner from mvpa2.mappers.slicing import StripBoundariesSamples from mvpa2.generators.splitters import Splitter from mvpa2.generators.partition import * from mvpa2.testing.tools import ok_, assert_array_equal, assert_true, \ assert_false, assert_equal, assert_not_equal, reseed_rng class SplitterTests(unittest.TestCase): @reseed_rng() def setUp(self): self.data = dataset_wizard(np.random.normal(size=(100,10)), targets=[ i%4 for i in range(100) ], chunks=[ i//10 for i in range(100)]) def test_splitattr_deprecation(self): # Just a smoke test -- remove for 2.1 release nfs = NFoldPartitioner() _ = nfs.splitattr def test_reprs(self): # very very basic test to see that there is no errors in reprs # of partitioners import mvpa2.generators.partition as mgp for sclass in (x for x in dir(mgp) if x.endswith('Partitioner')): args = (1,) if sclass == 'ExcludeTargetsCombinationsPartitioner': args += (1,1) pclass = getattr(mgp, sclass) r = repr(pclass(*args)) assert_false('ERROR' in r) def test_simplest_cv_pat_gen(self): # create the generator nfs = NFoldPartitioner(cvtype=1) spl = Splitter(attr='partitions') # now get the xval pattern sets One-Fold CV) xvpat = [ list(spl.generate(p)) for p in nfs.generate(self.data) ] self.assertTrue( len(xvpat) == 10 ) for i,p in enumerate(xvpat): self.assertTrue( len(p) == 2 ) self.assertTrue( p[0].nsamples == 90 ) self.assertTrue( p[1].nsamples == 10 ) self.assertTrue( p[1].chunks[0] == i ) def test_odd_even_split(self): oes = OddEvenPartitioner() spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in oes.generate(self.data) ] self.assertTrue(len(splits) == 2) for i,p in enumerate(splits): self.assertTrue( len(p) == 2 ) self.assertTrue( p[0].nsamples == 50 ) self.assertTrue( p[1].nsamples == 50 ) assert_array_equal(splits[0][1].sa['chunks'].unique, [1, 3, 5, 7, 9]) assert_array_equal(splits[0][0].sa['chunks'].unique, [0, 2, 4, 6, 8]) assert_array_equal(splits[1][0].sa['chunks'].unique, [1, 3, 5, 7, 9]) assert_array_equal(splits[1][1].sa['chunks'].unique, [0, 2, 4, 6, 8]) # check if it works on pure odd and even chunk ids moresplits = [ list(spl.generate(p)) for p in oes.generate(splits[0][0])] for split in moresplits: self.assertTrue(split[0] != None) self.assertTrue(split[1] != None) def test_half_split(self): hs = HalfPartitioner() spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in hs.generate(self.data) ] self.assertTrue(len(splits) == 2) for i,p in enumerate(splits): self.assertTrue( len(p) == 2 ) self.assertTrue( p[0].nsamples == 50 ) self.assertTrue( p[1].nsamples == 50 ) assert_array_equal(splits[0][1].sa['chunks'].unique, [0, 1, 2, 3, 4]) assert_array_equal(splits[0][0].sa['chunks'].unique, [5, 6, 7, 8, 9]) assert_array_equal(splits[1][1].sa['chunks'].unique, [5, 6, 7, 8, 9]) assert_array_equal(splits[1][0].sa['chunks'].unique, [0, 1, 2, 3, 4]) # check if it works on pure odd and even chunk ids moresplits = [ list(spl.generate(p)) for p in hs.generate(splits[0][0])] for split in moresplits: self.assertTrue(split[0] != None) self.assertTrue(split[1] != None) def test_n_group_split(self): """Test NGroupSplitter alongside with the reversal of the order of spit out datasets """ # Test 2 groups like HalfSplitter first hs = NGroupPartitioner(2) for isreversed, splitter in enumerate((hs, hs)): if isreversed: spl = Splitter(attr='partitions', reverse=True) else: spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in hs.generate(self.data) ] self.assertTrue(len(splits) == 2) for i, p in enumerate(splits): self.assertTrue( len(p) == 2 ) self.assertTrue( p[0].nsamples == 50 ) self.assertTrue( p[1].nsamples == 50 ) assert_array_equal(splits[0][1-isreversed].sa['chunks'].unique, [0, 1, 2, 3, 4]) assert_array_equal(splits[0][isreversed].sa['chunks'].unique, [5, 6, 7, 8, 9]) assert_array_equal(splits[1][1-isreversed].sa['chunks'].unique, [5, 6, 7, 8, 9]) assert_array_equal(splits[1][isreversed].sa['chunks'].unique, [0, 1, 2, 3, 4]) # check if it works on pure odd and even chunk ids moresplits = [ list(spl.generate(p)) for p in hs.generate(splits[0][0])] for split in moresplits: self.assertTrue(split[0] != None) self.assertTrue(split[1] != None) # now test more groups s5 = NGroupPartitioner(5) # get the splits for isreversed, s5splitter in enumerate((s5, s5)): if isreversed: spl = Splitter(attr='partitions', reverse=True) else: spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in s5splitter.generate(self.data) ] # must have 10 splits self.assertTrue(len(splits) == 5) # check split content assert_array_equal(splits[0][1-isreversed].sa['chunks'].unique, [0, 1]) assert_array_equal(splits[0][isreversed].sa['chunks'].unique, [2, 3, 4, 5, 6, 7, 8, 9]) assert_array_equal(splits[1][1-isreversed].sa['chunks'].unique, [2, 3]) assert_array_equal(splits[1][isreversed].sa['chunks'].unique, [0, 1, 4, 5, 6, 7, 8, 9]) # ... assert_array_equal(splits[4][1-isreversed].sa['chunks'].unique, [8, 9]) assert_array_equal(splits[4][isreversed].sa['chunks'].unique, [0, 1, 2, 3, 4, 5, 6, 7]) # Test for too many groups def splitcall(spl, dat): return list(spl.generate(dat)) s20 = NGroupPartitioner(20) self.assertRaises(ValueError,splitcall,s20,self.data) @reseed_rng() def test_nfold_random_counted_selection_partitioner(self): return # Lets get somewhat extensive but complete one and see if # everything is legit. 0.5 must correspond to 50%, in our case # 5 out of 10 unique chunks split_partitions = [ tuple(x.sa.partitions) for x in NFoldPartitioner(0.5).generate(self.data)] # 252 is # of combinations of 5 from 10 assert_equal(len(split_partitions), 252) # verify that all of them are unique assert_equal(len(set(split_partitions)), 252) # now let's limit our query kwargs = dict(count=10, selection_strategy='random') split10_partitions = [ tuple(x.sa.partitions) for x in NFoldPartitioner(5, **kwargs).generate(self.data)] split10_partitions_ = [ tuple(x.sa.partitions) for x in NFoldPartitioner(0.5, **kwargs).generate(self.data)] # to make sure that I deal with sets of tuples correctly: assert_equal(len(set(split10_partitions)), 10) assert_equal(len(split10_partitions), 10) assert_equal(len(split10_partitions_), 10) # and they must differ (same ones are possible but very very unlikely) assert_not_equal(split10_partitions, split10_partitions_) # but every one of them must be within known exhaustive set assert_equal(set(split_partitions).intersection(split10_partitions), set(split10_partitions)) assert_equal(set(split_partitions).intersection(split10_partitions_), set(split10_partitions_)) @reseed_rng() def test_nfold_random_counted_selection_partitioner_huge(self): # Just test that it completes in a reasonable time and does # not blow up as if would do if it was not limited by count kwargs = dict(count=10) ds = dataset_wizard(np.arange(1000).reshape((-1, 1)), targets=range(1000), chunks=range(500)*2) split_partitions_random = [ tuple(x.sa.partitions) for x in NFoldPartitioner(100, selection_strategy='random', **kwargs).generate(ds)] assert_equal(len(split_partitions_random), 10) # we get just 10 def test_custom_split(self): #simulate half splitter hs = CustomPartitioner([(None,[0,1,2,3,4]),(None,[5,6,7,8,9])]) spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in hs.generate(self.data) ] self.assertTrue(len(splits) == 2) for i,p in enumerate(splits): self.assertTrue( len(p) == 2 ) self.assertTrue( p[0].nsamples == 50 ) self.assertTrue( p[1].nsamples == 50 ) assert_array_equal(splits[0][1].sa['chunks'].unique, [0, 1, 2, 3, 4]) assert_array_equal(splits[0][0].sa['chunks'].unique, [5, 6, 7, 8, 9]) assert_array_equal(splits[1][1].sa['chunks'].unique, [5, 6, 7, 8, 9]) assert_array_equal(splits[1][0].sa['chunks'].unique, [0, 1, 2, 3, 4]) # check fully customized split with working and validation set specified cs = CustomPartitioner([([0,3,4],[5,9])]) # we want to discared the unselected partition of the data, hence attr_value # these two splitters should do exactly the same thing splitters = (Splitter(attr='partitions', attr_values=[1,2]), Splitter(attr='partitions', ignore_values=(0,))) for spl in splitters: splits = [ list(spl.generate(p)) for p in cs.generate(self.data) ] self.assertTrue(len(splits) == 1) for i,p in enumerate(splits): self.assertTrue( len(p) == 2 ) self.assertTrue( p[0].nsamples == 30 ) self.assertTrue( p[1].nsamples == 20 ) self.assertTrue((splits[0][1].sa['chunks'].unique == [5, 9]).all()) self.assertTrue((splits[0][0].sa['chunks'].unique == [0, 3, 4]).all()) def test_label_splitter(self): oes = OddEvenPartitioner(attr='targets') spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in oes.generate(self.data) ] assert_array_equal(splits[0][0].sa['targets'].unique, [0,2]) assert_array_equal(splits[0][1].sa['targets'].unique, [1,3]) assert_array_equal(splits[1][0].sa['targets'].unique, [1,3]) assert_array_equal(splits[1][1].sa['targets'].unique, [0,2]) def test_counted_splitting(self): spl = Splitter(attr='partitions') # count > #chunks, should result in 10 splits nchunks = len(self.data.sa['chunks'].unique) for strategy in Partitioner._STRATEGIES: for count, target in [ (nchunks*2, nchunks), (nchunks, nchunks), (nchunks-1, nchunks-1), (3, 3), (0, 0), (1, 1) ]: nfs = NFoldPartitioner(cvtype=1, count=count, selection_strategy=strategy) splits = [ list(spl.generate(p)) for p in nfs.generate(self.data) ] self.assertTrue(len(splits) == target) chosenchunks = [int(s[1].uniquechunks) for s in splits] # Test if configuration matches as well nsplits_cfg = len(nfs.get_partition_specs(self.data)) self.assertEqual(nsplits_cfg, target) # Check if "lastsplit" dsattr was assigned appropriately nsplits = len(splits) if nsplits > 0: # dummy-proof testing of last split for ds_ in splits[-1]: self.assertTrue(ds_.a.lastpartitionset) # test all now for isplit,split in enumerate(splits): for ds_ in split: ds_.a.lastpartitionset == isplit==nsplits-1 # Check results of different strategies if strategy == 'first': self.assertEqual(chosenchunks, range(target)) elif strategy == 'equidistant': if target == 3: self.assertEqual(chosenchunks, [0, 3, 7]) elif strategy == 'random': # none is selected twice self.assertTrue(len(set(chosenchunks)) == len(chosenchunks)) self.assertTrue(target == len(chosenchunks)) else: raise RuntimeError, "Add unittest for strategy %s" \ % strategy def test_discarded_boundaries(self): ds = datasets['hollow'] # four runs ds.sa['chunks'] = np.repeat(np.arange(4), 10) # do odd even splitting for lots of boundaries in few splits part = ChainNode([OddEvenPartitioner(), StripBoundariesSamples('chunks', 1, 2)]) parts = [d.samples.sid for d in part.generate(ds)] # both dataset should have the same samples, because the boundaries are # identical and the same sample should be stripped assert_array_equal(parts[0], parts[1]) # we strip 3 samples per boundary assert_equal(len(parts[0]), len(ds) - (3 * 3)) for i in [9, 10, 11, 19, 20, 21, 29, 30, 31]: assert_false(i in parts[0]) def test_slicing(self): hs = HalfPartitioner() spl = Splitter(attr='partitions') splits = list(hs.generate(self.data)) for s in splits: # partitioned dataset shared the data assert_true(s.samples.base is self.data.samples) splits = [ list(spl.generate(p)) for p in hs.generate(self.data) ] # with numpy 1.7.0b1 "chaining" was deprecated so let's create # check function appropriate for the given numpy version _a = np.arange(5) __a = _a[:4][:3] if __a.base is _a: # 1.7.0b1 def is_the_same_base(x, base=self.data.samples): return x.base is base elif __a.base.base is _a: # prior 1.7.0b1 def is_the_same_base(x, base=self.data.samples): return x.base.base is base else: raise RuntimeError("Uknown handling of .base by numpy") for s in splits: # we get slicing all the time assert_true(is_the_same_base(s[0].samples)) assert_true(is_the_same_base(s[1].samples)) spl = Splitter(attr='partitions', noslicing=True) splits = [ list(spl.generate(p)) for p in hs.generate(self.data) ] for s in splits: # we no slicing at all assert_false(s[0].samples.base is self.data.samples) assert_false(s[1].samples.base is self.data.samples) nfs = NFoldPartitioner() spl = Splitter(attr='partitions') splits = [ list(spl.generate(p)) for p in nfs.generate(self.data) ] for i, s in enumerate(splits): # training only first and last split if i == 0 or i == len(splits) - 1: assert_true(is_the_same_base(s[0].samples)) else: assert_true(s[0].samples.base is None) # we get slicing all the time assert_true(s[1].samples.base.base is self.data.samples) step_ds = Dataset(np.random.randn(20,2), sa={'chunks': np.tile([0,1], 10)}) oes = OddEvenPartitioner() spl = Splitter(attr='partitions') splits = list(oes.generate(step_ds)) for s in splits: # partitioned dataset shared the data assert_true(s.samples.base is step_ds.samples) splits = [ list(spl.generate(p)) for p in oes.generate(step_ds) ] assert_equal(len(splits), 2) for s in splits: # we get slicing all the time assert_true(s[0].samples.base.base is step_ds.samples) assert_true(s[1].samples.base.base is step_ds.samples) def suite(): return unittest.makeSuite(SplitterTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_state.py000066400000000000000000000301071202542755000200340ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA State parent class""" import unittest import mvpa2.support.copy as copy import numpy as np from mvpa2.base import externals from mvpa2.base.state import ConditionalAttribute, ClassWithCollections, \ ParameterCollection, _def_sep from mvpa2.base.param import * from mvpa2.misc.exceptions import UnknownStateError if __debug__: from mvpa2.base import debug class TestClassEmpty(ClassWithCollections): pass class TestClassBlank(ClassWithCollections): # We can force to have 'ca' present even though we don't have # any ConditionalAttribute defined here -- it might be added later on at run time _ATTRIBUTE_COLLECTIONS = ['ca'] pass class TestClassBlankNoExplicitStates(ClassWithCollections): pass class TestClassProper(ClassWithCollections): state1 = ConditionalAttribute(enabled=False, doc="state1 doc") state2 = ConditionalAttribute(enabled=True, doc="state2 doc") class TestClassProperChild(TestClassProper): state4 = ConditionalAttribute(enabled=False, doc="state4 doc") class TestClassReadOnlyParameter(ClassWithCollections): paramro = Parameter(0, doc="state4 doc", ro=True) class TestClassParametrized(TestClassProper, ClassWithCollections): p1 = Parameter(0) state0 = ConditionalAttribute(enabled=False) def __init__(self, **kwargs): # XXX make such example when we actually need to invoke # constructor # TestClassProper.__init__(self, **kwargs) ClassWithCollections.__init__(self, **kwargs) class StateTests(unittest.TestCase): def test_blank_state(self): empty = TestClassEmpty() blank = TestClassBlank() blank2 = TestClassBlank() self.assertRaises(AttributeError, empty.__getattribute__, 'ca') self.assertEqual(list(blank.ca.items()), []) self.assertEqual(len(blank.ca), 0) self.assertTrue(blank.ca.enabled == []) self.assertRaises(AttributeError, blank.__getattribute__, 'dummy') self.assertRaises(AttributeError, blank.__getattribute__, '_') # we shouldn't use _registerState now since metaclass statecollector wouldn't # update the ca... may be will be implemented in the future if necessity comes return # add some conditional attribute blank._registerState('state1', False) self.assertTrue(blank.ca == ['state1']) self.assertTrue(blank.ca.is_enabled('state1') == False) self.assertTrue(blank.ca.enabled == []) self.assertRaises(UnknownStateError, blank.__getattribute__, 'state1') # assign value now blank.state1 = 123 # should have no effect since the conditional attribute wasn't enabled self.assertRaises(UnknownStateError, blank.__getattribute__, 'state1') # lets enable and assign blank.ca.enable('state1') blank.state1 = 123 self.assertTrue(blank.state1 == 123) # we should not share ca across instances at the moment, so an arbitrary # object could carry some custom ca self.assertTrue(blank2.ca == []) self.assertRaises(AttributeError, blank2.__getattribute__, 'state1') def test_proper_state(self): proper = TestClassProper() proper2 = TestClassProper(enable_ca=['state1'], disable_ca=['state2']) # disable_ca should override anything in enable_ca proper3 = TestClassProper(enable_ca=['all'], disable_ca='all') self.assertEqual(len(proper3.ca.enabled), 0, msg="disable_ca should override anything in enable_ca") proper.ca.state2 = 1000 value = proper.ca.state2 self.assertEqual(proper.ca.state2, 1000, msg="Simple assignment/retrieval") proper.ca.disable('state2') proper.ca.state2 = 10000 self.assertEqual(proper.ca.state2, 1000, msg="Simple assignment after being disabled") proper4 = copy.deepcopy(proper) proper.ca.reset('state2') self.assertRaises(UnknownStateError, proper.ca.__getattribute__, 'state2') """Must be blank after being reset""" self.assertEqual(proper4.ca.state2, 1000, msg="Simple assignment after being reset in original instance") proper.ca.enable(['state2']) self.assertEqual(set(proper.ca.keys()), set(['state1', 'state2'])) if __debug__ and 'ENFORCE_CA_ENABLED' in debug.active: # skip testing since all ca are on now return self.assertTrue(proper.ca.enabled == ['state2']) self.assertTrue(set(proper2.ca.enabled) == set(['state1'])) self.assertRaises(AttributeError, proper.__getattribute__, 'state12') # if documentary on the state is appropriate self.assertEqual(proper2.ca.listing, ['%sstate1+%s: state1 doc' % (_def_sep, _def_sep), '%sstate2%s: state2 doc' % (_def_sep, _def_sep)]) # if __str__ lists correct number of ca str_ = str(proper2) self.assertTrue(str_.find('2 ca:') != -1) # check if disable works self.assertTrue(set(proper2.ca.enabled), set(['state1'])) proper2.ca.disable("all") self.assertEqual(set(proper2.ca.enabled), set()) proper2.ca.enable("all") self.assertEqual(len(proper2.ca.enabled), 2) proper2.ca.state1, proper2.ca.state2 = 1,2 self.assertEqual(proper2.ca.state1, 1) self.assertEqual(proper2.ca.state2, 2) # now reset them proper2.ca.reset('all') self.assertRaises(UnknownStateError, proper2.ca.__getattribute__, 'state1') self.assertRaises(UnknownStateError, proper2.ca.__getattribute__, 'state2') def test_get_save_enabled(self): """Check if we can store/restore set of enabled ca""" if __debug__ and 'ENFORCE_CA_ENABLED' in debug.active: # skip testing since all ca are on now return proper = TestClassProper() enabled_ca = proper.ca.enabled proper.ca.enable('state1') self.assertTrue(enabled_ca != proper.ca.enabled, msg="New enabled ca should differ from previous") self.assertTrue(set(proper.ca.enabled) == set(['state1', 'state2']), msg="Making sure that we enabled all ca of interest") proper.ca.enabled = enabled_ca self.assertTrue(enabled_ca == proper.ca.enabled, msg="List of enabled ca should return to original one") # TODO: make test for _copy_ca_ or whatever comes as an alternative def test_stored_temporarily(self): proper = TestClassProper() properch = TestClassProperChild(enable_ca=["state1"]) if __debug__ and 'ENFORCE_CA_ENABLED' in debug.active: # skip testing since all ca are on now return self.assertEqual(proper.ca.enabled, ["state2"]) proper.ca.change_temporarily( enable_ca=["state1"], other=properch) self.assertEqual(set(proper.ca.enabled), set(["state1", "state2"])) proper.ca.reset_changed_temporarily() self.assertEqual(proper.ca.enabled, ["state2"]) # allow to enable disable without other instance proper.ca.change_temporarily( enable_ca=["state1", "state2"]) self.assertEqual(set(proper.ca.enabled), set(["state1", "state2"])) proper.ca.reset_changed_temporarily() self.assertEqual(proper.ca.enabled, ["state2"]) def test_proper_state_child(self): """ Simple test if child gets conditional attributes from the parent as well """ proper = TestClassProperChild() self.assertEqual(set(proper.ca.keys()), set(['state1', 'state2', 'state4'])) def test_state_variables(self): """To test new ca""" class S1(ClassWithCollections): v1 = ConditionalAttribute(enabled=True, doc="values1 is ...") v1XXX = ConditionalAttribute(enabled=False, doc="values1 is ...") class S2(ClassWithCollections): v2 = ConditionalAttribute(enabled=True, doc="values12 is ...") class S1_(S1): pass class S1__(S1_): v1__ = ConditionalAttribute(enabled=False) class S12(S1__, S2): v12 = ConditionalAttribute() s1, s2, s1_, s1__, s12 = S1(), S2(), S1_(), S1__(), S12() self.assertEqual(s1.ca.is_enabled("v1"), True) s1.ca.v1 = 12 s12.ca.v1 = 120 s2.ca.v2 = 100 self.assertEqual(len(s2.ca.listing), 1) self.assertEqual(s1.ca.v1, 12) try: tempvalue = s1__.ca.v1__ self.fail("Should have puked since values were not enabled yet") except: pass def test_parametrized(self): self.assertRaises(TypeError, TestClassParametrized, p2=34, enable_ca=['state1'], msg="Should raise an exception if argument doesn't correspond to" "any parameter") a = TestClassParametrized(p1=123, enable_ca=['state1']) self.assertEqual(a.params.p1, 123, msg="We must have assigned value to instance") self.assertTrue('state1' in a.ca.enabled, msg="state1 must have been enabled") if (__debug__ and 'ID_IN_REPR' in debug.active): # next tests would fail due to ID in the tails return # validate that string representation of the object is valid and consistent a_str = repr(a) try: import mvpa2.tests.test_state as test_state exec("a2=%s" % a_str) except Exception as e: self.fail(msg="Failed to generate an instance out of " "representation %s. Got exception: %s" % (a_str, e)) # For specifics of difference in exec keyword from exec() function in # python3 see # http://stackoverflow.com/questions/6561482/why-did-python-3-changes-to-exec-break-this-code # which mandates us to use exec here around repr so it gets access to # above a2 placed into locals() exec('a2_str_=repr(a2)') a2_str = locals()['a2_str_'] # crazy ha? it must not be a2_str either self.assertTrue(a2_str == a_str, msg="Generated object must have the same repr. Got %s and %s" % (a_str, a2_str)) # Test at least that repr of collection is of correct syntax aparams_str = repr(a.params) try: import mvpa2.tests.test_state as test_state exec("aparams2=%s" % aparams_str) except Exception as e: self.fail(msg="Failed to generate an instance out of " "representation %s of params. Got exception: %s" % (aparams_str, e)) def test_read_only(self): # Should be able to assign in constructor cro = TestClassReadOnlyParameter(paramro=12) # but not run time self.assertRaises(RuntimeError, cro.params['paramro']._set, 13) # Test if value wasn't actually changed self.assertEqual(cro.params.paramro, 12) def test_value_in_constructor(self): param = Parameter(0, value=True) self.assertTrue(param.value) def test_deep_copying_state_variable(self): for v in (True, False): sv = ConditionalAttribute(enabled=v, doc="Testing") sv.enabled = not v sv_dc = copy.deepcopy(sv) if not (__debug__ and 'ENFORCE_CA_ENABLED' in debug.active): self.assertEqual(sv.enabled, sv_dc.enabled) self.assertEqual(sv.name, sv_dc.name) self.assertEqual(sv._instance_index, sv_dc._instance_index) def suite(): return unittest.makeSuite(StateTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_stats.py000066400000000000000000000120061202542755000200500ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA stats helpers""" from mvpa2.testing import * from mvpa2.testing.datasets import datasets from mvpa2 import cfg from mvpa2.base import externals from mvpa2.clfs.stats import MCNullDist, FixedNullDist, NullDist from mvpa2.generators.permutation import AttributePermutator from mvpa2.datasets import Dataset from mvpa2.measures.anova import OneWayAnova, CompoundOneWayAnova from mvpa2.misc.fx import double_gamma_hrf, single_gamma_hrf # Prepare few distributions to test #kwargs = {'permutations':10, 'tail':'any'} permutator = AttributePermutator('targets', count=30) nulldist_sweep = [ MCNullDist(permutator, tail='any'), MCNullDist(permutator, tail='right')] if externals.exists('scipy'): from mvpa2.support.stats import scipy from scipy.stats import f_oneway from mvpa2.clfs.stats import rv_semifrozen nulldist_sweep += [ MCNullDist(permutator, scipy.stats.norm, tail='any'), MCNullDist(permutator, scipy.stats.norm, tail='right'), MCNullDist(permutator, rv_semifrozen(scipy.stats.norm, loc=0), tail='right'), MCNullDist(permutator, scipy.stats.expon, tail='right'), FixedNullDist(scipy.stats.norm(0, 10.0), tail='any'), FixedNullDist(scipy.stats.norm(0, 10.0), tail='right'), scipy.stats.norm(0, 0.1) ] class StatsTests(unittest.TestCase): """Unittests for various statistics""" @sweepargs(null=nulldist_sweep[1:]) def test_null_dist_prob(self, null): """Testing null dist probability""" if not isinstance(null, NullDist): return ds = datasets['uni2small'] null.fit(OneWayAnova(), ds) # check reasonable output. # p-values for non-bogus features should significantly different, # while bogus (0) not prob = null.p([20, 0, 0, 0, 0, np.nan]) # XXX this is labile! it also needs checking since the F-scores # of the MCNullDists using normal distribution are apparently not # distributed that way, hence the test often (if not always) fails. if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(np.abs(prob[0]) < 0.05, msg="Expected small p, got %g" % prob[0]) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue((np.abs(prob[1:]) > 0.05).all(), msg="Bogus features should have insignificant p." " Got %s" % (np.abs(prob[1:]),)) # has to have matching shape if not isinstance(null, FixedNullDist): # Fixed dist is univariate ATM so it doesn't care # about dimensionality and gives 1 output value self.assertRaises(ValueError, null.p, [5, 3, 4]) def test_anova(self): """Do some extended testing of OneWayAnova in particular -- compound estimation """ m = OneWayAnova() # default must be not compound ? mc = CompoundOneWayAnova() ds = datasets['uni2medium'] # For 2 labels it must be identical for both and equal to # simple OneWayAnova a, ac = m(ds), mc(ds) self.assertTrue(a.shape == (1, ds.nfeatures)) self.assertTrue(ac.shape == (len(ds.UT), ds.nfeatures)) assert_array_equal(ac[0], ac[1]) assert_array_equal(a, ac[1]) # check for p-value attrs if externals.exists('scipy'): assert_true('fprob' in a.fa.keys()) assert_equal(len(ac.fa), len(ac)) ds = datasets['uni4large'] ac = mc(ds) if cfg.getboolean('tests', 'labile', default='yes'): # All non-bogus features must be high for a corresponding feature self.assertTrue((ac.samples[np.arange(4), np.array(ds.a.nonbogus_features)] >= 1 ).all()) # All features should have slightly but different CompoundAnova # values. I really doubt that there will be a case when this # test would fail just to being 'labile' self.assertTrue(np.max(np.std(ac, axis=1))>0, msg='In compound anova, we should get different' ' results for different labels. Got %s' % ac) def suite(): """Create the suite""" return unittest.makeSuite(StatsTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_stats_sp.py000066400000000000000000000413641202542755000205630ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA stats helpers -- those requiring scipy""" from mvpa2.testing import * skip_if_no_external('scipy') from mvpa2.testing.datasets import datasets from mvpa2.tests.test_stats import * from scipy import signal from mvpa2.clfs.stats import match_distribution, rv_semifrozen from mvpa2.misc.stats import chisquare from mvpa2.misc.attrmap import AttributeMap from mvpa2.datasets.base import dataset_wizard from mvpa2.generators.permutation import AttributePermutator class StatsTestsScipy(unittest.TestCase): """Unittests for various statistics which use scipy""" @sweepargs(exp=('uniform', 'indep_rows', 'indep_cols')) def test_chi_square(self, exp): """Test chi-square distribution""" # test equal distribution tbl = np.array([[5, 5], [5, 5]]) chi, p = chisquare(tbl, exp=exp) self.assertTrue( chi == 0.0 ) self.assertTrue( p == 1.0 ) # test perfect "generalization" tbl = np.array([[4, 0], [0, 4]]) chi, p = chisquare(tbl, exp=exp) self.assertTrue(chi == 8.0) self.assertTrue(p < 0.05) def test_chi_square_disbalanced(self): # test perfect "generalization" tbl = np.array([[1, 100], [1, 100]]) chi, p = chisquare(tbl, exp='indep_rows') self.assertTrue(chi == 0) self.assertTrue(p == 1) chi, p = chisquare(tbl, exp='uniform') self.assertTrue(chi > 194) self.assertTrue(p < 1e-10) # by default lets do uniform chi_, p_ = chisquare(tbl) self.assertTrue(chi == chi_) self.assertTrue(p == p_) def test_null_dist_prob_any(self): """Test 'any' tail statistics estimation""" skip_if_no_external('scipy') # test 'any' mode from mvpa2.measures.corrcoef import CorrCoef # we will reassign targets later on, so let's operate on a # copy ds = datasets['uni2medium'].copy() permutator = AttributePermutator('targets', count=20) null = MCNullDist(permutator, tail='any') assert_raises(ValueError, null.fit, CorrCoef(), ds) # cheat and map to numeric for this test ds.sa.targets = AttributeMap().to_numeric(ds.targets) null.fit(CorrCoef(), ds) # 100 and -100 should both have zero probability on their respective # tails pm100 = null.p([-100] + [0]*(ds.nfeatures-1)) p100 = null.p([100] + [0]*(ds.nfeatures-1)) assert_array_almost_equal(pm100, p100) # With 20 samples it isn't that easy to get a reliable sampling for # non-parametric, so we can allow somewhat low significance self.assertTrue(pm100[0] <= 0.1) self.assertTrue(p100[0] <= 0.1) self.assertTrue(np.all(pm100[1:] > 0.05)) self.assertTrue(np.all(p100[1:] > 0.05)) # same test with just scalar measure/feature null.fit(CorrCoef(), ds[:, 0]) p_100 = null.p(100) self.failUnlessAlmostEqual(null.p(-100), p_100) self.failUnlessAlmostEqual(p100[0], p_100) @sweepargs(nd=nulldist_sweep) def test_dataset_measure_prob(self, nd): """Test estimation of measures statistics""" skip_if_no_external('scipy') ds = datasets['uni2medium'] m = OneWayAnova(null_dist=nd, enable_ca=['null_t']) score = m(ds) score_nonbogus = np.mean(score.samples[:, ds.a.nonbogus_features]) score_bogus = np.mean(score.samples[:, ds.a.bogus_features]) # plausability check self.assertTrue(score_bogus < score_nonbogus) # [0] because the first axis is len == 0 null_prob_nonbogus = m.ca.null_prob[0, ds.a.nonbogus_features] null_prob_bogus = m.ca.null_prob[0, ds.a.bogus_features] self.assertTrue((null_prob_nonbogus.samples < 0.05).all(), msg="Nonbogus features should have a very unlikely value. Got %s" % null_prob_nonbogus) # the others should be a lot larger self.assertTrue(np.mean(np.abs(null_prob_bogus)) > np.mean(np.abs(null_prob_nonbogus))) if isinstance(nd, MCNullDist): # MCs are not stable with just 10 samples... so lets skip them return if cfg.getboolean('tests', 'labile', default='yes'): # Failed on c94ec26eb593687f25d8c27e5cfdc5917e352a69 # with MVPA_SEED=833393575 self.assertTrue( (np.abs(m.ca.null_t[0, ds.a.nonbogus_features]) >= 5).all(), msg="Nonbogus features should have high t-score. Got %s" % (m.ca.null_t[0, ds.a.nonbogus_features])) bogus_min = min(np.abs(m.ca.null_t.samples[0][ds.a.bogus_features])) self.assertTrue(bogus_min < 4, msg="Some bogus features should have low t-score of %g." "Got (t,p,sens):%s" % (bogus_min, zip(m.ca.null_t[0, ds.a.bogus_features], m.ca.null_prob[0, ds.a.bogus_features], score.samples[0][ds.a.bogus_features]))) @reseed_rng() def test_negative_t(self): """Basic testing of the sign in p and t scores """ from mvpa2.measures.base import FeaturewiseMeasure class BogusMeasure(FeaturewiseMeasure): """Just put high positive into first 2 features, and high negative into 2nd two """ is_trained = True def _call(self, dataset): """just a little helper... pylint shut up!""" res = np.random.normal(size=(dataset.nfeatures,)) res[0] = res[1] = 100 res[2] = res[3] = -100 return Dataset([res]) nd = FixedNullDist(scipy.stats.norm(0, 0.1), tail='any') m = BogusMeasure(null_dist=nd, enable_ca=['null_t']) ds = datasets['uni2small'] _ = m(ds) t, p = m.ca.null_t, m.ca.null_prob assert_array_less(-1e-30, p.samples) # just that all >= 0 assert_array_less(0, t.samples[0, :2]) assert_array_less(t.samples[0, 2:4], 0) def test_match_distribution(self): """Some really basic testing for match_distribution """ ds = datasets['uni2medium'] # large to get stable stats data = ds.samples[:, ds.a.bogus_features[0]] # choose bogus feature, which # should have close to normal distribution # Lets test ad-hoc rv_semifrozen floc = rv_semifrozen(scipy.stats.norm, loc=0).fit(data) self.assertTrue(floc[0] == 0) fscale = rv_semifrozen(scipy.stats.norm, scale=1.0).fit(data) self.assertTrue(fscale[1] == 1) flocscale = rv_semifrozen(scipy.stats.norm, loc=0, scale=1.0).fit(data) self.assertTrue(flocscale[1] == 1 and flocscale[0] == 0) full = scipy.stats.norm.fit(data) for res in [floc, fscale, flocscale, full]: self.assertTrue(len(res) == 2) data_mean = np.mean(data) for loc in [None, data_mean]: for test in ['p-roc', 'kstest']: # some really basic testing matched = match_distribution( data=data, distributions = ['scipy', ('norm', {'name': 'norm_fixed', 'loc': 0.2, 'scale': 0.3})], test=test, loc=loc, p=0.05) # at least norm should be in there names = [m[2] for m in matched] if test == 'p-roc': if cfg.getboolean('tests', 'labile', default='yes'): # we can guarantee that only for norm_fixed self.assertTrue('norm' in names) self.assertTrue('norm_fixed' in names) inorm = names.index('norm_fixed') # and it should be at least in the first # 30 best matching ;-) self.assertTrue(inorm <= 30) # Test plotting only once if loc is None and externals.exists("pylab plottable"): import pylab as pl from mvpa2.clfs.stats import plot_distribution_matches fig = pl.figure() plot_distribution_matches(data, matched, legend=1, nbest=5) #pl.show() pl.close(fig) def test_match_distribution_semifrozen(self): """Handle frozen params in match_distribution """ matches = match_distribution(np.arange(10), distributions=[ 'uniform', ('uniform', {'loc': 0}) ], p=-1 # so we get all matches ) self.assertEqual(len(matches), 2) # we must get some match self.assertTrue(abs(matches[0][-1][0]) < 4e-1) # full fit should get close to true loc self.assertEqual(matches[1][-1][0], 0) # frozen should maintain the loc if externals.versions['scipy'] >= '0.10': # known to work on 0.10 and fail on 0.7.3 self.assertTrue(abs(matches[0][-1][1]-9) < 1e-1) # full fit should get close to true scale else: raise SkipTest("KnownFailure to fit uniform on older scipy") # actually it fails ATM to fit uniform with frozen loc=0 # nicely -- sets scale = 1 :-/ TODO raise SkipTest("TODO: Known failure to fit uniform with frozen loc") self.assertTrue(abs(matches[1][-1][1]-9) < 1e-1) # frozen fit of scale def test_r_dist_stability(self): """Test either rdist distribution performs nicely """ try: # actually I haven't managed to cause this error scipy.stats.rdist(1.32, 0, 1).pdf(-1.0+np.finfo(float).eps) except Exception, e: self.fail('Failed to compute rdist.pdf due to numeric' ' loss of precision. Exception was %s' % e) try: # this one should fail with recent scipy with error # ZeroDivisionError: 0.0 cannot be raised to a negative power # XXX: There is 1 more bug in etch's scipy.stats or numpy # (vectorize), so I have to put 2 elements in the # queried x's, otherwise it # would puke. But for now that fix is not here # # value = scipy.stats.rdist(1.32, 0, 1).cdf( # [-1.0+np.finfo(float).eps, 0]) # # to cause it now just run this unittest only with # nosetests -s test_stats:StatsTests.testRDistStability # NB: very cool way to store the trace of the execution #import pydb #pydb.debugger(dbg_cmds=['bt', 'l', 's']*300 + ['c']) scipy.stats.rdist(1.32, 0, 1).cdf(-1.0+np.finfo(float).eps) except IndexError, e: self.fail('Failed due to bug which leads to InvalidIndex if only' ' scalar is provided to cdf') except Exception, e: self.fail('Failed to compute rdist.cdf due to numeric' ' loss of precision. Exception was %s' % e) v = scipy.stats.rdist(10000, 0, 1).cdf([-0.1]) self.assertTrue(v>=0, v<=1) @reseed_rng() def test_scipy_fit_2fparams(self): # fixing parameters was not before this version skip_if_no_external('scipy', min_version='0.8.0') t = scipy.stats.t d = t(10, 1, 10).rvs(10) params = t.fit(d, floc=1, fscale=10.) # assured result to be a tuple due to failure on # travis-ci (ubuntu precise) # http://travis-ci.org/#!/PyMVPA/PyMVPA/builds/2459017 self.assertEqual(tuple(params[1:]), (1, 10.)) # df's are apparently quite difficult to assess unless plenty # of samples #self.assertTrue(abs(params[0] - 10) < 7) # estimate df at least in the right ball park def test_anova_compliance(self): ds = datasets['uni2large'] fwm = OneWayAnova() f = fwm(ds) f_sp = f_oneway(ds[ds.targets == 'L1'].samples, ds[ds.targets == 'L0'].samples) # SciPy needs to compute the same F-scores assert_array_almost_equal(f, f_sp[0:1]) @reseed_rng() def test_statsmodels(self): """Test GLM """ skip_if_no_external('statsmodels') from mvpa2.measures.statsmodels_adaptor import GLM # play fmri # full-blown HRF with initial dip and undershoot ;-) hrf_x = np.linspace(0, 25, 250) hrf = double_gamma_hrf(hrf_x) - single_gamma_hrf(hrf_x, 0.8, 1, 0.05) # come up with an experimental design samples = 1800 fast_er_onsets = np.array([10, 200, 250, 500, 600, 900, 920, 1400]) fast_er = np.zeros(samples) fast_er[fast_er_onsets] = 1 # high resolution model of the convolved regressor model_hr = np.convolve(fast_er, hrf)[:samples] # downsample the regressor to fMRI resolution tr = 2.0 model_lr = signal.resample(model_hr, int(samples / tr / 10), window='ham') # generate artifical fMRI data: two voxels one is noise, one has # something baseline = 800.0 wsignal = baseline + 2 * model_lr + \ np.random.randn(int(samples / tr / 10)) * 0.2 nsignal = baseline + np.random.randn(int(samples / tr / 10)) * 0.5 # build design matrix: bold-regressor and constant X = np.array([model_lr, np.repeat(1, len(model_lr))]).T # two 'voxel' dataset data = dataset_wizard(samples=np.array((wsignal, nsignal, nsignal)).T, targets=1) # check GLM betas glm = GLM(X) betas = glm(data) # betas for each feature and each regressor self.assertTrue(betas.shape == (X.shape[1], data.nfeatures)) self.assertTrue(np.absolute(betas.samples[1] - baseline < 10).all(), msg="baseline betas should be huge and around 800") self.assertTrue(betas.samples[0,0] > betas[0,1], msg="feature (with signal) beta should be larger than for noise") if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(np.absolute(betas[0,1]) < 0.5) self.assertTrue(np.absolute(betas[0,0]) > 1.0) # check GLM t values glm = GLM(X, voi='tvalues') tstats = glm(data) self.assertTrue(tstats.shape == betas.shape) self.assertTrue((tstats.samples[1] > 1000).all(), msg='constant tvalues should be huge') if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(np.absolute(betas[0,0]) > betas[0,1], msg='with signal should have higher tvalues') # check t-contrast -- should do the same as tvalues for the first # parameter glm = GLM(X, voi=[1, 0]) contrast = glm(data) assert_array_almost_equal(contrast.samples[0], tstats.samples[0]) assert_equals(len(contrast), 5) # we should be able to recover the approximate effect size of the signal # which is constructed with a baseline offset of 2 (see above) if cfg.getboolean('tests', 'labile', default='yes'): assert_true(1.5 < contrast.samples[2,0] < 2.5) # check F-test glm = GLM(X, voi=[[1, 0]]) ftest = glm(data) assert_equals(len(ftest), 4) assert_true(ftest.samples[0,0] > ftest.samples[0,1]) def test_binomdist_ppf(self): """Test if binomial distribution works ok after possibly a monkey patch """ bdist = scipy.stats.binom(100, 0.5) self.assertTrue(bdist.ppf(1.0) == 100) self.assertTrue(bdist.ppf(0.9) <= 60) self.assertTrue(bdist.ppf(0.5) == 50) self.assertTrue(bdist.ppf(0) == -1) def test_right_tail(self): # Test if we are getting "correct" p-value for right tail in # "interesting" cases # TODO: some of it is done in # test_transerror.py:ErrorsTests.test_confusionmatrix_nulldist pass def suite(): """Create the suite""" return unittest.makeSuite(StatsTestsScipy) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_suite.py000066400000000000000000000074151202542755000200530ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit test for PyMVPA mvpa2.suite() of being loading ok""" import inspect import re import unittest from mvpa2.base.dochelpers import get_docstring_split class SuiteTest(unittest.TestCase): def test_suite_load(self): """Test if we are loading fine """ try: exec "from mvpa2.suite import *" except Exception, e: self.fail(msg="Cannot import everything from mvpa2.suite." "Getting %s" % e) def test_docstrings(self): from mvpa2.suite import suite_stats # Lets do compliance checks # Get gross information on what we have in general gs = suite_stats() # all functions/classes/types should have some docstring missing = [] # We should not have both :Parameters: and new style Parameters conflicting = [] con_re1 = re.compile(':Parameters?:') con_re2 = re.compile('(?::Parameters?:.*Parameters?\s*\n\s*-------' '|Parameters?\s*\n\s*-------.*:Parameters?:)', flags=re.DOTALL) for c in ('classes', 'functions', 'modules', 'objects', 'types'): missing1 = [] conflicting1 = [] for k, i in gs[c].iteritems(): try: s = i.__doc__.strip() except: s = "" if s == "": missing1.append(k) if hasattr(i, '__init__') and not c in ['objects']: # Smoke test get_docstring_split which would be used # if someone specifies incorrect keyword argument _ = get_docstring_split(i.__init__) #if not None in _: # print [x[0] for x in _[1]] si = i.__init__.__doc__ k += '.__init__' if si is None or si == "": try: i_file = inspect.getfile(i) if i_file == inspect.getfile(i.__init__) \ and 'mvpa' in i_file: # if __init__ wasn't simply taken from some parent # which is not within MVPA missing1.append(k) except TypeError: # for some things like 'debug' inspect can't figure path # just skip for now pass else: si = s if si is not None \ and con_re1.search(si) and con_re2.search(si): conflicting1.append(k) if len(missing1): missing.append("%s: " % c + ', '.join(missing1)) if len(conflicting1): conflicting.append("%s: " % c + ', '.join(conflicting1)) sfailures = [] if len(missing): sfailures += ["Some items have missing docstrings:\n " + '\n '.join(missing)] if len(conflicting): sfailures += ["Some items have conflicting formats of docstrings:\n " + '\n '.join(conflicting)] if len(sfailures): self.fail('\n'.join(sfailures)) def suite(): return unittest.makeSuite(SuiteTest) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_support.py000066400000000000000000000236621202542755000204400ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA serial feature inclusion algorithm""" from mvpa2.testing import * from mvpa2.misc.support import * from mvpa2.base.types import asobjarray from mvpa2.testing import * from mvpa2.testing.datasets import get_mv_pattern, datasets from mvpa2.testing.clfs import * from mvpa2.clfs.distance import one_minus_correlation from mvpa2.support.copy import deepcopy class SupportFxTests(unittest.TestCase): def test_transform_with_boxcar(self): data = np.arange(10) sp = np.arange(10) # check if stupid thing don't work self.assertRaises(ValueError, transform_with_boxcar, data, sp, 0 ) # now do an identity transformation trans = transform_with_boxcar(data, sp, 1) self.assertTrue( (trans == data).all() ) # now check for illegal boxes self.assertRaises(ValueError, transform_with_boxcar, data, sp, 2) # now something that should work sp = np.arange(9) trans = transform_with_boxcar( data, sp, 2) self.assertTrue( ( trans == \ [0.5,1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5] ).all() ) # now test for proper data shape data = np.ones((10,3,4,2)) sp = [ 2, 4, 3, 5 ] trans = transform_with_boxcar( data, sp, 4) self.assertTrue( trans.shape == (4,3,4,2) ) def test_event(self): self.assertRaises(ValueError, Event) ev = Event(onset=2.5) # all there? self.assertTrue(ev.items() == [('onset', 2.5)]) # conversion self.assertTrue(ev.as_descrete_time(dt=2).items() == [('onset', 1)]) evc = ev.as_descrete_time(dt=2, storeoffset=True) self.assertTrue(evc.has_key('offset')) self.assertTrue(evc['offset'] == 0.5) # same with duration included evc = Event(onset=2.5, duration=3.55).as_descrete_time(dt=2) self.assertTrue(evc['duration'] == 3) def test_mof_n_combinations(self): self.assertEqual( unique_combinations( range(3), 1 ), [[0],[1],[2]] ) self.assertEqual( unique_combinations( range(4), 2 ), [[0, 1], [0, 2], [0, 3], [1, 2], [1, 3], [2, 3]] ) self.assertEqual( unique_combinations( range(4), 3 ), [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]] ) @reseed_rng() def test_xrandom_unique_combinations(self): for n in [4, 5, 10]: limit = 4 limited = list(xrandom_unique_combinations(range(n), 3, limit)) self.assertEqual(len(limited), limit) # See if we would obtain the same for k in [1, 2, 3, int(n/2), n]: all_random = list(xrandom_unique_combinations(range(n), k)) all_ = list(xunique_combinations(range(n), k)) self.assertEqual(sorted(all_random), sorted(all_)) # test that we are not sampling the same space -- two # consecutive samples within large number very unlikely not # have more than few overlapping samples c1, c2 = xrandom_unique_combinations(range(1000), 10, 2) self.assertTrue(len(set(c1).intersection(c2)) < 2) def test_break_points(self): items_cont = [0, 0, 0, 1, 1, 1, 3, 3, 2] items_noncont = [0, 0, 1, 1, 0, 3, 2] self.assertRaises(ValueError, get_break_points, items_noncont) self.assertEqual(get_break_points(items_noncont, contiguous=False), [0, 2, 4, 5, 6]) self.assertEqual(get_break_points(items_cont), [0, 3, 6, 8]) self.assertEqual(get_break_points(items_cont, contiguous=False), [0, 3, 6, 8]) def test_map_overlap(self): mo = MapOverlap() maps = [[1,0,1,0], [1,0,0,1], [1,0,1,0]] overlap = mo(maps) self.assertEqual(overlap, 1./len(maps[0])) self.assertTrue((mo.overlap_map == [1,0,0,0]).all()) self.assertTrue((mo.spread_map == [0,0,1,1]).all()) self.assertTrue((mo.ovstats_map == [1,0,2./3,1./3]).all()) mo = MapOverlap(overlap_threshold=0.5) overlap = mo(maps) self.assertEqual(overlap, 2./len(maps[0])) self.assertTrue((mo.overlap_map == [1,0,1,0]).all()) self.assertTrue((mo.spread_map == [0,0,0,1]).all()) self.assertTrue((mo.ovstats_map == [1,0,2./3,1./3]).all()) @reseed_rng() @sweepargs(pair=[(np.random.normal(size=(10,20)), np.random.normal(size=(10,20))), ([1,2,3,0], [1,3,2,0]), ((1,2,3,1), (1,3,2,1))]) def test_id_hash(self, pair): a, b = pair a1 = deepcopy(a) a_1 = idhash(a) self.assertTrue(a_1 == idhash(a), msg="Must be of the same idhash") self.assertTrue(a_1 != idhash(b), msg="Must be of different idhash") if isinstance(a, np.ndarray): self.assertTrue(a_1 != idhash(a.T), msg=".T must be of different idhash") if not isinstance(a, tuple): self.assertTrue(a_1 != idhash(a1), msg="Must be of different idhash") a[2] += 1; a_2 = idhash(a) self.assertTrue(a_1 != a_2, msg="Idhash must change") else: a_2 = a_1 a = a[2:]; a_3 = idhash(a) self.assertTrue(a_2 != a_3, msg="Idhash must change after slicing") def test_asobjarray(self): for i in ([1, 2, 3], ['a', 2, '3'], ('asd')): i_con = asobjarray(i) self.assertTrue(i_con.dtype is np.dtype('object')) self.assertEqual(len(i), len(i_con)) self.assertTrue(np.all(i == i_con)) @reseed_rng() def test_correlation(self): # data: 20 samples, 80 features X = np.random.rand(20,80) C = 1 - one_minus_correlation(X, X) # get nsample x nssample correlation matrix self.assertTrue(C.shape == (20, 20)) # diagonal is 1 self.assertTrue((np.abs(np.diag(C) - 1).mean() < 0.00001).all()) # now two different Y = np.random.rand(5,80) C2 = 1 - one_minus_correlation(X, Y) # get nsample x nssample correlation matrix self.assertTrue(C2.shape == (20, 5)) # external validity check -- we are dealing with correlations self.assertTrue(C2[10,2] - np.corrcoef(X[10], Y[2])[0,1] < 0.000001) def test_version_to_tuple(self): """Test conversion of versions from strings """ self.assertTrue(version_to_tuple('0.0.01') == (0, 0, 1)) self.assertTrue(version_to_tuple('0.7.1rc3') == (0, 7, 1, 'rc', 3)) def test_smart_version(self): """Test our ad-hoc SmartVersion """ SV = SmartVersion for v1, v2 in ( ('0.0.1', '0.0.2'), ('0.0.1', '0.1'), ('0.0.1', '0.1.0'), ('0.0.1', '0.0.1a'), # this might be a bit unconventional? ('0.0.1', '0.0.1+svn234'), ('0.0.1+svn234', '0.0.1+svn235'), ('0.0.1dev1', '0.0.1'), ('0.0.1dev1', '0.0.1rc3'), ('0.7.1rc3', '0.7.1'), ('0.0.1-dev1', '0.0.1'), ('0.0.1-svn1', '0.0.1'), ('0.0.1~p', '0.0.1'), ('0.0.1~prior.1.2', '0.0.1'), ): self.assertTrue(SV(v1) < SV(v2), msg="Failed to compare %s to %s" % (v1, v2)) self.assertTrue(SV(v2) > SV(v1), msg="Failed to reverse compare %s to %s" % (v2, v1)) # comparison to strings self.assertTrue(SV(v1) < v2, msg="Failed to compare %s to string %s" % (v1, v2)) self.assertTrue(v1 < SV(v2), msg="Failed to compare string %s to %s" % (v1, v2)) # to tuples self.assertTrue(SV(v1) < version_to_tuple(v2), msg="Failed to compare %s to tuple of %s" % (v1, v2)) self.assertTrue(version_to_tuple(v1) < SV(v2), msg="Failed to compare tuple of %s to %s" % (v1, v2)) def test_value2idx(): times = [1.2, 1.3, 2., 4., 0., 2., 1.1] assert_equal(value2idx(0, times), 4) assert_equal(value2idx(100, times), 3) assert_equal(value2idx(1.5, times), 1) assert_equal(value2idx(1.5, times, 'ceil'), 2) assert_equal(value2idx(1.2, times, 'floor'), 0) assert_equal(value2idx(1.14, times, 'round'), 6) assert_equal(value2idx(1.14, times, 'floor'), 6) assert_equal(value2idx(1.14, times, 'ceil'), 0) assert_equal(value2idx(-100, times, 'ceil'), 4) def test_limit_filter(): ds = datasets['uni2small'] assert_array_equal(get_limit_filter(None, ds.sa), np.ones(len(ds), dtype=np.bool)) assert_array_equal(get_limit_filter('chunks', ds.sa), ds.sa.chunks) assert_array_equal(get_limit_filter({'chunks': 3}, ds.sa), ds.sa.chunks == 3) assert_array_equal(get_limit_filter({'chunks': [3,1]}, ds.sa), np.logical_or(ds.sa.chunks == 3, ds.sa.chunks == 1)) def test_mask2slice(): slc = np.repeat(False, 5) assert_equal(mask2slice(slc), slice(None, 0, None)) def suite(): return unittest.makeSuite(SupportFxTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_svdmapper.py000066400000000000000000000062341202542755000207210ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA SVD mapper""" import unittest import numpy as np from mvpa2.mappers.svd import SVDMapper from mvpa2.testing import reseed_rng from mvpa2.support.copy import deepcopy class SVDMapperTests(unittest.TestCase): def setUp(self): # data: 40 sample feature line in 20d space (40x20; samples x features) self.ndlin = np.concatenate([np.arange(40) for i in range(20)]).reshape(20,-1).T # data: 10 sample feature line in 40d space # (10x40; samples x features) self.largefeat = np.concatenate([np.arange(10) for i in range(40)]).reshape(40,-1).T def test_simple_svd(self): pm = SVDMapper() # train SVD pm.train(self.ndlin) self.assertEqual(pm.proj.shape, (20, 20)) # now project data into PCA space p = pm.forward(self.ndlin) # only first eigenvalue significant self.assertTrue(pm.sv[:1] > 1.0) self.assertTrue((pm.sv[1:] < 0.0001).all()) # only variance of first component significant var = p.var(axis=0) # test that only one component has variance self.assertTrue(var[:1] > 1.0) self.assertTrue((var[1:] < 0.0001).all()) # check that the mapped data can be fully recovered by 'reverse()' pr = pm.reverse(p) self.assertEqual(pr.shape, (40,20)) self.assertTrue(np.abs(pm.reverse(p) - self.ndlin).sum() < 0.0001) @reseed_rng() def test_more_svd(self): pm = SVDMapper() # train SVD pm.train(self.largefeat) # mixing matrix cannot be square self.assertEqual(pm.proj.shape, (40, 10)) # only first singular value significant self.assertTrue(pm.sv[:1] > 10) self.assertTrue((pm.sv[1:] < 10).all()) # now project data into SVD space p = pm.forward(self.largefeat) # only variance of first component significant var = p.var(axis=0) # test that only one component has variance self.assertTrue(var[:1] > 1.0) self.assertTrue((var[1:] < 0.0001).all()) # check that the mapped data can be fully recovered by 'reverse()' rp = pm.reverse(p) self.assertEqual(rp.shape, self.largefeat.shape) self.assertTrue((np.round(rp) == self.largefeat).all()) # copy mapper pm2 = deepcopy(pm) # now make new random data and do forward->reverse check data = np.random.normal(size=(98,40)) data_f = pm.forward(data) self.assertEqual(data_f.shape, (98,10)) data_r = pm.reverse(data_f) self.assertEqual(data_r.shape, (98,40)) def suite(): return unittest.makeSuite(SVDMapperTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_svm.py000066400000000000000000000157621202542755000175330ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for SVM classifier""" import numpy as np from mvpa2.datasets import dataset_wizard from mvpa2.testing import * from mvpa2.testing.clfs import * from mvpa2.testing.datasets import * from mvpa2.generators.partition import NFoldPartitioner from mvpa2.datasets.miscfx import get_nsamples_per_attr from mvpa2.clfs.meta import ProxyClassifier from mvpa2.measures.base import CrossValidation class SVMTests(unittest.TestCase): # @sweepargs(nl_clf=clfswh['non-linear', 'svm'] ) # @sweepargs(nl_clf=clfswh['non-linear', 'svm'] ) def test_multivariate(self): mv_perf = [] mv_lin_perf = [] uv_perf = [] l_clf = clfswh['linear', 'svm'][0] nl_clf = clfswh['non-linear', 'svm'][0] #orig_keys = nl_clf.param._params.keys() #nl_param_orig = nl_clf.param._params.copy() # l_clf = LinearNuSVMC() # XXX ??? not sure what below meant and it is obsolete if # using SG... commenting out for now # for some reason order is not preserved thus dictionaries are not # the same any longer -- lets compare values #self.assertEqual([nl_clf.param._params[k] for k in orig_keys], # [nl_param_orig[k] for k in orig_keys], # msg="New instance mustn't override values in previously created") ## and keys separately #self.assertEqual(set(nl_clf.param._params.keys()), # set(orig_keys), # msg="New instance doesn't change set of parameters in original") # We must be able to deepcopy not yet trained SVMs now import mvpa2.support.copy as copy try: nl_clf.untrain() nl_clf_copy = copy.deepcopy(nl_clf) except: self.fail(msg="Failed to deepcopy not-yet trained SVM %s" % nl_clf) for i in xrange(20): train = pure_multivariate_signal( 20, 3 ) test = pure_multivariate_signal( 20, 3 ) # use non-linear CLF on 2d data nl_clf.train(train) p_mv = nl_clf.predict(test.samples) mv_perf.append(np.mean(p_mv==test.targets)) # use linear CLF on 2d data l_clf.train(train) p_lin_mv = l_clf.predict(test.samples) mv_lin_perf.append(np.mean(p_lin_mv==test.targets)) # use non-linear CLF on 1d data nl_clf.train(train[:, 0]) p_uv = nl_clf.predict(test[:, 0].samples) uv_perf.append(np.mean(p_uv==test.targets)) mean_mv_perf = np.mean(mv_perf) mean_mv_lin_perf = np.mean(mv_lin_perf) mean_uv_perf = np.mean(uv_perf) # non-linear CLF has to be close to perfect self.assertTrue( mean_mv_perf > 0.9 ) # linear CLF cannot learn this problem! self.assertTrue( mean_mv_perf > mean_mv_lin_perf ) # univariate has insufficient information self.assertTrue( mean_uv_perf < mean_mv_perf ) # XXX for now works only with linear... think it through -- should # work non-linear, shouldn't it? @sweepargs(clf=clfswh['svm', 'linear', '!regression', '!gnpp', '!meta']) @reseed_rng() def test_cper_class(self, clf): if not (clf.params.has_key('C')): # skip those without C return ds = datasets['uni2medium'].copy() ds__ = datasets['uni2medium'].copy() # # ballanced set # Lets add a bit of noise to drive classifier nuts. same # should be done for disballanced set ds__.samples = ds__.samples + \ 0.5 * np.random.normal(size=(ds__.samples.shape)) # # disballanced set # lets overpopulate label 0 times = 20 ds_ = ds[(range(ds.nsamples) + range(ds.nsamples//2) * times)] ds_.samples = ds_.samples + \ 0.5 * np.random.normal(size=(ds_.samples.shape)) spl = get_nsamples_per_attr(ds_, 'targets') #_.samplesperlabel #print ds_.targets, ds_.chunks cve = CrossValidation(clf, NFoldPartitioner(), enable_ca='stats') # on balanced e = cve(ds__) tpr_1 = cve.ca.stats.stats["TPR"][1] # on disbalanced e = cve(ds_) tpr_2 = cve.ca.stats.stats["TPR"][1] # Set '1 C per label' # recreate cvte since previous might have operated on copies cve = CrossValidation(clf, NFoldPartitioner(), enable_ca='stats') oldC = clf.params.C # TODO: provide clf.params.C not with a tuple but dictionary # with C per label (now order is deduced in a cruel way) ratio = np.sqrt(float(spl[ds_.UT[0]])/spl[ds_.UT[1]]) clf.params.C = (-1/ratio, -1*ratio) try: # on disbalanced but with balanced C e_ = cve(ds_) # reassign C clf.params.C = oldC except: clf.params.C = oldC raise tpr_3 = cve.ca.stats.stats["TPR"][1] # Actual tests if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(tpr_1 > 0.25, msg="Without disballance we should have some " "hits, but got TPR=%.3f" % tpr_1) self.assertTrue(tpr_2 < 0.25, msg="With disballance we should have almost no " "hits for minor, but got TPR=%.3f" % tpr_2) self.assertTrue(tpr_3 > 0.25, msg="With disballanced data but ratio-based Cs " "we should have some hits for minor, but got " "TPR=%.3f" % tpr_3) def test_sillyness(self): """Test if we raise exceptions on incorrect specifications """ if externals.exists('libsvm'): self.assertRaises(TypeError, libsvm.SVM, C=1.0, nu=2.3) self.assertRaises(TypeError, libsvm.SVM, C=1.0, nu=2.3) self.assertRaises(TypeError, LinearNuSVMC, C=2.3) self.assertRaises(TypeError, LinearCSVMC, nu=2.3) if externals.exists('shogun'): self.assertRaises(TypeError, sg.SVM, C=1.0, nu=2.3) self.assertRaises(TypeError, sg.SVM, C=10, kernel_type='RBF', coef0=3) @sweepargs(clf=clfswh['svm', 'linear', '!meta', 'C_SVC'][:1]) def test_C_on_int_dataset(self, clf): a = np.arange(8, dtype=np.int16).reshape(4,-1) a[0,0] = 322 # the value which would overflow self.assertTrue(np.isfinite(clf._get_default_c(a))) def suite(): return unittest.makeSuite(SVMTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_svmkernels.py000066400000000000000000000134441202542755000211120ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for new Kernel-based SVMs""" import numpy as np from time import time from mvpa2.testing import * from mvpa2.testing.datasets import datasets skip_if_no_external('shogun') from mvpa2.kernels.base import CachedKernel from mvpa2.kernels.sg import RbfSGKernel, LinearSGKernel from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.clfs.libsvmc.svm import SVM as lsSVM from mvpa2.clfs.sg.svm import SVM as sgSVM from mvpa2.generators.splitters import Splitter from mvpa2.generators.partition import NFoldPartitioner from mvpa2.measures.base import CrossValidation, TransferMeasure, ProxyMeasure from mvpa2.mappers.fx import BinaryFxNode from mvpa2.misc.errorfx import mean_mismatch_error class SVMKernelTests(unittest.TestCase): @sweepargs(clf=[lsSVM(), sgSVM()]) def test_basic_clf_train_predict(self, clf): d = datasets['uni4medium'] clf.train(d) clf.predict(d) pass @reseed_rng() def test_cache_speedup(self): skip_if_no_external('shogun', ver_dep='shogun:rev', min_version=4455) ck = sgSVM(kernel=CachedKernel(kernel=RbfSGKernel(sigma=2)), C=1) sk = sgSVM(kernel=RbfSGKernel(sigma=2), C=1) cv_c = CrossValidation(ck, NFoldPartitioner()) cv_s = CrossValidation(sk, NFoldPartitioner()) #data = datasets['uni4large'] P = 5000 data = normal_feature_dataset(snr=2, perlabel=200, nchunks=10, means=np.random.randn(2, P), nfeatures=P) t0 = time() ck.params.kernel.compute(data) cachetime = time()-t0 t0 = time() cached_err = cv_c(data) ccv_time = time()-t0 t0 = time() norm_err = cv_s(data) ncv_time = time()-t0 assert_almost_equal(np.asanyarray(cached_err), np.asanyarray(norm_err)) ok_(cachetime100) self.assertTrue(len(str(cm))>100) # and that it knows some parameters for printing self.assertTrue(len(cm.as_string(summary=True, header=False))>100) # lets check iadd -- just itself to itself cm += cm self.assertEqual(len(cm.matrices), 4, msg="Must be 4 sets now") # lets check add -- just itself to itself cm2 = cm + cm self.assertEqual(len(cm2.matrices), 8, msg="Must be 8 sets now") self.assertEqual(cm2.percent_correct, cm.percent_correct, msg="Percent of corrrect should remain the same ;-)") self.assertEqual(cm2.error, 1.0-cm.percent_correct/100.0, msg="Test if we get proper error value") def test_confusion_matrix_addition(self): """Test confusions addition inconsistent results (GH #51) Was fixed by deepcopying instead of copying in __add__ """ cm1 = ConfusionMatrix(sets=[[np.array((1,2)), np.array((1,2))]]) cm2 = ConfusionMatrix(sets=[[np.array((3,2)), np.array((3,2))]]) assert_array_equal(cm1.stats['P'], [1, 1]) assert_array_equal(cm2.stats['P'], [1, 1]) # actual bug scenario -- results would be different r1 = (cm1 + cm2).stats['P'] r2 = (cm1 + cm2).stats['P'] assert_array_equal(r1, r2) assert_array_equal(r1, [1, 2, 1]) def test_degenerate_confusion(self): # We must not just puke -- some testing splits might # have just a single target label for orig in ([1], [1, 1], [0], [0, 0]): cm = ConfusionMatrix(targets=orig, predictions=orig, estimates=orig) scm = str(cm) self.assertTrue(cm.stats['ACC%'] == 100) def test_confusion_matrix_acc(self): reg = [0,0,1,1] regl = [1,0,1,0] cm = ConfusionMatrix(targets=reg, predictions=regl) self.assertTrue('ACC% 50' in str(cm)) skip_if_no_external('scipy') self.assertTrue(cm.stats['CHI^2'] == (0., 1.)) def test_confusion_matrix_with_mappings(self): data = np.array([1,2,1,2,2,2,3,2,1], ndmin=2).T reg = [1,1,1,2,2,2,3,3,3] regl = [1,2,1,2,2,2,3,2,1] correct_cm = [[2,0,1], [1,3,1], [0,0,1]] lm = {'apple':1, 'orange':2, 'shitty apple':1, 'candy':3} cm = ConfusionMatrix(targets=reg, predictions=regl, labels_map=lm) # check table content self.assertTrue((cm.matrix == correct_cm).all()) # assure that all labels are somewhere listed ;-) s = str(cm) for l in lm.keys(): self.assertTrue(l in s) def test_confusion_call(self): # Also tests for the consistency of the labels as # either provided or collected by ConfusionMatrix through its lifetime self.assertRaises(RuntimeError, ConfusionMatrix(), [1], [1]) self.assertRaises(ValueError, ConfusionMatrix(labels=[2]), [1], [1]) # Now lets test proper matrix and either we obtain the same t = ['ho', 'ho', 'ho', 'fa', 'fa', 'ho', 'ho'] p = ['ho','ho', 'ho', 'ho', 'fa', 'fa', 'fa'] cm1 = ConfusionMatrix(labels=['ho', 'fa']) cm2 = ConfusionMatrix(labels=['fa', 'ho']) assert_array_equal(cm1(p, t), [[3, 1], [2, 1]]) assert_array_equal(cm2(p, t), [[1, 2], [1, 3]]) # reverse order of labels cm1_ = ConfusionMatrix(labels=['ho', 'fa'], sets=[(t,p)]) assert_array_equal(cm1(p, t), cm1_.matrix) # both should be identical # Lets provoke "mother" CM to get to know more labels which could get ahead # of the known ones cm1.add(['ho', 'aa'], ['ho', 'aa']) # compare and cause recomputation so .__labels get reassigned assert_equal(cm1.labels, ['ho', 'fa', 'aa']) assert_array_equal(cm1(p, t), [[3, 1, 0], [2, 1, 0], [0, 0, 0]]) assert_equal(len(cm1.sets), 1) # just 1 must be known atm from above add assert_array_equal(cm1(p, t, store=True), [[3, 1, 0], [2, 1, 0], [0, 0, 0]]) assert_equal(len(cm1.sets), 2) # and now 2 assert_array_equal(cm1(p + ['ho', 'aa'], t + ['ho', 'aa']), cm1.matrix) @sweepargs(l_clf=clfswh['linear', 'svm']) def test_confusion_based_error(self, l_clf): train = datasets['uni2medium'] train = train[train.sa.train == 1] # to check if we fail to classify for 3 labels test3 = datasets['uni3medium'] test3 = test3[test3.sa.train == 1] err = ConfusionBasedError(clf=l_clf) terr = TransferMeasure(l_clf, Splitter('train', attr_values=[1,1]), postproc=BinaryFxNode(mean_mismatch_error, 'targets')) self.assertRaises(UnknownStateError, err, None) """Shouldn't be able to access the state yet""" l_clf.train(train) e, te = err(None), terr(train) te = np.asscalar(te) self.assertTrue(abs(e-te) < 1e-10, msg="ConfusionBasedError (%.2g) should be equal to TransferError " "(%.2g) on traindataset" % (e, te)) # this will print nasty WARNING but it is ok -- it is just checking code # NB warnings are not printed while doing whole testing warning("Don't worry about the following warning.") if 'multiclass' in l_clf.__tags__: self.assertFalse(terr(test3) is None) # try copying the beast terr_copy = copy(terr) @sweepargs(l_clf=clfswh['linear', 'svm']) def test_null_dist_prob(self, l_clf): train = datasets['uni2medium'] num_perm = 10 permutator = AttributePermutator('targets', count=num_perm) # define class to estimate NULL distribution of errors # use left tail of the distribution since we use MeanMatchFx as error # function and lower is better terr = TransferMeasure( l_clf, Repeater(count=2), postproc=BinaryFxNode(mean_mismatch_error, 'targets'), null_dist=MCNullDist(permutator, tail='left')) # check reasonable error range err = terr(train) self.assertTrue(np.mean(err) < 0.4) # Lets do the same for CVTE cvte = CrossValidation(l_clf, OddEvenPartitioner(), null_dist=MCNullDist(permutator, tail='left', enable_ca=['dist_samples']), postproc=mean_sample()) cv_err = cvte(train) # check that the result is highly significant since we know that the # data has signal null_prob = np.asscalar(terr.ca.null_prob) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(null_prob <= 0.1, msg="Failed to check that the result is highly significant " "(got %f) since we know that the data has signal" % null_prob) self.assertTrue(np.asscalar(cvte.ca.null_prob) <= 0.1, msg="Failed to check that the result is highly significant " "(got p(cvte)=%f) since we know that the data has signal" % np.asscalar(cvte.ca.null_prob)) # we should be able to access the actual samples of the distribution # yoh: why it is 3D really? # mih: because these are the distribution samples for the ONE error # collapsed into ONE value across all folds. It will also be # 3d if the return value of the measure isn't a scalar and it is # not collapsed across folds. it simply corresponds to the shape # of the output dataset of the respective measure (+1 axis) # Some permutations could have been skipped since classifier failed # to train due to degenerate situation etc, thus accounting for them self.assertEqual(cvte.null_dist.ca.dist_samples.shape[2], num_perm - cvte.null_dist.ca.skipped) @sweepargs(clf=clfswh['multiclass']) def test_auc(self, clf): """Test AUC computation """ if isinstance(clf, MulticlassClassifier): raise SkipTest, \ "TODO: handle values correctly in MulticlassClassifier" clf.ca.change_temporarily(enable_ca = ['estimates']) if 'qda' in clf.__tags__: # for reliable estimation of covariances, need sufficient # sample size ds_size = 'large' else: ds_size = 'small' # uni2 dataset with reordered labels ds2 = datasets['uni2' + ds_size].copy() # revert labels ds2.sa['targets'].value = ds2.targets[::-1].copy() # same with uni3 ds3 = datasets['uni3' + ds_size].copy() ul = ds3.sa['targets'].unique nl = ds3.targets.copy() for l in xrange(3): nl[ds3.targets == ul[l]] = ul[(l+1)%3] ds3.sa.targets = nl for ds in [datasets['uni2' + ds_size], ds2, datasets['uni3' + ds_size], ds3]: cv = CrossValidation(clf, OddEvenPartitioner(), enable_ca=['stats', 'training_stats']) cverror = cv(ds) stats = cv.ca.stats.stats Nlabels = len(ds.uniquetargets) # so we at least do slightly above chance self.assertTrue(stats['ACC'] > 1.2 / Nlabels) auc = stats['AUC'] if (Nlabels == 2) or (Nlabels > 2 and auc[0] is not np.nan): mauc = np.min(stats['AUC']) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(mauc > 0.55, msg='All AUCs must be above chance. Got minimal ' 'AUC=%.2g among %s' % (mauc, stats['AUC'])) clf.ca.reset_changed_temporarily() def test_confusion_plot(self): """Basic test of confusion plot Based on existing cell dataset results. Let in for possible future testing, but is not a part of the unittests suite """ #from matplotlib import rc as rcmpl #rcmpl('font',**{'family':'sans-serif','sans-serif':['DejaVu Sans']}) ##rcmpl('text', usetex=True) ##rcmpl('font', family='sans', style='normal', variant='normal', ## weight='bold', stretch='normal', size='large') #import numpy as np #from mvpa2.clfs.transerror import \ # TransferError, ConfusionMatrix, ConfusionBasedError array = np.array uint8 = np.uint8 sets = [ (array([47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44], dtype=uint8), array([40, 39, 47, 43, 45, 41, 44, 41, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 46, 45, 38, 44, 39, 46, 38, 39, 39, 38, 43, 45, 41, 44, 40, 46, 42, 38, 40, 47, 43, 45, 41, 44, 40, 46, 42, 38, 39, 40, 43, 45, 41, 44, 39, 46, 42, 47, 38, 38, 43, 45, 41, 44, 38, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 47, 43, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 40, 46, 42, 39, 39, 38, 43, 45, 41, 44, 47, 46, 42, 47, 38, 39, 43, 45, 40, 44, 40, 46, 42, 47, 39, 40, 43, 45, 41, 44, 38, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 41, 47, 39, 38, 46, 45, 41, 44, 40, 46, 42, 40, 38, 38, 43, 45, 41, 44, 40, 45, 42, 47, 39, 39, 43, 45, 41, 44, 38, 46, 42, 47, 38, 42, 43, 45, 41, 44, 39, 46, 42, 39, 39, 39, 47, 45, 41, 44], dtype=uint8)), (array([40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43], dtype=uint8), array([40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 47, 46, 42, 47, 39, 40, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 39, 46, 42, 47, 47, 47, 43, 45, 41, 44, 40, 46, 42, 43, 39, 38, 43, 45, 41, 44, 38, 38, 42, 38, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 40, 38, 43, 45, 41, 44, 40, 40, 42, 47, 40, 40, 43, 45, 41, 44, 38, 38, 42, 47, 38, 38, 47, 45, 41, 44, 40, 46, 42, 47, 39, 40, 43, 45, 41, 44, 40, 46, 42, 47, 47, 39, 43, 45, 41, 44, 40, 46, 42, 39, 39, 42, 43, 45, 41, 44, 40, 46, 42, 47, 39, 39, 43, 45, 41, 44, 47, 46, 42, 40, 39, 39, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 40, 44, 40, 46, 42, 47, 39, 39, 43, 45, 41, 44, 38, 46, 42, 47, 39, 39, 43, 45, 41, 44, 40, 46, 46, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 39, 39, 38, 47, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43], dtype=uint8)), (array([45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47], dtype=uint8), array([45, 41, 44, 40, 46, 42, 47, 39, 46, 43, 45, 41, 44, 40, 46, 42, 47, 39, 39, 43, 45, 41, 44, 38, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 47, 39, 43, 43, 45, 40, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 47, 40, 43, 45, 41, 44, 40, 47, 42, 38, 47, 38, 43, 45, 41, 44, 40, 40, 42, 47, 39, 39, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 38, 46, 42, 47, 39, 39, 43, 45, 41, 44, 40, 46, 42, 47, 40, 38, 43, 45, 41, 44, 40, 46, 38, 38, 39, 38, 43, 45, 41, 44, 39, 46, 42, 47, 40, 39, 43, 45, 38, 44, 38, 46, 42, 47, 47, 40, 43, 45, 41, 44, 40, 40, 42, 47, 40, 38, 43, 39, 41, 44, 41, 46, 42, 39, 39, 38, 38, 45, 41, 44, 38, 46, 40, 46, 46, 46, 43, 45, 38, 44, 40, 46, 42, 39, 39, 45, 43, 45, 41, 44, 38, 46, 42, 38, 39, 39, 43, 45, 41, 38, 40, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 40], dtype=uint8)), (array([39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40], dtype=uint8), array([39, 38, 43, 45, 41, 44, 40, 46, 38, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 41, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 38, 43, 47, 38, 38, 43, 45, 41, 44, 39, 46, 42, 39, 39, 38, 43, 45, 41, 44, 43, 46, 42, 47, 39, 39, 43, 45, 41, 44, 40, 46, 42, 47, 39, 40, 43, 45, 41, 44, 40, 46, 42, 39, 38, 38, 43, 45, 40, 44, 47, 46, 38, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 38, 39, 38, 43, 45, 41, 44, 40, 46, 42, 38, 39, 38, 43, 45, 47, 44, 45, 46, 42, 38, 39, 41, 43, 45, 41, 44, 38, 38, 42, 39, 40, 40, 43, 45, 41, 39, 40, 46, 42, 47, 39, 40, 43, 45, 41, 44, 40, 47, 42, 47, 38, 38, 43, 45, 41, 44, 47, 46, 42, 47, 40, 47, 43, 45, 41, 44, 40, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 39, 38, 43, 45, 46, 44, 38, 46, 42, 47, 38, 44, 43, 45, 42, 44, 41, 46, 42, 47, 47, 38, 43, 45, 41, 44, 38, 46, 42, 39, 39, 38, 43, 45, 41, 44, 40], dtype=uint8)), (array([46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45], dtype=uint8), array([46, 42, 39, 38, 38, 43, 45, 41, 44, 40, 46, 42, 47, 47, 42, 43, 45, 42, 44, 40, 46, 42, 38, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 47, 40, 43, 45, 41, 44, 41, 46, 42, 38, 39, 38, 43, 45, 41, 44, 38, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 46, 38, 38, 43, 45, 41, 44, 39, 46, 42, 47, 39, 40, 43, 45, 41, 44, 40, 46, 42, 47, 39, 39, 43, 45, 41, 44, 40, 47, 42, 47, 38, 39, 43, 45, 41, 44, 39, 46, 42, 47, 39, 46, 43, 45, 41, 44, 39, 46, 42, 39, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 40, 46, 42, 39, 39, 38, 43, 45, 41, 44, 40, 38, 42, 46, 39, 38, 43, 45, 41, 44, 38, 46, 42, 46, 46, 38, 43, 45, 41, 44, 40, 46, 42, 47, 47, 38, 38, 45, 41, 44, 38, 38, 42, 43, 39, 40, 43, 45, 41, 44, 38, 46, 42, 47, 38, 39, 47, 45, 46, 44, 40, 46, 42, 47, 40, 38, 43, 45, 41, 44, 40, 46, 42, 47, 40, 38, 43, 45, 41, 44, 38, 46, 42, 38, 39, 38, 47, 45], dtype=uint8)), (array([41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39], dtype=uint8), array([41, 44, 38, 46, 42, 47, 39, 47, 40, 45, 41, 44, 40, 46, 42, 38, 40, 38, 43, 45, 41, 44, 40, 46, 42, 38, 38, 38, 43, 45, 41, 44, 46, 38, 42, 40, 38, 39, 43, 45, 41, 44, 41, 46, 42, 47, 47, 38, 43, 45, 41, 44, 40, 46, 42, 38, 39, 39, 43, 45, 41, 44, 38, 46, 42, 47, 43, 39, 43, 45, 41, 44, 40, 46, 42, 38, 39, 38, 43, 45, 41, 44, 40, 46, 42, 40, 39, 38, 43, 45, 41, 44, 38, 46, 42, 39, 39, 39, 43, 45, 41, 44, 40, 46, 42, 39, 38, 47, 43, 45, 38, 44, 40, 38, 42, 47, 38, 38, 43, 45, 41, 44, 40, 38, 46, 47, 38, 38, 43, 45, 41, 44, 41, 46, 42, 40, 38, 38, 40, 45, 41, 44, 40, 40, 42, 43, 38, 40, 43, 39, 41, 44, 40, 40, 42, 47, 38, 46, 43, 45, 41, 44, 47, 41, 42, 43, 40, 47, 43, 45, 41, 44, 41, 38, 42, 40, 39, 40, 43, 45, 41, 44, 39, 43, 42, 47, 39, 40, 43, 45, 41, 44, 42, 46, 42, 47, 40, 46, 43, 45, 41, 44, 38, 46, 42, 47, 47, 38, 43, 45, 41, 44, 40, 38, 39, 47, 38], dtype=uint8)), (array([38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46], dtype=uint8), array([39, 43, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 41, 46, 42, 47, 47, 39, 43, 45, 41, 44, 40, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 47, 39, 40, 43, 45, 41, 44, 40, 46, 42, 47, 45, 38, 43, 45, 41, 44, 38, 46, 42, 47, 38, 39, 43, 45, 41, 44, 40, 46, 42, 39, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 40, 39, 43, 45, 41, 44, 40, 39, 42, 40, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 38, 46, 42, 39, 39, 47, 43, 45, 41, 44, 40, 46, 42, 47, 39, 39, 43, 45, 41, 44, 40, 46, 42, 46, 47, 39, 47, 45, 41, 44, 40, 46, 42, 47, 39, 39, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 38, 46, 42, 47, 39, 38, 43, 45, 42, 44, 39, 47, 42, 39, 39, 47, 43, 47, 40, 44, 40, 46, 42, 39, 39, 38, 39, 45, 41, 44, 40, 46, 42, 47, 38, 38, 43, 45, 41, 44, 46, 38, 42, 47, 39, 43, 43, 45, 41, 44, 40, 46], dtype=uint8)), (array([42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45, 41, 44, 40, 46, 42, 47, 39, 38, 43, 45], dtype=uint8), array([42, 38, 38, 40, 43, 45, 41, 44, 39, 46, 42, 47, 39, 38, 43, 45, 41, 44, 39, 38, 42, 47, 41, 40, 43, 45, 41, 44, 40, 41, 42, 47, 38, 46, 43, 45, 41, 44, 41, 41, 42, 40, 39, 39, 43, 45, 41, 44, 46, 45, 42, 39, 39, 40, 43, 45, 41, 44, 40, 46, 42, 40, 44, 38, 43, 41, 41, 44, 39, 46, 42, 39, 39, 39, 43, 45, 41, 44, 40, 43, 42, 47, 39, 39, 43, 45, 41, 44, 40, 47, 42, 38, 46, 39, 47, 45, 41, 44, 39, 46, 42, 47, 41, 38, 43, 45, 41, 44, 42, 46, 42, 46, 39, 38, 43, 45, 41, 44, 41, 46, 42, 46, 39, 38, 43, 45, 41, 44, 40, 46, 42, 38, 38, 38, 43, 45, 41, 44, 38, 46, 42, 39, 40, 43, 43, 45, 41, 44, 39, 38, 40, 40, 38, 38, 43, 45, 41, 44, 41, 40, 42, 39, 39, 39, 43, 45, 41, 44, 40, 46, 42, 47, 40, 40, 43, 45, 41, 44, 40, 46, 42, 41, 39, 39, 43, 45, 41, 44, 40, 38, 42, 40, 39, 46, 43, 45, 41, 44, 47, 46, 42, 47, 39, 38, 43, 45, 41, 44, 41, 46, 42, 43, 39, 39, 43, 45], dtype=uint8))] labels_map = {'12kHz': 40, '20kHz': 41, '30kHz': 42, '3kHz': 38, '7kHz': 39, 'song1': 43, 'song2': 44, 'song3': 45, 'song4': 46, 'song5': 47} try: cm = ConfusionMatrix(sets=sets, labels_map=labels_map) except: self.fail() cms = str(cm) self.assertTrue('3kHz / 38' in cms) if externals.exists("scipy"): self.assertTrue('ACC(i) = 0.82-0.012*i p=0.12 r=-0.59 r^2=0.35' in cms) if externals.exists("pylab plottable"): import pylab as pl pl.figure() labels_order = ("3kHz", "7kHz", "12kHz", "20kHz","30kHz", None, "song1","song2","song3","song4","song5") #print cm #fig, im, cb = cm.plot(origin='lower', labels=labels_order) fig, im, cb = cm.plot(labels=labels_order[1:2] + labels_order[:1] + labels_order[2:], numbers=True) self.assertTrue(cm._plotted_confusionmatrix[0,0] == cm.matrix[1,1]) self.assertTrue(cm._plotted_confusionmatrix[0,1] == cm.matrix[1,0]) self.assertTrue(cm._plotted_confusionmatrix[1,1] == cm.matrix[0,0]) self.assertTrue(cm._plotted_confusionmatrix[1,0] == cm.matrix[0,1]) pl.close(fig) fig, im, cb = cm.plot(labels=labels_order, numbers=True) pl.close(fig) # pl.show() def test_confusion_plot2(self): array = np.array uint8 = np.uint8 sets = [(array([1, 2]), array([1, 1]), array([[ 0.54343765, 0.45656235], [ 0.92395853, 0.07604147]])), (array([1, 2]), array([1, 1]), array([[ 0.98030832, 0.01969168], [ 0.78998763, 0.21001237]])), (array([1, 2]), array([1, 1]), array([[ 0.86125263, 0.13874737], [ 0.83674113, 0.16325887]])), (array([1, 2]), array([1, 1]), array([[ 0.57870383, 0.42129617], [ 0.59702509, 0.40297491]])), (array([1, 2]), array([1, 1]), array([[ 0.89530255, 0.10469745], [ 0.69373919, 0.30626081]])), (array([1, 2]), array([1, 1]), array([[ 0.75015218, 0.24984782], [ 0.9339767 , 0.0660233 ]])), (array([1, 2]), array([1, 2]), array([[ 0.97826616, 0.02173384], [ 0.38620638, 0.61379362]])), (array([2]), array([2]), array([[ 0.46893776, 0.53106224]]))] try: cm = ConfusionMatrix(sets=sets) except: self.fail() if externals.exists("pylab plottable"): import pylab as pl #pl.figure() #print cm fig, im, cb = cm.plot(origin='lower', numbers=True) #pl.plot() self.assertTrue((cm._plotted_confusionmatrix == cm.matrix).all()) pl.close(fig) #fig, im, cb = cm.plot(labels=labels_order, numbers=True) #pl.close(fig) #pl.show() @reseed_rng() @labile(3, 1) def test_confusionmatrix_nulldist(self): from mvpa2.clfs.gnb import GNB from mvpa2.clfs.transerror import ConfusionMatrixError from mvpa2.misc.data_generators import normal_feature_dataset for snr in [0., 2.,]: ds = normal_feature_dataset(snr=snr, perlabel=42, nchunks=3, nonbogus_features=[0,1], nfeatures=2) clf = GNB() num_perm = 50 permutator = AttributePermutator('targets', limit='chunks', count=num_perm) cv = CrossValidation( clf, NFoldPartitioner(), errorfx=ConfusionMatrixError(labels=ds.sa['targets'].unique), postproc=mean_sample(), null_dist=MCNullDist(permutator, tail='right', # because we now look at accuracy not error enable_ca=['dist_samples']), enable_ca=['stats']) cmatrix = cv(ds) #print "Result:\n", cmatrix.samples cvnp = cv.ca.null_prob.samples #print cvnp self.assertTrue(cvnp.shape, (2, 2)) if cfg.getboolean('tests', 'labile', default='yes'): if snr == 0.: # all p should be high since no signal assert_array_less(0.05, cvnp) else: # diagonal p is low -- we have signal after all assert_array_less(np.diag(cvnp), 0.05) # off diagonals are high p since for them we would # need to look at the other tail assert_array_less(0.9, cvnp[(np.array([0,1]), np.array([1,0]))]) def test_confusion_as_node(): from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.clfs.gnb import GNB from mvpa2.clfs.transerror import Confusion ds = normal_feature_dataset(snr=2.0, perlabel=42, nchunks=3, nonbogus_features=[0,1], nfeatures=2) clf = GNB() cv = CrossValidation( clf, NFoldPartitioner(), errorfx=None, postproc=Confusion(labels=ds.UT), enable_ca=['stats']) res = cv(ds) # needs to be identical to CA assert_array_equal(res.samples, cv.ca.stats.matrix) assert_array_equal(res.sa.predictions, ds.UT) assert_array_equal(res.fa.targets, ds.UT) skip_if_no_external('scipy') from mvpa2.clfs.transerror import BayesConfusionHypothesis from mvpa2.base.node import ChainNode # same again, but this time with Bayesian hypothesis testing at the end cv = CrossValidation( clf, NFoldPartitioner(), errorfx=None, postproc=ChainNode((Confusion(labels=ds.UT), BayesConfusionHypothesis()))) res = cv(ds) # only two possible hypothesis with two classes assert_equals(len(res), 2) # the first hypothesis is the can't discriminate anything assert_equal(len(res.sa.hypothesis[0]), 1) assert_equal(len(res.sa.hypothesis[0][0]), 2) # and the hypothesis is actually less likely than the other one # (both classes can be distinguished) assert(np.e**res.samples[0,0] < np.e**res.samples[1,0]) def test_bayes_confusion_hyp(): from mvpa2.clfs.transerror import BayesConfusionHypothesis conf = np.array([ [ 10, 0, 5, 5], [ 0, 10, 5, 5], [ 5, 5, 10, 0], [ 5, 5, 0, 10] ]) conf = Dataset(conf, sa={'labels': ['A', 'B', 'C', 'D']}) bayes = BayesConfusionHypothesis(labels_attr='labels') skip_if_no_external('scipy') # uses factorial from scipy.misc hyptest = bayes(conf) # by default comes with all hypothesis and posterior probs assert_equal(hyptest.shape, (15,2)) assert_array_equal(hyptest.fa.stat, ['log(p(C|H))', 'log(p(H|C))']) # check order of hypothesis (coarse) assert_array_equal(hyptest.sa.hypothesis[0], [['A', 'B', 'C', 'D']]) assert_array_equal(hyptest.sa.hypothesis[-1], [['A'], ['B'], ['C'], ['D']]) # now with limited hypothesis (given with literal labels), set and in # non-log scale bayes = BayesConfusionHypothesis(labels_attr='labels', log=False, hypotheses=[[['A', 'B', 'C', 'D']], [['A', 'C',], ['B', 'D']], [['A', 'D',], ['B', 'C']], [['A'], ['B'], ['C'], ['D']]]) hyptest = bayes(conf) # also with custom hyp the post-probs must add up to 1 post_prob = hyptest.samples[:,1] assert_almost_equal(np.sum(post_prob), 1) # in this particular case ... assert(post_prob[3] - np.sum(post_prob[1:3]) < 0.02) def suite(): return unittest.makeSuite(ErrorsTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_transformers.py000066400000000000000000000114431202542755000214430ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA transformers.""" import unittest import numpy as np from mvpa2.base import externals from mvpa2.misc.transformers import Absolute, one_minus, rank_order, \ reverse_rank_order, l1_normed, l2_normed, OverAxis, \ DistPValue, first_axis_sum_not_zero from mvpa2.testing import * from mvpa2.testing.datasets import datasets from mvpa2.base import cfg class TransformerTests(unittest.TestCase): def setUp(self): self.d1 = np.array([ 1, 0, -1, -2, -3]) self.d2 = np.array([ 2.3, 0, -1, 2, -30, 1]) @reseed_rng() def test_absolute(self): # generate 100 values (gaussian noise mean -1000 -> all negative) out = Absolute(np.random.normal(-1000, size=100)) self.assertTrue(out.min() >= 0) self.assertTrue(len(out) == 100) def test_absolute2(self): target = self.d1 out = one_minus(np.arange(5)) self.assertTrue((out == target).all()) def test_first_axis_sum_not_zero(self): src = [[ 1, -22.9, 6.8, 0], [ -.8, 7, 0, 0.0], [88, 0, 0.0, 0], [0, 0, 0, 0.0]] target = np.array([ 3, 2, 1, 0]) out = first_axis_sum_not_zero(src) self.assertTrue((out == target).all()) def test_rank_order(self): nelements = len(self.d2) out = rank_order(self.d2) outr = reverse_rank_order(self.d2) uout = np.unique(out) uoutr = np.unique(outr) self.assertTrue((uout == np.arange(nelements)).all(), msg="We should get all indexes. Got just %s" % uout) self.assertTrue((uoutr == np.arange(nelements)).all(), msg="We should get all indexes. Got just %s" % uoutr) self.assertTrue((out+outr+1 == nelements).all()) self.assertTrue((out == [ 0, 3, 4, 1, 5, 2]).all()) def test_l2_norm(self): out = l2_normed(self.d2) self.assertTrue(np.abs(np.sum(out*out)-1.0) < 1e-10) def test_l1_norm(self): out = l1_normed(self.d2) self.assertTrue(np.abs(np.sum(np.abs(out))-1.0) < 1e-10) def test_over_axis(self): data = datasets['uni4large'].samples[:120,0].reshape((2,3,4,5)) # Simple transformer/combiner which collapses across given # dimension, e.g. sum for axis in [None, 0, 1, 2]: oversum = OverAxis(np.sum, axis=axis)(data) sum_ = np.sum(data, axis=axis) self.assertTrue(np.all(sum_ == oversum)) # Transformer which doesn't modify dimensionality of the data data = data.reshape((6, -1)) overnorm = OverAxis(l2_normed, axis=1)(data) self.assertTrue(np.linalg.norm(overnorm)!=1.0) for d in overnorm: self.assertTrue(np.abs(np.linalg.norm(d) - 1.0)<0.00001) overnorm = OverAxis(l2_normed, axis=0)(data) self.assertTrue(np.linalg.norm(overnorm)!=1.0) for d in overnorm.T: self.assertTrue(np.abs(np.linalg.norm(d) - 1.0)<0.00001) @reseed_rng() def test_dist_p_value(self): """Basic testing of DistPValue""" if not externals.exists('scipy'): return ndb = 200 ndu = 20 nperd = 2 pthr = 0.05 Nbins = 400 # Lets generate already normed data (on sphere) and add some nonbogus features datau = (np.random.normal(size=(nperd, ndb))) dist = np.sqrt((datau * datau).sum(axis=1)) datas = (datau.T / dist.T).T tn = datax = datas[0, :] dataxmax = np.max(np.abs(datax)) # now lets add true positive features tp = [-dataxmax * 1.1] * (ndu//2) + [dataxmax * 1.1] * (ndu//2) x = np.hstack((datax, tp)) # lets add just pure normal to it x = np.vstack((x, np.random.normal(size=x.shape))).T for distPValue in (DistPValue(), DistPValue(fpp=0.05)): result = distPValue(x) self.assertTrue((result>=0).all) self.assertTrue((result<=1).all) if cfg.getboolean('tests', 'labile', default='yes'): self.assertTrue(distPValue.ca.positives_recovered[0] > 10) self.assertTrue((np.array(distPValue.ca.positives_recovered) + np.array(distPValue.ca.nulldist_number) == ndb + ndu).all()) self.assertEqual(distPValue.ca.positives_recovered[1], 0) def suite(): return unittest.makeSuite(TransformerTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_usecases.py000066400000000000000000000124321202542755000205300ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for various use cases users reported mis-behaving""" import unittest import numpy as np from mvpa2.testing.tools import ok_, assert_array_equal, assert_true, \ assert_false, assert_equal, assert_not_equal, reseed_rng @reseed_rng() def _test_mcasey20120222(): # http://lists.alioth.debian.org/pipermail/pkg-exppsy-pymvpa/2012q1/002034.html # This one is conditioned on allowing # of samples to be changed # by the mapper provided to MappedClassifier. See # https://github.com/yarikoptic/PyMVPA/tree/_tent/allow_ch_nsamples import numpy as np from mvpa2.datasets.base import dataset_wizard from mvpa2.generators.partition import NFoldPartitioner from mvpa2.mappers.base import ChainMapper from mvpa2.mappers.svd import SVDMapper from mvpa2.mappers.fx import mean_group_sample from mvpa2.clfs.svm import LinearCSVMC from mvpa2.clfs.meta import MappedClassifier from mvpa2.measures.base import CrossValidation mapper = ChainMapper([mean_group_sample(['targets','chunks']), SVDMapper()]) clf = MappedClassifier(LinearCSVMC(), mapper) cvte = CrossValidation(clf, NFoldPartitioner(), enable_ca=['repetition_results', 'stats']) ds = dataset_wizard( samples=np.arange(32).reshape((8, -1)), targets=[1, 1, 2, 2, 1, 1, 2, 2], chunks=[1, 1, 1, 1, 2, 2, 2, 2]) errors = cvte(ds) @reseed_rng() def test_sifter_superord_usecase(): from mvpa2.misc.data_generators import normal_feature_dataset from mvpa2.clfs.svm import LinearCSVMC # fast one to use for tests from mvpa2.measures.base import CrossValidation from mvpa2.base.node import ChainNode from mvpa2.generators.partition import NFoldPartitioner from mvpa2.generators.base import Sifter # Let's simulate the beast -- 6 categories total groupped into 3 # super-ordinate, and actually without any 'superordinate' effect # since subordinate categories independent ds = normal_feature_dataset(nlabels=6, snr=100, # pure signal! ;) perlabel=30, nfeatures=6, nonbogus_features=range(6), nchunks=5) ds.sa['subord'] = ds.sa.targets.copy() ds.sa['superord'] = ['super%d' % (int(i[1])%3,) for i in ds.targets] # 3 superord categories # let's override original targets just to be sure that we aren't relying on them ds.targets[:] = 0 npart = ChainNode([ ## so we split based on superord NFoldPartitioner(len(ds.sa['superord'].unique), attr='subord'), ## so it should select only those splits where we took 1 from ## each of the superord categories leaving things in balance Sifter([('partitions', 2), ('superord', { 'uvalues': ds.sa['superord'].unique, 'balanced': True}) ]), ], space='partitions') # and then do your normal where clf is space='superord' clf = LinearCSVMC(space='superord') cvte_regular = CrossValidation(clf, NFoldPartitioner(), errorfx=lambda p,t: np.mean(p==t)) cvte_super = CrossValidation(clf, npart, errorfx=lambda p,t: np.mean(p==t)) accs_regular = cvte_regular(ds) accs_super = cvte_super(ds) # With sifting we should get only 2^3 = 8 splits assert(len(accs_super) == 8) # I don't think that this would ever fail, so not marking it labile assert(np.mean(accs_regular) > .8) assert(np.mean(accs_super) < .6) def _test_edmund_chong_20120907(): # commented out to avoid syntax warnings while compiling # from mvpa2.suite import * from mvpa2.testing.datasets import datasets repeater = Repeater(count=20) partitioner = ChainNode([NFoldPartitioner(cvtype=1), Balancer(attr='targets', count=1, # for real data > 1 limit='partitions', apply_selection=True )], space='partitions') clf = LinearCSVMC() #choice of classifier permutator = AttributePermutator('targets', limit={'partitions': 1}, count=1) null_cv = CrossValidation( clf, ChainNode([partitioner, permutator], space=partitioner.get_space()), errorfx=mean_mismatch_error) distr_est = MCNullDist(repeater, tail='left', measure=null_cv, enable_ca=['dist_samples']) cvte = CrossValidation(clf, partitioner, errorfx=mean_mismatch_error, null_dist=distr_est, enable_ca=['stats']) errors = cvte(datasets['uni2small']) pymvpa2-2.2.0/mvpa2/tests/test_verbosity.py000066400000000000000000000145301202542755000207440ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA verbose and debug output""" import unittest, re from StringIO import StringIO from mvpa2.base.verbosity import OnceLogger from mvpa2.base import verbose, error if __debug__: from mvpa2.base import debug debug.register('1', 'id 1') # needed for testing debug.register('2', 'id 2') ## XXX There must be smth analogous in python... don't know it yet # And it is StringIO #class StringStream(object): # def __init__(self): # self.__str = "" # # def __repr__(self): # return self.__str # # def write(self, s): # self.__str += s # # def clean(self): # self.__str = "" # class VerboseOutputTest(unittest.TestCase): def setUp(self): self.msg = "Test level 2" # output stream self.sout = StringIO() self.once = OnceLogger(handlers=[self.sout]) # set verbose to 4th level self.__oldverbosehandlers = verbose.handlers self.__oldverbose_level = verbose.level verbose.handlers = [] # so debug doesn't spoil it verbose.level = 4 if __debug__: self.__olddebughandlers = debug.handlers self.__olddebugactive = debug.active self.__olddebugmetrics = debug.metrics debug.active = ['1', '2', 'SLC'] debug.handlers = [self.sout] debug.offsetbydepth = False verbose.handlers = [self.sout] def tearDown(self): if __debug__: debug.active = self.__olddebugactive debug.handlers = self.__olddebughandlers debug.metrics = self.__olddebugmetrics debug.offsetbydepth = True verbose.handlers = self.__oldverbosehandlers verbose.level = self.__oldverbose_level self.sout.close() def test_verbose_above(self): """Test if it doesn't output at higher levels""" verbose(5, self.msg) self.assertEqual(self.sout.getvalue(), "") def test_verbose_below(self): """Test if outputs at lower levels and indents by default with spaces """ verbose(2, self.msg) self.assertEqual(self.sout.getvalue(), " %s\n" % self.msg) def test_verbose_indent(self): """Test indent symbol """ verbose.indent = "." verbose(2, self.msg) self.assertEqual(self.sout.getvalue(), "..%s\n" % self.msg) verbose.indent = " " # restore def test_verbose_negative(self): """Test if chokes on negative level""" self.assertRaises( ValueError, verbose._set_level, -10 ) def test_no_lf(self): """Test if it works fine with no newline (LF) symbol""" verbose(2, self.msg, lf=False) verbose(2, " continue ", lf=False) verbose(2, "end") verbose(0, "new %s" % self.msg) self.assertEqual(self.sout.getvalue(), " %s continue end\nnew %s\n" % \ (self.msg, self.msg)) def test_cr(self): """Test if works fine with carriage return (cr) symbol""" verbose(2, self.msg, cr=True) verbose(2, "rewrite", cr=True) verbose(1, "rewrite 2", cr=True) verbose(1, " add", cr=False, lf=False) verbose(1, " finish") target = '\r %s\r \rrewrite' % self.msg + \ '\r \rrewrite 2 add finish\n' self.assertEqual(self.sout.getvalue(), target) def test_once_logger(self): """Test once logger""" self.once("X", self.msg) self.once("X", self.msg) self.assertEqual(self.sout.getvalue(), self.msg+"\n") self.once("Y", "XXX", 2) self.once("Y", "XXX", 2) self.once("Y", "XXX", 2) self.assertEqual(self.sout.getvalue(), self.msg+"\nXXX\nXXX\n") def test_error(self): """Test error message""" error(self.msg, critical=False) # should not exit self.assertTrue(self.sout.getvalue().startswith("ERROR")) if __debug__: def test_debug(self): verbose.handlers = [] # so debug doesn't spoil it debug.active = ['1', '2', 'SLC'] debug.metrics = debug._known_metrics.keys() # do not offset for this test debug('SLC', self.msg, lf=False) self.assertRaises(ValueError, debug, 3, 'bugga') #Should complain about unknown debug id svalue = self.sout.getvalue() regexp = "\[SLC\] DBG(?:{.*})?: %s" % self.msg rematch = re.match(regexp, svalue) self.assertTrue(rematch, msg="Cannot match %s with regexp %s" % (svalue, regexp)) # find metrics self.assertTrue('RSS/VMS:' in svalue, msg="Cannot find vmem metric in " + svalue) self.assertTrue('>test_verbosity:' in svalue, msg="Cannot find tbc metric in " + svalue) self.assertTrue(' sec' in svalue, msg="Cannot find tbc metric in " + svalue) def test_debug_rgexp(self): verbose.handlers = [] # so debug doesn't spoil it debug.active = ['.*'] # we should have enabled all of them self.assertEqual(set(debug.active), set(debug.registered.keys())) debug.active = ['S.*', 'CLF'] self.assertEqual(set(debug.active), set(filter(lambda x:x.startswith('S'), debug.registered.keys())+['CLF'])) debug.active = ['SG', 'CLF'] self.assertEqual(set(debug.active), set(['SG', 'CLF']), msg="debug should do full line matching") debug.offsetbydepth = True # TODO: More tests needed for debug output testing def suite(): return unittest.makeSuite(VerboseOutputTest) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_waveletmapper.py000066400000000000000000000131601202542755000215700ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA Wavelet mappers""" from mvpa2.testing import * from mvpa2.testing.datasets import datasets skip_if_no_external('pywt') from mvpa2.base import externals import unittest from mvpa2.support.copy import deepcopy import numpy as np from mvpa2.mappers.boxcar import BoxcarMapper from mvpa2.mappers.wavelet import * from mvpa2.datasets import Dataset class WaveletMappersTests(unittest.TestCase): def test_simple_wdm(self): """ """ ds = datasets['uni2medium'] d2d = ds.samples ws = 15 # size of timeline for wavelet sp = np.arange(ds.nsamples-ws*2) + ws # create 3D instance (samples x timepoints x channels) bcm = BoxcarMapper(sp, ws) d3d = bcm.forward(d2d) # use wavelet mapper wdm = WaveletTransformationMapper() d3d_wd = wdm.forward(d3d) d3d_swap = d3d.swapaxes(1,2) self.assertRaises(ValueError, WaveletTransformationMapper, wavelet='bogus') self.assertRaises(ValueError, WaveletTransformationMapper, mode='bogus') # use wavelet mapper for wdm, wdm_swap in ((WaveletTransformationMapper(), WaveletTransformationMapper(dim=2)), (WaveletPacketMapper(), WaveletPacketMapper(dim=2))): for dd, dd_swap in ((d3d, d3d_swap), (d2d, None)): dd_wd = wdm.forward(dd) if dd_swap is not None: dd_wd_swap = wdm_swap.forward(dd_swap) self.assertTrue((dd_wd == dd_wd_swap.swapaxes(1,2)).all(), msg="We should have got same result with swapped " "dimensions and explicit mentioining of it. " "Got %s and %s" % (dd_wd, dd_wd_swap)) # some sanity checks self.assertTrue(dd_wd.shape[0] == dd.shape[0]) if not isinstance(wdm, WaveletPacketMapper): # we can do reverse only for DWT dd_rev = wdm.reverse(dd_wd) # inverse transform might be not exactly as the # input... but should be very close ;-) self.assertEqual(dd_rev.shape, dd.shape, msg="Shape should be the same after iDWT") diff = np.linalg.norm(dd - dd_rev) ornorm = np.linalg.norm(dd) self.assertTrue(diff/ornorm < 1e-10) def test_simple_wp1_level(self): """ """ ds = datasets['uni2large'] d2d = ds.samples ws = 50 # size of timeline for wavelet sp = (np.arange(ds.nsamples - ws*2) + ws)[:4] # create 3D instance (samples x timepoints x channels) bcm = BoxcarMapper(sp, ws) d3d = bcm.forward(d2d) # use wavelet mapper wdm = WaveletPacketMapper(level=2, wavelet='sym2') d3d_wd = wdm.forward(d3d) # Check dimensionality d3d_wds, d3ds = d3d_wd.shape, d3d.shape self.assertTrue(len(d3d_wds) == len(d3ds)+1) self.assertTrue(d3d_wds[1] * d3d_wds[2] >= d3ds[1]) self.assertTrue(d3d_wds[0] == d3ds[0]) self.assertTrue(d3d_wds[-1] == d3ds[-1]) #print d2d.shape, d3d.shape, d3d_wd.shape if externals.exists('pywt wp reconstruct'): # Test reverse -- should be identical # we can do reverse only for DWT d3d_rev = wdm.reverse(d3d_wd) # inverse transform might be not exactly as the # input... but should be very close ;-) self.assertEqual(d3d_rev.shape, d3d.shape, msg="Shape should be the same after iDWT") diff = np.linalg.norm(d3d - d3d_rev) ornorm = np.linalg.norm(d3d) skip_if_no_external('pywt wp reconstruct fixed') self.assertTrue(diff/ornorm < 1e-10) else: self.assertRaises(NotImplementedError, wdm.reverse, d3d_wd) ##REF: Name was automagically refactored def _test_compare_to_old(self): """Good just to compare if I didn't screw up anything... treat it as a regression test """ import mvpa2.mappers.wavelet_ as wavelet_ ds = datasets['uni2medium'] d2d = ds.samples ws = 16 # size of timeline for wavelet sp = np.arange(ds.nsamples-ws*2) + ws # create 3D instance (samples x timepoints x channels) bcm = BoxcarMapper(sp, ws) d3d = bcm.forward(d2d) # use wavelet mapper for wdm, wdm_ in ((WaveletTransformationMapper(), wavelet_.WaveletTransformationMapper()), (WaveletPacketMapper(), wavelet_.WaveletPacketMapper()),): d3d_wd = wdm(d3d) d3d_wd_ = wdm_(d3d) self.assertTrue((d3d_wd == d3d_wd_).all(), msg="We should have got same result with old and new code. " "Got %s and %s" % (d3d_wd, d3d_wd_)) def suite(): return unittest.makeSuite(WaveletMappersTests) if __name__ == '__main__': import runner pymvpa2-2.2.0/mvpa2/tests/test_zscoremapper.py000066400000000000000000000162251202542755000214330ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Unit tests for PyMVPA ZScore mapper""" from mvpa2.base import externals from mvpa2.support.copy import deepcopy import numpy as np from mvpa2.datasets.base import dataset_wizard from mvpa2.mappers.zscore import ZScoreMapper, zscore from mvpa2.testing.tools import assert_array_almost_equal, assert_array_equal, \ assert_equal, assert_raises, ok_, nodebug from mvpa2.misc.support import idhash from mvpa2.testing.datasets import datasets def test_mapper_vs_zscore(): """Test by comparing to results of elderly z-score function """ # data: 40 sample feature line in 20d space (40x20; samples x features) dss = [ dataset_wizard(np.concatenate( [np.arange(40) for i in range(20)]).reshape(20,-1).T, targets=1, chunks=1), ] + datasets.values() for ds in dss: ds1 = deepcopy(ds) ds2 = deepcopy(ds) zsm = ZScoreMapper(chunks_attr=None) assert_raises(RuntimeError, zsm.forward, ds1.samples) idhashes = (idhash(ds1), idhash(ds1.samples)) zsm.train(ds1) idhashes_train = (idhash(ds1), idhash(ds1.samples)) assert_equal(idhashes, idhashes_train) # forward dataset ds1z_ds = zsm.forward(ds1) idhashes_forwardds = (idhash(ds1), idhash(ds1.samples)) # must not modify samples in place! assert_equal(idhashes, idhashes_forwardds) # forward samples explicitly ds1z = zsm.forward(ds1.samples) idhashes_forward = (idhash(ds1), idhash(ds1.samples)) assert_equal(idhashes, idhashes_forward) zscore(ds2, chunks_attr=None) assert_array_almost_equal(ds1z, ds2.samples) assert_array_equal(ds1.samples, ds.samples) @nodebug(['ID_IN_REPR', 'MODULE_IN_REPR']) def test_zcore_repr(): # Just basic test if everything is sane... no proper comparison for m in (ZScoreMapper(chunks_attr=None), ZScoreMapper(params=(3, 1)), ZScoreMapper()): mr = eval(repr(m)) ok_(isinstance(mr, ZScoreMapper)) def test_zscore(): """Test z-scoring transformation """ # dataset: mean=2, std=1 samples = np.array((0, 1, 3, 4, 2, 2, 3, 1, 1, 3, 3, 1, 2, 2, 2, 2)).\ reshape((16, 1)) data = dataset_wizard(samples.copy(), targets=range(16), chunks=[0] * 16) assert_equal(data.samples.mean(), 2.0) assert_equal(data.samples.std(), 1.0) data_samples = data.samples.copy() zscore(data, chunks_attr='chunks') # copy should stay intact assert_equal(data_samples.mean(), 2.0) assert_equal(data_samples.std(), 1.0) # we should be able to operate on ndarrays # But we can't change type inplace for an array, can't we? assert_raises(TypeError, zscore, data_samples, chunks_attr=None) # so lets do manually data_samples = data_samples.astype(float) zscore(data_samples, chunks_attr=None) assert_array_equal(data.samples, data_samples) # check z-scoring check = np.array([-2, -1, 1, 2, 0, 0, 1, -1, -1, 1, 1, -1, 0, 0, 0, 0], dtype='float64').reshape(16, 1) assert_array_equal(data.samples, check) data = dataset_wizard(samples.copy(), targets=range(16), chunks=[0] * 16) zscore(data, chunks_attr=None) assert_array_equal(data.samples, check) # check z-scoring taking set of labels as a baseline data = dataset_wizard(samples.copy(), targets=[0, 2, 2, 2, 1] + [2] * 11, chunks=[0] * 16) zscore(data, param_est=('targets', [0, 1])) assert_array_equal(samples, data.samples + 1.0) # check that zscore modifies in-place; only guaranteed if no upcasting is # necessary samples = samples.astype('float') data = dataset_wizard(samples, targets=[0, 2, 2, 2, 1] + [2] * 11, chunks=[0] * 16) zscore(data, param_est=('targets', [0, 1])) assert_array_equal(samples, data.samples) # these might be duplicating code above -- but twice is better than nothing # dataset: mean=2, std=1 raw = np.array((0, 1, 3, 4, 2, 2, 3, 1, 1, 3, 3, 1, 2, 2, 2, 2)) # dataset: mean=12, std=1 raw2 = np.array((0, 1, 3, 4, 2, 2, 3, 1, 1, 3, 3, 1, 2, 2, 2, 2)) + 10 # zscore target check = [-2, -1, 1, 2, 0, 0, 1, -1, -1, 1, 1, -1, 0, 0, 0, 0] ds = dataset_wizard(raw.copy(), targets=range(16), chunks=[0] * 16) pristine = dataset_wizard(raw.copy(), targets=range(16), chunks=[0] * 16) zm = ZScoreMapper() # should do global zscore by default zm.train(ds) # train assert_array_almost_equal(zm.forward(ds), np.transpose([check])) # should not modify the source assert_array_equal(pristine, ds) # if we tell it a different mean it should obey the order zm = ZScoreMapper(params=(3,1)) zm.train(ds) assert_array_almost_equal(zm.forward(ds), np.transpose([check]) - 1 ) assert_array_equal(pristine, ds) # let's look at chunk-wise z-scoring ds = dataset_wizard(np.hstack((raw.copy(), raw2.copy())), targets=range(32), chunks=[0] * 16 + [1] * 16) # by default chunk-wise zm = ZScoreMapper() zm.train(ds) # train assert_array_almost_equal(zm.forward(ds), np.transpose([check + check])) # we should be able to do that same manually zm = ZScoreMapper(params={0: (2,1), 1: (12,1)}) zm.train(ds) # train assert_array_almost_equal(zm.forward(ds), np.transpose([check + check])) # And just a smoke test for warnings reporting whenever # of # samples per chunk is low. # on 1 sample per chunk zds1 = ZScoreMapper(chunks_attr='chunks', auto_train=True)( ds[[0, -1]]) ok_(np.all(zds1.samples == 0)) # they all should be 0 # on 2 samples per chunk zds2 = ZScoreMapper(chunks_attr='chunks', auto_train=True)( ds[[0, 1, -10, -1]]) assert_array_equal(np.unique(zds2.samples), [-1., 1]) # they all should be -1 or 1 # on 3 samples per chunk -- different warning ZScoreMapper(chunks_attr='chunks', auto_train=True)( ds[[0, 1, 2, -3, -2, -1]]) # test if std provided as a list not as an array is handled # properly -- should zscore all features (not just first/none # as it was before) ds = dataset_wizard(np.arange(32).reshape((8,-1)), targets=range(8), chunks=[0] * 8) means = [0, 1, -10, 10] std0 = np.std(ds[:, 0]) # std deviation of first one stds = [std0, 10, .1, 1] zm = ZScoreMapper(params=(means, stds), auto_train=True) dsz = zm(ds) assert_array_almost_equal((np.mean(ds, axis=0) - np.asanyarray(means))/np.array(stds), np.mean(dsz, axis=0)) assert_array_almost_equal(np.std(ds, axis=0)/np.array(stds), np.std(dsz, axis=0)) pymvpa2-2.2.0/mvpa2/tutorial_suite.py000077500000000000000000000070721202542755000175770ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## import os import numpy as np # later replace with from mvpa2.suite import * tutorial_data_path = mvpa2.cfg.get('location', 'tutorial data', default=os.path.curdir) def get_raw_haxby2001_data(path=os.path.join(tutorial_data_path, 'data'), roi='vt'): if roi is 0: # this means something special in the searchlight tutorial nimg = nb.load(os.path.join(path, 'mask_hoc.nii.gz')) nimg_brain = nb.load(os.path.join(path, 'mask_brain.nii.gz')) tmpmask = nimg.get_data() == roi # trim it down to the lower anterior quadrant tmpmask[:, :, tmpmask.shape[-1]/2:] = False tmpmask[:, :tmpmask.shape[1]/2] = False tmpmask[nimg_brain.get_data() > 0] = False mask = nb.Nifti1Image(tmpmask.astype(int), None, nimg.get_header()) attr = SampleAttributes(os.path.join(path, 'attributes.txt')) ds = fmri_dataset(samples=os.path.join(path, 'bold.nii.gz'), targets=attr.targets, chunks=attr.chunks, mask=mask) return ds else: return load_datadb_tutorial_data(path=path, roi=roi) def get_haxby2001_data(path=None, roi='vt'): if path is None: ds = get_raw_haxby2001_data(roi=roi) else: ds = get_raw_haxby2001_data(path, roi=roi) # do chunkswise linear detrending on dataset poly_detrend(ds, polyord=1, chunks_attr='chunks', space='time_coords') # mark the odd and even runs rnames = {0: 'even', 1: 'odd'} ds.sa['runtype'] = [rnames[c % 2] for c in ds.sa.chunks] # compute the mean sample per condition and odd vs. even runs # aka "constructive interference" ds = ds.get_mapped(mean_group_sample(['targets', 'runtype'])) # XXX suboptimal order: should be zscore->avg # but then: where is the difference between this and _alternative()? # zscore dataset relative to baseline ('rest') mean zscore(ds, param_est=('targets', ['rest'])) # exclude the rest condition from the dataset ds = ds[ds.sa.targets != 'rest'] return ds def get_haxby2001_data_alternative(path=None, roi='vt', grp_avg=True): if path is None: ds = get_raw_haxby2001_data(roi=roi) else: ds = get_raw_haxby2001_data(path, roi=roi) # do chunkswise linear detrending on dataset poly_detrend(ds, polyord=1, chunks_attr='chunks', space='time_coords') # zscore dataset relative to baseline ('rest') mean zscore(ds, param_est=('targets', ['rest'])) # exclude the rest condition from the dataset ds = ds[ds.sa.targets != 'rest'] # mark the odd and even runs rnames = {0: 'even', 1: 'odd'} ds.sa['runtype'] = [rnames[c % 2] for c in ds.sa.chunks] if grp_avg: # compute the mean sample per condition and odd vs. even runs # aka "constructive interference" ds = ds.get_mapped(mean_group_sample(['targets', 'runtype'])) return ds def get_haxby2001_clf(): clf = kNN(k=1, dfx=one_minus_correlation, voting='majority') return clf def load_tutorial_results(name, path=os.path.join(tutorial_data_path, 'results')): return h5load(os.path.join(path, name + '.hdf5')) pymvpa2-2.2.0/py3tool.py000066400000000000000000000067171202542755000151110ustar00rootroot00000000000000#!/usr/bin/env python3 """ Convert *py files with lib2to3. Taken from MDP and numpy. """ import shutil import os import sys import fnmatch import lib2to3.main from io import StringIO EXTRA_2TO3_FLAGS = {'*': '-x import'} BASE = os.path.normpath(os.path.join(os.path.dirname(__file__), '..')) TEMP = os.path.normpath(os.path.join(BASE, '_py3k')) def custom_mangling(filename): pass def walk_sync(dir1, dir2, _seen=None): if _seen is None: seen = {} else: seen = _seen if not dir1.endswith(os.path.sep): dir1 = dir1 + os.path.sep # Walk through stuff (which we haven't yet gone through) in dir1 for root, dirs, files in os.walk(dir1): sub = root[len(dir1):] if sub in seen: dirs = [x for x in dirs if x not in seen[sub][0]] files = [x for x in files if x not in seen[sub][1]] seen[sub][0].extend(dirs) seen[sub][1].extend(files) else: seen[sub] = (dirs, files) if not dirs and not files: continue yield os.path.join(dir1, sub), os.path.join(dir2, sub), dirs, files if _seen is None: # Walk through stuff (which we haven't yet gone through) in dir2 for root2, root1, dirs, files in walk_sync(dir2, dir1, _seen=seen): yield root1, root2, dirs, files def sync_2to3(src, dst, clean=False): to_convert = [] for src_dir, dst_dir, dirs, files in walk_sync(src, dst): for fn in dirs + files: src_fn = os.path.join(src_dir, fn) dst_fn = os.path.join(dst_dir, fn) # skip temporary etc. files if fn.startswith('.#') or fn.endswith('~'): continue # remove non-existing if os.path.exists(dst_fn) and not os.path.exists(src_fn): if clean: if os.path.isdir(dst_fn): shutil.rmtree(dst_fn) else: os.unlink(dst_fn) continue # make directories if os.path.isdir(src_fn): if not os.path.isdir(dst_fn): os.makedirs(dst_fn) continue dst_dir = os.path.dirname(dst_fn) if os.path.isfile(dst_fn) and not os.path.isdir(dst_dir): os.makedirs(dst_dir) # don't replace up-to-date files try: if os.path.isfile(dst_fn) and \ os.stat(dst_fn).st_mtime >= os.stat(src_fn).st_mtime: continue except OSError: pass # copy file shutil.copyfile(src_fn, dst_fn) # add .py files to 2to3 list if dst_fn.endswith('.py'): to_convert.append((src_fn, dst_fn)) # run 2to3 flag_sets = {} for fn, dst_fn in to_convert: flag = '' for pat, opt in EXTRA_2TO3_FLAGS.items(): if fnmatch.fnmatch(fn, pat): flag = opt break flag_sets.setdefault(flag, []).append(dst_fn) for flags, filenames in flag_sets.items(): if flags == 'skip': continue _old_stdout = sys.stdout try: sys.stdout = StringIO() lib2to3.main.main("lib2to3.fixes", ['-w'] + flags.split()+filenames) finally: sys.stdout = _old_stdout for fn, dst_fn in to_convert: # perform custom mangling custom_mangling(dst_fn) pymvpa2-2.2.0/setup.cfg.win000066400000000000000000000002441202542755000155300ustar00rootroot00000000000000[build_ext] # configure paths for libsvm include-dirs = 3rd/libsvm library-dirs = 3rd/libsvm [build] # configure python to use a free compiler compiler = mingw32 pymvpa2-2.2.0/setup.py000077500000000000000000000154761202542755000146450ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Python distutils setup for PyMVPA""" from numpy.distutils.core import setup, Extension import os import sys from glob import glob # some config settings bind_libsvm = 'local' # choices: 'local', 'system', None libsvmc_extra_sources = [] libsvmc_include_dirs = [] libsvmc_libraries = [] extra_link_args = [] libsvmc_library_dirs = [] # platform-specific settings if sys.platform == "darwin": extra_link_args.append("-bundle") if sys.platform.startswith('linux'): # need to look for numpy (header location changes with v1.3) from numpy.distutils.misc_util import get_numpy_include_dirs libsvmc_include_dirs += get_numpy_include_dirs() # when libsvm is forced -- before it was used only in cases # when libsvm was available at system level, hence we switch # from local to system at this point # TODO: Deprecate --with-libsvm for 0.5 for arg in ('--with-libsvm', '--with-system-libsvm'): if not sys.argv.count(arg): continue # clean argv if necessary (or distutils will complain) sys.argv.remove(arg) # assure since default is 'auto' wouldn't fail if it is N/A bind_libsvm = 'system' # when no libsvm bindings are requested explicitly if sys.argv.count('--no-libsvm'): # clean argv if necessary (or distutils will complain) sys.argv.remove('--no-libsvm') bind_libsvm = None # if requested: if bind_libsvm == 'local': # we will provide libsvm sources later on # if libsvm.a is available locally -- use it #if os.path.exists(os.path.join('build', 'libsvm', 'libsvm.a')): libsvm_3rd_path = os.path.join('3rd', 'libsvm') libsvmc_include_dirs += [libsvm_3rd_path] libsvmc_extra_sources = [os.path.join(libsvm_3rd_path, 'svm.cpp')] elif bind_libsvm == 'system': # look for libsvm in some places, when local one is not used libsvmc_libraries += ['svm'] if not sys.platform.startswith('win'): libsvmc_include_dirs += [ '/usr/include/libsvm-3.0/libsvm', '/usr/include/libsvm-2.0/libsvm', '/usr/include/libsvm', '/usr/local/include/libsvm', '/usr/local/include/libsvm-2.0/libsvm', '/usr/local/include'] else: # no clue on windows pass elif bind_libsvm is None: pass else: raise ValueError("Shouldn't happen that we get bind_libsvm=%r" % (bind_libsvm,)) # define the extension modules libsvmc_ext = Extension( 'mvpa2.clfs.libsvmc._svmc', sources = libsvmc_extra_sources + ['mvpa2/clfs/libsvmc/svmc.i'], include_dirs = libsvmc_include_dirs, library_dirs = libsvmc_library_dirs, libraries = libsvmc_libraries, language = 'c++', extra_link_args = extra_link_args, swig_opts = ['-I' + d for d in libsvmc_include_dirs]) smlrc_ext = Extension( 'mvpa2.clfs.libsmlrc.smlrc', sources = [ 'mvpa2/clfs/libsmlrc/smlr.c' ], #library_dirs = library_dirs, libraries = ['m'], # extra_compile_args = ['-O0'], extra_link_args = extra_link_args, language = 'c') ext_modules = [smlrc_ext] if bind_libsvm: ext_modules.append(libsvmc_ext) # Notes on the setup # Version scheme is: major.minor.patch # define the setup def setup_package(): # Perform 2to3 if needed local_path = os.path.dirname(os.path.abspath(sys.argv[0])) src_path = local_path if sys.version_info[0] == 3: src_path = os.path.join(local_path, 'build', 'py3k') import py3tool print("Converting to Python3 via 2to3...") py3tool.sync_2to3('mvpa2', os.path.join(src_path, 'mvpa2')) py3tool.sync_2to3('3rd', os.path.join(src_path, '3rd')) # Run build os.chdir(src_path) sys.path.insert(0, src_path) setup(name = 'pymvpa2', version = '2.0.1', author = 'Michael Hanke, Yaroslav Halchenko, Per B. Sederberg', author_email = 'pkg-exppsy-pymvpa@lists.alioth.debian.org', license = 'MIT License', url = 'http://www.pymvpa.org', description = 'Multivariate pattern analysis', long_description = \ "PyMVPA is a Python module intended to ease pattern classification " \ "analyses of large datasets. It provides high-level abstraction of " \ "typical processing steps and a number of implementations of some " \ "popular algorithms. While it is not limited to neuroimaging data " \ "it is eminently suited for such datasets.\n" \ "PyMVPA is truly free software (in every respect) and " \ "additionally requires nothing but free-software to run.", # please maintain alphanumeric order packages = [ 'mvpa2', 'mvpa2.algorithms', 'mvpa2.atlases', 'mvpa2.base', 'mvpa2.clfs', 'mvpa2.clfs.libsmlrc', 'mvpa2.clfs.libsvmc', 'mvpa2.clfs.skl', 'mvpa2.clfs.sg', 'mvpa2.datasets', 'mvpa2.datasets.sources', 'mvpa2.featsel', 'mvpa2.kernels', 'mvpa2.mappers', 'mvpa2.generators', 'mvpa2.measures', 'mvpa2.misc', 'mvpa2.misc.bv', 'mvpa2.misc.fsl', 'mvpa2.misc.io', 'mvpa2.misc.plot', 'mvpa2.support', 'mvpa2.support.bayes', 'mvpa2.support.nipy', 'mvpa2.support.ipython', 'mvpa2.testing', 'mvpa2.tests', 'mvpa2.tests.badexternals', ], data_files = [('mvpa2', ['mvpa2/COMMIT_HASH']), ('mvpa2/data', [f for f in glob(os.path.join('mvpa2', 'data', '*')) if os.path.isfile(f)]), ('mvpa2/data/bv', [f for f in glob(os.path.join('mvpa2', 'data', 'bv', '*')) if os.path.isfile(f)])], scripts = glob(os.path.join('bin', '*')), ext_modules = ext_modules ) if __name__ == '__main__': setup_package() pymvpa2-2.2.0/tools/000077500000000000000000000000001202542755000142535ustar00rootroot00000000000000pymvpa2-2.2.0/tools/Makefile000066400000000000000000000002231202542755000157100ustar00rootroot00000000000000TARGETS=pdfbook TDIR=../build/tools all: $(TARGETS) pdfbook: mkdir -p $(TDIR) gcc pdfbook.c -o $(TDIR)/pdfbook clean:: rm -f $(TDIR)/pdfbook pymvpa2-2.2.0/tools/apigen.py000066400000000000000000000362411202542755000160760ustar00rootroot00000000000000"""Attempt to generate templates for module reference with Sphinx XXX - we exclude extension modules To include extension modules, first identify them as valid in the ``_uri2path`` method, then handle them in the ``_parse_module`` script. We get functions and classes by parsing the text of .py files. Alternatively we could import the modules for discovery, and we'd have to do that for extension modules. This would involve changing the ``_parse_module`` method to work via import and introspection, and might involve changing ``discover_modules`` (which determines which files are modules, and therefore which module URIs will be passed to ``_parse_module``). NOTE: this is a modified version of a script originally shipped with the PyMVPA project, which we've adapted for NIPY use. PyMVPA and NIPY are both BSD-licensed projects. """ # Stdlib imports import os import re # Functions and classes class ApiDocWriter(object): ''' Class for automatic detection and parsing of API docs to Sphinx-parsable reST format''' # only separating first two levels rst_section_levels = ['*', '=', '-', '~', '^'] def __init__(self, package_name, rst_extension='.rst', package_skip_patterns=None, module_skip_patterns=None, ): ''' Initialize package for parsing Parameters ---------- package_name : string Name of the top-level package. *package_name* must be the name of an importable package rst_extension : string, optional Extension for reST files, default '.rst' package_skip_patterns : None or sequence of {strings, regexps} Sequence of strings giving URIs of packages to be excluded Operates on the package path, starting at (including) the first dot in the package path, after *package_name* - so, if *package_name* is ``sphinx``, then ``sphinx.util`` will result in ``.util`` being passed for earching by these regexps. If is None, gives default. Default is: ['\.tests$'] module_skip_patterns : None or sequence Sequence of strings giving URIs of modules to be excluded Operates on the module name including preceding URI path, back to the first dot after *package_name*. For example ``sphinx.util.console`` results in the string to search of ``.util.console`` If is None, gives default. Default is: ['\.setup$', '\._'] ''' if package_skip_patterns is None: package_skip_patterns = ['\\.tests$'] if module_skip_patterns is None: module_skip_patterns = ['\\.setup$', '\\._'] self.package_name = package_name self.rst_extension = rst_extension self.package_skip_patterns = package_skip_patterns self.module_skip_patterns = module_skip_patterns def get_package_name(self): return self._package_name def set_package_name(self, package_name): ''' Set package_name >>> docwriter = ApiDocWriter('sphinx') >>> import sphinx >>> docwriter.root_path == sphinx.__path__[0] True >>> docwriter.package_name = 'docutils' >>> import docutils >>> docwriter.root_path == docutils.__path__[0] True ''' # It's also possible to imagine caching the module parsing here self._package_name = package_name self.root_module = __import__(package_name) self.root_path = self.root_module.__path__[0] self.written_modules = None package_name = property(get_package_name, set_package_name, None, 'get/set package_name') def _get_object_name(self, line): ''' Get second token in line >>> docwriter = ApiDocWriter('sphinx') >>> docwriter._get_object_name(" def func(): ") 'func' >>> docwriter._get_object_name(" class Klass(object): ") 'Klass' >>> docwriter._get_object_name(" class Klass: ") 'Klass' ''' name = line.split()[1].split('(')[0].strip() # in case we have classes which are not derived from object # ie. old style classes return name.rstrip(':') def _uri2path(self, uri): ''' Convert uri to absolute filepath Parameters ---------- uri : string URI of python module to return path for Returns ------- path : None or string Returns None if there is no valid path for this URI Otherwise returns absolute file system path for URI Examples -------- >>> docwriter = ApiDocWriter('sphinx') >>> import sphinx >>> modpath = sphinx.__path__[0] >>> res = docwriter._uri2path('sphinx.builder') >>> res == os.path.join(modpath, 'builder.py') True >>> res = docwriter._uri2path('sphinx') >>> res == os.path.join(modpath, '__init__.py') True >>> docwriter._uri2path('sphinx.does_not_exist') ''' if uri == self.package_name: return os.path.join(self.root_path, '__init__.py') path = uri.replace('.', os.path.sep) path = path.replace(self.package_name + os.path.sep, '') path = os.path.join(self.root_path, path) # XXX maybe check for extensions as well? if os.path.exists(path + '.py'): # file path += '.py' elif os.path.exists(os.path.join(path, '__init__.py')): path = os.path.join(path, '__init__.py') else: return None return path def _path2uri(self, dirpath): ''' Convert directory path to uri ''' relpath = dirpath.replace(self.root_path, self.package_name) if relpath.startswith(os.path.sep): relpath = relpath[1:] return relpath.replace(os.path.sep, '.') def _parse_module(self, uri): ''' Parse module defined in *uri* ''' filename = self._uri2path(uri) if filename is None: # nothing that we could handle here. return ([],[]) f = open(filename, 'rt') functions, classes = self._parse_lines(f) f.close() return functions, classes def _parse_lines(self, linesource): ''' Parse lines of text for functions and classes ''' functions = [] classes = [] for line in linesource: if line.startswith('def ') and line.count('('): # exclude private stuff name = self._get_object_name(line) if not name.startswith('_'): functions.append(name) elif line.startswith('class '): # exclude private stuff name = self._get_object_name(line) if not name.startswith('_'): classes.append(name) else: pass functions.sort() classes.sort() return functions, classes def generate_api_doc(self, uri): '''Make autodoc documentation template string for a module Parameters ---------- uri : string python location of module - e.g 'sphinx.builder' Returns ------- S : string Contents of API doc ''' # get the names of all classes and functions functions, classes = self._parse_module(uri) if not len(functions) and not len(classes): print 'WARNING: Empty -',uri # dbg return '' # Make a shorter version of the uri that omits the package name for # titles uri_short = re.sub(r'^%s\.' % self.package_name,'',uri) ad = '.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n' chap_title = uri_short ad += (chap_title+'\n'+ self.rst_section_levels[1] * len(chap_title) + '\n\n') # Set the chapter title to read 'module' for all modules except for the # main packages if '.' in uri: title = 'Module: :mod:`' + uri_short + '`' else: title = ':mod:`' + uri_short + '`' ad += title + '\n' + self.rst_section_levels[2] * len(title) #if len(classes): # ad += '\nInheritance diagram for ``%s``:\n\n' % uri # ad += '.. inheritance-diagram:: %s \n' % uri # ad += ' :parts: 3\n' ad += '\n.. automodule:: ' + uri + '\n' ad += '\n.. currentmodule:: ' + uri + '\n' multi_class = len(classes) > 1 multi_fx = len(functions) > 1 if multi_class: ad += '\n' + 'Classes' + '\n' + \ self.rst_section_levels[2] * 7 + '\n' elif len(classes) and multi_fx: ad += '\n' + 'Class' + '\n' + \ self.rst_section_levels[2] * 5 + '\n' for c in classes: ad += '\n:class:`' + c + '`\n' \ + self.rst_section_levels[multi_class + 2 ] * \ (len(c)+9) + '\n\n' ad += '\n.. autoclass:: ' + c + '\n' # must NOT exclude from index to keep cross-refs working ad += ' :members:\n' \ ' :undoc-members:\n'# \ #' :show-inheritance:\n' if multi_fx: ad += '\n' + 'Functions' + '\n' + \ self.rst_section_levels[2] * 9 + '\n\n' elif len(functions) and multi_class: ad += '\n' + 'Function' + '\n' + \ self.rst_section_levels[2] * 8 + '\n\n' for f in functions: # must NOT exclude from index to keep cross-refs working ad += '\n.. autofunction:: ' + uri + '.' + f + '\n\n' return ad def _survives_exclude(self, matchstr, match_type): ''' Returns True if *matchstr* does not match patterns ``self.package_name`` removed from front of string if present Examples -------- >>> dw = ApiDocWriter('sphinx') >>> dw._survives_exclude('sphinx.okpkg', 'package') True >>> dw.package_skip_patterns.append('^\\.badpkg$') >>> dw._survives_exclude('sphinx.badpkg', 'package') False >>> dw._survives_exclude('sphinx.badpkg', 'module') True >>> dw._survives_exclude('sphinx.badmod', 'module') True >>> dw.module_skip_patterns.append('^\\.badmod$') >>> dw._survives_exclude('sphinx.badmod', 'module') False ''' if match_type == 'module': patterns = self.module_skip_patterns elif match_type == 'package': patterns = self.package_skip_patterns else: raise ValueError('Cannot interpret match type "%s"' % match_type) # Match to URI without package name L = len(self.package_name) if matchstr[:L] == self.package_name: matchstr = matchstr[L:] for pat in patterns: try: pat.search except AttributeError: pat = re.compile(pat) if pat.search(matchstr): return False return True def discover_modules(self): ''' Return module sequence discovered from ``self.package_name`` Parameters ---------- None Returns ------- mods : sequence Sequence of module names within ``self.package_name`` Examples -------- >>> dw = ApiDocWriter('sphinx') >>> mods = dw.discover_modules() >>> 'sphinx.util' in mods True >>> dw.package_skip_patterns.append('\.util$') >>> 'sphinx.util' in dw.discover_modules() False >>> ''' modules = [self.package_name] # raw directory parsing for dirpath, dirnames, filenames in os.walk(self.root_path): # Check directory names for packages root_uri = self._path2uri(os.path.join(self.root_path, dirpath)) for dirname in dirnames[:]: # copy list - we modify inplace package_uri = '.'.join((root_uri, dirname)) if (self._uri2path(package_uri) and self._survives_exclude(package_uri, 'package')): modules.append(package_uri) else: dirnames.remove(dirname) # Check filenames for modules for filename in filenames: module_name = filename[:-3] module_uri = '.'.join((root_uri, module_name)) if (self._uri2path(module_uri) and self._survives_exclude(module_uri, 'module')): modules.append(module_uri) return sorted(modules) def write_modules_api(self, modules,outdir): # write the list written_modules = [] for m in modules: api_str = self.generate_api_doc(m) if not api_str: continue # write out to file outfile = os.path.join(outdir, m + self.rst_extension) fileobj = open(outfile, 'wt') fileobj.write(api_str) fileobj.close() written_modules.append(m) self.written_modules = written_modules def write_api_docs(self, outdir): """Generate API reST files. Parameters ---------- outdir : string Directory name in which to store files We create automatic filenames for each module Returns ------- None Notes ----- Sets self.written_modules to list of written modules """ if not os.path.exists(outdir): os.mkdir(outdir) # compose list of modules modules = self.discover_modules() self.write_modules_api(modules,outdir) def write_index(self, outdir, froot='gen', relative_to=None): """Make a reST API index file from written files Parameters ---------- path : string Filename to write index to outdir : string Directory to which to write generated index file froot : string, optional root (filename without extension) of filename to write to Defaults to 'gen'. We add ``self.rst_extension``. relative_to : string path to which written filenames are relative. This component of the written file path will be removed from outdir, in the generated index. Default is None, meaning, leave path as it is. """ if self.written_modules is None: raise ValueError('No modules written') # Get full filename path path = os.path.join(outdir, froot+self.rst_extension) # Path written into index is relative to rootpath if relative_to is not None: relpath = outdir.replace(relative_to + os.path.sep, '') else: relpath = outdir idx = open(path,'wt') w = idx.write w('.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n') w('.. toctree::\n\n') for f in self.written_modules: w(' %s\n' % os.path.join(relpath,f)) idx.close() pymvpa2-2.2.0/tools/bib2rst_ref.py000077500000000000000000000266171202542755000170470ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## import _bibtex import re ##REF: Name was automagically refactored def compare_bib_by_date(a, b): """Sorting helper.""" x = a[1][1] y = b[1][1] if x.has_key('year'): if y.has_key('year'): if x['year'].isdigit(): if y['year'].isdigit(): # x and y have dates xyear = int( x['year'] ) yyear = int( y['year'] ) comp = cmp(xyear, yyear) if comp == 0: return compare_bib_by_author(a,b) else: return (-1)*comp else: # x has date, y not -> y is first return 1 else: if y['year'][0].isdigit(): return -1 else: return compare_bib_by_author(a,b) else: # only x has date return 1 else: if y.has_key('year'): return -1 else: # neither nor y have dates return compare_bib_by_author(a, b) ##REF: Name was automagically refactored def compare_bib_by_author(a,b): """Sorting helper.""" x = a[1][1] y = b[1][1] if x.has_key('author'): if y.has_key('author'): return cmp(join_author_list(x['author']), join_author_list(y['author'])) else: # only x has author return 1 else: if y.has_key('author'): return -1 else: # neither nor y have authors return 0 ##REF: Name was automagically refactored def format_surname(s, keep_full = False): """Recieves a string with surname(s) and returns a string with nicely concatenated surnames or initals (with dots). """ # clean spaces s = s.strip() # go home if empty if not len(s): return '' if not keep_full: # only keep initial s = s[0] if len(s) == 1: # add final dot s += '.' return s ##REF: Name was automagically refactored def format_author(s, full_surname = False): """ Takes a string as argument an tries to determine the lastname and surname(s) of a single author. Returns a string with 'lastname, surname(s)'. The function takes care of 'von's and other funny prefixes. """ s = s.strip() # nothing? take ball, go home if not len(s): return s if s.count(','): # assume we have 'lastname, surname(s)' slist = s.split(',') # take lastname verbatim lastname = slist[0].strip() # remerge possible surnames with spaces if any surnames = u' '.join(slist[1:]) # get nicely formated surnames concat with spaces surname = u' '.join( [ format_surname(i, full_surname) for i in surnames.split() ] ) else: # assume last entity is lastname the rest is surnames # check for lastname prefixes slist = s.split() if len(slist) < 2: # only lastname -> finished return slist[0] # check for order if len(slist[-1]) == 1 or slist[-1].endswith('.'): # seems like we have lastname->surname order if slist[0] in ('von', 'van'): lastname = slist[0] + ' ' + slist[1] surnames = u' '.join(slist[2:]) else: lastname = slist[0] surnames = u' '.join(slist[1:]) else: # the lastname is last lastname = slist[-1] if slist[-2] in ('von', 'van'): lastname = slist[-2] + u' ' + lastname surnames = u' '.join(slist[:-2]) else: surnames = u' '.join(slist[:-1]) surname = u' '.join( [ format_surname(i, full_surname) for i in surnames.split() ] ) return lastname + u', ' + surname ##REF: Name was automagically refactored def join_author_list(alist): """ Nicely concatenate a list of author with ', ' and a final ' & '. Each author is passed to format_author() internally. """ if not len(alist) > 1: return format_author(alist[0]) ret = u', '.join( [ format_author(a) for a in alist[:-1] ] ) ret += u' & ' + format_author( alist[-1] ) return ret ##REF: Name was automagically refactored def format_property(string, indent, max_length = 80): """ Helper function to place linebreaks and indentation for pretty printing. """ length = len(string) lines = [] pos = 0 while pos < length: if not pos == 0: justify = ''.ljust(indent) line_length = max_length - indent else: justify = '' line_length = max_length if length - pos > line_length: lastspace = string.rfind(' ', pos + 1, pos + line_length) else: lastspace = length if lastspace == -1 or lastspace < indent + 1: lastspace = string.find(' ', pos + line_length) # if no space in the whole string if lastspace == -1: lastspace = length lines.append(justify + string[pos:lastspace]) pos = lastspace + 1 return '\n'.join(lines) class BibTeX(dict): """Read bibtex file as dictionary. Each entry is accessible by its bibtex ID. An entry is a two-tuple `(item_type, dict)`, where `item_type` is eg. article, book, ... and `dict` is a dictionary with all bibtex properties for the respective item. In this dictionary all properties are store as plain strings, except for the list of authors (which is a list of strings) and the pages which is a two-tuple with first and last page. """ def __init__(self, filename = None): if not filename == None: self.open(filename) # spaces to be used for indentation self.indent = 17 # maximum line length self.line_length = 80 def open(self, filename): """Read and parse bibtex file using python-bibtex.""" # figure out what the second argument means file = _bibtex.open_file(filename, 1) while 1: entry = _bibtex.next(file) if entry == None: break eprops = {} for k,v in entry[4].iteritems(): # figure out what the last argument really does # leaving in -1 seems to be save value = _bibtex.expand(file, v, 0)[2] try: value = unicode(value, 'utf-8') except UnicodeDecodeError, e: print "ERROR: Failed to decode string '%s'" % value raise if k.lower() == 'author': value = value.split(' and ') if k.lower() == 'pages': value = tuple(value.replace('-', ' ').split()) eprops[k] = value # bibtex key is dict key self[entry[0]] = (entry[1],eprops) def __str__(self): """Pretty print in bibtex format.""" bibstring = '' for k, v in self.iteritems(): bibstring += '@' + v[0] + ' { ' + k for ek, ev in v[1].iteritems(): if ek.lower() == 'author': ev = ' and '.join(ev) if ek.lower() == 'pages': ev = '--'.join(ev) keyname = ' ' + ek bibstring += ',\n' bibstring += format_property( keyname.ljust(15) + '= {' + ev + '}', self.indent, self.line_length ) bibstring += "\n}\n\n" return bibstring.encode(self.enc) def bib2rst_references(bib): """Compose the reference page.""" # do it in unicode rst = u'' intro = open('doc/misc/references.in').readlines() rst += intro[0] rst += " #\n # THIS IS A GENERATED FILE -- DO NOT EDIT!\n #\n" rst += ''.join(intro[1:]) rst += '\n\n' biblist = bib.items() biblist.sort(compare_bib_by_author) for id, (cat, prop) in biblist: # put reference target for citations rst += '.. _' + id + ':\n\n' # compose the citation as the list item label cit = u'' # initial details equal for all item types if prop.has_key('author'): cit += u'**' + join_author_list(prop['author']) + u'**' if prop.has_key('year'): cit += ' (' + prop['year'] + ').' if prop.has_key('title'): cit += ' ' + smooth_rst(prop['title']) if not prop['title'].endswith('.'): cit += '.' # appendix for journal articles if cat.lower() == 'article': # needs to have journal, volume, pages cit += ' *' + prop['journal'] + '*' if prop.has_key('volume'): cit += ', *' + prop['volume'] + '*' if prop.has_key('pages'): cit += ', ' + '-'.join(prop['pages']) elif cat.lower() == 'book': # needs to have publisher, address cit += ' ' + prop['publisher'] cit += ': ' + prop['address'] elif cat.lower() == 'manual': cit += ' ' + prop['address'] elif cat.lower() == 'inproceedings': cit += ' ' + prop['booktitle'] if prop.has_key('pages'): cit += ', ' + '-'.join(prop['pages']) else: print "WARNING: Cannot handle bibtex item type:", cat cit += '.' # beautify citation with linebreaks and proper indentation # damn, no. list label has to be a single line... :( #rst += format_property(cit, 0) rst += cit # place optional paper summary if prop.has_key('pymvpa-summary'): rst += '\n *' + format_property(prop['pymvpa-summary'], 2) + '*\n' # make keywords visible if prop.has_key('pymvpa-keywords'): rst += '\n Keywords: ' \ + ', '.join([':keyword:`' + kw.strip() + '`' for kw in prop['pymvpa-keywords'].split(',')]) \ + '\n' # place DOI link if prop.has_key('doi'): rst += '\n DOI: ' if not prop['doi'].startswith('http://dx.doi.org/'): rst += 'http://dx.doi.org/' rst += prop['doi'] rst += '\n' # use URL (even if DOI is available -- might lead to a copy outside of the paywall) if prop.has_key('url'): rst += '\n URL: ' + prop['url'] + '\n' rst += '\n\n' # end list with blank line rst += '\n\n' return rst.encode('utf-8') ##REF: Name was automagically refactored def smooth_rst(s): """Replace problematic stuff with less problematic stuff.""" s = re.sub("``", '"', s) # assuming that empty strings to not occur in a bib file s = re.sub("''", '"', s) return s # do it bib = BibTeX('doc/misc/references.bib') refpage = open('doc/source/references.rst', 'w') refpage.write(bib2rst_references(bib)) refpage.close() pymvpa2-2.2.0/tools/bisect_mtrand.sh000077500000000000000000000010061202542755000174250ustar00rootroot00000000000000#!/bin/bash # This is the script to be used with git bisect to figure out first # commit when testBasic starts to fail # to use it just do # git bisect start yoh/master maint/0.4 -- # git bisect run tools/bisect_mtrand.sh # where yoh/master is known place where that test fails # and maint/0.4 where it doesn't # # it would stop at the first bad commit make clean make || exit 125 # skip commits where build is broken PYTHONPATH=$PWD nosetests mvpa2/tests/test_datameasure.py:SensitivityAnalysersTests.testBasic pymvpa2-2.2.0/tools/build_modref_templates.py000077500000000000000000000010371202542755000213420ustar00rootroot00000000000000#!/usr/bin/env python """Script to auto-generate our API docs.""" import os from apigen import ApiDocWriter if __name__ == '__main__': package = 'mvpa' outdir = os.path.join('build', 'doc', 'modref') docwriter = ApiDocWriter(package, rst_extension='.rst') #docwriter.package_skip_patterns += ['\\.fixes$', # '\\.externals$'] docwriter.write_api_docs(outdir) #docwriter.write_index(outdir, 'gen', relative_to='api') print '%d files written' % len(docwriter.written_modules) pymvpa2-2.2.0/tools/daily_tests.sh000077500000000000000000000154231202542755000171430ustar00rootroot00000000000000#!/bin/bash # emacs: -*- mode: shell-script; indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=sh sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # Helper to run all the tests daily at night # # Depends: # apt-get install git mime-construct # apt-get build-dep python-mvpa set -e # Not yet can do fine scale unittest separation since maint/0.4, nor # master have it that way... leaving it for future. #MAKE_TESTS="unittest unittest-optimization unittest-debug unittest-badexternals #MAKE_TESTS="unittests testmanual testsuite testapiref testdatadb testsphinx testexamples testcfg" # Unittests to run in all branches TESTS_COMMON="unittests testmanual testsuite testsphinx testexamples testcfg" # Specify the main repository (serves the 'origin') # and additional named clones # Branches will be specified prepended with names of the remotes repo="git://github.com/PyMVPA/PyMVPA.git" remotes="git://github.com/yarikoptic/PyMVPA.git yarikoptic git://github.com/hanke/PyMVPA.git hanke git://github.com/otizonaizit/PyMVPA.git tiziano" # Associative array with tests lists per branch declare -A TESTS_BRANCHES # stable branches for b in origin/maint/0.4; do #have no datadb and still use epydoc TESTS_BRANCHES["$b"]="$TESTS_COMMON testapiref" done # development branches for b in origin/master yarikoptic/master hanke/master; do TESTS_BRANCHES["$b"]="$TESTS_COMMON testdatadb testourcfg testdocstrings test-prep-fmri" done # Python3 testing -- origin and tiziano TESTS_BRANCHES["origin/master"]+=" unittest-py3" TESTS_BRANCHES["tiziano/master"]=" unittest-py3" # all known tests TESTS_ALL=`echo "${TESTS_BRANCHES[*]}" | tr ' ' '\n' | sort | uniq` # what branches to test BRANCHES="${!TESTS_BRANCHES[*]}" # where to send reports # hardcode in the bottom #EMAILS='yoh@onerussian.com,michael.hanke@gmail.com' precmd= #precmd="echo C: " ds=`date +"20%y%m%d_%H%M%S"` topdir=$HOME/proj/pymvpa datadbdir=$topdir/datadb logdir="$topdir/logs/daily/pymvpa_tests-$ds" tmpfile="$logdir/tmp.log" logfile="$logdir/all.log" # Remove trap "rm -fr $logdir/PyMVPA $logdir/tmp.log;" EXIT mkdir -p "$logdir" indent() { sed -e 's/^/ /g' } do_checkout() { $precmd git clean -dfx | indent $precmd git reset --hard #if [ ! $branch = 'master' ]; then $precmd git checkout -b $branch origin/$branch || : #fi $precmd git checkout $branch # Clean up again since we might have some directories $precmd git clean -df | indent #provide datadb [ -e "datadb" ] || $precmd ln -s "$datadbdir" . } do_build() { $precmd make clean $precmd make } do_clean() { # verify that cleaning works as desired $precmd make clean $precmd git clean -n | grep -q . \ && { git clean -n; return 1; } \ || return 0 } for c in $TESTS_ALL; do eval "do_$c() { $precmd make $c; }" done # need to override some so they are ran with -k # so we see all that fail for c in testexamples unittests; do eval "do_$c() { $precmd make -k $c; }" done # Counters failed=0 succeeded=0 # skip the tests we can't fully trust to sleep well export MVPA_TESTS_LABILE=no # Lets use backend allowing to draw without DISPLAY export MVPA_MATPLOTLIB_BACKEND=agg blogfiles="" # need to be a function to share global failed/succeded sweep() { echo "I: working in $logdir" cd $logdir echo "I:" $(date) # checkout the repository echo "I: Cloning main repository" $precmd git clone -q $repo 2>&1 | indent $precmd cd PyMVPA # no need to check here since checkout would fail below otherwise echo -n "I: Adding remotes: " echo -en "$remotes\n" | while read rurl rname; do echo -e "$rname" | tr '\n' ' ' git remote add $rname $rurl git fetch -q $rname done echo # just a new line # # Sweep through the branches and actionsto test # branches_with_problems= shashums_visited= for branch in $BRANCHES; do branch_has_problems= blogdir="$logdir/${branch//\//_}" blogfile="$blogdir.txt" # if given branch supports logging of export MVPA_TESTS_LOGDIR=$blogdir mkdir -p $MVPA_TESTS_LOGDIR { echo echo "I: ---------------{ Branch $branch }--------------" for action in checkout build ${TESTS_BRANCHES["$branch"]} clean; do echo -n "I: $action " cmd="do_$action" if $cmd >| $tmpfile 2>&1 ; then echo " ok" succeeded=$(($succeeded+1)) else branch_has_problems+=" $action" failed=$(($failed+1)) echo " ! FAILED ! Output was:" cat $tmpfile | indent fi # provide information in the log about what was current position # in the branch if [ "$action" = "checkout" ]; then echo "I: current position $(git describe)" ref=$(git rev-parse --short HEAD) if echo "$shashums_visited" | grep -q "$ref|" ; then echo "I: skipping since $ref was already tested" break fi shashums_visited+="$ref|" fi done if [ "x$branch_has_problems" != x ]; then branches_with_problems+="\n $branch: $branch_has_problems" echo " D: Reporting WTF due to errors:" # allow for both existing API versions $precmd python -c 'import mvpa2; print mvpa2.wtf()' || \ $precmd python -c 'import mvpa; print mvpa.wtf()' || echo "WTF failed!!!" fi } &> "$blogfile" blogfiles+=" --file-attach $blogfile" done echo "I: Succeeded $succeeded actions, failed $failed actions." if [ "x$branches_with_problems" != x ]; then echo -e "I: Branches which experienced problems: $branches_with_problems" fi echo echo "I:" $(date) echo "I: Exiting. Logfile $logfile" } # Prepare the environment a bit more: # bet is needed for one of the tests [ -e /etc/fsl/fsl.sh ] && source /etc/fsl/fsl.sh sweep >| $logfile 2>&1 # Email only if any test has failed #[ ! $failed = 0 ] && \ # Email always since it is better to see that indeed everything is smooth # and to confirm that it is tested daily #cat $logfile | mail -s "PyMVPA: daily testing: +$succeeded/-$failed" $EMAILS # Email using mime-construct with results per branch in attachements mime-construct --to yoh@onerussian.com --to michael.hanke@gmail.com --to opossumnano@gmail.com \ --subject "PyMVPA: daily testing: +$succeeded/-$failed" \ --file "$logfile" $blogfiles pymvpa2-2.2.0/tools/epydoc000077500000000000000000000022541202542755000154670ustar00rootroot00000000000000#!/usr/bin/python # # Call the command line interface for Epydoc. # # Make sure that we don't get confused between an epydoc.py script and # the real epydoc package. import sys, os.path from docutils.nodes import NodeVisitor NodeVisitor.optional = ('note') if os.path.exists(os.path.join(sys.path[0], 'epydoc.py')): del sys.path[0] from epydoc.cli import cli # suppress multitude of warnings about profile data missing # import warnings # defaul is supposed to print it only once # warnings.simplefilter('default', Warning) # epydoc uses its own # lets override it completely import epydoc.log import os epydoc_warnings = os.environ.get('MVPA_EPYDOC_WARNINGS', 'all').lower() _logged_warnings = set() if epydoc_warnings == 'all': pass elif epydoc_warnings == 'once': warning_orig = epydoc.log.warning def once_warning(*messages): smsg = str(messages) if not (smsg in _logged_warnings): warning_orig(*messages) _logged_warnings.add(smsg) epydoc.log.warning = once_warning elif epydoc_warnings == 'none': epydoc.log.warning = lambda *x:None else: print "ERROR: Unknown control for epydoc warnings %s. " \ "Known are all, once, none" % epydoc_warnings cli() pymvpa2-2.2.0/tools/ex2rst000077500000000000000000000225101202542755000154300ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper to automagically generate ReST versions of examples""" __docformat__ = 'restructuredtext' import os import sys import re import glob from optparse import OptionParser def exfile2rst(filename): """Open a Python script and convert it into an ReST string. """ # output string s = '' # open source file xfile = open(filename) # parser status vars inheader = True indocs = False doc2code = False code2doc = False interactiveblock = False preserved_indent = False # an empty line found in the example enables the check for a potentially # indented docstring starting on the next line (as an attempt to exclude # function or class docstrings) last_line_empty = False # indentation of indented docstring, which is removed from the RsT output # since we typically do not want an indentation there. indent_level = 0 for line in xfile: # skip header if inheader and \ not (line.startswith('"""') or line.startswith("'''")): continue # determine end of header if inheader and (line.startswith('"""') or line.startswith("'''")): inheader = False # strip comments and remove trailing whitespace if not indocs and last_line_empty: # first remove leading whitespace and store indent level cleanline = line[:line.find('#')].lstrip() indent_level = len(line) - len(cleanline) - 1 cleanline = cleanline.rstrip() interactiveblock = False else: cleanline = line[:line.find('#')].rstrip() if not indocs and line == '\n': last_line_empty = True else: last_line_empty = False # if we have something that should go into the text if indocs \ or (cleanline.startswith('"""') or cleanline.startswith("'''")): proc_line = None # handle doc start if not indocs: # guarenteed to start with """ if len(cleanline) > 3 \ and (cleanline.endswith('"""') \ or cleanline.endswith("'''")): # single line doc code2doc = True doc2code = True proc_line = cleanline[3:-3] else: # must be start of multiline block interactiveblock = False indocs = True code2doc = True # rescue what is left on the line proc_line = cleanline[3:] # strip """ first_codeline_in_block = False else: # we are already in the docs # handle doc end if cleanline.endswith('"""') or cleanline.endswith("'''"): indocs = False doc2code = True preserved_indent = False # rescue what is left on the line proc_line = cleanline[:-3] # reset the indentation indent_level = 0 else: # has to be documentation # if the indentation is whitespace remove it, other wise # keep it (accounts for some variation in docstring # styles real_indent = \ indent_level - len(line[:indent_level].lstrip()) proc_line = line[real_indent:] if code2doc: code2doc = False s += '\n' if proc_line: s += proc_line.rstrip() + '\n' else: # we are in a code block if line.startswith("if cfg.getboolean('examples', 'interactive'"): interactiveblock = True elif not interactiveblock: # we exclude the code that is used to disable the interactive # plots. if doc2code: doc2code = False first_codeline_in_block = True # the spaces at the end are crucial to get intentation of # indented code block -- otherwise sphinx removes common # whitespace s += '\n::\n' # has to be code leading_whitespace = len(line) > 2 \ and len(line) > len(line.lstrip()) line = line.rstrip() # anything left? if line: if first_codeline_in_block and leading_whitespace \ and not preserved_indent: s += ' »%s\n' % line preserved_indent = True else: s += ' %s\n' % line first_codeline_in_block = False else: s += '\n' xfile.close() return s def exfile2rstfile(filename, opts): """ """ # doc filename dfilename = os.path.basename(filename[:-3]) + '.rst' # open dest file dfile = open(os.path.join(opts.outdir, os.path.basename(dfilename)), 'w') # place header dfile.write('.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n') # place cross-ref target dfile.write('.. _example_' + dfilename[:-4] + ':\n\n') # write converted ReST dfile.write(exfile2rst(filename)) if opts.sourceref: # write post example see also box dfile.write("\n.. seealso::\n The full source code of this example is " "included in the %s source distribution (`%s`).\n" % (opts.project, filename)) dfile.close() def main(): parser = OptionParser( \ usage="%prog [options] [...]", \ version="%prog 0.1", description="""\ %prog converts Python scripts into restructered text (ReST) format suitable for integration into the Sphinx documentation framework. Its key feature is that it extracts stand-alone (unassigned) single, or multiline triple-quote docstrings and moves them out of the code listing so that they are rendered as regular ReST, while at the same time maintaining their position relative to the listing. The detection of such docstrings is exclusively done by parsing the raw code so it is never actually imported into a running Python session. Docstrings have to be written using triple quotes (both forms " and ' are possible). It is recommend that such docstrings are preceded and followed by an empty line. Intended docstring can make use of the full linewidth from the second docstring line on. If the indentation of multiline docstring is maintained for all lines, the respective indentation is removed in the ReST output. The parser algorithm automatically excludes file headers and starts with the first (module-level) docstring instead. """ ) # define options parser.add_option('--verbose', action='store_true', dest='verbose', default=False, help='print status messages') parser.add_option('-x', '--exclude', action='append', dest='excluded', help="""\ Use this option to exclude single files from the to be parsed files. This is especially useful to exclude files when parsing complete directories. This option can be specified multiple times. """) parser.add_option('-o', '--outdir', action='store', dest='outdir', type='string', default=None, help="""\ Target directory to write the ReST output to. This is a required option. """) parser.add_option('--no-sourceref', action='store_false', default=True, dest='sourceref', help="""\ If specified, the source reference section will be suppressed. """) parser.add_option('--project', type='string', action='store', default='', dest='project', help="""\ Name of the project that contains the examples. This name is used in the 'seealso' source references. Default: '' """) # parse options (opts, args) = parser.parse_args() # read sys.argv[1:] by default # check for required options if opts.outdir is None: print('Required option -o, --outdir not specified.') sys.exit(1) # build up list of things to parse toparse = [] for t in args: # expand dirs if os.path.isdir(t): # add all python files in that dir toparse += glob.glob(os.path.join(t, '*.py')) else: toparse.append(t) # filter parse list if not opts.excluded is None: toparse = [t for t in toparse if not t in opts.excluded] toparse_list = toparse toparse = set(toparse) if len(toparse) != len(toparse_list): print('Ignoring duplicate parse targets.') if not os.path.exists(opts.outdir): os.mkdir(opts.outdir) # finally process all examples for t in toparse: exfile2rstfile(t, opts) if __name__ == '__main__': main() pymvpa2-2.2.0/tools/fillin_states000077500000000000000000000055331202542755000170470ustar00rootroot00000000000000#!/usr/bin/python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """""" __docformat__ = 'restructuredtext' if not __name__ == "__main__": raise ValueError, "Go away -- nothing to look here for as a module" import sys, os, re from optparse import OptionParser from os import environ, path from textwrap import wrap from mvpa2.base import verbose from mvpa2.misc.cmdline import parser, opts parser.usage = """Usage: %s [options] infile outfile...""" % sys.argv[0] parser.option_groups = [opts.common] (options, files) = parser.parse_args() if len(files)!=2: print "Need input and output files" sys.exit(1) if files[0] == files[1]: print "For now provide two different names" sys.exit(1) infile = open(files[0], 'r') inlines = infile.readlines() infile.close() outlines = [] reg = re.compile('^.. autoconditional: +(?P\S*) +(?P\S*)') i = 0 while i < len(inlines): line = inlines[i] i += 1 outlines.append(line) reg_res = reg.search(line) if not reg_res: continue else: verbose(2, "Line: %s" % line) d = reg_res.groupdict() # import asked module exec "from mvpa2.%s import %s as Victim" % (d['path'], d['cls']) ca = Victim._collections_template['ca'].items keys = ca.keys() keys.sort() isthere = inlines[i+1].startswith("Supported st") suffix = ['', 's'][len(keys)>1] outlines.append(""" Supported conditional attribute%s: ================== ============================================== ========= Name Description Default ------------------ ---------------------------------------------- --------- """%suffix) for k in keys: verbose(3, " " + k) v = ca[k] doc = v.__doc__ if not doc.endswith('.'): doc += '.' doc = wrap(doc, 46) k, e = k[:], ['Disabled', 'Enabled'][v.enabled] for d in doc: new_line = "%-19s %-46s %s" % \ (k, d, e) k, e = "", "" outlines.append(new_line.rstrip()+"\n") outlines.append("""================== ============================================== =========\n""") if isthere: count = 0 # aborb "older" lines until we hit good one while count < 2: count += inlines[i].startswith('======') i += 1 outfile = open(files[1], 'w') [outfile.write(x) for x in outlines] outfile.close() pymvpa2-2.2.0/tools/mpkg_wrapper.py000066400000000000000000000015531202542755000173270ustar00rootroot00000000000000# emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Simple wrapper to use setuptools extension bdist_mpkg with PyMVPA distutils setup.py. This script is a minimal version of a wrapper script shipped with the bdist_mpkg packge. """ __docformat__ = 'restructuredtext' import sys import setuptools import bdist_mpkg def main(): del sys.argv[0] sys.argv.insert(1, 'bdist_mpkg') g = dict(globals()) g['__file__'] = sys.argv[0] g['__name__'] = '__main__' execfile(sys.argv[0], g, g) if __name__ == '__main__': main() pymvpa2-2.2.0/tools/niils000077500000000000000000000101531202542755000153170ustar00rootroot00000000000000#!/usr/bin/python #emacs: -*- mode: python-mode; py-indent-offset: 4; tab-width: 4; indent-tabs-mode: nil -*- #ex: set sts=4 ts=4 sw=4 noet: """ Little script to list summary over given nifti files COPYRIGHT: Yaroslav Halchenko 2011 LICENSE: MIT Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ #-----------------\____________________________________/------------------ __author__ = 'Yaroslav Halchenko' __copyright__ = 'Copyright (c) 2011 Yaroslav Halchenko' __license__ = 'MIT' import sys from mvpa2.base.dochelpers import table2string from mvpa2.base import verbose, debug from mvpa2.misc.cmdline import parser, opts, Option import nibabel as nib import numpy as np def ap(l, format, sep=', '): """Little helper to enforce consistency""" ls = [format % x for x in l] return sep.join(ls) parser.usage = """Usage: %s [options] [infile1] [infile2] ...""" % sys.argv[0] parser.option_groups = [opts.common] parser.add_options([ Option("-s", "--stats", action="store_true", dest='stats', default=False, help="Output basic data statistics"), Option("-z", "--zeros", action="store_true", dest='stats_zeros', default=False, help="Include zeros into output basic data statistics (--stats)"), ]) (options, files) = parser.parse_args() if verbose.level < 3: # suppress nibabel format-compliance warnings nib.imageglobals.logger.level = 50 if len(files): maxfnlen = max([len(f) for f in files]) t = [] for f in files: row = ["%%-%ds" % maxfnlen % f] verbose(2, "Loading %s" % f) try: vol = nib.load(f) h = vol.get_header() except Exception, e: row += ['failed'] t.append(row) verbose(2, "Failed to gather information due to %s" % str(e)) continue row += [ str(h.get_data_dtype()), '@l[%s]' %ap(h.get_data_shape(), '%3g'), '@l%s' % ap(h.get_zooms(), '%.2f', 'x') ] # Slope if (h.has_data_slope or h.has_data_intercept) \ and not h.get_slope_inter() in [(1.0, 0.0), (None, None)]: row += ['@l*%.3g+%.3g' % h.get_slope_inter()] else: row += [ '' ] if (hasattr(h, 'extensions') and len(h.extensions)): row += ['@l#exts: %d' % len(h.extensions)] else: row += [ '' ] try: if (h.get_qform() != h.get_sform()).any(): row += ['sform'] else: row += [''] except Exception, e: verbose(2, "Failed to obtain qform or sform for %s due to %s" % (h, e)) if isinstance(h, nib.AnalyzeHeader): row += [''] else: row += ['error'] if options.stats: # We are doomed to load data d = vol.get_data() if not options.stats_zeros: d = d[np.nonzero(d)] # just # of elements row += ["[%d] " % np.prod(d.shape)] # stats row += [len(d) and '%.2g:%.2g' % (np.min(d), np.max(d)) or '-'] t.append(row) print(table2string(t)) pymvpa2-2.2.0/tools/pdfbook.c000066400000000000000000000223721202542755000160510ustar00rootroot00000000000000/* * pdfbook.c Rearrange pages in a PDF file into signatures. * * Authors: Tigran Aivazian * Jaap Eldering * Roman Buchert * Pierre Francois * * Based on the algorithm from psutils/psbook.c, which was * written by Angus J. C. Duggan 1991-1995. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * */ #include #include #include #include #include #include #define TMP_INFILE_BASE "input" #define TMP_OUTFILE_BASE "output" #define DEF_PAPERSIZE "a4" char *program; static void usage(void) { fprintf(stderr, "Usage: %s [OPTION]... infile outfile\n" " or: %s [-q] [-p ] -o infile outfile\n" "Rearrange pages for printing as booklet.\n\n" "Options:\n" " -q suppress verbose output\n" " -d debug mode: do not cleanup temporary files\n" " -2 place 2 pages on 1 page of output\n" " -s group pages together in groups of size \n" " must be positive and divisible by 4\n" " -r reduce the last book to minimum required number of pages\n" " -p set the paper size to: a3, a4, a5, b3, b4, b5, letter, legal\n" " or executive (default is determined from infile, %s if unknown)\n" " -o pass directly to LaTeX pdfpages `includepdf' command\n" " see the pdfpages package documentation for possible options\n", program, program, DEF_PAPERSIZE); fflush(stderr); exit(1); } char *alloc_and_copy (char *str) { char *new_str; if ( (new_str = strdup(str)) == NULL ) { fprintf(stderr, "%s: error allocating memory\n", program); exit(1); } return (new_str); } int check_papersize (char *p) { if ((strlen(p) == 2) && ((*p == 'a') || (*p == 'b')) && ((p[1] >= '3') && (p[1] <= '5'))) { return (1); /* a3, a4, a5, b3, b4 or b5 */ } if ((strcmp(p, "letter") == 0) || (strcmp(p, "legal") == 0) || (strcmp(p, "executive") == 0)) { return (1); /* letter, legal or executive */ } return (0); /* invalid paper size */ } char *make_tempdir() { static char dirtemplate[L_tmpnam+10]; char *dirname; if ( (dirname = tempnam(NULL, "pdfbk")) == NULL ) { fprintf(stderr, "%s: error generating temporary directory\n", program); exit(1); } strcpy(dirtemplate, dirname); strcat(dirtemplate, "XXXXXX"); if ( (dirname = mkdtemp(dirtemplate)) == NULL ) { fprintf(stderr, "%s: error generating temporary directory\n", program); exit(1); } return dirname; } char *allocstr(char *format, ...) { va_list ap; char *str; char tmp[2]; int len, n; va_start(ap,format); len = vsnprintf(tmp,1,format,ap); va_end(ap); if ( (str = (char *) malloc(len+1))==NULL ) return NULL; va_start(ap,format); n = vsnprintf(str,len+1,format,ap); va_end(ap); if ( n==-1 || n>len ) { fprintf(stderr, "%s: error allocating memory\n", program); exit(1); } return str; } int main(int argc, char *argv[]) { char *infile = NULL; char *outfile = NULL; char *tmpdir; char *tmptexfile; char *tmpinfile; char *tmpoutfile; FILE *fp, *fout; int *actualpg; static char cmdline[1024]; int quiet = 0; int debug = 0; int nup = 0; int pdfcustom = 0; int signature = 0; int reducelastbook = 0; int npages = 0; int maxpage; int completebooks = 0; int restpages = 0; int restsignature = 0; char *pdfcustom_str = NULL; char *papersize_str = NULL; char origpapersize[32]; int i, c; program = argv[0]; tmpdir = make_tempdir(); while ( (c = getopt(argc, argv, "2qds:o:p:r")) != -1 ) { switch (c) { case 's': signature = atoi(optarg); if (signature < 1 || signature % 4) usage(); break; case 'r': reducelastbook = 1; break; case '2': nup = 1; break; case 'o': pdfcustom = 1; pdfcustom_str = alloc_and_copy(optarg); break; case 'p': papersize_str = alloc_and_copy(optarg); if (check_papersize(papersize_str) == 0) { fprintf(stderr, "%s: bad paper size `%s'\n", program, papersize_str); usage (); } break; case 'q': quiet = 1; break; case 'd': debug = 1; break; default: usage(); } } if ( optind /dev/null 2>&1 < /dev/null", tmpdir, tmptexfile); if (system(cmdline)) { fprintf(stderr, "%s: Failed to generate output, see \"%s/%s.log\" for details\n", program, tmpdir, TMP_OUTFILE_BASE); exit(1); } sprintf(cmdline, "cp %s %s", tmpoutfile, outfile); if (system(cmdline)) { fprintf(stderr, "%s: Failed to write \"%s\" file\n", program, outfile); exit(1); } if (!debug) { sprintf(cmdline, "rm -rf %s", tmpdir); system(cmdline); } return 0; } pymvpa2-2.2.0/tools/profile000077500000000000000000000133221202542755000156420ustar00rootroot00000000000000#!/usr/bin/python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """A little helper to profile python code: does profiling and visualization. Relies on hotshot profile profiling, hotshot2calltree to convert to kcachegrind format, and finally runs kcachegrind on it. TODO: redo -- script got aged too much. """ __docformat__ = 'restructuredtext' import sys, os from optparse import OptionParser from os import environ, path from mvpa2.base.verbosity import LevelLogger from mvpa2.misc.cmdline import opt if __name__ == "__main__": usage = """Usage: %s [options] ... """ % sys.argv[0] # default options convert2kcache = True displaykcachegrinder = True printstats = False pfilename = None pstatsfilename = None profilelines = True profilelevel = 10 # how many most hungry to list in stats run = True # either to run profiling at all run_main = False verbose = LevelLogger(handlers=[sys.stderr]) verbose.level = 1 # do we need to know lots by default? :-) verbose.indent = '> ' # to discriminate easily with program output verbose(2, "Initial cmdline params: %s" % `sys.argv`) removed = sys.argv.pop(0) verbose(3, "Removed %s" % removed) verbose(3, "Remained ", sys.argv) if not len(sys.argv): verbose(0, "No python module to profile specified.") print usage sys.exit(1) while sys.argv[0].startswith('-'): if sys.argv[0] in ["-v", "--verbose"]: verbose.level = int(sys.argv[1]) sys.argv.pop(0) elif sys.argv[0] in ["-m", "--run-main"]: run_main = True elif sys.argv[0] in ["-l", "--level"]: profilelevel = int(sys.argv[1]) sys.argv.pop(0) elif sys.argv[0] in ["-o", "--output-file"]: pfilename = sys.argv[1] sys.argv.pop(0) elif sys.argv[0] in ["-O", "--output-statsfile"]: pstatsfilename = sys.argv[1] sys.argv.pop(0) elif sys.argv[0] in ["-s", "--stats"]: printstats = True verbose(2, "Enabling printing stats") convert2kcache = False displaykcachegrinder = False verbose(2, "Disabling conversion to kcache") elif sys.argv[0] in ["-n", "--no-run"]: run = False verbose(2, "Disabling running main. Just do conversions and stats") elif sys.argv[0] in ["-P", "--no-profilelines"]: profilelines = False verbose(2, "Disabling profiling lines") elif sys.argv[0] in ["-K", "--no-kcache"]: convert2kcache = False displaykcachegrinder = False verbose(2, "Disabling conversion to kcache") else: verbose(0, "UNKNOWN parameter %s. Exiting" % sys.argv[0]) print usage sys.exit(1) sys.argv.pop(0) cmdname = sys.argv[0] dirname = path.dirname(cmdname) (cmdname_root, ext) = path.splitext(path.basename(cmdname)) verbose(2, "Adding '%s' to sys.path " % dirname) sys.path.append(dirname) verbose(3, "sys.path is %s " % `sys.path`) # now do profiling import hotshot if pfilename is None: pfilename = cmdname + ".prof" if run: verbose(2, "Creating profiler instance") prof = hotshot.Profile(pfilename, lineevents=profilelines) if run_main: verbose(1, "Importing %s " % cmdname_root) try: exec "import %s as runnable" % cmdname_root except SystemExit: pass if not runnable.__dict__.has_key('main'): verbose(0, "OOPS: file/module %s has no function main defined" \ % cmdname) sys.exit(1) try: # actually return values are never setup # since unittest.main sys.exit's verbose(1, "Calling main() with a profiler") results = prof.runcall( runnable.main ) verbose(4, "Results of profiler call are %s" % `results`) except SystemExit: pass else: prof.run(''.join(open(cmdname, 'r').readlines())) verbose(1, "Running whole module/script with a profiler") verbose(1, "Saving profile data into %s" % pfilename) prof.close() verbose(2, "Closed profiler") if printstats or pstatsfilename: import hotshot.stats verbose(1, "Loading profile file to print statistics") stats = hotshot.stats.load(pfilename) if printstats: stats.strip_dirs() stats.sort_stats('time', 'calls') stats.print_stats(profilelevel) if pstatsfilename: stats.dump_stats(pstatsfilename) kfilename = pfilename + ".kcache" if convert2kcache: cmd = "hotshot2calltree -o %s %s" % (kfilename, pfilename) verbose(1, "Converting to kcache") verbose(3, "Calling '%s'" % cmd) if os.system(cmd): verbose(0, "!!! Make sure to install kcachegrind-converters ;-)") sys.exit(1) if displaykcachegrinder: verbose(1, "Running kcachegrind") if os.system('kcachegrind %s' % kfilename): verbose(0, "!!! Make sure to install kcachegrind ;-)") sys.exit(1) else: print "Go away -- nothing to look here for as a module" pymvpa2-2.2.0/tools/refactor.sh000077500000000000000000000025161202542755000164230ustar00rootroot00000000000000#!/bin/bash # emacs: -*- mode: shell-script; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: t -*- # vi: set ft=sh sts=4 ts=4 sw=4 noet: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## git grep -l mvpa | grep -v refactor | \ xargs sed -i \ -e 's,optHelp,opt.help,g' \ -e "s,optVerbose,opt.verbose,g" \ -e "s,optClf,opt.clf,g" \ -e "s,optRadius,opt.radius,g" \ -e "s,optKNearestDegree,opt.knearestdegree,g" \ -e "s,optSVMC,opt.svm_C,g" \ -e "s,optSVMNu,opt.svm_nu,g" \ -e "s,optSVMGamma,opt.svm_gamma,g" \ -e "s,optCrossfoldDegree,opt.crossfolddegree,g" \ -e "s,optZScore,opt.zscore,g" \ -e "s,optTr,opt.tr,g" \ -e "s,optDetrend,opt.detrend,g" \ -e "s,optBoxLength,opt.boxlength,g" \ -e "s,optBoxOffset,opt.boxoffset,g" \ -e "s,optChunk,opt.chunk,g" \ -e "s,optChunkLimits,opt.chunklimits,g" \ -e "s,optsCommon,opts.common,g" \ -e "s,optsKNN,opts.KNN,g" \ -e "s,optsSVM,opts.SVM,g" \ -e "s,optsGener,opts.general,g" \ -e "s,optsPreproc,opts.preproc,g" \ -e "s,optsBox,opts.box,g" \ -e "s,optsChunk,opts.chunk,g" ## Uncomment and move up any additional refactorings which needed # -e 's,training_stats,stats,g' pymvpa2-2.2.0/tools/refactor_0.5.sh000077500000000000000000000173241202542755000170100ustar00rootroot00000000000000#!/bin/bash set -eu files=$* if [ -z "$files" ]; then echo "No file names were provided, trying all non-binary files under git control" files=$(git grep -l . | grep -v -e Binary -e refactor_ -e Changelog) if [ -z "$files" ]; then echo "No files were found under git, exiting" exit 1 fi fi echo "Replacing known patters" echo \ "absminDistance absmin_distance _accessKohonen _access_kohonen aggregateFeatures aggregate_features asDescreteTime as_descrete_time asstring as_string autoNullDist auto_null_dist auxBasic aux_basic buildStreamlineThings build_streamline_things buildVectorBasedPM build_vector_based_pm cartesianDistance cartesian_distance _checkRange _check_range checkRange check_range _checkValues _check_values _checkVersion _check_version chirpLinear chirp_linear _closeOpenedHandlers _close_opened_handlers coarsenChunks coarsen_chunks collectNoseTests collect_nose_tests collectTestSuites collect_test_suites compareBibByAuthor compare_bib_by_author compareBibByDate compare_bib_by_date _computeInfluenceKernel _compute_influence_kernel _computeRecon _compute_recon convert2SVMNode seq_to_svm_node _customizeDoc _customize_doc _debugCallback _debug_callback _demeanData _demean_data doubleArray2List double_array_to_list doubleArray double_array doubleGammaHRF double_gamma_hrf dumbFeatureBinaryDataset dumb_feature_binary_dataset dumbFeatureDataset dumb_feature_dataset enhancedDocString enhanced_doc_string FirstAxisMean first_axis_mean FirstAxisSumNotZero first_axis_sum_not_zero formatAuthor format_author formatProperty format_property formatSurname format_surname __forwardMultipleLevels __forward_multiple_levels __forwardSingleLevel __forward_single_level freeDoubleArray free_double_array freeIntArray free_int_array generateFromXML from_xml generateSummary get_summary getAsDType get_as_dtype _getAttrib _get_attrib _getBMU _get_bmu getBreakPoints get_break_points _getCvec _get_cvec getData get_data getDataT get_data_t _getDefaultC _get_default_c getEV get_ev _getFeatureIds _get_feature_ids getFullMatrix get_full_matrix _getGroup _get_group _getHandlers _get_handlers _getIndexes _get_indexes getLabels get_labels getLabels_map get_labels_map _getLevelsDict _get_levels _getLevelsDict_virtual _get_levels_virtual _getLevels _get_selected_levels getMajorityVote get_majority_vote getMap get_map getMaps get_maps getMetric get_metric getMVPattern get_mv_pattern getNeighbor get_neighbor _getNElements _get_n_elements _getNLevels _get_n_levels _getNLevelsVirtual _get_n_levels_virtual getNRClass get_nr_class getNSV get_n_sv _getRecon _get_recon getRho get_rho getSamplesPerChunkLabel get_samples_per_chunk_target getSensitivityAnalyzer get_sensitivity_analyzer _getSplitConfig _get_split_config getSVCoef get_sv_coef getSV get_sv getSVRPdf get_svr_pdf getSVRProbability get_svr_probability getTotalNSV get_total_n_sv getTriangle get_triangle _getUniqueLengthNCombinations_binary unique_combinations getUniqueLengthNCombinations unique_combinations _getUniqueLengthNCombinations_lt3 unique_combinations getVectorForm get_vector_form getWeightedVote get_weighted_vote GrandMean grand_mean indentDoc indent_doc intArray2List int_array_to_list intArray int_array inverseCmap inverse_cmap isInVolume is_in_volume isSorted is_sorted isTrained is_trained joinAuthorList join_author_list L1Normed l1_normed L2Normed l2_normed labelPoint label_point labelVoxel label_voxel leastSqFit least_sq_fit levelsListing levels_listing levelType level_type loadAtlas load_atlas _loadData _load_metadata _loadFile _load_file _loadImages _load_images mahalanobisDistance mahalanobis_distance makeFlobs make_flobs manhattenDistance manhatten_distance matchDistribution match_distribution meanPowerFx mean_power_fx MNI2Tal_Lancaster07FSL mni_to_tal_lancaster07_fsl MNI2Tal_Lancaster07pooled mni_to_tal_lancaster07pooled MNI2Tal_MeyerLindenberg98 mni_to_tal_meyer_lindenberg98 MNI2Tal_YOHflirt mni_to_tal_yohflirt multipleChunks multiple_chunks myFirstPage my_first_page myLaterPages my_later_pages Nlevels nlevels normalFeatureDataset normal_feature_dataset oneMinusCorrelation one_minus_correlation OneMinus one_minus parsedCoordinatesIterator parsed_coordinates_iterator parseStatus parse_status percentCorrect percent_correct plotBars plot_bars plotDatasetChunks plot_dataset_chunks plotDecisionBoundary2D plot_decision_boundary_2d plotDistributionMatches plot_distribution_matches plotERP plot_erp plotERPs plot_erps plotErrLine plot_err_line plotFeatureHist plot_feature_hist plotHeadOutline plot_head_outline plotHeadTopography plot_head_topography plotMRI plot_lightbox plotProjDir plot_proj_dir plotSamplesDistance plot_samples_distance predictProbability predict_probability predictValues predict_values predictValuesRaw predict_values_raw prepParser prep_parser presentLabels present_labels pureMultivariateSignal pure_multivariate_signal _pythonStepwiseRegression _python_stepwise_regression RankOrder rank_order registerMetric register_metric removeInvariantFeatures remove_invariant_features __resetChangedData __reset_changed_data reuseAbsolutePath reuse_absolute_path ReverseRankOrder reverse_rank_order __reverseSingleLevel __reverse_single_level RFEHistory2maps rfe_history_to_maps ROCs rocs rootMeanPowerFx root_mean_power_fx runNoseTests run_nose_tests runTests run_tests SecondAxisMaxOfAbs REFACTOR_USE_FXMAPPERS SecondAxisMean REFACTOR_USE_FXMAPPERS SecondAxisSumOfAbs REFACTOR_USE_FXMAPPERS selectOut select_out selectSamples select_samples selectVoxelsFromVolumeIteratorNumPY select_from_volume_iterator setActiveFromString set_active_from_string _setActive _set_active _setAnalyzers _set_analyzers _setClassifier _set_classifier _setClassifiers _set_classifiers setCoordT set_coordT setDistance set_distance _setFElements _set_f_elements _setHandlers _set_handlers _setIndent _set_indent setLabels_map set_labels_map _setLevel _set_level _setMaxCount _set_max_count _setMode _set_mode _setNElements _set_n_elements setNPerLabel set_n_per_label _setOffsetByDepth _set_offset_by_depth _setParameter _set_parameter _setPrintsetid _set_printsetid setReferenceLevel set_reference_level _setRetrainable _set_retrainable _setStrategy _set_strategy _setTail _set_tail setTestDataset set_test_dataset singleGammaHRF single_gamma_hrf sinModulated sin_modulated smoothRsT smooth_rst spaceFlavor space_flavor splitDataset split_dataset substractBaseline substract_baseline Tal2MNI_Lancaster07FSL tal_to_mni_lancaster07_fsl Tal2MNI_Lancaster07pooled tal_to_mni_lancaster07pooled Tal2MNI_YOHflirt tal_to_mni_yohflirt testAllDependencies check_all_dependencies _testCompareToOld _test_compare_to_old __testFSPipelineWithAnalyzerWithSplitClassifier __test_fspipeline_with_split_classifier __testMatthiasQuestion __test_matthias_question _testOnSwaroopData _test_on_swaroop_data toEvents to_events toRealSpace to_real_space toVoxelSpace to_voxel_space transformWithBoxcar transform_with_boxcar _verboseCallback _verbose_callback __wasDataChanged __was_data_changed _waveletFamilyCallback _wavelet_family_callback nperlabel npertarget roisizes roi_sizes xuniqueCombinations xunique_combinations |model='linear' polyord=1 |baselinetargets= param_est=('targets'\\\,) targetdtype dtype detrend poly_detrend nifti_dataset fmri_dataset" | \ while read old new; do echo -en "\r$old " # def definition grep -l "def *$old" $files | xargs -r sed -i -e "s,^\( *\)\(def *$old*\)(,\1##REF: Name was automagically refactored\n\1def $new(,g" # occurances if [ "${old:0:1}" = '|' ]; then old="${old:1}" # we got a complete regexp -- no need to guard grep -l "$old" $files | xargs -r sed -i -e "s,$old,$new,g" && echo -n "" || : else # we got a word expression -- need to guard on the boundaries grep -l "\<$old\>" $files | xargs -r sed -i -e "s,\<$old\>,$new,g" && echo -n "" || : fi done echo -e "\rDONE " pymvpa2-2.2.0/tools/refactor_parameters.py000077500000000000000000000041341202542755000206620ustar00rootroot00000000000000#!/usr/bin/python # emacs: -*- mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """A little helper to convert docstrings from epydoc/rest to match numpy convention """ import sys, re fname = sys.argv[1] mappings = {':Parameters?:': 'Parameters', ':Examples?:': 'Examples', ':Raises:': 'Raises', '.. note::': 'Notes', '.. seealso::': 'See Also', ':Returns:': 'Returns'} alltext = ''.join(open(fname).readlines()) counts = {} for mn, mt in mappings.iteritems(): reparam = re.compile('(?P\n *)(?P

    ' + mn + ')(?P\n.*?(?:\n\s*\n|"""))', flags=re.DOTALL) count = 0 #for i in [1,2]:# while True: res = reparam.search(alltext) if not res: break #print ">", res.group(), "<" resd = res.groupdict() s, e = res.start(), res.end() # Lets adjust alltext body = resd['body'] for i in xrange(2): body = body.replace(resd['spaces'] + ' ', resd['spaces']) # if any 4-spaces survived # body = body.replace(resd['spaces'] + ' ', resd['spaces'] + ' ') body = body.replace('``', '`') body = re.sub(' *\| *', ' or ', body) body = body.replace('basestring', 'str') body = body.replace('basestr', 'str') adjusted = resd['spaces'] + mt + resd['spaces'] \ + '-'*len(mt) + body #remove Cheap initialization. #print "Converted >%s< to >%s<" % (res.group(), adjusted) alltext = alltext[:s] + adjusted + alltext[e:] count += 1 counts[mn] = count print "File %s: %s" % ( fname, ', '.join(['%s: %i' % i for i in counts.items() if i[1]])) file(fname, 'w').write(alltext) pymvpa2-2.2.0/tools/refactor_unittestdefs.sh000077500000000000000000000017601202542755000212240ustar00rootroot00000000000000#!/bin/bash # silly script to refactor unittest method names from camelcase for i in {1..10}; do sed -i -e 's/\(def *test[^(]*\)\([A-Z]\)/\1\L_\2\E/g' test*py; done sed -i \ -e 's/_p_norm/_pnorm/g' \ -e 's/_a_a_c/_aac/g' \ -e 's/_a_c_c/_acc/g' \ -e 's/_k_n_n/_knn/g' \ -e 's/_a_u_c/_auc/g' \ -e 's/_s_v_m/_svm/g' \ -e 's/_s_v_d/_svd/g' \ -e 's/_w_d_m/_wdm/g' \ -e 's/_r_o_i/_roi/g' \ -e 's/_p_l_r/_plr/g' \ -e 's/_e_n_e_t/_enet/g' \ -e 's/_s_m_l_r/_smlr/g' \ -e 's/_l_a_r_s/_lars/g' \ -e 's/_e_e_p/_eep/g' \ -e 's/_i_f_s/_ifs/g' \ -e 's/_r_f_e/_rfe/g' \ -e 's/_g_l_m_n_e_t/_glmnet/g' \ -e 's/_g_l_m/_glm/g' \ -e 's/_g_n_b/_gnb/g' \ -e 's/_b_v_r_t_c/_bv_rtc/g' \ -e 's/__nones/_nones/g' \ -e 's/_e_v/_ev/g' \ -e 's/_l_f/_lf/g' \ -e 's/_c_r/_cr/g' \ -e 's/_w_p/_wp/g' \ -e 's/_s_g/_sg/g' \ -e 's/_c_v/_cv/g' \ -e 's/_e_r/_er/g' \ -e 's/_m_e_g/_meg/g' \ -e 's/_s_o_m/_som/g' \ -e 's/_s_o_m/_som/g' \ -e 's/pnorm_wpython/pnorm_w_python/g' \ -e 's/_p_p_f/_ppf/g' test*py sed -i -e 's/glmnet__/glmnet_/g' test*py pymvpa2-2.2.0/tools/rst2ipnbpy000077500000000000000000000425671202542755000163330ustar00rootroot00000000000000#!/usr/bin/env python # emacs: -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*- # vi: set ft=python sts=4 ts=4 sw=4 et: ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## # # See COPYING file distributed along with the PyMVPA package for the # copyright and license terms. # ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ## """Helper to convert ReST Sphinx documents into IPython notebooks""" __docformat__ = 'restructuredtext' import sys import os import re from docutils.core import publish_doctree from doctest import script_from_examples, DocTestParser import json from copy import deepcopy from optparse import OptionParser def prep_rest(rest): # implementing above in python 2.6 compatible fashion # which lacks flags keyword argument for re.subn # We will first replace all newlines with a unique %%% # which we will use as a new line symbol in our expressions assert(not '%%%' in rest) # at least some checking doc = rest.replace('\n', '%%%') doc, _ = re.subn(r'%%%.. index.*?%%%', '', doc) # fold text roles inside to turn them into a ref subns = 1 while not subns == 0: doc, subns = re.subn(r':([a-z]+):`(.*)`', '`:\\1:\\2`', doc) doc = doc.replace('%%%', '\n') # replace %%% back return doc class ReST2IPyNB(object): ipynb_template = { "metadata": {"name": ""}, "nbformat": 3, "nbformat_minor": 0, "worksheets": [{"cells": [], "metadata": {}}] } codecell_template = { "cell_type": "code", "collapsed": False, "input": [], "language": "python", "metadata": {}, "outputs": [] } markdowncell_template = { "cell_type": "markdown", "metadata": {}, "source": [] } headingcell_template = { "cell_type": "heading", "level": None, "metadata": {}, "source": [] } def __init__(self, baseurl='', apiref_baseurl='', glossary_baseurl='', doctree_parser_settings=None): self._doctree_parser_settings = None if doctree_parser_settings is None: # shut up self._doctree_parser_settings = {'report_level': 5} self._baseurl = baseurl self._apiref_baseurl = apiref_baseurl self._glossary_baseurl = glossary_baseurl self._doctest_parser = DocTestParser() self._reset_state() def _reset_state(self): self._state = {'sec_depth': 1, 'indent': 0, 'in_markdowncell': False, 'need_new_codecell': False, 'need_hanging_indent': False} self._currcell = None self._buffer = '' self._notebook = None self._filename = None def __call__(self, filename): self._filename = filename rest = open(filename).read() doc = prep_rest(rest) self._notebook = deepcopy(ReST2IPyNB.ipynb_template) doctree = publish_doctree( doc, settings_overrides=self._doctree_parser_settings) self._currcells = self._notebook['worksheets'][0]['cells'] self._parse(doctree) self._store_currcell() notebook = self._notebook self._reset_state() return notebook def _ref2apiref(self, reftext): apiref_baseurl = self._apiref_baseurl # try to determine what kind of ref we got if reftext.startswith(':'): rtype, ref = re.match(':([a-z]+):(.*)', reftext).groups() else: rtype = None ref = reftext if rtype is None: # function? if ref.endswith('()'): rtype = 'func' ref = ref[:-2] refid = ref.lstrip('~').rstrip('()') if rtype == 'meth': ref_url = '%s/%s.html#%s' % (apiref_baseurl, '.'.join(refid.split('.')[:-1]), refid) else: ref_url = '%s/%s.html#%s' % (apiref_baseurl, refid, refid.replace('.', '-').replace('_', '-').lower()) ref_label = None if ref.startswith('~'): if rtype == 'meth': ref_label = '%s()' % '.'.join(refid.split('.')[-2:]) elif rtype == 'func': ref_label = '%s()' % refid.split('.')[-1] else: ref_label = '%s' % refid.split('.')[-1] return '[%s](%s)' % (ref_label, ref_url) def _parse(self, doctree): for child in doctree.children: tag = child.tagname if tag == 'title': self._add_headingcell(self._state['sec_depth']) self._parse(child) if not len(self._notebook['metadata']['name']): self._notebook['metadata']['name'] = self._buffer elif tag == '#text': self._add2buffer(child.astext()) elif tag == 'paragraph': self._add_markdowncell() if self._state['need_hanging_indent']: self._state['need_hanging_indent'] = False else: self._add2buffer('', newline=True, paragraph=True) self._flush_buffer() self._parse(child) elif tag == 'doctest_block': self._add_codecell() needs_new_codecell = False for ex in self._doctest_parser.get_examples(child.rawsource): if needs_new_codecell: self._add_codecell() self._add2buffer('%s%s' % (' ' * ex.indent, ex.source), newline=False) self._flush_buffer(startnew=True) needs_new_codecell = len(ex.want) > 0 elif tag == 'section': self._state['sec_depth'] += 1 self._parse(child) self._state['sec_depth'] -= 1 elif tag == 'note': self._add_markdowncell(force=True) self._parse(child) self._flush_buffer() self._currcell['source'].insert(0, '- - -\n*Note*') self._currcell['source'].append('- - -\n') self._store_currcell() elif tag == 'title_reference': self._flush_buffer() self._parse(child) if self._buffer.startswith(':term:'): # link to glossary term = re.match('.*<(.*)>', self._buffer) if term is None: term = re.match(':term:(.*)', self._buffer).groups()[0] term_text = term else: term = term.groups()[0] term_text = re.match(':term:(.*) <', self._buffer).groups()[0] self._buffer = '[%s](%s#term-%s)' % (term_text, self._glossary_baseurl, term.lower().replace(' ', '-')) elif self._buffer.startswith('~mvpa') \ or self._buffer.startswith('mvpa') \ or self._buffer.startswith(':meth:') \ or self._buffer.startswith(':mod:') \ or self._buffer.startswith(':class:') \ or self._buffer.startswith(':func:'): # various API reference link variants self._buffer = self._ref2apiref(self._buffer) # XXX for the rest I have no idea how to link them without huge # effort elif self._buffer.startswith(':ref:'): self._buffer = '*%s*' \ % [m for m in re.match(':ref:(.*) <|:ref:(.*)', self._buffer).groups() if not m is None][0] elif re.match(':([a-z]+):', self._buffer): # catch other ref type we should handle, but do not yet raise RuntimeError("unhandled reference type '%s'" % self._buffer) else: # plain refs seems to be mostly used for external API self._buffer = '`%s`' % self._buffer elif tag == 'emphasis': self._flush_buffer() self._parse(child) self._buffer = '*%s*' % self._buffer elif tag == 'strong': self._flush_buffer() self._parse(child) self._buffer = '**%s**' % self._buffer elif tag == 'literal': # strip one layer of backticks self._add2buffer(child.rawsource[1:-1]) elif tag == 'problematic': print 'PROBLEMATIC: %s' % child self._parse(child) elif tag == 'reference': self._flush_buffer() self._parse(child) self._buffer = '[%s][%s]' % (self._buffer, child.attributes['name']) elif tag in ['comment', 'target']: pass elif tag == 'definition_list': self._add_markdowncell() for item in child.children: self._flush_buffer() self._parse(item.children[0]) term = self._buffer self._buffer = '' self._parse(item.children[1]) self._buffer = '\n%s: %s' % (term, self._buffer) elif tag in ['enumerated_list', 'bullet_list']: self._add_markdowncell() for i, item in enumerate(child.children): if tag == 'enumerated_list': prefix = '%i.' % (i + 1,) else: prefix = '*' self._flush_buffer() self._add2buffer('%s ' % prefix, newline=True, paragraph=True) self._state['indent'] += 4 self._state['need_hanging_indent'] = True self._parse(item) self._state['indent'] -= 4 self._flush_buffer() elif tag == 'list_item': for c in child.children: self._parse(c) elif tag == 'term': self._parse(child.children[0]) elif tag == 'figure': # this can't be expressed in markdown self._flush_buffer() file_url = '%s/%s.html' % (self._baseurl, os.path.splitext(os.path.basename(self._filename))[0]) self._add2buffer('\[Visit [%s](%s) to view this figure\]' % (file_url, file_url), newline=True, paragraph=True) elif tag == 'block_quote': self._flush_buffer() first_line = len(self._currcell['source']) # skip the wrapping paragraph self._parse(child.children[0]) self._flush_buffer() self._currcell['source'][first_line] = \ '\n\n> %s' % self._currcell['source'][first_line] elif tag == 'system_message': if child.attributes['type'] == 'INFO': pass elif child.children[0].astext() == 'Unknown directive type "exercise".': exercise_text = \ '\n'.join([l.strip() for l in child.children[1][0].astext().split('\n')][2:]) self._add_markdowncell(force=True) self._parse(publish_doctree( exercise_text, settings_overrides=self._doctree_parser_settings)) self._flush_buffer() self._currcell['source'].insert(0, '- - -\n*Exercise*') self._add_codecell() self._add2buffer('# you can use this cell to for this exercise\n') self._add_markdowncell() self._currcell['source'].append('- - -\n') elif child.children[0].astext() == 'Unknown directive type "todo".': pass else: raise RuntimeError("cannot handle system message '%s'" % child.astext()) else: if hasattr(child, 'line') and child.line: line = ' on line %i' % child.line else: line = '' raise RuntimeError("Unknown tag '%s'%s" % (tag, line)) def _store_currcell(self): if not self._currcell is None: self._flush_buffer() if self._currcell['cell_type'] == 'code': # remove last newline to save on vertical space self._currcell['input'][-1] = self._currcell['input'][-1].rstrip('\n') self._currcells.append(self._currcell) self._currcell = None def _add_headingcell(self, level): self._store_currcell() self._currcell = deepcopy(ReST2IPyNB.headingcell_template) self._currcell['level'] = level def _add_codecell(self): self._store_currcell() self._currcell = deepcopy(ReST2IPyNB.codecell_template) def _add_markdowncell(self, force=False): if self._currcell is None \ or not self._currcell['cell_type'] == 'markdown' \ or force: # we need a new cell self._store_currcell() self._currcell = deepcopy(ReST2IPyNB.markdowncell_template) def _add2buffer(self, value, newline=False, paragraph=False): if paragraph: nl = '\n\n' else: nl = '\n' if newline: self._buffer += '%s%s%s' % (nl, ' ' * self._state['indent'], value) else: self._buffer += value def _flush_buffer(self, startnew=True): if not len(self._buffer): return if self._currcell['cell_type'] == 'code': target_field = 'input' else: target_field = 'source' if startnew or not len(self._currcell[target_field]): self._currcell[target_field].append(self._buffer) else: self._currcell[target_field][-1] += self._buffer self._buffer = '' def main(): parser = OptionParser( \ usage="%prog [options] [...]", \ version="%prog 0.1", description=""" %prog converts Sphinx documentation pages in restructered text (ReST) format into IPython notebooks. """ ) # define options parser.add_option('--verbose', action='store_true', dest='verbose', default=False, help='print status messages') parser.add_option('-x', '--exclude', action='append', dest='excluded', help="""\ Use this option to exclude single files from the to be parsed files. This is especially useful to exclude files when parsing complete directories. This option can be specified multiple times. """) parser.add_option('-o', '--outdir', action='store', dest='outdir', type='string', default=None, help="""\ Target directory to write the ReST output to. This is a required option. """) parser.add_option('--baseurl', action='store', dest='baseurl', type='string', default=None, help="""\ Base URL for references to the online HTML version of a file. Default='' """) parser.add_option('--apiref_baseurl', action='store', dest='apiref_baseurl', type='string', default=None, help="""\ Base URL for links to the online API reference. Default='' """) parser.add_option('--glossary_baseurl', action='store', dest='glossary_baseurl', type='string', default=None, help="""\ Base URL for links to the online glossary. Default='' """) # parse options (opts, args) = parser.parse_args() # read sys.argv[1:] by default # check for required options if opts.outdir is None: print('Required option -o, --outdir not specified.') sys.exit(1) # build up list of things to parse toparse = [] for t in args: # expand dirs if os.path.isdir(t): # add all python files in that dir toparse += glob.glob(os.path.join(t, '*.rst')) else: toparse.append(t) # filter parse list if not opts.excluded is None: toparse = [t for t in toparse if not t in opts.excluded] toparse_list = toparse toparse = set(toparse) if len(toparse) != len(toparse_list): print('Ignoring duplicate parse targets.') if not os.path.exists(opts.outdir): os.mkdir(opts.outdir) conv = ReST2IPyNB(baseurl=opts.baseurl, apiref_baseurl=opts.apiref_baseurl, glossary_baseurl=opts.glossary_baseurl) # finally process provided files for t in toparse: if opts.verbose: print "Processing '%s'" % t notebook = conv(t) json_notebook = json.dumps(notebook, sort_keys=True, indent=2) open(os.path.join( opts.outdir, '%s.ipynb' % os.path.splitext(os.path.basename(t))[0]), 'w').write(json_notebook) if __name__ == '__main__': main() pymvpa2-2.2.0/tools/sitemap.sh000077500000000000000000000011761202542755000162610ustar00rootroot00000000000000#!/bin/bash # # Generate a XML sitemap to make the search engines love the website. # : ${baseurl:="http://www.pymvpa.org"} siteroot="build/website" cat << EOT $baseurl/ $(stat -c '%y' $siteroot/index.html | cut -d ' ' -f 1,1) 1.0 EOT for file in $(find $siteroot/ -maxdepth 1 -name '*.html' -o -name 'PyMVPA*.pdf'); do cat << EOT $baseurl/$(basename $file) $(stat -c '%y' $file | cut -d ' ' -f 1,1) EOT done echo "" pymvpa2-2.2.0/tools/state_refactor.sh000077500000000000000000000033621202542755000176230ustar00rootroot00000000000000#!/bin/bash known_ca="\(all_label_counts\|confusion\|confusions\|emp_error\|errors\|history\|ndiscarded\|nfeatures\|null_errors\|predictions\|raw_predictions\|raw_values\|results\|selected_ids\|sensitivities\|sensitivity\|splits\|state[123]\|trained_confusion\|trained_confusions\|transerrors\|values\)" sed -i \ -e 's/\(\W\)State\.)/\1Stateful\./g' \ -e 's/State\.__init/Stateful\.__init/g' \ -e 's/State\.__str/Stateful\.__str/g' \ -e 's/\.enableState/\.ca\.enable/g' \ -e 's/\.enableStates/\.ca\.enable/g' \ -e 's/\.enabledStates/\.ca\.enabled/g' \ -e 's/\.disableState/\.ca\.disable/g' \ -e 's/\.disableStates/\.ca\.disable/g' \ -e 's/\.listStates/\.ca\.listing/g' \ -e 's/\.hasState/\.ca\.isKnown/g' \ -e 's/\.isStateEnabled/\.ca\.isEnabled/g' \ -e 's/\._enableStatesTemporarily/\.ca\._enableTemporarily/g' \ -e 's/\.isStateActive/\.ca\.isActive/g' \ -e "s/\(\w\)[[]\([\"']\)$known_ca\2[]]/\1\.\3/g" \ -e "s/self\._registerState(\([\"']\)$known_ca\1\,* */\2 = ConditionalAttribute(/g" \ $@ exit 0 sed -i \ -e 's/(State)/(Stateful)/g' \ -e 's/import State/import ConditionalAttribute, Stateful/g' \ -e "s/self\._registerState(\([\"']\)$known_ca\1\,* */\2 = ConditionalAttribute(/g" \ $@ exit 0 obtained list of all conditional attributes ever known by grep '_registerState(' *py `find ../mvpa -iname \*.py` 2>/dev/null| \ grep -v 'def _reg' | sed -e "s/.*(\([\"']\)\([^ ,]*\)\1.*/\2/g" | \ grep -v mvpa | sort | uniq | tr '\n' '\|'; echo (State) Stateful enableState enable enabledStates enabled listStates listing ca items _enableStatesTemporarily _enableTemporarily _getRegisteredStates _getNames hasState isKnown isStateEnabled isEnabled isStateActive isActive listStates _getListing GONE: enableStates disableStates __enabledisableall pymvpa2-2.2.0/tools/valgrind-python000077500000000000000000000002541202542755000173270ustar00rootroot00000000000000#!/bin/bash path=$(dirname $0) valgrind --tool=memcheck --leak-check=full --show-reachable=yes --leak-resolution=med --suppressions=$path/valgrind-python.supp python $* pymvpa2-2.2.0/tools/valgrind-python.supp000066400000000000000000000171121202542755000203130ustar00rootroot00000000000000# # This is a valgrind suppression file that should be used when using valgrind. # # Here's an example of running valgrind: # # cd python/dist/src # valgrind --tool=memcheck --suppressions=Misc/valgrind-python.supp \ # ./python -E -tt ./Lib/test/regrtest.py -u bsddb,network # # You must edit Objects/obmalloc.c and uncomment Py_USING_MEMORY_DEBUGGER # to use the preferred suppressions with Py_ADDRESS_IN_RANGE. # # If you do not want to recompile Python, you can uncomment # suppressions for PyObject_Free and PyObject_Realloc. # # See Misc/README.valgrind for more information. # all tool names: Addrcheck,Memcheck,cachegrind,helgrind,massif { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Addr4 fun:Py_ADDRESS_IN_RANGE } { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Value4 fun:Py_ADDRESS_IN_RANGE } { ADDRESS_IN_RANGE/Invalid read of size 8 (x86_64 aka amd64) Memcheck:Value8 fun:Py_ADDRESS_IN_RANGE } { ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value Memcheck:Cond fun:Py_ADDRESS_IN_RANGE } # # Leaks (including possible leaks) # Hmmm, I wonder if this masks some real leaks. I think it does. # Will need to fix that. # { Handle PyMalloc confusing valgrind (possibly leaked) Memcheck:Leak fun:realloc fun:_PyObject_GC_Resize fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING } { Handle PyMalloc confusing valgrind (possibly leaked) Memcheck:Leak fun:malloc fun:_PyObject_GC_New fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING } { Handle PyMalloc confusing valgrind (possibly leaked) Memcheck:Leak fun:malloc fun:_PyObject_GC_NewVar fun:COMMENT_THIS_LINE_TO_DISABLE_LEAK_WARNING } # # Non-python specific leaks # { Handle pthread issue (possibly leaked) Memcheck:Leak fun:calloc fun:allocate_dtv fun:_dl_allocate_tls_storage fun:_dl_allocate_tls } { Handle pthread issue (possibly leaked) Memcheck:Leak fun:memalign fun:_dl_allocate_tls_storage fun:_dl_allocate_tls } { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Addr4 fun:PyObject_Free } { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Value4 fun:PyObject_Free } { ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value Memcheck:Cond fun:PyObject_Free } { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Addr4 fun:PyObject_Realloc } { ADDRESS_IN_RANGE/Invalid read of size 4 Memcheck:Value4 fun:PyObject_Realloc } { ADDRESS_IN_RANGE/Conditional jump or move depends on uninitialised value Memcheck:Cond fun:PyObject_Realloc } ### ### All the suppressions below are for errors that occur within libraries ### that Python uses. The problems to not appear to be related to Python's ### use of the libraries. ### { Generic ubuntu ld problems Memcheck:Addr8 obj:/lib/ld-2.4.so obj:/lib/ld-2.4.so obj:/lib/ld-2.4.so obj:/lib/ld-2.4.so } { Generic gentoo ld problems Memcheck:Cond obj:/lib/ld-2.3.4.so obj:/lib/ld-2.3.4.so obj:/lib/ld-2.3.4.so obj:/lib/ld-2.3.4.so } { DBM problems, see test_dbm Memcheck:Param write(buf) fun:write obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_close } { DBM problems, see test_dbm Memcheck:Value8 fun:memmove obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_store fun:dbm_ass_sub } { DBM problems, see test_dbm Memcheck:Cond obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_store fun:dbm_ass_sub } { DBM problems, see test_dbm Memcheck:Cond fun:memmove obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 obj:/usr/lib/libdb1.so.2 fun:dbm_store fun:dbm_ass_sub } { GDBM problems, see test_gdbm Memcheck:Param write(buf) fun:write fun:gdbm_open } { ZLIB problems, see test_gzip Memcheck:Cond obj:/lib/libz.so.1.2.3 obj:/lib/libz.so.1.2.3 fun:deflate } { Avoid problems w/readline doing a putenv and leaking on exit Memcheck:Leak fun:malloc fun:xmalloc fun:sh_set_lines_and_columns fun:_rl_get_screen_size fun:_rl_init_terminal_io obj:/lib/libreadline.so.4.3 fun:rl_initialize } ### ### These occur from somewhere within the SSL, when running ### test_socket_sll. They are too general to leave on by default. ### ###{ ### somewhere in SSL stuff ### Memcheck:Cond ### fun:memset ###} ###{ ### somewhere in SSL stuff ### Memcheck:Value4 ### fun:memset ###} ### ###{ ### somewhere in SSL stuff ### Memcheck:Cond ### fun:MD5_Update ###} ### ###{ ### somewhere in SSL stuff ### Memcheck:Value4 ### fun:MD5_Update ###} # # All of these problems come from using test_socket_ssl # { from test_socket_ssl Memcheck:Cond fun:BN_bin2bn } { from test_socket_ssl Memcheck:Cond fun:BN_num_bits_word } { from test_socket_ssl Memcheck:Value4 fun:BN_num_bits_word } { from test_socket_ssl Memcheck:Cond fun:BN_mod_exp_mont_word } { from test_socket_ssl Memcheck:Cond fun:BN_mod_exp_mont } { from test_socket_ssl Memcheck:Param write(buf) fun:write obj:/usr/lib/libcrypto.so.0.9.7 } { from test_socket_ssl Memcheck:Cond fun:RSA_verify } { from test_socket_ssl Memcheck:Value4 fun:RSA_verify } { from test_socket_ssl Memcheck:Value4 fun:DES_set_key_unchecked } { from test_socket_ssl Memcheck:Value4 fun:DES_encrypt2 } { from test_socket_ssl Memcheck:Cond obj:/usr/lib/libssl.so.0.9.7 } { from test_socket_ssl Memcheck:Value4 obj:/usr/lib/libssl.so.0.9.7 } { from test_socket_ssl Memcheck:Cond fun:BUF_MEM_grow_clean } { from test_socket_ssl Memcheck:Cond fun:memcpy fun:ssl3_read_bytes } { from test_socket_ssl Memcheck:Cond fun:SHA1_Update } { from test_socket_ssl Memcheck:Value4 fun:SHA1_Update } # custom suppressions for yoh { Memcheck:Cond obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so } { Memcheck:Addr4 obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so fun:dlopen fun:_PyImport_GetDynLoadFunc fun:_PyImport_LoadDynamicModule } { Memcheck:Cond obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so fun:dlopen fun:_PyImport_GetDynLoadFunc fun:_PyImport_LoadDynamicModule obj:/usr/bin/python2.4 obj:/usr/bin/python2.4 } { Memcheck:Cond obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so fun:dlopen fun:_PyImport_GetDynLoadFunc fun:_PyImport_LoadDynamicModule obj:/usr/bin/python2.4 obj:/usr/bin/python2.4 obj:/usr/bin/python2.4 } { Memcheck:Addr4 obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so obj:/lib/ld-2.7.so obj:/lib/i686/cmov/libdl-2.7.so }