summaryrefslogtreecommitdiff
path: root/drivers/pps
diff options
context:
space:
mode:
authorGeorge Spelvin <linux@horizon.com>2013-02-10 04:08:32 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-02-13 09:40:35 -0800
commit513b032c98b4b9414aa4e9b4a315cb1bf0380101 (patch)
tree3483659abdcc63cb831bf9ded62e981de3ffd5e3 /drivers/pps
parent6d53c3b71d32da665dc2742c1e8663741f27d3cd (diff)
downloadlinux-513b032c98b4b9414aa4e9b4a315cb1bf0380101.tar.gz
linux-513b032c98b4b9414aa4e9b4a315cb1bf0380101.tar.bz2
linux-513b032c98b4b9414aa4e9b4a315cb1bf0380101.zip
pps: Add pps_lookup_dev() function
The PPS serial line discipline wants to attach a PPS device to a tty without changing the tty code to add a struct pps_device * pointer. Since the number of PPS devices in a typical system is generally very low (n=1 is by far the most common), it's practical to search the entire list of allocated pps devices. (We capture the timestamp before the lookup, so the timing isn't affected.) It is a bit ugly that this function, which is part of the in-kernel PPS API, has to be in pps.c as opposed to kapi,c, but that's not something that affects users. Signed-off-by: George Spelvin <linux@horizon.com> Acked-by: Rodolfo Giometti <giometti@enneenne.com> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/pps')
-rw-r--r--drivers/pps/pps.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/pps/pps.c b/drivers/pps/pps.c
index 2420d5af0583..a70e384262e5 100644
--- a/drivers/pps/pps.c
+++ b/drivers/pps/pps.c
@@ -352,11 +352,44 @@ free_idr:
void pps_unregister_cdev(struct pps_device *pps)
{
+ pps->lookup_cookie = NULL;
device_destroy(pps_class, pps->dev->devt);
cdev_del(&pps->cdev);
}
/*
+ * Look up a pps device by magic cookie.
+ * The cookie is usually a pointer to some enclosing device, but this
+ * code doesn't care; you should never be dereferencing it.
+ *
+ * This is a bit of a kludge that is currently used only by the PPS
+ * serial line discipline. It may need to be tweaked when a second user
+ * is found.
+ *
+ * There is no function interface for setting the lookup_cookie field.
+ * It's initialized to NULL when the pps device is created, and if a
+ * client wants to use it, just fill it in afterward.
+ *
+ * The cookie is automatically set to NULL in pps_unregister_source()
+ * so that it will not be used again, even if the pps device cannot
+ * be removed from the idr due to pending references holding the minor
+ * number in use.
+ */
+struct pps_device *pps_lookup_dev(void const *cookie)
+{
+ struct pps_device *pps;
+ unsigned id;
+
+ rcu_read_lock();
+ idr_for_each_entry(&pps_idr, pps, id)
+ if (cookie == pps->lookup_cookie)
+ break;
+ rcu_read_unlock();
+ return pps;
+}
+EXPORT_SYMBOL(pps_lookup_dev);
+
+/*
* Module stuff
*/
?GgX1|x;I>¢)#EedIa_wW?w&W=5_kT űz̵W_k矔X7o3_`̳Y9ۛ=7yeu)h,tB]` 7թ\X ya Q,٧zwOI#Quxk & pC0g0Izިt܁˱qDcQDA|k/FT͎GB57TzRws\85vHc/NݷLɧ& uZ^cJ;`6Ό%QC%j9qcshHǂW>1Чva*0UW"Sm#kl՛-l|0a"SPk0)i68pe4Q O&{MQ'twOo9,_\QQ`ŋ+5KZF͹tWeEfUAq'&j|3i d$/O w;κ79~Lû #!,!0k;a*X 4+Mp=j"0g=`Gnο:LcRه6L ][Ix73EJ`yb!Ji(bCIFa^eBMLH@⭲-46AgAV$˒v ;Y̨"5YpuaC魂k/&k,fwN(!OIb[M(YoR C e7Ql(ZN\e1 Dq^P#LIMB׍gج!$:G_5W;XpM8/l\ϗ t\ &JR/QOC-du}iߖMN{C\KͮS>-J bbsuϪvɆN`mYbއ WKc\:Sw? &4|o=?xW8^~7[F/s(NeƚMz,)'_7-Z/⯣Eɓ}ʯiEW)v-߭zŮ6ArOyOynNy+y/Ǯ2^V64k n;>n,~n#sتsuیDLA_szK_`%Pns !zq~> ؀"CCK4^g,+ 3rۧhhL0DDϤGۼtKQjur^| ucMwibxu]b}+^@jP㠺cõ,suofCK:^+y;-08ç/f  a{rqy ®岢wgi,ل+ܽ1O7мW iҫߗB.ٺț1/U ( \!{#`V.zžr fUx;Hr{0lrQF%c\yÇ#l3}m|_=2w𓁸ɥ?S]yqE[]N|`vO_.|֕*y]2K!e(q=Lsy#UKkfw>e(f|WVJޖ*2^Qϩ/qVi繚?e CP! #nc?eF({{jʾ*ɹm `rAg> w١|KV-ͭ{sDXPJ2|FWT0H]u$/ O=g54, ћN'|\$~׮&ԻsίUؘ|z''W]jjjUmj96c?mMUmF[`(l*|6PS@GgwGD|2*V|4T:_dd?HEX>vxG}FL|hTBBvk>0~N~BBX\=~{bxM y:[y[ty MKkH{~~+ HȁgC'$!b?2 K*#X *x#&k޵>NBʡGۧ_E2+aaZE>,\nʩ RK* 6jϛ˷.z)rkƟ9_cYX&Jśiz×!NF|)1!*LAG8d Q=KCf7}3O\? ʒ uItrd ;%~ZYd~tg1.^Up!R(W%K"js!|)T:տxӛ07_/(. 0|AGO?/a悻gDC'-!)tz*2[ӕ "O,`ZAk# h*%{Yd|4[r:D[y\V™ϢbF2 "`Vr "J6ٚ@!^8^Ӑ{89y!o{d L`bLAy_#0W̢>h=JQEDRi=c}e#ވ/vzAvϳok-_oAu?WWCpeUE0@P⧮&Jn_<31-Rw31`'~:Û @$O66$xʗ87b"bcq1nS3~ a nHBhӆeCC1{L/|pTGٟ ;~c:^=ӥI)/}C)1-p|J=Z?/u~npi l_6 @cFDuәX &È# vnWg}u5F;gXh, 쓙]7QXdfUGGkQO#Q4;dкXYty2CvC\c 5l/{r6Eٵގҿ;/'qN /PL]A%pFct2]Tkg|(oeNJ\}<7+\{Ak ;;1 {=Η ,,)XGU 6}G_`lkr e$=*tQ {e2v Ag#{9GYwoO|q=lPn9+4 4u,MFw2ݍ~TpG!3|ݚ> Dމݤ>q{R96/LJY/<3 .ԭ_=c`άs.|UJWlO0$?nzZaR D"#ff8KZ&GtÈNi&j><_ӳ`ז٣Ϻ/;L`.;8qS9-^Ʒ>\ 6˜gx|R׌ GoE`L8rL39QXf 8(J30P=0]}! bGYDCXz=NCʫ?}d.%6{7|,/?^p@jmn1}UMgZH!^טx'΁N9x$e(b~=&\ {@= {;dA;XN8Z=sZQIyI d4Ar ! zq6l4@pEʿRP}`{)ݥYo5al*6"u,Exv={=&=w*'YIFk)KXҀ_Wt27`:yteq0ب~_z -)eശ{Jv>ߧWú#8UށOT@]M7ot' sm ;;ldjնSk1wraP|/^^8C^a9ɲ> vyo䞭1nI$/`d=@hR03|N$B`Y˷|fn,*q_<}>qm%73;{2cfr1 xBZtvWW!O,=fYnzB=fU(2<W-vtAf ˜[Tn7ۤZ_;a;v!wL=@z_ϩ -㿻 = s_%c\}{C]w95 KnwXgx͙cJ8ݿGuR:#QKEÖk6Z6v9ӬI,;ʹKA P)OǧnŻtb[ۇ=';5=#AHsl?m`=tJ!RNٲ9g/u!j-]^[u:+Zup˦ޱ^#Q~@NoBpEIT2od7sn롆LJDurWxUzϧ}U8ty{:"뛶=wgEԾ'`6w jֱύ@] ɍw:^4FÌ;=g˵a˙/>XuJkM;6nu@B/l'ZݸN~k3 S0.GKcL{ү>!<\G$js~\!ӄm ^~:.J}5m8[*Z۷>/z+ۅ7wuzz'Ԙ}U!܃2=o"G0}ቛ+=i?KEKrD?"[q?UG *)׿'ݮG3w5P(gvY;& ; "j{b{8;l@O+ávM0Kڝ>r7g (kd3|CeT CrcL9 ]Hf6NaJ3Mds(ifoV_*^տzHI*!Z`w P0à8fɱb9}t(1 QCxq ll% #ܩimpx2n\KHCi#y"lBX,vǜ¤z&UC@Cv[ep3(-ٛi;o*~72NNVτu.w vb"G~2Ch˵"H9hM]Zꦖ<]K[ت%32!qv1TVdVco14K6kU"c9 #~(;ц !&9e`9I騎Ӈ ѕÛJo 4s>3m]; $hi5e̝mݜaA~6I)Q2 4j Guà aSa\vP e9;}[cs,S$f)Ay$RH?!.:ޯQ3|/*5Քn?2'"Ofc?Q $٭_w!+}c_s BAߕd[}$Q}a81T6"=wG3~}ϯ6n!. \m%oښ u||!/EVBRsYd!E/ %vq l~H.epidW}[_4AR \,'ΰK]W4a6_~עs Q w3Xg@Ȅoe\Xk&bNP"nn P E :'`EuS-Wd AQHZ6TO' ?ݧM5Dh]q~#rT#S82"uZ ,u6OMj ;<`q*/vq} hyHG( cԶx@8ChgתOw$#ݣ ffմ-AgAKbHQZ^CW)Q6|;!@7c=~~o/Z_Ԯ9Z:ACK;w2d{]ALny<#ً'PpN seіϞCǵ{ [˧`MVңZD&E}>΃,Y~@fGޡgU˯s#l^ 5B|yǺ;AnԱ #І!:;>z lpq,Q@99j.$r#tq$Yۍ[N}Xg`6P+KKha\ZDF&wSH8{D"OTc:LʎXpQ]ru狗UO.)C_͵sno:ڪOiNdCAhbƥĤ=.6!p,X4$P;H"trEZaO9seéCCn:sWTC-@n#pxczG#TPm=r?i{ʺZYM}+il-p[F/|VZ:E^utu_<@tٯSXzOggDDex!i,lڄykaD}ه !>)=F:#Ȉ :KcW7q={ 8ؾhx u]׷WDmT}Gt66QYټFgט? ǹ?@Xu;x!,6 m<萈ԝ"⃗EukrwqcVc̸jm Gu҆==st)'>\s#ң~MTVQyvL~3to1@kO~35ȳŞhҟ4:l3ic7hVSsH>Ť]N/plRm3sa!4`!^=^9%p"/o"X6%>.Zyn!!N;-AZz #$&*wBjQ ۬'ލ>oWD3Y/~묒(M(ċ zKuauh齛Jꌎ:m5DsQMr* %m}tޫ[bQz9tDfdCmk8ޫy4hY"X`4=ؼ_F8:N7ȠOp9(cg0 d 4pz˥pNߪZMvh);@[DM '۝ p@NGONu,badh~߇.d mXAD2Yf}K'L(3L **_Ï3>,,k\5ץ>x x( ٻYl\nD@}%Ȍn=uqk#dE oK]#%Z`*[Ի ,OŐ[ef3mSة*U,tr EtnCq#oB߂D^_38cǟVreyo4뽐;TD/ \P/Դxڨ%/ vQI1y 9cL_ z}?ˣ r^6Q펋Zۊ)^.kfZitwDɐ{Up{VJ2vZQJB Yi.:R.2L68yYgս_xΤzHۭ8F\y ؽd gיkت 9A”G%}t&kJ6 U~f.CwLd}އ \~4IK醙vA|8J30 ::8:5 F3GnS〻#g`)-k"b~tA_?qI tgt#d24>Y~.RZȆ*L9' |' ~p*ZT2/3e!i[?[ H4[c!8(B#@0rS#A$o6ΐk $%(DB"ɬP i0e'?&kL/{xHXX@>]@*a{no-ƺYpryLCAIG)`9ܕP"#@sqƤ=7[o RZHyr3D |]hq&*==c n|HM/6E˯gcR9ĵȤ*ȎԃvcSǜs(<9!7F\uRc-ͥp (n>eu_b*gu?nϣPkǓs%ꐪfhPB4ωѠz,dcD4wv֐ձ1:+z(~Ag6W(.Ծ9AfdI#:VazJxuus6P6Y`(xG&x(5_^p|`82Ga}<̂@(h6(3ǜe_EEú/ЉM [ud(11v#0/ 8cwbϨVH.)0Vι%Im4S1c,'"Gg !Dyp[N'4Zd"m?"<\QbȊ瑩;c uh4G\/J0KIA hgܐb2wי,:+ W ױ}\.,_eQqa*tG`q$#Ƽŧ=ؗo]߸t`7zr,lYFVKt]or<8nWs49x2|ceCùz[ :>W YI#Q]@!nSZ{Et7 |IPUwk@ JD#g{qGk;Tz{iؕQ$-Q&G ᳫ2 pwh:|_iCHBZ594 XSV[?TC<5o}l?w_';1aw 8<5v9<\A~׿W7Q;޽]d_GCsl;?: $gp-nV nL6>J:ex p:_tW]}Y5c@PW1<>{6#m_ f:u0vL_'#!̢|f9rD'WkW3C=fZTwdT'ag,ȁ_q]DqxQP9TXX< {}UΦ`qtёv7^~n4 v>Ȁ84dxEVOZRL j$ *e T&ISL JnNe,}y?83]C䪂=l=QO]O!2"DBaX D`YAh;ׁ˴\\2{'EF< iS$tROz Kc<晇AVN.f.k DB767^Ոiw^ ˔33fcUZF,rfBŤd՛-5q,ێ\lcpk4g ndp ܸM1J\! cUܩ]T-,kapa*TI1)}O]woL]fflc]PHPC6#|ѱ5uAjޫG0~Q#ފ -Y(C=ωɺ>ݒ92p-2 R ur}Eu:pEu!v60ŠoHZԬ.ouK Vd:^^LPy)lQHzDj\/#Cb٫RZ]i`H #Bܔ7ē0W.VHY0,'V7;:_H1TjPiǢ9ލއcX@ ρ"~~3W`.Pvh,asanĚM}@E;a|H,!rp 6Ш74>GC{áS ^L,$@oKtܺN?Mځ3,|Fr.iX4@a}915L%I.Ͷ=-O{'N .U !}TqpC}8ԡ\sqveZy&6pp3_S5Πq` a0o(Dn(xap).!Q Od}ᥠN 72{{%Tԅ0. HE0vuU=7Cw[wp5P<:ål;kؠ 9A=JEeWEFAm=Xۏt.op69 BGٖ;s?k/KG-~\=XU?, ̂l\t^t&ꝚoXsA~DɵR}|㛄mP13x/eIHE[<_&Wp`\1 ?v^꟬Gnn@.{WM# Vȍz{tir{c̹.{Vg3bg6R\}~-V[t2Gp4?Qh@W ]}<;hvojtTn7 M=4psA;F)Ա˙FEHC,* n,Wdyn%7+E`dlJA ~]m>luԴ[ۮUGrrb2 #Aad zSGيJGv{>҅R7a1s0d E9Ff`%ו[Q"|⛡pPy>g:qԻdN *b {%D" π,6Q\ B|jvޔb;a5P$J39n SqL޻ XX0cS5"gEͪQB|2`Y:+ё3ʝВDBk acCTMpCJbq [|\Tݛ__rL7WS?R~~~8筠]6;WzyL`QS <TȩGYh|ގ&Y,@TDg0;3h/MTa?X;_[+[&l?zbg@~( Mq K̭.SP(#%7F30ä;:Me ]1= 8mSDY3B[8@Tݍ,v Z=zOV)-zDQhN 9fф(wX%`];ܗZiX꠺fF|(=zPaHZ `GQ,Iz5ԸĿ@@wYL[(CF~8p <3rڂO1"p|ݔ1rʚ#Q60kzzߋ7t^5 BkC1j,"ShT7PYɚuR:CxqK'hc\X >oիͪtldQh ^Nw%P:QHZ'=LA *ZJCd'>oKz2\FҘ+}#HqysZA-p;d VP-"ȩ>vD֜]NJ>rc:gt=t-:Gvn2xbc]sj;0sNVnI>o{@au̝N UW3AFqUA^[$ٺp[/ԖK g]xSуۿy`d S\2>U^3WS&kBVq(QJ=` 4HCFy#֟_4}T<{qIcW"]G e$nhӂğwYrzKi(-9$&XD)aSnpORvΕȝ '`2#~|pz $ m~;Y|U&/iA _K̠Uլ}JoV5@% M?UPl(Si,Nm[VɁPBt+,:zGu}[?򖥆n;UK;geob쟼^\UUg}}Rꭐ}n!;tjm!չu-΋48jGGJro3:pM;<=<d Y͢jsRl9ɼd!I""ykN1f)ѽDZ0TQ+7x澝w'UI^^FƏxƊ'⿳򺺰ۀr` lQEH$rǬ U7߬mg~ho!,[jwwQ<5*}R S9f%+€BE}S?V^d~TΣyrk )jEE7ͼ?A8J#D_b=- zMphNɵwrk'љiS*ǖ>\@C /7C_ `<E*[f|eF躯Yۜ!H, 3~l~GNdْǷwY@USWIgTRm~_}'?H*\P"^cϲƠNh"c[fhxB/-ԡHѐ8GӛEI%H-}k~3R$f}Vyj3gx_ks]cX+osf|;,,B^~ϧIFtbFkAدv}\P» Zx2!(ܘ1 ki>n6?? W+b?NF3걺ͭ֩g/m}h1?2M1+>]ֺOM7(um:X[ʂ_GB`PHd00IM(& \ieqBO -5~SG"G<״zaãc&v_pzLA9+ob2Ys!7[hvpn.?U)d$cBp[O{@FUW`Kg !'uWRzZƩT9ִHj Z^P2ln 2341=*L]T`x}x}2Q5uEBWl{ZDyq]^^h-.0E/]xG? ~zI)}LOpyܡdȊ>);33slcC6[}Np2@eFkllu02L:J~uʀdk{k#q2$Ǧgg$6==k#2K80FLT|xã{zXZdiC3QR-1д9c/3Δ??m8 Q[pxj5Yt=`u=H:m`/׈%1AR,5)q *GwL1j8ObPk%'Bt{udDr 6gkV3 qb{SlQ`5b`Qi'0^ ?~߁&sæx]pՀIP"]6C?A&b7Hi~ *$pN^fOz{O Wߋ sq4| by<_ HmD媽!-;obP}?qYٗ< 6Nِe(nh?8"*CYɸv_$]Ǧa&{T8P׋QʊB1;7 1]-Dh J^Qrf *\Cp2QQ+P[h쿞@)['5}.ytCA0ɻCʜtV,wQpN g4AsSےH칃ܾߨqӶ5WWkZ!r #Ko๘z9 m` 90y'&I2%g:m{xq=LX;Tf)FSeHet2Șd kT]$+u?}Kր+? -9#DStW(˓#s-K]YU*X먜ĴJK$8 $nst+:ɜکq^V< {>ou⊂>tR$'ElBGDW 4d̕)=kֻ¹$8 +:qnO(z3l#h&xS))r/8w٪M^4wnic؛Pxv GJmg B, Mk+mq4@"!Cã|#!2,kZ'=~oeϘ~ DǯPp/}nIxuVM6eWnzE̯LeQd"]} un$/:qo#JݟcQE?;8 oEW7`G@9@!xF8g8.Sg낁0c'g:e1LJVhmҤmi< [|ohOf[ET EOǝd׭F&ҨD\ΛD&j:fw |<|,ujW<5KD^ ykZџ%$ uA.rm>qѺS;HJ^a< 0 T,NO`qzZܩ늢(rk^'@9¹v۶3QӭhヵLspA4aoAbjO99{yFp&_ׇs3f5g{4>sYپGqj8pGU(uAqʲ4 ??1Bs8~ @8׳LrFȖ{F{PսG?Yn}xakxgXVTO"鞵;{[M8 A\!bW\t"pF*BWNXTV<󅻼.+c'@:t2 ?_o_ёვJMp4jB`CNMɯb[.+cq]JZOi3D68s4U# \5 z߿Y5V5晴jao]w+G`n1t"Dvou[؈/w'N*7e{RwîbCkJM~С=Ȑ= Ng1`/:Ār-4.1V[LG) }'KYnв?ΟӲ~?I/zJ ]|,&\]џ?Sg52a'F΃wHH O #G}(Bp)"Mz@0U%3"d^0I#y|W Rcz;Y-BcgTE ݮQ$?,ˤ]^K CdZ9EػQ+P:* j#.֨c$3$ k . Lۊ SXĽ+M)/i|kLbwzx\?Y5PK߭ 9əC[]1h8 FT=6[-@N^Ĵ*q\RJTB 3.vk9ŸA/yKs>`31j*L4g'"`/ᥛۑkНb\$Bx>ԾItb, 7J;WYfRT(]ȁs]-i,^34.Kм+G7hq3`~i)טj4kk?+:ѹ#ˌn!nu`b&02;P %0 ERj^"ZxEj4}r/9:jJ*`w/UL{OT:D[y5$>_:H3/,By{{F6!dZiIJ/]H;K*fCw)cf޽wR/Ǽu<9eծ!\xx?}gsm_z8{k>auxAKSS (*ф?ϻ̷6u.!)c;@٧Mc_;EiܥП]i@Mw% Nb$t/цLZ? VQ< FsUQoi uJvYQ+ 6魌d/xG SG֏l,фئ"ZLLp:ٻ٣ضlD#QthI D룱 ݆碋C=gǭ^C]$ K&M^m;xXV,[S`Ȥ:X(_.8.Ã\D fcʺc_ K}yC|^] Jbg>>7\a~U |)AsI_n;;$͈8fW~nӊ;Z7/Te-wmc1^ʢYo,]8GnWYqp\~ue2ϼ{8ysn،^RB5șkIJ(qxKu¡ Pn PFudF mJUwϱ*tf{S;1i 6~BogUZ 2Jʋpؔ~Gu ~r&0*KېGx d =㲵($x|OhrbY8qL>]78;^R0ë%0 -)(0E`uQεsn$㑲$%yE`8nC ؎4.ͪʩ_f2Bq!2~{T`wl9E|dfj7 uYs  b<]E"?݄c$@$m79",촰ؔqlA*[nR?>MI=\F 7j)5iO#>0 bgܜTGgpV\ϪKSJ/:QơG\<ij %>z%i{b3.ta߯%Xח{6+/f`u'h5\q㘣Qv :1OᎻ=F~#R(]v> f:zLkAppuqiz<m*A8<lz_/i:Xs'gO3f֦G҄m.a=_t\ǣ8uo>ABSICyKncuB68Y T')B`? }n<~5-/;o&4? H/iSӉSڶ~~1 n~חqL. y>'A;f] #0Vx>{fc$b*/8%q|T*l0 >d:!Hܠ]R(9N}>ǎG'ONw!~ H\H9(BSL:#˞' `n(zU1.˾Z(Awm=8lj拝E2 r`cEYʀ;ǒ>'Ӽs98D/ k(ҠޝUӓ^kMyݓȇy_j9i#AB>?0>4#z~b?xԪpM_qC4s5@ajN!ޓP0;pd,?(GLy OmbfI;xmqInv `>JXv^^ 1^ W~{Tj5iA(?r> Jq7NG&`L񋔉"UɯR&6~G xWJ6=v5&/H&m1KCڍ~{ ; ёA*f$v f^v^2B*MEUQ9V_B{M8^yί&a⑓S q>[YAzw$G'-m:̈́J] jR0*䀘XldSG5WfEJ`F!Ǧ\$>7^Bö\EТwyCdByPP7j51`{{x]B6fm/C!HURRdQ]p|s(B,Є -5_eOXmDžq^>}MM^{ +7_gPك]\qc"t/nvU󕜞~jOe_6a.M^B|\MiRյ96Aw}]>p3x/!8lr6k?p.i!CP1cZ5k BLTtrPmX1zy3`Q9uܐxL}}PL_X/K1ʄpfKZ2Xgj6W?_D^DkZ'تUP\i"m@E`֋mcKp "SɲÔ8 A)GݫhI*F6 RYJabeN R"aQCBu9prb|:6 -QQ̃p5u`1qW`˩!-S^gP Ljpkdp kk@GfRWss:koaդIk:{1{c0>氃C7(0Ry>׫ )W5=&A 'QyEL:=eR:38/9ohHs&B^/{nT= JxߣabJ򉧏 {ܸ !C-޷IX{E bغYn0 VvмK: q郖$ko2P8AcsMs)$yF5g/e'd=~1"D*{~zcᣭ]~{yk@Cb$B$HS\:L3O^cD PT_մn;ފQEN؏uݯdJu\ق0X d 坤}LOUpo>9?S<%HCXZDsO.RSaO1L[ WrHZ@!$m*7<(hk:yc]pW4}l ڱdd*N@C'g݅,PQ j Qcx73gyw\zeq ;ϢhOvI>-oQ9H{e1c?KU3Ms.}rzd"HĽ[ъDw7Т$/^r7|ˇv'e\;@QoxY˃JZ #.Cf[{[L뽑o5{N7)8:1iL=^܌#n :ic:ʄh~pqӧGmrmc.*'[Q]|D˳'_^dgSc^RJ";OYOuїoNk~-Y dPĝKC$Uqf9=|ft9]I# gvͭn k!>I/Z51 MOn9IM9`wuSVqC HɳN(5 q[9˜>.Oey9zĻHYv1Q_#}f`JIEn5vͥBn};9xߝbpӞ>pFmx9|W<=pěR"ŊvrHE+{cj1ǚ{4lDA&9a3bmT׷Geuw2Ou)C/D;>ʢ!̙N *-A> ka/^uZ3\^N֡VA4 c7Z@\N9BY43T!ƻY:JU*Kq}\n֍o˙Į6ތ2V!c@N&c55g+\Y1%f-YKQˑ}%e8ݚTt 9-^-RKI'MuZ^bmEҳ U4o Kr>+f 옎Jzܼɂ=H{︑vsH~>mlpkaa.ק5F9L :Ci( OlEG;cHԟ Oq/L|qne3ED7VqMGm {gwvoAhm˴&Fd\E60h)^=Zۊܷw.Q|c ;z2+ 1dㆦ`ĚM7y=CU'T1w)L&LuC;r^|ɇ].u0avSG(5'JJT+R=IKVj37B68?0 J3jz^ty[DD^xp&iO2l$!8|wɳnɅk'^)B+#A<¢Lb[S9y~ݕʴiحGX1 HLtx |M >b'Pfz3s6̵ֳ.X"'\?5 xʆu:-LM5ʼ~;gӌKt&LtO̎tRXjx;kFY9Qad)q1'7T\EPeafFwJTtpri=aؘ? k&2kIp,#ofzAbvE9_L?ƹ?<}.r& q#]yǣIC8z^Ebf5$]k|rB] ;GF+58e:LuȺKv[Ièn/8( Ǟ8qyw7n;'Kɵ'g]8z<}!K4x0 hI_6i+ U^%Aߡr핊yβ-ZiȈ b5ChRڻs v$$|ÄEO1͝>TYr)7$4fQ/ڿ̻c(q"}c˔?s< kFOlPX6$lW2]|ipg3|%y)~clTt>FwI ε+8Fyւkt_zCu`bpz_-S>Ght"r(Z=[=Y/Ӑg}XrN8$>YlGHo![;Nh];&Gie)JQciUp2{D*w3;l B%ND0xYw1@0#ܔ2A 4Bm*n0r$8)Efpaj$Ak=^EJ]DV^0:JrHJrY繖2!K駋o-C"؁] *r`M5ǘl`4Uuw#%b!$.K h"ZjE`)IxKGQ!Yvut|ëHxn3:AXCi!ijom-1((冎ۗr>wz1-:LvjI[4ǪND{0LV^NW)Z} ndzghB|ނ6cùN\)2/`7[섭7 }|2TL0(*ܥe_=̶7٣R#๣ک&`Eue(df *GDVDzSGm-{S[ N$* +A`tș' V2{eZ\)Z  .LR׮#ui|^L:*ˆ\4ΓD0= .D<Ҟ6S =vBN \mjoT",g @E#P!{*ԸH^oQ]"& O 9IԘ -j!Bs@/ahG}q!=?$~_#Me.w#Ros>ŕ_ʖR=3 '>^G}q3(T6ErEWVAS:dwq7ľ\:\#W -^cz?ApUp#YO'1Nktw^z}eju 531k_Jπ_Awj]S XQE\=x4'ja7%(9>ri3Wf9'_l9SNY X民؊;y!ΰyrc] 4,ޤ[ 2r1pP1~n瀤qg_ 7mUT:*T]+r&B7n#xfL.z6;Iɮ /q%Qw/ ҅κ Xodiq_Bp8ZhpDA%[Py#Bdy~C npca/9/8uƀ9̿m?O%y7"7GM;c濗n9dn)XvE `w\v??<@7JDĝ ɬ@C@D4DD<4PF*@O FKR'M 8ګpă?$<ԉI%Rs `d'˂ :?QCq?S{2f)nO^JLXz|g΢fuzw|:dxߝbhFnXoP"Vm.[X/5|(K}Iӱ3*~+2kcϢV\bRF:1w2 \ScYdg UNEA=*Lv9zkUp.I/L"s&8wU 1p~ 253A>R^"f-ǁG/J{%t5U%[wwhND#‹~-pc0)r-?CspnzK7[6Tx)|].p;Jf!J f3nR'R270o/f4LQwuO\5(<8֪|VǙ) 㛾o&_Qz+ }9]>lA3fy!ȗ)q,'TDCuBH**{?h> D|`څ2{ӍQ 3IRs(?k4YDtT}}ٳwY F ?6V'QTTjtHD@'ƿ{ ͞%O\Juꞈ!~0տ%bn^`{`iH0>$ 2Dյ@Xdgx̪ d$J0Gp84D5CC WŒH-+@H"- DLQu"R$?ܕ'G8U)3d@Qz} Ob\}|ۙ uʞ? aؘ(_u7?^io᝚? ӥ@@ ??}#IC+0r'g?8Lm^?8Iѯ0?,VC?iRӷsCwհm:,rn3K;) EԚȉfBTxeHb`~|)9a#a6Ԍuz:$P㺳/͂b3ΨYH!L]]W^?F3KVǂ -4- *9YD\ĥ 0 H0|=~o <adӳhuqhv:]_a4~tuiOE_56]no9^nNg]: .Վ W0"!88)zb,}}ݹE7xP9ByHxq8r>:F8 dlMT[/÷kQاo,V-w^}cCиrxҼmx8])y_eƙ>)`y0NcoKf*ąo/!9k#]0pۯe͊mSׯ]sigv?SeC920zʤ< `h:? #k}IDhj0SϞU#Z"i?5] e{%Q4Zpb"y3YS?]lY >XIgy^o|<t8m( US&#اf}܎ ivWj4#jβ]cz4N|D:/c*?N!9!v#X~@W8)&?(g!ۿ7ǫsY l/|oF[yCɇ;'GOL#9䠐\_Xw P+@z, 0QVhvX;}n{#L:#5G[21-CóV<s-)l:<'~GU ZwAdkշ>}kZGwg]Ͼ8ڧՌͲ-^uj z\vnge=>7U+/m5o_>n",X`0ᜩg<$G:j`}4HD{ڋokp*j8w'Ga^jK<{i(69^to(geH[&yMEKY\gU\?n}h.roscKɀh1'*aPy+ ssWz%ZzkD1#g:Nt9R_'kLZTA0ݫtӮeឭC QKɊ*j1@|t][No i=)ewC,7aWItG$D {_X֠8gp2ug?iR5~ₛ@&͹#%@COFX"(5XCEս֦-M㞵|"Ig`ݧTY;uڏs;vrx-݀ $^]uaϟ~Ͱ;nrGw\KcAqDE!NPk'Z=k]aO]ڡ 5 D^`A.$5 f&_q}/fѣ{>%;PIdDG-f |?.]!)9oڥTaQCJf#Pt{g}ɘywWg=ӞYzh4^9/A;!n" k l+|ш$R]=M)쇳sa 8~ݒFUs]E//c+agȿxqI; K}cX "߅\]0bbןst}y8~pmSWl=P/p`Xxi^% D(Bn]v1~]3UEu~S?( Ǵf UU#6c0&C7XIU=UIf |Wop #A' 1EnP}+{sY! J S.@cl3 YS$Yw + 2P@=8'txhjiGd -&~n~瞔QYkIȩjF]6OL. lgpp@{?<$&f. Q2 Ȗ0P:QWu-+9`0{`~zt7V.\%+oDArVgTdp}6u-S0-׿G׀"L92Tyyl\:vA]WcBʹ쭍:ykԃ%P}EodtOQI(;\׳yK'pZc!J0:යFUEýoŶRc7w6.i&WXimgfucjv2RzU;PN?4~VtNR9hm]/tLqڱA,,]U^նV;g{nOI.iV1¹(ileިΡv&*ĦG5„#P†tg:6 aSEW֪b燫SIXT5\>/QmIlwd B+߄kiE(ڨbS#4&PD/r۰'35a#, C>hd};/|ýYjTj49Q%۶>Bqv@OD8eB976s6J2*9KݫpA‹^Ul\.*~Ttj+!Wڞ+^8t=Oc 1 9죒c/~'׽A~~/}aȧ}xbo6iVBWJƧ#'5̌7LPRM쯫~^v@❀rtzE}bC8WyψiHg?0Uѵٙ_ C_o8oe|YӋKHQckO[9r1҃8hw7[ A$UZxax" CQ' bc`fÿG̯$BT@Wg| ^aR÷S!A5P?p&B}FtE})wҾ*l@wKЎCǩ-o#F&kAoPFG"]ZU* C OTsg66&&ooGF"먷^qW>ǩw>u'Z.2+E`\PT.+@gD0׶p[˝aEx5|cRwhxogX aRarC,5+qQF &!ʛn]4A3&CAw% VLRAisϒ?u8V5R7 g|tc F( \Έ=A5FW8sXw3K&6H,и9yADMnﯝCxHzf._-َ6bh!nE7uz=&'a@=0!B_H'AY$UnjkuI0('@h$ׯ9r3 0hhKрI.[xŴƸg)CC"+1 b͌ZcRΐd;3! orj1@$CGƅ?ƃC4܆uHWDc^8[3Cl6#RHku"k*j\ L8ƾ"猈SHJ?SG͘?}?L;.7~6={,@NQ~lw|u$O_?G/E%0Mw}pCHFI>CYvehŖCupUlJ^R1 laS=e; t3r|-ZnՃxriRm ]I M£H` )JMuqd=̤ȽVP}&;pQs\Y/3,79`zsuKi=NgRi5چ9(0Ja?N&T#>jD:mHC`X{ؗj*"nђBsKR8a6kZ~2j{:\cyW^ٕj}avC@VBleiRDmN&cڮ7: `E~ujp\ϯ>#飯ndG~ 鍠A~jVb^Ei PD"x\<l4Ɔu޸_AP2ÿ\,zu8=H:x+Π;Ǟ 85pɟ'L1''] f`K;ܦY/Pej;cs ,h!mĽ`Cu$@]I<׌Eb2 ^Ԅ;%Fo-^|(W>^U?"x#_JOŎ>k=;{}rr_7 9&)Law3ß=7D5:#g^~v, kb5c,ԋk bytrm\P锾?w~Cx#4ae2ԒlnmD ([5݋*|J X#StF{ UVPgZjWӈ@Ơp{mJKo{'}2wT*0}_yF60YqMl/Vw>)s#;޿к`ikG:q90gvs\I7ޏ! C!ClSt.5v:vC;]ˤ*ԩpD0%ν5 bfK0D4UQETcICI4c6;ǟG_^V&"LlWF2 <G\(6 nƴ"clcδӟ F7 UBM'zaMIi|i^PheYJ ;t+˵ ,-b"aWMj!މ`~7vmMe7 Xxr OFRImD6iq ӷA\ .)S .$  'r$*QxNq\|qEF"zKv/f^ ]>tΦtT_w.,k3BcA b .M֬BI0$bB`pU)ѶfU0LpǫB'=|XvvMtk+nPۅd}Nf9`++: oNf с|rgBTy 5n/ .]C}>p< v7kKK.;dJn~5wmL.D\Ur-zrae֙IP]dژ} sŘx!,oKU짐\b]76/nGf4]!Zzu; r'N 8K检0TrWYiO?+3;ٹ$BH(" 䅕ZPQ&eW k:t"(Q$Lz~=6Y #NV/D]J;_0I6DWD @ɘS :t 7354 `z; }KZuEGo鸊*e̎ ly*0t.s\cK9/46L59b/uUr`Cv8<`! =}*0WSgBFh߁F[z:6*܉_FݰjvnRp'B N@56imx%/"Q2uDJ$ܱaE,d$hxL`m9MI+LAd]--WwePU6V3 z\H5M[_8PxK❅t[E&jaǁp8 m>0=_'=h7 ` $π/wut|/W0׆bCV429E]@>#n ;V(M3 qYP>Xt@‚ȋmNL>EP˺sז_¢m40^`[yo, m4Uke7&!֟XyǐItr\,pw! ͅ@3 gV@un_6&`D P#+4;'_{⌈B+")!)hI'P!EQEAMb"1:Iy." HS@ V b %%b@ijS:gׇwB!0TIEUKn<J ( OǰKiFc]P1j # P3ViZǕtyDt@$ ]ʲiC Y'O 8.u(D(:޲5Q7i@<,^}EU7vfÎjDwm(:EgytuhP:kcW.>[zya?7B/mQO^#8 m92kAh STj϶֓U$!fCjz0P:ѬfNFbc]BM~U_38Sç3[9UU4c|-;g@[ 6sXC՗P)U6]cw{LPTU>Py ?.4%B<oF^IOvskǓ@IrHX$A(\iĤ|" efEo>5B,ׅqPB#*[lU1)hgjla]jO0=uNSg=|n(JVzzS,pt[( _% Fw0NF7߷v1Pޕy#ĈK+gvh3cͽZ[ɼvyOR?;^#ۤݬkDWg%$%]q?K Dp葴3B,|V2QG}i}/rQ-?@Yt$е%ƯەQJ}R,d'ǭ7HT(83!B9.2Cm.]9Q}>機7UMxM<4n 8D 7tΟO=_@j6 b?"܁?z2o2o鲁"  "TEH\cB&SYTK,\K% #Wٌ?0u0l s7ʄX忝;5"Dt\yHrx[; 6UYsM&?''k;1 * sxEK'hD^?i“Bu~'꼴&fA @`ԸRNl2v DEvMjj#mEx~0Aq!Z"İ!;B)qgfFk4j-V˖mÌR$3Vj>M``=\S05;!=B)tvTS)EYl07]!1ԑL|7m@cYNp7o)nFPϠtR+nѓK?Mnh-[|9ᅂׄ?ignKO~8 fo|΢;*DC%^L_W;IQ-GI6s6Utrx^W9˨0*'V oU Rnu>YO]"vs{y^0օdJ! 6G<>30sc 辆VV-k۴?Jp?8Raa=4liIF t%t e E5ڂ݉C?kh}ޣAk3Hc[z_G[.1bF&oաF*u O Ka]'RuQyc 4Q5pˉbO`?Sm}?|=~/Ϝ-danb|Ip!Q-l EW̫r|:@Q@@0Qu0[_φs9:iM]B̺Ɗ;%^(b}).u>hXG).e }]τM[J]Ì#ri9kZC[)UJ.sޡ05u|phc|ԱD8|$g.jm>lW'Y JPH\XP|ų=-)N]Sj jz _p9FEGYaDz#Ć%WY" Q×Uވ=hH-Z;Ԩ  r{E,;*jᕔ'(QgAtrJ. b| vb}ON }tn*C HȈ+i!sf8\>@baZQe*`.f̏E(/,tbDY BRw} '"G8(MKxv۵QX t^?/Y'5>͗Wj! T?+z{OlM~VP0D@`@x 6Aa3-sl`琔giD?mTX4D BH)Ԯnˎ N:hXB;>+v\a2@^'T|.@ԲugΡd:/pM_shZa%s>h4y_zOtgdW80RiVYAtoYI>_Hs+t1)P?&Bj 3tte5K-]BPd %B] =/oR$lM__ihxR,Uv>&[qك>.yݼ|/UqxWf; fLi0!1;ԍU:dƙ({27x(1u$g m&1a!º8xDt˟ D,G9uTE');}ݎufRupSWRqڢ B駕,|>,Ss.|ȝB9\Em >tG zHNJfCK֭37uh%9Pcγu]ݯ9qvܬ/i