#!/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=e6cb52951a45281c7bb246ab16bcbbd1 # 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 f!R0?тp lsBW%Y\ &WM{RB2$8#rT$ (f<-GqʙdhȂ2*(s<*/A !I(0gx3lzf]Auuuag3=x;pmbmp`_hg6 mf݌1p-i0k{ ]ѷn,&m /ٍiwqa-=xirh ۵a !q= +3ߚ9FI+6P$]q7q3"gfE.0P732<OLȰ7T1LA3n+ ,g@<ݱm g|Ḗ;vMv5i=b19x;qmG5A;{ &1{ 94ػkY☁ps]8 vF"U9l`^+s5q|pYYYNhkPuL37H̺dF﭅ȫԆX׽V'SVhSYRqD3ðG`Q:ñ5'd?'oN׶F_ժ5p@^Zt\PaJ0xC>s!Zؿmܪ ժ:QUW+5}eȷnV;@@qFf*HC91OYjo(rzNzurY?M(fPd%emFIQOVq`Ae1&s3=;8WK"s Q9LW\}k giǣ(dz $FMnLÁ$r=Nd- Y#yLy4@T*HӼuA# Ƀ >V;W~dGGF_W3$֬.Ǜaw[oI6 ȇZjٲX\" ;l .9d,^G"XX{MS#@3H_. -@FTϒ$<ʾ7B9U@-Rc(oB0]u?K:r3+3yOMJgH+X~̛hl =xpI5҆f(ּ\!@e{>K\ã$YR&_kM/-q2 yZ> 8٧(tz $ p"E-cՐEm/Ewa`\yB7q#nG5I3Tt" ȚoqkztʕM+zI;wQ,= F.*]9OtT3;XcQkՉG~mΡFvO #q~=>͑EatUhR.ޛ*.~%J]9c݇vFg7HFI84a?oYď{pJc"صHT%zq/nh,9G<1Qs'ܖ˦3iK9P-?-a}&|Ĕh[r8j25ϟ` ЂGP׆y/ƕsлlփE׏ `nbf/ -e(qo]@LJX Aσn5dpp=ę! *bkg1 F#ͩkNȄV,W|. slNpp0MDEF% T!2'XC'Gc/-Qy*XEKe_Q#d0М0WP<0P!癲%]'H~?[w?yu9.t:O#> 'ޙhr=:lZץicD+Vo;pWPO}ue{Bje'5vi(<.ާw>-O3wcȝ ґԈ #B  yXtuǞsu`W/uW?ζE}f|notN/~2_QWΪE~κ_/}тv|eF~Kfwןi?^t/d]`jQAia_Y5 C*~z3X+/;^{v=$wGcڹpSM0V.u(pukfU*4xKW5:nOÚPhC!l Hf4H n ʕ9Nv,@*yD&;##xzu {r2{xL4Lz@S?w)@бjS %G'&^xßy%*Q 1LIjz}wŃ|1qτݱ-YG(,ZԍN#k7$SFGJѪ%5Gj564|7qYC= Ax!NJv dRao;uΎUe!hJᠥtpаo'36Xx^g/Gxj[u9(I/{3(qO 7H~ـyxDGY'+:"^rIhF`Ei/L}'?/,vTѕlAE vp\l)J,6Z'2R3j`/ to\SeMm xvR8ryadV0_?\3/Whujf37$߼kA͓ aDsrLP*Wf e*, e_GmhMdc (|"͢vOW/Uq%˄nƟ@)$@ `qƋ[݁oTI)ThgoN$93|9#|$om ӡj#H|Y橐F#7\!R.9 %}fԅFoXZT*JCl/6Z}Ekp 1#}.-2H.: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|/#.~?WVokOmX9<{ۇTGW{=y' !w]^oDdhQ\ǣ8zĽIx8_]ޢbl[{G )F~ߩ5 "4YXTAbjAF^Etw4ׂ`7Mg<`VB)8EwI6 P_> :m}ܽ(x3n"E[_W4MW3ռx24j ;AD~R5A]YI2%(`yys GA-Bǧ֚5Fiߺ߁(IћBDjD@ꇿу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(ƽ:&vOZoV-51)r3}!}K:QNM (:׾Hl{VjLb?.9ƚ5[n[~ՃGP\TCY1h)ABxge ֆ< %9'msZb+ˎ*F>F3$Ӽ(BBJY6-kF728@;G{pq3FR A!I)DqYJmmOl4`MYn*E#N2ӋM)'9ژ;'R*.NL3NB$zbtS4iuwf&]Q _QR|/-穋$)G; }IIJyg59Jz=si%iŰULSǻպO\hA5Ov|c{I k8 6~Nj2r5#3мru޼`B'o1u;BA:k -EpgMRz3 h~^CRO*_7V2ڝ7sið|+ׯ^ IP~9~= $Aw߬ %DN$cs3@L' 8Ji^Q(&SڍP':ujޠElco6͕wۓyF7,g"q.#}P(br(3ir_QV63 'SٔU‚-}8xWH^ʼnR5 JpDp_E?3Q!f2 \ʚ Mq)^،ƃ^U81U rӫCYՈ Gnm-ڨ[Cg`9[Δ{// nJ*\EO)gV8]О)i~!o!Bh᳒#Iɳ7Ai2qi&O-r *+PUSjP:IRh~JLY;S> J}C67Cgz`ߟ^RCwmk~+ݬc4 bӆeO\\HO@:f Ta1EK<>{nP'xrx3NjT'dvyXٻQT*αGz#GTWQ֯dJRX?ka:Pk,Mj*fwآ#q4tsG}`΁Gd Tw^V &ŃCVݐ,;>}ByԎ_GdWF;3EGynU2@i]ע Mabtqgs/ IGgzVz"޷S(4Bj8,Mw)/t=x=c:uY{Ç;1ֲ! 2;O9J+dMIS+q#^zU§ީ{ܖ29BxR9-hu qX۩U&֦At*LBj-.ƍzvpSY(mp8N44cmlif/8x9SM\C&)>Dդ\k ae.Q_ W!,NU,L9ŸIbIVo EP9b~Դ[:bup"{-1[)33Өc(7&d?_MO[[?L`BtxYKLIy.Åu#r rkcJ%P~S98# 0KzdڐnuO 8Msk3StdZRaPw7ԭaA--= ?J顃~Cﱭ;?"o?_H Zoڳ u[XȾgB;t#*1œ/?:kST&fg_ss] D9[ Z Du6!/uJ+m .»mCn%{-ַ)ũ5S1ƛb)W I!PȄ350,9h":!`u<͜)Yǹ+mu"ԾgO sWaTяǰPIHTb0Ǘ;-bJWjA\R䬉b K 2w \[ZIߚSwl.mYk5_A1"9"ϜEOov.G_{v-H;yf,:BA=8pcʞqkDap oi?zlk3f^u䅴r<[E6 ޤF."L~29-QD YexZш6{uf#50E+-J:jh1K9+KReHFm&:fVFgYH0񕑟IA`|24opРTG!_L7Znm.s|zɱ"s_*%d\׊¨h39=z8-^Y)~@WQ5~8@`-fF5u66,W OXIW9#̚rI %@2<5gSbxA9:*#΁Ms׬"7i㖦yX| CA*e ]6GBQ;HQG|)r:&a7 R(fs):ڝM.ytsj.0m)?>I$*f2-jOMӔG:  `AtqR;ѠIE`7O0pt;S.mܽMmz4| O GJZjB:=A<&>SPviڷmvva}=S>| -HƏuKy xƬRP b3; /^Ggk6tYnD~ ydT w6y}S `4OԐn -5GߙM$q&ř?[C߼&:}؞hN8)^4!VNUMaK[rU6=u,Kc=BO>} rC gAwk%>z.~5M/*Ep5^җ`oa˦рxhq}įsZz\$X&:D<d|InK&,.OE6ok'΅E?§;\R# SLG4kingmLw_mnf tI>&_) W+w2x\A$d}J} ~wRUTu`Hf35=фCX1 c[.RGO '}(vUXR1z44O;w>aGn~Iŕh(h W,AX$0Jh:฻5cz_A]x{ B t]NGI(, O(Bu TWj:aPY@iBU2 v-XXlEq뼏N;eJӄUsJ=ctNJN%Pf;8 ȓ"gM]#ń|eպ$V``ih|GnvOK% ȃ¨ }t󜹪$d w2Դ(c[iS[hWy@eF +6_J LIa&ToR+Z-G.},߅ +N3Lk)[\=ݬB`o c+#|;MGs5~GW X{7Q >LI![%7=|I)Pƨ-?t}ڬ62rZ;s\7ea ,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?/p_o4)km[h5·>oUsGz87\Y0]Uv y,4sDʕ W{=ĦOzBx߼ )@D6TK/>{."czZĢbvtU~ `|Mj= D"od\g-l G\$e%E/1{v;6aGE|`xǧ$;bCoОt'cXhYM]kl7,֏ M7}-Wtmu$o7 )I)\ 攊Gd:hfVJIreyo$2܂D)swqƆ:рܩ}z#FJx~%6m̛s)_LaB4ڨN92A!if]] hGЫ3l \~rN⇤z"zudpZz=Fcx_*RA&4!uu2SL%H2rΕg[8f8$d\T^۟/ :8!粇vQ[B դQ]aiu?/NJڍAФRE:Nj}b ٥}+RpJ.-Ͷ?fڤ.@|iю{¶a>ar97BȲbEiH&"d$f ЧߺdIh!󉃶QA vw?vK:V Bvpʈrww]ݬy:*NFuwZ_apGfcV;Zy9*7.7A}O. n׆pccmRcj[?9^2vzumvj/2pDvSZٞdv{Niq~W#m:D1jMFßæ ;ָ7!5fdofzpexDI'DtQ~8lU5 ȃ9Un9Ը֖x&N+q_cT#FiRjtc(,jDT+EڶJ|.zhqtxuG-^Kn qVYMT} 9FWSfi$^h8r=gӨ)չNӶ!tzbO}oa"eRM@щr5ۭuWglrعz1y 7֔HCLbeXvfݚ/4/LJ!p sOM8^16yAbz ނ=s5ӎ 7Ciev݂m" CHՋ:uד)/y[|5ww{2SPDOH{@znJz}1r}вA eIx2a@s 8m ;:1RFkjۦs\بEZ(l$A*>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?>^[D5{'&% :2 INzqguLæχUD`0:kWTyA9\cX .,<~M )'caacs%*.,M Q6e뤎@֒m9xJkxV[xY?*,3(Tek1-#vGr>E@_ppU߻}-&qqpx/D#73R:$\[sXњp]b;ÀWA!oՉmB( GsUG u*}y5i`9 yxP +t2JZ~tg/ nphAGX׍[MXy-TWZouBG"FL ~&>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 şMzzwOeQmws3$|i-|| Ǐs3ʛr^BWhFe9}o9n*n@>)ΑT6ρn~ߪNett9c G/;^㨺|zADJ!spP'f=/`e|5۸<;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ן<+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?k+wsd:'̈́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_?_7P~=: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؆?jVgm|hMqKm2hN)q&];(XSb8hmێ8QaS (tam}}Z_^^/r٣89[Ylm=>Yn<OYyvz?]yqkikz^[;=}d6lgOqkG+VNO`LDY Ix0d5>EDuE{{b_~52%a`0@ _6E9( E'$Etاɗse XN{@|.]hqѣIkt?;YW֗4#!4S~W(Q4aq[J b :p. VQ|?Y?8^~>y-?] rhri|`_j0gp;2J8D#GSr@4ʞ-A&j+x&9Lw' lO=  VK=ҟs^+WH6{WןLWj [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~uwTsDwT=| Ja,_6 X\.\ Lr)}>ws}>ws}>ws}>ws}>ws}I?X