#!/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=db53212cbc79b87b3a354e9809705fc9 # 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 e̍σ;~sr|[o9mi9n9j;߰)YKF,ϫ+֍WOIKY[gV |Ϭ(!&8  p{T@I0]DE>[ ΂x8s!ZؿmҪ ժ:QUW+5}=Sħ, sVrp|ْq͟z>TMˇrcըlQ:f7@9^~I T5#L_V_WJڌ*ʓfW<&ccdM fr{v2qn'W0D|,Tɏ!r>8@;BG%CU+P<5~H2zۍ ܘIy{b-[F QT ;M5O,zX $2 WR޹;z ~_˖5QA5d ϻY¡ iz%`='B~r 3t?8I/քLs2'f5 5d.K]\o{Eߊdv^%\ J#R4i?P~ OT&kiZiġ#NY"um< xA-MyH+/-9g%*-/ 6_G3y7N/l kT` F*ƺ!aR%<#h*_9ZsWy+q0{ 'ejw @3p[|({|aš5xgqhp# W&cWR*#X 20l 6 Xw\YBg`4x 4Mt74(eeZ1xL>lT+RuJ)Ϛj?C$4)#T\c1oN byHa,A&%$K&N,s dJ|s6&/zd#Fj 3#LN)tDq}edk?x:(R:_c@0`]dz&qa)ѷ:U`;Rg}B% A//_+w٠IH!^F[P4:2 7L0H28kz%z3/BNUhbab%nGSל McYFA'xyЙm6}q+ؽ7y{\H)ݫR>8C&>0|*vቧh kA9[CxQLA>e(H{R{֧ijΒ(࿓{B%vE7I1WH&F^A|{/i(MMp]aP0O *V!~eTJuH<P ;ڣ"W㕂!k.!)ZҸdA$ј! Q,Cͤ$ֲyC&e|. slNpp0MDEF% T!2L“ܱbj,]Yբ%cb}W/2hk+(fd}RXdit(wʐuBG`phk?~˻::?᯸ª/ɯw&1\O&N*ui6ʪ=4[S߱v]^@ZIecGux 7ϼiݧOK{w1NwHjzKPbhYN7qeto? n{gU ?g/ZhA;_`~тN2V?|k%}[!_wOEMB8U &澾<@&@\J!oUd? 8ʶ >1$hLt]^0>p~\[4 ownDbLtlLoIh;:‧wY[`N'gt @äw T8(\MlN8VO0uW(9:1l+3VZlXveJP43ʏ؇+䛏{&@h:B`zOnta \A%!Ԡ7:RV-)?V!)5 du q_Ubc Ė {ؙ8ֿsv*@A@S -a4gk0lSgRԳ.801LwtUK԰QMuYZbD^O=O6&-7!55C;2'vlܢE}I^j>}*h?eӤmfeVZ**QN-W㏝61 sҙ+v,ȵ/}l0!oV' *q-K${Q6z=rdw!X%ԧlsjT-'e]@)QxWtK)w ^Rpn0C,ےI2]TrЭÕj%ճȦ[+d _`=Uv4lyVS:uOhTm^;J&ԁ4YShl&=eX7hŻˢ:*};⭪H*$E/DBe٥# nm\}@A,TO9El8Q:b ga\Jh3 6D@/z&ӛmv0d`B͑M>9#|"om ӡj#H|Y橐F#7\!R.9 %}fԅFoXZT*JCl/6Z}Ekp 1#}.-2J.:4 mJ&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]D#'ɜY` c1kG[p1a&^h7Ʌ)]Z?jq|SnecDcoV'IGE\毁1d2;0-L|NeW#U8V!ۀ!%ӥ"<JXTlѵA>OI`Lh0Eu͇K"lX/ea>Y?#s  %MDEȩџ xcG|I'("*[*isM6 'RBC߰U.`f ɰˑiDDTpfvU5ZRz9 %VtEک;}/tTa^k"xX]zJ<0)i/o+PvA]ўt^8drze'bpُGY}̤ʦ^OzA]5~о"ɨ5q4<4y;5᷂a44]fpRFITWO*^m˸޻kN`l{frIZJJc$a,;Uy.U pgYO}uqpqsRUYh w)11:LkIc+Gi6 Om^"' Ŋ3y(ŗhtFyS9-nNTG=VP&<uh\K+;QOcqF>au t?zG1Y)x?ŸAs`)-X‚|+ ( I_%e{l܎y]1 t2b{7atNp>_N/./H;d` |/, |-ceBlqEGu/+Qړ[)~^Hْ=|Ei9Mv>nzCc5RO5;tEAenhlRP0y =#x,!H86ʽϨ]C,Ylă`ܒtԌd e)SY.<&Db >xAI;7Ζb]wԈ#ydGLm6dÞh^99+ #A"gB]IE5.:Cv&ET^ x3xFk1 -|N}Ն?/Q; 6:&CK(a' uԕQ4(L=dp 3NEhS9ԈtXm᰷IBj8 @cհ3)!( !UDdrziu>i`#KcP^ry.BY$Iwȸ,Z(=ޤuGhƪFYee_>n%%ahت&مCVယ!ud/R?丄fߎcQ{Bz -6dsƹ9nH&=r rZ[x^D;~Նo Y/(E2jYeAۆ~!mXrCQ:⭠y;lqDݵ *unv -9-lůCKՑ2N=32F gyb:λFj++9kxG`)`k87p^*9g z};4Czȼu; 5SF QZ#URqn:j^>x쪌n ge6?}$Ęet9mM~vK<-l!$8lgj+YE[0_G^srJ,MgGnfͱK;1:lO@LZ rw9wB40H ~`3*uɆ 7xY+BOMQȅM72i!1gHZv%fm]'gø0.h_A{W147"5 C\tbȍaXYt ίvj&GuS:7qQ21Jbz&g8[JILz(Z`􎦫_1~hN6 Vq!`1B&:8{q5bMQ@I*=/~!;E=`⩛F!}:MW6q F8-xc[!ThҪ<}˧ 78JeK.bd|@FyeF󥫧ػ5,aPcَ1j8O2m8lB c^h7aΣrT)'sڔ8cpV\ȓ]-t(L6`Koɧ ܙ + 21B^طpx cS487+s+EnXw/ dgYaeԅi]V'[8n.S2p4Q̳3}n{i4[^O뾨Xo<[!Z 6=*-_}L&T &gʹXSw2Zlix*#yO$ [ʭc.n[?_k\ U+%~AH[ TCasnө4X騆:3]4@)*g8cre.ok6sFǽ,pd+9?S>>daL6ROI=H**c45;/6Zwx-ixtS7M:WA41mqA-6-L6_ /=Qꑤ'\ pXȠg7L5;t KDF,V:|AeO-Կ@B=WV@$?wD.c"0$ 2HLiGWPRh< Yfʌzֺ]Sg8q\x+hRj:ͯi` ̍%6}n]v"HbO37iŮhvmq )= * fkv9Jܝɰp?*<[<<𜧩_Yy +EI `%5?d"",?u4y %J-۪^C5qtpUa/WEsdDGAFga}Ll dNK_'M cm:lӾks}tV?T x!Ioꯎ6ҥE -C3/1 Nǩ ,X^{*B3ozFtzg@1D Pgld.=D "o8LN#U>ewM- jJzrL*B|@Y_MI 3?|A+fXgңS(}2f"A9VVk+J4$Õ"+!5S3U~Z~#^q:}7³`p̩m[D LaUAWkۄ(E U^@˭<+e(ߙvg 蓵UGW%?-]CrG:1VXB&*:&a:8o|#SW[cXYY9 ˼ٮB6S%@r1 \uq'ȕ(hޞL_B0ݜ]zaIb<3C4 n~B}Q&h]%{=P´ A37AހY r'y5A1PYs F4 "#{hjϑ'F}t;$wS۵4]ф B'-xaxo:}ϻ_x|}Xp^w(䝢yK4 ,vZ)@3,tYnۘ7*ˠg7=n; c@)թ6O,bE/]N?A{AoE1^R\÷~HՇ‡WiWsBdXmF1l?PːUٵ [ O̼1 fA,n \9?s{"?yxz@?sG?¢UοR>I?>^{t->tkGIN(MtK@te AZ " x1"MU%%/8au!sư)\Xx.95RN2^J7U\XX[MhlI%r(40d=U~TX.fP?R!b=&IcZ F*|¿~u1wZ0Mf"D'Rm'^?ɉGnNgtHxw<*ڱ$59tѿ*Yv"և;ԃB>ު6&QU*kT<06kr FYZ2WexJ5K07!њQYwVhM'3@V\Q҄tCp2iI3KTQjS4$)NTiUM iPhL ̘2'ǘ`=| 4xGkYo9 NjSPi.u:"D@][]ѯ|qwp04YmiEЯ??2 }gA^k7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nWѝM>խQWݭ#7E~y\9_u9;[U۩.gv,%zz|_kUwv6q!Co=H@)d~6}*LY}Ez73<;cyU"Iiyu9$98i+4r"Vn.ӷ{+ɨ`G}XrYU+Ag|rqpVemJw0U`2jqIg'&p!ƥivZ4Rţ^g=NMP0y: hNcynXC6юq$Ѣ Rco(@9n{ tjИ3 0Dp=~p5ALN:xm PyL4ATrk'^臺1~(zFV7%ܓ^ >}eLo0h^1~fbU ']]6=pv`7`ZUxuw 33Vs@_ʽ{S84SU֑S ۆ ިUun]ڄvqWgK9\IUom) ߨN)z#]zy&m+eF4nC]&1.F.D֯A.(F&Ch\x^ׄU.&Q勨C|LQ,fC߀P-Ѵ Wu z=78"U5 `$)[!Z\=^I:?o\TO7vF#̬q Υ:tGs()eG*tiMh?JlŭlDE  G|x<|tyyY9O*ْҋJn.}n& 2kZ mWן<$xOaR]j}<;dZT-?wdt*nOuڦŨ0|b"`B^wC 1XMغ+"$y IUVVJ!bZ@RÙȿt~N5A Nkttbj6bH|%tNDejNWĩ3wkp:8וpH1h]_OǞ&SʭHuޣꯅ 2^XQ*m{OT꽷\F$;BFe}c2v96۴to08{ }/seb4MP]ЭVq[ـCLvKPaӥOV>{ZWOyԇn Μ}w-*٠S lOQúl2J*l<ۋSgEWxfkP`p.қVKp'ɀN=A(N%Q\ձ-CK:W|ԯ7jI<;#ܰiOӈ+$BD]aW v(=2dUNp kދEFk;Z|Sގ?KANB2; ޅaɱvc0L'E;d2lS9 7l$[L`Nd*\E, aTh}F~(n|zV9U4Q9> 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?^Lty==][~|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?IV=s߹ ~4.JyHhyvr\^CU l^|@/U4<5G̓ћM(hгOK!~|M'>87tmBLQ&22/;U~yQGE!MU>]oH`$K+@ɡᷧT~&y*L<Tߥ`n@H<➎Tv7/`ر]ktrdYI=`f ,/S"u 5?>w)ŊVFIUgFEe)($=bj- 9Ry\?R@vx֏rJzpDUy5X\L^Rp9ƵHA[_ظ8bS9X( 6߁&9E+׃ʕܧY|"BV=zLm'z6fy@xὙmpFFbԦvRh-h  P8@%tC)J59,63ɵ1>o SFGspY *uS\vm lدzdrӐ0ThԢ_#[o4-ީdwGd5!:䧶\4]#c/P֋`zv \Uiԭd`>;YNֽud;YJŀwtBDIQZ ú>Z.pPngb[ ev蒇smMrc?߿^TWw).݂F2~su`0D7g"Vuh>LPRQ޼LE`[fo{svs 4maO '7U'm/_W03J *sǽq|~>'eyOt$OMmljuuūsB>ws}>ws}>ws}>ws}>wOGI-X