summaryrefslogtreecommitdiff
path: root/src/content_sao.h
blob: 1ccea0d7808f115c2161f0d468c656880f107ca4 (plain)
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
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
/*
Minetest
Copyright (C) 2010-2013 celeron55, Perttu Ahola <celeron55@gmail.com>

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/

#ifndef CONTENT_SAO_HEADER
#define CONTENT_SAO_HEADER

#include <util/numeric.h>
#include "serverobject.h"
#include "itemgroup.h"
#include "object_properties.h"

class UnitSAO: public ServerActiveObject
{
public:
	UnitSAO(ServerEnvironment *env, v3f pos);
	virtual ~UnitSAO() {}

	virtual void setYaw(const float yaw) { m_yaw = yaw; }
	float getYaw() const { return m_yaw; };
	f32 getRadYaw() const { return m_yaw * core::DEGTORAD; }
	// Deprecated
	f32 getRadYawDep() const { return (m_yaw + 90.) * core::DEGTORAD; }

	s16 getHP() const { return m_hp; }
	// Use a function, if isDead can be defined by other conditions
	bool isDead() const { return m_hp == 0; }

	bool isAttached() const;
	void setArmorGroups(const ItemGroupList &armor_groups);
	const ItemGroupList &getArmorGroups();
	void setAnimation(v2f frame_range, float frame_speed, float frame_blend, bool frame_loop);
	void getAnimation(v2f *frame_range, float *frame_speed, float *frame_blend, bool *frame_loop);
	void setBonePosition(const std::string &bone, v3f position, v3f rotation);
	void getBonePosition(const std::string &bone, v3f *position, v3f *rotation);
	void setAttachment(int parent_id, const std::string &bone, v3f position, v3f rotation);
	void getAttachment(int *parent_id, std::string *bone, v3f *position, v3f *rotation);
	void addAttachmentChild(int child_id);
	void removeAttachmentChild(int child_id);
	const UNORDERED_SET<int> &getAttachmentChildIds();
	ObjectProperties* accessObjectProperties();
	void notifyObjectPropertiesModified();
protected:
	s16 m_hp;
	float m_yaw;

	bool m_properties_sent;
	struct ObjectProperties m_prop;

	ItemGroupList m_armor_groups;
	bool m_armor_groups_sent;

	v2f m_animation_range;
	float m_animation_speed;
	float m_animation_blend;
	bool m_animation_loop;
	bool m_animation_sent;

	// Stores position and rotation for each bone name
	UNORDERED_MAP<std::string, core::vector2d<v3f> > m_bone_position;
	bool m_bone_position_sent;

	int m_attachment_parent_id;
	UNORDERED_SET<int> m_attachment_child_ids;
	std::string m_attachment_bone;
	v3f m_attachment_position;
	v3f m_attachment_rotation;
	bool m_attachment_sent;
};

/*
	LuaEntitySAO needs some internals exposed.
*/

class LuaEntitySAO : public UnitSAO
{
public:
	LuaEntitySAO(ServerEnvironment *env, v3f pos,
	             const std::string &name, const std::string &state);
	~LuaEntitySAO();
	ActiveObjectType getType() const
	{ return ACTIVEOBJECT_TYPE_LUAENTITY; }
	ActiveObjectType getSendType() const
	{ return ACTIVEOBJECT_TYPE_GENERIC; }
	virtual void addedToEnvironment(u32 dtime_s);
	static ServerActiveObject* create(ServerEnvironment *env, v3f pos,
			const std::string &data);
	void step(float dtime, bool send_recommended);
	std::string getClientInitializationData(u16 protocol_version);
	void getStaticData(std::string *result) const;
	int punch(v3f dir,
			const ToolCapabilities *toolcap=NULL,
			ServerActiveObject *puncher=NULL,
			float time_from_last_punch=1000000);
	void rightClick(ServerActiveObject *clicker);
	void setPos(const v3f &pos);
	void moveTo(v3f pos, bool continuous);
	float getMinimumSavedMovement();
	std::string getDescription();
	void setHP(s16 hp);
	s16 getHP() const;
	/* LuaEntitySAO-specific */
	void setVelocity(v3f velocity);
	v3f getVelocity();
	void setAcceleration(v3f acceleration);
	v3f getAcceleration();

	void setTextureMod(const std::string &mod);
	std::string getTextureMod() const;
	void setSprite(v2s16 p, int num_frames, float framelength,
			bool select_horiz_by_yawpitch);
	std::string getName();
	bool getCollisionBox(aabb3f *toset) const;
	bool collideWithObjects() const;
private:
	std::string getPropertyPacket();
	void sendPosition(bool do_interpolate, bool is_movement_end);

	std::string m_init_name;
	std::string m_init_state;
	bool m_registered;

	v3f m_velocity;
	v3f m_acceleration;

	float m_last_sent_yaw;
	v3f m_last_sent_position;
	v3f m_last_sent_velocity;
	float m_last_sent_position_timer;
	float m_last_sent_move_precision;
	std::string m_current_texture_modifier;
};

/*
	PlayerSAO needs some internals exposed.
*/

class LagPool
{
	float m_pool;
	float m_max;
public:
	LagPool(): m_pool(15), m_max(15)
	{}

	void setMax(float new_max)
	{
		m_max = new_max;
		if(m_pool > new_max)
			m_pool = new_max;
	}

	void add(float dtime)
	{
		m_pool -= dtime;
		if(m_pool < 0)
			m_pool = 0;
	}

	void empty()
	{
		m_pool = m_max;
	}

	bool grab(float dtime)
	{
		if(dtime <= 0)
			return true;
		if(m_pool + dtime > m_max)
			return false;
		m_pool += dtime;
		return true;
	}
};

typedef UNORDERED_MAP<std::string, std::string> PlayerAttributes;
class RemotePlayer;

class PlayerSAO : public UnitSAO
{
public:
	PlayerSAO(ServerEnvironment *env_, u16 peer_id_, bool is_singleplayer);
	~PlayerSAO();
	ActiveObjectType getType() const
	{ return ACTIVEOBJECT_TYPE_PLAYER; }
	ActiveObjectType getSendType() const
	{ return ACTIVEOBJECT_TYPE_GENERIC; }
	std::string getDescription();

	/*
		Active object <-> environment interface
	*/

	void addedToEnvironment(u32 dtime_s);
	void removingFromEnvironment();
	bool isStaticAllowed() const { return false; }
	std::string getClientInitializationData(u16 protocol_version);
	void getStaticData(std::string *result) const;
	void step(float dtime, bool send_recommended);
	void setBasePosition(const v3f &position);
	void setPos(const v3f &pos);
	void moveTo(v3f pos, bool continuous);
	void setYaw(const float yaw);
	// Data should not be sent at player initialization
	void setYawAndSend(const float yaw);
	void setPitch(const float pitch);
	// Data should not be sent at player initialization
	void setPitchAndSend(const float pitch);
	f32 getPitch() const { return m_pitch; }
	f32 getRadPitch() const { return m_pitch * core::DEGTORAD; }
	// Deprecated
	f32 getRadPitchDep() const { return -1.0 * m_pitch * core::DEGTORAD; }
	void setFov(const float pitch);
	f32 getFov() const { return m_fov; }
	void setWantedRange(const s16 range);
	s16 getWantedRange() const { return m_wanted_range; }

