#!/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=8be1b91d37507932ef2a655b11b22de5 # 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 O&bծFf!4Qg-hOba:z u@VRfTQ4ۭdg _6#kb87۳su; ;`JL~ i߷x8y 2*_JyOըj&l˜qv'ΜtmӀ|߫xMk ΣjJ))w'CXߋ>GcKh[;zO!g~tT9ى*_ O- 5d.K]o{64'K+4]G*i~Q&qp@*l]i)38eeܱ|.x`d[yH+/-9g%*-/D<)ekp9̩ r33+=%Vي8Iؙ:QDґLpGzh&f33b־E<@,eM |^qaQnE{Hh0)q@ gd0[aM3x8E2`s#V~+9I,6zL;,p@v7:(5M<^#M6)A{Z1xL>lT+RuJ3^?g>3yO#m V*.ı7U'ȅmeH0z'%פHZ$[r'|ɹDGOI^L9/M8TlшZXA| Xs :=EOܱI~NjHj[mOEwa`\yBq##$3Tt" Țo҇ikztʕMH+zI;JvQ,= #R$. ċĜ':*,}1ܨ\$# u.P#'D`8u(̏˰ig*_NXY)w EM^ew]9cvFg7HFIG_6,zc=g{fyeLxS{8 |mɹl:>gg@ϣn 9C<F̏!tBQBRuƀ/Wa@:dg'MRounHww,$#8J6$D A]_1_7WAA3[^?6?6B26XĉAwht0)ebn(a>e<"pWאK0g^"ˋ."K8ݎ79!ƊZLN:^}3۸m0V {+oȥD-զvBBKJj`a2U"O :ׂr2)E>G{. )˰.F5DZKg}JKP,)_)yxΨ+IRD4ikx!Hw7 )c)3߂+ -0=?2.j:$zH ;ڣTµ!k.!)Z׻q;TFc`&tF5ғx6[ W$ kAo'S̩Sx'6^ce< ɵW:-sp3i")%*UH6IM 'JKlijėKƥ1cwI(cnfsx66w r,2z,a )!`b UT掽<4EULPcʪm.Q뻊}YDPs^Ô^A1#2cNp(wʘuBG`phk?~˻::7!_qSY_zÓ_Lz]c4L[Uui6ʪ \@} XLu/^L줲^w߱:Z< ܛgEuZiLݽ+Jut$7bˆ%ЂmhYtC>ɋ~ MB8U &澾<@ m@lIԏ7ʪI@}LUЛ^yv{cl&׸;[̽ʅj)8uC]TxSW5:n3OPdC!l 3Ȃ4H 3n ʕ9Nv,@*yD&;##xzu {r6{xL4Lz@S?~;o Xc5ĩSwR/<༒?c 1LIjz}OwŃ|1Iτձ-YG#XөFXnPI5(&UKJAj@OjȁmiD oDC:z=\: qڿi l@!-3q3Yx[U ZJ'x v2@q~jtF%;p;)AѠ>i/> GtxqR{ 楔DgDVdܗz S P ֎;66hՓq_;n7 -Ri~ K{ 5OiB:hB)2\צ6<;)MF2_+/ܯlN+: B5wqeo幠0?y"99&s(^3p2 e_GmhMdc (r"͢vώ1W/Uq%ermJϠmkYم!,yZ"Vwi4U]iY2Q[wq>g%F~Eͯlnjm eFŽSSo6 @zH0XXN7_NKR;n0іU-QNJSF5erKo# ?٨-7!55C;2@'4=w!d'?**<Γ%@bh^rD`c Rv9QMSWm>Y& u&w{T͑)! .h>Ug O&v/ytkٵ0Fpo A" C5H(BY>h kLū"ӢC 7K/:4 SnIK-x 4rQߓ΃mB&Fm^Z4iO|e]Ħ9ZHSQT-{3An<=>vlܢE}I!^j>}*h?e`ζ:̊>RKE;8 VQxکZB|sA&<yN:Yz%n]'jn)7.Knfpr[ IjtpWYd- Fx@S*D[;M6=|?qyXc4/%bZ)42 b]wenL>VUUUFR"P"Eґ_`ʎڍXl Aӧ"t6i(|bvRuM8^Q~ b " ьbYJvͶ8_20`dO.'țy$vt(Eoy*,EVKC1t *{zu!!&Jf VuQZl ˘GKi}.-2J. :4 mJ&7Œ>۟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[[~t->k:>"!Qk u :%L~jǭ ʂM!(-GkȥțO8B6 *or<>%ܮ1Js}}DI UW4Ftq侯~=$4 cWZދcUk mC``՜߁5t'o7_ |EfDR. t`EOIe.bΗwp "؄ r;Zg`^:hX;ܫSUGP]B"nmB>X8S;IO 5bSqfKp"\E^}dɌFkI[]ytXyEuIAzZW^0 $USo5ԪmN-51H~F'&m&֤ K#=P)@aVqT&OL(EwN^1Fq74Fpvmi1HcY_6:qRQUg,L ^BIaR)JGR;suNz р`jX G"D:.pg"3 wn3 [_`F6 Xy3 ]{fAOB#7T6I&U< Uv5KJw(gKL˜M }%22B\mGWゥLr4V 6:kCʤj%JyLۃ'4-N2dgN61x…=d~E# jC/uLvy&vHaIȱ+T,.Jl=tJ39 ] #>6oqSmۭQ:boʯ}[PS_& ↥5 6Ŵv{4nܟlpz:G^8 ,EI_@ռ+BqOm(;s_Y<*LaBt$[{ꯁe=)736bqec""Yd;7 OyBe? a]n?G5χ\aR J]K)< w*HLo YL=]bn=A,c,5Z D$5:ޫַC %dMM!=faE(m̛=gɸY]\}'O i_9i>^d07[ImҀ5eu<8As \L/>48TkcJժ8Z3:YQiN\U߁tE2߆^Fl0VJ)⿌.( P$4%%)eTA֨D+F92V{2aNW>sM׀>ٹiֿN&-Ж?$X: =hRfˈՌ`VCYx dLЖIv/RBiFÝ 46NJ4*q^h"x _V@7vJ}W;q€H * bj+a;oݨe{#[Ȫ Z*1f\ q=Igj{Lrf!H22 "&j*W~?S&e%a1<|1MY-,؂ЇW{w{_+ Q3)DGaX <b&CyΥ T~h+<<{#$+!fbb*O^E\5 +?)ӨĮ-6觴Y:˴ގ0瓪7\?+mzY;<{֡u*5_y'۶뷽:;N v?mXą)DžT)ocF*YM]435_|g*,7T6:Oe~2Jf: ow;O{t!7r|d@MueK$u֯:z`p1<uR4bv -:No1NIw1H0@wtxN&n@}*n`R|kN yV3>f883;EG.A%ƿ uw~Hfڻ :ؑ/=ۺ3-cY]pz&=`[{ /y #N78_CV_7p34r-T\M,& lYb3l(}'arf}`^klq\$heTa=4ESQi9$} i/ '!|h~JN[`9nl+e!xdB"B%FY)*QQΣP̙UJ?~{&\'BL~`?Fa>\ w H=N% s~|i02!f$-qd%5LΚ(v$`K*sرe91uOFBvVs% kI0#™#{I Yfrg݂CwqaƢ-4ss7~n6JLͶz13)!ZaUYM^H+wYYdS|Mm$@"boA+'UIH^Xuhc-_Wk6RSȱ29Т?HqND %{Pdf!cfetVϜ_4p'O6 W< Ju8MX; St],T |2ik!fq{^PSñ%\sŐTυ "F̴2fH^_h!&qBW.ϡOiX$4Q|xzq5.ІH/R~6#^O\my%0ͦ{Ik 0W6Yش?x$?PnmRnii9=W05< ΌFaZ80|xF1R+K(^S$3ARȀj+̸d0I Zע s3LwO3f֍[&D(JAE]:ҟ;2}A(n Eb« q-K4 +YX ×=rw*rdF|xuzŹ)t³obmE}4uYG*ƒ&b:S;v$f=11m _u\.~-m8Xcr1FR-WV,dwOc͔k ̨ N'=eh yMs ;-i+o Ԕd:~N%0EQ:{[vY Z6})Rx)c3mDL:?V-wsQ)>1ݰ&xΫ+ASS Uu6L7> BIE9Ch^Qh J),}Ύ VJTzdf (0XSh֤$[PFg:")CmO;i"]7 ]}4JT^ϠU-rYc|NN,”]{2e*)p#@8(0 ߉F  ۪;6FQ K9YP2ѐ ~݃OЫS|#Ef6_9zG Q/\ p;5RBu(f>CIܳ^ R%l$z|uq^#뗌 dIBk6aTS'nj}PZdt:Z|ͬ(眴P2 $Sa|6%OqA+Fd̯H ƩRsA2LgR50{lB3܇&P.F'j]& NFzjs9h||&Νa!oRkoXC:Y(@IL_wx"P18ҋt1/`Tk/{•KYuKSs&冗ҡ(IC^O#Ьgx/x(z Rsy4.PKnJEf0h^$%&)z9*tOt"^H\n #HMc1 |.q`h* "! ZZp, 087K$''q.00Ё[τBkxHBbh(v& l<7}𖵎vJƀ^7sb%f2sxG ]1rN|G<U !2jW ƷZtK V&YX&ڡѩU91Jd42?,eZEh9K+)0%jJRm +tPUUa/WEΌac\Bq4C m T9ۧ!}z0~qV3WӴOBZ GPe+/} f)qKV/Pl= Xg@(+!P@nIG:=1AHeKʓ|aIƗęV gaB1YnL\Y#Lܡ)|.E:BP9ttMv&xtfN? >.oݐ}m}5zM>'%25!{% = BOGI '||) >g\' jjyZu{7L|_Wamw^ۯ_Ju?ﵟj{R1>>oO˝3~P/U%y_vF9f'.%)mNc$ A8}UθW ,)gutM,T@b+Iq ݧwwJ/(Uh.KU'P :ih6\M8c0&5kz*5J}TRx҇" `P0I%uJCCA9^~v6T\9q2jEdCY3v9HԅW!B7*@jq4rȢ DJ\@0}kUf/Tu-oגZU{VTa+TSq?M^;3Fx$_"eSA<)K^|qI:@!5^LW(,_K: n6F КGzdmT<;,WH7ϙI2A枠~ap'؞HM 06pIaU6u/@\6 ~mTpj% @͔kB%'%˺RrBOBIP]94ôbJͪ[\.fV;6]fj="D);Ov-":edjKuA<%N)lHj&LF:xcS84p^"16 J"t+9=w/jʭ { Ovi-̤VZ';\'bq_G1%CIn0Kx 5$H1u7^S)؈ii8N]t.K2k=7S)bo0[vkES\6nKwd:ꈅA7NJ] vb('"4H0s )U΢N¾"RR&_ =61c]&3kBj9qZ)i#\u{:}I-q v׸a $e,*xTŌ͸0{Hy֘˳~$ٙ#VШ9 w|MuѺoHYvc36{/>Zfݍ o0Jז] GpfJq8g'TDɭqi|r,B6 CjOg?ϣ;Ϸ|hsq6~ޡQrNnϽYsF" NEٍNMQo:܉(ğ)>>\>ViȴDG^w/_7 ȫ{V- |FDD it4HGCq b!=EqQ A\ʌםWɲ:LrTSƠȂP4F8j9a jX$Q$0ѓs4/m # /.3$SϳbДQHOO(_od؞PR~n2^5$&.ވ{cH{R|b@gsMq낂.l|pPG.c#΢4Qω|(g TX<3E8jXZc\u7l a? yTr #_(Ƞum÷%>@"èppQc'^Lmlӫ,kwip {2g,)eۃxz] <*BtK{m_# ,E}Vm2j_w7,oh<uN>WDH-X&_/Ce~qB}vk_֏܇?6z /BА-G_#! ÉhLM/v`|YCPuR' #L)@uϝ3rmfRSї$Zϣ~+lhƪok2iNl54KF HIUuM6 ~.t~d&ElY[BY-?_Xh)OL>\@~x G=<㐇'j 7Atja!X [ 'Ax3p L%ϢֆwFkhpDW\myq ۋs6&HT ) $m*ɨy ű!=$&k5|#A 6E" B*?>^(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^F׉:|GJe['SHܤLv`Lu,**Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.:IψEV;>LM<+_+FJ=vHod QmQCl>ZnAQ.Ioa7t)wBj19I^(PQOS9C)SUveR|P;b8{b]Y?\&%5!6p؆4ϜuyOGM`Mlu┉ a°1\mC +G Wȴ)"eJdSu!` g%@5Ub*Y) 0;;J85U@C2ngQZDI3+A ĵf`hpW|)7-5RÂ/p?F9<#O/;lrcIȟ Ɂm(օ/>z(qkt3)=b'a, N;-+y#!qI&'0i$7tvN?{D\Ifmf%u23}2I5PxhOc0w^gӂ$N#,5f)F)n܍wė7tg:nXƜ (K3kKأۡȏaԹK-2c{p,CpA Ymkߚ @m ;cxT@0O**|DVQ9@lG ΰD]0=%G~ =%xqK }6Z1F_/1oIIqGXoI. -!YF!'@G~[:Fˈ.)(s0X].9ܯ"Jၶ9Siy /2$'̂{>td.ǒ%LYTb,hX͒SZk@.̫d`)SY*Cٷϣi$MlX;iHcV +IɌ}p:;})~ع6mnS9ܘ{ULJ)~!RL($CS2dE$Xj pNj:sN;sGV9̡4,NIbQ7TːJ/^9>5iR0y<w 5` *Y"QZsƜ GL_2Cm&eBt=飻v'v~$UqFMEg$:Lvi#zؑRh Ek0ʚzh^ !q'1?iE'̉(ڰ kx+d]~' mfE 0e1B9gʞmš]RHvuNQ?0zp[of&n40sOFuZs lҍFsQ>k??)O'WX몌۟&LyyaQZJG=e@nbtEgBPvl|2˘R%V@;h&`Cin,UM9ނUvU%_'8KQ1^drWh[c쯣T$z;I?Do7Zc ay~,Pep_hk|ż:=nvX[&wwx!n8xH 04tMONR5T>z'G@^7RzMVO+{à%17$'%t7ONAshN76ԉN#х4z^VR /i40d4lN1wbV,Fu¬4Α*L3j@3~?^aSVs?$[[-ѫ$E=`"L}5, L7=D´wW 7 ۨb*A"֨Q$pUֵ&CLGO P[_jֱZ@`>PF4#xsfmmAPqv2'Ӳ4ۄ;L4;ځ֪ÇPq{tqs67mWSϹQ8l֫kS;8~cg#ů2lp,8 Hl۫vJ\hЩ'!Vsoj5R%86XH/Q}] Y%6$3|sN5c.+&O<'9tEg#1]xdNFPNϩڥ vo?쟥Ƶě4tZ 9&cEtDS]hOfotW*hgRhԏz*IV'bAJ n_4N*P?@aP{'Z)boնEԾ0oT u@c#?jZJu`34toR̈́ߍF@g+nau56z$F?>0L#$$L·EÑv) cXp^:h O i=!jF NxoMh+)p;,zSIJFb7QQVKE-`M:1I #ȵDf$6u,9St@ţyQ_% ǡyIş 2/#M'&לZrGl$XGqct rqԎG@1F򲺯ۙE.?}[ &)v_W웙ڔMiwkpm ]f:ʃr0bV1]F8.y@0ֶԎ?,no[E}?QjXVi)?FMMu _sx{< 70.jTBNn:c30/k@EՔ_Db,úu3|yܠA&@~e*PF9I{@%o´Z 6`aS r[pTnvLڿO+m"φ@h^%𿞬=NK=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>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^3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h󿺲||wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?㗍G|%U% #@D?~(orK6dv}pjXY[-C*T|JUn_Z/z ___砺#5:~$H/;GRP˿nZX>Һ}gb;̎%aDT{f:N9d{=I(ϦBe8_ϿOoFUa$,c+tLV˻Ј>ZEzThlh"LupR$aUfeUx*UNY)T5ɨq/'~Ğ;DsiHK9Jz1Z86A 3x9C:7"Dft{Dc D;ǑDF'2Ka6J0M41`hSsN@c$Naۃ19N%C%unb'[P3XoQɭUԞxaRvo}>袸B)O!X`pOz033yaWvNWS2[twwRT)87TcѻaMߔy^χoԛmUuo[f߇jބ~j? wvP;v;%U9ޮ.)@nrh5JNgȫ Q}xzkļ LP}T#x~p{w5&p[0N` j[G8 p:Qé\qC!QmWwkFfO am^LqT?:>4ՍVv4_ǍZ Z8w&xyܨӴ쿃i>Vm=*X)M)M LUq 0c[GN1l&ګީmհ7X˻zVTz ԹwUh5^Ξ-p%Unc0~.;lLwEˊ噴z u=;ҺcY9qyw^{WLND/B Qrs3E }@D6kv#_-r ސ㠛תOW1׬3f;&al2P"`n)hGopx%$asQ=ްAj05:>N:F̡Lӧ w_7 K()>ȳib"QW*1p_v6(e? FgKs$K/*YancT`d_G$?Uwk^+1Q_Y}OaR]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?^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]}tM>ݣ iNOr:]sq<ل¯jJ=Rה{~mySLiI,d\te"s)S'E}TTU&AKKo~{:OWi~;Oe]z c(HegqCV91ԭzL(KT0qWTra$C3BzmaeC"dj)/XlOݏǣIX՛y!%_KT`#`.y8D)W;{M_Ϋ_u8 o -)s'1,C~Ip&hU#{-i.ar)l%o^I9"T-J7ɄyE\wD6^**óor+Қ%v9޸ws}>ws}>ws}>ws}>ws}>w_bX