summaryrefslogtreecommitdiff
path: root/src/regex/fnmatch.c
blob: 978fff884239b27b2256ee28a7bdf3bec022c310 (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
/*
 * An implementation of what I call the "Sea of Stars" algorithm for
 * POSIX fnmatch(). The basic idea is that we factor the pattern into
 * a head component (which we match first and can reject without ever
 * measuring the length of the string), an optional tail component
 * (which only exists if the pattern contains at least one star), and
 * an optional "sea of stars", a set of star-separated components
 * between the head and tail. After the head and tail matches have
 * been removed from the input string, the components in the "sea of
 * stars" are matched sequentially by searching for their first
 * occurrence past the end of the previous match.
 *
 * - Rich Felker, April 2012
 */

#include <string.h>
#include <fnmatch.h>
#include <stdlib.h>
#include <wchar.h>
#include <wctype.h>
#include "locale_impl.h"

#define END 0
#define UNMATCHABLE -2
#define BRACKET -3
#define QUESTION -4
#define STAR -5

static int str_next(const char *str, size_t n, size_t *step)
{
	if (!n) {
		*step = 0;
		return 0;
	}
	if (str[0] >= 128U) {
		wchar_t wc;
		int k = mbtowc(&wc, str, n);
		if (k<0) {
			*step = 1;
			return -1;
		}
		*step = k;
		return wc;
	}
	*step = 1;
	return str[0];
}

static int pat_next(const char *pat, size_t m, size_t *step, int flags)
{
	int esc = 0;
	if (!m || !*pat) {
		*step = 0;
		return END;
	}
	*step = 1;
	if (pat[0]=='\\' && pat[1] && !(flags & FNM_NOESCAPE)) {
		*step = 2;
		pat++;
		esc = 1;
		goto escaped;
	}
	if (pat[0]=='[') {
		size_t k = 1;
		if (k<m) if (pat[k] == '^' || pat[k] == '!') k++;
		if (k<m) if (pat[k] == ']') k++;
		for (; k<m && pat[k] && pat[k]!=']'; k++) {
			if (k+1<m && pat[k+1] && pat[k]=='[' && (pat[k+1]==':' || pat[k+1]=='.' || pat[k+1]=='=')) {
				int z = pat[k+1];
				k+=2;
				if (k<m && pat[k]) k++;
				while (k<m && pat[k] && (pat[k-1]!=z || pat[k]!=']')) k++;
				if (k==m || !pat[k]) break;
			}
		}
		if (k==m || !pat[k]) {
			*step = 1;
			return '[';
		}
		*step = k+1;
		return BRACKET;
	}
	if (pat[0] == '*')
		return STAR;
	if (pat[0] == '?')
		return QUESTION;
escaped:
	if (pat[0] >= 128U) {
		wchar_t wc;
		int k = mbtowc(&wc, pat, m);
		if (k<0) {
			*step = 0;
			return UNMATCHABLE;
		}
		*step = k + esc;
		return wc;
	}
	return pat[0];
}

static int casefold(int k)
{
	int c = towupper(k);
	return c == k ? towlower(k) : c;
}

static int match_bracket(const char *p, int k, int kfold)
{
	wchar_t wc;
	int inv = 0;
	p++;
	if (*p=='^' || *p=='!') {
		inv = 1;
		p++;
	}
	if (*p==']') {
		if (k==']') return !inv;
		p++;
	} else if (*p=='-') {
		if (k=='-') return !inv;
		p++;
	}
	wc = p[-1];
	for (; *p != ']'; p++) {
		if (p[0]=='-' && p[1]!=']') {
			wchar_t wc2;
			int l = mbtowc(&wc2, p+1, 4);
			if (l < 0) return 0;
			if (wc <= wc2)
				if ((unsigned)k-wc <= wc2-wc ||
				    (unsigned)kfold-wc <= wc2-wc)
					return !inv;
			p += l-1;
			continue;
		}
		if (p[0]=='[' && (p[1]==':' || p[1]=='.' || p[1]=='=')) {
			const char *p0 = p+2;
			int z = p[1];
			p+=3;
			while (p[-1]!=z || p[0]!=']') p++;
			if (z == ':' && p-1-p0 < 16) {
				char buf[16];
				memcpy(buf, p0, p-1-p0);
				buf[p-1-p0] = 0;
				if (iswctype(k, wctype(buf)) ||
				    iswctype(kfold, wctype(buf)))
					return !inv;
			}
			continue;
		}
		if (*p < 128U) {
			wc = (unsigned char)*p;
		} else {
			int l = mbtowc(&wc, p, 4);
			if (l < 0) return 0;
			p += l-1;
		}
		if (wc==k || wc==kfold) return !inv;
	}
	return inv;
}

static int fnmatch_internal(const char *pat, size_t m, const char *str, size_t n, int flags)
{
	const char *p, *ptail, *endpat;
	const char *s, *stail, *endstr;
	size_t pinc, sinc, tailcnt=0;
	int c, k, kfold;

	if (flags & FNM_PERIOD) {
		if (*str == '.' && *pat != '.')
			return FNM_NOMATCH;
	}
	for (;;) {
		switch ((c = pat_next(pat, m, &pinc, flags))) {
		case UNMATCHABLE:
			return FNM_NOMATCH;
		case STAR:
			pat++;
			m--;
			break;
		default:
			k = str_next(str, n, &sinc);
			if (k <= 0)
				return (c==END) ? 0 : FNM_NOMATCH;
			str += sinc;
			n -= sinc;
			kfold = flags & FNM_CASEFOLD ? casefold(k) : k;
			if (c == BRACKET) {
				if (!match_bracket(pat, k, kfold))
					return FNM_NOMATCH;
			} else if (c != QUESTION && k != c && kfold != c) {
				return FNM_NOMATCH;
			}
			pat+=pinc;
			m-=pinc;
			continue;
		}
		break;
	}

	/* Compute real pat length if it was initially unknown/-1 */
	m = strnlen(pat, m);
	endpat = pat + m;

	/* Find the last * in pat and count chars needed after it */
	for (p=ptail=pat; p<endpat; p+=pinc) {
		switch (pat_next(p, endpat-p, &pinc, flags)) {
		case UNMATCHABLE:
			return FNM_NOMATCH;
		case STAR:
			tailcnt=0;
			ptail = p+1;
			break;
		default:
			tailcnt++;
			break;
		}
	}

	/* Past this point we need not check for UNMATCHABLE in pat,
	 * because all of pat has already been parsed once. */

	/* Compute real str length if it was initially unknown/-1 */
	n = strnlen(str, n);
	endstr = str + n;
	if (n < tailcnt) return FNM_NOMATCH;

	/* Find the final tailcnt chars of str, accounting for UTF-8.
	 * On illegal sequences we may get it wrong, but in that case
	 * we necessarily have a matching failure anyway. */
	for (s=endstr; s>str && tailcnt; tailcnt--) {
		if (s[-1] < 128U || MB_CUR_MAX==1) s--;
		else while ((unsigned char)*--s-0x80U<0x40 && s>str);
	}
	if (tailcnt) return FNM_NOMATCH;
	stail = s;

	/* Check that the pat and str tails match */
	p = ptail;
	for (;;) {
		c = pat_next(p, endpat-p, &pinc, flags);
		p += pinc;
		if ((k = str_next(s, endstr-s, &sinc)) <= 0) {
			if (c != END) return FNM_NOMATCH;
			break;
		}
		s += sinc;
		kfold = flags & FNM_CASEFOLD ? casefold(k) : k;
		if (c == BRACKET) {
			if (!match_bracket(p-pinc, k, kfold))
				return FNM_NOMATCH;
		} else if (c != QUESTION && k != c && kfold != c) {
			return FNM_NOMATCH;
		}
	}

	/* We're all done with the tails now, so throw them out */
	endstr = stail;
	endpat = ptail;

	/* Match pattern components until there are none left */
	while (pat<endpat) {
		p = pat;
		s = str;
		for (;;) {
			c = pat_next(p, endpat-p, &pinc, flags);
			p += pinc;
			/* Encountering * completes/commits a component */
			if (c == STAR) {
				pat = p;
				str = s;
				break;
			}
			k = str_next(s, endstr-s, &sinc);
			if (!k)
				return FNM_NOMATCH;
			kfold = flags & FNM_CASEFOLD ? casefold(k) : k;
			if (c == BRACKET) {
				if (!match_bracket(p-pinc, k, kfold))
					break;
			} else if (c != QUESTION && k != c && kfold != c) {
				break;
			}
			s += sinc;
		}
		if (c == STAR) continue;
		/* If we failed, advance str, by 1 char if it's a valid
		 * char, or past all invalid bytes otherwise. */
		k = str_next(str, endstr-str, &sinc);
		if (k > 0) str += sinc;
		else for (str++; str_next(str, endstr-str, &sinc)<0; str++);
	}

	return 0;
}

int fnmatch(const char *pat, const char *str, int flags)
{
	const char *s, *p;
	size_t inc;
	int c;
	if (flags & FNM_PATHNAME) for (;;) {
		for (s=str; *s && *s!='/'; s++);
		for (p=pat; (c=pat_next(p, -1, &inc, flags))!=END && c!='/'; p+=inc);
		if (c!=*s && (!*s || !(flags & FNM_LEADING_DIR)))
			return FNM_NOMATCH;
		if (fnmatch_internal(pat, p-pat, str, s-str, flags))
			return FNM_NOMATCH;
		if (!c) return 0;
		str = s+1;
		pat = p+inc;
	} else if (flags & FNM_LEADING_DIR) {
		for (s=str; *s; s++) {
			if (*s != '/') continue;
			if (!fnmatch_internal(pat, -1, str, s-str, flags))
				return 0;
		}
	}
	return fnmatch_internal(pat, -1, str, -1, flags);
}
;Ҏ8 UQ08}p9=b=vIEpsOBN'{7rpcLa E7p! \U𯲢CE+{׊iŽyESvs|"bt,=8F5-c;COneh^AZD5z;MhC$[ye &qVyVmk;kUX>ؘVU~a⟣rȨM̘(g|R@Rc ?ysGewL (@>]r] ջJIʾL%j0@pmp^g}٤P8%8tz"uːt)}2&EDž]n&}ĽD)Ŷaodj{rJ\M;D އwVXLJ7,K9YJH`d"Mcb~Qb:a_pUF 0NX9–|H7c7Jl#םA/+n@L"Yd_#Y"l 7Eܷ m55ː6P ֙NTy6P`n3Ikv6θSh)Q[̹}"|6٥G rŽ~*Q`p_[7"˳yKKĨ "1\:~,D ad5b"CqbL]s ' h( RqBda&/ K=i'u>' gz Wʌ1B$I$_=8A[*IrͲ @sgܢyutrG  G*Cŷ%B%L u=uWB4*qk;"Kw|vA5hS40ȿDA9-ɢōZ9c~ư6@bQ-rg|'cH%;ӨWFPF!Zx$JĿ6SD6'+yRju g阕=$:^R/.ZÉ0 :sl q"0<rWp6[E}H\?mid]嬣kLTi⽆[rt3GOFhPi=AS8tIq;j6vIm]з;p%JXJwΧ8l O@'fPj)n!i Wl.IQ X))O!pf&)&_C)v2Mjf{+Q:Creļ*@ÉB!FlhZo\'v{ҶyXz@3Nh 0v͘; K0嶭\ HFLrN(\e\qGtRi9c26Y}~U**'ġfΔ,|&GeEڶ2*/RZA7)-`C&%Lz:&K8JcgI,  ⃸AnMNMu8()Y\3RxfP~Onee4i'3v'H38ˋVJd#i7alb]m"^U]i?*"iUIЭn-^1eYڶUAOvEPqD^< ^~KHɑ Jx@ M6w?:BUE%/ڶ9/ M7Y uhbPsiA~ adRIԲG5 B}Ԍ wG #WݓnP4sdu7)=:) w! =ߑ)4G̈́-\cAضXX 8DžoUD(cm&7@03AZgY|^w@j#7RΛ4S̭nAt*ۀJ_Rc^J%Hqz8>ykWl%Hj<Ù5wBxvY18V, }Fh.hQI $^m�I>PUX%c,/`ˊ.1sk<8qৼWz>brIvVSĺha {"fwm$qڋyiQ-9T)x}a1|u21}:l pd[y3_v!{N{* V!~#Pj pCʪE=0;kx$;'z 4Պ0jWgy<ܜwEi@Q`t ) 7nj֡ $_Ssγ#9f lT:+AeLDclZoM0`Ě!Ff<cPܮA4LD_kwds >g_ pn8cCK  P ăDMYsmC[Xœ&8c[J"-tشa/ETYJV6)*ZSJ@/Ƈ #-Nᣊ_Kp9ֱ0؏lAq%ou1] X.Lh7+ ̨|EQ5^)eNJ[+?)@Z tLbD^ׯ%I ot,N0R7b:9UX*w9q[! I @) 19ܼ .9/#BcNDNyxW71{I^KnP8Ľ\j_2sSaW ‚J[> thĂep |F +q򤅃&>mH|J$K^A:3x0Rlbn ꄒ @0f}8#YH]W{hUX:/% W3C`8ue2P PL˔eB)Uɏቂf/Be5ï3xj;ol0c`W*CWͦqPJPUx6;ɤiL>]F40pKm=EJ' ȅKŖ#{WL 0!QzX2ń)o܄%Zؒc`:+ڀ`)o/ONx .R0 ;pd4-7T6<3,9ۗ> Nv+Halr^4'5Yu̾m'}ETH; =^c@~Th*7=h_hYEB]HE;XAYv&bp$} U\uX_'+G'&ľ;\i+U7lvwWw߫? V~^|}%&GSl}P)kjSg 7YIS G hPI<]ˆÄH'@7KBvޜ]yL9s2*.,t)[f}͆h*Wyfd{k N9aORF$d KB`@̌![Axz(ڳʀ-/ &'fvYOBF+*5b%oRy'Ey,=]?e4EIY.L9xDV)ln :V)@Ŷ#tf$EDaJ.Qdł~!%$w,41|PS!&`՗:Rփd5{4*cG 1V En[U&iZ,?7?/C|B$Ə$+z`Q"ڟxu=}+%Ae$XD"gͩ?;d_쌱ˇw4ORW#Ǭ)fY? gʶamN3o7NM}ٌ"W>?(i0w-TJ`[˟lw-z~3(JBQ(~-6vu{dܢՈ߷㜭(Cp̉cAVrVs8b+[A%Ao5/{c,z& `7rh.F<ҧ_qC Úe9"ÃPE+Ӳ'Y)2U&jODW'$>ozjf&$QK&VtǙ`FPY |ܑO  $V"_(:@\"w1 Ewu*/ 0H\=Sڃpʼ-Uqd [t7]I0ѭiy%>Qxµ*HF]{ϫyky>mF)~m$t趄'\/1W V3$qeOzvOɌr/Q+^Y!B6>kj͠B(S4vhzx %ص0 =І$\Ml(Ӥ[kA&P"[B "!ʲ_6)NJEANmQ )Xs,ڬa2躋8 I)Y87Df:vw%G?e37ln,\/a9quE Uۀ(J>xX${ϜŤ]MjSh /&q^=?g7b`Xd js TbP$5OyVZiulb%SN@@Z9eNlBb0TH"c0(t\8ҿ)܎`U) {) =#.{%t`'{G.wrKAwG^QY3BZ1/UQmI }oXfn?B-\vfM?_Aes=trs vTN"w?RX3˗'aI*F/&X,߳[TL[P#5AkS)kpto'E>} Z3MIQ4g,fعGIo#m:a*bVPfΈl\Vr"uT+""_%b~ιfmEypN=`m%xp@R@D/9k # W7a情 M+dE6'.f$OAASs&9<(gb'ۆq)e* ?8M _L8$}t!/);GuB$ޏ$=uvhNµC: ƅbd#+IyVb`Wc"fkt5$=K䪎1~CwLb~d'>5в$IG;ƈFv[+%xJ*kx[x w/=s|wu{n+= .s.5/WOwYb/ Ď^,g4':6yGT{q//.X6җCXf]6e O7HxȂ ۉI@/CM١Ĥ):VbDװoi*ذRI8q_5{:&dr|,YϹXP02 `|1Uˋnwޕq)}3̽Rzrq)ɚ-@SRs4mmDHPbT :rJ [рnV<tl !dR=I28h KY 1\RXQ[>6S7@\?HDp{Eh:+l=yX`|riۨX}HlhVC@8#7om)h@# PImH^."-*KGTTf܁JuUpV hȾxp#͗,ٻQY( $Ah7}$2\'jy@kqVJg ZqdsxA௻^6(Xid6gy؜Se^/XTkIU7Eo'z3ѯLJF ݢzV\OP `pNUYuxbھqN[7ckv4sҭ3ۿH !`m*}pJc$cv8G܊oBtTPz !Z_lWb6H"Sl`1Ԭ3f'B[Qi-i"-׉Y,X󋞤AMpٯ6 WgˉV WD0FaYUΤX XE$[Bހ1Ne-F3ew+]j[\,'Hqqh\pCSגp}=bmDEͥخg8pV9:"k | jߊEP( T;5aOʾbB7=/@=䆂hRn I3#mL1:Bg AyCdEV2.z(w T7x||%BW-P>I*C}$B\؋ר6(hӳѢAJTˢ> fj|9&FMP]kVR{=s,W/TŠ#?VAP(can$[@O)YD,i%ƌAO-]K| 8GFEk3r$qy&5EdpNIGќhԔٸ0Yث( ĀC6S:~.;vX?UioII>)"38t0P.)Dw3"/7jjS*m:Zj-KRMWەz09DK<+rb4wDD3Qv_F2lrg0J]7'TU2adN@Q̣MZwGz8;d)FXu.Vuk«Tv*ƖE 7Sl;3m#n}2 ~ u\ܧf|;R{'.yAmm[*yFm6Ii&Xu/`/#T_}:;hEyFù0R9AD*iy<QJ By/$L"v-'BzjN~NBVc r   Zg!q5EHȕ/2|ƢZ޴ utӼI6^uKU^CA²TPk ,<Ѥ "D$0X}yWHVqNKbr2L Ͽ/!u=U+,}R1OrW ݰ\aefB0YǛe{7QVg" L/.I25YR"o@o: `/PQɏz✧:23&Ѳ\Ԇ\2$KSpkv:+G<$A)]bdT}M (fmʇM@O?럌ǠKzsqԒ]ە#Fk_R 1Q=444uPD{xJ G %(H{O$1Qqk3GML Aʅ|@jʹ Q`t\P'lj*TǸLyUz|MD]%:E0_'J,7nh2YS g3@"p#BIuWLjC-W%$+zpK$3 jֆ&]e!!v5(fcAUF}x IQn;t?&. YΈ\,ռި-k}czgr +af gy'э4N;l}*g>SnW"Pwz$S6f+ufO$ɣh{]-ңxN+p ɦTxBҞVELF տTLxĞ>GH5OY AI_k,%H3`i30X%] R Pl螞đ#,{xv %G[`@eB/gɚM2F`np¹Tw]j]w3)1P>I xߌJ=::6Q ײ"냔_T/+ԍmE5ԋq6TvnAt<tN? Kt@@v#b~94?W<< 0I |[PΊX%}`x [Dl!,˱$5Zpts=_s[DÎW#alΈk(zأS"r\ 8K2 #@ws-^rf"cqXw%͖Utu*5 xllD S|'+B.21)B.$ߘAcXjS=Ś=rk(5eҒc[Trawe텥h^?eLr.Eu#3\zLÒE~B 5866Һ":oz egdy[g4bį9(p?l& rhSLë!ǿ%8i3.=ӇGEC7]1: a<+0(PѯZdz 'wMY1ǁk#_U-fMbqÞ-{<#wʩNEQ߃Au`i)zWUM ֈLAet_6ȑA qfˢ 7u]iYLCXw) ^?vk㫾sB!ĶnM7Xh}e5odGHMyW,6>Dan !t}l~qOeRT Z3sHPݗ쿆"gb@xiv ͉ 凧WrvdBʺ(\5^cKl'tZ:0EjPbm93%!&7 )A@z'f3&ft.^E,k% ՜% ASU].`J08Y ׫aPCmW9tP=in3B{_ rDSoa$׌7mG1*f'08+eb~i!,im0H~>BGrR1Mw)؎T`D5VQwc{o+Nby58l'';M(p iu![A ăq܈J,&ļ~)cM3Se*j[+5oa7m5p"x|wQ@^X|r`msW|'ZKV^ 7eB[:\DݝƆܝ(4*HWboy suuѽEpV' +Ahꘜ\G*.?rATAؕcAX.Vu(wziwJ M @ci&Pe #hgm\ʸfJF 6tC&_^$V `CRA{\`^o5M؁섫:+QlぇGbL:5^B._v&cA6*Jzƶ/n4 ԡv )H +CmyW,Pg kCΪ8{N% *le/a68NP${gY[-ڝ+t"]ALm7"g t7{"tSt]ycjvK.nn9D3ԛmCl:;*/g"Gz(Rтmx0toT/alK[l+ -Z|A}E/ RjI7=͹4KċLh{wG[W*-rȀZQ4)Zux`je=} hdϜenjz_bǘ$}rO3 I9@kNg"iTMJ]RhƦ&NJբTQ-UzX` _dKjNac$Gk+P_jbDP(PPe+2v?;2 2Ar@("FU99#@$iqrFBf@8Ͽ鞾cy ?^KNF Ӊ![fB&058WfZR 5l} V{!lȞ@oA/8Lݑg38Yq.A +R`* ._C7,!b%>@S-)[ J[_DuL{mDe+LF3f TlR@e^ӑ~ř%nakYC(A!KRɖi e\q5b{=[ѣ:vc\e $| %61Tсgr1|pY/+|yi<MRЌsl~?E,7y!N+ʤ'm`'K9B/nxjqgYhR"*( ڳ^0? 8 Q0i3sF=jhys%IaIKOIw*SWip=S)Au:Y+k0t1 ^XȰ-i^\Tmf1ȋ BzU~X"&w2+JTa #.֑ċ pJki T[ۆ6"6>m!%|<ĭ\0AypGv=Bm$Rb(g $dMrB(J<^ըLcmzO\ B\hQiAP S(DT#a`q':hJ)2]_ksN#+N%#;]*xbƙ; â{J64\MlqWQ^cog!|"M6 6R`rcH b`>|ڹc@KY~(;'ز"az=6N~ظtF 7 cKa1G5.ک:UӅ$EU`3ZX]#\כ$fgF GrEiDs2snv CƆ$Dε؝tGSԨH"t0UV -&@x݋W*2`W;_^7 e-:{l8[#s܃ѸHRw,?{ A8M9%ngyp5cGK ֑_$#38.^#Ԫ2: ^}ZvI)\`mZf'z(j[zC(k KҦWJQ吕n lEAg%Gf֊(q2=UDA3ٰob̾XdoC;%݌ʣ&6P%*֮sE)D)15P'k4f64 څjm._ʖr^/ Y@q=p6#}FFdk瓎1'α2`oDpj=q˜] _%_C 8Xr{Kh#TQz\#bd?V?gͨ !6kS'T`%֠&6vLJ hoDY0 H?'*%̼̿~YLH4|\7nF0Jv ^ \SSښlXx㽀B?(Z9S2f # ѩ!W FRdҒ+[ c@h2UY &f>BIIB'P ܦ_Ӎ[ɩY1^+WkJBJ@6L t7IB00,gzN:3= )z`rV&O+:9xJKcZjH?ًjٛoG( xDRr1Om)V&1A30.s <{y~l+=L)Poya`|#vPh0LkWJ-DkGxWh!y)dc2v'uNy_R0d뚢+uƴ^ ^]-L)=D>wL`ri3WgoTNw>tФ}Dew3 1]ɖ?3R't 7aI}n7^I'i\NZC'K2VTչG4D(nx[CbUlTmid~, Zf/L|f7A\M5)rN+t8 An"6%>U $V8 -)0OaMJ?!Ąg gs)GpeID3 )/dPh|{i$HPJibLo,0Yd|$n%tEI drK7`Zh.JZFM'ܝqĒg<:"PZ Ѐ,] qv0i@ Cyqɩi&~hD eBTAC {y}[l$׮RO4jQc7F(gh U p)zmH"٥w| It^[ϐaBx3SF7rv]kZ{UNT7o@Wfi py v#tNцT-gc2w ?w,M$6ٱ[g_P7fEEw9_1+'mƾ*)\ʻ~AJorH*Ȯ\W6fڐڭ [>}dҩ.1k6ZGtv^m~sAU-U>Yx74\Rhg.)ql{5a԰fk԰v6~Y?7~?O?HԂ7]x+>W._/T@)T+jyeK2"RHkZo4 0hqԪr,˕j $ctOQFyܟCjI\T@n^ 1}B"'z$۟k?%r7kq?aqv ̇!tb>b3{ſ?T_Q'6{ RTʘf'u ~Pu5nл3`DT\$[}&g_5I^_GVH1mnz _8o["n@P0`WNo :ot[^?p ?tiB*qJ#!( GzND̛j̎4 '*w1*`{}QzX/J ~??T~T |Wp_-תrtT/+eXrR/Պ4Ȃ<|R-KvPR%6E "%pT?အjiV?U`QZdן"PM|P [(׫pfaS-ռ>jJot֟g[YC:b W_ _Gmwbg'[~۠dW5cU[k[ALWO]]v:5ʪr?*~e׬ڃĈݳvSЯ?x'(u2L}91[ tubޱrb|?Չ9;i5tmb:ESW'fy5cOLjU&f*?I;/$& ^_+VIZ}KW&w~lĜVSvo6LubΔVsviW''VJrĤ]4zSP=̘۠Bk}詮V;Tk\Ω9SE hC&}'ѓృNݷ;Z1-ǝkVԹ|{R?z+=đi<>}葯GO~Ů85U B'}ԅ}ž8F$c|wXyլue~>[x׾%"K~M!*}n|U}s|mdY-=ywv,TDi~wu<| hdMO?< k8DX_3x; ${;C_^9o ޼ Jo~PXKr}!nëwȘ??p!3jsg:Q s>NNzԎݓ~k?x lror.OfK9e4u%`%?e4.R损խn:<~~ͨ1OHߦ&Ip{R1oGxjjoSώOj{>g4C}7ҙuHD{8$\#Udp(Zt0J JWzd Ʋ5b@u_4v@qн=TF{`{zA9@8^P={_bG}=sO['5x@Ga|EG]L">FEe ۥwH]5vE GveWƯ)م)^ :yѦltzgX~f :6u|t,?mU}C.Aժ{ z-+wkɦȺ$B𾓡4P(mp}(Sҏ3W ?[/eSH6ׂso1+o"(K\NxEt5mL@#᡿¨s0y ט38/XOryձ8@UnCo>X}Mt(&b4\!}>p_h#x!!|mG+`bO Ͽ^C2E ʉgPStʛO}4hBM ^ݡ3KČm"S/Ԧ*j՞)FDk/ZMY@!B7SM<\IփB]e%Zk|P C>Gig cėb9[J/vLn#YEdB "HVQPI|2c=06dr5o3h (SnBc\9M']9 \ZTeķOmnڗAZ>ɵK(ez1RYP&Ls f3@0>k[W $bUB.`P].<*˥򤤺T\:\VuUC!IUϭSgX 89+n_KN4W'*b*ON'^2}5RʩϼƜG*qPX\تJ΃}v'"]ZW[(?L>pd}6vj}Wy\\>\ r&*hG<.*s"hL.> P b&>;P3TUD(IPzU:Ec3&G{lX?ѲB9mυ1 =ԿB9ﳺVډBF^yO o0i^px>_By8_~*_ A*/- *>O; Agh%e[fGӍT|^N3xR"LF[`1,ܿ-W|6w-iI`uUyV8Ⳬ8HxUT\?A)9{}q=@EcndUhG<* $X|bNiڄJ=$J,LlL~Ag$IW|FqNZŠ´JO9ʊ$#\8eI#ۡ"XƧJAg||y4_-g^?QYy?- :ofc\;Le%VxQCIpcr⟊υYM ƆvχP2<'{VҮ]=8MDJ _%ثcAX`Ҁ$oE"'V QU|F櫪lV%T9-ZU\Y#Vr/ވU B۩We@(j̐"A#bLh }jl&[5Az:&.!BI4hO~ʤhfy̗c%ad?x`Vm_%O%5=&ti\zL}VJ>'( l"mOcvz=?T~?­j#=}:ބ -OC͖ߠ@`Bֶ1/>̊ r ̣G*f\r)VxP0DU7oe ppppd7_^rڟ xWoR%~+fB[fũ*Mfe%01fC_uJ:?ɥOYwޠo[B":6ΚE3Xw#?u4~"? > [ƹQџahKM`wv݇Lni6?cQIv;mʸSy逢- 9;,WVNmx8M/:iM"wn[_c~r۪Ri{C[,u.κ~3\}1#͡j5Omdk,5 "U.HH)ڟxU 0E/g;|f_╝6xQq^ըBF|/3S!Nרj5R0oKL/@7מHQjTF3KL{vwo0^}>5|5_={.ˎ[<Pb)Z/lNcX٫UvkͰ^ ^|ޟ$?;{8)qH7SןdgzsR-Z%~ݳ^snZWMItBmr>})Z]{_OvhfS!awF.Eh50 㷝xgj7W\ =϶D0F<nZѿAT+݅zB߫Ҽw6[6&[̟^#{5$>mmz%?-I)oK < ~?~Ig=aU^?ď6Z^8h51gJ D6a]SKsgm,7ZyЩ/]a{~JJd,~amc_fEub;F7õE/Vb(QV(kw~ؿ/|xg0ABa,Ϝ~"CR|uajhwǒ  [ Y8u`1U7]7.EtyӕB5ꓺtUV;`%JAObё sޔaPY9vqгXT>`H`ۉ7hIzey7'oyG/wP/cX'T\4s b`V8螷|Am}>vAqubLVeGK NRq`jLí5"8=J0 B*M:W*ݏZtxIt0P&ᐣ;J GM >=K6;Z.4 /s#C%R涪jDjA鶦jSLG91YX棜.ZQՉ‡wkw.j*m3U_rԠ6ZGn%-ydVFKGvovDSqO(~Ta' S[ܳ?^/;wycy^^ďq8!E@1gF p|fHO?=zcOS&Buvn&_2tE`X4WgiC4/n:Y4j~u?U}~u_ zf Pkw<|R۷kZx6 ;V=ڱYC[v}='\yL|o*lJɓvsgDz6{u!z;^[--zdݼՂ׷YM?,lr^vvfkOmV_.qG/RE~ك~?Z>΃TL5>Ti*5]p@ )!l#P УSeO C9a;f@=ng :???/?_'IMv#xpH_~?O/t+QllYm#:ǙPGӮr>qt>O?=~駸} ,wb1lF7Lŕu˫9q" 9P1]L_X:w8֪qz+*ԉ,7gc%K戄5c7| RN_To˚ OyW=HԪ/_*o ^CIW^S<=L-?V/RY>!غ 0_7#TbMa2G,rAI6tyzXh^r?Ky,VjzT˿u T&IWl$*v\k 2mdLH?j~8I}^8)c1#d6-v&cIRnGDoVҤ`=PBIhH:uW㌬:֚s9v*h-(s>?NwDޗ8d7+̰J IgX%zh 50XXh%_Q0" IϢU_Xѫخ}:5}񖾶²[ؽB.{}l^PK>W/u1ON;(LC9/F2^.wzxPM\ 0 &i :`eJE?C)zYjo3^ޕ{ S3|UhT{_v"%.W\0 y5̶ T$n^p۸_0xKOҗIߤ)h1iLМT(>sλ}$[(>8=,O^xe;f(o>Q\)>@HTS#G[/ey|0D{UkSoa<оO4!oA(d8I?z9WSN an|b1\,Y: tOa3tf4u8_Jyk3ԙj4dmpHI?c(O7$hs?lPTcl+jϙAVIiŝu1_F'nZoZ6h$A&b>G8nϮfE 2ė6`5Ih0Gfħj:$5ďV|v^!#TQS3 @\.?mWxNac,!xEr$'U W>4Mt<^$aq{jEՀgpT|ޏ[>Q|IL |v@5 u#7F4R$ G_ 5Y#[(V|^r$^ 7$'[Fr1^f"M+>jY^yϬG'T:sPE|%R׮Q4W$,rB 3@E,'PJ0Xs`+>y5&L؊o"ƩMx}Ro&E7QT\ x5G47o;KYr-P 7Ϡ5KR?Wb<—@`\K> W|ʑV}a>g kϖB9_YR(}f>X7s@OTƍdxÕ> ԛrѡy\-ʺ*. Pv>g;||I  7hrj:X8pNG0;)Eڛ$$tLT QEj]@Ui ImUeJKB8Ũg` {?U%.&WQo8d]`j| i^>Ǻ]7C.>K^^m1)ah>XňYpqU7-|J6DX~uM^곴Xmܛ3W"V}vZ;EҞ[ ,aL4n2V,c5"ˍd8&Ibͫjrm5 AC)C7E y&pЗXw]Yܕ(>kQU}v_Xgl6곲̞d%8١C}nVWχOP +\|-p o1w>^=8MR%@ϩIhߠH.Hఊѡ곬V >i4_@7IۖTU#7#;[MZffgah4Z€> 8p~U:>/{@g`)B0@$l\Ì,S*Ps>Sfia_2VªR5Q3w MHdX{(q3zL(0>s;^롮2էY!_]GjZ[GCjrnjX.Ua7Ua{璽kfuelmLsэkz+UPmARXֲim۴KJR"%&> 홍L; @MSд'r:ł/$gs.EXn]ˠ> zx3M7<{AeWnZBUo ><^MG"uԫxU"!R(jY c ϊkL.U悚Ϗ[\nj}E_5!;p .ʯ5 Q V׭&踺 {; À_t I;JÛ%N UB/>=©!Hg8t[N龄9Fv:FdmwTjjUZgjlqg^"%G</=0B}֥%m_#)cАetny]9͇.jzE5EA%AxMVXE#&8F!Ftc05.2;TӦ&͋a _t9 O{S Mw)d; rG`Gٶ0vRPlXK B" P "VFa} Ryx=)-g>g1qtʼnJٴ[(HJ/AmO*_sW?8x_' < =Bb~-`7`])FBe &>R; p.Y fu0D ѧ(Z @lV\Py\@#PBnDܹ 7?7M)/Jyd;{wX7*T&MNR?ϝz)Y_G.O^q ܻe ppppd7tH_mnPSxJreiagNev7 ~ dX8A#A/ ~&8@IJH[8:OʦU6AJo%(XR~TG|u7xYf7\wrΘ! ~Ƃz`g5⏛]is5rNKزF,LjH&Fӗb<(P s&*;SoNT8z7u]A6v߷.<ŴRXϚES9͟Tb_ZOz%~*m ZcE˓6Ѝ'o^][EY#'ϪMqdx6ryvZa=8X{r~LQ ?v@}؇mN/0mN;ݷqc4 A}˴S%Nf;,q.κv\}1}JS(Z--;Vw E=Fq?r 5{:ȮF%ukr,+ ؍]_U 3V\~bGn{FB? Ͽ;׆]IgjB;_0a{Y&f?~Oʤ)B)#GD LA8 `}u#-f=8n^ 逬jO(n z&< D\6j!MXn(rphYg!`x陜^./ahtԑxU9]*{|; JVЋ7_00 7(kCsۯK_``A3RڧYnP #1+r ]wQ0¶͖waj y47<`m5f..R*^-o`q ,+{2ic-ןzuw:Ž.෼B F~M-z6'^7d蜒ab+09 sZi (7V VvwΛ`]QUm%3 O , 4>108y%ڽϏP#FejtK>u|WGUFj4&A~٨=3xV*5mS'T9լF5j.~ʙ'+5ڷSZ&e_KҊ5>io[a9du^yx=nQro\vܲZAUH |8^ i߷zn}~1ՓM^Kilw%(I"ZOG_?88GGן|?;k?Ox'3R*K/4^|koa촌ǫ힜ZaENܽQqFV`p/T5vȢ[UlMuuJS1+2uj[{jYkvVd0|riН:{c:Гo:]է~ևem+/㜖2V4p}P Nf~ʚNù^P+$թϘ U=X;ι.kF.՜SV$0Vi}iV7.pP!rFҐ|z&U9ƜC xhS[`Лu=I]٩9kΚ[bnaQ': J;9L@;C gz-~iB!yܽg '>yy~b5emtX`vfa¬9\ ߳Ӵ.VÚ{ͱlvEmUwdX`K@Kv/6S/tR>vVqluZ9}~5/Pxɓe^=<j5վZXVty_չ4hŲ"s~pmz/gj_~~J ~wT~"?w&vMJ [*NHBFb/՜ARjإ]׸h.>ϵH]uF.:]u=UR:G!F5;xǬ@k)s:i$UV[!ȭ:tː9tĢ#/{à0AMH›7A`?ƎzƢ_Ttn@7w b?O7߲Z_}?? fvʏ\wo\?~H` z. P6tK?ڃVPJ{\fbB;P0|yݚ^#r#v%Ñ<ԇG߫4Q\A}~WAʫ^R6WuX~*=oJq*>I[S Z.o:)b+ZNi+N't%*bEr{./ rwE_i_;o6oOΡT8&Ƶޛ'm*?Uіr5\E՛߿k^ax ПT&VHWJ7E~\G+6*=q}5lfb٪TeT\7@w:k~]Թp 36蝵|6݅{w&Dmk!7 >J&n$T8gPs:gh8z-4&ҽϵ9k+^moзj=!=k{VwMJa$=kY[_/=kw &浀kuuEUגkNl9RGւUnWWOOWOkNucp}oU?Cvg7A>Kr\Ji(vJՖyͶ(~w)_ ___}ֿRM"?sc4DTeVڐ#b5,@; j8.;U^bzϳ3@?K+T 2r~>_SIJ/__H b{O+&'yS&UK///>J)AE?ڝ ijjloχ/pS*//_@ ./#ytZ%2;jC%1E#)|b&\\ϋ\_pܹL5]vfTVz4 9'-BhS~>Dk/yf9q#+nSI㺫!TXC^J% a MnIY0e#{^jI3IzxEZ/]M3sƿ"o؟`K+W' yc@/)i+*':s='ztQ='? d32.:#s`џ*6].lQwzM1JgfI6Ҩ۷& ˠ=yӢ{@$n 骢0Y^9Neq#4`*2vRdP98.T$ Ӊ☜w5g$>M8%_0%mwuEf"mj|˖llV$?/ ?_=O-bj񿃔Z*Ji%Ntrm@$n]ЍnvG 4[ptIg#RoZ$}w8"[VNl:IJ0`a ŘJG0OK䫯Ko _?1O@sx 1ѓ'tL1$tX<1 @\X7]gh|6uo0xF~6q?FA]ۿEJљm.rlvpY[Ɠَvwje{aW5xđH)(dN)I O.#H`3b<%" b)XAnrb2 D?[ g@'ؤPlI )I(@'GN) yAgARpo<>萆0̂]Ng(A RK4+m4l1l 02,;QȽH'{g"wq;V.-pi0 ㌁l c\ Yxˁ YŗͶݨ Ta/ek],O*(` /uAM P4k,}\x^ 0}ΛapSwJ6Afpy1v(A5: H†׺[- }mnu=~4F {ZmJu{Ƃ;k(UqǂXýV0L;ݑcFu?9n7 WM1Y NAnn=JA6)ā 4)kE1)=աLxb"X-H# FK{W.ԲnS-yV0ɷZLZ-$ܘ_Da!!H U(X3U,""uU-1A0D͑όuTo ":"XW)/`P,C3X`83YzFJ'V *L+&Ũ|j3#V^dV^T۶RDY(>"Ĕ,N1!q(ҢÃ#X(+l(Sz0?+GwSt2;:~8Q,EG1Y}:RN"?YFs%9??*x =b%WJ'"X\%^u'ޭyYj;_A0 _HR*n.eT %'Zb%r! =hbBI"{@ ƾG~%BgI=W8 X,Fzf=m=$d֠SoׯxqRتk%v(Xj<^-rtym,9=Y[]rȍocqIi74FApF\tʻ'кq=MQ'5)o:\k6wU'ޓC];9a'Ũ@]NVkٚȍ@-:bz:!BL` |DtNbIAombZxS5N;`26<)] f{GtGο;8FiÝ8߰# !Uc 2%zH`b`DзM%p Kg:.dss5P>)z(1 .''+EoHk?'NRbr]4qHfwiu{w Zp{֠k,|mf.غ5yYʄ0NDZV:Vm`ԜP0ƤS Hbk KK jIW ]Uҙ^.:51V*(*\tbK9FO'(Gjh% uFZ. C7JYP,;Dw 4$izU=$XKVenj2Drx*شw5TS p­Xǿ^1~n};8p\goVޝƐ,* 2s|lk| 8rcޮ 3 Vp,,a!Xh%%-̯Ɋ/hB{C.\ 2/)u"yA22Jȇ!$4$=EĬW 8ݢiWB \Lq+"UЃ#8'E1b7#Q!t=|81$㧎xEoS'nM|uy*GW-Hդ^O RS~.R1]zTKefo']|?Z}UZ3S?Uߏt]S'Z~ u+_mfYc]/+>fi}@GsGs{s{rώ\ $?>.Rf\XCgS2I pzPܲ~zd#J-۰cܰN,*5(mۑи6Fj\ۦbWOLR&odq1'z.v& X֑ drxAKp ypEz5.Is0Nq9lx8ql.ްd] l$6`&=U&t>>tODZl(zgs D ?R$rp^Q43* |12 ^;3 =x12ePE6 Y "QgխMlmGG/%>odw ͼ;@ 1Nmt+yBXE}krN%xH9Fd 4"Zj'UGkdH~9^$aU +4nn 1׵5{P)=B`*H,xaL55Hrok&u,QXDoY (CiW4R;ja4F] mi0(lKձ&ˠXSـV*Y󌅍lwuTUx*dQ9-kDմyΐu6pr4zUL!;UN=i4m{#r)9}LitB6*r]QjF[wjFn7wwo'|uGդhߊY>?Ou[j߂~NOo/\=™rGsJL rL Uxx/Ȣ*oOJr#Q p L?Ϯce6ORySnN=q⠓"thGZ桃8=d[Y8 8C؜yG sj,ɫY7 $"^@up=Kġ͓zw Đwb;g.3)^)bt)I1fa>?Ş;_/UTqJNR;p*lVC hIX;8c9EwE8.( (gwT ͌mU *_#Űt R*Ǿs:4AY#MPy!cpҥ"(BP;դ j-vn4 zXۚDO`Ag< ƓTA]0XP7.aS鎺l4#pCPv\Tu,QЧAUCPubf )u%Qr_r rIj/$>FPL6 :!2l./20\P{x)UƂ)(ĻQz:[Wbm()hm tИ/2Ly /da2&d ,6GR] u&QG5HUWTIx 9FsZpdRކqBڢ"mĴ+errG_uxKZnL5<0I|{Rp0`(~HB"y4Drc*ٻm%_S'+>jo?(h+KZIN%Dy{ (9:{{Иk ~3 FoEJ̳ SK%D!XUڋ;!_ E^hpU RXM:Knׂ@jXH"4"yfPv0Rw@,0HڪI4Id0Oz+0$N De@:|TUѨa}G),zA}0\U\TkB퍳^dSϖF A ŀf- ;|<5RHP m"g!AQ",X9KW#Ŋ)^tfaD>aZEUuln)pdnXL"reD"19m/CQ 6 *S`9Nl7H.fcbKq uN3;t`oyԙcKaknBugz^{ CsQNJtd =Qb87A |Bȅɍ5+ş+Q^>aH(zA $)*Jƛ1-D_ H9Bb&I@N$-Z5MN&${쀏>}SL݂SvA` pN^ň( )tdUS4pH NUxE}^bQd%T0X9$Y[4ux,"4W%TC9"KZyTxd$> Dv9bpa7N 7ΚBp*y$ `csׇAA0L*nyHN4~(jaA0sp~ ak|EAmPʹarCfk!I1q$% RRQL;i,8QwZHEezjPSSt6j]֤ηO pS4hT #`OGXUH3/D0vPA0f3A0\gz(J|D1I&Qqp8tحwA=މ; 6 ]]:DLe3(6g.{@' V!QA31De[؁Yx M/c#3=EBfJ, 迲{j8PyQ07-}s&(kRmV/b6HL,cL X1(O ߢAGAQs=!2%I <;KآIm$l5i,$u>51D $WH2lxQBB/B5m&_S1,-r^%>U&€v-&5/掬7Mjebn`fR[Kk_X8K.@.l`R fQo<, ǣD7!q2]6IYIIk\ycT𞋋H)p؃孤ANMpqcߠ1"+BWLAϤs7X2I娧|,1/EUS#M,qViO Dif:ɣc)&E@($7I ͊ < "!|© 1^`qY;!ro@=ɢ1gaQ3]U?cP?͛5K(,2[C.o#(Ba'A:~ 3; Bጁ iRnb2dɨrjgЎ~3>E_QTJҤ(De,:e k,ӢB3- \S]hr:.Ĝ~=(iE+3 Ůn)fѹ@_|>~`)ؕI)JkDBb(`妴42փRѪ0YLr𖬟XJTP,)F(N]"EM#>â4eDWr ].HXpC付r|.d0 ^2VW UXu$PQ]ahM`~  ^]R͢51=~>{#n.!LXΛAx؍?ykXR+iř& ;}2߮w,H{DÜ}L"AFxl>?ԾKjL>-cj']|Ov$B~_+#`ʻsXGU㪈-`tey-~ p7txC<8}Wqlz[lqSӰ|rvAZ\z=y>OQI+o`V&a>dVEksMxGhʇu(Id3ڭqVP۷'o.^ @5 dMp0j4{Yv5ͱ.F?̳iU7cKBrlM>5 ɱtaGf'"TJX%N|{NwҦCPVUS4k5m۷COQYXfL \}J){d h孂认dYwg6<<թ6YgTN̢X3EL;e%V).$gRɋ^\x1'/pwogPQmb4xswwحɗ)uB&%d^{3|dfL#|ЭX/xQH^0GG4BOi.,'L.|%'mK@$hJb\kY(-_O^jFˍ5BxO#ߡDՊ{V^8aKSsv?E S\2`v_ ?k"Ip_Sr=S@V1 QxUwm<,Y4om<>(2o5?Rh,]W/nlg|@57'뎽\sdf!OCvfi|^{R9=ER.!)Ɍ짰PK uM,[-'Q2\)/ns28)+7sv<"$'H#.juA%YZ>_beV )/n3`ĚH.\aᱧ&e)Q<`zqB#>lȗݬt5YڹJ9A/u(E[wq 5טlJ+`o_|G5E _7j8'݅1h_t/M^΋=_v@=U7-Q14,xoVVzϬf'f ;eQiJ̀ FM?:DnV&jQWzhz/MzF Qm&R6fZmM˨6Vf?;k[jjigzlHZ&fTY$ML,HM"E :V3Km.Z"G+{ {'ݾ^_e<-kVEz A/`p6,`( u~um~[}pXUuxNAǿ5uWC7a/`aaGBC/Vyj(-e~g2n!p ЀUeh tt%/;:O ;ݳѭ:N_7wr] XC 5s}nD[rtbV V- {bOˤZˁg#Vkȁ?B4XjUr{ u‰&rsmѩ+偹ʂ?O5=W>\C&k>DM'S 4r5N{ CT]7|FFWg4\^MY\F!16r5zomnHݯa6$GvpEڪ([J(_6BA HqE~gg@%܈"`0yg0 jA UIp +7#VѪeZvW0F8毟8cP;rԽ(E}B$ےTänrG*Q9e5)RBoH[EɁыz(=zI/jjug=?>K ]/DMQ<oU(ul$|B%UTc j$~W˳ %Ext"wjs'*Ѵ=4D mjBc&odJLp5K1(걊3mI1ַJ#A~GA CU9ݍ{n˫ ֏(!uV:jU8@Iiu|W8Sc`Q_xUE:"ۄ%%V:`?Ϩ%e6N6 hѓ]+nrGZzrt9h)y)f'B֐bB%ZgfQBz.,j[į,j\(~/ 6˾@I$,u%`9Vj`(NXeLÅ,Ù6p!tQ`iiR:Gy px5?-zE- ٬lQSl`)gnu 3 RC܉Ūn>p=`gWeՌKfVTVp]vtX>9/`JRlV5|]79?{5gq4NBWñؽktnؚ2VֿwxwKeߦsS KWm:7 u[l:7/xa3W-66s HCnMi>yfn@4M/-#rX;1,[;tBTmen.@U,b4xMVm6:M1b`ӹ)òMbpi{C4m)TܚcMֶ4IVv .tn'lj"X3:f𮲹5džDtwkE}Z~=Ӗ3&]Ϧip)?0u}lqMkmMx^C>]xiR~ .gl+چ9E,m,P>ʥؑR~onR~&m!RӏY.gAO6Gn!K`{s\ ,N<@u Rkʭ ri͆j =u NJk 0\˞۶ϭ\yO&F&?rP 4 ݩL%益`⁇shB_ Pt;N\ݠsۿ z]Uu!/π5,. U b#;Y|2厔 {x25eqҸu_ ^ !{ݓ|wb?;˓I$ǣ?·qpBo^=$d̫kN4vt_0ҿqP>eo|zuq QG/Yb r9;k@p}6 GO!G$X_qmwgUxsiih\[sqEo?&̄I"|X|pMm؞7QQ?}{U}dۍ;e(Fgb)2MwMHT-`?mN%v(x ͗JM)>;e(?1KrP |둲ȩ":YEQ*x _GYrS#|r_G*, \2T_G*/,G9'E5eT,uH]5EdTfJe_Zshع^cV H$4Th.z$ =ܮb!f_RV}n2i_g>3Z3][npC.tclt#\[m{sEy{zwm\9WO_Bq礒Ƈ3)c`+_ۇAD'%RyIDAА7 3r?h2-kpm(/⎿37~b+&9-4^K!}omQ$Qr<9*߶^1nY|W$;Đ~yoh셬GjZV{p rzb)=zo*~)˺X RuId5̋ɂu'0YPMT7ʕt}`N<A?x?NcӔA*Y^N=jdEqu0UJU7>my'~e"N鉼mY'Sl˞8.ڪ EGUzH4zR]{QPAp, (Ȼ:;DobvKkS^-koUuku: (̆*.zo/7T< )36, ` UxpJW7 Z5f'xQeИ] 9.QP|o NÏx&sy!=fI( 9iE4_*wob㭸4B/^!ifh<=0Y-\lM[??z{ p;靌}=pbQӱ:ۅ24f=jZ-W:t[lZͶlLՆ{ű-ݷsv,XV ^pqBUr;ͦ麎kϬ1`/(.tCcr:3EKФO,S4 = w|vږ:"r2}~䚭&Vǵlt]9)'m7Ͷiv6-G6;"-HvZP:Ͷٱ7*:/ J.;fժ-`Z>Pucin(lDT_60G_QkC?_?\Tr{.]Q׎ҵ/٣Ll`q2q>&)A[{Ls-58ЂQ0ýbz?8+ 1%k o/47ғy] G>__Y:Y,~2J]700IjX1",>],"8k!)觠]WL 瀄} \EP* }: 3Ԙ k)!/=O.ǃl.=/ÂF{L..]Gù q(/'N{#p57~wƃ  x,@^] EΖe 3@ZD\ORr5(I4nd.8;Ň:3>̳#f3gnW'SnB"4V ~➭M;4[ ~ےLst[iQG7竨ōve4 y x|-OXsc^歙)oE%I5tʑ]/nsy ͥQp+H3OLv祌?WOhtl#]|)f4C,k5LokS mil*(w19dF'y'&( C2BUy+7` ",`NUJ(,%apHz[QBIj΢4ܯΡqM C,%ќc1j*&%Ifmm*8c嶔r * rGȋU]kV;5$u$Iɰ Q/ng)HD)4Rҵlt0-!ļ\U3KH[jlS~KKt:Z ^R$iZG%ڦF3m)H@WLI 5@Q(DiZѦ /`n*UJSVtĿwD[UGͫRG3+\zwhF/!}BT#=󻚴f5*hǬtWNG} :$K9+ b":|0clhF .*?ڕN JXULE.okrRw7jcE &AbřNQCtԐXJؘiQ?u$⭠nX@6N?_^R n-U? uzJR4ߘQE2a'QZEI vuIբąFZRJ%ɖ jWq v"E͏(i9NXn9= kQt=ɳ