From 5ef9cf1471630ebe6eddb15815a4e4f96df8a84f Mon Sep 17 00:00:00 2001 From: DarkFeather Date: Wed, 22 Feb 2023 17:56:30 -0600 Subject: [PATCH] Syncing Maat with current state; adding MaatIcon for favicon; updating install with maat user; moved maat-builder name to just maat --- .gitignore | 11 ++-- MaatIcon.png | Bin 0 -> 41727 bytes Makefile | 32 +++++++----- PKGBUILD | 4 +- install | 9 ++++ maat-builder => maat | 75 ++++++++++++++++----------- maat-builder.service => maat.service | 4 +- maat-builder.timer => maat.timer | 2 +- 8 files changed, 85 insertions(+), 52 deletions(-) create mode 100644 MaatIcon.png create mode 100644 install rename maat-builder => maat (67%) rename maat-builder.service => maat.service (72%) rename maat-builder.timer => maat.timer (70%) diff --git a/.gitignore b/.gitignore index f35b614..088a994 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,10 @@ -src/ -web/ +# Testing outputs +src/HelloWorld +src/HelloWorld/** +src/ascii-invaders +src/ascii-invaders/** pkg/ testing.log -*.pkg.tar.xz + +# Packaging outputs +*.pkg.tar.zst diff --git a/MaatIcon.png b/MaatIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..62aa9865db66f9941ee53fe04dd671dae854ba2b GIT binary patch literal 41727 zcmdqJcU;eH|Hu8!CL=o;C3};R5rrsZJ8c!AtcIjQgNz8t&L|<{G_qAvL@F&=8BL`! zD@jB3y`OK+>mHB$kNf}ocRsG)bzao>`}rKld%Rw+_v<)zPMc!XsDVZUg+kG2g0bNY zg`x)kT0>E<4*&Jj>174~RcFa0BSVE!{yBC3`~m)?zOC^*dxb)^x%@{(aqNUTe^__j zgvsOTW~sJp*|zn77w@YS3N6J1!_l*x-hEATUO3yKTB)qNaN$?auUc8T9NMOL}knAzRn|Eo&gcn3c{rGJW zzVPm`6~~U$a2 zcKQGO1?z?LYih0a@Km->C{~`ZZ5~vjqWxLnX&e{vWsdHjCz&OmYpr&yhFW=}#~HQc z!MA*H=q=BYyeJ}6Mf$E(qb_0cW&&mchw0}%`rlIip(%H1QGQ!wtSIU4E)9V@- zI#zwI<0+5aAYzNVJo2AMkMRy1tkBjU8a#NnstntV#~(YwCZ+bGSk~^nY)# z&8$T&S=?D=<3<~tUG_pl5%THrDnGOEZVjJ&IicpDFkF|?kB9s7OkOaXZp>xyiw%xu*6}1-}Ut0?P(Cf$NcYe zWA+%W;%7UuEmd`ijcF zw&Pi#pnER*`zrcWXB5PhG`d?fJo@jiXI$`Dq`5s*<@Bm8o(+_f^z685noLhqB$tda+@|c> zA*Nzl%UU_5lV>W{raiutro7a`)$4d+gv-Efc}{ye@`9{a!Y`Gv)|amt9URq)&{Z** zRrWEr-K~m3f+eNd^sFPtovwXeI!$d~TYtVfsacS7wOL@{f_%%v1@+U4G&cVI;+nJ4 z6n_JMn_117qYeJV{;aaWS}kj_W#N-pu83VJdP)b!k#`F2`;6Utr)7Bc;*q8nv)4W9 z82TkeYnHA-nxg5VjpU8T)IY!9ZR>@?RnL0V>s~J=!FZLT)-ye2P}cHeWJ8wmmzr1I zV!Tu4wqE2-IBHn2=b<$|D`FLAz*@y^@|5Hj0|2j zdgd_E`o`IyGqzQ!RzaWsQCF+2GF|bk_RJKMMqT+=HMN0PRD$a_h}fkp=~o##rh0v} z>C{FGm8*=yu67Jv;gjL*lu&HuxU%$8+f&x=-4!v7j=XVbG02uz9Br_!{miV^jnw61 z_7yzSaBnr^f6wy0wA6Qn%Y%}LUyr}MJJVL9yd-LspEC4?9!W=d)o@R>ja^_g+GA`B zS*(tH&xBHl;45_UscP#2z85$GU$ZoF{&(eHb=yBcWA$@g? zbzV;ob{&+|PnjKj@Qc~jSvy)N$ggf8-DTy2#?4ejEY6x!6j8m+Y)*^vz{D<-RauZF zVOMvC4qF-f;kHYG!};|Q7yd3ts%`x_Mx(pkB5b#~Up>;Z@^tfgvN)N#0fQAOA%&O9 z%#@Kqy*w&k=bd_8m(N)db~P~6u41I8#Kw7N*Xa@l(-py4`~Tg$Wy*YZr1s{vC(kKd zA4Ud!aH~>{7$26u@KEk5>#(aK4HOZ9PAy#*nT&JIOnp`1{>A8h17&6LOxN)>Uj2Qg zK3_LF+ zB2pi3&#yd^v5%Udd%tG0rju2vL~ENb`Z}v}T)5k6tNG;i*{JFF%yJ^yp0?ADXf|0T zCTP87CvAO~_&Y z9?_y{dC8Mw=W72+zj3UXt9)KkXxW7_uT*u5>2wPfgR3JFioH^uwp%THI`wQ1MR}~F zhW6TQ@98{R4fhL$UVjTz17*@O3yVh<-Xq7)n$=>;lqoqMKVEmO+VJ}FysQ#K*7?`3>~+6TQ!8{* zndXV%4!bVR3Hp)g(d7Ac3!`Jlj+K4AnPfa^l11d!`g7;6oEy7G|8>cmQ~49SY`9#| z?cKG-HQg#+_}8mf&-~r36?5m#oi=mkqoVBSot~Z#UcLHdIscee1I6jl=}X?ed-wd=GxKW81F>hL6@lXxc4D0eUHe$~&HMK= z=gcv(u;}!_k)keDy^mey-1#3qf1WsRo^Ocivo~*yXU;ruj!v&)a5hj!V~^8@4KrrX zUS9p~?)jRA(xv8Wty;CpzHa7w6$82hEpElb6DLpFIXHCb*RLRh*2K0MtA5PQ-G1_9 z`;d^3+#s5i^q5<=;o;$P=gpfwV+M;af0Ej}va<5R)vM=%gUd#!D5lYc;~AqaSRp>HI11h*MQbN>Nc!@@St{ zQ4@C<A0LwH`um%SpPsK{hD%CVy=f|$j+=~rDnmy++TN(skRgX- zVvO}hj+|g@eCq1eDRqr`UhDN2FJ3%*?%WJh)5KGwJ^HIR%srygreU4ly?g&Od{E$d z^X9;+iV};L7p6DV9Cc#K$>Bb}zOmoa?hym0ZrqrmBJDKC|MHb9cI(!i4G4JHPO*CR zYNxWS9kGdt=Wg8CA0Ka$=&zr2sMnnCef!St9_-WCb@uF9wQCPpn`69W$&z|anw$>^ z*xbozZ{fqbnrf|E8#y=(UX^k+@a);G{MV;bJ7ry-CMNFn8@aJrhYnNb&Q<^R?sg|F zErrKJ0~eQ(B_$>54eNaU`n9mIP)kp*UAJ!CK7amfY;0`)``5R2`mQG`DmJu_&+t5d zzMDs#MoV&Hd>XbL($LJzEb+v!NBg@>^7Qh`K5i5K@YSnBn`_q9S(iUeR{ztB^DWZ} zqMYS9nVApXT(|JmbJlVB{i{o-P99@-G%hMhF|$`zm0I*yw_3gWY-s4Qz)45e=EO8* z)vjH?{xB+P+rE8j<9Dk+d~Xwx5PP88ypXkBjJ!L%+FW($4dH!df$sP{8c`RfpUHoF zvs+YD)Yr6oM@X8rWrd3y)~T75l@(U>q;10vdPg5TFfi%b{MWBv2M-=RYWBM~aPWEL z)~#DJzkQp$VZ-pe#FGQv?wdup>iv8+*3ii4=EhQMKj+*wAF{K1^zHj3CFMw)fy>QT zte9Y7aVErgkn%Q<`uX$98#ive33nNBX8fKH7ti}Gd3$47*spi1F3-C;zHasK73o2X zWA=62tv+DOXpcIJSFMV>ZV~N7+|=c1_A7q49T z7~9Q1$E#m>S>i%l7nl3aS!Oe5Hs7;n50!>z-kEIm`0d*^j*gC@>pqR~ALWvtc2Aci z95i^aU0k2Lwm^(z#OF_+HaL^)dFD(f zLUG;am-UT|j7W!&;=~cYgH|-#ym@n3Sy^Ugru##4tq~)RXGeP%SN|?JaPZ*c!mLMa z^qj8Mc+l?wMcg_qv}ybH37$ z`5Zq!Y0Q`!1>wK@)~{dxY+&H@nKO$|HkKbceE4vNbDqba8kYR>rQw=2eOmWjce`u$IA_Tt5h)%T45QC#fsV4M{6i$Otob<*9T`S+i=D*U6J7hn*NaXwbBI^GKdftgJjY zOSrvp`-z5zwOn0Y7Y5sIP8#)l_tveoK7aW_$!J0-Yy0{6ojrg4ro)%njWtKb)4RL( z?)^A2vc`xJBi`LvGl?aZFTTIAwCm8J>cr~8g$v``4qs+z*-K&Ub#`)`GUeWQtLHn? z*3uRV(>E4m6%-_O^41%}mS0(L_sNSF%~e%Zi^E*)e`lEYH}9`5+mV>qc)@}NtJkc# z&Pzr`)$Z4?U)cToML&N&rf}|UKjK4f?)XKE+SjgKd+D-e(`U^>GpOZOnXO6U$4%b& zm3RI0@?vuW?)=R2Q`iHNeiAR;^}tSIVB*Ay7cO6ZOo5~vB!|0f+_h`hn|qG^jP|w* zxOM9wq4Ye+OrO^Xw#}+hw@C*|Y^R0cn|#@dcJ0~~mXrjt50tEDm*(^v?)ZJR-?{6z zZarSAGo6*4GNtj6zKc$;d4Ff_f&~L<32W``ZO(mpUvT~Cr)K9HyT?qOGi}-fAO|nj zO;@+|#*G`tj2-Lz?RLsg$M5YXPoA9H!#(#%)uxT_%?`vqrU+fQawYKJe|LTTx_bZq z{oT8FKQ+~V)XSGIr}56?$JhCbJF@fhCBkf;woaHkf4(50C%fB>RaRF?3nN!(SrnE5 zz9ux5;ukHc#wI6*`mhpv+YO5(=3|qRq7xGK1dQGBflpewvS+W^moq_JOD!$4Gcyeg z3={{tO+7a!$n@vew+Bw0(h3U;qbUSjzwQGjxN3TTBEJ$F8+&5p#=~B%`|T%uCrqgC z_WONC{+sKaK7RbD(OIf|vy#uRynu8!SH9}W;(G4fxtKrs`u66Ipzw-aG$EIQ@%-PJN4@2 z)nrtef-0q_r)Rrvox~=sblI{%=Y(<7r#J1=rAs?Kr+p;XbM~4Ii!U$ED=&Q1WWt0A z0T(asbaz*b_wFz`$n<_bajc@ElDppZpMP2sTbsZoCq}s(v(HPktFCmGH|6tEt}Ys= z|2ZXWN~iw)_wi^~lGSP}d=AH04O*MwQfgQ7`JdNU7sb82IP+6RgnqXvCo%~i>3lWo zHm;1mpV_BRpB1nEZAmEp`)|+Ul;f?>15W7hZ^E1hQp(FJDn5Mpu!ZU?MeD_j;&Ve2 zhYT5F;;XYQ+~xOvuu89>u*g@J=GZwpT7q(^Cj{*FWUI5+uP0Zo4a`mSx_x`_>({Sy zUsdsOQh%B?i`?C2V7eGhYh2=j&*e%#p|Cvd)D^X*Lf^1nEA}9Q|^R#?>>F5 z-@N%KHg+dFy~)L;e!Y697TsHa%O=Bb$eMT0&QH~>{&6J2stE*2ZN*Lk?UB1mO{dQn z&*#%Tugt&wf&ORy=Gx-k^KNXduKL}a7C^#Qf7_UrmgYOkW%!zRwJpbYAR}*%C$Z6546=5GqEb>gh6FXV;+2il8DHz^%?OJK` z?MAGRuiVIcMNvoEwrxw@N_f$Q9!`!td-lwob$s>e75@W#k-$cLdUO4Z^Pcf`b^|_r z`Xpg7&@yq~i4*Yx=el=)uvBO9nl+QZyuJdU?b^HdZdk~(tBXbypE;J0R+oxY9Ct#o za^*_n$&+7cAvpOQrg7}q_&sDtzlh5HY;Ym;WB-X0CJPs~3kV3fwJK#Vbx~*K%kJUT z6{~vo>J{-~*wJD3U6(Ce20%&)o4dN==cj{5j@)D=_}e!9%@yF_+^QVb%5Lr2(<}!W z)~eZ`5hYmF#q_JY<%G2TD>6M+0mM`y09>MZ_{QakrDpv3BT=~C15pjCJ(%Sb&yZUlN*UjE}_pYLV-{*ULA z`q_Pc*@Ny|da{uNnDuD?#Wft$ox8CK3q#g!3k%cR;^9#)5NG}RA!(rwXDBxd!<>Bb z{5I}=`Eu5cn>RskQR(R&Y;0^o9lkuFDc5h<@Nr5?>#0+xo;Y#h+Kn5hDHW7V-m80$ z9$7y=#^vPZ?mu*BoVE4U@}?0W3EE1$_qrOrO~Z}?4nd@YrU`57vLfYbdw}C&Hg93* zx}72Rc@iO}rX3V^c6OB?`?+<5T+wK^5cxM&rSvT>7%_Y}h1m1>@wOw@e?0}ly>_jC zYHI4yftHOo{`#6#Rhp4UsS*_U=FQyGr%w;v_^UU65#U&m&U$+!=_^mXx4yRrTxQ`|DL{es|8`yb*i7q@gZvpi;4nZcytgA4UO)7`UKJ`Sveqq$?VyOLxS@@ zew;pkKD4!s!61^_@V3 zHScO-{%}j}$4{QDXUlawoE)RpunVbX3=f{X)iz|M1M?7j5)1!)<6GDpEGC2 zwr#aLbm$Nq9Bi)R8$fi0kH)4p*&zE7JW)`Qb{ZTyl+S-n3 z4y`HotKZ$KPr_|)*d`JnSN-k#ZB+CC_OkN#MjZh@>jn}lO~ZI7cN~ogKiMkW~TjU<*y){g8VXnS9*NpqesK+KGXsp zK6n4qJG47@-bzut?o_k{N)VF0cLdyfDX>lX%ks;YFOWS8LSuDmu+QLCuM2;~^?N~7 z@(2?_zU)F?`0wwJ!20|polZDC&sCnRKNEnGa47=}Y!jm}M~w3DsQK;v-EOoq`Z0Ml zY08wn&Tds6b(_qXGbj3?M_q#ONpf;ih$*pQG=IJZ8cy)Nd(GRlnEgUY0Yu8#|I9>4l`xIDGn?Y7;5}*$sZl-?yD#%D8xX74O;o*L8KR;sR z#j|Gyu(&TNL3!{Mgfwr&4*!+(Gm=7g`Z(A09h=TVdN4UAc^5$MMf9O`}$GZx-r7^s{ zy{a`3Ci|pg`eJ0R)fwUK%kpMD)XmuR2=!(%-#&8VuN;((^6C0Bi~SUI{om<*9|t8s znPI%mG&Ck6KHT3>5(%XJo;vLHl?Bm%rPx6`{FnQ?{A%Mp@|QX|u4B)hyNIlrrlx!0 z>e)~BoB=3Ob?k~hi~~6tT3h!8G=Nr)ml{~P+Mh{UhieoR(e>AdHTS^P*AAzrAwX8B`W;5fe4qw!L`i(!hv>BBC|d9SL_V z8ru82Hr={(8CP?>NR~A~5$8;N$BZ7WLhFi*jNFoZ#>k$h>bo$w&?DoXMRa52s&V{U z9goekugo7{n`!Xtd)lh-jVDGp_ASkD)9-ixXEWM?MUvl0Wr?MZdPB6@7a)U-b+7z%F-nwH)^QKKldv_Q~*k_d$WrvlfZ$uy1cj!=whrR__gbW6@dvV67Ndr~YPp>Yu zroU-{yvBL8vitgGfJlshue7w2;A+&+9f5&e=$)*_^tp3mqP$wmVxU@(r_x2y7H!wB z7Zrf&FNl50l&*dH?18J(ZTkC~FsTqaBOhK+xtO4l=dUm_h0q8HzH*5nP1)oWI1qxws+v<$*M~o zn$)dZS7b;8--K}y{5be)fK9qy@uCXvw7L-prYBCc`}*x$n<1;!A#++hIXaM#F5IJX+)NJ0odBi5!T4s~h;6dd|OM(mCHUD{_Dl~RT!3!;+tz(4x zvtD+kX^zENJ2dwnKD-@?iJDa6T~Q75SiEf6IPg9V<#+n&=amgByuTR(O1493bdVL1 z?#eE$8%?5m?%limv1iktUsAkx?P?$cj<|ji@v!cg`1nfy(5Ac-_^UtAho^u+)nsE% zU$_ucxxtLeP@ERb{*6D=lrDpUDv@&J$V}=E5Q$<2mFvGeUfnvPYCXI_VDkAXCzsF) z6tYgp!^78qHRgW`;NY`?1Jf8i{FN)T2}&XEhYyeE!{}%-%Q#;HqT{)H_hVA9wW(9U zxQHWSO|TwLVY+M<;fHu^m$JyQ2*&dR+0z!lp;=OeCfsGffTFthYG=4^Omi##wq|8e zY4-B*XMCPLo7Q#8iI}4UEC}OVx|Jxj!v1gFx}|iksg0bpy@_Vx!5%Z!b*GS(HZ;twFpeuHSOAvb3P^Xyw)N9me8Jt)^F!2QZ zO9ab7ZL^WBR=>ISuwDPkswz>2MsE0d3b=@b@;uaGl}XnF!&;osck^Qr)|UTR28{}V zw9LD?ywM29?=Q{&bn6S(uI*#DB@B=f{4`yn8&{@W+~VI%0pcozF6!!*wmxZd=l1O= zRJqozTT2WwXnJ;PG<6(}>hZC`tNs(`%jbEw9WpgQW*fWPk7z}U5FEW}lO8z;^V*cB zY*{^Q@-#Cu8&~Uyt5*{%KWBh%=&&NYphj%^_13a;w{8PB{ImjbigIKVR#b;Y7Q)@3 zgDm2O3l}m0g^~}zxM|a-8Bh#SBg{!z(lVQY5KNjLg=%*csWw?8uSJVip#I;va~Mc< zxS!e8lgd8~Mzv9+kJQ@EUAtDFR;Ft3dKm>DCF_e?>vuC%W5VRY%_HpWM zI!?Fl-900!OM--5iK0mDTVX5u^Q2`=9hNTb+-<5~<=d!2v#Rrh6)3`CWgooYt}&IS zztMtVpwawC`6VL7YLJMO_tt;Qe|@EG+C9f;pc<_PL~aC9Xw#+*t!A&t29)y#4H|Us z)oWnJGUY-RZt>6jKdZu1Q#})CUGDHsi&eYU}3{z&$p3O2y7rc0JfKvJT4_PNe42-A{fAFJYm9O zFwyGtur|87x+sx5ckj+gHqs=7Hy=FMLIhvQpea*^=#QC8qlKiwyw4%33iw8zT={ox zazA~VfC5?mJ40E0U$y+IQQZfqaF&*qkT^q%BQ=FmtBmeZ8)c3@PjS{BH0U6_mb!TD z+BL0#0~sK+VArf%yN$LFPzJWyGoFSq1u|#xWcS0241aQS27S>;)8#R}@zeXe{h$Ew zk7JHGzf;7fF@OhaO)uBK-La)VDDZtDU=ceYo@9I-A9i85vDj#$i+ZM@?oDV4oYmn4w)* z)vxy}tGpyQQV?BH&Vu5+OkKMx20=M~Qd~FHa7f)SC5Wz(K)pyma~U zwQ!PFz2^$hB>rB$dR3LP!oxq3Nt;9~nN2m^ONxL(vVAT60)SSPMc!^_sXe0JqURtj zqgqrYws$G+`8&6L=`m&X`{RXhZ>G(%$j%=R&518)rashGt01hnF=_)fa5FR20ZU`l zp6qEG4WFJcapDrbq4&aIHFA{^SexPNx})~yB5-_7zkgijm>-XrNhqWGsDqsudZfCP zrUCP^7*n&iP?7VePmifNR*+XHVD*5nuk)fisa3x&St$oAPz?T)SFfSvBj1w*S$TPu z=~0OcUEF)kxtf`uAH%QByJoHu?X9UC_pVI;taDKsR9&5i0SZufWPpjD54{mz3AkYILsdHsQgdy*0p6ZP^kDqn}&M4U`YPxo`Jsz?qP zTbCspps^?H=krMnO?Qh(lAmuSaRQxw8)DxL3TO`Jk`bA-eZt|#t2t&uN}k&%njc(Y~b>E;Uo;mK#SMEtT$mg zude6RpPDI}7zM zTr?u@Q5D_qrmb%a*6k;9jVSodLJuU_QYpkqJ1q5Ve3|BBx%gM`=RbcZ)-egOb5z)Ilj6BBtXCP>b4#ZdhOTd%V z+$O5376@?>Z`wK7XTe?ijoscbfRuua*;f2qvEkR(omZ~(!Qdgou>lrOgp1O*L7jtm z-BU0%{i;t>88_L26QGKsuI$~rmxSMkh6Q>;6aia3V=>0>ZMPHonOYPUrUxbqX01sl zN#Ms(Q8F6cq3Ig)Vyb?EEEkh|*+c(LKkCynmS9hjecatvcQ1lNv5e;tIEBp08pAex zhpf>MXUc**s~5AsQq_1I`@EBmI!MF3^4!pMJ!~SX?!2o$tvEGSOZPyoQ4XBTwJ@o? ztV~8%RHIJ}>zU`~j{MjJ>Nv7A^${gK{BF&{Ae9I3k`*t`*#VbjWCE~2UC2Tye1jU6 z7ys?+*O<7tN6E=P5}zNRwq&He1;O(B_wVSU)t8lyARvL}#Er;HB$igUZaegqPLkRkhz zAD3Ca3?!`vHB(c2z_*o=h`W-lIu97&18S$y#sdCia9*D0Z%LA+GWQ0MU0)K_AbnHu z6`BQdkrRodG|LArbdfqjeB4_z(gh#bu~9Vpbftbb?D{m>nq|TP5W@~ zd6BzX_Hr$X@)s3Dcc`YOCjB-xF7Ef;jGMP^!3DS4Wj|>O`yj>9qu^piZpuPpKbBViK7Q;N$`5m^$gnNd-foqh7~jCsUYwiU7X4vlZsJL)Dkz8D`t@tV(ow}G zOr9Kt$RWZwOD1z`cCKE71{JX?r<~sf0K)~_-rwj5PAJbkZZr3mRa1ZitdO#z4uA0R z@geIA->nJ~{$gxgZ`iP5Teok&0g#qosVq(k`F7{MC?4<#nU(L~-wcJ@*49>wsr|Wg zUH2b2FwCh?t5KsyG8*bIaziHV0GLi!mfQhBraR}g7sxLItF|^_53!Vp$cWKN;m4;7vyb^`zSEC~xzNoV&K6WM!*0!kOL?grSg8KL`KX>R7?NpgYfES|N?G^i^&TVzf2NKzXU`tb!{JGik|%%BsO^wx zixwr=Cyg{(wycX#U%){8vB7a+^Ac&%pGX~^e<{Q*x2meDvQml&yd3a9^Phjl!8w73 z=h56~**8|a=!z8J^kHYWV9ImCJvEJnb^Kg@&GXyvxrfBih=Q<3GpCM>BCwsZ_vlK2 zz(p|>)|`!$*okdL657fn?1r1t)%t$P>~m92K1ENOcW-?kgzk^e11B-Sh)wmGi}{BQ zQ>H)bMu%J5yf%n?OF{g3DtB>Nwzq|j?;Ct`WV9%C@FiI^=U#Jvw4+JQXUHCs0CgI-i;#}xs^ApM^y`KPLC^`n@ z<<+W>HX;`C9<0q4FoWe5u&AJXFvM+=>;Iek~W_kvI+hT6BEWac<>=$ zCdLHjS6R#`399}mN#8^AI)KyL4_|kRAxVmv+exNfLd;QooU6<8%8UJ#@$9(Nd?(tU zU+M!qo^HOgp7BnO|;o%F)5sJ}}cc3sM z;nD<|85aHcaa#Nl+qWYm$^a6N0+{Us^H=mU0XC3alVgK+I(&I8meD7B+sFAUD=krf zsM3$nAn~NoRH7~gg-^r-pxU}`4(MEb0ARK6VZ~E+kM9J!61a}*MsPgq%A``%N`~2V zD-&E-NIy}`u=_3w<(Ysuiy2Q#T@r~G^ihod3CIa56zL*qWGO%7t83F?+_-ThpDJ8P zsyizjf-A`?BYdPhMUq?fKzc)}o3g6+qR@jRinw(Kx>aw2giB?E$e2g%YI%8K$bR(P zlRs$-Yj3VfpQ78Vm#TuvVuy`i2Y~nz7;3C&Tstqx|2zRH`o2t%qcz=5v^Lx1)6IX= ze$eXlY10Zl+T#g)An0q6V_Fn$J|~dqFr*zpVUoIHnL-v3?R*p4B?W~c^t8EitpnfNjY$W~i?jqFW4DnbPg0shrlgG+q5QI`xDbAj z$px!S}^82%xrjL*8+xN#ufS15v-MT@9yL2UGf%3PK zkPG?svvqmX-VXJ0mM`wFP7muJp<)B52IJmb`|)XkN&VGtZ)}r!DKCsVDC1{w(P3wn zQJKMO-4Ag{o*7&^9KrPH|RjwesX!(l}fq8ma4 z#QTKb0hMeiyq39+g^kVB88ezON*y|UxHNnjjRA5ML!EzgRuGa=(a}4AJo{>^w%X_C zhooyC>{O&Z>2Plm{G&T;+%5Ackb}tPG?q#D52lVRX+ds?=TH_%hLivj$;TQsYJe28 zuSa*t#+o^!sP*)^203QWuLgDjj|eTnZ~*{dEQSnOKEkapU6^jB<67x7`|{j}0!sC( zi<+R38#4C-YbzZZXm#wknb$ORDf!1bJ|D+Ch7puq&0#?l;4v4kgO=e zbo(;=Qy^WjU}K^aN{9dB*Ztbj7(f3TmVzE8qLrXh#rx~~qcpB%kHikNz~;Un7ff?Y zp^rqK*Bn#lZBkkA$i^=Hps6gYE20Aa11gowrvXwj_5!_c`k8D5O+Hpu=7c-24e%62 z{6MTB12eXs3D7p)wgy7J-=-fE@V8(QQiXn2W;Jm$rvt3}`bK;WA2MU}=aPZJ`Q~gnoE<2lfP=)sKlC0=cMq$G?{OrySG=c10UT}9W zC?Dg&1MpFO1Za>ddYUiWZ*RGrwvD?$2CoCHQ-^}Pk?LWO93+TVR%Iv$&^*K*q3v&0 zUGb!#u;SN^Q6c_LGtWZUypVjw+65nlL!$Ta!V#s`;TZZLHsG9xBqpY~EF>yHP0ErU zlKaTcA@~;E%Hzxs`RZU}3#+d9f?csNQnjD-=h9NkPtOCTXGkQ0xOF!ETAjY(OCKCa zGDShS!gxK9KNO9q`BXibY|6k3$0N;Fpa&mZhSZlRyvU=;s2HY(3~9Rb?Mnt2Vg^LU zInR&>Narp-UDNv;iV%^+AiMtS8{q*0WAWyQ#Eh(k!od9B`D5k9r%RZfVkcq3zXXHS(=S00iJH}gb!lCJX_cH(oL1MMy}PEA15$SV_tXi{ zpM0iS$8~M0@4Bcch$#kN(GXwY^Z|y>Xjw*M$JV?w`$~m(dv}qPC_2UPr{e|NHEH;i z&qtNz#lqgG*Z^~HB$4fy4#edEA{t68F^^sh3>Pg#ES6B({eFJd=~rxE(2Q?S0=~pv z&pQuw_}oHf|493AIWfiHfIzD}jV>ZB_~=n}zzEK(j{tZ1Rcv1LdKCED5Ab!GshKJ@>-0xrl)Z*E%SnT~scTgabe$Xtx+7F&@(0(ZG9<@d zZtOl>(csTN`cuGdlwEwn0tq-)67uoz03C=t&P6?F9N^i-dH``j5HvcQ2rRsyO&wqB8~u_6IkHi78TCH7%r7hgq$ z3aU4gGkkSj5IjhH5pQ0g9@#uZD^BY_h|5TRsdRnon#+2>8c%-4oF8MR7=adOfFqdK)x)Lxi}IYWI>@gxK& z9g8-#Q2g&7*HC2l(DmP*5`4x}r$+Og?2ge{4 zEbtx%_?nvvH#;Z&hK{LYP^OeGGkw@ZJmrW`E7C#-iOI)x)ex(KkUWVHI_cX#I@v8%#;9B~ii;sBeu&Nq% z3#!4n%0K@+P*SSbKYsie)w<5pxH$M%Lkb)_E##LBbiL-G)~c02Kq`e!KhNLcjSY%b z*9wjDdIPw5j5VW5d9yTq@pQjWAC#8r=H~eh`I8Nfxu0sWpjL~vJ>P8Xojkbf^1-W~ zo-?}n_UO^z>ut|;?fI+kY{M4QSM)SKkbbsw_$}Y^s_S!dE4~*jEj^L&cBJLaysCw* zkE9I#5I>^ecUhQ!o@+r~IG(YxCIy#*f|AIO0XjO7adBRnZk0Y*37EoBJO0^G+@)E4 zP?05&BRDj)8NeOxbPZcDj>wROQ)U}IEzkd-7hra)CYqyiXy1&WPhGi^@Zf<$+oztd z$@q;MN8n>sZ_@_Fdb6Kjhlzpv!^20lXiytVDk|at_+~{#MgF&Mfz1DP)15pJh;{n+ z7kB(lM&-7)`!ID3q*ma$WJJESy0V-xNmEVDB&wf}ap#5iH?+h}4O1Hfz7+t8k#cAA zZgS`dyQi4y83=zQo5VFl_Rm({PvuCOK6KRrD?bzFvmHqmoB0|HrXj*&zmdeXxK&YbZ`Oq{~; z0yVFwh7B8@n$}&u;@2-6j^h?AXuIUP`t`ZH_v~rZY5Z=P;KHBl`xqNCzGtc<{oT`0 zTPCOgTKM{7rsIU^0I(ZH)cI$AQ{aIBPbxKyZk(B!rfe>ga!RcnJL;h4^k7xc{p|q( z9Yt%<@f8sQFW@6cWBE55w>a?)(bp#i&QQNrqsEw82A+y~P2JrZzI*ph{I2vTh{ppl++z~4WKvJ>K5+;zo@75Se( z|G?nJ?0WCjt3qkre4O$>evC>Du^&dq1N=qD$2VNFX3gO~3!Z>JWG(r_^FcvPuFo~W z(F8r!b1HPlhi0hlGko4uGc*6admCdd=s#dUz@0m-@PHhg*yaBH`y7zaZnpD6P>>}U z4|%<@zP>&RP6$}y+_`gv)FDVMGp>i&0Escm$B#6}49@U)g2QA^10pAQ?HC3kRQDe; zB$rZX4l>19FMkLZL6XaZ=ju8C*m}ft!%nI#^Nd1RFHBotFsHPLXxBR#o88q^)U*{_ z6!mIo)qCLP_3+_nIKfsQpQfC(_$NpQAFxw(<*<$&I||MRGW;wl;b`PkSo$m#)8Soqv6K%;nR2TwnmQ--iOhy z|DZwWi93kl4x=_1FIsdmG}zm?Gvfh|*RN+2jD)1siWL{V3XKD2u(}(fGTy)UTG%(5 zS|A@X<%BV!0V)qTtR^mw@X8;PDt`ZFlDw4mDEa4IY8C|U{;z}V)d z`NJB1dd_3UjjJt691#k4y1q2F+580y1jMorZx{f*dpD7DZt~oW`ADI|=pK9NYKx=# z)pOVS-}>o$Z{DoJfdyYMOwF1#saxVvL=uEEHf%qf`EzUHQOqS2=I$*TFfW?ky@eb- zEGSUUshxSgo&nDRDEXZ7PtTUbAkesaTRo1-wZVQv(zAt+0Wgs64*IU~%%g)hmiDFW z%$Rfk=8YSXsi`Nh6fgvyesNaJ$F+6p)Oq&$^?0J4Ux-gg_>`Y-08Sh`cI?leKRLIO z9eBi)%BzZ;c*iDV3g;cDAY$ym1Eh5zR`|P+AdX7x-rW#TG8VZKDbK`z)JaKB{NZ3@ z>=IAt-xN;KY{hX>zkU{l=jhR+0*FXo9!Bbe2yOt{JJxAWF#{M)n6T3}yLBxCHHB0| zwOR-j69Xe(zC4IGO+{?WUS3`mMgh}k)006?lyTIL{&pV>S>F|_R$)t<-AAFHvSLc_ zRs(T;L7#9El)p_1x_FUj6=P+?MvX+wfj3Z^pg2P}mG$@V@F0Q%u3VXHX$ivaN_v_v zTPEC?_DhYu&?__c<68by7Ow9R3o9$4u{~%4#+3Q>>+bvaN49U@KCI;R0P7e=_Aq}0xsH!qe&@g2OX)wgfo zQtvr>^THildCAd8fO@>&$m5`{nVet)xG_!ipMRm2tj~W7Ri-)i;;d#ZTSg%-%P@$q z6!$A)jy)qV_*oJA%HN64jB`NZ1_8Q?sVz4**E4Dfb$}U-oY|El861U`AsB;B5lAS8 zZpB08aEXaYXN-N{zgx>`v%JR+p6Rbe6_sd{r+~o}Shnpd!u;XnL!@3ympk zGcLAZ_>{AD81+zECuVf`B#y|V$Bto%kh4HkBJcMOxGEnLLo%k7p%A+pe`44H(83`Gyv(s4U^$+M%L*<31ET~v zJtj^KQBmOjV7#sLw&BBv-@0>0kS8PIt;fUNDPT2fD1WbWbVR9ohzyti<;&Q-vv z_(~td%Q;pZL<0Ia;5iE|c-D?c9C-8YTDK=@KKI$IUw5ri`Tlu<*;t2tyz7a~(`bJ(F@xf$Jr4}N>yqApfXMyg`h6yctCABK{s z=~~uNunrOt*5l?NgR5o{iI7yaordfP8fE03wz^K}tDHYUX8MCo3#1= z|5z+vKAvb`KK~GJI>fbev-)h`=QZ{qx$!*@EkVV^F^7m4e{#eTO20#6_Zb&wDJyS1 zt-2UqMWe0$o~_ZY-B~12)FOEMfWd>iXlvKtObaoB%s|HAYk5Ncfo#Wu7|?@?%ZeWqiaqM==vEWaHk-&|+YS26N^d8D3)v<&sW?&F(>b z{O;*z#@pc%p!QRh<)k6HUK_@@V1sD>HI@MaW8W5cimO8NbX~U7 znR%Az8y=j{@MrIo%e)8+rVkgecT`s2<{{8m@SxvZ6BPRek>BP$* zk*T2$Ua&BcVmZ7MN1=!>`I3SyT?=-cV!CmU{0Hc;z92mT;|heb8yhYS8tHmJ_BHt} zM(#$K!9}$mFrX=s@H)tB>hk4X@7iSKA~J#M>(~5}Vd?sNaC-dK9#aHdDmvCE^glDL zyA?;!0LKJkNrLkHp|E@RMxgmZ-Tlr)TSarq>XBfHa%+=V*PU-{14TdFhfDP_Kww*|2dV1Kmi@eh>j-6L*Li z2}9(6WET`nrG~IRpKINxGn@$w97nmu3X+KjLk1$`o}ec90z*LB{_?~V6EH<-`*^Z7 z_#C{D4yeIQ3!32;r%Dk&xMglY;Tbfzt~c8H{{VqOjaeOD*eC8I_Qrr27hk6R0!hgE zGmgPfKg8ot0AX|L1lz%$$`P*~h(p^TCL-Nq3V=w!K;5QWRi0lOPNjODk`hgjOEJSB z$<+T@O3IFjfn$2NIzuaF62O>NOrM~5$Zt^J+!v{-CX*(qA~B*}HUuEY$Hxb+|E7Ti zGA>}6ZT6E!%m|-kW@^#U(R&*36IcVp&Cil`8#u7oa)Gw0VA}t{S>dH|+CKde6w&(R zL@pJF5wC(tIYU1=6H^eO90gq<{unNu@B5l*el&6&z*B%P!(RD5L^Pk+rD#>k)xKHE zhKDA~PTaLl(?%!YMP~gVW2;s zOH;+-+?mF<(=d_=Zfs197JgXfVP~Mn{L&lFQsDSJ%OIB$vv}YC{jCa6XByIZv549! zt6g^Q-VGgiLQ?X<H7(hG?QH z;dbOC##kex9mKz+ErANd!ny8hjz;r1I$Cw7%U{YNy+>IM6sE=-U;)A5L%Pl27@wn~ zZi8(#7#J|#@gn6Y2ID{$I}L?t<5LIK|2cn$ibKkYs`Bk_hIB+g*Uk0c<^y!5b#Ec> z^P!~!bd$L%?7)L}0wf`l%V-u@3>suh#SO)o6Hb(&5WsTevWqb1VmKN{|F_Y5@NV}P z2x*(?K0ID&-^IK3AIzHKy>D>2YSZ;9l^f;26`BJ&_87E(8%?H;7Ju1$IlD30gPj;JzO z)Vo!44pc)->#M4gKYKXsWa?Jsz!=*Le9A(7u?oSvS}x^q-tD#NF*Uqva|ggz^{h1jqq4a|Di0Q7+p3iFdY z!DR$6lg=M+CXFIm+5+5U8m`7w6)?-GetI4I_T5W6!DO*jwVxK5?Cx&B1q$d8%vNsQ zzU?zHPylCI+8&zH@O7@(#K3aQL;ky~=Lo20KNO#Jl9>X|1zP@(%5r=55p7R47QIYP zH;JKFhMkCTy4IT#Zf3d009YmaWa7IOtk zcp)js>PAv0Lpa?+YdA~eWV)=@y!qH^)6}R`j9Y2?zr4a_fjD^u!v#nS1VgluqC+re zEm5sh=G`@GKc?BKzuda8$)lJUPl%E@NSR9lVcB~G_-!E}!=Q1r?<~&Np%2NWOjyNG zQ7KMLBTokg)<$ms%bjx|ymI7GI?}6GQH<-jE#ut%`zPtEa`2U60DXEyLehv(b?0&f ziSZd+vlWsfqXD{&TdCvcuU~UuCQ<|`3+O@HuU{WP&cLecwO;g>s8JsF8F!99uG@rY zg`DOW6r8_#^8m?=eo-;Nor=b9K$3KZ4uu^(70EG#NWC&0w0)YNwD5twn<`mgG| zFDis>USfMR@uT=ILA7V^-j&O9U_0=jY&^mosc++J@&wZg!_%4Y`>{O_VYeJ(X_=Q% zmBwa;xcnZ%nM~0T0fzk6Snd_F&7zc*>2KLrQ%kFGPX4D)2!SLFaAWa%9OH1`bBH_mc+;)}691Ay* zBMn?+#RV&SvDwg8$HVQGTt6BbI-H4&ovp3hGQ|-zyQ&HY>DIGnzs@)`=nV)0!ln+9 z#TqN-NO1>4MwnK2ZAk8Qtf8f4sHnDK!=q^2;@^Z|iMI0X+a7LA;}tH<>RB>mH2VSU zQP+2sqb^5%eUr&g^e&=bZn!|7q(3b&$MsCOs3H2N*~NExoQOMeq%}8UNcs?y zjD>dJxif?ZBkcx~X(+VZDS?X94zf)zho#UN1D5}VXGop~nHi$cp{1#}YuB0cEMnAx zE{rPAX>PjVQ@T<(4KiEEaU@Lgs*IL$zGfq>56O$TIG#k_$Pwy#N%z0baTGfjYco=~6>N zi!Ow8lL@WE)(a+S44k;U=-y!l;agDS5&jTmz`;5ePZ~}+F?2JNcE|6jGO0sdOeVtQ zfGSf*K-6-CLkjQ=F1evR%is`^i`|mr7jQyvO??@x@75T+OAgR*Ex~mW67}7#9^Nd+ zbH){@)U8{WaV7@AQ^0&$2GW>w#m^qRHr+*1IcIIid@WiQ(4JLca<-d8eMn9Joxnp$ z6?+2>h=XJuhim<5fe(V31kRYi6XDM#YU~TrN1{-$*K!Xb`prOx&$IkSxyU60GLm98 zhhhrXTvFuke+|nTwRb!;j%yL<-{#iVQ;@;_sO0lOdUBYJNC7p7?Y=2yX4Zn?h>Z57 zlA#l_yj%p8%K+;f6BEb)O=K#YiC0o|LJETTJCMic-dWv-OLcn6U>$(0d>1l-to4#5 zTMV@WLPFXcni%Lh+tkd=TkM}5^zd>Xr}UHbvQ-dtR*#0pR3(qHEY=s1Q-p=hxEPE_ zlVPwnx-|z2XUv=luv?D7LxypNj=D%Y$BNT>LZuE-56ZiA48dnt@qHuc=9PcXBRqJ%8s{3EA6$|uHKZ6D)noJnQ9z$^3-Id}7S ztc#x2ocj;F`F{8r+68GO_hN~Imrw%!3%r3NL6~rTp-PAZiQh*Hg$KChpEg=b16q!Z zi!RRkK{JHA$<2YRlhvwKXJ++e!a|?HZ!r-7M?(<%wU{Hh)-fQRI-=Cpi0q-JR`!J- zzjQYQoL&S;pvR(ES6chsg?%8;W_b5QST_E!5~nsl;lXc zClc-{$N|UtTGzGPh%UaAGgxRv*E49A$d(_H8WionPlx zp+-nR+`Z&nSvG)6a>R`)SKctI;0I$95(3Yk7nd(0#%9DEWCx^iu7U7iBavH~{7^WS zFJBH^UCi|f02Bo7&#uh;8(FPvFq1o`{z&U9mBR)NepT{|QZEWHM`(~_OiWBzEQa%k zAS>8?w!^v@QCAZFc%M;KWqP@C*T z*UGt_Vw(LS%1i1Dr&@VXmIhf-rr9zxXxxqqJQt{2{a2;F)OROj`k9730M{WNQAVU0 z@k|_;fU1lEE`ca!1wFfY^JaNkfvXX{i}k12GfQRCpxq0fJ0wU*l#b2^?jJ$A=ZJPQ zv4VmS*+GaSWz`7fP7dC|ezDqvjAfor4H860&1Z%x<(acHJUI@CZ98|?*YTC{KMJn6 zp3u7G$NrwXM*u_Y!4HM61^-DS;5&#$Zg_n2M%~`t9tsU(>dHl`pg*2u7sE3uDN2_p z=U5)tET|y0?h(LEsA6#N+^SK`T9GW|&@Ym!mgJ$p;p!3r%wN8|V3v;3pX9G^X>RUL z*Da)&BEHMhQGOUU-{i~@K{37OAvupB*T6wnu~-r^!f_c}L3M=PkTW8hz$Wa#rA%l! zWYzyjKeH#iV*53S9CF=@%+`T0q4(}xzkR#Q$dNMqq1X)gBX%D|WH@l*gb*pJB>aG? z;#~BhHmHTSlmLqE77u0<#z#=v2ig&2NkQfY!p> zWJB<=T@itZKgrMm)(zSyce?%jG?P3;dkwgE?>IxBEK9G3;H=6dvDnnB>{jF1`}c7i z%#(a$l!?<0UM$!5aTf;CX~$+e1*TCGFr!eE#!i{i7?(>X%L41>!N$Q*VGaU*Rcmr{ z&2EmCNw4JW1-JBxZJLH6c37GOe~y)egz(_`6ube41eb7bpVZ>fp=9U^@QZW!AGVFz zjL-_YoBmr*oH;VtGx-;?XIqlp2H|5t#C5nW~ zPPVZ(v`K{-*)B^%k|n!rV;Sv5$&xW-7*k0@L$ar6RgA$TTU;V#EHP4ursdc3{?uIe z{XEa>{s->ib-m^q`Yq@8JU`2E9G~N)D`m5vyC9mThY!avaMo+jRvH9q9U2%PUtc5k z+mv47KTD${Bp;uSSY^g$5}gcE5WYreP`9RbB2$1K;ogwFAVHFca{2P84lfLKbsg#H z>4r(1Tfv>#QF1ikVdzW5(}1YbK^O9<3!9(vYR#H8{f7<}KT$ec9*|(_)R0UlYqL*C z`a&1-55kqin8d=nccJ)40ZdYOGH2M?G}1USj~|QUWU^AAu=KfWojeh}^Yp2NL_tR< z$pH7X%-I}dYAvcp2=kCBy$I6U9IUl#NAaJCTCBel-x$Ho;YmGt9&&_vH(rN_#&Tp;*+hphhTwi;}y+DM9Pw`4Lh5iX;0jc)1jwso^H zQKbgDcXK1HCAhj!gy^9NEA&D%-1_8O$)y|~hW#LeC(W9b)OV;&^mS@d8Px(M_&z!s z9fU4FAWA4ArdUw(Na?)Eh@~YZ+2}7gpkR#fP--WI!*}nXCfblysXswJA!MU~l({6v z$3(>fh>suuOLdvJpa`Y4BCAlnve^&)`l}w}ap0-zNp>_DY!pBSm>7i8=1s?{o!zEk zM8!EEFt1(P(PM6cbCr>O3OAWir#cZ4CCiwTg?>~Ji2ySc@*JmqNG<4yg}QxR|4wEc zkttEjD}hvxI4gwGY?EPS$_w$TSWQxNB=1MpL4DVy39_T5x!ZN~hxhLVY>JzJ24gdo z90W_LC?)|YICmlw7fL{S&lfK^T>qHjaZE0)uXO4#6_YKMy6AKvEC}HX3{<9s>FdBI z;J-vv#XD!+x)nv{6H4BeRBVVG@>tUGL4r>fMBjrNhLg_P@pWM+0xD~W#mviW zV$M+F9!(?(WCyeIA|ruXrL(1mlt{)|rSGDZ;>9@lfs78!1t2(gZZJPDzUkEK6#RTY zhGSxrlSSl3rGwfI=+K~U!;(^w_EIj$M()*1k1a$)NRxx{u{4BhuY0nJNKx6Z6pCVf z!J8@l2M+8^d%=V|i!BIEyrgFxaY&pcp1|=og zX#9i;Q5zfTAqn_9oMR*mSe0MJ(j{@qSkkfh?1OWXu<3qeG9EW;0oVytd>bKKMLvyA zmBb`ce$I(NzSOx>)|moBbtAB|AX+rhVxTWmsx$k(#0sG+`3w$OT>nwK%J2^HKxV$h zEC-44u@4Ht>+hO3$ug9T7502=SY(O>6-MGZ2MP%YTFZ)^4ek(v0AWO*_>2s-eSQ6t zC!VxGqPLg1XViUY$}D%ei5!raTfzpSyJV}6q12}l0O!2@@L>e4F`Eq}nlpz#B^?SR z-B{8aNrJ!PO`xZm0xpm(0dGo?PE6gz5V7dOXwmRcjQFZs=N>(zD_Psp!PQlp+c9k$~N%fO8^+6Wc(VP5-W4%x8HQo`vQ4#3J@~HPD+#r%l>UN72LN^#1QbQ5bGdY z!T5JP<=i4mK@{S}&=a8e2L|JS^0MUHR`~}|Q}g%XMGu2`AXRBk;UIK9Fs!t5()5wD zEpTi=w8230@2pe^2wyQC#G+b&KOobFFyG&ahl&!hTFe%pq45Rue*XI&pvNe1++RO* z07z}jJ1d?&e-0EeIr?pVSD3Sv$gjnRLgZn2)S z(7rAUy!PIhZDR2~9WM@+K!$(;QYz7hQvz5S%+v_VG&$v~=ie?St9$18x#}qwmNs-{ z>SH@a4)IsLBKlZ;qNy6_6^URT03_g*;Qv5ktP6Itl`vPRE`o^1fRGE=7}WT*NzC+5 z-SRnRClUhnooqO{Z}nSVC~{5B=<9#qT;VUeN4m$NOB=ug+w$Q=w2gmPHUd3%hIl zJ%=<1kkf$zf@&kwQ&V8zCP7rgT6V_63oARbRrver$#$Y5p&(+5i3vH_&*Seu6ZpaT zjKRFguJTP`E{PTcjX7b%>~NeK5u*)hVuZXbKJ>J2dKv}nUWu3h8$ zr=L+rNk^KxDk1HqBZ_#GE(9v!19Ir`h7C6E|v$oFVz%^nLX88nRxZzHPcDXmZ0J zyfb{hkt(GL2ek*Jx2C*mQU^9%wOhx46*)xQ8vGk-i&vN3?n-!kfM*xz2c+-O&o6to z)`JOR=j1SbLz7x{B8WbM#+PcBffANV)RtgwP-f>8DtJMLC^^R_yzjRIsXT)8odj8t zPrk6{IK7@XTC(Kz>tzVnY;E^50|j(410xDDa4x7LRg4TG3XRDOURxSs=5BwX!(&~9 z&*!bh$B@Z*h6~RC7Q?W#wXhI7HbJ8q-U7YZfP0BxT8Pc%HXG<+x#A1`+iwJIvU+OT z^a+^l&?R|MVTx4&nNff~nrz66`2M&4X%WZy_iFfts&4MwXARXaAp?asBBL?E2g7ax zvLQFxiI$bLi4cYbV0<-*ZUCT&%3X{WC?^q3AtoUX$XJ8*u3PA@6BBy^B7m}hk;sf( zqY~w)x-Mqk(<6GptQXA=ws=Q(^ng8~;>9m<(lmp!r%#un;HUTD4xMDrIQIiXwsZPK z!df-f51yEYT)bF~TDR7cY%ex0;6g7ErQmX-7YLx_&#f%0&;tvez*6DgIicY(J4FH# z^C#lvMkBt1z9{iKD{%^@5|?I1D1AG>G~30@XZA8!4;C6anL^tKq!oRVsOBm08tyT{ zzo-OaMR6`8UcUK@=N^q(57AlD zkZcLZj_D^(sWDsI(myS`VT$7f>s@%%1(8KjoXPT#NkCQGj@&p1Q2H=BBH}v*7?&Oy zpb(z$QkTKlj-ZXwa`E5S!@CG+fzb!a1U~x)DrybUae-4~TkbNeB@UOnIqK4qh#eTC zTmnOjgB>3XvPSOLVty_UJOYZv08FFN8H$nq*YB$2_>~tiaXL{cvK==32tgi zEEP~eIyXcOp-yqt(Zg`Fvm;*qR{Jh9pGjsB*pd<@go(QhT^C`Dn1#EOilUT7S%`L# zzM6KH1_XK>SWBeQZe0#tyjW|mlhsi8 zq*%4h(zA|KIcnw2x_ke1_QvBAde1t0KcxM#?7h8a8yRaE|JKpT>D$x0LT$8k<{dab z@W*RI2Ijxp`Eyasl;cZ-x_t0IxY|%}j$3(p{)Y|r`F`c;PCDSJ*opGLW%n}D4SU#P z*Ts3n0J}M2HF4W0_OI7IZoN0YtDOv z*J%_TPT63V6)R&Y!Yd-C16NQpfzS;G!P43 zcjiF6VF)b)OeI(#)8@&`@oCpH#xG(tzGQr2qOQAr{UCsR`CveMaF@*qucKzo>Ok_M zToxrW$J2^p9_9fcp7EFFXFd8rB27fkLI=z`c%*&Dt&}a%zi{2i=*5eBVG1T~%9f5B zb?7caug&9m>>2c?;K`F6V5_pqsQ(y*%mG_T__7z)vCF<|simp>^UEP%na--=9C>l_ zqU+SOJ$RxxAb-J`cAOXqIur*QR$2@{4q#FbL_!A5q_C!htOOT*Mqmb=&q2cKOC+l+ zHOrL6r!}(LeGPY$5I_{B_cSQN_j+oB=X!&>wB(pwrWctr z!DWNMt1S0 z3q#H>SRXDaLM^~{9KE+#HYCB63$C2`(Hjdy#Jy|ZzHmMy9u}sV)p`9+E-bJ{7cs8i zyw`oo(;XR1QBhS*=dw{Q;_BTz=*La)hMM4rpA!Qn)aogE^2tG8#4Ti@{ZN8nv zdx+3Lxg*1S0*hdRC6mS+WO1C}>+uX%f;N+1T|hBJcA98987@z!ETKusx726&S< z7zo=_9xv6$0JMNobl<#r6HZg5KvXajYr!jvUp%!M-e1_v%iTuC5b+cw*$nf^0+r>B zVQkFEiK?g>kTdvP80D*-gEv8fnHh9-mcu>GTrB>h1sLAWBWdc!&=qu2SQ(2q5}YT^ zyaB#?1hl=)#P<<$Rt)bc+UWt@qTA4Iv9Kp0n~_$>LoESYxiF$4Y9hwqu+X%k-vMtB zg)MMIMuYl0s5WmrT_+s7M>cn+lN0A;o^UC;QPGIQ>A)L{;U_iOIK#PEm9|38@RZGq z;hHhg3bNRlPJ~Fo`-2Vz(xQ5k%5@A31b}aCO>mRlkC_VppdiyC2kb+11i^uQ<90CK zW5Eu*v+P?G*ItACgNU9-ObZ>7-o5;FF z6#*^R|G-TYFitdL>^wQ1ygT`TMVX5$1z#1{sml!d3UWy9fH&1d1MI>+rdpH?I3-q8AB0%{WS7BQ+6)qXRb)b zr=FOpn>4j|`Yz79F{NG9_2;tB5OC>lcL~Acj*LMSEPW;EM^0RM`e#q-Q+&;wdX=Lb zK2iV>YiyG{l)_#-Kri-EfA z6<{bT%KmIf+7OHt+S5-1zBxeLQy(@@_uPp%MG4IIih8m~z8q4IZ#>K_L$g4H<=|6G z&c)hCvKYXLHcOn;o1+Q*$C$QZH3EUe(mnCVIrgk%B+3-?!w1@P!NoXv}9YM*S^fKIdCBtdC7fENZE~yi~^aa zH$~G!(s81t|F|*zeS7&hbY`zfw;)YBPpUKW~wCIwIe2wAsQTgMZG#Ae%w?IK;YJnA4P+t5)nRz>YYgTcCr;_9Exu59w^0vwimdJ9B{2Uop}Q3>&1CYGF9? zqY+?<_T#RBG4XfGCeVG*Cs83~gU(4}h2r?QaU@w4uxSUbA!B;iam8*pW_Un7+1RVn zH+8}v_DcrmoOFVu)MRpmP09_MUGcCA#uQ0fJ}Eu{R!$*$cvZC#ra7Ldz?YTj5{id} zmyJmYZj1c1*U91CxoRo^7`g1nk2?_LH>2>v3`fdMC91p?u2fuD=>j&*D7FS#4OB#B z;|)n7lm&P&$<5g8TbS-_V3YaR>f3871@6XyZ5Ot`Q2*xwq$+R{y`}Ywo6@V##@RF} ztZ-k(MY=KG+c)Fy7wvgIR{pr80c>_f4KDp*9{5*3C7j6!_Hs99DQiWCog`|-Q}eHz zmJPhRtzBnoygV@L&g_9uk0evt3sXw#R-oBtO6bhKW|_c_xuCJRSf^RlKc=V>O|;7#9!)Hb`vs&5`tftXR<2}cpsat|JSQX;5Gl_$FdA3I(OjGo-u% zKpV487x_C}c5@*+2$?h}dRAIMv*M*$GA*;Fjk=~Vvy^9%a0-Le8A4L?zpMK@swZfx4VA&Np3{Sf`x^oAyeZ13`7!U3EO$}&IO~yQg$B@z;p24U3wj88(bERm z>sESTY#w?OvLU!A1LcRexx`mr?xeQFRNwz&eG=avDpT*wLmRI9upun3z87=-`KnVZ zpSj4^u?jU(g*b}ohG{_A7LCAYB|KWOnMzehXU~;_QC$4p;k^l!`5<$_LZhOhl!N27 zA@yMkTTwsWdQ*i8O$JBhC{txF8texIO-2@DYL>n;6&-M@xCBvfL@PwcCsNc{!wL=c2aghfT@ix8Thd{2VIddZ1g%MZiT+W? z(C{hk^a06||i|prJ73)8g>93h8NRD7cMTm*|m6``Ak}qK8nTsaW*~4Q$6=iGc z@?RPsDAk?JP99FKs;o4I2`~c!_Xg>|?IibqiU=OeqPO2$+P6G9%RK3Fxg;l{cy`*F zL?(I7y6tYf=@HwPH?GB#-Q2<-U@^iOaUwZkFriN*BJ1VRF7>61%flnur&3=%Om<6F z3nMxK6NK$j>lSqydWwJ5h5WC)F)%+ISYa#UrS$8KZ;E8PtKVZlCFj+v&s2ZTZ0G}L z*j%Z^0a7O<+mdTmdf+@_<@a`6zw|C_Q;B_HY~+u%ShKa}TS;i51)hR*@h{ine2}a> z@M;_IVX&uY5@i%rk}7!VBD^EW)tO$B^dVZvvn_HCW*_9VlZx$3x#GGN8 zxNjPvVYBYj=WEm^Un2>bP9AsMM9+Qb%$dn@hfcFVRO)RIipV0#Q@R~I0?M$GqEGMO z`0iM}-aEGS6U3bjZBW?5rKWP{Pc9!U;G-XH;whi}j&r{FF?9S96GXZ{0wJ{8X{@R6 zduZLOjQ2#E@J#Mn72CtwKZo4VgX|9{MsGz}<_5Vn7BV@UXUI!n^_s!1i=YE+4UcTy zx9@oJnWVL{fjrDSAOU)X5V<%exuy;$+;Gx12`&#fHR0(mlM)dYgbMOXsg#Oc;}2BK zAt>iwuAI}jO5eVHtFC=#2AWigF`yaT93N=es??d(myz<3z)d5mbpRu5;3l|4?}Y3U zKnoLE=tHMZPoe>wiS$ATJ()E6E3rG1bTx8>Tesc1aEq0ATW{q->d28syNaZ=7uQDi zqQ|tR@5v<^hmmb}YG^9;f!i)VeW9rsetPX4^E*SwMjyNGKZM_f_H)Z@CqKlYf%5Cg~C-H^DVzY(g-jE<`sfL+U70Qq9sm z`;D~T$E()ZD84NMpD#tta{JCRX+^o!qtD&NgI9FEIO;%VW+r6H#bGN;LqGndET5^F zHCVA|y-F3ReKCJH*DJ&QuE#2#(oP$qi9$d~R&pk7$tVEd%+x<@c3+E~(hGxR@eBY9 z7#qI;;EjLD;f66*=61K}>j}nd3B`1-=*^{6g>FG&8k?S8e`4eS_oS)dnoqKz|0>YT z#N%Sny_=6ROfzdgU1`YUl)L~u?WLea^AN;GK;$+DcoMNnm`9Qe6ZuGK1@0ua;Dyo- zScSW{QqCPEKLFID&vnZyB9XHIumE9<5CJ9;Ni`ruz@M<{l))PYP(vmqQW|YxFA+i@ zKs4hEs$*7r=;&A-wof^II+#B$SQtvoMnD7kBbK~q&P5MG!A$~L_t$iY)@PIiu26I0 z`)rpHEwz5*gT44pe5b21s*A)%P_v=#rF}y2v>vTxpCHmEWcP;$l|g#YSzfS*jg5dw zq+}F*k*wIOHMUgUi{A9PfWw`6;-g28EvekbqMJA0{(6(|!45;@i03D&VUQst zKb#MKOCbz&fL5Lc8-hoGTcpAyD;iCv=_c2Bh8i&6B_d^t&!q0*3{=hZ{z9Ee{u ze)jY^0w%!%Q|zlqaej9Ct!Myo&{eQz9Kg`YWs@KN>kHR@YCn8cmyGICeQ6@F*4^uJ z-G1<78MbB86orEoW=@E-g0b;B>z0JL8f$qHh!zDI0x$bP$j_Rc2$1Otx z0oVxbA2&z>gjr>A1l8fG&q$j;{>Ys%lRu?5+)sLS(3p#OHWLHHsSa$G8Q&~A3DNZc zQ32;r|AlcDGluV+|Apv2*bY>dvtsJMY{Gyke6r;MiutgVoPg15M~(iST?F>^;QTT% z$JmK1n0v3yd7azgv*RW>#7)TJ8PK)y<}QAI>4U~{zZ$R@ckPa%)`u_y+t3D+pyA?S z0)B9n`{O-T+Kdgb1F5R4WzZJuT37&6;3H-$9BFtdI@LbDY3%^<#XF&r$;%RGp%D|? zfp<+eX{)S1xuO$ER+Q98Q68XO`+8Qsp^i=#tPSk!vreM*@&9n3*de))=_2Gerhq}B zDic8ux>RXY0@NR39*BL~*D~$A;QK@X>b{F*d7Ge>I3c2gViR%)cTId^HJbK? z=R9a5853!Z5*$Tp`>5Klj@+^8*;AJr1`)je0vW0g5*nDDG}U(k@7v3^erD zsjIQ~7K?TCliNO3JH|u&;TYk2Ga2Ei6LElc6LfjxtDomh;~X%Tod2ZS5e;W}&1=tb{p7UrSaW^$p zF5ku%3z&_|$b+uU3wDYN+;i{Tfdi1Id;@Yy!lGq08*pm~af*A|L2(`$vD#-|C17Ub zeL#@nBE}CzbT#X9aTOpo@_g}60@%wYsIjb&0-`j+ICJ8pNzKBXn77`t#DDXo#7nQg z(9q1P64enoi4B=Lu<`re5K{yyRWG_wIpoBy$T#YX0C`tY_(TfwNZ_NU-r^E3jy1#r zx$c7nl&ODUI~P1AVWd`~Qs4{`t;>@9T;eD0*NBbrS+XQj2HI#2=opHuWQ_{1-nnB! zOMVp@0cQU@XRF^wgGFYRw+j)2cq$CU!o3cU4&jkYNbJ#C5*SzrVxVn=HL{z4HDI++ za?R1=3IN;0IZV}4$b+=qErk$6cccD0Kfvk8ot0aR1}L{0ti4k6fB)gyJh?cYP%?lk zV1+f1T_}~6H1%oakLrP*DjDDJ%=zTLuN;C8`Qt>5Io;dH%k~2Ynvkks7v-DNA`9dO zODLq0M;+vHuUSbzn_wjHP~=S*rf>v|TzKtJTcWwIC!( z=0ZKixR1boWC=z?524&(9zw*VH2%p;a+9VWs|0PGgL0P~naeE!D_%W!n3ho9u-}TN z$`MEyaW(V+H-T>@SqVUR>C&bwJJSovl0R$}pweX^z=)GulV#4n#mr)wSZ$=kJo* ziD4qe&mm4D+HgQLxs`#U*1PhICS+(9(!vl7S9L`>>XU11uc_1q5Ht4}c$Hh)4guAc zyBOf^Co&!c!Xf=6Wm4MDr;kkOHGr{*vPs!Y5D3i!KwtuW;-{{ky=1c&0y74vT;NV+ zA5aZ}lFcaUQNn1%LK&Yu4Y#sD1=QXF;K_*)0o$6IB{CNz&O0FAM$% zg2`{d6~}J1`R+Y;U$cz9E(IQ~j?}S~(lQDs6$@~=xRx?`K-L+^$6j~!m;K4-Ha8jy zU)d(lf-A1M^}$rYf5gc`GP0zwkTm!oYo0#2s`uHm)X2&0QQ(`R`8b^ndy0TKl*wvZ znCW%HUw8jQ@l^$O&$~y(7XpgbhIR*Opab^+t;OcQfCs$sK1by z5&J>*lK%~UoG_c)=(s>zn?x;4t>^?8Cwr)Ss$#XO5fScwbtjmmi1HAz*a|_)c!oqX z;A->c2W~D%v>Y;ca2$0KNEV&eC{NEPfvM@o*KLkn*Fpw=soN5QYcG2jz1cFlF4IS~ zF`)ikaKq(>^7J3xUoKS_KXR|%@NROe??ySiyK$qTrj5b^GFlyQeZ|6gC3MFmZ{=r8 zXB)MFVj8(bd6i~sc;3d^)Zd#w(y;a}Iij&+h34V*DPXG)IeDk2hJh z92k~01IO5? z*R)@G>)Q``JKjchH#K&xuRoGMCuMcWdfmX9vuC^`yLgv$S1H~`mc0Ax?iW;n<|y+7liYQ{K_DS?tAs zmvvn^G^+VH@5&<=!$VFUz+yjTgmJ{M*YE88bS~~{pF2*un`}GkycciQ^c7A05834m zR)$90`P#2|Mz@tiZ&^m=mgcK3G?Wib%e&I&h40XcE?rBHHtZOu>K{EztMT8 zZ#dnGhj=&NZjWQ&`rEDa?N3#Fo;_3ZmUefaFV>BUS$BF&QH#4fyPT^2oI1}mpye;a z+B=L0iir2$Q4>+$Jw&N=?q=%GDra7^%re=}#}A7+pHyuWv+YnBcpu0_aCEFbFG?3H$R`}PjS>q>dQHJYr{!_O;y zo!4EsQ!+PfLyn1SeTaFd;_K=t^*ZfbyYTLIrz#A8pJ@NNS*@eDk(Z{We2BEj3#!jd2k4y4Hqy6emF(q( zEWAs6N{;x4Em2g9IzO)o%;-0Sk6-W9Dl#DE*;@aW^TN+)J|*Hai)6<%a6<=g~bQF2=ccJym@s*|Md_tG%`pGrrx|A~N1TO>g#{>;7A9j*Xfh z^SkOwj{8sLJ`K(W&2l$i$;r=g-y6I{2~TP9B+i?ygm-psw4c2j6;<6R`SVPc(9x8A8qjUb0{{;?xJ7&<8Jxk=M5V#um)R3=aS*?GzVWCvN%iEepaJ2T?b~s_^RXMLR^E)0Y*x64lyyng?d3iJ@ z9BN4G!NM8xmTDeq?4u{cPldd$wLWk+KjR2z?tGt8ui#hOql1z=oDWpp$SF>#-tXzH z#0HJ^P$7zmU!OP9Z+yc6S|_WU-mw2a zf7JBWS(hIv5zFIVRh-Yh7@1OK+_XrnZ_}sbhZ{d7uU7Cc9?a35TiXCwITkEyzy z(6BUrpsPNSWcYNgzqA#*!fvXXmSb1*<{JO^j}0OeCeo7pb@r0~y}(c_&@IC%yCAGBrU Ag#Z8m literal 0 HcmV?d00001 diff --git a/Makefile b/Makefile index 0805b2f..f8d061d 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,27 @@ installDir = ${pkgdir}/usr/local/bin -list = ./maat-builder -systemdList = ./maat-builder.timer ./maat-builder.service +list = ./maat +systemdList = ./maat.timer ./maat.service serverRoot = /srv/maat/ -owner=root +owner=maat perms=0755 fileperms=0644 compile: /bin/bash @echo Nothing to compile. -install: ${list} +install: ${list} MaatIcon.png mkdir -p ${installDir} mkdir -p ${pkgdir}${serverRoot}/src mkdir -p ${pkgdir}${serverRoot}/pkg + install -m ${fileperms} -o ${owner} ./MaatIcon.png ${pkgdir}${serverRoot}/pkg mkdir -p ${pkgdir}/usr/lib/systemd/system - for i in ${list}; do install -m ${perms} -o ${owner} $$i ${installDir}; done + for i in ${list}; do install -m ${perms} -o root $$i ${installDir}; done + install -m ${perms} -o ${owner} -d ${pkgdir}/usr/local/etc/Maat/ + touch ${pkgdir}/usr/local/etc/Maat/aur.list; chown ${owner} ${pkgdir}/usr/local/etc/Maat/aur.list; chmod ${fileperms} ${pkgdir}/usr/local/etc/Maat/aur.list for i in ${systemdList}; do install -m 0644 -o root $$i ${pkgdir}/usr/lib/systemd/system; done clean: - cat .gitignore | xargs rm -Rf + cat .gitignore | sudo xargs rm -Rf uninstall: for i in ${list}; do rm -Rf ${installDir}/$$i; done @@ -27,31 +30,32 @@ uninstall: rmdir -p ${pkgdir}${serverRoot}/pkg test: clean - ./maat-builder -T + sudo ./maat -u $$USER -T test -d src - test -d src/cower - test -d src/cower/.git + test -d src/ascii-invaders + test -d src/ascii-invaders/.git test -d src/HelloWorld test -d src/HelloWorld/.git test -d pkg test -d pkg/aur test -f pkg/AniNIX.db test -f pkg/AniNIX.db.sig - test -f pkg/helloworld*.tar.xz + test -f pkg/HelloWorld*.tar.zst test -f pkg/aur/aur.db test -f pkg/aur/aur.db.sig - test -f pkg/aur/cower*.tar.xz + test -f pkg/aur/ascii-invaders*.tar.zst [ `wc -l pkg/index.html | cut -f 1 -d ' '` -eq 24 ] + make clean @echo @echo Tests passed successfully. diff: - for i in ${list}; do if [ -f ${installDir}/$$i ]; then diff "$$i" "${installDir}/$$i"; fi done + for i in ${list}; do if [ -f ${installDir}/$$i ]; then diff "$$i" "${installDir}/$$i"; fi done reverse: - for i in ${list}; do if [ -f ${installDir}/$$i ]; then cp "${installDir}/$$i" "$$i"; fi done + for i in ${list}; do if [ -f ${installDir}/$$i ]; then cp "${installDir}/$$i" "$$i"; fi done checkperm: chown -R ${owner}: ${pkgdir}${serverRoot}/src chown -R ${owner}: ${pkgdir}${serverRoot}/pkg - for i in ${list}; do chown -R ${owner}: "${installDir}/$$i"; chmod ${perms} "${installDir}/$$i"; done + for i in ${list}; do chown -R ${owner}: "${installDir}/$$i"; sudo chmod ${perms} "${installDir}/$$i"; done diff --git a/PKGBUILD b/PKGBUILD index 5f7f2b4..73f9e26 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -19,7 +19,7 @@ conflicts=() replaces=("${pkgname,,}", "aninix-${pkgname,,}") backup=() options=() -install= +install=install changelog= source=() noextract=() @@ -28,7 +28,7 @@ validpgpkeys=() prepare() { git pull - make -C .. test + make -C .. test && make -C .. clean } build() { diff --git a/install b/install new file mode 100644 index 0000000..455adf7 --- /dev/null +++ b/install @@ -0,0 +1,9 @@ +pre_install() { + groupadd maat &>/dev/null + useradd -g maat -d /srv/maat -s /bin/false maat &> /dev/null + chown -R maat:maat /srv/maat &> /dev/null +} + +pre_remove() { + getent passwd maat &>/dev/null && userdel maat &> /dev/null +} diff --git a/maat-builder b/maat similarity index 67% rename from maat-builder rename to maat index c8d1d26..11f8e03 100755 --- a/maat-builder +++ b/maat @@ -9,7 +9,11 @@ # Copyright: WTFPL # # Author: DarkFeather -# +# + +# Arch keys to look for +pkgExt=".pkg.tar.zst" +deprivuser="maat" ### Printing defaults passCell="PASS"; @@ -30,11 +34,11 @@ function Usage() { ### Put the initial content in the webfile function SeedWebFile() { - printf '\n\nAniNIX/Maat -- Build Results\n\n\n\n\n\n\n\n

