#!/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=23ee9a8b56c0f87d1138770c39c3bbbe # 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  Bxy8Zz"6w,^JAi4"9G6XB>$H 4bM802xfyp&`xp|DVw`yXXSdz1<׻Z]BON-v:u5dʠ Џ0KE1al%.Fflh0?5wI 6Zu a&ȆǬ)<*GzO.iclC(l{Fcc445uuS)z_6ib h YeGЩ4XꆦZN:1G-D. :YW+'`cC# s|dZ54v2vIff$M I*BIz c<~:%10ٌ64.1ʂPgN5h7P$1EaT3 %lmj?Depp犗MG5˱>0zHN_TiZ")Zi=\QymHzQ]OQ+eOtq,/kx,g:#s`S" 2ŘGgc_U^~ooWߓe: vgwoM;_qa ^4zP1odhUOFvM6v́\V,.U {#iŪ/g1z`up䟍9!#oa9oܳCHY3DGC7rb^.AA̟Hg<_s)塍֚+}-[1/*` f2/v5 5 "t(bif|?@ƣ p۳0I6 l 5nPhp{kE2t 0'P$ } 4k'@Y5q93M2A}flT'*%q)E=KpXu\ %q,*eel esXqnF4'FB@ z凇Wo^9_w\)`WW!a7]B[*7fouəTV%&=V9%66 jp(1_m?5\[k5Rݖ.ۍZ;c1wOKx.'Y++6ڀXi\g-[E7w&5T$J],ԙlGk%يCQl 8 J~n>Aikuvr<žA MYoS.`| }n">O/0 xAaWcoܗd[PgLr[(r#:nن/lд$|ʥ9hn9pLžit[F󹍯 ^V&@1GpO8rS[(*ĦLYc'-%*$abO·ÆQE|Ɲi6i8s7HZk\b[dDw*)pM$"D}7 Ͷ׾{ͮ`pt`+M¼w>~5qϓ&*,J8xɽX02b5 i<7,|H׭PL)!{=fMс.ئ6,RxP̂ k+@C|A` }!}QXJ@NpBL0:$ a ( Z[_dAįZ/BY/-Z2_H7\a})9i8s y;A%Z3-H>a2\t/Y>O]>LgU\^kjs f|E.b@qe~?d}{t21%![;uSv_ d^nJ$WvH\Oد-gG>JjoU 2q-ؔ ¢[ކG`epBǻ? ?\g*us!PabԾv*<klhSeֲiXPΕNf ~S~sLfkP)&Xtsa.߳)Vqu4ֻP\Kb%qXz GMϲ( G8 ,srGKG5s< Sd}mإ#}ͷ-{O½VV[k Cr j-XkȖ[eN^?Ͼ~zՏ߿₂pmmmWbZv0JJH2cH'uWG A=$]~O԰:LgŴ D€kXHRkrJ1Ib7Tm3' Ne@eg (ix=~Rõ Z:- pJ%W +M*܉nx4. % }&lg[B&PLD l}K';Z "6iЄY-8ͬ ԞY1sws0l&LJfLb40 BL 4'@srl-G.%jkj ϴ~iyCڐ,2S IrLWv&{h|t]*r1IR:́`uC-޼#QgȈZwh@8_Nf4hb'vXXElNx֛D'k9wI{s5K,ɮ6,_#oCU.+ް%P)fE͇5w?`bmBUGm=VXN45Ļw ̶q{yNmaA/Ԧy {ҡѧ~?jt=$K=**l@e[Jg͓ Q[%Qb*6RUsw"RΕ5Ŵwsn]Ns)zW\NxL 2|D!ᗲI0zdxO. -`H*>}R֎FelgUʜ[k[!6%ֺY@˰5Ёh:6OAZRW4mt~S+v '(lZ ѧy76;M*NA a68c60{azMen'̥Ϧ !!в;hEzj3ة\',>V\__ XF@w.75#lƟe]Fp5;7ց,>>?t`o܌x Kҹ1&;U:`wi6oz r$tNFBEj4 F{ZSN Ɛ$ǡC.Cp6:;y{#}LtE7|p:lc@aCqQFKj1?-O|SbH&`9ZX]P67( e&hkЁm&_1 øCMݡ˴Hk~F ~4W] mQ?_֤7y; "#*ϠәgWWYa4sO컞Y^ [Hg1m9 uo7`lt({+ę?#SdF%mD oğU$'LT.c1d~H?[˷x|kNqPqx,*  i+XO}IqXo{Fޠ|?v/? ~V?j3] buUقV)nl.9e"&Ě $O)o ;"֥nW~ҥ].ed?iC*6M_P[kA$@GFZu(P4:_isL={jjglH>,s=&<2 ~fk=iFz+SE], S=;Q3C--)ؿ34)jtX GMYQ&%3ѯƓ4Ph}iF˭m&lncu?kL .vKM۸[k_W)+mAJLeA"hSt<%"J#,] ҀkϷp-sxz4AM[J>;=3T"=h!2ƪŃ/]HlAӇ-<;V?g e^sk -مw;HY :ם2qrcݾqK ch?gG+7gX6'h17d f+/ON6eOGvC`ro'RP!@^x4] 9M 2;Pr1~ˢ7x݃!uhрKw~ {T퐠D0j9E఻yEt :o|Ք?Qr )Ayn?}c4*Mo/?Ob;?m~΅G{ot-~mv<,I?&࿬og_`WY>rxwFmm}g:޳ɳ2IcQP65$Dsh˸hr̯"P"ɒ"*F;INZf#j'Ra +x2T9 fCOlER!qwCc QB1_s1 ތU ?]h8'Mg/ 98mH8u 3vU7Ly'K;RpĄs+"TK_E`h:¡wrXSN:1Jb_j^]}}).r hasz'[jfX_/bur% 7%,ǓSt v&3rxk Ff7,8ve7$"⠠hB٭m뿲(5*y.@K=;4cxuCn/ѸFbEyڙb6Dя b-nϠe>ӷU"'!)Z]~ooc}ݍwXwAswW=x$0 J*b,SړHz_-UDjnOZ> 1o񳰉(pcJC܄4/C:e\-բ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 kA7h6gO?'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:NvVW+(knrli]^@:_L]L'' pynՂ0lɪYE"YDCh|͍/Ub>wI{ g&|zЩͰnf{ҎRd#L ,>M6E)۳^X6/NʞsWMtqM%5%ɀNqwp7x@`01˰:-huZQWm@=l"R77lmZsi[[xgsCxئ 1<CO(=d! 0GeU (h?ŝRw!z'$B-]*В}bnWL53IM09 U2wv (EIµ3!Z}6q(*ۡtT xESӃ7gϳr(X>,Kjg=(0r&Y@Er*'!NTI\4Ei_eQ{F>jG̀0/w?F_~B`]!7 G}aAMɁ{T" ?',%&N#Ǐw|F{|6*/zOw<ʼn׏MBiC1|!|6ծDŽwͱiYt8 mŗ$8(xGOd4kO+c6oU3㬱cM=b&>*;o2N# MUTu j<7$Ap0k犄ӝ04w5LcN(ЈelRY1*h}ߙs%$6#t(9_gT&Eg kI Jlvd+j׫.q_Te?N&1m bφl"nY!SK7Et3auz6NgvemKj?Nޢ٢7nU֟y;7 &EЫ&(6 Hv%cxyuXDPP#+?~݇D6>~L;cSWTGpɀR"<~ ^Yq홸2dI2a4[UGdN &,hX'K OEl WgoV%a DEn WϧUtK8`Vj/O>)%34&aYPE.1ʚJSx# ăkAL`d\yWTІ݆.]N 0Cb$[7zF}PAZ({0"8_|Fc hFќC,h lI<Y<&Ϥj]V$̺P]Ʃ+ٶƳx韲e W#¦4)L3}r-8ke1'FPBVJMhSѹV 4d!:NԖs5d XV#81Ǡ!QEƉ5M"47]rvQTZL`n'<t+v\D|+c'}&]s$Ů662Ҝ7L*e&gN9%[{B@0ܓ=ru^!5ttFb%h&o)|bE묬ꚲeMz_Z̝ vs̥1f4᭾^J0^&UL2n+erYo)D%!-' 0`꟣7cZ6XEzn~_)I`.GòUFql@2w9v3Vj}~T<2V{KҠpd9wrv$53 1,*xkn;:Ux˛'Qg6A7 ɂ7&=U>!'$'#ݣi^k?kEڲ$~TO>E|eFjo饃Ij5Fn"^hߺo*AU3.P6D% ܠ!V[dF50b 96$hТ[>N3 @1SQ6U 0Rt4)* ;D׌Ur<`K5=c^&=uHPǘ(C|3ox)4H*lvs"Z=kԫ =f)vrn3iSߠh5kl36ZXE;U?'6eZ˙BNJ.'P5=*)@%;+E%x΍]|}nv=[%sEP7U)]LԆcLꭷ~#l)bX rgϒC4GEå4MT{-W:`Yi>e[[˽U`'`"]3`h7DoHz'mz#9n)K?dDErA͎mxYJm4'ډ-&"1AF +5eҚ Ͽz}i>A?icY~捎 &+^HzȾe%6|1dkX.4%{G¡C82.YH>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>3=7XU4Ug|T?CKܨ1_zec]hBՇZs_2҆WVBJ\tp<ͥZXE9c-kZǴb-SMw6ݖS-Ֆ=\GKn)cb h`s-FŠdzm|L>Xۼ=>_F}6vԹpli M.Aj#nYBS΁pMpDɁO ܃}DcI6cQ1 wHz` AH 85rE&HdGxm7! I/ZbЂ5Inߝ_t̘S^Y$R8F>ICaKr*WM%yq~EHX<D@LpTV`gh-}8y}?~TH^;}1(SCuQ7KNĒzx0#=DB@/s.e HKUVx5h::3Sh_طEw5အ)KεHRo܊zKwr{yNpC.PR*^/(9JlzbOC&.~!愹 ;G>+$)+Gd AK^Qs=S+QHU_"vpR{xz_?\AӒgFqaJ'U^_:1ylv^i՛ZaCl3vTjhNmMԟnv6 i{٣S )Fa蘱GC:(@z)_޲%HM?=l76np\*t ONbmw`A&$»6Fr~ߨjg^q=:N'7 /uDsT(%+)h` .A4JyF,lݹBbt`CgD\[ԷAWM7}lOwerX~(Rz%,`IiOy{T*@=$)b0Ƭ"xxj*oEK)SZ 14Jq»Lգ?$jHJI\ Fm( 8ry|JpRocv{$ Ě(g aC|hiLɃg9ِ>Dm߻7t<%|D}Q,:ؗą0+vVE(M EN@P% !08IN~Yc21;GbX9̡.ɥ|[J<̀A.!\ ŚQZt:K1clL5î$;)-I*!ڟ|na&&p-rCvi DL06G3s0 6xk2GtMg7T@ckQk#րIսZ>NXf2kA8j%_Y8]`Pm7[Vp%41fM1Ҡ{C|wY&n³6K8C%j~xrP5i64J;Go1 *@~3o7eSOt Eg~x؊cv%-9X1ypx!Sje mVfB7E2 ؎/XPhtk>:{[݄4vnsbT{wSť413-昇5 Ō˂F_yv v_q }4,=y9}L#>"^8!ƙ *(;c`4#DCcZhFo}c&zΫ+ASs U CI~#RrJ_=/*AXMRfNΣtUI; 8 x ZV%km֖4?. xU#Z(#3KE 锡ܝ4F3f9FT.n\@X[ 5}L-Cd%_@2{ATsPaA`PN`PԏʛhqрGLh8%vrBm(pDcJIdxCIi;FE"öl]"~LGqwiwr-="RN HJM~{&ژ'pĽ_'/@&7cTL>AAE x#uO}Odp.ヌ*߇AMU|iUܼca)'jWp@N=ut^>[Ss c#M"MLCU@.Ӑ|!V`!Ԑn -5Gߙ>H)L3dP{茻6a{hjjUphS"w;P_p՟tߝw{Mf+ `!oSkoB:Y(@IL_wx"ڝP18ҏ?j^6^NQuxϷ/X ,uחLL-/CQ3Ɠ GJY^PJ @xhZd./wջ)ɒ><-tDF!jL a v{B=`UvMnr`wHXkBH&IXh7 Chx^L~b !#csAp_38^ZCw -0C %ڮT@D+bpSoMXatyn oӑsb%f[9y1Eǜs'qdzQձP"Sg UlRGt b` Ia=[UPRUZr5|Z - sR;N89^4!;Za!NǮ*]񺸂Sg"p X&SOl‡(YLJZ@L]\j\qӱq!|ʫ @7BMտTd~Ǔb,]<8npz27Tɷ%6v\[^'# N.ONnIƗęN ӂ5) gQ f`2ۈB~;4O+vޥHG(*94kiHDOw٘z2[_ Mz>W_+bߵ[)ߍg϶AU=}^X 0}b2*`V5]/DE#f.K{x20l&_8+}sr>mLՊ8<)@qBafh{Iަ? #F Z%/&[KtTg4ɕ(D8?g~ǰts$$s7^ ?x=q6WF; 060Fk˙\)ҋl߬'X61r%l!Z*dXhpOvN?鋹9b 'L s*$bSEXzS5_@)q_W>ۚ;>ШyRok#Nq VMxs%?T>'ZFU5K~wp_?zSRP::naZǥ<6}MV[Z}U?>PG^[Gkh nU;=6iYMAՏvRͷՃ8(j꫃ܯ7j{-kzz\W?j?`8ƇRl| G_= IU;m f+9/߿N(T 3ra0-g&ky_o֊ڨ7@}_6a:]\#RWR_:v[ 7ShtW(.{1g٥2CKؿА xԅ s:+@i&֛SYdvLH$T(y{Gmz(Dv%FeCc4Jۋ{f1ۡXz)h)BG:~Iǣ݌O)YNh4$lĹn]|DFavvɈb¹ϟ?W.3J:'2G]>, $:oĹ8U82m,ןn^=>-8IPW=1IF&rFԲ^%ɴ!&RTaY"nrSIznh \o6we2r, Y6gEoON`t2W|y|Il B{ RSn3$pY"Npqz)[!=(s:}b)9)̤%W.o.gg{`Bճlu8U}GbU.C'Nԏn]*pS.y :# _߈8` r~QK#e޼0XU7P)[fc Q84Ѓrҽ^t`gpZrT=G!C)U]a22BCf觟vIꝋ'b2؅O?IOЯr6-#Qg#-8i>R^G=y.s"b2%l0 3 >vIɌ3}L3&r45\#<M9CR ^Fk]#~2ёԚ^j*I8 /KۏC:8f`K"]-c+ɱio#NӒrfAy_aoc:4(aT411h?<^9K4!6ۡMG'b{tvwb/yK2c"VƆY+RFQJKILXrIӔO2=JmbHe17B+Q}Gwj5vVU]}A ʟ8< >4[×/WRb'LJxrRA'TD/mUI_)i觟ҕۗ[Nnd9hD 1 ]K$--f&S ~D+1 HnGrH"H%1TP@̐ ɶ1lG]P'Zn ,r{T$M'sYdPF`P_<9%7rK$H.A"HVf|)(ojyt?pVsu B'LT`-_ըnl~zHX2Pš p#&=Ge\2 0K bi/ٍm{ {g~+)`}:j9)Rpml<ox)Jƃ,>(WD5Lz2d70Sa 1Tz2bh^L]P̈j.2; Xd2"!Fr[iqjkuF9'-UԾVBAI_xL~הA}HJ,)$A8nݮ'AM E!*(&r$-B"wWEt%n3xAahDtU{WK\BT5YT$P77ſ[8˞,H㔔iz[\}ٔ9V#2fhY.K՝;\$H"Ν~љH{4,K~/yِi*zes{LHpk(P*#2۔  ³gk[[O΢ 6͵Nqṿ0,8gAn -81rLIvݙ!yݒ`C;nf%"bET;C 3y4JR!BR<;4d9  U;ڨ+u܁9\P#-t&VBG%d Ehf;xaVa(\sWEfuI7Մ}ɓHJ]jy<ٛnnoxbيNwu__o={uϞ~<<ۊxY>;u77A7=z݅MY~w6nm<}b X7,qS{k a,@'3}1Aa $(2e 'SFQ J)R)ElH-y' BZ BIOcd=L~9W>u_>tcm[۝O;gnl=^Z+d|/M#CI=M<^ӘjZfO(,#;>ni[.Ǔ׵c& l_ΞQ ? Ѭi Ԋ:M UߜƀNVٔdF Ij#X 3Po0pu6V'"nommmX|yk߉@ƠLa* ;1r>xq3s'j5 w(_0F+1:nЗ;6iY)Պ'HK vʏ̗QśQ\DiP=v$aԿpx]q Ȥfk({w 29XQgSI 7QY2Я-k[gg/dE\d.\T_v^oy󛴱ommmƽY]U=z-:NNELxC8Fod °rŭyϻ+(0A<& mB?R^UVyϒ1HO+b\q!>IQRJ`LP>a81$ BQdENWoGLlz@~o(qu֢`"lFsST eC i4$GFCLU({8"1pz% )5Q),I`) cfAhmst`.]Nj$,"z2JI.AʽZ"iK0oyu98)Z>NK 1p# L._BM5n_i WXNbI}?Z]ƙVJV஠^Škhע*Qog{q3)23892 ..{1bld,.3E8jXZcBw- a? +dkWJvF~!!}tܨ%M-57p۠ʱXn 6k {@6`8]-B`~;7csvޥ@&0JemA<$jC{P,[nV˔ԚIn"~`І3Cv:NRX5jV͉wؐwrT0yj ո 3,,G_2tMnJ>@n{U>&&'ɗ#LDOa8a-}̗!K_/ɂ%j 4B# tVĢP%t="һkЃdD.YXk:'-HdaPBȲ'f$E9m|(L@Y$6vr=! ``r)2I` G lQrR?5"U*(sAl6I^S`(;nxWWDNNcIq wZ=osX ; O|3zP D 4`uNdD3@ǯQkD Q$ vɀ۹>#AtF-8|#$}:g ӨiؤoB@U{eIHb>ZZ$TCK7n{ӛqM:7jo0I/~ 2A#w(]ew/څ%<K5qVGwNè5AlOa6}ᬋj|nrV'~݀a,Ιyumۚ,G-,d^ ڜ<9\[HGÞP(!WS xY)6VQ9^8"vd3CLQ#`QWNH`x 1qc]LbD=~F(H xַ*'>}&`Ґ 1^F.O,AK0X:g KH L(dqnl;wq39|I{LJ3KL3YrzodgRYċh1Wb7kN+ҊNiyJF͎J"?"ugw7SChcILN҉l]ƬVIZf}Zeɦ'jR`mXnnSu6ϟZ6O)y!-R7͙ 0/rfX<KA"</I]K$1ws( Sҩ-r/.qKo^y/>Ҥ, I&x  k?'?PYt^2=&p,  .BBd&AIH,uX(lg]"('e'(Xi4"L~M&3Pgc;;38Rnq{C6m-|e !7 gd67l ZUm|ev'ǢE?\[Mv\Q+i( dTdyOMTGmDun:8uW~rR~}ߗQ앺Y. /ԏ;8_}//xنu6+rPuzj.J=񲸕%/V2IXi95)W3p?‡`WkjWuԷ'/%#Fwr 'RbѱH> R;AX:¦G'9ԉWj u{ H#z1=qױ̊vij..btƥ%;{y:%br&a-hol $a0ĹXhYm_k7, W|tmuˤ6 I)\ 唊V?OWku DMpklz\]- =ސ|<;JT˸.e7"3> 1ǭdz%ג2_ȄWdM#Pl/f1@p#mRbsd|=J0Ǣky>T zuB1׾/ܼ0(l1hh`&HQlԽhm3N:,U[mg[3mïl  >δCh2EO6 g=P!tROmm!lRzryfD\"4aDӵ','Nz P?Wuv5D:hE[}z6pmH?NCP !w=IFډdR'OX˟ԏt9qs61O&d~o)s>Oɤ_8l6FzvP;9}}r5xlf8H"XRn8?}C3Ro8)̤ X̓Hysxb!tax]Fx}mGd+7W+/<' `#K6`qzI.m[}Gg"3K͒MJ^i6_FY<9eۅtaoVFܟ55JqeU8lN:cFH0m)P?ӏ2rC{'Y)boծ4PVrX6*wN.vi5NZ~dhdY$f Al7ܰ>>Gp&t3 D:u  GNؙ(qyC/<+=NZUEA'h˃v)pX2驤T%c}Xcth{)5 sދ]O#Ń]$67zS50%'g{\8 ">vg1|F b &"v ZDh,˱(3N⿢plqs˘PG?Qj3dSjvakϷSq3sE8%`vžMfUr(1ʹ:/<ȟF,b~Zt8pp47BqS}; -vn$$puwE7|zQS:^JVλ9 T=ixMt|4NDLi7P֛v\F}@v+|@ՙvƩ|ɝA7:gux%)7}oDbz:X5_6i _ EJrz x@%o´Z 6`a(̯l-T3cZٽ} o{&5Bߨ[?opg/qyPo 6 |4Σ 8!,,FB{ R$ 5ǩr lY3x>LkW ]ҎZQX۴*= L\{6>%x9jnU@YvpS.m[mh[iEJxbN\T0&R5N }lT^["^e80'ccYz>|Q3g+nMٿ =hZ=\ΆWvज,Iђh),bŊ_1[G8l툏Hp'uptlq70̊B AC{颼Œuyć^.!p7^p>bBH='nHMHA( Mz9{.72[,$Ď_ ][)?q_IOْ=|E?h1Mv~~S/!6}Yl!5Ps:Qڤh^`YTҧ,㴄"aB?uN1pY3E&}sQyJFyNN\S`NS3%LePջsn".Uh_tpb]n { g3<%26=CkrrVWF Eϐ;j^ֵP aj_8;,P#]+m41/n?c9G4Nl@tL.W'Pf0gi' uFѱMѤAZbH P%|sdO8fNU?jŊ/STԈ`X8 p[$\Sj{V@aWkO跈&VHy#GDF9L7S hd9t֏D_-n*EEt.jhΥ }R8>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ǠI9e I$ JJ*|w3 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ҹ\~*}:*EV:01F ݎg^ ǘM{ t};F^"0:,yѝ*dNO_%"ٰV^-( mh}&ѥ 7iK~n,V_, 21B^طpx #]479+EnTw/ǣOr$ϨkQ׹Np(4=3yVP&JٌƋ+LXAdB $̆PG:@|)]l4täRw6LFٵUkݜpV{L?$9[\dݵ~$ոURnKA^(z6kłjl+UԢ&Z`3&gI^F6\}|p'C#\`N.Øn]\; ǜ>̪b2ƫfQ&%^ _J6j{"SJ[p_y :,f69EЙ-O,6Sg7td} Jpk#.bbt.zV_Ժ*|@G귣a peP3A4G6iFzg.ϰԟH۲y흜ˢ6[xo@B=TV@$?wD>D&UOu4X+"2}6_(;[I}X@:UL]^mY)18.kRj:e?QnFɫ]?Aϣ 6NI6u1~𿗻xumЮ-8a3UYPA[Sb+Ajٞ Sy0 {_pJ^\pCZDS&˓O@Q/4ja>㣽̿\*4S8v"3ܢ#.|J6Ru6v)g hNIW׿㻶.Ԇ;Lz[͠:X'Pp:NV@d`'>V2 :(c+{%&J_:te7v&E>(͂ r 5gJ=9YUR& kg@!>|AY&Q ǟi}3 gգ ^P&V6,](ok:s~й?RL-Tdynn;8v玣l;sjQ*lؽ* 75ц(lE S^@˭(5(߅vgӅ G%?]qSg# Fb! iNTtv1m%wrZ/A O#SW[cXaZ9e|B^Jt}?c?H-N;?&ģq+rvH5V_( 2yG*Y~@ Ӧ *X`!GpRS5ZR|(`rP-x$r7^E7` s"9Ԝ#ѨC8S]xTFڻ]w`c_whBo 9/" wo~8ӓ4+ G$GW'0]a)b㔿!%MHd ,$gm:fϰmCV1]"h&}H$woHo(G@>I0+u?I f'3u' ,p_K#xGy,GjE}ZQP wڵ䝺03[asYr;ws[uv=i-Pܾ3%H^1GbqoZ).ӯ;oF`K=v>ƒ~#[)Ǎuxt;|~w#K!p:R]YI0Bm1g㌙gC] %9έT}P J`yՐ[}? "){(^'UR/_WLc}$H̦S$MghP!SDl\bL#x蚍T@N`VƎ 䵢$IE*njKYNED.\ědF9:^3l} [Egc عlIw:C ngIW:d` U/{|n ~6mFJmӰp@1 !q՞>4,Мo3EukW+N4|Fo0U)>!<"-FA qt  `h`% f\j DC +,:C4'#z78=w]eSA,|8/8_(2GazKP~*'5u{eٺq=-l3p OIQꟙdh=Ifx7N.03O3'RӢ@[R,sFteP1u)'|0JVkHcsq P\e/^ei-)0n3}Er[ݒ΁r{T;4U> ª#J ؄pg߃ .[w^e2XB.+;rv3QH9/ vw8]R;@pl+抡r޻K?D?H,Fl0%n])qGzI)Xmƨ- >mWm-k,晞2Zo^g(.s~as$PՕ/vۗb>""uY gvV:(m,qCj搜섓[o%u³%R~co͞={://~?z[t&~^u۸%ͭon>]>_muo6XW=im<2R|NNl(fҗʯϭi`TǛOZԏs_'?.ngcn;vu;wo}7% gg}[шPBE FtbKj3o[ } ~NN_}_|Fa晜yR9^X//†} feSTbI =s qx_oUlQNn[+GI.Zj׃b{έM s<,Vw8~W'p:Ǔѧ!z&{s)!bgC,\(H&V f3~qC۳-L,Z_6I TNĥ,y r'Ց4d- fio7W]£N4g~N.L.D";97  S,DpRTW9o&E/6sMrH 3a4N.G:7Do(YNPQUl~uTn`99{RkDegq[9%ȿ# F W7SC׸^jvԪ5bcO%^M4_b^I̲ktOcs S$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#9#DƝ0nJ{'R9 {Wvr'5 /6دsdA^/qI d4Ѽs 4l1j; &z$if ] {Ĭ%+e#Wu90Id p<8y5v4v؃t1:4+9[ygw1T%tm٩|=PFoH`ؑ(鍡ɔ9b q_0AK0ĢMb`ʑ dN :T Z̝<9Q~Q<{?P԰()tQ9oaGgRM9PeRH!G'{.((6RxD<tHIL@#a:!R[*_.)(a۔fсB->˞M\2I\(%MZNhP>E>cY/7z紁WYr'sv o:8a0SEg !C78FNħ`"YmKMb[&S &u<^c}fOmXї(t{:+X[)慤-iY>ߨܵI%&qٗ?C|}T=}5O{5~uӵ}Y|^_r)S Yݗ|ߐ&L=im'x՟O-P]R> *3?tƪ<ӥWy]lR]Lϒ'\p8|M8tJt/N*PUG"pi0QOk]V tg2-AydF^ \EGNqAod*2ˎ3AsQ\=Xj_S&s?s?s?s?s?s?i X