#!/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=17e1d85d756fa80fe2709d01b13dc260 # 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  ϋ ֍W$Xܧ֭IՄgVFUxiGGCF%\GUas?iLȼgkY17 R4 gqBu H̃`^ي' MVI{)MƟhfq8IisM,4I=zL cQ3@!|]bo(Xtz'G ф}hEzɣӛv H–^ʓ E.y0Th<و<)Q#` Riaæ |xQger& xDBTٳ6V2/ECw_vYׯ^S=ҟe㿋߆?؜@vk<]:vs#>PQه"iP@~̓ VJ^(GcSl BU3tqeꀬͨ 2*_JyOըj&l˜qv'֜tmӀ|߫xMk ΓjJ))'CX?>GcKh[{zOØ gatT9ً*_ O- 5d.K]o64'K+4]G*iaQ&ip@*tl}i)38eeܱ7|.x`d[yH/*/-9g%*-/D<+ekp5̩ wof: 2XkIAwhճd>*Ͼ*DfH}NвF vlBb#yJ1O7F{̺eweSə {/6lC$e}d b(ZDn"H&#HJ`u4~_t|O$2FY+_T\ x`Tb[@:L gDE P™>wq #H؃pRV ,1gev(gi }KBã$YR&_k&pLAG6hD^-֠>cg,e B?y 'CHQ `X$?G5$ĭAv;EI00c8Ie4&ofBi Q3)=glސ |oٻ1zERȰ&P=dN <ī?t+;tPnH]i˄{H%H (ATBMmbۈ|UZ8bHӍT#\r 4qݪp%KBt;%=05cco UH &P aa2w)bXKWVhtXW"u YA LCSƬ gʞ<c/@#_)3o[?x>-t:g!_qSY_zÓ_Lz]c4L[Uue6ʪ \@} XL AL줲_v߱:Z< ܛgEuYiL݃+Jut$7bˆ%ЂmhY*V?|k%}[OC>ɋ~ MB8U &澾<@ m@lIԏ7ʪI@}LUЛ^yv{gp&׸;[̽ʅj)8uC}TxSW5:nOPdC!lȂ4H n ʵ9Nn,@*yD&;##xzu {r6{xL4Lz@S?)@бjpéSwR/<࢒?c 1LIjz}H}Ag ́#,ZԍN#k7$SVGJQЪ% 5'j5.4|iyC=.c8_u l@!3q3YtWU ZJ'x v2@q~bt/G%;p;)AѠ>i/> =(+pqE2 @K)ψ6嗹/$ K˭t%!mb=lzѪ'~vݪoO&#[ng҂,P=R3j`/ t/\SeMm xvR8ryad V0__?ڞ3/hujf37$߼sAͳKZaDsvJP*gf .d*, ʬКQEE'cHC$8^ggK{ ˌnFƟ@)$ EBYY"Vi4U]iY2Q[q>g%F~Eͯlojm eF[ŽS[[S @z{̑`ͱd:oᗲv݀a-Zj Jz (FeQZoB~k"ke&wd@ izB.N26TlUx'K мAsXO}"%LWgM5KXY#ӅS C\|ZTL^֠ky]e:)yYcA ',_DQ/@5mt?P?t30igPTfE(Tru-!>9 ` p<'}=ᅭop7ݮ`x@1T"M7gLEț"av~&CJ\ R),^n^!]?*w2)ۜl$l~Gg̃(<=in)7>K=nfpr[ IjtpWYd- Fx@S*D[;M6=|?qyXc4/%bZ)46M|1xNw &l΃x*ҪJ#)y (PsvH|/[eOF ,~_p Sc t6i(ܰNX)&IR?SAa1ڎ hF1Pˬ^%fWG̀DP0'= y-ٯjʛv |MI[α3 t}?2|Zƕ aۼF/֡zk iM8|*BK(5TDB95AJv˾pH(b*$ T-VSf%KU}.HD'?թw5K. GÙϠәgoWWYbi,<~z'a}fqfӦ>Y!Me~}EX8Og}dL(Ĵmbz8c2-bZ*d!1QјI2?I ٭~A=M?GS̅`Pi`W`NC]Ǻ|zWjj*m[(dO |QC:|zTWrc uBFFf ̥ X-1"t"0:x|EI ^G4²A d~P!Yڽ :Bz^Lm6}v@/yVI[Ur#A8:rc,|G -5@M| &F$g{# Le4"L1;3}Ž躢ޡq}LNXKi:ηnkR,kR'\#Sz$cmB*Hŀˁk ?!91g#b'f4a M?,z`+0Pf&􇘿rk k6geiz%oOڬ)Vo(&vʭs !!sUae"d-ˮ$S)+~ 2(81eWO>m mdT˭mUj*Rr):N P\ȰBL#M2X Dýj&QI :NXܿ(2qrdӫ]K_SigRwuFUE Z}C`$r4E"NrLDJ*D+2!ѻ  8FN)m$we.6_ls!D2I?JlEu2-l)EzkmZ4 _0U$%8nའ-qA6eXG^b9:g|Ք?Q| K=M?zܾOh*U_~ b;?~΅{T4-?!2|/#.~?WVok+w6a*#=˞Gˈ~^Ua7u + wj<[r Yӎ?@_D?vܚ,$x }ȼ\Z#dΠ!Sbkk4 ۇo@Pa!EjD@ꇿуJ"Jc,mp`f2jMP$> %(.\h 4vi>A0nĄR-zte3jw(x_As>ld 7{=.`זs o4eJo'U~vi %T&Ę(:W礧 &!:aPx$IR q-8 q6^`%X@pAm fń7p|ޅgo*=}IIJKkdR "PeW_Xzq ;ptܨd ުL[=M~I$C Kvd'\,oNP8 ?Q>`d7nbK kM_RR6CT )[a[*"O*@s@O,Q\`Jy\|Pȅ~,_&0U]PqL>+N`Ŕ3%ʎ2RyX}@DRSK1qn}[?PMD{yz,дNcvξYμCzx!NM]wcfsOq54ϣ[e8j鹐?ïv:aE~eQٮk괛tLx<%utFttT4]-@VŒAѨǐv' oΰd'gǰ!t.pѭY/hP(XVG,;h8%8Rԕo0,$ RYa;k9&%U#eܡA=E[Qd5}o_-ז`V?ij0] Xk)UUZzcxI7"r<\auazg5f5@ّ:95MK~_ Ud+RCRuvʤ#W&3vt~A-n[HȜhVUAMTgS/Q;z[VLN!ܸ$xDhG1mh%k 5 5MT˖Ć]H?DBD7三sB[\٢+4rբx6 In u0zo(ƽ:&v}X 7A +PzFyYTyELW>XJ%RKs]~k_$=HI5d&hc͚N-#Q(nIC*bE4 ! Fs2 kK؜9-1oeZtm#WZB|i^M!SwUȬBŴ5Pm# QЋ=pTl#Nnt㤔m8,'M,g'H{ Ň&ҜjmLӝQZt'SkA' !Jq=1:):;p3(/Rf˨aJ)E>~TX#vXݾ$IYJIƀjg"Np 4U4Q Zx8?( $=D mQd%CR|$]~!8SᦲM7Qp~h pƛt gf%ȴ:n{7ZZzZYA~C;Ec[wfE>y߰L> N$gl5}Ϝ8o0wF=GTb' ^~u֦L͐ 1 5⡻&@s*MAlC|)_>r8 V\wTJ[o7RSk 8ׅc7|+S8yڋk5b8J|B gj`XrD5muB"yay8Ӱ|;GD'؂i `f_o^YA&gD8J>5rjo=Gѕ!a8+"X;H(03%xM؆XW=%tuBml3"@~'bC=|1+E;*y 9S*TǏsoW~D}¨B?Ӈwaa'3Xթ~a.bߏ/-w[&̕%TCյY<rIe~;4?\;5#:٨]ۮjDa;ar ! fcD8sD~9I!؟2=\[v..Xt{.qƔ= F>ހ~@;f&%D+̼< iyZ92lj#I]D -z%;drZ* `"ΣmFj`9V&'Z)Εu\©8crVBdʐLT;u̬꙳`+#?.dif Axbz?{4Yt+JOF}=M-?v Vw{8kN|A`HV) -"ل;S9) ˒d&;*:O[/PñiC*fv뉫-0Twt/>im ݦ^O? vY 7M>X---T4GqH3LKooh;F]ʵ{zi0Kqtd&4H*ӓPbE^Ty &>IACZtuS]n{)sF̺~kԄ3^lP%{e1~Z;(d[u'Z\4&(craw)> jC#{ zu]]|B AϦ nSstTGƝ&Y-EoS%y= :#<8-M؃T7lz'v7z&ER(w6tM H)L3yM=t]=Jy`Ѕ C- Xq8"|VՈ_Pm.Ǹӹ3V"ļMjkHp7 (]"oPTDuR*Gz3.j{~؜co\r) @.|ijĴR:6>cqFSDm]iB*6Za!*,_ș1lzہX(z5 }"gT>/^@8>4JP}]j _(UT8jl/,%n MѿǣK e`%? -_'R?:ILtb?w_yr/;83jA,LX\(&8mO !~;4O3vޥHG(*9it$OۘgC}MR򿯭WWdR4Bxd<@ d/ǝA2`<7Wd/%ry@kdaS-_-/_noO*~=k`C).GQmO <;)~{#_޽//aUܢyN53;ĥ9qMi2(ಯ Aw uV E@} Hl%0nC%ej\' fk{~ b,]bMQO&C 8JAOP&I.crBih713˟^w}Žܦ+gP"YX-H`< сtqw#kn8' *"@&X%H9&QYPH >F:y St  , ㅪeB3ZR+j/؊*ya w" ϫv{Kv*Hq'Evɋ".ɛ_(ĻFҋ uIVG:ЂZX]lݸ힖J8{QQ9sU=I&/ d0iQ.)L Ҧ%&V@mBU$7bMxYWJZ\)CX( 1#VfR,WpzYu˅1 Ax`¦ CG$/yGɮE$@Lmy?藑籤) I ބH oa fTKX7fՆAɞRn5 3Ux;6ݕZMuqsa."ԾsJ_{'z`ށD p2N@K06&]\s=d^;2vm:#w}ifi6W0`v=k~*1m0 «7h#9vn!m]i10¼3աXbl' *#OqB4Ǡ'.όs@woc YA0Ś"Pm/D$b3)2 3[`_Aׯ`0<}÷'g)p#+ٽe)RfRQgtj#EL fK܎~hmӛLgR0 Yk_TގT D fsD=2YOw\BSJK&t Zr`MWm2'Nk >mD3noZ/a03nW77 _,BS<f9:oc~y֏$;s*qy?!\"]ፃF2K\~>L)섃ڼ<<1^N@^ƿabHm Z㯕rg}}u9`Y|Ϸ6i=ocXiLz~%& 퀜5=g${Td!͝rvlq*e ?cvHALAtq}gus_~g%"7n4:99JN4ڐHGCi?t4`,SIϥxző,-$GN5>ea ,Mc.]^AE2L3=9AbƠ/0b2SpHS4 #1<+M%6pI %( 7F+5n_C"i07''t}?H=wgZ ]A.( Uzq;8i,JKsݍ x|.{ʰ@5j[ 3S@ 5UwÆ`00ɰG/)0" ZaQ;|[KM[9 2 g%{9vfa ;z`̏ٽf{'#! o2ȏR=(+ZeJjـʣ+A:!+Hжuaa8bB^'i&vuy6QdN zKExL$ˍԂeB9[9:9Tkw(P)!(G`wxe}c!G b, y~5"y0v͔llqɗy<+|<U'u0T^gjI<#6_j~ϊ) 0}I<귻 V}f&V3Adk4:{P_'dN7J\M&n\̑%*s̥'Wxpߨq33yxpDGMFjp"w;3 TZ,jmx`{o;wMteۦK:i 1'naBMkMbvZN[RCh[9T)kS$`!rú-f8E20S% L9(Ilk7w7 l^}~VLQTcNGD_;? cAҶK9}etwdDZup,Q|9Mjdt@\Ǣ"ߡ2J`'VtB`&?tڂ&H-hK=RS Fc 0E`y?n%Kνe>R:ӛX~-^d$Tzͳiԡ lۣnF5/I:t88cy,Moz3Irz'#?ȚuoL t8劑s;2Uew_&i A/')F1ߕk^R(boǁmHsMYn:|V'a,N& SE6ĀNrpL+R0} 29\FM6UpF(PD__-5O xSSS<~ V&JJ4@\ mz6^ wŗrRs8*5,Ryco3btƃ^UK-{!"T艹xh5 {Z|qsy6- N42?/RZlAYc&ݞmdgkݨ~G| Y<|3*OGq&?ތ%`oـitiۡʟ>SkPຶ$O=ڸ*hF"3}r=8+նQ ,Z!JO PQj3N񤡢‡N1o呝c a)?a&9p` l@߅SrǰCQqg0gc45D7~t䢁 "B%a>rdy$귥hԾ(":w 咓*\ݡhÁ0vr)Cp,SMM;>r,Y2d᝕Ke/2\au,9塥~m4`¼J62R?}<ꞖO xf_ %V܏`4fXI NG 'Riz Kk6y\Zq|\,kiM2y:%JfX9~4ou̝Jt*uC 9$so!yYc^&e Cdz-ApЙkXch਒E(%?g̩}%8hY&n.Hד>kwnwLRgԑ,]xF"c]1d6'Y-龊MP ejpw!ݱN`Vpœhی BֵKxxhV@;ISJx!^!~,:svIVj%QoW^5koM Aa=d 6OGXt& 5nv'!Ub ׺fq;FrYդ\-XXj[E^uC  %EN_+wu6E=:d,|+Jεg фA/>\r6'$`S1i#ֵۘ + 1VnLf* T?!߳-Gã 6މ2hyk&CBh`],28`TՍSr{_l/]+kQ$ G1f_zu__`Fxy8O7̵WRĚMC@79rJ=P˂zl]HuJo%ua<N6ICMsǎ/&a0@N!rKmT'J_44y_#6je}?9'CRňՂ z:A28PV-D=`XPt1C{/L{w)~h:|Q)$azErPʳ-g3b2.*BO\zԐsp-A[ j( 'u%Fk hqe"lN'Ԋ`5oj>sd?iAj%qf[3ml  >δCh^=a0TH0B !dY|O㿢a`eRs2ia3SSo]Kj2$z|Aۨ ~K{n f;eDC9;;{.Pn<tg':p;-Kc/M#pNSj<|_M_7xHkC1z1ܶ )x1~_@hQ/u f\;?~8 )_j-l ǂVn8?ō6z"b5V#^ҍaۊwkśUk L27Y3=v82bL̓qp":(x?CW~?BӅGm ]`7cYj\kKIMJi2_DGI<9e݅taoVF?ME kډ&}{F)59F_7ȫ‘du(F1挑Ek4S: w""Vm[DH{pF%yP= 48:<:hT78CAs+,N&L*od tƾ}@P[_WcGlө3N4BB/|[49ag0+3;jIm@,^T4bZR==d/v~L;eY֤xAHĠ0r\KLdIbH^ǒ3M]LQg!,e ǒ[=KYO\B3F,fEIA,r@Ce?c$b%=A}59`/2JZ\M3C`Ɖ7lU`YpB2rd7ƣ1Q'9 \]hB`æ`Ѭvvߋ1rw5UךzW"LJ˅[/ Mz='gԯ;A+U꓊Ws2nS -!`maEXdkGc" nK~NU>`ho%Yӷ}F$vx?(b?\}~rxJoLZQ{ Óia@zgz'Iac".ĻaJ%b>ZEba!>Q ֈm{ZoOV~awh~m (E&)-dgyx!CSl9XnxT1n bA׀ N/)@@@yŶ漢5l͸,<BoDzQ~au܄9aHjF,4gVsvfDӈU{4[4LSSπwޔ?aeG˃o=Q gb*99E]$o=`)똶upѤFXݏ/^pQLA gEXA@ ߊ5BׁhI?^-co%jWwa O2,6KlS[V9NZM 9R2[N wgUrԢpTh%n L[Ptۄd]yAɤA(ƥ5a (f8u"@\"a;mV[iʤSM:՗*ua{SMT|4 =KBNKagw/+qlƗ8DoޙRjli[HE/k1`=taUќ7!]ayIܼX7$ o` N6?t /kClwk>|V'QCp ҹɘ#`w]y46 zaCX׉'\}Z+40K v>  {QEm;G4R)E޲Ο1G^ mA|D23]?d(0+J ƘC::=v,r ĤǀD^4čCݮ~$.n!$׆Ӌ RN&XA* >_˘l9D\Q拁JdVw}l#Rgd_wZN9X l]sPj['<!3)k}ϢH>KH,ͯr/3jn5 Dzq1 X$6du(5#YBYT % X;;-kТ}΍wF19]5H*f|/S ٰ'FN 6!rwWRQаfx9tkޱ e75FvDњg &y :S_ᏻKk>sB ɹ8u>_*H<&u`f'v|60s\< Ł5@C/jE35b0r[8`P1NX5 cJ}9 EB}HE|mbc98vZpAOZo$1Ȓz3)-`48=D}I2.ր2J7iA%2곑xfYqٗʤV(W M{\X#IqeX`Sk dϋopNAxGj_sÕMܹ$N:1d31y*0Oi2R{ ߩ%QGlQ|%n 'KحacoE=AN( B18jڍE`tX󨜢;Uɜ6%"AdW#$u݅64& ě4|)7}f/wfu3JAj=6A52B~z ŜJ|'9f{Tg,$wLfG[Ş.g(͖S/gx3gfbMFϨo DWIUfٹr2ԝ F%Vm-szhiIVc)%ͥnY/#:M[C:,f][L喧 uMqO:Ek>McEL(@\P˨gMˮӦM>p~K_z$~;‰{9Wxܼ!2(♠m?S&R%%-+$m?_{YS /};|ĕ0>:I ѻ˘Ȥ} 1.+SgU3%O'Ca䡙2$F(N5 ڮ?rE@%%!X47stɫ ?A~Gl(=} gxz>!][iCqJffx )Zwwgs2,O O(+GUXUcngYAyX_>S$:_I#(|X}z_2ݢ/^HdқtiQCz˽7Ḃq" V=h{W^̛|4^4#P̶F/1Q2Y+KF&A>fO]SKR() k{Dk6~WD(BLϴ>_ЊV@(zxĄlbfzP΢ڊ< -spHJHTdyW=wNl;sjQ*l5Ep6a% k+%xªDW(Pr+Jjw&tA)=dmUUI'O @呎ELfA՟).F%wIFX%2_AH}}X"VohV2xaPT oyL{ W{ܿ r% /{4`E7nlE>$g{۽*_Ї|_;uWgz0mB MP!7`GI^bMusL)f֜@M-=br^E7Ds$9G Q}8c]xv;1 /~9E47P{p| =r ^D^&v.?dߥA./0麗8=- yh)ǩ|M$V c 9]6f 2emF:M!{χDrێPJuM )X)d'k`}6}Q+Gz-9 =Ry!ĕc(N&2-8ip*Jc$:%3 6-p=$-3*ISF<h6 -t1'7xtB9 ֥. YGKrK4/.t&M>M\ڸ>0_G'Xf,+s-Ӄ m/=YIVoLy-8 6 c<@z{z k=7J;^+N]Ĉ 5ڸ?&>7]/0amVmԊ%'+0וA]V_i;}W(zs]?KΉ$QH/$ uFu|yT\:tC˞RC4 $P+.r亇g1(2uC6[] d.m@δF3 .og/lS jJ `,Rzԭhl(3QbkUf6(O{G\uh;6Y/g+?6/鋡cJQow]e;58 PhXڤv,_VmsUuKK;ԸQWFHB[9odk֖F)KfWq1rFrNjp}h{SS'mrppސTQiʸ7Ԙ,VZ6LFee/r şMzύfIZZ*Q "ˏ?f7ׇy2;>85,ϬAkӭف[!YEnj*/[P-}ƍ?N&֏۫s˛"M< KA/imcH*TFG3;pS=>گ5;;8@$}2?>gW}b~>"VW?myyUa$,c+tLV˻Ј>ZEzThlh"LupR$aUfeUx*UNY)T5ɨq/'~Ğ;DsiHK9Jz1Z86A 3x9C:7"Dft{Dc D;ǑDF'2Ka6J0M41`hSsN@c$Naۃ19N%C%unb'[P3XoQɭUԞxaRvo}>袸B)O!X`pOz033yaWvNWS2[twwRT)87TcѻaMߔy^χoԛmUuo[f߇jބ~j? wvP;v;%U9ޮ.)@nrh5JNgȫ Q}xzkļ LP}T#x~p{w5&p[0N` j[G8 p:Qé\qC!QmWwkFfO am^LqT?:>4ՍVv4_ǍZ Z8w&xyܨӴ쿃i>Vm=*X)M)M LUq 0c[GN1l&ګީmհ7X˻zVTz ԹwUh5^Ξ-p%Unc0~.;lLwEˊ噴z u=;ҺcY9qyw^{WLND/B Qrs3E }@D6kv#_-r ސ㠛תOW1׬3f;&al2P"`n)hGopx%$asQ=ްAj05:>N:F̡Lӧ w_7 K()>ȳib"QW*1p_v6(e? FgKs$K/*YancT`d_G$?Uwk^+1_]d)eM>9b EK^Oһv jQ7rrߑх=i~{üً{C;rUʮ{ a#@b5Jcr⢪KG6$ hzTYY)7Qkq`tI!"g*" :֠5tN:]`щCmڈ!\ \b;;^ܭ\Wb! ǠMt~={HN)"qz*zbE\.>Q-rh kɠl"rw3t=̕ 4CvAZxAo f1-QB^ԇvKO>]Z[}ih\e>-r[Q38sf"wߩdN50֋2=iG(Kln/ZNٞ]կ=FBuHo򧶦GkZ--&J;[nA>@ܣ\:%GqVǶ-\)Qvʪ)&Eps֦?M#&p }w@Dm*_0#pڝ6Ȑ5sTVu8-y/ikyNz;,9 0x6և%QOT3ɰM'l1Y8IqܫpmD/TQ%Ytm!Z{tnVDH"<+O3$/u)a>pcjqdI!1H6;83TJ|kBt0wdwX֮[H\Z''#JgB /a\I9i @;MU.uE4[؜J kE6''(^WE{xV+zOJ@ZFCXH䣷Gv5$$ `ZE# J8}}nv $&C pFP j?D™cnݨcM=3MYUppy5jG5jU:n8 oHz|-NsT~շ5LlΜ"e; Zj+a :A06"֠L< kNv;;eC%5CpķY'ԨRC+5 V`1LnLɢZy\Y^W;G 'P=^'ޢUF^Yy4F<™ͧF2070f:I,} {[[@ǕwIi?n܅TXo\LkwAnOSC~6 )`ML9L1 Ԃy_;;+ܞ(DEg K5h {BEznݭdNNaܥ*Q-O+jAL\ ZXY䀒8>[|*wNs~ Eq&:Cɟ;`YQix5P^y,BCS6jS'b6m:uHaq"O$w&p@,k6%;K8RlӭkqarG ?)g»K8KSlkecWCaBMΐrKy;B@ϧ\,'i/;G |4O&kiQ 8R~[n~32+oeMm}1:%:{4L(6KI@=:?(a J=Rr飂[6zPZO?K|BϑEQE`-Y} +WJ,G|Ul7?_ )r* r/K]edʦ2pḙ ؙP)G*8%^i4(\~evsvM~Hj#gݕbX8U.ַm8U-ojE^1R%Hfʖb$JR-8/%q|B=Dj^NxQ-=&vЎBL3}& 8 ^+d2 F.ܷީ)!'F/Vl9 ۾4]NjÂv2U)@%;E&x΍^GiyNnGuZǠlbUT9?Pը{a_*Rt~آ[]{z?ke7ׄ th =b x Zv;[^U%x2BsѫkUΤZ0$o3.n#| 읶E9EvtKf|`qNm~( _^KlhE8+kp~Hӌv3Iq,%$_"65\r5Oj{^>>WTUuM}Qc~Q)_ꊲjoBZc_2ҪWzઃQ Eۜ%w1->2&/Һ?gsk-8ՒOmi{osumKrF[{75'S{1Zgm}.|['1䳣Ё^◠V =2m 2.֭ڢ01z·Z\%g@Ѝ*6NZf=I[bb v2KW8d۰ج>%b%es,%sj˖umqSѓmfb0Լc]VvZO^s;Z&Z 䚖yT9/*1ua]StF.WBgTԏ$A%A#F3XRM׼{˸Ҝf4Ĕ<49A-hy "Pq/-eOtN\/jT@SDVHΓd̦bCcږI;R;\ Di ~v#LiQB=d= YDW;[<+\EDT_R Z%I"",{(S .QT#9I;oOJXB<%=V qxwiA( x;Ũd[p& fdIrhlj"`KavԋNO.|0"C$J!jGCnhm"C}q]Vq)EXGѹC:}ѱH,].W*i/oēʎ԰ Z7cLz q4v\N_s}&cꈅ;yP5C<H`GݧQ$N*R(ݒpuΙi,8d-\ދMw1bAJgQ'ix4ՈuW(-ʜ85'G9rNC,~ril<5 $5l`</?6rdd>R=jrs6edZLe'x/I [<6R$ RmGDnt@DWrl{fvZk*~siN{DhlwUgHw eS4 mYsʩ٠&f&߻Uqy{f'&mKXڷc0{wOe^;^J(+)(>siW9?8o#ZIy0ߎgģ=ƃz ,!ETﺭό&+Č.9.V as&)p{Gћն W(ZVdTQ&drgҕ5u)Ysv86B'lwjkЧ".=ãH8[,XIY֯ Krj&7$u̾ULn".&@.jVSr|\MoysaM׺ FBޓAܙ2V2zHy].Uwzl 7V~љH} $;(NntH\o\|v;gL ۸HP*6KzlX׽$OYܪQyqᘄ y CV# Sd1Ax.Q^7kK>,~W#SFP tI R)ElSdOYtHRIۍ}I{|:W7?~ʓ=jVNNO񳓕xe}H!0A<7xjEcǻ5 vxgnHpmU5W(퓧+c؅ G=֞,Ƨe2G׍T\8MVwRV*HdU ce+m1C/jIJ8 Γjz=[oke8EkkϖZ'ڷ"jis׋ǃL98vL ?p4O,oL\酅w(5r}N)8с&8\rŝ %C~3vӣ㨋1{\f>.c_@H4r8E *Ddr^ʋ7nCtw*A ip,}6ѣI _IB뿲$w'woE`LOnx?x < QU`X4LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;V0Eҿخ5X:N g|ج$FsЎ} koCQ)RWEؚ;uДbEd+k*Ƴy^rS]Q1HcWo<)J@jfni=Han=ɏX~uwTsDr\Q%>*|ل*`+0csvsi03}ʥ4s}>ws}>ws}>ws}>ws}>ws'}X