AniNIX/Maat -- Build Status

\nWEBSTATSGOHERE\n

AnINIX Packages

\n

These are packages written by the AniNIX. Their source is in AniNIX/Foundation.

\n' > "$webfile" + printf '\n\nAniNIX/Maat -- Build Results\n\n\n\n\n\n\n\n

AniNIX/Maat -- Build Status

\nWEBSTATSGOHERE\n

AnINIX Packages

\n

These are packages written by the AniNIX. Their source is in AniNIX/Foundation.

\n' > "$webfile" printf "$tableHead" >> "$webfile" } -### Update the webfile to close up table tags and add stats. +### Update the webfile to close up table tags and add stats. function UpdateWebFile() { sed -i "s#WEBSTATSGOHERE#

These are the AniNIX testing results. We found $passcount passing and $failcount failing packages, with $warncount warnings. It took $runtime seconds to finish.

#" "$webfile" printf '\n\n\n' >> "$webfile" @@ -43,21 +47,23 @@ function UpdateWebFile() { ### Build the package. Assumes a PKGBUILD is resent in the repo. # param suffix: where to store the final package -function BuildPackage() { +function BuildPackage() { suffix="$1" [ `pgrep -afc pacman` -eq 0 ] && rm -Rf /var/lib/pacman/db.lck - nice -n 10 timeout --preserve-status 20m sudo -u "depriv" /usr/sbin/makepkg -sfc --noconfirm --sign &>> "$pkgdir"/"$repodir".txt + nice -n 10 timeout --preserve-status 60m sudo -u "$deprivuser" /usr/sbin/makepkg -sfc --noconfirm --sign &>> "$pkgdir"/"$repodir".txt if [ $? -ne 0 ]; then # Build failed. - printf "$failCell""$warnCell" >> "$webfile" + printf "$failCell""$warnCell" >> "$webfile" else # Build passed. printf "$passCell""" >> "$webfile" # List passing versions - for pkg in `find . -type f | egrep ".pkg.tar.xz$"`; do + for pkg in `find . -type f | grep -E "${pkgExt}""\$"`; do printf "$pkg
" >> "$webfile" - mv "$pkg" "$pkgdir"/"$suffix"; - mv "$pkg"".sig" "$pkgdir"/"$suffix"; + pkgname="$(basename "$pkg" | cut -f 1 -d '.' | sed 's/-[[:digit:]]\+$//')" + find "${pkgdir}/${suffix}/" -name "${pkgname}-[0-9]*" -exec rm {} \; + mv "$pkg" "$pkgdir"/"$suffix"; + mv "$pkg"".sig" "$pkgdir"/"$suffix"; done printf "" >> "$webfile" fi @@ -76,20 +82,27 @@ function BuildRepo() { if [ ! -d "$repodir" ]; then git clone "$repo" fi - cd "$repodir" + cd "$repodir" git reset --hard origin &>/dev/null output="$(git pull 2>&1)" - chown -R "depriv": . - + if [ -n "$incremental" ] && [ $( echo "$output" | grep -c 'Already up to date.' ) -eq 1 ]; then + return; + fi + + chown -R "$deprivuser": . echo "$output" > "$pkgdir"/"$repodir".txt # Find the PKGBuilds in the repo for pkgbuild in `find . -type f -name PKGBUILD`; do cd "$(dirname "$pkgbuild")" # Tell the status file about it. printf ''"$repodir -- $pkgbuild"'' >> "$webfile" - if [ -f Makefile ] && [ `egrep -c '^test:' Makefile` -ge 1 ]; then + if [ -f Makefile ] && [ `grep -E -c '^test:' Makefile` -ge 1 ]; then + # Have to try to install dependencies first + for dep in $(grep makedepends PKGBUILD | cut -f 2 -d '(' | cut -f 1 -d ')' | sed "s/'//g"); do + pacman -Sy "$dep" --noconfirm --needed + done # Check test status. - timeout --preserve-status "$timeout" sudo -u "depriv" /bin/bash -l -c 'make test' &>> "$pkgdir"/"$repodir".txt + timeout --preserve-status "$timeout" sudo -u "$deprivuser" /bin/bash -l -c "cd $PWD; make test" &>> "$pkgdir"/"$repodir".txt if [ $? -ne 0 ]; then # Testing failed. printf "$failCell""$warnCell""$warnCell" >> "$webfile" @@ -98,7 +111,7 @@ function BuildRepo() { printf "$passCell" >> "$webfile" BuildPackage "$suffix" fi - else + else # Can't test -- usually from non-AniNIX repos. printf "$warnCell" >> "$webfile" BuildPackage "$suffix" @@ -108,26 +121,26 @@ function BuildRepo() { cd "$cwd" if [ ! -z "$testing" ]; then break; fi done - cd "$cwd" + cd "$cwd" } -### Update the local repo -function UpdateLocalRepo() { +### Update the local repo +function UpdateLocalRepo() { set -x - cd "$pkgdir" - chown -R "depriv": . + cd "$pkgdir" + chown -R "$deprivuser": . # TODO Add deduplication of updated files -- keep latest 3 versions. - rm -Rf AniNIX.[db,files]* - sudo -u "depriv" repo-add --sign ./AniNIX.db.tar.xz `ls -1 *".pkg.tar.xz"` + rm -Rf AniNIX.[db,files]* + sudo -u "$deprivuser" repo-add --sign ./AniNIX.db.tar.zst `ls -1 *"${pkgExt}"` cd aur/ rm -Rf aur.[db,files]* - sudo -u "depriv" repo-add --sign ./aur.db.tar.xz `ls -1 *".pkg.tar.xz"` + sudo -u "$deprivuser" repo-add --sign ./aur.db.tar.zst `ls -1 *"${pkgExt}"` set +x } # Clear variables aurconf='/usr/local/etc/Maat/aur.list' -baseurl='https://foundation.aninix.net/AniNIX' +baseurl='https://aninix.net/AniNIX' homedir="/srv/maat/" unset incremental unset skipPatching @@ -138,7 +151,7 @@ timeout="90s" starttime=`date +%s` # Parse arguments -while getopts 'b:c:hil:st:Tv' OPTION; do +while getopts 'b:c:hil:st:Tu:v' OPTION; do case "${OPTION}" in b) homedir="${OPTARG}" ;; c) aurconf="${OPTARG}" ;; @@ -147,15 +160,17 @@ while getopts 'b:c:hil:st:Tv' OPTION; do l) cmdstring="$0"; for arg in $@; do if [ "$arg" != "-l" ] && [ "$arg" != "${OPTARG}" ]; then cmdstring="$cmdstring \"${arg}\""; fi; done; exec /bin/bash -c "$cmdstring | tee -a \"${OPTARG}\""; ;; s) skipPatching=1 ;; t) timeout="${OPTARG}" ;; - T) export MAATTESTINGVAR=1; exec $0 -l ./testing.log -v -s -c <(echo https://aur.archlinux.org/cower.git) -b . ;; + T) export MAATTESTINGVAR=1; exec $0 -l ./testing.log -u "$deprivuser" -v -s -c <(echo https://aur.archlinux.org/ascii-invaders.git) -b . ;; + u) deprivuser="${OPTARG}" ;; v) set -x ;; *) usage; exit 1 ;; esac done # Ensure we are up to date -- otherwise, building is not a good plan. -if [ -x `which pacman` ] && [ -z "$skipPatching" ]; then - pacman -Syu --noconfirm; +if [ -x `which pacman` ] && [ -z "$skipPatching" ]; then + pacman -Sc --noconfirm + pacman -Syu --noconfirm if [ $? -ne 0 ]; then echo "Self patching failed -- please investigate!" 1>&2 exit 1 @@ -163,7 +178,7 @@ if [ -x `which pacman` ] && [ -z "$skipPatching" ]; then fi # Ensure work directories live -if [ $( echo "$homedir" | egrep -c '^/') -ne 1 ]; then +if [ $( echo "$homedir" | grep -E -c '^/') -ne 1 ]; then homedir="${PWD}/${homedir}" fi @@ -190,7 +205,7 @@ printf "$tableHead" >> "$webfile" # Build AUR for repo in `cat "$aurconf"`; do - BuildRepo "$repo" aur/; + BuildRepo "$repo" aur; if [ ! -z "$MAATTESTINGVAR" ]; then break; fi done diff --git a/maat-builder.service b/maat.service similarity index 72% rename from maat-builder.service rename to maat.service index c9fae1b..49c0a55 100644 --- a/maat-builder.service +++ b/maat.service @@ -1,10 +1,10 @@ [Unit] -Description=AniNIX::Maat \\ Builder Service +Description=AniNIX/Maat | Builder Service ConditionPathExists=|!/srv/maat/pkg/.lock [Service] ExecStartPre=/usr/sbin/mkdir /srv/maat/pkg/.lock -ExecStart=/usr/local/bin/maat-builder +ExecStart=/usr/local/bin/maat ExecStopPost=/usr/sbin/rmdir /srv/maat/pkg/.lock Type=oneshot RemainAfterExit=no diff --git a/maat-builder.timer b/maat.timer similarity index 70% rename from maat-builder.timer rename to maat.timer index 442b015..936e5fb 100644 --- a/maat-builder.timer +++ b/maat.timer @@ -1,5 +1,5 @@ [Unit] -Description=AniNIX::Maat \\ Builder Timer +Description=AniNIX/Maat | Builder Timer [Timer] OnCalendar=daily