#!/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=6d2b0af3d849ae3ac57a67d97d3c3d38 # 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 ͓ ,K]cľx]`mڒH]K/< WৄeQ*#{u(Ď8]&̀FﺬGoM(EkM+K]ϐ[_"vXݬT, &?JnF.ޔW8+g5L(;iĵ SP~FRoٝq'mFS+my , wf2_Bgs=oQ#v\,{7w {uv_5R3GLVY&Լvs])%] pXu\ %q,*eel esXqnF4'FB@ z凇Wo^9UKV0+A^0{|}Z~m~כqnGb7L*+ Zm~8 q_V 6-Y)Lnq~F܏]-Νi'j[I,\וBm@xBSvgn@v:j[^񭢋;q.u~L6#¿olšpk%j?d7jJ:;9bߠæ7)J0>þGT7~'՗x n }c{` 갫LKd2ޭBLr[(r#:nن/lд$|ʥ9hn9pLžit[F󹍯 ^V&@1GpO8rS[(*ĦLYc'-%*$abO· ;1vmplnVĶ ɾ8Tw)RLI E#0n" m1%}];),0&V0 y|j'Mf]' (UY|q.{積`d^k"\ W1xnFY"|ܯ[R&C6zh7 z/!#4\MmYf 8V*J'9htB6 +b@ Bci`:tNIĝ†QcJ+ZI_<*_B3_.L["~xЇzwv1¯/{a7x4L 0X#Z,gju8#zoƃWtT J*Xlr!= \ΕrC# [E 2KvSYbK22z^nCG<4ds '֦$ݹG2]$\`p,!q2ȁ(0=k">& s4ÏCDձl"k#\)HK͢ȲŶz)5ιLٿ^/?A|Q6}_!eb,1.KBv=ˁjw/J_W> ^a}APB2 Ӻv_1Yr} jTVgө0~?W"K\LŲM2QOj~h^ʹ&UO8o8+=]Xm!8nSl\Ub #-n~Ozhg!_@ҋ|eQbpXkxīKQGo-0[8W2*{mm[l?ԱA=,wV¯olu_DwyKݝW\P~/2@LBFUX )@&^Pq{"@Ķ6_̣6^>og{Sb 086mSo41ԜuX1)g0SHR L#(Kr1R]ᛒ)A~>:3HOF8U6.st&j҄ϙD 5HNFnv)N(߰ #Di1~QFlF1n<ļR\٦uP4TPGUݮ Ef#V={۵!@}22:K6s0jm|(ݲ +C/;\T úѤz\UiXa^:Op<ᅪZr7$Zc#QG2]ZhF!5|$8fb6X,7 ''y. ?3͜!RN D -ҷ* oI\>`ntH«Y\oZZ8(9x69irF|GXVK?s(Z~iUYW{+׫u'vWV'!^@ȳY%n wjPg{R_זQxmt'[)E iYÑgjDCiizdt!ĉ^ t;6-[ p;_ ?4|B: !i<%<@\`hC"00ǜӹ G 5OΫY7b9F )ypC!K?1-cZG|"rQ#ˮ!CIbIw 5T{ o?Ad -:f`Ee{>zɌoX<`&Dw^0ENp%ԋWpYdf'z\8,|.Ѐ0p\!i-u ;mܦf|[`xD ifކc8tD)``|Ĥ;ƿ{44apU+lm)]X6Ojk@vsG $Et?s`./ed,q!R_!˻/,L STF͂0$B:R zLo$1nAXǤO u x,^BRZa!%B:!GYdy\} ʥZlsX:yGpR`=a\xiLh6EkJ穾GӮr0b0ֵ LX0̨,;lТ^}X|a0$JvHUaxcKهuۋ ݨr 0i6QY4 n)e=ȅm lf 8JCFf_~97娩:1 KdpaБ0H8 Jx(c< J@( 0Ҝr `h4 A0]rn/"͓Jҏ5}q}|A;2 9]F:E,eᛝ" #2w@ "j`I,@-eRCQJNKtY ;2cAN$fO=$Ѝ%ʣ ^g#PbVQX+aAYb q gHSKpN~V A0+si55CX/IzU;g0̳wlUU8j";[7!~Wc5"ęLGaq|Me޾o ̼A6GHA%Ca\U9$f$,T!#1d^m_R(y|gwrcowu_iXTP`M}CǺ|'aMvzVv7VNRQZ0Q ' ID V) nI5Xs:+?"ݸ0/pи>׳v=\,tUNDIr@myiq iաBUv#HRdl晑z)C8`JP#=XH,̦zT075+S5}", R=# `Л#˒ ׈h6I,TGl籫 ?#91D{p&d:~ -~Zz}_v%ރ<}rѴ'ɔrk-嶸D{ Xv,/BڂJ'ˮ'E&%fhx[HE>QB(A`t-_]?_{M,A}$Tի} SYdi3%ғp!hZ< ѷ< 4cɱ9o( ك_)'.ԉ!tԝc2qrc ݱu(5Jc(ʀ_#9t2c͛n* N˳ &h"ɂYˋhw[QL')16D6Ha37A}Fެs&'!G}\]!#ŧH4 C&0Wڸs%" !@e`:t< oas"i/@uتB%gYH!4PZo7Vȿ'X7Wo ߫ĽpqAhm߂׶y?.YZX#>_mk,go55Zݷݮugْgi_EnӠ]Wщs"zaxz<y.!y,)@x>ibӣN!FD ^$+}E(t84Nv`io~7DI(#?bxK1=绺*ɦ)#Ӕ?m8ջǯ_b}6˩D;2oY!L/`7VCgPk#Pˮ[2a4n!Bmmo(5&T\be=F^<dthoLo?Di7<j'/ph`DB SL&~y6}V*IH|1 e_6&omc6ҍwAw VOp _JblD+J/ `՝2RicXy/[I枔iAy(Hf&Qvq;B:|V{ 0_J]Ea.UanF }pa@=E-rvP9xW]Rhzb+ۭ홤(1ImQ>nt3-]zz"VY5;f #64B>+X/)b7?H|Mmڮ%wGQWu>EjNԐ.rq6*vB:C qa0T濦ZXwSd&T-VDwɅt9MյxzyZq\ 2Ѵhup`P27f*g>?p(t6j X&^3Hǫ`W>b*ڤ|%/(~7\AoF=6{3;h+4@c:>3B=+jonc KH+s-mTp7HڜE4:1vj2aj4DAw8`  aVawlO[ZQ Wm@=m"R$)?7)ĉ5V0L^gǹ4>fI!C*FO HLIyg0,< '&w }LNlP2FU|/RU1+3: $SA Np3fuz6vmmKtj?f"Y}Um F[9Uۨ5ޡs9%z od:}J|zn=Wmx)@!IN R簌A_R=8YO[tr?6mmu (%c-<SU瀞i()|U)7$>U͏>!7$c=YJ^+?{EƲD~PΖ>|eFn٥iLtFqgaw(qUxSSZ aGęQ bHVH( qVD!<{t+_ch"G uCT D# T0OˊBfFkF*9`8J7#c*?Tu'nrb#eHcro% ?Îq̄4՜Obv6DNZ  5;bjÑmƚ'·(wFH`ѷ3 ɽ* C4BEå4HT>mK04U_5dYT^5[WLZLF荥R cs 猠 EvرbM "c[4$؆wX%nB;N GxkbC^$=eȚi> b:d;h$NNdJmBC늉X7*`.z! /zoEjNR7^Ċu\<}*",mLq }L3a|a ;Q,3i:RR0XBD`R_F D\z~ Ɋ0HldRm`IΈFp7h48*]M}& \繤dnZc8Qoa^{j7s+J n#'.( 'O'Hn.0fUk2S;;9!~3_Q}h U5P7JKM;[jI2 xA~ 1.H'7ޠ ]a@3.Y ˧c'6p1Q3 lK$zw$ i#|,ԝV' ;ۊ-:=t.ccMqOl-Z)P|BnXϊ*q i)6'0ja]>>cJ )k/hFwj%F(yoͷ_m]?Q?zJJ?Fy9?ƺ_j]>vttAi#QV :"%,;c8s67VZ*Rm vOf^կEGe=>@;]ÉO4:ƗvϽ<΁mC$/^1тuT!5.!?Oh1U^Y9$;F1I–TʚÅy~Ɇ&B""z|rvsRY QwQ)=jzxy@/v\N;tFDC/9KŒ5r&m5A^RbGW` fa+re[Uƾ*>YӸV[<"/9n,I(~,ݩ,y].ߑ\M^6^p9Ҋ]W=!Jr\z.PtzU :#2ju#q(Ź^frR˩(܁2pR{x \t@Ӓgq~HU^^/<6tnղgց{4j`Jܨı5^vT]- {i$N,p^J򺐟2J}׌-2.[R-n݂%5?QI+Kv77փz6 _\zwE@d[N6~h앗8yp6-~eNR]F%Jbq%SMX]ՉK0D#G, lj=b taWpQJRJǠF'}*/F+9EÐz7RTzEɤ!e!WaVv_<4 aG ,K4KzD'=3eGO]I 6lP'b&,wS)tE"$gLc;R+vki Uq]b6gEg# *n[;4q6iF6DU4̓7OH$,Q8ѲfǑH'kw2m)s߫dC$I! idB7$Xh5(,ۊ{ۆU4 AjO)s&7A3]~p1YGYgk\Ȯ2w_PBh[j.~U߾7bW=y_].;P.#vd+/,}L\/nQl?PdnD"{c2'@-dHOܨi;sIMg.ݷD, 3̤DnA:Wmm%IpV診g~ɯj TL5_H>o<OFjGLVچ~pJ"Wpn$X")oĞS;e,ʙwk,%zhR*R'/q֢ULą#Mh(Q52,Ɉ̒C~AAQTwϩRc.y+d10yeirhTaMXMxN>k(S.LvDt/0&7%:PõܵEk +-,|!ygbp(hi ݧ/ z7W%>,I`ZiJyU*(yLH6Je rM;W1l:qQ.9܍z,P;-!q$EBQ?X1? <G{7ԎZ=6af#f]T/0B88g|d$EA˷]P8CsULh#]f1_:ي'!I<'Lj1ڊ1؄W+Rj Nh,)da!+'}rׁg4b+?!Zg QU٠=#g1En/-;C0K=" .Áqmɑ5n8څ.c<]4̰{,3BkRʫDyKpMwwkF&Ij%#16K-Y hoKreNٱ0NzP(3<#J|ڥd'33`c}jHΐzK딮N$EXF&LA]vY][6>OތzH. 'a1x%)|u2 h=5|+*vem5%գ%t|S06'6`JkT{z4N3yP "zL5z턺?拹N̢?!l\dFcB5_<cA Jfn&4N,{<i?ͭ DРwn}z lr6[nN EURH:XQ3K3 O UXkT E @M.frDЕђtX";U:d4z.r5q:7e4R2adxq4IlWHGhÑQxApCh Ú8TKHqgcN,M~-jgbB4mnxCR#X>A3(rWY?L`X$@")cM"Ә$e0dܬ|͉6N]"W h~PpdW@r!r`. $䫆@Fg:.ᔁv<4$1gf9BTjΓnYܤ@P[50%ژX\qV 2 rBv ; " ( 02J,h1X0Q6rBkHpJI$xx4MړZq%Zaf&K^|˾%w3&e\̨H"$ph|ђJ^{69 xdo僈5g!X-݆ ~m"r2Z!) 3pؚYQѹiW'7-s\Qo^tyq~銯NLO󘺣-j"vS)۝M.x0&zT 9?K,Ri$=֖/wQWA b^<[QI$:Ieѳ&e=NDg)4^]ZBB}KϨS >BjRSd#rļ+` ӛ 2OgbiPcu΂}Odp&Ic~UI>~T8acWW 賾(zῒtS廵8uqDȿ<3U8;Y2ɧ: =ҝSy;+2$qY?OC?'W{7x _ nxp()ᱻH74w:,F茿;5GٍGɄN0XwRbXBS=,䠤OQn5+;++ydy9ym=߾\c1.\E+T_3>-TJf%;Ъgh/x(WR|ry0+yTٖDiJyihM9C9& ;(#!]BB*p7^`07/x78DfХz''—cg,a M؋Yn~=Xg24ƵX@@{oR<׏ $ȍ1TBx+soMX~ty tgcsFuK42kx K1)g9$F]BBQMJ:ԥS+'&وHO&hnS^JJjO&jdiί45p PtXڶҀTtl{:p:+ .ӟv _OrQpÅ5 p|>d/`ڃ864.UӰOBx[#RGy Sӧ6_aj ka/_Xp:&{@)2q⑼wN:F{C|) X[cd 6VmɍD7kHw"c%1fӆ:Dm"ӂ=$^H'(2l6=\8y(4hGSS߾Sp<9q꟝MH`鞫/p١I?G7cqߵ[kJ{yucȷ_bҩsb)(߬(L0 %vQ ft`MtV&@}*DP1f#D7F# 1J%#2&JR tL`B}䚔L,eس^SŰ bt䞆r&[r9 i27F"A^dX$hb.l2T(v;ZqHbلD)vܗk4hЪOxHDu;gmWZ17jF3́&wn7a!Q e:mUu'wƾzAu6ɇVێz{|hUhqvcxRoC͕"}PNZvCv[NѮ~MEA踣Wi:~y|nvY8VwzPoqQi7 < wjx牣wgY|Հa_4/~=X;!q^4~ht"n)j~y8wjB"DU`r7F]]bqݨ@zCX]īvyCRǷaY`uO{|DS:n}Fq h+o J+U%hÊub7,`Ǚ:j9hi9V7ۍm,nסOXF_3[)NkUaKavSN -[YW5ߞfY)/r8R>/4`XAM<Chfh29:Uo(@ )*ŗa(vؤL1> ]%@I= R'XLAB0QW3h֙ =r9UBd} RD[=Iv | ٔ%ęmf|4Ð%UvjCB"%%) b攘$c 89ޭ;U H(.ݮH>9boguϵќ ~W%3R%!AɹDnߺ[ =G|}hw/_m[ ~Nbrxx[R\Pr[i\!ul*edY,J@2|2j= 'mְZ=bq>%P)k*CַPOQOnt~Ĭ c.KLQʘ|M49SϻU wF'pm5ʔˉNޔ$0?N&:J*}fcBMIixj !/PhlpًqH wۍ6b%Y!(ck uX./`V]yRKfYowݣVDjU>-1G^6P59~D 탮y=kvtip{30ЭYư)ڋT`GKLE64ؠS]ݒ̮^CG[_dʁbJ+Vi8k.8((E #6,MR7{S+.Y_dභ^5;mqzoV)faqw'sNUⱑ^-ޚ}z9&Y5;'xUn0 -vザYȦ,BFhXy٧$3VxV!8M3N5zL/v UEQkj6'4 )IZU m];}9~Ej;viP* 8K5Ua>D 8JKZ?`GvQE+=]W8is 2%n!}iLM )'v֋,Md^=0wXt2y"]s1ݸ_E.U?H k)&V aɩXq+C|Lv8D=6+`1Gv'שO`?^x|)UZZ \!= |8aﲶ5ӯa!(w+n//Rks!a 9@³ơDeTzͳ~C_y6;A5_Vj5-I&pwq h6"TsﶚנsB9`7=]/dOxDO\f^rP<̞Lbw!=I1B C"dOP3:Op)Ls i-/\ua綁/] Mlsa?rBEVvo3(G2s=Es /D&dCHzXPƑ1-|Ћ [JDaa×K  Ɇ,iɌLy3UgSS[ot: vѺbS8cQؑ&lFLc,yƠACqON6}pJO,ݖobSUb01464ܯL 0+/ ؓדb&0k[G:=a .k}up%w,p\>Lir ᚈ$lt<|؞ o@ vۼBS.m~[Wþ,U= ;qۗwʼС,$eNG[ݢ&#S.y#y dz(АMj(qQnT: HO*}z\ֆw$Q!)Na qM64}G! :L%B$HQlGJ"$$8[DCC I##IQ[h1婈V/i 6w]BnH\>ׁj\=E0vZB@醌O7#x'Gq),fʅ/l POg.32nV?`VxlC/y,toBsgH q/ptRXm*1z}cNg"OQyr ay29˸1ڨO[)z!MVLހJB^DL\W`i %A+ pρ;]s2p'NJ:YKhIbq"9yYcYe1@E 5tV$8Z Dh9G?bƒ8c=!s.đh͢` 4I/:3-kav ,@»,bFifF:hwNCU(wX$e.ýwcjI]hlKQ#ɔ=x!J1ݻ ”nrR~;uO"0J]"lQWe>I%<.%j5-*r3x_q:3 ǿROQXrIXi55ꈔ)xR앶_t @QEvUO}/>{ݲ?†]4'؀B% #,zLRu'nz":vge]$ΗLy{Myػܵ[xX8ʆ›.:hEV73xv>H{V9 `;1~ oq}__ig;qχP޻3ںg}ONbCˉ }"$)\ 䔊V+k}8zӭ?䚸)^$OLČ_^,hOu|3)eţ 4_ *R8Gc#0B~IV/VԕB$Vmr uTo2%:vl1KiRqqdx J/LЌC^N*T sm}q T! =`h Ejj>>f(EĿޙʔEF>h8lQ(azsP=gPrRe Ŵ2d%u~w6f}4uEǝw$;x nCHb_i'm+R3g0oUg|~eo~qzD?)&@!}*r߮!R?!a``sOtP:lFFv89}}b5x >!Ԩ‘;(m;"OHbD=% 8 ANXJo]y(XkC]o,g8$MEtX wZ٦sg/'ڥvm?t$Ƶ$uZ%3|#29).Lb?-M [:#{F(aDo[UJ8qM"ðY0hj *c,u"V&JSh:kwZ{r h$YD&񑿻^hܰ >hmC8JlL"4W|`扑I"co='ʓƤT6h OJi=STjl=1{yP?={8b!Ea)ы^ZU2{Ovpq8 5/&3oDpHphu,9Xu&.#16Q*\ dF"~h td:,vёGwDIM!&tq95NI^#"WH0bԡ2+NG>f9 fCo |q?+Xv\8^<Ƿj<0$~2]OS#tor5m4aČk7I i#М1ywn"OCLb%X:6M2 $SxH6{,Svlc߇UO}}7HQ̯i^~x|@ AC _wRַ6p_b;?8 h9LTr KBgii|83S%V.iG(,e6d]1oPxxO)6n']GggT(ln_myno!IL6E6%dMvX&a)% s"0V}~USZ+z\7ғn1Ⴌ@\=ƟGԾ%zL.^MtFM kE]GW6l[pqm-HNak[m0#*Wk6XV #B[iN\ݦlӚRG&#e|?f4Q=SWT,80<<|ݙbC6Aflsxv9h55tIٍ]8mG̀[TSY88יLh`}((?{[g,/ư9L?sſGiL"rwI{9J qM3y+Wϟ2['AडiQ qض-qbٖԓTOW<%6חrI,sLr2y&f)7ȶd/"L, 1Pt׺KL0dUpltZ?[a~}mo珎+{:= ^. o*PC_wր頾:r/$hnu0aƘuu %y|r´Gq ҍ]d\sjܰW!jtf+g͢Dy7xJFDTY_H"Dug)}i}ۨ 2$ߙFX6&"9S|ۑ59}yrZ=1/C!PoeȼB+F,gdvNp pvץ= 3ilMRuNx"L {r0&yoDLT *ڞu(}{)œ@x?640Cr&6U2պ<8UW^m"Y;ɷ`aTԘ;솺IioY.]r|~d9G#s%8M)4cDƞAlKԬjq.W {3ThӈS(T^~ŰvRg D`TcBBw|`ޅ7|'ej N̝TL]@m;d3"74xhz2E#*9C|q =,|N%]x9-~V+'`痗{`t_KvE. 2\N(mR4P/`0s<) SqZ@b#a|Qp'8"H1y"F硻84"Y@Y4V%X}:sq9Ol>RCvnZ̽0 ɱh><2 jQ2!!+$J념oIf"򑠈wG\ShbM 5L͡ ڱ 5BQg&y#:X⏇:s%859uP`c|84@| ֌;bBtor9G3̈j,sDuZ,sP "Ӡñ` r0VMIHg%$v56AzJ90GB8bo1hNʜ F3)AL+FIg$$H P46p޻G01 s0cS,˒r.y,r6?O+kvlٰ:'غ=L^гB۾j]Osa'@0,4p \{= X8`6.0=ԪhW^0@L8M,Rģ?Etl(OɐF7,aG$+hր4I0%Pix4t#Ch)A;K <\zB)2#sL"ڞ gya݂Y%eD Jm끮6T i:s910rRŹk~ fi"+1}|-,sm;5N( L"aZW~7c??j^*vW +d/_{"11jYIV_|uO]%qQ!>|x-LM:쇖8~XsPv9 10ڠ @Α xQڡE?\-ͼ6@b%*QF5;^gW&n(HkɎQ>Ւ+!Ǒ#%zX 0/LǼWDq (Dѐ@h hِ[am׀0{ 6et)C7 q.ёK2O3Jby$g8oٟ$͇s&#EQ0HUm7?4D'j$VÒGc] XֈvEyLR}=aKOa}MpEZ' "ӼNҘl)BJL#^+- \_+Z¬Wn4c(ez/rZ]>y:.WoJbdJޮ^bPi"N*ӆs&c(d;mF^"0;,yќ*edNO'p 1٨VHvp Å>t}pХ IbɗbnL_,r=cqlw zF5ph) ͇3=x>_${G]Q>¾t 8|od4^\lQa̳ĎϺg,SzUf,7^<\- ĘL !`#U RT:(2/.]7iԝg6~՚745Ɂ<'V,rk ֎$)5.{*)w~ARP=Su1͕"J{5ܝrQE-y/v%\xLrU5;!˯1t:Hw%597)|1UEdf'&%V _J6jy"S[Jp!y-Z:-f^=4rf%͐Ua.Yt`pk#&bZG1>zU_﷼Ծ U|E@gÜAb p(deFKi8ȿ5A;tyBBȖEK($}Y܆~yN$۳1QeAs'HsH`R>TGcN(6L.R~|QvDtPULQ/P[wi 6d+79eVjڅI|]vH`o#F)1)_[aC9gÄg} ze9RVOgw>)=L Q˞54a%оRPFShLMV>Y6oűA9>k %C71lwUZusDw+G\Lgy~yB,_Ru>q)gLМŸhտ5vm ^:Y/wbLĚh=Ř%g4h@6~}Jl>Y2"/+J#o^r7@ ˡ=C͌M^&BoC&|QsrK\^,+) k{_kVx^k$2=VH)|+b呡>zVp6Eu ebE2qd3=~n/HP溎U':'7P/U_8UFǎ&qth0,."hCe8NzӠ]؉z^&*J4džƻBaД}ຢ3?aw9u$`8HRoDe%%,!~ZxOD?hzHzHzJdžjZYB^JP~ʐǔ./AP4cOGW#AȎ4AGMїE+v/(+;+3A5V^  wE]s,>giӼjVLC8I%T{)ǔ@0x 1s<D]v;x5(yy6'_ZXi؀B 4 1֞>*К;L@ܛ!;(5f/=b#NjB9'2 c`CtO#}diay|II7װ% cH$8\/yҁM֝u5䠫q*q36  v".!H҉v%J(B 𓎮- XݰޖZ'GҴJLRsԍ'L iFjX逽{+  #+DzvQCu_XxZsN9f`.4M5(ji dyabn JKQFX*+L{I^Zx̴䶶%V4'4f*_C¬#,B8Ļv>r±˶ƃFQ4de@|5nz%LnT"x0'"oNt/9v-g z7,Cѕ~c});;2]qfmcǂ7ųlyAg8zLM -|÷g G/avѵX G`00`0&8m5o u=X ;1a-HSd<%/MOT' gqBp>QT;Z~XOP S_0l/:2GKw`0kLIή'\|#qU]\"e,eOp1ʠvSDc0[nk]C\T8 &59]l=AɺL8_G3 %/cS%U RQ&h&d\>1HbYhx`I7͡mtA тv:fmN{݅H_IXșsՙSb@[g?4眄[LFkuXF_T.V[|GݫG(7{i^_?kz{ &I?:~>nls++.ͦv'ݷݮC9GXJ8Y,©HΖ^r&}YznK&FuI=D/ЫA:&qq?ldYlܽ^nOWg}{وPLEqFtt1󂷽ުE߮?nUgyNO⎞e;2o<3/]]<[ºT [TM[ᵙOJ1ocnx[|f:@cj|n:B!tY쐰$94IdRZLy݇(7jC\'*;I " 09z@N0 &6yL$C2M :FɂZ(‹Ԙ[/3`j=k904]}+yG вl}TɊJ >] sﳻnjv,lan(ꆷMmuIv67mNO.zyDG˽泠:͢Kx) nZE`bf1p nw6v]ӟE[囚>4! ٩p0q)K;RA8]_ICrp>EIJu)5"졠ͣvt?w ~p)Xd81Lp[7Pw_OM4h& sn;圞oiwZ{hF7wۼurkxayP2yW'"Ly3C29<< "?Ģn$꧇X& FK\bal?X66IWW|a b*-2Br蚶4 -:ǴsŒ5&=ָKZ Jkk<)nMLc MTeRwQIüqf&S'9{W(4@@_%xx cHGWr#YbeO>}(ޒ&I0+LΓVd.Y(w#nFsMHqNN5VOQux:Fv=ybWb l<٘MFq-89`}[=p{'y}!:?y֏?%p> "9gcDƓ6=O8zWG;8U /vorxA_/hpIsDym?"/yaa(%;:4v,I"F%+U8#WM0Ih@pGL! S3(vq3Xi L92̉@(VJ Au؜œZ*h y jhjΩ孅JY6@I.S ?{ANpG8'c¡xkhOB41֫"?BMU,XQFbѳ &p $ 2I[PԿOA4s-GsWy|?9bV#;K^6&vp{h86  Q)6K`KE(<1;&c!T i,cKBq7ghw3'~OZu 8\?Y#1 |l~!`\f{B|:R@6g;1$&R:q㨱=3r=~8#HPsz|4}![I l+=, p!i6skJD 7& .19(ɺ,N,<*"y#`f?Ivb70ynY3>=HV}`>%~>n%Vpzlht2X$ QQk!:Ēș3?(i7KGVL9@Tр>IDY{Bb.g5x9x}0ճlu 1:?MP^УefZRs){JUQmA5_(z0ˡ:ΎP\SE t%7&1# &At\}j̰h\ǚj΀@QVv~JHM<(`ϫ3tPfh !]e"U_evE9͔e\Hj?.,ԋCIp`x7T^oǟj 7ԒR;}@^g -љ1{fqx7W#v!ѽHI^ 2nVXuZr\8hs씋y2w:pH`BNGsTތ9?PA[ ժRꎣ@߹N#:9h<7 ' :!*a6@+b9l``%+!yiԪ˶V'm'=0".(y23##b gVQU!NDLK,BƜb/8">#/!C^I 2r2`dHl(l +(  #矋ߨ `#'<SᬷmR5;jͷ6_ۧڝ˗+(ToY~ +ÃOۚ2Ry:>=O?98Z>AU1c82G ̢]=X!*6'דm)$W#0@dȌLeIފSZؘ+hsG&{&G*&|Mb&ΜA@J )"@lT+ PPi#P}Yœi4@.*o%`t7l #sqUTճh{<+E4&aجm9%)L2wkp q[?=n5WcDָeAK-Ծlc(p +Tnn[vc'AMDk(V Wy?Iu;?O?ݺ.fDH`\Vt 5LJ* xSĠz1\ кvK]!DA )RLHCWtRM R6:'}*_?HVsӳ`k{3\[xomzg NDXe$7aQЩk6Q l@E1 ;XnAJ76FQ\P#}wXgbZ-°G\hpWw ftPWP@j꤃JPȾ>B.nbQE:Z~ P;0_q4Cl>yٝ-ww!XK^DbR+f4[X~F ?moXzbs+<[럟=oYuy{>_tvl+onÃ~?{bų`|;mnq)Np;`ib!툦8'_؎$&;3!aTbVU{?)aԼ` 0tJ/Bj1*{CDlOZz:q+}_>tcm[۽O{g~l=\Z+b|/E#ԣdl 8x]4";>hYnǓ׍#&l<pm|=XۆS|vbkc}<<_ ΞEJw=5NK!ԢQ )#꣙dQˆ/Ķ}iř KQJ)`'SdrQ$v]O\DiP=$vfDx DV*4>8I'8ej@"5#%Q8 .AJk5[L&>M.T.#_ֽ/|~-B/LgO7Vt,OlMJ{^?/<>d GEccS\6Z! MaL1B=A3Ø)J*Cyh,]Lcd/1xHMۻMvnP:uAt?m7iȔNO8:0:Tާe>> әi>`ømpeimX[ zYٹƛ^c;FMzJ킑FN mjVwMnʱ{+ OWX,b\j8ŽSM銯im\2_4G:bqՄ;ݓzK(LN{.ӳ/;M~뵏O[{ b־lX&˟/*2&q tPQT QWVW?Mg(՟΁tKAX=`Y~2/6AUOUvwyωpaE&Aiٜ(&<*nW(%6VM5_򬊬$k c+0TZ/~lh> TcfG?TKX,W8+̋DU9;8]zXx*LӪkj"⅄zIYILgIŇCJ'o.y5ݲrVb=YDz;ے91]qoJ%Ju9E^YܵX{M=^"VvZ%ICu>ft4L\]\sK^bvo8&'g]m1onJvPG]= pqa<'SgyAJn%O$N!`Йhhg# E?5Y\,{~_{~N|2OyYUG! Ez+-DSp>EBBzŐ0^/GDBN>ý6h:Q;Ga.앵OS:{[W~j*yLd;Yg!VE)[:Kޘ؟1!\<ٻD V{V\;+ix;3BԈ.O\+[zߐ",(!jb9^ $X,~\lE/K~+Atj`^fz>X#J~yX:k]X?T7kۙ[϶GSVzЍ,*4ěw]m LL Vvb1#}:S[=?s?s?s?s?ssJX