#!/usr/bin/env bash # # Copyright (C) 2011-2019 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 # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null 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 '/^intel_sgx$/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=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=6d2035aacdebf71ae970e3ef004acd15 # 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 if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 5) A8}μOa͒6 &Rd +Q Hpؔ{Dc+ 38X`&VD]ƷإdBH4y B&,%INy| `4q߇TaA S^#M'7 ɓ S!(2!F7Hٚ G ؐHD 쒣!C1Qmh)gRX` ƨ[G#2&fG#!_ICBXfyY583;F^@2Ov2v fZ}2GKEal3·al`17욀[Z1 ̾uq 8kLA&^GgX \>ЭIxق"b>\C甇6ZrN}s{q5 o*l_tF_$o+|JG55;k8+7R8\$p9QW;yA+ܠdKK FD;3`eȥ I;a`O()f_jֵρk(rf>e w% ȃc.:wՂVWUj S uy.$,^RE͎ #E-atÓ;|62밢fU7,1jt >Cn}tx~&Ƨz'I7QQav25'pYO;Lgbd5BQ8.!U85RV:{ h6 Xi'P`2HM5*<M xs47&?e? Za/j#POsZ0Y)gMPPT͝v|82r)~A%ו2rYwkX0LKzޖtbQU2rEnF4',G$B@ z凇Wo^9_/Z?RCy -)I9_m;֙ :U$n(3,+4LysJlXkce0YZcϯ6ܿZK?7:\kT3ջ-ϟkPZzc$L훋x.OL[iRsEJ6 ZߛaK)Ъ몮~VKn̲peIy$ӷ}ۨV:sojj U :&z|ƅu!tټ-A/ |ĠH:xݠ:S6o[Zq(m}0A'(c*O<W VgGCWpؘUF=R ϓ5gMni%5³ϣ>DZ]?ZD}1%2a!f &ɺ^xvJft\KchpƒfuA& aׄ4:Y"J4tkd0r (م+JEeؔ k TY7UBD߰zLnzsfT pO?mW0: kt*IkmKlRہN%qW".`}qdZ*_Hb$wA0~o}.%C]{)$0&V0(yBj➧M\'I(U Yzq.rO.~w!{p-P \eH=fAdYzjfJX<0\7h&䷊p1ֵYgݗJ'b,XX[k=FwI]E` K ӡs*]&ܻ!l}86Zky+'uVhʖk2 {V][ʼG lv}-]$0pb..J׊Z8$D3^".#B=w~ΠC zP|7G"4P+9I%=r<&3Ptcy{KYDv/CK)ψ6r\Z<4fM*rI5kQ[݅ݮ-%Y*A݅%T{w]tNG &XB}i$rS16 PAB-7J jptI/T5:V!Z m~`~r?Kě]oB+-<4ffdHp*‰$6d(V _a*cV)_sL׽y5 AT΋<~ ċzyTj_+Y :/K1GdD;4 /'3WL4o {,S,{v97-NbSɓehaQ]u#mX\jG=&K\5.V46aJ~+Sd+(oo}:[.@}{ڻ* -`ia+woF6 maA/Ԧy {11ǀ~?jzZI6zUU6؀FOR:lT̏ڂ-S8+8їr)CUwrMcMֻxL 2|D!ᗲI0zdxG. -`H*>}R֎FelgUʜ[k[!6%ֺY@˰5Ёh:6OAZRW4mt~S+v '(lZ ѧy76;M*NA a68c60{azMen'̥Ϧ !!в;hEzj3ة\',>VM//,#Q_{TOH 2 aFmnBRԝ\XǛ[jbC: 7M\nF&"G^8_1H !g(G%ݘؖ'>)}Aq$nhAB- ,O#4(ۢ$ Vr{QC:ؑ v#1 ;;$_uC3 Q. xyV2ZRCke456a\!& eZ\5DKLY?+UӨb /k `N[g̳wЫhq԰Eo]^iCzULmd8ւ2FItܛ3s1M4Jg_'iz+0?$e[<`Mز8/;M}:r\ncrrqK-.$ ־ +SVVۂJ;ˮ&E.%xKHE>d! lGT+X0]Fk/^<] | 5n),6NT gP\Ȱ>BtN#M2X7Dý/gމo#f=,\w s="wiqt~+5 @bK/~~NWo^ώv)mO0@c0oV^Dl˞_F3$NġB ڽ"s?$vh@ sJ.Iq]&ew$b(e,3EoHmaK.һ]ClТ6"q!Ae`2r$":q7 $_E.x#D %D8Tw͓:r)F~?NZVdnsH̆"0CEx@@|~ecv6cc50qN~6n6g??~Ͽ(ങ"hI*\0U0 Y~,igH}"̕&P]B?/}MkɡcN9(%v{G|y9wL=绪*Ȣ)ilfX_/bur% 7%,ǓStv&3rxk Ff7,8ve'$"⠠hB٭m뿲(5*y.@C=;4cxuCn/ѸFbEyڙb6Dя b-nϠe>ӷU"'!)Z]~ooc}ݍwXwAswW=x$0 J*b,SړHz_-UDjnOZ> 1o񳰉(pcJC܄4/C:a\-բM˫`fh;Xm̓k)b?n'{H@I!鏦I)DqYJmmOlPڲڟIrG'9^\e/sBѪG۝ԱD}L%0NB$zL9Ei  Ѱ 6`P?+ˠ=$)GFa$4%)N 0R^Pi^)4HNu T=0uv.\hA5 ԋh4N&-Ж?,%h,^IF}y'ejGgW}"y $b;BA6R$E+>qK!)h4@eI@E4? YKo kA7h6O?'OzQTMa,@ P'pf?yg`n6-y gt{STdw[R" ĥt@i=S+Gi9+~sq"iH'LI  ""3}zg~oCNۚHN_4#%({!QLYV DUMⳔ88F]\"HěY:Vي9`?*bE|>/rt:NWW+(knrli]^@:_L]L'' pynՂ0lɪYE"YDChbŋ͍/_Ub>{I{ g&|zЩͰnf{ҎRd#L ,>M6E)۳|g:){]7 [5m`&J;k~/ Q$.ؖ޵,ԯځzQ0E6 nnڴ*Ӷ.з8JFMP b>x@PzB@6`ʪ'z Q2Rh*|#_yB OHZ»+kU,%ܮjf`rd6 7YQtLAk#gf*ClQT*C!Lo.@iGno$gQ3|YzP`M8 D}*&Ft%TNC“-9h4_9t(fˢB;|1gz'N8\?6 QW5Ǧtl d0m_ࠈg\NN>Ql'?P|< 9V82r5ӫt8:( 6VQ1x`pސsm+Ow¨TV2 ;؎K:@#f:D!>HeżtfP~gź:6ҡ|QdO7%:$(ѳ3 \}S:Ĵ1>&%f͇On\,ބ̈́l8=V*k[T{qr5ճ-(+-zYVeWx>Û/)U- sI/pjR*)o:nny T</`W.P2fwaZE U8R:>,'%,c9:XwNA1ʊshĵ7!Pp=OA 1ߪ8%s*M0a@Jt(>YJN*—e#GԂ\#x-aM7M/1AuWe}UN]# &}kmNi k-uAOl4 |~i6:K&x* 0m'ꗎf60/r[e` z>lD☇[R7|}BI,4 ͂. uQ]VY \ d#ʻ"64U6t Bp*lX# ߺ7*B߃!y$=,6V@k4'jf Ev>N`N*qw4D}&Us覆%dօ2NP_ɶ5OET,Sմ26d<Lak!^++9$E4ℵTVoGεL@]׵.w' = pXV}8 Q3߈7GC,A3)+Lտse/ZgeVה-k dPT{g.1 oRЀ2y'e:p[)s[MzC40M!:, iW ?QDƇ+TM_,S֒ǰq*Gp#MO#Lu92{eS⭔ α3RkeqYǵJ+]]+ ϱl`4hL4=xN[+#.OwWNA`T[sq[8:)j,WaHd1(j}9!Q?MS2g?XL^+ Жu'Ĭkx)k5U5xN/NrUӨ96p{qwDBU|SQZqB!(IP r$3baNp͙5G OV&A};,{$llY8NETT/( KEѤ(pWuP_3VXb/u{y||) A9bc 5.ϼd FωhQgK4 $Q iϤe Of{ vjSc [[Tk/V,ghjK +n @ÂdH)`cP@4o97v ]=XtnEf#Q$T4a3 fʝ2?K}M4Qn+W\e~>wZmzn+/Vt̀hT#_bz:#Bꝴd,H9 6;bf5+ " h'Dĸ1BDH(הIk^zC$<t<|$񇃄A4_NO o*9TL^5{5քX9Pk@ҕk_erCqiٌʎ|̵ؙU.zgSF 4DD4lś66[n * Iq)EQq'Tn 'O'JNhfedlp)Tx[p Q}hU9R7HKU;RrC%K1NQް y)ưC [8 ,::y0@SɈ3B&_tHLCB\DL{6RG"}_բ%RH;gHO"MMHex'ܳ> ^;$ā$}O?cN)k.| 5J2ngUz>70\U4Ug|T?CKܨ1_zec]hBՇZs_2҆WVBJ\tp<ͥZXEƋ9c-kZǴr-SMw6ݖZr-m{znvwm0R+ rJZAg/.}x~{|VW")EWlsՍ8(\&>F& ICaKr*WM%yq~EHX<D@LΜpTV`gh-}8?j?*GUNwʾA ):٨ h%'bI=<[gBdeٗ9*x+ZDv4 z™)Wjh^z;psGM$7nO ;o9Sf'g!(pzMܜrvj%B ~W=!Jis\#tj #2rmzzВW\O3xJkUW\~~#Ob7.m/٠Qtt\RIU0ס@WNL~h7WFfh=ی:گm[g{ݱBw'FA>^`BqxQx:f& ^Wꟷ,hv Rgx jg*7oӿ`X . {<7Y[\b;N+8!+ud)- AJ .XKfc| (4j*fwX"] %o!<}45mЕv bz5]V &ů^! Xwڪ}A q,ʣ,(Gvg=m^лѸgdģ"\lѲ?!HoS8,3]y}`"OސDphyb# Ek-E|h)Ӄl۫j/YR^lIzx;a5tx!O0Et 4bfV%v<_rME#G<'m wM y]r[D/ 1+6Aڬ鶊p[ѺDe T c0@n/5EhD)O/#wǵ3g.,y'J\$:<ܡû`ݞs9r¨D!&>:FgZ#omN6dO}(Q|= =G +>Q_Tx9 *F2qa2 ]*超U rB)P%trC RBp&F dN_tL !Y`T,p {A^c'ϑ'kaNA)sKr)3:3`PExKuWB?/ond8R S 2kE& GJb>aa(/[I 6lP'`&,gS)tI-Eғ 1x|[*@f/{tV`>rK } 7)g3rg"2ܦogs_HcO):&2c?)q '?QBw.*c:\t:4gr9~|+A'S*\pj: +?>Z(]SM!t5rRuwdϽtaZNkZW@?TVU+\G|ehe~uFg4Pq50][lPڮkMM5+ΆћdLa:7L뛻 iœCљa"د]ɹjKVL_6`z{Z{?~M 3cw %1ݚĮΰvvo7?{7[՞<]Tq+ n~fL9bMu1c q.;(}ɇ^زw*Gmv>L9+;>;բs2kngN&B_6₈jc~[UD&c| $d@8 Dչ>Ɵ-dLH+IK\;sI g6ݷ QfPb;WXmJsZJ$X㊣G0@37e1@SFK-)n7; 'cXqcLӸ5O=u%`_sLӔL%B/&r~D6!ARӏnHСQ@^UD0vvƐjBYk?J,@.v+~Wo@$e?#s 9z Hƣ%y9BΆgas(oD*QN髧CzE13Iayt5;BR*X9w^zǠ'|oB/"`͡ڒ׷'E\vϾjDe$zf"!24&uH{,LjJ=-kb]\ uBH&p/r?jwb ?   ߉ Py-. 7|RN\ hL)>݃ O}{#{8mhBh\đ6ضK&Ghs,s7J ׵2*H$X/ i)JA6;eo8S8VgwV~ q2 Z(3t7ksҮN^o7t쟴yr5_:YP15GGyf0DkgXwa~aLf|0+ yniW1R%q{28+)z}$BXnGGݤrMZ&E-F5 ~K):ڝM.y!zy<9?tM,Si<֞w|0db *oxa '{Eva}=S>| -hƏuM5 KA=QwꩣZ8sCm*ibzltS SO W\tT^h9ΌA2LgR50$؄Cgܵy@USЅ C+ Xp"3nl.ǸۛLo7;_Ln1/~Z+x+9BJze;(~ WFr{}0r\` +45gbZny)r1T7?rP zFRjp-;GB Ku}CMH m+<'0| Qci`.1$c/$kw3 C K\E`*_CE5)gOZ5ƲLƈ@PeGb_K O;h5, t )мkhh(v$Z>xkJ?EscfӞ7- 7-T΋)}FW@??;>xM `:ҥS+lH"' Qܪ"zXLҧm8-mijp Qtu ܱ tRU?vUa?s/X(z5 }"gT>/^P@8>4BbWӴOBTV^g1mj-" _E=cDx$q ӣJ ._Rߪ:ILtbvԟxrsN2$LwZPG@I'\(&8m6OF#Lܡ)|_.E:BP9tĦ]{H@"z3tիWB8]jhZ^O6m=Jn<v{| *Z7QҮr|!*,w&1uӟƓa g7YhiCf VI_ 05S8aVU$;:G.b|(x֛y鿦^mOZokjCmK=>ث5zO814VMѪTqrܬqX{U`Gp_{W;jAp{w5fAۂq s==yRۭj0jC)u6k>BګrMo6jZfy٪0ʛ=f!IuڬVC0Yf~EVǷaZUxu 3ty'fSЄm9Űm3FuT{sPS]{s7kEUmԛX;B0.tl)+ݖ°ͺݷ2!+Jߞ@eYv) j8P9/4d/5u!~7 PITq:R" (!>J.n^Q۱9hڎӨltuyA{9{@B0ѱybج3f;4=r9WBπ}  G[\=^I:v }ٕ%ďHmg|8EȒ|Co;x11)%)t$4c8ۭ+( NݎX>1[L8pFIDHVܒ'%T`d_m}8 WU_gR|Zp'ECfozbЍ$mM2IeKa3iCL奂5#{òE+䦒$< Źl Q&e"g /X0tËmʋT> V9eV1Gq3V$$ -HNaҺ=`Ig8n©El}JvdscXl3ƚ\^YQ{ VA^NBV}T, ;Q?qwb'#gTgO1,|9Jb#7_seFU,&y`U7@lQ2;3D+OӈCIzсQ?7="kyRL$aTuJw  NΣ~Rr&Ūw.`>xn$/?Aٴ<:/SX#Sd[_%VvcL'^G,Z%<Uނ37"tt.hQ6èibc6yrW9חhB<5mCi OĜ!&f_$6e4D# W.*ԕH**H v;9).e٥{6ژŐbo8,V£j4[WVRb'LJxjg+ÃO^۪2Rz8>=O?9+/屷4ܜ?rx1DbVIZZ&pq͚M@:'Vc@StD@=Jpwc!A$ m3;?c$.5+N-ܜ jY ,*:pmI 3N0ɠ22ysKnP"I,]"TEZIgkhD/`A9SP33<޶ZP~ଭP.xOx44[$ >٭Q\+Bo4 ݑ27e*5i3<WuGL {8(#e&`Ia  Joe_^U(4 7Ñ0W.RtԂsS`۴xJ1R 7 $(X|-ߍQvNj<=d* oZ%`r7&s9 c(*ed彘B \d'w ;dDBpoF kh(ZVs2OZ= $)%9(PXRH8 Nqh ]?zW=OwڛikmmBTQ5ZMH8[DIY֯HJjf&b(*8, H%*^1N#k`RH$:39Cə-on!%p=Yԑ))fB)sFdв]R;=6vV IE;53BwiX&_R!' SUpZq[.<P+UFdW)A&ןmu7zzvm=یљ`m8\{vt6Ο{&%<3M'=X<)׮;3#$[Clh-ЬD:_\ZbjG´va&F)ݟW 1#3@XHGz,jGu%;0jAJP!˜<^cԌp8̟8!o6̬Ζ:Y8ic↣b/yIKM#R7{͍g/ug^_o=uϞ~<<ߊ_|}~|+nnÃn={Y6tkg0p4f@[ t`dҗ08e 6n D)oV(d?0Zp UUJJ/bCj;yҲYz H>~k$a̹Eaֳg[@|n?_;ztYYg|<[׷֊4 gPR}W4Z<=ـp!#p掏[d[qoGq=랽X֞.\=Yrkc}<>_ΞS ? Ѭi Ԋ:M. Uߜc@'lJ2#P $l,L7K`8;[QErov?}ummmm\|yk߉@ƠLa* ;1r>xq3s'j5 w(_0F+1:nЗ;6iY)Պ'HK vʏ̗QśQ\DiP=v$aԿpx]q Ȥfk({w 29XQ)cwܤh؛p]nϵY` Y 3]r^&m,>[[kq|VW|&^S|(9^rmOhQ2XyaXyּ] jae\RtG ~B6)*K < ֏΂g \8ϐe$(Sv%JC0e&GLF0t@!x2ק7B&H= T?78oZL1\atrn P:lhSD6hH܂ e'\$NϠz!&6ßŖ0i61a ,Mc.օI-E$u@@FI;%HWK$m Ʋ #3/.381A `8J }t-ZT9j uOVKy &SNp,hU;^9bw0 $0yv6[y| \*~*$M? ŽD5ѲݓSXR:]V@ϛ\c8 @hPkY <87 P)lf\Nx?D: k {L|19J` va DR b8{Ցݳ0jzzMЇn4$qSm4 i.C_86[f𻜴A4ՉF7~s&r^fv0Ķ&t>v W46`@dr8O:iN6Ѱ'!8Jn~T^`J(~)E0(} tZDI3A $fxP"G\wrZs.ZyX5|jEASdKZ{H{ aF:SVS=j 넘A5% %+Aw)0r;#tN4ǒ>2"j?jG{J&n]gf'n2 $<"M1ڌL'WI} n# i񤜹&ڎֱgO\_~Ϣcd{gIeW/,[5hf ~b_ƚm4qEW ~np',59E sEtԗ7xxӨ3v,Q1W;MUV׽Kأe3 C/YC=eQ2x!]&jYFØ_EW% 瓃 zQzXΨBI/n;l!(i'G$LJaz@e0Æ81i.&Q`@ ?#JMII$H<[F>Q }0i 剘V/I'fplSnn yD3J%mp$Q Ӹ~7epNԻ{>tФ\\%K,97r,E[4ИL5hiE~4z̼pE%#fGe%Ux ;)!$&'hc q$G-{t3y>dS5`)6,7)L:UXzUzdܛLxJk93pA_D $^p|ish;9)Tj9n%^QJ^iRp$[t\^`N%hs>p?bAb5r$1.ęfް7EcoU"c(7Qh46\5TUSZb+X?Uꢉϰ C@!d7tra;d;LCNFk1aAVv3lL/}0sE7Ws;;$c*>Jt^=JJ$D]'h0&V`,z.#:ɶsF x1Gjn[I1 N[uUƈOўJ0ؕq{Ψ:pyQ_Q܇aGBO]LI2~|04|!,\=etEP;|5Iv#Ru>Ki2J8[#inWH-J1IY r}+F,S_FɌ b0r$NΌ4s}?&вi[ awYb$$qt͠t BlU&_Ʉh];WcJ;6U",ySQ}T<| ?RO,neɋzl2uDZ~NuDʕ 7{=Ozy1A2Qmj+w!;ѝsÉXt,:lNI,uH^`&y^LyOt\gul +q~b7uh6^tExسܱ {xX8چ6hE6G73xz>(Isr,q9'Z|[mm՚ ˳}*~y>馯+>8]u[ow{@m2龇{MqáCeoa{?o|r=Bl9g+tp:"]m~8M5q6VZ=I. _IoHOJtn>%e{gO2{kI]/dM(6Y E{N192%cյf<:WژkHhn^Gøѫ4U="L}-,L?R* iB6,EeJ{\vC`#lUx>  Ta4  e0TwE(w6Tn6'W*QtϭVV@!']z߷"U9s&qֳ-㏙6W hgڡKc'l P(YXC)'66@6)=<3".JаsSZU'su(ƟW:V;"vp"- P>=Bw^?6h d'!(qƐ\;ឤSv̓ZDVޓ',PrOG_u9C_m2cj[ַ?9'd/6zus =;HDWvS| }63C$,ie^CSwDྡ7^fRfCj<9HqPK69ͦ؈6g0lО. ߈WF)N#}|ޢ G͉XgMB@34jt^6QYnhD4+EڵXJJF%P9nˏZ2 ͝3$L3!w'h-Лc}=d5qbaRHxۢ ;1.8/@4}'^qy݉Tjh#zyP==}n_;b#żR==d/v~L``/ez{qi$xCZckCcF_sC sxҝ ǡy3R$ǎ,HA,ZDĎ3Ae9veIWm9q4'Jm`JC-.,bųT"o,AD/DN+%]ofjSY-3 lr,pz g߬V1]lD=<>r\ExT2pB q4N*\GQ yԔ|A!|zoxz>70.j TB柝(W`PJ=Pwu&gq*_rgM;Y^Ijߍ'fƛ9>+qקMdDt۞9gɛ0mǟpVc m멯o%-8k*7g~ /Ռo;Vvp-&^ 2D_ ?7jS_6~b%K}@TІ~cbQ H#ǽQsތT9APhg ctO^K;  }+ԣfBѡWԛ >z8zxӹ H3ySH;a}i$2.w˳b_WtR~Fۏ#ՇRĀ["mB_I N:it%ǀZVG&[qXrC:<"=3>¿w-\AXEPI8Ɣ'(]fɌosA]6;w5Jv2rLi5.QEcTѓ<R<_u HoJmq4j<>T8gD6 Lfҝܴ>F0<'>=8?87Ӕ,\j+]cB^ؽZI,]549LMԅr tcnжV (lKA'*%=]Fq;Mf )0xvHżB#w9?/N8fbѻmHw}7 p:gb^ϵBXG7 z&{ qP_{5OxR1 ׁ Ƚ4_nǺb0L_ڻ#g~6jVJmT\j{s\C5Qr35 $;sWq(7xo຦QreDHkO+Sjji~[7[UH~gC:29kQ0|1i]K:ȃ`ʒ fPoo0)_i~T#W\B;Fn]n#*XAwDJ!+iX"(;fߕ'gت޽q !ſz) >-G+d;c4b,&#>ӡ2sKԈѢB8Tǹ!o2Kй6@%8rBITj`U$n%cy<;f$htגW&s7@x?>zCIm]kmNWXOv LJ˝TyN+PvA]EF͕=Ȕ}$\.e0\ـe0pj:I5dҙ9 F^э:[A0@yih0>mRԯQ8A/G۪'WeBo] @0ZZ3憌GnFLIiX_q,ã1ķ%SǻS{1dK~]4Ď1EoO_\NYԆఖ:~r"zJɁ-i>Jap83m3{92=38+=OzxN3e(/!ъ_D,r4MD݁@X'V34b!}z /ehJ4VI!ѱ#q8Fέ(t󝍳tUt!;1|ȭO@8#[缢uڈqy.޿# w`1<{OY\e gs`,X!u6Rug &ڝ3O#rm=u`a|A!M㼣\ϑD5vee5q\U..)EPem`iIR(怱(#5' vQ{qX% R:2LOV7QLGK-jٹx)Q c@8IvѕTƠ65K0)p`K1NE0d:6tr4쮋=)e}'DXu"*mZ1 ;DpRNTxqKˤh p`zbEۭ#vC6DvD$C8:Q8:@k~EfEK!ݽtQ^daBC/QKa`8eylCXŏ}J/IT1n!$מ RN& àW&|=ǜ= -CKmBbIEbGu/.Q׭x8%l&;?ΩK,\mn(mR4P/P0y*S SqZBb0m~Ѻp8"I>(<%G.V}1Ȳ(.RgSl,-G'0Y..vl@ /9.->{D;é g}w; ΅pdһY T`t(w9evߠK Y_(E:jSdAۆО!ݰ䆥QtDe;,[$¬V@nvԍz8Jv<:RAό6Ah7u<^R[Eİ؆hkGy`˪81W~p^*9g x>bcZ]HxEe{nǠN9e I$ JJ*|w2 Wɮ$Ǽ`y}z?YaHRL̵$]I__|uK<+b?D3â-d__G^s ʤVW o+q!pcmts,kLJ"@T,{^2qE=l)N|?{=m+w A8xcM"Td6Ҧ-4r^F!Fwjuh1pҹ\~lUtƳUvtavcrC;A(+ J1:r8wڍE`tX(;UɜJ1Da'.нZQ%n t(L6`KoɗY>X (d=2cow :%F6hpao sW^2G/gIvQƣ~sUHoPi +9{Tg$kֺ9ᬨx#"Ios(ɺkH|q1Η *!m%PPPm:6v+pwV@'EMgLΒֽmf3^OK(G&3v\j1ݺ;dKw<%97)|fUdW주M6#J-;K:6m6W=EƧ2vkBuq!4uzY{ lr3[/Yl|Uj,n蠯984F\\7tiٿ>nyuU>T$oG9q: ˠgfKim_ӌ&]a?h;75e I9Em>O݁`{6"I"}Lh)%&VEzeN;l(;[I}X@:UL]^mY)18.kRj:e?QnFɫ?Aϣ 6NI6u1~𿗻xumЮ-8a3UYPA[Sb+Ajٞ SʳSXIkUg>(+J#o:b5z]]ⳀF<-D4J`쮹BAYRONV @=Y"P5_~֬Il"s}!}BgZ/h +`C},Yt)ġ9a?A9K7ʛNtO(S Y+t^凛hh08-ǜ6Etv 8M~a% %xªĔW(Pr/Kj }-w!t);lsCuIgO@W}Y";HѨ~XB]Fn.aJPe"AHCCX"Vr7Vat0߫PW ]K9EA9tx5b%3 /!h]z.eexfxMr>*xUW2+ }xLѮJ=P´ik8o +G#}$X%T%ǔA8 1r I?ͮWэXÜx5?<4sN|)8QbnX׿#[D><<9mqB|΋Cn`bA>$. q Ñn  oWXq8oHIS+Y=Ylo)@3,tnPEULG/kpldEG>kIn; c6Ol/JO҂Iv9 f')c zH5QFZQV>rvm0y. /V\l]ܟ(}VŵOZ /̼3d̑X@%s紷!8+EΛRO5綏~1f qc}=u9,b$Jue%T!|< 3f> ͜HM ptoIZ_NBz~d\\y@gMlЕkoCU+LpR)8 ,ֆJmô+Z! N;]L̍!3@Ip)Sx[muK:vM쭢SЄW28+%`!~'llmyn8@c VMFwi}u֣/aʑp@%X~,}P)D2'׮LsWRTp]x>"d?E0:t;ckxD9_!(v ]2@ɢ--3]JfwFWLKJFLLq~\ڽ%R%GcFH,}0A; XR))_Gk2p?!}\0OWַUfr^b 8q"6WCw=~\\2X`s`_a>aJ ݺR-Rꯃ83Q[4}ڮ6 [,XX?+3=jUB߼Qt]ԓH+4]_/|pEyE&뢳청tPXPxv^gPm6.6HKuᯮfNG0atѱXLG3;7OQ``} 8oEm(4QLu>X@ ;1a-(Sb<i H')όRlSɸ x!k8:\SDf 'h*eݣXOX S"_ :2[M@TM tS"ayHUĮhgv:H5K\ ҩ1̖ZNLwd:.V M1Yמ TގRLg?;XRP>k LIwJ.Д2X4qIWC{eul-!\5C.hA т{{v8fۜ$ ɑx˙cՙ5/NĒH{vyԘN"a3G&YIkSyrM1RWΖd7lS!ւ>pRl[5ҵehbj}8U 'U!ѷ5:KL#bg1Krw}#ߢ =t^_6m_oљOzm7R뿹u|2l:v{oz~n;yd.K67Q̤/K_[Ӻ.77"GFNH\v62v6N`wnK3leG#C %$ҽ/UPm5Z)R͉,Ӓ-ن sP;9}}jgrKn?/vzaݾ R/lh˜4z46|x_oUlQNn[+GI.9o&E/6sMrH 3a4N.G:7Do(YNPQUl~uTn`99{RkDegq[9%ȿ# F W7SC׸^jvԪ5bcO%^M4_b^I̲ktOc KS$ca8 b*-rBq蚖4!ZǴs`RiA΀9.~7;};dCԻd6*~ɳ)z.xI͌g>NrwRU!ѓ^h @_%^G]&xx mH{})2FYwM#|P!m<;Vz{1&q%}PxAX<]F].{1:v">} ϲl{]En*5j0733W3~-u)Ep̆'!hː!-+2[ s ZHZ %څI+hL۹ciͪ0UŐ2OHe,f&OE،!Lk֊-j%@wpI:x&~sw盛G?qJ/^̓Y2Y= W' 6^.ୗៗ;<hbt ш=tD? $ph6x-G3HX(9xzHNxɠ7Ek,& HUkxMR!ݮNzR&MFaM UPub5mȸSШTttfDwڝI_/q]ɨ3C,ҋ0ƽAHDvC<yl8iۈ]f9XDo4Ŏ Oc3Ч^BdMQTוZ$0eGϸ%fǓn n!o$@-jW5^mO?ɇFۖz{|Wk4UhOQq T T=j?KA{dGzYRuGoJ @8[Pu\/}uXk쾅"[z[?n@=UuRm껧Ն:9m7k WoJ ZUw ?V0wu ~: uިpL]@A iv'I FTm|(IڟOt\uf`yvOC8LGuUojxxW߭5wq&YîU[Uj*9qڬQm00;*G||=S;n|q.hJmSLeUVy^ }N_VW~rg**w_|C(Y+?1 U=4SA\=t`Q~)ҋ/07AVߔ'*;;IpnԣMPjZUFJ ~6 >tWʈ2ɔB"$US}%T<+ 굅*1p3~wCP0ئޞqW>CwI|xF+8<dΊ?N^mwq?BK-jv1?K:s9pp"_T D4a.&&/9 ߭p8G/Je[.ӉȌ4,Pg)>f<ފɠU޿2ˎ3AsR9[JFL|wɂ?/wdzBJRN_V%̧exG%l3I08F~Gy˷Wiłrw;˓޸դVWBQ\=Xj_S&s?s?s?s?s?s?Ն:X