#!/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=e6e1395b7fc4e8dc02c8b154d11f2602 # 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 `[sFί_1%mI-OˎsE2E2eM! 0q)N\]Pekn7=_+^u\vm:uMWh~h^-5FVLWV7pfw%֬7ut?FMZU<&F,S-w(EB;,8s}IhsdVe \Ge+ Ad8ҵ^efmxv;lxew\Z-[`",S\x-JdE@CJ'c~6/c1n_!>S,w'9@P's_l '5c+5Z 0еhya0 *yaRo9qč nG(ĐD0[H(`wπus&ot,QQYbX' #2mMN.9_HKG") ̯uLc&o6dcPcLh tn@'s7瓲B6d7lpH;^1v9NM>glz;N pC6ʴxΌh/+Lލ gḦ́C} $nQt6q h?{_VT [L oWE<ۙvCCkcoLB6{4%M [C#Vy_l"& 6Nd\A;೏Cɘ>Mf0Bء]kx># I47aG(H'Dnh%M7h.+`[!8 .,KՉy5`mJ( o{ "ed&jy_w1 4RW˾xH>6#sڟ_Kqs8HlbF!:tÔR/ŽK_Z_PpJ<䍂EDݱò}N97V !/}¦\stߗj^Tu:tn5J/Lo=}U7yt[ڝޟG7J4L_\ ~U( qv 4v!4j\SH?J?+$J6@+tL @(lc hps}@q+@Sm4;yX]~|!$lDT||cqǛEvI »&Y"{]~ǚ9П*{]?V>>R+ <~H{)fQjD`I;X1 p/iۂ0n ;{p9`#̉i$'챰UbT%v -`Q[[mXD5a=pSR"+h,piP%!5H!a,4t<,eɍl)E< jds2E0aEj!G(#%Ax&،xb?yJmT1J3mSS^VQHib#85D<ӟ`)㤈 {R %XeFy~LFm?)gP *XVQ*y>Jx̯Q_ggg xS_$ljt<nㆢ-Tɿxj·p}- R,ie1h:l=*B=v^b\ҋ@g{13F('87kkf"._b3wɞvqD`N戬+Tջj F5&%"*U rppsz—37uYO?. R=xl׈fMЬ:;zUn@\ytFi6k#̩|3jNnl7SRS~Tlr;M>[–ww)1Nыs&qH78\?YPaV)N>eQwF!.(c@V(oB @&:ADbC#e9COMOd% yIDc 6Ce<;JBY}yDMؽ*GHraVK, ( *\HO*+!XP&Ux+Rf1eWnqoeE ҚŐ뙼ei&V0:0b)(g?bk cdOakzT#2HuYo h3'** 7Ǩ鲰N1iC &3/!S&] )0 b`ί'3ڰXHҮM3Z; DC O(fɚJ2DfTmS9ov'ꭔ\e$ҖA/ד˺;] e9v, LLIP0UU~PEY&eEϽXlyζ=O kжB:pFY׌[q 8K) W8e7Y@9{lEF_,͌L9>zw A@ @taN*nXv܉)9$fQmK/؍{'sI( Uj΍#-~BN{,VFWo:e]ض\,{{ KD%nP2@h'M$E Cw;d߂JrE\;L/pG88Vu2Q#+ѐvQOGnCd>/TmvTPRy~Ύ;@E<- 8n*gVGZuyQ3dXT((5n\k5݋Eөmm;=۽Eݻh,3:eZ4^?o\tvtz^rZY]N|ѳ.vi\4 72eo*9!dRX@K, T"e bxRKfZ㔳R 2A!uпYCP΢X6<U<<)t}xE0ڹvݿΫniڝrE7Pekq wM:^FLL3no\y|QAG%&d2O{adKmP͵ ׻yêwuQ]un6%_֭EO>31+C{gZ LM/$(e+) (,˶c82MTn =$D+ӳM~n]mr8 ۭz4l{g{ε|'<@H3MToB)B i n%Y_vd-_>xRUt MO©/gr QMtOq /9} -"3Gp)y>dW|HidO'v,i# Gf8ۦhE8-K*9:{rv*LbyE;|[/W ;FUq2PtyJZCJ2@1;%Œ?OČ{\ףiNNޜ̜OLc4&)}wrj^Wh](SKǕK=q\"~׿EHU57d"LYFE*E7)p*Cq)z{y.< F8}F)+z[Aw/ ,sٗn|eJu![{4^TC1<_SǤ+Rof)ɨEEdB;?%[M-Ex7"b)2r7YK_>-Rno 6D,X$SHXBϼ&?#^(6%~<#&u\-CMۏڡESFJГIU;''\0ÝD\UZ13gL<8NvPD35:U͠XK&26!tYK!I}䞾GT 0~@t CEDbvD&ZmR3 ΏGz>чcǗtG/:#"w1ayz o]GbqoBIPaOwJ| E, yL TH7+y 2PՔye5eB~FMG7)TiTM&iXlJ_ٚދ1Se% g׊k}B2(/͙jwɐsw4WEN:{|{'b'#Zw˜5VVce J ?M8WTB+,DcNm}t;9&SG=k_T-(+v>}:pT/bI86za7y`>ʐ'3-e2RMWThÌsv@'ȩT+h\7 NRkSޝIp(K.ݫٹ{fgT@w}}n~jGˍ.  ]J@ KH̎_e9B)$z )ɐ5 fbjIatsɛc!73,]ġvU|Nm0Ԧ ҺHl$nǗ[@XB:dA\B,0cmvBr nӺb[IlM"t4]@~I>rGe,UkCG'5 $uo y3I%̌0`PBdDL.qZG,@8n hXD.+DA\'B!@xR(Pp84IQ2+LR< hOŗ'Cͦ Z¡ֵ4XN'df!&b f~*Di8T>ԯQsp^K2e. :=-̍G(QQc2D7,.k#idYL`Ccw_q)"s|BAPNDp \`yOU P9 (vE[`Nwx>t))G~Ϲhf>Ym.;xCXpGL !ՅS`)쩢k?W>N<>TVq>~\MYańz=uϡ훯!@3BQ[ @gt!U0ŗp! Bnq\@T|Sͤ ubPGvldJ^0 x>Q=S/=#,dBfD#N}RBA,?E|xkHCI%n !VXẢ)i 1>*:֜!sAb̙bU|1,`rEKeb#褣&O5 =hGx:Qf?.|~ (?ŋa8 Wla!{_\D<ZŰmQ"izb16B| e& iciR.K{XwݖCϮNCdg,+֑ԫǩ)_Q:-z%*ʟӠZFٻ¬NKuDڀg7iu0 F 2T;=PDF(bFf5CBk-jx]o> HqJRIX_5B2ֱhI/Ѓxw |bև`bXr9FsKv8V:Y,E,9e_l1p H,]SrЖ=U Q>|1QQkgESQ?(C"8 CZ|E!{$@db4JBD32{$.vKQ_9Df^ѨJ[>)Fǖ Ѿf..4myE5mQp%~FޘB%m6B^"-?Ap/, ټ-waLfي7!]wf~ 'njpp%n5-pv`d_L:`Kcqti >R"*Y&\dPe >bVrV=q3|00IiQC<΃$|I_Қjls2z QAf8Y#< *[wXTZ2QY3trtl $] G6wmqU¬(4!9K"Nf!3H`@-DbH.8Q1:5^N^͞ˍG|-CO$D_%u|vxXR[}N}ԃlpIB˛k"#Zؙ-<4vG;s꾷bO%;tEsm# fƞ;[bH^2"鐖me#gK{Vgs]4 $㽢h Jqͱm x\s0iW$(K\(6i(VCgYNw$b K$r{!iпl49J j?+@6cJqz!䬰ό<@bKz]hOi&x9nj-Ўxi!\QGl<"3rj7[Εj=sa.|~N;`NXis8&'$O{ / П#'x ҫ4eLz Br[8䭄M4.:V$$۳C}H6AzPd7)Eg?F9`4mfAL!yO"2\3lEH +v ǀ\5.,d-2?6ѿUwq4pٱeê .ΌMUfP;bR{Dr mui:p>5ꇘu8<{f9MbYMi鸁:Lg.P]tj7thb[~G-vE6t7)He+ZK|B Ұ4vA[CA.%hgI2 )S-3`6}K*-#b c=цM8T~vb T*9g z} fq">wi9rpT1TDG PVHTK7O2 WDm)Kl~\$ĨesLeŕ.E=򤜋\'␝1PL'm!C(~>|z-LM:VtXs<|xg.pMЏQ~Ar4A/}p?i:h!hj$v]PF}OhN&a(pny{KE3^-ؘluɚ]Zb'Kgü( .QRj{~:S#&5Z6dy ߲wټT!C| ܭmEZ,aG 'p$vADj$B9[]g2BYϣk щڦ٘",h"QR]m{,ZՊn}Mn&s^w. "㼎giL6܌z%ѯ5-an0S* 2Zqq۩ ࣑GijHdN*]oPpPU LwGee7B E`vX pT1#s?J1N;Fz0 KJÅ>t| F[4|)?b 0tIfechP -)t0ҭA GEpl>ᙠ_$r(xЧwDc:x^F \G !]]y1)_[qC1cݙ' {YM5vnk5* ,2HMp?*E-<(BZ0^auR@1Ub%ǍBPcad@}/2a[]Ҝ\^$+) k{DJ!>֬Iy&QBL_i}3*) LdPlW?1pvygKǪs QŰ(\d*?.?rqUG p̩p-0Tر*$ctvNvJ0"U(PRRP` 1Ag3m7%.AGW Xx`S'#_B&*:PB^tN%h2?AH}}PɋWM,ɍS[ZHݿ:ϲ(*;bk?c8B8>-oor:wf@Q ArDbH]bOI\yz[neUx'd͐3&6P5r(`nf(OM6 _ IPS>L+1<B;8Y)pl~Jn~ =3HBoH>4z3+@j`-s1-s$v0ЧN:sAfUqhuN! j *1 Ylě2J~ #A?Z&!x-D{2asގF"uv U9&< 1§:M.:]!MFN Wjh6 6O^7;~UWwWm'U=>PdIx~>k\;U{ڬZqtz؀ {n[%84_4OqhCI)&ެF E}}Ϊl7jgզ:=kyA%X1mzU=S/{N %}*%gbZ|1f iPۺ\)@ROr"9~+ulfr]'HBh]~aN:VȢ%Dlldw*<_vH ÇhNپ6Ud:糣d{ ,u;AJ?;;&cQZ@pܦ@'At5CC;_!Tpj"5U"T~>Ђ"o"?K61taA.W)y>?ktu:,kzڙ zr-o]{D`&\6apkDob1bf\Y8MP7{(TGP탣GmᏭh SbNvcjl"[o3c,{#k/jc`(09Sʈ;0TDcx-vbrmfw"FcGѤ%֩W7@oojhPgϋFXu7Wu[)ynC$y66:3vn36^߇JT wYmr-v<9}9Z~EݻӓV-[x{U&ABeP|0tt!:ƲdYP]8}uIy1o Ő\q\MF13V[ĢP%vݠEj A#&\Yi?3bi~v#I6rEs~>0A)bR/Vl d%&DPy xhwnE@1ZPX6)v(s[]@5_t$owJ}47Fxlj4Q[3:+6R7ꂸvzS:qTDn*&GI:Fde\Ao:!ZF\yzr CwPXZu7 CSNR5,D( ޏvRk/Wz V}r5 nаGM:ULfGFչ a=7Vm]ӒdLcߗ[yhQ^36\X[q:=3B$^({iWJʋ$FPz1٩҂|M6'ϧQ8=R˞U< 8Wh!wm kL@`?bB&eAӎb[rd(?xiwyyܺSOw0 &b,Ta̛}8Jw'aȣx;^j 5ņxyFT}=㰑>ˍsͩ|jcs;OxO%~ $KZ1-K1;K2EJm:ZOqj׸ +ZE9G W{aZiNn,^ۮHV~DmM~&!()8CGpfHzyKýʚ+'!IZx'ޭtN?{( x:I}?޾/a!\蓟/ABSz ObZmBQ.Ȳ躋i.\xfVvZv&Em_RiO#x;ES0[6;s)\WoqDgdsRydsާ\ _hjGQ|&=?RTCBBC~PoF0KR~̡>l,;" LOPw![I+! -М/1%A@+00T ކ\4d9C C&YZm*|~h!VGMț^zNm)30ciy 4n7aZ?|Y79|;qO<>쐝EƠiFKm.bV>Kt2S,fi zZӡ-zcz5/?f9^y`ci!B9U Gpcn4KuMǷld`}DeɁ22^8׆mZ TgSjTliNĚU2R& .HE(XZLE&I2J:sN;sGN9Sb&Df9 nWВޯ{+KR4*H k80U HF(%?'v(.BQ/QWGCRchS. KNy`@q)C͍ulqP0NJĖtv.j0W8nIn܏ldCcz~hiaAVHFXG4#YdKՑGCJ;S#Fx,)x&$mũv1qO)5aoW^$1wr\[,Mmy׈F\%| 4X8`&C$v+g-=ophnR}ݔb=iHaip;c֔E.h-2NG\Z)S]E*ꒄH]v/^岪K;5Ui[L0jvGX1A- Zp1 J1%$,D}+B&KE;l^?p1 K2LqBL=xѶiY %* t֟I#jf Kl6Q>`FD2M; Hh٤k%Ȩ^ZYAC˜nr{|w0&5VUSrIme=W, ]<-*r315હt=nzol45DZ}M:"fJ`&bً!o*"T{~=w췕q,qAj#GX *5OGb%'b<>{]hW,F"FJq\z8L]s﫮ɳ1o1{vV;6V2-Fg2Q4gj}v1,ItV9Py9'\zUmh S@}y1妟gC_ |#N^L={trpvx3'!>)|<;Xn.޿JWq6~pJG:bVRDT$!!\rJ2[[zF3@F!HRTT'w6݉8{^tK^{G'nΡBk=/z ydJz,N(XolqDe"1%.R˜`+9gFdDsG m֬nZB!tșPުWH‘dq4[;DA(P?ePBfQĶê^ !aVyVk^ k1 ^ |fL4F o3_p6 |}WbglL' fN·E='ʓƤT6htM^,-LuCRmhqU}cY^TbX *}:wUjC ˠ I?8(@f9&RD66ZKJVPi9&΅lwHd1G yQZN_4^v05TڿUOrxa?s'|!N(w&z~7GJj/Tk<_6tto הj^R7=7BW5T7hUpґoW!LgMGcqOo`s$\~},v'Ct`ǐ2˘)@xXn-g w6,W+x ̀=PJO9!F Uϓ<9o Zā4Jd6ifj3VjntCNm2d6gX6wR4rJ33YHXSko6bdDbBѴfo2x&p pO堭=IY/W4'xStgFR%R6͉yta\Mt\o|Aa*տ\:+"ljvԇVޒAn 6P7z)vq4L󋆺 H!P9v7_RV^+:7 ЮU/.A/{bf\vs9WHۜgLH)=[-@aED=ߐCW3G& }_B²& |Tg=/F!^(0'ixُpZ[%2cjce&"=leH~~Pun58dUDx1/ 'MakG(ޔ/&CDrTߦub/B;葵+<Y06vtE;&=Pސ"]PWKlψ!Fi*k*Zp\ϺrlX[OT(S^X3B汻CJmi{/]O"9gc@6%s{>hx{0"T㐰vst<6\&ZP%ez7 yC.>2)(" cz,qq$|8;.]o03DȥUn;ArG0ѽ7,Qh[-h\yy9fF!j!&r+u07:O2r%mrؓ;OMCpClQ,1'm8HSs8rLkΪ0YiKQ M=fxћ}ALŁ݉%lUQihZ~ &?K?wv?3>mcu ^ӱZ^m5x9]8o/z&QFC[-mIeA=]~6x . vH]~l~O簖zl!"Fk0l1r5OlSkE~xlio [?4U^C%=;>Q]k2Kn~sim [JmJvlf*_T {Ym'OPvYY_Α7y]w<ҡ&dakx7AGùQZL.`J(3apN ,6^/u~v766(06uK\沕QHJ^=WaP?qen̴UL}ID5 `fFAZATFI>6ʍrF`6=xtcg/yZ3Z.| CoFު<ڂAMbaY O~Ŝ 1(K bǕ-NDi~wWaXI+S-mc]nar\hu",M2e~ieّ"@SyJ$bKQ*%7: qOZm߆O]2e֨C8R'RF~^/D/}N/dp|͛F&`8jPi8k5EkHM(ƛqE 5 pFpX$b?#č1󌒅I0T#6κڨ_/)h'+C#7N)|C -ΆؐIV_Á)em ۥOcS1OkGnQN$\B92=՛Ou\zx7(`u7VVdpȨǰw9'jMjQ)5[agر תJ@ߢN&>'S RHC) ShP2㰦sa !,xw2|Wl 8X4OL=A+8zw w5&krݱꨏ0MeC9ut'QOX,|NC Fbx·ďiƊ!ތoGzR|-uFgz⬖94i0W㌪-,NPizL& &_Gdڇ} =EV I ^ʳ-%ipt=GE$Px|Ў /YOkYanڪ[c9놵_q³0_ʪM9d"ͮ8%s*GLHRtK=rS{Yj(nqsc=0vZ믿ߪe*cQ6A;!Hլޢyo 7嬌j |~ek~cM7iwVHԗv>42\@qBc  &~4[F'2(>5Lr+^.s! 3_U71MӸRWTFݦ/CH] d92M^Ub+}El:DxB zq8cZcOS_TY"썧jo`ɢ0hHO.d_F8 ,bcDhB*pI'(1|)uf5Fh"f?;0Dym]z: Ry;{*Bp]5S,:-seah<j8t)&B~K]WDwaPHP.RJil1p8Sm[8p!4xF&/{ZXFCir@΁dI1g\,eo)( A0[ p ʯYr)?5+__5j8r#@I撘yιwֲ/L3J[I @eQkeaxXVry)uQ13g@C/"̈́([IcXRb'4!NF` oHMe˘α݉R[etyXA+=]&; ϱljX^.F7`k Cc~֑O`KzFsx#fE(]bxƐt[}.hp \A7%7b Ɏ I%$S-lL œjس E^vd55(S,(ziܝ~(?_h(|F*Mm[L*MOO˸UߚZ+u{7*5_O1FhsFT"@q 7r\Џ9x[d7`.+ Fd5Vto C44O]Inh޿ `?\rDtO+Z'gntT8K1Lgy`%"|Sw9ac^UL<ǡdRpА)wne&#/,Ir`i A3J HHӇK#(O(|rvFa+(A6bHƽf F끄'lg?`(1P,M} ^3uWA1_9#,z$y 3}9Jj.0fekdp) ϖ}wrBC*'W>,"M_C@r/͑F!3[-55w/ .Ho ӵ)ElOg b^6QR~SϧLIZ!3I 1Mv(b]ŃKԝVmEVtUOWDv >nѪM!emtzVTa:< Z Z;fX#ȁ(}"O񟇳)e E QTitWUGQ~o=5UG *6?wG_`?Jg*(UA㍪J|To2ӶW֣PMHiRN\ 4w1=m?͘?Sj=={qWI'#^{?׽SghkQd_ W`TjŌw2G[[3>ˍթ6k0x]o<<:8&GJ~^=b;+Էp0|#5-o`TCʹ6Qqv̘ Q0) { ^`2-WXzB='tw+{[rhIM9^6Fs]>Fg|t_[?O|6X!z)JgDg$'ȷ:iU0_[Ub?-y?d`ǫpbO%ؓ)cObƁqPn׹6VǔߡH/ށRwaAU,;@%: ؼ٤FU[ZqrS pޟ̙bbn Qpr/YSRdNv8,8 .>1i(fIbDQ ڄ<>iwji} hQg( x{MVFh_Em(5*U _bM$I}g ^d?*^WM8I{$!]`"v`-]Q4ۘ,@e7D)?"Y5*y평^m?-I!CIIiFlUIH7y( *N6Ѳ@SpefZ?A}s߼<բY?gUp7څbJTZ,֬װ*U` M\n 3Km=Icj?RuaFl<%ӢbNN0'_-k+~xLP~eh?yӌ?yzodB'8lM7.\xtAr3js F3sk;j I{&NtF'fo!>2>J\4\nQ]2.RRs#` ثTd}29Ѱo`ÅՖ쫼޺{'yՓS#cY)Jx?'i15 2TTc*eB0PDمӲWG=$W:*(tN>WV CxÍRߴ #RuBv|BmJ䮡[/تdht4QC NI"8f&Ըar!C; +1 ˚pua쳞<X]#ߣVzÐ|I#trIvb]Ԣ2σa F"܈mb};U(V9a#e `| 2uNɻOЦjĚ==xk5[]Dfٺ:_A:Zrs‹aJ:ÙbYxLB#a9?0%~E _Q(ryhO4>pZni.<ЇĚigSLq'J8)Bj0s*'˂kG?<9|Ri^Ιu#'ZiHx=2ZQOnxkPR!\RҿIDA >#uvH!nhL.[;l!g&?BK DB>~vrk_M1H] hk )t@8&S,ۼHL.>^bW47yˈhrj.5F0^x`5EoXߣi91E5!um8anͨdž\y(Q?%& ' HF]F¦] E%٨&y7;xZ0fm}_^Hog6^.m#O]#>t.@Ptn $@,2͝6[fh=B.Ms͓+cHhptV9qtznsAɓJҏ1}DFt~Sd5Lwh-a4tcd[AqDA\oOG!yb>5‚ᨏҋs d%Kx.j,ABt⧘O ],reHs:cku$Nv#YI"K=[_2.'1@k'ԣT1I5Ҫ# Uۑ$,:sS91l6gԃnZSc4ŪX=w =_X\ZJ/1[3~ޠr~xpF~XDXK\-V=2&0[lWQm 20v5S81 /hM@cNB&CMOIi_r%49Fhbu嶹\J*YnG~K=r[۩@ p aˋ %_pRd G=J1xaA[l<| X>GGZm"DN@xbOZЅL'#IȏidPCB4K:q29){}2rC86;/?Cx _|o_4RT4/U|>R 2~K1Tq7w)j"M&盛)B`q#)16HD6B]IόfHRV:`rL&G}\#b(Ѓ!wm,(}Ε+Ɗ$G Lq: vE <iycg ,.84XZo7I} OBce߷^y½gǵWR|e3Mc?t?%;[ۏ=jg|NS>sa-7_CaO-i5FKؠ:ճIծ݆Z#cmP3?AΣdϗK".d}?Ɠ(*zsw2E 74 Eok-otZ:&gb6 %xP=80 l?g~tZJϛR~ߏwm~,М%U)zGUz9 m]+Y_y(]suC6ɼՁHړ .Hg2h'+4/LQD$,ǣg:bd1hlNFQHrYIRs ͐V{JٕDYG>VF dz(pp XRlkdr9gG44PvB?D0i$%fcahV`!P4s#rJ#F.yAqP%h'כ4M' (@KMaWټ? RYؽI$Rql_>$YcCp*qGlg= /@bo A_yHhUThܢ½)^ưtNK% faZTs_3=)/T#h<.%9EU(KQe\o4QW0=699 hj;'w=Uؼh MIa4?a,nZhI U%$ubKg?E[uaV LziBqJQn$ð1:XsD6~>Nh/aF1E0\r_04h{=3-`DNw2V.N%~,9}\{8"/Ou/0$6ȇxwo+F:r1Z;ҹKD$:r;}UN= nvslXrA($r)kN{`x(mgWB -SPY?]vt«Rj'@xT,MC$#,lq ǻْhIVR/h 3'ykӵ]U!)%obϳ5) 6Vޅ|Ry-yM`]8ZÚXBZJ}BMRNQ@anBnu^R;z-v~Fo*3|9oX9 Xu]3=;O #[#M grֺ0(},hq[Zcd9bb<3ƯC(lcDXc2od+ 5d8=?6NZm BK1ofb"DijZ! `|K6jᤫKɷx)ȵvtY~>=Wj qA WUZ_Axr #hC{fEL-a /;'o Y+?C OъY)?C͢\l%\w2x*Yr]Rϱy:X Dm՗5Ho_-N0¹)WUkܲh^TgL[}n`OqupaSvtj9KU޴ ,}Ϥ6anru']Z|]W=..Oop9W"(e`D :=hȞ{ fYhbl' *;PR ^h\-?ȀPK-;c3ܣ_x@=#tJ5Zzia :ܯ-V3*힣j6;mV `q]`ӬW0QMѮzf{DgoavrPWՏqP?.<*ażW7QA`: nK$6 w]Bw0(441~?x6OaTLBXB]@ -om&@k4 v@]8iR}ӏa#ދ i]J~+0dKzOH^8<*XxgYYap}fHw=X.Xx1G@YӽKZHŷ0aqT?11gw^IWY*?bbNIfBjVÇ8ż0ؒJrĞ1nӽtGbA*;.tY-I(PWË"tE_/ O^A0o'a2Eu~z[ѦBJPTZ'`:8 *6v 'q/ #v7 ٛ;*@,bOn#O%Mָ}8'ZN.*d*DpCKsdMPgaۧ1{)N7ߣU"㚌#K¾MᰃDDA*|sRR*fE2[ EvFf!UIKژoLӽ\TfVx <› wAq|W&Pػ c|'\Z_TuZj/xK@Dsy*^LrN.3 .98Z")qFz#q"zVI/}ҚdM9w{%C3Y×  N vw'}LOڻ %q7m;nO/oRsF&i0X.gpZ#0_v<]42K|$%Q~YTCW'1YU.s]c.kRP?|68 2R'.Gn[К%k Eۣ6VBwB}Pzp+]8F됯WT%m`p)4ͳcxhiyuMtwq'73),t/.aqƭN#b՘S^=dA_gƅ]G_q+?9VipDnc6PmS avc ;ߦŶ%,_XmVJ9"=dSϒcL4.OpIQ*$go.g@0x$}x)yy}{>ߔjVoqLM5c᝖tXbAH wV,&<ZNU@ N]m 7Ad$2Z)G^$x֡ZI- h<]ڲٹ5rЏ8Bjqtzبh5,ޓG QMmo ;y  qaif|~r+";ɶ`9|wCKje 2)o™H&O(3~C%GNO5k^k?vZρܔE9=|P]&7A3]~p1QzGYgkK2wi}/SBl[ȇE5geSWJW^cs{y2jǕ_-|24" Qƿ 9HCqTD(` qˤs%5 qv.Ps|~A;ʾ$̌\i_h+Irp_[5f#tuR[s}A8qNȦoX# Z][?zu,HyF>!}8$z3,6J#kU=LZUyV&I[6ȗ .%t#).  /JM madsݫ`J#/b_4 cebSl/Fү+Z0gRBO(DCI93s[yM FH =`4)W?8k*; Ҥ/XƐ? uZR=/(X=lt8JsjŠTo̅ F LV-RnV^]C+P4-]!^a8Nn Pñܳ˛z-7WZDNop(>ii ݧO= @⑄^g9z2}_?Xol*sG%1 Qe:' RE N BLQV!Rn+KiȽ4G:3}dvh,n{z$151ϧ]I}YW7t N0J8yݙ;ƺZ5A c ^.&{*X(_a,-:lsB|XMx"tq6O?8<{7'4b+oVi-Cgo` "^=5H.4n0hnדz .W@{MH8p p.tvvʥ<ˎWGFp236ܧ$zCa'mj"MCf` =SPz`*{얼symO) oGݫx$N'vf3+F|%Q 8O/V$#p085%Fo+ @pP*hڀ%N#̻`.r^Sy+qo^I3C1/yF4~Γ2ԸeBI'f 7b&,o4n%TDj8DGy.D'ōMZ.AESQpm$"& .C2v,Ggp]ɏyp!}hb^` 8rQ8\( V W8acWI򹫽1̀)1֍7'x/-]xL=vx^>[N~_9vD><3U8;Y<zJBGf(cOt*nxT^p9ΊA2LgQ-4x }OTR 5@,%J3J] M흍& 0hޘ mfׂCP0Ѻi `!PooXBQrPPh"Ʃa ^&l^Q6hE:3WZӲR.6cY,gRhf6J)|db<ǟⰄ 狢,` E'Am+Hmz- tZMI3\\džpq& RS:SUݾx?F?iи ]‹qЅYEGjP'$xs*WL" j~_UјD%Gi8;n 5CJ%56\j'7F&l[ʋ[u3iC `OJ~ WQ Nb ';#wj g@R# SLG4ezE =>?0]OW&>^?&OvNb_ (t(Eb2#h|1:7< O;2,3cœNLK9ލN(N{viI7{Rst#iV;_3 ސ} 5G҅D^M4w,=#aB<;Ocqr%Ha2%*w[dZh6 ^>SqjQ96NjC4ymbt[ F^qy!N$ m|'IFƁ-?`nFve7~ ~W'θO$|V3t&>a]bQ'M㱌Zc#O=ͦsW$5 #L7; 4Aq|#_CiD1nZ])"]\-YkKpǣm^Ar >Yg)Z[F;(܀߄nf!Q]i/-ш/%Lwff#ѓDP7nP͈)(TTGHĜB~B *YJtDw,CXkiDiuKdi{g3%{y~ d~4ߛc2-wS>?AwOeQ^X(eޮ(4g ,8tց?j՚6oJRz~u,V.p~=D4  *ٚmQꅵ '۴ׄ<B8Z?yĈ{'Ĵ.qs1fKyضxe{ҵ)467K9cqkk+gSF1tOzVL,]ZH@IQPconi R5ZQ9j4q2`&A5z$Pֻ ]qlfw:>;ByyiPcrX2 0~{̏+Xy|X,ѕxXm[0 E:  :X_ cb>2˸Su]i#[Qa f VeS ȷO{VQwZ5fE)?-5"?@Ƹks?ߍ iEmTqxԀ: aW^Qk[G[k|,t>߻eΣg|Zg[Zsk%7O2ES_|Z~Ay<9;iasa Zj;:ll"˚Zm@m u,#3:ެߤ2ƣ2$w=Ad&rݮ6W;գ>LxWW\#GZނ/WlyiǗv-OW?\$鿯ߟij ѫ;U{ڬZ(d< oVۍzǵó˒&I8l5P}R uTo^az|hco/NNUVFTgӓV]-iWU]?n+ B3'oM;UD$vFS=h46~KN^kWX:̨|WV[G_r$]vtB?#Z1/(lO>dA$S6-FM~Z'gZbO"ZI&FGTv{?*QT}T]@޾*_l/D@@} 5iO).y)V]X:w ê5oS\=e^s"hX}`RۍκpLQgs$^666LVYsA0C^NI/Zƪ|07iYSN"{8]->)AzߕtU Wc]p͵&W;`Fkk_1n6Cm{)ݻ}љ^ܐ2NYU}Z-5V"a|oDŽ.Y 2=zeL_ŸƞWq`&x5ZH/Yzy }nH 5J>Gquv )2/eiOt$N=:5D濘_fx: 0