#!/usr/bin/env bash # # Copyright (C) 2011-2021 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^isgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=4caefa6a17c968f33c6c9df03d347c7c # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 Rnqѩ5? WhvǵOQ~jU^?$*V{tkn}RIZW5">Ct\ݷs@=RkjLjdDM(l9+נebٺ@*eHiM-U!Kɒ ILouP@3;_,{F 6-+F!)u-}Œg LbZl4"E2f LH q=L(0jJfS…h`)tsx&X@#esC< `Q/e(s=GrW꒳)`q$_\rJ#]h#lF `k+0vua8 FDd@G*KJNoܕ(H|%*l@28'WҨs 3'ٌ#&H;^{DpHJזPWru_!"L:g= 'cvQ{  8j>VcNm_/ғt# q(3Eձ*$HrGRNIo0 I6Ɗ̤'Ui4Uy/A:@gw}dٌ4}D( }ek(\G`F$rJEO ZV2MV@fS)c8 (CE'Js Aa\gKXlcOCˆ9w{j͊Ee0u$-7KݸgtFPU`l(6lo~.u%E):K8HkbvC̩!cRbr4SENF1Uܑ&I J-i=mP>&wo;/L򎏎6xQ'r# _`x_Wkzm~6S%,%{+*sə=u8 j{[ȜVfx\!ÅF?D[!Ίs)Y9C|q$; 3z:d2eJ8L Wԥ4JOInD~b@'sVȊ,g"\i W`8kD[䁍8G0C=w`G4IP:KK"'ռB\%C0" d!]6'kdc!$WP@KřNƲ1H[HSb8p6~`߼ɗl ; BFLaG4nBԎ"XwAEnQB@vpֳn7.xaYTiB#qpBKpF NӴ3 ^XK0}l Ԁx-\b%ꤾ€HImuE!WMQ4 J5Ԕ2/Ih LNT ZM'CIOEZ5<͸ zQ |a m -_,fNmKca*͔ҚMDhRӧ.33u`]FFslcpX'|y7&Wx"lQɾhw[ڷ%2ھM aǸͬ?\ݾ˺ a:eʹ|}8iifnpKeԀw9 CQՌ5~5O\O=:YXG2SՌ)߭iKplŰ^hΒ'&_ftn-,9]yRL(Y T,0y0 I c%RbL><uK%mh.cBbBѴr%s2+@9ܚt%MZ/n[EmR+@np!c+>.Dc!)+兒 f"YuѐB-UC%GKbDه? l>I|o6tFtγ}Su^z|܌^zSIaٖ5\ix&|ڀ!kX.m %Ģ@ pd^G\CceJvdT8\ jpKIp}knd B~0R,$hC$|5KX,Hca!S FS n݇ 9QkUf>8hܤmˆkKӢ o2I (dŅ҅NR(r|Ƞq^@Z[Q6\ʻՌǭbÎ%+5W0)>qǐӝQa#tٜyTȋDd`Md2N<@uYX(n=^+Ef!"L4Kwf^i7}",nRQ%2 C\P1d02.^%lA< 4i79 ,H/Zf4 J)g+Bՠ+gbK ;#UnvZNz5}毽C8H uҨoi< @N{Jp" Qс95DlG2\|)眩٩ꉩ$Qq48Y2ojւv[1IJ#9b>>nhf)h$it.p×;lRH%v$mͪ0#Q<6ȋ֓9v$zg^&.SO0Q4V;؆4K4oϙI#OEBpep 7n3|hӴRIzF\f/S94NJ)1:]ǽqǡ7ZBb`܉!Zss{ pܧ]LHH:}4@)OrIETש($NZ S}\BCk>n.4nh S ܗEϏqɍX\bR M-riV 39Ƞ;0y_8QynNY7q̇`X9Q^X|"!V! $tB{ 7G͌im(>ݑ2.?d(+&m =`*+ܬ1k VHuoKS2L{Qj_oOY=}FTdy ڞӜ,f >jKf2UGxnbEq&溣Ц&Nq.*pMeP? ٘'lDm7IX 7ͣ^dLHЌo(OMKgnZ"2G0$B0MȟF&;w'Y_2oy\O6w\nww߿WK-ba;2,&y U! l2|gP7R}ěp,wq#. 2 B봇\{EY\X蒆={9{/uFR[{e|p_{ Rlā=AߴW[ >wW|݋6_3:1ՠ;I#'<ع>9/~Zs{(_mſ#< 2 w cv}?@3XY;sqsZ j"(`Z 0@WށGc`jݯO{=W3/kt>}^,I}bd.][٢-.&ҘWdWʅ [rMn 3؝ w(%?#D‡?H¯W[Q 5 [R31{_jf)FNDF͔7&$u ;W%,~Uϴ LLICHΨ+~pjSWqVL0R)d<~07-Tț3ll=z3̜'lORB3 ٹKeӦyLtp:o]qRn?[W㋯ \H$ã:x\,U+$=Fr6l?(x|<~w+ngv?}m\YK"amq7gl'[SH(-w߳ݵnn{g ? X4kأړnZy0GYi /!SQ3mC/ = k\F *{~aCRn=zʣhUjL$Lm,'bV2ٰGM0l'Q&ëQr!N@|6K`ay}WffkOX]|Bx: %0al3qt"t6JNGivn>kC X%`Rq} :I6J $>ؖs ash5-%`ͬ_Qj s!"8d+u."dtydd*;Cnm]/%8> MA,N;JyI)d| t(ާ!y;rZijWTqkw'f k^4-gZܖRNm4/Z6G{${$Q'xP]!lJ+ME>|-{[` wAY24ud. ;:N_`7ZJ7]mP=` ~ޞF[.vӤqSXg^-8ȂD%p8l1<4&wzxx}#T_YQT"Řtt@eGU +?P6DJQR@U.MLC3< *" BtE9jK#!Zj;C+JjoIȋ&]Tpfы1_1OLW9<:l.t@G$ͦk=?շw=fP3]T4sL ٧>X QȞ{Z|?5`aeREʷR",- 3Ɉjt ~ \a{5VQ[)E#̦P09`e1<_Uj ]@5dlJn?M&v6{gX`2fޛෝ3nEi_~#AZ4NͶ"ZG9{ދn֔w M~51@gA*y?9лVrdi?"ʊg nr2;_U0`vCZdR^du2VlcY|D 1ܲ*՞.vÿTePR8Y޶  ŜrZwue<|MEǪ㭅Jq;0ߖ.5;H9Z[\Ӏ"?dy_9t(9) HtzskgC 5H]L2MeopC7{SMWٙtkGNj.uˈD]HNjB\W0혤,K$\vV+3h's{9*!4- $iܟbʸ`PER86zT.n1U $z?V%Dk$FlcUnXkoeՔӼR#T}<+v(T+$8/[7uT0XL~[8bzc%Vf%>'?=? * (VsZu4:?kKZ/y=*kтuG>p: ԼlJX}l@>3#j4LMYg~Z{7k8?OrZdݾ"L(-' G]89K<6p.0:zFo4uѳ۲(V3auzʹF/t8Q3+g{ϑ:AxO1%PG :=|d!ﶛhp_`wR2%I);'䭔1N5-9HV#G*ݓ%i-2uĠ~ M|3*8QI?ʯQא;a:ݬƱ3Y-:Te2!9s[A5s\M<139p iZM;YnDfJSfI"p>D':Yb Sk BM3@:B 9Y=~K8_2J72Dݘ@T.zB"=~֢V[6!m}jϷ1YUo3+v8AX-e4,Hnf19KdֆaQ@8Vޞ?cD2I'F*Ul3RE=QXOD% R;<t 3@e;ؿnMz َB{u6X'i+Ez钸eQ-եrrTb6'ۻ{?g'* p#SѱWNCB)N9:yhV ˳(gaRD bSwylծ!2|,鰜 mi%غIk#׊)s=nK.uw{Xid {I4߮ {7 (G ǿ_ɑXVKC9*UR(%s>`zQ[ =%Ul`j?42sUf>\$+VM63 t $nAf㹎K1\p9VT_$<# 'r*6oyy2f\ [Kە^#IjUkׁ67:+fC =Gnt` Yc{g:NNClM=@7N'<æueڴ!W$Ej8"fY-똜;=EJU/✭i$kl1j@Imy`U.?_GxVl7k+@|@6?{D 6NX=-ҔV}d =mL_b~?m- ћsm )o (LO|dڔ/0jN*۶LU:&K˴Z~e߰>j}k:~o)yT["RPҘIѲzY *nۙT? PSZ.n棊k~eZnY\Qi+GjhDw #a5B*lL pBpKp h>}4q|16xgLnto vNe*;0鋜9Eȵ/j^hpUX8_Gf"=MؑLQ128Eߞ>>߮{Rr^NCmV<?.>ۄ=?%HX_vt;b\NH٦"}f4#i(iߤ(:]q5BKOkUԘ ^p+!GXa& s3lE xJ(?Uxp)@-迯X(xVL&ri(H'_dXJ-[,{j ryVjz-UxȎIڽ^˙h2tfk#[Hȷ{7ʮSv9Pv}kYLĔ> ت3r0˛MD?`s[e?7J Ù#Gpc0)w6J&4mc.ֽx="(ո h觠½cÈ]ml]AaKc;91V-YFmDUl;L`^h.O3c\q;68lGyYe<;<^gکGӜ_¸Y=dܜ,d̽{9?k3?UMǷZ/ &,#40 3$k!ƈ鵕Q!$oӽg'v|*H=<'gG/뇁Rr-:pG-D%Bj9hx6D D !‰ .u@w딥D |vm~_##Aj8tw[ѿ+ҪZ8v#QH ?ډώv6UqGB.]sJg\m rkT9x?lu'-Y|&;ˏTcq>\.=\tبٽxqr&0~8O`ÞR`z&|mUWFyt1Жo &~4IOwtiaYI03~S$VvØ9[ ?Kxz>v [z$EXl0:p3NaGټ616H\T;`98S…+gM'4M,PjbL ח.Ð+ >,t!\fkll: XFIRbUɁCdډs|PXt ޮx0! T0xV 3O[ n~g}]d}ۖcF1GaߠAnBRB"'f2 AaUHz <T+eh kt:UGЏws]9?m vpC)'P\cʼnK:;eѦ6,dy? v1jCLx0i{g$LҼspڭ1vϢe| 7&6{(]pq%+Ĩ Óe4*N^ˤ| lHW$BHp^p?HOFftHn(fLajL|G(R),݃˵[&C`ndx|dm!PYv62pCDjU׶%nbztq~ 3<]v̛*rF`S=| m6_X )Ob!/H2j'cU yk_[H(D VMރ:}+m@~+ng i^Yn|"ί)DrIޕg]k #B(ЁD<%\\yP~aыLOFr1I&ΏמdHDxؚ]Ay`=̓ .~J>j_KMt@ۑ>S6=GH{:]Íd>{Hh|q-zֺLR뉒@(sH\.DTح5knR,zŞ_{/m2,kzW~;ʖSJ ^k;EL͆)2dZZڜ"2Twuv̇czQݩc .e}ã,آNwnq.o}}J1u|5-L!>w.e3y61\pGr,Q4f^@-'Vvlh)3,'|а抟BTk|g& Pr]u" 3C4hml&kTT-a@d:iWld}HT|#vZ:2fh b pqM(UhOn}tgɼFx&;IQc ;曓z*l  o+sP3"0UI0țpq*Ũo\+(b'6 #{D[)Cv3˟A)&a9RIa5*v6XBM]U Tu.LMsnЬ|rf[ pd}MP6{u-w h ŝ'oSK2[ӌCq$@nfu.{mOg]Lnd n,d30=?8k Ui#a($(c_-2!,W &d7G*7эMmwͤZ~A8'b`Ik|jA*BVf >㭙 &v:.Ka }Ϣw sSI ?8xᡪYSϔE[lpw9 t9C&E-wez>2^ʂT#MrtlU2 ?1ZM.RUf#XJw kV4ŕ)P1S\PpEFXK- jawb5qkь:oԏsf(rLU|^,EA`ņK]+SկVR]SI"'-qZh_O@^L%?װ%<K=\=?g3Kpfʍ-4;rh"![n 귓^pΛ{:ޭсջHsNQqj9r$~?o;g ѾW/G^=Twpjn⍻ m2w5gP֌ a%5*ETNõAV5qp4RX/Oeɓt,h΁FNϚmяt&yN>mhx'~}4IoI~q(݁)Y?2mt;Mp-#9glE+7L2)*, o<zE`2bӁ%13Rs`^m&444q߅6w_۽ >&'rMy`lR8H@ɾkݼWEK;FxBAd,C ‡ʭf->>{}V,SOhW(m@9#Z*17 k}Feq둳E= j0?m'>q<4A a[@7S<G4H4|"FjHKno [zr|ؕWwOPP(^JhcJe:jK0|azt"v0[P),Y˰6-zSstp} !5ܨ%2[ GCTXf{89K:-,d_v⃽ãlMx9ׂЖYY) yXD N㊴;II__62{G | \l>Y>Xl3Gied}t+'  Yo\?'??<y*ְƣWכ?xvoYCW~zU Yv\JC<vSrXh]C:lhw^m~tM,@8 l4o2$O~kɿ0O;P3?12GLpL sY"z7v爒6cyb:<[d8:tu]'w5FUjK>\Tk(xkң .X mF-`΀Z峻r=kBb[-G?`[!:^r7%ԝ[e93قJlQit# EՆD&' ?զ YYY᥂[4 +hd*f"a2k䎴ݤ>B][CD'N:+ryl,#a3Mz%A;SܸJ+i?2hԺôPUh2:Eqċ_U8öv0\ KZ;/Pr"SL,ՂDJYKxǜW+'21 Y͸پo*~|MɌpj|l/jV>[xȍE#= P˼+PJ3t2܁ eܯAcpZo0E֪ߘؐxf;d)+;p#LGq=*D 2)H?ɨi# 8'$ lgDs;.G%'ݖwhȢKMw"}>Fh-H?p=|B:W<T74*hɸPA6:y3YE,Ghw[c sNU;d BwuJF=`Cs{* hSxWs)YTl<) j#7YIh(n`x "bqF+uzkO?@ir1#w!lj<6iR)QToW#LgFݶpQ;#D_zǬ ȧ"!ʰ'DA} :PnJ O+vk{xSR#͍kX9}+W>.㦱=>S]Z,& fO8v(7O_D֓-o+*%aԄjSWwF4%d GN?ԙmζ'CSZp:4ۀ8>kFuYU;əbV<@~:{UL}Fsvd K7F?>SsbQwcs՟,5]1S+oꡀMomxdwK]enr2ic߆ݭxǫ߿>?3{=g3Wgn v~p!€!4w9;z;}}&?V䤅mRM @p4)53bJ_VxSkHnJ%cƜJ:7D7ꍒN>,,Qꊋj{a%%D7.K-^'f<Vnzf{,z3mJ_'"r #Fm }7+Q Ss"Cxg^S9 ʝۧAzEj'[Qd|_O_HU>k+ϩP\eeS0xɬ`5菂E%V)kRnR%d!ͬ$ z|Qh# mU7:7aF}QR<_0PjL7Hh1K|y}j`s ,m`qqӨ]M^c`MlƵ3H4DF 2V0ZUTJ۱;ijX 9#,i+ tf=`'%0 j휗^ڪc)S䬵SI&V!=ܯ=Y hbdq]A`2X {zpUt{F-t16(DDf ^n:oe^vZx!4XfF͌t[^mtbod:"WdGɎϭv~ҎQvœ pGPlIzaQf+3mQ ~Fғ8~= k{6{f[]$㧽n7U\; 1=)3xfʦIL( Ojyى=yBزfEӌknyVU+5Nm@Ol}3(M]:[綻c:ajPr2ȗ{'Qw&D햧A lHY>5i{{m+2 rCE%VҞA~2sKletW*QywvpM&{Q-|]c2=̔kYL/zdNZ#U|F_n$Xq"V]ٽoSR;ع8 B_"{j6]7ԇ:Kk[ *r_}^AQ8_n ><1D:"{+҂ohޖۭVlEmt5TSX wtdQuxO_3U| `l3E<)Rș_F57'ҷ<$W;*ReMKeDwj!ƖbwG`"'a6aEAm[޶ZgtKv ZaZ:h6OL:hlEV}Dt`kA }FhIt|ExVY_ňԤ{/ )/O؊wb1)q_:8GU 8caa3ZwB3T DAsl-:¨KD\zjei!_T'PAx!sI JcJ hWIw k\驃È\_{#H } L]Saa7*/lei @M4{0'z3ojt$_Y]a,O>듍9؟̇7 s3tFIMLRqFyC8 :r]$GVJ^fpçni促Q-:QO>oP C78@1iǜ%FzłFJ +L m1<Ӣ 6ǘ J ͫ&˜A`Ntq[np#j)q@q|1682l4N eg69t~7 8nzmvk~2Y~0\#1l7zn#&~]]%3q`[D Z*\L7J8~1`@U\Jjʤ{ΉCKB~ v5G nW6q$@3Q4%5:ǡ/ړ$}dgA.:d"euoFdi'nOڮ_`3f7uy'ҭS0%+'p앳&w&0n乪I\C4>y*-3 mVbĸQVvq b7J=r);rG)sŀI.ZJ<"ņF!4 'E~}&r >F>a{{-X~ Zע#ukHsދOHRCO:8.9懡jJV ^az}MZ.7d4&{5J=` Y0Zt{ɩr-X%Zd9ThI`9&N_wϩ68)s*lܦB+{NuMx_E 9e]] nN/RƧ{/b?vJ` _*_mSå#7|(;_` P?x/!%!(~Ng9\Ïnmma.V*O\h}՝>8yuG_3>gĩXuKy\#/㣝bݵp6I5t%݁ Srb8{x›ikhvPN_uwQWY!:iu_F35pnj>ȣg%ЪQqwGb@Bc1(~4ۜ#ҳ !|v-!&JPfcH8Tei3QZ0`u|ސ6،[$>0/bO F$>?2%;LQ:o(*-:sظw)z?ɨ4A֥z p.{9W{u=sV*J?fZuJSQ2,oRi\9ZOLLZmQAw|q#_X:嘢5ȿQګ)o&,\%#" Vgcw??^_?Z?BF0,3K0u/]v: % w]S/?)Pe?ăƭB=alk+sawz"avD8өQ?o7,,/P[[CޮVF_(QAL@o?N%~}j>`Mѐ 'H*8 \S IDB.VAc­D y, ftyчe_ٻfzRޒ~|"FpZS\gj ?rIVSLreuW21˳*42qSh3LT1Kуq4ߛtDo)hMuzϪ<Ӌj 8qf8pTZF;ŭb`bCa{cwQ$F!H#x~4F`52XlQ68 Z*Fe=lB]A`'b,F3Mμ Սk$}2|3U3AqZz?YO9s@N2[gF%Y|@ * bOjڑVb?Vp-&VVb!l~h V*w!8)d J 0.j6-y}yҲL̯z1l=7;{D&N/0Kt=#f_^}>oJy{ӇSsic&*^9p72yezAXM1h{>#g2K. 6Ġ0c r ]PBEw&j% _gLr/!Y>JP;=};.L6s3zp\lY1 Ā;,c a- 4=~\oߜա>x%M@)uB.oS 64QtTFm8ZaL8uqIu({a"eϙEnd! 0tdqi&9_V Vyt1HDΡhBn7#(7 ݻ&JwאЭ$GqvptsupqtP@ |rj3,^Uve>]PAPג~"@xgB9dq bo^!jzxVL:VHSamg&2 .7cŐI)KstC}x磉p\I 6PأS }p Ї쌛!*޳| FխكkV1?v939a0Fnx|QЅ\i\X|W_F(B0k>pt%x,RBT4bt~Ock~7Bg f(NS-i#Az[l6jqtЦ+_C X9F͠n~X$c=֪wA+cQT:nA"T2̩d^*hZJTmp輮!;:L}T8{^FS!_ Wc`s6&..l^1 ˔\/Y%ԅ[q6z ыpZttt`Rn2RKC֬"~ZBN̷B6tQTGT_j 0u9 iUA t-;#<}A>|5,ʼnrsg`C@>Fx/zf42\ D<λ"h!rU+Z=hdf~89 ѝ(<_090u8 0:ijRٸ!u=uҤ;juR]aѓvJȪ vw.HQ)&_Q^/' nxt1G*aMwՋt3o (<7/= ߏh=y}ϼg^3;v;$LС "C ނK2YN΃%ë{OtGygiE.`Z2E\r?J-A%@Po ,jBYZ05N$.zh6D5{IT^ (B]&spKV3pްHv kAV:"Ks,Ԓ*eZ]ĘvGǤp_HB! _e@}$_o}_lLQgݘpSά:W ;VaD+4c O"2Lڵ)>i F[5P'"le8+ {‡Qdgt|fyk#86 !3uﮅj]9'J;߷k\%$sW71 $mx5*2mJ"6WSDP'58~I."T.iu+4$^xһa,*2'՟j 꺓d B̾8OP<ր3(Z6d&ڪjCdo~Vs?yo mͧ eY቟9ԽLnmbn}gݐu^ ojEjrUO֟Wq#./8K*VuBpg=xk ]U[-yc/\mo\}zW|KIqS{M]puN:s ͥ0zqC}t#?ڽd27 W=$+ :1O}h&nu@ '/b;>bRV&yyA !XR"[69u^qn,-L"zQ_mY]h![!I+T#݌5739Y4r*|EqMQ%(XY]<\]|E7#|Sa萪@%Z0"pEIZZOI.Sz(ot*2dOzz 2K H wYnΗ;=j8\2J %uiP]> f\nD&6ʥo*/ @l}SϪ].gtnoDll{!cxm b{=nd Ac\j}x-mu-50d-g!h4)xUSz\vaNnp-l/II w|]kDQ0-jMHogϰ1hG/p]Ddq_QmÇk5~[r}'ë}Uvmuimem5mcm,jkTݿ Ϸ uno?Ϭӑ;}~_k 7x!~Wn\繻ƹ gwv\ߍ;rt~nyݿ'wvn\(e4,Q|sw|Fb7fk@G|jYH72e>*Nc׽h]˻'{0wY|}:;/qo%Ŏ_1Gѫ::>.~D Gs( ] lhr3}ۛ]HbZwo9bfDaFES]CE֚\݌қ(z8X_"ip @ -uav+$~gYzyt}K̞\Dzso;~$iνI)nOGH˪nM$nVwdz3jsVfUUX$o2$Gn1^#tiq;Lt$[ʝ>t̮ =ˍ>+,@| 3` H^~yz;;_//qVZF(֩Q3-sܣi$MLˍ+c