#!/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=1c932c9cd88c7b329fcd3fb441c99c17 # 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 P`B2$8ÆM9*3N8L2 dA9 Kx~FPZĊP`iʗzERфr3rydY=.?ɺۺqͰ3mu9vPb8/4d >0ndÆ6nG} |45=kp` .[ a6]ȆWִ7ոvv5FZq߰hlɐtukؕ́˜ߦ L (.MӸ웸ڳl"MS(] '&Pd c 5X{3 6oq`3t\&{qǴY]1m예Jp `<_g \Ӷ# Ӏ=bpΘCF^ m,q@V8[;#V60ֵ98>D8-Ǭ,'X5:&Q\ j[$Vf]1BtPRjC(Ɠ)TA4 ), V8"a؍yV+2W쓷Uk[#ѯj8po~kg:.(H8^<1DZ9ѐKK_m_6~n~jsoBܨ*.Ě>Tgo3[fʘzr]~]W:m&yo^>᧐u(ky^HO_?G|2'o%GOZ35PQD7-ȏyrjף~}tBkv娳{A~lAjF:BUgvkO=Y/yMȚl\Mn/a 1XBD8ݬ8@;BG%CU+P<5~H2zۍ ܚIE{b-[F QT ;M5Y @HdjsGvxjT}5 Nl˜qv'ΜtmӀ|߫x-k ̓jJ)'CX??GCK`[{zOÐ@fapT9 *_ dO-jj\4K*4]G*iaQ&i`}O*tLD_G>ҴҔCG2Ex> yjcAyQ.u(EOet*AbrQh2zg_%WET̾ϩZhm,$=TC~9o4ʬYWБ;Q:"_Xe;$G)#gK:NQN ? M$eh> 6_G3y7N7XDh5i*Ebc0)r4/x-xSeAp2;n ->Cisb}|aš5xgqhp#G W&\cWR*#X 20l . Xw\YB'`4x 4MtƷ4(eWeZ1xL>lT+RuJ)Oj?C$g4)#T\c1oN byHa,A&%$K&N, dJ|s6&/zd#Fj 3 @2J4y yȢ'~׋{|qCg99?>\IC^ʁi s9'|G#Qs0 yC脢J|1^€uvϚ#ƥ GT9J9XIjG RqlH<65co|7U'mg,"~l ms;d3{mn (C `R0 P0 d<"qWאKg^,ˋ."K80ݎ79! [N:^ 3۸k0N2{'oȥDkjSbW!%|ZqXL|ia2U"h kA9[CxQLAn rQS@t)?S T45gIY I= $+OLD#s ރ4| U8®([c{?2*%j:$6h=>"x`mEKo!ֵ4ncp0Pb8Ie4&ofBi Q3)=glސ |nٻ1zE\Ƞ&P=dN <ī?t+;tPnP]i˄{H%p 0APB 1mD+mYPaF^FOιTWƸn%vui35-bȡ豷*\|kQ;U1]TB+Z]DyL+^e:By SzŌOS Sq1N.|){^ wo|ϼoygZo:N?s|+KoxIk&7I~ʦu];MjEO. ־wԷ]WzP VvRYc:oI-B3"}i}&` :]:^aTh!a8kaNnl}*Oxz7:2:m7G˟7ssRUz*xQ-h z_/0hA'_pQoi>t%z'/l:ɮZ0G5( 4ʰ VZDyïT ,앗zawo{clIz\ rQ:7}*_ N7T^'aM(4PŎX$A3`KO| hSZxsCXt `cczMREC<:Cw=?=&;6sq%%Ei5pPrjH)2ZZإ6N4>og2!/I~7& vvıd]UYb&xR8h)!4l2Ɍ_Tl*lvtJҡK#:JS~)­A}&8_6`}'A{QVId?.\Xl/S_I*O)@+(K˭t%4{zѪ'~vݪo/&#[Ri<Åٮ̽TX4 n!Kהw{kS\^X`#/ ׏5ZGzٻ{ 7Zhvwy<9JYG K@xBQZX4H]d)x lU{ B2a[@A'nt~ 7I5ЬB3,٬xx{T]*)eWjlI3ѺFQ+ۂCLj5Zp5a{jr=Hsͱs;uL9/eK=CtG[JWD9Y+M TXJz (Fe8 djBx[ \.;#~HsrAvbz]*ҿ1-0`{T3@񻰄 h!"I#wo=2.}//)7 k~m$.*9JYVYd- Fx@S*D[;M<|?qyXc46/%cZ)46M|1xNw &l΃x*ҪJ#y 0PsvHx/[eOF,~_P Sc x6i(ܰNX)FI¨R?SAa1ڎ hF1Pˬ^%fG̀PsdO ]{fyݦ@8 v:e iċ8zSa+a ]8gF]ldEEү=BloG}]:a@8Jh.ٯjhT.0_#j9vj~~>NS&*jd }9:%YF&:I+q ۼ _7oEWb!%i "! ל %ʾpH(b*$ T-VSf%KU}.HD'?h4*z[a}KPqXN]p4 n0Q)( :y}ze-m#7~WK aֈg6m: uȏPwW53?6GKL&36."7?ILO2*3Q $j'݊t#,-48\8<[ I v4x˧~v[of*\f城Bp}nQ1}̧?Mu%7P'ldh \J:π ],rYLK:(LJXpou$ΜN#,K@~[-S.Fkgrh᝴EJZ+W*`=#(!H;̗zz[RtWKPkRj$@r=*XTg,ߑ–]w֡E"/%| SER㶋 z2$pocX݁qDE,sWM0ǙӔ7(ozYMX,V̑Jj'\wNxoM r/{Y"3G2)c}e%d[|>׆uБó}X[;LEx~ugٓg yr(> =&MAƎ~EUy<ௗI ΁~.-Z^<*F;A}wlZ@ <^ਾ[ r0+R1{NoMMuI$fJd/]D!yGs-vӴxfij(!Zx>d K+j>Oàӆh݋7*7.R5ڸqA3.|>3oQg+CNְ$@tKG Վ[ԕ$C OQ[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!ͩ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ݿoxWIWO;[~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|qL:#\%sa0wydGs/l8BCrHSQvySTۣ·x4w"i&aƩa7U!!2-oB6=ꞕd|87߸<("8ѬkCD" (P܂XxOQ\'eP"<2uG,:1( 6NwfN{)h3 |͋9@,~‹L! O,4e@,r %'*iv} 7'Ҟ bSi%2w K0\,TQX∦(-yfw7sk_'+*ըm58LևW e,'B{dÈ"2how{Fm-5:l70*u؉/o= 0. 귃}3?f:g]ȞtY1,1GJdr"hA)en(c􆬰v޾#AFׅሁ yQ8nם C8G :1p~,U3,7R lKP_@P#Ꮝ5H닱;&4GKHp"5S"vӳK/%_yn~TԉzSi zs'\|Y=+T%/8[-ۚL4[͒-nC|`bs C x8v(q6 ap3G֖PVlJ<ϵ3v(^~.Q<8ቚMi6AEs‰@0BSiɳQュZ 5ѕ:Wo.)G}^+ǜ 07B#t7EۡJ2j97{^BlqlHEɢ l k#_HPmMHfm폏57ʶTKiet{ʫEn۟-w%$gͨ;<oęx31g ҡm*L}@ڒ<-hv>EuR\9;}dPCVGŷ&h(>>6f[CE^:LƓ :QƼU,jGv%;.}5F66NZq?+ҘJb%9*8q2c%NvlJ}遼,v {hs7^ka_Hs=T977 (`34} Dx2Nk$1ws( SҩX 2n簒KWνÆ(geyM@% v϶]CgaA!JH1ӗ P dp#]O݉߁2IUQSGtv0]ڈ(vd5T*Z7:BFÚ+}HoILO~t:}ZQ sm36, Y.9_nYQ$=L+9xm{PDlف'i[q-GRD]zSO4?\D7 &LǓ`V\yA }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:ڙukD^ 80kpUG<ךoj:7t,ؑw $1șZkpۧ)LX~y>i"myBγ2cI-,L'td.Q!3h9U ҡ2sp1h1 E>?_zV%-t&Pؙx_0DJhe,8wc!vb92т蘨J.̮F`^KJo4^!aӊ\hX;u^ИNښ*kMKWXOV&%B-UzE.1`R=S LNOD>_ .(OTIp^]5xW$7&N4}@t9o&V6<Tl{Z^ *Iūm{7`)mLn0ɶSKI鰢?q,ã17%Sww*O`W0ŷJ, ۾On;NPT1~BjsJ9 Man<7&Fi-{ |(ۆɴAׁ0 =3B0бX{F0R1"bg [k6H=g' AJx+MOT; 6@z"”JSf Xƞ%R!'襰ڻs6X]tPqe7LW)UQ}-OpDczÞpVhΛ.[|`$n ό jw7K'~!j6뻵m > ⓨKB\dLW.<|WVD>% ;aqRsʽvoIǢ£S{)"oYۍx >"ԉM]\cLY!tRmuy؇NbRc@ "}/!nWIGk[cP ,wrC{}oAeLQM"H@%J{y+>Kr63[;-MzhXJif9¿ 5׭M5Ogp$%$ W uȚ" Zx,[2}wr:s,,e*˅DŽHޝSև5h>iһX q`$l3藩͆l #'gq}a9HQLȻ+EghD35Rb#\Q"h3Aϩu%5T9jXXqh|I@es:/dހBVr0jf;>E鹇 .cc! Ry"ՙ1Kz-V0I(W'hv1>">"6BzLNO;A '7 rda ~ 0tWN"E>$Ek@՛֠WXqXH$ Kn(jYG4oǐM{"Anvԍz8nrv<-´uyi:RgFfȝ3OLy^Hms%'pm,:lM|~pbK%]0`f~sb^o{nGzr$*BJ*|72 @G ˧]Q܍yru~ݑ$.inה/$Lm0h F vN.Cel׍L9via<&\' )@kv3ACv.Ni{xf:V@\%u.PF]>BP7uv|E)jF m9$?F1 UˮČ##KC>3՗;:aA 5FvޠoUR?=}ljgfbNqm>%p0l<+;L0t;Dz ~Js=3y;c&ϭbO3Mf)q3gwWz3dCA1&g7Q嫏ɤ*\9WkN]+b9 OECcrd4$}+@u̅pmGkjvO8i+j>lm:U7v+p{V@g(ELgLΒmrfÈvLr%g Rl;Ц![U)qb 'UEefE&A # n"&IZ1KR7ܬmצ-!M^3ڮMN_-trbźǦ8U{fqC}A'"51"mS .eԳҦeׁi& ]8?W/ R=TĽݜC<n LRF6FzgaJ/,b󩅗׾TVHgJ$eLdR>XT{XAf)CJ!0ULQZwk l'omWJM|O"m,QM 6NIVuQ~3CHN/(f[(A,ЕL_%TA g ijܧ쮩BAYRONV @=Y"P5h?It"s}!}BgZ/h +C]LzTx>u~,+ 74+GWrat0UfշS1S/" /tMy tKN\S4o㔿TyɂcNr[+H1{Ŝ.mZt6c#y즐C"{mGzCa (:զ^}哵g0h>H X(K#}WPU;`rN] h6͢}~[=Jz3qkb)O9Fl9 ?D+9N;sOR'O/T~g}nhGXWjc6'i++w⃞HtDA@Q0 )Q= I#yTQ[[-*O1=k Kb!SI!$s,,>z앱ad~3ZŅֱia:ʦlZ-OS x C@Sj /Gb*#l-c7bHΧ( Wn{_ޤ;`6.Nt"UvE1c(qtFZJ|wsK2ZC25Q`'b}J=(:mc[h:~Ρq_(N<@c9& ,px`?u}*!s]F*$]|%{gt2tl@,MىK7I1'A4SD1ECADXu Ƥ`Ȍ){} OJwx:ޘpH:uIRL#BԥU%ix OզO[y.m^l/,wܹfhL6nמǏoLy-8 6 c<@z{z k=7J;^+N]Ĉ 5ڸ?>M>}n?*|_`XNڨK =NVa8+|3J.vɯ0PJHq~I,}_H@/t2t9#8|Q=C\/ɇi~Ij?0W\l u/b1Pḋl-L]ڀʝiMgv+ \X_W}Ԕ*\# WQX7[ Q(O;gޫk0m^Q|vm{g}_`#V yCm;_ةC Ɣ@ﶕfvjq `I+Xí*ʿFqw4?Kqg[/*.rv?֠-=jwSڗ ;b^m ld (FjNbE!/Rqo1sUYzm,^$OS_2n?duύfIZZ*Q "ˏ?f7ׇy2;>85,ϬAkӭف[!YEnj*/[P-}ƍrF_砺#5:~$H/;GRP˿nZX>Һ}gb;̎%aDT{f:N9d{=I(ϦBe8_ϿOoF|wErHαsp:&s+]VhD QQEj"=* t 46F]4uo:W8)Q b3岪V<*v'ڔ`d⸗N?bNM"ECK9h%G-{~`tќ!B "3="t͇lHE Mm0%P&s0 l'1gt'`tzAkz'Au١:Q7-h*jO0)u;b>tQ\l!Z'n0J'Ak}aЙ`LѼ0Gc+v;)-Ol;{*x]oJ]V/VGojjk7G6\ǪI3Ã|oE ?T~Vk;uzkmo^TN}~ŎK9l4vk[oke}~3uUhzUAuS=TLJZ]ob^&mޑj[?8N;tF-'0#k zSRVTT.F?5 'We `&P8mFm}P; F-UK;TN\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*t; h ٜ~!.~ j // xz 㒛jz8- Y|k[U!*ɵ\r}q9 ݨbeֳXmJZ%F `g(4 ;8[ML [ji !]"VY__6/]bnH0lYG6Q:%= z&j&C͋8F0 ,ONleG;8YE0arMiGS5:EntRq%tJEHOT]4bkюmDx(9kl8Ϩ%tO{7*YmFCLyCԂ(IzтQNv{@?EdEЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'qTQh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=iZ'O< Ғ d$dWuHʵdt[5|#_4,J7O}[efZF*Я)ݟW;Ǥhk&/Oah"u4 ǟ6άu k-6EL#^gYwW& @jBI$.5=yZ{dd=~jvz QmϞD+GVA7$"+[5 /xU#$/ajD},&%؋fmڇ܏jdJ~ja21)A*m,rQ NI"zaO7 i/SǏׁwZ^Y~Of_J^u+Sd|G7?y;7^)?9~T)M4ڮP_ xȼsy͋/JUȭAz@R )ReO6/(ʧ Ld嗖294tʯ$Ow )CPӑ2?sb[`P<7"`v^:aÜIajg@XˆDcFASl__؟t?Gx%Z˫7x׏] N\.<#Uf~h 1V:K.Z̥bhC_n *gGxp.0l*ynh%)YmOҍU&@!@0ĂWW84̣ lL ͥ΁ {!N 7#WCh)J5939,<o21˵1om񦣸(pYL)[]\vm دzr $<€_Yo4>w^Gs5ZS[..#0%E {0;{nIVBb0읐x'$ wB❐o%$"O*|_而0)r?Vd^ЇpB}NCK|#F]p͵NSvP*Wqn߾x;ŋ[SObX (=&LѪG[\70RJ޼LrE`G[(o s s󊄹4mO &7UT&g/_W53J&sǽqy|~>'eyOt$OMmljūsBΖws}>ws}>ws}>ws}>w3??CX