#!/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=2f83f314efc0260265c9b7f9cff69437 # 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 Zd\{s8O8{ ea;3S%KLYr^E3Z}n|~e6{{wDFk/<?9x^ڕ?/^{/}L:I혱wi)DػXL^wf)6^EzQe}g4a1Ox|niL%iؐ١ g^Ȓh;J^h7lAf^dQL:"Az ϡ̎9[8ҔlGW N?d|? Da`o-ƶ+%,Z(ȅ0^=Jʄ0F6=$K+3:< Xb&ꮁ *` 7rS[-Z#vc\`P) '8FplC`y Z/M$Q  p &1PQg J9mtYPFIeBdGRgxƎ'>5Y}<$1O8a}2Qmv~C%K(L`Vl# qV\X02>ぎsnz 0AC*g4q\. }Y۴xÏ2/"TX B酎K8JA.fӜMv. 4Stfbٷ4&h:ώ us E聧uq3NJrKg4~+^%Zͦє{l'qY6NPIYN̪%S;\/(~6*;x ՏdJ}?0qjue_ #>`Pe|7Lp:ww΋v[`2:n>^ȋEL:?^ڛ{iJw5<늽4NxPWެx=W*ܲcg]nk*AMA_m[@ް-f8ɓ'K?X&fs^?:MXguPj3ZeFQ7 hدV0S/MXS`-=gIМcưJo}*HE- sB7#_aȘi2f Xw@ 8p1J·/(,4y-8֒.=m~{lB10Nj29G**G@dٮty.FUI^lpdȪ _u˜1: 4v!::!%(A ɜS_\.cпa\s%/RUvx w #p6 j愽-XgW~'8_VځA|T̐OZn]VoKVoعNtگn4ԠE,tXT#jK_yH0BTd;bT4eh}AUq .)b&yj&o+ om-3Q+?!8>7=a݃? v3U >wĘХAgvJG+K ct ȭ h6T%/ҺYr'~moA8°"/CTYأB1ܵ4 JHu+ N̩e_[Fߨ)Mu%'#i˚QEf$+B'k.IWKfT۾`܄NK 6)L()No 1 uֳ}X|9aI%y+K8jKBb㈿rU__u-ra T@J"D1a:!au6o(P S?x_XbU.tgO0X@^ Fb M) 7 s;nuxQdw H:̵% Z]gT# T<@H/QbP-L[5سgL!y˿ک-f+ L^v]Ʀ$;ٔ7&1.*<{rX-R`% Bn7!\ Z6\媏#lK 9J&ǘ)r$+~=?xsj2."2je]i$wf%Q]ŕKT;$wy+'F -#f\*"3Lf,1THO$b VBGk #Ez|翴L5N[y37zHA˩8+UfrzG<- z$*/gƶ@lNNliC<Ѹ3"rKnId:8=K")h^-k09NyL7q qdUH9Ku7DAPZC!k1fD#PLac ^+m 1Xvvsưg+d:rg2+R$&,pJ .xG1ditpf#TIKʛjB)ղ\GqiXM[9t;9r t]K%qjfʸ]2L9د` .][ض3羯xI" z严!Q{kAf!Es|kk_ohDp0%QL"T$Q gQ퉸{V%}]]6hK[ʞmOX$ijv~;,b}nlrKrkF~ -k^XJ@RnY0gtN+^e*g}JJkZ-4#\[X6Wi>L8%KM."`/2%i(ĊZsԙXLĪlwych_r `u0Q 06{)^9WD[9yqA)@ L̼Vyja(,|-ͷ&$"y 6AO ^ş`7r.:=shzcW>SnGte\XDhWF9b.mvisƜp(Cf@ T^1e P*Or [|m# Bl8ivUCupH ZBwol*M !nR0P'(p~4y@=2 3;K(bY*ՠ.")ึcz9KJdz/KKrNz*n\w+|kqx[z'plV*RUev+3B循غ;pGXܧnnW1hrVs[C m.-K9..!&IO<;hE1j nwő ~gKapO4"BG a.Oqxۨnʺn `>Kyvkb=tmfƆ`Ftu]8~Ya:irsHu-؂qʦL 6fMHSUIU a[QpmոM]va D1 . NJBÒo[ L@#5 Q.y{ 7x Ws _0R`;?Z)J{qU|mDI J3T.E-Fٶ3ۘwYɼK@RNݦ/7^4L/r mƃ~?1:,bcg,$vuHl=Ei1c}V=AxpeB$$]`>Bqd02^"kH"ufIx:d WysTI;T&FH@[ȭ}.Y;_jlM~UK _4c)Ej?mrk\Tx ]Ҽa"W@kvP12C," h W(uϷb,1# T$]?I*"cT5^j#JŘ;n6ۘ媋٤bP5Ec*zUz|}Έnz" 3aN\@X(kh,4Zc$ bTw fF,Z:ϲ瀊ӛO5݉`d{6&0H } Lh ?DWEяڒDtPUЌQ/P[wi 6d+ŖO?=(!y G0,=~_wW=I֥I.?;08g NѼS4g՗Ҿ'9 -$74֫ Vc'yEJ!ܳ#!7>4ωYzO҆ nƚ߶nEQ^_\^#";.Ę6`ɧop+yyrtA\VqR|r_{ɥRKZ*X*RJV*=TI)rRхvB9^ ׎tf<'ºu]!(LKhR8<:U/{Ng ʈf!|] ]LKc14K0m[\=rHԛpytAΜz^'HBhz i_NM~mZR;dGhL1 :0n:^VȢ%Dl!D4w2[ ߾S aإ&:G0/gVh^O/BsD՟*Ea.;JGɹ܌\_;EoW1pg=&:ƐR3B/vSs[%B-(&bO&Ɛ?.ܶ >űJ8%O΋ӗ#RuZ)~䖖 w%8oۤA:Y5&Hf{hYvp[ EG*'tiMblW!|SI1,تZrw@2;'n#-#!fvQ o5N0=aTC iɘ:g~/=܀Zr8bxrw!ڠR& OH5k bOx1&l*Fd\=z Y"5X>- ;J:"+GKvɡIѸ>c|b=:\NGh[k'@QGlz#a 5tԱٳfGcoƂab>%U]VJƺ} 2 :-a9j3g!6kz6뵶kg6|ʱev3a\ [W8<ޫonh݇?Z+<Ƥ~IsC"[o3c,{#>h/jc`(09SieĝZv*vPӉ _NBXu[NP1Aی,Nv S98Fhzz{\.y`n-F&dd[L/t'ɋ1e=]vn36^?JT wYl--ةONn-{+Z:9n5޲g_e,T5!j``jζ4AXLQOgAFCv]RG}^L5` R$'d9;cP "*Ѵ/:WGHlX 4pHZJsK;=#I`ڸ-GP/:SQ "f.bŦK]a2A ay'Fhr !k") An"#HbUjSc/zߝpjoԯa!Dc ]{A黰sap·-8l :>(/:d2>g6&tnPcRXeMK*:2}_naEy9FjsaMo5脚K߬Ā'x@{|SĆI{@1:x?PR^$Oo{#:^Lvj CM jFiBNf)ǐ˞Unyfqt/B6AܧW ~ؗŌL L `d(xi<# /SO0 &b(Va̛}8J;ǓJ|Rgx;^.j _Ia󌨖U: 8FjP|.75ϕqV><-^ 'YӲ$S,-ߕXB Amar=w|EuPAT4HULvd GZzm~#Q^[Xiɦ:2LBQSp1Paf{+'n ']K#kIv&oʶnschkաL|%eW/gKuP?3''!ݶT^c!Ψz^躋i.\xfVI;-;"/4ŏ'"TtO 9RK8"39z^84Q߱ &Accm^P3P$[Ţ6aoᒔ0shO6   ?>>S6T6EVRJHAKh ?RIIH* pWDCC10hh婈ߪGPg pD qòQZ[:WcipS *PڹjBN? zk0|~[7Ktw0x}!;5 ].Ŭ|MeX͜Szsg\BSYNa!`p^> lz,}gH✊*ꆣpcn4KuM7ld`xɡ7*KA۴s7^i3F/ĩ*WӜ5d9L\&@ M@+ Ϲpρ{]s2kL:Llo4),~\,rN^ H@Y \ÁQ2H$AB%d5B-9Cq)7z: C۝r!lY"t +Mq:6ϥhn [eÌae=Vm%Ԧ[&x܄-pqPt Lr~d&SЛ$.EHی B5rF7: %"\h?R('pޙ1B͌gMVjRvej&L0bojcuF7 * ShKƹ 6"->k?}}xގCsk؜릌_aLGDXE MӄS3fMYTꢏݲ\@.B/|U{="eHex@]郑Nҫ\Vui7{uU~[-P&5QݣN_leql-GZ ֏#J1%$,D}+B&KE;ټ0beBÙ{m;ӲaKT@»?G͠c7l,+VI}Č>$e.ýwjIѽTgZ;v Fxiec a;;c)-JB}0&5UN+ڝ2_ /4:t򨾧WPĪӊSؓGP,ItV9Py9'XzUkh ۳s|y>妟'?F;>{&x%f8y`ٛ`4ZȥKNh!=̓k} @%5q5Rz\^ޛmL=$!>)|<;\+^C826)!  _R/K"yMzӐy.9%-f= f)EQ;1 QyՕ&<JLWja/.'0h Ej& `x yHŭ8"@19dB6,EeJ -m:@v)Yi(-n*B[$䱝)J(,1Lu2jIpb]!i8?{7-uQbd`7oE2:ľ ɭm+bsՍ0<)=D3{ H'w"EO> w=&nwPf}_9p}rc h<ݍVacp!; U@>;S X+tAw-IˋItZ 39!߹'#]9BDžmdSdI1_~AwW"`Z0s4sArcyl&p pb!uaF[LǦѮI!|, :mVm?^tp%xEE/=ǣ7s ߶J=~<2%l=(XoEb\KMK cB},rȈ1d҅YaZB!tPިWH•dq4[;DA(P?e?2rS['X)`kU'mc)z% Zj:kmkZLt)h%YD&I#S7r3_p6 |}WbglL'fN·E='ʓƤT6htM\,-LuCRUZz Zavz>~B,b<d/Ov``P"i=D G.k8 VǒU+hڽp~Isa?4ϓ=6g2|N D_FGƂľH3Nÿ#qlqeiB[Qka҆..lfo|bc <63v(;6i0ahoGcs :.3Hh%}V豈3ta=3a j/XEp1(uB ]I0 v]fATS~Mu ŷ'xy 9O$3eRK)M9q84nQݝ٠Xc򉈱;ō@3vwᡙOi רI4Iǔ3kr'/L"-%;ny?K>q95ځOê>({p4nOvߩ^x-|w1 !?:a!WqKߵՍx__r(*|W`Y?ZbCfRiT9|X[A?$2֘@ɨr?5X:U9yT]`=[g<N"^LÉRn_!%=9nP+VJt3Ĉ[Ŝ f>-G=ڮm7k]]qgYc]JXoN-&$ DH1*֎u7ɠyB!k{|x|Pi? FD=gb l2e{ovQ w; IP͞rl[s\w(X4_:Zyi6w;kfP*4 1~?J{zUb~y3;\v2_`=n}']kWv{#9CEtWs 7m?$|&*]U ' 8r8,^OQprcQ} IOmW &7GbouIb7֞?_ヱMRtiuK9<@Uq+}(c#94<9ԔAU[It.󗥆_er㡊0͇|#Tf%؝ Z:dwkn|FE?@dE;:*^3 gG֒6[q0%@%N77m:Bٓ&_4C♊OѝJYk~JLvkĨI C hFc`[a2y}QZJ#[ԭ%5@aAn 6P0 SMIcοi @ /8kPkEMkcˋeuM=qUGd{[KK9ɚyRz: "C,2֯Ka+u%zX|aaYt*3/$qh(4Gf1It9ֱRSlaa U3@dsj'#q - Bcc7w;Tُ;8k+IE6UšA9KYBuC7zMTXpν~:o=[WHRa̓ȡk[NҬL K֐Jc abQxIKzAůk<쨼 T\<$w`6/>D<_mqs<~Sd]$!y&{cHGWr#қ04_vvMJ|N` 88snw>u8.13DHι=CPgLJ"`JfӘ{Im!r۽EڣIħ/`07'45 Q 6g^XQEq92ؕ+i3?$W|jNo"-;"-1#{-  c 58*|edqb1yɢ"10G0/zo3)8;5s AuTu9MsWէOV?_w2et^u:Vcbxi, ^-<pcV42ZliH* cROapnKDegUv~:=;\Meg#&/1Zvb)}b6YtGyv*㏫ϒ[5t{KO⎞&;ta-[f%XYy{ ޝ* ;UXl 1a20f1__#]hmVs}FG )YVǭ=?p PjmM5ELLǽ9AA/%3'ju`J(3aHO)qǜO -6`,Z !mTVWK=DCf ԱDx>Rs@0 !#bC$ F5C'`8c1s9 Y"J%s׽>41'SG^'"u%vnH`?EQs}L8\JtBfp?* Cc`U==t\MoTӐU4P`i Af{tMfe$ tvJO_@y4FncHԗf>42G{Sָvͱ15urc-G2$ o O S#Hk /+]E*}^Qi\+D*pCy~S!.UҊ!2|0@-}yl:D?aQAC`~>labP;'p|Q}i7>_ŒEɥ-А}; *ɾ&j8 ,bcgEhv*NzQbLzͬ, Lf(#OH95s !5j@ɟ+;`^Cjj2XZt3ʢ44N98LeNDӭC uM_ܡCb"NHU*M=LtLOan˵#zh244y l-FOPN u9Ҕ]BC7 FXLY,7է0 ilOIL@&<`~? R[n~3U /[*!QVrCA4#eyBXWꐑD~P} \3@+2t/x)Ս hTT'\qfܩ{X-910I "*+ha2~FPEVh(G$'(ԇ϶*eFjnFGitgI.LuNrwgʃ'tQp) U۶tuۥV/GݘźEW+37*]P1V|Cz:#BG 2<.GDi.H[0asdj#2ZrB\m) }$lj%1 I+x$򧃀2`:#xaus]zaSoElN儍هjy|$jiZْHWC8"LȫH8_X!.?:UJf(5 #1NN,f< w/u ⾢Um`|ZGlg?ɞ H4Xִ,M ~ \3"uGc4rgX-tT?m[%5R8j@2v2M}wr~_Q}h& U9PJHM'[&Ɠ-zc\Eŕ7ޠ ̺R-\IF< "w!JQd #-]+:}&т!|Xf%/.wZSv[o`Zљ'3?m`m =݇/k%VN5xfLę ؞cI"w)R]og#zJYCuQ>Kg&H(C4?T}j=3ߞWʪ u䯍?F|ӿ3~RO5kիQ>wVxxAi+zut|R!;>Z]LOk2d{::esz=ſݭ'~Oj=mzr=mg5Znve%ںA!-6yĨjE '{~6d׵߯_nԮN f#3U19VZQsO-dI@HQ؛׶Yl նM :q$#oi%{7xh? /蹫.||=pOXo}z<*5'lj!X[Hσ;BZ"bzAn *O`\2b[+A'h30(}PXw,%I/2 Y^gh; ʢX:O ~/qslv6pC\}k`z9H 0X6XGtt$>)D7o.gd@]^$HgYp `$n/GˢS2qF=bJy48l8YۉvDA 3wUޓFF:qc&/]{~Z, XӨFхYAqG@"rt#7i16@VO3X벹zԁc,3. 0DF~<cQ}4ٍ}ciQP+9oHaDT;(? &S^юKny iAq%f g`{wtSS$aՂi3'CsND=S; MԂ^0_tDZqJU:> ;ߏ05X"XGAi:XrEbY\F*Guz]sCXAin8[de%Wj7Hs8zeɿۋ4 YP0 ?)%Kn>J>"%`iBEvĚ0lQutːBk64rpd▴e>'NjcE~~~khk;;U Y|x_̗ZG??"z5e=_z<>=12xRGm푨U-&ȵJuYKkMP\{p|I;#GCےq\L3;8 ?ӰH8Qw׭ "jY`$&Heub? 9H eɨס_! VQmV`^s\M@z!CٛV-/oC[")xOxa|r iZ>'q[=mE%iA|&êbČK.3Ay-cCg־>11-p#]VG1#6<,ԼS'm ]}ggC#2"{_V'xa٦d` l~&㣺b}.y-#5'z+ݍ0aiwsyJɷxӍ'gݵAo}Ӎ=8ϟawړ'W`xt3Ĉ0 yE&njq)Ih0d:Hbk%Q'ުUym ~WSr èNhcbЀZ6Tb7DbO702q+}<dmeƳ''Og^l5\X)bH!D::o)yŹ^ \㶖6?ٯV1_0A+g&6k+gJp|Y%*%Qoޅ3>ƣevEIffg+ Mam{Wà3DtX yX ςp󠷹|ej{}7z] P%#J'9rP}fyfO/,Eiue+o"v t VKb.bΌ䒁8 N1w2Qg x\&:T$a\# rC#%P8 eO cyx& U Ji%ۿk1_?+48ƹIH ]h4p"|ЧY=Kh#D ubd%Ly{FievicτwPώm^ZZ^])Cҋww!AU$ !~@CV[ZpEQhqAV}8>)lVCIp # Z;~^zY? %RLfnEЉ'&5 ],I k7fmuzC~!(V#Dv& +LD1d>~dk9/I@Na$q;|Ńա@BG#xE!H8j7Ka7~FJw%%j0ZMy평^=+IC hWxO5[5IJr}g]?HBDRK+]#26Z[ԤHۗ'ӀEJ_R(QdK}J5##OOm"N>'GWQBHtjUYN$)kӕynQ;02=jKF_0 ʗ4BZa%6S .JDa F<δjSr-;(_ gDgPGv)0&twEhWC.>wf@wM>qU@5Sz xyk96BZi0H,6cEKïҽ1&UC.X$e8ɧ]v nY:MJB.MsFk9S(c3!HC\K`6ۻyRɽU&#?/n:T.#"޳F6'7;Fֻ4Gd֒$w g'E%C!R& (5dpϤgbX6QvY|= BܝZLK4/^ӬRkXu-fKxqZs])`Љgkɪ0$iqԴEZKOw'~.<X#Bɴ q7'iʑP? ׆H>(D11#\pHt#bzWURBDcj)!1d^_B(TX8=?&NqKՕx߯9QN~D.{'-6Z.~םI[n Bwq:qծo(;-l?(^Stwsا*(?8(n5>_1/\yaV?O045g|(߾aK>MPtN &ӈt1 gb6 +%xP3 l?g~xZJヽ/R~C~i']?hN* 3~Oj7/ Av{W^۵_;(P{ J$F'B"akjO6PP\Qq8"?m&‹GiGIl#ƃ ^SdaT?7.KMGa8 I`%שd]Ywb=q6j S'@)cXBOy2R0dp 8=uGD3+nQ\3Ӏ$2>&$W$=B5#rJ}DZ?Hx8r6coKAոia*<-WU y$%Z_UYؽIRqm]fgŏ5ǩ Ceg(`  B> g5W$aLtlϹ-d7p!OiQ#_IyQ4G+7QД$J/no7D% TT/Ro4QQ0m69>ڭ:THf +_K@ݔ@#XFO)aqIROff]c&ֶŅ.HaF$k{[2bΡ99 Jp:hFjRl< s{8;|/L Ѷӝ; [63N%~,s\{8"/Ot/08J Ð7;Jo=#s֎tR6QȢrz-zka K.1GDCΗciuq }0 ,STYw5L «Rj'PI{*l h1K\ ?VΖ`EKbJ~AC_p⮚WxꖪP{Y^Jm+ڻr޿OJ_R okN`I Ӛ/}}5VRJ}8Qkg3k"SDV{0XX=+3[*J >yIn7/"v*wGVyG뢳80(},hqMZ{۬-k3`I7Mx :wтj{{v:fdLwAN @ϕX=),SBu:ǩb<)2#Vܥis:[qݺJ$,Ao~CVBSE}:9{Vc8:):Io-mO9 '5ѷ^xe|"k#SJcz\tAU>gPyOxVp-i0JMv Tcoc"DZ\l2RZ8Rma!$^k ҮpKL_=żu11ZIX7_0Z_Agxr#hC{fELmi1u*LJW 5OmDQKK %tB-dACۘh7nQrE *@Ps}Q0!>K{%l`Ii ëaA , 4Kz9 C;3ܶ.N!9~BG]:hѢ?z o_G/aֻa}cb(/N[ ^m&U,|`l::=8 ȖhQZm~Jt`K*mq[%Nw4{x/ai!;^OOJ+%<=0[C^-_ ϋxӕۓm}ax ڵ|}4ZXLգGplE %,~Riaϟ&0Lڑ6^6$FGBObh=AG~Bs^m(&TRohsNsΉDe@YewtΠ!4Gr ;l`H|$0AKŸtoZLM $$UR4`z1m1*x%YZ!tq5efeZq,\1~Ǩ?b6Y2S'\Z_TuZj/B<OlR0'Sf9K<.W=SS )8 yCkP$%N(@o7hGӚdMy^x%C3Y×  N tWf궰xFP G? aSE Mcv|E>ypg#3B-7I;Kw--%;m?wKC-wP^s3.  %xВ(eLH*lILb.Ǡ5IDb+)(d]GN-hB% J-MF[31X>^QEÙҦoXpteͳcKØ *`D[g9 H9EOn,wNV/oY"ꋋ5g c9R+vki Uq]3r0;h… Ey%Mo8(0.l Ә$#ܲl#ط1ƛB61ñv2AIm9RR]Xfw sP1DzȌ':&$4j)K)S GqGcD{ilJ(r4aL*ЉeXCמ7:[oqLM5cݖtXbXŋ2h]3VY8)0:v]/\|hyYbw`|Yj*n&,&tY&j 4bSlªv'zVS͂Nٟ&DaCTESۂ B?Hl\Xp+_zÊȉܝd[`9|wCKje%ۤx gB"< %rz"|@X ϝ37eђ?S}&7A3]~p1Qz) ϲx)H}ʥgO*WmN>,+UoĶz\T@Ex56']F_1dfbD䱣Q*LSX'qIg\@f;Q{Aˤs%5 qv.Psl~A; oe# 3ĤDnA:Wc1JY8+?^IxKNU㉐Qyew;~V*&9N+juAҙ)&@cqwC>@hE FzRn_= Q|i $؄ רj vw1ahǮ?̰X &TKK+岼[gm6q'1Nv2fɵ%[S7{`%Hprz  J'dL(2L7>ZJynQ4dflL1O Iv%t)^N$EXFy.9U-y|,#",u/8hڝwI`)D5h>RW M6NVqlgs@Ó/B`ef-IC-|%](䫆H,t\)Hy8q C7gf9BTj ,-r+@P["q6Ikp/N4)4Id18NdA%:4[uZL4`f!Yx5$8 T| sKpOU1. `tIIW8#|̪rMOz2W}%rËkKW|}t|X?tdzB\]瑅ۏVqu } nf0㓅IjC yX.J`3E:|嶵׍4ّv }R0M*0,soW1I-?;cn?CJO ::T"%v8ﲶdf?;\O`7| ] @D'ōMZ.AESQpm$"& .B2v,Ggp]ɏyp!}hb^ 0KwB9(MӷgI]ww W8acWI}'c>' Sb6,9NY_KA=V_ OrzϱV`.Tō ,5WY?H),~/ظ`ܽyUEC)xF  dD3!bsƽtvqǵ8LnCC0Xw,!(rPҧ(DS7(+=++ LټZgy9ym=?,P "+-iR>6cY,gRh5!` {0aKpqq8P<1¡(5}DoN>IA(*Ss=cDH^:6GmF~L) X[cMͥ6~T}rc$a&Eo[Kw]d$LP<-ؓB>F1UaFA;ȝ§'\R# SLGh2="9IW&}|Ix[k? ,c`"Bm4>}D_f' \1 I'rNtB_u's BٴKRI=9h¯f>#B"&;ў˰l!AyڝxpD3 L"eL\MSl(NEa^֏U ׋J۸sQ3wժނ>cq^4څuJ('8dJU&};j60xLũFi8m9kn0ժsɻ5fh׋%Hhl<)}L52onqqtc4C/۾?c:v}4 Q?:3y0deM=i?e;^ybl6" awfJ Ҏ68NtSՕ"ŵС]0`};_Nxz/} CPhN x;Z{F{(܀g!QvZ_J*u͐Gƣ'532bo(ݠS:Q(F@F)' n99DGt(~k+ꟷ_'a_"Kd=۟!/No'޴xfɓ|5n/+ P؝ȼs V1iϨܒHgq<=<;=m6NHC5_*Iiq?0V p~;=Do4  *m㠱[?j = 'T]skBM,77[Zb%ϧCrER-^=nƞtm ff{)4z0N3yͶwM7v%lJ(gf3]BfӬ5vz=%7;W۸evUp,طSY*og Ltsqa~Lbg+cp0.6h44׾ebFUqQ^\l" $0)I)c2BC8,@͠{ڒCŒTB\^GTvhg7>&mÇ-˲-adj{o;0,Gamocy/Y<(0-&hy@FO`эB/H$ϱw;Kؖi>n~Ee{q^ª|*iJ^7vvAbYAO/1bt5.} ϔVlemH,4llDŽ*m#~hy4򫕍ռzyP+eњagqX߈ON_޵Ý<|Ӱ h;|nAy<>=iaea Zj;n|uvNߞ4 Y8v*^eIA m4m(>.QɊx_֛gE~G=7GqکZ==5iUW8FK|*0U_׏ڪ z'NU8Q*TndJN뤾ۀ&uQ$y ګ" li~@nh8NhN[u^]ΡX3(BVVqԮ7lVY{G8a:3;lׂ޼&,X +vA8+;WuTyxY?ڭclMU/¶5ZXA]Q^Oi]02ܨ}h[Uc_^7pRB!džn,<]\.zPH"w^JW$nZ7!N:ePsdMe|GEPeN(ĭ{byu@1@\P911G&qФCU@0hZX' h%_@ݝ];\wD N;PBWs<ڙP{hl>ËVdjrɽ`q5F9[9š̢isW+hu,ک9MѻuLK2T>BJż`{h`f!Dhg(\RPVu>" ܽxtg^}ux^߉p[ }`!EU.b|]E CLB y' y*Hd).mǗ1J\ō.Y̐ 2=< ۛ+c8fՀ0F.!d[\vCZr9xyPɨ["%9@_FDW66@7y:$%)3MxAy<|>y<|>y<|>y<|>y<|>W0X