#!/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=6eecf9fc4f51fe2d76cb57d0509964a1 # 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 d ʨaXG32&V|JKT+&$7ÜΰM#{=vMni;˱;Á!cw#t6u;[LA?Yl0tFߺ\B6bݽƥշp p 62lFc{4tL,7[w|k\6fn`H@Tvie͈Ԟe]iʟ@@8Z<1"~PP_0 Yϸ5ڳtǶy;Z5p#;?ticDTzkxrX=k=pPa,$t0`nLxo#gcu4T崲yݷA!yg9ff98A`1PPWJ 2""8Rb]F1LZ YO)fIJqA n̓E vל\f:]~V OF{_k=qAA*)!h̉\ZRZ?kmkzsW>{FUwQ'Y={Üي5V@wДkoUl0{ա?W'R%AFG9] }"Tl ,0(H́ ^TbMX4 H}(hlVPCťO}v@XHf`\…P:R}/H# 5N+RDe":L:┕I,Rਗ਼'4,҄G"szV[BzBZ NHY\W ϋ~wf#@,z ,P {ŗB ճ$>* Ͼ*fP}NвF vl `!!u Jy=GWfܩJٽR>*%9J9s_ұgvr1a-NDn"H&(C8^:sٌuQ'EIS/*.PGDI|pkAƣ]E}*k4)t Gma<Jcs 4['SDqxP=R4GRIaSHwҿr0Ў?SKxiڦ35e>D)<,z- &~`IdOcZVz\?|Mٯ_%SҌpV|&)z$Q>I iBˏySu\C c'2)&Y %ޚw+7䏨0qgi\Hpx$Ukힳ09N&x #a4"Vkᱳ2TNOazAv,xӣZhݥN= +O(F8}4vumHq&7 rʁ._Ym\4n BN qS/i[VzOU.6|ȥQ˂4"1牎`fG#x"7*,W:5c9 $b1.=G9?2vڙ3VV=e{[EoD7,n}܊'(&M#CnCi^#v~pQj6$^/ %'8jsv& y)*%s0C}MO@GWF6g~ r`*5x  e{G2S2QvGM|O)P jԜ%eQ 3'J3nc<(3Mz^zP2&2-pW` oqnATBʨv9v6K8z8ƶD""rLFeCKTtQ 5jv1x9Ek 45L3>)O},Lm2Ǵw:;eȺyy#08vr 4}~?V~k:W!_qSU_zÓ_Lz]c4L[U6 4ܱmU+zri=+c2ՃZ!;iNh4royAUO>O{gާ3wcȝґԈ #B  yXtuϞsu`W/uW֏?wE}f|ֱ'i#9_l1*һU2whA+_|E :Z%k?OiSn>'/l:ɮZ0G5( 4ʰ VZDyïT ,앗zawo{clIz\ rQ:7}*_ N7T^'aM(4PŎX$A3`KO| hsZxsCXt `cczMREC<:Cw=?=&;6sq%%Ei5pPrjH)2ZZإ6N4>og2!/I~& 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{jƫr=Hsͱs;uL9/eK=CtG[JWD9Y+M TXJz (Fe8 djBx[ \.;7#~HsrAvbz]*ҿ1-0`{T3@񻰄 h!"I#wo=`Sm8,J!OOڧ[JͽOrp:8gܖL颒neU+E6\`$ 4;/Bd˃珰 {5FjQ2L0YΪBc0iaMdo+.t`!<πgY- 봋k$q,*>exXQfeULovq J8 5G6lеG!om ӡj#H|]橐F#7\!R.9 %}fԅFoYZT*JCl/6Z}Ekp< 1#}.-2H.:4 mJ&2Eo]b61=It1-̿AYMbzQјZȨh$V?VT?al)aBqj4Lj+0c]>z5SYz6{-t' s(!c>i+:`##D VRҁ,HbcbXA<>Ģ{#qtaY 2?{,RpoGr!=^/6^>;֗<@ -RҪ] U F G1gԣ&ZJZR#=_VZ^&2CLř>`t]QиR>&gb,̥J4d[Q5A)5)ؿT)btױ6vuwb٘zzH_3=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2eee eW@Boz)K_?dQ˜Ҁ嫧OS6k~62ֶ*5n)' vS{fDzB.dXV!_VNق]iz`Nk"ʼ 5zm(s',^Bok8mv2}Ws @Pcƀ/O٩3~MHF|*"ZX!]0kyyw{ |9"p'9&f"%݆~ _6]2d/o9c"%6:cu"{5Ķ-Q~i/{o*]d^Ћ8 {2#R/bG3jʟ(Y>ԥAynߧ}c4*Mo/L?ObbWVC?y½w{[od~y݋m>M++i'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ݾ$h(1QS 4ׯ(+  D䓍)l* ma>kn+GUNwD\)XQO% 8" /ǢH3Z@s.eM֦Ӹ/olFA*rEFU!,jās#ɶmŭ3b-gʽ7%RႧS+ lzhOCƔ_4`B 4UYI呤 Yw4SxZ(b)__AIIF$vm)A?Yv,)?T%xUlv^iݳ=OS;Q޶5\nֱAwGiò'.dN?.@Jq~K3rTRnܰ%HM?=l7vD#u2t*GH/PXEvB !Wn>!{_v] XS? 5j{1rWe%!02kA5qt#2E:g-JOEXkխZs\vn)_MS;a|5Zc#=jqT=h>22Kkje1gBaC; #6;ZfS"A(( ):NkA%oH{xO=A Q߽[E;sWrز+&/p0=d^);V_рߤC$ɀlĽ/%w8 {lMmf:c7e>]Tq菃_.?ly8[@6Sa/ l/dgOP3[rv>"e賲6Pv0BJQ:pufΔ Uĕ_6:jg򳿧90P]ؿcX$@ Vu*_KK은i 1s%i+5 s~.PudrD%{\R_Ď-c$}׎o͈}r6j¶묵/QNؿ\CHgNR"L7;=; 3lK1eϸsQO087=fj5ÎI 3:jBZ{V"Hkoel#r| bg^?JB?؅ŲH~YhP~?nŪށ-Mh (eRQ_O_ 1Cݣ՝k(S-z}._6`1E:B `6ryxJò$٥ɎN~#֋{u6%pxFZ} zj =+i6݋OZ[8B¦]VA=#)rC@oӷrKK 9G%AQpf4 R~!iě6ڎQr^^8 EE" $@TXQW'U`%ɨOdn]T@tן۞a"Ÿ{4n5 B UR*ٗCG BqdNh/E`^mH>8kq\Y_}{W#g4+0[.΅XtPN =}n+);A8n{@@9:8zT74GyG'1 iSҮ+w?oUo!7Zo r2g%3{rN؍m\S`Fgp:)CSfȣhfh!N;^)|[}4ܦ$a u.)2ձps߲zeoղ1eF%OO`0n#f̀pjn][ЌM؎5%Ń5t^] R9x3lSJmk 4̫4w3VcBc$S@44cAi# d. B (2'UC&1J]o 6c`Мr#yğPFQH;XR$qEvpX9Dbb%Kn vNI)XNC y2u\7ǺH6аN%B/n&>,R^\O <IM7&FCzW(/v*:@73$U* \{NISX +~K)07<tΧ^F*hI}ϢfS鶮ahJH,BBcfVLሆfsv|]USbP= LzX۹q2kEaT4kZLb`/gc? 㫨[Ydho s0NZ:pW' OkfF9礅a CP)1<~ 瑃q@ɹkVK}lTr A^BF4CqK<,! . I^I#]b uⰛBVTF) ~iN&<95dWZѤrRi3F@'&W[~i#xt W~is|Td0 8@]hФY}]@v'D8:)~6ަ6g=>ㄧ\R#f-5! ]B|{)x(G;ar46M;0΂|>~T$aW:}U%ܼcga)jЅ/#G5,"L?<2T*;YzJ>GCfZA0'c~EjH7N兖ئa8̟!ocjq>lO4R%m5t=5=P >D§.4wΠ_p_5T1nwFe3t 1/~Z+x+)BJze;(l^ yZc}9Em|6g\ 4_31-7EO*z9(f={C)ջYĖϣq!RWd_:'wS*%}4A3xF/7 >(17N{Q{ѷ0B*pnAjs`wXC[W ] iXg:#pgmP!`}4</i>X'qܗ><s&8^ZCfLEC 8E'0`M`1)胷u[T<7e97- 7ӷܔU9! TaDg}Jd"N8/[yK0K[·zeSh@R<BY8XrKbm>鉹Tj-N.F,]"W N2$LZХ? '΢t䷵dBȢaMw)ʩ}kݵ4 dz667pФwoqkiՕ;o?TKI\9sPg=YTWתma_ko>~Pʯw~tTۓ1{^oߟ*w/KrtX%n2Pgq[I2[>{}@;xPzIExDsY:Z0 Hc$Dh!1AXSSP#R}Ǔ>*IR,˘\P b l;#iYE4+@V ,%Gt`4jwpȚ[=@Bﯠ.ʽ!.VIRkIC'!R溏eN^T50,4 xcmЄ D} K, uGX|mi9%1:cE'y( uI]ⳈK& bB2Gaj]Qp+y4`t>V#[7nmaaTTGy\UO 2 ;LDjZhK ӭC~-< IkPPU/I@@jX*?)q^֕R#z>JzBvGU-fnVr!e7C2ءr7P '$KyQ}k )#Sw^ey,)vJaCR7a0&os¡Y%Ն,?mVBXIIxQ6y 誨'[_l؁*++2j]~f-߂>@AhcFRIi@'8ZX[Lz#Նn)Zr3ib:Eb641sa0ğy2b2uhZLQLu>X!ۉ1*SlrܡF" 1h8=>3F#ݛBpL|yk.;T˟u8+X F>w;H̖(W%`+ "7Lt649OmYu HvvosYYTY)H}_+q[&әTG, ´w`Vo0Uc?C9A\QLru/9.Д2Rᶉ)킭V7A&XỦHOьv87KjyLM 3W )gTc*f4nƅCb@GĘ7ƴ_#J\dFiO[k |Dʲ+L坙{GТ5n<נHWx㠆Q Rl8"0S#9;*$6/On5sL㻗f1oR:k%mY__][D˴dӞ14=?sr } Gh|v@Κ3I`Խu*nt2o|{ND9;d6L8X2솟J;$ D : 򸾳|yW/G^ݳl7%Z'umHHE:[0^ )b JRftHŖa#T0E¦1IV `P{ "z&y1hcЗo\xu)8$)| EZN~zBAz$Bw#͕n!4qFDړ:@l3V殠^u fニ@8tKѴw9F~N|@q<>=Cex)Qp 㪻a\ uEdXȣr\~ϗcBQDnso֨&V-fF;bmְd^eWvoL^Kٓ?7f7H){LWӃ-2%l QwڠSސ^w$hۈ01P`!/ǴmQUӼaqxGs2A'ΏW="Jt&Fj2b~*5}(ՔP}]{~>Уi}1`G؄h:QPoa*MR3x$k/5Kgtrp$R]QgE3V}[IsfYE5=_@MrLlnahs%&]7? .bcjBM ~gv+<_8o8<Q2N;2V"-:8(>B&fc:EcQPc%+:!0:mXI BB[U)S Cπ X_Աg"q@7n^2Yt)WtMzF,e/yGe\l*YX4PZ6QFz#sPj$:]Gfw jpIzs 7פsH9R{dMB:B~:r9J/ 4܅ځٓ5A/da6}欋h|j}>jkbv@?Ld)"@lb@_9BnB]N)>.V& h8P(珯S LTQ)}Qĩ  ?w?%r% HY R e6}=XFKi9L|<}71|hAaA* p%͖H[`TTOggc Jxj[%x٧lk(KxPQC'ʘEαz簔g`|}8}0Pt  TB)9cX(8ċ3_jQԊ1F~Y|K"H?b}KrM@o Ȓ0j 9<y4j_Fp NE ;r~IP @J;GSPxݔ!v8Qf&Fpt9,fʥc@c0:nR^C 0wa^%H T)ʾ}uO'wobȆƒI+GuEZXIB$G'Nf죄MO4=εaos<k8>L iGʵ4gF&<%3pF/"RcOs`Wi s?ķ:aavJ:ZVʹx,1 Hٖ k51H4SpT"Ғ3T>bAjct4,7bIݵ;Q;P&3jH.b<#б׮fKQŎƖt_E&VW(ˆuXsQCc25P;IX'O+ju8aNmFцY[!%K<<`ms4+J){%<tq?9;P$m+BSVtzуKܚh}57qɠx2JK?W`0gn4枋Y+$I|:ZV_We0as΋8`W:)r+u^#,:cYTא*ZdEkA3ѸJsgjR.m "/:Aš?^Z?"|:FX ޢc 2b% 3SЏhBɠ.9DՃ{ÑmLZ؆f+7I3 *؟HkQQDQHX4k Ƽf{}4w.CXdaJCGu)[JB{/‰M /`TOS/x|#z-hK<B"~>Q W.IYIѤ-xKLŞMjQ7|_#ƹ&X?i$Ɏ'I9'ZxSmin[ ˳c*GM_/+99]u[o;@m2ɾ; qáCeoa{?m|r=B98"Ymklz\Y- = !9)xw ]\GsN4 wjވ._e:%0_x M!a\vcz@ f96fq@Piu`YWW B2׾!bj^ E(a0,aic!=EP`m4MHFES F"\Es 1W'˂zNG=NjȹaAԖᠭPC5i|WXZݏAv5x4鸲TlohjE7r92؟Bv}ߊT \yK-㏙6g hgڡsc/Em*z\͆,_Q0eI90)귮%5b=Zx|mTP]?ϥRcՂ\2=tm7kok{G:Q81u&8ejةVu>d/P/m<$!nۄZ/u4E|娗a^][Ek? х/~agcY@b^}SwDHFN=e {Sg/mBz5|lw*|&v;w^1R&88tl<Ρ+Bo?[`#s6`rzN.m}Gg,5%ޤŦJW@%Y4/#$B{7+|۟P 5D>=G~UH:qUjpsH5vTZ)~ ˇ;J{-"u8yp<_koQ RC~f{j&n7:c_q> |}#U6T'f!!d-3OQÂAӇ^xWH{םIV6Nne/w{[oG?XI1-a)ՋJJT2E?Nv`ZP,jk҉A NbP@F%&2$Ecəʦ.;*\8 pL*DP}~xx l:1v(";b$:;4m?v<J~1},tT"o4AD/DN+%bԦl(N[e7_coh2ӉPKG5tEvau{*rgv^PCoNOO4jJunSdm(:㯘t0pߛ`qTF*':-7t\F}@v+|@!v|)^;:euL.M5%XeY 2 ,S7B-H6,y#bL0 kfނC0?r}`\ʹc|}Z٭m og&6ҿGN+݄deq ~^o%]s̀Q;fi,P^Ҡ^_E*a,oмBitLDX&\N)wTڶ2\1ť:6x졫V3Jb&(:Ilǩ{2gV9X#ntF*\ |$qraJmz֏y\;5Ԫ.yu/nX#Ic3|xn:bAok` , zLQg!,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/=YIK¿[8q:lyFuV@mz+otK+w:VGЯ7kq_]YOX?|9O?}aEk;jV,88[tF rz*L$@Q#(#U~!^vN$B}! 0ˣɤmȎ"E]lr$zY%tx^qi5$=<9@3ܢO {70ui*w554Lpy;c}a_ jPSp0\E}Oc2?ԣnEc3D<휩2[{5ôyGyR;6E9 J}8[Q ~~aN_ =SzV /۩9)_Eǒ&`~n6j[*^.Ɲm0B:޺y#ۭX4Mi_*ho6y.358^Cۣ*E8i ;JKUƽMTe굱xe2*P M+>1SqVG+ƍ#ȫIO˫!Y>;V̭wwM[}+DEr4%6uE\HF;ê.͔˪ZT<;۝*kS*jQ^N:=;1w4 1. HKӢr/:cqm fFs*u$6oDs+ 4v#N04e?l`.Chqct3Ц6VƜIНѵ'Cö brkKhgJ DNf[=¤@?9|Eq?h S0B("La1f/Cgz1E0Jodp?!*>梅SqzSowÚ)vm[Y7;p޶"$ )PY~:85ԡwwT5Js]{]RP?R;;/kjڭn՗ԑW=l4VUãNP7j9v!yjok{Gn8(s/kMD`Զp@-;NI5j[uS S=: 8>%'|AjhX\Z}\$YdA̽$N %ZٝE:v)0Am) ;Ɉ+};'>K0WqA3NS G]a AfVA<6'$4;" `2T*H19p昤8k7jXSόhSVU:wdQzzZEUÄ:E&"U$;0EAmMo%Ӱ3HYA*+J{b70}N=&e+F5Å95(ϢqtÚ**N&g|Y{IP>}޿A|s_6]d$5JMU>pL7['xVWQCmx0T @|WVMypi)! YN .EЫ(n7!Kvkɸʬn4 A1?ڱkqUv[Lgǝhjc9PJE-<R OY,ʪqy҇ j`Q%5#Y2rVOD2QSe 8n)׈jD of^geFתve}ofߦ>h?yuZkɤ Bp\F@E|iF7>:5K'hJ4;pq NX.G nK筋-<@ dF9[lf͑̈цu;a5&VL]x#Iu^if#ae:*1g/ KELgh+am`4%-ĸmz 5uHv1RTx .i3KɤAFpڨ%DGTKpLGI{)}:Fc)ǽ ;f ф w~Jbdȉ(!v΂/AﰠL}$b 62DIs`1O#hǢs+<yd*) 泵 }Yu/q$֝5Y {;K5,3A'}R&|04R_ٰ.}'fnƽ6\ߤJbMG~K]z :#BX /%yJӏ$6- RmDo+bVn5(&,eHޫ񦋫c_ 5eҚ޿!ܫ%@#?$ے@!!}捎 ;LNҵct_fNXW0\5AI]4%{G¡C8^;HӁ<[3JHDSݱزXs5u` {^F?k&ͨYÿ] Nȟ 4D8ͤtm'4Uϋ c2rD>:EQĝPP91TFp@2+[$cQro>z뻃79e݇1hX#U~mT5j^ؗʆ-VpמZ.~x5!/#%vko$0FN֠CUu,|qZ!3 1[KH${->ggkѫE{ExEݒ(r\nSE6Jn闵Z&ܳ.4#ƮL@>Kjy?Ǘ 'e ׅ/#AFG>׫b}bzjz$Ug|]S%nT_T/}Wji[֘WL }^nt4`TC6jimu ]LKOɶ紴i-G~Kkl-=N~S[Z[rn/a/ b yo`s5Fa3}Lg9!sG|֓d܎ɥVB4%BU΋JL]XѵKŕ*#eC%E5in!ؒ9t"S: f4RP|["ZۆPd\h~|5v>aJmQe)VvQtоN_t,t(,KUb+qi8jZ.ܜ bjatYI65^hG,Gq+%y" ŵT[ő :<"ѽ']Jg-/7_BS2Q5Z43lըY+BoYMC[<{{rj6ICnUw$q\^޷Ir#/:cI}̞SF`θWxJ=E >OqGUy pVR`q:F>`p$Kȼi/n3;1K0kKfFUCxGIbo&6Qz|f_:V7-UԶ@9ęt`M]eV\?n;D-M #i}yye7~!fyR~R <% /I=xGiDm۹娋 ЮڥՅ{;%`:er3W[h_ӵnd~P;wLշL9&?gRfh^.K՝=8Hoơ_t&RDB:ɥN:ӵ">>R[-g6.*09yM)A*'OV/?[tr?^Lly==][~|jVONx&%A> r I,akW8vl kFhYnn56Kv̴ЍT_Y R2?-wIM_9ԵwJ8<YdFvX b{ ЋaR~ê.󤵾F[Z{gQڳG+։郣Zh ac\%'7S?xza,`M+qv Nt ;I3%zt)\qgCvP`,ṩc).z8"jL3#YBw0(e,NQ({mW⍛3ݝ7@BZ;'K_ >yh*3|Re5;?_"Wl?I]}x->ݣ iNOr:]sq<ل¯jJ=Rה{~mySLiI,d\te"s)S'E}TTU&AKKo~{:OWi~;Oe]z c(HegqC" ZUK' [LPߓvڱ/am bph:2ž_j?*R_ٟ[sRlemTx6KnTtjQA3*##Tig( TwGTZCt\.50c\4u>c \!&y=ș\}JIZ-Ҍ m3)v2Xܭ'˯nqhvGԋޛfY g4a$VϛKmj+&2YȁpʎDQB7T#j)Ȣ<ev†A;{+7 #MEL-[u>FNA&x'/}`@v]A~j˅@<2 %h?=~fgǩ?[xMJ 泽ud;YNֽud] xG_/t@U 2[/%8¾ y!ev&)`[f.y8D)W;{M_Ϋ_u8 o -h)'1]C~Ip&hU\.4a]wpeF7w;i77K`f@xrS%~۶ UnzEZ3r9g{y} ({~W~sr A[GDG6]WW:'3z:%-Ik#R۸)twGΐw9;އU0p/[exfr{.n. cO?}>ws}>ws}>ws}>ws}>ws}>aGX