summaryrefslogtreecommitdiff
path: root/kernel/hung_task.c
blob: 751593ed7c0b0b9cc9bf74735fb9bd5d7e100be2 (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
/*
 * Detect Hung Task
 *
 * kernel/hung_task.c - kernel thread for detecting tasks stuck in D state
 *
 */

#include <linux/mm.h>
#include <linux/cpu.h>
#include <linux/nmi.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/freezer.h>
#include <linux/kthread.h>
#include <linux/lockdep.h>
#include <linux/export.h>
#include <linux/sysctl.h>
#include <linux/utsname.h>
#include <linux/sched/signal.h>
#include <linux/sched/debug.h>

#include <trace/events/sched.h>

/*
 * The number of tasks checked:
 */
int __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT;

/*
 * Limit number of tasks checked in a batch.
 *
 * This value controls the preemptibility of khungtaskd since preemption
 * is disabled during the critical section. It also controls the size of
 * the RCU grace period. So it needs to be upper-bound.
 */
#define HUNG_TASK_BATCHING 1024

/*
 * Zero means infinite timeout - no checking done:
 */
unsigned long __read_mostly sysctl_hung_task_timeout_secs = CONFIG_DEFAULT_HUNG_TASK_TIMEOUT;

int __read_mostly sysctl_hung_task_warnings = 10;

static int __read_mostly did_panic;
static bool hung_task_show_lock;

static struct task_struct *watchdog_task;

/*
 * Should we panic (and reboot, if panic_timeout= is set) when a
 * hung task is detected:
 */
unsigned int __read_mostly sysctl_hung_task_panic =
				CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE;

static int __init hung_task_panic_setup(char *str)
{
	int rc = kstrtouint(str, 0, &sysctl_hung_task_panic);

	if (rc)
		return rc;
	return 1;
}
__setup("hung_task_panic=", hung_task_panic_setup);

static int
hung_task_panic(struct notifier_block *this, unsigned long event, void *ptr)
{
	did_panic = 1;

	return NOTIFY_DONE;
}

static struct notifier_block panic_block = {
	.notifier_call = hung_task_panic,
};

static void check_hung_task(struct task_struct *t, unsigned long timeout)
{
	unsigned long switch_count = t->nvcsw + t->nivcsw;

	/*
	 * Ensure the task is not frozen.
	 * Also, skip vfork and any other user process that freezer should skip.
	 */
	if (unlikely(t->flags & (PF_FROZEN | PF_FREEZER_SKIP)))
	    return;

	/*
	 * When a freshly created task is scheduled once, changes its state to
	 * TASK_UNINTERRUPTIBLE without having ever been switched out once, it
	 * musn't be checked.
	 */
	if (unlikely(!switch_count))
		return;

	if (switch_count != t->last_switch_count) {
		t->last_switch_count = switch_count;
		return;
	}

	trace_sched_process_hang(t);

	if (!sysctl_hung_task_warnings && !sysctl_hung_task_panic)
		return;

	/*
	 * Ok, the task did not get scheduled for more than 2 minutes,
	 * complain:
	 */
	if (sysctl_hung_task_warnings) {
		if (sysctl_hung_task_warnings > 0)
			sysctl_hung_task_warnings--;
		pr_err("INFO: task %s:%d blocked for more than %ld seconds.\n",
			t->comm, t->pid, timeout);
		pr_err("      %s %s %.*s\n",
			print_tainted(), init_utsname()->release,
			(int)strcspn(init_utsname()->version, " "),
			init_utsname()->version);
		pr_err("\"echo 0 > /proc/sys/kernel/hung_task_timeout_secs\""
			" disables this message.\n");
		sched_show_task(t);
		hung_task_show_lock = true;
	}

	touch_nmi_watchdog();

	if (sysctl_hung_task_panic) {
		if (hung_task_show_lock)
			debug_show_all_locks();
		trigger_all_cpu_backtrace();
		panic("hung_task: blocked tasks");
	}
}

/*
 * To avoid extending the RCU grace period for an unbounded amount of time,
 * periodically exit the critical section and enter a new one.
 *
 * For preemptible RCU it is sufficient to call rcu_read_unlock in order
 * to exit the grace period. For classic RCU, a reschedule is required.
 */
static bool rcu_lock_break(struct task_struct *g, struct task_struct *t)
{
	bool can_cont;

	get_task_struct(g);
	get_task_struct(t);
	rcu_read_unlock();
	cond_resched();
	rcu_read_lock();
	can_cont = pid_alive(g) && pid_alive(t);
	put_task_struct(t);
	put_task_struct(g);

	return can_cont;
}

/*
 * Check whether a TASK_UNINTERRUPTIBLE does not get woken up for
 * a really long time (120 seconds). If that happens, print out
 * a warning.
 */
static void check_hung_uninterruptible_tasks(unsigned long timeout)
{
	int max_count = sysctl_hung_task_check_count;
	int batch_count = HUNG_TASK_BATCHING;
	struct task_struct *g, *t;

	/*
	 * If the system crashed already then all bets are off,
	 * do not report extra hung tasks:
	 */
	if (test_taint(TAINT_DIE) || did_panic)
		return;

	hung_task_show_lock = false;
	rcu_read_lock();
	for_each_process_thread(g, t) {
		if (!max_count--)
			goto unlock;
		if (!--batch_count) {
			batch_count = HUNG_TASK_BATCHING;
			if (!rcu_lock_break(g, t))
				goto unlock;
		}
		/* use "==" to skip the TASK_KILLABLE tasks waiting on NFS */
		if (t->state == TASK_UNINTERRUPTIBLE)
			check_hung_task(t, timeout);
	}
 unlock:
	rcu_read_unlock();
	if (hung_task_show_lock)
		debug_show_all_locks();
}

static long hung_timeout_jiffies(unsigned long last_checked,
				 unsigned long timeout)
{
	/* timeout of 0 will disable the watchdog */
	return timeout ? last_checked - jiffies + timeout * HZ :
		MAX_SCHEDULE_TIMEOUT;
}

/*
 * Process updating of timeout sysctl
 */
int proc_dohung_task_timeout_secs(struct ctl_table *table, int write,
				  void __user *buffer,
				  size_t *lenp, loff_t *ppos)
{
	int ret;

	ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos);

	if (ret || !write)
		goto out;

	wake_up_process(watchdog_task);

 out:
	return ret;
}

