#!/usr/bin/env bash # # Copyright (C) 2011-2021 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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=979406bb541af67a6c32d51f26e5376a # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 ]$[ϙu%UvWN,WF{vWznUZٯ"Tt-@y_=z#!Mw~YӀERT۵JJ'6zsuDm@}Qz,c@MS=?ضr:|@f4x"d+ÚOIē :h{SNB7 Z'6C4KL4S@԰ukFF`B## /@4Ăk,f hv`?\Lg鶿<0 $DRF>يKVHA |ឌ)0JfP•h`! Ls$&Z@#pC}. `)*Q{'Ki ."W0)f5PNφnHvx4 TZRak6%u?UD ;TdDn=j)Q8ՅwB:yұVW2"H/ JsԖ?{LP6ےґ[eBz&iYM+PX>㶌Ę-e 7(S,KGM>NdH\B#IҒ:)XxT3=@ uth(^4ʃ )SFĈ㑪0)ݡ<C-f_vO {]ٌ\!bۇAl+%[n٘|"U+xWwWoqlPTdY/t:1Mi}[#ePǧeB.P9/|0 "%r.X9oP^A  QS:jN*p&S ֦jtBP&r3iQ7$уP8خ7c=iwDNC=PT1HKEtqBIl 2F͉<(O;\~ ^da@"Kex!Y0[QYmaG< A.\m*j=܎XJiz0=&loF[M1w8_wKon,76PÁ_lYܕY-=.qb96zd+MRoTu~ҹу/Jڨٟn~dOh5Y{(V}n?yF4Đb>E}n4D&i^M h'$/(D/)bX[吟&q=6kyDx֒aDxf*/VTVRg`g".obUG#GGd[\j!h'Ҩ=Ժ>pa|+r Kr "j\,䆒`*Lβص5^LH˦Nv+4\cvb1=oAIf7=m,;4 - y8. mG Fޒ*t?29p0B.Y68YēB`g CC,D¤[-O,0 o14luDB(1"2E2EL[n!*1 ߭n)?7 `PG*j5`B z"&9cgO E|! 3.K:>W|RUpϢStc~_`)쏑ABavp1tDkh=Eq(ņ`EmO[3(ñDI@=[x,n!gy#s CH@%Vbw\a Y[ M2‹4~(pq] ƽmskZ‹ d*LB,c,18KtY\+-7ﯬ^?i:Rj5HHƵhme-Xztr )0IH֣cg6 C¹3~ 1ɕ&5r ź63Ϣ(l!bS¥Éa, [X %IN/9UJVZO3j ! s8nC DžܕYRC?,hkc\1['҆ut!)nj^➬q ?I~OcJJ_ 5iM]H^9+luZS3 NjZ]=pp%{3-fm/Wxw.w$8|l,h\TvR=W uDV7f^Z^FZQ2HpS;]~._uRk'j~9u]=jfںDcd!TER,̭uPf1F!c EzE5#\2-R$3=HM[4:?MӃִBAӰQFMM+b_}Qy9Bo)6J;6$z$U C>{[BΠo c+1 ߃‰^b1֛:. @ Ab;ϜW~_mF.);d]sEV:#[T&F%꿢H! y\Qxd#ɨLޝs6IԦZ8pMwOMY7>CJ""a/Cp]ȁF4^mb̨$G`R*4D71%8ntӁ%TBZ-'Yk&=pdM RbYsk` +O(V;WCש!0ǽ+'Ia1%18⨅+3a 7|x9.csc9eN}{Z9<ʾ(Ե_Ǿq՗󖝜T*R#-$7@Z.i*GIpvnMUWi/.$>ot␐:NT,"Ğh;x(jaUA1ү@BVa47D7>3 TP 7܈G d0ҍ.ONL&ns9c 3~z%FLtڔI͇kp 䈙|]-~?=7|WђkGx?*ɉbA&A*Lnb< c$Ԓ5^Iw3ǬY]ГY:>-]~On쯦4{u-Gl7V+lrc?Ch)Iiy:Iu.MZ}>fdx=hkE(-G1_4'KnU2gNbQsy픛K5͢:Snmm\[+Hh'd'Ѐj!c4DI|~]Ӟwt_)OTa.`hAIlHMink h-m;j .}u|a31 0> m A(r{W'qW08'M0jPvKMl 3~_33L;3L;3$;F$1Y]eR>n'A2+C5Ѱ{3w]اpqEYi+InMϯ>JMJ._=MH:頳Y*u:v_8m/VPәڿ46K~`G%pݣ+O3Ee< Z$. Ct)͕2?ywPr rxKy l/M@LN;j$Rpnh&4g70XlHTX  e|#yE'"bWP< r{f^v hyg6 ^$f R Ȱ}iFe֫2:j1ʷ('ؾ/Cg? (а9ԨMY OCcȨl#? Vr1 *#1 CdecHh3V̫v /#LEPVui@#Vjf7( I+(WW!*:t8nfq)t1ڊ%‘+k#Ԁ}XB8a2펠bso;~:fEպer|{ymHBd s3SgE@/&o1q[QUq߻Ztkĸk ݄<4խEy] EùHU.X@p 566F or3W'x)zBMW[('N/?1lWLVVU$fyGH2D:'jP9*Na~62h4Y 7NJՀnT,N' ͡]j_(lu#mTn6$, λZKKO8r /GΞIox5MuNsrT61HKi{>Y޶iHR zY?zoKèc+T*BҶjxir|U:D"9a[mWX6K@"g,$Fiܟb8aq$חhASw0ktS+عَ(yqLm߫ 1{l*4P)yto6ͳ&?BvLDYۿb!d?C4>]יe>H ɓ'gȟV<+ڽv NAXIӦ'9y=N*kɂuXVySo%.>6UT,lTf- 9yV2'.V{s2|VC:7~ f=gBiI=p؅tc 1&bHp^e E ]VӇu־j2O]5ûr 9ctGC-BH `BVnyݬS|*iT™{rls1Y+eW5}sv*5W=kSbOO0QD?J,YgBv LQڤ>IB /~3N \'!% n(qEq|):v}fe?>Ϋhrp,2LdAu"DѠ1z I" \7*4j׽c-kAsew+i|@S I9|to3AAn淢YAWJ3X~a ;}UĤ~l@V6!uJ}1YUo=+z8@-4,H7nhU72k{6QNDjL] ͭEpN^( %acMWE:NK +4#{7HͪgѶ8m)PpUO!T(k4W~neл9U;!yCaG'댔nQTD(Q- *:GE?FnMz@؊ -[ebĿkNk r\YZ.'GOf`Jqczz\$ Z'?D}Ey ?r0{S[[%.ӥ)e -;Ϳ@{6.[(&w4g h܄ǮIjl(IB[TUyZPݴoXW{u\vR!nMC.>!ϧhŤ鑭.NgOijn""!s6)*]+iV9lէ+^sCJW2J:kbu.l&>8x pk=u#ܜg, mֻU<_`\``8ј J8w^q")X}hoHB -#[W8}^Obz^=s|ᔫNr?{S;D%\~h05f@Q:c $砮20 ؚNiWD<^&\4$ZY8P= ryJz-ޕxLݚy/&e٘W1[XH]ȷ{ɽo]lmrִjs\Sy@VuY& ,|ER%(m,y' g*|L\*J PäQ\Q͆X~W½cň(^mZ]k–0w H!"c4d%l֚\!Zb݁neKBsyM.d۾qc=*4RpϴSB9x7 frs% /z '@yhqVQKpujJ(k$bc %ZJF XOs${#dڴaڈJ7 Ԟ` 5Ѯ,k61~|"k` '6#LGD:0=zd7ͬOmhŦ1j eH/>yO\ -9j<5cc*Qg.T*,׏W/O-7"J/N/7K_*[+,KRc婄*uX6'<9HzUS0gWY1 \'  -{C]훀z3FU{O-(n3 .yJLkamy2 mo&"85wׂ@(DAybyi_᱀TN|LlQ?U˶k^ - ;& Y'v\uiǁB5=9Sd-])l ݄=1h[MbQkXWTYJڔg8ڬ7sFDJ.ã(/hǮXla 쟭 Ş%LU#tv1jtFGj-}+H #S7-1 Ů'Qch8ڣG^Y/,΃W𥉉+@E@vPu뗻p 3"(~*bF^;;eD.hExM=T;3B˧^k'?ݡB$QKX{TT;+o  ipG7Kp%eNCwU F׬'\l=+mug΁"F|Ew!UrĦQ0Pڛ#ڛG?TU(IISMͳ}SB/9y9:z.Z'Ѽ\sʚ;ne5CLKf*NM7v( Vtz`z:2jb }ݬLHUM lAw͏y&dPxYg(oqrKP AG7W^o~-W'q^7b6A 3;EзŤoKӕ fzxTCVvLu{2<OwOj̆|K&Ke퉺St8?TYƚpZ}k4.j#y(ପ!t셫Tz329bj/Kn"lIlauxM賌쐼aU:0Q+7#?'sRdN]Zٴ;??_d>!(q ѴkY HV A'[w]g'-$gJA$Fvop~„ w'r'-CKVc$b2꠼R#j_iXq9d8 +c_%l' `*%O9U⎺-(sw6t6teU(˞\7iq<ɨ0ydq#6΋׻?r'ЇK?K 02;pIwlS6A U&<[,oMh36;BP%t] O=vRt U U=S7?w]'.9Ҩg 盬W;eD._ס cLʂ>TX#ErYnƀG?=|x@Q3DF@̫%4o"U\mwLYqm -JIҋ S2š`(BM,~pwt/ܬ&s0;8hFnb/O֏rF(d9&J1 (]l7Y J>}{gY{"Jjr{ VVdG&%WKPSXW @&G篶R}>Ƕ3O]Ggf?g3f?b mCt lK2zְAK]%!`(Ia_pD1ι@j }e'qwA%_wN2B&Y- 'IʷXuAWKQ)zX+?,riVp"_$+I_j-!Tn׮mӇISʷ(!rN?TMDخQ@av`W -PDUs)$Rm%VES=Lm{,m/=4m쏝VqDu5ÖDfV1ϜJv"Ktٸ)X$ȃҳX_Lo9KGF y[=ɣ,ky& N`eN&]  awQ *7G]ƹL!c`ʃdAgVa{QjJHEwACY08:ɘƢđC ֭ʐx*UW׾e^|t洍5Q<8qX_]+&F?"mNꅲDGt{cZ5*6mtR#+:E oM@^ۚ S Zrtn Ld%Ƿ8rXu _"QI8e\轖!{-@v֠G8`q-:j̳`*:gcqP Z{XFLsoUJ]:\Kxd g,. /'؅ 3˖{} ATL˧G ;s${ih$l*61VQTS";ޞӰ+ً:9lviy!?Wuc-Z>ءDd̰gca'j-"+~ةeϱ͡bBS'*>#cOaS81Ft.;o| [4wȱcFFs#ґ-Kv Ûd$4k޵7Pq4/muO.40>]-4Qv`2U\ZhgSxRQiW}\*bUv;:)>/l)D@XM oUӳ[zMA H`Nh^ nszxqc=с- Gh+Uj Jtai)#MAF97WTHdvx:AQlWc-(CF_إ& u=kbIkL@Qu;R4p-MX^βsP#;ED#*nw?zwQD:l0#m^ZE@6̩xTIѴ[Z FCj)FL,(Oal=u/35^ \}[ʝГlC, HZYكg+ice]ԒÃ,YsL63[?Ϊ|JktaaduYfW"|"x֝ghʩU&*ƀn΍"%rc˽~Ъɻ/cWiohύʼnrugEP~>VcF8%09,Gx!Pҵ@N-Ua;sny{՟CPp83“nb#h5/AκCLհzLsx@ \::Y` wKV:K_fǗE?_'Q^`u=)N?HȌWRˊ|cB#Ge]L6V6V=G3/g3{f=Co2>"@Iqv_x>MJ8ҵON qb&fEaP}s=1(G %K'^_վYkLm  y=Em|3*{oBo'A{^;&WZ889Nwp_ԏ^=;'߯ɱrWowʰj2MadOadxac?P͗b tVuK4.=T)[$f٫v\O# 8\ 绚)[>_:%{=S ( J4Pg^zUX^Jb # Į☕V x{,Ҏ(+#uE r($1{$Y[+6J$(?bto;"4 FVMPAka.nǒZݥGR)DޮowtpGq(pd㾏uc[~TKkgQ^MEW 6.u%I]W8U5FtO_=/E GgJeXd݈O3w4ǣtdE{ޜ:t*N3dJP`=ç Xc&'Bg]dB&y8l"/UWβszlM?cu|AU2Wjxy'ĆmmmnΏ`-]Ap?5oCҀ>C5o6t:Jth݌2<̨KWz~28  UUGsw`^Gf&4n m p?좥ެ1Fo{L5TfHYR]hô\| pΌX,AOOm/[% ᡲV*{ brFVU p %/N92a6jmׯٕnH7?WP%ֆ7"T9s$MnJw /zŢar̀銵,'I-X[O*RN[T*&-*ָhߢQ'&v"Ҽ/b( $v&^k|MVF>3 :Cu vЂ{L375[u8SuD-;lHkmLv휚қN1JZڣҜ ب]P|B'%ݚw͛mej?)f/\, g'yZEͱٺO-ҭ[2rn>ASemD8'=IT;iJ:!ߕ#B1|}2Z6KRSl9~$A4q׈;]g`ż%S~1>a32"TVewb c[E[8ލ[лǖʯA- ^ =SS  ϺuG31umn8 f_qͭ}bfe}f%>3of7f3j7uN%.>5OtZ?"{ܤq{V]5cP8=8Kw8IVv oqٺ# B-֦*H2%+&`P'R9-N?Ew9k+\w dt:F&$ Z]su2kRh̋qI [rd̢;xxԽ.b( 6aFs6{'* OҮplG^Jgr]ty?f~AOZuc.^86@Aƨ;DӆF)CY^`W # Zbe &T;Wʽr#~}PANLXm7Qpq+[DmqkB™Ut$BS]ʖTy;"c+`q&&L- f#C8 c. 6IE!:&~? { IǏPڙ۩@\8hH`BwcՃ\S!P1շ(~O(_5f\7.r1H,*uZ'K:& * :ԑ=h>PxL@ڠҺP@ ʲeasp7ɦ0VRIబTA2j*pwg69|e9M,jk'ϩ3FP^8$50tc#ژMWSȻ6:<^/|!)4dm\|6CD^f59#{k”`^MQKi\2!*rKdQD.Cq!k\ \"JmryIY4ͳ Lz y!d^\Rrܘ'FšhއUz|vH"ЏvO%ab9v19݃ҼjsewTN1`d9@#safo8~N4Ǻuf\g;Db FRgd1\ 64F#d pByxM Ez;4E">SJmwB1TGQS=Fd%#NdŴcx24oS+yE;|i|NM,Sf֋ī[:e/q,]HGN*;Eeb 0\doȨؔ4, Ug4 P>Mț3-Y DlE*V0-hu7InC7q)͹'CL}U/.}bITOKpw(n-Q$Ka2dǥ=d暢d&c'rh " qبͼWMn$0'V37uO:lTxƶrbZ*JIr}KVKn*!빇dג틋l E>H0:)s]]!qQjY%r&YkSxI/xḑkv+}+fu#M喞k=EJh>h!ڡux-Z#TZ0(`{{}ϋQ8\O?ɀ˃O8r/{a'd%|% qa[Hޫ *_^#+D:=?ÇJ 9pbwGKdy5h^GY p&kQZ\zP"U*oGēm0vnP3/VfcODW~5.hn'-3xCjPɅ5UGQVD}pb[pb,6CmF սWj+t,[+f>eh6ʹYlw%DGv0S:Pc/t018ffg9 ^,v|/!ܟf{9+{G}Kj6\,ɤ{?9M_cxلsmȄzJI~ga8?zhэ!T$E- Wo7SU "΁*bD9J˴ 8j5)Cl-۲E|) OѬEz(fT=vmєzF`YshzAξi4Qm(bx\Tk kVS5oHsL1mH9Za;Kp,.77z݆dzzP" Yո޾W^_>"Ӧdnpb5]7˖09.OyIl57QHB2 evL5+ݼ; 8]}19I_YL+CPrN7@)꽷fşMcf`S!CFB  2tA'L @ TA$>ψ,w-$= 0pt[).mkv7 ^dZL0P[`6~~pmW2<D705H+֒8Qntx̘Ӟ70|Srጦx5ݠK9;KPC L*X^'tx]R pljn^ U{j. s@)kq{Wȉ ͊jɑ,d]TSSR< 8 [;Gt5'7.!6[?NLZGJ( ­EQam322\/,{"OڗyKO8^6p8)*lN"b=(Ibt%g'q{ Pu)F+KڷR_}">o6 ) fM0kjpaAb=^X~ *@%%BL]ߡӐ`JQHGn^ 83YDa9ql}zpUlVvN[ iU-2Xs-[Ğ!@nv|0@w oƸǢ/?XVkaVCy۰duI]en22a c?߆ݭW7׿X{f=g3{fs- 쨽Bm,&YX{åfwA2+w "cd}Owf(E~{ % !".ݜťZ@5 nT/8TZ8񣛀\!EnP|}Qި7j\i0aaZ] xQ4j+᷐|x5pj7;)Wui1/cy.bZA[畎?d0!!qE}Df}4/HII yĊ|K'{§ARC.Ed_4^㯸/?@q־8= idhP;<$UmeRH w:zUzebKӏ FYj4WtU71CZR\%i&ތ#3E4Qc)'19w ,8nT͆!w(kR٩: D JgH.M1 ;0YUޔ1g]^`ߣ;`vcmf 1pX=Gp pC{0AHp!ra#[ n2%'Q>-g ~^)ᖼurk'\;HWl[d ִ'o,&g%䓱{t3<gdz"vKjt7/ M } wo˗\L٭SWG*JH ȟ3Y>夵"]:]qsPKRl, ο%D햻7 SA# UvAZ'-hnt{tZ2K[^A ,d.2^$M+|lDT oPd1`>>9Y2 9ovZ <8- 6\Vz`/^_[]sK,UyF1>Vu$ PS6d$6q"VM#(L ;ЋIo0S,ڇ b:9`[4g=[K  P[A817@ܛaaj *+׀w A oL5PQ{d72*{A '}%u)O#>k l6TT T{ hg'DӔPUA`[o.}ϡ0񰢡kֶZfou) ,2hcS]S0D<ߪ۰ qC`Cÿj-zb7bL IWE9+浧D1Ohi >|M d8H(dW!a;Mf/9Ǵjasx8 Bc V%) 'ڠY@T.=+pm!_toC*3`ۿn<JD f,?C3jSfaju@^?2)jF%Z>qwNЍlԎ(aV. g\d:QiU&^[q !HLU{_ڭ^X ْ uKD{-:^RO>/PtC7ر@Qiv(+U# @J L ÔM jFcu!ի¨A`vtr[np3iq@)nId^h/AlsQ8Y 1O$d;fm7C; ӏK5:NLd$'8O3lW"}<@?ipȅK%l J~X\hKo[+h?f3LcSlcGC g*h&0b?+S@ 5}|kג]èma--0-d*f0h9}"rs *<`q_CdgNj.: ,RVVGv\I 룖gXB<.=Dɉ1 ddNrqGkS年+J;M3RbuM=(&K\j f}$☞(^8#.3 M2Gc# mɸbqCJjj3yER CtiN?P}y&r;/ٞRd$ڝNj#o準bCjEq'J@qQ*ӍZ4; TdvB5 %Phi E-bP=nE>6:# GmKߴ m=0<'蓅{صdPd sGljC{Ru۝1, cx^3L1/dV'J!`#@&2oTh:$ΘB>\T<[)=RsV|€>]UOq21O,$̥ڡA$%'7lEˆY1-YdRf+,dT#'֌8 ]բkK|melbKB0C8〆kzXʩޭ={yuF*Ț@T-"U콥@Y6$}(Ĕ.ȢA3#-;`rj7'c7g{u}5?${=g3 ʔu DkOb럝bIv t>kzaM6sa̐+7krwZJh(;EIW+ oUT_!T=ֱ,G?:ZЯ5r?=1|??_G+- ,<ڡ;SܥzN?WWg(fc2W͜o2~#d*"02@lfsкJ_ʥJ ~ÊJޡq *fR;{'L9tX_8/9]AY;oߌ5n~$~}xw?V7KN?Y;S%RAi` ql1Y?ʫdn1GyO7d ѷ&|kҷ|Qⴝ xsU=8zLJj0juan ;#0fe$~p\ C3Ƃ2CddeՌ mZLTr6ÕRL xe7xUE(̍äJ+Ay}˫Ȭt5jCTv%☂^] HQ{(*CU8v,6qIni:iiג4ķw2 lК֍ǫJٍ5 6 GswWzA0AKrW6i꼻A!gS r~ 9騞 ]Ny-N}}W7O=jG~;u|INu*_&XU"V'49mswk{_-ϰ9hGYjya>goOs6J}?p3(u}eݟܿ<.9k /r#vcuimem5HvFe܁];u6@oUtTE9߉(9p܅h8ߑ7ߑzk7ߑr6߉ji6ߍbB8u/eIdSTZmUBRIAqy\;އKNNv6$ɉ>,IvAwrxYt2Uڇeo+^O怦.0ed[:,/rd959p+I=Ro1O-T-!L0VRWGĒ|J; Z.˖ie$(MFEj嚬MX]$Iv i2=6te.E h56WYO00>z~B]~ۋe*>![yeLL.LF$d^51i!q+JNNg%U(IӬr%nJ\[4 (sudt2b>2닻/PL |8:#CIj3<M뇟e?I>.v B_Iȭ?wXHչ@K1^r4c\FA@wV$BH]sJ?>+ϸ=g\˞qٷqG 踚,u3 M5g1\Ӿ.2vm^6ɐ\-CDSOr~rт!h[CE#v((r#Α3432n:^Zޜ5#7p yR&KǨsUx̫&`ߔ}ˀTiRؑ$񸊥@L{6=GnGw td9Shn;6`},Bjyk{n2W>9~'Jڶ zp.~/Ir?bPؙٓrfe}foO70