#!/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=fe4ab52cea714f77f409f1194a6b3d83 # 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 ` ϫ+֍WOIKY[gV |Ϭ(!&8 @K=~ $yւ b"^'3NoA%Ol'K`Az,c?3ZOAr>!R0hfq8I9isM,4I=zL cQ3@!|]bo(Xtz'{ ф}hEzɣӛvH–^ʓ E.y0Th<و<)R#` RiM9*03M8L bA9 Kx>J(-cbgd05@KP"hBHV{m9^ d<ﬞc`dm]]zÌA\ۺC,12y;MaCY7m \tt5j0@Cp@wؠ'%15|5.~/-w]mcaVw7l6ۣc2dg9ݾaݘVe;s27y4F 4.&.F,SqFfׂG :0d=Ƹk/J;$/rǮɮI1wVt~`CB;&3\$ 3狱ckxZA6=H4`r< ä3Q ڄ6J$f(\- H* ̫ue&{1m- q. 7rS̺dF+pPRjC^+)TA4 ), V8 "a؍yVK2V쳷Uk[#ѯj8pkg:.(H0^@Tٱ6V2_DEs_vY7o)'ǐ=ҟe㿋n?S`sVrpۭ|>PQه"iP@~̓sV#J^(GkcS<f*YIYQEylvԓU*G|dlLnN& *11DRӧwYPGhd|?B&/CF/oҡɍi8dWn'։ѲI 8!k$ kͰJ4o]sb7HB #@U++?ǣVl5 c{k؝;sҵMVZ68 9(X@~=e`}/J#.mD>1*cNAQ@gg'N|&gWH> P6+(Ԑ,uqs,\V$ .BhPtzI DL'~-:v:┕Y,rੂœ o ";ȿx@0Ֆ4W|Dx0]H`S rۗo@F%WxU1}'2oDK5Zdۅ[WP*T~N\6K|e"s+;ȝJ?T@y/Xe+$')cgK>v@'(gF"&rIG2=4AR< XOYXD"h5i*yŅ F*ƺ äJxF(_%ZsWy+q0{ 'eju 3pY|1ΙQf@ тGP׆y/ƕsлlփE׏ `nbf/ -e(qo] LJX AOσ.5dpp =#ę*bkg1F#ͩkNȄV,W+8C&>#X{LHosS4ⵠbr{QўK)|2QvGMvYRԦ%Kʢ 'DJ3nc"(xpmDKo!n`2$ј! Q,Cͤ$ֲyC&eOǟy?/N;ǥN͟WTa֗;^M'V'u];MjExk߃z;֮+S݋S+;םw쨎OC!wt]:봷iu:~wJ0i*ɍX0b *`!a8kXqNnl}*Vm w_X)x~n{b6難kù>,^ ^EZMh/'\f/dv[}y;rw?t/d]`jQA ʰ VDyïT L앗zaw;`lYz\ rQ:>J!0UpU<|K>d? @8Bʶ0>31,hLt]^0>p~\[4 ownDbLtlLoIh;:‧wY[`N'gt @äw T8(\MlN8VO0uW(%:1l+3Vzې˔[X!hgA{W<LX9Вu;E=i5pPrjH) ZZ昆O&M4>kgeCJv Rao;7uΎUe!hJᠥtpаo'31Xx^gFxj[y9_ X Kn 0 8BxDGY'+:b^JIxFdEi-}' ?.^Xn+ laӋV=0V}s 0r;+gyjl﹗ʟP &-)Tn/umjSQݔ l y1BßH/T3{Wv!] m_.C'Rc2UI>3Hwp.SaIl0PfxԆD6p-7 '.,j8C z%B?;[w^k^f,w H&4 ڍO&](͒U/ouKSKٕE+3żuz'/O~&[RLogQPj1Z;p!=fDW>ai5%[3- L m)]d45lTS]V`-縍d-P[@1"/@ *Bx[\.;#{nHsrNvba$> 2+_"(  >z]*ҿ1-0`{T3@0 h!"~I#o=EU} (,F!(xիd7lh  F6b~kYGb)0NB](fB"^h@J0tC"nQ"ayjRѪ+m&z 9hQ_vrO*0y4,㭴RZ_8Js+HdSO6jPP@fz{ի7bW5xT;\&H}$-KN :N1x*2_Q Fd~:~x>`R^d Jw?m^!DKA3蝱w4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdq%8Qht^rh87Ό~xx<{[; ʲ{Hc}W? %0kĈ36Eɺ7aHmt(;+šę?#SdF%mD oğU$' Li5N XnEiϖ?Rf.TJäs <{_zP;ܭ7P3eWiOG!{b>7Œ>۟o 62B4kle.%gl.9f, %C,JJ7:gN]Rx CZ-ex)bj#j}9zm N"%ڕP ё{mxcyK=j=_حn:n⫥T5)5 9he`/1dYS/ F+crz&\LAvu[bY;A1-&I7}kjWQGzw?(\\K iϑ9;9858Pha[23?e[<`MX8+O;(M}+fLU.|C5Pn˭ mí +SVV!kA \v$)rLX/AA !); Xz1ngn#^nm;MRSᖒKq`] Ǩd 5_j  J;㏐WЄd7L-R*E'~'G)wC`ro&RP! @^m8Lj]1 uJi%)n+sIf9&IQbc,3YHmaK.һ]ClТVo")qEh1,8""y9㫦G^H]i}7FSiR&Sd,+H}%i5w.ܻ|zIo׽Ȍ qx[[~r->k:>"!Qk u :%L~jǭ ʂM!(-GkȥțO8B6 *or<>%ܮ1Js}}DI UW4Ftq侯~=$4 cWZދcUk mC``՜߁5t'o7_ |EfDR. t`EOIe.bΗwp "؄ r;Zg`^:hX;ܫSUGP]B"nmB>X8S;IO 5bSqfKp"\E^}dɌFkI[]ytXyEuIAzZW^0 $USo5ԪmN-51H~F'&m&֤ K#=P)@aVqT&OL(EwN^1Fq74Fpvmi1HcY_6:qRQUg,L ^BIaR)JGR;suNz р`jX G"D:.pg"3 wn3 [_`F6 Xy3 ]{fAOB#7T6I&U< Uv5KJw(gKL˜M }%22B\mGWゥLr4V 6:kCʤj%JyLۃ'4-N2dgN61x…=d~E# jC/uLvy&vHaIȱ+T,.Jl=tJ39 ] #>6oqSmۭQ:boʯ}[PS_& ↥5 6Ŵv{4nܟlpz:G^8 ,EI_@ռ+BqOm(;s_Y<*LaBt$[{ꯁe=)736bqec""Yd;7 OyBe? a]n?G5χ\aR J]K)< w*HLo YL=]bn=A,c,5Z D$5:ޫַC %dMM!=faE(m̛=gɸY]\}'O i_9i>^d07[Iủ&mUdM{6B NoW kTɍKBa7Hvs6_xɟQPZD5l)IlؕCT DtC8G)-ŕ-꿲ZJ*wX-n`P[G; ) sA?qv:kܫcb׊P~ͰhgGՏINQ[ܞAt%^"ԉ*pj 0m`@ױEb۳TCfq1֬:t<4"Z4ACO `4G;+cа6(})?iӂX_vUA7z81xU-'E2zW]*iy,X3 ?bI6*]V Iw0NJ&Rjk|bۤkrxV)q$^|hX?Mq>!ͩ49UIwq2f t$ӜNӿ73"ev 6`RGm=O]= QN9RoIhKJRʨ΃7=;QωV N+Is(e dԝ:=}JB U}sӬ MZ-XI{%u2tU{Фt!5: - ҙ-]D_0n) -Ҍ;hl睔қiTDDwݿoxWIO;[~bOwM7g _$ f=f(!r'Nb8aQ$McbG1E07nԇ=dU-b{WG|i۞?3?q&g9 $Ds胆B5+@Xݟ)O{IDlN>٘ΦBlABzTt/Nĕ_P؀#0p,L 1e N8rlkF]܊:#qr{yNp}.PR*^/.xJ9;¡慎4dL)HO & y @]pTIJx H{[O31xj1XHU_"vpRiMbזBS,eZoGqRIUPw_Of當QѬ=ی:گm[^ftyptX6,{BBz 1#W@, .]v>3KśqUVl2?%3txWZU|֏jgVq=:GT>2 ܦh~%{W:YWdw0 ׁ:Xc)nPS1sQ|m Ѥ;$C ;:kwLt{pӼ-yHWLҸG?mCc+/?{'oH"88Lгԃ}DD٦ZW[ƑG?eiKÿ́=1 >E a Yl~TZY&kG܏xNZիw>N4嶔h“bNiA۬ oN06Eu~ TDe *Tk)~L4/5zED Iv4nLճŸ7Diu4SoocK3}E%"oͽ}$p2AO!7o$&n"^Sp0 +WtR `ip`dOK}:}Ud0-B^ѥ ;t krHF5Pt3D1& C_dhzJw>ܒᇵ`:] fgMO4σt.ܭn c_{6S,xĜQ^Nل^Yv5'ӆp{eor]3# Ӓ _Y ?on jiieQJwxmݙ}1BZ.8=zО]B=s ܑnlQ/$xynY217C?3j \/xט'٪0O7A&L |ȭS4XicpmSr+!oH)N1\Q6L O9ch/CՈ`(aH B&a Dm FLjPtb 31uV|徥Nx{Lg}>gо+nJ*QzJtO\ ʩ9FW ` =̔=6ab]q$Nб!lD8=evU)9 C˜ QRxeB5㸭Pֹ,.![zUv[#8{TsG; c]~RjYQIuVڪ58e'ao4e:]#56Y80~6GգZ*J3.c!/pT{*&Xz, ^60B9j{S5h68J.2̨T>E~xUc?w%- b7CSje MZ?D2!K FKZOzcʰǶԶ~l6?۪3vSJh{CޥIׁ8!3昇% Dmc< ϦBv =eϘ*G`#R>+aS a#Ĭ쨨^w(PnLɪP?νM\nO}&?{jo0 uN~܅;JB `\`U}? n3WRS 2w U׎O&gMoX \Nw%EX2JWp֌蘺'gv!lZ 5$=~$,bxs9ڳnA!Ȼ0c 9S{?7X%tcxNcf[=옙0&/i,,DV&W6 w1 vfi$$ ]o/Z,:F 斯5)XTho8WqU FYY ]"=t(C2j3Q12:gBL  ~y+`:\&ZHd)X*>438=Z/(Xݩv؋ 9bHBm#fZ[\/f~N+P4,K]>Bt 7I"\D_iz vՆӸ%,,y9}VM#>ºa Se\XPE:S7붢>㶼9 Dc:ffiG~cI1\p ynN̘6/R.O^y?]61r#+G+c|\_2'݈1f5fT| 24e<9ory{YGmjJ2QQ'j"ڨQ =WP-;WY-SfdqP)ia Ʊ_ 6"o ؟ gջU ͨnX[M\mԶ6` OȼN3q81!9kU9&4~kM:iNCcZ<z6"Nn> Āb,xj[5YkT8Ɖy08 n!;V9 )7š~J eT蚭G+%58M>KKZduʻCK$!FpX`g Ԟ 䙲뛉 E; 'Xqoȕ{z+`gd}Mm0 T"6il"Eq|tkb$:wbq tC9cHR5!d4Y!(qW} qÃ@|{5j",j0n:^M$_T̢!Q(4fa%hn>gW U?%΃w *Xq= x2S\)Yk| - ԋxUZ(#3KgE 锡ܝ4J>%g*nqj1>''Ha׮z@boxMBKSA~@ kD m՝hqр?D?˅ݥ, hH?A')v{w `r"w3oUt@=գMe.AW)!VFEv͡$Y/ i)JA6=eKƉ2$n50 ya߾j(|PJ  -flsNZ(0u>' }LQq9wofVO%,$lL<4KbR)kް9 E>K%Q7)(\ dE`B7KmrɣSCvn/NyM*g/%Q6amQ{2nrGyN? ōMj.hw8>~Iqwimjs֣3Nxu>_ >RjRߞ) !5q/b8r&MӾmӴ ,GelA6~|#W_k0f}zV]xB=rd^>[r  c#M"MLC Ds4djy2W\tT^h9Όm 3)x=6wmD(]VCރP#SJ.|zB`} 'ZU#~=_@vg4Xv>LL0X7!R,wQ/λSBQIEpP05֗Sasf|qʥ,M@9rKP¿!'Rh3qz nu0uЅjuV- J8 }YeGb_s%p}ʓz8X-gB Nu5<$ifh1]4SThz6>xZJ Esc]v91x ݒp3}[9M#~L9'>#`[x[-ܥS+O, PԪbl b2"ԥp QtMu ضjp:*n _ڪ|"gư1nc8\!Ԅ6z*SUþx=@A?и[+AKtqi'|DVQ-#񲕗%| ^6Eh,3 E( $#~Kub$2щ%R}0$Kt]0aq|,JA~[ L?q.,&>z"HN`:]Op{ᯫVJ/|wOG=)l֏~?*~y/GU]rsbW;Nt#Hr^ā6F ?[ˠ\n˾* Ig܁+C[B::&u * $øSTW TG4s4FB4iAp&Šgt5E= %>x*u$oI/&+s%YK#@ hM#`u=u{Z*f@FEUU$ sOP0dlOE0*H:dB{b.6*n?X UTJXfJ 5|e])j9r mc(.ĜPXawtaZK\mf-.[x3i+ .Gp3x pB"ڿ'22q祺_F^ǒo6$5x&J#Pkv1)URm8/cܘ̓W%{JԀϜWqxT~LwW޻k5օ=Q'fRqG+}y.1v8/#ۘltq}{Iy TmGu٘ۺ_UlĴ4'ޠڹwJd{t[U*"r8Ma~8^ i~幪\cdRNKCӍ_Rj9[yi:*ɰK>%/es8]}daJ ݚ//1 KJj4Fmm3$f/k,ډ*i㛗>z_ j Ȇb."+"UY gv-6fԸ*5dV {c5ͤ7\-_m%7ӑ C:]t,fL0C '!F(_6EmtTc3<& a$@#<3a4ݽO.d :kȗCi^ϰnskl9N}U] "rDgC &HUĮhgf:H5KEҩ17-q;).;No2Iu Lۛ~' f}ASz;S1$9UȔ*gQ?arsbM))/nұ.jun5!\ɜ8_hmsCktθ]k0|qL1A Ħ8J`e uAA_`6>X NݱM{gQZn NWs3TQjp,"5160]YO<*|N9/Ed:6kZjbuovaT88(˱_N/&6k {@6`]}of~t5ۻ48=ycY|}cAxE<=Xт.SRP}^ : Ya쥽}G >qL6U˯;q4:'tbx#X*«t}Mg"Yn,ي/̡28]ӿGRM G>۵/G =jc!vMhȏ󣯑KDkDgf;0_K,Y!: :SNR{VLA)K-QU_p[4cշ54'h %[_$$*:&v?p:|Q m2u]"6f-/,4ؔP'x&kg. ?QF]yq5 :lH5R0, ۙaҒgQkû{[5@k+ up6]RI8WE9q$`n*F_[oCdrotؐE5FΑHy_"!kom3)"y".fGh.odIEHb_Uv/GL-I`Ow`{ `Rs:"r*IեYU$UH6 Ր0_u/D#c%Ҳc)$nRk&;0Z:>35Dj@+<8(D^Uj8şa= X0Ek(q.\vu.CIyEWޤgĂ]k"^wT&Ŧh/Ne`u;m72yIҡyd6 -N[pޠf 7ǰnzӛqM:;!A$|/~(d^)Wܡ*2)O]z1=I1^LFI{v8lC hngκvۼͧց&&:|ocqD0aؘb.Ķ!t#+dZL唂2jop@3 E jx*n1LLPŋH*3P(-W ZVh3Cm4J+Qaėw}ç6:_ ']lۍ MZ|OCH7$R{]NΒ BJcUŁ gD~τR@A6w—V=V`5W@ƔG 'Hc蝁ەjqӸ̤ SǓrf4:G;=d".s$6:̿Ӿac$} (`<'p]1;/ϳi dpy|e 3Wo#?[[F;KHQywx:߈3f,{cHץCMUZ׵%y[P}G0ܥ=sv!8Yɠ5oM` Q}}m ͶR۝1t* ' >tyX(KwKy 6ׇNg`"O.t#?C8>Eɯa䗘ŷ$K,ַ$ d, ѐ #Q-GeD YйS.\W@s< Mmunf=zo:h2aGcɒi&KN \*x1 4 Sf)-5k{|U2@Q|]q&6jlm,~[W1$JrTpd>J8>ٔDMy?X \6) М n֪̽zd\Ks&oo!)P2 gi",5d8' v599I|cPoSe_a%^{ Qr4)KzeLu EVPT~ п4{ݡ47z˪&boƪP;*ϯPcuX(/wZc-J1Q c![Qp=3U8& zCQ=8!+j>؏I?ƴmmfXrc4S͠ 4m85~nNE~`[k6jGs2dEyOM /,4xZ׭nXn/b{-ZYz lؤ>0Fԫ;;7ixѤdm]"Dn:*6|OWUꉇ\\pe~gtUe%䱬#sj)W3p_>A }bEP-Cjᦻd<ŽMt'GlhF^U V=) 4aJb|/}Jqײ̊ij..3r꒔M"tXٙ؄=Â?"S|aڻHYFӄmYL1 k(U 8Wm8qQyo",t㤆Dm e0TFiw(8+i7ZA+Kav:VyS+s sI/dHUU+42i~fkvqz8G;R ۆBpl!{ # P+\I a,B~ZR!&ѣ勇'Fe(\ۭ/5vX-M ^0uP(#9Cwvwx8;ՁiYC|QmSvZ@PkUCx߸=]o9C_MH+ nZ_@S\zɨ[m6յUDک3]MWkf{6_8@$Uw;}G_t.nyY7)nV,[.džx׬^g`9lϚy'ebAGs"U ֘.<2'l#f(Tѷ{xRZ[M\l:}TUN1":O ). {7i+ `XN43J p4ZA^$G1 Q7g/]cIhm|Qj"Bj[s7*wa֑@{-A0 [gfq7fBFPy#[37χ0=_eNUqbHxۢ ;1,8/@4}'^qy݉TKjh#Zfrzycm8R驤D%}Xcth (% ՍϢ& B$ dZb"3N@Z:l: Q뼃(ͅ<ǤOݗ~jkNB-#6H#81qSN8jǣ XmzyY׌̢O>N-qJDB[+Lm&_@{5vp?.3ATXy|T.Y#xN^< hk[jYZ7"wq ` 5vn,I4oMT:^JVNۆ9yNC< nI5mrrG'loR]bnʗNSVj/DXS" 1Ua:ڙuk>&9Sq Gv#tV`ʒʰdzG72ô0 ;! ҫ^TZlvDL@[g$(i`RGעaT<% /0M-Oy6Rr,c)dQ%*$;c4b&X4]" D:TF.=fM!&!\rܣ_"SoѪ5 ;s0 fH }Vu |^n,$N_,Gycx5-z9 &vj))V'Evx4&dT vV)|^eA>}iMbcҞ*WHmW)g)ލ0%}aw08Xe˱pk8AEs45 qMXvqi[ljMh1dx Fo[)N΁ d b /_($}Z ղq;\vuƀ4.!;2hĖX:%KhdN$A#%%:"wpP1)G-zHpv^E/kI'꪿MO֥8g Lzb\Y3@1jcP' %(j%LZ>դS}ɫRO~߸G0d. @KسD*vV{w}f|*C*8ʶ~_4 VqL@oJVyEp쟷[!qo|9{)^8"ufK}4SK>95_u£IB=C),㱄"*B?vV>Y@dAEbsKFйNN\G`R3%LePջs*-'8[zatcP#䑭bw2ِ {za0n/")8 yw%ո ۙh}PCxF*[Pv#]`+jw@y0h9Unc>G+T똜;/ C `ZPcRWFmvlg3=%|Sp_8Q;V*>OY:S#`Io & $U0ԇP$ԇ[&VH8Vi!DFA,97c BOxFn#Ig$!h (`zֹ ]8.Q>gi})sx]{ͣfckgYjÿhH[~;Ee=-;ؐ=f!,!*ˡk{oKCkso }{ZUA(&&VOdAɨEOgmB{Շ3a E-"눷io`@u2mn#PMXNЎRvB5/MWG8l7u: b =ErON Ty5fLL}B "Bz(԰WSNAB`DEhTIFƹ!訡{U21/XNί;c17 -򴜳$Ⱍfm!(~:|ye( 7R?4. ;ě뤓r<1hN~&h2RN Ґ m/}L\׊>@%7ܨKGfΎ=5EM B7-(f!jٕq$qbwi'. 4,\}]]܈`$N q AЊ!7af-^Ё0{:oة5M$Ʃ:GdD<Ǥ*DFl)}&m>3Lj;jŰa:$X9Dž=bY֨ 6E&@K 􀹊n}879\YĝKᴬyqnaLP=IJ-?J.h*(e{/pZZ9yĖΗ>^`pAJf;VCᄒ>  8+@K{KPFE8)SiiS![q!Ov8BJ[G]hCl2ـ.MPOI'rSg&rgV'0#4ȘycnT#-JꧧMmެP)cݽd2F/geIvQnuYHoP=#OxnGuF0r@rgdvuX{ly=%z7cJoyl`vh1(&d&@|1tPe6+*cM`4\kElֲ9ᩨwhL?$os(κmH|q1TΗ U#m%P ч͹Mn`n tYҲ^̑~|Q.ILaBjM1ڴ;dK w<%3N d< ۤ3"haY`tM]d$7\P3f)R\ꆛ 2ڴRڷ l@\Y DLjo+"2}6_u(;CI]t2dJ)3ZNbtMqY㭠J)7Z TRE3p37JڀwtFډ Ɋ}>7|mڵő6`6L`*0 e(pw6'T4n9ps:|f-%24(AhX< l5_fΎ *{ov{s/W)JqT嫿\̑>q6T3E* ;J.}~49R2w~WN!K%-ZPD&:H5 ͬ܋{#|(8N+ 2`Ճ滗zEeϼ~qIE=lk%/C ěj1Pl23;`Vm5T(9+UɊ2_;K fMg}5N$}/Th Wy{2!K~ GVtsv]$3ʊ Lr:(x*Wݫ2+ }xE]w}@ &p{f}$Xa%T9ǔBnf) 02#(w+UtaJD ҋO|v9 )a xIqrR#W J\s]LΩ aqưYro@I/CVuf62)H^-7Hr%igCpW6# 0㥞oltMV9Jm\^$xm[|P薀<<@2&!8E ǝA2 cD">JzK?V=_qBÀ{76C_Q#٣pa)S,?]rj6)dG28̕oF:6-,<^Gٔ:bYKPi*aȾ{Zme\̠4RB{Lƴ@T-bT} `ܛtE>N*N(f%ܜHKrnyUcIFkr#Tu=Dv\|U'ml MX'9T5%T։y`l:qפ.A%dн(\%k`oB5b2Nf􁮛 7;qF];1d"(ӂf >hHS29aכ1A2ј 1etO18z~iZɓopBsrI.0>i]BuD!D_2Mait+ϥۋ_~e΂;2=xl ?0+);[|>}i^w 'NC :‚<(nުmZ{niNu?F1b|6n8+k+w9W +zX۩Ub = 3ue3sW`N#As?nRs"I @]Q_N&n;Gv/gxw%#/Iã<K!Y9Lu~ٻKP3.xa  jTRk*{u+ iL}{U_>ʓWy/ιM`lV lي$o(Mv ;5vbĘRݶrlxN9NA,?6|Ws|U\UwR(Gp)5leTUEnQnJRAswxU\̫p-"eTT-I[\?ܹ7$UTZ2 5fn*V+Qi*xw~\FX_6n'OA^HZ^]9rNdnk \!*H['@.ƨ.^ 'E2j>QVuAl\VՊrPa$UYRLU3ZrGىI$hqi@Z:}eoTL07S1D#y#~[AdFGd0MxIht-fs Ds|;61?4L=\?:=hMS$^[B;8;Tb@^'&v5vZE&nG.-Dk F a:c1=lx:)hxn4pUz;%ø AWqp'yO%ӛzC5_M kMMm|XHنXU!`}x6MHϪa@]}`CozQR뒂 ک֏~)f_Snp |ԏ~a[:շw`Qᰶ A̫MU{[;R7pljwG{Yn"umAwJqP۪j0ϥ٨1vufTalv G㣚zMSݨojgAuܨj *`؉Ǎ:Mj_;c^ݦߣ r!N(T3uöa1V {7jEU=7@}W6a:]\#RWR_:v[ 7ShʶtW(^I!x٨Q;͡P׃ s,1Q kx {5w䤋IT"*!,%q;'>S7TK4mCk7U݂.p@ )8yH{s:cCkkz>&# %a v:r~WWN>!: 3k\Csn4}Jّ pxuϰ/-]^^V`t${Z3ZOyԇn Μ}w-*S U"RlwHWJ6yK& gyUVV4&IEWxfk1 PLp'@OmMf״Z[*A0 'nELr' )d7˰:uhUJuVVM5)#Q{4"Ni(?= |*?1oeFH{h-|'_sJ| Z$`¾wac}Xr%ĨM5I* >M{;oM:ǽ ׆(7KB ``Xr0:6xmGoveQ"!lscF%1xG\#u6LX( &!^wgka˪JΛQ;jVX.UTu8L(!-)8QEB x!okz+%9 EBwdRY]Vڳ 41) i5j hsIkw5A7nXs eA/ r/")ظϢ7.Ӂ`Ơ+Y?D D3Xۃjt3au|2'jqey]5v\Cx & xN/zeєWgn7Rȫkm8$R*)omovyT<OaWqo>/Aàys_uag!=M`qv⢩Zk=8ud@)axK5gWWO;g454IFKɨ%_ D}'="UW1/gƤ.it4Z`>OlPzhZU=] 3$ڕzr a@0 ' =]6mԜNʹ^Vqt3ijwS/>b!ei; Ƀ))qZ1p;k}Gp`Ӹ=E">}ٹ,aɢcPH6 l[Rލ.O^Y8b[+˺6Xnr$]BCW"z>b=I{>PkEDyR]K?f% r eYYwo+kjvO@)s%ၝ(6KI@=:?(a J=Rr飂36zPZO?K|BϑEQE`-Y} +WJ,G|Pl7?_ )r*r/K]edʦ2pe ؙP)ǘ*8%^i4(\~evϟDӃ߹Ar;șqwNxmۃ:NUx˛GQk2Awpr 󀙲%-eţkEHfĚ~ T>E|iF7>:RX3K Ŏ8Qy"j E-O?PC$QN51Ys$3baNC^U1GH>&AfrW4tHX8N6 \Y 0Rx0*]J}h%CI &1n1`an#]L!U>ނKkqg R2i1m;rNWr»\JD2;`ݖ>rfF#L rڶ SB "]o;$g$UeN)"æEjA͖mxYJ+eڄ I^4tob7ϏPJ\Szx :Yɽ:])k$t8rz[(" 2Qa]9?^ .QL &(P)|di)2d݀jk y;LȒ ޗ*9TLķ2kZh)0W[G;t_et=vIٌz X5{/ ѥPO:2E|4 r- yq5AnL& WU֧[(O>JNfedl9 SUNSgVo}wpC&'7>*_Crʯ͑F% RrC }Y/#/&ed ܎Cc-F MR Rۉz)xœG+^]9u&͂!!f댊qD>N}֢Wj"S0;%3>a%HSi6m ;܆/kIu5g?D]$i^ Y;X#ā8}cOK6—ܑ STitSUvG1>1=5=[UVG *jВ?7*~/*>+RY]QQ-UUQ\kL+]&][Zʾ]Y/7:\u)azs.էSd[esZZǴl#5w6ܖZr-{3Z%LڹA!-kpIC6fG$*Q:"'qN?_r)iJ䭥8:Q$lkoOJX5FP\)F݂c4g4$HFcS;9T[2ǣ^vzJC\&YEv4_&lC萦 Jj8” R\}Xk뢉(ʒHėT,f~.h}Ώ@QkYz֧̩fr4$t0 oA'69#Z@A\\co@pm3!ROFqq Bh92 2Î/&qcmjYWKD|#?R$fUl2>،rU8ky:Ҝ:Sٞ`F}Z zhڒ3 SAM:gSw#&|{/g'\&mKXF`$6 wƍPIW.RpQ|5>Ү~Wq/F`#oG1zFR#΀$YBM|0u[#MVމðdfĚq,'sϙ$l"lk5GoU.,_h%Z}yREm $AAIW|eV\?vƉZAF6o;5zQo$-B,,wWt95 7$u̾ULʅn".&@.jVވӘr|\MoyseM׺ BޓA2Y2Hy].Uwzl ٷX~љH $;(XŠtFH\o\|v;gL ۸HP*6KZzuZ9];=iNV"MƏBY5~ CU!JvXk$8U@@N:Ek.# e~Uq_aOO8ODˏa.8Z{zz.G'O(̌WD~k_7joSq4#J][}w#qUIfdi/m1tC/jIKJ8 Γjz=[oke8EkkϖZ'ڷ"ji}YǃL>8vL ?ptO,oL\w(5r}_Oة:@&8\%C~3v/ŔרZ䨋1{\>.c_@"H4r8E *Ddr^;nC~w*䍴v8Nfh}Tg˄kvJzEί$_!_=6QDxMqWϳ@UE E̓+TǗB%2d^`b/ zq!;rk?/ШB j^^!z3(++d1{o׋OZW}6b/~6f/T)ޛ0{w{Y^uK^D fUz2н3{id{{ |%|/.TW}/\.:qN, ڝbNH241a殹8jTlB?5%E}Z)vk=Iռ)k$|.e2y٩͋>* mo*|C Y_w{L =4Sa⑿姲.sBP1tOn+VG=X_&9O]W*N0gDZ!A0ֲ!_2uQ,6'Ǐ$@zw#~S( HwG@ZC5bR.g s)i7ut:µV=pPbn'-s_]֫U:fYVbM,UR+xV`øvYU\DRBS:MQdh׏9v|uAZ/VDo780\'}F2sub0RcZ.sHW[iheezүAlF6Nƃ>0 ˩ рr!t1̩B BZ/Op{Y'pyMV,ϟ;yN^;yN^Q4듢*cAa{}'bN;BNo}d2סKε6ѿ{Վ|zjsS_>Boow{:e!J$8ACŬ3덈RL7/wf2sgR YvYn^,,4)J{laF 1r7.PX܃,񩩍mZxuNtҽ-J~eXwqΟrr7]y.7qr.sG×7βy~ @U~2ͥp̴=zs}>ws}>ws}>ws}>ws}>w&W!X