summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python/failed-syscalls-by-pid.py
blob: cafeff3d74dbdf48e86822070db580fb5dfce928 (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
# failed system call counts, by pid
# (c) 2010, Tom Zanussi <tzanussi@gmail.com>
# Licensed under the terms of the GNU GPL License version 2
#
# Displays system-wide failed system call totals, broken down by pid.
# If a [comm] arg is specified, only syscalls called by [comm] are displayed.

import os
import sys

sys.path.append(os.environ['PERF_EXEC_PATH'] + \
	'/scripts/python/Perf-Trace-Util/lib/Perf/Trace')

from perf_trace_context import *
from Core import *
from Util import *

usage = "perf script -s syscall-counts-by-pid.py [comm|pid]\n";

for_comm = None
for_pid = None

if len(sys.argv) > 2:
	sys.exit(usage)

if len(sys.argv) > 1:
	try:
		for_pid = int(sys.argv[1])
	except:
		for_comm = sys.argv[1]

syscalls = autodict()

def trace_begin():
	print "Press control+C to stop and show the summary"

def trace_end():
	print_error_totals()

def raw_syscalls__sys_exit(event_name, context, common_cpu,
	common_secs, common_nsecs, common_pid, common_comm,
	common_callchain, id, ret):
	if (for_comm and common_comm != for_comm) or \
	   (for_pid  and common_pid  != for_pid ):
		return

	if ret < 0:
		try:
			syscalls[common_comm][common_pid][id][ret] += 1
		except TypeError:
			syscalls[common_comm][common_pid][id][ret] = 1

def syscalls__sys_exit(event_name, context, common_cpu,
	common_secs, common_nsecs, common_pid, common_comm,
	id, ret):
	raw_syscalls__sys_exit(**locals())

def print_error_totals():
    if for_comm is not None:
	    print "\nsyscall errors for %s:\n\n" % (for_comm),
    else:
	    print "\nsyscall errors:\n\n",

    print "%-30s  %10s\n" % ("comm [pid]", "count"),
    print "%-30s  %10s\n" % ("------------------------------", \
                                 "----------"),

    comm_keys = syscalls.keys()
    for comm in comm_keys:
	    pid_keys = syscalls[comm].keys()
	    for pid in pid_keys:
		    print "\n%s [%d]\n" % (comm, pid),
		    id_keys = syscalls[comm][pid].keys()
		    for id in id_keys:
			    print "  syscall: %-16s\n" % syscall_name(id),
			    ret_keys = syscalls[comm][pid][id].keys()
			    for ret, val in sorted(syscalls[comm][pid][id].iteritems(), key = lambda(k, v): (v, k),  reverse = True):
				    print "    err = %-20s  %10d\n" % (strerror(ret), val),
KRʱc8液q7[h g)(i ݙgeN{nsnE#Fvu~Vv-<7(֜I[*"~r4u !tx + )IB3) <JvK4Tӫ}rJ)Pڲ/:-ť٩-S'(TWSЀcɡwGWrqjwQAj4j U*-*UBƥWcHBQԌxq b]qY'26=¶yֽjO,Ќ Q %9We[qλFܨX U+,Ec kIe׭s~MB&7,Rf&8RLTu Gjhw9^2垀8ݨn{^NcYX:ͪ]<˹|оiWV @wP$Ř煺Ykq?ڽBS:!\<i_hʨcEUh%Rt%^,ݻFDמkDŽchLe&!r.:\.:|=6-WκAȗ+ր C!W^;`f['MjW 8{tx^Y%×}/%1jSCܞ[?)O٧>]PVEV15/ ƦXC)wK[osዬDhbtqXCe}bz9l=lHa[/ ;+-WJJ<M3r*:.MfZV~zKgHX9"Y|PU:Jq~k)aD-r+En:ȴz#.gGͫ-ꪺCPR<:g>xcS[ݫZ0 Xctrt8w셼htv8[_DaB:tNCLppj6@cj\^TJElAyYBV@̫,riJu͊8e3ZkXKk6 c -`;_À ?5tQҸ{N^A$|qL93!*j" $n5* w KI)1\Χ%_Oi3_'؛5Bۯl`lD,hn\pP [NzԫLև|ꎩ~z]}X_H -o[=psA/$ث{`R "_I@M7r,>4=XUG/p[)` TX)-a㢥9o.J<_U*-/pMbL ^FldFv@iⵝ~Nҫ'aep唁 %WTy:cO%e%NsyW]^{[t+it:z[|SeBk#UΚTEDjͯZ:Z|rW=2g#{0LaXT ㊾oe63Vƥ~tlaw0]_o o'( Tƣ-^㺌N"db(!CXB2e4Ck~f$VbzbS#0_ Zh >2*2&`i <@ JN䠥8ÔV IB ()"zABHyxGeڝ~>syͶJK_Xږu-T 2|_c5Psu7Ҿ|=W޽qϥ8s][Eq3ox4kqV%.n~4[9@B_^E ]]xAֲ)98= ~*K:몬ezHFs}G>To?*uֿ$8NU57k,R;>tKa 6Z|fԶVR@~mU6㐯?Dܸbg{󺩿>E錤ϗc@::׈{ײ}2¸=ϤGe-V_ p[Yy/4g1bgZ>cpeNFݟfj4JsqСt嫻1t SW]Jl&*R^e4V6G 2x/},M|` K.oKS.fX`.sէGNÿm9U)W%v6fXjW+ g.ϰj;}[mOOIǜ׭^=.c[T^ly=g>%WPFP)We@AR3rb R|^EP;jjQ[{0 5mF{߮_߷Dd!30b7jbi^m~*oP1h~lžu<+.m—`ki8=ڽ&%뮪ׄz+pi@ea zpu+w®9VZVCp<ߊb6iOute:vC 0#|k: 7n|m\"ޚK/ M)m* ˝mV/Ƀ+J~hxsqp]wx@nUi*\NgPb_K T1P+Ҋ-c‹[aeܞ~vM~6s- ¡=p*υTdiuT|qq22exyECZ?`  --]q_׳g/|>Y:QQ2X2 #*}Ra7ivDŽn'SB?bAڰ*2`j|3s9Mt$3o,I@Rx8yWb |@CFx5[}ϕƄdZAA B Vڪm '_?I r28ۯ2Wr\Hdgkl {!kભHBnݻkZo}bj'ggP~gev~l)H]/o6qRGWœ-ᒋ6FuD_ _;eT)R0Fb~fBV+hZ"m;%%#v˫ { PX|9EU*Pp\#l ޢQ d?s厙]aX}TN_f e|!\rߌJd_C>J3"מ1hXzBaGE&]=4:UN$fϡ$ʅ{ͨ?>~j_:+eR^AC㥦Z[} -[llhtR}XJ!o|pAMU*]}7kZ/71vwOeպQH""u#T[>#5Y^Nych^ƫ9?_#]o8̥:Z)2}zS]ƗUƻ1k8cUڽ W[+m6FUV'nιjМR\Ո,߳8Np4Nr͂Y6@f *a{h+;mރe*2 83o~0#I2ӧmt v)/;|HE A"Anx2r8̸H^j6tx&=lQ2 jy A!PݠY::\l2$W=XdI! O%F_-$1DHd(PG5G`LM(4q;"!'A(+WFv]Uh"ROnE3P0jX =~V}'T"(J>C-M&vތ>^x'2hD#Df  G7ؠ "< KgpH@ L;PBL;'ƈD/Ayt6*iaz #aM"?w8(-'6LU9,fG_,ߣ.AO#EJkHhd0\ppJbL݈ܯ-RYRCйPDb R[4gP!..f KmC4HBS?HoHLAWkSCJnl1Eɠ @`t4D" y \) 4-z2wNR~c)FMdQX9'GG}IVO$;9fnanޘxԍjZE5#6\}`k+Rr6׶,VX'ω?5`9||xZQVk +P EG|&DF[俯DTTdvaQL#nЙrlz=%F@8瓆#Ql!v4L͍bUA}-8Q_9C&G25sq E뜘G`hyZ0rޯ2GyG-hj2KPj8لKZ? b*-_yJU+zAgX]`Bq Kf).! Co->rNIdq^_`?hVN©<(yv+9}.9E1X>+龧Fnߍi.к#8o c`DŽۡ߯`|Q L*)ۊ㨹֊83-clGSٷWZ۵0UxPy\%^UHKFL9⸻t;շ*/ [e6+?L(ѫsTR6HRyԉ>G['¦?:Re*1?K)*rPSu1(M/#&ɤR~. _ȣ|4҄NbU쩳_KrY[ꀩ*^"tMO.hc/Ue(7v4>J3n"&qZfp:ςYAohBź!R 'C.swӪH̟׍PN"jF^a=tu#}bEmx0U[+`z_ꁷI3_`;P?@{Ĥءps/^ lilc@C$_dk30/q9D5E"]0#MxAX: |m?wmsz9.ve叓wz[k@)&Vc<NX:w5A;1jP?9&׺_o>ݣF_Tݷz7JԻ>![8Zg\4ݞZ9ۧBsTiUWۘiy᣿ ;E3KߗDNˬO%wX o\G@`Db ijysR39. Q#kKJ3y\|=Zfr7UIHHh9QQ ZG' |y4,rsxL@A#>0fDst3q.fr]s\t=EЭ1jzHQۧsDbd{nեA02$j$lr=,?f^_olG{ǽ"z"&@jQpu|y}y' 0S:x:TwgKVy|h|S|<'+|1+k 3~KqD  r jj}ps+eXԵ[n(0N997(=>gӟWmmѣJwC^=2rowÿv^;꾜L1SLU-=.ձ_^ՓA^0K{{χpј C,̜\HT#&Mn5<px .̧_IvRwzs)3S8sy{9[=.oUI`#0u;=r_?q{xwUٕ"Nvk96yɢ3[y舿 ͬZr)(BmLӭu\B_AײGJ2R:cU&N+4ߦO- kLEy߲N5c=}{v[EݮW+6]GX f۶͢!.vv=cA)A8+H"OE$bMxMNlKWj6?emJ۳q-nj>^x:Q*5y|ǟ?X`؄ ^mHywZ 'Y3t9?a_\][+vVZZUU]O@䜂D\^l xBzT_R||qcՄ˝<ЃPfS%-p$߸.  Ҡ,SoGrϤnUN|.]|}"~#=8ٖR9$:tΤ DX(,رJb'T~!03@b@.!," C6&:-lր&fAYA4:UDleǨ `Z^rѐ. , I"D(aQ}: >ֺ<;-PkUbؕeUKWa7n7ϸdf׍Ͱ!]3}~x[fR+}q $+Hԭr)\U"e[u@~wn9j%}`O!-M~5N ׇ0{UXal^\|uQ/bHJ?mTaHW)I5<ͫoYh._@;1H+h+tx/t<-NRӥ9H{ C @>§ ;fU0xrU[K"x{d-brmbנ?yع.[=]/vqnEb0rjR^OX75X#=2o_s>젚AU)nX#8-r~^6@z W?,6R9ߝG?).*𨄠 u=y5  H 6bt[;qп)fxA|ڥtf1 amj< EVkT{6`sJKb0(D{D@ҷQXA,@YXt|5zݺ_uAusW(!: Ć۫Nkc:CF4m0ۯ^PA5@WZNs' >: irޞway;rی{Z9!_뫞 1nC~qFE|-@I;5:,ؽtvL<ȣDxArT: 1pw3ä(y#]kr cN;t@<4>]kS{@ڷqSJnq k2_Qʻ[wuT*AP.AnN:nn}]m둞,QVY/6 ]<|cv/+@=G`_m:u.Qb*)ˎm|6-6+'UCH _@7>^(0eQw焬C|sO?LQicBSqzms(I齈}{L im;X@aײԄ 6-9详<-Ʈ:C V=>o<`ӡ]_|bIV+c @dB[ezN\s&7޺u&ؖr+\^wԟdlLP"}.We9Xͬ9)C;boS!^*j̪P-2.AΩ0w60RGpBI9]6T09{wr"ivx*D"O'n>|<[ mYyz6< #kŤ*ENs(!E> Jba01 ;m`^p-:wAֵ]~nLHPOC|+VG&-Ytje-?XuFsj@a$:^+T^-͜;FU:<˿|],08?]T)WNvsLZPn~WȶVVyվ?M\ B$ClQ)Y**ǵۼ2<n`!p$諫$ZjTl9 *'8:%ƪg4_4PH5%Y#X}Z·KEt>BpMPнa3n`W٠Ƶ0Gs8zY$B]vZڰ"FTWo?^n֜_4?O84/N\<]k})AU|zeRI"хw zhXu̯ݗӴQbb)TV v4&>e+S8":>J=ƫhNTXb߯da v?^QLrbOQUD#upGO0@},{!c_eHQ DqA{ V/Ekӊ<(. ;zoWXC~/W\:k6;"^":>aK&I)ZbKא(((>Akǵ7Mzsʮmx͵5Wy/ty6[e5 n6vs}"Lj_ƾK|\k[[ga(x\>L!ɽ& mrD]|hduxV}rjxXa[G-vJPu1-At۬S,!tAE|@Kb{CD]e0;P9Ǿ:p8ٕ潓Az^ɁKXu3F}X+4ci{e czkzYIej3R 9{0ᶩQc;7GmQŒ1>$lNSb-o8AJ3T! [s<*α*Alj!}WETRf|>FeU@b"EblF~KQ ϫͨi:uYۦv-!{|^m8C83W4 Uc]&CN;Nʍ7PQ0AV(1TTABĪBݷP ly4ץ`_uWxD?@b]ĢNH\o@Zn߯^~^~>˪h]xDz \ה+ڇvPֵ n S.U;sT $JiNz5;`+e9LzVP ~5 E4;ԁ18p6/pvh5QXFIGtF2P]:P3y0 _]$< v|d>V \5{[ z˾PQn ٳ٧pN/Kvų!FE~x <4Vt*p|@Hs]o+MfΌ_uXd i{VHO&~ uA1 :\W0E>מ4T 3{Qc= Bj{Yh^]jQ||4{7 kS_0 eE>`!=k{Qdd9 9ȻP\Q*iq@0_>i5`cIEj' TDH]wG" %MPB`&Br)bWˏNfXu0kٸ;::rAD\{$pGZ(kah\bˈuG|$y~5rVW t狟Q=~}C/2odX=^Lʧ# &Y5b #t"?Ge՗jv&mpޠS[R.FU2iz}$ $ABH'fn?Ofѕ8p Pt2 ,}Qf7/D<Mi{~A~&0caAƈE=:x 3Qlt^xO:P#ts֐%lAK.pd/Tzy^vP&b!! B88sYiƊ&ejjX R=6- |p[[+EsƊYQW䛀yJ{66Սo ~#QpPg0kg_vNJ&ULi|y]ԡQ)ysvNDݺ_]+` 2s5MhW_~A嶃iӉW~\ZPwN죗8"91%y6WeC!X1nE;ƎH2# ^@'*y0WXNJ~m,`nrnFU#T~vӮO%(J"e`f|@)hj#AUPIBZ>i(W5PLcC`^`1 ty7҃~8PnΨ_UK@}P5rֵ", &+8/9}e(qTDr8jh4} ^ףynjj{] y5&7gPIU*$U95ەGn.i 9_~pyn w-Ur8{%JÐPMg:ry!i L\pU] 22ˀ@H ɝ˫9q#r t[I]>8ZE=OS+ Jvz,kB2 7Xhr .䚿} ;RrMG2RF>P^#^n<,w=ñ8*=F5IOS.f?.>vqP&5 t_LVL-! *o R<2cE[c Qx$a*"-REU. ) kQAƂktQ؉7~(~]qMﴐE8h(9~K75T^%UJ;#zo8}igKbxx} 8I/Z*Y9%=VXidq8 O@uv M HHfmZr>:%; \-{?8Sx􄜇).lP;P?IZJ]_%N$p{鶁T)saNxjB9up}HfYG3:*npG#6$7 Ooizg7kV9]dSqRX1| N04ig2sƻt'T+R5Z,D9/ߕ8?W1*wӎDxm  wi,@x ATqlA5XqBzqsH$@IDdeAjHlG';t"OoTΤgyQOIq.trPqM~$b:n"(!݇f p~_[su7,on!Fj6$2 LRz,9twnNSfM8'hM:w 8p^=%p D3CetʒD>s0v3UW-`pk{L#Ӱ4q8y!w7OK$hbJH,+dȱ*3$ t!1qDfu߾DN/18V:3=t 8֣dJվBrjXuӓJ (!Գ:L0*H:B] 8K+Im FHe+(H/RӅӄۼFkLDƣyyԈyv3L2Xܧ?ը)Ctޝ7njl.K!z~xT&50G]i[ƽm߷pcRt~vVcfX"q]"vk!|Hշ9O|^ iK{>:f]/8k|Eyݪ$I,clAHukĘMAm  P}:owU&ݹb l )2{:\n"yik[în0zD~%|Dz5kZB@}\ u0+߶'Ԩ8T.xGU7@ⓑRQqȆ#1 ㄴ6x?x=G>x܃;VS|l=XvG8{l>z pBА)Tp;X'HZ`e$OC4QL*2lޟ  O1 `A'oۡ*KC`FFƸ1Q;YbK_iP\ Vry'w=MY0lyC/, U|3b.z^fy,;Q S[]?XJn[By»?pE&w{{mo F @h+>BNcvR=Ӫ1+ GENc/iZP,06\~4[:%oOw5u|q|_ 'w89j`FDvM!j#[n$;oȚ2@F0-TGE4˸~LoXfʐ?3'S|?FWBu.Bט.͏cV^ͬ,ַYR G =l@@eXc ;U-_pD|Aǧᆏ ӸSe6 5 }_ZPZuOg )SUA,'iO}b眼/@þ/z"\)PQfۘiޚ3xQ ~U$o{CO)X!?4?sm oD6u>nd&6@toJ̐ EAKsP(6tAͶŞ^ o Y ,Ūl"ЈRvWz<9A88Ej`s>5oA{+z#Է  !oB|FGqހYÙ#tzt?S[u)c䮕̋fBAAs`#M/c ʫMg>(ƈGKsz DSOΈFl,r?!F.0Eo1U\횫Ry< *hQ)b,tkywKAΪx+&mK|UJ=Lx#܂009$@" c,]sIJ5v/^Nϣº n0.PVa[W1.yS^\ޑѧcYDUֶۋ¦ƒPdaXqa [ȣ_tnO{ Ujn&FW\gfvA4kd[ng{F3wy0{HB =l1q:"~bk`ƀc Cb 71ۧiuݓEB%^8diC2X}2y݆)O/?N8U &q\8Oy/WüԇiBTyFeֽVG-{qrq)'`t\1_G0V@s࿾ nBy,vo^0{0bs0IÀv ]v`=?dto'pLOo/~1XND:uݔH:)k WId_yP)>yxd>$p+Oy#z]CPxAD/D08s3 6-L9I~?niH#YOCC/6ho,T;=8| B+PK{WΈ#Q E[@Uв!4r?-n7`^՜ 9%*d.[oa79/5Qk#m & j/[F,9845P,"RVb=qRoO[SJUW~gUk"3Ch>L(* %s G|̿Ld G$ku3)Zms!(¦tDž71'6B}.&{mn1K)sFUG5sJ=&WYhj!\K=)inf,}6yqp&QĜao:-驢Lz3Vj널]tBؔb"-+I3]2RXxWtl1ahx32BX0ifK,+V&5Lªj11 Ncf^+7pf ǼxSC|JkMLpvxTp֪$plt3HVe5ٙ1 m;ynڙ14dյLcK,Xcz,v.eb \w#71B2)΀CG= ~hCaCYW:wR $̋C\rxH.pqsn"߼j9 DL*Uw^r`GP;j=΋{C"k* nJMZq/k* [.[TkRlclReZ=q{:xw]cWk >yAYvH T\>()p<չ1^[y4ȋї%{>#р+g~A6 P5Tk@%96 ޣ@J,=Jr-CBs{?%(c{}S%{P^s!3zHjmeDθE`52ʐ!:rO P=$ ^tpPY%&Ҿ ?59G? ,4"%Ukٵc`e+PA"u\OaPrÏʅiz0 4Cn t?Ȑ!7_?Dpҷs+EJe9\!Vw[KoʼnktCV=T*v00|!ݎ h)6SqC%bv4 nɆt^k'aN;^+,Tʔ1H|ZT iU;2hCXATY.Yr]їvb V{5(>9{>rgBq}մLˇP5bVfIJg,kinVы0vQ $͙3!jB]t Ћ,T.$6Cvu s0R \s!HpK4M iaVt>^gG03 ?R+X8?[)@U*jG[_i7<+&ztWDrmsa[+)"lÇFD@JE,)>iѹRS.RZ!"s#c]VjO0Qx)>*U'b}Hu.`S0b*I$G*Tǐ hX?4C4[_=`USk[37#|zHUZ  ]5Rɩs3Kuϩ!6H{ xJv[ `~wfjA|G''j-W 3As7;Dlr>ov+)UT' O7t;|KIb_9sǠ>,8rHyЧ6ds~+Cr/z~oLalm]X,Vj;ƲᎩJO>92\ƓDn=b0Vr`&w"}nUb=WI9DE.P"bDQ7+)z;7J1&o֩\$!Nᆅ68 5-ZC< Sw6ʶT:٦ ͬK120P-}rr]gUW]ABوi,涉w5/.nquV;gG1˓KiJɳml>09P8͈ O[\SQ?}VAJ ܌~#ٞuh+,:z:kJ, F \ۼ 2 he|`7e}ӪC`[ԛ_-e diM m>9,inn0='L$YScUd͡d$V0@KhtI,>\A|bof4Cymw^cr\8L)a7PA| ;2j<נtdm{-ps]˞dr!RFVG5}ݥ2<>Z2H?o`  qR:e)qzQg+I?8 ֦ZwsM[Z~ $ 7np-f '|II9.˿Ň;t4ڇf [B0H@% NPYUPed%cG\@p S=d OC) .f"(h8ɄmUr;^GL-[j = C*YkΧD&B3WmV OV,I,D>5TE1R]\ !uaC}< H 1W^=D=Q-k(s~TEBw[-X@B-P,2 )'8۴>e]E҄UW,MzH$-7 >nqӲ·2mQ ZEٜ`},~\tC/F}Yq%0ŬJk#>IM"ًx6uhs%5/td ƽӯ,ƅU be#ԫSObu k2t>Y~9/_ gȤ1?e fS" LY!R5 a`&p`zێKspГ?|G4Fp"xjݡs&}}8x;fܿ9n f\ PmilPl*AM.$DN aĢ ZyCi xo_ɇ:JOH?[D^ϱpD喱^ٗ;('V_T+`gEqy04,M`'=VrZ՗2[cS^˒5,W*HvJcD\a[v F{kf$4t;l-vY^*зE` DqX=7z?gSxe-v| ^ܞW -rdUoа .Μ݌"=oyl^#%qh?f4ܽ~r:;\;A#_`(N5}dl=}7tfl?mEtx]KEW }mE$q^HB_8uy^Lˇn1WEyjki^hS5^Ϲ=v ;Xrؠ}$}D6|kw'+pjToQADE(V@HcVXGBʝ 4V;f=nvxEas6d) 7(tK_-bs 5Vr^qT>'2@K\ktH2HJ.v~C<A YvԴ0 mJJQ8KⲶijQ$DA9Go6sKƅv?mE;4#쟂h'qPp?5nWώq!iTd^F+',#|eπͶ[x$кKk o6Bhs&6DXms}}heUcJl&C K!6pds,%hYe ~X \l{ë5R gE x\ DD?_=PRd;Fʭ8LJ&8~i8}Srτ(tq.rG/Bm2"6uXaA0{XXڎ(:VCL\Gp\*am[cL):)@A6sC';KUcaٌ^>oő/\zX˓jY$GЮ"qHcRGc cbVBjbYY'pHkgK B-/!=Ng.p 5 ~\9Ac ˲W4k 37J-"M."?{nӺ_csq UE. *._}Z>M"Kk~#f,ZHfY嚍bCY|Une@k^>],ίeje,JM{.X{_^I8ikBUxT8S{~IAH)U-1]Ұl8j2e Qf0EL1 B! U88 .A dyU+?#¸?gB 7vWzj 0@DMK {P](ujaJGt![{]mb[z. 15J#t~޼'ї3=Ayl<4𫑓v.2#Ό*+>HcAhŠIGN+W[ ,irvD)hϝ- ީ s3#+]Bq&eI ^QG܄J,:rShht^;Zq/ujU,#W=!@h!WcQmV0'H]*KJ&rp;*1K=CO(9Y:,m`6Z~蚵uXx.YPk=ф&] B%w@}͡;F--ӡYU泒qX9W{[Sl+u(ɻ0c#HbU HǑB8*'K].HlpUG!-](:%7g)a郒"Q {f#%羔 zKvWA#>E?qD{hP_ H%֢B]lŰeb<b@_Xp}0Re]b->hv_#Wb[X`pRtic^<=Ӟ (<"ٲVbO/l/2өפּCݔJ9xX:|z=[tLvB][aA 9&ٟKgȚylx|qZ>v t o.0rs?Nh2HUNG~;_mPbIxFE*ުJX/&Ha^ =ze(J[E9wr^25J3wq?uhQ^ 8? H$p@W`\דF>rm)^t*V5TyؠY3. ,$wpv4g{jT~ZR}C갭eRzHZ@]i!I%f%<͗SoP!ya< 2%cC.HNOQT%/kqO21QF@UǺд0 .2c D6kN+-IXyY1]o7>XaDE=>UsiY6*g!Ad Ë-zv|XKc:dB)bUpp3-t ɪ ,W~ |q%n7 /*vMo5"\,:8F4liu9j;pgV&uIyKgXNUvD;*'+*~)7?m䆅d0 SW+rVG{ڽWHK~XYj' T7 +o]-SY;=ֹ[@lY$S=EAjӌ ݓUn:Nv ^[׺ϻS2EF.yUo`87J3O bckh`HgK(4~|k.f{V 2(@w q GS`d!SLHIY)6^C7YO=7;umJjoV.c^{|xc\q*0{^ȏƾa,Ac"z_Z)>q|2WZ>Z,G(.eqaKxqoӕ]DDdIJT]=ǖp׵Zͬ V5ډL/ŏ2[#?u7Eϣ0`H f=}jHP3<==z`+Xwqd@ "]=X*v ejp.^(6$8430qX)ÇD?׭;{exI~\G0pl(r|︭L Fn|2洫>TEUy{K)?ȿ*"꼶Ϭ;ϓ\uݍ*(筧Y{nG{xXit8fC4@d˦N<ۦK)>I_Oזo(ЦF+"FV3peR1 Q,*n9忳[#JJ'tD.aBς7 MOOc\r2/Drjt'ı`(!yAX±V1/#~>p6cRIX^YJ2eB1h؈\Q]?RyÄUG,V S>zB:J9byXݲDNL Dk57Fa&ꃪ8C@E (ąs-N&u t2~]??jsjA  u Kk! '2 &C^MB 9гeJatGRxhQAu7~W!h?p4_+?Gh3$HB||5sGd(J]x@Aghzk}[be4W4$$l'XQ$  ba!FXue+ j`m/k*,:zy/ =w1XR5ү\o)£#-s~TFDh؈+>b|]*"*_ҙQEbRⵛ*hr2E!QcT/Osِ^7D`ϧrB W!p tso) jh?5=nt28{.J)m`,~DudxCuwʋ}׶.jW(> @>M6*[{jr' PU3R _ңSFKvZ:-!hvћK<Ɔq'IEG L!c;A'Ȝ($EA`f6Vg]#@ 2ax8 |9H"X"%Os A@n]QC$.9-K ' ^TӍyWdBeu9gS**σNy yRʑ2T n@3sbK6!P}ՉFǣ]uGr=w)i_Vye>$k՟|+g`h=Jp2UW͆WqFq_rcI7;xYr3 y5R ' :lR6\M+`׏-\BP^5[%w;b,] mԢ/Z۬?T]V"FMU^sQ TS1W0CpF7>wl3N:|ᗒgG a:zL"VMFBfȭhF! V]?@j+bg11GQ~HI-CqTP&|^Ul`[y"(="wxGUSCx؉" u_vkN,\HuV 1 .)|?8$lTz]ԩ 'cĦa1˵Wv*_sҎt>/,XS]+VrA㜽WBdJuX͔/+1r4śønvl7{I~:`=("|Z`mէ1 rfNkc`B`bFKQj!*˯!r|T8) G 4)_tD5j-= ń%'Wšh \O VK6]2nV\U6`UUujsB/c"Q~uVoC^kt{j]W5uB-^{]ۧz}gyu#Aȑ[ y{t[9}%B@!Tnei?ߛ68>y ++802ԫWbE [<֛XQ\bg¿@W}oNnaLQo=S~|0B{m}p]I;/F0a@ު>{)Ym|H!Gb}VxMEΏOe,ZpO^#(1+3'c0u g!PaHx!Lүz.ObsΥM+x.4^θǓM}&0r?[Fx9>`4yit׳#=N{d8),@-ْ0vi'd@,%IAR v+{,8+ `CV[+$&+)BJZc@"ȍswDRf仗Eu; A4ͭ^548:x Tk򭒲ny+L[sJS#]n6I5uTlнm&Nx6պy-p&f _G{e74`vp/0O)qȹ_k8<##krx (-󌗣b:fQG 1TBXmc7&Iӫ\l/Ap߅|֜yC\2^c̏WH'#E >/j̟LW\Y ?/D9~I!huZ<ϧ)7CE鈝Ӕ_[sC9#?32{5NH Ч:JusbJ*TgOGX:h8j:u򗭔`$`<k$Wq>QtĪE)w?S5o\u84"$|"lݿ05[:ş0XZ Rc%AY3R+â X /^x Genӵ+(*P m*?\?W._NU8_;6W;|ϥsp _1?LLĉ4{o7O <>Pɠ`k:)]LN^@ҹ~ny}G<Nf'C*h))|a eoZ|| 7cUsn4b߅X[߇qjXqT\~ng~VeV|[Z !^g2"U7|`I¼^$; v;b'P1*V},7aA0.!q8ThA6#ѡF=Bg[ b_*CDvRDR W[f5 u3̻ ְ$}#-4I8H(պzJyZ!Ҫ+!d=Ӥ}a?4(+x+:|ot Αs&xnR]P-M*)S.3c V"HCier 0m{[sKÙ\#C6f=vW57J 3.|Ҙ7eG8t SL35I $ji%SU I{UjHɕ=®rm_(+GjdJ" \>u-]Ǎ>?]Z`xrjhBdNCKɀ V$:|1 W:l3U`G` XcTw%g_bQW:Cz!zBve3TI&>bL+p [T̀+wEsd+&L^@~jlfD_%jD@V@͊xNs]Bc `޶5Z-]sPp%fG{1Q6hC@}p&4Y`p"KQ DhQTCާ5&f -=Em (!LW8vk$U8_#|ݶVWy!w  7xaD~RHv׃"H?F hp,!=\S8RS5*Oj5 <0pY RCf!t(m敭]nf?\gQ5 ֻ. tautdРCˁb 0jY|uUF+\ڪ 7ll]2xkc/ZmSx0d'<<и(叅l#$g?i=Rmk '1`9 WPuю).&%B,]. *E+PBP\( ?G/30U/s2I'6 QKY`KQ$N"Yh8#W9 b 5ߵtQ$cbh 9u2tVHh}ky?C[R:%HtB!`1úőŸRڥGVy ÁrweF5&f{Dw}Cȁ8G:,3[ṗxX"6YY dTR .8!Ôq۾ sRk]<3C5$ED9 2c;k~ 醍w&sfj0r[}q8:qTGGpADaT(KFY-w`ʏ{vq]E@DO9Q _nW{0bzhYً=\v( !^d}}ͬ-]:QP+Yt3'#V u89&*pXVT1|ja0dA?-<`׬8~S$O#V1hkKjHU2շiᯕpD2eFLjr5xrmۀsqǭe߇Wp&)ؚtJYbcܶoOx5p۠Az sG-ްq!jQ4%'  yUު& @4:t@uȄ{|Upft*B!9Wdc3:_]0 ucqQw|!1"3Ō,hV"8S U)ه˜ؑN `;]z? DZ_ŚxN$X \y[V-I婫){s1z޶11 ;bP֤I}gzʦ|Ud+kdԬ<+:zےc^%)xz^5(DGdvVmH;ЩaP 䴇R܉x%b$RD `yBt~-S<.8'mr盁?쫜aPtį)%a9 MJ]Ȃy5/\| ;POG (; 5hq0f !!F_O'آ,i|M'@[Ϳm蘙-%njf>Qzgw~G%qsHpJ2k}@XwU)(4Z03')snS_E6n,0BI M>4qr>s-O/)pt9B;?E ~GT2n5)$Ң+$ф+i|Ja3o Kϔɏ`R qNi#TKE Qzm`0d]EF/i /Ye,,rxۥ]3r25Gz}y&5{3c"kB1 R;^*|+h3aJ)r9&Mwp3tZz Q, n@{Ü5f~Ŗq)L()bP' #5XK S'1FOuU>jhpf(:v jN*>g|^U" ME{NAi|_e" lkOOZ=<\Vf.dhI)¢݀fu>ZֻPpN(<0E6JF#/r\Wly%踓j_Sڱ@ $9s(D|I-ɾm8$`72ZBޥ|nǮWx>u&io| U(ZǵbMJ 8 )C߫!x|_Ǭu[6/@Q~InI}bPEHw4Ilʓ1IMU2&n@uOW+ P!2Gu1*ԁnbRFG/Q/aۧ+J8oaO/ЌyȂU Íᜳ $߷yH"߷׌bp Id"Ʋ ɐ@B&YC|=10&?)9"g֯Aq#d2A2Kim9 (NI0M #o&HjD˝pPdbv4'V:c,",xn0 I٧j\:,z!p=%N/(ZDM.CKGs/5P۷`!tքrY@(B -DAk}+?&s8e6Rp~6W8q u10`Mt~"1J-G4IÉHd1%Hw^&r(o=e n{L~z(y^5y2):N 3{}+6W|.9"5-_Z7t24Z`* l,Iomz5no.LOYٯpœ9e<N26-23m%52)2;-Eқ7Dvlgڄg!޺2{5H*O i} ua#T` wuL^UY,)ѭ; ).|*t.ǔ C$ E4fF;pJ(ʯ]@ԟ?K+:tݧHb3@˺ fpm񵫇^Zg[89 3~H2Y, -xBR}qY{Ię`[KR.ͳߢ,]R"&9SA Ф#9e@W<م [I=1iR0 (5lzH=,+ˋFD_Z` @87 0_~ϡ|{cV]O;R!.ژ>gjhdbd)İzE5{~Q3n(jA@ ,-泝AY8*:LT#Oi$h@fP ~k "0p69 @2|AY _vXAl5ȷ͢\&TZL'>:2PQh .cmUK̮Zx/MzY!O0)9R#|0]sI2<=;L_4Ytq/FF>˭lTy!4i9JO9,"ׇ.f:pUi?69Ip,ˠ'Y,jJY'\ ,u"O6د悔ѷڕ/5#p)*^-zAa-xwpN6eҁ9(@GKUwkF@Ȏ`C\8T)/!E,2x^RLcjσN쟗OoI0U}Z: qSQa !?[.c%UpxQ12ԾI6•{Ì{n ͏>BмqrG[uz_( 412c~5$ȌHO+/p)yOWOBq+y~zG+Zɧ/AĄnsƓu70S9H_Q^twJi#SQkDW$Zσ>揗zJ ?x>Wٯu*KSĈϼۈE~U4qC)cc-?%sAœR >lB>rgPlݮZ+? E ;@}HA.nº@*\d6;5[ǎ'@u̴\<{NuHDTm3@FG}&5=P:ߓYY9? p/-zLXxV2Mlӝ-?P{#7?YH=L ZeH9DZl6>VDd^]p""Tb_7l6;X;ʲoNL)|jN-A_SB5ou} aqjE=*1u1 mO<-b)@&o L$8Bʫg@Xcw,k%{G@ᒻ֪L)DmA$5ˑC\%վ*4gH6Wp榩R7=Hp~oN]]urv0V;}-d91S-w[i}>oӖ[f.G9D p|ZP{Lu Gou+ TaneY.p;E:rST- Hv[dyODv}HQ6=Z4>(} <خI,Av W ; 7Sەf)YAo|ϛ3~}吆x-6~ hgJ0؟ yq6ۓ!)kaP2>#kO $MPq&*o ^c3Fiw@,Gu )i4`ǐ`?N֎{"пIoȿ;Y[WGް& <8XBwr%#NgdWwI);n{M@Ðk?mad17ta*(h첏FM@C*ܲY`9z|#n;f Sc\kYϿS98yy[DWS:^K0>4ֈsA-u 9>.k \; hT{P ~3@Mtz=lgȝp~!r!7.|ߜXMp'{zMqؙ(RCtE4B¡>(a;E58;q @SKC~}# 6 0ŠVԒ kOiYZH~N]Ew9{g!wg4rQC13C;XS~P# sbI|O\VxE0HFdUY9B8%`ćt^srhήZ0O3Gӈ~Z0|fe4|n,r܍pz̄BeqL-P{q0YP޳&gPtbQuf:~*CAW KNr1rKgawceԭƥ\Juk/Ոt@Fuu,L>x^0^| h10Qާ]$)J05Qnw85>'ᄷCq`H`NlO:,o%Jgc^mW.8Uz/f@cǠD<<bvˇB [B:gxCι4=^K#Wy!h7 9AR\0U=`\8>@:LKDž_ cK>OB|qW^z漖Ox]`WK-05(@%w@wT,U:~qmBXMn*oFsnHX$A҂R֧:2Ҏaޛc1wwv(֖ s\TdcThi2; ǜ L?Eqgz}fΟ쵷Lt5xx+fY."7g9ЦO&v\¨b99WiW |55ޫ oA3Ӫ$|3 0N٪yv xYÎ@XF61Qpч05Nb#sTc7^+ j N~txw\2]XMRohH^Ǟ8A"1ā±3J"eo;Q/O0qQFVqg9ա;rvƵ &/fp&J@}q_cbyӼ~3\r7).kLTF&K5E ukJiE#/O >1㨠_Ȇx1 HwD*ƔgSʛ_c]w&rYi^@\cg6XIe7OX[:\% Qv:9>O>2va29',,,2cg -hphfgs>E#QZq@LRޗ{<c ș|mciSũqT[cf,$ 9 ls淖Pa{Jlv[}on 0 o.|霛:o3C}Yg@j?1 :p@qp cXke"r3U~ byYlʁYX(ęӧa3u̬]6#^q#OuKf dN0Hmr{cr<.5:Gϊ;/N\ נIum')<MkKY#lSs(IUʼnoSkxoWY8F^;1FpӻnA? WM4>4="Vp3MT.C!9>HH|n+2ԫ~>;9K!;\Ƽ!~xpim5.T1.g.駏qߪx"x`kׅ<Jv0:\t K2ۯ0$:op^2 DA0u@e?^=uQ!/7d B 2>j+_)`m3vnWLtU(o^ z<@ Ȼ'eB R}'.͋N+r/3%H,"Zk7jeS{2b^N%'5>f促l"(![MH>ڥ J/8oIEHHN PaO{9"xUPA叩|- H8})>zt6NٚYoYlWbSBZ; cYUƴ.r ԰iɻ4/!:SFjc/2eCJHL(A?qF<:c wKA_Wr1G1:F!x?r!qf?-ɮRzgj &g]dr),'3!F p0:HiUɒ \Ou:\r.ve=gacnc#pM?oKOX$4>-AU$i#x9#p*+`L!KK01oڬl<;$I?H5,bʬɖĶA ܻVơ~\Dale 5!h_}j䄌F]oXyb2qQNE y~WoB>Gn Yvg1Ԣ~VxV?&|#8)9繚%ƇN *,P8DzovH~D0N,\n3Ϋg+hkO1nH=@{`bݼD\cr["śD#x)6}4L~'Cdh)G訃ה;`2N!/1p*d' w$*f2CQrk]j6&aW5÷l5z!p:48v@)$(wӻ I`qpHTJټNVE&DP8T¼(׫= <lםg/Hq NLrv#`+&AL3~28NKq!FJlvp0jdec{ |G;KJà3k`yYlΙ (#X^Xg,wS8yu0r t:xTu#/ANcS*@p{$ ¤r~Nג]Zbz/U1{a_&Mrr(BdE}vpCɍոfyo삙eny$ϹHw-\^ >~>A#c? VBp 8Ƀ ~L:4.Ve)\ ER z԰|# 18p,3YWԹ!o teŹLp_Za#oOpq|Tg7\ǂp#0ײӅ$+J;A@?~< hlx\r‘>a>3Q]j*-L߆䁓`O#J@R d{I"; AS [5kb]N4cs7$Yat=ABz _4~MPR$W&pIKo]\y~}>.?N&(W]Pw>.D*hAKRfa$RL9.YhԷRU _V8B$'s q=^*`b$ci)H~wϕG@~P%*jxؽi.5|"iH'}_oX;b1gzfZUpEzC#S(ף71(Aa5E6 {uq f :#lˉeTqss^!K 1)QA~EN*/ |`/agyrhG 'TsIѧh* e%̬aW)uv(m[̂$8+$4C( ߽`-2'U:ԍfX`]s:%Nc.x5" KL:p`h*×F8UŐg͍6bV \M5*va?'Ͻ+R~R3s*U E' w@:r3q"5j\{>{pD6NXTDB o!½ odE9 ar-pwNZIwanN_!8%7̡sSyyGH iـpe?%뮺ϘN2!1=G&b #Rhx5\j?5נ1z.pHWVr'؋t$H:)AßCUVnx1Ul>b` sa  ؏,:ݼ0%D[dCAteᠫ"Nr<4j+ERzDS = Bҿ9eL$7|+H?cI;C;mB1΂㕜pwNAܶ=32#8:&kz||OiC./е8,7Q Y158bkCS[c13UA[>Xyv'.sh=2V!2a[G+۶,CUC>tƌ /~~%“HI Wtڢ8/vGz[ȇ;6戾0u/5^`Fsb>'WqgϵC/`lbУF<ޣ-%z~IpE:q;9<#솎M/G$^pE#h?󮠘l/}O =1+:9N/yަJy5qξ<'xT|qήOi~Q(~EV iQ.oB%^,9jxnTu44lC>Q4޿+;:Y\UGg ,r'P8aiƹmrTԜODypD8(jĮ-@ ibq>GܶWUCSH#obj- k'E%fg񛓊whz}Nd΁7"( v(X]q_Y/7+\}huvTG!=>WۛKG2RطT3|A W_݈/z~$H6SWg1񮵋 L_{yZ ,RG=ܭgy"!CBO0+"q<<;as :Z؆)o;',/K YHL]dk8lu9ue/Mox?|8h?R:B$X$%&|~1 ~Oڈ>g}Bԣ-7)7s/@T HН$haýMyuxW<+}NMn]\̫vG_Bj']%o=Mj5}ɩnc{vg?<;EP{@FBaEn̞V\ro 5fU ҔE/8Z?t9ZwK`4 KۂJ3Ÿڀ/T`)%Kçw0 >J,20s2'$Gfz_+i?*iK6 _ҸܰAacB ٶ_ J 1 V]>>h ZCDYP)aEb'(!4PS8`%F8Z -AA>Ƈ[V.f&ǟoSF$]! d$ MYJ,{wΞˢc]@f;ס ѫ{9.ީ]?dG*Y}zR$"^\7(.xH>EN*s0pa#X\;Oߛw-1­G՛6vk'bNz a0svXjHhIҜ:7 mM:]WUN8纼:y]Ji됞D +tc\pwѥg[q:۞hEz4|`*^Ol]C-+[۪6:-ɞ ?>-m҆CKv}g䲚Lt?|.tU,GsܯpY(]Ne4o}Aܞ[|PvI +˧9F*p+irEEdhwj*..aY(#: N8VzjzgWlH%mj#b`h{{{+3K=cD}?ȖucLQ=b2T`}imEhŲ4ȤK?B7pAn>՜+b,ц?S;8TC<7@HĀ^~Qm4hCG spsR* M!A$@"|0 i5?3z |`󉟜2 o>.Ts޿go>IBOv 2j_(sGK3;R{" ۺ%zJ?:= ɂ(DC%}D~C#ʽ,L1 b\~C$@f7"׿1V 5DwZ! J.Dy{ .MEi;>5krWj}7-__6xYwZ[kT1fUh麝O.Uڧ"&K_&W P&)ӟm=ݴ8KZjXVOG:XӊN=I¯YOIJ/DNO#982KիY->fݞ=ns:)Ը;)YX龜+_s۽i20>WxU}ULL!SYB`+*҉6G>}vEn.C>cl5:o%Fg¾=ҀER;>r/cb GE.H:2l[ nwUE5;4KnAazEg6?Ue9NTėymQ%C+@"b?!v g2U{# ?S#ti^[DzlX!R3_<6Wt|EsO,͏iokegŨy!{ď3G %(6GӨihb_6yl*M{bCGgݕ\׵f`6.VU4#Tr]ް IV8`G<2ݿբjEËIC6mi1 D`ԣ6"z*e@oh@HT 'AHaTR%[2@о˘G:O"%J9 pOf=&^T~뾼+G#OFHD;8kW]5~sߙ4r8xaVYݧt$HԽ9k8#qIDz`MUX!`O-Oo'e˧dNUs@܈?]}wiYVv~ٮ!;x>~24)hyvrDl/=Unؠ~96@;?l{d\ _gbp.XUr%'mǻ벙ǣ1OW>8Ej{3垝Y𐲏K`?>;BHOɠF#+k-ƫ3(BODž/xʡ>nҪlFX"ZXäֈwEZQ6'}"VrTPXӔ"8V8bPf5@j0`sm nAo`V$a4$<9/gy<d!Sp1(<]gjD@F,s/XZ5nݒNA?nutUYe >t"" 1v\С(uoAG{ܒk/ $<>y8wk]O "XN~63jfΒ`$ t4P zfpTK+(Q&,7f=Fܓஈ