summaryrefslogtreecommitdiff
path: root/drivers/staging
diff options
context:
space:
mode:
authorJohan Hovold <johan@hovoldconsulting.com>2015-07-30 20:30:40 +0200
committerGreg Kroah-Hartman <gregkh@google.com>2015-07-30 13:49:49 -0700
commita422ecd28eb03eca86d2445d8d690402e183838b (patch)
treed375154b3cc09b0ad2b5065fc0ff407da4d15cf3 /drivers/staging
parentb1e4a1f8519aebfbf99bee8b3839498f6645e2d7 (diff)
downloadlinux-a422ecd28eb03eca86d2445d8d690402e183838b.tar.gz
linux-a422ecd28eb03eca86d2445d8d690402e183838b.tar.bz2
linux-a422ecd28eb03eca86d2445d8d690402e183838b.zip
greybus: usb: implement hub_control callback
Implement the hub_control callback. Signed-off-by: Johan Hovold <johan@hovoldconsulting.com> Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/greybus/usb.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/drivers/staging/greybus/usb.c b/drivers/staging/greybus/usb.c
index 151e49f8e4ab..17a5d7a5a824 100644
--- a/drivers/staging/greybus/usb.c
+++ b/drivers/staging/greybus/usb.c
@@ -110,21 +110,41 @@ static int hub_status_data(struct usb_hcd *hcd, char *buf)
static int hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, u16 wIndex,
char *buf, u16 wLength)
{
- struct gb_usb_hub_control_request request;
struct gb_usb_device *dev = to_gb_usb_device(hcd);
+ struct gb_operation *operation;
+ struct gb_usb_hub_control_request *request;
+ struct gb_usb_hub_control_response *response;
+ size_t response_size;
int ret;
- request.typeReq = cpu_to_le16(typeReq);
- request.wValue = cpu_to_le16(wValue);
- request.wIndex = cpu_to_le16(wIndex);
- request.wLength = cpu_to_le16(wLength);
-
- // FIXME - buf needs to come back in struct gb_usb_hub_control_response
- // for some types of requests, depending on typeReq. Do we do this in a
- // "generic" way, or only ask for a response for the ones we "know" need
- // a response (a small subset of all valid typeReq, thankfully.)
- ret = gb_operation_sync(dev->connection, GB_USB_TYPE_HUB_CONTROL,
- &request, sizeof(request), NULL, 0);
+ /* FIXME: handle unspecified lengths */
+ response_size = sizeof(*response) + wLength;
+
+ operation = gb_operation_create(dev->connection,
+ GB_USB_TYPE_HUB_CONTROL,
+ sizeof(*request),
+ response_size,
+ GFP_KERNEL);
+ if (!operation)
+ return -ENOMEM;
+
+ request = operation->request->payload;
+ request->typeReq = cpu_to_le16(typeReq);
+ request->wValue = cpu_to_le16(wValue);
+ request->wIndex = cpu_to_le16(wIndex);
+ request->wLength = cpu_to_le16(wLength);
+
+ ret = gb_operation_request_send_sync(operation);
+ if (ret)
+ goto out;
+
+ if (wLength) {
+ /* Greybus core has verified response size */
+ response = operation->response->payload;
+ memcpy(buf, response->buf, wLength);
+ }
+out:
+ gb_operation_put(operation);
return ret;
}
YA#)e?.mu@Yf$  3 *AP,s|3/7>3{3ۓEXVs[`L+d%ALFpX9OVWpj=}^!ZmC 8\?XZВjh[r_.˝D}4>S0y`ӓѬ3cП=;y߮yl^vw ,"vuqjASoWe8k0Gn"=5՟-n%y#h.*@%FʪX*w\2sMb-esL5#:DJuj y%1B&'GΚ<۹'^(;[|P>FX1bRֱnbc]0mQYl4u8<\eIɬ_ wB AqAdT.!3""LAaŶ` Hi\~1 cџB1$@Cfc@YSᥴeҘ$b!JPĆQw@QXU ˤ lm)i[,d,@A? -``ǥb3nbE1@LjPz59(m 30FA uhT~KZ}ڍxfʀ͍$7B̧n,ˢo,cx 7޳Ix.D$,A_?r꽣 3Bd4Q$>B~ X6.nERFv'^eyDq ӽ^;>=Q.M:M ^ ,yY+Zc wQ^%tՊʢ\1mQ6rNWw*Y:t4jdi9>usOynNy+y/Ǯ2^V64k n;>n,~n#sتsuیDLA1۞>%O0;&Å,CHeJEHX |(T,jy<9z=ޯMkܭ~ȉ'PD]}i`) @0ANLE; ::3d$$jCP2;ztLcK.Ll_4gLnY9,r 'ͷTd75X 8wV]!:zΣ&]ú%{G b]t ;hD:C̭-b(X@o-å/2i=OZBi$JT9@njfjMqՅ^W)#eb-A#y}vP4SsңNa! Q^BkֹM~: 6+X\1tug{VoIEj~@:z]ެDaf׀gȈ[w_#"j3MNKρzL}֩,_nQoEv:>h JP_~{.?[ejoSo V{yOɐ3N]UUmjcm9PGjjmZ5UQEaSȀw)In͔JP.2iGNIENj+cAVLO_'qoI:W_|Qbw۳_3H(&*}&{8TI$I$p]/o;kU@t†8nGWۇ8n?](L^;;KJS!ň~A^G&\u{19?[t_F$`vn{'It'3n;KIyz}LVGuOgV5fl*~a[݉ZOW6}t;T7p=Ds~ .oyEe؇=2fKiC\O5RVuUT1N,@|b'/`wujA7 4A۔$)9EΓ*@  }s·I:ۤ3Jo]XMX&?YV~"}X?N:[9/_ՎVP((u^W׊fָ?hR?s.q tϝ]$ĩ˅s61r=R!Ӕ^g~{OsƳX4βkƱ7jFz ߼7\-l*Gl??W4r^TEB [ C=}o?(4]ECNScGZ[;$Iq 86>TyC|)T:տxӛ07_/(. 0|AGO?a悻gDC'-!)t*2[ӕ "O,`ZAk# h*%{Y|4[r:D[y\ V™ϞbF2 "`Ve"M3 qGӼk%NH,?^~iErYֽkp@ ! :zeF1TBy֓܁6?WQ*=hϭlLvY r_D}>z S -*z`䩖>!u=obu.ӿio_-`$$ 16$ɿ(u/À3 m3}@! ;r,@DldkQydH&$07ZrHsұPTQf|,xx'Km7)%2V׿?˨{E4#nGGC;nӿ !M<k!~_ X2 Np6Lp+vj= 0;>zA`WdͨB]$M2=~?4w+X }l sU(^" 1˓$}d9yE2VE#n04X6C{ù׋jgVN(\׃**θG1\]R*5Jg|(oeNJ\}<7+\{Ak ;;1 {=Η ,,)XGU 6}G_`lkr e$=*Q {e2v Ag#{9GYnw({ZhaHD8CqZR;axXs-G y#;z}٫_>KO>>TNK-虠\ HG!ӓb|xu~_g 7S ^=c`ά ,rqxW$`pͩ2.q;^guH "녿/KV) =vVHt&uhjBmT@ v Q$ 1XBk{۵h,w:/=x͢*duP,24snۜ=Gd9pgz*~_//-'$"WDOc'?a@/䇕V~21ɬ]L56J>mYn_~uEŷXm<|i֧u5&YhZK W zVbl:y:⨒QtJFSqc+J?rzD&snp5ֶޤc8kMοkQG&',=7P@5ٲJ‡+^SV*)A~[u@C7wve~ 'Tk`&Ȉ԰#KaXH]ܨ9e%cYJ]ϕOGE,ˉخ@uB%iO[Wmn}A9NuG]qH?:%:nO=A v wi>a#lscڡ;6_@ ;t " 0qƶ $t̡.hZjDc #g$3:mZ"'T.-A:,,;x4 3;YW `Ix6晈{1.ĚAO%yUi`|plW ZfK<5d"[p058 ~H= CI{UmO֝̀8|zٍSaLSCH1F)1s2EI 욁vZ:.iX3ɡMX/9^calWGBzBY:]rQgz=_dRcCÝ1ű1jYl I8^DB\{.)P7˻NF(vJQп~j8Ky;6}8Z|uF#ntۭ?OgYhߣ!<âCpq!5\ Q5<=_;.PC>˷|fn,*q_4}>qm%73;{219Pԍ^!b:Cag+q@qV7=]*jΔR: lsz-b Z* 7-/zMTZ[nh0;? & B~ g/Rþ!vPvҚ%;3 #S4 :D.;z !Fc3ipY0m@9I騎Ӈ ѕÛJo(48 $=ۘs-َ!*2k&A~*N¦s2Bw]6 3#'9Cq3mP 3z:t:l!̰zN H_?I F_xX`Dzb|PdUA;uqԏ!'Sڝ{O[ qX5UHL zLl 91-6 ϥa 2kG7%oX=\gέ{wv7~VA,A|1YmF?Y&0Q,嚎Xs?۞b.w~TUB޷ndswd@6mM`|z >vQτV"ޫ_D!)9wnn;8tLJL6\D.epidW};_f}\:Y{܈xpA(%;=qֽ\%b0X#ǻ:GD#{,}u:_0 D .ܟ3Y"Kyx7,QL:9͵ aQHZFTO' ?]M5Dp^ q$~rT#[82"vZ ,)='mAX~;'7%E?lD?C6l`,z'[W_-&Z&V2Uuax|Gv-AVжA.v˾(b1en YqїZbCW)QWAP: ǯ_Z_Ԯ9Z:ACK;w2d{]ALnyx( <)'zW.̌FD@ z,׋_qBQ\z#|MK=bؓTȴ(?mU[@^ }ZDP jaoǙR['yX1,*xIsv[ +[хDe -v垩vh $="'w~CKSeGt,ӉE8(Ǯ9:˪'!s\/ڹ˷7CmU'4'2 Ǵ;cRRlt䞗sb?gӐcDz,ILN @z'H g*USs rk]z~. oWۚyyJ=>U^v=/cWK^+?I)Ɩ*ymrt60 ;2ժ@z}ꎑyrצ]=|z?9D={7b$2{ԩ`!gQmB<յ0>lÄ8cDL%ď~8l_WXW:  v{_h{6SN}ٶGo_F>2E(Mb؞n{'mg;?<>XuYQ;#?3ic7VSsH>Ť]N/plR4m3s4p𯾞 l>3Lxx)rԏ~ Ap vngr ֨Y!1VWZWL)a>haO"uzBnB/9sw:wGm՞pg5z=/~H;}򶞝o=ΊqG+Gz}:uKK7?zpr#,=QY\0^cM }^3u YMa.莙o<PZڅs|!w|qHCbؤK۟QzVeB =j>i*xQ5Ƀ88b~R1uTi ev}^_]u/j `)8@(>|6va4Hۜj3B[{هà K#;uC%|u%C{^&S1|A?3b9˳8GRC΍hW$$N<.+EzWf8q ;#rӲ0"prG%SwZ<7H$@RPGivr{P[mAq3;#jP s ܲV HDxv ǵtNo nMABᴠ KuvR<ڗ~7эvê͓zpsg'S03`l9K߅:$7x1"9(sžv2tͥ$q-xm5DsQMr* %m}tޫt[bQzӠm( B*2ooZ"J~ïzk#&I5C^ؽ}tkU҃WpZpU5#@sP/GǼa`h5RW&Asld#ㅷB䪄)D2֯0D>s3K)R<32 ݀i%5p~ $a=>OF)0{@$964HP㗳[ǖ~̠}`^?V}-m6PQ7U3W䒓 5ܧPKu ½Rf~Ap;}+ /@< v6/:2n#@IR$2h^>USvB=n~zw c_ #CV> uo[$w[o?*%y5^ߏ:aA`QQUW|]))ec_ᯎ)A^E'`FbuNp"g7.xFDcvHHCHs\"/V|ZV*_NKP .ݘnXME!bxF,t*,1[Dۆ/r\Qaw, z>蕯GMj2FޅΈV(fxuP]%aFԧ+Md86&ppp~O,qO5a vF$?:Uk~Mzly[z?Pd 9Y|=r@?^ /ykIGp,`@d^ 6뽐;TD/ \P/ԴpvT?aN($@< ẇ@MeHpgv(P(܅TuZ61 X3zv'P=m1ᦻc㿚}@sIlx _kɜkCy)r[&1aA}uZ^>gfo#8|Ӏu8[ـL;:ݢgA:l >yǘpU wR bfӨ/֏-Ocl&_z0ziv_tؔ^"]VkПFJ m^fA sAjk;bHVj0q ?2'*v _[~7';P04ׯ6n ȃ|92vjosk miTRw{VAtK)ˌ ploN>VYW5s!.#?c-nrrN: Q@F/yx@:ƶ*Bkfh_d]4ve}~!Ł tr4O_~zWhP('d{(8yukLw`|)MJTlYD] ϹTANih jL+ʖ|5֕=H@zY)eRh rA|^ݣV |pdwY9¶%%M~B)v,”M'F<|Ē~NV]*}^olWfo9ѣ)9Q TXrN&p,lno攨`e{0C8}3hrq"~#ia`¾WwYsG }Ds_)fP!>~ԙSm!\|bJ0)kĮ "ˁsPdl6 <19ñ肻q CoV)~dBוZ A?ٟcm;L3N͗EIAc)"_R"臡z0p+AedGw=~^օ:c}5V{3&~_̞۫bX&{@ r}zhqY\-r^7&XwU&,vzS65 y0w2Y a/8+&T#M -L Ǡޜ) NF:PJ}Gqmi [G"YseqMK㞾˩z(j1D=C`6g]:GWW;cee'$rgq̒.YKJܞCAL|O(3ǜe_RD|pS( @r^gpx4T>7k Z<¶uP@-ttLfd(d19?6mI%qmOe Q2$!wh }D&$X/OF`SA8V^"#C,c ň𪚯[H;8sǖF722M)@a /4!e-o,)W{V^w`F!>rHKݻꯓ|ގmo0H|{Z wb. ۂ{?[ݫNo^w2 סǰMCv|G .IJ]XC$*O Y0>[q3ݨ= fQ6W3 !`=CȨKL IX~p?NtL9>s+>"5W↍Lʔ[}KT7iNi{Bm[hIJaL{ktL,ˣ|.p"cǦ-!KRnփnչPN32^ ~(8'?q-Ȝ*rԱs"7naj=rM10L3Gox7\>gdh!&̫e F}{8{޵Z}kSFe۶e@GYq`}^sVP{m-n/Di牗\ƭy_NM) Tҙ e8f̝ffu2"={E"JͶ"JWqF:҄~~d[27Es:W $ѕ-wXfoz/hm.u\muB]9s(kuN4EQΧ}>ra` k \Kij^R*98ss6sg8t6ܷl,aLXO;SRB+|.4>M^Gn]qo%)!/r{Δ(_wQ1̗[V3"(ǯ9 5ڔ&ٹIN&/bI !r UN-܄&K8%|:<{dbs7fN|h5t%}NΎ>u|j@^Tm&r\cLǪz;bh hA$m$~L.`I5̝g]йM\vV?K׍x[RVɻ3$cCleV5͌PA!Aj#i\C!Qv]jw6[freŭ˘M0|鏚j9{O;CÉgg7w[HJ^t_#ֹ~h{uyhmbXj:$ҳʔgj%ad 3ʙdT"| Ǖ27pq%ëX-o6( Z )><<4 \8ܮW-Cc\lOB:I;'A~uj38MK%}*[!ү8M )P`W;/8 xNU>jbuN59®x}m/S1G'zZ?K!eÿ@tvA_ |Eitnm?߯:es>,sv7_=e;c,o~>xw[vnWæygEi[l^A5/OVTP+mT["gJ*}tlG],P~=vD2KLÍk" E+pUԌ ׮ f$@oY$YD e|a*nEY&Fb"ODaץDA9U~2ORj9fi4 V)^U< ·0P))hME-no!:_04!WTܽݹ=XD %W_sB,c)!-iS:n;CtҞkn,qPhb|Gs \>E7g8YvTFJ7&qwD=S{u * x(Oսܪ0! L#AJ6FO:M)gN*3(J%y *XV4ɝfbA}^e=Q.bGQjA^ZD\/t(.\oyv`ˇMjˏ AAtU.Ж-uW Ee6%l;`1yayڶprVCSfsmTX#.<Ƀ>`x3Up M{-s9MsQYj&j)2 mG<8"6QP7`vP4yzw FT18:`ȁ;ӯ~zMyњnd@mw U^<"ۈ«')&u-_$Թ٨4b" _C<,`?'~ (P@ǭaGj>^˳BRC*տd`sA| + C}wh:!m =|HBoZM)r&cX<ރ ƒN.!f4摁(UQgX"]ܤfW\f9V͒9$Z2eݾ-9Eu:pGgCcOW]Lb,u+4wl˛az%fLCe` UK dFB4:i*횹e,5߈~V1kt-ISq I=L(Sp"ooϥ!uksJffz.<_Pv5  W!gP^',[}qj;c{>yk\ ئrHy+4|BQEa6map;a{}헧<]=Yy ?(~('/RjW6^a4Z;j)Ry~Έ\hI{ q9ĆWãZ6,R,͚F&KM 4Q6l0(B_"D"F ;4GgFH<(5fd%D‰4>3 Æ&߶l_,ք*{xB-8br#zL^yO/R[~OO l/S?:[wx6=@".7xnFC5PeOу% cbqfZ/{F7FaSYFf8;#g}_չzGËT;*2 |H?J-?nhR#h`ZGFF|`+Ů}dz;7N5Xzk:T*7Hp^!zNx@vr `/]\WÛ-ggܰkoV;YS= ުyw \rAhS y0*TC`emnZ.^~*\,VpC=]2M7~wlv=-#mZA$I7хV"N "SpQ0)ԥZw?NkXa투Ɂd#N<=Ϊx뺫8bF2h! VyNI]N߅)J2w<Uwiv"ˏA씡VAw x2Vң8ffxq5 6V!X+7?pt&]CQO ;a<d݁`3kžK0tjP<$XD2 s倂z>e~Kg6n#2ꢰGD26% a䆿.ʶDw:jZvA-DPKE#R9l1DDuj HT0w}p=jHՊkgC9U-]Rc t A2:$9<:3C c }|f"]ySF60C*8=- cs:;W)KIK"Iޡ~]LZ?9]\Ar~ 'Fޕ"ٳ28d\WKUA? kdv  tA|C&$QC=@;pUeL{>!l֑2H`wY#O+N7Rs}LampR[Po45 hh,e_WC|]D=mwڽGJ`G"-0 ,BEJ:Fh q2`b#zb#4t V!zos !6ݱZ߄HI&?ȉkp?V0I-2HOC֣@ c]{[PO5P+to!pϫnL:I?>X3Y7Cפ>aᒐR܆"[@t(4D'A3"֞5Jy3o N͝~Xє8.M2Tb zއ,>8Jl6P3a^4`S$}0j\b_)5?S2V곊}ZxpA&6>f6k- b:g\o=c>϶rUX `qWcx׳t6oh8TC0ɓf^P{Wrp* jt$@% sg ߮oٕ9|}Vh`p{,a^nXD%uG%i"0[>)5p@apBIHjM;c:o]WO-7S `q"VLwk{kq-/%e%.ZiEN&.#;OMp;:m߾p}utr&&6+}mGai'ruw<_L?ɓv|Xs4gE_BK ψ%_`M^Im<2f.D~GʣaP+i ʳSc~F.)-a{{X6B}bB 0K%) h(%s}\yd08b*w>F5 ]s =퀁H̽st },TݚfgVc.UWDAHvμd%4kِnV.>g6Jų&HwM5!!3'5/cnrB|A2J%bܱ'qJ64{xl/n6{jpqBYXVQ" 6KǬ U7߬mg~h{oт[4~GT>?,:}\tɾ6w%=/gtuW6쿙FuKdrl )zEE8ͼ?18J"@[ sxu *䁵ʓm{&nՇj ,7Eޙ\@C ˈ|JW |-Z l㙕_nzokh!v[?& ?1ә%d?/)qSĞǼq筟}:Bw7q)xs񩴂q\%O=,j捿 ]>fo,JbT MZcZ.*-̤R:}KJM@?a|ة3j>+'ݑM%L>X |o@NCiYFAX(ןRQ'f= Bz}oYJKHG3@m-3oaFcErj#tV7Y> _b|?Ͳ!]/36ig%KZx&уQK<^pa},|jAun(S$u  WAa&.A'}no})#kM=\b\=LDf&m\8I9%mLFK0Qdb-T8  Z՗`ٲ1ax;R 3eUt ?lBNHTM_dbUN5Ryi[`bC;$І4r;iP@xN)|Ƥo֗5ZRIҁ)5$Զ뵙9*E]˲׮<+>w?BAԺQ>_ dapm}10ml<2`O`Ӓ .GM %N%eya{/ &S +}n9p㝍+T3ߺ)Bߞ>W˝X4;Q:t%ҜGkF"T0?E([Kё.G+i3a܇-Y/H@P~v>]@?~Sļﴟj^^( G%>axcX ڭ5NE~^>rJ z TTDH|ZCC7)%0e6A5QWo).>*vkm)2f4{4Bu6C^1~z@_ڞ -$Gk*?r ݚ)D}0h(3QzU n4@Ԙۮ *g諾0)#s[@`WOT`MvTy$!#JT܇ eo '[yKbtLe(IQ]ۋ!V7N3ȉQs20j*V䄪%iv>{ N< .ZeB~2,qY MmZ_o,|1trl^XLߘ(s-D )3:Q} <߉J$eU@d^Vl+7D@5D=nCᳯSfAYOxngwΏ:+(ɶzTb>,NAc4G&{uWc^|%)R_{IfLc!iR-?5Ư4 c%*Ř\XRڌLA?ll*$ߍQ@т yѲwA,-xT@LuǟdZjpQ&!{7>ϢH*Q)|=8nHILd"};OL~sks97:}'e1!C>`R0~.aNetjP6TLc69i->_FXc{(o3%ON}xy*Z=0V]:(X)B&bGtj'堋#U 1AB@& Jd({ԥk\ð w#Lsj8O1(vGk%'Bt{vdDr d7`_kV3 qb{Ȧآ$5b`Qi'`?wwU&c4p= ;@"HxuHtQk5!?t;s9y<u<#WߋeRٱGp'sq 9IHwPI۰L# 'H:%3@(5VL$@24+C]=V ˦^MKڡ&_RTUP."8| lMo #A1* yEɘ3W2 =W!n QU֎>c>E{1~U&7yʜtV,wQN g4E %͸s&r~_Rlk(; D.Vvw{im3GU;  MZk-eH-wa BL17ɶ}!$ْ5YX"a&CYyq[٣qu1ww1gLNF"š!(+Fdv}h'wÎNF.uGYNG_91L|.*h IW[ۯڎ56 ,*Lt6W &p 9G]!R@򕶸d~ ]Equŏa>g5Ō7g?Oمc_(Z8OIy/IxuFM0ʯt+"r^ң\iaIWn$/9:UK"2YԳxJ(t:-;,b➸HX}(=ҏbm2?Q;v4Ua2BL̛ f5tDTFMJ /z^291! d O[[ET EOǝdn1v)&&'TOR&)6#P͹_ł,ڜ%(R1{v,UX-q@&vo]V[=hϗ%$ uA.rm>qѺS;I B ]0"=ǗaRt'w99d];r#B涎P o*27X_5uK ʪck|$ hRLUYeۣS$<0xgvdvb`B MGPU ((jm?=/'#ҬEAb6իʚ+,E8Ah=˙q0r"lvg1:uUpve⣜|:xlǿ8s^tQ4k}Yr.fp翌C5ia q@l!/ѐ V"t+?x?s1Bs8}@8~9L#dK=L =QJjޣ,>0Pu~+*LtZKRyUIȅ®Lgo+z:J8Sr#J!+@F,*+c|y_`uz xxohpʥUQh v?ѵ!0qPWg!UG&b[.+cq]JZOi3D68s4U# \5 =c($XwzKY ڗFLV<}5!mz]§OuG{RwîbCkJM~СФtQ4H̿P;AJ8 j|sg91I*9yp,kxs)F,&Ӱ!\G#wR << Sg{?15 0My>.;#xBZv=c.%w3!eũi~͝NV?^t`B/2=.Pߒ{l*^<"T,bYe"~=ux{Mb6Q}K1`/:Ār-4.1V[LG) }'y58³.qrR#b[H9CZ{=Rd9axfobA,"GsMPAGa1- y/.h3.vk9qZ_3W\ xBgw-^2U_8%[ L%<4{瘚iQ\@[ǽ6ں^h -@TB@·ݷ?͜2ɒOItT{&N=γs_((#awϵlROѽ.GTzPн]e-Ѵ#+tpX}nR6I`!57 V~ΌHVrw'qBw7ND[7\o[-Z:̫2)C\6P`s n>_?yh&ʍK.IFWf"P>3d$#Ah4 JbxhS峸Y,\>/w qj;s>Aa,cl*nkER6c/הfyw=n]Խi7Fy}bfc”<7;5~rR&YbOzp7Ӱ쐓:E}Gl_&/^$lZp\?>hlG// MFMvddkeoZ%y9ύTVWBs4ŶIi%0K`HoQڼU21#oY"@.^ c(РFPH{NP=Ws?"[5 F wlus8O׭͜*po4oZAΨ~+NoɢvR6s"< q74"< =fҭ0?EǚiGi||"9s>V-1ܜ"K\Ò8d_ ͬWa2\tвp[92*@$!WU@72;,$%K{8,nXYXOB{PX6(D9qjzlt#.|]ȘzOz}8Ƶ}R(-z457$b"w; HjBoC}^ɣh; H4 [קVIMme*,/jZUq,%\[g 5r Y OkmL5V nAxI7MREh7 PPV߉||6RX___Hf_tccn&WXg4oYrUKvPOآ󟙧=t0| ]sy>/-ڭ{=ce65 Z[O* g'%(mYm[Y|7mZ99hE)٭9C_(1W͛\!/ TyC3T%ʨ81 FU1N1 Qkj[`%[VjgC_[6I =w(R꽀=;b-ARNU2w#=2|R[qyS2#ǖ7:(!l2`Ih \yj*a1}9`{"+ ڭVĿ]ȓ9Uw11~`^;wsH+[c8ԳϿ` btpD>.@CMڬr"6O;7-&OJi 9@.P"H`ln{wg ",iKxφa];e^m(erCiEz,ww aa0x6 T(sZڠ\7Z* Vდxo,ASC\OD箙<"SQ qpIj#G@>_)PrvR/ R|n:agY}s҃ؔd؀>GHϋhhPL)xoC}*el>cgܜTGgpV\ϦKSgJ/:Q ^X͗aeـwfV$\,ă/(!⡅ J83h oVfk\2y:rOEw5ƣQv :1OᎻ=F~xqtGwNq77Kqz~zm1lOs:״=K\s `@>pZN :;ǻ5](!cD.!A͒8uo>ABSICyKncuB68Y T')B`?y 8BFy6KyR󻺦cC Ԁi@1яV1 +Ejc7yU6utB>=L&mdϕ>C'D){3pދC% Q)Z rW޴ˬ~=KJ߯GΊra׀xp \G<q@kЧz v6]Q Py? yk /"g:"QLVr"Gd䏈{Y*zpv*C p)5/:dC5j麗P*Wp%mm#7dX:HJ >OyX=pdI#H(@,ܒxn'KrM>CrPzj*G͠4 X8(U++{.-{&w$dځa}w"U5:{k$?'Q=/hCm5-qf&~AaH<+fQ4 NB3Hod0p#c.??}Pes+rvPTojcT+d l#_y:7؇B5c6 !翘PYKw^a8? fw\{eME4؞}d,];8/Rm6Vv}S??]Տs\1{tE>8/i}8r g/X40‘fi@ԵmrƬ|FM~0Ý>p+x/!8lr6k?pi?x|-ji ~I~ JJvj 3oO36+a:Cs ܠ FK ^]2pf&s{¬3T+ l/"YYۗ:FʥYdmV-a#o@E`֋mc""&Pm^F}4<8|a@QM 7H^u/.w`D{{h }'ԧȯ&YeorRds#㊇=QU,γ]ʴEA.M"TZEyKI^F)4{YpWB4eRznslw'GbC 2;(Q{ω!E%TOorCz}L PKx;2~(2pԼG4 dT }u60;;[U;|z5BrtR7"Xi^.PKw+V{fv.,[ (į7/Dko2P8j@,0r;SF nvI5bQk Yr{(na/kHAʻߟܿh釳]~t{yk@HF HAtgh^c+[%B62[f>6_}((#C(Etpk)EW6`/Y(Agi?hhS{ώO)>R#!\0a˰ԅ=;Tn-ki`+nܒVwDF X-ruWo,klk`,QՎ# Pu*\*vz]Rȅ7Rb`epe ޹EֽG{颌>x^z :lNCZoKsMO YPޔć$o,o>@r(❑WXrTz9ƙ!Ŀ(z U&1[t:[,`p22fh헌}DZ@jǍ8֟|'̖E&@f6IuЃ]%k T}xDJ󣕢D2ϟ; 욝M*7n.F3>vX8eƟ"Mq5q0t3橑K5 :r^#3KWSͼ9ݯ4L9S@ qX·v'gnhۧS)&C]/|G<֎j{? ]O~xc1KQ5Xʦw5Yڥ q6tA*5))-Q529NvsoVJUr 1\f:Ef*ks c%aD0U[*4Wnw') c&dNF[U5Ϥ?rԛٴbsٷX2h-5o:vWiJ <>亥XZ4ۧ >J_Aed.R}f^W"r;}hQPۗQu;N.y(ż,e%-B`C01YA8;xS)=4*xJr"}ovN."ZkW;7#,GۨŽgZpw@='|.GtQyi_p>`geٓ/2p揾31O/)%KDY'F'˷ߧ 5ό[ԬAT(MpbN|!hISF9s{s3~M]5gOZj\tB#}_gnj3bîݞr7<r(Ӊ*S6 ‡}'g.Qj"3ƶs8$}~nOey9zĻHYv1Q_#}f`JIEn5vͥBn};9xߝbpӞ>pi׃sC 0QI*,Xg$JPy¸*׶;fyJ &DcYv9]?x&&eI1m{q$~}n6[Z)s$gZra8bCC+/ɔy𱜐2N4!:ǃ{wg^x:NMhqy:LGZZtiX4qj!q8/ d9P,#-fE)T)-q;Z53.g[_ڎB'Zol>4ɳDxy߷&ݻk&&7JH"Yx p ʞ_ c`0_ wOC#Ԭ1)%XOl4e.?Μ ͵?#\F$=/?5 xʆu:-LM5ʼ~gӌKt&LtO0}Yw/AV(S.kl .ξ銨 ż ?eIAͽ^,BL])xw:XM>S:i& \aQt_݇-q;C%/٤`-UzXg\~f2^ YJrJLn^ W(௷_"aw D#7յa9t| 5v$$us]! *=Vl2Lsy0+^NAiQBRI:Jiv>q9T: 0OT|3k{eJX6dEAݘ_\؏j `1!Gs ;Qo/ vzvyvv5]K.8^rLy%SL> ?/Pq<N"`GD1 ,;lqe7_aT#!%7M!uxYn < Qa-d:@$㚉pZyuWG"5׺ *ΒB/ye R:in u;k6 cBʜ8AFs o" CH\DE2SԒ5 ʢ A _ .s 1*:~~6^<IJ ƒI ¡QxG Lhn =;@:帖NǨj\d^闃ov Zo@\d,{a`QDUKV&7ʿ4z%}lo/GGsFj@g`[Qon[|+ĨYZ N*Mn+g^PBqBڃ6rN*4+(?db/MBװPQu"bvKRehF Ӻ XlYp Ex BhOu]FP:̡I?꣊~aݑվ{AjFC*U-p!߆(EL %Rn5&)% ZcŦ:QEqV*]ۄK?\nhX̺dCؙW`)sX&wIHH0u؀w?%M~.F蹞*xMɕeȊ=8}b_.pu~.1=yApUp#YO'15Nktw^z}eju 531cwJ_P5.uoj}(Ϣ`9o_]4@Crh`/>yw{=9Dj!#xAS/YYC n02{Mw&i'-m(;Y!Ur&4YhE`@QX'vRIpo|ev FR{b\ b`z m6i̬c,sXHlEPbbX/gnmN(TcX8';4b_l%#`.Q?UKCo_[?z5Cp-:??Z%ZxfI`!D\úzM6vd^C}?o32On]+ݗz vx%?/;RPY]u X}e5 d*UOpE-6mkm[L\% 2| Dpt)a4Kuж"k!0E#{yD&sg cτk;H(b4/B7c>x`_MPAXiyAyé?7&nҟeDm}ŇCy|/PoViZ^?_}nfI׍ڨ&fV/%fٲ嵂[LĒ@In'fMfV0\X*<$6-E04ǔ`Ơ|G_˱{ϰFsZik8CcҘi VP%XW "b(;cuY U'Ro~]Зxqu3Ku^m:UIj]Żp߿ \- \O0Sp^U.[zMIfrFʏ:NxީL=BuiH|mD AֱfBf >O#Ɠ]1놼zzO6%!sw>VvrG5d+񕗍9'W&0s3r2CV,.)~;lo50DPHDAcch'd*}Ģk!\@)BNoы=;e E*R!Hej$30T"Κ=oOsY äG +h$L[7p1̗f߅=^=Ngx,?Gfи iJ&}tB(rb.l@ $%FC'XL~u BR5xO ]72{斿;`xTO*{XF&F#p>//#b`R뀢du~j <]z?ئ1꿳~vjNos+wg|^F\;PWa/6O?np<p_߭|/0aX0JN}Ϯ% ^/[VÉ0qY޿O(DK0JkHbhal+O.e XD v5)w 91 ",>Ct1ѱ.mDz -F 4ݖTHLX.BR{ H0<=>o h5?o}껺a4~{z;[.exTp/.8 K:p^ '>_tE ۔[zj8}_d'Ç.l?-1lאc#`zh?o9ta ˮ|F2^QlNݯ׈[GbOT3mX[ӊw}!Ҹth!!FxDd|]ehHDt;B.U~$CsBBG쭟AE_5=Ɋ%AR 9ʚɣ~oWWW @5jO(@.GXwNGr9A!?6 NVm- v8 C\t/Yΐw7OO^C`2 x-KWd|%|p=MΩVŮEݞEw>Gj_V36N`X=yը-p~ٺ] ^Fh@޹T|ls%:O'x]| _'d Xv=A_ֽr߮Ӑym؞ F a/6 䕏ya:p,ܮw6"35aݲ»Ih\̓@8x^#:Ak7|f(:5e?A͞<=YȾ9yc4 4tGG,iPt]?~}d Vk>YB~z}V>7aW®HK|]د"$J4~rE#H#!DTT Dۜ!JI_E濌7Lpɂ7g(QFhn+] D_Vwtpz2u(Dh ScZt4]\(8NsV&s|yjspt'PܜAm?4ۂ߽-|E<0<$K)L\Zi93z+*;p 3}32T@W&`$82 9us_WJXُ/fI M$w:DlQP V _'Z]Neh]37ފ7{>IŁ2c%D-j{ r=1|Yc~bڍqy_m±ءmHo =:PI\TXe4EI*/ȇOԉODe`DVde)@{EDsv 'LČ O &C^Ľ*h^[-yPls?NCQ1ˬDIWfOZPx E 90$;tAp+{"\LEQ>1T.+WD GEyCA~2gK2o/KijsO^~d0b>IΔ*Rkv^.(D(}ڷVXk,2?v3 \EM[&(.ϹCx8@iȐڃ+- Ü 3݃kw=i?_UO8<: B Qe)#%(o?m{>Z[7Yh:lt# j->a執yzmR>J1xۿf9p|6{}B [ ^ Ӡnqfjfz[ 'Fb1Kf:ΡVjdPCt.ю2sQ}'0(zD f6();WA#@Nh~y'ONC0eWrxss5{ܥ?[NrNmTi@P(P Pm|<;.lzWB  ,0 (ѿvH9pQ׮Ȉ)JO@Oќ4uO.)̢6s~Or~`NI\Gh=d\R`!dE/g /!58 e .衳L/$TA/~FϤ^[d GʭO)!i/``6/ AzH, 6_yg+`8̥zvvnFhOh8D-xE؏/>'sՙ71L8>v#,ܝn4:Pi}Èb IlCIډ{P`),צ@6cݥ݅x^T"E]hV Gz1%b xnߣ1%n) δ1ۯ-Ywh`[;A=GjY 4d-e{Fē$Z@5paAgo@3|3k_2S}L\ 0Ls+aϨ$ 9۽bˤ ' zMauU"&GX6(ZW w#WVwz3y^;ϯp,vhh3^ ZpC -묶`ޓ#+jWmESJ6] Z~4CqI;MK~Nn58Vc[頋!阾ؿןst}y8~pmSWl=P^iҽaJAQ-61nb,?S^lz ruh)LIĪ Fl`L >7XIU=UIf X _8]~܀1pZ+vg?ou.szK0d!֐a[ ]B[AA(c\bfGm% |i3T]1?.F>eM!;CSMz 8F76s\8#ZOEMSPz2 @l'AjB;(C霁$'#!3YʍR۩ExK>3O. +,9`0{`>qv#!UG1'|N)%J<13ade`t D`$EV7"= G]iyg٦3R6v:X髵r~l=}yV.}xb꭫h͌l [K:/XNEfE8j}xr(%G/KUCdy&0m!ێӪyktJF6. Pwf*N C`umt, ه{al0nl]j跰Mȯ1/X+%Hլk\dlu,VB-׭ᐗĵgBHz9hm]/tLqڱ,,]U^նV;g{nrOI.i:r?ɕ#ݹT\ۙ%#$!EUCAD.t U'uTGx]?캌Eŋ'`15N8\϶ f0J]_RR oEier8rvU|h C aџl6[ 3UNMPUK*l~\b)"$Q $5\>QmIlwd BV+߄kiE(ڨbS#4/{=W?/09Nw]I!4]2>kAH5*Heoc5c~{Qe! '{pbXz9\^F͊j{ոmpE*.h?:5sCyfmOnDlzAI:NM_ 'رĜCjֽBPr0lEbu5w߳|gl&d%tj}:2oLcBm&͍ew)y<(IOSWv¯bMҀd15`^ݳv/X:ҋe0*e2iLXVt30PNљ=3Xꈵw+"oBEGtrqq@_cř.kkAP!8U B%;djiYd1wd,̓Ŭ"DJpJ(.&,ߒV"QLyy1UW T6(I3Y+ w u ==>\պy]?(zPħ ݤ>FJ렅O^4>zE}bC8WyψiHg?0Uѵٙ_ C_o8oe|-7Pq3!/P@x59= FCFT\.|#⊱"_o| /BAs$X,T l >xwptY_J 㘩C;`T!A5нֿpqhpX.KQ˒'.Ą *H [ҏC )WyMГajȦWq(ߗ$e_b+g/v](sTc(i(Ӎ//Zή]EAV=KU>zԑv/ 9"LlRr+ -{ Y1E\Vu=qswhogLyO1'K_t^Yxmc!ʛn]4A3&CA7% VLRAisϒ?u8V5R7 g|tc F \Ј% V:O?Ý"s==bA`$>u""nw}|l#ރq?ml-z A=.vh.o@/?>U:[OP=&/!!p"*~ƚed- W0-PGHl0IiYI-RFL,ˠƣYAY۷'gɏmsy$AOEj@~3 ,` sSz"t#EHnB 0KT-6d J V `ZY4A"AۻՏBq3cT='Y6E:\6=&'@;무|hQ$rHqF5L|pA l`KKsQ L&SLi r"H GP l5hSh#_HHQa/|Qѻ~oh汇іedzׯeH ?"߻~0/wO7@H@n^DZ` }Pv{Hu7(9 ':p.’,H~ _J-X`jF? LOkhD7/:v;H2mwnn"N@pTo A$)5]\2"G"TuYC%ܘ@]F_rdȰ|;bg-۞ rX|Is=Ow̰ .s QXa]X#׶~-\L\&?vߟH (}D *0D..7eL!%甗Hplֵi^ɩq|NQ^s}{cfU&kdC<#vѭN&cڮ7: `E~ujpe1n8D=mMAj0#TDֱ4t F\ΡȈN6(6=[X|::2DLC*CFO.9Z$Ng]{gr"RN־JV< s*OHΈ\zOkKJs)t{+3e* PYgqQna~=xV!/HHTcV8o6ڌs/xe犹.$)vfkm8?6Q婄SlNbz@f(S91ڈC226֚Qj5cԉ`pw{o:oMCvkDz^)("aGf<տ:]+wvþ=]'k<qAx1j}HWB}A?1T"n8=`f0GY)Y JPa(@4JB;V -ZpFDb?uL偷-zF11Dj7q7 3Js%{uIJ4e/w~CxH#4ae2ԒlnmD E.yYUP]x(F0 UVP_/56iJpu6bAp[ rb:?Bwѵd@j$0ȕ  k;4m54behRᆹ 灾*t7GM {p˚.@JIUv̆tDCLas; 6A3vM:# a+#wQ^YCVqd¿׮}_ @!WaӢ9]\ƶ_ .ՆaA-z藉>ΘzL D3>"jQ~s)mdAˡ]G& mM0M5aYҒ#%hK:]nZ07dDE"0E.E!R-aiN[b!#b nnEѧ.:xaL=sԜFˆp19Όq.9u";,zq8򳍏YO8-o[en&Nn}YH2B!V\{mY+vO!UͷGF~.ko_>R,ͱx"`肣)P N(,Ѹ6 s`CbY 9(&:F@ARԞSGЄBI4ۖ`{ 7vnvt?c5"80G'?UT]g~W(P2ߦwtc-{ê%XC^ ?!Yc4QU[*lXbmmkr|QOMCB؀;!u7~ʩ?s7P bNөAOz >s˟㱯17ԃ|3|⓳w$DD Y*%Ȱ#Hz\6 OQcݵf~NCmG-?ƞׯUdnc!eo7_7ؖ\$JX!uzΟO(W/'7jѬkL-0I@\!]}kTÉyM[:bW$7[tutЮ 70lSn$1>T-@ D@2߼)y>{}"haH>;pvg56@!~NiGS {СTI&M5ôjNuBHNb#`+t,Ae>-:"lM HQ |dXpʹlnŅ<t]ȜeP y4L}f©m'j D/Cx ytc- VH+mnּ\g I-xIjnh͎[wf#y>x )V*Qw@Nzoo]d]o-pL̽]y} `NaLgEzoIH 1 f}@ÄKcAR$zY5LMC2ECr;߰$o8 G7@q#o]!=;5m+! / Γ^A :i@歂"{Hdx T^F@ SĹ^ Òs.LN"auƭqy#SX%@HxQw7H|6xHa@(1۟z3M]E/K!mlp`b4P;PD%3AF@" aqe|$gLvb8m1f@fn,qf㺧A"I Ä%1fsZ0@$3pG @^g4CIiʨ ֆ}?6nϏPii ZR .g4Ugf fGa?=YnBcr ZۧQ%4E˯i¡30n/fv/C&d!G|􂻘SgRC @ɘS :t 7354 zC/-s }mmqT(˙;^`rTaK9gf)\#b#s<_+Ph8ljr9cl\Xy[v8>?w㓉8w8Qu.ك >IǥWP& ׏0S5n;7(7 t \=[kl;*|؋krqA!50{ 5$0jw]TATT@X́-p"08Ce7Al1%8*Cr^$nMP>e 2s y&T[_ybJlK0 .":y>Dc6u}<$ Fo>FB|*R{L⮀=P߂:,|/ Em[aC3H6&٨a>XPY{ ɑ"؀3IYQNz `) A獴> i$ @-TZBl0HP(s[S Q HBhEvw_+:?Dww-̐ON IuUV,jHM۟}G +}SՈcp@ l!܆tJD\6R,6xBl4߳(qm5',Љ#OBGVi}|׹>@+9OQ"V(B Cb Z((uB (jji(1nIz\D@@EUIG1 @@ e AZa!bTD 3LQUR Q'3w1oh *\۞ 3ݞaQ6zÇlfݿ67нtɀ&iO(("Q4Alz!}Prq=#4O25};z8)wА ἠϿ] cTzXUˏjޞevq0@`KFjS׈NAcvh됭aQNYv^aD 9"*sT<b9$P怇*7$WUB㙜XMqpTUUecj\->g@$`W9.T#d#zSf_>MD")& @ʸӉH" 8nۣo|o8*B(p3" !ܒ^8%3=D@$:m| F76<%- XjO0l;]]Sǔ@y>EP&.6^"?Z粯Z]n.t-~1Vߎ` 9J*)Nk8DaKω_<$B\[;DnWAm 2؛gt#;#:]MƸQ[tL%~Ie{ @qOiaSCH$m))mL(Рa)ev=Tby#P F#FcNkUwO?NM R\jZPq|EA}. U.I2B|zc|z$EAS2!Q.2Cm¾.]8옿Z䩗EMDYy4xoM B(㯦Qh`/?°s^o@ -MI$1Oوc_n+$7U^0ں͊ )c*vH鵴~Kpkhm~NwS@-X.aS_dAmԄ9Y}\lξ~~tϟ{3]ѹus:8o?_C:{=c# ?̒!Gw}(c1 v="Ȩ80hA312$s*rKҤB؋,XRylzaX{}Uӷ $ @"Xs@cH ދ+rs"^|EgWDCBV~ Vg-;\$!& QlWVq=v5q]{O^Z3k 0j\)'kӹ:zqT=;5Ez.A%Czi /; Q?"ar!&(wwfoʝܵlIU ~ռNHf"|?V=ߖDbb8xGBP "ISc P+3wٞH=2Fy3@47 gcH^'y J *2;ڂC ߞXX.xHM2~|OsSo95mƗ+DC%^Vv1|q7rS9^?~f;2 {U:H-}#:WP8++'~R!6s!ׅ}s"@qVfHL|/gjBU 6G<>30sc 辆VVs#8m;Ix0j@v6 ԤQ̺:VqGo2 ` e ALnC'/'=AFOɴl!Hi"3ΏC5߿@?f>I8U?VA*b8d'lj!Ѹ$F42!&p㫵0:* Zed]sk,yd%}[78F&&^dXjV>"[#&"U |J@Q(M 1X/_td, uPAX_qGd:9 ]B<ۮ-޶K\=T@(2 _ѥ.ƹ}24~5dOҔ*}%ٌYG9EPcKrκM8BWȴ1SjXHtEZ@[NL\3C%s^?'-'ڭ ?+>])ԫ  Ǽ,ߝ ɴTZCUOGБa [Wg߃,]іX% -_rqv(RlHTD .{>[{|wߩP@D4C(`yU֭ X#Њ>cփ(E-G!}0ߞ't_]b)MGܪ2`0q""#+|A`͛@rP|4 iF唩hh:d̎E(2d@C"k7JY_<("8J<>yƢ.- ٵRxc)S8yXx(S˕ R@W<:7g"5)7(x,+MTmI~*_NW?3w/kLD7UY9(S|~V)bS!&Bj 5y::6nI:nZa"P15A50yGh &L_Y#_FF78Q13ۯY8Y@Bbk'2[DYm$Ȋ4?7j