	/*
		Interaction interface
	*/

	int punch(v3f dir,
		const ToolCapabilities *toolcap,
		ServerActiveObject *puncher,
		float time_from_last_punch);
	void rightClick(ServerActiveObject *clicker) {}
	void setHP(s16 hp);
	void setHPRaw(s16 hp) { m_hp = hp; }
	s16 readDamage();
	u16 getBreath() const { return m_breath; }
	void setBreath(const u16 breath, bool send = true);

	/*
		Inventory interface
	*/

	Inventory* getInventory();
	const Inventory* getInventory() const;
	InventoryLocation getInventoryLocation() const;
	std::string getWieldList() const;
	ItemStack getWieldedItem() const;
	bool setWieldedItem(const ItemStack &item);
	int getWieldIndex() const;
	void setWieldIndex(int i);

	/*
		Modding interface
	*/
	inline void setExtendedAttribute(const std::string &attr, const std::string &value)
	{
		m_extra_attributes[attr] = value;
		m_extended_attributes_modified = true;
	}

	inline bool getExtendedAttribute(const std::string &attr, std::string *value)
	{
		if (m_extra_attributes.find(attr) == m_extra_attributes.end())
			return false;

		*value = m_extra_attributes[attr];
		return true;
	}

	inline const PlayerAttributes &getExtendedAttributes()
	{
		return m_extra_attributes;
	}

	inline bool extendedAttributesModified() const
	{
		return m_extended_attributes_modified;
	}

	inline void setExtendedAttributeModified(bool v)
	{
		m_extended_attributes_modified = v;
	}

	/*
		PlayerSAO-specific
	*/

	void disconnected();

	RemotePlayer *getPlayer() { return m_player; }
	u16 getPeerID() const { return m_peer_id; }

	// Cheat prevention

	v3f getLastGoodPosition() const
	{
		return m_last_good_position;
	}
	float resetTimeFromLastPunch()
	{
		float r = m_time_from_last_punch;
		m_time_from_last_punch = 0.0;
		return r;
	}
	void noCheatDigStart(v3s16 p)
	{
		m_nocheat_dig_pos = p;
		m_nocheat_dig_time = 0;
	}
	v3s16 getNoCheatDigPos()
	{
		return m_nocheat_dig_pos;
	}
	float getNoCheatDigTime()
	{
		return m_nocheat_dig_time;
	}
	void noCheatDigEnd()
	{
		m_nocheat_dig_pos = v3s16(32767, 32767, 32767);
	}
	LagPool& getDigPool()
	{
		return m_dig_pool;
	}
	// Returns true if cheated
	bool checkMovementCheat();

	// Other

	void updatePrivileges(const std::set<std::string> &privs,
			bool is_singleplayer)
	{
		m_privs = privs;
		m_is_singleplayer = is_singleplayer;
	}

	bool getCollisionBox(aabb3f *toset) const;
	bool collideWithObjects() const { return true; }

	void initialize(RemotePlayer *player, const std::set<std::string> &privs);

	v3f getEyePosition() const { return m_base_position + getEyeOffset(); }
	v3f getEyeOffset() const;

private:
	std::string getPropertyPacket();
	void unlinkPlayerSessionAndSave();

	RemotePlayer *m_player;
	u16 m_peer_id;
	Inventory *m_inventory;
	s16 m_damage;

	// Cheat prevention
	LagPool m_dig_pool;
	LagPool m_move_pool;
	v3f m_last_good_position;
	float m_time_from_last_teleport;
	float m_time_from_last_punch;
	v3s16 m_nocheat_dig_pos;
	float m_nocheat_dig_time;

	// Timers
	IntervalLimiter m_breathing_interval;
	IntervalLimiter m_drowning_interval;

	int m_wield_index;
	bool m_position_not_sent;

	// Cached privileges for enforcement
	std::set<std::string> m_privs;
	bool m_is_singleplayer;

	u16 m_breath;
	f32 m_pitch;
	f32 m_fov;
	s16 m_wanted_range;

	PlayerAttributes m_extra_attributes;
	bool m_extended_attributes_modified;
public:
	float m_physics_override_speed;
	float m_physics_override_jump;
	float m_physics_override_gravity;
	bool m_physics_override_sneak;
	bool m_physics_override_sneak_glitch;
	bool m_physics_override_sent;
};

