#!/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=1758fe851496c700c78c3d64bc3cb080 # 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 nf̍σ;~sr|[o9miNN۝7NG߰)YKF,ϫ+֍WOIKY[gV |Ϭ(!&8  p{T@I0]DE>[ ΂x8s!ZؿmҪ ժ:QUW+5}ծFf!4Qg-hOba:z u@VRfTQ4ۭdW _6#kb87۳su; ;`JL~ i߷x8z*CNAQ@fg'L|&gI> P6Y!sY>#,\\V$ 0.BhPtzIDL'~2}]HJS&q$co\Tœ oiBȣEzw^l9`=-!V!oi~'$,N.[ayex;=^ӧP;ŗB ճ$>* Ͼ*fP}IвF l `!!uJyDWf/ܩJٝṘ>*q%9J9s_ұcvr1a-NDn"H&(C8^:sٌu}O$0`Y;W\<0*V1-h(!GS"ׂG[8U$ h8)SSx38'FC 4;'SDqxP=P4GRIaSHҿr0Ў?SKxiڦ31e>D)/z- &~`IdOcZVzL?|M٭_5S֌pV|&)z$QI iBˏySu\[C c'2)&Y %ޚ+7䏨0qrgiKpx$Ukힳ09N&x #a4"Vkᱳ2\NOaz@v,xӣZhN= +O(F8}4vumHq&7 rʁ._YM\4n BN qS/i[VzGU.6~8`ReAxDGe0mJ|vLdiHEOx 7ܡ4v/Œ]T;?8@5]wvϒs3s5|mɹl:>grL>'G `+# ]3? E90Jb\2=4AG K .թu Aߕr<Ԏ@*ِ-xumj||o\9Ol=XDx@v,f2`P'a`Ay<^]C,!@3LypB//v3/`t;ܜLh+l2 :{Sl[!MBEM^ia2T6 O@%MSsE/*yxΰ+IRD4I4J<{AMCiʘh̷m# {F~S +RC ؀gXAdYt M9кM &Jl' L8bj&'l2/-{7#@Y ԂބOT;pϧ*SO*m$?h:`=>]/"kzu"gD|{\LTlDB 'J[6likѓsƥ1cwI(cnfsMmlJ r(2z,a )!`b UT掽}Zz?Ϥݻ!wZ'KGR#+X -#D3b{"IPs ^|]^Z?:~ otэcO,F8}s4pm8GU\w;e9~тVE tK_/~_N:='/l:ɮZ0G5( 4ʰ VZDyïT ,앗zaw;clIz\ rQ:5}*_ N7T^'aM(4PŎX$A3`KO| h7sZxsCXt `cczMREC<:Cw=?=D] |L3awl@KJ{:uk * DёRdjI)p 0Z 9M1 Mh}PG$eC^:G& fıdmUYb&xR8h)!4l2Ɍ7-Wl*٫%lvtJҡK#:JS~)A}&8_6`}'A(+pqE2@K.H6嗩/$֎;pmb=hՓq_;n7-Y@rVd[^*FB ,SDZPkʻ ׵MN GuS./,  { #P]\ٽzvy-hyr|A< OH}NW%ʬ#L% `< l,[oO\Y.q2lI3ѺFQ+CLj1Zp1a{jƛrs9Xd:owv݀a-Zj Ko# Q5yl! aܑ=`G 9'; PUq,a-%6"e7z*8uv#əeZh9iBqWZM.^RZz$``GM] cI q L>A > 4)_"( iQGCf .^ߘuRͽY~љw]XBw^wK^jSؿ۷t$h51RlТE^}z,K,'6]ϱBj%/mU߳lg@ r#ae/䀏fV^/ ] O H TFS Dc)&l{V0+RQUހvouivD־_7(Md1'p G5(xcMIwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`Sm8,sJ!ǻ[JͽKrp:8gܖL颒neU+E6\`$ 4;/Bd˃珰 {5FjQ2L0YΪBc0)Úހ/F/uW\VCyoUEZUUi$9/rV~&]*{. Ovhů6 `:}x,gY-'i+QH> EU} (,F!(xիd7lp jlDy7Œ>۟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[Gw6a*#=˞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]K=zu)(v'=Y^`s7~AT>hYޠy2$a'd²CzU߫*Wm萒RhD% B*ZT l$0au| :CX@%{0e,ӑDdgX&˃YTH$KΓ{kr~_d-Zй&@ag})oتn0 ܍d4oG cNr*AF3*y-){M+:HsYczCc:jk05<,^a=%ZE TyFpUv(ǀIhOY:Z/29=P~1ǣ>ufReSg'y=tՠav?h_FdԚ8A^F ^эZ缝[A0P}^.zOj_#wx$V{۫'e\݀5@0ZB=3$N-%ÊıD0Lݝ<}]n*K,ȧo>I88~ @QS8 *,4ݻޘ1󕣴n'6_/\€`N Eϓ@bE]wjw `P}稝c `sǡ%qY|ҿU:{ [yLNla2y'j"s_4J)Tgj`:, p[$\5cjƔs~ *sp29=:hHb0ȑ%1f S[( /hpҍ{D_9<,;d\e To:[^aKe4jcg#,Ͳ/yOҒYyllU~ U!p@͐u bkr\BoWB[ gQu7$e9dOc9t-` T`tX{m-vao/Pkuj7tń,"H鬲mChop6,EdVмC6 8ZMS7r`i Q XסHm#w<1_]{Y#D̕ax#5UNI?8/w>_lc]yAd^\y)#H *875t/~JvUFq72>wG`b̲6o?{^Ss6D3ì-d/X#/9 %Uʣ_7r3إaxstr_'  9\F ɻ;!Rr[O㙉ZqqHdCu <Cݬ B3V-36\. a\ƃe ޽D !:Z1F0, :fA ;ft)C8U爌(TW1HHz-_ڤ͇}&=IP0zGUv?4L'Z+Gl8UR( $Ȟa_ᐝ0WMt׿>&+ksI#u=]t4Q-u_Tf7]-ϐ -dQD>&s\e;FKvZ64<ɑ<'x1Y5.?j!9T tTy[.3s19KZ2bQ59ҏ#^E82ɕ)l?_Hm0Cvl)WᎧBxƉV1ytF-;K4<̛&+j},SJKp_Ft^4uzYj69}EЙ-O*T eMt` |ƈQ NQJ]M/\w}\ӗ(HHRvvsyC,dP3A_KM:JJ c[+WH~ͧ^_SSw X! ++a| tȟ;@w1I`S Abb]Weg(K4NWC3eF=CkI)Q8.k])5?WJJBhnFW>7.H;$Y'QzF4b}CC8҆̆ TeCuST ;%dX -PWxT,$PBF2hMKǟݺ~ͼˌAamnwyšJК8E|:8|"92 #泂 |H6]Su2t@ɥϯ&G Q6j6iߵ9didE*_Ȥ7WGҢ{qoiDz|Rl!7=N#i:hGm^be@W62}axS"7M&|f̪ r 5gJ=9YQR&kg@!>l &щQ ǟi}3uQ3Q) ľr]_E+%x[AJjry*?\[-?_Ez8>vh086-Uذk* 5mJVJ"U*PV2L ERzڪO!9#҃T?S,d!}]Jvto׷KPCeةԫԭD,`Ь]ɅelWb WN9EA:чJ4o_&d /!hnN.z=ذ$}FYY1!INZj{UPpE(w뮒(aڄΛB~o 9Ě Rͬ9{#Z{nsŽn4p5LHPsG>:֝pN)D w`c_shBonwz07Lc]<>ȾK\,^`8u/;qp{[NѼSS% ;Il Ms,m̊he u䳛B  1T'SzRɢO.= 7l`/)W[csX?@zC^C+Wy9u!26U6Rvm(eȪچǭyۧ\f?K 7I9lp=Jf<fS= ퟍnwa*_V?~z"QҽJ`}cGCV$D=3:^&aHaSGIo * c0Nhpof+M<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ_^{W-?3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h g?}V?|ws VS6jH{Ng g._猯R>G+ e=9R~ܮbnD($K :<*.L:v!_eFP)WKG_OGy(v9[Cr˳s :!-ws S6rgZS]J36@pߩ5 U0)M=V46AΙ(sZ3L׿|'#h:_s٬D؈HPhvjЃ?17m𲝚s(X4,imRy fcpﺥQ Rj˨ʿ#$㭋75hkKOݔNm3}W[[w9#9YCE8>=ѩZX8sQoH TejDU+^W&2Texn&}m=}?w74_6~nv77NʗWʗY~q>7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nW}N&֏۫s˛"M< KA/imcH*TFG3;pS=>گ5;;8@$}2?>gW}b~>"VW? Jܝo1*l$ssl wy״GBTTZ+HOJ]bQM]۽Nd|}>LO3>øI86;f08ӏسsGH8`ҀtN;-i)GIQ3F&`<`o4bPGbF<Ȍn`,]A!hG8hCS[f)1F 7=Lw:mjc~n5 h̙ ]{"z?t8l{К &IPvpvĀNMd j& */L Cݎm]W[= #I/tZc{>2t7S4/? 3ivJq .NJ8E;7j:zW=)8o׶˟ћ?͑z ױm+B _mpսUZ:N*{{GZ{[;%#S߭AR;_Z}YߩLyU?ö^AcUuP=k9 :GG5zQ;|[ߪ56~Q+A GUd56/u6vw0-*MGC?+9/޽CP*NAfl)m9cT{;׵fkyWoԊzXo`:7 mt@F+ٳRuoeДmYQZ<ӕCQOvCrYZclP" G#!4.JvN|(oWhچv n䫺]]=tRptZu*ul|0MFJDt--] $7 }Bt.v;Hmfָ^G:~Iǣ݈9i#&4ڟa %y6VLD6"~J" N#>~]|<>_Z'lIxdE%7k>M7x LDnk6fOe+wo_8,Zz޵+XXvTjۼ'.TN۴s浐O^bݑLCRvnd5iP[w%[\Ĝ$U\?!I@3ԣJɼ9DX3wH q8u4PNo4=s{NnCLpF R܉(L 8un N<m+ DrJiS{tPPDk+JrmjYhd'@W\ި/L.f cOeU̴}^ Պ#zK0pun*,>^ZgO@*i1:Э3NE%t^tI;J}XMF}X\Zev{rϬ~1 Ez?5=]j n7Vהv'")d<˰:uhUJuVVM5)gg6i1qEP+"2lS*T~awG> nd{Hh-|'_sJ|`)ȉ\Ha>,9֎}bL vGLm ?=d Ir^kC%z"00 -mOq6ݣxE5`Opħ| J=9Haibv+:,|=*椗FpTbX+Ry> 8Az|..>/ڃ;Zy }}W*7\76:zFʘ Ue Q!sc'11xG#u6LX)V#&!2tgFkmʪJΛQ;jVXQpqQxC[^hqDp(dv`t4) a֚>HewU[i@c Ǥlרq9eY7nXsZeA/ r/ʇ#=ظ7o.Ӂ`Ơ+Y?DF_iCftdO9j8:At2ʣ)6o> 7:W=90+pIbaץSUStz߀&7dx®x-`_5ނ}^8-"A93R;v-.Bz"xsM]ZCa;'J #Hǃ^?2z9)eCY"p=OA ?&_qd!KTR1tꉈ_@8jJ~_65 9qqS-Hwz߫ wZۮ,/g Nk-AmŸ> p/MR2j}X=Q_:Iϼmz70U̫陇1K40`U@FUOô")4%ЍC&<+L*HCIvCO.F/ĢuH '|fZ/_ ?p nxZT`HYn``mt lQ<X4nF$j_v.:KXAٳ*C8uCn%pr.SVjd\~Z(V{40ejpH"K\a,ZSvb&HWm(50O\rJNjzh͓dAxr W8˟iөC=5M"C7a 8ebYi67/YǑbn\#= ;JXI>ލ.O^Y8b[+6Xnrt]BCW"z>b=I{>PpED~2q]Kgf%A r eYYwo+kjv@)s̥Qf4GYJ0^֡A{ex?T喒N 2$+Ÿ|"xXC/ߌ*kcXRb=b ISaT~Y*#W6u.cne8μJ>ڬVq-J[A (s,{d3hz;7WnGR]93©rm{Pǩ oyS(jM"@_.|X.A0ScX,`0;z N֝X/ 4ҧȟ/UFGGfyi-}]bN4N (Smu_WT\!('p91ڰn! *ژɣ o$ 3Cn+t:{$lY'_%,Adh<ك ~%`áMfMϘA#N .&Qʐ*oX3mx)47 rNWr»ĺT4aog|)Fe<o4]>\JD;`ݖ>rF1֥L rڸSV oKDgU $Oi$æErA͖mxYJЭڄ {_:`Crʯ͑F- R0rC }Y/#/&ed ݎCc`-(WS Բۉz*œ:/^]:u&Ղ!!f디qvael-zh/2[2[uhۦCm8ZbC+YY{CE"f؟صSIB#g)Q-'᤬%w$(yGUzQO_O_ϖ k#ύJ? OJ-TVW|T{KU|T?SJIVoW Wj(:}؟\-.ii1ٖY1>_oi͝?ǩjK{[m[%L5ڻA!->y(쏜5{lߕG?kwsd:'̈́lN?_J酗iokT=UqMnD,w>ժ}gZd.98nTqr2YgO6`%#K3Yw -&&ۆf5?ٴ.+Ѭ/c.1``O$S[o(=l5E#o''do#z,"0J&״@ȣyQ `7vw:[~' .i hG6"X<5gTŒzOl捧Gދ\?D6!<@ jAc`Ɍ}Ah({jszQ="GrT' Sg6J4mֶ ~=OhDg1zgR` 2Hcl3)`2.NhFfpawpMq^}DVW)/i!JxsǣM05FP\)F%ۂc4g4$HFcS;9[2^vzJpA &Q Q;/tKDkTzߏƎ'LI-,n?鋎^Eer*]leW9N3,x|f&,EVv׺7hgcQ㊜Puze͏K4![PG,މd΋IֿD8à>>"ѕDpPBAG얄[㤴wtΤO# .wHml He!k^dmKψ/X_?_P~=:ICCFĬwRDiQY99ʑkw:`KcG@Q .9`7 8xɶC$ӏ'#GP+߅AL- 3b.768ަ -|H(Nzeغ>OT"Qj8$r[Z$4c 3<޶ZcW~ОCHs ^&Ff{&?kE7[-kihKgϚc/PN50s5ޭꎘ +6;IuEgL7o#^Ҿ5ٓ{*(4 7 TB'}^HG)3H!xJʃ,v4?#UG5лnd 7-|m}f4Yy'ft `q̈j(3IMD؆?jV]XB]GJ&󸥊6H4'8K mUp):adS{]>//qQ5Fb/R,Or~UXJS3$%c(Ubr-t;1u1uQpw}lVG8Lΐsjz˛ km0ji)DŽt~@ %ucXɾ8D ݖSX'IGqvV3݇G2~+s9clEX"T4O)_B?HgNNk1.kˏOZ¤8'A ; !r3r5Ǯ9pM"1fiV +AJFո1x@2xS#G'y 'Fe E3kF;x aM WYfu!b/yIKM#\7;㥵Օ=[m/'ǏON?y,OO}^;Ym=Y<{~rd=jƒv>yq6'㸵h}ѣg+'0jп & e~ȊVbȋ^$KQ@F" s:"Y[a1/0Zp CLJJ/b"pxbȢF"Hn HԹF~tu >VW,?}Q뤵rvzҎ+E 婇VǫVC(S8ޭIpt \8sGZUm 🬟Fq/?n<].\9ql}ue4>]NP,?2֨nަi 0GU G N+]Pl{wzQs0L/tX5PW3pWz+^k/,j?^__[^{h:־?}pTK;^>d"acR䠠q}dyfO/,\EI^{%uNd6iƙDN?+l. 9<7{,ݥ]G]DiP{2KAt%tr@)JP9 eϖ cP^qxURHkdkV'MOLf_J^'O?w(czt;}&Ѹ+eY Ǐ"âAqyW}2/Tby[wTz5HhTj!4/LTCxmJ]@Zō'B-ث>pi? ayjMP,h%h/fa{m`{S3[B=^нgvPKW* >B.r 8hlb Έx|1'$?lO`\nsn5Go6럚A>-};5|[jӵ}Z Y>2]FGʼTEQ7Ut! x,;=[&ߞSU0S~^|!e{:RYP)ⶖ=`vUuV8f'7vKX}zL,B'|ܩ+"[Y%U1ZpAzs|HqHUY?+]Uac;r1]z)K ת?"'np;bXW #OObC4|0pz1Ktg^rf*WrcfV4#u[L0E s4wI~򫫿۠z#fYVMRJǣIlLr5cn*@Q (Hx ($:WL "ߛbeyҷ.NLl^וOrٵa}MCHS!SƖ~lxS I~K] |r!t1`B :Z/Op{q*pOV!^Suld;YNֽud+Y !&EUjy h NDivBY@yo}d2ؖ١Kε67~Վ|zjsS_>Bnot uIqׁd Zա2A)KADy2Mr\znQAN+<#f?%T-|^V(!&\^|_ʞ__{ЖQ?ё >5Mu NEIKRf6?3?)k6n8s]o3]玪/aU) &V#^e4KS.?4ws}>ws}>ws}>ws}>ws}>w?R X