summaryrefslogtreecommitdiffstats
path: root/c/src/libmisc/untar/untar.c
blob: 60f1550c611daa42dc35888bfaaacbc2950c55b8 (plain) (blame)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
/* FIXME:
 *   1. Symbolic links are not created.
 *   2. Untar_FromMemory has printfs.
 *   3. Untar_FromMemory uses FILE *fp.
 *   4. How to determine end of archive?
 *
 *  Written by: Jake Janovetz <janovetz@tempest.ece.uiuc.edu>
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.OARcorp.com/rtems/license.html.
 *
 *  $Id$
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "untar.h"


/**************************************************************************
 * TAR file format:
 *
 *   Offset   Length   Contents
 *     0    100 bytes  File name ('\0' terminated, 99 maxmum length)
 *   100      8 bytes  File mode (in octal ascii)
 *   108      8 bytes  User ID (in octal ascii)
 *   116      8 bytes  Group ID (in octal ascii)
 *   124     12 bytes  File size (s) (in octal ascii)
 *   136     12 bytes  Modify time (in octal ascii)
 *   148      8 bytes  Header checksum (in octal ascii)
 *   156      1 bytes  Link flag
 *   157    100 bytes  Linkname ('\0' terminated, 99 maxmum length)
 *   257      8 bytes  Magic ("ustar  \0")
 *   265     32 bytes  User name ('\0' terminated, 31 maxmum length)
 *   297     32 bytes  Group name ('\0' terminated, 31 maxmum length)
 *   329      8 bytes  Major device ID (in octal ascii)
 *   337      8 bytes  Minor device ID (in octal ascii)
 *   345    167 bytes  Padding
 *   512   (s+p)bytes  File contents (s+p) := (((s) + 511) & ~511),
 *                     round up to 512 bytes
 * 
 *   Checksum:
 *   int i, sum;
 *   char* header = tar_header_pointer;
 *   sum = 0;
 *   for(i = 0; i < 512; i++)
 *       sum += 0xFF & header[i];
 *************************************************************************/

#define LF_OLDNORMAL  '\0'     /* Normal disk file, Unix compatible */
#define LF_NORMAL     '0'      /* Normal disk file                  */
#define LF_LINK       '1'      /* Link to previously dumped file    */
#define LF_SYMLINK    '2'      /* Symbolic link                     */
#define LF_CHR        '3'      /* Character special file            */
#define LF_BLK        '4'      /* Block special file                */
#define LF_DIR        '5'      /* Directory                         */
#define LF_FIFO       '6'      /* FIFO special file                 */
#define LF_CONFIG     '7'      /* Contiguous file                   */

#define MAX_NAME_FIELD_SIZE      99

#define MIN(a,b)   ((a)>(b)?(b):(a))


/**************************************************************************
 * This converts octal ASCII number representations into an
 * unsigned long.  Only support 32-bit numbers for now.
 *************************************************************************/
static unsigned long
octal2ulong(char *octascii, int len)
{
   int           i;
   unsigned long num;
   unsigned long mult;

   num = 0;
   mult = 1;
   for (i=len-1; i>=0; i--)
   {
      if ((octascii[i] < '0') || (octascii[i] > '9'))
      {
         continue;
      }
      num  += mult*((unsigned long)(octascii[i] - '0'));
      mult *= 8;
   }
   return(num);
}


/**************************************************************************
 * Function: Untar_FromMemory                                             *
 **************************************************************************
 * Description:                                                           *
 *                                                                        *
 *    This is a simple subroutine used to rip links, directories, and     *
 *    files out of a block of memory.                                     *
 *                                                                        *
 *                                                                        *
 * Inputs:                                                                *
 *                                                                        *
 *    unsigned char *tar_buf    - Pointer to TAR buffer.                  *
 *    unsigned long size        - Length of TAR buffer.                   *
 *                                                                        *
 *                                                                        *
 * Output:                                                                *
 *                                                                        *
 *    int - UNTAR_SUCCESSFUL (0)    on successful completion.             *
 *          UNTAR_INVALID_CHECKSUM  for an invalid header checksum.       *
 *          UNTAR_INVALID_HEADER    for an invalid header.                *
 *                                                                        *
 **************************************************************************
 * Change History:                                                        *
 *  12/30/1998 - Creation (JWJ)                                           *
 *************************************************************************/
int
Untar_FromMemory(unsigned char *tar_buf, unsigned long size)
{
   FILE           *fp;
   char           *bufr;
   size_t         n;
   char           fname[100];
   char           linkname[100];
   int            sum;
   int            hdr_chksum;
   int            retval;
   unsigned long  ptr;
   unsigned long  i;
   unsigned long  nblocks;
   unsigned long  file_size;
   unsigned char  linkflag;


   ptr = 0;
   while (1)
   {
      if (ptr + 512 > size)
      {
         retval = UNTAR_SUCCESSFUL;
         break;
      }

      /* Read the header */
      bufr = &tar_buf[ptr];
      ptr += 512;
      if (strncmp(&bufr[257], "ustar  ", 7))
      {
         retval = UNTAR_SUCCESSFUL;
         break;
      }

      strncpy(fname, bufr, MAX_NAME_FIELD_SIZE);
      fname[MAX_NAME_FIELD_SIZE] = '\0';

      linkflag   = bufr[156];
      file_size  = octal2ulong(&bufr[124], 12);

      /******************************************************************
       * Compute the TAR checksum and check with the value in 
       * the archive.  The checksum is computed over the entire
       * header, but the checksum field is substituted with blanks.
       ******************************************************************/
      hdr_chksum = (int)octal2ulong(&bufr[148], 8);
      sum = 0;
      for (i=0; i<512; i++)
      {
         if ((i >= 148) && (i < 156))
         {
            sum += 0xff & ' ';
         }
         else
         {
            sum += 0xff & bufr[i];
         }
      }
      if (sum != hdr_chksum)
      {
         retval = UNTAR_INVALID_CHECKSUM;
         break;
      }


      /******************************************************************
       * We've decoded the header, now figure out what it contains and
       * do something with it.
       *****************************************************************/
      if (linkflag == LF_SYMLINK)
      {
         strncpy(linkname, &bufr[157], MAX_NAME_FIELD_SIZE);
         linkname[MAX_NAME_FIELD_SIZE] = '\0';
         /* symlink(fname, linkname); */
      }
      else if (linkflag == LF_NORMAL)
      {
         nblocks = (((file_size) + 511) & ~511) / 512;
         if ((fp = fopen(fname, "w")) == NULL)
         {
            printf("Untar failed to create file %s\n", fname);
            ptr += 512 * nblocks;
         }
         else
         {
            unsigned long sizeToGo = file_size;
            unsigned long len;

            /***************************************************************
             * Read out the data.  There are nblocks of data where nblocks
             * is the file_size rounded to the nearest 512-byte boundary.
             **************************************************************/
            for (i=0; i<nblocks; i++)
            {
               len = ((sizeToGo < 512L)?(sizeToGo):(512L));
               n = fwrite(&tar_buf[ptr], 1, len, fp);
               if (n != len)
               {
                  printf("Error during write\n");
                  break;
               }
               ptr += 512;
               sizeToGo -= n;
            }
            fclose(fp);
         }
      }
      else if (linkflag == LF_DIR)
      {
         mkdir(fname, S_IRWXU | S_IRWXG | S_IRWXO);
      }
   }

   return(retval);
}


/**************************************************************************
 * Function: Untar_FromFile                                               *
 **************************************************************************
 * Description:                                                           *
 *                                                                        *
 *    This is a simple subroutine used to rip links, directories, and     *
 *    files out of a TAR file.                                            *
 *                                                                        *
 *                                                                        *
 * Inputs:                                                                *
 *                                                                        *
 *    char *tar_name   - TAR filename.                                    *
 *                                                                        *
 *                                                                        *
 * Output:                                                                *
 *                                                                        *
 *    int - UNTAR_SUCCESSFUL (0)    on successful completion.             *
 *          UNTAR_INVALID_CHECKSUM  for an invalid header checksum.       *
 *          UNTAR_INVALID_HEADER    for an invalid header.                *
 *                                                                        *
 **************************************************************************
 * Change History:                                                        *
 *  12/30/1998 - Creation (JWJ)                                           *
 *************************************************************************/