#endif
L4:l<ʈdsRIËnek '&y-匞: 5:M#_I[ Sh ?>SF焙kȎȝ!*(,O/'v q 9)ㄤx}iA5V_94 $0PM1D`ǧ5 Ԁ> GΘhD6K^4 j:x&IhSr!.HO@ kY?y hX#('@tj>-Ğ^pw&"M_4z'dۑRiPP6å|nR,ѭA7 98*FLV0bဆnxdu%x֣<3okcC8*p @5ЮF2F4q T,\[G')u(F\fc !o\T]&&uz.b4- RPEt1 JZQsOAH(, `XSYǰ^@AmX*(F0@ WtfN$bj "ZO-UV=*ZhY[A˔g:X̒)DDYAcJnd̶I s&rR6_X.2ECDdB!ТZĖqʤfJI@$32(R!sFdXuдbTP)G*ųV,k0VE+ 4K"W[ R ׍ati,e. }V(Bun^eɴ6H8q,1Z˭6 v) ܪk'r釯wOnB xRC1x(Va%4Zi+S2OfBe &~J/3?5MlsR[dو͋:' !i,/T[̛: 02مEC~q(LqmxhNGlۥ4 9Z0 'QUtj*FIVFƋ/F.}QQ$׋Bj"6$%6C`}^0jllS10X6Jk1qYx1y HqplUMjXbәv'Nt2-!8QX;"Jz{b\! 6pNGDk>eG':#WzD!Zӳ壀NbLd]"j5Ӓ I<;zՏ0rP H)K@l6fWH:V?f@u;䱰zIk@:Di˺|xu@54a t( JF1j:B ).A2u5Rd䃄iF+:Zru HԎZ쎈3dgZ|ͫO_ntx.K"m6q91.0XC,.ϊ7JP{d6{&gk̴HΐEdJ>>e'hMQp>&(~hOӔ.2VkiMf&.R=2S,16"uJD8`~mp֖ks2-|z(CK U.^lt!P6Z/1SO2G2h$Gdw26<3<9^\"hcFai Aek{ijX缍k*W@g fbxV^7lrLZU1ɂi+}oc׶hq09ć,VF:Tadݹ_0"2 7&" dUaMhkL k-@$۲`/$J*y2i\I|Hat  =uviOŧh T]:P#rS$NsTRsRF=#i\?&}b[(i/4EFj l=g:µbʈ0ˎsey.xoÀSTmS m/Px;Rp6gLLqz-Ǚ6gZi:bWpwץ2֐84]Z1bh–QAQNGaVhUslSf!e5'~+ e_1zZY ct9VPs4pn*#Đѱ Y<7] L茗Ińh^\"_Ξt8#VjWb+'߉%2$RlobWA|XoxVs8#e|gYFmufmt-h]d9ժ͜\u"kK F&Ae ~qfpqc/Q5-vG\2oCDw(߉^pÇ佫qDI?a3iC_pDD@˹=.^8M@Xo5ΥM63)1"ʼn0c&`-ѩĦ-CR ,1 F=Thg&,tV;-ntNV嫪dePrCJKkircvHAeAY))mIѶi[E*Кhi|w*w~{Ͻs=AOض):GDXv]kx"ZJGov[Q%8[0RY"-mPY pDA#W]mUP&nw1#b GacԵᖇ9\ r}~fɐ1c\䒵[ys&XMp.I5 dpM)djNN@sRPlhG7@1ONf,RB"7np܄uH@fѠCbY`l (mu ,)HfN9&Y6bH=Ў䈂9u`fc'mgJU&#/ޖF\"Ze]h D2ْ%oΨI\㔒qH~EX?PuI[$|laa} oCt,V>t(-wEcA<4i(zcکMuѨϠA$Y!HiW~ǤV]\Ѻ dw*x' kE9?#w?s]XW>C'nґ}rsn(}7^ p2E%mD|$EMLs;LXA#4#!c7-غ"2HQ~J oEP53$(l. xpm^ko#ewdysKYz >w "[$|k~coPrk/!,2! ?c;TqJv|d *#' >=mQM tܘØ4Sao)wK4? v&W ڻ?Qw-RٕVJк*ekÓ\-.$hé1oIGi"ךѢ<%k!="bښѠ RU>q+>mRm25 I nUةj@cC(; % :s9қG1[>Ȯ,-`#l0*IZH?cK^ vw ?&ڒ5Q +Xw`  `tQIgńK8**ؓZqTYr9hSn{2#XK/$gP*=Oi*5|3dvG ɳZ7,0ۢISʡM yC^M69EDdPupL&L-"й3ۨ>n>Đp~"1Dwpg@un"Q":T+E/NVm=Jg=[\ĜuZYQ۝ x.ŌuP_Qgz2L6O z# /ഩhnJ1_h>o tHlzi/iod;iC*Q-dX Ny![:SC5~5LެDz?Vm&w5} wIu lyM mԖiTGJq~Ђ>54[HG;.]E<(bUEW/S1ЅlNZ._,!DCCCZ3\]~I%Y Ր 1JjvQJoXQ,NZ!y6ՊWt8F7YRh@nRƭRcywŁ\U\B8{{h2ЕiN * k)i 8.mڛIObaLY%krĄ5!H&kƋ([ԱyD0!fqaL&5MH(䪈 ""Y8U֕)$1 m>&#zV sKwQq$`Q66jmJԱVWXO6y4W Tź0ėXn/&$tNq2P1wEwREv-%i@yH:&C ~sb:%W@B\L/5kpg#UhݬgŃbƒuczZ @Д$lsZ0}̣*AQ5yG>[ [dfpTws~'N$ZHd>[E&=P8S&r] ZʫЧN/FQ7uAv4x dРۈA~/"`(t$rL܎:oȢl3U9aߍ{koݸ>ѸwwY5";#J[wn^t1ō"I߻~n|kwKknp pmZウ~#߻ ?W^6C׮& 7oG1v.fuw^ɶvj]߻zuxx?WU[uȕv:Tx>r5 r `kWaML$i:V__ qwkWr 差޽Eָ߽v;[7ﬣ1@߷N -k `\0X#67~xjv%D:[|ww!%s]Bеku ˄֮ގam &u ^>հ`78605~*=4U|f|}}~un\PڥKDEW֮~ *Zfըe(F`ג@2meU6Ɲjѡ>Կ B蜪)gȞus&]wX1#\]Mq(hFrN $ɇ|jDN%u@xe:ISʤ,{~6jdG[;"UNLdS)^W ,7`Xn4Y]7 V6VEԊyJ Ȏ7&+Q53.8Pc|A ̝AbV%B4N.+O]m3"u171aTe۸hQB/c.y)$Qٍ Ny_,HMXڇ\4i=p'q.tBA:q_ jqsFPFS ew=MpH&gd-~ťRNq%htAuhy47'yY C`Y`;fPŸ*i[>|JS?_)W{Ofo,Oϟ?;ws?)]^kƷU?^V]ﹸ";aÚ,DWr^~ S FW+>_ۿ2+~S &iC; ,Pw6fkEMykvzM ,14%*l͋;P6)$.Ub26tĉyC;h$WA^8E9x`W&<NcA<ᢀMt߄ *zb'.mfGEvdl z/L1P7;s_܄uVg6-v'yj~KV/^?m ]?$TlݖH3B:Px3́Bz~+hqr֎SbcwR+/$ؿXsʑlft%܇0?W# T+ae{j*'v5\G6;zT'Οˁuofܔ Z`f۵b'ҪBF`.().V L.<GՅھ/3EysWæ+"66-ȓHҽ*t¡iڼvk}ÒO'6ih8;N09Dž]#?)-F yWN:kJۼ;f[6޳%pfl|%u"{*W-2jfg£4AQ[Mx?$M8k' C 溝E;Įeg!H}7g9U|q~ 2reYäwZ~ ݝgmݩVٓce!e_ $zc!ӐAs32†Y{к, EDnҰJVŌ]Ԏ.g-T݆ϦNݲmCRh£֝dzPuj:ZCx0Z-t;$ƀdST"$[ ^D*a|A!n$Ἆa +mo0C'b:p5r&ʻ;^WWlڪ5u픸e]Q\@n1~!>Y ~Cgq%!CΓA@h8 g F>^{̇{/G[[>0.+m"wܠA){d.V_dqz37,t]#GWˮQ[ -;0Ħ WÝ%`fBi?fݏ3ynbNjrIpS4p!Mt<M2 PlDU{2]\rxb8wQD2ec uqkŪ~bGi 7c#*% Fvn'nCPK#VzBtu2&e#O͗V :te5ێ@1z$pl܀}!u@9̇d@̜ƶ8θB$4@X&pG (u$Wb(,2Iw<P"FҟЌ* u{x: څ{bŻboт$l9աI'̎n4wY%=G{4Q8 5=2hmp:XC]Y6)+}Wu/!nnK9h y#/i*WF?kegiD;D)e]Qf\ךrД#]Zf'm\70 ûerZ&Z ڭˁ1Br,7ddHSίY{K"yk5j!8ei|6EF Z!R8%lɀ#{ JT $jIHem6FiYk0ڨF ÞW?$|bЉ6a/605dY UI S;tbM/NVdW4#Ió,ĂU@gIx2%V.T#.6)_yπqQlYF{L⤨Dn4uFJ1xoz^N4q#ю5U~g}MdpLv-TppOPd߃a)GOEHqn'[o~5dX|A) OLn:>I&F4Gܸ\)Arx.ZK*}ZU0u}p*Ȼ-I!Qۘeqz6IoZ1+iA>^t(sXo>c.B7$傝^\D@rDDP1T>dQ6ءn<=V,ȴSLU1W ?]RY?U[ewv1D*T!/$z"BkvpD9OѳP $4!k.b=P@\6 >1陥dH/XsjҀH0nmwؗSU^ Qt ilz.]h-)C~3CT|fRB'{!XB;LCA7F{h#DaԐ#[7>w٥mѶh )(B7lMM d0(a&L|ȒʌKԀ,>ʣM7AQCfic 'Lۉd{^*aK] mx%B|O`_7ڬk RAIz1c\N:ïV{jmdӪ畏<Q7@-GHbKJ cDWn&5~uEŢF˩7JS2"2__˰UJH(_bHYTڸ3Qu:SɻNG]A{=nQr1<`w ՒkSIUC+ 5-kշNs(8'mA2d׃ 8*.iz>0(ksӾ/\,ӧ j8)kWX{mw*c2V9)2W*Aҧ[@I*<𑹆4NLwc~m6\8.11_u8kj^Ex{ c[ƻy[G=wg1Ǽ}*%EY8)RҦ PL*rrX7VɲxIhk5q/cz2l;n q 5};#n$d5[b`7+" 1j+X^"h@yT']ä To_̋Bi9Hi7P$aƐjmY sSu-`-d~Dt=M,î=,N: e;_+ϧre/\ -JIU1,6hNQ~ۢtz`^=oN(E\_pڸR< ڏ`.p3aѸ"BBA]DP+AvH#EpP{ff2֌5Ը[sNR,Zuu@ϭP#ogDk wT%,x2*GO,$5$ͯ:{Mɘd1 CZ%X7oǏwO@Hjړlxͨb(b֐.w\K|d56zC< _Nzbw{Ė1\=>^~"鉗`DH c~v3*)J;MRQuMP^Ww%yaImd<*™e8 zy_MѮ@eVw>?> 2z^DNҰv@>DPE/: F &v kzNB<:re;(;pSg0=Qqb'^| :2qk7֩ ^X 0Jok Z`N(2{F)ۈ (m88 'J 㱖EuI; 2q'xvG&# e @0`G Ćf 5 !0jv`|ڛ2ڏ2 4a<u{$S@-̣߮="d]ʰ-oDtKLXTl{϶/^YBo$@Ͳ.bo7 pes}&='`@2 cxkbBqbdžs 6/0W3DzӝI=1% $ %JF>W{;b*69oxӨTDtw:Z"Ĕfv%S@h fng+츐<=׆ |JvAs%E% J(>m`lg9nR)|Oh1FE+S%lT_V}4EJ" :mm:\#>eb=H6) lq`sFLTfzϻD_U;Cs- ]5dQSn y3qhe{z+qW?؋?xt޽Ztui뼪g#v}Qjּ|*;a4M>ۢAZ\@`PohL<:c) }"S&CdF47kbwtጇ7 ,x$q.rl`ZhXerjDjecWEMt\R JrKz@--஺a>W}.>9xan KfGAc+M0Hčf^&Ҙ^h8*̐ɼ>k#l9̠} ?FgsxQa@ԑĸHD{$ {Zi~_F{XpX jyzPpct6 窱>G{=v44]`71[tn&3K"Ωi938N8Ng2̼&E| pP^FxNEzQZoeD'[m~C$C~n{}5Lm2VZ{/Gq:GՈbsyU1<؂Q+$Jm\h1E,#^c/Avaq(Ϫì_&Sr%#vTmsĒ깈|9nC:%M=sz]`բK(vۙ-ǡds邾d? 7ye7ޤn`ʌ"nF#\Ŭ 9P+u5F6QoZ; ef "RVq*at跋 r#Yѭu?lV3fUtS҅Ѝ0*V~o ex hA ]mVaO97%lnj+% l(5akINJDTE= K.ET] #925r%Ul/_\z乘EAFZCCbR>|Iލ)4V`eޠj_8Ȑa^EAvvm\焤澋< 5,'caS9V3%+'YoL U+H[K'(Ȧ7LrC}l1` ]bۊp݀A1(-0t$ZH'sK ȋku&UP5J: t @]V kpۯ0:& 3LAsЅNC!Cݍ~B{:,ů1G~q{uC/4' ?Wn{ܧa8B#A8EZ+)9cۉ՛!pU!xWO{*w|&UW{$5>lZ'F@3 W#C7TսNs7 UBêW n REw QD{ȵI'axP'n& *j_꣢Ԍ{˺]Ch(CQNxaCK iqqsw%4*d;,: j]2Lo"`ZgMgE0{- 3"ۉЊ.((!?#@^klށk%..y(rO_-TH-B!3#;PyhAixՙ% aKVWjg,[]-ʽ'>nsj' S/ - CNą@I/*dD]͑*dk@hIo qwUQ;^X;mC8]"t t]Ӳf~Ƽ!ƮJ (SsMvNE޹-]C%ЛŐr:]+HOq(c8~qqt2>Qn@u T?.WJw'rzF&$̜In{_d+\yEW,v^FNz|t >Mi80z84ŗ< %T#+5`Qw'y CF2#O KNVX.Ym2ScK)|Qi=+C Q|ڝ] kv.;U/LW g P0%Gސ5ױv:$FF:I$uLjx^$"2+<&9?i:M+Ռ#>rub$v9a%Dqj~{ih-j A4Y.މpr$yC8m,׃ōQXOii3w_r**W^I$Jظ>]g 7 AON+E]--S4iY/dՂ26G*D9EuTx'wtub;#,UZ#0\pye`ƧCmP.IT~1<@{2IHRg40 耦^Q V7S_Cض;a524%R}7Jm2cX놗;j__2L蕏(=!jK"Ƿ$Ecc/-\KRry,vx |Eꢔf>LC434u%^T@4> Fl8""*OW!#NQakWi", G&.S'RI@=qgOzp,VӋ`a+p4R"ӧʞb;pqn= G,'y#= RS "B4L )ih5e| p2`X;5Z JGЅ ctWF6u4)dhQ:j"Eպh,yE:iBedx~]Ƨwtdn+yDͺ[Φ?B9qElQcSB`b =@*6R l YeztLƼ;*VLF>:J Wp"vf f2ixRT`sFL&Ɔb(ό_|'*nY[0G^QP͓b޲\̸VDڵ(Xc^xr?[Qep0WavGbu1zޥS}ug@x\1([;$.?u% h#㐣.le맗ŏ3ts^[]8zp0UueQ +Sok!龜lb8h?ls;altw%%-;: 0Sec4,nW:;,4͆8)Ґ!)0l lf 4ºmcBt`=`ΡGGWLƒ[L%sR3mLAޫ(dD>) hE5G,:8.,?۟;@m|~m:zl93 ggw*,0)d1ݞFu\2~^ ZX D\$:>jr`T5)K̀8Vo,QEQ5f2=H"5.xu:.j{T*e!i흫O1~S{Q agvୂň|"ME7q_řRKt %5 ^k~~1' цt]?(ǤF<)[ž;}&,GQzƂUic68Hp$T#?F=<ޗ.;+ L_0\-; ۏ8>C%EmN#^ajV3/HqgDL<$%OKp3iLRE} !4GI;m`ex1EyV7o6 #I|ܾۗ.<:M *Jā}#~HJE'ً.F[pa~..L7wSG,뗵UO x\`Yj;g?0V; n &{1:DG`le)]Q3+yuáb-usԠ Fkq$QC9l Kߠ\;"G6(1dYٔFɤ'=*B)!x)dG~rm ܸi1GR$3֌5 $64رLAJ UՒ\,Dg=Ts)E5 aOoGQoJPO7=$X50zi"8P,"eW*z“:.yzgt=.묧8s s$]vN4;N) 3q:wd;~ ~tx5Qn]z;2&WqK, 45wȿt"YQ_{231w;Z&+<*߻G>S!U"+j_P\Va)ˠ=p /؃д~!-(PoICzcZE6kkeUG9ť!Z}SŽl15z'p:nT2Z(Vs(Wc|V?A^BgE[7u>FvOX_iC`|vaĘ턏e-TT[!&ISਡ^5;b(*ƀ3T0\I47ܬnb<opQ~0J6gޕ??nza9N(cF$?Z^uoǫB\|~setPØ<]Fg9*D@㚂6+m(AIRPlU?)`cnAI}ic/I+6≏lRuKնWY<2 SFaݠl;=zѕhG9; FJVeER:Z4yP.F$yOk^,RW ). tjDx:>}r5[ -d"qj>AcQgZx3'^aO[I㞀玡 Fy si*({4ӆd S$eP.™[Gc ]5dc]c!kM i {HXyb ~̠R 6am.SH ֱ CXeQиW.7t2{! y2`1uq^,nLްG޳lw<}sc1gK̟ F=ΏP %I.Bv`@'60ijm (!LzؐLK췜%-y6ҝ7 ߂H8(Öt(]}ꍷRNR Gb*ZRCwg)z׭77^wڵ_{vkި |Vcl>`E[h*;;AmI6rMCig"G^GxhEмA/y*RbnJ4ݞצd?H5z$@Y)Tp7G|C B#cXUS+|PZAZ,'}mR'u7, ^>XػܵbXАvy]pm i`V6l+$- nJ.669#F_8󪘊7K`M,nЍQ o-P=]D5qثG0XV; Uq>,yn> L2|t &m \$84̽MgSXl3)ghadsqZ^mp8,ֻ|pQ>a7jLo!gD5Eޠ㳼PV[^N-ꨋ!k ƹN7ؓ7ц/x Uf3mImw I8'_y:ymǧRs8p&qȠdR,AڃTT2=Hv='on$tx^oQ?dE!7V'- !I"l6%tvh::7_r͈G[eG aq@C#5-XRO,~$]a ũE"(2m%6z*4JCFE#Ge}?gM2v@ 0uqne\#XX̰t, TedÞǕʡ3=̤6GxGs9%9 lUdMyL>;Us\LQ!Y6 L~涱 z ^%;d$VVA9QYY*XsXUt9g:R;,|\fH9] # z1{IG@ '0:Ǣ(3Ms*V7oblr޼nyuIfÍ+ACotq2r0bm۲V4vuq"cpAP$w(m{4Kg Sxt Ɛte;0/,{EXc#pXe2̐?) Χn,[ꩠqp6.x5flqL3Ds 1>Ȁ@w-@sDO<^k9O{뇒h@lgXyPAT 5C34ocT κiEA\C7+0(~N'Vf3LF0Q(+؉/v?h0QW!д1$tFvŶQ0J fz7)@g we\Lh|$GUPMa8m9V j(![hr ]B8*a*xpJ HAQic^UHP`0Yğ zR8rbՈ|3a{8$ZҬlKC#G-oTxFKs'vuO D7dȇJ8Ss="v/zyn35+ Ijkc$@jB*ّI>Rc|#!BPE]jO^>v)_oގ̞ѡmt sz6WCYH(o\#4\)4z[6 tp~$< 0i1 c (>`HGH9k£6=sOBO-EvE8$u4:揂p@ER1nrYcz66;۽] c,hC9ɭx>S6/%$%8"$M$g>c~h!> G6"끚=DžfpabNEV*C~nb:Vk!'46GB`:8h22q17_넳/Y`a0؟p&A +(a _D6Gf`5R23Q06!Of+D$w{Ʒm A:y#* FZAT(<|os-iRвX֖ORγn"d˜6!P ^ xO)88rqK%-3n "[PK=mM`1 $X8")v8yW˒|΅;z{_l5dia[P$2סwLG\Q+:h=(j瀸NlhPy( h#/%'N|ٗ6-M.(~cߢh\&8c'vm :d>YZ{G,('N<՝B|]Zr\#HTf 9TI!)lm2J"ힲxMޑ 4qQ&1 $T"#qoQzqHe&xOGd$W,Nj V=4+0n˵AܰxM{)wzzVXī6v bU$[.thb*|"m ч9j@K3.#\Y :Ɉ8%žpYs+*:Vv.CSq}Q\ҘXHD.%ϔ(b*t|bJa=C=،:Sl͇j qDs|dhA^,f:qxxLdIQB#89%V $pu g,8悂V.\Fz E+ѶF8GTS!Uw: YSl;H-rR|A" pH!z[!0wXabhQq*a1`nV@Ka[d51xMt=)z]uezheu *d.V-Vj?6x$fb_9Knhؼ6lUg=0D2Q{r賏q 7,萛 qqŎ?'ZPD.xsH0'4"o3E(>ϖ 88E"N`^dY5YXo%/tl׊ J+Édw݊+vx9Sh Nwǩ:' w!WؖʱL-oH KZr[;fAf`_N3*-nG/Bjsz]TFP*M>{M28X4ę]'I=*J q\G{/TR+-EUfN Y Qd;رHϞu: Pv8IͯVxZuq)Po` bhhcpC@:2C7%hoXC6~xJe.Ǒ( '#6jdxo(̆l^{RBXPnv[t[J}Byޠ^wܔkvaőﶇCbta|֡q\6 vɰJXύ M-e^{ՏWYShk.SOHebSΖoTddTɗνFyL2meIQNy~F1.4 Y\9Sr8[ʼniR &tׅ61r,B? F'X< TuqYh66bRH3ԝc-&GG2k0j3q%Wy ZPřzGb`=L6ѱE'mfVu싄o3g$I@*@I peň{BI=$ ~΃>b%Fv'&AxmFo;fg}o eE<*D23 דi#C;١GuiI\w{5 yْlL +=Ol0ZA{9)V;!KDŽPlI솁Yӌ]R,{=@_  lڂP+(@{d6Pt GDQQ,~:<@2l!@:I@yP7gDf nM3kng̩דE;xs:Yz/4SrzMVUt>u%-݃?h7㱽X3 <_x;eN#/R_k2H܄ϪjV~Ysā(e.U"c<0wg@ ]Oq]>YSf1xdl)>::q54)z:dMN KbvsgVMQ*V,֖d).`^ۀf*s=#^Y`Edf-:)026j iA?]|?Oxa}'7!: vw;y'a-J YD׆lx=7ho#27Iq+qK&2a-*zCv%9\7:H~jzW ]rWP1 ;}A+촇bZYO!'ǫdمa2OZW<"Wp`%~ma7:V3~"1 !H(` )uu*L W!9 XV* E ىwzT[]v Vi?IZKgnkuiZQ\T)ǯNc;ǶXNQ!|f CG)Y]-W!1領Pޠ1t|;J[:OwDN{M⦮\O{2hp#\&&q:Pl&6&TyT.!>*Wo^vwJ^+FK~ +`0S\BJjM(g*E&WSr|tiIzdQ{*V80ÜtCq`ܸqhL >A\y8 V䄪le @J dGS#,<mR;mBx/uC_I'XwX R c^/"5qZ_ZF IMh?jijԮް؛L82M7>P !nW_*g+;36:ܛq}?# 1zX%s bmK|s[onҼϷѣ%CY1'kl PQ+P$X¨W(LauybUW-q6/]s Tz~W__fZEʚiC*Tc#E<(z"kvfGUBROyqItRM ='T:$ڰAB&Ҕ!r.A9J"qu%3L%vȵ ]RUQ"+g(H' l+LKB|J-z6%I-U^=hSx7VmDgC^4XlډC_*@FuH&_3X K5ѓ@RT7K2nпOٚ;R&:WRsky%xt]P.z"JMaqL>HNd$p#aYr4`eH7;xYgXI]:R GoCRl nh8NZ/@:g@Esg퉖̚'Z`hyE%6#ZAT '9jNlN. e'ݖl*G~僈/((Ό94*Ώl:PH4-Ǥ9k2P(3kc+:^s;T.lC .IglcñQ-Ь}26уu9 j(w$=-܎QlE wpMTX\ TԅIoH7_WᱻpyMRiOQ<䦭ˏnɨ X[,&tBx]Ƃ OÙ YEщ|^Wϟ;OJև$:~qs * W5JZNMHFEa H&7}2غS>kN<gm2/ćrKjKYe+R9I)כ} FuCEP, XAoy9B, `mELR{fP,ܲhCmf6|Lt%B=,AOu%ﳾ3'MVq@{`ODu؍1g`2wo}i)6oFK(;%7yЗV +0?|X>jy4'A ,s&a(uZgSI .Kya9e@z S)qn1h>D2#rdF^nl#1ijwZk 5I!Ϋ˼xv8~ c=HP:9k"+*0FbpANL޸6IrLNb{[Al ;X*KV[ͽՋ*3qO0#l~?P?zȈ`Rtz{(Tl :WGRDZa0D:fQnvw2=|$OGHk/3gdOk*⧫kqt~ 7Xᤠvy:ok6'&:'UKfz.^58]JI鲨[W7-шB. ey6 -x "&#z҂W_2dXJw4Ca[:m{H@Tb\˽sLyɒ@ݢ0.MoGdc6 =738XqhG̈́!0``uM I0Y({ݻ'`/F?Lǹ ZBM̺ؤl\+޽DT'׊mdE%#-k99ԤXQ僪 )8ܜ05LR%/ uRdjGkabz]=A_jqDFe WRqH;OqGY4;GhIo.~o2)lΜSk5zQEA QD ѐ(\|HWF]BBZc#WzOk,1"zjq&xr!3P2"$Q"]t;bY+X\smRgÂ$*dHEnd ӽ<%rvIRuݤG<^FK5hvVWW~AQNţ&%1|Q4AG:$?MT$c59iBV`tN 0721H;ZZ!u7OA{Z )2l VXT0~{D@p UNڛ|WWHÀH2`j8lzR1KQ SejׅMIrt Ɇ+l\WEDѰ.ioÕh1Ҥ ʯuko=`eu;m겐4\!Ђ\(q.@sXʉ'zրE[l Bbct3VF7P9L)(pwѽ7 B%̟luESiM~n՟qk4ƝāTx?Ѭ$Zs6&%mNJv%kMJvؽR' 9N^ZOr.Τ\XT <^Z\= ʔ?ݶJ\Z >k3rR(["8F#[M 0&FwPirh/4pB B7ɽ@zrIk;8_=^ˏeWa'X,x 9*kt.Sӄ:kjüB2]Io#-r֕`K|ǜޔ1; @w8 ]\;{N6CPX nFNkq43$-(qQں`2I[j?ȩWJ 5a=]97z!nv1@\r k#W̵@yuM"@:LTdB@Dk 4™qD V|tdNF~:\ǍR~& OjKJNxa{`{ÓNc`\snBY./Xw`?QKUKhDƑвٕǚ)(1sCgޒbPǮvN>؎j|F.B%̒8&Ģ\QIr#.Fq<& 2aI3>`bu@wg%:xbsN/1 T3U$i8p$⯓gZ(j I]%F!a|ǤC䳖˙@|7W#VݾOUЊ"I]"HuНmٵwiJMJ 9N.y{I¼'=vvLK8F? yOMUǘHB"ӎ[Run'u3w]:NeBe+B9>z RZBx+!!+rJՒ6m|4U6JW@C] +=¯Buoa1wAkM1Bv?%aQS=E5t VQ9eM$sNļ!Ǫqc@rouɺN$7/5,xj言cJNH[ Њ$yD8rVFcŀY|:K!Ʀs>qn(鶐X7TVxxzLyWmVS5"G9y#b_I>GE׃E҇m.^O`씙xx>fJ7SsDXe\ĉ6k9CXh+19,fqH^ٻ%r#CﭺyEiX_GSKM32a–8Gj6%ZvW)P7=qrqM(Y&ymظ@4cI8| f]5"V=&ƹi,:N2Bҿ(2LJ kC׾߇Yǎ:͜sVʉHaoKh24&5 񲫵K jORoOȍzPe-twp4ov;(X>+BI(!hGfq|cZz*؁݄a#f7h(?Cq$rOnL0W.t4ӵC׹iPx%}{s5IQ¸5!ϖsRO8;l/B\siēHN =FlEFfWbPu|«51RR yJv3BqG-s6;@e==d[bj\Vv|pBYE e\ SJ|ޒ&E$s -j,-HiH߁2>!eBܵ?y4TSoC_ڍ/}cd^?lg[I"8v'=\hJOp5qgMF$T EJ(tM-;,nfc Ju RfE {G4THC{GqsRA9͵x"htMel[*VKF'?:(0)IQ>)5wirN8aɀBg=W=o.;ɻ Yefs tܩk6<ʶ{%X^% ٗ-H!9VAHn"| K!̳LsTd Oπсh= 1ndqrst~x E[gB5MFGQ'JWJzd AJjNaU[Dθ)Ԕʁ&IfU9ۦG[\-ep|LuY'=Z9(.~o$wTtNBaSx{tv#Mq72ў*@Π\]¹j.j&U4̹B l8Ԇ\|L 'cV{ %ju?mc2Iriϧ-j֖'y6GB6*/wWTuΝIJ=*@ A Y'bHn!{' u{g-o qx`hp S"IiP5ld[7ؐ.ùgzZ&ݖ> a1>/K jݫl_AI1 yh{ ?ι9t2wIo3":xKƤîaO $YI5,8ZUYKdM1/N 'h.l0V5>)MQM&#Oe~u ľ({n )y2>h;#zVֳA~RHљNj@zƾ5;QHдm'")t*!fRjW ub. !\ܛ:)fhK 8*Sݽq7Pi3K=GN$$Z;vxcMg.v]fu]q#ZzBᑡUh'Soٽcz[Sx7Fk)=Ec;|q$$pV:Fj_ f՟yhZ.~/es/gimϘra}*eU'.r5^ٯ.[@[VgQ=JKTAco& ` Q|8e-^SkIݱeg솖נlXX$tGM~S07).Xҵ>Ia_VA^ X(~N_;)M@0+,DF0]|-鱆 `TWq峁r*cs!,X  Xyu'~G着Z-Lإ_YZ\a@yKv(3\LRǴ!.ED@mwW/->ZO^%mbKYr\҃! -nR졭B0WkoeGFQ7Mڙ+g͇'gfM?&շ6v< utPB5p5on&M;SAoYe>,1(AoAoss4Hq -"|C.QinxTj0F-棐yΜ1uz<weʲ|ĕGM\۠хxLOqPK+0s7U窩Yd,V]oPugD-`(UsvAń5 TRD+w).?stnNSl7lұv *:w?*s5K8r'MV{$"sz}U$`O,8zh3h ;x0OZ)Zy6RB= ND&hjC?-x0Vݦh{mYHhlD03)P瑦L㛷yuR+`EV<q5XNq%.g2Vd5O. %/ΗhL8 p(v/M0G>;,8 `qZ Q#1%x3ÊGr'U Zָ8SRMHbXzo,&n]PBʋ7ߥg< %ӽr 0u7{4nM@Gs/"*ߌ/7dcOeUKAE P0=*ݐ4˫8g> p>u7yBslmd&4 -AJ|CuקF"W7BcH[$4CtrbԠIl kxhRxg?3 8HɪRT1I\hiHr)R}5NV̕ૃVsa Y\V?Hz[BCf@H41H%6nҘ.#P^jL7XFj,{lV斉hG*,Jl$)wIg+/I'c~aKaM `\ߒuJ%폛X#)N4`mX;Sk%QeuqeyT3/-+ beNr,zX>C`Ö4eg <!կ.æg/ee4{̔T1>.vt! ETNETHYSFpyn 뎏;j.K N0f5Bq<9!3 d5*=oKYds02d' wYK9> ok@hndkH]x^z,\Muztx96S`%o!zIj@Fǝ;^5@ԄlBզ*,xO3F@RPMM9=d?M=kR mFʹ M꬯$@>!!' MBjQ @Ed-[/ dIpx=Z$݇f8x%4vM) ,%f? 㼤?sz7fRnp= >ݒ 9v jPa2)?貄X;U}e\ch0SP\ Y|֍(3zȤ 7;-jš;ݶksEX&A˳gYA@V.(2ms.x:,$5U2$ܑV ^^{Woϝpa~zeN" RQdr֧[xPf;wF5FpCnۆi131 9m5`=AKK[Jktۊ"7{L"CWo IS8ZZ^9{vEPm;='b73xHy3xnΝ$H2B lU" _|B -70Tq-QA0ޒPNF/ ],8xi#^?XɇQ4^n8>l3tj5kn= &R,(?/-F-x=zVQfX?T{|ulusK3Kh<*B_upT[1M +)AJ^cR|vqi +GQ&;!mO39YFH侖ĥ3a Q/v4(-v'>?:n?kaa=sM4i<;(q^^}܊8 x>'kRn#t/Ԕ&)HTAB0j>.%;[iߊU^W6$W|h.^4u)텀>>8 E]4L6m;㋙oCtȫ~6,0TuאLA.;L{XehBGp5b<.q X)ɼ^/ 54%TKPF{{fw&iioH(hS!'4:q7 cA[PwdBhu'0X SwT|L&to%ςf-.ѱ-ݨnxH_)\m:kڷHGRFDXVlKhãfY6XAZ68Ybj?`"- W&hz {A1'XQ$VS'ߤ 0M@>w nM']UM*:5`.FW[|hRR(gߧ9 cCŪBTSb%e&C 6:ʻuO$]hl9i,cp]]Qlc.YqgCu>^;߳JCByn:޹|wW߾qz,JCQs)rBrt0R.dGBImp=Ncco(:\V#hl-uxYyҶT3AZ&7,+ J$7'K RBU/fF:R3WW%|ѵiRޫsK.׼_:W@hJiCt&8ӝ&nfiL=nTVI6u NQP?7&uJn5C;W}Bv~λ9`gf\Tr=4'a*;% &ȪN.d q87!/P 3 h4~0=Ǡ  ]cy0qwBl܄Km!-Ʒa/f ߁9CJR+.4Ń_#Ő(C*[StNCEZ圏Q$U0na-*ВƣsE^ᗏǾ`^ ;x69HvU05PڿhKhA¨/p$8&p2c)^:f 4.< GclHwXW#Mg;>鞸==+]:"$oD8U$@c[kg^;-,a&J4$7Q䏊y5YH'"JĜha.-wF&(e:4y0O+|ŋgghaV&J`hUnJ]yY%?.5&Dxz@-Ye_{>`6@c;cr4P+SfA2j ymytJSh3XΝ=r O i[7]v aU \"kR#azjF_߻>; DlbA{"-t*YP#m4QW+Hx4.-K"\lMdcxIմ 2%{PFDl*VnvF\ Vr==#l*lKqCqZ'KǤj+ 4xm9a;-hyJmwN+6}hB7q [s@:= rvQteə4oG #Xs5[0-IfGbgLhâ@9Ft9;xJy#ő2%"o|DNZW{n}<ǒT~S"cΞ0h +j<M>>y#4ۣg>гh:P,~ ? wA~!N1 4G"> RZ'8M i|Y/E?=j i+ OwfMx8nH"yQFF),)j;5/˃Ƥoc\(4\ 6x٨׌@~I-~lO5:sI1 3>;>2]۶= iݲӖh_}_aYԀ Ы4`+W,T/tϋ0X\4½FYvK8 {Jߤ;jtFFxqgSsk#Tl(^u5(As/,c8赘't0Y~Fja0B1/nt>cz\ؕ`EW[TlؿiQYAUu,6^*| 2Wz90S_CǃÆGOsnq:C Iֻѵ=D(<(zJdˢ-& kS*FkWe]=٦LoU,u}~q։Ulbꭅ&afx_CCZ ?sd!v wQMd vas$7gHqKxdaRV7 KcT\8拓LPMB`e' r!N*蒥0wtWf2%A[q a';] פ`{1}(W4zO]`{֛VvK"4 5Z!; :X~ 7ne'SAiӢ6%|@y}RLV?XGѦ A+' a8p4$[C .Mc6*E0\Onk6((d>3[_4UQg[$}Oz:547^g4DWMŪvS u(g\1\OLtterΧ)sߣ8Pz?Id4G0zq})f~MilC0I:Z>VsLwh \()u?uZֺ%IMTnw{J#nAu6A4$p?8;dGTJ(vrK]I(,.CdTh;0,5{~DCk˼0.X.gx-ѯ0LX~[XPn7EA@%bS7US_^!'N'uxd bH0Z ":M0֡"e t3` _D-t HcTxyzU4 W |H1aZfkWZb_QdǘMZR\!vҀ'1OKo.!goV."98f@@.(xē4~;U mC|~fqH>o\1r5L5ƻ !++6FGSO6`-{aJܬn P{q ' ݭds]n! m4cPN{-&Zierg2P1[balӓ>_t eL/[^g/\)>,Ƶ nѷv=;RXL||E1yOk![U=w޿q֝w%WhA|ݫ7oC{˷kLՎD.*I /y,OfTCC"{Don{E .ަZ['[t4x~YZu{n1%}|Œs*\jn!k饽ΞDI{ ͝.jK6k1NJ #79ՠ*<)IC+6Ȑ~z5⚱}rVݸHKÛњ<3MX05P2FO] bb58?bttFWIB\+Mtݢœj S\Y}%K:#+TCtw;܀M#[}GwvZjf3?ʨk>blI2ZI\Mr&pwiSd$Pyʭ9~,Fy䶐#LV9]^FG8CZmjw}~1=Jzd EvA_b[ieU2Ӟєxfwl(t7Jm{L{]L -yM =NջX]DǝxkCp|T\z;-2dE.G fV2GNӌ/:Jd{6{o ws6P=q[DaTzT.ŎvDAbN|сhme:KEWk{E;aÚgSאָk,v-xʹOYg?}??,'b\.PL:OwL ?sgaٞ9r(|O#ߧt_6{ُ;wntO1fڥqݥ04'MdZ=գw` I/Ek@!aT֧Z$3oQ!"-6#dT7'$ H&)y=Dalj0d$Fzk}v߻zݭ.UwGsS;PSZa0jn NZc6M~4"]jQeS$Χnv9aW|Cdچhnn?u[,̚q7" jذ[ߙ`MO#LۛR x6.ڋ?wo^y A:sLTنӏ!a#/!vw߿޸~*]}?1B 0|:g>|עy 6~l=_&C@MaR*{h4i[ Vh1 3zw@Me i Řsc?}F5^ 70K:5V+[ *?$VO5+ Rl%fҰgg1a[O\e*Y SG(,l IA'Q{&ENqU"=Î( Lgrb!K9~0.+EziYkqK 4ȳX}-̧r@9E醃=.\jU)ȵ*RwqϿZ7E6,<KCzG&I+TctOEgOh|^$BPY-QBzERF͉t4_Ai:%B1?XZ/R4ى.Zer: o<ʷkgv9vxU7Eyb>~a+3pwd~ y>ss~k3?y!b_,ݹ<v_:ub'?>SCp]k}S~s߄rԱ:>uGp#SjS3p,ߝ\G)^~̺kt0"W~+Op=,'ooO_o S0p'0nLDu ( <3S mxum8\wa4:ԋS~_OQy? ҿLyw}i(1_'Ч??{oO c E-Hu7L.{ayp=%_oC;PWl3^ ?.mK6lvM޿ei×~?mu :~d_؇OqM:~<쇰.zi߀2 ?!uR}pa ? ןׯB=I?.e;^gil? 06wh|\/uA_ \G2c\C gq8->w'TgsXp 'eslk +^՟7SW ݯA]! ^? 㩵z4P緡=?>9/u US?rMOp(!ߖ뿔뿐߿k.|}>\\~4'/;?/7= ץlJy8O~ p4i_4mѿ߀w_S_LM{0ex}ȏe܏h 0y`'%ii5 Iy_oܗe2N~'1Ii72*riu-?˦'_NCqޞuJ`iU u<MUyV\ MfߔGz-{^u)*?uɞO4y٩[@?d~U 9qswKoe-*617+J~r]/} IsQ~<&8wZKxz%zX nǥM R_&8|Mt(R\^:! riy)/ WK~gp/k\+ߒz. ^$ooK?(x{^~(x=]P6YƴRnU)_5ziKrU>:fJ˱j󪁭e}w ^b}!^딹lgGߐ"ugN_{_u#}Sڊ0p.ؑ2׎Ye_<_wr  Me{>Q6\߇m),Eo>=o+=U2׋7´8p9jrY$ җi=*tND %?fgJ~~^}V|NHY*SP:y)kFrJV~Vڨ#]74q3 J}g_0my:-uypD9)0^88R4^ǒER&J;7" %wXpQpu  Uw\:fftFǢҿJ~N maٹ &/}~iK WvkN<*y4#pWeVS/'JiyZ%:) 6tΥcŒCfnZO~cU돖ڗ:>5^_.x^͘瓦̯^:鳎 9eiHYKw)p}Wv;Ŷ~[0/o7|\?/a]z=WI^*e6c4CJp)]tY^ |VZr"Hs4Y/K=5}@X30Fjzl5<[1y)Ei`܃^Z^ ⨨ g,e><^+/A6)xJ(TN(*T˦-y4c5 O^=U@]wujÔV83}R|,m7_,ɒlawK%/gw}e oѥy,|yվӴ_6h k(~}ґ=jќwpBSmLimtη(-oϚ"w&ߢ&%dٺyfsvRĿ:Θ_KlN/LE{ XNE8 Lcƶ5g*{P},([R;/T.h%my*/;"GJxifLm* ]Gr(ʹ{)+yl_<>x)[?7lNvc<7 ~04:L_9i¼sʴs.7a;hP[4R/G+ȼq뤖},x8LyJs3(;2ٮS*;Thmv}uT)˫kzwsiKY~E/{-e8a]4'K߼`~_I;1si` y5=Oݏ/Rs_{Za {>O!5|?8E Jٺ̚2]Vxk[f+M[y>5s4z6+]U>HfzѾTYWY yK9z?y<^dUfj/ˇEAE|wȣ yyvu4< AyE="m.>[X }:ui_)#,+<ڏKb.H&!B +ǥPB'MY^X=f3^#\liÎşLS6}}6~|qIxnB͏{1{?NW#9W"߬WCx} 7{r{aahWvμ`~*V;/_BI' `Rw8m݃g*[pKz潥ON{!igEcj4 Wg^}Z-՝3DқR],eσ0K=YxFei~K??Zϻ[Stqg)'O6F-!ߝWGnߦIEׅ9vQ݇VpH;I.Lޤo k6'ќa0O(gۯ܃ elnpu)Mҹ|k±2Z˻(ot"(/>,'K뜥?*vH> 5,5<䵵wgPa"}Pn#'of~?]ʃdxq75^$mY³{;&lF~ZWH?']x_^觹ad5 y- v?Kp-[[>k+4Dhg&QQ?|JuRhmS-SBo禺Z!M?fXӵNe3VFUljE_:-#7r͓'JYyL)'w 5UΡFu|^#qeW~VTdc PicXԵ &v4[C?ojevߨ:vW1鏕uS>*v;zT.;h:CMeu-zhMy̧8^.eyҳ{Es9>ۦl>b^F72N:³G9MʓG?Foî6k~2|yGq۳S]kU<\fooMx'|Q|Y/a4?O#ϯIaZ{ C)}4۱pԼh|$ȧ}xI->jX.KdX·J~ 9WOu4kOBȼØK%/b|/|2_o(PJK1/2t]R6K5ZQcJTins^^1GkKju7͖?KK"S_LV!T9h߆$6Avc:άD~خ'sMa]2m :Z^ѱ  NJ7-}lO*4ʟI{O~}[eA7&?K<4[4Wv,A_uY_ >-A\%Tٜg1cX^4Ņ ۫o/+P= C; 'SqIߐ_)=+WY~UUyU|v5WL)PxSȃQ{Ӽ={4݉Vϱyѹg/sݎ?>' u͒pfͳn*ñgZ{r)+9jY1nVhox&`sgv/my Ύw_/h`mzL$yiPeǑΝͳe|_eV&?V5ՑѳX+2%_}v>M^GL~)u<䈁_ 1kϱ1?BrG;/^(eH(8<|ޔki1>ū.e\