#!/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 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=7b63e581c1a3296a957fcefbc322c2a9 # 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 Ә^LOO{ըr8.nR׫ԎOW-Zs쩮*\f+ZkԟQ٨7Ukf=\+] G7U}S;B忬^VjjU,@`lwms=bϹ_;>q^Gͣg䇬p{@ڹ\ IY޻'Nԫ ȶO.܀cWH{>' #.Y) 5-w n$F,x5(kXޓ.2b7qgcZS`sR}j-n݇?˞ñM y-EA48Ӑ&1,ug]LBlǷ Z#shy{I`Rc{t+  shI,a:jAm_vp% ݧϽXLa  YSF䶾HYƌ):4ܓ ECBmZ) дp|Jab1X9S D`e[R Zh|. 8+E D~8R}NtÏ#R%^W)Bk_gcu0R~[HÑ(d0"հ':?jUYRDwzܿ(@Ap+Y@uPfg9FKxl=Yf<>v>6G#2E"\WV:|%u+@JwR_%eK hY%g>I8c+CPl:R(,ۘSzk-}в!fǞZBAGI;gR7n-(:tc 9n<#G&Q_~  Q;~ȕE?9]\垹kF-ߏ 䀨*40|ʆx@tb99S޺NAmVyCm0丈2\hYt 0 @0 ;R_,zu} zu,gTL:>`EL.M]p5HFt,ѻNوs$H 3T 1& 7Β(Pł#OMW2HD^V/1=S,k4J5娬rnaOw]/,hRnZ LC4 Sj\L׹W4mj13d Q[_5Ts^UXb8_ps˞cbtpO^3CV S۴[_2Ԫ[:N@hhO",O#,Qir{HDPw \yw$ߛ-|_>}$i=,zsLJ=XFL!n{Wgl_F*D_! ; (QM-6"½*Ô06ޞG} aD@FnoڜׯIKv,QgG*Ô{{HřNƲ1H_H#MYFK[}&_*r D ;2qCzvS7,uZU[hp#x dE:;QM=QZ^4Jhp͟Yfw^1`{<8+L ~e,&]RުN+*3t6U"uM=MjJö/Ih LNT ZM'wSwVG O3n9^߁aBB &Yyi,\E8RZI4bX6zųL`,k5V/> u—Kp~#O"#J>-nK3otk1n2Do>lq;sBpZ402W[wwpK"b!5߯ BsfۍUkk֨?jfp=Aw4҆Sfz<}n&V3< |7z,1ñ=?z9pdg O/vцtn-,9]yRLQT*%?<N$SR\lL><8K/ER ȶ{&0G,Y1"֤,m ֲΖxt[_t-nXr[ ;"Ch B16eżPR&ٝ,`Khzî-ګK-pTN7Ӱ3*g0u_| (.:4mhq[ȕ awn {1 b5Ôiq^@-@<aT < u =]dێjY):a[b? 2ߓ6x0R,l|M ?&aZgֱx"kA%`4PO{1fNr7i۲!2ߴEHF!,s:I嘬\pI2EN~ӗ;h`{G(d疩o tn4cqkxaձɓy{S3L5pD|1{tgt:clND̼Cj/қxSTehíJ`7TΌ`9vWf,ٶЍ>6~\&h OV P& ><&F8B4Qb-ËMBD줔XKK3&E17W28ҷ<-ا0Se /g ?gi Վdsy)k-qP1/gGGK2x݀+uaPgfkW} O3&,ov??w]sW? B~I=^UTe+aq2s~.#ESI{{z ]>0s$֥T5Q2vIj+o4ܨcN&jG{tN ?h=P ޾( 'sg' Thdq48 ˼Z -oVom-||(rR )Hԡkt.p$){W[JHnIښUaVX{6%'Sc$zg +L7ͼN=V} 6Ml`(js 182k, Fܸ_ݟmA .OӊE}FTboR94NJ)qL yDZ:яC)oy?,a1{Iq'%rBkD[O jttq׻6idbX)OrIE%ߧbOa/wbVX_}RJ#Ypu4 $ $Ҹ5O-y??`ĭ&7bqRH+'&ZhEzݬaOg 7V𘊎a- { g4mT'š3zjKG1qǼIQ+/<̉ a$89jfH0eMMMKP\ʔ2.?d8Wu,zwKv.ri?دz^F[YXEp#?]Յ3ūTDq&^}>fdT{{&7P࿀jiࣶm&7yXy(\6)S,KCƼ ns2 rr6 UME`'&;k71b7PyC_Wԋ, 1CylZ:s˸(LYso=Ӛ,KAŒ'!Fpҵ<-"zbmR&I)zEE`7a~W* M؝w3aH8RF9> $u 0#ƿF@ob 4@{[+hGAiHD5%C{X&~,bX7Iܒoa0,61p"4r*P[L6mlv3F?v?['+<(jҘ/7M_H2 064nT,}&)t#)1'/nLH׹#*a|dKddD+<4䌺"1K|KT{%A k0t#I6'(ư*fJ6Z6=/mk,6N lA 1ENn&oFj@A[P~Ɠso7\& X4kأ֣nJzQGjկ>Uq3nÀ<g}RAEȄtxpewOjVvv\;KUTł729UҜ&Ha&k؎.ף! d !03sPL*tg5%񄙒iF^̥@{Lh&];Bӑi7ƃx5!Gg͂7*!7m%~hGKCN.%PU eA%x?F"]taN 61?Jxh;"wCE8>^8P* %mu^m >(`O((fH3l xGN+n5SbW0p@9T;8~DCV4xQg֔6qE3oq$%V\gRZ$J8 Xj営9Fd LeX/xe8F&)de#-DmS 7U,\ Sn2g(_2ג F.e):qԸ)C >-2 0ڋD%p@Dl[%Ƃrn3ᡭPДpKL N=D)5n5K# ~T$h9)(xH4{`[A4QQLa%;nv"+dV2&9UGA H891sxqGprs0r (,ˉŒ0Lﲄ-/oOC>&Rsjs|rT;!08` "]A!|Ξ(*r&W85a3$4I~l" 7xb@E5X LLi ~`iezr)oP|oʾ}݁i[ OI&!jˑaZ ~eEWZ Z@1J0?{ثWPP'_y9z`QrrR19<4m[u .DK @{/Ez|i6b1[Uj m@)E<%nR:yֳad& \hCt~ȹ$JתI_~{ z:Α&_]2E4D  ^ w MC/ja]Ji, &0P±ɷ1b~Qz`5P;|TqLydf >V"ʲTlEY~i>s^u- x, q &aL'_ ^n#RPApwxar,dy(.rt*ъɚ6$X[ ΥJt-a $pOýj-mn?}OЊ "[܏D*1H*:3<}P?' ʘ7Gqx@rm; 9Rk'mz:gn,T bvj aLJg9MEPԌıMfLF1!a/ SgvL?oi2*ʈ@sE1VXݙaqIs&1!wcRhՐك(~֝GHڳhm1jt܎KB&`Hնn!r7~%ۛEJCO!ņvzopr_Tܾ Y QS&\Fp6N Yj'6< If qɇqǘA2Oĸb6fo_ٰ,iqқPo02hSzB8 duy ^L,uNbuQ|QtKEaZtψMY) SVԳ?u\Ks3"YZ-*MBŠڊ 7>D6= }Pмg[A5cm5qUY@AڸLgF^ś}7N?""*N2{Ψ ir\&8WAi-X0gNf~ȕe |<&VZkX,_ן M|7w mۦHX/W{f@ &\No.l& |T6X_/d@Oh&h)ۺ^39=!^et$ϖ8hy @&h`uQi,:c:%/`p:&X4 ^ޭQ8jW}luN4seOqv%~P+L jR|0tMGC"UL "ό#̥THgI5lպa/#P5v QNVAֽfMpqgжV'W$0YA\[׶ABJŪ$[ MȤ׵4sD~`Y٨d*TZ&E! 3Ak,zleé&imeY cdk}F-O %x72yLκ0Z#W&V%2zo0E(-hEsН&;86u\z9- 5r='>iѶ<^'ΦTA83cۯީfh~#vobWSP`&P}__'7zg\f f\MH ,m>s?}2'oM]}7io;ʯ| H}!q KOͫ+~L^Gee-˜\g08L`7ylÔpLJ g5'sz@A!?t f0͸Pҵ2\s:pP[\0Z4zjW:I‘{9n찂@vC0N’kOS;FZ*ap2*x+8T2&ba t(H;x??-(Аq!f0>usKUv~h6~clz*b EMOlY+ͺT_˪Jw⚒{{NXL&F܆\ f !8X]"~ :`,\FMeSl{F@  w/PM/MB,N5 dsD8kBG(qp36 퀖 ujN w\-:((eGmogv]*H#<'okǞRbZ/acb"ME9֛"=^č6b>4da OXC`  T:S!Uu잾 Fܧ14RNRF A500c^'b}h9A{<5߾ QgF(]pUkp+COe_dqSAvl1j{!ᐃ*{/h;O3T%)͈a;BE;.@8?8;G. Jf^t[$dy5XPnMPL\&tubU2;7XSuCᶟ`yABv(S1dӵ\4]!Sb&(wՏؾwVBj0(lb?7.(t&ܣCetQ%KKelG=AY P^.h͢)1th6+6EUPi%+\ 4YeNT`3tK#m/0)BjZKK' >?a+[IB1CcՖelB|ncAȜԠ_N.\~I)̪L==׳x}I<up9WvVxB |k;C-z[Xzz)Ze}V͌A5C?ٹAulTMt*M{BObHq~-|䗞j'8TW`F7ek>}XP#LGYoPEU, kDl<=ݧV4ֆvTRV `|P<(ba޼~WGk-=CW&  r َjC T\QKRoULFlo;N Ilm(|cgBn$ж[tMrw3>Q`ap :/LH pYnH1F|)B(NqϨ@w9fjqbyaYU.}q'dӋ2:2?OiPfǒEZf<4jaaeJ#  ,2B`wni k.lɅmc8;֕UD#jO - m|N㞌4I[^-14GEPgCp7{L =T DhH#(Ro 2B)tUPޓCEbQe8<-[W'='C.k'l\c6yO6&!H"=Xi[<ĕt:a~X8"4#b ?x(7 []Ҽs%_ֹ׎N΃e8F C0[ :\t|׈9N;cj$3_̘E8;s6SD;8hI8{Ɋl&0/9q$?>!"W<k6cјy[ka?T 6XEv2"(ѿБM'cVࢴAx6. :*Erf!Ytu*XX} 7Ue(^E Z1s#S앸z7 R -=K+et,Y6U;,!prI]پA'ojKbZoO<iNfg2^eګmƍ6>+%lp,r#BM.;t7[{%yv;;[WJ+ɓFWl뜝,IV2cQghb;9u{+[p ~tΜ58>IZei:'pRk.~oω'kڿ1Oڋ/b5{'r/r/M:(x5ʐ^~y.XQڽf {zԭRiXgq Nx66 Ik (`˽*l 9H:D1Y=9H&f }U9)Y)&pHC5`FO&a;"ѰKt R`(š{ ȕIa#~:u;R;k$F:Jj gYdby©]<JOCQ"-dW)g_[YAou,TinmA&2ojQHMU|"+q6Qضq\/HJGaruʧY3k{6RL, Q,p,[\ޔn^4nPfJ׸8-ezTfCdiP2/H[',̗y"=^Nvl_$@_Ĥ❸Z4X;3qNFtж@&Zms!!|rQzf&ސG+T, BAH6oԓ!hU DHV Ym\=k\svӞ %hĺz?MXaC`z~p"!W* >+[1F!pv/þ(2M\~ S6SNn?!p*'u'SzmeoනDM$ jC&MmoMaUUgC ԡZGܫwhCs|P!-YE K0V٨G'{kf%rUyYinfdmHc0i벋k;@zBB |J[_ keB&* y89 ٍ)z]Oē{¨*h5MoRnZҙ@;+U^DDʍ;s@#)߅ki_6/wJdܭ$a+2~}7D:55hFEQLTaNwε@!ZbxYEǘfWΕǍ^C>j)o*th4CwGIE rn@#9 PSȜ7i䞹 ~7,w>ziu LVnNy4gwk~e4+ 6/QA5P(fۀVL|]{QYdnF~AmZ|?Vfqlf!*2޶.ZHЌt 8mn,;{sL yJ*;z@^z +k}PD,Goi;rؘWK :^ݽT$œ[0p cK7+ [v v8O+@d`Ey$P1ia[Tn*Y` }+6Ci4ŠiZ:;Jnxtp|r}5>ε*+v7Cԇsccc\R~'Eb, k$1j5.X["yC"N6}DN(.q%a>~^Soі(DiyxiF:^O5{'u2h>`\ z-OG4+5O`jQA~-9C2Kr9?Gwv?E =}wgsw>i4yBzY$c6 f{:0{6myOpEƅi1$8j ^hk-x*(`;$n+weE=u13bUU+g@YO?wׄ>{"pwY*4җ.eTqp!W;&]-M ZϞ=honFZaĽ}x8RmC;|qgI5\;7ƚ4*Z`&#µFe30LE`f  Z7 /h@#v6S`RCZKr ڣT۾~|$ "C  U=K8K]Snp0dq<1S {'өq%i䬐ގڕ UJ=m Glp#"\|5ct7P>Rut[fq,A%G{bM?O;ZQT  ,Lm0,.aUxk?ZHv}Ϭ]a.Q_OhG\G@`3ekN+e]lu>zQ2 :dXB:2[ț zʒؑ%YˆX]1F׸WC\_"!޴^aXQ ,G&a|v\(?tU̩ TE Q ᪮4;AtT1`b.p̹CLǣ⡧2PZ^;<\ .PYErvoĨV(2L+ͺN_%-0v]NC0&'Df/fH _v6X d۔y"kDIum4Kd@HbEӞ@ 8H$b ৠ:>虎?*qwQ 0T)2#TAX P_ß~f!ҿVv]/__ZтJ7u []twq.sHcE6‡b4$@" "&Uz=oH5!)2S:S_|*/ʃxȞvL N i__69:993Պ^٠** m1rwI|h}:-N_0]`]`E pxLC5v- Js{i 6g̟LMTe<1O/sGyr?s?s?c~ 6{ ;?@ˀ | Jfq`}-WsaoJauC [=RI VfakӃcTwBxnƲϢ# ?(+"ӾU-%P zʌ̲*fv18UF,g6(%h_Lo67X85jᇝCZZ_=}dE \GrA;*l\@Sq/uתI|DtdsS7 8~h|IQ,Junz.U@8F*DD2Tz1 )9| ^q2>EKYQT" M rp}utVx[>n7z2v.3WXoc#"PbD"p#qTa*-ᩔCv4ZMic+XXhD7־Ĭ2L0:I,_TEX{D7 C QPLYrPVw1X*c4i}=L:pFʹ” Ί:h;1f1 aMp`?E# ϒ-[4{ -C$SDEJ8!^Y>mr$D6Pv\RDP`?6ezbto9^wł߸I 0Ͷ4A@\YOW)T 9S0I,>yx 0 -`-h M [O=Dy\䑊 B20d>Ep)":b?;h'Dy{2rh 6n6v8$NTO2=lSEK ׋NEI%<4~)`/Cd.NOE<!ٯDЋBZ=ȪHMDj9Mfȕ!7'7B -$"s՟.;ԿS4qq4^N2]^ɟ7/j' cȁq{[쟣wjwX[̈V-3DIlMV o+m90ebJ0(i&!mL3+ }4zxkC5ƭBkKHZA!װjT+AO dx\-QK4(x栬nu#~)(<7ncϜ.\Sr '9%sӷa,}Bc4dj$)~KA2_~a"}K#o@r\ ٠KXFTFN0}YKfp.htPqB$#?F<,ɠ^-K'Y/HdкHGVҝ-V \Tܴlk%{rVh@9eD%K\\A.Y@9HA [|P32z8EN@Q_^ptح`Tsz6ͪepxIxnBMx8.JQT;g-BMm!]T'PA!ʗ7SJw g"R(Wx48ux{k:،X- WN> `lvZxЅ g5 KKύNv`+yrg4@<j?=hSjgb@lUVh]O/>tFKݽL9x`jrٙd'H4PIΘgi52jw',QWQҘ҆]\*ѐS-DXZ[PCQMPowϺDB=}~M_+.c[(G%T)n^7&6" /F&7l % p7tX=z £We_}Nȷnp>qO/>(~k[cl55X j3w5M\s͜:VjJo|!OP%LRd0ȍ- ,RV{3#C = ]dL"d+܉t̽e4Lg'C+КۥѓXe)w2( ]!m/,q ංȼ8͂FDA$wRQEʒU Ba@=E @d4KC-( )tlƈN)-0d#]ݼl Hu%8޶4lN;}靉F%x_;^Ɂ;рB6:DXemn# PoeS99uCNh6ENe>qO,( 2 F%÷_!Ddnbna91 mORL?=ݗ*Z(Ә:&j`[C<l;j# -F̚JL-^#[e֢M̜1}Q*HԶju_s{ECݨ3tup>q~icޖIxTn86b5TfauDO<"gJ M.$O$"`LLK%ǤzGäU{KRpgF+Јn]نZHaB⽦8|Uw>{^xЇWu4@=d=O{?]s ?Ͻs?͞SvNIZPr"}K>ϭR$ax<Z{VG?T58lVVHL@_˩MQdJFef+5oNovtwz_ l_zGow)FV䫚쫣v.fihn4 ~Y$ 7捣~*$Yj>F1Y^a {4$`/ =/V%TBm|ֽ5j;uA vs2\ŃPxa};}-Asp^MB 9xZBnvhr,VJst}Ն~NvwߝPmR~FgŪ .q ϝg?NOv^x'_}~v\jao.eu| ^5?2ힾA=}ް5{wok {Ava6 a0̰ )]#O_"BZuF)Z^\ EGӞoS:HO646)M_\- uBma8x^/AF#qR) QP7 G왴:qzV;fM-.&H0pxD 0f5O [p `ظw)E4&.ʹPS+XFGt>+X%fYw9ib*h,hBTW @enzPJ*+%a9t$`4LIi137 O&Yi8[Ooj?@(xBg~=vO<k+ JQ?/+y\ksM` 5ygrЁ; LhD62PЄ|SĘ 8v2|Z] @s0O*0=AC>-_f ͔HxXɲt4b~G&IH)s1Ȋ<"2Ns+ ?נ=$82lvܔ1\rFd'rn?Ap8r1& "񨈁*EoK!N)Al݅#n0e3Ȃ0ԑQ|~ ! ~3w$ϱB1Gh1+Nԥx QGD/v-&IS-%$Ɵ'l^#沭Q !8LU'.Qffܷ8CY|q Hkܫqb:WlψByy(2GodZM'(VVUŸ5.@'x  ɞdd ~Pq˘zC NeŋmfSb,25WEIּ9@+!nG4#ZM!eQ+lŜJՉkpr =ΙBiLHrѳ $ӸeusQk#) MÒp*K`BI4(f}YAMVb|_Fh.nOE܈P#*?B c&5F-TR.L½`0gmKBPuW{pa)5wIaD 0sB#_a(!" s*X.)}D*'3\ V,ycQ|b4'JqG:>A 2}Ճ͊ط1S Ľ.^1 e3Da\.ԃуw% rU NNt$7v=ECqX+= =19 /FY;ZU2T>ND%˚>[rFȱq Vh]kDG߭h +O22g0:-͸ _YZnI^Mg[ٚC1)(#%$t#"q>49EX0)𱰆gfc>oĽn^;'f'h>l5l'!L"ʟςlV0Ґ퓔II(SܶRڷ2jAaڲu2M/K*tJB֚&s{ߜ P)cDɦ\u5JĒ<  ژ H&n3h"R dgIRH}_ 7q @Om&\Ab'[kG# >$s|w0`W8z؇71n*[kU:Ӽ?'o}۾jK%C[2F EoJ'٧)vMвaM2:o_NГ0Bbc }XL<^l/5 /®x/TmZQ9#$Ml&nuZEx(+. q4.k J6i2m ĒͰ`27h'[G|[:c*ҬAEz Um~,+( 1O|w- .b<[y_E71 7^??G'geuek|uٍ JߔXxNV^ Ylnab\;Q[驟وױhTQٞ UzB◥28xA{g8vbìoJ cҤ/ VY<`a,͘؊bZ9Xڅ"r98ʁhXD' D=]~sx)BuÍ̞eRI]VhR]$Gr_wz~p|.ݏE4.>->Ai\V1_=~ܯS6Cx><Վ8p{x^p<Ӈtx@O>qrx@>OBXDӡ8(g$l h}2W. Ϳt/u/[W.ܫ;oAaJW}Y_7!"Oޝָ*&[,sh9^or3ՀC$0K/ŭ,7b[A|sN!ywp^1#RD7qYN?+(3 go1XS2 eRDs'7&+vn`~{1.6,%=FL)Prƨ_\,H ƃ.61a_Mv(,ZzU;/r/r/r//c?)nf7wp_}lc4:pHq1d;WGA>uN@;QG 80@֐9[NSD< =V֧4 8wWd)yÑ?'TɜYZ)2K0+L&pvPb8TӞR${nu3$}躓T&ži߲4ZZ*b˂۶*! ;lyKLbp-X\F)%}˳G4z+*9+B^/S zhUr>n+LcK_@ WيI?O< ?b' +1qԈ8[skdIPҺaJ*=DWb Ir?bicёvrʐ????????????????ƭ