int
Untar_FromFile(char *tar_name)
{
   int            fd;
   char           *bufr;
   size_t         n;
   char           fname[100];
   char           linkname[100];
   int            sum;
   int            hdr_chksum;
   int            retval;
   unsigned long  i;
   unsigned long  nblocks;
   unsigned long  size;
   unsigned char  linkflag;


   retval = UNTAR_SUCCESSFUL;
   bufr = (char *)malloc(512);
   if (bufr == NULL)
   {
      return(UNTAR_FAIL);
   }

   fd = open(tar_name, O_RDONLY);
   while (1)
   {
      /* Read the header */
      /* If the header read fails, we just consider it the end
         of the tarfile. */
      if ((n = read(fd, bufr, 512)) != 512)
      {
         break;
      }

      if (strncmp(&bufr[257], "ustar  ", 7))
      {
         break;
      }

      strncpy(fname, bufr, MAX_NAME_FIELD_SIZE);
      fname[MAX_NAME_FIELD_SIZE] = '\0';

      linkflag   = bufr[156];
      size       = octal2ulong(&bufr[124], 12);

      /******************************************************************
       * Compute the TAR checksum and check with the value in 
       * the archive.  The checksum is computed over the entire
       * header, but the checksum field is substituted with blanks.
       ******************************************************************/
      hdr_chksum = (int)octal2ulong(&bufr[148], 8);
      sum = 0;
      for (i=0; i<512; i++)
      {
         if ((i >= 148) && (i < 156))
         {
            sum += 0xff & ' ';
         }
         else
         {
            sum += 0xff & bufr[i];
         }
      }
      if (sum != hdr_chksum)
      {
         retval = UNTAR_INVALID_CHECKSUM;
         break;
      }


      /******************************************************************
       * We've decoded the header, now figure out what it contains and
       * do something with it.
       *****************************************************************/
      if (linkflag == LF_SYMLINK)
      {
         strncpy(linkname, &bufr[157], MAX_NAME_FIELD_SIZE);
         linkname[MAX_NAME_FIELD_SIZE] = '\0';
      }
      else if (linkflag == LF_NORMAL)
      {
         int out_fd;

         /******************************************************************
          * Read out the data.  There are nblocks of data where nblocks
          * is the size rounded to the nearest 512-byte boundary.
          *****************************************************************/
         nblocks = (((size) + 511) & ~511) / 512;

         if ((out_fd = creat(fname, 0644)) == -1)
         {
            for (i=0; i<nblocks; i++)
            {
               n = read(fd, bufr, 512);
            }
         }
         else
         {
            for (i=0; i<nblocks; i++)
            {
               n = read(fd, bufr, 512);
               n = MIN(n, size - i*512);
               write(out_fd, bufr, n);
            }
            close(out_fd);
         }
      }
      else if (linkflag == LF_DIR)
      {
         mkdir(fname, S_IRWXU | S_IRWXG | S_IRWXO);
      }
   }
   free(bufr);
   close(fd);

   return(retval);
}

