summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSudeep Holla <sudeep.holla@arm.com>2023-04-20 16:06:03 +0100
committerSudeep Holla <sudeep.holla@arm.com>2023-05-08 20:40:46 +0100
commit19b8766459c41c6f318f8a548cc1c66dffd18363 (patch)
tree4a152491a0c09b9c6dd5ee6d5e0b4de9ada846a2 /include
parentc6e045361a27ecd4fac6413164e0d091d80eee99 (diff)
downloadlinux-19b8766459c41c6f318f8a548cc1c66dffd18363.tar.gz
linux-19b8766459c41c6f318f8a548cc1c66dffd18363.tar.bz2
linux-19b8766459c41c6f318f8a548cc1c66dffd18363.zip
firmware: arm_ffa: Fix FFA device names for logical partitions
Each physical partition can provide multiple services each with UUID. Each such service can be presented as logical partition with a unique combination of VM ID and UUID. The number of distinct UUID in a system will be less than or equal to the number of logical partitions. However, currently it fails to register more than one logical partition or service within a physical partition as the device name contains only VM ID while both VM ID and UUID are maintained in the partition information. The kernel complains with the below message: | sysfs: cannot create duplicate filename '/devices/arm-ffa-8001' | CPU: 1 PID: 1 Comm: swapper/0 Not tainted 6.3.0-rc7 #8 | Hardware name: FVP Base RevC (DT) | Call trace: | dump_backtrace+0xf8/0x118 | show_stack+0x18/0x24 | dump_stack_lvl+0x50/0x68 | dump_stack+0x18/0x24 | sysfs_create_dir_ns+0xe0/0x13c | kobject_add_internal+0x220/0x3d4 | kobject_add+0x94/0x100 | device_add+0x144/0x5d8 | device_register+0x20/0x30 | ffa_device_register+0x88/0xd8 | ffa_setup_partitions+0x108/0x1b8 | ffa_init+0x2ec/0x3a4 | do_one_initcall+0xcc/0x240 | do_initcall_level+0x8c/0xac | do_initcalls+0x54/0x94 | do_basic_setup+0x1c/0x28 | kernel_init_freeable+0x100/0x16c | kernel_init+0x20/0x1a0 | ret_from_fork+0x10/0x20 | kobject_add_internal failed for arm-ffa-8001 with -EEXIST, don't try to | register things with the same name in the same directory. | arm_ffa arm-ffa: unable to register device arm-ffa-8001 err=-17 | ARM FF-A: ffa_setup_partitions: failed to register partition ID 0x8001 By virtue of being random enough to avoid collisions when generated in a distributed system, there is no way to compress UUID keys to the number of bits required to identify each. We can eliminate '-' in the name but it is not worth eliminating 4 bytes and add unnecessary logic for doing that. Also v1.0 doesn't provide the UUID of the partitions which makes it hard to use the same for the device name. So to keep it simple, let us alloc an ID using ida_alloc() and append the same to "arm-ffa" to make up a unique device name. Also stash the id value in ffa_dev to help freeing the ID later when the device is destroyed. Fixes: e781858488b9 ("firmware: arm_ffa: Add initial FFA bus support for device enumeration") Reported-by: Lucian Paul-Trifu <lucian.paul-trifu@arm.com> Link: https://lore.kernel.org/r/20230419-ffa_fixes_6-4-v2-3-d9108e43a176@arm.com Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/arm_ffa.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/arm_ffa.h b/include/linux/arm_ffa.h
index c87aeecaa9b2..583fe3b49a49 100644
--- a/include/linux/arm_ffa.h
+++ b/include/linux/arm_ffa.h
@@ -96,6 +96,7 @@
/* FFA Bus/Device/Driver related */
struct ffa_device {
+ u32 id;
int vm_id;
bool mode_32bit;
uuid_t uuid;
n8)*x$aE/͟8JO3kru '0]_0iG:%]mRϠ>p?{F_qY;+68hB Ež/yNuS$`kR׵νɴ܄w2E{oRYD放#/܏V-!d4~.7ɼ9ܘtC}D$%a`xV*oI}ńӨ-_a FNd 2v S H /KC͚@y$qX?ZjQ+e!m A͈ÉnjuhzZi*`h g&l8ckG7LWZ,vGǠ~1b6L˃'p\*J^n3'd2w 3L Ų0R{s 9Iȿ]\˕fFN|5sȄNJДE%Jlyه+d_nRڄU;y˩vJ<}^O,^*GW>⮵[QN<%"aax"E.W9RaB,\̤=oV>1GOO"|G˧5.:&3V4_vdXEFwYNŹ>"ݕV>=daCoOο@y-x!6Ɨg8_^2`%u%Tk,Ӱ GJҘu?=qUd!@7ss -p dr}NwOPwL`8b9,=8[c Y6 /MDcЇw 9fA[[v\aʭ[ImN_LcƯ?l1l˯5{?U{%lqw:eTDE,IњDmC7^*,S Õ/rΰ)?v}7cE 8AeJ.N٬9?><5,>jW K:A=-rxH(~ϬŬÄ́y=$'jv_Ro _ԆȰMynyq~KdMC(+m$X0ᾐ=^V;⧣._A߃/{Ƿ?/כ7_k$Yax^p m[1bx~e:3)aKƙ_HwcC(P"@ɧ<(Gl6/<^ gѰ1knWHȶ5i9ISV,< ՆxCzQJ:?fnzĄAYϬ 깱gDɓSdI$2+511)q8 r ooxڋHPx5R0pg 4E| zsH^Qr*ϲ @E6$N퇈m7q]dp JVjE:+M~OkLg6ޣA[ԁښ1pYX<bW.M֛N7ҠJ vFs^Mj=zA5ԯbVxȏ3 dMo ,c ARTqv疆'?LIɫA{M~yvHębae͟eO! 9źòJJ:l\T[TT?o:-5#hTkDANˋ> *Xm+ێ#O $, ˷o 0ycknOtuUjcLPUGKf:eX6Siۍ*YJ-lǮZqa 0p-+^v<ϳe| XI(PR熌3s+غHuv_T~zjR]@,-P}@&:j#F c|)}]'~&Kg ¨gXϿׁ98‡z%'_2`f }Lm:?5۲L0bfwƓaźښ0+LmyAӉ|%+Q0q;+&bTIڝŠlP1NբE뒚zL.j<=65 4):p8dWujtsA #6b0SŅȸ( F bD,8XvZdՎD@У\^ּ% Rn~ȃzcVy5;VqyF8k}JTzTxp3f nv,SdS+-=|} i*/4N3A^tW?3bnsk4GryT x݉`8b"(vXnE*tjr1]F, Ibd5L EZ{G>pB$@a@NJ򯳁PFѥ'@PYVg0|` kױ*o2a&jRV+wmß5SFrx&CSH wyoT5\9 mF;G}dw1u:" 3OgTjw6J1邜o5AN̜,F~/QC )\3")/.LVv+\aY">/|h<(WI Rպj7RJ"w:9&5z94co'- Ƭb %Fw)ʼ]K@Yc{) *!c C\ Hja GE]&Ȱnʑ+n'({fG:^55/+`zej=b!Ƴ^e_S (ȥݘfS([.]V\0qM(6'EPS|ZPlD;c0Ջ4T6#^T`2)33&+_)L6MօF;8[ɼ݀zǬ3~$1h!0'ST߻9xQsuG ^LXԎ 2"k=Jn=tFuLN'!y h}:p?I|Raf,X!9v47DVk,7{[3(6"_oBgc {2K(p_blvWA+W.[糳b$0| ޲Y-L̊=/ka.ĿYmf'Z˺8hS$q:h&B]hHGH?$ܫrr2̮vEf[PdW;̳C0xLkuv`)sc!2{eoIcń-cQfۘUߔٕ(r67lGcG:Y^3*O0/W`-{*fR>ǢfHbR9bg1.Ep3#녜Rc*)4f˜3D1DsliPmV~cF ?y p,c3{&,R*rB_1ÈL&xq&i6X,[ XCEZf!]^zSZczf5s5ZZkFQ5woF̃uutdgMn\K(x^_Z۬DVakff9`'T]@Cf"icev6+?IJai9ˇ?aGtwL}ghBvdē5ک/>U-]AZzh^oKkхRzTIO)Q`*(K4Tm5ja!"4Tz=j"B0QC|BkgX ^3քl;-BlJg*$$ $28G-dNQ>(Gu9 f 0 Z߭XbVQ6k}1jj QRR(MkTiMh[S$ğ'IeE%++љ ]ĉi>ؑ8x=b0c7!W- 5wR`kUiי}}nCi*U:1H_=;TuV/j7?69U(XAFe8q%g۴\Ta2q$v:L+ၑEw#\kWTue2t rQΓD"c ^sR F#pyK{;?H0q\,}zIZ9:98ǿwp2NEjO@"9sYI $u q?{x!"l W"9G@j=$I:MZŌݲYlwSo .dڛ(*<v`+r-IIYyHsH(ХE[8H[T}#2&BW uKV Q5zֶ As$(^dgcL>:6+ϧgbh\zfj'1eA lӬ(C4GDVjVK±YUY+TekЪԫ)4ˤ \mD0vw9[k)Nۻ}RLΐϟN=y|̂1 Cc" Z"Ro}Bvh5)$H2:B@*B^]pElnjK M_Qj@ҧeST]"+h0W--Pf{^ŕC/IKd-(S{vs3'ٷvzwXPV~>R4]lsGBkOqamNuÕKUfƁ͞g?$ʅ$^foMbe'hG]om%Uժlj4[Lљ^|QN3ǴTC2jܾRIop qu#tEN]_U[tQ! V̦W' n 4D 53ȱͩQx_XLhD6ZšI'JqAȴe_mql5t}dH`^;7[[<4OL!XO3Rmg:bݧ1!JYU}@lTiz}={З~h>Yg |Q!ZKV @T渜BBfqڷ] XdZZ PGskV!rB,KcƝ~ vdv+\yQg34>κ` .-^23`>mפ^,iqG~Z,@·6/İvvK&[ rUmPskPO# ք<;'4~˙ UqNâ8ڢ$s#@=qFtA;8Xz6xb9̠?d2=Ů#H4?4kVjP4hWM24ث@*ZF_RD#Ԙhȷg#WDah4]0t2X?Y)d}OE'FZ6[6SKDHДKE}w<6ѐ\eTo4*2rZjj"XQ{}Zi h =Tq_m=_ٛ=plG?Mt;PՐ-@G)79wdl 9NGc?rS"v&+S~c3вY+#ٚԪ;(pġ8x_ T;oX֌t*Oc{b֙F‚y(r!"Jg$vȌ.lf6y1ss{4ŵVTֵ=(,Vb!*8W֔>Q60]7m#1݉2llpQ'd0)]34vZ V4cYo"^W3(S/-ބe@ FdƟe})7 >+Vr6܂K&5` {j,G1k+gn R>Y#Š(';8RY8}v>~6$3RwFkӄt_{Sj52h ][vچvHfb IK wa؀=c5lr*Ǥ_ jCC!ME*V$ɬ6]yQ)0S_Nݥ`GK+21C:*^;'WU/Bj`ȾF\{-5Q*6s^j!ԸR&+Ah\&: Cόx&>FDsP;2GΤZNzV;ʠJoT栩ʣ [Q[ZAPnp%*qkӍD` Ii~x>}}cg/ӼxC̸&a9}C@mH$б^ʕ;G,cdr}u:~r h( ^XfʶKh:58YZ0,[U-eŗ1mK4#(xGR^Xwgl(5iiE0!G(> ~D]/R(I— &nُKcUWyԳf|OǪls22.hY:VNUI4>HÿAz+P>YF'Z[)hdƼ(O%FKzBr@bMeKJf׃ҩyCqzrho JCu5Z#Uj(T`XcX&AnVԨnBtG3(B|DJ;XK A Z,3[ȦҖs&}l;WKD F [' M׀b,-ntS8O2T/fz;FU6KGtM .&ݫk:"@N͏ UzɌYB#ʥߋ vpp d;6k@/&DV) L#uwdTMRq:~;K)p,5{Kc 1 @浧rܚ5Z/bc3[ܰS%q:JpPl]NzUJѹoPχ5 ՓELGf7 VIMѯ}"a%`51K QϊJf5kb &$V6Q,s T}mI`9Y߾WaW"9 z@pq|;&^[=Ѕ+Cf Cl!F# <{t0c@I&vZR3Rlx\'.I~qA G iSw^l~:5өS;"6ɺs}ş8!9@\S}ty5բ00%DRI8t6;^9ovnx*qDc|8 Ѭ J~%/ߣ&КjT ZkjXS귁"%Fp&~$l:O>=D$r6[[$>|P!{E %Uș~< RW;s+xs%6%cl[섦ACsjL%'[]՞]=elh ٱs ŵ^/ OM3(Yr@#%N9[7#rymC5!1U&ڦVeOۮ;|*Wj n-!ᄹlvHm@_)q1z@-- !Jy}|yue+pa!s8э5&^M>(W.ϙ]ݔ$fIJ!iWd^ /ћJ=r2NfVoUXwtSHd-zjBsYqq*z}*eJ2kkt 9Rk4K 6VnO>W k'%9o2VHf1iLv/b`,|N;9͓4߯ox6䏇랣 -2T k`C&&KIV(t 9F pKov;ݼ gAH°8JBt 3@)s2SI 6il1$ʀǖ,ls Y<>>nt5y'5ޙ-GzBF9&uTM~>GQfO֛yWpUrYAZ!Vz$4o22n2NavFEwκ IcI`{产#܆kAFIOx%Baok2(yO@G+9q= ` B=v&+ڭ JEwMo{Z>ԙ^[Bp}jp:~ڬh: 0m'Tu)V C[ف:6;~@Ա:5Q8aȽd &2k Lw9΄l+885RVU9f$hzۥ#й' C6%jtӾSɣ" Jbb'^|nq .u]1UZTknOt#X⛪.RHYlq*<8X"ۮI2$㫚jtQ{{ Gch32G&`({]; ?rcb7Yx[oO _ȩryÛv9y߫0ZUÍ^[.m۝+Ds(ެ*H@ѰdOvLڵR+D╧B[^řg-LiZиqȚJi$K$-Y[C_)IɢKW4ɔAlND۩Ĵ9oUuwtyqm@bo-M#xfJPf@iޞ =ܡR+52颸[?Vp,IySM.$z椭!Q'cAiZ#g:և)AMc=X̵LM|ZgaArZR&)˟ ^22Ԏӯ,C6N@bUPю0`&zV)ƛg)AŦC#9dV?>V/.uRlkR)Sb&ݲԿ }XeH+Z2IMfIQ9#(:=A2_J?"V^$-kR{K@#=wXeLbR&Y"C|jt |=a܊̢&:˫guAS5$@uvdv9m`# * _ ^+jry/H\_s`:A^XzL -om&08 :C l p֞:?/tm](Uб`Fk? }Ȃj1@t^\nkm&Rɂ_-ULJB e@7vdenp/ vbPt6. _0U@.=ߊdìwWVNߕHϜ !{W2T< Kyob'4niWI&RI\&t 7bSM$T.SR@U#NN>t &bIO2iԧ z[2$#qk@Y殜*|F ,.G0,7̤6NpexƆ`3 (@z:H @] 0 OeG0db+Xѯuc*wqT 4o]ђnKlr&a7;54պxtt } ~J]|īz׫.&SUHZ=6.C +VqL*78 D&*-qԮomBO 3̼XBXQz `x6~EghҢ^mA+6yu6lS*кfdT[i̼-jzrhmPt[xN%`PẌۙot,5ĖKq*Li.JMzBA S]r l1#Bu>ˍL3)A=[X|eCI8 / eym:?[!Jˊ{A1C$\7`L*zaYʪDu֠ 0Ճ,U!G7BMƐCZO#8I,I*1WI2Wqԍ}at!d-`r9C" 0ρ^.^ ?o@i4`!oD)ftz0}2[E.܏VeiI#%`64CE;@J$r"W{ڠ"&k'i'F3ߓ]ojBbA:j46-*%jZ)BRΦ3AȵzflM?w Plrzʆul7!w)R='  iR_1: LGf,e*RʰNy`K]5Uux}Uh6beug&h}+|~lac}@|6H+1og_dC_v3Oֆ:D:ZH3({(yBq_XR˨+fѱPZ>xAj,-R}/I~zK!ȧd9ν6c~AZ+M"KhX͑G4nlIAhů C -9oIbtpxL v)O;:L-?s3N̚N-y3؊,ϭŌZh@ YX>te}AU6+%RRl\]ҿq/8q3x=c ^Ulժ*CJ`D_,CHΈ Шgʣye@5kRCٵuLi>NMcdj,a%o=̩P4l뼫N3S#C5r :"~68=߁HTusH4UW픑Otx/{)q5F~Eg95&X.r{&/†%-au ̄,ʥFа}a9`B-LdZ24$LͅW^)l?dpqP1MHx)Wk:&9ԃ>B,[kn}ٷ@joډQdTڶlE Zf-#;[<;dwSzmǍy ф {{~M#)OS9lv{XUf4P^Df@J-5ZBU@@ՇMPf 6\۹өҽj[oEbLqh4A YP`h{ytind$Ѻ5jO`v<Ad ޷g)׍]B L.x:-Y&J㆒.0F4u'\ZF.._v^od͘eI'rbC *pVʚ_%sḽ t^& 6fph Zϊn_IWX6* m%9)ҫȨ,7%:ҤBW(\rjфЛJ]v/܈+ip45x\6l(%3K:K`X4HxGח,[Ixn |ݎv$zp,(j_ Dx ݮm%0i&HZ,.R=c5 ]vI%E`dwL]q7 67qjzfnmӦ r2o^dc)fTa?ŭ[aUt5Ť|Z,Зا7iʮ}>b&ebfwM4\|g%m3O?`2qZ9Na;r{,FQ\۳COuR]O$rtI!B +3 &'q.'y\p#ΡJLnoL?F4=`]hR8 p\z <#גtWBs` UׁlYj+ƔB+E&7N?N6AX&WZCST.$$bi3e;ًgiĉ50^!/v@~IgI#6h 5nCĞw #i}*kR6ZC >.0=NxϙBV [vjWհ >V~WMU*L]l·[Rj[WV> Jqɛfp=Ҙ%y?*)>?Ivuچ9AkǝyNV+rZBLN"qRKy# lF0H/Xk7̲W+kAkhWy$OSCg;_y7gBMa!koPOwxWs$@˖Jf2) ${Xgl[mժ 6cx%zB=ۍLPdbrml2j2 拱C4|]p?aoy-N4 Ԇ$FJA<˵RcO05`GRu,/CXaY-|RMПLZa7:>o:II4Y 癄/cxfd43;qDm9Lу}̷uH+xӨӆkS? j%K \L~=p3+n!, zzu>LgD΂Ype;Y{S.Ł`h9ժۍ1K֗OXyE08'Gs =it*".wY4&"*~w+l(Zr] kgC7Cj+lv#_r>Ykqbpы 0r${zy bAFlw?+u0%.M[aM05v t_ ,Ok!J )iG}s)ox/C®:SQ; Qa,*3ίs\=$sJuTt"ILSH% 0jĘu4L6>N3![ˤL87JC%@Gv6 uAG_é $HJZ6#뼽DoV;M} b ,[p%>E9 +dm].5L( ̏hJ Εlv`Y _}z7H GvCl O AD&IV%;T-6 5Ĉán& ׭t*yQ<ޙc4"KiES d{`S]haj,$XKK \y Q3,x; s2=^]X.=njk uijb¬玄b(oB{%.z5ʩ_Չ}k3$S:_YFәuoIBa6mYlm dܽSעX4Y\d|9s*5TQɩJ%ODUtiЛ` !|ܾ+:3uJv<3MzRZ[qN:Odr}zAg33("@̾ }>ݸ\5UUi0yD5疭1bֻqӏIfp|I,[07ԇA$ +j46Ypjsgm--d@D>8 =\?)NkA:ߞ0.HV3p@&2  5rY̙K@:I)}^W:(nZ$s  3Ig UxHӒfsez'?1NL#Gϭ5Yϑw aMXmXeXfV޽KjOJ_WjבYaO5'',ԚaFոppRW26<Bym&֬TgNj,I;.\8m  v=}Wn7KdjzJiYZI/ +bln2[j`}vsW`*]5+TnMIE!1努TjU`vu8?N=?Yx+gϸ._.r)%fJ࿾rՍz>w1aN'-ê*zYv%67u'I N:2Qh1:@Ĺ 4VWÿ's2dHUO*g)Dbh9,T0x ;+|@s/Xz-A9.:n,IS5zAWVpjMպ݆Z!\-h K[Se|B8SGhMPͥ+yRj'>'+45MJfik+u8, 9.鱺Ɂuteo4j>vFAL(\kVh E"+.ak34}vZ| X^rrrrK.]^ך шeM[eTm!Az KaEtPo/2x^Z3 E:tѣrMsv Ѱ@ԁNyI3>`m}-ʉzDe:G1Ûp *?+I938x@wW۽=1~Ag6')I8e0bx~Ɖݮ0r ,A~fAnmΠvTH k3hbUպb vmuU}xK>}wjpj ߯=[[ھ&Ґtgz%ޔzchߛ yڙznw>8`ĺUAԬI|AN#x/ KO݉}k;{kPN@RZYy CS'vjW#c]^N&/C jꅽ!%K3N$fӌ`@;U̙RBX.O3uu-njjT!M҃>jUBZ#H5`$%[.H_wcjJRw>N);{i z~! I~03e H z,mYiVb-,?<‡nXjī$rŊ~M6dw`G{ua%JuH)Y*Y09tjhP<Ș2&h,̣"RIFp d%^D:ºGy.ITaSju'Sr/CI.X^[[9=nXnҵHv|awhYBp;}˔D9 ʸ;3-uY CCj"\H TЍSX󯬇G&p^WFR_xu t#nK႔Xr)XǷ`1E򼛐:93S[dRg ԏ\pp# :kluXMB0I f()ɾ؜lD.YDhRi!p3ugKKr5/U7.@2/ Bd5@YVr(M8a!9bkY_Vae*@M>LAf$k 16^w2~F9Ed!G.+;+Th?0C)r/[VȈY%2JjPVd^j ؠ@5Ԁ44aJȄu%{5Jz]d@+츮[p%H)vvSf5*R#ARgѝ]Z;~;-ʁ}g,onT yʩiА "VXgj'~Nr2:-^[MQ3[l=ɭJ[PҰswgمn9)Ki/A./#/<{+5o7LCԓIiN fSr/7 g@(vI{R6A<枻HokϥBxDI^rv# OߴNV5feetʟ^ˇ*?w|ZٽEa9k/Gi7 ;$QdqsOdƄ$N󣄃vV!*;  {VQ%qԘ\]( ϙ $kEL}LjiB5S/B`mPGLY|5ýhFV(+%j8&^w/PZ(des"xg Yjv#s끣TkΘ v9#+SuΪWիH7>Laދr|tsR m!X ndߛX?.~yQ>SOq$pJJ "R`W+оrrɺVrCT] -oWɄmUv?v:Laʯ5%ܨMޘHq ߳VyV,SfYcIH=V[͙)G1!;1"$:7N;8aZqR/ (҄C]z/2Sf\\+E\:t.IFC͵R's5Y8pcL#:K8Mx΍w?}O ׉)|.eMΟ&&~6jnCnlAɫ[nz4IMHO|#?=R͑zTmp+O"f =F5WgsyHNO+E3DG"d"[h qe%fNܝ{܁_LO-p1jhhNRC\jhfi /}pO+wfmqݲ[CU% &lҩXתOOӂ>z-֜ `M£WUWZUl-;<"ZzMjYG#f\xՉ2#F <2]ƫF da!LwٽǑ r[[~!R29%|.pThw:*Gl}Խ%<[580uCf=dg1NBPR{Ғ4׫ueEzKdįK֙۹༠%"ۍfL&+0Q9oET>»ojMî_ݱDXҐъ"rLg "848{OXkxiY mM$ NJXM{t#D6GgT|`(z<ѹdevR( [Gz'Z1)]N?E8(z2&ivuάr9ux;QwWGRYmP~$P#|fY*_m]P\WS7E <i$o ,_X}OH )cM7X `RM+A{u=Δnх/֦Um0GZV뇚'M!R5ߞ xk,æ8OdYsz 7wv\ٙ-L~/\pgx@2у99q~kTJ11-4+$O5<~JRGN}9Z-uk e+{:9YIaAlpb2%-j<ȜR^g6w,Sp#RN)[O8! g5TJ 5#vlVS+W{f2/}ŋnH,<86^y.g`Ie^;FEqt`]mxuhc;╷_cF Wkճ3 z^F#~~ I\~T*^];z3Z& xAçZIqyuF+ml@x{}3m= $5i:aָS +m:Eا'lLKWs_8:ɰxuIĈ[WvtHgk /w}ڧ]$S7@ Ņ.hY~IL0V.L3:/>d.S?B0poiitTݢ֟BU+"M,A# f&z!CQM`U p:L4;oa"Y/)!X)PjR*d^Y*p mտ˓ [򠤁ԋWXn3 V 粊8pCЮxy+ۓ@Se hO "H1Mʵf  [ΜLenWlB* b$ sv 8D H Fwuz)M)$s\m,5>VGFL\u;p;љ!g͘%b%\0vӸ2_4HѮ!rRQRLVjrѥ1q#D)+튄&a^@:Vk(hGBd ıuH% 'e9O {;!Ň|$pI-z]?T(d5`;LrL*M 4$03s2ms҂ 842HQMQfJʤIb'yN/'S[۠nД2+d䢾."HeGjG!@2(a>Yvځr2F;UV3jރfI6R:] IyaN⃰1]Q=?H2«*4M6OÊSU]h:/+!;Е;^TNTcRX IˈͮlZOd|\lˀ:%i񲗰OImܒceKWj=ݝQ vqƦ#̅/rnRcHQƢBR3d 򻡯;?BNӓ>4*=;.49U$mʞȚ>c/YnIWuI/}/H-)FoCMPӾFS 0iLv%@[gcݥ ѕ!^z}73ЦޙH7U4sㅲtxӈq=tˊrMJrQQZ6Q%ۊ$_H[ Z,? yqdZ:)@aW+5Q *lmӐm+p%]vwĔfL9)~)Бdqbq9]%xm@Pe5ٔ7$UCj\HLhlN+RMxZQ}wO 2&n/HOL&+ϚIA&J㙺dq=UkZ"vk]Oj I;9+QnڨTpFA]mu2SUo~QaHPD/PG!oѫ=pՉKЛY`uNms}h[+V% Y;9:v9; Tn2q+Y㛰š]2RkvRsA ZBZIs4~&k ępǝ:g!ˀ* "Y!X8X]+")zc9Dž pO*ȃ,uzT[ww)A+uu>;rY)+޹f-@na alMe!nڱ0HS?&G?s/7QLz?BC1GA;ST74K9u2zSa}q}=ñ ;dY %hq\Us:=v-Y#Dt:5σdVE .. ٓ]R)9Ȅ>,%zn3<$ ϐr#G u0l}Q?==gB0*l$2[P^C_bz$mNR ]&Zw25hBlS?ݼ3B1;d' wB%ݝX]jkw~y,Gj:-jؓRs&ПNɒ¤f"-.k&X+O+BgZnU>{ڦyNw-$V7anU5Cu FY!@unȽFu%Lmjn Zt*%2RF=Uo_2UuH8iPPN̒g \ Ra%#lgF'v4_TbKR4# vm5DRВ[,'V2?[ p[x~UĤyJL"&9ol:Y}̾C7iX8OTMѵR MDV)q؄a!H᪛K0Lr51•cir31ިr${Q dY429@:%}Uڈ$ Øȩcx?ܻ39f_GM}]k*ؗC+T'nRe%Q'^tO j9)l$UPK4"+ik"RyN, ƔK&}BcYQq+n`[Z&sc &]VCı3u M'qaηCE1h[7z1f_[ݾ*mUJ#W {Ֆ*#լG W(\6J*ʺ2`87=\47C61oݣnTpbXZ꘾0%3yIY??TEِ}(6)`ߧWf/ikdw@'4,W}\i怄ĥJ~7TԢɂh7jd R6*?Q+n#"-fOu'ѷb,pF;"`ImXܱ8e!46gz',{H SK;)a >x hIPieO[ܟtD rkC 'NTbbNdGHZ)el/@N~`s3RiWPN -#aD4W߂oZ8n'f=;ƾz:i42_bTeH6=]lkvt6NRьAi^)@GEے( .H:v} $/7K ߜxd&KN/l'Hu9&~0*ՠNvC~K5juJj5=Uk.͢.r~vi3*d<ݺzو$ ZjAzaIԹҟޒЊYSihD 9DV0k{ak(CQt5cl H8W4)\ҷ'?weob\CWh׫BĎ@ =jV>ƒn}Ά͑xo!sg]^g_kz>D.oh L&kxhN}x F:#%VFM.g/˭)~@l[x,h#kkHgápM*9䎅.,F~o내*78a?OVNa#ovAlBOzoDӾMdDS._JBI3,ADuŠ`<9i1 XM.E+94Hထ+횹MVx줩GL 9w,* ̂4Nע("15"ȬSwwai1 qq9A2!&=&5p;N!@!Wl,)hG+^+ڬ}%Aג|*X ֦7cY8F6wu6/Fl@x|ְskY~Àq83*鬸hD6omD"fK.7*$Qe:>5N PWYWG_%4ii,|3:ɲ].zr:8j'.]FF %~${fX5 kjϹX=@[zn@&)BԨѕ7 `XxQޥpiNwZPk1c.lU9[wFe+ y}^/(pnH}BD Ӈ!t2s̕Ƀ4XbJ ZE4U]-qHTT~aG\[˧)s~y+55[:FGxCБ+t OeI Q hۋ(fcUn%gY@ZPҫU.%&U){wւrkPL~ǮMs^e3V`M4fK\^|)M{0\߯]^!ym^ؘ]>(DWزbx1nڅkP \Y| 妹|(!"f6zG#!]^ݢNRfHY^)Sz` ` ,Cx-s;D&tѦ Ƀ;_]X7| dM0Úgܵ,e Z6j}߳B@09Uڽ߇ra{okv.V,.:Ĵ 9,cp_]NР| u:z}ppĠ8nG>ngm l{)t5T! G<"Hd^P ]򖷨l+aqJݪp4P͓(IaEUڽRaIfc= $I]2k`~Rau!#T2V%8/?V.>PAM^+lá4U]%âԨ}.K[ëDQ/1 ZR 2&(nOLۯE`]1t }X_RVc]5I-x)_K%HPZ Z얀8.uR-) wݿh^ ?%ߖf6N^7  o7:G'?L6\ [rmq _ yWp;.TPƧ'gׅ úpRh#! |,R?N gX77ۤ񡞾I-LW|+}o8qU A-3:Nbص{cآW ݎhQ+aY$AaΣ:xͿ9 W W q5=_Ɔ/`YdތA_zCeI %\3w5y֛̮Z&zc-ԑ__ d8κАS6R?2[+(")դh9 ҅i%N٧+$H4t,l4~bxu1Bګ _LT5pڒB('zҪP2 /xO`GM48Uq ZSkaU7@.i/.U;aqѪlֻoP5gP%kǛF J@8h`Y AǒƪeEc|SlB,IJ|W6Ivu>GH>}@X*&V6Nngk1 8}B )Ggю2[Ba "): լJ7g$1mȢ^vv(hCKHJ ՠUz=h*WV6qvT3i\ ^ uyKF폋q{lh% kkMU4,5UF<7I'~Dˤ K: LZ6cR|x8~ïb9 ۾y ]8!p5s9`xmwi\#3A!1u, Ўq?)sd`cbo|I$yzƥVZ^5E=c,vٙ9>< F#uȁI#%Q32e^o̹$^z121L3a@6ҋZ?>@ؓo7.+Փl`Ә̺GsW.굄BD;utcչNv6|i'. nv7Ł5 dAnuB6+ir]JG,K4u}4^wVլiќC9 j Te]E"#Y * 8`8cc}ђ5~H(uT1xヲ?K'L%ÏFfGŽxa9IWj]i]N&fPbJRimUswj/^_jTdN{x|V\Y 8,mA]`H[89bi[36mOϑB|^ZnzSF(Օ5Ek:u{M߁- c-sK;"HqoPL 4#w!7Tř[RK0":S-o[  W_ςoy0g%} ̜ #Ϟ O6|!Ή='uR6]'SMr2,pGo@MҶbv9Ń&>r'Ź[갴)L]^5N@MԠ ,,% (:HNٯW;%]/GBW^`>o4˯G^< j*W N FP)}YWPOT^٫nӃ^Yt%8,: >$?Ifs\9s[ =Ƴ5yo^%HOPmPeXChdp4X!R}Y3#(MMg:a4.8~Lv~Z}E-sNٰ֮13ՂݦkJ.nRPY(qn\X!cr1X!p `0gE=ML :@QSۙ1]A{ qhZGN]3^j7 #2UWJd;!#DdJDە!ckkeA sR+OOتVOT4?,nws<"^IٸQwkݬj"ڮj%Y}P*\p OY BAk5?Rg pAGDG }q%}/P >5&=zQ~S ?*)("#W$b6Vrdlz9k$ Pd8%!)aŞ_6o;1-`;<{/ѵRT?S*5n4lB,}mW4wJRt#O9h WWPv#vĬ$tizNDZ肞&qtS)WL`8 /r+|A>&/rXV$ "]mBɷW$e_Z+D?6$:EMVՆ+IBgexlx[$Άm h&˽qnHwpDo/A}hd mtp 3GC$Kt *$U;O=csZN鈤]r#* 3ӂE~`6&v'Al(!P5S]SҨ owf.99,vӈFdJCN7Uy],W[/ @nрa,nA#)4Hze5kEX3 ykE㹬{UIoeܑe,qR!&9:iђT;S`vzg@hI@/ӈ;h$2'4lIٜ-/e;imL6yAdyv/גwZHJ52Y1g+)\w;棡*OVޮ?ҶӌlH^M.g/x;f4#`;JVW+< T3 `u-}n4վx: h}Q8μNH;f-[1&4qR+'|+ )N&x?+z?9'\Q6t3dx?ɬYeR0Iz)|45[r4:bc !e@{Ļ@2roJ-Y.X;#Mrϟ Γ-jߌc)y RŁbCuZBoO uA]c,o'Pj젨`-Mr÷X(d|y~Z@e]iyfɖ&TM@wKίz@ڠs^>uA+||)G2 ?׉%\4Gyᤲb}T8=j沾D|(R|v)=q_d^ś?/0OůeH163 U*5w\!6p/ :Q![x 4b&z$+]咾m ۝%mqR\k꣊+j^}|@<2li`SXr ]LW4돶3d0e77*΃xNy; Q~ ͌Of A&P"^ z'^ 8)G$:ŗrXNG9Hއ"(Π{;G^l}VXyR~fnƷo,q=g#__j>-CCr]:x{"CuђBeBWU [{j_&E7^7[iW4|aZWJޗ 2,^$Z3s@˼w%{fgwd+riVO)mD`drn0W_j{vzN7(e?9S%)T \ZGݿ'҉ӜwmMB:۠aJCVi#==. c #gdN;wu+G7u( Q얤/өBq~>PC3Tqi;G[~'Ͷ h]R'dvTJz֙ T{F('[0k}bVm̒]n5 I< h#(Lv\~$f&;SR lr;jTRR#h/6mmM0km2|(@12h25-r!lN+ŭzE0OOE0C}Pȁ7dH9>ȵr T p%Qj$`88Qr H)Z_Y;z=Y#&*b91芯 ^~BWU5uIqP`fRk0[U] | Εh+`^R*]TIڂ>2ކ!ahwNLUƵL/렦T^m;KQrR`|!&VN/*<ΫYޭ~h>Ij嶔a*]kv+#$~H.SՁUȴV66u5@ڇ Pߛ\1Ld_ &IvpzՕiN$FZ~3FFt d,IP2 }R|DOe ZRAS`iYb)w&gRENΛ8Mc{ʜ(ބv誾SKx&+3xn;DP&xV;eK2Faj]b|:*?':jR/Fx#,VRQK].!B5z*5٣MkpAI /ϏU]f7=fFY9$ajZ)al[ZF%9f& tz3>ͩސ%S/Ibp֌fAjO>>KnW`+>5A_JRr۔:8=s*V6>h "EĵtT TXHjf&:AQ6gluHgA$X,8@ݺrw*G"-#!|;緯oAb6Txce(N+_;̗s1ySzg!29"+l:ע֣;b~ 88XbYrve&U3~]IOyN䩲cI_0H߆0r _܌Xo'5{䶙@cLhs`H^ &y ¦ɗg"MF/*椲3d%(i6G\y5CTal5\ӥ1cF:OT^ɩyX5 Z7(} 7G#Qg뷜NwmNgwݑ0rr)͂8UEGIX+yϑWfɓ07Z xek2vt#w! *BPkfaE2: Ԗvv`&; q{Z=F^;*">rQ2kFp*>w{721;1ԝLɺѨnAZVId`0']#`+= Ԙ'SSׁrv>!ǻP}hW.H+D# r7oNtfdj$T9b=sչ8T !(6 $_?oVbzԭ/"B>O@D>2/Hj#+. ,6 ѫ$Э#!skom{HlqgyRx%R{O`b쎧ID5rN3ԋ"&iW_n84g4IJٚ9!k _nɭd >@vtقv\-Imx|F:PX[ٷP.TPa$?+Y޺* >m+XU $d34lĽ^u|> oy3 (eCN7sgpLj%= o>f\r[6veMNr7p'^%F"ZlmrRzaScE|@ʣ]C`FkU 0Icix["5plZ|xXeGcd٩w"Ìc n;fRka[+75@@V)ÁUs8 S$}N̗Z7lk55 ݦc !I&#L D :>{91hoN$*//u,xtih)"xzRÓrUN|X×+^B!;\ U~e;F;WMp.K>Aj( #1Ķ}8(b8";OI_C!Rj¨׶kOꐤ$Spoݓ3Kdj=@'Zműϊv9\6P@G_hVX%xx٫:bK@+("B|%sviMIQ?PC;-XHCf6v׹yGg8w0rzӽ|."#5.=])u+@-QKh.\ל? t v䜬ݬq4@|t=W @=wv_/p8Y,v蓲:&B Nڴԃ;لZVYk$C]]W@ KG.v7RJb 2dVUc~\fhAO``v<;Gz|-LH@񙰡rg`=8wyf!+r0WXО4%]l^-jXf+5J %".p`~:}͙n;7fOn^٠eaKv Hd2\% B4EBњt (ײ3"T@g_tS;%ѢĄm#>ZTLvg@0Vliq,&A5Š ;[ qhq#wb;C-: <37rB|qֽ&&C)^̐`OxӉh)(?ҳ oa+._H[yFZCYXk#Am_eϚXL™ggəq`cXw*ܧiӻ=o+ON RpX2lճ.+f5]p*h %kYd1kId8 ̮VipczwXBW/MH6 DNv ҨFj#.WTEl[V풪uo9+.IO6lp[E`4NoMO>0@qtb.Թ/.԰S443x/$+E\>[x6kǙ9]Z۝%Q/'o XsqF;IO ($.:E*E{j \Ȃ%5gQnU2k 'x rpf㔎J?=t!/_i>m32Ke C53ZҞέlS$~RPZd8?8}LA] $}m<#CBrkM(S$SC˧^17NR^8U,4@37c#HtG:SV"%Kf`CE&jD uh^j*Wu+Ѐh Íݙ69¼Ӌؐ#DNyMN]s MѤsetjy ̙Ӑzw۹5qh :Ȃb]fܬ6%Xھ\KڻK%;:aBH}Xy ZgT5P1nn;;('aPݍ*[t'$h4"4N>B k,M!qVUZ.ԉ-s]Ҏ[ 1g]roibĂGhPwThĹO8. ?-}: H{L~T+ Bma*GԇsIYf2} 2ʬ{,rm\d<͠ΤncnҶ| mjT7%0j]c҅ǯj.oC̝-tVD> kl5hK[J f_j4(T"îPꂔ$x< ejfc&sD.-$rd V0h"d@|N[#[q[TDs^'EK3ɭǚQ$ȿZ ۔;HF2X3*3yL:8kR!eR=]lєD=fH82l#wΑZjV5xTh7 yRYA>ciݳ@ǧxkqZ/H(BΔ mӋe~r2^?rBdmun$71iRGfIZ%-_ԧ3&RKHU\EFB%9 ЕQd:&]U/q @J ʪj-'jjPtsrmR,p*k!bxv=^XVFK9_)#55VdNluk#͗tJФ.[Z@T(ӡH[}`7L^tg#66ky׾C)j9c_8VF%t[l|)84Tf^`CB'SX T{տTHR|+_SɆ,eDѽp* 3is۸*UoҸ&[Ԑ5**;#5)9T}2 E)dZC OW35 铩g&Ġ +XE,'fG-۪TK@wHM?7q)1S$E˚}p_,PW@׾A$!P[Ԧ_5h^~bg)vhqq<,iA`h=A}Vp{74YwΜm?@?{3㜓#̱O{$N<}"übU1gŮ洵fL,$;;U'uRl!<>!ҽdrmm%bkn[[[G.sVnc|,W|ڬVq!e6' rm*\uNd~zyߔdm.;`}>WA':KrB+UGە "$#}y:~q? K-}ڣѨ=aKMxEMƃ73ط?jA ,_)`ҋBn?R?ʟ_4ӟ|ko#}Qn~|k(fʽ S] դȉM\1Wݗ1ɣNcv\v IGj u`CZLbi`,ɝ2Zp\&Ls߬O*~Մ, |O|-L \HʃOm- :hL;;&OmzJp+n[?Kf&GCm@JnʾzV͗_*/8f;~Epg=j/ocNm^>ltd0>u_Ai34g.sSSYx_}6 !wd1߈ 0*̮H\þ (]M)}2{}b2Ӿn,'Qa9?'!Lqn/2c~KKl}[r$~ڐPl@$^f2tlR/6r@y+WUz۵3D!o*!Q'w{)ƻ7 t^1rl3A#,F7&*=t_ԠөҜ=';٠~h,v4Tjv0<8Eiѐ9E,N-7/i|ĤIУb'cFzoՋw87_|1Yq)4ۗjn:/%^J:|ç#.0: RBqKY3zw6iY#2R )Xr9O$Ȁ~#OF2d D_E:ەGmtKE[Ɨ_|!S . ijlE 5F,DO?>+yLIdG,X~BD8اfd%wʳr_LX0Dr-l: 8D$AD0/R"QGcOrF{t#LbE',Y]WbϢZROd~ M/_/'[_`pIbh zek@) H}^Z:ѓ+iU%/`ewa!ވ?X -ƪ"."*YӒqKMU=n @(~iX Y-~,"jk\#|FuqF;Z<\J[B㝿d (k/x9SGnm̉PɈSHvk2cQҚ4.ӜVSKO 83To@,r-ܒTŠ鋥~>c+ >H;`wM, em !9>%/7J#]blJz~e|c.6P;qIQt"-~hE:aϼnF=j zmg1E E魼s<~?3>W__lz4+oJz0V홪@r#Խ"yxn D4_y!n"P}yP< _Gn&JA A@zˍinCR 9pA@7Xn5juQD]g+S*W:|WbUNCàbGD.zmTrFF)(<E0[tk@؇}vyȯ7-Z>CQfV<?f:G}g1(?B2-QW_wہEn/>eI3d5xyE֌4';rpsdчk2001[$\ڑ`NL{FLths5GI.C?Qب7e8O4e< EOJ7mӈDe_)K-"]Q7(rE.1ZO;^fiDddM :0J afc3Ur9IJ]s4_#ܩbG(Q96?5l5kZwh71Hٱs5ڑ4A>(S yM>Z;$@AZZ7OnikGa/nW/G_KE//Ws_H#.=Tl#_͐xA EU/1 {ewbh]>es0<~a@[?Gܹߐe{AiB6}s*{;Gh:YtT4qoc/S\hH^Ҝ/1'ٷp? 7>vNrXg^xoɇp @ u6c| "b)w+0O]S0˧W8k!MհXŶ0\,7NG |6DrNRV vYP "/} 2NDdG% Ci Iw,Q $É=<\6VUPk|dZxQ)e4 8}QƇL_nkF)q=!s,4'ʞiro" hK C gL#& cR)ۄGgO$)Tl5%p~ѣ?eї~T[\n~ұ#.N^Xr><(V:(JnhL9Q?D/l4zQa8 GC7^9ns~Kj Pg,d de}4Pɘk œU4UԋH^EKH4w,ž)8sh:?CQdl߁Α7`=yko}bB[$L9T>o6YiU{V80jOb2o*#E9;$&OZp=\N23oЖl)_|ÉBnF"_˷L.U,^#G u/4Pp_Ӝyd: `m~M}m߈I_cA&Tl wXeq _yۯ|eE^޵m'z0t7]D֢]d-Ae@+=_ίٛ׶w -~v-dɫo?H="QGhƎ S[F9Iܵkq0KZk[t! A# ċW8U1vn6$-Yw>[#Fqs&8 _dʷ-!YEyNkXV6:qH<9c<<`/,R#ril؜yAr{hLͯi>„AtA >fꙌOd;7l2q3jɻ׾8UJ\'&a1"@RYP}GaJ-??s I0ڬ5jf?$reND0_K[@rc]G<7'QOr_!'i 3jI(.3kM|:PO&&%VW$zQuTkJ0)(f ʴp}#+>V*d" ɯ'sve2*F4vJWRˇ/qYpsh˘°`2֯:N|3 >"L?Z4_g"gO=;XAx0$ 슨b.qk9LR 3g9-kDDBٖ0 RTH`('@HwƎ`;f({&*] @@TIQh}B 1rwsC=[2 HKXҽ=nkHػӬ)H(Ҳ1KAEeIِW\ݥ7j갭ZșY>6~>3~H+;:2uoϑЫ}\Gn˔`AP/59O8͜XBEe q)>$8I;|7G^xi%pM{$([,}M$S%W<{3zxˇJ'+F`㛿j"((5w_1|:3ͣY[EgY"m0L#^[b/Oʱ< m0ti"꯴ Df+^l&׫$/aEɾPmp3NJy)"$x0NGP7>umxE970 &!E)ΰeiLŞ,!7E0;0>͠X{1o̰`ni6b&]βPS 7 fr>f:XU%X:}X+f.jeƖ JKg\Cf4!MJĠA'JMG X8tв-+oH ԡP1_-Fs&¼oX#G uތ4@tL?3ӟhBTF{Uu5}BOW B3yTo I6'|i $xlK<V0T|K=Pdd>꽟JDTpLOjNny1i͂7p s5yF=7jOCI$*dYkpNcH@u'ٴURO.G#viOc鑜TJ;}#ާ?͟?'XG3oa/%ƖCR;ZzZ֟` 5Hp`փkGQ)[9!qˆKLm9d_[[)1.9R&ϲZ?22<޻n-unVY|L7*~}6ٟBg}tO%*4lF*--u K{~8,zRƏkbحig0b*x;vmlBgh%w0c~*+x`OD}Q<@3@LHZy(mtH#OT=e{ ?C<4345,hÃ=>R~"LJk[}pT`0CfV,paBŠS콵N1R_t@w*0sr=;eZ9k,NIr n (k˘N YedKܲTT:~ ?AsY~?0_OxrO[ %~Tkj3>Ugǣߌ-=@.g Q~0V&Ƚl0bՆ_]dd33qnpIo5."}}6 :mm?Jr˸kvNKYՋt`QZ~gyݖ @olGser:b EΣ'E6*1p@UP² JYӁ( ,liDvh`V 6d