From 19b3f8366f7a46ac9360bd17b670c240d0aabe87 Mon Sep 17 00:00:00 2001 From: Tw Date: Thu, 9 Sep 2021 18:45:03 +0800 Subject: [PATCH] feat(plugin): add exec_cmd helper for executing command in host Signed-off-by: Tw Signed-off-by: Tw --- assets/plugins/status-bar.wasm | Bin 435070 -> 435055 bytes assets/plugins/strider.wasm | Bin 535162 -> 535152 bytes assets/plugins/tab-bar.wasm | Bin 424785 -> 424733 bytes zellij-server/src/tab.rs | 9 +++- zellij-server/src/wasm_vm.rs | 34 +++++++++++++-- zellij-tile/src/shim.rs | 5 +++ zellij-utils/assets/layouts/default.yaml | 6 ++- .../assets/layouts/disable-status-bar.yaml | 3 +- zellij-utils/assets/layouts/strider.yaml | 9 ++-- zellij-utils/src/input/layout.rs | 10 ++++- ...ee-panes-with-tab-and-default-plugins.yaml | 6 ++- zellij-utils/src/input/unit/layout_test.rs | 40 ++++++++++++++---- 12 files changed, 99 insertions(+), 23 deletions(-) diff --git a/assets/plugins/status-bar.wasm b/assets/plugins/status-bar.wasm index d1ad39e9020119af80d4d791e42fd00a925edf31..285669e5976ad31d2ff6e113e6a49cea21f80d3a 100644 GIT binary patch delta 14976 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 bJ)y_H=XgAiGFLBq#tVOMec3ZU-#+rc_2y3g diff --git a/assets/plugins/strider.wasm b/assets/plugins/strider.wasm index b57557a7ad3d86104e504c7ddb390b8675010596..ab3d3cd9f4a7123d2486abad400de0b14fab7ddc 100644 GIT binary patch delta 25426 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 P2*h6yz7icgt@!@~=<_XE delta 25316 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 DHSZ+L diff --git a/assets/plugins/tab-bar.wasm b/assets/plugins/tab-bar.wasm index 896512fe24e574197e1ceb20da2c15767f95e109..39705bcb12e48b93a98c249b56f3c860807a1a74 100644 GIT binary patch delta 29082 zcmeHwd3;nww*NiVOFHR;kf?fFO{tgFDgzf<{4%T(ly> zm^Ut=L1a-mVQ7VRR^TrRiU<#sup4u=!}9OTe6r!&e)Tyi@j z9Of<>Pr`JG8Ic~ZE7B1e;c}ZxL_l9h>&WFGEzX_l2$E4&R&0&t0&5>CMxs=s{XTTWBpU`!!Y5pnfHPrOos$eNAWSmVc*n^iTSRKA?Zlf6(9Q zWBQ0bq~o-mdi7p0Wa70mX9cgDJ!j#f8*g9v6qVCzO!zLko7U3?nlkmb^gG%`we&FU zq^Ic_dV-#$N9a*{jC$>$U(w@q!*8gDo~7NihwA8g+DrSWo?fIE=wC$)0?^;rhM~A*CbD#=6y9Ll7e#S{ghPe$~)kun%XyeEfSPt4(QX4 zj+!(3jKuddeU?*BZJ_T{@4J5biflM3_^>P62p2p8f)enuV3g<+lRzBu)g!=g=_q@+iY`f ze_&?nwcRcJq%_A5MGLPEY?;Td9dB-%R!9xzC({Nyj%6g6N0Q>@r*R&9qX(+CA)d_qP!P--0Ieba$gAV)pm1j2l&=F;&g-mnJd=J8pSY3>=Hl^6!K z9zy#}^X&Mnl&~7cu@^WdJsL>sJYh2MT0WsGzH28~)aMFOp9>BCIiYP#!0UJGt%k&C z>XE=iG_D;taVX)Ls;j!V&y(&(%h#_eP&DffJC%m|NY6q$`cTCO3_mQc+!m9$)!di~3 zT{YW5t=Ebeigtr(jN|uUQzLw9O><61vANt_GP9H(HIL66Nzc1PN84x3$I=FIBrIJ|kES)7z(Zk*K$;vhKtOEYn1H&9&h z%#L7!#WTCt&MR$A0Nl2qBZLbBzMU6AJ$M>U4FBW?bn8~bJB!K$Hkpi?Fc^xzvx{c8 zlK95wUJ7f&bLQvX4uhe1EcDz>C4JQZ+~$uAbYL0vC5Z(*2?FrX3|?N@X9@#3=QPQ>@Bxykr`U~cbtek3|Ng12t_-PQul zhPj!j{b6pqF^trrvNXRa(xRid%^tMTofwGW844cB@aIEtD2Sr6Hg-i(8Mq6zFWR-{ z(s@Z?wDNZr0KDlB&g&>nt~Fnp*Q@s31%l|bd2HbT+FhHt=#XerzLtrUWf0gV+D}DF z9%;G@EN+yWKQ0M$iqnkpbztZ?qY8;HN%N*^IwRuL6Z^Dmp#`vUx|Sa2(997_f9GZK zF8oei_`WlvmyO3}&sdh0yPqHJp?Qtd+*J=HUybTJkgvg)uO~mmszCET`6resuE`QD&M2x0sx~ zam#(JYaZIC6^K5%D5Bn?3kEo4F1mFc*T$_%G^1{7b7_mSX2096uv#RW+iu(3Qj2l7 z_qJNJF}JL2v5&A8{@Z`9#g3n8G2mzB@Viy*TWayus{Wys4i0u{sm1NViI;-UnJ0rC zE(MpF8D%YiE6fQkfh)}oErF}d{Vjp3%?mAocbGj_kH@}Nto}9aF*~p6ap|lMn@iU8 zxfFcXygis~9$8a(X;p)nwYG(IoHD1i1U_q;ErHLOZ?pt1GacnE^j%^0ZwXv!E-xQX zRpx>6UyJIy%`R)w%ysMHE}iinbH}>8OTov?FV~$Q%;b(V-sV5w@h+0u7w&BB2Jpx| ze$il>FWi}8MsHMH@xq;{X4%H7h;w(>gC$bTCATGT`(F2M6F~7h_l>7BX2(sp!W8`V zrh}14O1F-30QTI&<52KcA9tg0>hVr=rZ#^2zz8a@9rw&=L2GKOYYK_V%@fb&0v5aL zgGl(_pRA!=WGW1x#_HXZ4PeD@>wyYS4x_m-xt5os_*Fr_LO zBF4eU5<@e#lCRtx_x>jIe)9dn4w!`PKI($+ar|Ao>Z56HJpAE_F8Gf4>@0>o_t|p} zjJN9x?)>Bz-8`sCIRyDeJs>|6#Fh_eD|wX<<{-m|+fl^4!_2^5$+{?4;|m%nSpH`^e!YOBw^?7$>u zU%(`5@4N7xlOC3bM^o>*hlvgW9ddz_E<;jdCEr*{AD05Iw32!&ak>?7n3Zg>lEW&g zONgKZqHko5hq|D*t2{K8YU;Lo=w>RcfOIzai$ydR0b5TKg+{dnF=!|b8;^zxCH_d5 zT&j|n3pxF$yf%t@MOq>>+t?wuMbRLPaXg9!$2>s29m8PN9n?yEQf7OpBWlKa=}%E? z-a4~IzVEyo7)@CK&y1$06KwEgwy@AS`2~6m#89ui#`(a!R^vlfJ2ak5moXCd%9L1YOW(;p zvD9}Q4jvjSa#+Wuxf+asrB+FU6%K0f>KbeT7<`z)tD0{$Z~*Bv?vYOfIQ6jpr&3H77-gcu!JrZy?%*}-kPjwfyK3a~$&{19R5KP-bC{`y zKnAgv#^;4SkU~qd9sfXJ$}B_aFEG4qMa# zdEmAiv+@3+RQed)xK%6J;dtx2 zvu;>>ct~h%-N26YM-f-Sl%O-wMqwS~tEkKDM5ZI{JPzspD6WgrBNzoy;03Rd01UjI zOP5Ci1D4yOF1ag3Lj2YFyVFegC6w_dxAdUR@s%J4n^v%)SAg6%OQR>HWZcWLz^=u) znsY`F8!ouT4LvE)jk$rhm#K>LxUy^^;h6|2fi2w#_5f9-Fv}>GYL`z)DjJwl^qv2U>a2z#$qVW8PreHfEBHumdw%t zQ#%WGfukVcDhghSwQx~)712tFE~MI(IE1A9|?>rG7Psuw)289I%X5sW*kmLGN+el^<-lqJz zTl!)J`5<5y`yN~%VJ8R}hXaR2!2mGn;w;XDJ0!*;-@4cOVI;-jB3t+%Oup?;S6Uno zu0nbI06GA!NgqgQQDr!kC=t9z4jxDaoyr8WI*4j0_63r6VSqCo-vFzH2g6FYGLdUU}lXh9YVJxHM+%sIJlx%5WxVE z-wmNWMMS#LMUL3u>FucU7`tTuq0lJ#a_Ug(2DEG#N}bv?Y*t&~cQGbe{sFI|Nb4=2 zgNz1wbSOQ^Zbo7^V>G)N<@#cp1!3{GVtNGhiub{C?1;MXX zH{%Kz8)7G!ho2iOKN&$;&Yk2vV-EfOXS7qE8cFxsf>z!;ijpzK?W1TerWiXKE>dL$ z-G&}Vj-lZ&RUQ}vzbO5xZpt{ig?@=Tl>fMrMz^-j8skU&i&*L`^lgs+&7u} zw1i9V6v`uz*c58p;_?=9eWlzsg*v$vTF%Hfr+^%5fpq-KXeUsfNp!~8hQXEG38q5HboK%b&)eDOMr56XHl2rGnJ6KosDB_p|0R> zFyKjJ!628+V&hM4nnj(HE@=Z7EtfWDCChMru>tWZvBA>h-#@hk;!S!@M9$!3{Zlg2uuXCxdIK5GJmamGxKq$uub+ap}y$y zh7xSctMbzlx-2xmx|~vA4Zx8L=&~5L6u@TqhBYDcN~x=SeF5Fx>=}t?`pP#JQj~a& zkOE1j-8xE#Ai-_%XK zfymL89eM3^Vf=dqhP9lhZBX2B7wdiBT6x3Gbc1Tt8PIRJk>$(GK=D4iQC;LMlt~nj z9d8A%1mw_Lscl*Sw&eh?-pcrqnD>F1!VA6N(t5bn(EJRy#w{nqP~ayeCwuq zdvv=ZzNzASeh@bT@TNFZ`GEpqKq_do#oX-%ZNz~ zAu&r&MYMKo z4C#G}^os2;qgts$fdO@oOAh;{Lw;C6Q@r7TL3dI9MSxqH19mqDoM{f|ba%5p<}?RX zHwS#w9FVlWSs&xp)8>mNc6L3Dz6daU13U@m<(3U}>7_^A#~X0r$=4>zxZ6n9y$N5E zDY3=S&o|<{^;6GJyO-_~)VA*P`zW4ZApFNBFlV03Hfbugm1|9K|9SbMi6h#1`L0Ph zNPaYFVH0reW->A{J{yfL<+=7Kn^IY=>Xa@|Y;IxZvfcdl~ai%;uqhf!l_F1787tlIE*$0Vk~lw0+E4nT``rdtAu=viTSj7U8mo|=G2UuI~~JZK%OS_7ak zZCubwbdQxihisIU{RUaLl|7~L(0tZ4utB`@oP{excNXNRJUeUDrn-zBYM!d`qnJcw zXcDdEswXKW7~tbPo~}ln-BA^?P74bEkB)uj2B=(ueM0jYNC0GNut{M+h)S3!Mgp!E zh|7_bnM^F%d^YDBASM;benu7@jT0vSosFvYk#~ z_LVRGhEf(PYliD8aims_szRB~mI3E7^0_yi{WbPJ=&l?`N+6-PBU{&)0@aE&J%N2k znjTSrAObv5LzYDYHN#h8pZ(u6Tm&;*1T);@O$--dJp2n7Zs*T3+*E}!e1$Pw1Y_nB zhKm3PwZw1+SsdELaIB#{`7k;P zZfSg^oU7o}(TsEG)5>x0)={a9+a0tVLCPm;e1kf^0@I8tuG9EvwL#?o^BQMS?M-6g z!`4B8a9TNj!25)7P>}z!TEmB08qnHl$~RVsW5RcGRxNc1!hK7^y1RgoQ$bSdB10){ zsPK?$Hz2^ZhBguhNA}^OE##4iaoR3j7K4^cmj{Mffzha)=KCwKu8w!cN$V-Y0R-v_ zd$E{lC&a8koNKBY+6?a9JMCjF`hXBM_+Y5Kq_W#?>cofnt9Mi9-lwqD?1{rfu(hG1 zqGnv!2pny=7k#jccq=l-tK98L&V6&Qd~r9-((mNEyI~Gi%PW6NeSB{bUq7_tX=Mu? zhTWFm(!$_IXdc$zxEpEZBH?hllxHcw#IPf1PIHI}dIrRf&jG|~LtbHH&f^0Fl&0F) zVLO1pZK@!4#10_rE8u?YV4c$_%R7Fjt~j>-4*ugzzQ>FJS;s*gK~t6nSfzT6-COo) zey5Dfpm6u2Jq);_5dhZWDZnAw?e}ogH}F+O-+re+ve;@we02wdgkN0j;hU0! z7hhbEpBv|^%M|(H?_sE~smpktCO6(WY}iX4_iql=Ylg$Jj(2cgs5~8!r}t6@Rmd5C zpbYnC68%S6t*W_|$7*%IydBl_r2Hc{KCPaS*ZzTA@>hSLUcm;i5K}QI%=aTAv!28EqzM+Y6NRE6Gwh?BD=RApm)9!}=61Rlc7U;Dsd4Pdcb{}ES6gH3 zMg`k82)zmAyv7D@&32Jd@yt-v^O#&Z#@rk#oJK)eOvWh&^HqwY5W8>=r4poPIkk)t zVO)?^FHpwF26P0AOBba^AMl+)YzG=A`S}`DVI^GV6{70fiTBl&?Bc?NybLFw5?JyVYJpiKP6 zVa~BR8y)S1du+l!D#0XQ+y_7OG1>PeIDZbwS6_mQ@Lb*0m%&P?T(Y00U|z59r;cdz z`iD5I#=Sz5T5(rAMZxPmE^mB=I(Sw0N~#@~+h3spULM)n(Zlj@uTWA?Mjt;FIUG;f z)D#eU1U3hUiU>$swGU21;n~^&+2>Wt9dArw1@1QiN4!(+=6` zAmwC&>4K~aa6&8b<5=J)zJ>xxm4YATl7rMSLh(-dGxAplDJ@bB$Gj@{9i)I-PiRr- z!P1o%tVQY??+F)_;tT~Jgf_`-Eu!6PlpSQ=<6Q(2bRc9@I&(Y&6=z^RK#k&CCQmHg zu4rOTgBdm?Fu2WTMkH^y<5IR|Fj(*c9w|{%lW)96{nMLsYBhMjLg?@Y9YKj+>DM0UzbjPXexzyUX(oXI!GO9>Kk;QPss^BJ}SyJj>_M^ zL2c5R{?Qe4zG6bvfVsptEdTxnO-ehW=%3fMh&Oc$t=6jW#^#1miM_-5R~_cmW~+in!F4|GF;-e4 zhs|>2VVY%6pWP4P)7R`-Vft?!rWfs*J1&~J2+bUB6&~b}+;xO5_(DPkN6S%Q)CT#& z+m!ANr;n3w!-Cr*-S1G_3=74$42GHk`k}v-cqc}(G~S^<{v!PDg{b`MC~n&h$;fx< zV{5u<<8&1tV(Bp5X>T1I0;_Z($GwS-Y4;v&57>LC$OKdIM*tmQ{}m99E_)ZhdXIW4 ziE1tOu6GmM33bLzGf+cDAv*^5$mO5lPVtz0l zMn%EdH1Ti)?a#4T0Imy`R5%7I=M+L8Y$?-(eek1egZ?K)m(#y!qD#j~yq-Z=p!v!w;gdfI31H?KBul>69!_U0}e*8Jz@FzB@@2&i{{kk`g0?- zh08XFMMA=6>Y0D07i`%kE+R8XWsA&&b&fqGFF%EsslJn0U*hU^kDT=-tb*_4`Y-7f z`d*Iv3r$1v^k1l;w9zOrf*>S_=oPVu8+%p=KGYf)b|@0{3sIrr1TT z0RSO_BRx(}co;O$)E(0$=-+D3#=@Su(SN0P@Jd!);2WwW&uW~nyid*#Ae22-zVi>t zUr-NDaPtA$hqGrZblwU?7IyY@v&ZKr&YxDDeFnA8rf}S{ZLho81K@=3yvgZ~c(=v> zq~ypwI5OivkK(=mq)x%zC<5b}kx*jn=bLrD{MF!{Y=@&Dw}r*#M+<~ca>Wf%&)Ugao6 z&mP^2gOj5W4*8SeV2ftbhD_!Js^Il$F8l^mR=G2{~ zFncf;1mpM$)Wq5DK^1gZ39c&vwgQ-)a{hl%;WYapj`87#B3gb3kv}+(qq+nkXAypf zp>a?q&r?T46#SzB4V32{kse?pgnL4Sij4S<+6N=>SOTjzg$^~7fJ0B4 zAd6|t3pmqR@OpsT7`ESA2#q0tpJVK>E6O4PgM-xIDsUQF@iJTz;0--DCED~^) zXk?1S_I#Jep-F!9YNX))4GZ+@NkjA`v>vhykqR8n_8y6;mySP4h#Xvbt`@@Iys})~ zq_>eroEYkDIl>`&VZ_xAk%F7{Ee>&os!!qi6iH6;2EcD3kA3;VDTbqz?-JXZ_nI#2 z-C~gJ<`%iKa|Eskm$^lDi;YU@J=rBf48_hYj}Q}(9E=eCcyHM$>5^lUgkN^{h_7j@ z%#0KR(O_Dn=tf=SJ&~darNfcp7EI=fC@A2ga)Fg>w33=Au>&oqcyay5o8quGrLNK| zvP6U{e2dH;A|urI|TepzN0caQMC7l^(hA=ilU2p%9MGjpo+tZVxl=CH&HG~5q;!^RFO^Z z$cK_d1_s)bB<5YzN#|s7Ip9l@f3h#9^rVO}p$?~ls1Brv%Pt+bEY!pv^KIEaO>E5% zn=v1O9Yz>{xiXq#KrHJ(@uvJbO(fZzX>VE>XUeYWA{n(q)5Ug7`xmvnEJL*CeTIWv z?K7?`;HOsmjFfj2;RXq^DnqnY*ZN!;ioAeRS&nNb66L2Eq6Z?k;k(e2bq|Ds_LK5t zz|YAOel>#I;AH55%;5tfUqoXrewW;oDV8=0$0V8AMg&@rkaAobaR3NNZ3{eD@e+zT z8t3jA0x`$oz^tX4<5+iu%fB%#&o>&o!YsuikXed5^Xk4Ky4NZr!Wm_cjZ|D9IzZ(Z z44kfmjnB)2y3IYF5JFjuA|CugNIulH3W(`+@jmuxc{WkaW)l%M8@y$};nsi563PFH z-{abeBqzUuVC`sOJ25iIs@-}O-Hjl=KwD^9T(t*u1fyFjy08==T%ZU1jUZfe2UtJj zhP@Gno7zAOV7Q!bgyH@^5C<4;pBrHffWc%l_7GoU7X+0(;x-U)5b&x-`KT;cmHsqj z5oQqZF@2<>fH(rqCLxPB0?sBQi#P(#MzEQ(1aS>WQeg2QNeCp2VT%LN=hc>S2EZk>p zLnYmvh zfKN2S{s0A*afi|8^>zS_U?*#I>rIx{t%PuZVBJPMEMX)*eiBBo4<;iU#X4GOgcpaC z@EB`;|If)6y`xC*Gr6V?(bFIjBK1@(G#c+1TU{iusbQ%fD`FEz1!ZG2YOdrVda}}4 zc)^J&I@;qk_@)c5@>C;H_daTQm@1YUS|rmbARw?tL;z2K0B4O5;1Uqvl_AB--UQVE zR9M>BhBuD4B?M^PI~=Bb5Y9+IOTY(<0Tw9Xa-#+5ycl~8&fj1qPh<;!Q0<3khw~N8 z>SW%dR*1yGs5TuaKu-o>c03OS7{CCV8Wdo^nyF0<3UWw6Y+_K5qYBbU419)ZC5Pw0 z`m)T27Hoiu9KkP=ZO;)MU|ZMA!#N@lbnEGQwC+p?5gWTW^s6%_14=Q@Z{u z;6fCY>I_M6qVfA+FGea~h@lOG$U@%f*Ko*iqbqgm2d^rhIe1SUuwNa% zp!H%P{}_M{LBcQSsL}OEE6`sjm~=2W5D9}mT)A4d;a2w>3as;OwcR2{xhL=%4`zt# z++$!oD`*bocbW<;O{_R19sz`H#P}Wf-~@~5YJMCUFv@6-h0E1O`J*`*>5t=N1jI6u zLH=}32Ko_Zm#Yo%x8kI~Ka-OJe*!1H{E3|Ogk(q317aUZSAQE$a{X;N>EhQp33m4T zd987N*pa!~B&Y?vpj04E;k_0<;hy9ad(;496*C9QN)7iYymBLq23V91oQe{7YfcI9 zInoB<(s5A3j%dc0O)*Wl@hveK`1;l{2ZX69FkkZ?Mmw-_Ro=w>fm4ZD~k%O2XK$y@x{#texn)o!^mPh>^cGq_6a zS&e)u59hA)@{K%^iR4QpD%2lWlQJeBQK8&Nw)h5-{3>%+u>Jyj;%@wBcbyecvt4IZ zg#K>kua%))Zxvd8X48JA^XfB<0UVI|pWF2%)~>Jk-(COj*mcE0YS$qE*|Lem)>lA& zFcI1IEjU9ld<|Yz27NoACLp}A!YPv%kiENES6Zo(-2FQeA%CdA8&%)>NR4lcu!V{8On@7rX9pCtYxOt zYG!$)upt_|!7vq=Y?ZwTg!bl^ur`4GBoL<@ECHlf6XYP~9d8V50vuL=SMai;#-U+Y zemo+URS#eo2@AR)I8n5Yo6&j8_3sr!WJSF^n+o^2P#;#9{zb;3I}T zqN5njx_N_xxmx*SvbjG5nyp}}aIR3w9sN6SU^?40&}q&>f}T=Rr%Xv5 z>}mL3@)XZmb^)6ajEFM9W{J{{_H9}j3fbZuaK|I6tJQ$lvIk(+C@*{h9u#zn(CD+UOgxNi*3DE@z5D(@ zz54W)-|DPH)JyEZpL(ervGjO1%#w|hb&--Srdz@h?GR3FanXc;Q~IH~g3$7;$AE42 zU<%_|`~Ziok!p}-$26e3o1oRAq^JV%Q)R#tSM3B68^hY+ULG27sIc}}7P>eyLFNJw zNU~@ExZjF3v9_z?wdF;H56lY)5qWhV(RL6{PK;vMDiBt4fDA@ew~{iC6hmU(tpSvp_cbs)F`cLso|}TiFa?(!*I_%|IOr zxa|P29d7nC%l>9ovs6JJoH6_khC5*EV^CeQA`N^1AEnx2UFC`JX6f)*n; zKvZ$Z$88;Q4DyOYQ!O3R0DlMOk6xtcTi$ zqb2~>!D|7!V`&VIzDykv`0bujYddrgelv!fvFv2z>l$K6R3w6hf{SG*aU8P!_ULhN znH|20t|62h{BsF{mDhe?PlwW~S6D0q1v$e`6sIW38B}}f_{aP3@hxo zk(g2xX3_j#5t3R6XbZ~C!F@t!=aHqY4e%u(Q0ul!1lECq)Q3UX$bqO;R!*oHv#V|8 z2tBT!_5`zVbU$qer&0a1?VS4hX^(Rn+fRFpQ+Ge@QBGs}X^(Ik*-!g5r9T z)tz>~nhL>Uj>gK-gJOC9wLpw=maJbI0$B*?PzJGnzZ6%{by|D$ixCOqHL7;9RlB_) z%tr1TfP*8WpL+|NzCC+}V(%=xK~PzE!`!UNW44SpO*!LA~HH3WTgz?eh&6Q<9cX1iyjzyFhq&gRNSQfI1hnb`k( zw(^pljO!Qt?-g}CRo?mty_N5C5{3N7mrP6mka!3Qw@}+C?}7@@B=FFIwN;j$venc< zwIiU1FcaU2*N#GJ>U2m=;o(b&gZJ(tj=~%p848N{{|!emW^9fM--bd+?k3Iha~x%% z)kY_53xZ$hzr<0&Mvj8;g6{Y!(al1YhdXT>X)s#AF03<@%vAzbNp6;;ElF-xPF6ND{JOT|0g_YoSz%Mk zCCtr)#9ag{F_V%2OlD+I-XQ#nN<&umeqkSdErPAL6mk;ObwUjPHg<^c_S%FODjy0F zqSvycn`|yVp+YJt!&!5H?4c}JU19*nk!tRM98+!h?K0~Om@O_KLQ9?dt*M-|oYcTVi*f_@F@TW@)5!KuJM|Pk8aY`s z+YNB00UA131ZH^BF8dv4p{%n5=sknTo`T#a%_F?Xt|;4Esv8~BV_BM%Q#S5Ie# zi9B^X$P+_x2-sv2COVj&Y|pv#%z%b9%EkXS+#ulwbZit zRE->@H*9)&X1M4X0~FwWKBaUK7m$C2NDS`9I9BIH4*Mitg_qTuu=tCx$3tQubgtO- zq;2;$SZwCPZbM2S1T5UL|Ga4j7W;*k-Bk_$BbJ?v8zlPT6}b_EMAxz975Mp` zzM9wY@h^xWRlm!G)IMNs4G9bg2Ci2>_-N;GIhYSYfS;34b}xs0d1cNZ{FL2}3ORC+ z$Q@d5_pZD6?uaqe;6MN??-<)t=+EoYe1CzYUH=&QH0%F7@lEW^1siO%gOJAB#* zv{;5siMLxalKImMAKYeXz2$48MDMt8H1+|wP{xfG&!;9heOhZ2UqnwyNb~#q)Wjc= zpN|$XO^O#poP6?jU{86!FmoNt5X+UYE$E;PB?PF2&; zBS@#&?WQ6n`6jyPHrfV_w9{gw+(nU{Ht(WPrj8YZePyWTg{M!;Ux-Ajn>|*vam9o$ zyl>sT6U8IszjlPR%E~04)(TC3g_IxtHBukaYvuS!q9a{fciSW}DN1$0)%@uvKbQ2lTag@o=huRp(hnI_FY^iu-csS@XGVrkxjEFbt^)8^c~WWoIF=C9C~%v?18I!#LfoMpsOa5Ga)63V>)p>dk0 zKGeIz>SySSm+3RQ=;4y5K)$_Dv{CdKk`b5Vks;EtNaQKhhrmPY1}_pPBNMJd^)^s^ z0@CoFie=f&A_6}6vaUXj8@*(+MW}oPW#+(8`3;nNhRSt&Z^qK&__=;q6N@<2uI~6P zqMc}8jB;ofhao>4pDXZT)bl@drS*~RSBeqTT`pZI(v3-gYy!9q(w;qi8kZkHnKvd> z=4FJ}KaMge$Eufat`z-Kj)AwB$Ded+unC*5c>e8T5@f`B^gjlb>%k|CmhiGatSm$I z^6T40USc@i@E9ZU86|tI5*_{F>lzL4!CpR&t5DK_1w}h~^(v7pH?I;)V#cD(zcY}%fuMEI()dvsGfq)RD43Snuh#ze7K#{{;+_&8lP+MxfY+$5HpYu?{BEQ zdX2zO@7F!MM$Dy)C~~H3UoMu5yYuCiaxvo~bk0IA;23STj9n+zUL->1$cNX7(%kU5 zTyKvVn%i8I=iw7V;rzPZcZf;iqGw7_Upjx$Z0?8A#-CDr7S36|eCFIa5Ms|)i1dNs zOW}>X?1tql7DGUW55EBLIm?zUUWPOrzOXL-E@6^lPABU4vk0HXvhHp%?IQ3JfS1aw z_2PVP_K@u4+KQa+BYhggq&5I4^UV;X zjFVAFStVSFG#2Sh`KOKI$6>c38$#J_$QKs-v@S@yjAsUSoqM6xhfjskFsLax$Q&^di%FJ{@zI>k; z967*#e30~R66ujMP-FpIA@epNioU`gB$U?3Nt+NRQX_BLBnA%;>9XeOKu93g2F>+u zZ@{_pQ2TtlU2pm0CeblB3(AG}raMwrE=-^NFIYh~NbA~|wNsAD;piC2`sntuKCSiJKIJ+4Wehga7$gFkMmv%emjm7 zEvH>c+Vyy5&3MvIfTCt!MM`qMHJKEF?L~P8>c^qXe36Niaq!d>(irzA?R0eq(uTuG zYBQBI{HNVAjkIy7e*>vfW!I77slG@%!(FXikIW%7cn=L~k*=RkS{^3w;c88L6Xmxt z&@rSvW|KnjWTf2T-fKwf>4eT4K-v#z|Me`=iU1#0ZPCmDtVT!q6jGjGU@mEONIyiX zHfkRFA#mFG`J@K&myik!wRHjSV80hQu1gO(vg6_fs~bI15(E1v^l^O+U>$X z41Wp}dxI3tfldB3Oby-6p;(dYM@_w#xGc!Ia9 z>ePPfY;~&cb?3h_-u_p{zDnwLn^-3_ir3;@M4HRxcDvjzr}}d^9Gd1Nhck{;+U<12 zgrB7GVYj&2>+pD8T5N2L%Pqo-L{Pt#ZY7t4v?O33DGlD zCEV97o>jVhwsyO4FP*(`*6gL)df{A9I&YzNhlu?QBQVIjj>g~6XYk6Sbn*E91B;E3 zqb5w7e(n5aOIA#kw4H9DduS~!{WaZBgHBVwvcFQ8{z3nu@94&F=^OfQ`kIc@Kk0iq zOCQn+`hY&72dQ__@*xwi3YE^hX4dQl3$MR<)g$zGT0@moMYq#>x`U=%xu5=vo}ee` zSM(@7MtiB69;V;W1GJlZKSVoe4_)^-{g(Do4MpfFdWN2*T6%$=r|0NJ{Cf%iUZpyE zjebY3(-C@;-lA=Eh(4wYI!T|>XS9L7ila012a5ab&e(O~FC4%2oui;*h_l#8Hk|(M zHQSx{`RJ>fUah`x(7JGL>KObkOdUt{H7}(8K(w~zx%4|d2u22maVi{q&*AuL)1mO0 z4xMVYcKF8SId#t=&B!xO)@;n5Lw4#+_=m1XseAa%ZmCpI^QUg7+*DojyWR^0wGa30 z(~gdZXY?6`-$(l_qxLnqeIF(F*;{Hgf7|fUejV-T4~@~z{g=?$@Q(f)sXm-Ppr^l{ zygKCxj~VgT*DM;4K{fvvQcjdvbJeg!LU)UX_oSNo;ui(&3cqmiRQIkm=%8a*zvNOo zy7-dO;#(Ph;gVtwXh;t`L%*bbc>0j`jmdW5$A%1Z)H^&f@EoOvcMguJsUEnAs7+1Z z!K0~FfrjDufmq=aIvM2e9^PJ@lexVTJ^GN7SSXwZ#beMycOtzu{8n+-nu0Mm2s&F+ zJ+7S~J^aSynLa%}+iTo^I}qyh>)~%NKS-6~C&n-FRSI9CDAs+380stze>yQMeCdR$ zb(2Odqk#U^y*ft<|I;y_YNH6o}gzG1zd!q`3 zb0@cTX9SZT3cA7-lheajPj;t7Wt+88F(Z7_Fj*erob$ta;*;ZulKE z#awxpz49&;STiNpr+Wi#Jzp`dU4y;8F-(W z&n>+%wT0&W(;gQ4w}tiTy~1Bj>n^_CR-;ePCsDB`JZ8ppcZEq)Ps|wH7)=ZNu4<2k z>v>fkey3g4J38y}tMVF?so`&~Dh%%%T};QqUymMK^P3T6f^x#XQQ7VTCO32+l?K4D zQMp+rfU)Mt6Y-3rIIN2U!~_(K3ebV@1Ecz5zJC~X5q`lV>CJhB*H8z?gr|=lPv3_B zI{Po-8MAv}h?{12MD+u+FAB@jezZOOPU+|{&FV{s!~JLVt;wC~CC|R?pvhQ&W%#0N zIuAR<375Z84Dos59o~`(PXOaEUSV*e0>_}Ml8QJ5ewV>MfI&oVu!->?1LDxu1J`r} zQ@?&qA^lB_rd4T1tHxp{?nJQ|6dPFDkxujQYU<|oBaGKkJ~0F3+$9z90a2pG`?=M- z*Q2-_#g~*9wdSG4$Hy@IAshZ|c@FA+P~Hx|KbEI)3sh2(ty+lXlFy=~?nDdS=I3n#d9Ys}Tc<21yHIuH5p`Kh5JZ?O)!5k1LODcqFWnUBw zMV_*f;mvbfH`IGEstn_hdw(YihU9U(-urX=DtvR9w;1Tafb@AOg**rX@XrjyC^;GL z!kQ$g_RcUExCK~4sqd_0xO`rgs9PJZnpa%&#q3s$>mTNHgqUXJzcXJDeHDIp!2mi? z(`w-n(WYuG3sj~mFl2myN)&}@x(hTl3j$Jw)Jx^bnnODaJdTL(d3|Hu>I}A^mvHMoU z_v6Rkiz~6rt+{{chfZ26|L`oOg*V@D18oWK?WWsWC~T}4A&#$;myM>B@UK@CQg!(F ziYemTyTd(i40BL-Ni`D(DDGmtb zw^U$dXyS$7`tYZr4i|ze!3QK`j-id#;fh;Y#7N|pNf*{QrF!kXwuN55R9OpJ z%K8>rY2k;~CSKTJy{h$bOSLNRuI$kI0&3i_J{(w^93EZS!VtEE7gvsV>{xG3{6yt? z+8w@jUH*lQ95fqwW?klmBRUcOeBGxx_3LZF1scddyUZXJV}6JS0DN-l)^|ZI;jiyZ zulfCL-@Bk~-n=tF$K=;RY8`gmb(NJFUUkjcCRnJS zJkb@f_$NPzr4MU9f7anct6$W$L*2yJev2+@UU+?=3$P!K_CTWh+gn|z^zwU4($|Vi z7)+Smc9=^>U2K`589T_oE^gYcez@aW#*-)xYPYt&!P84h&PybJE2K_L{-hX3*QEfH#`Kb7nwp1sq}qx0}HmDu^V- zP%_b3*}+5kXl=ZQ#!+=-w})0x@!4vq6aHZtk2%5^)kLwe$&~sA!DuzM*om@0EUXxn zsc6e?9U70PVSFQfB71z)hO#yh_m>^;8(M%wh!g3-gn-XDQ!PJ9pdRisjEBc$N+RXbIoUgr z`XX4ANLjttiA=AqK_$b^L}#yP{#yjp7IdZG&6=9Qx~B48HS@U97ZT~XI8z)=;*95#O%)Xt8*X!Y12HJuIhA^*SuOLn$2g54m<^ql%TuW?`auT}Hd) zdpfPA`pCop-A54G@|z$njjU`-Be4Hhww3&-9i>Cyzx_1zm0jCYf^IcR*a%u}Zarig zW&~T!e`{oFd-@jUWMo`NdP^kTrnbUN#Bmrm`EQF9bf&N)vmOWu#PJ>{PLJU!$ALGz zMlxpnaaXz|7Be=z7Lm@~D3(pV(g*22`PN1BiaoTwJ!#9Z3Q&w`Zt{{}3Kn3(XNbT$ z0{2)W4+0GBE*1_}d7l|GLRdP1IGy zA-n5@4L9Bqn;$il(M*}-MqYB-a+`=(~ z`e_<)rS;R&ScYI|C&5mg9FVmoq02ElPU@}_S_N5#P`ezI^^F`?L|LsiGk2&~P+c>0 zpz`J-ng~YveG%}>)Nkm9$KPF^FQU$nB%S+EI|O6<5bS69Y9G2DsX=`yrw7v;Bp|N~ z=K~XjVq8zVk_sE96m|6ko+r>Lo7bx5b`o<2#VG=k1OxbWHutZaBg1RFo z`e6u46o@?G2S>*Zpvz5B0TxAi&H#A5&dF{ADKl;jc4SIeSIf%>QsIy_0xRqQ_P|ou z0UFhC1)8*QSR3l&p)pOV5x}E?9jX>^^1jsRbAT_63N>>1#y}d@o_S6QXOzGIdC&$} zQgn$M)$;I>OA{ztP!pr`b(7_Otic(Y|;NDXfaEOpm zXU*2-4CyYHN*enB14XOQnrR^SC^kQ3LGt=<70}`p zp0SKc6g(e;Rl_fMiD~FC>q}&K*p8txD52Fu=*H9r9~cnq06x{?u9d!_)Ll^_TwkJ- z*x)I0Z1)%s$}vNsxVp;)L#YQ)b^lNh-!b{Sp_Gl_&qL`Ec2g3&DdSmw%3lqmnaH8x z^e$Na{oz#EP(TS-Id=qnq&sBxr8G|IH26g#%PxhjLXXN_BWXE;lu`621m{N4Mo`Zk zqoGv0%V$Q@wHQEf3>>RlC2Xc5nK_m&p|HGaEJR*)W&3j{P?>em@@L+_-H5#CEmJoXaa6w!F zWtUH&_9@KJy2ge%FDhaXEY)(u1nSu8X=di?bG4e0X&gr2-z;CAK&x8pa>7K~+wo_u z1f2pd|D7`L3Yw7v`3G8XEP)SFDIzR!SIv(VauoXy$g`8MjvM8>SI~lA(5x#!Xm;Kt zn%9Awby>}7UeNecLHrqq1+Z{UBUSq z<-RG@*{!hkjXXI8bXYCVPoW^)ErVB5k^2Sme&^J}n^)#X?zobIPLS2(GpGYpzu5#y-NiV*7K$$w>wuF8B_F&qr9P9g9Ue&DJu|5b zeIwtV2~)be{Cp-34R*-m*HDQ~u`)1=M$>I_(JUH;;NUD+O5a4jn1#azQ2pvTFpCe% z=jMQLUy)zVp{=NX%e8b9+Whfa>MN=?%D!_UJJ-q?bE#AEE0A9$=V@(;^Kyvm5~m*P zKP>N?OA}E0%v^|owK8cQO-GZ9=0WqXm51ixykLhMQwGEJ8(CFG^XO$cbpc&$k1sNy z9B2aYs`-sT`S5%kVKgl$QLwN4WC6utyA$s5>~Pt20j0?i3u#jNLFhC{WWxb*42r5n z5*sF%AqN(cu5t|)PkqXaeU(7wK}C19^2|coqeLLIBy4_p|01l#y|QpI6%1-@5(0x8 zMEg+19J96gQN)#2(2Tdus1KqHG2mqPV(J;P%~crx3a*p}_|vFEAtcyUrVK-an=+_B zBqrB4Eo;@4)w8()GLCRD(=H&xuZ%OpqLR};g0`7T8q5QaykZHK^-Z~M2_04FW>a?B zQtD~XIUVVHmeNDiMjFd-8ueA=qh(kwIv$yO9d>%T?96MY3*(zAbZdHN+aS5&cD4=t zFlJWJb*fMoK)>Tc@Rp)ZHjaDEad?_|sIV0%R?P>a2+l#^(0cqS!+49TP z)IqhMW47Nb1l1RimxXAk0;iearvdKC)l$4T{xMeo*4@X9mRLV$;Gieo5WLTOpMh=@ zC^z3itL3c~5IFD2CoAZ6`9uXJM>emaqb_y$K0)m| z3^I=5WWze@k$K&LyJH9G4K z+R|iTjtw-X31Hd=I4osR6g2c{0FdK>f<_&9$DT?69U zv;&GKQ|{S8tJ-G-Jr5bQg!e<9l8PT4YfCDemw|{h<4ofrpB%aqI-p+e+iCR~jf%)W zb^;a1?Qp-9%lj7?$*>cEsCoC}*t(O<+(oxLIt63HfxhXH=Xc?BobpXzej{)$#b!en zz@GwV(Br!)+kGdWDrd;RK}vIIHHP0a@P+h1SilK5M$92{!A_3hMUFf+v(h;)ugrgnO?N*M?7<@J1`x?E^MAr% zj{^G{lne+q6++P=$^jG~bj3h#XUgKelrk;`lf&khhVjPAZHO{HhZRQKGHBXB3}Wq7 z%!61v6^lj8t7378`BaRhalDGf%R>)S>&`v^@)aOK7hSbrAd!Q(fS-fT*gm?9Dk>|{ ziX8H9dntRI&q!Ym_2gf^RHv+^K@*3@SzrbGQ{dZpSe0hfV^M)*-cP%X-BhN$G>Gm( zG|uoWhqESD_sb_9r*w7#AZH(Y5Y(y}b!MLoJ&f`(c6s=oh6Y8}Qf#X{Jd#*75&(kA zDdaM08#_9Hs5Pklh+gcr-fCXNf`;{F z+L*8C0TfUu<|0!s6tfiMG()ZipQH>&`2RPrhMV!~z5ic$b=Us` zylN2G53A*|d6i;hU*?czd`e{jcs%}>Pg!F8FQ5M3=hJh)rBI6L=61s^6y@fY8~0IW zJE%kM&%N zVP4}TqTYvvgFq-Wy+j}q@NBy6X2P(U*q z+9+&;*=vomuuFu`X*sc38JJFN?%qTswbT561qKzyjALdk!-1^@WHQi{2tnK#SA3u> zG?fjF2Z#1;)+QZ`0Zbcw$Y45ApQxeE?34JohPo8}1gW z29+ncNI0A>)&sa6x>jEFG>t8=?ptm^DRv<+!Nb`qjK>&oX#)UE z#vL2S#KOq2aBjwhM%$6u|5qr!}zY=mRF zn+{?xTqDmvi{LStjg)%>7j~+`bdTK21vW|NbJRC<6x_tr4a)OZ2zB+hJm@q&&_)2X z>2Z|_KR%|r1BsFlbLY}b2%Mnb!EolCC2eb-hITiOf8wQ8ySj2jc@l_ zF|SdNs50Y>vwN=rl&>2zPt-AE+ldoMC<71e0nGNKqZsRS8mTgbCpk2&A6zq1KxLt^ zCoIO-7rMf1xi_9T+Ts2bM;_+1YQl-*($eRt6CIFuJWu`l zsV-3qXu&yw5XF4R%SM7`jY4Cu&H=9PGFI!38_0wfyEg2ovd;`D_y1`fiF(4Y4zB(-rs%@y*KgntDQTKE%WFoJYV=(`;_;@dT zgwMm6rqi<1AvojfR`w`bf@rg>v(wizw=4;pklAbFxZN)T3%(jA!@ChhL#?i4`J9 zMrf$drE39fJLKoDP#>S&G|tA+a+g;rTT}=+;#J5UgypYN9^~?tSE&;xUwD-=IQ;Nc z>eyLv4F8}X+-kvKS#18u2O_v+0d=kV<3M()qo8q`IgEc$9%9o}n_pUKjd9Kir9(02 zCbMvxv$(5{@ zg$&GKaG}Y-oRGa=qyAaVnKhbB?s$!c4zy^A=LuAlW3&VeL6Ae3yTH#*YTyd6#RjfLJaL3t%THgYCvs0e#)6HP0NGdpMzijM z)AAs9c#umzs;ia)8oUcEc6hm9uSCfLx#|r%7^|8JI8n)X6Nh65<@7h{U)QvV7~X4} zB2jIs*%&b@ux_0M3wY2SFSJT{6dVwb5}QhxHzS2g`P5r9(;6hZK%xh!Ee~q!H^Zd+ z9HkemK{||s+ul}V%zm5d3$5i1YI@9Qu%xA=f#fH$thibS(=a^B5`-_gEPe+n z`?TByd4fql`VPJIix8F}Ykp4;rjDz08&5i?d(tFg)t4M$)uTd+vy$7*dC+U4i*dsFSeQFy;3$W?pgX)qOqX}r4 z@ID27P$i;m;9ms)x7I1SFSkio>GsF4@Urp84dP)4!Cro>@BhoR_C30NMG zVne*b;IfM}5UXlM6|R+N<+6clR>2tdj9Z+7J6K?^Mxr$-4;qh5jR!*y3#2N@A3mT$ zQ+wpf@gFLs6FnceS6j=kKBW2a7Sjv^f!E4wKcWFYzf>=MM9+K8RU(MugL1LUJ0Q9e)P#b$9T&`B8{DIb)6rjkaR_^%& zUD~kbz+&??k3Ff@{LPb%YyRa)dOgk>2H#pb^eJ`o;Qj{&2BZDEPidsxr-|}0pHYxb z$|avsYqv#7>pxSij{Rd}s|)_9DCwI&Qr8P8Ns);q*ZQ5JtU(Qn^ULW-wPDc_+Q^i9 zPmve6efku2Yd`>GG$X*#NJ|nF!9*WDR3#I?`%`lwS@d}WkwnWDhsmzOk}a=)PS3YD zi9{&T$wCqvE8Vd?7^D35!ju{Z<>P;*Pq0V2^R&7)dE_)y@;Uj>)ATa^D4+ccO+}FQ z1<1Ktj`@OeMt@nYh)WrQe6bCeQEr9w1vRh(TbcLZ16)3}E-k7%G|JfE%^ehrRh~6+ zb>zSo^n1J@7TNF*+C(0{*62MlFBnd`Ekh3cCl!P&7rH3+V+)vo-V!ho9BSBGKo@&z ze_|VG=2=@obBhQ^uj!iQy>~L?K!ZEpZ|siRvSLfCgL&HVsjX3s3|6VT<$wQ^I)}I% z5UCl-WyWDXus^6abbNmado*OiQVO6%z^77{!x-fW)>l8R7zQ-s&A##)b;ko$yv9Cr z7=d)-F)Nm29I#@z-tcg|iGB~$P`Z5lUpP~6>FI@H75pAag<=IPn~<_@*c@l%K$XK; z>c`q7#Ntk``qQvKWE-0sDfR}~tnsK`bT5n3{pe50O0|3S@4zh{oZcp?8&KRWZkuU) zOY~cV@c~={lEvTAN^;9*zk@&DEr0lqu0Sy1EEz>83@r0GfmRMH10%t?0ZdVUp@Ifr z(;?TdYh^eI1(@$IB3m9lOU1>iva_5o5~+GlToT?t*Fk-VJrVIm%2{;Um zFOu$;#(#tHUA)&ymskBawGUz6r6-So^{6moHjxaUx}IF_p9lOUBZ_uc1RYtZgN5?3 zMcl%r8v^)YMiTpf%vD#{n|SbsHf$-J`goVmJPyH>)saajM=wtx4#0vkK7HWjsX%p{ z!RT>C4joBQ8BTT@X)+&)v$EUw)YSpEyqxhpb;@-c86$nHo88NeFwA?!%K#4Z;Y`Gz zCm;MCCxXYNagI`DXZ)D)d>d5R07{iloWm=ldGe}y=yJDQSx+N8?h$;aO?S)J>v44F zmc4(Vl2!o5Fi>qN;d(&!?LXi!vQEDI0}Vkb?~inC&V{9Tbz}IH&=)H=|40Mm>pxPl z(+$R#gMYvkoC|BnDd*`Sb*~@}{Bq)UAUNJ%xz#V)c->$qCoE_lTs?{GtrNvXq;IVf zZHskKsd0!4d(<6)4qoFmPR00jFQ(H5^wY*jpAYZ0C!lc?%^VT(?Vw0W;=@0_4;4TU zMtXVBEt5#J#?fGV5?5Z(y?l^FCmfL;B@t+zS&75aHA1B0*518B^hOg$ITet95yHF` zkS=wnNTzq>Xoq+c8QD(c|6cZXiV;YKoMLD5HnU`+TMUvFF3}aDPpr#}ZZQEtT8!w&E6W#)-SX`;5s)im#Mf|v%=d_aDDa3!^q|i2gh!Mhl^ZK= z1i9Q33tf9$K5GUao5A^5QSIm)jFYAHlrCS46Rp%R9OlAA{tzeHiWs+PhFVyJyo9)qkSzb4C34k) zKWD1dRo9ALa#vfCBD-aap54u}$TZzEWGU=`UnWKdTp&giiKY(GQ!!uFkl7obGeFcJ z&;qSFa0cA+(`>P%K|rR;`8gukl9b$)BVGkM=C%P=%t&j5v69C| zHjp5%)J455EF#kbVj4AF<325qCa&3NVxmTa7a{n{cbm2#o1bL;tJ{iHC%+?MuJy*Y zVpNE=zB&$p%Eb|OFc%@t^@BPt%A2~{JaxtmfMB2jhPNPs=_rYF{stJ1!-GD+a9G~} z!%2ED2{5=H8(=tZ55kD!ivf8e#QO#q0_s3K=v9T->cQbX69~Wig||+EeokZ{vB89= zB3fle(-6fS5H1kIHcSNtT5*^cM7uce2quqZiv&j=fhbj~jyz(^gYvz0A~^`p9UJn> z4AEdHDUFfLYM)mVbyvyw_V^@*>NE(S03XE%`CS6roGH_D?G&HM7Z*8JaJ>Q$4T5~N zQVPMSThV|F7)^F9ez633m}~tloX{t6&i9U#C$WhcjqB4{G? zn{0M(l4+|1fpaoU$7l^}8G+6<&q{v>k=>O3E@_$m(uU}14Xj`iU&atU6TBU(XJCf$ zcpp3!J*Gk%1xz9|uZLp80FHMX4T?*(#3~E#WpP9C977Ind$BA%UUy`H@{I@i8d?_&hqqxBcOkI}KkAip#lmWfWe(r4U+ut) zI7PgdGitxA1tl|q7MGh%_|?7s3)qQIIvV;)GdtVGo$a$a^ByV=gnQi9He7sLvK&`U zUhEIy<&DE8_aqJlZ~|^_uVb*zF=`PSw%5X_aQxKv+RSUZy^gUiOzSwGG2p$#)hu&W zGj+jR?o~Rx5nDoP3(J!eig9CLkO$MTN#cF0`HwXsJf%zzh%Hv4DS3Vwgr6{WJIVrl z@AzpPZ0NWihkLAw&Etcbp$#{soHIb!)5c<=YOhV$-twU-))herGzMPWGG9y333mx#z>sPqrmL1`xZ!8Az&f*pRl>(j;p7DGB^fxaJp#tHuI@RER~r-j za-emAscT5{2VxCh0AIFXUprP*<101jWel#VAs8J<;$Rd+ID(Nd5D*N48bB~Gki)@% zKrRRU13nH41IZlp4y16m;mQj2v5sa>I?|FQEOTz!n~xt7Kl8lelxi;c3CUJqU96fsBtE zuR!6Qk22$AV;Y?pF(J6lPh-!{Wu;ruho|4DDA4Zd$@-Pyx3 z4-Mk-pTQCackr_8+kk;s+|RZOwU+1iQhEV&A{r@%_Cs(9E-&&cEIe^|eW2f$KsXI! zF%JWjb*V!x?kdvbPpSJ|6{utc`#DUt=aOa&ZkTa0 z&p5@NaiQ3UlHAjAu7MtoSuGsp5Ixm#*hb#mO{Arn*8q2sImZ16S$gf3k9HGn1D*%F9a zf3_9S&Rl!_=UeN~Rt4Z!^Uo~YOI7QiYoo(wv}-^|CZi+AM#oPQz+{sEru{DgfY|=C z1fUpK5db6<+f2CHYE(h6fb*g(JS7Kq;Z<&sI(u{=$gsE-gr!Hg3chtF9;`cTTK}J| zOcqkeUBNY$gFBfCD;!|LknZ3EUTAJ+M(p@8Ei}ZHA*?F+el1*Ve4EE>_{>+cSXXAN zUU2a>2Jh6dmk*5(-~s1}J^{ECgfiRF5Zf#bjiOVSrd24-^U>3du4N(C84fPEPeFQ@ zH2|=YK#_rsfLaB38LwSx8t#E%l<7u$GaD-bX+F}_BBM+#GTPK4V@xeF*3=Z^Oigi_ zsVOcGgs?@!gtYPawnd{xV3mD@hiTtMgLk-&_~H}{I^8|OCq%I**4;`{=ZOtKzH(=4 zOLPsVZwkvnH!Ed_;bg}l(B)=*iMKp)n+m!FQ&Bhy1>wa(ql|TMr-^*vsR|2x93x;! z#0Z1=?7Y4ZJtl$l<_)U78j!MPMF!XY|Cw07u|K2?S1*XPm(#BA|@@ z>S!8Q8vVC5bc}(Ygb{8xPXWUElRr0Q~9W~zYf-hdPw z)cC2gb!wgxodsBM)W{RPERm`!a2|v5O^FI_!uAs75VQ+Ain97K03t+A;=A>w`-AW62o_Org$l)i4w;<}X**8l`_8wm%h zb%)TWEA6?RF_L0ePj0M^jofmmMZU_*)qRDc8dp9UT^_~RTVTBai5MO$HlfC;pxB}n<6}FpvGxv z_y_~`7Cf*xncYWZ#hZAmZjg_wOdh~lJ3+$oq%}Q$NHm&=dwQ%M&>sXE;{va95RXR>p~K@W)__mlH`qOj&g?k;FO#W0L?nmPQVTcdk z>*TMoFn#d?swqMPddm3n5bJl{tzwW!d2Xm5a4@0g2C)rxDCc_>Cm|=SxoNUuut>#8 zxY=GK0kOnym<=Xlt{|H@pcaKQyiR4=H|UD(8p}(FmM3sqIsYW}`Br1j$(Jbwem1Eg_i zO@5a>StxvltMC56F5oykBn4QGcCbm#vT0?e&i0W!9wlH#DI z+vYfX+swu?Z$#-Y7SHSX%BIj+)sOu!`A(@Jsh^` zr|sr2sh{=$hyH%rZ#V=CZO84CM-W%LNwyj)FpN0e>;EHW%l~vG@pi*#D^os-Jg9zV zc~lK4$*#NbCIbYrC5(5NN`SQi%YC%?Fj~Y&LF7g?q8KbkA3_x4<>($nF;tGi|HPx^ z=mUsiz#RPv^x^hj6t-H%A6Lglphf)IX!>R7;3)$QN=m9h3EApmk%@~B$T-Ze-=nKq z*iuoFLs*-lT4jtv?|=erslfz_8dzi=9H@uO@Q$cX@L46x$SBd~QKGE^A9qn=RS~3; zY#}CQ2u-{W%LR;%R9;3c)RbovY@Us?coupNZ0e3;TrjNe4ru=&riH1YHkLMpDb2!U|5H@=A7GD-6d@xBFN-%OvDdE(eA+)FC>rh|@zG9^Um{L3_ z>~&5O6kW@VX{|H&P)|YdxM}{YyJE2OStc~FVm%v;s(>XMuwmfcB}`>#NHt4!4@@vm zV&WE0LWfo;EpixNp;Dd#2*Fq-_Or16&Qwkv+ZZ@$8v}fhrzQ^bnYdS$SE$I{L4uIU zn)XE^94KJ&s*1HOaA3lC15xdH^Te09KxcPt9s;1n<5tU%5kKAX&oq3(Y&fLh8&THr z0$PS}Q)6Z`>nF$jGc6yvaL8l)%7`<#M2ZPGJAFBsh=ftuSGI!y;o94|t8(-`K z=WiWgdprLBmLP|@8w zsr9q*9;Z&eK?aBp^=Uj0d%>F`F9>qb$t=%bGH6(9+%{3W%Ji<8J7G z1xH8s(`v2gn10%JaXChdcl!-&ccE;J9oTiZHKXi`u%a6pq9rc4+j*|1)bw{*(`JtW zfH0Hb&zC2LiC%E9m*Le%W&c=1P~qSp!$zJoS)I=pAr|?x)5Q$W)DYMkohu6&c$` ziNw%wl*j`ly1OpT()rEOU4JIsty%uRNr%*s{!M`v^Wjx)GT?${=^o9}7d1=wY)GRe zMtH9VfSK-%^fjf6ORt%?{6>Az^|P1GnZM`;z#fwWMvE@(r#bxENFmxUe7DY+Xch$pCy9c zo<4jVp8yO5(F&-mw`CKuP=;KKBJds2>T;DEJf_QZLV)W!%Tk+?8(cW+SXh+yUFIEANg=# zHgtKlzG$g_b-vzIvP=NY@nCJ9AA`a z>Afqu`86)|qD9Vj`fa3{we0lkNHeFXbR@I_lT6}z{XmO69ut25jiQ}sKOAX$y+$B@ zDIR7SF2{dpO6x06-y}v(?*RNV-sUa5zI6V)S^DxD7tijeqpMziZ3^JHQ=+v&Xs7W( zWVJ4Kn&%ds{~*#VF;%|Yv`X~PJOW1H-X8%8_z<>$h9uefW-+P9o#=EdO5EWx5f+^e z0B)zHoiF#_EV`%gv~2Pkh4^SZW8~SJLF(;g@oJHl!tBhP9*ux;a@1;ZlkYNsnUJ`F z%jL1vVp%Ddve$7u;uG*h*TjZiyMBOQ%RpF)kXx@FZPF=+{8s=tOTvkG?4@90oP=kx ztPY9S@%7K;6=Ez+kM539ekGo%cldL%aAI01XFu%r%njbb$ZpLHJV>RM-K2)m4oD#)j zf7>Y9^=~@n5K2_wS%ar^{?gf{vu@O9E&|$an5`B8V6_P25bl;2Z4#5zyln6-i0Ja( zO=5;j+AIo6v@^r~_{xW-9l{gDbL9w=8KxqHcxuScM!Zv0x*g(uIW6zrEC$CGSj8`r zA8r;|u@jJFdAv&gxLKqnt+E=m!)n>#Zs@e#a_HS+@Ccjlnuk3gd}7dutvBtk3*g+i zUA~=Fu8Vy0Zqc!C8pI+mhbAa1QFt8Bf}$Ag|$9kTUL{oJ@+^b|HN=@_QrAyo0ZWXgv{boI+Y3gmqT9 zrUPjs5;RR*NgDpsrcWh}wZU%@GK;2PLyE_85O&eDkaj5|N09Lh3e+H6G>x?G7{G^X zH0=$fpF&5+5vI)|jY)d|LT+%^4AOczp-Tsl_9M!_JCn2$z=!YBv|$Jz#cXthM-cJ= z-Pe*9LHImEZs!!j%Lq(cG>=qAt};?o*a{)r0P_)6U, PathBuf, usize), // tx_pid, path_of_plugin , tab_index - Update(Option, Event), // Focused plugin / broadcast, event data + Load(Sender, PathBuf, usize, bool), // tx_pid, path_of_plugin , tab_index, allow_exec_host_cmd + Update(Option, Event), // Focused plugin / broadcast, event data Render(Sender, u32, usize, usize), // String buffer, plugin id, rows, cols Unload(u32), Exit, @@ -54,6 +54,8 @@ pub(crate) struct PluginEnv { pub senders: ThreadSenders, pub wasi_env: WasiEnv, pub subscriptions: Arc>>, + // FIXME: Once permission system is ready, this could be removed + pub _allow_exec_host_cmd: bool, } // Thread main -------------------------------------------------------------------------------------------------------- @@ -65,7 +67,7 @@ pub(crate) fn wasm_thread_main(bus: Bus, store: Store, data_d let (event, mut err_ctx) = bus.recv().expect("failed to receive event on channel"); err_ctx.add_call(ContextType::Plugin((&event).into())); match event { - PluginInstruction::Load(pid_tx, path, tab_index) => { + PluginInstruction::Load(pid_tx, path, tab_index, _allow_exec_host_cmd) => { let plugin_dir = data_dir.join("plugins/"); let wasm_bytes = fs::read(&path) .or_else(|_| fs::read(&path.with_extension("wasm"))) @@ -99,12 +101,17 @@ pub(crate) fn wasm_thread_main(bus: Bus, store: Store, data_d let wasi = wasi_env.import_object(&module).unwrap(); + if _allow_exec_host_cmd { + info!("Plugin({:?}) is able to run any host command, this may lead to some security issues!", path); + } + let plugin_env = PluginEnv { plugin_id, tab_index, senders: bus.senders.clone(), wasi_env, subscriptions: Arc::new(Mutex::new(HashSet::new())), + _allow_exec_host_cmd, }; let zellij = zellij_exports(&store, &plugin_env); @@ -174,6 +181,7 @@ pub(crate) fn zellij_exports(store: &Store, plugin_env: &PluginEnv) -> ImportObj host_get_plugin_ids, host_open_file, host_set_timeout, + host_exec_cmd, } } @@ -248,6 +256,24 @@ fn host_set_timeout(plugin_env: &PluginEnv, secs: f64) { }); } +fn host_exec_cmd(plugin_env: &PluginEnv) { + let mut cmdline: Vec = wasi_read_object(&plugin_env.wasi_env); + let command = cmdline.remove(0); + + // Bail out if we're forbidden to run command + if !plugin_env._allow_exec_host_cmd { + warn!("This plugin isn't allow to run command in host side, skip running this command: '{cmd} {args}'.", + cmd = command, args = cmdline.join(" ")); + return; + } + + // Here, we don't wait the command to finish + process::Command::new(command) + .args(cmdline) + .spawn() + .unwrap(); +} + // Helper Functions --------------------------------------------------------------------------------------------------- pub fn wasi_read_string(wasi_env: &WasiEnv) -> String { diff --git a/zellij-tile/src/shim.rs b/zellij-tile/src/shim.rs index b514b55a..bdd6f4fb 100644 --- a/zellij-tile/src/shim.rs +++ b/zellij-tile/src/shim.rs @@ -37,6 +37,10 @@ pub fn open_file(path: &Path) { pub fn set_timeout(secs: f64) { unsafe { host_set_timeout(secs) }; } +pub fn exec_cmd(cmd: &[&str]) { + object_to_stdout(&cmd); + unsafe { host_exec_cmd() }; +} // Internal Functions @@ -60,4 +64,5 @@ extern "C" { fn host_get_plugin_ids(); fn host_open_file(); fn host_set_timeout(secs: f64); + fn host_exec_cmd(); } diff --git a/zellij-utils/assets/layouts/default.yaml b/zellij-utils/assets/layouts/default.yaml index e0a28da1..549dea24 100644 --- a/zellij-utils/assets/layouts/default.yaml +++ b/zellij-utils/assets/layouts/default.yaml @@ -7,7 +7,8 @@ template: split_size: Fixed: 1 run: - plugin: tab-bar + plugin: + path: tab-bar - direction: Vertical body: true - direction: Vertical @@ -15,6 +16,7 @@ template: split_size: Fixed: 2 run: - plugin: status-bar + plugin: + path: status-bar tabs: - direction: Vertical diff --git a/zellij-utils/assets/layouts/disable-status-bar.yaml b/zellij-utils/assets/layouts/disable-status-bar.yaml index a58ef4cf..e97bb8f1 100644 --- a/zellij-utils/assets/layouts/disable-status-bar.yaml +++ b/zellij-utils/assets/layouts/disable-status-bar.yaml @@ -7,6 +7,7 @@ template: split_size: Fixed: 1 run: - plugin: tab-bar + plugin: + path: tab-bar - direction: Vertical body: true diff --git a/zellij-utils/assets/layouts/strider.yaml b/zellij-utils/assets/layouts/strider.yaml index 96e3c290..ccb2a574 100644 --- a/zellij-utils/assets/layouts/strider.yaml +++ b/zellij-utils/assets/layouts/strider.yaml @@ -7,7 +7,8 @@ template: split_size: Fixed: 1 run: - plugin: tab-bar + plugin: + path: tab-bar - direction: Vertical body: true - direction: Vertical @@ -15,7 +16,8 @@ template: split_size: Fixed: 2 run: - plugin: status-bar + plugin: + path: status-bar tabs: - direction: Vertical parts: @@ -23,5 +25,6 @@ tabs: split_size: Percent: 20 run: - plugin: strider + plugin: + path: strider - direction: Horizontal diff --git a/zellij-utils/src/input/layout.rs b/zellij-utils/src/input/layout.rs index be71130c..5d4b3492 100644 --- a/zellij-utils/src/input/layout.rs +++ b/zellij-utils/src/input/layout.rs @@ -53,11 +53,19 @@ pub enum SplitSize { #[serde(crate = "self::serde")] pub enum Run { #[serde(rename = "plugin")] - Plugin(Option), + Plugin(Option), #[serde(rename = "command")] Command(RunCommand), } +#[derive(Debug, Default, Serialize, Deserialize, Clone, PartialEq, Eq)] +#[serde(crate = "self::serde")] +pub struct RunPlugin { + pub path: PathBuf, + #[serde(default)] + pub _allow_exec_host_cmd: bool, +} + // The layout struct ultimately used to build the layouts. #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] #[serde(crate = "self::serde")] diff --git a/zellij-utils/src/input/unit/fixtures/layouts/three-panes-with-tab-and-default-plugins.yaml b/zellij-utils/src/input/unit/fixtures/layouts/three-panes-with-tab-and-default-plugins.yaml index 88046395..ae54a0c9 100644 --- a/zellij-utils/src/input/unit/fixtures/layouts/three-panes-with-tab-and-default-plugins.yaml +++ b/zellij-utils/src/input/unit/fixtures/layouts/three-panes-with-tab-and-default-plugins.yaml @@ -6,14 +6,16 @@ template: split_size: Fixed: 1 run: - plugin: tab-bar + plugin: + path: tab-bar - direction: Horizontal body: true - direction: Vertical split_size: Fixed: 2 run: - plugin: status-bar + plugin: + path: status-bar tabs: - direction: Vertical diff --git a/zellij-utils/src/input/unit/layout_test.rs b/zellij-utils/src/input/unit/layout_test.rs index abce56a4..1b696b0a 100644 --- a/zellij-utils/src/input/unit/layout_test.rs +++ b/zellij-utils/src/input/unit/layout_test.rs @@ -45,7 +45,10 @@ fn default_layout_merged_correctly() { borderless: true, parts: vec![], split_size: Some(SplitSize::Fixed(1)), - run: Some(Run::Plugin(Some("tab-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "tab-bar".into(), + ..Default::default() + }))), }, Layout { direction: Direction::Vertical, @@ -59,7 +62,10 @@ fn default_layout_merged_correctly() { borderless: true, parts: vec![], split_size: Some(SplitSize::Fixed(2)), - run: Some(Run::Plugin(Some("status-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "status-bar".into(), + ..Default::default() + }))), }, ], split_size: None, @@ -83,7 +89,10 @@ fn default_layout_new_tab_correct() { borderless: true, parts: vec![], split_size: Some(SplitSize::Fixed(1)), - run: Some(Run::Plugin(Some("tab-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "tab-bar".into(), + ..Default::default() + }))), }, Layout { direction: Direction::Horizontal, @@ -97,7 +106,10 @@ fn default_layout_new_tab_correct() { borderless: true, parts: vec![], split_size: Some(SplitSize::Fixed(2)), - run: Some(Run::Plugin(Some("status-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "status-bar".into(), + ..Default::default() + }))), }, ], split_size: None, @@ -253,7 +265,10 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { borderless: false, parts: vec![], split_size: Some(SplitSize::Fixed(1)), - run: Some(Run::Plugin(Some("tab-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "tab-bar".into(), + ..Default::default() + }))), }, Layout { direction: Direction::Vertical, @@ -297,7 +312,10 @@ fn three_panes_with_tab_and_default_plugins_merged_correctly() { borderless: false, parts: vec![], split_size: Some(SplitSize::Fixed(2)), - run: Some(Run::Plugin(Some("status-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "status-bar".into(), + ..Default::default() + }))), }, ], split_size: None, @@ -321,7 +339,10 @@ fn three_panes_with_tab_and_default_plugins_new_tab_is_correct() { borderless: false, parts: vec![], split_size: Some(SplitSize::Fixed(1)), - run: Some(Run::Plugin(Some("tab-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "tab-bar".into(), + ..Default::default() + }))), }, Layout { direction: Direction::Horizontal, @@ -335,7 +356,10 @@ fn three_panes_with_tab_and_default_plugins_new_tab_is_correct() { borderless: false, parts: vec![], split_size: Some(SplitSize::Fixed(2)), - run: Some(Run::Plugin(Some("status-bar".into()))), + run: Some(Run::Plugin(Some(RunPlugin { + path: "status-bar".into(), + ..Default::default() + }))), }, ], split_size: None,