B⊋˚J_-P<)t= X5ӝnW;IMuje'V'ңXZĢ2,?:5*54c^?O9p87>govr*U=s͚kGFT&a^nἂTD1h'l Nl9-D,_ʂoF !37[s SLw5̋+U K&[յp ~`vcs U:%ЄI3HbyV1B$lTE"WU衿# e_W"­2-iE)#DMi؄Q,caa{ FkItJX/*2U~T0t0&.§>h]0?7vVEEF=o gQŠyu~/W5 =QpbE:bnیTGAG5))c6ܾIx/jn;P/KFA000po}5 +s^QE7Ɇ|&H[A'I_οĿe4H(p3,7pV%]a[).~g )O8<Q@<>&9 -WT'6DrDQ/tm 3ozf~v6$XQ9z%H4 )-198S]}-yaɝ|#c|I@UUUVjwx~矜^z >~n0x[`r idfaD-0ډС=oU.H'L *R!rlu|v7-LBZL]&fbM_GJSM4QQhhmj1ΙF&i}L%I͍߱yjؤKKXEN1H'ѱQZKWvυ}ξ D7TȤ1 |U>0;RNEkUuxnaJعz)>: ֦-f!uY>?FZ+5][aeTX&M*O~?'_v;Y٨c\coU M!3Y8nv$`:O2l 'Brz[] !NQ =pD-VWiJjDe4݇??M+Tr^N;n~!4Wgo&b 5\r^*ך%|?G['<#sEɫjB;]QEW>.iLxjܷmyԓxydۆCYpux$_>>|ZϪmb]s)Q7re>B{yZw{5 g834Ns3Do+- Y(_I,H:ۀV./[۱|SzDh׿).ѝͶSyiHa*.ʞ\ͧ\,6M>^ˊAkUcƾu܋xEߑP)rI%EKr$ zycd&"(i}ESf~IWRNwbqJipWFл'f͚&XnDOYvEؤ"J k2GwNy"+{]tZچ{iXeq2WI{t#EU<}44|ƩTGQOvG#J:TM4_u8k\:fG<9U^#^c䁛)}l nO?-_Μ{3puwpk/ izc:}׷y =˝h'mdІ&bQ2\?4o柍3FE@叮Rd(`ltMPB2##wmX s<8 l,}Pt0V\Ju>Ei'dM> 7Y($wr$"ל 1*r`(T|/r%lUOL&EѮk_ifTَ 1ۦh$s1"#9TKJ*QxKO*|jL`PJ!u>7|{|njY&jFF.lZڿFqdIqLfU5SLe;ӋM"g΂\F6o )IY];gtu8zSA\+)"7/q×B[xWn ;w뜗%23D2g&v7wU\ &|2#8(nUH!RYItw⦖s j 5MJcZ# fRIU bշGxRZx ̅eo*xy<'Tj=c.(Pr.RgZTDX@^XgFs}7l#OG?0ߟ?}RCOU_o F/%/l•'r= G"#د`V A|[ *o`[MQ-D#{ B!R0 \R * S/̨9є I$ٓSmS2[͟F"j +')P@ӄu5El3)|=ru,hbX1`asL@NvA6:A4`1ijVWJԙg. B)U8x=ou'q}?S5uD݉?I]¤JTK[jM&R_wU+nmM2O5ݩbY[M1&k 4̭B"HdS)$}EVX2-?W~ͤH "1FCf4f#$zڗ5bW$tve[Gڳ) m*EjM m%mJfTT**J[Q'I}OGzBxI4V ^XVkejT4# dH"#"Q. Y/šlYZꘛI B…-{<3!&uPk1R_ 55&1uo>&A9 M]8cHO:QbT>B}Qt@J/@HNZ]!$RQ6(h +HԘD$YW2%N) d-R*JZJk[XMg9Gx-cMX3t" pFLk0b\]p=%+n75)M  u!w96h%0NΦ@/ۓ*DŶ_z5)+ײcPE/Io@ZvWMyuY:|t9 m޺N8,~?!.#S𙠦 hƫ,jp-xV[,[RlяS9=4y06[QRS91$au Ѱ )punQ`,V؍_M=V3M#=䎕mgmbY6R8w_#F4?TpHe#y8񈝠 (]QDeSDPS-]XH\ s>#:!iTgЯt$ҿISG#> X8aN'NG|WXS64f,& 1񄅡'h1smOoOd a| @R)e& y$ݒZ[Jr5 | .Ң#(|kOEoEb콍8a<@dХIcN( Y>2qE^=j3EJc6gt#&Ϻo|dB*A~&,3\EȮQr!bE8ZziP/[0vrn( )[J)V oKĚ޽߳{,\zaĺevw pҟ֟d3Yܟ:)ėu=' ~v:nrNc?bB?R}7GO?A;`k!&3dNH;4U~f:u$݅ QD&@¤BJźW/_ &c5aj _43ps{;t0(|kpqanx4M%SI>#MlOrh/q9'&&Cs;֎1;x?Iɖyg6UlZ7,DЈ.M!l< `H%I cg%OiGBWp7g:֝ 5,-!1= jCn*@m<1 P%G1!>e&a%9`b@!eÅI72 ~Gw;cI??851s8`E1Y/dDm0ٳp3nĕav<WCn5l*# ^X)?>}{Dms_#!势<'Ni7I'6~6G'JT߱O݀r<H?͘STC0DFHܭߌJL~2L.ߍQ۰^]kzHL J ;O;v;By8Dex+A:TOJwlp Z"u^K\"7HGaCYbS+w/o:H%1Gb&fdo*`=5TPSشs4GU> GMPQ2Qc))ZcA  \ABz{U<"4W"z}_h_<Dfըۗm'Ip$g*’W:1ys`Y?wО6yWc$Eׂ.s\4np@N@z3&DP*[kkb'v$wt1QOu66\[ZKIm!Y+@6Zb-IlZ IVH>9o-aѵ~vvW&Q)?ޯ~u{oճI*zY$OI`N/)Žȥ)   ?{wHz잇2''&77iVk_@5bRheF[EX C"M4l%"`kiK2Ʊk)55M6ԚicllqVF6`h-bE1dDY`C-ъ6дتjJJ5QTJ*}]Efɪj24W-[QOu6mXLeMb)l*mKg{l?)X;ro=)ZK'] bE$ʃ4TeQe55rk̾JP )mK6L*4śճnx>c߳Jzzg%a>y2>$<2Z{FfӦvDZI?Lg(@I?I!ڲͿw2*J*5;Z&MB#U-1Bԡa{+baU.ʲ64H b8$ .]Sy<{ jK& yPDHB(QI VVHɓ0&L32FL2`$dɓ&L!1vGVGO9tEJ?fݻhT=`R ('/f-\2:2G(X>qN$ީЂ[l8'zs9Ozy^.j1U ?ufwlEX]p]_I ([nki=]у?ȤGqd1M&"" e?-AZ9-S!ѷmG C>zT ?']DV;^G;cEQs}tئ*=cǸNٖwŻ]Y4~9w_O~wn>aOj39Oy`zCaQ8U7{8us{]ߎ*M\"8+sRMXixחq{<4A9'PHf!+aƐ{U5?w;M. -dDA~uowv,qA,N :A0uyô;5[4~ h emAeHGu$PiNfCo=T\Bʨ*Xb:*s.Z\LK8) A. ["P~IaE*)6ox #Aodenf{+WBHkSY'~U rA#Tt iӳ;1$AHQf^`rg]! [B5 yѳfD[^Rg TY$wCWt_~bQ2[9 I6*LPcIaC{"d4=l6Ѷ;&f1~|%C!d*[s190mU ,{=+!-rA$O0RI)mRZbFdv%"w=n,ghlph3mU^`ك33wܛmUiV3A!f<dxD# IlVJrQm"Z0^2'Qj~VzeiY,D]Uoos`6 1aWR:P::0aa :@ k !#-EDѿ%?]߂$ZrNQŅ(%vWvWȮxƷI8KRr<pc}[u&+ٰϵ;@7qO?~WKjKh7q|VW)b#Cr]l;~R#d681E|X HZD}gbn#1\!&0qpNo 68yf40cuƦfΤokN䍥ş% ;&=9\l/xSa§/E8ȋ$VxAV',J|9KOD : U+ ]<֜ϽZ_eo6>UU̙—x>_b&G^wx@ ؙn6lMtt(@qmUwKH'5?5؛t|MQ>6C<z${sT2:Nvc UZ.ʁ7<`a~o:<I-8 z&``7|ψcRb(-G C]q,(/}[%?{@5"h1GOBBt0L!bp Ìbaq2.pڌќxAAE%@_DO38l9cC$(CLqH< YD[[lDMGVbSʟM䎊o=9RuxxoZݯWqw?'s4Ŵ=Jc+b.rzu\ZzQ&cӃ+cQHn&ff׹ģ`h/GXq0#&CK Fj bU(Hf%u D }P0 ؤ~wљ=|.eik$}lCa EXFE#llkv$4 .+uP `Mn@!P +߫pe>n)H$9}F3"s{3g2BR/9MG+~VT뛖%#~Q菫/4>9^&Ƶ{h>*<,%Z~Yk:qŦ;}t(/^HL p='Ĵn@ ߷{g&XV'շsEMRZұy3-? ]DIn F7r FE彿No)Ov>;:$L+$ׯx}='d3֒M4-Ǯ)| &D.EQNs=$ۥH9ɒ!P?~yQ`z:-V~H8Bptkj>Ov|~=Yg~_!REE)V5T`MV:$Kc,!$Mk2dxS DˁdE*;>\#kb7yZ;s|_קb|/qU" ZH@")欹_aڱ ( $l"?HG2 F* ?eO?`hZmjmQjfߝڸbAPQQ" ~/\0 o 1uU}30AL=M P" cPtŊ( m!sT7R$ ,H"؋R!@R =>۠%mhթ4ZmZѫh6ͭJE@i_?GͫxwVF@k2_CDږE.unw;^"'v҈wH)# 0M K 1GΪ[XC{r! $%&KuEIY);q(S#Շ6w p)FeGAuh֛: "R "";Cr%ɾs-˅A4}4߃Fk-y*DOy+E,7 ZlPl/I~ҺVfn~Zw~{?YF"3_'cNWaD~r(@O\>0j hqdUI(W`g>On.*EM&~LɶTKDX@jhZ @%SNBRgq[ooc{\\f^᳷O;=N 詠RbmftQOK/[R#[evlcZgd\7佦U[Os2ڹ97~A;j~ XR]$!OO39D엯RS8t8#1-K]8xh,M[)~0[Q,8:X'2oڙZQJ5}V5s&k/^rw:# 0HCM Cf&;1Eգ'&ǑuS?0fjZ;ՔrH@o_sf,0#`0WN,a95+&Z*\>%oZǀաuoɻc,UQ=0l)~ qttoBק%Ljh0tln18Rml8E]3 ɶB$҇/6Am Vͽ>u7Nݫ T$"cmkG@0> e8$ C{OiӟFkLoqA%gGsA&ӐIAͿBq0h80m4LCUG`Z%}yb Zm?¯m9r<}r>W#AF ;{?o_?_OoO#>SУ1RCHbgA,˳ήY#[PJS"s/,oDMŞ˻woElK`\M%J E""$xE>X7& X*~ ze<5GܽtD#Uy>'H%hF)t&!LN@ZA\- KxIfZN凟Pi"X;5! '߀|`H1sI ۴෇-c40?fap~ٽ5=PIڞ{Fwx!*  ME֊bc+)J%"w&*FtaT'i>A"dcMJ*URsz)6}&zj;miVxhgC . F i<Տ"P21UCNCk ^1/%  [J/~9ȷND(p_|}/ND7͠R[9D稯X+EQZSsnGg|Pm"Rjt 1\~pS8*l:H;s<,RYY-EoqK\w+Gp!DqpeA i6:=|NS],[ 9es٘ju94DQ5ܖOOk_#_d ĨH3kھfiG /nTT^SW7GFsQȉwonAlvRD8q!"B* )XaXʒIݍg< CȥU= Y O쀋h$ A*?d:A*7sgΒDrMČl ,+G(,$w"~Y0E}g$ H_z̺6!r\y}ڶP;1I(O2}^+7FͰI\q$Ɠ2w)vigoȼHrpDYspm^zw{g&E{z9.%zw-&'QpS?}'<4` @E q?r~Uo'`"1>d!B@LQ+Vg?+ȉ!b69&u ;k:^ǧ՞DWՅVn$PU?$!wfʐ:-_شGú ?΁dqX?.!R%6,_ Bf_reTQZfaa2[Xf3H?0:Ġ)f4n᜷%[n/.ހ)mVے|/&2G8ܪt+g &͎כ[4#=9uPJJ#8Tafg;uRTDl﹩ZL7#˟(I%;ygba9ƞ ᫡ԙFO]XL_'5$eV" b#'ah%{VBBB[%YFX{aF]E:f';Nɀc3ϯ{{2u^:OĘpaN/jUTa$ZUU|%V_rU 5SSOQ#囵b9K_qv%ٹMHԳpz+vz&DADz. gJE4ؼؿ!Puu2I68zɛ`P|pMm9r%V[DX { ""򢞅OZ0}|~o՟>0N,-Ͻ"ggOt؅k^Yuy,\7iO޹2dx$9hn9D3ivZA$;~M\ד{I$ 1gwp<0OT B }~QPy3IG!☆RjGDo<ͥ Rߧe2,e\b]TDb1,M.H1%繨nowGF ,kB?|oa}^J.cꏍwt|v$a&B\,2S[fVzHxh`xc-f lK_S%X.@k^a*UHBHM9CqO}뙴QT䭘ĢQt T^|&LGc@cUq@"r |[v79 HEjlpJp0k }^ (CSo$vѝl^!#|EDhc{tB QUl7|Pw>d<{:^RAH %ɸίJU~_I=cu,  O/;f]HyuvkursL7,o-x#nWL+$#wJUU5u#V i ˹ ^@L)#nHJ$(pm!ҫ'NTeps,m3Gft %)#(>ڿ`03@KH ʛ~4q[@ x*Bspތb4 0wtӺII$QbT>1> -x^|\c% gԚɩS`03噽 A~pp_n^^L+|1p0 ``_5Bjy'AWp`2 :6v(GNk,/7&3f91kL}v(\w -e[)8sӝcyk)NDl:h4}ʈ*p2̼s-g/vM>MڌS2-#" *d5*XtТ)b KWGw|hFSML||JQ-qY +3+#* Èf75 {22ߕ!ʰWs}_W6 ,k[/PҤUWOMN^^ g h#1_(bχETcӺ)FhbȄNyQ}F8מeGy?ˏn1B!oEw4?N/n"NuzjnJncN쌍ִ#* \{ F*+.r}`a@zo==ɏ) CI(Lz7(^ad5Dad$~\^\VCER!wyo&,}3@]-16:xQrll֟ϔas'_׆}TbxPdU+nc1dbuIxQLP%I]Xhrv&Bư Ycrz:W e쟪+Z@CD[qo`-f".o$*Ų%x6Dj1G}KEJñ.ӹUSq2k{k`Ioߩw`jsPG0%w!@g"G [܎4E.EKjML⻵ ߇"d8 `0xүn|^?|'->0x4P-uR͖ȕ;iAyZ($<^2 QЄ4@ *|bX2bHLxxyy!SQM_x؉xJ5/Tgbfm?;LWoߡݹɱ4{j&KmU4;sHH_Du=,Ɛ ?GeU~s|wn2IPwfTtYwDnInwL1N!$BQ$l+QВD@3#Q .JK@9QߢMl}Ƭ FRsG9 4k-w=@g]/R]tMջB)%G1 ?@ =0RXZ@8ckԮ-? \L*L@.$vq |pU@Ç~չٿl*(LfFθ8)bBϤOϘ`fw܏h^֜עy|u*I}<piB0yH%YER0?OsO~,N ;A.Җ\zp6so=Q1 TcQ ~ތS`A?Ȥ1|y/|9,38#^aɁ9:.x)DP+wcf Jymו6{$.)̤8.gZD:Pg.DžD9{fws $$'tU}tnW.̓~Z\%(–YLQvPCQ"Ċ‘iS'9TEZɷǟIJk0.j\w(Y$Bk gJ}u'xC00Έ=Ve}ɮΣw ΅TĔ̗kRx85:TsisF3"C8u HZʇʶw>iHNyhAUy|D$_ԛ\¡ۦƍE$]5,,xq,,Վw&Ǖ҃+/|wN}VDZ$RҶUyNO mCQʫ]QBMxZ稬zxegT3}c+nkL R2eMN9ѿ^IrVo/6НI0e-Tl~?o?#w52W2eˌOi=f@OQj8/ڤB8l&i1jRUUUݣ]q:={gW& -L>"p`_j30|f}h)[,b5/V1lv&k -)׵^ /S^[yѥaGB:{.9D9Bc#o5ϯekD-hC\s"1$EЁQHǂ]M߇?o.OW#D?w:vuW꿗%<( !㓴;A$4_ow z.!brXL\39ڵFfu#` "? \>q;9eR}7'C8O~@D9${A|'?'z8E`nl0w_˟H8$Q}WCPR(d yBNEx q#-yѱ?~Mi*y[wylKWάp[[.m-jjUQZsN5^yw9o"N {5$}$>N~s[ۓV 8Ӝ1 6Ew++6IKb3 ƽш4"?<&W;sd]GNX;C6EprYϒ.d+ۚq}fhl$S6\cQ5gN xFaA"7TJ7=kͦ0#"K#5 h-v UB,Tv5w%c +eRPSq&:nv0b\QPdb@R p@3`܀gwww$'+$[Aɧk* ^nGT mq )V`JwZx/9#rİߎnp%8eJTe:X=K'3t3bKl-r@p#%Y] @Z=*tM"8yN{r`"y[]~,C8wNI^ ^v9f6TO66;cwZOI08p2e:Uf멊يĥD;q1a7CuCWP#d;#x2Dd B=/YQ΋3g?4OsO2n9~$d&Rjȟ"dCD=M7,'1_FI>/f{ϛ'>> ύ=mlw%u9M@%"n]xV1 Ҽw:)#ޡs쳙 #!:\;H_.Jԧ{ n]as*4?zBI߿0|Ğ!v2^'EȮa}ҏBU"/E |K(-&Ŝ_{ ~]E*o[p\N&LiͯѽJͳPhf+ ?3ԐJ"pNՊ-S!Q{9?/\L;[G,۾_$H(X,_i )\w]^| UX%n;?9TCȿ:e )Aգ5qo,o8yI8-b,6;`;Ծ>ɘE[EY6nx0W|m0`KݓLv6\"KB@rrc9+^3oڇJXgf==eܬ$15 Q&X[Bhmsn4DF# @`x1|p<8¥D&v |G y'>j8t^9I4E,e-iؖG7 1ɉIs,UUy*WC8XY޹q.БD&Zz "Kpƺ#$UjG["Yxyڗj{R"͚-+D`nR/h 3Χ)ݲ~6AJF]v:Nb9F?|kNb)eC Ӵ{- =S|QO )DDB:rG"uTI*g }!!ʲ$tq>|B /oJ',KظA-ے;Տf w,Y7C:q?{Vj5G=<>XpD‚%;m9pTS+"wu8_h o²6,I%>ϛn8˟ xΨ#ؤm_@*:^+>{Q}ptYӆ۵˸xIo&0xݵzz.d[.9<8K5d }APUJ+PTTNL`)=ҖWaGjay$+eýPO螘s-. Up RYvaqE_f2>zp>7oksݼ\dT'<nkCV͘VMԏ;_vǶqW?p(KRt^M}-f%ؤ0Ԫ*֫z~ jJ(i$KD|V(6ilj 0U޸LAU@#$>[Ym{oPZ0ݺ|; }*+wx(~Y3lr1ҝGSMլK Zaׄ.z5x$yG6nx<3lkQSZʑE<%={ǒCD =7Uckd =ᗩ ]hybU#@j{l<yo|P2ք2a+pVlY]QBzO8߅]MUj}9;Qi[ZXtӏ.צ~f ҽ ]Oك$ »al!o5FM9'{'al[E@A^mb_  '& k埽o=[b|K.˯/A.9'OwbWkéȉ&չ[s~}U^%K&yXF8󒊐EQ%Xq',TAM#{}M+C3YvLNKBfdIA$!ZBA$$!$DH"h/o!8 KhxnvFYyI->Z]JE6oG+)Ɖ1aC>AjR5Hw$~4=Og$1)S11LsYv_t) Ҟ: G"Dl <9 5_{ DSŤ#Gatt0bLg.P@Rs|QFgv8v MklT( 97DLT0¡C34#Ѻg4Wf2~(mqԆNDfa8ٷ:A`2HLRM1 NbV\! #N]LO\k8INr]LsO*ˮԔi+]&{Ch.(B 9Uj58xySx >myV=HY<`a(TCgQh=Fd u݃(!;$H7t`[^Can<84z@ 1lEY࠹<Ȧg"2"C '$ F@֋Ӂtu-B+}2(D6c^ 65@1+|mm*{g b ׽$qFq"K7}D>p~;)#~L5x0l -0[xZJ5#y}zV5c}0$پKOn;RpS@]j^NF.wOVLaxUj,701,#bsy>0oo/?zG}7BH!TU*Hd*~?wky&G)Muߨny^,@8EZ\ $"Q/}`a@BLѡPTy0{=QE׹$9!֧L@RH7/+Y=P7^N+-#*k4#.mԶmڳ)0T'7-%E{̉NC_ӁEcIG)hL[ N-$hՏ,"EFbRk9 [( A\@,. = &爇cGEB%uqBq`  *o[Р;DATd8!<4icWjyWRvI>*l{P8*_ আ0kh4#RbD( Bw߬yA~5,@g@#BHI@_CZ9{.B"@iLRT6DR+_ qX~Dч 8mLY,aәUw]Sj*P'"6}b0* | tSqȝ$宨*]=8H@ QE!{ 6rTz{&&:9xRM6)Fo7fl#v(;u Ty!橔6:YfE)%e!"'_o}|2Dh#*=_ߛĘ\, c+(&]#7p.b}a?xT<Q( 1!j;Bzg|X>S 0g}1ƪJ#`5f ^xJ@̓my2TEe%u-K{qcv cUc-d64e;4|ӷ^nݱv % *H$M)4ENk4~'dgV~ wfy;7mׄ174BF IfTXE(0[nK{4JxKI([RUx 8PդAL7=5KD (Iza (М3 @.amWޤce$m&t[De2l:dly ɈuKSc}jș8>D{wQUa_sm[y^M52:l+18bFjCN )]A0QP!<kN,X=Z^n )0>(t>_W_<ꨀ55`*rp][.Y)CC#庽\U.t*OFs¶wɄtmmT!J`1t)eJR)L,,!x!JJE th)IJ%SIy"AdI" ;lybB+_+lkhC]H9ޭuϜU,aUXI/ӰgAA4 kᑙ6uL.M&dWiAG4ى@W䂅`彍]|˖|=T nn%'fD^R49Xr)p`+}f{39oIqX9%D$E/ He[hum%Q#mfTBYBgE1]GJH8Bq+DD˗/~m`.}Gbgr.,Mh@ɦei<)i\ҕ v՗=:'E{ښB;75L@RhaA&g#bm;-ZMJko'&B[Se"/kb[[\lkZYl҉") )"K4ɄP`EPQeH1 rToe$dX֊'o->!pܱ@lARY(`@KLi脖ht4pl%Q%R[W4ZVj! ͻ Fx`i9l7|ʦD \ ş'(^y [8`J;n|<<>FQ  45@W.HD>ASsgF%Qa=bzX ;gcFJ<7RLe佂/p䜪BmpClc!u4 ^/Ai)R*RE m&Qb*?G2HHFNO&";Fº7r7Q7+%AU_ (ԍ15zNJN9SNܨvUԊ'=q=>"C.f{$D"DRïg$Kad#0 !OMSU:حƹJT ̶v v&Е?I4LT*T*?4A^M]UiA%RJ#MH 6G ݦaśP4gK`&T5S*G290I2Wi8j>|?$;Q͈ݺ֭!*c s PH8uqA\(pdH JUb8 a \\$<%J]T鼟ը`<<Cvw}<#~aԠ rnOl8*?8Qΰm'?[MHhbJz9XVC)ĝ;oz~Ѻo]$I%뤪gGW{zXS.9FA'x} qTi!C˝ }{yfPa` 1q:9v)k9Tr_=} 0Pd@S1dx} Ő"PJȹv%0x)Ly d(-&?sq8D} 2iCZxue\M-ٽ?Nb"~U&Q^V '!=py9ݙ!FbT)Q)& YVP A~֜{RSTn.gSxRDD0}$#<Ԑ?!A LAD}uF$ju3d /(u T6JSZBzݻ|!_bI_C72k6;q4`ߋ1Wytr-}r*QEi|f+Κ(r*ts_ɡ̰Ga߃[տ f+=~}v؈}ƣh m P_ :s{觕qun Ý VC:7gm>p/~ws3zu(a( CQ/Ҩ$/B6%QM[ӵSȨq09j끄'!u='E>;,}O⎣D֪/{ Mf}x}Qxe.qv=MA^~}l?,3#<Ñ:<+6ֱHF*S;LDOJL,:$'B&~'յO'ʨ C8#;lpOH$ EW@*XoB$F{rgWe_-$<% 1 I-$ EdcUsj@c&#T¡ԛE0ƅ$P _%25JGp#~.~hχR"9"҇N~PQ3Y8$B7$rAEC;6įKtQ!gyCX@U-I"wT17pyp21{P `Ҹ.(tZ޵$DbJ>\uDsF* PH)Nzg| :q5%홑GT8 a $tj#`S;5LEEIN@ssvHr1UH#y*8 NJVDG`I\iENESR0 ŀf{ޯV  %- e6D@%Z55f,:ͅMʂA0&Gqp^QUr&_!Kl;?:;Co>O' }{wfZDÆ/nv+8a)g$H߲ڢmpwz wGr;b(-S!u/ר}!4$ыSA& vq@ Q3 "#ҵgWOVs5c%PS<[u1U@@# QQ,HIYAJX ](ͳl;sw @z9M""xdYw\b8M̛Z=eD\UPMPƾU; ŲRg׽Q'(^Z0A,qDLGJA;p9ى^A+U `po+d^  Ct@@p-|^~`̱׌}c}*>>n|DLD0mrN>p<p/:>:>/W^P5kC'4c2k#)­YʝcS]MތgJ&/ŰS V*EI?-*<0@3वI|H~vΣ;5E=P7GFI|>]O~{E8@GJ([.0 [;F_WRh'bh%M8`l툞H~n- JU)L So6lLyG [yvxNq#VG$!x)Q8Q' ǣ'I3fҔ/#Wa蜵F0x1d9"uJ, <0b*. B)E(Pn){?%0I$*`Ymֱ*jLHd(DʐKR,QV+ EB-Tʏ1i D8f}JKRHf?"5$L#@o'Dr  ` D$SQ*ab=>Jɕbu6Y$;_E(@b/QDAܵ!r''oBT;BJEoZp@է9auu7#o@2-JDEBSQ,PbbfT*Jb(2`INN[S"%$` eCLeI./(3OE*$WR*9Յ*q]j @I?I ZA'mipP|'/f1d- 5گ,7}+WX@lIQݨCH~̱?5cw~30DxE7,~ Vx,@\mj~N|-/Ab| HE޵'yE]#i|42л !1%gÒv_pU]ͽ q<+Z66+9t}\e¸P'z/E}!Eclwzzzm(;!$[^^>Qu~ㇵj9aX&" sDICBC08MW\to:6#heVۥR֖鴚R B,ؓe2PAq@X#Xq=U@"!DX6PЫ0ȴ+fUXfOa|d A[-ZZ aP$}vMf)>L#>9YXYRőY$-KRXdx3$f I=Z4 *qT(RSVbImԊɑf׮c[my٩oXdc[ldɒDmRAa` \ 1EE$UrQ[`Q E6 ]oZQR(+0ԅ+B?6h",'׻Z⯫ vd1jd0<sQoC'LɨDkLfMU))eH"l~60 =* et| ':L{[Rɭ0֩Sj[F-U5IUZHE!UN %(yS@E~8A(>^"+u)4nuzwQPup`#"&(@@"*-bya=O2r#y,'HGA,BbHèxph!7H~u%w߭ '1)8ŶJH!"K|5@ EJ kE 4GHDQ<Hii$=0l`1U9MہC#{4Ca[q5#H-($#C6(T@(W磆\%7F\/Ge'~ Pn __+T&𨍲*r֫v/É]Nv'7ϵ]RHKGg_>&-J+@-iT!B\%9w7 Rs R̓ijOQMQTHȉuȽusT2hd:ҁN4I9Rn TN6ݳo$~FVix9l3#{;>_~Tf a Hh- 6UkriSE$a?c|N!rE{m omPUT| I#Ԑ:^Z"RhEVR)@V" lԜ?_;+aq~t}EĨ6#t劢HEc1VY<Q=| Ti݁A^U[H0V=҇Y+& dbk II$#VfՌY6۰WfIVHϓCuTZ,GBb`سNni!}laN_swRʒHH`*J̬DQVLhlM(5U-Sd,ڕ(MV͵K054fJYjklhRJfYMZU4Ye+fZ[* LMڋ-lI-F5Y6Vh 5&QYfejVe,ʲ$d2 (2knvkS&SmA*(TXTIVBIҘ@f`D;(\ uu;8Bn !ҍŽ޾/H| _<C(iMQ5X;R(Ld{-Ûe'ؗO+B"5t8)q0!e>KQA^9% ɦ: )Dd}("8DDvnQ"a$=NS{\Elx̊i'jԨON O]m4!逨,Hz҄Uݬ恬k~IZ KM5fٲHqjP 1KRhalppToFhqI%s{yImײˢlJe2VZ8UTFicPnę(']KQUdRMF3 "\h" GXLX4DD8UAVm$`%GXViIH3QAP TAbX,j-j-)%P+IM"4 aE-t _"8*5T޳:]kfԼI6{wVm6`V<T7I%$Q%(1 YX6MS"s$BjPeZW\=!u*+kBQfMTeA*ԅn}R@9)kML/o^k0:{TDZb򅴗?^.Ȋ9 !<(A <}4Igo3H yyu *`sj1 B]Fj5k7!iWñ+MGb-@_ [t y\"sCgdo(@L+|E"({p5{ 8A1J069:At=F'큐fJ$y"֮B?6km5 C׫vcʏCfwIJ4c7MS;u3epa7o!KOI4č4@}bdZ">jZ-2$,$KAVLTכRHbjQ5">0 avB1P-,Am[dx(iJDeT00|]B"0Q#IuA(&8fvEE}"AM?CA`)RZipG5t~':"ט5/ X,0=$6RCT 4%'~sPM Dgl۾ ~G/PAG$h:D=ԅ!Є |y cX 8"1rR`)W+Cn8&fKiV68y ,Zex8*VUïQW|~k"_Iz>K6Id@ @T75C(23'zZEA*DR/'yLXJ`atq w᎘b'@[=߄PCw 8 [Tjۂ‹A:0[Y(FM#~5$9~H߱#|`x\ )*ʦAU-z7 b hG$b[ys6dd[8RĒ!HaEQ 0ZUܕq0<sޝ.i p?!@3 CaZ |051Kz0JQt}|ۼ?Ve( +# zZ$b,HMRTElSTdǏ"b%YlcOIT1MP, ZBL4oO>@J:d l+zĀ Z-a6$ݮwnUTTdg%g(y>Y_z1O`$ޓ15h1&1f,a7= j%F_='[ '+S^S@H 㒎X ?tT8D"HRDW*)` Tװ q/b6Kկ7gz˗bš93˲\Kduo};ߪQh] T#uC 7pdq*܂ZoW]f[KidA Bq , i *RtN»z!fMFK-j-ZjI`}"' I'rr2AUt}p=.86"$ ~9p"X:Uq8' &hjHۃ{濓o曟xaxPNF-K[ ܉} 7ɡ4EqDDJ&ڠx6p<|U9: -(j瞿`u9- R7`NI)'!FNJ!JȜ$tڥTdr9w!qDH*B⅀ZB\nuR+ $]Hb lqLQNʂ"plUkAQ'V)YyMmVֻЎNߓŵ].cXȖ%1~HRVO 򧕣LzgW:te'D*MO㪫imv1"%8⾗]߀y[*8 !WR{#,`&,Iʒz U2>r%1/f Nu'RؚB9|ZC{z I.] T)7|A$D! 1F$c a"M>xO|Y?$V*_]ImY(r 5-p4^{$je[o)yrg*tD0'o ̉;Q`ycQ E$5j MުDlPDրRG/@U쯬TU !G+`DD9$!Au?Op}GEDp-Lb1" r)ݎ{mb4xYz}>z,/š׮[Ep͛0i$?\iQS`c[hUR¶3 hK #&=:}q}]T2)`zy?(nq,AL'hrX12Y4E IEȣ2QSC˘24{iӔ{L9@=FY1$C"\pvn(6#$R"87oɮ_khfջ?f2RfURDM}LZA*ֳ˙aFޝj9ʫ y1-H UztiTQD5:`ZWBSV+ gd bzZCpGIeB!)IhWR T #ϯ]D>qq *;(P " s{tnE_/p:V"7tfl\[hBL-hfTٚ0JȞ]düu۩[~?P&wFȼ[]Fb/z(NfB~LsY""y"կA3@)ymTʇ~Ն*3[H0 ttpKBmݴWu~;g7ynkj:z" "=O D=JT'AzρiD~>ߏ=Ol>n{UH6R=bZ]yLV=^f8HI7؏0` Ә8H+RJIB'|v⻠tC rb&,Dd@3`̅vxw鬼:-* (**FPT;;zԹuq) *r(aJ|YTij1Jg!~.}OG^߃HAE Su]7g%P [%**9hTtIƯ#ko>ENV~#ODL2(E/ʺD[>mÞz)n=^DBܞO7 Ӧl5 "5esNSm!31Gs7}ASByp߻:P\DUL4?N"/E[uIk1pnE>WU>]7xĪUbpMF<R0JN yAMȞr {΅t ` "Qs8x{DXD)* ")ӻݘUS4B ȰKsrN/P+fNJu׮9<=$ AK#|3͋EHS@|wD$C1N;M=KyƵDAEmi7N+.17~>B׍B wʹLx\nt!1bn7?M;W|U/vc{7 2oeV:Yq|י2lhB5/ lW-ʝT'<`qe# xwa.tIpBBHΤd¸cLIa*MЊHh4QrE"j '!ukuXI @ iALPC`vjREI|4Бu q08ђ7NQUT䃸 L3UD*2qS@@a%*P+V޺U+DZصq5ײxCEwASAμ1:$6.WItn^{gJt:tV:eR*%)Z"h p@ߘfDc eU#6Ke< i!ĒW4&EIhtPhHf)[ h   P`0Tq8ZT-EҫEЦDu%Ho$B<5sq #R:.т^o-iFX0 $q->m-?շ\Ǩ9< Xi<ڻ@kũW* frO,r2BD԰`rr*:#<eXUX$ʌi kZD#Ы+i0cAު*Od?~$pp81d`A)`cV:tHO9C'@R" S7#" އ!GDp{dI?OI=ݎv>zbYRciRwT;x1"e뺷trwe,JUe3&eS$CpmlQbufbJ |.!:r#*@8&`CHd)%Ц#@"ApEǯgh#Ca^AR \Lx`hiEX7A5q۳i5F96]Ɠy/k@1B%p:"kۚ'$J0q؉F̩QK`2"@$91/0w:I >AKsR>^O @c@Y"((ZB,r8||ϳ3G@SrPy?>OPo`PH[ U^%8:]/}Ͼ(Ɔ֬{?Y9`~T"CCXA! ]7hf:?Sa(TV0°ӒZ%8 3RJ@7$la$Ij۩*JJJJKR:ٲ1Q{ i٦͕f͜\ԪHNNzФхaS朲\eB ء=)R 0sGTG:SNNGi;kcXC7Sĩ]m4#NY!ëTrv)yLcn6Aɡi8OOgqITԔȝ|ZJLA$&#=O*V0(f`f>Mbhgil7#f͚G7w:*W 0 0 0 ! a!u*U*"V1hN7u"JE)rv1:$8~toNTJCGc=.CgL#>mxbad l{ <.hx5O ~RK$I6׽`U}E5Y:3gt2CRYvZL,0a#vH)0)õCCl.ZI n9OHE:ӓ̕FGiui UQH!"X:JxLܢZDj[z[qP=J"XF*UJ>$ΗqK .RKDhٺ&fEպ5\FS s/mэ QTWGAG ,De"Ned'BLbL7pj۳Ĕ)QG\!FִJi%35Lc7L HJeQL54k& eqLѹ@!1 RG,$Bt rͽB,zwǶv[ᒦ[_+! = ԏ[ׂcHU@S - 4ZtccC-!HaVA/s!%Ȋ(}i06ӟ|MA!:PxY,W K{CqjU v %6 #g 5 7lixR)".; ~>\#LC1潸 )ʧƘqYKĨlrƩK݁zf(OLW,)EE&g* ԃTHQvc/b43=G`&mWьlcXt1NJ_'G^V!eeF+ ᇈc<~M°jQh׮8I$d #u^2JjL&\p1G${dԮp}/;|kviF61[ ҩCrjlS%$Q yp֦+t H[yKwm0У rD&"dQ#6ƥZUn6 d MA/F9  2ŔH Ӵ#Y$e/hlbXRe'i`e 4#q0ݮgpN@Le c#%zF^Z0VB8E$,T}[H+&o'0I V}vx`2x-}(IF OMQv042x&KSӛ i Jg{7 lzgON!94\ x 7!M` |o={||I"6,D@Mt11va5C *µPCI1 6+7MqSSIEcI,6 3 /h, (ż&t0Ȣk\|]/4DQ`➪.[^psX"NͶ=Ie'积|@ $CBr0zڕT[6 ၠu*X_ F/;WyO(J`'EDF<C?J|n_ud(~-$mNarƓyI:PI@M0B2DN|R-$𴸝ΐC)& t*Bg’bjQBXpF$K`X! hJbd`='!7Jvv+espT¸Q L@)GZLGJ"y#tT,&;6cr/( Vo?Hcp (CҒbFgQL7UEbLy + 6x c ozÁC“b 8$. (B9M˅Aض6% P+6U'*$hU,QB!SdNMpSw㹢rYJ̆ETq$[XCi0ft L* @rD{ pQj4hHZveC QHGTR-eٵm1I"ئB&kh 7%:)fzk k߻ٗ5ʤpSd8XVicY`Ɗ@S + Y$HҢ!CP00c 䮈gZic|ͬ[B#*%Y*+06uEP }+M2%T$8ҘLб9 FWQltGg5b3822%6V.rcc$*nboU 53&Ti:q'V>Gf"S\9ghSĢ{S;] J͠`xbmPҹe8 t'@QF!Hx:V*^I0,n&ns\xt8'C9nca0W ~CARcri ۡSe fn\pf"L:{pM%nVJG\E+igHFͪ8)HtkCvfqNf+K'OIFtkàBu7ȲDHl܎2hX0J# a9^ȓ#I!dmƲ8+pzdvI4, ꆣ !ZhQ1H"QVEl{8vcHk" ii rKa,Sr8b:rbj"U{m2 ū)n$^.$jx9Q bQ-28^acxnqc~Zor:I,bobHQ̊o᱉@Md$ pjѮ-%r_A6oSe06Nh֎wsm\39EIfڝca1,Hr) F,XY3c Z6ǾZA ^݂]XLtڎ%S'#)(5;koI3a+9PED]^%40;Va ZƁ!R16=ɖÒba7Tlѣ*-4)6]x (瓵#&!;Q'\_aN5}qJ3k 3ZZΕmֵMvB6Ӏ r|@p997#!ɛv Zv)(fQ mVfpf/+a"ȢPnFf+ualͅ1QsN0u:Kr`aAOac|yK 悍4 0bDfH}7;,j3]5wԶuٜ9[-U-x; yż &>1we8G18,ߧ:$sqO\=̙Ô]1,5EK9&!G pMedvqYzf4r׶Xd,3>Buj7t&qYlb3WmCB~wN 1y`bƍ@w%m-"19"BX~HtMƢ繡S.z>h-EϚ{kv0h 0`_;c/~VyH. .=ry- vNY.lw)"8"9c@nCB[TRHԐ짶YWW!qN4hǗvFddK;㒳Y,KɃ]a6wIZDXNZTh]US(&DI*a'So6޽TOTXI.]Y:]'9`zbS݌;m%ca[Dyd${o`2)wGI$J[ ew =g$25cT7 P 'Aj~?w ~qNpOE9N\ 86Exηgn.)Wl',Rȵam}>e^.6Lbt HBM#0QR$|D,jV|0 - nI{ l@a2MYe|cL ʍnřU\j\[nc =K @l (h;$5 "9HX%%X*YH3{} ,EiOcuIEfLe .(Xt!+dt:XnITo{“75g2~1/yAm^>_x7n'ʙzxtݠw&TTRLQP2)D {,A3k$ƴ?N 11Je<7bQ7 HFȒp7Ggz<k1T*.4X4܂˔օ ?z!wa޶Mt'.փ0ۙ${'lXQ)PQQ+K+HL#peHՃo9*-YljtPI` A{&z J*2ڥdbCU10Xlhe0_c$坉oq 7y7Zw δD&i L@91HP,Й[ .ȆAI- TUf MJV"b zTl/DnH:;G iQ7SQ A\\0ܸ?hN@ZLMZp} [#_/:y b`#cCq[ ">}ΤW2mfY!ѬOF M2'z잘[ҮW-mzD#dqlNv cHɊ%+>vԹ9~" PmlDlXb郕W/mZ(K1*-!<0&.i6a-qб`L+0AT`ao')m;#h#R1j#9s4jH}cKUXcri^q]/y45D-نEޔrf[IHF6Y34Lv5O::ʜP:ݢ֝lZX*\R?E$F(C衲)dPH\o,=T^P KJ.Q)D05$pF0 T h@ZIRֲe%)*ƣWtwk-U2xRu-@*{ouYKp_Fіr CzUZIZU\QVTh_V!J@9vC;R؞N@u}ƃaGK;!!6FHIr\eBe"Y5)8*!궨(@&C!y3ůI^?'l5I?re3 53Pjq9F깄1dDS2z݉aѝ fMpVɸsWiNiDQD3XB5~iM}9l7#<3Vf}2t]7bXd&@&bF|Vf->fh780{ 9Q`CP6pmCV4~׳_A?LY pz _=?JvgBX iH ODUmf]ݚK%id 7RYU$QmUUmk EAVtc j<X)%m@*ʽm5r[1Z2,V6ij$$4V59!vGRyMP*?čݘC_vgx8⊻ !JDj0ֶkMk]4Zz\mV2֭4Y"xFڊUUTPalE2D٦+)@M5F1!%"A2Y䉕U|i9*}f}JCsvr.VF؎RJyl棭z$Eұ1GZU>7US'FC+7 T@Y^1`!VlqWe(7#r)lǘ L~b_w8cDU貱CA ъ"% <:wÓb!'"hEѭWedbSV$2(Y*fUNǁ]ܹEPv V`fأ Da1la Q;}oWk&)eLC  @4% %SS@ Ya)>iL*A.ɕ `A8C#j. XRV*5D֤n?W9Jt`}m~{%2+kIPNrՕ|UL >;7rrʊұ 3#I.q͉ȰR$HM˄GFP^&bg12dܐrZ}ƠDR"@FuzbtHUYތ!r2ڕq>|ltAa;;-z!1\Tz1W 2 QKK+F\V1 EdfTpK,|OUiubcfͺbM벯I\/.U84TK\64$ej65:00G  t㊸h¦CfEId 58)14X'N+3voe, ً> CP'l"R\")eXm!"[!T]&rُ#2߁.{ שPbr*iUޖ9p14 $&I3<$Oa{_baaXYmqɴN4a 31%0xHHϷkFl@"0i QO1nQ 61(&!Q GpaKkNDKMXst UHy'L{_mzJ.Ij} 1*|bjGiac4fe$SG4R-jeP6 @hE0]AG>}B[jM)->}tmn$ݜuԵMp46cW G W3Ќu$FllyMZq~Mܯ2 #߉?W4{`| n"F7_ e!D‴$-}c2FYZ&F,ImzWjʬM޿qFezͼSUdX%n֍|beݽŷUzRCmW"Ԅ#L(8 |`"S,$zܩ,8NKXNԢ%qO g^F)d8?GM(lI \$CԲ4T's hṾVVK­_oͳʽ}{&lTILIHkA7> Jm;zq5 <aY̺ǖ UV:#h4bdxfnNm*Y7vBL ZDP0H+]_HJ\LȆ 0a$ 7[f&DqHZh[>d.O"";ip8CK}h#tN!,;at@+1҂kP0 #7ҞXXKڅ F H6:a{ s  ?ONeQ,[<8%Ķ!qe')G<Ȑ+%H|H da|t1uɈ¥bbpdk[ݭx7 mJ[*A[*o$)u?{ 1$H 5WSa$J=x0BhllEgaB[J|>M% % "\13 'x8:nۼ<\7MtbHjmw[bbvZtF~x$v/_&B!=$ 'H@R|In_lS͐&!C'Kb۔<# ؁ N 2x,F&$vE󊊦G7?ΟTWs[ b2(uUC? gUZZz\m[\.)%Cj:O)c.i(io|̸GA;;hJBr5l.U;l,$)bJ6#)`h ⥐",l ojilmRR{m&2lR115$P.BfD +b@fϮ~ #춵w`]RLiF/!N!1M0>Ԃ"tNI o^-@F՘^0jifY™ V Bdf6i( j  b*BR >,hv/6ũo2KYjv- 4vlJK&x+dRbuy-ٙL *4JdnlXeo֍` -U) [1a$I.deSsyI0Š!Ɓ ҰH(u1$y=^U^5uͻk\Qi5̛&yN׍aEK&QWAe, X Dhg q/ݖ᤾]2gܒW٦C(M ؖp2Г,]EǗSzM&-/Trw_'T)038y4NᰣAxJD01L*`5LIRB[ (iÓit>m'WcRAW-kmcA-2 2 NIZ*KJΑ\\jI 5 cx[шB"(0Ɂ%A.AwD$Q9 chͻVW%3)C(V |׊xKt9DG?lܮb>D,>$HȍRҠDI DqF4\$EHef*,'Q;ώ X`{连?@^iRR 9qև,ԍT Jxc@ChQrqbd&"c!>F؊y\*]*"mPwHL Ɉ#i4&I! F8`Rl4{i0|_md*TPFERBk% ER1b!XWKܪ۷^moƳ6"ڣZZZY{im0m||Dm7 I&"HȐ^n4%p 6Iٮs"x ( "+!9rҡ9N,oM/Qw}N$<x(bIHZU}է1ĐHM$zR!HJ9nkʞ2:0r6sd8pFHiJ< H~(b&jJoƎ$Z`V jtAF*ZI*ZG]./ɜ:n,P3n{o68 Eom+c{F&1 gy3 ;X"4`CL|J*jʫlEת!뀇K;!Qh؇F@,k]6MߥSqE}]cJMO*uȱ%xuٯ!R#)B%^5bE}vLu5W ; ƞ=9b~ւQ&C(IsYt73W׼, u řY3- {Kf7!!)UXx }mƊrV&:s}/MU<_=©ZBSHJBTSHJBT4ov!*i SHAb) dӧ;9#v]8 .eh=bQ'wՊ@|ròЛ9/Ey)*I3وL2X9pՇ?$M(p>sԩV-UUeLѮq{6ٞI5 ˺H攲%JĽ pE*El7C$H1R\$;/ ! C 0LT 70s! +$K 1a,XHT:DI3RrMCʛCO:B8R;o*n)Ea;  lF:[$ay5?pLq*T\Y*""Kdy`GlҺjG|c nGx wt Dbul;IXoT$Ib HE0OuC V;Ӿtd[վҍ3TYk\YcGI[w-el #э˰:-l*T1 >¶fijh4&ŅI8*B4´ UI$L%UkxJXw4plҊ#NfsUJg8ld72Yh.]I)e43C@r9P7(D&{pmk6"A8($yd!#E17^Tk0||&%Ri!b`MmM7-JRԤZIJ+MvWY5&[F-]].NJ1J@4X,1$V0Ȭ21nde AcLc#" P()r’12c!p%dJGXa*l$q|Ӈj'cUI.4>%̵ Ʒ<# OPI>K$q$! PV肼/I# bqƩ0ž0PҌUp$1 {$= ET)d}cu7vszŗp0!~og֤XɌO3<eZ`z.grdn,E"5YQB#@@Bb݇sIORQ~0:`] #RdB>)Ȅ;aBDT%[ɇ;Pt3&y7Mh\,47R68CHsxfD,|hwH8QbTXZD:Rրw,M׶T*hMhI5pcrdR!AVObJF䎖4C2K { ?J:J*{X'%Wz'YHo-brs)RDZg5爓hŐ" `i֕ IȌ*x@9TS "HM|]jY4((1ʹ*{` 0$ ;dѴr`2y"9"̄ՄbConD!"k5%TGֵ^[.NV[r+st\Pi RPB#JiJJ T[zV^m1ƥeeJF@t$!V>c06cO///o?8$a};);J$ELy}l t_ّ#ԿّodoR;uf̍-[27/vdo27K#gοfF/ok?s]~_=浯3!?ڇD^r.?Є?Bpq,?W?˜kC|BxBgЄ?>B}X?Ð>oχ>_ֵ~~h8H6_V4lWl SRI㿵WmfSVMLe[V5$8(qj{ld^ݻ[|.ъ"kSYVjxHkG oza/RQ,؄aF:%j\Yc,nXDj9SZn䃌\et3s&jq{\Km](LJ5 iؑ0L>k[| O##CSܹa\Dj} 0%r:"($.Owށ-;hΖBpCqEZeXSe#n\S 86F19$3b7F x/inx=c2{_gKqrgGn!voM;:H"y$`Ti4``u^q{/`k Qzl @ g[cir̫U hKl? .F<&["-B^kȽ3vqYHΥ/ 8"Y^;* Z|g$lU1Z N"cIj=RX iÖq-j*2ݾ ڋ}[c[?1hK$|IV$xVw31,iQ8)Iv$1@$*l޹_o >{ 2:VSO) YyԌSMŠj0,*!L(w+DWQJETK$d^& FLb&,>$ѤY'N]XN"HYqb{a[dFdZH:TŹ 1 )PՒq135BB4A3SMX(xJH&ʈu8>U8۴#mSmfc*[,(dbO6xLvK.dg;ɧ4%KJUJSE4`'|A5eyַhUCDW`w6NoܧYY^ *P؇Rm]07"h"sSsoEQ._C;pY:ү8hR| ĜJ)V$WLJ4sHWy  >BB?[[D2/ :ž2>#`zLA >#0hׁވwtvr֮ Su1'6 (ҀSjU8t [Bdj,\Hӄ%-M؛ecZM`X&"JF/8ؘlDƀÄqRD,0N fdσbX&E7v5RZM6d0N))"l6M#KP˗ Xgk-f3Atdb QO>C<,6eCZ.6+PG(&) Bt|p@&8fop(3osVNϦS%Ik Vdk ADg2nYerɳR'9|#9b}FmD Ա6$gE(::ovMRkfsF|\c98L\Թڜ`[;X,31m lf47[)Pde1^I,CS5b" "C q1hi1sP;6D!甽ssCk}LT,,>ȑm +&T_6Í;1x{Qڋ3%dlڍr iG( ƀ3Nؔ:/CckMyw-kb XY化!uj 2E҄rZ"-.][C:IKĉv]Q5ʺpܧ3m^+qM[!05.TK0ƀ3u#d'G3̎h\,^*!qG !5iCHͱ16$hVI!%؜g4*897A6O:.CEaSSZ+XCڦf