From b96510de655c10364e7c0581db6236956c02e193 Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Thu, 2 Sep 2021 13:57:12 -0400 Subject: [PATCH] chore: Enable icon in ubuntu toolbar --- .../electron-app/assets/app-icons/icon.png | Bin 0 -> 11365 bytes ui/desktop/electron-app/src/index.js | 13 ++++++++++--- .../environments/ubuntu-focal64/Vagrantfile | 6 ++++-- ui/desktop/package.json | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 ui/desktop/electron-app/assets/app-icons/icon.png diff --git a/ui/desktop/electron-app/assets/app-icons/icon.png b/ui/desktop/electron-app/assets/app-icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9d162ec103dc0ecb97654257ed7f9738faa6a4bc GIT binary patch literal 11365 zcmbt)byQSe^zWS+x=~sh2|=a1h7yn#X{05kONJT{5CI86>6A_ZL6I8ilA)U+1qP&R z=-+(b`|JJj{&?%Hd+s{-p0hvatb5MBJI>x8bhTAUi5Q3g03cOYQ+@#eAnYRuAi%>` z=3b@t*b2u%K}!JuY7>aBt#PsMthQ<|v;Y9c1px2}0Jy|9!M6awR{#LEtpGqO4FG68 zvVQ5wU_0<^G*p#=yZ^4d){CVDh}`{==|`WMPpC zS&f2LP*ygay4sI_WcG*lhMD&RT6a!|=1=4N9sV&{BBkxmKl;ZvoL>YW;J*pFtm!!@ z-oIv}V5MLsd^obW=v=m6A3roB&tA{V$G5Y+7dKRS8;q*htE{}Xw^x34EwoBY3#GtO z`2Q*q48|kk6hgco$Ybg~IPB4BlE2M0hbp`L4L6M0GotS;sifPwWSHtKTcl?OTyvTC z3IcN%PpamQru^DknheZF7w%OsAA_Cu}$Q}Y+l?h}$A^-!B(;RQKt+KM$g5w@+Jtf8wOy8QFqy?p; z5CH6eLQtU=>m$};RspsMI#ISLVMUU(V#ze2kK@VoYbVB1z8e^f@m;2a_Q&g8=^C9A z?qsKcw(#c1uj$xzs_208OjI_yp}pxkqj>(yV|f=(rL}<`;~;~q<73etQm=Z@C)U1B0$drtZJjxjh%Rps$Z_pyYY1 zpp2qZUIf-#|I#CrtK-V#eUE!0U4GG+k9|=yf3P|CnZaRG@Y~bAxcF7x;j?3DvLOf)%zcei)E8gU&*gcZev&lxXR|!lIbn_v~K? ze=a3@Gv30D*y^EeMh#iXCvti3)xQ0W|;A9C}6Irv{JYyxo zW6eCQ5|_h=hkB#B|16n!pFTO>-fl1V4j~0(w;phAP^HH??McasUYv*CY*Zj`|1Af8 z1rUI~a;XS~AH-^jWiw7tpMVVB?!B2hoi#mn#&SQyPa46{8XLGb9?d=vpw;DrTj_Kd zddBhJzrS@mO(t(8M6Ac97gHDtzdi%!KOEAsXtYfbh7-d>T~7bHnz=0;@TZE1-nqsd z>VTs0gOj@$-?LSF-_}BoKjs?nk^Fdq$X$YX73c~7O*6h`N&S4HN_zO8$IB^ zF%3B4i{Ff%Zi+Po>DXS^#SAYSm{x3%sp(wOZ;_5Kc)xwKZno(fu*?bILE^qKgbC0C zsv8a&@MYJ-x7P@!^99+O>Raio+V0m#-Aa{`7g(UlSf-*+ZcfJa4smYK!Aky1-fn~@ z$T~q4P_)76ScUNPU8nl{Otv@P9*0U{(anr+Eb<>J>tvo3`u|2`Jn+5wCI2d5bmk0o zf8S3>n{LWV@CUw-Zif|+)g7V*T-TjdU%HCBUpuR|?A6dIX@pe`Rn!Mu8xA*q$~hrA ziOa9H7_YhMsH5(8mE}G=(bS@={Pu~G$665Z+n6@BJ?wJXkvp%EzV92_Et83f5nV%^ z2G(*hk0o1V=YS5Sw3;ugIXB5}PDXB9^^4hz^LYfq8=(p+uy-*4-D?L2PUMs5}RyD}-&@}^ai*mJWIqaBf%=PS{F{w2) zUMMdHRA6K8)!d0jgRS0fEm^djChaDsFF_H{SW9`~Oi!{Dw99KxFHdPLCMEAeUE*?S zM`S4@Y6QM*oV~S~sg>-{%(D<&yY{ z)Au8`h(ULuH!0_YZNj^UCi~UW%xrEJ?C|vWc)yUtX*Mefycxw3xIJffS16l!izN zf7TwoYDkg-VR<<)bT|q)-r39!oO<@u@E)YWg8lCd`vnWRgKpJKNuW@pe^39RIX?pQ9R?RIrGYQ)t$qsHMp-uP0vo>aYKUz*~OY8GWgA zY~TF%H?+*V?Zxi~LUtm@Q}YUWF~Qp*RMPK9Jdbfp#eg~F)2sE8FJdCM_+MUSzh@=* zSX*7c^T6+>{VP7XQa9|QNkn^CV+$}z{YemknoMqAOGwC*C?q0 z4@Pt*+d(r<;`!O#ZTaBvrRH>p{4`x|E=#eE?YCH0;)KD(oRiV1ow&(qmpS)b`EhBm zN)gbW4Idtszn%(+T!_4>|kx>9;C4Mv%PF#-;Yt z(bNf1^G=-YATehgN_9HjABAlz3;GSy-e#&d*Qstd{*n z?Wm#0%`@28bPTiO>gC@|nx{^)V}UI!P1kGl5A;>2;SekTC+2k$!$UNQ=mfW& z1U~L{C^fvMWp1fQVLI;l-N>MP!fymN{==Exy0cQ=I_OqzJM(8-LHsc$#mRoz`w{fR zeGk{^f*zdB!Ma;bX(3&kdA`!WBD^PxKo*3l>Zm<9OWJ&Lh)xAYE(m zTymF%V4-aR$c=xW@ z7iVnM#z%E|!Jy}n)ksS!QrcHY+DEDBUF#qH<orrW zzmjlkW9fn~*xe_FzZ3Q8xhEC0N4WKa9Ee>d%&s@h08-)<@`iRk8Gv4;7Qq=J-*M7( z@BHJ1Jz6pzo}Jubd{2|GBvtXAtSI`}UW(Cs(6i!9-&eK(Jz#U@ zSc<>brX)r_<@g9L*p=BJqvNn11dsp>KZ^xxrttVXU!mIswmw)jo!BC@at95uQyCbX^*9Mu8LfG__P@x?Ky-Ygu};PGk9b=56Cz7vTx!78CLFzl zFOPLQvv1Qr``0ZwycN|6a>s>xpne*ulx5UmMFe}w!+Uj9BPgOYycqeVym6h+uq5$& zBeX#^;Po|84!bhymjg@{rk1M??8b&QV7Dfepml7fKw<9l({0^1z`~xkgP9uV?jwbr z4G6l(Z-vu%SXY^9f_xf5@))jfN9GOF+QsY6iXCX5Sh^S@{1_6bGK=B} zografC=iXl7~T4-S#9t6-11cMi|N!7@Yu3g4wVxCnz?C=6E1j2rDPo?nD>-SWO9(+ zqafV6Z!)N@aT8Q`2th^fGmsuZ#Iu$K>IaIpjvf14B1roDg1p5>}GSdrCx5Y=dTG zN}TrLl{pJwq%F0mrS!0T+H9O6eaxO35V>ZxvaP*W!kp-Sr(p103vumit|y zG8+PE@mD^*`GKKyT=qX#?`i(SMnjyxa;D_9q z&#NbYoYy!%gF~83q_k~+t?jZDpXiraFcDP%%=UuKZ|XRfha=J)WIGFu=pFX1{7^1^ zt4M+MzLtvV(uDG*cD$C8@{{zRH)Q!5@_$dZ$4u4czSuJ?=bb9t_rXN^{POkf(+j9g zn_DI)g`B&8DFPNR&Wz}8XD9ehNO7zHW@n|(3^07 zGQgKmb%WgLvP{`BSq@%Km~IfyNYt4t2>+`QChcaxGW3-j{yrBh!X>RC$iJU~Tsc>% z!BfFwWk?bfC*)dNgb z;<^1YylGg1kz@WGL)p1B0MXaL1QZXRCRa=-BHCx)-hvAflDzfuABnXw;*fYs;TZBMs@fH4MWf z0J#hv9eu?t|5ji0)0be@^4`6=U!G6CtumfYhpy6F-LXkN5a5&Bku^SaWH1sV^Y~r9 zuq!0k4k%}T)1>En5c%e;dHcokrA}%4?cNW#gXNb&xF?nZ4@+V5v_t|#aNn_kYw@Kl zatVXuvGf(u74db}{i%GyEE^79-oi3k0NrT})};yop)cAmq?X5GC-IMGQ`bc-eLW?| zb;R~nv5KtRNEP6NG(DR3Z#Ks%o4^kXOmm`G`7w8mG{sqHP`DAXY%K}H|6#lsFS?E_ zr7SwpkF?OMJHAtgNqtkPWzk)TiAh9Lv&QV|GKK{9T{=vI28Rvr`*CN6a&p%ODx(jjR=LO(+Qf=~m2DKp{$DS7WCZ9H=O8yM1@YI0KiL;HVflk>MlY)W*y$s7zdX!g7!}S2u6pyZt1^A^StT~b_wmm z5U(8h9-?GDteP!?1(twWO6D3si=4*DXphMNm84*Wt#^583F;~sT)X-u?ixVOx9IZQ z{sO7Y-Fx%;++&)rX(8pKeC#uZK(iZ~o|19||KrjM)?WImC3eNR>f9+N#9MOloGUir zjQH~6s;Y*N1uiY1R~}A1j_>sFWz>>Lm~SrVX&W?H;)fglS<6nwhK48R-4q`y&JDmG zJ$B2@o~CR=H@0>+>$}}Mm%9ZDIgMy>Ly1^=<3u7eNdUcQin`(8X}sC9n#;Ka8C*t5 zYtgGewL>*@LcloN^N?_~6&<3NA3SAIayz&G4?m~Q@H~BdJg7|FPUI0!Qi2os^mOd7 z1m>G-_gv~WDvIgr4S{_AJ?M;{t28O(=N`lI_Ta?()4#6}gEdkaH+=wxlpbJzZw(wv zg*A(pTP`|ysA(UiYmbXq60t#`YX5L~-P`GZvce~Wa~AMgj@#axt%*z+QQH9>aRaOE z)&SoZ-1=Y0q_wf*n!~2qf3&Q20D+y+`9;SrA{;P04{#**s55$cppb6)$PQ3USn3AY zuC6R$f*!WeimNxl3Sw7SX0C`LfzH(8Clj!chEaHRkjvNTkqlSnw=ulF1y~^z)Yk(K zz(;?YuUsW}zc@c_Qj=mXt5IW31eMYhpv4sK}Gk?%aA;$`2yg6yY)47hZXM+2pX`p`x95nOA~8*ocRr z2!URLw^tFw(qT+BW#l=sr^Y=zM`O_M<5>GprT=l7BxupQP|#@6l$Dmvuh@I&GhLbm zGs$b6k}cxyk^^C`%|)GJ_>~x>lf${g>3+iC3#e-5Kh~5#8f*c#xSGKpqWkHu-{|?J)4t`%dqbPMV?h3k%3E%6`MQ}3TK1zD6EnHFeUIWEq_WdM5Ow5E+6_TtskI> z6yTEH>hfJiZ`y?hPgXY2u>H|}gwW{&B68p;xL^J9L1|X0EpOS`LN}n2#S2?PTf%s`G*mEO(jH<;)1S((A4u-M!0SLP_xA0cCS7^y zsgf39UK9~f=T-^wT^JRe;q&;s$A4eaLc^wljK6X;e6a+M{{sj;6m2N_bnyy7D-M>w z#5Y;B@kaP|=XDWaSd!~0qtkP2#7@r+Oq!#sotnf8d%UljHfH>S7J6wX=W|UwaE39I z#w%J~a0d$YKKOU# z`H8~&Tm_o;-kz|l5K>J|#Yd#4h*a_Z4Fv~rYl9W?7yBH)Q;K*$;?&$u>P;IZ6Da!L z`8{GK`!@%96G%T`QqS=7V%%^rnvWtsq1|bVdbu6sVcH%}sm}?1s>Z_G+FIoT7x z1Cftz6=%4)WcDV~VZYRCo*`K)z`yWh8mT2b9HVG+@E*9~8CHE~3|Dl;be89Gtq1~o zClkZ!t+w|@+d`JZde>z_c+qcC2UEFi`m|YS(lN*C@>(6XfDECOq5A%ZMI`}B{G54E z%TW(WjWB6-Gv3dQBcbeCte$6M$EwP-D=MCoj6^v`*q2PXH(o?P_w}rNNS>Ez^x6MD zqd`*)9hXMR-eN7|{2AcqylRX}#Fg>bdu{gw8qKaSaTF-z3Y_BIuY#x&r#d5!R=hTt z5ZjUmr2-4C9Fxy*(C;SAiU5M;-@Si{+Id$KoW z6M>cRFCTa=Cza%7aXMf5(=B*P5o3hMOWF3k;$@q4tv)#^#y~9Scy|}4NTzz8I!g<4pB76G{XqqH*jH|Qk1?mC z*;7Q5Mwljbazhl`E!fNA1s|L!qV%8s9%J$GTj3wBze2tDe{k`OKKbZm3KRC%^vm_Q zv4@4$_5PHDXGyGYsbjgJ$^u4&JsrTTnp+r@N>TkGl2N5pe`HT z{_X!BQ1q8|O{Q4%$y|QOUfJ{=7&41_bJdV`D;dogd;=AF^3mlXDV(7Xf0?htRHhK@ zV&U^SpLbY6P5TUJ4`Ng+d32l_MgmRyrUB|Ap+I!%fLNG{E<L9EWPt@!Kr>;+$) zX&2sus!wPWJ%35wZTYwGMIG%b;+y$gmQbk4gch+jMac0{1tPYl4;8(BT|ux!ipZ*& z9OgOkmfkM6aiqg+S`Oag3s!Lnwa2uq{Qy}hN;N*mu`9MFsg;v9E)MV73LxP-mQMQH z?^?Im{`4s=d6h()VrEE0qE<(n+}owa!eWxhbmB^BnZF&I%tF-Et&`Th0%52&^HlSi zac``|9`?1CFulpEv4_lY8yn<}_uKTlR@G;7QuD3rdtX2dhJS<1!7nkMn*Dv8g z={y+VHkA7P?(8E856J&}2xhp8%e-Kw$lJCg4ASDDKNQ-jfhb^;&Fkl0=PU9k=b>w8qkBnGvnL?L0 zg%s7c?1euX;y@f6Q(NEJ8>9lMUdeosCiTv0T#zJzsBNi8-J6tfZ-dC3wq%jBN*l7{ zAVW7`98c=VC&W3HQ$c+wkLPJo@IE#Fcdtk4?n{_{n7wu54sxKJxm~1B*Bf(TTqb1I z+oKn94^{AscKzUOM(#1tMMo5 z2I2)C)5KGo_}lL3+L0CV98LdDKn2#-r@RD^*p1QOS3DG{m1DR1h;;WQoo~3^{CFr{ z2tl44EO?XoNDZ${H8Tb81rOiQLmXYQ&7J@W@{oU5i1Nz`i~e4m7ZCLK{fg>KYvAaU zla4d5Em6{mH0yu>*0v_apv1#)spAgshy&x=zYazUgf$Wk>j`!U@$4$}#xuytfMt%p zi@Y^;^||aM89J0fjMr{o_m+}&5Y9R{{{k?(xgBN9P(&Ig3)PSSkaZ3D)1b0B6SL>GRD3CjZy zBPE5(5rkVMpl^YK^y=e`N7AfajLWmBVXp$=mv8^HUAR`t*s`W31Sxb!u(CTbC=pdF zO$e1}|L0hfO_=&zH+?&b+wWGE4+dtD-;&VpH{Zf}gx@(R9Zwn|znX=elS}tp;s-0W z*_Z}A`zco+zr+cEpd^L*kOIR?FhLF8opaglg!B%h1kM{2Z|{Y7ylH|wD2YL>1aH~< zkVSV5g7`4;vi*^+*%J`;$3uRa)`BDNAzumaPZR$-^2W)fK1gaE84x(5tegvUONK~2c%V|kId{=L>a^n6oeP)%=v$yW?l zPto{*WLK)u+xRAucX1^zpNHHN?9D5kB?hq z{_$j*2nT%D<+~sN3|AveVjd`z&nV$O;^>j34HxcsP9MX1N-~AHmPjmRCLxQO&7WTT_c`M^u!E{21zt0#GC$aw z#ZN!X<^XZ*LcTpozo^&mz0`L2)ND_aliq`iR%dzEia`4~Pb0ONcHVIyhdOXI3I+%r zjdLgVYV&uC5yl3d`hO;|0bzn|t+3ifTcvqWVd5Zvk}p{5YiFY!9&n7>BR`L)L;sNB zs4Nh(N#Mf;jo44*WO3W6;24M>668~~xrtH4WCHr?W59HAT{KAV`FQ5S4fIw8-3 z!0x~1mZtU+a>HAA0Sy4vB1Diiz9LeC2!u=oJ6@G01ymH;6dOI1MJrXahzhyilwOVa zNgUx(wcdnTkwEdFutBK%QgvcPKlE?}8)W?6z$I*xTxBgikclOX$7E@bs+0B^5<}tX1JN)3YAV>Xv=vffv z#`63;3;OhU-T)|a4`s#h!f!0+1*HVM^pw2MBTu!a9pglK+xWu|vQq@E#K=#A&XMtZ z^AMADf0~=m?b!8u4pjEZ-D05b`yZ=bacHca8hQ0N{?aV47l@!+6qNGVFFyBoe>a5D z?`yruP7l>K04?0jzH`uKwpbDi_0p@{BkD1JjJV>6Hu+6ubM)~rzrERWi7!*j>YgOT ziuUHS=v5Qp06@hg{u(?ZGvdAVrSSrdTiaD+hZD_XOC)$P)zv4z=w&tiZmn1_ej#%S zeMVyd}I>oK+su`^p&k<-3OW#;bM-B5P}w)au)A+MD}G$_R&iL~@wtb5YltDV%or1(Y?qScxnT4Iz$ zszFVuivxSe+gh3pipcpw?wdC|^qr+ivv+-newKyP-w%-K2%MJekT8c3Rz^I8t0M6; zU3tN`+jcL~0u9B#e;4=MW!z}k6XWyjvH359puX6F0$R*1+pvqj_&x;l#}*$IK6H@W z=f3Z+eNHW5EdW40ITA(jYT`)AjG=)`}Ql3-}4?rsGFreFD1xoL*JPrMDUv8 zt8YGJCzrZ6`OkLew&fQcYq*;JyVsMJVUM?hUw39bYunP$x!q27lBJN)i%TI&sBUkxEnD7yLe zYzbI}-xMwd+6G}hu=ugS&`m4CXD==Mignn|r_N1RxLAI)xDV^S8y%do(! zSW0`ya*Mp1s|$}Cfe&!G9ktO|^F-pjV8=|V+KjQLxh~8_L(;fFc~dF;pbO{Iefy1> z{)vgbR8>5S+y1i7D^xli6IMW4JYJjk4PM$j&3$Ao4h#qSq~eLFaV(4A3GRFaMZ0es zOYB#lMbes2&A?_mj8|>7GTKCj-%2O`NqTf z`s;L0RQ!z_=A;ZO^KBF9=Or^6vS)W)Hy_AP_}uN%VWjLj0?-{@=D` z{lCw-d!ta9j1K}so!hV$B>DN?s_X&;G^n;(plitH?amRGF=C*O30zGuL)qxz>3ILo!F^!^wLa{JX zK)*wTTWdT^fYi3D&kpaSkNr>|-Th)~F0Jv_nc{jkw@`n3*d~#z1Xq{^PI%MvqwI6U z&R+lSaNqD(3jm>N3yOJw~4|jX6 z>=H4rL(cEeAuYp3_a|WBvw_N@n6tmAv!d0CsWqWD(L^D92E3(qmYmZuBHn_db@!G` zB6|($a&?tB4Z!FAdMloy0g;!2qEdq5QbOW<0s>M30)A!NAN~)3tGk_( YeZc=6fPeBr6bk^6|KVm2MBM;x&QzG literal 0 HcmV?d00001 diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index 3f113cca2..66272336a 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -22,7 +22,7 @@ const sessionManager = require('./services/session-manager.js'); const menu = require('./config/menu.js'); const appUpdater = require('./helpers/app-updater.js'); -const { isMac } = require('./helpers/platform.js'); +const { isMac, isLinux } = require('./helpers/platform.js'); const isDev = require('electron-is-dev'); // Register the custom file protocol @@ -113,7 +113,7 @@ app.on('ready', async () => { } Menu.setApplicationMenu(menuTemplate); - mainWindow = new BrowserWindow({ + const browserWindowOptions = { width: 1280, height: 760, titleBarStyle: 'hiddenInset', @@ -131,7 +131,14 @@ app.on('ready', async () => { preload: preloadPath /* eng-disable PRELOAD_JS_CHECK */, disableBlinkFeatures: 'Auxclick', }, - }); + }; + + // To show app icon in toolbar in linux, set browser window icon. + // This is a limitation of electron build. + if (isLinux()) + browserWindowOptions.icon = path.join(__dirname, '..', 'assets', 'app-icons', 'icon.png'); + + mainWindow = new BrowserWindow(browserWindowOptions); // If the user-specified origin changes, reload the page so that // the CSP can be refreshed with the this source allowed diff --git a/ui/desktop/electron-app/tests/environments/ubuntu-focal64/Vagrantfile b/ui/desktop/electron-app/tests/environments/ubuntu-focal64/Vagrantfile index 34fc0cf13..4c2c51616 100644 --- a/ui/desktop/electron-app/tests/environments/ubuntu-focal64/Vagrantfile +++ b/ui/desktop/electron-app/tests/environments/ubuntu-focal64/Vagrantfile @@ -35,6 +35,8 @@ Vagrant.configure("2") do |config| # Setup for testing desktop config.vm.provision "cli", type: "shell", inline: <<-SHELL # Install ubuntu desktop GUI + # For GNOME desktop: + # sudo apt install gnome-session gnome-terminal sudo apt-get install -y --no-install-recommends lubuntu-desktop # Setup boundary cli sudo apt-get install docker.io -y @@ -42,7 +44,7 @@ Vagrant.configure("2") do |config| sudo usermod -aG docker vagrant sudo apt-get install -y unzip curl https://releases.hashicorp.com/boundary/0.5.0/boundary_0.5.0_linux_amd64.zip -o boundary-cli.zip - unzip -o boundary-cli.zip -d /home/vagrant/desktop/ + unzip -o boundary-cli.zip -d /home/vagrant/Desktop/ # Setup localhost ssh yes | ssh-keygen -t rsa -N "" -f /home/vagrant/.ssh/id_rsa -C vagrant@ubuntu-focal cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys @@ -68,5 +70,5 @@ Vagrant.configure("2") do |config| yarn install SHELL - config.vm.post_up_message = "Login using username/password: vagrant/vagrant.\nBoundary Desktop Artifacts: /media/sf_vagrant-boundary-desktop-app.\nBoundary CLI: /home/vagrant/desktop/boundary." + config.vm.post_up_message = "Login using username/password: vagrant/vagrant.\nBoundary Desktop Artifacts: /media/sf_vagrant-boundary-desktop-app.\nBoundary CLI: /home/vagrant/Desktop/boundary." end diff --git a/ui/desktop/package.json b/ui/desktop/package.json index 13e2ed6db..aa4e59fa7 100755 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -43,6 +43,7 @@ "cross-os": { "prebuild:desktop": { "darwin": "cp -r dist/ electron-app/ember-dist/", + "linux": "cp -r dist/ electron-app/ember-dist/", "win32": "(robocopy dist electron-app\\ember-dist /MIR) ^& exit 0" } },