#!/usr/bin/env bash # # Copyright (C) 2011-2020 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=6bd49f99388ba3f4bbf8fdc0421e3476 # 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 ^qȄ!!v|ˠe<2|&$ &5溵ne!0 `\q?4cPiz\}Z܋%>hDn e!>, z@P4$`!6M ǧ b,S&X@#esC< `Q/d(3=\GrWO)`i$_bJ#]h#tF `o+0vuq8 FDd@G*KJNoܕe(H|)l@28#ҨsS'،g#&H;^{DpHJז/n(YADhzI^/Ur*Ӟ1VHS|2QRGKGVE1A'/`Iɀz:t8X`eW#)'7PƊtjMH@fקcEfғ4<@W  L̃>2lF>!bC\]H>B2Q H`0#y%}'Ks%+R &+ `1cΒF\fj%iw?H|ȁ0u.P(X1_ ZޡeC̜;=f2:vƖۥn3ZP:#y*as0P X@OՋ?SB5q1!ts11)Q JIjq\&I J-i=&wo;::ڔ/я$*?B{4?hkzsÃm*JXKV6dUD'JS{x>qhȜVfx\!ÅF?D[&Ίs)Y9C|q$;./!3z:h2eJUN3/Ki0 0 f6N0欐/X  ER99 &qֈ!%6z7 q)az,2iZqD@'ռL\+#&ߺ{{El ͯ [, ng=h@^SCWjeEiٷ"RJ$o8I`Y~9>C XF,QI{2a:y)__(?5X)hT0$k([-h\|3̀+f@<%3 z`63熸m@0GlϚ,_F*D_! 3 ((Ԧ N]GX~^{J0% &QB2ѐ\ ii֎e2걶z2LGB,t 09]Fo$ޑF Ǚ1 .÷HkmdTD ;2qCz璦vSAxD- 2g{n4]<"HutOF'酖"%ig`ρaj![ŤK[I}eU>r/_8J\5)RG$ȱhlRSҾ&om+0;QM+i55~X!z?uiux4ƚEy.`=q+-`cn@3K7/G7SZJk6iݣF KFOX[ԁa v½^slmpX'|y7x"lQɾhW[ڷ$n2ھMְcdnf]}H1[L>>V3 F8|2W[wP[C ƲȲXHIj@Pƻvsjƚ`yB'Z 'nF@)mhyLァÔj2n5cʣw{3C1%;{i`6JqjJY5!tBR)@ €"1tUHkrz gX @ /qwER ҎR kۣsEJIɬbpkj6WDkSgK-;ݵDۢ%VBƴV} m!\֙u,[$WbuͰ))zTC Ԇɜ*3 4nҶeCdiQ' y`$cBsY'`9]_j>d8/OP f-S(.|hr剃%acY{St#kDcΨ:clND̼C*IK"2t2' X\,,CK"&332c^C7n(wĒ}p!LO~MV@X/6 BaC HD [-]}3XXKK3&E17W28ҷ<-S)c IjGz^@Z AwT ݄aUaj?Ir ^wK= pkb7 翂M_f:Uo[_owkwkwkwkwkwkwkwkwow밐9R?,O%+V\.CY9}>·#ESI{{z]>GC> q_z_B"J].{@q?Scb$f:i74i ǍfC7puOG|Ωǚ^D@_/9SճSSHس7c/hdqG˼Z -oΟ[Q䢙R8cU== dH .5lFAx /JXO按bގ9<{LL=DyK[cb,ҿ>6dN:.'r 8< 5 &LZ[w'b[pvO.OӊE}Ξ`R=Nw昇+6=0U/;'i( ;;V%,f/i10X DZ9ֹ~8SîZk$'{Y|0 '"NTWKƝ=`<.,|\iA cm(>ʐ2.?d(+:m =`*+ܬ1k VHuo(S7ys!L]jQj_oOY=}Fody q[}miN}Nh3ªf 7{c18sHhSB]UHy8ݦ2 ٘'lDs\7IX ͣ^dLHЌO(OMKgnZ"2G0$B0MȟF&g'Y;_|3oOnwwnoU!./2_H T2~bbn2}ēp,wq#.< 2 B봇\{YY\X蒆=s9{/uFR[{e|op_ RtāՈQ/pW[x1ޜx;m:eקx+umcśAwȧ[NYs2nd_\NMP_Q#< 2" -w cۡ {?3`Qd!i1lܯ&D*PaVgρ?GٛR2W}>kș痵fyX Xľ_KR¥KזFh@譋I4&5^܄-}L'p5aW\ʄ+]PȁKp"A͟s$ÄW# 뷱JI Խ/PZhO`9ty!T&!8rK򾉂ZmcDti]UD7mx4%٘f^v_[}GE\e"~D\V`Mp'v3hϧG`3IL9ݹ1!Wa+ǹ*aN`2fMgErF]%¥=HItP=X0HAlMl~X^wvXf޴P3PѲ!HGD72s>PX==K} ͤOd.BkN潛lu޺,_Z̷f[_[tS;H}QsvݮZ19QRvk _L:r:0kǿ{IRG -t%6dU+ʸ063d7s-`u+4: o߸򬬒03+ޛ6Te77z\y*Z-@ަZr-f =,G FyC$@|6lcg3xֆd.`X GXfElJ스pyHt6J7>״l!~`[%H͡xx@q~BAYEauZ$. $]s-'#S׀r3To z/$$C$v(@7AS:*L |6FxE +J87t,=1 /Z#i9dq[fKI;Y$hl=P[r Cu@)4Y ۍli],Erg! iȖ]@:N_a7\J7]CKP=ȍ k&-!RK`9iҸ)"q 5P0 0C Ic}Wh8ᨗNW< < Z  ƤKwM/ֿeMW)@SPw۰)/DePѫ\Tfx%T3(E{88銦9jK_"GN"%J#\EY~355/n~B"k+Tq50n4zy!md4X 7NJ#̎[ G)܆"wzaWlDF(gNdHmbj-- [U/"wLqƫa7LM'tJ +Qpa; ˞c0cok2 =z.q%L @m0.CKf/6g\lKHxu0?YK1`EnfOU}fG 1,^>kkiIjO;#y q(,Z}LCZ M s}wue){'E۪㥅Jq;ܖ.73H9Y\ЀW~J})$rrSXM-bQNjB=d"eoHZC*u#^.YJh'?p&k+A3r]ͷPϿiY*E(7_gt? psHr٭Jv2h5v#*ƀ,R.`1Ly54Ϲn }{"R ʭpP.:ppx9Zf!_ ?Er4  d >24%}}?I/1N'0.rU _e֦đ853Q΄IݡǓ*|ʟLI~bٗI&f5._ꡡpk"-n3hSChr耖 q򴚐KAT'" 䩃$Z8}ʡMo)y8hHʞ7ٛ o>@$y-JhO3Ȭ(WHKt؍^./0oJ?d\@Oݲ iS۽T{٪zYdl)CL# 򻡾c˿X om># Қ6[IrtH2ufeE 0a&S\{s@4}n ORkW{mtޮ'9UkE6 g'ʓ<;IMKJcRpCfN؆ ayi%We2Qω.?8bgv % yB^<l\ZNncÈ6 /?X)pdC:FhPDWkJX\0_ ? Gi'JtvK e}Z,u'#'o6,$>O+8E{xh [9z \ii6:%i'#WDz&!B]q2k3aϩY`9-;DluQ9Mrp'ur_ :BYi^2SFx~+& =丁YiWz-umZ!HQ˱դ<[rb6'ۻ{g'*°p"$ hEloɌItY;A2)LEaI5 ze7>\&4CB˝/x0ӆF~qj>6"}HC!1G ,= y-|mM*q5%s. &<-R%!q/X~]JlAtb< ^;ֈVZp^{fxj@sgSKS_J]6-6"-͎؛8 6{oFmߊl{0!LVL3YɕcRlq;4St(G9e}8K}3ԣqL/Ia&9&_MW п'kFium3.auhyOȕ=jOd!X3E]q '3 #}(>=;ysxPA'8;zS? }8h?j!|ހ4{^'x= R"塻$1z`wj0Gҙ L`s6Joi8I0w^W{hɿ 1`=Go% {ٰ .Jz89z{xfPqUⶭ/;ن!1E AQ'{Yja^ o! OwLR`藌vkb2g֦na" >mQkB0lX^$G?X@r:CY1ݘ{e;2)f1ly;qwjS(L!v&q|8nZ{4sS!i]! e݂,"[]jQOWUE*ܷT8cvF!;}ى+\G_Q᲎L6dɸZɺp3 kK@fҍըUkA*5Oݲt>7HPٳU g3 ?)V\4N >}5_=o6Apn|H#oߐ4Z]/EofMyK< *U -c^f5dvפFVO  hv7J.0 b7BXpࢅÜQ>hcnfye[,6  Ґ*4Ť)|~bp>\B&22@8ec/]~4- N |_ԡܖgt 9v^aΠrtkL~H<:D4˝ 'tc| 2mp7ERRsP>bp\"B0SY&4haJe9yQ=ttQ,1r/NNPg"dlj A:Iu"ehJlG,:{ {e%]W'J;$A@Eh I5 Rfv?.R L~vzXFl iD7\e L>G7KtDdZ*vs#~<ӱx2C*HaSUNJH%EA҈5Grw 7b; fL=8`Y4Pb g x`=4sǶv.ݳh=>eɅ} 6#3g%i#0_ɮlĐ z\ˤiD nHL7׷pPp9C40;]KxsqUKW{YI%˧@Y,+~û۰Ñ`hn.\`7ɒJ@eUxڨZ :d/ *#?JqSN悇ʎyQEz5H"IvGm_m6/Zl|3 )Odkq$峱߅9742 4+4ŵqkImr?R}_A'^ yGuҴF8 qrӗYzvb!C.`yRQC 38LמdH BZF }(Chy5C].F{J(3P_KWq@ˑ=SAb{:Í$uHQk-zٺLR++OO(;md.J@0X5kn~='k UcO_ (wt+[n/(K)6z=qX1pjJ}ո.wMMw"g>ģA+භ@K'p˻W wj[p͹Ϛ*;5ĿQ>r;"Fk gvՓħ #LnlAxt)s)cc*}ks5JEHJ.N]rД@l7wc_6(C/fC`2,-mNӗ캺 ?Zƨ?>]<^Y|Y,c1?fY7t l^%!Y; 2]-ENSvz}Y՞tk5Ƿ IN* D :xd0N BTzw$/ʓhu)R&S/3^ FL1 Ɍ&^|0# )Fhq(%EnҙI3S 6p}%R)5{5*B" !* IIfo+:u;Rt5L0KA3A hM:忆bسեoP|nF ]Ձ8, @(I Ac~@t|_ ${J $-HRlD5/P }5 ZT5!I1HohuVgUn f7rwxQ9h1 mp|@cS*9g,RR)0ievYowwIG+l7u,X>nt[KO׻Dm#/m#[PXUswQ&gѧ5w$ǚm~Ac4 3oec&Djjv W O4eּV+gS}.R aL=ɺ@h'$zrkfNik젂cmSohb:^*|'>I{R|i'WBl̡#o0624pjNH1D3*o*}Cd=l4@iצLASIGʊT[ N[S1kj8`7ϧ`epXd2d}uX#\3 zr,PT DXiYNNd^{fœmѼܤsʚ ; kuCН*\؝r oBu_E#mG´ۄRՈ:?E' UnDEt6I*ߟD˽dWX%ot<@^1o^ 7r_ס *Y,Cz5X$?jOW]rk\%tM7njvGdPH sR2u%~*I/L&V 5 WdnV9xeA-,N%p-ZXޫ;; eEѻ 8]lp|sky{*Jr{c$ȎMiK}*ɘbqaGoUG[TKekXG2ۯQq ܿ'?y챏t=~f3{=g3oMR )p3yݶ[蓠)7SG"ޞ@D-ZۉNM˹|F$ga.X__wW߉ESHF^J8Z{R1D+bDC b%6_-Q+m}-_H7*s1J ʆjdxhC)^Ql{Gǧdn>=b0do>ꎧ~{&MO^w~%_#I1&\V>ιo9ڍ' 䭸svo=xgﬤi08T1ᖁ`dMk3R,BI;IAPvf3 x/Ե =U*K ͫWU͇߂`f}ꏘx6t(UlwuM$kUUNƊ%_T* sV5v5dqCQӂkQ S֣Gܬ@ZE3,AV JlwJn^ړs+ܹtn5-PS%<U]>"0 OjST 42@ X`g3'Y0.5a=_a>{O8KtV .DIX\i=7 l*Fc LrQVZ x+by*paY;})_-J#O`ScKM:w]1E;~{-]W'ƀ! Y͸qo*|-@axk_6Hqx-?=ğ-86Ѝ$'*>5F֜ngzwJhws[):-tc)5 4 ȃ|P6ε'yKI.2ҷFӸ]$UUњaV:klw=-WXkUfW'Vn#Y 'HG'1Z(='Kb/ftGe5wl(DD^wuS[]h`AohYA盧S-Eҁ턽6jto j*F4vQ^ %" =A@xnĔM~.brGC|:2iR&݉jnM]JYŗ^0?pyDѰ'l|ԙcw_we1JbT2^w< d20V F.R_v">߾l x3uѫYtU+GtUtĈФTψTDDDH$;x4c" EpRK97h9*rNiixdE<}pyp۶ 8G$XжiU-2ZWr-[nC1DzOALߍqWӢ/O,E.Gz( ox=n'YU۵ j.}dٓ33g3ߙw;~7gq)o[G8`"{2R6x#Gk~1,S[h-kIK04%ٌT [-An5 :ElDP1JHvaY\sAm(i<²T:] +%%#.:75pj{g1u)}Fc uwe8G)z/R=敎?|VQXI}}=+\Z([ zDF %` ,gZƿ⾼Kj*tM? &×4[sJ·^iJPϓF`@;DӏUh+D+gb!CP`FIAh4oKTtao̗W\lA|6>06}Um^<Ѥ@(k.<LC. 9V;-R`\N6ֱ.EGbF5 ~Cp&7nKYul&eot(ۄ8 >{=F[L5-*I$z:tzF-t4)ڀega nL!igdVi2K7B\f,Bt{tLo-rbx^`ɷ4xd Q;roCb&*^Goau߭Q$%vVgX++CB ]ℼ6]UfgHTp 99)1g%Kqp3<=gǍ=vKnt? 4&ew[QEi=aUgHE!"?G9K_e U'}W_ҹgyI< %'ysٸ.{%N=Hgn侁  ^Uu2xCO}OZfU}D`Y_ګ0(PVR\[kӃLt9]a$Vl"7PS~`" Cr w] y2]K~4)|(QESߝ' N3*%^BѓEmS 4*0յk)O$|ZP>HaY*,<&"8fٶNFTR|$A5D*L3aoZX`bRtp8L4%d&64y#~:"{+!i7D葷dv+x+dAZn1y~ 3o-||\򞛄pH[UHeKǚG06Z} Bu)/#A[{ ^2ꤥ2;B mrUj1;#sIB`F<(dRqgj|0߰He:pfR&,A6_D+U^\qC3?6u;ZmvZIW%+9)Yaji >3F"'lE;CCda;M/G Of p`- Q@:KKT ĚBf%2-V=ee5W mm!_T;pAx!3s@`"Sxt4H8U]y{+M:،G9)A"ϜȠԕ>`mq{|&[l7P ?͹fo{dr7LG|$ThUʾ|ncjWs%NPh5|᱿VQP4x=Jv>4{OVQ<%ETl`~2G̑{wҖ1< 7;؅cab"͹·hn.fOgӂgϟM[nOW\I ֶȱ+nD^7%1"/Fg• &A !H%|߸AdTwvkAGubW(qt vԨꢗ!wSDFsYzQЌ?q܂b`%[M:ճ?zd3LcWl]3.= _ BMT|Ls򹪪uH%%EdRY !QGG;Lk+`YpkxO"X)>D|tw>2" u?BhcIP`7#W-o m 4݉uE2.LiN^9kWp5A2vK'CdRZZb۹ɽ$ލG]z|cpF\(ŝ2TQP~բ=PP4F%TKG8P&Y$(  uЯD`{n1`'?uknt}=Ztn X};QҖ,83Z2nսTC55zVw5;D2 ʄ*~y]=mq{NS9@ATM?w{9DE{f>% /k+$f́ǢӫF/:4,CFpK90k_+g[y`oOJEhdLΕq5.+Vͭ~z}rvPK%rECߨ t}pW>!|ǯ蚁ܴq\ꜮY &yDAUA?]H6(T=hE\`Ր6Co擄%ǰp'7b 5lb| G\`G/\Ra. XhZ]1ǰ- ^/a d_mxAۉڼ ;Y 2N+7hf. {TǡC>0kzXѭ:w*W25""][ڔec&=*cve] TbmDu|CX`ԪaF@#sGZ}xus"ӎFo8wuLYB=BgQY,w;D.\,x.YeBT1%0VKU67Oo<~_џa{*UJW*ܷj!ʵ`hɯsT_N /ZESkJaZa6zoS8m*T]LgCR{破{yvϱ븹ώK6  e(~JNL؁¤j'l-vߞ~z^wRu;&O1Ytv%.^pBc"3l'q;h%Lr*jylťVlJ18TAcҰ`Ȱ|lJ} 3fhCԵYq2 wW*qǨ,:b6g#6Z}|$" M;HWGdg 6JMPaE矀q49*&(4&@LDZC}WKܣw,pj]r)ŮLF0<ҸrZOLӐRFV[aTa09e *N9V@90.kpVn n"#$WɪXc@ձZEbS?]93f3K0,3K sj!/ xu;>vb$L6p UxopJǶbg;v'&\l:>vCOU<;TjXnT*Jd\ʯKR) (pbg4@Xayʷ(^.?&RHa`%`6}@_(w4XmJ\wӥ1CԚٌU˒FY$}Dh +YfYGyPvFBy)B4YUשQj`v0oKgE?DlY2DEJPdf0|KpOfk0T?dk뽱(ƐQ L "Jphu2b(b3Vpgg܌e0P!$T6n`]˦ up WT`@oFAr)qaY] KoQX ʂ[!2 &BR'=gA I:X~4KGuj9O kbQsLƨ6Xzw:p_yFpΘ*7h GD܋=DQ騳!% X ,RɰE|5k쳢i9Q9ʃPRb@_2uQM~#RYzx0,Srdo M7Lۇ̭֢"~Z@Ngfn YaBpqXn#g/Z%: 趪P\/t,;hZ5ye 2W^Q}c$QnEx,(E/uꃞ-%q 5" cVQUd4"ywf~8/ ќ(_@>lCg0q U^'uS-] 7NtGNj+HR<&txyc߰$g>{=y}ϼg^3;v;$LС "C _݂C2YN΃%+ ?=5[Nt M8hɔ:Qڐ|h9*!=|j2:&Db" FmC40pP'D%QW|}W+%RUL~` F7,һDZh6 6a OW1&A} W/,$Do]F{,ǭNZSFѳ4 ff:c/܉2tfYߞ"߁vTǭˆVWc O"24 4 aZ8iV IaN,+Ċ@nĞska0?~?{ dO/'{fAL0+gk||a?ĶiDAɮ-:Wɀ g~|Xl. ^QrVEBUf`fO0VW*ԥ:n䅗-JX&̢"Q(fpȬ;4;p Ar\K†,qD[U痰l 3ťqw2.T)aS:dak ]v_>͵wX]8a@Jo?UH}+l$\4n[ɦV4H  I>} Mw[}Vrķ\ߌEK0DbrsW,>+<^m g9) p9cWY-ڹhCw$n ,NpD5'7ê.]#&oؾjK%S[ FJ %/^ŧ7+)iT紭Sh{8*7Gg+M(s5ޣdEJAVnVe\ҁxgu'YCD#9O(mdĖWWdfg0+Ívі)ń4:R/ާ[G|[c.`zHҨE H7cсQPyf=?1_k`f(jc8H>cmEQ'iuk='EP:X!ěѩE=28%VoK< .ovN3r ?TW)c. VY>~aaݬ͔FC`M.;PkF[?Tj$u|g>;<=G>^f2CХX/iEKp_EK !E騡}.i?Zzuq?^pJϕˢB. wЉ>.BS ׵FTu8 B4g՟acꏆ߲ dϞ>gfT~c?,Vw9~ΓUap*;ⶺs1o45A5\އCݺw3tNow q-wpy \7޸һq-wswÅsn==O~n=y='~\`+e4,Q|sw|Fנ*ր+sղa|QN{Ѻ,wOvY|}:;opٗ!Ŏ߼1ۓ::ھ,~DAҏ&t1~ Fk/ތ8DԊrO%k3JoZ\c\~w8wV.ëfdK|Hxrx#&61bߤ\"2u:WQ[λΕ;`~]e[.7|c6cاO[NK~ng.D MM[ѯуhWOM 'G [|*/=ȫoho;O]bWC_7PfO)R.Z3DXEA:E3B l:KKyLnؗ~{KE),Z=^?zU3yy&/噼9[-!:,$v 9g[CڜMV1y[ÞD&g,&I^)p,NJGY cX> g5sأT!Mi4ZZtqe ^!Wn霄es[\2tBB\Y ͅ_9z^岵 D$-~-urKc!17\%w/WŶ;OϷ{1O?<}6Yj5Z[+mD-8_bxW].^.g45[˽ eOccg?g3~f?g3~f?2sE0