static atomic_t reset_hung_task = ATOMIC_INIT(0);

void reset_hung_task_detector(void)
{
	atomic_set(&reset_hung_task, 1);
}
EXPORT_SYMBOL_GPL(reset_hung_task_detector);

/*
 * kthread which checks for tasks stuck in D state
 */
static int watchdog(void *dummy)
{
	unsigned long hung_last_checked = jiffies;

	set_user_nice(current, 0);

	for ( ; ; ) {
		unsigned long timeout = sysctl_hung_task_timeout_secs;
		long t = hung_timeout_jiffies(hung_last_checked, timeout);

		if (t <= 0) {
			if (!atomic_xchg(&reset_hung_task, 0))
				check_hung_uninterruptible_tasks(timeout);
			hung_last_checked = jiffies;
			continue;
		}
		schedule_timeout_interruptible(t);
	}

	return 0;
}

static int __init hung_task_init(void)
{
	atomic_notifier_chain_register(&panic_notifier_list, &panic_block);
	watchdog_task = kthread_run(watchdog, NULL, "khungtaskd");

	return 0;
}
subsys_initcall(hung_task_init);
ްGVt[Q4DPØ.{&z04imT o'ֶİ"]s}f3vY!? wo`b " z }1`}lW-^4cPuRQ1{ AEnO!da 耍ـV[4qVkMM>ff[͋[1'&v=q5T7fዚ;B' 6]_63#!qc~]da}NMLF6ژa ۥh%=qެ@JkkCJHkOd̒m,n >𓽵qwk_KX%0vjf<|r$l< 'hOjeYwԬM5~WRҦjŊH^fc)RY`4jPNoWX/-]гHhT{.s5"}|"iM24}.i`lݠN^VJ>cuqp+dj)#f7#K\7y]3X4gov|E-bZ9.<^%l@zGcps3-&R$pzRo®&h0؅eړ~Gw˗#(o 9affk3=etTu֦kNW<ՔeAykH/싉pY!Y]2\R$Qn意“N4vvvݍ,UR>})?R36.(“/i^Q",{~5ٰ33;S;&?!/%fs#5F٦'q[ЫwDΌϕMchg .kv$ Q QII_fWCѠh0<|:j e#ճDF )IkaLo3s&{,-UE~r5@\EO~YZf$Fu0}ĥg%ߞI~)Ѭ@K}_c,?=-=n"]rJes 1(ߥ57%z_cO9ID$0RH?m~:mmp8Rk=BG4zd)ʝ)dj@i\[,D>^-n,WpqžG'q.~k٣zq=Zcfc4ͺ GN? ul\3.&tv-Y.k{O$x߀^uq%>Lmh0ٲD -dҶZA_b8 +$'vrXӇjD?=:4+|XREvmb,utb"[2%ֶllG8xS,Dڛ S}y t8ז.d|7Z e6ܓ܄o>'=ݩSϪ4i#ӥQK4vGNԙGU؅!0Fu~l  p%{|sͷR'Y ym^Y5TS ,Zz,Bt94@U)\ѻZ >uVFs@-' ;{s^\܂\>{ ;B0X.>//hXl~nozc6 $t+KQ$REk+7l$xu`wRȀUv6L0^n N?d M%7#r׭:WW}|ë5IQf4ɖUopY')h _\$ţOʊ3 jv|fiXq wgdDj=ѩ6ɜ5uɊ=5=TRNoT>ZQϽNRU jgnxdVD?C !HiBRψC9_u rQ 4ddUwkѬ_Iէ#5nj֙ Uo1К(kI4Ϛ_t)xC(M|ٵ@CBMÐTw#x!<>۪m~t!K6K,r/Lɱ[Q V",HxdhnOedNMƮ<{GADAON;T88ޣ^֡FI,|`H{&#'d1>N mZxcif Vnե 2 |!:_֢[NQRXB۝4T}5 D_W Rix!i+/Wjb\>0J_ő{1~`Ӊ]FKѡ!+MB/l|ʑdm-V#F8tx!CֵR# QZaT]pj Üp%.>z+kXF%,~GEu!"Z<0%A؃3.ܢ<kQku. ֘uT01.jTkI`'{ⷔAI L6z/R`NEO>8@R f}f:&q^ yHZ<Tc{@/0Դ,?;/y&őՅ<36vN]Ŷe{xyD׺I먑ͳcQy" F^r-0qA΍v= `V>uD/)Y%J6#dܯ*%<o!4ml?kq#kUg>0]wWO?<] 2~%̕i+Z< x8qChAsm tA8[u qQ^,7K٤Ew)p'kXjb2OֵO2 gb"[9 `,tJIڍU,bǐPSkړv7x%S%vbH* zڡmzz9W+Fٍ[`x+q,1 (.lGgH,#pɃ$n@'i[(a]B"≹zc1mnReTc::j)š&i䴻p)<ө2V!u=3ΕOc-t?SX+$ `rս5ނ1 Cc"Zw"UtmfCn kSUub=`!.pvհ 'kSo(5!Tm% #6 =mqyiGKi8Tx"`92Zu|D1J E_g'̟/iퟢ}]/ Bm$Vԙ{EޓȦJ̆;t6.Î+jo=:J'kG-|odӪθrȬ^yiMq*gVQZ&CKl l/3:viJ+H@m8//A!0 F $N埢ϪqH)1 V̖A=9Q2E 0XQX+kЈ:%?K轁;JQh|%B+&O*aHPgfwđh"YD;!gӌU4X18ǵ8)jmQqIr hg쒺:M>C 4;BT j%+x:9E24߹~=Zps2N0̮z؛XtA kem32(hY:E]گ8{?$S}}<,VIC܀҂1P))0HXwFM6f|#ْpiHg6-ϖi P0+?O BTibҘKH۩;d+g{ﵕu5x)LY[~xx}$-ЩeO}>M<\q6b\}b3P6ڣfwQ4h7]24؛D*VNwܤS8EF)#;8 _#57OI47a0pHt0X~i9~B/B^1y5rh?}hutL)= qC?>\)|;F$`HЫ&.WK |:5npv GUKLx(;#=ދ {AU[L6{4uY.採c:6t IfSMF 6!KTaGFd+(dhEJPvO'&&Pb%s22ۦ!ז61sDzM[z$Ft$vY%lܓǼ{: u⾠V%ukSZO_0ݹ;Dw:$pf}wG#x?It%Tٔ)F9tHYA\+Db8v@mιq+(C,bL!,L}EHnn7lsR {q~֌ a:\G_\o3{@,Xs)j2H5E`,<(DaPIb*h!io;vȹƭ^U s<=jV 斈+3:Im,dB`uo%ɰ 0/xt;i^G ӂȎlIrڥ}iJ>ǵ7t[~(0oDxs~Bߦ7Odޑzyw4Ad$"Ήp91'WnlC#Y&s~Vc*V(!Nx4E"=8.0m~|n>>VRc@ަIԝz.)}H86H2?"9,KVsx1̫G#[uhhb;Nc޺Dˠ_xu]|e3_Pfڕ5 ǥ4|>m:euC܍5$vмlg$VWSکs%C$_[<19@i/=$1Cw7Q2_`G7攗՛6{ᬡ&FW2g ҜfVQᨩp)ꃋI]DK!־5`:ZFJ?yE[-yz7ТA!2 ^e2bp5[kQ4H}d3$ϭb|vզ߁w?f6f,Hֈ)Xa;aӟ൥{rqU7v$+~)yw ։':qO] Z\ |_(m$Nh61- "a(^_Ik&xaHZ]@%+Db|0L n4 3K8DPXbߡk]B7} >Wnx>5^^{ EfՖpEMSE:UJd57'aw <uVD^5GԺ돫"9;_DY{ KmqI)A),@,{Q2x b>@tQS 9~=!6Ҫ!L}rmUQMp@> wl` $;˱tHD$3V=hbX$~ϒ>~|@FN4 UyKR?/M62 dw,\M4w&zqS:j45gT35I 5k!?P8g) 1F>}DJX~OQ,]F2^ҁB"!W}q7&Y-Xw|>"8&W'G$0rohغI$8jӖ(rCqRE䞳+T7!!"Jw7gIg|p2tgW}|-ĉVIvr +p9Qg _Uœj 3\{D/Xv1(0 n8jq3P+RHKq*~1Kh丼By{mﲀ0<4ܒx,'Y` .dv'w-yrj4_"X蛔iOtTL(??ڤWǗ pXv8.0-b! (&Mjg$Gn^CM>艊n(p~CBdZ}ZXb)vf9R3&wXDzT~1'p޸[i n>+àg" Fm@p~qCx.Q_]dv[ 2"5B' @d ^9gO/gR ߛ]w2?"ooCJԄSZnoLjytIb|&DƆP}!kEod$nϐCP>j1DbZ"e!M!9};'^o\C ;1A=ޝگ6&dD ivU햚Ԭ}=SAN)?* ]]ʍ R^"+wgJV8 -3jJMd3.njP~JUHGo6~نߒö-'v( ϝjLU%ըpNs;lq_ntv΃0)]cYVd KŞfdm|MT MգsXqӲ oFU@;X|,w4|R=A|tsLol rc1k Q=In1rfbqeՊb99$fCJS(ɼ/v]E]oMZMN }8[GZ'4OOǃ".KoUc6uغv\~7Z1gRE5! ) uo6$#-]RYL&>~=\\UIZ/xRN#oQvfSXz,>#~[IWV\-|{gh`Qs;K1z~^m2_nNJ'V2{ůؔ _.eVYtlK/'%S? x:}] AXL1OOn**5YD<9 )l2&< {,~+ I0? ]:B-*4Rr\ T&cHV<ͷj^u59b!j_&7CANH &iϊs2n˃a'%K}K<;CIA_HB׸N+&])+bchKk*t]@d1,]7.[dWμvy:?oj<Nck1UUP0jM;_|)(aHJY$R6;u-_V3VoݶzHH]L!,ar{MZOˀ8)x~,?c.0XؗهWj%='WL]$d1]P*W-s#@(uzwFko\A;߼"{1!Zi'>IA&$Vbk$O~O61끯lvlm p^27ǍYz-iwDK*X䋪)i7\hve3@6J0} lg[3 1CGq_=7p~K F[}0#8=VVHT^#,5W4_$|dil 9|e)SjG /ڑ~!{O`ю1OWğU8;jP 4`89Jܿk]AЌ(;IYlrMIc9گ|R#Q^!}[̤'ߧmy9Uڑ׵IiS}6CsaBNf1h*ջH}~ ;cr|Ed|mQ|t`/eȚwx/IHS{\d5 A].(߱M5 U=1)Nj'eGH#׿7 {K}B.I) ^ Kˏ,-kjyjG6Z#8IO;1jj[4 lz:ٴP;h6!CHYM}Pτ+ylȜڳ T1arr ki ]8wD/8]^'fQh%>Y$O:+j{L˯u3^ å6Ĭk%dhT;]xŤz mI4,xF4!hX[TM)~pk!q,RL 8Mh[yt35J^evրjg<}*Ř93k$ -JSKU(:"pheHAb 9ҵd!4]]s6YqZ/^&'&q$˙|t-˫~Hgrtp@k{q_|\Q@X|D[Y)l5(pF^&,dqe|T*a"wfTlR3S\KkDαx߈n(xnyj(ZkKfHJ%FGhb z k`6ɐ Xuzq E?W ލ#=x ~tmhK=5^cC2Mfbmk3ِm 3.)#ﳚ-6۶&pm%1$˒>%JpqgvѨ ln.v0w6m CMMsev8ZB@&*-qB_O ;/b1L[>s0IDps,3[4iQo}'=cR/mR9-43 8:U|ԗBڠ"O)߸q]u-AEIwT}g;juŖ+Z-i.tˍ,PnhUѫ1(b]mN;cp3R5*oBMY8q U}RE$>!I"'Gz"h)ɱYObL5T(.̃}HN4= ~ MZ$&( d٨15UT.&-5*HUTF3ԏL u;;$cmMbB 5g^!8Cў=˵lUI˲rT58:[5=}pLɀz4fd#eh{lal7OS602%&W㚴ndj6케p95m*rL3{Dxi =*jLIqPJk!vWGtcD.*fm{]`ޢKeA]+PZ2[wmi{`VۨvY`쭐ndпfv(9Y~xJ`[W 0j϶p4![$n]Y(',$f DO&@륮: 9,+OtSoV,_ݬ_7Y "X r9$,ͰM4_LI9@^iIQ.Uzh+h $j1=)bOpYr 1̼: {\g}&m[vLRcqJqE!ʨfU-ЮL5uIwzxɦтڢEX 5MT{XpJ1sglogA{WNԚ×`, (^8L .4C[+d^4Je4X} %XsO50HN[jAM6#qRLˍ1s,un%$qrF @)*Cl(v/b6m\k(oM;6sӥq`5 ':D)_)%r _79Yvp}\[[2.Zw_$ͬѬ7 ҇zz`R۫7dY8DC]R1Y5"})"bi8 #3Vi_)[iŖ"lV.Km&ó.tp-.׶G-% ЎCEuŬP5Vo uRQ~O Z?ѤKR[gFjwivr_.eEhN>T*)o!Ȁ;f(*,`:ef+3;M|F4=`H8_Z6,/Xr5S),R_KJy)S2vM*U*`u.GtH݆ *1 =Ҷ12@󪶸8[plk!嵭Lӕf.-jFX=R(3%y8Ϻtu:~Jv}`ֈ_Us+7JZG֧;x@kq#SzsdW}T!5FIXcXjGL lEjfW5J*uZ`QoCV> uÛ~*J]עe)q ȥ1{% AKм;4,NTJ I<"1쑤O`o$}H&jB$U2(zTYq܌.E~We&>+3;|WaK+8j7YewtX'U}5NNw~^a  Z K.-o V#j^pOjdš&꯶IvfW j8d\յԞި:r_}VL2ॵڣO8ë.C"~QJV&]jCC66 t9r *$B!(V'zvSC8J.,iqتd4fɩf\ ~m0챴tIz4J'a|\#IR s:ٌ"58Ҡ2XQQˎY=}Yt%Ƙˆܠ<<[(DH4K.QGAض](k29-U2ۜ\K<.R['u.sSt5"Yv 6N}+95 ФInuOW6IXs\#$6j< )aD'>ň 9juX}InhY9Arrj<~;Z 0Ƽ܄~cHW4lZ{VJ~:58onfUU5艏^[W[n@*-wa'F&rq> bVIOsh 0m߾JꡯNI1p/yչγSUn߁XS%:jtg|^tjͦzz J_Gq B얩_]=K'5Ő}yi*epܤtq=ձ[R8x H ?a;m >#5m^p 0)5JUdUg\NZqDq o鸩fT5lF {p)FM})& t`@կ&X'm3jUw3H1N-OAHh`,L!AX_}ryokf?h]EyJ!,H;spb%y,NdY8kHHdB Tk6m;\_˼nYݿz6)!t'wEe-2M6#%u:ѯ}*E F"f(ٴwtĒ:kE#7 MQ8% h z]*TEр1M">4e3`9漬x^6Hf t3ў{ZiOz.>"!?P0T58cY gi `҉_nKABc' 夔t"†=[ppS:aVtnt:Q66[veh%9}B:^bj =`*cVpKp5JSVTٞGDîqP7<$ZyR2MQR+liHF] B ُKj_N6R5O6}cPQckzNSmwʄ('Uj\{nna)zQrnEVM1?<{ W~Zٯw3PdI1l` mKY[&ELפ-:R *fIBM;[ze5XEC G >XY|C3No-G٬E)cAOSD`\ bpyrwmVlrC̍ p Eb )lN$b#ޘ ȴsNԏ]dwW,; V.#ngէl_'eiIs8 D}T &KꙐ7!5羢&BR,J|ٯ׆k^M|4j7U,XMGK?9[3F0EJ8T3+u/*jou*;iFS<&0֒l3­KچF8= RW߭a)!rE}F|0WܟeOޟXɫ X %ȧ2?-񦵆:nLu!|,g1K?Doypc o#~i9 u+p#/i` b{RkuQB j9C&7?V^O7V. p|ՓKۓdGk -ʡv"fHloOl4Ym[8}⯄HiǛ&$j80RpB|E[+juH$:_J!@Zux܍[Bɒrq_B~Aou|ʳvGp7 u w)ɪn6`ȺAƇC:ew~ qwڤ՚IhG847"f\;:k^I+g99;,)%Pם4լA {c}֟VOEL3`VIJ&3]ʓNaڍEWC"A3*:H|$qHҤ;)v;+: )}ĤZ@Pr0 ؑz]*;p`)𢘋t@: X1-à5 U3 "JXGZPGHrA_eCF&pUOn'RǎSu.>|au E(R) sDҋ~Q&!<6` ix g2? sʳL'g>&o8Mj%l,1WH,ako:G/DN $2tJ@"ѼXZΪƉ^jU+n(?A$@P@qzz ?!R: h38KAy.$?%Ho۴䫻)P,5±\jQ)vvp)r}IuEsԣ7NmB*N lqBUoߢ+]4!u3ǪƽIVd6:u51>6iTp#f5! M''vJs7%;rÎp%4iffkЃ@%n1<Ó$Σ N$ {nO]'~$74( ݶE9rSnZώ78ZPGNdA w!'|8xPt:ml>RE;ºyj͎p>{G܋6ڲst-^Zo~7wLŢ&Y_B\Ƅ="R~]{lvH< MV.}_1՗Oz4\Kmwc+,7W7:L"9@R9`zM]7M{yY8w2i9^FaxkQ.|,%uih1% jIč<䃶 Ŭ{Ӑ+k-c]b dcɸfbM>X>n,Tfd$HuHA~]Z)ȵ`(ζ9EPyzD\%]prGAuƟ޾ٕ3Rk4&-ia5&%\l2R)0pgl/=~XпƸo"3&JZHU1;ŗTu! m1+-К&e=Sz 2Ey}7zr qdGAWɑ8Uvfbpt4rPWdxrJ>JU81…sc*-S^3Fd#R M%c}fBi.R7RTzq6V>1MbGtVf,j5p^@ow&UKhBvGQ^ק: jp's4 t&po;.dISúCn(hG[=YϿ,eY<.&6Bz*JNJHz:F-Dv2=Ev3\b|\'g(;9RJ0 El+ˋ,[r%~\,TWBll7RD4([BjNb>f%"J#VD@+2ji%g`(h!%2frݾsogQ; Aq)~b%; )}Ԡ&5ܠ, _ih:Znp$Z1).TF8{9'iyu x" ܟ(G9x<#ULl$=n*5v~+:ԌH"_[V( ._9jYy OJ҉"!1|S^W Q`S :g -h{-mעHOY~rmY^4!vglw5OBbk#$X)w)j׎f m~<ם&#( 'aN԰#њ9v NVr@@h^#yZqDv}PQ({suʊzDi1T{7{j7ܔx]_2`sS_\K ab`p ng 3oRf RnV @$t֙+(K٧3í[^MA1$6$M#Yjj?{0vv*M$*= CX`-tPFJFMht?hU9D9x:n4驞\]y`nX p3)}ZQݵRO(ߒt$„ xƢkv9v$k7pGOa%b:ܵ(3Brf BQBndmZ6p }SV9T ;8(ZIqnHUa߱T!hOGQO!(ApAЯx0#}*1h{ʦ.trMQ-Y>7OB vbD /CpHy'F^~gM,:>J\M2 #'LCFnYS^^\y HZcN6dzGMR6|;D`?͔)ApsBJQ2~ "U!k.$9?N67$aoll )+cT" ѡg 'MY!.V3rvokSNEq0zzvFhI_Q˚`r,^Wҏ41єzNZS`X].\<ޥAmqh4 9WwOBĮHAutu]w<틝p_[u@*R` iEw)# dU~16~88w/j-~u{Q(BB2 HҬ ^;ac.$7.$xJ^(JFخhߦ+NMu[_(uơTBA'иTESBk`R$O/1Xi]L!7!5 e& \]F9º)1iRivGA.kA?cDx8a%goi]Th,Yc'"ж:Ae=)Dca(Z\~tU2n6h,)!@F,˿. F$ckz|mD>xg(,@QPΔ,} *rŠa}p?ƾK gh֞x|^ƣ|s#UC ƍ%;xHANf~z/?CjwKV-dA&ao@|M"h)GɎ}ln)$^]г#롴cEuK_ơI&ǰRhVw<1u XdE^I .;R}LL?QæUgt^9DS!AuxHGx:fvAMZuwf#_1UsJ8iP8Ep_yZVYBgB.tU*Ғ5{|;Uo5S(d8 u`SY٤LR]V4u[2UFg/k|fI$ )Ã/o8V8咜#OȍX-K|pH'Sd] e~Y16׍p72)pf^<zE6Fiy;eB ߪ9$Yn3\Ou|ӭQ>}u-͊} ƸC;R4h~Ik"|g,i5dK/uœcK){ݬi]/!թ_]lwX{ñ2G;j Gu5¯fOG6͙ i_%\h's &R{ܤ <-4ڴ|E^ cl':|Z8]k*KCgsIST=Œrj=%oI/͆nOiaNh͐Mhk}2t)xB^ԋ~|Jfbq5y | S΁ئם ${r,Xl9dٓI8;Đc((E}]H֛=6wq"Y>p[iٷ]:lyRFE6ƲF˰ڮ4%TW H|xHp 5 Tm6Uݨ𷀆 sjJI_ow\. Q*DY)3ťC @raaA di]g9Sc ҍkP8{YK .,FFiiP:OUV!Б=.p:zMHs/'~ovL2x?+a)ZmvANIn! QDS0@tn&t,1ȖS๰.~8CS1*xm<1ӽeG~3>Y}:*ܥ]6nʱ]u춹L Gı^xXˬ`#f=p`Q_ӣk8pJ}.n !CXIYNJZ> ,=4H:~x7 g.[j72awc4DmKSSd١kAYCJ j5GLȣH ~ vyq.OW\n 5 =FL{/]4?+Bi(}<+L^ ؈4k., ,ZGKes𴮆ְ0̬;k/i\'2 gÊc/_U,r?cer W5U+Dž y8?W*Ҵ/4XbZs5ӵl_-Y>M*{`$\g=Z/˫jx#=~`s[] q8wpHiHW}G]}Cfj^m_M2'EFEO@Td[z^+#,Omd=o hit@8 N P L_&_Ff3 1wG3ddhIfzalzYN w?;'MK&EΡjVjEz$[O`RKCO?>l9d}h-R*ɲUoIAGӹ^q_[Kka+.n,MXHdHgmRr> 04]tHEC!@dA#ъޕ:Y~_04h7>XBX`{˖᠈d*H"G.`d(2.yLĿ]Kavd}U@hA0;jtf_vKw)?^lṯ8 "O'}tArZ &Ju7K݅ "@d{-w=UhpդuPHJ:0]dGm{JF$FfYmFΧ[0hB e]>NcCLXk:$*Rհcp-ӠOB u(l|p_p=Ġo8GqDnkS*u4%d.Rcl2m=#7xD Ș'>owpH/G#α( [rԊor뛡]5/^ͯNbV-+iÉ|ppb ?%{ Ybym`X4rᆪEz P`2S&MO}8Nq kZ٥'d}Z)EhȎca Zm:cحưEn@#lDhG<4V$teeB7]itp"̢t@j)!L;۟ܐt Q=Ra >o s=71"z.XEvgWnRw?;ʰadN66$C H=XJBV8L T 1IQ9Lr-YbNNao+&H4tn6vzP*SZ9k` aHL$.Ұ%s0mg_K^tWGlpH=좺YU6fi-%9,.6<M9P]_5:NP;;u aٻ0Yr$_QS4Q٭AtNѶ,Ɍ^ɲVN yarsu $. ##\ijE+q5HT׌tPBJ?@d$^du5_NO"#DҖ.yF}(s~9>X{oPK*۞?uN =(kHJ)0 )kIuDXB+WXgiWxc 'h{4(LήVc NJc.8_feVo\>5͖Nn<~2dG vϊ tqĽ4 ݞU(Loc>G#Ӝ4&m(3S5zEfK-gT7TC#մ갥"Ujl9YzώKQ#V; m>=)7(-EE(Nǘk~˫ 7H#&p07eyL:`3/᩹uqkg$㹦V 2sN' YZAs~##BVn=D&xt@Ɍj iV5i n\;zrz78i2.Y(q.:iiQ%Sܚ+ByA_ ]5%uL2sie$H3 '{k%##J|*3u鴦ڽY-2:tF<:]5B>>'C5/rͷvxy sv zntߒvz 62IN??5ﯤ)982!lJ fR Z1cE5r]ի6{lQ<8RMLsRwAB0'(4ȯADC\4ۡG w5yZEk:V^F*]Zߜ^]۴cC F,g M}YAg@-} H u{ .mϖ@ */OrRG>3&!0cс[~5a 8@PG fS :*>~w)Nm~eՉ6X?cm~lԣ94;՛L5 khEҳ# [M#{J6`i-}5-YfN8&oBPuDJy^Rي̭#/9 (/گ V$,??B9 +H*\-r2nu|<ٯC7Fs9<23Ҵ}axXsQp/Yن7UEz6S~R[ղ?~"]! ‡ooU]>a=JMuNdZŢ5-hDі}FaƉ+pzxFZ\/ ; -^ިW:9+vs oD2C#^iV0}蓾rJORg۞ ޮF.қqu-[P8| =x{ $:*#Bf 4)c liOJ)VJuߣ1-auBC [EC?96+ * e ivCG?hhYPUzI k\NV˰ȵ_儚,O8@;Big#E(d >j|+ON fϒ }uJKFS-҅0 蚉VIT[Ҧ>veD\^̥즅~굛"` 5uC̻%*CeՆ&}@.I`y=ޙM/6k>;VNw7y`f=av8f8iw;Iaȇ+z17Pn4]Rک^8urT'|Kbq)96 %?Of:p=ܻ+OR=\+,Z©tV[&k\uPק mYR{wCwJI+Ҹ͍\&f!<\ݠ6`{:{v[!f&ZМO:cECg> CUCړP Sx2 ^g|.. T4Z(nOn^f%C3ܳ'L:-6כԣW*f[HsNʒ,P-z]z26 <-(gy\C`#ö^?ÎIk׎lUGW*d}F*Z_~4hU<힆}$E?>q~گq +.)NoYFoV̪hMELvMB`Sf!S8j)]BR+TIYZzmD!#[ hWuIYle+nL(3$:A⮽nB&ge|x[$6M)fYd}tIwpEF)-Vp YBC%K ׫W$U@ZN鈤]J)`s*p`[Ұ=T@̦ݤ׮ܗ=鍻zaT`7iLUw#&xfCx= Aꩽq-rP*F@p]Zw"{T~gX@͏IBs`^pљZ pM$E݄=X{kEK UkK#{>$}wdw뤄%8wxʡpHN.dC*3)k5+y d^=2Muu.3B ;dwx6$^riB$" VlLUǓI7DBRCG+~Y/L[Eq\zp*ta-Z2Te*VjV.)N&x?~rVoz!tPAxHEDKΠf ֓wd9b1`o6125~Z4N!ad5*g~1xlJ=)bX4| 4ՆBM.3 )urDG5I2it8YtE ^ɥ^g-wHm-㠚WIح+~q3ꤝ=@'\Gyᤲ|>ܘfKsY_">)>ځbD=E}/c_o rjL? "$oů}Kec[: AWwO \!x":Q)ZYx:E\q]y)~^cHf)A,,kl\9j~_}v_X\_ܸg6[YpZFNO|y1L([ 4u!`z;#"Rפax`YR]A7 +'E󬓂D.G }<?RP[G5ǡvpwgō`+b[\u!n IZ_Dޏ?jF(.!nǞ `]$dP S 4: ./Zqr,2 "I&Pә9eѳ?;:xspgHmqRJB`d*vg0½^_] 9Ww2+ADJ @mU d  ~s-ãq9/YT{MEjIah825QǓO޻|Ξ%, h[MsBUԣ\WsQERo'".q~)g57{T؂ GF!bƧ%am}'GX.4+TαF7HFW,pCcOV9햱#ܕFyI֚fHt"p:lfu_Ө})Y_{RZ!yEv|9PJ.t&T3 {⬓ڐ:&EطWK;̆p uaZ "ݒ.&'2'٩ -YOVt-b_¨UqɢsHʁ5[f 9>RtB Q1y0*,(GtQ 똃_#H w:h[$In«cf𫳪Zr=l3m#u#eژӬo 5&&< wMp}7:K&"J-VswG۬Kc6M(^&[U8thuHD7uUJ3wNXbWSve250g)>l)t#1K8Du26\{ji;!Dfh J-oR[@\!;xe-4AtoWiff?%wBNPvW=M(CdN_Wf؎ nIzj'6G.HQ%ܜkUie?r?DtlTiiT ZkIř+iGAT$I\v{gOqE}$y=l&#\OJ_׻+֮w|+U偩?6`4W~(!QHVJQX,QoDڋgIaa}PP"u:5ĺ%Ȯp.PM[R6 3+ nx^H& aXr4]ȶTĬÓ럤kC]_gNV"Ӗ΍,:hw:iH_DF@"hoÏ_g<+4=s1c3ϥ;j?,g\0^ fx 85=*Pp1w0lWfm`f4v)oKiɂĖ6Hit>N |2p iEFY4Bh*}wU( A7s2x\!V~`)3pJ-o` 꺁1#)קEonT TW=QۚϊG)k8өlN{' LhHcj|’k 1#K~|i-EuGECeD?,* UwO!. V2d($yK?MxMHtӆcKL⌏31(L;~)ЃqVȮ^̮s4{f[s>yR≠ϻÉ\#Vt"v!xI ۢYЊSbuE%J] : CkwrbwP۶ gUɡr.j:OG(Hy[y3#PM×z7ŧ #6F4="Ra=ڈ17 .+|Dcl0Z%}&=!FucZ&G$YK `ݛ*XfZ#!W$9;]UN$6'33NXYXe $}{XNvZ"2*x&; o Fz)+HDөCciY$m{!+pi4$0mXAC3}:'wjbNqv*NK;OXb,u|$ ӍnawͣGK>OOЎw 6VҔ5MR!Xl7f̐XOm=,QR] I"S $zWn0'Ŭ6 o %-fK eVZL4WJOYru} Sy)f)V S\&. H+dʖ$ VP䕏qv] 'j)ɷZ>:Ĕz?U J`@|"̊X.|6Nc Pkl ^~)$"qϢ5TJ:C 8 {h_M+Ճi l)rvֹ)Vv-;iڰfK NlI:&Ʉ~nijI)Dm=OIwaxaJ_u:gp863K \@wj#2 oV3 mŅjJ VM/ͦ_>h]&[o@vi/z[: ?o)qϵvD , H|ZgE*{@qB8(2%;OI_C)"R_j¨v]WD~ HRs<)#nu= Ʊ2X@2fDh~tbd!@f ?hVX%y{x٫]:bC@+("K>c-IQPaQ9`6goцޙCIQ9{4p8Ddų͑B7Pa,IQ>@҈Fm!P\,9tY+`,nZ>|F-j4r{!"dءOʪ-8}8%CS[R(^1Ӡ3tYp=  G:1L e9?C#atYgT^+&>B3^a4ȴE8WZLnk I+XG!q1Cg:yL뭾r G@y peJiK'\nQk4nt6$xB =S[$S]hW8A SG F y&fȷ8ˬy68'܁!fOAgJW[`}#aC=Wyg0.+r2OM Dh/ZjOlŪ-X+Onuf׭s'+7mMGn^٠d?y>"|^*MK.AiR61WA`ʪ]:)ڮ֒XUioMdbNGȶBxL-E.rU,{gdDsK*m}3񕱯l~EFF)v%E8_ʸtΥDQ/Fv[mSRBď$JZ$#@~R7''|ioխĚ6ԉ}.{b@=83MpS3zvR-60z~nt2?9)Hia̰d/1dvW4VJ|dVXJi|U:YQ+tuH}YO v%#,u8p uMvFfYwnF>c˦O1Lѓђx; 3Ekp7b~А9Ǔ` sN.ƍgZ >s`+{[KOӱZ2@74/fvx0Qt,ݷ P}ʰ'mWs7Mɤ%{Dٱ&fJa(+ wOod2vۥrR9 *5r=bm-f=$fIlw<ǫNu 5E>s=ٶb 0p_[jIף gj^lmFGiܝ2!x3R»nKꃄTMIP5fG SNnkj:HS?ᅦȇ};5%xX-Ǟc!Ȏ*irZώ m4Hu}r@ ? =R bE֣n쩍2.|H.H˼-%W.1"pSMȋjד[?Kh'w5V]]V2t|Ia_~޾ WH[wrլL W.X[6xo@|o%D[@&Å %[4DzV%>ϟe~3TT>'=^cOg!muWy>GKH5j=)M)f߳8c]1Z>kFn͆ȜMף_Wɰ2gq)vE]7Fd4;I$G.]EMǷ5!KCNzxB ( o|'L?^)iUIo6tAhM*zkzrI;)O xE"=umP%-k.vVoɂ 5Wתc]@&9 UxtapvH͋n:ߗOd{>+`@&P0d[6c/}@v~f^GCj<~GRPڰdRylvZO{LJ!Wr@$hWΐ\ZdWA(A| 髖I JŎC)^ 겟I-5&bof/ _<ٿ)0<*c,:q}ubP|>ԁ#{Ǫyl$&up6Gg`oQa.MElHRjCf_'sULyJ\@e$v`b+hfLקSǘܠn(& nӮ3 SEQ|V_/4 "ÈT:9ѵE8K(;BQưvGx|đxTmу)҈Q$5+ ²4!0,ܪ XVy!' 19s9;O4=~ƐXqr!Y^;8͜A9cm>dU /JMsiɏQMvr;E_O }Õ$la_8.I>MeVfKᢟ L%ԙTr Mv]CoM!CM*q?zYN)㐹3LLgIN}zW.&P>pvwǪBp3EvhU?R$:o [XfI2kI?bL i&q>]JFg< MQ[X@ 9~lrAoۢ"rgI$F5/rSʓ=VA "t=A0Z[Cށf,, V .Fj6Zcλ:]w-w?Nnr n9O81H}56 4H|%x"Tb7{vvW]\N8 rM깏EӘLRs@p6<+IV-oC׋jX%"#wӀz"F^J3%bq7{_k-I1#ࢸ$-eq?[eQ$NI(f`;bIЇ'RdP E 6e//]+En$eIF=cejj(/V%(ܵ}x.bqNJ%} q0թ#?/SLC)sl;=}j|u7$I^_\uk_]̿W|mDlY!b` $Y+zOʾǣQ1i*uzH3]:/;a}A ȼ*iB`z ,4+n}={*h 7ꥤK2-}wC 1KiG.YZ 4z` HfƤ(_-;Tfce t\dZ4}|4xuM&ho p3Qi_ @zQN_o4H RM(j31U}4)իOz`tլo)p + :GXPPwWπSdJ Nbn![}'ڨ!WDɎvU- cIzFE~󼻙H@'TQˀ^83}YS0}e_hd?XRr=g$(fpKG5-Ի0؇d9ѨEz]ߴ)u;} L҅ 2nSڍN= K^db6 MG`w )(ѼυփI$>m{ԑ5&YM35o;Uc2: d2HUT&CUו 'HP{aKbs2hmKKk Uo(~;OH{ҫ((㗁C?YbKA8?/TipyDuNs{ 1J"QOxn$ Q֥OŢK,S蟒^lb-DU,$!fj1TZj+u D%܀k3HW7{ v*ס$g=(ïAZQQ)=0h8qp'x\k!gl53wT?[ֱm:s#'й`~]:j@%D \-t)wMɠ2OvjTq-C b dF?7·/,{|u޾Dua6rŢ{x鿼mN4;NZ{8-h}cCg*?wGOlN'OT]\zJ!iNjèWA&Hb;p}E?ϟߛտ/F}1;7`Ub2BVf72'd=L Lfķ  JSJ2IMD4)P)E\/E3iG`>qu7C15|܈33OWC&A#k3g7EjP{$$S7\{DX֍p~E"PV xK *?zR7[<滓HgA=i&uW滕vԕ}|` :}WBD L~/"+F"PY:=Q< boVDVt!Z>S~qM&w֣Jzet*Tv(wťЅ@g:>w4jŮszy} ľ_"[Dpc0ޅlyI?N!0X)Ajqw@ɞ$kp>k!]6= >xĨ|aWʾoJ4#W+d[_=H~gߧH>+'d4$dnxWLI_ ʗq[Ԡ309?RCh$rwpEOGsiQ .G3}1) 7NgQQ4_or9҇ ի4 ԳyЭRdNjo'CI_gi!@%nmo&t$Q6Jd87$Xӡ%NH0: IsMJɎuKI]`\$C|vHTvc K z!}F>mhudh; r<qj$^_w/:ʡHm[c^/C&g=t&bS8L}Eu[c8T],(e@׆ozM+S441~ #s P!x\ńwjӨsyƓN=rĨ U2sDw,Yk -+Swt;Q -zCUJ~2dEAg&w?7߭@\bpI*Ѣ W1"0TZ>{SNqQYta=WJ$ J&oRA,3=csqcc5}##/*;YqK-UG\P|Ar 󐊨M__S C5"l]Nu[j8pDYoTQUI x냉~̉ pS)2^t%51ri/ ^MMUA/܅'PDx7YcyN<+L/I*~RnFjRz!8g.K_dBYC>@jy-THȬxI0 ?Åؔ +х~oo''5?_x?tFCm_G\8 8S[a N:jTy0 |,w| J%Be /UH@雹