#!/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=bc45ae4b91119d014fe221fe24c9d969 # 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 =T`[{s8OS{WgֳHͲ^CJv|)DB|h~@nª44_71}d+e?|çOߍ^.izU4Fh@ߒI=|l/}?N lCaҠLFCgDcp4vJKx׈,b3ۉY&ؑP&IĈ(HBpKVAEkw@ lgX| !#zN3lɱ%^~0 ?+mE@y,~"􀵈'+/XSeN8B v,VND\dvrI-: `&i$e`J*c~LEz%$YP7i/|¤"NG#qz 9{aF _'$QC xؒ%CC|Z 1#BY`60 (POg4 ie$0 :h|!/ -(@e~Ę^oJ}Oo:$Jٝ]^t4Tu'Chub> R0?'wD}?U ShHr@_OjT6CmrY!@Ls1:Χ>ˁdzAƪ>?ﴑ63^h v1ՁN\,F}ljj` DQ'sb\G}Yv(@^TN>F*NEj:L(XU1SNTU$UCy#KE :FA1拹J.!׸7@5~$0Tde؟@tи\lM'eX[هC6N;$P!W*Y> n0#(J&HT'OέfeX6Lf]pq3\}#e%o4d^vC04i6\u+x Ƿ&y$6i_'u/7E|#֘OT0tzY|w=# dc"S {@bԿ4xNҠf_+ëV,9 ~6+kTjH2aG R.K.:OقPk$ڊs),Rz]ba(~@I5 ;^D,>ClFrj@!ɯ>9@{]쥖#eŝ)y(nEX ϒh.#Q>B.>0  {׀AF2>Kx:\r w)5? ˨sC.<+r ;?,- ހD"ۘil^MB%+&:AlOV`/,N=OGjp~AmBl@m^Nas>oLHyHQF^Ivc#4BNk]xXYNu[F3yH׍Eє-{(S(̱֔#x`]8g`50l\Yr-;񕗠ccQlhlY30F#PT k\vV % Ç{~-x8)AP$Zdy5kU j_xW=>uy¹zeӘE@K"DHTx|q |#+b' +Ys <0D|N~X:YdaGkK7Dn&zaG)(4V`.歔Dl͙J\Ok-dH; 1,.7D8BN>cx5R+~a>Qxw a,iJ((ȹ@J8 ‹DN &Eȸqb)"q64w?H{ff۱J%l>ʏo lX?3PݏF-EJR`#3=d*H¡{eB+5+9:1B6ΒM\9H\O@#'N[q i a/ؒ7آS%AW`'321\$'aXk_+J.q8aKa#< KO<},B6s6J=MSV4Ψs|08<ӟ`BPAUE6GD 0uUA&>-JX0EvS|s!]:ˣ䄀z~xMMgAC}0_x,mKm\BaQȗsCI&Q ]HV҇GJ(uq6y3ccbƣ96q&s8Y(u%1";.CrࣚF<*l0}$/6pr~'3'q!Dh'4,'&YO̽1 e< Y}0/am}K8D4"O: @8@kf#,bd;>J`EE{ Z(h+A1$w,UcLR>PkEiDHiE,'#H-C@GIIyQʰ>)w<x!Fռ<B@A"FzT8 oE"Sao$&ו[G]I3:&{ɍ\aM%eaMj\aB3K`qR`4ʋAPCCޏ!z+G Q ["p׉KZ 3GLU҉c2r+@ ( _4—ra|*ޅ ؇d0tn󫩮:,?`hHd(qĕogD G.wT7SGМڍ6R/U]˸\s#jK~ ՗Eޝ2lV̝ ,1IDVdCNm\`+eBwɰN+Jʡpgv͸cXO2P&^ygFָ,6 x1#ź%{YB^; D@ 9@t`NoX`K}H^)@@zjvH)V3x E@Q D@ؼ.kzF޶[ݳvgn^i7V,\< }t";8i9*uA1v>+@E + 8e7SNFXίyAicL'ũ] %@B_v|:zW_t]ӱVcZ-mvlF^ʸ_FOᮾKU)IUc1V"cr :.b4yZ e]jL W1V7 Z!Y٨[oVlU+^37KC3MԹ fx)&' AQJ$Hxhi ɣfʮż߲UHޖ]IGZf$$S5<frm9gLv qoe{i)dc:'n>Fe,1GY:A۾67^ ռ\=,N X}Ci:= `6#dUu,MU1 ʐ5z>ІhLr:Ҍ Gf01J.j3mUz9N"|op@"\ب|M|;ܦo.[ɳ@XɉZ;%8Oo= ?t)KSR.wAN珅W;qAWh4!AWPDBq-"~H['oWk<*2H^- YO{oq-SD$$Y!M@$$@:MtKk CGOrTSw5HJ}B$kժ5/U7($)Ҟ:-.h9v cd/jRkEi@Bn y4`ȤVf~*Di8T>cʅBj]QK. :=|xsgsNQˠed$3š1 AHNpp+$/X1,M N]xW>`ո`}Z.c һ@#Lu5,ϧ}ᾄ}'ָsh(qǥ'g2qyg*n_м TmY\UvwѺ>^Ms Mםvx6i߻S)t^},T[:fx\ T5럫DY\PJWW EMYоמRya g=} tR}(v2q!@3RYk e K3CM0נኯB\[ qi2Q=1L6n7s4Ai[M޼3;b|E[MMPʍpJ ʐxuo'}< א$n !VXKp]Qu*jgeyv @EOc c·qL)T9l|ILlf~V$mO'&97\/FѼf񌽧Y30 yk֔Wb^.XJOʄ5nvj}-JDa*amu[-;?[]ƅ|5z% i]3^?w5a7WDoMTnTW/8Mdh$ABBcDm 5DVɇٜq$ŴQÂv)$,ɯ }ujZQ 7kev-Da073/F6t$Gbc -r`ےac 1NyI > x%ed`HF";*0DzIEtJ*UcͰB\P 9D&> QU-lBa{V~f&n4mQj}QSM1.AC\ftE&h+$g1.8"Vo%~?J 6MH-n>Y_oÉZ!vn[l>xow7s';d)Fn!;$ (%eBpεL UH]Tl2ܒԒHeoX) ˥Z[iHgtP.fBE ;I'}IkUұh15DRPyģna}dQX v:.5FYo~Pq0~@tE.U¬)ֈh DrCuB0qYCܐ`4UIDol1$ HW CK | _S)DTQ⫢O+j/٩|z.YhybEd)gbXM|Ω">/yl^w<09{l۷^ yɈKZn2V- $<Kh61Z7Ty6'e"J1UCۆ +09|aҮHQV2PKQsnHzVH>), z:]4h ld1>e/9֊; "R18CirrVXt,` ~83dg ^4bj1T@;kpM jbɴLƪw!m;5V(#H )u&>i0)xUH1/HbLZTVZRi_=+Oʹ/8LbT e'CgMgԱKnahsYMw2\/a  ң皞+̃6@b%+nGt4zi);2έ(Z#uZ 9$;FQ̨WK6&[]X/zX 0/y$=WJ1EmL/AjDS$FAˆ\kȷm6/h@=to2a۵HlMĎPUzDFuǩ?Hp&#E4Yƫ^1l~hN6ͧ Q)1B.LkŽc,kDJR>"$ׄekt⩛F|?9k%ĝK4Yq0'E^x1Ң%6{R9d(ezONϺg,SϪgh3/Wd$ m`*&Qٛ51UƒiO?iEdjkޜ53GBIpCss!ڑRcoDr_'Ug*BDvC0͕]#J{5ܞe\ U478cr4e.PqU6e7$tKiR${r`?B 똰G%-p'LuI|1LVt/If!K4'wxA6): 2UжkǴ}Έz>" 3IaN͹:zXX&k)}#ykQ=қ_X$$*̍lYt^!{aY3PzտgD$ TYņw'HcDhR>TSlo<~_A&JN?lNVGT.f,dRO)Lk#8qL^)ݟs@%.XStɫm%wtz #ɂ}>CzsSŮǠh~mq [vwD.5j;Vj0( ,2u Ŭt?*G-`xX,"$cP[D(&C֐Bph<5r5H_fΎ G5Ϙf~!&FQm8P?^WNJ8kxtVP`/e%UP3wK*鲧D;:Ӷk70Rޡ>.-bh/<Ҫ Տo_m"$>GaLd@9Ub%ǍR`(ۙIiFOmȄ@Zou{t 95gJ8YVRkc@!>֬ WD([!}BWZ/L+ Ce|]7"q4Q ĉVj)NZߨn+vHBAJaQZuONU~Q}]EU=sɇg@SZ `cWUIWڅ(mW`erQ^D˭֠wxb(>f:H*]VTt]W32G9ٮ?sG"xN,}L/'r5hB # /tK;uԓ4ɇP͒s)ñW$0=idMsLz%ݾP܀;Yў:ZɅ ݁bݡ^6(7+ #k)Dv;-݌5)m ܊$^9ҙmÊ`N[[Z9Za,K9;حʹ?Q ~\@1p\̬"GU7Kr)t.<V䟼f4R=!xώnw?y?'㓍LGxtws?"{:ñ$YgI"A>5̍7Gy^M(E;Rԡ&!O)!:u娭z(K.x$VCR<(d4X#6]!$8Hw)D>RF8w\/rM{eѹ.R<|. l/q$ ~[xToG|,ζ)͍ؒ7Ծ<`K͏RKhɮce尤r<ƈ8L1[ {w9^vڃP\v#;uqhr+. UL6K;T|T;s)M$! ~U; VPWib`[bHlQx-ؤRXiǻCy[LP\15^Ǹ{EefeWѯ}l2ۍa ҝ/6\UB}\<lٱcry/ÅIʴ7qszGH8faHJw:lj6n,Fk7­ gcNPpfu_DKj08쮜ϗmaA>#=Jv|8(/cv>"_8_/ PMB0[Tl=s8V%lLFre4}xRE59 EG3\8z\%=c[+pJ#-ÙȲ젤H$J:kjEn-}wBU1}qhp.M% {N+42n⦋DQal / g`J2JbdI=ŰS +rleo/v5]\sT8\R1:t̘)65ra`Jo4r8[:@[bSBI'bc$A ^8ƮTtR}w@x;Ri 1A@`.K,b/#RL(VnL+0~w۝zQ%FJ96[>R-WCb XO5f|kĦ؆U66&NɴqF6FU4arjK=i/ %d:鍆+8<7/\;&~CUKje uR_) eW)jp1cwϞZ,=zPTqm].?dyȸ*5.dWc^ڳL#Xߜm'b[=za.*8PDz-yO҉+O7`5ߓLr¿5cyFIH/!Us}F~}މ2!b"=q$%5jn.9!NνIe&%r ҹr̵e$9QuN)_[Wu/6G75Fx"4bx1W͂Awqqpdt,ɚ>{?h1D,a{S˵%Ҽ$/$I[2DT:WF7@w`,?]UQ4/t_Yы g8_Vsj|"m`i:'h™8cBvBWD|Eb;e,ʙl<=WH6ٰ9Zix$4i ˮ)WeykAfq{_P|qsjŠTo̥`a8NQ(cppRcLLXMx=t BW.(OiZ%燚|xѸ?*@YǎWs.oZ[:o$MGaM GD",Gr03!:0v|`ZiJyU$xFQŸp$jy'\+YD0ڋPr^?7x nđH'YIBH PBlZCb!AE'I2qTEEgH2#v+Fg)G}wfN>?Ko-ߊppB7wEK/<~e체AnϹ!=\Ha9:Yo?s8K!ysxFlxt*rel2χ"?^=c.&]`w7J%RA8E4" xyQ҃M'h-:ҪB!7IA9m8Xs21NR];ّ%ז?$c,)_BEyƛa㣥Sвnܘ)x I,dNH)}3ZeorRi^@KnB 1qդO'FhX1Jj'e?zP+*vemG޽ַx a V@pP9jhڀeNړc̻`.rE1N8qaB|:T JfkT^f;.l#bX?Vjg>H(P`l}'NdSlB<4\ېgN$a: %6=+&%D!jk("'+ndhr;ҕx*;~ET@T\&*&b \2Xtc-v)F_:$1xbC%烨fԻ2U48)J烳3$*m{0'iR,^ z? -&qt_'Ss 9ϭVF,\>a3(|[0~aLe$1IXNRVPś/xNޠ 6FVqlsg@ÓկB`f-It_XbeH!28юF,yEr@%ɈGB $]2(j M e[\E{-FRNgؚ9qSNq;E/Ai qUvSwtTGcmsWB|3;W^h0}͌f|0K b ,yX|]+HY7c>H1O*3>bmu#Mv%&@6c iQz7=R;I\8L6ƃa< hvq-9C\7aʛߥJ4 ,䠤(DS7(ퟖ~ټQm6~kv9E՗O5Ү(E!'|N) J{El)xޛJY̶t< O)ɒ>A<4\VH=$y$x.="%}/į5uw1`07Ccdꬆ.ر5ri&a|YiBYҹ0Own~a,JcB~RObLL[8!vY mu:\u/'PZ07J(*TBx+sSoMX{aty eBd=':ox[no+`9ϧȎM19' F4V%"QMJoH)'A`A p ʖ{\.Chy/%/S0^h&PA6'_k \\džpq&@hs!}~3~ıqA+AKxqy4P<1¡(u ʫLoN@|aw_X1hLRx$oQ耓ÎP# -ߦRߩ`Mtbtԟyq 7]dJLt^Ix!qp}*ʰ ,pQhЎ0q|k(E:*]-(>y>OLo7dDqcy'>fǠ*Aˈ*^jluEQ/N0C~]tW7&._#A. Mca%w*:a1ڨOZA#ÄI'€Ŵ:L돍ʚ9ほ>saG]9^,tP܅w.`VixdU͵q,] =dG^=Nw[m]66mSR u#&eXmuIy'mnۜÄҘ1o|8B3'.#j˛cfrzm|7R'n~ʤoEC(W@Al;?<+|Nv;KhF7wݼvr,";3sɀyu} 7;$3؛eJNj ^~x8.a`r'q 3#? FSIiGz*/|HFD4Ȁ#^Mx2%ü ߨb$5lpI5HOF<JفPuO> t∲UJǬcG^><-JlAh8$eu3|x\*ԅ~!QL}Iby~A7d{xN?wd9{, Ǭv^S=΅@1[5BG U M>9e*χZ67x `Je8s{ dk?xL)?n?ٻ+5 O.x:RJS ^C|{y1 [cͪ;l5LL[ .C ȤAD3x~(g\OKަaL'UTR!;<4,`{t thHa|i`)+G0?A55h8p#j<_;<~bvm%-i U?4q[bv.i#E3h-gz2<R.?g`%e0|E&t:%Z"EGhY{Nd!p9']?TT?PdBA޽0M9vk@c(߱WaR\ta(~FWzqlB|8%`1&9 ^ft.$8LdJ' >#š&SgFEr7OtbgkTfCˀOYfWu:G~z7[\ i%B!ȓihμ+@gKhe1iՁĉ\29 J@G6N2`N5a5 qo^`BO_*H D8ػJleä&z8"9M|Ut?&(9EdQsz|qc[wԽ l+|{YBlp0N^tXE8B4gUމGE2E1zL1Y_lS8;5s &ujaHsgp_8|rw|akxz[?vV>2tl;'bAN[+%znKFRYRnnSy /vtxHP@%+[ &\c\ Z~Tj{Ŧ {n{f}?r%DoXvj}L ŝ([$4ACq˶ zf1wf P+=,8~or&C|ii񇲡Lȅlx:O&x@p䙹xx c_ yw䛝?)}L1u\sS.RD|q fl71lՓ ᾁ?*`ԏKKlR s‰:\MNruێ#/[nt{f#qTK8.C5d!">)F`M㞄ӐP|sq/.Fol?7俿 +3l _!1pzLqE%U/pRCѼ}:t> .s=l8Q32>sGo&>{%-?xN3bh{q3=MJǸRBl 0+%^&ړ`\'4&C4`㗲c$zd*(U߼bo_*J j^ܱ[Hy4;M8j1'\X-f8t'c/&PdtJ/WLjB.>&%]qdkML"TBevR&0xHJX/:v*КL%%vTNGd1p̽\ J~_LoV-릡ZfE'N˲%䦤|؋@h&| u#=t"rfZKshQ</^D{ &A.w8.Bl\J%)S  `v_ns"u/~3<Ӧ+EK5ʭ "|H{a3B:|ƽ˭Bk^ '%[7(ƀn| (~b0r)@ g:z(b!aft гx«JӇQUƈZ Q >.Ur4qIoKJYZVSg1O6ykGK)gڏpc_%/GlxU~Z]"eJeaIJh]ԄzXI)LmΨ/? }JA@n[,V^-[!7>]9o8q9`Օ~EpOtD?Yeg'pm[ i4l^)f=l=Tԫm%m :]t,Lpa:n6;4f:s,@Ga5.,~(b'*:9TXcDuv񮚰7 8*WҍLxAuh@`)_a{oO$SZdW{=b̞O227-q;1.78 &536A@.ɂb'ݮ!t^^yձ#QOfN!8t*t$߱A6 H pFsAJO7%t du^|&xĒ9|i2qcbZ/bfWDX.rtN-7  ˮmp4XX{Ŀ?# wF4[27IIz2Kq0;Fs .(>?joo_b@/7T iZb%v=o|O^ߵ;0T~Jhӕ&xJUxgc^|pZX[ڂZi;o~"5u-Yߤ㍵=>_l -FM\^; ^I_E/00qXqp< w'h*>,NFE2:?bEU작~Vz{(M1Pc *c;m`c1-$q8y=:,eQVe×r0$k6{U -ait6,D-gS^,M 7QuH<[XɋQbbsg1Ң(w(Wh 25<72;޼ٺLN-KHᜓ|$+ə'6C[ly1~!0⿔pnNX% ې=31I}?^@n"gYQS_Lv5|ҫQ(Fyϋ΍EoɆ( O)R"b3KDPkLm0^U՟/fT]rL#eP)Ah7Zof ,+$/O1\NdOe#6{ 0 Nzmt)@ͼ š]:9=h8\!k打?PW)7=}ݷEұ^`_aGKLEaTŏ~b ")7R`zl`<µŀN:U2o< B'T_Vkw1d{6I~D8K>T34HJ @} /$osPTV5Đ򤢕ѡ%cczī)^NJٚb(9Gt!YS' =|ށ/og1@:c {mXK/)3D1q#ʒ&p[w7LDՋ9 ~.00ӏ\(KTΨ9BYh#micNm$(_V<}! CMRHGJKP܂47}na?l]Mhpksn}^[#3%n!25F_[%ov@$;aS*{lP|igdO1Z2I"8&M!`҆OP6kq_UtnKݒ[0rfMh2rwwLNިO-{In v\^YOEM&޶FAh-;;;~H7tPS (Iqrr8Vl6|ԁ8`wFHBm@4Q#d=A+"N;˟Un< 8qHۜ`?rBz.pv"\9خBfs DƏ4o\YH8!T "ً&W@c;kr}0z;r 8,y5|PG߫Vm-_#ŢDT:}= ~6P|.75wZ><Æ@)κt<l8ɒnE Q;Fe+Nw,Ԗ-mw2g;$1xz07 ȍ%c {F#' :@q-䩤pZw3(ɐgkxGG"͇u" j+BL',H OB;G:=b$.k%&!529r2I(k<4~v]r0 U ?b3o䳘n[XsކEH/!>ofL ȸssyBYf+};XJ\Wo(T tu01O*8*-qޥe&f082{&81ov./U<ھ6NL'LQjJ P 53P> (pJN'q8S$i;]1gBS찏 2 OɑBZ"dcOj}3 hoe0ݔL ۹1`~%\Yc>ŨSw["|B3y =Q84inaițHI'ܤ3-ka ,@|C$S78kE ThwN]U SzvxȄýw?8L7&Tv'dES-W^ ǪE)]JJ}oaDjT>0[}zxyx݅_6tX|xX=]CrrJ}eZ֗4V=J7UCB"|M:"eJ`&b7$(ԶRgv-E6L99*H$Y ,a)N2XUj@u{#H}l)qq0uIދ*]oSb:,؄-Sg㊄ex:XXpYs:t]4D}y6妟 wCs][NObCCH>o|t#B,9g}w wSrM\V/{Ӡ-1㗩 2]0 ŵ7xst!?>YVoXQKR~zMzӐy.9ԱcI0>ohNhH!]] hGЪ3 \[? C/FCHnN>fԛcV?ji3Zwޑ{ugʁ!_no[j9h Og|~ao~qzx~YOy= !YbG܆HsNMդUV(&ٓOh;5\=3B)P4JFZ$m(R3B׋p$ OTƶYniD+Zu`#j[rWBM ;ݎ@`0%[gQ׉fBvPx# 03s]/Osf I":`o='ʓƬT6h OJi=STjl=Zcr~r9qB<{D/zyj)VH_,˾Ov;*e5Fy0"‘ dc"5Nbs15UG1D{UI~h}LL"D)g2 _IqA;p4cc[NR'k@c kk&l}io>)I aS _Wl.`;niBW 2ZIdz,6_t538tdO=Sa77O:VчU/Mo>WJPP'#<5||)΀A6[_2MgI-mr|'mԳuwgnrصrǙ!nA_ҸQ7n9vv`-͉ g@_6}\@o.Kv)׳Z(WwL.Lf&}u+YS0KluAo )X:-Wx_}jUk^1U])0[O',`^yx @$46t6L+Ȇ7lVl^Hp0W;" Py2M锴z+0-m?Z&gyI#;S/p.nG8`ڧx9  \\7JbK.wfMJPz| ,mdǍvDP`2h\ E4Nx$(><q> `9 n`2 kD:i48UlүIlFuG/;o뭆t5ԋwvߵ^wF{9#xRoC͕"S[vC5ުvvE5V>k(h@u~فbJ;VSG/A~_4w4!:z=ٯI(mɎ]jB5lwR jxՑrpBfF^X@ 4tI_HKe]Z/3W:NHCf'ײq4СkJiw:x,a c2֌|+nT}. j0-JaFm 8ꏦĦ:^4?$5jU4gEd9.U!9Jj[j/̲=, ++_` G+4ز&ĸk㼥Ά16n΄7>&B R4x3eoՋ-$oH| 7̧I"NYK+IhQGfs~֝i$\*ؕȨRǓ2М@Q>Hǽ.@4 ɽah/rR3tc +ۄ.6a#R(m=?` 㗇c Ɂ%{4-i*8@^(E}RjE)nM^Χggy/mdAaY(ǭzD|ezLYg׃SJdJf 3ϼlhs7:2~H Y\N]Ǡ@,Q~NC!(iTy\|PЅ~,? RXT.@?*,%5gC)30W ]`}NNJ,5_VZQ lv݃Q 'CN@;sPnvtN6aY ]{я4F1f"L) .aW跱.ˠ-_[!T+kZ(;O\7Z>[ ]yI{|㸀4440'cewɭAEqy P}d[=$3psvN5f?Idv />v֗+Jee(VV}670"?.cnq-'|f;]Ӑ"vp8B>c E] Sd.h13\ Z,ϖ[beik)I,y aM-N=ձww)܊".#׮$1fJXE| >o[IVRYA@uQ~rcN{|$-Vjыo8 r(:jwnÀP{$d6mvo~\Ѱ@k@0)Cr2>RŨ76:;4ٶkÇy7EX^15g!isixJ[RS)ܴhw+G5 !N6C,NM#X$ Ks)QOl0BSKz>i U YK5AdjATXL?|ZUmh?PelU=G0FL("X`ܘic\Vt#;ݫ¯&$UL$)a:MgϞnniOϪjYXܽŋS2 hާm6>A J͞!j% [FQvzz9TzWjȦ#ph8iXL_YH "9aeڦ hbab˔֨p#F4۟KVQId&ᮐ1i%b4Wr7S#H2kH] '3*&W@֌kڔyFO)CcJ9)ðy?]2:f_ |^#BW@[ @(X8aRжFpWJţ@r6AG?RǩHe`fHQ½h03X:w^Sm؅o 'P9N a\b d (Prl8A7!r nE"9l&Trk߇nqڨtמ:O%V[ҵf裷Gq9#}G`юl7m fG DcuO3eBS%<~l:n3nlXȌiK3a~SYBm y4㋮vnHp?_uBVxf8 ]c Uu{DR3>&c[4XơB8*qZ%7v): Q/ /ܯ&1uxT@:# &Ȑ)+4)C"Cҋfxt1/jV{Q~>)NaCFj}\[S25;)5OeZ00za .ECO٭ /RG{P]t:e$P6xG3Ç/GYOw͎ihC8Md@)!8ltUφd5}~!DۖCR U^FВ9}; $)\p~t S{⌧&RtD)PqsS=VQ"/` w_|ha`W(-HJ\4iA,tU$ tvJW_WIUD}cSto`Au@;AEJwLHFt} SWB`Hk /+]a[@dtXW dQ%xCoL+j:R!JEW|Ŧ3 DՙNGɃC}F+9P;?6|h6Y4=a8|?\Œeɥ=cCz귙h0e-NWY4?U!h̫j):NIfLzͬ<\!4_/QHsOڏr^yI=m|͂ Ru_WvH'#lA,)>D;V!O4ѩC ꚾ" 8T J"U4vηWg} s.^Гr}& .M D8*-5M`wW HKNv)Pył0IXUoVGij=0/YgRN.)/_4jS ƁhPb$&s4LZ9筤 c꘤ +p])s˭& 4*f̟0||C/ߌ([cXRaGLnj= FXjoRHUMUV αRkU k~$M w@fc` [6|a@dFGD@+*px)Խ @Sˑҩ>zY-O@qfd$ֿb7@J$-Mɂ O!H M"P-{Hœi042KӸ7"sTr6֯8J Ș@#fӑcM鈼I2$VcO V2jU8hh!8]i x^XznCI}\N8"ҌN15p#D"ۿ ˙:bW<8V YdSā+4:K\I7; ͦaXtnf# (PmU)Y Gh[>'$aҝ%`6Յ; *)C􍦋‡KiBzl:`Z)V?h%q>2unVb8ߤLj1RPC@pzᕺuF\2dn,ҴQ2MtA;mxJЭڄ >N,'K8",OPZ$oC kŗH=A?9تk4X7:*0ҫ0ct _f]Nؘ0b3ND-M+[)|di+,2M`C@jOU_#5R綒M#[/X.r/.T暐ʜ}Ek"Ht o)|ǿ;QT2E1![VtHLB |X.wZSv[N:iEg.>9z~Z,:&7W)ܢuB%jga &RlO`)$AD賔7hKYCuQ>+g&H(Ui'հFIߚo̷?u 6M zF؏yzmc]'uZW'..=mxe߬?.5O/c3`pzXE{Ƴ9ٞ~z%==v=m4ՓW{or5mO鞊?D[[76GKM+1 ǣX716Ʒ)O/ 'hE#;tx]~#Ɛdf)O7qGn~qSqÜ(w`‹fVFo1먫1DwzLq{N>\QL߶lfl.ih>l<}) 8ޞ±tFJJBa[I4ɡ /6#%sdL"Gj xV-"y Goҫ}Djp_0?4*pЕ{LHPt \(P{@qQ=_)qǛl)MpOgC'Jnvc=^'A;i(bq43E5P&Ό2wxΈ,U):$j٘9Q dYU1ʸ]7ɏ!man qM;yhQwl^[EfnS *(IYնzĽ"~Z.pLr2&i8)I*NuEZ$r<a\0]Wn%^4n۷|33*hc4w&ܹ&nIMXkokwzk5A^ݮeo3obr9h¡lX  /hr+چ^|)ߔEI1㈗^tZeWx_3ax>[`YM2$BB?dc>l{ϭ5 co5ms}-?޸8z$\+EHDs⤹ߑ@6TǵwldhGuM| O:Gvr%+Ńx{hxW 7}^%;•}Yq]͍;bO20 v%ڥtF^Έ&QՋjJ5T%vX3I}O#>07XezD%8|sQB@LnvPX\(B8J *_G ٧WTh$HyM[] X\FU%ES p:"mZKZKW ,\Ā&CaFTC`3%?'$oo%xxRB8> D5B?b~D.zHQQ㭚eEttk/2/w  b&;G09$ 0v4t2 KZ5 q^xVq>$E'ڷhZ:xe(6%|8 *N6kR~-,pƘee/ }se߼: SO#6d{2>,Xjtf.Rsc/bXצ}.ׯֽWf_;)+୞x╀%=8YVO곲S,ܱ6OCK@˔D1nM. ¡`ZBS"optܸn;l4s1"5(dΉ'h'fXkP/+LuEiF݉(5^q,`'O(5f`u %RɅpv0 tyjٻΌ,Ya-ET^0jkI>Lb2in\cRF&IBF: @aLʍ۩D - "]!5g@h]Q{ʠBդJ5D=5Wtq&! /ig axJD^)DgJiv8q~uT?nnl9˖tJSSzT9y),~Mgrg;KDJT'o'ݶ{N8晉#jh 2^xtu.b֐B,ۼHL.>f{UJ-_l <\F||,upY0mclW*)$e=ȥm 6[v Zs'8 ݗ_sc&5U4:`1wb6] %1Б0HBRy8$>K "'LGt1,E|eS;0/xи%%Xz-eh r x-HX9I$UrSfG"k4|[w*VW=_X"2$9X^bvRg5+ #.46H{B[ߩRG$:ck0@gӘ#&Σsi˱,ѩWqF_CL2lg}YrѴVdmpdܦ6)˭ou9%EH["S B:pRd~Ws4<-"`lvt-_]>[{ X>|^9]mPWធ"DN@xb HOZЅLG#IȏidPCF,OtpEHw|D\Q'$-;< 3/w<&Q;^R_T4˯U|>R 2~ ~q7֮{r4cd,EI{S(}&Hr,HJ *D+2!ͦ)6C2/o9N>Tg.ˎH1iA;6WqJX5cE#$ϬϝI>lzM thuت)f8 K= ?mc4*hO!h,͑zxj#;]_?9}%ŷ\k=}޿A-?,KV>ɓ\׾'Wᅣ|r?M|;#NPJSoSFզ+V;{2i×lEiWv0'uko?^6|G1w47o_*cz)ځF71`hE ֌<EKOLfSAhK:Adڙ. I2M2\5)1Y $gp2 K9C#^CDv$1 _kB( ُj #z`3_zNu '()j:V(8"gIb+ h{Į/) S}RP1EYiqf$؏:4 &M,]m5Z/~NV瓹p% 戯{qY)QbVbq8t//fJ<0Ͻn9E*lS(S$,,dsg9pM1 @%Ju93E^lz$Xb?y αE?ӏv)D绘WsL܁b^ )1_44tu>vS :;΀xO\tj+=]W9QNDI+:M`h7ws}>ws}>ws}>ws}>w| 0X