#!/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=1b2bc073fc4ded040936a7035a767a8f # 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?{r$w<~vӣ_pt|{>(B~? ꏬnCzzǿ3ݏ* 6z#Јuhsj޲Y.&q9 Bc@ w4WY!g+.8[Gׁxn n\ف8($8lDc"Mv,H,&VDkM%yBHصy ܈yѤDgKf8:k J,zRց'dK+kyQy0QKrF#rZrlC`)G),C heS h(3@29itXFe݂=Q0oP$hm2(^(K,s`t;<_GogCzc|G66Xw؇d`u [=]5`1/.:pkFયϚ Ph8>ɨIodSv{J4>l1x1_ t  `VцfwZPKe4jdԾ>z\S&1. VoJ+N^t`] $a\2&jѨO7/`dӮ Iw']_]:qONr  L21ޞk>FǺ 8כd`F`$*]+jgL4!5`ttDfveQy!nҶ2uot$^ b]\2TZu}[]Qgz^/guj=<%58YYºU7/'jcU}h z_3& N1XxZ9T C_ĻFkTYkFUy"Xa<9DE^VȊvw" S)ܮη* =y-O1{ `$J}j/c#?>~CJW|ߵPoD9]ZG ~qY5)Cݦi4_[:Xkm<cmu5 #oA5ynݲ'^;@p v *"^ϝv X{<95šљ]A$h1w0JA59M}fxSPҲqe'TaQf^b="v}vD0n^3\uu䧹辆S+`.`A0/FvRk]=tw182Y=n0$( uv ˈ Pm֎+[(iu؊_|ӏr0x?9>Nk*zNbhMH ȣ؜oLH(ԅ.V:%V;n?~~Tldya/a3ӧ_? 僿yԙQF-kCn9e]+ߥ*".ݸ3,K}{[^igMs5k6^7Z"l(<)gQ86 clǏS;1{Ab7z-Wcͤh djs0 B;+I(v@uL͈T-|ME]LC롽7> C64s~9KlE S>.`@tc3 d_ @ۮ>1q]iSˍH tc"@ &M7 S}ƥ>DB^`/!aÅ\ֱiEݨKKCx1aVXCNE}k:zŰYx@tؿc [cqc#hIf!,[8X ɹT#wT->M7s3N}uA"gJr}n.W>`$Aw=̱F%p` z1tDNDd|߾cڝ}c{Yxәg]Ɗݡ<=<^#cG xm<23.q0@Pwjlz^*ȾzUpNYQ3e{WdFG`fٰMfbc2,Xes؊Iw^9dkڍ! mP/Hs7T{W ׾ Sa߀=wCxĂX%ENԺFM$6Y3ayqpD`JxOGs,dɨ-%J=4+T̑OVZլ'LD(} 5&BV*OFк%I )V"!œ=/PA(d/(5>'>G)]ɪBD0ML2Z`b! ۛaFiT\4D D@-bY;Eȁ9DL#,3/\{ 1DeHfl@1wxD?ivaB5 К=V0Ne7gSC(>2)ohJr\=ʂW T_`!kJǞ&^ MvS_}b̷j"kIxYfw"&N4E3$Ĥi?^Q Xo5;7;r3qg2ͽk7Z[/#t_>&٘S5ӆd1m?n;{r!\EGU%+HV<؛} |+R E 6 ӡ*߸2 B P} : QKkn!Zhn&2 +9ZV_/&,H.͈L!l=Ț+x!l0&e7s6JWb+FfcnMWH%m(S=}ޥ@!slRQ[rҒă[J(ǚC =ϫux#5wTHޡHtCq+b4G1r&s-LrSJEw֕ ?D\rӘXN<!Z^ră7MX…XtDdug55 Rm쎛&Rv&(7n]j%KʼnpRZRSajq^x b}N%O>7O;j-C-1H<5a0;qsyI?f< ezW+Dqb7Q <foz 3`\ <-))Ku""49!QRvjtn7ٻ_&=㻨9Wqu +{ſ%n ̳־=gsۯ"(…>8gIJ߷ U`+;~Lcƻ:N$F,!}[AibQxWs=OOM0 nV%|9m=UM̃l'N/"Niע)dWo)|9.Olgf\o Yo+vm+ b"O k98ڙOsn":x=Dh|L`-$ZE"$ҁ; "/":.nnq\|0R]s w}:I@77G`Y`.069Ww{s,yoU!J#Ђc+!-H\#XbJ2z/LMT%k} 5?Pއy]jHw4{/j?:k='2Еwm nu|sxNm/Mec} KkDx"LQ"r<SgzWoG4%Y,lڱ"Ŷ-t;Z*͒$= xxbJr8y;鰗OȤnsI!l>W4 ORpYLȶQ mqF4\Yv6LB]Gu̼~].C֤bT#ou(ɦμ.7l3rgYkh5wB& b@*?\_+>H9`<*H(,,_kU2QگVZtNrt9* Ez(=x§UmkA;ӓ[:XׄkB* 5Q!b((rHI7RP[ufBfI71lȓKu P[ڱnA~ޮ~7.p.IN4hL{ Nrf0L8%yF Ɇ,M]53ӁmF.h #Nq(a;%wBv&\W,ŸZrq˸ xs׈ X^ʆ T31|ȅׂˤSr\E=3!P%xYhtmY4w+|Fϱe/9h'Cyna.Gb͚X~/Ry:j;x"./tf5}Um"xNuOrA|MgFĎ(#܂5O`lQsf$pN$GK 5j} B8_HDd;!Ptakw]%d-[c ^/phez'> vdp|Ճ9iaR, ̵U$C%hU$,ȟ: iwЎ=N/JLqЗN$qQ hu6!LjR[z>Pĉ(("/1i LG/e2Sig!8>mT"x,Q,,dN͵r uת!uHE|jZErwd1*:ܽYl0y4QC>T$1Q]Er1$hd+3xagtXaS {$_g4PK(NcdO]`pTI/}F7a,[KoJ)ZB#%a!1^#?1"ld.٨@=Lɾ2t60]Z(x>7зt+te@0JGBQ#M_GFbŗeaЂɬhxvQH KL'i[-|:Ar9*~_C8O%fXx} |7syIDӓgEB'Q3K ls-gة &5g=y8:=Ӛ?[)Y/ Ic7+>V@PIPs[G0@")^'OL,-9.Wp"H2#t蛓PaTFcTZ[jX^ )"zg8'UMDפ>YQB Ή1PaJC d1-Y5ny8#s϶飶-RrKgEE=&Ӧl-GvtҔg6►bl6X`%[C-F/ -*>x7G{r΁ϡ@b L)*:*5(lgйJaz&:3x(ȴ[1YE !ZSPLoeE{23:n.C8ڜ=7hGXlp.MdӇ-O8u18ؓIgKEҿ{JZob}QoHA47}-k l=7%AVjHMhkM;;-d$׎qI_SXO| fnKi+z¾=3 BvUQ':Jp70$Dzim>qX&p0ĥ4O/#M"?t~S٪ LOAMOvߦKN8j29bG"'Y"%O81ɍ ZNbqggJ_kJp%M4nMnie&\n4zW ^lb&I_Vy&Gxؾ<X;Z4sai&t> eT ܲ(na q m㮅]=lTX֠czoBfA_^]et!)G UB?*q _["s5}T7n.ODE2m'D<ҔJ"RogB4+Gut9Q\ n[ P_#\a8_RxHnD,I-1Xᛞjx΁7ְBK.Bp5doǡGtPТ"$vfqXo7i=@6 lР #x.Q}B7 =G)yt\?jcI{fW0Eۈv&Yu.1$BwNjk)BS8ܑV~B"?XAx/|PpK81TR.CJ턥V.%cn1P8hjr,Xx1IGXX4J7P%Ht>raIo@[J{$dXXlN_J8"^W`+\w)jX)ŬUh P$R.Kg9ARǪ4Mǥăsy~bK}M;T.du;y/ bБGP| D\t9\# .N4DGD/t64b^fqX)d!V2>ݎɩ1.P8ft8?^)AQDzn ;|/\YH> Y 弟.LL k*c<+u{JO^96xhyo?YT~˸[ҒV9.]24Dq$|UƩ f[3 aXb_S>6{mzgՊ١+(D 1|t<]@ >aG6P"?I8~--[+3@@w#`Q DU7.(;- Lp|8:3_ “s~Jt[*EmL;\ߤ/|Ɇh41zx(F sywKPt2;D56bh({ /p)gO3V@j-:Yb 7DX3 jm.0ȒFUXg0IgyOG$f~P4p`ي:Ƒ4 sJ)&S8q"x.65=z҄v8$u5ZYPQMxj LƀR-VѠc)֦2x s|!,s8covs;]:7+W 6L( }9p u4vs$zmwjki%BSk3#  b)'BMĤ;u )X#վߺ I]E+3ƈ$0FԱ+ ctS p%I .T2 iVr$zD?$`'qۇ0+nZ%=ärK:d٢Faw%jsT>{P^ $Pn\,UxIpX^\5zX"WEv[()Ц 2m^X~0TUb@Jup6mtg䧄¤!4vqa:ZO.mև.'w;sInkA[&NnBٍ(~d';K{h 0\c)>0xǏ\"f$s`kIeNXLHlF@i)#KkZ˛@THeS[kOv+8CYZj;kvʺ9pvʛ:F؜NʋW9/URIyVFoOORNi),gLisP?9erZj5* ;UX +Ta=gFeG;|n&z5> FoU>"d2-zy-O776_ǽ?~0E1 0dq{"|hl r:sd]`{XMo\nKєa  Qa,P ՒԿ}rBϧyOr}ܷdi ֳE3z9$B_<1h'UOzvlI/J&QG[DGW.ö~osoQrמh;*e{(d+*S¯%%r-z`T<(Ky`DvXQn~K-EpbR#K? h&mb,P6ҎͻCeejONCb= RwxZYB7aM.;1+QCR b_+V.oSUw0DO7v]fSV6ڹuֹhE~uNrrA%1pM",=99@ϧ N;4ր4.d?[$^'B,2V4f 9hh6iXUlYuVފQ%{ pm-򪒂 |AҩuK]bdGTGЩˎ&F$(ldm~p4q<$'Mx;p ,ա.FTHy}S-d {g? 3 !=㝧$ ,d" ?q ҂ࢡ:R0m'F^;J` w0[9Ѭw`VNr 9Ӷk>q֗ s`>ҩv>9iT׈!E{Jf{xDGbة?FWGW;_wnK;'ENۜZv>yas<@B뿳_HXS^Xמ}|σ?1eN+IJRq+ISC^$hqТ ? Q>`,t. N:0l d1QkY?<~%Am)7&~hl⃃)__7*'Qw.h7+dՉ0KŹd*m'8ޡ7xru\J|2#n1 zBaa «N1xy8pLiSH0z= d/R1e t@ GpV='ch 0MGDS֭xN6Cʡbf k띩] CQ)N˴/W?/6i =`اCS_#f=qNv Q+zp h&j_@.fh`}õV`vXYf^xR7,<^/~ 1Kqff yzUSN<ñw和:@!QN m \MDb>\-Fbn)ś yry??͓őj}ѓ6;gD: 54~k6ӟ:9EPK |w/T)(, X|(Ahi"c'_=𦚋SK%UEdci st Gc uvC1-uԔ+bS'0 !x2.W; k3&F֙I^5:ҀwҬb~Hu.BV% ,9dEOt+08l?sgJG"(:r oȚbٴ-AP_a\^gz80lgMP#z}I,ã3erqA 5xy4Dw bt«5-l: P\FY˸TɎC)dJR:*55T`^ H3O۪rȦk+ί_gKRjmN|pn6U*_׿.I, [n_ '?LI.K]J m4Ukg1j S &~J gC̕ jLŶZz]",7>^YoFhm]Ja'|6qEʼ"~:o3lK=6@\gqipn--$G;o!ƅYY"рNt0AfB+!fEbFFs> (x+ Ցco@a` fx2 %1c?pB$:!@oRcwsՑ2Oh}Q]I" tfGS{9oBU--Nbk=1Hv"CZa&oNc&֙HGlCiv3<؏la$f;{ᡕZ^:3)4&\ !++PQ7&^،n„7mBS5Iт*Z8[ZCs=mn z!*( @,hއ t2og !FFЎ#Uܥ!pnMqѻ,VH7H*q<S0ς>Qȴ; jڍB. H+'hb h&TD懳{s$bMs|Oyzo>-ϳo?_:mmϟ/Ao6*S 7 ǵͥj9K%au)z>\{_ڳrl׿hoviP#//n𞂘'/q8 ]( rCa{Jrx gXY~fל蓀n)AdP,Uo<\0P frWr:9WI11Vk;'fzrC wz٥wҡ`N,Xۄv[Òyc|H=m:\ܚXdM7)v=Kc4?I5Fw5ncf9s,؄Jp%o<-䧃I&prx*Gtě|hQߌ[ɓPp`|y߉QH݆1e/.y-ye K%#B_al:A퐍q& !-w}XnÊjԥ4:DNjJnm8q %x|z!z)2CdD" ZIʼnT(XnΆ8ċѪvo05C2.D_22p+B4:\Ll᠏Q'sL5>;[! t+m?My Wx}DaFɟTn 85߃3||i &sj P(uBQ2,,)hC>29fy"nۺ)+}YN^K{'a[j=gŔ=5-jg` "_K:z"B&s1;8Ip,w'\31@+]tG DSxTM͜  J@hBQXt6(&"O|/,/pfĩ*P]4GPyuȆNZcaT4 &u4r A8Z9%HZ\IGL՛jn̷>#w}L!+|n)W a=^F96hy`[zECc2ox9:% !ͅYٽ&fcpZ _/﫪t1c/8p{V4[$`t;B\9J_~RN #5LC[Έ`1L^<+'ȏ̫ -*({ruu&=},&8qԵ-^L:iƿybZHYW#V54HNs-s$QKTё"fa!_q-NLB6\vNU␮1UscgX>N@=iSfV'nc-;384t㘱1|ę4g"!rJHJB1&I +=ݔv<EeaPt$3蝉Q'%]!Mb~ aZHk%g*ߨ7Uغw[1jk3+ڹ[S.B-9"|o__SB7D#'m>B˧ųs3[rN@Ɠ|͆>%h붌8-4a*81ֶEe?>&Ao8szM=!DUHNƼ֟|:zArmAua7+h[ݻ#<՟AH%Na fP H {CtA7f'L٭|ݖ10lLH!2`%iLJazJ.)JPGAp8Rrr7z(aD'<*c #ugƼ1J_A؝unk9 4oKhLޟ7A>1W 8fdްٚFdN4f].B;@kl\RE,S@[4ϋgK?33rX%~ z޸ KT2〉$ .x}, uSHGALҔF΋ [Gueeϡ-\"rgւ$ڑqN׿H)l.a)N}x>#vs{V6tb  S]\bݻwSW>ɓ -̋s xך<C|tXs$~R8UXkoI{,3yp5tO,ZѤ`93|ᵣIƩCȶhF[0DDd\B! +['ìU+>F0h"[ ro$t&z:6-MؒA#eJ0h7( t:b`Q`@6jAYbЅ$֑^4zH,]~;}WFJ+ ]A0z9- 1\ 34¡8V=$4W4?:a&*Dp,Dp{sA/ؖ~a0aקE3oDh㶳9n + ha4fؙnW#JK2jzN8gK77΅LMbwgDb+L~/˰MB97VobNX$7(oH)"i4ix O)|f"zk[m{㓴{`?רlI6tv,Â3'x{A=K(Ҭ]<<{KׂoXN%VVY+Npv^X_J8M|9<²6WOC8fuL*.);amL[,SO lmhww7ZĈiQ LicS1wVFUzdH;A_C J., ͎MR4[6ѯ} szDDCA,OO~in=SO.ԑiuT< /'0gw ev6Mj/^#=f L-GIPW4I>=%?tĴɲS2jWp#mY|?az?cikvzp.ZE'& #Ip:b4-?kO7DWoOp6w*GՈg#A'V8à%1g3@]08ΧGQl?.Xdi,2-־@bb\#-`hڑX3~Ik sf'x0tݑ}7WI Gdi3Q:.Rj:6-{yF^7:h/J=hyݕ=k {<* 6"DEjR? O)} Ό76N ]EmqI˸V=6~ 9'Ѻ C4̈5=vϺ8.Ls1`3q>IU-Q`;XDwҧQ!i87jEZ*ljV4h4=^Pu[8S;6%Þ"!+H/Wtfs/`T.(ܝO|#4[l.~'?9yAFVpƂ='P7dNqB{NEx5@GI8Oӣ/uGmnj$ bo:z-Ġs˟4t<` l2QxJp^!:GHI|+y Fʣj6z޴CjL> Eg8-G:0ovmk'E#8։d7/q7UQ>&҆`!ߓ,Ey"Z-6fr{7oEW|o.#ts._mBWC{@= vZY,o|kKW 8Ñs?Lo`}>0YKiQ׸MĀ$*hME=T_Z|˿vqG 3[s¢):fKǪ0hѐRsQKSr\Nhn>مVU{*G՗bYQ2+ >"̪ 􋻺i!. ?ްyPTZ2lŀ.ϤK+/N(T'49UA 9zض8|xR'g7ޗ"/b1ح=rӾ7`$+፪ńc>G/s3(,$ZtOu"z!HU9di{dov.F|mƝB޸{GDΫî ѽ]Fc'u; ijGo;1߭+W^:~9nHshti[.<ˍ3Lapj%=ǒޕ0>ĺ)qꙡO92WXGML$({ڊ͒<6P跮[06`I8B]D{-)(z+b6e)rh 7w =)YQ鶀p$qtk,p#ЙL*>栫4|0W $ƁIKB.7MYxry0Spz2tW % 3c{ -#Ƕ +8 {z/NF5ɡ dw`۹ID0zsl-X'6`, Ҥ!S6HݩGYH<:&샓 8[qWJz#{ڳHoDŽU*݊Tx|FdOgl6gأ.XAwٞ);rtAlXTlX|MޓhBvQL`ZTM27apSe$Y͐2̦Q65f~-#2<ƃ8Pذ]M06Y0ؔ 2ݞ> ;m6l;1ۓ;{ޗ6OzsBԘ ,p0' ڃ(eKH%ԖxaOA3h nܓQ-DhI*tf4 hzw l`n`PLZ*DeZ{וf]wbj}/z|V/jfKUjϩcxTiAͥ,U7'zѺ' Лv*$~AutVFjh:Sf%6ԑFڃ*l7:9mYVтqX`GЦ"j${o2[nb*n Yk46(V:Wé4 US(/UrL-\i~ղ0hk4rQ-V-+| `Z; 4mv<=i0- TPao(M!e7qBi*8-j*m1Ac8:n`PJz(f_WMhz_--dq%UcOUj @0~!BSV})][R:BNG ( ֛nGL09r?LP.r0˲OeMhLN>ej0ATtLQg&zopՈhSUmz[x<)Pn1k9ցzcvfܖAHFF%$;a+9٠QZƳu6աt-l~x [X=rz.QW*%iPpv6k\,nx)w\=+յ檪D⬠UȪ!*B1*wM"SV@5+]?GoГNĄ;˯+0D$ʱ->@`}dYU."hՃ%ZbojPqS6>˵rmuD[u6:;t%" 2e\u?$b.-WTUty[T4 BiG뗰Vvfs8ƶ:3wkf_!86;zη7et{Qެf0cƛ=t2{Ymj_#ۣTb+ӛ2KeW [ A}Z J0'Ǜg̽j PM*vz_o⠯.vG֭n]3'Rÿ[NP6TVCONe~ܵ=֨iWkխޢ5٠Y}JVF~J+nO):Pg|jGV S*Uj-:ʻbJH5h!Ză_$b-W|O,Ee7$f]A?4zs`KS&eؤ$3; xNݼK&&<%:n6jW.T9[T4T4{ōn@){b:7FR%)sO8D"y7+_lh0Fu1e-QP<>cJ6bA{, 읹sX\ NUtta@&rdiVj7v^O+J^TzGG y\w4t0&):NTl3o;ߛKe R1#VSl+gYa4>6-f E:I ȸ_^9y|U1rm-:n.zFC<__{-I s#t:vb޴*o]kh$qM;t3;׫01E+Lhm pQL_8AKr LqloQKz`Gx[RP8˛py/6/EC2>jq^lQ?p؉ 9+&[޵EGHFj{葆R=iD<*:L;v ƄQ{ZY @} uStƛB-DZ5>ZQ Xl3VxM5>YRm9N5uYFBHN0æmZ9boLEN V+`KJv>S ^wdt`fkk\T܉-vjlI_V68ELs)vHb&Cqef`cmO&N# [ /V̲">+(1+lllmVhi?gZL.~wU j݌{|>RM<1j&J2SJŐ0|cy f\{A!b5KQ l{E hiop!nLu)2KJi5hqUD(Qsh)z O= Dy$e樨 CC/f"6 4rvVI Q?EBeC&nSZBNh f,NhTbh5tNv0Mjb~&Xn"TEz+ÌCngx l h_h5"^JZ&Jtiל! pN7$D'D䯟T""CQl}$a%ՂU@"d M}D,|l} D*q**c@'~?No`)Ǘx xp1*KOZZ'^y/6pKQ܌%& Bnt1|"qb> p` W%6-ֽ'))P@Q5&X@ig;F5XK1;#^R464ĵlʀ$%F%0v:I'hzLgy7däe;c2a{/S^hM0k!Za}!|Xݥfp<ԸCP[l1E<(=&qMKQ[ftl>͗Uy-zs9L%(r~PӔ-T#hJ!|VK_ሦ [WV*ЫgHo =hw5ڇy82ZMÖ(0 q2aUlƆ30ԏl24+bO':X//#4yɖKpb1B̮T+`@Ҿw).aj\Db?(1D\HK@wcX 5߿WExvEP>7'5wkS|Z0Oज1Е(Mo> p̯%{+\?XIG"Uބ9B;riv܆i|`7EoQӅD5qM°f@<(0f{2 BW @7h BT9;bm`8[7zFy9TP`E+Pb)%jO&C~9l w@_ߛNBOȷ$ \Vdsigok:?[ސU,u0+nX[_XYXYğ>TΠ9ei>cbzu1?pϲܥܓzo:\SZ)rugyh❲̫0NGh!QEƉH`wwTM\Y#6m `Dž˶=~Rπ1FKZE GNj#9 . H6,EOuiZE i%Gz:k (_ ɤ/V_j5LPa^uV5&Sb[ޚKI8M3 KI@iWt)p[)˭g1*"+Ÿ|"xXC/:ǘ*$\r"3@!l/0T*"W40IyּJW\Aj .uIR?DzlpqMHd5 1HX8U,֧`d7no>E8&ɡȔhyf,/!T BW&Ĭ.P7)Al%N&w 9 qS0# -X.1MZMIUz(j9H2#{ 6Ly*TpdACnYZɚD)exOD:o%}NNv@.]o:Y4#~28Ή-t g :mf7ClZP85@F㬷3.{}3@rx&"H=+n7)= Ԛe ]d.OjO#'JZuQp)9Ua ^>ջƑ$g7fn*FVpA'y1p 2g=)IvF0vԀW}RU.o+0E` :Fg( j'#% cIR#/fO4A 5Eғ 6'`pR#{E7%NX=XI8yz;)q)L8Hod$CD0YtxBlQ eܝHVc;fEJ֘y[sogG^-Gsq3_wOZ]"ԓx:'.o0w|d4 @6T5;$BI u<=:ᲦD9xTR#q@D(IG.Yпe!\ pbW͖@:EXh8!xA^'~rqed'݅7DŽTFJƁX 'ARs;{*H(OP \˙1I@nâu&אt>a =W+.PD-iW̪܌K[%GEm7~x9+g<}_l ֈ ِ#{)07{3o3|IYKk?4OC9Co[ۏ+_Uv'CEF%|ӿo\Z+:Zm-^AzmV0׶R:>:uN7^xo) DЛG}-zw![bV|B+ߗ [X{+o}* g6Ph2e>?&IO7Jz1zAsIOsff3Ւ?m%IyfmrB)83l%Xߢo;D3 KNy5g [K'U0tW@NWK_?M% f``( vy>Q([b5Í3d};-,ta"0ң=E =Wc%}2lď=<=D1_+!Ch^xZFRYȣa9R~$ƞ/ު=m%DUxP:^-ZAʈQp߁PiqjW/xR Cm~PZ|e88^>+2Y2mt#Ͼ~σ?o}0JJ1@(&2ס9L^Fjn $&={5kC 4wÅ(4bۙ:ݟݒ;,&&ezX+bHV:X]%+r(N?j}k#(/⋶q LIƷ*M LRv%dM? zSO -"*A<0%9; TQ6yYМG\ϧ35~ }RZ&1abGCeA~7 nؘq^*;̺5筽vR`)̞xꔀ)-?K؎kW(cDwV>rk̝;:<)y#;Rj\g(Pj mDLɁFP!ׂBg^@JAE0p ;zTHr$ZmځRAa9TA7x؁lEК0@GɱT<3#_@"hͽp0@ì\r3nL: v&8lqqddkXԜ>0-s6>a '($B7d(x; .s 9:cLҦ3 0!g ڏ`3dyIi "0zdegȪUdU3o"{ɜ)pu5BNjr1"!sQܻw?~E}aRZ]~lΔ'E{[y2xK[zWޤgMe ` Q5x:tP]Y/E W]mw9>i7@h⢃^C΂Sv÷O'&6[aA_O8g<:c'NLPEp4r]f%AB1X]H:ftc$6G@l4{$fBe~AZ"ӗ76B$Ӳml}j,7-s)z+Gǔ q>%um#SQǨ*0_ƛO,&aE:ZUE©CO!Z /.3?.Rn`n iON!E*{#5[ a m:Yh~d'J#Ӿ1xOm@ l'8 "_xt/JWH Xt5"TZNS)tis#A<6]v@m&Qf{gRTPBC8yht%2^no;sX bՂ{K|+exTr/|zمDkN)zC`;F3BvCFu7ZLn[1BjWRm=?0o|6.0&G g"_IYs~]kI=I_|ք5S^ۊbQ0xeƟeQXi˭m-6\y- .WCADTP.[IL%ыfFT'(R+1]F [[T9<c[YMQS-D6pT1* ;Aȏ~(H‚1]V+?g e^dn ۘDBXx Ϳe2ڲcR}&Y&v"E@+~7$zd X ϔҦKRV (E,5EHm44QhZ腨{Wz/*Ѯ+V0Ѧ#J6b/بb9:kl;Q|ȡFPwQMJqӛ n,fK|Y~P9=uNeaX%@ӧ>KvJA.3qGys#G,_եlܭS 6:4%?Y֥H _>_Lgݑ'G)Od/7VWף_6}_# !w^~.P*9vUT40X`4>-EYFz&, 3(AhbrP`E$˜g%lR~(D2.B6uKґX]#_Dv&1 sB@3yb)@L.+FNA$wd0gDwdJI/hTP'[AEtA8:xoAr5g14RIX0PJ@'>< MI'H)*YdL?"yP/R:D3aOD>kuD u~]i|'Zv˺m6_rTì(K]WYoɪqxrpY9j7ꭂjq@q_PBAц5aYm4oŽF[;n:4ۍANN'ǭ- #S #z |;VsCUu'5ac4ZYqL*L tY"O|9È*ͷڪ)V9D~CnXi~hڍ6?>ьRQvq&UǮ* 5@`Π:4{ 4hgJ5k4G8`™q-ƹu(/3K3VhUv1h&GUj#׍V=ha5 qgP{.hYUcOUjy)jU_Vf8,z jq-R>+$2]I#Z$rW=M~Zǧj.bo]fO^QU#e*[ ?~EU| ~! !XK++?_c>n{4Sa=ʏ#NF?U|wyeωqn +I( YN&`Tm3J peG`)m 3;1[/'6 v!F;M*Nc/zSLe+l]+Ed1W3/^S'?t'xBNdgi2gI Ӌ{6?P^D`^pjƛ匍@&@ll4YY+56.K7v}WűVwpSoArU28 Ly %>d߀y$S?jiuIE}XQBml_u% 3*$ (=I&hՀ#{K>;ޘ,BKa/L|&oϲϲwβQޒbhh#*f_ [l: DXPBQY  X)+~MPXTum yԏ%O ia~/G|>|D(J~eXBoq>>>>>>>>>>>>>>>>'F0