summaryrefslogtreecommitdiff
path: root/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c
blob: 0835b5edf6858a454274e7242829c36aa2904095 (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
// SPDX-License-Identifier: GPL-2.0
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>
#include <bpf/bpf_tracing.h>
#include <stdbool.h>
#include "bpf_kfuncs.h"

char _license[] SEC("license") = "GPL";

int pid = 0;

__u64 test_kprobe_1_result = 0;
__u64 test_kprobe_2_result = 0;
__u64 test_kprobe_3_result = 0;

/*
 * No tests in here, just to trigger 'bpf_fentry_test*'
 * through tracing test_run
 */
SEC("fentry/bpf_modify_return_test")
int BPF_PROG(trigger)
{
	return 0;
}

static int check_cookie(__u64 val, __u64 *result)
{
	__u64 *cookie;

	if (bpf_get_current_pid_tgid() >> 32 != pid)
		return 1;

	cookie = bpf_session_cookie();

	if (bpf_session_is_return())
		*result = *cookie == val ? val : 0;
	else
		*cookie = val;
	return 0;
}

SEC("kprobe.session/bpf_fentry_test1")
int test_kprobe_1(struct pt_regs *ctx)
{
	return check_cookie(1, &test_kprobe_1_result);
}

SEC("kprobe.session/bpf_fentry_test1")
int test_kprobe_2(struct pt_regs *ctx)
{
	return check_cookie(2, &test_kprobe_2_result);
}

SEC("kprobe.session/bpf_fentry_test1")
int test_kprobe_3(struct pt_regs *ctx)
{
	return check_cookie(3, &test_kprobe_3_result);
}
7‚& jygn[wU=gyQ+)C6_ʪNT ëAYrXW Be=DQuTnZѲZ?SZ!n Zg! sH{>hNJ.pe `><:^@aNX׳zu^;vvT y2}ƇىD.1*Έu:9"WlCO^rqPod t:ܘ`EKsL$-v u{OMoK vhg=Hzv2 2B ܾ̃.m?>t&PW֢2 }o`4ѻHۏ?RϪy ?~,_G@Zrs[=-ܼ \<| Gn4"y;c WzҥXij6cst'E"l?e⯤pMxHao }>aWD{Z.6/Kur|X|l6MhtZiK1<{/<_ߚLՅSU^T,v#E3u6NVu9{黡J%msZYJKױЂ&2>8-ݑ_aabcݪ1ZtהVBٮ275V4g aUʻ";k3^#zD-j/|C1{KxКWmk8g웼1q>>UR炠fc]fB:vhgձ`vAAYE~0d$O` L}E&H1>wa?BNH^J qmA1>b@}╧vg6ttm!hpM'pO!o^ԟn5{ o>E{RQrB2W۰ɗR[q.YJ@Cjam~,w}T׳/u\5_8WmLeJPK T F?PE{V(ejA3;5uV+"){}c1nrג1bYq͔ 0o???n~=ŗ/3 |q}׏)c}J'qoA*X!ѩr^!oO@a>A}ZuA|={!Lҳ %g(pK3D@2xJ,pSl:5R7 2#h \$UFlԂ!\ :tP)>t bY!*CTfGGRlCLDRSCy$d 472vΊޏşSE}MF9KAsmz_V6nAn c _2fmN`f/8 )CEX>elQZw6,[3S&L!BI%!WvЍ'4/RGGYSR$Nԥ'4%Jk@y2S鲴UCTI-g%wO Cqː3\bvLh<#6D-ap ZvK6԰ B4UsMCݘ>;U[|'-u8_u[ea%6BZ?/@sjuxik/SH_.7ߖs}`pu:OmG?4,.3, !V50=υu5/|saFosᣬvIY-ZΕ4?E~mUu̬ gt|,WZ6.]h/T7ɮvnuոe٣G4Cǿr|o4FB/ _(ٶ丹}6Zjés|"1YBΊ'2Z]{:Sq|'E=cMcZCP(hߤ)w3} gFVzÊ-l*6:?)Z`W/0gQVCX J EbnQ.4Iu:є30飄x4CϕjxXJXBMa)ťy]͘~dXF霡=+wIVjBd_%\d%A(St[_ ;/`3U𨳮a <{1<)u߃ERUv@Iu}"/z576V^Q`ߋÆ}SR.>C" 9t9K}SߵL3x1~{E-xKIQ Ac*E !K 'w/M@}ޅDS `TOJ>ё' |Y\o'ޏ|Re^~aEP3 һL_R\/U'RZ1 VouUqv@ECIK rer$Mlh[ -Rs6l/`R}]^ӕs~*flG[:N)6#^ؗkV{oT.c܎&¯B8HaJf=qٔDF4QF I˝Ǜ`Xa #ˮ/WwN]fMfV|?`1Y3U˕S0Lpȣ6T`)|Eu(G)EsVlnidgHNA8Ä(gPayX{w6Bk״ڜ^ 0u/-) P>F s l.ʊ̫aRqk&9搶BB?oExaY-aU hj!3 )OLA0 !b$n51E`^G<;pFD d?.mf4 8[Ix73EJ`y7 ŢB8PĆQ9A#J `VtTimm΃MJr,@A>-h0`N 1}**b3ѤaI{14c]0A H7T~vpO`٨ߋ/=SxsDUNd(RMQLo&c 7]bY,S(j t7? d hiN *טG~8fK<9J1+}Al(!w>vte:^|`m6ji6Pz2|duj-&E+%iGElc ڢl`T2ti(xys0WmNSoϘ4wN.,-N{C\KͮS>-J bbsuϪvɆN`mYbއ WKc\kkl~A3tg֎n{ _gb:Q촋uD񦦣+^; IMl֋8h+rdrQhamtf-1uc^kM\Z?5Mod!d`ŋ+! V>&╹ioPtIcqؙuیDLyi㿗֏&Ht^?|4hَ8[*hZCT>a:~n޾|6}Nhzg!|8G t{]88־Ϟ9!8 Jl4~I]Iߺr$Z / ܈kGrrM}7>xeɗm 0g50 8nUn7! vl}y0普p ;Mh3_VeY[&[!!7BPnIyIH{P&1H*Sh!E2o6g`U^W)#eb-A#z}P4ZVuٯIĕ;PY! nxjmso_ξͽgAˆ.w>i(Q/]oK6ՈL=Xy, ۛYw>nvc^]-Fwi̼ kj'tWcB glʫuϕ{7Yg4V9_%_[5ќu=N:q|?g k]}{n2+\W^Q̶^ʨҼ c%;\w85[ &&]$cCljv;\ד!.>ixxˈcl澤sXtG+wGT&3=]= /aKt^XCGyw9@-YPb°v؅PVG|_Q1l.5^`]Ͳwgi,ل+ޘοXT`h^+[uiiU!X_}ldMmv{yz=ާ%|\#d7.^nz'\({$k -ư8QqXW6^p9 [m_[;Y𓁸ɥ?S[yqE[]N|`vO_.|73*T]273GEWnozQ"{VK̶tksR Oq2WJ|_wO7z[*2^QϩܻEf^/k|$7=^(?hfc <,Lk.ޏl@Š't+D$?tG4m/&?T807jKwf_ٙnK~rkNwsDXPJ2E>,T0H]u$/ O=g54, ћN'|\$~Ǯ&mVoD@d ޭkjUVmlscm8 #U5UUm:"śSE`^'1(˖0ܷf%(m,ʸ9'JV'؈=PE5 Gk-xyQs[Td!9ASMكS/F{Uc? =*I(0^;?7ZHI @B3}.Q:)YhXyQ{4.zkZvl7YwsݕYy҈B q`! 8$Z@8tb a8W2Dc0$. EcjLT^B#heDA?Pw{A$QB Bɢ|La C| `8ЯRO#aNOKk ćO`ߊ$v~!-`=o!o4TdDoIМx]x. n@=ICwb}=tym%/O;[mb Q|H6%HG(ݝ7|c5.uƳXV5Rf~@_Ԩ:dc; ? 4P0maNLL>Qa?Ρ3}}_qd~)D1 BQpsh~Ju84}d6"qwd.*ILչ,=⚩h݋QWFw8Z>"1'Dwwm9M sU(\" 1ˋ$~'\:_{ۘۯ >'kr8 `>x|@ݜqN y~(Iu_ ΕwA]yўҀ{G&^T}6/L7\{Ak m EAt T4XW\Vbm^3Gg{{G 9 ,"#j:OXg2!wD/Fs9[ď+\WZu"CV1ر6j.>.24"Fv;tYoDnB?^DTNMz28a0@_Eh}u`WPacm¼'&mIsl\ADF녿;.ZF'#J7$Xo"2H!6QS(P]`I'V5{ݮF e3mQ)yqIX2:(bQM5ѵdʌGoJ;X*~5_Oۗ?do>L=uy!U GkS ͆G͵0 Oל.?x Zڇ>- Ia$/P_%΁Nsx$Tc,2Iֽ\| {@={u= `'^-pމ-j($ټ u`Ր86I@B 8Px{JТ_(>ӺX*oD0qr,Dr!l*6"u,Exv={=&=w*'l )KXҀ_Wt27`:yteq0ب~_z \2Z[k{oxG;{۟Poӫ~ou_Ъo@2S} œyBll6OxXy)cwraP|/^o!UF0Hy<ķ'Lx72r#o@޾ڽ ޠ#!p13 Q)_04|MBH 9o_Qwd5J 9 ~@K2T N]D\!!V|@1 !>>(fKBcMi H `4`k?I:ftlEbNmk(o`DEH6r0up,x6ea=LlIT}Wu]: HjͦpŠ l5Lrxt@r3iP^sjj}ΖIn.U۳GiM J $dtɄPR2a vfnJTD8 kI=ƿ.k)/Ҡ:P]rQgz=_dR:S$ũf^=sa'\y sQ츧&A@Zc.;}y)GB!''DUd9G ŸTAS .ߗ]ҬroL.8c/v6g*,UHl=l溹Zyg~4oG?Q;:ugJ eH,;dtu؂ tK;SUۚ 0}U!,U[w{ @8JƸw_߀e)[p=]гlV:;mʗW_EFY-6k6Z6v9Ӭ,;U}҈,v7 B"7Sq۱nÝVn6su xOHtyI[!X#}.usԿݛ6G,EA=5>UZsWmu:+Zup˦ޱMz N? WG娜_8Ro9l[ uk֢z_9HVsu/MGGWf};Zã\ݷA8-4uF=] YfPp?F>6GyoltdƻM\#ZaɌtXsrs:OVDRl͛~%Є3;eK'ַn"Ӥ.}埚 ˤ#n"AzIw{W>sED}< 9ppRXFIJݠߪ0j:iG qlSt f跭1e+6_1[tv|+]tqs3XrչTXAv5 !5n5K)X+%k~ɱVߓ_U|S@0K r(B_}Sww[ǫ>wb?wr!J87 ̝輪~'ખibT;uX=`EQN夾(C Rhu.t`AAszhC Ehhn\C\aoc?:wXo4r]&<P(gSwD֜1NN oPvF> }Ϛy\ 00a:}t+olY@^0&0߫,Jp]rot 9^:p!i?\C\CP0Ԓ:TLΒ<@Mq giJus9nd5A\Lt+hC&YM X?]2 #"C;w5˲?= :jCs2oR n6Kk*˼!c,\ΛΦ*@N01n˘P̤5<-DKRb,D%W,DY|C 6#B% NU6vk<]K[ت%32!qv1TVdVcoŚ%@5ng ߠ .a,wO~bYX+<czj#ǡ4DCi +>>44z3@VcoD5-gޛP *Iw>hxrÙ ̉u;X 2XPvf+lB,QsuC`#5J$W’Aw ?&}EG۲͒tvs;o?u_y&`]U!,X&)~sV[vٵ)mkY?Q $٭l_ԃ+ɻzQ(??nGk^.Y앆]d?c[vTUBܷn\swad@6mM`|zA >fQxρvJNk9N(D|qfGmKq;Cgepu]n{"58J \,'ΰK]W4a6_~עs Q w3Xg@B>r!dqxW 0٩pυ,wuo=)6U >*2 BFTO' ?ݧM¨n B=7_ďn_06p`br-C%F9VM=T~Α+m"[U x}na} Y60=|?'[W_-&Z5+ FD*bC 3a {7yw6=F#Ai:KcW7q={ 8ؾhx u׷WDnT}G;\҈~7oy,_^`o $K;_CiE:]UH[GXoH6:sDjNqAEu^x#Bp]9;jݑ 1jm Gu҆==s)'>\{Aփ/.wM| hfe?sMq;l9揭)U3]4Fs ,{ vNsSq Aִ. *Sfn~,$#:$?KxNc;e`)sjGw zǏP;X'siT,kҙH. B?xyTxwy잇._K";o}֬#?/gXɭ|3FQzuc:)Ǝn{] a:nX-[cm5qØd8zi$aюƛji,6f/#@a.莙o +U6!{so7=:.qH+L?lQ6Gn5ls.`FRMDsq`0a _Tbڢ1),{kvk;*]3! A{@>|6!/*i?"smU&{Q+o{zp|{Dy+. COL̀=8GRCFthWH $N<.+EzWf8q ;#rӲ0"v*$2U5A+'uXxn"JxyA)q9]C_tb 4>8+QRN>{VX!n[`(@iR%:A7/O '€--Hj^~ o>5ۓ NNC`fŔ6raN-ţe2Ha[xSW_Tewbɖkg|ޗsWx_+k뤦_/ ŘQO0}:Fݣ JIQ} ;XKf%?o۽5J$!LϷ<^pzHoFDhsv<4wAGӹz:lpK<`'+y0quK,הv~ 6OAK,ᯎ'>ۇE'6ip:'{uAo3Ûؗc<#"1[ߊ[$hsƦ~.DAY|.ozd.~_Y̕Bvyn4}Ӗp-ma{ vļq@nR}8[j{uFI$>0緆xmd>Bk(S[.!"9¤!ܢzNwF__- {P=M1ᦻcxl㿔V'uc)}&r'S1l4,3.5v=ԉ>6T}URZ-EFpkN SdCYȖG{*UK m=؃Zz.LI0@ZiEjv`5@ӶS "A$?F`5yg >"bV`-FbH+ mGN;s}f0x5 H|1c|@P."Hxv\?'Z*Baz 1 ed8 B}!()$yy5<婬swJwά=woZ!5gP1D%As0﮴{K}=&ʢ(Pdh'S^k,V$d"aם%l;9-ZQJB Yi.:R7? Of`Uޜ}YoW5s!.#?c-vrrN: QX ؽd gד5Trk Q !?fWj:#, z{B0P%r(OJɻQp֙ R#ț(& U\" 0z]r:<,W 3- j+$z0( gPI#v 7̂'ۻG .sY%X&eu_b*gu?nϟPkǎK7a!T%'xР iρ߷јy}!X:IUof!cctW$P+"Y\vèSR篹r^IƻHUÝ;i@twQ"G&>~*KC%xʎ i2 1!W_,X;HrҝF݇IwϤ+l:jjsyk޴POJљvPet4Wշ4K[4K&yrS7U}944hYNs'Lΐs*so*E"JͶ"JWqF:҄~kwFE.hstZ8 38pLQЇ1quKMo_}`-κV\~ʽ#^q֚9:g:Q-5xc ~0@>7pQg/ ؟K${ױ'yvv.OF%J۝sSǓeg-?dMÚkD0c暼d(;K=ʙ^]jMo~ڸ8i Hz|.}L3dr (4 :qEgpKQD7d|BɹgmXq`hbHKl_x7}8szgbUxÂT^buNW\*;`n݌N/0js"ԕG'~O{ Z?KLwcH0A|W ?VgOLuO "~F\yݰv;6]C yG|Mq΋" wػ}C|1I҃Ljj_̳OVTP+mT["gJƯv煂nXc!N*+ӦZQ3ipmI1!=nQpB~ʪ V4ɝ)ӋP@8>toV L*!1$u[y58wHIW1VʩP~B0zv~"C~ Jn̺CgeSu[%B\pyK?he{՗?|\) BQsԼ EeJ䯳:,LN6>|6#ھuF},~GHׄfay4HsyWK3C=!ZبdT'ag,fufZ `#A]U-XX: ^^}-c̹H>ȁ:ѯ~zU~@0kᰈ {o%Yk#-*z$ I&L`H6ŤU?VS<0ZR{> ]!PtUD zsW/82K,_8.(D(&oᫀʿ!`hmcQno:!ۉr]pL<=_Cƾnۆa&`1ưy!LJ1\AT94 lYzUiL=Dw)fiXs[׫dqQ!b5dym٫\iM110g7$hƇ |M]:R3ZÅJic.&jLN"،k-(o{2JLlmG/9uKkC#zM]nLUa!Qj oPv]sZzsOӺΒ?˩jqÏ?LLR}= )nd@~8wo}n5a~~nBG?gCTyk&B1 Tx6eRA0qWm4J[5Te,&$i w݀F: |]N8KwëMW5UK!Vkgي 5}v1nUbz?UȲUVC}#$SDA xt*Vaj-pq#d@{v%k|;5PǷNGGM{gP(p!q0ZFu .To>;Z{HM18E r#C1 hr׉8=7jpch]ҁˊ`ᾌq:f Bf\(9A ";w6<1 l\)a bOՐ:4& ި<1Fe'BcUkgT՝ r<>h3Lڛ@Ɋa/k0X&z @ ^t&cvIIf :@yHt,JCm吻[ЅTwEa]~3+'@+ŘJ={ml}،xM嫝KKKKs.O6|&d˝Ē9ggm|".)СCW3>>H30b' ĝQoȮiى~-rYՌ~_aJ_~+h"rJv|vnPp"ґdVzt-HL@1:똜x7E0)_ސkO5Bo@PZQNJ='=*kPXp:xWj24psA{p,]hǓ) V (*@p^ G_la ҉MuQY1 H#Bx_e[o~Ϧc{[-;`vUG7FvǡlLW;ژA #LU^+[8朵uI\JХlʥ!h1@Nq65uDm{`UWc\.}y1ίf{G1\mwt$%$P LZ?Þ%D" π!N'7t4iKCOR ۿD7~@&N] XX0cS G YeQL|C ٭"0EA`SzIlKƪGUeampR[Po4 aT>0rYDu~E>_:[#z ວz) =~dO| eJ:F4Sz8g0vRVtS|W׾gkծXf'(ʔ& M\KFkG&pq0XS?qxpk-m>Qu,K=+8n[DY3B[8@T݊ X7+u])>h.1SF!< {q;[opl00&hJ*KTb tpFAٜ+nt@& 4tҩ1ӳ%S.?-rUSPՅSɩÏdX7+1矅Cۻ~i}/̹(cQD@A?dcy7|^5kshK?F1r,ӼrpTR٢5( )7~]fVfT i0AyG A`ׯ:) jllQp `Nw:BZ;/QH# TAW}uM쥯2\FH[lLM5㴒g:T1bl'9GၼO+c[S9<Ι] zk9׶{-p_p}ut˚r/XXdva9WrIվs^ߞiv;ۨے*W3AFqUO1oҕsZ?;g79dވu{2b4偓0%O1r#25o:sٿzq2#NNI5^ Xqu6љ]aҼ##, 눂;01Җɖ!Zi7Ɇ˲C:PeWҲ%c8qms =#EsA6},Tݚгm~S1їb ;g^2}L%4kِnknNDb1iRMh,d$636&dlS.2f)rjZ0ŒTQ+UBH}V%pHkiU0tf?W_v6/=DTϔe {*y JV63h4{7XI$2%ڝtZJ6;CzëW濧ۋ#ʮqI}G;eL;9"]\R+?2?+};e0Rd^#?18J"A~ /A=5:HP٘/)C int}9|_X-<"PAaԻZOPF}eV*Dý!6 b*? '755Ϋ{x5䭹1a` ^~IFԪDZ۠0Z Fũ|!1 Ԓe8ដ`լGу7UmnO81x؟8Ay;.i\NV[ժ'қacȻs,@E_s[9 ӥ>1~=uȆxq+_ЍQ!Ϣ;]/74qR$s{JiR DBZ럨R} P<|[x<̽T>do٩e;3X6lrX(U i/(9IFD 1͆+l܋"_W31A2jjޕG#8S= ک'8߿</XqӐO~l*~\u\XJEweA+]xV}Z@!r?lZP_ӵ8|Y6~6ڶpCU>ٮXBgIz:nY('*u& +/W<}soTҘ~__$"zW৚K p ~X#.v=CE(B])x<dkKb(C c^.\p_R3ID3$M ۍ28߭b4 ևfX"uU0!椛̹Gxq1kzȞU>ȯ|#ɹVA&Plt Dr7Yf+@ y`,\DGSI*7JhlM7DA^MM ld53tz#,W)";YP64Suf9\R+EO!pi؁Aϛ 5=APRQ^Cg@^WOHl񐄎W*,}r肠_u3eʗKH0!+υ1$ Ewf, *WryFI4?Wa\̼L&+{V䄪%iv>{ xDk-a~GCԲ@Vi%֗⅏"~Ύ\#Z􁾾_g_/[r`u@a tDLng,MF{W+~%(LzD*/DN~#|Xǻ|vu {CRl+) 99o]tL?v{yQ īu؏}W<6.稑C6 E? ~=Ҕ/&FyyU573E+lZWn k^% 2AJU1Jze0]=l5WrDL|SE/]8<,}+7$q$i2 \hl3]֟-)Lbsaϡ9-i0|C =wcIv&!雡淿f8=gSӾun,ca ,k}]o)IvjvvǯtU/AfZcMi} 4r&^Nf7t))]?:ۃ\0PǦ˧E5z?tV?-_ׯb ȠqQ `2Y jR5aؐUEӎw2$vI~-UZz]f%vkPR}D|l]IRrL"zsp#n}O7Y%X;?_2#Ƴ @STO_`MIjt~DIP.D?\h#tCWyξd; ק_~/e?1 xK IDȀxN݄82fGY<@-1tΐ@\ZtI` ;/?Y 0 yif9*QrnkE(EU!ڝЛ}Öb<Dp Aޯb1WJ+P4-Ⱥ1Aacx|㧞2qg38+|;a+ܗ6Ge}Kד+}Bh`{4P ŃuфĄď 喲9Yy&96ݛo$2Yb8TrR/,js-tLǏto,)oҌ}i2;S @|/sE,>.SNFі%SQh}ۿLS0 |CX2䁠NRK.PHepDA,n1*M̳#cj~L4DU}k0*~5*9wy,k6b Z2\^ڥXf7uGUυT1(Bul1!xE<;;] 7A~N`ҰDRr">j?֬F{* d 9[:FXvft<4$h֢ *Clkfffr{9=)}|5 [yaU_OĤ;z ,b`yp$2u@_R4:g>Sc1l$񈄇s7ćOU^-^sy~7tdCgvE^HYDy޿49TP͞?O%Wxms9&?ϞCeDŕ)0\hb>,:࿧_{1d^Qs+`/lo{YGCY%ҘtT@H?rSc+%L"2YԳx(t7;MW7`2HX}'(=0*$'7=rGgXKm*簙!&GMz *~>x ਌<7A/Z^TNP s{-̢ZUzDbm*'Rf`jQAP-E<=eX㯧RBI;o.-g%%Asos󆅱^"z|G*P$sӚs P} J.-#2Wi9cc|$ hRLʴ+<@ p* 9ʬ2H)Jp_LÓ&LvyTsD&3I58UHnm)֝num_M/'3Ҭ.3X|b8^^nT_bϗ87^'@9¹v۶3þlQk1XZN*8өY3J1M2<#OUlՆ:*5a& )>L>6xMUT@6D+A@gf(Uܜ:uגag[څ9z׆uoeI?T]3ԢR^r-UIȅ®Lgo#z:J8Sr#J!+РS4n'KaAOC"7z UUkaR%vs Ų 8O' D((p)AYL3ak, ʤa7:yC Bsʥ 8'$I=5U@p+EKg6ԝͲtY戀 'n:<ީ KgmT~Vwȸ! `B H(~D&!X6Y$8J5!l`26W3joO6"FaXt\@7kE)F YdDJ@3ޘz, A62 uk V; ^.%w3!eũiUAj -roIe /${$];?%{ J(^axg1HaiY-^ d4E3|^g~√W˭f#B$哥[aȬ` "+:8sDEæ#nu:n_-h(ܙLt&@$oԟQ"e9,MFڡ~ORaۯt-s_wްaRD3o7/Õ+˺3l滂V"z` Z.AMyͽFH LQ|hh~wgvz:44Zt0=?CK]Y ŏvidG&] zXj ~kSy^lJY423fEYO-6~Nx˼tPXfPk%\O}#js"³cyTVuwͮɚu0}s._LS(|Y.7kkf ڍSMPAGa1- y?7/NWoZƻczi 3S+3@*L4g'"`bi@vb;,lT $I"wbْcܔW+|]_ɺ`,5 l"HPE ~ktT XosﵮKcڶ){'.GTzP̽]Ee-Ѵ#+tqjdaٝi&)>L&2^Ξ%Nd'䨃nzaފ$޴p)fܷ>Bjg Gd=q1P>舋'xW(VӪ=b.!& l/vC+ċ /&rZ|@]s,~g̟/-ݲR$Gf 7ћ$3B8I+7ؠ:;drO?(׫a܃8ǚ;&W',%LmʦQ#f2YI6hJiǢо#ݢ{F!7Fy}bfc”<7;5$6LĞfd|״"/ (TTSdSi3x^s,lXm&T]cVK+ SO!5# ԘFޛS8%wqN/^[+0;JX)+۹v4dovK5y|Pl|gHF%82Hn50%+KE%[5T | ^ve5AkW^dx-DWL&(|QZNTC>VKċ (˒[455ۤ5PG E0e;hPc_˃ 8/G]""V|lЗxՋ 2;䊴-f4gDI 6TF%-XXDnMC'r ?b<X:g03Y: *j+jq AqD>oN<Әjd2N$ƩsFQ9r(A>ʯ/|DD9ԒA=F/XG^b|~&]Mab$;;1";4_/l[t-Jd~~TLYGTYq#*.i= -ETI88e_^sΥ1ߔWW=\3zQHwsS>'51Nu̢ph> [c8Բnq@0oi `'-׿mgf[$I^)M!9~ag( (Fɖwvx""Ɣf 1 .a/D %i_t{ipgsĘ}wZH2( biZE@,5ٳa3k 7=OR7(0fTJ@-S}oNw!}.Ko#EO0_怌Bf8.zzk&i@j̧zX %RF$a/v\u&6Pt'c5Myn]jDl.,3сx *wb;' /k%[/U.EHc=&!C_.ңm1 <|r:Lu#@}@\BƗ9B,8U؃U.2~b9˔n7?/!۬-I; (@kY(N{_E B3Fe=elT{Ewj2V_W.C4-&JS1v=r!8"G_;e\D(PT:MZ9 yO{ F>,ͰӠ\}}) V0sjJuP09Guu!Bg.r1 Ey `]3('js>1ob^jmBxQ>>56VvtZ㖛<-dLòЉV˥Q`B_ F{\MiRյ6Aw ^;פ şMhd|8Ƀ1bua68I"x5Yw4zmegFfjCuGT9WC  @a/Sq dkOh+UAGpf%58u5HT0`lŬ!] mTu4 %="x(np4<]NA~3MʙMb:4w`D{;Ƚ4C1Nz.'ԧȯ&YeorrL,QYcnTB>5CD'fۯ3 (h0n\s‹95o#wZ+9f%E\zPAYJ:IR hRr(eYsiyy hU3qêOIz}L ˫%_vn_rj$% G4Q<[m]MGi5x2}JK#$@Aw=~#g;x@CH 6 HAt'ẖ챘zТ1 FI't)MH$:)(Etpk)EW6`/Y(Agi?hhS{ϋ8P*BZ.!\0aKԅ}Tn-Z&Wݹ$fCq64M`~hJq啛%[\heH FCcER5[/%շ쿹S0&X-آ*4irt n`epe )tOUTL@-5ڂvlۍX -5<2)fuBzSN?XayϜ6˾}w0QoTHr"ij|£nfbN:[.<@(MT1:{" )mI{6LP#r;6&_1ap妭P9)W*Dz-K9h:N s`Lcn"kn{g}qG%d- >53|qwqN4(>oʌ--xC՘fY9 qc?K-ymӏˆrܥ/ޠ2)GC=N]þMDICn^Fn1yjv\^ýt%JZ `c01YA8;xS)=4*xJr"}ovN."ZkW;7#,Gۨ@-8;b \PqܓZyPm#u~YTԿz65>`geٓ/tgScȎ"a,E#cteӇk~-U9E IԲP:m "QYszi:g]t1~M]QjΟ6+G#9'Өhg;su۳F@NE:q8eTcUA8P2lӃ1"3ƶs8$}7M>\㗨T;H5,fG0%f$و7j/> uirx۲@onf<7^ؚsׇHͯ\Œ;gmJ]=&JP({j1ǚ{4lDA&9a3bmTҩ){grG֯ӱoͭ۹}9MDz!ݡvUduXHQo' c;ax4t2uD nV6pBjQ 6~HK&qʄ1avj:JQ9In+uh̹o9|Jj; %hX9t ̎ Tf;\Vz"0c]8ύVbŜD5F9r1&plԜV.?)ǃK}WvsT.'H/țH>byόw~ /}_ ʎWqnԨ8Me{w17q";6}mlpkaa.ק5w4" \l-!P4J<\j9g eh>Qg\%rq۝F-+eɤ3:G d6*;!̻Kbko&D0idrV-]닔s}XQאqXWz2bS_1ѓ4m4;nzNcsLrsl˜jC;rYd^D* ;h)g %=Ҹ`JR1ޛy)jFfBfÚ~xS ӗɝuFuwMaVQ/;ɚgL4I>qS'߿~ %LNI8i 1PO.,r_F[/_`D݌RcĤ$ielJvtR23pb9.ƯjZ#CiVu^":F2`,$gSIqFJ}8İWBdɘ9xɸF©]VJ~c3k A*'w"LG6p|9r0Tς"FL@0ҤJ낡6#52ƭQrFަԧm7d눣Aj ,PزI 9Y1_C'賊M ^sx}Y$:~5s 8}1x.r& q#]yǣIC8z^Ebf5$]A~=햟j~?+ Vk Pq:0->󕜇c$|~gޫ<.Sz>8,LQ*>Gj~(.vvNzJO=9}#Tκ29lpxMi a,1]9a\C 0_|=IXZι-2e%IQR3nW,^lࣂkO[I(ad׵Sb9t| uv$%!=.ploD>F(cvT:O߻ZH Yu$*+7OC Z$MMX*Jγsdo$C2r9L 0 : r\|hP=k6HT"6245z3杍k18$̘ۦ3yk#qDG3E]aA_6ޓܜՉ/<}ED?hl9mŻQņ U>ZQy/rQJ\Z7GCyVp\2 _vQ  %g|ZS`ma#-|四uRwSGP&moT"rԛ/ގ!#Mt{8F.OtIFiU+SQg}pwfSUAP(+0!Uov\w{:ae J50na_oRFj'* 4U{tmWVj׌; 럐[MS!4,#(pTy*Z>.APAhQSjWP/9|XCw3яGoQJf%+Aj>k(擑eDtSUV0@kv9n%9soF'A z KK1=2wM!+OXYᒠtg݀yEV斬Loŕ~x-e5O0y5lWYFRfI@DJwȪg5W59,hX\4zȑ'V2{e\)ײ* .LR׮#ui|^F ϧ@ _|D[X1aLSce(z]JRBhO}]F)!'A%Jz- E\g @E#P!{*ԸH^o]T`.2`d(rq0AM!,nvOP=4ł<uߏ /\H`O%74EtɨdQ_­vlU'Uu%!#8[by=GhcYXkR/ɽy2`*uFȊ=8s$jikz&;X[=LS&Fjv w=W~W_MB4nf#_^:cBΕϐ_17.uojߥk 3+;c׋H? _[!(nZlA+⣄UʯugON}=Q,AACݿdEe `5uVe5vJ1.X]38]Ml^sIB,U"x (JORڽIo_|#~σæ0LG''(& 0m_c՘PSoD޵2қȜX-țvCs ıTBa Ja`g-c`7PtKe@y [ -)/ {==ncUFL̵2Ի&'&,ĖF/A\2J:;@9B]nhov:P>#dQI@BLRO)ħAy5hh@גcDHP􇒜f+Vsr'5TFKR'L5 &vpă?$FlkIH|WmiQ?N=QDIϏMyzA7iO7z>wRV~ƾbk?u74eϯӾS3$Tc3e7y+&͗- Q& ƪl"ɂf{PQSr.q]b |x]>|9yZikqI3i Cd ߌ\,0bI~FVg֟}|eBxO/'\#_q\`,>&0>s3r2CV,>bτcwnZK B ##txO%ہ**!B?Ӌ=[qh_)a7`Q C#1^߮a}Οjh9?owf8pڬu?Gw3ZE^N*||b.^7w,ja^(|{xg{x |}7p_Uk佮@ X()9t~?AˇW\?mr*Zah?h02)ȟ=~xP+F!V!(%PZA䈘Q1d"Cri6)3"nɈ`&_a&]5M*Д=hB@;gX!v귿;j}|.vsE{1rbdb?Gy\#@ηD]PakO]mׄg+4>gs+w ^iMr^0><?clN^% ?b ]J<<^iB'Tg~Y! AN͵ QیZ$/SZE.?+߂P-6o?̲n ]-.۶i`xØ;p/sYbFB rJ R*;2{^p^R@,'xk-~n?G,+h=. Z?X|Zנ~1Kݥ}]Q- uö6mw7:3-tAw[~uhKр~}v~}rxP9O/<7Ǘ>q_1mg 26iâHH__~?{ :L1|k?~[RoE#cnՀ[(CO'̪ɳl+/rxհ]Q25i2NgdB,yÐq6TVbHV^㞦LG]$Mm׳Sbsj'gFw ?_>*U'?o L(w 852M D W‚xwIǒ?ɸ:n@3NE[刱9MAwlpf;`* ,^H!9ΐZCu7j"%]^-3O6x8f";i^] f{~@搜Μ9x%;jn`آ@Ϣ_*5XFUq V;=vOv5rB[~%uQJLrC_LCT D靻!J9_?bo.S,C'ouQюь4WYKչt8=@:n"Aɸ5p YQt@τvG 7bӘ}ЇGA:*mng+eapps-0wkr)q||_D e)M 6oEeGn9FpOt}fJ%``F~ N" npZz|d߄t|ts4M_l94хu36Lzcka.Ǿ'CUN*cbz|7,q+S?mj6K۳Ob:Kxlfsm:jflpbLRe%cqL*MQ`|D!|gҳOK=J5E0*(5r`E}Ñl[s0r:EA>2T.,B (rݠq],׳_7B&1!=s)ʔ;_NFd YD>[c,5coUV?S*tξpPsAVɊ{tY(r(q3w;ö֢́^j7bٖ|d}}j#-lGJ˩kHa؁zWMpǨc?l*t~ j->a?g`ʥ}Zc<~iNnw~}zpAs}38}_8*fzӭ~Bb1Kf:ΡVjزm(!LLTáDq@N/ms(Yč JGHpzu!ڿ?4nvWçѫ/!Ŕw^f]+!\vP( T)~&?͆9= !hrTu[:x.D@JTz;?<٦ytiNJ#g8nd1DNEQ~5#=[RʉBjfc N<i}AMcSNR@q? Zu3H@ZlЩ_No>%Q7wwyIRI_c!p' bPHmG>i$ f ~v ]_jlP $iSTaϥgqd6x/$TA/xN~^B-ȗ %~:8¦ݼm-Aٱ4㸕(5`QjV+\VH%]&=@, Q@OI:ee3 2jbbF['dxu}klDf@ {ܰn =0)>u#!UGb*N22bDkAȬH5*HeoJf7gʉ.۶__쀟9p:ʅ`ssn0mmrz+6*uFRj6Ppך%OŽ\Yd*SׅkRNv(}YJivܓ{=T,Zg6E=gS{'$IY ]+T.LPRdc8=WίBOޢx؈S6}znNd15`kzˡ9ה[m9W3,ɗ6SϠYBY;Q2zOkW:Ets_|rqs / 5j R {^*54t; fn8d_i)(`Sk֘~D'IN lC"VE\/ClXmMBY$~w@pG̀BV8˧sGUO''H{+eDmƘ >L_Ins3ZR/3UtmveQmet}-ھZ͓)izZ 'AeK>ɿXg|ի"CNŘ ln}4;7xY4/OPdqT d DBj{wzG!`_A>~H[l=J8~~v\-js] 9G4[|=/s~wЃ@ "@Yy F7 `90v{$:đ7(9 ':p.’,H~ _J-5Ԍ}[\Ow^5@f&hD7/:v;H2mwnn"v0}AĔ%)Cs@Qe ]j_w uYkW,-919nsOnә8Ԛ~+4w<0x5EaubS p-~,\T/~8D8mHCaMQ+EF쩛24dМMֻ-jS &` gI]ZFbJ[kdC<#vN&cڮs`05~SiVN{ΎVUxA:ch_N* ȗ4ZFǐ; >ne 1Gaڭ Qdގ8KfB~0fS.cө:+?0|Zv5Qq_GEpk)Z/cSadu{uT៘Oy}#˷wi(K߁_V fG^4{cOR7B$ѩ؏r"*6H3F2ɚmH @y|髐Kj;L~[Bf=Th ͮyS"jupeVAw8(FgUU/bptp ']~ԡ&Sn~>x=-űo(;鯿00e ua}5=I/% j4ۗLɀu}<;)>ZjWӈ7@]մ:ou6bAo[ q}~;VH/D&2TAx[r^nv :lF&VxQ#9^nt?c7o`YYsR I*P݈2"|gne,M_@L'S lwK a\a#30gHkE,3[)v.d bP 9[_c[hjGcdqVBˠotKu5m 3[j%DN mN& V|\5C!n%oM-1 mdM5_IiIJUp:Y;u*8xgL 2qh*Y^@o%l4`0B*$HT [Zru@5ln\cu'*Q k{@NFیk ` yu";,W}# @7➖iǨ^!+)ZC-ƶst )ٙ&eLsbhcqMn4#v mfd|k;)s#;޿̺`ikF|l>f G{9Zo _>! C!$17I ܕ׻˴9e#c'}r@-!PK&o,u&1 7 wc4^b!*%mP p. cÄ7_)#X@?aGʍt[>d l;xg:Ld4@Àc@P XpG}BK|*uq>!+>y{񳅏YO8-o[>\emNn}YH2B!V\ͷ %}n*Y-tՏWARv7W3C߉6S_u-[@G1~US4<} HlK!aHBnl2X/+Ğڨ|{8`K%6h%"80G'?MT]g~NQe>3~nю,E 'fұPG_\>W$ $g ק!$[$I$K,0eqhH@SjaE7ttDO':zn6w4#'ՠM{\o_`y)_OFKj`+K}w,2@vkDIq5 ?5ǿrOHM!`uG._h+ xdCpo.^ʎbYrwd)`':IC2B-Y vEc۶b~Ϯ/1(?Ggf MO[{њcyNV\{PoZ{SϨU6 E0)9P>|{+",3X|8aT]Hjm  -!~g\t` {СTI&M5ôUY.% "A8F̀$V<q6@v(;4tr6]="؀NWr'BIJPac4KnA;Pb <}\؆+Iլ h5!woCi=~J"`z5{'Sa۟V^'ŠU]'LgC$)h" G!vʒ]_CL̽]["+],0iDvp1$$#݁vиt+{S'ᡂ"zA}fa}8430-1WڡRsw`dմ4/:N; $t0[D;Dd8biDѠ AvmV#rgBty 5nΗM`E!Fܺ@vo^pa7 7@̉\Um=C闥Ȑ68I0U1R(F" Icb_LuL>7!0<3 /-դ };s$I2axpSf7\L܀uuKFwQ}y$&$r94TyCwv0H7 ǁ(OZ4R4-)PEAI@7Uq fGa?=fb!b$@~OLD@u=~|Dyi78AQ=@ҿ,2,}p=GQ~%WB0:l2s+7l!-St|Knn~WY8P!28v'G6sSKsϳrY|Aa1b:ר.:^V]3z#z ,0+SǼRhBvι'"@!ճG5o)Af Nԛd5DA[f7Kp*|؊] 33pט>$"D2^FbQM 4IX`PD@URڥwxYPUQQec2@t C]6l%ӌoU\y1z2ڐA;m5@S$6QPS}ݫ~R}Fv0 Pp7y I환7]>zƹ;^^AC]"T7ۻG'<?$IdE6_3"EkuϽQT?RO*|%JB%i"? T"́8 (*@hCb1ė"44rȽb*AXZ! (:L03UD,JCpLJ*[6t2PADx#E5yY.T L]Gf뭾ҺM¢lI8f,6ԁ2LV#9V&f!A=T Bzjʙm[uÊP HRtn'F5 4! yA;d,3l :r;[zya?7B/mb'oP' 1YM`4u- ! M\Q6:H̄zH{1Ca=G9L,q5BŊ=|ќ iw{.i&̅Dg'7=q862^ w*@ ``_oj V>9.Ğ\W3a}pY6VqBD6 I24NpRX\u?Li$ $u&Œ۶bM Ť)" c>AF]wрcscRՈ/Pȿ1`@1*Nt9pCŽV:B`$?CvW -/:Qj*J +d@Eb>CE2~P_<$B\[;DnWAm ko#gt#;#:]MƸQ[tL%}-UbL: G؏fi)GU6b`hP^0{-F߉0G'9[Z#Y?@&4s2~9I4-IqmzT<$_D_Kl)UKL$C#PlƬu8KGU ~p ~!mb2g1SB^O^-;H3IS 9oW]Wm!#'N-00p[ܨqUWᱡ?@ɴr\fx1{.]5wo#63t#x^?r3=a66т)EI3$9;@K3k190Vŭ7d/嬫I ".A-DF)<UZW!H  I4՜!S#HEۿGW8cWHIzchf!P3e_Jqci_+:> G3]NHf"j>M zg\]s@Mq[A`Jo䗠?ӗF3 U~kAvWw9 $P~7%nD5q+i!sf8\>@baZQe*`.uDGWYŗHD t:4DLnTp  +{TYDhKDKѼCrPV+]? SꝆ3!Z@ ~:Y@<׭N~X kQ>_{<{ٿ<sLxcwm$]iḂ0 2<_7D9k>ra [>xJj@ -t@-ol8Z]_ytumOva8-~]866zm0AHoinxs ʇmGe[}>aY