summaryrefslogtreecommitdiff
path: root/net/netrom/nr_loopback.c
blob: f324d5df4186f2c69cae6e39aeb1941dd167d421 (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
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Copyright Tomi Manninen OH2BNS (oh2bns@sral.fi)
 */
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/timer.h>
#include <net/ax25.h>
#include <linux/skbuff.h>
#include <net/netrom.h>
#include <linux/init.h>

static void nr_loopback_timer(unsigned long);

static struct sk_buff_head loopback_queue;
static DEFINE_TIMER(loopback_timer, nr_loopback_timer, 0, 0);

void __init nr_loopback_init(void)
{
	skb_queue_head_init(&loopback_queue);
}

static inline int nr_loopback_running(void)
{
	return timer_pending(&loopback_timer);
}

int nr_loopback_queue(struct sk_buff *skb)
{
	struct sk_buff *skbn;

	if ((skbn = alloc_skb(skb->len, GFP_ATOMIC)) != NULL) {
		skb_copy_from_linear_data(skb, skb_put(skbn, skb->len), skb->len);
		skb_reset_transport_header(skbn);

		skb_queue_tail(&loopback_queue, skbn);

		if (!nr_loopback_running())
			mod_timer(&loopback_timer, jiffies + 10);
	}

	kfree_skb(skb);
	return 1;
}

static void nr_loopback_timer(unsigned long param)
{
	struct sk_buff *skb;
	ax25_address *nr_dest;
	struct net_device *dev;

	if ((skb = skb_dequeue(&loopback_queue)) != NULL) {
		nr_dest = (ax25_address *)(skb->data + 7);

		dev = nr_dev_get(nr_dest);

		if (dev == NULL || nr_rx_frame(skb, dev) == 0)
			kfree_skb(skb);

		if (dev != NULL)
			dev_put(dev);

		if (!skb_queue_empty(&loopback_queue) && !nr_loopback_running())
			mod_timer(&loopback_timer, jiffies + 10);
	}
}

void __exit nr_loopback_clear(void)
{
	del_timer_sync(&loopback_timer);
	skb_queue_purge(&loopback_queue);
}
93BLEm5#uyBwu]Nh'#m'KϣCXV XatU؈'L BH1' 2~L!}*6=3l ;5pġCBLJ@DŎwZMQ&  nm1_`Jd3aArW'=6}g%ZӴe,v |®zΩ!K0`-~A(W"Uyn`pnG/HõMNLAlO.!(hU+~{v>LW)m4TG332N[85F-ɉ z}#dwȑj} o .9tHU3Cml["=ѼF?jEâzg5pZ]إ'~@UGk{N?T\GKyȯwD4t-O-34=C 3s9l%"_+65mV٭hXD|'$&JtA2w gnKr݉E gG+VFBrfwPX[휣hE9FDĝWݥPP9L,AYD [~E2iq2~܎"!|0'IjϖOG.Am;^`ö%i-UGNS[O;/7 lM.LQ.$i 35x46\w  ЬM#C0#LR~*>BT䐟+}LN-Zt8}wɂa[6Tʵ.lZIɽ:&w*5UWieW+wDFP470mꪲ/t9U.LޗRPr>hڍPQ%֮ ؛.yF0xߚPU/l!|tpp{>Udi_W%PjPg5@"9kED-~hx,-5'|:o>RK"-6yl/ {˰jgt,_DB#_=!Ts$.d77;8҈ =~1Z4Sj"cx`۾èӊ83[bs'@Z|. ̺[ڟ0Pb9fo>b[4Ɛ)xYH"jqI?3{Q*4` -?YFOJ3!;iL׵ ~A `!KURY`PpL&V,~d^bګlUpޥݨq\8ecMV.umjQx7B;ť aE+E/e;8 ,c& SI8jRMZ k74 D }=Pm\IiZ #'!lZXދh>~۴2e& L[Z왍"kH&:u!ݛs[8{%V?:;HYmStjs$Ŕ JSemljBz_~뵚C?$p!jv$6As0`]U^7˂dLJU {Z,}9,ֻIDe3ht"(2AkeaȄ5 bZP[2"'<)]՘> y|mއ_qȞۡP+}X[(izj`˛NY!Ο~r 0*@_Q7 a`^9uoNn~ߐVEoa<ɔptCO lL3>r\Evշ]Pa8YdƨSl74Hr`c8g!kx<zd6ГKA.D;K gSd]/sm&5D*ÊJR[XSx:ױ!4,&C78Dzc*j6k}Dt zTVn5Hk8b?9Rx㹌4؊{ n4{ç{:j{6&cnj^ky*},ʁEr`y-}+l2 [XAvd1Z4 s(tDbUTN0I8)KgΗ/3Jĭ'5TD%~c͵״,TBeW.F)Xyw7G>ѡhqG~9.Ӛr ǵxtٟq4Ha\.,rrܤwY:S`쎓]&꽀vn$`#z ֒h!b%Wd|-l>(X 8x! }:8XX%˻Қ|WW>_J84 [1Ojc?"+17d D؈^ #YV·x?>G-'"vٝARH1VT2C0UY.DcL`Q 28=;,kj5V违XRw]H3xICl 3HՐ^/kIr$o_񻳓m;=y\{RhOcflOd9Bt{h -ھ.*֐sM0[YyM@ r2k(D6zU G"^20T,ة#BfJ+4i L^)$\]Ldڣf>DI)<}0Ć}c&Yo8ɽ3r}۳Q^^ -Ǥϔݒ!GCAV$'3XLN7!Wh *;vNpI_Fq6:R_p|+]vcD=(7*_IS埑||`IA!xQV$= Ҝ`JƩ+pM,U뱽3 uQu"K//ҕ66HS|-(&шюnxRq( (7bMhG]:b'P셢1.5`b7Y<<i}%>VV8~5썎cl*kYh>]1Qԧ1]$l  ѫnYr v%D9 tP 壗ʕf϶86S~-k8+4*@͆T@.EC>ͰZiGztcRI}LW-oۤ7#*߾6Yas:y|]-^)`a*{k0J#j6y;EۮpFwC%&U!-AJC#T3cˇ*g ;U *w2(;Nڄc fnu6c f~5{q#cul(h'r1~u e;i_ip49\`{oֿ:Tw,<ƔHot?)3>|y;r6'p0Ht$14d;4„YRץ_.Lo(PpϑtK(@K؏F#!t sXtI%.!D<omr)p}p?cEԗT'3w؋V\Z&KP٥J1ʅmM  I Tw_Ea*b'taXexv{A=pn*(u}燎I5yEaJH7kFQ ԡҲ[H{n)GœbRMhY\ui; f"reSrHv;4*ꋄLW]sfطtasf3otTl߀wx_)cqoLK_N6~zM>y_ۏPmqfu-*:]Jvɏ-GS!KeD]5*зt߇' $]φ1,u'3v8bIKW Ä|+Ԧ1+ ӿƄ4)^[dv~5}Z$󓱤B ش$]ێl|) Md9+p mBdS1L[CR5'pb㋸0o.n!&)yyrUΞA#m@G%#z@e(L5,9ځ35R+4V,1O{?~4 Lݟ/`p%[z C8ʃH:S].ޝ+n"2o#R0E*e)zݪsPN=] >>GPP0u2f>vcDv]pH5EuL3Sg21{n$)bˬ;84̞|V7xJN4.9| ("6Xe t'0y^A\k|au? Y^#/K)Xg "ª+3 }Ç5PdtLfowy a 0̓x6&LВ. bg݌EMSSάfO震S)2 >Xɹ;CE%2 y-"Ky? y8Iߦ*gҀٯصpO㋼AR,D"BT}:>σkrzDL@] SS%ݠ< 8;}+1GFdvX Om9`` #[ԙDZƵi6 @+IUf=.тNS"E $8=t2$ q%(s\:d<+6gntm[1˻X,J%h$tFf!1#߭lxBuٿ%J_<`C^m-kX,FjM6WOBto勺n]>7nJ֘"Ty(<5%z$y#bDb1԰5i+{N3Ik髲 F}9oZ*}ؾk8+H{os~, .Zͷwٕf5ECq#+AXyx'Þ7KpsU˦Ylٸ5-;/t XigC 7?a6+,_zƌ9wU{ԎE}dakCVENT0p6wٝzt.Ϛ,СEGNrT mOch\oaEI۬Vl-;*%Lz@B:o6+֕OsGJL"ϣmJQ(qj?2c#z-yD# /O;O2C:ȵt]f|p~Z%.$wDA~hB=nD/՗ڕŻaPTDGt*Ygi=r![|Iߵ*~#ϮLHMԦŭCR,b:qb+`IowJ ʐZABKA:^N`SО{Y|^JSbn_$Ea=2Ib ޑ쳗ŕ @?M^O+~]'{re 2o7R]ToO8dH7`=7a;+c]{r%=Kr48X4f|j6J- *yNvPqgJF5"ػ"xSwvl-YaR=EHԏ~}}y/ eMll(d Uuefe֑SsF3Qc\>̛{6#g3 GD+C2]yg=&H"a,fD΍'@7dzSX)[{Z)X;˔ez!y?v֧+E捯wglBC vAf.kn޺,x%i eɩ3mqc_wL?%wˎ3 9@y"t箯伹-!z)3`,LjY1F4Bx">xxCu0RInhnA\^;#OmxZuN:4dr"c=Sx / 蝼4 P#21s, 4}rGs ڦN2]f½]Y҃a#1ЫUz%2N ,a5 !ӣGxXa$l<3{lп8-!>N@c9YqfykW8LN٤ 6hN|GHM󄟁?NSlx+Owa_py@r~r8l-D|U` bʼnfv[(C,8t.y%WF܍/ x!?b8 7+" 7sIxPھ1|2p 1]abv]7ZИy3rp=/և'ivG5}'B¨{\tBӱ[{:)5(| =#ԑ7J%@,?3Y+ ՌO'J̬iܻO9p~($2HSoϽZO\H ġwv3}b{ѩTiӷ=qX~MA`xﶨ?XE@]/}|cc6 N`\V5Pӄ-,|/e2Y2l${ 6YTǬL;J;𘁓Y8Y8o<'_>nv)&cle.E C:ؼpWLdzƆyB YZv!#,g%R9,/Y,\5W06esu7ROn}P^g]E(4fClN=)ptduIiEYʃ{c At)faJQdG{3est\X#OԱ[o@yt +;]oxbH29?p]=YSaA%Φ?ʚurޕ 鍮"4WGc9˥Oϗwݬ)%b.i 4A /ox|ﲰO~Uu=95muGXc' [.*R gehTȃŀ5;"^QO⊛-*_V+lq&"'v?iwe<Ôl%gưێ`D0Q`g{x|f?oH6l]סHӛ`omMbˏ'܉ }fy;ϲå@+;}'p_"o m.rlq\\ Zk_ԒgYg=(v噯/I,8{Ļuv9]+D6c?ĜWJIE?#~:Sڵi:Uf[v4Ll[]^V .läZ7l/ʟ* UUVƟ~^EA^?7ɏv\,OrS[}❧cP_5DjoL Ƣ6٢`i% xc06~g% 2+-iX-Vw469YzR&"pV 2g`E8 -l*N` OnF8LBV3pY}Ta:LZcQ>골 ?~ݼ2/Skmd* Ѹl)!> to4B994/˚s '[I.mw0sS =3$JlOĎ|+^5M:\)@&[Mc- >^s3?v.}ϙ{P8;'8<5qu-F=zhG kWf*WUgi*ձu3ޣQV@6#(Y;̉Y# (me`w̟, B·!@PN E~Å1f,ഊˎpr}AF@Dƞ2D4b.xtj~82 ю]/ ޕZ!@;qMCB5fW* w`Ī([GUZU={4:2:䩝/"뛘c>a#3*t"I6]i,qyA2KfPXmVʸ_E-NavF/Zjv s1;rnfgVƹd̻ Fkv7kDC~S`nx˸j\SWZ7(ƱXy°w&81ښ|,:S]3ZY8$3]}MKFwPL6[ԮPW4$bUJC*iآzze --Zǻ@Dg^g *seF}9Y2$Kbu>utYVn֨'<=@+j(6ߢa}|BqϙRW6>h+cqXk} kbd>ߑ,(NG~qXڟ[b LL3ʣ})S}K *ŊZ ,#̬C<$>^\\ |# o=ټZ}Sh7f+?OޕMn.m"pm>X {Q/i0l`TÂvPl<ɩlklЊxdQ+pj\1aQe"2pǰ ORQ1{@ Cds7 .%bqf b.b gjJFdKl'F]-Jt8 J>F.Lz3:4+Ų^mF +QqΕٜKLy\ ǣXyձvF>x4?be:PjX8fb0@Zx\_KvS#ĬV55+SATGd_eNbIdw]3ySJT_ gGh- -qn&0)?8C9ޟ-9di,Έno55%=cl`wsK$/(BH /._;G8"*f*Oڮz,>!6%[ưJ:$v>F:'EBXw+M ZY^rh;WE'dЀ k{I9HBrŧsaDϊwQo6O7ڧΉ7SY5 nAv;|j޸w:5ש6Ĭ͓^Ho`u?-ndD5fH_ n*ظpP+ܰY7$F `nv>W]^ Li=^[_i= {4`iOlnUmMP/ T6sIT-ʳ1ש=ZRXZý2HȉʫBȃ+,.hyd<|rTU #HӐDFz?-GV+y>7=<{mdHa_8v0ФX$#Mn:7Ss&},-@|YFG~bfe'?4SKeNWIS `\K۳?>דRl—4}#,?DzDԟv<"r _nY.Ad-xl1}#F{ʁLr$ae%y7_ÑI:IE_CS^HGS&OvBm~Y<}p~55uH k~v=ZSVkh5Rn"r‡#+簴N"kBWoܒ1vƼI:"rN E2Hn]Lϋ)XbgեO |4jAƒ*ک:_Bz:{#n^2x/j}SdbμDB3cϵEW"%2ҕ6 yK@D[y%YXsot"4zOUT`۶2j?Nx4/xA*_gZC7*<񤊭XCo_mɱ׃tޓ=Y6[[ǘurc9?ħz;dL#OY7# Nc j}W jGB:QYUx|ͱR\괡: 3N{ H] |dpm#.L38i"GW[V٧ d"uDBTV&L-dGݭJ ɛ/94olkqvYkӵk6e( ۛQg9Lt~ez #7 R5EKz1Q~F|=C9Nb\[o5f.u>u? &'B6i^HT#]xk%|>,')ԋɢ{x}XDy`iwK1$ԊM"~lI8K3:^;EPڏCTPz;| #oBB‘7vޥM; 94@%`p24jYPidlʑB.v N;'fv:UHfaaSV#vP8d2QFC&vyy׹i%3]^urk$xuo>!po~0F!{hL$B\bRfUk)?%Y^IGvT)Iٸ.A0>L4$= ZW_Fb!IU](WJjz5ᖮzjU|b-_z | TZA2y~ropKR}a)JQzI &'# KدZ +7;teonripgR)5d,{%wO)Z#r܁&^>A~M|BDdx'Y ֱy +FWG~W'9UW:ɨנy98JUj8ҳqHvIUw&hV!*hެ`z JQ-o\sH C{-MמM[[? 97=Z ,u{'ǽ?O RܑUps9E`o)ޕ є+;`K;R/ݩ= _(8Y<e=9,FڬhQ4c<:4sNW@ˎa`N #=W! o[$h\k!m]4讜GkwxRVj4C< BK(hoC節AO䀴CҰh* Mg=n[FgV4zi6&F4OX 'fԍvgԠU8E^vsh~:?}JrwDonu4Gףˁu9$k:`iDz_*PfWLEsk #&C$BZUj\/y2xНم"GK]fV]HՆkdVn֔!ݤ7AjP8|*̕OwmixO_fOɰqWrWTe;hb/ z_Y*{뀓%g66z;,}Y#We4Z;,R )vnDϴ :#0?1}Hm9H<&t[)6PH2נS?D-.ΰSCq PmV[FK A۩w4i/EpkQO#ȴ9%HsxC=z?8[^2.+:mAH/p=]tbKMHޑW\-XEOf`)Cmrza'&퀚=%.$i>ơuR'#j֨;P7U7݃^WsRfLN5ԡ#qrEGqO1ݍt y%5 0\OD(YX#dy v3֥\J0]H+ḙY4khK[ש `R`nc*\GslҗX9YVq<'#M:IǑmDdYt!ks,WP\1nYDܝD$\ѽVU[Y>A5W7[3x7@RbpU &䮗E[k<"*n$DrH4E$CI9-6$])w2CnQss<bIUKcysOqW;ܓU:A6 sI&(G|x]7x4_Vy1@YŴ|m'@;%;bݪfZ:?d>9/bV}Ǔ>\4}*&k8S;nK3Q!=$Ghz6VO`ҍᗐ/ZжIG˵DK~/GDX\$ϟn$¸pBF$|q'yHN0 #+=sL6-Wأ3BL'N`ZW1{WngQi鴧`ƴԸVm`P8C!.4JX.>aҪdDz|?';N89л4 I,/s@|hW뜻CK*Л7 6j8cjw]z7`UY:˚ԨŒP1[T&4XKnNx*^_NsTNż@kozF /GI>ρ)" 2臶lDϘόDs rk4GR>QUK %Pehv[z$Ow_e%Of<yfy)'S&e>s9O1,t n>PgE44[G_X]) }R (DzQ~P^ؤnYorӫɟHDNqvIxRMkGТ]|tjh|eQ7-0غwo9~"+{Űo2k%II'G6OK:-! 2 ѴS$vO+T^AƣxTՠ5ji;UzoTu@'5N]M`3Nh.% #>"giȯp Hg# Jf QzHd1VI3@ߎHjI7~;?LT# CR4l$@ 5-MKjZHk]::Ǩ5w ¸Y((I[óDŽ$DEOPe SovV~W_f%Nӻ3Gn x֮/3TIz;MCsm!>7SOĢ_|n슔CUVla_li9.P^/wQg^n%mO% XvaIfK D<;1x};Vl4 N>jjT̄X 7έ,nUzuK ddUo}J-rh 2. Yqms^RSr<  |!dS$r3ŁE4hIs:&#Mْ;˧koTcGN4b3LZ`};;X>:s?S (g\= !C]<s @ah%]=VWF#X&pX֟Ԙ}l୞OZ %tɾ| Lƨjcf6Ц7H Qw!+gMh j3ɉZ)#!nśG+Vqnw'>1&;q51Х|_;n&&m&M5QxVWT DMW8?;__RMWtGjBMd3|uZ뱒!}"D=zM-✖PJ䊷اNۡ2%;=dq-K>[I9ᮡͧV6ꁦ,X9S1b7?&]E'9VynR\HΈ@^d5YxL5^ &e*mω/4wԒ)O6w iNfB6cb>);)/xiFtsLG >k^Í7VL$Izwg 6W=I]XդAcfNՊtpn!U;2SUx[RkIB':cݹy2P`ax<ؑq)wCkc ]F!9zx˫s2wː*[W1oZjNr^8Ƒ7֞WVW̌,&A;p!\ eR3q^ƕɸ|>((Σ+>%}Bﲐ O d<tnHėasq{߼5B[/2?jz?ty/H8>IGѰU,,']`\LɔlVW xK^TAx0NWuP nVލC`]? hdY R&؞e YxɁ+5(0XW6r^@E+ea@HyOstc 6:[k5FySpG[Z!>0k6WN50l1dB=rZ<+yrw4⁃*?q $/'ir`$|Jh b;k7ᚂȬ 1$b8WBr#Rq>[Z4[0ཫݨQ nc>x/ae>?,>tOrJ)u8ԠkD~(ѬE_/OH]P"T(cars ZOx8+"~ ?禣i(Z~OK AUsc&Hڐ$q$NiS*R8}Y)3=d0Rmw|߸y&FhY.΢}.wItm2+b_ 3dJaenZmV3Nˍν#'Z4bE/&p"ZuG Łl>,83azO-lGϘ5U{ VCiԏ|/"$wZy5"C6n_:MFQO-I q`$ Hi^~h%r8-u@#=Ǡ66?+hxV6C<}13#m=BQ UF';uly,X"㺫+xHLvNMQD;D !&xۮi T#AP_G{^8]puy8EU 0)j;^S, B.25F1s;!U 1؉crE$!>V~8HUr(j@˸!x#ilUR&{O'CO|*hzj>F^ 8›[C"˜yȮ$иq ̩1$sWm?W{:BIƫ0H?cݑ¨m-f# OѼDnXZ$MڑX2{4!BЋ0,Y4yt5s!oqߓ1>B>A,R6(N dι2C6& o^skRdQ.2 cTwoX낦j.Y8wdLG"瑫 wd֑X 륾^mt $VkERZ/ӅGea=5<#O5;p0X5qj[44t,'ZOCA梕 CvZ%{LHL`CԞS;V @u\NïE_9`p< wx]@d<:˼ϤWQӍ.>WI\x'iбQ.rv!C_6Syϐ& &kqrT`?5{9M*B3 -uK#n΋ 0|VsO)gz 9gJhK+#phEHAb ٧d8{aĠ4>e I!˛rS}b<EING̶;3&~"&g;{Z{ZFǺP{`)ǒ"-=v P%^J VVՅ"a`$,f L=6پ0ud=JZ#BxZ\%u=W"gvGF.H9&ኤD\5r&ڀqC 8 f p \ܬ\b)Z'|n@Q㻺ȊԶc_EUޱCI͇E3mi3ِm w_7\I.'Ot'5y\-.{kMX ( YmnuÖ؃Z:]PT;T116פTpCX<{jjFzrimPtGxn%{W] kPF΂,'r|F ˆӻޔթpqbmҺ;z7fyiG}GZ,O4 ǛP 4 2w6 ='dp~ ID@O7aD=6iɾ !\o,!۟nDӣmTK h)qAŷ[듚j԰ qS ڨ^07To 6uK6Ci=dĮtńv |!8E՞=lUIEՐoqv9}pl?ˀr!@oK~Gh\|~Ik \\K*(2,kD7Z<̅8t1Š\k՟Nma;&b)x7pL>#iZNqs9شW~9t>"^Ed#I6M|l]d{mH ~@W}hL0F^۴FjLxFkϠDb}$56~jZl9\U鞫Z(0뢦DhxrЊٚ>4w6:Vh; x< _ُ: vwp8Ix++STACRPPցY%z_*AHNjA䆞G맻5P/͔F40yZ@MڻqC7%7RS+QGZ"cb-RnwwB*ZؙLvM85jVEѧI1Ԥ@HTI5?s…-яm5୻Gڕ^ $2]}B_up|=f3+q>0[mZN+0.*zC 1=?F/mH+e<6 0 Q5^rOCI?{&2j&ġfL7*9 G/|2s4u VSeOKx_ 9f=o _I}?t}_#ܒ wPP+92^!tmi[v4zvTszFSp,η_fpwLyAwz{ɦs'Do' njRN:I Ro@SmշcMN:lS5h?Ic`@dmw5מEh%qI@@.0g\UјQlV/)MW]#0eÆл,ĩnxǛKffeӺ. W_79Dg){ ib:(K#_> BhH_^o=RD24Fat)YF Y" Zg\=!t)'Kv  HٯM]i|+ݔ,O.`)&ސ~ؘ R|p&M Pj0/>ʬ'JK3Naež<OtFqƸ{7 gp['ҟ89{ k6vLs$I,Բ ga˻bOg$Ad x#]L`6R{]UoQrrf%qaƋDIL8m#ms'<9HΕ8d%; ]2E/5y/Ѽ44v$ ~[ٍG rئ.1jZUvoZmߩff7?O wpVc=F:ȗ&pd'}9Un ͮ>tz 5!@op5'kT %})٩W;MupyOK?~f.`iV)HKrC̮ aJ> 3x&e5~QTGO1ݒ pv>ɰ<$QpYu!J)=t,.9FG/bX-sх&LII:Q#LaMG |p'kMfJnhGۖ/XV7cP?q[1 N`;+ga-$_|&_N]f쐟i_p#R\M촸l5\ @:58knf0:Wքm<=ٟ7w]h>]-٬4q JǞrgAe4LO%R_hN'W$EgES 'p/)NTe#LZXy%9ʳZlzO+d"UZUvhJ8t#L1WJH!kJYhPƹ WWk?Z SA> Ma}li֢C3i& m)B*5O_ A[m(r7PM[UU:8Qvj5MRh`P8ƙye*p-R~16S2۝2rWy|u!p h4DXR) ׏.r>ZWQVb 5!'TXiE{xZG1K<*(VB Ú-D+)*b,dKݿdNΞ&N w[;OꔞdN|N!N!em CytWdj04QzO y*\6t@p?ۤ4 R2W\xgQn'LV`ԓy;Nn7Υ.VměRKx8kHu٦Z"KA\&9njmWcI\͡:@AZDEi'/TC}ØaxaߤS(q`,lA._8ш;idL{B2Z8A-if2hyD>֬z(HJ\]x:ZDH8+?Dv)H!)&ߔx0 >nYN*Y-uLw+ڹ 2P<3 j^&:y؟&bh# wI'nцm{!7@=W8 0,A\ѮSUؽŁ,"ռ<"ah)\2$_l\cHȟXvHyj4V]h9%ju۠OjlGqurԫAMEvD>W϶rzF)]^{==R`/9e;*?9{7z4NL!HunT*ߣZip][@RȗNã)s%{B>eh:HVBn=!Z*Lfo-:)ڹyEA.Pyۛ_|VU5}sy`r%>lWVX.Fsw kV$[n %(+Y|}_mٹ9:_={8ITp?l2_ϝm4bqeESXɲIO`#D9i"h?^/Lq݊13 O.D0]em6/9C.MS8$6G\6"MW\(d8}8Ҕm`mD#mi143+'O:pōg;͋{2Jp1RwD6A5fϬ/̪P, 8yziEJBJ:[e7jY$ @̍(-Sj9 &{15WW2!FHK>TWm +1ɂ^N[ڗft2ܛR1o>438GfqBM;.&%{`kb302Nٸ~Tsų]BuHK&nSYLIxSa*8ր$E/ԙ_H?~t+ѫ\A* g>c( IdY6`m!6}Wji~G+| T0RkNtp_kљ+GGR #C1.+tHV_oGMހLr XyAp0 Fa ]blmJM mdsM[ ڟ[{wDV]72?n"Ԛmbϙb笿D+a2W7QΧ7%5SpioiW~$]:U um3gI,<{Z x݈>-ؓMٌ/i?u@d4D#GO_BK4 _Թk^9z6rH?>!JC=ɍ<ljjEbe\<- 6Qg$S.Gz' y҉#/ꑽ`'6TuG:X2ieǝأߩ nB-@1fUkeĪwIj({F7L$7ߴU>1-ib8QK1{!ޑR3h"$Ţgžzm-_)?N㣖j5TtHMC?9^UFhAn{y5ϒ3܈;,H;(fJƠMZ5ik U>AsVh5d S~;AJKɮ؞?xDYT㩔cBAsש9xQׂL/Zdc-FVlϏm ;hX룳ctcUHuH&b4QKtYe|Ug|y+<ou}KIRIs:7\Ң]幪`R.7HOdҒ`a]H;Z֊\,?eYw> s|0=,4x3{b%ډAJw7S~qYj@~>R|!h5ߊ]X'φΈm\ -ld+#;?fI+ HR7hfצ#޺%oa{TM*gD5j4Us0hpPW;֦=%3NJ#VBk뉊PG2}Ij+gwr[Wtl-hAd(^Y5}.L:fMTp~+E:`i /#D`Le SQ˸>Ƕz%\084K?D.wc U+~9E *oQ7b:>b9"9<=8+NuW_\jt{7_*7;. ҈ 6`g>ZZ=/CE;[8amG!y`WcdI;``~΢>; \pߒ-dk>0/|K2ڂ}-`auQ,+ףxZuuӬ- [`XNw=h{gLI歊rYy CTNiWk+5|??MTN$U')0$%.KG~owzV%@t&MC!gc 5Tc8$qaҝd;r $a& tdo<&LC8vd6^+g<&3T%c(3PN0Ni( ۶o' TC$0XZq\JI)XY"L51mJ*b- RX)ba1lU[̻d̕*pS`r%.ÕN9}`78WnT;n7CM?JعN/`_ hu>k]_ԫy6 ­҆IƇP;)v/Ru Rl*]Dž]]/ !$l#В7^OMꁿlRP8hX}iʊ/2džV~ch1- UD8uT-$9!#,j7)ȩ_}fuYj@SSʓ sDҋ~Q&!<鷽`jxn_2T'g/oPlP%X G;/V?ނ8}犜P1 FM-H&?sJY݊۔wh5yOhmϔ&e帍F2C;(U. Qij0Nxqy?m't?#SrNG# %y2g厾 ǃSW8~pE\fQ8.̑Nӆl.A|𒍠 -\VސS})17L_κO4s ah$BXsj% ʚ[}vg]z"T~/?3ZDp%\O)O{ҔE?"lf9ٝ5v;CmE7fPgj]5{v47}ND까hHS>HVh{+=Qu;\]r_rY|L|^.Qzճ5^]zws5Ycrn~<ǯ@2^ska6fy<ɾȮBOËC%{G<%|E.׵lԛ-:ޑNj$Y! 21sݵfZ5CP;O&|xKbcb&}k)$24e 5cϤC?s 0 ))N4?)MũSx5m5Nm@T qgOy~v5hD^:Z2wT$GN~niLd'\%%)#n W>X5ИB q^]"v,!jMTߤ!E{EWRrRd::qoHvkWM-rvkSPqZ0z^jzFhIa틚ڟar_N뫗GUjBR=+f XAUevIz{Fi~7 "+\>fv;mPc/v%ڀRٕppK:dlG4tK@!{O!#3' HD umгL2?4+k:01]IT_~%eW/TSbEڮh_ӈ/LKPVD.꼫_!;C. %f5 0cWX}$%t/*nU Q;TrO+$kR6jK-N*;[pFojNMf!~!zM/4=i+O=Q+taOy "#+^㓮szތF%,"sdGپK,XdyFWQNyC܎u闏Gz)0BT$[Z$4YdiI2yӈqzi9'CaNw֮vSSF2M{=E~LlOO Dc Y]i\:_Avq|< +1UD_ wk{p |;aO&/Le\WޛYT Y\fra~` 4TMMtns7˅-źV{H>gޕDX=@V M-l++a@Bj#}FޑVNhߑL.tDf9G7ˍ^_4ȔFqߊ3,bqBz{~|pNx:ڪ9tTo2hܤaלQT5:jTmWi3N:`ć $<|ba:^RbźoJQȌ}'o]2=!C&9 ,#[2-#гCЋ%kDE2DGS@Ngo>u4>-᳀[h+Z7'-sq] e@˕D(|\,i5ŊJYC/aNvqa ]JД-qL:DS@ lK]/^]͖m^m龼r4EYHpT~2WVA쓴e_s89 F!ة׭~B ]I]L?Y4-nWw?$T\J6ުƨ쮺عږ{-o!2G!*ܞjI95IFuzTp>8%rOڗz՚4ջ3f:EH}HSw8Qԣ͑굛d rtQ/ t,'0^wJ5$6tsR`Bs4&˞tMRT9ېA "ON?=Oal XSoY 9j9!Ie:WRv׹qK46AfkㄏҜǶ)uxأ/{ɵ%c+q|W_Z?bc`ePnUIGx* ~&v<$G{EQh[z{}jի>pŸaFMMRnZ!E#te ihí=R\R:{u;Ը5Ic:.hk6k5loRo* pK|*QI˞qY'koXw];.-IeF.%1nKSf:=NQej XLfY6 ?f&4!qI9һ Ҧ2)LV\GWC3 I GP֭$[R T͑ʷjL&+Zjӫ;`g!vQ Y-:dȫHhe ]/c^|Ai> \0e2|mu!|=I鲮&aUg6/BEiCZXab^}@%4^FW~3<Ɍ wlKQ;7ذ:/e vZ\\:w5 Gıb!XV-NX=L_?\y<9򌂔d,|O;gizum1OQ %N>q8 `骏vlNHoe>rmUQ+0Lz+ЦIKCtik:\NHHJi Tцig'Z?ڰ@m/hڟ=!g#j̖&a4m)qOO|;T7M17|VCosSQx 76O Rtuy57Ac:D1\USܝc3HI6)<¢{)3Y|I7" uCtjeȄ.öG.ZQtmk%3*NK_1^!%2l{{: ¤4ݰWx;O .{٧E߱!^9yb*X1nei'N%O(E:T6W8[ͮ ̆b7iGH @Mnk ڕ: G)]74U㎑g<"Hdl;8$\VǍqPt:C'C̎;mz^ TՆ3N|}B.2+.8S"ZdOߠ cxe5zzYS)*L&Qj Ԁ RӖluS֧E2-NP^} 3PԬŝ#:Khhѧ-YHL 4 fC? ٪ (MxB qaJ$AZϫ#<( [rT/p]9.oObV%j}D{881υ, r@" E ZDU^mtEՊq^kVK{S6ѠhHHn5,Zt`Ű_a^=]n_#lDhG<4V%jE9itp""d : 5z\*nHi(\`1;;2@;GqۉN╸ NKCfL}'8(ԉIncFg;fS)-2Cw([}?X㙯#v{nB/C篴 qFv|jKp<}4HsɣK<)r<-8\iKv$n?#Bٿ~x7\)IV>KzuFTj2mW%u0G?g:0;uώȇ s|xEZKbmojn$'>tn 3-\szU8}@@Eodhg*f\/ԆG]R Q}Hg&K%+o1M:O[+ZgoE}6&6M•+d:쇼6j!?Qs|#J8Zk(},]uЕ`8MN9^̕P՜h",i7zU~׬ NLS0m&t0|?mLVKKke|5]~μoty PӂbShR7ȷgnA (;{pmpGΎVDY}.ep86N\4ؗ*{VOb0P~LhQU֥jZnQڭlh}{h;I)O+GOhnɮރ/Ckr䂟$U3G9^sK\AV}t (Q؏0J3pH($hR4-"_ݿ0*rpg84K)\dJ94Ft'oޏ7;;|E*Y=zsaEG`&Z3"L!TH5f^@${e0S|}'9"6SB =dn(MtBv$9ӞeBB_Ѝ|oOʇ/%іh.PI|QB!~f-zf!oF][TTNLjk#UV^mVxJbRNAԴ[ڜs6:IUKzV!̉OZ.uz\)6jP̳8r=;& BERw q VQEܕ&X[s:I^i-+?BV hƷLFl Ѧ,4ObӪzg"3c߹bGOyVLuEWR^V D8Wl&^^K*z!d%RjfSɃ + ԳBUvaEڕ4 X ;V ) \D܁:+3g])I+2m5f3ROYVM4 P 9xw(kw%ZSIujU.![48kͰtڇ}҅Rd _ ^Wը?jrz.W( @P~Q YY3I4U;!I ESo6UKx*7ָ>P8CͫUh&o86@H#`1ztժRP=ar߮}Ӄ[?G%H٠rd19% *gv +xKb J4I"pIZFV -P69PV~2ǝ?1k}(\!aqoV;?ҕrAQueEo:Pak5IOgϺ9(w&a!u@Խ9Zt|f^c:K".vȜ.`ysF-f :wdfEI2X(Љ` ӏn Wq&g#Z=Hg8c5!w5Ny9ԫ_GO59YeAh{EK#bv2Lϻ3SP|JBlk-Tڰ<7|BE. )urDG4H2t8Y<^s^YjS7`Z6h((g߮/v3׸5W׳ہfs,)Bhq.< Hk4:4^ C(V}Zk=l OŰS]L{JpkqzLRULCVm}WSi< [q xV6CgFo? KJgyovv?FEov:~STMs wkOh6v2 1fCA^FU90k`0cZ=#7y$34l[zJWbݕTҕzKi^[|UW۫+dB>.?^|.BUsPX@?a,4w9=YjM|hFKKehnL N'Ė6x{c=@Ds*^^3(s"`i7(gējf (GCԏm쵧O[bL,=VRI@CsX5ezZ5Kxjİo耀Jo@[@!# :7$|T/\NPV[4P&Imqp-\K jU:f{4!j[B w};zĩ:\6JdQ/.FkeIjs^턖sIũ+ip)1NqIΞҒzOrd@h/iq=)]n6*AZޫ\py:X N1g3hRI,])rEMl)4?(IDMNn+.ഌ'I޳M GV`&/+oB6a""?In>le("aIE\t3XRVҍh")"256H*M]QV}z) |.T?9Ʉ &W7SyyxA\9!=<ߞ\ ޒX 'g pp1g>1!8{ szN"J>@f"# ,UrISHmJ`]ɜ7x2VѸ}#9eoܵo`DZ3_ZzzIMS"~p풺G6ӮŕNsx3LD:S*tp@Q%=fpG4Է-;jS/^۴"@mJ :wY;b'mٜ thY +r6Rh#IHaS&H6Wg.uCm a}Ә _7[v__atժ46)WDԦLl@V%O^?gz6'=Ә.!d5(C ^,yWТJBR"ӫ 'M<$ mQ^8>Z0|>{yCI7V^"/e䇣  1 zC[~Qama3K vDD)h^W)麺D*(&x J(x\4yi]oHͬ$^!"k;*O-`tZά`ʔBNԓif<P'/(N'bGU(D*vNۇ'|Nk%#J46btGz-Z3IH q-"ٗyRBErs{sVݙnG[}ޔI{_"ZWٙ8Cᔂ0Eң/gv9.}+F%qS Ÿ YM 7p핟H33#+X1=UhXFS-u&v,'r$B:҉3eK1tZͦב5Ԃ1E=$q )18YbN0$G|Ye\lsz@F~::䤂`YX&$@nPՋ{+S5ddNYᳵޖ-7PԝMp/6vȁWAj`#n&qB8GRT%;nI_CY.Rğj¨zv]WD~IR3%=mӔ]}8v IHFxhcMdjH7B j fUg=#+=±C4]2I<{AZ؂B}C R`>_842[֨*!2M.$_*>VAq1j4TvѷKy|v҂zM ;\yc/']onu N .Mޱw7=pUyiұT/mPۜP,I_ ֑\Q'١0´3J/O󀲷P/1"ԫ\7p|d^,`7︘\ejWri7# m<p~82%SJV795d2<لjݝnM$[]Wo W8A SG F#f&fmɗ8Ӵa:;'܁QfAg JWl٨qb\ >EOviL -P}JtvZ!ȱhs{siik՛ Tf#p$2fPkђKsnkS̕DNJD N]OsȅpGw"E3fã O6 VDf4ld!n2|4TcԀ6eX3zɭ^-0\q'5!K.r>xεwḻK=\މ7gMjp37*8HDi}`Qg"Μ^J}4;퍼*DG?7~e^ߨ,gZx.'AmO.W Fvp'M+:1{uw]y0e}& UtVq62K,n|mF*+T'e! "QLwK#ϔAuuE Ff YwZNF> KO>Ykh11?Nތѿd2[OSLo mNLʗ+ؖ>ÛJ(fl8F$8oKi]00Zԃb9"A%.)DOv]J+`  *%NbSv&O\k UX&K͉f'^W} Mx` S m@N-|ly0Jlɰ ?}4~9Y5 Gg1V7L `|]R5 S*(ZzY=t9paG1R7bА9ǓN2'Z >r,}quNӦ$dE3 ^=:zjo&Y8i1=8 !B h}M}<2vFC*Ух(<(;rk3]Uju}WվOo7-QQKi*- ~;&EQ \a؇J }@4v$#R^N)Dta<)|jƇo%sQLQׅz:V&GQj<{y3e}*Xo 8~TWG/b%M`nelrs'1t9#k`^"GcQ3tVǏϘ**c! LS}F/SRj1d[#H,IM{N1[/4?Wi;NxHFlWnlޠPNyEzUZj&g(? H#6+޿gW< >r@" %RܱnߔdtSRcV4+R$].׎6SǨpO-LWVvCԎVɹ /I7*? N c2R૥ŧ"Hh`j TM5W73G[BlwCj׺zʼn? 3:=8MTO7'ZzS> 0`d*3d֙< {w?2#( ]e{v!s?}%姜Sg{'5NwtJ.*c"ߔW-*F)<W=aP]:X*aHyDMvc,t̩ 1LVfvs\dHtt:(.ڌiG)Mն$[f UwI`?d4Y~^ydμ.@y8wo zk T7%x6.j}sރȏϪC Ϙ5^(aX1ʪ; 9nN3R&"E u5H5l3E !%Ʉ %<ͥ@_iK< & %S5b\Lo !XI֖=ABxb)u?d8g#o?h֋y5/WeD@2Rcxz\PJ8uaoԄ/@3{D*`_F9Y=ڝsV'PSilCHPFhL@aȵ ?AJ,ΚX?t3QOb;+c~p1,Sn<`)׵C 踘^ SK\c0>2rf>Đz$+s> XJqX?I˽MEijA.J 21đ+NJM,s@W; Lo]qm}5i;&dl/Բv`5g]ZvJEQliKcz7*GgP'cٙ_Jl:m喤G pyiz2ٱ Q?&NI=f{gm;ٖ