#!/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=470ea0e0864d887ec6f114be1c60f14e # 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 D(hXGCBri&Ia5@,2R<"'hʘFS=4+&d Y܏{Gxp4zŴAƦq1M j=W#oGnYlh2f77Э:3g @p 0ƍ1a?ȆF7S0#a4v94F96f -!s=5F5`̬k ? t(.tS눌X#O]$]nA&:p }%i70X}V2op5x2p#[7?HhKGRzX#dbb$=c0Ms2A tj0Gba}h~D( C}ṉ%i( $F$rUU߸]k6Sb.7Nje%z $^ C e6$ ^1[c5R1X@:R ChAuљ ֔Z/ s6U*.۩y;;pYgaF̶)mx#2圝Xu W^ڮN{[]Lp،S_3;NDž5o޽;9?9}o=!x:_!lw%OB֭7}c4 yԗF?֕I9;3׶]ǎ_3Q?99swZ-z@ z57:cj^mhk/UZ3:kt;V*#o@mͦ^WM^~}}6Ե14sSr zqW {N:k֩Uxz{!YvU'qAM|n< ^J巏^x#xut  gэ+}zkn4k$k6\Ao}۱>ˆK)=[9|}Sen+ eק]r?Tiuy\g"S'a&lN zDA5w]!cN^%e {`섙r 'W<2[8{Es~Tf]Kk'6Y~Ѡ`}C&\E]eFmX}'j,lkD2$qd eSϳ'^6YÍp(hYJMkJsf#YaX͞!Lj'XjۭLP8-a'!ol~ 0h &rp?!x憐:)R:O1!(Y燹؈va(eؕp<̎@B:Y-x}z|Q|]YeΧ|[xܭ,V2`Q%1$Ta7|/YH"ãPz+H^zBg*`YaQςcaG@S P BEMBVtʽSL̋[)2cQQa`md*Ko!2m܄`rp@fc&FpII8<+ {(iDRȡ_SmdN'UGQF׎]쀧&YPaH.j"gD|zRJToDJ(-ɆAF7Rr~ աӸ&F\<] <Λ&\F_1x75ZN=v0Ѕl!`"OL kUYn:ceU5l]"'v5/Z5 Psl=fF'CJCMvvgr<ȝ?۱_+1ugF7Wg'gg;&< y&b2Py%W27V`]ͱ`Rߎ_z> IMQ;ؐ0nYr!l/q' >lX//UB- 0B &$y@yJ/ZQ:k gՒMi%^5-AՊK2[x,dD"׃:&H"XH@^+ PW_|Ie .3W)}ܟlz>}IE՟n` )-Yުݾ0\-J}溥!_2 '-gjui႔*=7{ <.i>I7|HAC \7Z)O* tY^ajV% ve7CĊ~p7'a;6@=g;|. J=~ R= lpG*zˆ$ ,|a;kj^/]K4ܐCA`c 1Pr4ȳ#w?OhM%tcZpAa?NdUH`bipr%2~}\nU`cFW= (b3lX t*racPH-BA'<`(rDɈC B\c(sK ee ZBHsZgbC:Lka2R eۉ]玎ī;F+[2@.{ZC- }V$Q@0VoB,eB!)V*\FP3)wA[7,v2& *w6H55ElUԕ+ko,i}ۍsE$O!'?c_Y15@HjJ 5: ̤SjhJ%Қ6u`7R%h; #jiZI`ZePYRjŃ'*(P>4vi HK {OG0oYK Ye`a#\T}'aZA&(Z!ρj*˿Y ~ Sm2*=m[ꂢʷ/};@n>JPBAEUZJצ94)4}JNOkSslaFBioWI|?Y컳,Wj.ԸNBTI`TY*mU}3ɶ]Tb`ߗH^k ZTUT:ptל|KpLY.kOYrUmU_}iQ{CBi1#u z|Bm D 5clbI*nw-%]oYQ $KV-~qx N`AQaFoizG(UhH8j0iDBڜ.JP $QTH@$mF"Rz%}2#AP\%L1ljg>.7_?H곕67GLm8[_yvtNϞ{}-$&mcrUԮQt#&CQdp-H<_ۉ5A7Oי}_ebZ-°hؿ#3h__w(r0U.LKI/oPȾp^"76(P"{ݛa P0_q{4}PSޝR1 Ãb %Wpcty}mwO[t6ӎ;Ϟ}=?nuwJ7xӵwOuV_tֺϞogg>YճgQgӧ߭fWs.b; Ih(# E'\ٻHbk#4%BŒ)oՖY˯Q STB~TKpB\@Qd{RĹV~ k+W6^0hFr<HL8 .睍vEN]vw+OW;So;m5#=X}8, [L9'˛7c?y"Wc]rD(9@lg2B"' 3i0;f~# iWs e K(KRG<O44C߳ (h  N6:@ p.L0;9 tBKf3Ӣ MRvF:;`uQ䳙2WTv\Ƨ^&RuQ3MRb!L{bg{O2^&B'߇o-M{b>ݾgIZ?)DR Go ^M4άm>M|@}6]b]'Z{84MFFeறjDs}YʶVU:&ix 0u-aP!y_fMkJ{hJtYEݰɏUQ$ x{C:Dt# %Ctg݀͘ g l(D{g,=`oTVfTm$or/fKhj&_Cx҃} =ERm!/~C@5{p^h@C;0>@cVP(;' a OGDte#g^$(1B^'}ȠW U^FTJc "Zo.ajT^@DL) FθEDOl+h2}UFJ٥u'tm]0CYų.0]i ]yNi ,,Ǔ匑/l`*r_eҔָzݱu4z LNZc-8&>QK1LM Io&T]= lh;uɗqTݦ,C.u27uSoTrS Qg(PmU)rG՚#܌5Ai0ΒR]liܙ\Ly$o4]>\JD;.u~U?`Axzc^9[ bwP [q!II?v,g{ 0+ֻ[ ֖DK>A)$oCSuU O`2*;%wِ MġWܷct _f]Nؘ0|5Vd'NjiZْ=H#K[!S/L9_X.?:YP%_5g} 1W¯;=}/u -TƄ~g7.N6)ǞUK-P oZc q^70 I7HutTj γeάlZ<n"7U&:ɍ79#ʲ-c6t*U9S({i+ A)[/vIՉ\ɱ|vqe7ׄTFLfCpR-\0< zlV&ϲ=:Cg-b P2-K>Nk}ζwˉ6{2;M$B闵+Zvp?^;a8ۚ7~m -e=??iGUFQͷw_eU}ٕ29#䯍J>F?ʚꡠrU>OFddAi+nudtEg }.2ڻ^dtpißw XOOc{z;r /Shk놐;U%_1-{w}O|9韾YuToxwNRm.] nGٸC۵PƝeMW6畆.E_eX3ةфSN΢%LZT[ksxF۾n)?sTLTkg)cr%hN{MA)T_}TN wT})_=iJ(^#ڣZPH)D~;7}KGޯc8) ,IN%:h7 ΂YY<& ɮbyB"$!=K^ND'{IS28臧JyG9# A ObŀDG}U%-l$0P٭׊Y!R+V~~qGos @b|"4vKrףr嗨*U9@|Wm~j㇭|2v7o%9Kb4%<ad)mH7Fp7SlABrV/Q]ƉN%%'dfΣ<,9.<P%Î̄W^Rm RV~=nAS85劶 )-UJ,ҹBϭ3jFWACo249N-gɽ+v[|Fr 7as = va !AuF NWYI-!JY"9HVh< e.D,b!We8ZJ ˢڇ ~kF/wftgaLGUiD3*:jS5RSV=S ZhTx:f<%m[643 @Oq o4|p2;)p{uI»zbެڏ0u-JƮ {59ܭJ|Q²VF6MkTk=oJ@ w]u[h,RX|lcbr.ػh6bAdc۠ L7G 1:@ Ȃ]vÐ ,;i>!yaІy% yLQ=ܶ.]e&RݻtnE{ы }UYU]SCyu܋t< j" YGAZ))LF- Ѻک6>.Th#PwǸVNs-'v0@ք9[5ć,4O}(Vl:йh{jg/p:$,&`B5חlRMVg& z4,+*%+М {Q黨̬L0:y0F-hlM&)q&)| pO0P_T F.6wR0)3ќyphmY?Yc rMxECSxv|-^{5ɚrNK31'f(8:E/A%1|LOڻ 9YCp _4=m-=B}`s$9ۻrz །0K6BV{W?jOZ7𼠑`Pb' *o睵 Ie<}u%X1 5⡻& sN )(/Yv.Gn4K5X(B.!yMCp1!_vJh`p):öm}pE46Z4s=[g6s97V,ॷC}SBl[ȇE5ge ROW TāH< 5`L>ٯ'rEbWIUr5f'9$@0琪>FW RL+IOܨi;sILbYV%af-H \[F[I꟮ߪUw|-uim5_R}о\:'deLkt5҈!ki $ h?ْ=-F1 Y/=bj6Qڂ݂ Q 8JBRTNn[ЦVR_)HݱSYz%~:;+Qh_(}??o #\'?=,!5ER9Vچ~tӭJzhRBUB̡=\4aCX贜}L& \oycipLФTO}_lEg@2H&JbCYkAfq{_PWqC{Nꍹ md1"aa5u5t ]k]!w<ɎT,dK~6_e̕c3`(䒡*3dQe6>e+ f4Ò)&16KizE딬a'mj"MCf` =SPz`*{얼symO)g oh$N+tfzu1X8ܯ;m2=![cꎎb !tHofu&߻ьOA8-2Wx0nM67ryR(w嶴׍4c'M&IUpXBx߮c*E{E=i?cn/ϠE-*g/%8cmɸ͖_ZawЎ/M 㣂bjRS?~y̝Sļr}/&7cd>mcgL⇯Gj?wq<"0Ƃ~U ?*e 㫤 ^Șωf@@̆F}RPO*Wp.|:Uq#5$;KwVla8⬟mK?60wox Q5nxp((;`/8291&ӛfלCPlx}3`!oQooXBQrPPj"Ʃa huN H?l^@Y^N^_۽=ƅ+՗O-(wE!'|N)) J%"CM)E(]e0(?d8_-eiv踝a%jJ"Rѱ 騪+8L_Kh1?yul(zjB >m| 0CA0 Kxq~$PMVT5(/S9}j6HªߢɈ%Gj689h 5}ܒmzl.ZO# Nn+/fnEJbt uZ/Ӝ=)/$nO\E6oN^0 >πp Gȓٙi4"̟.\mo rCͩJWt_a~{q[)pԙMzӛta XGuT;#^=~,'ͷDž=F7+ӃJ,Js_.6;F`aלZ"f6(2)A[d࿃+@XSۖ츱'\QRB7J9A3Rye.2pZX:m^0: [<xƵ.ܫ7n22273,]X?f~wL}6\-Ci1N듶Ȇ'f*ZNf۫N98}!0ILzV(NDȈ&q+1@]2Ȁ hK(hIC<ɶQ4a#]>,gk\`djzo;0m[Ő5л͂nQѢzسP %VI;a#?{rmsc?i\f TXJ8asǰzw?B@0-Um&P.2bkBs#ז}E>R,#+{xЬxT=صwO-g M"G]4~whY//1ŧW`YZ͟jfU5]uObܚ?rX)ʑ x x\2^ (nt$Qܬ4'omQB"bΠH,<΀[.";~}TZbbI-%o:XIrڂR{%6f¨ ЏRxswt 1U=g{}63zumL (m9jYj - AE~頺_iq2pzKHwg1l _^&1A6 x&j)h 2?®obuw"ǃhgv\ԅkq v9Ť KDsN|q@bG%nK#?[{'0%󝣓.0hzH3zHSzn@AEIaR"b캻2U_VȊ"ڽc 3Rqdw]Qenu~yr|@"IДq18@3뙹w5zۅ'ӕ2w$w-|[sMI.(yDxWGʰ/|uY*=3> cn̆4cK^z A;PO{tD;DA~=0H@'AԷ%8tt | {٪W׈5i4Ցz?A6h50]dJc"&)FfbޯsM0:));(s:֚{D]I5^`QI@>ܔnPzC]1,闙2_,h!8%I f;8zޜP䆺~ (_r ۸Nc@*~bRpOC Sqzwj$1<:;M"/J%tr)kßC.B>~J-&\ME/w11Br e7"GhpH X_WA5˚ڸ6" e[K9)_Q-nJTl/w0 1w5qZy=6QgFFl9:;G'̆d)V c)QPa—FD^΅6KA$aA~ XGf%e@zVF<=2qgmN7¢ 87 ErdNo,( ћd:Ѧ1UDWJ#HIWWp.ݎـ#@h)7kR%Ǝ;gXX"v!3OL5-V0fbI X|i1- 6V{yhx $ftIG7bJ>NN¼,v"qN'Jh߄ E fޅ7Bx &!w#Z.wiXV?x:Ff}Kv@ee#/z W3ntLf[*i `KMR$9Nvŝ٢cQek D0^HnjaM6-&iKt:9r0(@ & M]RE.LzV)e ե 1RvQ8 `An*p=u^= m%v&dVu4k Ƙ" I$%JpfکO6%mQ bi) U+xLj=Iw|P`c|o_aH.:]9!vVH\9tpnt>iI Kzz⠨2uۿ1*>MY*ux)hZn \>9QjG}ԦzkEbb,;:= TQǼ߈bw9)SR+x$aNрkJI0-m-*Ejh΅ GMc0).p-{hKIpj;Ճ_hU_8w@Td!aD>vKȬ]lHJO=ybtO' H(j{I6Uλ_= QcI<0q:(]a ,':aqͤti 4Ɋ| m:* Mc72)' 3ͅ0ٯcMKoSC-3R`y-l8 u-xVRJ0.!XNIA869z}{3$dE̡zj3aD6053*J7'<^A߼>k_OĘJ*s]*zzuI9S'␝ P !`>25mRk? vc oA7٧>CNґ2 Ґ Ws>N!~艸B4h$v]PF]>@Ig^~E) [^|}p+Q}&+VKC,vl0].Q&x /lyk\eCn5tO,yA!C|MFZRaKuNC7 DrDF!QKg2BYTi6˄ w!1BLkŽc,0 v>~%EH7o 5h≛FlӿP:Ύ20{I!Kc1禤+1 y(p~-i D%Jn@Rc(ezON-/S6՞t._<[漺˝lYLyRACjF- L1c7tD8I2H/A"b34JiU"0];ZE)C0p2U6؉Y |gD :WzVKѐ#qlw;T|hTOxIvn_=FوPl3:75$o~xEx~Eu1OS@E#)!YTz]YmrÕ PHģէAr2ԝ&U*@樒&m#yB1<`ns!uڑRb8|"P$;upedcH^ wm%D6k\Tx ,p,i˰] TMQɈKH+q',8yR9َb /VMG$V1'2{M2+Jʴ]&3&CpC-Ϙ'|J0s n6ۘ73ɶz 2{GwИ-ON$nijN?%SQ$y^!k1p3[/$}7vvs rN4\Cc`u'_Kh KD-+$}o4, |WJ{r_S3w" ٞ*+ П;AwWI`S=Z}\*7D\[RW.XO; |r'7O7kO73Fn-UWjhV Q|){GȀٚ YryMIX4"$cСBRhNMV:O-|5H_Ύ$G(w%˖TBdj|qS~31>}Mf~u?)oS=_7E -S3Ȣ[Ӡ ذQ+Mg? 8@FJ0^r( ěfщPʧu -; ]BNiR/N@=X"P5+hդB'QBL㯴>_ЋV@jDh:AuJ2H$d @w+iV뫒e /FkâpwNU~V~]EU=sސl;sj[\ v쪢 8M][ HnU"+h~(6DDUiś빾YRӛ1#k3'W"_B&*:P(A+s86T+SPNf N݄!) Y^h:Ǟ /p\mSeF "mLp]Dsʎʘh^ w2YG*LU)(*z TX:1#B$tͬ)~pL`'%cWCG|"0xh4FG;%D L,yLonKG|[}Wk4[O;ݺ?4~t]%# bGa]~X/IN#n:b˰G^XnDW]seNL~H$6~tt^tc@.i6W f%ad-hnބs\$^9҉7jI}XRNăve0yMcFQl](AHږGyۧ|j?9>-߽KǤәkOo7kE `K#wv>:c1KRx<pom_(Q"z)/Ұq:UD8iu6)WTKd&\cX ̛ ?˽~lv[RN<XvW8K#7GlLz8E Oqqڱ7p*[^Dh݈ -"H7<ٙINaz[ufƾP1Yg)Jsh#<2:I>\Q%УK \!8k`mB%$b6A䁮 t# QCp]ǦEHDDXtp y'>T8X[攒=1KH/ x3:^3d1/RHƬ!a|e-:,D@\{E(ѯ|v!8x4={duw}m`b oM^L}>kkkl_T Fiv(ܙb! i=\\ѻ~ l-QiΦD ¾v.u mӄ4;6 ,;xwŌ eG|^͆%u.rՑ.AOG  ,_rHʒU`8@W! P)MbUTR8= AaNkɉ樰J#rurZHeؼ ՓA[§Mڃ,#eX?x};Hk䝾ysJSO#dU+@"x[7gł$B(N4Q(P81S5tfXxQgRN)s~^}FV)T8O:D?X9|R֘47[i:gډ[l5YPֈ f. [@p5ό2JrvuLUa5Szsxskvw ZssWI/GEUur:`:9yڞlӓ=BG q$*j`$>,3lQD e%G;=ԬHD5sv_H~!-n/>) d IER2[k\+[Đ'e^gHSKirfv,3+dzWB滋; so0i|zJɇ3tٻj**MZ"Sɫ0GkD3!fd[ǰr$6y [ Qz~mTl@%Čp2a1=, R"P,y|/ iPDM,.(+*UCaQC5 IUjKkZ(O S,~_9gID}M _ "'LGt1, C$BJ.6en%^qI"[-ٯҳb:.QҪ}ݪGّHϴg4|;ꎢXX_,Ԉ?,k{Ex$@^ܜ@0{v7vMS<4͐eI Ϥih4$Iv1\ӫ ?pit8cS,$C4(ȿ"ۭe',ڋ$!io'I[rk+[-6ZYΔEH[ S B& @r I#Ѱ;B6Ve ar/V_xF,A >HW;NWkUJdiOI ilZ< ѵ< 4cH^dɱ9uo)؃/cuҲSQw_[o[8}~RcWs Pbʀ/g@*A!ѯMNt{; j~Hn@ ͐%˛u"(6ՙ˼ĶR Ez4=͕ݹ{XC.u_(TqdZO6l[CAruت)8 K= ?'mc4*hO!Ii,V͑jxj-;]W=9y"ŷ\+m>_QgگtJ76Vϳ{?㳼h/ń3`|w~&X#3Ef%yv{$0`w,[m}~4|c35 tP4AD =J$2FDJ69Fdt5'q6{ID$ꤾzuux@wVc9<9h\f#I 8|QkPKy>WMH*J,Q=.MFg-7Zކoo]HLqړH{<MbT@9;rI>NT3FZtGJ[`8~_H&;c 5#N|,hFPX:Z~6?.cr+D%C.zAS̄f :z!)= ܚ{F)ܷnxc'l#IId={R|d@g+_7%:uwЉҵ@]AKM4M 5"NhZ87s#y"5(Xǚ̋ב |20r]xʁXV\N`;abF=|/dOB =:θb ^FPV`B&*2h6Xr i-]u`) 8:!mNkO}YXPbBk. _9nBgLR2LѤ2e!pj1<ɥaж/֝yd7b:d,T]mKr0(Ѡ}/4'5 W"U|˒yUz a#& \yȔ [8nAS $K{!tHQ;'FBsfJc6M gN6Fw2pUmN7{hƒ1>%fDJkO P\f865K8i^_XiobIa;l4Xo8WuQӞ%ܢ}¡5=mW2& P3f\V>}ЀNt!_Mla>LuK~ }04 07f&nfQN4mb'b^zhS.=eK{XH"1DT{nEbӾtX ,ac:6ll̉Hul)qq0uIщ*]o#b:,,vlV2覅aq\RlPR,&ۛяs,N1)oqP<9Y~ ?a{7յuϩt^Ceoi$G>:K!Rv:jz"rM\V/{Ӡ-1㗩s2b]0sō3cWopCBKX~I!OIRo2%:vl1 7,p*)ѐ1QyՕ<:êP-̵sch 9& F,(anc)z{äuW^DĀKҶg(RBB)¹\QJP}#zh8 CPtPW(6L8/)45a9c,5tJ=nv^2nit~fo~=\{)`!}b^O"D""+nR~J& 3Qro 9ܔJ t 1B`,,P\>د/7; &; =hɠ)! ױ8&j[ثՎ؝IqJ?sbp <収x mL^yL_r]s5ē~aq epXϗZ01w?'iwՃҶ#b H!FdžClAf36O GѸb!u~fOdžh״^PhmzW}c氞>/?)d : ֟w mF6Ȕ<#^P˹o9ĸVx$R%K^i67"#,a?]hKf_tW lx8эz*I'N"AH nƻ΅ʠ2NDR[$[rX+!d3W9 o{-%D7lNym`lSWp6 |}_WbglL' fXۢa 1.8 λU\2۠xHeVtr;ka ы^JU2 DŢS];NJYa~tHMC G.k8M̓VԌV q,\t.7|c{&gSJ~b=#2}.fDGؖ3yS@^xqK[%SkF8A HuŶ l1+N Y3 טIef)$`EfbG'ư{C 77Oۨnau*r"]J`򠁓 oF>>gYؔVg@KY P|-`hᡷЭ8~2@S#tox)hn ;~!vc/Π4If/-jI4됧!@c+M4ݚN4/L"-%I7=isϒ0)ǟfc>z󻡜b=8s7݃= uӍڳt;nAoJ"q;:돎e}>ZYY|>ן_ ')v)9u;R׏0Z1NHR%4V+K^@?Ru}c-3>kRPSD98(*3_tN e viϤ6UBp<d,c\ßǵwRzyu,7ca?t_ƿGUyNj_W6zŤ8D$8%PJ2mp9)".p"|'A5gbx()FY`#u QݹA-cA̽L4i\QʖRV9'o"N|Oi̹uM:#Ogc֬bR3OP; 1@ 0,.\kdpƬa}_RoS^GɈPE23рP4jdJ l]3- ݎ( U$Aqo0Shx'!L1EeD0MDtP͘d? +,cb柰dd{Zt2*"T8:Wh` Cegsat >@!-8sӊЪ8>`RPGJt{Z*n@&EU??S*34&L̉458l"YS#S{BE( e}!%wj4Uj_"8X`O|VXэR,IEv;h!5AQp@n8DߣP-3[ 4WlNW~Kfer|{p8ҭ}577 dOs$ra7t4 &2hܡ4ZNxV_mur\Cx2N%~,:zm$eys{е:сN[]Ѯx.R{kkK@&%V5EU3`b+ l LJKv=ő%4DP&cl%bS )%e3qO}mVwAƌ.XMǬ03]uwNH'm+W < -YO} ĔPΨ{z~5qZL*#eJ\d&O[ bD²[wg!801B"Y᭓pvs:  GUAѷyuzu\`߿ZEG7iGOǨqUa/k+!Mn?y3vQzCj"[: IۿND9StA\VՊqR9qlU1}k8\7Dn4 x<V8; 0EĘmoP2g3qQd  0T[7OG-7X(#E]9za%'zYSowi1s]Yan &`[8W':-[Y;>>!"=, Uwi}hB?a5x~ J+U%h4b7,`ә:٫z9VXݾB/:0[NkU}WaKaF] l,wEsq;]9p'8Iݖkpbq8 vwoV D!s_ %Db(m|u5v7kH8mKKĎNtsyt F<QYQlU5Nh(OM=`g~).ͷ{tڲ"Bu0(0 pQ}ɣnDt䳗āw_?[(0:!6aw*&D. t[}xsyr>UFe9嗕<(8g[x ,u߂pmk {|hR5;%Q~N 2m4: ٜLΜW 1B.'Y9R~7k!=K|n~ţnn`*bk I͑b?ۻ.cM.Ca%Sk'YhW%9mЎ|?: ]U]J-ڴ.nv 9p^au֋h΅qNd&;W5 Z@2{UoIPRǒyj,zD-<{F[Q<\n[V0.g?]]KoGq՛գ-Bgh뜓cf@-I})7|tSˋ[:GakJ@5Ȇ~hk/⭐"Mja8dzL'53OY9tC؝EF|%Sq'rHNެ9ϑ;ǣ[A^ًe.qy9AaTgHBp?$G=tgPݠbylC.6G Ӭ 6?,Y^-;%@Kxڲ 0$,:vQQ\&:=[ 1H!pf5ȧ: efǩ t7Te~Τ7_d? |}PO9BT+Ȁ){ϟ,,$oߨ^x  v0+ƗeO3>G3 ,KI(hգ J?`,hq˭t i_YS kS`TJ3JZg{u-VDc>[c mB;!]JhmoB3J[uG-P۪m+(n՝NJu>CuK0Vު)oVQ}TPQMU9RR g(wUl ~!x/ϥG}[7ә8_K^ IΝ姲-kj DW89^)|igyq&~W˫+eT`&D,S\)R"0{Eɻ2F̆~l%l -OS#!%GTo>~tڠ%ņ'ٸ13:|XnbmؔrэzI=9BtTy֛|xK8 6$}LQ,[:zdNGgD!Z #dLfCs!uq I:Ǡ=!?xbk